summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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