qcacld-3.0: Move rso related process to connection manager [PART 2]
Add new code to implement below functions for connection manager roam part: WLAN_ROAMING_IN_PROG/WLAN_ROAM_SYNCH_IN_PROG related handler. Filling below WMI cmd parameters related process: WMI_VDEV_PARAM_BMISS_FIRST_BCNT WMI_VDEV_PARAM_BMISS_FINAL_BCNT WMI_VDEV_PARAM_ENABLE_DISABLE_ROAM_REASON_VSIE WMI_ROAM_ENABLE_DISABLE_TRIGGER_REASON_CMDID WMI_ROAM_SCAN_PERIOD Change-Id: I28439393a57c72012f9de51f24050f95366294bc CRs-Fixed: 2738353
This commit is contained in:
@@ -2653,4 +2653,26 @@ QDF_STATUS mlme_get_fw_scan_channels(struct wlan_objmgr_psoc *psoc,
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_roam_scan_offload_enabled(struct wlan_objmgr_psoc *psoc,
|
||||
bool *val);
|
||||
|
||||
/**
|
||||
* wlan_mlme_get_roam_bmiss_final_bcnt() - Get roam bmiss final count
|
||||
* @psoc: pointer to psoc object
|
||||
* @val: Pointer to the value which will be filled for the caller
|
||||
*
|
||||
* Return: QDF Status
|
||||
*/
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_roam_bmiss_final_bcnt(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *val);
|
||||
|
||||
/**
|
||||
* wlan_mlme_get_roam_bmiss_first_bcnt() - Get roam bmiss first count
|
||||
* @psoc: pointer to psoc object
|
||||
* @val: Pointer to the value which will be filled for the caller
|
||||
*
|
||||
* Return: QDF Status
|
||||
*/
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_roam_bmiss_first_bcnt(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *val);
|
||||
#endif /* _WLAN_MLME_API_H_ */
|
||||
|
@@ -4047,3 +4047,37 @@ wlan_mlme_get_roam_scan_offload_enabled(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_roam_bmiss_final_bcnt(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *val)
|
||||
{
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
*val = cfg_default(CFG_LFR_ROAM_BMISS_FINAL_BCNT);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
*val = mlme_obj->cfg.lfr.roam_bmiss_final_bcnt;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_mlme_get_roam_bmiss_first_bcnt(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *val)
|
||||
{
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
*val = cfg_default(CFG_LFR_ROAM_BMISS_FIRST_BCNT);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
*val = mlme_obj->cfg.lfr.roam_bmiss_first_bcnt;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@@ -984,34 +984,14 @@ QDF_STATUS
|
||||
ucfg_mlme_get_roam_bmiss_final_bcnt(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *val)
|
||||
{
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
*val = cfg_default(CFG_LFR_ROAM_BMISS_FINAL_BCNT);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
*val = mlme_obj->cfg.lfr.roam_bmiss_final_bcnt;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
return wlan_mlme_get_roam_bmiss_final_bcnt(psoc, val);
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
ucfg_mlme_get_roam_bmiss_first_bcnt(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t *val)
|
||||
{
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj) {
|
||||
*val = cfg_default(CFG_LFR_ROAM_BMISS_FIRST_BCNT);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
*val = mlme_obj->cfg.lfr.roam_bmiss_first_bcnt;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
return wlan_mlme_get_roam_bmiss_first_bcnt(psoc, val);
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
|
@@ -85,6 +85,146 @@ target_if_cm_roam_register_lfr3_ops(struct wlan_cm_roam_tx_ops *tx_ops)
|
||||
#endif
|
||||
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
/**
|
||||
* target_if_is_vdev_valid - vdev id is valid or not
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
* Return: true or false
|
||||
*/
|
||||
static bool target_if_is_vdev_valid(uint8_t vdev_id)
|
||||
{
|
||||
return (vdev_id < WLAN_MAX_VDEVS ? true : false);
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_vdev_set_param() - set per vdev params in fw
|
||||
* @wmi_handle: wmi handle
|
||||
* @vdev_id: vdev id
|
||||
* @param_id: parameter id
|
||||
* @param_value: parameter value
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS for success or error code
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_vdev_set_param(wmi_unified_t wmi_handle, uint32_t vdev_id,
|
||||
uint32_t param_id, uint32_t param_value)
|
||||
{
|
||||
struct vdev_set_params param = {0};
|
||||
|
||||
if (!target_if_is_vdev_valid(vdev_id)) {
|
||||
target_if_err("vdev_id: %d is invalid, reject the req: param id %d val %d",
|
||||
vdev_id, param_id, param_value);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
param.vdev_id = vdev_id;
|
||||
param.param_id = param_id;
|
||||
param.param_value = param_value;
|
||||
|
||||
return wmi_unified_vdev_set_param_send(wmi_handle, ¶m);
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_scan_bmiss_cnt() - set bmiss count to fw
|
||||
* @wmi_handle: wmi handle
|
||||
* @req: bmiss count parameters
|
||||
*
|
||||
* Set first & final bmiss count to fw.
|
||||
*
|
||||
* Return: QDF status
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_scan_bmiss_cnt(wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_beacon_miss_cnt *req)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
uint32_t vdev_id;
|
||||
uint8_t first_bcnt;
|
||||
uint8_t final_bcnt;
|
||||
|
||||
vdev_id = req->vdev_id;
|
||||
first_bcnt = req->roam_bmiss_first_bcnt;
|
||||
final_bcnt = req->roam_bmiss_final_bcnt;
|
||||
|
||||
target_if_debug("first_bcnt: %d, final_bcnt: %d",
|
||||
first_bcnt, final_bcnt);
|
||||
|
||||
status = target_if_vdev_set_param(wmi_handle, vdev_id,
|
||||
WMI_VDEV_PARAM_BMISS_FIRST_BCNT,
|
||||
first_bcnt);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
target_if_err("vdev set WMI_VDEV_PARAM_BMISS_FIRST_BCNT params returned error %d",
|
||||
status);
|
||||
return status;
|
||||
}
|
||||
|
||||
status = target_if_vdev_set_param(wmi_handle, vdev_id,
|
||||
WMI_VDEV_PARAM_BMISS_FINAL_BCNT,
|
||||
final_bcnt);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
target_if_err("vdev set WMI_VDEV_PARAM_BMISS_FINAL_BCNT params returned error %d",
|
||||
status);
|
||||
return status;
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
/* target_if_cm_roam_reason_vsie(): set vdev param
|
||||
* WMI_VDEV_PARAM_ENABLE_DISABLE_ROAM_REASON_VSIE
|
||||
* @wmi_handle: handle to WMI
|
||||
* @req: roam reason vsie enable parameters
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
static void
|
||||
target_if_cm_roam_reason_vsie(wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_reason_vsie_enable *req)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
|
||||
status = target_if_vdev_set_param(
|
||||
wmi_handle,
|
||||
req->vdev_id,
|
||||
WMI_VDEV_PARAM_ENABLE_DISABLE_ROAM_REASON_VSIE,
|
||||
req->enable_roam_reason_vsie);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
target_if_err("Failed to set vdev param %d",
|
||||
WMI_VDEV_PARAM_ENABLE_DISABLE_ROAM_REASON_VSIE);
|
||||
}
|
||||
|
||||
/* target_if_cm_roam_triggers(): send roam triggers to WMI
|
||||
* @wmi_handle: handle to WMI
|
||||
* @req: roam triggers parameters
|
||||
*
|
||||
* Return: QDF status
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_triggers(wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_triggers *req)
|
||||
{
|
||||
if (!target_if_is_vdev_valid(req->vdev_id))
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
return wmi_unified_set_roam_triggers(wmi_handle, req);
|
||||
}
|
||||
#else
|
||||
static void
|
||||
target_if_cm_roam_reason_vsie(wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_reason_vsie_enable *req)
|
||||
{
|
||||
}
|
||||
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_triggers(wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_triggers *req)
|
||||
{
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_scan_offload_rssi_thresh() - Send roam scan rssi threshold
|
||||
* commands to wmi
|
||||
@@ -200,6 +340,28 @@ target_if_cm_roam_scan_offload_rssi_thresh(
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_roam_scan_offload_scan_period() - set roam offload scan period
|
||||
* @wmi_handle: wmi handle
|
||||
* @req: roam scan period parameters
|
||||
*
|
||||
* Send WMI_ROAM_SCAN_PERIOD parameters to fw.
|
||||
*
|
||||
* Return: QDF status
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_scan_offload_scan_period(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_scan_period_params *req)
|
||||
{
|
||||
if (!target_if_is_vdev_valid(req->vdev_id)) {
|
||||
target_if_err("Invalid vdev id:%d", req->vdev_id);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return wmi_unified_roam_scan_offload_scan_period(wmi_handle, req);
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_send_roam_start() - Send roam start related commands
|
||||
* to wmi
|
||||
@@ -214,17 +376,47 @@ static QDF_STATUS
|
||||
target_if_cm_roam_send_roam_start(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_start_config *req)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
wmi_unified_t wmi_handle;
|
||||
|
||||
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
|
||||
if (!wmi_handle)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
target_if_cm_roam_scan_offload_rssi_thresh(wmi_handle,
|
||||
status = target_if_cm_roam_scan_offload_rssi_thresh(
|
||||
wmi_handle,
|
||||
&req->rssi_params);
|
||||
/* add other wmi commands */
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
target_if_err("Sending roam scan offload rssi thresh failed");
|
||||
goto end;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
status = target_if_cm_roam_scan_bmiss_cnt(wmi_handle,
|
||||
&req->beacon_miss_cnt);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
target_if_err("vdev set bmiss bcnt param failed");
|
||||
goto end;
|
||||
}
|
||||
|
||||
target_if_cm_roam_reason_vsie(wmi_handle, &req->reason_vsie_enable);
|
||||
|
||||
target_if_cm_roam_triggers(wmi_handle, &req->roam_triggers);
|
||||
|
||||
/* Opportunistic scan runs on a timer, value set by
|
||||
* empty_scan_refresh_period. Age out the entries after 3 such
|
||||
* cycles.
|
||||
*/
|
||||
if (req->scan_period_params.empty_scan_refresh_period > 0) {
|
||||
status = target_if_cm_roam_scan_offload_scan_period(
|
||||
wmi_handle,
|
||||
&req->scan_period_params);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
goto end;
|
||||
}
|
||||
|
||||
/* add other wmi commands */
|
||||
end:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -26,6 +26,93 @@
|
||||
#include "wlan_cm_tgt_if_tx_api.h"
|
||||
#include "wlan_cm_roam_api.h"
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_scan_bmiss_cnt() - set roam beacon miss count
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @params: roam beacon miss count parameters
|
||||
*
|
||||
* This function is used to set roam beacon miss count parameters
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_scan_bmiss_cnt(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_beacon_miss_cnt *params)
|
||||
{
|
||||
uint8_t beacon_miss_count;
|
||||
|
||||
params->vdev_id = vdev_id;
|
||||
|
||||
wlan_mlme_get_roam_bmiss_first_bcnt(psoc, &beacon_miss_count);
|
||||
params->roam_bmiss_first_bcnt = beacon_miss_count;
|
||||
|
||||
wlan_mlme_get_roam_bmiss_final_bcnt(psoc, &beacon_miss_count);
|
||||
params->roam_bmiss_final_bcnt = beacon_miss_count;
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
/**
|
||||
* wlan_cm_roam_reason_vsie() - set roam reason vsie
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @params: roam reason vsie parameters
|
||||
*
|
||||
* This function is used to set roam reason vsie parameters
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_reason_vsie_enable *params)
|
||||
{
|
||||
uint8_t enable_roam_reason_vsie;
|
||||
|
||||
params->vdev_id = vdev_id;
|
||||
|
||||
wlan_mlme_get_roam_reason_vsie_status(psoc, &enable_roam_reason_vsie);
|
||||
params->enable_roam_reason_vsie = enable_roam_reason_vsie;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_triggers() - set roam triggers
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @params: roam triggers parameters
|
||||
*
|
||||
* This function is used to set roam triggers parameters
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_triggers *params)
|
||||
{
|
||||
params->vdev_id = vdev_id;
|
||||
params->trigger_bitmap =
|
||||
mlme_get_roam_trigger_bitmap(psoc, vdev_id);
|
||||
wlan_cm_roam_get_vendor_btm_params(psoc, vdev_id,
|
||||
¶ms->vendor_btm_param);
|
||||
}
|
||||
#else
|
||||
static void
|
||||
wlan_cm_roam_reason_vsie(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_reason_vsie_enable *params)
|
||||
{
|
||||
}
|
||||
|
||||
static void
|
||||
wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_triggers *params)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* cm_roam_init_req() - roam init request handling
|
||||
* @psoc: psoc pointer
|
||||
@@ -34,7 +121,8 @@
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS cm_roam_init_req(struct wlan_objmgr_psoc *psoc,
|
||||
static QDF_STATUS
|
||||
cm_roam_init_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
bool enable)
|
||||
{
|
||||
@@ -49,7 +137,8 @@ static QDF_STATUS cm_roam_init_req(struct wlan_objmgr_psoc *psoc,
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
static QDF_STATUS
|
||||
cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
@@ -60,6 +149,12 @@ static QDF_STATUS cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
if (!start_req)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
/* fill from mlme directly */
|
||||
wlan_cm_roam_scan_bmiss_cnt(psoc, vdev_id,
|
||||
&start_req->beacon_miss_cnt);
|
||||
wlan_cm_roam_reason_vsie(psoc, vdev_id, &start_req->reason_vsie_enable);
|
||||
wlan_cm_roam_triggers(psoc, vdev_id, &start_req->roam_triggers);
|
||||
|
||||
/* fill from legacy through this API */
|
||||
wlan_cm_roam_fill_start_req(psoc, vdev_id, start_req, reason);
|
||||
|
||||
@@ -80,7 +175,8 @@ static QDF_STATUS cm_roam_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc,
|
||||
static QDF_STATUS
|
||||
cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
@@ -92,7 +188,8 @@ static QDF_STATUS cm_roam_update_config_req(struct wlan_objmgr_psoc *psoc,
|
||||
* process directly, generate a new function wlan_cm_roam_send_rso_cmd
|
||||
* for external usage.
|
||||
*/
|
||||
QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||
QDF_STATUS
|
||||
cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t rso_command,
|
||||
uint8_t reason)
|
||||
@@ -127,7 +224,8 @@ QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS cm_roam_stop_req(struct wlan_objmgr_psoc *psoc,
|
||||
static QDF_STATUS
|
||||
cm_roam_stop_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
@@ -145,7 +243,8 @@ static QDF_STATUS cm_roam_stop_req(struct wlan_objmgr_psoc *psoc,
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS cm_roam_switch_to_rso_stop(struct wlan_objmgr_pdev *pdev,
|
||||
static QDF_STATUS
|
||||
cm_roam_switch_to_rso_stop(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
@@ -156,6 +255,8 @@ static QDF_STATUS cm_roam_switch_to_rso_stop(struct wlan_objmgr_pdev *pdev,
|
||||
cur_state = mlme_get_roam_state(psoc, vdev_id);
|
||||
switch (cur_state) {
|
||||
case WLAN_ROAM_RSO_ENABLED:
|
||||
case WLAN_ROAMING_IN_PROG:
|
||||
case WLAN_ROAM_SYNCH_IN_PROG:
|
||||
status = cm_roam_stop_req(psoc, vdev_id, reason);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mlme_err("ROAM: Unable to switch to RSO STOP State");
|
||||
@@ -188,7 +289,8 @@ static QDF_STATUS cm_roam_switch_to_rso_stop(struct wlan_objmgr_pdev *pdev,
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS cm_roam_switch_to_deinit(struct wlan_objmgr_pdev *pdev,
|
||||
static QDF_STATUS
|
||||
cm_roam_switch_to_deinit(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
@@ -197,7 +299,13 @@ static QDF_STATUS cm_roam_switch_to_deinit(struct wlan_objmgr_pdev *pdev,
|
||||
enum roam_offload_state cur_state = mlme_get_roam_state(psoc, vdev_id);
|
||||
|
||||
switch (cur_state) {
|
||||
/*
|
||||
* If RSO stop is not done already, send RSO stop first and
|
||||
* then post deinit.
|
||||
*/
|
||||
case WLAN_ROAM_RSO_ENABLED:
|
||||
case WLAN_ROAMING_IN_PROG:
|
||||
case WLAN_ROAM_SYNCH_IN_PROG:
|
||||
cm_roam_switch_to_rso_stop(pdev, vdev_id, reason);
|
||||
break;
|
||||
case WLAN_ROAM_RSO_STOPPED:
|
||||
@@ -236,7 +344,8 @@ static QDF_STATUS cm_roam_switch_to_deinit(struct wlan_objmgr_pdev *pdev,
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
||||
static QDF_STATUS
|
||||
cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
@@ -287,9 +396,14 @@ static QDF_STATUS cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
||||
}
|
||||
break;
|
||||
|
||||
case WLAN_ROAM_SYNCH_IN_PROG:
|
||||
mlme_set_roam_state(psoc, vdev_id, WLAN_ROAM_INIT);
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
case WLAN_ROAM_INIT:
|
||||
case WLAN_ROAM_RSO_STOPPED:
|
||||
case WLAN_ROAM_RSO_ENABLED:
|
||||
case WLAN_ROAMING_IN_PROG:
|
||||
/*
|
||||
* Already the roaming module is initialized at fw,
|
||||
* just return from here
|
||||
@@ -323,7 +437,7 @@ static QDF_STATUS cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_switch_to_rso_start() - roam state handling for rso started
|
||||
* cm_roam_switch_to_rso_enable() - roam state handling for rso started
|
||||
* @pdev: pdev pointer
|
||||
* @vdev_id: vdev id
|
||||
* @reason: reason for changing roam state for the requested vdev id
|
||||
@@ -332,11 +446,12 @@ static QDF_STATUS cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS cm_roam_switch_to_rso_start(struct wlan_objmgr_pdev *pdev,
|
||||
static QDF_STATUS
|
||||
cm_roam_switch_to_rso_enable(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
enum roam_offload_state cur_state;
|
||||
enum roam_offload_state cur_state, new_roam_state;
|
||||
QDF_STATUS status;
|
||||
uint8_t control_bitmap;
|
||||
bool sup_disabled_roaming;
|
||||
@@ -345,6 +460,9 @@ static QDF_STATUS cm_roam_switch_to_rso_start(struct wlan_objmgr_pdev *pdev,
|
||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||
|
||||
wlan_mlme_get_roam_scan_offload_enabled(psoc, &rso_allowed);
|
||||
sup_disabled_roaming = mlme_get_supplicant_disabled_roaming(psoc,
|
||||
vdev_id);
|
||||
control_bitmap = mlme_get_operations_bitmap(psoc, vdev_id);
|
||||
|
||||
cur_state = mlme_get_roam_state(psoc, vdev_id);
|
||||
switch (cur_state) {
|
||||
@@ -363,6 +481,40 @@ static QDF_STATUS cm_roam_switch_to_rso_start(struct wlan_objmgr_pdev *pdev,
|
||||
* Send RSO update config if roaming already enabled
|
||||
*/
|
||||
rso_command = ROAM_SCAN_OFFLOAD_UPDATE_CFG;
|
||||
break;
|
||||
case WLAN_ROAMING_IN_PROG:
|
||||
/*
|
||||
* When roam abort happens, the roam offload
|
||||
* state machine moves to RSO_ENABLED state.
|
||||
* But if Supplicant disabled roaming is set in case
|
||||
* of roam invoke or if roaming was disabled due to
|
||||
* other reasons like SAP start/connect on other vdev,
|
||||
* the state should be transitioned to RSO STOPPED.
|
||||
*/
|
||||
if (sup_disabled_roaming || control_bitmap)
|
||||
new_roam_state = WLAN_ROAM_RSO_STOPPED;
|
||||
else
|
||||
new_roam_state = WLAN_ROAM_RSO_ENABLED;
|
||||
|
||||
mlme_set_roam_state(psoc, vdev_id, new_roam_state);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
case WLAN_ROAM_SYNCH_IN_PROG:
|
||||
/*
|
||||
* After roam sych propagation is complete, send
|
||||
* RSO start command to firmware to update AP profile,
|
||||
* new PCL.
|
||||
* If this is roam invoke case and supplicant has already
|
||||
* disabled firmware roaming, then move to RSO stopped state
|
||||
* instead of RSO enabled.
|
||||
*/
|
||||
if (sup_disabled_roaming || control_bitmap) {
|
||||
new_roam_state = WLAN_ROAM_RSO_STOPPED;
|
||||
mlme_set_roam_state(psoc, vdev_id, new_roam_state);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@@ -373,7 +525,6 @@ static QDF_STATUS cm_roam_switch_to_rso_start(struct wlan_objmgr_pdev *pdev,
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
control_bitmap = mlme_get_operations_bitmap(psoc, vdev_id);
|
||||
if (control_bitmap) {
|
||||
mlme_debug("ROAM: RSO Disabled internaly: vdev[%d] bitmap[0x%x]",
|
||||
vdev_id, control_bitmap);
|
||||
@@ -391,10 +542,9 @@ static QDF_STATUS cm_roam_switch_to_rso_start(struct wlan_objmgr_pdev *pdev,
|
||||
* If supplicant disabled roaming, driver does not send
|
||||
* RSO cmd to fw. This causes roam invoke to fail in FW
|
||||
* since RSO start never happened at least once to
|
||||
* configure roaming engine in FW.
|
||||
* configure roaming engine in FW. So send RSO start followed
|
||||
* by RSO stop if supplicant disabled roaming is true.
|
||||
*/
|
||||
sup_disabled_roaming = mlme_get_supplicant_disabled_roaming(psoc,
|
||||
vdev_id);
|
||||
if (!sup_disabled_roaming)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
@@ -403,7 +553,115 @@ static QDF_STATUS cm_roam_switch_to_rso_start(struct wlan_objmgr_pdev *pdev,
|
||||
REASON_SUPPLICANT_DISABLED_ROAMING);
|
||||
}
|
||||
|
||||
QDF_STATUS cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
|
||||
/**
|
||||
* cm_roam_switch_to_roam_start() - roam state handling for ROAMING_IN_PROG
|
||||
* @pdev: pdev pointer
|
||||
* @vdev_id: vdev id
|
||||
* @reason: reason for changing roam state for the requested vdev id
|
||||
*
|
||||
* This function is used for WLAN_ROAMING_IN_PROG roam state handling
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_switch_to_roam_start(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||
enum roam_offload_state cur_state =
|
||||
mlme_get_roam_state(psoc, vdev_id);
|
||||
switch (cur_state) {
|
||||
case WLAN_ROAM_RSO_ENABLED:
|
||||
mlme_set_roam_state(psoc, vdev_id, WLAN_ROAMING_IN_PROG);
|
||||
break;
|
||||
|
||||
case WLAN_ROAM_RSO_STOPPED:
|
||||
/*
|
||||
* When supplicant has disabled roaming, roam invoke triggered
|
||||
* from supplicant can cause firmware to send roam start
|
||||
* notification. Allow roam start in this condition.
|
||||
*/
|
||||
if (mlme_get_supplicant_disabled_roaming(psoc, vdev_id) &&
|
||||
mlme_is_roam_invoke_in_progress(psoc, vdev_id)) {
|
||||
mlme_set_roam_state(psoc, vdev_id,
|
||||
WLAN_ROAMING_IN_PROG);
|
||||
break;
|
||||
}
|
||||
case WLAN_ROAM_INIT:
|
||||
case WLAN_ROAM_DEINIT:
|
||||
case WLAN_ROAM_SYNCH_IN_PROG:
|
||||
default:
|
||||
mlme_err("ROAM: Roaming start received in invalid state: %d",
|
||||
cur_state);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_switch_to_roam_sync() - roam state handling for roam sync
|
||||
* @pdev: pdev pointer
|
||||
* @vdev_id: vdev id
|
||||
* @reason: reason for changing roam state for the requested vdev id
|
||||
*
|
||||
* This function is used for WLAN_ROAM_SYNCH_IN_PROG roam state handling
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
cm_roam_switch_to_roam_sync(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
uint8_t reason)
|
||||
{
|
||||
struct wlan_objmgr_psoc *psoc = wlan_pdev_get_psoc(pdev);
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
enum roam_offload_state cur_state = mlme_get_roam_state(psoc, vdev_id);
|
||||
|
||||
switch (cur_state) {
|
||||
case WLAN_ROAM_RSO_ENABLED:
|
||||
/*
|
||||
* Roam synch can come directly without roam start
|
||||
* after waking up from power save mode or in case of
|
||||
* deauth roam trigger to stop data path queues
|
||||
*/
|
||||
case WLAN_ROAMING_IN_PROG:
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
|
||||
WLAN_MLME_NB_ID);
|
||||
if (!wlan_vdev_is_up(vdev)) {
|
||||
mlme_err("ROAM: STA not in connected state");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
mlme_set_roam_state(psoc, vdev_id, WLAN_ROAM_SYNCH_IN_PROG);
|
||||
break;
|
||||
case WLAN_ROAM_RSO_STOPPED:
|
||||
/*
|
||||
* If roaming is disabled by Supplicant and if this transition
|
||||
* is due to roaming invoked by the supplicant, then allow
|
||||
* this state transition
|
||||
*/
|
||||
if (mlme_get_supplicant_disabled_roaming(psoc, vdev_id) &&
|
||||
mlme_is_roam_invoke_in_progress(psoc, vdev_id)) {
|
||||
mlme_set_roam_state(psoc, vdev_id,
|
||||
WLAN_ROAM_SYNCH_IN_PROG);
|
||||
break;
|
||||
}
|
||||
case WLAN_ROAM_INIT:
|
||||
case WLAN_ROAM_DEINIT:
|
||||
case WLAN_ROAM_SYNCH_IN_PROG:
|
||||
default:
|
||||
mlme_err("ROAM: Roam synch not allowed in [%d] state",
|
||||
cur_state);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
enum roam_offload_state requested_state,
|
||||
uint8_t reason)
|
||||
@@ -433,11 +691,17 @@ QDF_STATUS cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
|
||||
status = cm_roam_switch_to_init(pdev, vdev_id, reason);
|
||||
break;
|
||||
case WLAN_ROAM_RSO_ENABLED:
|
||||
status = cm_roam_switch_to_rso_start(pdev, vdev_id, reason);
|
||||
status = cm_roam_switch_to_rso_enable(pdev, vdev_id, reason);
|
||||
break;
|
||||
case WLAN_ROAM_RSO_STOPPED:
|
||||
status = cm_roam_switch_to_rso_stop(pdev, vdev_id, reason);
|
||||
break;
|
||||
case WLAN_ROAMING_IN_PROG:
|
||||
status = cm_roam_switch_to_roam_start(pdev, vdev_id, reason);
|
||||
break;
|
||||
case WLAN_ROAM_SYNCH_IN_PROG:
|
||||
status = cm_roam_switch_to_roam_sync(pdev, vdev_id, reason);
|
||||
break;
|
||||
default:
|
||||
mlme_debug("ROAM: Invalid roam state %d", requested_state);
|
||||
break;
|
||||
|
@@ -39,7 +39,8 @@
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||
QDF_STATUS
|
||||
cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t rso_command,
|
||||
uint8_t reason);
|
||||
@@ -55,7 +56,8 @@ QDF_STATUS cm_roam_send_rso_cmd(struct wlan_objmgr_psoc *psoc,
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
|
||||
QDF_STATUS
|
||||
cm_roam_state_change(struct wlan_objmgr_pdev *pdev,
|
||||
uint8_t vdev_id,
|
||||
enum roam_offload_state requested_state,
|
||||
uint8_t reason);
|
||||
|
@@ -86,6 +86,37 @@
|
||||
#define REASON_ROAM_HANDOFF_DONE 52
|
||||
#define REASON_ROAM_ABORT 53
|
||||
|
||||
/**
|
||||
* struct wlan_cm_roam_vendor_btm_params - vendor config roam control param
|
||||
* @scan_freq_scheme: scan frequency scheme from enum
|
||||
* qca_roam_scan_freq_scheme
|
||||
* @connected_rssi_threshold: RSSI threshold of the current
|
||||
* connected AP
|
||||
* @candidate_rssi_threshold: RSSI threshold of the
|
||||
* candidate AP
|
||||
* @user_roam_reason: Roam triggered reason code, value zero is for enable
|
||||
* and non zero value is disable
|
||||
*/
|
||||
struct wlan_cm_roam_vendor_btm_params {
|
||||
uint32_t scan_freq_scheme;
|
||||
uint32_t connected_rssi_threshold;
|
||||
uint32_t candidate_rssi_threshold;
|
||||
uint32_t user_roam_reason;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_triggers - vendor configured roam triggers
|
||||
* @vdev_id: vdev id
|
||||
* @trigger_bitmap: vendor configured roam trigger bitmap as
|
||||
* defined @enum roam_control_trigger_reason
|
||||
* @control_param: roam trigger param
|
||||
*/
|
||||
struct wlan_roam_triggers {
|
||||
uint32_t vdev_id;
|
||||
uint32_t trigger_bitmap;
|
||||
struct wlan_cm_roam_vendor_btm_params vendor_btm_param;
|
||||
};
|
||||
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
#define NOISE_FLOOR_DBM_DEFAULT (-96)
|
||||
#define RSSI_MIN_VALUE (-128)
|
||||
@@ -152,13 +183,70 @@ struct wlan_roam_offload_scan_rssi_params {
|
||||
uint32_t bg_scan_client_bitmap;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_beacon_miss_cnt - roam beacon miss count
|
||||
* @vdev_id: vdev id
|
||||
* @roam_bmiss_first_bcnt: First beacon miss count
|
||||
* @roam_bmiss_final_bcnt: Final beacon miss count
|
||||
*/
|
||||
struct wlan_roam_beacon_miss_cnt {
|
||||
uint32_t vdev_id;
|
||||
uint8_t roam_bmiss_first_bcnt;
|
||||
uint8_t roam_bmiss_final_bcnt;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_reason_vsie_enable - roam reason vsie enable parameters
|
||||
* @vdev_id: vdev id
|
||||
* @enable_roam_reason_vsie: enable/disable inclusion of roam Reason
|
||||
* in Re(association) frame
|
||||
*/
|
||||
struct wlan_roam_reason_vsie_enable {
|
||||
uint32_t vdev_id;
|
||||
uint8_t enable_roam_reason_vsie;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_scan_period_params - Roam scan period parameters
|
||||
* @vdev_id: Vdev for which the scan period parameters are sent
|
||||
* @empty_scan_refresh_period: empty scan refresh period
|
||||
* @scan_period: Opportunistic scan runs on a timer for scan_period
|
||||
* @scan_age: Duration after which the scan entries are to be aged out
|
||||
* @roam_scan_inactivity_time: inactivity monitoring time in ms for which the
|
||||
* device is considered to be inactive
|
||||
* @roam_inactive_data_packet_count: Maximum allowed data packets count during
|
||||
* roam_scan_inactivity_time.
|
||||
* @roam_scan_period_after_inactivity: Roam scan period in ms after device is
|
||||
* in inactive state.
|
||||
* @full_scan_period: Full scan period is the idle period in seconds
|
||||
* between two successive full channel roam scans.
|
||||
*/
|
||||
struct wlan_roam_scan_period_params {
|
||||
uint32_t vdev_id;
|
||||
uint32_t empty_scan_refresh_period;
|
||||
uint32_t scan_period;
|
||||
uint32_t scan_age;
|
||||
uint32_t roam_scan_inactivity_time;
|
||||
uint32_t roam_inactive_data_packet_count;
|
||||
uint32_t roam_scan_period_after_inactivity;
|
||||
uint32_t full_scan_period;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_start_config - structure containing parameters for
|
||||
* roam start config
|
||||
* @rssi_params: roam scan rssi threshold parameters
|
||||
* @beacon_miss_cnt: roam beacon miss count parameters
|
||||
* @reason_vsie_enable: roam reason vsie enable parameters
|
||||
* @roam_triggers: roam triggers parameters
|
||||
* @scan_period_params: roam scan period parameters
|
||||
*/
|
||||
struct wlan_roam_start_config {
|
||||
struct wlan_roam_offload_scan_rssi_params rssi_params;
|
||||
struct wlan_roam_beacon_miss_cnt beacon_miss_cnt;
|
||||
struct wlan_roam_reason_vsie_enable reason_vsie_enable;
|
||||
struct wlan_roam_triggers roam_triggers;
|
||||
struct wlan_roam_scan_period_params scan_period_params;
|
||||
/* other wmi cmd structures */
|
||||
};
|
||||
|
||||
@@ -285,37 +373,6 @@ enum roam_scan_freq_scheme {
|
||||
ROAM_SCAN_FREQ_SCHEME_FULL_SCAN = 2,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_cm_roam_vendor_btm_params - vendor config roam control param
|
||||
* @scan_freq_scheme: scan frequency scheme from enum
|
||||
* qca_roam_scan_freq_scheme
|
||||
* @connected_rssi_threshold: RSSI threshold of the current
|
||||
* connected AP
|
||||
* @candidate_rssi_threshold: RSSI threshold of the
|
||||
* candidate AP
|
||||
* @user_roam_reason: Roam triggered reason code, value zero is for enable
|
||||
* and non zero value is disable
|
||||
*/
|
||||
struct wlan_cm_roam_vendor_btm_params {
|
||||
uint32_t scan_freq_scheme;
|
||||
uint32_t connected_rssi_threshold;
|
||||
uint32_t candidate_rssi_threshold;
|
||||
uint32_t user_roam_reason;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_roam_triggers - vendor configured roam triggers
|
||||
* @vdev_id: vdev id
|
||||
* @trigger_bitmap: vendor configured roam trigger bitmap as
|
||||
* defined @enum roam_control_trigger_reason
|
||||
* @control_param: roam trigger param
|
||||
*/
|
||||
struct wlan_roam_triggers {
|
||||
uint32_t vdev_id;
|
||||
uint32_t trigger_bitmap;
|
||||
struct wlan_cm_roam_vendor_btm_params vendor_btm_param;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct wlan_cm_roam - Connection manager roam configs, state and roam
|
||||
* data related structure
|
||||
|
@@ -73,6 +73,18 @@ wmi_unified_set_rssi_monitoring_cmd(wmi_unified_t wmi_handle,
|
||||
QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_offload_scan_rssi_params *roam_req);
|
||||
|
||||
/**
|
||||
* wmi_unified_roam_scan_offload_scan_period() - set roam offload scan period
|
||||
* @wmi_handle: wmi handle
|
||||
* @param: pointer to roam scan period params to be sent to fw
|
||||
*
|
||||
* Send WMI_ROAM_SCAN_PERIOD parameters to fw.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
|
||||
*/
|
||||
QDF_STATUS wmi_unified_roam_scan_offload_scan_period(
|
||||
wmi_unified_t wmi_handle, struct wlan_roam_scan_period_params *param);
|
||||
#else
|
||||
/**
|
||||
* wmi_unified_roam_scan_offload_rssi_thresh_cmd() - set roam scan rssi
|
||||
@@ -88,6 +100,18 @@ QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(
|
||||
QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct roam_offload_scan_rssi_params *roam_req);
|
||||
|
||||
/**
|
||||
* wmi_unified_roam_scan_offload_scan_period() - set roam offload scan period
|
||||
* @wmi_handle: wmi handle
|
||||
* @param: pointer to roam scan period params to be sent to fw
|
||||
*
|
||||
* Send WMI_ROAM_SCAN_PERIOD parameters to fw.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
|
||||
*/
|
||||
QDF_STATUS wmi_unified_roam_scan_offload_scan_period(
|
||||
wmi_unified_t wmi_handle, struct roam_scan_period_params *param);
|
||||
#endif
|
||||
|
||||
/**
|
||||
@@ -289,18 +313,6 @@ QDF_STATUS wmi_unified_roam_scan_offload_cmd(wmi_unified_t wmi_handle,
|
||||
uint32_t command,
|
||||
uint32_t vdev_id);
|
||||
|
||||
/**
|
||||
* wmi_unified_roam_scan_offload_scan_period() - set roam offload scan period
|
||||
* @wmi_handle: wmi handle
|
||||
* @param: pointer to roam scan period params to be sent to fw
|
||||
*
|
||||
* Send WMI_ROAM_SCAN_PERIOD parameters to fw.
|
||||
*
|
||||
* Return: QDF_STATUS_SUCCESS on success and QDF_STATUS_E_FAILURE for failure
|
||||
*/
|
||||
QDF_STATUS wmi_unified_roam_scan_offload_scan_period(
|
||||
wmi_unified_t wmi_handle, struct roam_scan_period_params *param);
|
||||
|
||||
/**
|
||||
* wmi_unified_roam_scan_offload_chan_list_cmd() - set roam offload channel list
|
||||
* @wmi_handle: wmi handle
|
||||
|
@@ -127,7 +127,6 @@ struct roam_offload_scan_rssi_params {
|
||||
uint32_t bg_scan_client_bitmap;
|
||||
uint32_t flags;
|
||||
};
|
||||
#endif
|
||||
|
||||
/**
|
||||
* struct roam_scan_period_params - Roam scan period parameters
|
||||
@@ -152,6 +151,7 @@ struct roam_scan_period_params {
|
||||
uint32_t roam_scan_period_after_inactivity;
|
||||
uint32_t full_scan_period;
|
||||
};
|
||||
#endif
|
||||
|
||||
/**
|
||||
* struct wmi_mawc_roam_params - Motion Aided wireless connectivity params
|
||||
|
@@ -57,6 +57,18 @@ QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wmi_unified_roam_scan_offload_scan_period(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_scan_period_params *param)
|
||||
{
|
||||
if (wmi_handle->ops->send_roam_scan_offload_scan_period_cmd)
|
||||
return wmi_handle->ops->send_roam_scan_offload_scan_period_cmd(
|
||||
wmi_handle, param);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
#else
|
||||
QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(
|
||||
wmi_unified_t wmi_handle,
|
||||
@@ -68,6 +80,17 @@ QDF_STATUS wmi_unified_roam_scan_offload_rssi_thresh_cmd(
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wmi_unified_roam_scan_offload_scan_period(wmi_unified_t wmi_handle,
|
||||
struct roam_scan_period_params *param)
|
||||
{
|
||||
if (wmi_handle->ops->send_roam_scan_offload_scan_period_cmd)
|
||||
return wmi_handle->ops->send_roam_scan_offload_scan_period_cmd(
|
||||
wmi_handle, param);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS wmi_unified_roam_mawc_params_cmd(
|
||||
@@ -221,17 +244,6 @@ QDF_STATUS wmi_unified_roam_scan_offload_cmd(wmi_unified_t wmi_handle,
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wmi_unified_roam_scan_offload_scan_period(wmi_unified_t wmi_handle,
|
||||
struct roam_scan_period_params *param)
|
||||
{
|
||||
if (wmi_handle->ops->send_roam_scan_offload_scan_period_cmd)
|
||||
return wmi_handle->ops->send_roam_scan_offload_scan_period_cmd(
|
||||
wmi_handle, param);
|
||||
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wmi_unified_roam_scan_offload_chan_list_cmd(wmi_unified_t wmi_handle,
|
||||
uint8_t chan_count,
|
||||
|
@@ -300,6 +300,75 @@ static QDF_STATUS send_roam_scan_offload_rssi_thresh_cmd_tlv(
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* send_roam_scan_offload_scan_period_cmd_tlv() - set roam offload scan period
|
||||
* @wmi_handle: wmi handle
|
||||
* @param: roam scan parameters to be sent to firmware
|
||||
*
|
||||
* Send WMI_ROAM_SCAN_PERIOD parameters to fw.
|
||||
*
|
||||
* Return: QDF status
|
||||
*/
|
||||
static QDF_STATUS
|
||||
send_roam_scan_offload_scan_period_cmd_tlv(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct wlan_roam_scan_period_params *param)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
wmi_buf_t buf = NULL;
|
||||
int len;
|
||||
uint8_t *buf_ptr;
|
||||
wmi_roam_scan_period_fixed_param *scan_period_fp;
|
||||
|
||||
/* Send scan period values */
|
||||
len = sizeof(wmi_roam_scan_period_fixed_param);
|
||||
buf = wmi_buf_alloc(wmi_handle, len);
|
||||
if (!buf)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
buf_ptr = (uint8_t *)wmi_buf_data(buf);
|
||||
scan_period_fp = (wmi_roam_scan_period_fixed_param *)buf_ptr;
|
||||
WMITLV_SET_HDR(&scan_period_fp->tlv_header,
|
||||
WMITLV_TAG_STRUC_wmi_roam_scan_period_fixed_param,
|
||||
WMITLV_GET_STRUCT_TLVLEN
|
||||
(wmi_roam_scan_period_fixed_param));
|
||||
/* fill in scan period values */
|
||||
scan_period_fp->vdev_id = param->vdev_id;
|
||||
scan_period_fp->roam_scan_period = param->scan_period;
|
||||
scan_period_fp->roam_scan_age = param->scan_age;
|
||||
scan_period_fp->inactivity_time_period =
|
||||
param->roam_scan_inactivity_time;
|
||||
scan_period_fp->roam_inactive_count =
|
||||
param->roam_inactive_data_packet_count;
|
||||
scan_period_fp->roam_scan_period_after_inactivity =
|
||||
param->roam_scan_period_after_inactivity;
|
||||
/* Firmware expects the full scan preriod in msec whereas host
|
||||
* provides the same in seconds.
|
||||
* Convert it to msec and send to firmware
|
||||
*/
|
||||
scan_period_fp->roam_full_scan_period = param->full_scan_period * 1000;
|
||||
|
||||
wmi_debug("roam_scan_period=%d, roam_scan_age=%d, full_scan_period= %u",
|
||||
scan_period_fp->roam_scan_period,
|
||||
scan_period_fp->roam_scan_age,
|
||||
scan_period_fp->roam_full_scan_period);
|
||||
|
||||
wmi_debug("inactiviy time:%d inactive cnt:%d time after inactivity:%d",
|
||||
scan_period_fp->inactivity_time_period,
|
||||
scan_period_fp->roam_inactive_count,
|
||||
scan_period_fp->roam_scan_period_after_inactivity);
|
||||
|
||||
wmi_mtrace(WMI_ROAM_SCAN_PERIOD, NO_SESSION, 0);
|
||||
status = wmi_unified_cmd_send(wmi_handle, buf, len,
|
||||
WMI_ROAM_SCAN_PERIOD);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
wmi_buf_free(buf);
|
||||
return status;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#else
|
||||
static QDF_STATUS send_roam_scan_offload_rssi_thresh_cmd_tlv(
|
||||
wmi_unified_t wmi_handle,
|
||||
@@ -431,6 +500,75 @@ static QDF_STATUS send_roam_scan_offload_rssi_thresh_cmd_tlv(
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* send_roam_scan_offload_scan_period_cmd_tlv() - set roam offload scan period
|
||||
* @wmi_handle: wmi handle
|
||||
* @param: roam scan parameters to be sent to firmware
|
||||
*
|
||||
* Send WMI_ROAM_SCAN_PERIOD parameters to fw.
|
||||
*
|
||||
* Return: QDF status
|
||||
*/
|
||||
static QDF_STATUS
|
||||
send_roam_scan_offload_scan_period_cmd_tlv(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct roam_scan_period_params *param)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
wmi_buf_t buf = NULL;
|
||||
int len;
|
||||
uint8_t *buf_ptr;
|
||||
wmi_roam_scan_period_fixed_param *scan_period_fp;
|
||||
|
||||
/* Send scan period values */
|
||||
len = sizeof(wmi_roam_scan_period_fixed_param);
|
||||
buf = wmi_buf_alloc(wmi_handle, len);
|
||||
if (!buf)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
buf_ptr = (uint8_t *)wmi_buf_data(buf);
|
||||
scan_period_fp = (wmi_roam_scan_period_fixed_param *)buf_ptr;
|
||||
WMITLV_SET_HDR(&scan_period_fp->tlv_header,
|
||||
WMITLV_TAG_STRUC_wmi_roam_scan_period_fixed_param,
|
||||
WMITLV_GET_STRUCT_TLVLEN
|
||||
(wmi_roam_scan_period_fixed_param));
|
||||
/* fill in scan period values */
|
||||
scan_period_fp->vdev_id = param->vdev_id;
|
||||
scan_period_fp->roam_scan_period = param->scan_period;
|
||||
scan_period_fp->roam_scan_age = param->scan_age;
|
||||
scan_period_fp->inactivity_time_period =
|
||||
param->roam_scan_inactivity_time;
|
||||
scan_period_fp->roam_inactive_count =
|
||||
param->roam_inactive_data_packet_count;
|
||||
scan_period_fp->roam_scan_period_after_inactivity =
|
||||
param->roam_scan_period_after_inactivity;
|
||||
/* Firmware expects the full scan preriod in msec whereas host
|
||||
* provides the same in seconds.
|
||||
* Convert it to msec and send to firmware
|
||||
*/
|
||||
scan_period_fp->roam_full_scan_period = param->full_scan_period * 1000;
|
||||
|
||||
wmi_debug("roam_scan_period=%d, roam_scan_age=%d, full_scan_period= %u",
|
||||
scan_period_fp->roam_scan_period,
|
||||
scan_period_fp->roam_scan_age,
|
||||
scan_period_fp->roam_full_scan_period);
|
||||
|
||||
wmi_debug("inactiviy time:%d inactive cnt:%d time after inactivity:%d",
|
||||
scan_period_fp->inactivity_time_period,
|
||||
scan_period_fp->roam_inactive_count,
|
||||
scan_period_fp->roam_scan_period_after_inactivity);
|
||||
|
||||
wmi_mtrace(WMI_ROAM_SCAN_PERIOD, NO_SESSION, 0);
|
||||
status = wmi_unified_cmd_send(wmi_handle, buf, len,
|
||||
WMI_ROAM_SCAN_PERIOD);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
wmi_buf_free(buf);
|
||||
return status;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
#endif
|
||||
|
||||
static QDF_STATUS send_roam_mawc_params_cmd_tlv(wmi_unified_t wmi_handle,
|
||||
@@ -2327,75 +2465,6 @@ error:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* send_roam_scan_offload_scan_period_cmd_tlv() - set roam offload scan period
|
||||
* @wmi_handle: wmi handle
|
||||
* @param: roam scan parameters to be sent to firmware
|
||||
*
|
||||
* Send WMI_ROAM_SCAN_PERIOD parameters to fw.
|
||||
*
|
||||
* Return: QDF status
|
||||
*/
|
||||
static QDF_STATUS
|
||||
send_roam_scan_offload_scan_period_cmd_tlv(
|
||||
wmi_unified_t wmi_handle,
|
||||
struct roam_scan_period_params *param)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
wmi_buf_t buf = NULL;
|
||||
int len;
|
||||
uint8_t *buf_ptr;
|
||||
wmi_roam_scan_period_fixed_param *scan_period_fp;
|
||||
|
||||
/* Send scan period values */
|
||||
len = sizeof(wmi_roam_scan_period_fixed_param);
|
||||
buf = wmi_buf_alloc(wmi_handle, len);
|
||||
if (!buf)
|
||||
return QDF_STATUS_E_NOMEM;
|
||||
|
||||
buf_ptr = (uint8_t *)wmi_buf_data(buf);
|
||||
scan_period_fp = (wmi_roam_scan_period_fixed_param *)buf_ptr;
|
||||
WMITLV_SET_HDR(&scan_period_fp->tlv_header,
|
||||
WMITLV_TAG_STRUC_wmi_roam_scan_period_fixed_param,
|
||||
WMITLV_GET_STRUCT_TLVLEN
|
||||
(wmi_roam_scan_period_fixed_param));
|
||||
/* fill in scan period values */
|
||||
scan_period_fp->vdev_id = param->vdev_id;
|
||||
scan_period_fp->roam_scan_period = param->scan_period;
|
||||
scan_period_fp->roam_scan_age = param->scan_age;
|
||||
scan_period_fp->inactivity_time_period =
|
||||
param->roam_scan_inactivity_time;
|
||||
scan_period_fp->roam_inactive_count =
|
||||
param->roam_inactive_data_packet_count;
|
||||
scan_period_fp->roam_scan_period_after_inactivity =
|
||||
param->roam_scan_period_after_inactivity;
|
||||
/* Firmware expects the full scan preriod in msec whereas host
|
||||
* provides the same in seconds.
|
||||
* Convert it to msec and send to firmware
|
||||
*/
|
||||
scan_period_fp->roam_full_scan_period = param->full_scan_period * 1000;
|
||||
|
||||
wmi_debug("roam_scan_period=%d, roam_scan_age=%d, full_scan_period= %u",
|
||||
scan_period_fp->roam_scan_period,
|
||||
scan_period_fp->roam_scan_age,
|
||||
scan_period_fp->roam_full_scan_period);
|
||||
|
||||
wmi_debug("inactiviy time:%d inactive cnt:%d time after inactivity:%d",
|
||||
scan_period_fp->inactivity_time_period,
|
||||
scan_period_fp->roam_inactive_count,
|
||||
scan_period_fp->roam_scan_period_after_inactivity);
|
||||
|
||||
wmi_mtrace(WMI_ROAM_SCAN_PERIOD, NO_SESSION, 0);
|
||||
status = wmi_unified_cmd_send(wmi_handle, buf, len,
|
||||
WMI_ROAM_SCAN_PERIOD);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
wmi_buf_free(buf);
|
||||
return status;
|
||||
}
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
/**
|
||||
* send_roam_scan_offload_chan_list_cmd_tlv() - set roam offload channel list
|
||||
* @wmi_handle: wmi handle
|
||||
|
@@ -19184,7 +19184,8 @@ csr_roam_offload_scan(struct mac_context *mac_ctx, uint8_t session_id,
|
||||
|
||||
#ifdef ROAM_OFFLOAD_V1
|
||||
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
|
||||
QDF_STATUS wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
QDF_STATUS
|
||||
wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
uint8_t command,
|
||||
uint8_t reason)
|
||||
@@ -19343,7 +19344,8 @@ QDF_STATUS wlan_cm_roam_cmd_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void wlan_cm_roam_scan_offload_rssi_thresh(
|
||||
static void
|
||||
wlan_cm_roam_scan_offload_rssi_thresh(
|
||||
struct mac_context *mac_ctx,
|
||||
struct csr_roam_session *session,
|
||||
struct wlan_roam_offload_scan_rssi_params *params)
|
||||
@@ -19426,6 +19428,41 @@ static void wlan_cm_roam_scan_offload_rssi_thresh(
|
||||
roam_info->cfgParams.rssi_thresh_offset_5g;
|
||||
}
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_scan_offload_scan_period() - set roam offload scan period
|
||||
* parameters
|
||||
* @mac_ctx: global mac ctx
|
||||
* @session: csr roam session
|
||||
* @params: roam offload scan period related parameters
|
||||
*
|
||||
* This function is used to set roam offload scan period related parameters
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
wlan_cm_roam_scan_offload_scan_period(
|
||||
struct mac_context *mac_ctx,
|
||||
struct csr_roam_session *session,
|
||||
struct wlan_roam_scan_period_params *params)
|
||||
{
|
||||
tpCsrNeighborRoamControlInfo roam_info =
|
||||
&mac_ctx->roam.neighborRoamInfo[session->vdev_id];
|
||||
|
||||
params->vdev_id = session->vdev_id;
|
||||
params->empty_scan_refresh_period =
|
||||
roam_info->cfgParams.emptyScanRefreshPeriod;
|
||||
params->scan_period = params->empty_scan_refresh_period;
|
||||
params->scan_age = (3 * params->empty_scan_refresh_period);
|
||||
params->roam_scan_inactivity_time =
|
||||
roam_info->cfgParams.roam_scan_inactivity_time;
|
||||
params->roam_inactive_data_packet_count =
|
||||
roam_info->cfgParams.roam_inactive_data_packet_count;
|
||||
params->roam_scan_period_after_inactivity =
|
||||
roam_info->cfgParams.roam_scan_period_after_inactivity;
|
||||
params->full_scan_period =
|
||||
roam_info->cfgParams.full_roam_scan_period;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
@@ -19453,6 +19490,10 @@ wlan_cm_roam_fill_start_req(struct wlan_objmgr_psoc *psoc,
|
||||
session,
|
||||
&req->rssi_params);
|
||||
|
||||
wlan_cm_roam_scan_offload_scan_period(mac_ctx,
|
||||
session,
|
||||
&req->scan_period_params);
|
||||
|
||||
/* fill other struct similar to wlan_roam_offload_scan_rssi_params */
|
||||
|
||||
return status;
|
||||
|
@@ -698,14 +698,6 @@ wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle,
|
||||
roam_params->roam_bad_rssi_thresh_offset_2g);
|
||||
return status;
|
||||
}
|
||||
#else
|
||||
QDF_STATUS
|
||||
wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle,
|
||||
struct roam_offload_scan_req *roam_req)
|
||||
{
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* wma_roam_scan_offload_scan_period() - set roam offload scan period
|
||||
@@ -743,7 +735,21 @@ wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle,
|
||||
return wmi_unified_roam_scan_offload_scan_period(wma_handle->wmi_handle,
|
||||
&scan_period_params);
|
||||
}
|
||||
#else
|
||||
QDF_STATUS
|
||||
wma_roam_scan_offload_rssi_thresh(tp_wma_handle wma_handle,
|
||||
struct roam_offload_scan_req *roam_req)
|
||||
{
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wma_roam_scan_offload_scan_period(tp_wma_handle wma_handle,
|
||||
struct roam_offload_scan_req *roam_req)
|
||||
{
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
#endif
|
||||
/**
|
||||
* wma_roam_scan_offload_rssi_change() - set roam offload RSSI change threshold
|
||||
* @wma_handle: wma handle
|
||||
@@ -1863,7 +1869,7 @@ wma_send_idle_roam_params(tp_wma_handle wma_handle,
|
||||
*
|
||||
* Return: Void
|
||||
*/
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
#if defined(WLAN_FEATURE_ROAM_OFFLOAD) && !defined(ROAM_OFFLOAD_V1)
|
||||
static void wma_set_vdev_roam_reason_vsie(tp_wma_handle wma, uint8_t vdev_id,
|
||||
bool is_roam_reason_vsie_enabled)
|
||||
{
|
||||
|
Reference in New Issue
Block a user