miscproc.c

来自「marvell8385 GSPI开发驱动」· C语言 代码 · 共 2,087 行 · 第 1/4 页

C
2,087
字号
	NdisMIndicateStatus(
		Adapter->MrvDrvAdapterHdl,
		NDIS_STATUS_MEDIA_DISCONNECT,
		(PVOID)NULL,
		0); 	
V5DbgMsg( (L"** after  indicate1 (%d) (%d)\n", s_nCallCount, GetTickCount()) );
	NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
V5DbgMsg( (L"** after  indicate2 (%d) (%d)\n", s_nCallCount, GetTickCount()) );

    Adapter->ulLastMICErrorTime = 0;
    
    if ( Adapter->EncryptionStatus == Ndis802_11Encryption2Enabled )
    {
        // set to key absent
        Adapter->EncryptionStatus = Ndis802_11Encryption2KeyAbsent;
    }
    else if ( Adapter->EncryptionStatus == Ndis802_11Encryption3Enabled )
    {
        // set to key absent
        Adapter->EncryptionStatus = Ndis802_11Encryption3KeyAbsent;
    }
    #ifndef REASSOCIATE	
    else if ( Adapter->EncryptionStatus == Ndis802_11Encryption1Enabled )
    {
        // set to key absent
        Adapter->EncryptionStatus = Ndis802_11Encryption1KeyAbsent;
    }
   #endif
#ifdef MRVL_GUI_INTERFACE
		MrvlNotifyApplication(
				COMMAND_EVENT_DISCONNECT,
				NULL,
				0);
#endif // MRVL_GUI_INTERFACE
   //RETAILMSG(1,(TEXT("[Marvell]-ResetDisconnectStatus()")));
	return;
}	


VOID
ResetSingleTxDoneAck(
	IN PMRVDRV_ADAPTER Adapter
)
{
				
}	
NDIS_STATUS
SetMacPacketFilter(
	IN PMRVDRV_ADAPTER Adapter, 
	IN ULONG CurrentPacketFilter
)
{
	NDIS_STATUS Status;

    	DBGPRINT(DBG_WEP | DBG_CRLF | DBG_ALLEN ,("+SetMacPacketFilter() 0x%x \n", CurrentPacketFilter));
	// if the CurrentPacketFilter is 0, turn off Rx

	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;	

	}

       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;	

	}

	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];
	 char  szBuffers[1024];
	 //char   szFormat[1024];

       va_list pArgs;
       va_start(pArgs, fmt);

      // lstrcpy(szBuffer, szHeader);
       _vsnprintf(//vswprintf(//wvsprintf(
           szBuffers,
           1023,
           fmt,
           pArgs);
       //va_end(pArgs);

       _tcscat(szBuffer, TEXT("\r\n"));
	 MultiByteToWideChar(CP_ACP, 0,szBuffers, 1024, szBuffer,1024);
       //OutputDebugString(szBuffer);
       RETAILMSG(1,(szBuffer));
	}
#else  //#ifdef MRVL_WINCE50
void MrvPrintFile(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);
}
#endif  //#ifdef MRVL_WINCE50
#endif // #ifdef MRVL_PRINT_DBG_MSG
#endif // #ifdef UNDER_CE


/******************************************************************************
 *
 *  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
//modify by Stephen Zhang on 2007-02-13
//Scan-list has been refreshed yet,
//so it has been restored in Adapter->PSBSSIDList! 
UCHAR FindSSIDInList(
      IN PMRVDRV_ADAPTER Adapter,
      IN PNDIS_802_11_SSID pSSID)
{
	UCHAR i, index = 0xFF;                   

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

		    if(NdisEqualMemory(Adapter->PSBSSIDList[i].Ssid.Ssid, 
				       pSSID->Ssid, pSSID->SsidLength) 
				       /*Add Hidden SSID match support.
				       /*Modify by Stephen Zhang on 2007-03-27
				       */
				       ||(Adapter->PSBSSIDList[i].Ssid.Ssid[0] == '\0'))
                             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
/******************************************************************************
 *
 *  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 AsciiToHex(unsigned char *d, char *s, int dlen)
{
	int i;
	unsigned char 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] - 65;
		else if ((s[i] >= 97) && (s[i] <= 102))
			n = s[i] - 97;
		else
			break;
		if ((i % 2) == 0)
			n = n * 16;
		d[i / 2] += n;
	}

	return i;
}

// 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	
	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 WMM                		
                 else if(NdisEqualMemory((TmpBuf + TmpPos + 2), WMM_OUI, 4) == 1) // WMM IE 
                {
		     NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
//	             HexDump(DBG_WMM, "WMM IE ", (IeBuf + CurPos), TmpIeLen + 2);    
	             CurPos += (TmpIeLen + 2);
                }
#endif                		
           }
           break;
	
	   default:

		NdisMoveMemory((IeBuf + CurPos), (TmpBuf + TmpPos), TmpIeLen + 2);
		HexDump(DBG_ALLEN, "ELSE IE ", (IeBuf + CurPos), TmpIeLen + 2);
		CurPos += (TmpIeLen + 2);
		
	   break;
	} // end of switch
		
		TmpPos += (TmpIeLen + 2);
    }//while	

    *pBufLen = CurPos;

	//HexDump(DBG_ALLEN, "IeBuf ", IeBuf, *pBufLen);
	
	//DBGPRINT(DBG_ALLEN, ("RegularIeFilter-- *pBufLen = %d\n", *pBufLen));
	return; 
}

#ifdef REASSOCIATE
VOID
InfraBssReconnectStart(
		IN PMRVDRV_ADAPTER Adapter,
		IN USHORT reason )
{
	DBGPRINT(DBG_ALLEN|DBG_DEBUGUSE, ("[Marvell]InfraBssReconnectStart() , reason = 0x%x, Adapter->EncryptionStatus =%d \n", reason,Adapter->EncryptionStatus));

       // we just support  open and wep reconnect
	if ( (Adapter->EncryptionStatus != Ndis802_11WEPEnabled) &&
    	     (Adapter->EncryptionStatus != Ndis802_11WEPDisabled) &&
	     (Adapter->EncryptionStatus != Ndis802_11WEPKeyAbsent) &&
	     (Adapter->EncryptionStatus != Ndis802_11WEPNotSupported) )
	{
		return;
	}

	Adapter->ReInfrastructureMode = Adapter->InfrastructureMode; 
	Adapter->ReAuthenticationMode = Adapter->AuthenticationMode;
	Adapter->ReEncryptionStatus = Adapter->EncryptionStatus;
	NdisMoveMemory(  &(Adapter->ReWEPKey), 
					&(Adapter->LastAddedWEPKey),
					sizeof(MRVL_WEP_KEY));
	NdisMoveMemory(  &(Adapter->ReSSID),
                            	&(Adapter->PreviousSSID), 
					sizeof(NDIS_802_11_SSID));
	
      	switch (reason)
	{
		case RECONNECT_ASSOCIATE_FAIL:
			
			Adapter->bIsReconnectEnable = TRUE;
			Adapter->usReconnectCounter = 1;
			Adapter->ulReconnectPeriod = 0;
			Adapter->ulStartTimeStamp = 0;
			Adapter->ReconnectType = RECONNECT_COUNTER_TYPE;
			Adapter->bIsAcceptSystemConnect = FALSE;
			break;
			

⌨️ 快捷键说明

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