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:
@@ -160,6 +160,8 @@ struct wlan_mlme_roam {
|
||||
* @cm_roam: Roaming configuration
|
||||
* @bigtk_vdev_support: BIGTK feature support for this vdev (SAP)
|
||||
* @sae_auth_retry: SAE auth retry information
|
||||
* @roam_reason_better_ap: roam due to better AP found
|
||||
* @better_ap_hb_failure_rssi: heartbeat failure AP RSSI
|
||||
*/
|
||||
struct mlme_legacy_priv {
|
||||
bool chan_switch_in_progress;
|
||||
@@ -180,6 +182,8 @@ struct mlme_legacy_priv {
|
||||
struct wlan_cm_roam cm_roam;
|
||||
bool bigtk_vdev_support;
|
||||
struct sae_auth_retry sae_retry;
|
||||
bool roam_reason_better_ap;
|
||||
uint32_t hb_failure_rssi;
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -115,6 +115,41 @@ QDF_STATUS mlme_set_bigtk_support(struct wlan_objmgr_vdev *vdev, bool val);
|
||||
|
||||
bool mlme_get_bigtk_support(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlme_set_roam_reason_better_ap() - set roam reason better AP
|
||||
* @vdev: vdev pointer
|
||||
* @val: value to be set
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
mlme_set_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev, bool val);
|
||||
|
||||
/**
|
||||
* mlme_get_roam_reason_better_ap() - get roam reason better AP
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* Return: bool
|
||||
*/
|
||||
bool mlme_get_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlme_set_hb_ap_rssi() - set hb ap RSSI
|
||||
* @vdev: vdev pointer
|
||||
* @val: value to be set
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS mlme_set_hb_ap_rssi(struct wlan_objmgr_vdev *vdev, uint32_t val);
|
||||
|
||||
/**
|
||||
* mlme_get_hb_ap_rssi() - get HB AP RSSIc
|
||||
* @vdev: vdev pointer
|
||||
*
|
||||
* Return: rssi value
|
||||
*/
|
||||
uint32_t mlme_get_hb_ap_rssi(struct wlan_objmgr_vdev *vdev);
|
||||
|
||||
/**
|
||||
* mlme_set_connection_fail() - set connection failure flag
|
||||
* @vdev: vdev pointer
|
||||
|
@@ -657,6 +657,65 @@ bool mlme_get_bigtk_support(struct wlan_objmgr_vdev *vdev)
|
||||
return mlme_priv->bigtk_vdev_support;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
mlme_set_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev, bool val)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_legacy_err("vdev legacy private object is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
mlme_priv->roam_reason_better_ap = val;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
bool mlme_get_roam_reason_better_ap(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_legacy_err("vdev legacy private object is NULL");
|
||||
return false;
|
||||
}
|
||||
|
||||
return mlme_priv->roam_reason_better_ap;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
mlme_set_hb_ap_rssi(struct wlan_objmgr_vdev *vdev, uint32_t val)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_legacy_err("vdev legacy private object is NULL");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
mlme_priv->hb_failure_rssi = val;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
uint32_t mlme_get_hb_ap_rssi(struct wlan_objmgr_vdev *vdev)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_legacy_err("vdev legacy private object is NULL");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return mlme_priv->hb_failure_rssi;
|
||||
}
|
||||
|
||||
|
||||
QDF_STATUS mlme_set_connection_fail(struct wlan_objmgr_vdev *vdev, bool val)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
@@ -565,6 +565,26 @@ target_if_cm_roam_scan_filter(wmi_unified_t wmi_handle, uint8_t command,
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_scan_btm_offload() - send roam scan btm offload to firmware
|
||||
* @wmi_handle: wmi handle
|
||||
* @req: roam scan btm offload parameters
|
||||
*
|
||||
* Send WMI_ROAM_BTM_CONFIG_CMDID parameters to firmware
|
||||
*
|
||||
* Return: QDF status
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_scan_btm_offload(wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_btm_config *req)
|
||||
{
|
||||
target_if_debug("vdev %u btm_offload:%u btm_query_bitmask:%u btm_candidate_min_score:%d",
|
||||
req->vdev_id, req->btm_offload_config,
|
||||
req->btm_query_bitmask, req->btm_candidate_min_score);
|
||||
|
||||
return wmi_unified_send_btm_config(wmi_handle, req);
|
||||
}
|
||||
|
||||
static uint32_t
|
||||
target_if_get_wmi_roam_offload_flag(uint32_t flag)
|
||||
{
|
||||
@@ -613,7 +633,7 @@ target_if_cm_roam_send_roam_init(struct wlan_objmgr_vdev *vdev,
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_send_roam_start() - Send roam start related commands
|
||||
* target_if_cm_roam_send_start() - Send roam start related commands
|
||||
* to wmi
|
||||
* @vdev: vdev object
|
||||
* @req: roam start config parameters
|
||||
@@ -623,7 +643,7 @@ target_if_cm_roam_send_roam_init(struct wlan_objmgr_vdev *vdev,
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev,
|
||||
target_if_cm_roam_send_start(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_start_config *req)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
@@ -678,11 +698,107 @@ target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev,
|
||||
goto end;
|
||||
}
|
||||
|
||||
status = target_if_cm_roam_scan_btm_offload(wmi_handle,
|
||||
&req->btm_config);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
target_if_err("Sending BTM config to fw failed");
|
||||
}
|
||||
|
||||
/* add other wmi commands */
|
||||
end:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_send_stop() - Send roam stop related commands
|
||||
* to wmi
|
||||
* @vdev: vdev object
|
||||
* @req: roam stop config parameters
|
||||
*
|
||||
* This function is used to Send roam start related commands to wmi
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_send_stop(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_stop_config *req)
|
||||
{
|
||||
wmi_unified_t wmi_handle;
|
||||
|
||||
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
|
||||
if (!wmi_handle)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_send_update_config() - Send roam update config related
|
||||
* commands to wmi
|
||||
* @vdev: vdev object
|
||||
* @req: roam update config parameters
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_send_update_config(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_update_config *req)
|
||||
{
|
||||
wmi_unified_t wmi_handle;
|
||||
|
||||
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
|
||||
if (!wmi_handle)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_abort() - Send roam abort to wmi
|
||||
* @vdev: vdev object
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_abort(struct wlan_objmgr_vdev *vdev, uint8_t vdev_id)
|
||||
{
|
||||
wmi_unified_t wmi_handle;
|
||||
|
||||
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
|
||||
if (!wmi_handle)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
if (!target_if_is_vdev_valid(vdev_id)) {
|
||||
target_if_err("Invalid vdev id:%d", vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
return wmi_unified_roam_scan_offload_cmd(wmi_handle,
|
||||
WMI_ROAM_SCAN_STOP_CMD,
|
||||
vdev_id);
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_send_update_config() - Send roam update config related
|
||||
* commands to wmi
|
||||
* @vdev: vdev object
|
||||
* @req: roam per config parameters
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_per_config(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_per_roam_config_req *req)
|
||||
{
|
||||
wmi_unified_t wmi_handle;
|
||||
|
||||
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
|
||||
if (!wmi_handle)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
return wmi_unified_set_per_roam_config(wmi_handle, req);
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_register_rso_req_ops() - Register rso req tx ops fucntions
|
||||
* @tx_ops: tx ops
|
||||
@@ -695,7 +811,11 @@ static void
|
||||
target_if_cm_roam_register_rso_req_ops(struct wlan_cm_roam_tx_ops *tx_ops)
|
||||
{
|
||||
tx_ops->send_roam_offload_init_req = target_if_cm_roam_send_roam_init;
|
||||
tx_ops->send_roam_start_req = target_if_cm_roam_send_roam_start;
|
||||
tx_ops->send_roam_start_req = target_if_cm_roam_send_start;
|
||||
tx_ops->send_roam_stop_offload = target_if_cm_roam_send_stop;
|
||||
tx_ops->send_roam_update_config = target_if_cm_roam_send_update_config;
|
||||
tx_ops->send_roam_abort = target_if_cm_roam_abort;
|
||||
tx_ops->send_roam_per_config = target_if_cm_roam_per_config;
|
||||
}
|
||||
#else
|
||||
static void
|
||||
|
@@ -22,12 +22,14 @@
|
||||
* Implementation for the common roaming offload api interfaces.
|
||||
*/
|
||||
|
||||
#include "wlan_mlme_main.h"
|
||||
#include "wlan_cm_roam_offload.h"
|
||||
#include "wlan_cm_tgt_if_tx_api.h"
|
||||
#include "wlan_cm_roam_api.h"
|
||||
#include "wlan_mlme_vdev_mgr_interface.h"
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_scan_bmiss_cnt() - set roam beacon miss count
|
||||
* cm_roam_scan_bmiss_cnt() - set roam beacon miss count
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @params: roam beacon miss count parameters
|
||||
@@ -37,8 +39,7 @@
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
struct wlan_roam_beacon_miss_cnt *params)
|
||||
{
|
||||
uint8_t beacon_miss_count;
|
||||
@@ -64,8 +65,7 @@ wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc,
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
struct wlan_roam_reason_vsie_enable *params)
|
||||
{
|
||||
uint8_t enable_roam_reason_vsie;
|
||||
@@ -87,8 +87,7 @@ wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
struct wlan_roam_triggers *params)
|
||||
{
|
||||
params->vdev_id = vdev_id;
|
||||
@@ -98,16 +97,14 @@ wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
|
||||
¶ms->vendor_btm_param);
|
||||
}
|
||||
#else
|
||||
static void
|
||||
wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
static inline void
|
||||
cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
struct wlan_roam_reason_vsie_enable *params)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
static inline void
|
||||
cm_roam_triggers(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
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);
|
||||
}
|
||||
|
||||
static void cm_roam_set_roam_reason_better_ap(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, bool set)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_NB_ID);
|
||||
if (!vdev)
|
||||
return;
|
||||
mlme_set_roam_reason_better_ap(vdev, set);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_start_req() - roam start request handling
|
||||
* @psoc: psoc pointer
|
||||
@@ -136,8 +146,7 @@ cm_roam_init_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool enable)
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
cm_roam_start_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
struct wlan_roam_start_config *start_req;
|
||||
@@ -147,11 +156,11 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
if (!start_req)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
|
||||
/* fill from mlme directly */
|
||||
wlan_cm_roam_scan_bmiss_cnt(psoc, vdev_id,
|
||||
&start_req->beacon_miss_cnt);
|
||||
wlan_cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable);
|
||||
wlan_cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers);
|
||||
cm_roam_scan_bmiss_cnt(psoc, vdev_id, &start_req->beacon_miss_cnt);
|
||||
cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable);
|
||||
cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers);
|
||||
|
||||
/* fill from legacy through this API */
|
||||
wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason);
|
||||
@@ -174,13 +183,201 @@ cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
struct wlan_roam_update_config *update_req;
|
||||
QDF_STATUS status;
|
||||
|
||||
cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
|
||||
|
||||
update_req = qdf_mem_malloc(sizeof(*update_req));
|
||||
if (!update_req)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
status = wlan_cm_tgt_send_roam_update_req(psoc, vdev_id, update_req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("fail to send update config");
|
||||
|
||||
qdf_mem_free(update_req);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_restart_req() - roam restart req for LFR2
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @reason: reason for changing roam state for the requested vdev id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_restart_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_NB_ID);
|
||||
if (!vdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
/* Rome offload engine does not stop after any scan.
|
||||
* If this command is sent because all preauth attempts failed
|
||||
* and WMI_ROAM_REASON_SUITABLE_AP event was received earlier,
|
||||
* now it is time to call it heartbeat failure.
|
||||
*/
|
||||
if (reason == REASON_PREAUTH_FAILED_FOR_ALL
|
||||
&& mlme_get_roam_reason_better_ap(vdev)) {
|
||||
mlme_err("Sending heartbeat failure after preauth failures");
|
||||
wlan_cm_send_beacon_miss(vdev_id, mlme_get_hb_ap_rssi(vdev));
|
||||
mlme_set_roam_reason_better_ap(vdev, false);
|
||||
}
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_abort_req() - roam scan abort req
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @reason: reason for changing roam state for the requested vdev id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_abort_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
status = wlan_cm_tgt_send_roam_abort_req(psoc, vdev_id);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("fail to send abort start");
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_stop_req() - roam stop request handling
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @reason: reason for changing roam state for the requested vdev id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_stop_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
struct wlan_roam_stop_config *stop_req;
|
||||
QDF_STATUS status;
|
||||
|
||||
cm_roam_set_roam_reason_better_ap(psoc, vdev_id, false);
|
||||
|
||||
stop_req = qdf_mem_malloc(sizeof(*stop_req));
|
||||
if (!stop_req)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
/* do the filling as csr_post_rso_stop */
|
||||
|
||||
status = wlan_cm_tgt_send_roam_stop_req(psoc, vdev_id, stop_req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("fail to send roam stop");
|
||||
|
||||
qdf_mem_free(stop_req);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_fill_per_roam_request() - create PER roam offload config request
|
||||
* @psoc: psoc context
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_fill_per_roam_request(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_per_roam_config_req *req)
|
||||
{
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
req->per_config.enable = mlme_obj->cfg.lfr.per_roam_enable;
|
||||
req->per_config.tx_high_rate_thresh =
|
||||
mlme_obj->cfg.lfr.per_roam_config_high_rate_th;
|
||||
req->per_config.rx_high_rate_thresh =
|
||||
mlme_obj->cfg.lfr.per_roam_config_high_rate_th;
|
||||
req->per_config.tx_low_rate_thresh =
|
||||
mlme_obj->cfg.lfr.per_roam_config_low_rate_th;
|
||||
req->per_config.rx_low_rate_thresh =
|
||||
mlme_obj->cfg.lfr.per_roam_config_low_rate_th;
|
||||
req->per_config.per_rest_time = mlme_obj->cfg.lfr.per_roam_rest_time;
|
||||
req->per_config.tx_per_mon_time =
|
||||
mlme_obj->cfg.lfr.per_roam_monitor_time;
|
||||
req->per_config.rx_per_mon_time =
|
||||
mlme_obj->cfg.lfr.per_roam_monitor_time;
|
||||
req->per_config.tx_rate_thresh_percnt =
|
||||
mlme_obj->cfg.lfr.per_roam_config_rate_th_percent;
|
||||
req->per_config.rx_rate_thresh_percnt =
|
||||
mlme_obj->cfg.lfr.per_roam_config_rate_th_percent;
|
||||
req->per_config.min_candidate_rssi =
|
||||
mlme_obj->cfg.lfr.per_roam_min_candidate_rssi;
|
||||
|
||||
mlme_debug("PER based roaming configuaration enable: %d vdev: %d high_rate_thresh: %d low_rate_thresh: %d rate_thresh_percnt: %d per_rest_time: %d monitor_time: %d min cand rssi: %d",
|
||||
req->per_config.enable, req->vdev_id,
|
||||
req->per_config.tx_high_rate_thresh,
|
||||
req->per_config.tx_low_rate_thresh,
|
||||
req->per_config.tx_rate_thresh_percnt,
|
||||
req->per_config.per_rest_time,
|
||||
req->per_config.tx_per_mon_time,
|
||||
req->per_config.min_candidate_rssi);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_offload_per_scan() - populates roam offload scan request and sends
|
||||
* to fw
|
||||
* @psoc: psoc context
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_offload_per_config(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
|
||||
{
|
||||
struct wlan_per_roam_config_req *req = NULL;
|
||||
QDF_STATUS status;
|
||||
|
||||
req = qdf_mem_malloc(sizeof(*req));
|
||||
if (!req)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
req->vdev_id = vdev_id;
|
||||
status = cm_roam_fill_per_roam_request(psoc, req);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
qdf_mem_free(req);
|
||||
mlme_debug("fail to fill per config");
|
||||
return status;
|
||||
}
|
||||
|
||||
status = wlan_cm_tgt_send_roam_per_config(psoc, vdev_id, req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("fail to send roam stop");
|
||||
|
||||
qdf_mem_free(req);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* similar to csr_roam_offload_scan, will be used from many legacy
|
||||
* process directly, generate a new function wlan_cm_roam_send_rso_cmd
|
||||
@@ -200,35 +397,28 @@ QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||
mlme_debug("ROAM: not allowed");
|
||||
return status;
|
||||
}
|
||||
|
||||
/*
|
||||
* Update PER config to FW. No need to update in case of stop command,
|
||||
* FW takes care of stopping this internally
|
||||
*/
|
||||
if (rso_command != ROAM_SCAN_OFFLOAD_STOP)
|
||||
cm_roam_offload_per_config(psoc, vdev_id);
|
||||
|
||||
if (rso_command == ROAM_SCAN_OFFLOAD_START)
|
||||
status = cm_roam_start_req(psoc, vdev_id, reason);
|
||||
else if (rso_command == ROAM_SCAN_OFFLOAD_UPDATE_CFG)
|
||||
status = cm_roam_update_config_req(psoc, vdev_id, reason);
|
||||
// else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART)
|
||||
/* RESTART API */
|
||||
// else
|
||||
/* ABORT SCAN API */
|
||||
else if (rso_command == ROAM_SCAN_OFFLOAD_RESTART)
|
||||
status = cm_roam_restart_req(psoc, vdev_id, reason);
|
||||
else if (rso_command == ROAM_SCAN_OFFLOAD_ABORT_SCAN)
|
||||
status = cm_roam_abort_req(psoc, vdev_id, reason);
|
||||
else
|
||||
mlme_debug("ROAM: invalid RSO command %d", rso_command);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_stop_req() - roam stop request handling
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @reason: reason for changing roam state for the requested vdev id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_stop_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
/* do the filling as csr_post_rso_stop */
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_switch_to_rso_stop() - roam state handling for rso stop
|
||||
* @pdev: pdev pointer
|
||||
|
@@ -78,6 +78,16 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_start_config *req,
|
||||
uint8_t reason);
|
||||
|
||||
/**
|
||||
* wlan_cm_send_beacon_miss() - initiate beacon miss
|
||||
* @vdev_id: vdev id
|
||||
* @rssi: AP rssi
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi);
|
||||
|
||||
#else
|
||||
static inline QDF_STATUS
|
||||
wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
|
||||
@@ -88,21 +98,21 @@ wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
|
||||
#endif
|
||||
|
||||
/**
|
||||
* cm_roam_acquire_lock - Wrapper for sme_acquire_global_lock.
|
||||
* cm_roam_acquire_lock() - Wrapper for sme_acquire_global_lock.
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_roam_acquire_lock(void);
|
||||
|
||||
/**
|
||||
* cm_roam_release_lock - Wrapper for sme_release_global_lock()
|
||||
* cm_roam_release_lock() - Wrapper for sme_release_global_lock()
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_roam_release_lock(void);
|
||||
|
||||
/**
|
||||
* cm_roam_get_requestor_string - RSO control requestor to string api
|
||||
* cm_roam_get_requestor_string() - RSO control requestor to string api
|
||||
* @requestor: Requestor of type enum wlan_cm_rso_control_requestor
|
||||
*
|
||||
* Return: Pointer to converted string
|
||||
@@ -111,7 +121,7 @@ char
|
||||
*cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor);
|
||||
|
||||
/**
|
||||
* ucfg_cm_rso_init_deinit - Init or Deinit roaming module at firmware
|
||||
* ucfg_cm_rso_init_deinit() - Init or Deinit roaming module at firmware
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @enable: true: Send RSO init and RSO enable
|
||||
@@ -123,7 +133,7 @@ QDF_STATUS wlan_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id, bool enable);
|
||||
|
||||
/**
|
||||
* wlan_cm_disable_rso - Disable roam scan offload to firmware
|
||||
* wlan_cm_disable_rso() - Disable roam scan offload to firmware
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @requestor: RSO disable requestor
|
||||
@@ -136,7 +146,7 @@ QDF_STATUS wlan_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||
uint8_t reason);
|
||||
|
||||
/**
|
||||
* ucfg_cm_enable_rso - Enable roam scan offload to firmware
|
||||
* ucfg_cm_enable_rso() - Enable roam scan offload to firmware
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @requestor: RSO disable requestor
|
||||
@@ -212,7 +222,7 @@ wlan_cm_roam_extract_roam_initial_info(wmi_unified_t wmi, void *evt_buf,
|
||||
uint8_t idx);
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_activate_pcl_per_vdev - Set the PCL command to be sent per
|
||||
* wlan_cm_roam_activate_pcl_per_vdev() - Set the PCL command to be sent per
|
||||
* vdev instead of pdev.
|
||||
* @psoc: PSOC pointer
|
||||
* @vdev_id: VDEV id
|
||||
@@ -232,8 +242,8 @@ void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
|
||||
bool pcl_per_vdev);
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_is_pcl_per_vdev_active - API to know if the pcl command needs to be
|
||||
* sent per vdev or not
|
||||
* wlan_cm_roam_is_pcl_per_vdev_active() - API to know if the pcl command needs
|
||||
* to be sent per vdev or not
|
||||
* @psoc: PSOC pointer
|
||||
* @vdev_id: VDEV id
|
||||
*
|
||||
@@ -243,7 +253,7 @@ bool wlan_cm_roam_is_pcl_per_vdev_active(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id);
|
||||
|
||||
/**
|
||||
* wlan_cm_dual_sta_is_freq_allowed - This API is used to check if the
|
||||
* wlan_cm_dual_sta_is_freq_allowed() - This API is used to check if the
|
||||
* provided frequency is allowed for the 2nd STA vdev for connection.
|
||||
* @psoc: Pointer to PSOC object
|
||||
* @freq: Frequency in the given frequency list for the STA that is about to
|
||||
@@ -260,7 +270,7 @@ wlan_cm_dual_sta_is_freq_allowed(struct wlan_objmgr_psoc *psoc, uint32_t freq,
|
||||
enum QDF_OPMODE opmode);
|
||||
|
||||
/**
|
||||
* wlan_cm_dual_sta_roam_update_connect_channels - Fill the allowed channels
|
||||
* wlan_cm_dual_sta_roam_update_connect_channels() - Fill the allowed channels
|
||||
* for connection of the 2nd STA based on the 1st STA connected band if dual
|
||||
* sta roaming is enabled.
|
||||
* @psoc: Pointer to PSOC object
|
||||
@@ -272,7 +282,7 @@ void
|
||||
wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc,
|
||||
struct scan_filter *filter);
|
||||
/**
|
||||
* wlan_cm_roam_set_vendor_btm_params - API to set vendor btm params
|
||||
* wlan_cm_roam_set_vendor_btm_params() - API to set vendor btm params
|
||||
* @psoc: PSOC pointer
|
||||
* @vdev_id: VDEV id
|
||||
* @param: vendor configured roam trigger param
|
||||
@@ -285,7 +295,7 @@ wlan_cm_roam_set_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_cm_roam_vendor_btm_params
|
||||
*param);
|
||||
/**
|
||||
* wlan_cm_roam_disable_vendor_btm - API to disable vendor btm by default
|
||||
* wlan_cm_roam_disable_vendor_btm() - API to disable vendor btm by default
|
||||
* reason
|
||||
* @psoc: PSOC pointer
|
||||
* @vdev_id: VDEV id
|
||||
@@ -296,7 +306,7 @@ void
|
||||
wlan_cm_roam_disable_vendor_btm(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_get_vendor_btm_params - API to get vendor btm param
|
||||
* wlan_cm_roam_get_vendor_btm_params() - API to get vendor btm param
|
||||
* @psoc: PSOC pointer
|
||||
* @vdev_id: VDEV id
|
||||
* @param: vendor configured roam trigger param
|
||||
|
@@ -418,6 +418,149 @@ struct wlan_roam_scan_filter_params {
|
||||
struct roam_scan_filter_params filter_params;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_btm_config - BSS Transition Management offload params
|
||||
* @vdev_id: VDEV on which the parameters should be applied
|
||||
* @btm_offload_config: BTM config
|
||||
* @btm_solicited_timeout: Timeout value for waiting BTM request
|
||||
* @btm_max_attempt_cnt: Maximum attempt for sending BTM query to ESS
|
||||
* @btm_sticky_time: Stick time after roaming to new AP by BTM
|
||||
* @disassoc_timer_threshold: threshold value till which the firmware can
|
||||
* wait before triggering the roam scan after receiving the disassoc iminent
|
||||
* @btm_query_bitmask: bitmask to btm query with candidate list
|
||||
* @btm_candidate_min_score: Minimum score of the AP to consider it as a
|
||||
* candidate if the roam trigger is BTM kickout.
|
||||
*/
|
||||
struct wlan_roam_btm_config {
|
||||
uint8_t vdev_id;
|
||||
uint32_t btm_offload_config;
|
||||
uint32_t btm_solicited_timeout;
|
||||
uint32_t btm_max_attempt_cnt;
|
||||
uint32_t btm_sticky_time;
|
||||
uint32_t disassoc_timer_threshold;
|
||||
uint32_t btm_query_bitmask;
|
||||
uint32_t btm_candidate_min_score;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* struct wlan_roam_neighbor_report_params -neighbour report params
|
||||
* @time_offset: time offset after 11k offload command to trigger a neighbor
|
||||
* report request (in seconds)
|
||||
* @low_rssi_offset: Offset from rssi threshold to trigger a neighbor
|
||||
* report request (in dBm)
|
||||
* @bmiss_count_trigger: Number of beacon miss events to trigger neighbor
|
||||
* report request
|
||||
* @per_threshold_offset: offset from PER threshold to trigger neighbor
|
||||
* report request (in %)
|
||||
* @neighbor_report_cache_timeout: timeout after which new trigger can enable
|
||||
* sending of a neighbor report request (in seconds)
|
||||
* @max_neighbor_report_req_cap: max number of neighbor report requests that
|
||||
* can be sent to the peer in the current session
|
||||
* @ssid: Current connect SSID info
|
||||
*/
|
||||
struct wlan_roam_neighbor_report_params {
|
||||
uint32_t time_offset;
|
||||
uint32_t low_rssi_offset;
|
||||
uint32_t bmiss_count_trigger;
|
||||
uint32_t per_threshold_offset;
|
||||
uint32_t neighbor_report_cache_timeout;
|
||||
uint32_t max_neighbor_report_req_cap;
|
||||
struct wlan_ssid ssid;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_11k_offload_params - offload 11k features to FW
|
||||
* @vdev_id: vdev id
|
||||
* @offload_11k_bitmask: bitmask to specify offloaded features
|
||||
* B0: Neighbor Report Request offload
|
||||
* B1-B31: Reserved
|
||||
* @neighbor_report_params: neighbor report offload params
|
||||
*/
|
||||
struct wlan_roam_11k_offload_params {
|
||||
uint32_t vdev_id;
|
||||
uint32_t offload_11k_bitmask;
|
||||
struct wlan_roam_neighbor_report_params neighbor_report_params;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_disconnect_params - Emergency deauth/disconnect roam params
|
||||
* @vdev_id: VDEV on which the parameters should be applied
|
||||
* @enable: Enable or disable disconnect roaming.
|
||||
*/
|
||||
struct wlan_roam_disconnect_params {
|
||||
uint32_t vdev_id;
|
||||
bool enable;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_idle_params - Idle roam trigger parameters
|
||||
* @vdev_id: VDEV on which the parameters should be applied
|
||||
* @enable: Enable/Disable Idle roaming
|
||||
* @band: Connected AP band
|
||||
* @conn_ap_rssi_delta: Rssi change of connected AP in dBm
|
||||
* @conn_ap_min_rssi: If connected AP rssi is less than min rssi trigger roam
|
||||
* @inactive_time: Connected AP idle time
|
||||
* @data_pkt_count: Data packet count allowed during idle time
|
||||
*/
|
||||
struct wlan_roam_idle_params {
|
||||
uint32_t vdev_id;
|
||||
bool enable;
|
||||
uint32_t band;
|
||||
uint32_t conn_ap_rssi_delta;
|
||||
int32_t conn_ap_min_rssi;
|
||||
uint32_t inactive_time;
|
||||
uint32_t data_pkt_count;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_per_roam_config - per based roaming parameters
|
||||
* @enable: if PER based roaming is enabled/disabled
|
||||
* @tx_high_rate_thresh: high rate threshold at which PER based
|
||||
* roam will stop in tx path
|
||||
* @rx_high_rate_thresh: high rate threshold at which PER based
|
||||
* roam will stop in rx path
|
||||
* @tx_low_rate_thresh: rate below which traffic will be considered
|
||||
* for PER based roaming in Tx path
|
||||
* @rx_low_rate_thresh: rate below which traffic will be considered
|
||||
* for PER based roaming in Tx path
|
||||
* @tx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
|
||||
* will be considered for PER based scan in tx path
|
||||
* @rx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
|
||||
* will be considered for PER based scan in rx path
|
||||
* @per_rest_time: time for which PER based roam will wait once it
|
||||
* issues a roam scan.
|
||||
* @tx_per_mon_time: Minimum time required to be considered as valid scenario
|
||||
* for PER based roam in tx path
|
||||
* @rx_per_mon_time: Minimum time required to be considered as valid scenario
|
||||
* for PER based roam in rx path
|
||||
* @min_candidate_rssi: Minimum RSSI threshold for candidate AP to be used for
|
||||
* PER based roaming
|
||||
*/
|
||||
struct wlan_per_roam_config {
|
||||
uint32_t enable;
|
||||
uint32_t tx_high_rate_thresh;
|
||||
uint32_t rx_high_rate_thresh;
|
||||
uint32_t tx_low_rate_thresh;
|
||||
uint32_t rx_low_rate_thresh;
|
||||
uint32_t tx_rate_thresh_percnt;
|
||||
uint32_t rx_rate_thresh_percnt;
|
||||
uint32_t per_rest_time;
|
||||
uint32_t tx_per_mon_time;
|
||||
uint32_t rx_per_mon_time;
|
||||
uint32_t min_candidate_rssi;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_per_roam_config_req: PER based roaming config request
|
||||
* @vdev_id: vdev id on which config needs to be set
|
||||
* @per_config: PER config
|
||||
*/
|
||||
struct wlan_per_roam_config_req {
|
||||
uint8_t vdev_id;
|
||||
struct wlan_per_roam_config per_config;
|
||||
};
|
||||
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
#define NOISE_FLOOR_DBM_DEFAULT (-96)
|
||||
#define RSSI_MIN_VALUE (-128)
|
||||
@@ -543,6 +686,10 @@ struct wlan_roam_scan_period_params {
|
||||
* @scan_period_params: roam scan period parameters
|
||||
* @profile_params: ap profile parameters
|
||||
* @scan_filter_params: roam scan filter parameters
|
||||
* @btm_config: btm configuration
|
||||
* @roam_11k_params: 11k params
|
||||
* @disconnect_params: disconnect params
|
||||
* @idle_params: idle params
|
||||
*/
|
||||
struct wlan_roam_start_config {
|
||||
struct wlan_roam_offload_scan_rssi_params rssi_params;
|
||||
@@ -552,9 +699,53 @@ struct wlan_roam_start_config {
|
||||
struct wlan_roam_scan_period_params scan_period_params;
|
||||
struct ap_profile_params profile_params;
|
||||
struct wlan_roam_scan_filter_params scan_filter_params;
|
||||
struct wlan_roam_btm_config btm_config;
|
||||
struct wlan_roam_11k_offload_params roam_11k_params;
|
||||
struct wlan_roam_disconnect_params disconnect_params;
|
||||
struct wlan_roam_idle_params idle_params;
|
||||
/* other wmi cmd structures */
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_stop_config - structure containing parameters for
|
||||
* roam stop
|
||||
* @roam_11k_params: 11k params
|
||||
* @btm_config: btm configuration
|
||||
* @scan_filter_params: roam scan filter parameters
|
||||
* @disconnect_params: disconnect params
|
||||
* @idle_params: idle params
|
||||
* @roam_triggers: roam triggers parameters
|
||||
* @rssi_params: roam scan rssi threshold parameters
|
||||
*/
|
||||
struct wlan_roam_stop_config {
|
||||
struct wlan_roam_11k_offload_params roam_11k_params;
|
||||
struct wlan_roam_btm_config btm_config;
|
||||
struct wlan_roam_scan_filter_params scan_filter_params;
|
||||
struct wlan_roam_disconnect_params disconnect_params;
|
||||
struct wlan_roam_idle_params idle_params;
|
||||
struct wlan_roam_triggers roam_triggers;
|
||||
struct wlan_roam_offload_scan_rssi_params rssi_params;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_update_config - structure containing parameters for
|
||||
* roam update config
|
||||
* @beacon_miss_cnt: roam beacon miss count parameters
|
||||
* @scan_filter_params: roam scan filter parameters
|
||||
* @scan_period_params: roam scan period parameters
|
||||
* @rssi_params: roam scan rssi threshold parameters
|
||||
* @disconnect_params: disconnect params
|
||||
* @idle_params: idle params
|
||||
*/
|
||||
struct wlan_roam_update_config {
|
||||
struct wlan_roam_beacon_miss_cnt beacon_miss_cnt;
|
||||
struct wlan_roam_scan_filter_params scan_filter_params;
|
||||
struct wlan_roam_scan_period_params scan_period_params;
|
||||
struct wlan_roam_offload_scan_rssi_params rssi_params;
|
||||
struct wlan_roam_disconnect_params disconnect_params;
|
||||
struct wlan_roam_idle_params idle_params;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||
@@ -658,6 +849,7 @@ struct set_pcl_req {
|
||||
* module initialize request
|
||||
* @send_roam_start_req: TX ops function pointer to send roam start related
|
||||
* commands
|
||||
* @send_roam_abort: send roam abort
|
||||
*/
|
||||
struct wlan_cm_roam_tx_ops {
|
||||
QDF_STATUS (*send_vdev_set_pcl_cmd) (struct wlan_objmgr_vdev *vdev,
|
||||
@@ -669,6 +861,14 @@ struct wlan_cm_roam_tx_ops {
|
||||
|
||||
QDF_STATUS (*send_roam_start_req)(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_start_config *req);
|
||||
QDF_STATUS (*send_roam_stop_offload)(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_stop_config *req);
|
||||
QDF_STATUS (*send_roam_update_config)(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_update_config *req);
|
||||
QDF_STATUS (*send_roam_abort)(struct wlan_objmgr_vdev *vdev,
|
||||
uint8_t vdev_id);
|
||||
QDF_STATUS (*send_roam_per_config)(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_per_roam_config_req *req);
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@@ -28,7 +28,7 @@
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
|
||||
/**
|
||||
* ucfg_user_space_enable_disable_rso - Enable/Disable Roam Scan offload
|
||||
* ucfg_user_space_enable_disable_rso() - Enable/Disable Roam Scan offload
|
||||
* to firmware.
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
@@ -55,7 +55,7 @@ QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id);
|
||||
|
||||
/**
|
||||
* ucfg_cm_rso_init_deinit - Init or Deinit roaming module at firmware
|
||||
* ucfg_cm_rso_init_deinit() - Init or Deinit roaming module at firmware
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @enable: true: Send RSO init and RSO enable
|
||||
@@ -71,7 +71,7 @@ ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_cm_disable_rso - Disable roam scan offload to firmware
|
||||
* ucfg_cm_disable_rso() - Disable roam scan offload to firmware
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @requestor: RSO disable requestor
|
||||
@@ -88,7 +88,7 @@ QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_cm_enable_rso - Enable roam scan offload to firmware
|
||||
* ucfg_cm_enable_rso() - Enable roam scan offload to firmware
|
||||
* @pdev: Pointer to pdev
|
||||
* @vdev_id: vdev id
|
||||
* @requestor: RSO disable requestor
|
||||
|
@@ -30,7 +30,7 @@
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
/**
|
||||
* wlan_cm_roam_send_set_vdev_pcl - Send vdev set pcl command to firmware
|
||||
* wlan_cm_roam_send_set_vdev_pcl() - Send vdev set pcl command to firmware
|
||||
* @psoc: PSOC pointer
|
||||
* @pcl_req: Set pcl request structure pointer
|
||||
*
|
||||
@@ -51,8 +51,8 @@ wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc,
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_offload_init - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD to
|
||||
* init/deinit roaming module at firmware
|
||||
* wlan_cm_tgt_send_roam_offload_init() - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD
|
||||
* to init/deinit roaming module at firmware
|
||||
* @psoc: PSOC pointer
|
||||
* @vdev_id: vdev id
|
||||
* @is_init: true if roam module is to be initialized else false for deinit
|
||||
@@ -63,7 +63,7 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id, bool is_init);
|
||||
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_start_req - Send roam start command to firmware
|
||||
* wlan_cm_tgt_send_roam_start_req() - Send roam start command to firmware
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @req: roam start config parameter
|
||||
@@ -73,6 +73,52 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_start_config *req);
|
||||
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_stop_req() - Send roam stop command to firmware
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @req: roam stop config parameter
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_stop_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_stop_config *req);
|
||||
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_start_req() - Send roam update command to firmware
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @req: roam update config parameter
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_update_config *req);
|
||||
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_abort_req() - Send roam abort command to firmware
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_abort_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id);
|
||||
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_per_config() - Send roam per config command to FW
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_per_config(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_per_roam_config_req *req);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
#endif /* CM_TGT_IF_TX_API_H__ */
|
||||
|
@@ -92,7 +92,7 @@ QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev,
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
return status;
|
||||
|
||||
status = cm_roam_state_change(pdev, vdev_id,
|
||||
status = cm_roam_send_rso_cmd(psoc, vdev_id,
|
||||
ROAM_SCAN_OFFLOAD_ABORT_SCAN,
|
||||
REASON_ROAM_ABORT_ROAM_SCAN);
|
||||
cm_roam_release_lock();
|
||||
|
@@ -169,6 +169,8 @@ QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
|
||||
init_msg.roam_offload_flag |=
|
||||
WLAN_ROAM_BMISS_FINAL_SCAN_TYPE;
|
||||
}
|
||||
mlme_debug("vdev_id:%d, is_init:%d, flag:%d", vdev_id, is_init,
|
||||
init_msg.roam_offload_flag);
|
||||
|
||||
status = roam_tx_ops.send_roam_offload_init_req(vdev, &init_msg);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
@@ -194,17 +196,138 @@ QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
|
||||
if (!roam_tx_ops.send_roam_start_req) {
|
||||
mlme_err("CM_RSO: vdev%d send_roam_start_req is NULL", vdev_id);
|
||||
mlme_err("CM_RSO: vdev %d send_roam_start_req is NULL",
|
||||
vdev_id);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
status = roam_tx_ops.send_roam_start_req(vdev, req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("CM_RSO: vdev%d fail to send roam start", vdev_id);
|
||||
mlme_debug("CM_RSO: vdev %d fail to send roam start", vdev_id);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_stop_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_stop_config *req)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct wlan_cm_roam_tx_ops roam_tx_ops;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_NB_ID);
|
||||
if (!vdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
|
||||
if (!roam_tx_ops.send_roam_stop_offload) {
|
||||
mlme_err("CM_RSO: vdev %d send_roam_stop_offload is NULL",
|
||||
vdev_id);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
status = roam_tx_ops.send_roam_stop_offload(vdev, req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("CM_RSO: vdev %d fail to send roam stop", vdev_id);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_update_config *req)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct wlan_cm_roam_tx_ops roam_tx_ops;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_NB_ID);
|
||||
if (!vdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
|
||||
if (!roam_tx_ops.send_roam_update_config) {
|
||||
mlme_err("CM_RSO: vdev %d send_roam_update_config is NULL",
|
||||
vdev_id);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
status = roam_tx_ops.send_roam_update_config(vdev, req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("CM_RSO: vdev %d fail to send roam update", vdev_id);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_abort_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct wlan_cm_roam_tx_ops roam_tx_ops;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_NB_ID);
|
||||
if (!vdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
|
||||
if (!roam_tx_ops.send_roam_abort) {
|
||||
mlme_err("CM_RSO: vdev %d send_roam_abort is NULL", vdev_id);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
status = roam_tx_ops.send_roam_abort(vdev, vdev_id);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("CM_RSO: vdev %d fail to send roam abort", vdev_id);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_per_config(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_per_roam_config_req *req)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct wlan_cm_roam_tx_ops roam_tx_ops;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_NB_ID);
|
||||
if (!vdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
|
||||
if (!roam_tx_ops.send_roam_per_config) {
|
||||
mlme_err("CM_RSO: vdev %d send_roam_per_config is NULL",
|
||||
vdev_id);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
status = roam_tx_ops.send_roam_per_config(vdev, req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_debug("CM_RSO: vdev %d fail to send per config", vdev_id);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
@@ -225,24 +225,24 @@ QDF_STATUS wmi_unified_set_roam_triggers(wmi_unified_t wmi_handle,
|
||||
* wmi_unified_send_disconnect_roam_params() - Send disconnect roam trigger
|
||||
* parameters to firmware
|
||||
* @wmi_hdl: wmi handle
|
||||
* @params: pointer to wmi_disconnect_roam_params
|
||||
* @params: pointer to wlan_roam_disconnect_params
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
|
||||
struct wmi_disconnect_roam_params *req);
|
||||
struct wlan_roam_disconnect_params *req);
|
||||
|
||||
/**
|
||||
* wmi_unified_send_idle_roam_params() - Send idle roam trigger params to fw
|
||||
* @wmi_hdl: wmi handle
|
||||
* @params: pointer to wmi_idle_roam_params
|
||||
* @params: pointer to wlan_roam_idle_params
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle,
|
||||
struct wmi_idle_roam_params *req);
|
||||
struct wlan_roam_idle_params *req);
|
||||
|
||||
/**
|
||||
* wmi_unified_send_roam_preauth_status() - Send roam preauthentication status
|
||||
@@ -359,7 +359,7 @@ wmi_unified_roam_scan_offload_rssi_change_cmd(wmi_unified_t wmi_handle,
|
||||
*/
|
||||
QDF_STATUS
|
||||
wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle,
|
||||
struct wmi_per_roam_config_req *req_buf);
|
||||
struct wlan_per_roam_config_req *req_buf);
|
||||
|
||||
/**
|
||||
* wmi_unified_send_limit_off_chan_cmd() - send wmi cmd of limit off channel
|
||||
@@ -388,12 +388,12 @@ QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle,
|
||||
/**
|
||||
* wmi_unified_send_btm_config() - Send BTM config to fw
|
||||
* @wmi_handle: wmi handle
|
||||
* @params: pointer to wmi_btm_config
|
||||
* @params: pointer to wlan_roam_btm_config
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle,
|
||||
struct wmi_btm_config *params);
|
||||
struct wlan_roam_btm_config *params);
|
||||
|
||||
/**
|
||||
* wmi_unified_send_bss_load_config() - Send bss load trigger params to fw
|
||||
@@ -414,8 +414,9 @@ QDF_STATUS wmi_unified_send_bss_load_config(wmi_unified_t wmi_handle,
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
|
||||
*/
|
||||
QDF_STATUS wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
|
||||
struct wmi_11k_offload_params *params);
|
||||
QDF_STATUS
|
||||
wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_11k_offload_params *params);
|
||||
/**
|
||||
* wmi_unified_invoke_neighbor_report_cmd() - send invoke neighbor report cmd
|
||||
* @wmi_handle: wmi handle
|
||||
|
@@ -234,54 +234,6 @@ struct wmi_roam_invoke_cmd {
|
||||
bool forced_roaming;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_per_roam_config - per based roaming parameters
|
||||
* @enable: if PER based roaming is enabled/disabled
|
||||
* @tx_high_rate_thresh: high rate threshold at which PER based
|
||||
* roam will stop in tx path
|
||||
* @rx_high_rate_thresh: high rate threshold at which PER based
|
||||
* roam will stop in rx path
|
||||
* @tx_low_rate_thresh: rate below which traffic will be considered
|
||||
* for PER based roaming in Tx path
|
||||
* @rx_low_rate_thresh: rate below which traffic will be considered
|
||||
* for PER based roaming in Tx path
|
||||
* @tx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
|
||||
* will be considered for PER based scan in tx path
|
||||
* @rx_rate_thresh_percnt: % above which when traffic is below low_rate_thresh
|
||||
* will be considered for PER based scan in rx path
|
||||
* @per_rest_time: time for which PER based roam will wait once it
|
||||
* issues a roam scan.
|
||||
* @tx_per_mon_time: Minimum time required to be considered as valid scenario
|
||||
* for PER based roam in tx path
|
||||
* @rx_per_mon_time: Minimum time required to be considered as valid scenario
|
||||
* for PER based roam in rx path
|
||||
* @min_candidate_rssi: Minimum RSSI threshold for candidate AP to be used for
|
||||
* PER based roaming
|
||||
*/
|
||||
struct wmi_per_roam_config {
|
||||
uint32_t enable;
|
||||
uint32_t tx_high_rate_thresh;
|
||||
uint32_t rx_high_rate_thresh;
|
||||
uint32_t tx_low_rate_thresh;
|
||||
uint32_t rx_low_rate_thresh;
|
||||
uint32_t tx_rate_thresh_percnt;
|
||||
uint32_t rx_rate_thresh_percnt;
|
||||
uint32_t per_rest_time;
|
||||
uint32_t tx_per_mon_time;
|
||||
uint32_t rx_per_mon_time;
|
||||
uint32_t min_candidate_rssi;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_per_roam_config_req: PER based roaming config request
|
||||
* @vdev_id: vdev id on which config needs to be set
|
||||
* @per_config: PER config
|
||||
*/
|
||||
struct wmi_per_roam_config_req {
|
||||
uint8_t vdev_id;
|
||||
struct wmi_per_roam_config per_config;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_limit_off_chan_param - limit off channel parameters
|
||||
* @vdev_id: vdev id
|
||||
@@ -311,30 +263,6 @@ struct hlp_params {
|
||||
uint8_t hlp_ie[WMI_MAX_HLP_IE_LEN];
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_btm_config - BSS Transition Management offload params
|
||||
* @vdev_id: VDEV on which the parameters should be applied
|
||||
* @btm_offload_config: BTM config
|
||||
* @btm_solicited_timeout: Timeout value for waiting BTM request
|
||||
* @btm_max_attempt_cnt: Maximum attempt for sending BTM query to ESS
|
||||
* @btm_sticky_time: Stick time after roaming to new AP by BTM
|
||||
* @disassoc_timer_threshold: threshold value till which the firmware can
|
||||
* wait before triggering the roam scan after receiving the disassoc iminent
|
||||
* @btm_query_bitmask: bitmask to btm query with candidate list
|
||||
* @btm_candidate_min_score: Minimum score of the AP to consider it as a
|
||||
* candidate if the roam trigger is BTM kickout.
|
||||
*/
|
||||
struct wmi_btm_config {
|
||||
uint8_t vdev_id;
|
||||
uint32_t btm_offload_config;
|
||||
uint32_t btm_solicited_timeout;
|
||||
uint32_t btm_max_attempt_cnt;
|
||||
uint32_t btm_sticky_time;
|
||||
uint32_t disassoc_timer_threshold;
|
||||
uint32_t btm_query_bitmask;
|
||||
uint32_t btm_candidate_min_score;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_bss_load_config - BSS load trigger parameters
|
||||
* @vdev_id: VDEV on which the parameters should be applied
|
||||
@@ -356,36 +284,6 @@ struct wmi_bss_load_config {
|
||||
int32_t rssi_threshold_24ghz;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_idle_roam_params - Idle roam trigger parameters
|
||||
* @vdev_id: VDEV on which the parameters should be applied
|
||||
* @enable: Enable/Disable Idle roaming
|
||||
* @band: Connected AP band
|
||||
* @conn_ap_rssi_delta: Rssi change of connected AP in dBm
|
||||
* @conn_ap_min_rssi: If connected AP rssi is less than min rssi trigger roam
|
||||
* @inactive_time: Connected AP idle time
|
||||
* @data_pkt_count: Data packet count allowed during idle time
|
||||
*/
|
||||
struct wmi_idle_roam_params {
|
||||
uint32_t vdev_id;
|
||||
bool enable;
|
||||
uint32_t band;
|
||||
uint32_t conn_ap_rssi_delta;
|
||||
int32_t conn_ap_min_rssi;
|
||||
uint32_t inactive_time;
|
||||
uint32_t data_pkt_count;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_disconnect_roam_params - Emergency deauth/disconnect roam params
|
||||
* @vdev_id: VDEV on which the parameters should be applied
|
||||
* @enable: Enable or disable disconnect roaming.
|
||||
*/
|
||||
struct wmi_disconnect_roam_params {
|
||||
uint32_t vdev_id;
|
||||
bool enable;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_roam_auth_status_params - WPA3 roam auth response status
|
||||
* parameters
|
||||
@@ -404,45 +302,6 @@ struct wmi_roam_auth_status_params {
|
||||
uint8_t pmkid[PMKID_LEN];
|
||||
};
|
||||
|
||||
/**
|
||||
* @time_offset: time offset after 11k offload command to trigger a neighbor
|
||||
* report request (in seconds)
|
||||
* @low_rssi_offset: Offset from rssi threshold to trigger a neighbor
|
||||
* report request (in dBm)
|
||||
* @bmiss_count_trigger: Number of beacon miss events to trigger neighbor
|
||||
* report request
|
||||
* @per_threshold_offset: offset from PER threshold to trigger neighbor
|
||||
* report request (in %)
|
||||
* @neighbor_report_cache_timeout: timeout after which new trigger can enable
|
||||
* sending of a neighbor report request (in seconds)
|
||||
* @max_neighbor_report_req_cap: max number of neighbor report requests that
|
||||
* can be sent to the peer in the current session
|
||||
* @ssid: Current connect SSID info
|
||||
*/
|
||||
struct wmi_11k_offload_neighbor_report_params {
|
||||
uint32_t time_offset;
|
||||
uint32_t low_rssi_offset;
|
||||
uint32_t bmiss_count_trigger;
|
||||
uint32_t per_threshold_offset;
|
||||
uint32_t neighbor_report_cache_timeout;
|
||||
uint32_t max_neighbor_report_req_cap;
|
||||
struct wlan_ssid ssid;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_11k_offload_params - offload 11k features to FW
|
||||
* @vdev_id: vdev id
|
||||
* @offload_11k_bitmask: bitmask to specify offloaded features
|
||||
* B0: Neighbor Report Request offload
|
||||
* B1-B31: Reserved
|
||||
* @neighbor_report_params: neighbor report offload params
|
||||
*/
|
||||
struct wmi_11k_offload_params {
|
||||
uint32_t vdev_id;
|
||||
uint32_t offload_11k_bitmask;
|
||||
struct wmi_11k_offload_neighbor_report_params neighbor_report_params;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wmi_invoke_neighbor_report_params - Invoke neighbor report request
|
||||
* from IW to FW
|
||||
|
@@ -170,7 +170,7 @@ QDF_STATUS wmi_unified_roam_invoke_cmd(wmi_unified_t wmi_handle,
|
||||
|
||||
QDF_STATUS
|
||||
wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
|
||||
struct wmi_disconnect_roam_params *req)
|
||||
struct wlan_roam_disconnect_params *req)
|
||||
{
|
||||
if (wmi_handle->ops->send_disconnect_roam_params)
|
||||
return wmi_handle->ops->send_disconnect_roam_params(wmi_handle,
|
||||
@@ -180,7 +180,7 @@ wmi_unified_send_disconnect_roam_params(wmi_unified_t wmi_handle,
|
||||
|
||||
QDF_STATUS
|
||||
wmi_unified_send_idle_roam_params(wmi_unified_t wmi_handle,
|
||||
struct wmi_idle_roam_params *req)
|
||||
struct wlan_roam_idle_params *req)
|
||||
{
|
||||
if (wmi_handle->ops->send_idle_roam_params)
|
||||
return wmi_handle->ops->send_idle_roam_params(wmi_handle,
|
||||
@@ -276,7 +276,7 @@ wmi_unified_roam_scan_offload_rssi_change_cmd(wmi_unified_t wmi_handle,
|
||||
|
||||
QDF_STATUS
|
||||
wmi_unified_set_per_roam_config(wmi_unified_t wmi_handle,
|
||||
struct wmi_per_roam_config_req *req_buf)
|
||||
struct wlan_per_roam_config_req *req_buf)
|
||||
{
|
||||
if (wmi_handle->ops->send_per_roam_config_cmd)
|
||||
return wmi_handle->ops->send_per_roam_config_cmd(wmi_handle,
|
||||
@@ -309,7 +309,7 @@ QDF_STATUS wmi_unified_roam_send_hlp_cmd(wmi_unified_t wmi_handle,
|
||||
#endif /* WLAN_FEATURE_FILS_SK */
|
||||
|
||||
QDF_STATUS wmi_unified_send_btm_config(wmi_unified_t wmi_handle,
|
||||
struct wmi_btm_config *params)
|
||||
struct wlan_roam_btm_config *params)
|
||||
{
|
||||
if (wmi_handle->ops->send_btm_config)
|
||||
return wmi_handle->ops->send_btm_config(wmi_handle,
|
||||
@@ -328,9 +328,9 @@ QDF_STATUS wmi_unified_send_bss_load_config(wmi_unified_t wmi_handle,
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
QDF_STATUS wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
|
||||
struct wmi_11k_offload_params *params)
|
||||
QDF_STATUS
|
||||
wmi_unified_offload_11k_cmd(wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_11k_offload_params *params)
|
||||
{
|
||||
if (wmi_handle->ops->send_offload_11k_cmd)
|
||||
return wmi_handle->ops->send_offload_11k_cmd(wmi_handle,
|
||||
|
@@ -2613,7 +2613,7 @@ error:
|
||||
*/
|
||||
static QDF_STATUS
|
||||
send_per_roam_config_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
struct wmi_per_roam_config_req *req_buf)
|
||||
struct wlan_per_roam_config_req *req_buf)
|
||||
{
|
||||
wmi_buf_t buf = NULL;
|
||||
QDF_STATUS status;
|
||||
@@ -2785,12 +2785,12 @@ void wmi_fils_sk_attach_tlv(wmi_unified_t wmi_handle)
|
||||
/*
|
||||
* send_btm_config_cmd_tlv() - Send wmi cmd for BTM config
|
||||
* @wmi_handle: wmi handle
|
||||
* @params: pointer to wmi_btm_config
|
||||
* @params: pointer to wlan_roam_btm_config
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS send_btm_config_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
struct wmi_btm_config *params)
|
||||
struct wlan_roam_btm_config *params)
|
||||
{
|
||||
wmi_btm_config_fixed_param *cmd;
|
||||
wmi_buf_t buf;
|
||||
@@ -2883,7 +2883,7 @@ send_roam_bss_load_config_tlv(wmi_unified_t wmi_handle,
|
||||
/**
|
||||
* send_disconnect_roam_params_tlv() - send disconnect roam trigger parameters
|
||||
* @wmi_handle: wmi handle
|
||||
* @disconnect_roam: pointer to wmi_disconnect_roam_params which carries the
|
||||
* @disconnect_roam: pointer to wlan_roam_disconnect_params which carries the
|
||||
* disconnect_roam_trigger parameters from CSR
|
||||
*
|
||||
* This function sends the disconnect roam trigger parameters to fw.
|
||||
@@ -2892,7 +2892,7 @@ send_roam_bss_load_config_tlv(wmi_unified_t wmi_handle,
|
||||
*/
|
||||
static QDF_STATUS
|
||||
send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
|
||||
struct wmi_disconnect_roam_params *req)
|
||||
struct wlan_roam_disconnect_params *req)
|
||||
{
|
||||
wmi_roam_deauth_config_cmd_fixed_param *cmd;
|
||||
wmi_buf_t buf;
|
||||
@@ -2929,7 +2929,7 @@ send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
|
||||
/**
|
||||
* send_idle_roam_params_tlv() - send idle roam trigger parameters
|
||||
* @wmi_handle: wmi handle
|
||||
* @idle_roam_params: pointer to wmi_idle_roam_params which carries the
|
||||
* @idle_roam_params: pointer to wlan_roam_idle_params which carries the
|
||||
* idle roam parameters from CSR
|
||||
*
|
||||
* This function sends the idle roam trigger parameters to fw.
|
||||
@@ -2938,7 +2938,7 @@ send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
|
||||
*/
|
||||
static QDF_STATUS
|
||||
send_idle_roam_params_tlv(wmi_unified_t wmi_handle,
|
||||
struct wmi_idle_roam_params *idle_roam_params)
|
||||
struct wlan_roam_idle_params *idle_roam_params)
|
||||
{
|
||||
wmi_roam_idle_config_cmd_fixed_param *cmd;
|
||||
wmi_buf_t buf;
|
||||
@@ -3036,14 +3036,14 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle,
|
||||
#else
|
||||
static inline QDF_STATUS
|
||||
send_disconnect_roam_params_tlv(wmi_unified_t wmi_handle,
|
||||
struct wmi_disconnect_roam_params *req)
|
||||
struct wlan_roam_disconnect_params *req)
|
||||
{
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
static inline QDF_STATUS
|
||||
send_idle_roam_params_tlv(wmi_unified_t wmi_handle,
|
||||
struct wmi_idle_roam_params *idle_roam_params)
|
||||
struct wlan_roam_idle_params *idle_roam_params)
|
||||
{
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
@@ -3065,7 +3065,7 @@ send_roam_preauth_status_tlv(wmi_unified_t wmi_handle,
|
||||
*/
|
||||
static QDF_STATUS
|
||||
send_offload_11k_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
struct wmi_11k_offload_params *params)
|
||||
struct wlan_roam_11k_offload_params *params)
|
||||
{
|
||||
wmi_11k_offload_report_fixed_param *cmd;
|
||||
wmi_buf_t buf;
|
||||
|
@@ -2211,8 +2211,8 @@ struct roam_offload_scan_req {
|
||||
bool is_sae_single_pmk;
|
||||
bool enable_ft_im_roaming;
|
||||
/* Idle/Disconnect roam parameters */
|
||||
struct wmi_idle_roam_params idle_roam_params;
|
||||
struct wmi_disconnect_roam_params disconnect_roam_params;
|
||||
struct wlan_roam_idle_params idle_roam_params;
|
||||
struct wlan_roam_disconnect_params disconnect_roam_params;
|
||||
#endif
|
||||
struct roam_ext_params roam_params;
|
||||
struct wlan_roam_triggers roam_triggers;
|
||||
@@ -2239,7 +2239,7 @@ struct roam_offload_scan_req {
|
||||
uint32_t rct_validity_timer;
|
||||
uint32_t disassoc_timer_threshold;
|
||||
uint32_t btm_trig_min_candidate_score;
|
||||
struct wmi_11k_offload_params offload_11k_params;
|
||||
struct wlan_roam_11k_offload_params offload_11k_params;
|
||||
uint32_t ho_delay_for_rx;
|
||||
uint32_t roam_preauth_retry_count;
|
||||
uint32_t roam_preauth_no_ack_timeout;
|
||||
|
@@ -237,8 +237,10 @@ enum eWniMsgTypes {
|
||||
eWNI_SME_ANTENNA_ISOLATION_RSP = SIR_SME_MSG_TYPES_BEGIN + 155,
|
||||
eWNI_SME_MON_DEINIT_SESSION = SIR_SME_MSG_TYPES_BEGIN + 156,
|
||||
eWNI_SME_VDEV_DELETE_RSP = SIR_SME_MSG_TYPES_BEGIN + 157,
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
eWNI_SME_ROAM_INIT_PARAM = SIR_SME_MSG_TYPES_BEGIN + 158,
|
||||
eWNI_SME_ROAM_SEND_PER_REQ = SIR_SME_MSG_TYPES_BEGIN + 159,
|
||||
#endif
|
||||
eWNI_SME_GET_ROAM_SCAN_CH_LIST_EVENT =
|
||||
SIR_SME_MSG_TYPES_BEGIN + 160,
|
||||
eWNI_SME_MONITOR_MODE_VDEV_UP = SIR_SME_MSG_TYPES_BEGIN + 161,
|
||||
|
@@ -576,7 +576,9 @@ struct sir_cfg_action_frm_tb_ppdu {
|
||||
|
||||
/* (SIR_HAL_ITC_MSG_TYPES_BEGIN + 370) is unused */
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
#define SIR_HAL_SET_PER_ROAM_CONFIG_CMD (SIR_HAL_ITC_MSG_TYPES_BEGIN + 371)
|
||||
#endif
|
||||
#define SIR_HAL_RX_CHN_STATUS_EVENT (SIR_HAL_ITC_MSG_TYPES_BEGIN + 372)
|
||||
|
||||
#define SIR_HAL_GET_RCPI_REQ (SIR_HAL_ITC_MSG_TYPES_BEGIN + 373)
|
||||
@@ -588,7 +590,10 @@ struct sir_cfg_action_frm_tb_ppdu {
|
||||
|
||||
#define SIR_HAL_HIDDEN_SSID_RESTART_RSP (SIR_HAL_ITC_MSG_TYPES_BEGIN + 379)
|
||||
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
#define SIR_HAL_INIT_ROAM_OFFLOAD_PARAM (SIR_HAL_ITC_MSG_TYPES_BEGIN + 380)
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Unused SIR_HAL_ITC_MSG_TYPES_BEGIN + 381 to
|
||||
|
@@ -1761,9 +1761,11 @@ static void lim_process_messages(struct mac_context *mac_ctx,
|
||||
case eWNI_SME_ROAM_INVOKE:
|
||||
/* fall through */
|
||||
case eWNI_SME_ROAM_SCAN_OFFLOAD_REQ:
|
||||
case eWNI_SME_ROAM_INIT_PARAM:
|
||||
case eWNI_SME_ROAM_SEND_SET_PCL_REQ:
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
case eWNI_SME_ROAM_INIT_PARAM:
|
||||
case eWNI_SME_ROAM_SEND_PER_REQ:
|
||||
#endif
|
||||
case eWNI_SME_SET_ADDBA_ACCEPT:
|
||||
case eWNI_SME_UPDATE_EDCA_PROFILE:
|
||||
case WNI_SME_UPDATE_MU_EDCA_PARAMS:
|
||||
|
@@ -3489,6 +3489,7 @@ static void __lim_process_roam_scan_offload_req(struct mac_context *mac_ctx,
|
||||
}
|
||||
|
||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
/**
|
||||
* lim_send_roam_offload_init() - Process Roam offload flag from csr
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
@@ -3534,7 +3535,7 @@ static void lim_send_roam_per_command(struct mac_context *mac_ctx,
|
||||
qdf_mem_free(msg_buf);
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
/**
|
||||
* lim_send_roam_set_pcl() - Process Roam offload flag from csr
|
||||
* @mac_ctx: Pointer to Global MAC structure
|
||||
@@ -3558,6 +3559,8 @@ static void lim_send_roam_set_pcl(struct mac_context *mac_ctx,
|
||||
}
|
||||
}
|
||||
#else
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
static void lim_send_roam_offload_init(struct mac_context *mac_ctx,
|
||||
uint32_t *msg_buf)
|
||||
{
|
||||
@@ -3569,7 +3572,7 @@ static void lim_send_roam_per_command(struct mac_context *mac_ctx,
|
||||
{
|
||||
qdf_mem_free(msg_buf);
|
||||
}
|
||||
|
||||
#endif
|
||||
static inline void lim_send_roam_set_pcl(struct mac_context *mac_ctx,
|
||||
struct set_pcl_req *msg_buf)
|
||||
{
|
||||
@@ -4644,18 +4647,20 @@ bool lim_process_sme_req_messages(struct mac_context *mac,
|
||||
__lim_process_roam_scan_offload_req(mac, msg_buf);
|
||||
bufConsumed = false;
|
||||
break;
|
||||
case eWNI_SME_ROAM_INIT_PARAM:
|
||||
lim_send_roam_offload_init(mac, msg_buf);
|
||||
bufConsumed = false;
|
||||
break;
|
||||
case eWNI_SME_ROAM_SEND_SET_PCL_REQ:
|
||||
lim_send_roam_set_pcl(mac, (struct set_pcl_req *)msg_buf);
|
||||
bufConsumed = false;
|
||||
break;
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
case eWNI_SME_ROAM_INIT_PARAM:
|
||||
lim_send_roam_offload_init(mac, msg_buf);
|
||||
bufConsumed = false;
|
||||
break;
|
||||
case eWNI_SME_ROAM_SEND_PER_REQ:
|
||||
lim_send_roam_per_command(mac, msg_buf);
|
||||
bufConsumed = false;
|
||||
break;
|
||||
#endif
|
||||
case eWNI_SME_ROAM_INVOKE:
|
||||
lim_process_roam_invoke(mac, msg_buf);
|
||||
bufConsumed = false;
|
||||
|
@@ -350,7 +350,9 @@ uint8_t *mac_trace_get_sme_msg_string(uint16_t sme_msg)
|
||||
CASE_RETURN_STRING(eWNI_SME_UPDATE_ACCESS_POLICY_VENDOR_IE);
|
||||
CASE_RETURN_STRING(eWNI_SME_DEFAULT_SCAN_IE);
|
||||
CASE_RETURN_STRING(eWNI_SME_ROAM_SCAN_OFFLOAD_REQ);
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
CASE_RETURN_STRING(eWNI_SME_ROAM_INIT_PARAM);
|
||||
#endif
|
||||
CASE_RETURN_STRING(eWNI_SME_LOST_LINK_INFO_IND);
|
||||
CASE_RETURN_STRING(eWNI_SME_GET_PEER_INFO_EXT_IND);
|
||||
CASE_RETURN_STRING(eWNI_SME_RSO_CMD_STATUS_IND);
|
||||
@@ -600,7 +602,9 @@ uint8_t *mac_trace_get_wma_msg_string(uint16_t wma_msg)
|
||||
CASE_RETURN_STRING(WMA_SET_RSSI_MONITOR_REQ);
|
||||
CASE_RETURN_STRING(WMA_SET_WISA_PARAMS);
|
||||
CASE_RETURN_STRING(WMA_SET_WOW_PULSE_CMD);
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
CASE_RETURN_STRING(WMA_SET_PER_ROAM_CONFIG_CMD);
|
||||
#endif
|
||||
CASE_RETURN_STRING(WMA_GET_RCPI_REQ);
|
||||
CASE_RETURN_STRING(WMA_SET_DBS_SCAN_SEL_CONF_PARAMS);
|
||||
CASE_RETURN_STRING(WMA_GET_ROAM_SCAN_STATS);
|
||||
|
@@ -16998,6 +16998,64 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
|
||||
|
||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||
|
||||
/**
|
||||
* csr_update_btm_offload_config() - Update btm config param to fw
|
||||
* @mac_ctx: Global mac ctx
|
||||
* @command: Roam offload command
|
||||
* @btm_offload_config: btm offload config
|
||||
* @session: roam session
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void csr_update_btm_offload_config(struct mac_context *mac_ctx,
|
||||
uint8_t command,
|
||||
uint32_t *btm_offload_config,
|
||||
struct csr_roam_session *session)
|
||||
{
|
||||
struct wlan_objmgr_peer *peer;
|
||||
bool is_pmf_enabled;
|
||||
|
||||
*btm_offload_config =
|
||||
mac_ctx->mlme_cfg->btm.btm_offload_config;
|
||||
|
||||
/* Return if INI is disabled */
|
||||
if (!(*btm_offload_config))
|
||||
return;
|
||||
|
||||
/* For RSO Stop Disable BTM offload to firmware */
|
||||
if (command == ROAM_SCAN_OFFLOAD_STOP) {
|
||||
*btm_offload_config = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!session->pConnectBssDesc) {
|
||||
sme_err("Connected Bss Desc is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
peer = wlan_objmgr_get_peer(mac_ctx->psoc,
|
||||
wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev),
|
||||
session->pConnectBssDesc->bssId,
|
||||
WLAN_LEGACY_SME_ID);
|
||||
if (!peer) {
|
||||
sme_debug("Peer of peer_mac %pM not found",
|
||||
session->pConnectBssDesc->bssId);
|
||||
return;
|
||||
}
|
||||
|
||||
is_pmf_enabled = mlme_get_peer_pmf_status(peer);
|
||||
wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_SME_ID);
|
||||
sme_debug("get is_pmf_enabled %d for %pM", is_pmf_enabled,
|
||||
session->pConnectBssDesc->bssId);
|
||||
|
||||
/* If peer does not support PMF in case of OCE/MBO
|
||||
* Connection, Disable BTM offload to firmware.
|
||||
*/
|
||||
if (session->pConnectBssDesc->mbo_oce_enabled_ap &&
|
||||
!is_pmf_enabled)
|
||||
*btm_offload_config = 0;
|
||||
}
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
/**
|
||||
* csr_populate_roam_chan_list()
|
||||
@@ -17334,64 +17392,6 @@ csr_rso_command_fill_rsn_caps(struct mac_context *mac_ctx, uint8_t vdev_id,
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_SME_ID);
|
||||
}
|
||||
|
||||
/**
|
||||
* csr_update_btm_offload_config() - Update btm config param to fw
|
||||
* @mac_ctx: Global mac ctx
|
||||
* @command: Roam offload command
|
||||
* @req_buf: roam offload scan request
|
||||
* @session: roam session
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void csr_update_btm_offload_config(struct mac_context *mac_ctx,
|
||||
uint8_t command,
|
||||
struct roam_offload_scan_req *req_buf,
|
||||
struct csr_roam_session *session)
|
||||
{
|
||||
struct wlan_objmgr_peer *peer;
|
||||
bool is_pmf_enabled;
|
||||
|
||||
req_buf->btm_offload_config =
|
||||
mac_ctx->mlme_cfg->btm.btm_offload_config;
|
||||
|
||||
/* Return if INI is disabled */
|
||||
if (!req_buf->btm_offload_config)
|
||||
return;
|
||||
|
||||
/* For RSO Stop Disable BTM offload to firmware */
|
||||
if (command == ROAM_SCAN_OFFLOAD_STOP) {
|
||||
req_buf->btm_offload_config = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if (!session->pConnectBssDesc) {
|
||||
sme_err("Connected Bss Desc is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
peer = wlan_objmgr_get_peer(mac_ctx->psoc,
|
||||
wlan_objmgr_pdev_get_pdev_id(mac_ctx->pdev),
|
||||
session->pConnectBssDesc->bssId,
|
||||
WLAN_LEGACY_SME_ID);
|
||||
if (!peer) {
|
||||
sme_debug("Peer of peer_mac %pM not found",
|
||||
session->pConnectBssDesc->bssId);
|
||||
return;
|
||||
}
|
||||
|
||||
is_pmf_enabled = mlme_get_peer_pmf_status(peer);
|
||||
wlan_objmgr_peer_release_ref(peer, WLAN_LEGACY_SME_ID);
|
||||
sme_debug("get is_pmf_enabled %d for %pM", is_pmf_enabled,
|
||||
session->pConnectBssDesc->bssId);
|
||||
|
||||
/* If peer does not support PMF in case of OCE/MBO
|
||||
* Connection, Disable BTM offload to firmware.
|
||||
*/
|
||||
if (session->pConnectBssDesc->mbo_oce_enabled_ap &&
|
||||
!is_pmf_enabled)
|
||||
req_buf->btm_offload_config = 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* csr_create_roam_scan_offload_request() - init roam offload scan request
|
||||
*
|
||||
@@ -17664,7 +17664,8 @@ csr_create_roam_scan_offload_request(struct mac_context *mac_ctx,
|
||||
req_buf->lca_config_params.num_disallowed_aps =
|
||||
mac_ctx->mlme_cfg->lfr.lfr3_num_disallowed_aps;
|
||||
|
||||
csr_update_btm_offload_config(mac_ctx, command, req_buf, session);
|
||||
csr_update_btm_offload_config(mac_ctx, command,
|
||||
&req_buf->btm_offload_config, session);
|
||||
|
||||
req_buf->btm_solicited_timeout =
|
||||
mac_ctx->mlme_cfg->btm.btm_solicited_timeout;
|
||||
@@ -17702,7 +17703,8 @@ csr_update_11k_offload_params(struct mac_context *mac_ctx,
|
||||
struct roam_offload_scan_req *req_buffer,
|
||||
bool enabled)
|
||||
{
|
||||
struct wmi_11k_offload_params *params = &req_buffer->offload_11k_params;
|
||||
struct wlan_roam_11k_offload_params *params =
|
||||
&req_buffer->offload_11k_params;
|
||||
struct csr_config *csr_config = &mac_ctx->roam.configParam;
|
||||
struct csr_neighbor_report_offload_params *neighbor_report_offload =
|
||||
&csr_config->neighbor_report_offload;
|
||||
@@ -18129,13 +18131,13 @@ static void csr_update_driver_assoc_ies(struct mac_context *mac_ctx,
|
||||
*
|
||||
* Return: per roam config request packet buffer
|
||||
*/
|
||||
static struct wmi_per_roam_config_req *
|
||||
static struct wlan_per_roam_config_req *
|
||||
csr_create_per_roam_request(struct mac_context *mac_ctx,
|
||||
uint8_t session_id)
|
||||
{
|
||||
struct wmi_per_roam_config_req *req_buf = NULL;
|
||||
struct wlan_per_roam_config_req *req_buf = NULL;
|
||||
|
||||
req_buf = qdf_mem_malloc(sizeof(struct wmi_per_roam_config_req));
|
||||
req_buf = qdf_mem_malloc(sizeof(struct wlan_per_roam_config_req));
|
||||
if (!req_buf)
|
||||
return NULL;
|
||||
|
||||
@@ -18188,7 +18190,7 @@ csr_create_per_roam_request(struct mac_context *mac_ctx,
|
||||
static QDF_STATUS
|
||||
csr_roam_offload_per_scan(struct mac_context *mac_ctx, uint8_t session_id)
|
||||
{
|
||||
struct wmi_per_roam_config_req *req_buf;
|
||||
struct wlan_per_roam_config_req *req_buf;
|
||||
struct scheduler_msg msg = {0};
|
||||
QDF_STATUS status;
|
||||
|
||||
@@ -19258,10 +19260,8 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t command,
|
||||
uint8_t reason)
|
||||
wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
uint8_t command, uint8_t reason)
|
||||
{
|
||||
uint8_t *state = NULL;
|
||||
struct csr_roam_session *session;
|
||||
@@ -19407,7 +19407,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_scan_offload_rssi_thresh() - set roam offload scan rssi
|
||||
* csr_cm_roam_scan_offload_rssi_thresh() - set roam offload scan rssi
|
||||
* parameters
|
||||
* @mac_ctx: global mac ctx
|
||||
* @session: csr roam session
|
||||
@@ -19418,8 +19418,7 @@ wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_scan_offload_rssi_thresh(
|
||||
struct mac_context *mac_ctx,
|
||||
csr_cm_roam_scan_offload_rssi_thresh(struct mac_context *mac_ctx,
|
||||
struct csr_roam_session *session,
|
||||
struct wlan_roam_offload_scan_rssi_params *params)
|
||||
{
|
||||
@@ -19502,7 +19501,7 @@ wlan_cm_roam_scan_offload_rssi_thresh(
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_scan_offload_scan_period() - set roam offload scan period
|
||||
* csr_cm_roam_scan_offload_scan_period() - set roam offload scan period
|
||||
* parameters
|
||||
* @mac_ctx: global mac ctx
|
||||
* @vdev_id: vdev id
|
||||
@@ -19513,8 +19512,7 @@ wlan_cm_roam_scan_offload_rssi_thresh(
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_scan_offload_scan_period(
|
||||
struct mac_context *mac_ctx,
|
||||
csr_cm_roam_scan_offload_scan_period(struct mac_context *mac_ctx,
|
||||
uint8_t vdev_id,
|
||||
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
|
||||
* @session: sme session
|
||||
* @params: roam ap profile related parameters
|
||||
@@ -19547,7 +19545,7 @@ wlan_cm_roam_scan_offload_scan_period(
|
||||
* Return: None
|
||||
*/
|
||||
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 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
|
||||
* @vdev_id: vdev id
|
||||
* @command: rso command
|
||||
@@ -19613,11 +19611,8 @@ wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_scan_filter(
|
||||
struct mac_context *mac_ctx,
|
||||
uint8_t vdev_id,
|
||||
uint8_t command,
|
||||
uint8_t reason,
|
||||
csr_cm_roam_scan_filter(struct mac_context *mac_ctx, uint8_t vdev_id,
|
||||
uint8_t command, uint8_t reason,
|
||||
struct wlan_roam_scan_filter_params *scan_filter_params)
|
||||
{
|
||||
int i;
|
||||
@@ -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,
|
||||
¶ms->btm_offload_config, session);
|
||||
params->btm_solicited_timeout =
|
||||
mac_ctx->mlme_cfg->btm.btm_solicited_timeout;
|
||||
params->btm_max_attempt_cnt =
|
||||
mac_ctx->mlme_cfg->btm.btm_max_attempt_cnt;
|
||||
params->btm_sticky_time =
|
||||
mac_ctx->mlme_cfg->btm.btm_sticky_time;
|
||||
params->disassoc_timer_threshold =
|
||||
mac_ctx->mlme_cfg->btm.disassoc_timer_threshold;
|
||||
params->btm_query_bitmask =
|
||||
mac_ctx->mlme_cfg->btm.btm_query_bitmask;
|
||||
params->btm_candidate_min_score =
|
||||
mac_ctx->mlme_cfg->btm.btm_trig_min_candidate_score;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
@@ -19748,18 +19775,20 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
wlan_cm_roam_scan_offload_rssi_thresh(mac_ctx, session,
|
||||
csr_cm_roam_scan_offload_rssi_thresh(mac_ctx, session,
|
||||
&req->rssi_params);
|
||||
|
||||
wlan_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id,
|
||||
csr_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id,
|
||||
&req->scan_period_params);
|
||||
|
||||
wlan_cm_roam_scan_offload_ap_profile(mac_ctx, session,
|
||||
csr_cm_roam_scan_offload_ap_profile(mac_ctx, session,
|
||||
&req->profile_params);
|
||||
|
||||
wlan_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START,
|
||||
csr_cm_roam_scan_filter(mac_ctx, vdev_id, ROAM_SCAN_OFFLOAD_START,
|
||||
reason, &req->scan_filter_params);
|
||||
|
||||
csr_cm_roam_scan_btm_offload(mac_ctx, session, &req->btm_config);
|
||||
|
||||
/* fill other struct similar to wlan_roam_offload_scan_rssi_params */
|
||||
|
||||
return status;
|
||||
|
@@ -848,9 +848,6 @@ struct wma_wlm_stats_data {
|
||||
* @roam_ho_wl: wake lock for roam handoff req
|
||||
* @wow_nack: wow negative ack flag
|
||||
* @is_wow_bus_suspended: is wow bus suspended flag
|
||||
* @suitable_ap_hb_failure: better ap found
|
||||
* @suitable_ap_hb_failure_rssi: RSSI when suitable_ap_hb_failure
|
||||
* triggered for later usage to report RSSI at beacon miss scenario
|
||||
* @IsRArateLimitEnabled: RA rate limiti s enabled or not
|
||||
* @RArateLimitInterval: RA rate limit interval
|
||||
* @is_lpass_enabled: Flag to indicate if LPASS feature is enabled or not
|
||||
@@ -974,8 +971,6 @@ typedef struct {
|
||||
qdf_wake_lock_t roam_preauth_wl;
|
||||
int wow_nack;
|
||||
qdf_atomic_t is_wow_bus_suspended;
|
||||
bool suitable_ap_hb_failure;
|
||||
uint32_t suitable_ap_hb_failure_rssi;
|
||||
#ifdef WLAN_FEATURE_LPSS
|
||||
bool is_lpass_enabled;
|
||||
#endif
|
||||
|
@@ -817,6 +817,7 @@ int wma_wlm_stats_req(int vdev_id, uint32_t bitmask, uint32_t max_size,
|
||||
int wma_wlm_stats_rsp(void *wma_ctx, uint8_t *event, uint32_t len);
|
||||
#endif /* FEATURE_WLM_STATS */
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
/**
|
||||
* wma_update_roam_offload_flag() - update roam offload flag to fw
|
||||
* @wma: wma handle
|
||||
@@ -826,7 +827,7 @@ int wma_wlm_stats_rsp(void *wma_ctx, uint8_t *event, uint32_t len);
|
||||
*/
|
||||
void wma_update_roam_offload_flag(void *handle,
|
||||
struct roam_init_params *params);
|
||||
|
||||
#endif
|
||||
/**
|
||||
* wma_self_peer_create() - create self peer in objmgr
|
||||
* @vdev_mlme: vdev mlme component private object
|
||||
|
@@ -350,6 +350,7 @@ wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
/**
|
||||
* wma_update_per_roam_config() -per roam config parameter updation to FW
|
||||
* @handle: wma handle
|
||||
@@ -358,8 +359,8 @@ wma_roam_scan_chan_list_event_handler(WMA_HANDLE handle, uint8_t *event,
|
||||
* Return: none
|
||||
*/
|
||||
void wma_update_per_roam_config(WMA_HANDLE handle,
|
||||
struct wmi_per_roam_config_req *req_buf);
|
||||
|
||||
struct wlan_per_roam_config_req *req_buf);
|
||||
#endif
|
||||
QDF_STATUS wma_update_channel_list(WMA_HANDLE handle,
|
||||
tSirUpdateChanList *chan_list);
|
||||
|
||||
|
@@ -398,7 +398,9 @@
|
||||
|
||||
#define WMA_SET_WOW_PULSE_CMD SIR_HAL_SET_WOW_PULSE_CMD
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
#define WMA_SET_PER_ROAM_CONFIG_CMD SIR_HAL_SET_PER_ROAM_CONFIG_CMD
|
||||
#endif
|
||||
|
||||
#define WMA_SEND_AP_VDEV_UP SIR_HAL_SEND_AP_VDEV_UP
|
||||
|
||||
@@ -433,7 +435,9 @@
|
||||
#endif
|
||||
#define WMA_SET_ROAM_TRIGGERS SIR_HAL_SET_ROAM_TRIGGERS
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
#define WMA_ROAM_INIT_PARAM SIR_HAL_INIT_ROAM_OFFLOAD_PARAM
|
||||
#endif
|
||||
|
||||
#define WMA_DATA_STALL_TRIGGER 6
|
||||
|
||||
|
@@ -8656,11 +8656,13 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg)
|
||||
qdf_mem_free(msg->bodyptr);
|
||||
break;
|
||||
#endif /* FEATURE_WLAN_EXTSCAN */
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
case WMA_SET_PER_ROAM_CONFIG_CMD:
|
||||
wma_update_per_roam_config(wma_handle,
|
||||
(struct wmi_per_roam_config_req *)msg->bodyptr);
|
||||
(struct wlan_per_roam_config_req *)msg->bodyptr);
|
||||
qdf_mem_free(msg->bodyptr);
|
||||
break;
|
||||
#endif
|
||||
case WMA_SET_SCAN_MAC_OUI_REQ:
|
||||
wma_scan_probe_setoui(wma_handle, msg->bodyptr);
|
||||
qdf_mem_free(msg->bodyptr);
|
||||
@@ -8969,10 +8971,12 @@ static QDF_STATUS wma_mc_process_msg(struct scheduler_msg *msg)
|
||||
wma_set_roam_triggers(wma_handle, msg->bodyptr);
|
||||
qdf_mem_free(msg->bodyptr);
|
||||
break;
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
case WMA_ROAM_INIT_PARAM:
|
||||
wma_update_roam_offload_flag(wma_handle, msg->bodyptr);
|
||||
qdf_mem_free(msg->bodyptr);
|
||||
break;
|
||||
#endif
|
||||
case WMA_ROAM_SCAN_CH_REQ:
|
||||
wma_get_roam_scan_ch(wma_handle->wmi_handle, msg->bodyval);
|
||||
break;
|
||||
|
@@ -84,6 +84,7 @@
|
||||
#if !defined(REMOVE_PKT_LOG)
|
||||
#include <wlan_logging_sock_svc.h>
|
||||
#endif
|
||||
#include "wlan_cm_roam_api.h"
|
||||
|
||||
/**
|
||||
* wma_send_bcn_buf_ll() - prepare and send beacon buffer to fw for LL
|
||||
@@ -2411,6 +2412,20 @@ void wma_beacon_miss_handler(tp_wma_handle wma, uint32_t vdev_id, int32_t rssi)
|
||||
wma_lost_link_info_handler(wma, vdev_id, rssi);
|
||||
}
|
||||
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi)
|
||||
{
|
||||
tp_wma_handle wma;
|
||||
|
||||
wma = cds_get_context(QDF_MODULE_ID_WMA);
|
||||
if (!wma) {
|
||||
wma_err("Invalid wma");
|
||||
return;
|
||||
}
|
||||
|
||||
wma_beacon_miss_handler(wma, vdev_id, rssi);
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* wma_get_status_str() - get string of tx status from firmware
|
||||
* @status: tx status
|
||||
|
@@ -1633,10 +1633,10 @@ static QDF_STATUS
|
||||
wma_roam_scan_btm_offload(tp_wma_handle wma_handle,
|
||||
struct roam_offload_scan_req *roam_req)
|
||||
{
|
||||
struct wmi_btm_config *params;
|
||||
struct wlan_roam_btm_config *params;
|
||||
QDF_STATUS status;
|
||||
|
||||
params = qdf_mem_malloc(sizeof(struct wmi_btm_config));
|
||||
params = qdf_mem_malloc(sizeof(struct wlan_roam_btm_config));
|
||||
if (!params)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
@@ -1711,7 +1711,7 @@ void wma_send_roam_bss_load_config(WMA_HANDLE handle,
|
||||
*/
|
||||
static
|
||||
QDF_STATUS wma_send_offload_11k_params(WMA_HANDLE handle,
|
||||
struct wmi_11k_offload_params *params)
|
||||
struct wlan_roam_11k_offload_params *params)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
tp_wma_handle wma_handle = (tp_wma_handle) handle;
|
||||
@@ -1758,7 +1758,7 @@ wma_send_disconnect_roam_params(tp_wma_handle wma_handle,
|
||||
struct roam_offload_scan_req *roam_req)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct wmi_disconnect_roam_params *params =
|
||||
struct wlan_roam_disconnect_params *params =
|
||||
&roam_req->disconnect_roam_params;
|
||||
|
||||
if (!wma_handle || !wma_handle->wmi_handle) {
|
||||
@@ -1920,10 +1920,10 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
|
||||
roam_req->Command, roam_req->reason, roam_req->sessionId,
|
||||
roam_req->RoamScanOffloadEnabled,
|
||||
roam_req->offload_11k_params.offload_11k_bitmask);
|
||||
wma_handle->interfaces[roam_req->sessionId].roaming_in_progress = false;
|
||||
intr = &wma_handle->interfaces[roam_req->sessionId];
|
||||
intr->roaming_in_progress = false;
|
||||
switch (roam_req->Command) {
|
||||
case ROAM_SCAN_OFFLOAD_START:
|
||||
intr = &wma_handle->interfaces[roam_req->sessionId];
|
||||
intr->delay_before_vdev_stop = roam_req->delay_before_vdev_stop;
|
||||
/*
|
||||
* Scan/Roam threshold parameters are translated from
|
||||
@@ -1935,8 +1935,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
|
||||
/* First param is positive rssi value to trigger rssi based scan
|
||||
* Opportunistic scan is started at 30dB > trigger rssi.
|
||||
*/
|
||||
wma_handle->suitable_ap_hb_failure = false;
|
||||
|
||||
mlme_set_roam_reason_better_ap(intr->vdev, false);
|
||||
qdf_status = wma_roam_scan_offload_rssi_thresh(wma_handle,
|
||||
roam_req);
|
||||
if (qdf_status != QDF_STATUS_SUCCESS)
|
||||
@@ -2104,8 +2103,7 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
|
||||
break;
|
||||
}
|
||||
|
||||
wma_handle->suitable_ap_hb_failure = false;
|
||||
|
||||
mlme_set_roam_reason_better_ap(intr->vdev, false);
|
||||
wma_roam_scan_fill_scan_params(wma_handle, mac,
|
||||
NULL, &scan_params);
|
||||
|
||||
@@ -2207,17 +2205,17 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
|
||||
* now it is time to call it heartbeat failure.
|
||||
*/
|
||||
if ((roam_req->reason == REASON_PREAUTH_FAILED_FOR_ALL)
|
||||
&& wma_handle->suitable_ap_hb_failure) {
|
||||
&& mlme_get_roam_reason_better_ap(intr->vdev)) {
|
||||
wma_err("Sending heartbeat failure after preauth failures");
|
||||
wma_beacon_miss_handler(wma_handle,
|
||||
roam_req->sessionId,
|
||||
wma_handle->suitable_ap_hb_failure_rssi);
|
||||
wma_handle->suitable_ap_hb_failure = false;
|
||||
mlme_get_hb_ap_rssi(intr->vdev));
|
||||
mlme_set_roam_reason_better_ap(intr->vdev, false);
|
||||
}
|
||||
break;
|
||||
|
||||
case ROAM_SCAN_OFFLOAD_UPDATE_CFG:
|
||||
wma_handle->suitable_ap_hb_failure = false;
|
||||
mlme_set_roam_reason_better_ap(intr->vdev, false);
|
||||
|
||||
qdf_status = wma_roam_scan_bmiss_cnt(wma_handle,
|
||||
roam_req->RoamBmissFirstBcnt,
|
||||
@@ -2307,8 +2305,9 @@ QDF_STATUS wma_process_roaming_config(tp_wma_handle wma_handle,
|
||||
return qdf_status;
|
||||
}
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
void wma_update_per_roam_config(WMA_HANDLE handle,
|
||||
struct wmi_per_roam_config_req *req_buf)
|
||||
struct wlan_per_roam_config_req *req_buf)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
tp_wma_handle wma_handle = (tp_wma_handle) handle;
|
||||
@@ -2323,6 +2322,7 @@ void wma_update_per_roam_config(WMA_HANDLE handle,
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
wma_err("failed to set per roam config to FW");
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
|
||||
@@ -6205,7 +6205,8 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf,
|
||||
*/
|
||||
wma_debug("Better AP found for vdevid %x, rssi %d",
|
||||
wmi_event->vdev_id, wmi_event->rssi);
|
||||
wma_handle->suitable_ap_hb_failure = false;
|
||||
mlme_set_roam_reason_better_ap(
|
||||
wma_handle->interfaces[wmi_event->vdev_id].vdev, false);
|
||||
wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id);
|
||||
break;
|
||||
case WMI_ROAM_REASON_SUITABLE_AP:
|
||||
@@ -6213,8 +6214,11 @@ int wma_roam_event_callback(WMA_HANDLE handle, uint8_t *event_buf,
|
||||
* WMI_ROAM_REASON_SUITABLE_AP can get called in soft IRQ
|
||||
* context, so avoid using CSR/PE structure directly.
|
||||
*/
|
||||
wma_handle->suitable_ap_hb_failure = true;
|
||||
wma_handle->suitable_ap_hb_failure_rssi = wmi_event->rssi;
|
||||
mlme_set_roam_reason_better_ap(
|
||||
wma_handle->interfaces[wmi_event->vdev_id].vdev, true);
|
||||
mlme_set_hb_ap_rssi(
|
||||
wma_handle->interfaces[wmi_event->vdev_id].vdev,
|
||||
wmi_event->rssi);
|
||||
wma_debug("Bmiss scan AP found for vdevid %x, rssi %d",
|
||||
wmi_event->vdev_id, wmi_event->rssi);
|
||||
wma_roam_better_ap_handler(wma_handle, wmi_event->vdev_id);
|
||||
|
@@ -4025,6 +4025,7 @@ int wma_rcpi_event_handler(void *handle, uint8_t *cmd_param_info,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef ROAM_OFFLOAD_V1
|
||||
/**
|
||||
* wma_set_roam_offload_flag() - Set roam offload flag to fw
|
||||
* @wma: wma handle
|
||||
@@ -4094,6 +4095,7 @@ void wma_update_roam_offload_flag(void *handle,
|
||||
|
||||
wma_set_roam_offload_flag(wma, params->vdev_id, params->enable);
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS wma_send_vdev_down_to_fw(t_wma_handle *wma, uint8_t vdev_id)
|
||||
{
|
||||
|
Reference in New Issue
Block a user