qcacld-3.0: Add support for FT over DS
Add support to enable the "FT over DS" via QCA_WLAN_VENDOR_ATTR_CONFIG_FT_OVER_DS vendor config command. This configuration helps the firmware to support “FT over DS” instead of “FT over Air” Change-Id: I493bf15f83bc39135aaeefa9d8ef328f0fc0cda3 CRs-Fixed: 2968680
This commit is contained in:

committed by
Madan Koyyalamudi

parent
99829f54e2
commit
ed12a74d8c
@@ -1816,6 +1816,7 @@ static void mlme_init_lfr_cfg(struct wlan_objmgr_psoc *psoc,
|
|||||||
cfg_get(psoc, CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD);
|
cfg_get(psoc, CFG_POST_INACTIVITY_ROAM_SCAN_PERIOD);
|
||||||
lfr->fw_akm_bitmap = 0;
|
lfr->fw_akm_bitmap = 0;
|
||||||
lfr->enable_ft_im_roaming = cfg_get(psoc, CFG_FT_IM_ROAMING);
|
lfr->enable_ft_im_roaming = cfg_get(psoc, CFG_FT_IM_ROAMING);
|
||||||
|
lfr->enable_ft_over_ds = !ENABLE_FT_OVER_DS;
|
||||||
|
|
||||||
mlme_init_roam_offload_cfg(psoc, lfr);
|
mlme_init_roam_offload_cfg(psoc, lfr);
|
||||||
mlme_init_ese_cfg(psoc, lfr);
|
mlme_init_ese_cfg(psoc, lfr);
|
||||||
|
@@ -2792,6 +2792,15 @@ wlan_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlme_set_ft_over_ds() - Update ft_over_ds
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @ft_over_ds_enable: value of ft_over_ds
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_mlme_set_ft_over_ds(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t ft_over_ds_enable);
|
||||||
/**
|
/**
|
||||||
* wlan_mlme_get_dfs_chan_ageout_time() - Get the DFS Channel ageout time
|
* wlan_mlme_get_dfs_chan_ageout_time() - Get the DFS Channel ageout time
|
||||||
* @psoc: pointer to psoc object
|
* @psoc: pointer to psoc object
|
||||||
|
@@ -1905,6 +1905,7 @@ struct wlan_mlme_lfr_cfg {
|
|||||||
bool sae_single_pmk_feature_enabled;
|
bool sae_single_pmk_feature_enabled;
|
||||||
#endif
|
#endif
|
||||||
struct rso_config_params rso_user_config;
|
struct rso_config_params rso_user_config;
|
||||||
|
bool enable_ft_over_ds;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -4200,6 +4200,21 @@ ucfg_mlme_set_roam_reason_vsie_status(struct wlan_objmgr_psoc *psoc,
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_mlme_set_ft_over_ds() - update ft_over_ds status with user configured
|
||||||
|
* value
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @ft_over_ds_enable: value of ft_over_ds
|
||||||
|
*
|
||||||
|
* Return: QDF Status
|
||||||
|
*/
|
||||||
|
static inline QDF_STATUS
|
||||||
|
ucfg_mlme_set_ft_over_ds(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t ft_over_ds_enable)
|
||||||
|
{
|
||||||
|
return wlan_mlme_set_ft_over_ds(psoc, ft_over_ds_enable);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_mlme_is_sta_mon_conc_supported() - Check if STA + Monitor mode
|
* ucfg_mlme_is_sta_mon_conc_supported() - Check if STA + Monitor mode
|
||||||
* concurrency is supported
|
* concurrency is supported
|
||||||
|
@@ -4391,6 +4391,20 @@ wlan_mlme_get_idle_roam_band(struct wlan_objmgr_psoc *psoc, uint32_t *val)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_set_ft_over_ds(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t ft_over_ds_enable)
|
||||||
|
{
|
||||||
|
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||||
|
|
||||||
|
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||||
|
if (!mlme_obj)
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
mlme_obj->cfg.lfr.enable_ft_over_ds = ft_over_ds_enable;
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
wlan_mlme_get_dfs_chan_ageout_time(struct wlan_objmgr_psoc *psoc,
|
wlan_mlme_get_dfs_chan_ageout_time(struct wlan_objmgr_psoc *psoc,
|
||||||
uint8_t *dfs_chan_ageout_time)
|
uint8_t *dfs_chan_ageout_time)
|
||||||
|
@@ -485,6 +485,8 @@ cm_roam_scan_offload_fill_lfr3_config(struct wlan_objmgr_vdev *vdev,
|
|||||||
wlan_cm_get_psk_pmk(pdev, vdev_id,
|
wlan_cm_get_psk_pmk(pdev, vdev_id,
|
||||||
rso_config->rso_11r_info.psk_pmk,
|
rso_config->rso_11r_info.psk_pmk,
|
||||||
&rso_config->rso_11r_info.pmk_len);
|
&rso_config->rso_11r_info.pmk_len);
|
||||||
|
rso_config->rso_11r_info.enable_ft_over_ds =
|
||||||
|
mlme_obj->cfg.lfr.enable_ft_over_ds;
|
||||||
|
|
||||||
cm_update_rso_adaptive_11r(&rso_config->rso_11r_info, rso_cfg);
|
cm_update_rso_adaptive_11r(&rso_config->rso_11r_info, rso_cfg);
|
||||||
cm_update_rso_ese_info(rso_cfg, rso_config);
|
cm_update_rso_ese_info(rso_cfg, rso_config);
|
||||||
|
@@ -406,6 +406,7 @@ struct rso_roam_policy_params {
|
|||||||
};
|
};
|
||||||
|
|
||||||
#define DEFAULT_RSSI_DB_GAP 30 /* every 30 dbm for one category */
|
#define DEFAULT_RSSI_DB_GAP 30 /* every 30 dbm for one category */
|
||||||
|
#define ENABLE_FT_OVER_DS 1 /* enable ft_over_ds */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct rso_params - global RSO params
|
* struct rso_params - global RSO params
|
||||||
@@ -1241,6 +1242,7 @@ struct wlan_rso_11i_params {
|
|||||||
* @rokh_id_length: r0kh id length
|
* @rokh_id_length: r0kh id length
|
||||||
* @rokh_id: r0kh id
|
* @rokh_id: r0kh id
|
||||||
* @mdid: mobility domain info
|
* @mdid: mobility domain info
|
||||||
|
* @enable_ft_over_ds: Flag to enable/disable FT-over-DS
|
||||||
*/
|
*/
|
||||||
struct wlan_rso_11r_params {
|
struct wlan_rso_11r_params {
|
||||||
bool is_11r_assoc;
|
bool is_11r_assoc;
|
||||||
@@ -1251,6 +1253,7 @@ struct wlan_rso_11r_params {
|
|||||||
uint32_t r0kh_id_length;
|
uint32_t r0kh_id_length;
|
||||||
uint8_t r0kh_id[WMI_ROAM_R0KH_ID_MAX_LEN];
|
uint8_t r0kh_id[WMI_ROAM_R0KH_ID_MAX_LEN];
|
||||||
struct mobility_domain_info mdid;
|
struct mobility_domain_info mdid;
|
||||||
|
bool enable_ft_over_ds;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -2327,6 +2327,8 @@ wmi_fill_rso_tlvs(wmi_unified_t wmi_handle, uint8_t *buf,
|
|||||||
src_11r_info->is_adaptive_11r;
|
src_11r_info->is_adaptive_11r;
|
||||||
roam_offload_11r->ft_im_for_deauth =
|
roam_offload_11r->ft_im_for_deauth =
|
||||||
src_11r_info->enable_ft_im_roaming;
|
src_11r_info->enable_ft_im_roaming;
|
||||||
|
roam_offload_11r->ft_over_ds_enable =
|
||||||
|
src_11r_info->enable_ft_over_ds;
|
||||||
|
|
||||||
if (akm == WMI_AUTH_OPEN) {
|
if (akm == WMI_AUTH_OPEN) {
|
||||||
/*
|
/*
|
||||||
|
@@ -6899,6 +6899,7 @@ const struct nla_policy wlan_hdd_wifi_config_policy[
|
|||||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_RX_NSS] = {.type = NLA_U8 },
|
[QCA_WLAN_VENDOR_ATTR_CONFIG_RX_NSS] = {.type = NLA_U8 },
|
||||||
[QCA_WLAN_VENDOR_ATTR_CONFIG_CONCURRENT_STA_PRIMARY] = {
|
[QCA_WLAN_VENDOR_ATTR_CONFIG_CONCURRENT_STA_PRIMARY] = {
|
||||||
.type = NLA_U8 },
|
.type = NLA_U8 },
|
||||||
|
[QCA_WLAN_VENDOR_ATTR_CONFIG_FT_OVER_DS] = {.type = NLA_U8 },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct nla_policy
|
static const struct nla_policy
|
||||||
@@ -7340,6 +7341,35 @@ static int hdd_set_roam_reason_vsie_status(struct hdd_adapter *adapter,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static int hdd_set_ft_over_ds(struct hdd_adapter *adapter,
|
||||||
|
const struct nlattr *attr)
|
||||||
|
{
|
||||||
|
uint8_t ft_over_ds_enable;
|
||||||
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
struct hdd_context *hdd_ctx = NULL;
|
||||||
|
|
||||||
|
hdd_ctx = WLAN_HDD_GET_CTX(adapter);
|
||||||
|
if (!hdd_ctx) {
|
||||||
|
hdd_err("hdd_ctx failure");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ft_over_ds_enable = nla_get_u8(attr);
|
||||||
|
|
||||||
|
if (ft_over_ds_enable != 0 && ft_over_ds_enable != 1) {
|
||||||
|
hdd_err_rl("Invalid ft_over_ds_enable: %d", ft_over_ds_enable);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = ucfg_mlme_set_ft_over_ds(hdd_ctx->psoc, ft_over_ds_enable);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
hdd_err("set ft_over_ds failed");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
static int hdd_config_ldpc(struct hdd_adapter *adapter,
|
static int hdd_config_ldpc(struct hdd_adapter *adapter,
|
||||||
const struct nlattr *attr)
|
const struct nlattr *attr)
|
||||||
{
|
{
|
||||||
@@ -8869,6 +8899,8 @@ static const struct independent_setters independent_setters[] = {
|
|||||||
hdd_config_udp_qos_upgrade_threshold},
|
hdd_config_udp_qos_upgrade_threshold},
|
||||||
{QCA_WLAN_VENDOR_ATTR_CONFIG_CONCURRENT_STA_PRIMARY,
|
{QCA_WLAN_VENDOR_ATTR_CONFIG_CONCURRENT_STA_PRIMARY,
|
||||||
hdd_set_primary_interface},
|
hdd_set_primary_interface},
|
||||||
|
{QCA_WLAN_VENDOR_ATTR_CONFIG_FT_OVER_DS,
|
||||||
|
hdd_set_ft_over_ds},
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_ELNA
|
#ifdef WLAN_FEATURE_ELNA
|
||||||
|
Reference in New Issue
Block a user