[][MAC80211][core][Fix mac80211 patch fail and update RED patch]

[Description]
Fix mac80211 patch fail and update RED patch

[Release-log]
N/A

Change-Id: I4585866092631fe2bd62d3b643000efd0abf3e36
Reviewed-on: https://gerrit.mediatek.inc/c/openwrt/feeds/mtk_openwrt_feeds/+/6987008
diff --git a/autobuild_mac80211_release/package/kernel/mac80211_dev/patches/subsys/99902-mac80211-mtk-register-.ndo_setup_tc-to-support-wifi.patch b/autobuild_mac80211_release/package/kernel/mac80211_dev/patches/subsys/99902-mac80211-mtk-register-.ndo_setup_tc-to-support-wifi.patch
new file mode 100644
index 0000000..9be85c9
--- /dev/null
+++ b/autobuild_mac80211_release/package/kernel/mac80211_dev/patches/subsys/99902-mac80211-mtk-register-.ndo_setup_tc-to-support-wifi.patch
@@ -0,0 +1,89 @@
+From 1ca2a807a8067e585e628e6eb4721e7fee00acd6 Mon Sep 17 00:00:00 2001
+From: Sujuan Chen <sujuan.chen@mediatek.com>
+Date: Fri, 23 Dec 2022 18:12:41 +0800
+Subject: [PATCH] mac80211: mtk: register .ndo_setup_tc to support wifi2wifi
+ offload
+
+Signed-off-by: Sujuan Chen <sujuan.chen@mediatek.com>
+---
+ include/net/mac80211.h |  5 +++++
+ net/mac80211/iface.c   | 26 ++++++++++++++++++++++++++
+ 2 files changed, 31 insertions(+)
+
+diff --git a/include/net/mac80211.h b/include/net/mac80211.h
+index dd9e834..d98312e 100644
+--- a/include/net/mac80211.h
++++ b/include/net/mac80211.h
+@@ -4188,6 +4188,8 @@ struct ieee80211_prep_tx_info {
+  *	In fact, cannot change from having valid_links and not having them.
+  * @net_fill_receive_path: Called from .ndo_fill_receive_path in order to
+  *	get a path for hardware flow offloading
++  * @net_setup_tc: Called from .ndo_setup_tc in order to register flowblock
++ *	callback function
+  */
+ struct ieee80211_ops {
+ 	void (*tx)(struct ieee80211_hw *hw,
+@@ -4546,6 +4548,9 @@ struct ieee80211_ops {
+ 	int (*net_fill_receive_path)(struct ieee80211_hw *hw,
+ 				     struct net_device_path_ctx *ctx,
+ 				     struct net_device_path *path);
++	int (*net_setup_tc)(struct ieee80211_hw *hw,
++			    struct net_device *dev,
++			    int type, void *type_data);
+ };
+ 
+ /**
+diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c
+index 6e76b23..b80fb66 100644
+--- a/net/mac80211/iface.c
++++ b/net/mac80211/iface.c
+@@ -942,6 +942,30 @@ static int ieee80211_netdev_fill_receive_path(struct net_device_path_ctx *ctx,
+ 	return ret;
+ }
+ 
++static int ieee80211_netdev_setup_tc(struct net_device *dev,
++					       enum tc_setup_type type, void *type_data)
++{
++	struct ieee80211_sub_if_data *sdata;
++	struct ieee80211_local *local;
++	int ret = -ENOENT;
++
++	sdata = IEEE80211_DEV_TO_SUB_IF(dev);
++	local = sdata->local;
++
++	if (!local->ops->net_setup_tc)
++		return -EOPNOTSUPP;
++
++	if (!type_data)
++		return -EINVAL;
++
++	rcu_read_lock();
++
++	ret = local->ops->net_setup_tc(&local->hw, dev, (int)type, type_data);
++
++	rcu_read_unlock();
++
++	return ret;
++}
+ 
+ static const struct net_device_ops ieee80211_dataif_8023_ops = {
+ 	.ndo_open		= ieee80211_open,
+@@ -953,6 +977,7 @@ static const struct net_device_ops ieee80211_dataif_8023_ops = {
+ 	.ndo_get_stats64	= ieee80211_get_stats64,
+ 	.ndo_fill_forward_path	= ieee80211_netdev_fill_forward_path,
+ 	.ndo_fill_receive_path = ieee80211_netdev_fill_receive_path,
++	.ndo_setup_tc		= ieee80211_netdev_setup_tc,
+ };
+ 
+ static bool ieee80211_iftype_supports_hdr_offload(enum nl80211_iftype iftype)
+@@ -1482,6 +1507,7 @@ static void ieee80211_if_setup(struct net_device *dev)
+ 	ether_setup(dev);
+ 	dev->priv_flags &= ~IFF_TX_SKB_SHARING;
+ 	dev->priv_flags |= IFF_NO_QUEUE;
++	dev->features |= NETIF_F_HW_TC;
+ 	dev->netdev_ops = &ieee80211_dataif_ops;
+ 	dev->needs_free_netdev = true;
+ 	dev->priv_destructor = ieee80211_if_free;
+-- 
+2.18.0
+