summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVarun Reddy Yeturu <vyeturu@qca.qualcomm.com>2014-10-07 15:43:39 -0700
committerAkash Patel <c_akashp@qca.qualcomm.com>2014-10-10 16:44:59 -0700
commitd3ab35cd4c0ea2423443f8a0b2dc43e52dbeccc2 (patch)
treeb5f993123a402226a1f3914d25f0676eff58476e
parent67c09402cade8b540e65b1dba9ffe72b21a3d740 (diff)
wlan: qca-cld:LFR3: Beacon/Probe Rsp parsing moved to PE
1) The roam synch indication contains the beacon/probe response. The parsing of the content is done in SME which is incorrect.It is moved to PE. 2) Un-necessary back and forth communication between SME and PE is avoided. (removed csrRoamEnqueueRoamOffloadSynch). 3) Reception of roam synch indication and sending of roam synch completion is logged by default for better debugging.Unwanted default logging during roam synch propagation is moved to higher log levels. Change-Id: If434465b168f234f4a5a48f642751ca398e10271 CRs-Fixed: 688957
-rw-r--r--CORE/MAC/inc/sirApi.h3
-rw-r--r--CORE/MAC/inc/wniApi.h4
-rw-r--r--CORE/MAC/src/include/sirParams.h4
-rw-r--r--CORE/MAC/src/pe/include/limApi.h3
-rw-r--r--CORE/MAC/src/pe/include/limFT.h9
-rw-r--r--CORE/MAC/src/pe/include/limFTDefs.h26
-rw-r--r--CORE/MAC/src/pe/lim/limApi.c246
-rw-r--r--CORE/MAC/src/pe/lim/limAssocUtils.c5
-rw-r--r--CORE/MAC/src/pe/lim/limFT.c109
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMessageQueue.c10
-rw-r--r--CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c3
-rw-r--r--CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c5
-rw-r--r--CORE/SERVICES/WMA/wma.c55
-rw-r--r--CORE/SME/inc/csrInternal.h10
-rw-r--r--CORE/SME/inc/csrNeighborRoam.h5
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c309
-rw-r--r--CORE/SME/src/csr/csrApiScan.c161
-rw-r--r--CORE/SME/src/csr/csrInsideApi.h8
-rw-r--r--CORE/SME/src/csr/csrNeighborRoam.c19
-rw-r--r--CORE/SME/src/csr/csrUtil.c2
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c11
-rw-r--r--CORE/SYS/legacy/src/utils/src/macTrace.c3
-rw-r--r--CORE/WDA/inc/wlan_qct_wda.h1
23 files changed, 397 insertions, 614 deletions
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 5d687d4a6690..c814ce07967c 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -4767,7 +4767,8 @@ typedef struct sSirSmeRoamOffloadSynchInd
tANI_U8 kck[SIR_KCK_KEY_LEN];
tANI_U8 kek[SIR_KEK_KEY_LEN];
tANI_U8 replay_ctr[SIR_REPLAY_CTR_LEN];
-} tSirSmeRoamOffloadSynchInd, *tpSirSmeRoamOffloadSynchInd;
+ tpSirBssDescription pbssDescription;
+} tSirRoamOffloadSynchInd, *tpSirRoamOffloadSynchInd;
typedef struct sSirSmeRoamOffloadSynchCnf
{
diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h
index 66ac55ecd6b4..2976a0783b88 100644
--- a/CORE/MAC/inc/wniApi.h
+++ b/CORE/MAC/inc/wniApi.h
@@ -373,10 +373,6 @@ enum eWniMsgTypes
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
eWNI_SME_ROAM_OFFLOAD_SYNCH_IND, /* Roam Synch Indication from WMA to SME*/
- eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_IND,/* Hand over the Roam Synch Indication
- from SME to PE*/
- eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_RSP,/* Roam Synch Indication Rsp
- from PE toSME */
eWNI_SME_HO_FAIL_IND, /* Hand Off Failure Ind from WMA to SME */
#endif
#ifdef WLAN_FEATURE_NAN
diff --git a/CORE/MAC/src/include/sirParams.h b/CORE/MAC/src/include/sirParams.h
index b61c8cb4e88f..490798933dfb 100644
--- a/CORE/MAC/src/include/sirParams.h
+++ b/CORE/MAC/src/include/sirParams.h
@@ -661,6 +661,10 @@ typedef struct sSirMbMsgP2p
#endif /* DHCP_SERVER_OFFLOAD */
#define SIR_HAL_LED_FLASHING_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 293)
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+#define SIR_HAL_ROAM_OFFLOAD_SYNCH_IND (SIR_HAL_ITC_MSG_TYPES_BEGIN + 294)
+#endif
+
#define SIR_HAL_MSG_TYPES_END (SIR_HAL_MSG_TYPES_BEGIN + 0x1FF)
// CFG message types
diff --git a/CORE/MAC/src/pe/include/limApi.h b/CORE/MAC/src/pe/include/limApi.h
index d004f2736ad7..bb8963da8839 100644
--- a/CORE/MAC/src/pe/include/limApi.h
+++ b/CORE/MAC/src/pe/include/limApi.h
@@ -167,6 +167,9 @@ void
limSendHeartBeatTimeoutInd(tpAniSirGlobal pMac, tpPESession psessionEntry);
tMgmtFrmDropReason limIsPktCandidateForDrop(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo, tANI_U32 subType);
void limMicFailureInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg);
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+void limRoamOffloadSynchInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg);
+#endif
/* ----------------------------------------------------------------------- */
// These used to be in DPH
extern void limGetMyMacAddr(tpAniSirGlobal pMac, tANI_U8 *mac);
diff --git a/CORE/MAC/src/pe/include/limFT.h b/CORE/MAC/src/pe/include/limFT.h
index 2bfe5d8d16bc..1f81bf8d293f 100644
--- a/CORE/MAC/src/pe/include/limFT.h
+++ b/CORE/MAC/src/pe/include/limFT.h
@@ -63,13 +63,14 @@ void limHandleFTPreAuthRsp(tpAniSirGlobal pMac, tSirRetStatus status,
void limProcessMlmFTReassocReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf,
tpPESession psessionEntry);
void limProcessFTPreauthRspTimeout(tpAniSirGlobal pMac);
-
+void limFillFTSession(tpAniSirGlobal pMac, tpSirBssDescription pbssDescription,
+ tpPESession pftSessionEntry, tpPESession psessionEntry);
+tSirRetStatus limFTPrepareAddBssReq(tpAniSirGlobal pMac, tANI_U8 updateEntry,
+ tpPESession pftSessionEntry,
+ tpSirBssDescription bssDescription);
tANI_BOOLEAN limProcessFTUpdateKey(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf );
tSirRetStatus limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf );
void limProcessFTAggrQoSRsp(tpAniSirGlobal pMac, tpSirMsgQ limMsg);
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-void limProcessFTRoamOffloadSynchInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg);
-#endif
void limFTCleanupAllFTSessions(tpAniSirGlobal pMac);
#endif /* __LIMFT_H__ */
diff --git a/CORE/MAC/src/pe/include/limFTDefs.h b/CORE/MAC/src/pe/include/limFTDefs.h
index 183f219781be..d6a5afb40faf 100644
--- a/CORE/MAC/src/pe/include/limFTDefs.h
+++ b/CORE/MAC/src/pe/include/limFTDefs.h
@@ -128,32 +128,6 @@ typedef struct sFTPEContext
tANI_BOOLEAN ftPreAuthSession;
} tftPEContext, *tpftPEContext;
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-/*------------------------------------------------------------------------
- * FT Roam Offload Synch Indication SME->PE
- * -----------------------------------------------------------------------
- * */
-typedef struct sSirFTRoamOffloadSynchInd
-{
- tANI_U16 messageType; /* eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_IND */
- tANI_U16 length;
- tSirMacAddr currbssId;
- tpSirBssDescription pbssDescription;
-} tSirFTRoamOffloadSynchInd, *tpSirFTRoamOffloadSynchInd;
-
-/*----------------------------------------------------------------------
- * FT Roam Offload Synch Response PE->SME
- *----------------------------------------------------------------------
- */
-typedef struct sSirFTRoamOffloadSynchRsp
-{
- tANI_U16 messageType; /* eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_RSP */
- tANI_U16 length;
- tANI_U8 sessionId;
- tpSirBssDescription pbssDescription;
-} tSirFTRoamOffloadSynchRsp, *tpSirFTRoamOffloadSynchRsp;
-#endif
-
#endif /* __LIMFTDEFS_H__ */
#endif /* WLAN_FEATURE_VOWIFI_11R */
diff --git a/CORE/MAC/src/pe/lim/limApi.c b/CORE/MAC/src/pe/lim/limApi.c
index 5742ed31f1b5..996e6d4137de 100644
--- a/CORE/MAC/src/pe/lim/limApi.c
+++ b/CORE/MAC/src/pe/lim/limApi.c
@@ -73,6 +73,7 @@
#include <limFT.h>
#include "vos_types.h"
#include "vos_packet.h"
+#include "vos_utils.h"
#include "wlan_qct_tl.h"
#include "sysStartup.h"
@@ -1858,6 +1859,251 @@ void limPsOffloadHandleMissedBeaconInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
return;
}
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+eHalStatus limRoamFillBssDescr(tpAniSirGlobal pMac,
+ tSirRoamOffloadSynchInd *pRoamOffloadSynchInd)
+{
+ v_U32_t uLen = 0;
+ tpSirProbeRespBeacon pParsedFrame;
+ tpSirMacMgmtHdr macHeader;
+ tANI_U8 *pBeaconProbeResp;
+ tSirBssDescription *pBssDescr = NULL;
+
+ pBeaconProbeResp = (tANI_U8 *)pRoamOffloadSynchInd +
+ pRoamOffloadSynchInd->beaconProbeRespOffset;
+ macHeader = (tpSirMacMgmtHdr)pBeaconProbeResp;
+ pParsedFrame =
+ (tpSirProbeRespBeacon) vos_mem_malloc(sizeof(tSirProbeRespBeacon));
+ if (NULL == pParsedFrame)
+ {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "%s: fail to allocate memory for frame",__func__);
+ return eHAL_STATUS_RESOURCES;
+ }
+
+ if ( pRoamOffloadSynchInd->beaconProbeRespLength <= SIR_MAC_HDR_LEN_3A )
+ {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "%s: Very few bytes in synchInd beacon / probe resp frame! length=%d",
+ __func__, pRoamOffloadSynchInd->beaconProbeRespLength);
+ vos_mem_free(pParsedFrame);
+ return eHAL_STATUS_FAILURE;
+ }
+
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,"LFR3: Beacon/Prb Rsp:");
+ VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
+ pBeaconProbeResp, pRoamOffloadSynchInd->beaconProbeRespLength);
+ if (pRoamOffloadSynchInd->isBeacon) {
+ if (sirParseBeaconIE(pMac, pParsedFrame,
+ &pBeaconProbeResp[SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET],
+ pRoamOffloadSynchInd->beaconProbeRespLength -
+ SIR_MAC_HDR_LEN_3A) != eSIR_SUCCESS || !pParsedFrame->ssidPresent) {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "Parse error Beacon, length=%d",
+ pRoamOffloadSynchInd->beaconProbeRespLength);
+ vos_mem_free(pParsedFrame);
+ return eHAL_STATUS_FAILURE;
+ }
+ }
+ else {
+ if (sirConvertProbeFrame2Struct(pMac,
+ &pBeaconProbeResp[SIR_MAC_HDR_LEN_3A],
+ pRoamOffloadSynchInd->beaconProbeRespLength - SIR_MAC_HDR_LEN_3A,
+ pParsedFrame) != eSIR_SUCCESS ||
+ !pParsedFrame->ssidPresent) {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "Parse error ProbeResponse, length=%d",
+ pRoamOffloadSynchInd->beaconProbeRespLength);
+ vos_mem_free(pParsedFrame);
+ return eHAL_STATUS_FAILURE;
+ }
+ }
+ /* 24 byte MAC header and 12 byte to ssid IE */
+ if (pRoamOffloadSynchInd->beaconProbeRespLength >
+ (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET)) {
+ uLen = pRoamOffloadSynchInd->beaconProbeRespLength -
+ (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET);
+ }
+ pRoamOffloadSynchInd->pbssDescription =
+ vos_mem_malloc(sizeof (tSirBssDescription) + uLen); /*De-allocated in
+ csrProcessRoamOffloadSynchInd*/
+ pBssDescr = pRoamOffloadSynchInd->pbssDescription;
+ if (NULL == pBssDescr)
+ {
+ PELOGE(limLog( pMac, LOGE, "LFR3:Failed to allocate memory");)
+ VOS_ASSERT(pBssDescr != NULL);
+ return eHAL_STATUS_RESOURCES;
+ }
+ vos_mem_zero(pBssDescr, sizeof(tSirBssDescription));
+ /* Length of BSS desription is without length of
+ * length itself and length of pointer
+ * that holds the next BSS description
+ */
+ pBssDescr->length = (tANI_U16)(
+ sizeof(tSirBssDescription) - sizeof(tANI_U16) -
+ sizeof(tANI_U32) + uLen);
+ if (pParsedFrame->dsParamsPresent)
+ {
+ pBssDescr->channelId = pParsedFrame->channelNumber;
+ }
+ else if (pParsedFrame->HTInfo.present)
+ {
+ pBssDescr->channelId = pParsedFrame->HTInfo.primaryChannel;
+ }
+ else
+ {
+ /*If DS Params or HTIE is not present in the probe resp or beacon,
+ * then use the channel frequency provided by firmware to fill the
+ * channel in the BSS descriptor.*/
+ pBssDescr->channelId = vos_freq_to_chan(pRoamOffloadSynchInd->chan_freq);
+ }
+ pBssDescr->channelIdSelf = pBssDescr->channelId;
+
+ if ((pBssDescr->channelId > 0) && (pBssDescr->channelId < 15))
+ {
+ int i;
+ /* 11b or 11g packet
+ * 11g if extended Rate IE is present or
+ * if there is an A rate in suppRate IE */
+ for (i = 0; i < pParsedFrame->supportedRates.numRates; i++) {
+ if (sirIsArate(pParsedFrame->supportedRates.rate[i] & 0x7f)) {
+ pBssDescr->nwType = eSIR_11G_NW_TYPE;
+ break;
+ }
+ }
+ if (pParsedFrame->extendedRatesPresent) {
+ pBssDescr->nwType = eSIR_11G_NW_TYPE;
+ }
+ } else {
+ /* 11a packet */
+ pBssDescr->nwType = eSIR_11A_NW_TYPE;
+ }
+
+ pBssDescr->sinr = 0;
+ pBssDescr->beaconInterval = pParsedFrame->beaconInterval;
+ pBssDescr->timeStamp[0] = pParsedFrame->timeStamp[0];
+ pBssDescr->timeStamp[1] = pParsedFrame->timeStamp[1];
+ vos_mem_copy(&pBssDescr->capabilityInfo,
+ &pBeaconProbeResp[SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_CAPAB_OFFSET], 2);
+ vos_mem_copy((tANI_U8 *) &pBssDescr->bssId,
+ (tANI_U8 *) macHeader->bssId,
+ sizeof(tSirMacAddr));
+ pBssDescr->nReceivedTime = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd);
+ if(pParsedFrame->mdiePresent) {
+ pBssDescr->mdiePresent = pParsedFrame->mdiePresent;
+ vos_mem_copy((tANI_U8 *)pBssDescr->mdie, (tANI_U8 *)pParsedFrame->mdie,
+ SIR_MDIE_SIZE);
+ }
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
+ "LFR3:%s:BssDescr Info:", __func__);
+ VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
+ pBssDescr->bssId, sizeof(tSirMacAddr));
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
+ "chan=%d, rssi=%d",pBssDescr->channelId,pBssDescr->rssi);
+ if (uLen)
+ {
+ vos_mem_copy(&pBssDescr->ieFields,
+ pBeaconProbeResp + (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET),
+ uLen);
+ }
+ vos_mem_free(pParsedFrame);
+ return eHAL_STATUS_SUCCESS;
+}
+
+/** -----------------------------------------------------------------
+ * brief limRoamOffloadSynchInd() - Handles Roam Synch Indication
+ * param pMac - global mac structure
+ * return - none
+ ----------------------------------------------------------------- */
+void limRoamOffloadSynchInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
+{
+ tpPESession psessionEntry;
+ tpPESession pftSessionEntry;
+ tANI_U8 sessionId;
+ tSirMsgQ mmhMsg;
+ tSirBssDescription *pbssDescription = NULL;
+ tpSirRoamOffloadSynchInd pRoamOffloadSynchInd =
+ (tpSirRoamOffloadSynchInd)pMsg->bodyptr;
+
+ if (!pRoamOffloadSynchInd) {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "LFR3:%s:pRoamOffloadSynchInd is NULL", __func__);
+ return;
+ }
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "LFR3: Received WDA_ROAM_OFFLOAD_SYNCH_IND");
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
+ "LFR3:%s:authStatus=%d, vdevId=%d", __func__,
+ pRoamOffloadSynchInd->authStatus,
+ pRoamOffloadSynchInd->roamedVdevId);
+ VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
+ pRoamOffloadSynchInd->bssId,6);
+ psessionEntry = peFindSessionByBssIdx(pMac,
+ pRoamOffloadSynchInd->roamedVdevId);
+ if (psessionEntry == NULL) {
+ PELOGE(limLog( pMac, LOGE,
+ "%s: LFR3:Unable to find session", __func__);)
+ return;
+ }
+ /* Nothing to be done if the session is not in STA mode */
+ if (eLIM_STA_ROLE != psessionEntry->limSystemRole) {
+ PELOGE(limLog(pMac, LOGE, FL("psessionEntry is not in STA mode"));)
+ return;
+ }
+ if (!HAL_STATUS_SUCCESS(limRoamFillBssDescr(pMac,
+ pRoamOffloadSynchInd))) {
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_ERROR,
+ "LFR3:%s:Failed to fill Bss Descr", __func__);
+ return;
+ }
+ pbssDescription = pRoamOffloadSynchInd->pbssDescription;
+ if((pftSessionEntry = peCreateSession(pMac, pbssDescription->bssId,
+ &sessionId, pMac->lim.maxStation,
+ eSIR_INFRASTRUCTURE_MODE)) == NULL) {
+ limLog(pMac, LOGE, FL("LFR3: Session Can not be created for new AP"
+ "during Roam Offload Synch"));
+ limPrintMacAddr( pMac, pbssDescription->bssId, LOGE );
+ return;
+ }
+ pftSessionEntry->peSessionId = sessionId;
+ sirCopyMacAddr(pftSessionEntry->selfMacAddr, psessionEntry->selfMacAddr);
+ sirCopyMacAddr(pftSessionEntry->limReAssocbssId, pbssDescription->bssId);
+ pftSessionEntry->bssType = eSIR_INFRASTRUCTURE_MODE;
+ /*Set bRoamSynchInProgress here since this session is
+ * specific to roam synch indication. This flag will
+ * later be used to differentiate LFR3 with LFR2 in LIM
+ */
+ pftSessionEntry->bRoamSynchInProgress = VOS_TRUE;
+
+ if (pftSessionEntry->bssType == eSIR_INFRASTRUCTURE_MODE)
+ pftSessionEntry->limSystemRole = eLIM_STA_ROLE;
+ else {
+ limLog(pMac, LOGE, FL("LFR3:Invalid bss type"));
+ return;
+ }
+ pftSessionEntry->limPrevSmeState = pftSessionEntry->limSmeState;
+ pftSessionEntry->limSmeState = eLIM_SME_WT_REASSOC_STATE;
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
+ "LFR3:%s:created session (%p) with id = %d",
+ __func__, pftSessionEntry, pftSessionEntry->peSessionId);
+ /* Update the ReAssoc BSSID of the current session */
+ sirCopyMacAddr(psessionEntry->limReAssocbssId, pbssDescription->bssId);
+ limPrintMacAddr(pMac, psessionEntry->limReAssocbssId, LOG2);
+
+ /* Prepare the session right now with as much as possible */
+ limFillFTSession(pMac, pbssDescription, pftSessionEntry, psessionEntry);
+ limFTPrepareAddBssReq( pMac, FALSE, pftSessionEntry, pbssDescription );
+ mmhMsg.type =
+ pRoamOffloadSynchInd->messageType;/* eWNI_SME_ROAM_OFFLOAD_SYNCH_IND */
+ mmhMsg.bodyptr = pRoamOffloadSynchInd;
+ mmhMsg.bodyval = 0;
+
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
+ "LFR3:%s:sending eWNI_SME_ROAM_OFFLOAD_SYNCH_IND", __func__);
+ limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
+}
+
+#endif
/** -----------------------------------------------------------------
\brief limMicFailureInd() - handles mic failure indication
diff --git a/CORE/MAC/src/pe/lim/limAssocUtils.c b/CORE/MAC/src/pe/lim/limAssocUtils.c
index f09bcd087fe4..5bbcc81c8bc1 100644
--- a/CORE/MAC/src/pe/lim/limAssocUtils.c
+++ b/CORE/MAC/src/pe/lim/limAssocUtils.c
@@ -2837,8 +2837,9 @@ tSirRetStatus limAddFTStaSelf(tpAniSirGlobal pMac, tANI_U16 assocId, tpPESession
msgQ.bodyval = 0;
#if defined WLAN_FEATURE_VOWIFI_11R_DEBUG
- limLog(pMac, LOGE,
- FL("Sending WDA_ADD_STA_REQ (aid %d)"), pAddStaParams->assocId);
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
+ "%s: Sending WDA_ADD_STA_REQ (aid %d)",
+ __func__, pAddStaParams->assocId);
#endif
MTRACE(macTraceMsgTx(pMac, psessionEntry->peSessionId, msgQ.type));
diff --git a/CORE/MAC/src/pe/lim/limFT.c b/CORE/MAC/src/pe/lim/limFT.c
index 34db4a4f408a..fa4bae49398c 100644
--- a/CORE/MAC/src/pe/lim/limFT.c
+++ b/CORE/MAC/src/pe/lim/limFT.c
@@ -1936,113 +1936,4 @@ limProcessFTAggrQosReq(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf )
return eSIR_SUCCESS;
}
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-/*------------------------------------------------------------------
- *
- * This function handles the Roam Offload Synch Indication from SME
- *
- *------------------------------------------------------------------*/
-void limProcessFTRoamOffloadSynchInd(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
-{
- tpSirFTRoamOffloadSynchInd pFTRoamOffloadSynchInd;
- tpPESession psessionEntry;
- tpPESession pftSessionEntry;
- tANI_U8 sessionId;
- tpSirBssDescription pbssDescription;
- tpSirFTRoamOffloadSynchRsp pFTRoamOffloadSynchRsp;
- tSirMsgQ mmhMsg;
- tANI_U16 rspLen = sizeof(tSirFTRoamOffloadSynchRsp);
-
- pFTRoamOffloadSynchInd = (tpSirFTRoamOffloadSynchInd)pMsg->bodyptr;
-
- psessionEntry = peFindSessionByBssid(pMac,
- pFTRoamOffloadSynchInd->currbssId,
- &sessionId);
- if (psessionEntry == NULL)
- {
- PELOGE(limLog( pMac, LOGE,
- "%s: LFR3:Unable to find session for the following bssid", __func__);)
- limPrintMacAddr( pMac, pFTRoamOffloadSynchInd->currbssId, LOGE );
- return;
- }
-
- /* Nothing to be done if the session is not in STA mode */
- if (eLIM_STA_ROLE != psessionEntry->limSystemRole) {
-#if defined WLAN_FEATURE_VOWIFI_11R_DEBUG
- PELOGE(limLog(pMac, LOGE, FL("psessionEntry is not in STA mode"));)
-#endif
- return;
- }
-
- pbssDescription = pFTRoamOffloadSynchInd->pbssDescription;
- if((pftSessionEntry = peCreateSession(pMac, pbssDescription->bssId,
- &sessionId, pMac->lim.maxStation,
- psessionEntry->bssType)) == NULL)
- {
- limLog(pMac, LOGE, FL("LFR3: Session Can not be created for new AP"
- "during Roam Offload Synch"));
- limPrintMacAddr( pMac, pbssDescription->bssId, LOGE );
- return;
- }
- pftSessionEntry->peSessionId = sessionId;
- sirCopyMacAddr(pftSessionEntry->selfMacAddr, psessionEntry->selfMacAddr);
- sirCopyMacAddr(pftSessionEntry->limReAssocbssId, pbssDescription->bssId);
- pftSessionEntry->bssType = psessionEntry->bssType;
- /*Set bRoamSynchInProgress here since this session is
- * specific to roam synch indication. This flag will
- * later be used to differentiate LFR3 with LFR2 in LIM
- * */
- pftSessionEntry->bRoamSynchInProgress = VOS_TRUE;
-
- if (pftSessionEntry->bssType == eSIR_INFRASTRUCTURE_MODE)
- {
- pftSessionEntry->limSystemRole = eLIM_STA_ROLE;
- }
- else if(pftSessionEntry->bssType == eSIR_BTAMP_AP_MODE)
- {
- pftSessionEntry->limSystemRole = eLIM_BT_AMP_STA_ROLE;
- }
- else
- {
- limLog(pMac, LOGE, FL("LFR3:Invalid bss type"));
- return;
- }
- pftSessionEntry->limPrevSmeState = pftSessionEntry->limSmeState;
- pftSessionEntry->limSmeState = eLIM_SME_WT_REASSOC_STATE;
- VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
- "LFR3:%s:created session (%p) with id = %d",
- __func__, pftSessionEntry, pftSessionEntry->peSessionId);
- /* Update the ReAssoc BSSID of the current session */
- sirCopyMacAddr(psessionEntry->limReAssocbssId, pbssDescription->bssId);
- limPrintMacAddr(pMac, psessionEntry->limReAssocbssId, LOG2);
-
- // Prepare the session right now with as much as possible.
- limFillFTSession(pMac, pbssDescription, pftSessionEntry, psessionEntry);
-
- limFTPrepareAddBssReq( pMac, FALSE, pftSessionEntry, pbssDescription );
-
- pFTRoamOffloadSynchRsp = vos_mem_malloc(rspLen);
- if (NULL == pFTRoamOffloadSynchRsp)
- {
- PELOGE(limLog( pMac, LOGE, "LFR3:Failed to allocate memory");)
- VOS_ASSERT(pFTRoamOffloadSynchRsp != NULL);
- return;
- }
- vos_mem_zero(pFTRoamOffloadSynchRsp, rspLen);
-
- pFTRoamOffloadSynchRsp->messageType = eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_RSP;
- pFTRoamOffloadSynchRsp->length = (tANI_U16) rspLen;
- pFTRoamOffloadSynchRsp->sessionId = psessionEntry->smeSessionId;
- pFTRoamOffloadSynchRsp->pbssDescription = pbssDescription;
-
- mmhMsg.type = pFTRoamOffloadSynchRsp->messageType;
- mmhMsg.bodyptr = pFTRoamOffloadSynchRsp;
- mmhMsg.bodyval = 0;
-
- PELOGE(limLog(pMac,LOG1, "LFR3:%s:sending FT Roam Offload Sync Rsp to SME",
- __func__);)
- limSysProcessMmhMsgApi(pMac, &mmhMsg, ePROT);
-}
-#endif
-
#endif /* WLAN_FEATURE_VOWIFI_11R */
diff --git a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
index 8405d2dbceb6..64c3606e145b 100644
--- a/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
+++ b/CORE/MAC/src/pe/lim/limProcessMessageQueue.c
@@ -1361,9 +1361,6 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
case eWNI_SME_GET_TSM_STATS_REQ:
#endif /* FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
- case eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_IND:
-#endif /* FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */
// These messages are from HDD
limProcessNormalHddMsg(pMac, limMsg, false); //no need to response to hdd
break;
@@ -1569,6 +1566,13 @@ limProcessMessages(tpAniSirGlobal pMac, tpSirMsgQ limMsg)
vos_mem_free(limMsg->bodyptr);
limMsg->bodyptr = NULL;
break;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ case WDA_ROAM_OFFLOAD_SYNCH_IND:
+ limRoamOffloadSynchInd(pMac, limMsg);
+ /* bodyPtr is freed after handling
+ * eWNI_SME_ROAM_OFFLOAD_SYNCH_IND in sme_ProcessMsg */
+ break;
+#endif
diff --git a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
index b5c3eac1535b..9ee806f047f9 100644
--- a/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessMlmRspMessages.c
@@ -974,7 +974,8 @@ limProcessMlmReassocCnf(tpAniSirGlobal pMac, tANI_U32 *pMsgBuf)
if (pLimMlmReassocCnf->resultCode == eSIR_SME_SUCCESS) {
// Successful Reassociation
/* change logging before release */
- PELOGE(limLog(pMac, LOGE, FL("*** Reassociated with new BSS ***"));)
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_DEBUG,
+ "*** Reassociated with new BSS ***");
psessionEntry->limSmeState = eLIM_SME_LINK_EST_STATE;
MTRACE(macTrace(pMac, TRACE_CODE_SME_STATE, psessionEntry->peSessionId, psessionEntry->limSmeState));
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 61a96132bfda..c72628b0ee68 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -5768,11 +5768,6 @@ limProcessSmeReqMessages(tpAniSirGlobal pMac, tpSirMsgQ pMsg)
limProcessAdjacentAPRepMsg ( pMac, pMsgBuf );
break;
#endif
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
- case eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_IND:
- limProcessFTRoamOffloadSynchInd(pMac, pMsg);
- break;
-#endif
case eWNI_SME_ADD_STA_SELF_REQ:
__limProcessSmeAddStaSelfReq( pMac, pMsgBuf );
break;
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index d8f88b76c435..cf78d9c2fb86 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -1232,11 +1232,15 @@ static void wma_remove_peer(tp_wma_handle wma, u_int8_t *bssid,
ol_txrx_peer_detach(peer);
wma->interfaces[vdev_id].peer_count--;
- WMA_LOGE("%s: Removed peer with peer_addr %pM vdevid %d peer_count %d",
- __func__, bssid, vdev_id, wma->interfaces[vdev_id].peer_count);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
- if (roam_synch_in_progress)
- return;
+ if (roam_synch_in_progress) {
+ WMA_LOGD("%s:LFR3:Removed peer with addr %pM vdevid %d peer_cnt %d",
+ __func__, bssid, vdev_id, wma->interfaces[vdev_id].peer_count);
+ return;
+ } else {
+ WMA_LOGE("%s: Removed peer with addr %pM vdevid %d peer_count %d",
+ __func__, bssid, vdev_id, wma->interfaces[vdev_id].peer_count);
+ }
#endif
/* Flush all TIDs except MGMT TID for this peer in Target */
peer_tid_bitmap &= ~(0x1 << WMI_MGMT_TID);
@@ -4699,12 +4703,10 @@ static int wma_roam_synch_event_handler(void *handle, u_int8_t *event, u_int32_t
u_int8_t *bcn_probersp_ptr = NULL;
u_int8_t *reassoc_rsp_ptr = NULL;
tp_wma_handle wma = (tp_wma_handle)handle;
- VOS_STATUS status;
- vos_msg_t vos_msg;
wmi_channel *chan = NULL;
wmi_key_material *key = NULL;
int size=0;
- tSirSmeRoamOffloadSynchInd *pRoamOffloadSynchInd;
+ tSirRoamOffloadSynchInd *pRoamOffloadSynchInd;
WMA_LOGD("LFR3:%s", __func__);
if (!event) {
@@ -4731,10 +4733,10 @@ static int wma_roam_synch_event_handler(void *handle, u_int8_t *event, u_int32_t
return -EINVAL;
}
wma->interfaces[synch_event->vdev_id].roam_synch_in_progress = VOS_TRUE;
- len = sizeof(tSirSmeRoamOffloadSynchInd) +
+ len = sizeof(tSirRoamOffloadSynchInd) +
synch_event->bcn_probe_rsp_len +
synch_event->reassoc_rsp_len;
- pRoamOffloadSynchInd = (tSirSmeRoamOffloadSynchInd *)vos_mem_malloc(len);
+ pRoamOffloadSynchInd = (tSirRoamOffloadSynchInd *)vos_mem_malloc(len);
if (!pRoamOffloadSynchInd) {
WMA_LOGE("%s: failed to allocate memory for roam_synch_event", __func__);
return -ENOMEM;
@@ -4747,13 +4749,13 @@ static int wma_roam_synch_event_handler(void *handle, u_int8_t *event, u_int32_t
pRoamOffloadSynchInd->rssi = synch_event->rssi;
pRoamOffloadSynchInd->isBeacon = synch_event->is_beacon;
WMI_MAC_ADDR_TO_CHAR_ARRAY(&synch_event->bssid, pRoamOffloadSynchInd->bssId);
- pRoamOffloadSynchInd->beaconProbeRespOffset = sizeof(tSirSmeRoamOffloadSynchInd);
+ pRoamOffloadSynchInd->beaconProbeRespOffset = sizeof(tSirRoamOffloadSynchInd);
bcn_probersp_ptr = (tANI_U8 *)pRoamOffloadSynchInd +
pRoamOffloadSynchInd->beaconProbeRespOffset;
pRoamOffloadSynchInd->beaconProbeRespLength = synch_event->bcn_probe_rsp_len;
vos_mem_copy(bcn_probersp_ptr, param_buf->bcn_probe_rsp_frame,
pRoamOffloadSynchInd->beaconProbeRespLength);
- pRoamOffloadSynchInd->reassocRespOffset = sizeof(tSirSmeRoamOffloadSynchInd) +
+ pRoamOffloadSynchInd->reassocRespOffset = sizeof(tSirRoamOffloadSynchInd) +
pRoamOffloadSynchInd->beaconProbeRespLength;
pRoamOffloadSynchInd->reassocRespLength = synch_event->reassoc_rsp_len;
reassoc_rsp_ptr = (tANI_U8 *)pRoamOffloadSynchInd +
@@ -4776,16 +4778,8 @@ static int wma_roam_synch_event_handler(void *handle, u_int8_t *event, u_int32_t
vos_mem_copy(pRoamOffloadSynchInd->replay_ctr, key->replay_counter,
SIR_REPLAY_CTR_LEN);
}
- vos_msg.type = eWNI_SME_ROAM_OFFLOAD_SYNCH_IND;
- vos_msg.bodyptr = (void *) pRoamOffloadSynchInd;
- vos_msg.bodyval = 0;
-
- status = vos_mq_post_message(VOS_MQ_ID_SME, &vos_msg);
- if (status != VOS_STATUS_SUCCESS) {
- WMA_LOGE("%s: Failed to post Roam synch Ind event to SME",
- __func__);
- vos_mem_free(pRoamOffloadSynchInd);
- }
+ wma_send_msg(wma, WDA_ROAM_OFFLOAD_SYNCH_IND,
+ (void *) pRoamOffloadSynchInd, 0);
return 0;
}
#endif
@@ -5825,7 +5819,7 @@ static VOS_STATUS wma_create_peer(tp_wma_handle wma, ol_txrx_pdev_handle pdev,
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
if (roam_synch_in_progress) {
- WMA_LOGE("%s: Created peer with peer_addr %pM vdev_id %d,"
+ WMA_LOGD("%s: Created peer with peer_addr %pM vdev_id %d,"
"peer_count - %d",__func__, peer_addr, vdev_id,
wma->interfaces[vdev_id].peer_count);
return VOS_STATUS_SUCCESS;
@@ -7788,9 +7782,11 @@ VOS_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle,
if (roam_req->RoamKeyMgmtOffloadEnabled) {
WMI_SET_ROAM_OFFLOAD_OKC_ENABLED(
roam_offload_11i->flags);
+ WMA_LOGE("LFR3:OKC Enabled");
} else {
WMI_SET_ROAM_OFFLOAD_OKC_DISABLED(
roam_offload_11i->flags);
+ WMA_LOGE("LFR3:OKC Disabled");
}
@@ -13320,7 +13316,7 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params)
ol_txrx_pdev_handle pdev;
VOS_STATUS status = VOS_STATUS_SUCCESS;
ol_txrx_peer_handle peer;
- struct wma_txrx_node *iface;
+ struct wma_txrx_node *iface = NULL;
tPowerdBm maxTxPower;
int ret = 0;
@@ -13491,9 +13487,16 @@ static void wma_add_sta_req_sta_mode(tp_wma_handle wma, tpAddStaParams params)
out:
params->status = status;
/* change logging before release */
- WMA_LOGE("%s: statype %d vdev_id %d aid %d bssid %pM staIdx %d status %d",
- __func__, params->staType, params->smesessionId, params->assocId,
- params->bssId, params->staIdx, status);
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ if(iface && iface->roam_synch_in_progress)
+ WMA_LOGD("%s:statype %d vdevid %d aid %d bssid %pM staIdx %d status %d",
+ __func__, params->staType, params->smesessionId,
+ params->assocId, params->bssId, params->staIdx, status);
+ else
+ WMA_LOGE("%s:statype %d vdevid %d aid %d bssid %pM staIdx %d status %d",
+ __func__, params->staType, params->smesessionId,
+ params->assocId, params->bssId, params->staIdx, status);
+#endif
wma_send_msg(wma, WDA_ADD_STA_RSP, (void *)params, 0);
}
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 1a8bbc5dcaaf..062d2611b644 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -191,10 +191,6 @@ typedef enum
eCsrLostLink1Abort,
eCsrLostLink2Abort,
eCsrLostLink3Abort,
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
- eCsrPerformRoamOffloadSynch,
-#endif
-
}eCsrRoamReason;
typedef enum
@@ -896,6 +892,7 @@ typedef struct tagCsrRoamOffloadSynchStruct
tANI_U8 kck[SIR_KCK_KEY_LEN];
tANI_U8 kek[SIR_KEK_KEY_LEN];
tANI_U8 replay_ctr[SIR_REPLAY_CTR_LEN];
+ tpSirBssDescription pbssDescription; /*BSS descriptor*/
} tCsrRoamOffloadSynchStruct;
#endif
@@ -1531,9 +1528,10 @@ csrRoamUpdateAddIEs(tpAniSirGlobal pMac,
eUpdateIEsType updateType);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-void csrProcessRoamOffloadSynchInd(tpAniSirGlobal pMac, void *pMsgBuf);
+void csrProcessRoamOffloadSynchInd(tHalHandle hHal,
+ tpSirRoamOffloadSynchInd pSmeRoamOffloadSynchInd);
eHalStatus csrScanSaveRoamOffloadApToScanCache(tpAniSirGlobal pMac,
- tSirSmeRoamOffloadSynchInd *pRoamOffloadSynchInd);
+ tSirRoamOffloadSynchInd *pRoamOffloadSynchInd);
void csrProcessHOFailInd(tpAniSirGlobal pMac, void *pMsgBuf);
#endif
#endif
diff --git a/CORE/SME/inc/csrNeighborRoam.h b/CORE/SME/inc/csrNeighborRoam.h
index d4dbc4dc4d0f..d50bae03c284 100644
--- a/CORE/SME/inc/csrNeighborRoam.h
+++ b/CORE/SME/inc/csrNeighborRoam.h
@@ -344,8 +344,9 @@ VOS_STATUS csrRoamReadTSF(tpAniSirGlobal pMac, tANI_U8 *pTimestamp,
#endif /*FEATURE_WLAN_ESE && FEATURE_WLAN_ESE_UPLOAD */
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
eHalStatus csrRoamOffloadSendSynchCnf(tpAniSirGlobal pMac, tANI_U8 sessionId);
-eHalStatus csrNeighborRoamOffloadSynchRspHandler(tpAniSirGlobal pMac,
- tpSirFTRoamOffloadSynchRsp pFTRoamOffloadSynchRsp,
+eHalStatus
+csrNeighborRoamOffloadUpdatePreauthList(tpAniSirGlobal pMac,
+ tpSirRoamOffloadSynchInd pSmeRoamOffloadSynchInd,
tANI_U8 sessionId);
#endif
#endif /* WLAN_FEATURE_NEIGHBOR_ROAMING */
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 169cce06057b..4fbcf43d40cd 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -4934,12 +4934,6 @@ eHalStatus csrRoamProcessCommand( tpAniSirGlobal pMac, tSmeCmd *pCommand )
status = csrRoamIssueFTPreauthReq(pMac, sessionId,
pCommand->u.roamCmd.pLastRoamBss);
break;
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
- case eCsrPerformRoamOffloadSynch:
- status = csrRoamIssueFTRoamOffloadSynch(pMac, sessionId,
- pCommand->u.roamCmd.pLastRoamBss);
- break;
-#endif
default:
csrRoamStateChange( pMac, eCSR_ROAMING_STATE_JOINING, sessionId );
@@ -5530,7 +5524,7 @@ eHalStatus csrRoamOffloadSendSynchCnf(tpAniSirGlobal pMac, tANI_U8 sessionId)
msg.type = WDA_ROAM_OFFLOAD_SYNCH_CNF;
msg.reserved = 0;
msg.bodyptr = pRoamOffloadSynchCnf;
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
"LFR3: Posting WDA_ROAM_OFFLOAD_SYNCH_CNF");
if (!VOS_IS_STATUS_SUCCESS(vos_mq_post_message(
VOS_MODULE_ID_WDA, &msg)))
@@ -10715,12 +10709,6 @@ void csrRoamCheckForLinkStatusChange( tpAniSirGlobal pMac, tSirSmeRsp *pSirMsg )
csrRoamFTPreAuthRspProcessor( pMac, (tpSirFTPreAuthRsp)pSirMsg );
break;
#endif
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
- case eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_RSP:
- csrRoamFTRoamOffloadSynchRspProcessor(pMac,
- (tpSirFTRoamOffloadSynchRsp)pSirMsg);
- break;
-#endif
case eWNI_SME_MAX_ASSOC_EXCEEDED:
pSmeMaxAssocInd = (tSmeMaxAssocInd*)pSirMsg;
smsLog( pMac, LOG1, FL("send indication that max assoc have been reached and the new peer cannot be accepted"));
@@ -18569,238 +18557,72 @@ csrRoamSendChanSwIERequest(tpAniSirGlobal pMac, tCsrBssid bssid,
return status;
}
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-eHalStatus csrRoamEnqueueRoamOffloadSynch(
- tpAniSirGlobal pMac, tANI_U32 sessionId, tpSirBssDescription pBssDescription,
- eCsrRoamReason reason)
-{
- eHalStatus status = eHAL_STATUS_SUCCESS;
- tSmeCmd *pCommand;
-
- pCommand = csrGetCommandBuffer(pMac);
- if(NULL == pCommand)
- {
- smsLog( pMac, LOGE, FL(" fail to get command buffer") );
- status = eHAL_STATUS_RESOURCES;
- }
- else
- {
- if(pBssDescription)
- {
- /* copy over the parameters we need later */
- pCommand->command = eSmeCommandRoam;
- pCommand->u.roamCmd.roamReason = reason;
- pCommand->sessionId = (tANI_U8)sessionId;
- pCommand->u.roamCmd.pLastRoamBss = pBssDescription;
- status = csrQueueSmeCommand(pMac, pCommand, eANI_BOOLEAN_TRUE);
- if( !HAL_STATUS_SUCCESS( status ) )
- {
- smsLog( pMac, LOGE, FL(" fail to enqueue roam offload sync"
- "command, status = %d"), status );
- csrReleaseCommand( pMac, pCommand );
- }
- }
- else
- {
- /* Return failure */
- smsLog( pMac, LOGE, FL(" pBssDescription is NULL"));
- status = eHAL_STATUS_RESOURCES;
- csrReleaseCommand( pMac, pCommand );
- }
- }
- return (status);
-}
-
-eHalStatus csrRoamDequeueRoamOffloadSynch(tpAniSirGlobal pMac)
-{
- tListElem *pEntry;
- tSmeCmd *pCommand;
- pEntry = csrLLPeekHead( &pMac->sme.smeCmdActiveList, LL_ACCESS_LOCK );
- if ( pEntry )
- {
- pCommand = GET_BASE_ADDR( pEntry, tSmeCmd, Link );
- if ( (eSmeCommandRoam == pCommand->command) &&
- (eCsrPerformRoamOffloadSynch == pCommand->u.roamCmd.roamReason))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
- "LFR3:DQ-Command = %d, Reason = %d",
- pCommand->command, pCommand->u.roamCmd.roamReason);
- if (csrLLRemoveEntry( &pMac->sme.smeCmdActiveList, pEntry, LL_ACCESS_LOCK )) {
- csrReleaseCommand( pMac, pCommand );
- }
- } else {
- smsLog( pMac, LOGE, FL("Command = %d, Reason = %d "),
- pCommand->command, pCommand->u.roamCmd.roamReason);
- }
- }
- else {
- smsLog( pMac, LOGE, FL("pEntry NULL for eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_RSP"));
- }
- smeProcessPendingQueue( pMac );
- return eHAL_STATUS_SUCCESS;
-}
/*----------------------------------------------------------------------------
- * fn csrProcessRoamOffloadSynchInd
- * brief This will process the roam synch indication received from
- * lower layers.This function also calls another API to
- * parse the beacon IE and fill the appropriate fields
- * param pMac - pMac global structure
- * param pMsgBuf - Message buffer received from lower layers
- * --------------------------------------------------------------------------*/
-void csrProcessRoamOffloadSynchInd(tpAniSirGlobal pMac, void *pMsgBuf)
-{
- tpSirSmeRoamOffloadSynchInd smeRoamOffloadSynchInd = (tpSirSmeRoamOffloadSynchInd) pMsgBuf;
- tListElem *pEntry;
- tCsrScanResult *pBssDesc;
- tDot11fBeaconIEs *pIes;
- tCsrRoamSession *pSession = NULL;
-
- if (!smeRoamOffloadSynchInd)
- {
- smsLog(pMac, LOGE, FL("LFR3:smeRoamOffloadSynchInd is NULL"));
- return;
- }
- pSession = CSR_GET_SESSION(pMac, smeRoamOffloadSynchInd->roamedVdevId);
- if (!pSession)
- {
- smsLog(pMac, LOGE, FL("LFR3: session %d not found "),
- smeRoamOffloadSynchInd->roamedVdevId);
- return;
- }
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
- "%s: Received eWNI_SME_ROAM_OFFLOAD_SYNCH_IND", __func__);
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
- "authStatus=%d, vdevId=%d, BSSID=%x:%x:%x:%x:%x:%x\n",
- smeRoamOffloadSynchInd->authStatus,
- smeRoamOffloadSynchInd->roamedVdevId,
- smeRoamOffloadSynchInd->bssId[0],
- smeRoamOffloadSynchInd->bssId[1],
- smeRoamOffloadSynchInd->bssId[2],
- smeRoamOffloadSynchInd->bssId[3],
- smeRoamOffloadSynchInd->bssId[4],
- smeRoamOffloadSynchInd->bssId[5]);
- if (!HAL_STATUS_SUCCESS(csrScanSaveRoamOffloadApToScanCache(pMac, smeRoamOffloadSynchInd)))
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- "fail to save roam offload AP to scan cache");
- return;
- }
-
- csrLLLock(&pMac->scan.scanResultList);
- pEntry = csrLLPeekHead(&pMac->scan.scanResultList, LL_ACCESS_NOLOCK);
- while (pEntry)
- {
- pBssDesc = GET_BASE_ADDR(pEntry, tCsrScanResult, Link);
- pIes = (tDot11fBeaconIEs *)(pBssDesc->Result.pvIes);
- if (csrIsBssidMatch(pMac, (tCsrBssid *)(smeRoamOffloadSynchInd->bssId),
- (tCsrBssid *)(pBssDesc->Result.BssDescriptor.bssId)))
- break;
- pEntry = csrLLNext(&pMac->scan.scanResultList, pEntry, LL_ACCESS_NOLOCK);
- }
- csrLLUnlock(&pMac->scan.scanResultList);
-
- if (!pEntry)
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
- "%s: Not Found BSS descriptor", __func__);
- pSession->roamOffloadSynchParams.rssi = smeRoamOffloadSynchInd->rssi;
- pSession->roamOffloadSynchParams.roamReason = smeRoamOffloadSynchInd->roamReason;
- pSession->roamOffloadSynchParams.roamedVdevId = smeRoamOffloadSynchInd->roamedVdevId;
- vos_mem_copy(pSession->roamOffloadSynchParams.bssid,
- smeRoamOffloadSynchInd->bssId, sizeof(tSirMacAddr));
- pSession->roamOffloadSynchParams.txMgmtPower = smeRoamOffloadSynchInd->txMgmtPower;
- pSession->roamOffloadSynchParams.authStatus = smeRoamOffloadSynchInd->authStatus;
- pSession->roamOffloadSynchParams.bRoamSynchInProgress = eANI_BOOLEAN_TRUE;
- pMac->roam.reassocRespLen = smeRoamOffloadSynchInd->reassocRespLength;
- pMac->roam.pReassocResp =
- vos_mem_malloc(pMac->roam.reassocRespLen);
- if (NULL == pMac->roam.pReassocResp)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- "Memory allocation for reassoc response failed");
- return;
- }
- vos_mem_copy(pMac->roam.pReassocResp,
- (tANI_U8 *)smeRoamOffloadSynchInd +
- smeRoamOffloadSynchInd->reassocRespOffset,
- pMac->roam.reassocRespLen);
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- "LFR3:%s: the reassoc resp frame data:", __func__);
- VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- pMac->roam.pReassocResp,
- pMac->roam.reassocRespLen);
-
- vos_mem_copy(pSession->roamOffloadSynchParams.kck,
- smeRoamOffloadSynchInd->kck,
- SIR_KCK_KEY_LEN);
- vos_mem_copy(pSession->roamOffloadSynchParams.kek,
- smeRoamOffloadSynchInd->kek,
- SIR_KEK_KEY_LEN);
- vos_mem_copy(pSession->roamOffloadSynchParams.replay_ctr,
- smeRoamOffloadSynchInd->replay_ctr,
- SIR_REPLAY_CTR_LEN);
-
- if (pEntry)
- csrRoamEnqueueRoamOffloadSynch(
- pMac, smeRoamOffloadSynchInd->roamedVdevId,
- &pBssDesc->Result.BssDescriptor, eCsrPerformRoamOffloadSynch);
-}
-
-/*----------------------------------------------------------------------------
- * fn csrRoamIssueFTRoamOffloadSynch
- * brief This will pass down the request to LIM
- * param hHal - pMac global structure
- * param sessionId - SME session ID
- * param pBssDescription - BSS Descriptor
- * return eHalStatus - Returns a success if the msg is posted properly
- * --------------------------------------------------------------------------*/
-eHalStatus csrRoamIssueFTRoamOffloadSynch(
- tHalHandle hHal, tANI_U32 sessionId, tSirBssDescription *pBssDescription)
-{
- tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
- tpSirFTRoamOffloadSynchInd pftRoamOffloadSynchInd;
- tANI_U16 roam_offload_sync_ind_len = 0;
- tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId);
-
- roam_offload_sync_ind_len = sizeof(tSirFTRoamOffloadSynchInd);
- pftRoamOffloadSynchInd =
- (tpSirFTRoamOffloadSynchInd)vos_mem_malloc(roam_offload_sync_ind_len);
- if (pftRoamOffloadSynchInd == NULL)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
- "Memory allocation for FT Roam Offload Synch Indication failed");
- return eHAL_STATUS_RESOURCES;
- }
-
- vos_mem_copy((void *)&pftRoamOffloadSynchInd->currbssId,
- (void *)pSession->connectedProfile.bssid, sizeof(tSirMacAddr));
- /* Memory allocated below for pbssDescription is freed after
- * handling it in csrRoamFTRoamOffloadSynchRspProcessor */
- pftRoamOffloadSynchInd->pbssDescription = (tpSirBssDescription)vos_mem_malloc(
- sizeof(pBssDescription->length) + pBssDescription->length);
-
- pftRoamOffloadSynchInd->messageType = pal_cpu_to_be16(
- eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_IND);
-
- vos_mem_copy(pftRoamOffloadSynchInd->pbssDescription, pBssDescription,
- sizeof(pBssDescription->length) + pBssDescription->length);
-
- pftRoamOffloadSynchInd->length = pal_cpu_to_be16(roam_offload_sync_ind_len);
- return palSendMBMessage(pMac->hHdd, pftRoamOffloadSynchInd);
-}
-
-/*----------------------------------------------------------------------------
- * fn csrRoamFTRoamOffloadSynchRspProcessor
- * brief This will receive and process the FT Roam Offload Synch Response
+ * fn csrProcessRoamOffloadSynchInd
+ * brief This will receive and process the Roam Offload Synch Ind
* param hHal - pMac global structure
- * param tpSirFTRoamOffloadSynchRsp - Bss descriptor info is retrieved
+ * param pSmeRoamOffloadSynchInd - Roam Synch info is retrieved
* --------------------------------------------------------------------------*/
-void csrRoamFTRoamOffloadSynchRspProcessor(
- tHalHandle hHal, tpSirFTRoamOffloadSynchRsp pFTRoamOffloadSynchRsp )
+void csrProcessRoamOffloadSynchInd(
+ tHalHandle hHal, tpSirRoamOffloadSynchInd pSmeRoamOffloadSynchInd)
{
tpAniSirGlobal pMac = PMAC_STRUCT( hHal );
+ tCsrRoamSession *pSession = NULL;
+ tANI_U8 sessionId = pSmeRoamOffloadSynchInd->roamedVdevId;
+ pSession = CSR_GET_SESSION(pMac, pSmeRoamOffloadSynchInd->roamedVdevId);
+ if (!pSession) {
+ smsLog(pMac, LOGE, FL("LFR3: session %d not found "),
+ pSmeRoamOffloadSynchInd->roamedVdevId);
+ goto err_synch_rsp;
+ }
+ if (!HAL_STATUS_SUCCESS(csrScanSaveRoamOffloadApToScanCache(pMac,
+ pSmeRoamOffloadSynchInd))) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "fail to save roam offload AP to scan cache");
+ goto err_synch_rsp;
+ }
+ pSession->roamOffloadSynchParams.rssi = pSmeRoamOffloadSynchInd->rssi;
+ pSession->roamOffloadSynchParams.roamReason =
+ pSmeRoamOffloadSynchInd->roamReason;
+ pSession->roamOffloadSynchParams.roamedVdevId =
+ pSmeRoamOffloadSynchInd->roamedVdevId;
+ vos_mem_copy(pSession->roamOffloadSynchParams.bssid,
+ pSmeRoamOffloadSynchInd->bssId, sizeof(tSirMacAddr));
+ pSession->roamOffloadSynchParams.txMgmtPower =
+ pSmeRoamOffloadSynchInd->txMgmtPower;
+ pSession->roamOffloadSynchParams.authStatus =
+ pSmeRoamOffloadSynchInd->authStatus;
+ pSession->roamOffloadSynchParams.bRoamSynchInProgress = eANI_BOOLEAN_TRUE;
+ /*Save the BSS descriptor for later use*/
+ pSession->roamOffloadSynchParams.pbssDescription =
+ pSmeRoamOffloadSynchInd->pbssDescription;
+ pMac->roam.reassocRespLen = pSmeRoamOffloadSynchInd->reassocRespLength;
+ pMac->roam.pReassocResp =
+ vos_mem_malloc(pMac->roam.reassocRespLen);
+ if (NULL == pMac->roam.pReassocResp) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ "Memory allocation for reassoc response failed");
+ goto err_synch_rsp;
+ }
+ vos_mem_copy(pMac->roam.pReassocResp,
+ (tANI_U8 *)pSmeRoamOffloadSynchInd +
+ pSmeRoamOffloadSynchInd->reassocRespOffset,
+ pMac->roam.reassocRespLen);
- if (eHAL_STATUS_SUCCESS != csrNeighborRoamOffloadSynchRspHandler(
- pMac, pFTRoamOffloadSynchRsp, pFTRoamOffloadSynchRsp->sessionId)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "LFR3:%s: the reassoc resp frame data:", __func__);
+ VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ pMac->roam.pReassocResp, pMac->roam.reassocRespLen);
+
+ vos_mem_copy(pSession->roamOffloadSynchParams.kck,
+ pSmeRoamOffloadSynchInd->kck, SIR_KCK_KEY_LEN);
+ vos_mem_copy(pSession->roamOffloadSynchParams.kek,
+ pSmeRoamOffloadSynchInd->kek, SIR_KEK_KEY_LEN);
+ vos_mem_copy(pSession->roamOffloadSynchParams.replay_ctr,
+ pSmeRoamOffloadSynchInd->replay_ctr, SIR_REPLAY_CTR_LEN);
+
+ if (eHAL_STATUS_SUCCESS != csrNeighborRoamOffloadUpdatePreauthList(pMac,
+ pSmeRoamOffloadSynchInd, sessionId)) {
/*
* Bail out if Roam Offload Synch Response was not even handled.
*/
@@ -18808,15 +18630,14 @@ void csrRoamFTRoamOffloadSynchRspProcessor(
"was not processed"));
goto err_synch_rsp;
}
- csrNeighborRoamRequestHandoff(pMac, pFTRoamOffloadSynchRsp->sessionId);
- csrRoamDequeueRoamOffloadSynch(pMac);
+
+ csrNeighborRoamRequestHandoff(pMac, sessionId);
err_synch_rsp:
- vos_mem_free(pFTRoamOffloadSynchRsp->pbssDescription);
- pFTRoamOffloadSynchRsp->pbssDescription = NULL;
+ vos_mem_free(pSmeRoamOffloadSynchInd->pbssDescription);
+ pSmeRoamOffloadSynchInd->pbssDescription = NULL;
}
-
/*----------------------------------------------------------------------------
* fn csrProcessHOFailInd
* brief This function will process the Hand Off Failure indication
diff --git a/CORE/SME/src/csr/csrApiScan.c b/CORE/SME/src/csr/csrApiScan.c
index b7e07163217e..435e602845b8 100644
--- a/CORE/SME/src/csr/csrApiScan.c
+++ b/CORE/SME/src/csr/csrApiScan.c
@@ -8677,174 +8677,30 @@ void UpdateCCKMTSF(tANI_U32 *timeStamp0, tANI_U32 *timeStamp1, tANI_U32 *incr)
*/
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
eHalStatus csrScanSaveRoamOffloadApToScanCache(tpAniSirGlobal pMac,
- tSirSmeRoamOffloadSynchInd *pRoamOffloadSynchInd)
+ tSirRoamOffloadSynchInd *pRoamOffloadSynchInd)
{
v_U32_t uLen = 0;
- tpSirProbeRespBeacon pParsedFrame;
- tCsrScanResult *pScanResult = NULL;
- tSirBssDescription *pBssDescr = NULL;
tANI_BOOLEAN fDupBss;
tDot11fBeaconIEs *pIesLocal = NULL;
tAniSSID tmpSsid;
v_TIME_t timer=0;
- tpSirMacMgmtHdr macHeader;
- tANI_U8 *pBeaconProbeResp;
+ tCsrScanResult *pScanResult = NULL;
tANI_U8 sessionId = pRoamOffloadSynchInd->roamedVdevId;
- pBeaconProbeResp = (tANI_U8 *)pRoamOffloadSynchInd +
- pRoamOffloadSynchInd->beaconProbeRespOffset;
- macHeader = (tpSirMacMgmtHdr)pBeaconProbeResp;
- pParsedFrame =
- (tpSirProbeRespBeacon) vos_mem_malloc(sizeof(tSirProbeRespBeacon));
- if (NULL == pParsedFrame)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- "%s: fail to allocate memory for frame",__func__);
- return eHAL_STATUS_RESOURCES;
- }
-
- if ( pRoamOffloadSynchInd->beaconProbeRespLength <= SIR_MAC_HDR_LEN_3A )
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- "%s: Very few bytes in synchInd beacon / probe resp frame! length=%d",
- __func__, pRoamOffloadSynchInd->beaconProbeRespLength);
- vos_mem_free(pParsedFrame);
- return eHAL_STATUS_FAILURE;
- }
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,"LFR3: Beacon/Prb Rsp:");
- VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
- pBeaconProbeResp, pRoamOffloadSynchInd->beaconProbeRespLength);
-
- if (pRoamOffloadSynchInd->isBeacon)
- {
- if (sirParseBeaconIE(
- pMac, pParsedFrame,
- &pBeaconProbeResp[SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET],
- pRoamOffloadSynchInd->beaconProbeRespLength -
- SIR_MAC_HDR_LEN_3A) != eSIR_SUCCESS || !pParsedFrame->ssidPresent)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- "Parse error Beacon, length=%d",
- pRoamOffloadSynchInd->beaconProbeRespLength);
- vos_mem_free(pParsedFrame);
- return eHAL_STATUS_FAILURE;
- }
- }
- else
- {
- if (sirConvertProbeFrame2Struct(pMac,
- &pBeaconProbeResp[SIR_MAC_HDR_LEN_3A],
- pRoamOffloadSynchInd->beaconProbeRespLength - SIR_MAC_HDR_LEN_3A,
- pParsedFrame) != eSIR_SUCCESS ||
- !pParsedFrame->ssidPresent)
- {
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
- "Parse error ProbeResponse, length=%d",
- pRoamOffloadSynchInd->beaconProbeRespLength);
- vos_mem_free(pParsedFrame);
- return eHAL_STATUS_FAILURE;
- }
- }
- /* 24 byte MAC header and 12 byte to ssid IE */
- if (pRoamOffloadSynchInd->beaconProbeRespLength >
- (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET))
- {
- uLen = pRoamOffloadSynchInd->beaconProbeRespLength -
+ uLen = pRoamOffloadSynchInd->beaconProbeRespLength -
(SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET);
- }
pScanResult = vos_mem_malloc(sizeof(tCsrScanResult) + uLen);
if ( pScanResult == NULL )
{
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
" fail to allocate memory for frame");
- vos_mem_free(pParsedFrame);
return eHAL_STATUS_RESOURCES;
}
vos_mem_zero(pScanResult, sizeof(tCsrScanResult) + uLen );
- pBssDescr = &pScanResult->Result.BssDescriptor;
- /* Length of BSS desription is without length of
- * length itself and length of pointer
- * that holds the next BSS description
- */
- pBssDescr->length = (tANI_U16)(
- sizeof(tSirBssDescription) - sizeof(tANI_U16) -
- sizeof(tANI_U32) + uLen);
- if (pParsedFrame->dsParamsPresent)
- {
- pBssDescr->channelId = pParsedFrame->channelNumber;
- }
- else if (pParsedFrame->HTInfo.present)
- {
- pBssDescr->channelId = pParsedFrame->HTInfo.primaryChannel;
- }
- else
- {
- /*If DS Params or HTIE is not present in the probe resp or beacon,
- * then use the channel frequency provided by firmware to fill the
- * channel in the BSS descriptor.*/
- pBssDescr->channelId = vos_freq_to_chan(pRoamOffloadSynchInd->chan_freq);
- }
- pBssDescr->channelIdSelf = pBssDescr->channelId;
-
- if ((pBssDescr->channelId > 0) && (pBssDescr->channelId < 15))
- {
- int i;
- /* 11b or 11g packet
- * 11g if extended Rate IE is present or
- * if there is an A rate in suppRate IE */
- for (i = 0; i < pParsedFrame->supportedRates.numRates; i++)
- {
- if (sirIsArate(pParsedFrame->supportedRates.rate[i] & 0x7f))
- {
- pBssDescr->nwType = eSIR_11G_NW_TYPE;
- break;
- }
- }
- if (pParsedFrame->extendedRatesPresent)
- {
- pBssDescr->nwType = eSIR_11G_NW_TYPE;
- }
- }
- else
- {
- /* 11a packet */
- pBssDescr->nwType = eSIR_11A_NW_TYPE;
- }
-
- pBssDescr->sinr = 0;
- pBssDescr->beaconInterval = pParsedFrame->beaconInterval;
- pBssDescr->timeStamp[0] = pParsedFrame->timeStamp[0];
- pBssDescr->timeStamp[1] = pParsedFrame->timeStamp[1];
- vos_mem_copy(&pBssDescr->capabilityInfo,
- &pBeaconProbeResp[SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_CAPAB_OFFSET], 2);
- vos_mem_copy((tANI_U8 *) &pBssDescr->bssId,
- (tANI_U8 *) macHeader->bssId,
- sizeof(tSirMacAddr));
- pBssDescr->nReceivedTime = (tANI_TIMESTAMP)palGetTickCount(pMac->hHdd);
-
- if(pParsedFrame->mdiePresent)
- {
- pBssDescr->mdiePresent = pParsedFrame->mdiePresent;
- vos_mem_copy((tANI_U8 *)pBssDescr->mdie, (tANI_U8 *)pParsedFrame->mdie, SIR_MDIE_SIZE);
- }
-
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
- "LFR3:%s:BssDescr Info:", __func__);
- VOS_TRACE_HEX_DUMP(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
- pBssDescr->bssId, sizeof(tSirMacAddr));
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
- "LFR3:chan = %d, rssi = %d",
- pBssDescr->channelId, pBssDescr->rssi);
-
- if (uLen)
- {
- vos_mem_copy( &pBssDescr->ieFields,
- pBeaconProbeResp + (SIR_MAC_HDR_LEN_3A + SIR_MAC_B_PR_SSID_OFFSET),
- uLen);
- }
-
+ vos_mem_copy(&pScanResult->Result.BssDescriptor,
+ pRoamOffloadSynchInd->pbssDescription,
+ (sizeof(tSirBssDescription) + uLen));
pIesLocal = (tDot11fBeaconIEs *)( pScanResult->Result.pvIes );
if ( !pIesLocal &&
(!HAL_STATUS_SUCCESS(csrGetParsedBssDescriptionIEs(pMac,
@@ -8853,7 +8709,6 @@ eHalStatus csrScanSaveRoamOffloadApToScanCache(tpAniSirGlobal pMac,
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
"%s:Cannot Parse IEs", __func__);
csrFreeScanResultEntry(pMac, pScanResult);
- vos_mem_free(pParsedFrame);
return eHAL_STATUS_RESOURCES;
}
@@ -8869,13 +8724,9 @@ eHalStatus csrScanSaveRoamOffloadApToScanCache(tpAniSirGlobal pMac,
vos_mem_free(pIesLocal);
}
csrFreeScanResultEntry(pMac, pScanResult);
- vos_mem_free(pParsedFrame);
return eHAL_STATUS_RESOURCES;
}
csrScanAddResult(pMac, pScanResult, pIesLocal, sessionId);
-
- vos_mem_free(pParsedFrame);
-
return eHAL_STATUS_SUCCESS;
}
#endif
diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h
index e2ce5925828f..16fe53479999 100644
--- a/CORE/SME/src/csr/csrInsideApi.h
+++ b/CORE/SME/src/csr/csrInsideApi.h
@@ -1053,14 +1053,6 @@ eHalStatus csrScanCreateEntryInScanCache(tpAniSirGlobal pMac, tANI_U32 sessionId
eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac);
eHalStatus csrRoamDelPMKIDfromCache( tpAniSirGlobal pMac, tANI_U32 sessionId,
tANI_U8 *pBSSId, tANI_BOOLEAN flush_cache );
-#ifdef WLAN_FEATURE_ROAM_OFFLOAD
-eHalStatus csrRoamEnqueueRoamOffloadSynch(
- tpAniSirGlobal pMac, tANI_U32 sessionId, tpSirBssDescription pBssDescription,
- eCsrRoamReason reason);
-eHalStatus csrRoamDequeueRoamOffloadSynch(tpAniSirGlobal pMac);
-void csrRoamFTRoamOffloadSynchRspProcessor(
- tHalHandle hHal, tpSirFTRoamOffloadSynchRsp pFTRoamOffloadSynchRsp );
-#endif
tANI_BOOLEAN csrElectedCountryInfo(tpAniSirGlobal pMac);
void csrAddVoteForCountryInfo(tpAniSirGlobal pMac, tANI_U8 *pCountryCode);
diff --git a/CORE/SME/src/csr/csrNeighborRoam.c b/CORE/SME/src/csr/csrNeighborRoam.c
index 3e43fe3c0e19..411e07fcc70a 100644
--- a/CORE/SME/src/csr/csrNeighborRoam.c
+++ b/CORE/SME/src/csr/csrNeighborRoam.c
@@ -1696,17 +1696,18 @@ DEQ_PREAUTH:
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
/* ---------------------------------------------------------------------------
- * \fn csrNeighborRoamOffloadSynchRspHandler
- * \brief This function handle the RoamOffloadSynch from PE
+ * \fn csrNeighborRoamOffloadUpdatePreauthList
+ * \brief This function handle the RoamOffloadSynch and adds the
+ * roamed AP to the preauth done list
* \param pMac - The handle returned by macOpen.
- * \param pFTRoamOffloadSynchRsp - Roam offload sync response
+ * \param pSmeRoamOffloadSynchInd - Roam offload sync Ind Info
* \param sessionId - Session identifier
* \return eHAL_STATUS_SUCCESS on success,
* eHAL_STATUS_FAILURE otherwise
* --------------------------------------------------------------------------*/
eHalStatus
-csrNeighborRoamOffloadSynchRspHandler(tpAniSirGlobal pMac,
- tpSirFTRoamOffloadSynchRsp pFTRoamOffloadSynchRsp,
+csrNeighborRoamOffloadUpdatePreauthList(tpAniSirGlobal pMac,
+ tpSirRoamOffloadSynchInd pSmeRoamOffloadSynchInd,
tANI_U8 sessionId)
{
tpCsrNeighborRoamControlInfo pNeighborRoamInfo =
@@ -1731,13 +1732,13 @@ csrNeighborRoamOffloadSynchRspHandler(tpAniSirGlobal pMac,
FL("LFR3:Memory allocation for Neighbor Roam BSS Info failed"));
return eHAL_STATUS_FAILURE;
}
- bssDescLen = pFTRoamOffloadSynchRsp->pbssDescription->length +
- sizeof(pFTRoamOffloadSynchRsp->pbssDescription->length);
+ bssDescLen = pSmeRoamOffloadSynchInd->pbssDescription->length +
+ sizeof(pSmeRoamOffloadSynchInd->pbssDescription->length);
pBssInfo->pBssDescription = vos_mem_malloc(bssDescLen);
if (pBssInfo->pBssDescription != NULL)
{
vos_mem_copy(pBssInfo->pBssDescription,
- pFTRoamOffloadSynchRsp->pbssDescription,
+ pSmeRoamOffloadSynchInd->pbssDescription,
bssDescLen);
}
else
@@ -1760,7 +1761,7 @@ csrNeighborRoamOffloadSynchRspHandler(tpAniSirGlobal pMac,
}
vos_mem_zero(pftPreAuthReq, sizeof(tSirFTPreAuthReq));
vos_mem_copy(&pftPreAuthReq->preAuthbssId,
- pFTRoamOffloadSynchRsp->pbssDescription->bssId,
+ pSmeRoamOffloadSynchInd->pbssDescription->bssId,
sizeof(tSirMacAddr));
CSR_NEIGHBOR_ROAM_STATE_TRANSITION(eCSR_NEIGHBOR_ROAM_STATE_PREAUTH_DONE,
diff --git a/CORE/SME/src/csr/csrUtil.c b/CORE/SME/src/csr/csrUtil.c
index 5d5f0ab34734..cb9d25f225d5 100644
--- a/CORE/SME/src/csr/csrUtil.c
+++ b/CORE/SME/src/csr/csrUtil.c
@@ -3045,7 +3045,7 @@ tANI_BOOLEAN csrLookupPMKID( tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *p
{
for (Index = 0; Index < CSR_MAX_PMKID_ALLOWED; Index++)
{
- smsLog(pMac, LOGW, "match PMKID "MAC_ADDRESS_STR " to ",
+ smsLog(pMac, LOG1, "match PMKID "MAC_ADDRESS_STR " to ",
MAC_ADDR_ARRAY(pBSSId));
if( vos_mem_compare(pBSSId, pSession->PmkidCacheInfo[Index].BSSID, sizeof(tCsrBssid)) )
{
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 8a4f65fc776b..40bd6d140a95 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -2288,18 +2288,17 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg)
{
switch (pMsg->type) { // TODO: Will be modified to do a range check for msgs instead of having cases for each msgs
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
- case eWNI_SME_ROAM_OFFLOAD_SYNCH_IND:
- VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_DEBUG,
- "LFR3:%s: Rcvd eWNI_SME_ROAM_OFFLOAD_SYNCH_IND",__func__);
- csrProcessRoamOffloadSynchInd(pMac, pMsg->bodyptr);
- vos_mem_free(pMsg->bodyptr);
- break;
case eWNI_SME_HO_FAIL_IND:
VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
"LFR3:%s: Rcvd eWNI_SME_HO_FAIL_IND", __func__);
csrProcessHOFailInd(pMac, pMsg->bodyptr);
vos_mem_free(pMsg->bodyptr);
break;
+ case eWNI_SME_ROAM_OFFLOAD_SYNCH_IND:
+ csrProcessRoamOffloadSynchInd(pMac,
+ (tpSirRoamOffloadSynchInd)pMsg->bodyptr);
+ vos_mem_free(pMsg->bodyptr);
+ break;
#endif
case eWNI_PMC_ENTER_BMPS_RSP:
case eWNI_PMC_EXIT_BMPS_RSP:
diff --git a/CORE/SYS/legacy/src/utils/src/macTrace.c b/CORE/SYS/legacy/src/utils/src/macTrace.c
index 1351f0fcd94c..4e1728a4254a 100644
--- a/CORE/SYS/legacy/src/utils/src/macTrace.c
+++ b/CORE/SYS/legacy/src/utils/src/macTrace.c
@@ -521,8 +521,7 @@ tANI_U8* macTraceGetSmeMsgString( tANI_U16 smeMsg )
CASE_RETURN_STRING(eWNI_SME_GET_TSM_STATS_REQ);
CASE_RETURN_STRING(eWNI_SME_GET_TSM_STATS_RSP);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
- CASE_RETURN_STRING(eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_IND);
- CASE_RETURN_STRING(eWNI_SME_FT_ROAM_OFFLOAD_SYNCH_RSP);
+ CASE_RETURN_STRING(eWNI_SME_ROAM_OFFLOAD_SYNCH_IND);
#endif
default:
return( (tANI_U8*)"UNKNOWN" );
diff --git a/CORE/WDA/inc/wlan_qct_wda.h b/CORE/WDA/inc/wlan_qct_wda.h
index 4f1a4bf72fcf..bacf00613863 100644
--- a/CORE/WDA/inc/wlan_qct_wda.h
+++ b/CORE/WDA/inc/wlan_qct_wda.h
@@ -829,6 +829,7 @@ tSirRetStatus uMacPostCtrlMsg(void* pSirGlobal, tSirMbMsg* pMb);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
#define WDA_ROAM_OFFLOAD_SYNCH_CNF SIR_HAL_ROAM_OFFLOAD_SYNCH_CNF
+#define WDA_ROAM_OFFLOAD_SYNCH_IND SIR_HAL_ROAM_OFFLOAD_SYNCH_IND
#endif
#ifdef WLAN_WAKEUP_EVENTS
#define WDA_WAKE_REASON_IND SIR_HAL_WAKE_REASON_IND