qcacld-3.0: Add connection manager RSO init/deinit support

Add connection manager changes to send roam scan offload init
deinit. Add new enum roam_offload_init_flags to fill the roam
init/deinit flags, 4-way handshake offload, bmiss skip full scan
flags at connection manager instead of getting the ini and filling
at target if.

Change-Id: I558e868efd341b508d3df76c8d6ab90eac512432
CRs-Fixed: 2745585
Esse commit está contido em:
Pragaspathi Thilagaraj
2020-07-31 20:07:59 +05:30
commit de snandini
commit 68d572daa3
7 arquivos alterados com 157 adições e 15 exclusões

Ver arquivo

@@ -122,11 +122,9 @@ wlan_cm_roam_triggers(struct wlan_objmgr_psoc *psoc,
* Return: QDF_STATUS
*/
static QDF_STATUS
cm_roam_init_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
bool enable)
cm_roam_init_req(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id, bool enable)
{
return QDF_STATUS_SUCCESS;
return wlan_cm_tgt_send_roam_offload_init(psoc, vdev_id, enable);
}
/**
@@ -337,7 +335,6 @@ cm_roam_switch_to_deinit(struct wlan_objmgr_pdev *pdev,
}
status = cm_roam_init_req(psoc, vdev_id, false);
if (QDF_IS_STATUS_ERROR(status))
return status;
@@ -381,7 +378,7 @@ cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
case WLAN_ROAM_DEINIT:
roaming_bitmap = mlme_get_roam_trigger_bitmap(psoc, vdev_id);
if (!roaming_bitmap) {
mlme_info("ROAM: Cannot change to INIT state for vdev[%d]",
mlme_info("CM_RSO: Cannot change to INIT state for vdev[%d]",
vdev_id);
return QDF_STATUS_E_FAILURE;
}
@@ -404,7 +401,7 @@ cm_roam_switch_to_init(struct wlan_objmgr_pdev *pdev,
* supplicant.
*/
if (reason != REASON_SUPPLICANT_INIT_ROAMING) {
mlme_info("ROAM: Roam module already initialized on vdev:[%d]",
mlme_info("CM_RSO: Roam module already initialized on vdev:[%d]",
temp_vdev_id);
return QDF_STATUS_E_FAILURE;
}

Ver arquivo

@@ -88,6 +88,35 @@
#define REASON_ROAM_HANDOFF_DONE 52
#define REASON_ROAM_ABORT 53
/**
* enum roam_offload_init_flags - Flags sent in Roam offload initialization.
* @WLAN_ROAM_FW_OFFLOAD_ENABLE: Init roaming module at firwmare
* @WLAN_ROAM_BMISS_FINAL_SCAN_ENABLE: Enable partial scan after final beacon
* miss event at firmware
* @WLAN_ROAM_SKIP_EAPOL_4WAY_HANDSHAKE: Disable 4 Way-HS offload to firmware
* Setting this flag will make the eapol packets reach to host every time
* and can cause frequent APPS wake-ups.
* @WLAN_ROAM_BMISS_FINAL_SCAN_TYPE: Set this flag to skip full scan on final
* bmiss and use the channel map to do the partial scan alone
*/
enum roam_offload_init_flags {
WLAN_ROAM_FW_OFFLOAD_ENABLE = BIT(1),
WLAN_ROAM_BMISS_FINAL_SCAN_ENABLE = BIT(2),
WLAN_ROAM_SKIP_EAPOL_4WAY_HANDSHAKE = BIT(3),
WLAN_ROAM_BMISS_FINAL_SCAN_TYPE = BIT(4)
};
/**
* struct wlan_roam_offload_init_params - Firmware roam module initialization
* parameters. Used to fill
* @vdev_id: vdev for which the roaming has to be enabled/disabled
* @roam_offload_flag: flag to init/deinit roam module
*/
struct wlan_roam_offload_init_params {
uint8_t vdev_id;
uint32_t roam_offload_flag;
};
/**
* struct wlan_cm_roam_vendor_btm_params - vendor config roam control param
* @scan_freq_scheme: scan frequency scheme from enum
@@ -625,6 +654,8 @@ struct set_pcl_req {
* roaming related commands
* @send_vdev_set_pcl_cmd: TX ops function pointer to send set vdev PCL
* command
* @send_roam_offload_init_req: TX Ops function pointer to send roam offload
* module initialize request
* @send_roam_start_req: TX ops function pointer to send roam start related
* commands
*/
@@ -632,6 +663,10 @@ struct wlan_cm_roam_tx_ops {
QDF_STATUS (*send_vdev_set_pcl_cmd) (struct wlan_objmgr_vdev *vdev,
struct set_pcl_req *req);
#ifdef ROAM_OFFLOAD_V1
QDF_STATUS (*send_roam_offload_init_req) (
struct wlan_objmgr_vdev *vdev,
struct wlan_roam_offload_init_params *params);
QDF_STATUS (*send_roam_start_req)(struct wlan_objmgr_vdev *vdev,
struct wlan_roam_start_config *req);
#endif

Ver arquivo

@@ -50,6 +50,18 @@ wlan_cm_roam_send_set_vdev_pcl(struct wlan_objmgr_psoc *psoc,
#ifdef ROAM_OFFLOAD_V1
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
/**
* wlan_cm_tgt_send_roam_offload_init - Send WMI_VDEV_PARAM_ROAM_FW_OFFLOAD to
* init/deinit roaming module at firmware
* @psoc: PSOC pointer
* @vdev_id: vdev id
* @is_init: true if roam module is to be initialized else false for deinit
*
* Return: QDF_STATUS
*/
QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, bool is_init);
/**
* wlan_cm_tgt_send_roam_start_req - Send roam start command to firmware
* @psoc: psoc pointer

Ver arquivo

@@ -131,6 +131,54 @@ end:
#ifdef ROAM_OFFLOAD_V1
#if defined(WLAN_FEATURE_HOST_ROAM) || defined(WLAN_FEATURE_ROAM_OFFLOAD)
QDF_STATUS wlan_cm_tgt_send_roam_offload_init(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id, bool is_init)
{
QDF_STATUS status;
struct wlan_cm_roam_tx_ops roam_tx_ops;
struct wlan_objmgr_vdev *vdev;
struct wlan_roam_offload_init_params init_msg = {0};
bool disable_4way_hs_offload, bmiss_skip_full_scan;
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
WLAN_MLME_NB_ID);
if (!vdev)
return QDF_STATUS_E_INVAL;
roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
if (!roam_tx_ops.send_roam_offload_init_req) {
mlme_err("CM_RSO: vdev%d send_roam_offload_init_req is NULL",
vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_E_INVAL;
}
init_msg.vdev_id = vdev_id;
if (is_init) {
init_msg.roam_offload_flag = WLAN_ROAM_FW_OFFLOAD_ENABLE |
WLAN_ROAM_BMISS_FINAL_SCAN_ENABLE;
wlan_mlme_get_4way_hs_offload(psoc, &disable_4way_hs_offload);
if (disable_4way_hs_offload)
init_msg.roam_offload_flag |=
WLAN_ROAM_SKIP_EAPOL_4WAY_HANDSHAKE;
wlan_mlme_get_bmiss_skip_full_scan_value(psoc,
&bmiss_skip_full_scan);
if (bmiss_skip_full_scan)
init_msg.roam_offload_flag |=
WLAN_ROAM_BMISS_FINAL_SCAN_TYPE;
}
status = roam_tx_ops.send_roam_offload_init_req(vdev, &init_msg);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("CM_RSO: vdev%d fail to send rso init", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return status;
}
QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
struct wlan_roam_start_config *req)
@@ -146,14 +194,14 @@ QDF_STATUS wlan_cm_tgt_send_roam_start_req(struct wlan_objmgr_psoc *psoc,
roam_tx_ops = GET_CM_ROAM_TX_OPS_FROM_VDEV(vdev);
if (!roam_tx_ops.send_roam_start_req) {
mlme_err("send_roam_start_req is NULL");
mlme_err("CM_RSO: vdev%d send_roam_start_req is NULL", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return QDF_STATUS_E_INVAL;
}
status = roam_tx_ops.send_roam_start_req(vdev, req);
if (QDF_IS_STATUS_ERROR(status))
mlme_debug("fail to send roam start");
mlme_debug("CM_RSO: vdev%d fail to send roam start", vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
return status;