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

[Description]
ac60b1ff [MAC80211][misc][Add Filogic 880/860/830/820/630 Release Information]
7eb946a0 [MAC80211][WiFi7][hostapd][sync hostapd patches]
91638fc9 [MAC80211][WiFi7][mac80211][sync backports code]
8e45746b [MAC80211][WiFi7][mt76][sync mt76 patches]
1c564afa [MAC80211][WiFi7][mt76][Add Eagle BE19000 ifem default bin]

[Release-log]

Change-Id: I1d4218d3b1211700acb5937fe310cbd0bf219968
diff --git a/recipes-wifi/wpa-supplicant/files/patches-2.10.3/0018-hostapd-MLO-send-link-id-during-flushing-stations.patch b/recipes-wifi/wpa-supplicant/files/patches-2.10.3/0018-hostapd-MLO-send-link-id-during-flushing-stations.patch
new file mode 100644
index 0000000..ce4a844
--- /dev/null
+++ b/recipes-wifi/wpa-supplicant/files/patches-2.10.3/0018-hostapd-MLO-send-link-id-during-flushing-stations.patch
@@ -0,0 +1,156 @@
+From 8ac142806112477fa012414a2bdea22239e474a4 Mon Sep 17 00:00:00 2001
+From: Aditya Kumar Singh <quic_adisi@quicinc.com>
+Date: Thu, 28 Mar 2024 23:46:48 +0530
+Subject: [PATCH 018/104] hostapd: MLO: send link id during flushing stations
+
+Currently, whenever a BSS is set up, it sends flush all stations via
+command - NL80211_CMD_DEL_STATION on its interface. However, in case
+of MLO, station could have been connected to other links by the time
+this link is coming up. Since there is no link id currently being
+passed, all those stations entries are also removed in the driver which is
+wrong.
+
+Hence add change to send link id along with the command during MLO so that
+the driver can use this link id and flush only those stations which are
+using the passed link id as one of its links.
+
+Signed-off-by: Aditya Kumar Singh <quic_adisi@quicinc.com>
+---
+ src/ap/ap_drv_ops.c          | 10 +++++++++-
+ src/drivers/driver.h         |  4 +++-
+ src/drivers/driver_atheros.c |  2 +-
+ src/drivers/driver_bsd.c     |  2 +-
+ src/drivers/driver_hostap.c  |  2 +-
+ src/drivers/driver_nl80211.c | 17 ++++++++++++++---
+ 6 files changed, 29 insertions(+), 8 deletions(-)
+
+diff --git a/src/ap/ap_drv_ops.c b/src/ap/ap_drv_ops.c
+index 0d493b837..32722084d 100644
+--- a/src/ap/ap_drv_ops.c
++++ b/src/ap/ap_drv_ops.c
+@@ -624,9 +624,17 @@ int hostapd_get_seqnum(const char *ifname, struct hostapd_data *hapd,
+ 
+ int hostapd_flush(struct hostapd_data *hapd)
+ {
++	int link_id = -1;
++
+ 	if (hapd->driver == NULL || hapd->driver->flush == NULL)
+ 		return 0;
+-	return hapd->driver->flush(hapd->drv_priv);
++
++#ifdef CONFIG_IEEE80211BE
++	if (hapd->conf && hapd->conf->mld_ap)
++		link_id = hapd->mld_link_id;
++#endif /* CONFIG_IEEE80211BE */
++
++	return hapd->driver->flush(hapd->drv_priv, link_id);
+ }
+ 
+ 
+diff --git a/src/drivers/driver.h b/src/drivers/driver.h
+index a7455ef6e..e672a1787 100644
+--- a/src/drivers/driver.h
++++ b/src/drivers/driver.h
+@@ -3578,13 +3578,15 @@ struct wpa_driver_ops {
+ 	/**
+ 	 * flush - Flush all association stations (AP only)
+ 	 * @priv: Private driver interface data
++	 * @link_id: In case of MLO, valid link_id on which all associated stations
++	 *	     will be flushed. -1 otherwise.
+ 	 * Returns: 0 on success, -1 on failure
+ 	 *
+ 	 * This function requests the driver to disassociate all associated
+ 	 * stations. This function does not need to be implemented if the
+ 	 * driver does not process association frames internally.
+ 	 */
+-	int (*flush)(void *priv);
++	int (*flush)(void *priv, int link_id);
+ 
+ 	/**
+ 	 * set_generic_elem - Add IEs into Beacon/Probe Response frames (AP)
+diff --git a/src/drivers/driver_atheros.c b/src/drivers/driver_atheros.c
+index ae7f0e535..71863306a 100644
+--- a/src/drivers/driver_atheros.c
++++ b/src/drivers/driver_atheros.c
+@@ -632,7 +632,7 @@ atheros_get_seqnum(const char *ifname, void *priv, const u8 *addr, int idx,
+ 
+ 
+ static int
+-atheros_flush(void *priv)
++atheros_flush(void *priv, int link_id)
+ {
+ 	u8 allsta[IEEE80211_ADDR_LEN];
+ 	os_memset(allsta, 0xff, IEEE80211_ADDR_LEN);
+diff --git a/src/drivers/driver_bsd.c b/src/drivers/driver_bsd.c
+index 850637f0d..82d8a0186 100644
+--- a/src/drivers/driver_bsd.c
++++ b/src/drivers/driver_bsd.c
+@@ -946,7 +946,7 @@ bsd_get_seqnum(const char *ifname, void *priv, const u8 *addr, int idx,
+ 
+ 
+ static int
+-bsd_flush(void *priv)
++bsd_flush(void *priv, int link_id)
+ {
+ 	u8 allsta[IEEE80211_ADDR_LEN];
+ 
+diff --git a/src/drivers/driver_hostap.c b/src/drivers/driver_hostap.c
+index d3520aacc..3aa5860bc 100644
+--- a/src/drivers/driver_hostap.c
++++ b/src/drivers/driver_hostap.c
+@@ -572,7 +572,7 @@ static int hostap_set_ssid(void *priv, const u8 *buf, int len)
+ }
+ 
+ 
+-static int hostap_flush(void *priv)
++static int hostap_flush(void *priv, int link_id)
+ {
+ 	struct hostap_driver_data *drv = priv;
+ 	struct prism2_hostapd_param param;
+diff --git a/src/drivers/driver_nl80211.c b/src/drivers/driver_nl80211.c
+index e5fa22b59..9ac621ae6 100644
+--- a/src/drivers/driver_nl80211.c
++++ b/src/drivers/driver_nl80211.c
+@@ -7729,25 +7729,36 @@ static int i802_set_frag(void *priv, int frag)
+ }
+ 
+ 
+-static int i802_flush(void *priv)
++static int i802_flush(void *priv, int link_id)
+ {
+ 	struct i802_bss *bss = priv;
+ 	struct nl_msg *msg;
+ 	int res;
+ 
+-	wpa_printf(MSG_DEBUG, "nl80211: flush -> DEL_STATION %s (all)",
+-		   bss->ifname);
++	if (link_id == NL80211_DRV_LINK_ID_NA)
++		wpa_printf(MSG_DEBUG, "nl80211: flush -> DEL_STATION %s (all)",
++			   bss->ifname);
++	else
++		wpa_printf(MSG_DEBUG, "nl80211: flush -> DEL_STATION %s (with link %d)",
++			   bss->ifname, link_id);
+ 
+ 	/*
+ 	 * XXX: FIX! this needs to flush all VLANs too
+ 	 */
+ 	msg = nl80211_bss_msg(bss, 0, NL80211_CMD_DEL_STATION);
++	if (link_id >= 0 && (bss->valid_links & BIT(link_id)) &&
++	    nla_put_u8(msg, NL80211_ATTR_MLO_LINK_ID, link_id))
++		goto fail;
++
+ 	res = send_and_recv_cmd(bss->drv, msg);
+ 	if (res) {
+ 		wpa_printf(MSG_DEBUG, "nl80211: Station flush failed: ret=%d "
+ 			   "(%s)", res, strerror(-res));
+ 	}
+ 	return res;
++fail:
++	nlmsg_free(msg);
++	return -1;
+ }
+ 
+ 
+-- 
+2.39.2
+