📄 hwacproc.c
字号:
0,
FALSE,
NULL,
NULL,
NULL,
NULL);
NdisMSleep(60000);
DBGPRINT( DBG_WARNING, ("[Mrvl] Reset and disconnect due to MIC error\n") );
ResetDisconnectStatus( pAdapter );
}
// tt 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"));
return;
}
} // HandleAdHocModeLink
/******************************************************************************
*
* 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;
NDIS_STATUS Status;
#ifdef DEEP_SLEEP
#ifdef IF_SDIO
UCHAR regValue;
SD_API_STATUS sdStatus;
#endif ///IF_SDIO
#endif
//RETAILMSG(1,(L"Handle Mac Evt(0x%x)+++\n\r",INTCode ));
switch( INTCode ){
#ifdef WMM
case MACREG_INT_CODE_WMM_STATUS_CHANGE:
DbgWmmMsg( (L"MAC - wmm status change\n") );
PrepareAndSendCommand(
Adapter,
HostCmd_CMD_802_11_WMM_GET_STATUS,
HostCmd_ACT_GET,
HostCmd_OPTION_USE_INT,
(NDIS_OID)0,
HostCmd_PENDING_ON_NONE,
0,
FALSE,
NULL,
NULL,
NULL,
NULL );
break;
#endif
#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;
Adapter->PSMode_B = 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,("MACREG_INT_CODE_TX_PPA_FREE: \n"));
break;
case MACREG_INT_CODE_TX_DMA_DONE: // TX DMA finished
DBGPRINT(DBG_MACEVENT,("MACREG_INT_CODE_TX_DMA_DONE: Unimplemented"));
break;
case MACREG_INT_CODE_LINK_SENSED: //Link found
DBGPRINT(DBG_MACEVENT,("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,("MACREG_INT_CODE_ADHOC_BCN_LOST\n"));
//dralee, 081005
//if( Adapter->CurPowerState == NdisDeviceStateD0)
{
HandleAdHocModeLink(Adapter, MACREG_INT_CODE_ADHOC_BCN_LOST);
}
break;
case MACREG_INT_CODE_DEAUTHENTICATED:
{
DBGPRINT(DBG_MACEVENT|DBG_CCX,("HWAC - Deauthenticated\n"));
//RETAILMSG(1,(TEXT("HWAC - Deauthenticated**************\n\r")));
// tt mic error ++
//if ( Adapter->bMicErrorIsHappened )
if ( IsInMicErrorPeriod( Adapter ) )
{
//Adapter->bMicErrorIsHappened = FALSE;
DisconnectDueToMicError( Adapter );
}
else
{
// tt mic error --
#ifdef REASSOCIATE
if (Adapter->bIsDeauthenticationEvent == FALSE)
{
Adapter->bIsDeauthenticationEvent = TRUE;
MacEventDisconnected(Adapter, 5000, FALSE);
InfraBssReconnectStart( Adapter, RECONNECT_DEAUTHENTICATE );
}
#else
// when disassociated, the number of bssid should be 0
Adapter->ulNumOfBSSIDs = 0;
Adapter->ulPSNumOfBSSIDs = 0;
MacEventDisconnected(Adapter,(UINT) MRVDRV_TEN_SECS_TIMER_INTERVAL, TRUE);
#endif
}
}
break;
case MACREG_INT_CODE_DISASSOCIATED:
DBGPRINT(DBG_MACEVENT,("HWAC - Disassociated\n"));
//RETAILMSG(1,(TEXT("HWAC - Disassociated*******\n\r")));
//35.p6++
// when disassociated, the number of bssid should be 0
//Adapter->ulNumOfBSSIDs = 0;
//Adapter->ulPSNumOfBSSIDs = 0;
//35.p6--
// tt mic error ++
//if ( Adapter->bMicErrorIsHappened )
if ( IsInMicErrorPeriod( Adapter ) )
{
//Adapter->bMicErrorIsHappened = FALSE;
DisconnectDueToMicError( Adapter );
}
else
// tt mic error --
MacEventDisconnected(Adapter,(UINT) MRVDRV_TEN_SECS_TIMER_INTERVAL, TRUE);
break;
case MACREG_INT_CODE_LINK_LOSE_W_SCAN: // Link lost
DBGPRINT(DBG_MACEVENT,("HWAC - Link lost WITH SCAN\n"));
//RETAILMSG(1,(TEXT("HWAC - Link lost WITH SCAN******\n\r")));
///crlo:fastroam ++
#ifdef CCX_FASTROAM
PrintMacro("\nHWAC - Link lost WITH SCAN******\n");
v5MrvPrintFileW(L"\nHWAC - Link lost WITH SCAN******\n");
#endif ///CCX_FASTROAM
///crlo:fastroam --
#ifdef AUTO_REASSOCIATION
if ( StartReassociation( Adapter, MACREG_INT_CODE_LINK_LOSE_W_SCAN ) )
break;
#endif
if( Adapter->CurPowerState == NdisDeviceStateD0)
{
#ifdef ACTIVE_ROAMING
if(Adapter->bIsActiveRoaming ==TRUE)
ActiveRoamingStop(Adapter);
#endif
MacEventDisconnected(Adapter, Adapter->TimerInterval,FALSE);
#ifdef REASSOCIATE
InfraBssReconnectStart( Adapter, RECONNECT_LINK_LOST );
#endif
}
break;
case MACREG_INT_CODE_LINK_LOSE_NO_SCAN:
DBGPRINT(DBG_MACEVENT,("HWAC - Link lost\n"));
//RETAILMSG(1,(TEXT("HWAC - Link lost***********\n\r")));
///crlo:fastroam ++
#ifdef CCX_FASTROAM
PrintMacro("\nHWAC - Link lost NO SCAN******\n");
v5MrvPrintFileW(L"\nHWAC - Link lost NO SCAN******\n");
#endif ///CCX_FASTROAM
///crlo:fastroam --
//35.p6++
// tt ++ re-assoc issue 060123
//DeleteBssidInPSList( Adapter, Adapter->CurrentBSSID );
// tt -- re-assoc issue 060123
//35.p6--
#ifdef AUTO_REASSOCIATION
if ( StartReassociation( Adapter, MACREG_INT_CODE_LINK_LOSE_NO_SCAN ) )
break;
#endif
//dralee 081005, V4
//if( Adapter->CurPowerState == NdisDeviceStateD0)
{
//35.p6++
#ifdef REASSOCIATE
Adapter->bIsBeaconLoseEvent = TRUE;
#endif
//35.p6--
#ifdef ACTIVE_ROAMING
if(Adapter->bIsActiveRoaming ==TRUE)
ActiveRoamingStop(Adapter);
#endif
//dralee_20060509
if( Adapter->bHostWakeCfgSet == SPCFG_ENABLE )
{
Deactivate_Host_Sleep_Cfg(Adapter);
Adapter->bHostWakeCfgSet = SPCFG_MASKED;
}
MacEventDisconnected(Adapter, 5000,FALSE);
#ifdef REASSOCIATE
InfraBssReconnectStart( Adapter, RECONNECT_LINK_LOST );
#endif //REASSOCIATE
}
break;
case MACREG_INT_CODE_PS_SLEEP:
DBGPRINT(DBG_MACEVENT,("HWAC - MACREG_INT_CODE_PS_SLEEP 0xb Power Save -> Sleep\n"));
DBGPRINT(DBG_ALLEN,("HWAC - MACREG_INT_CODE_PS_SLEEP 0xb Power Save -> Sleep\n"));
#ifdef WMM_UAPSD
//DbgWmmMsg( (L"+wmm+ PS sleep mac event\n") );
Adapter->bNullFrameSent = 0; //clear flag to let ps_confirm can be sent down.
#endif
//RETAILMSG(1,(TEXT("[MACEvent]:MACREG_INT_CODE_PS_SLEEP\n\r")));
//DBGPRINT(DBG_ALLEN,("HWAC - MACREG_INT_CODE_PS_SLEEP 0xb Power Save -> Sleep\n"));
/// DBGPRINT(DBG_MACEVENT | DBG_POWERSAVE,("SLEEP called\n"));
UpdatePowerSaveState( Adapter, NULL, MACREG_INT_CODE_PS_SLEEP);
break;
case MACREG_INT_CODE_PS_AWAKE:
DBGPRINT(DBG_MACEVENT,("HWAC - MACREG_INT_CODE_PS_AWAKE 0xa Power Save -> Awake\n"));
//RETAILMSG(1,(TEXT("\n\r[MACEvent]: HOST_WAKE_UP:MACREG_INT_CODE_PS_AWAKE")));
#ifdef WMM_UAPSD
Adapter->bNullFrameSent = 0;
//DbgWmmMsg( (L"+wmm+ PS awake mac event\n") );
//DbgWmmMsg( (L"+wmm+ TxPktCount=%d, SentPkt=0x%x\n", Adapter->TxPacketCount, Adapter->SentPacket ) );
#endif
UpdatePowerSaveState( Adapter, NULL, MACREG_INT_CODE_PS_AWAKE);
// tt ++ 2005/10/13 Dragon's suggestion. The reason is: we should give driver a chance to execute cmd after awake.
GetCmdFromQueueToExecute( Adapter );
// tt --
//dralee_20060509
if( Adapter->bHostWakeCfgSet == SPCFG_MASKED )
{
NDIS_STATUS Status;
if( Adapter->bIsReconnectEnable == FALSE &&
Adapter->MediaConnectStatus == NdisMediaStateConnected )
{
if( ++Adapter->SleepCfgRestoreTick > TIME_TO_RESTORE_HOST_SLEEP_CFG )
{
Adapter->SleepCfgRestoreTick = 0;
Status =Reactivate_Host_Sleep_Cfg(Adapter);
if( Status == NDIS_STATUS_SUCCESS )
Adapter->bHostWakeCfgSet = SPCFG_ENABLE;
}
}
}
//dralee
EnterCriticalSection(&Adapter->TxCriticalSection);
//++dralee_20060327
Adapter->TxLock = 0;
if( Adapter->TxPacketCount &&
Adapter->SentPacket == NULL)
{
PTXQ_KEEPER pTxQKeeper;
PTXQ_NODE pTQNode;
TxPacketDeQueue(Adapter, &pTxQKeeper, &pTQNode);
//++dralee_20060327
Adapter->TxPacketCount--;
pPacket = pTQNode -> pPacket;
#ifdef RETQ_TIMER
Status = SendSinglePacket(Adapter,pPacket);
#else
Status = SendSinglePacket(Adapter,pPacket,&(pTQNode->DnldPacket));
#endif
if(Status == NDIS_STATUS_SUCCESS)
{
//Adapter->TxPacketCount--; //++dralee_20060327
PushFreeTxQNode(Adapter->TxFreeQ,pTQNode);
//Status = NDIS_STATUS_PENDING;
}
else
{
RETAILMSG(1, (TEXT("[PS_AWAKE]Send packet fail\r\n")));;
//Error handling , push back this node
InsertTxQNodeFromHead(pTxQKeeper,pTQNode);
//++dralee_20060327
Adapter->TxPacketCount++;
}
}
#ifdef WMM_UAPSD
else if(Adapter->WmmDesc.WmmUapsdEnabled && CheckLastPacketIndication(Adapter) )
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -