ソースを参照

qcacld-3.0: Notify firmware on CSA rejection

The host driver now sends a notification to the
firmware when a CSA (Channel Switch Announcement)
is rejected due to no change in channel, bandwidth,
or puncture.

Change-Id: I5d8a424459898d15a7931baf7ca4c3de8308c64e
CRs-Fixed: 3595843
Aasir Rasheed 1 年間 前
コミット
c03f357db6

+ 14 - 2
Kbuild

@@ -936,8 +936,14 @@ CLD_WMI_MC_CP_STATS_OBJS :=	$(WMI_DIR)/src/wmi_unified_mc_cp_stats_tlv.o \
 				$(WMI_DIR)/src/wmi_unified_mc_cp_stats_api.o
 endif
 
+ifeq ($(CONFIG_QCA_TARGET_IF_MLME), y)
+CLD_WMI_MLME_OBJS += $(WMI_DIR)/src/wmi_unified_mlme_tlv.o \
+		     $(WMI_DIR)/src/wmi_unified_mlme_api.o
+endif
+
 CLD_WMI_OBJS :=	$(CLD_WMI_ROAM_OBJS) \
-		$(CLD_WMI_MC_CP_STATS_OBJS)
+		$(CLD_WMI_MC_CP_STATS_OBJS) \
+		$(CLD_WMI_MLME_OBJS)
 
 $(call add-wlan-objs,cld_wmi,$(CLD_WMI_OBJS))
 
@@ -1744,9 +1750,14 @@ $(call add-wlan-objs,wlan_pre_cac,$(WLAN_PRE_CAC_OBJS))
 CLD_TARGET_IF_DIR := components/target_if
 
 CLD_TARGET_IF_INC := -I$(WLAN_ROOT)/$(CLD_TARGET_IF_DIR)/pmo/inc \
+		     -I$(WLAN_ROOT)/$(CLD_TARGET_IF_DIR)/mlme/inc \
+
+ifeq ($(CONFIG_QCA_TARGET_IF_MLME), y)
+CLD_TARGET_IF_OBJ := $(CLD_TARGET_IF_DIR)/mlme/src/target_if_mlme.o
+endif
 
 ifeq ($(CONFIG_POWER_MANAGEMENT_OFFLOAD), y)
-CLD_TARGET_IF_OBJ := $(CLD_TARGET_IF_DIR)/pmo/src/target_if_pmo_arp.o \
+CLD_TARGET_IF_OBJ += $(CLD_TARGET_IF_DIR)/pmo/src/target_if_pmo_arp.o \
 		$(CLD_TARGET_IF_DIR)/pmo/src/target_if_pmo_gtk.o \
 		$(CLD_TARGET_IF_DIR)/pmo/src/target_if_pmo_hw_filter.o \
 		$(CLD_TARGET_IF_DIR)/pmo/src/target_if_pmo_lphb.o \
@@ -3416,6 +3427,7 @@ ccflags-$(CONFIG_FEATURE_WLAN_SCAN_PNO) += -DFEATURE_WLAN_SCAN_PNO
 ccflags-$(CONFIG_WLAN_FEATURE_PACKET_FILTERING) += -DWLAN_FEATURE_PACKET_FILTERING
 ccflags-$(CONFIG_DHCP_SERVER_OFFLOAD) += -DDHCP_SERVER_OFFLOAD
 ccflags-$(CONFIG_WLAN_NS_OFFLOAD) += -DWLAN_NS_OFFLOAD
+ccflags-$(CONFIG_QCA_TARGET_IF_MLME) += -DQCA_TARGET_IF_MLME
 ccflags-$(CONFIG_WLAN_DYNAMIC_ARP_NS_OFFLOAD) += -DFEATURE_WLAN_DYNAMIC_ARP_NS_OFFLOAD
 ccflags-$(CONFIG_WLAN_FEATURE_ICMP_OFFLOAD) += -DWLAN_FEATURE_ICMP_OFFLOAD
 ccflags-$(CONFIG_FEATURE_WLAN_RA_FILTERING) += -DFEATURE_WLAN_RA_FILTERING

+ 4 - 0
Kconfig

@@ -131,6 +131,10 @@ config CP_STATS
 	bool "Enable CP_STATS"
 	default n
 
+config QCA_TARGET_IF_MLME
+	bool "Enable TARGET_IF MLME"
+	default n
+
 config DCS
 	bool "Enable DCS"
 	default n

+ 25 - 0
components/mlme/core/inc/wlan_mlme_main.h

@@ -129,12 +129,24 @@ struct wlan_mlme_rx_ops {
 					     struct peer_oper_mode_event *data);
 };
 
+/**
+ * struct wlan_mlme_tx_ops - structure of mlme tx function pointers
+ * @send_csa_event_status_ind: Tx ops function to send csa event indication
+ *
+ */
+struct wlan_mlme_tx_ops {
+	QDF_STATUS
+		(*send_csa_event_status_ind)(struct wlan_objmgr_vdev *vdev,
+					     uint8_t csa_status);
+};
+
 /**
  * struct wlan_mlme_psoc_ext_obj -MLME ext psoc priv object
  * @cfg:     cfg items
  * @rso_tx_ops: Roam Tx ops to send roam offload commands to firmware
  * @rso_rx_ops: Roam Rx ops to receive roam offload events from firmware
  * @mlme_rx_ops: mlme Rx ops to receive events from firmware
+ * @mlme_tx_ops: mlme tx ops
  * @wfa_testcmd: WFA config tx ops to send to FW
  * @disconnect_stats_param: Peer disconnect stats related params for SAP case
  * @scan_requester_id: mlme scan requester id
@@ -144,6 +156,7 @@ struct wlan_mlme_psoc_ext_obj {
 	struct wlan_cm_roam_tx_ops rso_tx_ops;
 	struct wlan_cm_roam_rx_ops rso_rx_ops;
 	struct wlan_mlme_rx_ops mlme_rx_ops;
+	struct wlan_mlme_tx_ops mlme_tx_ops;
 	struct wlan_mlme_wfa_cmd wfa_testcmd;
 	struct peer_disconnect_stats_param disconnect_stats_param;
 	wlan_scan_requester scan_requester_id;
@@ -1919,4 +1932,16 @@ wlan_mlme_register_common_events(struct wlan_objmgr_psoc *psoc)
 	return QDF_STATUS_SUCCESS;
 }
 #endif
+
+/**
+ * wlan_mlme_send_csa_event_status_ind_cmd() - send csa event status indication
+ * @vdev: vdev obj
+ * @csa_status: csa status
+ *
+ *  Return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_mlme_send_csa_event_status_ind_cmd(struct wlan_objmgr_vdev *vdev,
+					uint8_t csa_status);
+
 #endif

+ 30 - 0
components/mlme/core/src/wlan_mlme_main.c

@@ -5507,3 +5507,33 @@ QDF_STATUS wlan_mlme_register_common_events(struct wlan_objmgr_psoc *psoc)
 	return QDF_STATUS_SUCCESS;
 }
 #endif
+
+QDF_STATUS
+wlan_mlme_send_csa_event_status_ind_cmd(struct wlan_objmgr_vdev *vdev,
+					uint8_t csa_status)
+{
+	struct wlan_objmgr_psoc *psoc;
+	struct  wlan_mlme_tx_ops *tx_ops;
+	mlme_psoc_ext_t *mlme_priv;
+
+	psoc = wlan_vdev_get_psoc(vdev);
+	if (!psoc) {
+		mlme_err("vdev_id %d psoc object is NULL",
+			 wlan_vdev_get_id(vdev));
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	mlme_priv = wlan_psoc_mlme_get_ext_hdl(psoc);
+	if (!mlme_priv)
+		return QDF_STATUS_E_FAILURE;
+
+	tx_ops = &mlme_priv->mlme_tx_ops;
+
+	if (!tx_ops || !tx_ops->send_csa_event_status_ind) {
+		mlme_err("CSA no op defined");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	return tx_ops->send_csa_event_status_ind(vdev, csa_status);
+}
+

+ 4 - 0
components/mlme/core/src/wlan_mlme_vdev_mgr_interface.c

@@ -45,6 +45,7 @@
 #include "wlan_mlo_mgr_sta.h"
 #endif
 #include <wlan_lmac_if_def.h>
+#include "target_if_mlme.h"
 
 static struct vdev_mlme_ops sta_mlme_ops;
 static struct vdev_mlme_ops ap_mlme_ops;
@@ -1962,6 +1963,9 @@ QDF_STATUS psoc_mlme_ext_hdl_create(struct psoc_mlme_obj *psoc_mlme)
 			&psoc_mlme->ext_psoc_ptr->rso_rx_ops);
 	wlan_mlme_register_rx_ops(&psoc_mlme->ext_psoc_ptr->mlme_rx_ops);
 
+	target_if_mlme_register_tx_ops(
+			&psoc_mlme->ext_psoc_ptr->mlme_tx_ops);
+
 	return QDF_STATUS_SUCCESS;
 }
 

+ 11 - 0
components/mlme/dispatcher/inc/wlan_mlme_api.h

@@ -4825,4 +4825,15 @@ wlan_mlme_set_ap_oper_ch_width(struct wlan_objmgr_vdev *vdev,
  */
 enum phy_ch_width
 wlan_mlme_get_ap_oper_ch_width(struct wlan_objmgr_vdev *vdev);
+
+/**
+ * wlan_mlme_send_csa_event_status_ind() - send csa event status ind
+ * @vdev: vdev obj
+ * @csa_status: csa status
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+wlan_mlme_send_csa_event_status_ind(struct wlan_objmgr_vdev *vdev,
+				    uint8_t csa_status);
 #endif /* _WLAN_MLME_API_H_ */

+ 7 - 0
components/mlme/dispatcher/src/wlan_mlme_api.c

@@ -7983,3 +7983,10 @@ wlan_mlme_get_ap_oper_ch_width(struct wlan_objmgr_vdev *vdev)
 
 	return mlme_priv->mlme_ap.oper_ch_width;
 }
+
+QDF_STATUS
+wlan_mlme_send_csa_event_status_ind(struct wlan_objmgr_vdev *vdev,
+				    uint8_t csa_status)
+{
+	return wlan_mlme_send_csa_event_status_ind_cmd(vdev, csa_status);
+}

+ 39 - 0
components/target_if/mlme/inc/target_if_mlme.h

@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 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 above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+/**
+ * DOC: contains mlme target if declarations
+ */
+
+#ifndef _WLAN_MLME_TGT_IF_H_
+#define _WLAN_MLME_TGT_IF_H_
+
+#include "qdf_types.h"
+#include "wlan_mlme_dbg.h"
+#include "wlan_mlme_api.h"
+#include "wlan_mlme_main.h"
+#include "target_if.h"
+
+/**
+ * target_if_mlme_register_tx_ops() - registers mlme tx ops
+ * @tx_ops: tx ops
+ *
+ * Return: none
+ */
+void target_if_mlme_register_tx_ops(struct wlan_mlme_tx_ops *tx_ops);
+
+#endif

+ 74 - 0
components/target_if/mlme/src/target_if_mlme.c

@@ -0,0 +1,74 @@
+/*
+ * Copyright (c) 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 above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+/**
+ * DOC: contains mlme target if declarations
+ */
+
+#include "target_if_mlme.h"
+#include <wmi_unified_mlme_api.h>
+
+static struct wmi_unified
+*target_if_mlme_get_wmi_handle_from_vdev(struct wlan_objmgr_vdev *vdev)
+{
+	struct wlan_objmgr_pdev *pdev;
+	struct wmi_unified *wmi_handle;
+
+	pdev = wlan_vdev_get_pdev(vdev);
+	if (!pdev) {
+		target_if_err("PDEV is NULL");
+		return NULL;
+	}
+
+	wmi_handle = get_wmi_unified_hdl_from_pdev(pdev);
+	if (!wmi_handle) {
+		target_if_err("wmi_handle is null");
+		return NULL;
+	}
+
+	return wmi_handle;
+}
+
+static QDF_STATUS
+target_if_mlme_send_csa_event_status_ind(struct wlan_objmgr_vdev *vdev,
+					 uint8_t csa_status)
+{
+	wmi_unified_t wmi_handle;
+	struct csa_event_status_ind params = {0};
+
+	params.vdev_id = wlan_vdev_get_id(vdev);
+	params.status = csa_status;
+
+	wmi_handle = target_if_mlme_get_wmi_handle_from_vdev(vdev);
+	if (!wmi_handle)
+		return QDF_STATUS_E_FAILURE;
+
+	return wmi_send_csa_event_status_ind(wmi_handle, params);
+}
+
+void
+target_if_mlme_register_tx_ops(struct wlan_mlme_tx_ops *tx_ops)
+{
+	if (!tx_ops) {
+		target_if_err("target if tx ops is NULL!");
+		return;
+	}
+
+	tx_ops->send_csa_event_status_ind =
+		target_if_mlme_send_csa_event_status_ind;
+}
+

+ 45 - 0
components/wmi/inc/wmi_unified_mlme_api.h

@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 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 above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+/**
+ * DOC: contains wmi mlme declarations
+ */
+
+#ifndef _WLAN_UNIFIED_MLME_API_H_
+#define _WLAN_UNIFIED_MLME_API_H_
+
+/*
+ * struct csa_event_status_ind - structure for csa event status ind
+ * @vdev_id: vdev id
+ * @status: accept: 1 reject : 0
+ */
+struct csa_event_status_ind {
+	uint8_t vdev_id;
+	uint8_t status;
+};
+
+/**
+ * wmi_send_csa_event_status_ind
+ * @wmi_hdl: wmi handle
+ * @params: csa params
+ *
+ * Return: QDF_STATUS_SUCCESS on success, QDF_STATUS_E_** on error
+ */
+QDF_STATUS wmi_send_csa_event_status_ind(
+					wmi_unified_t wmi_hdl,
+					struct csa_event_status_ind params);
+#endif

+ 35 - 0
components/wmi/src/wmi_unified_mlme_api.c

@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 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 above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+/**
+ * DOC: contains wmi mlme declarations
+ */
+
+#include <osdep.h>
+#include <wmi.h>
+#include <wmi_unified_priv.h>
+#include <wmi_unified_mlme_api.h>
+
+QDF_STATUS wmi_send_csa_event_status_ind(
+					wmi_unified_t wmi_hdl,
+					struct csa_event_status_ind params)
+{
+	if (wmi_hdl->ops->send_csa_event_status_ind)
+		return wmi_hdl->ops->send_csa_event_status_ind(wmi_hdl, params);
+
+	return QDF_STATUS_E_FAILURE;
+}

+ 68 - 0
components/wmi/src/wmi_unified_mlme_tlv.c

@@ -0,0 +1,68 @@
+/*
+ * Copyright (c) 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 above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ */
+
+/**
+ * DOC: contains wmi mlme declarations
+ */
+
+#include <wmi_unified_priv.h>
+#include "wmi.h"
+#include "wlan_mlme_api.h"
+
+static QDF_STATUS csa_event_status_ind_tlv(wmi_unified_t wmi_handle,
+					   struct csa_event_status_ind params)
+{
+	wmi_csa_event_status_ind_fixed_param *cmd;
+	wmi_buf_t buf;
+	QDF_STATUS status;
+
+	buf = wmi_buf_alloc(wmi_handle, sizeof(*cmd));
+	if (!buf)
+		return QDF_STATUS_E_FAILURE;
+
+	cmd = (wmi_csa_event_status_ind_fixed_param *)wmi_buf_data(buf);
+	WMITLV_SET_HDR(&cmd->tlv_header,
+		       WMITLV_TAG_STRUC_wmi_csa_event_status_ind_fixed_param,
+		       WMITLV_GET_STRUCT_TLVLEN
+		       (wmi_csa_event_status_ind_fixed_param));
+
+	cmd->vdev_id = params.vdev_id;
+	cmd->status = params.status;
+
+	wmi_debug("vdev_id: %d status: %d ", cmd->vdev_id, cmd->status);
+
+	status = wmi_unified_cmd_send(wmi_handle, buf, sizeof(*cmd),
+				      WMI_CSA_EVENT_STATUS_INDICATION_CMDID);
+	if (QDF_IS_STATUS_ERROR(status))
+		wmi_buf_free(buf);
+
+	return status;
+}
+
+/**
+ * wmi_mlme_attach_tlv() - attach MLME tlv handlers
+ * @wmi_handle: wmi handle
+ *
+ * Return: void
+ */
+void wmi_mlme_attach_tlv(wmi_unified_t wmi_handle)
+{
+	struct wmi_ops *ops = wmi_handle->ops;
+
+	ops->send_csa_event_status_ind = csa_event_status_ind_tlv;
+}
+

+ 4 - 0
configs/config_to_feature.h

@@ -356,6 +356,10 @@
 #define WLAN_SUPPORT_INFRA_CTRL_PATH_STATS (1)
 #endif
 
+#ifdef CONFIG_QCA_TARGET_IF_MLME
+#define QCA_TARGET_IF_MLME
+#endif
+
 #ifdef CONFIG_CP_STATS
 #define QCA_SUPPORT_CP_STATS (1)
 #endif

+ 2 - 0
configs/default_defconfig

@@ -1248,6 +1248,8 @@ ifneq ($(CONFIG_WIFI_POS_CONVERGED), y)
 CONFIG_WIFI_POS_LEGACY := y
 endif
 
+CONFIG_QCA_TARGET_IF_MLME := y
+
 CONFIG_CP_STATS := y
 CONFIG_FEATURE_INTEROP_ISSUES_AP := y
 

+ 1 - 0
configs/genoa.common

@@ -67,6 +67,7 @@ CONFIG_FEATURE_HTC_CREDIT_HISTORY := y
 CONFIG_TRACE_RECORD_FEATURE := y
 CONFIG_WLAN_NUD_TRACKING := n
 CONFIG_CP_STATS := y
+CONFIG_QCA_TARGET_IF_MLME := y
 CONFIG_FEATURE_FW_LOG_PARSING := y
 CONFIG_PTT_SOCK_SVC_ENABLE := y
 CONFIG_WMI_INTERFACE_EVENT_LOGGING := y

+ 1 - 0
configs/niobe_gki_kiwi-v2_defconfig

@@ -22,6 +22,7 @@ CONFIG_CNSS_UTILS=y
 CONFIG_CONNECTIVITY_PKTLOG=y
 CONFIG_CONVERGED_P2P_ENABLE=y
 CONFIG_CP_STATS=y
+CONFIG_QCA_TARGET_IF_MLME=y
 CONFIG_DCS=y
 CONFIG_DDP_MON_RSSI_IN_DBM=y
 CONFIG_DEBUG_RX_RING_BUFFER=y

+ 1 - 0
configs/pineapple_gki_kiwi-v2_defconfig

@@ -22,6 +22,7 @@ CONFIG_CNSS_UTILS=y
 CONFIG_CONNECTIVITY_PKTLOG=y
 CONFIG_CONVERGED_P2P_ENABLE=y
 CONFIG_CP_STATS=y
+CONFIG_QCA_TARGET_IF_MLME=y
 CONFIG_DCS=y
 CONFIG_DDP_MON_RSSI_IN_DBM=y
 CONFIG_DEBUG_RX_RING_BUFFER=y

+ 2 - 0
configs/qca6174_defconfig

@@ -569,6 +569,8 @@ endif
 
 CONFIG_CP_STATS := y
 
+CONFIG_QCA_TARGET_IF_MLME := y
+
 CONFIG_FEATURE_WLAN_WAPI := y
 
 CONFIG_AGEIE_ON_SCAN_RESULTS := y

+ 1 - 0
configs/qca6390_defconfig

@@ -631,6 +631,7 @@ CONFIG_WIFI_POS_LEGACY := y
 endif
 
 CONFIG_CP_STATS := y
+CONFIG_QCA_TARGET_IF_MLME := y
 
 #Flag to enable compilation of DCS module
 CONFIG_DCS := y

+ 1 - 0
configs/qcs40x.snoc.perf_defconfig

@@ -94,6 +94,7 @@ CONFIG_TRACE_RECORD_FEATURE := y
 CONFIG_WLAN_FEATURE_P2P_DEBUG := n
 CONFIG_WLAN_NUD_TRACKING := n
 CONFIG_CP_STATS := n
+CONFIG_QCA_TARGET_IF_MLME := y
 CONFIG_FEATURE_FW_LOG_PARSING := y
 CONFIG_PTT_SOCK_SVC_ENABLE := y
 CONFIG_WMI_INTERFACE_EVENT_LOGGING := y

+ 1 - 0
configs/sun_gki_kiwi-v2_defconfig

@@ -22,6 +22,7 @@ CONFIG_CNSS_UTILS=y
 CONFIG_CONNECTIVITY_PKTLOG=y
 CONFIG_CONVERGED_P2P_ENABLE=y
 CONFIG_CP_STATS=y
+CONFIG_QCA_TARGET_IF_MLME=y
 CONFIG_DCS=y
 CONFIG_DDP_MON_RSSI_IN_DBM=y
 CONFIG_DEBUG_RX_RING_BUFFER=y

+ 1 - 0
configs/sun_gki_peach_defconfig

@@ -23,6 +23,7 @@ CONFIG_CNSS_UTILS=y
 CONFIG_CONNECTIVITY_PKTLOG=y
 CONFIG_CONVERGED_P2P_ENABLE=y
 CONFIG_CP_STATS=y
+CONFIG_QCA_TARGET_IF_MLME=y
 CONFIG_DCS=y
 CONFIG_DDP_MON_RSSI_IN_DBM=y
 CONFIG_DEBUG_RX_RING_BUFFER=y

+ 3 - 0
configs/wcn6450_defconfig

@@ -580,6 +580,9 @@ CONFIG_WIFI_POS_LEGACY := y
 endif
 
 CONFIG_CP_STATS := y
+
+CONFIG_QCA_TARGET_IF_MLME := y
+
 CONFIG_FEATURE_INTEROP_ISSUES_AP := y
 
 CONFIG_FEATURE_WLAN_WAPI := y

+ 1 - 0
configs/wear_defconfig

@@ -837,6 +837,7 @@ CONFIG_WIFI_POS_LEGACY := y
 endif
 
 CONFIG_CP_STATS := y
+CONFIG_QCA_TARGET_IF_MLME := y
 CONFIG_FEATURE_INTEROP_ISSUES_AP := y
 
 CONFIG_FEATURE_WLAN_WAPI := y

+ 1 - 0
core/mac/src/pe/lim/lim_send_sme_rsp_messages.c

@@ -2244,6 +2244,7 @@ void lim_handle_sta_csa_param(struct mac_context *mac_ctx,
 	    session_entry->ch_width == lim_ch_switch->ch_width &&
 	    lim_is_puncture_same(lim_ch_switch, session_entry)) {
 		pe_debug("Ignore CSA, no change in ch, bw and puncture");
+		wlan_mlme_send_csa_event_status_ind(session_entry->vdev, 0);
 		goto err;
 	}
 

+ 8 - 0
wlan_qcacld3_modules.bzl

@@ -182,6 +182,7 @@ _fixed_ipaths = [
     "components/coex/core/inc",
     "components/coex/dispatcher/inc",
     "components/cp_stats/dispatcher/inc",
+    "components/target_if/mlme/inc",
     "components/denylist_mgr/core/inc",
     "components/denylist_mgr/dispatcher/inc",
     "components/disa/core/inc",
@@ -703,6 +704,13 @@ _conditional_srcs = {
             "os_if/cp_stats/src/wlan_cfg80211_mc_cp_stats.c",
         ],
     },
+    "CONFIG_QCA_TARGET_IF_MLME": {
+	True: [
+	    "components/target_if/mlme/src/target_if_mlme.c",
+	    "components/wmi/src/wmi_unified_mlme_api.c",
+	    "components/wmi/src/wmi_unified_mlme_tlv.c",
+	],
+    },
     "CONFIG_DCS": {
         True: [
             "cmn/target_if/dcs/src/target_if_dcs.c",