summaryrefslogtreecommitdiff
path: root/CORE/MAC
diff options
context:
space:
mode:
authorBala Shanmugam <bkamatch@qti.qualcomm.com>2013-10-28 10:43:37 +0530
committerMadan Mohan Koyyalamudi <mkoyyala@qca.qualcomm.com>2013-11-14 19:41:19 -0800
commit914baf2ee9726a9e8e448efc80d7745f26bd6698 (patch)
tree5e875c081417c6754a7a7720f6b398cb97ec1f27 /CORE/MAC
parent16a50918505f2577d99000acaa90394662a35a5b (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.h1
-rw-r--r--CORE/MAC/src/pe/include/limSession.h5
-rw-r--r--CORE/MAC/src/pe/lim/limProcessActionFrame.c5
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMessageQueue.c4
-rw-r--r--CORE/MAC/src/pe/lim/limSendSmeRspMessages.c36
-rw-r--r--CORE/MAC/src/pe/lim/limSendSmeRspMessages.h1
-rw-r--r--CORE/MAC/src/pe/lim/limUtils.c1
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