Răsfoiți Sursa

Merge f86b658d0a5c584a20891621aa9ae228775c0f9f on remote branch

Change-Id: I21c5383fcd99d3616f91c19dd51920bb9753696c
Linux Build Service Account 6 luni în urmă
părinte
comite
f5a566817a
69 a modificat fișierele cu 2367 adăugiri și 331 ștergeri
  1. 13 3
      Kbuild
  2. 24 0
      Kconfig
  3. 4 1
      components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c
  4. 5 2
      components/cmn_services/logging/inc/wlan_connectivity_logging.h
  5. 13 6
      components/cmn_services/logging/src/wlan_connectivity_logging.c
  6. 12 0
      components/dp/core/src/wlan_dp_fisa_rx.c
  7. 6 3
      components/dp/core/src/wlan_dp_main.c
  8. 22 9
      components/dp/core/src/wlan_dp_txrx.c
  9. 2 2
      components/pmo/dispatcher/inc/wlan_pmo_mc_addr_filtering_public_struct.h
  10. 21 0
      components/tdls/core/src/wlan_tdls_cmds_process.c
  11. 7 0
      components/tdls/core/src/wlan_tdls_ct.c
  12. 2 2
      components/tdls/core/src/wlan_tdls_main.c
  13. 11 1
      components/tdls/core/src/wlan_tdls_main.h
  14. 44 0
      components/tdls/dispatcher/inc/wlan_tdls_api.h
  15. 67 0
      components/tdls/dispatcher/src/wlan_tdls_api.c
  16. 3 3
      components/tdls/dispatcher/src/wlan_tdls_tgt_api.c
  17. 23 9
      components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c
  18. 13 3
      components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_disconnect.c
  19. 110 3
      components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c
  20. 26 0
      configs/config_to_feature.h
  21. 1 0
      configs/kiwi_defconfig
  22. 1 0
      configs/kiwi_v2_defconfig
  23. 1 0
      configs/mango_defconfig
  24. 1 0
      configs/niobe_gki_kiwi-v2_defconfig
  25. 2 0
      configs/parrot_gki_adrastea_defconfig
  26. 1 0
      configs/peach_defconfig
  27. 34 0
      configs/pineapple_consolidate_peach-v2_defconfig
  28. 1 0
      configs/pineapple_gki_kiwi-v2_defconfig
  29. 399 0
      configs/pineapple_gki_peach-v2_defconfig
  30. 2 0
      configs/pineapple_gki_peach_defconfig
  31. 34 0
      configs/sun_consolidate_peach-v2_defconfig
  32. 1 0
      configs/sun_gki_kiwi-v2_defconfig
  33. 398 0
      configs/sun_gki_peach-v2_defconfig
  34. 1 0
      configs/sun_gki_peach_defconfig
  35. 34 0
      configs/volcano_consolidate_peach-v2_defconfig
  36. 414 0
      configs/volcano_gki_peach-v2_defconfig
  37. 25 0
      core/hdd/inc/wlan_hdd_main.h
  38. 7 1
      core/hdd/src/wlan_hdd_cfg80211.c
  39. 7 3
      core/hdd/src/wlan_hdd_ioctl.c
  40. 56 8
      core/hdd/src/wlan_hdd_main.c
  41. 3 3
      core/hdd/src/wlan_hdd_p2p.c
  42. 5 3
      core/hdd/src/wlan_hdd_regulatory.c
  43. 0 69
      core/hdd/src/wlan_hdd_stats.c
  44. 8 0
      core/hdd/src/wlan_hdd_tdls.c
  45. 3 3
      core/mac/inc/qwlan_version.h
  46. 1 10
      core/mac/inc/sir_api.h
  47. 47 1
      core/mac/src/dph/dph_hash_table.c
  48. 19 1
      core/mac/src/dph/dph_hash_table.h
  49. 15 9
      core/mac/src/pe/lim/lim_api.c
  50. 85 1
      core/mac/src/pe/lim/lim_assoc_utils.c
  51. 15 0
      core/mac/src/pe/lim/lim_assoc_utils.h
  52. 18 2
      core/mac/src/pe/lim/lim_process_action_frame.c
  53. 20 18
      core/mac/src/pe/lim/lim_process_assoc_req_frame.c
  54. 2 1
      core/mac/src/pe/lim/lim_process_message_queue.c
  55. 0 11
      core/mac/src/pe/lim/lim_process_mlm_req_messages.c
  56. 8 2
      core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c
  57. 55 5
      core/mac/src/pe/lim/lim_process_sme_req_messages.c
  58. 110 61
      core/mac/src/pe/lim/lim_process_tdls.c
  59. 4 21
      core/mac/src/pe/lim/lim_scan_result_utils.c
  60. 23 7
      core/mac/src/pe/lim/lim_send_management_frames.c
  61. 4 3
      core/mac/src/pe/lim/lim_send_sme_rsp_messages.c
  62. 2 0
      core/mac/src/pe/lim/lim_send_sme_rsp_messages.h
  63. 27 3
      core/mac/src/pe/lim/lim_types.h
  64. 10 2
      core/mac/src/pe/lim/lim_utils.c
  65. 3 1
      core/mac/src/pe/lim/lim_utils.h
  66. 1 1
      core/mac/src/pe/rrm/rrm_api.c
  67. 9 24
      core/mac/src/sys/legacy/src/utils/src/parser_api.c
  68. 3 3
      core/sme/src/common/sme_api.c
  69. 19 7
      wlan_qcacld3_modules.bzl

+ 13 - 3
Kbuild

@@ -3009,11 +3009,14 @@ HAL_OBJS +=	$(WLAN_COMMON_ROOT)/$(HAL_DIR)/wifi3.0/be/hal_be_generic_api.o
 
 HAL_OBJS +=	$(WLAN_COMMON_ROOT)/$(HAL_DIR)/wifi3.0/be/hal_be_reo.o \
 
-ifeq (y,$(findstring y,$(CONFIG_CNSS_KIWI) $(CONFIG_CNSS_KIWI_V2) $(CONFIG_CNSS_PEACH)))
+ifeq (y,$(findstring y,$(CONFIG_INCLUDE_HAL_PEACH)))
+HAL_INC += -I$(WLAN_COMMON_INC)/$(HAL_DIR)/wifi3.0/peach
+HAL_OBJS += $(WLAN_COMMON_ROOT)/$(HAL_DIR)/wifi3.0/peach/hal_peach.o
+ccflags-y += -DINCLUDE_HAL_PEACH
+else ifeq (y,$(findstring y,$(CONFIG_INCLUDE_HAL_KIWI)))
 HAL_INC += -I$(WLAN_COMMON_INC)/$(HAL_DIR)/wifi3.0/kiwi
 HAL_OBJS += $(WLAN_COMMON_ROOT)/$(HAL_DIR)/wifi3.0/kiwi/hal_kiwi.o
-else
-#error "Not Beryllium"
+ccflags-y += -DINCLUDE_HAL_KIWI
 endif
 
 endif #### CONFIG_BERYLLIUM ####
@@ -4696,6 +4699,13 @@ CONFIG_WLAN_MAX_ML_BSS_LINKS ?= 1
 endif
 ccflags-y += -DWLAN_MAX_ML_BSS_LINKS=$(CONFIG_WLAN_MAX_ML_BSS_LINKS)
 
+ifdef CONFIG_WLAN_FEATURE_EMLSR
+CONFIG_WLAN_EMLSR_ENABLE ?= 1
+else
+CONFIG_WLAN_EMLSR_ENABLE ?= 0
+endif
+ccflags-y += -DWLAN_EMLSR_ENABLE=$(CONFIG_WLAN_EMLSR_ENABLE)
+
 #Maximum pending commands for a vdev is calculated in vdev create handler
 #by WLAN_SER_MAX_PENDING_CMDS/WLAN_SER_MAX_VDEVS. For SAP case, we will need
 #to accommodate 32 Pending commands to handle multiple STA sending

+ 24 - 0
Kconfig

@@ -120,6 +120,18 @@ config CNSS_PEACH
 	bool "Enable CNSS_PEACH"
 	default n
 
+config CNSS_PEACH_V2
+	bool "Enable CNSS_PEACH_V2"
+	default n
+
+config INCLUDE_HAL_KIWI
+	bool "Enable INCLUDE_HAL_KIWI"
+	default n
+
+config INCLUDE_HAL_PEACH
+	bool "Enable INCLUDE_HAL_PEACH"
+	default n
+
 config CNSS_UTILS_MODULE
 	bool "Enable CNSS_UTILS_MODULE"
 	default n
@@ -2027,6 +2039,10 @@ config CNSS_ADRASTEA
         bool "Enable CNSS_ADRASTEA"
         default n
 
+config WLAN_FEATURE_EMLSR
+	bool "Enable EMLSR feature"
+	default n
+
 if CNSS_KIWI_V2
 config CFG_BMISS_OFFLOAD_MAX_VDEV
 	int "Enable CFG_BMISS_OFFLOAD_MAX_VDEV"
@@ -2129,4 +2145,12 @@ config WLAN_FASTPATH_LEGACY
 config QCA_SUPPORT_TX_THROTTLE_LEGACY
 	bool "Enable QCA_SUPPORT_TX_THROTTLE_LEGACY"
 	default n
+
+config PLD_SNOC_ICNSS_FLAG
+	bool "Enable PLD_SNOC_ICNSS_FLAG"
+	default n
+
+config ICNSS2_HELIUM
+	bool "Enable ICNSS2_HELIUM"
+	default n
 endif # QCA_CLD_WLAN

+ 4 - 1
components/cmn_services/interface_mgr/src/wlan_if_mgr_sta.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 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
@@ -216,6 +216,9 @@ QDF_STATUS if_mgr_disconnect_start(struct wlan_objmgr_vdev *vdev,
 
 	qdf_runtime_pm_prevent_suspend(&mlme_priv->disconnect_runtime_lock);
 
+	if (mlo_mgr_is_link_switch_in_progress(vdev))
+		wlan_tdls_delete_all_peers(vdev);
+
 	return QDF_STATUS_SUCCESS;
 }
 

+ 5 - 2
components/cmn_services/logging/inc/wlan_connectivity_logging.h

@@ -1315,10 +1315,12 @@ wlan_connectivity_mlo_reconfig_event(struct wlan_objmgr_vdev *vdev);
 /**
  * wlan_connectivity_mlo_setup_event() - Fill and send MLO setup data
  * @vdev: vdev pointer
+ * @is_band_present: If Band is present(Associated link band is shared by FW)
  *
  * Return: None
  */
-void wlan_connectivity_mlo_setup_event(struct wlan_objmgr_vdev *vdev);
+void wlan_connectivity_mlo_setup_event(struct wlan_objmgr_vdev *vdev,
+				       bool is_band_present);
 
 /**
  * wlan_connectivity_t2lm_req_resp_event - API to send t2lm Req/resp
@@ -1382,7 +1384,8 @@ wlan_connectivity_mlo_reconfig_event(struct wlan_objmgr_vdev *vdev)
 }
 
 static inline void
-wlan_connectivity_mlo_setup_event(struct wlan_objmgr_vdev *vdev)
+wlan_connectivity_mlo_setup_event(struct wlan_objmgr_vdev *vdev,
+				  bool is_band_present)
 {
 }
 

+ 13 - 6
components/cmn_services/logging/src/wlan_connectivity_logging.c

@@ -596,9 +596,6 @@ wlan_populate_roam_mld_log_param(struct wlan_objmgr_vdev *vdev,
 	struct wlan_objmgr_pdev *pdev;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 
-	if (!mlo_is_mld_sta(vdev))
-		return status;
-
 	pdev = wlan_vdev_get_pdev(vdev);
 	if (!pdev)
 		return QDF_STATUS_E_INVAL;
@@ -636,7 +633,8 @@ wlan_convert_freq_to_diag_band(uint16_t ch_freq)
 #define REJECTED_LINK_STATUS 1
 
 void
-wlan_connectivity_mlo_setup_event(struct wlan_objmgr_vdev *vdev)
+wlan_connectivity_mlo_setup_event(struct wlan_objmgr_vdev *vdev,
+				  bool is_band_present)
 {
 	uint i = 0;
 	struct mlo_link_switch_context *link_ctx = NULL;
@@ -646,7 +644,16 @@ wlan_connectivity_mlo_setup_event(struct wlan_objmgr_vdev *vdev)
 	WLAN_HOST_DIAG_EVENT_DEF(wlan_diag_event,
 				 struct wlan_diag_mlo_setup);
 
-	if (!mlo_is_mld_sta(vdev))
+	/*
+	 * MLO setup event need to be logged in the following cases:
+	 *
+	 * 1. When connection request is initiated and the ML
+	 *    candidate is selected.
+	 * 2. When roamed successfully to ML AP
+	 *
+	 */
+	if ((wlan_cm_is_vdev_connecting(vdev) && !mlo_is_mld_sta(vdev)) ||
+	    (wlan_cm_is_vdev_active(vdev) && !is_band_present))
 		return;
 
 	qdf_mem_zero(&wlan_diag_event, sizeof(struct wlan_diag_mlo_setup));
@@ -1015,7 +1022,7 @@ wlan_connectivity_mgmt_event(struct wlan_objmgr_psoc *psoc,
 	WLAN_HOST_DIAG_EVENT_REPORT(&wlan_diag_event, EVENT_WLAN_MGMT);
 
 	if (tag == WLAN_ASSOC_RSP || tag == WLAN_REASSOC_RSP)
-		wlan_connectivity_mlo_setup_event(vdev);
+		wlan_connectivity_mlo_setup_event(vdev, false);
 
 out:
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_OBJMGR_ID);

+ 12 - 0
components/dp/core/src/wlan_dp_fisa_rx.c

@@ -1807,6 +1807,11 @@ static bool dp_fisa_aggregation_should_stop(
 	uint32_t l3_hdr_offset, l4_hdr_offset, l2_l3_hdr_len;
 	uint32_t cumulative_ip_len_delta = hal_cumulative_ip_len -
 					   fisa_flow->hal_cumultive_ip_len;
+	uint32_t ip_csum_err = 0;
+	uint32_t tcp_udp_csum_err = 0;
+
+	hal_rx_tlv_csum_err_get(fisa_flow->dp_ctx->hal_soc, rx_tlv_hdr,
+				&ip_csum_err, &tcp_udp_csum_err);
 
 	hal_rx_get_l3_l4_offsets(fisa_flow->dp_ctx->hal_soc, rx_tlv_hdr,
 				 &l3_hdr_offset, &l4_hdr_offset);
@@ -1814,6 +1819,12 @@ static bool dp_fisa_aggregation_should_stop(
 	l2_l3_hdr_len = l3_hdr_offset + l4_hdr_offset;
 
 	/**
+	 * If l3/l4 checksum validation failed for MSDU, then data
+	 * is not trust worthy to build aggregated skb, so do not
+	 * allow for aggregation. And also in aggregated case it
+	 * is job of driver to make sure checksum is valid before
+	 * computing partial checksum for final aggregated skb.
+	 *
 	 * kernel network panic if UDP data length < 12 bytes get aggregated,
 	 * no solid conclusion currently, as a SW WAR, only allow UDP
 	 * aggregation if UDP data length >= 16 bytes.
@@ -1826,6 +1837,7 @@ static bool dp_fisa_aggregation_should_stop(
 	 * otherwise, current fisa flow aggregation should be stopped.
 	 */
 	if (fisa_flow->do_not_aggregate ||
+	    (ip_csum_err || tcp_udp_csum_err) ||
 	    msdu_len < (l2_l3_hdr_len + FISA_MIN_L4_AND_DATA_LEN) ||
 	    hal_cumulative_ip_len <= fisa_flow->hal_cumultive_ip_len ||
 	    cumulative_ip_len_delta > FISA_MAX_SINGLE_CUMULATIVE_IP_LEN ||

+ 6 - 3
components/dp/core/src/wlan_dp_main.c

@@ -2028,7 +2028,6 @@ void wlan_dp_link_cdp_vdev_delete_notification(void *context)
 {
 	struct wlan_dp_link *dp_link = (struct wlan_dp_link *)context;
 	struct wlan_dp_link *tmp_dp_link;
-	struct wlan_dp_intf *dp_intf = NULL;
 	struct wlan_dp_psoc_context *dp_ctx = NULL;
 	uint8_t found = 0;
 
@@ -2039,8 +2038,7 @@ void wlan_dp_link_cdp_vdev_delete_notification(void *context)
 	}
 
 	dp_info("dp_link %pK id %d", dp_link, dp_link->link_id);
-	dp_intf = dp_link->dp_intf;
-	dp_ctx = dp_intf->dp_ctx;
+	dp_ctx = dp_get_context();
 
 	qdf_spin_lock_bh(&dp_ctx->dp_link_del_lock);
 
@@ -2220,8 +2218,13 @@ err_soc_detach:
 
 void wlan_dp_txrx_soc_detach(ol_txrx_soc_handle soc)
 {
+	struct wlan_dp_psoc_context *dp_ctx = dp_get_context();
+
 	cdp_soc_deinit(soc);
 	cdp_soc_detach(soc);
+
+	if (dp_ctx)
+		dp_ctx->cdp_soc = NULL;
 }
 
 QDF_STATUS wlan_dp_txrx_attach_target(ol_txrx_soc_handle soc, uint8_t pdev_id)

+ 22 - 9
components/dp/core/src/wlan_dp_txrx.c

@@ -932,19 +932,24 @@ void dp_rx_monitor_callback(ol_osif_vdev_handle context,
 /**
  * dp_is_rx_wake_lock_needed() - check if wake lock is needed
  * @nbuf: pointer to sk_buff
+ * @is_arp_req: ARP request packet
  *
  * RX wake lock is needed for:
- * 1) Unicast data packet OR
- * 2) Local ARP data packet
+ * 1) Local ARP data packet
+ * 2) Unicast data packet
  *
  * Return: true if wake lock is needed or false otherwise.
  */
-static bool dp_is_rx_wake_lock_needed(qdf_nbuf_t nbuf)
+static bool dp_is_rx_wake_lock_needed(qdf_nbuf_t nbuf, bool is_arp_req)
 {
-	if ((!qdf_nbuf_pkt_type_is_mcast(nbuf) &&
-	     !qdf_nbuf_pkt_type_is_bcast(nbuf)) ||
-	    qdf_nbuf_is_arp_local(nbuf))
+	/* Take wake lock for local ARP request packet */
+	if (qdf_unlikely(is_arp_req)) {
+		if (qdf_nbuf_is_arp_local(nbuf))
+			return true;
+	} else if (qdf_likely(!qdf_nbuf_pkt_type_is_mcast(nbuf) &&
+			      !qdf_nbuf_pkt_type_is_bcast(nbuf))) {
 		return true;
+	}
 
 	return false;
 }
@@ -1661,9 +1666,10 @@ QDF_STATUS dp_rx_packet_cbk(void *dp_link_context,
 	struct qdf_mac_addr *mac_addr, *dest_mac_addr;
 	bool wake_lock = false;
 	bool track_arp = false;
+	bool is_arp_req;
 	enum qdf_proto_subtype subtype = QDF_PROTO_INVALID;
 	bool is_eapol, send_over_nl;
-	bool is_dhcp;
+	bool is_dhcp, is_ip_mcast;
 	struct dp_tx_rx_stats *stats;
 	QDF_STATUS status;
 	uint8_t pkt_type;
@@ -1687,8 +1693,10 @@ QDF_STATUS dp_rx_packet_cbk(void *dp_link_context,
 		nbuf = next;
 		next = qdf_nbuf_next(nbuf);
 		qdf_nbuf_set_next(nbuf, NULL);
+		is_arp_req = false;
 		is_eapol = false;
 		is_dhcp = false;
+		is_ip_mcast = false;
 		send_over_nl = false;
 
 		if (qdf_nbuf_is_ipv4_arp_pkt(nbuf)) {
@@ -1699,6 +1707,8 @@ QDF_STATUS dp_rx_packet_cbk(void *dp_link_context,
 					rx_arp_rsp_count;
 				dp_debug("ARP packet received");
 				track_arp = true;
+			} else if (qdf_nbuf_data_is_arp_req(nbuf)) {
+				is_arp_req = true;
 			}
 		} else if (qdf_nbuf_is_ipv4_eapol_pkt(nbuf)) {
 			subtype = qdf_nbuf_get_eapol_subtype(nbuf);
@@ -1726,6 +1736,9 @@ QDF_STATUS dp_rx_packet_cbk(void *dp_link_context,
 						dhcp_ack_count;
 				is_dhcp = true;
 			}
+		} else if (qdf_nbuf_data_is_ipv4_mcast_pkt(nbuf->data) ||
+			   qdf_nbuf_data_is_ipv6_mcast_pkt(nbuf->data)) {
+			is_ip_mcast = true;
 		}
 
 		wlan_dp_pkt_add_timestamp(dp_intf, QDF_PKT_RX_DRIVER_EXIT,
@@ -1803,8 +1816,8 @@ QDF_STATUS dp_rx_packet_cbk(void *dp_link_context,
 		/* hold configurable wakelock for unicast traffic */
 		if (!dp_is_current_high_throughput(dp_ctx) &&
 		    dp_ctx->dp_cfg.rx_wakelock_timeout &&
-		    dp_link->conn_info.is_authenticated)
-			wake_lock = dp_is_rx_wake_lock_needed(nbuf);
+		    dp_link->conn_info.is_authenticated && !is_ip_mcast)
+			wake_lock = dp_is_rx_wake_lock_needed(nbuf, is_arp_req);
 
 		if (wake_lock) {
 			cds_host_diag_log_work(&dp_ctx->rx_wake_lock,

+ 2 - 2
components/pmo/dispatcher/inc/wlan_pmo_mc_addr_filtering_public_struct.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017 The Linux Foundation. All rights reserved.
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2023-2024 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
@@ -42,7 +42,7 @@
 struct pmo_mc_addr_list_params {
 	struct wlan_objmgr_psoc *psoc;
 	uint8_t vdev_id;
-	uint8_t count;
+	int count;
 	struct qdf_mac_addr mc_addr[PMO_MAX_MC_ADDR_LIST];
 };
 

+ 21 - 0
components/tdls/core/src/wlan_tdls_cmds_process.c

@@ -40,6 +40,7 @@
 #include "nan_ucfg_api.h"
 #include "wlan_mlme_main.h"
 #include "wlan_policy_mgr_i.h"
+#include "wlan_mlo_mgr_link_switch.h"
 
 static uint16_t tdls_get_connected_peer_count(struct tdls_soc_priv_obj *soc_obj)
 {
@@ -890,6 +891,12 @@ int tdls_validate_mgmt_request(struct tdls_action_frame_request *tdls_mgmt_req)
 		return -EAGAIN;
 	}
 
+	if (mlo_mgr_is_link_switch_in_progress(vdev)) {
+		tdls_notice("vdev:%d Link Switch in progress. TDLS is not allowed",
+			    wlan_vdev_get_id(vdev));
+		return -EAGAIN;
+	}
+
 	/* other than teardown frame, mgmt frames are not sent if disabled */
 	if (TDLS_TEARDOWN != tdls_validate->action_code) {
 		if (!tdls_check_is_tdls_allowed(vdev)) {
@@ -897,6 +904,7 @@ int tdls_validate_mgmt_request(struct tdls_action_frame_request *tdls_mgmt_req)
 				tdls_validate->action_code);
 			return -EPERM;
 		}
+
 		/* if tdls_mode is disabled, then decline the peer's request */
 		if (TDLS_SUPPORT_DISABLED == tdls_soc->tdls_current_mode ||
 		    TDLS_SUPPORT_SUSPENDED == tdls_soc->tdls_current_mode) {
@@ -1033,6 +1041,12 @@ QDF_STATUS tdls_process_add_peer(struct tdls_add_peer_request *req)
 		goto error;
 	}
 
+	if (mlo_mgr_is_link_switch_in_progress(vdev)) {
+		tdls_err("Link Switch in progress, reject add sta for vdev: %d",
+			 wlan_vdev_get_id(vdev));
+		goto error;
+	}
+
 	psoc = wlan_vdev_get_psoc(vdev);
 	if (!psoc) {
 		tdls_err("can't get psoc");
@@ -2075,6 +2089,13 @@ QDF_STATUS tdls_process_setup_peer(struct tdls_oper_request *req)
 		goto error;
 	}
 
+	if (mlo_mgr_is_link_switch_in_progress(vdev)) {
+		tdls_err("TDLS not allowed on vdev:%d, Link switch in progress",
+			 wlan_vdev_get_id(vdev));
+		status = QDF_STATUS_E_INVAL;
+		goto error;
+	}
+
 	tdls_debug("vdev:%d Configure external TDLS peer " QDF_MAC_ADDR_FMT,
 		   wlan_vdev_get_id(vdev),
 		   QDF_MAC_ADDR_REF(req->peer_addr));

+ 7 - 0
components/tdls/core/src/wlan_tdls_ct.c

@@ -32,6 +32,7 @@
 #include "wlan_reg_services_api.h"
 #include "wlan_policy_mgr_api.h"
 #include "wlan_tdls_tgt_api.h"
+#include "wlan_mlo_mgr_link_switch.h"
 
 bool tdls_is_vdev_authenticated(struct wlan_objmgr_vdev *vdev)
 {
@@ -494,6 +495,12 @@ tdls_implicit_send_discovery_request(struct tdls_vdev_priv_obj *tdls_vdev_obj)
 		return;
 	}
 
+	if (mlo_mgr_is_link_switch_in_progress(tdls_vdev_obj->vdev)) {
+		tdls_notice("vdev:%d Link Switch in progress. TDLS discovery not allowed",
+			    wlan_vdev_get_id(tdls_vdev_obj->vdev));
+		return;
+	}
+
 	curr_peer = tdls_vdev_obj->curr_candidate;
 
 	if (!curr_peer) {

+ 2 - 2
components/tdls/core/src/wlan_tdls_main.c

@@ -1651,8 +1651,8 @@ tdls_process_sta_disconnect(struct tdls_sta_notify_params *notify)
 	if (notify->user_disconnect)
 		return tdls_delete_all_tdls_peers(notify->vdev, tdls_soc_obj);
 
-	tdls_debug("Check and update TDLS state for vdev:%d",
-		   notify->session_id);
+	tdls_debug("vdev:%d Disable TDLS peer_count:%d",
+		   notify->session_id, tdls_soc_obj->connected_peer_count);
 
 	/* Disassociation event */
 	tdls_send_update_to_fw(tdls_vdev_obj, tdls_soc_obj, false,

+ 11 - 1
components/tdls/core/src/wlan_tdls_main.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022-2024 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
@@ -141,6 +141,14 @@ struct tdls_set_state_info {
 	uint8_t vdev_id;
 };
 
+/**
+ * struct tdls_callbacks - vdev id state info
+ * @delete_all_tdls_peers: Callback to lim to delete TDLS peers
+ */
+struct tdls_callbacks {
+	QDF_STATUS (*delete_all_tdls_peers) (struct wlan_objmgr_vdev *vdev);
+};
+
 /**
  * struct tdls_soc_priv_obj - tdls soc private context
  * @soc: objmgr psoc
@@ -198,6 +206,7 @@ struct tdls_set_state_info {
  * @timer_cnt: used for mlo tdls to monitor discovery response
  * @fw_tdls_wideband_capability: bool for tdls wideband fw capability
  * @is_user_tdls_enable: bool to check whether TDLS enable through userspace
+ * @tdls_cb: TDLS callbacks to other modules
  */
 struct tdls_soc_priv_obj {
 	struct wlan_objmgr_psoc *soc;
@@ -258,6 +267,7 @@ struct tdls_soc_priv_obj {
 	qdf_atomic_t timer_cnt;
 	bool fw_tdls_wideband_capability;
 	bool is_user_tdls_enable;
+	struct tdls_callbacks tdls_cb;
 };
 
 /**

+ 44 - 0
components/tdls/dispatcher/inc/wlan_tdls_api.h

@@ -24,6 +24,7 @@
 #include "wlan_objmgr_psoc_obj.h"
 #include "wlan_objmgr_pdev_obj.h"
 #include "wlan_objmgr_vdev_obj.h"
+#include "wlan_tdls_main.h"
 
 #ifdef FEATURE_WLAN_TDLS
 #ifdef WLAN_FEATURE_11BE_MLO
@@ -54,6 +55,16 @@ void wlan_tdls_get_features_info(struct wlan_objmgr_psoc *psoc,
 				 struct wlan_tdls_features *tdls_feature_set);
 #endif
 
+/**
+ * wlan_tdls_register_lim_callbacks() - Register callbacks for legacy LIM API
+ * @psoc: Pointer to psoc object
+ * @cbs: Pointer to callback struct
+ *
+ * Return: None
+ */
+void wlan_tdls_register_lim_callbacks(struct wlan_objmgr_psoc *psoc,
+				      struct tdls_callbacks *cbs);
+
 /**
  * wlan_tdls_teardown_links() - notify TDLS module to teardown all TDLS links
  * @psoc: psoc object
@@ -215,8 +226,30 @@ void wlan_tdls_handle_p2p_client_connect(struct wlan_objmgr_psoc *psoc,
 void wlan_tdls_increment_discovery_attempts(struct wlan_objmgr_psoc *psoc,
 					    uint8_t vdev_id,
 					    uint8_t *peer_addr);
+/**
+ * wlan_tdls_is_addba_request_allowed() - API to check if Add Block ack request
+ * is allowed for TDLS peer in current state.
+ * @vdev: Vdev object pointer
+ * @mac_addr: Mac address of the peer
+ *
+ * Return: True if ADDBA frame can be allowed
+ */
+bool wlan_tdls_is_addba_request_allowed(struct wlan_objmgr_vdev *vdev,
+					struct qdf_mac_addr *mac_addr);
+/*
+ * wlan_tdls_delete_all_peers() - Delete all TDLS peers in lim
+ * @vdev: Pointer to vdev object
+ *
+ * Return: None
+ */
+void wlan_tdls_delete_all_peers(struct wlan_objmgr_vdev *vdev);
 #else
 
+static inline
+void wlan_tdls_register_lim_callbacks(struct wlan_objmgr_psoc *psoc,
+				      struct tdls_callbacks *cbs)
+{}
+
 #ifdef FEATURE_SET
 static inline
 void wlan_tdls_get_features_info(struct wlan_objmgr_psoc *psoc,
@@ -295,5 +328,16 @@ void wlan_tdls_increment_discovery_attempts(struct wlan_objmgr_psoc *psoc,
 					    uint8_t vdev_id,
 					    uint8_t *peer_addr)
 {}
+
+static inline
+bool wlan_tdls_is_addba_request_allowed(struct wlan_objmgr_vdev *vdev,
+					struct qdf_mac_addr *mac_addr)
+{
+	return false;
+}
+
+static inline
+void wlan_tdls_delete_all_peers(struct wlan_objmgr_vdev *vdev)
+{}
 #endif
 #endif

+ 67 - 0
components/tdls/dispatcher/src/wlan_tdls_api.c

@@ -33,6 +33,21 @@
 #include "wlan_policy_mgr_api.h"
 #include "wlan_mlo_mgr_sta.h"
 
+void wlan_tdls_register_lim_callbacks(struct wlan_objmgr_psoc *psoc,
+				      struct tdls_callbacks *cbs)
+{
+	struct tdls_soc_priv_obj *soc_obj;
+
+	soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
+							WLAN_UMAC_COMP_TDLS);
+	if (!soc_obj) {
+		tdls_err("Failed to get tdls psoc component");
+		return;
+	}
+
+	soc_obj->tdls_cb.delete_all_tdls_peers = cbs->delete_all_tdls_peers;
+}
+
 static QDF_STATUS tdls_teardown_flush_cb(struct scheduler_msg *msg)
 {
 	struct tdls_link_teardown *tdls_teardown = msg->bodyptr;
@@ -552,3 +567,55 @@ void wlan_tdls_increment_discovery_attempts(struct wlan_objmgr_psoc *psoc,
 
 	wlan_objmgr_vdev_release_ref(vdev, WLAN_TDLS_NB_ID);
 }
+
+static
+struct tdls_peer *wlan_tdls_find_peer(struct tdls_vdev_priv_obj *vdev_obj,
+				      const uint8_t *macaddr)
+{
+	return tdls_find_peer(vdev_obj, macaddr);
+}
+
+bool wlan_tdls_is_addba_request_allowed(struct wlan_objmgr_vdev *vdev,
+					struct qdf_mac_addr *mac_addr)
+{
+	struct tdls_vdev_priv_obj *vdev_obj;
+	struct tdls_peer *curr_peer;
+
+	vdev_obj = wlan_vdev_get_tdls_vdev_obj(vdev);
+	if (!vdev_obj) {
+		tdls_err("vdev_obj: %pK is null", vdev_obj);
+		return false;
+	}
+
+	curr_peer = wlan_tdls_find_peer(vdev_obj, mac_addr->bytes);
+	if (!curr_peer) {
+		tdls_err("tdls peer is null");
+		return false;
+	}
+
+	if (curr_peer->valid_entry &&
+	    curr_peer->link_status ==  TDLS_LINK_CONNECTED)
+		return true;
+
+	return false;
+}
+
+void wlan_tdls_delete_all_peers(struct wlan_objmgr_vdev *vdev)
+{
+	struct wlan_objmgr_psoc *psoc;
+	struct tdls_soc_priv_obj *soc_obj;
+
+	psoc = wlan_vdev_get_psoc(vdev);
+	if (!psoc)
+		return;
+
+	soc_obj = wlan_objmgr_psoc_get_comp_private_obj(psoc,
+							WLAN_UMAC_COMP_TDLS);
+	if (!soc_obj) {
+		tdls_err("Failed to get tdls psoc component");
+		return;
+	}
+
+	if (soc_obj->tdls_cb.delete_all_tdls_peers)
+		soc_obj->tdls_cb.delete_all_tdls_peers(vdev);
+}

+ 3 - 3
components/tdls/dispatcher/src/wlan_tdls_tgt_api.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2017-2020 The Linux Foundation. All rights reserved.
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2023-2024 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
@@ -144,8 +144,8 @@ QDF_STATUS tgt_tdls_register_ev_handler(struct wlan_objmgr_psoc *psoc)
 	tdls_ops = wlan_psoc_get_tdls_txops(psoc);
 	if (tdls_ops && tdls_ops->tdls_reg_ev_handler)
 		return tdls_ops->tdls_reg_ev_handler(psoc, NULL);
-	else
-		return QDF_STATUS_SUCCESS;
+
+	return QDF_STATUS_SUCCESS;
 }
 
 QDF_STATUS tgt_tdls_unregister_ev_handler(struct wlan_objmgr_psoc *psoc)

+ 23 - 9
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -7260,6 +7260,7 @@ cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev,
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	uint8_t i;
 	uint16_t diag_event;
+	bool is_mlo = false;
 
 	WLAN_HOST_DIAG_EVENT_DEF(wlan_diag_event, struct wlan_diag_packet_info);
 
@@ -7313,16 +7314,29 @@ cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev,
 						 !frame_data->is_rsp);
 		diag_event = EVENT_WLAN_MGMT;
 
-		status = wlan_populate_roam_mld_log_param(vdev,
-							  &wlan_diag_event,
-							  wlan_diag_event.subtype);
-		if (QDF_IS_STATUS_ERROR(status)) {
-			mlme_err("vdev: %d Unable to populate MLO parameter",
-				 wlan_vdev_get_id(vdev));
-			return status;
+		wlan_diag_event.supported_links = frame_data->band;
+
+		/*
+		 * Frame_data->band will be '0' for legacy connection and
+		 * And will be band bit map for MLO connection where band bitmap
+		 * as follows:
+		 * BIT 0: 2 GHz link
+		 * BIT 1: 5 GHz link
+		 * BIT 2: 6 GHz link
+		 */
+		if (frame_data->band) {
+			is_mlo = true;
+			status =
+			wlan_populate_roam_mld_log_param(vdev,
+							 &wlan_diag_event,
+							 wlan_diag_event.subtype);
+			if (QDF_IS_STATUS_ERROR(status)) {
+				mlme_err("vdev: %d Unable to populate MLO parameter",
+					 wlan_vdev_get_id(vdev));
+				return status;
+			}
 		}
 
-		wlan_diag_event.supported_links = frame_data->band;
 	}
 
 	if (wlan_diag_event.subtype > WLAN_CONN_DIAG_REASSOC_RESP_EVENT &&
@@ -7336,7 +7350,7 @@ cm_roam_mgmt_frame_event(struct wlan_objmgr_vdev *vdev,
 	WLAN_HOST_DIAG_EVENT_REPORT(&wlan_diag_event, diag_event);
 	if (wlan_diag_event.subtype == WLAN_CONN_DIAG_REASSOC_RESP_EVENT ||
 	    wlan_diag_event.subtype == WLAN_CONN_DIAG_ASSOC_RESP_EVENT) {
-		wlan_connectivity_mlo_setup_event(vdev);
+		wlan_connectivity_mlo_setup_event(vdev, is_mlo);
 
 		/*
 		 * Send STA info event when roaming is successful

+ 13 - 3
components/umac/mlme/connection_mgr/core/src/wlan_cm_vdev_disconnect.c

@@ -90,11 +90,21 @@ QDF_STATUS cm_disconnect_start_ind(struct wlan_objmgr_vdev *vdev,
 	user_disconnect =
 		(req->source == CM_OSIF_DISCONNECT ||
 		 req->source == CM_MLO_LINK_SWITCH_DISCONNECT) ? true : false;
-	if (user_disconnect) {
+	if (user_disconnect)
 		wlan_p2p_cleanup_roc_by_vdev(vdev, false);
+
+	/*
+	 * For link switch disconnect avoid posting msg to PE to
+	 * delete all the TDLS peers since pe_session can get deleted before
+	 * TDLS msg is processed, causing the TDLS peers to be not deleted.
+	 * The AID bitmap also gets cleared during pe_session deletion,
+	 * so during subsequent disconnects also to not deleted the TDLS peers
+	 * TODO: Move all TDLS peers deletion logic from IF_MGR to be symmetric
+	 */
+	if (req->source == CM_OSIF_DISCONNECT)
 		wlan_tdls_notify_sta_disconnect(req->vdev_id, false,
-						user_disconnect, vdev);
-	}
+						true, vdev);
+
 	cm_abort_connect_request_timers(vdev);
 
 	if (req->source != CM_MLO_ROAM_INTERNAL_DISCONNECT &&

+ 110 - 3
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c

@@ -2414,11 +2414,117 @@ QDF_STATUS wlan_cm_set_btm_config(struct wlan_objmgr_psoc *psoc,
 					  &src_config);
 }
 
+static QDF_STATUS
+cm_roam_refine_channels(struct wlan_objmgr_vdev *vdev,
+			struct rso_config *rso_cfg,
+			struct wlan_roam_scan_channel_list *chan_info,
+			struct rso_chan_info *cached_chan_info)
+{
+	struct rso_chan_info temp_chan_info = {0}, computed_chan_info = {0};
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+	uint32_t i;
+
+	temp_chan_info.num_chan = cached_chan_info->num_chan;
+	computed_chan_info.num_chan = cached_chan_info->num_chan;
+	temp_chan_info.freq_list = qdf_mem_malloc(
+			temp_chan_info.num_chan * sizeof(qdf_freq_t));
+	if (!temp_chan_info.freq_list)
+		goto done;
+	computed_chan_info.freq_list = qdf_mem_malloc(
+			temp_chan_info.num_chan * sizeof(qdf_freq_t));
+	if (!computed_chan_info.freq_list)
+		goto done;
+	for (i = 0; i < temp_chan_info.num_chan; i++) {
+		temp_chan_info.freq_list[i] =
+		     cached_chan_info->freq_list[i];
+		computed_chan_info.freq_list[i] =
+		     cached_chan_info->freq_list[i];
+	}
+	status = cm_update_roam_scan_channel_list(wlan_vdev_get_psoc(vdev),
+						  vdev, rso_cfg,
+						  wlan_vdev_get_id(vdev),
+						  &computed_chan_info,
+						  temp_chan_info.freq_list,
+						  temp_chan_info.num_chan,
+						  false);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto done;
+	chan_info->chan_count = computed_chan_info.num_chan;
+	for (i = 0; i < chan_info->chan_count; i++)
+		chan_info->chan_freq_list[i] = computed_chan_info.freq_list[i];
+
+done:
+	qdf_mem_free(temp_chan_info.freq_list);
+	qdf_mem_free(computed_chan_info.freq_list);
+
+	return status;
+}
+
 QDF_STATUS wlan_cm_set_roam_band_update(struct wlan_objmgr_psoc *psoc,
 					uint8_t vdev_id)
 {
-	return cm_roam_update_cfg(psoc, vdev_id,
-				  REASON_ROAM_CONTROL_CONFIG_ENABLED);
+	struct wlan_objmgr_vdev *vdev;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+	struct rso_config *rso_cfg;
+	struct rso_cfg_params *dst_cfg;
+	struct wlan_mlme_psoc_ext_obj *mlme_obj;
+	struct wlan_roam_scan_channel_list chan_info = {0};
+
+	mlme_obj = mlme_get_psoc_ext_obj(psoc);
+	if (!mlme_obj)
+		return QDF_STATUS_E_FAILURE;
+
+	if (!mlme_obj->cfg.lfr.roam_scan_offload_enabled)
+		return QDF_STATUS_E_INVAL;
+
+	vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
+						    WLAN_MLME_NB_ID);
+	if (!vdev) {
+		mlme_err("vdev object is NULL");
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	rso_cfg = wlan_cm_get_rso_config(vdev);
+	if (!rso_cfg) {
+		status = QDF_STATUS_E_FAILURE;
+		goto done;
+	}
+	dst_cfg = &rso_cfg->cfg_param;
+
+	chan_info.vdev_id = vdev_id;
+	if (dst_cfg->specific_chan_info.num_chan) {
+		status = cm_roam_refine_channels(vdev, rso_cfg,
+						 &chan_info,
+						 &dst_cfg->specific_chan_info);
+		if (QDF_IS_STATUS_ERROR(status))
+			goto done;
+		chan_info.chan_cache_type = CHANNEL_LIST_STATIC;
+	} else if (dst_cfg->pref_chan_info.num_chan) {
+		status = cm_roam_refine_channels(vdev, rso_cfg,
+						 &chan_info,
+						 &dst_cfg->pref_chan_info);
+		if (QDF_IS_STATUS_ERROR(status))
+			goto done;
+		chan_info.chan_cache_type = CHANNEL_LIST_DYNAMIC;
+	} else {
+		goto done;
+	}
+
+	status = cm_roam_acquire_lock(vdev);
+	if (QDF_IS_STATUS_ERROR(status))
+		goto done;
+	if (!MLME_IS_ROAM_STATE_RSO_ENABLED(psoc, vdev_id)) {
+		mlme_debug("CHAN update received while ROAM RSO not started");
+		cm_roam_release_lock(vdev);
+		status = QDF_STATUS_E_INVAL;
+		goto done;
+	}
+	wlan_cm_tgt_send_roam_freqs(psoc, vdev_id, &chan_info);
+	cm_roam_release_lock(vdev);
+
+done:
+	wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
+	return status;
 }
 
 uint32_t wlan_cm_get_roam_scan_scheme_bitmap(struct wlan_objmgr_psoc *psoc,
@@ -3226,7 +3332,8 @@ static void cm_roam_stats_process_roam_msg_info(struct wlan_objmgr_psoc *psoc,
 	char time[TIME_STRING_LEN];
 	static const char msg_id1_str[] = "Roam RSSI TH Reset";
 
-	if (data->msg_id == WMI_ROAM_MSG_RSSI_RECOVERED) {
+	if (data->msg_id == WMI_ROAM_MSG_RSSI_RECOVERED ||
+	    data->msg_id == WMI_ROAM_MSG_CONNECTED_IN_POOR_RSSI) {
 		mlme_get_converted_timestamp(data->timestamp, time);
 		mlme_nofl_info("%s [ROAM MSG INFO]: VDEV[%d] %s, Current rssi: %d dbm, next_rssi_threshold: %d dbm",
 			       time, vdev_id, msg_id1_str, data->msg_param1,

+ 26 - 0
configs/config_to_feature.h

@@ -1540,6 +1540,18 @@
 #define QCA_WIFI_PEACH (1)
 #endif
 
+#ifdef CONFIG_CNSS_PEACH_V2
+#define QCA_WIFI_PEACH_V2 (1)
+#endif
+
+#ifdef CONFIG_INCLUDE_HAL_KIWI
+#define INCLUDE_HAL_KIWI (1)
+#endif
+
+#ifdef CONFIG_INCLUDE_HAL_PEACH
+#define INCLUDE_HAL_PEACH (1)
+#endif
+
 #ifdef CONFIG_QCA_WIFI_QCA8074
 #define QCA_WIFI_QCA8074 (1)
 #endif
@@ -2928,6 +2940,20 @@
 #define WLAN_MAX_ML_BSS_LINKS CONFIG_WLAN_MAX_ML_BSS_LINKS
 #endif
 
+#if defined(CONFIG_WLAN_FEATURE_11BE_MLO) && defined(CONFIG_WLAN_FEATURE_EMLSR)
+#ifndef CONFIG_WLAN_EMLSR_ENABLE
+#define CONFIG_WLAN_EMLSR_ENABLE (1)
+#endif
+#else
+#ifndef CONFIG_WLAN_EMLSR_ENABLE
+#define CONFIG_WLAN_EMLSR_ENABLE (0)
+#endif
+#endif
+
+#ifdef CONFIG_WLAN_EMLSR_ENABLE
+#define WLAN_EMLSR_ENABLE CONFIG_WLAN_EMLSR_ENABLE
+#endif
+
 #ifdef CONFIG_WALT_GET_CPU_TAKEN_SUPPORT
 #define WALT_GET_CPU_TAKEN_SUPPORT (1)
 #endif

+ 1 - 0
configs/kiwi_defconfig

@@ -1,4 +1,5 @@
 CONFIG_CNSS_KIWI := y
+CONFIG_INCLUDE_HAL_KIWI := y
 
 include $(WLAN_ROOT)/configs/default_defconfig
 

+ 1 - 0
configs/kiwi_v2_defconfig

@@ -1,5 +1,6 @@
 CONFIG_CNSS_KIWI := y
 CONFIG_CNSS_KIWI_V2 := y
+CONFIG_INCLUDE_HAL_KIWI := y
 
 ifeq ($(CONFIG_ARCH_SDXPINN), y)
 CONFIG_MOBILE_ROUTER := y

+ 1 - 0
configs/mango_defconfig

@@ -1,6 +1,7 @@
 CONFIG_CNSS_KIWI := y
 CONFIG_CNSS_KIWI_V2 := y
 CONFIG_CNSS_MANGO := y
+CONFIG_INCLUDE_HAL_KIWI := y
 
 include $(WLAN_ROOT)/configs/default_defconfig
 

+ 1 - 0
configs/niobe_gki_kiwi-v2_defconfig

@@ -17,6 +17,7 @@ CONFIG_CHIP_VERSION=2
 CONFIG_CNSS_GENL_MODULE=y
 CONFIG_CNSS_KIWI=y
 CONFIG_CNSS_KIWI_V2=y
+CONFIG_INCLUDE_HAL_KIWI=y
 CONFIG_CNSS_UTILS_MODULE=y
 CONFIG_CNSS_UTILS=y
 CONFIG_CONNECTIVITY_PKTLOG=y

+ 2 - 0
configs/parrot_gki_adrastea_defconfig

@@ -128,6 +128,8 @@ CONFIG_WLAN_LOG_ENTER=y
 CONFIG_WLAN_LOG_EXIT=y
 CONFIG_ATH_PERF_PWR_OFFLOAD=y
 CONFIG_HIF_SNOC=y
+CONFIG_PLD_SNOC_ICNSS_FLAG=y
+CONFIG_ICNSS2_HELIUM=y
 CONFIG_QCOM_ESE=y
 CONFIG_WLAN_OPEN_P2P_INTERFACE=y
 CONFIG_WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY=y

+ 1 - 0
configs/peach_defconfig

@@ -1,6 +1,7 @@
 CONFIG_CNSS_PEACH := y
 CONFIG_CNSS_KIWI := y
 CONFIG_CNSS_KIWI_V2 := y
+CONFIG_INCLUDE_HAL_PEACH := y
 
 #Enable 11BE EHT
 CONFIG_WLAN_FEATURE_11BE := y

+ 34 - 0
configs/pineapple_consolidate_peach-v2_defconfig

@@ -0,0 +1,34 @@
+CONFIG_ALLOW_PKT_DROPPING=y
+CONFIG_ATH_DIAG_EXT_DIRECT=y
+CONFIG_DESC_TIMESTAMP_DEBUG_INFO=y
+CONFIG_DP_RX_REFILL_CPU_PERF_AFFINE_MASK=y
+CONFIG_DP_TX_COMP_RING_DESC_SANITY_CHECK=y
+CONFIG_DP_TX_HW_DESC_HISTORY=y
+CONFIG_DSC_DEBUG=y
+CONFIG_DSC_TEST=y
+CONFIG_ENABLE_QDF_PTR_HASH_DEBUG=y
+CONFIG_FEATURE_HIF_LATENCY_PROFILE_ENABLE=y
+CONFIG_FEATURE_UNIT_TEST_SUSPEND=y
+CONFIG_HAL_DEBUG=y
+CONFIG_HIF_CE_DEBUG_DATA_BUF=y
+CONFIG_HIF_CPU_PERF_AFFINE_MASK=y
+CONFIG_LEAK_DETECTION=y
+CONFIG_MAX_LOGS_PER_SEC=500
+CONFIG_ENABLE_MAX_LOGS_PER_SEC=y
+CONFIG_QDF_NBUF_HISTORY_SIZE=16384
+CONFIG_REGISTER_OP_DEBUG=y
+CONFIG_REO_QDESC_HISTORY=y
+CONFIG_RX_DESC_DEBUG_CHECK=y
+CONFIG_SCHED_HISTORY_SIZE=256
+CONFIG_ENABLE_SCHED_HISTORY_SIZE=y
+CONFIG_TALLOC_DEBUG=y
+CONFIG_UNIT_TEST=y
+CONFIG_WLAN_FEATURE_DP_CFG_EVENT_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_MON_STATUS_RING_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_RX_RING_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_TX_DESC_HISTORY=y
+CONFIG_WLAN_RECORD_RX_PADDR=y
+CONFIG_QDF_TEST=y
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_FEATURE_WLM_STATS=y
+CONFIG_WLAN_TRACE_HIDE_MAC_ADDRESS_DISABLE=y

+ 1 - 0
configs/pineapple_gki_kiwi-v2_defconfig

@@ -17,6 +17,7 @@ CONFIG_CHIP_VERSION=2
 CONFIG_CNSS_GENL_MODULE=y
 CONFIG_CNSS_KIWI=y
 CONFIG_CNSS_KIWI_V2=y
+CONFIG_INCLUDE_HAL_KIWI=y
 CONFIG_CNSS_UTILS_MODULE=y
 CONFIG_CNSS_UTILS=y
 CONFIG_CONNECTIVITY_PKTLOG=y

+ 399 - 0
configs/pineapple_gki_peach-v2_defconfig

@@ -0,0 +1,399 @@
+CONFIG_QCA_CLD_WLAN=y
+CONFIG_160MHZ_SUPPORT=y
+CONFIG_6G_SCAN_CHAN_SORT_ALGO=y
+CONFIG_ADAPTIVE_11R=y
+CONFIG_ANI_LEVEL_REQUEST=y
+CONFIG_AR900B=y
+CONFIG_ATH_11AC_TXCOMPACT=y
+CONFIG_ATH_BUS_PM=y
+CONFIG_ATH_PERF_PWR_OFFLOAD=y
+CONFIG_BAND_6GHZ=y
+CONFIG_BERYLLIUM=y
+CONFIG_CE_DISABLE_SRNG_TIMER_IRQ=y
+CONFIG_CFG_BMISS_OFFLOAD_MAX_VDEV=4
+CONFIG_CFG_MAX_STA_VDEVS=4
+CONFIG_CHECKSUM_OFFLOAD=y
+CONFIG_CHIP_VERSION=2
+CONFIG_CNSS_GENL_MODULE=y
+CONFIG_CNSS_KIWI=y
+CONFIG_CNSS_KIWI_V2=y
+CONFIG_CNSS_PEACH=y
+CONFIG_CNSS_PEACH_V2=y
+CONFIG_INCLUDE_HAL_PEACH=y
+CONFIG_CNSS_UTILS_MODULE=y
+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
+CONFIG_DELIVERY_TO_STACK_STATUS_CHECK=y
+CONFIG_DESC_DUP_DETECT_DEBUG=y
+CONFIG_DEVICE_FORCE_WAKE_ENABLE=y
+CONFIG_DIRECT_BUF_RX_ENABLE=y
+CONFIG_DISABLE_CHANNEL_LIST=y
+CONFIG_DISABLE_EAPOL_INTRABSS_FWD=y
+CONFIG_DISABLE_STATUS_RING_TIMER_WAR=y
+CONFIG_DP_BE_WAR=y
+CONFIG_DP_CON_MON_MSI_ENABLED=y
+CONFIG_DP_CON_MON_MSI_SKIP_SET=y
+CONFIG_DP_FEATURE_HW_COOKIE_CONVERSION=y
+CONFIG_DP_HW_COOKIE_CONVERT_EXCEPTION=y
+CONFIG_DP_HW_TX_DELAY_STATS_ENABLE=y
+CONFIG_DP_INTR_POLL_BASED=y
+CONFIG_DP_LFR=y
+CONFIG_DP_MEM_PRE_ALLOC=y
+CONFIG_DP_PKT_ADD_TIMESTAMP=y
+CONFIG_DP_PKT_STATS_PER_LMAC=y
+CONFIG_DP_RX_BUFFER_POOL_ALLOC_THRES=5
+CONFIG_DP_RX_BUFFER_POOL_SIZE=128
+CONFIG_DP_RX_REFILL_BUFF_POOL_SIZE=2048
+CONFIG_DP_RX_REFILL_THRD_THRESHOLD=512
+CONFIG_DP_RX_DROP_RAW_FRM=y
+CONFIG_DP_RX_PKT_NO_PEER_DELIVER=y
+CONFIG_DP_RX_SPECIAL_FRAME_NEED=y
+CONFIG_DP_TRACE=y
+CONFIG_DP_TRAFFIC_END_INDICATION=y
+CONFIG_DP_TXRX_SOC_ATTACH=y
+CONFIG_DP_USE_REDUCED_PEER_ID_FIELD_WIDTH=y
+CONFIG_DP_WAR_INVALID_FIRST_MSDU_FLAG=y
+CONFIG_DUP_RX_DESC_WAR=y
+CONFIG_DYNAMIC_RX_AGGREGATION=y
+CONFIG_EMULATION_2_0=y
+CONFIG_ENABLE_HAL_REG_WR_HISTORY=y
+CONFIG_ENABLE_HAL_SOC_STATS=y
+CONFIG_ENABLE_MTRACE_LOG=y
+CONFIG_ENABLE_SMMU_S1_TRANSLATION=y
+CONFIG_FEATURE_ACTIVE_TOS=y
+CONFIG_FEATURE_ALIGN_STATS_FROM_DP=y
+CONFIG_FEATURE_BECN_STATS=y
+CONFIG_FEATURE_BSS_TRANSITION=y
+CONFIG_FEATURE_BUS_BANDWIDTH_MGR=y
+CONFIG_FEATURE_CLUB_LL_STATS_AND_GET_STATION=y
+CONFIG_FEATURE_COEX=y
+CONFIG_FEATURE_CONCURRENCY_MATRIX=y
+CONFIG_FEATURE_DELAYED_PEER_OBJ_DESTROY=y
+CONFIG_FEATURE_DENYLIST_MGR=y
+CONFIG_FEATURE_EPPING=y
+CONFIG_FEATURE_FORCE_WAKE=y
+CONFIG_FEATURE_FW_LOG_PARSING=y
+CONFIG_FEATURE_GPIO_CFG=y
+CONFIG_FEATURE_HAL_DELAYED_REG_WRITE=y
+CONFIG_FEATURE_HTC_CREDIT_HISTORY=y
+CONFIG_FEATURE_INTEROP_ISSUES_AP=y
+CONFIG_FEATURE_MEMDUMP_ENABLE=y
+CONFIG_FEATURE_MONITOR_MODE_SUPPORT=y
+CONFIG_FEATURE_MSCS=y
+CONFIG_FEATURE_NO_DBS_INTRABAND_MCC_SUPPORT=y
+CONFIG_FEATURE_OEM_DATA=y
+CONFIG_FEATURE_OTA_TEST=y
+CONFIG_FEATURE_P2P_LISTEN_OFFLOAD=y
+CONFIG_FEATURE_RADAR_HISTORY=y
+CONFIG_FEATURE_ROAM_DEBUG=y
+CONFIG_FEATURE_RSSI_MONITOR=y
+CONFIG_FEATURE_RX_LINKSPEED_ROAM_TRIGGER=y
+CONFIG_FEATURE_SAP_COND_CHAN_SWITCH=y
+CONFIG_FEATURE_SAR_LIMITS=y
+CONFIG_FEATURE_SET=y
+CONFIG_FEATURE_STATION_INFO=y
+CONFIG_FEATURE_STATS_EXT=y
+CONFIG_FEATURE_STATS_EXT_V2=y
+CONFIG_FEATURE_TSO=y
+CONFIG_FEATURE_TSO_STATS=y
+CONFIG_FEATURE_TX_POWER=y
+CONFIG_FEATURE_VDEV_OPS_WAKELOCK=y
+CONFIG_FEATURE_WLAN_LPHB=y
+CONFIG_FEATURE_WLAN_PRE_CAC=y
+CONFIG_FEATURE_WLAN_RA_FILTERING=y
+CONFIG_FEATURE_WLAN_SCAN_PNO=y
+CONFIG_FEATURE_WLAN_WAPI=y
+CONFIG_FIX_TXDMA_LIMITATION=y
+CONFIG_FOURTH_CONNECTION=y
+CONFIG_FW_THERMAL_THROTTLE=y
+CONFIG_GET_DRIVER_MODE=y
+CONFIG_GTK_OFFLOAD=y
+CONFIG_HAL_DISABLE_NON_BA_2K_JUMP_ERROR=y
+CONFIG_HANDLE_BC_EAP_TX_FRM=y
+CONFIG_HANDLE_RX_REROUTE_ERR=y
+CONFIG_HASTINGS_BT_WAR=y
+CONFIG_HDD_INIT_WITH_RTNL_LOCK=y
+CONFIG_HIF_PCI=y
+CONFIG_HIF_REG_WINDOW_SUPPORT=y
+CONFIG_HOST_OPCLASS=y
+CONFIG_HTT_PADDR64=y
+CONFIG_IPA_OFFLOAD=y
+CONFIG_IPA_OPT_WIFI_DP=y
+CONFIG_IPA_SET_RESET_TX_DB_PA=y
+CONFIG_KIWI_HEADERS_DEF=y
+CONFIG_LFR_SUBNET_DETECTION=y
+CONFIG_LINUX_QCMBR=y
+CONFIG_LITTLE_ENDIAN=y
+CONFIG_LL_DP_SUPPORT=y
+CONFIG_LTE_COEX=y
+CONFIG_MARK_ICMP_REQ_TO_FW=y
+CONFIG_MAX_ALLOC_PAGE_SIZE=y
+CONFIG_MCC_TO_SCC_SWITCH=y
+CONFIG_MON_ENABLE_DROP_FOR_MAC=y
+CONFIG_MON_ENABLE_DROP_FOR_NON_MON_PMAC=y
+CONFIG_MORE_TX_DESC=y
+CONFIG_MULTI_CLIENT_LL_SUPPORT=y
+CONFIG_NO_RX_PKT_HDR_TLV=y
+CONFIG_OBSS_PD=y
+CONFIG_OFDM_SCRAMBLER_SEED=y
+CONFIG_PCI_LINK_STATUS_SANITY=y
+CONFIG_PCIE_GEN_SWITCH=y
+CONFIG_PEER_PROTECTED_ACCESS=y
+CONFIG_PKTLOG_HAS_SPECIFIC_DATA=y
+CONFIG_PLD_PCIE_CNSS_FLAG=y
+CONFIG_PLD_PCIE_INIT_FLAG=y
+CONFIG_POWER_MANAGEMENT_OFFLOAD=y
+CONFIG_PTT_SOCK_SVC_ENABLE=y
+CONFIG_QCA_DFS_BW_PUNCTURE=y
+CONFIG_QCA_GET_TSF_VIA_REG=y
+CONFIG_QCA_MONITOR_PKT_SUPPORT=y
+CONFIG_QCA_SUPPORT_TX_MIN_RATES_FOR_SPECIAL_FRAMES=y
+CONFIG_QCA_SUPPORT_TX_THROTTLE=y
+CONFIG_QCA_WIFI_FTM=y
+CONFIG_QCA_WIFI_KIWI=y
+CONFIG_QCA_WIFI_MONITOR_MODE_NO_MSDU_START_TLV_SUPPORT=y
+CONFIG_QCA_WIFI_QCA8074=y
+CONFIG_QCA_WIFI_QCA8074_VP=y
+CONFIG_QCACLD_FEATURE_APF=y
+CONFIG_QCACLD_FEATURE_FW_STATE=y
+CONFIG_QCACLD_FEATURE_GAP_LL_PS_MODE=y
+CONFIG_QCACLD_FEATURE_GREEN_AP=y
+CONFIG_QCACLD_FEATURE_NAN=y
+CONFIG_QCACLD_RX_DESC_MULTI_PAGE_ALLOC=y
+CONFIG_QCACLD_WLAN_CONNECTIVITY_DIAG_EVENT=y
+CONFIG_QCACLD_WLAN_LFR3=y
+CONFIG_QCOM_ESE=y
+CONFIG_QCOM_LTE_COEX=y
+CONFIG_QCOM_TDLS=y
+CONFIG_QCOM_VOWIFI_11R=y
+CONFIG_QMI_SUPPORT=y
+CONFIG_REG_CLIENT=y
+CONFIG_REMOVE_PKT_LOG=y
+CONFIG_REO_DESC_DEFER_FREE=y
+CONFIG_RX_DEFRAG_DO_NOT_REINJECT=y
+CONFIG_RX_DESC_SANITY_WAR=y
+CONFIG_RX_FISA=y
+CONFIG_RX_HASH_DEBUG=y
+CONFIG_RX_OL=y
+CONFIG_RXDMA_ERR_PKT_DROP=y
+CONFIG_SAE_SINGLE_PMK=y
+CONFIG_SAP_AVOID_ACS_FREQ_LIST=y
+CONFIG_SAP_DHCP_FW_IND=y
+CONFIG_SAR_SAFETY_FEATURE=y
+CONFIG_SCALE_INCLUDES=y
+CONFIG_SERIALIZE_QUEUE_SETUP=y
+CONFIG_SHADOW_V3=y
+CONFIG_SMMU_S1_UNMAP=y
+CONFIG_SOFTAP_CHANNEL_RANGE=y
+CONFIG_SUPPORT_11AX=y
+CONFIG_SYSTEM_PM_CHECK=y
+CONFIG_TARGET_11D_SCAN=y
+CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC=y
+CONFIG_THERMAL_STATS_SUPPORT=y
+CONFIG_TRACE_RECORD_FEATURE=y
+CONFIG_TSO_DEBUG_LOG_ENABLE=y
+CONFIG_TX_ADDR_INDEX_SEARCH=y
+CONFIG_TX_MULTI_TCL=y
+CONFIG_TX_MULTIQ_PER_AC=y
+CONFIG_TX_PER_PDEV_DESC_POOL=y
+CONFIG_TX_TID_OVERRIDE=y
+CONFIG_VERBOSE_DEBUG=y
+CONFIG_WAPI_BIG_ENDIAN=y
+CONFIG_WCNSS_MEM_PRE_ALLOC_MODULE=y
+CONFIG_WCNSS_MEM_PRE_ALLOC=y
+CONFIG_WDI_EVENT_ENABLE=y
+CONFIG_WDI3_IPA_OVER_GSI=y
+CONFIG_WIFI_MONITOR_SUPPORT=y
+CONFIG_WIFI_POS_CONVERGED=y
+CONFIG_WIFI_POS_PASN=y
+CONFIG_WINDOW_REG_PLD_LOCK_ENABLE=y
+CONFIG_WLAN_BCN_RECV_FEATURE=y
+CONFIG_WLAN_BMISS=y
+CONFIG_WLAN_CE_INTERRUPT_THRESHOLD_CONFIG=y
+CONFIG_WLAN_CFR_ENABLE=y
+CONFIG_WLAN_CLD_DEV_PM_QOS=y
+CONFIG_WLAN_CLD_PM_QOS=y
+CONFIG_WLAN_CONV_SPECTRAL_ENABLE=y
+CONFIG_WLAN_CUSTOM_DSCP_UP_MAP=y
+CONFIG_WLAN_DEBUG_CRASH_INJECT=y
+CONFIG_WLAN_DEBUG_LINK_VOTE=y
+CONFIG_WLAN_DEBUG_VERSION=y
+CONFIG_WLAN_DEBUGFS=y
+CONFIG_WLAN_DFS_MASTER_ENABLE=y
+CONFIG_WLAN_DFS_STATIC_MEM_ALLOC=y
+CONFIG_WLAN_DIAG_VERSION=y
+CONFIG_WLAN_DL_MODES=y
+CONFIG_WLAN_DP_DISABLE_TCL_CMD_CRED_SRNG=y
+CONFIG_WLAN_DP_DISABLE_TCL_STATUS_SRNG=y
+CONFIG_WLAN_DP_PENDING_MEM_FLUSH=y
+CONFIG_WLAN_DP_PER_RING_TYPE_CONFIG=y
+CONFIG_WLAN_DP_SRNG_USAGE_WM_TRACKING=y
+CONFIG_WLAN_DYNAMIC_CVM=y
+CONFIG_WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY=y
+CONFIG_WLAN_ENH_CFR_ENABLE=y
+CONFIG_WLAN_FEATURE_11AX=y
+CONFIG_WLAN_FEATURE_11BE=y
+CONFIG_WLAN_FEATURE_11BE_MLO=y
+CONFIG_WLAN_HDD_MULTI_VDEV_SINGLE_NDEV=y
+CONFIG_WLAN_FEATURE_ACTION_OUI=y
+CONFIG_WLAN_FEATURE_BIG_DATA_STATS=y
+CONFIG_WLAN_FEATURE_CAL_FAILURE_TRIGGER=y
+CONFIG_WLAN_FEATURE_COAP=y
+CONFIG_WLAN_FEATURE_COEX_DBAM=y
+CONFIG_WLAN_FEATURE_DFS_OFFLOAD=y
+CONFIG_WLAN_FEATURE_DISA=y
+CONFIG_WLAN_FEATURE_DP_BUS_BANDWIDTH=y
+CONFIG_WLAN_FEATURE_DP_EVENT_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_RX_THREADS=y
+CONFIG_WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE=y
+CONFIG_WLAN_FEATURE_ELNA=y
+CONFIG_WLAN_FEATURE_FILS=y
+CONFIG_WLAN_FEATURE_FIPS=y
+CONFIG_WLAN_FEATURE_GET_USABLE_CHAN_LIST=y
+CONFIG_WLAN_FEATURE_ICMP_OFFLOAD=y
+CONFIG_WLAN_FEATURE_IGMP_OFFLOAD=y
+CONFIG_WLAN_FEATURE_LINK_LAYER_STATS=y
+CONFIG_WLAN_FEATURE_LPSS=y
+CONFIG_WLAN_FEATURE_LRO_CTX_IN_CB=y
+CONFIG_WLAN_FEATURE_MBSSID=y
+CONFIG_WLAN_FEATURE_MCC_QUOTA=y
+CONFIG_WLAN_FEATURE_MDNS_OFFLOAD=y
+CONFIG_WLAN_FEATURE_MEDIUM_ASSESS=y
+CONFIG_WLAN_FEATURE_MIB_STATS=y
+CONFIG_WLAN_FEATURE_NEAR_FULL_IRQ=y
+CONFIG_WLAN_FEATURE_P2P_DEBUG=y
+CONFIG_WLAN_FEATURE_P2P_P2P_STA=y
+CONFIG_WLAN_FEATURE_PACKET_FILTERING=y
+CONFIG_WLAN_FEATURE_PEER_TXQ_FLUSH_CONF=y
+CONFIG_WLAN_FEATURE_ROAM_INFO_STATS=y
+CONFIG_WLAN_FEATURE_RX_BUFFER_POOL=y
+CONFIG_WLAN_FEATURE_RX_SOFTIRQ_TIME_LIMIT=y
+CONFIG_WLAN_FEATURE_SAE=y
+CONFIG_WLAN_FEATURE_SAP_ACS_OPTIMIZE=y
+CONFIG_WLAN_FEATURE_SARV1_TO_SARV2=y
+CONFIG_WLAN_FEATURE_SR=y
+CONFIG_WLAN_FEATURE_TWT=y
+CONFIG_WLAN_FEATURE_WMI_DIAG_OVER_CE7=y
+CONFIG_WLAN_FREQ_LIST=y
+CONFIG_WLAN_FW_OFFLOAD=y
+CONFIG_WLAN_GTX_BW_MASK=y
+CONFIG_WLAN_HANG_EVENT=y
+CONFIG_WLAN_LOG_DEBUG=y
+CONFIG_WLAN_LOG_ENTER=y
+CONFIG_WLAN_LOG_ERROR=y
+CONFIG_WLAN_LOG_EXIT=y
+CONFIG_WLAN_LOG_FATAL=y
+CONFIG_WLAN_LOG_INFO=y
+CONFIG_WLAN_LOG_WARN=y
+CONFIG_WLAN_LOGGING_SOCK_SVC=y
+CONFIG_WLAN_MWS_INFO_DEBUGFS=y
+CONFIG_WLAN_NAPI=y
+CONFIG_WLAN_NS_OFFLOAD=y
+CONFIG_WLAN_NUD_TRACKING=y
+CONFIG_WLAN_OFFLOAD_PACKETS=y
+CONFIG_WLAN_OPEN_P2P_INTERFACE=y
+CONFIG_WLAN_PDEV_VDEV_SEND_MULTI_PARAM=y
+CONFIG_WLAN_PMO_ENABLE=y
+CONFIG_WLAN_POLICY_MGR_ENABLE=y
+CONFIG_WLAN_POWER_DEBUG=y
+CONFIG_WLAN_REASSOC=y
+CONFIG_WLAN_RX_MON_PARSE_CMN_USER_INFO=y
+CONFIG_WLAN_SCAN_DISABLE=y
+CONFIG_WLAN_SKIP_BAR_UPDATE=y
+CONFIG_WLAN_SUPPORT_DATA_STALL=y
+CONFIG_WLAN_SYNC_TSF=y
+CONFIG_WLAN_SYNC_TSF_PLUS=y
+CONFIG_WLAN_SYNC_TSF_TIMER=y
+CONFIG_WLAN_SYSFS=y
+CONFIG_WLAN_SYSFS_CHANNEL=y
+CONFIG_WLAN_SYSFS_CONNECT_INFO=y
+CONFIG_WLAN_SYSFS_DCM=y
+CONFIG_WLAN_SYSFS_DFSNOL=y
+CONFIG_WLAN_SYSFS_DP_STATS=y
+CONFIG_WLAN_SYSFS_DP_TRACE=y
+CONFIG_WLAN_SYSFS_EHT_RATE=y
+CONFIG_WLAN_SYSFS_FW_MODE_CFG=y
+CONFIG_WLAN_SYSFS_HE_BSS_COLOR=y
+CONFIG_WLAN_SYSFS_LOG_BUFFER=y
+CONFIG_WLAN_SYSFS_MEM_STATS=y
+CONFIG_WLAN_SYSFS_MONITOR_MODE_CHANNEL=y
+CONFIG_WLAN_SYSFS_RADAR=y
+CONFIG_WLAN_SYSFS_RANGE_EXT=y
+CONFIG_WLAN_SYSFS_RTS_CTS=y
+CONFIG_WLAN_SYSFS_SCAN_CFG=y
+CONFIG_WLAN_SYSFS_STA_INFO=y
+CONFIG_WLAN_SYSFS_STATS=y
+CONFIG_WLAN_SYSFS_TDLS_PEERS=y
+CONFIG_WLAN_SYSFS_TEMPERATURE=y
+CONFIG_WLAN_SYSFS_TX_STBC=y
+CONFIG_WLAN_SYSFS_WLAN_DBG=y
+CONFIG_WLAN_SYSFS_BITRATES=y
+CONFIG_WLAN_SYSFS_RF_TEST_MODE=y
+CONFIG_WLAN_THERMAL_CFG=y
+CONFIG_WLAN_THERMAL_MULTI_CLIENT_SUPPORT=y
+CONFIG_WLAN_TRACEPOINTS=y
+CONFIG_WLAN_TSF_AUTO_REPORT=y
+CONFIG_WLAN_TSF_UPLINK_DELAY=y
+CONFIG_WLAN_TX_LATENCY_STATS=y
+CONFIG_WLAN_TWT_CONVERGED=y
+CONFIG_WLAN_TWT_SAP_PDEV_COUNT=y
+CONFIG_WLAN_TWT_SAP_STA_COUNT=y
+CONFIG_WLAN_TX_FLOW_CONTROL_V2=y
+CONFIG_WLAN_TXRX_FW_ST_RST=y
+CONFIG_WLAN_TXRX_FW_STATS=y
+CONFIG_WLAN_TXRX_STATS=y
+CONFIG_WLAN_UMAC_MLO_MAX_DEV=3
+CONFIG_WLAN_VENDOR_HANDOFF_CONTROL=y
+CONFIG_WLAN_WBUFF=y
+CONFIG_WLAN_WOW_ITO=y
+CONFIG_WLAN_WOWL_ADD_PTRN=y
+CONFIG_WLAN_WOWL_DEL_PTRN=y
+CONFIG_WMI_BCN_OFFLOAD=y
+CONFIG_WMI_CMD_STRINGS=y
+CONFIG_WMI_CONCURRENCY_SUPPORT=y
+CONFIG_WMI_DBR_SUPPORT=y
+CONFIG_WMI_INTERFACE_EVENT_LOGGING=y
+CONFIG_WMI_ROAM_SUPPORT=y
+CONFIG_WMI_SEND_RECV_QMI=y
+CONFIG_WMI_STA_SUPPORT=y
+CONFIG_CFG80211_EXTERNAL_AUTH_MLO_SUPPORT=y
+CONFIG_CFG80211_EXT_FEATURE_SECURE_NAN=y
+CONFIG_WLAN_CTRL_NAME="wlan"
+CONFIG_MULTI_IF_NAME="peach_v2"
+CONFIG_NL80211_TESTMODE=y
+CONFIG_ENABLE_CE4_COMP_DISABLE_HTT_HTC_MISC_LIST=y
+CONFIG_WLAN_HOST_ARCH_ARM=y
+CONFIG_ARCH_MSM=y
+CONFIG_DP_TX_PACKET_INSPECT_FOR_ILP=y
+CONFIG_NUM_SOC_PERF_CLUSTER=2
+CONFIG_WLAN_OPEN_SOURCE=y
+CONFIG_QCA_WIFI_FTM_NL80211=y
+CONFIG_CFG80211_MLD_AP_STA_CONNECT_UPSTREAM_SUPPORT=y
+CONFIG_DP_MULTIPASS_SUPPORT=y
+CONFIG_WLAN_DP_VDEV_NO_SELF_PEER=y
+CONFIG_WLAN_FEATURE_AFFINITY_MGR=y
+CONFIG_WALT_GET_CPU_TAKEN_SUPPORT=y
+CONFIG_DP_MLO_LINK_STATS_SUPPORT=y
+CONFIG_HIF_DEBUG=y
+CONFIG_WLAN_OBJMGR_DEBUG=y
+CONFIG_WLAN_OBJMGR_REF_ID_TRACE=y
+CONFIG_WLAN_WARN_ON_ASSERT=y
+CONFIG_WLAN_DP_FEATURE_DEFERRED_REO_QDESC_DESTROY=y
+CONFIG_PANIC_ON_BUG=y
+CONFIG_FEATURE_WLAN_CH_AVOID_EXT=y
+CONFIG_CNSS2_SSR_DRIVER_DUMP=y
+CONFIG_BUS_AUTO_SUSPEND=y
+CONFIG_CNSS_OUT_OF_TREE=y
+CONFIG_SMP=y
+CONFIG_RPS=y
+CONFIG_BCN_RATECODE_ENABLE=y
+CONFIG_4_BYTES_TLV_TAG=y
+CONFIG_WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET=y
+CONFIG_WLAN_MULTI_CHIP_SUPPORT=y
+CONFIG_WLAN_FEATURE_EMLSR=y

+ 2 - 0
configs/pineapple_gki_peach_defconfig

@@ -18,6 +18,7 @@ CONFIG_CNSS_GENL_MODULE=y
 CONFIG_CNSS_KIWI=y
 CONFIG_CNSS_KIWI_V2=y
 CONFIG_CNSS_PEACH=y
+CONFIG_INCLUDE_HAL_PEACH=y
 CONFIG_CNSS_UTILS_MODULE=y
 CONFIG_CNSS_UTILS=y
 CONFIG_CONNECTIVITY_PKTLOG=y
@@ -394,3 +395,4 @@ CONFIG_BCN_RATECODE_ENABLE=y
 CONFIG_4_BYTES_TLV_TAG=y
 CONFIG_WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET=y
 CONFIG_WLAN_MULTI_CHIP_SUPPORT=y
+CONFIG_WLAN_FEATURE_EMLSR=y

+ 34 - 0
configs/sun_consolidate_peach-v2_defconfig

@@ -0,0 +1,34 @@
+CONFIG_ALLOW_PKT_DROPPING=y
+CONFIG_ATH_DIAG_EXT_DIRECT=y
+CONFIG_DESC_TIMESTAMP_DEBUG_INFO=y
+CONFIG_DP_RX_REFILL_CPU_PERF_AFFINE_MASK=y
+CONFIG_DP_TX_COMP_RING_DESC_SANITY_CHECK=y
+CONFIG_DP_TX_HW_DESC_HISTORY=y
+CONFIG_DSC_DEBUG=y
+CONFIG_DSC_TEST=y
+CONFIG_ENABLE_QDF_PTR_HASH_DEBUG=y
+CONFIG_FEATURE_HIF_LATENCY_PROFILE_ENABLE=y
+CONFIG_FEATURE_UNIT_TEST_SUSPEND=y
+CONFIG_HAL_DEBUG=y
+CONFIG_HIF_CE_DEBUG_DATA_BUF=y
+CONFIG_HIF_CPU_PERF_AFFINE_MASK=y
+CONFIG_LEAK_DETECTION=y
+CONFIG_MAX_LOGS_PER_SEC=500
+CONFIG_ENABLE_MAX_LOGS_PER_SEC=y
+CONFIG_QDF_NBUF_HISTORY_SIZE=16384
+CONFIG_REGISTER_OP_DEBUG=y
+CONFIG_REO_QDESC_HISTORY=y
+CONFIG_RX_DESC_DEBUG_CHECK=y
+CONFIG_SCHED_HISTORY_SIZE=256
+CONFIG_ENABLE_SCHED_HISTORY_SIZE=y
+CONFIG_TALLOC_DEBUG=y
+CONFIG_UNIT_TEST=y
+CONFIG_WLAN_FEATURE_DP_CFG_EVENT_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_MON_STATUS_RING_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_RX_RING_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_TX_DESC_HISTORY=y
+CONFIG_WLAN_RECORD_RX_PADDR=y
+CONFIG_QDF_TEST=y
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_FEATURE_WLM_STATS=y
+CONFIG_WLAN_TRACE_HIDE_MAC_ADDRESS_DISABLE=y

+ 1 - 0
configs/sun_gki_kiwi-v2_defconfig

@@ -17,6 +17,7 @@ CONFIG_CHIP_VERSION=2
 CONFIG_CNSS_GENL_MODULE=y
 CONFIG_CNSS_KIWI=y
 CONFIG_CNSS_KIWI_V2=y
+CONFIG_INCLUDE_HAL_KIWI=y
 CONFIG_CNSS_UTILS_MODULE=y
 CONFIG_CNSS_UTILS=y
 CONFIG_CONNECTIVITY_PKTLOG=y

+ 398 - 0
configs/sun_gki_peach-v2_defconfig

@@ -0,0 +1,398 @@
+CONFIG_QCA_CLD_WLAN=y
+CONFIG_160MHZ_SUPPORT=y
+CONFIG_6G_SCAN_CHAN_SORT_ALGO=y
+CONFIG_ADAPTIVE_11R=y
+CONFIG_ANI_LEVEL_REQUEST=y
+CONFIG_AR900B=y
+CONFIG_ATH_11AC_TXCOMPACT=y
+CONFIG_ATH_BUS_PM=y
+CONFIG_ATH_PERF_PWR_OFFLOAD=y
+CONFIG_BAND_6GHZ=y
+CONFIG_BERYLLIUM=y
+CONFIG_CE_DISABLE_SRNG_TIMER_IRQ=y
+CONFIG_CFG_BMISS_OFFLOAD_MAX_VDEV=4
+CONFIG_CFG_MAX_STA_VDEVS=4
+CONFIG_CHECKSUM_OFFLOAD=y
+CONFIG_CHIP_VERSION=2
+CONFIG_CNSS_GENL_MODULE=y
+CONFIG_CNSS_KIWI=y
+CONFIG_CNSS_KIWI_V2=y
+CONFIG_CNSS_PEACH=y
+CONFIG_CNSS_PEACH_V2=y
+CONFIG_INCLUDE_HAL_PEACH=y
+CONFIG_CNSS_UTILS_MODULE=y
+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
+CONFIG_DELIVERY_TO_STACK_STATUS_CHECK=y
+CONFIG_DESC_DUP_DETECT_DEBUG=y
+CONFIG_DEVICE_FORCE_WAKE_ENABLE=y
+CONFIG_DIRECT_BUF_RX_ENABLE=y
+CONFIG_DISABLE_CHANNEL_LIST=y
+CONFIG_DISABLE_EAPOL_INTRABSS_FWD=y
+CONFIG_DISABLE_STATUS_RING_TIMER_WAR=y
+CONFIG_DP_BE_WAR=y
+CONFIG_DP_CON_MON_MSI_ENABLED=y
+CONFIG_DP_CON_MON_MSI_SKIP_SET=y
+CONFIG_DP_FEATURE_HW_COOKIE_CONVERSION=y
+CONFIG_DP_HW_COOKIE_CONVERT_EXCEPTION=y
+CONFIG_DP_HW_TX_DELAY_STATS_ENABLE=y
+CONFIG_DP_INTR_POLL_BASED=y
+CONFIG_DP_LFR=y
+CONFIG_DP_MEM_PRE_ALLOC=y
+CONFIG_DP_PKT_ADD_TIMESTAMP=y
+CONFIG_DP_PKT_STATS_PER_LMAC=y
+CONFIG_DP_RX_BUFFER_POOL_ALLOC_THRES=5
+CONFIG_DP_RX_BUFFER_POOL_SIZE=128
+CONFIG_DP_RX_REFILL_BUFF_POOL_SIZE=2048
+CONFIG_DP_RX_REFILL_THRD_THRESHOLD=512
+CONFIG_DP_RX_DROP_RAW_FRM=y
+CONFIG_DP_RX_PKT_NO_PEER_DELIVER=y
+CONFIG_DP_RX_SPECIAL_FRAME_NEED=y
+CONFIG_DP_TRACE=y
+CONFIG_DP_TRAFFIC_END_INDICATION=y
+CONFIG_DP_TXRX_SOC_ATTACH=y
+CONFIG_DP_USE_REDUCED_PEER_ID_FIELD_WIDTH=y
+CONFIG_DP_WAR_INVALID_FIRST_MSDU_FLAG=y
+CONFIG_DUP_RX_DESC_WAR=y
+CONFIG_DYNAMIC_RX_AGGREGATION=y
+CONFIG_EMULATION_2_0=y
+CONFIG_ENABLE_HAL_REG_WR_HISTORY=y
+CONFIG_ENABLE_HAL_SOC_STATS=y
+CONFIG_ENABLE_MTRACE_LOG=y
+CONFIG_ENABLE_SMMU_S1_TRANSLATION=y
+CONFIG_FEATURE_ACTIVE_TOS=y
+CONFIG_FEATURE_ALIGN_STATS_FROM_DP=y
+CONFIG_FEATURE_BECN_STATS=y
+CONFIG_FEATURE_BSS_TRANSITION=y
+CONFIG_FEATURE_BUS_BANDWIDTH_MGR=y
+CONFIG_FEATURE_CLUB_LL_STATS_AND_GET_STATION=y
+CONFIG_FEATURE_COEX=y
+CONFIG_FEATURE_CONCURRENCY_MATRIX=y
+CONFIG_FEATURE_DELAYED_PEER_OBJ_DESTROY=y
+CONFIG_FEATURE_DENYLIST_MGR=y
+CONFIG_FEATURE_EPPING=y
+CONFIG_FEATURE_FORCE_WAKE=y
+CONFIG_FEATURE_FW_LOG_PARSING=y
+CONFIG_FEATURE_GPIO_CFG=y
+CONFIG_FEATURE_HAL_DELAYED_REG_WRITE=y
+CONFIG_FEATURE_HTC_CREDIT_HISTORY=y
+CONFIG_FEATURE_INTEROP_ISSUES_AP=y
+CONFIG_FEATURE_MEMDUMP_ENABLE=y
+CONFIG_FEATURE_MONITOR_MODE_SUPPORT=y
+CONFIG_FEATURE_MSCS=y
+CONFIG_FEATURE_NO_DBS_INTRABAND_MCC_SUPPORT=y
+CONFIG_FEATURE_OEM_DATA=y
+CONFIG_FEATURE_OTA_TEST=y
+CONFIG_FEATURE_P2P_LISTEN_OFFLOAD=y
+CONFIG_FEATURE_RADAR_HISTORY=y
+CONFIG_FEATURE_ROAM_DEBUG=y
+CONFIG_FEATURE_RSSI_MONITOR=y
+CONFIG_FEATURE_RX_LINKSPEED_ROAM_TRIGGER=y
+CONFIG_FEATURE_SAP_COND_CHAN_SWITCH=y
+CONFIG_FEATURE_SAR_LIMITS=y
+CONFIG_FEATURE_SET=y
+CONFIG_FEATURE_STATION_INFO=y
+CONFIG_FEATURE_STATS_EXT=y
+CONFIG_FEATURE_STATS_EXT_V2=y
+CONFIG_FEATURE_TSO=y
+CONFIG_FEATURE_TSO_STATS=y
+CONFIG_FEATURE_TX_POWER=y
+CONFIG_FEATURE_VDEV_OPS_WAKELOCK=y
+CONFIG_FEATURE_WLAN_LPHB=y
+CONFIG_FEATURE_WLAN_PRE_CAC=y
+CONFIG_FEATURE_WLAN_RA_FILTERING=y
+CONFIG_FEATURE_WLAN_SCAN_PNO=y
+CONFIG_FEATURE_WLAN_WAPI=y
+CONFIG_FIX_TXDMA_LIMITATION=y
+CONFIG_FOURTH_CONNECTION=y
+CONFIG_FW_THERMAL_THROTTLE=y
+CONFIG_GET_DRIVER_MODE=y
+CONFIG_GTK_OFFLOAD=y
+CONFIG_HAL_DISABLE_NON_BA_2K_JUMP_ERROR=y
+CONFIG_HANDLE_BC_EAP_TX_FRM=y
+CONFIG_HANDLE_RX_REROUTE_ERR=y
+CONFIG_HASTINGS_BT_WAR=y
+CONFIG_HDD_INIT_WITH_RTNL_LOCK=y
+CONFIG_HIF_PCI=y
+CONFIG_HIF_REG_WINDOW_SUPPORT=y
+CONFIG_HOST_OPCLASS=y
+CONFIG_HTT_PADDR64=y
+CONFIG_IPA_OFFLOAD=y
+CONFIG_IPA_OPT_WIFI_DP=y
+CONFIG_IPA_SET_RESET_TX_DB_PA=y
+CONFIG_KIWI_HEADERS_DEF=y
+CONFIG_LFR_SUBNET_DETECTION=y
+CONFIG_LINUX_QCMBR=y
+CONFIG_LITTLE_ENDIAN=y
+CONFIG_LL_DP_SUPPORT=y
+CONFIG_LTE_COEX=y
+CONFIG_MARK_ICMP_REQ_TO_FW=y
+CONFIG_MAX_ALLOC_PAGE_SIZE=y
+CONFIG_MCC_TO_SCC_SWITCH=y
+CONFIG_MON_ENABLE_DROP_FOR_MAC=y
+CONFIG_MON_ENABLE_DROP_FOR_NON_MON_PMAC=y
+CONFIG_MORE_TX_DESC=y
+CONFIG_MULTI_CLIENT_LL_SUPPORT=y
+CONFIG_NO_RX_PKT_HDR_TLV=y
+CONFIG_OBSS_PD=y
+CONFIG_OFDM_SCRAMBLER_SEED=y
+CONFIG_PCI_LINK_STATUS_SANITY=y
+CONFIG_PCIE_GEN_SWITCH=y
+CONFIG_PEER_PROTECTED_ACCESS=y
+CONFIG_PKTLOG_HAS_SPECIFIC_DATA=y
+CONFIG_PLD_PCIE_CNSS_FLAG=y
+CONFIG_PLD_PCIE_INIT_FLAG=y
+CONFIG_POWER_MANAGEMENT_OFFLOAD=y
+CONFIG_PTT_SOCK_SVC_ENABLE=y
+CONFIG_QCA_DFS_BW_PUNCTURE=y
+CONFIG_QCA_GET_TSF_VIA_REG=y
+CONFIG_QCA_MONITOR_PKT_SUPPORT=y
+CONFIG_QCA_SUPPORT_TX_MIN_RATES_FOR_SPECIAL_FRAMES=y
+CONFIG_QCA_SUPPORT_TX_THROTTLE=y
+CONFIG_QCA_WIFI_FTM=y
+CONFIG_QCA_WIFI_KIWI=y
+CONFIG_QCA_WIFI_MONITOR_MODE_NO_MSDU_START_TLV_SUPPORT=y
+CONFIG_QCA_WIFI_QCA8074=y
+CONFIG_QCA_WIFI_QCA8074_VP=y
+CONFIG_QCACLD_FEATURE_APF=y
+CONFIG_QCACLD_FEATURE_FW_STATE=y
+CONFIG_QCACLD_FEATURE_GAP_LL_PS_MODE=y
+CONFIG_QCACLD_FEATURE_GREEN_AP=y
+CONFIG_QCACLD_FEATURE_NAN=y
+CONFIG_QCACLD_RX_DESC_MULTI_PAGE_ALLOC=y
+CONFIG_QCACLD_WLAN_CONNECTIVITY_DIAG_EVENT=y
+CONFIG_QCACLD_WLAN_LFR3=y
+CONFIG_QCOM_ESE=y
+CONFIG_QCOM_LTE_COEX=y
+CONFIG_QCOM_TDLS=y
+CONFIG_QCOM_VOWIFI_11R=y
+CONFIG_QMI_SUPPORT=y
+CONFIG_REG_CLIENT=y
+CONFIG_REMOVE_PKT_LOG=y
+CONFIG_REO_DESC_DEFER_FREE=y
+CONFIG_RX_DEFRAG_DO_NOT_REINJECT=y
+CONFIG_RX_DESC_SANITY_WAR=y
+CONFIG_RX_FISA=y
+CONFIG_RX_HASH_DEBUG=y
+CONFIG_RX_OL=y
+CONFIG_RXDMA_ERR_PKT_DROP=y
+CONFIG_SAE_SINGLE_PMK=y
+CONFIG_SAP_AVOID_ACS_FREQ_LIST=y
+CONFIG_SAP_DHCP_FW_IND=y
+CONFIG_SAR_SAFETY_FEATURE=y
+CONFIG_SCALE_INCLUDES=y
+CONFIG_SERIALIZE_QUEUE_SETUP=y
+CONFIG_SHADOW_V3=y
+CONFIG_SMMU_S1_UNMAP=y
+CONFIG_SOFTAP_CHANNEL_RANGE=y
+CONFIG_SUPPORT_11AX=y
+CONFIG_SYSTEM_PM_CHECK=y
+CONFIG_TARGET_11D_SCAN=y
+CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC=y
+CONFIG_THERMAL_STATS_SUPPORT=y
+CONFIG_TRACE_RECORD_FEATURE=y
+CONFIG_TSO_DEBUG_LOG_ENABLE=y
+CONFIG_TX_ADDR_INDEX_SEARCH=y
+CONFIG_TX_MULTI_TCL=y
+CONFIG_TX_MULTIQ_PER_AC=y
+CONFIG_TX_PER_PDEV_DESC_POOL=y
+CONFIG_TX_TID_OVERRIDE=y
+CONFIG_VERBOSE_DEBUG=y
+CONFIG_WAPI_BIG_ENDIAN=y
+CONFIG_WCNSS_MEM_PRE_ALLOC_MODULE=y
+CONFIG_WCNSS_MEM_PRE_ALLOC=y
+CONFIG_WDI_EVENT_ENABLE=y
+CONFIG_WDI3_IPA_OVER_GSI=y
+CONFIG_WIFI_MONITOR_SUPPORT=y
+CONFIG_WIFI_POS_CONVERGED=y
+CONFIG_WIFI_POS_PASN=y
+CONFIG_WINDOW_REG_PLD_LOCK_ENABLE=y
+CONFIG_WLAN_BCN_RECV_FEATURE=y
+CONFIG_WLAN_BMISS=y
+CONFIG_WLAN_CE_INTERRUPT_THRESHOLD_CONFIG=y
+CONFIG_WLAN_CFR_ENABLE=y
+CONFIG_WLAN_CLD_DEV_PM_QOS=y
+CONFIG_WLAN_CLD_PM_QOS=y
+CONFIG_WLAN_CONV_SPECTRAL_ENABLE=y
+CONFIG_WLAN_CUSTOM_DSCP_UP_MAP=y
+CONFIG_WLAN_DEBUG_CRASH_INJECT=y
+CONFIG_WLAN_DEBUG_LINK_VOTE=y
+CONFIG_WLAN_DEBUG_VERSION=y
+CONFIG_WLAN_DEBUGFS=y
+CONFIG_WLAN_DFS_MASTER_ENABLE=y
+CONFIG_WLAN_DFS_STATIC_MEM_ALLOC=y
+CONFIG_WLAN_DIAG_VERSION=y
+CONFIG_WLAN_DL_MODES=y
+CONFIG_WLAN_DP_DISABLE_TCL_CMD_CRED_SRNG=y
+CONFIG_WLAN_DP_DISABLE_TCL_STATUS_SRNG=y
+CONFIG_WLAN_DP_PENDING_MEM_FLUSH=y
+CONFIG_WLAN_DP_PER_RING_TYPE_CONFIG=y
+CONFIG_WLAN_DP_SRNG_USAGE_WM_TRACKING=y
+CONFIG_WLAN_DYNAMIC_CVM=y
+CONFIG_WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY=y
+CONFIG_WLAN_ENH_CFR_ENABLE=y
+CONFIG_WLAN_FEATURE_11AX=y
+CONFIG_WLAN_FEATURE_11BE=y
+CONFIG_WLAN_FEATURE_11BE_MLO=y
+CONFIG_WLAN_HDD_MULTI_VDEV_SINGLE_NDEV=y
+CONFIG_WLAN_FEATURE_ACTION_OUI=y
+CONFIG_WLAN_FEATURE_BIG_DATA_STATS=y
+CONFIG_WLAN_FEATURE_CAL_FAILURE_TRIGGER=y
+CONFIG_WLAN_FEATURE_COAP=y
+CONFIG_WLAN_FEATURE_COEX_DBAM=y
+CONFIG_WLAN_FEATURE_DFS_OFFLOAD=y
+CONFIG_WLAN_FEATURE_DISA=y
+CONFIG_WLAN_FEATURE_DP_BUS_BANDWIDTH=y
+CONFIG_WLAN_FEATURE_DP_EVENT_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_RX_THREADS=y
+CONFIG_WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE=y
+CONFIG_WLAN_FEATURE_ELNA=y
+CONFIG_WLAN_FEATURE_FILS=y
+CONFIG_WLAN_FEATURE_FIPS=y
+CONFIG_WLAN_FEATURE_GET_USABLE_CHAN_LIST=y
+CONFIG_WLAN_FEATURE_ICMP_OFFLOAD=y
+CONFIG_WLAN_FEATURE_IGMP_OFFLOAD=y
+CONFIG_WLAN_FEATURE_LINK_LAYER_STATS=y
+CONFIG_WLAN_FEATURE_LPSS=y
+CONFIG_WLAN_FEATURE_LRO_CTX_IN_CB=y
+CONFIG_WLAN_FEATURE_MBSSID=y
+CONFIG_WLAN_FEATURE_MCC_QUOTA=y
+CONFIG_WLAN_FEATURE_MDNS_OFFLOAD=y
+CONFIG_WLAN_FEATURE_MEDIUM_ASSESS=y
+CONFIG_WLAN_FEATURE_MIB_STATS=y
+CONFIG_WLAN_FEATURE_NEAR_FULL_IRQ=y
+CONFIG_WLAN_FEATURE_P2P_DEBUG=y
+CONFIG_WLAN_FEATURE_P2P_P2P_STA=y
+CONFIG_WLAN_FEATURE_PACKET_FILTERING=y
+CONFIG_WLAN_FEATURE_PEER_TXQ_FLUSH_CONF=y
+CONFIG_WLAN_FEATURE_ROAM_INFO_STATS=y
+CONFIG_WLAN_FEATURE_RX_BUFFER_POOL=y
+CONFIG_WLAN_FEATURE_RX_SOFTIRQ_TIME_LIMIT=y
+CONFIG_WLAN_FEATURE_SAE=y
+CONFIG_WLAN_FEATURE_SAP_ACS_OPTIMIZE=y
+CONFIG_WLAN_FEATURE_SARV1_TO_SARV2=y
+CONFIG_WLAN_FEATURE_SR=y
+CONFIG_WLAN_FEATURE_TWT=y
+CONFIG_WLAN_FEATURE_WMI_DIAG_OVER_CE7=y
+CONFIG_WLAN_FREQ_LIST=y
+CONFIG_WLAN_FW_OFFLOAD=y
+CONFIG_WLAN_GTX_BW_MASK=y
+CONFIG_WLAN_HANG_EVENT=y
+CONFIG_WLAN_LOG_DEBUG=y
+CONFIG_WLAN_LOG_ENTER=y
+CONFIG_WLAN_LOG_ERROR=y
+CONFIG_WLAN_LOG_EXIT=y
+CONFIG_WLAN_LOG_FATAL=y
+CONFIG_WLAN_LOG_INFO=y
+CONFIG_WLAN_LOG_WARN=y
+CONFIG_WLAN_LOGGING_SOCK_SVC=y
+CONFIG_WLAN_MWS_INFO_DEBUGFS=y
+CONFIG_WLAN_NAPI=y
+CONFIG_WLAN_NS_OFFLOAD=y
+CONFIG_WLAN_NUD_TRACKING=y
+CONFIG_WLAN_OFFLOAD_PACKETS=y
+CONFIG_WLAN_OPEN_P2P_INTERFACE=y
+CONFIG_WLAN_PDEV_VDEV_SEND_MULTI_PARAM=y
+CONFIG_WLAN_PMO_ENABLE=y
+CONFIG_WLAN_POLICY_MGR_ENABLE=y
+CONFIG_WLAN_POWER_DEBUG=y
+CONFIG_WLAN_REASSOC=y
+CONFIG_WLAN_RX_MON_PARSE_CMN_USER_INFO=y
+CONFIG_WLAN_SCAN_DISABLE=y
+CONFIG_WLAN_SKIP_BAR_UPDATE=y
+CONFIG_WLAN_SUPPORT_DATA_STALL=y
+CONFIG_WLAN_SYNC_TSF=y
+CONFIG_WLAN_SYNC_TSF_PLUS=y
+CONFIG_WLAN_SYNC_TSF_TIMER=y
+CONFIG_WLAN_SYSFS=y
+CONFIG_WLAN_SYSFS_CHANNEL=y
+CONFIG_WLAN_SYSFS_CONNECT_INFO=y
+CONFIG_WLAN_SYSFS_DCM=y
+CONFIG_WLAN_SYSFS_DFSNOL=y
+CONFIG_WLAN_SYSFS_DP_STATS=y
+CONFIG_WLAN_SYSFS_DP_TRACE=y
+CONFIG_WLAN_SYSFS_EHT_RATE=y
+CONFIG_WLAN_SYSFS_FW_MODE_CFG=y
+CONFIG_WLAN_SYSFS_HE_BSS_COLOR=y
+CONFIG_WLAN_SYSFS_LOG_BUFFER=y
+CONFIG_WLAN_SYSFS_MEM_STATS=y
+CONFIG_WLAN_SYSFS_MONITOR_MODE_CHANNEL=y
+CONFIG_WLAN_SYSFS_RADAR=y
+CONFIG_WLAN_SYSFS_RANGE_EXT=y
+CONFIG_WLAN_SYSFS_RTS_CTS=y
+CONFIG_WLAN_SYSFS_SCAN_CFG=y
+CONFIG_WLAN_SYSFS_STA_INFO=y
+CONFIG_WLAN_SYSFS_STATS=y
+CONFIG_WLAN_SYSFS_TDLS_PEERS=y
+CONFIG_WLAN_SYSFS_TEMPERATURE=y
+CONFIG_WLAN_SYSFS_TX_STBC=y
+CONFIG_WLAN_SYSFS_WLAN_DBG=y
+CONFIG_WLAN_SYSFS_BITRATES=y
+CONFIG_WLAN_SYSFS_RF_TEST_MODE=y
+CONFIG_WLAN_THERMAL_CFG=y
+CONFIG_WLAN_THERMAL_MULTI_CLIENT_SUPPORT=y
+CONFIG_WLAN_TRACEPOINTS=y
+CONFIG_WLAN_TSF_AUTO_REPORT=y
+CONFIG_WLAN_TSF_UPLINK_DELAY=y
+CONFIG_WLAN_TX_LATENCY_STATS=y
+CONFIG_WLAN_TWT_CONVERGED=y
+CONFIG_WLAN_TWT_SAP_PDEV_COUNT=y
+CONFIG_WLAN_TWT_SAP_STA_COUNT=y
+CONFIG_WLAN_TX_FLOW_CONTROL_V2=y
+CONFIG_WLAN_TXRX_FW_ST_RST=y
+CONFIG_WLAN_TXRX_FW_STATS=y
+CONFIG_WLAN_TXRX_STATS=y
+CONFIG_WLAN_UMAC_MLO_MAX_DEV=3
+CONFIG_WLAN_VENDOR_HANDOFF_CONTROL=y
+CONFIG_WLAN_WBUFF=y
+CONFIG_WLAN_WOW_ITO=y
+CONFIG_WLAN_WOWL_ADD_PTRN=y
+CONFIG_WLAN_WOWL_DEL_PTRN=y
+CONFIG_WMI_BCN_OFFLOAD=y
+CONFIG_WMI_CMD_STRINGS=y
+CONFIG_WMI_CONCURRENCY_SUPPORT=y
+CONFIG_WMI_DBR_SUPPORT=y
+CONFIG_WMI_INTERFACE_EVENT_LOGGING=y
+CONFIG_WMI_ROAM_SUPPORT=y
+CONFIG_WMI_SEND_RECV_QMI=y
+CONFIG_WMI_STA_SUPPORT=y
+CONFIG_CFG80211_EXTERNAL_AUTH_MLO_SUPPORT=y
+CONFIG_CFG80211_EXT_FEATURE_SECURE_NAN=y
+CONFIG_WLAN_CTRL_NAME="wlan"
+CONFIG_MULTI_IF_NAME="peach_v2"
+CONFIG_NL80211_TESTMODE=y
+CONFIG_ENABLE_CE4_COMP_DISABLE_HTT_HTC_MISC_LIST=y
+CONFIG_WLAN_HOST_ARCH_ARM=y
+CONFIG_ARCH_MSM=y
+CONFIG_DP_TX_PACKET_INSPECT_FOR_ILP=y
+CONFIG_NUM_SOC_PERF_CLUSTER=2
+CONFIG_WLAN_OPEN_SOURCE=y
+CONFIG_QCA_WIFI_FTM_NL80211=y
+CONFIG_CFG80211_MLD_AP_STA_CONNECT_UPSTREAM_SUPPORT=y
+CONFIG_DP_MULTIPASS_SUPPORT=y
+CONFIG_WLAN_DP_VDEV_NO_SELF_PEER=y
+CONFIG_WLAN_FEATURE_AFFINITY_MGR=y
+CONFIG_WALT_GET_CPU_TAKEN_SUPPORT=y
+CONFIG_DP_MLO_LINK_STATS_SUPPORT=y
+CONFIG_HIF_DEBUG=y
+CONFIG_WLAN_OBJMGR_DEBUG=y
+CONFIG_WLAN_OBJMGR_REF_ID_TRACE=y
+CONFIG_WLAN_WARN_ON_ASSERT=y
+CONFIG_WLAN_DP_FEATURE_DEFERRED_REO_QDESC_DESTROY=y
+CONFIG_PANIC_ON_BUG=y
+CONFIG_FEATURE_WLAN_CH_AVOID_EXT=y
+CONFIG_CNSS2_SSR_DRIVER_DUMP=y
+CONFIG_BUS_AUTO_SUSPEND=y
+CONFIG_CNSS_OUT_OF_TREE=y
+CONFIG_SMP=y
+CONFIG_RPS=y
+CONFIG_BCN_RATECODE_ENABLE=y
+CONFIG_4_BYTES_TLV_TAG=y
+CONFIG_WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET=y
+CONFIG_WLAN_MULTI_CHIP_SUPPORT=y

+ 1 - 0
configs/sun_gki_peach_defconfig

@@ -18,6 +18,7 @@ CONFIG_CNSS_GENL_MODULE=y
 CONFIG_CNSS_KIWI=y
 CONFIG_CNSS_KIWI_V2=y
 CONFIG_CNSS_PEACH=y
+CONFIG_INCLUDE_HAL_PEACH=y
 CONFIG_CNSS_UTILS_MODULE=y
 CONFIG_CNSS_UTILS=y
 CONFIG_CONNECTIVITY_PKTLOG=y

+ 34 - 0
configs/volcano_consolidate_peach-v2_defconfig

@@ -0,0 +1,34 @@
+CONFIG_ALLOW_PKT_DROPPING=y
+CONFIG_ATH_DIAG_EXT_DIRECT=y
+CONFIG_DESC_TIMESTAMP_DEBUG_INFO=y
+CONFIG_DP_RX_REFILL_CPU_PERF_AFFINE_MASK=y
+CONFIG_DP_TX_COMP_RING_DESC_SANITY_CHECK=y
+CONFIG_DP_TX_HW_DESC_HISTORY=y
+CONFIG_DSC_DEBUG=y
+CONFIG_DSC_TEST=y
+CONFIG_ENABLE_QDF_PTR_HASH_DEBUG=y
+CONFIG_FEATURE_HIF_LATENCY_PROFILE_ENABLE=y
+CONFIG_FEATURE_UNIT_TEST_SUSPEND=y
+CONFIG_HAL_DEBUG=y
+CONFIG_HIF_CE_DEBUG_DATA_BUF=y
+CONFIG_HIF_CPU_PERF_AFFINE_MASK=y
+CONFIG_LEAK_DETECTION=y
+CONFIG_MAX_LOGS_PER_SEC=500
+CONFIG_ENABLE_MAX_LOGS_PER_SEC=y
+CONFIG_QDF_NBUF_HISTORY_SIZE=16384
+CONFIG_REGISTER_OP_DEBUG=y
+CONFIG_REO_QDESC_HISTORY=y
+CONFIG_RX_DESC_DEBUG_CHECK=y
+CONFIG_SCHED_HISTORY_SIZE=256
+CONFIG_ENABLE_SCHED_HISTORY_SIZE=y
+CONFIG_TALLOC_DEBUG=y
+CONFIG_UNIT_TEST=y
+CONFIG_WLAN_FEATURE_DP_CFG_EVENT_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_MON_STATUS_RING_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_RX_RING_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_TX_DESC_HISTORY=y
+CONFIG_WLAN_RECORD_RX_PADDR=y
+CONFIG_QDF_TEST=y
+CONFIG_DYNAMIC_DEBUG=y
+CONFIG_FEATURE_WLM_STATS=y
+CONFIG_WLAN_TRACE_HIDE_MAC_ADDRESS_DISABLE=y

+ 414 - 0
configs/volcano_gki_peach-v2_defconfig

@@ -0,0 +1,414 @@
+CONFIG_QCA_CLD_WLAN=y
+CONFIG_160MHZ_SUPPORT=y
+CONFIG_6G_SCAN_CHAN_SORT_ALGO=y
+CONFIG_ADAPTIVE_11R=y
+CONFIG_ANI_LEVEL_REQUEST=y
+CONFIG_AR900B=y
+CONFIG_ATH_11AC_TXCOMPACT=y
+CONFIG_ATH_BUS_PM=y
+CONFIG_ATH_PERF_PWR_OFFLOAD=y
+CONFIG_BAND_6GHZ=y
+CONFIG_BERYLLIUM=y
+CONFIG_CE_DISABLE_SRNG_TIMER_IRQ=y
+CONFIG_CFG_BMISS_OFFLOAD_MAX_VDEV=4
+CONFIG_CFG_MAX_STA_VDEVS=4
+CONFIG_CHECKSUM_OFFLOAD=y
+CONFIG_CHIP_VERSION=2
+CONFIG_CNSS_GENL_MODULE=y
+CONFIG_CNSS_KIWI=y
+CONFIG_CNSS_KIWI_V2=y
+CONFIG_CNSS_PEACH=y
+CONFIG_CNSS_PEACH_V2=y
+CONFIG_INCLUDE_HAL_PEACH=y
+CONFIG_CNSS_UTILS_MODULE=y
+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
+CONFIG_DELIVERY_TO_STACK_STATUS_CHECK=y
+CONFIG_DESC_DUP_DETECT_DEBUG=y
+CONFIG_DEVICE_FORCE_WAKE_ENABLE=y
+CONFIG_DIRECT_BUF_RX_ENABLE=y
+CONFIG_DISABLE_CHANNEL_LIST=y
+CONFIG_DISABLE_EAPOL_INTRABSS_FWD=y
+CONFIG_DISABLE_STATUS_RING_TIMER_WAR=y
+CONFIG_DP_BE_WAR=y
+CONFIG_DP_CON_MON_MSI_ENABLED=y
+CONFIG_DP_CON_MON_MSI_SKIP_SET=y
+CONFIG_DP_FEATURE_HW_COOKIE_CONVERSION=y
+CONFIG_DP_HW_COOKIE_CONVERT_EXCEPTION=y
+CONFIG_DP_HW_TX_DELAY_STATS_ENABLE=y
+CONFIG_DP_INTR_POLL_BASED=y
+CONFIG_DP_LFR=y
+CONFIG_DP_MEM_PRE_ALLOC=y
+CONFIG_DP_PKT_ADD_TIMESTAMP=y
+CONFIG_DP_PKT_STATS_PER_LMAC=y
+CONFIG_DP_RX_BUFFER_POOL_ALLOC_THRES=5
+CONFIG_DP_RX_BUFFER_POOL_SIZE=128
+CONFIG_DP_RX_REFILL_BUFF_POOL_SIZE=2048
+CONFIG_DP_RX_REFILL_THRD_THRESHOLD=512
+CONFIG_DP_RX_DROP_RAW_FRM=y
+CONFIG_DP_RX_PKT_NO_PEER_DELIVER=y
+CONFIG_DP_RX_SPECIAL_FRAME_NEED=y
+CONFIG_DP_TRACE=y
+CONFIG_DP_TRAFFIC_END_INDICATION=y
+CONFIG_DP_TXRX_SOC_ATTACH=y
+CONFIG_TX_NSS_STATS_SUPPORT=y
+CONFIG_DP_USE_REDUCED_PEER_ID_FIELD_WIDTH=y
+CONFIG_DP_WAR_INVALID_FIRST_MSDU_FLAG=y
+CONFIG_DUP_RX_DESC_WAR=y
+CONFIG_DYNAMIC_RX_AGGREGATION=y
+CONFIG_EMULATION_2_0=y
+CONFIG_ENABLE_HAL_REG_WR_HISTORY=y
+CONFIG_ENABLE_HAL_SOC_STATS=y
+CONFIG_ENABLE_MTRACE_LOG=y
+CONFIG_ENABLE_SMMU_S1_TRANSLATION=y
+CONFIG_FEATURE_ACTIVE_TOS=y
+CONFIG_FEATURE_ALIGN_STATS_FROM_DP=y
+CONFIG_FEATURE_BECN_STATS=y
+CONFIG_FEATURE_BSS_TRANSITION=y
+CONFIG_FEATURE_BUS_BANDWIDTH_MGR=y
+CONFIG_FEATURE_CLUB_LL_STATS_AND_GET_STATION=y
+CONFIG_FEATURE_COEX=y
+CONFIG_FEATURE_CONCURRENCY_MATRIX=y
+CONFIG_FEATURE_DELAYED_PEER_OBJ_DESTROY=y
+CONFIG_FEATURE_DENYLIST_MGR=y
+CONFIG_FEATURE_EPPING=y
+CONFIG_FEATURE_FORCE_WAKE=y
+CONFIG_FEATURE_FW_LOG_PARSING=y
+CONFIG_FEATURE_GPIO_CFG=y
+CONFIG_FEATURE_HAL_DELAYED_REG_WRITE=y
+CONFIG_FEATURE_HTC_CREDIT_HISTORY=y
+CONFIG_FEATURE_INTEROP_ISSUES_AP=y
+CONFIG_FEATURE_MEMDUMP_ENABLE=y
+CONFIG_FEATURE_MONITOR_MODE_SUPPORT=y
+CONFIG_FEATURE_MSCS=y
+CONFIG_FEATURE_NO_DBS_INTRABAND_MCC_SUPPORT=y
+CONFIG_FEATURE_OEM_DATA=y
+CONFIG_FEATURE_OTA_TEST=y
+CONFIG_FEATURE_P2P_LISTEN_OFFLOAD=y
+CONFIG_FEATURE_RADAR_HISTORY=y
+CONFIG_FEATURE_ROAM_DEBUG=y
+CONFIG_FEATURE_RSSI_MONITOR=y
+CONFIG_FEATURE_RX_LINKSPEED_ROAM_TRIGGER=y
+CONFIG_FEATURE_SAP_COND_CHAN_SWITCH=y
+CONFIG_FEATURE_SAR_LIMITS=y
+CONFIG_FEATURE_SET=y
+CONFIG_FEATURE_STATION_INFO=y
+CONFIG_FEATURE_STATS_EXT=y
+CONFIG_FEATURE_STATS_EXT_V2=y
+CONFIG_FEATURE_TSO=y
+CONFIG_FEATURE_TSO_STATS=y
+CONFIG_FEATURE_TX_POWER=y
+CONFIG_FEATURE_VDEV_OPS_WAKELOCK=y
+CONFIG_FEATURE_WLAN_LPHB=y
+CONFIG_FEATURE_WLAN_PRE_CAC=y
+CONFIG_FEATURE_WLAN_RA_FILTERING=y
+CONFIG_FEATURE_WLAN_SCAN_PNO=y
+CONFIG_FEATURE_WLAN_WAPI=y
+CONFIG_FIX_TXDMA_LIMITATION=y
+CONFIG_FOURTH_CONNECTION=y
+CONFIG_FIFTH_CONNECTION=y
+CONFIG_FW_THERMAL_THROTTLE=y
+CONFIG_GET_DRIVER_MODE=y
+CONFIG_GTK_OFFLOAD=y
+CONFIG_HAL_DISABLE_NON_BA_2K_JUMP_ERROR=y
+CONFIG_HANDLE_BC_EAP_TX_FRM=y
+CONFIG_HANDLE_RX_REROUTE_ERR=y
+CONFIG_HASTINGS_BT_WAR=y
+CONFIG_HDD_INIT_WITH_RTNL_LOCK=y
+CONFIG_HIF_PCI=y
+CONFIG_HIF_REG_WINDOW_SUPPORT=y
+CONFIG_HOST_OPCLASS=y
+CONFIG_HTT_PADDR64=y
+CONFIG_IPA_OFFLOAD=y
+CONFIG_IPA_OPT_WIFI_DP=y
+CONFIG_IPA_SET_RESET_TX_DB_PA=y
+CONFIG_KIWI_HEADERS_DEF=y
+CONFIG_LFR_SUBNET_DETECTION=y
+CONFIG_LINUX_QCMBR=y
+CONFIG_LITTLE_ENDIAN=y
+CONFIG_LL_DP_SUPPORT=y
+CONFIG_LTE_COEX=y
+CONFIG_MARK_ICMP_REQ_TO_FW=y
+CONFIG_MAX_ALLOC_PAGE_SIZE=y
+CONFIG_MCC_TO_SCC_SWITCH=y
+CONFIG_MON_ENABLE_DROP_FOR_MAC=y
+CONFIG_MON_ENABLE_DROP_FOR_NON_MON_PMAC=y
+CONFIG_MORE_TX_DESC=y
+CONFIG_MULTI_CLIENT_LL_SUPPORT=y
+CONFIG_NO_RX_PKT_HDR_TLV=y
+CONFIG_WORD_BASED_TLV=y
+CONFIG_DP_RX_BUFFER_OPTIMIZATION=y
+CONFIG_OBSS_PD=y
+CONFIG_OFDM_SCRAMBLER_SEED=y
+CONFIG_PCI_LINK_STATUS_SANITY=y
+CONFIG_PCIE_GEN_SWITCH=y
+CONFIG_PEER_PROTECTED_ACCESS=y
+CONFIG_PKTLOG_HAS_SPECIFIC_DATA=y
+CONFIG_PLD_PCIE_CNSS_FLAG=y
+CONFIG_PLD_PCIE_INIT_FLAG=y
+CONFIG_POWER_MANAGEMENT_OFFLOAD=y
+CONFIG_PTT_SOCK_SVC_ENABLE=y
+CONFIG_QCA_DFS_BW_PUNCTURE=y
+CONFIG_QCA_GET_TSF_VIA_REG=y
+CONFIG_QCA_MONITOR_PKT_SUPPORT=y
+CONFIG_QCA_SUPPORT_TX_MIN_RATES_FOR_SPECIAL_FRAMES=y
+CONFIG_QCA_SUPPORT_TX_THROTTLE=y
+CONFIG_QCA_WIFI_FTM=y
+CONFIG_QCA_WIFI_KIWI=y
+CONFIG_QCA_WIFI_MONITOR_MODE_NO_MSDU_START_TLV_SUPPORT=y
+CONFIG_QCA_WIFI_QCA8074=y
+CONFIG_QCA_WIFI_QCA8074_VP=y
+CONFIG_QCACLD_FEATURE_APF=y
+CONFIG_QCACLD_FEATURE_FW_STATE=y
+CONFIG_QCACLD_FEATURE_GAP_LL_PS_MODE=y
+CONFIG_QCACLD_FEATURE_GREEN_AP=y
+CONFIG_QCACLD_FEATURE_NAN=y
+CONFIG_QCACLD_RX_DESC_MULTI_PAGE_ALLOC=y
+CONFIG_QCACLD_WLAN_CONNECTIVITY_DIAG_EVENT=y
+CONFIG_QCACLD_WLAN_LFR3=y
+CONFIG_QCOM_ESE=y
+CONFIG_QCOM_LTE_COEX=y
+CONFIG_QCOM_TDLS=y
+CONFIG_QCOM_VOWIFI_11R=y
+CONFIG_QMI_SUPPORT=y
+CONFIG_REG_CLIENT=y
+CONFIG_REMOVE_PKT_LOG=y
+CONFIG_REO_DESC_DEFER_FREE=y
+CONFIG_RX_DEFRAG_DO_NOT_REINJECT=y
+CONFIG_RX_DESC_SANITY_WAR=y
+CONFIG_RX_FISA=y
+CONFIG_RX_HASH_DEBUG=y
+CONFIG_RX_OL=y
+CONFIG_RXDMA_ERR_PKT_DROP=y
+CONFIG_SAE_SINGLE_PMK=y
+CONFIG_SAP_AVOID_ACS_FREQ_LIST=y
+CONFIG_SAP_DHCP_FW_IND=y
+CONFIG_SAR_SAFETY_FEATURE=y
+CONFIG_SCALE_INCLUDES=y
+CONFIG_SERIALIZE_QUEUE_SETUP=y
+CONFIG_SHADOW_V3=y
+CONFIG_SMMU_S1_UNMAP=y
+CONFIG_SOFTAP_CHANNEL_RANGE=y
+CONFIG_SUPPORT_11AX=y
+CONFIG_SYSTEM_PM_CHECK=y
+CONFIG_TARGET_11D_SCAN=y
+CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC=y
+CONFIG_THERMAL_STATS_SUPPORT=y
+CONFIG_TRACE_RECORD_FEATURE=y
+CONFIG_TSO_DEBUG_LOG_ENABLE=y
+CONFIG_TX_ADDR_INDEX_SEARCH=y
+CONFIG_TX_MULTI_TCL=y
+CONFIG_TX_MULTIQ_PER_AC=y
+CONFIG_TX_PER_PDEV_DESC_POOL=y
+CONFIG_TX_TID_OVERRIDE=y
+CONFIG_VERBOSE_DEBUG=y
+CONFIG_WAPI_BIG_ENDIAN=y
+CONFIG_WCNSS_MEM_PRE_ALLOC_MODULE=y
+CONFIG_WCNSS_MEM_PRE_ALLOC=y
+CONFIG_WDI_EVENT_ENABLE=y
+CONFIG_WDI3_IPA_OVER_GSI=y
+CONFIG_WIFI_MONITOR_SUPPORT=y
+CONFIG_WIFI_POS_CONVERGED=y
+CONFIG_WIFI_POS_PASN=y
+CONFIG_WINDOW_REG_PLD_LOCK_ENABLE=y
+CONFIG_WLAN_BCN_RECV_FEATURE=y
+CONFIG_WLAN_BMISS=y
+CONFIG_WLAN_CE_INTERRUPT_THRESHOLD_CONFIG=y
+CONFIG_WLAN_CFR_ENABLE=y
+CONFIG_WLAN_CLD_DEV_PM_QOS=y
+CONFIG_WLAN_CLD_PM_QOS=y
+CONFIG_WLAN_CONV_SPECTRAL_ENABLE=y
+CONFIG_WLAN_CUSTOM_DSCP_UP_MAP=y
+CONFIG_WLAN_DEBUG_CRASH_INJECT=y
+CONFIG_WLAN_DEBUG_LINK_VOTE=y
+CONFIG_WLAN_DEBUG_VERSION=y
+CONFIG_WLAN_DEBUGFS=y
+CONFIG_WLAN_DFS_MASTER_ENABLE=y
+CONFIG_WLAN_DFS_STATIC_MEM_ALLOC=y
+CONFIG_WLAN_DIAG_VERSION=y
+CONFIG_WLAN_DL_MODES=y
+CONFIG_WLAN_DP_DISABLE_TCL_CMD_CRED_SRNG=y
+CONFIG_WLAN_DP_DISABLE_TCL_STATUS_SRNG=y
+CONFIG_WLAN_DP_PENDING_MEM_FLUSH=y
+CONFIG_WLAN_DP_PER_RING_TYPE_CONFIG=y
+CONFIG_WLAN_DP_SRNG_USAGE_WM_TRACKING=y
+CONFIG_WLAN_DYNAMIC_CVM=y
+CONFIG_WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY=y
+CONFIG_WLAN_ENH_CFR_ENABLE=y
+CONFIG_WLAN_FEATURE_11AX=y
+CONFIG_WLAN_FEATURE_11BE=y
+CONFIG_WLAN_FEATURE_11BE_MLO=y
+CONFIG_WLAN_HDD_MULTI_VDEV_SINGLE_NDEV=y
+CONFIG_WLAN_FEATURE_ACTION_OUI=y
+CONFIG_WLAN_FEATURE_BIG_DATA_STATS=y
+CONFIG_WLAN_FEATURE_CAL_FAILURE_TRIGGER=y
+CONFIG_WLAN_FEATURE_COAP=y
+CONFIG_WLAN_FEATURE_COEX_DBAM=y
+CONFIG_WLAN_FEATURE_DFS_OFFLOAD=y
+CONFIG_WLAN_FEATURE_DISA=y
+CONFIG_WLAN_FEATURE_DP_BUS_BANDWIDTH=y
+CONFIG_WLAN_FEATURE_DP_EVENT_HISTORY=y
+CONFIG_WLAN_FEATURE_DP_RX_THREADS=y
+CONFIG_WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE=y
+CONFIG_WLAN_FEATURE_ELNA=y
+CONFIG_WLAN_FEATURE_FILS=y
+CONFIG_WLAN_FEATURE_FIPS=y
+CONFIG_WLAN_FEATURE_GET_USABLE_CHAN_LIST=y
+CONFIG_WLAN_FEATURE_ICMP_OFFLOAD=y
+CONFIG_WLAN_FEATURE_IGMP_OFFLOAD=y
+CONFIG_WLAN_FEATURE_LINK_LAYER_STATS=y
+CONFIG_WLAN_FEATURE_LPSS=y
+CONFIG_WLAN_FEATURE_LRO_CTX_IN_CB=y
+CONFIG_WLAN_FEATURE_MBSSID=y
+CONFIG_WLAN_FEATURE_MCC_QUOTA=y
+CONFIG_WLAN_FEATURE_MDNS_OFFLOAD=y
+CONFIG_WLAN_FEATURE_MEDIUM_ASSESS=y
+CONFIG_WLAN_FEATURE_MIB_STATS=y
+CONFIG_WLAN_FEATURE_NEAR_FULL_IRQ=y
+CONFIG_WLAN_FEATURE_P2P_DEBUG=y
+CONFIG_WLAN_FEATURE_P2P_P2P_STA=y
+CONFIG_WLAN_FEATURE_PACKET_FILTERING=y
+CONFIG_WLAN_FEATURE_PEER_TXQ_FLUSH_CONF=y
+CONFIG_WLAN_FEATURE_ROAM_INFO_STATS=y
+CONFIG_WLAN_FEATURE_RX_BUFFER_POOL=y
+CONFIG_WLAN_FEATURE_RX_SOFTIRQ_TIME_LIMIT=y
+CONFIG_WLAN_FEATURE_SAE=y
+CONFIG_WLAN_FEATURE_SAP_ACS_OPTIMIZE=y
+CONFIG_WLAN_FEATURE_SARV1_TO_SARV2=y
+CONFIG_WLAN_FEATURE_SR=y
+CONFIG_WLAN_FEATURE_TWT=y
+CONFIG_WLAN_FEATURE_WMI_DIAG_OVER_CE7=y
+CONFIG_WLAN_FREQ_LIST=y
+CONFIG_WLAN_FW_OFFLOAD=y
+CONFIG_WLAN_GTX_BW_MASK=y
+CONFIG_WLAN_HANG_EVENT=y
+CONFIG_WLAN_LOG_DEBUG=y
+CONFIG_WLAN_LOG_ENTER=y
+CONFIG_WLAN_LOG_ERROR=y
+CONFIG_WLAN_LOG_EXIT=y
+CONFIG_WLAN_LOG_FATAL=y
+CONFIG_WLAN_LOG_INFO=y
+CONFIG_WLAN_LOG_WARN=y
+CONFIG_WLAN_LOGGING_SOCK_SVC=y
+CONFIG_WLAN_MWS_INFO_DEBUGFS=y
+CONFIG_WLAN_NAPI=y
+CONFIG_WLAN_NS_OFFLOAD=y
+CONFIG_WLAN_NUD_TRACKING=y
+CONFIG_WLAN_OFFLOAD_PACKETS=y
+CONFIG_WLAN_OPEN_P2P_INTERFACE=y
+CONFIG_WLAN_PDEV_VDEV_SEND_MULTI_PARAM=y
+CONFIG_WLAN_PMO_ENABLE=y
+CONFIG_WLAN_POLICY_MGR_ENABLE=y
+CONFIG_WLAN_POWER_DEBUG=y
+CONFIG_WLAN_REASSOC=y
+CONFIG_WLAN_RX_MON_PARSE_CMN_USER_INFO=y
+CONFIG_WLAN_SCAN_DISABLE=y
+CONFIG_WLAN_SKIP_BAR_UPDATE=y
+CONFIG_WLAN_SUPPORT_DATA_STALL=y
+CONFIG_WLAN_SYNC_TSF=y
+CONFIG_WLAN_SYNC_TSF_PLUS=y
+CONFIG_WLAN_SYNC_TSF_TIMER=y
+CONFIG_WLAN_SYSFS=y
+CONFIG_WLAN_SYSFS_CHANNEL=y
+CONFIG_WLAN_SYSFS_CONNECT_INFO=y
+CONFIG_WLAN_SYSFS_DCM=y
+CONFIG_WLAN_SYSFS_DFSNOL=y
+CONFIG_WLAN_SYSFS_DP_STATS=y
+CONFIG_WLAN_SYSFS_DP_TRACE=y
+CONFIG_WLAN_SYSFS_EHT_RATE=y
+CONFIG_WLAN_SYSFS_FW_MODE_CFG=y
+CONFIG_WLAN_SYSFS_HE_BSS_COLOR=y
+CONFIG_WLAN_SYSFS_LOG_BUFFER=y
+CONFIG_WLAN_SYSFS_MEM_STATS=y
+CONFIG_WLAN_SYSFS_MONITOR_MODE_CHANNEL=y
+CONFIG_WLAN_SYSFS_RADAR=y
+CONFIG_WLAN_SYSFS_RANGE_EXT=y
+CONFIG_WLAN_SYSFS_RTS_CTS=y
+CONFIG_WLAN_SYSFS_SCAN_CFG=y
+CONFIG_WLAN_SYSFS_STA_INFO=y
+CONFIG_WLAN_SYSFS_STATS=y
+CONFIG_WLAN_SYSFS_TDLS_PEERS=y
+CONFIG_WLAN_SYSFS_TEMPERATURE=y
+CONFIG_WLAN_SYSFS_TX_STBC=y
+CONFIG_WLAN_SYSFS_WLAN_DBG=y
+CONFIG_WLAN_SYSFS_BITRATES=y
+CONFIG_WLAN_SYSFS_RF_TEST_MODE=y
+CONFIG_WLAN_THERMAL_CFG=y
+CONFIG_WLAN_THERMAL_MULTI_CLIENT_SUPPORT=y
+CONFIG_WLAN_TRACEPOINTS=y
+CONFIG_WLAN_TSF_AUTO_REPORT=y
+CONFIG_WLAN_TSF_UPLINK_DELAY=y
+CONFIG_WLAN_TX_LATENCY_STATS=y
+CONFIG_WLAN_FEATURE_UL_JITTER=y
+CONFIG_WLAN_TWT_CONVERGED=y
+CONFIG_WLAN_TWT_SAP_PDEV_COUNT=y
+CONFIG_WLAN_TWT_SAP_STA_COUNT=y
+CONFIG_WLAN_TX_FLOW_CONTROL_V2=y
+CONFIG_WLAN_TXRX_FW_ST_RST=y
+CONFIG_WLAN_TXRX_FW_STATS=y
+CONFIG_WLAN_TXRX_STATS=y
+CONFIG_WLAN_UMAC_MLO_MAX_DEV=3
+CONFIG_WLAN_VENDOR_HANDOFF_CONTROL=y
+CONFIG_WLAN_WBUFF=y
+CONFIG_WLAN_WOW_ITO=y
+CONFIG_WLAN_WOWL_ADD_PTRN=y
+CONFIG_WLAN_WOWL_DEL_PTRN=y
+CONFIG_WMI_BCN_OFFLOAD=y
+CONFIG_WMI_CMD_STRINGS=y
+CONFIG_WMI_CONCURRENCY_SUPPORT=y
+CONFIG_WMI_DBR_SUPPORT=y
+CONFIG_WMI_INTERFACE_EVENT_LOGGING=y
+CONFIG_WMI_ROAM_SUPPORT=y
+CONFIG_WMI_SEND_RECV_QMI=y
+CONFIG_WMI_STA_SUPPORT=y
+CONFIG_CFG80211_EXTERNAL_AUTH_MLO_SUPPORT=y
+CONFIG_CFG80211_EXT_FEATURE_SECURE_NAN=y
+CONFIG_WLAN_CTRL_NAME="wlan"
+CONFIG_MULTI_IF_NAME="peach_v2"
+CONFIG_ENABLE_CE4_COMP_DISABLE_HTT_HTC_MISC_LIST=y
+CONFIG_WLAN_HOST_ARCH_ARM=y
+CONFIG_ARCH_MSM=y
+CONFIG_DP_TX_PACKET_INSPECT_FOR_ILP=y
+CONFIG_NUM_SOC_PERF_CLUSTER=2
+CONFIG_WLAN_OPEN_SOURCE=y
+CONFIG_QCA_WIFI_FTM_NL80211=y
+CONFIG_CFG80211_MLD_AP_STA_CONNECT_UPSTREAM_SUPPORT=y
+CONFIG_DP_MULTIPASS_SUPPORT=y
+CONFIG_WLAN_DP_VDEV_NO_SELF_PEER=y
+CONFIG_WLAN_FEATURE_AFFINITY_MGR=y
+CONFIG_WALT_GET_CPU_TAKEN_SUPPORT=y
+CONFIG_DP_MLO_LINK_STATS_SUPPORT=y
+CONFIG_WLAN_FEATURE_LL_LT_SAP=y
+CONFIG_WLAN_FEATURE_VDEV_DCS=y
+CONFIG_HIF_DEBUG=y
+CONFIG_WLAN_OBJMGR_DEBUG=y
+CONFIG_WLAN_OBJMGR_REF_ID_TRACE=y
+CONFIG_WLAN_WARN_ON_ASSERT=y
+CONFIG_WLAN_DP_FEATURE_DEFERRED_REO_QDESC_DESTROY=y
+CONFIG_PANIC_ON_BUG=y
+CONFIG_FEATURE_WLAN_CH_AVOID_EXT=y
+CONFIG_CNSS2_SSR_DRIVER_DUMP=y
+CONFIG_BUS_AUTO_SUSPEND=y
+CONFIG_CNSS_OUT_OF_TREE=y
+CONFIG_SMP=y
+CONFIG_RPS=y
+CONFIG_BCN_RATECODE_ENABLE=y
+CONFIG_4_BYTES_TLV_TAG=y
+CONFIG_WLAN_FEATURE_MARK_FIRST_WAKEUP_PACKET=y
+CONFIG_WLAN_MULTI_CHIP_SUPPORT=y
+CONFIG_FEATURE_SMEM_MAILBOX=y
+CONFIG_QMI_COMPONENT_ENABLE=y
+CONFIG_QMI_WFDS=y
+CONFIG_WLAN_DP_FEATURE_STC=y
+CONFIG_WLAN_FEATURE_EMLSR=y
+CONFIG_FEATURE_DIRECT_LINK=y
+CONFIG_DP_SWLM=y
+CONFIG_FEATURE_EPM=y
+CONFIG_WLAN_FEATURE_LATENCY_SENSITIVE_REO=y
+CONFIG_IPA_OPT_WIFI_DP_CTRL=y

+ 25 - 0
core/hdd/inc/wlan_hdd_main.h

@@ -5566,4 +5566,29 @@ hdd_lpc_is_work_scheduled(struct hdd_context *hdd_ctx)
  */
 bool hdd_allow_new_intf(struct hdd_context *hdd_ctx,
 			enum QDF_OPMODE mode);
+
+#ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
+/**
+ * wlan_hdd_is_link_switch_in_progress() - Function to check if there is any
+ * link switch in progress
+ * @link_info: Link info pointer in HDD adapter
+ *
+ * Return: true if link switch in progress, false otherwise
+ */
+bool wlan_hdd_is_link_switch_in_progress(struct wlan_hdd_link_info *link_info);
+#else
+static inline bool
+wlan_hdd_is_link_switch_in_progress(struct wlan_hdd_link_info *link_info)
+{
+	return false;
+}
+#endif
+
+/**
+ * wlan_hdd_is_mlo_connection() - Check if connection is legacy or mlo
+ * @link_info: Link info pointer in HDD adapter
+ *
+ * Return: True if MLO connection, else False
+ */
+bool wlan_hdd_is_mlo_connection(struct wlan_hdd_link_info *link_info);
 #endif /* end #if !defined(WLAN_HDD_MAIN_H) */

+ 7 - 1
core/hdd/src/wlan_hdd_cfg80211.c

@@ -19568,7 +19568,13 @@ hdd_send_usable_channel(struct hdd_context *hdd_ctx,
 		return -EINVAL;
 	}
 
-	skb_len += NLMSG_HDRLEN;
+	/**
+	 * As each nesting occupies NLMSG_HDRLEN size in the skb, add
+	 * NLMSG_HDRLEN worth space for each nesting.
+	 */
+	skb_len += NLMSG_HDRLEN * (count + 1);
+
+
 	skb = wlan_cfg80211_vendor_cmd_alloc_reply_skb(hdd_ctx->wiphy, skb_len);
 	if (!skb) {
 		hdd_info("wlan_cfg80211_vendor_cmd_alloc_reply_skb failed");

+ 7 - 3
core/hdd/src/wlan_hdd_ioctl.c

@@ -3508,7 +3508,7 @@ void hdd_get_roam_scan_ch_cb(hdd_handle_t hdd_handle,
 	osif_request_put(request);
 }
 
-static uint32_t
+static int
 hdd_get_roam_chan_from_fw(struct hdd_adapter *adapter, uint32_t *chan_list,
 			  uint8_t *num_channels)
 {
@@ -3578,7 +3578,7 @@ hdd_get_roam_scan_freq(struct hdd_adapter *adapter, mac_handle_t mac_handle,
 	if (is_roam_ch_from_fw_supported(adapter->hdd_ctx)) {
 		ret = hdd_get_roam_chan_from_fw(adapter, chan_list,
 						num_channels);
-		if (ret != QDF_STATUS_SUCCESS) {
+		if (ret) {
 			hdd_err("failed to get roam scan channel list from FW");
 			return -EFAULT;
 		}
@@ -6681,12 +6681,16 @@ static bool check_disable_channels(struct hdd_context *hdd_ctx,
 	    !hdd_ctx->original_channels->channel_info)
 		return false;
 
+	qdf_mutex_acquire(&hdd_ctx->cache_channel_lock);
 	num_channels = hdd_ctx->original_channels->num_channels;
 	for (i = 0; i < num_channels; i++) {
 		if (operating_freq ==
-		    hdd_ctx->original_channels->channel_info[i].freq)
+		    hdd_ctx->original_channels->channel_info[i].freq) {
+			qdf_mutex_release(&hdd_ctx->cache_channel_lock);
 			return true;
+		}
 	}
+	qdf_mutex_release(&hdd_ctx->cache_channel_lock);
 
 	return false;
 }

+ 56 - 8
core/hdd/src/wlan_hdd_main.c

@@ -3022,10 +3022,8 @@ int hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
 
 	status = ucfg_mlme_cfg_get_vht_tx_bfee_ant_supp(hdd_ctx->psoc,
 							&value);
-	if (QDF_IS_STATUS_ERROR(status)) {
-		status = false;
+	if (QDF_IS_STATUS_ERROR(status))
 		hdd_err("set tx_bfee_ant_supp failed");
-	}
 
 	status = ucfg_mlme_set_restricted_80p80_bw_supp(hdd_ctx->psoc,
 							cfg->restricted_80p80_bw_supp);
@@ -3036,10 +3034,8 @@ int hdd_update_tgt_cfg(hdd_handle_t hdd_handle, struct wma_tgt_cfg *cfg)
 	    !cfg->tx_bfee_8ss_enabled) {
 		status = ucfg_mlme_cfg_set_vht_tx_bfee_ant_supp(hdd_ctx->psoc,
 				MLME_VHT_CSN_BEAMFORMEE_ANT_SUPPORTED_FW_DEF);
-		if (QDF_IS_STATUS_ERROR(status)) {
-			status = false;
+		if (QDF_IS_STATUS_ERROR(status))
 			hdd_err("set tx_bfee_ant_supp failed");
-		}
 	}
 
 	hdd_update_tid_to_link_supported(hdd_ctx, &cfg->services);
@@ -6407,7 +6403,7 @@ hdd_set_derived_multicast_list(struct wlan_objmgr_psoc *psoc,
 			       struct pmo_mc_addr_list_params *mc_list_request,
 			       int *mc_count)
 {
-	int i = 0, j = 0, list_count = *mc_count;
+	uint8_t i = 0, j = 0, list_count = *mc_count;
 	struct qdf_mac_addr *peer_mc_addr_list = NULL;
 	uint8_t  driver_mc_cnt = 0;
 	uint32_t max_ndp_sessions = 0;
@@ -6423,7 +6419,8 @@ hdd_set_derived_multicast_list(struct wlan_objmgr_psoc *psoc,
 						 &peer_mc_addr_list[j]))
 				break;
 		}
-		if (i == list_count) {
+		if (i == list_count &&
+		    (list_count + driver_mc_cnt < PMO_MAX_MC_ADDR_LIST)) {
 			qdf_mem_copy(
 			   &(mc_list_request->mc_addr[list_count +
 						driver_mc_cnt].bytes),
@@ -22109,6 +22106,57 @@ int hdd_we_set_ch_width(struct wlan_hdd_link_info *link_info, int ch_width)
 	return -EINVAL;
 }
 
+#ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
+bool
+wlan_hdd_is_link_switch_in_progress(struct wlan_hdd_link_info *link_info)
+{
+	struct wlan_objmgr_vdev *vdev;
+	bool ret = false;
+
+	if (!link_info) {
+		hdd_err_rl("Invalid link info");
+		return ret;
+	}
+
+	if (!wlan_hdd_is_mlo_connection(link_info))
+		return ret;
+
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_STATS_ID);
+	if (!vdev) {
+		hdd_err("invalid vdev");
+		return ret;
+	}
+
+	ret = mlo_mgr_is_link_switch_in_progress(vdev);
+
+	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_STATS_ID);
+	return ret;
+}
+#endif
+
+bool wlan_hdd_is_mlo_connection(struct wlan_hdd_link_info *link_info)
+{
+	struct wlan_objmgr_vdev *vdev;
+	bool ret = false;
+
+	if (!link_info) {
+		hdd_err("Invalid link_info");
+		return ret;
+	}
+
+	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_STATS_ID);
+	if (!vdev) {
+		hdd_err("invalid vdev");
+		return ret;
+	}
+
+	if (wlan_vdev_mlme_is_mlo_vdev(vdev))
+		ret = true;
+
+	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_STATS_ID);
+	return ret;
+}
+
 /* Register the module init/exit functions */
 module_init(hdd_module_init);
 module_exit(hdd_module_exit);

+ 3 - 3
core/hdd/src/wlan_hdd_p2p.c

@@ -1464,7 +1464,7 @@ static uint32_t set_first_connection_operating_channel(
 	oper_chan_freq = hdd_get_operating_chan_freq(hdd_ctx, dev_mode);
 	if (!oper_chan_freq) {
 		hdd_err(" First adapter operating channel is invalid");
-		return -EINVAL;
+		return set_value;
 	}
 	operating_channel = wlan_reg_freq_to_chan(hdd_ctx->pdev,
 						  oper_chan_freq);
@@ -1504,9 +1504,9 @@ static uint32_t set_second_connection_operating_channel(
 						  policy_mgr_get_mcc_operating_channel(
 						  hdd_ctx->psoc, vdev_id));
 
-	if (operating_channel == 0) {
+	if (!operating_channel) {
 		hdd_err("Second adapter operating channel is invalid");
-		return -EINVAL;
+		return set_value;
 	}
 
 	hdd_info("Second connection channel No.:%d and quota:%dms",

+ 5 - 3
core/hdd/src/wlan_hdd_regulatory.c

@@ -1680,6 +1680,11 @@ static void hdd_country_change_update_sta(struct hdd_context *hdd_ctx)
 				 * continue to next statement
 				 */
 			case QDF_STA_MODE:
+				hdd_debug("Update vdev %d CAP IE", link_info->vdev_id);
+				sme_set_vdev_ies_per_band(hdd_ctx->mac_handle,
+							  link_info->vdev_id,
+							  QDF_STA_MODE);
+
 				sta_ctx =
 					WLAN_HDD_GET_STATION_CTX_PTR(link_info);
 				new_phy_mode = wlan_reg_get_max_phymode(pdev,
@@ -1718,9 +1723,6 @@ static void hdd_country_change_update_sta(struct hdd_context *hdd_ctx)
 							    pdev,
 							    link_info->vdev_id);
 				}
-				sme_set_vdev_ies_per_band(hdd_ctx->mac_handle,
-							  link_info->vdev_id,
-							  QDF_STA_MODE);
 				break;
 			default:
 				break;

+ 0 - 69
core/hdd/src/wlan_hdd_stats.c

@@ -465,35 +465,6 @@ int wlan_hdd_qmi_put_suspend(void)
 }
 #endif /* end if of WLAN_FEATURE_WMI_SEND_RECV_QMI */
 
-/*
- * wlan_hdd_is_mlo_connection() - Check if connection is legacy or mlo
- * @link_info: Link info pointer in HDD adapter
- *
- * Return: True if MLO connection, else False
- */
-static bool wlan_hdd_is_mlo_connection(struct wlan_hdd_link_info *link_info)
-{
-	struct wlan_objmgr_vdev *vdev;
-	bool ret = false;
-
-	if (!link_info) {
-		hdd_err("Invalid link_info");
-		return ret;
-	}
-
-	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_STATS_ID);
-	if (!vdev) {
-		hdd_err("invalid vdev");
-		return ret;
-	}
-
-	if (wlan_vdev_mlme_is_mlo_vdev(vdev))
-		ret = true;
-
-	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_STATS_ID);
-	return ret;
-}
-
 static struct wlan_hdd_link_info *
 hdd_get_link_info_by_bssid(struct hdd_context *hdd_ctx, const uint8_t *bssid)
 {
@@ -570,40 +541,6 @@ wlan_hdd_get_bss_peer_mld_mac(struct wlan_hdd_link_info *link_info,
 	return status;
 }
 
-#ifdef WLAN_FEATURE_11BE_MLO_ADV_FEATURE
-static bool
-wlan_hdd_is_link_switch_in_progress(struct wlan_hdd_link_info *link_info)
-{
-	struct wlan_objmgr_vdev *vdev;
-	bool ret = false;
-
-	if (!link_info) {
-		hdd_err_rl("Invalid link info");
-		return ret;
-	}
-
-	if (!wlan_hdd_is_mlo_connection(link_info))
-		return ret;
-
-	vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_STATS_ID);
-	if (!vdev) {
-		hdd_err("invalid vdev");
-		return ret;
-	}
-
-	ret = mlo_mgr_is_link_switch_in_progress(vdev);
-
-	hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_STATS_ID);
-	return ret;
-}
-#else
-static inline bool
-wlan_hdd_is_link_switch_in_progress(struct wlan_hdd_link_info *link_info)
-{
-	return false;
-}
-#endif /* WLAN_FEATURE_11BE_MLO_ADV_FEATURE */
-
 /**
  * wlan_hdd_copy_sinfo_to_link_info() - Copy sinfo to link_info
  * @link_info: Pointer to the hdd link info
@@ -766,12 +703,6 @@ wlan_hdd_get_bss_peer_mld_mac(struct wlan_hdd_link_info *link_info,
 	return QDF_STATUS_E_FAILURE;
 }
 
-static inline bool
-wlan_hdd_is_link_switch_in_progress(struct wlan_hdd_link_info *link_info)
-{
-	return false;
-}
-
 static inline void
 wlan_hdd_copy_sinfo_to_link_info(struct wlan_hdd_link_info *link_info,
 				 struct station_info *sinfo)

+ 8 - 0
core/hdd/src/wlan_hdd_tdls.c

@@ -194,6 +194,7 @@ static bool wlan_hdd_is_tdls_allowed(struct hdd_context *hdd_ctx,
 				     struct wlan_objmgr_vdev *vdev)
 {
 	bool tdls_support;
+	struct wlan_hdd_link_info *link_info;
 
 	if ((cfg_tdls_get_support_enable(hdd_ctx->psoc, &tdls_support) ==
 		QDF_STATUS_SUCCESS) && !tdls_support) {
@@ -222,6 +223,13 @@ static bool wlan_hdd_is_tdls_allowed(struct hdd_context *hdd_ctx,
 		return false;
 	}
 
+	link_info = hdd_get_link_info_by_vdev(hdd_ctx, wlan_vdev_get_id(vdev));
+	if (wlan_hdd_is_link_switch_in_progress(link_info)) {
+		hdd_debug("vdev:%d Link switch in progress",
+			  wlan_vdev_get_id(vdev));
+		return false;
+	}
+
 	return true;
 }
 

+ 3 - 3
core/mac/inc/qwlan_version.h

@@ -32,9 +32,9 @@
 #define QWLAN_VERSION_MAJOR            5
 #define QWLAN_VERSION_MINOR            2
 #define QWLAN_VERSION_PATCH            1
-#define QWLAN_VERSION_EXTRA            "J"
-#define QWLAN_VERSION_BUILD            92
+#define QWLAN_VERSION_EXTRA            "C"
+#define QWLAN_VERSION_BUILD            93
 
-#define QWLAN_VERSIONSTR               "5.2.1.92J"
+#define QWLAN_VERSIONSTR               "5.2.1.93C"
 
 #endif /* QWLAN_VERSION_H */

+ 1 - 10
core/mac/inc/sir_api.h

@@ -804,41 +804,32 @@ struct bss_description {
 	/* offset of the ieFields from bssId. */
 	uint16_t length;
 	tSirMacAddr bssId;
-	unsigned long scansystimensec;
 	uint32_t timeStamp[2];
 	uint16_t beaconInterval;
 	uint16_t capabilityInfo;
 	tSirNwType nwType;      /* Indicates 11a/b/g */
 	int8_t rssi;
 	int8_t rssi_raw;
-	int8_t sinr;
 	/* channel frequency what peer sent in beacon/probersp. */
 	uint32_t chan_freq;
 	/* Based on system time, not a relative time. */
-	uint64_t received_time;
 	uint32_t parentTSF;
 	uint32_t startTSF[2];
 	uint8_t mdiePresent;
 	/* MDIE for 11r, picked from the beacons */
 	uint8_t mdie[SIR_MDIE_SIZE];
-#ifdef FEATURE_WLAN_ESE
-	uint16_t QBSSLoad_present;
-	uint16_t QBSSLoad_avail;
-#endif
 	/* whether it is from a probe rsp */
 	uint8_t fProbeRsp;
-	tSirMacSeqCtl seq_ctrl;
-	uint32_t tsf_delta;
 	struct scan_mbssid_info mbssid_info;
 #ifdef WLAN_FEATURE_FILS_SK
 	struct fils_ind_elements fils_info_element;
 #endif
-	uint32_t assoc_disallowed;
 	uint32_t adaptive_11r_ap;
 	uint32_t mbo_oce_enabled_ap;
 #if defined(WLAN_SAE_SINGLE_PMK) && defined(WLAN_FEATURE_ROAM_OFFLOAD)
 	uint32_t is_single_pmk;
 #endif
+	uint32_t is_ml_ap;
 	/* Please keep the structure 4 bytes aligned above the ieFields */
 	QDF_FLEX_ARRAY(uint32_t, ieFields);
 };

+ 47 - 1
core/mac/src/dph/dph_hash_table.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-2024 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
@@ -122,6 +122,52 @@ tpDphHashNode dph_lookup_hash_entry(struct mac_context *mac, uint8_t staAddr[],
 	return ptr;
 }
 
+#ifdef WLAN_FEATURE_11BE_MLO
+/* --------------------------------------------------------------------- */
+/**
+ * dph_lookup_hash_entry_by_mld_addr
+ *
+ * FUNCTION:
+ * Look up an entry in hash table
+ *
+ * LOGIC:
+ *
+ * ASSUMPTIONS:
+ *
+ * NOTE:
+ *
+ * @param mld_addr MLD MAC address of the station
+ * @param pStaId pointer to the Station ID assigned to the station
+ * @return pointer to STA hash entry if lookup was a success \n
+ *         NULL if lookup was a failure
+ */
+
+tpDphHashNode dph_lookup_hash_entry_by_mld_addr(
+				struct mac_context *mac,
+				uint8_t mld_addr[],
+				uint16_t *pAssocId,
+				struct dph_hash_table *hash_table)
+{
+	tpDphHashNode ptr = NULL;
+	uint16_t i = 0;
+
+	if (!hash_table->pHashTable) {
+		pe_err("pHashTable is NULL");
+		return ptr;
+	}
+
+	for (i = 0; i < hash_table->size; i++) {
+		for (ptr = hash_table->pHashTable[i]; ptr; ptr = ptr->next) {
+			if (dph_compare_mac_addr(mld_addr, ptr->mld_addr)) {
+				*pAssocId = ptr->assocId;
+				return ptr;
+			}
+		}
+	}
+	return ptr;
+}
+#endif
+
 /* --------------------------------------------------------------------- */
 /**
  * dph_get_hash_entry

+ 19 - 1
core/mac/src/dph/dph_hash_table.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2011-2015, 2017-2019 The Linux Foundation. All rights reserved.
- *
+ * Copyright (c) 2024 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
@@ -58,6 +58,24 @@ tpDphHashNode dph_lookup_hash_entry(struct mac_context *mac, uint8_t staAddr[],
 				    uint16_t *pStaId,
 				    struct dph_hash_table *hash_table);
 
+#ifdef WLAN_FEATURE_11BE_MLO
+tpDphHashNode dph_lookup_hash_entry_by_mld_addr(
+				struct mac_context *mac,
+				uint8_t staAddr[],
+				uint16_t *pStaId,
+				struct dph_hash_table *hash_table);
+#else
+static inline
+tpDphHashNode dph_lookup_hash_entry_by_mld_addr(
+				struct mac_context *mac,
+				uint8_t staAddr[],
+				uint16_t *pStaId,
+				struct dph_hash_table *hash_table)
+{
+	return NULL;
+}
+#endif
+
 /* Get a pointer to the hash node */
 tpDphHashNode dph_get_hash_entry(struct mac_context *mac, uint16_t staId,
 				 struct dph_hash_table *hash_table);

+ 15 - 9
core/mac/src/pe/lim/lim_api.c

@@ -564,6 +564,20 @@ static inline void lim_nan_register_callbacks(struct mac_context *mac_ctx)
 }
 #endif
 
+#ifdef FEATURE_WLAN_TDLS
+static void lim_register_tdls_callbacks(struct mac_context *mac_ctx)
+{
+	struct tdls_callbacks tdls_cb = {0};
+
+	tdls_cb.delete_all_tdls_peers = lim_delete_all_tdls_peers;
+
+	wlan_tdls_register_lim_callbacks(mac_ctx->psoc, &tdls_cb);
+}
+#else
+static inline void lim_register_tdls_callbacks(struct mac_context *mac_ctx)
+{}
+#endif
+
 void lim_stop_pmfcomeback_timer(struct pe_session *session)
 {
 	if (session->opmode != QDF_STA_MODE)
@@ -860,6 +874,7 @@ QDF_STATUS pe_open(struct mac_context *mac, struct cds_config_info *cds_cfg)
 	lim_register_debug_callback();
 	lim_nan_register_callbacks(mac);
 	p2p_register_callbacks(mac);
+	lim_register_tdls_callbacks(mac);
 	lim_register_scan_mbssid_callback(mac);
 	lim_register_sap_bcn_callback(mac);
 	wlan_reg_register_ctry_change_callback(
@@ -2252,8 +2267,6 @@ lim_roam_fill_bss_descr(struct mac_context *mac,
 					roam_synch_ind->is_link_beacon :
 					roam_synch_ind->is_beacon);
 	bss_desc_ptr->rssi = roam_synch_ind->rssi;
-	/* Copy Timestamp */
-	bss_desc_ptr->scansystimensec = qdf_get_monotonic_boottime_ns();
 
 	if (is_multi_link_roam(roam_synch_ind)) {
 		bss_desc_ptr->chan_freq =
@@ -2280,7 +2293,6 @@ lim_roam_fill_bss_descr(struct mac_context *mac,
 					       SIR_MAC_MGMT_FRAME,
 					       parsed_frm_ptr);
 
-	bss_desc_ptr->sinr = 0;
 	bss_desc_ptr->beaconInterval = parsed_frm_ptr->beaconInterval;
 	bss_desc_ptr->timeStamp[0]   = parsed_frm_ptr->timeStamp[0];
 	bss_desc_ptr->timeStamp[1]   = parsed_frm_ptr->timeStamp[1];
@@ -2291,12 +2303,6 @@ lim_roam_fill_bss_descr(struct mac_context *mac,
 		     (uint8_t *)&bssid.bytes,
 		     sizeof(tSirMacAddr));
 
-	qdf_mem_copy((uint8_t *)&bss_desc_ptr->seq_ctrl,
-		     (uint8_t *)&mac_hdr->seqControl,
-		     sizeof(tSirMacSeqCtl));
-
-	bss_desc_ptr->received_time =
-		      (uint64_t)qdf_mc_timer_get_system_time();
 	if (parsed_frm_ptr->mdiePresent) {
 		bss_desc_ptr->mdiePresent = parsed_frm_ptr->mdiePresent;
 		qdf_mem_copy((uint8_t *)bss_desc_ptr->mdie,

+ 85 - 1
core/mac/src/pe/lim/lim_assoc_utils.c

@@ -492,6 +492,7 @@ lim_cleanup_rx_path(struct mac_context *mac, tpDphHashNode sta,
  * lim_send_del_sta_cnf() - Send Del sta confirmation
  * @mac: Pointer to Global MAC structure
  * @sta_dsaddr: sta ds address
+ * @sta_mld_addr: sta mld address
  * @staDsAssocId: sta ds association id
  * @mlmStaContext: MLM station context
  * @status_code: Status code
@@ -503,6 +504,7 @@ lim_cleanup_rx_path(struct mac_context *mac, tpDphHashNode sta,
  */
 void
 lim_send_del_sta_cnf(struct mac_context *mac, struct qdf_mac_addr sta_dsaddr,
+		     struct qdf_mac_addr sta_mld_addr,
 		     uint16_t staDsAssocId,
 		     struct lim_sta_context mlmStaContext,
 		     tSirResultCodes status_code, struct pe_session *pe_session)
@@ -633,6 +635,9 @@ lim_send_del_sta_cnf(struct mac_context *mac, struct qdf_mac_addr sta_dsaddr,
 
 		qdf_mem_copy((uint8_t *) &mlmDisassocCnf.peerMacAddr,
 			     (uint8_t *) sta_dsaddr.bytes, QDF_MAC_ADDR_SIZE);
+		qdf_mem_copy((uint8_t *)&mlmDisassocCnf.peerMldAddr,
+			     (uint8_t *)sta_mld_addr.bytes, QDF_MAC_ADDR_SIZE);
+
 		mlmDisassocCnf.resultCode = status_code;
 		mlmDisassocCnf.disassocTrigger = eLIM_DUPLICATE_ENTRY;
 		/* Update PE session Id */
@@ -4508,6 +4513,20 @@ void lim_prepare_and_send_del_all_sta_cnf(struct mac_context *mac,
 			    (uint32_t *)&mlm_deauth);
 }
 
+#ifdef WLAN_FEATURE_11BE_MLO
+static void lim_copy_mld_mac_addr(uint8_t *sta_mld_addr,
+				  tpDphHashNode sta)
+{
+	qdf_mem_copy(sta_mld_addr, sta->mld_addr, QDF_MAC_ADDR_SIZE);
+}
+#else
+static inline
+void lim_copy_mld_mac_addr(uint8_t *sta_mld_addr,
+			   tpDphHashNode sta)
+{
+}
+#endif
+
 /**
  * lim_prepare_and_send_del_sta_cnf() - prepares and send del sta cnf
  *
@@ -4528,6 +4547,7 @@ lim_prepare_and_send_del_sta_cnf(struct mac_context *mac, tpDphHashNode sta,
 {
 	uint16_t staDsAssocId = 0;
 	struct qdf_mac_addr sta_dsaddr;
+	struct qdf_mac_addr sta_mld_addr = QDF_MAC_ADDR_ZERO_INIT;
 	struct lim_sta_context mlmStaContext;
 	bool mlo_conn = false;
 
@@ -4539,6 +4559,7 @@ lim_prepare_and_send_del_sta_cnf(struct mac_context *mac, tpDphHashNode sta,
 	staDsAssocId = sta->assocId;
 	qdf_mem_copy((uint8_t *) sta_dsaddr.bytes,
 		     sta->staAddr, QDF_MAC_ADDR_SIZE);
+	lim_copy_mld_mac_addr(sta_mld_addr.bytes, sta);
 
 	mlmStaContext = sta->mlmStaContext;
 
@@ -4561,7 +4582,8 @@ lim_prepare_and_send_del_sta_cnf(struct mac_context *mac, tpDphHashNode sta,
 				 pe_session->limMlmState));
 	}
 
-	lim_send_del_sta_cnf(mac, sta_dsaddr, staDsAssocId, mlmStaContext,
+	lim_send_del_sta_cnf(mac, sta_dsaddr, sta_mld_addr, staDsAssocId,
+			     mlmStaContext,
 			     status_code, pe_session);
 }
 
@@ -4792,3 +4814,65 @@ void lim_extract_ies_from_deauth_disassoc(struct pe_session *session,
 
 	mlme_set_peer_disconnect_ies(session->vdev, &ie);
 }
+
+#ifdef WLAN_FEATURE_11BE_MLO
+static void lim_get_sta_mld_log(tpDphHashNode sta_ds, tSirMacAddr mld_mac,
+				char *mld_log_str)
+{
+	if (!qdf_is_macaddr_zero((struct qdf_mac_addr *)mld_mac))
+		qdf_scnprintf(mld_log_str, MAC_ADDR_DUMP_LEN,
+			      " SA mld: " QDF_MAC_ADDR_FMT,
+			      QDF_MAC_ADDR_REF(mld_mac));
+
+	if (!qdf_is_macaddr_zero((struct qdf_mac_addr *)
+	    sta_ds->mld_addr))
+		qdf_scnprintf(mld_log_str, MAC_ADDR_DUMP_LEN,
+			      " STA DS mld: " QDF_MAC_ADDR_FMT,
+			      QDF_MAC_ADDR_REF(sta_ds->mld_addr));
+}
+#else
+static inline
+void lim_get_sta_mld_log(tpDphHashNode sta_ds, tSirMacAddr mld_mac,
+			 char *mld_log_str)
+{
+}
+#endif
+
+tpDphHashNode lim_get_sta_ds(struct mac_context *mac_ctx,
+			     tSirMacAddr sa, tSirMacAddr mld_mac,
+			     uint16_t *assoc_id,
+			     struct pe_session *session)
+{
+	tpDphHashNode sta_ds = NULL;
+	char mld_log_str[52] = {0};
+
+	/* Check if STA present with SA address */
+	sta_ds = dph_lookup_hash_entry(
+				mac_ctx, sa,
+				assoc_id,
+				&session->dph.dphHashTable);
+	/* Check if STA present with MLD address,
+	 * this can happen if SAP is non ML,
+	 * so the MLD address will be used as address for connected STA
+	 */
+	if (!sta_ds && !qdf_is_macaddr_zero((struct qdf_mac_addr *)mld_mac))
+		sta_ds = dph_lookup_hash_entry(
+				mac_ctx, mld_mac,
+				assoc_id,
+				&session->dph.dphHashTable);
+	/* Check if STA present with same MLD address as current SA,
+	 * this can happen if SAP is ML, so the MLD address will be
+	 * used as SA address for connected STA
+	 */
+	if (!sta_ds && wlan_vdev_mlme_is_mlo_vdev(session->vdev))
+		sta_ds = dph_lookup_hash_entry_by_mld_addr(
+				mac_ctx, sa,
+				assoc_id,
+				&session->dph.dphHashTable);
+	if (sta_ds) {
+		lim_get_sta_mld_log(sta_ds, mld_mac, mld_log_str);
+		pe_debug("Vdev %d STA found for " QDF_MAC_ADDR_FMT "%s",
+			 session->vdev_id, QDF_MAC_ADDR_REF(sa), mld_log_str);
+	}
+	return sta_ds;
+}

+ 15 - 0
core/mac/src/pe/lim/lim_assoc_utils.h

@@ -151,6 +151,20 @@ QDF_STATUS lim_del_peer_info(struct mac_context *mac,
  */
 QDF_STATUS lim_del_sta_all(struct mac_context *mac,
 			   struct pe_session *pe_session);
+/**
+ * lim_get_sta_ds() -get sta ds
+ * @mac_ctx: mac ctx
+ * @sa: source addr
+ * @mld_mac: mld mac
+ * @assoc_id: assoc id
+ * @session: pe session ctx
+ *
+ * @Return: sta ds in case of success else NULL
+ */
+tpDphHashNode lim_get_sta_ds(struct mac_context *mac_ctx,
+			     tSirMacAddr sa, tSirMacAddr mld_mac,
+			     uint16_t *assoc_id,
+			     struct pe_session *session);
 
 #ifdef WLAN_FEATURE_HOST_ROAM
 void lim_restore_pre_reassoc_state(struct mac_context *,
@@ -227,6 +241,7 @@ static inline bool lim_is_roam_synch_in_progress(struct wlan_objmgr_psoc *psoc,
 
 void
 lim_send_del_sta_cnf(struct mac_context *mac, struct qdf_mac_addr sta_dsaddr,
+		     struct qdf_mac_addr sta_mld_addr,
 		     uint16_t staDsAssocId,
 		     struct lim_sta_context mlmStaContext,
 		     tSirResultCodes status_code,

+ 18 - 2
core/mac/src/pe/lim/lim_process_action_frame.c

@@ -59,6 +59,7 @@
 #include <wlan_mlo_mgr_sta.h>
 #include "wlan_mlo_mgr_public_structs.h"
 #include "wlan_p2p_api.h"
+#include "wlan_tdls_api.h"
 
 #define SA_QUERY_REQ_MIN_LEN \
 (DOT11F_FF_CATEGORY_LEN + DOT11F_FF_ACTION_LEN + DOT11F_FF_TRANSACTIONID_LEN)
@@ -1561,7 +1562,8 @@ static void lim_process_addba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
 	uint8_t extd_buff_size = 0;
 
 	if (mlo_is_any_link_disconnecting(session->vdev)) {
-		pe_err("Ignore ADDBA, vdev is in not in conncted state");
+		pe_err("Ignore ADDBA, vdev:%d is in not in conncted state",
+		       wlan_vdev_get_id(session->vdev));
 		return;
 	}
 
@@ -1578,7 +1580,6 @@ static void lim_process_addba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
 	/* Unpack ADDBA request frame */
 	status = dot11f_unpack_addba_req(mac_ctx, body_ptr, frame_len,
 					 addba_req, false);
-
 	if (DOT11F_FAILED(status)) {
 		pe_err("Failed to unpack and parse (0x%08x, %d bytes)",
 			status, frame_len);
@@ -1590,6 +1591,21 @@ static void lim_process_addba_req(struct mac_context *mac_ctx, uint8_t *rx_pkt_i
 
 	sta_ds = dph_lookup_hash_entry(mac_ctx, mac_hdr->sa, &aid,
 				       &session->dph.dphHashTable);
+	/*
+	 * TDLS peer addba request for some TID could be received before
+	 * TDLS_CHANGE_STA is received from userspace in some scenario
+	 * for example when the DUT sends TDLS setup response directly
+	 * to an already discovered peer and peer sends the addba request
+	 * immediately for TID 0.
+	 */
+	if (sta_ds && sta_ds->staType == STA_ENTRY_TDLS_PEER &&
+	    !wlan_tdls_is_addba_request_allowed(session->vdev,
+						(struct qdf_mac_addr *)sta_ds->staAddr)) {
+		pe_err("vdev:%d Dropping TDLS peer addba req received before change_sta",
+		       wlan_vdev_get_id(session->vdev));
+		goto error;
+	}
+
 	if (sta_ds &&
 	    (lim_is_session_he_capable(session) ||
 	     sta_ds->staType == STA_ENTRY_TDLS_PEER))

+ 20 - 18
core/mac/src/pe/lim/lim_process_assoc_req_frame.c

@@ -147,6 +147,7 @@ static void lim_convert_supported_channels(struct mac_context *mac_ctx,
  */
 static QDF_STATUS lim_check_sta_in_pe_entries(struct mac_context *mac_ctx,
 					      tSirMacAddr sa,
+					      tSirMacAddr mld_mac,
 					       uint16_t sessionid,
 					       bool *dup_entry)
 {
@@ -160,9 +161,9 @@ static QDF_STATUS lim_check_sta_in_pe_entries(struct mac_context *mac_ctx,
 		session = &mac_ctx->lim.gpSession[i];
 		if (session->valid &&
 		    (session->opmode == QDF_SAP_MODE)) {
-			sta_ds = dph_lookup_hash_entry(
-					mac_ctx, sa,
-					&assoc_id, &session->dph.dphHashTable);
+			sta_ds = lim_get_sta_ds(
+					mac_ctx, sa, mld_mac,
+					&assoc_id, session);
 			if (sta_ds
 				&& (!sta_ds->rmfEnabled ||
 				    (sessionid != session->peSessionId))
@@ -181,10 +182,9 @@ static QDF_STATUS lim_check_sta_in_pe_entries(struct mac_context *mac_ctx,
 					return QDF_STATUS_E_AGAIN;
 				}
 				sta_ds->sta_deletion_in_progress = true;
-				pe_err("Sending Disassoc and Deleting existing STA entry:"
-				       QDF_MAC_ADDR_FMT,
-				       QDF_MAC_ADDR_REF(
-						session->self_mac_addr));
+				pe_debug("Vdev %d Delete STA " QDF_MAC_ADDR_FMT,
+					 session->vdev_id,
+					 QDF_MAC_ADDR_REF(sa));
 				lim_send_disassoc_mgmt_frame(mac_ctx,
 					REASON_UNSPEC_FAILURE,
 					(uint8_t *)sa, session, false);
@@ -257,19 +257,21 @@ static bool lim_chk_assoc_req_parse_error(struct mac_context *mac_ctx,
 	QDF_STATUS qdf_status;
 	enum wlan_status_code wlan_status;
 	struct qdf_mac_addr *mld_mac;
+	uint32_t offset = WLAN_ASSOC_REQ_IES_OFFSET;
 
-	if (sub_type == LIM_ASSOC)
+	if (sub_type == LIM_ASSOC) {
 		wlan_status = sir_convert_assoc_req_frame2_struct(mac_ctx, frm_body,
 							     frame_len,
 							     assoc_req);
-	else
+	} else {
 		wlan_status = sir_convert_reassoc_req_frame2_struct(mac_ctx,
 						frm_body, frame_len, assoc_req);
-
+		offset = WLAN_REASSOC_REQ_IES_OFFSET;
+	}
 	if (wlan_status == STATUS_SUCCESS) {
 		qdf_status = lim_strip_and_decode_eht_cap(
-					frm_body + WLAN_ASSOC_REQ_IES_OFFSET,
-					frame_len - WLAN_ASSOC_REQ_IES_OFFSET,
+					frm_body + offset,
+					frame_len - offset,
 					&assoc_req->eht_cap,
 					assoc_req->he_cap,
 					session->curr_op_freq);
@@ -289,7 +291,6 @@ static bool lim_chk_assoc_req_parse_error(struct mac_context *mac_ctx,
 			qdf_mem_zero(&assoc_req->mlo_info,
 				     sizeof(assoc_req->mlo_info));
 		}
-
 		return true;
 	}
 
@@ -2554,7 +2555,12 @@ QDF_STATUS lim_proc_assoc_req_frm_cmn(struct mac_context *mac_ctx,
 	lim_get_phy_mode(mac_ctx, &phy_mode, session);
 	limGetQosMode(session, &qos_mode);
 
-	status = lim_check_sta_in_pe_entries(mac_ctx, sa,
+	if (!lim_chk_assoc_req_parse_error(mac_ctx, sa, session,
+					   assoc_req, sub_type,
+					   frm_body, frame_len))
+		goto error;
+
+	status = lim_check_sta_in_pe_entries(mac_ctx, sa, assoc_req->mld_mac,
 					     session->peSessionId,
 					     &dup_entry);
 	if (QDF_IS_STATUS_ERROR(status)) {
@@ -2596,10 +2602,6 @@ QDF_STATUS lim_proc_assoc_req_frm_cmn(struct mac_context *mac_ctx,
 		}
 	}
 
-	if (!lim_chk_assoc_req_parse_error(mac_ctx, sa, session,
-					   assoc_req, sub_type,
-					   frm_body, frame_len))
-		goto error;
 
 	if (!lim_chk_capab(mac_ctx, sa, session, assoc_req,
 			   sub_type, &local_cap))

+ 2 - 1
core/mac/src/pe/lim/lim_process_message_queue.c

@@ -120,7 +120,8 @@ static void lim_process_sae_msg_sta(struct mac_context *mac,
 
 			qdf_mem_zero(session->lim_join_req->rsnIE.rsnIEdata,
 				     WLAN_MAX_IE_LEN + 2);
-			lim_update_connect_rsn_ie(session, rsn_ie_buf, pmksa);
+			lim_update_connect_rsn_ie(mac, session, rsn_ie_buf,
+						  pmksa);
 
 			qdf_mem_free(pmksa);
 			qdf_mem_free(rsn_ie_buf);

+ 0 - 11
core/mac/src/pe/lim/lim_process_mlm_req_messages.c

@@ -1713,7 +1713,6 @@ static void lim_process_periodic_join_probe_req_timer(struct mac_context *mac_ct
 	struct pe_session *session;
 	tSirMacSSid ssid;
 	tSirMacAddr bssid;
-	tSirMacAddr bcast_mac = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
 
 	session = pe_find_session_by_session_id(mac_ctx,
 	      mac_ctx->lim.lim_timers.gLimPeriodicJoinProbeReqTimer.sessionId);
@@ -1733,16 +1732,6 @@ static void lim_process_periodic_join_probe_req_timer(struct mac_context *mac_ct
 		sir_copy_mac_addr(bssid,
 				  session->pLimMlmJoinReq->bssDescription.bssId);
 
-		/*
-		 * Some APs broadcasting hidden SSID doesn't respond to unicast
-		 * probe requests, however those APs respond to broadcast probe
-		 * requests. Therefore for hidden ssid connections, after 3
-		 * unicast probe requests, try the pending probes with broadcast
-		 * mac.
-		 */
-		if (session->ssidHidden && session->join_probe_cnt > 2)
-			sir_copy_mac_addr(bssid, bcast_mac);
-
 		lim_send_probe_req_mgmt_frame(mac_ctx, &ssid, bssid,
 					      session->curr_op_freq,
 			session->self_mac_addr, session->dot11mode,

+ 8 - 2
core/mac/src/pe/lim/lim_process_mlm_rsp_messages.c

@@ -981,6 +981,7 @@ void lim_process_mlm_disassoc_cnf(struct mac_context *mac_ctx,
 	tSirResultCodes result_code;
 	tLimMlmDisassocCnf *disassoc_cnf;
 	struct pe_session *session_entry;
+	struct qdf_mac_addr mld_mac = QDF_MAC_ADDR_ZERO_INIT;
 
 	disassoc_cnf = (tLimMlmDisassocCnf *) msg;
 
@@ -1033,13 +1034,16 @@ void lim_process_mlm_disassoc_cnf(struct mac_context *mac_ctx,
 				session_entry->peSessionId,
 				session_entry->limSmeState));
 			lim_send_sme_disassoc_ntf(mac_ctx,
-				disassoc_cnf->peerMacAddr, result_code,
+				disassoc_cnf->peerMacAddr,
+				(uint8_t *)mld_mac.bytes, result_code,
 				disassoc_cnf->disassocTrigger,
 				disassoc_cnf->aid, session_entry->smeSessionId,
 				session_entry);
 		}
 	} else if (LIM_IS_AP_ROLE(session_entry)) {
-		lim_send_sme_disassoc_ntf(mac_ctx, disassoc_cnf->peerMacAddr,
+		lim_send_sme_disassoc_ntf(
+			mac_ctx, disassoc_cnf->peerMacAddr,
+			disassoc_cnf->peerMldAddr,
 			result_code, disassoc_cnf->disassocTrigger,
 			disassoc_cnf->aid, session_entry->smeSessionId,
 			session_entry);
@@ -1182,6 +1186,7 @@ void lim_process_mlm_purge_sta_ind(struct mac_context *mac, uint32_t *msg_buf)
 	tSirResultCodes resultCode;
 	tpLimMlmPurgeStaInd pMlmPurgeStaInd;
 	struct pe_session *pe_session;
+	struct qdf_mac_addr mld_addr = QDF_MAC_ADDR_ZERO_INIT;
 
 	if (!msg_buf) {
 		pe_err("Buffer is Pointing to NULL");
@@ -1233,6 +1238,7 @@ void lim_process_mlm_purge_sta_ind(struct mac_context *mac, uint32_t *msg_buf)
 		} else
 			lim_send_sme_disassoc_ntf(mac,
 						  pMlmPurgeStaInd->peerMacAddr,
+						  (uint8_t *)mld_addr.bytes,
 						  resultCode,
 						  pMlmPurgeStaInd->purgeTrigger,
 						  pMlmPurgeStaInd->aid,

+ 55 - 5
core/mac/src/pe/lim/lim_process_sme_req_messages.c

@@ -2928,6 +2928,9 @@ static void lim_update_sae_config(struct mac_context *mac,
 {
 	struct wlan_crypto_pmksa *pmksa;
 	struct qdf_mac_addr bssid;
+	struct bss_description *bss_desc;
+	struct action_oui_search_attr ap_attr = {0};
+	bool is_vendor_ap = false;
 
 	qdf_mem_copy(bssid.bytes, session->bssId,
 		     QDF_MAC_ADDR_SIZE);
@@ -2939,6 +2942,16 @@ static void lim_update_sae_config(struct mac_context *mac,
 	if (!pmksa)
 		return;
 
+	bss_desc = &session->lim_join_req->bssDescription;
+	ap_attr.ie_data = (uint8_t *)&bss_desc->ieFields[0];
+	ap_attr.ie_length =
+		wlan_get_ielen_from_bss_description(bss_desc);
+	is_vendor_ap = wlan_action_oui_search(mac->psoc,
+					      &ap_attr,
+					      ACTION_OUI_RESTRICT_MAX_MLO_LINKS);
+	if (is_vendor_ap)
+		return;
+
 	session->sae_pmk_cached = true;
 	pe_debug("PMKSA Found for BSSID=" QDF_MAC_ADDR_FMT,
 		 QDF_MAC_ADDR_REF(bssid.bytes));
@@ -4162,9 +4175,18 @@ lim_strip_rsnx_ie(struct mac_context *mac_ctx,
 		     (uint16_t *)&req->assoc_ie.len, WLAN_ELEMID_RSNXE,
 		     ONE_BYTE, NULL, 0, rsnxe, WLAN_MAX_IE_LEN);
 
-	if (!rsnxe[0])
+	if (!rsnxe[SIR_MAC_IE_TYPE_OFFSET] || !rsnxe[SIR_MAC_IE_LEN_OFFSET])
 		goto end;
 
+	/*
+	 * Do not rebuild the RSNXE with length 1, if none of the caps are set
+	 * in the first octet. It leads to the creation of an empty RSNXE.
+	 */
+	if (!(rsnxe[2] & 0xF0)) {
+		pe_debug("None of the caps are set in 1st octet, strip RSNXE");
+		goto end;
+	}
+
 	switch (ap_rsnxe_len) {
 	case 0:
 		/*
@@ -4221,11 +4243,23 @@ end:
 }
 
 void
-lim_update_connect_rsn_ie(struct pe_session *session,
+lim_update_connect_rsn_ie(struct mac_context *mac,
+			  struct pe_session *session,
 			  uint8_t *rsn_ie_buf, struct wlan_crypto_pmksa *pmksa)
 {
 	uint8_t *rsn_ie_end;
 	uint16_t rsn_ie_len = 0;
+	struct bss_description *bss_desc =
+					&session->lim_join_req->bssDescription;
+	struct action_oui_search_attr ap_attr = {0};
+
+	ap_attr.ie_data = (uint8_t *)&bss_desc->ieFields[0];
+	ap_attr.ie_length =
+		wlan_get_ielen_from_bss_description(bss_desc);
+	if (wlan_action_oui_search(mac->psoc,
+				   &ap_attr,
+				   ACTION_OUI_RESTRICT_MAX_MLO_LINKS))
+		pmksa = NULL;
 
 	rsn_ie_end = wlan_crypto_build_rsnie_with_pmksa(session->vdev,
 							rsn_ie_buf, pmksa);
@@ -4299,7 +4333,7 @@ lim_fill_rsn_ie(struct mac_context *mac_ctx, struct pe_session *session,
 	if (pmksa_peer)
 		pe_debug("PMKSA found");
 
-	lim_update_connect_rsn_ie(session, rsn_ie, pmksa_peer);
+	lim_update_connect_rsn_ie(mac_ctx, session, rsn_ie, pmksa_peer);
 	qdf_mem_free(rsn_ie);
 
 	/*
@@ -4468,6 +4502,7 @@ static void lim_copy_ml_partner_info_to_session(struct pe_session *session,
 void lim_set_emlsr_caps(struct mac_context *mac_ctx, struct pe_session *session)
 {
 	bool emlsr_cap, emlsr_allowed, emlsr_band_check, emlsr_enabled = false;
+	bool emlsr_aux_support = false;
 
 	/* Check if HW supports eMLSR mode */
 	emlsr_cap = policy_mgr_is_hw_emlsr_capable(mac_ctx->psoc);
@@ -4481,8 +4516,11 @@ void lim_set_emlsr_caps(struct mac_context *mac_ctx, struct pe_session *session)
 	emlsr_band_check = lim_is_emlsr_band_supported(session);
 
 	emlsr_allowed = emlsr_cap && emlsr_enabled && emlsr_band_check;
+	emlsr_aux_support = emlsr_enabled && WLAN_EMLSR_ENABLE &&
+			     wlan_mlme_is_aux_emlsr_support(mac_ctx->psoc,
+							    WLAN_MLME_HW_MODE_MAX);
 
-	if (emlsr_allowed) {
+	if (emlsr_allowed || emlsr_aux_support) {
 		wlan_vdev_obj_lock(session->vdev);
 		wlan_vdev_mlme_cap_set(session->vdev, WLAN_VDEV_C_EMLSR_CAP);
 		wlan_vdev_obj_unlock(session->vdev);
@@ -4491,6 +4529,9 @@ void lim_set_emlsr_caps(struct mac_context *mac_ctx, struct pe_session *session)
 		wlan_vdev_mlme_cap_clear(session->vdev, WLAN_VDEV_C_EMLSR_CAP);
 		wlan_vdev_obj_unlock(session->vdev);
 	}
+
+	pe_debug("eMLSR vdev cap: %d", emlsr_allowed);
+	pe_debug("eMLSR aux support: %d", emlsr_aux_support);
 }
 #else
 static void lim_fill_ml_info(struct cm_vdev_join_req *req,
@@ -6457,6 +6498,7 @@ static void __lim_process_sme_disassoc_req(struct mac_context *mac,
 	struct pe_session *pe_session = NULL;
 	uint8_t sessionId;
 	uint8_t smesessionId;
+	struct qdf_mac_addr mld_addr = QDF_MAC_ADDR_ZERO_INIT;
 
 	if (!msg_buf) {
 		pe_err("Buffer is Pointing to NULL");
@@ -6627,6 +6669,7 @@ sendDisassoc:
 	if (pe_session)
 		lim_send_sme_disassoc_ntf(mac,
 					  smeDisassocReq.peer_macaddr.bytes,
+					  (uint8_t *)mld_addr.bytes,
 					  retCode,
 					  disassocTrigger,
 					  1, smesessionId,
@@ -6634,6 +6677,7 @@ sendDisassoc:
 	else
 		lim_send_sme_disassoc_ntf(mac,
 					  smeDisassocReq.peer_macaddr.bytes,
+					  (uint8_t *)mld_addr.bytes,
 					  retCode, disassocTrigger, 1,
 					  smesessionId, NULL);
 
@@ -7331,6 +7375,7 @@ void __lim_process_sme_assoc_cnf_new(struct mac_context *mac_ctx, uint32_t msg_t
 	struct pe_session *session_entry = NULL;
 	uint8_t session_id;
 	tpSirAssocReq assoc_req;
+	struct qdf_mac_addr mld_addr = QDF_MAC_ADDR_ZERO_INIT;
 
 	if (!msg_buf) {
 		pe_err("msg_buf is NULL");
@@ -7368,7 +7413,10 @@ void __lim_process_sme_assoc_cnf_new(struct mac_context *mac_ctx, uint32_t msg_t
 		 * send a DISASSOC_IND message to WSM to make sure
 		 * the state in WSM and LIM is the same
 		 */
-		lim_send_sme_disassoc_ntf(mac_ctx, assoc_cnf.peer_macaddr.bytes,
+		lim_send_sme_disassoc_ntf(
+				mac_ctx,
+				assoc_cnf.peer_macaddr.bytes,
+				(uint8_t *)mld_addr.bytes,
 				eSIR_SME_STA_NOT_ASSOCIATED,
 				eLIM_PEER_ENTITY_DISASSOC, assoc_cnf.aid,
 				session_entry->smeSessionId,
@@ -8878,6 +8926,7 @@ static void lim_process_sme_disassoc_req(struct mac_context *mac_ctx,
 	struct disassoc_req disassoc_req;
 	struct pe_session *session;
 	uint8_t session_id;
+	struct qdf_mac_addr mld_addr = QDF_MAC_ADDR_ZERO_INIT;
 
 	qdf_mem_copy(&disassoc_req, msg->bodyptr, sizeof(struct disassoc_req));
 
@@ -8889,6 +8938,7 @@ static void lim_process_sme_disassoc_req(struct mac_context *mac_ctx,
 		       QDF_MAC_ADDR_REF(disassoc_req.bssid.bytes));
 		lim_send_sme_disassoc_ntf(mac_ctx,
 					  disassoc_req.peer_macaddr.bytes,
+					  mld_addr.bytes,
 					  eSIR_SME_INVALID_PARAMETERS,
 					  eLIM_HOST_DISASSOC, 1,
 					  disassoc_req.sessionId, NULL);

+ 110 - 61
core/mac/src/pe/lim/lim_process_tdls.c

@@ -77,6 +77,7 @@
 #include "wlan_cfg80211_tdls.h"
 #include "wlan_tdls_api.h"
 #include "lim_mlo.h"
+#include "wlan_mlo_mgr_link_switch.h"
 
 /* define NO_PAD_TDLS_MIN_8023_SIZE to NOT padding: See CR#447630
    There was IOT issue with cisco 1252 open mode, where it pads
@@ -3722,38 +3723,54 @@ static void lim_tdls_update_hash_node_info(struct mac_context *mac,
 	return;
 }
 
-/*
- * Add STA for TDLS setup procedure
- */
 static QDF_STATUS lim_tdls_setup_add_sta(struct mac_context *mac,
-					    struct tdls_add_sta_req *pAddStaReq,
-					    struct pe_session *pe_session)
+					 struct tdls_add_sta_req *pAddStaReq,
+					 struct pe_session *pe_session)
 {
 	tpDphHashNode sta = NULL;
+	struct wlan_objmgr_peer *peer;
 	QDF_STATUS status = QDF_STATUS_SUCCESS;
 	uint16_t aid = 0;
+	uint8_t peer_vdev_id;
 
 	sta = dph_lookup_hash_entry(mac, pAddStaReq->peermac.bytes, &aid,
 				       &pe_session->dph.dphHashTable);
 	if (!sta && pAddStaReq->tdls_oper == TDLS_OPER_UPDATE) {
-		pe_err("TDLS update peer is given without peer creation");
+		pe_err("vdev:%d TDLS update peer is given without peer creation",
+		       pe_session->vdev_id);
 		return QDF_STATUS_E_FAILURE;
 	}
+
 	if (sta && pAddStaReq->tdls_oper == TDLS_OPER_ADD) {
-		pe_err("TDLS entry for peer: "QDF_MAC_ADDR_FMT " already exist, cannot add new entry",
-			QDF_MAC_ADDR_REF(pAddStaReq->peermac.bytes));
-			return QDF_STATUS_E_FAILURE;
+		pe_err("vdev:%d TDLS entry for peer: " QDF_MAC_ADDR_FMT " already exist, cannot add new entry",
+		       pe_session->vdev_id,
+		       QDF_MAC_ADDR_REF(pAddStaReq->peermac.bytes));
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	peer = wlan_objmgr_get_peer_by_mac(mac->psoc, pAddStaReq->peermac.bytes,
+					   WLAN_TDLS_NB_ID);
+	if (peer) {
+		peer_vdev_id = wlan_vdev_get_id(wlan_peer_get_vdev(peer));
+		wlan_objmgr_peer_release_ref(peer, WLAN_TDLS_NB_ID);
+
+		if (pAddStaReq->tdls_oper == TDLS_OPER_ADD) {
+			pe_err("vdev:%d peer: " QDF_MAC_ADDR_FMT " already exist on vdev:%d, cannot add new entry",
+			       pe_session->vdev_id,
+			       QDF_MAC_ADDR_REF(pAddStaReq->peermac.bytes),
+			       peer_vdev_id);
+			return QDF_STATUS_E_EXISTS;
+		}
 	}
 
 	if (sta && sta->staType != STA_ENTRY_TDLS_PEER) {
 		pe_err("Non TDLS entry for peer: "QDF_MAC_ADDR_FMT " already exist",
 			QDF_MAC_ADDR_REF(pAddStaReq->peermac.bytes));
-			return QDF_STATUS_E_FAILURE;
+		return QDF_STATUS_E_FAILURE;
 	}
 
 	if (!sta) {
 		aid = lim_assign_peer_idx(mac, pe_session);
-
 		if (!aid) {
 			pe_err("No more free AID for peer: "QDF_MAC_ADDR_FMT,
 				QDF_MAC_ADDR_REF(pAddStaReq->peermac.bytes));
@@ -3765,13 +3782,11 @@ static QDF_STATUS lim_tdls_setup_add_sta(struct mac_context *mac,
 
 		pe_debug("Aid: %d, for peer: " QDF_MAC_ADDR_FMT,
 			aid, QDF_MAC_ADDR_REF(pAddStaReq->peermac.bytes));
-		sta =
-			dph_get_hash_entry(mac, aid,
-					   &pe_session->dph.dphHashTable);
-
+		sta = dph_get_hash_entry(mac, aid,
+					 &pe_session->dph.dphHashTable);
 		if (sta) {
-			(void)lim_del_sta(mac, sta, false /*asynchronous */,
-					  pe_session);
+			/* asynchronous */
+			lim_del_sta(mac, sta, false, pe_session);
 			lim_delete_dph_hash_entry(mac, sta->staAddr, aid,
 						  pe_session);
 		}
@@ -3780,25 +3795,25 @@ static QDF_STATUS lim_tdls_setup_add_sta(struct mac_context *mac,
 					 aid, &pe_session->dph.dphHashTable);
 
 		if (!sta) {
-			pe_err("add hash entry failed");
+			pe_err("vdev::%d add hash entry failed",
+			       pe_session->vdev_id);
+			CLEAR_PEER_AID_BITMAP(pe_session->peerAIDBitmap, aid);
 			QDF_ASSERT(0);
 			return QDF_STATUS_E_FAILURE;
 		}
 	}
 
 	lim_tdls_update_hash_node_info(mac, sta, pAddStaReq, pe_session);
-
 	sta->staType = STA_ENTRY_TDLS_PEER;
 
-	status =
-		lim_add_sta(mac, sta,
-			    (pAddStaReq->tdls_oper ==
-			     TDLS_OPER_UPDATE) ? true : false, pe_session);
-
-	if (QDF_STATUS_SUCCESS != status) {
-		/* should not fail */
+	status = lim_add_sta(mac, sta,
+			     pAddStaReq->tdls_oper == TDLS_OPER_UPDATE,
+			     pe_session);
+	if (QDF_IS_STATUS_ERROR(status)) {
+		CLEAR_PEER_AID_BITMAP(pe_session->peerAIDBitmap, aid);
 		QDF_ASSERT(0);
 	}
+
 	return status;
 }
 
@@ -3848,10 +3863,10 @@ static QDF_STATUS lim_send_sme_tdls_add_sta_rsp(struct mac_context *mac,
 	add_sta_rsp->session_id = sessionId;
 	add_sta_rsp->status_code = status;
 
-	if (peerMac) {
+	if (peerMac)
 		qdf_mem_copy(add_sta_rsp->peermac.bytes,
 			     (uint8_t *) peerMac, QDF_MAC_ADDR_SIZE);
-	}
+
 	if (updateSta)
 		add_sta_rsp->tdls_oper = TDLS_OPER_UPDATE;
 	else
@@ -3884,26 +3899,41 @@ QDF_STATUS lim_process_tdls_add_sta_rsp(struct mac_context *mac, void *msg,
 	uint16_t aid = 0;
 
 	SET_LIM_PROCESS_DEFD_MESGS(mac, true);
-	pe_debug("staMac: "QDF_MAC_ADDR_FMT,
-	       QDF_MAC_ADDR_REF(pAddStaParams->staMac));
 
-	if (pAddStaParams->status != QDF_STATUS_SUCCESS) {
-		QDF_ASSERT(0);
-		pe_err("Add sta failed ");
+	sta = dph_lookup_hash_entry(mac, pAddStaParams->staMac, &aid,
+				    &pe_session->dph.dphHashTable);
+	if (!sta) {
+		pe_err("staMac: " QDF_MAC_ADDR_FMT,
+		       QDF_MAC_ADDR_REF(pAddStaParams->staMac));
+		CLEAR_PEER_AID_BITMAP(pe_session->peerAIDBitmap,
+				      pAddStaParams->assocId);
+		lim_release_peer_idx(mac, pAddStaParams->assocId, pe_session);
 		status = QDF_STATUS_E_FAILURE;
 		goto add_sta_error;
 	}
 
-	sta = dph_lookup_hash_entry(mac, pAddStaParams->staMac, &aid,
-				       &pe_session->dph.dphHashTable);
-	if (!sta) {
-		pe_err("sta is NULL ");
+	if (pAddStaParams->status != QDF_STATUS_SUCCESS) {
+		pe_err("vdev:%d TDLS add sta failed", pe_session->vdev_id);
+		CLEAR_PEER_AID_BITMAP(pe_session->peerAIDBitmap, aid);
+		lim_release_peer_idx(mac, sta->assocId, pe_session);
+
+		if (sta &&
+		    dph_delete_hash_entry(mac, pAddStaParams->staMac,
+					  sta->assocId,
+					  &pe_session->dph.dphHashTable))
+			pe_err("Unable to delete Hash entry");
+
 		status = QDF_STATUS_E_FAILURE;
+		QDF_ASSERT(0);
 		goto add_sta_error;
 	}
 
 	sta->mlmStaContext.mlmState = eLIM_MLM_LINK_ESTABLISHED_STATE;
 	sta->valid = 1;
+	pe_debug("vdev:%d sta_mac: " QDF_MAC_ADDR_FMT,
+		 pe_session->vdev_id,
+		 QDF_MAC_ADDR_REF(pAddStaParams->staMac));
+
 add_sta_error:
 	status = lim_send_sme_tdls_add_sta_rsp(mac, pe_session->smeSessionId,
 					       pAddStaParams->staMac,
@@ -4132,7 +4162,8 @@ QDF_STATUS lim_process_sme_tdls_add_sta_req(struct mac_context *mac,
 	struct pe_session *pe_session;
 	uint8_t session_id;
 
-	pe_debug("TDLS Add STA Request Received");
+	pe_debug("vdev:%d TDLS Add STA Request Received",
+		 add_sta_req->session_id);
 	pe_session =
 		pe_find_session_by_bssid(mac, add_sta_req->bssid.bytes,
 					 &session_id);
@@ -4281,15 +4312,16 @@ static void lim_check_aid_and_delete_peer(struct mac_context *p_mac,
 			if (!stads)
 				goto skip;
 
-			pe_debug("Deleting "QDF_MAC_ADDR_FMT,
-				QDF_MAC_ADDR_REF(stads->staAddr));
+			pe_err("Deleting "QDF_MAC_ADDR_FMT,
+			       QDF_MAC_ADDR_REF(stads->staAddr));
 
 			if (!lim_is_roam_synch_in_progress(p_mac->psoc,
-							   session_entry)) {
-				lim_send_deauth_mgmt_frame(p_mac,
+							   session_entry))
+				lim_send_deauth_mgmt_frame(
+					p_mac,
 					REASON_DEAUTH_NETWORK_LEAVING,
 					stads->staAddr, session_entry, false);
-			}
+
 			/* Delete TDLS peer */
 			qdf_mem_copy(mac_addr.bytes, stads->staAddr,
 				     QDF_MAC_ADDR_SIZE);
@@ -4349,7 +4381,7 @@ void lim_update_tdls_2g_bw(struct pe_session *session)
  * Return: QDF_STATUS_SUCCESS on success, error code otherwise
  */
 QDF_STATUS lim_delete_tdls_peers(struct mac_context *mac_ctx,
-				    struct pe_session *session_entry)
+				 struct pe_session *session_entry)
 {
 
 	if (!session_entry) {
@@ -4360,38 +4392,55 @@ QDF_STATUS lim_delete_tdls_peers(struct mac_context *mac_ctx,
 	lim_check_aid_and_delete_peer(mac_ctx, session_entry);
 
 	tgt_tdls_delete_all_peers_indication(mac_ctx->psoc,
-					     session_entry->smeSessionId);
+					     session_entry->vdev_id);
 
 	if (lim_is_roam_synch_in_progress(mac_ctx->psoc, session_entry))
 		return QDF_STATUS_SUCCESS;
 
-	/* In case of CSA, Only peers in lim and TDLS component
+	/*
+	 * For Link Switch disconnect, TDLS set state to disable will be sent
+	 * to firmware after the disconnect complete indication. So don't
+	 * send TDLS set state disable from here.
+	 */
+	if (mlo_mgr_is_link_switch_in_progress(session_entry->vdev))
+		return QDF_STATUS_SUCCESS;
+
+	/*
+	 * In case of CSA, Only peers in lim and TDLS component
 	 * needs to be removed and set state disable command
 	 * should not be sent to fw as there is no way to enable
 	 * TDLS in FW after vdev restart.
 	 */
-	if (session_entry->tdls_send_set_state_disable) {
+	if (session_entry->tdls_send_set_state_disable)
 		tgt_tdls_peers_deleted_notification(mac_ctx->psoc,
-						    session_entry->
-						    smeSessionId);
-	}
+						    session_entry->smeSessionId);
 
 	/* reset the set_state_disable flag */
 	session_entry->tdls_send_set_state_disable = true;
+
 	return QDF_STATUS_SUCCESS;
 }
 
-/**
- * lim_process_sme_del_all_tdls_peers(): process delete tdls peers
- * @p_mac: pointer to mac context
- * @msg_buf: message buffer
- *
- * This function processes request to delete tdls peers
- *
- * Return: Success: QDF_STATUS_SUCCESS Failure: Error value
- */
-QDF_STATUS lim_process_sme_del_all_tdls_peers(struct mac_context *p_mac,
-						 uint32_t *msg_buf)
+QDF_STATUS lim_delete_all_tdls_peers(struct wlan_objmgr_vdev *vdev)
+{
+	struct mac_context *mac = cds_get_context(QDF_MODULE_ID_PE);
+	struct pe_session *session;
+
+	if (!mac)
+		return QDF_STATUS_E_FAILURE;
+
+	session = pe_find_session_by_vdev_id(mac, wlan_vdev_get_id(vdev));
+	if (!session) {
+		pe_debug("No pe_session found for vdev_id:%d",
+			 wlan_vdev_get_id(vdev));
+		return QDF_STATUS_E_FAILURE;
+	}
+
+	return lim_delete_tdls_peers(mac, session);
+}
+
+QDF_STATUS
+lim_process_sme_del_all_tdls_peers(struct mac_context *p_mac, uint32_t *msg_buf)
 {
 	struct tdls_del_all_tdls_peers *msg;
 	struct pe_session *session_entry;

+ 4 - 21
core/mac/src/pe/lim/lim_scan_result_utils.c

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
- * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2022,2024 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
@@ -104,9 +104,6 @@ lim_collect_bss_description(struct mac_context *mac,
 	qdf_mem_copy((uint8_t *) &pBssDescr->bssId,
 		     (uint8_t *) pHdr->bssId, sizeof(tSirMacAddr));
 
-	/* Copy Timestamp, Beacon Interval and Capability Info */
-	pBssDescr->scansystimensec = qdf_get_bootbased_boottime_ns();
-
 	pBssDescr->timeStamp[0] = pBPR->timeStamp[0];
 	pBssDescr->timeStamp[1] = pBPR->timeStamp[1];
 	pBssDescr->beaconInterval = pBPR->beaconInterval;
@@ -142,21 +139,15 @@ lim_collect_bss_description(struct mac_context *mac,
 	pBssDescr->rssi = (int8_t) WMA_GET_RX_RSSI_NORMALIZED(pRxPacketInfo);
 	pBssDescr->rssi_raw = (int8_t) WMA_GET_RX_RSSI_RAW(pRxPacketInfo);
 
-	/* SINR no longer reported by HW */
-	pBssDescr->sinr = 0;
 	pe_debug(QDF_MAC_ADDR_FMT " rssi: normalized: %d, absolute: %d",
 		QDF_MAC_ADDR_REF(pHdr->bssId), pBssDescr->rssi,
 		pBssDescr->rssi_raw);
 
-	pBssDescr->received_time = (uint64_t)qdf_mc_timer_get_system_time();
-	pBssDescr->tsf_delta = WMA_GET_RX_TSF_DELTA(pRxPacketInfo);
-	pBssDescr->seq_ctrl = pHdr->seqControl;
-
-	pe_debug("Received %s from BSSID: " QDF_MAC_ADDR_FMT " tsf_delta = %u Seq Num: %x ssid:" QDF_SSID_FMT ", rssi: %d",
+	pe_debug("Received %s from BSSID: " QDF_MAC_ADDR_FMT " Seq Num: %x ssid:" QDF_SSID_FMT ", rssi: %d",
 		 pBssDescr->fProbeRsp ? "Probe Rsp" : "Beacon",
 		 QDF_MAC_ADDR_REF(pHdr->bssId),
-		 pBssDescr->tsf_delta, ((pHdr->seqControl.seqNumHi <<
-		 HIGH_SEQ_NUM_OFFSET) | pHdr->seqControl.seqNumLo),
+		 ((pHdr->seqControl.seqNumHi <<	HIGH_SEQ_NUM_OFFSET) |
+		  pHdr->seqControl.seqNumLo),
 		 QDF_SSID_REF(pBPR->ssId.length, pBPR->ssId.ssId),
 		 pBssDescr->rssi_raw);
 
@@ -179,14 +170,6 @@ lim_collect_bss_description(struct mac_context *mac,
 		pBssDescr->mdie[2] = pBPR->mdie[2];
 	}
 
-#ifdef FEATURE_WLAN_ESE
-	pBssDescr->QBSSLoad_present = false;
-	pBssDescr->QBSSLoad_avail = 0;
-	if (pBPR->QBSSLoad.present) {
-		pBssDescr->QBSSLoad_present = true;
-		pBssDescr->QBSSLoad_avail = pBPR->QBSSLoad.avail;
-	}
-#endif
 	/* Copy IE fields */
 	qdf_mem_copy((uint8_t *) &pBssDescr->ieFields,
 		     pBody + SIR_MAC_B_PR_SSID_OFFSET, ieLen);

+ 23 - 7
core/mac/src/pe/lim/lim_send_management_frames.c

@@ -186,7 +186,7 @@ lim_send_probe_req_mgmt_frame(struct mac_context *mac_ctx,
 	uint8_t *frame;
 	void *packet;
 	QDF_STATUS qdf_status;
-	struct pe_session *pesession;
+	struct pe_session *pesession = NULL;
 	uint8_t sessionid;
 	const uint8_t *p2pie = NULL;
 	uint8_t txflag = 0;
@@ -202,6 +202,7 @@ lim_send_probe_req_mgmt_frame(struct mac_context *mac_ctx,
 	uint8_t *eht_cap_ie = NULL, eht_cap_ie_len = 0;
 	bool is_band_2g;
 	uint16_t mlo_ie_len = 0;
+	tSirMacAddr bcast_mac = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };
 
 	if (additional_ielen)
 		addn_ielen = *additional_ielen;
@@ -240,6 +241,16 @@ lim_send_probe_req_mgmt_frame(struct mac_context *mac_ctx,
 		return QDF_STATUS_E_NOMEM;
 	}
 
+	/*
+	 * Some IOT APs doesn't respond to unicast probe requests,
+	 * however those APs respond to broadcast probe requests.
+	 * Therefore for hidden ssid connections, after 3 unicast probe
+	 * requests, try the pending probes with broadcast mac.
+	 */
+	if (pesession && !WLAN_REG_IS_6GHZ_CHAN_FREQ(pesession->curr_op_freq) &&
+	    pesession->join_probe_cnt > 2)
+		sir_copy_mac_addr(bssid, bcast_mac);
+
 	/* The scheme here is to fill out a 'tDot11fProbeRequest' structure */
 	/* and then hand it off to 'dot11f_pack_probe_request' (for */
 	/* serialization). */
@@ -339,9 +350,12 @@ lim_send_probe_req_mgmt_frame(struct mac_context *mac_ctx,
 				    &pr->he_6ghz_band_cap);
 
 	if (IS_DOT11_MODE_EHT(dot11mode) && pesession &&
-			pesession->lim_join_req) {
+	    pesession->lim_join_req &&
+	    !qdf_is_macaddr_broadcast((struct qdf_mac_addr *)bssid)) {
 		lim_update_session_eht_capable(mac_ctx, pesession);
-		mlo_ie_len = lim_send_probe_req_frame_mlo(mac_ctx, pesession);
+
+		if (pesession->lim_join_req->bssDescription.is_ml_ap)
+			mlo_ie_len = lim_send_probe_req_frame_mlo(mac_ctx, pesession);
 	}
 
 	populate_dot11f_eht_caps(mac_ctx, pesession, &pr->eht_cap);
@@ -2399,8 +2413,8 @@ lim_send_assoc_req_mgmt_frame(struct mac_context *mac_ctx,
 	uint8_t *eht_cap_ie = NULL, eht_cap_ie_len = 0;
 	bool bss_mfp_capable, frag_ie_present = false;
 	int8_t peer_rssi = 0;
-	bool is_band_2g;
-	uint16_t mlo_ie_len, fils_hlp_ie_len = 0;
+	bool is_band_2g, is_ml_ap;
+	uint16_t mlo_ie_len = 0, fils_hlp_ie_len = 0;
 	uint8_t *fils_hlp_ie = NULL;
 	struct cm_roam_values_copy mdie_cfg = {0};
 
@@ -2641,12 +2655,14 @@ lim_send_assoc_req_mgmt_frame(struct mac_context *mac_ctx,
 		lim_strip_mlo_ie(mac_ctx, add_ie, &add_ie_len);
 	}
 
-	mlo_ie_len = lim_fill_assoc_req_mlo_ie(mac_ctx, pe_session, frm);
+	is_ml_ap = !!pe_session->lim_join_req->bssDescription.is_ml_ap;
+	if (is_ml_ap)
+		mlo_ie_len = lim_fill_assoc_req_mlo_ie(mac_ctx, pe_session, frm);
 
 	/**
 	 * In case of ML connection, if ML IE length is 0 then return failure.
 	 */
-	if (mlo_is_mld_sta(pe_session->vdev) && !mlo_ie_len) {
+	if (is_ml_ap && mlo_is_mld_sta(pe_session->vdev) && !mlo_ie_len) {
 		pe_err("Failed to add ML IE for vdev:%d", pe_session->vdev_id);
 		goto end;
 	}

+ 4 - 3
core/mac/src/pe/lim/lim_send_sme_rsp_messages.c

@@ -882,6 +882,7 @@ void lim_send_sme_disassoc_deauth_ntf(struct mac_context *mac,
 
 void lim_send_sme_disassoc_ntf(struct mac_context *mac,
 			       tSirMacAddr peerMacAddr,
+			       tSirMacAddr peerMldAddr,
 			       tSirResultCodes reasonCode,
 			       uint16_t disassocTrigger,
 			       uint16_t aid,
@@ -915,9 +916,9 @@ void lim_send_sme_disassoc_ntf(struct mac_context *mac,
 			if (session->valid &&
 			    (session->opmode == QDF_SAP_MODE)) {
 				/* Find the sta ds entry in another session */
-				sta_ds = dph_lookup_hash_entry(mac,
-						peerMacAddr, &assoc_id,
-						&session->dph.dphHashTable);
+				sta_ds = lim_get_sta_ds(mac, peerMacAddr,
+							peerMldAddr, &assoc_id,
+							session);
 				if (sta_ds)
 					break;
 			}

+ 2 - 0
core/mac/src/pe/lim/lim_send_sme_rsp_messages.h

@@ -134,6 +134,7 @@ QDF_STATUS lim_prepare_disconnect_done_ind(struct mac_context *mac_ctx,
  * lim_send_sme_disassoc_ntf() - Send disassoc notification to upper layer
  * @mac: Global MAC context
  * @peerMacAddr: The peer MAC addr to which disassociate was initiated
+ * @peerMldAddr: Peer MLD mac
  * @reasonCode: The reason for Disassociation
  * @disassocTrigger: The trigger for Disassociation
  * @aid: The STAID. This parameter is present only on AP
@@ -148,6 +149,7 @@ QDF_STATUS lim_prepare_disconnect_done_ind(struct mac_context *mac_ctx,
  */
 void lim_send_sme_disassoc_ntf(struct mac_context *mac,
 			       tSirMacAddr peerMacAddr,
+			       tSirMacAddr peerMldAddr,
 			       tSirResultCodes reasonCode,
 			       uint16_t disassocTrigger,
 			       uint16_t aid,

+ 27 - 3
core/mac/src/pe/lim/lim_types.h

@@ -1,6 +1,6 @@
 /*
  * Copyright (c) 2012-2021 The Linux Foundation. All rights reserved.
- * Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2021-2024 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
@@ -322,6 +322,7 @@ typedef struct sLimMlmDisassocReq {
 
 typedef struct sLimMlmDisassocCnf {
 	tSirMacAddr peerMacAddr;
+	tSirMacAddr peerMldAddr;
 	tSirResultCodes resultCode;
 	uint16_t disassocTrigger;
 	uint16_t aid;
@@ -1397,8 +1398,25 @@ void lim_send_sme_disassoc_deauth_ntf(struct mac_context *mac_ctx,
 				QDF_STATUS status, uint32_t *ctx);
 
 #ifdef FEATURE_WLAN_TDLS
-QDF_STATUS lim_process_sme_del_all_tdls_peers(struct mac_context *p_mac,
-						 uint32_t *msg_buf);
+/**
+ * lim_process_sme_del_all_tdls_peers(): process delete tdls peers
+ * @mac: pointer to mac context
+ * @msg_buf: message buffer
+ *
+ * This function processes request to delete tdls peers
+ *
+ * Return: Success: QDF_STATUS_SUCCESS Failure: Error value
+ */
+QDF_STATUS
+lim_process_sme_del_all_tdls_peers(struct mac_context *mac, uint32_t *msg_buf);
+
+/**
+ * lim_delete_all_tdls_peers() - Delete all TDLS peers
+ * @vdev: Pointer to vdev object
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS lim_delete_all_tdls_peers(struct wlan_objmgr_vdev *vdev);
 #else
 static inline
 QDF_STATUS lim_process_sme_del_all_tdls_peers(struct mac_context *p_mac,
@@ -1406,6 +1424,12 @@ QDF_STATUS lim_process_sme_del_all_tdls_peers(struct mac_context *p_mac,
 {
 	return QDF_STATUS_SUCCESS;
 }
+
+static inline
+QDF_STATUS lim_delete_all_tdls_peers(struct wlan_objmgr_vdev *vdev)
+{
+	return QDF_STATUS_SUCCESS;
+}
 #endif
 
 /**

+ 10 - 2
core/mac/src/pe/lim/lim_utils.c

@@ -9034,18 +9034,26 @@ void lim_log_eht_op(struct mac_context *mac, tDot11fIEeht_op *eht_ops,
 }
 
 static void
-lim_revise_eht_caps(struct mac_context *mac, tDot11fIEeht_cap *eht_cap)
+lim_revise_eht_caps_per_band(struct mac_context *mac, enum cds_band_type band,
+			     tDot11fIEeht_cap *eht_cap)
 {
 	uint32_t country_max_allowed_bw;
 
+	if (band == CDS_BAND_2GHZ)
+		return;
+
 	country_max_allowed_bw = wlan_reg_get_country_max_allowed_bw(mac->pdev);
 	if (!country_max_allowed_bw) {
 		pe_debug("Failed to get country_max_allowed_bw");
 		return;
+	} else {
+		pe_debug("max_allowed_bw %d", country_max_allowed_bw);
 	}
 
 	if (country_max_allowed_bw < BW_320_MHZ)
 		eht_cap->support_320mhz_6ghz = 0;
+	else if (country_max_allowed_bw == BW_320_MHZ)
+		eht_cap->support_320mhz_6ghz = 1;
 }
 
 void lim_set_eht_caps(struct mac_context *mac,
@@ -9067,7 +9075,7 @@ void lim_set_eht_caps(struct mac_context *mac,
 		is_band_2g = true;
 
 	populate_dot11f_eht_caps_by_band(mac, is_band_2g, &dot11_cap, NULL);
-	lim_revise_eht_caps(mac, &dot11_cap);
+	lim_revise_eht_caps_per_band(mac, band, &dot11_cap);
 	populate_dot11f_he_caps_by_band(mac, is_band_2g, &dot11_he_cap,
 					NULL);
 	lim_log_eht_cap(mac, &dot11_cap);

+ 3 - 1
core/mac/src/pe/lim/lim_utils.h

@@ -1048,6 +1048,7 @@ QDF_STATUS lim_send_ies_per_band(struct mac_context *mac_ctx,
 
 /**
  * lim_update_connect_rsn_ie() - Update the connection RSN IE
+ * @mac_ctx: MAC context
  * @session: PE session
  * @rsn_ie_buf: RSN IE buffer
  * @pmksa: PMKSA entry for the connecting AP
@@ -1055,7 +1056,8 @@ QDF_STATUS lim_send_ies_per_band(struct mac_context *mac_ctx,
  * Return: None
  */
 void
-lim_update_connect_rsn_ie(struct pe_session *session, uint8_t *rsn_ie_buf,
+lim_update_connect_rsn_ie(struct mac_context *mac_ctx,
+			  struct pe_session *session, uint8_t *rsn_ie_buf,
 			  struct wlan_crypto_pmksa *pmksa);
 
 /**

+ 1 - 1
core/mac/src/pe/rrm/rrm_api.c

@@ -1743,7 +1743,7 @@ rrm_process_beacon_report_xmit(struct mac_context *mac_ctx,
 					beacon_xmit_ind->duration;
 				beacon_report->phyType = bss_desc->nwType;
 				beacon_report->bcnProbeRsp = 1;
-				beacon_report->rsni = bss_desc->sinr;
+				beacon_report->rsni = 0;
 
 				rrm_calculate_and_fill_rcpi(&beacon_report->rcpi,
 							    bss_desc->rssi);

+ 9 - 24
core/mac/src/sys/legacy/src/utils/src/parser_api.c

@@ -11977,23 +11977,6 @@ uint32_t wlan_get_11h_power_constraint(struct mac_context *mac_ctx,
 	return local_power_constraint;
 }
 
-#ifdef FEATURE_WLAN_ESE
-static void wlan_fill_qbss_load_param(tDot11fBeaconIEs *bcn_ies,
-				      struct bss_description *bss_desc)
-{
-	if (!bcn_ies->QBSSLoad.present)
-		return;
-
-	bss_desc->QBSSLoad_present = true;
-	bss_desc->QBSSLoad_avail = bcn_ies->QBSSLoad.avail;
-}
-#else
-static void wlan_fill_qbss_load_param(tDot11fBeaconIEs *bcn_ies,
-				      struct bss_description *bss_desc)
-{
-}
-#endif
-
 #ifdef WLAN_FEATURE_FILS_SK
 static void wlan_update_bss_with_fils_data(struct mac_context *mac_ctx,
 					  struct scan_cache_entry *scan_entry,
@@ -12083,7 +12066,6 @@ wlan_fill_bss_desc_from_scan_entry(struct mac_context *mac_ctx,
 
 	qdf_mem_copy(bss_desc->bssId, scan_entry->bssid.bytes,
 		     QDF_MAC_ADDR_SIZE);
-	bss_desc->scansystimensec = scan_entry->boottime_ns;
 	qdf_mem_copy(bss_desc->timeStamp,
 		scan_entry->tsf_info.data, 8);
 
@@ -12103,8 +12085,6 @@ wlan_fill_bss_desc_from_scan_entry(struct mac_context *mac_ctx,
 
 	/* channel frequency what peer sent in beacon/probersp. */
 	bss_desc->chan_freq = scan_entry->channel.chan_freq;
-	bss_desc->received_time =
-		scan_entry->scan_entry_time;
 	bss_desc->startTSF[0] =
 		mac_ctx->rrm.rrmPEContext.startTSF[0];
 	bss_desc->startTSF[1] =
@@ -12113,9 +12093,9 @@ wlan_fill_bss_desc_from_scan_entry(struct mac_context *mac_ctx,
 		scan_entry->rrm_parent_tsf;
 	bss_desc->fProbeRsp = (scan_entry->frm_subtype ==
 			  MGMT_SUBTYPE_PROBE_RESP);
-	bss_desc->seq_ctrl = hdr->seqControl;
-	bss_desc->tsf_delta = scan_entry->tsf_delta;
 	bss_desc->adaptive_11r_ap = scan_entry->adaptive_11r_ap;
+	bss_desc->is_ml_ap  =
+			util_scan_entry_bv_ml_ie(scan_entry) ? true : false;
 
 	bss_desc->mbo_oce_enabled_ap =
 			util_scan_entry_mbo_oce(scan_entry) ? true : false;
@@ -12143,7 +12123,6 @@ wlan_fill_bss_desc_from_scan_entry(struct mac_context *mac_ctx,
 			(bcn_ies->MobilityDomain.resourceReqCap << 1));
 	}
 
-	wlan_fill_qbss_load_param(bcn_ies, bss_desc);
 	wlan_update_bss_with_fils_data(mac_ctx, scan_entry, bss_desc);
 
 	qdf_mem_free(bcn_ies);
@@ -12916,6 +12895,7 @@ QDF_STATUS populate_dot11f_mlo_ie(struct mac_context *mac_ctx,
 	struct wlan_mlo_eml_cap eml_cap = {0};
 	uint16_t presence_bitmap = 0;
 	bool emlsr_cap,  emlsr_enabled = false;
+	bool aux_emlsr_support = false;
 
 	if (!mac_ctx || !mlo_ie)
 		return QDF_STATUS_E_NULL_VALUE;
@@ -12959,8 +12939,13 @@ QDF_STATUS populate_dot11f_mlo_ie(struct mac_context *mac_ctx,
 	/* Check if vendor command chooses eMLSR mode */
 	wlan_mlme_get_emlsr_mode_enabled(mac_ctx->psoc, &emlsr_enabled);
 
+	/* check if aux elmsr capable */
+	aux_emlsr_support = wlan_mlme_is_aux_emlsr_support(mac_ctx->psoc,
+							   WLAN_MLME_HW_MODE_MAX);
+
 	/* Check if STA supports EMLSR and vendor command prefers EMLSR mode */
-	if (emlsr_cap && emlsr_enabled) {
+	if ((emlsr_cap && emlsr_enabled) ||
+	    aux_emlsr_support) {
 		wlan_mlme_get_eml_params(psoc, &eml_cap);
 		mlo_ie->eml_capab_present = 1;
 		presence_bitmap |= WLAN_ML_BV_CTRL_PBM_EMLCAP_P;

+ 3 - 3
core/sme/src/common/sme_api.c

@@ -7710,17 +7710,17 @@ QDF_STATUS sme_set_ht2040_mode(mac_handle_t mac_handle, uint8_t sessionId,
 
 	switch (channel_type) {
 	case eHT_CHAN_HT20:
-		if (!session->cb_mode)
+		if (session->cb_mode == PHY_SINGLE_CHANNEL_CENTERED)
 			return QDF_STATUS_SUCCESS;
 		cb_mode = PHY_SINGLE_CHANNEL_CENTERED;
 		break;
 	case eHT_CHAN_HT40MINUS:
-		if (session->cb_mode)
+		if (session->cb_mode != PHY_SINGLE_CHANNEL_CENTERED)
 			return QDF_STATUS_SUCCESS;
 		cb_mode = PHY_DOUBLE_CHANNEL_HIGH_PRIMARY;
 		break;
 	case eHT_CHAN_HT40PLUS:
-		if (session->cb_mode)
+		if (session->cb_mode != PHY_SINGLE_CHANNEL_CENTERED)
 			return QDF_STATUS_SUCCESS;
 		cb_mode = PHY_DOUBLE_CHANNEL_LOW_PRIMARY;
 		break;

+ 19 - 7
wlan_qcacld3_modules.bzl

@@ -7,16 +7,19 @@ _target_chipset_map = {
 	"kiwi-v2",
     ],
     "pineapple": [
+	"peach-v2",
 	"peach",
 	"kiwi-v2",
 	"qca6750",
     ],
     "sun": [
+	"peach-v2",
         "peach",
         "kiwi-v2",
     ],
     "volcano": [
         "qca6750",
+	"peach-v2",
     ],
     "parrot": [
         "qca6750",
@@ -27,14 +30,19 @@ _target_chipset_map = {
 _chipset_hw_map = {
     "kiwi-v2": "BERYLLIUM",
     "peach": "BERYLLIUM",
+    "peach-v2": "BERYLLIUM",
     "qca6750": "MOSELLE",
     "adrastea" : "ADRASTEA",
 }
 
 _chipset_header_map = {
+    "peach-v2": [
+        "api/hw/peach/v2",
+        "cmn/hal/wifi3.0/peach",
+    ],
     "peach": [
         "api/hw/peach/v1",
-        "cmn/hal/wifi3.0/kiwi",
+        "cmn/hal/wifi3.0/peach",
     ],
     "kiwi-v2": [
         "api/hw/kiwi/v2",
@@ -693,19 +701,23 @@ _conditional_srcs = {
     },
     "CONFIG_CNSS_KIWI_V2": {
         True: [
-            "cmn/hal/wifi3.0/kiwi/hal_kiwi.c",
             "cmn/hif/src/kiwidef.c",
         ],
     },
-    "CONFIG_QCA6750_HEADERS_DEF": {
+    "CONFIG_INCLUDE_HAL_KIWI": {
         True: [
-            "cmn/hal/wifi3.0/qca6750/hal_6750.c",
-            "cmn/hif/src/qca6750def.c",
+            "cmn/hal/wifi3.0/kiwi/hal_kiwi.c",
         ],
     },
-    "CONFIG_CNSS_PEACH": {
+    "CONFIG_INCLUDE_HAL_PEACH": {
         True: [
-            "cmn/hal/wifi3.0/kiwi/hal_kiwi.c",
+            "cmn/hal/wifi3.0/peach/hal_peach.c",
+        ],
+    },
+    "CONFIG_QCA6750_HEADERS_DEF": {
+        True: [
+            "cmn/hal/wifi3.0/qca6750/hal_6750.c",
+            "cmn/hif/src/qca6750def.c",
         ],
     },
     "CONFIG_CP_STATS": {