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