📄 hwacproc.c
字号:
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 + -