summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDeepak Dhamdhere <ddhamdhe@codeaurora.org>2017-02-09 11:51:19 -0800
committerqcabuildsw <qcabuildsw@localhost>2017-02-21 20:04:06 -0800
commitc1ae6513ae7321b2712e0c4cbbab18633cb99272 (patch)
tree4cdc89eb0a21e9063a9388d6e49622a7aa0fbbfe
parentf8b4f97cf0363ccd94819b65bf085ea239d4b3d4 (diff)
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. .ini file changes: Remove "OkcEnabled" parameter. Replace it with new parameter: Name = "pmkidModes" Type = integer Min = 0 Max = 3 Default = 3 Usage: enable PMKID feature options in firmware based roaming Bit 0 = Enable Opportunistic key caching Bit 1 = Enable PMK caching CRs-Fixed: 2004963 Change-Id: Ib2fcdc6318adb488eca5cf47b2b59541020e6009
-rw-r--r--core/hdd/inc/wlan_hdd_cfg.h29
-rw-r--r--core/hdd/src/wlan_hdd_cfg.c31
-rw-r--r--core/hdd/src/wlan_hdd_cfg80211.c27
-rw-r--r--core/hdd/src/wlan_hdd_ioctl.c58
-rw-r--r--core/mac/inc/sir_api.h14
-rw-r--r--core/sme/inc/csr_internal.h2
-rw-r--r--core/sme/inc/sme_api.h2
-rw-r--r--core/sme/src/common/sme_api.c10
-rw-r--r--core/sme/src/csr/csr_api_roam.c9
-rw-r--r--core/sme/src/csr/csr_inside_api.h2
-rw-r--r--core/wma/src/wma_scan_roam.c3
11 files changed, 113 insertions, 74 deletions
diff --git a/core/hdd/inc/wlan_hdd_cfg.h b/core/hdd/inc/wlan_hdd_cfg.h
index 33bd456fe072..dfbbc4c267b1 100644
--- a/core/hdd/inc/wlan_hdd_cfg.h
+++ b/core/hdd/inc/wlan_hdd_cfg.h
@@ -1486,25 +1486,29 @@ typedef enum {
/*
* <ini>
- * OkcEnabled - Enable OKC(Oppurtunistic Key Caching)
+ * pmkidModes - Enable PMKID modes
* @Min: 0
- * @Max: 1
- * @Default: 1
+ * @Max: 3
+ * @Default: 3
*
- * This INI is used to enable OKC feature
+ * This INI is used to enable PMKID feature options
+ * Bit 0 = Enable Opportunistic key caching
+ * Bit 1 = Enable PMKSA caching
*
* Related: None
*
- * Supported Feature: Roaming
+ * Supported Feature: Firmware based roaming
*
- * Usage: External
+ * Usage: Internal
*
* </ini>
*/
-#define CFG_OKC_FEATURE_ENABLED_NAME "OkcEnabled"
-#define CFG_OKC_FEATURE_ENABLED_MIN (0)
-#define CFG_OKC_FEATURE_ENABLED_MAX (1)
-#define CFG_OKC_FEATURE_ENABLED_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)
/*
* <ini>
@@ -9685,7 +9689,7 @@ struct hdd_config {
bool isFastTransitionEnabled;
uint8_t RoamRssiDiff;
bool isWESModeEnabled;
- bool isOkcIniFeatureEnabled;
+ uint32_t pmkid_modes;
bool isRoamOffloadScanEnabled;
bool bImplicitQosEnabled;
@@ -10370,8 +10374,9 @@ eCsrPhyMode hdd_cfg_xlate_to_csr_phy_mode(eHddDot11Mode dot11Mode);
QDF_STATUS hdd_execute_global_config_command(hdd_context_t *pHddCtx,
char *command);
-bool hdd_is_okc_mode_enabled(hdd_context_t *pHddCtx);
QDF_STATUS hdd_set_idle_ps_config(hdd_context_t *pHddCtx, bool 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);
bool hdd_dfs_indicate_radar(void *context, void *param);
diff --git a/core/hdd/src/wlan_hdd_cfg.c b/core/hdd/src/wlan_hdd_cfg.c
index 40d9ec9dd5bf..105e769f35b7 100644
--- a/core/hdd/src/wlan_hdd_cfg.c
+++ b/core/hdd/src/wlan_hdd_cfg.c
@@ -1103,13 +1103,14 @@ 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 |
@@ -5182,8 +5183,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);
@@ -7340,18 +7341,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 42b54339df4a..d9d5e041bf49 100644
--- a/core/hdd/src/wlan_hdd_cfg80211.c
+++ b/core/hdd/src/wlan_hdd_cfg80211.c
@@ -3504,6 +3504,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);
@@ -3527,10 +3528,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),
@@ -11542,29 +11546,34 @@ 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
*/
-int wlan_hdd_cfg80211_pmksa_candidate_notify(hdd_adapter_t *pAdapter,
- tCsrRoamInfo *pRoamInfo,
+int wlan_hdd_cfg80211_pmksa_candidate_notify(hdd_adapter_t *adapter,
+ tCsrRoamInfo *roam_info,
int index, bool preauth)
{
- struct net_device *dev = pAdapter->dev;
- hdd_context_t *pHddCtx = (hdd_context_t *) pAdapter->pHddCtx;
+ struct net_device *dev = adapter->dev;
+ hdd_context_t *hdd_ctx = (hdd_context_t *) adapter->pHddCtx;
+ struct pmkid_mode_bits pmkid_modes;
ENTER();
hdd_notice("is going to notify supplicant of:");
- if (NULL == pRoamInfo) {
+ if (NULL == roam_info) {
hdd_alert("pRoamInfo is NULL");
return -EINVAL;
}
- if (true == hdd_is_okc_mode_enabled(pHddCtx)) {
+ hdd_get_pmkid_modes(hdd_ctx, &pmkid_modes);
+ if (pmkid_modes.fw_okc) {
hdd_notice(MAC_ADDRESS_STR,
- MAC_ADDR_ARRAY(pRoamInfo->bssid.bytes));
+ MAC_ADDR_ARRAY(roam_info->bssid.bytes));
cfg80211_pmksa_candidate_notify(dev, index,
- pRoamInfo->bssid.bytes,
+ roam_info->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 7a9d3388ef82..f18729b92456 100644
--- a/core/hdd/src/wlan_hdd_ioctl.c
+++ b/core/hdd/src/wlan_hdd_ioctl.c
@@ -3567,15 +3567,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;
}
@@ -3600,24 +3602,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)) {
@@ -4556,16 +4559,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;
}
@@ -4573,33 +4579,35 @@ static int drv_cmd_set_okc_mode(hdd_adapter_t *adapter,
/* Move pointer to ahead of SETOKCMODE<delimiter> */
value = value + command_len + 1;
+ /* get the current configured value */
+ okc_mode = (hdd_ctx->config->pmkid_modes & CFG_PMKID_MODES_OKC) ? 1 : 0;
+
/* 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_info("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;
@@ -5654,13 +5662,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 edff9f5e30fa..00f61b5a8127 100644
--- a/core/mac/inc/sir_api.h
+++ b/core/mac/inc/sir_api.h
@@ -3126,6 +3126,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;
@@ -3170,7 +3182,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 1713ed86491b..1f9fd91d8690 100644
--- a/core/sme/inc/csr_internal.h
+++ b/core/sme/inc/csr_internal.h
@@ -983,7 +983,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 f4e647719e31..f53ecf6c1270 100644
--- a/core/sme/inc/sme_api.h
+++ b/core/sme/inc/sme_api.h
@@ -930,7 +930,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 b70d41c28678..94672085b43b 100644
--- a/core/sme/src/common/sme_api.c
+++ b/core/sme/src/common/sme_api.c
@@ -14525,15 +14525,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;
@@ -14547,7 +14547,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 70deb2b45ef7..891a0aac06e6 100644
--- a/core/sme/src/csr/csr_api_roam.c
+++ b/core/sme/src/csr/csr_api_roam.c
@@ -16865,7 +16865,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.
@@ -16874,7 +16874,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);
if (!session) {
@@ -16882,7 +16882,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;
}
@@ -17459,7 +17460,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 3c43dcc43350..d1610e87edbf 100644
--- a/core/sme/src/csr/csr_inside_api.h
+++ b/core/sme/src/csr/csr_inside_api.h
@@ -795,7 +795,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 7928bb78ee31..1c36ad70757a 100644
--- a/core/wma/src/wma_scan_roam.c
+++ b/core/wma/src/wma_scan_roam.c
@@ -804,7 +804,8 @@ QDF_STATUS wma_roam_scan_offload_mode(tp_wma_handle wma_handle,
roam_req->RoamKeyMgmtOffloadEnabled;
wma_roam_scan_fill_self_caps(wma_handle,
&params->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;