diff --git a/src/common/hw_features_common.c b/src/common/hw_features_common.c
index 2c47bf8..f45d2e9 100644
--- a/src/common/hw_features_common.c
+++ b/src/common/hw_features_common.c
@@ -381,75 +381,6 @@
 }
 
 
-static void punct_update_legacy_bw_80(u8 bitmap, u8 pri_chan, u8 *seg0)
-{
-	u8 first_chan = *seg0 - 6, sec_chan;
-
-	switch (bitmap) {
-	case 0x6:
-		*seg0 = 0;
-		return;
-	case 0x8:
-	case 0x4:
-	case 0x2:
-	case 0x1:
-	case 0xC:
-	case 0x3:
-		if (pri_chan < *seg0)
-			*seg0 -= 4;
-		else
-			*seg0 += 4;
-		break;
-	}
-
-	if (pri_chan < *seg0)
-		sec_chan = pri_chan + 4;
-	else
-		sec_chan = pri_chan - 4;
-
-	if (bitmap & BIT((sec_chan - first_chan) / 4))
-		*seg0 = 0;
-}
-
-
-static void punct_update_legacy_bw_160(u8 bitmap, u8 pri,
-				       enum oper_chan_width *width, u8 *seg0)
-{
-	if (pri < *seg0) {
-		*seg0 -= 8;
-		if (bitmap & 0x0F) {
-			*width = 0;
-			punct_update_legacy_bw_80(bitmap & 0xF, pri, seg0);
-		}
-	} else {
-		*seg0 += 8;
-		if (bitmap & 0xF0) {
-			*width = 0;
-			punct_update_legacy_bw_80((bitmap & 0xF0) >> 4, pri,
-						  seg0);
-		}
-	}
-}
-
-
-void punct_update_legacy_bw(u16 bitmap, u8 pri, enum oper_chan_width *width,
-			    u8 *seg0, u8 *seg1)
-{
-	if (*width == CONF_OPER_CHWIDTH_80MHZ && (bitmap & 0xF)) {
-		*width = CONF_OPER_CHWIDTH_USE_HT;
-		punct_update_legacy_bw_80(bitmap & 0xF, pri, seg0);
-	}
-
-	if (*width == CONF_OPER_CHWIDTH_160MHZ && (bitmap & 0xFF)) {
-		*width = CONF_OPER_CHWIDTH_80MHZ;
-		*seg1 = 0;
-		punct_update_legacy_bw_160(bitmap & 0xFF, pri, width, seg0);
-	}
-
-	/* TODO: 320 MHz */
-}
-
-
 int hostapd_set_freq_params(struct hostapd_freq_params *data,
 			    enum hostapd_hw_mode mode,
 			    int freq, int channel, int enable_edmg,
@@ -460,12 +391,8 @@
 			    int center_segment0,
 			    int center_segment1, u32 vht_caps,
 			    struct he_capabilities *he_cap,
-			    struct eht_capabilities *eht_cap,
-			    u16 punct_bitmap)
+			    struct eht_capabilities *eht_cap)
 {
-	enum oper_chan_width oper_chwidth_legacy;
-	u8 seg0_legacy, seg1_legacy;
-
 	if (!he_cap || !he_cap->he_supported)
 		he_enabled = 0;
 	if (!eht_cap || !eht_cap->eht_supported)
@@ -651,14 +578,6 @@
 		break;
 	}
 
-	oper_chwidth_legacy = oper_chwidth;
-	seg0_legacy = center_segment0;
-	seg1_legacy = center_segment1;
-	if (punct_bitmap)
-		punct_update_legacy_bw(punct_bitmap, channel,
-				       &oper_chwidth_legacy,
-				       &seg0_legacy, &seg1_legacy);
-
 	if (data->eht_enabled || data->he_enabled ||
 	    data->vht_enabled) switch (oper_chwidth) {
 	case CONF_OPER_CHWIDTH_USE_HT:
@@ -683,8 +602,7 @@
 		/* fall through */
 	case CONF_OPER_CHWIDTH_80MHZ:
 		data->bandwidth = 80;
-		if (!sec_channel_offset &&
-		    oper_chwidth_legacy != CONF_OPER_CHWIDTH_USE_HT) {
+		if (!sec_channel_offset) {
 			wpa_printf(MSG_ERROR,
 				   "80/80+80 MHz: no second channel offset");
 			return -1;
@@ -742,8 +660,7 @@
 				   "160 MHz: center segment 1 should not be set");
 			return -1;
 		}
-		if (!sec_channel_offset &&
-		    oper_chwidth_legacy != CONF_OPER_CHWIDTH_USE_HT) {
+		if (!sec_channel_offset) {
 			wpa_printf(MSG_ERROR,
 				   "160 MHz: second channel offset not set");
 			return -1;
diff --git a/src/common/hw_features_common.h b/src/common/hw_features_common.h
index e791c33..82e0282 100644
--- a/src/common/hw_features_common.h
+++ b/src/common/hw_features_common.h
@@ -35,8 +35,6 @@
 int check_40mhz_2g4(struct hostapd_hw_modes *mode,
 		    struct wpa_scan_results *scan_res, int pri_chan,
 		    int sec_chan);
-void punct_update_legacy_bw(u16 bitmap, u8 pri_chan,
-			    enum oper_chan_width *width, u8 *seg0, u8 *seg1);
 int hostapd_set_freq_params(struct hostapd_freq_params *data,
 			    enum hostapd_hw_mode mode,
 			    int freq, int channel, int edmg, u8 edmg_channel,
@@ -47,8 +45,7 @@
 			    int center_segment0,
 			    int center_segment1, u32 vht_caps,
 			    struct he_capabilities *he_caps,
-			    struct eht_capabilities *eht_cap,
-			    u16 punct_bitmap);
+			    struct eht_capabilities *eht_cap);
 void set_disable_ht40(struct ieee80211_ht_capabilities *htcaps,
 		      int disabled);
 int ieee80211ac_cap_check(u32 hw, u32 conf);
diff --git a/src/common/ieee802_11_common.c b/src/common/ieee802_11_common.c
index 4de88d1..08ba45b 100644
--- a/src/common/ieee802_11_common.c
+++ b/src/common/ieee802_11_common.c
@@ -2050,13 +2050,6 @@
 }
 
 
-bool is_80plus_op_class(u8 op_class)
-{
-	/* Operating classes with "80+" behavior indication in Table E-4 */
-	return op_class == 130 || op_class == 135;
-}
-
-
 static int is_11b(u8 rate)
 {
 	return rate == 0x02 || rate == 0x04 || rate == 0x0b || rate == 0x16
@@ -2424,17 +2417,9 @@
 	 * channel center frequency index value, but it happens to be a 20 MHz
 	 * channel and the channel number in the channel set would match the
 	 * value in for the frequency center.
-	 *
-	 * Operating class value pair 128 and 130 is used to describe a 80+80
-	 * MHz channel on the 5 GHz band. 130 is identified with "80+", so this
-	 * is encoded with two octets 130 and 128. Similarly, operating class
-	 * value pair 133 and 135 is used to describe a 80+80 MHz channel on
-	 * the 6 GHz band (135 being the one with "80+" indication). All other
-	 * operating classes listed here are used as 1-octet values.
 	 */
 	{ HOSTAPD_MODE_IEEE80211A, 128, 36, 177, 4, BW80, P2P_SUPP },
 	{ HOSTAPD_MODE_IEEE80211A, 129, 36, 177, 4, BW160, P2P_SUPP },
-	{ HOSTAPD_MODE_IEEE80211A, 130, 36, 177, 4, BW80P80, P2P_SUPP },
 	{ HOSTAPD_MODE_IEEE80211A, 131, 1, 233, 4, BW20, P2P_SUPP },
 	{ HOSTAPD_MODE_IEEE80211A, 132, 1, 233, 8, BW40, P2P_SUPP },
 	{ HOSTAPD_MODE_IEEE80211A, 133, 1, 233, 16, BW80, P2P_SUPP },
@@ -2442,9 +2427,6 @@
 	{ HOSTAPD_MODE_IEEE80211A, 135, 1, 233, 16, BW80P80, NO_P2P_SUPP },
 	{ HOSTAPD_MODE_IEEE80211A, 136, 2, 2, 4, BW20, NO_P2P_SUPP },
 
-	/* IEEE P802.11be/D5.0, Table E-4 (Global operating classes) */
-	{ HOSTAPD_MODE_IEEE80211A, 137, 31, 191, 32, BW320, NO_P2P_SUPP },
-
 	/*
 	 * IEEE Std 802.11ad-2012 and P802.ay/D5.0 60 GHz operating classes.
 	 * Class 180 has the legacy channels 1-6. Classes 181-183 include
@@ -2455,6 +2437,11 @@
 	{ HOSTAPD_MODE_IEEE80211AD, 182, 17, 20, 1, BW6480, P2P_SUPP },
 	{ HOSTAPD_MODE_IEEE80211AD, 183, 25, 27, 1, BW8640, P2P_SUPP },
 
+	/* Keep the operating class 130 as the last entry as a workaround for
+	 * the OneHundredAndThirty Delimiter value used in the Supported
+	 * Operating Classes element to indicate the end of the Operating
+	 * Classes field. */
+	{ HOSTAPD_MODE_IEEE80211A, 130, 36, 177, 4, BW80P80, P2P_SUPP },
 	{ -1, 0, 0, 0, 0, BW20, NO_P2P_SUPP }
 };
 
@@ -2582,141 +2569,21 @@
 }
 
 
-u16 check_multi_ap_ie(const u8 *multi_ap_ie, size_t multi_ap_len,
-		      struct multi_ap_params *multi_ap)
-{
-	const struct element *elem;
-	bool ext_present = false;
-	unsigned int vlan_id;
-
-	os_memset(multi_ap, 0, sizeof(*multi_ap));
-
-	/* Default profile is 1, when Multi-AP profile subelement is not
-	 * present in the element. */
-	multi_ap->profile = 1;
-
-	for_each_element(elem, multi_ap_ie, multi_ap_len) {
-		u8 id = elem->id, elen = elem->datalen;
-		const u8 *pos = elem->data;
-
-		switch (id) {
-		case MULTI_AP_SUB_ELEM_TYPE:
-			if (elen >= 1) {
-				multi_ap->capability = *pos;
-				ext_present = true;
-			} else {
-				wpa_printf(MSG_DEBUG,
-					   "Multi-AP invalid Multi-AP subelement");
-				return WLAN_STATUS_INVALID_IE;
-			}
-			break;
-		case MULTI_AP_PROFILE_SUB_ELEM_TYPE:
-			if (elen < 1) {
-				wpa_printf(MSG_DEBUG,
-					   "Multi-AP IE invalid Multi-AP profile subelement");
-				return WLAN_STATUS_INVALID_IE;
-			}
-
-			multi_ap->profile = *pos;
-			if (multi_ap->profile > MULTI_AP_PROFILE_MAX) {
-				wpa_printf(MSG_DEBUG,
-					   "Multi-AP IE with invalid profile 0x%02x",
-					   multi_ap->profile);
-				return WLAN_STATUS_ASSOC_DENIED_UNSPEC;
-			}
-			break;
-		case MULTI_AP_VLAN_SUB_ELEM_TYPE:
-			if (multi_ap->profile < MULTI_AP_PROFILE_2) {
-				wpa_printf(MSG_DEBUG,
-					   "Multi-AP IE invalid profile to read VLAN IE");
-				return WLAN_STATUS_INVALID_IE;
-			}
-			if (elen < 2) {
-				wpa_printf(MSG_DEBUG,
-					   "Multi-AP IE invalid Multi-AP VLAN subelement");
-				return WLAN_STATUS_INVALID_IE;
-			}
-
-			vlan_id = WPA_GET_LE16(pos);
-			if (vlan_id < 1 || vlan_id > 4094) {
-				wpa_printf(MSG_INFO,
-					   "Multi-AP IE invalid Multi-AP VLAN ID %d",
-					   vlan_id);
-				return WLAN_STATUS_INVALID_IE;
-			}
-			multi_ap->vlanid = vlan_id;
-			break;
-		default:
-			wpa_printf(MSG_DEBUG,
-				   "Ignore unknown subelement %u in Multi-AP IE",
-				   id);
-			break;
-		}
-	}
-
-	if (!for_each_element_completed(elem, multi_ap_ie, multi_ap_len)) {
-		wpa_printf(MSG_DEBUG, "Multi AP IE parse failed @%d",
-			   (int) (multi_ap_ie + multi_ap_len -
-				  (const u8 *) elem));
-		wpa_hexdump(MSG_MSGDUMP, "IEs", multi_ap_ie, multi_ap_len);
-	}
-
-	if (!ext_present) {
-		wpa_printf(MSG_DEBUG,
-			   "Multi-AP element without Multi-AP Extension subelement");
-		return WLAN_STATUS_INVALID_IE;
-	}
-
-	return WLAN_STATUS_SUCCESS;
-}
-
-
-size_t add_multi_ap_ie(u8 *buf, size_t len,
-		       const struct multi_ap_params *multi_ap)
+size_t add_multi_ap_ie(u8 *buf, size_t len, u8 value)
 {
 	u8 *pos = buf;
-	u8 *len_ptr;
 
-	if (len < 6)
+	if (len < 9)
 		return 0;
 
 	*pos++ = WLAN_EID_VENDOR_SPECIFIC;
-	len_ptr = pos; /* Length field to be set at the end */
-	pos++;
+	*pos++ = 7; /* len */
 	WPA_PUT_BE24(pos, OUI_WFA);
 	pos += 3;
 	*pos++ = MULTI_AP_OUI_TYPE;
-
-	/* Multi-AP Extension subelement */
-	if (buf + len - pos < 3)
-		return 0;
 	*pos++ = MULTI_AP_SUB_ELEM_TYPE;
 	*pos++ = 1; /* len */
-	*pos++ = multi_ap->capability;
-
-	/* Add Multi-AP Profile subelement only for R2 or newer configuration */
-	if (multi_ap->profile >= MULTI_AP_PROFILE_2) {
-		if (buf + len - pos < 3)
-			return 0;
-		*pos++ = MULTI_AP_PROFILE_SUB_ELEM_TYPE;
-		*pos++ = 1;
-		*pos++ = multi_ap->profile;
-	}
-
-	/* Add Multi-AP Default 802.1Q Setting subelement only for backhaul BSS
-	 */
-	if (multi_ap->vlanid &&
-	    multi_ap->profile >= MULTI_AP_PROFILE_2 &&
-	    (multi_ap->capability & MULTI_AP_BACKHAUL_BSS)) {
-		if (buf + len - pos < 4)
-			return 0;
-		*pos++ = MULTI_AP_VLAN_SUB_ELEM_TYPE;
-		*pos++ = 2;
-		WPA_PUT_LE16(pos, multi_ap->vlanid);
-		pos += 2;
-	}
-
-	*len_ptr = pos - len_ptr - 1;
+	*pos++ = value;
 
 	return pos - buf;
 }
@@ -2881,8 +2748,6 @@
 	case BW80P80:
 	case BW160:
 		return 160;
-	case BW320:
-		return 320;
 	case BW2160:
 		return 2160;
 	default:
diff --git a/src/common/ieee802_11_common.h b/src/common/ieee802_11_common.h
index 56eb0df..60260e5 100644
--- a/src/common/ieee802_11_common.h
+++ b/src/common/ieee802_11_common.h
@@ -30,12 +30,6 @@
 	u8 nof_ies;
 };
 
-struct multi_ap_params {
-	u8 capability;
-	u8 profile;
-	u16 vlanid;
-};
-
 /* Parsed Information Elements */
 struct ieee802_11_elems {
 	const u8 *ssid;
@@ -241,7 +235,6 @@
 int ieee80211_is_dfs(int freq, const struct hostapd_hw_modes *modes,
 		     u16 num_modes);
 int is_dfs_global_op_class(u8 op_class);
-bool is_80plus_op_class(u8 op_class);
 enum phy_type ieee80211_get_phy_type(int freq, int ht, int vht);
 
 int supp_rates_11b_only(struct ieee802_11_elems *elems);
@@ -260,7 +253,7 @@
 	u8 max_chan;
 	u8 inc;
 	enum { BW20, BW40PLUS, BW40MINUS, BW40, BW80, BW2160, BW160, BW80P80,
-	       BW320, BW4320, BW6480, BW8640} bw;
+	       BW4320, BW6480, BW8640} bw;
 	enum { P2P_SUPP, NO_P2P_SUPP } p2p;
 };
 
@@ -273,10 +266,7 @@
 
 size_t mbo_add_ie(u8 *buf, size_t len, const u8 *attr, size_t attr_len);
 
-u16 check_multi_ap_ie(const u8 *multi_ap_ie, size_t multi_ap_len,
-		      struct multi_ap_params *multi_ap);
-size_t add_multi_ap_ie(u8 *buf, size_t len,
-		       const struct multi_ap_params *multi_ap);
+size_t add_multi_ap_ie(u8 *buf, size_t len, u8 value);
 
 struct country_op_class {
 	u8 country_op_class;
diff --git a/src/common/ieee802_11_defs.h b/src/common/ieee802_11_defs.h
index 644bebd..619aa19 100644
--- a/src/common/ieee802_11_defs.h
+++ b/src/common/ieee802_11_defs.h
@@ -1453,20 +1453,11 @@
 #define WFA_CAPA_OUI_TYPE 0x23
 
 #define MULTI_AP_SUB_ELEM_TYPE 0x06
-#define MULTI_AP_PROFILE_SUB_ELEM_TYPE 0x07
-#define MULTI_AP_VLAN_SUB_ELEM_TYPE 0x08
-
-#define MULTI_AP_PROFILE2_BACKHAUL_STA_DISALLOWED BIT(2)
-#define MULTI_AP_PROFILE1_BACKHAUL_STA_DISALLOWED BIT(3)
 #define MULTI_AP_TEAR_DOWN BIT(4)
 #define MULTI_AP_FRONTHAUL_BSS BIT(5)
 #define MULTI_AP_BACKHAUL_BSS BIT(6)
 #define MULTI_AP_BACKHAUL_STA BIT(7)
 
-#define MULTI_AP_PROFILE_1	1
-#define MULTI_AP_PROFILE_2	2
-#define MULTI_AP_PROFILE_MAX	6
-
 #define WMM_OUI_TYPE 2
 #define WMM_OUI_SUBTYPE_INFORMATION_ELEMENT 0
 #define WMM_OUI_SUBTYPE_PARAMETER_ELEMENT 1
diff --git a/src/common/ptksa_cache.c b/src/common/ptksa_cache.c
index 918a1cc..c00f288 100644
--- a/src/common/ptksa_cache.c
+++ b/src/common/ptksa_cache.c
@@ -19,8 +19,6 @@
 	unsigned int n_ptksa;
 };
 
-#ifdef CONFIG_PTKSA_CACHE
-
 static void ptksa_cache_set_expiration(struct ptksa_cache *ptksa);
 
 
@@ -344,44 +342,3 @@
 
 	return entry;
 }
-
-#else /* CONFIG_PTKSA_CACHE */
-
-struct ptksa_cache * ptksa_cache_init(void)
-{
-	return (struct ptksa_cache *) 1;
-}
-
-
-void ptksa_cache_deinit(struct ptksa_cache *ptksa)
-{
-}
-
-
-struct ptksa_cache_entry *
-ptksa_cache_get(struct ptksa_cache *ptksa, const u8 *addr, u32 cipher)
-{
-	return NULL;
-}
-
-
-int ptksa_cache_list(struct ptksa_cache *ptksa, char *buf, size_t len)
-{
-	return -1;
-}
-
-
-struct ptksa_cache_entry *
-ptksa_cache_add(struct ptksa_cache *ptksa, const u8 *own_addr, const u8 *addr,
-		u32 cipher, u32 life_time, const struct wpa_ptk *ptk,
-		void (*cb)(struct ptksa_cache_entry *e), void *ctx, u32 akmp)
-{
-	return NULL;
-}
-
-
-void ptksa_cache_flush(struct ptksa_cache *ptksa, const u8 *addr, u32 cipher)
-{
-}
-
-#endif /* CONFIG_PTKSA_CACHE */
diff --git a/src/common/ptksa_cache.h b/src/common/ptksa_cache.h
index dd5e7db..6182215 100644
--- a/src/common/ptksa_cache.h
+++ b/src/common/ptksa_cache.h
@@ -29,6 +29,7 @@
 	u32 akmp;
 };
 
+#ifdef CONFIG_PTKSA_CACHE
 
 struct ptksa_cache;
 
@@ -47,4 +48,41 @@
 					   void *ctx, u32 akmp);
 void ptksa_cache_flush(struct ptksa_cache *ptksa, const u8 *addr, u32 cipher);
 
+#else /* CONFIG_PTKSA_CACHE */
+
+static inline struct ptksa_cache * ptksa_cache_init(void)
+{
+	return (struct ptksa_cache *) 1;
+}
+
+static inline void ptksa_cache_deinit(struct ptksa_cache *ptksa)
+{
+}
+
+static inline struct ptksa_cache_entry *
+ptksa_cache_get(struct ptksa_cache *ptksa, const u8 *addr, u32 cipher)
+{
+	return NULL;
+}
+
+static inline int ptksa_cache_list(struct ptksa_cache *ptksa,
+				   char *buf, size_t len)
+{
+	return -1;
+}
+
+static inline struct ptksa_cache_entry *
+ptksa_cache_add(struct ptksa_cache *ptksa, const u8 *own_addr, const u8 *addr,
+		u32 cipher, u32 life_time, const struct wpa_ptk *ptk,
+		void (*cb)(struct ptksa_cache_entry *e), void *ctx, u32 akmp)
+{
+	return NULL;
+}
+
+static inline void ptksa_cache_flush(struct ptksa_cache *ptksa,
+				     const u8 *addr, u32 cipher)
+{
+}
+
+#endif /* CONFIG_PTKSA_CACHE */
 #endif /* PTKSA_CACHE_H */
diff --git a/src/common/qca-vendor.h b/src/common/qca-vendor.h
index 2a4086b..a5bbc78 100644
--- a/src/common/qca-vendor.h
+++ b/src/common/qca-vendor.h
@@ -1048,15 +1048,6 @@
  *	to user space to disassociate with a peer based on the peer MAC address
  *	provided. Specify the peer MAC address in
  *	QCA_WLAN_VENDOR_ATTR_MAC_ADDR. For MLO, MLD MAC address is provided.
- *
- * @QCA_NL80211_VENDOR_SUBCMD_ADJUST_TX_POWER: This vendor command is used to
- *	adjust transmit power. The attributes used with this subcommand are
- *	defined in enum qca_wlan_vendor_attr_adjust_tx_power.
- *
- * @QCA_NL80211_VENDOR_SUBCMD_SPECTRAL_SCAN_COMPLETE: Event indication from the
- *	driver to notify user application about the spectral scan completion.
- *	The attributes used with this subcommand are defined in
- *	enum qca_wlan_vendor_attr_spectral_scan_complete.
  */
 enum qca_nl80211_vendor_subcmds {
 	QCA_NL80211_VENDOR_SUBCMD_UNSPEC = 0,
@@ -1281,8 +1272,6 @@
 	QCA_NL80211_VENDOR_SUBCMD_FW_PAGE_FAULT_REPORT = 238,
 	QCA_NL80211_VENDOR_SUBCMD_FLOW_POLICY = 239,
 	QCA_NL80211_VENDOR_SUBCMD_DISASSOC_PEER = 240,
-	QCA_NL80211_VENDOR_SUBCMD_ADJUST_TX_POWER = 241,
-	QCA_NL80211_VENDOR_SUBCMD_SPECTRAL_SCAN_COMPLETE = 242,
 };
 
 /* Compatibility defines for previously used subcmd names.
@@ -3372,14 +3361,6 @@
 	 */
 	QCA_WLAN_VENDOR_ATTR_CONFIG_QCA_PEER = 106,
 
-	/* 8-bit unsigned value to configure BTM support.
-	 *
-	 * The attribute is applicable only for STA interface. Uses enum
-	 * qca_wlan_btm_support values. This configuration is not allowed in
-	 * connected state.
-	 */
-	QCA_WLAN_VENDOR_ATTR_CONFIG_BTM_SUPPORT = 107,
-
 	/* keep last */
 	QCA_WLAN_VENDOR_ATTR_CONFIG_AFTER_LAST,
 	QCA_WLAN_VENDOR_ATTR_CONFIG_MAX =
@@ -7768,20 +7749,6 @@
 	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_FFT_RECAPTURE = 31,
 	/* Attribute used for padding for 64-bit alignment */
 	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_PAD = 32,
-	/* Spectral data transport mode. u32 attribute. It uses values
-	 * defined in enum qca_wlan_vendor_spectral_data_transport_mode.
-	 * This is an optional attribute. If this attribute is not populated,
-	 * the driver should configure the default transport mode to netlink.
-	 */
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_DATA_TRANSPORT_MODE = 33,
-	/* Spectral scan completion timeout. u32 attribute. This
-	 * attribute is used to configure a timeout value (in us). The
-	 * timeout value would be from the beginning of a spectral
-	 * scan. This is an optional attribute. If this attribute is
-	 * not populated, the driver would internally derive the
-	 * timeout value.
-	 */
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETION_TIMEOUT = 34,
 
 	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_AFTER_LAST,
 	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_CONFIG_MAX =
@@ -12088,14 +12055,6 @@
  * %QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_POWER_CAP_DBM or based on
  * regulatory/SAE limits if %QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_POWER_CAP_DBM
  * is not provided.
- *
- * @QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_IFINDEX: u32 attribute, optional.
- * This specifies the interface index (netdev) for which the corresponding
- * configurations are applied. If the interface index is not specified, the
- * configurations are applied based on
- * %QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_IFACES_BITMASK.
- * %QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_IFACES_BITMASK along with this
- * attribute shall have the matching nl80211_iftype.
  */
 enum qca_wlan_vendor_attr_avoid_frequency_ext {
 	QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_INVALID = 0,
@@ -12104,7 +12063,6 @@
 	QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_END = 3,
 	QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_POWER_CAP_DBM = 4,
 	QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_IFACES_BITMASK = 5,
-	QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_IFINDEX = 6,
 
 	QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_AFTER_LAST,
 	QCA_WLAN_VENDOR_ATTR_AVOID_FREQUENCY_MAX =
@@ -14305,11 +14263,7 @@
  * @QCA_WLAN_VENDOR_ATTR_RATEMASK_PARAMS_BITMAP: binary, rate mask bitmap.
  * A bit value of 1 represents rate is enabled and a value of 0
  * represents rate is disabled.
- * For EHT targets,
- * b0-1  => NSS1, MCS 14-15
- * b2-15 => NSS1, MCS 0-13
- * b16-29 => NSS2, MCS 0-13
- * For HE targets, 14 bits correspond to one NSS setting.
+ * For HE targets, 12 bits correspond to one NSS setting.
  * b0-13  => NSS1, MCS 0-13
  * b14-27 => NSS2, MCS 0-13 and so on for other NSS.
  * For VHT targets, 10 bits correspond to one NSS setting.
@@ -14319,18 +14273,12 @@
  * b0-7  => NSS1, MCS 0-7
  * b8-15 => NSS2, MCS 0-7 and so on for other NSS.
  * For OFDM/CCK targets, 8 bits correspond to one NSS setting.
- *
- * @QCA_WLAN_VENDOR_ATTR_RATEMASK_PARAMS_LINK_ID: u8, used to specify the
- * MLO link ID of a link to be configured. Optional attribute.
- * No need of this attribute in non-MLO cases. If the attribute is
- * not provided, ratemask will be applied for setup link.
  */
 enum qca_wlan_vendor_attr_ratemask_params {
 	QCA_WLAN_VENDOR_ATTR_RATEMASK_PARAMS_INVALID = 0,
 	QCA_WLAN_VENDOR_ATTR_RATEMASK_PARAMS_LIST = 1,
 	QCA_WLAN_VENDOR_ATTR_RATEMASK_PARAMS_TYPE = 2,
 	QCA_WLAN_VENDOR_ATTR_RATEMASK_PARAMS_BITMAP = 3,
-	QCA_WLAN_VENDOR_ATTR_RATEMASK_PARAMS_LINK_ID = 4,
 
 	/* keep last */
 	QCA_WLAN_VENDOR_ATTR_RATEMASK_PARAMS_AFTER_LAST,
@@ -16846,200 +16794,4 @@
 	QCA_WLAN_VENDOR_ATTR_FW_PAGE_FAULT_REPORT_LAST - 1,
 };
 
-/**
- * enum qca_wlan_btm_support: BTM support configuration
- *
- * @QCA_WLAN_BTM_SUPPORT_DEFAULT: Restore default BTM support policy. The driver
- * follows the BSS Transition bit in the Extended Capabilities element from the
- * connect request IEs with the default BTM support policy.
- *
- * @QCA_WLAN_BTM_SUPPORT_DISABLE: Disable BTM support for the subsequent
- * (re)association attempts. The driver shall restore the default BTM support
- * policy during the first disconnection after successful association. When this
- * configuration is enabled, the driver shall overwrite the BSS Transition bit
- * as zero in the Extended Capabilities element while sending (Re)Association
- * Request frames. Also, the driver shall drop the BTM frames from userspace and
- * the connected AP when this configuration is enabled.
- */
-enum qca_wlan_btm_support {
-	QCA_WLAN_BTM_SUPPORT_DEFAULT = 0,
-	QCA_WLAN_BTM_SUPPORT_DISABLE = 1,
-};
-
-/**
- * enum qca_wlan_vendor_data_rate_type - Represents the possible values for
- * attribute %QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_RATE_TYPE.
- *
- * @QCA_WLAN_VENDOR_DATA_RATE_TYPE_LEGACY: Data rate type is a legacy rate code
- * used in OFDM/CCK.
- *
- * @QCA_WLAN_VENDOR_DATA_RATE_TYPE_MCS: Data rate type is an MCS index.
- *
- */
-enum qca_wlan_vendor_data_rate_type {
-	QCA_WLAN_VENDOR_DATA_RATE_TYPE_LEGACY = 0,
-	QCA_WLAN_VENDOR_DATA_RATE_TYPE_MCS = 1,
-};
-
-/**
- * enum qca_wlan_vendor_attr_adjust_tx_power_rate - Definition
- * of data rate related attributes which is used inside nested attribute
- * %QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CHAIN_RATE_CONFIG.
- *
- * @QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_RATE_TYPE: u8 data rate type.
- * For this attribute, valid values are enumerated in enum
- * %qca_wlan_vendor_data_rate_type.
- *
- * @QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_RATE_VALUE: u8 value.
- * This attribute value is interpreted according to the value of attribute
- * %QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_RATE_TYPE. For legacy config
- * type, this attribute value is defined in the units of 0.5 Mbps.
- * For non legacy config type, this attribute carries the MCS index number.
- *
- * @QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_RATE_POWER_VALUE: u8 value in dBm.
- * Usually the target computes a final transmit power that is the maximum
- * power level that doesn't exceed the limits enforced by various sources
- * like chip-specific conformance test limits (CTL), Specific Absorption
- * Rate (SAR), Transmit Power Control (TPC), wiphy-specific limits, STA-specific
- * limits, channel avoidance limits, Automated Frequency Coordination (AFC),
- * and others. In some cases it may be desirable to use a power level that is
- * lower than the maximum power level allowed by all of these limits, so this
- * attribute provides an additional limit that can be used to reduce the
- * transmit power level.
- *
- */
-enum qca_wlan_vendor_attr_adjust_tx_power_rate {
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_RATE_INVALID = 0,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_RATE_TYPE = 1,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_RATE_VALUE = 2,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_RATE_POWER_VALUE = 3,
-
-	/* keep last */
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CONFIG_AFTER_LAST,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CONFIG_MAX =
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CONFIG_AFTER_LAST - 1,
-};
-
-/**
- * enum qca_wlan_vendor_attr_adjust_tx_power_chain_config - Definition
- * of chain related attributes which is used inside nested attribute
- * %QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_CHAIN_CONFIG.
- *
- * @QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CHAIN_INDEX: u8 value.
- * Represents a particular chain for which transmit power adjustment needed.
- *
- * @QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CHAIN_RATE_CONFIG: A nested
- * attribute containing data rate related information to adjust transmit
- * power. The attributes used inside this nested attributes are defined in
- * enum qca_wlan_vendor_attr_adjust_tx_power_rate.
- */
-enum qca_wlan_vendor_attr_adjust_tx_power_chain_config {
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CHAIN_INVALID = 0,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CHAIN_INDEX = 1,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CHAIN_RATE_CONFIG = 2,
-
-	/* keep last */
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CHAIN_AFTER_LAST,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CHAIN_MAX =
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_CHAIN_AFTER_LAST - 1,
-};
-
-/**
- * enum qca_wlan_vendor_attr_adjust_tx_power_band_config - Definition
- * of band related attributes which is used inside nested attribute
- * %QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_CONFIG.
- *
- * @QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_INDEX: u8 value to
- * indicate band for which configuration applies. Valid values are enumerated
- * in enum %nl80211_band.
- *
- * @QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_CHAIN_CONFIG: A nested
- * attribute containing per chain related information to adjust transmit
- * power. The attributes used inside this nested attribute are defined in
- * enum qca_wlan_vendor_attr_adjust_tx_power_chain_config.
- *
- */
-enum qca_wlan_vendor_attr_adjust_tx_power_band_config {
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_INVALID = 0,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_INDEX = 1,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_CHAIN_CONFIG = 2,
-
-	/* keep last */
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_AFTER_LAST,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_MAX =
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_AFTER_LAST - 1,
-};
-
-/**
- * enum qca_wlan_vendor_attr_adjust_tx_power - Definition of attributes
- * for %QCA_NL80211_VENDOR_SUBCMD_ADJUST_TX_POWER subcommand.
- *
- * @QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_CONFIG: A nested attribute
- * containing per band related information to adjust transmit power.
- * The attributes used inside this nested attributes are defined in
- * enum qca_wlan_vendor_attr_adjust_tx_power_band_config.
- */
-enum qca_wlan_vendor_attr_adjust_tx_power {
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_INVALID = 0,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_BAND_CONFIG = 1,
-
-	/* keep last */
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_AFTER_LAST,
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_MAX =
-	QCA_WLAN_VENDOR_ATTR_ADJUST_TX_POWER_AFTER_LAST - 1,
-};
-
-/**
- * enum qca_wlan_vendor_spectral_data_transport_mode - Attribute
- * values for QCA_WLAN_VENDOR_ATTR_SPECTRAL_DATA_TRANSPORT_MODE.
- *
- * @QCA_WLAN_VENDOR_SPECTRAL_DATA_TRANSPORT_NETLINK: Use netlink to
- * send spectral data to userspace applications.
- * @QCA_WLAN_VENDOR_SPECTRAL_DATA_TRANSPORT_RELAY: Use relay interface
- * to send spectral data to userspace applications.
- */
-enum qca_wlan_vendor_spectral_data_transport_mode {
-	QCA_WLAN_VENDOR_SPECTRAL_DATA_TRANSPORT_NETLINK = 0,
-	QCA_WLAN_VENDOR_SPECTRAL_DATA_TRANSPORT_RELAY = 1,
-};
-
-/* enum qca_wlan_vendor_spectral_scan_complete_status - Attribute
- * values for QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_STATUS to
- * indicate the completion status for a spectral scan.
- *
- * @QCA_WLAN_VENDOR_SPECTRAL_SCAN_COMPLETE_STATUS_SUCCESSFUL:
- * Indicates a successful completion of the scan.
- *
- * @QCA_WLAN_VENDOR_SPECTRAL_SCAN_COMPLETE_STATUS_TIMEOUT: Indicates
- * a timeout has occured while processing the spectral reports.
- */
-enum qca_wlan_vendor_spectral_scan_complete_status {
-	QCA_WLAN_VENDOR_SPECTRAL_SCAN_COMPLETE_STATUS_SUCCESSFUL = 0,
-	QCA_WLAN_VENDOR_SPECTRAL_SCAN_COMPLETE_STATUS_TIMEOUT = 1,
-};
-
-/* enum qca_wlan_vendor_attr_spectral_scan_complete - Definition of
- * attributes for @QCA_NL80211_VENDOR_SUBCMD_SPECTRAL_SCAN_COMPLETE
- * to indicate scan status and samples received from hardware.
- *
- * @QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_INVALID: Invalid attribute
- *
- * @QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_STATUS: u32 attribute.
- * Indicates completion status, either the scan is successful or a timeout
- * is issued by the driver.
- * See enum qca_wlan_vendor_spectral_scan_complete_status.
- *
- * @QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_RECEIVED_SAMPLES: u32
- * attribute. Number of spectral samples received after the scan has started.
- */
-enum qca_wlan_vendor_attr_spectral_scan_complete {
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_INVALID = 0,
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_STATUS = 1,
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_RECEIVED_SAMPLES = 2,
-
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_AFTER_LAST,
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_MAX =
-	QCA_WLAN_VENDOR_ATTR_SPECTRAL_SCAN_COMPLETE_AFTER_LAST - 1,
-};
-
 #endif /* QCA_VENDOR_H */
diff --git a/src/common/wpa_common.c b/src/common/wpa_common.c
index 6ea3311..c82fd0e 100644
--- a/src/common/wpa_common.c
+++ b/src/common/wpa_common.c
@@ -1104,7 +1104,7 @@
 			link_id = pos[2] & 0x0f;
 			wpa_printf(MSG_DEBUG, "FT: MLO GTK (Link ID %u)",
 				   link_id);
-			if (link_id >= MAX_NUM_MLD_LINKS)
+			if (link_id >= MAX_NUM_MLO_LINKS)
 				break;
 			parse->valid_mlo_gtks |= BIT(link_id);
 			parse->mlo_gtk[link_id] = pos;
@@ -1119,7 +1119,7 @@
 			link_id = pos[2 + 6] & 0x0f;
 			wpa_printf(MSG_DEBUG, "FT: MLO IGTK (Link ID %u)",
 				   link_id);
-			if (link_id >= MAX_NUM_MLD_LINKS)
+			if (link_id >= MAX_NUM_MLO_LINKS)
 				break;
 			parse->valid_mlo_igtks |= BIT(link_id);
 			parse->mlo_igtk[link_id] = pos;
@@ -1134,7 +1134,7 @@
 			link_id = pos[2 + 6] & 0x0f;
 			wpa_printf(MSG_DEBUG, "FT: MLO BIGTK (Link ID %u)",
 				   link_id);
-			if (link_id >= MAX_NUM_MLD_LINKS)
+			if (link_id >= MAX_NUM_MLO_LINKS)
 				break;
 			parse->valid_mlo_bigtks |= BIT(link_id);
 			parse->mlo_bigtk[link_id] = pos;
@@ -1353,7 +1353,7 @@
 
 		/* TODO: This count should be done based on all _requested_,
 		 * not _accepted_ links. */
-		for (link_id = 0; link_id < MAX_NUM_MLD_LINKS; link_id++) {
+		for (link_id = 0; link_id < MAX_NUM_MLO_LINKS; link_id++) {
 			if (parse->mlo_gtk[link_id]) {
 				if (parse->rsn)
 					prot_ie_count--;
@@ -3551,7 +3551,7 @@
 	    selector == RSN_KEY_DATA_MLO_GTK) {
 		link_id = (p[0] & RSN_MLO_GTK_KDE_PREFIX0_LINK_ID_MASK) >>
 			RSN_MLO_GTK_KDE_PREFIX0_LINK_ID_SHIFT;
-		if (link_id >= MAX_NUM_MLD_LINKS)
+		if (link_id >= MAX_NUM_MLO_LINKS)
 			return 2;
 
 		ie->valid_mlo_gtks |= BIT(link_id);
@@ -3569,7 +3569,7 @@
 	    selector == RSN_KEY_DATA_MLO_IGTK) {
 		link_id = (p[8] & RSN_MLO_IGTK_KDE_PREFIX8_LINK_ID_MASK) >>
 			  RSN_MLO_IGTK_KDE_PREFIX8_LINK_ID_SHIFT;
-		if (link_id >= MAX_NUM_MLD_LINKS)
+		if (link_id >= MAX_NUM_MLO_LINKS)
 			return 2;
 
 		ie->valid_mlo_igtks |= BIT(link_id);
@@ -3587,7 +3587,7 @@
 	    selector == RSN_KEY_DATA_MLO_BIGTK) {
 		link_id = (p[8] & RSN_MLO_BIGTK_KDE_PREFIX8_LINK_ID_MASK) >>
 			  RSN_MLO_BIGTK_KDE_PREFIX8_LINK_ID_SHIFT;
-		if (link_id >= MAX_NUM_MLD_LINKS)
+		if (link_id >= MAX_NUM_MLO_LINKS)
 			return 2;
 
 		ie->valid_mlo_bigtks |= BIT(link_id);
@@ -3605,7 +3605,7 @@
 	    selector == RSN_KEY_DATA_MLO_LINK) {
 		link_id = (p[0] & RSN_MLO_LINK_KDE_LI_LINK_ID_MASK) >>
 			  RSN_MLO_LINK_KDE_LI_LINK_ID_SHIFT;
-		if (link_id >= MAX_NUM_MLD_LINKS)
+		if (link_id >= MAX_NUM_MLO_LINKS)
 			return 2;
 
 		ie->valid_mlo_links |= BIT(link_id);
diff --git a/src/common/wpa_common.h b/src/common/wpa_common.h
index 01efeea..a2c7033 100644
--- a/src/common/wpa_common.h
+++ b/src/common/wpa_common.h
@@ -9,8 +9,6 @@
 #ifndef WPA_COMMON_H
 #define WPA_COMMON_H
 
-#include "common/defs.h"
-
 /* IEEE 802.11i */
 #define PMKID_LEN 16
 #define PMK_LEN 32
@@ -559,6 +557,8 @@
 		       const u8 *ie2, size_t ie2len);
 int wpa_insert_pmkid(u8 *ies, size_t *ies_len, const u8 *pmkid, bool replace);
 
+#define MAX_NUM_MLO_LINKS 15
+
 struct wpa_ft_ies {
 	const u8 *mdie;
 	size_t mdie_len;
@@ -596,14 +596,14 @@
 	const u8 *rsnxe;
 	size_t rsnxe_len;
 	u16 valid_mlo_gtks; /* bitmap of valid link GTK subelements */
-	const u8 *mlo_gtk[MAX_NUM_MLD_LINKS];
-	size_t mlo_gtk_len[MAX_NUM_MLD_LINKS];
+	const u8 *mlo_gtk[MAX_NUM_MLO_LINKS];
+	size_t mlo_gtk_len[MAX_NUM_MLO_LINKS];
 	u16 valid_mlo_igtks; /* bitmap of valid link IGTK subelements */
-	const u8 *mlo_igtk[MAX_NUM_MLD_LINKS];
-	size_t mlo_igtk_len[MAX_NUM_MLD_LINKS];
+	const u8 *mlo_igtk[MAX_NUM_MLO_LINKS];
+	size_t mlo_igtk_len[MAX_NUM_MLO_LINKS];
 	u16 valid_mlo_bigtks; /* bitmap of valid link BIGTK subelements */
-	const u8 *mlo_bigtk[MAX_NUM_MLD_LINKS];
-	size_t mlo_bigtk_len[MAX_NUM_MLD_LINKS];
+	const u8 *mlo_bigtk[MAX_NUM_MLO_LINKS];
+	size_t mlo_bigtk_len[MAX_NUM_MLO_LINKS];
 
 	struct wpabuf *fte_buf;
 };
@@ -700,17 +700,17 @@
 	const u8 *wmm;
 	size_t wmm_len;
 	u16 valid_mlo_gtks; /* bitmap of valid link GTK KDEs */
-	const u8 *mlo_gtk[MAX_NUM_MLD_LINKS];
-	size_t mlo_gtk_len[MAX_NUM_MLD_LINKS];
+	const u8 *mlo_gtk[MAX_NUM_MLO_LINKS];
+	size_t mlo_gtk_len[MAX_NUM_MLO_LINKS];
 	u16 valid_mlo_igtks; /* bitmap of valid link IGTK KDEs */
-	const u8 *mlo_igtk[MAX_NUM_MLD_LINKS];
-	size_t mlo_igtk_len[MAX_NUM_MLD_LINKS];
+	const u8 *mlo_igtk[MAX_NUM_MLO_LINKS];
+	size_t mlo_igtk_len[MAX_NUM_MLO_LINKS];
 	u16 valid_mlo_bigtks; /* bitmap of valid link BIGTK KDEs */
-	const u8 *mlo_bigtk[MAX_NUM_MLD_LINKS];
-	size_t mlo_bigtk_len[MAX_NUM_MLD_LINKS];
+	const u8 *mlo_bigtk[MAX_NUM_MLO_LINKS];
+	size_t mlo_bigtk_len[MAX_NUM_MLO_LINKS];
 	u16 valid_mlo_links; /* bitmap of valid MLO link KDEs */
-	const u8 *mlo_link[MAX_NUM_MLD_LINKS];
-	size_t mlo_link_len[MAX_NUM_MLD_LINKS];
+	const u8 *mlo_link[MAX_NUM_MLO_LINKS];
+	size_t mlo_link_len[MAX_NUM_MLO_LINKS];
 };
 
 int wpa_parse_kde_ies(const u8 *buf, size_t len, struct wpa_eapol_ie_parse *ie);
diff --git a/src/common/wpa_ctrl.h b/src/common/wpa_ctrl.h
index f614250..c5bb9ab 100644
--- a/src/common/wpa_ctrl.h
+++ b/src/common/wpa_ctrl.h
@@ -413,9 +413,6 @@
 /* parameters: <STA address> <dialog token> <report mode> <beacon report> */
 #define BEACON_RESP_RX "BEACON-RESP-RX "
 
-/* parameters: <STA address> <dialog token> <link measurement report> */
-#define LINK_MSR_RESP_RX "LINK-MSR-RESP-RX "
-
 /* PMKSA cache entry added; parameters: <BSSID> <network_id> */
 #define PMKSA_CACHE_ADDED "PMKSA-CACHE-ADDED "
 /* PMKSA cache entry removed; parameters: <BSSID> <network_id> */
