qcacld-3.0: Add initial roam offload state changes

Rename the existing roam offload states to include
WLAN_ prefix. Add 2 new states:
WLAN_ROAMING_IN_PROG - Roaming has started at firmware, this is
                       after candidate selection at firmware.

WLAN_ROAM_SYNCH_IN_PROG - State after handoff is complete at
                          firmware.

Also move the roam_offload_state enum to connection manager.

Change-Id: Ib1f38d200393849253893113172cdfc69e381fb3
CRs-Fixed: 2725387
This commit is contained in:
Pragaspathi Thilagaraj 2020-07-05 01:32:01 +05:30 • committed by nshrivas
commit 65c1c28045
9 changed files with 145 additions and 88 deletions

View file

@ -260,6 +260,16 @@ struct wlan_mlme_nss_chains *mlme_get_ini_vdev_config(
struct mlme_roam_after_data_stall *
mlme_get_roam_invoke_params(struct wlan_objmgr_vdev *vdev);
/**
* mlme_is_roam_invoke_in_progress - Get if roam invoked by host
* is active.
* @psoc: Pointer to global psoc.
* @vdev_id: vdev id
*
* Return: True if roaming invoke is in progress
*/
bool mlme_is_roam_invoke_in_progress(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id);
/**
* mlme_cfg_on_psoc_enable() - Populate MLME structure from CFG and INI
* @psoc: pointer to the psoc object
@ -544,20 +554,32 @@ void
mlme_set_operations_bitmap(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
enum wlan_cm_rso_control_requestor reqs, bool clear);
#define MLME_IS_ROAM_STATE_RSO_STARTED(psoc, vdev_id) \
(mlme_get_roam_state(psoc, vdev_id) == ROAM_RSO_STARTED)
#define MLME_IS_ROAM_STATE_RSO_ENABLED(psoc, vdev_id) \
(mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_RSO_ENABLED)
#define MLME_IS_ROAM_STATE_DEINIT(psoc, vdev_id) \
(mlme_get_roam_state(psoc, vdev_id) == ROAM_DEINIT)
(mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_DEINIT)
#define MLME_IS_ROAM_STATE_INIT(psoc, vdev_id) \
(mlme_get_roam_state(psoc, vdev_id) == ROAM_INIT)
(mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_INIT)
#define MLME_IS_ROAM_STATE_STOPPED(psoc, vdev_id) \
(mlme_get_roam_state(psoc, vdev_id) == ROAM_RSO_STOPPED)
(mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_RSO_STOPPED)
#define MLME_IS_ROAM_INITIALIZED(psoc, vdev_id) \
(mlme_get_roam_state(psoc, vdev_id) >= ROAM_INIT)
(mlme_get_roam_state(psoc, vdev_id) >= WLAN_ROAM_INIT)
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
#define MLME_IS_ROAMING_IN_PROG(psoc, vdev_id) \
(mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAMING_IN_PROG)
#define MLME_IS_ROAM_SYNCH_IN_PROGRESS(psoc, vdev_id) \
(mlme_get_roam_state(psoc, vdev_id) == WLAN_ROAM_SYNCH_IN_PROG)
#else
#define MLME_IS_ROAMING_IN_PROG(psoc, vdev_id) (false)
#define MLME_IS_ROAM_SYNCH_IN_PROGRESS(psoc, vdev_id) (false)
#endif
/**

View file

@ -81,6 +81,30 @@ mlme_get_roam_invoke_params(struct wlan_objmgr_vdev *vdev)
return &mlme_priv->roam_invoke_params;
}
bool mlme_is_roam_invoke_in_progress(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id)
{
struct mlme_roam_after_data_stall *vdev_roam_params;
struct wlan_objmgr_vdev *vdev;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_NB_ID);
if (!vdev) {
mlme_legacy_err("Vdev object is NULL");
return false;
}
vdev_roam_params = mlme_get_roam_invoke_params(vdev);
if (!vdev_roam_params) {
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return false;
}
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return vdev_roam_params->roam_invoke_in_progress;
}
uint8_t *mlme_get_dynamic_oce_flags(struct wlan_objmgr_vdev *vdev)
{
struct mlme_legacy_priv *mlme_priv;
@ -2579,14 +2603,18 @@ static
const char *mlme_roam_state_to_string(enum roam_offload_state state)
{
switch (state) {
case ROAM_INIT:
case WLAN_ROAM_INIT:
return "ROAM_INIT";
case ROAM_DEINIT:
case WLAN_ROAM_DEINIT:
return "ROAM_DEINIT";
case ROAM_RSO_STARTED:
return "ROAM_RSO_STARTED";
case ROAM_RSO_STOPPED:
case WLAN_ROAM_RSO_ENABLED:
return "ROAM_RSO_ENABLED";
case WLAN_ROAM_RSO_STOPPED:
return "ROAM_RSO_STOPPED";
case WLAN_ROAMING_IN_PROG:
return "ROAMING_IN_PROG";
case WLAN_ROAM_SYNCH_IN_PROG:
return "ROAM_SYNCH_IN_PROG";
default:
return "";
}
@ -2596,9 +2624,10 @@ static void
mlme_print_roaming_state(uint8_t vdev_id, enum roam_offload_state cur_state,
enum roam_offload_state new_state)
{
mlme_debug("ROAM: vdev %d: %s(%d) --> %s(%d)",
vdev_id, mlme_roam_state_to_string(cur_state), cur_state,
mlme_roam_state_to_string(new_state), new_state);
mlme_legacy_debug("ROAM: vdev%d: [%s(%d)] --> [%s(%d)]",
vdev_id, mlme_roam_state_to_string(cur_state),
cur_state,
mlme_roam_state_to_string(new_state), new_state);
/* TODO: Try to print the state change requestor also */
}
@ -2777,14 +2806,14 @@ mlme_get_roam_state(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
if (!vdev) {
mlme_legacy_err("vdev object is NULL");
return ROAM_DEINIT;
return WLAN_ROAM_DEINIT;
}
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
if (!mlme_priv) {
mlme_legacy_err("vdev legacy private object is NULL");
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);
return ROAM_DEINIT;
return WLAN_ROAM_DEINIT;
}
roam_state = mlme_priv->mlme_roam.roam_sm.state;

View file

@ -271,25 +271,6 @@ enum mlme_ts_info_ack_policy {
TS_INFO_ACK_POLICY_HT_IMMEDIATE_BLOCK_ACK = 1,
};
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
/**
* enum roam_offload_state - Roaming module state for each STA vdev.
* @ROAM_DEINIT: Roaming module is not initialized at the
* firmware.
* @ROAM_INIT: Roaming module initialized at the firmware.
* @ROAM_RSO_STARTED: RSO started, firmware can roam to different AP.
* @ROAM_RSO_STOPPED: RSO stopped - roaming module is initialized at firmware,
* but firmware cannot do roaming due to supplicant disabled roaming/driver
* disabled roaming.
*/
enum roam_offload_state {
ROAM_DEINIT,
ROAM_INIT,
ROAM_RSO_STARTED,
ROAM_RSO_STOPPED
};
#endif
/**
* struct mlme_edca_params - EDCA pramaters related config items
*

View file

@ -26,6 +26,29 @@
#include "reg_services_public_struct.h"
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
/**
* enum roam_offload_state - Roaming module state for each STA vdev.
* @WLAN_ROAM_DEINIT: Roaming module is not initialized at the
* firmware.
* @WLAN_ROAM_INIT: Roaming module initialized at the firmware.
* @WLAN_ROAM_RSO_ENABLED: RSO started, firmware can roam to different AP.
* @WLAN_ROAM_RSO_STOPPED: RSO stopped - roaming module is initialized at firmware,
* but firmware cannot do roaming due to supplicant disabled roaming/driver
* disabled roaming.
* @WLAN_ROAMING_IN_PROG: Roaming started at firmware. This state is
* transitioned after candidate selection is done at fw and preauth to
* the AP is started.
* @WLAN_ROAM_SYNCH_IN_PROG: Roaming handoff complete
*/
enum roam_offload_state {
WLAN_ROAM_DEINIT,
WLAN_ROAM_INIT,
WLAN_ROAM_RSO_ENABLED,
WLAN_ROAM_RSO_STOPPED,
WLAN_ROAMING_IN_PROG,
WLAN_ROAM_SYNCH_IN_PROG,
};
/**
* enum wlan_cm_rso_control_requestor - Driver disabled roaming requestor that
* will request the roam module to disable roaming based on the mlme operation
@ -77,16 +100,11 @@ struct wlan_cm_roam_tx_ops {
* struct wlan_cm_roam - Connection manager roam configs, state and roam
* data related structure
* @tx_ops: Roam Tx ops to send roam offload commands to firmware
* @reassoc_resp_frame: Pointer to reassoc frame received in roam synch
* indication
* @reassoc_resp_frame_len: reassoc frame len received in roam synch indication
* @pcl_vdev_cmd_active: Flag to check if vdev level pcl command needs to be
* sent or PDEV level PCL command needs to be sent
*/
struct wlan_cm_roam {
struct wlan_cm_roam_tx_ops tx_ops;
uint8_t *reassoc_resp_frame;
uint16_t reassoc_resp_frame_len;
bool pcl_vdev_cmd_active;
};
#endif