⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 miscproc.c

📁 此压缩包为杰得开发得z228的BSP的源代码,可以实现很多功能,尤其是视频解码有很好的效果.
💻 C
📖 第 1 页 / 共 5 页
字号:
			Adapter->usMacControlRecord &=  ~HostCmd_ACT_MAC_BROADCAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_PROMISCUOUS )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;	

#ifdef WMM
                if ( CurrentPacketFilter & HostCmd_ACT_MAC_WMM_ENABLE )
                    Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WMM_ENABLE;
                else
                    Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WMM_ENABLE;
#endif

	}

// tt ++ wep+tkip
        if ( Adapter->usMacControlRecord & HostCmd_ACT_MAC_PROMISCUOUS_ENABLE )
        {
            DBGPRINT(DBG_WEP, ( L"[Mrvl] promiscuous bit is ON, driver will disable it!\n" ));
            Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
        }
// tt -- 
       

       
       DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+Set HostCmd_CMD_MAC_CONTROL 0x%x \n", Adapter->usMacControlRecord));
	//      Send MAc control command ro station
	Status=PrepareAndSendCommand(
		Adapter, 
		HostCmd_CMD_MAC_CONTROL, 
					Adapter->usMacControlRecord, 
		HostCmd_OPTION_USE_INT,
		(NDIS_OID)0,
		HostCmd_PENDING_ON_NONE, 
		0,
		FALSE,
		NULL,
		NULL,
		NULL,
		NULL);

	return Status;
}
NDIS_STATUS
SetMacPacketFilterOID(
	IN PMRVDRV_ADAPTER Adapter, 
	IN ULONG CurrentPacketFilter
)
{
	NDIS_STATUS Status;

	DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+SetMacPacketFilterOID() 0x%x \n", CurrentPacketFilter));
	
	if (CurrentPacketFilter == 0)
	{
	    Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
	    Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;
	    Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_BROADCAST_ENABLE;
	    Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;	

	    Adapter->usMacControlRecord  |= (HostCmd_ACT_MAC_RX_ON | 
					                     HostCmd_ACT_MAC_TX_ON |
					                     HostCmd_ACT_MAC_INT_ENABLE);
      
    }
	else
	{
		//      Set default MAC option
		Adapter->usMacControlRecord  |= (HostCmd_ACT_MAC_RX_ON | 
					         HostCmd_ACT_MAC_TX_ON );
		
		// need to check if currently the wep is on
		if ( Adapter->WEPStatus == Ndis802_11WEPEnabled )
		{
		    DBGPRINT(DBG_WEP,("WEPStatus set, setting HostCmd_ACT_MAC_WEP_ENABLE in CmdOption\n"));
		    	Adapter->usMacControlRecord |= HostCmd_ACT_MAC_WEP_ENABLE;
		}
		else
		{
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_WEP_ENABLE;	
		}

		if( CurrentPacketFilter & NDIS_PACKET_TYPE_ALL_MULTICAST )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_ALL_MULTICAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_MULTICAST )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_MULTICAST_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_MULTICAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_BROADCAST )
			Adapter->usMacControlRecord |=  HostCmd_ACT_MAC_BROADCAST_ENABLE;
		else
			Adapter->usMacControlRecord &=  ~HostCmd_ACT_MAC_BROADCAST_ENABLE;

		if ( CurrentPacketFilter & NDIS_PACKET_TYPE_PROMISCUOUS )
			Adapter->usMacControlRecord |= HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
		else
			Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;	

	}

// tt ++ wep+tkip
    if ( Adapter->usMacControlRecord & HostCmd_ACT_MAC_PROMISCUOUS_ENABLE )
    {
         DBGPRINT(DBG_WEP, ( L"[Mrvl] promiscuous bit is ON, driver will disable it!\n" ));
         Adapter->usMacControlRecord &= ~HostCmd_ACT_MAC_PROMISCUOUS_ENABLE;
    }
// tt -- 

       
	DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+Set HostCmd_CMD_MAC_CONTROL 0x%x \n", Adapter->usMacControlRecord));

	//      Send MAc control command ro station
	Status = PrepareAndSendCommand(
					Adapter, 
					HostCmd_CMD_MAC_CONTROL, 
					Adapter->usMacControlRecord, 
					HostCmd_OPTION_USE_INT,
					(NDIS_OID)0,
					HostCmd_PENDING_ON_SET_OID,   // TEST
        			//HostCmd_PENDING_ON_NONE,
					0,
					FALSE,
					NULL,
					NULL,
					NULL,
					NULL);

	return Status;
} 



#ifdef UNDER_CE
#ifdef MRVL_PRINT_DBG_MSG
// redirect DBGPrint to a file
#if 0//def MRVL_WINCE50 
   void MrvPrintFile(const char *fmt, ...)
	{
       static  TCHAR   szHeader[] = TEXT("TUX_CF: ");
       TCHAR   szBuffer[1024];
	   TCHAR   szFormat[1024];

       va_list pArgs;
       va_start(pArgs, fmt);
	   MultiByteToWideChar(CP_ACP, 0,fmt, 1024, szFormat,1024);

       lstrcpy(szBuffer, szHeader);
       wvsprintf(
           szBuffer,
           szFormat,
           pArgs);
       va_end(pArgs);

       _tcscat(szBuffer, TEXT("\r\n"));

       OutputDebugString(szBuffer);
	}
#else  //#ifdef MRVL_WINCE50
void MrvPrintFile(const char *fmt, ...)
{
    va_list     argP;
    FILE        *MrvDbgfp;
    DWORD       dwThreadID;
    DWORD       dwTick;


	#ifdef IF_SDIO
	       MrvDbgfp = fopen("\\My Documents\\MrvlSD-25DBG.txt","a+");
	#else	///IF_SDIO
           MrvDbgfp = fopen("\\My Documents\\MrvlCF-25DBG.log","a+");
    #endif	///IF_SDIO
    //MessageBox(NULL, TEXT("printdbgmsg"), TEXT("CF25"), MB_OK);
    if ( MrvDbgfp == NULL )
    {
        //MessageBox(NULL, TEXT("open file failed"), TEXT("CF25"), MB_OK);
        return;
    }

    dwThreadID = GetCurrentThreadId();
    dwTick = GetTickCount();

    fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);

    va_start(argP, fmt);
    vfprintf(MrvDbgfp, fmt, argP);
    fflush(MrvDbgfp);

    va_end(argP);

    fclose(MrvDbgfp);
}
#endif  //#ifdef MRVL_WINCE50
#endif // #ifdef MRVL_PRINT_DBG_MSG
#endif // #ifdef UNDER_CE

#ifdef MRVL_PRINT_FILE_MSG
void MrvPrintFileMSG(const char *fmt, ...)
{
    va_list     argP;
    FILE        *MrvDbgfp;
    DWORD       dwThreadID;
    DWORD       dwTick;

     MrvDbgfp = fopen("\\My Documents\\MrvPrintFileMSG.txt","a+");
	
    //MessageBox(NULL, TEXT("printdbgmsg"), TEXT("CF25"), MB_OK);
    if ( MrvDbgfp == NULL )
    {
        //MessageBox(NULL, TEXT("open file failed"), TEXT("CF25"), MB_OK);
        return;
    }

    dwThreadID = GetCurrentThreadId();
    dwTick = GetTickCount();

    fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);

    va_start(argP, fmt);
    vfprintf(MrvDbgfp, fmt, argP);
    fflush(MrvDbgfp);

    va_end(argP);

    fclose(MrvDbgfp);
}
#endif  //MRVL_PRINT_FILE_MSG

void AllenPrintFile(const char *fmt, ...)
{
    	va_list     	argP;
    	FILE        	*MrvDbgfp;
    	DWORD       	dwThreadID;
    	DWORD       	dwTick;

    	MrvDbgfp = fopen("\\My Documents\\MrvlCF-25DBG.log","a+");

    	//MessageBox(NULL, TEXT("printdbgmsg"), TEXT("CF25"), MB_OK);
    	if ( MrvDbgfp == NULL )
    	{
       	//MessageBox(NULL, TEXT("open file failed"), TEXT("CF25"), MB_OK);
        	return;
    	}

    	dwThreadID = GetCurrentThreadId();
    	dwTick = GetTickCount();

//    	fprintf(MrvDbgfp, "%8x:%d:", dwThreadID, dwTick);

    	va_start(argP, fmt);
    	vfprintf(MrvDbgfp, fmt, argP);
    	fflush(MrvDbgfp);

    	va_end(argP);

    	fclose(MrvDbgfp);
}

/******************************************************************************
 *
 *  Name: ConvertNDISRateToFWIndex()
 *
 *  Description: Look up the FW index for the rate
 *
 *  Arguments:	NDISRate    Rate in NDIS format
 *    
 *  Return Value: Equivalent index in FW, return MRVDRV_NUM_SUPPORTED_RATES 
 *                if no matching rate is found
 * 
 *  Notes:
 *
 *****************************************************************************/
UCHAR   ConvertNDISRateToFWIndex(UCHAR  NDISRate)
{
    UCHAR i;

    for ( i=0; i < MRVDRV_NUM_SUPPORTED_RATES; i++ )
    {
        if ( NDISRate == MrvDrvSupportedRates[i] )
        {
            return i;
        }
    }

    return MRVDRV_NUM_SUPPORTED_RATES;
}

/******************************************************************************
 *
 *  Name: ConvertFWIndexToNDISRate()
 *
 *  Description: Look up the rate for FW index
 *
 *  Arguments:	FWIndex
 *    
 *  Return Value: Equivalent NDIS Rate, return 0 
 *                if no matching rate is found
 * 
 *  Notes:
 *
 *****************************************************************************/
UCHAR   ConvertFWIndexToNDISRate(UCHAR  FWIndex)
{
    if ( FWIndex >= MRVDRV_NUM_SUPPORTED_RATES )
    {
        return 0;
    }

    return MrvDrvSupportedRates[FWIndex];
}

//lykao, 053005, for Hidden SSID, from Plus			   
UCHAR FindSSIDInList(
      IN PMRVDRV_ADAPTER Adapter,
      IN PNDIS_802_11_SSID pSSID)
{
	UCHAR i, index = 0xFF;                   

	for (i=0; i<Adapter->ulNumOfBSSIDs; i++)
	{
		if(Adapter->BSSIDList[i].Ssid.SsidLength == pSSID->SsidLength)
		{

		    if(NdisEqualMemory(Adapter->BSSIDList[i].Ssid.Ssid, 
				       pSSID->Ssid, pSSID->SsidLength))
                             index = i;
                }
         }
         
         return index;
                             				        
}	

#ifdef AUTO_REASSOCIATION
UCHAR FindBSSIDInList(
      IN PMRVDRV_ADAPTER Adapter,
      IN PVOID pBssid )
{
	UCHAR i, index = 0xFF;                   

	for (i=0; i<Adapter->ulNumOfBSSIDs; i++)
	{
		if ( pBssid && 
			NdisEqualMemory( Adapter->BSSIDList[i].MacAddress, pBssid, MRVDRV_ETH_ADDR_LEN) )
		{
			index = i;
			break;
		}
         }
         
         return index;
                             				        
}
#endif
#ifdef ADHOCAES
/******************************************************************************
 *
 *  Name: ascii2hex()
 *
 *  Description: convert acssic hex string to hex value
 *
 *  Arguments:	s-->input string  d-->output value array  dlen-->input length
 *    
 *  Return Value: 
 * 
 *  Notes: for ADHOCAES key convert to sync. with linux driver
 *
 *****************************************************************************/
int ascii2hex(UCHAR *d, char *s, int dlen)
{
	int i;
	UCHAR n;

	NdisZeroMemory(d, dlen);
	for (i = 0; i < dlen * 2; i++) 
	{
		/*
		if ((s[i] >= 48) && (s[i] <= 57))
			n = s[i] - 48;
		else if ((s[i] >= 65) && (s[i] <= 70))
			n = s[i] - 55;
		else if ((s[i] >= 97) && (s[i] <= 102))
			n = s[i] - 87;
		else
			break;
            */   
		n=s[i];
		if ((i % 2) == 0)
			n = n * 16;
		d[i / 2] += n;
	}

	return i;
}
#endif

// The function just filter and reorganize WPA IE now and will skip WMM IE
VOID
RegularIeFilter(UCHAR *IeBuf, USHORT *pBufLen)
{
	UCHAR   IeId;
    UCHAR   IeLen,TmpIeLen;
	USHORT  CurPos =0;
    UCHAR   TmpBuf[500];
	USHORT  TmpPos = 0;
	BOOLEAN IsWpaFound = FALSE;
	UCHAR   WPA_OUI[] = { 0x00, 0x50, 0xF2, 0x01};
#ifdef WMM	
	UCHAR   WMM_OUI[] = { 0x00, 0x50, 0xF2, 0x02};
#endif	
#ifdef CCX
	UCHAR   CCX_OUI[] = { 0x00, 0x40, 0x96};
#endif	

	NdisMoveMemory( TmpBuf, IeBuf ,*pBufLen);

    //DBGPRINT(DBG_ALLEN, ("RegularIeFilter++  *pBufLen = %d\n", *pBufLen));

	//HexDump(DBG_ALLEN, "IeBuf ", IeBuf, *pBufLen);
	
    while (TmpPos < *pBufLen)
    {
    	IeId  = *(TmpBuf + TmpPos);
		TmpIeLen = *(TmpBuf + TmpPos + 1);
        IeLen = TmpIeLen;
		
        switch (IeId)
        {
	    case 0xdd:  // WPA IE or WMM IE
	   {
 		if (NdisEqualMemory((TmpBuf + TmpPos + 2), WPA_OUI, 4) == 1) //WPA IE
		{
                     if (!IsWpaFound)
                     {
		          NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
		          HexDump(DBG_WPA, "WPA IE ", (IeBuf + CurPos), TmpIeLen + 2);    
			  CurPos += (TmpIeLen + 2);
		          IsWpaFound = TRUE;
		     }    
                }
#ifdef CCX
					else if ( NdisEqualMemory( (TmpBuf + TmpPos + 2), CCX_OUI, 3 ) == 1 )
					{
							NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
					    		CurPos += (TmpIeLen + 2);
					}
#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -