qcacld-3.0: Add vendor attribute for high RSSI roam trigger threshold

Currently the roam scan high RSSI delta is configured via INI.
Define an attribute to allow user configure high RSSI roam
trigger threshold. STA is expected to trigger roam if the current
connected AP's RSSI gets above this high RSSI threshold. STA's
roam attempt on high RSSI threshold aims to find candidates from
other better Wi-Fi bands.
This attribute value is given priority over the INI.
Use a new service bit WMI_SERVICE_5GHZ_HI_RSSI_ROAM_SUPPORT to
enable high RSSI roam trigger in 5 GHz as well.

Change-Id: Ide48ad2261b603de36bd1b31114b91c3a9d6606f
CRs-Fixed: 3586170
This commit is contained in:
Srikanth Marepalli 2023-12-27 18:03:32 +05:30 • committed by Ravindra Konda
commit 8580e33717
13 changed files with 373 additions and 10 deletions

View file

@ -1631,6 +1631,8 @@ struct fw_scan_channels {
* vsie in Re(assoc) frame
* @roam_trigger_bitmap: Bitmap of roaming triggers.
* @sta_roam_disable STA roaming disabled by interfaces
* @roam_high_rssi_delta: Delta change in high RSSI at which roam scan is
* triggered in 2.4/5 GHz.
* @early_stop_scan_enable: Set early stop scan
* @enable_5g_band_pref: Enable preference for 5G from INI
* @ese_enabled: Enable ESE feature
@ -1752,6 +1754,7 @@ struct wlan_mlme_lfr_cfg {
bool enable_roam_reason_vsie;
uint32_t roam_trigger_bitmap;
uint32_t sta_roam_disable;
uint8_t roam_high_rssi_delta;
#endif
bool early_stop_scan_enable;
bool enable_5g_band_pref;

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -264,6 +264,56 @@ target_if_cm_roam_rssi_diff_6ghz(struct wlan_objmgr_vdev *vdev,
return status;
}
static QDF_STATUS
target_if_cm_roam_scan_offload_rssi_thresh(
wmi_unified_t wmi_handle,
struct wlan_roam_offload_scan_rssi_params *req);
/**
* target_if_cm_roam_scan_offload_rssi_params() - Set the RSSI parameters
* for roam offload scan
* @vdev: vdev object
* @roam_rssi_params: structure containing parameters for roam offload scan
* based on RSSI
*
* Return: QDF_STATUS
*/
static QDF_STATUS
target_if_cm_roam_scan_offload_rssi_params(
struct wlan_objmgr_vdev *vdev,
struct wlan_roam_offload_scan_rssi_params *roam_rssi_params)
{
QDF_STATUS status = QDF_STATUS_E_FAILURE;
wmi_unified_t wmi_handle;
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
if (!wmi_handle)
return status;
status = target_if_cm_roam_scan_offload_rssi_thresh(wmi_handle,
roam_rssi_params);
return status;
}
static void
target_if_check_hi_rssi_5ghz_support(
wmi_unified_t wmi_handle,
struct wlan_roam_offload_scan_rssi_params *roam_rssi_params)
{
if ((roam_rssi_params->flags &
ROAM_SCAN_RSSI_THRESHOLD_FLAG_ROAM_HI_RSSI_EN_ON_5G) &&
wmi_service_enabled(wmi_handle,
wmi_service_5ghz_hi_rssi_roam_support)) {
target_if_debug("FW supports Hi RSSI roam in 5 GHz");
roam_rssi_params->flags |=
WMI_ROAM_SCAN_RSSI_THRESHOLD_FLAG_ROAM_HI_RSSI_EN_ON_5G;
} else {
roam_rssi_params->flags &=
~ROAM_SCAN_RSSI_THRESHOLD_FLAG_ROAM_HI_RSSI_EN_ON_5G;
}
}
static void
target_if_cm_roam_register_lfr3_ops(struct wlan_cm_roam_tx_ops *tx_ops)
{
@ -274,6 +324,8 @@ target_if_cm_roam_register_lfr3_ops(struct wlan_cm_roam_tx_ops *tx_ops)
target_if_cm_exclude_rm_partial_scan_freq;
tx_ops->send_roam_full_scan_6ghz_on_disc =
target_if_cm_roam_full_scan_6ghz_on_disc;
tx_ops->send_roam_scan_offload_rssi_params =
target_if_cm_roam_scan_offload_rssi_params;
}
#else
static inline void
@ -314,6 +366,12 @@ target_if_cm_roam_rssi_diff_6ghz(struct wlan_objmgr_vdev *vdev,
{
return QDF_STATUS_E_NOSUPPORT;
}
static inline void
target_if_check_hi_rssi_5ghz_support(
wmi_unified_t wmi_handle,
struct wlan_roam_offload_scan_rssi_params *roam_rssi_params)
{}
#endif
/**
@ -678,6 +736,9 @@ target_if_cm_roam_scan_offload_rssi_thresh(
}
}
if (req->hi_rssi_scan_rssi_delta)
target_if_check_hi_rssi_5ghz_support(wmi_handle, req);
target_if_debug("RSO_CFG: vdev %d: db2dbm enabled:%d, good_rssi_threshold:%d, early_stop_thresholds en:%d, min:%d, max:%d, roam_scan_rssi_thresh:%d, roam_rssi_thresh_diff:%d",
req->vdev_id, db2dbm_enabled, req->good_rssi_threshold,
req->early_stop_scan_enable,

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@ -317,6 +317,51 @@ QDF_STATUS cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc,
return status;
}
QDF_STATUS cm_set_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
uint8_t param_value)
{
struct wlan_objmgr_vdev *vdev;
struct wlan_roam_offload_scan_rssi_params *roam_rssi_params;
QDF_STATUS status = QDF_STATUS_E_INVAL;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_CM_ID);
if (!vdev) {
mlme_err("vdev object is NULL for vdev %d", vdev_id);
return QDF_STATUS_E_FAILURE;
}
roam_rssi_params = qdf_mem_malloc(sizeof(*roam_rssi_params));
if (!roam_rssi_params)
goto rel_vdev_ref;
wlan_cm_set_roam_scan_high_rssi_offset(psoc, param_value);
qdf_mem_zero(roam_rssi_params, sizeof(*roam_rssi_params));
status = wlan_cm_roam_scan_offload_rssi_thresh(psoc, vdev_id,
roam_rssi_params);
if (!QDF_IS_STATUS_SUCCESS(status)) {
mlme_err("fail to set roam scan offload RSSI threshold params");
goto mem_free;
}
mlme_debug("vdev:%d Configured high RSSI delta=%d, 5 GHZ roam flag=%d",
vdev_id, roam_rssi_params->hi_rssi_scan_rssi_delta,
(roam_rssi_params->flags &
ROAM_SCAN_RSSI_THRESHOLD_FLAG_ROAM_HI_RSSI_EN_ON_5G));
status = wlan_cm_tgt_send_roam_scan_offload_rssi_params(
vdev, roam_rssi_params);
if (!QDF_IS_STATUS_SUCCESS(status))
mlme_err("fail to set roam scan high RSSI offset");
mem_free:
qdf_mem_free(roam_rssi_params);
rel_vdev_ref:
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
return status;
}
#else
static inline void
cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for
* any purpose with or without fee is hereby granted, provided that the
@ -156,6 +156,21 @@ cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
*/
QDF_STATUS cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, uint8_t param_value);
/**
* cm_set_roam_scan_high_rssi_offset() - Set the delta change in high RSSI at
* which roam scan is triggered in 2.4/5 GHz.
* @psoc: PSOC pointer
* @vdev_id: vdev id
* @param_value: Set the High RSSI delta for roam scan trigger
* * 1-16 - Set an offset value in this range
* * 0 - Disable
*
* Return: QDF_STATUS
*/
QDF_STATUS
cm_set_roam_scan_high_rssi_offset(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,

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -692,6 +692,44 @@ wlan_cm_roam_set_ho_delay_config(struct wlan_objmgr_psoc *psoc,
*/
uint16_t
wlan_cm_roam_get_ho_delay_config(struct wlan_objmgr_psoc *psoc);
/**
* wlan_cm_set_roam_scan_high_rssi_offset() - Set the delta change in high RSSI
* at which roam scan is triggered in 2.4/5 GHz.
* @psoc: PSOC pointer
* @roam_high_rssi_delta: Set the High RSSI delta for roam scan trigger
* * 1-16 - Set an offset value in this range
* * 0 - Disable
*
* Return: none
*/
void
wlan_cm_set_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc,
uint8_t roam_high_rssi_delta);
/**
* wlan_cm_get_roam_scan_high_rssi_offset() - Get the delta change in high RSSI
* at which roam scan is triggered in 2.4/5 GHz.
* @psoc: PSOC pointer
*
* Return: High RSSI delta for roam scan trigger
*/
uint8_t wlan_cm_get_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc);
/**
* wlan_cm_roam_scan_offload_rssi_thresh() - set roam offload scan rssi
* parameters
* @psoc: PSOC pointer
* @vdev_id: VDEV id
* @roam_rssi_params: roam offload scan rssi related parameters
*
* This function is used to set roam offload scan rssi related parameters
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_cm_roam_scan_offload_rssi_thresh(
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct wlan_roam_offload_scan_rssi_params *roam_rssi_params);
#else
static inline
void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
@ -826,5 +864,11 @@ wlan_cm_roam_get_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc)
{
return 0;
}
static inline uint8_t
wlan_cm_get_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc)
{
return 0;
}
#endif /* FEATURE_ROAM_OFFLOAD */
#endif /* WLAN_CM_ROAM_API_H__ */

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -980,6 +980,19 @@ struct wlan_roam_scan_offload_params {
#endif
};
/**
* enum wlan_roam_offload_scan_rssi_flags - Flags for roam scan RSSI threshold
* params, this enums will be used in flags param of the structure
* wlan_roam_offload_scan_rssi_params
* @ROAM_SCAN_RSSI_THRESHOLD_INVALID_FLAG: invalid flag
* @ROAM_SCAN_RSSI_THRESHOLD_FLAG_ROAM_HI_RSSI_EN_ON_5G: enable high RSSI roam
* trigger support to roam from 5 GHz to 6 GHz band
*/
enum wlan_roam_offload_scan_rssi_flags {
ROAM_SCAN_RSSI_THRESHOLD_INVALID_FLAG,
ROAM_SCAN_RSSI_THRESHOLD_FLAG_ROAM_HI_RSSI_EN_ON_5G = BIT(0),
};
/**
* struct wlan_roam_offload_scan_rssi_params - structure containing
* parameters for roam offload scan based on RSSI
@ -1015,6 +1028,7 @@ struct wlan_roam_scan_offload_params {
* roam
* @roam_data_rssi_threshold: Bad data RSSI threshold to roam
* @rx_data_inactivity_time: Rx duration to check data RSSI
* @flags: Flags for roam scan RSSI threshold params
*/
struct wlan_roam_offload_scan_rssi_params {
int8_t rssi_thresh;
@ -1046,6 +1060,7 @@ struct wlan_roam_offload_scan_rssi_params {
uint32_t roam_data_rssi_threshold_triggers;
int32_t roam_data_rssi_threshold;
uint32_t rx_data_inactivity_time;
uint32_t flags;
};
/**
@ -1400,6 +1415,8 @@ struct set_pcl_req {
* 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_scan_offload_rssi_params: Set the RSSI parameters for roam
* offload scan
*/
struct wlan_cm_roam_tx_ops {
QDF_STATUS (*send_vdev_set_pcl_cmd)(struct wlan_objmgr_vdev *vdev,
@ -1436,6 +1453,9 @@ struct wlan_cm_roam_tx_ops {
QDF_STATUS (*send_roam_full_scan_6ghz_on_disc)(
struct wlan_objmgr_vdev *vdev,
uint8_t value);
QDF_STATUS (*send_roam_scan_offload_rssi_params)(
struct wlan_objmgr_vdev *vdev,
struct wlan_roam_offload_scan_rssi_params *roam_rssi_params);
#endif
};

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -227,6 +227,24 @@ ucfg_cm_exclude_rm_partial_scan_freq(struct wlan_objmgr_pdev *pdev,
QDF_STATUS ucfg_cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id,
uint8_t param_value);
/**
* ucfg_cm_set_roam_scan_high_rssi_offset() - Set the delta change in high RSSI
* at which roam scan is triggered in 2.4/5 GHz.
* @psoc: Pointer to psoc object
* @vdev_id: vdev id
* @param_value: Set the High RSSI delta for roam scan trigger
* 0 - Disable
* 1-16 - Set an offset value in this range
*
* Return: QDF_STATUS
*/
static inline QDF_STATUS
ucfg_cm_set_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, uint8_t param_value)
{
return cm_set_roam_scan_high_rssi_offset(psoc, vdev_id, param_value);
}
#else
static inline QDF_STATUS
ucfg_cm_update_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
@ -277,4 +295,11 @@ ucfg_cm_roam_full_scan_6ghz_on_disc(struct wlan_objmgr_pdev *pdev,
{
return QDF_STATUS_SUCCESS;
}
static inline QDF_STATUS
ucfg_cm_set_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, uint8_t param_value)
{
return QDF_STATUS_SUCCESS;
}
#endif

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -93,6 +93,20 @@ 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);
/**
* wlan_cm_tgt_send_roam_scan_offload_rssi_params() - Set the RSSI parameters
* for roam offload scan
* @vdev: Pointer to vdev object
* @roam_rssi_params: structure containing parameters for roam offload scan
* based on RSSI
*
* Return: QDF_STATUS
*/
QDF_STATUS
wlan_cm_tgt_send_roam_scan_offload_rssi_params(
struct wlan_objmgr_vdev *vdev,
struct wlan_roam_offload_scan_rssi_params *roam_rssi_params);
#else
static inline QDF_STATUS
wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc,

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -922,7 +922,9 @@ wlan_cm_roam_get_ho_delay_config(struct wlan_objmgr_psoc *psoc)
return mlme_obj->cfg.lfr.roam_ho_delay_config;
}
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
void
wlan_cm_set_exclude_rm_partial_scan_freq(struct wlan_objmgr_psoc *psoc,
uint8_t exclude_rm_partial_scan_freq)
@ -977,4 +979,29 @@ uint8_t wlan_cm_roam_get_full_scan_6ghz_on_disc(struct wlan_objmgr_psoc *psoc)
return mlme_obj->cfg.lfr.roam_full_scan_6ghz_on_disc;
}
void
wlan_cm_set_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc,
uint8_t roam_high_rssi_delta)
{
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_high_rssi_delta = roam_high_rssi_delta;
}
uint8_t
wlan_cm_get_roam_scan_high_rssi_offset(struct wlan_objmgr_psoc *psoc)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj;
mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj)
return 0;
return mlme_obj->cfg.lfr.roam_high_rssi_delta;
}
#endif

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -299,6 +299,34 @@ QDF_STATUS wlan_cm_tgt_send_roam_full_scan_6ghz_on_disc(
return status;
}
QDF_STATUS
wlan_cm_tgt_send_roam_scan_offload_rssi_params(
struct wlan_objmgr_vdev *vdev,
struct wlan_roam_offload_scan_rssi_params *roam_rssi_params)
{
QDF_STATUS status;
uint8_t vdev_id;
struct wlan_cm_roam_tx_ops *roam_tx_ops;
vdev_id = wlan_vdev_get_id(vdev);
roam_tx_ops = wlan_cm_roam_get_tx_ops_from_vdev(vdev);
if (!roam_tx_ops || !roam_tx_ops->send_roam_scan_offload_rssi_params) {
mlme_err("vdev %d send_roam_scan_offload_rssi_params 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_scan_offload_rssi_params(
vdev, roam_rssi_params);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("vdev %d fail to send roam scan offload RSSI params",
vdev_id);
return status;
}
#endif
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)

View file

@ -1,6 +1,6 @@
/*
* Copyright (c) 2013-2021, The Linux Foundation. All rights reserved.
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@ -215,6 +215,7 @@ static QDF_STATUS send_roam_scan_offload_rssi_thresh_cmd_tlv(
rssi_threshold_fp->hirssi_upper_bound = roam_req->hi_rssi_scan_rssi_ub;
rssi_threshold_fp->rssi_thresh_offset_5g =
roam_req->rssi_thresh_offset_5g;
rssi_threshold_fp->flags = roam_req->flags;
buf_ptr += sizeof(wmi_roam_scan_rssi_threshold_fixed_param);
WMITLV_SET_HDR(buf_ptr,

View file

@ -4655,6 +4655,7 @@ roam_control_policy[QCA_ATTR_ROAM_CONTROL_MAX + 1] = {
.type = NLA_U8},
[QCA_ATTR_ROAM_CONTROL_FULL_SCAN_6GHZ_ONLY_ON_PRIOR_DISCOVERY] = {
.type = NLA_U8},
[QCA_ATTR_ROAM_CONTROL_CONNECTED_HIGH_RSSI_OFFSET] = {.type = NLA_U8},
};
/**
@ -5306,6 +5307,31 @@ hdd_set_roam_with_control_config(struct hdd_context *hdd_ctx,
hdd_err("Fail to decide inclusion of 6 GHz channels");
}
attr = tb2[QCA_ATTR_ROAM_CONTROL_CONNECTED_HIGH_RSSI_OFFSET];
if (attr) {
value = nla_get_u8(attr);
if (!cfg_in_range(CFG_LFR_ROAM_SCAN_HI_RSSI_DELTA, value)) {
hdd_err("High RSSI offset value %d is out of range",
value);
return -EINVAL;
}
hdd_debug("%s roam scan high RSSI with offset: %d for vdev %d",
value ? "Enable" : "Disable", value, vdev_id);
if (!value &&
!wlan_cm_get_roam_scan_high_rssi_offset(hdd_ctx->psoc)) {
hdd_debug("Roam scan high RSSI is already disabled");
return -EINVAL;
}
status = ucfg_cm_set_roam_scan_high_rssi_offset(hdd_ctx->psoc,
vdev_id, value);
if (QDF_IS_STATUS_ERROR(status))
hdd_err("Fail to set roam scan high RSSI offset for vdev %d",
vdev_id);
}
return qdf_status_to_os_return(status);
}

View file

@ -17882,6 +17882,29 @@ csr_cm_roam_scan_offload_rssi_thresh(struct mac_context *mac_ctx,
else
params->hi_rssi_scan_rssi_delta =
roam_info->cfgParams.hi_rssi_scan_rssi_delta;
/*
* When the STA operating band is 2.4/5 GHz and if the high RSSI delta
* is configured through vendor command then the priority should be
* given to it and the high RSSI delta value will be overridden with it.
*/
if (!WLAN_REG_IS_6GHZ_CHAN_FREQ(session->connectedProfile.op_freq)) {
uint8_t roam_high_rssi_delta;
roam_high_rssi_delta =
wlan_cm_get_roam_scan_high_rssi_offset(mac_ctx->psoc);
if (roam_high_rssi_delta)
params->hi_rssi_scan_rssi_delta =
roam_high_rssi_delta;
/*
* Firmware will use this flag to enable 5 to 6 GHz
* high RSSI roam
*/
if (roam_high_rssi_delta &&
WLAN_REG_IS_5GHZ_CH_FREQ(session->connectedProfile.op_freq))
params->flags |=
ROAM_SCAN_RSSI_THRESHOLD_FLAG_ROAM_HI_RSSI_EN_ON_5G;
}
params->hi_rssi_scan_rssi_ub =
roam_info->cfgParams.hi_rssi_scan_rssi_ub;
params->raise_rssi_thresh_5g =
@ -18474,6 +18497,37 @@ csr_cm_fill_rso_sae_single_pmk_info(struct mac_context *mac_ctx,
return false;
}
#endif
QDF_STATUS wlan_cm_roam_scan_offload_rssi_thresh(
struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct wlan_roam_offload_scan_rssi_params *roam_rssi_params)
{
struct csr_roam_session *session;
struct mac_context *mac_ctx;
mac_ctx = sme_get_mac_context();
if (!mac_ctx) {
sme_err("mac_ctx is NULL");
return QDF_STATUS_E_FAILURE;
}
session = CSR_GET_SESSION(mac_ctx, vdev_id);
if (!session) {
sme_err("session is null %d", vdev_id);
return QDF_STATUS_E_FAILURE;
}
if (WLAN_REG_IS_6GHZ_CHAN_FREQ(session->connectedProfile.op_freq)) {
sme_err("vdev:%d High RSSI offset can't be set in 6 GHz band",
vdev_id);
return QDF_STATUS_E_FAILURE;
}
csr_cm_roam_scan_offload_rssi_thresh(mac_ctx, session,
roam_rssi_params);
return QDF_STATUS_SUCCESS;
}
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD