qcacld-3.0: Add support to send RSSI_CHANGE_THRESHOLD

Add support to send WMI_RSSI_CHANGE_THRESHOLD command to firmware
in connection manager.

Change-Id: I97d4b8f8fc0e938ede0e61d44eb8ffbcbb0fb4ff
CRs-Fixed: 2761043
This commit is contained in:
Pragaspathi Thilagaraj
2020-08-03 00:42:34 +05:30
committed by snandini
vanhempi f481997643
commit eec05fff64
13 muutettua tiedostoa jossa 415 lisäystä ja 18 poistoa

Näytä tiedosto

@@ -53,6 +53,28 @@ cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
params->roam_bmiss_final_bcnt = beacon_miss_count;
}
QDF_STATUS
cm_roam_fill_rssi_change_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct wlan_roam_rssi_change_params *params)
{
struct cm_roam_values_copy temp;
params->vdev_id = vdev_id;
wlan_cm_roam_cfg_get_value(psoc, vdev_id,
RSSI_CHANGE_THRESHOLD, &temp);
params->rssi_change_thresh = temp.int_value;
wlan_cm_roam_cfg_get_value(psoc, vdev_id,
BEACON_RSSI_WEIGHT, &temp);
params->bcn_rssi_weight = temp.uint_value;
wlan_cm_roam_cfg_get_value(psoc, vdev_id,
HI_RSSI_DELAY_BTW_SCANS, &temp);
params->hirssi_delay_btw_scans = temp.uint_value;
return QDF_STATUS_SUCCESS;
}
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
/**
* cm_roam_reason_vsie() - set roam reason vsie
@@ -274,6 +296,8 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
cm_roam_scan_bmiss_cnt(psoc, vdev_id, &start_req->beacon_miss_cnt);
cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable);
cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers);
cm_roam_fill_rssi_change_params(psoc, vdev_id,
&start_req->rssi_change_params);
cm_roam_mawc_params(psoc, vdev_id, &start_req->mawc_params);
cm_roam_bss_load_config(psoc, vdev_id, &start_req->bss_load_config);
cm_roam_disconnect_params(psoc, vdev_id, &start_req->disconnect_params);
@@ -311,8 +335,11 @@ cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
update_req = qdf_mem_malloc(sizeof(*update_req));
if (!update_req)
return QDF_STATUS_E_NOMEM;
/* fill from mlme directly */
cm_roam_scan_bmiss_cnt(psoc, vdev_id, &update_req->beacon_miss_cnt);
cm_roam_fill_rssi_change_params(psoc, vdev_id,
&update_req->rssi_change_params);
if (!MLME_IS_ROAM_STATE_RSO_ENABLED(psoc, vdev_id)) {
cm_roam_disconnect_params(psoc, vdev_id,
&update_req->disconnect_params);

Näytä tiedosto

@@ -75,5 +75,16 @@ QDF_STATUS
cm_roam_stop_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t reason);
/**
* wlan_cm_rso_fill_rssi_change_params - Fill roam scan rssi change parameters
* @psoc: PSOC pointer
* @vdev_id: vdev_id
* @params: RSSI change parameters
*
* Return: QDF_STATUS
*/
QDF_STATUS
cm_roam_fill_rssi_change_params(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct wlan_roam_rssi_change_params *params);
#endif
#endif

Näytä tiedosto

@@ -24,7 +24,7 @@
#define WLAN_CM_ROAM_API_H__
#include "wlan_mlme_dbg.h"
#include "wlan_cm_roam_public_struct.h"
#include "../../core/src/wlan_cm_roam_offload.h"
#include "wlan_mlme_main.h"
#include "wlan_mlme_api.h"
@@ -242,6 +242,43 @@ QDF_STATUS wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
*/
QDF_STATUS wlan_cm_roam_stop_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t reason);
/**
* wlan_cm_roam_cfg_get_value - Get RSO config value from mlme vdev private
* object
* @psoc: psoc pointer
* @vdev_id: vdev id
* @roam_cfg_type: Value needed
* @dst_config: Destination config
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_cm_roam_cfg_get_value(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
enum roam_cfg_param roam_cfg_type,
struct cm_roam_values_copy *dst_config);
/**
* wlan_cm_roam_cfg_set_value - Set RSO config value
* @psoc: psoc pointer
* @vdev_id: vdev id
* @roam_cfg_type: Roam configuration type to set
* @src_config: Source config
*
* Return: QDF_STATUS
*/
QDF_STATUS
wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
enum roam_cfg_param roam_cfg_type,
struct cm_roam_values_copy *src_config);
#else
static inline QDF_STATUS
wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
enum roam_cfg_param roam_cfg_type,
struct cm_roam_values_copy *src_config)
{
return QDF_STATUS_SUCCESS;
}
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD

Näytä tiedosto

@@ -88,6 +88,19 @@
#define REASON_ROAM_HANDOFF_DONE 52
#define REASON_ROAM_ABORT 53
/**
* enum roam_cfg_param - Type values for roaming parameters used as index
* for get/set of roaming config values(pNeighborRoamInfo in legacy)
* @RSSI_CHANGE_THRESHOLD: Rssi change threshold
* @BEACON_RSSI_WEIGHT: Beacon Rssi weight parameter
* @HI_RSSI_DELAY_BTW_SCANS: High Rssi delay between scans
*/
enum roam_cfg_param {
RSSI_CHANGE_THRESHOLD,
BEACON_RSSI_WEIGHT,
HI_RSSI_DELAY_BTW_SCANS,
};
/**
* enum roam_offload_init_flags - Flags sent in Roam offload initialization.
* @WLAN_ROAM_FW_OFFLOAD_ENABLE: Init roaming module at firwmare
@@ -984,7 +997,25 @@ struct wlan_roam_scan_period_params {
uint32_t roam_scan_period_after_inactivity;
uint32_t full_scan_period;
};
#endif
/**
* struct wlan_roam_rssi_change_params - RSSI change parameters to be sent over
* WMI_ROAM_SCAN_RSSI_CHANGE_THRESHOLD command
* @vdev_id: vdev id
* only if current RSSI changes by rssi_change_thresh value.
* @bcn_rssi_weight: Beacon RSSI weightage
* @hirssi_delay_btw_scans: Delay between high RSSI scans
* @rssi_change_thresh: RSSI change threshold. Start new rssi triggered scan
*/
struct wlan_roam_rssi_change_params {
uint32_t vdev_id;
uint32_t bcn_rssi_weight;
uint32_t hirssi_delay_btw_scans;
int32_t rssi_change_thresh;
};
#ifdef ROAM_OFFLOAD_V1
/**
* struct wlan_roam_start_config - structure containing parameters for
* roam start config
@@ -993,6 +1024,7 @@ struct wlan_roam_scan_period_params {
* @reason_vsie_enable: roam reason vsie enable parameters
* @roam_triggers: roam triggers parameters
* @scan_period_params: roam scan period parameters
* @rssi_change_params: Roam offload RSSI change parameters
* @profile_params: ap profile parameters
* @mawc_params: mawc parameters
* @scan_filter_params: roam scan filter parameters
@@ -1009,6 +1041,7 @@ struct wlan_roam_start_config {
struct wlan_roam_triggers roam_triggers;
struct wlan_roam_scan_period_params scan_period_params;
struct wlan_roam_scan_offload_params rso_config;
struct wlan_roam_rssi_change_params rssi_change_params;
struct ap_profile_params profile_params;
struct wlan_roam_mawc_params mawc_params;
struct wlan_roam_scan_filter_params scan_filter_params;
@@ -1051,6 +1084,7 @@ struct wlan_roam_stop_config {
* @beacon_miss_cnt: roam beacon miss count parameters
* @scan_filter_params: roam scan filter parameters
* @scan_period_params: roam scan period parameters
* @rssi_change_params: roam scan rssi change parameters
* @profile_params: ap profile parameters
* @rssi_params: roam scan rssi threshold parameters
* @disconnect_params: disconnect params
@@ -1061,6 +1095,7 @@ struct wlan_roam_update_config {
struct wlan_roam_beacon_miss_cnt beacon_miss_cnt;
struct wlan_roam_scan_filter_params scan_filter_params;
struct wlan_roam_scan_period_params scan_period_params;
struct wlan_roam_rssi_change_params rssi_change_params;
struct ap_profile_params profile_params;
struct wlan_roam_offload_scan_rssi_params rssi_params;
struct wlan_roam_disconnect_params disconnect_params;
@@ -1210,6 +1245,22 @@ enum roam_scan_freq_scheme {
ROAM_SCAN_FREQ_SCHEME_FULL_SCAN = 2,
};
/**
* struct wlan_cm_rso_configs - Roam scan offload related per vdev
* configuration parameters.
* @rescan_rssi_delta: Roam scan rssi delta. Start new rssi triggered scan only
* if it changes by rescan_rssi_delta value.
* @beacon_rssi_weight: Number of beacons to be used to calculate the average
* rssi of the AP.
* @hi_rssi_scan_delay: Roam scan delay in ms for High RSSI roam trigger.
*/
struct wlan_cm_rso_configs {
uint8_t rescan_rssi_delta;
uint8_t beacon_rssi_weight;
uint32_t hi_rssi_scan_delay;
};
/**
* struct wlan_cm_roam - Connection manager roam configs, state and roam
* data related structure
@@ -1217,10 +1268,26 @@ enum roam_scan_freq_scheme {
* @pcl_vdev_cmd_active: Flag to check if vdev level pcl command needs to be
* sent or PDEV level PCL command needs to be sent
* @control_param: vendor configured roam control param
* @vdev_rso_config: Roam scan offload related configurations. Equivalent to the
* legacy tpCsrNeighborRoamControlInfo structure.
*/
struct wlan_cm_roam {
struct wlan_cm_roam_tx_ops tx_ops;
bool pcl_vdev_cmd_active;
struct wlan_cm_roam_vendor_btm_params vendor_btm_param;
struct wlan_cm_rso_configs vdev_rso_config;
};
/**
* struct cm_roam_values_copy - Structure for values copy buffer
* @uint_value: Unsigned integer value to be copied
* @int_value: Integer value
* @bool_value: boolean value
*/
struct cm_roam_values_copy {
uint32_t uint_value;
int32_t int_value;
bool bool_value;
};
#endif

Näytä tiedosto

@@ -25,7 +25,6 @@
#include "wlan_mlme_main.h"
#include "wlan_policy_mgr_api.h"
#include <wmi_unified_priv.h>
#include "../../core/src/wlan_cm_roam_offload.h"
#ifdef ROAM_OFFLOAD_V1
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
@@ -427,3 +426,91 @@ wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
}
#endif
#ifdef ROAM_OFFLOAD_V1
QDF_STATUS wlan_cm_roam_cfg_get_value(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
enum roam_cfg_param roam_cfg_type,
struct cm_roam_values_copy *dst_config)
{
struct wlan_objmgr_vdev *vdev;
struct mlme_legacy_priv *mlme_priv;
struct wlan_cm_rso_configs *src_config;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_NB_ID);
if (!vdev) {
mlme_err("vdev object is NULL");
return QDF_STATUS_E_FAILURE;
}
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_err("vdev legacy private object is NULL");
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_E_FAILURE;
}
src_config = &mlme_priv->cm_roam.vdev_rso_config;
switch (roam_cfg_type) {
case RSSI_CHANGE_THRESHOLD:
dst_config->int_value = src_config->rescan_rssi_delta;
break;
case BEACON_RSSI_WEIGHT:
dst_config->uint_value = src_config->beacon_rssi_weight;
break;
case HI_RSSI_DELAY_BTW_SCANS:
dst_config->uint_value = src_config->hi_rssi_scan_delay;
break;
default:
mlme_err("Invalid roam config requested:%d", roam_cfg_type);
return QDF_STATUS_E_FAILURE;
}
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS
wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
enum roam_cfg_param roam_cfg_type,
struct cm_roam_values_copy *src_config)
{
struct wlan_objmgr_vdev *vdev;
struct mlme_legacy_priv *mlme_priv;
struct wlan_cm_rso_configs *dst_config;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_NB_ID);
if (!vdev) {
mlme_err("vdev object is NULL");
return QDF_STATUS_E_FAILURE;
}
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_err("vdev legacy private object is NULL");
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_E_FAILURE;
}
dst_config = &mlme_priv->cm_roam.vdev_rso_config;
switch (roam_cfg_type) {
case RSSI_CHANGE_THRESHOLD:
dst_config->rescan_rssi_delta = src_config->uint_value;
break;
case BEACON_RSSI_WEIGHT:
dst_config->beacon_rssi_weight = src_config->uint_value;
break;
case HI_RSSI_DELAY_BTW_SCANS:
dst_config->hi_rssi_scan_delay = src_config->uint_value;
break;
default:
mlme_err("Invalid roam config requested:%d", roam_cfg_type);
}
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_SUCCESS;
}
#endif