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

📄 hwacproc.c

📁 Windows CE 6.0 BSP for VOIP sample phone. Intel PXA270 platform.
💻 C
📖 第 1 页 / 共 5 页
字号:
        		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;
    	}

#ifdef MRVL_MIC_ERROR
    NdisMSleep(20000);
    
    if ( (Adapter->ulLastMICErrorTime != 0) && (ulTimeDiff < MRVDRV_MIC_ERROR_PERIOD) )
    { 
        //USHORT          usCommand;
       
        Adapter->ulMicErrorStartTime = ulCurrTime;
        Adapter->bMicErrorIsHappened = TRUE;

        DBGPRINT( DBG_MACEVENT, ("*** MIC error is happended!\n") );

        NdisMSetTimer( &Adapter->MrvMicDisconnectTimer, 200 ); // tt ++ mic 2
#if 0
// tt mic        NdisMSleep( 1000*500 ); // for sending out "MIC failure report"
        NdisMSleep( 1000*4500 ); // for sending out "MIC failure report"
        DBGPRINT( DBG_MACEVENT, ("*** Going to send out de-auth and indicate disconnect!\n") );

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

        // completely clean up
        PrepareAndSendCommand(
                  Adapter,
                  usCommand,
                  0,
                  HostCmd_OPTION_USE_INT,
                  0,
                  HostCmd_PENDING_ON_NONE,
                  0,
                  FALSE,
                  NULL,
                  NULL,
                  NULL,
                  Adapter->CurrentBSSID);

        NdisMSleep(100000);

        DBGPRINT(DBG_MACEVENT, ("Time since last MIC error is %d, disconnect!\n", ulTimeDiff));

        ResetDisconnectStatus(Adapter);

#endif // 0
    }
#endif // MRVL_MIC_ERROR

    	Adapter->ulLastMICErrorTime = ulCurrTime;
}
 
#ifdef MRVL_MIC_ERROR
VOID DisconnectDueToMicError( PMRVDRV_ADAPTER pAdapter )
{
    USHORT          usCommand;

    if ( pAdapter->MediaConnectStatus != NdisMediaStateConnected )
    {
        DBGPRINT( DBG_MACEVENT, ("*** Connection had already been disconnected.\n") );
        return;
    }
    
    DBGPRINT( DBG_MACEVENT, ("*** Send out de-authentication due to MIC error\n") );

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

    DBGPRINT( DBG_WARNING, ("[Mrvl] Send out de-auth due to MIC error\n") );
    
    PrepareAndSendCommand(
                  pAdapter,
                  usCommand,
                  0,
                  HostCmd_OPTION_USE_INT,
                  0,
                  HostCmd_PENDING_ON_NONE,
                  0,
                  FALSE,
                  NULL,
                  NULL,
                  NULL,
                  pAdapter->CurrentBSSID);

    NdisMSleep(60000);
    
    DBGPRINT( DBG_WARNING, ("[Mrvl] Reset and disconnect due to MIC error\n") );
    
    ResetDisconnectStatus( pAdapter );
}

// tt ++ mic 2
VOID MrvMicDisconnectTimerFunction(
	IN PVOID SystemSpecific1,
	IN PVOID FunctionContext,
	IN PVOID SystemSpecific2,
	IN PVOID SystemSpecific3
	)
{
    PMRVDRV_ADAPTER Adapter = (PMRVDRV_ADAPTER) FunctionContext;

    DisconnectDueToMicError( Adapter );
}
// tt -- mic 2

BOOL IsInMicErrorPeriod( PMRVDRV_ADAPTER pAdapter )
{
    ULONG       ulCurrTime, ulTimeDiff;
    
    if ( pAdapter->ulMicErrorStartTime == 0 || pAdapter->bMicErrorIsHappened != TRUE )
        return FALSE;

    DBGPRINT( DBG_MACEVENT, ("[Mrvl] Check MIC error period\n") );

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

    if ( ulTimeDiff < MRVDRV_MIC_ERROR_PERIOD+2000 )
    {
        DBGPRINT( DBG_MACEVENT, ("[Mrvl] Driver is still in MIC error period. Remaining %d ms.\n", (MRVDRV_MIC_ERROR_PERIOD+2000)-ulTimeDiff ) );
        return TRUE;
    }

    DBGPRINT( DBG_MACEVENT, ("[Mrvl] MIC error period is finished\n") );

    pAdapter->ulMicErrorStartTime = 0;
    pAdapter->bMicErrorIsHappened = FALSE;
    
    return FALSE;
}
#endif // MRVL_MIC_ERROR


/******************************************************************************
 *
 *  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"));
   	}
		
// For Adhoc indication fix ++  		
	else
	{
		if (Adapter->bIsMoreThanOneStaInAdHocBSS)
		{
			// Send a Media Connected event, according to Microsoft Spec
			Adapter->MediaConnectStatus = NdisMediaStateConnected;

  			NdisMIndicateStatus(
						Adapter->MrvDrvAdapterHdl,
						NDIS_STATUS_MEDIA_CONNECT,
						(PVOID)NULL, 
						0);
			NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
		}
		else
		{
			// Send a Media Connected event, according to Microsoft Spec
			Adapter->MediaConnectStatus = NdisMediaStateDisconnected;

  			NdisMIndicateStatus(
						Adapter->MrvDrvAdapterHdl,
						NDIS_STATUS_MEDIA_DISCONNECT,
						(PVOID)NULL, 
						0);
			NdisMIndicateStatusComplete(Adapter->MrvDrvAdapterHdl);
		}
	}
// For Adhoc indication fix --	

	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;
      PTX_PKT_T pPacket; 

    	switch( INTCode ) {	
	
 #ifdef BG_SCAN
    	case MACREG_INT_CODE_BG_SCAN_REPORT:
///              AllenDBGPRINT(DBG_ALLEN,("MACREG_INT_CODE_BG_SCAN_REPORT\n"));
		//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   	
		//AllenDBGPRINT( DBG_SCAN, ("MACREG_INT_CODE_BG_SCAN_REPORT: \n") );

	       if ( Adapter->psState != PS_STATE_FULL_POWER)
	       {
	       	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

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

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

	case MACREG_INT_CODE_LINK_SENSED: //Link found
// For Adhoc indication fix ++  
		Adapter->bIsMoreThanOneStaInAdHocBSS = TRUE;
// For Adhoc indication fix --		
		//AllenDBGPRINT(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
// For Adhoc indication fix ++  
		Adapter->bIsMoreThanOneStaInAdHocBSS = FALSE;
// For Adhoc indication fix --
		//AllenDBGPRINT(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:

		//AllenDBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_DEAUTHENTICATED\n"));
///              AllenDBGPRINT(DBG_ALLEN,("MACREG_INT_CODE_DEAUTHENTICATED\n"));

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

		       InfraBssReconnectStart( Adapter, RECONNECT_DEAUTHENTICATE );
              }
              
              //MacEventDisconnected(Adapter, 5000, FALSE);
			  
              break;
		
       case MACREG_INT_CODE_DISASSOCIATED:

		//AllenDBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_DISASSOCIATED\n"));
///              AllenDBGPRINT(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

		//AllenDBGPRINT(DBG_MACEVENT | DBG_ALLEN,("MACREG_INT_CODE_LINK_LOSE_W_SCAN\n"));
///		AllenDBGPRINT(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:

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

		Adapter->bIsBeaconLoseEvent = TRUE;
		
#ifdef ACTIVE_ROAMING
	     	ActiveRoamingStop(Adapter);
#endif	
		if ( Adapter->CurPowerState == NdisDeviceStateD0)
  		{
#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 >>> ")));
              //AllenDBGPRINT(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 >>> ")));
              //AllenDBGPRINT(DBG_MACEVENT ,("MACREG_INT_CODE_PS_AWAKE\n"));
	       UpdatePowerSaveState( Adapter, NULL, MACREG_INT_CODE_PS_AWAKE);
		
		GetCmdFromQueueToExecute (Adapter);

              if (Adapter->bIsEnterD3 != TRUE)
              {
    		EnterCriticalSection(&Adapter->TxCriticalSection);
    		if ( Adapter->TxPacketCount && Adapter->SentPacket == NULL)

⌨️ 快捷键说明

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