qcacld-3.0: Introduce new ini for dual sta roaming

Add new ini enable_dual_sta_roam_offload to enable/disable dual
sta romaing feature. Enabling this ini will allow firmware to
roam on both the vdev if firmware supports dual sta roaming and
the hw is dbs capable.

This ini will be checked in the dual sta roaming offload state
machine to enable roaming on both the STA or to fallback to the
current implementation where first connected sta will have rso
enabled.

Change-Id: I04f141ac31e0f168b6f19fe878bca219a36cfae7
CRs-Fixed: 2709036
This commit is contained in:
Pragaspathi Thilagaraj
2020-05-26 11:52:42 +05:30
committed by nshrivas
parent 1f299f5e53
commit 3bbb4610b6
10 changed files with 230 additions and 0 deletions

View File

@@ -2439,6 +2439,36 @@
CFG_VALUE_OR_DEFAULT, \
"disable roam on STA iface if one of the iface mentioned in default is in connected state")
/*
* <ini>
* enable_dual_sta_roam_offload - Enable roaming offload on both interfaces
* for STA + STA
* @Min: 0 - Dual STA Roam offload Disabled
* @Max: 1 - Dual STA Roam offload Enabled
* @Default: 1
*
* Enabling this ini will:
* a) Enforce the STA + STA connection be DBS if the hw is capable.
* b) Enable Roam Scan Offload on both the STA vdev.
* c) Enable firmware to support sequential roaming on both STA vdev
* if the firmware is capable of dual sta roaming.
*
* Related: None.
*
* Supported Feature: ROAM
*
* Usage: External
*
* </ini>
*/
#define CFG_ENABLE_DUAL_STA_ROAM_OFFLOAD CFG_INI_UINT( \
"enable_dual_sta_roam_offload", \
false, \
true, \
true, \
CFG_VALUE_OR_DEFAULT, \
"Enable roam on both STA vdev")
#define ROAM_OFFLOAD_ALL \
CFG(CFG_LFR3_ROAMING_OFFLOAD) \
CFG(CFG_LFR3_ENABLE_SELF_BSS_ROAM) \
@@ -2451,6 +2481,7 @@
CFG(CFG_LFR_IDLE_ROAM_BAND) \
CFG(CFG_ROAM_TRIGGER_BITMAP) \
CFG(CFG_STA_DISABLE_ROAM) \
CFG(CFG_ENABLE_DUAL_STA_ROAM_OFFLOAD) \
#else
#define ROAM_OFFLOAD_ALL

View File

@@ -812,6 +812,24 @@ QDF_STATUS wlan_mlme_get_bigtk_support(struct wlan_objmgr_psoc *psoc,
*/
bool wlan_mlme_get_host_scan_abort_support(struct wlan_objmgr_psoc *psoc);
/**
* wlan_mlme_get_peer_create_conf_support - Get if the firmware supports
* peer create confirm event
* @psoc: PSOC object pointer
*
* Return: True if capability is supported, else False
*/
bool wlan_mlme_get_peer_create_conf_support(struct wlan_objmgr_psoc *psoc);
/**
* wlan_mlme_get_dual_sta_roam_support - Get support for dual sta roaming
* feature
* @psoc: PSOC object pointer
*
* Return: True if capability is supported, else False
*/
bool wlan_mlme_get_dual_sta_roam_support(struct wlan_objmgr_psoc *psoc);
/**
* wlan_mlme_get_oce_sap_enabled_info() - Get the OCE feature enable
* info for SAP
@@ -2521,4 +2539,23 @@ uint32_t wlan_mlme_get_roaming_triggers(struct wlan_objmgr_psoc *psoc)
QDF_STATUS
wlan_mlme_get_dfs_chan_ageout_time(struct wlan_objmgr_psoc *psoc,
uint8_t *dfs_chan_ageout_time);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
/**
* wlan_mlme_get_dual_sta_roaming_enabled - API to get if the dual sta
* roaming support is enabled.
* @psoc: Pointer to global psoc object
*
* Return: True if dual sta roaming feature is enabled else return false
*/
bool
wlan_mlme_get_dual_sta_roaming_enabled(struct wlan_objmgr_psoc *psoc);
#else
static inline bool
wlan_mlme_get_dual_sta_roaming_enabled(struct wlan_objmgr_psoc *psoc)
{
return false;
}
#endif
#endif /* _WLAN_MLME_API_H_ */

View File

@@ -952,6 +952,8 @@ struct wlan_mlme_chain_cfg {
* @bigtk_support: does the target support bigtk capability or not.
* @stop_all_host_scan_support: Target capability that indicates if the target
* supports stop all host scan request type.
* @peer_create_conf_support: Peer create confirmation command support
* @dual_sta_roam_fw_support: Firmware support for dual sta roaming feature
*
* Add all the mlme-tgt related capablities here, and the public API would fill
* the related capability in the required mlme cfg structure.
@@ -960,6 +962,8 @@ struct mlme_tgt_caps {
bool data_stall_recovery_fw_support;
bool bigtk_support;
bool stop_all_host_scan_support;
bool peer_create_conf_support;
bool dual_sta_roam_fw_support;
};
/**
@@ -1140,6 +1144,8 @@ struct wlan_mlme_chainmask {
* @bigtk_support: Whether BIGTK is supported or not
* @stop_all_host_scan_support: Target capability that indicates if the target
* supports stop all host scan request type.
* @peer_create_conf_support: Peer create confirmation command support
* @dual_sta_roam_fw_support: Firmware support for dual sta roaming feature
*/
struct wlan_mlme_generic {
enum band_info band_capability;
@@ -1178,6 +1184,8 @@ struct wlan_mlme_generic {
uint8_t dfs_chan_ageout_time;
bool bigtk_support;
bool stop_all_host_scan_support;
bool peer_create_conf_support;
bool dual_sta_roam_fw_support;
};
/*
@@ -1452,6 +1460,8 @@ struct bss_load_trigger {
* @mawc_roam_enabled: Enable/Disable MAWC during roaming
* @enable_fast_roam_in_concurrency:Enable LFR roaming on STA during concurrency
* @lfr3_roaming_offload: Enable/disable roam offload feature
* @lfr3_dual_sta_roaming_enabled: Enable/Disable dual sta roaming offload
* feature
* @enable_self_bss_roam: enable roaming to connected BSSID
* @enable_disconnect_roam_offload: enable disassoc/deauth roam scan.
* @enable_idle_roam: flag to enable/disable idle roam in fw
@@ -1563,6 +1573,7 @@ struct wlan_mlme_lfr_cfg {
bool enable_fast_roam_in_concurrency;
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
bool lfr3_roaming_offload;
bool lfr3_dual_sta_roaming_enabled;
bool enable_self_bss_roam;
bool enable_disconnect_roam_offload;
bool enable_idle_roam;

View File

@@ -459,6 +459,11 @@ wlan_mlme_update_cfg_with_tgt_caps(struct wlan_objmgr_psoc *psoc,
mlme_obj->cfg.gen.bigtk_support = tgt_caps->bigtk_support;
mlme_obj->cfg.gen.stop_all_host_scan_support =
tgt_caps->stop_all_host_scan_support;
mlme_obj->cfg.gen.peer_create_conf_support =
tgt_caps->peer_create_conf_support;
mlme_obj->cfg.gen.dual_sta_roam_fw_support =
tgt_caps->dual_sta_roam_fw_support;
}
#ifdef WLAN_FEATURE_11AX
@@ -2071,6 +2076,26 @@ bool wlan_mlme_get_host_scan_abort_support(struct wlan_objmgr_psoc *psoc)
return mlme_obj->cfg.gen.stop_all_host_scan_support;
}
bool wlan_mlme_get_peer_create_conf_support(struct wlan_objmgr_psoc *psoc)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj)
return false;
return mlme_obj->cfg.gen.peer_create_conf_support;
}
bool wlan_mlme_get_dual_sta_roam_support(struct wlan_objmgr_psoc *psoc)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj)
return false;
return mlme_obj->cfg.gen.dual_sta_roam_fw_support;
}
QDF_STATUS wlan_mlme_get_oce_sta_enabled_info(struct wlan_objmgr_psoc *psoc,
bool *value)
{
@@ -3902,3 +3927,25 @@ wlan_mlme_get_dfs_chan_ageout_time(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
bool
wlan_mlme_get_dual_sta_roaming_enabled(struct wlan_objmgr_psoc *psoc)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj;
bool dual_sta_roaming_enabled;
mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj)
return cfg_default(CFG_ENABLE_DUAL_STA_ROAM_OFFLOAD);
dual_sta_roaming_enabled =
mlme_obj->cfg.lfr.lfr3_roaming_offload &&
mlme_obj->cfg.lfr.lfr3_dual_sta_roaming_enabled &&
wlan_mlme_get_dual_sta_roam_support(psoc) &&
policy_mgr_is_hw_dbs_capable(psoc);
return dual_sta_roaming_enabled;
}
#endif