[rdkb][common][config][Add flow offload feature]

[Description]
Add flow offload feature
1. kernel, mac80211 and mt76 will use flow offload feature to decide patch wed patch or not

[Release-log]

diff --git a/recipes-kernel/linux/linux-mediatek_5.4.bb b/recipes-kernel/linux/linux-mediatek_5.4.bb
index e976566..9a51c17 100644
--- a/recipes-kernel/linux/linux-mediatek_5.4.bb
+++ b/recipes-kernel/linux/linux-mediatek_5.4.bb
@@ -70,13 +70,15 @@
 
 do_filogic_patches() {
     cd ${S}
+    DISTRO_FlowBlock_ENABLED="${@bb.utils.contains('DISTRO_FEATURES','flow_offload','true','false',d)}"
         if [ ! -e patch_applied ]; then
             patch -p1 < ${WORKDIR}/001-rdkb-eth-mtk-change-ifname-for.patch
             patch -p1 < ${WORKDIR}/003-rdkb-mtd-kernel-ubi-relayout.patch
             patch -p1 < ${WORKDIR}/0600-net-phylink-propagate-resolved-link-config-via-mac_l.patch
             patch -p1 < ${WORKDIR}/9010-iwconfig-wireless-rate-fix.patch
-
-	    for i in ${WORKDIR}/mediatek/flow_patch/*.patch; do patch -p1 < $i; done
+            if [ $DISTRO_FlowBlock_ENABLED = 'true' ]; then
+                for i in ${WORKDIR}/mediatek/flow_patch/*.patch; do patch -p1 < $i; done
+            fi
             touch patch_applied
         fi
 }
diff --git a/recipes-wifi/linux-mac80211/linux-mac80211.bb b/recipes-wifi/linux-mac80211/linux-mac80211.bb
index 93c478b..dc4f026 100644
--- a/recipes-wifi/linux-mac80211/linux-mac80211.bb
+++ b/recipes-wifi/linux-mac80211/linux-mac80211.bb
@@ -24,6 +24,9 @@
 require files/patches/build/build.inc
 require files/patches/subsys/subsys.inc
 
+SRC_URI_remove = "${@bb.utils.contains('DISTRO_FEATURES', 'flow_offload', '', 'file://908-mac80211-mtk-mask-kernel-version-limitation-and-fill-for.patch', d)}"
+SRC_URI_remove = "${@bb.utils.contains('DISTRO_FEATURES', 'flow_offload', '', 'file://909-mac80211-mtk-add-fill-receive-path-ops-to-get-wed-idx.patch', d)}"
+
 S = "${WORKDIR}/backports-${PV}-1"
 
 do_filogic_patches() {
diff --git a/recipes-wifi/linux-mt76/files/0001-mt76-add-internal-wed_tiny-header-file.patch b/recipes-wifi/linux-mt76/files/0001-mt76-add-internal-wed_tiny-header-file.patch
new file mode 100644
index 0000000..0056540
--- /dev/null
+++ b/recipes-wifi/linux-mt76/files/0001-mt76-add-internal-wed_tiny-header-file.patch
@@ -0,0 +1,72 @@
+From 1430e7a7a3d5ae7693d6fa8e795524ee4c78c0ef Mon Sep 17 00:00:00 2001
+From: Shayne Chen <shayne.chen@mediatek.com>
+Date: Mon, 7 Nov 2022 23:05:51 +0800
+Subject: [PATCH] mt76: add internal wed_tiny header file
+
+To prevent build fail of WED related parts.
+
+Change-Id: I907cae30e0775337a0c670010b450be15b510e18
+---
+ mt76.h     |  4 ++++
+ wed_tiny.h | 31 +++++++++++++++++++++++++++++++
+ 2 files changed, 35 insertions(+)
+ create mode 100644 wed_tiny.h
+
+diff --git a/mt76.h b/mt76.h
+index a3cf0d95..5edb986b 100755
+--- a/mt76.h
++++ b/mt76.h
+@@ -13,7 +13,11 @@
+ #include <linux/leds.h>
+ #include <linux/usb.h>
+ #include <linux/average.h>
++#ifdef CONFIG_NET_MEDIATEK_SOC_WED
+ #include <linux/soc/mediatek/mtk_wed.h>
++#else
++#include "wed_tiny.h"
++#endif
+ #include <net/mac80211.h>
+ #include "util.h"
+ #include "testmode.h"
+diff --git a/wed_tiny.h b/wed_tiny.h
+new file mode 100644
+index 00000000..91c98e7d
+--- /dev/null
++++ b/wed_tiny.h
+@@ -0,0 +1,33 @@
++#ifndef __WED_TINY_H
++#define __WED_TINY_H
++
++#include <linux/pci.h>
++
++struct mtk_wed_device {
++};
++
++static inline int
++mtk_wed_device_attach(struct mtk_wed_device *dev)
++{
++        int ret = -ENODEV;
++        return ret;
++}
++
++static inline bool mtk_wed_device_active(struct mtk_wed_device *dev)
++{
++        return false;
++}
++#define mtk_wed_device_detach(_dev) do {} while (0)
++#define mtk_wed_device_start(_dev, _mask) do {} while (0)
++#define mtk_wed_device_stop(_dev, _reset) do {} while (0)
++#define mtk_wed_device_tx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
++#define mtk_wed_device_txfree_ring_setup(_dev, _ring, _regs) -ENODEV
++#define mtk_wed_device_rx_ring_setup(_dev, _ring, _regs, _reset) -ENODEV
++#define mtk_wed_device_reg_read(_dev, _reg) 0
++#define mtk_wed_device_reg_write(_dev, _reg, _val) do {} while (0)
++#define mtk_wed_device_irq_get(_dev, _mask) 0
++#define mtk_wed_device_irq_set_mask(_dev, _mask) do {} while (0)
++#define mtk_wed_device_dma_reset(_dev) do {} while (0)
++#define mtk_wed_device_ppe_check(_dev, _hash)  do {} while (0)
++
++#endif
+-- 
+2.25.1
+
diff --git a/recipes-wifi/linux-mt76/linux-mt76.bb b/recipes-wifi/linux-mt76/linux-mt76.bb
index bf4b282..69d67b0 100644
--- a/recipes-wifi/linux-mt76/linux-mt76.bb
+++ b/recipes-wifi/linux-mt76/linux-mt76.bb
@@ -11,21 +11,53 @@
 SRC_URI = " \
     git://git@github.com/openwrt/mt76.git;protocol=https \
     file://COPYING;subdir=git \
+    file://0001-mt76-add-internal-wed_tiny-header-file.patch;apply=no \
     "
 SRC_URI += " \
     file://src \
     "
 
+
+
 DEPENDS += "virtual/kernel"
 DEPENDS += "linux-mac80211"
 
 FILESEXTRAPATHS_prepend := "${THISDIR}/files/patches:"
 FILESEXTRAPATHS_prepend := "${THISDIR}/src:"
 
-require files/patches/patches.inc
+#require files/patches/patches.inc
+SRC_URI += "file://*.patch;apply=no"
 
 S = "${WORKDIR}/git"
 
+do_mtk_patches() {
+    cd ${S}
+
+    DISTRO_FlowBlock_ENABLED="${@bb.utils.contains('DISTRO_FEATURES','flow_offload','true','false',d)}"
+    
+    if [ ! -e mtk_wifi_patch_applied ]; then
+        for i in ${WORKDIR}/*.patch
+        do
+        if [ $DISTRO_FlowBlock_ENABLED = 'true' ]; then
+            patch -p1 < $i;
+        else 
+            prefix=$(echo -n "${WORKDIR}"|wc -c)
+            patch_number_start=$(expr $prefix + 2)
+            patch_number_end=$(expr $patch_number_start + 3 )
+            patch_number=$(echo "$i" | cut -c"$patch_number_start"-"$patch_number_end")
+
+            if [ "$patch_number" -ge "3000" ]; then
+                continue;
+            else
+                patch -p1 < $i;
+            fi
+        fi
+        done
+    fi
+    touch mtk_wifi_patch_applied
+}
+addtask mtk_patches after do_patch before do_configure
+
 NOSTDINC_FLAGS = " \
     -I${B} \
     -I${STAGING_KERNEL_BUILDDIR}/usr/include/mac80211-backport/uapi \
diff --git a/recipes-wifi/linux-mt76/mt76-test.bb b/recipes-wifi/linux-mt76/mt76-test.bb
index f831b9f..6af254f 100644
--- a/recipes-wifi/linux-mt76/mt76-test.bb
+++ b/recipes-wifi/linux-mt76/mt76-test.bb
@@ -13,9 +13,12 @@
 SRC_URI = " \
     git://git@github.com/openwrt/mt76.git;protocol=https \
     file://COPYING;subdir=git \
+    file://0001-mt76-add-internal-wed_tiny-header-file.patch;apply=no \
     "
 
 
+
+
 DEPENDS += "virtual/kernel"
 DEPENDS += "linux-mac80211"
 DEPENDS += "linux-mt76"
@@ -29,11 +32,28 @@
 
 SRC_URI += "file://*.patch;apply=no"
 
-
 do_mtk_patches() {
 	cd ${S}/../
+    DISTRO_FlowBlock_ENABLED="${@bb.utils.contains('DISTRO_FEATURES','flow_offload','true','false',d)}"
+    
 	if [ ! -e mtk_wifi_patch_applied ]; then
-		for i in ${WORKDIR}/*.patch; do patch -p1 < $i; done
+		for i in ${WORKDIR}/*.patch
+        do
+        if [ $DISTRO_FlowBlock_ENABLED = 'true' ]; then
+            patch -p1 < $i;
+        else 
+            prefix=$(echo -n "${WORKDIR}"|wc -c)
+            patch_number_start=$(expr $prefix + 2)
+            patch_number_end=$(expr $patch_number_start + 3 )
+            patch_number=$(echo "$i" | cut -c"$patch_number_start"-"$patch_number_end")
+
+            if [ "$patch_number" -ge "3000" ]; then
+                continue;
+            else
+                patch -p1 < $i;
+            fi
+        fi
+        done
 	fi
 	touch mtk_wifi_patch_applied
 }