qcacld-3.0: Add support to set primary STA interface

Add support to primary STA iface when there are more
than one STA iface concurrently active via the
SET_WIFI_CONFIGURATION vendor command.

Below attribute associated with this vendor command to
give indication to host to set primary interface:
QCA_WLAN_VENDOR_ATTR_CONFIG_CONCURRENT_STA_PRIMARY.
Set indicates that the specified iface is the primary
STA iface.

This configuration helps the firmware/chip to support
certain features (e.g., roaming) on this primary interface,
if the same cannot be supported on concurrent STA ifaces
simultaneously.
This configuration is only applicable for the STA iface and
gives the priority for it only over other concurrent STA
ifaces. 1-Enable, 0-Disable.

Change-Id: I2bc7d8880c78c0c05e824f58aadacd84369d1880
CRs-Fixed: 2915728
This commit is contained in:
abhinav kumar
2021-04-04 20:32:36 +05:30
committed by Madan Koyyalamudi
parent 31df4c4960
commit 0ad5179cd6
5 changed files with 80 additions and 1 deletions

View File

@@ -1053,6 +1053,20 @@ QDF_STATUS wlan_mlme_get_fils_enabled_info(struct wlan_objmgr_psoc *psoc,
QDF_STATUS wlan_mlme_set_fils_enabled_info(struct wlan_objmgr_psoc *psoc,
bool value);
/**
* wlan_mlme_set_primary_interface() - Set the primary iface id for driver
* @psoc: pointer to psoc object
* @value: value that needs to be set from the caller
*
* When a vdev is set as primary then based on the dual sta policy
* "qca_wlan_concurrent_sta_policy_config" mcc preference and roaming has
* to be enabled on the primary vdev
*
* Return: QDF Status
*/
QDF_STATUS wlan_mlme_set_primary_interface(struct wlan_objmgr_psoc *psoc,
uint8_t value);
/**
* wlan_mlme_get_tl_delayed_trgr_frm_int() - Get delay interval(in ms)
* of UAPSD auto trigger

View File

@@ -1280,9 +1280,12 @@ struct wlan_mlme_ratemask {
* struct dual_sta_policy - Concurrent STA policy configuration
* @concurrent_sta_policy: Possible values are defined in enum
* qca_wlan_concurrent_sta_policy_config
* @primary_vdev_id: specified iface is the primary STA iface, say 0 means
* vdev 0 is acting as primary interface
*/
struct dual_sta_policy {
uint8_t concurrent_sta_policy;
uint8_t primary_vdev_id;
};
/* struct wlan_mlme_generic - Generic CFG config items

View File

@@ -1961,6 +1961,26 @@ QDF_STATUS ucfg_mlme_set_fils_enabled_info(struct wlan_objmgr_psoc *psoc,
return wlan_mlme_set_fils_enabled_info(psoc, value);
}
/**
* ucfg_mlme_set_primary_interface() - Set primary STA iface id
*
* @psoc: pointer to psoc object
* @value: value that needs to be set from the caller
*
* When a vdev is set as primary then based on the dual sta policy
* "qca_wlan_concurrent_sta_policy_config" mcc preference and roaming has
* to be enabled on the primary vdev
*
* Return: QDF_STATUS_SUCCESS or QDF_STATUS_FAILURE
*/
static inline
QDF_STATUS ucfg_mlme_set_primary_interface(struct wlan_objmgr_psoc *psoc,
uint8_t value)
{
return wlan_mlme_set_primary_interface(psoc, value);
}
/**
* ucfg_mlme_set_enable_bcast_probe_rsp() - Set enable bcast probe resp info
* @psoc: pointer to psoc object

View File

@@ -2411,6 +2411,18 @@ QDF_STATUS wlan_mlme_set_fils_enabled_info(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_mlme_set_primary_interface(struct wlan_objmgr_psoc *psoc,
uint8_t value)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj)
return QDF_STATUS_E_FAILURE;
mlme_obj->cfg.gen.dual_sta_policy.primary_vdev_id = value;
return QDF_STATUS_SUCCESS;
}
QDF_STATUS wlan_mlme_set_enable_bcast_probe_rsp(struct wlan_objmgr_psoc *psoc,
bool value)
{