summaryrefslogtreecommitdiff
path: root/package/ramips/drivers/mt7620/patches
diff options
context:
space:
mode:
Diffstat (limited to 'package/ramips/drivers/mt7620/patches')
-rw-r--r--package/ramips/drivers/mt7620/patches/001-fix-kernel-warning.patch211
-rw-r--r--package/ramips/drivers/mt7620/patches/002-fix-insmod-fail.patch18
-rw-r--r--package/ramips/drivers/mt7620/patches/003-support-hwnat.patch17
-rw-r--r--package/ramips/drivers/mt7620/patches/025-wpa-key-mismatch.patch62
4 files changed, 308 insertions, 0 deletions
diff --git a/package/ramips/drivers/mt7620/patches/001-fix-kernel-warning.patch b/package/ramips/drivers/mt7620/patches/001-fix-kernel-warning.patch
new file mode 100644
index 0000000..bfa6536
--- /dev/null
+++ b/package/ramips/drivers/mt7620/patches/001-fix-kernel-warning.patch
@@ -0,0 +1,211 @@
+Index: mt7620-p4rev-113050/src/common/cmm_data_pci.c
+===================================================================
+--- mt7620-p4rev-113050.orig/src/common/cmm_data_pci.c
++++ mt7620-p4rev-113050/src/common/cmm_data_pci.c
+@@ -1164,6 +1164,14 @@ VOID RTMPHandlePreTBTTInterrupt(
+ {
+ APUpdateAllBeaconFrame(pAd);
+
++ POS_COOKIE pObj = (POS_COOKIE) pAd->OS_Cookie;
++#ifdef WORKQUEUE_BH
++ RTMP_OS_TASKLET_SCHE(&pObj->pretbtt_work);
++#else
++ RTMP_OS_TASKLET_SCHE(&pObj->pretbtt_task);
++#endif
++
++#if 0
+ RTMP_IO_WRITE32(pAd, MCU_INT_STATUS, 0x14);
+ pAd->MacTab.fMcastPsQEnable = FALSE;
+
+@@ -1222,6 +1230,7 @@ VOID RTMPHandlePreTBTTInterrupt(
+ pAd->MacTab.fMcastPsQEnable = TRUE;
+ }
+ }
++#endif
+ }
+ else
+ #endif /* CONFIG_AP_SUPPORT */
+Index: mt7620-p4rev-113050/src/include/os/rt_drv.h
+===================================================================
+--- mt7620-p4rev-113050.orig/src/include/os/rt_drv.h
++++ mt7620-p4rev-113050/src/include/os/rt_drv.h
+@@ -337,6 +337,7 @@ struct os_cookie {
+ RTMP_NET_TASK_STRUCT hcca_dma_done_work;
+
+ RTMP_NET_TASK_STRUCT tbtt_work;
++ RTMP_NET_TASK_STRUCT pretbtt_work;
+
+ #else
+ RTMP_NET_TASK_STRUCT rx_done_task;
+@@ -350,6 +351,7 @@ struct os_cookie {
+ RTMP_NET_TASK_STRUCT ac3_dma_done_task;
+ RTMP_NET_TASK_STRUCT hcca_dma_done_task;
+ RTMP_NET_TASK_STRUCT tbtt_task;
++ RTMP_NET_TASK_STRUCT pretbtt_task;
+ #endif /* WORKQUEUE_BH */
+
+ #ifdef RTMP_MAC_PCI
+Index: mt7620-p4rev-113050/src/include/os/rt_linux.h
+===================================================================
+--- mt7620-p4rev-113050.orig/src/include/os/rt_linux.h
++++ mt7620-p4rev-113050/src/include/os/rt_linux.h
+@@ -664,6 +664,7 @@ struct os_cookie {
+ struct work_struct hcca_dma_done_work;
+
+ struct work_struct tbtt_work;
++ struct work_struct pretbtt_work;
+
+ #else
+ RTMP_NET_TASK_STRUCT rx_done_task;
+@@ -677,6 +678,7 @@ struct os_cookie {
+ RTMP_NET_TASK_STRUCT ac3_dma_done_task;
+ RTMP_NET_TASK_STRUCT hcca_dma_done_task;
+ RTMP_NET_TASK_STRUCT tbtt_task;
++ RTMP_NET_TASK_STRUCT pretbtt_task;
+ #endif /* WORKQUEUE_BH */
+
+ #ifdef RTMP_MAC_PCI
+Index: mt7620-p4rev-113050/src/include/rtmp.h
+===================================================================
+--- mt7620-p4rev-113050.orig/src/include/rtmp.h
++++ mt7620-p4rev-113050/src/include/rtmp.h
+@@ -9631,8 +9631,10 @@ VOID RtmpMgmtTaskExit(
+
+ #ifdef WORKQUEUE_BH
+ void tbtt_workq(struct work_struct *work);
++void pretbtt_workq(struct work_struct *work);
+ #else
+ void tbtt_tasklet(unsigned long data);
++void pretbtt_tasklet(unsigned long data);
+ #endif /* WORKQUEUE_BH */
+
+
+Index: mt7620-p4rev-113050/src/os/linux/rt_profile.c
+===================================================================
+--- mt7620-p4rev-113050.orig/src/os/linux/rt_profile.c
++++ mt7620-p4rev-113050/src/os/linux/rt_profile.c
+@@ -515,6 +515,96 @@ void tbtt_tasklet(unsigned long data)
+ #endif /* CONFIG_AP_SUPPORT */
+ }
+
++#ifdef WORKQUEUE_BH
++void pretbtt_workq(struct work_struct *work)
++#else
++void pretbtt_tasklet(unsigned long data)
++#endif /* WORKQUEUE_BH */
++{
++/*#define MAX_TX_IN_TBTT (16) */
++
++#ifdef CONFIG_AP_SUPPORT
++#ifdef WORKQUEUE_BH
++ POS_COOKIE pObj = container_of(work, struct os_cookie, pretbtt_work);
++ PRTMP_ADAPTER pAd = pObj->pAd_va;
++#else
++ PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) data;
++#endif /* WORKQUEUE_BH */
++
++ RTMP_IO_WRITE32(pAd, MCU_INT_STATUS, 0x14);
++ pAd->MacTab.fMcastPsQEnable = FALSE;
++
++ if ((pAd->ApCfg.DtimCount == 0) &&
++ (pAd->MacTab.McastPsQueue.Head))
++ {
++ UINT32 macValue;
++ PQUEUE_ENTRY pEntry;
++ BOOLEAN bPS = FALSE;
++ UINT count = 0;
++ unsigned long IrqFlags;
++
++ RTMP_IO_READ32(pAd, PBF_CFG, &macValue);
++ macValue &= (~0x0C);
++ RTMP_IO_WRITE32(pAd, PBF_CFG, macValue);
++
++ RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags);
++
++ while (pAd->MacTab.McastPsQueue.Head)
++ {
++ bPS = TRUE;
++#if 0
++ if (pAd->TxSwQueue[QID_AC_BE].Number <= (MAX_PACKETS_IN_QUEUE + MAX_PACKETS_IN_MCAST_PS_QUEUE))
++#else
++ if (pAd->TxSwQueue[QID_HCCA].Number <= (MAX_PACKETS_IN_QUEUE + MAX_PACKETS_IN_MCAST_PS_QUEUE))
++#endif
++ {
++ pEntry = RemoveHeadQueue(&pAd->MacTab.McastPsQueue);
++
++ if (count)
++ {
++ RTMP_SET_PACKET_MOREDATA(pEntry, TRUE);
++ }
++#if 0
++ InsertHeadQueue(&pAd->TxSwQueue[QID_AC_BE], pEntry);
++#else
++ InsertHeadQueue(&pAd->TxSwQueue[QID_HCCA], pEntry);
++#endif
++ count++;
++ }
++ else
++ {
++ break;
++ }
++ }
++
++ RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags);
++
++ if (pAd->MacTab.McastPsQueue.Number == 0)
++ {
++ UINT bss_index;
++
++ /* clear MCAST/BCAST backlog bit for all BSS */
++ for(bss_index=BSS0; bss_index<pAd->ApCfg.BssidNum; bss_index++)
++ WLAN_MR_TIM_BCMC_CLEAR(bss_index);
++ /* End of for */
++ }
++ pAd->MacTab.PsQIdleCount = 0;
++
++ // Dequeue outgoing framea from TxSwQueue0..3 queue and process it
++ if (bPS == TRUE)
++ {
++ UINT32 macValue1, idx;
++#if 0
++ RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, /*MAX_TX_IN_TBTT*/MAX_PACKETS_IN_MCAST_PS_QUEUE);
++#else
++ RTMPDeQueuePacket(pAd, FALSE, QID_HCCA, /*MAX_TX_IN_TBTT*/MAX_PACKETS_IN_MCAST_PS_QUEUE);
++#endif
++ pAd->MacTab.fMcastPsQEnable = TRUE;
++ }
++ }
++#endif /* CONFIG_AP_SUPPORT */
++}
++
+
+ void announce_802_3_packet(
+ IN VOID *pAdSrc,
+Index: mt7620-p4rev-113050/src/os/linux/rt_rbus_pci_drv.c
+===================================================================
+--- mt7620-p4rev-113050.orig/src/os/linux/rt_rbus_pci_drv.c
++++ mt7620-p4rev-113050/src/os/linux/rt_rbus_pci_drv.c
+@@ -93,6 +93,7 @@ NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAP
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->ac3_dma_done_work, ac3_dma_done_workq);
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->hcca_dma_done_work, hcca_dma_done_workq);
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->tbtt_work, tbtt_workq);
++ RTMP_OS_TASKLET_INIT(pAd, &pObj->pretbtt_work, pretbtt_workq);
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->fifo_statistic_full_work, fifo_statistic_full_workq);
+ #ifdef UAPSD_SUPPORT
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->uapsd_eosp_sent_work, uapsd_eosp_sent_workq);
+@@ -121,6 +122,7 @@ NDIS_STATUS RtmpNetTaskInit(IN RTMP_ADAP
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->ac3_dma_done_task, ac3_dma_done_tasklet, (unsigned long)pAd);
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->hcca_dma_done_task, hcca_dma_done_tasklet, (unsigned long)pAd);
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->tbtt_task, tbtt_tasklet, (unsigned long)pAd);
++ RTMP_OS_TASKLET_INIT(pAd, &pObj->pretbtt_task, pretbtt_tasklet, (unsigned long)pAd);
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->fifo_statistic_full_task, fifo_statistic_full_tasklet, (unsigned long)pAd);
+ #ifdef UAPSD_SUPPORT
+ RTMP_OS_TASKLET_INIT(pAd, &pObj->uapsd_eosp_sent_task, uapsd_eosp_sent_tasklet, (unsigned long)pAd);
+@@ -160,6 +162,7 @@ void RtmpNetTaskExit(IN RTMP_ADAPTER *pA
+ RTMP_OS_TASKLET_KILL(&pObj->ac3_dma_done_task);
+ RTMP_OS_TASKLET_KILL(&pObj->hcca_dma_done_task);
+ RTMP_OS_TASKLET_KILL(&pObj->tbtt_task);
++ RTMP_OS_TASKLET_KILL(&pObj->pretbtt_task);
+ RTMP_OS_TASKLET_KILL(&pObj->fifo_statistic_full_task);
+ #ifdef UAPSD_SUPPORT
+ RTMP_OS_TASKLET_KILL(&pObj->uapsd_eosp_sent_task);
diff --git a/package/ramips/drivers/mt7620/patches/002-fix-insmod-fail.patch b/package/ramips/drivers/mt7620/patches/002-fix-insmod-fail.patch
new file mode 100644
index 0000000..f846b0e
--- /dev/null
+++ b/package/ramips/drivers/mt7620/patches/002-fix-insmod-fail.patch
@@ -0,0 +1,18 @@
+Index: mt7620-p4rev-113050/src/os/linux/rt_rbus_pci_drv.c
+===================================================================
+--- mt7620-p4rev-113050.orig/src/os/linux/rt_rbus_pci_drv.c
++++ mt7620-p4rev-113050/src/os/linux/rt_rbus_pci_drv.c
+@@ -773,6 +773,13 @@ static void ac0_dma_done_tasklet(unsigne
+ }
+
+
++#ifdef RALINK_ATE
++static void ate_ac0_dma_done_tasklet(unsigned long data)
++{
++ return;
++}
++#endif /* RALINK_ATE */
++
+
+ #ifdef UAPSD_SUPPORT
+ /*
diff --git a/package/ramips/drivers/mt7620/patches/003-support-hwnat.patch b/package/ramips/drivers/mt7620/patches/003-support-hwnat.patch
new file mode 100644
index 0000000..96bd7d4
--- /dev/null
+++ b/package/ramips/drivers/mt7620/patches/003-support-hwnat.patch
@@ -0,0 +1,17 @@
+Index: mt7620-p4rev-113050/build/Makefile
+===================================================================
+--- mt7620-p4rev-113050.orig/build/Makefile
++++ mt7620-p4rev-113050/build/Makefile
+@@ -251,7 +251,12 @@ EXTRA_CFLAGS += -DAGGREGATION_SUPPORT -D
+ EXTRA_CFLAGS += -DCONFIG_AP_SUPPORT -DAP_SCAN_SUPPORT -DUAPSD_AP_SUPPORT -DUAPSD_SUPPORT -DRTMP_RBUS_SUPPORT -DRTMP_MAC_PCI
+ EXTRA_CFLAGS += -DDOT11_N_SUPPORT -DSTATS_COUNT_SUPPORT -DIAPP_SUPPORT -DDOT1X_SUPPORT
+ EXTRA_CFLAGS += -DRALINK_ATE -DRALINK_QA -DCONFIG_RT2880_ATE_CMD_NEW
++
++ifeq ($(CONFIG_RT2860V2_WIFI_HW_NAT),y)
++EXTRA_CFLAGS += -DCONFIG_WIFI_HW_NAT
++else
+ EXTRA_CFLAGS += -DCONFIG_RA_NAT_NONE
++endif
+
+ #provide busy time statistics for every TBTT */
+ #EXTRA_CFLAGS += -DQLOAD_FUNC_BUSY_TIME_STATS
diff --git a/package/ramips/drivers/mt7620/patches/025-wpa-key-mismatch.patch b/package/ramips/drivers/mt7620/patches/025-wpa-key-mismatch.patch
new file mode 100644
index 0000000..97bb426
--- /dev/null
+++ b/package/ramips/drivers/mt7620/patches/025-wpa-key-mismatch.patch
@@ -0,0 +1,62 @@
+Index: mt7620-p4rev-120998/src/ap/ap.c
+===================================================================
+--- mt7620-p4rev-120998.orig/src/ap/ap.c
++++ mt7620-p4rev-120998/src/ap/ap.c
+@@ -306,6 +306,17 @@ VOID APStartUp(
+ else
+ pMbss->WpaMixPairCipher = MIX_CIPHER_NOTUSE;
+
++ if (pMbss->WepStatus == Ndis802_11Encryption2Enabled ||
++ pMbss->WepStatus == Ndis802_11Encryption3Enabled ||
++ pMbss->WepStatus == Ndis802_11Encryption4Enabled)
++ {
++ RT_CfgSetWPAPSKKey(pAd, pMbss->WPAKeyString,
++ strlen(pMbss->WPAKeyString),
++ (PUCHAR)pAd->ApCfg.MBSSID[apidx].Ssid,
++ pAd->ApCfg.MBSSID[apidx].SsidLen,
++ pAd->ApCfg.MBSSID[apidx].PMK);
++ }
++
+ /* Generate the corresponding RSNIE */
+ RTMPMakeRSNIE(pAd, pMbss->AuthMode, pMbss->WepStatus, apidx);
+
+Index: mt7620-p4rev-120998/src/ap/ap_cfg.c
+===================================================================
+--- mt7620-p4rev-120998.orig/src/ap/ap_cfg.c
++++ mt7620-p4rev-120998/src/ap/ap_cfg.c
+@@ -7157,6 +7157,9 @@ INT Set_AP_WPAPSK_Proc(
+ if (retval == FALSE)
+ return FALSE;
+
++ /* Keep this key string */
++ strcpy(pAd->ApCfg.MBSSID[apidx].WPAKeyString, arg);
++
+ #ifdef WSC_AP_SUPPORT
+ NdisZeroMemory(pMBSSStruct->WscControl.WpaPsk, 64);
+ pMBSSStruct->WscControl.WpaPskLen = 0;
+Index: mt7620-p4rev-120998/src/common/cmm_profile.c
+===================================================================
+--- mt7620-p4rev-120998.orig/src/common/cmm_profile.c
++++ mt7620-p4rev-120998/src/common/cmm_profile.c
+@@ -1710,6 +1710,9 @@ static int rtmp_parse_wpapsk_buffer_from
+ if (ret == FALSE)
+ return FALSE;
+
++ /* Keep this key string */
++ strcpy(pAd->ApCfg.MBSSID[i].WPAKeyString, tmpbuf);
++
+ #ifdef WSC_AP_SUPPORT
+ NdisZeroMemory(pAd->ApCfg.MBSSID[i].WscControl.WpaPsk, 64);
+ pAd->ApCfg.MBSSID[i].WscControl.WpaPskLen = 0;
+Index: mt7620-p4rev-120998/src/include/rtmp.h
+===================================================================
+--- mt7620-p4rev-120998.orig/src/include/rtmp.h
++++ mt7620-p4rev-120998/src/include/rtmp.h
+@@ -1475,6 +1475,7 @@ typedef struct _MULTISSID_STRUCT {
+ UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
+
+ /* WPA */
++ UCHAR WPAKeyString[65];
+ UCHAR GMK[32];
+ UCHAR PMK[32];
+ UCHAR GTK[32];