diff --git a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h index 429b34486e40..d902f7ee4327 100644 --- a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h +++ b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_api.h @@ -1967,6 +1967,14 @@ QDF_STATUS policy_mgr_wait_for_connection_update( */ QDF_STATUS policy_mgr_reset_connection_update(struct wlan_objmgr_psoc *psoc); +/** + * policy_mgr_reset_hw_mode_change() - Reset the hw mode change. + * @psoc: Pointer to PSOC object + * + * Return: none + */ +void policy_mgr_reset_hw_mode_change(struct wlan_objmgr_psoc *psoc); + /** * policy_mgr_set_connection_update() - Set connection update * event diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c index 8bddabd08af7..671ae3c3b3a2 100644 --- a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_action.c @@ -2609,6 +2609,14 @@ QDF_STATUS policy_mgr_reset_connection_update(struct wlan_objmgr_psoc *psoc) return QDF_STATUS_SUCCESS; } +void policy_mgr_reset_hw_mode_change(struct wlan_objmgr_psoc *psoc) +{ + policy_mgr_err("Clear hw mode change and connection update evt"); + policy_mgr_set_hw_mode_change_in_progress( + psoc, POLICY_MGR_HW_MODE_NOT_IN_PROGRESS); + policy_mgr_reset_connection_update(psoc); +} + QDF_STATUS policy_mgr_set_connection_update(struct wlan_objmgr_psoc *psoc) { QDF_STATUS status; diff --git a/core/sme/src/common/sme_api.c b/core/sme/src/common/sme_api.c index 67e2e9c67def..c6e3757eec5f 100644 --- a/core/sme/src/common/sme_api.c +++ b/core/sme/src/common/sme_api.c @@ -1,6 +1,6 @@ /* * Copyright (c) 2012-2020 The Linux Foundation. All rights reserved. - * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. + * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for * any purpose with or without fee is hereby granted, provided that the @@ -615,6 +615,8 @@ QDF_STATUS sme_ser_cmd_callback(struct wlan_serialization_command *cmd, status = sme_ser_handle_active_cmd(cmd); break; case WLAN_SER_CB_CANCEL_CMD: + if (cmd->cmd_type == WLAN_SER_CMD_SET_HW_MODE) + policy_mgr_reset_hw_mode_change(mac_ctx->psoc); break; case WLAN_SER_CB_RELEASE_MEM_CMD: if (cmd->vdev) @@ -629,6 +631,9 @@ QDF_STATUS sme_ser_cmd_callback(struct wlan_serialization_command *cmd, sme_cmd->command == eSmeCommandWmStatusChange)) qdf_trigger_self_recovery(mac_ctx->psoc, QDF_ACTIVE_LIST_TIMEOUT); + + if (cmd->cmd_type == WLAN_SER_CMD_SET_HW_MODE) + policy_mgr_reset_hw_mode_change(mac_ctx->psoc); break; default: sme_debug("unknown reason code");