/*----------------------------------------------------------------------------*/ VOID saaFsmRunEventAbort(IN P_MSG_HDR_T prMsgHdr) { P_JOIN_INFO_T prJoinInfo; P_STA_RECORD_T prStaRec; DEBUGFUNC("joinFsmRunEventAbort"); ASSERT(prAdapter); prJoinInfo = &prAdapter->rJoinInfo; DBGLOG(JOIN, EVENT, ("JOIN EVENT: ABORT\n")); /* NOTE(Kevin): when reach here, the ARB_STATE should be in ARB_STATE_JOIN. */ ASSERT(prJoinInfo->prBssDesc); /* 4 <1> Update Flags and Elements of JOIN Module. */ /* Reset Send Auth/(Re)Assoc Frame Count */ prJoinInfo->ucTxAuthAssocRetryCount = 0; /* Cancel all JOIN relative Timer */ ARB_CANCEL_TIMER(prAdapter, prJoinInfo->rTxRequestTimer); ARB_CANCEL_TIMER(prAdapter, prJoinInfo->rRxResponseTimer); ARB_CANCEL_TIMER(prAdapter, prJoinInfo->rJoinTimer); /* 4 <2> Update the associated STA_RECORD_T during JOIN. */ /* Get a Station Record if possible, TA == BSSID for AP */ prStaRec = staRecGetStaRecordByAddr(prAdapter, prJoinInfo->prBssDesc->aucBSSID); if (prStaRec) { /* Update Station Record - Class 1 Flag */ prStaRec->ucStaState = STA_STATE_1; } #if DBG else ASSERT(0); /* Shouldn't happened, because we already add this STA_RECORD_T at JOIN_STATE_INIT */ #endif /* DBG */ /* 4 <3> Pull back to IDLE. */ joinFsmSteps(prAdapter, JOIN_STATE_IDLE); /* 4 <4> If we are in Roaming, recover the settings of previous BSS. */ /* NOTE: JOIN FAIL - * Restore original setting from current BSS_INFO_T. */ if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) joinAdoptParametersFromCurrentBss(prAdapter); return; } /* end of joinFsmRunEventAbort() */
/*----------------------------------------------------------------------------*/ WLAN_STATUS scanFsmRunEventScanDone ( IN P_ADAPTER_T prAdapter ) { P_SCAN_INFO_T prScanInfo; ENUM_SCAN_STATE_T eNextState; WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; DEBUGFUNC("scanFsmRunEventScanDone"); DBGLOG(SCAN, INFO, ("scanFsmRunEventScanDone\n")); ASSERT(prAdapter); prScanInfo = &prAdapter->rScanInfo; eNextState = prScanInfo->eCurrentState; if (prScanInfo->eCurrentState != SCAN_STATE_IDLE) { //4 <1> Make state transition to SCAN_STATE_IDLE SCAN_STATE_TRANSITION1(prAdapter, ACTIVE, IDLE, DONE); //4 <2> Check SCAN Status for issuing Next Partial SCAN or completing the whole SCAN sequence. if (prScanInfo->eCurrentHwScanMode == ENUM_HW_SCAN_NORMAL_SCAN) { //4 <3> Cancel SCAN Timeout Timer. ARB_CANCEL_TIMER(prAdapter, prScanInfo->rScanCheckForHangTimer); scanCheckScanStatus(prAdapter); } } return rStatus; }
/*----------------------------------------------------------------------------*/ VOID scanFsmRunEventScanReqCleanUp ( IN P_ADAPTER_T prAdapter ) { P_SCAN_INFO_T prScanInfo; P_SCAN_CONFIG_T prScanCfg; DEBUGFUNC("scanFsmRunEventScanReqCleanUp"); ASSERT(prAdapter); prScanInfo = &prAdapter->rScanInfo; prScanCfg = &prScanInfo->rScanConfig; /* We should call Scan Abort before doing "Request Clean Up" */ if (prScanInfo->fgIsScanReqProceeding) { ASSERT(prScanInfo->eCurrentState == SCAN_STATE_IDLE); if (prScanCfg->eScanMethod == SCAN_METHOD_ONLINE_SCAN) { ARB_CANCEL_TIMER(prAdapter, prScanInfo->rPartialScanTimer); } else if (prScanCfg->eScanMethod == SCAN_METHOD_VOIP_ONLINE_SCAN) { DBGLOG(SCAN, INFO, ("Disable traps for PS VOIP SCAN\n")); NIC_TX_UNSET_VOIP_SCAN_TRIGGER_EVENT(prAdapter); } prScanInfo->fgIsScanReqProceeding = FALSE; } return; }
/*----------------------------------------------------------------------------*/ WLAN_STATUS scanFsmRunEventScanAbort ( IN P_ADAPTER_T prAdapter ) { P_SCAN_INFO_T prScanInfo; ENUM_SCAN_STATE_T eNextState; WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; DEBUGFUNC("scanFsmRunEventScanAbort"); DBGLOG(SCAN, INFO, ("scanFsmRunEventScanAbort\n")); ASSERT(prAdapter); prScanInfo = &prAdapter->rScanInfo; eNextState = prScanInfo->eCurrentState; if (prScanInfo->eCurrentState != SCAN_STATE_IDLE) { //4 <1> Make state transition to SCAN_STATE_IDLE SCAN_STATE_TRANSITION1(prAdapter, ACTIVE, IDLE, ABORT); //4 <2> Cancel SCAN Timeout Timer. ARB_CANCEL_TIMER(prAdapter, prScanInfo->rScanCheckForHangTimer); //4 <3> Do call back function. if (prScanInfo->rScanConfig.pfScanDoneHandler) { prScanInfo->rScanConfig.pfScanDoneHandler(prAdapter, WLAN_STATUS_FAILURE); } #if CFG_WORKAROUND_HEC_5512 //4 <4> Recover from aborting from BG SSID scan state if (prScanInfo->eCurrentHwScanMode == ENUM_HW_SCAN_BG_SSID_SCAN) { #if 0 DBGLOG(SCAN, INFO, ("Recover from aborting from BG SSID scan state\n")); nicTxFlushStopQueues(prAdapter, TXQ_MGMT_MASK, 0x0 /*(UINT_8)NULL*/); nicTxStartQueues(prAdapter, TXQ_MGMT_MASK); scanSendProbeReqFrames(prAdapter, NULL, 0, 1, 0, FALSE); kalMdelay(10); #else nicLogicReset(prAdapter); #endif } #endif } NIC_RESET_INT_EVENT(prAdapter, INT_EVENT_SCAN_DONE); return rStatus; }
/*----------------------------------------------------------------------------*/ WLAN_STATUS joinFsmRunEventJoinTimeOut(IN P_ADAPTER_T prAdapter) { P_JOIN_INFO_T prJoinInfo; P_STA_RECORD_T prStaRec; DEBUGFUNC("joinFsmRunEventJoinTimeOut"); ASSERT(prAdapter); prJoinInfo = &prAdapter->rJoinInfo; DBGLOG(JOIN, EVENT, ("JOIN EVENT: JOIN TIMEOUT\n")); /* Get a Station Record if possible, TA == BSSID for AP */ prStaRec = staRecGetStaRecordByAddr(prAdapter, prJoinInfo->prBssDesc->aucBSSID); /* We have renew this Sta Record when in JOIN_STATE_INIT */ ASSERT(prStaRec); /* Record the Status Code of Authentication Request */ prStaRec->u2StatusCode = STATUS_CODE_JOIN_TIMEOUT; /* Increase Failure Count */ prStaRec->ucJoinFailureCount++; /* Reset Send Auth/(Re)Assoc Frame Count */ prJoinInfo->ucTxAuthAssocRetryCount = 0; /* Cancel other JOIN relative Timer */ ARB_CANCEL_TIMER(prAdapter, prJoinInfo->rTxRequestTimer); ARB_CANCEL_TIMER(prAdapter, prJoinInfo->rRxResponseTimer); /* Restore original setting from current BSS_INFO_T */ if (prAdapter->eConnectionState == MEDIA_STATE_CONNECTED) joinAdoptParametersFromCurrentBss(prAdapter); /* Pull back to IDLE */ joinFsmSteps(prAdapter, JOIN_STATE_IDLE); return WLAN_STATUS_FAILURE; } /* end of joinFsmRunEventJoinTimeOut() */
/*----------------------------------------------------------------------------*/ WLAN_STATUS scanFsmRunEventScanStop ( IN P_ADAPTER_T prAdapter ) { P_SCAN_INFO_T prScanInfo; ENUM_SCAN_STATE_T eNextState; WLAN_STATUS rStatus = WLAN_STATUS_SUCCESS; DEBUGFUNC("scanFsmRunEventScanStop"); ASSERT(prAdapter); DBGLOG(SCAN, INFO, ("scanFsmRunEventScanStop\n")); prScanInfo = &prAdapter->rScanInfo; eNextState = prScanInfo->eCurrentState; if (prScanInfo->eCurrentState != SCAN_STATE_IDLE) { //4 <1> Make state transition to SCAN_STATE_IDLE SCAN_STATE_TRANSITION1(prAdapter, ACTIVE, IDLE, ABORT); //4 <2> Cancel SCAN Timeout Timer. ARB_CANCEL_TIMER(prAdapter, prScanInfo->rScanCheckForHangTimer); //4 <3> Check SCAN Status for issuing Next Partial SCAN or completing the whole SCAN sequence. if (prScanInfo->eCurrentHwScanMode == ENUM_HW_SCAN_NORMAL_SCAN) { scanCheckScanStatus(prAdapter); } #if CFG_WORKAROUND_HEC_5512 //4 <4> Recover from aborting from BG SSID scan state if (prScanInfo->eCurrentHwScanMode == ENUM_HW_SCAN_BG_SSID_SCAN) { #if 0 DBGLOG(SCAN, INFO, ("Recover from stopping from BG SSID scan state\n")); nicTxFlushStopQueues(prAdapter, TXQ_MGMT_MASK, 0x0 /*(UINT_8)NULL*/); nicTxStartQueues(prAdapter, TXQ_MGMT_MASK); scanSendProbeReqFrames(prAdapter, NULL, 0, 1, 0, FALSE); kalMdelay(10); #else nicLogicReset(prAdapter); #endif } #endif } return rStatus; }