[Feature][T8TSK-298][WIFI]wifi hwnat diff between 2 core and 4 core
Only Configure: No
Affected branch: GSW3.0-No-Connman
Affected module: WIFI
Is it affected on both ZXIC and MTK: only MTK
Self-test: Yes
Doc Update: No
Change-Id: I5c9240af9473c967bd6d248019d592f8004e41d6
diff --git a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount_nand b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount_nand
index f901286..9e3d750 100755
--- a/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount_nand
+++ b/meta-sdk/meta/meta-lynqSDK-T800/recipes-core/initial/files/init_mount_nand
@@ -186,6 +186,11 @@
#you.chen@2022-07-11 add for load oemapp begin
init_oemapp() {
+ #jb.qi add for enable hwnat on 20231205
+ RESULT="$(cat /proc/cpuinfo|grep processor|wc -l)"
+ if [ $RESULT = 2 ]; then
+ ifconfig eth0 up
+ fi
mnt_folder oemdata /oemdata
diff --git a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.c b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.c
index 25d9476..9164ea7 100755
--- a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.c
+++ b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.c
@@ -61,6 +61,14 @@
#include <linux/notifier.h>
#include <linux/irq.h>
#include <net/addrconf.h>
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+#include <net/ra_nat.h>
+#include <linux/kthread.h>
+#include <linux/sched.h>
+#include <linux/workqueue.h>
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
#ifdef ENABLE_ADAPTIVE_SCHED
#include <linux/cpufreq.h>
#endif /* ENABLE_ADAPTIVE_SCHED */
@@ -3577,6 +3585,17 @@
uint8 htsfdlystat_sz = 0;
DHD_TRACE(("%s: Enter\n", __FUNCTION__));
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+ if (ppe_hook_tx_wifi) {
+ if (ppe_hook_tx_wifi(skb, 0) == 0) {
+ printk("morris ppe_hook_tx_wifi debug");
+ dev_kfree_skb_any(skb);
+ return NETDEV_TX_OK;
+ }
+ }
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
if (dhd_query_bus_erros(&dhd->pub)) {
#ifdef CFI_CHECK
@@ -4990,11 +5009,32 @@
bcm_object_trace_opr(skb, BCM_OBJDBG_REMOVE,
__FUNCTION__, __LINE__);
DHD_PERIM_UNLOCK_ALL((dhd->fwder_unit % FWDER_MAX_UNIT));
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+ if (ppe_hook_rx_wifi){
+ FOE_MAGIC_TAG(skb) = FOE_MAGIC_WLAN;
+ if (ppe_hook_rx_wifi(skb)) {
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
#if defined(DHD_LB_RXP)
netif_receive_skb(skb);
#else /* !defined(DHD_LB_RXP) */
netif_rx(skb);
#endif /* !defined(DHD_LB_RXP) */
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+ }
+ }
+ if (!ppe_hook_rx_wifi){
+
+ #if defined(DHD_LB_RXP)
+ netif_receive_skb(skb);
+ #else /* !defined(DHD_LB_RXP) */
+ netif_rx(skb);
+ #endif /* !defined(DHD_LB_RXP) */
+ }
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
DHD_PERIM_LOCK_ALL((dhd->fwder_unit % FWDER_MAX_UNIT));
} else {
if (dhd->rxthread_enabled) {
@@ -5021,11 +5061,32 @@
dhd_tcpack_suppress_set(&dhd->pub, TCPACK_SUP_OFF);
#endif /* BCMPCIE && DHDTCPACK_SUPPRESS */
DHD_PERIM_UNLOCK_ALL((dhd->fwder_unit % FWDER_MAX_UNIT));
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+ if (ppe_hook_rx_wifi) {
+ FOE_MAGIC_TAG(skb) = FOE_MAGIC_WLAN;
+ if (ppe_hook_rx_wifi(skb)) {
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
+
#if defined(DHD_LB_RXP)
netif_receive_skb(skb);
#else /* !defined(DHD_LB_RXP) */
netif_rx_ni(skb);
#endif /* defined(DHD_LB_RXP) */
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+ }
+ }
+ if (!ppe_hook_rx_wifi){
+#if defined(DHD_LB_RXP)
+ netif_receive_skb(skb);
+#else /* !defined(DHD_LB_RXP) */
+ netif_rx_ni(skb);
+#endif /* !defined(DHD_LB_RXP) */
+ }
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
DHD_PERIM_LOCK_ALL((dhd->fwder_unit % FWDER_MAX_UNIT));
}
}
@@ -12481,6 +12542,21 @@
DHD_ERROR(("couldn't register the net device [%s], err %d\n", net->name, err));
goto fail;
}
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+ else {
+
+ if (ppe_dev_register_hook != NULL){
+ printk("\n\nppe_dev_register_hook\n\n");
+ ppe_dev_register_hook(net);
+ }
+ else{
+
+ }
+
+ }
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
printf("Register interface [%s] MAC: "MACDBG"\n\n", net->name,
#if defined(CUSTOMER_HW4_DEBUG)
diff --git a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.h b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.h
index 53a727a..d449b24 100755
--- a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.h
+++ b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_linux.h
@@ -401,7 +401,14 @@
int dhd_get_fw_mode(struct dhd_info *dhdinfo);
bool dhd_update_fw_nv_path(struct dhd_info *dhdinfo);
-
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+extern int (*ppe_hook_rx_wifi)(struct sk_buff *skb);
+extern int (*ppe_hook_tx_wifi)(struct sk_buff *skb, int gmac_no);
+extern void (*ppe_dev_register_hook)(struct net_device *dev);
+extern void (*ppe_dev_unregister_hook)(struct net_device *dev);
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
#if defined(BT_OVER_SDIO)
int dhd_net_bus_get(struct net_device *dev);
int dhd_net_bus_put(struct net_device *dev);
diff --git a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_msgbuf.c b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_msgbuf.c
index 26638d4..1e4c18f 100755
--- a/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_msgbuf.c
+++ b/src/kernel/linux/v4.19/drivers/net/wireless/bcmdhd/dhd_msgbuf.c
@@ -4537,7 +4537,11 @@
dhd->rx_pktgetfail++;
break;
}
-
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+ skb_reserve((struct sk_buff*)p, NET_SKB_PAD+4);
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
pktlen[i] = PKTLEN(dhd->osh, p);
if (SECURE_DMA_ENAB(dhd->osh)) {
pa = SECURE_DMA_MAP(dhd->osh, PKTDATA(dhd->osh, p), pktlen[i],
diff --git a/src/kernel/linux/v4.19/net/core/skbuff.c b/src/kernel/linux/v4.19/net/core/skbuff.c
index 5ca38ed..3a8cad0 100644
--- a/src/kernel/linux/v4.19/net/core/skbuff.c
+++ b/src/kernel/linux/v4.19/net/core/skbuff.c
@@ -399,8 +399,13 @@
void *data;
len += NET_SKB_PAD;
-
+/*jb.qi add for wifi hwnat on 20231205 start*/
+#if CONFIG_MTK_CORE_NUM == 2
+ if(true ||
+#else
if ((len > SKB_WITH_OVERHEAD(PAGE_SIZE)) ||
+#endif
+/*jb.qi add for wifi hwnat on 20231205 end*/
(gfp_mask & (__GFP_DIRECT_RECLAIM | GFP_DMA))) {
skb = __alloc_skb(len, gfp_mask, SKB_ALLOC_RX, NUMA_NO_NODE);
if (!skb)