From 828f1893282969300a83368c13f3e6e60155ea1e Mon Sep 17 00:00:00 2001 From: Deepak Dhamdhere Date: Thu, 9 Feb 2017 11:51:19 -0800 Subject: [PATCH] qcacld-3.0: Add support for PMKID modes of PMK caching and OKC Convert the boolean variables used for tracking okc_enable into separate bit flags for OKC and PMK caching. Firmware will also add support for bitwise enablement of OKC and PMK caching in 802.11i configuration part of RSO command. CRs-Fixed: 2004963 Change-Id: Ib2fcdc6318adb488eca5cf47b2b59541020e6009 --- core/hdd/inc/wlan_hdd_cfg.h | 27 +++++++++++--- core/hdd/src/wlan_hdd_cfg.c | 31 +++++++++-------- core/hdd/src/wlan_hdd_cfg80211.c | 22 +++++++----- core/hdd/src/wlan_hdd_ioctl.c | 58 ++++++++++++++++++------------- core/mac/inc/sir_api.h | 14 +++++++- core/sme/inc/csr_internal.h | 2 +- core/sme/inc/sme_api.h | 2 +- core/sme/src/common/sme_api.c | 10 +++--- core/sme/src/csr/csr_api_roam.c | 9 ++--- core/sme/src/csr/csr_inside_api.h | 2 +- core/wma/src/wma_scan_roam.c | 3 +- 11 files changed, 113 insertions(+), 67 deletions(-) diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h index 1c76121d4334..f4482edccf77 100644 --- a/core/hdd/inc/wlan_hdd_cfg.h +++ b/core/hdd/inc/wlan_hdd_cfg.h @@ -561,6 +561,19 @@ enum hdd_dot11_mode { * * This ini is used to enable or disable DFS channel * scan + */ +#define CFG_ENABLE_DFS_CHNL_SCAN_NAME "gEnableDFSChnlScan" +#define CFG_ENABLE_DFS_CHNL_SCAN_MIN (0) +#define CFG_ENABLE_DFS_CHNL_SCAN_MAX (1) +#define CFG_ENABLE_DFS_CHNL_SCAN_DEFAULT (1) + +/* + * + * pmkidModes - Enable PMKID modes + * This INI is used to enable PMKID feature options + * @Min: 0 + * @Max: 3 + * @Default: 3 * * Related: None * @@ -570,10 +583,12 @@ enum hdd_dot11_mode { * * */ -#define CFG_ENABLE_DFS_CHNL_SCAN_NAME "gEnableDFSChnlScan" -#define CFG_ENABLE_DFS_CHNL_SCAN_MIN (0) -#define CFG_ENABLE_DFS_CHNL_SCAN_MAX (1) -#define CFG_ENABLE_DFS_CHNL_SCAN_DEFAULT (1) +#define CFG_PMKID_MODES_NAME "pmkidModes" +#define CFG_PMKID_MODES_MIN (0x0) +#define CFG_PMKID_MODES_MAX (0x3) +#define CFG_PMKID_MODES_DEFAULT (0x3) +#define CFG_PMKID_MODES_OKC (0x1) +#define CFG_PMKID_MODES_PMKSA_CACHING (0x2) /* * @@ -10460,7 +10475,7 @@ struct hdd_config { bool isFastTransitionEnabled; uint8_t RoamRssiDiff; bool isWESModeEnabled; - bool isOkcIniFeatureEnabled; + uint32_t pmkid_modes; bool isRoamOffloadScanEnabled; bool bImplicitQosEnabled; @@ -11171,6 +11186,8 @@ QDF_STATUS hdd_execute_global_config_command(hdd_context_t *pHddCtx, bool hdd_is_okc_mode_enabled(hdd_context_t *pHddCtx); QDF_STATUS hdd_set_idle_ps_config(hdd_context_t *pHddCtx, uint32_t val); +void hdd_get_pmkid_modes(hdd_context_t *pHddCtx, + struct pmkid_mode_bits *pmkid_modes); void hdd_update_tgt_cfg(void *context, void *param); diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c index d640eff5a3b7..36fc46c57dfa 100644 --- a/core/hdd/src/wlan_hdd_cfg.c +++ b/core/hdd/src/wlan_hdd_cfg.c @@ -1028,13 +1028,14 @@ struct reg_table_entry g_registry_table[] = { CFG_ENABLE_WES_MODE_NAME_MIN, CFG_ENABLE_WES_MODE_NAME_MAX, cb_notify_set_wes_mode, 0), - REG_VARIABLE(CFG_OKC_FEATURE_ENABLED_NAME, WLAN_PARAM_Integer, - struct hdd_config, isOkcIniFeatureEnabled, + REG_VARIABLE(CFG_PMKID_MODES_NAME, WLAN_PARAM_Integer, + struct hdd_config, pmkid_modes, VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, - CFG_OKC_FEATURE_ENABLED_DEFAULT, - CFG_OKC_FEATURE_ENABLED_MIN, - CFG_OKC_FEATURE_ENABLED_MAX), + CFG_PMKID_MODES_DEFAULT, + CFG_PMKID_MODES_MIN, + CFG_PMKID_MODES_MAX), + REG_DYNAMIC_VARIABLE(CFG_ROAM_SCAN_OFFLOAD_ENABLED, WLAN_PARAM_Integer, struct hdd_config, isRoamOffloadScanEnabled, VAR_FLAGS_OPTIONAL | @@ -5354,8 +5355,8 @@ void hdd_cfg_print(hdd_context_t *pHddCtx) pHddCtx->config->RoamRssiDiff); hdd_info("Name = [isWESModeEnabled] Value = [%u] ", pHddCtx->config->isWESModeEnabled); - hdd_info("Name = [OkcEnabled] Value = [%u] ", - pHddCtx->config->isOkcIniFeatureEnabled); + hdd_info("Name = [pmkidModes] Value = [0x%x] ", + pHddCtx->config->pmkid_modes); #ifdef FEATURE_WLAN_SCAN_PNO hdd_info("Name = [configPNOScanSupport] Value = [%u] ", pHddCtx->config->configPNOScanSupport); @@ -7602,18 +7603,18 @@ QDF_STATUS hdd_cfg_get_global_config(hdd_context_t *pHddCtx, char *pBuf, } /** - * hdd_is_okc_mode_enabled() - returns whether OKC mode is enabled or not + * hdd_get_pmkid_modes() - returns PMKID mode bits * @pHddCtx: the pointer to hdd context * - * Return: true if OKC is enabled, otherwise false + * Return: value of pmkid_modes */ -bool hdd_is_okc_mode_enabled(hdd_context_t *pHddCtx) +void hdd_get_pmkid_modes(hdd_context_t *pHddCtx, + struct pmkid_mode_bits *pmkid_modes) { - if (NULL == pHddCtx) { - hdd_alert("pHddCtx is NULL"); - return -EINVAL; - } - return pHddCtx->config->isOkcIniFeatureEnabled; + pmkid_modes->fw_okc = (pHddCtx->config->pmkid_modes & + CFG_PMKID_MODES_OKC) ? 1 : 0; + pmkid_modes->fw_pmksa_cache = (pHddCtx->config->pmkid_modes & + CFG_PMKID_MODES_PMKSA_CACHING) ? 1 : 0; } /** diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index 4ccc55ac0558..0c55b0e3c997 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/core/hdd/src/wlan_hdd_cfg80211.c @@ -4285,6 +4285,7 @@ static int __wlan_hdd_cfg80211_keymgmt_set_key(struct wiphy *wiphy, hdd_adapter_t *hdd_adapter_ptr = WLAN_HDD_GET_PRIV_PTR(dev); hdd_context_t *hdd_ctx_ptr; int status; + struct pmkid_mode_bits pmkid_modes; ENTER_DEV(dev); @@ -4308,10 +4309,13 @@ static int __wlan_hdd_cfg80211_keymgmt_set_key(struct wiphy *wiphy, status = wlan_hdd_validate_context(hdd_ctx_ptr); if (status) return status; + + hdd_get_pmkid_modes(hdd_ctx_ptr, &pmkid_modes); + sme_update_roam_key_mgmt_offload_enabled(hdd_ctx_ptr->hHal, hdd_adapter_ptr->sessionId, true, - hdd_is_okc_mode_enabled(hdd_ctx_ptr)); + &pmkid_modes); qdf_mem_zero(&local_pmk, SIR_ROAM_SCAN_PSK_SIZE); qdf_mem_copy(local_pmk, data, data_len); sme_roam_set_psk_pmk(WLAN_HDD_GET_HAL_CTX(hdd_adapter_ptr), @@ -13450,6 +13454,9 @@ int wlan_hdd_cfg80211_update_bss(struct wiphy *wiphy, * @preauth: Preauth flag * * This function is used to notify the supplicant of a new PMKSA candidate. + * PMK value is notified to supplicant whether PMK caching or OKC is enabled + * in firmware or not. Supplicant needs this value becaue it uses PMK caching + * by default. * * Return: 0 for success, non-zero for failure */ @@ -13458,7 +13465,6 @@ int wlan_hdd_cfg80211_pmksa_candidate_notify(hdd_adapter_t *pAdapter, int index, bool preauth) { struct net_device *dev = pAdapter->dev; - hdd_context_t *pHddCtx = (hdd_context_t *) pAdapter->pHddCtx; ENTER(); hdd_debug("is going to notify supplicant of:"); @@ -13468,13 +13474,11 @@ int wlan_hdd_cfg80211_pmksa_candidate_notify(hdd_adapter_t *pAdapter, return -EINVAL; } - if (true == hdd_is_okc_mode_enabled(pHddCtx)) { - hdd_notice(MAC_ADDRESS_STR, - MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes)); - cfg80211_pmksa_candidate_notify(dev, index, - pRoamInfo->bssid.bytes, - preauth, GFP_KERNEL); - } + hdd_notice(MAC_ADDRESS_STR, + MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes)); + cfg80211_pmksa_candidate_notify(dev, index, + pRoamInfo->bssid.bytes, + preauth, GFP_KERNEL); return 0; } diff --git a/core/hdd/src/wlan_hdd_ioctl.c b/core/hdd/src/wlan_hdd_ioctl.c index ba76227ad1f3..ad0595bc6371 100644 --- a/core/hdd/src/wlan_hdd_ioctl.c +++ b/core/hdd/src/wlan_hdd_ioctl.c @@ -3404,15 +3404,17 @@ static int drv_cmd_get_ccx_mode(hdd_adapter_t *adapter, bool eseMode = sme_get_is_ese_feature_enabled(hdd_ctx->hHal); char extra[32]; uint8_t len = 0; + struct pmkid_mode_bits pmkid_modes; + hdd_get_pmkid_modes(hdd_ctx, &pmkid_modes); /* - * Check if the features OKC/ESE/11R are supported simultaneously, + * Check if the features PMKID/ESE/11R are supported simultaneously, * then this operation is not permitted (return FAILURE) */ if (eseMode && - hdd_is_okc_mode_enabled(hdd_ctx) && + (pmkid_modes.fw_okc || pmkid_modes.fw_pmksa_cache) && sme_get_is_ft_feature_enabled(hdd_ctx->hHal)) { - hdd_warn("OKC/ESE/11R are supported simultaneously hence this operation is not permitted!"); + hdd_warn("PMKID/ESE/11R are supported simultaneously hence this operation is not permitted!"); ret = -EPERM; goto exit; } @@ -3437,24 +3439,25 @@ static int drv_cmd_get_okc_mode(hdd_adapter_t *adapter, hdd_priv_data_t *priv_data) { int ret = 0; - bool okcMode = hdd_is_okc_mode_enabled(hdd_ctx); + struct pmkid_mode_bits pmkid_modes; char extra[32]; uint8_t len = 0; + hdd_get_pmkid_modes(hdd_ctx, &pmkid_modes); /* * Check if the features OKC/ESE/11R are supported simultaneously, * then this operation is not permitted (return FAILURE) */ - if (okcMode && + if (pmkid_modes.fw_okc && sme_get_is_ese_feature_enabled(hdd_ctx->hHal) && sme_get_is_ft_feature_enabled(hdd_ctx->hHal)) { - hdd_warn("OKC/ESE/11R are supported simultaneously hence this operation is not permitted!"); + hdd_warn("PMKID/ESE/11R are supported simultaneously hence this operation is not permitted!"); ret = -EPERM; goto exit; } len = scnprintf(extra, sizeof(extra), "%s %d", - "GETOKCMODE", okcMode); + "GETOKCMODE", pmkid_modes.fw_okc); len = QDF_MIN(priv_data->total_len, len + 1); if (copy_to_user(priv_data->buf, &extra, len)) { @@ -4393,16 +4396,19 @@ static int drv_cmd_set_okc_mode(hdd_adapter_t *adapter, { int ret = 0; uint8_t *value = command; - uint8_t okcMode = CFG_OKC_FEATURE_ENABLED_DEFAULT; + uint32_t okc_mode; + struct pmkid_mode_bits pmkid_modes; + + hdd_get_pmkid_modes(hdd_ctx, &pmkid_modes); /* - * Check if the features OKC/ESE/11R are supported simultaneously, + * Check if the features PMKID/ESE/11R are supported simultaneously, * then this operation is not permitted (return FAILURE) */ if (sme_get_is_ese_feature_enabled(hdd_ctx->hHal) && - hdd_is_okc_mode_enabled(hdd_ctx) && + pmkid_modes.fw_okc && sme_get_is_ft_feature_enabled(hdd_ctx->hHal)) { - hdd_warn("OKC/ESE/11R are supported simultaneously hence this operation is not permitted!"); + hdd_warn("PMKID/ESE/11R are supported simultaneously hence this operation is not permitted!"); ret = -EPERM; goto exit; } @@ -4410,33 +4416,35 @@ static int drv_cmd_set_okc_mode(hdd_adapter_t *adapter, /* Move pointer to ahead of SETOKCMODE */ value = value + command_len + 1; + /* get the current configured value */ + okc_mode = hdd_ctx->config->pmkid_modes & CFG_PMKID_MODES_OKC; + /* Convert the value from ascii to integer */ - ret = kstrtou8(value, 10, &okcMode); + ret = kstrtou32(value, 10, &okc_mode); if (ret < 0) { /* * If the input value is greater than max value of datatype, * then also kstrtou8 fails */ - hdd_err("kstrtou8 failed range [%d - %d]", - CFG_OKC_FEATURE_ENABLED_MIN, - CFG_OKC_FEATURE_ENABLED_MAX); + hdd_err("value out of range [0 - 1]"); ret = -EINVAL; goto exit; } - if ((okcMode < CFG_OKC_FEATURE_ENABLED_MIN) || - (okcMode > CFG_OKC_FEATURE_ENABLED_MAX)) { - hdd_err("Okc mode value %d is out of range (Min: %d Max: %d)", - okcMode, - CFG_OKC_FEATURE_ENABLED_MIN, - CFG_OKC_FEATURE_ENABLED_MAX); + if ((okc_mode < 0) || + (okc_mode > 1)) { + hdd_err("Okc mode value %d is out of range (Min: 0 Max: 1)", + okc_mode); ret = -EINVAL; goto exit; } hdd_debug("Received Command to change okc mode = %d", - okcMode); + okc_mode); - hdd_ctx->config->isOkcIniFeatureEnabled = okcMode; + if (okc_mode) + hdd_ctx->config->pmkid_modes |= CFG_PMKID_MODES_OKC; + else + hdd_ctx->config->pmkid_modes &= ~CFG_PMKID_MODES_OKC; exit: return ret; @@ -5491,13 +5499,15 @@ static int drv_cmd_set_ccx_mode(hdd_adapter_t *adapter, int ret = 0; uint8_t *value = command; uint8_t eseMode = CFG_ESE_FEATURE_ENABLED_DEFAULT; + struct pmkid_mode_bits pmkid_modes; + hdd_get_pmkid_modes(hdd_ctx, &pmkid_modes); /* * Check if the features OKC/ESE/11R are supported simultaneously, * then this operation is not permitted (return FAILURE) */ if (sme_get_is_ese_feature_enabled(hdd_ctx->hHal) && - hdd_is_okc_mode_enabled(hdd_ctx) && + pmkid_modes.fw_okc && sme_get_is_ft_feature_enabled(hdd_ctx->hHal)) { hdd_warn("OKC/ESE/11R are supported simultaneously hence this operation is not permitted!"); ret = -EPERM; diff --git a/core/mac/inc/sir_api.h b/core/mac/inc/sir_api.h index 8e34aa36148b..c7f58808591a 100644 --- a/core/mac/inc/sir_api.h +++ b/core/mac/inc/sir_api.h @@ -2963,6 +2963,18 @@ struct roam_ext_params { int traffic_threshold; }; +/** + * struct pmkid_mode_bits - Bit flags for PMKID usage in RSN IE + * @fw_okc: Opportunistic key caching enable in firmware + * @fw_pmksa_cache: PMKSA caching enable in firmware, remember previously + * visited BSSID/PMK pairs + */ +struct pmkid_mode_bits { + uint32_t fw_okc:1; + uint32_t fw_pmksa_cache:1; + uint32_t unused:30; +}; + typedef struct sSirRoamOffloadScanReq { uint16_t message_type; uint16_t length; @@ -3007,7 +3019,7 @@ typedef struct sSirRoamOffloadScanReq { uint8_t R0KH_ID[SIR_ROAM_R0KH_ID_MAX_LEN]; uint32_t R0KH_ID_Length; uint8_t RoamKeyMgmtOffloadEnabled; - bool okc_enabled; + struct pmkid_mode_bits pmkid_modes; #endif struct roam_ext_params roam_params; uint8_t middle_of_roaming; diff --git a/core/sme/inc/csr_internal.h b/core/sme/inc/csr_internal.h index ded4457243e3..4665b2489f11 100644 --- a/core/sme/inc/csr_internal.h +++ b/core/sme/inc/csr_internal.h @@ -955,7 +955,7 @@ typedef struct tagCsrRoamSession { size_t pmk_len; uint8_t RoamKeyMgmtOffloadEnabled; roam_offload_synch_ind *roam_synch_data; - bool okc_enabled; + struct pmkid_mode_bits pmkid_modes; #endif tftSMEContext ftSmeContext; /* This count represents the number of bssid's we try to join. */ diff --git a/core/sme/inc/sme_api.h b/core/sme/inc/sme_api.h index 98b940ed7839..f0d69fc3a1b9 100644 --- a/core/sme/inc/sme_api.h +++ b/core/sme/inc/sme_api.h @@ -908,7 +908,7 @@ QDF_STATUS sme_update_roam_offload_enabled(tHalHandle hHal, QDF_STATUS sme_update_roam_key_mgmt_offload_enabled(tHalHandle hal_ctx, uint8_t session_id, bool key_mgmt_offload_enabled, - bool okc_enabled); + struct pmkid_mode_bits *pmkid_modes); #endif #ifdef WLAN_FEATURE_NAN QDF_STATUS sme_nan_event(tHalHandle hHal, void *pMsg); diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index d7b74bb0048f..60dcbed2ec30 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -13342,15 +13342,15 @@ QDF_STATUS sme_update_roam_offload_enabled(tHalHandle hHal, * @hal_ctx: The handle returned by mac_open. * @session_id: Session Identifier * @key_mgmt_offload_enabled: key mgmt enable/disable flag - * @okc_enabled: Opportunistic key caching enable/disable flag + * @pmkid_modes: PMKID modes of PMKSA caching and OKC * Return: QDF_STATUS_SUCCESS - SME updated config successfully. * Other status means SME is failed to update. */ QDF_STATUS sme_update_roam_key_mgmt_offload_enabled(tHalHandle hal_ctx, - uint8_t session_id, - bool key_mgmt_offload_enabled, - bool okc_enabled) + uint8_t session_id, + bool key_mgmt_offload_enabled, + struct pmkid_mode_bits *pmkid_modes) { tpAniSirGlobal mac_ctx = PMAC_STRUCT(hal_ctx); QDF_STATUS status = QDF_STATUS_SUCCESS; @@ -13364,7 +13364,7 @@ QDF_STATUS sme_update_roam_key_mgmt_offload_enabled(tHalHandle hal_ctx, status = csr_roam_set_key_mgmt_offload(mac_ctx, session_id, key_mgmt_offload_enabled, - okc_enabled); + pmkid_modes); } else { status = QDF_STATUS_E_INVAL; } diff --git a/core/sme/src/csr/csr_api_roam.c b/core/sme/src/csr/csr_api_roam.c index d7338d60ed38..50d660956d68 100644 --- a/core/sme/src/csr/csr_api_roam.c +++ b/core/sme/src/csr/csr_api_roam.c @@ -16920,7 +16920,7 @@ QDF_STATUS csr_get_statistics(tpAniSirGlobal pMac, * @mac_ctx: mac context. * @session_id: Session Identifier * @roam_key_mgmt_offload_enabled: key mgmt enable/disable flag - * @okc_enabled: Opportunistic key caching enable/disable flag + * @pmkid_modes: PMKID modes of PMKSA caching and OKC * * Return: QDF_STATUS_SUCCESS - CSR updated config successfully. * Other status means CSR is failed to update. @@ -16929,7 +16929,7 @@ QDF_STATUS csr_get_statistics(tpAniSirGlobal pMac, QDF_STATUS csr_roam_set_key_mgmt_offload(tpAniSirGlobal mac_ctx, uint32_t session_id, bool roam_key_mgmt_offload_enabled, - bool okc_enabled) + struct pmkid_mode_bits *pmkid_modes) { tCsrRoamSession *session = CSR_GET_SESSION(mac_ctx, session_id); @@ -16938,7 +16938,8 @@ QDF_STATUS csr_roam_set_key_mgmt_offload(tpAniSirGlobal mac_ctx, return QDF_STATUS_E_FAILURE; } session->RoamKeyMgmtOffloadEnabled = roam_key_mgmt_offload_enabled; - session->okc_enabled = okc_enabled; + session->pmkid_modes.fw_okc = pmkid_modes->fw_okc; + session->pmkid_modes.fw_pmksa_cache = pmkid_modes->fw_pmksa_cache; return QDF_STATUS_SUCCESS; } @@ -17517,7 +17518,7 @@ csr_create_roam_scan_offload_request(tpAniSirGlobal mac_ctx, #ifdef WLAN_FEATURE_ROAM_OFFLOAD req_buf->RoamOffloadEnabled = csr_roamIsRoamOffloadEnabled(mac_ctx); req_buf->RoamKeyMgmtOffloadEnabled = session->RoamKeyMgmtOffloadEnabled; - req_buf->okc_enabled = session->okc_enabled; + req_buf->pmkid_modes = session->pmkid_modes; /* Roam Offload piggybacks upon the Roam Scan offload command. */ if (req_buf->RoamOffloadEnabled) csr_update_roam_scan_offload_request(mac_ctx, req_buf, session); diff --git a/core/sme/src/csr/csr_inside_api.h b/core/sme/src/csr/csr_inside_api.h index e2c23282c836..17ae441881a4 100644 --- a/core/sme/src/csr/csr_inside_api.h +++ b/core/sme/src/csr/csr_inside_api.h @@ -777,7 +777,7 @@ QDF_STATUS csr_roam_set_psk_pmk(tpAniSirGlobal pMac, uint32_t sessionId, QDF_STATUS csr_roam_set_key_mgmt_offload(tpAniSirGlobal mac_ctx, uint32_t session_id, bool roam_key_mgmt_offload_enabled, - bool okc_enabled); + struct pmkid_mode_bits *pmkid_modes); #endif /* --------------------------------------------------------------------------- \fn csr_roam_get_wpa_rsn_req_ie diff --git a/core/wma/src/wma_scan_roam.c b/core/wma/src/wma_scan_roam.c index 9016a23ee3d0..3236274ee648 100644 --- a/core/wma/src/wma_scan_roam.c +++ b/core/wma/src/wma_scan_roam.c @@ -809,7 +809,8 @@ QDF_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle, roam_req->RoamKeyMgmtOffloadEnabled; wma_roam_scan_fill_self_caps(wma_handle, ¶ms->roam_offload_params, roam_req); - params->okc_enabled = roam_req->okc_enabled; + params->fw_okc = roam_req->pmkid_modes.fw_okc; + params->fw_pmksa_cache = roam_req->pmkid_modes.fw_pmksa_cache; #endif params->is_ese_assoc = roam_req->IsESEAssoc; params->mdid.mdie_present = roam_req->MDID.mdiePresent;