diff options
| author | Bala Shanmugam <bkamatch@qti.qualcomm.com> | 2013-10-28 10:43:37 +0530 |
|---|---|---|
| committer | Madan Mohan Koyyalamudi <mkoyyala@qca.qualcomm.com> | 2013-11-14 19:41:19 -0800 |
| commit | 914baf2ee9726a9e8e448efc80d7745f26bd6698 (patch) | |
| tree | 5e875c081417c6754a7a7720f6b398cb97ec1f27 /CORE/MAC | |
| parent | 16a50918505f2577d99000acaa90394662a35a5b (diff) | |
cld: lim: Process CSA offload enable event
When CSA is offloaded, firmware will send WMI_CSA_HANDLING_EVENTID
with CSA IE information to host. Host will extract new channel
number from CSA IE and switch to new channel by sending vdev_start.
Host should not process CSA IE when CSA is offloaded as it is done
in firmware.
Change-Id: Ice55396a48e5a4caad76194ea4a83939e4e3aa70
CRs-Fixed: 565592
Diffstat (limited to 'CORE/MAC')
| -rw-r--r-- | CORE/MAC/src/include/sirParams.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/include/limSession.h | 5 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessActionFrame.c | 5 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limProcessMessageQueue.c | 4 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limSendSmeRspMessages.c | 36 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limSendSmeRspMessages.h | 1 | ||||
| -rw-r--r-- | CORE/MAC/src/pe/lim/limUtils.c | 1 |
7 files changed, 51 insertions, 2 deletions
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h index 7a1d83f59630..2aee3bf057e4 100644 --- a/CORE/MAC/src/include/sirParams.h +++ b/CORE/MAC/src/include/sirParams.h @@ -572,6 +572,7 @@ typedef struct sSirMbMsgP2p #define SIR_HAL_SME_SCAN_CACHE_UPDATED (SIR_HAL_ITC_MSG_TYPES_BEGIN + 207) #endif #endif +#define SIR_CSA_OFFLOAD_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 208) #define SIR_HAL_MSG_TYPES_END (SIR_HAL_ITC_MSG_TYPES_BEGIN + 0xFF) // CFG message types diff --git a/CORE/MAC/src/pe/include/limSession.h b/CORE/MAC/src/pe/include/limSession.h index 89148a800c84..23d2c48174eb 100644 --- a/CORE/MAC/src/pe/include/limSession.h +++ b/CORE/MAC/src/pe/include/limSession.h @@ -386,6 +386,11 @@ typedef struct sPESession // Added to Support BT-AMP */ tANI_U8 gUapsdPerAcDeliveryEnableMask; + /* Flag to skip CSA IE processing when CSA + * offload is enabled. + */ + tANI_U8 csaOffloadEnable; + /* Used on STA for AC downgrade. This is a dynamic mask * setting which keep tracks of ACs being admitted. * If bit is set to 0: That partiular AC is not admitted diff --git a/CORE/MAC/src/pe/lim/limProcessActionFrame.c b/CORE/MAC/src/pe/lim/limProcessActionFrame.c index 17270d2fc161..180f3fb202d9 100644 --- a/CORE/MAC/src/pe/lim/limProcessActionFrame.c +++ b/CORE/MAC/src/pe/lim/limProcessActionFrame.c @@ -185,8 +185,9 @@ tSirRetStatus limStartChannelSwitch(tpAniSirGlobal pMac, tpPESession psessionEnt /*If channel switch is already running and it is on a different session, just return*/ /*This need to be removed for MCC */ - if( limIsChanSwitchRunning (pMac) && - psessionEntry->gLimSpecMgmt.dot11hChanSwState != eLIM_11H_CHANSW_RUNNING ) + if ((limIsChanSwitchRunning (pMac) && + psessionEntry->gLimSpecMgmt.dot11hChanSwState != eLIM_11H_CHANSW_RUNNING) || + psessionEntry->csaOffloadEnable) { limLog(pMac, LOGW, FL("Ignoring channel switch on session %d"), psessionEntry->peSessionId); return eSIR_SUCCESS; diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c index 0a45557ef58f..06b32d655fba 100644 --- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c +++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c @@ -1828,6 +1828,10 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg) limHandleDeleteBssRsp(pMac,limMsg); //wrapper routine to handle delete bss response break; + case WDA_CSA_OFFLOAD_EVENT: + limHandleCSAoffloadMsg(pMac, limMsg); + break; + case WDA_SET_BSSKEY_RSP: case WDA_SET_STA_BCASTKEY_RSP: limProcessMlmSetBssKeyRsp( pMac, limMsg ); diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c index 1d71f2013a28..d4f795ea9762 100644 --- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c +++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.c @@ -2616,8 +2616,44 @@ void limSendExitBmpsInd(tpAniSirGlobal pMac, tExitBmpsReason reasonCode, } /*** end limSendExitBmpsInd() ***/ +/*-------------------------------------------------------------------------- + \brief limHandleCSAoffloadMsg() - Handle CSA offload message + \param pMac - pointer to global adapter context + \param MsgQ - Message pointer. + \sa + --------------------------------------------------------------------------*/ +void limHandleCSAoffloadMsg(tpAniSirGlobal pMac,tpSirMsgQ MsgQ) +{ + tpPESession psessionEntry; + tpCSAOffloadParams csa_params = (tpCSAOffloadParams)(MsgQ->bodyptr); + if(!csa_params) + { + limLog(pMac, LOGE, FL("limMsgQ body ptr is NULL")); + return; + } + psessionEntry = peFindSessionBySessionId(pMac, csa_params->sessionId); + if(!psessionEntry) + { + limLog(pMac, LOGP, FL("Session does not exist for given sessionID")); + goto err; + } + + if (psessionEntry->limSystemRole == eLIM_STA_ROLE) + { + psessionEntry->gLimChannelSwitch.switchMode = csa_params->switchmode; + /* timer already started by firmware, switch immediately */ + psessionEntry->gLimChannelSwitch.switchCount = 0; + psessionEntry->gLimChannelSwitch.primaryChannel = csa_params->channel; + psessionEntry->gLimChannelSwitch.state = eLIM_CHANNEL_SWITCH_PRIMARY_ONLY; + psessionEntry->gLimChannelSwitch.secondarySubBand = PHY_SINGLE_CHANNEL_CENTERED; + limPrepareFor11hChannelSwitch(pMac, psessionEntry); + } + +err: + palFreeMemory(pMac->hHdd, (void *)csa_params); +} /*-------------------------------------------------------------------------- \brief peDeleteSession() - Handle the Delete BSS Response from HAL. diff --git a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h index 43e64ed82403..a1f421fc4fef 100644 --- a/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h +++ b/CORE/MAC/src/pe/lim/limSendSmeRspMessages.h @@ -72,6 +72,7 @@ void limSendSmePromiscuousModeRsp(tpAniSirGlobal pMac); void limSendSmeNeighborBssInd(tpAniSirGlobal, tLimScanResultNode *); void limHandleDeleteBssRsp(tpAniSirGlobal pMac,tpSirMsgQ MsgQ); +void limHandleCSAoffloadMsg(tpAniSirGlobal pMac,tpSirMsgQ MsgQ); #ifdef WLAN_FEATURE_VOWIFI_11R void diff --git a/CORE/MAC/src/pe/lim/limUtils.c b/CORE/MAC/src/pe/lim/limUtils.c index 3c7bacc27684..5b55324aa94b 100644 --- a/CORE/MAC/src/pe/lim/limUtils.c +++ b/CORE/MAC/src/pe/lim/limUtils.c @@ -7112,6 +7112,7 @@ void limProcessAddStaRsp(tpAniSirGlobal pMac,tpSirMsgQ limMsgQ) palFreeMemory(pMac, pAddStaParams); return; } + psessionEntry->csaOffloadEnable = pAddStaParams->csaOffloadEnable; if (psessionEntry->limSystemRole == eLIM_STA_IN_IBSS_ROLE) (void) limIbssAddStaRsp(pMac, limMsgQ->bodyptr,psessionEntry); #ifdef FEATURE_WLAN_TDLS |
