mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-07 12:25:00 -04:00
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:
parent
d46056dd98
commit
8580e33717
13 changed files with 373 additions and 10 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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__ */
|
||||
|
|
|
|||
|
|
@ -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
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in a new issue