summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeela Venkata Kiran Kumar Reddy Chirala <kchirala@qca.qualcomm.com>2014-06-16 23:03:04 -0700
committerPitani Venkata Rajesh Kumar <c_vpitan@qti.qualcomm.com>2014-07-09 12:13:21 +0530
commitec9f730119e9aaf98c91e7d4a9506d5de986663e (patch)
treeabd71b1d255b2ead080ea02bc18748ba68e109e6
parentb18f94228f714d319624af79692c10d3a7f2ea96 (diff)
WLAN:CORESTACK:Add support for roam offload feature in MAC/SME
Add support for ini param and init params in core stack Change-Id: I20cf3e8c73f4fe5bd8451a6b392de4be361610bf CRs-fixed: 682509
-rw-r--r--CORE/MAC/inc/sirApi.h39
-rw-r--r--CORE/SME/inc/csrApi.h19
-rw-r--r--CORE/SME/inc/csrInternal.h4
-rw-r--r--CORE/SME/inc/sme_Api.h26
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c89
-rw-r--r--CORE/SME/src/csr/csrInsideApi.h12
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c58
7 files changed, 242 insertions, 5 deletions
diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h
index 470746128a38..54eb1c5dd3bd 100644
--- a/CORE/MAC/inc/sirApi.h
+++ b/CORE/MAC/inc/sirApi.h
@@ -173,6 +173,21 @@ typedef enum
#endif /* FEATURE_WLAN_EXTSCAN */
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+#define SIR_KRK_KEY_LEN 16
+#define SIR_BTK_KEY_LEN 32
+
+#define SIR_UAPSD_BITOFFSET_ACVO 0
+#define SIR_UAPSD_BITOFFSET_ACVI 1
+#define SIR_UAPSD_BITOFFSET_ACBK 2
+#define SIR_UAPSD_BITOFFSET_ACBE 3
+
+#define SIR_UAPSD_FLAG_ACVO (1 << SIR_UAPSD_BITOFFSET_ACVO)
+#define SIR_UAPSD_FLAG_ACVI (1 << SIR_UAPSD_BITOFFSET_ACVI)
+#define SIR_UAPSD_FLAG_ACBK (1 << SIR_UAPSD_BITOFFSET_ACBK)
+#define SIR_UAPSD_FLAG_ACBE (1 << SIR_UAPSD_BITOFFSET_ACBE)
+#define SIR_UAPSD_GET(ac, mask) (((mask) & (SIR_UAPSD_FLAG_ ## ac)) >> SIR_UAPSD_BITOFFSET_ ## ac)
+#endif
enum eSirHostMsgTypes
{
SIR_HAL_APP_SETUP_NTF = SIR_HAL_HOST_MSG_START,
@@ -3626,6 +3641,9 @@ typedef struct sSirUpdateAPWPARSNIEsReq
#define SIR_ROAM_SCAN_RESERVED_BYTES 61
#endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+#define SIR_ROAM_SCAN_PSK_SIZE 32
+#endif
// SME -> HAL - This is the host offload request.
#define SIR_IPV4_ARP_REPLY_OFFLOAD 0
#define SIR_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD 1
@@ -3903,6 +3921,16 @@ typedef struct
} tSirPrefNetworkFoundInd, *tpSirPrefNetworkFoundInd;
#endif //FEATURE_WLAN_SCAN_PNO
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+typedef struct {
+ tANI_U8 acvo_uapsd: 1;
+ tANI_U8 acvi_uapsd: 1;
+ tANI_U8 acbk_uapsd: 1;
+ tANI_U8 acbe_uapsd: 1;
+ tANI_U8 reserved: 4;
+} tSirAcUapsd, *tpSirAcUapsd;
+#endif
+
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
typedef struct
{
@@ -3970,6 +3998,17 @@ typedef struct sSirRoamOffloadScanReq
tANI_U8 RoamBmissFinalBcnt;
tANI_U8 RoamBeaconRssiWeight;
eSirDFSRoamScanMode allowDFSChannelRoam;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ tANI_U8 RoamOffloadEnabled;
+ tANI_U8 PSK[SIR_ROAM_SCAN_PSK_SIZE];
+ tANI_U8 Prefer5GHz;
+ tANI_U8 RoamRssiCatGap;
+ tANI_U8 Select5GHzMargin;
+ tANI_U8 KRK[SIR_KRK_KEY_LEN];
+ tANI_U8 BTK[SIR_BTK_KEY_LEN];
+ tANI_U32 ReassocFailureTimeout;
+ tSirAcUapsd AcUapsd;
+#endif
} tSirRoamOffloadScanReq, *tpSirRoamOffloadScanReq;
#endif //WLAN_FEATURE_ROAM_SCAN_OFFLOAD
diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h
index 26809678300e..f9b9fc7e7d78 100644
--- a/CORE/SME/inc/csrApi.h
+++ b/CORE/SME/inc/csrApi.h
@@ -92,6 +92,9 @@ typedef enum
#endif /* FEATURE_WLAN_WAPI */
#ifdef FEATURE_WLAN_ESE
eCSR_ENCRYPT_TYPE_KRK,
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ eCSR_ENCRYPT_TYPE_BTK,
+#endif
#endif /* FEATURE_WLAN_ESE */
#ifdef WLAN_FEATURE_11W
//11w BIP
@@ -229,7 +232,6 @@ typedef enum
#endif
-
typedef struct tagCsrChannelInfo
{
tANI_U8 numOfChannels;
@@ -347,7 +349,10 @@ typedef struct tagCsrEseCckmInfo
{
tANI_U32 reassoc_req_num;
tANI_BOOLEAN krk_plumbed;
- tANI_U8 krk[CSR_KRK_KEY_LEN];
+ tANI_U8 krk[SIR_KRK_KEY_LEN];
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ tANI_U8 btk[SIR_BTK_KEY_LEN];
+#endif
} tCsrEseCckmInfo;
#endif
@@ -1207,6 +1212,10 @@ typedef struct tagCsrConfigParam
tANI_U8 cc_switch_mode;
#endif
tANI_U8 allowDFSChannelRoam;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ tANI_BOOLEAN isRoamOffloadEnabled;
+#endif
+
}tCsrConfigParam;
//Tush
@@ -1214,6 +1223,12 @@ typedef struct tagCsrUpdateConfigParam
{
tCsr11dinfo Csr11dinfo;
}tCsrUpdateConfigParam;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+#define csrRoamIsRoamOffloadEnabled(pMac)\
+ (pMac->roam.configParam.isRoamOffloadEnabled)
+
+#define DEFAULT_REASSOC_FAILURE_TIMEOUT 1000
+#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
#define CSR_ROAM_AUTH_STATUS_CONNECTED 0x1 /** connected,
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index ab1e179c3ec8..01b66cc089a6 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -690,6 +690,9 @@ typedef struct tagCsrConfig
tANI_U8 cc_switch_mode;
#endif
tANI_U8 allowDFSChannelRoam;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ tANI_BOOLEAN isRoamOffloadEnabled;
+#endif
}tCsrConfig;
typedef struct tagCsrChannelPowerInfo
@@ -1015,6 +1018,7 @@ typedef struct tagCsrRoamSession
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
tCsrRoamOffloadSynchStruct roamOffloadSynchParams;
+ tANI_U8 psk[SIR_ROAM_SCAN_PSK_SIZE];
#endif
} tCsrRoamSession;
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 6d73a75aabbf..1dff4c3b8013 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -840,6 +840,18 @@ eHalStatus sme_RoamFreeConnectProfile(tHalHandle hHal,
eHalStatus sme_RoamSetPMKIDCache( tHalHandle hHal, tANI_U8 sessionId, tPmkidCacheInfo *pPMKIDCache,
tANI_U32 numItems );
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+/* ---------------------------------------------------------------------------
+ * \fn sme_RoamSetPSK
+ * \brief a wrapper function to request CSR to save PSK
+ * This is a synchronous call.
+ * \param hHal - Global structure
+ * \param sessionId - SME sessionId
+ * \param pPSK - pointer to an array of Psk[]
+ *\return eHalStatus -status whether PSK is set or not
+ * ---------------------------------------------------------------------------*/
+eHalStatus sme_RoamSetPSK ( tHalHandle hHal, tANI_U8 sessionId, tANI_U8 *pPSK );
+#endif
/* ---------------------------------------------------------------------------
\fn sme_RoamGetSecurityReqIE
\brief a wrapper function to request CSR to return the WPA or RSN or WAPI IE CSR
@@ -3785,7 +3797,6 @@ eHalStatus sme_ExtScanRegisterCallback (tHalHandle hHal,
\param hHal - The handle returned by macOpen.
\return eHalStatus
---------------------------------------------------------------------------*/
-
eHalStatus sme_abortRoamScan(tHalHandle hHal);
#endif //#if WLAN_FEATURE_ROAM_SCAN_OFFLOAD
@@ -3837,4 +3848,17 @@ eHalStatus sme_SetLinkLayerStatsIndCB
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+/*--------------------------------------------------------------------------
+ \brief sme_UpdateRoamOffloadEnabled() - enable/disable roam offload feature
+ This is a synchronous call
+ \param hHal - The handle returned by macOpen.
+ \param nRoamOffloadEnabled - The boolean to update with
+ \return eHAL_STATUS_SUCCESS - SME update config successfully.
+ Other status means SME is failed to update.
+ \sa
+ --------------------------------------------------------------------------*/
+eHalStatus sme_UpdateRoamOffloadEnabled(tHalHandle hHal,
+ v_BOOL_t nRoamOffloadEnabled);
+#endif
#endif //#if !defined( __SME_API_H )
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 866184ae7db0..ce6a211ffe1e 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -843,7 +843,12 @@ eHalStatus csrRoamCopyConnectProfile(tpAniSirGlobal pMac, tANI_U32 sessionId, tC
{
vos_mem_copy (pProfile->eseCckmInfo.krk,
pSession->connectedProfile.eseCckmInfo.krk,
- CSR_KRK_KEY_LEN);
+ SIR_KRK_KEY_LEN);
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ vos_mem_copy (pProfile->eseCckmInfo.btk,
+ pSession->connectedProfile.eseCckmInfo.btk,
+ SIR_BTK_KEY_LEN);
+#endif
pProfile->eseCckmInfo.reassoc_req_num=
pSession->connectedProfile.eseCckmInfo.reassoc_req_num;
pProfile->eseCckmInfo.krk_plumbed =
@@ -1857,6 +1862,10 @@ eHalStatus csrChangeDefaultConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pPa
pMac->roam.configParam.cc_switch_mode = pParam->cc_switch_mode;
#endif
pMac->roam.configParam.allowDFSChannelRoam = pParam->allowDFSChannelRoam;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ pMac->roam.configParam.isRoamOffloadEnabled =
+ pParam->isRoamOffloadEnabled;
+#endif
}
return status;
@@ -1999,6 +2008,10 @@ eHalStatus csrGetConfigParam(tpAniSirGlobal pMac, tCsrConfigParam *pParam)
pMac->roam.configParam.allowDFSChannelRoam;
pParam->nInitialDwellTime =
pMac->roam.configParam.nInitialDwellTime;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ pParam->isRoamOffloadEnabled =
+ pMac->roam.configParam.isRoamOffloadEnabled;
+#endif
csrSetChannels(pMac, pParam);
status = eHAL_STATUS_SUCCESS;
@@ -8834,6 +8847,20 @@ static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessi
status = eHAL_STATUS_SUCCESS;
break;
}
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ else if (eCSR_ENCRYPT_TYPE_BTK == pSetKey->encType) {
+ if (pSetKey->keyLength < SIR_BTK_KEY_LEN) {
+ smsLog(pMac, LOGW,
+ "LFR3:Invalid BTK keylength [= %d] in SetContext call",
+ pSetKey->keyLength);
+ break;
+ }
+ vos_mem_copy(pSession->eseCckmInfo.btk, pSetKey->Key,
+ SIR_BTK_KEY_LEN);
+ status = eHAL_STATUS_SUCCESS;
+ break;
+ }
+#endif
#endif /* FEATURE_WLAN_ESE */
#ifdef WLAN_FEATURE_11W
@@ -8872,6 +8899,9 @@ static eHalStatus csrRoamIssueSetKeyCommand( tpAniSirGlobal pMac, tANI_U32 sessi
( (!HAL_STATUS_SUCCESS( status ) )
#ifdef FEATURE_WLAN_ESE
|| ( eCSR_ENCRYPT_TYPE_KRK == pSetKey->encType )
+#ifdef WLAN_FEATURE_WLAN_ROAM
+ || ( eCSR_ENCRYPT_TYPE_BTK == pSetKey->encType )
+#endif /* WLAN_FEATURE_WLAN_ROAM */
#endif /* FEATURE_WLAN_ESE */
) )
{
@@ -12368,6 +12398,19 @@ tANI_U32 csrRoamGetNumBKIDCache(tpAniSirGlobal pMac, tANI_U32 sessionId)
return (pMac->roam.roamSession[sessionId].NumBkidCache);
}
#endif /* FEATURE_WLAN_WAPI */
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+eHalStatus csrRoamSetPSK (tpAniSirGlobal pMac, tANI_U32 sessionId,
+ tANI_U8 *pPSK)
+{
+ tCsrRoamSession *pSession = CSR_GET_SESSION(pMac, sessionId);
+ if (!pSession) {
+ smsLog(pMac, LOGE, FL("session %d not found"), sessionId);
+ return eHAL_STATUS_FAILURE;
+ }
+ vos_mem_copy(pSession->psk, pPSK, sizeof(pSession->psk));
+ return eHAL_STATUS_SUCCESS;
+}
+#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
eHalStatus csrRoamSetPMKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId,
tPmkidCacheInfo *pPMKIDCache, tANI_U32 numItems )
{
@@ -16318,7 +16361,42 @@ csrRoamScanOffloadPrepareProbeReqTemplate(tpAniSirGlobal pMac,
*pusLen = nPayload + sizeof(tSirMacMgmtHdr);
return eSIR_SUCCESS;
}
-
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+void csrRoamOffload(tpAniSirGlobal pMac, tSirRoamOffloadScanReq *pRequestBuf,
+ tCsrRoamSession *pSession)
+{
+ vos_mem_copy(pRequestBuf->PSK, pSession->psk, sizeof(pRequestBuf->PSK));
+ pRequestBuf->Prefer5GHz = pMac->roam.configParam.nRoamPrefer5GHz;
+ pRequestBuf->RoamRssiCatGap = pMac->roam.configParam.bCatRssiOffset;
+ pRequestBuf->Select5GHzMargin = pMac->roam.configParam.nSelect5GHzMargin;
+ if (wlan_cfgGetInt(pMac, WNI_CFG_REASSOCIATION_FAILURE_TIMEOUT,
+ (tANI_U32 *)&pRequestBuf->ReassocFailureTimeout)
+ != eSIR_SUCCESS)
+ {
+ /**
+ * Could not get ReassocFailureTimeout value
+ * from CFG. Log error and set some default value
+ */
+ smsLog(pMac, LOGE, FL("could not retrieve ReassocFailureTimeout value"));
+ pRequestBuf->ReassocFailureTimeout = DEFAULT_REASSOC_FAILURE_TIMEOUT;
+ }
+#ifdef FEATURE_WLAN_ESE
+ if (csrIsAuthTypeESE(pRequestBuf->ConnectedNetwork.authentication)) {
+ vos_mem_copy(pRequestBuf->KRK,pSession->eseCckmInfo.krk, SIR_KRK_KEY_LEN);
+ vos_mem_copy(pRequestBuf->BTK,pSession->eseCckmInfo.btk, SIR_BTK_KEY_LEN);
+ pRequestBuf->IsESEConnection = eANI_BOOLEAN_TRUE;
+ }
+#endif
+ pRequestBuf->AcUapsd.acbe_uapsd =
+ SIR_UAPSD_GET(ACBE, pMac->lim.gUapsdPerAcBitmask);
+ pRequestBuf->AcUapsd.acbk_uapsd =
+ SIR_UAPSD_GET(ACBK, pMac->lim.gUapsdPerAcBitmask);
+ pRequestBuf->AcUapsd.acvi_uapsd =
+ SIR_UAPSD_GET(ACVI, pMac->lim.gUapsdPerAcBitmask);
+ pRequestBuf->AcUapsd.acvo_uapsd =
+ SIR_UAPSD_GET(ACVO, pMac->lim.gUapsdPerAcBitmask);
+}
+#endif
eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reason)
{
vos_msg_t msg;
@@ -16631,6 +16709,13 @@ eHalStatus csrRoamOffloadScan(tpAniSirGlobal pMac, tANI_U8 command, tANI_U8 reas
&pRequestBuf->us5GProbeTemplateLen,
pSession);
pRequestBuf->allowDFSChannelRoam = pMac->roam.configParam.allowDFSChannelRoam;
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+ pRequestBuf->RoamOffloadEnabled = csrRoamIsRoamOffloadEnabled(pMac);
+ /* Roam Offload piggybacks upon the Roam Scan offload command.*/
+ if (pRequestBuf->RoamOffloadEnabled){
+ csrRoamOffload(pMac, pRequestBuf, pSession);
+ }
+#endif
msg.type = WDA_ROAM_SCAN_OFFLOAD_REQ;
msg.reserved = 0;
msg.bodyptr = pRequestBuf;
diff --git a/CORE/SME/src/csr/csrInsideApi.h b/CORE/SME/src/csr/csrInsideApi.h
index b041e959236b..ab6cf8146ff7 100644
--- a/CORE/SME/src/csr/csrInsideApi.h
+++ b/CORE/SME/src/csr/csrInsideApi.h
@@ -748,6 +748,18 @@ eHalStatus csrRoamReconnect(tpAniSirGlobal pMac, tANI_U32 sessionId);
-------------------------------------------------------------------------------*/
eHalStatus csrRoamSetPMKIDCache( tpAniSirGlobal pMac, tANI_U32 sessionId, tPmkidCacheInfo *pPMKIDCache, tANI_U32 numItems );
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+/* ---------------------------------------------------------------------------
+ *\fn csrRoamSetPSK
+ *\brief store PSK
+ *\param pMac - pointer to global structure for MAC
+ *\param sessionId - Sme session id
+ *\param pPSK - pointer to an array of Psk
+ *\return eHalStatus - usually it succeed unless sessionId is not found
+ *\Note:
+ *-------------------------------------------------------------------------------*/
+eHalStatus csrRoamSetPSK (tpAniSirGlobal pMac, tANI_U32 sessionId, tANI_U8 *pPSK);
+#endif
/* ---------------------------------------------------------------------------
\fn csrRoamGetWpaRsnReqIE
\brief return the WPA or RSN IE CSR passes to PE to JOIN request or START_BSS request
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index e7ca12b9a6fe..f302867575de 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -3928,6 +3928,33 @@ eHalStatus sme_RoamDelPMKIDfromCache( tHalHandle hHal, tANI_U8 sessionId, tANI_U
}
return (status);
}
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+/* ---------------------------------------------------------------------------
+ *\fn sme_RoamSetPSK
+ *\brief a wrapper function to request CSR to save PSK
+ * This is a synchronous call.
+ *\param hHal - Global structure
+ *\param sessionId - SME sessionId
+ *\param pPSK - pointer to an array of Psk[]
+ *\return eHalStatus -status whether PSK is set or not
+ *---------------------------------------------------------------------------*/
+eHalStatus sme_RoamSetPSK (tHalHandle hHal, tANI_U8 sessionId, tANI_U8 *pPSK)
+{
+ eHalStatus status = eHAL_STATUS_FAILURE;
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ status = sme_AcquireGlobalLock(&pMac->sme);
+ if (HAL_STATUS_SUCCESS(status)) {
+ if (CSR_IS_SESSION_VALID(pMac, sessionId)) {
+ status = csrRoamSetPSK(pMac, sessionId, pPSK);
+ }
+ else {
+ status = eHAL_STATUS_INVALID_PARAMETER;
+ }
+ sme_ReleaseGlobalLock(&pMac->sme);
+ }
+ return (status);
+}
+#endif
/* ---------------------------------------------------------------------------
\fn sme_RoamGetSecurityReqIE
\brief a wrapper function to request CSR to return the WPA or RSN or WAPI IE CSR
@@ -13416,3 +13443,34 @@ eHalStatus sme_SetLinkLayerStatsIndCB
}
#endif /* WLAN_FEATURE_LINK_LAYER_STATS */
+#ifdef WLAN_FEATURE_ROAM_OFFLOAD
+/*--------------------------------------------------------------------------
+ \brief sme_UpdateRoamOffloadEnabled() - enable/disable roam offload feaure
+ It is used at in the REG_DYNAMIC_VARIABLE macro definition of
+ \param hHal - The handle returned by macOpen.
+ \param nRoamOffloadEnabled - The boolean to update with
+ \return eHAL_STATUS_SUCCESS - SME update config successfully.
+ Other status means SME is failed to update.
+ \sa
+ --------------------------------------------------------------------------*/
+
+eHalStatus sme_UpdateRoamOffloadEnabled(tHalHandle hHal,
+ v_BOOL_t nRoamOffloadEnabled)
+{
+ tpAniSirGlobal pMac = PMAC_STRUCT(hHal);
+ eHalStatus status = eHAL_STATUS_SUCCESS;
+
+ status = sme_AcquireGlobalLock(&pMac->sme);
+ if (HAL_STATUS_SUCCESS(status))
+ {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_INFO,
+ "%s: LFR3:gRoamOffloadEnabled is changed from %d to %d", __func__,
+ pMac->roam.configParam.isRoamOffloadEnabled,
+ nRoamOffloadEnabled);
+ pMac->roam.configParam.isRoamOffloadEnabled = nRoamOffloadEnabled;
+ sme_ReleaseGlobalLock(&pMac->sme);
+ }
+
+ return status ;
+}
+#endif