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:

commit de
snandini

pai
72e1e5ed99
commit
68d572daa3
@@ -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;
|
||||
}
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
Referência em uma nova issue
Block a user