[rdkb][common][bsp][Refactor and sync wifi from openwrt]

[Description]
3a2eef0b [MAC80211][Release][Update release note for Filogic 880/860 MLO Beta release]
cfbd2411 [MAC80211][Release][Filogic 880/860 MLO Beta release]
6c180e3f [MAC80211][WiFi7][misc][Add Eagle BE14000 efem default bin]
a55f34db [MAC80211][Release][Prepare for Filogic 880/860 release]
5b45ebca [MAC80211][WiFi7][hostapd][Add puncture bitmap to ucode]
95bbea73 [MAC80211][WiFi6][mt76][Add PID to only report data-frame TX rate]
b15ced26 [MAC80211][WiFi6][hostapd][Fix DFS channel selection issue]
d59133cb [MAC80211][WiFi6][mt76][Fix pse info not correct information]
3921b4b2 [MAC80211][WiFi6][mt76][Fix incomplete QoS-map setting to FW]
4e7690c7 [MAC80211][WiFi6/7][app][Change ATECHANNEL mapping cmd]
eb37af90 [MAC80211][WiFi7][app][Add support for per-packet bw & primary selection]
0ea82adf [MAC80211][WiFi6][core][Fix DFS CAC issue after CSA]

[Release-log]

Change-Id: I9bec97ec1b2e1c49ed43a812a07a5b21fcbb70a6
diff --git a/recipes-wifi/hostapd/files/patches-2.10.3/0101-mtk-hostapd-Temporary-non-inheritance-IE-solution.patch b/recipes-wifi/hostapd/files/patches-2.10.3/0101-mtk-hostapd-Temporary-non-inheritance-IE-solution.patch
new file mode 100644
index 0000000..2759e8e
--- /dev/null
+++ b/recipes-wifi/hostapd/files/patches-2.10.3/0101-mtk-hostapd-Temporary-non-inheritance-IE-solution.patch
@@ -0,0 +1,213 @@
+From 097f4b42d450ba1ae1f9acbb52cbae5f061d2ded Mon Sep 17 00:00:00 2001
+From: Allen Ye <allen.ye@mediatek.com>
+Date: Mon, 20 May 2024 17:29:36 +0800
+Subject: [PATCH 101/126] mtk: hostapd: Temporary non-inheritance IE solution
+
+Remove MBSSID IE and FILS indication IE in per-STA profile
+The patch append non-inheritance IE in per-STA profile of a ML IE.
+To add new IE in non-inheritance IE, just append the tag to IE list.
+
+Fix the EHT-4.6.1_RUN1_ITER2 (2G+5G) BRCM assoc issue.
+Without this patch, if the AP is an AP MLD 2G+5G (with 5G as the Setup link), the BRCM station will only connect to the AP using one link (i.e., the per-station profile count in the Association request is 0).
+
+Note: Regardless of whether this patch is applied, EHT-4.6.1_RUN1_ITER1 (2G+5G, with 2G as the setup link) can pass.
+
+Signed-off-by: Allen Ye <allen.ye@mediatek.com>
+Signed-off-by: MeiChia Chiu <MeiChia.Chiu@mediatek.com>
+---
+ src/ap/beacon.c         | 28 +++++++++++------
+ src/ap/ieee802_11.c     |  2 ++
+ src/ap/ieee802_11.h     |  2 ++
+ src/ap/ieee802_11_eht.c | 68 ++++++++++++++++++++++++++++++++++++++++-
+ 4 files changed, 90 insertions(+), 10 deletions(-)
+
+diff --git a/src/ap/beacon.c b/src/ap/beacon.c
+index 36f4feb3a..50d45d532 100644
+--- a/src/ap/beacon.c
++++ b/src/ap/beacon.c
+@@ -766,15 +766,20 @@ static size_t hostapd_probe_resp_elems_len(struct hostapd_data *hapd,
+ 			buflen += hostapd_eid_eht_ml_beacon_len(
+ 				ml_elem_ap, params->mld_info, !!params->mld_ap);
+ 		}
++		/* non-inheritance element */
++		if (params->is_ml_sta_info)
++			buflen += hostapd_eid_non_inheritance_len(hapd);
+ 	}
+ #endif /* CONFIG_IEEE80211BE */
+ 
+-	buflen += hostapd_eid_mbssid_len(hapd, WLAN_FC_STYPE_PROBE_RESP, NULL,
+-					 params->known_bss,
+-					 params->known_bss_len, NULL);
+-	if (!params->is_ml_sta_info)
++	if (!params->is_ml_sta_info) {
++		buflen += hostapd_eid_mbssid_len(hapd, WLAN_FC_STYPE_PROBE_RESP, NULL,
++						 params->known_bss,
++						 params->known_bss_len, NULL);
+ 		buflen += hostapd_eid_rnr_len(hapd, WLAN_FC_STYPE_PROBE_RESP,
+ 					      true);
++	}
++
+ 	buflen += hostapd_mbo_ie_len(hapd);
+ 	buflen += hostapd_eid_owe_trans_len(hapd);
+ 	buflen += hostapd_eid_dpp_cc_len(hapd);
+@@ -835,9 +840,10 @@ static u8 * hostapd_probe_resp_fill_elems(struct hostapd_data *hapd,
+ 
+ 	pos = hostapd_get_rsne(hapd, pos, epos - pos);
+ 	pos = hostapd_eid_bss_load(hapd, pos, epos - pos);
+-	pos = hostapd_eid_mbssid(hapd, pos, epos, WLAN_FC_STYPE_PROBE_RESP, 0,
+-				 NULL, params->known_bss, params->known_bss_len,
+-				 NULL, NULL, NULL, 0);
++	if (!params->is_ml_sta_info)
++		pos = hostapd_eid_mbssid(hapd, pos, epos, WLAN_FC_STYPE_PROBE_RESP, 0,
++					 NULL, params->known_bss, params->known_bss_len,
++					 NULL, NULL, NULL, 0);
+ 	pos = hostapd_eid_rm_enabled_capab(hapd, pos, epos - pos);
+ 	pos = hostapd_get_mde(hapd, pos, epos - pos);
+ 
+@@ -897,10 +903,11 @@ static u8 * hostapd_probe_resp_fill_elems(struct hostapd_data *hapd,
+ 	pos = hostapd_eid_wb_chsw_wrapper(hapd, pos);
+ 	pos = hostapd_eid_max_chsw_time(hapd, pos);
+ 
+-	if (!params->is_ml_sta_info)
++	if (!params->is_ml_sta_info) {
+ 		pos = hostapd_eid_rnr(hapd, pos, WLAN_FC_STYPE_PROBE_RESP,
+ 				      true);
+-	pos = hostapd_eid_fils_indic(hapd, pos, 0);
++		pos = hostapd_eid_fils_indic(hapd, pos, 0);
++	}
+ 	pos = hostapd_get_rsnxe(hapd, pos, epos - pos);
+ 
+ #ifdef CONFIG_IEEE80211AX
+@@ -999,6 +1006,9 @@ static u8 * hostapd_probe_resp_fill_elems(struct hostapd_data *hapd,
+ 	}
+ #endif /* CONFIG_TESTING_OPTIONS */
+ 
++	if (params->is_ml_sta_info)
++		pos = hostapd_eid_non_inheritance(hapd, pos);
++
+ 	return pos;
+ }
+ 
+diff --git a/src/ap/ieee802_11.c b/src/ap/ieee802_11.c
+index 7dac7a896..fd954b6f5 100644
+--- a/src/ap/ieee802_11.c
++++ b/src/ap/ieee802_11.c
+@@ -4520,6 +4520,8 @@ static void ieee80211_ml_build_assoc_resp(struct hostapd_data *hapd,
+ 	p = hostapd_eid_mbo(hapd, p, buf + buflen - p);
+ 	p = hostapd_eid_wmm(hapd, p);
+ 
++	p = hostapd_eid_non_inheritance(hapd, p);
++
+ 	if (hapd->conf->assocresp_elements &&
+ 	    (size_t) (buf + buflen - p) >=
+ 	    wpabuf_len(hapd->conf->assocresp_elements)) {
+diff --git a/src/ap/ieee802_11.h b/src/ap/ieee802_11.h
+index 18f97890b..2d9adb910 100644
+--- a/src/ap/ieee802_11.h
++++ b/src/ap/ieee802_11.h
+@@ -239,6 +239,7 @@ size_t hostapd_eid_eht_capab_len(struct hostapd_data *hapd,
+ 				 enum ieee80211_op_mode opmode);
+ u8 * hostapd_eid_eht_capab(struct hostapd_data *hapd, u8 *eid,
+ 			   enum ieee80211_op_mode opmode);
++u8 * hostapd_eid_non_inheritance(struct hostapd_data *hapd, u8 *eid);
+ u8 * hostapd_eid_eht_operation(struct hostapd_data *hapd, u8 *eid);
+ u16 copy_sta_eht_capab(struct hostapd_data *hapd, struct sta_info *sta,
+ 		       enum ieee80211_op_mode opmode,
+@@ -252,6 +253,7 @@ u8 * hostapd_eid_mbssid(struct hostapd_data *hapd, u8 *eid, u8 *end,
+ 			u8 **elem_offset,
+ 			const u8 *known_bss, size_t known_bss_len, u8 *rnr_eid,
+ 			u8 *rnr_count, u8 **rnr_offset, size_t rnr_len);
++size_t hostapd_eid_non_inheritance_len(struct hostapd_data *hapd);
+ bool hostapd_is_mld_ap(struct hostapd_data *hapd);
+ const char * sae_get_password(struct hostapd_data *hapd,
+ 			      struct sta_info *sta, const char *rx_id,
+diff --git a/src/ap/ieee802_11_eht.c b/src/ap/ieee802_11_eht.c
+index 8fc239f36..63713bc39 100644
+--- a/src/ap/ieee802_11_eht.c
++++ b/src/ap/ieee802_11_eht.c
+@@ -131,7 +131,6 @@ size_t hostapd_eid_eht_capab_len(struct hostapd_data *hapd,
+ 	return len;
+ }
+ 
+-
+ u8 * hostapd_eid_eht_capab(struct hostapd_data *hapd, u8 *eid,
+ 			   enum ieee80211_op_mode opmode)
+ {
+@@ -284,7 +283,74 @@ u8 * hostapd_eid_eht_operation(struct hostapd_data *hapd, u8 *eid)
+ 	return pos + elen;
+ }
+ 
++u8 mlo_non_inherit_list_6ghz[] = {
++	WLAN_EID_AP_CHANNEL_REPORT,
++	WLAN_EID_HT_CAP,
++	WLAN_EID_HT_OPERATION,
++	WLAN_EID_VHT_CAP,
++	WLAN_EID_VHT_OPERATION,
++};
++
++u8 mlo_non_inherit_list_6ghz_ext[] = {
++};
++
++u8 mlo_non_inherit_list_2_5ghz[] = {
++	WLAN_EID_VHT_CAP,
++	WLAN_EID_VHT_OPERATION,
++	WLAN_EID_TRANSMIT_POWER_ENVELOPE,
++};
++
++u8 mlo_non_inherit_list_2_5ghz_ext[] = {
++	WLAN_EID_EXT_HE_6GHZ_BAND_CAP,
++};
++
++size_t hostapd_eid_non_inheritance_len(struct hostapd_data *hapd)
++{
++	size_t len = 4;
+ 
++	if (is_6ghz_op_class(hapd->iconf->op_class)) {
++		len += sizeof(mlo_non_inherit_list_6ghz);
++		len += sizeof(mlo_non_inherit_list_6ghz_ext);
++	} else {
++		len += sizeof(mlo_non_inherit_list_2_5ghz);
++		len += sizeof(mlo_non_inherit_list_2_5ghz_ext);
++	}
++
++	return len;
++}
++
++u8 * hostapd_eid_non_inheritance(struct hostapd_data *hapd, u8 *eid)
++{
++	u8 *pos = eid, *len_pos;
++	int i;
++
++	*pos++ = WLAN_EID_EXTENSION;
++	len_pos = pos++;
++	*pos++ = WLAN_EID_EXT_NON_INHERITANCE;
++	if (is_6ghz_op_class(hapd->iconf->op_class)) {
++		/* Element ID list */
++		*pos++ = sizeof(mlo_non_inherit_list_6ghz);
++		for (i = 0; i < sizeof(mlo_non_inherit_list_6ghz); i++)
++			*pos++ = mlo_non_inherit_list_6ghz[i];
++
++		/* Element ID Extension list */
++		*pos++ = sizeof(mlo_non_inherit_list_6ghz_ext);
++		for (i = 0; i < sizeof(mlo_non_inherit_list_6ghz_ext); i++)
++			*pos++ = mlo_non_inherit_list_6ghz_ext[i];
++	} else {
++		/* Element ID list */
++		*pos++ = sizeof(mlo_non_inherit_list_2_5ghz);
++		for (i = 0; i < sizeof(mlo_non_inherit_list_2_5ghz); i++)
++			*pos++ = mlo_non_inherit_list_2_5ghz[i];
++
++		/* Element ID Extension list */
++		*pos++ = sizeof(mlo_non_inherit_list_2_5ghz_ext);
++		for (i = 0; i < sizeof(mlo_non_inherit_list_2_5ghz_ext); i++)
++			*pos++ = mlo_non_inherit_list_2_5ghz_ext[i];
++	}
++	*len_pos = pos - (eid + 2);
++	return pos;
++}
+ static bool check_valid_eht_mcs_nss(struct hostapd_data *hapd, const u8 *ap_mcs,
+ 				    const u8 *sta_mcs, u8 mcs_count, u8 map_len)
+ {
+-- 
+2.18.0
+