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

📄 hwacproc.c

📁 marvell wifi driver CF-8385PN-NDIS-ARM4-WINCE50-5.24.17.p5-27.p11.src.zip
💻 C
📖 第 1 页 / 共 5 页
字号:
    	ULONG           ulTimeDiff;

    	NdisZeroMemory(&message, sizeof(WPA_NOTIFY_OS));
    	NdisMoveMemory(message.request.Bssid, Adapter->CurrentBSSID, 
       	         sizeof(Adapter->CurrentBSSID));
    	message.request.Length = sizeof(NDIS_802_11_AUTHENTICATION_REQUEST);
    	message.status.StatusType= Ndis802_11StatusType_Authentication;
    
    	switch (ErrorType)
    	{

    	case MACREG_INT_CODE_WPA_MIC_ERR_UNICAST:
       		message.request.Flags = NDIS_802_11_AUTH_REQUEST_PAIRWISE_ERROR;
        		DBGPRINT(DBG_WARNING | DBG_ALLEN, ("Pairwise MIC Error!\n"));
        		break;

    	case MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST:
       	   	message.request.Flags = NDIS_802_11_AUTH_REQUEST_GROUP_ERROR;
       	    	DBGPRINT(DBG_WARNING | DBG_ALLEN, ("Groupwise MIC Error!\n"));
       	    	break;

    	default:
        		DBGPRINT(DBG_ERROR | DBG_ALLEN, ("HandleMicError(): do not know how to handle error code 0x%x!\n",
                            ErrorType));
        		// skip the indication
        		return;
    	}

    	NdisMIndicateStatus(Adapter->MrvDrvAdapterHdl,
                        NDIS_STATUS_MEDIA_SPECIFIC_INDICATION,
                        &message,
                        sizeof(WPA_NOTIFY_OS));
    	NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
    	DBGPRINT(DBG_WARNING | DBG_ALLEN, ("Indicated MIC error!\n"));

    	NdisGetSystemUpTime(&ulCurrTime);
    
    	if ( ulCurrTime > Adapter->ulLastMICErrorTime )
    	{
       	ulTimeDiff = ulCurrTime - Adapter->ulLastMICErrorTime;
   	}
    	else
    	{
       	ulTimeDiff = 0xFFFFFFFF - Adapter->ulLastMICErrorTime + ulCurrTime;
    	}

    	Adapter->ulLastMICErrorTime = ulCurrTime;
}
 
/******************************************************************************
 *
 *  Name: HandleAdHocModeLink()
 *
 *  Description: Handle link sensed and bcn lost event in adhoc mode
 *
 *  Arguments:	PMRVDRV_ADAPTER Adapter
 *				UINT INTCode
 *    
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
HandleAdHocModeLink(
    	IN PMRVDRV_ADAPTER Adapter, 
	IN UINT INTCode)
{
    	if ( Adapter->InfrastructureMode != Ndis802_11IBSS )
    	{
       	DBGPRINT(DBG_WARNING, ("HandleAdHocModeLink(): Currently NOT in adhoc "
            							"mode, event IGNORED!\n"));
        	return;
    	}
} 

/******************************************************************************
 *
 *  Name: HandleMACEvent()
 *
 *  Description: MAC event handler
 *
 *  Arguments:	PMRVDRV_ADAPTER Adapter
 *				UINT INTCode
 *    
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
HandleMACEvent(
	IN PMRVDRV_ADAPTER Adapter, 
	IN UINT INTCode)
{
    	// ULONG i;
    	// CmdCtrlNode *pTempNode;
      PNDIS_PACKET pPacket; 

    	switch( INTCode ) {	
	
 #ifdef BG_SCAN
    	case MACREG_INT_CODE_BG_SCAN_REPORT:

		//RETAILMSG(1, (TEXT("MACREG_INT_CODE_BG_SCAN_REPORT \r\n")));	
		
#ifdef DEEP_SLEEP
		if (Adapter->IsDeepSleep == TRUE)
              {
			Adapter->IsDeepSleep = FALSE;
			Adapter->IsDeepSleepRequired= FALSE; 
              }
#endif   	
		DBGPRINT( DBG_SCAN, ("MACREG_INT_CODE_BG_SCAN_REPORT: \n") );

	       if ( Adapter->PSMode == Ndis802_11PowerModeMAX_PSP )
	       {
	       	Adapter->PSMode = Ndis802_11PowerModeCAM;
                     PSWakeup(Adapter);
			Adapter->bPSEnableBGScan=TRUE;
	       }
		
        	HandleBgScanResultEvent( Adapter );

		break;
#endif 		
	
    	case MACREG_INT_CODE_TX_PPA_FREE: // 05/28/02 TX PPA is available

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_TX_PPA_FREE: \n"));
		break;
    
	case MACREG_INT_CODE_TX_DMA_DONE: // TX DMA finished

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_TX_DMA_DONE: Unimplemented"));
		break;

	case MACREG_INT_CODE_LINK_SENSED: //Link found

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_LINK_SENSED\n"));
              HandleAdHocModeLink(Adapter, MACREG_INT_CODE_LINK_SENSED);
		break;

       case MACREG_INT_CODE_ADHOC_BCN_LOST:    // last partner in adhoc mode left

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_ADHOC_BCN_LOST\n"));	
		if ( Adapter->CurPowerState == NdisDeviceStateD0)
		{
              	HandleAdHocModeLink(Adapter, MACREG_INT_CODE_ADHOC_BCN_LOST);
		}
		break;

       case MACREG_INT_CODE_DEAUTHENTICATED:

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_DEAUTHENTICATED\n"));


              if (Adapter->bIsDeauthenticaticationEvent == FALSE)
              {
			Adapter->bIsDeauthenticaticationEvent = TRUE;
			
              	MacEventDisconnected(Adapter, 5000, FALSE);

		       InfraBssReconnectStart( Adapter, RECONNECT_DEAUTHENTICATE );
              }
              break;
		
       case MACREG_INT_CODE_DISASSOCIATED:

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_DISASSOCIATED\n"));

              // when disassociated, the number of bssid should be 0
              //Adapter->ulNumOfBSSIDs = 0;
              //Adapter->ulPSNumOfBSSIDs = 0;
              //Adapter->ulHiddenNumOfBSSIDs = 0;	  
		MacEventDisconnected(Adapter,(UINT) MRVDRV_TEN_SECS_TIMER_INTERVAL, TRUE);
              break;

       case MACREG_INT_CODE_LINK_LOSE_W_SCAN: // Link lost

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_LINK_LOSE_W_SCAN\n"));
		//RETAILMSG(1, (TEXT("MACREG_INT_CODE_LINK_LOSE_W_SCAN  \r\n")));
		
		if( Adapter->CurPowerState == NdisDeviceStateD0)
		{
                     Adapter->bIsBeaconLoseEvent = TRUE;
#ifdef ACTIVE_ROAMING
	     		ActiveRoamingStop(Adapter);
#endif			
			MacEventDisconnected(Adapter, Adapter->TimerInterval,FALSE);

			InfraBssReconnectStart( Adapter, RECONNECT_LINK_LOST );
		}	
		break;

	case MACREG_INT_CODE_LINK_LOSE_NO_SCAN:

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_LINK_LOSE_NO_SCAN\n"));
//		RETAILMSG(1, (TEXT("MACREG_INT_CODE_LINK_LOSE_NO_SCAN  \r\n")));

		if ( Adapter->CurPowerState == NdisDeviceStateD0)
  		{
			Adapter->bIsBeaconLoseEvent = TRUE;
		
#ifdef ACTIVE_ROAMING
	     		ActiveRoamingStop(Adapter);
#endif	
		
#ifdef HOST_WAKEUP
              	if ( Adapter->bHostWakeCfgSet == 1 )
                	{
                    		Deactivate_Host_Wakeup_Cfg(Adapter);
                    		Adapter->bHostWakeCfgSet = 0;
                	}
#endif
                
              	MacEventDisconnected(Adapter, 5000,FALSE);

			InfraBssReconnectStart( Adapter, RECONNECT_LINK_LOST );
  		}

		break;

	case MACREG_INT_CODE_PS_SLEEP:

		// RETAILMSG(1, (TEXT("MACREG_INT_CODE_PS_SLEEP >>> ")));
              DBGPRINT(DBG_MACEVENT ,("MACREG_INT_CODE_PS_SLEEP\n"));
              UpdatePowerSaveState( Adapter, NULL, MACREG_INT_CODE_PS_SLEEP);
	       break;

	case MACREG_INT_CODE_PS_AWAKE:
        
		// RETAILMSG(1, (TEXT("MACREG_INT_CODE_PS_AWAKE >>> ")));
              DBGPRINT(DBG_MACEVENT ,("MACREG_INT_CODE_PS_AWAKE\n"));
	       UpdatePowerSaveState( Adapter, NULL, MACREG_INT_CODE_PS_AWAKE);
		
		GetCmdFromQueueToExecute (Adapter);

    		EnterCriticalSection(&Adapter->TxCriticalSection);
    		if ( Adapter->TxPacketCount && Adapter->SentPacket == NULL)
    		{  
       		    NDIS_STATUS Status;
		
       		    pPacket = Adapter->SendPackets[Adapter->TxPacketGet];
       		    Status = SendSinglePacket(Adapter,pPacket);
       		    if (Status == NDIS_STATUS_SUCCESS)
       		    {
           			//RETAILMSG(1,(TEXT("PS_AWAKE: Packet is Sent \r\n")));
           			Adapter->TxPacketGet++;
           			Adapter->TxPacketGet %= MAX_TX_PACKETS;
       		    }
       		    else
           	 		DBGPRINT(DBG_ERROR , ("PS_AWAKE:Send packet fail %d \r\n", Adapter->TxPacketGet));;
    		}
    		LeaveCriticalSection(&Adapter->TxCriticalSection);

		break;

#ifdef DEEP_SLEEP
	case MACREG_INT_CODE_DS_AWAKE:
		
 		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_DS_AWAKE\n"));
		
		if (Adapter->IsDeepSleep == TRUE) 
		{
			Adapter->IsDeepSleep = FALSE;
			Adapter->IsDeepSleepRequired= FALSE;
		}		

		InfraBssReconnectStart ( Adapter, RECONNECT_DEEP_SLEEP_AWAKE);
		
		break;
#endif

#ifdef HOST_WAKEUP
	case MACREG_INT_CODE_HOST_WAKE_UP:
        	{
            		DBGPRINT(DBG_MACEVENT | DBG_HOSTWAKEUP,("MACREG_INT_CODE_HOST_WAKE_UP\n"));

            		Adapter->HostPowerState = HTWK_STATE_FULL_POWER;
        
            		UpdatePowerSaveState(Adapter, NULL, MACREG_INT_CODE_PS_AWAKE);

			PrepareAndSendCommand(
		       		Adapter,
		        		HostCmd_CMD_802_11_HOST_SLEEP_AWAKE_CONFIRM,
		        		0,					
		        		HostCmd_OPTION_USE_INT,
		        		0,
		        		HostCmd_PENDING_ON_NONE,
		        		0,
		        		FALSE,
		       	 	NULL,
		        		NULL,
		        		NULL,
		        		NULL); 

        	}    
		break;
#endif

	case MACREG_INT_CODE_CMD_FINISHED: // Command finished

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_CMD_FINISHED\n"));
		HandleCommandFinishedEvent(Adapter);
		break;

       case MACREG_INT_CODE_WPA_MIC_ERR_UNICAST:

	       DBGPRINT(DBG_MACEVENT | DBG_ALLEN, ("MACREG_INT_CODE_WPA_MIC_ERR_UNICAST\n"));
              HandleMicError(Adapter, MACREG_INT_CODE_WPA_MIC_ERR_UNICAST);
              break;

       case MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST:

		DBGPRINT(DBG_MACEVENT | DBG_ALLEN, ("MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST\n"));
              HandleMicError(Adapter, MACREG_INT_CODE_WPA_MIC_ERR_MULTICAST);
              break;

	case MACREG_INT_CODE_RSSI_LOW:

#ifdef ACTIVE_ROAMING
		       
	  	Adapter->bIsActiveRoaming =TRUE;
		ActiveRoamingStart (Adapter);	
#endif 		
		DBGPRINT(DBG_MACEVENT, ("MACREG_INT_CODE_RSSI_LOW\n"));
		break;
	case MACREG_INT_CODE_SNR_LOW:
		DBGPRINT(DBG_MACEVENT, ("MACREG_INT_CODE_SNR_LOW\n"));
		break;
	case MACREG_INT_CODE_MAX_FAIL:
		DBGPRINT(DBG_MACEVENT, ("MACREG_INT_CODE_MAX_FAIL\n"));
		break;

	// PJG: not implemented in the firmware. (in original fw from marvell)
	case MACREG_INT_CODE_MIB_CHANGED:
	case MACREG_INT_CODE_INIT_DONE:
	default: 
		break;
	}
    
	return;
}


/******************************************************************************
 *
 *  Name: MacEventDisconnected()
 *
 *  Description: MAC event handler for link lost condition, disassociation,
 *					deauthentication
 *
 *  Arguments:	PMRVDRV_ADAPTER Adapter
 *    
 *  Return Value:        
 * 
 *  Notes:               
 *
 *****************************************************************************/
VOID
MacEventDisconnected(
	PMRVDRV_ADAPTER Adapter,
	UINT TimerValue,
	BOOLEAN PowerFlag
	)
{
	DBGPRINT(DBG_NEWPS | DBG_NEWCMD | DBG_ALLEN, ("MacEventDisconnected() \n"));

	//  need to clean up Rx and Tx first
	CleanUpSingleTxBuffer(Adapter);
	ResetRxPDQ(Adapter);

    	if ((Adapter->MediaConnectStatus == NdisMediaStateConnected) && 
           (Adapter->PSMode == Ndis802_11PowerModeMAX_PSP))
    	{
      		PSWakeup(Adapter);
    	}
	
	//  need to report disconnect event if currently associated
	if ( Adapter->MediaConnectStatus == NdisMediaStateConnected )
    	{				
		USHORT usCommand;
		/*
	    	// send a scan command to get the latest AP list 
	    	PrepareAndSendCommand(
		    		Adapter,
		    		HostCmd_CMD_802_11_SCAN,
		    		0,
		    		HostCmd_OPTION_USE_INT,
		    		(NDIS_OID)0,
		    		HostCmd_PENDING_ON_NONE,
		    		0,
		    		FALSE,
		    		NULL,
		    		NULL,
		    		NULL,
		    		NULL);
		*/		    		

		if ( Adapter->InfrastructureMode == Ndis802_11Infrastructure )
              	usCommand = HostCmd_CMD_802_11_DEAUTHENTICATE;
            	else
              	usCommand = HostCmd_CMD_802_11_AD_HOC_STOP;

 usCommand = HostCmd_CMD_802_11_DISASSOCIATE;
 

⌨️ 快捷键说明

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