qcacld-3.0: Add vendor attribute to include 6 GHz in roam full scan
During the roam scan, if there are no desired APs found in the partial frequency list, an immediate full scan on all the supported frequencies is initiated as a fallback. This would include the 6 GHz PSC frequencies by default. This attribute allow that behavior to be modified to include PSCs only if 6 GHz use has been detected in the environment. Change-Id: I6dc380419f14b920737fd87cd9a487c28364563b CRs-Fixed: 3351697
This commit is contained in:

committed by
Madan Koyyalamudi

orang tua
ae8eee9988
melakukan
f6ae09b410
@@ -3062,6 +3062,9 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
start_req->wlan_exclude_rm_partial_scan_freq =
|
||||
wlan_cm_get_exclude_rm_partial_scan_freq(psoc);
|
||||
|
||||
start_req->wlan_roam_full_scan_6ghz_on_disc =
|
||||
wlan_cm_roam_get_full_scan_6ghz_on_disc(psoc);
|
||||
|
||||
status = wlan_cm_tgt_send_roam_start_req(psoc, vdev_id, start_req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("fail to send roam start");
|
||||
@@ -3153,6 +3156,9 @@ cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
update_req->wlan_exclude_rm_partial_scan_freq =
|
||||
wlan_cm_get_exclude_rm_partial_scan_freq(psoc);
|
||||
|
||||
update_req->wlan_roam_full_scan_6ghz_on_disc =
|
||||
wlan_cm_roam_get_full_scan_6ghz_on_disc(psoc);
|
||||
|
||||
status = wlan_cm_tgt_send_roam_update_req(psoc, vdev_id, update_req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("fail to send update config");
|
||||
@@ -7177,4 +7183,19 @@ cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t param_value)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
wlan_cm_roam_set_full_scan_6ghz_on_disc(psoc, param_value);
|
||||
status = wlan_cm_tgt_send_roam_full_scan_6ghz_on_disc(psoc, vdev_id,
|
||||
param_value);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("fail to send 6 GHz channels inclusion in full scan");
|
||||
|
||||
return status;
|
||||
}
|
||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
||||
|
@@ -448,6 +448,20 @@ cm_roam_send_ho_delay_config(struct wlan_objmgr_psoc *psoc,
|
||||
QDF_STATUS
|
||||
cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint8_t param_value);
|
||||
|
||||
/**
|
||||
* cm_roam_full_scan_6ghz_on_disc() - Include the 6 GHz channels in roam full
|
||||
* scan only on prior discovery of any 6 GHz support in the environment
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @param_value: Include the 6 GHz channels in roam full scan:
|
||||
* 1 - Include only on prior discovery of any 6 GHz support in the environment
|
||||
* 0 - Include all the supported 6 GHz channels by default
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint8_t param_value);
|
||||
#else
|
||||
static inline QDF_STATUS
|
||||
cm_roam_send_rt_stats_config(struct wlan_objmgr_psoc *psoc,
|
||||
@@ -469,6 +483,13 @@ cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
|
||||
{
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
static inline
|
||||
QDF_STATUS cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, uint8_t param_value)
|
||||
{
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||
|
@@ -1192,6 +1192,33 @@ wlan_cm_set_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t
|
||||
wlan_cm_get_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_set_full_scan_6ghz_on_disc() - set value to include the 6 GHz
|
||||
* channels in roam full scan only on prior discovery of any 6 GHz support in
|
||||
* the environment.
|
||||
* @psoc: PSOC pointer
|
||||
* @roam_full_scan_6ghz_on_disc: Include the 6 GHz channels in roam full scan:
|
||||
* 1 - Include only on prior discovery of any 6 GHz support in the environment
|
||||
* 0 - Include all the supported 6 GHz channels by default
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
void
|
||||
wlan_cm_roam_set_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t roam_full_scan_6ghz_on_disc);
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_get_full_scan_6ghz_on_disc() - Get value to include the 6 GHz
|
||||
* channels in roam full scan only on prior discovery of any 6 GHz support in
|
||||
* the environment.
|
||||
* @psoc: PSOC pointer
|
||||
*
|
||||
* Return:
|
||||
* 1 - Include only on prior discovery of any 6 GHz support in the environment
|
||||
* 0 - Include all the supported 6 GHz channels by default
|
||||
*/
|
||||
uint8_t wlan_cm_roam_get_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc);
|
||||
|
||||
#else
|
||||
static inline
|
||||
void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
|
||||
@@ -1404,6 +1431,12 @@ wlan_cm_get_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline uint8_t
|
||||
wlan_cm_roam_get_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
||||
|
||||
#ifdef WLAN_FEATURE_FIPS
|
||||
|
@@ -1781,6 +1781,8 @@ struct wlan_roam_mlo_config {
|
||||
* @wlan_roam_ho_delay_config: roam HO delay value
|
||||
* @wlan_exclude_rm_partial_scan_freq: Include/exclude the channels in roam full
|
||||
* scan that are already scanned as part of partial scan.
|
||||
* @wlan_roam_full_scan_6ghz_on_disc: Include the 6 GHz channels in roam full
|
||||
* scan only on prior discovery of any 6 GHz support in the environment.
|
||||
*/
|
||||
struct wlan_roam_start_config {
|
||||
struct wlan_roam_offload_scan_rssi_params rssi_params;
|
||||
@@ -1804,6 +1806,7 @@ struct wlan_roam_start_config {
|
||||
struct wlan_roam_mlo_config roam_mlo_params;
|
||||
uint16_t wlan_roam_ho_delay_config;
|
||||
uint8_t wlan_exclude_rm_partial_scan_freq;
|
||||
uint8_t wlan_roam_full_scan_6ghz_on_disc;
|
||||
/* other wmi cmd structures */
|
||||
};
|
||||
|
||||
@@ -1857,6 +1860,8 @@ struct wlan_roam_stop_config {
|
||||
* @wlan_roam_ho_delay_config: roam HO delay value
|
||||
* @wlan_exclude_rm_partial_scan_freq: Include/exclude the channels in roam full
|
||||
* scan that are already scanned as part of partial scan.
|
||||
* @wlan_roam_full_scan_6ghz_on_disc: Include the 6 GHz channels in roam full
|
||||
* scan only on prior discovery of any 6 GHz support in the environment.
|
||||
*/
|
||||
struct wlan_roam_update_config {
|
||||
struct wlan_roam_beacon_miss_cnt beacon_miss_cnt;
|
||||
@@ -1874,6 +1879,7 @@ struct wlan_roam_update_config {
|
||||
uint8_t wlan_roam_rt_stats_config;
|
||||
uint16_t wlan_roam_ho_delay_config;
|
||||
uint8_t wlan_exclude_rm_partial_scan_freq;
|
||||
uint8_t wlan_roam_full_scan_6ghz_on_disc;
|
||||
};
|
||||
|
||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||
@@ -2347,6 +2353,8 @@ struct roam_pmkid_req_event {
|
||||
* @send_roam_ho_delay_config: Send roam Hand-off delay value to FW
|
||||
* @send_exclude_rm_partial_scan_freq: Include/exclude the channels in roam full
|
||||
* scan that are already scanned as part of partial scan.
|
||||
* @send_roam_full_scan_6ghz_on_disc: Include the 6 GHz channels in roam full
|
||||
* scan only on prior discovery of any 6 GHz support in the environment.
|
||||
* @send_roam_linkspeed_state: Send roam link speed good/poor state to FW
|
||||
* @send_roam_vendor_handoff_config: send vendor handoff config command to FW
|
||||
*/
|
||||
@@ -2385,6 +2393,9 @@ struct wlan_cm_roam_tx_ops {
|
||||
QDF_STATUS (*send_exclude_rm_partial_scan_freq)(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
uint8_t value);
|
||||
QDF_STATUS (*send_roam_full_scan_6ghz_on_disc)(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
uint8_t value);
|
||||
QDF_STATUS (*send_roam_mcc_disallow)(struct wlan_objmgr_vdev *vdev,
|
||||
uint8_t vdev_id, uint8_t value);
|
||||
#ifdef FEATURE_RX_LINKSPEED_ROAM_TRIGGER
|
||||
|
@@ -381,6 +381,21 @@ ucfg_cm_roam_send_ho_delay_config(struct wlan_objmgr_pdev *pdev,
|
||||
QDF_STATUS
|
||||
ucfg_cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id, uint8_t param_value);
|
||||
|
||||
/**
|
||||
* ucfg_cm_roam_full_scan_6ghz_on_disc() - Include the 6 GHz channels in roam
|
||||
* full scan only on prior discovery of any 6 GHz support in the environment.
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @param_value: Include the 6 GHz channels in roam full scan:
|
||||
* 1 - Include only on prior discovery of any 6 GHz support in the environment
|
||||
* 0 - Include all the supported 6 GHz channels by default
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS ucfg_cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
uint8_t param_value);
|
||||
#else
|
||||
static inline void
|
||||
ucfg_cm_reset_key(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id) {}
|
||||
@@ -405,6 +420,13 @@ ucfg_cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_pdev *pdev,
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static inline QDF_STATUS
|
||||
ucfg_cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id, uint8_t param_value)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
||||
|
||||
#ifdef WLAN_VENDOR_HANDOFF_CONTROL
|
||||
|
@@ -99,6 +99,22 @@ wlan_cm_tgt_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t exclude_rm_partial_scan_freq);
|
||||
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_full_scan_6ghz_on_disc() - Include the 6 GHz channels
|
||||
* in roam full scan only on prior discovery of any 6 GHz support in the
|
||||
* environment.
|
||||
* @psoc: PSOC pointer
|
||||
* @roam_inc_6ghz_if_disc: Include the 6 GHz channels in roam full scan:
|
||||
* 1 - Include only on prior discovery of any 6 GHz support in the environment
|
||||
* 0 - Include all the supported 6 GHz channels by default
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_full_scan_6ghz_on_disc(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t roam_full_scan_6ghz_on_disc);
|
||||
|
||||
#ifdef FEATURE_RX_LINKSPEED_ROAM_TRIGGER
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_linkspeed_state() - Send roam link speed state
|
||||
@@ -148,6 +164,15 @@ wlan_cm_tgt_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
|
||||
{
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
static inline QDF_STATUS
|
||||
wlan_cm_tgt_send_roam_full_scan_6ghz_on_disc(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t roam_full_scan_6ghz_on_disc)
|
||||
{
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
||||
|
||||
#ifdef WLAN_VENDOR_HANDOFF_CONTROL
|
||||
|
@@ -3661,6 +3661,33 @@ wlan_cm_get_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc)
|
||||
return mlme_obj->cfg.lfr.exclude_rm_partial_scan_freq;
|
||||
}
|
||||
|
||||
void
|
||||
wlan_cm_roam_set_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t roam_full_scan_6ghz_on_disc)
|
||||
{
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj)
|
||||
return;
|
||||
|
||||
mlme_obj->cfg.lfr.roam_full_scan_6ghz_on_disc =
|
||||
roam_full_scan_6ghz_on_disc;
|
||||
}
|
||||
|
||||
uint8_t wlan_cm_roam_get_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc)
|
||||
{
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
mlme_legacy_err("Failed to get MLME Obj");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return mlme_obj->cfg.lfr.roam_full_scan_6ghz_on_disc;
|
||||
}
|
||||
|
||||
#else
|
||||
QDF_STATUS
|
||||
cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
|
||||
|
@@ -505,6 +505,14 @@ ucfg_cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_pdev *pdev,
|
||||
return cm_exclude_rm_partial_scan_freq(psoc, vdev_id, param_value);
|
||||
}
|
||||
|
||||
QDF_STATUS ucfg_cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
uint8_t param_value)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||
|
||||
return cm_roam_full_scan_6ghz_on_disc(psoc, vdev_id, param_value);
|
||||
}
|
||||
#ifdef WLAN_VENDOR_HANDOFF_CONTROL
|
||||
QDF_STATUS
|
||||
ucfg_cm_roam_send_vendor_handoff_param_req(struct wlan_objmgr_psoc *psoc,
|
||||
|
@@ -271,6 +271,39 @@ wlan_cm_tgt_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_full_scan_6ghz_on_disc(
|
||||
struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t roam_full_scan_6ghz_on_disc)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct wlan_cm_roam_tx_ops *roam_tx_ops;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_NB_ID);
|
||||
if (!vdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
roam_tx_ops = wlan_cm_roam_get_tx_ops_from_vdev(vdev);
|
||||
if (!roam_tx_ops || !roam_tx_ops->send_roam_full_scan_6ghz_on_disc) {
|
||||
mlme_err("vdev %d send_roam_full_scan_6ghz_on_disc is NULL",
|
||||
vdev_id);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
status = roam_tx_ops->send_roam_full_scan_6ghz_on_disc(
|
||||
vdev, roam_full_scan_6ghz_on_disc);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("vdev %d fail to send inclusion of 6 GHz channels",
|
||||
vdev_id);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
#ifdef FEATURE_RX_LINKSPEED_ROAM_TRIGGER
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_linkspeed_state(struct wlan_objmgr_psoc *psoc,
|
||||
struct roam_disable_cfg *req)
|
||||
|
Reference in New Issue
Block a user