From 35501bf452107cab8ba0a6d1b4fc0f2517ece833 Mon Sep 17 00:00:00 2001 From: Liangwei Dong Date: Sun, 21 Oct 2018 23:40:06 -0400 Subject: [PATCH] qcacmn: Add original vdev info for NSS update API Add original hw mode change request vdev id to NSS update APIs, so that the correct vdev to be used to do post processing after hw mode change, such as doing connect for hidden SSID case. Change-Id: Ie7f7b55a100ec4e23be2fc710d9b0d83cb33088d CRs-Fixed: 2336439 --- .../policy_mgr/inc/wlan_policy_mgr_api.h | 9 +++++--- .../policy_mgr/src/wlan_policy_mgr_action.c | 12 ++++++---- .../policy_mgr/src/wlan_policy_mgr_core.c | 22 +++++++++++++------ .../policy_mgr/src/wlan_policy_mgr_i.h | 4 +++- 4 files changed, 32 insertions(+), 15 deletions(-) diff --git a/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h b/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h index 31da207ed607..423b4430e2b2 100644 --- a/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +++ b/umac/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h @@ -1021,6 +1021,7 @@ typedef void (*policy_mgr_pdev_set_hw_mode_cback)(uint32_t status, * @next_action: next action to happen at policy mgr after * beacon update * @reason: Reason for nss update + * @original_vdev_id: original request hwmode change vdev id * * This function is the callback registered with SME at nss * update request time @@ -1031,7 +1032,8 @@ typedef void (*policy_mgr_nss_update_cback)(struct wlan_objmgr_psoc *psoc, uint8_t tx_status, uint8_t vdev_id, uint8_t next_action, - enum policy_mgr_conn_update_reason reason); + enum policy_mgr_conn_update_reason reason, + uint32_t original_vdev_id); /** * struct policy_mgr_sme_cbacks - SME Callbacks to be invoked @@ -1055,9 +1057,10 @@ struct policy_mgr_sme_cbacks { QDF_STATUS (*sme_pdev_set_hw_mode)(struct policy_mgr_hw_mode msg); QDF_STATUS (*sme_pdev_set_pcl)(struct policy_mgr_pcl_list *msg); QDF_STATUS (*sme_nss_update_request)(uint32_t vdev_id, - uint8_t new_nss, policy_mgr_nss_update_cback cback, + uint8_t new_nss, policy_mgr_nss_update_cback cback, uint8_t next_action, struct wlan_objmgr_psoc *psoc, - enum policy_mgr_conn_update_reason reason); + enum policy_mgr_conn_update_reason reason, + uint32_t original_vdev_id); QDF_STATUS (*sme_change_mcc_beacon_interval)(uint8_t session_id); QDF_STATUS (*sme_get_ap_channel_from_scan)( void *roam_profile, diff --git a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c index a7514fbd9a8b..874ea495bafd 100644 --- a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c +++ b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c @@ -1066,7 +1066,8 @@ QDF_STATUS policy_mgr_next_actions( * intially. If yes, update the beacon template & notify FW. */ status = policy_mgr_nss_update(psoc, POLICY_MGR_RX_NSS_1, - PM_NOP, POLICY_MGR_ANY, reason); + PM_NOP, POLICY_MGR_ANY, reason, + session_id); break; case PM_UPGRADE: /* @@ -1074,7 +1075,8 @@ QDF_STATUS policy_mgr_next_actions( * intially. If yes, update the beacon template & notify FW. */ status = policy_mgr_nss_update(psoc, POLICY_MGR_RX_NSS_2, - PM_NOP, POLICY_MGR_ANY, reason); + PM_NOP, POLICY_MGR_ANY, reason, + session_id); break; case PM_DBS1_DOWNGRADE: status = policy_mgr_complete_action(psoc, POLICY_MGR_RX_NSS_1, @@ -1133,12 +1135,14 @@ QDF_STATUS policy_mgr_next_actions( case PM_UPGRADE_5G: status = policy_mgr_nss_update( psoc, POLICY_MGR_RX_NSS_2, - PM_NOP, POLICY_MGR_BAND_5, reason); + PM_NOP, POLICY_MGR_BAND_5, reason, + session_id); break; case PM_UPGRADE_2G: status = policy_mgr_nss_update( psoc, POLICY_MGR_RX_NSS_2, - PM_NOP, POLICY_MGR_BAND_24, reason); + PM_NOP, POLICY_MGR_BAND_24, reason, + session_id); break; default: policy_mgr_err("unexpected action value %d", action); diff --git a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c index e3f78bba11ce..3b0a04b8f101 100644 --- a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c +++ b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_core.c @@ -2517,6 +2517,7 @@ bool policy_mgr_is_5g_channel_allowed(struct wlan_objmgr_psoc *psoc, * @next_action: next action to happen at policy mgr after * beacon update * @reason: Reason for nss update + * @original_vdev_id: original request hwmode change vdev id * * This function is the callback registered with SME at nss * update request time @@ -2527,7 +2528,8 @@ static void policy_mgr_nss_update_cb(struct wlan_objmgr_psoc *psoc, uint8_t tx_status, uint8_t vdev_id, uint8_t next_action, - enum policy_mgr_conn_update_reason reason) + enum policy_mgr_conn_update_reason reason, + uint32_t original_vdev_id) { uint32_t conn_index = 0; QDF_STATUS ret; @@ -2545,9 +2547,11 @@ static void policy_mgr_nss_update_cb(struct wlan_objmgr_psoc *psoc, return; } - policy_mgr_debug("nss update successful for vdev:%d", vdev_id); + policy_mgr_debug("nss update successful for vdev:%d ori %d reason %d", + vdev_id, original_vdev_id, reason); if (PM_NOP != next_action) - policy_mgr_next_actions(psoc, vdev_id, next_action, reason); + policy_mgr_next_actions(psoc, original_vdev_id, next_action, + reason); else { policy_mgr_debug("No action needed right now"); ret = policy_mgr_set_opportunistic_update(psoc); @@ -2561,7 +2565,8 @@ static void policy_mgr_nss_update_cb(struct wlan_objmgr_psoc *psoc, QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc, uint8_t new_nss, uint8_t next_action, enum policy_mgr_band band, - enum policy_mgr_conn_update_reason reason) + enum policy_mgr_conn_update_reason reason, + uint32_t original_vdev_id) { QDF_STATUS status = QDF_STATUS_E_FAILURE; uint32_t index, count; @@ -2604,7 +2609,8 @@ QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc, status = pm_ctx->sme_cbacks.sme_nss_update_request( vdev_id, new_nss, policy_mgr_nss_update_cb, - next_action, psoc, reason); + next_action, psoc, reason, + original_vdev_id); if (!QDF_IS_STATUS_SUCCESS(status)) { policy_mgr_err("sme_nss_update_request() failed for vdev %d", vdev_id); @@ -2637,7 +2643,8 @@ QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc, status = pm_ctx->sme_cbacks.sme_nss_update_request( vdev_id, new_nss, policy_mgr_nss_update_cb, - next_action, psoc, reason); + next_action, psoc, reason, + original_vdev_id); if (!QDF_IS_STATUS_SUCCESS(status)) { policy_mgr_err("sme_nss_update_request() failed for vdev %d", vdev_id); @@ -2690,7 +2697,8 @@ QDF_STATUS policy_mgr_complete_action(struct wlan_objmgr_psoc *psoc, downgrade_band = POLICY_MGR_ANY; status = policy_mgr_nss_update(psoc, new_nss, next_action, - downgrade_band, reason); + downgrade_band, reason, + session_id); if (!QDF_IS_STATUS_SUCCESS(status)) status = policy_mgr_next_actions(psoc, session_id, next_action, reason); diff --git a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h index cc8c3436c388..0a9d52b47050 100644 --- a/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h +++ b/umac/cmn_services/policy_mgr/src/wlan_policy_mgr_i.h @@ -534,6 +534,7 @@ void policy_mgr_reg_chan_change_callback(struct wlan_objmgr_psoc *psoc, * @next_action: Next action after nss update * @band: update AP vdev on the Band. * @reason: action reason + * @original_vdev_id: original request hwmode change vdev id * * The function will update AP vdevs on specific band. * eg. band = POLICY_MGR_ANY will request to update all band (2g and 5g) @@ -543,7 +544,8 @@ void policy_mgr_reg_chan_change_callback(struct wlan_objmgr_psoc *psoc, QDF_STATUS policy_mgr_nss_update(struct wlan_objmgr_psoc *psoc, uint8_t new_nss, uint8_t next_action, enum policy_mgr_band band, - enum policy_mgr_conn_update_reason reason); + enum policy_mgr_conn_update_reason reason, + uint32_t original_vdev_id); /** * policy_mgr_is_concurrency_allowed() - Check for allowed