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 * @cm_roam: Roaming configuration
* @bigtk_vdev_support: BIGTK feature support for this vdev (SAP) * @bigtk_vdev_support: BIGTK feature support for this vdev (SAP)
* @sae_auth_retry: SAE auth retry information * @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 { struct mlme_legacy_priv {
bool chan_switch_in_progress; bool chan_switch_in_progress;
@@ -180,6 +182,8 @@ struct mlme_legacy_priv {
struct wlan_cm_roam cm_roam; struct wlan_cm_roam cm_roam;
bool bigtk_vdev_support; bool bigtk_vdev_support;
struct sae_auth_retry sae_retry; 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); 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 * mlme_set_connection_fail() - set connection failure flag
* @vdev: vdev pointer * @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; 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) QDF_STATUS mlme_set_connection_fail(struct wlan_objmgr_vdev *vdev, bool val)
{ {
struct mlme_legacy_priv *mlme_priv; 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; 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 static uint32_t
target_if_get_wmi_roam_offload_flag(uint32_t flag) 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 * to wmi
* @vdev: vdev object * @vdev: vdev object
* @req: roam start config parameters * @req: roam start config parameters
@@ -623,7 +643,7 @@ target_if_cm_roam_send_roam_init(struct wlan_objmgr_vdev *vdev,
* Return: QDF_STATUS * Return: QDF_STATUS
*/ */
static QDF_STATUS static QDF_STATUS
target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev, target_if_cm_roam_send_start(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_start_config *req) struct wlan_roam_start_config *req)
{ {
QDF_STATUS status = QDF_STATUS_SUCCESS; QDF_STATUS status = QDF_STATUS_SUCCESS;
@@ -678,11 +698,107 @@ target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev,
goto end; 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 */ /* add other wmi commands */
end: end:
return status; 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 * target_if_cm_roam_register_rso_req_ops() - Register rso req tx ops fucntions
* @tx_ops: tx ops * @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) 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_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 #else
static void static void

View File

@@ -22,12 +22,14 @@
* Implementation for the common roaming offload api interfaces. * Implementation for the common roaming offload api interfaces.
*/ */
#include "wlan_mlme_main.h"
#include "wlan_cm_roam_offload.h" #include "wlan_cm_roam_offload.h"
#include "wlan_cm_tgt_if_tx_api.h" #include "wlan_cm_tgt_if_tx_api.h"
#include "wlan_cm_roam_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 * @psoc: psoc pointer
* @vdev_id: vdev id * @vdev_id: vdev id
* @params: roam beacon miss count parameters * @params: roam beacon miss count parameters
@@ -37,8 +39,7 @@
* Return: None * Return: None
*/ */
static void static void
wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t vdev_id,
struct wlan_roam_beacon_miss_cnt *params) struct wlan_roam_beacon_miss_cnt *params)
{ {
uint8_t beacon_miss_count; uint8_t beacon_miss_count;
@@ -64,8 +65,7 @@ wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc,
* Return: None * Return: None
*/ */
static void static void
wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t vdev_id,
struct wlan_roam_reason_vsie_enable *params) struct wlan_roam_reason_vsie_enable *params)
{ {
uint8_t enable_roam_reason_vsie; uint8_t enable_roam_reason_vsie;
@@ -87,8 +87,7 @@ wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
* Return: None * Return: None
*/ */
static void static void
wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc, cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t vdev_id,
struct wlan_roam_triggers *params) struct wlan_roam_triggers *params)
{ {
params->vdev_id = vdev_id; params->vdev_id = vdev_id;
@@ -98,16 +97,14 @@ wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
&params->vendor_btm_param); &params->vendor_btm_param);
} }
#else #else
static void static inline void
wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t vdev_id,
struct wlan_roam_reason_vsie_enable *params) struct wlan_roam_reason_vsie_enable *params)
{ {
} }
static void static inline void
wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc, cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t vdev_id,
struct wlan_roam_triggers *params) struct wlan_roam_triggers *params)
{ {
} }
@@ -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); 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 * cm_roam_start_req() - roam start request handling
* @psoc: psoc pointer * @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 * Return: QDF_STATUS
*/ */
static QDF_STATUS static QDF_STATUS
cm_roam_start_req(struct wlan_objmgr_psoc *psoc, cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t vdev_id,
uint8_t reason) uint8_t reason)
{ {
struct wlan_roam_start_config *start_req; struct wlan_roam_start_config *start_req;
@@ -147,11 +156,11 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
if (!start_req) if (!start_req)
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_NOMEM;
cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
/* fill from mlme directly */ /* fill from mlme directly */
wlan_cm_roam_scan_bmiss_cnt(psoc, vdev_id, cm_roam_scan_bmiss_cnt(psoc, vdev_id, &start_req->beacon_miss_cnt);
&start_req->beacon_miss_cnt); cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable);
wlan_cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable); cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers);
wlan_cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers);
/* fill from legacy through this API */ /* fill from legacy through this API */
wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason); 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 * Return: QDF_STATUS
*/ */
static QDF_STATUS static QDF_STATUS
cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t vdev_id,
uint8_t reason) 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; 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 * similar to csr_roam_offload_scan, will be used from many legacy
* process directly, generate a new function wlan_cm_roam_send_rso_cmd * 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"); mlme_debug("ROAM: not allowed");
return status; 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) if (rso_command == ROAM_SCAN_OFFLOAD_START)
status = cm_roam_start_req(psoc, vdev_id, reason); status = cm_roam_start_req(psoc, vdev_id, reason);
else if (rso_command == ROAM_SCAN_OFFLOAD_UPDATE_CFG) else if (rso_command == ROAM_SCAN_OFFLOAD_UPDATE_CFG)
status = cm_roam_update_config_req(psoc, vdev_id, reason); status = cm_roam_update_config_req(psoc, vdev_id, reason);
// else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART) else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART)
/* RESTART API */ status = cm_roam_restart_req(psoc, vdev_id, reason);
// else else if (rso_command == ROAM_SCAN_OFFLOAD_ABORT_SCAN)
/* ABORT SCAN API */ status = cm_roam_abort_req(psoc, vdev_id, reason);
else
mlme_debug("ROAM: invalid RSO command %d", rso_command);
return status; 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 * cm_roam_switch_to_rso_stop() - roam state handling for rso stop
* @pdev: pdev pointer * @pdev: pdev pointer

View File

@@ -78,6 +78,16 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, uint8_t vdev_id,
struct wlan_roam_start_config *req, struct wlan_roam_start_config *req,
uint8_t reason); 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 #else
static inline QDF_STATUS static inline QDF_STATUS
wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev, 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 #endif
/** /**
* cm_roam_acquire_lock - Wrapper for sme_acquire_global_lock. * cm_roam_acquire_lock() - Wrapper for sme_acquire_global_lock.
* *
* Return: QDF_STATUS * Return: QDF_STATUS
*/ */
QDF_STATUS cm_roam_acquire_lock(void); 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 * Return: QDF_STATUS
*/ */
QDF_STATUS cm_roam_release_lock(void); 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 * @requestor: Requestor of type enum wlan_cm_rso_control_requestor
* *
* Return: Pointer to converted string * Return: Pointer to converted string
@@ -111,7 +121,7 @@ char
*cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor); *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 * @pdev: Pointer to pdev
* @vdev_id: vdev id * @vdev_id: vdev id
* @enable: true: Send RSO init and RSO enable * @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); 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 * @pdev: Pointer to pdev
* @vdev_id: vdev id * @vdev_id: vdev id
* @requestor: RSO disable requestor * @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); 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 * @pdev: Pointer to pdev
* @vdev_id: vdev id * @vdev_id: vdev id
* @requestor: RSO disable requestor * @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); 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. * vdev instead of pdev.
* @psoc: PSOC pointer * @psoc: PSOC pointer
* @vdev_id: VDEV id * @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); bool pcl_per_vdev);
/** /**
* wlan_cm_roam_is_pcl_per_vdev_active - API to know if the pcl command needs to be * wlan_cm_roam_is_pcl_per_vdev_active() - API to know if the pcl command needs
* sent per vdev or not * to be sent per vdev or not
* @psoc: PSOC pointer * @psoc: PSOC pointer
* @vdev_id: VDEV id * @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); 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. * provided frequency is allowed for the 2nd STA vdev for connection.
* @psoc: Pointer to PSOC object * @psoc: Pointer to PSOC object
* @freq: Frequency in the given frequency list for the STA that is about to * @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); 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 * for connection of the 2nd STA based on the 1st STA connected band if dual
* sta roaming is enabled. * sta roaming is enabled.
* @psoc: Pointer to PSOC object * @psoc: Pointer to PSOC object
@@ -272,7 +282,7 @@ void
wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc, wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc,
struct scan_filter *filter); 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 * @psoc: PSOC pointer
* @vdev_id: VDEV id * @vdev_id: VDEV id
* @param: vendor configured roam trigger param * @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 struct wlan_cm_roam_vendor_btm_params
*param); *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 * reason
* @psoc: PSOC pointer * @psoc: PSOC pointer
* @vdev_id: VDEV id * @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_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 * @psoc: PSOC pointer
* @vdev_id: VDEV id * @vdev_id: VDEV id
* @param: vendor configured roam trigger param * @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 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 #ifdef ROAM_OFFLOAD_V1
#define NOISE_FLOOR_DBM_DEFAULT (-96) #define NOISE_FLOOR_DBM_DEFAULT (-96)
#define RSSI_MIN_VALUE (-128) #define RSSI_MIN_VALUE (-128)
@@ -543,6 +686,10 @@ struct wlan_roam_scan_period_params {
* @scan_period_params: roam scan period parameters * @scan_period_params: roam scan period parameters
* @profile_params: ap profile parameters * @profile_params: ap profile parameters
* @scan_filter_params: roam scan filter 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_start_config {
struct wlan_roam_offload_scan_rssi_params rssi_params; 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 wlan_roam_scan_period_params scan_period_params;
struct ap_profile_params profile_params; struct ap_profile_params profile_params;
struct wlan_roam_scan_filter_params scan_filter_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 */ /* 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 #endif
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) #if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
@@ -658,6 +849,7 @@ struct set_pcl_req {
* module initialize request * module initialize request
* @send_roam_start_req: TX ops function pointer to send roam start related * @send_roam_start_req: TX ops function pointer to send roam start related
* commands * commands
* @send_roam_abort: send roam abort
*/ */
struct wlan_cm_roam_tx_ops { struct wlan_cm_roam_tx_ops {
QDF_STATUS (*send_vdev_set_pcl_cmd) (struct wlan_objmgr_vdev *vdev, 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, QDF_STATUS (*send_roam_start_req)(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_start_config *req); 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 #endif
}; };

View File

@@ -28,7 +28,7 @@
#ifdef ROAM_OFFLOAD_V1 #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. * to firmware.
* @pdev: Pointer to pdev * @pdev: Pointer to pdev
* @vdev_id: vdev id * @vdev_id: vdev id
@@ -55,7 +55,7 @@ QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev,
uint8_t vdev_id); 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 * @pdev: Pointer to pdev
* @vdev_id: vdev id * @vdev_id: vdev id
* @enable: true: Send RSO init and RSO enable * @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 * @pdev: Pointer to pdev
* @vdev_id: vdev id * @vdev_id: vdev id
* @requestor: RSO disable requestor * @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 * @pdev: Pointer to pdev
* @vdev_id: vdev id * @vdev_id: vdev id
* @requestor: RSO disable requestor * @requestor: RSO disable requestor

View File

@@ -30,7 +30,7 @@
#ifdef WLAN_FEATURE_ROAM_OFFLOAD #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 * @psoc: PSOC pointer
* @pcl_req: Set pcl request structure 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 #ifdef ROAM_OFFLOAD_V1
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD) #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 * wlan_cm_tgt_send_roam_offload_init() - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD
* init/deinit roaming module at firmware * to init/deinit roaming module at firmware
* @psoc: PSOC pointer * @psoc: PSOC pointer
* @vdev_id: vdev id * @vdev_id: vdev id
* @is_init: true if roam module is to be initialized else false for deinit * @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); 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 * @psoc: psoc pointer
* @vdev_id: vdev id * @vdev_id: vdev id
* @req: roam start config parameter * @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, QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, uint8_t vdev_id,
struct wlan_roam_start_config *req); 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 #endif
#endif /* CM_TGT_IF_TX_API_H__ */ #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)) if (QDF_IS_STATUS_ERROR(status))
return 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, ROAM_SCAN_OFFLOAD_ABORT_SCAN,
REASON_ROAM_ABORT_ROAM_SCAN); REASON_ROAM_ABORT_ROAM_SCAN);
cm_roam_release_lock(); 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 |= init_msg.roam_offload_flag |=
WLAN_ROAM_BMISS_FINAL_SCAN_TYPE; 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); status = roam_tx_ops.send_roam_offload_init_req(vdev, &init_msg);
if (QDF_IS_STATUS_ERROR(status)) 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); roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
if (!roam_tx_ops.send_roam_start_req) { 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); wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_E_INVAL; return QDF_STATUS_E_INVAL;
} }
status = roam_tx_ops.send_roam_start_req(vdev, req); status = roam_tx_ops.send_roam_start_req(vdev, req);
if (QDF_IS_STATUS_ERROR(status)) 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); wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return status; 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
#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 * wmi_unified_send_disconnect_roam_params() - Send disconnect roam trigger
* parameters to firmware * parameters to firmware
* @wmi_hdl: wmi handle * @wmi_hdl: wmi handle
* @params: pointer to wmi_disconnect_roam_params * @params: pointer to wlan_roam_disconnect_params
* *
* Return: QDF_STATUS * Return: QDF_STATUS
*/ */
QDF_STATUS QDF_STATUS
wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle, 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_unified_send_idle_roam_params() - Send idle roam trigger params to fw
* @wmi_hdl: wmi handle * @wmi_hdl: wmi handle
* @params: pointer to wmi_idle_roam_params * @params: pointer to wlan_roam_idle_params
* *
* Return: QDF_STATUS * Return: QDF_STATUS
*/ */
QDF_STATUS QDF_STATUS
wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle, 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 * 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 QDF_STATUS
wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle, 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 * 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_unified_send_btm_config() - Send BTM config to fw
* @wmi_handle: wmi handle * @wmi_handle: wmi handle
* @params: pointer to wmi_btm_config * @params: pointer to wlan_roam_btm_config
* *
* Return: QDF_STATUS * Return: QDF_STATUS
*/ */
QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle, 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 * 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 * 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, QDF_STATUS
struct wmi_11k_offload_params *params); 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_unified_invoke_neighbor_report_cmd() - send invoke neighbor report cmd
* @wmi_handle: wmi handle * @wmi_handle: wmi handle

View File

@@ -234,54 +234,6 @@ struct wmi_roam_invoke_cmd {
bool forced_roaming; 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 * struct wmi_limit_off_chan_param - limit off channel parameters
* @vdev_id: vdev id * @vdev_id: vdev id
@@ -311,30 +263,6 @@ struct hlp_params {
uint8_t hlp_ie[WMI_MAX_HLP_IE_LEN]; 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 * struct wmi_bss_load_config - BSS load trigger parameters
* @vdev_id: VDEV on which the parameters should be applied * @vdev_id: VDEV on which the parameters should be applied
@@ -356,36 +284,6 @@ struct wmi_bss_load_config {
int32_t rssi_threshold_24ghz; 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 * struct wmi_roam_auth_status_params - WPA3 roam auth response status
* parameters * parameters
@@ -404,45 +302,6 @@ struct wmi_roam_auth_status_params {
uint8_t pmkid[PMKID_LEN]; 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 * struct wmi_invoke_neighbor_report_params - Invoke neighbor report request
* from IW to FW * from IW to FW

View File

@@ -170,7 +170,7 @@ QDF_STATUS wmi_unified_roam_invoke_cmd(wmi_unified_t wmi_handle,
QDF_STATUS QDF_STATUS
wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle, 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) if (wmi_handle->ops->send_disconnect_roam_params)
return wmi_handle->ops->send_disconnect_roam_params(wmi_handle, 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 QDF_STATUS
wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle, 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) if (wmi_handle->ops->send_idle_roam_params)
return wmi_handle->ops->send_idle_roam_params(wmi_handle, 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 QDF_STATUS
wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle, 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) if (wmi_handle->ops->send_per_roam_config_cmd)
return wmi_handle->ops->send_per_roam_config_cmd(wmi_handle, 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 */ #endif /* WLAN_FEATURE_FILS_SK */
QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle, 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) if (wmi_handle->ops->send_btm_config)
return wmi_handle->ops->send_btm_config(wmi_handle, 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; return QDF_STATUS_E_FAILURE;
} }
QDF_STATUS
QDF_STATUS wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle, wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
struct wmi_11k_offload_params *params) struct wlan_roam_11k_offload_params *params)
{ {
if (wmi_handle->ops->send_offload_11k_cmd) if (wmi_handle->ops->send_offload_11k_cmd)
return wmi_handle->ops->send_offload_11k_cmd(wmi_handle, return wmi_handle->ops->send_offload_11k_cmd(wmi_handle,

View File

@@ -2613,7 +2613,7 @@ error:
*/ */
static QDF_STATUS static QDF_STATUS
send_per_roam_config_cmd_tlv(wmi_unified_t wmi_handle, 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; wmi_buf_t buf = NULL;
QDF_STATUS status; 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 * send_btm_config_cmd_tlv() - Send wmi cmd for BTM config
* @wmi_handle: wmi handle * @wmi_handle: wmi handle
* @params: pointer to wmi_btm_config * @params: pointer to wlan_roam_btm_config
* *
* Return: QDF_STATUS * Return: QDF_STATUS
*/ */
static QDF_STATUS send_btm_config_cmd_tlv(wmi_unified_t wmi_handle, 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_btm_config_fixed_param *cmd;
wmi_buf_t buf; 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 * send_disconnect_roam_params_tlv() - send disconnect roam trigger parameters
* @wmi_handle: wmi handle * @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 * disconnect_roam_trigger parameters from CSR
* *
* This function sends the disconnect roam trigger parameters to fw. * 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 static QDF_STATUS
send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle, 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_roam_deauth_config_cmd_fixed_param *cmd;
wmi_buf_t buf; 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 * send_idle_roam_params_tlv() - send idle roam trigger parameters
* @wmi_handle: wmi handle * @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 * idle roam parameters from CSR
* *
* This function sends the idle roam trigger parameters to fw. * 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 static QDF_STATUS
send_idle_roam_params_tlv(wmi_unified_t wmi_handle, 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_roam_idle_config_cmd_fixed_param *cmd;
wmi_buf_t buf; wmi_buf_t buf;
@@ -3036,14 +3036,14 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle,
#else #else
static inline QDF_STATUS static inline QDF_STATUS
send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle, 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; return QDF_STATUS_E_FAILURE;
} }
static inline QDF_STATUS static inline QDF_STATUS
send_idle_roam_params_tlv(wmi_unified_t wmi_handle, 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; return QDF_STATUS_E_FAILURE;
} }
@@ -3065,7 +3065,7 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle,
*/ */
static QDF_STATUS static QDF_STATUS
send_offload_11k_cmd_tlv(wmi_unified_t wmi_handle, 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_11k_offload_report_fixed_param *cmd;
wmi_buf_t buf; wmi_buf_t buf;

View File

@@ -2211,8 +2211,8 @@ struct roam_offload_scan_req {
bool is_sae_single_pmk; bool is_sae_single_pmk;
bool enable_ft_im_roaming; bool enable_ft_im_roaming;
/* Idle/Disconnect roam parameters */ /* Idle/Disconnect roam parameters */
struct wmi_idle_roam_params idle_roam_params; struct wlan_roam_idle_params idle_roam_params;
struct wmi_disconnect_roam_params disconnect_roam_params; struct wlan_roam_disconnect_params disconnect_roam_params;
#endif #endif
struct roam_ext_params roam_params; struct roam_ext_params roam_params;
struct wlan_roam_triggers roam_triggers; struct wlan_roam_triggers roam_triggers;
@@ -2239,7 +2239,7 @@ struct roam_offload_scan_req {
uint32_t rct_validity_timer; uint32_t rct_validity_timer;
uint32_t disassoc_timer_threshold; uint32_t disassoc_timer_threshold;
uint32_t btm_trig_min_candidate_score; 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 ho_delay_for_rx;
uint32_t roam_preauth_retry_count; uint32_t roam_preauth_retry_count;
uint32_t roam_preauth_no_ack_timeout; 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_ANTENNA_ISOLATION_RSP = SIR_SME_MSG_TYPES_BEGIN + 155,
eWNI_SME_MON_DEINIT_SESSION = SIR_SME_MSG_TYPES_BEGIN + 156, eWNI_SME_MON_DEINIT_SESSION = SIR_SME_MSG_TYPES_BEGIN + 156,
eWNI_SME_VDEV_DELETE_RSP = SIR_SME_MSG_TYPES_BEGIN + 157, 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_INIT_PARAM = SIR_SME_MSG_TYPES_BEGIN + 158,
eWNI_SME_ROAM_SEND_PER_REQ = SIR_SME_MSG_TYPES_BEGIN + 159, eWNI_SME_ROAM_SEND_PER_REQ = SIR_SME_MSG_TYPES_BEGIN + 159,
#endif
eWNI_SME_GET_ROAM_SCAN_CH_LIST_EVENT = eWNI_SME_GET_ROAM_SCAN_CH_LIST_EVENT =
SIR_SME_MSG_TYPES_BEGIN + 160, SIR_SME_MSG_TYPES_BEGIN + 160,
eWNI_SME_MONITOR_MODE_VDEV_UP = SIR_SME_MSG_TYPES_BEGIN + 161, 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 */ /* (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) #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_RX_CHN_STATUS_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 372)
#define SIR_HAL_GET_RCPI_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 373) #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) #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) #define SIR_HAL_INIT_ROAM_OFFLOAD_PARAM (SIR_HAL_ITC_MSG_TYPES_BEGIN + 380)
#endif
/* /*
* Unused SIR_HAL_ITC_MSG_TYPES_BEGIN + 381 to * 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: case eWNI_SME_ROAM_INVOKE:
/* fall through */ /* fall through */
case eWNI_SME_ROAM_SCAN_OFFLOAD_REQ: case eWNI_SME_ROAM_SCAN_OFFLOAD_REQ:
case eWNI_SME_ROAM_INIT_PARAM:
case eWNI_SME_ROAM_SEND_SET_PCL_REQ: 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: case eWNI_SME_ROAM_SEND_PER_REQ:
#endif
case eWNI_SME_SET_ADDBA_ACCEPT: case eWNI_SME_SET_ADDBA_ACCEPT:
case eWNI_SME_UPDATE_EDCA_PROFILE: case eWNI_SME_UPDATE_EDCA_PROFILE:
case WNI_SME_UPDATE_MU_EDCA_PARAMS: 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) #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 * lim_send_roam_offload_init() - Process Roam offload flag from csr
* @mac_ctx: Pointer to Global MAC structure * @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); qdf_mem_free(msg_buf);
} }
} }
#endif
/** /**
* lim_send_roam_set_pcl() - Process Roam offload flag from csr * lim_send_roam_set_pcl() - Process Roam offload flag from csr
* @mac_ctx: Pointer to Global MAC structure * @mac_ctx: Pointer to Global MAC structure
@@ -3558,6 +3559,8 @@ static void lim_send_roam_set_pcl(struct mac_context *mac_ctx,
} }
} }
#else #else
#ifndef ROAM_OFFLOAD_V1
static void lim_send_roam_offload_init(struct mac_context *mac_ctx, static void lim_send_roam_offload_init(struct mac_context *mac_ctx,
uint32_t *msg_buf) 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); qdf_mem_free(msg_buf);
} }
#endif
static inline void lim_send_roam_set_pcl(struct mac_context *mac_ctx, static inline void lim_send_roam_set_pcl(struct mac_context *mac_ctx,
struct set_pcl_req *msg_buf) 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); __lim_process_roam_scan_offload_req(mac, msg_buf);
bufConsumed = false; bufConsumed = false;
break; 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: case eWNI_SME_ROAM_SEND_SET_PCL_REQ:
lim_send_roam_set_pcl(mac, (struct set_pcl_req *)msg_buf); lim_send_roam_set_pcl(mac, (struct set_pcl_req *)msg_buf);
bufConsumed = false; bufConsumed = false;
break; 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: case eWNI_SME_ROAM_SEND_PER_REQ:
lim_send_roam_per_command(mac, msg_buf); lim_send_roam_per_command(mac, msg_buf);
bufConsumed = false; bufConsumed = false;
break; break;
#endif
case eWNI_SME_ROAM_INVOKE: case eWNI_SME_ROAM_INVOKE:
lim_process_roam_invoke(mac, msg_buf); lim_process_roam_invoke(mac, msg_buf);
bufConsumed = false; 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_UPDATE_ACCESS_POLICY_VENDOR_IE);
CASE_RETURN_STRING(eWNI_SME_DEFAULT_SCAN_IE); CASE_RETURN_STRING(eWNI_SME_DEFAULT_SCAN_IE);
CASE_RETURN_STRING(eWNI_SME_ROAM_SCAN_OFFLOAD_REQ); CASE_RETURN_STRING(eWNI_SME_ROAM_SCAN_OFFLOAD_REQ);
#ifndef ROAM_OFFLOAD_V1
CASE_RETURN_STRING(eWNI_SME_ROAM_INIT_PARAM); CASE_RETURN_STRING(eWNI_SME_ROAM_INIT_PARAM);
#endif
CASE_RETURN_STRING(eWNI_SME_LOST_LINK_INFO_IND); CASE_RETURN_STRING(eWNI_SME_LOST_LINK_INFO_IND);
CASE_RETURN_STRING(eWNI_SME_GET_PEER_INFO_EXT_IND); CASE_RETURN_STRING(eWNI_SME_GET_PEER_INFO_EXT_IND);
CASE_RETURN_STRING(eWNI_SME_RSO_CMD_STATUS_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_RSSI_MONITOR_REQ);
CASE_RETURN_STRING(WMA_SET_WISA_PARAMS); CASE_RETURN_STRING(WMA_SET_WISA_PARAMS);
CASE_RETURN_STRING(WMA_SET_WOW_PULSE_CMD); CASE_RETURN_STRING(WMA_SET_WOW_PULSE_CMD);
#ifndef ROAM_OFFLOAD_V1
CASE_RETURN_STRING(WMA_SET_PER_ROAM_CONFIG_CMD); CASE_RETURN_STRING(WMA_SET_PER_ROAM_CONFIG_CMD);
#endif
CASE_RETURN_STRING(WMA_GET_RCPI_REQ); CASE_RETURN_STRING(WMA_GET_RCPI_REQ);
CASE_RETURN_STRING(WMA_SET_DBS_SCAN_SEL_CONF_PARAMS); CASE_RETURN_STRING(WMA_SET_DBS_SCAN_SEL_CONF_PARAMS);
CASE_RETURN_STRING(WMA_GET_ROAM_SCAN_STATS); 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) #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 #ifndef ROAM_OFFLOAD_V1
/** /**
* csr_populate_roam_chan_list() * 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); 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 * 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 = req_buf->lca_config_params.num_disallowed_aps =
mac_ctx->mlme_cfg->lfr.lfr3_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 = req_buf->btm_solicited_timeout =
mac_ctx->mlme_cfg->btm.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, struct roam_offload_scan_req *req_buffer,
bool enabled) 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_config *csr_config = &mac_ctx->roam.configParam;
struct csr_neighbor_report_offload_params *neighbor_report_offload = struct csr_neighbor_report_offload_params *neighbor_report_offload =
&csr_config->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 * 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, csr_create_per_roam_request(struct mac_context *mac_ctx,
uint8_t session_id) 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) if (!req_buf)
return NULL; return NULL;
@@ -18188,7 +18190,7 @@ csr_create_per_roam_request(struct mac_context *mac_ctx,
static QDF_STATUS static QDF_STATUS
csr_roam_offload_per_scan(struct mac_context *mac_ctx, uint8_t session_id) 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}; struct scheduler_msg msg = {0};
QDF_STATUS status; QDF_STATUS status;
@@ -19258,10 +19260,8 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
} }
QDF_STATUS QDF_STATUS
wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
uint8_t vdev_id, uint8_t command, uint8_t reason)
uint8_t command,
uint8_t reason)
{ {
uint8_t *state = NULL; uint8_t *state = NULL;
struct csr_roam_session *session; 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 * parameters
* @mac_ctx: global mac ctx * @mac_ctx: global mac ctx
* @session: csr roam session * @session: csr roam session
@@ -19418,8 +19418,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
* Return: None * Return: None
*/ */
static void static void
wlan_cm_roam_scan_offload_rssi_thresh( csr_cm_roam_scan_offload_rssi_thresh(struct mac_context *mac_ctx,
struct mac_context *mac_ctx,
struct csr_roam_session *session, struct csr_roam_session *session,
struct wlan_roam_offload_scan_rssi_params *params) 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 * parameters
* @mac_ctx: global mac ctx * @mac_ctx: global mac ctx
* @vdev_id: vdev id * @vdev_id: vdev id
@@ -19513,8 +19512,7 @@ wlan_cm_roam_scan_offload_rssi_thresh(
* Return: None * Return: None
*/ */
static void static void
wlan_cm_roam_scan_offload_scan_period( csr_cm_roam_scan_offload_scan_period(struct mac_context *mac_ctx,
struct mac_context *mac_ctx,
uint8_t vdev_id, uint8_t vdev_id,
struct wlan_roam_scan_period_params *params) struct wlan_roam_scan_period_params *params)
{ {
@@ -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 * @mac_ctx: global mac ctx
* @session: sme session * @session: sme session
* @params: roam ap profile related parameters * @params: roam ap profile related parameters
@@ -19547,7 +19545,7 @@ wlan_cm_roam_scan_offload_scan_period(
* Return: None * Return: None
*/ */
static void static void
wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx, csr_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
struct csr_roam_session *session, struct csr_roam_session *session,
struct ap_profile_params *params) struct ap_profile_params *params)
{ {
@@ -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 * @mac_ctx: global mac ctx
* @vdev_id: vdev id * @vdev_id: vdev id
* @command: rso command * @command: rso command
@@ -19613,11 +19611,8 @@ wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
* Return: None * Return: None
*/ */
static void static void
wlan_cm_roam_scan_filter( csr_cm_roam_scan_filter(struct mac_context *mac_ctx, uint8_t vdev_id,
struct mac_context *mac_ctx, uint8_t command, uint8_t reason,
uint8_t vdev_id,
uint8_t command,
uint8_t reason,
struct wlan_roam_scan_filter_params *scan_filter_params) struct wlan_roam_scan_filter_params *scan_filter_params)
{ {
int i; int i;
@@ -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 QDF_STATUS
wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc, wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, uint8_t vdev_id,
@@ -19748,18 +19775,20 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
return QDF_STATUS_E_FAILURE; return QDF_STATUS_E_FAILURE;
} }
wlan_cm_roam_scan_offload_rssi_thresh(mac_ctx, session, csr_cm_roam_scan_offload_rssi_thresh(mac_ctx, session,
&req->rssi_params); &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); &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); &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); 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 */ /* fill other struct similar to wlan_roam_offload_scan_rssi_params */
return status; return status;

View File

@@ -848,9 +848,6 @@ struct wma_wlm_stats_data {
* @roam_ho_wl: wake lock for roam handoff req * @roam_ho_wl: wake lock for roam handoff req
* @wow_nack: wow negative ack flag * @wow_nack: wow negative ack flag
* @is_wow_bus_suspended: is wow bus suspended 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 * @IsRArateLimitEnabled: RA rate limiti s enabled or not
* @RArateLimitInterval: RA rate limit interval * @RArateLimitInterval: RA rate limit interval
* @is_lpass_enabled: Flag to indicate if LPASS feature is enabled or not * @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; qdf_wake_lock_t roam_preauth_wl;
int wow_nack; int wow_nack;
qdf_atomic_t is_wow_bus_suspended; qdf_atomic_t is_wow_bus_suspended;
bool suitable_ap_hb_failure;
uint32_t suitable_ap_hb_failure_rssi;
#ifdef WLAN_FEATURE_LPSS #ifdef WLAN_FEATURE_LPSS
bool is_lpass_enabled; bool is_lpass_enabled;
#endif #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); int wma_wlm_stats_rsp(void *wma_ctx, uint8_t *event, uint32_t len);
#endif /* FEATURE_WLM_STATS */ #endif /* FEATURE_WLM_STATS */
#ifndef ROAM_OFFLOAD_V1
/** /**
* wma_update_roam_offload_flag() - update roam offload flag to fw * wma_update_roam_offload_flag() - update roam offload flag to fw
* @wma: wma handle * @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, void wma_update_roam_offload_flag(void *handle,
struct roam_init_params *params); struct roam_init_params *params);
#endif
/** /**
* wma_self_peer_create() - create self peer in objmgr * wma_self_peer_create() - create self peer in objmgr
* @vdev_mlme: vdev mlme component private object * @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 #endif
#ifndef ROAM_OFFLOAD_V1
/** /**
* wma_update_per_roam_config() -per roam config parameter updation to FW * wma_update_per_roam_config() -per roam config parameter updation to FW
* @handle: wma handle * @handle: wma handle
@@ -358,8 +359,8 @@ wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event,
* Return: none * Return: none
*/ */
void wma_update_per_roam_config(WMA_HANDLE handle, 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, QDF_STATUS wma_update_channel_list(WMA_HANDLE handle,
tSirUpdateChanList *chan_list); tSirUpdateChanList *chan_list);

View File

@@ -398,7 +398,9 @@
#define WMA_SET_WOW_PULSE_CMD SIR_HAL_SET_WOW_PULSE_CMD #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 #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 #define WMA_SEND_AP_VDEV_UP SIR_HAL_SEND_AP_VDEV_UP
@@ -433,7 +435,9 @@
#endif #endif
#define WMA_SET_ROAM_TRIGGERS SIR_HAL_SET_ROAM_TRIGGERS #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 #define WMA_ROAM_INIT_PARAM SIR_HAL_INIT_ROAM_OFFLOAD_PARAM
#endif
#define WMA_DATA_STALL_TRIGGER 6 #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); qdf_mem_free(msg->bodyptr);
break; break;
#endif /* FEATURE_WLAN_EXTSCAN */ #endif /* FEATURE_WLAN_EXTSCAN */
#ifndef ROAM_OFFLOAD_V1
case WMA_SET_PER_ROAM_CONFIG_CMD: case WMA_SET_PER_ROAM_CONFIG_CMD:
wma_update_per_roam_config(wma_handle, 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); qdf_mem_free(msg->bodyptr);
break; break;
#endif
case WMA_SET_SCAN_MAC_OUI_REQ: case WMA_SET_SCAN_MAC_OUI_REQ:
wma_scan_probe_setoui(wma_handle, msg->bodyptr); wma_scan_probe_setoui(wma_handle, msg->bodyptr);
qdf_mem_free(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); wma_set_roam_triggers(wma_handle, msg->bodyptr);
qdf_mem_free(msg->bodyptr); qdf_mem_free(msg->bodyptr);
break; break;
#ifndef ROAM_OFFLOAD_V1
case WMA_ROAM_INIT_PARAM: case WMA_ROAM_INIT_PARAM:
wma_update_roam_offload_flag(wma_handle, msg->bodyptr); wma_update_roam_offload_flag(wma_handle, msg->bodyptr);
qdf_mem_free(msg->bodyptr); qdf_mem_free(msg->bodyptr);
break; break;
#endif
case WMA_ROAM_SCAN_CH_REQ: case WMA_ROAM_SCAN_CH_REQ:
wma_get_roam_scan_ch(wma_handle->wmi_handle, msg->bodyval); wma_get_roam_scan_ch(wma_handle->wmi_handle, msg->bodyval);
break; break;

View File

@@ -84,6 +84,7 @@
#if !defined(REMOVE_PKT_LOG) #if !defined(REMOVE_PKT_LOG)
#include <wlan_logging_sock_svc.h> #include <wlan_logging_sock_svc.h>
#endif #endif
#include "wlan_cm_roam_api.h"
/** /**
* wma_send_bcn_buf_ll() - prepare and send beacon buffer to fw for LL * 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); 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 * wma_get_status_str() - get string of tx status from firmware
* @status: tx status * @status: tx status

View File

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