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