qcacld-3.0: Move rso related process to connection manager [PART 3]
Add new code to implement below functions for connection manager roam part: Propagate 'Change-Id: I49d64671f74b86c516d286c4b2aad69eda744b52' Filling below WMI cmd parameters related process: WMI_ROAM_AP_PROFILE WMI_ROAM_FILTER_CMDID Change-Id: I4870c69a0e0ca1e8cad734a591f09e402b7a32fa CRs-Fixed: 2745468
This commit is contained in:
@@ -2505,6 +2505,17 @@ wlan_mlme_set_roam_reason_vsie_status(struct wlan_objmgr_psoc *psoc,
|
|||||||
* Return: Roaming triggers value
|
* Return: Roaming triggers value
|
||||||
*/
|
*/
|
||||||
uint32_t wlan_mlme_get_roaming_triggers(struct wlan_objmgr_psoc *psoc);
|
uint32_t wlan_mlme_get_roaming_triggers(struct wlan_objmgr_psoc *psoc);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_mlme_get_roaming_offload() - Get roaming offload setting
|
||||||
|
* @psoc: pointer to psoc object
|
||||||
|
* @val: Pointer to enable/disable roaming offload
|
||||||
|
*
|
||||||
|
* Return: QDF Status
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
|
||||||
|
bool *val);
|
||||||
#else
|
#else
|
||||||
static inline QDF_STATUS
|
static inline QDF_STATUS
|
||||||
wlan_mlme_get_roam_reason_vsie_status(struct wlan_objmgr_psoc *psoc,
|
wlan_mlme_get_roam_reason_vsie_status(struct wlan_objmgr_psoc *psoc,
|
||||||
@@ -2525,6 +2536,15 @@ uint32_t wlan_mlme_get_roaming_triggers(struct wlan_objmgr_psoc *psoc)
|
|||||||
{
|
{
|
||||||
return 0xFFFF;
|
return 0xFFFF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline QDF_STATUS
|
||||||
|
wlan_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
|
||||||
|
bool *val)
|
||||||
|
{
|
||||||
|
*val = false;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -3915,6 +3915,23 @@ uint32_t wlan_mlme_get_roaming_triggers(struct wlan_objmgr_psoc *psoc)
|
|||||||
|
|
||||||
return mlme_obj->cfg.lfr.roam_trigger_bitmap;
|
return mlme_obj->cfg.lfr.roam_trigger_bitmap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
|
||||||
|
bool *val)
|
||||||
|
{
|
||||||
|
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||||
|
|
||||||
|
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||||
|
if (!mlme_obj) {
|
||||||
|
*val = cfg_default(CFG_LFR3_ROAMING_OFFLOAD);
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
*val = mlme_obj->cfg.lfr.lfr3_roaming_offload;
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
|
@@ -773,17 +773,7 @@ QDF_STATUS
|
|||||||
ucfg_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
|
ucfg_mlme_get_roaming_offload(struct wlan_objmgr_psoc *psoc,
|
||||||
bool *val)
|
bool *val)
|
||||||
{
|
{
|
||||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
return wlan_mlme_get_roaming_offload(psoc, val);
|
||||||
|
|
||||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
|
||||||
if (!mlme_obj) {
|
|
||||||
*val = cfg_default(CFG_LFR3_ROAMING_OFFLOAD);
|
|
||||||
return QDF_STATUS_E_INVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
*val = mlme_obj->cfg.lfr.lfr3_roaming_offload;
|
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
|
@@ -23,6 +23,8 @@
|
|||||||
#include "target_if.h"
|
#include "target_if.h"
|
||||||
#include "wmi_unified_sta_api.h"
|
#include "wmi_unified_sta_api.h"
|
||||||
#include "wlan_mlme_dbg.h"
|
#include "wlan_mlme_dbg.h"
|
||||||
|
#include "wlan_mlme_api.h"
|
||||||
|
#include "wlan_crypto_global_api.h"
|
||||||
|
|
||||||
#if defined(WLAN_FEATURE_ROAM_OFFLOAD) || defined(ROAM_OFFLOAD_V1)
|
#if defined(WLAN_FEATURE_ROAM_OFFLOAD) || defined(ROAM_OFFLOAD_V1)
|
||||||
static struct wmi_unified
|
static struct wmi_unified
|
||||||
@@ -210,6 +212,36 @@ target_if_cm_roam_triggers(wmi_unified_t wmi_handle,
|
|||||||
|
|
||||||
return wmi_unified_set_roam_triggers(wmi_handle, req);
|
return wmi_unified_set_roam_triggers(wmi_handle, req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_cm_roam_scan_get_cckm_mode() - Get the CCKM auth mode
|
||||||
|
* @vdev: vdev object
|
||||||
|
* @auth_mode: Auth mode to be converted
|
||||||
|
*
|
||||||
|
* Based on LFR2.0 or LFR3.0, return the proper auth type
|
||||||
|
*
|
||||||
|
* Return: if LFR2.0, then return WMI_AUTH_CCKM for backward compatibility
|
||||||
|
* if LFR3.0 then return the appropriate auth type
|
||||||
|
*/
|
||||||
|
static uint32_t
|
||||||
|
target_if_cm_roam_scan_get_cckm_mode(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint32_t auth_mode)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc;
|
||||||
|
bool roam_offload_enable;
|
||||||
|
|
||||||
|
psoc = wlan_vdev_get_psoc(vdev);
|
||||||
|
if (!psoc) {
|
||||||
|
target_if_err("psoc handle is NULL");
|
||||||
|
return WMI_AUTH_CCKM;
|
||||||
|
}
|
||||||
|
|
||||||
|
wlan_mlme_get_roaming_offload(psoc, &roam_offload_enable);
|
||||||
|
if (roam_offload_enable)
|
||||||
|
return auth_mode;
|
||||||
|
else
|
||||||
|
return WMI_AUTH_CCKM;
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
static void
|
static void
|
||||||
target_if_cm_roam_reason_vsie(wmi_unified_t wmi_handle,
|
target_if_cm_roam_reason_vsie(wmi_unified_t wmi_handle,
|
||||||
@@ -223,8 +255,14 @@ target_if_cm_roam_triggers(wmi_unified_t wmi_handle,
|
|||||||
{
|
{
|
||||||
return QDF_STATUS_E_NOSUPPORT;
|
return QDF_STATUS_E_NOSUPPORT;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
static uint32_t
|
||||||
|
target_if_cm_roam_scan_get_cckm_mode(struct wlan_objmgr_vdev *vdev,
|
||||||
|
uint32_t auth_mode)
|
||||||
|
{
|
||||||
|
return WMI_AUTH_CCKM;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
* target_if_cm_roam_scan_offload_rssi_thresh() - Send roam scan rssi threshold
|
* target_if_cm_roam_scan_offload_rssi_thresh() - Send roam scan rssi threshold
|
||||||
* commands to wmi
|
* commands to wmi
|
||||||
@@ -362,6 +400,171 @@ target_if_cm_roam_scan_offload_scan_period(
|
|||||||
return wmi_unified_roam_scan_offload_scan_period(wmi_handle, req);
|
return wmi_unified_roam_scan_offload_scan_period(wmi_handle, req);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_11W
|
||||||
|
/**
|
||||||
|
* target_if_roam_fill_11w_params() - Fill the 11w related parameters
|
||||||
|
* for ap profile
|
||||||
|
* @vdev: vdev object
|
||||||
|
* @req: roam ap profile parameters
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
target_if_cm_roam_fill_11w_params(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct ap_profile_params *req)
|
||||||
|
{
|
||||||
|
uint32_t group_mgmt_cipher;
|
||||||
|
uint16_t rsn_caps;
|
||||||
|
bool peer_rmf_capable = false;
|
||||||
|
uint32_t keymgmt;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
target_if_err("Invalid vdev");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
rsn_caps = (uint16_t)wlan_crypto_get_param(vdev,
|
||||||
|
WLAN_CRYPTO_PARAM_RSN_CAP);
|
||||||
|
if (wlan_crypto_vdev_has_mgmtcipher(
|
||||||
|
vdev,
|
||||||
|
(1 << WLAN_CRYPTO_CIPHER_AES_GMAC) |
|
||||||
|
(1 << WLAN_CRYPTO_CIPHER_AES_GMAC_256) |
|
||||||
|
(1 << WLAN_CRYPTO_CIPHER_AES_CMAC)) &&
|
||||||
|
(rsn_caps &
|
||||||
|
WLAN_CRYPTO_RSN_CAP_MFP_ENABLED))
|
||||||
|
peer_rmf_capable = true;
|
||||||
|
|
||||||
|
keymgmt = wlan_crypto_get_param(vdev, WLAN_CRYPTO_PARAM_MGMT_CIPHER);
|
||||||
|
|
||||||
|
if (keymgmt & (1 << WLAN_CRYPTO_CIPHER_AES_CMAC))
|
||||||
|
group_mgmt_cipher = WMI_CIPHER_AES_CMAC;
|
||||||
|
else if (keymgmt & (1 << WLAN_CRYPTO_CIPHER_AES_GMAC))
|
||||||
|
group_mgmt_cipher = WMI_CIPHER_AES_GMAC;
|
||||||
|
else if (keymgmt & (1 << WLAN_CRYPTO_CIPHER_AES_GMAC_256))
|
||||||
|
group_mgmt_cipher = WMI_CIPHER_BIP_GMAC_256;
|
||||||
|
else
|
||||||
|
group_mgmt_cipher = WMI_CIPHER_NONE;
|
||||||
|
|
||||||
|
if (peer_rmf_capable) {
|
||||||
|
req->profile.rsn_mcastmgmtcipherset = group_mgmt_cipher;
|
||||||
|
req->profile.flags |= WMI_AP_PROFILE_FLAG_PMF;
|
||||||
|
} else {
|
||||||
|
req->profile.rsn_mcastmgmtcipherset = WMI_CIPHER_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
void target_if_cm_roam_fill_11w_params(struct wlan_objmgr_vdev *vdev,
|
||||||
|
struct ap_profile_params *req)
|
||||||
|
{}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_cm_roam_scan_offload_ap_profile() - send roam ap profile to
|
||||||
|
* firmware
|
||||||
|
* @vdev: vdev object
|
||||||
|
* @wmi_handle: wmi handle
|
||||||
|
* @req: roam ap profile parameters
|
||||||
|
*
|
||||||
|
* Send WMI_ROAM_AP_PROFILE parameters to firmware
|
||||||
|
*
|
||||||
|
* Return: QDF status
|
||||||
|
*/
|
||||||
|
static QDF_STATUS
|
||||||
|
target_if_cm_roam_scan_offload_ap_profile(
|
||||||
|
struct wlan_objmgr_vdev *vdev,
|
||||||
|
wmi_unified_t wmi_handle,
|
||||||
|
struct ap_profile_params *req)
|
||||||
|
{
|
||||||
|
uint32_t rsn_authmode;
|
||||||
|
bool db2dbm_enabled;
|
||||||
|
|
||||||
|
if (!target_if_is_vdev_valid(req->vdev_id)) {
|
||||||
|
target_if_err("Invalid vdev id:%d", req->vdev_id);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
rsn_authmode = req->profile.rsn_authmode;
|
||||||
|
if (rsn_authmode == WMI_AUTH_CCKM_WPA ||
|
||||||
|
rsn_authmode == WMI_AUTH_CCKM_RSNA)
|
||||||
|
req->profile.rsn_authmode =
|
||||||
|
target_if_cm_roam_scan_get_cckm_mode(vdev, rsn_authmode);
|
||||||
|
|
||||||
|
target_if_cm_roam_fill_11w_params(vdev, req);
|
||||||
|
|
||||||
|
db2dbm_enabled = wmi_service_enabled(wmi_handle,
|
||||||
|
wmi_service_hw_db2dbm_support);
|
||||||
|
if (!req->profile.rssi_abs_thresh) {
|
||||||
|
if (db2dbm_enabled)
|
||||||
|
req->profile.rssi_abs_thresh = RSSI_MIN_VALUE;
|
||||||
|
} else {
|
||||||
|
if (!db2dbm_enabled)
|
||||||
|
req->profile.rssi_abs_thresh -=
|
||||||
|
NOISE_FLOOR_DBM_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!db2dbm_enabled) {
|
||||||
|
req->min_rssi_params[DEAUTH_MIN_RSSI].min_rssi -=
|
||||||
|
NOISE_FLOOR_DBM_DEFAULT;
|
||||||
|
req->min_rssi_params[DEAUTH_MIN_RSSI].min_rssi &= 0x000000ff;
|
||||||
|
|
||||||
|
req->min_rssi_params[BMISS_MIN_RSSI].min_rssi -=
|
||||||
|
NOISE_FLOOR_DBM_DEFAULT;
|
||||||
|
req->min_rssi_params[BMISS_MIN_RSSI].min_rssi &= 0x000000ff;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wmi_unified_send_roam_scan_offload_ap_cmd(wmi_handle, req);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_cm_roam_scan_filter() - send roam scan filter to firmware
|
||||||
|
* @wmi_handle: wmi handle
|
||||||
|
* @command: rso command
|
||||||
|
* @req: roam scan filter parameters
|
||||||
|
*
|
||||||
|
* Send WMI_ROAM_FILTER_CMDID parameters to firmware
|
||||||
|
*
|
||||||
|
* Return: QDF status
|
||||||
|
*/
|
||||||
|
static QDF_STATUS
|
||||||
|
target_if_cm_roam_scan_filter(wmi_unified_t wmi_handle, uint8_t command,
|
||||||
|
struct wlan_roam_scan_filter_params *req)
|
||||||
|
{
|
||||||
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
if (!target_if_is_vdev_valid(req->filter_params.vdev_id)) {
|
||||||
|
target_if_err("Invalid vdev id:%d",
|
||||||
|
req->filter_params.vdev_id);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (command != ROAM_SCAN_OFFLOAD_STOP) {
|
||||||
|
switch (req->reason) {
|
||||||
|
case REASON_ROAM_SET_BLACKLIST_BSSID:
|
||||||
|
case REASON_ROAM_SET_SSID_ALLOWED:
|
||||||
|
case REASON_ROAM_SET_FAVORED_BSSID:
|
||||||
|
break;
|
||||||
|
case REASON_CTX_INIT:
|
||||||
|
if (command == ROAM_SCAN_OFFLOAD_START) {
|
||||||
|
req->filter_params.op_bitmap |=
|
||||||
|
ROAM_FILTER_OP_BITMAP_LCA_DISALLOW |
|
||||||
|
ROAM_FILTER_OP_BITMAP_RSSI_REJECTION_OCE;
|
||||||
|
} else {
|
||||||
|
target_if_debug("Roam Filter need not be sent");
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
target_if_debug("Roam Filter need not be sent");
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
status = wmi_unified_roam_scan_filter_cmd(wmi_handle,
|
||||||
|
&req->filter_params);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* target_if_cm_roam_send_roam_start() - Send roam start related commands
|
* target_if_cm_roam_send_roam_start() - Send roam start related commands
|
||||||
* to wmi
|
* to wmi
|
||||||
@@ -414,6 +617,20 @@ target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev,
|
|||||||
goto end;
|
goto end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status = target_if_cm_roam_scan_offload_ap_profile(
|
||||||
|
vdev, wmi_handle,
|
||||||
|
&req->profile_params);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
goto end;
|
||||||
|
|
||||||
|
status = target_if_cm_roam_scan_filter(wmi_handle,
|
||||||
|
ROAM_SCAN_OFFLOAD_START,
|
||||||
|
&req->scan_filter_params);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
target_if_err("Sending start for roam scan filter failed");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
/* add other wmi commands */
|
/* add other wmi commands */
|
||||||
end:
|
end:
|
||||||
return status;
|
return status;
|
||||||
|
@@ -188,11 +188,9 @@ cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc,
|
|||||||
* process directly, generate a new function wlan_cm_roam_send_rso_cmd
|
* process directly, generate a new function wlan_cm_roam_send_rso_cmd
|
||||||
* for external usage.
|
* for external usage.
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||||
cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
uint8_t vdev_id, uint8_t rso_command,
|
||||||
uint8_t vdev_id,
|
uint8_t reason)
|
||||||
uint8_t rso_command,
|
|
||||||
uint8_t reason)
|
|
||||||
{
|
{
|
||||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
@@ -279,6 +277,21 @@ cm_roam_switch_to_rso_stop(struct wlan_objmgr_pdev *pdev,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void cm_roam_roam_invoke_in_progress(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id, bool set)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
struct mlme_roam_after_data_stall *vdev_roam_params;
|
||||||
|
|
||||||
|
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||||
|
WLAN_MLME_NB_ID);
|
||||||
|
if (!vdev)
|
||||||
|
return;
|
||||||
|
vdev_roam_params = mlme_get_roam_invoke_params(vdev);
|
||||||
|
if (vdev_roam_params)
|
||||||
|
vdev_roam_params->roam_invoke_in_progress = set;
|
||||||
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||||
|
}
|
||||||
/**
|
/**
|
||||||
* cm_roam_switch_to_deinit() - roam state handling for roam deinit
|
* cm_roam_switch_to_deinit() - roam state handling for roam deinit
|
||||||
* @pdev: pdev pointer
|
* @pdev: pdev pointer
|
||||||
@@ -298,6 +311,8 @@ cm_roam_switch_to_deinit(struct wlan_objmgr_pdev *pdev,
|
|||||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||||
enum roam_offload_state cur_state = mlme_get_roam_state(psoc, vdev_id);
|
enum roam_offload_state cur_state = mlme_get_roam_state(psoc, vdev_id);
|
||||||
|
|
||||||
|
cm_roam_roam_invoke_in_progress(psoc, vdev_id, false);
|
||||||
|
|
||||||
switch (cur_state) {
|
switch (cur_state) {
|
||||||
/*
|
/*
|
||||||
* If RSO stop is not done already, send RSO stop first and
|
* If RSO stop is not done already, send RSO stop first and
|
||||||
@@ -356,6 +371,8 @@ cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
|||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||||
|
|
||||||
|
cm_roam_roam_invoke_in_progress(psoc, vdev_id, false);
|
||||||
|
|
||||||
dual_sta_roam_active =
|
dual_sta_roam_active =
|
||||||
wlan_mlme_get_dual_sta_roaming_enabled(psoc);
|
wlan_mlme_get_dual_sta_roaming_enabled(psoc);
|
||||||
|
|
||||||
|
@@ -28,22 +28,6 @@
|
|||||||
#include "wlan_cm_roam_public_srtuct.h"
|
#include "wlan_cm_roam_public_srtuct.h"
|
||||||
|
|
||||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||||
/**
|
|
||||||
* cm_roam_send_rso_cmd() - Send rso command
|
|
||||||
* @psoc: psoc pointer
|
|
||||||
* @vdev_id: vdev id
|
|
||||||
* @rso_command: roam scan offload command
|
|
||||||
* @reason: reason for changing roam state for the requested vdev id
|
|
||||||
*
|
|
||||||
* This function is used to send rso command
|
|
||||||
*
|
|
||||||
* Return: QDF_STATUS
|
|
||||||
*/
|
|
||||||
QDF_STATUS
|
|
||||||
cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
|
||||||
uint8_t vdev_id,
|
|
||||||
uint8_t rso_command,
|
|
||||||
uint8_t reason);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* cm_roam_state_change() - Post roam state change to roam state machine
|
* cm_roam_state_change() - Post roam state change to roam state machine
|
||||||
@@ -61,5 +45,23 @@ cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
|
|||||||
uint8_t vdev_id,
|
uint8_t vdev_id,
|
||||||
enum roam_offload_state requested_state,
|
enum roam_offload_state requested_state,
|
||||||
uint8_t reason);
|
uint8_t reason);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* cm_roam_send_rso_cmd() - send rso command
|
||||||
|
* @psoc: psoc pointer
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @rso_command: roam command to send
|
||||||
|
* @reason: reason for changing roam state for the requested vdev id
|
||||||
|
*
|
||||||
|
* similar to csr_roam_offload_scan, will be used from many legacy
|
||||||
|
* process directly, generate a new function wlan_cm_roam_send_rso_cmd
|
||||||
|
* for external usage.
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id, uint8_t rso_command,
|
||||||
|
uint8_t reason);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@@ -45,21 +45,6 @@ QDF_STATUS
|
|||||||
wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
|
wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
|
||||||
uint8_t vdev_id);
|
uint8_t vdev_id);
|
||||||
|
|
||||||
/**
|
|
||||||
* wlan_cm_start_roaming() - start roaming
|
|
||||||
* @pdev: pdev pointer
|
|
||||||
* @vdev_id: vdev id
|
|
||||||
* @reason: reason to roam
|
|
||||||
*
|
|
||||||
* This function gets called to start roaming
|
|
||||||
*
|
|
||||||
* Return: QDF_STATUS
|
|
||||||
*/
|
|
||||||
QDF_STATUS
|
|
||||||
wlan_cm_start_roaming(struct wlan_objmgr_pdev *pdev,
|
|
||||||
uint8_t vdev_id,
|
|
||||||
uint8_t reason);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* wlan_cm_roam_cmd_allowed() - check roam cmd is allowed or not
|
* wlan_cm_roam_cmd_allowed() - check roam cmd is allowed or not
|
||||||
* @psoc: pointer to psoc object
|
* @psoc: pointer to psoc object
|
||||||
@@ -93,22 +78,6 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
|
|||||||
uint8_t vdev_id,
|
uint8_t vdev_id,
|
||||||
struct wlan_roam_start_config *req,
|
struct wlan_roam_start_config *req,
|
||||||
uint8_t reason);
|
uint8_t reason);
|
||||||
|
|
||||||
/**
|
|
||||||
* wlan_cm_roam_send_rso_cmd() - Send rso command
|
|
||||||
* @psoc: psoc pointer
|
|
||||||
* @vdev_id: vdev id
|
|
||||||
* @rso_command: roam scan offload command
|
|
||||||
* @reason: reason for changing roam state for the requested vdev id
|
|
||||||
*
|
|
||||||
* This function is used to send rso command
|
|
||||||
*
|
|
||||||
* Return: QDF_STATUS
|
|
||||||
*/
|
|
||||||
QDF_STATUS wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
|
||||||
uint8_t vdev_id,
|
|
||||||
uint8_t rso_command,
|
|
||||||
uint8_t reason);
|
|
||||||
#else
|
#else
|
||||||
static inline QDF_STATUS
|
static inline QDF_STATUS
|
||||||
wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
|
wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
|
||||||
@@ -116,23 +85,6 @@ wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
|
|||||||
{
|
{
|
||||||
return QDF_STATUS_E_NOSUPPORT;
|
return QDF_STATUS_E_NOSUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline QDF_STATUS
|
|
||||||
wlan_cm_start_roaming(struct wlan_objmgr_pdev *pdev,
|
|
||||||
uint8_t vdev_id,
|
|
||||||
uint8_t reason)
|
|
||||||
{
|
|
||||||
return QDF_STATUS_E_NOSUPPORT;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline QDF_STATUS
|
|
||||||
wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
|
||||||
uint8_t vdev_id,
|
|
||||||
uint8_t rso_command,
|
|
||||||
uint8_t reason);
|
|
||||||
{
|
|
||||||
return QDF_STATUS_E_NOSUPPORT;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -157,6 +109,77 @@ QDF_STATUS cm_roam_release_lock(void);
|
|||||||
*/
|
*/
|
||||||
char
|
char
|
||||||
*cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor);
|
*cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_cm_rso_init_deinit - Init or Deinit roaming module at firmware
|
||||||
|
* @pdev: Pointer to pdev
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @enable: true: Send RSO init and RSO enable
|
||||||
|
* false: Send RSO stop
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
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
|
||||||
|
* @pdev: Pointer to pdev
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @requestor: RSO disable requestor
|
||||||
|
* @reason: Reason for RSO disable
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||||
|
enum wlan_cm_rso_control_requestor requestor,
|
||||||
|
uint8_t reason);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ucfg_cm_enable_rso - Enable roam scan offload to firmware
|
||||||
|
* @pdev: Pointer to pdev
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @requestor: RSO disable requestor
|
||||||
|
* @reason: Reason for RSO disable
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_cm_enable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||||
|
enum wlan_cm_rso_control_requestor requestor,
|
||||||
|
uint8_t reason);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_cm_roam_state_change() - Post roam state change to roam state machine
|
||||||
|
* @pdev: pdev pointer
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @requested_state: roam state to be set
|
||||||
|
* @reason: reason for changing roam state for the requested vdev id
|
||||||
|
*
|
||||||
|
* This function posts roam state change to roam state machine handling
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
enum roam_offload_state requested_state,
|
||||||
|
uint8_t reason);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_cm_roam_send_rso_cmd() - send rso command
|
||||||
|
* @psoc: psoc pointer
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @rso_command: roam command to send
|
||||||
|
* @reason: reason for changing roam state for the requested vdev id
|
||||||
|
*
|
||||||
|
* similar to csr_roam_offload_scan, will be used from many legacy
|
||||||
|
* process directly, generate a new function wlan_cm_roam_send_rso_cmd
|
||||||
|
* for external usage.
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS
|
||||||
|
*/
|
||||||
|
QDF_STATUS wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id, uint8_t rso_command,
|
||||||
|
uint8_t reason);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||||
|
@@ -23,6 +23,8 @@
|
|||||||
|
|
||||||
#include "wlan_objmgr_cmn.h"
|
#include "wlan_objmgr_cmn.h"
|
||||||
#include "reg_services_public_struct.h"
|
#include "reg_services_public_struct.h"
|
||||||
|
#include "wlan_cm_bss_score_param.h"
|
||||||
|
#include "wlan_blm_public_struct.h"
|
||||||
#include "wmi_unified_param.h"
|
#include "wmi_unified_param.h"
|
||||||
#include "wmi_unified_sta_param.h"
|
#include "wmi_unified_sta_param.h"
|
||||||
|
|
||||||
@@ -117,6 +119,276 @@ struct wlan_roam_triggers {
|
|||||||
struct wlan_cm_roam_vendor_btm_params vendor_btm_param;
|
struct wlan_cm_roam_vendor_btm_params vendor_btm_param;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct ap_profile - Structure ap profile to match candidate
|
||||||
|
* @flags: flags
|
||||||
|
* @rssi_threshold: the value of the the candidate AP should higher by this
|
||||||
|
* threshold than the rssi of the currrently associated AP
|
||||||
|
* @ssid: ssid vlaue to be matched
|
||||||
|
* @rsn_authmode: security params to be matched
|
||||||
|
* @rsn_ucastcipherset: unicast cipher set
|
||||||
|
* @rsn_mcastcipherset: mcast/group cipher set
|
||||||
|
* @rsn_mcastmgmtcipherset: mcast/group management frames cipher set
|
||||||
|
* @rssi_abs_thresh: the value of the candidate AP should higher than this
|
||||||
|
* absolute RSSI threshold. Zero means no absolute minimum
|
||||||
|
* RSSI is required. units are the offset from the noise
|
||||||
|
* floor in dB
|
||||||
|
*/
|
||||||
|
struct ap_profile {
|
||||||
|
uint32_t flags;
|
||||||
|
uint32_t rssi_threshold;
|
||||||
|
struct wlan_ssid ssid;
|
||||||
|
uint32_t rsn_authmode;
|
||||||
|
uint32_t rsn_ucastcipherset;
|
||||||
|
uint32_t rsn_mcastcipherset;
|
||||||
|
uint32_t rsn_mcastmgmtcipherset;
|
||||||
|
uint32_t rssi_abs_thresh;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct scoring_param - scoring param to sortlist selected AP
|
||||||
|
* @disable_bitmap: Each bit will be either allow(0)/disallow(1) to
|
||||||
|
* considered the roam score param.
|
||||||
|
* @rssi_weightage: RSSI weightage out of total score in %
|
||||||
|
* @ht_weightage: HT weightage out of total score in %.
|
||||||
|
* @vht_weightage: VHT weightage out of total score in %.
|
||||||
|
* @he_weightaget: 11ax weightage out of total score in %.
|
||||||
|
* @bw_weightage: Bandwidth weightage out of total score in %.
|
||||||
|
* @band_weightage: Band(2G/5G) weightage out of total score in %.
|
||||||
|
* @nss_weightage: NSS(1x1 / 2x2)weightage out of total score in %.
|
||||||
|
* @esp_qbss_weightage: ESP/QBSS weightage out of total score in %.
|
||||||
|
* @beamforming_weightage: Beamforming weightage out of total score in %.
|
||||||
|
* @pcl_weightage: PCL weightage out of total score in %.
|
||||||
|
* @oce_wan_weightage OCE WAN metrics weightage out of total score in %.
|
||||||
|
* @oce_ap_tx_pwr_weightage: OCE AP TX power score in %
|
||||||
|
* @oce_subnet_id_weightage: OCE subnet id score in %
|
||||||
|
* @bw_index_score: channel BW scoring percentage information.
|
||||||
|
* BITS 0-7 :- It contains scoring percentage of 20MHz BW
|
||||||
|
* BITS 8-15 :- It contains scoring percentage of 40MHz BW
|
||||||
|
* BITS 16-23 :- It contains scoring percentage of 80MHz BW
|
||||||
|
* BITS 24-31 :- It contains scoring percentage of 1600MHz BW
|
||||||
|
* The value of each index must be 0-100
|
||||||
|
* @band_index_score: band scording percentage information.
|
||||||
|
* BITS 0-7 :- It contains scoring percentage of 2G
|
||||||
|
* BITS 8-15 :- It contains scoring percentage of 5G
|
||||||
|
* BITS 16-23 :- reserved
|
||||||
|
* BITS 24-31 :- reserved
|
||||||
|
* The value of each index must be 0-100
|
||||||
|
* @nss_index_score: NSS scoring percentage information.
|
||||||
|
* BITS 0-7 :- It contains scoring percentage of 1x1
|
||||||
|
* BITS 8-15 :- It contains scoring percentage of 2x2
|
||||||
|
* BITS 16-23 :- It contains scoring percentage of 3x3
|
||||||
|
* BITS 24-31 :- It contains scoring percentage of 4x4
|
||||||
|
* The value of each index must be 0-100
|
||||||
|
* @roam_score_delta: delta value expected over the roam score of the candidate
|
||||||
|
* ap over the roam score of the current ap
|
||||||
|
* @roam_trigger_bitmap: bitmap of roam triggers on which roam_score_delta
|
||||||
|
* will be applied
|
||||||
|
* @vendor_roam_score_algorithm: Preferred algorithm for roam candidate selection
|
||||||
|
* @cand_min_roam_score_delta: candidate min roam score delta value
|
||||||
|
* @rssi_scoring: RSSI scoring information.
|
||||||
|
* @esp_qbss_scoring: ESP/QBSS scoring percentage information
|
||||||
|
* @oce_wan_scoring: OCE WAN metrics percentage information
|
||||||
|
*/
|
||||||
|
struct scoring_param {
|
||||||
|
uint32_t disable_bitmap;
|
||||||
|
int32_t rssi_weightage;
|
||||||
|
int32_t ht_weightage;
|
||||||
|
int32_t vht_weightage;
|
||||||
|
int32_t he_weightage;
|
||||||
|
int32_t bw_weightage;
|
||||||
|
int32_t band_weightage;
|
||||||
|
int32_t nss_weightage;
|
||||||
|
int32_t esp_qbss_weightage;
|
||||||
|
int32_t beamforming_weightage;
|
||||||
|
int32_t pcl_weightage;
|
||||||
|
int32_t oce_wan_weightage;
|
||||||
|
uint32_t oce_ap_tx_pwr_weightage;
|
||||||
|
uint32_t oce_subnet_id_weightage;
|
||||||
|
uint32_t bw_index_score;
|
||||||
|
uint32_t band_index_score;
|
||||||
|
uint32_t nss_index_score;
|
||||||
|
uint32_t roam_score_delta;
|
||||||
|
uint32_t roam_trigger_bitmap;
|
||||||
|
uint32_t vendor_roam_score_algorithm;
|
||||||
|
uint32_t cand_min_roam_score_delta;
|
||||||
|
struct rssi_config_score rssi_scoring;
|
||||||
|
struct per_slot_score esp_qbss_scoring;
|
||||||
|
struct per_slot_score oce_wan_scoring;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Currently roam score delta value and min rssi values are sent
|
||||||
|
* for 2 triggers
|
||||||
|
*/
|
||||||
|
#define NUM_OF_ROAM_TRIGGERS 2
|
||||||
|
#define IDLE_ROAM_TRIGGER 0
|
||||||
|
#define BTM_ROAM_TRIGGER 1
|
||||||
|
|
||||||
|
#define DEAUTH_MIN_RSSI 0
|
||||||
|
#define BMISS_MIN_RSSI 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum roam_trigger_reason - Reason for triggering roam
|
||||||
|
* ROAM_TRIGGER_REASON_NONE: Roam trigger reason none
|
||||||
|
* ROAM_TRIGGER_REASON_PER: Roam triggered due to packet error
|
||||||
|
* ROAM_TRIGGER_REASON_BMISS: Roam triggered due to beacon miss
|
||||||
|
* ROAM_TRIGGER_REASON_LOW_RSSI: Roam triggered due to low RSSI of current
|
||||||
|
* connected AP.
|
||||||
|
* ROAM_TRIGGER_REASON_HIGH_RSSI: Roam triggered because sta is connected to
|
||||||
|
* a AP in 2.4GHz band and a better 5GHz AP is available
|
||||||
|
* ROAM_TRIGGER_REASON_PERIODIC: Roam triggered as better AP was found during
|
||||||
|
* periodic roam scan.
|
||||||
|
* ROAM_TRIGGER_REASON_MAWC: Motion Aided WiFi Connectivity triggered roam.
|
||||||
|
* ROAM_TRIGGER_REASON_DENSE: Roaming triggered due to dense environment
|
||||||
|
* detected.
|
||||||
|
* ROAM_TRIGGER_REASON_BACKGROUND: Roam triggered due to current AP having
|
||||||
|
* poor rssi and scan candidate found in scan results provided by other
|
||||||
|
* scan clients.
|
||||||
|
* ROAM_TRIGGER_REASON_FORCED: Forced roam trigger.
|
||||||
|
* ROAM_TRIGGER_REASON_BTM: Roam triggered due to AP sent BTM query with
|
||||||
|
* Disassoc imminent bit set.
|
||||||
|
* ROAM_TRIGGER_REASON_UNIT_TEST: Roam triggered due to unit test command.
|
||||||
|
* ROAM_TRIGGER_REASON_BSS_LOAD: Roam triggered due to high channel utilization
|
||||||
|
* in the current connected channel
|
||||||
|
* ROAM_TRIGGER_REASON_DEAUTH: Roam triggered due to deauth received from the
|
||||||
|
* current connected AP.
|
||||||
|
* ROAM_TRIGGER_REASON_IDLE: Roam triggered due to inactivity of the device.
|
||||||
|
* ROAM_TRIGGER_REASON_STA_KICKOUT: Roam triggered due to sta kickout event.
|
||||||
|
* ROAM_TRIGGER_REASON_ESS_RSSI: Roam triggered due to ess rssi
|
||||||
|
* ROAM_TRIGGER_REASON_WTC_BTM: Roam triggered due to WTC BTM
|
||||||
|
* ROAM_TRIGGER_REASON_MAX: Maximum number of roam triggers
|
||||||
|
*/
|
||||||
|
enum roam_trigger_reason {
|
||||||
|
ROAM_TRIGGER_REASON_NONE = 0,
|
||||||
|
ROAM_TRIGGER_REASON_PER,
|
||||||
|
ROAM_TRIGGER_REASON_BMISS,
|
||||||
|
ROAM_TRIGGER_REASON_LOW_RSSI,
|
||||||
|
ROAM_TRIGGER_REASON_HIGH_RSSI,
|
||||||
|
ROAM_TRIGGER_REASON_PERIODIC,
|
||||||
|
ROAM_TRIGGER_REASON_MAWC,
|
||||||
|
ROAM_TRIGGER_REASON_DENSE,
|
||||||
|
ROAM_TRIGGER_REASON_BACKGROUND,
|
||||||
|
ROAM_TRIGGER_REASON_FORCED,
|
||||||
|
ROAM_TRIGGER_REASON_BTM,
|
||||||
|
ROAM_TRIGGER_REASON_UNIT_TEST,
|
||||||
|
ROAM_TRIGGER_REASON_BSS_LOAD,
|
||||||
|
ROAM_TRIGGER_REASON_DEAUTH,
|
||||||
|
ROAM_TRIGGER_REASON_IDLE,
|
||||||
|
ROAM_TRIGGER_REASON_STA_KICKOUT,
|
||||||
|
ROAM_TRIGGER_REASON_ESS_RSSI,
|
||||||
|
ROAM_TRIGGER_REASON_WTC_BTM,
|
||||||
|
ROAM_TRIGGER_REASON_MAX,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct roam_trigger_min_rssi - structure to hold minimum rssi value of
|
||||||
|
* candidate APs for each roam trigger
|
||||||
|
* @min_rssi: minimum RSSI of candidate AP for the trigger reason specified in
|
||||||
|
* trigger_id
|
||||||
|
* @trigger_reason: Roam trigger reason
|
||||||
|
*/
|
||||||
|
struct roam_trigger_min_rssi {
|
||||||
|
int32_t min_rssi;
|
||||||
|
enum roam_trigger_reason trigger_reason;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct roam_trigger_score_delta - structure to hold roam score delta value of
|
||||||
|
* candidate APs for each roam trigger
|
||||||
|
* @roam_score_delta: delta value in score of the candidate AP for the roam
|
||||||
|
* trigger mentioned in the trigger_id.
|
||||||
|
* @trigger_reason: Roam trigger reason
|
||||||
|
*/
|
||||||
|
struct roam_trigger_score_delta {
|
||||||
|
uint32_t roam_score_delta;
|
||||||
|
enum roam_trigger_reason trigger_reason;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct ap_profile_params - ap profile params
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @profile: ap profile to match candidate
|
||||||
|
* @param: scoring params to short candidate
|
||||||
|
* @min_rssi_params: Min RSSI values for different roam triggers
|
||||||
|
* @score_delta_params: Roam score delta values for different triggers
|
||||||
|
*/
|
||||||
|
struct ap_profile_params {
|
||||||
|
uint8_t vdev_id;
|
||||||
|
struct ap_profile profile;
|
||||||
|
struct scoring_param param;
|
||||||
|
struct roam_trigger_min_rssi min_rssi_params[NUM_OF_ROAM_TRIGGERS];
|
||||||
|
struct roam_trigger_score_delta score_delta_param[NUM_OF_ROAM_TRIGGERS];
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MAX_SSID_ALLOWED_LIST 4
|
||||||
|
#define MAX_BSSID_AVOID_LIST 16
|
||||||
|
#define MAX_BSSID_FAVORED 16
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct roam_scan_filter_params - Structure holding roaming scan
|
||||||
|
* parameters
|
||||||
|
* @op_bitmap: bitmap to determine reason of roaming
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @num_bssid_black_list: The number of BSSID's that we should avoid
|
||||||
|
* connecting to. It is like a blacklist of BSSID's.
|
||||||
|
* @num_ssid_white_list: The number of SSID profiles that are in the
|
||||||
|
* Whitelist. When roaming, we consider the BSSID's with
|
||||||
|
* this SSID also for roaming apart from the connected
|
||||||
|
* one's
|
||||||
|
* @num_bssid_preferred_list: Number of BSSID's which have a preference over
|
||||||
|
* others
|
||||||
|
* @bssid_avoid_list: Blacklist SSID's
|
||||||
|
* @ssid_allowed_list: Whitelist SSID's
|
||||||
|
* @bssid_favored: Favorable BSSID's
|
||||||
|
* @bssid_favored_factor: RSSI to be added to this BSSID to prefer it
|
||||||
|
* @lca_disallow_config_present: LCA [Last Connected AP] disallow config
|
||||||
|
* present
|
||||||
|
* @disallow_duration: How long LCA AP will be disallowed before it can be a
|
||||||
|
* roaming candidate again, in seconds
|
||||||
|
* @rssi_channel_penalization: How much RSSI will be penalized if candidate(s)
|
||||||
|
* are found in the same channel as disallowed
|
||||||
|
* AP's, in units of db
|
||||||
|
* @num_disallowed_aps: How many APs the target should maintain in its LCA
|
||||||
|
* list
|
||||||
|
* @delta_rssi: (dB units) when AB in RSSI blacklist improved by at least
|
||||||
|
* delta_rssi,it will be removed from blacklist
|
||||||
|
*
|
||||||
|
* This structure holds all the key parameters related to
|
||||||
|
* initial connection and roaming connections.
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct roam_scan_filter_params {
|
||||||
|
uint32_t op_bitmap;
|
||||||
|
uint8_t vdev_id;
|
||||||
|
uint32_t num_bssid_black_list;
|
||||||
|
uint32_t num_ssid_white_list;
|
||||||
|
uint32_t num_bssid_preferred_list;
|
||||||
|
struct qdf_mac_addr bssid_avoid_list[MAX_BSSID_AVOID_LIST];
|
||||||
|
struct wlan_ssid ssid_allowed_list[MAX_SSID_ALLOWED_LIST];
|
||||||
|
struct qdf_mac_addr bssid_favored[MAX_BSSID_FAVORED];
|
||||||
|
uint8_t bssid_favored_factor[MAX_BSSID_FAVORED];
|
||||||
|
uint8_t lca_disallow_config_present;
|
||||||
|
uint32_t disallow_duration;
|
||||||
|
uint32_t rssi_channel_penalization;
|
||||||
|
uint32_t num_disallowed_aps;
|
||||||
|
uint32_t num_rssi_rejection_ap;
|
||||||
|
struct reject_ap_config_params
|
||||||
|
rssi_rejection_ap[MAX_RSSI_AVOID_BSSID_LIST];
|
||||||
|
uint32_t delta_rssi;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct wlan_roam_scan_filter_params - structure containing parameters for
|
||||||
|
* roam scan offload filter
|
||||||
|
* @reason: reason for changing roam state for the requested vdev id
|
||||||
|
* @filter_params: roam scan filter parameters
|
||||||
|
*/
|
||||||
|
struct wlan_roam_scan_filter_params {
|
||||||
|
uint8_t reason;
|
||||||
|
struct roam_scan_filter_params filter_params;
|
||||||
|
};
|
||||||
|
|
||||||
#ifdef ROAM_OFFLOAD_V1
|
#ifdef ROAM_OFFLOAD_V1
|
||||||
#define NOISE_FLOOR_DBM_DEFAULT (-96)
|
#define NOISE_FLOOR_DBM_DEFAULT (-96)
|
||||||
#define RSSI_MIN_VALUE (-128)
|
#define RSSI_MIN_VALUE (-128)
|
||||||
@@ -240,6 +512,8 @@ struct wlan_roam_scan_period_params {
|
|||||||
* @reason_vsie_enable: roam reason vsie enable parameters
|
* @reason_vsie_enable: roam reason vsie enable parameters
|
||||||
* @roam_triggers: roam triggers parameters
|
* @roam_triggers: roam triggers parameters
|
||||||
* @scan_period_params: roam scan period parameters
|
* @scan_period_params: roam scan period parameters
|
||||||
|
* @profile_params: ap profile parameters
|
||||||
|
* @scan_filter_params: roam scan filter parameters
|
||||||
*/
|
*/
|
||||||
struct wlan_roam_start_config {
|
struct wlan_roam_start_config {
|
||||||
struct wlan_roam_offload_scan_rssi_params rssi_params;
|
struct wlan_roam_offload_scan_rssi_params rssi_params;
|
||||||
@@ -247,6 +521,8 @@ struct wlan_roam_start_config {
|
|||||||
struct wlan_roam_reason_vsie_enable reason_vsie_enable;
|
struct wlan_roam_reason_vsie_enable reason_vsie_enable;
|
||||||
struct wlan_roam_triggers roam_triggers;
|
struct wlan_roam_triggers roam_triggers;
|
||||||
struct wlan_roam_scan_period_params scan_period_params;
|
struct wlan_roam_scan_period_params scan_period_params;
|
||||||
|
struct ap_profile_params profile_params;
|
||||||
|
struct wlan_roam_scan_filter_params scan_filter_params;
|
||||||
/* other wmi cmd structures */
|
/* other wmi cmd structures */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -23,7 +23,10 @@
|
|||||||
#ifndef _WLAN_CM_ROAM_UCFG_API_H_
|
#ifndef _WLAN_CM_ROAM_UCFG_API_H_
|
||||||
#define _WLAN_CM_ROAM_UCFG_API_H_
|
#define _WLAN_CM_ROAM_UCFG_API_H_
|
||||||
|
|
||||||
|
#include "wlan_cm_roam_api.h"
|
||||||
|
|
||||||
#ifdef ROAM_OFFLOAD_V1
|
#ifdef ROAM_OFFLOAD_V1
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_user_space_enable_disable_rso - Enable/Disable Roam Scan offload
|
* ucfg_user_space_enable_disable_rso - Enable/Disable Roam Scan offload
|
||||||
* to firmware.
|
* to firmware.
|
||||||
@@ -40,6 +43,17 @@ ucfg_user_space_enable_disable_rso(struct wlan_objmgr_pdev *pdev,
|
|||||||
uint8_t vdev_id,
|
uint8_t vdev_id,
|
||||||
const bool is_fast_roam_enabled);
|
const bool is_fast_roam_enabled);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* ucfg_cm_abort_roam_scan() -abort current roam scan cycle by roam scan
|
||||||
|
* offload module.
|
||||||
|
* @pdev: Pointer to pdev
|
||||||
|
* vdev_id - vdev Identifier
|
||||||
|
*
|
||||||
|
* Return QDF_STATUS
|
||||||
|
*/
|
||||||
|
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
|
* @pdev: Pointer to pdev
|
||||||
@@ -49,9 +63,12 @@ ucfg_user_space_enable_disable_rso(struct wlan_objmgr_pdev *pdev,
|
|||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
QDF_STATUS
|
static inline QDF_STATUS
|
||||||
ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev,
|
ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||||
uint8_t vdev_id, bool enable);
|
bool enable)
|
||||||
|
{
|
||||||
|
return wlan_cm_rso_init_deinit(pdev, vdev_id, enable);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_cm_disable_rso - Disable roam scan offload to firmware
|
* ucfg_cm_disable_rso - Disable roam scan offload to firmware
|
||||||
@@ -62,9 +79,13 @@ ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev,
|
|||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
|
static inline
|
||||||
QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||||
enum wlan_cm_rso_control_requestor requestor,
|
enum wlan_cm_rso_control_requestor requestor,
|
||||||
uint8_t reason);
|
uint8_t reason)
|
||||||
|
{
|
||||||
|
return wlan_cm_disable_rso(pdev, vdev_id, requestor, reason);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ucfg_cm_enable_rso - Enable roam scan offload to firmware
|
* ucfg_cm_enable_rso - Enable roam scan offload to firmware
|
||||||
@@ -75,8 +96,12 @@ QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
|||||||
*
|
*
|
||||||
* Return: QDF_STATUS
|
* Return: QDF_STATUS
|
||||||
*/
|
*/
|
||||||
|
static inline
|
||||||
QDF_STATUS ucfg_cm_enable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
QDF_STATUS ucfg_cm_enable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||||
enum wlan_cm_rso_control_requestor requestor,
|
enum wlan_cm_rso_control_requestor requestor,
|
||||||
uint8_t reason);
|
uint8_t reason)
|
||||||
|
{
|
||||||
|
return wlan_cm_enable_rso(pdev, vdev_id, requestor, reason);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@@ -75,23 +75,115 @@ wlan_cm_enable_roaming_on_connected_sta(struct wlan_objmgr_pdev *pdev,
|
|||||||
WLAN_ROAM_RSO_ENABLED,
|
WLAN_ROAM_RSO_ENABLED,
|
||||||
REASON_CTX_INIT);
|
REASON_CTX_INIT);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QDF_STATUS wlan_cm_start_roaming(struct wlan_objmgr_pdev *pdev,
|
char *cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor)
|
||||||
uint8_t vdev_id, uint8_t reason)
|
|
||||||
{
|
{
|
||||||
return cm_roam_state_change(pdev, vdev_id,
|
switch (requestor) {
|
||||||
WLAN_ROAM_RSO_ENABLED, reason);
|
case RSO_INVALID_REQUESTOR:
|
||||||
|
default:
|
||||||
|
return "No requestor";
|
||||||
|
case RSO_START_BSS:
|
||||||
|
return "SAP start";
|
||||||
|
case RSO_CHANNEL_SWITCH:
|
||||||
|
return "CSA";
|
||||||
|
case RSO_CONNECT_START:
|
||||||
|
return "STA connection";
|
||||||
|
case RSO_SAP_CHANNEL_CHANGE:
|
||||||
|
return "SAP Ch switch";
|
||||||
|
case RSO_NDP_CON_ON_NDI:
|
||||||
|
return "NDP connection";
|
||||||
|
case RSO_SET_PCL:
|
||||||
|
return "Set PCL";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
wlan_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id,
|
||||||
|
bool enable)
|
||||||
|
{
|
||||||
|
uint8_t reason = REASON_SUPPLICANT_DE_INIT_ROAMING;
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
|
status = cm_roam_acquire_lock();
|
||||||
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
if (enable)
|
||||||
|
reason = REASON_SUPPLICANT_INIT_ROAMING;
|
||||||
|
|
||||||
|
status = cm_roam_state_change(
|
||||||
|
pdev, vdev_id,
|
||||||
|
enable ? WLAN_ROAM_RSO_ENABLED : WLAN_ROAM_DEINIT,
|
||||||
|
reason);
|
||||||
|
cm_roam_release_lock();
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wlan_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||||
|
enum wlan_cm_rso_control_requestor requestor,
|
||||||
|
uint8_t reason)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
|
status = cm_roam_acquire_lock();
|
||||||
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
if (reason == REASON_DRIVER_DISABLED && requestor)
|
||||||
|
mlme_set_operations_bitmap(psoc, vdev_id, requestor, false);
|
||||||
|
|
||||||
|
mlme_debug("ROAM_CONFIG: vdev[%d] Disable roaming - requestor:%s",
|
||||||
|
vdev_id, cm_roam_get_requestor_string(requestor));
|
||||||
|
|
||||||
|
status = cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_RSO_STOPPED,
|
||||||
|
REASON_DRIVER_DISABLED);
|
||||||
|
cm_roam_release_lock();
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wlan_cm_enable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
||||||
|
enum wlan_cm_rso_control_requestor requestor,
|
||||||
|
uint8_t reason)
|
||||||
|
{
|
||||||
|
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
|
if (reason == REASON_DRIVER_DISABLED && requestor)
|
||||||
|
mlme_set_operations_bitmap(psoc, vdev_id, requestor, true);
|
||||||
|
|
||||||
|
status = cm_roam_acquire_lock();
|
||||||
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
|
||||||
|
mlme_debug("ROAM_CONFIG: vdev[%d] Enable roaming - requestor:%s",
|
||||||
|
vdev_id, cm_roam_get_requestor_string(requestor));
|
||||||
|
|
||||||
|
status = cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_RSO_ENABLED,
|
||||||
|
REASON_DRIVER_ENABLED);
|
||||||
|
cm_roam_release_lock();
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS wlan_cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
enum roam_offload_state requested_state,
|
||||||
|
uint8_t reason)
|
||||||
|
{
|
||||||
|
return cm_roam_state_change(pdev, vdev_id, requested_state, reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
QDF_STATUS wlan_cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||||
uint8_t vdev_id,
|
uint8_t vdev_id, uint8_t rso_command,
|
||||||
uint8_t rso_command,
|
|
||||||
uint8_t reason)
|
uint8_t reason)
|
||||||
{
|
{
|
||||||
return cm_roam_send_rso_cmd(psoc, vdev_id, rso_command, reason);
|
return cm_roam_send_rso_cmd(psoc, vdev_id, rso_command, reason);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
@@ -142,8 +234,8 @@ void wlan_cm_roam_activate_pcl_per_vdev(struct wlan_objmgr_psoc *psoc,
|
|||||||
|
|
||||||
/* value - true (vdev pcl) false - pdev pcl */
|
/* value - true (vdev pcl) false - pdev pcl */
|
||||||
mlme_priv->cm_roam.pcl_vdev_cmd_active = pcl_per_vdev;
|
mlme_priv->cm_roam.pcl_vdev_cmd_active = pcl_per_vdev;
|
||||||
mlme_legacy_debug("CM_ROAM: vdev[%d] SET PCL cmd level - [%s]", vdev_id,
|
mlme_debug("CM_ROAM: vdev[%d] SET PCL cmd level - [%s]", vdev_id,
|
||||||
pcl_per_vdev ? "VDEV" : "PDEV");
|
pcl_per_vdev ? "VDEV" : "PDEV");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wlan_cm_roam_is_pcl_per_vdev_active(struct wlan_objmgr_psoc *psoc,
|
bool wlan_cm_roam_is_pcl_per_vdev_active(struct wlan_objmgr_psoc *psoc,
|
||||||
@@ -227,7 +319,7 @@ wlan_cm_dual_sta_roam_update_connect_channels(struct wlan_objmgr_psoc *psoc,
|
|||||||
status = policy_mgr_get_valid_chans(psoc, channel_list,
|
status = policy_mgr_get_valid_chans(psoc, channel_list,
|
||||||
&num_channels);
|
&num_channels);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
mlme_legacy_err("Error in getting valid channels");
|
mlme_err("Error in getting valid channels");
|
||||||
qdf_mem_free(channel_list);
|
qdf_mem_free(channel_list);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -329,26 +421,3 @@ wlan_cm_roam_get_vendor_btm_params(struct wlan_objmgr_psoc *psoc,
|
|||||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef ROAM_OFFLOAD_V1
|
|
||||||
char *cm_roam_get_requestor_string(enum wlan_cm_rso_control_requestor requestor)
|
|
||||||
{
|
|
||||||
switch (requestor) {
|
|
||||||
case RSO_INVALID_REQUESTOR:
|
|
||||||
default:
|
|
||||||
return "No requestor";
|
|
||||||
case RSO_START_BSS:
|
|
||||||
return "SAP start";
|
|
||||||
case RSO_CHANNEL_SWITCH:
|
|
||||||
return "CSA";
|
|
||||||
case RSO_CONNECT_START:
|
|
||||||
return "STA connection";
|
|
||||||
case RSO_SAP_CHANNEL_CHANGE:
|
|
||||||
return "SAP Ch switch";
|
|
||||||
case RSO_NDP_CON_ON_NDI:
|
|
||||||
return "NDP connection";
|
|
||||||
case RSO_SET_PCL:
|
|
||||||
return "Set PCL";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
@@ -20,7 +20,9 @@
|
|||||||
* Implementation for roaming ucfg public functionality.
|
* Implementation for roaming ucfg public functionality.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "wlan_mlme_ucfg_api.h"
|
||||||
#include "wlan_cm_roam_ucfg_api.h"
|
#include "wlan_cm_roam_ucfg_api.h"
|
||||||
|
#include "../../core/src/wlan_cm_roam_offload.h"
|
||||||
|
|
||||||
#ifdef ROAM_OFFLOAD_V1
|
#ifdef ROAM_OFFLOAD_V1
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
@@ -31,6 +33,8 @@ ucfg_user_space_enable_disable_rso(struct wlan_objmgr_pdev *pdev,
|
|||||||
bool supplicant_disabled_roaming;
|
bool supplicant_disabled_roaming;
|
||||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
|
bool lfr_enabled;
|
||||||
|
enum roam_offload_state state;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* If the ini "FastRoamEnabled" is disabled, don't allow the
|
* If the ini "FastRoamEnabled" is disabled, don't allow the
|
||||||
@@ -38,7 +42,8 @@ ucfg_user_space_enable_disable_rso(struct wlan_objmgr_pdev *pdev,
|
|||||||
*/
|
*/
|
||||||
ucfg_mlme_is_lfr_enabled(psoc, &lfr_enabled);
|
ucfg_mlme_is_lfr_enabled(psoc, &lfr_enabled);
|
||||||
if (!lfr_enabled) {
|
if (!lfr_enabled) {
|
||||||
mlme_legacy_debug("ROAM_CONFIG: Fast roam ini is disabled");
|
mlme_debug("ROAM_CONFIG: Fast roam ini is disabled. is_fast_roam_enabled %d",
|
||||||
|
is_fast_roam_enabled);
|
||||||
if (!is_fast_roam_enabled)
|
if (!is_fast_roam_enabled)
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
@@ -56,7 +61,7 @@ ucfg_user_space_enable_disable_rso(struct wlan_objmgr_pdev *pdev,
|
|||||||
supplicant_disabled_roaming =
|
supplicant_disabled_roaming =
|
||||||
mlme_get_supplicant_disabled_roaming(psoc, vdev_id);
|
mlme_get_supplicant_disabled_roaming(psoc, vdev_id);
|
||||||
if (!is_fast_roam_enabled && supplicant_disabled_roaming) {
|
if (!is_fast_roam_enabled && supplicant_disabled_roaming) {
|
||||||
mlme_legacy_debug("ROAM_CONFIG: RSO already disabled by supplicant");
|
mlme_debug("ROAM_CONFIG: RSO already disabled by supplicant");
|
||||||
return QDF_STATUS_E_ALREADY;
|
return QDF_STATUS_E_ALREADY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,76 +76,25 @@ ucfg_user_space_enable_disable_rso(struct wlan_objmgr_pdev *pdev,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
QDF_STATUS ucfg_cm_abort_roam_scan(struct wlan_objmgr_pdev *pdev,
|
||||||
* Driver internally invoked RSO operation/configuration APIs.
|
uint8_t vdev_id)
|
||||||
*/
|
|
||||||
QDF_STATUS
|
|
||||||
ucfg_cm_rso_init_deinit(struct wlan_objmgr_pdev *pdev,
|
|
||||||
uint8_t vdev_id, bool enable)
|
|
||||||
{
|
{
|
||||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
|
||||||
uint8_t reason = REASON_SUPPLICANT_DE_INIT_ROAMING;
|
|
||||||
QDF_STATUS status;
|
QDF_STATUS status;
|
||||||
|
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||||
|
bool roam_scan_offload_enabled;
|
||||||
|
|
||||||
|
ucfg_mlme_is_roam_scan_offload_enabled(psoc,
|
||||||
|
&roam_scan_offload_enabled);
|
||||||
|
if (!roam_scan_offload_enabled)
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
status = cm_roam_acquire_lock();
|
status = cm_roam_acquire_lock();
|
||||||
if (QDF_IS_STATUS_ERROR(status))
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
return QDF_STATUS_E_FAILURE;
|
return status;
|
||||||
|
|
||||||
if (enable)
|
status = cm_roam_state_change(pdev, vdev_id,
|
||||||
reason = REASON_SUPPLICANT_INIT_ROAMING;
|
ROAM_SCAN_OFFLOAD_ABORT_SCAN,
|
||||||
|
REASON_ROAM_ABORT_ROAM_SCAN);
|
||||||
status = cm_roam_state_change(
|
|
||||||
pdev, vdev_id,
|
|
||||||
enable ? WLAN_ROAM_RSO_ENABLED : WLAN_ROAM_DEINIT,
|
|
||||||
reason);
|
|
||||||
cm_roam_release_lock();
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS ucfg_cm_disable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
|
||||||
enum wlan_cm_rso_control_requestor requestor,
|
|
||||||
uint8_t reason)
|
|
||||||
{
|
|
||||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
|
||||||
QDF_STATUS status;
|
|
||||||
|
|
||||||
status = cm_roam_acquire_lock();
|
|
||||||
if (QDF_IS_STATUS_ERROR(status))
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
|
|
||||||
if (reason == REASON_DRIVER_DISABLED && requestor)
|
|
||||||
mlme_set_operations_bitmap(psoc, vdev_id, requestor, false);
|
|
||||||
|
|
||||||
mlme_legacy_debug("ROAM_CONFIG: vdev[%d] Disable roaming - requestor:%s",
|
|
||||||
vdev_id, cm_roam_get_requestor_string(requestor));
|
|
||||||
|
|
||||||
status = cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_RSO_STOPPED,
|
|
||||||
REASON_DRIVER_DISABLED);
|
|
||||||
cm_roam_release_lock();
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
QDF_STATUS ucfg_cm_enable_rso(struct wlan_objmgr_pdev *pdev, uint32_t vdev_id,
|
|
||||||
enum wlan_cm_rso_control_requestor requestor,
|
|
||||||
uint8_t reason)
|
|
||||||
{
|
|
||||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
|
||||||
QDF_STATUS status;
|
|
||||||
|
|
||||||
if (reason == REASON_DRIVER_DISABLED && requestor)
|
|
||||||
mlme_set_operations_bitmap(mac->psoc, vdev_id, requestor, true);
|
|
||||||
|
|
||||||
status = cm_roam_acquire_lock();
|
|
||||||
if (QDF_IS_STATUS_ERROR(status))
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
|
|
||||||
mlme_legacy_debug("ROAM_CONFIG: vdev[%d] Enable roaming - requestor:%s",
|
|
||||||
vdev_id, cm_roam_get_requestor_string(requestor));
|
|
||||||
|
|
||||||
status = cm_roam_state_change(pdev, vdev_id, WLAN_ROAM_RSO_STARTED,
|
|
||||||
REASON_DRIVER_ENABLED);
|
|
||||||
cm_roam_release_lock();
|
cm_roam_release_lock();
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
|
@@ -171,63 +171,6 @@ struct wmi_mawc_roam_params {
|
|||||||
uint8_t rssi_stationary_low_adjust;
|
uint8_t rssi_stationary_low_adjust;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define MAX_SSID_ALLOWED_LIST 4
|
|
||||||
#define MAX_BSSID_AVOID_LIST 16
|
|
||||||
#define MAX_BSSID_FAVORED 16
|
|
||||||
|
|
||||||
/**
|
|
||||||
* struct roam_scan_filter_params - Structure holding roaming scan
|
|
||||||
* parameters
|
|
||||||
* @op_bitmap: bitmap to determine reason of roaming
|
|
||||||
* @vdev_id: vdev id
|
|
||||||
* @num_bssid_black_list: The number of BSSID's that we should avoid
|
|
||||||
* connecting to. It is like a blacklist of BSSID's.
|
|
||||||
* @num_ssid_white_list: The number of SSID profiles that are in the
|
|
||||||
* Whitelist. When roaming, we consider the BSSID's with
|
|
||||||
* this SSID also for roaming apart from the connected
|
|
||||||
* one's
|
|
||||||
* @num_bssid_preferred_list: Number of BSSID's which have a preference over
|
|
||||||
* others
|
|
||||||
* @bssid_avoid_list: Blacklist SSID's
|
|
||||||
* @ssid_allowed_list: Whitelist SSID's
|
|
||||||
* @bssid_favored: Favorable BSSID's
|
|
||||||
* @bssid_favored_factor: RSSI to be added to this BSSID to prefer it
|
|
||||||
* @lca_disallow_config_present: LCA [Last Connected AP] disallow config
|
|
||||||
* present
|
|
||||||
* @disallow_duration: How long LCA AP will be disallowed before it can be a
|
|
||||||
* roaming candidate again, in seconds
|
|
||||||
* @rssi_channel_penalization: How much RSSI will be penalized if candidate(s)
|
|
||||||
* are found in the same channel as disallowed
|
|
||||||
* AP's, in units of db
|
|
||||||
* @num_disallowed_aps: How many APs the target should maintain in its LCA
|
|
||||||
* list
|
|
||||||
* @delta_rssi: (dB units) when AB in RSSI blacklist improved by at least
|
|
||||||
* delta_rssi,it will be removed from blacklist
|
|
||||||
*
|
|
||||||
* This structure holds all the key parameters related to
|
|
||||||
* initial connection and roaming connections.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct roam_scan_filter_params {
|
|
||||||
uint32_t op_bitmap;
|
|
||||||
uint8_t vdev_id;
|
|
||||||
uint32_t num_bssid_black_list;
|
|
||||||
uint32_t num_ssid_white_list;
|
|
||||||
uint32_t num_bssid_preferred_list;
|
|
||||||
struct qdf_mac_addr bssid_avoid_list[MAX_BSSID_AVOID_LIST];
|
|
||||||
struct wlan_ssid ssid_allowed_list[MAX_SSID_ALLOWED_LIST];
|
|
||||||
struct qdf_mac_addr bssid_favored[MAX_BSSID_FAVORED];
|
|
||||||
uint8_t bssid_favored_factor[MAX_BSSID_FAVORED];
|
|
||||||
uint8_t lca_disallow_config_present;
|
|
||||||
uint32_t disallow_duration;
|
|
||||||
uint32_t rssi_channel_penalization;
|
|
||||||
uint32_t num_disallowed_aps;
|
|
||||||
uint32_t num_rssi_rejection_ap;
|
|
||||||
struct reject_ap_config_params
|
|
||||||
rssi_rejection_ap[MAX_RSSI_AVOID_BSSID_LIST];
|
|
||||||
uint32_t delta_rssi;
|
|
||||||
};
|
|
||||||
|
|
||||||
#define WMI_CFG_VALID_CHANNEL_LIST_LEN 100
|
#define WMI_CFG_VALID_CHANNEL_LIST_LEN 100
|
||||||
/* Occupied channel list remains static */
|
/* Occupied channel list remains static */
|
||||||
#define WMI_CHANNEL_LIST_STATIC 1
|
#define WMI_CHANNEL_LIST_STATIC 1
|
||||||
@@ -271,209 +214,6 @@ struct plm_req_params {
|
|||||||
bool enable;
|
bool enable;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* struct ap_profile - Structure ap profile to match candidate
|
|
||||||
* @flags: flags
|
|
||||||
* @rssi_threshold: the value of the the candidate AP should higher by this
|
|
||||||
* threshold than the rssi of the currrently associated AP
|
|
||||||
* @ssid: ssid vlaue to be matched
|
|
||||||
* @rsn_authmode: security params to be matched
|
|
||||||
* @rsn_ucastcipherset: unicast cipher set
|
|
||||||
* @rsn_mcastcipherset: mcast/group cipher set
|
|
||||||
* @rsn_mcastmgmtcipherset: mcast/group management frames cipher set
|
|
||||||
* @rssi_abs_thresh: the value of the candidate AP should higher than this
|
|
||||||
* absolute RSSI threshold. Zero means no absolute minimum
|
|
||||||
* RSSI is required. units are the offset from the noise
|
|
||||||
* floor in dB
|
|
||||||
*/
|
|
||||||
struct ap_profile {
|
|
||||||
uint32_t flags;
|
|
||||||
uint32_t rssi_threshold;
|
|
||||||
struct wlan_ssid ssid;
|
|
||||||
uint32_t rsn_authmode;
|
|
||||||
uint32_t rsn_ucastcipherset;
|
|
||||||
uint32_t rsn_mcastcipherset;
|
|
||||||
uint32_t rsn_mcastmgmtcipherset;
|
|
||||||
uint32_t rssi_abs_thresh;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* struct scoring_param - scoring param to sortlist selected AP
|
|
||||||
* @disable_bitmap: Each bit will be either allow(0)/disallow(1) to
|
|
||||||
* considered the roam score param.
|
|
||||||
* @rssi_weightage: RSSI weightage out of total score in %
|
|
||||||
* @ht_weightage: HT weightage out of total score in %.
|
|
||||||
* @vht_weightage: VHT weightage out of total score in %.
|
|
||||||
* @he_weightaget: 11ax weightage out of total score in %.
|
|
||||||
* @bw_weightage: Bandwidth weightage out of total score in %.
|
|
||||||
* @band_weightage: Band(2G/5G) weightage out of total score in %.
|
|
||||||
* @nss_weightage: NSS(1x1 / 2x2)weightage out of total score in %.
|
|
||||||
* @esp_qbss_weightage: ESP/QBSS weightage out of total score in %.
|
|
||||||
* @beamforming_weightage: Beamforming weightage out of total score in %.
|
|
||||||
* @pcl_weightage: PCL weightage out of total score in %.
|
|
||||||
* @oce_wan_weightage OCE WAN metrics weightage out of total score in %.
|
|
||||||
* @oce_ap_tx_pwr_weightage: OCE AP TX power score in %
|
|
||||||
* @oce_subnet_id_weightage: OCE subnet id score in %
|
|
||||||
* @bw_index_score: channel BW scoring percentage information.
|
|
||||||
* BITS 0-7 :- It contains scoring percentage of 20MHz BW
|
|
||||||
* BITS 8-15 :- It contains scoring percentage of 40MHz BW
|
|
||||||
* BITS 16-23 :- It contains scoring percentage of 80MHz BW
|
|
||||||
* BITS 24-31 :- It contains scoring percentage of 1600MHz BW
|
|
||||||
* The value of each index must be 0-100
|
|
||||||
* @band_index_score: band scording percentage information.
|
|
||||||
* BITS 0-7 :- It contains scoring percentage of 2G
|
|
||||||
* BITS 8-15 :- It contains scoring percentage of 5G
|
|
||||||
* BITS 16-23 :- reserved
|
|
||||||
* BITS 24-31 :- reserved
|
|
||||||
* The value of each index must be 0-100
|
|
||||||
* @nss_index_score: NSS scoring percentage information.
|
|
||||||
* BITS 0-7 :- It contains scoring percentage of 1x1
|
|
||||||
* BITS 8-15 :- It contains scoring percentage of 2x2
|
|
||||||
* BITS 16-23 :- It contains scoring percentage of 3x3
|
|
||||||
* BITS 24-31 :- It contains scoring percentage of 4x4
|
|
||||||
* The value of each index must be 0-100
|
|
||||||
* @roam_score_delta: delta value expected over the roam score of the candidate
|
|
||||||
* ap over the roam score of the current ap
|
|
||||||
* @roam_trigger_bitmap: bitmap of roam triggers on which roam_score_delta
|
|
||||||
* will be applied
|
|
||||||
* @vendor_roam_score_algorithm: Prefered algorithm for roam candidate selection
|
|
||||||
* @cand_min_roam_score_delta: candidate min roam score delta value
|
|
||||||
* @rssi_scoring: RSSI scoring information.
|
|
||||||
* @esp_qbss_scoring: ESP/QBSS scoring percentage information
|
|
||||||
* @oce_wan_scoring: OCE WAN metrics percentage information
|
|
||||||
*/
|
|
||||||
struct scoring_param {
|
|
||||||
uint32_t disable_bitmap;
|
|
||||||
int32_t rssi_weightage;
|
|
||||||
int32_t ht_weightage;
|
|
||||||
int32_t vht_weightage;
|
|
||||||
int32_t he_weightage;
|
|
||||||
int32_t bw_weightage;
|
|
||||||
int32_t band_weightage;
|
|
||||||
int32_t nss_weightage;
|
|
||||||
int32_t esp_qbss_weightage;
|
|
||||||
int32_t beamforming_weightage;
|
|
||||||
int32_t pcl_weightage;
|
|
||||||
int32_t oce_wan_weightage;
|
|
||||||
uint32_t oce_ap_tx_pwr_weightage;
|
|
||||||
uint32_t oce_subnet_id_weightage;
|
|
||||||
uint32_t bw_index_score;
|
|
||||||
uint32_t band_index_score;
|
|
||||||
uint32_t nss_index_score;
|
|
||||||
uint32_t roam_score_delta;
|
|
||||||
uint32_t roam_trigger_bitmap;
|
|
||||||
uint32_t vendor_roam_score_algorithm;
|
|
||||||
uint32_t cand_min_roam_score_delta;
|
|
||||||
struct rssi_config_score rssi_scoring;
|
|
||||||
struct per_slot_score esp_qbss_scoring;
|
|
||||||
struct per_slot_score oce_wan_scoring;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Currently roam score delta value and min rssi values are sent
|
|
||||||
* for 2 triggers
|
|
||||||
*/
|
|
||||||
#define NUM_OF_ROAM_TRIGGERS 2
|
|
||||||
#define IDLE_ROAM_TRIGGER 0
|
|
||||||
#define BTM_ROAM_TRIGGER 1
|
|
||||||
|
|
||||||
#define DEAUTH_MIN_RSSI 0
|
|
||||||
#define BMISS_MIN_RSSI 1
|
|
||||||
|
|
||||||
/**
|
|
||||||
* enum roam_trigger_reason - Reason for triggering roam
|
|
||||||
* ROAM_TRIGGER_REASON_NONE: Roam trigger reason none
|
|
||||||
* ROAM_TRIGGER_REASON_PER: Roam triggered due to packet error
|
|
||||||
* ROAM_TRIGGER_REASON_BMISS: Roam triggered due to beacon miss
|
|
||||||
* ROAM_TRIGGER_REASON_LOW_RSSI: Roam triggered due to low RSSI of current
|
|
||||||
* connected AP.
|
|
||||||
* ROAM_TRIGGER_REASON_HIGH_RSSI: Roam triggered because sta is connected to
|
|
||||||
* a AP in 2.4GHz band and a better 5GHz AP is available
|
|
||||||
* ROAM_TRIGGER_REASON_PERIODIC: Roam triggered as better AP was found during
|
|
||||||
* periodic roam scan.
|
|
||||||
* ROAM_TRIGGER_REASON_MAWC: Motion Aided WiFi Connectivity triggered roam.
|
|
||||||
* ROAM_TRIGGER_REASON_DENSE: Roaming triggered due to dense environment
|
|
||||||
* detected.
|
|
||||||
* ROAM_TRIGGER_REASON_BACKGROUND: Roam triggered due to current AP having
|
|
||||||
* poor rssi and scan candidate found in scan results provided by other
|
|
||||||
* scan clients.
|
|
||||||
* ROAM_TRIGGER_REASON_FORCED: Forced roam trigger.
|
|
||||||
* ROAM_TRIGGER_REASON_BTM: Roam triggered due to AP sent BTM query with
|
|
||||||
* Disassoc imminent bit set.
|
|
||||||
* ROAM_TRIGGER_REASON_UNIT_TEST: Roam triggered due to unit test command.
|
|
||||||
* ROAM_TRIGGER_REASON_BSS_LOAD: Roam triggered due to high channel utilization
|
|
||||||
* in the current connected channel
|
|
||||||
* ROAM_TRIGGER_REASON_DEAUTH: Roam triggered due to deauth received from the
|
|
||||||
* current connected AP.
|
|
||||||
* ROAM_TRIGGER_REASON_IDLE: Roam triggered due to inactivity of the device.
|
|
||||||
* ROAM_TRIGGER_REASON_STA_KICKOUT: Roam triggered due to sta kickout event.
|
|
||||||
* ROAM_TRIGGER_REASON_ESS_RSSI: Roam triggered due to ess rssi
|
|
||||||
* ROAM_TRIGGER_REASON_WTC_BTM: Roam triggered due to WTC BTM
|
|
||||||
* ROAM_TRIGGER_REASON_MAX: Maximum number of roam triggers
|
|
||||||
*/
|
|
||||||
enum roam_trigger_reason {
|
|
||||||
ROAM_TRIGGER_REASON_NONE = 0,
|
|
||||||
ROAM_TRIGGER_REASON_PER,
|
|
||||||
ROAM_TRIGGER_REASON_BMISS,
|
|
||||||
ROAM_TRIGGER_REASON_LOW_RSSI,
|
|
||||||
ROAM_TRIGGER_REASON_HIGH_RSSI,
|
|
||||||
ROAM_TRIGGER_REASON_PERIODIC,
|
|
||||||
ROAM_TRIGGER_REASON_MAWC,
|
|
||||||
ROAM_TRIGGER_REASON_DENSE,
|
|
||||||
ROAM_TRIGGER_REASON_BACKGROUND,
|
|
||||||
ROAM_TRIGGER_REASON_FORCED,
|
|
||||||
ROAM_TRIGGER_REASON_BTM,
|
|
||||||
ROAM_TRIGGER_REASON_UNIT_TEST,
|
|
||||||
ROAM_TRIGGER_REASON_BSS_LOAD,
|
|
||||||
ROAM_TRIGGER_REASON_DEAUTH,
|
|
||||||
ROAM_TRIGGER_REASON_IDLE,
|
|
||||||
ROAM_TRIGGER_REASON_STA_KICKOUT,
|
|
||||||
ROAM_TRIGGER_REASON_ESS_RSSI,
|
|
||||||
ROAM_TRIGGER_REASON_WTC_BTM,
|
|
||||||
ROAM_TRIGGER_REASON_MAX,
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* struct roam_trigger_min_rssi - structure to hold minimum rssi value of
|
|
||||||
* candidate APs for each roam trigger
|
|
||||||
* @min_rssi: minimum RSSI of candidate AP for the trigger reason specified in
|
|
||||||
* trigger_id
|
|
||||||
* @trigger_reason: Roam trigger reason
|
|
||||||
*/
|
|
||||||
struct roam_trigger_min_rssi {
|
|
||||||
int32_t min_rssi;
|
|
||||||
enum roam_trigger_reason trigger_reason;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* struct roam_trigger_score_delta - structure to hold roam score delta value of
|
|
||||||
* candidate APs for each roam trigger
|
|
||||||
* @roam_score_delta: delta value in score of the candidate AP for the roam
|
|
||||||
* trigger mentioned in the trigger_id.
|
|
||||||
* @trigger_reason: Roam trigger reason
|
|
||||||
*/
|
|
||||||
struct roam_trigger_score_delta {
|
|
||||||
uint32_t roam_score_delta;
|
|
||||||
enum roam_trigger_reason trigger_reason;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* struct ap_profile_params - ap profile params
|
|
||||||
* @vdev_id: vdev id
|
|
||||||
* @profile: ap profile to match candidate
|
|
||||||
* @param: scoring params to short candidate
|
|
||||||
* @min_rssi_params: Min RSSI values for different roam triggers
|
|
||||||
* @score_delta_params: Roam score delta values for different triggers
|
|
||||||
*/
|
|
||||||
struct ap_profile_params {
|
|
||||||
uint8_t vdev_id;
|
|
||||||
struct ap_profile profile;
|
|
||||||
struct scoring_param param;
|
|
||||||
struct roam_trigger_min_rssi min_rssi_params[NUM_OF_ROAM_TRIGGERS];
|
|
||||||
struct roam_trigger_score_delta score_delta_param[NUM_OF_ROAM_TRIGGERS];
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct wmi_roam_invoke_cmd - roam invoke command
|
* struct wmi_roam_invoke_cmd - roam invoke command
|
||||||
* @vdev_id: vdev id
|
* @vdev_id: vdev id
|
||||||
|
@@ -154,7 +154,7 @@
|
|||||||
#include "wlan_hdd_apf.h"
|
#include "wlan_hdd_apf.h"
|
||||||
#include "wlan_hdd_cfr.h"
|
#include "wlan_hdd_cfr.h"
|
||||||
#include "wlan_hdd_ioctl.h"
|
#include "wlan_hdd_ioctl.h"
|
||||||
#include "wlan_cm_roam_api.h"
|
#include "wlan_cm_roam_ucfg_api.h"
|
||||||
|
|
||||||
#define g_mode_rates_size (12)
|
#define g_mode_rates_size (12)
|
||||||
#define a_mode_rates_size (8)
|
#define a_mode_rates_size (8)
|
||||||
|
@@ -47,6 +47,7 @@
|
|||||||
#include "wlan_scan_ucfg_api.h"
|
#include "wlan_scan_ucfg_api.h"
|
||||||
#include "wlan_reg_ucfg_api.h"
|
#include "wlan_reg_ucfg_api.h"
|
||||||
#include "qdf_func_tracker.h"
|
#include "qdf_func_tracker.h"
|
||||||
|
#include "wlan_cm_roam_ucfg_api.h"
|
||||||
|
|
||||||
#if defined(LINUX_QCMBR)
|
#if defined(LINUX_QCMBR)
|
||||||
#define SIOCIOCTLTX99 (SIOCDEVPRIVATE+13)
|
#define SIOCIOCTLTX99 (SIOCDEVPRIVATE+13)
|
||||||
@@ -744,6 +745,19 @@ static int hdd_parse_reassoc(struct hdd_adapter *adapter, const char *command,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ROAM_OFFLOAD_V1
|
||||||
|
static inline
|
||||||
|
void hdd_abort_roam_scan(struct hdd_context *hdd_ctx, uint8_t vdev_id)
|
||||||
|
{
|
||||||
|
ucfg_cm_abort_roam_scan(hdd_ctx->pdev, vdev_id);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline
|
||||||
|
void hdd_abort_roam_scan(struct hdd_context *hdd_ctx, uint8_t vdev_id)
|
||||||
|
{
|
||||||
|
sme_abort_roam_scan(hdd_ctx->mac_handle, vdev_id);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
/**
|
/**
|
||||||
* hdd_sendactionframe() - send a userspace-supplied action frame
|
* hdd_sendactionframe() - send a userspace-supplied action frame
|
||||||
* @adapter: Adapter upon which the command was received
|
* @adapter: Adapter upon which the command was received
|
||||||
@@ -839,8 +853,7 @@ hdd_sendactionframe(struct hdd_adapter *adapter, const uint8_t *bssid,
|
|||||||
* may cause long delays in sending action
|
* may cause long delays in sending action
|
||||||
* frames.
|
* frames.
|
||||||
*/
|
*/
|
||||||
sme_abort_roam_scan(hdd_ctx->mac_handle,
|
hdd_abort_roam_scan(hdd_ctx, adapter->vdev_id);
|
||||||
adapter->vdev_id);
|
|
||||||
} else {
|
} else {
|
||||||
/*
|
/*
|
||||||
* 0 is accepted as current home channel,
|
* 0 is accepted as current home channel,
|
||||||
|
@@ -2025,9 +2025,7 @@ typedef enum {
|
|||||||
SIR_ROAMING_DFS_CHANNEL_ENABLED_NORMAL = 1,
|
SIR_ROAMING_DFS_CHANNEL_ENABLED_NORMAL = 1,
|
||||||
SIR_ROAMING_DFS_CHANNEL_ENABLED_ACTIVE = 2
|
SIR_ROAMING_DFS_CHANNEL_ENABLED_ACTIVE = 2
|
||||||
} eSirDFSRoamScanMode;
|
} eSirDFSRoamScanMode;
|
||||||
#define MAX_SSID_ALLOWED_LIST 4
|
|
||||||
#define MAX_BSSID_AVOID_LIST 16
|
|
||||||
#define MAX_BSSID_FAVORED 16
|
|
||||||
/**
|
/**
|
||||||
* struct roam_ext_params - Structure holding roaming parameters
|
* struct roam_ext_params - Structure holding roaming parameters
|
||||||
* @num_bssid_avoid_list: The number of BSSID's that we should
|
* @num_bssid_avoid_list: The number of BSSID's that we should
|
||||||
|
@@ -981,9 +981,10 @@ QDF_STATUS sme_update_is_fast_roam_ini_feature_enabled(mac_handle_t mac_handle,
|
|||||||
const bool
|
const bool
|
||||||
isFastRoamIniFeatureEnabled);
|
isFastRoamIniFeatureEnabled);
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
QDF_STATUS sme_config_fast_roaming(mac_handle_t mac_handle, uint8_t session_id,
|
QDF_STATUS sme_config_fast_roaming(mac_handle_t mac_handle, uint8_t session_id,
|
||||||
const bool is_fast_roam_enabled);
|
const bool is_fast_roam_enabled);
|
||||||
|
#endif
|
||||||
QDF_STATUS sme_stop_roaming(mac_handle_t mac_handle, uint8_t sessionId,
|
QDF_STATUS sme_stop_roaming(mac_handle_t mac_handle, uint8_t sessionId,
|
||||||
uint8_t reason,
|
uint8_t reason,
|
||||||
enum wlan_cm_rso_control_requestor requestor);
|
enum wlan_cm_rso_control_requestor requestor);
|
||||||
@@ -1632,7 +1633,10 @@ QDF_STATUS sme_ext_scan_register_callback(mac_handle_t mac_handle,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
#endif /* FEATURE_WLAN_EXTSCAN */
|
#endif /* FEATURE_WLAN_EXTSCAN */
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
QDF_STATUS sme_abort_roam_scan(mac_handle_t mac_handle, uint8_t sessionId);
|
QDF_STATUS sme_abort_roam_scan(mac_handle_t mac_handle, uint8_t sessionId);
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sme_get_vht_ch_width() - SME API to get the max supported FW chan width
|
* sme_get_vht_ch_width() - SME API to get the max supported FW chan width
|
||||||
|
@@ -6210,6 +6210,7 @@ QDF_STATUS sme_update_is_fast_roam_ini_feature_enabled(mac_handle_t mac_handle,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
/**
|
/**
|
||||||
* sme_config_fast_roaming() - enable/disable LFR support at runtime
|
* sme_config_fast_roaming() - enable/disable LFR support at runtime
|
||||||
* @mac_handle - The handle returned by macOpen.
|
* @mac_handle - The handle returned by macOpen.
|
||||||
@@ -6268,6 +6269,7 @@ QDF_STATUS sme_config_fast_roaming(mac_handle_t mac_handle, uint8_t session_id,
|
|||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FEATURE_WLAN_ESE
|
#ifdef FEATURE_WLAN_ESE
|
||||||
int sme_add_key_krk(mac_handle_t mac_handle, uint8_t session_id,
|
int sme_add_key_krk(mac_handle_t mac_handle, uint8_t session_id,
|
||||||
@@ -6326,6 +6328,33 @@ int sme_add_key_btk(mac_handle_t mac_handle, uint8_t session_id,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef ROAM_OFFLOAD_V1
|
||||||
|
QDF_STATUS sme_stop_roaming(mac_handle_t mac_handle, uint8_t vdev_id,
|
||||||
|
uint8_t reason,
|
||||||
|
enum wlan_cm_rso_control_requestor requestor)
|
||||||
|
{
|
||||||
|
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||||
|
struct csr_roam_session *session;
|
||||||
|
|
||||||
|
session = CSR_GET_SESSION(mac, vdev_id);
|
||||||
|
if (!session) {
|
||||||
|
sme_err("ROAM: incorrect vdev ID %d", vdev_id);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return wlan_cm_disable_rso(mac->pdev, vdev_id, requestor, reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS sme_start_roaming(mac_handle_t mac_handle, uint8_t vdev_id,
|
||||||
|
uint8_t reason,
|
||||||
|
enum wlan_cm_rso_control_requestor requestor)
|
||||||
|
{
|
||||||
|
struct mac_context *mac = MAC_CONTEXT(mac_handle);
|
||||||
|
|
||||||
|
return wlan_cm_enable_rso(mac->pdev, vdev_id, requestor, reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
/**
|
/**
|
||||||
* sme_stop_roaming() - Stop roaming for a given sessionId
|
* sme_stop_roaming() - Stop roaming for a given sessionId
|
||||||
* This is a synchronous call
|
* This is a synchronous call
|
||||||
@@ -6396,6 +6425,7 @@ QDF_STATUS sme_start_roaming(mac_handle_t mac_handle, uint8_t sessionId,
|
|||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void sme_set_pcl_for_first_connected_vdev(mac_handle_t mac_handle,
|
void sme_set_pcl_for_first_connected_vdev(mac_handle_t mac_handle,
|
||||||
uint8_t vdev_id)
|
uint8_t vdev_id)
|
||||||
@@ -9652,6 +9682,7 @@ QDF_STATUS sme_update_dsc_pto_up_mapping(mac_handle_t mac_handle,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
/*
|
/*
|
||||||
* sme_abort_roam_scan() -
|
* sme_abort_roam_scan() -
|
||||||
* API to abort current roam scan cycle by roam scan offload module.
|
* API to abort current roam scan cycle by roam scan offload module.
|
||||||
@@ -9680,6 +9711,7 @@ QDF_STATUS sme_abort_roam_scan(mac_handle_t mac_handle, uint8_t sessionId)
|
|||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QDF_STATUS sme_get_valid_channels_by_band(mac_handle_t mac_handle,
|
QDF_STATUS sme_get_valid_channels_by_band(mac_handle_t mac_handle,
|
||||||
uint8_t wifi_band,
|
uint8_t wifi_band,
|
||||||
@@ -15990,6 +16022,24 @@ void sme_chan_to_freq_list(
|
|||||||
wlan_reg_chan_to_freq(pdev, (uint32_t)chan_list[count]);
|
wlan_reg_chan_to_freq(pdev, (uint32_t)chan_list[count]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ROAM_OFFLOAD_V1
|
||||||
|
static inline
|
||||||
|
QDF_STATUS sme_rso_init_deinit(struct mac_context *mac,
|
||||||
|
struct wlan_roam_triggers *triggers)
|
||||||
|
{
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
|
if (!triggers->trigger_bitmap)
|
||||||
|
status = wlan_cm_rso_init_deinit(mac->pdev, triggers->vdev_id,
|
||||||
|
false);
|
||||||
|
else
|
||||||
|
status = wlan_cm_rso_init_deinit(mac->pdev, triggers->vdev_id,
|
||||||
|
true);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
static QDF_STATUS sme_enable_roaming(struct mac_context *mac, uint32_t vdev_id,
|
static QDF_STATUS sme_enable_roaming(struct mac_context *mac, uint32_t vdev_id,
|
||||||
bool enable)
|
bool enable)
|
||||||
{
|
{
|
||||||
@@ -16019,6 +16069,23 @@ static QDF_STATUS sme_enable_roaming(struct mac_context *mac, uint32_t vdev_id,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline
|
||||||
|
QDF_STATUS sme_rso_init_deinit(struct mac_context *mac,
|
||||||
|
struct wlan_roam_triggers *triggers)
|
||||||
|
{
|
||||||
|
QDF_STATUS status;
|
||||||
|
|
||||||
|
if (!triggers->trigger_bitmap)
|
||||||
|
status = sme_enable_roaming(mac, triggers->vdev_id,
|
||||||
|
false);
|
||||||
|
else
|
||||||
|
status = sme_enable_roaming(mac, triggers->vdev_id,
|
||||||
|
true);
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QDF_STATUS sme_set_roam_triggers(mac_handle_t mac_handle,
|
QDF_STATUS sme_set_roam_triggers(mac_handle_t mac_handle,
|
||||||
struct wlan_roam_triggers *triggers)
|
struct wlan_roam_triggers *triggers)
|
||||||
{
|
{
|
||||||
@@ -16029,13 +16096,8 @@ QDF_STATUS sme_set_roam_triggers(mac_handle_t mac_handle,
|
|||||||
|
|
||||||
mlme_set_roam_trigger_bitmap(mac->psoc, triggers->vdev_id,
|
mlme_set_roam_trigger_bitmap(mac->psoc, triggers->vdev_id,
|
||||||
triggers->trigger_bitmap);
|
triggers->trigger_bitmap);
|
||||||
if (!triggers->trigger_bitmap)
|
|
||||||
status = sme_enable_roaming(mac, triggers->vdev_id,
|
|
||||||
false);
|
|
||||||
else
|
|
||||||
status = sme_enable_roaming(mac, triggers->vdev_id,
|
|
||||||
true);
|
|
||||||
|
|
||||||
|
status = sme_rso_init_deinit(mac, triggers);
|
||||||
if (QDF_IS_STATUS_ERROR(status))
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
return status;
|
return status;
|
||||||
|
|
||||||
|
@@ -1740,6 +1740,7 @@ QDF_STATUS csr_create_bg_scan_roam_channel_list(struct mac_context *mac,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||||
/**
|
/**
|
||||||
* csr_check_band_freq_match() - check if passed band and ch freq match
|
* csr_check_band_freq_match() - check if passed band and ch freq match
|
||||||
@@ -1820,6 +1821,7 @@ is_dfs_unsafe_extra_band_chan(struct mac_context *mac_ctx, uint32_t freq,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef FEATURE_WLAN_ESE
|
#ifdef FEATURE_WLAN_ESE
|
||||||
/**
|
/**
|
||||||
@@ -2097,6 +2099,7 @@ QDF_STATUS csr_get_tsm_stats(struct mac_context *mac,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||||
/**
|
/**
|
||||||
* csr_fetch_ch_lst_from_received_list() - fetch channel list from received list
|
* csr_fetch_ch_lst_from_received_list() - fetch channel list from received list
|
||||||
@@ -2136,6 +2139,7 @@ csr_fetch_ch_lst_from_received_list(struct mac_context *mac_ctx,
|
|||||||
req_buf->ChannelCacheType = CHANNEL_LIST_DYNAMIC;
|
req_buf->ChannelCacheType = CHANNEL_LIST_DYNAMIC;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* csr_set_cckm_ie() - set CCKM IE
|
* csr_set_cckm_ie() - set CCKM IE
|
||||||
@@ -2494,6 +2498,7 @@ void csr_set_11k_offload_config_param(struct csr_config *csr_config,
|
|||||||
max_neighbor_report_req_cap;
|
max_neighbor_report_req_cap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
static void
|
static void
|
||||||
csr_copy_mawc_config(struct mac_context *mac,
|
csr_copy_mawc_config(struct mac_context *mac,
|
||||||
struct mawc_params *mawc_config)
|
struct mawc_params *mawc_config)
|
||||||
@@ -2511,6 +2516,7 @@ csr_copy_mawc_config(struct mac_context *mac,
|
|||||||
mawc_config->mawc_roam_rssi_low_adjust =
|
mawc_config->mawc_roam_rssi_low_adjust =
|
||||||
mac->mlme_cfg->lfr.mawc_roam_rssi_low_adjust;
|
mac->mlme_cfg->lfr.mawc_roam_rssi_low_adjust;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
QDF_STATUS csr_change_default_config_param(struct mac_context *mac,
|
QDF_STATUS csr_change_default_config_param(struct mac_context *mac,
|
||||||
struct csr_config_params *pParam)
|
struct csr_config_params *pParam)
|
||||||
@@ -16682,6 +16688,7 @@ QDF_STATUS csr_roam_set_key_mgmt_offload(struct mac_context *mac_ctx,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
/**
|
/**
|
||||||
* csr_update_roam_scan_ese_params() - Update ESE related params in RSO request
|
* csr_update_roam_scan_ese_params() - Update ESE related params in RSO request
|
||||||
* @req_buf: Roam Scan Offload Request buffer
|
* @req_buf: Roam Scan Offload Request buffer
|
||||||
@@ -16911,6 +16918,7 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
|
|||||||
req_buf->roaming_scan_policy =
|
req_buf->roaming_scan_policy =
|
||||||
mac_ctx->mlme_cfg->lfr.roaming_scan_policy;
|
mac_ctx->mlme_cfg->lfr.roaming_scan_policy;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef WLAN_FEATURE_FIPS
|
#ifdef WLAN_FEATURE_FIPS
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
@@ -16989,6 +16997,8 @@ csr_update_roam_scan_offload_request(struct mac_context *mac_ctx,
|
|||||||
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
|
||||||
|
|
||||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
/**
|
/**
|
||||||
* csr_populate_roam_chan_list()
|
* csr_populate_roam_chan_list()
|
||||||
* parameters
|
* parameters
|
||||||
@@ -17753,52 +17763,6 @@ csr_update_11k_offload_params(struct mac_context *mac_ctx,
|
|||||||
session->connectedProfile.SSID.length);
|
session->connectedProfile.SSID.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
QDF_STATUS csr_invoke_neighbor_report_request(uint8_t session_id,
|
|
||||||
struct sRrmNeighborReq *neighbor_report_req,
|
|
||||||
bool send_resp_to_host)
|
|
||||||
{
|
|
||||||
struct wmi_invoke_neighbor_report_params *invoke_params;
|
|
||||||
struct scheduler_msg msg = {0};
|
|
||||||
|
|
||||||
if (!neighbor_report_req) {
|
|
||||||
sme_err("Invalid params");
|
|
||||||
return QDF_STATUS_E_INVAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
invoke_params = qdf_mem_malloc(sizeof(*invoke_params));
|
|
||||||
if (!invoke_params)
|
|
||||||
return QDF_STATUS_E_NOMEM;
|
|
||||||
|
|
||||||
invoke_params->vdev_id = session_id;
|
|
||||||
invoke_params->send_resp_to_host = send_resp_to_host;
|
|
||||||
|
|
||||||
if (!neighbor_report_req->no_ssid) {
|
|
||||||
invoke_params->ssid.length = neighbor_report_req->ssid.length;
|
|
||||||
qdf_mem_copy(invoke_params->ssid.ssid,
|
|
||||||
neighbor_report_req->ssid.ssId,
|
|
||||||
neighbor_report_req->ssid.length);
|
|
||||||
} else {
|
|
||||||
invoke_params->ssid.length = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
sme_debug("Sending SIR_HAL_INVOKE_NEIGHBOR_REPORT");
|
|
||||||
|
|
||||||
msg.type = SIR_HAL_INVOKE_NEIGHBOR_REPORT;
|
|
||||||
msg.reserved = 0;
|
|
||||||
msg.bodyptr = invoke_params;
|
|
||||||
|
|
||||||
if (QDF_STATUS_SUCCESS != scheduler_post_message(QDF_MODULE_ID_SME,
|
|
||||||
QDF_MODULE_ID_WMA,
|
|
||||||
QDF_MODULE_ID_WMA,
|
|
||||||
&msg)) {
|
|
||||||
sme_err("Not able to post message to WMA");
|
|
||||||
qdf_mem_free(invoke_params);
|
|
||||||
return QDF_STATUS_E_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* check_allowed_ssid_list() - Check the WhiteList
|
* check_allowed_ssid_list() - Check the WhiteList
|
||||||
* @req_buffer: Buffer which contains the connected profile SSID.
|
* @req_buffer: Buffer which contains the connected profile SSID.
|
||||||
@@ -17888,6 +17852,54 @@ csr_add_rssi_reject_ap_list(struct mac_context *mac_ctx,
|
|||||||
|
|
||||||
qdf_mem_free(reject_list);
|
qdf_mem_free(reject_list);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
QDF_STATUS csr_invoke_neighbor_report_request(
|
||||||
|
uint8_t session_id,
|
||||||
|
struct sRrmNeighborReq *neighbor_report_req,
|
||||||
|
bool send_resp_to_host)
|
||||||
|
{
|
||||||
|
struct wmi_invoke_neighbor_report_params *invoke_params;
|
||||||
|
struct scheduler_msg msg = {0};
|
||||||
|
|
||||||
|
if (!neighbor_report_req) {
|
||||||
|
sme_err("Invalid params");
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
invoke_params = qdf_mem_malloc(sizeof(*invoke_params));
|
||||||
|
if (!invoke_params)
|
||||||
|
return QDF_STATUS_E_NOMEM;
|
||||||
|
|
||||||
|
invoke_params->vdev_id = session_id;
|
||||||
|
invoke_params->send_resp_to_host = send_resp_to_host;
|
||||||
|
|
||||||
|
if (!neighbor_report_req->no_ssid) {
|
||||||
|
invoke_params->ssid.length = neighbor_report_req->ssid.length;
|
||||||
|
qdf_mem_copy(invoke_params->ssid.ssid,
|
||||||
|
neighbor_report_req->ssid.ssId,
|
||||||
|
neighbor_report_req->ssid.length);
|
||||||
|
} else {
|
||||||
|
invoke_params->ssid.length = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
sme_debug("Sending SIR_HAL_INVOKE_NEIGHBOR_REPORT");
|
||||||
|
|
||||||
|
msg.type = SIR_HAL_INVOKE_NEIGHBOR_REPORT;
|
||||||
|
msg.reserved = 0;
|
||||||
|
msg.bodyptr = invoke_params;
|
||||||
|
|
||||||
|
if (QDF_STATUS_SUCCESS != scheduler_post_message(QDF_MODULE_ID_SME,
|
||||||
|
QDF_MODULE_ID_WMA,
|
||||||
|
QDF_MODULE_ID_WMA,
|
||||||
|
&msg)) {
|
||||||
|
sme_err("Not able to post message to WMA");
|
||||||
|
qdf_mem_free(invoke_params);
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* csr_roam_send_rso_cmd() - API to send RSO command to PE
|
* csr_roam_send_rso_cmd() - API to send RSO command to PE
|
||||||
@@ -17919,6 +17931,7 @@ csr_roam_send_rso_cmd(struct mac_context *mac_ctx,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
/**
|
/**
|
||||||
* csr_append_assoc_ies() - Append specific IE to assoc IE's buffer
|
* csr_append_assoc_ies() - Append specific IE to assoc IE's buffer
|
||||||
* @mac_ctx: Pointer to global mac context
|
* @mac_ctx: Pointer to global mac context
|
||||||
@@ -17998,6 +18011,7 @@ static void ese_populate_addtional_ies(struct mac_context *mac_ctx,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* csr_update_driver_assoc_ies() - Append driver built IE's to assoc IE's
|
* csr_update_driver_assoc_ies() - Append driver built IE's to assoc IE's
|
||||||
* @mac_ctx: Pointer to global mac structure
|
* @mac_ctx: Pointer to global mac structure
|
||||||
@@ -18177,6 +18191,7 @@ csr_roam_offload_per_scan(struct mac_context *mac_ctx, uint8_t session_id)
|
|||||||
}
|
}
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(WLAN_FEATURE_FILS_SK)
|
#if defined(WLAN_FEATURE_FILS_SK)
|
||||||
QDF_STATUS csr_update_fils_config(struct mac_context *mac, uint8_t session_id,
|
QDF_STATUS csr_update_fils_config(struct mac_context *mac, uint8_t session_id,
|
||||||
@@ -18200,6 +18215,7 @@ QDF_STATUS csr_update_fils_config(struct mac_context *mac, uint8_t session_id,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
/**
|
/**
|
||||||
* copy_all_before_char() - API to copy all character before a particular char
|
* copy_all_before_char() - API to copy all character before a particular char
|
||||||
* @str: Source string
|
* @str: Source string
|
||||||
@@ -18293,26 +18309,29 @@ static void csr_update_fils_params_rso(struct mac_context *mac,
|
|||||||
roam_fils_params->next_erp_seq_num,
|
roam_fils_params->next_erp_seq_num,
|
||||||
roam_fils_params->rrk_length, roam_fils_params->realm_len);
|
roam_fils_params->rrk_length, roam_fils_params->realm_len);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
#ifndef ROAM_OFFLOAD_V1
|
||||||
static inline
|
static inline
|
||||||
void csr_update_fils_params_rso(struct mac_context *mac,
|
void csr_update_fils_params_rso(struct mac_context *mac,
|
||||||
struct csr_roam_session *session,
|
struct csr_roam_session *session,
|
||||||
struct roam_offload_scan_req *req_buffer)
|
struct roam_offload_scan_req *req_buffer)
|
||||||
{}
|
{}
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* csr_update_score_params() - API to update Score params in RSO
|
* csr_update_score_params() - API to update Score params in RSO
|
||||||
* @mac_ctx: Mac context
|
* @mac_ctx: Mac context
|
||||||
* @req_buffer: RSO request buffer
|
* @req_score_params: request score params
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
static void csr_update_score_params(struct mac_context *mac_ctx,
|
static void csr_update_score_params(struct mac_context *mac_ctx,
|
||||||
struct roam_offload_scan_req *req_buffer,
|
struct scoring_param *req_score_params,
|
||||||
tpCsrNeighborRoamControlInfo roam_info)
|
tpCsrNeighborRoamControlInfo roam_info)
|
||||||
{
|
{
|
||||||
struct scoring_param *req_score_params;
|
|
||||||
struct wlan_mlme_roam_scoring_cfg *roam_score_params;
|
struct wlan_mlme_roam_scoring_cfg *roam_score_params;
|
||||||
struct weight_cfg *weight_config;
|
struct weight_cfg *weight_config;
|
||||||
struct psoc_mlme_obj *mlme_psoc_obj;
|
struct psoc_mlme_obj *mlme_psoc_obj;
|
||||||
@@ -18323,7 +18342,6 @@ static void csr_update_score_params(struct mac_context *mac_ctx,
|
|||||||
if (!mlme_psoc_obj)
|
if (!mlme_psoc_obj)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
req_score_params = &req_buffer->score_params;
|
|
||||||
score_config = &mlme_psoc_obj->psoc_cfg.score_config;
|
score_config = &mlme_psoc_obj->psoc_cfg.score_config;
|
||||||
roam_score_params = &mac_ctx->mlme_cfg->roam_scoring;
|
roam_score_params = &mac_ctx->mlme_cfg->roam_scoring;
|
||||||
weight_config = &score_config->weight_config;
|
weight_config = &score_config->weight_config;
|
||||||
@@ -18910,19 +18928,6 @@ csr_post_roam_state_change(struct mac_context *mac, uint8_t vdev_id,
|
|||||||
{
|
{
|
||||||
return csr_handle_roam_state_change(mac, vdev_id, state, reason);
|
return csr_handle_roam_state_change(mac, vdev_id, state, reason);
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
QDF_STATUS
|
|
||||||
csr_post_roam_state_change(struct mac_context *mac, uint8_t vdev_id,
|
|
||||||
enum roam_offload_state state, uint8_t reason)
|
|
||||||
{
|
|
||||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
|
||||||
|
|
||||||
if (state == WLAN_ROAM_RSO_ENABLED)
|
|
||||||
status = wlan_cm_start_roaming(mac->pdev, vdev_id, reason);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* csr_roam_offload_scan() - populates roam offload scan request and sends to
|
* csr_roam_offload_scan() - populates roam offload scan request and sends to
|
||||||
@@ -19172,7 +19177,9 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
|
|||||||
session->pAddIEAssoc,
|
session->pAddIEAssoc,
|
||||||
session->nAddIEAssocLength);
|
session->nAddIEAssocLength);
|
||||||
csr_update_driver_assoc_ies(mac_ctx, session, req_buf);
|
csr_update_driver_assoc_ies(mac_ctx, session, req_buf);
|
||||||
csr_update_score_params(mac_ctx, req_buf, roam_info);
|
csr_update_score_params(mac_ctx,
|
||||||
|
&req_buf->score_params,
|
||||||
|
roam_info);
|
||||||
csr_update_fils_params_rso(mac_ctx, session, req_buf);
|
csr_update_fils_params_rso(mac_ctx, session, req_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19212,8 +19219,23 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ROAM_OFFLOAD_V1
|
#else
|
||||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
|
||||||
|
QDF_STATUS
|
||||||
|
csr_post_roam_state_change(struct mac_context *mac, uint8_t vdev_id,
|
||||||
|
enum roam_offload_state state, uint8_t reason)
|
||||||
|
{
|
||||||
|
return wlan_cm_roam_state_change(mac->pdev, vdev_id, state, reason);
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
|
||||||
|
uint8_t command, uint8_t reason)
|
||||||
|
{
|
||||||
|
return wlan_cm_roam_send_rso_cmd(mac_ctx->psoc, session_id, command,
|
||||||
|
reason);
|
||||||
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
|
wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
|
||||||
uint8_t vdev_id,
|
uint8_t vdev_id,
|
||||||
@@ -19462,7 +19484,7 @@ wlan_cm_roam_scan_offload_rssi_thresh(
|
|||||||
* wlan_cm_roam_scan_offload_scan_period() - set roam offload scan period
|
* wlan_cm_roam_scan_offload_scan_period() - set roam offload scan period
|
||||||
* parameters
|
* parameters
|
||||||
* @mac_ctx: global mac ctx
|
* @mac_ctx: global mac ctx
|
||||||
* @session: csr roam session
|
* @vdev_id: vdev id
|
||||||
* @params: roam offload scan period related parameters
|
* @params: roam offload scan period related parameters
|
||||||
*
|
*
|
||||||
* This function is used to set roam offload scan period related parameters
|
* This function is used to set roam offload scan period related parameters
|
||||||
@@ -19472,13 +19494,13 @@ wlan_cm_roam_scan_offload_rssi_thresh(
|
|||||||
static void
|
static void
|
||||||
wlan_cm_roam_scan_offload_scan_period(
|
wlan_cm_roam_scan_offload_scan_period(
|
||||||
struct mac_context *mac_ctx,
|
struct mac_context *mac_ctx,
|
||||||
struct csr_roam_session *session,
|
uint8_t vdev_id,
|
||||||
struct wlan_roam_scan_period_params *params)
|
struct wlan_roam_scan_period_params *params)
|
||||||
{
|
{
|
||||||
tpCsrNeighborRoamControlInfo roam_info =
|
tpCsrNeighborRoamControlInfo roam_info =
|
||||||
&mac_ctx->roam.neighborRoamInfo[session->vdev_id];
|
&mac_ctx->roam.neighborRoamInfo[vdev_id];
|
||||||
|
|
||||||
params->vdev_id = session->vdev_id;
|
params->vdev_id = vdev_id;
|
||||||
params->empty_scan_refresh_period =
|
params->empty_scan_refresh_period =
|
||||||
roam_info->cfgParams.emptyScanRefreshPeriod;
|
roam_info->cfgParams.emptyScanRefreshPeriod;
|
||||||
params->scan_period = params->empty_scan_refresh_period;
|
params->scan_period = params->empty_scan_refresh_period;
|
||||||
@@ -19493,6 +19515,195 @@ wlan_cm_roam_scan_offload_scan_period(
|
|||||||
roam_info->cfgParams.full_roam_scan_period;
|
roam_info->cfgParams.full_roam_scan_period;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_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
|
||||||
|
*
|
||||||
|
* This function is used to set roam ap profile related parameters
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
wlan_cm_roam_scan_offload_ap_profile(struct mac_context *mac_ctx,
|
||||||
|
struct csr_roam_session *session,
|
||||||
|
struct ap_profile_params *params)
|
||||||
|
{
|
||||||
|
struct ap_profile *profile = ¶ms->profile;
|
||||||
|
struct roam_ext_params *roam_params_src =
|
||||||
|
&mac_ctx->roam.configParam.roam_params;
|
||||||
|
tpCsrNeighborRoamControlInfo roam_info =
|
||||||
|
&mac_ctx->roam.neighborRoamInfo[session->vdev_id];
|
||||||
|
|
||||||
|
params->vdev_id = session->vdev_id;
|
||||||
|
profile->ssid.length = session->connectedProfile.SSID.length;
|
||||||
|
qdf_mem_copy(profile->ssid.ssid, session->connectedProfile.SSID.ssId,
|
||||||
|
profile->ssid.length);
|
||||||
|
profile->rsn_authmode =
|
||||||
|
e_csr_auth_type_to_rsn_authmode(
|
||||||
|
session->connectedProfile.AuthType,
|
||||||
|
session->connectedProfile.EncryptionType);
|
||||||
|
/* Pairwise cipher suite */
|
||||||
|
profile->rsn_ucastcipherset =
|
||||||
|
e_csr_encryption_type_to_rsn_cipherset(
|
||||||
|
session->connectedProfile.EncryptionType);
|
||||||
|
/* Group cipher suite */
|
||||||
|
profile->rsn_mcastcipherset =
|
||||||
|
e_csr_encryption_type_to_rsn_cipherset(
|
||||||
|
session->connectedProfile.mcEncryptionType);
|
||||||
|
/* Group management cipher suite */
|
||||||
|
|
||||||
|
profile->rssi_threshold = roam_info->cfgParams.roam_rssi_diff;
|
||||||
|
/*
|
||||||
|
* rssi_diff which is updated via framework is equivalent to the
|
||||||
|
* INI RoamRssiDiff parameter and hence should be updated.
|
||||||
|
*/
|
||||||
|
if (roam_params_src->rssi_diff)
|
||||||
|
profile->rssi_threshold = roam_params_src->rssi_diff;
|
||||||
|
|
||||||
|
profile->rssi_abs_thresh =
|
||||||
|
mac_ctx->mlme_cfg->lfr.roam_rssi_abs_threshold;
|
||||||
|
|
||||||
|
csr_update_score_params(mac_ctx, ¶ms->param, roam_info);
|
||||||
|
|
||||||
|
params->min_rssi_params[DEAUTH_MIN_RSSI] =
|
||||||
|
mac_ctx->mlme_cfg->trig_min_rssi[DEAUTH_MIN_RSSI];
|
||||||
|
params->min_rssi_params[BMISS_MIN_RSSI] =
|
||||||
|
mac_ctx->mlme_cfg->trig_min_rssi[BMISS_MIN_RSSI];
|
||||||
|
params->score_delta_param[IDLE_ROAM_TRIGGER] =
|
||||||
|
mac_ctx->mlme_cfg->trig_score_delta[IDLE_ROAM_TRIGGER];
|
||||||
|
params->score_delta_param[BTM_ROAM_TRIGGER] =
|
||||||
|
mac_ctx->mlme_cfg->trig_score_delta[BTM_ROAM_TRIGGER];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_cm_roam_scan_filter() - set roam scan filter parameters
|
||||||
|
* @mac_ctx: global mac ctx
|
||||||
|
* @vdev_id: vdev id
|
||||||
|
* @command: rso command
|
||||||
|
* @reason: reason to roam
|
||||||
|
* @scan_filter_params: roam scan filter related parameters
|
||||||
|
*
|
||||||
|
* There are filters such as whitelist, blacklist and preferred
|
||||||
|
* list that need to be applied to the scan results to form the
|
||||||
|
* probable candidates for roaming.
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
wlan_cm_roam_scan_filter(
|
||||||
|
struct mac_context *mac_ctx,
|
||||||
|
uint8_t vdev_id,
|
||||||
|
uint8_t command,
|
||||||
|
uint8_t reason,
|
||||||
|
struct wlan_roam_scan_filter_params *scan_filter_params)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
uint32_t num_bssid_black_list = 0, num_ssid_white_list = 0,
|
||||||
|
num_bssid_preferred_list = 0, num_rssi_rejection_ap = 0;
|
||||||
|
uint32_t op_bitmap = 0;
|
||||||
|
struct roam_ext_params *roam_params;
|
||||||
|
struct roam_scan_filter_params *params;
|
||||||
|
|
||||||
|
scan_filter_params->reason = reason;
|
||||||
|
params = &scan_filter_params->filter_params;
|
||||||
|
roam_params = &mac_ctx->roam.configParam.roam_params;
|
||||||
|
if (command != ROAM_SCAN_OFFLOAD_STOP) {
|
||||||
|
switch (reason) {
|
||||||
|
case REASON_ROAM_SET_BLACKLIST_BSSID:
|
||||||
|
op_bitmap |= 0x1;
|
||||||
|
num_bssid_black_list =
|
||||||
|
roam_params->num_bssid_avoid_list;
|
||||||
|
break;
|
||||||
|
case REASON_ROAM_SET_SSID_ALLOWED:
|
||||||
|
op_bitmap |= 0x2;
|
||||||
|
num_ssid_white_list =
|
||||||
|
roam_params->num_ssid_allowed_list;
|
||||||
|
break;
|
||||||
|
case REASON_ROAM_SET_FAVORED_BSSID:
|
||||||
|
op_bitmap |= 0x4;
|
||||||
|
num_bssid_preferred_list =
|
||||||
|
roam_params->num_bssid_favored;
|
||||||
|
break;
|
||||||
|
case REASON_CTX_INIT:
|
||||||
|
if (command == ROAM_SCAN_OFFLOAD_START) {
|
||||||
|
params->lca_disallow_config_present = true;
|
||||||
|
num_rssi_rejection_ap =
|
||||||
|
roam_params->num_rssi_rejection_ap;
|
||||||
|
} else {
|
||||||
|
sme_debug("Roam Filter need not be sent, no need to fill parameters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
sme_debug("Roam Filter need not be sent, no need to fill parameters");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
/* In case of STOP command, reset all the variables
|
||||||
|
* except for blacklist BSSID which should be retained
|
||||||
|
* across connections.
|
||||||
|
*/
|
||||||
|
op_bitmap = 0x2 | 0x4;
|
||||||
|
num_ssid_white_list = roam_params->num_ssid_allowed_list;
|
||||||
|
num_bssid_preferred_list = roam_params->num_bssid_favored;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fill in fixed values */
|
||||||
|
params->vdev_id = vdev_id;
|
||||||
|
params->op_bitmap = op_bitmap;
|
||||||
|
params->num_bssid_black_list = num_bssid_black_list;
|
||||||
|
params->num_ssid_white_list = num_ssid_white_list;
|
||||||
|
params->num_bssid_preferred_list = num_bssid_preferred_list;
|
||||||
|
params->num_rssi_rejection_ap = num_rssi_rejection_ap;
|
||||||
|
params->delta_rssi =
|
||||||
|
wlan_blm_get_rssi_blacklist_threshold(mac_ctx->pdev);
|
||||||
|
qdf_mem_copy(params->bssid_avoid_list, roam_params->bssid_avoid_list,
|
||||||
|
MAX_BSSID_AVOID_LIST * sizeof(struct qdf_mac_addr));
|
||||||
|
|
||||||
|
for (i = 0; i < num_ssid_white_list; i++) {
|
||||||
|
qdf_mem_copy(params->ssid_allowed_list[i].ssid,
|
||||||
|
roam_params->ssid_allowed_list[i].ssId,
|
||||||
|
roam_params->ssid_allowed_list[i].length);
|
||||||
|
params->ssid_allowed_list[i].length =
|
||||||
|
roam_params->ssid_allowed_list[i].length;
|
||||||
|
sme_debug("SSID %d: %.*s", i,
|
||||||
|
params->ssid_allowed_list[i].length,
|
||||||
|
params->ssid_allowed_list[i].ssid);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < params->num_bssid_black_list; i++)
|
||||||
|
sme_debug("Blacklist bssid[%d]:" QDF_MAC_ADDR_STR, i,
|
||||||
|
QDF_MAC_ADDR_ARRAY(params->bssid_avoid_list[i].bytes));
|
||||||
|
qdf_mem_copy(params->bssid_favored, roam_params->bssid_favored,
|
||||||
|
MAX_BSSID_FAVORED * sizeof(struct qdf_mac_addr));
|
||||||
|
qdf_mem_copy(params->bssid_favored_factor,
|
||||||
|
roam_params->bssid_favored_factor, MAX_BSSID_FAVORED);
|
||||||
|
qdf_mem_copy(params->rssi_rejection_ap,
|
||||||
|
roam_params->rssi_reject_bssid_list,
|
||||||
|
MAX_RSSI_AVOID_BSSID_LIST *
|
||||||
|
sizeof(struct reject_ap_config_params));
|
||||||
|
|
||||||
|
for (i = 0; i < params->num_bssid_preferred_list; i++)
|
||||||
|
sme_debug("Preferred Bssid[%d]:"QDF_MAC_ADDR_STR" score: %d", i,
|
||||||
|
QDF_MAC_ADDR_ARRAY(params->bssid_favored[i].bytes),
|
||||||
|
params->bssid_favored_factor[i]);
|
||||||
|
|
||||||
|
if (params->lca_disallow_config_present) {
|
||||||
|
params->disallow_duration
|
||||||
|
= mac_ctx->mlme_cfg->lfr.lfr3_disallow_duration;
|
||||||
|
params->rssi_channel_penalization
|
||||||
|
= mac_ctx->mlme_cfg->lfr.lfr3_rssi_channel_penalization;
|
||||||
|
params->num_disallowed_aps
|
||||||
|
= mac_ctx->mlme_cfg->lfr.lfr3_num_disallowed_aps;
|
||||||
|
sme_debug("disallow_dur %d rssi_chan_pen %d num_disallowed_aps %d",
|
||||||
|
params->disallow_duration,
|
||||||
|
params->rssi_channel_penalization,
|
||||||
|
params->num_disallowed_aps);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
|
wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
|
||||||
uint8_t vdev_id,
|
uint8_t vdev_id,
|
||||||
@@ -19516,20 +19727,23 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
wlan_cm_roam_scan_offload_rssi_thresh(mac_ctx,
|
wlan_cm_roam_scan_offload_rssi_thresh(mac_ctx, session,
|
||||||
session,
|
|
||||||
&req->rssi_params);
|
&req->rssi_params);
|
||||||
|
|
||||||
wlan_cm_roam_scan_offload_scan_period(mac_ctx,
|
wlan_cm_roam_scan_offload_scan_period(mac_ctx, session->vdev_id,
|
||||||
session,
|
|
||||||
&req->scan_period_params);
|
&req->scan_period_params);
|
||||||
|
|
||||||
|
wlan_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,
|
||||||
|
reason, &req->scan_filter_params);
|
||||||
|
|
||||||
/* fill other struct similar to wlan_roam_offload_scan_rssi_params */
|
/* fill other struct similar to wlan_roam_offload_scan_rssi_params */
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
QDF_STATUS
|
QDF_STATUS
|
||||||
csr_roam_offload_scan_rsp_hdlr(struct mac_context *mac,
|
csr_roam_offload_scan_rsp_hdlr(struct mac_context *mac,
|
||||||
|
Reference in New Issue
Block a user