diff --git a/target_if/core/inc/target_if.h b/target_if/core/inc/target_if.h index 6ae2885c9a..ccd3087a46 100644 --- a/target_if/core/inc/target_if.h +++ b/target_if/core/inc/target_if.h @@ -3013,11 +3013,13 @@ QDF_STATUS target_if_mlo_ready(struct wlan_objmgr_pdev **pdev, * @pdev: Pointer to pdev object * @reason: Reason for triggering teardown * @reset: UMAC reset for mode1 SSR + * @standby_active: Active radio while in standby mode * * Return: QDF_STATUS codes */ QDF_STATUS target_if_mlo_teardown_req(struct wlan_objmgr_pdev *pdev, - uint32_t reason, bool reset); + uint32_t reason, bool reset, + bool standby_active); #endif /*WLAN_FEATURE_11BE_MLO && WLAN_MLO_MULTI_CHIP*/ /** diff --git a/target_if/core/src/target_if_main.c b/target_if/core/src/target_if_main.c index 2068071166..ba2fd658ae 100644 --- a/target_if/core/src/target_if_main.c +++ b/target_if/core/src/target_if_main.c @@ -1243,7 +1243,7 @@ QDF_STATUS target_if_mlo_ready(struct wlan_objmgr_pdev **pdev, QDF_STATUS target_if_mlo_teardown_req(struct wlan_objmgr_pdev *pdev, enum wmi_mlo_teardown_reason reason, - bool reset) + bool reset, bool standby_active) { wmi_unified_t wmi_handle; struct wmi_mlo_teardown_params params = {0}; @@ -1255,6 +1255,7 @@ target_if_mlo_teardown_req(struct wlan_objmgr_pdev *pdev, params.pdev_id = wlan_objmgr_pdev_get_pdev_id(pdev); params.reason = reason; params.umac_reset = reset; + params.standby_active = standby_active; return wmi_mlo_teardown_cmd_send(wmi_handle, ¶ms); } diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h index f1072fc4ff..a4986d48da 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_pdev_obj.h @@ -254,6 +254,7 @@ struct wlan_objmgr_pdev_objmgr { * @peer_free_list: list to hold freed peer * @peer_obj_free_work:delayed work to be queued into workqueue * @active_work_cnt: active work counts + * @standby_active: Pdev in standby mode while power down */ struct wlan_objmgr_pdev { struct wlan_chan_list *current_chan_list; @@ -271,6 +272,9 @@ struct wlan_objmgr_pdev { qdf_work_t peer_obj_free_work; uint32_t active_work_cnt; #endif +#ifdef WLAN_MLO_MULTI_CHIP + bool standby_active; +#endif }; /* diff --git a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h index f076781f23..fa05ee38ed 100644 --- a/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h +++ b/umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h @@ -592,7 +592,8 @@ struct wlan_lmac_if_mlme_tx_ops { QDF_STATUS (*target_if_mlo_ready)(struct wlan_objmgr_pdev **pdev, uint8_t num_pdevs); QDF_STATUS (*target_if_mlo_teardown_req)(struct wlan_objmgr_pdev *pdev, - uint32_t grp_id, bool reset); + uint32_t grp_id, bool reset, + bool standby_active); #endif #ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE QDF_STATUS (*vdev_send_set_mac_addr)(struct qdf_mac_addr mac_addr, diff --git a/umac/mlo_mgr/src/wlan_mlo_mgr_setup.c b/umac/mlo_mgr/src/wlan_mlo_mgr_setup.c index 7a38d8ba15..74bbfd0e35 100644 --- a/umac/mlo_mgr/src/wlan_mlo_mgr_setup.c +++ b/umac/mlo_mgr/src/wlan_mlo_mgr_setup.c @@ -1042,13 +1042,15 @@ static void mlo_send_teardown_req(struct wlan_objmgr_psoc *psoc, if (tx_ops && tx_ops->mops.target_if_mlo_teardown_req) { mlo_info( - "Trigger Teardown with Pdev %d Psoc id %d link idx %d Umac reset %d for Mode 1", + "Trigger Teardown with Pdev id: %d Psoc id: %d link idx: %d Umac reset: %d Standby Active: %d", wlan_objmgr_pdev_get_pdev_id(temp_pdev), wlan_psoc_get_id(wlan_pdev_get_psoc(temp_pdev)), - link_idx, umac_reset); + link_idx, umac_reset, + temp_pdev->standby_active); tx_ops->mops.target_if_mlo_teardown_req( setup_info->pdev_list[link_idx], - reason, umac_reset); + reason, umac_reset, + temp_pdev->standby_active); } } } else { @@ -1058,7 +1060,7 @@ static void mlo_send_teardown_req(struct wlan_objmgr_psoc *psoc, continue; tx_ops->mops.target_if_mlo_teardown_req( setup_info->pdev_list[link_idx], - reason, 0); + reason, 0, 0); } } } diff --git a/wmi/inc/wmi_unified_11be_param.h b/wmi/inc/wmi_unified_11be_param.h index 45760cd6d6..ee8cef999c 100644 --- a/wmi/inc/wmi_unified_11be_param.h +++ b/wmi/inc/wmi_unified_11be_param.h @@ -66,6 +66,7 @@ struct wmi_mlo_teardown_params { uint32_t pdev_id; enum wmi_mlo_teardown_reason reason; bool umac_reset; + bool standby_active; }; /** enum wmi_mlo_setup_status - Status code in WMI MLO setup completion event diff --git a/wmi/src/wmi_unified_11be_tlv.c b/wmi/src/wmi_unified_11be_tlv.c index 3f0a6956f7..a300a6d382 100644 --- a/wmi/src/wmi_unified_11be_tlv.c +++ b/wmi/src/wmi_unified_11be_tlv.c @@ -2285,6 +2285,7 @@ QDF_STATUS mlo_teardown_cmd_send_tlv(struct wmi_unified *wmi_handle, } cmd->trigger_umac_reset = param->umac_reset; + cmd->erp_standby_mode = param->standby_active; wmi_mtrace(WMI_MLO_TEARDOWN_CMDID, NO_SESSION, 0); ret = wmi_unified_cmd_send(wmi_handle, buf, len,