qcacld-3.0: Move rso related process to connection manager [PART 4]

Add new code to implement below functions for connection manager
roam part:

Filling below WMI cmd parameters related process:
WMI_ROAM_BTM_CONFIG_CMDID
WMI_ROAM_SCAN_STOP_CMD
WMI_ROAM_PER_CONFIG_CMDID

And RSO command:
ROAM_SCAN_OFFLOAD_RESTART

Change-Id: I18480941980a55957abd48e0329fe4ef213a1243
CRs-Fixed: 2747578
This commit is contained in:
hqu
2020-08-04 00:47:07 +08:00
committed by snandini
parent c2c66700ac
commit ed6c27c858
30 changed files with 1092 additions and 372 deletions

View File

@@ -160,6 +160,8 @@ struct wlan_mlme_roam {
* @cm_roam: Roaming configuration
* @bigtk_vdev_support: BIGTK feature support for this vdev (SAP)
* @sae_auth_retry: SAE auth retry information
* @roam_reason_better_ap: roam due to better AP found
* @better_ap_hb_failure_rssi: heartbeat failure AP RSSI
*/
struct mlme_legacy_priv {
bool chan_switch_in_progress;
@@ -180,6 +182,8 @@ struct mlme_legacy_priv {
struct wlan_cm_roam cm_roam;
bool bigtk_vdev_support;
struct sae_auth_retry sae_retry;
bool roam_reason_better_ap;
uint32_t hb_failure_rssi;
};
/**

View File

@@ -115,6 +115,41 @@ QDF_STATUS mlme_set_bigtk_support(struct wlan_objmgr_vdev *vdev, bool val);
bool mlme_get_bigtk_support(struct wlan_objmgr_vdev *vdev);
/**
* mlme_set_roam_reason_better_ap() - set roam reason better AP
* @vdev: vdev pointer
* @val: value to be set
*
* Return: QDF_STATUS
*/
QDF_STATUS
mlme_set_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev, bool val);
/**
* mlme_get_roam_reason_better_ap() - get roam reason better AP
* @vdev: vdev pointer
*
* Return: bool
*/
bool mlme_get_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev);
/**
* mlme_set_hb_ap_rssi() - set hb ap RSSI
* @vdev: vdev pointer
* @val: value to be set
*
* Return: QDF_STATUS
*/
QDF_STATUS mlme_set_hb_ap_rssi(struct wlan_objmgr_vdev *vdev, uint32_t val);
/**
* mlme_get_hb_ap_rssi() - get HB AP RSSIc
* @vdev: vdev pointer
*
* Return: rssi value
*/
uint32_t mlme_get_hb_ap_rssi(struct wlan_objmgr_vdev *vdev);
/**
* mlme_set_connection_fail() - set connection failure flag
* @vdev: vdev pointer

View File

@@ -657,6 +657,65 @@ bool mlme_get_bigtk_support(struct wlan_objmgr_vdev *vdev)
return mlme_priv->bigtk_vdev_support;
}
QDF_STATUS
mlme_set_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev, bool val)
{
struct mlme_legacy_priv *mlme_priv;
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_legacy_err("vdev legacy private object is NULL");
return QDF_STATUS_E_FAILURE;
}
mlme_priv->roam_reason_better_ap = val;
return QDF_STATUS_SUCCESS;
}
bool mlme_get_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev)
{
struct mlme_legacy_priv *mlme_priv;
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_legacy_err("vdev legacy private object is NULL");
return false;
}
return mlme_priv->roam_reason_better_ap;
}
QDF_STATUS
mlme_set_hb_ap_rssi(struct wlan_objmgr_vdev *vdev, uint32_t val)
{
struct mlme_legacy_priv *mlme_priv;
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_legacy_err("vdev legacy private object is NULL");
return QDF_STATUS_E_FAILURE;
}
mlme_priv->hb_failure_rssi = val;
return QDF_STATUS_SUCCESS;
}
uint32_t mlme_get_hb_ap_rssi(struct wlan_objmgr_vdev *vdev)
{
struct mlme_legacy_priv *mlme_priv;
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_legacy_err("vdev legacy private object is NULL");
return 0;
}
return mlme_priv->hb_failure_rssi;
}
QDF_STATUS mlme_set_connection_fail(struct wlan_objmgr_vdev *vdev, bool val)
{
struct mlme_legacy_priv *mlme_priv;

View File

@@ -565,6 +565,26 @@ target_if_cm_roam_scan_filter(wmi_unified_t wmi_handle, uint8_t command,
return status;
}
/**
* target_if_cm_roam_scan_btm_offload() - send roam scan btm offload to firmware
* @wmi_handle: wmi handle
* @req: roam scan btm offload parameters
*
* Send WMI_ROAM_BTM_CONFIG_CMDID parameters to firmware
*
* Return: QDF status
*/
static QDF_STATUS
target_if_cm_roam_scan_btm_offload(wmi_unified_t wmi_handle,
struct wlan_roam_btm_config *req)
{
target_if_debug("vdev %u btm_offload:%u btm_query_bitmask:%u btm_candidate_min_score:%d",
req->vdev_id, req->btm_offload_config,
req->btm_query_bitmask, req->btm_candidate_min_score);
return wmi_unified_send_btm_config(wmi_handle, req);
}
static uint32_t
target_if_get_wmi_roam_offload_flag(uint32_t flag)
{
@@ -613,7 +633,7 @@ target_if_cm_roam_send_roam_init(struct wlan_objmgr_vdev *vdev,
}
/**
* target_if_cm_roam_send_roam_start() - Send roam start related commands
* target_if_cm_roam_send_start() - Send roam start related commands
* to wmi
* @vdev: vdev object
* @req: roam start config parameters
@@ -623,8 +643,8 @@ target_if_cm_roam_send_roam_init(struct wlan_objmgr_vdev *vdev,
* Return: QDF_STATUS
*/
static QDF_STATUS
target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_start_config *req)
target_if_cm_roam_send_start(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_start_config *req)
{
QDF_STATUS status = QDF_STATUS_SUCCESS;
wmi_unified_t wmi_handle;
@@ -678,11 +698,107 @@ target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev,
goto end;
}
status = target_if_cm_roam_scan_btm_offload(wmi_handle,
&req->btm_config);
if (QDF_IS_STATUS_ERROR(status)) {
target_if_err("Sending BTM config to fw failed");
}
/* add other wmi commands */
end:
return status;
}
/**
* target_if_cm_roam_send_stop() - Send roam stop related commands
* to wmi
* @vdev: vdev object
* @req: roam stop config parameters
*
* This function is used to Send roam start related commands to wmi
*
* Return: QDF_STATUS
*/
static QDF_STATUS
target_if_cm_roam_send_stop(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_stop_config *req)
{
wmi_unified_t wmi_handle;
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
if (!wmi_handle)
return QDF_STATUS_E_FAILURE;
return QDF_STATUS_SUCCESS;
}
/**
* target_if_cm_roam_send_update_config() - Send roam update config related
* commands to wmi
* @vdev: vdev object
* @req: roam update config parameters
*
* Return: QDF_STATUS
*/
static QDF_STATUS
target_if_cm_roam_send_update_config(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_update_config *req)
{
wmi_unified_t wmi_handle;
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
if (!wmi_handle)
return QDF_STATUS_E_FAILURE;
return QDF_STATUS_SUCCESS;
}
/**
* target_if_cm_roam_abort() - Send roam abort to wmi
* @vdev: vdev object
* @vdev_id: vdev id
*
* Return: QDF_STATUS
*/
static QDF_STATUS
target_if_cm_roam_abort(struct wlan_objmgr_vdev *vdev, uint8_t vdev_id)
{
wmi_unified_t wmi_handle;
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
if (!wmi_handle)
return QDF_STATUS_E_FAILURE;
if (!target_if_is_vdev_valid(vdev_id)) {
target_if_err("Invalid vdev id:%d", vdev_id);
return QDF_STATUS_E_FAILURE;
}
return wmi_unified_roam_scan_offload_cmd(wmi_handle,
WMI_ROAM_SCAN_STOP_CMD,
vdev_id);
}
/**
* target_if_cm_roam_send_update_config() - Send roam update config related
* commands to wmi
* @vdev: vdev object
* @req: roam per config parameters
*
* Return: QDF_STATUS
*/
static QDF_STATUS
target_if_cm_roam_per_config(struct wlan_objmgr_vdev *vdev,
struct wlan_per_roam_config_req *req)
{
wmi_unified_t wmi_handle;
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
if (!wmi_handle)
return QDF_STATUS_E_FAILURE;
return wmi_unified_set_per_roam_config(wmi_handle, req);
}
/**
* target_if_cm_roam_register_rso_req_ops() - Register rso req tx ops fucntions
* @tx_ops: tx ops
@@ -695,7 +811,11 @@ static void
target_if_cm_roam_register_rso_req_ops(struct wlan_cm_roam_tx_ops *tx_ops)
{
tx_ops->send_roam_offload_init_req = target_if_cm_roam_send_roam_init;
tx_ops->send_roam_start_req = target_if_cm_roam_send_roam_start;
tx_ops->send_roam_start_req = target_if_cm_roam_send_start;
tx_ops->send_roam_stop_offload = target_if_cm_roam_send_stop;
tx_ops->send_roam_update_config = target_if_cm_roam_send_update_config;
tx_ops->send_roam_abort = target_if_cm_roam_abort;
tx_ops->send_roam_per_config = target_if_cm_roam_per_config;
}
#else
static void

View File

@@ -22,12 +22,14 @@
* Implementation for the common roaming offload api interfaces.
*/
#include "wlan_mlme_main.h"
#include "wlan_cm_roam_offload.h"
#include "wlan_cm_tgt_if_tx_api.h"
#include "wlan_cm_roam_api.h"
#include "wlan_mlme_vdev_mgr_interface.h"
/**
* wlan_cm_roam_scan_bmiss_cnt() - set roam beacon miss count
* cm_roam_scan_bmiss_cnt() - set roam beacon miss count
* @psoc: psoc pointer
* @vdev_id: vdev id
* @params: roam beacon miss count parameters
@@ -37,9 +39,8 @@
* Return: None
*/
static void
wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_beacon_miss_cnt *params)
cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct wlan_roam_beacon_miss_cnt *params)
{
uint8_t beacon_miss_count;
@@ -64,9 +65,8 @@ wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc,
* Return: None
*/
static void
wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_reason_vsie_enable *params)
cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct wlan_roam_reason_vsie_enable *params)
{
uint8_t enable_roam_reason_vsie;
@@ -87,9 +87,8 @@ wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
* Return: None
*/
static void
wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_triggers *params)
cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct wlan_roam_triggers *params)
{
params->vdev_id = vdev_id;
params->trigger_bitmap =
@@ -98,17 +97,15 @@ wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
&params->vendor_btm_param);
}
#else
static void
wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_reason_vsie_enable *params)
static inline void
cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct wlan_roam_reason_vsie_enable *params)
{
}
static void
wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_triggers *params)
static inline void
cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
struct wlan_roam_triggers *params)
{
}
#endif
@@ -127,6 +124,19 @@ cm_roam_init_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool enable)
return wlan_cm_tgt_send_roam_offload_init(psoc, vdev_id, enable);
}
static void cm_roam_set_roam_reason_better_ap(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, bool set)
{
struct wlan_objmgr_vdev *vdev;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_NB_ID);
if (!vdev)
return;
mlme_set_roam_reason_better_ap(vdev, set);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
}
/**
* cm_roam_start_req() - roam start request handling
* @psoc: psoc pointer
@@ -136,8 +146,7 @@ cm_roam_init_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool enable)
* Return: QDF_STATUS
*/
static QDF_STATUS
cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t reason)
{
struct wlan_roam_start_config *start_req;
@@ -147,11 +156,11 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
if (!start_req)
return QDF_STATUS_E_NOMEM;
cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
/* fill from mlme directly */
wlan_cm_roam_scan_bmiss_cnt(psoc, vdev_id,
&start_req->beacon_miss_cnt);
wlan_cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable);
wlan_cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers);
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);
/* fill from legacy through this API */
wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason);
@@ -174,13 +183,201 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
* Return: QDF_STATUS
*/
static QDF_STATUS
cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t reason)
{
struct wlan_roam_update_config *update_req;
QDF_STATUS status;
cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
update_req = qdf_mem_malloc(sizeof(*update_req));
if (!update_req)
return QDF_STATUS_E_NOMEM;
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");
qdf_mem_free(update_req);
return status;
}
/**
* cm_roam_restart_req() - roam restart req for LFR2
* @psoc: psoc pointer
* @vdev_id: vdev id
* @reason: reason for changing roam state for the requested vdev id
*
* Return: QDF_STATUS
*/
static QDF_STATUS
cm_roam_restart_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t reason)
{
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;
/* Rome offload engine does not stop after any scan.
* If this command is sent because all preauth attempts failed
* and WMI_ROAM_REASON_SUITABLE_AP event was received earlier,
* now it is time to call it heartbeat failure.
*/
if (reason == REASON_PREAUTH_FAILED_FOR_ALL
&& mlme_get_roam_reason_better_ap(vdev)) {
mlme_err("Sending heartbeat failure after preauth failures");
wlan_cm_send_beacon_miss(vdev_id, mlme_get_hb_ap_rssi(vdev));
mlme_set_roam_reason_better_ap(vdev, false);
}
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_SUCCESS;
}
/**
* cm_roam_abort_req() - roam scan abort req
* @psoc: psoc pointer
* @vdev_id: vdev id
* @reason: reason for changing roam state for the requested vdev id
*
* Return: QDF_STATUS
*/
static QDF_STATUS
cm_roam_abort_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t reason)
{
QDF_STATUS status;
status = wlan_cm_tgt_send_roam_abort_req(psoc, vdev_id);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("fail to send abort start");
return status;
}
/**
* cm_roam_stop_req() - roam stop request handling
* @psoc: psoc pointer
* @vdev_id: vdev id
* @reason: reason for changing roam state for the requested vdev id
*
* Return: QDF_STATUS
*/
static QDF_STATUS
cm_roam_stop_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t reason)
{
struct wlan_roam_stop_config *stop_req;
QDF_STATUS status;
cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
stop_req = qdf_mem_malloc(sizeof(*stop_req));
if (!stop_req)
return QDF_STATUS_E_NOMEM;
/* do the filling as csr_post_rso_stop */
status = wlan_cm_tgt_send_roam_stop_req(psoc, vdev_id, stop_req);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("fail to send roam stop");
qdf_mem_free(stop_req);
return status;
}
/**
* cm_roam_fill_per_roam_request() - create PER roam offload config request
* @psoc: psoc context
* @vdev_id: vdev id
*
* Return: QDF_STATUS
*/
static QDF_STATUS
cm_roam_fill_per_roam_request(struct wlan_objmgr_psoc *psoc,
struct wlan_per_roam_config_req *req)
{
struct wlan_mlme_psoc_ext_obj *mlme_obj;
mlme_obj = mlme_get_psoc_ext_obj(psoc);
if (!mlme_obj)
return QDF_STATUS_E_FAILURE;
req->per_config.enable = mlme_obj->cfg.lfr.per_roam_enable;
req->per_config.tx_high_rate_thresh =
mlme_obj->cfg.lfr.per_roam_config_high_rate_th;
req->per_config.rx_high_rate_thresh =
mlme_obj->cfg.lfr.per_roam_config_high_rate_th;
req->per_config.tx_low_rate_thresh =
mlme_obj->cfg.lfr.per_roam_config_low_rate_th;
req->per_config.rx_low_rate_thresh =
mlme_obj->cfg.lfr.per_roam_config_low_rate_th;
req->per_config.per_rest_time = mlme_obj->cfg.lfr.per_roam_rest_time;
req->per_config.tx_per_mon_time =
mlme_obj->cfg.lfr.per_roam_monitor_time;
req->per_config.rx_per_mon_time =
mlme_obj->cfg.lfr.per_roam_monitor_time;
req->per_config.tx_rate_thresh_percnt =
mlme_obj->cfg.lfr.per_roam_config_rate_th_percent;
req->per_config.rx_rate_thresh_percnt =
mlme_obj->cfg.lfr.per_roam_config_rate_th_percent;
req->per_config.min_candidate_rssi =
mlme_obj->cfg.lfr.per_roam_min_candidate_rssi;
mlme_debug("PER based roaming configuaration enable: %d vdev: %d high_rate_thresh: %d low_rate_thresh: %d rate_thresh_percnt: %d per_rest_time: %d monitor_time: %d min cand rssi: %d",
req->per_config.enable, req->vdev_id,
req->per_config.tx_high_rate_thresh,
req->per_config.tx_low_rate_thresh,
req->per_config.tx_rate_thresh_percnt,
req->per_config.per_rest_time,
req->per_config.tx_per_mon_time,
req->per_config.min_candidate_rssi);
return QDF_STATUS_SUCCESS;
}
/**
* cm_roam_offload_per_scan() - populates roam offload scan request and sends
* to fw
* @psoc: psoc context
* @vdev_id: vdev id
*
* Return: QDF_STATUS
*/
static QDF_STATUS
cm_roam_offload_per_config(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
{
struct wlan_per_roam_config_req *req = NULL;
QDF_STATUS status;
req = qdf_mem_malloc(sizeof(*req));
if (!req)
return QDF_STATUS_E_NOMEM;
req->vdev_id = vdev_id;
status = cm_roam_fill_per_roam_request(psoc, req);
if (QDF_IS_STATUS_ERROR(status)) {
qdf_mem_free(req);
mlme_debug("fail to fill per config");
return status;
}
status = wlan_cm_tgt_send_roam_per_config(psoc, vdev_id, req);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("fail to send roam stop");
qdf_mem_free(req);
return status;
}
/*
* similar to csr_roam_offload_scan, will be used from many legacy
* process directly, generate a new function wlan_cm_roam_send_rso_cmd
@@ -200,35 +397,28 @@ QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
mlme_debug("ROAM: not allowed");
return status;
}
/*
* Update PER config to FW. No need to update in case of stop command,
* FW takes care of stopping this internally
*/
if (rso_command != ROAM_SCAN_OFFLOAD_STOP)
cm_roam_offload_per_config(psoc, vdev_id);
if (rso_command == ROAM_SCAN_OFFLOAD_START)
status = cm_roam_start_req(psoc, vdev_id, reason);
else if (rso_command == ROAM_SCAN_OFFLOAD_UPDATE_CFG)
status = cm_roam_update_config_req(psoc, vdev_id, reason);
// else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART)
/* RESTART API */
// else
/* ABORT SCAN API */
else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART)
status = cm_roam_restart_req(psoc, vdev_id, reason);
else if (rso_command == ROAM_SCAN_OFFLOAD_ABORT_SCAN)
status = cm_roam_abort_req(psoc, vdev_id, reason);
else
mlme_debug("ROAM: invalid RSO command %d", rso_command);
return status;
}
/**
* cm_roam_stop_req() - roam stop request handling
* @psoc: psoc pointer
* @vdev_id: vdev id
* @reason: reason for changing roam state for the requested vdev id
*
* Return: QDF_STATUS
*/
static QDF_STATUS
cm_roam_stop_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
uint8_t reason)
{
/* do the filling as csr_post_rso_stop */
return QDF_STATUS_SUCCESS;
}
/**
* cm_roam_switch_to_rso_stop() - roam state handling for rso stop
* @pdev: pdev pointer

View File

@@ -78,6 +78,16 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_start_config *req,
uint8_t reason);
/**
* wlan_cm_send_beacon_miss() - initiate beacon miss
* @vdev_id: vdev id
* @rssi: AP rssi
*
* Return: void
*/
void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi);
#else
static inline QDF_STATUS
wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
@@ -88,21 +98,21 @@ wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
#endif
/**
* cm_roam_acquire_lock - Wrapper for sme_acquire_global_lock.
* cm_roam_acquire_lock() - Wrapper for sme_acquire_global_lock.
*
* Return: QDF_STATUS
*/
QDF_STATUS cm_roam_acquire_lock(void);
/**
* cm_roam_release_lock - Wrapper for sme_release_global_lock()
* cm_roam_release_lock() - Wrapper for sme_release_global_lock()
*
* Return: QDF_STATUS
*/
QDF_STATUS cm_roam_release_lock(void);
/**
* cm_roam_get_requestor_string - RSO control requestor to string api
* cm_roam_get_requestor_string() - RSO control requestor to string api
* @requestor: Requestor of type enum wlan_cm_rso_control_requestor
*
* Return: Pointer to converted string
@@ -111,7 +121,7 @@ char
*cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor);
/**
* ucfg_cm_rso_init_deinit - Init or Deinit roaming module at firmware
* ucfg_cm_rso_init_deinit() - Init or Deinit roaming module at firmware
* @pdev: Pointer to pdev
* @vdev_id: vdev id
* @enable: true: Send RSO init and RSO enable
@@ -123,7 +133,7 @@ QDF_STATUS wlan_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id, bool enable);
/**
* wlan_cm_disable_rso - Disable roam scan offload to firmware
* wlan_cm_disable_rso() - Disable roam scan offload to firmware
* @pdev: Pointer to pdev
* @vdev_id: vdev id
* @requestor: RSO disable requestor
@@ -136,7 +146,7 @@ QDF_STATUS wlan_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
uint8_t reason);
/**
* ucfg_cm_enable_rso - Enable roam scan offload to firmware
* ucfg_cm_enable_rso() - Enable roam scan offload to firmware
* @pdev: Pointer to pdev
* @vdev_id: vdev id
* @requestor: RSO disable requestor
@@ -212,7 +222,7 @@ wlan_cm_roam_extract_roam_initial_info(wmi_unified_t wmi, void *evt_buf,
uint8_t idx);
/**
* wlan_cm_roam_activate_pcl_per_vdev - Set the PCL command to be sent per
* wlan_cm_roam_activate_pcl_per_vdev() - Set the PCL command to be sent per
* vdev instead of pdev.
* @psoc: PSOC pointer
* @vdev_id: VDEV id
@@ -232,8 +242,8 @@ void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
bool pcl_per_vdev);
/**
* wlan_cm_roam_is_pcl_per_vdev_active - API to know if the pcl command needs to be
* sent per vdev or not
* wlan_cm_roam_is_pcl_per_vdev_active() - API to know if the pcl command needs
* to be sent per vdev or not
* @psoc: PSOC pointer
* @vdev_id: VDEV id
*
@@ -243,7 +253,7 @@ bool wlan_cm_roam_is_pcl_per_vdev_active(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* wlan_cm_dual_sta_is_freq_allowed - This API is used to check if the
* wlan_cm_dual_sta_is_freq_allowed() - This API is used to check if the
* provided frequency is allowed for the 2nd STA vdev for connection.
* @psoc: Pointer to PSOC object
* @freq: Frequency in the given frequency list for the STA that is about to
@@ -260,7 +270,7 @@ wlan_cm_dual_sta_is_freq_allowed(struct wlan_objmgr_psoc *psoc, uint32_t freq,
enum QDF_OPMODE opmode);
/**
* wlan_cm_dual_sta_roam_update_connect_channels - Fill the allowed channels
* wlan_cm_dual_sta_roam_update_connect_channels() - Fill the allowed channels
* for connection of the 2nd STA based on the 1st STA connected band if dual
* sta roaming is enabled.
* @psoc: Pointer to PSOC object
@@ -272,7 +282,7 @@ void
wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc,
struct scan_filter *filter);
/**
* wlan_cm_roam_set_vendor_btm_params - API to set vendor btm params
* wlan_cm_roam_set_vendor_btm_params() - API to set vendor btm params
* @psoc: PSOC pointer
* @vdev_id: VDEV id
* @param: vendor configured roam trigger param
@@ -285,7 +295,7 @@ wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
struct wlan_cm_roam_vendor_btm_params
*param);
/**
* wlan_cm_roam_disable_vendor_btm - API to disable vendor btm by default
* wlan_cm_roam_disable_vendor_btm() - API to disable vendor btm by default
* reason
* @psoc: PSOC pointer
* @vdev_id: VDEV id
@@ -296,7 +306,7 @@ void
wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
/**
* wlan_cm_roam_get_vendor_btm_params - API to get vendor btm param
* wlan_cm_roam_get_vendor_btm_params() - API to get vendor btm param
* @psoc: PSOC pointer
* @vdev_id: VDEV id
* @param: vendor configured roam trigger param

View File

@@ -418,6 +418,149 @@ struct wlan_roam_scan_filter_params {
struct roam_scan_filter_params filter_params;
};
/**
* struct wlan_roam_btm_config - BSS Transition Management offload params
* @vdev_id: VDEV on which the parameters should be applied
* @btm_offload_config: BTM config
* @btm_solicited_timeout: Timeout value for waiting BTM request
* @btm_max_attempt_cnt: Maximum attempt for sending BTM query to ESS
* @btm_sticky_time: Stick time after roaming to new AP by BTM
* @disassoc_timer_threshold: threshold value till which the firmware can
* wait before triggering the roam scan after receiving the disassoc iminent
* @btm_query_bitmask: bitmask to btm query with candidate list
* @btm_candidate_min_score: Minimum score of the AP to consider it as a
* candidate if the roam trigger is BTM kickout.
*/
struct wlan_roam_btm_config {
uint8_t vdev_id;
uint32_t btm_offload_config;
uint32_t btm_solicited_timeout;
uint32_t btm_max_attempt_cnt;
uint32_t btm_sticky_time;
uint32_t disassoc_timer_threshold;
uint32_t btm_query_bitmask;
uint32_t btm_candidate_min_score;
};
/**
* struct wlan_roam_neighbor_report_params -neighbour report params
* @time_offset: time offset after 11k offload command to trigger a neighbor
* report request (in seconds)
* @low_rssi_offset: Offset from rssi threshold to trigger a neighbor
* report request (in dBm)
* @bmiss_count_trigger: Number of beacon miss events to trigger neighbor
* report request
* @per_threshold_offset: offset from PER threshold to trigger neighbor
* report request (in %)
* @neighbor_report_cache_timeout: timeout after which new trigger can enable
* sending of a neighbor report request (in seconds)
* @max_neighbor_report_req_cap: max number of neighbor report requests that
* can be sent to the peer in the current session
* @ssid: Current connect SSID info
*/
struct wlan_roam_neighbor_report_params {
uint32_t time_offset;
uint32_t low_rssi_offset;
uint32_t bmiss_count_trigger;
uint32_t per_threshold_offset;
uint32_t neighbor_report_cache_timeout;
uint32_t max_neighbor_report_req_cap;
struct wlan_ssid ssid;
};
/**
* struct wlan_roam_11k_offload_params - offload 11k features to FW
* @vdev_id: vdev id
* @offload_11k_bitmask: bitmask to specify offloaded features
* B0: Neighbor Report Request offload
* B1-B31: Reserved
* @neighbor_report_params: neighbor report offload params
*/
struct wlan_roam_11k_offload_params {
uint32_t vdev_id;
uint32_t offload_11k_bitmask;
struct wlan_roam_neighbor_report_params neighbor_report_params;
};
/**
* struct wlan_roam_disconnect_params - Emergency deauth/disconnect roam params
* @vdev_id: VDEV on which the parameters should be applied
* @enable: Enable or disable disconnect roaming.
*/
struct wlan_roam_disconnect_params {
uint32_t vdev_id;
bool enable;
};
/**
* struct wlan_roam_idle_params - Idle roam trigger parameters
* @vdev_id: VDEV on which the parameters should be applied
* @enable: Enable/Disable Idle roaming
* @band: Connected AP band
* @conn_ap_rssi_delta: Rssi change of connected AP in dBm
* @conn_ap_min_rssi: If connected AP rssi is less than min rssi trigger roam
* @inactive_time: Connected AP idle time
* @data_pkt_count: Data packet count allowed during idle time
*/
struct wlan_roam_idle_params {
uint32_t vdev_id;
bool enable;
uint32_t band;
uint32_t conn_ap_rssi_delta;
int32_t conn_ap_min_rssi;
uint32_t inactive_time;
uint32_t data_pkt_count;
};
/**
* struct wlan_per_roam_config - per based roaming parameters
* @enable: if PER based roaming is enabled/disabled
* @tx_high_rate_thresh: high rate threshold at which PER based
* roam will stop in tx path
* @rx_high_rate_thresh: high rate threshold at which PER based
* roam will stop in rx path
* @tx_low_rate_thresh: rate below which traffic will be considered
* for PER based roaming in Tx path
* @rx_low_rate_thresh: rate below which traffic will be considered
* for PER based roaming in Tx path
* @tx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
* will be considered for PER based scan in tx path
* @rx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
* will be considered for PER based scan in rx path
* @per_rest_time: time for which PER based roam will wait once it
* issues a roam scan.
* @tx_per_mon_time: Minimum time required to be considered as valid scenario
* for PER based roam in tx path
* @rx_per_mon_time: Minimum time required to be considered as valid scenario
* for PER based roam in rx path
* @min_candidate_rssi: Minimum RSSI threshold for candidate AP to be used for
* PER based roaming
*/
struct wlan_per_roam_config {
uint32_t enable;
uint32_t tx_high_rate_thresh;
uint32_t rx_high_rate_thresh;
uint32_t tx_low_rate_thresh;
uint32_t rx_low_rate_thresh;
uint32_t tx_rate_thresh_percnt;
uint32_t rx_rate_thresh_percnt;
uint32_t per_rest_time;
uint32_t tx_per_mon_time;
uint32_t rx_per_mon_time;
uint32_t min_candidate_rssi;
};
/**
* struct wlan_per_roam_config_req: PER based roaming config request
* @vdev_id: vdev id on which config needs to be set
* @per_config: PER config
*/
struct wlan_per_roam_config_req {
uint8_t vdev_id;
struct wlan_per_roam_config per_config;
};
#ifdef ROAM_OFFLOAD_V1
#define NOISE_FLOOR_DBM_DEFAULT (-96)
#define RSSI_MIN_VALUE (-128)
@@ -543,6 +686,10 @@ struct wlan_roam_scan_period_params {
* @scan_period_params: roam scan period parameters
* @profile_params: ap profile parameters
* @scan_filter_params: roam scan filter parameters
* @btm_config: btm configuration
* @roam_11k_params: 11k params
* @disconnect_params: disconnect params
* @idle_params: idle params
*/
struct wlan_roam_start_config {
struct wlan_roam_offload_scan_rssi_params rssi_params;
@@ -552,9 +699,53 @@ struct wlan_roam_start_config {
struct wlan_roam_scan_period_params scan_period_params;
struct ap_profile_params profile_params;
struct wlan_roam_scan_filter_params scan_filter_params;
struct wlan_roam_btm_config btm_config;
struct wlan_roam_11k_offload_params roam_11k_params;
struct wlan_roam_disconnect_params disconnect_params;
struct wlan_roam_idle_params idle_params;
/* other wmi cmd structures */
};
/**
* struct wlan_roam_stop_config - structure containing parameters for
* roam stop
* @roam_11k_params: 11k params
* @btm_config: btm configuration
* @scan_filter_params: roam scan filter parameters
* @disconnect_params: disconnect params
* @idle_params: idle params
* @roam_triggers: roam triggers parameters
* @rssi_params: roam scan rssi threshold parameters
*/
struct wlan_roam_stop_config {
struct wlan_roam_11k_offload_params roam_11k_params;
struct wlan_roam_btm_config btm_config;
struct wlan_roam_scan_filter_params scan_filter_params;
struct wlan_roam_disconnect_params disconnect_params;
struct wlan_roam_idle_params idle_params;
struct wlan_roam_triggers roam_triggers;
struct wlan_roam_offload_scan_rssi_params rssi_params;
};
/**
* struct wlan_roam_update_config - structure containing parameters for
* roam update config
* @beacon_miss_cnt: roam beacon miss count parameters
* @scan_filter_params: roam scan filter parameters
* @scan_period_params: roam scan period parameters
* @rssi_params: roam scan rssi threshold parameters
* @disconnect_params: disconnect params
* @idle_params: idle params
*/
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_offload_scan_rssi_params rssi_params;
struct wlan_roam_disconnect_params disconnect_params;
struct wlan_roam_idle_params idle_params;
};
#endif
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
@@ -658,6 +849,7 @@ struct set_pcl_req {
* module initialize request
* @send_roam_start_req: TX ops function pointer to send roam start related
* commands
* @send_roam_abort: send roam abort
*/
struct wlan_cm_roam_tx_ops {
QDF_STATUS (*send_vdev_set_pcl_cmd) (struct wlan_objmgr_vdev *vdev,
@@ -669,6 +861,14 @@ struct wlan_cm_roam_tx_ops {
QDF_STATUS (*send_roam_start_req)(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_start_config *req);
QDF_STATUS (*send_roam_stop_offload)(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_stop_config *req);
QDF_STATUS (*send_roam_update_config)(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_update_config *req);
QDF_STATUS (*send_roam_abort)(struct wlan_objmgr_vdev *vdev,
uint8_t vdev_id);
QDF_STATUS (*send_roam_per_config)(struct wlan_objmgr_vdev *vdev,
struct wlan_per_roam_config_req *req);
#endif
};

View File

@@ -28,7 +28,7 @@
#ifdef ROAM_OFFLOAD_V1
/**
* ucfg_user_space_enable_disable_rso - Enable/Disable Roam Scan offload
* ucfg_user_space_enable_disable_rso() - Enable/Disable Roam Scan offload
* to firmware.
* @pdev: Pointer to pdev
* @vdev_id: vdev id
@@ -55,7 +55,7 @@ QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id);
/**
* ucfg_cm_rso_init_deinit - Init or Deinit roaming module at firmware
* ucfg_cm_rso_init_deinit() - Init or Deinit roaming module at firmware
* @pdev: Pointer to pdev
* @vdev_id: vdev id
* @enable: true: Send RSO init and RSO enable
@@ -71,7 +71,7 @@ ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
}
/**
* ucfg_cm_disable_rso - Disable roam scan offload to firmware
* ucfg_cm_disable_rso() - Disable roam scan offload to firmware
* @pdev: Pointer to pdev
* @vdev_id: vdev id
* @requestor: RSO disable requestor
@@ -88,7 +88,7 @@ QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
}
/**
* ucfg_cm_enable_rso - Enable roam scan offload to firmware
* ucfg_cm_enable_rso() - Enable roam scan offload to firmware
* @pdev: Pointer to pdev
* @vdev_id: vdev id
* @requestor: RSO disable requestor

View File

@@ -30,7 +30,7 @@
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
/**
* wlan_cm_roam_send_set_vdev_pcl - Send vdev set pcl command to firmware
* wlan_cm_roam_send_set_vdev_pcl() - Send vdev set pcl command to firmware
* @psoc: PSOC pointer
* @pcl_req: Set pcl request structure pointer
*
@@ -51,8 +51,8 @@ wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc,
#ifdef ROAM_OFFLOAD_V1
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
/**
* wlan_cm_tgt_send_roam_offload_init - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD to
* init/deinit roaming module at firmware
* wlan_cm_tgt_send_roam_offload_init() - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD
* to init/deinit roaming module at firmware
* @psoc: PSOC pointer
* @vdev_id: vdev id
* @is_init: true if roam module is to be initialized else false for deinit
@@ -63,7 +63,7 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, bool is_init);
/**
* wlan_cm_tgt_send_roam_start_req - Send roam start command to firmware
* wlan_cm_tgt_send_roam_start_req() - Send roam start command to firmware
* @psoc: psoc pointer
* @vdev_id: vdev id
* @req: roam start config parameter
@@ -73,6 +73,52 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_start_config *req);
/**
* wlan_cm_tgt_send_roam_stop_req() - Send roam stop command to firmware
* @psoc: psoc pointer
* @vdev_id: vdev id
* @req: roam stop config parameter
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_cm_tgt_send_roam_stop_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_stop_config *req);
/**
* wlan_cm_tgt_send_roam_start_req() - Send roam update command to firmware
* @psoc: psoc pointer
* @vdev_id: vdev id
* @req: roam update config parameter
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_update_config *req);
/**
* wlan_cm_tgt_send_roam_abort_req() - Send roam abort command to firmware
* @psoc: psoc pointer
* @vdev_id: vdev id
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_cm_tgt_send_roam_abort_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* wlan_cm_tgt_send_roam_per_config() - Send roam per config command to FW
* @psoc: psoc pointer
* @vdev_id: vdev id
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_cm_tgt_send_roam_per_config(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_per_roam_config_req *req);
#endif
#endif
#endif /* CM_TGT_IF_TX_API_H__ */

View File

@@ -92,7 +92,7 @@ QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev,
if (QDF_IS_STATUS_ERROR(status))
return status;
status = cm_roam_state_change(pdev, vdev_id,
status = cm_roam_send_rso_cmd(psoc, vdev_id,
ROAM_SCAN_OFFLOAD_ABORT_SCAN,
REASON_ROAM_ABORT_ROAM_SCAN);
cm_roam_release_lock();

View File

@@ -169,6 +169,8 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
init_msg.roam_offload_flag |=
WLAN_ROAM_BMISS_FINAL_SCAN_TYPE;
}
mlme_debug("vdev_id:%d, is_init:%d, flag:%d", vdev_id, is_init,
init_msg.roam_offload_flag);
status = roam_tx_ops.send_roam_offload_init_req(vdev, &init_msg);
if (QDF_IS_STATUS_ERROR(status))
@@ -194,17 +196,138 @@ QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc,
roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
if (!roam_tx_ops.send_roam_start_req) {
mlme_err("CM_RSO: vdev%d send_roam_start_req is NULL", vdev_id);
mlme_err("CM_RSO: vdev %d send_roam_start_req 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_start_req(vdev, req);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("CM_RSO: vdev%d fail to send roam start", vdev_id);
mlme_debug("CM_RSO: vdev %d fail to send roam start", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return status;
}
QDF_STATUS wlan_cm_tgt_send_roam_stop_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_stop_config *req)
{
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 = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
if (!roam_tx_ops.send_roam_stop_offload) {
mlme_err("CM_RSO: vdev %d send_roam_stop_offload 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_stop_offload(vdev, req);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("CM_RSO: vdev %d fail to send roam stop", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return status;
}
QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_update_config *req)
{
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 = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
if (!roam_tx_ops.send_roam_update_config) {
mlme_err("CM_RSO: vdev %d send_roam_update_config 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_update_config(vdev, req);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("CM_RSO: vdev %d fail to send roam update", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return status;
}
QDF_STATUS wlan_cm_tgt_send_roam_abort_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
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 = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
if (!roam_tx_ops.send_roam_abort) {
mlme_err("CM_RSO: vdev %d send_roam_abort 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_abort(vdev, vdev_id);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("CM_RSO: vdev %d fail to send roam abort", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return status;
}
QDF_STATUS wlan_cm_tgt_send_roam_per_config(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_per_roam_config_req *req)
{
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 = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
if (!roam_tx_ops.send_roam_per_config) {
mlme_err("CM_RSO: vdev %d send_roam_per_config 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_per_config(vdev, req);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("CM_RSO: vdev %d fail to send per config", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return status;
}
#endif
#endif

View File

@@ -225,24 +225,24 @@ QDF_STATUS wmi_unified_set_roam_triggers(wmi_unified_t wmi_handle,
* wmi_unified_send_disconnect_roam_params() - Send disconnect roam trigger
* parameters to firmware
* @wmi_hdl: wmi handle
* @params: pointer to wmi_disconnect_roam_params
* @params: pointer to wlan_roam_disconnect_params
*
* Return: QDF_STATUS
*/
QDF_STATUS
wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
struct wmi_disconnect_roam_params *req);
struct wlan_roam_disconnect_params *req);
/**
* wmi_unified_send_idle_roam_params() - Send idle roam trigger params to fw
* @wmi_hdl: wmi handle
* @params: pointer to wmi_idle_roam_params
* @params: pointer to wlan_roam_idle_params
*
* Return: QDF_STATUS
*/
QDF_STATUS
wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle,
struct wmi_idle_roam_params *req);
struct wlan_roam_idle_params *req);
/**
* wmi_unified_send_roam_preauth_status() - Send roam preauthentication status
@@ -359,7 +359,7 @@ wmi_unified_roam_scan_offload_rssi_change_cmd(wmi_unified_t wmi_handle,
*/
QDF_STATUS
wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle,
struct wmi_per_roam_config_req *req_buf);
struct wlan_per_roam_config_req *req_buf);
/**
* wmi_unified_send_limit_off_chan_cmd() - send wmi cmd of limit off channel
@@ -388,12 +388,12 @@ QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle,
/**
* wmi_unified_send_btm_config() - Send BTM config to fw
* @wmi_handle: wmi handle
* @params: pointer to wmi_btm_config
* @params: pointer to wlan_roam_btm_config
*
* Return: QDF_STATUS
*/
QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle,
struct wmi_btm_config *params);
struct wlan_roam_btm_config *params);
/**
* wmi_unified_send_bss_load_config() - Send bss load trigger params to fw
@@ -414,8 +414,9 @@ QDF_STATUS wmi_unified_send_bss_load_config(wmi_unified_t wmi_handle,
*
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
*/
QDF_STATUS wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
struct wmi_11k_offload_params *params);
QDF_STATUS
wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
struct wlan_roam_11k_offload_params *params);
/**
* wmi_unified_invoke_neighbor_report_cmd() - send invoke neighbor report cmd
* @wmi_handle: wmi handle

View File

@@ -234,54 +234,6 @@ struct wmi_roam_invoke_cmd {
bool forced_roaming;
};
/**
* struct wmi_per_roam_config - per based roaming parameters
* @enable: if PER based roaming is enabled/disabled
* @tx_high_rate_thresh: high rate threshold at which PER based
* roam will stop in tx path
* @rx_high_rate_thresh: high rate threshold at which PER based
* roam will stop in rx path
* @tx_low_rate_thresh: rate below which traffic will be considered
* for PER based roaming in Tx path
* @rx_low_rate_thresh: rate below which traffic will be considered
* for PER based roaming in Tx path
* @tx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
* will be considered for PER based scan in tx path
* @rx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
* will be considered for PER based scan in rx path
* @per_rest_time: time for which PER based roam will wait once it
* issues a roam scan.
* @tx_per_mon_time: Minimum time required to be considered as valid scenario
* for PER based roam in tx path
* @rx_per_mon_time: Minimum time required to be considered as valid scenario
* for PER based roam in rx path
* @min_candidate_rssi: Minimum RSSI threshold for candidate AP to be used for
* PER based roaming
*/
struct wmi_per_roam_config {
uint32_t enable;
uint32_t tx_high_rate_thresh;
uint32_t rx_high_rate_thresh;
uint32_t tx_low_rate_thresh;
uint32_t rx_low_rate_thresh;
uint32_t tx_rate_thresh_percnt;
uint32_t rx_rate_thresh_percnt;
uint32_t per_rest_time;
uint32_t tx_per_mon_time;
uint32_t rx_per_mon_time;
uint32_t min_candidate_rssi;
};
/**
* struct wmi_per_roam_config_req: PER based roaming config request
* @vdev_id: vdev id on which config needs to be set
* @per_config: PER config
*/
struct wmi_per_roam_config_req {
uint8_t vdev_id;
struct wmi_per_roam_config per_config;
};
/**
* struct wmi_limit_off_chan_param - limit off channel parameters
* @vdev_id: vdev id
@@ -311,30 +263,6 @@ struct hlp_params {
uint8_t hlp_ie[WMI_MAX_HLP_IE_LEN];
};
/**
* struct wmi_btm_config - BSS Transition Management offload params
* @vdev_id: VDEV on which the parameters should be applied
* @btm_offload_config: BTM config
* @btm_solicited_timeout: Timeout value for waiting BTM request
* @btm_max_attempt_cnt: Maximum attempt for sending BTM query to ESS
* @btm_sticky_time: Stick time after roaming to new AP by BTM
* @disassoc_timer_threshold: threshold value till which the firmware can
* wait before triggering the roam scan after receiving the disassoc iminent
* @btm_query_bitmask: bitmask to btm query with candidate list
* @btm_candidate_min_score: Minimum score of the AP to consider it as a
* candidate if the roam trigger is BTM kickout.
*/
struct wmi_btm_config {
uint8_t vdev_id;
uint32_t btm_offload_config;
uint32_t btm_solicited_timeout;
uint32_t btm_max_attempt_cnt;
uint32_t btm_sticky_time;
uint32_t disassoc_timer_threshold;
uint32_t btm_query_bitmask;
uint32_t btm_candidate_min_score;
};
/**
* struct wmi_bss_load_config - BSS load trigger parameters
* @vdev_id: VDEV on which the parameters should be applied
@@ -356,36 +284,6 @@ struct wmi_bss_load_config {
int32_t rssi_threshold_24ghz;
};
/**
* struct wmi_idle_roam_params - Idle roam trigger parameters
* @vdev_id: VDEV on which the parameters should be applied
* @enable: Enable/Disable Idle roaming
* @band: Connected AP band
* @conn_ap_rssi_delta: Rssi change of connected AP in dBm
* @conn_ap_min_rssi: If connected AP rssi is less than min rssi trigger roam
* @inactive_time: Connected AP idle time
* @data_pkt_count: Data packet count allowed during idle time
*/
struct wmi_idle_roam_params {
uint32_t vdev_id;
bool enable;
uint32_t band;
uint32_t conn_ap_rssi_delta;
int32_t conn_ap_min_rssi;
uint32_t inactive_time;
uint32_t data_pkt_count;
};
/**
* struct wmi_disconnect_roam_params - Emergency deauth/disconnect roam params
* @vdev_id: VDEV on which the parameters should be applied
* @enable: Enable or disable disconnect roaming.
*/
struct wmi_disconnect_roam_params {
uint32_t vdev_id;
bool enable;
};
/**
* struct wmi_roam_auth_status_params - WPA3 roam auth response status
* parameters
@@ -404,45 +302,6 @@ struct wmi_roam_auth_status_params {
uint8_t pmkid[PMKID_LEN];
};
/**
* @time_offset: time offset after 11k offload command to trigger a neighbor
* report request (in seconds)
* @low_rssi_offset: Offset from rssi threshold to trigger a neighbor
* report request (in dBm)
* @bmiss_count_trigger: Number of beacon miss events to trigger neighbor
* report request
* @per_threshold_offset: offset from PER threshold to trigger neighbor
* report request (in %)
* @neighbor_report_cache_timeout: timeout after which new trigger can enable
* sending of a neighbor report request (in seconds)
* @max_neighbor_report_req_cap: max number of neighbor report requests that
* can be sent to the peer in the current session
* @ssid: Current connect SSID info
*/
struct wmi_11k_offload_neighbor_report_params {
uint32_t time_offset;
uint32_t low_rssi_offset;
uint32_t bmiss_count_trigger;
uint32_t per_threshold_offset;
uint32_t neighbor_report_cache_timeout;
uint32_t max_neighbor_report_req_cap;
struct wlan_ssid ssid;
};
/**
* struct wmi_11k_offload_params - offload 11k features to FW
* @vdev_id: vdev id
* @offload_11k_bitmask: bitmask to specify offloaded features
* B0: Neighbor Report Request offload
* B1-B31: Reserved
* @neighbor_report_params: neighbor report offload params
*/
struct wmi_11k_offload_params {
uint32_t vdev_id;
uint32_t offload_11k_bitmask;
struct wmi_11k_offload_neighbor_report_params neighbor_report_params;
};
/**
* struct wmi_invoke_neighbor_report_params - Invoke neighbor report request
* from IW to FW

View File

@@ -170,7 +170,7 @@ QDF_STATUS wmi_unified_roam_invoke_cmd(wmi_unified_t wmi_handle,
QDF_STATUS
wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
struct wmi_disconnect_roam_params *req)
struct wlan_roam_disconnect_params *req)
{
if (wmi_handle->ops->send_disconnect_roam_params)
return wmi_handle->ops->send_disconnect_roam_params(wmi_handle,
@@ -180,7 +180,7 @@ wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
QDF_STATUS
wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle,
struct wmi_idle_roam_params *req)
struct wlan_roam_idle_params *req)
{
if (wmi_handle->ops->send_idle_roam_params)
return wmi_handle->ops->send_idle_roam_params(wmi_handle,
@@ -276,7 +276,7 @@ wmi_unified_roam_scan_offload_rssi_change_cmd(wmi_unified_t wmi_handle,
QDF_STATUS
wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle,
struct wmi_per_roam_config_req *req_buf)
struct wlan_per_roam_config_req *req_buf)
{
if (wmi_handle->ops->send_per_roam_config_cmd)
return wmi_handle->ops->send_per_roam_config_cmd(wmi_handle,
@@ -309,7 +309,7 @@ QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle,
#endif /* WLAN_FEATURE_FILS_SK */
QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle,
struct wmi_btm_config *params)
struct wlan_roam_btm_config *params)
{
if (wmi_handle->ops->send_btm_config)
return wmi_handle->ops->send_btm_config(wmi_handle,
@@ -328,9 +328,9 @@ QDF_STATUS wmi_unified_send_bss_load_config(wmi_unified_t wmi_handle,
return QDF_STATUS_E_FAILURE;
}
QDF_STATUS wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
struct wmi_11k_offload_params *params)
QDF_STATUS
wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
struct wlan_roam_11k_offload_params *params)
{
if (wmi_handle->ops->send_offload_11k_cmd)
return wmi_handle->ops->send_offload_11k_cmd(wmi_handle,

View File

@@ -2613,7 +2613,7 @@ error:
*/
static QDF_STATUS
send_per_roam_config_cmd_tlv(wmi_unified_t wmi_handle,
struct wmi_per_roam_config_req *req_buf)
struct wlan_per_roam_config_req *req_buf)
{
wmi_buf_t buf = NULL;
QDF_STATUS status;
@@ -2785,12 +2785,12 @@ void wmi_fils_sk_attach_tlv(wmi_unified_t wmi_handle)
/*
* send_btm_config_cmd_tlv() - Send wmi cmd for BTM config
* @wmi_handle: wmi handle
* @params: pointer to wmi_btm_config
* @params: pointer to wlan_roam_btm_config
*
* Return: QDF_STATUS
*/
static QDF_STATUS send_btm_config_cmd_tlv(wmi_unified_t wmi_handle,
struct wmi_btm_config *params)
struct wlan_roam_btm_config *params)
{
wmi_btm_config_fixed_param *cmd;
wmi_buf_t buf;
@@ -2883,7 +2883,7 @@ send_roam_bss_load_config_tlv(wmi_unified_t wmi_handle,
/**
* send_disconnect_roam_params_tlv() - send disconnect roam trigger parameters
* @wmi_handle: wmi handle
* @disconnect_roam: pointer to wmi_disconnect_roam_params which carries the
* @disconnect_roam: pointer to wlan_roam_disconnect_params which carries the
* disconnect_roam_trigger parameters from CSR
*
* This function sends the disconnect roam trigger parameters to fw.
@@ -2892,7 +2892,7 @@ send_roam_bss_load_config_tlv(wmi_unified_t wmi_handle,
*/
static QDF_STATUS
send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
struct wmi_disconnect_roam_params *req)
struct wlan_roam_disconnect_params *req)
{
wmi_roam_deauth_config_cmd_fixed_param *cmd;
wmi_buf_t buf;
@@ -2929,7 +2929,7 @@ send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
/**
* send_idle_roam_params_tlv() - send idle roam trigger parameters
* @wmi_handle: wmi handle
* @idle_roam_params: pointer to wmi_idle_roam_params which carries the
* @idle_roam_params: pointer to wlan_roam_idle_params which carries the
* idle roam parameters from CSR
*
* This function sends the idle roam trigger parameters to fw.
@@ -2938,7 +2938,7 @@ send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
*/
static QDF_STATUS
send_idle_roam_params_tlv(wmi_unified_t wmi_handle,
struct wmi_idle_roam_params *idle_roam_params)
struct wlan_roam_idle_params *idle_roam_params)
{
wmi_roam_idle_config_cmd_fixed_param *cmd;
wmi_buf_t buf;
@@ -3036,14 +3036,14 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle,
#else
static inline QDF_STATUS
send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
struct wmi_disconnect_roam_params *req)
struct wlan_roam_disconnect_params *req)
{
return QDF_STATUS_E_FAILURE;
}
static inline QDF_STATUS
send_idle_roam_params_tlv(wmi_unified_t wmi_handle,
struct wmi_idle_roam_params *idle_roam_params)
struct wlan_roam_idle_params *idle_roam_params)
{
return QDF_STATUS_E_FAILURE;
}
@@ -3065,7 +3065,7 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle,
*/
static QDF_STATUS
send_offload_11k_cmd_tlv(wmi_unified_t wmi_handle,
struct wmi_11k_offload_params *params)
struct wlan_roam_11k_offload_params *params)
{
wmi_11k_offload_report_fixed_param *cmd;
wmi_buf_t buf;

View File

@@ -2211,8 +2211,8 @@ struct roam_offload_scan_req {
bool is_sae_single_pmk;
bool enable_ft_im_roaming;
/* Idle/Disconnect roam parameters */
struct wmi_idle_roam_params idle_roam_params;
struct wmi_disconnect_roam_params disconnect_roam_params;
struct wlan_roam_idle_params idle_roam_params;
struct wlan_roam_disconnect_params disconnect_roam_params;
#endif
struct roam_ext_params roam_params;
struct wlan_roam_triggers roam_triggers;
@@ -2239,7 +2239,7 @@ struct roam_offload_scan_req {
uint32_t rct_validity_timer;
uint32_t disassoc_timer_threshold;
uint32_t btm_trig_min_candidate_score;
struct wmi_11k_offload_params offload_11k_params;
struct wlan_roam_11k_offload_params offload_11k_params;
uint32_t ho_delay_for_rx;
uint32_t roam_preauth_retry_count;
uint32_t roam_preauth_no_ack_timeout;

View File

@@ -237,8 +237,10 @@ enum eWniMsgTypes {
eWNI_SME_ANTENNA_ISOLATION_RSP = SIR_SME_MSG_TYPES_BEGIN + 155,
eWNI_SME_MON_DEINIT_SESSION = SIR_SME_MSG_TYPES_BEGIN + 156,
eWNI_SME_VDEV_DELETE_RSP = SIR_SME_MSG_TYPES_BEGIN + 157,
#ifndef ROAM_OFFLOAD_V1
eWNI_SME_ROAM_INIT_PARAM = SIR_SME_MSG_TYPES_BEGIN + 158,
eWNI_SME_ROAM_SEND_PER_REQ = SIR_SME_MSG_TYPES_BEGIN + 159,
#endif
eWNI_SME_GET_ROAM_SCAN_CH_LIST_EVENT =
SIR_SME_MSG_TYPES_BEGIN + 160,
eWNI_SME_MONITOR_MODE_VDEV_UP = SIR_SME_MSG_TYPES_BEGIN + 161,

View File

@@ -576,7 +576,9 @@ struct sir_cfg_action_frm_tb_ppdu {
/* (SIR_HAL_ITC_MSG_TYPES_BEGIN + 370) is unused */
#ifndef ROAM_OFFLOAD_V1
#define SIR_HAL_SET_PER_ROAM_CONFIG_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 371)
#endif
#define SIR_HAL_RX_CHN_STATUS_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 372)
#define SIR_HAL_GET_RCPI_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 373)
@@ -588,7 +590,10 @@ struct sir_cfg_action_frm_tb_ppdu {
#define SIR_HAL_HIDDEN_SSID_RESTART_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 379)
#ifndef ROAM_OFFLOAD_V1
#define SIR_HAL_INIT_ROAM_OFFLOAD_PARAM (SIR_HAL_ITC_MSG_TYPES_BEGIN + 380)
#endif
/*
* Unused SIR_HAL_ITC_MSG_TYPES_BEGIN + 381 to

View File

@@ -1761,9 +1761,11 @@ static void lim_process_messages(struct mac_context *mac_ctx,
case eWNI_SME_ROAM_INVOKE:
/* fall through */
case eWNI_SME_ROAM_SCAN_OFFLOAD_REQ:
case eWNI_SME_ROAM_INIT_PARAM:
case eWNI_SME_ROAM_SEND_SET_PCL_REQ:
#ifndef ROAM_OFFLOAD_V1
case eWNI_SME_ROAM_INIT_PARAM:
case eWNI_SME_ROAM_SEND_PER_REQ:
#endif
case eWNI_SME_SET_ADDBA_ACCEPT:
case eWNI_SME_UPDATE_EDCA_PROFILE:
case WNI_SME_UPDATE_MU_EDCA_PARAMS:

View File

@@ -3489,6 +3489,7 @@ static void __lim_process_roam_scan_offload_req(struct mac_context *mac_ctx,
}
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
#ifndef ROAM_OFFLOAD_V1
/**
* lim_send_roam_offload_init() - Process Roam offload flag from csr
* @mac_ctx: Pointer to Global MAC structure
@@ -3534,7 +3535,7 @@ static void lim_send_roam_per_command(struct mac_context *mac_ctx,
qdf_mem_free(msg_buf);
}
}
#endif
/**
* lim_send_roam_set_pcl() - Process Roam offload flag from csr
* @mac_ctx: Pointer to Global MAC structure
@@ -3558,6 +3559,8 @@ static void lim_send_roam_set_pcl(struct mac_context *mac_ctx,
}
}
#else
#ifndef ROAM_OFFLOAD_V1
static void lim_send_roam_offload_init(struct mac_context *mac_ctx,
uint32_t *msg_buf)
{
@@ -3569,7 +3572,7 @@ static void lim_send_roam_per_command(struct mac_context *mac_ctx,
{
qdf_mem_free(msg_buf);
}
#endif
static inline void lim_send_roam_set_pcl(struct mac_context *mac_ctx,
struct set_pcl_req *msg_buf)
{
@@ -4644,18 +4647,20 @@ bool lim_process_sme_req_messages(struct mac_context *mac,
__lim_process_roam_scan_offload_req(mac, msg_buf);
bufConsumed = false;
break;
case eWNI_SME_ROAM_INIT_PARAM:
lim_send_roam_offload_init(mac, msg_buf);
bufConsumed = false;
break;
case eWNI_SME_ROAM_SEND_SET_PCL_REQ:
lim_send_roam_set_pcl(mac, (struct set_pcl_req *)msg_buf);
bufConsumed = false;
break;
#ifndef ROAM_OFFLOAD_V1
case eWNI_SME_ROAM_INIT_PARAM:
lim_send_roam_offload_init(mac, msg_buf);
bufConsumed = false;
break;
case eWNI_SME_ROAM_SEND_PER_REQ:
lim_send_roam_per_command(mac, msg_buf);
bufConsumed = false;
break;
#endif
case eWNI_SME_ROAM_INVOKE:
lim_process_roam_invoke(mac, msg_buf);
bufConsumed = false;

View File

@@ -350,7 +350,9 @@ uint8_t *mac_trace_get_sme_msg_string(uint16_t sme_msg)
CASE_RETURN_STRING(eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE);
CASE_RETURN_STRING(eWNI_SME_DEFAULT_SCAN_IE);
CASE_RETURN_STRING(eWNI_SME_ROAM_SCAN_OFFLOAD_REQ);
#ifndef ROAM_OFFLOAD_V1
CASE_RETURN_STRING(eWNI_SME_ROAM_INIT_PARAM);
#endif
CASE_RETURN_STRING(eWNI_SME_LOST_LINK_INFO_IND);
CASE_RETURN_STRING(eWNI_SME_GET_PEER_INFO_EXT_IND);
CASE_RETURN_STRING(eWNI_SME_RSO_CMD_STATUS_IND);
@@ -600,7 +602,9 @@ uint8_t *mac_trace_get_wma_msg_string(uint16_t wma_msg)
CASE_RETURN_STRING(WMA_SET_RSSI_MONITOR_REQ);
CASE_RETURN_STRING(WMA_SET_WISA_PARAMS);
CASE_RETURN_STRING(WMA_SET_WOW_PULSE_CMD);
#ifndef ROAM_OFFLOAD_V1
CASE_RETURN_STRING(WMA_SET_PER_ROAM_CONFIG_CMD);
#endif
CASE_RETURN_STRING(WMA_GET_RCPI_REQ);
CASE_RETURN_STRING(WMA_SET_DBS_SCAN_SEL_CONF_PARAMS);
CASE_RETURN_STRING(WMA_GET_ROAM_SCAN_STATS);

View File

@@ -16998,6 +16998,64 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
/**
* csr_update_btm_offload_config() - Update btm config param to fw
* @mac_ctx: Global mac ctx
* @command: Roam offload command
* @btm_offload_config: btm offload config
* @session: roam session
*
* Return: None
*/
static void csr_update_btm_offload_config(struct mac_context *mac_ctx,
uint8_t command,
uint32_t *btm_offload_config,
struct csr_roam_session *session)
{
struct wlan_objmgr_peer *peer;
bool is_pmf_enabled;
*btm_offload_config =
mac_ctx->mlme_cfg->btm.btm_offload_config;
/* Return if INI is disabled */
if (!(*btm_offload_config))
return;
/* For RSO Stop Disable BTM offload to firmware */
if (command == ROAM_SCAN_OFFLOAD_STOP) {
*btm_offload_config = 0;
return;
}
if (!session->pConnectBssDesc) {
sme_err("Connected Bss Desc is NULL");
return;
}
peer = wlan_objmgr_get_peer(mac_ctx->psoc,
wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev),
session->pConnectBssDesc->bssId,
WLAN_LEGACY_SME_ID);
if (!peer) {
sme_debug("Peer of peer_mac %pM not found",
session->pConnectBssDesc->bssId);
return;
}
is_pmf_enabled = mlme_get_peer_pmf_status(peer);
wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_SME_ID);
sme_debug("get is_pmf_enabled %d for %pM", is_pmf_enabled,
session->pConnectBssDesc->bssId);
/* If peer does not support PMF in case of OCE/MBO
* Connection, Disable BTM offload to firmware.
*/
if (session->pConnectBssDesc->mbo_oce_enabled_ap &&
!is_pmf_enabled)
*btm_offload_config = 0;
}
#ifndef ROAM_OFFLOAD_V1
/**
* csr_populate_roam_chan_list()
@@ -17334,64 +17392,6 @@ csr_rso_command_fill_rsn_caps(struct mac_context *mac_ctx, uint8_t vdev_id,
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
}
/**
* csr_update_btm_offload_config() - Update btm config param to fw
* @mac_ctx: Global mac ctx
* @command: Roam offload command
* @req_buf: roam offload scan request
* @session: roam session
*
* Return: None
*/
static void csr_update_btm_offload_config(struct mac_context *mac_ctx,
uint8_t command,
struct roam_offload_scan_req *req_buf,
struct csr_roam_session *session)
{
struct wlan_objmgr_peer *peer;
bool is_pmf_enabled;
req_buf->btm_offload_config =
mac_ctx->mlme_cfg->btm.btm_offload_config;
/* Return if INI is disabled */
if (!req_buf->btm_offload_config)
return;
/* For RSO Stop Disable BTM offload to firmware */
if (command == ROAM_SCAN_OFFLOAD_STOP) {
req_buf->btm_offload_config = 0;
return;
}
if (!session->pConnectBssDesc) {
sme_err("Connected Bss Desc is NULL");
return;
}
peer = wlan_objmgr_get_peer(mac_ctx->psoc,
wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev),
session->pConnectBssDesc->bssId,
WLAN_LEGACY_SME_ID);
if (!peer) {
sme_debug("Peer of peer_mac %pM not found",
session->pConnectBssDesc->bssId);
return;
}
is_pmf_enabled = mlme_get_peer_pmf_status(peer);
wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_SME_ID);
sme_debug("get is_pmf_enabled %d for %pM", is_pmf_enabled,
session->pConnectBssDesc->bssId);
/* If peer does not support PMF in case of OCE/MBO
* Connection, Disable BTM offload to firmware.
*/
if (session->pConnectBssDesc->mbo_oce_enabled_ap &&
!is_pmf_enabled)
req_buf->btm_offload_config = 0;
}
/**
* csr_create_roam_scan_offload_request() - init roam offload scan request
*
@@ -17664,7 +17664,8 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx,
req_buf->lca_config_params.num_disallowed_aps =
mac_ctx->mlme_cfg->lfr.lfr3_num_disallowed_aps;
csr_update_btm_offload_config(mac_ctx, command, req_buf, session);
csr_update_btm_offload_config(mac_ctx, command,
&req_buf->btm_offload_config, session);
req_buf->btm_solicited_timeout =
mac_ctx->mlme_cfg->btm.btm_solicited_timeout;
@@ -17702,7 +17703,8 @@ csr_update_11k_offload_params(struct mac_context *mac_ctx,
struct roam_offload_scan_req *req_buffer,
bool enabled)
{
struct wmi_11k_offload_params *params = &req_buffer->offload_11k_params;
struct wlan_roam_11k_offload_params *params =
&req_buffer->offload_11k_params;
struct csr_config *csr_config = &mac_ctx->roam.configParam;
struct csr_neighbor_report_offload_params *neighbor_report_offload =
&csr_config->neighbor_report_offload;
@@ -18129,13 +18131,13 @@ static void csr_update_driver_assoc_ies(struct mac_context *mac_ctx,
*
* Return: per roam config request packet buffer
*/
static struct wmi_per_roam_config_req *
static struct wlan_per_roam_config_req *
csr_create_per_roam_request(struct mac_context *mac_ctx,
uint8_t session_id)
{
struct wmi_per_roam_config_req *req_buf = NULL;
struct wlan_per_roam_config_req *req_buf = NULL;
req_buf = qdf_mem_malloc(sizeof(struct wmi_per_roam_config_req));
req_buf = qdf_mem_malloc(sizeof(struct wlan_per_roam_config_req));
if (!req_buf)
return NULL;
@@ -18188,7 +18190,7 @@ csr_create_per_roam_request(struct mac_context *mac_ctx,
static QDF_STATUS
csr_roam_offload_per_scan(struct mac_context *mac_ctx, uint8_t session_id)
{
struct wmi_per_roam_config_req *req_buf;
struct wlan_per_roam_config_req *req_buf;
struct scheduler_msg msg = {0};
QDF_STATUS status;
@@ -19258,10 +19260,8 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
}
QDF_STATUS
wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
uint8_t command,
uint8_t reason)
wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t command, uint8_t reason)
{
uint8_t *state = NULL;
struct csr_roam_session *session;
@@ -19407,7 +19407,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
}
/**
* wlan_cm_roam_scan_offload_rssi_thresh() - set roam offload scan rssi
* csr_cm_roam_scan_offload_rssi_thresh() - set roam offload scan rssi
* parameters
* @mac_ctx: global mac ctx
* @session: csr roam session
@@ -19418,8 +19418,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
* Return: None
*/
static void
wlan_cm_roam_scan_offload_rssi_thresh(
struct mac_context *mac_ctx,
csr_cm_roam_scan_offload_rssi_thresh(struct mac_context *mac_ctx,
struct csr_roam_session *session,
struct wlan_roam_offload_scan_rssi_params *params)
{
@@ -19502,7 +19501,7 @@ wlan_cm_roam_scan_offload_rssi_thresh(
}
/**
* wlan_cm_roam_scan_offload_scan_period() - set roam offload scan period
* csr_cm_roam_scan_offload_scan_period() - set roam offload scan period
* parameters
* @mac_ctx: global mac ctx
* @vdev_id: vdev id
@@ -19513,10 +19512,9 @@ wlan_cm_roam_scan_offload_rssi_thresh(
* Return: None
*/
static void
wlan_cm_roam_scan_offload_scan_period(
struct mac_context *mac_ctx,
uint8_t vdev_id,
struct wlan_roam_scan_period_params *params)
csr_cm_roam_scan_offload_scan_period(struct mac_context *mac_ctx,
uint8_t vdev_id,
struct wlan_roam_scan_period_params *params)
{
tpCsrNeighborRoamControlInfo roam_info =
&mac_ctx->roam.neighborRoamInfo[vdev_id];
@@ -19537,7 +19535,7 @@ wlan_cm_roam_scan_offload_scan_period(
}
/**
* wlan_cm_roam_scan_offload_ap_profile() - set roam ap profile parameters
* csr_cm_roam_scan_offload_ap_profile() - set roam ap profile parameters
* @mac_ctx: global mac ctx
* @session: sme session
* @params: roam ap profile related parameters
@@ -19547,9 +19545,9 @@ wlan_cm_roam_scan_offload_scan_period(
* Return: None
*/
static void
wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
struct csr_roam_session *session,
struct ap_profile_params *params)
csr_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
struct csr_roam_session *session,
struct ap_profile_params *params)
{
struct ap_profile *profile = &params->profile;
struct roam_ext_params *roam_params_src =
@@ -19599,7 +19597,7 @@ wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
}
/**
* wlan_cm_roam_scan_filter() - set roam scan filter parameters
* csr_cm_roam_scan_filter() - set roam scan filter parameters
* @mac_ctx: global mac ctx
* @vdev_id: vdev id
* @command: rso command
@@ -19613,12 +19611,9 @@ wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
* Return: None
*/
static void
wlan_cm_roam_scan_filter(
struct mac_context *mac_ctx,
uint8_t vdev_id,
uint8_t command,
uint8_t reason,
struct wlan_roam_scan_filter_params *scan_filter_params)
csr_cm_roam_scan_filter(struct mac_context *mac_ctx, uint8_t vdev_id,
uint8_t command, uint8_t reason,
struct wlan_roam_scan_filter_params *scan_filter_params)
{
int i;
uint32_t num_bssid_black_list = 0, num_ssid_white_list = 0,
@@ -19725,6 +19720,38 @@ wlan_cm_roam_scan_filter(
}
}
/**
* csr_cm_roam_scan_btm_offload() - set roam scan btm offload parameters
* @mac_ctx: global mac ctx
* @session: sme session
* @params: roam roam scan btm offload parameters
*
* This function is used to set roam scan btm offload related parameters
*
* Return: None
*/
static void
csr_cm_roam_scan_btm_offload(struct mac_context *mac_ctx,
struct csr_roam_session *session,
struct wlan_roam_btm_config *params)
{
params->vdev_id = session->vdev_id;
csr_update_btm_offload_config(mac_ctx, ROAM_SCAN_OFFLOAD_START,
&params->btm_offload_config, session);
params->btm_solicited_timeout =
mac_ctx->mlme_cfg->btm.btm_solicited_timeout;
params->btm_max_attempt_cnt =
mac_ctx->mlme_cfg->btm.btm_max_attempt_cnt;
params->btm_sticky_time =
mac_ctx->mlme_cfg->btm.btm_sticky_time;
params->disassoc_timer_threshold =
mac_ctx->mlme_cfg->btm.disassoc_timer_threshold;
params->btm_query_bitmask =
mac_ctx->mlme_cfg->btm.btm_query_bitmask;
params->btm_candidate_min_score =
mac_ctx->mlme_cfg->btm.btm_trig_min_candidate_score;
}
QDF_STATUS
wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
@@ -19748,18 +19775,20 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_FAILURE;
}
wlan_cm_roam_scan_offload_rssi_thresh(mac_ctx, session,
&req->rssi_params);
csr_cm_roam_scan_offload_rssi_thresh(mac_ctx, session,
&req->rssi_params);
wlan_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id,
csr_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id,
&req->scan_period_params);
wlan_cm_roam_scan_offload_ap_profile(mac_ctx, session,
csr_cm_roam_scan_offload_ap_profile(mac_ctx, session,
&req->profile_params);
wlan_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START,
csr_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START,
reason, &req->scan_filter_params);
csr_cm_roam_scan_btm_offload(mac_ctx, session, &req->btm_config);
/* fill other struct similar to wlan_roam_offload_scan_rssi_params */
return status;

View File

@@ -848,9 +848,6 @@ struct wma_wlm_stats_data {
* @roam_ho_wl: wake lock for roam handoff req
* @wow_nack: wow negative ack flag
* @is_wow_bus_suspended: is wow bus suspended flag
* @suitable_ap_hb_failure: better ap found
* @suitable_ap_hb_failure_rssi: RSSI when suitable_ap_hb_failure
* triggered for later usage to report RSSI at beacon miss scenario
* @IsRArateLimitEnabled: RA rate limiti s enabled or not
* @RArateLimitInterval: RA rate limit interval
* @is_lpass_enabled: Flag to indicate if LPASS feature is enabled or not
@@ -974,8 +971,6 @@ typedef struct {
qdf_wake_lock_t roam_preauth_wl;
int wow_nack;
qdf_atomic_t is_wow_bus_suspended;
bool suitable_ap_hb_failure;
uint32_t suitable_ap_hb_failure_rssi;
#ifdef WLAN_FEATURE_LPSS
bool is_lpass_enabled;
#endif

View File

@@ -817,6 +817,7 @@ int wma_wlm_stats_req(int vdev_id, uint32_t bitmask, uint32_t max_size,
int wma_wlm_stats_rsp(void *wma_ctx, uint8_t *event, uint32_t len);
#endif /* FEATURE_WLM_STATS */
#ifndef ROAM_OFFLOAD_V1
/**
* wma_update_roam_offload_flag() - update roam offload flag to fw
* @wma: wma handle
@@ -826,7 +827,7 @@ int wma_wlm_stats_rsp(void *wma_ctx, uint8_t *event, uint32_t len);
*/
void wma_update_roam_offload_flag(void *handle,
struct roam_init_params *params);
#endif
/**
* wma_self_peer_create() - create self peer in objmgr
* @vdev_mlme: vdev mlme component private object

View File

@@ -350,6 +350,7 @@ wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event,
}
#endif
#ifndef ROAM_OFFLOAD_V1
/**
* wma_update_per_roam_config() -per roam config parameter updation to FW
* @handle: wma handle
@@ -358,8 +359,8 @@ wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event,
* Return: none
*/
void wma_update_per_roam_config(WMA_HANDLE handle,
struct wmi_per_roam_config_req *req_buf);
struct wlan_per_roam_config_req *req_buf);
#endif
QDF_STATUS wma_update_channel_list(WMA_HANDLE handle,
tSirUpdateChanList *chan_list);

View File

@@ -398,7 +398,9 @@
#define WMA_SET_WOW_PULSE_CMD SIR_HAL_SET_WOW_PULSE_CMD
#ifndef ROAM_OFFLOAD_V1
#define WMA_SET_PER_ROAM_CONFIG_CMD SIR_HAL_SET_PER_ROAM_CONFIG_CMD
#endif
#define WMA_SEND_AP_VDEV_UP SIR_HAL_SEND_AP_VDEV_UP
@@ -433,7 +435,9 @@
#endif
#define WMA_SET_ROAM_TRIGGERS SIR_HAL_SET_ROAM_TRIGGERS
#ifndef ROAM_OFFLOAD_V1
#define WMA_ROAM_INIT_PARAM SIR_HAL_INIT_ROAM_OFFLOAD_PARAM
#endif
#define WMA_DATA_STALL_TRIGGER 6

View File

@@ -8656,11 +8656,13 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg)
qdf_mem_free(msg->bodyptr);
break;
#endif /* FEATURE_WLAN_EXTSCAN */
#ifndef ROAM_OFFLOAD_V1
case WMA_SET_PER_ROAM_CONFIG_CMD:
wma_update_per_roam_config(wma_handle,
(struct wmi_per_roam_config_req *)msg->bodyptr);
(struct wlan_per_roam_config_req *)msg->bodyptr);
qdf_mem_free(msg->bodyptr);
break;
#endif
case WMA_SET_SCAN_MAC_OUI_REQ:
wma_scan_probe_setoui(wma_handle, msg->bodyptr);
qdf_mem_free(msg->bodyptr);
@@ -8969,10 +8971,12 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg)
wma_set_roam_triggers(wma_handle, msg->bodyptr);
qdf_mem_free(msg->bodyptr);
break;
#ifndef ROAM_OFFLOAD_V1
case WMA_ROAM_INIT_PARAM:
wma_update_roam_offload_flag(wma_handle, msg->bodyptr);
qdf_mem_free(msg->bodyptr);
break;
#endif
case WMA_ROAM_SCAN_CH_REQ:
wma_get_roam_scan_ch(wma_handle->wmi_handle, msg->bodyval);
break;

View File

@@ -84,6 +84,7 @@
#if !defined(REMOVE_PKT_LOG)
#include <wlan_logging_sock_svc.h>
#endif
#include "wlan_cm_roam_api.h"
/**
* wma_send_bcn_buf_ll() - prepare and send beacon buffer to fw for LL
@@ -2411,6 +2412,20 @@ void wma_beacon_miss_handler(tp_wma_handle wma, uint32_t vdev_id, int32_t rssi)
wma_lost_link_info_handler(wma, vdev_id, rssi);
}
#ifdef ROAM_OFFLOAD_V1
void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi)
{
tp_wma_handle wma;
wma = cds_get_context(QDF_MODULE_ID_WMA);
if (!wma) {
wma_err("Invalid wma");
return;
}
wma_beacon_miss_handler(wma, vdev_id, rssi);
}
#endif
/**
* wma_get_status_str() - get string of tx status from firmware
* @status: tx status

View File

@@ -1633,10 +1633,10 @@ static QDF_STATUS
wma_roam_scan_btm_offload(tp_wma_handle wma_handle,
struct roam_offload_scan_req *roam_req)
{
struct wmi_btm_config *params;
struct wlan_roam_btm_config *params;
QDF_STATUS status;
params = qdf_mem_malloc(sizeof(struct wmi_btm_config));
params = qdf_mem_malloc(sizeof(struct wlan_roam_btm_config));
if (!params)
return QDF_STATUS_E_FAILURE;
@@ -1711,7 +1711,7 @@ void wma_send_roam_bss_load_config(WMA_HANDLE handle,
*/
static
QDF_STATUS wma_send_offload_11k_params(WMA_HANDLE handle,
struct wmi_11k_offload_params *params)
struct wlan_roam_11k_offload_params *params)
{
QDF_STATUS status;
tp_wma_handle wma_handle = (tp_wma_handle) handle;
@@ -1758,7 +1758,7 @@ wma_send_disconnect_roam_params(tp_wma_handle wma_handle,
struct roam_offload_scan_req *roam_req)
{
QDF_STATUS status;
struct wmi_disconnect_roam_params *params =
struct wlan_roam_disconnect_params *params =
&roam_req->disconnect_roam_params;
if (!wma_handle || !wma_handle->wmi_handle) {
@@ -1920,10 +1920,10 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
roam_req->Command, roam_req->reason, roam_req->sessionId,
roam_req->RoamScanOffloadEnabled,
roam_req->offload_11k_params.offload_11k_bitmask);
wma_handle->interfaces[roam_req->sessionId].roaming_in_progress = false;
intr = &wma_handle->interfaces[roam_req->sessionId];
intr->roaming_in_progress = false;
switch (roam_req->Command) {
case ROAM_SCAN_OFFLOAD_START:
intr = &wma_handle->interfaces[roam_req->sessionId];
intr->delay_before_vdev_stop = roam_req->delay_before_vdev_stop;
/*
* Scan/Roam threshold parameters are translated from
@@ -1935,8 +1935,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
/* First param is positive rssi value to trigger rssi based scan
* Opportunistic scan is started at 30dB > trigger rssi.
*/
wma_handle->suitable_ap_hb_failure = false;
mlme_set_roam_reason_better_ap(intr->vdev, false);
qdf_status = wma_roam_scan_offload_rssi_thresh(wma_handle,
roam_req);
if (qdf_status != QDF_STATUS_SUCCESS)
@@ -2104,8 +2103,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
break;
}
wma_handle->suitable_ap_hb_failure = false;
mlme_set_roam_reason_better_ap(intr->vdev, false);
wma_roam_scan_fill_scan_params(wma_handle, mac,
NULL, &scan_params);
@@ -2207,17 +2205,17 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
* now it is time to call it heartbeat failure.
*/
if ((roam_req->reason == REASON_PREAUTH_FAILED_FOR_ALL)
&& wma_handle->suitable_ap_hb_failure) {
&& mlme_get_roam_reason_better_ap(intr->vdev)) {
wma_err("Sending heartbeat failure after preauth failures");
wma_beacon_miss_handler(wma_handle,
roam_req->sessionId,
wma_handle->suitable_ap_hb_failure_rssi);
wma_handle->suitable_ap_hb_failure = false;
mlme_get_hb_ap_rssi(intr->vdev));
mlme_set_roam_reason_better_ap(intr->vdev, false);
}
break;
case ROAM_SCAN_OFFLOAD_UPDATE_CFG:
wma_handle->suitable_ap_hb_failure = false;
mlme_set_roam_reason_better_ap(intr->vdev, false);
qdf_status = wma_roam_scan_bmiss_cnt(wma_handle,
roam_req->RoamBmissFirstBcnt,
@@ -2307,8 +2305,9 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
return qdf_status;
}
#ifndef ROAM_OFFLOAD_V1
void wma_update_per_roam_config(WMA_HANDLE handle,
struct wmi_per_roam_config_req *req_buf)
struct wlan_per_roam_config_req *req_buf)
{
QDF_STATUS status;
tp_wma_handle wma_handle = (tp_wma_handle) handle;
@@ -2323,6 +2322,7 @@ void wma_update_per_roam_config(WMA_HANDLE handle,
if (QDF_IS_STATUS_ERROR(status))
wma_err("failed to set per roam config to FW");
}
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
@@ -6205,7 +6205,8 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf,
*/
wma_debug("Better AP found for vdevid %x, rssi %d",
wmi_event->vdev_id, wmi_event->rssi);
wma_handle->suitable_ap_hb_failure = false;
mlme_set_roam_reason_better_ap(
wma_handle->interfaces[wmi_event->vdev_id].vdev, false);
wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id);
break;
case WMI_ROAM_REASON_SUITABLE_AP:
@@ -6213,8 +6214,11 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf,
* WMI_ROAM_REASON_SUITABLE_AP can get called in soft IRQ
* context, so avoid using CSR/PE structure directly.
*/
wma_handle->suitable_ap_hb_failure = true;
wma_handle->suitable_ap_hb_failure_rssi = wmi_event->rssi;
mlme_set_roam_reason_better_ap(
wma_handle->interfaces[wmi_event->vdev_id].vdev, true);
mlme_set_hb_ap_rssi(
wma_handle->interfaces[wmi_event->vdev_id].vdev,
wmi_event->rssi);
wma_debug("Bmiss scan AP found for vdevid %x, rssi %d",
wmi_event->vdev_id, wmi_event->rssi);
wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id);

View File

@@ -4025,6 +4025,7 @@ int wma_rcpi_event_handler(void *handle, uint8_t *cmd_param_info,
return 0;
}
#ifndef ROAM_OFFLOAD_V1
/**
* wma_set_roam_offload_flag() - Set roam offload flag to fw
* @wma: wma handle
@@ -4094,6 +4095,7 @@ void wma_update_roam_offload_flag(void *handle,
wma_set_roam_offload_flag(wma, params->vdev_id, params->enable);
}
#endif
QDF_STATUS wma_send_vdev_down_to_fw(t_wma_handle *wma, uint8_t vdev_id)
{