[Debian-eeepc-devel] [SCM] rt2860 source for the ralink wireless chip in the eeepc 901. branch, master, updated. fea49085c3b26416a96c121f848dd032603f5cb7
Glenn Saberton
gsaberton at foomagic.org
Tue Oct 7 08:54:46 UTC 2008
The following commit has been merged in the master branch:
commit fea49085c3b26416a96c121f848dd032603f5cb7
Author: Glenn Saberton <gsaberton at foomagic.org>
Date: Tue Oct 7 15:34:38 2008 +0800
New upstream version
Rework no longer valid patches
release 1.8.0.0
diff --git a/rt2860-1.7.0.0/Makefile b/rt2860-source-1.8.0.0/Makefile
similarity index 71%
copy from rt2860-1.7.0.0/Makefile
copy to rt2860-source-1.8.0.0/Makefile
index 6c556b2..6fa7a73 100644
--- a/rt2860-1.7.0.0/Makefile
+++ b/rt2860-source-1.8.0.0/Makefile
@@ -1,6 +1,12 @@
+#MODE - STA or AP or APSTA.
RT28xx_MODE = STA
+
+#TARTET - LINUX or UCOS.
TARGET = LINUX
+
+#CHIPSET - 2860 or 2870.
CHIPSET = 2860
+
#RT28xx_DIR = home directory of RT28xx source code
RT28xx_DIR = $(shell pwd)
RTMP_SRC_DIR = $(RT28xx_DIR)/RT$(CHIPSET)
@@ -16,8 +22,9 @@ PLATFORM = PC
#PLATFORM = INF_TWINPASS
#PLATFORM = INF_DANUBE
#PLATFORM = BRCM_6358
-#RELEASE = DPA
-RELEASE = DPB
+#PLATFORM = INF_AMAZON_SE
+#PLATFORM = CAVM_OCTEON
+RELEASE = DPO
ifeq ($(PLATFORM),5VT)
LINUX_SRC = /opt/fvt_11N_SDK_0807/fvt131x_SDK_11n/linux-2.6.17
CROSS_COMPILE = /opt/crosstool/uClibc_v5te_le_gcc_4_1_1/bin/arm-linux-
@@ -41,6 +48,7 @@ endif
ifeq ($(PLATFORM),SIGMA_8622)
LINUX_SRC = /home/snowpin/armutils_2.5.120.1/build_arm/linux-2.4.22-em86xx
CROSS_COMPILE = /home/snowpin/armutils_2.5.120.1/toolchain/bin/arm-elf-
+CROSS_COMPILE_INCLUDE = /home/snowpin/armutils_2.5.120.1/toolchain/lib/gcc-lib/arm-elf/2.95.3
endif
ifeq ($(PLATFORM),INIC)
@@ -87,7 +95,23 @@ LINUX_SRC =
CROSS_COMPILE =
endif
-export RT28xx_DIR RT28xx_MODE LINUX_SRC CROSS_COMPILE PLATFORM RELEASE CHIPSET RTMP_SRC_DIR LINUX_SRC_MODULE
+ifeq ($(PLATFORM),INF_AMAZON_SE)
+# Linux 2.6
+#LINUX_SRC = /lib/modules/$(shell uname -r)/build
+# Linux 2.4 Change to your local setting
+LINUX_SRC = /backup/ifx/3.6.2.2/source/kernel/opensource/linux-2.4.31
+#CROSS_COMPILE = mips-linux-
+#LINUX_SRC = /project/Infineon/3.6.2.2/source/kernel/opensource/linux-2.4.31
+CROSS_COMPILE = /opt/uclibc-toolchain/ifx-lxdb-1-2-3-external/gcc-3.3.6/toolchain-mips/R0208V35/mips-linux-uclibc/bin/
+endif
+
+ifeq ($(PLATFORM),CAVM_OCTEON)
+OCTEON_ROOT = /usr/local/Cavium_Networks/OCTEON-SDK
+LINUX_SRC = $(OCTEON_ROOT)/linux/kernel_2.6/linux
+CROSS_COMPILE = mips64-octeon-linux-gnu-
+endif
+
+export RT28xx_DIR RT28xx_MODE LINUX_SRC CROSS_COMPILE CROSS_COMPILE_INCLUDE PLATFORM RELEASE CHIPSET RTMP_SRC_DIR LINUX_SRC_MODULE
all: build_tools $(TARGET)
@@ -101,12 +125,28 @@ LINUX:
ifneq (,$(findstring 2.4,$(LINUX_SRC)))
cp -f os/linux/Makefile.4 $(RT28xx_DIR)/os/linux/Makefile
make -C $(RT28xx_DIR)/os/linux/
+ifeq ($(RT28xx_MODE),AP)
+ cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)ap.o /tftpboot
+else
+ifeq ($(RT28xx_MODE),APSTA)
+ cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)apsta.o /tftpboot
+else
cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)sta.o /tftpboot
+endif
+endif
else
cp -f os/linux/Makefile.6 $(RT28xx_DIR)/os/linux/Makefile
make -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
+ifeq ($(RT28xx_MODE),AP)
+ cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)ap.ko /tftpboot
+else
+ifeq ($(RT28xx_MODE),APSTA)
+ cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)apsta.ko /tftpboot
+else
cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)sta.ko /tftpboot
endif
+endif
+endif
clean:
ifeq ($(TARGET), LINUX)
diff --git a/rt2860-1.7.0.0/README_STA b/rt2860-source-1.8.0.0/README_STA
similarity index 98%
copy from rt2860-1.7.0.0/README_STA
copy to rt2860-source-1.8.0.0/README_STA
index ca531c3..d67230e 100644
--- a/rt2860-1.7.0.0/README_STA
+++ b/rt2860-source-1.8.0.0/README_STA
@@ -71,10 +71,12 @@ Build Instructions:
=> #>cd wpa_supplicant-0.5.7
=> #>./wpa_supplicant -Dralink -ira0 -c wpa_supplicant.conf -d
-4> $make # compile driver source code
+4> $make
+ # compile driver source code
+ # To fix "error: too few arguments to function ¡¥iwe_stream_add_event"
+ => $patch -i os/linux/sta_ioctl.c.patch os/linux/sta_ioctl.c
5> $cp RT2860STA.dat /etc/Wireless/RT2860STA/RT2860STA.dat
- # !!!check if it is a binary file before loading !!!
6> load driver
#[kernel 2.4]
diff --git a/rt2860-1.7.0.0/RT2860STA.dat b/rt2860-source-1.8.0.0/RT2860STA.dat
similarity index 97%
copy from rt2860-1.7.0.0/RT2860STA.dat
copy to rt2860-source-1.8.0.0/RT2860STA.dat
index beb98c4..6568fae 100644
--- a/rt2860-1.7.0.0/RT2860STA.dat
+++ b/rt2860-source-1.8.0.0/RT2860STA.dat
@@ -50,3 +50,4 @@ HT_MIMOPSMode=3
IEEE80211H=0
TGnWifiTest=0
WirelessEvent=0
+CarrierDetect=0
diff --git a/rt2860-1.7.0.0/common/2860_rtmp_init.c b/rt2860-source-1.8.0.0/common/2860_rtmp_init.c
similarity index 98%
copy from rt2860-1.7.0.0/common/2860_rtmp_init.c
copy to rt2860-source-1.8.0.0/common/2860_rtmp_init.c
index ae0c67d..f8c0965 100644
--- a/rt2860-1.7.0.0/common/2860_rtmp_init.c
+++ b/rt2860-source-1.8.0.0/common/2860_rtmp_init.c
@@ -387,20 +387,20 @@ VOID NICInitTxRxRingAndBacklogQueue(
InitializeQueueHeader(&pAd->TxSwQueue[QID_AC_VO]);
InitializeQueueHeader(&pAd->TxSwQueue[QID_HCCA]);
- // Init RX Ring index pointer
+ // Init RX Ring index pointer
pAd->RxRing.RxSwReadIdx = 0;
pAd->RxRing.RxCpuIdx = RX_RING_SIZE - 1;
// Init TX rings index pointer
- for (i=0; i<NUM_OF_TX_RING; i++)
- {
- pAd->TxRing[i].TxSwFreeIdx = 0;
- pAd->TxRing[i].TxCpuIdx = 0;
- }
+ for (i=0; i<NUM_OF_TX_RING; i++)
+ {
+ pAd->TxRing[i].TxSwFreeIdx = 0;
+ pAd->TxRing[i].TxCpuIdx = 0;
+ }
// init MGMT ring index pointer
pAd->MgmtRing.TxSwFreeIdx = 0;
- pAd->MgmtRing.TxCpuIdx = 0;
+ pAd->MgmtRing.TxCpuIdx = 0;
pAd->PrivateInfo.TxRingFullCnt = 0;
}
@@ -437,7 +437,7 @@ VOID RTMPRingCleanUp(
int i;
PRTMP_TX_RING pTxRing;
unsigned long IrqFlags;
-
+
DBGPRINT(RT_DEBUG_TRACE,("RTMPRingCleanUp(RingIdx=%d, Pending-NDIS=%ld)\n", RingType, pAd->RalinkCounters.PendingNdisPacketCount));
switch (RingType)
{
@@ -511,7 +511,7 @@ VOID RTMPRingCleanUp(
{
PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE);
RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
- }
+ }
pAd->MgmtRing.Cell[i].pNextNdisPacket = NULL;
}
@@ -795,7 +795,7 @@ PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
if (pkt) {
RTMP_SET_PACKET_SOURCE(pkt, PKTSRC_NDIS);
*VirtualAddress = (PVOID) RTPKT_TO_OSPKT(pkt)->data;
- *PhysicalAddress = PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1, PCI_DMA_FROMDEVICE);
+ *PhysicalAddress = PCI_MAP_SINGLE(pAd, *VirtualAddress, Length, -1, PCI_DMA_FROMDEVICE);
} else {
*VirtualAddress = (PVOID) NULL;
*PhysicalAddress = (NDIS_PHYSICAL_ADDRESS) NULL;
@@ -917,6 +917,6 @@ done:
RTMP_SEM_UNLOCK(&pAd->RxRingLock);
*pbReschedule = bReschedule;
return pRxPacket;
-}
+}
/* End of 2860_rtmp_init.c */
diff --git a/rt2860-1.7.0.0/common/action.c b/rt2860-source-1.8.0.0/common/action.c
similarity index 93%
copy from rt2860-1.7.0.0/common/action.c
copy to rt2860-source-1.8.0.0/common/action.c
index 68edeef..a065af0 100644
--- a/rt2860-1.7.0.0/common/action.c
+++ b/rt2860-source-1.8.0.0/common/action.c
@@ -76,19 +76,23 @@ VOID ActionStateMachineInit(
StateMachineSetAction(S, ACT_IDLE, MT2_PEER_DLS_CATE, (STATE_MACHINE_FUNC)PeerDLSAction);
#endif // QOS_DLS_SUPPORT //
+#ifdef DOT11_N_SUPPORT
StateMachineSetAction(S, ACT_IDLE, MT2_PEER_BA_CATE, (STATE_MACHINE_FUNC)PeerBAAction);
- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_PUBLIC_CATE, (STATE_MACHINE_FUNC)PeerPublicAction);
- StateMachineSetAction(S, ACT_IDLE, MT2_PEER_RM_CATE, (STATE_MACHINE_FUNC)PeerRMAction);
StateMachineSetAction(S, ACT_IDLE, MT2_PEER_HT_CATE, (STATE_MACHINE_FUNC)PeerHTAction);
-
StateMachineSetAction(S, ACT_IDLE, MT2_MLME_ADD_BA_CATE, (STATE_MACHINE_FUNC)MlmeADDBAAction);
StateMachineSetAction(S, ACT_IDLE, MT2_MLME_ORI_DELBA_CATE, (STATE_MACHINE_FUNC)MlmeDELBAAction);
StateMachineSetAction(S, ACT_IDLE, MT2_MLME_REC_DELBA_CATE, (STATE_MACHINE_FUNC)MlmeDELBAAction);
+#endif // DOT11_N_SUPPORT //
+
+ StateMachineSetAction(S, ACT_IDLE, MT2_PEER_PUBLIC_CATE, (STATE_MACHINE_FUNC)PeerPublicAction);
+ StateMachineSetAction(S, ACT_IDLE, MT2_PEER_RM_CATE, (STATE_MACHINE_FUNC)PeerRMAction);
+
StateMachineSetAction(S, ACT_IDLE, MT2_MLME_QOS_CATE, (STATE_MACHINE_FUNC)MlmeQOSAction);
StateMachineSetAction(S, ACT_IDLE, MT2_MLME_DLS_CATE, (STATE_MACHINE_FUNC)MlmeDLSAction);
StateMachineSetAction(S, ACT_IDLE, MT2_ACT_INVALID, (STATE_MACHINE_FUNC)MlmeInvalidAction);
}
+#ifdef DOT11_N_SUPPORT
VOID MlmeADDBAAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
@@ -129,7 +133,18 @@ VOID MlmeADDBAAction(
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pInfo->pAddr);
+ {
+ if (ADHOC_ON(pAd))
+ ActHeaderInit(pAd, &Frame.Hdr, pInfo->pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
+ else
+#ifdef QOS_DLS_SUPPORT
+ if (pAd->MacTab.Content[pInfo->Wcid].ValidAsDls)
+ ActHeaderInit(pAd, &Frame.Hdr, pInfo->pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
+ else
+#endif // QOS_DLS_SUPPORT //
+ ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pInfo->pAddr);
+
+ }
#endif // CONFIG_STA_SUPPORT //
Frame.Category = CATEGORY_BA;
@@ -204,7 +219,7 @@ VOID MlmeDELBAAction(
}
// SEND BAR (Send BAR to refresh peer reordering buffer.)
- Idx = pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID];
+ Idx = pAd->MacTab.Content[pInfo->Wcid].BAOriWcidArray[pInfo->TID];
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
BarHeaderInit(pAd, &FrameBar, pAd->MacTab.Content[pInfo->Wcid].Addr, pAd->CurrentAddress);
@@ -228,7 +243,17 @@ VOID MlmeDELBAAction(
FrameLen = 0;
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->MacTab.Content[pInfo->Wcid].Addr);
+ {
+ if (ADHOC_ON(pAd))
+ ActHeaderInit(pAd, &Frame.Hdr, pAd->MacTab.Content[pInfo->Wcid].Addr, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
+ else
+#ifdef QOS_DLS_SUPPORT
+ if (pAd->MacTab.Content[pInfo->Wcid].ValidAsDls)
+ ActHeaderInit(pAd, &Frame.Hdr, pAd->MacTab.Content[pInfo->Wcid].Addr, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
+ else
+#endif // QOS_DLS_SUPPORT //
+ ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->MacTab.Content[pInfo->Wcid].Addr);
+ }
#endif // CONFIG_STA_SUPPORT //
Frame.Category = CATEGORY_BA;
Frame.Action = DELBA;
@@ -246,6 +271,7 @@ VOID MlmeDELBAAction(
DBGPRINT(RT_DEBUG_TRACE, ("BA - MlmeDELBAAction() . 3 DELBA sent. Initiator(%d)\n", pInfo->Initiator));
}
}
+#endif // DOT11_N_SUPPORT //
VOID MlmeQOSAction(
IN PRTMP_ADAPTER pAd,
@@ -306,6 +332,7 @@ VOID PeerDLSAction(
}
#endif // QOS_DLS_SUPPORT //
+#ifdef DOT11_N_SUPPORT
VOID PeerBAAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
@@ -582,6 +609,7 @@ VOID ChannelSwitchAction(
}
}
#endif // DOT11N_DRAFT3 //
+#endif // DOT11_N_SUPPORT //
VOID PeerPublicAction(
IN PRTMP_ADAPTER pAd,
@@ -666,6 +694,7 @@ VOID PeerRMAction(
return;
}
+#ifdef DOT11_N_SUPPORT
static VOID respond_ht_information_exchange_action(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
@@ -694,7 +723,12 @@ static VOID respond_ht_information_exchange_action(
// 2-1. Prepare ADDBA Response frame.
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ActHeaderInit(pAd, &HTINFOframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr);
+ {
+ if (ADHOC_ON(pAd))
+ ActHeaderInit(pAd, &HTINFOframe.Hdr, pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
+ else
+ ActHeaderInit(pAd, &HTINFOframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr);
+ }
#endif // CONFIG_STA_SUPPORT //
HTINFOframe.Category = CATEGORY_HT;
@@ -769,6 +803,18 @@ VOID PeerHTAction(
{
case NOTIFY_BW_ACTION:
DBGPRINT(RT_DEBUG_TRACE,("ACTION - HT Notify Channel bandwidth action----> \n"));
+#ifdef CONFIG_STA_SUPPORT
+ if(pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE)
+ {
+ // Note, this is to patch DIR-1353 AP. When the AP set to Wep, it will use legacy mode. But AP still keeps
+ // sending BW_Notify Action frame, and cause us to linkup and linkdown.
+ // In legacy mode, don't need to parse HT action frame.
+ DBGPRINT(RT_DEBUG_TRACE,("ACTION -Ignore HT Notify Channel BW when link as legacy mode. BW = %d---> \n",
+ Elem->Msg[LENGTH_802_11+2] ));
+ break;
+ }
+#endif // CONFIG_STA_SUPPORT //
+
if (Elem->Msg[LENGTH_802_11+2] == 0) // 7.4.8.2. if value is 1, keep the same as supported channel bandwidth.
pAd->MacTab.Content[Elem->Wcid].HTPhyMode.field.BW = 0;
@@ -809,8 +855,7 @@ VOID PeerHTAction(
respond_ht_information_exchange_action(pAd, Elem);
}
}
- break;
-
+ break;
}
}
@@ -892,7 +937,7 @@ VOID SendRefreshBAR(
return;
}
- Sequence = pEntry->TxSeq[TID];
+ Sequence = pEntry->TxSeq[TID];
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
BarHeaderInit(pAd, &FrameBar, pEntry->Addr, pAd->CurrentAddress);
@@ -908,13 +953,12 @@ VOID SendRefreshBAR(
if (1) // Now we always send BAR.
{
MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
- DBGPRINT_RAW(RT_DEBUG_INFO, ("BA --> NoBADataCountDown [= %d]!!!\n", pEntry->NoBADataCountDown));
- DBGPRINT(RT_DEBUG_INFO,("BA - Send BAR, Seq = 0x%x \n", Sequence));
}
MlmeFreeMemory(pAd, pOutBuffer);
}
}
}
+#endif // DOT11_N_SUPPORT //
VOID ActHeaderInit(
IN PRTMP_ADAPTER pAd,
diff --git a/rt2860-1.7.0.0/common/ba_action.c b/rt2860-source-1.8.0.0/common/ba_action.c
similarity index 97%
copy from rt2860-1.7.0.0/common/ba_action.c
copy to rt2860-source-1.8.0.0/common/ba_action.c
index acfddfe..28a6e79 100644
--- a/rt2860-1.7.0.0/common/ba_action.c
+++ b/rt2860-source-1.8.0.0/common/ba_action.c
@@ -25,13 +25,14 @@
*************************************************************************
*/
+#ifdef DOT11_N_SUPPORT
+
#include "rt_config.h"
#define BA_ORI_INIT_SEQ (pEntry->TxSeq[TID]) //1 // inital sequence number of BA session
-#define MAX_TID_NUM (15)
#define ORI_SESSION_MAX_RETRY 8
#define ORI_BA_SESSION_TIMEOUT (2000) // ms
#define REC_BA_SESSION_IDLE_TIMEOUT (1000) // ms
@@ -437,9 +438,9 @@ void ba_flush_reordering_timeout_mpdus(
&&(pBAEntry->list.qlen > 1)
)
{
- printk("timeout[%d] (%lx-%lx = %d > %d): %x, flush all!\n ", pBAEntry->list.qlen, Now32, (pBAEntry->LastIndSeqAtTimer),
+ DBGPRINT(RT_DEBUG_TRACE,("timeout[%d] (%08lx-%08lx = %d > %d): %x, flush all!\n ", pBAEntry->list.qlen, Now32, (pBAEntry->LastIndSeqAtTimer),
(int)((long) Now32 - (long)(pBAEntry->LastIndSeqAtTimer)), MAX_REORDERING_PACKET_TIMEOUT,
- pBAEntry->LastIndSeq);
+ pBAEntry->LastIndSeq));
ba_refresh_reordering_mpdus(pAd, pBAEntry);
pBAEntry->LastIndSeqAtTimer = Now32;
}
@@ -448,9 +449,9 @@ void ba_flush_reordering_timeout_mpdus(
&& (pBAEntry->list.qlen > 0)
)
{
- printk("timeout[%d] (%lx-%lx = %d > %d): %x, ", pBAEntry->list.qlen, Now32, (pBAEntry->LastIndSeqAtTimer),
- (int)((long) Now32 - (long)(pBAEntry->LastIndSeqAtTimer)), REORDERING_PACKET_TIMEOUT,
- pBAEntry->LastIndSeq);
+// printk("timeout[%d] (%lx-%lx = %d > %d): %x, ", pBAEntry->list.qlen, Now32, (pBAEntry->LastIndSeqAtTimer),
+// (int)((long) Now32 - (long)(pBAEntry->LastIndSeqAtTimer)), REORDERING_PACKET_TIMEOUT,
+// pBAEntry->LastIndSeq);
//
// force LastIndSeq to shift to LastIndSeq+1
//
@@ -467,7 +468,7 @@ void ba_flush_reordering_timeout_mpdus(
pBAEntry->LastIndSeq = Sequence;
}
- printk("%x, flush one!\n", pBAEntry->LastIndSeq);
+ //printk("%x, flush one!\n", pBAEntry->LastIndSeq);
}
#if 0
@@ -476,9 +477,9 @@ void ba_flush_reordering_timeout_mpdus(
(pBAEntry->list.qlen > 1))
)
{
- printk("timeout[%d] (%lx-%lx = %d > %d): %x\n ", pBAEntry->list.qlen, Now32, (pBAEntry->LastIndSeqAtTimer),
+ DBGPRINT(RT_DEBUG_TRACE,("timeout[%d] (%lx-%lx = %d > %d): %x\n ", pBAEntry->list.qlen, Now32, (pBAEntry->LastIndSeqAtTimer),
(int)((long) Now32 - (long)(pBAEntry->LastIndSeqAtTimer)), MAX_REORDERING_PACKET_TIMEOUT,
- pBAEntry->LastIndSeq);
+ pBAEntry->LastIndSeq));
ba_refresh_reordering_mpdus(pAd, pBAEntry);
pBAEntry->LastIndSeqAtTimer = Now32;
}
@@ -513,6 +514,8 @@ VOID BAOriSessionSetUp(
if ((pEntry->BADeclineBitmap & (1<<TID)) && (isForced == FALSE))
{
+ // try again after 3 secs
+ DelayTime = 3000;
// printk("DeCline BA from Peer\n");
// return;
}
@@ -607,6 +610,7 @@ VOID BAOriSessionAdd(
return;
}
+
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
BarHeaderInit(pAd, &FrameBar, pAd->MacTab.Content[pBAEntry->Wcid].Addr, pAd->CurrentAddress);
@@ -705,6 +709,8 @@ BOOLEAN BARecSessionAdd(
pEntry->RXBAbitmap |= (1<<TID);
pEntry->BARecWcidArray[TID] = Idx;
+ pEntry->BADeclineBitmap &= ~(1<<TID);
+
// Set BA session mask in WCID table.
RT28XX_ADD_BA_SESSION_TO_ASIC(pAd, pEntry->Aid, TID);
@@ -1040,7 +1046,7 @@ VOID BASessionTearDownALL(
{
int i;
- for (i=0; i<=MAX_TID_NUM; i++)
+ for (i=0; i<NUM_OF_TID; i++)
{
BAOriSessionTearDown(pAd, Wcid, i, FALSE, FALSE);
BARecSessionTearDown(pAd, Wcid, i, FALSE);
@@ -1226,7 +1232,17 @@ VOID PeerAddBAReqAction(
// 2-1. Prepare ADDBA Response frame.
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ActHeaderInit(pAd, &ADDframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr);
+ {
+ if (ADHOC_ON(pAd))
+ ActHeaderInit(pAd, &ADDframe.Hdr, pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
+ else
+#ifdef QOS_DLS_SUPPORT
+ if (pAd->MacTab.Content[Elem->Wcid].ValidAsDls)
+ ActHeaderInit(pAd, &ADDframe.Hdr, pAddr, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
+ else
+#endif // QOS_DLS_SUPPORT //
+ ActHeaderInit(pAd, &ADDframe.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAddr);
+ }
#endif // CONFIG_STA_SUPPORT //
ADDframe.Category = CATEGORY_BA;
ADDframe.Action = ADDBA_RESP;
@@ -1726,7 +1742,7 @@ VOID Indicate_AMPDU_Packet(
//
else if (Sequence == pBAEntry->LastIndSeq)
{
- DBGPRINT(RT_DEBUG_INFO, ("Duplicated receive pHeader->Sequence = 0x%x ,LastIndSeq = 0x%x. drop \n" , Sequence, pBAEntry->LastIndSeq));
+
// drop and release packet
pBAEntry->nDropPacket++;
RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE);
@@ -1736,7 +1752,7 @@ VOID Indicate_AMPDU_Packet(
//
else if (SEQ_SMALLER(Sequence, pBAEntry->LastIndSeq, MAXSEQ))
{
- DBGPRINT(RT_DEBUG_INFO, ("Rcv old pHeader->Sequence = 0x%x ,LastIndSeq = 0x%x. drop \n" , Sequence, pBAEntry->LastIndSeq));
+
// drop and release packet
pBAEntry->nDropPacket++;
RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE);
@@ -1759,8 +1775,7 @@ VOID Indicate_AMPDU_Packet(
#else
LONG WinStartSeq, TmpSeq;
- DBGPRINT(RT_DEBUG_INFO, ("%lu: Refresh. Sequence=0x%x, #RxPkt = %d. LastIndSeq = 0x%x.\n", Now32, Sequence, pBAEntry->list.qlen, pBAEntry->LastIndSeq));
-
+
TmpSeq = Sequence - (pBAEntry->BAWinSize) -1;
if (TmpSeq < 0)
{
@@ -1782,3 +1797,6 @@ VOID Indicate_AMPDU_Packet(
#endif
}
}
+
+#endif // DOT11_N_SUPPORT //
+
diff --git a/rt2860-1.7.0.0/common/cmm_data.c b/rt2860-source-1.8.0.0/common/cmm_data.c
similarity index 93%
copy from rt2860-1.7.0.0/common/cmm_data.c
copy to rt2860-source-1.8.0.0/common/cmm_data.c
index d13c867..4262d37 100644
--- a/rt2860-1.7.0.0/common/cmm_data.c
+++ b/rt2860-source-1.8.0.0/common/cmm_data.c
@@ -198,7 +198,7 @@ NDIS_STATUS MiniportMMRequestUnlock(
TXWI_STRUC TXWI;
ULONG SW_TX_IDX;
PTXD_STRUC pTxD;
-
+
QueIdx = 3;
ASSERT(Length <= MGMT_DMA_BUFFER_SIZE);
@@ -237,7 +237,7 @@ NDIS_STATUS MiniportMMRequestUnlock(
DBGPRINT(RT_DEBUG_WARN, ("MiniportMMRequest (error:: can't allocate NDIS PACKET)\n"));
break;
}
-
+
Status = MlmeHardTransmit(pAd, QueIdx, pPacket);
if (Status != NDIS_STATUS_SUCCESS)
RTMPFreeNdisPacket(pAd, pPacket);
@@ -282,14 +282,10 @@ NDIS_STATUS MiniportMMRequestUnlock(
*/
NDIS_STATUS MlmeHardTransmit(
IN PRTMP_ADAPTER pAd,
- IN UCHAR QueIdx,
+ IN UCHAR QueIdx,
IN PNDIS_PACKET pPacket)
{
- if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)
-#ifdef CARRIER_DETECTION_SUPPORT
- ||(isCarrierDetectExist(pAd) == TRUE)
-#endif // CARRIER_DETECTION_SUPPORT //
- )
+ if (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)
{
return NDIS_STATUS_FAILURE;
}
@@ -321,12 +317,14 @@ NDIS_STATUS MlmeHardTransmitTxRing(
PHEADER_802_11 pHeader_802_11;
BOOLEAN bAckRequired, bInsertTimestamp;
ULONG SrcBufPA;
- UCHAR MlmeRate;
+ UCHAR MlmeRate;
ULONG SwIdx = pAd->TxRing[QueIdx].TxCpuIdx;
PTXWI_STRUC pFirstTxWI;
- ULONG FreeNum;
+ ULONG FreeNum;
+ MAC_TABLE_ENTRY *pMacEntry = NULL;
+
- RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen);
+ RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen);
if (pSrcBufVA == NULL)
{
@@ -359,7 +357,7 @@ NDIS_STATUS MlmeHardTransmitTxRing(
if (pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket)
{
printk("MlmeHardTransmit Error\n");
- return NDIS_STATUS_FAILURE;
+ return NDIS_STATUS_FAILURE;
}
@@ -367,7 +365,7 @@ NDIS_STATUS MlmeHardTransmitTxRing(
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// outgoing frame always wakeup PHY to prevent frame lost
- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
AsicForceWakeup(pAd, TRUE);
}
#endif // CONFIG_STA_SUPPORT //
@@ -382,7 +380,13 @@ NDIS_STATUS MlmeHardTransmitTxRing(
{
MlmeRate = pAd->CommonCfg.MlmeRate;
}
-
+
+ if ((pHeader_802_11->FC.Type == BTYPE_DATA) &&
+ (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL))
+ {
+ pMacEntry = MacTableLookup(pAd, pHeader_802_11->Addr1);
+ }
+
// Verify Mlme rate for a / g bands.
if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band
MlmeRate = RATE_6;
@@ -392,14 +396,12 @@ NDIS_STATUS MlmeHardTransmitTxRing(
// Snice it's been set to 0 while on MgtMacHeaderInit
// By the way this will cause frame to be send on PWR_SAVE failed.
//
- // pHeader_802_11->FC.PwrMgmt = 0; // (pAd->StaCfg.Psm == PWR_SAVE);
//
// In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame
#ifdef CONFIG_STA_SUPPORT
// Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD
- if ((pHeader_802_11->FC.Type != BTYPE_DATA) || (pAd->OpMode == OPMODE_AP))
+ if (pHeader_802_11->FC.Type != BTYPE_DATA)
{
-#endif // CONFIG_STA_SUPPORT //
if ((pHeader_802_11->FC.SubType == SUBTYPE_PROBE_REQ) || !(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable))
{
pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE;
@@ -408,7 +410,6 @@ NDIS_STATUS MlmeHardTransmitTxRing(
{
pHeader_802_11->FC.PwrMgmt = pAd->CommonCfg.bAPSDForcePowerSave;
}
-#ifdef CONFIG_STA_SUPPORT
}
#endif // CONFIG_STA_SUPPORT //
@@ -444,7 +445,7 @@ NDIS_STATUS MlmeHardTransmitTxRing(
&& (pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE))
{
DBGPRINT(RT_DEBUG_ERROR,("MlmeHardTransmit --> radar detect not in normal mode !!!\n"));
- return (NDIS_STATUS_FAILURE);
+ return (NDIS_STATUS_FAILURE);
}
#ifdef RT_BIG_ENDIAN
@@ -460,10 +461,23 @@ NDIS_STATUS MlmeHardTransmitTxRing(
// For inter-frame gap, the number is for this frame and next frame
// For MLME rate, we will fix as 2Mb to match other vendor's implement
- // management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not.
+// management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not.
// Only beacon use Nseq=TRUE. So here we use Nseq=FALSE.
- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE,
+ if (pMacEntry == NULL)
+ {
+ RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE,
0, RESERVED_WCID, (SrcBufLen - TXWI_SIZE), PID_MGMT, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit);
+ }
+ else
+ {
+ RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE,
+ bInsertTimestamp, FALSE, bAckRequired, FALSE,
+ 0, pMacEntry->Aid, (SrcBufLen - TXWI_SIZE),
+ pMacEntry->MaxHTPhyMode.field.MCS, 0,
+ (UCHAR)pMacEntry->MaxHTPhyMode.field.MCS,
+ IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode);
+ }
+
pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket = pPacket;
pAd->TxRing[QueIdx].Cell[SwIdx].pNextNdisPacket = NULL;
#ifdef RT_BIG_ENDIAN
@@ -510,9 +524,10 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
BOOLEAN bAckRequired, bInsertTimestamp;
UCHAR MlmeRate;
PTXWI_STRUC pFirstTxWI;
+ MAC_TABLE_ENTRY *pMacEntry = NULL;
RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen);
- RTMP_SEM_LOCK(&pAd->MgmtRingLock);
+ RTMP_SEM_LOCK(&pAd->MgmtRingLock);
if (pSrcBufVA == NULL)
@@ -524,6 +539,7 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
+ // outgoing frame always wakeup PHY to prevent frame lost
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
AsicForceWakeup(pAd, TRUE);
}
@@ -540,17 +556,26 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
{
MlmeRate = pAd->CommonCfg.MlmeRate;
}
-
+
// Verify Mlme rate for a / g bands.
if ((pAd->LatchRfRegs.Channel > 14) && (MlmeRate < RATE_6)) // 11A band
MlmeRate = RATE_6;
+ if ((pHeader_802_11->FC.Type == BTYPE_DATA) &&
+ (pHeader_802_11->FC.SubType == SUBTYPE_QOS_NULL))
+ {
+ pMacEntry = MacTableLookup(pAd, pHeader_802_11->Addr1);
+ }
+
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// Fixed W52 with Activity scan issue in ABG_MIXED and ABGN_MIXED mode.
- if (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED ||
- pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED)
+ if (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED
+#ifdef DOT11_N_SUPPORT
+ || pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED
+#endif // DOT11_N_SUPPORT //
+ )
{
if (pAd->LatchRfRegs.Channel > 14)
pAd->CommonCfg.MlmeTransmit.field.MODE = 1;
@@ -570,25 +595,26 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
// In WMM-UAPSD, mlme frame should be set psm as power saving but probe request frame
#ifdef CONFIG_STA_SUPPORT
// Data-Null packets alse pass through MMRequest in RT2860, however, we hope control the psm bit to pass APSD
- if (((pHeader_802_11->FC.Type != BTYPE_DATA) && (pHeader_802_11->FC.Type != BTYPE_CNTL)) || (pAd->OpMode == OPMODE_AP))
+ if ((pHeader_802_11->FC.Type != BTYPE_DATA) && (pHeader_802_11->FC.Type != BTYPE_CNTL))
{
-#endif // CONFIG_STA_SUPPORT //
- {
-#ifdef CONFIG_STA_SUPPORT
- if ((pAd->StaCfg.Psm == PWR_SAVE) &&
- (pHeader_802_11->FC.SubType == SUBTYPE_ACTION))
- pHeader_802_11->FC.PwrMgmt = PWR_SAVE;
- else
-#endif // CONFIG_STA_SUPPORT //
+ if ((pAd->StaCfg.Psm == PWR_SAVE) &&
+ (pHeader_802_11->FC.SubType == SUBTYPE_ACTION))
+ pHeader_802_11->FC.PwrMgmt = PWR_SAVE;
+ else
pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE;
- }
-#ifdef CONFIG_STA_SUPPORT
}
#endif // CONFIG_STA_SUPPORT //
bInsertTimestamp = FALSE;
if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL
{
+#ifdef CONFIG_STA_SUPPORT
+ //Set PM bit in ps-poll, to fix WLK 1.2 PowerSaveMode_ext failure issue.
+ if ((pAd->OpMode == OPMODE_STA) && (pHeader_802_11->FC.SubType == SUBTYPE_PS_POLL))
+ {
+ pHeader_802_11->FC.PwrMgmt = PWR_SAVE;
+ }
+#endif // CONFIG_STA_SUPPORT //
bAckRequired = FALSE;
}
else // BTYPE_MGMT or BTYPE_DATA(must be NULL frame)
@@ -609,7 +635,6 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
}
}
-
pHeader_802_11->Sequence = pAd->Sequence++;
if (pAd->Sequence >0xfff)
pAd->Sequence = 0;
@@ -639,9 +664,22 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
// For inter-frame gap, the number is for this frame and next frame
// For MLME rate, we will fix as 2Mb to match other vendor's implement
- // management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not.
- RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE,
+// management frame doesn't need encryption. so use RESERVED_WCID no matter u are sending to specific wcid or not.
+ if (pMacEntry == NULL)
+ {
+ RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE, bInsertTimestamp, FALSE, bAckRequired, FALSE,
0, RESERVED_WCID, (SrcBufLen - TXINFO_SIZE - TXWI_SIZE), PID_MGMT, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit);
+ }
+ else
+ {
+ RTMPWriteTxWI(pAd, pFirstTxWI, FALSE, FALSE,
+ bInsertTimestamp, FALSE, bAckRequired, FALSE,
+ 0, pMacEntry->Aid, (SrcBufLen - TXINFO_SIZE - TXWI_SIZE),
+ pMacEntry->MaxHTPhyMode.field.MCS, 0,
+ (UCHAR)pMacEntry->MaxHTPhyMode.field.MCS,
+ IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode);
+ }
+
#ifdef RT_BIG_ENDIAN
RTMPWIEndianChange((PUCHAR)pFirstTxWI, TYPE_TXWI);
#endif
@@ -725,7 +763,9 @@ static UCHAR TxPktClassification(
UCHAR TxFrameType = TX_UNKOWN_FRAME;
UCHAR Wcid;
MAC_TABLE_ENTRY *pMacEntry = NULL;
+#ifdef DOT11_N_SUPPORT
BOOLEAN bHTRate = FALSE;
+#endif // DOT11_N_SUPPORT //
Wcid = RTMP_GET_PACKET_WCID(pPacket);
if (Wcid == MCAST_WCID)
@@ -736,16 +776,17 @@ static UCHAR TxPktClassification(
// Handle for unicast packets
pMacEntry = &pAd->MacTab.Content[Wcid];
if (RTMP_GET_PACKET_LOWRATE(pPacket))
- { // It's a specific packet need to force low rate, i.e., bDHCPFrame, bEAPOLFrame
+ { // It's a specific packet need to force low rate, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame
TxFrameType = TX_LEGACY_FRAME;
}
+#ifdef DOT11_N_SUPPORT
else if (IS_HT_RATE(pMacEntry))
{ // it's a 11n capable packet
// Depends on HTPhyMode to check if the peer support the HTRate transmission.
// Currently didn't support A-MSDU embedded in A-MPDU
bHTRate = TRUE;
- if (RTMP_GET_PACKET_MOREDATA(pPacket))
+ if (RTMP_GET_PACKET_MOREDATA(pPacket) || (pMacEntry->PsMode == PWR_SAVE))
TxFrameType = TX_LEGACY_FRAME;
#ifdef UAPSD_AP_SUPPORT
else if (RTMP_GET_PACKET_EOSP(pPacket))
@@ -758,6 +799,7 @@ static UCHAR TxPktClassification(
else
TxFrameType = TX_LEGACY_FRAME;
}
+#endif // DOT11_N_SUPPORT //
else
{ // it's a legacy b/g packet.
if ((CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE) && pAd->CommonCfg.bAggregationCapable) &&
@@ -773,7 +815,7 @@ static UCHAR TxPktClassification(
}
// Currently, our fragment only support when a unicast packet send as NOT-ARALINK, NOT-AMSDU and NOT-AMPDU.
- if ((RTMP_GET_PACKET_FRAGMENTS(pPacket) > 1) && (TxFrameType == TX_LEGACY_FRAME) /*&& (bHTRate == FALSE)*/)
+ if ((RTMP_GET_PACKET_FRAGMENTS(pPacket) > 1) && (TxFrameType == TX_LEGACY_FRAME))
TxFrameType = TX_FRAG_FRAME;
return TxFrameType;
@@ -804,11 +846,20 @@ BOOLEAN RTMP_FillTxBlkInfo(
// Default to clear this flag
TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bForceNonQoS);
+
if (pTxBlk->Wcid == MCAST_WCID)
{
pTxBlk->pMacEntry = NULL;
- pTxBlk->pTransmit = &pAd->MacTab.Content[MCAST_WCID].HTPhyMode;
-
+ {
+#ifdef MCAST_RATE_SPECIFIC
+ PUCHAR pDA = GET_OS_PKT_DATAPTR(pPacket);
+ if (((*pDA & 0x01) == 0x01) && (*pDA != 0xff))
+ pTxBlk->pTransmit = &pAd->CommonCfg.MCastPhyMode;
+ else
+#endif // MCAST_RATE_SPECIFIC //
+ pTxBlk->pTransmit = &pAd->MacTab.Content[MCAST_WCID].HTPhyMode;
+ }
+
TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired); // AckRequired = FALSE, when broadcast packet in Adhoc mode.
//TX_BLK_SET_FLAG(pTxBlk, fTX_bForceLowRate);
TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAllowFrag);
@@ -817,6 +868,7 @@ BOOLEAN RTMP_FillTxBlkInfo(
{
TX_BLK_SET_FLAG(pTxBlk, fTX_bMoreData);
}
+
}
else
{
@@ -825,19 +877,22 @@ BOOLEAN RTMP_FillTxBlkInfo(
pMacEntry = pTxBlk->pMacEntry;
+
// For all unicast packets, need Ack unless the Ack Policy is not set as NORMAL_ACK.
if (pAd->CommonCfg.AckPolicy[pTxBlk->QueIdx] != NORMAL_ACK)
TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bAckRequired);
else
TX_BLK_SET_FLAG(pTxBlk, fTX_bAckRequired);
+
{
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
+
// If support WMM, enable it.
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))
- TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM);
+ TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM);
}
#endif // CONFIG_STA_SUPPORT //
}
@@ -846,9 +901,9 @@ BOOLEAN RTMP_FillTxBlkInfo(
{
if ( (RTMP_GET_PACKET_LOWRATE(pPacket)) ||
((pAd->OpMode == OPMODE_AP) && (pMacEntry->MaxHTPhyMode.field.MODE == MODE_CCK) && (pMacEntry->MaxHTPhyMode.field.MCS == RATE_1)))
- { // Specific packet, i.e., bDHCPFrame, bEAPOLFrame, need force low rate.
+ { // Specific packet, i.e., bDHCPFrame, bEAPOLFrame, bWAIFrame, need force low rate.
pTxBlk->pTransmit = &pAd->MacTab.Content[MCAST_WCID].HTPhyMode;
-
+#ifdef DOT11_N_SUPPORT
// Modify the WMM bit for ICV issue. If we have a packet with EOSP field need to set as 1, how to handle it???
if (IS_HT_STA(pTxBlk->pMacEntry) &&
(CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_RALINK_CHIPSET)) &&
@@ -857,13 +912,16 @@ BOOLEAN RTMP_FillTxBlkInfo(
TX_BLK_CLEAR_FLAG(pTxBlk, fTX_bWMM);
TX_BLK_SET_FLAG(pTxBlk, fTX_bForceNonQoS);
}
+#endif // DOT11_N_SUPPORT //
}
+#ifdef DOT11_N_SUPPORT
if ( (IS_HT_RATE(pMacEntry) == FALSE) &&
(CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE)))
{ // Currently piggy-back only support when peer is operate in b/g mode.
TX_BLK_SET_FLAG(pTxBlk, fTX_bPiggyBack);
}
+#endif // DOT11_N_SUPPORT //
if (RTMP_GET_PACKET_MOREDATA(pPacket))
{
@@ -902,7 +960,9 @@ BOOLEAN CanDoAggregateTransmit(
if (RTMP_GET_PACKET_WCID(pPacket) == MCAST_WCID)
return FALSE;
- if (RTMP_GET_PACKET_DHCP(pPacket) || RTMP_GET_PACKET_EAPOL(pPacket))
+ if (RTMP_GET_PACKET_DHCP(pPacket) ||
+ RTMP_GET_PACKET_EAPOL(pPacket) ||
+ RTMP_GET_PACKET_WAI(pPacket))
return FALSE;
if ((pTxBlk->TxFrameType == TX_AMSDU_FRAME) &&
@@ -972,8 +1032,6 @@ VOID RTMPDeQueuePacket(
RtmpDiagStruct *pDiagStruct = &pAd->DiagStruct;
#endif
- DBGPRINT(RT_DEBUG_INFO,("RTMPDeQueuePacket (Tx:%d)--> \n", Max_Tx_Packets));
-
if (QIdx == NUM_OF_TX_RING)
{
@@ -984,8 +1042,7 @@ VOID RTMPDeQueuePacket(
{
sQIdx = eQIdx = QIdx;
}
-
- DBGPRINT(RT_DEBUG_INFO, ("RTMPDeQueuePacket (QueIdx:%d-%d)--> \n", sQIdx, eQIdx));
+
for (QueIdx=sQIdx; QueIdx <= eQIdx; QueIdx++)
{
Count=0;
@@ -1012,7 +1069,6 @@ VOID RTMPDeQueuePacket(
break;
DEQUEUE_LOCK(&pAd->irq_lock, bIntContext, IrqFlags);
-
if (&pAd->TxSwQueue[QueIdx] == NULL)
{
#ifdef DBG_DIAGNOSE
@@ -1069,12 +1125,6 @@ VOID RTMPDeQueuePacket(
if (!hasTxDesc)
{
pAd->PrivateInfo.TxRingFullCnt++;
- DBGPRINT(RT_DEBUG_LOUD, ("TxRing(%d) full, SwQueue Len = %lu, packet required frag =%d!\n",
- QueIdx, pAd->TxSwQueue[QueIdx].Number, RTMP_GET_PACKET_FRAGMENTS(pPacket)));
-#ifdef RT2860
- DBGPRINT(RT_DEBUG_INFO,("DeqPkt -> Not enough free TxD[%d] (TX_CTX_IDX=%u, TxSwFreeIdx=%u)!!!\n",
- QueIdx, pAd->TxRing[QueIdx].TxCpuIdx, pAd->TxRing[QueIdx].TxSwFreeIdx));
-#endif // RT2860 //
DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags);
@@ -1286,13 +1336,16 @@ VOID RTMPWriteTxWI(
pTxWI->NSEQ = NSeq;
// John tune the performace with Intel Client in 20 MHz performance
-
+#ifdef DOT11_N_SUPPORT
BASize = pAd->CommonCfg.TxBASize;
if( BASize >7 )
BASize =7;
-
- pTxWI->BAWinSize = BASize;
+ pTxWI->BAWinSize = BASize;
+ pTxWI->ShortGI = pTransmit->field.ShortGI;
+ pTxWI->STBC = pTransmit->field.STBC;
+#endif // DOT11_N_SUPPORT //
+
pTxWI->WirelessCliID = WCID;
pTxWI->MPDUtotalByteCount = Length;
pTxWI->PacketId = PID;
@@ -1303,33 +1356,31 @@ VOID RTMPWriteTxWI(
if (pTxWI->BW)
pTxWI->BW = (pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth == 0) ? (BW_20) : (pTransmit->field.BW);
#endif // DOT11N_DRAFT3 //
- pTxWI->ShortGI = pTransmit->field.ShortGI;
- pTxWI->STBC = pTransmit->field.STBC;
pTxWI->MCS = pTransmit->field.MCS;
pTxWI->PHYMODE = pTransmit->field.MODE;
pTxWI->CFACK = CfAck;
-
+#ifdef DOT11_N_SUPPORT
if (pMac)
{
- if (pAd->CommonCfg.bMIMOPSEnable)
- {
- if ((pMac->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7))
+ if (pAd->CommonCfg.bMIMOPSEnable)
{
- // Dynamic MIMO Power Save Mode
- pTxWI->MIMOps = 1;
- }
- else if (pMac->MmpsMode == MMPS_STATIC)
- {
- // Static MIMO Power Save Mode
- if (pTransmit->field.MODE >= MODE_HTMIX && pTransmit->field.MCS > 7)
- {
- pTxWI->MCS = 7;
- pTxWI->MIMOps = 0;
+ if ((pMac->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7))
+ {
+ // Dynamic MIMO Power Save Mode
+ pTxWI->MIMOps = 1;
+ }
+ else if (pMac->MmpsMode == MMPS_STATIC)
+ {
+ // Static MIMO Power Save Mode
+ if (pTransmit->field.MODE >= MODE_HTMIX && pTransmit->field.MCS > 7)
+ {
+ pTxWI->MCS = 7;
+ pTxWI->MIMOps = 0;
+ }
}
}
- }
//pTxWI->MIMOps = (pMac->PsMode == PWR_MMPS)? 1:0;
if (pMac->bIAmBadAtheros && (pMac->WepStatus != Ndis802_11WEPDisabled))
{
@@ -1337,9 +1388,10 @@ VOID RTMPWriteTxWI(
}
else
{
- pTxWI->MpduDensity = pMac->MpduDensity;
- }
+ pTxWI->MpduDensity = pMac->MpduDensity;
+ }
}
+#endif // DOT11_N_SUPPORT //
pTxWI->PacketId = pTxWI->MCS;
NdisMoveMemory(pOutTxWI, &TxWI, sizeof(TXWI_STRUC));
@@ -1353,15 +1405,17 @@ VOID RTMPWriteTxWI_Data(
{
HTTRANSMIT_SETTING *pTransmit;
PMAC_TABLE_ENTRY pMacEntry;
+#ifdef DOT11_N_SUPPORT
UCHAR BASize;
- //BOOLEAN bAutoRate;
- //UCHAR fixed_tx_mode;
+#endif // DOT11_N_SUPPORT //
+
ASSERT(pTxWI);
pTransmit = pTxBlk->pTransmit;
pMacEntry = pTxBlk->pMacEntry;
+
//
// Always use Long preamble before verifiation short preamble functionality works well.
// Todo: remove the following line if short preamble functionality works
@@ -1370,24 +1424,9 @@ VOID RTMPWriteTxWI_Data(
NdisZeroMemory(pTxWI, TXWI_SIZE);
pTxWI->FRAG = TX_BLK_TEST_FLAG(pTxBlk, fTX_bAllowFrag);
-
- pTxWI->AMPDU = ((pTxBlk->TxFrameType == TX_AMPDU_FRAME) ? TRUE : FALSE);
pTxWI->ACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bAckRequired);
pTxWI->txop = pTxBlk->FrameGap;
-
- // John tune the performace with Intel Client in 20 MHz performance
- BASize = pAd->CommonCfg.TxBASize;
- if((pTxBlk->TxFrameType == TX_AMPDU_FRAME) && (pMacEntry))
- {
- UCHAR RABAOriIdx = 0; //The RA's BA Originator table index.
-
- RABAOriIdx = pTxBlk->pMacEntry->BAOriWcidArray[pTxBlk->UserPriority];
- BASize = pAd->BATable.BAOriEntry[RABAOriIdx].BAWinSize;
- }
-
- pTxWI->TxBF = pTransmit->field.TxBF;
-
- pTxWI->BAWinSize = BASize;
+
#ifdef CONFIG_STA_SUPPORT
#ifdef QOS_DLS_SUPPORT
if (pMacEntry &&
@@ -1397,22 +1436,40 @@ VOID RTMPWriteTxWI_Data(
else
#endif // QOS_DLS_SUPPORT //
#endif // CONFIG_STA_SUPPORT //
- pTxWI->WirelessCliID = pTxBlk->Wcid;
+ pTxWI->WirelessCliID = pTxBlk->Wcid;
+
pTxWI->MPDUtotalByteCount = pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen;
pTxWI->CFACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bPiggyBack);
// If CCK or OFDM, BW must be 20
pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW);
+#ifdef DOT11_N_SUPPORT
#ifdef DOT11N_DRAFT3
if (pTxWI->BW)
pTxWI->BW = (pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth == 0) ? (BW_20) : (pTransmit->field.BW);
#endif // DOT11N_DRAFT3 //
+ pTxWI->AMPDU = ((pTxBlk->TxFrameType == TX_AMPDU_FRAME) ? TRUE : FALSE);
+
+ // John tune the performace with Intel Client in 20 MHz performance
+ BASize = pAd->CommonCfg.TxBASize;
+ if((pTxBlk->TxFrameType == TX_AMPDU_FRAME) && (pMacEntry))
+ {
+ UCHAR RABAOriIdx = 0; //The RA's BA Originator table index.
+
+ RABAOriIdx = pTxBlk->pMacEntry->BAOriWcidArray[pTxBlk->UserPriority];
+ BASize = pAd->BATable.BAOriEntry[RABAOriIdx].BAWinSize;
+ }
+
+ pTxWI->TxBF = pTransmit->field.TxBF;
+ pTxWI->BAWinSize = BASize;
pTxWI->ShortGI = pTransmit->field.ShortGI;
pTxWI->STBC = pTransmit->field.STBC;
-
+#endif // DOT11_N_SUPPORT //
+
pTxWI->MCS = pTransmit->field.MCS;
pTxWI->PHYMODE = pTransmit->field.MODE;
+#ifdef DOT11_N_SUPPORT
if (pMacEntry)
{
if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7))
@@ -1436,10 +1493,11 @@ VOID RTMPWriteTxWI_Data(
}
else
{
- pTxWI->MpduDensity = pMacEntry->MpduDensity;
- }
+ pTxWI->MpduDensity = pMacEntry->MpduDensity;
+ }
}
-
+#endif // DOT11_N_SUPPORT //
+
#ifdef DBG_DIAGNOSE
if (pTxBlk->QueIdx== 0)
{
@@ -1482,6 +1540,8 @@ VOID RTMPWriteTxWI_Cache(
// set PID for TxRateSwitching
pTxWI->PacketId = pTransmit->field.MCS;
}
+
+#ifdef DOT11_N_SUPPORT
pTxWI->AMPDU = ((pMacEntry->NoBADataCountDown == 0) ? TRUE: FALSE);
pTxWI->MIMOps = 0;
@@ -1490,8 +1550,8 @@ VOID RTMPWriteTxWI_Cache(
pTxWI->BW = (pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth == 0) ? (BW_20) : (pTransmit->field.BW);
#endif // DOT11N_DRAFT3 //
- if (pAd->CommonCfg.bMIMOPSEnable)
- {
+ if (pAd->CommonCfg.bMIMOPSEnable)
+ {
// MIMO Power Save Mode
if ((pMacEntry->MmpsMode == MMPS_DYNAMIC) && (pTransmit->field.MCS > 7))
{
@@ -1507,7 +1567,8 @@ VOID RTMPWriteTxWI_Cache(
pTxWI->MIMOps = 0;
}
}
- }
+ }
+#endif // DOT11_N_SUPPORT //
#ifdef DBG_DIAGNOSE
if (pTxBlk->QueIdx== 0)
@@ -1622,13 +1683,15 @@ BOOLEAN PeerIsAggreOn(
if (pMacEntry != NULL && CLIENT_STATUS_TEST_FLAG(pMacEntry, AFlags))
{
- //if (TxRate >= RATE_6)
+#ifdef DOT11_N_SUPPORT
if (pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
{
return TRUE;
}
+#endif // DOT11_N_SUPPORT //
+
#ifdef AGGREGATION_SUPPORT
- else if (TxRate >= RATE_6 && pAd->CommonCfg.bAggregationCapable && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE))))
+ if (TxRate >= RATE_6 && pAd->CommonCfg.bAggregationCapable && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE))))
{ // legacy Ralink Aggregation support
return TRUE;
}
@@ -1926,7 +1989,7 @@ kick_out:
#endif // RALINK_ATE //
}
- DBGPRINT(RT_DEBUG_LOUD, ("RTMPFreeTXDUponTxDmaDone %d.\n", FREE));
+
return bReschedule;
}
@@ -2075,7 +2138,6 @@ VOID RTMPHandleTBTTInterrupt(
{
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
{
- DBGPRINT(RT_DEBUG_INFO, ("RTMPHandleTBTTInterrupt...\n"));
}
}
}
@@ -2101,6 +2163,8 @@ VOID RTMPHandlePreTBTTInterrupt(
DBGPRINT(RT_DEBUG_TRACE, ("RTMPHandlePreTBTTInterrupt...\n"));
}
}
+
+
}
VOID RTMPHandleRxCoherentInterrupt(
@@ -2271,13 +2335,6 @@ VOID RTMPSuspendMsduTransmission(
{
DBGPRINT(RT_DEBUG_TRACE,("SCANNING, suspend MSDU transmission ...\n"));
-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
- // no carrier detection when scanning
- if (pAd->CommonCfg.CarrierDetect.Enable == TRUE)
- {
- CarrierDetectionStop(pAd);
- }
-#endif
//
// Before BSS_SCAN_IN_PROGRESS, we need to keep Current R66 value and
@@ -2312,19 +2369,9 @@ VOID RTMPSuspendMsduTransmission(
*/
VOID RTMPResumeMsduTransmission(
IN PRTMP_ADAPTER pAd)
-{
+{
DBGPRINT(RT_DEBUG_TRACE,("SCAN done, resume MSDU transmission ...\n"));
-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
- // no carrier detection when scanning
- if (pAd->CommonCfg.CarrierDetect.Enable == TRUE)
- {
- if (isCarrierDetectExist(pAd))
- CarrierDetectionStart(pAd, 0);
- else
- CarrierDetectionStart(pAd, 1);
- }
-#endif
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, pAd->BbpTuning.R66CurrentValue);
@@ -2485,56 +2532,6 @@ MAC_TABLE_ENTRY *MacTableLookup(
return pEntry;
}
-
-/*
- ==========================================================================
- Description:
- This routine reset the entire MAC table. All packets pending in
- the power-saving queues are freed here.
- ==========================================================================
- */
-VOID STAMacTableReset(
- IN PRTMP_ADAPTER pAd)
-{
- int i;
- USHORT Reason;
-
- DBGPRINT(RT_DEBUG_TRACE, ("STAMacTableReset\n"));
- NdisAcquireSpinLock(&pAd->MacTabLock);
-
- for (i=1; i<MAX_LEN_OF_MAC_TABLE; i++)
- {
- Reason = MAC_WCID_BASE + (i* HW_WCID_ENTRY_SIZE);
-
-#ifdef RT2860
- RTMP_IO_WRITE32(pAd, Reason, 0xffffffff);
- RTMP_IO_WRITE32(pAd, Reason+4, 0xffff);
-#endif // RT2860 //
-
- if (pAd->MacTab.Content[i].ValidAsCLI == TRUE)
- {
-
- // free resources of BA
- BASessionTearDownALL(pAd, i);
-
- pAd->MacTab.Content[i].ValidAsCLI = FALSE;
-
- Reason = MAC_WCID_BASE + (i* HW_WCID_ENTRY_SIZE);
-
-#ifdef RT2860
- RTMP_IO_WRITE32(pAd, Reason, 0xffffffff);
- RTMP_IO_WRITE32(pAd, Reason+4, 0xffff);
-#endif // RT2860 //
- }
-
- }
-
- NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE));
-
- NdisReleaseSpinLock(&pAd->MacTabLock);
-}
-
-
MAC_TABLE_ENTRY *MacTableInsertEntry(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pAddr,
@@ -2650,6 +2647,17 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(
pEntry->GTKState = REKEY_NEGOTIATING;
pEntry->PairwiseKey.KeyLen = 0;
pEntry->PairwiseKey.CipherAlg = CIPHER_NONE;
+#ifdef CONFIG_STA_SUPPORT
+ if ((pAd->OpMode == OPMODE_STA) &&
+ (pAd->StaCfg.BssType == BSS_ADHOC))
+ pEntry->PortSecured = WPA_802_1X_PORT_SECURED;
+ else
+#ifdef QOS_DLS_SUPPORT
+ if (pEntry->ValidAsDls == TRUE)
+ pEntry->PortSecured = WPA_802_1X_PORT_SECURED;
+ else
+#endif //QOS_DLS_SUPPORT
+#endif // CONFIG_STA_SUPPORT //
pEntry->PortSecured = WPA_802_1X_PORT_NOT_SECURED;
pEntry->PMKID_CacheIdx = ENTRY_NOT_FOUND;
COPY_MAC_ADDR(pEntry->Addr, pAddr);
@@ -2660,6 +2668,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(
pEntry->PsMode = PWR_ACTIVE;
pEntry->PsQIdleCount = 0;
pEntry->NoDataIdleCount = 0;
+ pEntry->ContinueTxFailCnt = 0;
InitializeQueueHeader(&pEntry->PsQueue);
@@ -2732,8 +2741,10 @@ BOOLEAN MacTableDeleteEntry(
// Delete this entry from ASIC on-chip WCID Table
RT28XX_STA_ENTRY_MAC_RESET(pAd, wcid);
+#ifdef DOT11_N_SUPPORT
// free resources of BA
BASessionTearDownALL(pAd, pEntry->Aid);
+#endif // DOT11_N_SUPPORT //
pPrevEntry = NULL;
@@ -2766,11 +2777,11 @@ BOOLEAN MacTableDeleteEntry(
RT28XX_STA_ENTRY_KEY_DEL(pAd, BSS0, wcid);
- if (pEntry->EnqueueEapolStartTimerRunning != EAPOL_START_DISABLE)
- {
- RTMPCancelTimer(&pEntry->EnqueueStartForPSKTimer, &Cancelled);
- pEntry->EnqueueEapolStartTimerRunning = EAPOL_START_DISABLE;
- }
+ if (pEntry->EnqueueEapolStartTimerRunning != EAPOL_START_DISABLE)
+ {
+ RTMPCancelTimer(&pEntry->EnqueueStartForPSKTimer, &Cancelled);
+ pEntry->EnqueueEapolStartTimerRunning = EAPOL_START_DISABLE;
+ }
NdisZeroMemory(pEntry, sizeof(MAC_TABLE_ENTRY));
@@ -2788,8 +2799,10 @@ BOOLEAN MacTableDeleteEntry(
//Reset operating mode when no Sta.
if (pAd->MacTab.Size == 0)
{
+#ifdef DOT11_N_SUPPORT
pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode = 0;
- AsicUpdateProtect(pAd, pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode, (ALLN_SETPROTECT), TRUE, pAd->MacTab.fAnyStationNonGF);
+#endif // DOT11_N_SUPPORT //
+ AsicUpdateProtect(pAd, 0 /*pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode*/, (ALLN_SETPROTECT), TRUE, 0 /*pAd->MacTab.fAnyStationNonGF*/);
}
return TRUE;
@@ -2799,6 +2812,46 @@ BOOLEAN MacTableDeleteEntry(
/*
==========================================================================
Description:
+ This routine reset the entire MAC table. All packets pending in
+ the power-saving queues are freed here.
+ ==========================================================================
+ */
+VOID MacTableReset(
+ IN PRTMP_ADAPTER pAd)
+{
+ int i;
+
+ DBGPRINT(RT_DEBUG_TRACE, ("MacTableReset\n"));
+ //NdisAcquireSpinLock(&pAd->MacTabLock);
+
+ for (i=1; i<MAX_LEN_OF_MAC_TABLE; i++)
+ {
+#ifdef RT2860
+ RT28XX_STA_ENTRY_MAC_RESET(pAd, i);
+#endif // RT2860 //
+ if (pAd->MacTab.Content[i].ValidAsCLI == TRUE)
+ {
+
+#ifdef DOT11_N_SUPPORT
+ // free resources of BA
+ BASessionTearDownALL(pAd, i);
+#endif // DOT11_N_SUPPORT //
+
+ pAd->MacTab.Content[i].ValidAsCLI = FALSE;
+
+
+
+
+ //AsicDelWcidTab(pAd, i);
+ }
+ }
+
+ return;
+}
+
+/*
+ ==========================================================================
+ Description:
IRQL = DISPATCH_LEVEL
@@ -2966,7 +3019,7 @@ BOOLEAN RTMPCheckEtherType(
*/
if (pSrcBuf[0] == 0xAA && pSrcBuf[1] == 0xAA && pSrcBuf[2] == 0x03)
{
- Sniff2BytesFromNdisBuffer(pSrcBuf, 6, &Byte0, &Byte0);
+ Sniff2BytesFromNdisBuffer(pSrcBuf, 6, &Byte0, &Byte1);
RTMP_SET_PACKET_LLCSNAP(pPacket, 1);
TypeLen = (USHORT)((Byte0 << 8) + Byte1);
pSrcBuf += 8; // Skip this LLC/SNAP header
@@ -3123,19 +3176,22 @@ VOID CmmRxnonRalinkFrameIndicate(
IN RX_BLK *pRxBlk,
IN UCHAR FromWhichBSSID)
{
-
+#ifdef DOT11_N_SUPPORT
if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) && (pAd->CommonCfg.bDisableReordering == 0))
{
Indicate_AMPDU_Packet(pAd, pRxBlk, FromWhichBSSID);
}
else
+#endif // DOT11_N_SUPPORT //
{
+#ifdef DOT11_N_SUPPORT
if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU))
{
// handle A-MSDU
Indicate_AMSDU_Packet(pAd, pRxBlk, FromWhichBSSID);
}
else
+#endif // DOT11_N_SUPPORT //
{
Indicate_Legacy_Packet(pAd, pRxBlk, FromWhichBSSID);
}
diff --git a/rt2860-1.7.0.0/common/cmm_data_2860.c b/rt2860-source-1.8.0.0/common/cmm_data_2860.c
similarity index 96%
copy from rt2860-1.7.0.0/common/cmm_data_2860.c
copy to rt2860-source-1.8.0.0/common/cmm_data_2860.c
index a04021d..2c3c0a3 100644
--- a/rt2860-1.7.0.0/common/cmm_data_2860.c
+++ b/rt2860-source-1.8.0.0/common/cmm_data_2860.c
@@ -59,7 +59,7 @@ USHORT RtmpPCI_WriteTxResource(
// copy TXINFO + TXWI + WLAN Header + LLC into DMA Header Buffer
if (pTxBlk->TxFrameType == TX_AMSDU_FRAME)
- {
+ {
hwHeaderLen = pTxBlk->MpduHeaderLen - LENGTH_AMSDU_SUBFRAMEHEAD + pTxBlk->HdrPadLen + LENGTH_AMSDU_SUBFRAMEHEAD;
}
else
@@ -390,7 +390,7 @@ USHORT RtmpPCI_WriteFragTxResource(
pTxD->SDPtr0 = BufBasePaLow;
pTxD->SDLen0 = firstDMALen; // include padding
- pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);;
+ pTxD->SDPtr1 = PCI_MAP_SINGLE(pAd, pTxBlk, 0, 1, PCI_DMA_TODEVICE);
pTxD->SDLen1 = pTxBlk->SrcBufLen;
pTxD->LastSec0 = 0;
pTxD->LastSec1 = 1;
@@ -417,7 +417,7 @@ USHORT RtmpPCI_WriteFragTxResource(
return RetTxIdx;
-}
+}
/*
Must be run in Interrupt context
@@ -587,7 +587,7 @@ NDIS_STATUS RTMPCheckRxError(
if (pHeader == NULL)
return(NDIS_STATUS_SUCCESS);
- return(NDIS_STATUS_FAILURE);
+ return(NDIS_STATUS_FAILURE);
}
return(NDIS_STATUS_SUCCESS);
@@ -776,10 +776,6 @@ VOID RT28xxPciAsicRadioOff(
RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, DmaCfg.word);
}
- // Disable for stability. If PCIE Link Control is modified for advance power save, re-covery this code segment.
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x1280);
- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ);
-
if (Level == DOT11POWERSAVE)
{
AUTO_WAKEUP_STRUC AutoWakeupCfg;
@@ -839,9 +835,7 @@ BOOLEAN RT28xxPciAsicRadioOn(
{
pAd->Mlme.bPsPollTimerRunning = FALSE;
RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled);
- // Need to check bPCIclkOffCommand flag. Because sometimes miss RTMPPCIePowerLinkCtrlRestore function before call this RadioOn from
- // autowakeup interrupt in EeePC.
- if ((Level == GUIRADIO_OFF) || (Level == GUI_IDLE_POWER_SAVE) || (pAd->bPCIclkOffCommand == TRUE))
+ if ((Level == GUIRADIO_OFF) || (Level == GUI_IDLE_POWER_SAVE))
{
DBGPRINT(RT_DEBUG_TRACE, ("RT28xxPciAsicRadioOn ()\n"));
// 1. Set PCI Link Control in Configuration Space.
@@ -851,16 +845,12 @@ BOOLEAN RT28xxPciAsicRadioOn(
}
pAd->bPCIclkOff = FALSE;
- // Disable for stability. If PCIE Link Control is modified for advance power save, re-covery this code segment.
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x1a80);
- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ);
// 2. Send wake up command.
AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x00);
// 2-1. wait command ok.
brv = AsicCheckCommanOk(pAd, PowerWakeCID);
-
if (brv)
{
//RTMP_IO_WRITE32(pAd, INT_MASK_CSR, (DELAYINTMASK|RxINT));
@@ -1003,7 +993,7 @@ VOID RT28xxPciStaAsicSleepThenAutoWakeup(
AUTO_WAKEUP_STRUC AutoWakeupCfg;
// we have decided to SLEEP, so at least do it for a BEACON period.
if (TbttNumToNextWakeUp == 0)
- TbttNumToNextWakeUp = 1;
+ TbttNumToNextWakeUp = 1;
AutoWakeupCfg.word = 0;
RTMP_IO_WRITE32(pAd, AUTO_WAKEUP_CFG, AutoWakeupCfg.word);
@@ -1072,12 +1062,6 @@ VOID RadioOnExec(
RTMPRingCleanUp(pAd, QID_MGMT);
RTMPRingCleanUp(pAd, QID_RX);
-
- // Disable for stability. If PCIE Link Control is modified for advance power save, re-covery this code segment.
- // Turn Off PDB clk
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x1a80);
- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ);
-
// 2. Send wake up command.
AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x02);
// 2-1. wait command ok.
@@ -1115,11 +1099,6 @@ VOID RadioOnExec(
if (pAd->StaCfg.Psm == PWR_ACTIVE)
{
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3);
-
- // Turn clk to 80Mhz.
- // Disable for stability. If PCIE Link Control is modified for advance power save, re-covery this code segment.
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe80);
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ);
}
}
else
@@ -1149,7 +1128,7 @@ VOID RT28xxPciMlmeRadioOn(
RTMPRingCleanUp(pAd, QID_AC_VO);
RTMPRingCleanUp(pAd, QID_HCCA);
RTMPRingCleanUp(pAd, QID_MGMT);
- RTMPRingCleanUp(pAd, QID_RX);
+ RTMPRingCleanUp(pAd, QID_RX);
// Enable Tx/Rx
RTMPEnableRxTx(pAd);
diff --git a/rt2860-1.7.0.0/common/cmm_info.c b/rt2860-source-1.8.0.0/common/cmm_info.c
similarity index 98%
copy from rt2860-1.7.0.0/common/cmm_info.c
copy to rt2860-source-1.8.0.0/common/cmm_info.c
index 3a70151..9e712aa 100644
--- a/rt2860-1.7.0.0/common/cmm_info.c
+++ b/rt2860-source-1.8.0.0/common/cmm_info.c
@@ -63,6 +63,7 @@ INT Show_FragThreshold_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf);
+#ifdef DOT11_N_SUPPORT
INT Show_HtBw_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf);
@@ -102,6 +103,7 @@ INT Show_HtAmsdu_Proc(
INT Show_HtAutoBa_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf);
+#endif // DOT11_N_SUPPORT //
INT Show_CountryRegion_Proc(
IN PRTMP_ADAPTER pAd,
@@ -182,6 +184,7 @@ static struct {
{"BGProtection", Show_BGProtection_Proc},
{"RTSThreshold", Show_RTSThreshold_Proc},
{"FragThreshold", Show_FragThreshold_Proc},
+#ifdef DOT11_N_SUPPORT
{"HtBw", Show_HtBw_Proc},
{"HtMcs", Show_HtMcs_Proc},
{"HtGi", Show_HtGi_Proc},
@@ -192,6 +195,7 @@ static struct {
{"HtRdg", Show_HtRdg_Proc},
{"HtAmsdu", Show_HtAmsdu_Proc},
{"HtAutoBa", Show_HtAutoBa_Proc},
+#endif // DOT11_N_SUPPORT //
{"CountryRegion", Show_CountryRegion_Proc},
{"CountryRegionABand", Show_CountryRegionABand_Proc},
{"CountryCode", Show_CountryCode_Proc},
@@ -355,9 +359,16 @@ INT Set_WirelessMode_Proc(
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
- if (WirelessMode <= PHY_11N_5G)
+ INT MaxPhyMode = PHY_11G;
+
+#ifdef DOT11_N_SUPPORT
+ MaxPhyMode = PHY_11N_5G;
+#endif // DOT11_N_SUPPORT //
+
+ if (WirelessMode <= MaxPhyMode)
{
RTMPSetPhyMode(pAd, WirelessMode);
+#ifdef DOT11_N_SUPPORT
if (WirelessMode >= PHY_11ABGN_MIXED)
{
pAd->CommonCfg.BACapability.field.AutoBA = TRUE;
@@ -368,17 +379,10 @@ INT Set_WirelessMode_Proc(
pAd->CommonCfg.BACapability.field.AutoBA = FALSE;
pAd->CommonCfg.REGBACapability.field.AutoBA = FALSE;
}
-
+#endif // DOT11_N_SUPPORT //
// Set AdhocMode rates
if (pAd->StaCfg.BssType == BSS_ADHOC)
{
- if (WirelessMode == PHY_11B)
- pAd->StaCfg.AdhocMode = 0;
- else if ((WirelessMode == PHY_11BG_MIXED) || (WirelessMode == PHY_11ABG_MIXED))
- pAd->StaCfg.AdhocMode = 1;
- else if ((WirelessMode == PHY_11A) || (WirelessMode == PHY_11G))
- pAd->StaCfg.AdhocMode = 2;
-
MlmeUpdateTxRates(pAd, FALSE, 0);
MakeIbssBeacon(pAd); // re-build BEACON frame
AsicEnableIbssSync(pAd); // copy to on-chip memory
@@ -394,7 +398,9 @@ INT Set_WirelessMode_Proc(
// it is needed to set SSID to take effect
if (success == TRUE)
{
+#ifdef DOT11_N_SUPPORT
SetCommonHT(pAd);
+#endif // DOT11_N_SUPPORT //
DBGPRINT(RT_DEBUG_TRACE, ("Set_WirelessMode_Proc::(=%ld)\n", WirelessMode));
}
else
@@ -432,6 +438,7 @@ INT Set_Channel_Proc(
if (MONITOR_ON(pAd))
{
+#ifdef DOT11_N_SUPPORT
N_ChannelCheck(pAd);
if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED &&
pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40)
@@ -443,6 +450,7 @@ INT Set_Channel_Proc(
pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel));
}
else
+#endif // DOT11_N_SUPPORT //
{
AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
AsicLockChannel(pAd, pAd->CommonCfg.Channel);
@@ -776,7 +784,8 @@ INT Set_IEEE80211H_Proc(
return TRUE;
}
-
+
+
#ifdef DBG
/*
==========================================================================
@@ -857,7 +866,7 @@ INT Show_DescInfo_Proc(
INT Set_ResetStatCounter_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg)
-{
+{
DBGPRINT(RT_DEBUG_TRACE, ("==>Set_ResetStatCounter_Proc\n"));
// add the most up-to-date h/w raw counters into software counters
@@ -866,7 +875,7 @@ INT Set_ResetStatCounter_Proc(
NdisZeroMemory(&pAd->WlanCounters, sizeof(COUNTER_802_11));
NdisZeroMemory(&pAd->Counters8023, sizeof(COUNTER_802_3));
NdisZeroMemory(&pAd->RalinkCounters, sizeof(COUNTER_RALINK));
-
+
return TRUE;
}
@@ -1244,12 +1253,14 @@ VOID RTMPSetPhyMode(
break;
case PHY_11G:
- case PHY_11N_2_4G:
case PHY_11BG_MIXED:
case PHY_11ABG_MIXED:
+#ifdef DOT11_N_SUPPORT
+ case PHY_11N_2_4G:
case PHY_11ABGN_MIXED:
case PHY_11BGN_MIXED:
case PHY_11GN_MIXED:
+#endif // DOT11_N_SUPPORT //
pAd->CommonCfg.SupRate[0] = 0x82; // 1 mbps, in units of 0.5 Mbps, basic rate
pAd->CommonCfg.SupRate[1] = 0x84; // 2 mbps, in units of 0.5 Mbps, basic rate
pAd->CommonCfg.SupRate[2] = 0x8B; // 5.5 mbps, in units of 0.5 Mbps, basic rate
@@ -1279,9 +1290,11 @@ VOID RTMPSetPhyMode(
break;
case PHY_11A:
+#ifdef DOT11_N_SUPPORT
case PHY_11AN_MIXED:
case PHY_11AGN_MIXED:
case PHY_11N_5G:
+#endif // DOT11_N_SUPPORT //
pAd->CommonCfg.SupRate[0] = 0x8C; // 6 mbps, in units of 0.5 Mbps, basic rate
pAd->CommonCfg.SupRate[1] = 0x12; // 9 mbps, in units of 0.5 Mbps
pAd->CommonCfg.SupRate[2] = 0x98; // 12 mbps, in units of 0.5 Mbps, basic rate
@@ -1307,29 +1320,12 @@ VOID RTMPSetPhyMode(
break;
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- UCHAR DesiredMCS = (UCHAR) pAd->StaCfg.DesiredTransmitSetting.field.MCS;
-
- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
- if ((DesiredMCS != MCS_AUTO) &&
- (pAd->StaCfg.BssType == BSS_ADHOC))
- {
- if (pAd->StaCfg.AdhocMode == ADHOC_11B)
- RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[DesiredMCS] * 1000000));
- else
- RTMPSetDesiredRates(pAd, (LONG) (RateIdToMbps[DesiredMCS+4] * 1000000));
- }
- MlmeUpdateTxRates(pAd, FALSE, 0);
- }
-#endif // CONFIG_STA_SUPPORT //
pAd->CommonCfg.BandState = UNKNOWN_BAND;
}
-
+#ifdef DOT11_N_SUPPORT
/*
========================================================================
Routine Description:
@@ -1457,7 +1453,8 @@ VOID RTMPSetHT(
// Turn on BBP 40MHz mode now only as AP .
// Sta can turn on BBP 40MHz after connection with 40MHz AP. Sta only broadcast 40MHz capability before connection.
- if ((pAd->OpMode == OPMODE_AP) || INFRA_ON(pAd))
+ if ((pAd->OpMode == OPMODE_AP) || INFRA_ON(pAd) || ADHOC_ON(pAd)
+ )
{
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
BBPValue &= (~0x18);
@@ -1497,6 +1494,7 @@ VOID RTMPSetHT(
pAd->CommonCfg.DesiredHtPhy.RxSTBC = 0;
}
+
if(pHTPhyMode->SHORTGI == GI_400)
{
pAd->CommonCfg.HtCapability.HtCapInfo.ShortGIfor20 = 1;
@@ -1516,7 +1514,7 @@ VOID RTMPSetHT(
pAd->CommonCfg.HtCapability.ExtHtCapInfo.MCSFeedback = MCSFBK_NONE; //MCSFBK_UNSOLICIT;
pAd->CommonCfg.AddHTInfo.ControlChan = pAd->CommonCfg.Channel;
// 1, the extension channel above the control channel.
-
+
// EDCA parameters used for AP's own transmission
if (pAd->CommonCfg.APEdcaParm.bValid == FALSE)
{
@@ -1550,6 +1548,7 @@ VOID RTMPSetHT(
RTMPSetIndividualHT(pAd, 0);
}
#endif // CONFIG_STA_SUPPORT //
+
}
/*
@@ -1573,7 +1572,8 @@ VOID RTMPSetIndividualHT(
UCHAR DesiredMcs = MCS_AUTO;
do
- {
+ {
+
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
@@ -1712,6 +1712,7 @@ VOID RTMPUpdateHTIE(
DBGPRINT(RT_DEBUG_TRACE,("RTMPUpdateHTIE <== \n"));
}
+#endif // DOT11_N_SUPPORT //
/*
========================================================================
@@ -1779,7 +1780,7 @@ VOID RTMPAddWcidAttributeEntry(
WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE;
#endif // QOS_DLS_SUPPORT //
else
- WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE;
+ WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE;
}
#endif // CONFIG_STA_SUPPORT //
@@ -1863,7 +1864,7 @@ CHAR *GetAuthMode(CHAR auth)
return "WPA1WPA2";
if(auth == Ndis802_11AuthModeWPA1PSKWPA2PSK)
return "WPA1PSKWPA2PSK";
- else
+
return "UNKNOW";
}
@@ -1983,7 +1984,7 @@ VOID RTMPIoctlGetSiteSurvey(
sprintf(msg+strlen(msg),"%-3s", " In");
sprintf(msg+strlen(msg),"\n");
- }
+ }
#ifdef CONFIG_STA_SUPPORT
pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE;
@@ -2013,7 +2014,9 @@ VOID RTMPIoctlGetMacTable(
COPY_MAC_ADDR(MacTab.Entry[MacTab.Num].Addr, &pAd->MacTab.Content[i].Addr);
MacTab.Entry[MacTab.Num].Aid = (UCHAR)pAd->MacTab.Content[i].Aid;
MacTab.Entry[MacTab.Num].Psm = pAd->MacTab.Content[i].PsMode;
+#ifdef DOT11_N_SUPPORT
MacTab.Entry[MacTab.Num].MimoPs = pAd->MacTab.Content[i].MmpsMode;
+#endif // DOT11_N_SUPPORT //
// Fill in RSSI per entry
MacTab.Entry[MacTab.Num].AvgRssi0 = pAd->MacTab.Content[i].RssiSample.AvgRssi0;
@@ -2075,6 +2078,7 @@ VOID RTMPIoctlGetMacTable(
}
#endif // UCOS //
+#ifdef DOT11_N_SUPPORT
INT Set_BASetup_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg)
@@ -2162,7 +2166,7 @@ INT Set_BAOriTearDown_Proc(
char *token, sepValue[] = ":", DASH = '-';
INT i;
MAC_TABLE_ENTRY *pEntry;
-
+
/*
The BAOriTearDown inupt string format should be xx:xx:xx:xx:xx:xx-d,
=>The six 2 digit hex-decimal number previous are the Mac address,
@@ -2175,7 +2179,7 @@ INT Set_BAOriTearDown_Proc(
if ((token != NULL) && (strlen(token)>1))
{
tid = simple_strtol((token+1), 0, 10);
- if (tid > 15)
+ if (tid > NUM_OF_TID)
return FALSE;
*token = '\0';
@@ -2227,7 +2231,7 @@ INT Set_BARecTearDown_Proc(
if ((token != NULL) && (strlen(token)>1))
{
tid = simple_strtol((token+1), 0, 10);
- if (tid > 15)
+ if (tid > NUM_OF_TID)
return FALSE;
*token = '\0';
@@ -2437,7 +2441,7 @@ INT Set_HtHtc_Proc(
if (Value == 0)
pAd->HTCEnable = FALSE;
else if ( Value ==1 )
- pAd->HTCEnable = TRUE;
+ pAd->HTCEnable = TRUE;
else
return FALSE; //Invalid argument
@@ -2497,8 +2501,6 @@ INT Set_HtBaWinSize_Proc(
Value = simple_strtol(arg, 0, 10);
- // for intel IOT
- Value = 64;
if (Value >=1 && Value <= 64)
{
@@ -2531,7 +2533,7 @@ INT Set_HtRdg_Proc(
else if ( Value ==1 )
{
pAd->HTCEnable = TRUE;
- pAd->CommonCfg.bRdg = TRUE;
+ pAd->CommonCfg.bRdg = TRUE;
}
else
return FALSE; //Invalid argument
@@ -2764,11 +2766,10 @@ INT Set_HtMimoPs_Proc(
return TRUE;
}
+#endif // DOT11_N_SUPPORT //
-
-//#endif // UCOS //
-
+#ifdef DOT11_N_SUPPORT
INT SetCommonHT(
IN PRTMP_ADAPTER pAd)
{
@@ -2787,9 +2788,10 @@ INT SetCommonHT(
SetHT.SHORTGI = (UCHAR)pAd->CommonCfg.RegTransmitSetting.field.ShortGI;
RTMPSetHT(pAd, &SetHT);
-
+
return TRUE;
}
+#endif // DOT11_N_SUPPORT //
INT Set_FixedTxMode_Proc(
IN PRTMP_ADAPTER pAd,
@@ -2847,7 +2849,6 @@ INT Set_OpMode_Proc(
#endif // CONFIG_APSTA_MIXED_SUPPORT //
-
/////////////////////////////////////////////////////////////////////////
PCHAR RTMPGetRalinkAuthModeStr(
IN NDIS_802_11_AUTHENTICATION_MODE authMode)
@@ -2871,6 +2872,8 @@ PCHAR RTMPGetRalinkAuthModeStr(
return "WPAPSKWPA2PSK";
case Ndis802_11AuthModeWPA1WPA2:
return "WPA1WPA2";
+ case Ndis802_11AuthModeWPANone:
+ return "WPANONE";
}
}
@@ -2927,7 +2930,7 @@ INT Show_SSID_Proc(
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- sprintf(pBuf, "\t%s/G", pAd->CommonCfg.Ssid);
+ sprintf(pBuf, "\t%s", pAd->CommonCfg.Ssid);
#endif // CONFIG_STA_SUPPORT //
return 0;
}
@@ -2953,6 +2956,7 @@ INT Show_WirelessMode_Proc(
case PHY_11G:
sprintf(pBuf, "\t11G");
break;
+#ifdef DOT11_N_SUPPORT
case PHY_11ABGN_MIXED:
sprintf(pBuf, "\t11A/B/G/N");
break;
@@ -2974,6 +2978,7 @@ INT Show_WirelessMode_Proc(
case PHY_11N_5G:
sprintf(pBuf, "\t11N only with 5G");
break;
+#endif // DOT11_N_SUPPORT //
default:
sprintf(pBuf, "\tUnknow Value(%d)", pAd->CommonCfg.PhyMode);
break;
@@ -3067,6 +3072,7 @@ INT Show_FragThreshold_Proc(
return 0;
}
+#ifdef DOT11_N_SUPPORT
INT Show_HtBw_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf)
@@ -3151,6 +3157,7 @@ INT Show_HtExtcha_Proc(
return 0;
}
+
INT Show_HtMpduDensity_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf)
@@ -3190,6 +3197,7 @@ INT Show_HtAutoBa_Proc(
sprintf(pBuf, "\t%s", pAd->CommonCfg.BACapability.field.AutoBA ? "TRUE":"FALSE");
return 0;
}
+#endif // DOT11_N_SUPPORT //
INT Show_CountryRegion_Proc(
IN PRTMP_ADAPTER pAd,
@@ -3279,7 +3287,7 @@ INT Show_AuthMode_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf)
{
- NDIS_802_11_AUTHENTICATION_MODE AuthMode;
+ NDIS_802_11_AUTHENTICATION_MODE AuthMode = Ndis802_11AuthModeOpen;
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
@@ -3287,7 +3295,7 @@ INT Show_AuthMode_Proc(
#endif // CONFIG_STA_SUPPORT //
if ((AuthMode >= Ndis802_11AuthModeOpen) &&
- (AuthMode < Ndis802_11AuthModeMax))
+ (AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK))
sprintf(pBuf, "\t%s", RTMPGetRalinkAuthModeStr(AuthMode));
else
sprintf(pBuf, "\tUnknow Value(%d)", AuthMode);
@@ -3299,7 +3307,7 @@ INT Show_EncrypType_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf)
{
- NDIS_802_11_WEP_STATUS WepStatus;
+ NDIS_802_11_WEP_STATUS WepStatus = Ndis802_11WEPDisabled;
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
diff --git a/rt2860-1.7.0.0/common/cmm_sanity.c b/rt2860-source-1.8.0.0/common/cmm_sanity.c
similarity index 98%
copy from rt2860-1.7.0.0/common/cmm_sanity.c
copy to rt2860-source-1.8.0.0/common/cmm_sanity.c
index c0cff2c..1c52263 100644
--- a/rt2860-1.7.0.0/common/cmm_sanity.c
+++ b/rt2860-source-1.8.0.0/common/cmm_sanity.c
@@ -80,7 +80,7 @@ BOOLEAN MlmeAddBAReqSanity(
DBGPRINT(RT_DEBUG_TRACE, ("MlmeAddBAReqSanity fail - The peer Mac is not associated yet.\n"));
return FALSE;
}
-
+
if ((pInfo->pAddr[0]&0x01) == 0x01)
{
DBGPRINT(RT_DEBUG_TRACE, ("MlmeAddBAReqSanity fail - broadcast address not support BA\n"));
@@ -497,7 +497,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
{
if (ChannelSanity(pAd, *pChannel) == 0)
{
- DBGPRINT(RT_DEBUG_INFO, ("PeerBeaconAndProbeRspSanity - wrong IE_DS_PARM (ch=%d)\n",*pChannel));
+
return FALSE;
}
}
@@ -569,6 +569,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
*pRalinkIe = 0xf0000000; // Set to non-zero value (can't set bit0-2) to represent this is Ralink Chip. So at linkup, we will set ralinkchip flag.
}
#ifdef CONFIG_STA_SUPPORT
+#ifdef DOT11_N_SUPPORT
// This HT IE is before IEEE draft set HT IE value.2006-09-28 by Jan.
// Other vendors had production before IE_HT_CAP value is assigned. To backward support those old-firmware AP,
@@ -587,6 +588,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
*AddHtInfoLen = SIZE_ADD_HT_INFO_IE;
}
}
+#endif // DOT11_N_SUPPORT //
#endif // CONFIG_STA_SUPPORT //
else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4))
{
@@ -653,8 +655,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
pEdcaParm->Cwmin[QID_AC_VO] = CW_MIN_IN_BITS-2;
pEdcaParm->Cwmax[QID_AC_VO] = CW_MAX_IN_BITS-1;
pEdcaParm->Txop[QID_AC_VO] = 48; // AC_VO: 48*32us ~= 1.5ms
- }
- DBGPRINT(RT_DEBUG_INFO, ("PeerBeaconAndProbeRspSanity - Receive IE_WPA\n"));
+ }
break;
case IE_EXT_SUPP_RATES:
@@ -710,7 +711,6 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2);
*LengthVIE += (pEid->Len + 2);
}
- DBGPRINT(RT_DEBUG_INFO, ("IE_RSN length = %d\n", pEid->Len));
break;
#ifdef CONFIG_STA_SUPPORT
#ifdef EXT_BUILD_CHANNEL_LIST
@@ -721,9 +721,8 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
break;
#endif // EXT_BUILD_CHANNEL_LIST //
#endif // CONFIG_STA_SUPPORT //
-
+
default:
- DBGPRINT(RT_DEBUG_INFO, ("PeerBeaconAndProbeRspSanity - unrecognized EID = %d\n", pEid->Eid));
break;
}
@@ -1175,7 +1174,6 @@ BOOLEAN PeerWpaMessageSanity(
IN PEAPOL_PACKET pMsg,
IN ULONG MsgLen,
IN UCHAR MsgType,
- IN PUCHAR pMIC,
IN MAC_TABLE_ENTRY *pEntry)
{
UCHAR mic[LEN_KEY_DESC_MIC], digest[80], KEYDATA[MAX_LEN_OF_RSNIE];
@@ -1252,6 +1250,10 @@ BOOLEAN PeerWpaMessageSanity(
// 2. Verify MIC except Pairwise Msg1
if (MsgType != EAPOL_PAIR_MSG_1)
{
+ UCHAR rcvd_mic[LEN_KEY_DESC_MIC];
+
+ // Record the received MIC for check later
+ NdisMoveMemory(rcvd_mic, pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC);
NdisZeroMemory(pMsg->KeyDesc.KeyMic, LEN_KEY_DESC_MIC);
if (pEntry->WepStatus == Ndis802_11Encryption2Enabled) // TKIP
@@ -1264,7 +1266,7 @@ BOOLEAN PeerWpaMessageSanity(
NdisMoveMemory(mic, digest, LEN_KEY_DESC_MIC);
}
- if (!NdisEqualMemory(pMIC, mic, LEN_KEY_DESC_MIC))
+ if (!NdisEqualMemory(rcvd_mic, mic, LEN_KEY_DESC_MIC))
{
// send wireless event - for MIC different
if (pAd->CommonCfg.bWirelessEvent)
@@ -1279,7 +1281,7 @@ BOOLEAN PeerWpaMessageSanity(
DBGPRINT(RT_DEBUG_ERROR, ("MIC Different in group msg %d of 2-way handshake!\n", (MsgType - EAPOL_PAIR_MSG_4)));
}
- hex_dump("Received MIC", pMIC, LEN_KEY_DESC_MIC);
+ hex_dump("Received MIC", rcvd_mic, LEN_KEY_DESC_MIC);
hex_dump("Desired MIC", mic, LEN_KEY_DESC_MIC);
return FALSE;
@@ -1325,7 +1327,7 @@ BOOLEAN PeerWpaMessageSanity(
}
else
{
- DBGPRINT(RT_DEBUG_INFO, ("The Key Data Length should be zero !!!\n"));
+
return TRUE;
}
diff --git a/rt2860-1.7.0.0/common/cmm_sync.c b/rt2860-source-1.8.0.0/common/cmm_sync.c
similarity index 95%
copy from rt2860-1.7.0.0/common/cmm_sync.c
copy to rt2860-source-1.8.0.0/common/cmm_sync.c
index 44be0f8..8581439 100644
--- a/rt2860-1.7.0.0/common/cmm_sync.c
+++ b/rt2860-source-1.8.0.0/common/cmm_sync.c
@@ -94,7 +94,11 @@ VOID BuildChannelList(
NdisZeroMemory(pAd->ChannelList, MAX_NUM_OF_CHANNELS * sizeof(CHANNEL_TX_POWER));
// if not 11a-only mode, channel list starts from 2.4Ghz band
- if ((pAd->CommonCfg.PhyMode != PHY_11A) && (pAd->CommonCfg.PhyMode != PHY_11AN_MIXED) && (pAd->CommonCfg.PhyMode != PHY_11N_5G))
+ if ((pAd->CommonCfg.PhyMode != PHY_11A)
+#ifdef DOT11_N_SUPPORT
+ && (pAd->CommonCfg.PhyMode != PHY_11AN_MIXED) && (pAd->CommonCfg.PhyMode != PHY_11N_5G)
+#endif // DOT11_N_SUPPORT //
+ )
{
switch (pAd->CommonCfg.CountryRegion & 0x7f)
{
@@ -141,8 +145,12 @@ VOID BuildChannelList(
pAd->ChannelList[i].MaxTxPwr = 20;
}
- if ((pAd->CommonCfg.PhyMode == PHY_11A) || (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) ||
- (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))
+ if ((pAd->CommonCfg.PhyMode == PHY_11A) || (pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED)
+#ifdef DOT11_N_SUPPORT
+ || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED)
+ || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11N_5G)
+#endif // DOT11_N_SUPPORT //
+ )
{
switch (pAd->CommonCfg.CountryRegionForABand & 0x7f)
{
@@ -379,7 +387,7 @@ VOID ScanNextChannel(
USHORT Status;
PHEADER_802_11 pHdr80211;
#endif // CONFIG_STA_SUPPORT //
- UCHAR HtLen;
+ UINT ScanTimeIn5gChannel = SHORT_CHANNEL_TIME;
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
@@ -400,7 +408,7 @@ VOID ScanNextChannel(
if ((pAd->CommonCfg.BBPCurrentBW == BW_40)
#ifdef CONFIG_STA_SUPPORT
&& (INFRA_ON(pAd)
- || (pAd->OpMode == OPMODE_AP))
+ || (pAd->OpMode == OPMODE_AP))
#endif // CONFIG_STA_SUPPORT //
)
{
@@ -445,14 +453,15 @@ VOID ScanNextChannel(
RTMPusecDelay(5000);
}
}
-
+
pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
Status = MLME_SUCCESS;
MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status);
}
#endif // CONFIG_STA_SUPPORT //
- RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);
+
+ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);
}
else
{
@@ -478,7 +487,10 @@ VOID ScanNextChannel(
if (pAd->MlmeAux.Channel > 14)
{
if ((pAd->CommonCfg.bIEEE80211H == 1) && RadarChannelCheck(pAd, pAd->MlmeAux.Channel))
+ {
ScanType = SCAN_PASSIVE;
+ ScanTimeIn5gChannel = MIN_CHANNEL_TIME;
+ }
}
#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
@@ -486,6 +498,7 @@ VOID ScanNextChannel(
if (pAd->CommonCfg.CarrierDetect.Enable == TRUE)
{
ScanType = SCAN_PASSIVE;
+ ScanTimeIn5gChannel = MIN_CHANNEL_TIME;
}
#endif // CARRIER_DETECTION_SUPPORT //
}
@@ -516,10 +529,14 @@ VOID ScanNextChannel(
#endif // CONFIG_STA_SUPPORT //
else // must be SCAN_PASSIVE or SCAN_ACTIVE
{
- if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED))
+ if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED)
+#ifdef DOT11_N_SUPPORT
+ || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED)
+#endif // DOT11_N_SUPPORT //
+ )
{
if (pAd->MlmeAux.Channel > 14)
- RTMPSetTimer(&pAd->MlmeAux.ScanTimer, SHORT_CHANNEL_TIME);
+ RTMPSetTimer(&pAd->MlmeAux.ScanTimer, ScanTimeIn5gChannel);
else
RTMPSetTimer(&pAd->MlmeAux.ScanTimer, MIN_CHANNEL_TIME);
}
@@ -547,7 +564,8 @@ VOID ScanNextChannel(
}
// There is no need to send broadcast probe request if active scan is in effect.
- if ((ScanType == SCAN_ACTIVE) || (ScanType == FAST_SCAN_ACTIVE) )
+ if ((ScanType == SCAN_ACTIVE) || (ScanType == FAST_SCAN_ACTIVE)
+ )
SsidLen = pAd->MlmeAux.SsidLen;
else
SsidLen = 0;
@@ -573,9 +591,12 @@ VOID ScanNextChannel(
END_OF_ARGS);
FrameLen += Tmp;
}
+
+#ifdef DOT11_N_SUPPORT
if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
{
- ULONG Tmp;
+ ULONG Tmp;
+ UCHAR HtLen;
UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33};
#ifdef RT_BIG_ENDIAN
HT_CAPABILITY_IE HtCapabilityTmp;
@@ -641,7 +662,9 @@ VOID ScanNextChannel(
}
#endif // DOT11N_DRAFT3 //
}
-
+#endif // DOT11_N_SUPPORT //
+
+
MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
MlmeFreeMemory(pAd, pOutBuffer);
}
diff --git a/rt2860-1.7.0.0/common/cmm_wpa.c b/rt2860-source-1.8.0.0/common/cmm_wpa.c
similarity index 94%
copy from rt2860-1.7.0.0/common/cmm_wpa.c
copy to rt2860-source-1.8.0.0/common/cmm_wpa.c
index 9218b4d..35bee09 100644
--- a/rt2860-1.7.0.0/common/cmm_wpa.c
+++ b/rt2860-source-1.8.0.0/common/cmm_wpa.c
@@ -303,9 +303,12 @@ static VOID RTMPInsertRsnIeCipher(
IN UCHAR ElementID,
IN UINT WepStatus,
IN BOOLEAN bMixCipher,
+ IN UCHAR FlexibleCipher,
OUT PUCHAR pRsnIe,
OUT UCHAR *rsn_len)
{
+ UCHAR PairwiseCnt;
+
*rsn_len = 0;
// decide WPA2 or WPA1
@@ -340,10 +343,27 @@ static VOID RTMPInsertRsnIeCipher(
// TKIP-AES mix mode
case Ndis802_11Encryption4Enabled:
NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA2_TKIP, 4);
- pRsnie_cipher->ucount = 2;
- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_TKIP, 4);
- NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA2_CCMP, 4);
- *rsn_len = sizeof(RSNIE2) + 4;
+
+ PairwiseCnt = 1;
+ // Insert WPA2 TKIP as the first pairwise cipher
+ if (MIX_CIPHER_WPA2_TKIP_ON(FlexibleCipher))
+ {
+ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_TKIP, 4);
+ // Insert WPA2 AES as the secondary pairwise cipher
+ if (MIX_CIPHER_WPA2_AES_ON(FlexibleCipher))
+ {
+ NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA2_CCMP, 4);
+ PairwiseCnt = 2;
+ }
+ }
+ else
+ {
+ // Insert WPA2 AES as the first pairwise cipher
+ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA2_CCMP, 4);
+ }
+
+ pRsnie_cipher->ucount = PairwiseCnt;
+ *rsn_len = sizeof(RSNIE2) + (4 * (PairwiseCnt - 1));
break;
}
@@ -383,10 +403,27 @@ static VOID RTMPInsertRsnIeCipher(
// TKIP-AES mix mode
case Ndis802_11Encryption4Enabled:
NdisMoveMemory(pRsnie_cipher->mcast, OUI_WPA_TKIP, 4);
- pRsnie_cipher->ucount = 2;
- NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_TKIP, 4);
- NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA_CCMP, 4);
- *rsn_len = sizeof(RSNIE) + 4;
+
+ PairwiseCnt = 1;
+ // Insert WPA TKIP as the first pairwise cipher
+ if (MIX_CIPHER_WPA_TKIP_ON(FlexibleCipher))
+ {
+ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_TKIP, 4);
+ // Insert WPA AES as the secondary pairwise cipher
+ if (MIX_CIPHER_WPA_AES_ON(FlexibleCipher))
+ {
+ NdisMoveMemory(pRsnie_cipher->ucast[0].oui + 4, OUI_WPA_CCMP, 4);
+ PairwiseCnt = 2;
+ }
+ }
+ else
+ {
+ // Insert WPA AES as the first pairwise cipher
+ NdisMoveMemory(pRsnie_cipher->ucast[0].oui, OUI_WPA_CCMP, 4);
+ }
+
+ pRsnie_cipher->ucount = PairwiseCnt;
+ *rsn_len = sizeof(RSNIE) + (4 * (PairwiseCnt - 1));
break;
}
@@ -436,13 +473,13 @@ static VOID RTMPInsertRsnIeAKM(
case Ndis802_11AuthModeWPA2:
case Ndis802_11AuthModeWPA1WPA2:
pRsnie_auth->acount = 1;
- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_8021X_AKM, 4);
+ NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_8021X_AKM, 4);
break;
case Ndis802_11AuthModeWPA2PSK:
case Ndis802_11AuthModeWPA1PSKWPA2PSK:
pRsnie_auth->acount = 1;
- NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_PSK_AKM, 4);
+ NdisMoveMemory(pRsnie_auth->auth[0].oui, OUI_WPA2_PSK_AKM, 4);
break;
}
}
@@ -546,6 +583,7 @@ VOID RTMPMakeRSNIE(
UCHAR PrimaryRsnie;
BOOLEAN bMixCipher = FALSE; // indicate the pairwise and group cipher are different
UCHAR p_offset;
+ WPA_MIX_PAIR_CIPHER FlexibleCipher = MIX_CIPHER_NOTUSE; // it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode
rsnielen_cur_p = NULL;
rsnielen_ex_cur_p = NULL;
@@ -555,19 +593,22 @@ VOID RTMPMakeRSNIE(
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
#ifdef WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP)
+ if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
{
if (AuthMode < Ndis802_11AuthModeWPA)
return;
}
else
#endif // WPA_SUPPLICANT_SUPPORT //
+ {
// Support WPAPSK or WPA2PSK in STA-Infra mode
// Support WPANone in STA-Adhoc mode
if ((AuthMode != Ndis802_11AuthModeWPAPSK) &&
(AuthMode != Ndis802_11AuthModeWPA2PSK) &&
- (AuthMode != Ndis802_11AuthModeWPANone))
+ (AuthMode != Ndis802_11AuthModeWPANone)
+ )
return;
+ }
DBGPRINT(RT_DEBUG_TRACE,("==> RTMPMakeRSNIE(STA)\n"));
@@ -594,15 +635,17 @@ VOID RTMPMakeRSNIE(
else
PrimaryRsnie = Wpa2Ie;
- // Build the primary RSNIE
- // 1. insert cipher suite
- RTMPInsertRsnIeCipher(pAd, PrimaryRsnie, WepStatus, bMixCipher, pRsnIe, &p_offset);
-
- // 2. insert AKM
- RTMPInsertRsnIeAKM(pAd, PrimaryRsnie, AuthMode, apidx, pRsnIe, &p_offset);
+ {
+ // Build the primary RSNIE
+ // 1. insert cipher suite
+ RTMPInsertRsnIeCipher(pAd, PrimaryRsnie, WepStatus, bMixCipher, FlexibleCipher, pRsnIe, &p_offset);
+
+ // 2. insert AKM
+ RTMPInsertRsnIeAKM(pAd, PrimaryRsnie, AuthMode, apidx, pRsnIe, &p_offset);
- // 3. insert capability
- RTMPInsertRsnIeCap(pAd, PrimaryRsnie, apidx, pRsnIe, &p_offset);
+ // 3. insert capability
+ RTMPInsertRsnIeCap(pAd, PrimaryRsnie, apidx, pRsnIe, &p_offset);
+ }
// 4. update the RSNIE length
*rsnielen_cur_p = p_offset;
@@ -639,10 +682,10 @@ BOOLEAN RTMPCheckWPAframe(
ULONG Body_len;
BOOLEAN Cancelled;
+
if(DataByteCount < (LENGTH_802_1_H + LENGTH_EAPOL_H))
return FALSE;
- DBGPRINT(RT_DEBUG_INFO, ("RTMPCheckWPAframe ===> \n"));
// Skip LLC header
if (NdisEqualMemory(SNAP_802_1H, pData, 6) ||
@@ -822,15 +865,7 @@ VOID AES_GTK_KEY_UNWRAP(
{
plaintext[i] = R[i];
}
-
- DBGPRINT_RAW(RT_DEBUG_INFO, ("plaintext = \n"));
- for(i = 0; i < (num_blocks *8); i++)
- {
- DBGPRINT_RAW(RT_DEBUG_INFO, ("%2x ", plaintext[i]));
- if(i%16 == 15)
- DBGPRINT_RAW(RT_DEBUG_INFO, ("\n "));
- }
- DBGPRINT_RAW(RT_DEBUG_INFO, ("\n \n"));
+
os_free_mem(NULL, R);
}
@@ -910,8 +945,7 @@ BOOLEAN RTMPCheckRSNIE(
if ((pEntry->AuthMode == Ndis802_11AuthModeWPA || pEntry->AuthMode == Ndis802_11AuthModeWPAPSK) &&
(NdisEqualMemory(pVIE, pEntry->RSN_IE, pEntry->RSNIE_Len)) &&
(pEntry->RSNIE_Len == (pEid->Len + 2)))
- {
- DBGPRINT(RT_DEBUG_INFO, ("RTMPCheckRSNIE ==> WPA/WPAPSK RSN IE matched, Length(%d) \n", (pEid->Len + 2)));
+ {
result = TRUE;
}
@@ -923,8 +957,7 @@ BOOLEAN RTMPCheckRSNIE(
if ((pEntry->AuthMode == Ndis802_11AuthModeWPA2 || pEntry->AuthMode == Ndis802_11AuthModeWPA2PSK) &&
(NdisEqualMemory(pVIE, pEntry->RSN_IE, pEntry->RSNIE_Len)) &&
(pEntry->RSNIE_Len == (pEid->Len + 2))/* ToDo-AlbertY for mesh*/)
- {
- DBGPRINT(RT_DEBUG_INFO, ("RTMPCheckRSNIE ==> WPA2/WPA2PSK RSN IE matched, Length(%d) \n", (pEid->Len + 2)));
+ {
result = TRUE;
}
@@ -939,7 +972,6 @@ BOOLEAN RTMPCheckRSNIE(
len -= (pEid->Len + 2);
}
- DBGPRINT(RT_DEBUG_INFO, ("RTMPCheckRSNIE ==> skip_offset(%d) \n", *Offset));
return result;
@@ -1015,11 +1047,8 @@ BOOLEAN RTMPParseEapolKeyData(
{
if (KeyDataLength >= 8) // KDE format exclude GTK length
{
- pKDE = (PKDE_ENCAP) pMyKeyData;
- DBGPRINT(RT_DEBUG_INFO, ("pKDE->Type %x \n", pKDE->Type));
- DBGPRINT(RT_DEBUG_INFO, ("pKDE->Len 0x%x \n", pKDE->Len));
- DBGPRINT(RT_DEBUG_INFO, ("pKDE->OUI %x %x %x \n", pKDE->OUI[0],pKDE->OUI[1],pKDE->OUI[2]));
- DBGPRINT(RT_DEBUG_INFO, ("pKDE->DataType %x \n", pKDE->DataType));
+ pKDE = (PKDE_ENCAP) pMyKeyData;
+
DefaultIdx = pKDE->GTKEncap.Kid;
@@ -1515,14 +1544,14 @@ NDIS_STATUS RTMPSoftDecryptBroadCastData(
{
PRXWI_STRUC pRxWI = pRxBlk->pRxWI;
- DBGPRINT(RT_DEBUG_INFO, ("RTMPSoftDecryptBroadCastData --> \n"));
+
// handle WEP decryption
if (GroupCipher == Ndis802_11Encryption1Enabled)
{
if (RTMPSoftDecryptWEP(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, pShard_key))
{
- DBGPRINT(RT_DEBUG_INFO, ("RTMPSoftDecryptWEP Complete \n"));
+
//Minus IV[4] & ICV[4]
pRxWI->MPDUtotalByteCount -= 8;
}
@@ -1538,7 +1567,7 @@ NDIS_STATUS RTMPSoftDecryptBroadCastData(
{
if (RTMPSoftDecryptTKIP(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount, 0, pShard_key))
{
- DBGPRINT(RT_DEBUG_INFO, ("RTMPSoftDecryptTKIP Complete \n"));
+
//Minus 8 bytes MIC, 8 bytes IV/EIV, 4 bytes ICV
pRxWI->MPDUtotalByteCount -= 20;
}
@@ -1554,7 +1583,7 @@ NDIS_STATUS RTMPSoftDecryptBroadCastData(
{
if (RTMPSoftDecryptAES(pAd, pRxBlk->pData, pRxWI->MPDUtotalByteCount , pShard_key))
{
- DBGPRINT(RT_DEBUG_INFO, ("RTMPSoftDecryptAES Complete \n"));
+
//8 bytes MIC, 8 bytes IV/EIV (CCMP Header)
pRxWI->MPDUtotalByteCount -= 16;
}
diff --git a/rt2860-1.7.0.0/common/dfs.c b/rt2860-source-1.8.0.0/common/dfs.c
similarity index 98%
copy from rt2860-1.7.0.0/common/dfs.c
copy to rt2860-source-1.8.0.0/common/dfs.c
index 5c4e351..f557ee7 100644
--- a/rt2860-1.7.0.0/common/dfs.c
+++ b/rt2860-source-1.8.0.0/common/dfs.c
@@ -164,9 +164,7 @@ VOID RadarDetectionStart(
}
else
CtsProtect = 0x01;
-
- DBGPRINT(RT_DEBUG_INFO,("RadarDetectionStart %s CTS protection, duration %dms, period=%dms\n",
- (CTSProtect == 1 ? "with" : "without"), DfsActiveTime, CTSPeriod));
+
// send start-RD with CTS protection command to MCU
// highbyte [7] reserve
diff --git a/rt2860-1.7.0.0/common/eeprom.c b/rt2860-source-1.8.0.0/common/eeprom.c
similarity index 100%
copy from rt2860-1.7.0.0/common/eeprom.c
copy to rt2860-source-1.8.0.0/common/eeprom.c
diff --git a/rt2860-1.7.0.0/common/md5.c b/rt2860-source-1.8.0.0/common/md5.c
similarity index 96%
copy from rt2860-1.7.0.0/common/md5.c
copy to rt2860-source-1.8.0.0/common/md5.c
index fe0686a..b93c3de 100644
--- a/rt2860-1.7.0.0/common/md5.c
+++ b/rt2860-source-1.8.0.0/common/md5.c
@@ -138,7 +138,7 @@ void byteReverse(unsigned char *buf, unsigned longs);
void byteReverse(unsigned char *buf, unsigned longs)
{
do {
- *(ULONG *)buf = SWAP32(*(ULONG *)buf);
+ *(UINT32 *)buf = SWAP32(*(UINT32 *)buf);
buf += 4;
} while (--longs);
}
@@ -195,16 +195,16 @@ VOID MD5Init(MD5_CTX *pCtx)
* Note:
* Called after MD5Init or MD5Update(itself)
*/
-VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, ULONG LenInBytes)
+VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, UINT32 LenInBytes)
{
- ULONG TfTimes;
- ULONG temp;
+ UINT32 TfTimes;
+ UINT32 temp;
unsigned int i;
temp = pCtx->LenInBitCount[0];
- pCtx->LenInBitCount[0] = (ULONG) (pCtx->LenInBitCount[0] + (LenInBytes << 3));
+ pCtx->LenInBitCount[0] = (UINT32) (pCtx->LenInBitCount[0] + (LenInBytes << 3));
if (pCtx->LenInBitCount[0] < temp)
pCtx->LenInBitCount[1]++; //carry in
@@ -227,7 +227,7 @@ VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, ULONG LenInBytes)
NdisMoveMemory(pAds, (UCHAR *)pData, 64-temp);
byteReverse(pCtx->Input, 16);
- MD5Transform(pCtx->Buf, (ULONG *)pCtx->Input);
+ MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input);
pData += 64-temp;
LenInBytes -= 64-temp;
@@ -240,7 +240,7 @@ VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, ULONG LenInBytes)
{
NdisMoveMemory(pCtx->Input, (UCHAR *)pData, 64);
byteReverse(pCtx->Input, 16);
- MD5Transform(pCtx->Buf, (ULONG *)pCtx->Input);
+ MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input);
pData += 64;
LenInBytes -= 64;
} // end of for
@@ -296,7 +296,7 @@ VOID MD5Final(UCHAR Digest[16], MD5_CTX *pCtx)
}
byteReverse(pCtx->Input, 16);
- MD5Transform(pCtx->Buf, (ULONG *)pCtx->Input);
+ MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input);
} // end of if
// padding bits with crossing block(64-byte based) boundary
@@ -310,7 +310,7 @@ VOID MD5Final(UCHAR Digest[16], MD5_CTX *pCtx)
PadLenInBytes -= (64 - Remainder - 1);
byteReverse(pCtx->Input, 16);
- MD5Transform(pCtx->Buf, (ULONG *)pCtx->Input);
+ MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input);
// the second block ===
@@ -324,11 +324,11 @@ VOID MD5Final(UCHAR Digest[16], MD5_CTX *pCtx)
}
byteReverse(pCtx->Input, 16);
- MD5Transform(pCtx->Buf, (ULONG *)pCtx->Input);
+ MD5Transform(pCtx->Buf, (UINT32 *)pCtx->Input);
} // end of else
- NdisMoveMemory((UCHAR *)Digest, (ULONG *)pCtx->Buf, 16); // output
+ NdisMoveMemory((UCHAR *)Digest, (UINT32 *)pCtx->Buf, 16); // output
byteReverse((UCHAR *)Digest, 4);
NdisZeroMemory(pCtx, sizeof(pCtx)); // memory free
}
@@ -349,9 +349,9 @@ VOID MD5Final(UCHAR Digest[16], MD5_CTX *pCtx)
* Note:
* Called by MD5Update or MD5Final
*/
-VOID MD5Transform(ULONG Buf[4], ULONG Mes[16])
+VOID MD5Transform(UINT32 Buf[4], UINT32 Mes[16])
{
- ULONG Reg[4], Temp;
+ UINT32 Reg[4], Temp;
unsigned int i;
static UCHAR LShiftVal[16] =
@@ -364,7 +364,7 @@ VOID MD5Transform(ULONG Buf[4], ULONG Mes[16])
// [equal to 4294967296*abs(sin(index))]
- static ULONG MD5Table[64] =
+ static UINT32 MD5Table[64] =
{
0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee,
0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501,
@@ -491,22 +491,22 @@ VOID SHAInit(SHA_CTX *pCtx)
* Note:
* Called after SHAInit or SHAUpdate(itself)
*/
-UCHAR SHAUpdate(SHA_CTX *pCtx, UCHAR *pData, ULONG LenInBytes)
+UCHAR SHAUpdate(SHA_CTX *pCtx, UCHAR *pData, UINT32 LenInBytes)
{
- ULONG TfTimes;
- ULONG temp1,temp2;
+ UINT32 TfTimes;
+ UINT32 temp1,temp2;
unsigned int i;
UCHAR err=1;
temp1 = pCtx->LenInBitCount[0];
temp2 = pCtx->LenInBitCount[1];
- pCtx->LenInBitCount[0] = (ULONG) (pCtx->LenInBitCount[0] + (LenInBytes << 3));
+ pCtx->LenInBitCount[0] = (UINT32) (pCtx->LenInBitCount[0] + (LenInBytes << 3));
if (pCtx->LenInBitCount[0] < temp1)
pCtx->LenInBitCount[1]++; //carry in
- pCtx->LenInBitCount[1] = (ULONG) (pCtx->LenInBitCount[1] +(LenInBytes >> 29));
+ pCtx->LenInBitCount[1] = (UINT32) (pCtx->LenInBitCount[1] +(LenInBytes >> 29));
if (pCtx->LenInBitCount[1] < temp2)
return (err); //check total length of original data
@@ -529,7 +529,7 @@ UCHAR SHAUpdate(SHA_CTX *pCtx, UCHAR *pData, ULONG LenInBytes)
byteReverse((UCHAR *)pCtx->Input, 16);
NdisZeroMemory((UCHAR *)pCtx->Input + 64, 16);
- SHATransform(pCtx->Buf, (ULONG *)pCtx->Input);
+ SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input);
pData += 64-temp1;
LenInBytes -= 64-temp1;
@@ -544,7 +544,7 @@ UCHAR SHAUpdate(SHA_CTX *pCtx, UCHAR *pData, ULONG LenInBytes)
byteReverse((UCHAR *)pCtx->Input, 16);
NdisZeroMemory((UCHAR *)pCtx->Input + 64, 16);
- SHATransform(pCtx->Buf, (ULONG *)pCtx->Input);
+ SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input);
pData += 64;
LenInBytes -= 64;
} // end of for
@@ -589,7 +589,7 @@ VOID SHAFinal(SHA_CTX *pCtx, UCHAR Digest[20])
byteReverse((UCHAR *)pCtx->Input, 16);
NdisZeroMemory((UCHAR *)pCtx->Input + 64, 14);
- SHATransform(pCtx->Buf, (ULONG *)pCtx->Input);
+ SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input);
} // end of if
// padding bits with crossing block(64-byte based) boundary
@@ -604,7 +604,7 @@ VOID SHAFinal(SHA_CTX *pCtx, UCHAR Digest[20])
byteReverse((UCHAR *)pCtx->Input, 16);
NdisZeroMemory((UCHAR *)pCtx->Input + 64, 16);
- SHATransform(pCtx->Buf, (ULONG *)pCtx->Input);
+ SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input);
// the second block ===
@@ -619,7 +619,7 @@ VOID SHAFinal(SHA_CTX *pCtx, UCHAR Digest[20])
byteReverse((UCHAR *)pCtx->Input, 16);
NdisZeroMemory((UCHAR *)pCtx->Input + 64, 16);
- SHATransform(pCtx->Buf, (ULONG *)pCtx->Input);
+ SHATransform(pCtx->Buf, (UINT32 *)pCtx->Input);
} // end of else
@@ -635,13 +635,13 @@ VOID SHAFinal(SHA_CTX *pCtx, UCHAR Digest[20])
// The central algorithm of SHA-1, consists of four rounds and
// twenty steps per round
-VOID SHATransform(ULONG Buf[5], ULONG Mes[20])
-{
- ULONG Reg[5],Temp;
+VOID SHATransform(UINT32 Buf[5], UINT32 Mes[20])
+{
+ UINT32 Reg[5],Temp;
unsigned int i;
- ULONG W[80];
-
- static ULONG SHA1Table[4] = { 0x5a827999, 0x6ed9eba1,
+ UINT32 W[80];
+
+ static UINT32 SHA1Table[4] = { 0x5a827999, 0x6ed9eba1,
0x8f1bbcdc, 0xca62c1d6 };
Reg[0]=Buf[0];
@@ -1369,6 +1369,7 @@ VOID HMAC_SHA1(
SHAUpdate(&context, k_opad, 64); /* start with outer pad */
SHAUpdate(&context, digest, 20); /* then results of 1st hash */
SHAFinal(&context, digest); /* finish up 2nd pass */
+
}
/*
diff --git a/rt2860-1.7.0.0/common/mlme.c b/rt2860-source-1.8.0.0/common/mlme.c
similarity index 94%
copy from rt2860-1.7.0.0/common/mlme.c
copy to rt2860-source-1.8.0.0/common/mlme.c
index 015aa5e..6676eb7 100644
--- a/rt2860-1.7.0.0/common/mlme.c
+++ b/rt2860-source-1.8.0.0/common/mlme.c
@@ -43,6 +43,7 @@ UCHAR CISCO_OUI[] = {0x00, 0x40, 0x96};
UCHAR WPA_OUI[] = {0x00, 0x50, 0xf2, 0x01};
UCHAR RSN_OUI[] = {0x00, 0x0f, 0xac};
+UCHAR WAPI_OUI[] = {0x00, 0x14, 0x72};
UCHAR WME_INFO_ELEM[] = {0x00, 0x50, 0xf2, 0x02, 0x00, 0x01};
UCHAR WME_PARM_ELEM[] = {0x00, 0x50, 0xf2, 0x02, 0x01, 0x01};
UCHAR Ccx2QosInfo[] = {0x00, 0x40, 0x96, 0x04};
@@ -50,7 +51,9 @@ UCHAR RALINK_OUI[] = {0x00, 0x0c, 0x43};
UCHAR BROADCOM_OUI[] = {0x00, 0x90, 0x4c};
UCHAR WPS_OUI[] = {0x00, 0x50, 0xf2, 0x04};
#ifdef CONFIG_STA_SUPPORT
+#ifdef DOT11_N_SUPPORT
UCHAR PRE_N_HT_OUI[] = {0x00, 0x90, 0x4c};
+#endif // DOT11_N_SUPPORT //
#endif // CONFIG_STA_SUPPORT //
UCHAR RateSwitchTable[] = {
@@ -116,7 +119,7 @@ UCHAR RateSwitchTable11BG[] = {
UCHAR RateSwitchTable11G[] = {
// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF)
- 0x08, 0x07, 0, 0, 0, // Initial used item after association
+ 0x08, 0x00, 0, 0, 0, // Initial used item after association
0x00, 0x10, 0, 20, 101,
0x01, 0x10, 1, 20, 35,
0x02, 0x10, 2, 20, 35,
@@ -127,6 +130,7 @@ UCHAR RateSwitchTable11G[] = {
0x07, 0x10, 7, 10, 13,
};
+#ifdef DOT11_N_SUPPORT
UCHAR RateSwitchTable11N1S[] = {
// Item No. Mode Curr-MCS TrainUp TrainDown // Mode- Bit0: STBC, Bit1: Short GI, Bit4,5: Mode(0:CCK, 1:OFDM, 2:HT Mix, 3:HT GF)
0x09, 0x00, 0, 0, 0, // Initial used item after association
@@ -283,6 +287,7 @@ UCHAR RateSwitchTable11BGN3SForABand[] = { // 3*3
0x0a, 0x20, 23, 8, 25,
0x0b, 0x22, 23, 8, 25,
};
+#endif // DOT11_N_SUPPORT //
PUCHAR ReasonString[] = {
/* 0 */ "Reserved",
@@ -329,12 +334,14 @@ USHORT RateIdTo500Kbps[] = { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108, 144,
UCHAR SsidIe = IE_SSID;
UCHAR SupRateIe = IE_SUPP_RATES;
UCHAR ExtRateIe = IE_EXT_SUPP_RATES;
+#ifdef DOT11_N_SUPPORT
UCHAR HtCapIe = IE_HT_CAP;
UCHAR AddHtInfoIe = IE_ADD_HT;
UCHAR NewExtChanIe = IE_SECONDARY_CH_OFFSET;
#ifdef DOT11N_DRAFT3
UCHAR ExtHtCapIe = IE_EXT_CAPABILITY;
#endif // DOT11N_DRAFT3 //
+#endif // DOT11_N_SUPPORT //
UCHAR ErpIe = IE_ERP;
UCHAR DsIe = IE_DS_PARM;
UCHAR TimIe = IE_TIM;
@@ -384,18 +391,14 @@ RTMP_RF_REGS RF2850RegTable[] = {
// 802.11 HyperLan 2
{100, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed783},
-#if 0
- {102, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed793},
- {104, 0x98402ec8, 0x984c06b2, 0x98178a55, 0x980ed1a3},
- {108, 0x98402ecc, 0x984c0a32, 0x98178a55, 0x980ed193},
-#else
+
// 2008.04.30 modified
// The system team has AN to improve the EVM value
// for channel 102 to 108 for the RT2850/RT2750 dual band solution.
{102, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed793},
{104, 0x98402ec8, 0x985c06b2, 0x98578a55, 0x980ed1a3},
{108, 0x98402ecc, 0x985c0a32, 0x98578a55, 0x980ed193},
-#endif
+
{110, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed183},
{112, 0x98402ecc, 0x984c0a36, 0x98178a55, 0x980ed19b},
{116, 0x98402ecc, 0x984c0a3a, 0x98178a55, 0x980ed1a3},
@@ -431,6 +434,31 @@ RTMP_RF_REGS RF2850RegTable[] = {
};
UCHAR NUM_OF_2850_CHNL = (sizeof(RF2850RegTable) / sizeof(RTMP_RF_REGS));
+FREQUENCY_ITEM FreqItems3020[] =
+{
+ /**************************************************/
+ // ISM : 2.4 to 2.483 GHz //
+ /**************************************************/
+ // 11g
+ /**************************************************/
+ //-CH---N-------R---K-----------
+ {1, 241, 2, 2},
+ {2, 241, 2, 7},
+ {3, 242, 2, 2},
+ {4, 242, 2, 7},
+ {5, 243, 2, 2},
+ {6, 243, 2, 7},
+ {7, 244, 2, 2},
+ {8, 244, 2, 7},
+ {9, 245, 2, 2},
+ {10, 245, 2, 7},
+ {11, 246, 2, 2},
+ {12, 246, 2, 7},
+ {13, 247, 2, 2},
+ {14, 248, 2, 4},
+};
+#define NUM_OF_3020_CHNL (sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM))
+
/*
==========================================================================
Description:
@@ -477,12 +505,15 @@ NDIS_STATUS MlmeInit(
DlsStateMachineInit(pAd, &pAd->Mlme.DlsMachine, pAd->Mlme.DlsFunc);
#endif // QOS_DLS_SUPPORT //
+
// Since we are using switch/case to implement it, the init is different from the above
// state machine init
MlmeCntlInit(pAd, &pAd->Mlme.CntlMachine, NULL);
}
#endif // CONFIG_STA_SUPPORT //
+
+
ActionStateMachineInit(pAd, &pAd->Mlme.ActMachine, pAd->Mlme.ActFunc);
// Init mlme periodic timer
@@ -618,6 +649,9 @@ VOID MlmeHandler(
StateMachinePerformAction(pAd, &pAd->Mlme.ActMachine, Elem);
break;
+
+
+
default:
DBGPRINT(RT_DEBUG_TRACE, ("ERROR: Illegal machine %ld in MlmeHandler()\n", Elem->Machine));
break;
@@ -697,6 +731,8 @@ VOID MlmeHalt(
RTMPCancelTimer(&pAd->Mlme.PeriodicTimer, &Cancelled);
RTMPCancelTimer(&pAd->Mlme.RxAntEvalTimer, &Cancelled);
+
+
if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))
{
// Set LED
@@ -872,13 +908,14 @@ VOID MlmePeriodicExec(
pAd->Mlme.PeriodicRound ++;
// execute every 500ms
- if ((pAd->Mlme.PeriodicRound % 5 == 0) && RTMPAutoRateSwitchCheck(pAd))
+ if ((pAd->Mlme.PeriodicRound % 5 == 0) && RTMPAutoRateSwitchCheck(pAd)/*(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED))*/)
{
#ifdef CONFIG_STA_SUPPORT
// perform dynamic tx rate switching based on past TX history
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
- if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)
+ )
&& (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)))
MlmeDynamicTxRateSwitching(pAd);
}
@@ -913,15 +950,15 @@ VOID MlmePeriodicExec(
}
#endif // RALINK_ATE //
+
if (rx_Total)
{
- DBGPRINT(RT_DEBUG_LOUD,("%lu/%lu (%lu%%) , TxDone %ld\n", rx_AMSDU, rx_Total, (rx_AMSDU*100)/rx_Total, pAd->RalinkCounters.OneSecDmaDoneCount[0]));
-
+
// reset counters
rx_AMSDU = 0;
rx_Total = 0;
}
-
+
// Media status changed, report to NDIS
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE))
{
@@ -930,6 +967,7 @@ VOID MlmePeriodicExec(
{
pAd->IndicateMediaState = NdisMediaStateConnected;
RTMP_IndicateMediaState(pAd);
+
}
else
{
@@ -945,8 +983,11 @@ VOID MlmePeriodicExec(
NICUpdateRawCounters(pAd);
+#ifdef DOT11_N_SUPPORT
// Need statistics after read counter. So put after NICUpdateRawCounters
ORIBATimerTimeout(pAd);
+#endif // DOT11_N_SUPPORT //
+
// The time period for checking antenna is according to traffic
if (pAd->Mlme.bEnableAutoAntennaCheck)
@@ -1010,6 +1051,7 @@ VOID MlmePeriodicExec(
RT28XX_MLME_HANDLER(pAd);
}
+
pAd->bUpdateBcnCntDone = FALSE;
}
@@ -1031,7 +1073,7 @@ VOID STAMlmePeriodicExec(
#endif // RALINK_ATE //
#ifdef WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP == 0)
+ if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE)
#endif // WPA_SUPPLICANT_SUPPORT //
{
// WPA MIC error should block association attempt for 60 seconds
@@ -1049,9 +1091,7 @@ VOID STAMlmePeriodicExec(
}
- DBGPRINT(RT_DEBUG_INFO,("MMCHK - CommonCfg.Ssid[%d]=%c%c%c%c... MlmeAux.Ssid[%d]=%c%c%c%c...\n",
- pAd->CommonCfg.SsidLen, pAd->CommonCfg.Ssid[0], pAd->CommonCfg.Ssid[1], pAd->CommonCfg.Ssid[2], pAd->CommonCfg.Ssid[3],
- pAd->MlmeAux.SsidLen, pAd->MlmeAux.Ssid[0], pAd->MlmeAux.Ssid[1], pAd->MlmeAux.Ssid[2], pAd->MlmeAux.Ssid[3]));
+
AsicStaBbpTuning(pAd);
@@ -1123,7 +1163,8 @@ VOID STAMlmePeriodicExec(
#ifdef WPA_SUPPLICANT_SUPPORT
#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP) {
+ if (pAd->StaCfg.WpaSupplicantUP)
+ {
union iwreq_data wrqu;
//send disassociate event to wpa_supplicant
memset(&wrqu, 0, sizeof(wrqu));
@@ -1189,6 +1230,25 @@ VOID STAMlmePeriodicExec(
pAd->StaCfg.AdhocBOnlyJoined = FALSE;
}
+#ifdef DOT11_N_SUPPORT
+ if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
+ {
+ if ((pAd->StaCfg.AdhocBGJoined) &&
+ ((pAd->StaCfg.Last11gBeaconRxTime + 5 * OS_HZ) < pAd->Mlme.Now32))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - last 11G peer left\n"));
+ pAd->StaCfg.AdhocBGJoined = FALSE;
+ }
+
+ if ((pAd->StaCfg.Adhoc20NJoined) &&
+ ((pAd->StaCfg.Last20NBeaconRxTime + 5 * OS_HZ) < pAd->Mlme.Now32))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - last 20MHz N peer left\n"));
+ pAd->StaCfg.Adhoc20NJoined = FALSE;
+ }
+ }
+#endif // DOT11_N_SUPPORT //
+
//radar detect
if ((pAd->CommonCfg.Channel > 14)
&& (pAd->CommonCfg.bIEEE80211H == 1)
@@ -1197,38 +1257,24 @@ VOID STAMlmePeriodicExec(
RadarDetectPeriodic(pAd);
}
-#ifndef SINGLE_ADHOC_LINKUP
// If all peers leave, and this STA becomes the last one in this IBSS, then change MediaState
// to DISCONNECTED. But still holding this IBSS (i.e. sending BEACON) so that other STAs can
// join later.
if ((pAd->StaCfg.LastBeaconRxTime + ADHOC_BEACON_LOST_TIME < pAd->Mlme.Now32) &&
OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
{
- UCHAR i;
+ MLME_START_REQ_STRUCT StartReq;
+
DBGPRINT(RT_DEBUG_TRACE, ("MMCHK - excessive BEACON lost, last STA in this IBSS, MediaState=Disconnected\n"));
+ LinkDown(pAd, FALSE);
- for (i=1; i<MAX_LEN_OF_MAC_TABLE; i++)
- {
- if (pAd->MacTab.Content[i].ValidAsCLI == TRUE)
- MacTableDeleteEntry(pAd, pAd->MacTab.Content[i].Aid, pAd->MacTab.Content[i].Addr);
- }
-
- // Delete every BA session with BSSID before tear down INFRA.
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);
- pAd->IndicateMediaState = NdisMediaStateDisconnected;
- RTMP_IndicateMediaState(pAd);
- pAd->ExtraInfo = GENERAL_LINK_DOWN;
- // clean up previous SCAN result, add current BSS back to table if any
- BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, pAd->CommonCfg.Channel);
-
- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32;
- pAd->StaCfg.LastScanTime = pAd->Mlme.Now32;
+ StartParmFill(pAd, &StartReq, pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen);
+ MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq);
+ pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START;
}
-#endif
}
else // no INFRA nor ADHOC connection
{
- DBGPRINT(RT_DEBUG_INFO, ("STAMlmePeriodicExec, no association so far\n"));
if (pAd->StaCfg.bScanReqIsFromWebUI &&
((pAd->StaCfg.LastScanTime + 30 * OS_HZ) > pAd->Mlme.Now32))
@@ -1275,13 +1321,13 @@ VOID STAMlmePeriodicExec(
#endif // CARRIER_DETECTION_SUPPORT //
MlmeAutoReconnectLastSSID(pAd);
}
-
- DBGPRINT(RT_DEBUG_INFO, ("pAd->StaCfg.bAutoReconnect is TRUE\n"));
}
}
}
SKIP_AUTO_SCAN_CONN:
+
+#ifdef DOT11_N_SUPPORT
if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap !=0) && (pAd->MacTab.fAnyBASession == FALSE))
{
pAd->MacTab.fAnyBASession = TRUE;
@@ -1292,13 +1338,18 @@ SKIP_AUTO_SCAN_CONN:
pAd->MacTab.fAnyBASession = FALSE;
AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE);
}
+#endif // DOT11_N_SUPPORT //
+
+#ifdef DOT11_N_SUPPORT
#ifdef DOT11N_DRAFT3
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SCAN_2040))
TriEventCounterMaintenance(pAd);
#endif // DOT11N_DRAFT3 //
+#endif // DOT11_N_SUPPORT //
- }
+ return;
+}
// Link down report
VOID LinkDownExec(
@@ -1336,6 +1387,8 @@ VOID MlmeAutoScan(
VOID MlmeAutoReconnectLastSSID(
IN PRTMP_ADAPTER pAd)
{
+
+
// check CntlMachine.CurrState to avoid collision with NDIS SetOID request
if ((pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) &&
(MlmeValidateSSID(pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen) == TRUE))
@@ -1398,21 +1451,54 @@ VOID MlmeSelectTxRateTable(
*ppTable = RateSwitchTable;
*pTableSize = RateSwitchTable[0];
*pInitTxRateIdx = RateSwitchTable[1];
-
- DBGPRINT_RAW(RT_DEBUG_TRACE,("DRS: rate table is from rate.bin \n"));
+
break;
}
#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- if (ADHOC_ON(pAd))
- {
- if (pAd->CommonCfg.PhyMode == PHY_11B)
+ if ((pAd->OpMode == OPMODE_STA) && ADHOC_ON(pAd))
+ {
+#ifdef DOT11_N_SUPPORT
+ if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) &&
+ !pAd->StaCfg.AdhocBOnlyJoined &&
+ !pAd->StaCfg.AdhocBGJoined &&
+ (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) &&
+ ((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1)))
+ {// 11N 1S Adhoc
+ *ppTable = RateSwitchTable11N1S;
+ *pTableSize = RateSwitchTable11N1S[0];
+ *pInitTxRateIdx = RateSwitchTable11N1S[1];
+
+ }
+ else if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) &&
+ !pAd->StaCfg.AdhocBOnlyJoined &&
+ !pAd->StaCfg.AdhocBGJoined &&
+ (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) &&
+ (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) &&
+ (pAd->Antenna.field.TxPath == 2))
+ {// 11N 2S Adhoc
+ if (pAd->LatchRfRegs.Channel <= 14)
+ {
+ *ppTable = RateSwitchTable11N2S;
+ *pTableSize = RateSwitchTable11N2S[0];
+ *pInitTxRateIdx = RateSwitchTable11N2S[1];
+ }
+ else
+ {
+ *ppTable = RateSwitchTable11N2SForABand;
+ *pTableSize = RateSwitchTable11N2SForABand[0];
+ *pInitTxRateIdx = RateSwitchTable11N2SForABand[1];
+ }
+
+ }
+ else
+#endif // DOT11_N_SUPPORT //
+ if (pAd->CommonCfg.PhyMode == PHY_11B)
{
*ppTable = RateSwitchTable11B;
*pTableSize = RateSwitchTable11B[0];
*pInitTxRateIdx = RateSwitchTable11B[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: B only Adhoc \n"));
+
}
else if((pAd->LatchRfRegs.Channel <= 14) && (pAd->StaCfg.AdhocBOnlyJoined == TRUE))
{
@@ -1420,36 +1506,37 @@ VOID MlmeSelectTxRateTable(
*ppTable = RateSwitchTable11B;
*pTableSize = RateSwitchTable11B[0];
*pInitTxRateIdx = RateSwitchTable11B[1];
- DBGPRINT_RAW(RT_DEBUG_TRACE,("DRS: only B in my Adhoc . PhyMode= %d. ExtRateLen = %d.\n", pAd->CommonCfg.PhyMode, pAd->StaActive.ExtRateLen ));
+
}
else if (pAd->LatchRfRegs.Channel <= 14)
{
*ppTable = RateSwitchTable11BG;
*pTableSize = RateSwitchTable11BG[0];
*pInitTxRateIdx = RateSwitchTable11BG[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: B/G mixed Adhoc \n"));
+
}
else
{
*ppTable = RateSwitchTable11G;
*pTableSize = RateSwitchTable11G[0];
*pInitTxRateIdx = RateSwitchTable11G[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: A/G Adhoc \n"));
+
}
break;
}
#endif // CONFIG_STA_SUPPORT //
+#ifdef DOT11_N_SUPPORT
if ((pEntry->RateLen == 12) && (pEntry->HTCapability.MCSSet[0] == 0xff) &&
((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->CommonCfg.TxStream == 1)))
{// 11BGN 1S AP
*ppTable = RateSwitchTable11BGN1S;
*pTableSize = RateSwitchTable11BGN1S[0];
*pInitTxRateIdx = RateSwitchTable11BGN1S[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: 11BGN 1S AP \n"));
+
break;
}
-
+
if ((pEntry->RateLen == 12) && (pEntry->HTCapability.MCSSet[0] == 0xff) &&
(pEntry->HTCapability.MCSSet[1] == 0xff) && (pAd->CommonCfg.TxStream == 2))
{// 11BGN 2S AP
@@ -1458,14 +1545,14 @@ VOID MlmeSelectTxRateTable(
*ppTable = RateSwitchTable11BGN2S;
*pTableSize = RateSwitchTable11BGN2S[0];
*pInitTxRateIdx = RateSwitchTable11BGN2S[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: 11BGN 2S AP \n"));
+
}
else
{
*ppTable = RateSwitchTable11BGN2SForABand;
*pTableSize = RateSwitchTable11BGN2SForABand[0];
*pInitTxRateIdx = RateSwitchTable11BGN2SForABand[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: 11AN 2S AP \n"));
+
}
break;
}
@@ -1475,7 +1562,7 @@ VOID MlmeSelectTxRateTable(
*ppTable = RateSwitchTable11N1S;
*pTableSize = RateSwitchTable11N1S[0];
*pInitTxRateIdx = RateSwitchTable11N1S[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: 11N 1S AP \n"));
+
break;
}
@@ -1493,66 +1580,84 @@ VOID MlmeSelectTxRateTable(
*pTableSize = RateSwitchTable11N2SForABand[0];
*pInitTxRateIdx = RateSwitchTable11N2SForABand[1];
}
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: 11N 2S AP \n"));
+
break;
}
-
- if ((pEntry->RateLen == 4) && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0))
+#endif // DOT11_N_SUPPORT //
+ //else if ((pAd->StaActive.SupRateLen == 4) && (pAd->StaActive.ExtRateLen == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0))
+ if ((pEntry->RateLen == 4)
+#ifdef DOT11_N_SUPPORT
+ && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)
+#endif // DOT11_N_SUPPORT //
+ )
{// B only AP
*ppTable = RateSwitchTable11B;
*pTableSize = RateSwitchTable11B[0];
*pInitTxRateIdx = RateSwitchTable11B[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: B only AP \n"));
+
break;
}
- if ((pEntry->RateLen > 8) && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0))
+ //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen > 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0))
+ if ((pEntry->RateLen > 8)
+#ifdef DOT11_N_SUPPORT
+ && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)
+#endif // DOT11_N_SUPPORT //
+ )
{// B/G mixed AP
*ppTable = RateSwitchTable11BG;
*pTableSize = RateSwitchTable11BG[0];
*pInitTxRateIdx = RateSwitchTable11BG[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: B/G mixed AP \n"));
+
break;
}
- if ((pEntry->RateLen == 8) && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0))
+ //else if ((pAd->StaActive.SupRateLen + pAd->StaActive.ExtRateLen == 8) && (pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0))
+ if ((pEntry->RateLen == 8)
+#ifdef DOT11_N_SUPPORT
+ && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)
+#endif // DOT11_N_SUPPORT //
+ )
{// G only AP
*ppTable = RateSwitchTable11G;
*pTableSize = RateSwitchTable11G[0];
*pInitTxRateIdx = RateSwitchTable11G[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: A/G AP \n"));
+
break;
}
+#ifdef DOT11_N_SUPPORT
+#endif // DOT11_N_SUPPORT //
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
+#ifdef DOT11_N_SUPPORT
+ //else if ((pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0) && (pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0))
if ((pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0))
- {// Legacy mode
+#endif // DOT11_N_SUPPORT //
+ { // Legacy mode
if (pAd->CommonCfg.MaxTxRate <= RATE_11)
{
*ppTable = RateSwitchTable11B;
*pTableSize = RateSwitchTable11B[0];
*pInitTxRateIdx = RateSwitchTable11B[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: B only AP (MaxTx=%d,MinTx=%d)\n", pAd->CommonCfg.MaxTxRate, pAd->CommonCfg.MinTxRate));
}
else if ((pAd->CommonCfg.MaxTxRate > RATE_11) && (pAd->CommonCfg.MinTxRate > RATE_11))
{
*ppTable = RateSwitchTable11G;
*pTableSize = RateSwitchTable11G[0];
*pInitTxRateIdx = RateSwitchTable11G[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: A/G AP (MaxTx=%d,MinTx=%d)\n", pAd->CommonCfg.MaxTxRate, pAd->CommonCfg.MinTxRate));
+
}
else
{
*ppTable = RateSwitchTable11BG;
*pTableSize = RateSwitchTable11BG[0];
*pInitTxRateIdx = RateSwitchTable11BG[1];
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: B/G mixed AP (MaxTx=%d,MinTx=%d)\n", pAd->CommonCfg.MaxTxRate, pAd->CommonCfg.MinTxRate));
}
break;
}
-
+#ifdef DOT11_N_SUPPORT
if (pAd->LatchRfRegs.Channel <= 14)
{
if (pAd->CommonCfg.TxStream == 1)
@@ -1587,6 +1692,7 @@ VOID MlmeSelectTxRateTable(
DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode,default use 11N 2S AP \n"));
}
}
+#endif // DOT11_N_SUPPORT //
DBGPRINT_RAW(RT_DEBUG_ERROR,("DRS: unkown mode (SupRateLen=%d, ExtRateLen=%d, MCSSet[0]=0x%x, MCSSet[1]=0x%x)\n",
pAd->StaActive.SupRateLen, pAd->StaActive.ExtRateLen, pAd->StaActive.SupportedPhyInfo.MCSSet[0], pAd->StaActive.SupportedPhyInfo.MCSSet[1]));
}
@@ -1810,14 +1916,7 @@ VOID MlmeCalculateChannelQuality(
if (pAd->Mlme.ChannelQuality >= 100)
pAd->Mlme.ChannelQuality = 100;
}
-
- DBGPRINT(RT_DEBUG_INFO, ("MMCHK - CQI= %ld (Tx Fail=%u/Retry=%u/Total=%lu, Rx Fail=%u/Total=%lu, RSSI=%d dbm)\n",
- pAd->Mlme.ChannelQuality,
- pAd->RalinkCounters.OneSecTxFailCount,
- pAd->RalinkCounters.OneSecTxRetryOkCount,
- TxCnt,
- pAd->RalinkCounters.OneSecRxFcsErrCnt,
- RxCnt, MaxRssi));
+
}
VOID MlmeSetTxRate(
@@ -1825,9 +1924,15 @@ VOID MlmeSetTxRate(
IN PMAC_TABLE_ENTRY pEntry,
IN PRTMP_TX_RATE_SWITCH pTxRate)
{
+ UCHAR MaxMode = MODE_OFDM;
+
+#ifdef DOT11_N_SUPPORT
+ MaxMode = MODE_HTGREENFIELD;
+
if (pTxRate->STBC && (pAd->StaCfg.MaxHTPhyMode.field.STBC) && (pAd->Antenna.field.TxPath == 2))
pAd->StaCfg.HTPhyMode.field.STBC = STBC_USE;
else
+#endif // DOT11_N_SUPPORT //
pAd->StaCfg.HTPhyMode.field.STBC = STBC_NONE;
if (pTxRate->CurrMCS < MCS_AUTO)
@@ -1840,7 +1945,7 @@ VOID MlmeSetTxRate(
{
// If peer adhoc is b-only mode, we can't send 11g rate.
pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800;
- pEntry->HTPhyMode.field.STBC = 0;
+ pEntry->HTPhyMode.field.STBC = STBC_NONE;
//
// For Adhoc MODE_CCK, driver will use AdhocBOnlyJoined flag to roll back to B only if necessary
@@ -1853,15 +1958,18 @@ VOID MlmeSetTxRate(
pAd->StaCfg.HTPhyMode.field.MODE = pEntry->HTPhyMode.field.MODE;
}
else
- {
- if (pTxRate->Mode <= MODE_HTGREENFIELD)
- pAd->StaCfg.HTPhyMode.field.MODE = pTxRate->Mode;
+ {
+ if (pTxRate->Mode <= MaxMode)
+ pAd->StaCfg.HTPhyMode.field.MODE = pTxRate->Mode;
- if (pTxRate->ShortGI && (pAd->StaCfg.MaxHTPhyMode.field.ShortGI))
+#ifdef DOT11_N_SUPPORT
+ if (pTxRate->ShortGI && (pAd->StaCfg.MaxHTPhyMode.field.ShortGI))
pAd->StaCfg.HTPhyMode.field.ShortGI = GI_400;
else
+#endif // DOT11_N_SUPPORT //
pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800;
+#ifdef DOT11_N_SUPPORT
// Reexam each bandwidth's SGI support.
if (pAd->StaCfg.HTPhyMode.field.ShortGI == GI_400)
{
@@ -1871,7 +1979,7 @@ VOID MlmeSetTxRate(
pAd->StaCfg.HTPhyMode.field.ShortGI = GI_800;
}
- // Turn RTS/CTS rate to 6Mbps.
+ // Turn RTS/CTS rate to 6Mbps.
if ((pEntry->HTPhyMode.field.MCS == 0) && (pAd->StaCfg.HTPhyMode.field.MCS != 0))
{
pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
@@ -1905,19 +2013,20 @@ VOID MlmeSetTxRate(
{
AsicUpdateProtect(pAd, HT_RTSCTS_6M, ALLN_SETPROTECT, TRUE, (BOOLEAN)pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent);
}
-
+#endif // DOT11_N_SUPPORT //
+
pEntry->HTPhyMode.field.STBC = pAd->StaCfg.HTPhyMode.field.STBC;
pEntry->HTPhyMode.field.ShortGI = pAd->StaCfg.HTPhyMode.field.ShortGI;
pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE;
- if ((pAd->StaCfg.MaxHTPhyMode.field.MODE == MODE_HTGREENFIELD) &&
- pAd->WIFItestbed.bGreenField)
- pEntry->HTPhyMode.field.MODE = MODE_HTGREENFIELD;
- }
- pAd->LastTxRate = (USHORT)(pEntry->HTPhyMode.word);
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: MlmeSetTxRate - CurrTxRateIdx=%d, MCS=%d, STBC=%d, ShortGI=%d, Mode=%d, BW=%d \n", pAd->CommonCfg.TxRateIndex,
- pAd->StaCfg.HTPhyMode.field.MCS, pAd->StaCfg.HTPhyMode.field.STBC, pAd->StaCfg.HTPhyMode.field.ShortGI,
- pAd->StaCfg.HTPhyMode.field.MODE, pAd->StaCfg.HTPhyMode.field.BW));
+#ifdef DOT11_N_SUPPORT
+ if ((pAd->StaCfg.MaxHTPhyMode.field.MODE == MODE_HTGREENFIELD) &&
+ pAd->WIFItestbed.bGreenField)
+ pEntry->HTPhyMode.field.MODE = MODE_HTGREENFIELD;
+#endif // DOT11_N_SUPPORT //
+ }
+
+ pAd->LastTxRate = (USHORT)(pEntry->HTPhyMode.word);
}
/*
@@ -1943,7 +2052,7 @@ VOID MlmeDynamicTxRateSwitching(
UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx;
ULONG i, AccuTxTotalCnt = 0, TxTotalCnt;
ULONG TxErrorRatio = 0;
- BOOLEAN bTxRateChanged = TRUE, bUpgradeQuality = FALSE;
+ BOOLEAN bTxRateChanged, bUpgradeQuality = FALSE;
PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL;
PUCHAR pTable;
UCHAR TableSize = 0;
@@ -1961,10 +2070,10 @@ VOID MlmeDynamicTxRateSwitching(
}
#endif // RALINK_ATE //
- if (pAd->Antenna.field.RxPath > 1)
+ /*if (pAd->Antenna.field.RxPath > 1)
Rssi = (pAd->StaCfg.RssiSample.AvgRssi0 + pAd->StaCfg.RssiSample.AvgRssi1) >> 1;
else
- Rssi = pAd->StaCfg.RssiSample.AvgRssi0;
+ Rssi = pAd->StaCfg.RssiSample.AvgRssi0;*/
//
// walk through MAC table, see if need to change AP's TX rate toward each entry
@@ -1977,8 +2086,10 @@ VOID MlmeDynamicTxRateSwitching(
if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE)
continue;
- if (pAd->MacTab.Size == 1)
+ if ((pAd->MacTab.Size == 1) || (pEntry->ValidAsDls))
{
+ Rssi = RTMPMaxRssi(pAd, (CHAR)pAd->StaCfg.RssiSample.AvgRssi0, (CHAR)pAd->StaCfg.RssiSample.AvgRssi1, (CHAR)pAd->StaCfg.RssiSample.AvgRssi2);
+
// Update statistic counter
RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word);
RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word);
@@ -2007,6 +2118,8 @@ VOID MlmeDynamicTxRateSwitching(
}
else
{
+ Rssi = RTMPMaxRssi(pAd, (CHAR)pEntry->RssiSample.AvgRssi0, (CHAR)pEntry->RssiSample.AvgRssi1, (CHAR)pEntry->RssiSample.AvgRssi2);
+
TxTotalCnt = pEntry->OneSecTxNoRetryOkCount +
pEntry->OneSecTxRetryOkCount +
pEntry->OneSecTxFailCount;
@@ -2019,6 +2132,11 @@ VOID MlmeDynamicTxRateSwitching(
MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &InitTxRateIdx);
+ if (CurrRateIdx >= TableSize)
+ {
+ CurrRateIdx = TableSize - 1;
+ }
+
// When switch from Fixed rate -> auto rate, the REAL TX rate might be different from pAd->CommonCfg.TxRateIndex.
// So need to sync here.
pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5];
@@ -2026,7 +2144,7 @@ VOID MlmeDynamicTxRateSwitching(
//&& (pAd->StaCfg.bAutoTxRateSwitch == TRUE)
)
{
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: CurrRateIdx = %d, InitTxRateIdx = %d. \n", CurrRateIdx, InitTxRateIdx));
+
// Need to sync Real Tx rate and our record.
// Then return for next DRS.
pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(InitTxRateIdx+1)*5];
@@ -2057,12 +2175,14 @@ VOID MlmeDynamicTxRateSwitching(
pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5];
+#ifdef DOT11_N_SUPPORT
if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX))
{
TrainUp = (pCurrTxRate->TrainUp + (pCurrTxRate->TrainUp >> 1));
TrainDown = (pCurrTxRate->TrainDown + (pCurrTxRate->TrainDown >> 1));
}
else
+#endif // DOT11_N_SUPPORT //
{
TrainUp = pCurrTxRate->TrainUp;
TrainDown = pCurrTxRate->TrainDown;
@@ -2074,24 +2194,8 @@ VOID MlmeDynamicTxRateSwitching(
// Keep the last time TxRateChangeAction status.
//
pEntry->LastTimeTxRateChangeAction = pEntry->LastSecTxRateChangeAction;
+
- DBGPRINT(RT_DEBUG_INFO, ("DRS: TxSuccess=%lu, TxRetransmit=%lu, TxFailCount=%lu, TxErrorRatio=%lu\n",
- TxSuccess, TxRetransmit, TxFailCount, TxErrorRatio));
-
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: Before- CurrTxRateIdx=%d, MCS=%d, STBC=%d, ShortGI=%d, Mode=%d, TrainUp=%d, TrainDown=%d, NextUp=%d, NextDown=%d, CurrMCS=%d, PER=%lu%%, Retry=%lu, NoRetry=%lu\n",
- CurrRateIdx,
- pCurrTxRate->CurrMCS,
- pCurrTxRate->STBC,
- pCurrTxRate->ShortGI,
- pCurrTxRate->Mode,
- TrainUp,
- TrainDown,
- UpRateIdx,
- DownRateIdx,
- pEntry->HTPhyMode.field.MCS,
- TxErrorRatio,
- TxRetransmit,
- TxSuccess));
//
// CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI
@@ -2202,7 +2306,7 @@ VOID MlmeDynamicTxRateSwitching(
RssiOffset = 8;
}
}
-
+#ifdef DOT11_N_SUPPORT
/*if (MCS15)*/
if ((pTable == RateSwitchTable11BGN3S) ||
(pTable == RateSwitchTable11N3S) ||
@@ -2268,6 +2372,7 @@ VOID MlmeDynamicTxRateSwitching(
TxRateIdx = MCS0;
}
else
+#endif // DOT11_N_SUPPORT //
{// Legacy mode
if (MCS7 && (Rssi > -70))
TxRateIdx = MCS7;
@@ -2298,9 +2403,6 @@ VOID MlmeDynamicTxRateSwitching(
NdisZeroMemory(pEntry->TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH);
NdisZeroMemory(pEntry->PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH);
pEntry->fLastSecAccordingRSSI = TRUE;
-
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: AccuTxTotalCnt <= 15, switch TxRateIndex as (%d) according to RSSI(%d), RssiOffset=%d\n", pEntry->CurrTxRateIndex, Rssi, RssiOffset));
-
// reset all OneSecTx counters
RESET_ONE_SEC_TX_CNT(pEntry);
@@ -2311,8 +2413,6 @@ VOID MlmeDynamicTxRateSwitching(
{
pEntry->fLastSecAccordingRSSI = FALSE;
pEntry->LastSecTxRateChangeAction = 0;
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: MCS is according to RSSI, and ignore tuning this sec \n"));
-
// reset all OneSecTx counters
RESET_ONE_SEC_TX_CNT(pEntry);
@@ -2364,8 +2464,6 @@ VOID MlmeDynamicTxRateSwitching(
// if rate-up happen, clear all bad history of all TX rates
if (pEntry->CurrTxRateIndex > CurrRateIdx)
{
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: ++TX rate from %d to %d \n", CurrRateIdx, pEntry->CurrTxRateIndex));
-
pEntry->CurrTxRateStableTime = 0;
pEntry->TxRateUpPenalty = 0;
pEntry->LastSecTxRateChangeAction = 1; // rate UP
@@ -2381,12 +2479,11 @@ VOID MlmeDynamicTxRateSwitching(
pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = TRUE;
}
+ bTxRateChanged = TRUE;
}
// if rate-down happen, only clear DownRate's bad history
else if (pEntry->CurrTxRateIndex < CurrRateIdx)
{
- DBGPRINT_RAW(RT_DEBUG_INFO,("DRS: --TX rate from %d to %d \n", CurrRateIdx, pEntry->CurrTxRateIndex));
-
pEntry->CurrTxRateStableTime = 0;
pEntry->TxRateUpPenalty = 0; // no penalty
pEntry->LastSecTxRateChangeAction = 2; // rate DOWN
@@ -2402,6 +2499,7 @@ VOID MlmeDynamicTxRateSwitching(
pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = TRUE;
}
+ bTxRateChanged = TRUE;
}
else
{
@@ -2460,10 +2558,6 @@ VOID StaQuickResponeForRateUpExec(
MAC_TABLE_ENTRY *pEntry;
ULONG i;
- // check if this entry need to switch rate automatically
- if (RTMPCheckEntryEnableAutoRateSwitch(pAd, NULL) == FALSE)
- return;
-
pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE;
//
@@ -2473,6 +2567,10 @@ VOID StaQuickResponeForRateUpExec(
{
pEntry = &pAd->MacTab.Content[i];
+ // check if this entry need to switch rate automatically
+ if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE)
+ continue;
+
//Rssi = RTMPMaxRssi(pAd, (CHAR)pAd->StaCfg.AvgRssi0, (CHAR)pAd->StaCfg.AvgRssi1, (CHAR)pAd->StaCfg.AvgRssi2);
if (pAd->Antenna.field.TxPath > 1)
Rssi = (pAd->StaCfg.RssiSample.AvgRssi0 + pAd->StaCfg.RssiSample.AvgRssi1) >> 1;
@@ -2502,12 +2600,14 @@ VOID StaQuickResponeForRateUpExec(
pCurrTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(CurrRateIdx+1)*5];
+#ifdef DOT11_N_SUPPORT
if ((Rssi > -65) && (pCurrTxRate->Mode >= MODE_HTMIX))
{
TrainUp = (pCurrTxRate->TrainUp + (pCurrTxRate->TrainUp >> 1));
TrainDown = (pCurrTxRate->TrainDown + (pCurrTxRate->TrainDown >> 1));
}
else
+#endif // DOT11_N_SUPPORT //
{
TrainUp = pCurrTxRate->TrainUp;
TrainDown = pCurrTxRate->TrainDown;
@@ -2544,9 +2644,7 @@ VOID StaQuickResponeForRateUpExec(
TxErrorRatio = ((pEntry->OneSecTxRetryOkCount + pEntry->OneSecTxFailCount) * 100) / TxTotalCnt;
}
- DBGPRINT(RT_DEBUG_INFO, ("QuickDRS: OneSecTxNoRetryOkCount=%ld, OneSecTxRetryOkCount=%ld, OneSecTxFailCount=%ld, TxErrorRatio=%ld \n",
- TxSuccess, TxRetransmit, TxFailCount, TxErrorRatio));
-
+
//
// CASE 1. when TX samples are fewer than 15, then decide TX rate solely on RSSI
// (criteria copied from RT2500 for Netopia case)
@@ -2596,27 +2694,19 @@ VOID StaQuickResponeForRateUpExec(
{
pAd->CommonCfg.TxRateIndex = DownRateIdx;
pAd->DrsCounters.TxQuality[CurrRateIdx] = DRS_TX_QUALITY_WORST_BOUND;
- DBGPRINT_RAW(RT_DEBUG_INFO,("QuickDRS: (Up) bad tx ok count (L:%ld, C:%ld)\n", pAd->DrsCounters.LastTxOkCount, OneSecTxNoRetryOKRationCount));
- }
- else
- {
- DBGPRINT_RAW(RT_DEBUG_INFO,("QuickDRS: (Up) keep rate-up (L:%ld, C:%ld)\n", pAd->DrsCounters.LastTxOkCount, OneSecTxNoRetryOKRationCount));
+
}
+
}
else if ((pAd->DrsCounters.LastSecTxRateChangeAction == 2) && (CurrRateIdx != UpRateIdx))
{
if ((TxErrorRatio >= 50) || (TxErrorRatio >= TrainDown))
{
- DBGPRINT_RAW(RT_DEBUG_INFO,("QuickDRS: (Down) direct train down (TxErrorRatio >= TrainDown)\n"));
+
}
else if ((pAd->DrsCounters.LastTxOkCount + 2) >= OneSecTxNoRetryOKRationCount)
{
pAd->CommonCfg.TxRateIndex = UpRateIdx;
- DBGPRINT_RAW(RT_DEBUG_INFO,("QuickDRS: (Down) bad tx ok count (L:%ld, C:%ld)\n", pAd->DrsCounters.LastTxOkCount, OneSecTxNoRetryOKRationCount));
- }
- else
- {
- DBGPRINT_RAW(RT_DEBUG_INFO,("QuickDRS: (Down) keep rate-down (L:%ld, C:%ld)\n", pAd->DrsCounters.LastTxOkCount, OneSecTxNoRetryOKRationCount));
}
}
}while (FALSE);
@@ -2624,8 +2714,6 @@ VOID StaQuickResponeForRateUpExec(
// if rate-up happen, clear all bad history of all TX rates
if (pAd->CommonCfg.TxRateIndex > CurrRateIdx)
{
- DBGPRINT_RAW(RT_DEBUG_INFO,("QuickDRS: ++TX rate from %d to %d \n", CurrRateIdx, pAd->CommonCfg.TxRateIndex));
-
pAd->DrsCounters.TxRateUpPenalty = 0;
NdisZeroMemory(pAd->DrsCounters.TxQuality, sizeof(USHORT) * MAX_STEP_OF_TX_RATE_SWITCH);
NdisZeroMemory(pAd->DrsCounters.PER, sizeof(UCHAR) * MAX_STEP_OF_TX_RATE_SWITCH);
@@ -2642,7 +2730,6 @@ VOID StaQuickResponeForRateUpExec(
else
{
bTxRateChanged = FALSE;
- DBGPRINT_RAW(RT_DEBUG_INFO,("QuickDRS: rate is not changed \n"));
}
pNextTxRate = (PRTMP_TX_RATE_SWITCH) &pTable[(pAd->CommonCfg.TxRateIndex+1)*5];
@@ -2874,18 +2961,13 @@ VOID MlmeUpdateTxRates(
auto_rate_cur_p = &pAd->StaCfg.bAutoTxRateSwitch;
HtMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS;
- }
-
- // 2003-12-10 802.11g WIFI spec disallow OFDM rates in 802.11g ADHOC mode
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- if ((pAd->StaCfg.BssType == BSS_ADHOC) &&
- ((pAd->CommonCfg.PhyMode == PHY_11BG_MIXED)) &&
- (pAd->StaCfg.AdhocMode == 0) &&
- (MaxDesire > RATE_11))
- {
- MaxDesire = RATE_11;
- DBGPRINT(RT_DEBUG_INFO,("MlmeUpdateTxRates. 2 MaxDesire = %d. OpMode=%d\n", MaxDesire, pAd->OpMode));
-
+
+ if ((pAd->StaCfg.BssType == BSS_ADHOC) &&
+ (pAd->CommonCfg.PhyMode == PHY_11B) &&
+ (MaxDesire > RATE_11))
+ {
+ MaxDesire = RATE_11;
+ }
}
#endif // CONFIG_STA_SUPPORT //
@@ -2979,8 +3061,9 @@ VOID MlmeUpdateTxRates(
if (MinSupport > Rate) MinSupport = Rate;
}
+
RTMP_IO_WRITE32(pAd, LEGACY_BASIC_RATE, BasicRateBitmap);
-
+
// calculate the exptected ACK rate for each TX rate. This info is used to caculate
// the DURATION field of outgoing uniicast DATA/MGMT frame
for (i=0; i<MAX_LEN_OF_SUPPORTED_RATES; i++)
@@ -2988,7 +3071,6 @@ VOID MlmeUpdateTxRates(
if (BasicRateBitmap & (0x01 << i))
CurrBasicRate = (UCHAR)i;
pAd->CommonCfg.ExpectedACKRate[i] = CurrBasicRate;
- DBGPRINT(RT_DEBUG_INFO,("Exptected ACK rate[%d] = %d Mbps\n", RateIdToMbps[i], RateIdToMbps[CurrBasicRate]));
}
DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateTxRates[MaxSupport = %d] = MaxDesire %d Mbps\n", RateIdToMbps[MaxSupport], RateIdToMbps[MaxDesire]));
@@ -3021,7 +3103,6 @@ VOID MlmeUpdateTxRates(
pAd->CommonCfg.TxRate = pAd->CommonCfg.MaxTxRate;
pAd->CommonCfg.TxRateIndex = 0;
- DBGPRINT(RT_DEBUG_INFO, (" MlmeUpdateTxRates (Rssi=%d, init TX rate = %d Mbps)\n", dbm, RateIdToMbps[pAd->CommonCfg.TxRate]));
}
else
{
@@ -3064,26 +3145,32 @@ VOID MlmeUpdateTxRates(
{
case PHY_11BG_MIXED:
case PHY_11B:
+#ifdef DOT11_N_SUPPORT
case PHY_11BGN_MIXED:
+#endif // DOT11_N_SUPPORT //
pAd->CommonCfg.MlmeRate = RATE_1;
pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK;
- pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1;
+ pAd->CommonCfg.MlmeTransmit.field.MCS = RATE_1;
pAd->CommonCfg.RtsRate = RATE_11;
break;
+ case PHY_11G:
+ case PHY_11A:
+#ifdef DOT11_N_SUPPORT
case PHY_11AGN_MIXED:
case PHY_11GN_MIXED:
case PHY_11N_2_4G:
- case PHY_11G:
- case PHY_11A:
case PHY_11AN_MIXED:
case PHY_11N_5G:
+#endif // DOT11_N_SUPPORT //
pAd->CommonCfg.MlmeRate = RATE_6;
pAd->CommonCfg.RtsRate = RATE_6;
pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM;
pAd->CommonCfg.MlmeTransmit.field.MCS = OfdmRateToRxwiMCS[pAd->CommonCfg.MlmeRate];
break;
case PHY_11ABG_MIXED:
+#ifdef DOT11_N_SUPPORT
case PHY_11ABGN_MIXED:
+#endif // DOT11_N_SUPPORT //
if (pAd->CommonCfg.Channel <= 14)
{
pAd->CommonCfg.MlmeRate = RATE_1;
@@ -3126,6 +3213,7 @@ VOID MlmeUpdateTxRates(
pAd->CommonCfg.MlmeTransmit.word, pAd->MacTab.Content[BSSID_WCID].MinHTPhyMode.word ,pAd->MacTab.Content[BSSID_WCID].MaxHTPhyMode.word ,pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word ));
}
+#ifdef DOT11_N_SUPPORT
/*
==========================================================================
Description:
@@ -3247,6 +3335,7 @@ VOID MlmeUpdateHtTxRates(
pMinHtPhy->field.MCS = 32;
DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates<=== Use Fixed MCS = %d\n",pMinHtPhy->field.MCS));
}
+
for (i=23; (CHAR)i >= 0; i--) // 3*3
{
j = i/8;
@@ -3255,7 +3344,6 @@ VOID MlmeUpdateHtTxRates(
{
pMaxHtPhy->field.MCS = i;
pMinHtPhy->field.MCS = i;
- DBGPRINT(RT_DEBUG_INFO,("MlmeUpdateHtTxRates<=== Use Fixed MCS = %d\n", i));
break;
}
if (i==0)
@@ -3283,6 +3371,7 @@ VOID MlmeUpdateHtTxRates(
pHtPhy->field.BW, pHtPhy->field.ShortGI, pHtPhy->field.MODE));
DBGPRINT(RT_DEBUG_TRACE,("MlmeUpdateHtTxRates<=== \n"));
}
+#endif // DOT11_N_SUPPORT //
// IRQL = DISPATCH_LEVEL
VOID MlmeRadioOff(
@@ -3327,6 +3416,7 @@ VOID BssTableInit(
}
}
+#ifdef DOT11_N_SUPPORT
VOID BATableInit(
IN PRTMP_ADAPTER pAd,
IN BA_TABLE *Tab)
@@ -3346,6 +3436,7 @@ VOID BATableInit(
Tab->BAOriEntry[i].ORI_BA_Status = Originator_NONE;
}
}
+#endif // DOT11_N_SUPPORT //
/*! \brief search the BSS table by SSID
* \param p_tab pointer to the bss table
@@ -3441,7 +3532,6 @@ VOID BssTableDeleteEntry(
for (i = 0; i < Tab->BssNr; i++)
{
- //printf("comparing %s and %s\n", p_tab->bss[i].ssid, ssid);
if ((Tab->BssEntry[i].Channel == Channel) &&
(MAC_ADDR_EQUAL(Tab->BssEntry[i].Bssid, pBssid)))
{
@@ -3449,13 +3539,14 @@ VOID BssTableDeleteEntry(
{
NdisMoveMemory(&(Tab->BssEntry[j]), &(Tab->BssEntry[j + 1]), sizeof(BSS_ENTRY));
}
- Tab->BssNr -= 1;
- NdisZeroMemory(&(Tab->BssEntry[Tab->BssNr]), sizeof(BSS_ENTRY));
+ NdisZeroMemory(&(Tab->BssEntry[Tab->BssNr - 1]), sizeof(BSS_ENTRY));
+ Tab->BssNr -= 1;
return;
}
}
}
+#ifdef DOT11_N_SUPPORT
/*
========================================================================
Routine Description:
@@ -3487,6 +3578,7 @@ VOID BATableDeleteORIEntry(
NdisReleaseSpinLock(&pAd->BATabLock);
}
}
+#endif // DOT11_N_SUPPORT //
/*! \brief
* \param
@@ -3568,7 +3660,10 @@ VOID BssEntrySet(
// Combine with AuthMode, they will decide the connection methods.
pBss->Privacy = CAP_IS_PRIVACY_ON(pBss->CapabilityInfo);
ASSERT(SupRateLen <= MAX_LEN_OF_SUPPORTED_RATES);
- NdisMoveMemory(pBss->SupRate, SupRate, SupRateLen);
+ if (SupRateLen <= MAX_LEN_OF_SUPPORTED_RATES)
+ NdisMoveMemory(pBss->SupRate, SupRate, SupRateLen);
+ else
+ NdisMoveMemory(pBss->SupRate, SupRate, MAX_LEN_OF_SUPPORTED_RATES);
pBss->SupRateLen = SupRateLen;
ASSERT(ExtRateLen <= MAX_LEN_OF_SUPPORTED_RATES);
NdisMoveMemory(pBss->ExtRate, ExtRate, ExtRateLen);
@@ -3598,6 +3693,9 @@ VOID BssEntrySet(
pBss->VarIELen = 0;
}
+ pBss->AddHtInfoLen = 0;
+ pBss->HtCapabilityLen = 0;
+#ifdef DOT11_N_SUPPORT
if (HtCapabilityLen> 0)
{
pBss->HtCapabilityLen = HtCapabilityLen;
@@ -3616,11 +3714,8 @@ VOID BssEntrySet(
pBss->CentralChannel = pAddHtInfo->ControlChan + 2;
}
}
- else
- pBss->AddHtInfoLen = 0;
}
- else
- pBss->HtCapabilityLen = 0;
+#endif // DOT11_N_SUPPORT //
BssCipherParse(pBss);
@@ -3644,6 +3739,7 @@ VOID BssEntrySet(
PEID_STRUCT pEid;
USHORT Length = 0;
+
NdisZeroMemory(&pBss->WpaIE.IE[0], MAX_CUSTOM_LEN);
NdisZeroMemory(&pBss->RsnIE.IE[0], MAX_CUSTOM_LEN);
#ifdef EXT_BUILD_CHANNEL_LIST
@@ -3677,7 +3773,7 @@ VOID BssEntrySet(
}
pBss->RsnIE.IELen = pEid->Len + 2;
NdisMoveMemory(pBss->RsnIE.IE, pEid, pBss->RsnIE.IELen);
- }
+ }
break;
#ifdef EXT_BUILD_CHANNEL_LIST
case IE_COUNTRY:
@@ -3793,6 +3889,7 @@ ULONG BssTableSetEntry(
}
#ifdef CONFIG_STA_SUPPORT
+#ifdef DOT11_N_SUPPORT
#ifdef DOT11N_DRAFT3
VOID TriEventInit(
IN PRTMP_ADAPTER pAd)
@@ -3895,7 +3992,7 @@ VOID TriEventCounterMaintenance(
Update2040CoexistFrameAndNotify(pAd, BSSID_WCID, TRUE);
}
#endif // DOT11N_DRAFT3 //
-
+#endif // DOT11_N_SUPPORT //
// IRQL = DISPATCH_LEVEL
VOID BssTableSsidSort(
@@ -3929,6 +4026,7 @@ VOID BssTableSsidSort(
{
BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr];
+
#ifdef EXT_BUILD_CHANNEL_LIST
// If no Country IE exists no Connection will be established when IEEE80211dClientMode is strict.
if ((pAd->StaCfg.IEEE80211dClientMode == Rt802_11_D_Strict) &&
@@ -3939,6 +4037,7 @@ VOID BssTableSsidSort(
}
#endif // EXT_BUILD_CHANNEL_LIST //
+#ifdef DOT11_N_SUPPORT
// 2.4G/5G N only mode
if ((pInBss->HtCapabilityLen == 0) &&
((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G)))
@@ -3946,6 +4045,7 @@ VOID BssTableSsidSort(
DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n"));
continue;
}
+#endif // DOT11_N_SUPPORT //
// New for WPA2
// Check the Authmode first
@@ -4014,6 +4114,7 @@ VOID BssTableSsidSort(
if (SsidLen == 0)
continue;
+#ifdef DOT11_N_SUPPORT
// If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region
// If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead,
if ((pInBss->CentralChannel != pInBss->Channel) &&
@@ -4033,6 +4134,7 @@ VOID BssTableSsidSort(
}
}
}
+#endif // DOT11_N_SUPPORT //
// copy matching BSS from InTab to OutTab
NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY));
@@ -4044,6 +4146,7 @@ VOID BssTableSsidSort(
BSS_ENTRY *pOutBss = &OutTab->BssEntry[OutTab->BssNr];
+#ifdef DOT11_N_SUPPORT
// 2.4G/5G N only mode
if ((pInBss->HtCapabilityLen == 0) &&
((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G)))
@@ -4051,6 +4154,7 @@ VOID BssTableSsidSort(
DBGPRINT(RT_DEBUG_TRACE,("STA is in N-only Mode, this AP don't have Ht capability in Beacon.\n"));
continue;
}
+#endif // DOT11_N_SUPPORT //
// New for WPA2
// Check the Authmode first
@@ -4106,6 +4210,7 @@ VOID BssTableSsidSort(
else if (pAd->StaCfg.WepStatus != pInBss->WepStatus)
continue;
+#ifdef DOT11_N_SUPPORT
// If both station and AP use 40MHz, still need to check if the 40MHZ band's legality in my country region
// If this 40MHz wideband is not allowed in my country list, use bandwidth 20MHZ instead,
if ((pInBss->CentralChannel != pInBss->Channel) &&
@@ -4118,6 +4223,7 @@ VOID BssTableSsidSort(
pAd->CommonCfg.RegTransmitSetting.field.BW = BW_40;
}
}
+#endif // DOT11_N_SUPPORT //
// copy matching BSS from InTab to OutTab
NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY));
@@ -4196,6 +4302,8 @@ VOID BssCipherParse(
pBss->WPA2.GroupCipher = Ndis802_11WEPDisabled;
pBss->WPA2.RsnCapability = 0;
pBss->WPA2.bMixMode = FALSE;
+
+
Length = (INT) pBss->VarIELen;
while (Length > 0)
@@ -4492,7 +4600,6 @@ VOID BssCipherParse(
pBss->WPA2.bMixMode = TRUE;
break;
-
default:
break;
}
@@ -4685,8 +4792,6 @@ BOOLEAN MlmeEnqueue(
if (MlmeQueueFull(Queue))
{
- // Can't add debug print here. It'll make Mlme Stat machine freeze.
- DBGPRINT(RT_DEBUG_INFO, ("MlmeEnqueue: full, msg dropped and may corrupt MLME\n"));
return FALSE;
}
@@ -4711,7 +4816,6 @@ BOOLEAN MlmeEnqueue(
}
NdisReleaseSpinLock(&(Queue->Lock));
- DBGPRINT(RT_DEBUG_INFO, ("MlmeEnqueue, num=%ld\n",Queue->Num));
return TRUE;
}
@@ -4769,8 +4873,6 @@ BOOLEAN MlmeEnqueueForRecv(
if (MlmeQueueFull(Queue))
{
- // Can't add debug print here. It'll make Mlme Stat machine freeze.
- DBGPRINT(RT_DEBUG_INFO, ("MlmeEnqueueForRecv: full and dropped\n"));
return FALSE;
}
@@ -4794,9 +4896,6 @@ BOOLEAN MlmeEnqueueForRecv(
{
Queue->Tail = 0;
}
-
- DBGPRINT(RT_DEBUG_INFO, ("MlmeEnqueueForRecv, num=%ld\n",Queue->Num));
-
Queue->Entry[Tail].Occupied = TRUE;
Queue->Entry[Tail].Machine = Machine;
Queue->Entry[Tail].MsgType = MsgType;
@@ -4847,8 +4946,6 @@ BOOLEAN MlmeDequeue(
Queue->Head = 0;
}
NdisReleaseSpinLock(&(Queue->Lock));
- DBGPRINT(RT_DEBUG_INFO, ("MlmeDequeue, num=%ld\n",Queue->Num));
-
return TRUE;
}
@@ -5367,6 +5464,7 @@ VOID AsicUpdateAutoFallBackTable(
}
}
break;
+#ifdef DOT11_N_SUPPORT
case 2: //HT-MIX
case 3: //HT-GF
{
@@ -5428,6 +5526,7 @@ VOID AsicUpdateAutoFallBackTable(
}
}
break;
+#endif // DOT11_N_SUPPORT //
}
pNextTxRate = pCurrTxRate;
@@ -5437,8 +5536,6 @@ VOID AsicUpdateAutoFallBackTable(
RTMP_IO_WRITE32(pAd, HT_FBK_CFG1, HtCfg1.word);
RTMP_IO_WRITE32(pAd, LG_FBK_CFG0, LgCfg0.word);
RTMP_IO_WRITE32(pAd, LG_FBK_CFG1, LgCfg1.word);
-
- DBGPRINT(RT_DEBUG_INFO, ("AsicUpdateAutoFallBackTable: HtCfg0=0x%x, HtCfg1=0x%x, LgCfg0=0x%x, LgCfg1=0x%x \n", HtCfg0.word, HtCfg1.word, LgCfg0.word, LgCfg1.word));
}
/*
@@ -5476,6 +5573,7 @@ VOID AsicUpdateProtect(
return;
#endif // RALINK_ATE //
+#ifdef DOT11_N_SUPPORT
if (!(pAd->CommonCfg.bHTProtect) && (OperationMode != 8))
{
return;
@@ -5489,7 +5587,7 @@ VOID AsicUpdateProtect(
SetMask = ALLN_SETPROTECT;
OperationMode = 8;
}
-
+#endif // DOT11_N_SUPPORT //
// Config ASIC RTS threshold register
RTMP_IO_READ32(pAd, TX_RTS_CFG, &MacReg);
@@ -5498,7 +5596,11 @@ VOID AsicUpdateProtect(
MacReg |= (pAd->CommonCfg.RtsThreshold << 8);
#else
// If the user want disable RtsThreshold and enbale Amsdu/Ralink-Aggregation, set the RtsThreshold as 4096
- if (((pAd->CommonCfg.BACapability.field.AmsduEnable) || (pAd->CommonCfg.bAggregationCapable == TRUE))
+ if ((
+#ifdef DOT11_N_SUPPORT
+ (pAd->CommonCfg.BACapability.field.AmsduEnable) ||
+#endif // DOT11_N_SUPPORT //
+ (pAd->CommonCfg.bAggregationCapable == TRUE))
&& pAd->CommonCfg.RtsThreshold == MAX_RTS_THRESHOLD)
{
MacReg |= (0x1000 << 8);
@@ -5546,11 +5648,10 @@ VOID AsicUpdateProtect(
Protect[1] = ProtCfg.word;
}
+#ifdef DOT11_N_SUPPORT
// Decide HT frame protection.
if ((SetMask & ALLN_SETPROTECT) != 0)
{
- //pAd->CommonCfg.BACapability.field.RxBAWinLimit = pAd->CommonCfg.REGBACapability.field.RxBAWinLimit;
- DBGPRINT(RT_DEBUG_INFO, ("AsicUpdateProtect===>OperationMode = %d. \n", OperationMode));
switch(OperationMode)
{
case 0x0:
@@ -5610,7 +5711,7 @@ VOID AsicUpdateProtect(
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED))
{
ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18..
- ProtCfg4.word = 0x03f40083;
+ ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083;
}
//Assign Protection method for 20&40 MHz packets
ProtCfg.field.ProtectCtrl = ASIC_RTS;
@@ -5654,7 +5755,7 @@ VOID AsicUpdateProtect(
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_BG_PROTECTION_INUSED))
{
ProtCfg.word = 0x01740003; //ERP use Protection bit is set, use protection rate at Clause 18..
- ProtCfg4.word = 0x03f40083;
+ ProtCfg4.word = 0x03f40003; // Don't duplicate RTS/CTS in CCK mode. 0x03f40083
}
//Assign Protection method for 20&40 MHz packets
ProtCfg.field.ProtectCtrl = ASIC_RTS;
@@ -5678,16 +5779,17 @@ VOID AsicUpdateProtect(
break;
}
}
-
+#endif // DOT11_N_SUPPORT //
+
offset = CCK_PROT_CFG;
for (i = 0;i < 6;i++)
{
- if ((SetMask & (1<< i)))
+ if ((SetMask & (1<< i)))
{
- RTMP_IO_WRITE32(pAd, offset + i*4, Protect[i]);
+ RTMP_IO_WRITE32(pAd, offset + i*4, Protect[i]);
+ }
}
}
-}
/*
==========================================================================
@@ -5725,14 +5827,15 @@ VOID AsicSwitchChannel(
DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: Cant find the Channel#%d \n", Channel));
}
- RFRegTable = RF2850RegTable;
-
- switch (pAd->RfIcType)
{
- case RFIC_2820:
- case RFIC_2850:
- case RFIC_2720:
- case RFIC_2750:
+ RFRegTable = RF2850RegTable;
+
+ switch (pAd->RfIcType)
+ {
+ case RFIC_2820:
+ case RFIC_2850:
+ case RFIC_2720:
+ case RFIC_2750:
for (index = 0; index < NUM_OF_2850_CHNL; index++)
{
@@ -5834,8 +5937,9 @@ VOID AsicSwitchChannel(
}
break;
- default:
+ default:
break;
+ }
}
// Change BBP setting during siwtch from a->g, g->a
@@ -6185,6 +6289,95 @@ VOID AsicAdjustTxPower(
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpR1);
BbpR1 &= 0xFC;
+#ifdef SINGLE_SKU
+ // Handle regulatory max tx power constrain
+ do
+ {
+ UCHAR TxPwrInEEPROM = 0xFF, CountryTxPwr = 0xFF, criterion;
+ UCHAR AdjustMaxTxPwr[40];
+
+ if (pAd->CommonCfg.Channel > 14) // 5G band
+ TxPwrInEEPROM = ((pAd->CommonCfg.DefineMaxTxPwr & 0xFF00) >> 8);
+ else // 2.4G band
+ TxPwrInEEPROM = (pAd->CommonCfg.DefineMaxTxPwr & 0x00FF);
+ CountryTxPwr = GetCuntryMaxTxPwr(pAd, pAd->CommonCfg.Channel);
+
+ // error handling, range check
+ if ((TxPwrInEEPROM > 0x50) || (CountryTxPwr > 0x50))
+ {
+ DBGPRINT(RT_DEBUG_ERROR,("AsicAdjustTxPower - Invalid max tx power (=0x%02x), CountryTxPwr=%d\n", TxPwrInEEPROM, CountryTxPwr));
+ break;
+ }
+
+ criterion = *((PUCHAR)TxPwr + 2) & 0xF; // FAE use OFDM 6M as criterion
+
+ DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (criterion=%d, TxPwrInEEPROM=%d, CountryTxPwr=%d)\n", criterion, TxPwrInEEPROM, CountryTxPwr));
+
+ // Adjust max tx power according to the relationship of tx power in E2PROM
+ for (i=0; i<5; i++)
+ {
+ // CCK will have 4dBm larger than OFDM
+ // Therefore, we should separate to parse the tx power field
+ if (i == 0)
+ {
+ for (j=0; j<8; j++)
+ {
+ Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F);
+
+ if (j < 4)
+ {
+ // CCK will have 4dBm larger than OFDM
+ AdjustMaxTxPwr[i*8+j] = TxPwrInEEPROM + (Value - criterion) + 4;
+ }
+ else
+ {
+ AdjustMaxTxPwr[i*8+j] = TxPwrInEEPROM + (Value - criterion);
+ }
+ DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d)\n", i, j, Value, AdjustMaxTxPwr[i*8+j]));
+ }
+ }
+ else
+ {
+ for (j=0; j<8; j++)
+ {
+ Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F);
+
+ AdjustMaxTxPwr[i*8+j] = TxPwrInEEPROM + (Value - criterion);
+ DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d)\n", i, j, Value, AdjustMaxTxPwr[i*8+j]));
+ }
+ }
+ }
+
+ // Adjust tx power according to the relationship
+ for (i=0; i<5; i++)
+ {
+ if (TxPwr[i] != 0xffffffff)
+ {
+ for (j=0; j<8; j++)
+ {
+ Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F);
+
+ // The system tx power is larger than the regulatory, the power should be restrain
+ if (AdjustMaxTxPwr[i*8+j] > CountryTxPwr)
+ {
+ // decrease to zero and don't need to take care BBPR1
+ if ((Value - (AdjustMaxTxPwr[i*8+j] - CountryTxPwr)) > 0)
+ Value -= (AdjustMaxTxPwr[i*8+j] - CountryTxPwr);
+ else
+ Value = 0;
+
+ DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d)\n", i, j, Value, AdjustMaxTxPwr[i*8+j]));
+ }
+ else
+ DBGPRINT_RAW(RT_DEBUG_TRACE,("AsicAdjustTxPower (i/j=%d/%d, Value=%d, %d, no change)\n", i, j, Value, AdjustMaxTxPwr[i*8+j]));
+
+ TxPwr[i] = (TxPwr[i] & ~(0x0000000F << j*4)) | (Value << j*4);
+ }
+ }
+ }
+ } while (FALSE);
+#endif // SINGLE_SKU //
+
/* calculate delta power based on the percentage specified from UI */
// E2PROM setting is calibrated for maximum TX power (i.e. 100%)
// We lower TX power here according to the percentage specified from UI
@@ -6249,13 +6442,9 @@ VOID AsicAdjustTxPower(
TX power for CCK1M/2M */
/* TX_PWR_CFG_1 ~ TX_PWR_CFG_4 */
RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, TxPwr[i]);
-
- DBGPRINT(RT_DEBUG_INFO, ("AsicAdjustTxPower - DeltaPwr=%d, offset=0x%x, TxPwr=%lx, BbpR1=%x, BbpR49=%x, round=%ld, pTxAgcCompensate=%d \n",
- DeltaPwr, TX_PWR_CFG_0 + i*4, TxPwr[i], BbpR1, BbpR49, pAd->Mlme.OneSecPeriodicRound, *pTxAgcCompensate));
}
}
- DBGPRINT(RT_DEBUG_INFO, ("<-- AsicAdjustTxPower, DeltaPwr=%d\n", DeltaPwr));
}
#ifdef CONFIG_STA_SUPPORT
@@ -6415,8 +6604,7 @@ VOID AsicDisableRDG(
TX_LINK_CFG_STRUC TxLinkCfg;
UINT32 Data = 0;
- DBGPRINT(RT_DEBUG_INFO, ("--->AsicDisableRDG \n"));
-
+
RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word);
TxLinkCfg.field.TxRDGEn = 0;
RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word);
@@ -6424,10 +6612,15 @@ VOID AsicDisableRDG(
RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data);
Data &= 0xFFFFFF00;
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_DYNAMIC_BE_TXOP_ACTIVE) && (pAd->MacTab.fAnyStationMIMOPSDynamic == FALSE))
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_DYNAMIC_BE_TXOP_ACTIVE)
+#ifdef DOT11_N_SUPPORT
+ && (pAd->MacTab.fAnyStationMIMOPSDynamic == FALSE)
+#endif // DOT11_N_SUPPORT //
+ )
{
// For CWC test, change txop from 0x30 to 0x20 in TxBurst mode
- Data |= 0x20;
+ if (pAd->CommonCfg.bEnableTxBurst)
+ Data |= 0x20;
}
RTMP_IO_WRITE32(pAd, EDCA_AC0_CFG, Data);
}
@@ -6536,7 +6729,7 @@ VOID AsicEnableIbssSync(
ptr +=4;
}
#endif // RT2860 //
-
+
// start sending BEACON
csr9.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU
csr9.field.bTsfTicking = 1;
@@ -6848,7 +7041,16 @@ VOID AsicSetSlotTime(
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// force using short SLOT time for FAE to demo performance when TxBurst is ON
- if (pAd->CommonCfg.bEnableTxBurst)
+ if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)))
+#ifdef DOT11_N_SUPPORT
+ || ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE))
+#endif // DOT11_N_SUPPORT //
+ )
+ {
+ // In this case, we will think it is doing Wi-Fi test
+ // And we will not set to short slot when bEnableTxBurst is TRUE.
+ }
+ else if (pAd->CommonCfg.bEnableTxBurst)
SlotTime = 9;
}
#endif // CONFIG_STA_SUPPORT //
@@ -6872,8 +7074,6 @@ VOID AsicSetSlotTime(
RegValue |= SlotTime;
RTMP_IO_WRITE32(pAd, BKOFF_SLOT_CFG, RegValue);
-
- DBGPRINT(RT_DEBUG_INFO, ("AsicSetSlotTime(=%ld us)\n", SlotTime));
}
/*
@@ -7330,8 +7530,6 @@ VOID AsicRemovePairwiseKeyEntry(
offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE);
WCIDAttri = (BssIdx<<4) | PAIRWISEKEYTABLE;
RTMP_IO_WRITE32(pAd, offset, WCIDAttri);
-
- DBGPRINT(RT_DEBUG_INFO, ("AsicRemovePairwiseKeyEntry: Wcid #%d \n", Wcid));
}
BOOLEAN AsicSendCommandToMcu(
@@ -7356,7 +7554,6 @@ BOOLEAN AsicSendCommandToMcu(
break;
RTMPusecDelay(2);
- DBGPRINT(RT_DEBUG_INFO, ("AsicSendCommandToMcu::Mail box is busy\n"));
} while(i++ < 100);
if (i >= 100)
@@ -7417,8 +7614,6 @@ BOOLEAN AsicSendCommandToMcu(
if (Command != 0x80)
{
- DBGPRINT(RT_DEBUG_INFO, ("SW interrupt MCU (cmd=0x%02x, token=0x%02x, arg1,arg0=0x%02x,0x%02x)\n",
- H2MCmd.field.HostCommand, Token, Arg1, Arg0));
}
return TRUE;
@@ -7533,6 +7728,7 @@ VOID RTMPCheckRates(
}
#ifdef CONFIG_STA_SUPPORT
+#ifdef DOT11_N_SUPPORT
BOOLEAN RTMPCheckChannel(
IN PRTMP_ADAPTER pAd,
IN UCHAR CentralChannel,
@@ -7561,12 +7757,10 @@ BOOLEAN RTMPCheckChannel(
{
if (pAd->ChannelList[k].Channel == UpperChannel)
{
- DBGPRINT(RT_DEBUG_INFO,("UpperChannel=%d is in Channel List[%d]\n", UpperChannel, k ));
NoEffectChannelinList ++;
}
if (pAd->ChannelList[k].Channel == LowerChannel)
{
- DBGPRINT(RT_DEBUG_INFO,("LowerChannel=%d is in Channel List[%d]\n", LowerChannel, k ));
NoEffectChannelinList ++;
}
}
@@ -7595,10 +7789,10 @@ BOOLEAN RTMPCheckChannel(
========================================================================
*/
BOOLEAN RTMPCheckHt(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN OUT HT_CAPABILITY_IE *pHtCapability,
- IN OUT ADD_HT_INFO_IE *pAddHtInfo)
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR Wcid,
+ IN HT_CAPABILITY_IE *pHtCapability,
+ IN ADD_HT_INFO_IE *pAddHtInfo)
{
if (Wcid >= MAX_LEN_OF_MAC_TABLE)
return FALSE;
@@ -7649,18 +7843,7 @@ BOOLEAN RTMPCheckHt(
break;
}
- // choose smaller setting
- if (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED)
- {
- if (pAd->CommonCfg.Channel > 14)
- pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth = pAddHtInfo->AddHtInfo.RecomWidth & pAd->CommonCfg.DesiredHtPhy.ChannelWidth & !pAd->NicConfig2.field.BW40MAvailForA;
- else
- pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth = pAddHtInfo->AddHtInfo.RecomWidth & pAd->CommonCfg.DesiredHtPhy.ChannelWidth & !pAd->NicConfig2.field.BW40MAvailForG;
- }
- else
- {
pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth = pAddHtInfo->AddHtInfo.RecomWidth & pAd->CommonCfg.DesiredHtPhy.ChannelWidth;
- }
DBGPRINT(RT_DEBUG_TRACE, ("RTMPCheckHt:: HtCapInfo.ChannelWidth=%d, RecomWidth=%d, DesiredHtPhy.ChannelWidth=%d, BW40MAvailForA/G=%d/%d, PhyMode=%d \n",
pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth, pAddHtInfo->AddHtInfo.RecomWidth, pAd->CommonCfg.DesiredHtPhy.ChannelWidth,
@@ -7691,33 +7874,9 @@ BOOLEAN RTMPCheckHt(
COPY_AP_HTSETTINGS_FROM_BEACON(pAd, pHtCapability);
return TRUE;
}
+#endif // DOT11_N_SUPPORT //
#endif // CONFIG_STA_SUPPORT //
-
-BOOLEAN RTMPCheckAddHtInfoIe(
- IN PRTMP_ADAPTER pAd,
- IN OUT ADD_HT_INFO_IE *pAddHTInfo)
-{
- INT i; //, j;
- ADD_HTINFO TempAddHTInfo;
-
- RTMPMoveMemory(&TempAddHTInfo, pAddHTInfo, SIZE_ADD_HT_INFO_IE);
- RTMPZeroMemory(pAddHTInfo, SIZE_ADD_HT_INFO_IE);
-
- // basic MCS that should be supported for this BSSID.
- for ( i=0 ; i< 16 ; i++)
- {
- if ((pAddHTInfo->MCSSet[i] & pAd->CommonCfg.HtCapability.MCSSet[i]) != pAddHTInfo->MCSSet[i] )
- return FALSE;
- }
-
- // Check Controlled access for PSMP only. rt2860 not suppor PSMP yet.
- if (pAddHTInfo->AddHtInfo.S_PSMPSup == 1)
- return FALSE;
-
- return TRUE;
-}
-
/*
========================================================================
@@ -7739,7 +7898,7 @@ VOID RTMPUpdateMlmeRate(
{
UCHAR MinimumRate;
UCHAR ProperMlmeRate; //= RATE_54;
- UCHAR i, j, RateIdx = 12; // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54
+ UCHAR i, j, RateIdx = 12; //1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54
BOOLEAN bMatch = FALSE;
switch (pAd->CommonCfg.PhyMode)
@@ -7749,8 +7908,10 @@ VOID RTMPUpdateMlmeRate(
MinimumRate = RATE_1;
break;
case PHY_11BG_MIXED:
+#ifdef DOT11_N_SUPPORT
case PHY_11ABGN_MIXED:
case PHY_11BGN_MIXED:
+#endif // DOT11_N_SUPPORT //
if ((pAd->MlmeAux.SupRateLen == 4) &&
(pAd->MlmeAux.ExtRateLen == 0))
// B only AP
@@ -7764,10 +7925,13 @@ VOID RTMPUpdateMlmeRate(
MinimumRate = RATE_6;
break;
case PHY_11A:
+#ifdef DOT11_N_SUPPORT
case PHY_11N_2_4G: // rt2860 need to check mlmerate for 802.11n
case PHY_11GN_MIXED:
case PHY_11AGN_MIXED:
+ case PHY_11AN_MIXED:
case PHY_11N_5G:
+#endif // DOT11_N_SUPPORT //
ProperMlmeRate = RATE_24;
MinimumRate = RATE_6;
break;
@@ -7916,8 +8080,6 @@ VOID AsicEvaluateRxAnt(
}
#endif // CONFIG_STA_SUPPORT //
- DBGPRINT(RT_DEBUG_INFO, ("AsicEvaluateRxAnt : RealRxPath=%d \n", pAd->Mlme.RealRxPath));
-
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3);
BBPR3 &= (~0x18);
if(pAd->Antenna.field.RxPath == 3)
@@ -7939,7 +8101,8 @@ VOID AsicEvaluateRxAnt(
pAd->StaCfg.BBPR3 = BBPR3;
#endif // RT2860 //
#endif // CONFIG_STA_SUPPORT //
- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)
+ )
{
ULONG TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount +
pAd->RalinkCounters.OneSecTxRetryOkCount +
@@ -8051,8 +8214,6 @@ VOID AsicRxAntEvalTimeout(
#ifdef RT2860
pAd->StaCfg.BBPR3 = BBPR3;
#endif // RT2860 //
- DBGPRINT(RT_DEBUG_INFO, ("AsicRxAntEvalTimeout : RealRxPath=%d, AvgRssi=%d, AvgRssi2=%d, AvgRssi3=%d \n",
- pAd->Mlme.RealRxPath, rssi0, rssi1, rssi2));
}
#endif // CONFIG_STA_SUPPORT //
@@ -8097,6 +8258,7 @@ VOID RTMPSetPiggyBack(
TX_LINK_CFG_STRUC TxLinkCfg;
RTMP_IO_READ32(pAd, TX_LINK_CFG, &TxLinkCfg.word);
+
TxLinkCfg.field.TxCFAckEn = bPiggyBack;
RTMP_IO_WRITE32(pAd, TX_LINK_CFG, TxLinkCfg.word);
}
@@ -8133,9 +8295,16 @@ BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
}
else
result = FALSE;
+
+#ifdef QOS_DLS_SUPPORT
+ if (pEntry && (pEntry->ValidAsDls))
+ result = pAd->StaCfg.bAutoTxRateSwitch;
+#endif // QOS_DLS_SUPPORT //
}
#endif // CONFIG_STA_SUPPORT //
+
+
return result;
}
@@ -8267,7 +8436,8 @@ VOID AsicStaBbpTuning(
return;
if ((pAd->OpMode == OPMODE_STA)
- && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)
+ )
&& !(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
#ifdef RT2860
&& (pAd->bPCIclkOff == FALSE)
@@ -8284,20 +8454,22 @@ VOID AsicStaBbpTuning(
if (pAd->LatchRfRegs.Channel <= 14)
{ //BG band
- if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY)
{
- R66 = (0x2E + GET_LNA_GAIN(pAd)) + 0x10;
- if (OrigR66Value != R66)
+ if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY)
{
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
+ R66 = (0x2E + GET_LNA_GAIN(pAd)) + 0x10;
+ if (OrigR66Value != R66)
+ {
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
+ }
}
- }
- else
- {
- R66 = 0x2E + GET_LNA_GAIN(pAd);
- if (OrigR66Value != R66)
+ else
{
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
+ R66 = 0x2E + GET_LNA_GAIN(pAd);
+ if (OrigR66Value != R66)
+ {
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
+ }
}
}
}
@@ -8343,11 +8515,7 @@ VOID AsicStaBbpTuning(
}
}
- if (pAd->Mlme.OneSecPeriodicRound % 4 == 0)
- {
- DBGPRINT(RT_DEBUG_INFO, ("RSSI=%d, CCA=%d, BW=%d, LNA_GAIN=0x%x, fixed R66 at 0x%x\n",
- Rssi, pAd->RalinkCounters.OneSecFalseCCACnt, pAd->CommonCfg.BBPCurrentBW, GET_LNA_GAIN(pAd), R66));
- }
+
}
}
#endif // CONFIG_STA_SUPPORT //
@@ -8370,14 +8538,15 @@ VOID RTMPSetAGCInitValue(
R66 = (UCHAR)(0x32 + (GET_LNA_GAIN(pAd)*5)/3);
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
}
+#ifdef DOT11_N_SUPPORT
else
{
R66 = (UCHAR)(0x3A + (GET_LNA_GAIN(pAd)*5)/3);
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
}
+#endif // DOT11_N_SUPPORT //
}
- DBGPRINT(RT_DEBUG_INFO, ("RTMPSetAGCInitValue - Ch=%d, BandWidth=%d, LNA_GAIN=0x%x, set R66 as 0x%x \n", pAd->LatchRfRegs.Channel, BandWidth, GET_LNA_GAIN(pAd), R66));
}
VOID AsicTurnOffRFClk(
diff --git a/rt2860-1.7.0.0/common/netif_block.c b/rt2860-source-1.8.0.0/common/netif_block.c
similarity index 100%
copy from rt2860-1.7.0.0/common/netif_block.c
copy to rt2860-source-1.8.0.0/common/netif_block.c
diff --git a/rt2860-1.7.0.0/common/rt2860.bin b/rt2860-source-1.8.0.0/common/rt2860.bin
similarity index 100%
copy from rt2860-1.7.0.0/common/rt2860.bin
copy to rt2860-source-1.8.0.0/common/rt2860.bin
diff --git a/rt2860-1.7.0.0/common/rtmp_init.c b/rt2860-source-1.8.0.0/common/rtmp_init.c
similarity index 93%
copy from rt2860-1.7.0.0/common/rtmp_init.c
copy to rt2860-source-1.8.0.0/common/rtmp_init.c
index e387c91..db9b9d8 100644
--- a/rt2860-1.7.0.0/common/rtmp_init.c
+++ b/rt2860-source-1.8.0.0/common/rtmp_init.c
@@ -106,10 +106,10 @@ unsigned char BitReverse(unsigned char x)
//
// BBP register initialization set
//
-BBP_REG_PAIR BBPRegTable[] = {
+REG_PAIR BBPRegTable[] = {
{BBP_R65, 0x2C}, // fix rssi issue
{BBP_R66, 0x38}, // Also set this default value to pAd->BbpTuning.R66CurrentValue at initial
- {BBP_R69, 0x12},
+ {BBP_R69, 0x12},
{BBP_R70, 0xa}, // BBP_R70 will change to 0x8 in ApStartUp and LinkUp for rt2860C, otherwise value is 0xa
{BBP_R73, 0x10},
{BBP_R81, 0x37},
@@ -122,7 +122,11 @@ BBP_REG_PAIR BBPRegTable[] = {
{BBP_R103, 0x00}, // near range high-power issue, requested from Gary @2008-0528
{BBP_R105, 0x05}, // 0x05 is for rt2860E to turn on FEQ control. It is safe for rt2860D and before, because Bit 7:2 are reserved in rt2860D and before.
};
-#define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(BBP_REG_PAIR))
+#define NUM_BBP_REG_PARMS (sizeof(BBPRegTable) / sizeof(REG_PAIR))
+
+//
+// RF register initialization set
+//
//
// ASIC register initialization sets
@@ -164,7 +168,7 @@ RTMP_REG_PAIR MACRegTable[] = {
{TXOP_CTRL_CFG, 0x0000583f, /*0x0000243f*/ /*0x000024bf*/}, //Extension channel backoff.
{TX_RTS_CFG, 0x00092b20},
{EXP_ACK_TIME, 0x002400ca}, // default value
- {TXOP_HLDR_ET, 0x00000002},
+ {TXOP_HLDR_ET, 0x00000002},
/* Jerry comments 2008/01/16: we use SIFS = 10us in CCK defaultly, but it seems that 10us
is too small for INTEL 2200bg card, so in MBSS mode, the delta time between beacon0
@@ -189,9 +193,14 @@ RTMP_REG_PAIR STAMACRegTable[] = {
#endif // CONFIG_STA_SUPPORT //
+// New 8k byte firmware size for RT3071/RT3072
+#define FIRMWAREIMAGE_MAX_LENGTH 0x2000
#define FIRMWAREIMAGE_LENGTH (sizeof (FirmwareImage) / sizeof(UCHAR))
#define FIRMWARE_MAJOR_VERSION 0
+#define FIRMWAREIMAGEV1_LENGTH 0x1000
+#define FIRMWAREIMAGEV2_LENGTH 0x1000
+
#ifdef RT2860
#define FIRMWARE_MINOR_VERSION 2
#endif // RT2860 //
@@ -231,7 +240,7 @@ NDIS_STATUS RTMPAllocAdapterBlock(
do
{
- // Allocate RTMP_ADAPTER memory block
+ // Allocate RTMP_ADAPTER memory block
pBeaconBuf = kmalloc(MAX_BEACON_SIZE, MEM_ALLOC_FLAG);
if (pBeaconBuf == NULL)
{
@@ -247,13 +256,13 @@ NDIS_STATUS RTMPAllocAdapterBlock(
break;
}
pAd->BeaconBuf = pBeaconBuf;
- printk("\n\n=== pAd = %p, size = %d ===\n\n", pAd, (UINT32)sizeof(RTMP_ADAPTER));
-
+ printk("\n\n=== pAd = %p, size = %d ===\n\n", pAd, (UINT32)sizeof(RTMP_ADAPTER));
+
// Init spin locks
NdisAllocateSpinLock(&pAd->MgmtRingLock);
#ifdef RT2860
- NdisAllocateSpinLock(&pAd->RxRingLock);
+ NdisAllocateSpinLock(&pAd->RxRingLock);
#endif // RT2860 //
for (index =0 ; index < NUM_OF_TX_RING; index++)
@@ -307,7 +316,7 @@ VOID RTMPReadTxPwrPerRate(
// Get power delta for 20MHz and 40MHz.
//
DBGPRINT(RT_DEBUG_TRACE, ("Txpower per Rate\n"));
- value2 = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_DELTA);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_DELTA, value2);
Apwrdelta = 0;
Gpwrdelta = 0;
@@ -338,7 +347,7 @@ VOID RTMPReadTxPwrPerRate(
//
for (i=0; i<5; i++)
{
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i*4);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i*4, value);
data = value;
if (bApwrdeltaMinus == FALSE)
{
@@ -411,7 +420,7 @@ VOID RTMPReadTxPwrPerRate(
}
Gdata = t1 + (t2<<4) + (t3<<8) + (t4<<12);
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i*4 + 2);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_2_4G + i*4 + 2, value);
if (bApwrdeltaMinus == FALSE)
{
t1 = (value&0xf)+(Apwrdelta);
@@ -498,7 +507,7 @@ VOID RTMPReadTxPwrPerRate(
bValid = TRUE;
for (i=0; i<6; i++)
{
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_2_4G + 2 + i*2);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_2_4G + 2 + i*2, value);
if (((value & 0x00FF) == 0x00FF) || ((value & 0xFF00) == 0xFF00))
{
bValid = FALSE;
@@ -513,7 +522,7 @@ VOID RTMPReadTxPwrPerRate(
{
for (i=0; i<4; i++)
{
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_2_4G + i*4);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_2_4G + i*4, value);
if (bGpwrdeltaMinus == FALSE)
{
t1 = (value&0xf)+(Gpwrdelta);
@@ -550,7 +559,7 @@ VOID RTMPReadTxPwrPerRate(
}
Gdata = t1 + (t2<<4) + (t3<<8) + (t4<<12);
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_2_4G + i*4 + 2);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_2_4G + i*4 + 2, value);
if (bGpwrdeltaMinus == FALSE)
{
t1 = (value&0xf)+(Gpwrdelta);
@@ -602,7 +611,7 @@ VOID RTMPReadTxPwrPerRate(
bValid = TRUE;
for (i=0; i<8; i++)
{
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_5G + 2 + i*2);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_5G + 2 + i*2, value);
if (((value & 0x00FF) == 0x00FF) || ((value & 0xFF00) == 0xFF00))
{
bValid = FALSE;
@@ -617,7 +626,7 @@ VOID RTMPReadTxPwrPerRate(
{
for (i=0; i<5; i++)
{
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_5G + i*4);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_5G + i*4, value);
if (bApwrdeltaMinus == FALSE)
{
t1 = (value&0xf)+(Apwrdelta);
@@ -654,7 +663,7 @@ VOID RTMPReadTxPwrPerRate(
}
Adata = t1 + (t2<<4) + (t3<<8) + (t4<<12);
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_5G + i*4 + 2);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_20MHZ_5G + i*4 + 2, value);
if (bApwrdeltaMinus == FALSE)
{
t1 = (value&0xf)+(Apwrdelta);
@@ -706,7 +715,7 @@ VOID RTMPReadTxPwrPerRate(
bValid = TRUE;
for (i=0; i<6; i++)
{
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_5G + 2 + i*2);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_5G + 2 + i*2, value);
if (((value & 0x00FF) == 0x00FF) || ((value & 0xFF00) == 0xFF00))
{
bValid = FALSE;
@@ -721,7 +730,7 @@ VOID RTMPReadTxPwrPerRate(
{
for (i=0; i<4; i++)
{
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_5G + i*4);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_5G + i*4, value);
if (bApwrdeltaMinus == FALSE)
{
t1 = (value&0xf)+(Apwrdelta);
@@ -758,7 +767,7 @@ VOID RTMPReadTxPwrPerRate(
}
Adata = t1 + (t2<<4) + (t3<<8) + (t4<<12);
- value = RTMP_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_5G + i*4 + 2);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_TXPOWER_BYRATE_40MHZ_5G + i*4 + 2, value);
if (bApwrdeltaMinus == FALSE)
{
t1 = (value&0xf)+(Apwrdelta);
@@ -984,10 +993,67 @@ VOID RTMPReadChannelPwr(
// 4. Print and Debug
choffset = 14 + 12 + 16 + 7;
- for (i = 0; i < choffset; i++)
+
+
+#if 0
+ // Init the 802.11j channel number for TX channel power
+ // 0. 20MHz
+ for (i = 0; i < 3; i++)
+ {
+ pAd->TxPower11J[i].Channel = 8 + i * 4;
+ pAd->TxPower11J[i].BW = BW_20;
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ pAd->TxPower11J[i + 3].Channel = 34 + i * 4;
+ pAd->TxPower11J[i + 3].BW = BW_20;
+ }
+
+ for (i = 0; i < 4; i++)
{
- DBGPRINT(RT_DEBUG_INFO, ("E2PROM: TxPower[%03d], Channel = %d, Power = %d, Power2 = %d\n", i, pAd->TxPower[i].Channel, pAd->TxPower[i].Power, pAd->TxPower[i].Power2 ));
+ pAd->TxPower11J[i + 7].Channel = 184 + i * 4;
+ pAd->TxPower11J[i + 7].BW = BW_20;
}
+
+ // 0. 10MHz
+ for (i = 0; i < 2; i++)
+ {
+ pAd->TxPower11J[i + 11].Channel = 7 + i;
+ pAd->TxPower11J[i + 11].BW = BW_10;
+ }
+ pAd->TxPower11J[13].Channel = 11;
+ pAd->TxPower11J[13].BW = BW_10;
+
+ for (i = 0; i < 3; i++)
+ {
+ pAd->TxPower11J[i + 14].Channel = 183 + i;
+ pAd->TxPower11J[i + 14].BW= BW_10;
+ }
+
+ for (i = 0; i < 3; i++)
+ {
+ pAd->TxPower11J[i + 17].Channel = 187 + i;
+ pAd->TxPower11J[i + 17].BW = BW_10;
+ }
+ for (i = 0; i < 10; i++)
+ {
+ Power.word = RTMP_EEPROM_READ16(pAd, EEPROM_Japan_TX_PWR_OFFSET + i * 2);
+ Power2.word = RTMP_EEPROM_READ16(pAd, EEPROM_Japan_TX2_PWR_OFFSET + i * 2);
+
+ if ((Power.field.Byte0 < 36) && (Power.field.Byte0 > -6))
+ pAd->TxPower11J[i * 2].Power = Power.field.Byte0;
+
+ if ((Power.field.Byte1 < 36) && (Power.field.Byte1 > -6))
+ pAd->TxPower11J[i * 2 + 1].Power = Power.field.Byte1;
+
+ if ((Power2.field.Byte0 < 36) && (Power2.field.Byte0 > -6))
+ pAd->TxPower11J[i * 2].Power2 = Power2.field.Byte0;
+
+ if ((Power2.field.Byte1 < 36) && (Power2.field.Byte1 > -6))
+ pAd->TxPower11J[i * 2 + 1].Power2 = Power2.field.Byte1;
+ }
+#endif
}
/*
@@ -1024,6 +1090,8 @@ NDIS_STATUS NICReadRegParameters(
}
+
+
/*
========================================================================
@@ -1154,6 +1222,23 @@ VOID NICReadEEPROMParameters(
if (Version.field.Version > VALID_EEPROM_VERSION)
{
DBGPRINT_ERR(("E2PROM: WRONG VERSION 0x%x, should be %d\n",Version.field.Version, VALID_EEPROM_VERSION));
+ /*pAd->SystemErrorBitmap |= 0x00000001;
+
+ // hard-code default value when no proper E2PROM installed
+ pAd->bAutoTxAgcA = FALSE;
+ pAd->bAutoTxAgcG = FALSE;
+
+ // Default the channel power
+ for (i = 0; i < MAX_NUM_OF_CHANNELS; i++)
+ pAd->TxPower[i].Power = DEFAULT_RF_TX_POWER;
+
+ // Default the channel power
+ for (i = 0; i < MAX_NUM_OF_11JCHANNELS; i++)
+ pAd->TxPower11J[i].Power = DEFAULT_RF_TX_POWER;
+
+ for(i = 0; i < NUM_EEPROM_BBP_PARMS; i++)
+ pAd->EEPROMDefaultValue[i] = 0xffff;
+ return; */
}
// Read BBP default value from EEPROM and store to array(EEPROMDefaultValue) in pAd
@@ -1212,6 +1297,7 @@ VOID NICReadEEPROMParameters(
NicConfig2.word = pAd->EEPROMDefaultValue[1];
+
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
@@ -1240,15 +1326,20 @@ VOID NICReadEEPROMParameters(
//
// Reset PhyMode if we don't support 802.11a
+ // Only RFIC_2850 & RFIC_2750 support 802.11a
//
- if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) ||
- (pAd->CommonCfg.PhyMode == PHY_11A) || (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) || (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED))
- {
- //
- // Only RFIC_2850 & RFIC_2750 support 802.11a
- //
- if ((Antenna.field.RfIcType != RFIC_2850) && (Antenna.field.RfIcType != RFIC_2750))
+ if ((Antenna.field.RfIcType != RFIC_2850) && (Antenna.field.RfIcType != RFIC_2750))
+ {
+ if ((pAd->CommonCfg.PhyMode == PHY_11ABG_MIXED) ||
+ (pAd->CommonCfg.PhyMode == PHY_11A))
+ pAd->CommonCfg.PhyMode = PHY_11BG_MIXED;
+#ifdef DOT11_N_SUPPORT
+ else if ((pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED) ||
+ (pAd->CommonCfg.PhyMode == PHY_11AN_MIXED) ||
+ (pAd->CommonCfg.PhyMode == PHY_11AGN_MIXED) ||
+ (pAd->CommonCfg.PhyMode == PHY_11N_5G))
pAd->CommonCfg.PhyMode = PHY_11BGN_MIXED;
+#endif // DOT11_N_SUPPORT //
}
// Read TSSI reference and TSSI boundary for temperature compensation. This is ugly
@@ -1339,7 +1430,9 @@ VOID NICReadEEPROMParameters(
TmpPhy = pAd->CommonCfg.PhyMode;
pAd->CommonCfg.PhyMode = 0xff;
RTMPSetPhyMode(pAd, TmpPhy);
+#ifdef DOT11_N_SUPPORT
SetCommonHT(pAd);
+#endif // DOT11_N_SUPPORT //
}
//
@@ -1405,6 +1498,12 @@ VOID NICReadEEPROMParameters(
pAd->Led3 = value;
RTMPReadTxPwrPerRate(pAd);
+
+#ifdef SINGLE_SKU
+ //pAd->CommonCfg.DefineMaxTxPwr = RTMP_EEPROM_READ16(pAd, EEPROM_DEFINE_MAX_TXPWR);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_DEFINE_MAX_TXPWR, pAd->CommonCfg.DefineMaxTxPwr);
+#endif // SINGLE_SKU //
+
DBGPRINT(RT_DEBUG_TRACE, ("<-- NICReadEEPROMParameters\n"));
}
@@ -1458,22 +1557,6 @@ VOID NICInitAsicFromEEPROM(
NicConfig2.word = pAd->EEPROMDefaultValue[1];
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- NicConfig2.word = 0;
- if ((NicConfig2.word & 0x00ff) == 0xff)
- {
- NicConfig2.word &= 0xff00;
- }
-
- if ((NicConfig2.word >> 8) == 0xff)
- {
- NicConfig2.word &= 0x00ff;
- }
- }
-#endif // CONFIG_STA_SUPPORT //
-
// Save the antenna for future use
pAd->NicConfig2.word = NicConfig2.word;
@@ -1685,13 +1768,12 @@ retry:
// Write AC_VO base address register
Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_VO].Cell[0].AllocPa);
-
RTMP_IO_WRITE32(pAd, TX_BASE_PTR3, Value);
DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR3 : 0x%x\n", Value));
// Write HCCA base address register
- Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_HCCA].Cell[0].AllocPa);
- RTMP_IO_WRITE32(pAd, TX_BASE_PTR4, Value);
+ Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_HCCA].Cell[0].AllocPa);
+ RTMP_IO_WRITE32(pAd, TX_BASE_PTR4, Value);
DBGPRINT(RT_DEBUG_TRACE, ("--> TX_BASE_PTR4 : 0x%x\n", Value));
// Write MGMT_BASE_CSR register
@@ -1891,13 +1973,14 @@ NDIS_STATUS NICInitializeAsic(
if ((pAd->MACVersion&0xffff) != 0x0101)
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19);
+
if (pAd->MACVersion == 0x28600100)
{
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16);
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x12);
}
- if (pAd->MACVersion >= RALINK_2880E_VERSION) // 3*3
+ if (pAd->MACVersion >= RALINK_2880E_VERSION && pAd->MACVersion < RALINK_3070_VERSION) // 3*3
{
// enlarge MAX_LEN_CFG
UINT32 csr;
@@ -1938,14 +2021,15 @@ NDIS_STATUS NICInitializeAsic(
{
RTMP_IO_WRITE32(pAd, SHARED_KEY_MODE_BASE + 4*KeyIdx, 0);
}
- }
- // Clear all pairwise key table when initial
- for (KeyIdx = 0; KeyIdx < 256; KeyIdx++)
- {
- RTMP_IO_WRITE32(pAd, MAC_WCID_ATTRIBUTE_BASE + (KeyIdx * HW_WCID_ATTRI_SIZE), 1);
+ // Clear all pairwise key table when initial
+ for (KeyIdx = 0; KeyIdx < 256; KeyIdx++)
+ {
+ RTMP_IO_WRITE32(pAd, MAC_WCID_ATTRIBUTE_BASE + (KeyIdx * HW_WCID_ATTRI_SIZE), 1);
+ }
}
-
+
+
// It isn't necessary to clear this space when not hard reset.
if (bHardReset == TRUE)
{
@@ -1994,7 +2078,7 @@ VOID NICIssueReset(
{
UINT32 Value = 0;
DBGPRINT(RT_DEBUG_TRACE, ("--> NICIssueReset\n"));
-
+
// Disable Rx, register value supposed will remain after reset
RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
Value &= (0xfffffff3);
@@ -2051,7 +2135,7 @@ VOID NICUpdateFifoStaCounters(
if (StaFifo.field.bValid == 0)
break;
-
+
wcid = (UCHAR)StaFifo.field.wcid;
@@ -2069,33 +2153,59 @@ VOID NICUpdateFifoStaCounters(
pEntry->DebugFIFOCount++;
+#ifdef DOT11_N_SUPPORT
if (StaFifo.field.TxBF) // 3*3
pEntry->TxBFCount++;
+#endif // DOT11_N_SUPPORT //
+
+#ifdef UAPSD_AP_SUPPORT
+ UAPSD_SP_AUE_Handle(pAd, pEntry, StaFifo.field.TxSuccess);
+#endif // UAPSD_AP_SUPPORT //
+
if (!StaFifo.field.TxSuccess)
{
pEntry->FIFOCount++;
pEntry->OneSecTxFailCount++;
+
if (pEntry->FIFOCount >= 1)
{
DBGPRINT(RT_DEBUG_TRACE, ("#"));
- if(pEntry->PsMode == PWR_ACTIVE)
+#if 0
+ SendRefreshBAR(pAd, pEntry);
+ pEntry->NoBADataCountDown = 64;
+#else
+#ifdef DOT11_N_SUPPORT
+ pEntry->NoBADataCountDown = 64;
+#endif // DOT11_N_SUPPORT //
+
+ if(pEntry->PsMode == PWR_ACTIVE)
{
+#ifdef DOT11_N_SUPPORT
int tid;
- for (tid=0; tid<8; tid++)
+ for (tid=0; tid<NUM_OF_TID; tid++)
{
BAOriSessionTearDown(pAd, pEntry->Aid, tid, FALSE, FALSE);
}
+#endif // DOT11_N_SUPPORT //
+
+ // Update the continuous transmission counter except PS mode
+ pEntry->ContinueTxFailCnt++;
}
else
{
// Clear the FIFOCount when sta in Power Save mode. Basically we assume
// this tx error happened due to sta just go to sleep.
pEntry->FIFOCount = 0;
+ pEntry->ContinueTxFailCnt = 0;
}
+#endif
+ //pEntry->FIFOCount = 0;
}
+ //pEntry->bSendBAR = TRUE;
}
else
{
+#ifdef DOT11_N_SUPPORT
if ((pEntry->PsMode != PWR_SAVE) && (pEntry->NoBADataCountDown > 0))
{
pEntry->NoBADataCountDown--;
@@ -2104,10 +2214,12 @@ VOID NICUpdateFifoStaCounters(
DBGPRINT(RT_DEBUG_TRACE, ("@\n"));
}
}
+#endif // DOT11_N_SUPPORT //
pEntry->FIFOCount = 0;
pEntry->OneSecTxNoRetryOkCount++;
// update NoDataIdleCount when sucessful send packet to STA.
pEntry->NoDataIdleCount = 0;
+ pEntry->ContinueTxFailCnt = 0;
}
succMCS = StaFifo.field.SuccessRate & 0x7F;
@@ -2139,12 +2251,7 @@ VOID NICUpdateFifoStaCounters(
}
pEntry->OneSecTxRetryOkCount += reTry;
}
- else if (reTry < 0)
- {
- DBGPRINT(RT_DEBUG_INFO, ("(%d): reTry %d , (TxMCS = %d, SuccessRate = %d)\n",
- wcid, reTry, pid, StaFifo.field.SuccessRate & 0x7F));
- }
-
+
i++;
// ASIC store 16 stack
} while ( i < (2*TX_RING_SIZE) );
@@ -2220,20 +2327,20 @@ VOID NICUpdateRawCounters(
if (!pAd->bUpdateBcnCntDone)
{
- // Update BEACON sent count
- RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word);
- RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word);
- RTMP_IO_READ32(pAd, TX_STA_CNT2, &StaTx2.word);
- pAd->RalinkCounters.OneSecBeaconSentCnt += TxStaCnt0.field.TxBeaconCount;
- pAd->RalinkCounters.OneSecTxRetryOkCount += StaTx1.field.TxRetransmit;
- pAd->RalinkCounters.OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess;
- pAd->RalinkCounters.OneSecTxFailCount += TxStaCnt0.field.TxFailCount;
- pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess;
- pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit;
- pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount;
+ // Update BEACON sent count
+ RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word);
+ RTMP_IO_READ32(pAd, TX_STA_CNT1, &StaTx1.word);
+ RTMP_IO_READ32(pAd, TX_STA_CNT2, &StaTx2.word);
+ pAd->RalinkCounters.OneSecBeaconSentCnt += TxStaCnt0.field.TxBeaconCount;
+ pAd->RalinkCounters.OneSecTxRetryOkCount += StaTx1.field.TxRetransmit;
+ pAd->RalinkCounters.OneSecTxNoRetryOkCount += StaTx1.field.TxSuccess;
+ pAd->RalinkCounters.OneSecTxFailCount += TxStaCnt0.field.TxFailCount;
+ pAd->WlanCounters.TransmittedFragmentCount.u.LowPart += StaTx1.field.TxSuccess;
+ pAd->WlanCounters.RetryCount.u.LowPart += StaTx1.field.TxRetransmit;
+ pAd->WlanCounters.FailedCount.u.LowPart += TxStaCnt0.field.TxFailCount;
}
- {
+ {
RTMP_IO_READ32(pAd, TX_AGG_CNT, &TxAggCnt.word);
RTMP_IO_READ32(pAd, TX_AGG_CNT0, &TxAggCnt0.word);
RTMP_IO_READ32(pAd, TX_AGG_CNT1, &TxAggCnt1.word);
@@ -2652,7 +2759,6 @@ NDIS_STATUS NICLoadFirmware(
//ULONG firm;
UINT32 MacReg = 0;
-
pFirmwareImage = FirmwareImage;
FileLength = sizeof(FirmwareImage);
RT28XX_WRITE_FIRMWARE(pAd, pFirmwareImage, FileLength);
@@ -2705,10 +2811,10 @@ NDIS_STATUS NICLoadFirmware(
*/
NDIS_STATUS NICLoadRateSwitchingParams(
IN PRTMP_ADAPTER pAd)
-{
+{
return NDIS_STATUS_SUCCESS;
}
-
+
/*
========================================================================
@@ -2922,14 +3028,14 @@ VOID UserCfgInit(
// part I. intialize common configuration
//
- for(key_index=0; key_index<SHARE_KEY_NUM; key_index++)
- {
- for(bss_index = 0; bss_index < MAX_MBSSID_NUM; bss_index++)
- {
- pAd->SharedKey[bss_index][key_index].KeyLen = 0;
- pAd->SharedKey[bss_index][key_index].CipherAlg = CIPHER_NONE;
- } /* End of for */
- } /* End of for */
+ for(key_index=0; key_index<SHARE_KEY_NUM; key_index++)
+ {
+ for(bss_index = 0; bss_index < MAX_MBSSID_NUM; bss_index++)
+ {
+ pAd->SharedKey[bss_index][key_index].KeyLen = 0;
+ pAd->SharedKey[bss_index][key_index].CipherAlg = CIPHER_NONE;
+ }
+ }
pAd->Antenna.word = 0;
pAd->CommonCfg.BBPCurrentBW = BW_20;
@@ -2937,37 +3043,22 @@ VOID UserCfgInit(
pAd->LedCntl.word = 0;
#ifdef RT2860
pAd->LedIndicatorStregth = 0;
- pAd->RLnkCtrlOffset = 0;
- pAd->HostLnkCtrlOffset = 0;
+ pAd->RLnkCtrlOffset = 0;
+ pAd->HostLnkCtrlOffset = 0;
#endif // RT2860 //
-#ifdef DOT11N_DRAFT3
- pAd->CommonCfg.Dot11OBssScanPassiveDwell = dot11OBSSScanPassiveDwell; // Unit : TU. 5~1000
- pAd->CommonCfg.Dot11OBssScanActiveDwell = dot11OBSSScanActiveDwell; // Unit : TU. 10~1000
- pAd->CommonCfg.Dot11BssWidthTriggerScanInt = dot11BSSWidthTriggerScanInterval; // Unit : Second
- pAd->CommonCfg.Dot11OBssScanPassiveTotalPerChannel = dot11OBSSScanPassiveTotalPerChannel; // Unit : TU. 200~10000
- pAd->CommonCfg.Dot11OBssScanActiveTotalPerChannel = dot11OBSSScanActiveTotalPerChannel; // Unit : TU. 20~10000
- pAd->CommonCfg.Dot11BssWidthChanTranDelayFactor = dot11BSSWidthChannelTransactionDelayFactor;
- pAd->CommonCfg.Dot11OBssScanActivityThre = dot11BSSScanActivityThreshold; // Unit : percentage
-
- pAd->CommonCfg.Dot11BssWidthChanTranDelay = (pAd->CommonCfg.Dot11BssWidthTriggerScanInt * pAd->CommonCfg.Dot11BssWidthChanTranDelayFactor);
-#endif // DOT11N_DRAFT3 //
-
pAd->bAutoTxAgcA = FALSE; // Default is OFF
pAd->bAutoTxAgcG = FALSE; // Default is OFF
pAd->RfIcType = RFIC_2820;
// Init timer for reset complete event
pAd->CommonCfg.CentralChannel = 1;
- pAd->bBroadComHT = FALSE;
- pAd->HTCEnable = FALSE;
pAd->bForcePrintTX = FALSE;
pAd->bForcePrintRX = FALSE;
pAd->bStaFifoTest = FALSE;
pAd->bProtectionTest = FALSE;
pAd->bHCCATest = FALSE;
pAd->bGenOneHCCA = FALSE;
- pAd->CommonCfg.bRdg = FALSE;
pAd->CommonCfg.Dsifs = 10; // in units of usec
pAd->CommonCfg.TxPower = 100; //mW
pAd->CommonCfg.TxPowerPercentage = 0xffffffff; // AUTO
@@ -2993,23 +3084,56 @@ VOID UserCfgInit(
pAd->CommonCfg.TxStream = 0;
pAd->CommonCfg.RxStream = 0;
- NdisZeroMemory(&pAd->CommonCfg.HtCapability, sizeof(pAd->CommonCfg.HtCapability));
- NdisZeroMemory(&pAd->CommonCfg.AddHTInfo, sizeof(pAd->CommonCfg.AddHTInfo));
NdisZeroMemory(&pAd->BeaconTxWI, sizeof(pAd->BeaconTxWI));
+#ifdef DOT11_N_SUPPORT
+ NdisZeroMemory(&pAd->CommonCfg.HtCapability, sizeof(pAd->CommonCfg.HtCapability));
+ pAd->HTCEnable = FALSE;
+ pAd->bBroadComHT = FALSE;
+ pAd->CommonCfg.bRdg = FALSE;
+
+#ifdef DOT11N_DRAFT3
+ pAd->CommonCfg.Dot11OBssScanPassiveDwell = dot11OBSSScanPassiveDwell; // Unit : TU. 5~1000
+ pAd->CommonCfg.Dot11OBssScanActiveDwell = dot11OBSSScanActiveDwell; // Unit : TU. 10~1000
+ pAd->CommonCfg.Dot11BssWidthTriggerScanInt = dot11BSSWidthTriggerScanInterval; // Unit : Second
+ pAd->CommonCfg.Dot11OBssScanPassiveTotalPerChannel = dot11OBSSScanPassiveTotalPerChannel; // Unit : TU. 200~10000
+ pAd->CommonCfg.Dot11OBssScanActiveTotalPerChannel = dot11OBSSScanActiveTotalPerChannel; // Unit : TU. 20~10000
+ pAd->CommonCfg.Dot11BssWidthChanTranDelayFactor = dot11BSSWidthChannelTransactionDelayFactor;
+ pAd->CommonCfg.Dot11OBssScanActivityThre = dot11BSSScanActivityThreshold; // Unit : percentage
+ pAd->CommonCfg.Dot11BssWidthChanTranDelay = (pAd->CommonCfg.Dot11BssWidthTriggerScanInt * pAd->CommonCfg.Dot11BssWidthChanTranDelayFactor);
+#endif // DOT11N_DRAFT3 //
+
+ NdisZeroMemory(&pAd->CommonCfg.AddHTInfo, sizeof(pAd->CommonCfg.AddHTInfo));
pAd->CommonCfg.BACapability.field.MMPSmode = MMPS_ENABLE;
pAd->CommonCfg.BACapability.field.MpduDensity = 0;
pAd->CommonCfg.BACapability.field.Policy = IMMED_BA;
pAd->CommonCfg.BACapability.field.RxBAWinLimit = 64; //32;
pAd->CommonCfg.BACapability.field.TxBAWinLimit = 64; //32;
- pAd->CommonCfg.TxRate = RATE_6;
DBGPRINT(RT_DEBUG_TRACE, ("--> UserCfgInit. BACapability = 0x%x\n", pAd->CommonCfg.BACapability.word));
+
+ pAd->CommonCfg.BACapability.field.AutoBA = FALSE;
+ BATableInit(pAd, &pAd->BATable);
+
+ pAd->CommonCfg.bExtChannelSwitchAnnouncement = 1;
+ pAd->CommonCfg.bHTProtect = 1;
+ pAd->CommonCfg.bMIMOPSEnable = TRUE;
+ pAd->CommonCfg.bBADecline = FALSE;
+ pAd->CommonCfg.bDisableReordering = FALSE;
+
+ pAd->CommonCfg.TxBASize = 7;
+
+ pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word;
+#endif // DOT11_N_SUPPORT //
+
+ //pAd->CommonCfg.HTPhyMode.field.BW = BW_20;
+ //pAd->CommonCfg.HTPhyMode.field.MCS = MCS_AUTO;
+ //pAd->CommonCfg.HTPhyMode.field.ShortGI = GI_800;
+ //pAd->CommonCfg.HTPhyMode.field.STBC = STBC_NONE;
+ pAd->CommonCfg.TxRate = RATE_6;
pAd->CommonCfg.MlmeTransmit.field.MCS = MCS_RATE_6;
pAd->CommonCfg.MlmeTransmit.field.BW = BW_20;
pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_OFDM;
- pAd->CommonCfg.BACapability.field.AutoBA = FALSE;
- BATableInit(pAd, &pAd->BATable);
pAd->CommonCfg.BeaconPeriod = 100; // in mSec
@@ -3024,7 +3148,7 @@ VOID UserCfgInit(
RX_FILTER_SET_FLAG(pAd, fRX_FILTER_ACCEPT_BROADCAST);
RX_FILTER_SET_FLAG(pAd, fRX_FILTER_ACCEPT_ALL_MULTICAST);
- pAd->StaCfg.Psm = PWR_ACTIVE;
+ pAd->StaCfg.Psm = PWR_ACTIVE;
pAd->StaCfg.OrigWepStatus = Ndis802_11EncryptionDisabled;
pAd->StaCfg.PairCipher = Ndis802_11EncryptionDisabled;
@@ -3033,7 +3157,7 @@ VOID UserCfgInit(
pAd->StaCfg.DefaultKeyId = 0;
// 802.1x port control
- pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilterAcceptAll;
+ pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP;
pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
pAd->StaCfg.LastMicErrorTime = 0;
pAd->StaCfg.MicErrCnt = 0;
@@ -3051,7 +3175,6 @@ VOID UserCfgInit(
pAd->StaCfg.bScanReqIsFromWebUI = FALSE;
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_DOZE);
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_WAKEUP_NOW);
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ);
pAd->StaCfg.bAutoTxRateSwitch = TRUE;
pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
@@ -3078,13 +3201,9 @@ VOID UserCfgInit(
pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM;
pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM;
pAd->StaCfg.bWindowsACCAMEnable = FALSE;
-
-#ifdef NDIS51_MINIPORT
- pAd->StaCfg.WindowsPowerProfile = NdisPowerProfileAcOnLine; // Ndis802_11PowerModeFast_PSP;
-#endif
- // CCX v1.0 releated init value
#ifdef LEAP_SUPPORT
+ // CCX v1.0 releated init value
RTMPInitTimer(pAd, &pAd->StaCfg.LeapAuthTimer, GET_TIMER_FUNCTION(LeapAuthTimeout), pAd, FALSE);
pAd->StaCfg.LeapAuthMode = CISCO_AuthModeLEAPNone;
pAd->StaCfg.bCkipOn = FALSE;
@@ -3120,12 +3239,13 @@ VOID UserCfgInit(
#ifdef WPA_SUPPLICANT_SUPPORT
pAd->StaCfg.IEEE8021X = FALSE;
pAd->StaCfg.IEEE8021x_required_keys = FALSE;
- pAd->StaCfg.WpaSupplicantUP = 0;
+ pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE;
#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
- pAd->StaCfg.WpaSupplicantUP = 1;
+ pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE;
#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
#endif // WPA_SUPPLICANT_SUPPORT //
- }
+
+ }
#endif // CONFIG_STA_SUPPORT //
// Default for extra information is not valid
@@ -3139,7 +3259,6 @@ VOID UserCfgInit(
//
-
//
// part IV. others
//
@@ -3158,12 +3277,12 @@ VOID UserCfgInit(
pAd->Bbp94 = BBPR94_DEFAULT;
pAd->BbpForCCK = FALSE;
-
+
// initialize MAC table and allocate spin lock
NdisZeroMemory(&pAd->MacTab, sizeof(MAC_TABLE));
InitializeQueueHeader(&pAd->MacTab.McastPsQueue);
NdisAllocateSpinLock(&pAd->MacTabLock);
-
+
#ifdef RALINK_ATE
NdisZeroMemory(&pAd->ate, sizeof(ATE_INFO));
pAd->ate.Mode = ATE_STOP;
@@ -3192,23 +3311,17 @@ VOID UserCfgInit(
#ifdef RALINK_28xx_QA
//pAd->ate.Repeat = 0;
pAd->ate.TxStatus = 0;
- pAd->ate.AtePid = 0;
+ pAd->ate.AtePid = THREAD_PID_INIT_VALUE;
#endif // RALINK_28xx_QA //
#endif // RALINK_ATE //
- pAd->CommonCfg.bExtChannelSwitchAnnouncement = 1;
- pAd->CommonCfg.bHTProtect = 1;
- pAd->CommonCfg.bMIMOPSEnable = TRUE;
- pAd->CommonCfg.bBADecline = FALSE;
- pAd->CommonCfg.bDisableReordering = FALSE;
- pAd->CommonCfg.TxBASize = 7;
-
- pAd->CommonCfg.REGBACapability.word = pAd->CommonCfg.BACapability.word;
pAd->CommonCfg.bWiFiTest = FALSE;
-#ifdef RT2860
+#ifdef RT2860
pAd->bPCIclkOff = FALSE;
#endif // RT2860 //
+
+
DBGPRINT(RT_DEBUG_TRACE, ("<-- UserCfgInit\n"));
}
@@ -3309,9 +3422,9 @@ VOID RTMPInitTimer(
pTimer->PeriodicType = Repeat;
pTimer->State = FALSE;
pTimer->cookie = (ULONG) pData;
-
+
+
RTMP_OS_Init_Timer(pAd, &pTimer->TimerObj, pTimerFunc, (PVOID) pTimer);
-
}
/*
@@ -3342,13 +3455,13 @@ VOID RTMPSetTimer(
pTimer->State = FALSE;
if (pTimer->PeriodicType == TRUE)
{
- pTimer->Repeat = TRUE;
+ pTimer->Repeat = TRUE;
RTMP_SetPeriodicTimer(&pTimer->TimerObj, Value);
}
else
{
pTimer->Repeat = FALSE;
- RTMP_OS_Add_Timer(&pTimer->TimerObj, Value);
+ RTMP_OS_Add_Timer(&pTimer->TimerObj, Value);
}
}
else
@@ -3430,8 +3543,9 @@ VOID RTMPCancelTimer(
if (pTimer->Valid)
{
if (pTimer->State == FALSE)
- pTimer->Repeat = FALSE;
+ pTimer->Repeat = FALSE;
RTMP_OS_Del_Timer(&pTimer->TimerObj, pCancelled);
+
if (*pCancelled == TRUE)
pTimer->State = TRUE;
@@ -3619,7 +3733,7 @@ VOID RTMPEnableRxTx(
IN PRTMP_ADAPTER pAd)
{
DBGPRINT(RT_DEBUG_TRACE, ("==> RTMPEnableRxTx\n"));
-
+
// Enable Rx DMA.
RT28XXDMAEnable(pAd);
diff --git a/rt2860-1.7.0.0/common/rtmp_tkip.c b/rt2860-source-1.8.0.0/common/rtmp_tkip.c
similarity index 96%
copy from rt2860-1.7.0.0/common/rtmp_tkip.c
copy to rt2860-source-1.8.0.0/common/rtmp_tkip.c
index 3b8df83..42d15d6 100644
--- a/rt2860-1.7.0.0/common/rtmp_tkip.c
+++ b/rt2860-source-1.8.0.0/common/rtmp_tkip.c
@@ -552,7 +552,6 @@ BOOLEAN RTMPTkipCompareMICValue(
{
UCHAR OldMic[8];
ULONG Priority = UserPriority;
- INT i;
// Init MIC value calculation
RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey);
@@ -577,18 +576,8 @@ BOOLEAN RTMPTkipCompareMICValue(
if(!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8))
{
DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValue(): TKIP MIC Error !\n")); //MIC error.
- DBGPRINT_RAW(RT_DEBUG_INFO, ("Orig MIC value =")); //MIC error.
- for (i = 0; i < 8; i++)
- {
- DBGPRINT_RAW(RT_DEBUG_INFO, ("%02x:", OldMic[i])); //MIC error.
- }
- DBGPRINT_RAW(RT_DEBUG_INFO, ("\n")); //MIC error.
- DBGPRINT_RAW(RT_DEBUG_INFO, ("Calculated MIC value =")); //MIC error.
- for (i = 0; i < 8; i++)
- {
- DBGPRINT_RAW(RT_DEBUG_INFO, ("%02x:", pAd->PrivateInfo.Rx.MIC[i])); //MIC error.
- }
- DBGPRINT_RAW(RT_DEBUG_INFO, ("\n")); //MIC error.
+
+
return (FALSE);
}
return (TRUE);
@@ -630,7 +619,6 @@ BOOLEAN RTMPTkipCompareMICValueWithLLC(
{
UCHAR OldMic[8];
ULONG Priority = 0;
- INT i;
// Init MIC value calculation
RTMPTkipSetMICKey(&pAd->PrivateInfo.Rx, pMICKey);
@@ -658,18 +646,8 @@ BOOLEAN RTMPTkipCompareMICValueWithLLC(
if(!NdisEqualMemory(pAd->PrivateInfo.Rx.MIC, OldMic, 8))
{
DBGPRINT_RAW(RT_DEBUG_ERROR, ("RTMPTkipCompareMICValueWithLLC(): TKIP MIC Error !\n")); //MIC error.
- DBGPRINT_RAW(RT_DEBUG_INFO, ("Orig MIC value =")); //MIC error.
- for (i = 0; i < 8; i++)
- {
- DBGPRINT_RAW(RT_DEBUG_INFO, ("%02x:", OldMic[i])); //MIC error.
- }
- DBGPRINT_RAW(RT_DEBUG_INFO, ("\n")); //MIC error.
- DBGPRINT_RAW(RT_DEBUG_INFO, ("Calculated MIC value =")); //MIC error.
- for (i = 0; i < 8; i++)
- {
- DBGPRINT_RAW(RT_DEBUG_INFO, ("%02x:", pAd->PrivateInfo.Rx.MIC[i])); //MIC error.
- }
- DBGPRINT_RAW(RT_DEBUG_INFO, ("\n")); //MIC error.
+
+
return (FALSE);
}
return (TRUE);
@@ -709,7 +687,7 @@ VOID RTMPCalculateMICValue(
PUCHAR pSrc;
UCHAR UserPriority;
UCHAR vlan_offset = 0;
-
+
RTMP_QueryPacketInfo(pPacket, &PacketInfo, &pSrcBufVA, &SrcBufLen);
UserPriority = RTMP_GET_PACKET_UP(pPacket);
@@ -719,7 +697,7 @@ VOID RTMPCalculateMICValue(
if (((*(pSrc + 12) << 8) + *(pSrc + 13)) == 0x8100)
vlan_offset = 4;
- {
+ {
RTMPInitMICEngine(
pAd,
pKey->Key,
@@ -745,7 +723,7 @@ VOID RTMPCalculateMICValue(
{
RTMPTkipAppend(&pAd->PrivateInfo.Tx, pSrc, SrcBufLen);
}
-
+
break; // No need handle next packet
} while (TRUE); // End of copying payload
@@ -1248,7 +1226,7 @@ BOOLEAN RTMPSoftDecryptTKIP(
#ifdef RT_BIG_ENDIAN
RTMPFrameEndianChange(pAd, (PUCHAR)pData, DIR_READ, FALSE);
-#endif
+#endif
return TRUE;
}
@@ -1334,8 +1312,8 @@ BOOLEAN RTMPSoftDecryptAES(
payload_remainder = (payload_len) % 16;
num_blocks = (payload_len) / 16;
- DBGPRINT(RT_DEBUG_INFO, ("SoftDecryptAES: payload = %d, num_blocks = %d, payload_remainder = %d\n", payload_len, num_blocks, payload_remainder));
+
// Find start of payload
payload_index = HeaderLen + 8; //IV+EIV
@@ -1351,7 +1329,7 @@ BOOLEAN RTMPSoftDecryptAES(
aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out);
bitwise_xor(aes_out, pData + payload_index, chain_buffer);
- NdisMoveMemory(pData + payload_index - 8, chain_buffer, 16);
+ NdisMoveMemory(pData + payload_index - 8, chain_buffer, 16);
payload_index += 16;
}
@@ -1374,7 +1352,7 @@ BOOLEAN RTMPSoftDecryptAES(
aes128k128d(pWpaKey[KeyID].Key, ctr_preload, aes_out);
bitwise_xor(aes_out, padded_buffer, chain_buffer);
- NdisMoveMemory(pData + payload_index - 8, chain_buffer, payload_remainder);
+ NdisMoveMemory(pData + payload_index - 8, chain_buffer, payload_remainder);
payload_index += payload_remainder;
}
@@ -1395,7 +1373,7 @@ BOOLEAN RTMPSoftDecryptAES(
bitwise_xor(aes_out, padded_buffer, chain_buffer);
NdisMoveMemory(TrailMIC, chain_buffer, 8);
-
+
//
// Calculate MIC
//
diff --git a/rt2860-1.7.0.0/common/rtmp_wep.c b/rt2860-source-1.8.0.0/common/rtmp_wep.c
similarity index 100%
copy from rt2860-1.7.0.0/common/rtmp_wep.c
copy to rt2860-source-1.8.0.0/common/rtmp_wep.c
diff --git a/rt2860-1.7.0.0/common/spectrum.c b/rt2860-source-1.8.0.0/common/spectrum.c
similarity index 95%
copy from rt2860-1.7.0.0/common/spectrum.c
copy to rt2860-source-1.8.0.0/common/spectrum.c
index 1f66ed3..fba1191 100644
--- a/rt2860-1.7.0.0/common/spectrum.c
+++ b/rt2860-source-1.8.0.0/common/spectrum.c
@@ -1090,7 +1090,9 @@ static VOID StartDFSProcedure(
{
// start DFS procedure
pAd->CommonCfg.Channel = Channel;
+#ifdef DOT11_N_SUPPORT
N_ChannelCheck(pAd);
+#endif // DOT11_N_SUPPORT //
pAd->CommonCfg.RadarDetect.RDMode = RD_SWITCHING_MODE;
pAd->CommonCfg.RadarDetect.CSCount = 0;
}
@@ -1147,8 +1149,7 @@ static BOOLEAN PeerChSwAnnSanity(
NdisMoveMemory(&pChSwAnnInfo->ChSwMode, eid_ptr->Octet, 1);
NdisMoveMemory(&pChSwAnnInfo->Channel, eid_ptr->Octet + 1, 1);
NdisMoveMemory(&pChSwAnnInfo->ChSwCnt, eid_ptr->Octet + 2, 1);
- DBGPRINT(RT_DEBUG_INFO, ("%s - IE_CHANNEL_SWITCH_ANNOUNCEMENT., ChSwMode=%d NewCh=%d ChSwCnt=%d.\n",
- __FUNCTION__, pChSwAnnInfo->ChSwMode, pChSwAnnInfo->Channel, pChSwAnnInfo->ChSwCnt));
+
result = TRUE;
break;
@@ -1218,9 +1219,7 @@ static BOOLEAN PeerMeasureReqSanity(
pMeasureReqInfo->MeasureReq.MeasureStartTime = SWAP64(MeasureStartTime);
NdisMoveMemory(&MeasureDuration, ptr + 9, 2);
pMeasureReqInfo->MeasureReq.MeasureDuration = SWAP16(MeasureDuration);
- DBGPRINT(RT_DEBUG_INFO, ("%s - IE_MEASUREMENT_REQUEST., ChNum=%d StartTime=%lld Duration=%d\n",
- __FUNCTION__, pMeasureReqInfo->MeasureReq.ChNum, pMeasureReqInfo->MeasureReq.MeasureStartTime,
- pMeasureReqInfo->MeasureReq.MeasureDuration));
+
result = TRUE;
break;
@@ -1312,7 +1311,7 @@ static BOOLEAN PeerMeasureReportSanity(
NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8);
NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2);
NdisMoveMemory(&pReport->Map, ptr + 11, 1);
- DBGPRINT(RT_DEBUG_INFO, ("%s - IE_MEASUREMENT_REPORT., ChNum=%d StartTime=%lld Duration=%d Map=%x.\n", __FUNCTION__, pReport->ChNum, pReport->MeasureStartTime, pReport->MeasureDuration, pReport->Map.word));
+
}
else if (pMeasureReportInfo->ReportType == RM_CCA)
{
@@ -1322,7 +1321,7 @@ static BOOLEAN PeerMeasureReportSanity(
NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8);
NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2);
NdisMoveMemory(&pReport->CCA_Busy_Fraction, ptr + 11, 1);
- DBGPRINT(RT_DEBUG_INFO, ("%s - IE_MEASUREMENT_REPORT., ChNum=%d StartTime=%lld Duration=%d CCA_Busy_Fraction=%d.\n", __FUNCTION__, pReport->ChNum, pReport->MeasureStartTime, pReport->MeasureDuration, pReport->CCA_Busy_Fraction));
+
}
else if (pMeasureReportInfo->ReportType == RM_RPI_HISTOGRAM)
{
@@ -1332,7 +1331,6 @@ static BOOLEAN PeerMeasureReportSanity(
NdisMoveMemory(&pReport->MeasureStartTime, ptr + 1, 8);
NdisMoveMemory(&pReport->MeasureDuration, ptr + 9, 2);
NdisMoveMemory(&pReport->RPI_Density, ptr + 11, 8);
- DBGPRINT(RT_DEBUG_INFO, ("%s - IE_MEASUREMENT_REPORT., ChNum=%d StartTime=%lld Duration=%d.\n", __FUNCTION__, pReport->ChNum, pReport->MeasureStartTime, pReport->MeasureDuration));
}
result = TRUE;
break;
@@ -1477,6 +1475,10 @@ static VOID PeerChSwAnnAction(
{
CH_SW_ANN_INFO ChSwAnnInfo;
PFRAME_802_11 pFr = (PFRAME_802_11)Elem->Msg;
+#ifdef CONFIG_STA_SUPPORT
+ UCHAR index = 0, Channel = 0, NewChannel = 0;
+ ULONG Bssidx = 0;
+#endif // CONFIG_STA_SUPPORT //
NdisZeroMemory(&ChSwAnnInfo, sizeof(CH_SW_ANN_INFO));
if (! PeerChSwAnnSanity(pAd, Elem->Msg, Elem->MsgLen, &ChSwAnnInfo))
@@ -1485,12 +1487,55 @@ static VOID PeerChSwAnnAction(
return;
}
- // ChSwAnn need check.
- if (DfsRequirementCheck(pAd, ChSwAnnInfo.Channel) == TRUE)
+
+#ifdef CONFIG_STA_SUPPORT
+ if (pAd->OpMode == OPMODE_STA)
{
- NotifyChSwAnnToPeerAPs(pAd, pFr->Hdr.Addr1, pFr->Hdr.Addr2, ChSwAnnInfo.ChSwMode, ChSwAnnInfo.Channel);
- StartDFSProcedure(pAd, ChSwAnnInfo.Channel, ChSwAnnInfo.ChSwMode);
+ Bssidx = BssTableSearch(&pAd->ScanTab, pFr->Hdr.Addr3, pAd->CommonCfg.Channel);
+ if (Bssidx == BSS_NOT_FOUND)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("PeerChSwAnnAction - Bssidx is not found\n"));
+ return;
+ }
+
+ DBGPRINT(RT_DEBUG_TRACE, ("\n****Bssidx is %d, Channel = %d\n", index, pAd->ScanTab.BssEntry[Bssidx].Channel));
+ hex_dump("SSID",pAd->ScanTab.BssEntry[Bssidx].Bssid ,6);
+
+ Channel = pAd->CommonCfg.Channel;
+ NewChannel = ChSwAnnInfo.Channel;
+
+ if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) && (Channel != NewChannel))
+ {
+ // Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection).
+ // In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results.
+ AsicSwitchChannel(pAd, 1, FALSE);
+ AsicLockChannel(pAd, 1);
+ LinkDown(pAd, FALSE);
+ MlmeQueueInit(&pAd->Mlme.Queue);
+ BssTableInit(&pAd->ScanTab);
+ RTMPusecDelay(1000000); // use delay to prevent STA do reassoc
+
+ // channel sanity check
+ for (index = 0 ; index < pAd->ChannelListNum; index++)
+ {
+ if (pAd->ChannelList[index].Channel == NewChannel)
+ {
+ pAd->ScanTab.BssEntry[Bssidx].Channel = NewChannel;
+ pAd->CommonCfg.Channel = NewChannel;
+ AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
+ AsicLockChannel(pAd, pAd->CommonCfg.Channel);
+ DBGPRINT(RT_DEBUG_TRACE, ("&&&&&&&&&&&&&&&&PeerChSwAnnAction - STA receive channel switch announcement IE (New Channel =%d)\n", NewChannel));
+ break;
+ }
+ }
+
+ if (index >= pAd->ChannelListNum)
+ {
+ DBGPRINT_ERR(("&&&&&&&&&&&&&&&&&&&&&&&&&&PeerChSwAnnAction(can not find New Channel=%d in ChannelList[%d]\n", pAd->CommonCfg.Channel, pAd->ChannelListNum));
+ }
+ }
}
+#endif // CONFIG_STA_SUPPORT //
return;
}
diff --git a/rt2860-1.7.0.0/debian/README.Debian b/rt2860-source-1.8.0.0/debian/README.Debian
similarity index 100%
copy from rt2860-1.7.0.0/debian/README.Debian
copy to rt2860-source-1.8.0.0/debian/README.Debian
diff --git a/rt2860-1.7.0.0/debian/README.source b/rt2860-source-1.8.0.0/debian/README.source
similarity index 100%
copy from rt2860-1.7.0.0/debian/README.source
copy to rt2860-source-1.8.0.0/debian/README.source
diff --git a/rt2860-source-1.8.0.0/debian/changelog b/rt2860-source-1.8.0.0/debian/changelog
new file mode 100644
index 0000000..5a294e2
--- /dev/null
+++ b/rt2860-source-1.8.0.0/debian/changelog
@@ -0,0 +1,40 @@
+rt2860-source (1.8.0.0-1) unstable; urgency=low
+
+ * New Upstream Release
+ -Fixed compile error when CARRIER_DETECTION_SUPPORT is enabled.
+ -Add "iwpriv ra0 set CarrierDetect=0(or 1)"
+ -Add new WSC hardware push button function
+ -Add Ad-Hoc to support N rate.
+ -Migrate Mesh supporting to Draft-2.0.
+ -Support WAPI functionality
+ -Fixed suspend/resume error when ra0 down, ra0 up.
+ -Support Linux Kernel 2.6.27
+ -Fixed WPS failed when AP is not in scan table or AP's channel
+ changing after user sets "iwpriv ra0 wsc_start"
+ -Fixed DLS A-MPDU established failed.
+ * Remove Fix-compilation-for-2.6.26 patch
+ * Refresh patch series
+
+
+ -- Glenn Saberton <gsaberton at foomagic.org> Tue, 07 Oct 2008 16:01:22 +0800
+
+rt2860-source (1.7.0.0-2) unstable; urgency=low
+
+ [ Damyan Ivanov ]
+ * Fix license
+ * Add Damyan Ivanov to Uploaders
+ * Build with wpasupplicant support
+ * Various debian/ file fixes
+ * Move the configuration dat file to doc
+
+ [ Glenn Saberton ]
+ * Release 1.7.0.0-2
+
+ -- Glenn Saberton <gsaberton at foomagic.org> Mon, 15 Sep 2008 23:33:32 +0800
+
+rt2860-source (1.7.0.0-1) unstable; urgency=low
+
+ * Initial release. Closes: #497200 (ITP)
+
+ -- Glenn Saberton <gsaberton at foomagic.org> Sat, 23 Aug 2008 14:43:38 +0800
+
diff --git a/rt2860-1.7.0.0/debian/compat b/rt2860-source-1.8.0.0/debian/compat
similarity index 100%
copy from rt2860-1.7.0.0/debian/compat
copy to rt2860-source-1.8.0.0/debian/compat
diff --git a/rt2860-1.7.0.0/debian/control b/rt2860-source-1.8.0.0/debian/control
similarity index 100%
copy from rt2860-1.7.0.0/debian/control
copy to rt2860-source-1.8.0.0/debian/control
diff --git a/rt2860-1.7.0.0/debian/control.modules.in b/rt2860-source-1.8.0.0/debian/control.modules.in
similarity index 100%
copy from rt2860-1.7.0.0/debian/control.modules.in
copy to rt2860-source-1.8.0.0/debian/control.modules.in
diff --git a/rt2860-1.7.0.0/debian/copyright b/rt2860-source-1.8.0.0/debian/copyright
similarity index 100%
copy from rt2860-1.7.0.0/debian/copyright
copy to rt2860-source-1.8.0.0/debian/copyright
diff --git a/rt2860-1.7.0.0/debian/docs b/rt2860-source-1.8.0.0/debian/docs
similarity index 100%
copy from rt2860-1.7.0.0/debian/docs
copy to rt2860-source-1.8.0.0/debian/docs
diff --git a/rt2860-source-1.8.0.0/debian/patches/01-remove-tftp-lines-from-makefile.patch b/rt2860-source-1.8.0.0/debian/patches/01-remove-tftp-lines-from-makefile.patch
new file mode 100644
index 0000000..043c873
--- /dev/null
+++ b/rt2860-source-1.8.0.0/debian/patches/01-remove-tftp-lines-from-makefile.patch
@@ -0,0 +1,44 @@
+From cc65e79c6e457430f60eabffe50b4ad49bcefe73 Mon Sep 17 00:00:00 2001
+From: Glenn Saberton <gsaberton at foomagic.org>
+Date: Tue, 7 Oct 2008 15:38:19 +0800
+Subject: [PATCH 1/3] remove tftp lines from makefile
+
+---
+ rt2860-source_1.8.0.0/Makefile | 18 ------------------
+ 1 files changed, 0 insertions(+), 18 deletions(-)
+
+diff --git a/rt2860-source_1.8.0.0/Makefile b/rt2860-source_1.8.0.0/Makefile
+index 6fa7a73..8f95bcc 100644
+--- a/Makefile
++++ b/Makefile
+@@ -125,27 +125,9 @@ LINUX:
+ ifneq (,$(findstring 2.4,$(LINUX_SRC)))
+ cp -f os/linux/Makefile.4 $(RT28xx_DIR)/os/linux/Makefile
+ make -C $(RT28xx_DIR)/os/linux/
+-ifeq ($(RT28xx_MODE),AP)
+- cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)ap.o /tftpboot
+-else
+-ifeq ($(RT28xx_MODE),APSTA)
+- cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)apsta.o /tftpboot
+-else
+- cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)sta.o /tftpboot
+-endif
+-endif
+ else
+ cp -f os/linux/Makefile.6 $(RT28xx_DIR)/os/linux/Makefile
+ make -C $(LINUX_SRC) SUBDIRS=$(RT28xx_DIR)/os/linux modules
+-ifeq ($(RT28xx_MODE),AP)
+- cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)ap.ko /tftpboot
+-else
+-ifeq ($(RT28xx_MODE),APSTA)
+- cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)apsta.ko /tftpboot
+-else
+- cp -f $(RT28xx_DIR)/os/linux/rt$(CHIPSET)sta.ko /tftpboot
+-endif
+-endif
+ endif
+
+ clean:
+--
+1.5.6.5
+
diff --git a/rt2860-source-1.8.0.0/debian/patches/02-remove-dat-file.patch b/rt2860-source-1.8.0.0/debian/patches/02-remove-dat-file.patch
new file mode 100644
index 0000000..218bb27
--- /dev/null
+++ b/rt2860-source-1.8.0.0/debian/patches/02-remove-dat-file.patch
@@ -0,0 +1,32 @@
+From 568e481700bcd5200549c85b2e385b3d71d0e23b Mon Sep 17 00:00:00 2001
+From: Glenn Saberton <gsaberton at foomagic.org>
+Date: Tue, 7 Oct 2008 15:41:35 +0800
+Subject: [PATCH 2/3] remove dat file
+
+---
+ rt2860-source_1.8.0.0/os/linux/Makefile.6 | 6 ------
+ 1 files changed, 0 insertions(+), 6 deletions(-)
+
+diff --git a/rt2860-source_1.8.0.0/os/linux/Makefile.6 b/rt2860-source_1.8.0.0/os/linux/Makefile.6
+index 5dd36e3..85b0334 100644
+--- a/os/linux/Makefile.6
++++ b/os/linux/Makefile.6
+@@ -72,15 +72,9 @@ clean:
+ rm -f ../../sta/.*.{cmd,flags,d}
+
+ install:
+- rm -rf $(DAT_PATH)
+- $(shell [ ! -f /etc/Wireless ] && mkdir /etc/Wireless)
+- mkdir $(DAT_PATH)
+- cp $(RT28xx_DIR)/$(DAT_FILE_NAME) $(DAT_PATH)/.
+ install -d $(LINUX_SRC_MODULE)
+ install -m 644 -c $(addsuffix .ko,$(MOD_NAME)) $(LINUX_SRC_MODULE)
+ /sbin/depmod -a ${shell uname -r}
+
+ uninstall:
+-# rm -rf $(DAT_PATH)
+ rm -rf $(addprefix $(LINUX_SRC_MODULE),$(addsuffix .ko,$(MOD_NAME)))
+- /sbin/depmod -a ${shell uname -r}
+--
+1.5.6.5
+
diff --git a/rt2860-source-1.8.0.0/debian/patches/03-compile-support-for-wpasupplicant.patch b/rt2860-source-1.8.0.0/debian/patches/03-compile-support-for-wpasupplicant.patch
new file mode 100644
index 0000000..ec01ae0
--- /dev/null
+++ b/rt2860-source-1.8.0.0/debian/patches/03-compile-support-for-wpasupplicant.patch
@@ -0,0 +1,29 @@
+From 481355db8771ded16390c722b8b4ccf63e3fc6a3 Mon Sep 17 00:00:00 2001
+From: Glenn Saberton <gsaberton at foomagic.org>
+Date: Tue, 7 Oct 2008 15:42:47 +0800
+Subject: [PATCH 3/3] compile support for wpasupplicant
+
+---
+ rt2860-source_1.8.0.0/os/linux/config.mk | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/rt2860-source_1.8.0.0/os/linux/config.mk b/rt2860-source_1.8.0.0/os/linux/config.mk
+index 5f4c5d1..957ead8 100644
+--- a/os/linux/config.mk
++++ b/os/linux/config.mk
+@@ -5,10 +5,10 @@ HAS_ATE=n
+ HAS_28xx_QA=n
+
+ # Support Wpa_Supplicant
+-HAS_WPA_SUPPLICANT=n
++HAS_WPA_SUPPLICANT=y
+
+ # Support Native WpaSupplicant for Network Maganger
+-HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=n
++HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y
+
+ #Support Net interface block while Tx-Sw queue full
+ HAS_BLOCK_NET_IF=n
+--
+1.5.6.5
+
diff --git a/rt2860-source-1.8.0.0/debian/patches/series b/rt2860-source-1.8.0.0/debian/patches/series
new file mode 100644
index 0000000..c407862
--- /dev/null
+++ b/rt2860-source-1.8.0.0/debian/patches/series
@@ -0,0 +1,4 @@
+01-remove-tftp-lines-from-makefile.patch
+02-remove-dat-file.patch
+03-compile-support-for-wpasupplicant.patch
+
diff --git a/rt2860-1.7.0.0/debian/rules b/rt2860-source-1.8.0.0/debian/rules
similarity index 100%
copy from rt2860-1.7.0.0/debian/rules
copy to rt2860-source-1.8.0.0/debian/rules
diff --git a/rt2860-1.7.0.0/debian/rules.modules b/rt2860-source-1.8.0.0/debian/rules.modules
similarity index 100%
copy from rt2860-1.7.0.0/debian/rules.modules
copy to rt2860-source-1.8.0.0/debian/rules.modules
diff --git a/rt2860-1.7.0.0/debian/watch b/rt2860-source-1.8.0.0/debian/watch
similarity index 100%
copy from rt2860-1.7.0.0/debian/watch
copy to rt2860-source-1.8.0.0/debian/watch
diff --git a/rt2860-1.7.0.0/include/action.h b/rt2860-source-1.8.0.0/include/action.h
similarity index 100%
copy from rt2860-1.7.0.0/include/action.h
copy to rt2860-source-1.8.0.0/include/action.h
diff --git a/rt2860-1.7.0.0/include/aironet.h b/rt2860-source-1.8.0.0/include/aironet.h
similarity index 100%
copy from rt2860-1.7.0.0/include/aironet.h
copy to rt2860-source-1.8.0.0/include/aironet.h
diff --git a/rt2860-1.7.0.0/include/ap.h b/rt2860-source-1.8.0.0/include/ap.h
similarity index 99%
copy from rt2860-1.7.0.0/include/ap.h
copy to rt2860-source-1.8.0.0/include/ap.h
index 859aab5..fce3209 100644
--- a/rt2860-1.7.0.0/include/ap.h
+++ b/rt2860-source-1.8.0.0/include/ap.h
@@ -165,7 +165,7 @@ USHORT APBuildAssociation(
IN HT_CAPABILITY_IE *pHtCapability,
IN UCHAR HtCapabilityLen,
OUT USHORT *pAid);
-
+
// ap_auth.c
void APAuthStateMachineInit(
@@ -408,8 +408,10 @@ VOID ApLogEvent(
IN PUCHAR pAddr,
IN USHORT Event);
+#ifdef DOT11_N_SUPPORT
VOID APUpdateOperationMode(
IN PRTMP_ADAPTER pAd);
+#endif // DOT11_N_SUPPORT //
VOID APUpdateCapabilityAndErpIe(
IN PRTMP_ADAPTER pAd);
@@ -469,7 +471,7 @@ BOOLEAN PeerAssocReqCmmSanity(
OUT UCHAR *RSN,
OUT UCHAR *pRSNLen,
OUT BOOLEAN *pbWmmCapable,
- OUT ULONG *pRalinkIe,
+ OUT ULONG *pRalinkIe,
#ifdef DOT11N_DRAFT3
OUT EXT_CAP_INFO_ELEMENT *pExtCapInfo,
#endif // DOT11N_DRAFT3 //
diff --git a/rt2860-1.7.0.0/include/chlist.h b/rt2860-source-1.8.0.0/include/chlist.h
similarity index 93%
copy from rt2860-1.7.0.0/include/chlist.h
copy to rt2860-source-1.8.0.0/include/chlist.h
index 3212218..4533e8a 100644
--- a/rt2860-1.7.0.0/include/chlist.h
+++ b/rt2860-source-1.8.0.0/include/chlist.h
@@ -524,7 +524,7 @@ static CH_REGION ChRegion[] =
JAP,
{
{ 1, 14, 20, BOTH, FALSE}, // 2.4 G, ch 1~14
- { 34, 4, 23, IDOR, FALSE}, // 5G, ch 34~46
+ { 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
{ 0}, // end
}
},
@@ -956,15 +956,19 @@ static inline VOID ChBandCheck(
{
switch(PhyMode)
{
- case PHY_11A:
+ case PHY_11A:
+#ifdef DOT11_N_SUPPORT
case PHY_11AN_MIXED:
+#endif // DOT11_N_SUPPORT //
*pChType = BAND_5G;
break;
- case PHY_11AGN_MIXED:
- case PHY_11ABG_MIXED:
- case PHY_11ABGN_MIXED:
+ case PHY_11ABG_MIXED:
+#ifdef DOT11_N_SUPPORT
+ case PHY_11AGN_MIXED:
+ case PHY_11ABGN_MIXED:
+#endif // DOT11_N_SUPPORT //
*pChType = BAND_BOTH;
- break;
+ break;
default:
*pChType = BAND_24G;
@@ -1110,20 +1114,8 @@ static inline VOID BuildBeaconChList(
}
}
-static inline UCHAR GetExtCh(
- IN UCHAR Channel,
- IN UCHAR Direction)
-{
- CHAR ExtCh;
-
- if (Direction == EXTCHA_ABOVE)
- ExtCh = Channel + 4;
- else
- ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0;
-
- return ExtCh;
-}
+#ifdef DOT11_N_SUPPORT
static inline BOOLEAN IsValidChannel(
IN PRTMP_ADAPTER pAd,
IN UCHAR channel)
@@ -1143,6 +1135,22 @@ static inline BOOLEAN IsValidChannel(
return TRUE;
}
+
+static inline UCHAR GetExtCh(
+ IN UCHAR Channel,
+ IN UCHAR Direction)
+{
+ CHAR ExtCh;
+
+ if (Direction == EXTCHA_ABOVE)
+ ExtCh = Channel + 4;
+ else
+ ExtCh = (Channel - 4) > 0 ? (Channel - 4) : 0;
+
+ return ExtCh;
+}
+
+
static inline VOID N_ChannelCheck(
IN PRTMP_ADAPTER pAd)
{
@@ -1191,19 +1199,58 @@ static inline VOID N_ChannelCheck(
if (Channel == 14)
{
pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
- }
+ //pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_NONE; // We didn't set the ExtCh as NONE due to it'll set in RTMPSetHT()
+ }
+#if 0
+ switch (pAd->CommonCfg.CountryRegion & 0x7f)
+ {
+ case REGION_0_BG_BAND: // 1 -11
+ case REGION_1_BG_BAND: // 1 - 13
+ case REGION_5_BG_BAND: // 1 - 14
+ if (Channel <= 4)
+ {
+ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
+ }
+ else if (Channel >= 8)
+ {
+ if ((ChannelNum - Channel) < 4)
+ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
+ }
+ break;
+
+ case REGION_2_BG_BAND: // 10 - 11
+ case REGION_3_BG_BAND: // 10 - 13
+ case REGION_4_BG_BAND: // 14
+ pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
+ break;
+
+ case REGION_6_BG_BAND: // 3 - 9
+ if (Channel <= 5)
+ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
+ else if (Channel == 6)
+ pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
+ else if (Channel >= 7)
+ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
+ break;
+
+ case REGION_7_BG_BAND: // 5 - 13
+ if (Channel <= 8)
+ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_ABOVE;
+ else if (Channel >= 10)
+ pAd->CommonCfg.RegTransmitSetting.field.EXTCHA = EXTCHA_BELOW;
+ break;
+
+ default: // Error. should never happen
+ break;
+ }
+#endif
}
}
-#ifdef DOT11N_DRAFT3
- IF_DEV_CONFIG_OPMODE_ON_AP(pAd)
- {
- APOverlappingBSSScan(pAd);
- }
-#endif // DOT11N_DRAFT3 //
}
+
static inline VOID N_SetCenCh(
IN PRTMP_ADAPTER pAd)
{
@@ -1226,5 +1273,24 @@ static inline VOID N_SetCenCh(
pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
}
}
+#endif // DOT11_N_SUPPORT //
+
+
+static inline UINT8 GetCuntryMaxTxPwr(
+ IN PRTMP_ADAPTER pAd,
+ IN UINT8 channel)
+{
+ int i;
+ for (i = 0; i < pAd->ChannelListNum; i++)
+ {
+ if (pAd->ChannelList[i].Channel == channel)
+ break;
+ }
+
+ if (i == pAd->ChannelListNum)
+ return 0xff;
+ else
+ return pAd->ChannelList[i].MaxTxPwr;
+}
#endif // __CHLIST_H__
diff --git a/rt2860-1.7.0.0/include/dfs.h b/rt2860-source-1.8.0.0/include/dfs.h
similarity index 100%
copy from rt2860-1.7.0.0/include/dfs.h
copy to rt2860-source-1.8.0.0/include/dfs.h
diff --git a/rt2860-1.7.0.0/include/firmware.h b/rt2860-source-1.8.0.0/include/firmware.h
similarity index 100%
copy from rt2860-1.7.0.0/include/firmware.h
copy to rt2860-source-1.8.0.0/include/firmware.h
diff --git a/rt2860-1.7.0.0/include/leap.h b/rt2860-source-1.8.0.0/include/leap.h
similarity index 100%
copy from rt2860-1.7.0.0/include/leap.h
copy to rt2860-source-1.8.0.0/include/leap.h
diff --git a/rt2860-1.7.0.0/include/link_list.h b/rt2860-source-1.8.0.0/include/link_list.h
similarity index 100%
copy from rt2860-1.7.0.0/include/link_list.h
copy to rt2860-source-1.8.0.0/include/link_list.h
diff --git a/rt2860-1.7.0.0/include/md4.h b/rt2860-source-1.8.0.0/include/md4.h
similarity index 100%
copy from rt2860-1.7.0.0/include/md4.h
copy to rt2860-source-1.8.0.0/include/md4.h
diff --git a/rt2860-1.7.0.0/include/md5.h b/rt2860-source-1.8.0.0/include/md5.h
similarity index 85%
copy from rt2860-1.7.0.0/include/md5.h
copy to rt2860-source-1.8.0.0/include/md5.h
index d06ae88..df60360 100644
--- a/rt2860-1.7.0.0/include/md5.h
+++ b/rt2860-source-1.8.0.0/include/md5.h
@@ -52,15 +52,15 @@
#define MD5_MAC_LEN 16
typedef struct _MD5_CTX {
- ULONG Buf[4]; // buffers of four states
+ UINT32 Buf[4]; // buffers of four states
UCHAR Input[64]; // input message
- ULONG LenInBitCount[2]; // length counter for input message, 0 up to 64 bits
+ UINT32 LenInBitCount[2]; // length counter for input message, 0 up to 64 bits
} MD5_CTX;
VOID MD5Init(MD5_CTX *pCtx);
-VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, ULONG LenInBytes);
+VOID MD5Update(MD5_CTX *pCtx, UCHAR *pData, UINT32 LenInBytes);
VOID MD5Final(UCHAR Digest[16], MD5_CTX *pCtx);
-VOID MD5Transform(ULONG Buf[4], ULONG Mes[16]);
+VOID MD5Transform(UINT32 Buf[4], UINT32 Mes[16]);
void md5_mac(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac);
void hmac_md5(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac);
@@ -70,16 +70,16 @@ void hmac_md5(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac);
//
typedef struct _SHA_CTX
{
- ULONG Buf[5]; // buffers of five states
+ UINT32 Buf[5]; // buffers of five states
UCHAR Input[80]; // input message
- ULONG LenInBitCount[2]; // length counter for input message, 0 up to 64 bits
+ UINT32 LenInBitCount[2]; // length counter for input message, 0 up to 64 bits
} SHA_CTX;
VOID SHAInit(SHA_CTX *pCtx);
-UCHAR SHAUpdate(SHA_CTX *pCtx, UCHAR *pData, ULONG LenInBytes);
+UCHAR SHAUpdate(SHA_CTX *pCtx, UCHAR *pData, UINT32 LenInBytes);
VOID SHAFinal(SHA_CTX *pCtx, UCHAR Digest[20]);
-VOID SHATransform(ULONG Buf[5], ULONG Mes[20]);
+VOID SHATransform(UINT32 Buf[5], UINT32 Mes[20]);
#define SHA_DIGEST_LEN 20
#endif // __MD5_H__
diff --git a/rt2860-1.7.0.0/include/mlme.h b/rt2860-source-1.8.0.0/include/mlme.h
similarity index 99%
copy from rt2860-1.7.0.0/include/mlme.h
copy to rt2860-source-1.8.0.0/include/mlme.h
index 4ae0bb4..3f37ad7 100644
--- a/rt2860-1.7.0.0/include/mlme.h
+++ b/rt2860-source-1.8.0.0/include/mlme.h
@@ -112,7 +112,7 @@ extern UINT32 CW_MAX_IN_BITS;
#define RSSI_WEIGHTING 50
#define TX_WEIGHTING 30
#define RX_WEIGHTING 20
-
+
#define BSS_NOT_FOUND 0xFFFFFFFF
@@ -494,7 +494,7 @@ typedef struct {
//This structure substracts ralink supports from all 802.11n-related features.
//Features not listed here but contained in 802.11n spec are not supported in rt2860.
typedef struct {
- #ifdef RT_BIG_ENDIAN
+#ifdef RT_BIG_ENDIAN
USHORT rsv:5;
USHORT AmsduSize:1; // Max receiving A-MSDU size
USHORT AmsduEnable:1; // Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n
@@ -1170,7 +1170,7 @@ typedef struct {
#ifdef CONFIG_STA_SUPPORT
WPA_IE_ WpaIE;
WPA_IE_ RsnIE;
- #ifdef EXT_BUILD_CHANNEL_LIST
+#ifdef EXT_BUILD_CHANNEL_LIST
UCHAR CountryString[3];
BOOLEAN bHasCountryIE;
#endif // EXT_BUILD_CHANNEL_LIST //
@@ -1197,9 +1197,6 @@ typedef struct _MLME_QUEUE_ELEM {
UCHAR Channel;
UCHAR Wcid;
BOOLEAN Occupied;
-#ifdef MLME_EX
- USHORT Idx;
-#endif // MLME_EX //
} MLME_QUEUE_ELEM, *PMLME_QUEUE_ELEM;
typedef struct _MLME_QUEUE {
@@ -1396,6 +1393,9 @@ typedef struct PACKED _RTMP_TX_RATE_SWITCH
#define MAC_TABLE_ASSOC_TIMEOUT 5 // unit: sec
#define MAC_TABLE_FULL(Tab) ((Tab).size == MAX_LEN_OF_MAC_TABLE)
+// AP shall drop the sta if contine Tx fail count reach it.
+#define MAC_ENTRY_LIFE_CHECK_CNT 20 // packet cnt.
+
// Value domain of pMacEntry->Sst
typedef enum _Sst {
SST_NOT_AUTH, // 0: equivalent to IEEE 802.11/1999 state 1
diff --git a/rt2860-1.7.0.0/include/netif_block.h b/rt2860-source-1.8.0.0/include/netif_block.h
similarity index 98%
copy from rt2860-1.7.0.0/include/netif_block.h
copy to rt2860-source-1.8.0.0/include/netif_block.h
index 88a0fde..97b121d 100644
--- a/rt2860-1.7.0.0/include/netif_block.h
+++ b/rt2860-source-1.8.0.0/include/netif_block.h
@@ -27,7 +27,8 @@
#ifndef __NET_IF_BLOCK_H__
#define __NET_IF_BLOCK_H__
-
+
+//#include <linux/device.h>
#include "link_list.h"
#include "rtmp.h"
diff --git a/rt2860-1.7.0.0/include/oid.h b/rt2860-source-1.8.0.0/include/oid.h
similarity index 99%
copy from rt2860-1.7.0.0/include/oid.h
copy to rt2860-source-1.8.0.0/include/oid.h
index 85b42fe..563ac43 100644
--- a/rt2860-1.7.0.0/include/oid.h
+++ b/rt2860-source-1.8.0.0/include/oid.h
@@ -81,7 +81,7 @@
#define MAX_NUMBER_OF_DLS_ENTRY 4
#ifndef UNDER_CE
-
+
#define OID_GEN_MACHINE_NAME 0x0001021A
#ifdef RALINK_ATE
@@ -592,7 +592,7 @@ typedef struct _NDIS_802_11_AUTHENTICATION_EVENT
NDIS_802_11_STATUS_INDICATION Status;
NDIS_802_11_AUTHENTICATION_REQUEST Request[1];
} NDIS_802_11_AUTHENTICATION_EVENT, *PNDIS_802_11_AUTHENTICATION_EVENT;
-
+
// 802.11 Media stream constraints, associated with OID_802_11_MEDIA_STREAM_MODE
typedef enum _NDIS_802_11_MEDIA_STREAM_MODE
{
@@ -681,7 +681,7 @@ enum {
};
#endif // CONFIG_STA_SUPPORT //
-
+
#ifdef SNMP_SUPPORT
//SNMP ieee 802dot11, kathy , 2008_0220
// dot11res(3)
@@ -711,12 +711,12 @@ enum {
#define OID_802_11_GET_CH_LIST 0x0715
#define OID_802_11_GET_COUNTRY_CODE 0x0716
#define OID_802_11_GET_CHANNEL_GEOGRAPHY 0x0717
-
+
#ifdef LLTD_SUPPORT
// for consistency with RT61
#define RT_OID_GET_PHY_MODE 0x761
#endif // LLTD_SUPPORT //
-
+
// New for MeetingHouse Api support
#define OID_MH_802_1X_SUPPORTED 0xFFEDC100
@@ -760,6 +760,7 @@ typedef enum _RT_802_11_PHY_MODE {
PHY_11A,
PHY_11ABG_MIXED,
PHY_11G,
+#ifdef DOT11_N_SUPPORT
PHY_11ABGN_MIXED, // both band 5
PHY_11N_2_4G, // 11n-only with 2.4G band 6
PHY_11GN_MIXED, // 2.4G band 7
@@ -767,16 +768,9 @@ typedef enum _RT_802_11_PHY_MODE {
PHY_11BGN_MIXED, // if check 802.11b. 9
PHY_11AGN_MIXED, // if check 802.11b. 10
PHY_11N_5G, // 11n-only with 5G band 11
+#endif // DOT11_N_SUPPORT //
} RT_802_11_PHY_MODE;
-typedef enum _RT_802_11_ADHOC_MODE {
- ADHOC_11B,
- ADHOC_11BG_MIXED,
- ADHOC_11G,
- ADHOC_11A,
- ADHOC_11ABG_MIXED
-} RT_802_11_ADHOC_MODE;
-
// put all proprietery for-query objects here to reduce # of Query_OID
typedef struct _RT_802_11_LINK_STATUS {
ULONG CurrTxRate; // in units of 0.5Mbps
@@ -927,7 +921,7 @@ typedef struct {
UCHAR SHORTGI;
UCHAR rsv;
} OID_SET_HT_PHYMODE, *POID_SET_HT_PHYMODE;
-
+
#ifdef LLTD_SUPPORT
typedef struct _RT_LLTD_ASSOICATION_ENTRY {
UCHAR Addr[ETH_LENGTH_OF_ADDRESS];
@@ -978,7 +972,7 @@ typedef enum _RT_802_11_DLS_MODE {
#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
#endif // WPA_SUPPLICANT_SUPPORT //
#endif // CONFIG_STA_SUPPORT //
-
+
#define MAX_CUSTOM_LEN 128
#ifdef CONFIG_STA_SUPPORT
@@ -995,6 +989,7 @@ typedef struct _RT_CHANNEL_LIST_INFO
UCHAR ChannelList[MAX_NUM_OF_CHS]; // list all supported channels for site survey
UCHAR ChannelListNum; // number of channel in ChannelList[]
} RT_CHANNEL_LIST_INFO, *PRT_CHANNEL_LIST_INFO;
-
+
+
#endif // _OID_H_
diff --git a/rt2860-1.7.0.0/include/rt2860.h b/rt2860-source-1.8.0.0/include/rt2860.h
similarity index 99%
copy from rt2860-1.7.0.0/include/rt2860.h
copy to rt2860-source-1.8.0.0/include/rt2860.h
index dfdc23c..fd7dafb 100644
--- a/rt2860-1.7.0.0/include/rt2860.h
+++ b/rt2860-source-1.8.0.0/include/rt2860.h
@@ -1,9 +1,9 @@
/*
*************************************************************************
* Ralink Tech Inc.
- * 4F, No. 2 Technology 5th Rd.
- * Science-based Industrial Park
- * Hsin-chu, Taiwan, R.O.C.
+ * 5F., No.36, Taiyuan St., Jhubei City,
+ * Hsinchu County 302,
+ * Taiwan, R.O.C.
*
* (c) Copyright 2002-2007, Ralink Technology, Inc.
*
diff --git a/rt2860-1.7.0.0/include/rt28xx.h b/rt2860-source-1.8.0.0/include/rt28xx.h
similarity index 97%
copy from rt2860-1.7.0.0/include/rt28xx.h
copy to rt2860-source-1.8.0.0/include/rt28xx.h
index b2694dd..250321f 100644
--- a/rt2860-1.7.0.0/include/rt28xx.h
+++ b/rt2860-source-1.8.0.0/include/rt28xx.h
@@ -1626,7 +1626,7 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define HW_DEBUG_SETTING_BASE 0x77f0 // 0x77f0~0x77ff total 16 bytes
#define HW_DEBUG_SETTING_BASE2 0x7770 // 0x77f0~0x77ff total 16 bytes
- // In order to support maximum 8 MBSS and its maximum length is 512 for each beacon
+// In order to support maximum 8 MBSS and its maximum length is 512 for each beacon
// Three section discontinue memory segments will be used.
// 1. The original region for BCN 0~3
// 2. Extract memory from FCE table for BCN 4~5
@@ -1690,7 +1690,7 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define PID_DATA_AMPDU 0x04
#define PID_DATA_NO_ACK 0x08
#define PID_DATA_NOT_NORM_ACK 0x03
- // value domain of pTxD->HostQId (4-bit: 0~15)
+// value domain of pTxD->HostQId (4-bit: 0~15)
#define QID_AC_BK 1 // meet ACI definition in 802.11e
#define QID_AC_BE 0 // meet ACI definition in 802.11e
#define QID_AC_VI 2
@@ -1708,6 +1708,39 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define BUSY 1
#define IDLE 0
+#define RF_R00 0
+#define RF_R01 1
+#define RF_R02 2
+#define RF_R03 3
+#define RF_R04 4
+#define RF_R05 5
+#define RF_R06 6
+#define RF_R07 7
+#define RF_R08 8
+#define RF_R09 9
+#define RF_R10 10
+#define RF_R11 11
+#define RF_R12 12
+#define RF_R13 13
+#define RF_R14 14
+#define RF_R15 15
+#define RF_R16 16
+#define RF_R17 17
+#define RF_R18 18
+#define RF_R19 19
+#define RF_R20 20
+#define RF_R21 21
+#define RF_R22 22
+#define RF_R23 23
+#define RF_R24 24
+#define RF_R25 25
+#define RF_R26 26
+#define RF_R27 27
+#define RF_R28 28
+#define RF_R29 29
+#define RF_R30 30
+#define RF_R31 31
+
#define BBP_R0 0 // version
#define BBP_R1 1 // TSSI
#define BBP_R2 2 // TX configure
@@ -1722,15 +1755,18 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define BBP_R21 21
#define BBP_R22 22
#define BBP_R24 24
+#define BBP_R25 25
#define BBP_R49 49 //TSSI
#define BBP_R50 50
#define BBP_R51 51
#define BBP_R52 52
+#define BBP_R55 55
#define BBP_R62 62 // Rx SQ0 Threshold HIGH
#define BBP_R63 63
#define BBP_R64 64
#define BBP_R65 65
#define BBP_R66 66
+#define BBP_R67 67
#define BBP_R68 68
#define BBP_R69 69
#define BBP_R70 70 // Rx AGC SQ CCK Xcorr threshold
@@ -1762,7 +1798,7 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db
- #define RSSI_FOR_VERY_LOW_SENSIBILITY -35
+#define RSSI_FOR_VERY_LOW_SENSIBILITY -35
#define RSSI_FOR_LOW_SENSIBILITY -58
#define RSSI_FOR_MID_LOW_SENSIBILITY -80
#define RSSI_FOR_MID_SENSIBILITY -90
@@ -1794,6 +1830,7 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define EEPROM_LNA_OFFSET 0x44
#define EEPROM_RSSI_BG_OFFSET 0x46
#define EEPROM_RSSI_A_OFFSET 0x4a
+#define EEPROM_DEFINE_MAX_TXPWR 0x4e
#define EEPROM_TXPOWER_BYRATE_20MHZ_2_4G 0xde // 20MHZ 2.4G tx power.
#define EEPROM_TXPOWER_BYRATE_40MHZ_2_4G 0xee // 40MHZ 2.4G tx power.
#define EEPROM_TXPOWER_BYRATE_20MHZ_5G 0xfa // 20MHZ 5G tx power.
@@ -2647,4 +2684,31 @@ typedef union _QOS_CSR1_STRUC {
} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC;
#endif
+#define RF_CSR_CFG 0x500
+#ifdef RT_BIG_ENDIAN
+typedef union _RF_CSR_CFG_STRUC {
+ struct {
+ UINT Rsvd1:14; // Reserved
+ UINT RF_CSR_KICK:1; // kick RF register read/write
+ UINT RF_CSR_WR:1; // 0: read 1: write
+ UINT Rsvd2:3; // Reserved
+ UINT TESTCSR_RFACC_REGNUM:5; // RF register ID
+ UINT RF_CSR_DATA:8; // DATA
+ } field;
+ UINT word;
+} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC;
+#else
+typedef union _RF_CSR_CFG_STRUC {
+ struct {
+ UINT RF_CSR_DATA:8; // DATA
+ UINT TESTCSR_RFACC_REGNUM:5; // RF register ID
+ UINT Rsvd2:3; // Reserved
+ UINT RF_CSR_WR:1; // 0: read 1: write
+ UINT RF_CSR_KICK:1; // kick RF register read/write
+ UINT Rsvd1:14; // Reserved
+ } field;
+ UINT word;
+} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC;
+#endif
+
#endif // __RT28XX_H__
diff --git a/rt2860-1.7.0.0/include/rt_ate.h b/rt2860-source-1.8.0.0/include/rt_ate.h
similarity index 100%
copy from rt2860-1.7.0.0/include/rt_ate.h
copy to rt2860-source-1.8.0.0/include/rt_ate.h
diff --git a/rt2860-1.7.0.0/include/rt_config.h b/rt2860-source-1.8.0.0/include/rt_config.h
similarity index 99%
copy from rt2860-1.7.0.0/include/rt_config.h
copy to rt2860-source-1.8.0.0/include/rt_config.h
index 3af0df0..09f853a 100644
--- a/rt2860-1.7.0.0/include/rt_config.h
+++ b/rt2860-source-1.8.0.0/include/rt_config.h
@@ -66,7 +66,7 @@
#include "ap.h"
#include "dfs.h"
#include "chlist.h"
-#include "spectrum.h"
+#include "spectrum.h"
#ifdef LEAP_SUPPORT
#include "leap.h"
diff --git a/rt2860-1.7.0.0/include/rt_linux.h b/rt2860-source-1.8.0.0/include/rt_linux.h
similarity index 95%
copy from rt2860-1.7.0.0/include/rt_linux.h
copy to rt2860-source-1.8.0.0/include/rt_linux.h
index 76f90d8..48e5f3e 100644
--- a/rt2860-1.7.0.0/include/rt_linux.h
+++ b/rt2860-source-1.8.0.0/include/rt_linux.h
@@ -94,7 +94,7 @@ typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_
#define STA_PROFILE_PATH "/etc/Wireless/RT2860STA/RT2860STA.dat"
#define STA_RTMP_FIRMWARE_FILE_NAME "/etc/Wireless/RT2860STA/RT2860STA.bin"
#define STA_NIC_DEVICE_NAME "RT2860STA"
-#define STA_DRIVER_VERSION "1.7.0.0"
+#define STA_DRIVER_VERSION "1.8.0.0"
#ifdef MULTIPLE_CARD_SUPPORT
#define CARD_INFO_PATH "/etc/Wireless/RT2860STA/RT2860STACard.dat"
#endif // MULTIPLE_CARD_SUPPORT //
@@ -161,7 +161,7 @@ typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_
#define MIN_NET_DEVICE_FOR_MESH 0x30
#ifdef CONFIG_STA_SUPPORT
#define MIN_NET_DEVICE_FOR_DLS 0x40
- #endif // CONFIG_STA_SUPPORT //
+#endif // CONFIG_STA_SUPPORT //
#ifdef CONFIG_STA_SUPPORT
@@ -171,6 +171,22 @@ typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_
#define NDIS_PACKET_TYPE_ALL_MULTICAST 3
#endif // CONFIG_STA_SUPPORT //
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+typedef struct pid * THREAD_PID;
+#define THREAD_PID_INIT_VALUE NULL
+#define GET_PID(_v) find_get_pid(_v)
+#define GET_PID_NUMBER(_v) pid_nr(_v)
+#define CHECK_PID_LEGALITY(_pid) if (pid_nr(_pid) >= 0)
+#define KILL_THREAD_PID(_A, _B, _C) kill_pid(_A, _B, _C)
+#else
+typedef pid_t THREAD_PID;
+#define THREAD_PID_INIT_VALUE -1
+#define GET_PID(_v) _v
+#define GET_PID_NUMBER(_v) _v
+#define CHECK_PID_LEGALITY(_pid) if (_pid >= 0)
+#define KILL_THREAD_PID(_A, _B, _C) kill_proc(_A, _B, _C)
+#endif
+
struct os_lock {
spinlock_t lock;
unsigned long flags;
@@ -281,11 +297,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int
#define NdisMIndicateStatus(_w, _x, _y, _z)
-#ifdef WIN_NDIS
-typedef NDIS_MINIPORT_TIMER RTMP_OS_TIMER;
-#else
typedef struct timer_list RTMP_OS_TIMER;
-#endif
@@ -364,7 +376,7 @@ extern ULONG RTDebugLevel;
{ \
spin_unlock_bh((spinlock_t *)(__lock)); \
}
-
+
// sample, use semaphore lock to replace IRQ lock, 2007/11/15
#define RTMP_IRQ_LOCK(__lock, __irqflags) \
{ \
@@ -387,7 +399,7 @@ extern ULONG RTDebugLevel;
#define RTMP_INT_UNLOCK(__lock, __irqflag) \
{ \
spin_unlock_irqrestore((spinlock_t *)(__lock), ((unsigned long)__irqflag)); \
-}
+}
#ifdef RT2860
#if defined(INF_TWINPASS) || defined(INF_DANUBE) || defined(IKANOS_VX_1X0)
@@ -524,7 +536,7 @@ do { \
wait_event_interruptible_timeout(_wait, 0, ONE_TICK); }
- /* Modified by Wu Xi-Kun 4/21/2006 */
+/* Modified by Wu Xi-Kun 4/21/2006 */
typedef void (*TIMER_FUNCTION)(unsigned long);
#define COPY_MAC_ADDR(Addr1, Addr2) memcpy((Addr1), (Addr2), MAC_ADDR_LEN)
@@ -578,8 +590,8 @@ DECLARE_TIMER_FUNCTION(RadioOnExec);
#ifdef QOS_DLS_SUPPORT
DECLARE_TIMER_FUNCTION(DlsTimeoutAction);
#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
-
+#endif // CONFIG_STA_SUPPORT //
+
void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time);
@@ -685,7 +697,12 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time);
#define RTMP_SET_PACKET_MOREDATA(_p, _morebit) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+7] = _morebit)
#define RTMP_GET_PACKET_MOREDATA(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+7])
-
+
+
+#if 0
+//#define RTMP_SET_PACKET_DHCP(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] = _flg)
+//#define RTMP_GET_PACKET_DHCP(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11])
+#else
//
// Sepcific Pakcet Type definition
//
@@ -694,6 +711,7 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time);
#define RTMP_PACKET_SPECIFIC_DHCP 0x01
#define RTMP_PACKET_SPECIFIC_EAPOL 0x02
#define RTMP_PACKET_SPECIFIC_IPV4 0x04
+#define RTMP_PACKET_SPECIFIC_WAI 0x08
#define RTMP_PACKET_SPECIFIC_VLAN 0x10
#define RTMP_PACKET_SPECIFIC_LLCSNAP 0x20
@@ -720,7 +738,17 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time);
}while(0)
#define RTMP_GET_PACKET_EAPOL(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_EAPOL)
-#define RTMP_GET_PACKET_LOWRATE(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & (RTMP_PACKET_SPECIFIC_EAPOL | RTMP_PACKET_SPECIFIC_DHCP))
+//WAI
+#define RTMP_SET_PACKET_WAI(_p, _flg) \
+ do{ \
+ if (_flg) \
+ (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) |= (RTMP_PACKET_SPECIFIC_WAI); \
+ else \
+ (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11]) &= (!RTMP_PACKET_SPECIFIC_WAI); \
+ }while(0)
+#define RTMP_GET_PACKET_WAI(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_WAI)
+
+#define RTMP_GET_PACKET_LOWRATE(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & (RTMP_PACKET_SPECIFIC_EAPOL | RTMP_PACKET_SPECIFIC_DHCP | RTMP_PACKET_SPECIFIC_WAI))
//VLAN
#define RTMP_SET_PACKET_VLAN(_p, _flg) \
@@ -753,6 +781,8 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time);
}while(0)
#define RTMP_GET_PACKET_IPV4(_p) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+11] & RTMP_PACKET_SPECIFIC_IPV4)
+
+#endif
// If this flag is set, it indicates that this EAPoL frame MUST be clear.
diff --git a/rt2860-1.7.0.0/include/rtmp.h b/rt2860-source-1.8.0.0/include/rtmp.h
similarity index 97%
copy from rt2860-1.7.0.0/include/rtmp.h
copy to rt2860-source-1.8.0.0/include/rtmp.h
index 6b0196f..7259f38 100644
--- a/rt2860-1.7.0.0/include/rtmp.h
+++ b/rt2860-source-1.8.0.0/include/rtmp.h
@@ -43,9 +43,6 @@
#include "link_list.h"
#include "spectrum_def.h"
-#ifdef MLME_EX
-#include "mlme_ex_def.h"
-#endif // MLME_EX //
#ifdef CONFIG_STA_SUPPORT
#include <aironet.h>
@@ -138,12 +135,16 @@ extern UCHAR CipherSuiteWpaNoneAesLen;
extern UCHAR SsidIe;
extern UCHAR SupRateIe;
extern UCHAR ExtRateIe;
+
+#ifdef DOT11_N_SUPPORT
extern UCHAR HtCapIe;
extern UCHAR AddHtInfoIe;
extern UCHAR NewExtChanIe;
#ifdef DOT11N_DRAFT3
extern UCHAR ExtHtCapIe;
#endif // DOT11N_DRAFT3 //
+#endif // DOT11_N_SUPPORT //
+
extern UCHAR ErpIe;
extern UCHAR DsIe;
extern UCHAR TimIe;
@@ -166,6 +167,8 @@ extern UCHAR RateSwitchTable[];
extern UCHAR RateSwitchTable11B[];
extern UCHAR RateSwitchTable11G[];
extern UCHAR RateSwitchTable11BG[];
+
+#ifdef DOT11_N_SUPPORT
extern UCHAR RateSwitchTable11BGN1S[];
extern UCHAR RateSwitchTable11BGN2S[];
extern UCHAR RateSwitchTable11BGN2SForABand[];
@@ -176,6 +179,7 @@ extern UCHAR RateSwitchTable11N2SForABand[];
#ifdef CONFIG_STA_SUPPORT
extern UCHAR PRE_N_HT_OUI[];
#endif // CONFIG_STA_SUPPORT //
+#endif // DOT11_N_SUPPORT //
#define MAXSEQ (0xFFF)
@@ -191,7 +195,7 @@ typedef struct _ATE_INFO {
UCHAR Addr1[MAC_ADDR_LEN];
UCHAR Addr2[MAC_ADDR_LEN];
UCHAR Addr3[MAC_ADDR_LEN];
- UCHAR Channel;
+ UCHAR Channel;
UINT32 TxLength;
UINT32 TxCount;
UINT32 TxDoneCount; // Tx DMA Done
@@ -228,7 +232,7 @@ typedef struct _ATE_INFO {
USHORT DLen; // Data Length
USHORT seq;
UINT32 CID;
- pid_t AtePid;
+ THREAD_PID AtePid;
// counters
UINT32 U2M;
UINT32 OtherData;
@@ -264,6 +268,7 @@ struct ate_racfghdr {
#endif // RALINK_28xx_QA //
#endif // RALINK_ATE //
+#ifdef DOT11_N_SUPPORT
struct reordering_mpdu
{
struct reordering_mpdu *next;
@@ -284,6 +289,7 @@ struct reordering_mpdu_pool
NDIS_SPIN_LOCK lock;
struct reordering_list freelist;
};
+#endif // DOT11_N_SUPPORT //
typedef struct _RSSI_SAMPLE {
CHAR LastRssi0; // last received RSSI
@@ -385,36 +391,12 @@ typedef struct _QUEUE_HEADER {
#define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
-#ifdef WIN_NDIS
-#define RTMP_INC_REF(_A) NdisInterlockedIncrement(&(_A)->RefCount)
-#define RTMP_DEC_REF(_A) NdisInterlockedDecrement(&(_A)->RefCount); ASSERT(_A->RefCount >= 0)
-#define RTMP_GET_REF(_A) ((_A)->RefCount)
-
-#define RTMP_INC_RCV_REF(_A) ((_A)->RcvRefCount++)
-#define RTMP_DEC_RCV_REF(_A) ((_A)->RcvRefCount--)
-#define RTMP_GET_RCV_REF(_A) ((_A)->RcvRefCount)
-
-#define RTMP_OFFSET(field) ((UINT)FIELD_OFFSET(RTMP_ADAPTER, field))
-#define RTMP_SIZE(field) sizeof(((PRTMP_ADAPTER)0)->field)
-
-#define COMMON_CFG_OFFSET(field) ((UINT)FIELD_OFFSET(RTMP_ADAPTER, CommonCfg) + (UINT)FIELD_OFFSET(COMMON_CONFIG, field))
-#define STA_CFG_OFFSET(field) ((UINT)FIELD_OFFSET(RTMP_ADAPTER, StaCfg) + (UINT)FIELD_OFFSET(STA_ADMIN_CONFIG, field))
-#define AP_CFG_OFFSET(field) ((UINT)FIELD_OFFSET(RTMP_ADAPTER, ApCfg) + (UINT)FIELD_OFFSET(AP_ADMIN_CONFIG, field))
-#define COMMON_CFG_SIZE(field) sizeof(((PCOMMON_CONFIG)0)->field)
-#define STA_CFG_SIZE(field) sizeof(((PSTA_ADMIN_CONFIG)0)->field)
-#define AP_CFG_SIZE(field) sizeof(((PAP_ADMIN_CONFIG)0)->field)
-
-#define INC_RING_INDEX(_idx, _RingSize) \
-{ \
- (_idx)++; \
- if ((_idx) >= (_RingSize)) _idx=0; \
-}
-#else
#define INC_RING_INDEX(_idx, _RingSize) \
{ \
(_idx) = (_idx+1) % (_RingSize); \
}
-#endif /* Modified by Wu Xi-Kun 4/24/2006 */
+
+#define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
#define RING_PACKET_INIT(_TxRing, _idx) \
{ \
@@ -449,6 +431,8 @@ typedef struct _QUEUE_HEADER {
break; \
} \
}
+
+#ifdef DOT11_N_SUPPORT
// StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
#define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
{ \
@@ -472,7 +456,21 @@ typedef struct _QUEUE_HEADER {
_pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
_pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
}
+#endif // DOT11_N_SUPPORT //
+//
+// MACRO for 32-bit PCI register read / write
+//
+// Usage : RTMP_IO_READ32(
+// PRTMP_ADAPTER pAd,
+// ULONG Register_Offset,
+// PULONG pValue)
+//
+// RTMP_IO_WRITE32(
+// PRTMP_ADAPTER pAd,
+// ULONG Register_Offset,
+// ULONG Value)
+//
//
// BBP & RF are using indirect access. Before write any value into it.
@@ -906,10 +904,8 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
}
#endif // RT2860 //
-
#define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
-//#endif
#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
@@ -939,11 +935,11 @@ typedef struct _RTMP_REG_PAIR
ULONG Value;
} RTMP_REG_PAIR, *PRTMP_REG_PAIR;
-typedef struct _BBP_REG_PAIR
+typedef struct _REG_PAIR
{
UCHAR Register;
UCHAR Value;
-} BBP_REG_PAIR, *PBBP_REG_PAIR;
+} REG_PAIR, *PREG_PAIR;
//
// Register set pair for initialzation register set definition
@@ -957,6 +953,13 @@ typedef struct _RTMP_RF_REGS
ULONG R4;
} RTMP_RF_REGS, *PRTMP_RF_REGS;
+typedef struct _FREQUENCY_ITEM {
+ UCHAR Channel;
+ UCHAR N;
+ UCHAR R;
+ UCHAR K;
+} FREQUENCY_ITEM, *PFREQUENCY_ITEM;
+
//
// Data buffer for DMA operation, the buffer must be contiguous physical memory
// Both DMA to / from CPU use the same structure.
@@ -970,7 +973,7 @@ typedef struct _RTMP_DMABUF
typedef union _HEADER_802_11_SEQ{
-#ifdef BIG_ENDAIN
+#ifdef RT_BIG_ENDIAN
struct {
USHORT Sequence:12;
USHORT Frag:4;
@@ -1410,10 +1413,14 @@ typedef struct _MLME_STRUCT {
// Action
STATE_MACHINE ActMachine;
+
#ifdef QOS_DLS_SUPPORT
STATE_MACHINE DlsMachine;
STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
-#endif // QOS_DLS_SUPPORT //
+#endif // QOS_DLS_SUPPORT //
+
+
+
ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
ULONG Now32; // latch the value of NdisGetSystemUpTime()
@@ -1441,6 +1448,8 @@ typedef struct _MLME_STRUCT {
BOOLEAN bLowThroughput;
BOOLEAN bEnableAutoAntennaCheck;
RALINK_TIMER_STRUCT RxAntEvalTimer;
+
+
} MLME_STRUCT, *PMLME_STRUCT;
// structure for radar detection and channel switch
@@ -1496,7 +1505,7 @@ typedef enum _ORI_BLOCKACK_STATUS
Originator_Done
} ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
-
+#ifdef DOT11_N_SUPPORT
typedef struct _BA_ORI_ENTRY{
UCHAR Wcid;
UCHAR TID;
@@ -1591,6 +1600,7 @@ typedef union _BACAP_STRUC {
#endif
UINT32 word;
} BACAP_STRUC, *PBACAP_STRUC;
+#endif // DOT11_N_SUPPORT //
//This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
typedef struct _IOT_STRUC {
@@ -1710,6 +1720,7 @@ typedef struct _MULTISSID_STRUCT {
NDIS_802_11_AUTHENTICATION_MODE AuthMode;
NDIS_802_11_WEP_STATUS WepStatus;
NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
+ WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
ULONG TxCount;
ULONG RxCount;
@@ -1719,8 +1730,8 @@ typedef struct _MULTISSID_STRUCT {
ULONG RxDropCount;
HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
- DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
RT_HT_PHY_INFO DesiredHtPhyInfo;
+ DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
BOOLEAN bAutoTxRateSwitch;
UCHAR DefaultKeyId;
@@ -1747,6 +1758,7 @@ typedef struct _MULTISSID_STRUCT {
UCHAR RSNIE_Len[2];
UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
+
UCHAR TimIELocationInBeacon;
UCHAR CapabilityInfoLocationInBeacon;
// outgoing BEACON frame buffer and corresponding TXWI
@@ -1798,6 +1810,8 @@ typedef struct _MULTISSID_STRUCT {
CHAR RssiOfRcvdSpoofedUnknownMgmt;
CHAR RssiOfRcvdReplayAttack;
+ BOOLEAN bBcnSntReq;
+ UCHAR BcnBufIdx;
} MULTISSID_STRUCT, *PMULTISSID_STRUCT;
@@ -1873,8 +1887,10 @@ typedef struct _COMMON_CONFIG {
ULONG TxPowerPercentage; // 0~100 %
ULONG TxPowerDefault; // keep for TxPowerPercentage
+#ifdef DOT11_N_SUPPORT
BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
+#endif // DOT11_N_SUPPORT //
IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
@@ -1886,7 +1902,9 @@ typedef struct _COMMON_CONFIG {
BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
+#ifdef DOT11_N_SUPPORT
BOOLEAN bRdg;
+#endif // DOT11_N_SUPPORT //
BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
@@ -1907,9 +1925,14 @@ typedef struct _COMMON_CONFIG {
// IEEE802.11H--DFS.
RADAR_DETECT_STRUCT RadarDetect;
+#ifdef CARRIER_DETECTION_SUPPORT
+ CARRIER_DETECTION CarrierDetect;
+#endif // CARRIER_DETECTION_SUPPORT //
+#ifdef DOT11_N_SUPPORT
// HT
UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
+ //RT_HT_CAPABILITY SupportedHtPhy;
RT_HT_CAPABILITY DesiredHtPhy;
HT_CAPABILITY_IE HtCapability;
ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
@@ -1935,26 +1958,29 @@ typedef struct _COMMON_CONFIG {
ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
- NDIS_SPIN_LOCK TriggerEventTabLock;
+ NDIS_SPIN_LOCK TriggerEventTabLock;
BSS_2040_COEXIST_IE LastBSSCoexist2040;
BSS_2040_COEXIST_IE BSSCoexist2040;
TRIGGER_EVENT_TAB TriggerEventTab;
UCHAR ChannelListIdx;
// <====== 11n D3.0 =======================
+ BOOLEAN bOverlapScanning;
#endif // DOT11N_DRAFT3 //
- BOOLEAN bHTProtect;
- BOOLEAN bMIMOPSEnable;
- BOOLEAN bBADecline;
- BOOLEAN bDisableReordering;
- BOOLEAN bForty_Mhz_Intolerant;
- BOOLEAN bExtChannelSwitchAnnouncement;
- BOOLEAN bRcvBSSWidthTriggerEvents;
- ULONG LastRcvBSSWidthTriggerEventsTime;
+ BOOLEAN bHTProtect;
+ BOOLEAN bMIMOPSEnable;
+ BOOLEAN bBADecline;
+ BOOLEAN bDisableReordering;
+ BOOLEAN bForty_Mhz_Intolerant;
+ BOOLEAN bExtChannelSwitchAnnouncement;
+ BOOLEAN bRcvBSSWidthTriggerEvents;
+ ULONG LastRcvBSSWidthTriggerEventsTime;
+
+ UCHAR TxBASize;
+#endif // DOT11_N_SUPPORT //
// Enable wireless event
- BOOLEAN bWirelessEvent;
- UCHAR TxBASize;
+ BOOLEAN bWirelessEvent;
BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
// Tx & Rx Stream number selection
@@ -1967,13 +1993,26 @@ typedef struct _COMMON_CONFIG {
UCHAR McastTransmitPhyMode;
#endif // MCAST_RATE_SPECIFIC //
- BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
+ BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
- NDIS_SPIN_LOCK MeasureReqTabLock;
+
+
+ NDIS_SPIN_LOCK MeasureReqTabLock;
PMEASURE_REQ_TAB pMeasureReqTab;
NDIS_SPIN_LOCK TpcReqTabLock;
PTPC_REQ_TAB pTpcReqTab;
+
+ // transmit phy mode, trasmit rate for Multicast.
+#ifdef MCAST_RATE_SPECIFIC
+ HTTRANSMIT_SETTING MCastPhyMode;
+#endif // MCAST_RATE_SPECIFIC //
+
+#ifdef SINGLE_SKU
+ UINT16 DefineMaxTxPwr;
+#endif // SINGLE_SKU //
+
+
} COMMON_CONFIG, *PCOMMON_CONFIG;
@@ -2034,6 +2073,7 @@ typedef struct _STA_ADMIN_CONFIG {
UCHAR DefaultKeyId;
+
// WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
UCHAR PortSecured;
@@ -2054,6 +2094,9 @@ typedef struct _STA_ADMIN_CONFIG {
ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
+ ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
+ ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
+
ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
@@ -2063,6 +2106,8 @@ typedef struct _STA_ADMIN_CONFIG {
BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
+ BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
+ BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
// New for WPA, windows want us to to keep association information and
// Fixed IEs from last association response
@@ -2075,8 +2120,6 @@ typedef struct _STA_ADMIN_CONFIG {
UCHAR RSNIE_Len;
UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
- ULONG AdhocMode; // 0:WIFI mode (11b rates only), 1: b/g mixed, 2: 11g only
-
// New variables used for CCX 1.0
BOOLEAN bCkipOn;
BOOLEAN bCkipCmicOn;
@@ -2237,12 +2280,13 @@ typedef struct PACKED _RT_802_11_WPA_REKEY {
typedef struct _MAC_TABLE_ENTRY {
//Choose 1 from ValidAsWDS and ValidAsCLI to validize.
- BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
- BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
- BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
- BOOLEAN ValidAsMesh;
- BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
- BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
+ BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
+ BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
+ BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
+ BOOLEAN ValidAsMesh;
+ BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
+ BOOLEAN isCached;
+ BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
//jan for wpa
@@ -2268,10 +2312,12 @@ typedef struct _MAC_TABLE_ENTRY {
INT PMKID_CacheIdx;
UCHAR PMKID[LEN_PMKID];
+
UCHAR Addr[MAC_ADDR_LEN];
UCHAR PsMode;
SST Sst;
AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
+ BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
USHORT Aid;
USHORT CapabilityInfo;
UCHAR LastRssi;
@@ -2283,17 +2329,17 @@ typedef struct _MAC_TABLE_ENTRY {
UINT32 StaConnectTime; // the live time of this station since associated with AP
-
+#ifdef DOT11_N_SUPPORT
BOOLEAN bSendBAR;
USHORT NoBADataCountDown;
- BOOLEAN isCached;
UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
+ UINT TxBFCount; // 3*3
+#endif // DOT11_N_SUPPORT //
UINT FIFOCount;
UINT DebugFIFOCount;
UINT DebugTxCount;
BOOLEAN bDlsInit;
- UINT TxBFCount; // 3*3
//====================================================
@@ -2308,10 +2354,13 @@ typedef struct _MAC_TABLE_ENTRY {
UINT32 OneSecTxNoRetryOkCount;
UINT32 OneSecTxRetryOkCount;
UINT32 OneSecTxFailCount;
- UINT32 CurrTxRateStableTime; // # of second in current TX rate
+ UINT32 ContinueTxFailCnt;
+ UINT32 CurrTxRateStableTime; // # of second in current TX rate
UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
//====================================================
+
+
#ifdef CONFIG_STA_SUPPORT
#ifdef QOS_DLS_SUPPORT
UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
@@ -2330,6 +2379,11 @@ typedef struct _MAC_TABLE_ENTRY {
// CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
// see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
ULONG ClientStatusFlags;
+
+ // TODO: Shall we move that to DOT11_N_SUPPORT???
+ HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
+
+#ifdef DOT11_N_SUPPORT
// HT EWC MIMO-N used parameters
USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
@@ -2338,20 +2392,23 @@ typedef struct _MAC_TABLE_ENTRY {
USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
- HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
- BOOLEAN bAutoTxRateSwitch;
+
// 802.11n features.
UCHAR MpduDensity;
UCHAR MaxRAmpduFactor;
+ UCHAR AMsduSize;
+ UCHAR MmpsMode; // MIMO power save more.
+
+ HT_CAPABILITY_IE HTCapability;
+
#ifdef DOT11N_DRAFT3
UCHAR BSS2040CoexistenceMgmtSupport;
#endif // DOT11N_DRAFT3 //
+#endif // DOT11_N_SUPPORT //
+ BOOLEAN bAutoTxRateSwitch;
- UCHAR AMsduSize;
- UCHAR MmpsMode; // MIMO power save more.
UCHAR RateLen;
- HT_CAPABILITY_IE HTCapability;
struct _MAC_TABLE_ENTRY *pNext;
USHORT TxSeq[NUM_OF_TID];
USHORT NonQosDataSeq;
@@ -2371,15 +2428,18 @@ typedef struct _MAC_TABLE {
QUEUE_HEADER McastPsQueue;
ULONG PsQIdleCount;
BOOLEAN fAnyStationInPsm;
+ BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
+ BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
+#ifdef DOT11_N_SUPPORT
BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
- BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
- BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
+#endif // DOT11_N_SUPPORT //
} MAC_TABLE, *PMAC_TABLE;
+#ifdef DOT11_N_SUPPORT
#define IS_HT_STA(_pMacEntry) \
(_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
@@ -2388,6 +2448,7 @@ typedef struct _MAC_TABLE {
#define PEER_IS_HT_RATE(_pMacEntry) \
(_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
+#endif // DOT11_N_SUPPORT //
typedef struct _WDS_ENTRY {
BOOLEAN Valid;
@@ -2420,11 +2481,10 @@ typedef struct _RT_802_11_WDS_ENTRY {
NDIS_802_11_WEP_STATUS WepStatus;
UCHAR KeyIdx;
CIPHER_KEY WdsKey;
-
HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
- BOOLEAN bAutoTxRateSwitch;
- DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
RT_HT_PHY_INFO DesiredHtPhyInfo;
+ BOOLEAN bAutoTxRateSwitch;
+ DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
} RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
typedef struct _WDS_TABLE {
@@ -2479,7 +2539,7 @@ typedef struct _APCLI_STRUCT {
CIPHER_KEY SharedKey[SHARE_KEY_NUM];
UCHAR DefaultKeyId;
-
+
// store RSN_IE built by driver
UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
UCHAR RSNIE_Len;
@@ -2492,10 +2552,14 @@ typedef struct _APCLI_STRUCT {
UCHAR SNonce[32]; // SNonce for WPA-PSK
UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
+#ifdef WSC_AP_SUPPORT
+ WSC_CTRL WscControl;
+#endif // WSC_AP_SUPPORT //
+
HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
+ RT_HT_PHY_INFO DesiredHtPhyInfo;
BOOLEAN bAutoTxRateSwitch;
DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
- RT_HT_PHY_INFO DesiredHtPhyInfo;
} APCLI_STRUCT, *PAPCLI_STRUCT;
// ----------- end of AP ----------------------------
@@ -2607,7 +2671,6 @@ typedef struct _RTMP_ADAPTER
USHORT HostLnkCtrlOffset;
USHORT PCIePowerSaveLevel;
BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
- BOOLEAN bPCIclkOffCommand; // flag that indicates whether the PCIe power command is issued or not.
BOOLEAN bPCIclkOffDisableTx; //
@@ -2624,7 +2687,7 @@ typedef struct _RTMP_ADAPTER
RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
- RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
+ RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
#endif // RT2860 //
@@ -2657,15 +2720,11 @@ typedef struct _RTMP_ADAPTER
/*****************************************************************************************/
/* Rx related parameters */
/*****************************************************************************************/
-#ifdef WIN_NDIS
- RTMP_RXBUF LocalRxReorderBuf[MAX_BARECI_SESSION]; // resource for software backlog queues
-#endif
#ifdef RT2860
RTMP_RX_RING RxRing;
NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
-
- #endif // RT2860 //
+#endif // RT2860 //
@@ -2707,7 +2766,7 @@ typedef struct _RTMP_ADAPTER
CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
- CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
+ CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
UCHAR ChannelListNum; // number of channel in ChannelList[]
UCHAR Bbp94;
@@ -2770,7 +2829,7 @@ typedef struct _RTMP_ADAPTER
// pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
PSPOLL_FRAME PsPollFrame;
- HEADER_802_11 NullFrame;
+ HEADER_802_11 NullFrame;
//=========AP===========
@@ -2792,10 +2851,10 @@ typedef struct _RTMP_ADAPTER
// OP mode: either AP or STA
UCHAR OpMode; // OPMODE_STA, OPMODE_AP
- NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
+ NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
+
+ // MAT related parameters
- // MAT related parameters
-
// configuration: read from Registry & E2PROM
BOOLEAN bLocalAdminMAC; // Use user changed MAC
UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
@@ -2815,20 +2874,14 @@ typedef struct _RTMP_ADAPTER
MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
NDIS_SPIN_LOCK MacTabLock;
+#ifdef DOT11_N_SUPPORT
BA_TABLE BATable;
+#endif // DOT11_N_SUPPORT //
NDIS_SPIN_LOCK BATabLock;
RALINK_TIMER_STRUCT RECBATimer;
// encryption/decryption KEY tables
CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
-// CIPHER_KEY PairwiseKey[64]; // for AP only
-
-
-#ifdef WIN_NDIS
- // 802.3 multicast support
- ULONG NumberOfMcastAddresses; // Number of mcast entry exists
- UCHAR McastTable[MAX_MCAST_LIST_SIZE][MAC_ADDR_LEN]; // Mcast list
-#endif
// RX re-assembly buffer for fragmentation
FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
@@ -2839,13 +2892,13 @@ typedef struct _RTMP_ADAPTER
COUNTER_RALINK RalinkCounters; // Ralink propriety counters
COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
PRIVATE_STRUC PrivateInfo; // Private information & counters
-
+
// flags, see fRTMP_ADAPTER_xxx flags
ULONG Flags; // Represent current device status
// current TX sequence #
USHORT Sequence;
-
+
#ifdef UNDER_CE
NDIS_HANDLE hGiISR;
#endif
@@ -2874,6 +2927,8 @@ typedef struct _RTMP_ADAPTER
RT_802_11_EVENT_TABLE EventTab;
+ BOOLEAN HTCEnable;
+
/*****************************************************************************************/
/* Statistic related parameters */
/*****************************************************************************************/
@@ -2882,7 +2937,7 @@ typedef struct _RTMP_ADAPTER
ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
// ----------------------------
// DEBUG paramerts
- // ----------------------------
+ // ----------------------------
BOOLEAN bBanAllBaSetup;
BOOLEAN bPromiscuous;
@@ -2895,12 +2950,9 @@ typedef struct _RTMP_ADAPTER
ULONG bacontent[16];
ULONG rxint[RX_RING_SIZE+1];
UCHAR rcvba[60];
- ULONG MRS;
- BOOLEAN HTCEnable;
BOOLEAN bLinkAdapt;
BOOLEAN bForcePrintTX;
BOOLEAN bForcePrintRX;
- BOOLEAN bForceDisableautowake; // defined in RT2870 USB
BOOLEAN bDisablescanning; //defined in RT2870 USB
BOOLEAN bStaFifoTest;
BOOLEAN bProtectionTest;
@@ -2908,10 +2960,6 @@ typedef struct _RTMP_ADAPTER
BOOLEAN bGenOneHCCA;
BOOLEAN bBroadComHT;
//+++Following add from RT2870 USB.
- BOOLEAN bDisableResetPipe;
- BOOLEAN bVenderReset;
- BOOLEAN bBulkInFail;
- //ULONG QuickTimerP; // defined in RT2870 USB but not use.
ULONG BulkOutReq;
ULONG BulkOutComplete;
ULONG BulkOutCompleteOther;
@@ -2927,16 +2975,17 @@ typedef struct _RTMP_ADAPTER
ATE_INFO ate;
#endif // RALINK_ATE //
+#ifdef DOT11_N_SUPPORT
struct reordering_mpdu_pool mpdu_blk_pool;
+#endif // DOT11_N_SUPPORT //
ULONG OneSecondnonBEpackets; // record non BE packets per second
-
#if WIRELESS_EXT >= 12
struct iw_statistics iw_stats;
#endif
- struct net_device_stats stats;
+ struct net_device_stats stats;
#ifdef BLOCK_NET_IF
BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
@@ -2962,16 +3011,25 @@ typedef struct _RTMP_ADAPTER
UCHAR flg_be_adjust;
ULONG be_adjust_last_time;
+#ifdef NINTENDO_AP
+ NINDO_CTRL_BLOCK nindo_ctrl_block;
+#endif // NINTENDO_AP //
+
+
#ifdef IKANOS_VX_1X0
struct IKANOS_TX_INFO IkanosTxInfo;
- struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM];
+ struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
#endif // IKANOS_VX_1X0 //
+
#ifdef DBG_DIAGNOSE
RtmpDiagStruct DiagStruct;
#endif // DBG_DIAGNOSE //
+
+
+ UINT8 PM_FlgSuspend;
} RTMP_ADAPTER, *PRTMP_ADAPTER;
-
+
//
// Cisco IAPP format
//
@@ -3038,7 +3096,7 @@ typedef struct _RX_BLK_
#define fRX_MESH 0x0200
#define fRX_APCLI 0x0400
#define fRX_DLS 0x0800
-
+#define fRX_WPI 0x1000
#define LENGTH_AMSDU_SUBFRAMEHEAD 14
#define LENGTH_ARALINK_SUBFRAMEHEAD 14
@@ -3090,7 +3148,7 @@ typedef struct _TX_BLK_
//YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
ULONG Priv; // Hardware specific value saved in here.
- } TX_BLK, *PTX_BLK;
+} TX_BLK, *PTX_BLK;
#define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
@@ -3194,7 +3252,7 @@ static inline VOID WriteBackToDescriptor(
Call this function when read or update descriptor
========================================================================
*/
-static VOID RTMPWIEndianChange(
+static inline VOID RTMPWIEndianChange(
IN PUCHAR pData,
IN ULONG DescriptorType)
{
@@ -3264,7 +3322,7 @@ static inline VOID RTMPDescriptorEndianChange(
Call this function when read or update buffer data
========================================================================
*/
-static VOID RTMPFrameEndianChange(
+static inline VOID RTMPFrameEndianChange(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pData,
IN ULONG Dir,
@@ -3396,6 +3454,45 @@ static VOID RTMPFrameEndianChange(
}
#endif // RT_BIG_ENDIAN //
+
+static inline VOID ConvertMulticastIP2MAC(
+ IN PUCHAR pIpAddr,
+ IN PUCHAR *ppMacAddr,
+ IN UINT16 ProtoType)
+{
+ if (pIpAddr == NULL)
+ return;
+
+ if (ppMacAddr == NULL || *ppMacAddr == NULL)
+ return;
+
+ switch (ProtoType)
+ {
+ case ETH_P_IPV6:
+// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
+ *(*ppMacAddr) = 0x33;
+ *(*ppMacAddr + 1) = 0x33;
+ *(*ppMacAddr + 2) = pIpAddr[12];
+ *(*ppMacAddr + 3) = pIpAddr[13];
+ *(*ppMacAddr + 4) = pIpAddr[14];
+ *(*ppMacAddr + 5) = pIpAddr[15];
+ break;
+
+ case ETH_P_IP:
+ default:
+// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
+ *(*ppMacAddr) = 0x01;
+ *(*ppMacAddr + 1) = 0x00;
+ *(*ppMacAddr + 2) = 0x5e;
+ *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
+ *(*ppMacAddr + 4) = pIpAddr[2];
+ *(*ppMacAddr + 5) = pIpAddr[3];
+ break;
+ }
+
+ return;
+}
+
BOOLEAN RTMPCheckForHang(
IN NDIS_HANDLE MiniportAdapterContext
);
@@ -3403,7 +3500,7 @@ BOOLEAN RTMPCheckForHang(
VOID RTMPHalt(
IN NDIS_HANDLE MiniportAdapterContext
);
-
+
//
// Private routines in rtmp_init.c
//
@@ -3434,6 +3531,7 @@ NDIS_STATUS NICReadRegParameters(
IN NDIS_HANDLE WrapperConfigurationContext
);
+
VOID NICReadEEPROMParameters(
IN PRTMP_ADAPTER pAd,
IN PUCHAR mac_addr);
@@ -3598,6 +3696,7 @@ VOID MlmeQOSAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
+#ifdef DOT11_N_SUPPORT
VOID PeerAddBAReqAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
@@ -3613,6 +3712,7 @@ VOID PeerDelBAAction(
VOID PeerBAAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
+#endif // DOT11_N_SUPPORT //
VOID SendPSMPAction(
IN PRTMP_ADAPTER pAd,
@@ -3678,9 +3778,11 @@ VOID PeerBSSTranAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
+#ifdef DOT11_N_SUPPORT
VOID PeerHTAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
+#endif // DOT11_N_SUPPORT //
VOID PeerQOSAction(
IN PRTMP_ADAPTER pAd,
@@ -3702,6 +3804,7 @@ VOID DlsParmFill(
#endif // QOS_DLS_SUPPORT //
#endif // CONFIG_STA_SUPPORT //
+#ifdef DOT11_N_SUPPORT
VOID RECBATimerTimeout(
IN PVOID SystemSpecific1,
IN PVOID FunctionContext,
@@ -3714,6 +3817,7 @@ VOID ORIBATimerTimeout(
VOID SendRefreshBAR(
IN PRTMP_ADAPTER pAd,
IN MAC_TABLE_ENTRY *pEntry);
+#endif // DOT11_N_SUPPORT //
VOID ActHeaderInit(
IN PRTMP_ADAPTER pAd,
@@ -3746,6 +3850,7 @@ BOOLEAN QosBADataParse(
IN USHORT Datasize,
IN UINT CurRxIndex);
+#ifdef DOT11_N_SUPPORT
BOOLEAN CntlEnqueueForRecv(
IN PRTMP_ADAPTER pAd,
IN ULONG Wcid,
@@ -3754,6 +3859,7 @@ BOOLEAN CntlEnqueueForRecv(
VOID BaAutoManSwitch(
IN PRTMP_ADAPTER pAd);
+#endif // DOT11_N_SUPPORT //
VOID HTIOTCheck(
IN PRTMP_ADAPTER pAd,
@@ -3796,7 +3902,7 @@ BOOLEAN PeerIsAggreOn(
IN PRTMP_ADAPTER pAd,
IN ULONG TxRate,
IN PMAC_TABLE_ENTRY pMacEntry);
-
+
NDIS_STATUS Sniff2BytesFromNdisBuffer(
IN PNDIS_BUFFER pFirstBuffer,
IN UCHAR DesiredOffset,
@@ -4111,7 +4217,7 @@ VOID AsicSetBssid(
VOID AsicSetMcastWC(
IN PRTMP_ADAPTER pAd);
-
+
VOID AsicDelWcidTab(
IN PRTMP_ADAPTER pAd,
IN UCHAR Wcid);
@@ -4226,9 +4332,11 @@ VOID MlmeRadioOn(
VOID BssTableInit(
IN BSS_TABLE *Tab);
+#ifdef DOT11_N_SUPPORT
VOID BATableInit(
IN PRTMP_ADAPTER pAd,
IN BA_TABLE *Tab);
+#endif // DOT11_N_SUPPORT //
ULONG BssTableSearch(
IN BSS_TABLE *Tab,
@@ -4254,6 +4362,7 @@ VOID BssTableDeleteEntry(
IN PUCHAR pBssid,
IN UCHAR Channel);
+#ifdef DOT11_N_SUPPORT
VOID BATableDeleteORIEntry(
IN OUT PRTMP_ADAPTER pAd,
IN BA_ORI_ENTRY *pBAORIEntry);
@@ -4274,6 +4383,7 @@ VOID BATableTearRECEntry(
IN UCHAR TID,
IN UCHAR WCID,
IN BOOLEAN ALL);
+#endif // DOT11_N_SUPPORT //
VOID BssEntrySet(
IN PRTMP_ADAPTER pAd,
@@ -4335,6 +4445,7 @@ ULONG BssTableSetEntry(
IN USHORT LengthVIE,
IN PNDIS_802_11_VARIABLE_IEs pVIE);
+#ifdef DOT11_N_SUPPORT
VOID BATableInsertEntry(
IN PRTMP_ADAPTER pAd,
IN USHORT Aid,
@@ -4368,6 +4479,7 @@ ULONG TriEventTableSetEntry(
VOID TriEventCounterMaintenance(
IN PRTMP_ADAPTER pAd);
#endif // DOT11N_DRAFT3 //
+#endif // DOT11_N_SUPPORT //
VOID BssTableSsidSort(
IN PRTMP_ADAPTER pAd,
@@ -4405,7 +4517,8 @@ BOOLEAN MlmeEnqueueForRecv(
IN ULONG MsgLen,
IN PVOID Msg,
IN UCHAR Signal);
-
+
+
BOOLEAN MlmeDequeue(
IN MLME_QUEUE *Queue,
OUT MLME_QUEUE_ELEM **Elem);
@@ -5100,7 +5213,6 @@ BOOLEAN PeerWpaMessageSanity(
IN PEAPOL_PACKET pMsg,
IN ULONG MsgLen,
IN UCHAR MsgType,
- IN PUCHAR pMIC,
IN MAC_TABLE_ENTRY *pEntry);
BOOLEAN PeerDeauthSanity(
@@ -5238,10 +5350,11 @@ VOID MlmeUpdateTxRates(
IN BOOLEAN bLinkUp,
IN UCHAR apidx);
+#ifdef DOT11_N_SUPPORT
VOID MlmeUpdateHtTxRates(
IN PRTMP_ADAPTER pAd,
IN UCHAR apidx);
-
+#endif // DOT11_N_SUPPORT //
VOID RTMPCheckRates(
IN PRTMP_ADAPTER pAd,
@@ -5261,10 +5374,6 @@ BOOLEAN RTMPCheckHt(
IN OUT HT_CAPABILITY_IE *pHtCapability,
IN OUT ADD_HT_INFO_IE *pAddHtInfo);
-BOOLEAN RTMPCheckAddHtInfoIe(
- IN PRTMP_ADAPTER pAd,
- IN OUT ADD_HT_INFO_IE *pAddHTInfo);
-
VOID StaQuickResponeForRateUpExec(
IN PVOID SystemSpecific1,
IN PVOID FunctionContext,
@@ -5446,7 +5555,7 @@ BOOLEAN RTMPSoftDecryptAES(
IN PUCHAR pData,
IN ULONG DataByteCnt,
IN PCIPHER_KEY pWpaKey);
-
+
//
// Prototypes of function definition in cmm_info.c
//
@@ -5506,6 +5615,7 @@ VOID RTMPAddBSSIDCipher(
IN UCHAR CipherAlg);
#endif // CONFIG_STA_SUPPORT //
+#ifdef DOT11_N_SUPPORT
VOID RTMPSetHT(
IN PRTMP_ADAPTER pAd,
IN OID_SET_HT_PHYMODE *pHTPhyMode);
@@ -5513,6 +5623,7 @@ VOID RTMPSetHT(
VOID RTMPSetIndividualHT(
IN PRTMP_ADAPTER pAd,
IN UCHAR apidx);
+#endif // DOT11_N_SUPPORT //
VOID RTMPSendWirelessEvent(
IN PRTMP_ADAPTER pAd,
@@ -5875,7 +5986,7 @@ VOID RTMPHandleSTAKey(
IN PRTMP_ADAPTER pAdapter,
IN MAC_TABLE_ENTRY *pEntry,
IN MLME_QUEUE_ELEM *Elem);
-
+
VOID PeerGroupMsg2Action(
IN PRTMP_ADAPTER pAd,
IN PMAC_TABLE_ENTRY pEntry,
@@ -6146,6 +6257,11 @@ PNDIS_PACKET duplicate_pkt_with_VLAN(
IN ULONG DataSize,
IN UCHAR FromWhichBSSID);
+PNDIS_PACKET duplicate_pkt_with_WPI(
+ IN PRTMP_ADAPTER pAd,
+ IN PNDIS_PACKET pPacket,
+ IN UINT32 ext_head_len,
+ IN UINT32 ext_tail_len);
UCHAR VLAN_8023_Header_Copy(
IN PRTMP_ADAPTER pAd,
@@ -6154,7 +6270,7 @@ UCHAR VLAN_8023_Header_Copy(
OUT PUCHAR pData,
IN UCHAR FromWhichBSSID);
-
+#ifdef DOT11_N_SUPPORT
void ba_flush_reordering_timeout_mpdus(
IN PRTMP_ADAPTER pAd,
IN PBA_REC_ENTRY pBAEntry,
@@ -6172,6 +6288,7 @@ VOID BAOriSessionSetUp(
VOID BASessionTearDownALL(
IN OUT PRTMP_ADAPTER pAd,
IN UCHAR Wcid);
+#endif // DOT11_N_SUPPORT //
BOOLEAN OS_Need_Clone_Packet(void);
@@ -6182,10 +6299,6 @@ VOID build_tx_packet(
IN PUCHAR pFrame,
IN ULONG FrameLen);
-VOID STAMacTableReset(
- IN PRTMP_ADAPTER pAd);
-
-
VOID BAOriSessionTearDown(
IN OUT PRTMP_ADAPTER pAd,
@@ -6225,7 +6338,7 @@ void ChannelInfoDestroy(
UCHAR New_ApAutoSelectChannel(
IN PRTMP_ADAPTER pAd);
-
+
BOOLEAN rtstrmactohex(
IN char *s1,
IN char *s2);
@@ -6246,6 +6359,10 @@ char *rstrtok(
IN char * s,
IN const char * ct);
+int rtinet_aton(
+ const char *cp,
+ unsigned int *addr);
+
////////// common ioctl functions //////////
INT Set_DriverVersion_Proc(
IN PRTMP_ADAPTER pAd,
@@ -6319,6 +6436,7 @@ INT Set_ResetStatCounter_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg);
+#ifdef DOT11_N_SUPPORT
INT Set_BASetup_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg);
@@ -6419,6 +6537,9 @@ INT Set_HtMIMOPSmode_Proc(
INT Set_HtTxBASize_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg);
+#endif // DOT11_N_SUPPORT //
+
+
#ifdef CONFIG_STA_SUPPORT
//Dls , kathy
@@ -6426,10 +6547,12 @@ VOID RTMPSendDLSTearDownFrame(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pDA);
+#ifdef DOT11_N_SUPPORT
//Block ACK
VOID QueryBATABLE(
IN PRTMP_ADAPTER pAd,
OUT PQUERYBA_TABLE pBAT);
+#endif // DOT11_N_SUPPORT //
#ifdef WPA_SUPPLICANT_SUPPORT
INT WpaCheckEapCode(
@@ -6455,13 +6578,14 @@ int wext_notify_event_assoc(
+#ifdef DOT11_N_SUPPORT
VOID Handle_BSS_Width_Trigger_Events(
IN PRTMP_ADAPTER pAd);
void build_ext_channel_switch_ie(
IN PRTMP_ADAPTER pAd,
IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
-
+#endif // DOT11_N_SUPPORT //
BOOLEAN APRxDoneInterruptHandle(
@@ -6471,20 +6595,22 @@ BOOLEAN STARxDoneInterruptHandle(
IN PRTMP_ADAPTER pAd,
IN BOOLEAN argc);
+#ifdef DOT11_N_SUPPORT
// AMPDU packet indication
VOID Indicate_AMPDU_Packet(
IN PRTMP_ADAPTER pAd,
IN RX_BLK *pRxBlk,
IN UCHAR FromWhichBSSID);
-// Normal legacy Rx packet indication
-VOID Indicate_Legacy_Packet(
+// AMSDU packet indication
+VOID Indicate_AMSDU_Packet(
IN PRTMP_ADAPTER pAd,
IN RX_BLK *pRxBlk,
IN UCHAR FromWhichBSSID);
+#endif // DOT11_N_SUPPORT //
-// AMSDU packet indication
-VOID Indicate_AMSDU_Packet(
+// Normal legacy Rx packet indication
+VOID Indicate_Legacy_Packet(
IN PRTMP_ADAPTER pAd,
IN RX_BLK *pRxBlk,
IN UCHAR FromWhichBSSID);
@@ -6612,6 +6738,9 @@ PNDIS_PACKET RTMPDeFragmentDataFrame(
////////////////////////////////////////
+
+
+
#ifdef SNMP_SUPPORT
//for snmp , kathy
typedef struct _DefaultKeyIdxValue
@@ -6757,13 +6886,13 @@ static inline char* GetPhyMode(
case MODE_OFDM:
return "OFDM";
-
+#ifdef DOT11_N_SUPPORT
case MODE_HTMIX:
return "HTMIX";
case MODE_HTGREENFIELD:
return "GREEN";
-
+#endif // DOT11_N_SUPPORT //
default:
return "N/A";
}
@@ -6780,10 +6909,10 @@ static inline char* GetBW(
case BW_20:
return "20M";
-
+#ifdef DOT11_N_SUPPORT
case BW_40:
return "40M";
-
+#endif // DOT11_N_SUPPORT //
default:
return "N/A";
}
@@ -7020,11 +7149,17 @@ int rt28xx_open(IN PNET_DEV dev);
__inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
{
+extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
+extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
+
if (VIRTUAL_IF_NUM(pAd) == 0)
{
if (rt28xx_open(pAd->net_dev) != 0)
return -1;
}
+ else
+ {
+ }
VIRTUAL_IF_INC(pAd);
return 0;
}
@@ -7037,5 +7172,6 @@ __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
return;
}
+
#endif // __RTMP_H__
diff --git a/rt2860-1.7.0.0/include/rtmp_ckipmic.h b/rt2860-source-1.8.0.0/include/rtmp_ckipmic.h
similarity index 100%
copy from rt2860-1.7.0.0/include/rtmp_ckipmic.h
copy to rt2860-source-1.8.0.0/include/rtmp_ckipmic.h
diff --git a/rt2860-1.7.0.0/include/rtmp_def.h b/rt2860-source-1.8.0.0/include/rtmp_def.h
similarity index 98%
copy from rt2860-1.7.0.0/include/rtmp_def.h
copy to rt2860-source-1.8.0.0/include/rtmp_def.h
index ad1851e..bac1b0a 100644
--- a/rt2860-1.7.0.0/include/rtmp_def.h
+++ b/rt2860-source-1.8.0.0/include/rtmp_def.h
@@ -210,7 +210,6 @@
#define fOP_STATUS_TX_AMSDU_INUSED 0x00002000
#define fOP_STATUS_MAX_RETRY_ENABLED 0x00004000
#define fOP_STATUS_WAKEUP_NOW 0x00008000
-#define fOP_STATUS_CLKSELECT_40MHZ 0x00010000
#define fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE 0x00020000
#ifdef DOT11N_DRAFT3
@@ -329,7 +328,7 @@
#ifdef MBSS_SUPPORT
#undef MAX_MBSSID_NUM
#define MAX_MBSSID_NUM (8 - MAX_MESH_NUM - MAX_APCLI_NUM)
-#endif /* !MBSS_SUPPORT */
+#endif // MBSS_SUPPORT //
/* sanity check for apidx */
#define MBSS_MR_APIDX_SANITY_CHECK(apidx) \
@@ -1097,8 +1096,10 @@
// Preamble MODE in TxD
#define MODE_CCK 0
#define MODE_OFDM 1
+#ifdef DOT11_N_SUPPORT
#define MODE_HTMIX 2
#define MODE_HTGREENFIELD 3
+#endif // DOT11_N_SUPPORT //
// MCS for CCK. BW.SGI.STBC are reserved
#define MCS_LONGP_RATE_1 0 // long preamble CCK 1Mbps
#define MCS_LONGP_RATE_2 1 // long preamble CCK 1Mbps
@@ -1145,10 +1146,12 @@
#define MCS_32 32
#define MCS_AUTO 33
+#ifdef DOT11_N_SUPPORT
// OID_HTPHYMODE
// MODE
#define HTMODE_MM 0
#define HTMODE_GF 1
+#endif // DOT11_N_SUPPORT //
// Fixed Tx MODE - HT, CCK or OFDM
#define FIXED_TXMODE_HT 0
@@ -1159,12 +1162,16 @@
#define BW_40 BAND_WIDTH_40
#define BW_BOTH BAND_WIDTH_BOTH
#define BW_10 BAND_WIDTH_10 // 802.11j has 10MHz. This definition is for internal usage. doesn't fill in the IE or other field.
+
+#ifdef DOT11_N_SUPPORT
// SHORTGI
#define GI_400 GAP_INTERVAL_400 // only support in HT mode
-#define GI_800 GAP_INTERVAL_800
#define GI_BOTH GAP_INTERVAL_BOTH
+#endif // DOT11_N_SUPPORT //
+#define GI_800 GAP_INTERVAL_800
// STBC
#define STBC_NONE 0
+#ifdef DOT11_N_SUPPORT
#define STBC_USE 1 // limited use in rt2860b phy
#define RXSTBC_ONE 1 // rx support of one spatial stream
#define RXSTBC_TWO 2 // rx support of 1 and 2 spatial stream
@@ -1186,6 +1193,8 @@
#define AMSDU_0 0
#define AMSDU_1 1
+#endif // DOT11_N_SUPPORT //
+
// MCS use 7 bits
#define TXRATEMIMO 0x80
#define TXRATEMCS 0x7F
@@ -1269,12 +1278,15 @@
#define CIPHER_CKIP64 5
#define CIPHER_CKIP128 6
#define CIPHER_TKIP_NO_MIC 7 // MIC appended by driver: not a valid value in hardware key table
+#define CIPHER_SMS4 8
// value domain of pAd->RfIcType
#define RFIC_2820 1 // 2.4G 2T3R
#define RFIC_2850 2 // 2.4G/5G 2T3R
#define RFIC_2720 3 // 2.4G 1T2R
#define RFIC_2750 4 // 2.4G/5G 1T2R
+#define RFIC_3020 5 // 2.4G 1T1R
+#define RFIC_2020 6 // 2.4G B/G
// LED Status.
#define LED_LINK_DOWN 0
@@ -1301,23 +1313,6 @@
#define PAIRWISE_KEY 1
#define GROUP_KEY 2
-#define PCI_CFG_ADDR_PORT 0xcf8
-#define PCI_CFG_DATA_PORT 0xcfc
-
-// vendor ID
-#define RICOH 0x1180
-#define O2MICRO 0x1217
-#define TI 0x104c
-#define RALINK 0x1814
-#define TOSHIBA 0x1179
-#define ENE 0x1524
-#define UNKNOWN 0xffff
-
-#define CARD_BRIDGE_CLASS 0x0607 // CardBus bridge class & subclass
-
-#define MAX_PCI_DEVICE 32 // support up to 32 devices per bus
-#define MAX_PCI_BUS 32 // support 10 buses
-#define MAX_FUNC_NUM 4
//definition of DRS
#define MAX_STEP_OF_TX_RATE_SWITCH 32
@@ -1489,6 +1484,7 @@
#define IW_FLOOD_EVENT_FLAG_END 0x0406
#define IW_FLOOD_EVENT_TYPE_NUM (IW_FLOOD_EVENT_FLAG_END - IW_FLOOD_EVENT_FLAG_START + 1)
// For flooding attack - end
+
// End - WIRELESS EVENTS definition
#ifdef CONFIG_STA_SUPPORT
@@ -1515,6 +1511,7 @@
#define MCAST_DISABLE 0
#define MCAST_CCK 1
#define MCAST_OFDM 2
+#define MCAST_HTMIX 3
#endif // MCAST_RATE_SPECIFIC //
// For AsicRadioOff/AsicRadioOn function
@@ -1524,6 +1521,12 @@
#define GUI_IDLE_POWER_SAVE 3
// --
+
+// definition for WpaSupport flag
+#define WPA_SUPPLICANT_DISABLE 0
+#define WPA_SUPPLICANT_ENABLE 1
+#define WPA_SUPPLICANT_ENABLE_WITH_WEB_UI 2
+
// Endian byte swapping codes
#define SWAP16(x) \
((UINT16)( \
diff --git a/rt2860-1.7.0.0/include/rtmp_type.h b/rt2860-source-1.8.0.0/include/rtmp_type.h
similarity index 99%
copy from rt2860-1.7.0.0/include/rtmp_type.h
copy to rt2860-source-1.8.0.0/include/rtmp_type.h
index acbad34..fd469b8 100644
--- a/rt2860-1.7.0.0/include/rtmp_type.h
+++ b/rt2860-source-1.8.0.0/include/rtmp_type.h
@@ -38,7 +38,6 @@
#ifndef __RTMP_TYPE_H__
#define __RTMP_TYPE_H__
-
#define PACKED __attribute__ ((packed))
// Put platform dependent declaration here
diff --git a/rt2860-1.7.0.0/include/spectrum.h b/rt2860-source-1.8.0.0/include/spectrum.h
similarity index 100%
copy from rt2860-1.7.0.0/include/spectrum.h
copy to rt2860-source-1.8.0.0/include/spectrum.h
diff --git a/rt2860-1.7.0.0/include/spectrum_def.h b/rt2860-source-1.8.0.0/include/spectrum_def.h
similarity index 100%
copy from rt2860-1.7.0.0/include/spectrum_def.h
copy to rt2860-source-1.8.0.0/include/spectrum_def.h
diff --git a/rt2860-1.7.0.0/include/wpa.h b/rt2860-source-1.8.0.0/include/wpa.h
similarity index 86%
copy from rt2860-1.7.0.0/include/wpa.h
copy to rt2860-source-1.8.0.0/include/wpa.h
index b51af56..013e6e8 100644
--- a/rt2860-1.7.0.0/include/wpa.h
+++ b/rt2860-source-1.8.0.0/include/wpa.h
@@ -124,6 +124,11 @@
#define EAPOL_START_PSK 1
#define EAPOL_START_1X 2
+#define MIX_CIPHER_WPA_TKIP_ON(x) (((x) & 0x08) != 0)
+#define MIX_CIPHER_WPA_AES_ON(x) (((x) & 0x04) != 0)
+#define MIX_CIPHER_WPA2_TKIP_ON(x) (((x) & 0x02) != 0)
+#define MIX_CIPHER_WPA2_AES_ON(x) (((x) & 0x01) != 0)
+
#define ROUND_UP(__x, __y) \
(((ULONG)((__x)+((__y)-1))) & ((ULONG)~((__y)-1)))
@@ -139,6 +144,8 @@
}while (_V[cnt] == 0); \
}
+#define IS_WPA_CAPABILITY(a) (((a) >= Ndis802_11AuthModeWPA) && ((a) <= Ndis802_11AuthModeWPA1PSKWPA2PSK))
+
// EAPOL Key Information definition within Key descriptor format
typedef struct PACKED _KEY_INFO
{
@@ -288,6 +295,37 @@ typedef enum _WpaState
SS_KEYUPDATE, // 5
} WPA_STATE;
+//
+// The definition of the cipher combination
+//
+// bit3 bit2 bit1 bit0
+// +------------+------------+
+// | WPA | WPA2 |
+// +------+-----+------+-----+
+// | TKIP | AES | TKIP | AES |
+// | 0 | 1 | 1 | 0 | -> 0x06
+// | 0 | 1 | 1 | 1 | -> 0x07
+// | 1 | 0 | 0 | 1 | -> 0x09
+// | 1 | 0 | 1 | 1 | -> 0x0B
+// | 1 | 1 | 0 | 1 | -> 0x0D
+// | 1 | 1 | 1 | 0 | -> 0x0E
+// | 1 | 1 | 1 | 1 | -> 0x0F
+// +------+-----+------+-----+
+//
+typedef enum _WpaMixPairCipher
+{
+ MIX_CIPHER_NOTUSE = 0x00,
+ WPA_NONE_WPA2_TKIPAES = 0x03, // WPA2-TKIPAES
+ WPA_AES_WPA2_TKIP = 0x06,
+ WPA_AES_WPA2_TKIPAES = 0x07,
+ WPA_TKIP_WPA2_AES = 0x09,
+ WPA_TKIP_WPA2_TKIPAES = 0x0B,
+ WPA_TKIPAES_WPA2_NONE = 0x0C, // WPA-TKIPAES
+ WPA_TKIPAES_WPA2_AES = 0x0D,
+ WPA_TKIPAES_WPA2_TKIP = 0x0E,
+ WPA_TKIPAES_WPA2_TKIPAES = 0x0F,
+} WPA_MIX_PAIR_CIPHER;
+
typedef struct PACKED _RSN_IE_HEADER_STRUCT {
UCHAR Eid;
UCHAR Length;
diff --git a/rt2860-1.7.0.0/iwpriv_usage.txt b/rt2860-source-1.8.0.0/iwpriv_usage.txt
similarity index 100%
copy from rt2860-1.7.0.0/iwpriv_usage.txt
copy to rt2860-source-1.8.0.0/iwpriv_usage.txt
diff --git a/rt2860-1.7.0.0/os/linux/2860_main_dev.c b/rt2860-source-1.8.0.0/os/linux/2860_main_dev.c
similarity index 75%
copy from rt2860-1.7.0.0/os/linux/2860_main_dev.c
copy to rt2860-source-1.8.0.0/os/linux/2860_main_dev.c
index 19bedba..1e1e7c7 100644
--- a/rt2860-1.7.0.0/os/linux/2860_main_dev.c
+++ b/rt2860-source-1.8.0.0/os/linux/2860_main_dev.c
@@ -172,7 +172,10 @@ static int rt2860_suspend(
{
pAd = (PRTMP_ADAPTER)net_dev->priv;
- if (net_dev->flags & IFF_UP)
+ /* we can not use IFF_UP because ra0 down but ra1 up */
+ /* and 1 suspend/resume function for 1 module, not for each interface */
+ /* so Linux will call suspend/resume function once */
+ if (VIRTUAL_IF_NUM(pAd) > 0)
{
// avoid users do suspend after interface is down
@@ -189,6 +192,7 @@ static int rt2860_suspend(
// take down the device
rt28xx_close((PNET_DEV)net_dev);
+
RT_MOD_DEC_USE_COUNT();
}
}
@@ -247,9 +251,12 @@ static int rt2860_resume(
else
pAd = (PRTMP_ADAPTER)net_dev->priv;
- if (pAd != NULL)
+ if (pAd != NULL)
{
- if (net_dev->flags & IFF_UP)
+ /* we can not use IFF_UP because ra0 down but ra1 up */
+ /* and 1 suspend/resume function for 1 module, not for each interface */
+ /* so Linux will call suspend/resume function once */
+ if (VIRTUAL_IF_NUM(pAd) > 0)
{
// mark device as attached from system and restart if needed
netif_device_attach(net_dev);
@@ -340,6 +347,9 @@ static VOID __devexit rt2860_remove_one(
MC_CardUsed[pAd->MC_RowID] = 0; // not clear MAC address
#endif // MULTIPLE_CARD_SUPPORT //
+
+
+
// Unregister network device
unregister_netdev(net_dev);
@@ -380,44 +390,9 @@ static INT __devinit rt2860_probe(
{
PRTMP_ADAPTER pAd;
INT rv = 0;
- USHORT device_id;
- BOOLEAN isNoneAdvancedPSdevice = TRUE;
- POS_COOKIE pObj;
rv = (INT)rt28xx_probe((void *)pci_dev, (void *)ent, 0, &pAd);
- if (rv == 0)
- {
- pObj = (POS_COOKIE) pAd->OS_Cookie;
- pci_read_config_word(pci_dev, PCI_DEVICE_ID, &device_id);
- device_id = le2cpu16(device_id);
- if ((device_id == NIC2860_PCIe_DEVICE_ID) ||
- (device_id == NIC2790_PCIe_DEVICE_ID) ||
- (device_id == VEN_AWT_PCIe_DEVICE_ID))
- {
- UINT32 MacCsr0 = 0, Index= 0;
- do
- {
- RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0);
-
- if ((MacCsr0 != 0x00) && (MacCsr0 != 0xFFFFFFFF))
- break;
-
- RTMPusecDelay(10);
- } while (Index++ < 100);
-
- // Support advanced power save after 2892/2790.
- // MAC version at offset 0x1000 is 0x2872XXXX/0x2870XXXX(PCIe, USB, SDIO).
- if ((MacCsr0&0xffff0000) != 0x28600000)
- {
- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE);
- isNoneAdvancedPSdevice = FALSE;
- }
- }
- if (isNoneAdvancedPSdevice)
- {
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE);
- }
- }
+ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE);
return rv;
}
@@ -846,37 +821,6 @@ rt2860_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
// Should start from highest priority interrupt
// The priority can be adjust by altering processing if statement
//
-#ifdef DBG
- if ((RTDebugLevel == RT_DEBUG_LOUD) && (((++print_int_count) % 100) == 0))
- {
- UINT32 reg = 0;
- int Count, free;
-
- RTMP_IO_READ32(pAd, INT_MASK_CSR, ®); // 1:enable
- printk("%d: INT_MASK_CSR = %08x, IntSource %08x\n", print_int_count, reg, IntSource.word);
- RTMP_IO_READ32(pAd, TX_CTX_IDX0 + 0 * 0x10 , ®);
- printk("TX_CTX_IDX0 = %08x\n", reg);
- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + 0 * 0x10 , ®);
- printk("TX_DTX_IDX0 = %08x\n", reg);
- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, ®);
- printk("WPDMA_GLO_CFG = %08x\n", reg);
- for (Count = 0; Count < 1; Count++)
- {
- if (pAd->TxRing[Count].TxSwFreeIdx> pAd->TxRing[Count].TxCpuIdx)
- free = pAd->TxRing[Count].TxSwFreeIdx - pAd->TxRing[Count].TxCpuIdx -1;
- else
- free = pAd->TxRing[Count].TxSwFreeIdx + TX_RING_SIZE - pAd->TxRing[Count].TxCpuIdx -1;
-
- printk("%d: Free = %d TxSwFreeIdx = %d\n", Count, free, pAd->TxRing[Count].TxSwFreeIdx);
- }
- printk("pAd->int_disable_mask = %08x\n", pAd->int_disable_mask);
- printk("pAd->int_enable_reg = %08x\n", pAd->int_enable_reg);
- printk("pAd->int_pending = %08x\n", pAd->int_pending);
- RTMP_IO_READ32(pAd, RX_DRX_IDX , ®);
- printk("pAd->RxRing.RxSwReadIdx = %08x, RX_DRX_IDX = %08x\n", pAd->RxRing.RxSwReadIdx, reg);
- }
-#endif
-
pAd->bPCIclkOff = FALSE;
@@ -909,6 +853,7 @@ rt2860_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
if (IntSource.word & FifoStaFullInt)
{
+#if 1
if ((pAd->int_disable_mask & FifoStaFullInt) == 0)
{
/* mask FifoStaFullInt */
@@ -916,6 +861,9 @@ rt2860_interrupt(int irq, void *dev_instance, struct pt_regs *regs)
tasklet_hi_schedule(&pObj->fifo_statistic_full_task);
}
pAd->int_pending |= FifoStaFullInt;
+#else
+ NICUpdateFifoStaCounters(pAd);
+#endif
}
if (IntSource.word & INT_MGMT_DLY)
@@ -1302,174 +1250,11 @@ VOID RT28xx_UpdateBeaconToAsic(
VOID RTMPInitPCIeLinkCtrlValue(
IN PRTMP_ADAPTER pAd)
{
- INT pos;
- USHORT reg16, data2, PCIePowerSaveLevel, Configuration;
- BOOLEAN bFindIntel = FALSE;
- POS_COOKIE pObj;
-
- pObj = (POS_COOKIE) pAd->OS_Cookie;
-
- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
- return;
-
- DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __FUNCTION__));
- // Init EEPROM, and save settings
- PCIePowerSaveLevel = RTMP_EEPROM_READ16(pAd, 0x22);
- pAd->PCIePowerSaveLevel = PCIePowerSaveLevel & 0xff;
-
- if ((PCIePowerSaveLevel&0xff) == 0xff)
- {
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE);
- DBGPRINT(RT_DEBUG_TRACE, ("====> PCIePowerSaveLevel = 0x%x.\n", PCIePowerSaveLevel));
- return;
- }
- else
- {
- PCIePowerSaveLevel &= 0x3;
- data2 = RTMP_EEPROM_READ16(pAd, 0x24);
-
- if( !(((data2&0xff00) == 0x9200) && ((data2&0x80) !=0)) )
- {
- if (PCIePowerSaveLevel > 1 )
- PCIePowerSaveLevel = 1;
- }
-
- DBGPRINT(RT_DEBUG_TRACE, ("====> Write 0x83 = 0x%x.\n", PCIePowerSaveLevel));
- AsicSendCommandToMcu(pAd, 0x83, 0xff, (UCHAR)PCIePowerSaveLevel, 0x00);
- PCIePowerSaveLevel = RTMP_EEPROM_READ16(pAd, 0x22);
- PCIePowerSaveLevel &= 0xff;
- PCIePowerSaveLevel = PCIePowerSaveLevel >> 6;
- switch(PCIePowerSaveLevel)
- {
- case 0:
- pAd->LnkCtrlBitMask = 0x0;
- break;
- case 1:
- pAd->LnkCtrlBitMask = 0x1;
- break;
- case 2:
- pAd->LnkCtrlBitMask = 0x3;
- break;
- case 3:
- pAd->LnkCtrlBitMask = 0x103;
- break;
- }
- DBGPRINT(RT_DEBUG_TRACE, ("====> LnkCtrlBitMask = 0x%x.\n", pAd->LnkCtrlBitMask));
- }
-
- // Find Ralink PCIe Device's Express Capability Offset
- pos = pci_find_capability(pObj->pci_dev, PCI_CAP_ID_EXP);
-
- if (pos != 0)
- {
- // Ralink PCIe Device's Link Control Register Offset
- pAd->RLnkCtrlOffset = pos + PCI_EXP_LNKCTL;
- pci_read_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, ®16);
- Configuration = le2cpu16(reg16);
- DBGPRINT(RT_DEBUG_TRACE, ("Read (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n",
- pAd->RLnkCtrlOffset, Configuration));
- pAd->RLnkCtrlConfiguration = (Configuration & 0x103);
- Configuration &= 0xfefc;
- // value with 0 is more stable than value with 1,
- // but value with 1 is more power save than value with 0.
- Configuration |= (0x0);
- reg16 = cpu2le16(Configuration);
- pci_write_config_word(pObj->pci_dev, pAd->RLnkCtrlOffset, reg16);
- DBGPRINT(RT_DEBUG_TRACE, ("Write (Ralink PCIe Link Control Register) offset 0x%x = 0x%x\n",
- pos + PCI_EXP_LNKCTL, Configuration));
-
- RTMPFindHostPCIDev(pAd);
- if (pObj->parent_pci_dev)
- {
- USHORT vendor_id;
-
- pci_read_config_word(pObj->parent_pci_dev, PCI_VENDOR_ID, &vendor_id);
- vendor_id = le2cpu16(vendor_id);
- if (vendor_id == PCIBUS_INTEL_VENDOR)
- bFindIntel = TRUE;
-
- // Find PCI-to-PCI Bridge Express Capability Offset
- pos = pci_find_capability(pObj->parent_pci_dev, PCI_CAP_ID_EXP);
-
- if (pos != 0)
- {
- // PCI-to-PCI Bridge Link Control Register Offset
- pAd->HostLnkCtrlOffset = pos + PCI_EXP_LNKCTL;
- pci_read_config_word(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, ®16);
- Configuration = le2cpu16(reg16);
- DBGPRINT(RT_DEBUG_TRACE, ("Read (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n",
- pAd->HostLnkCtrlOffset, Configuration));
- pAd->HostLnkCtrlConfiguration = (Configuration & 0x103);
- Configuration &= 0xfefc;
- // value with 0 is more stable than value with 1,
- // but value with 1 is more power save than value with 0.
- Configuration |= pAd->LnkCtrlBitMask;//(0x0);
- reg16 = cpu2le16(Configuration);
- pci_write_config_word(pObj->parent_pci_dev, pAd->HostLnkCtrlOffset, reg16);
- DBGPRINT(RT_DEBUG_TRACE, ("Write (Host PCI-to-PCI Bridge Link Control Register) offset 0x%x = 0x%x\n",
- pAd->HostLnkCtrlOffset, Configuration));
- }
- else
- {
- pAd->HostLnkCtrlOffset = 0;
- DBGPRINT(RT_DEBUG_ERROR, ("%s: cannot find PCI-to-PCI Bridge PCI Express Capability!\n", __FUNCTION__));
- }
- }
- }
- else
- {
- pAd->RLnkCtrlOffset = 0;
- pAd->HostLnkCtrlOffset = 0;
- DBGPRINT(RT_DEBUG_ERROR, ("%s: cannot find Ralink PCIe Device's PCI Express Capability!\n", __FUNCTION__));
- }
-
- if (bFindIntel == FALSE)
- {
- DBGPRINT(RT_DEBUG_TRACE, ("Doesn't find Intel PCI host controller. \n"));
- // Doesn't switch L0, L1, So set PCIePowerSaveLevel to 0xff, which means we doesn't
- pAd->PCIePowerSaveLevel = 0xff;
- }
}
VOID RTMPFindHostPCIDev(
IN PRTMP_ADAPTER pAd)
{
- USHORT reg16;
- UCHAR reg8;
- UINT DevFn;
- PPCI_DEV pPci_dev;
- POS_COOKIE pObj;
-
- pObj = (POS_COOKIE) pAd->OS_Cookie;
-
- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
- return;
-
- DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __FUNCTION__));
-
- pObj->parent_pci_dev = NULL;
- if (pObj->pci_dev->bus->parent)
- {
- for (DevFn = 0; DevFn < 255; DevFn++)
- {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- pPci_dev = pci_get_slot(pObj->pci_dev->bus->parent, DevFn);
-#else
- pPci_dev = pci_find_slot(pObj->pci_dev->bus->parent->number, DevFn);
-#endif
- if (pPci_dev)
- {
- pci_read_config_word(pPci_dev, PCI_CLASS_DEVICE, ®16);
- reg16 = le2cpu16(reg16);
- pci_read_config_byte(pPci_dev, PCI_CB_CARD_BUS, ®8);
- if ((reg16 == PCI_CLASS_BRIDGE_PCI) &&
- (reg8 == pObj->pci_dev->bus->number))
- {
- pObj->parent_pci_dev = pPci_dev;
- }
- }
- }
- }
}
/*
@@ -1487,43 +1272,6 @@ VOID RTMPPCIeLinkCtrlValueRestore(
IN PRTMP_ADAPTER pAd,
IN UCHAR Level)
{
- USHORT PCIePowerSaveLevel, reg16;
- USHORT Configuration;
- POS_COOKIE pObj;
-
- pObj = (POS_COOKIE) pAd->OS_Cookie;
-
- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
- return;
-
- DBGPRINT(RT_DEBUG_TRACE, ("%s.===>\n", __FUNCTION__));
- PCIePowerSaveLevel = pAd->PCIePowerSaveLevel;
- if ((PCIePowerSaveLevel&0xff) == 0xff)
- {
- DBGPRINT(RT_DEBUG_TRACE,("return \n"));
- return;
- }
-
- if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0))
- {
- PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration);
- if ((Configuration != 0) &&
- (Configuration != 0xFFFF))
- {
- Configuration &= 0xfefc;
- if (Level == RESTORE_CLOSE)
- Configuration |= pAd->RLnkCtrlConfiguration;
- else
- Configuration |= 0x0;
- PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration);
- pAd->bPCIclkOffCommand = FALSE;
- DBGPRINT(RT_DEBUG_TRACE, ("Restore Ralink : offset 0x%x = 0x%x\n", pAd->RLnkCtrlOffset, Configuration));
- }
- else
- DBGPRINT(RT_DEBUG_ERROR, ("Restore Ralink : PCI_REG_READ_WORD failed (Configuration = 0x%x)\n", Configuration));
- }
-
- DBGPRINT(RT_DEBUG_TRACE,("%s <===\n", __FUNCTION__));
}
/*
@@ -1541,62 +1289,6 @@ VOID RTMPPCIeLinkCtrlSetting(
IN PRTMP_ADAPTER pAd,
IN USHORT Max)
{
- USHORT PCIePowerSaveLevel, reg16;
- USHORT Configuration;
- POS_COOKIE pObj;
-
- pObj = (POS_COOKIE) pAd->OS_Cookie;
-
- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
- return;
-
- DBGPRINT(RT_DEBUG_TRACE,("%s===>\n", __FUNCTION__));
- PCIePowerSaveLevel = pAd->PCIePowerSaveLevel;
- if ((PCIePowerSaveLevel&0xff) == 0xff)
- {
- DBGPRINT(RT_DEBUG_TRACE,("return \n"));
- return;
- }
- PCIePowerSaveLevel = PCIePowerSaveLevel>>6;
-
- if (pObj->pci_dev && (pAd->RLnkCtrlOffset != 0))
- {
- // first 2892 chip not allow to frequently set mode 3. will cause hang problem.
- if (PCIePowerSaveLevel > Max)
- PCIePowerSaveLevel = Max;
-
- PCI_REG_READ_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration);
- switch (PCIePowerSaveLevel)
- {
- case 0:
- // No PCI power safe
- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 00 .
- Configuration &= 0xfefc;
- break;
- case 1:
- // L0
- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 01 .
- Configuration &= 0xfefc;
- Configuration |= 0x1;
- break;
- case 2:
- // L0 and L1
- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11
- Configuration &= 0xfefc;
- Configuration |= 0x1; //0x3;
- break;
- case 3:
- // L0 , L1 and clock management.
- // Set b0 and b1 of LinkControl (both 2892 and PCIe bridge) to 11 and bit 8 of LinkControl of 2892 to 1
- Configuration &= 0xfefc;
- Configuration |= 0x101; //0x103;
- break;
- }
- PCI_REG_WIRTE_WORD(pObj->pci_dev, pAd->RLnkCtrlOffset, Configuration);
- DBGPRINT(RT_DEBUG_TRACE, ("Write Ralink device : offset 0x%x = 0x%x\n", pAd->RLnkCtrlOffset, Configuration));
- }
-
- DBGPRINT(RT_DEBUG_TRACE,("RTMPPCIePowerLinkCtrl <==============\n"));
}
#endif // CONFIG_STA_SUPPORT //
diff --git a/rt2860-1.7.0.0/os/linux/Makefile.4 b/rt2860-source-1.8.0.0/os/linux/Makefile.4
similarity index 100%
copy from rt2860-1.7.0.0/os/linux/Makefile.4
copy to rt2860-source-1.8.0.0/os/linux/Makefile.4
diff --git a/rt2860-1.7.0.0/os/linux/Makefile.6 b/rt2860-source-1.8.0.0/os/linux/Makefile.6
similarity index 89%
copy from rt2860-1.7.0.0/os/linux/Makefile.6
copy to rt2860-source-1.8.0.0/os/linux/Makefile.6
index fc3be57..5dd36e3 100644
--- a/rt2860-1.7.0.0/os/linux/Makefile.6
+++ b/rt2860-source-1.8.0.0/os/linux/Makefile.6
@@ -11,7 +11,6 @@ rt$(CHIPSET)sta-objs := \
../../common/mlme.o\
../../common/rtmp_wep.o\
../../common/action.o\
- ../../common/ba_action.o\
../../common/cmm_data.o\
../../common/rtmp_init.o\
../../common/rtmp_tkip.o\
@@ -36,8 +35,9 @@ rt$(CHIPSET)sta-objs := \
../../os/linux/rt_main_dev.o\
../../os/linux/sta_ioctl.o
-ifeq ($(HAS_ATE),y)
-rt$(CHIPSET)sta-objs += ../../os/linux/rt_ate.o
+ifeq ($(HAS_DOT11_N_SUPPORT),y)
+rt$(CHIPSET)sta-objs += \
+ ../../common/ba_action.o
endif
ifeq ($(HAS_BLOCK_NET_IF),y)
@@ -55,16 +55,13 @@ rt$(CHIPSET)sta-objs += \
../../common/cmm_data_2860.o
endif
-ifeq ($(CHIPSET),2870)
-rt$(CHIPSET)sta-objs += \
- ../../os/linux/2870_main_dev.o\
- ../../common/2870_rtmp_init.o\
- ../../common/rtusb_io.o\
- ../../common/rtusb_bulk.o\
- ../../common/rtusb_data.o\
- ../../common/cmm_data_2870.o
+ifeq ($(HAS_ATE),y)
+rt$(CHIPSET)sta-objs += ../../os/linux/rt_ate.o
endif
+#endif // CONFIG_STA_SUPPORT //
+
+
clean:
rm -f ../../common/*.o
rm -f ../../common/.*.{cmd,flags,d}
diff --git a/rt2860-1.7.0.0/os/linux/Module.symvers b/rt2860-source-1.8.0.0/os/linux/Module.symvers
similarity index 100%
copy from rt2860-1.7.0.0/os/linux/Module.symvers
copy to rt2860-source-1.8.0.0/os/linux/Module.symvers
diff --git a/rt2860-1.7.0.0/os/linux/config.mk b/rt2860-source-1.8.0.0/os/linux/config.mk
similarity index 83%
copy from rt2860-1.7.0.0/os/linux/config.mk
copy to rt2860-source-1.8.0.0/os/linux/config.mk
index af961c6..5f4c5d1 100644
--- a/rt2860-1.7.0.0/os/linux/config.mk
+++ b/rt2860-source-1.8.0.0/os/linux/config.mk
@@ -19,38 +19,40 @@ HAS_DFS_SUPPORT=n
#Support Carrier-Sense function
HAS_CS_SUPPORT=n
-# Support user specific transmit rate of Multicast packet.
-HAS_MCAST_RATE_SPECIFIC_SUPPORT=n
-
#ifdef MULTI_CARD
# Support for Multiple Cards
HAS_MC_SUPPORT=n
#endif // MULTI_CARD //
-#Support for PCI-MSI
-HAS_MSI_SUPPORT=n
-
#Support for IEEE802.11e DLS
HAS_QOS_DLS_SUPPORT=n
#Support for EXT_CHANNEL
HAS_EXT_BUILD_CHANNEL_LIST=n
-#Support for IDS
-HAS_IDS_SUPPORT=n
-
#Support for Net-SNMP
HAS_SNMP_SUPPORT=n
-#Support features of 802.11n Draft3
-HAS_DOT11N_DRAFT3_SUPPORT=n
+#Support features of Single SKU.
+HAS_SINGLE_SKU_SUPPORT=n
+
+#Support features of 802.11n
+HAS_DOT11_N_SUPPORT=y
+#################################################
+
CC := $(CROSS_COMPILE)gcc
LD := $(CROSS_COMPILE)ld
WFLAGS := -DAGGREGATION_SUPPORT -DPIGGYBACK_SUPPORT -DWMM_SUPPORT -DLINUX -Wall -Wstrict-prototypes -Wno-trigraphs
+
+#################################################
+
+#ifdef CONFIG_STA_SUPPORT
+# config for STA mode
+
ifeq ($(RT28xx_MODE),STA)
WFLAGS += -DCONFIG_STA_SUPPORT -DDBG
@@ -77,17 +79,35 @@ ifeq ($(HAS_QOS_DLS_SUPPORT),y)
WFLAGS += -DQOS_DLS_SUPPORT
endif
+ifeq ($(HAS_DOT11_N_SUPPORT),y)
+WFLAGS += -DDOT11_N_SUPPORT
+endif
+
+ifeq ($(HAS_CS_SUPPORT),y)
+WFLAGS += -DCARRIER_DETECTION_SUPPORT
+endif
+
+ifeq ($(HAS_SINGLE_SKU_SUPPORT),y)
+WFLAGS += -DSINGLE_SKU
+endif
+
endif
# endif of ifeq ($(RT28xx_MODE),STA)
+#endif // CONFIG_STA_SUPPORT //
+
+#################################################
+
+#################################################
+
+#
+# Common compiler flag
+#
+
ifeq ($(HAS_EXT_BUILD_CHANNEL_LIST),y)
WFLAGS += -DEXT_BUILD_CHANNEL_LIST
endif
-ifeq ($(HAS_IDS_SUPPORT),y)
-WFLAGS += -DIDS_SUPPORT
-endif
-
ifeq ($(CHIPSET),2860)
WFLAGS +=-DRT2860
endif
@@ -138,11 +158,19 @@ ifeq ($(PLATFORM),INF_DANUBE)
WFLAGS += -DINF_DANUBE -DRT_BIG_ENDIAN
endif
+ifeq ($(PLATFORM),CAVM_OCTEON)
+WFLAGS += -DRT_BIG_ENDIAN
+endif
ifeq ($(PLATFORM),BRCM_6358)
WFLAGS += -DRT_BIG_ENDIAN
endif
+ifeq ($(PLATFORM),INF_AMAZON_SE)
+#WFLAGS += -DRT_BIG_ENDIAN -DINF_AMAZON_SE -DBG_FT_SUPPORT
+WFLAGS += -DRT_BIG_ENDIAN -DINF_AMAZON_SE
+endif
+
#kernel build options for 2.4
# move to Makefile outside LINUX_SRC := /opt/star/kernel/linux-2.4.27-star
@@ -159,7 +187,7 @@ export CFLAGS
endif
ifeq ($(PLATFORM),SIGMA_8622)
-CFLAGS := -D__KERNEL__ -I$(RT28xx_DIR)/include -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fno-common -pipe -fno-builtin -D__linux__ -DNO_MM -mapcs-32 -march=armv4 -mtune=arm7tdmi -msoft-float -DMODULE -mshort-load-bytes -nostdinc -iwithprefix -DMODULE $(WFLAGS)
+CFLAGS := -D__KERNEL__ -I$(CROSS_COMPILE_INCLUDE)/include -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -fno-common -pipe -fno-builtin -D__linux__ -DNO_MM -mapcs-32 -march=armv4 -mtune=arm7tdmi -msoft-float -DMODULE -mshort-load-bytes -nostdinc -iwithprefix -DMODULE $(WFLAGS)
export CFLAGS
endif
@@ -209,3 +237,9 @@ ifeq ($(PLATFORM),IXP)
EXTRA_CFLAGS := -v $(WFLAGS) -I$(RT28xx_DIR)/include -mbig-endian
endif
+ifeq ($(PLATFORM),CAVM_OCTEON)
+ EXTRA_CFLAGS := $(WFLAGS) -I$(RT28xx_DIR)/include \
+ -mabi=64 $(WFLAGS)
+export CFLAGS
+endif
+
diff --git a/rt2860-source-1.8.0.0/os/linux/modules.order b/rt2860-source-1.8.0.0/os/linux/modules.order
new file mode 100644
index 0000000..a6cc50c
--- /dev/null
+++ b/rt2860-source-1.8.0.0/os/linux/modules.order
@@ -0,0 +1 @@
+kernel//home/snowpin/temp/2860/V1.8.0.0/RT2860_V1.8.0.0/DPO/os/linux/rt2860sta.ko
diff --git a/rt2860-1.7.0.0/os/linux/rt_ate.c b/rt2860-source-1.8.0.0/os/linux/rt_ate.c
similarity index 95%
copy from rt2860-1.7.0.0/os/linux/rt_ate.c
copy to rt2860-source-1.8.0.0/os/linux/rt_ate.c
index a72ada4..5255815 100644
--- a/rt2860-1.7.0.0/os/linux/rt_ate.c
+++ b/rt2860-source-1.8.0.0/os/linux/rt_ate.c
@@ -1797,6 +1797,13 @@ INT Set_ATE_TX_BW_Proc(
RTMPusecDelay(5000);
}
}
+#ifdef DOT11_N_SUPPORT
+ if ((pAd->ate.TxWI.PHYMODE >= MODE_HTMIX) && (pAd->ate.TxWI.MCS == 7))
+ {
+ value = 0x28;
+ ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R67, value);
+ }
+#endif // DOT11_N_SUPPORT //
}
//Set BBP R4 bit[4:3]=1:0
@@ -2885,12 +2892,10 @@ VOID ATEAsicAdjustTxPower(
/* TX_PWR_CFG_1 ~ TX_PWR_CFG_4 */
RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, TxPwr[i]);
- ATEDBGPRINT(RT_DEBUG_INFO, ("ATEAsicAdjustTxPower - DeltaPwr=%d, offset=0x%x, TxPwr=%lx, BbpR1=%x, round=%ld, pTxAgcCompensate=%d \n",
- DeltaPwr, TX_PWR_CFG_0 + i*4, TxPwr[i], BbpR49, pAd->Mlme.OneSecPeriodicRound, *pTxAgcCompensate));
+
}
}
- ATEDBGPRINT(RT_DEBUG_INFO, ("<-- ATEAsicAdjustTxPower, DeltaPwr=%d\n", DeltaPwr));
}
/*
@@ -3565,6 +3570,15 @@ VOID ATE_QA_Statistics(
#define RACFG_CMD_ATE_SET_TX_FRAME_LEN 0x0111
#define RACFG_CMD_ATE_SET_TX_FRAME_COUNT 0x0112
#define RACFG_CMD_ATE_START_RX_FRAME 0x0113
+#define RACFG_CMD_ATE_E2PROM_READ_BULK 0x0114
+#define RACFG_CMD_ATE_E2PROM_WRITE_BULK 0x0115
+#define RACFG_CMD_ATE_IO_WRITE_BULK 0x0116
+#define RACFG_CMD_ATE_BBP_READ_BULK 0x0117
+#define RACFG_CMD_ATE_BBP_WRITE_BULK 0x0118
+#define RACFG_CMD_ATE_RF_READ_BULK 0x0119
+#define RACFG_CMD_ATE_RF_WRITE_BULK 0x011a
+
+
#define A2Hex(_X, _p) \
{ \
@@ -3583,6 +3597,7 @@ VOID ATE_QA_Statistics(
} \
}
+
static VOID memcpy_exl(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, ULONG len);
static VOID memcpy_exs(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, ULONG len);
static VOID RTMP_IO_READ_BULK(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, UINT32 len);
@@ -3611,7 +3626,7 @@ VOID RtmpDoAte(
struct ate_racfghdr *pRaCfg;
INT Status = NDIS_STATUS_SUCCESS;
- ATEDBGPRINT(RT_DEBUG_LOUD, ("===>RtmpDoAte()\n"));
+
if((pRaCfg = kmalloc(sizeof(struct ate_racfghdr), GFP_KERNEL)) == NULL)
{
@@ -3627,10 +3642,7 @@ VOID RtmpDoAte(
kfree(pRaCfg);
return;
}
- else
- {
- ATEDBGPRINT(RT_DEBUG_LOUD, ("Success in copy_from_user()\n"));
- }
+
Command_Id = ntohs(pRaCfg->command_id);
@@ -3709,7 +3721,7 @@ VOID RtmpDoAte(
// We must kill ATE daemon first before setting ATESTOP,
// or Microsoft will report sth. wrong.
#ifndef UCOS
- ret = kill_proc(pAdapter->ate.AtePid, SIGTERM, 1);
+ ret = KILL_THREAD_PID(pAdapter->ate.AtePid, SIGTERM, 1);
if (ret)
{
ATEDBGPRINT(RT_DEBUG_ERROR, ("%s: unable to signal thread\n", pAdapter->net_dev->name));
@@ -4119,6 +4131,275 @@ VOID RtmpDoAte(
break;
+ case RACFG_CMD_ATE_E2PROM_READ_BULK:
+ {
+ USHORT offset;
+ USHORT len;
+ USHORT buffer[EEPROM_SIZE/2];
+
+ offset = ntohs(pRaCfg->status);
+ memcpy(&len, pRaCfg->data, 2);
+ len = ntohs(len);
+
+ rt_ee_read_all(pAdapter,(USHORT *)buffer);
+ if (offset + len <= EEPROM_SIZE)
+ memcpy_exs(pAdapter, pRaCfg->data, (UCHAR *)buffer+offset, len);
+ else
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("exceed EEPROM size\n"));
+
+ // prepare feedback
+ pRaCfg->length = htons(2+len);
+ pRaCfg->status = htons(0);
+ wrq->u.data.length = sizeof(pRaCfg->magic_no) + sizeof(pRaCfg->command_type)
+ + sizeof(pRaCfg->command_id) + sizeof(pRaCfg->length)
+ + sizeof(pRaCfg->sequence) + ntohs(pRaCfg->length);
+
+ if (copy_to_user(wrq->u.data.pointer, pRaCfg, wrq->u.data.length))
+ {
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("copy_to_user() fail in case RACFG_CMD_ATE_E2PROM_READ_BULK\n"));
+ Status = -EFAULT;
+ }
+ else
+ {
+ ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_E2PROM_READ_BULK is done !\n"));
+ }
+
+ }
+ break;
+
+ case RACFG_CMD_ATE_E2PROM_WRITE_BULK:
+ {
+ USHORT offset;
+ USHORT len;
+ USHORT buffer[EEPROM_SIZE/2];
+
+ offset = ntohs(pRaCfg->status);
+ memcpy(&len, pRaCfg->data, 2);
+ len = ntohs(len);
+
+ rt_ee_read_all(pAdapter,(USHORT *)buffer);
+ memcpy_exs(pAdapter, (UCHAR *)buffer + offset, (UCHAR *)pRaCfg->data + 2, len);
+ rt_ee_write_all(pAdapter,(USHORT *)buffer);
+
+ // prepare feedback
+ pRaCfg->length = htons(2);
+ pRaCfg->status = htons(0);
+ wrq->u.data.length = sizeof(pRaCfg->magic_no) + sizeof(pRaCfg->command_type)
+ + sizeof(pRaCfg->command_id) + sizeof(pRaCfg->length)
+ + sizeof(pRaCfg->sequence) + ntohs(pRaCfg->length);
+ if (copy_to_user(wrq->u.data.pointer, pRaCfg, wrq->u.data.length))
+ {
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("copy_to_user() fail in case RACFG_CMD_ATE_E2PROM_WRITE_BULK\n"));
+ Status = -EFAULT;
+ }
+ else
+ {
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("RACFG_CMD_ATE_E2PROM_WRITE_BULK is done !\n"));
+ }
+
+ }
+ break;
+
+ case RACFG_CMD_ATE_IO_WRITE_BULK:
+ {
+ UINT32 offset, i, value;
+ USHORT len;
+
+ memcpy(&offset, &pRaCfg->status, 4);
+ offset = ntohl(offset);
+ memcpy(&len, pRaCfg->data+2, 2);
+ len = ntohs(len);
+
+ for (i = 0; i < len; i += 4)
+ {
+ memcpy_exl(pAdapter, (UCHAR *)&value, pRaCfg->data+4+i, 4);
+ printk("Write %x %x\n", offset + i, value);
+ RTMP_IO_WRITE32(pAdapter, (offset +i) & 0xffff, value);
+ }
+
+ // prepare feedback
+ pRaCfg->length = htons(2);
+ pRaCfg->status = htons(0);
+ wrq->u.data.length = sizeof(pRaCfg->magic_no) + sizeof(pRaCfg->command_type)
+ + sizeof(pRaCfg->command_id) + sizeof(pRaCfg->length)
+ + sizeof(pRaCfg->sequence) + ntohs(pRaCfg->length);
+ if (copy_to_user(wrq->u.data.pointer, pRaCfg, wrq->u.data.length))
+ {
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("copy_to_user() fail in case RACFG_CMD_ATE_IO_WRITE_BULK\n"));
+ Status = -EFAULT;
+ }
+ else
+ {
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("RACFG_CMD_ATE_IO_WRITE_BULK is done !\n"));
+ }
+
+ }
+ break;
+
+ case RACFG_CMD_ATE_BBP_READ_BULK:
+ {
+ USHORT offset;
+ USHORT len;
+ USHORT j;
+
+ offset = ntohs(pRaCfg->status);
+ memcpy(&len, pRaCfg->data, 2);
+ len = ntohs(len);
+
+
+ for (j = offset; j < (offset+len); j++)
+ {
+ pRaCfg->data[j - offset] = 0;
+
+ if (pAdapter->ate.Mode == ATE_STOP)
+ {
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, j, &pRaCfg->data[j - offset]);
+ }
+ else
+ {
+ ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, j, &pRaCfg->data[j - offset]);
+ }
+ }
+
+ // prepare feedback
+ pRaCfg->length = htons(2+len);
+ pRaCfg->status = htons(0);
+ wrq->u.data.length = sizeof(pRaCfg->magic_no) + sizeof(pRaCfg->command_type)
+ + sizeof(pRaCfg->command_id) + sizeof(pRaCfg->length)
+ + sizeof(pRaCfg->sequence) + ntohs(pRaCfg->length);
+
+ if (copy_to_user(wrq->u.data.pointer, pRaCfg, wrq->u.data.length))
+ {
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("copy_to_user() fail in case RACFG_CMD_ATE_BBP_READ_BULK\n"));
+ Status = -EFAULT;
+ }
+ else
+ {
+ ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_BBP_READ_BULK is done !\n"));
+ }
+
+ }
+ break;
+
+ case RACFG_CMD_ATE_BBP_WRITE_BULK:
+ {
+ USHORT offset;
+ USHORT len;
+ USHORT j;
+ UCHAR *value;
+
+ offset = ntohs(pRaCfg->status);
+ memcpy(&len, pRaCfg->data, 2);
+ len = ntohs(len);
+
+ for (j = offset; j < (offset+len); j++)
+ {
+ value = pRaCfg->data + 2 + (j - offset);
+ if (pAdapter->ate.Mode == ATE_STOP)
+ {
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, j, *value);
+ }
+ else
+ {
+ ATE_BBP_IO_WRITE8_BY_REG_ID(pAdapter, j, *value);
+ }
+ }
+
+ // prepare feedback
+ pRaCfg->length = htons(2);
+ pRaCfg->status = htons(0);
+ wrq->u.data.length = sizeof(pRaCfg->magic_no) + sizeof(pRaCfg->command_type)
+ + sizeof(pRaCfg->command_id) + sizeof(pRaCfg->length)
+ + sizeof(pRaCfg->sequence) + ntohs(pRaCfg->length);
+
+ if (copy_to_user(wrq->u.data.pointer, pRaCfg, wrq->u.data.length))
+ {
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("copy_to_user() fail in case RACFG_CMD_ATE_BBP_WRITE_BULK\n"));
+ Status = -EFAULT;
+ }
+ else
+ {
+ ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_BBP_WRITE_BULK is done !\n"));
+ }
+ }
+ break;
+
+#ifdef CONFIG_RALINK_RT3052
+ case RACFG_CMD_ATE_RF_READ_BULK:
+ {
+ USHORT offset;
+ USHORT len;
+ USHORT j;
+
+ offset = ntohs(pRaCfg->status);
+ memcpy(&len, pRaCfg->data, 2);
+ len = ntohs(len);
+
+ for (j = offset; j < (offset+len); j++)
+ {
+ pRaCfg->data[j - offset] = 0;
+ RT30xxReadRFRegister(pAdapter, j, &pRaCfg->data[j - offset]);
+ }
+
+ // prepare feedback
+ pRaCfg->length = htons(2+len);
+ pRaCfg->status = htons(0);
+ wrq->u.data.length = sizeof(pRaCfg->magic_no) + sizeof(pRaCfg->command_type)
+ + sizeof(pRaCfg->command_id) + sizeof(pRaCfg->length)
+ + sizeof(pRaCfg->sequence) + ntohs(pRaCfg->length);
+
+ if (copy_to_user(wrq->u.data.pointer, pRaCfg, wrq->u.data.length))
+ {
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("copy_to_user() fail in case RACFG_CMD_ATE_RF_READ_BULK\n"));
+ Status = -EFAULT;
+ }
+ else
+ {
+ ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_RF_READ_BULK is done !\n"));
+ }
+
+ }
+ break;
+
+ case RACFG_CMD_ATE_RF_WRITE_BULK:
+ {
+ USHORT offset;
+ USHORT len;
+ USHORT j;
+ UCHAR *value;
+
+ offset = ntohs(pRaCfg->status);
+ memcpy(&len, pRaCfg->data, 2);
+ len = ntohs(len);
+
+ for (j = offset; j < (offset+len); j++)
+ {
+ value = pRaCfg->data + 2 + (j - offset);
+ RT30xxWriteRFRegister(pAdapter, j, *value);
+ }
+
+ // prepare feedback
+ pRaCfg->length = htons(2);
+ pRaCfg->status = htons(0);
+ wrq->u.data.length = sizeof(pRaCfg->magic_no) + sizeof(pRaCfg->command_type)
+ + sizeof(pRaCfg->command_id) + sizeof(pRaCfg->length)
+ + sizeof(pRaCfg->sequence) + ntohs(pRaCfg->length);
+
+ if (copy_to_user(wrq->u.data.pointer, pRaCfg, wrq->u.data.length))
+ {
+ ATEDBGPRINT(RT_DEBUG_ERROR, ("copy_to_user() fail in case RACFG_CMD_ATE_RF_WRITE_BULK\n"));
+ Status = -EFAULT;
+ }
+ else
+ {
+ ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_RF_WRITE_BULK is done !\n"));
+ }
+
+ }
+ break;
+#endif
+
+
case RACFG_CMD_GET_NOISE_LEVEL:
{
UCHAR channel;
diff --git a/rt2860-1.7.0.0/os/linux/rt_linux.c b/rt2860-source-1.8.0.0/os/linux/rt_linux.c
similarity index 99%
copy from rt2860-1.7.0.0/os/linux/rt_linux.c
copy to rt2860-source-1.8.0.0/os/linux/rt_linux.c
index e1a1e08..e39d80c 100644
--- a/rt2860-1.7.0.0/os/linux/rt_linux.c
+++ b/rt2860-source-1.8.0.0/os/linux/rt_linux.c
@@ -294,10 +294,6 @@ VOID RTMPFreeAdapter(
NdisFreeSpinLock(&pAd->MgmtRingLock);
#ifdef RT2860
-#ifdef WIN_NDIS
- NdisFreeSpinLock(&pAd->TxRingLock);
- NdisFreeSpinLock(&pAd->LocalTxBufQueueLock);
-#endif
NdisFreeSpinLock(&pAd->RxRingLock);
#endif // RT2860 //
@@ -863,7 +859,7 @@ void send_monitor_packets(
}
pOSPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket);
- pOSPkt->dev = get_netdev_from_bssid(pAd, BSS0);
+ pOSPkt->dev = get_netdev_from_bssid(pAd, BSS0);
if (pRxBlk->pHeader->FC.Type == BTYPE_DATA)
{
pRxBlk->DataSize -= LENGTH_802_11;
@@ -900,7 +896,7 @@ void send_monitor_packets(
pRxBlk->pData += header_len;
} //end if
-
+
if (pRxBlk->DataSize < pOSPkt->len) {
skb_trim(pOSPkt,pRxBlk->DataSize);
} else {
@@ -965,11 +961,14 @@ void send_monitor_packets(
ph->noise.len = 4;
ph->noise.data = 0;
+#ifdef DOT11_N_SUPPORT
if (pRxBlk->pRxWI->PHYMODE >= MODE_HTMIX)
{
rate_index = 16 + ((UCHAR)pRxBlk->pRxWI->BW *16) + ((UCHAR)pRxBlk->pRxWI->ShortGI *32) + ((UCHAR)pRxBlk->pRxWI->MCS);
}
- else if (pRxBlk->pRxWI->PHYMODE == MODE_OFDM)
+ else
+#endif // DOT11_N_SUPPORT //
+ if (pRxBlk->pRxWI->PHYMODE == MODE_OFDM)
rate_index = (UCHAR)(pRxBlk->pRxWI->MCS) + 4;
else
rate_index = (UCHAR)(pRxBlk->pRxWI->MCS);
diff --git a/rt2860-1.7.0.0/os/linux/rt_main_dev.c b/rt2860-source-1.8.0.0/os/linux/rt_main_dev.c
similarity index 95%
copy from rt2860-1.7.0.0/os/linux/rt_main_dev.c
copy to rt2860-source-1.8.0.0/os/linux/rt_main_dev.c
index 3038ce5..c346743 100644
--- a/rt2860-1.7.0.0/os/linux/rt_main_dev.c
+++ b/rt2860-source-1.8.0.0/os/linux/rt_main_dev.c
@@ -24,7 +24,6 @@
* *
*************************************************************************
-
Module Name:
rt_main_dev.c
@@ -70,8 +69,10 @@ MODULE_PARM_DESC (mac, "rt28xx: wireless mac addr");
/*---------------------------------------------------------------------*/
/* Prototypes of Functions Used */
/*---------------------------------------------------------------------*/
+#ifdef DOT11_N_SUPPORT
extern BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
extern void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
+#endif // DOT11_N_SUPPORT //
extern NDIS_STATUS NICLoadRateSwitchingParams(IN PRTMP_ADAPTER pAd);
#ifdef RT2860
@@ -216,7 +217,7 @@ int rt28xx_close(IN PNET_DEV dev)
{
struct net_device * net_dev = (struct net_device *)dev;
RTMP_ADAPTER *pAd = net_dev->priv;
- BOOLEAN Cancelled = FALSE;
+ BOOLEAN Cancelled = FALSE;
UINT32 i = 0;
@@ -226,14 +227,10 @@ int rt28xx_close(IN PNET_DEV dev)
if (pAd == NULL)
return 0; // close ok
- // when users do "Suspend to Disk" and reboot the computer, Fedora OS
- // will call rt28xx_close() when OS does not yet finish rtusb_disconnect()
- //
- // rtusb_disconnect() will set fRTMP_ADAPTER_NIC_NOT_EXIST, so we need to
- // check the bit, we can not do rt28xx_close() in the duration of
- // rtusb_disconnect()
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST))
- return 0;
+
+#ifdef WDS_SUPPORT
+ WdsDown(pAd);
+#endif // WDS_SUPPORT //
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
@@ -250,34 +247,34 @@ int rt28xx_close(IN PNET_DEV dev)
}
#ifdef QOS_DLS_SUPPORT
- // send DLS-TEAR_DOWN message,
- if (pAd->CommonCfg.bDLSCapable)
- {
- UCHAR i;
-
- // tear down local dls table entry
- for (i=0; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
+ // send DLS-TEAR_DOWN message,
+ if (pAd->CommonCfg.bDLSCapable)
{
- if (pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH))
+ UCHAR i;
+
+ // tear down local dls table entry
+ for (i=0; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
{
- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr);
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
+ if (pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH))
+ {
+ RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr);
+ pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
+ pAd->StaCfg.DLSEntry[i].Valid = FALSE;
+ }
}
- }
- // tear down peer dls table entry
- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; i<MAX_NUM_OF_DLS_ENTRY; i++)
- {
- if (pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH))
+ // tear down peer dls table entry
+ for (i=MAX_NUM_OF_INIT_DLS_ENTRY; i<MAX_NUM_OF_DLS_ENTRY; i++)
{
- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr);
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
+ if (pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH))
+ {
+ RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr);
+ pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
+ pAd->StaCfg.DLSEntry[i].Valid = FALSE;
+ }
}
+ RT28XX_MLME_HANDLER(pAd);
}
- RT28XX_MLME_HANDLER(pAd);
- }
#endif // QOS_DLS_SUPPORT //
if (INFRA_ON(pAd) &&
@@ -305,12 +302,14 @@ int rt28xx_close(IN PNET_DEV dev)
RTMPusecDelay(1000);
}
+
#ifdef CCX_SUPPORT
RTMPCancelTimer(&pAd->StaCfg.LeapAuthTimer, &Cancelled);
#endif
RTMPCancelTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, &Cancelled);
RTMPCancelTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, &Cancelled);
+
#ifdef WPA_SUPPLICANT_SUPPORT
#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
{
@@ -351,7 +350,7 @@ int rt28xx_close(IN PNET_DEV dev)
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
- STAMacTableReset(pAd);
+ MacTableReset(pAd);
}
#endif // CONFIG_STA_SUPPORT //
@@ -359,6 +358,7 @@ int rt28xx_close(IN PNET_DEV dev)
MeasureReqTabExit(pAd);
TpcReqTabExit(pAd);
+
#ifdef RT2860
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE))
{
@@ -383,10 +383,12 @@ int rt28xx_close(IN PNET_DEV dev)
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS);
-
+#ifdef DOT11_N_SUPPORT
// Free BA reorder resource
ba_reordering_resource_release(pAd);
+#endif // DOT11_N_SUPPORT //
+
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_START_UP);
return 0; // close ok
@@ -400,9 +402,11 @@ static int rt28xx_init(IN struct net_device *net_dev)
NDIS_STATUS Status;
UINT32 MacCsr0 = 0;
+
+#ifdef DOT11_N_SUPPORT
// Allocate BA Reordering memory
ba_reordering_resource_init(pAd, MAX_REORDERING_MPDU_NUM);
-
+#endif // DOT11_N_SUPPORT //
// Make sure MAC gets ready.
index = 0;
@@ -509,6 +513,7 @@ static int rt28xx_init(IN struct net_device *net_dev)
//Init Ba Capability parameters.
+#ifdef DOT11_N_SUPPORT
pAd->CommonCfg.DesiredHtPhy.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity;
pAd->CommonCfg.DesiredHtPhy.AmsduEnable = (USHORT)pAd->CommonCfg.BACapability.field.AmsduEnable;
pAd->CommonCfg.DesiredHtPhy.AmsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize;
@@ -517,6 +522,7 @@ static int rt28xx_init(IN struct net_device *net_dev)
pAd->CommonCfg.HtCapability.HtCapInfo.MimoPs = (USHORT)pAd->CommonCfg.BACapability.field.MMPSmode;
pAd->CommonCfg.HtCapability.HtCapInfo.AMsduSize = (USHORT)pAd->CommonCfg.BACapability.field.AmsduSize;
pAd->CommonCfg.HtCapability.HtCapParm.MpduDensity = (UCHAR)pAd->CommonCfg.BACapability.field.MpduDensity;
+#endif // DOT11_N_SUPPORT //
printk("2. Phy Mode = %d\n", pAd->CommonCfg.PhyMode);
@@ -525,11 +531,15 @@ static int rt28xx_init(IN struct net_device *net_dev)
printk("3. Phy Mode = %d\n", pAd->CommonCfg.PhyMode);
+ NICInitAsicFromEEPROM(pAd); //rt2860b
+
// Set PHY to appropriate mode
TmpPhy = pAd->CommonCfg.PhyMode;
pAd->CommonCfg.PhyMode = 0xff;
RTMPSetPhyMode(pAd, TmpPhy);
+#ifdef DOT11_N_SUPPORT
SetCommonHT(pAd);
+#endif // DOT11_N_SUPPORT //
// No valid channels.
if (pAd->ChannelListNum == 0)
@@ -537,11 +547,12 @@ static int rt28xx_init(IN struct net_device *net_dev)
printk("Wrong configuration. No valid channel found. Check \"ContryCode\" and \"ChannelGeography\" setting.\n");
goto err4;
}
-
+
+#ifdef DOT11_N_SUPPORT
printk("MCS Set = %02x %02x %02x %02x %02x\n", pAd->CommonCfg.HtCapability.MCSSet[0],
pAd->CommonCfg.HtCapability.MCSSet[1], pAd->CommonCfg.HtCapability.MCSSet[2],
pAd->CommonCfg.HtCapability.MCSSet[3], pAd->CommonCfg.HtCapability.MCSSet[4]);
- NICInitAsicFromEEPROM(pAd); //rt2860b
+#endif // DOT11_N_SUPPORT //
#ifdef IKANOS_VX_1X0
VR_IKANOS_FP_Init(pAd->ApCfg.BssidNum, pAd->PermanentAddress);
@@ -558,10 +569,11 @@ static int rt28xx_init(IN struct net_device *net_dev)
if (pAd && (Status != NDIS_STATUS_SUCCESS))
{
-
+ //
+ // Undo everything if it failed
+ //
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE))
{
-
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE);
}
}
@@ -571,8 +583,11 @@ static int rt28xx_init(IN struct net_device *net_dev)
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_MEDIA_STATE_CHANGE);
DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_DISCONNECT Event B!\n"));
+
+
}// end of else
+
DBGPRINT_S(Status, ("<==== RTMPInitialize, Status=%x\n", Status));
return TRUE;
@@ -585,9 +600,16 @@ err2:
RTMPFreeTxRxRingMemory(pAd);
err1:
+#ifdef DOT11_N_SUPPORT
os_free_mem(pAd, pAd->mpdu_blk_pool.mem); // free BA pool
+#endif // DOT11_N_SUPPORT //
RT28XX_IRQ_RELEASE(net_dev);
-
+
+ // shall not set priv to NULL here because the priv didn't been free yet.
+ //net_dev->priv = 0;
+#ifdef INF_AMAZON_SE
+err0:
+#endif // INF_AMAZON_SE //
printk("!!! %s Initialized fail !!!\n", RT28xx_CHIP_NAME);
return FALSE;
} /* End of rt28xx_init */
@@ -801,7 +823,11 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,5,0)
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+ device = dev_get_by_name(dev_net(dev), slot_name);
+#else
device = dev_get_by_name(dev->nd_net, slot_name);
+#endif
#else
device = dev_get_by_name(slot_name);
#endif
@@ -830,7 +856,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
else
#endif // MULTIPLE_CARD_SUPPORT //
sprintf(dev->name, "ra%d", i);
- DBGPRINT(RT_DEBUG_INFO, ("Assign the net device name as %s\n", dev->name));
Status = NDIS_STATUS_SUCCESS;
}
@@ -918,7 +943,7 @@ BOOLEAN RTMP_CardInfoRead(
else
pAd->EEPROMAddressNum = 8; // 93C86
- antenna.word = RTMP_EEPROM_READ16(pAd, EEPROM_NIC1_OFFSET);
+ RT28xx_EEPROM_READ16(pAd, EEPROM_NIC1_OFFSET, antenna.word);
if ((antenna.field.RfIcType == RFIC_2850) ||
(antenna.field.RfIcType == RFIC_2750))
@@ -933,9 +958,9 @@ BOOLEAN RTMP_CardInfoRead(
}
// get MAC address
- addr01 = RTMP_EEPROM_READ16(pAd, 0x04);
- addr23 = RTMP_EEPROM_READ16(pAd, 0x06);
- addr45 = RTMP_EEPROM_READ16(pAd, 0x08);
+ RT28xx_EEPROM_READ16(pAd, 0x04, addr01);
+ RT28xx_EEPROM_READ16(pAd, 0x06, addr23);
+ RT28xx_EEPROM_READ16(pAd, 0x08, addr45);
mac[0] = (UCHAR)(addr01 & 0xff);
mac[1] = (UCHAR)(addr01 >> 8);
@@ -1407,7 +1432,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb)
RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
goto done;
}
-
+
RTMP_SET_PACKET_5VT(pPacket, 0);
#ifdef CONFIG_5VT_ENHANCE
if (*(int*)(skb->cb) == BRIDGE_TAG) {
@@ -1463,7 +1488,7 @@ INT rt28xx_send_packets(
NdisZeroMemory((PUCHAR)&skb_p->cb[CB_OFF], 15);
RTMP_SET_PACKET_NET_DEVICE_MBSSID(skb_p, MAIN_MBSSID);
- return rt28xx_packet_xmit(skb_p);
+ return rt28xx_packet_xmit(skb_p);
} /* End of MBSS_VirtualIF_PacketSend */
@@ -1619,8 +1644,7 @@ struct net_device_stats *RT28xx_get_ether_stats(
if (pAd)
{
- DBGPRINT(RT_DEBUG_INFO, ("RT28xx_get_ether_stats --->\n"));
-
+
pAd->stats.rx_packets = pAd->WlanCounters.ReceivedFragmentCount.QuadPart;
pAd->stats.tx_packets = pAd->WlanCounters.TransmittedFragmentCount.QuadPart;
diff --git a/rt2860-1.7.0.0/os/linux/rt_profile.c b/rt2860-source-1.8.0.0/os/linux/rt_profile.c
similarity index 91%
copy from rt2860-1.7.0.0/os/linux/rt_profile.c
copy to rt2860-source-1.8.0.0/os/linux/rt_profile.c
index 1006f87..8dc5471 100644
--- a/rt2860-1.7.0.0/os/linux/rt_profile.c
+++ b/rt2860-source-1.8.0.0/os/linux/rt_profile.c
@@ -27,11 +27,12 @@
#include "rt_config.h"
+#ifdef DOT11_N_SUPPORT
static void HTParametersHook(
IN PRTMP_ADAPTER pAd,
IN CHAR *pValueStr,
IN CHAR *pInput);
-
+#endif // DOT11_N_SUPPORT //
#define ETH_MAC_ADDR_STR_LEN 17 // in format of xx:xx:xx:xx:xx:xx
@@ -207,7 +208,7 @@ INT delimitcnt(char * s,const char * ct)
/*
* Print the found text: use len with %.*s to specify field width.
*/
- DBGPRINT(RT_DEBUG_INFO, (" -> \"%.*s\"\n", (INT)(token - s), token));
+
/* accumulate delimiter count */
++count;
}
@@ -215,6 +216,107 @@ INT delimitcnt(char * s,const char * ct)
}
/*
+ * converts the Internet host address from the standard numbers-and-dots notation
+ * into binary data.
+ * returns nonzero if the address is valid, zero if not.
+ */
+int rtinet_aton(const char *cp, unsigned int *addr)
+{
+ unsigned int val;
+ int base, n;
+ char c;
+ unsigned int parts[4];
+ unsigned int *pp = parts;
+
+ for (;;)
+ {
+ /*
+ * Collect number up to ``.''.
+ * Values are specified as for C:
+ * 0x=hex, 0=octal, other=decimal.
+ */
+ val = 0;
+ base = 10;
+ if (*cp == '0')
+ {
+ if (*++cp == 'x' || *cp == 'X')
+ base = 16, cp++;
+ else
+ base = 8;
+ }
+ while ((c = *cp) != '\0')
+ {
+ if (isdigit((unsigned char) c))
+ {
+ val = (val * base) + (c - '0');
+ cp++;
+ continue;
+ }
+ if (base == 16 && isxdigit((unsigned char) c))
+ {
+ val = (val << 4) +
+ (c + 10 - (islower((unsigned char) c) ? 'a' : 'A'));
+ cp++;
+ continue;
+ }
+ break;
+ }
+ if (*cp == '.')
+ {
+ /*
+ * Internet format: a.b.c.d a.b.c (with c treated as 16-bits)
+ * a.b (with b treated as 24 bits)
+ */
+ if (pp >= parts + 3 || val > 0xff)
+ return 0;
+ *pp++ = val, cp++;
+ }
+ else
+ break;
+ }
+
+ /*
+ * Check for trailing junk.
+ */
+ while (*cp)
+ if (!isspace((unsigned char) *cp++))
+ return 0;
+
+ /*
+ * Concoct the address according to the number of parts specified.
+ */
+ n = pp - parts + 1;
+ switch (n)
+ {
+
+ case 1: /* a -- 32 bits */
+ break;
+
+ case 2: /* a.b -- 8.24 bits */
+ if (val > 0xffffff)
+ return 0;
+ val |= parts[0] << 24;
+ break;
+
+ case 3: /* a.b.c -- 8.8.16 bits */
+ if (val > 0xffff)
+ return 0;
+ val |= (parts[0] << 24) | (parts[1] << 16);
+ break;
+
+ case 4: /* a.b.c.d -- 8.8.8.8 bits */
+ if (val > 0xff)
+ return 0;
+ val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
+ break;
+ }
+
+ *addr = htonl(val);
+ return 1;
+
+}
+
+/*
========================================================================
Routine Description:
@@ -834,7 +936,7 @@ NDIS_STATUS RTMPReadParametersHook(
srcf = filp_open(src, O_RDONLY, 0);
if (IS_ERR(srcf))
{
- DBGPRINT(RT_DEBUG_TRACE, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src));
+ DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src));
}
else
{
@@ -952,41 +1054,17 @@ NDIS_STATUS RTMPReadParametersHook(
//WirelessMode
if(RTMPGetKeyParameter("WirelessMode", tmpbuf, 10, buffer))
{
- int value = 0;
-
+ int value = 0, maxPhyMode = PHY_11G;
+
+#ifdef DOT11_N_SUPPORT
+ maxPhyMode = PHY_11N_5G;
+#endif // DOT11_N_SUPPORT //
+
value = simple_strtol(tmpbuf, 0, 10);
- if (value <= PHY_11N_5G)
+ if (value <= maxPhyMode)
{
pAd->CommonCfg.PhyMode = value;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- switch (pAd->CommonCfg.PhyMode)
- {
- case PHY_11A:
- pAd->StaCfg.AdhocMode = ADHOC_11A;
- break;
- case PHY_11B:
- pAd->StaCfg.AdhocMode = ADHOC_11B;
- break;
- case PHY_11G:
- pAd->StaCfg.AdhocMode = ADHOC_11G;
- break;
- case PHY_11BG_MIXED:
- case PHY_11BGN_MIXED:
- pAd->StaCfg.AdhocMode = ADHOC_11BG_MIXED;
- break;
- case PHY_11ABG_MIXED:
- case PHY_11ABGN_MIXED:
- pAd->StaCfg.AdhocMode = ADHOC_11ABG_MIXED;
- break;
- default:
- pAd->StaCfg.AdhocMode = ADHOC_11B;
- break;
- }
- }
-#endif // CONFIG_STA_SUPPORT //
}
DBGPRINT(RT_DEBUG_TRACE, ("PhyMode=%d\n", pAd->CommonCfg.PhyMode));
}
@@ -1237,25 +1315,25 @@ NDIS_STATUS RTMPReadParametersHook(
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if ((strcmp(tmpbuf, "WEPAUTO") == 0) || (strcmp(tmpbuf, "wepauto") == 0))
- pAd->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch;
- else if ((strcmp(tmpbuf, "SHARED") == 0) || (strcmp(tmpbuf, "shared") == 0))
- pAd->StaCfg.AuthMode = Ndis802_11AuthModeShared;
- else if ((strcmp(tmpbuf, "WPAPSK") == 0) || (strcmp(tmpbuf, "wpapsk") == 0))
- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK;
- else if ((strcmp(tmpbuf, "WPANONE") == 0) || (strcmp(tmpbuf, "wpanone") == 0))
- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPANone;
- else if ((strcmp(tmpbuf, "WPA2PSK") == 0) || (strcmp(tmpbuf, "wpa2psk") == 0))
- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK;
-#ifdef WPA_SUPPLICANT_SUPPORT
+ pAd->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch;
+ else if ((strcmp(tmpbuf, "SHARED") == 0) || (strcmp(tmpbuf, "shared") == 0))
+ pAd->StaCfg.AuthMode = Ndis802_11AuthModeShared;
+ else if ((strcmp(tmpbuf, "WPAPSK") == 0) || (strcmp(tmpbuf, "wpapsk") == 0))
+ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPAPSK;
+ else if ((strcmp(tmpbuf, "WPANONE") == 0) || (strcmp(tmpbuf, "wpanone") == 0))
+ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPANone;
+ else if ((strcmp(tmpbuf, "WPA2PSK") == 0) || (strcmp(tmpbuf, "wpa2psk") == 0))
+ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK;
+#ifdef WPA_SUPPLICANT_SUPPORT
else if ((strcmp(tmpbuf, "WPA") == 0) || (strcmp(tmpbuf, "wpa") == 0))
- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA;
- else if ((strcmp(tmpbuf, "WPA2") == 0) || (strcmp(tmpbuf, "wpa2") == 0))
- pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2;
-#endif // WPA_SUPPLICANT_SUPPORT //
- else
- pAd->StaCfg.AuthMode = Ndis802_11AuthModeOpen;
+ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA;
+ else if ((strcmp(tmpbuf, "WPA2") == 0) || (strcmp(tmpbuf, "wpa2") == 0))
+ pAd->StaCfg.AuthMode = Ndis802_11AuthModeWPA2;
+#endif // WPA_SUPPLICANT_SUPPORT //
+ else
+ pAd->StaCfg.AuthMode = Ndis802_11AuthModeOpen;
- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
+ pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __FUNCTION__, pAd->StaCfg.WepStatus));
}
@@ -1294,12 +1372,15 @@ NDIS_STATUS RTMPReadParametersHook(
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if(RTMPGetCriticalParameter("WPAPSK", tmpbuf, 512, buffer))
- { int err=0;
+ {
+ int err=0;
+
tmpbuf[strlen(tmpbuf)] = '\0'; // make STA can process .$^& for WPAPSK input
if ((pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) &&
(pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) &&
- (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) )
+ (pAd->StaCfg.AuthMode != Ndis802_11AuthModeWPANone)
+ )
{
err = 1;
}
@@ -1332,18 +1413,37 @@ NDIS_STATUS RTMPReadParametersHook(
{
pAd->StaCfg.WpaState = SS_NOTUSE;
}
+
DBGPRINT(RT_DEBUG_TRACE, ("%s::(WPAPSK=%s)\n", __FUNCTION__, tmpbuf));
}
}
}
#endif // CONFIG_STA_SUPPORT //
-
//DefaultKeyID, KeyType, KeyStr
- rtmp_read_key_parms_from_file(pAd, tmpbuf, buffer);
+ rtmp_read_key_parms_from_file(pAd, tmpbuf, buffer);
+#ifdef DOT11_N_SUPPORT
HTParametersHook(pAd, tmpbuf, buffer);
+#endif // DOT11_N_SUPPORT //
+
+
+#ifdef CARRIER_DETECTION_SUPPORT
+ //CarrierDetect
+ if(RTMPGetKeyParameter("CarrierDetect", tmpbuf, 128, buffer))
+ {
+ if ((strncmp(tmpbuf, "0", 1) == 0))
+ pAd->CommonCfg.CarrierDetect.Enable = FALSE;
+ else if ((strncmp(tmpbuf, "1", 1) == 0))
+ pAd->CommonCfg.CarrierDetect.Enable = TRUE;
+ else
+ pAd->CommonCfg.CarrierDetect.Enable = FALSE;
+ DBGPRINT(RT_DEBUG_TRACE, ("CarrierDetect.Enable=%d\n", pAd->CommonCfg.CarrierDetect.Enable));
+ }
+ else
+ pAd->CommonCfg.CarrierDetect.Enable = FALSE;
+#endif // CARRIER_DETECTION_SUPPORT //
#ifdef CONFIG_STA_SUPPORT
IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
@@ -1460,6 +1560,7 @@ NDIS_STATUS RTMPReadParametersHook(
return (NDIS_STATUS_SUCCESS);
}
+#ifdef DOT11_N_SUPPORT
static void HTParametersHook(
IN PRTMP_ADAPTER pAd,
IN CHAR *pValueStr,
@@ -1567,7 +1668,7 @@ static void HTParametersHook(
}
else
{
- pAd->HTCEnable = TRUE;
+ pAd->HTCEnable = TRUE;
}
DBGPRINT(RT_DEBUG_TRACE, ("HT: Tx +HTC frame = %s\n", (Value==0) ? "Disable" : "Enable"));
}
@@ -1643,8 +1744,6 @@ static void HTParametersHook(
{
Value = simple_strtol(pValueStr, 0, 10);
- // Intel IOT
- Value = 64;
if (Value >=1 && Value <= 64)
{
pAd->CommonCfg.REGBACapability.field.RxBAWinLimit = Value;
@@ -1751,6 +1850,10 @@ static void HTParametersHook(
pAd->CommonCfg.RegTransmitSetting.field.BW = BW_20;
}
+#ifdef MCAST_RATE_SPECIFIC
+ pAd->CommonCfg.MCastPhyMode.field.BW = pAd->CommonCfg.RegTransmitSetting.field.BW;
+#endif // MCAST_RATE_SPECIFIC //
+
DBGPRINT(RT_DEBUG_TRACE, ("HT: Channel Width = %s\n", (Value==BW_40) ? "40 MHz" : "20 MHz" ));
}
@@ -1869,4 +1972,5 @@ static void HTParametersHook(
}
}
+#endif // DOT11_N_SUPPORT //
diff --git a/rt2860-1.7.0.0/os/linux/sta_ioctl.c b/rt2860-source-1.8.0.0/os/linux/sta_ioctl.c
similarity index 96%
copy from rt2860-1.7.0.0/os/linux/sta_ioctl.c
copy to rt2860-source-1.8.0.0/os/linux/sta_ioctl.c
index bd442c3..5f555e7 100644
--- a/rt2860-1.7.0.0/os/linux/sta_ioctl.c
+++ b/rt2860-source-1.8.0.0/os/linux/sta_ioctl.c
@@ -49,6 +49,16 @@ extern ULONG RTDebugLevel;
#define GROUP_KEY_NO 4
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+#define IWE_STREAM_ADD_EVENT(_A, _B, _C, _D, _E) iwe_stream_add_event(_A, _B, _C, _D, _E)
+#define IWE_STREAM_ADD_POINT(_A, _B, _C, _D, _E) iwe_stream_add_point(_A, _B, _C, _D, _E)
+#define IWE_STREAM_ADD_VALUE(_A, _B, _C, _D, _E, _F) iwe_stream_add_value(_A, _B, _C, _D, _E, _F)
+#else
+#define IWE_STREAM_ADD_EVENT(_A, _B, _C, _D, _E) iwe_stream_add_event(_B, _C, _D, _E)
+#define IWE_STREAM_ADD_POINT(_A, _B, _C, _D, _E) iwe_stream_add_point(_B, _C, _D, _E)
+#define IWE_STREAM_ADD_VALUE(_A, _B, _C, _D, _E, _F) iwe_stream_add_value(_B, _C, _D, _E, _F)
+#endif
+
extern UCHAR CipherWpa2Template[];
extern UCHAR CipherWpaPskTkip[];
extern UCHAR CipherWpaPskTkipLen;
@@ -184,6 +194,7 @@ VOID RTMPIoctlE2PROM(
IN struct iwreq *wrq);
#endif // DBG //
+
NDIS_STATUS RTMPWPANoneAddKeyProc(
IN PRTMP_ADAPTER pAd,
IN PVOID pBuf);
@@ -192,9 +203,11 @@ INT Set_FragTest_Proc(
IN PRTMP_ADAPTER pAdapter,
IN PUCHAR arg);
+#ifdef DOT11_N_SUPPORT
INT Set_TGnWifiTest_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg);
+#endif // DOT11_N_SUPPORT //
INT Set_LongRetryLimit_Proc(
IN PRTMP_ADAPTER pAdapter,
@@ -210,6 +223,12 @@ INT Set_Ieee80211dClientMode_Proc(
IN PUCHAR arg);
#endif // EXT_BUILD_CHANNEL_LIST //
+#ifdef CARRIER_DETECTION_SUPPORT
+INT Set_CarrierDetect_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR arg);
+#endif // CARRIER_DETECTION_SUPPORT //
+
static struct {
CHAR *name;
INT (*set_proc)(PRTMP_ADAPTER pAdapter, PUCHAR arg);
@@ -226,6 +245,7 @@ static struct {
{"BGProtection", Set_BGProtection_Proc},
{"RTSThreshold", Set_RTSThreshold_Proc},
{"FragThreshold", Set_FragThreshold_Proc},
+#ifdef DOT11_N_SUPPORT
{"HtBw", Set_HtBw_Proc},
{"HtMcs", Set_HtMcs_Proc},
{"HtGi", Set_HtGi_Proc},
@@ -239,6 +259,7 @@ static struct {
{"HtBaDecline", Set_BADecline_Proc},
{"HtProtect", Set_HtProtect_Proc},
{"HtMimoPs", Set_HtMimoPs_Proc},
+#endif // DOT11_N_SUPPORT //
#ifdef AGGREGATION_SUPPORT
{"PktAggregate", Set_PktAggregate_Proc},
@@ -301,12 +322,16 @@ static struct {
{"WpaSupport", Set_Wpa_Support},
#endif // WPA_SUPPLICANT_SUPPORT //
+
+
{"FixedTxMode", Set_FixedTxMode_Proc},
#ifdef CONFIG_APSTA_MIXED_SUPPORT
{"OpMode", Set_OpMode_Proc},
#endif // CONFIG_APSTA_MIXED_SUPPORT //
+#ifdef DOT11_N_SUPPORT
{"TGnWifiTest", Set_TGnWifiTest_Proc},
{"ForceGF", Set_ForceGF_Proc},
+#endif // DOT11_N_SUPPORT //
#ifdef QOS_DLS_SUPPORT
{"DlsAddEntry", Set_DlsAddEntry_Proc},
{"DlsTearDownEntry", Set_DlsTearDownEntry_Proc},
@@ -316,6 +341,10 @@ static struct {
#ifdef EXT_BUILD_CHANNEL_LIST
{"11dClientMode", Set_Ieee80211dClientMode_Proc},
#endif // EXT_BUILD_CHANNEL_LIST //
+#ifdef CARRIER_DETECTION_SUPPORT
+ {"CarrierDetect", Set_CarrierDetect_Proc},
+#endif // CARRIER_DETECTION_SUPPORT //
+
{NULL,}
};
@@ -522,8 +551,9 @@ VOID RTMPAddKey(
}
}
end:
- DBGPRINT(RT_DEBUG_INFO, ("<------ RTMPAddKey\n"));
+ return;
}
+
char * rtstrchr(const char * s, int c)
{
for(; *s != (char) c; ++s)
@@ -587,7 +617,7 @@ int rt_ioctl_giwfreq(struct net_device *dev,
struct iw_freq *freq, char *extra)
{
VIRTUAL_ADAPTER *pVirtualAd = NULL;
- PRTMP_ADAPTER pAdapter;
+ PRTMP_ADAPTER pAdapter = NULL;
UCHAR ch;
ULONG m;
@@ -598,7 +628,8 @@ int rt_ioctl_giwfreq(struct net_device *dev,
else
{
pVirtualAd = dev->priv;
- pAdapter = pVirtualAd->RtmpDev->priv;
+ if (pVirtualAd && pVirtualAd->RtmpDev)
+ pAdapter = pVirtualAd->RtmpDev->priv;
}
if (pAdapter == NULL)
@@ -608,7 +639,7 @@ int rt_ioctl_giwfreq(struct net_device *dev,
return -ENETDOWN;
}
- ch = pAdapter->CommonCfg.Channel;
+ ch = pAdapter->CommonCfg.Channel;
DBGPRINT(RT_DEBUG_TRACE,("==>rt_ioctl_giwfreq %d\n", ch));
@@ -659,7 +690,26 @@ int rt_ioctl_giwmode(struct net_device *dev,
struct iw_request_info *info,
__u32 *mode, char *extra)
{
- PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ PRTMP_ADAPTER pAdapter = NULL;
+ VIRTUAL_ADAPTER *pVirtualAd = NULL;
+
+ if (dev->priv_flags == INT_MAIN)
+ {
+ pAdapter = dev->priv;
+ }
+ else
+ {
+ pVirtualAd = dev->priv;
+ if (pVirtualAd && pVirtualAd->RtmpDev)
+ pAdapter = pVirtualAd->RtmpDev->priv;
+ }
+
+ if (pAdapter == NULL)
+ {
+ /* if 1st open fail, pAd will be free;
+ So the net_dev->priv will be NULL in 2rd open */
+ return -ENETDOWN;
+ }
if (ADHOC_ON(pAdapter))
*mode = IW_MODE_ADHOC;
@@ -705,11 +755,29 @@ int rt_ioctl_giwrange(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
{
- PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
-
+ PRTMP_ADAPTER pAdapter = NULL;
+ VIRTUAL_ADAPTER *pVirtualAd = NULL;
struct iw_range *range = (struct iw_range *) extra;
u16 val;
- int i;
+ int i;
+
+ if (dev->priv_flags == INT_MAIN)
+ {
+ pAdapter = dev->priv;
+ }
+ else
+ {
+ pVirtualAd = dev->priv;
+ if (pVirtualAd && pVirtualAd->RtmpDev)
+ pAdapter = pVirtualAd->RtmpDev->priv;
+ }
+
+ if (pAdapter == NULL)
+ {
+ /* if 1st open fail, pAd will be free;
+ So the net_dev->priv will be NULL in 2rd open */
+ return -ENETDOWN;
+ }
DBGPRINT(RT_DEBUG_TRACE ,("===>rt_ioctl_giwrange\n"));
data->length = sizeof(struct iw_range);
@@ -829,7 +897,26 @@ int rt_ioctl_giwap(struct net_device *dev,
struct iw_request_info *info,
struct sockaddr *ap_addr, char *extra)
{
- PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ PRTMP_ADAPTER pAdapter = NULL;
+ VIRTUAL_ADAPTER *pVirtualAd = NULL;
+
+ if (dev->priv_flags == INT_MAIN)
+ {
+ pAdapter = dev->priv;
+ }
+ else
+ {
+ pVirtualAd = dev->priv;
+ if (pVirtualAd && pVirtualAd->RtmpDev)
+ pAdapter = pVirtualAd->RtmpDev->priv;
+ }
+
+ if (pAdapter == NULL)
+ {
+ /* if 1st open fail, pAd will be free;
+ So the net_dev->priv will be NULL in 2rd open */
+ return -ENETDOWN;
+ }
if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter))
{
@@ -838,7 +925,7 @@ int rt_ioctl_giwap(struct net_device *dev,
}
#ifdef WPA_SUPPLICANT_SUPPORT
// Add for RT2870
- else if (pAdapter->StaCfg.WpaSupplicantUP != 0)
+ else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
{
ap_addr->sa_family = ARPHRD_ETHER;
memcpy(ap_addr->sa_data, &pAdapter->MlmeAux.Bssid, ETH_ALEN);
@@ -951,8 +1038,9 @@ int rt_ioctl_siwscan(struct net_device *dev,
return -EINVAL;
}
+
#ifdef WPA_SUPPLICANT_SUPPORT
- if (pAdapter->StaCfg.WpaSupplicantUP == 1)
+ if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE)
{
pAdapter->StaCfg.WpaSupplicantScanCount++;
}
@@ -965,7 +1053,7 @@ int rt_ioctl_siwscan(struct net_device *dev,
Now = jiffies;
#ifdef WPA_SUPPLICANT_SUPPORT
- if ((pAdapter->StaCfg.WpaSupplicantUP == 1) &&
+ if ((pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) &&
(pAdapter->StaCfg.WpaSupplicantScanCount > 3))
{
DBGPRINT(RT_DEBUG_TRACE, ("!!! WpaSupplicantScanCount > 3\n"));
@@ -1032,8 +1120,9 @@ int rt_ioctl_giwscan(struct net_device *dev,
return -EAGAIN;
}
+
#ifdef WPA_SUPPLICANT_SUPPORT
- if (pAdapter->StaCfg.WpaSupplicantUP == 1)
+ if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE)
{
pAdapter->StaCfg.WpaSupplicantScanCount = 0;
}
@@ -1070,10 +1159,10 @@ int rt_ioctl_giwscan(struct net_device *dev,
memset(&iwe, 0, sizeof(iwe));
iwe.cmd = SIOCGIWAP;
iwe.u.ap_addr.sa_family = ARPHRD_ETHER;
- memcpy(iwe.u.ap_addr.sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, ETH_ALEN);
+ memcpy(iwe.u.ap_addr.sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, ETH_ALEN);
previous_ev = current_ev;
- current_ev = iwe_stream_add_event(current_ev,end_buf, &iwe, IW_EV_ADDR_LEN);
+ current_ev = IWE_STREAM_ADD_EVENT(info, current_ev,end_buf, &iwe, IW_EV_ADDR_LEN);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1089,7 +1178,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.u.data.flags = 1;
previous_ev = current_ev;
- current_ev = iwe_stream_add_point(current_ev,end_buf, &iwe, pAdapter->ScanTab.BssEntry[i].Ssid);
+ current_ev = IWE_STREAM_ADD_POINT(info, current_ev,end_buf, &iwe, pAdapter->ScanTab.BssEntry[i].Ssid);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1116,7 +1205,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.len = IW_EV_UINT_LEN;
previous_ev = current_ev;
- current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, IW_EV_UINT_LEN);
+ current_ev = IWE_STREAM_ADD_EVENT(info, current_ev, end_buf, &iwe, IW_EV_UINT_LEN);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1136,7 +1225,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.u.freq.i = 0;
previous_ev = current_ev;
- current_ev = iwe_stream_add_event(current_ev,end_buf, &iwe, IW_EV_FREQ_LEN);
+ current_ev = IWE_STREAM_ADD_EVENT(info, current_ev,end_buf, &iwe, IW_EV_FREQ_LEN);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1151,7 +1240,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.u.qual.level = 0;
iwe.u.qual.noise = 0;
set_quality(pAdapter, &iwe.u.qual, pAdapter->ScanTab.BssEntry[i].Rssi);
- current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe, IW_EV_QUAL_LEN);
+ current_ev = IWE_STREAM_ADD_EVENT(info, current_ev, end_buf, &iwe, IW_EV_QUAL_LEN);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1169,7 +1258,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.u.data.flags = IW_ENCODE_DISABLED;
previous_ev = current_ev;
- current_ev = iwe_stream_add_point(current_ev, end_buf,&iwe, (char *)pAdapter->SharedKey[BSS0][(iwe.u.data.flags & IW_ENCODE_INDEX)-1].Key);
+ current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf,&iwe, (char *)pAdapter->SharedKey[BSS0][(iwe.u.data.flags & IW_ENCODE_INDEX)-1].Key);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1197,7 +1286,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.u.bitrate.value = (tmpRate/2) * 1000000;
iwe.u.bitrate.disabled = 0;
- current_val = iwe_stream_add_value(current_ev,
+ current_val = IWE_STREAM_ADD_VALUE(info, current_ev,
current_val, end_buf, &iwe,
IW_EV_PARAM_LEN);
@@ -1221,7 +1310,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
pAdapter->ScanTab.BssEntry[i].WpaIE.IELen);
iwe.cmd = IWEVGENIE;
iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].WpaIE.IELen;
- current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, custom);
+ current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1239,7 +1328,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
pAdapter->ScanTab.BssEntry[i].RsnIE.IELen);
iwe.cmd = IWEVGENIE;
iwe.u.data.length = pAdapter->ScanTab.BssEntry[i].RsnIE.IELen;
- current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, custom);
+ current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1260,7 +1349,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
for (idx = 0; idx < pAdapter->ScanTab.BssEntry[i].WpaIE.IELen; idx++)
sprintf(custom, "%s%02x", custom, pAdapter->ScanTab.BssEntry[i].WpaIE.IE[idx]);
previous_ev = current_ev;
- current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, custom);
+ current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1280,7 +1369,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
for (idx = 0; idx < pAdapter->ScanTab.BssEntry[i].RsnIE.IELen; idx++)
sprintf(custom, "%s%02x", custom, pAdapter->ScanTab.BssEntry[i].RsnIE.IE[idx]);
previous_ev = current_ev;
- current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, custom);
+ current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1343,7 +1432,26 @@ int rt_ioctl_giwessid(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *essid)
{
- PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ PRTMP_ADAPTER pAdapter = NULL;
+ VIRTUAL_ADAPTER *pVirtualAd = NULL;
+
+ if (dev->priv_flags == INT_MAIN)
+ {
+ pAdapter = dev->priv;
+ }
+ else
+ {
+ pVirtualAd = dev->priv;
+ if (pVirtualAd && pVirtualAd->RtmpDev)
+ pAdapter = pVirtualAd->RtmpDev->priv;
+ }
+
+ if (pAdapter == NULL)
+ {
+ /* if 1st open fail, pAd will be free;
+ So the net_dev->priv will be NULL in 2rd open */
+ return -ENETDOWN;
+ }
data->flags = 1;
if (MONITOR_ON(pAdapter))
@@ -1395,7 +1503,26 @@ int rt_ioctl_giwnickn(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *nickname)
{
- PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ PRTMP_ADAPTER pAdapter = NULL;
+ VIRTUAL_ADAPTER *pVirtualAd = NULL;
+
+ if (dev->priv_flags == INT_MAIN)
+ {
+ pAdapter = dev->priv;
+ }
+ else
+ {
+ pVirtualAd = dev->priv;
+ if (pVirtualAd && pVirtualAd->RtmpDev)
+ pAdapter = pVirtualAd->RtmpDev->priv;
+ }
+
+ if (pAdapter == NULL)
+ {
+ /* if 1st open fail, pAd will be free;
+ So the net_dev->priv will be NULL in 2rd open */
+ return -ENETDOWN;
+ }
if (data->length > strlen(pAdapter->nickname) + 1)
data->length = strlen(pAdapter->nickname) + 1;
@@ -1439,15 +1566,34 @@ int rt_ioctl_giwrts(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rts, char *extra)
{
- PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ PRTMP_ADAPTER pAdapter = NULL;
+ VIRTUAL_ADAPTER *pVirtualAd = NULL;
- //check if the interface is down
- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
+ if (dev->priv_flags == INT_MAIN)
{
- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n"));
- return -ENETDOWN;
+ pAdapter = dev->priv;
+ }
+ else
+ {
+ pVirtualAd = dev->priv;
+ if (pVirtualAd && pVirtualAd->RtmpDev)
+ pAdapter = pVirtualAd->RtmpDev->priv;
}
+ if (pAdapter == NULL)
+ {
+ /* if 1st open fail, pAd will be free;
+ So the net_dev->priv will be NULL in 2rd open */
+ return -ENETDOWN;
+ }
+
+ //check if the interface is down
+ if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n"));
+ return -ENETDOWN;
+ }
+
rts->value = pAdapter->CommonCfg.RtsThreshold;
rts->disabled = (rts->value == MAX_RTS_THRESHOLD);
rts->fixed = 1;
@@ -1486,14 +1632,33 @@ int rt_ioctl_giwfrag(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *frag, char *extra)
{
- PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
+ PRTMP_ADAPTER pAdapter = NULL;
+ VIRTUAL_ADAPTER *pVirtualAd = NULL;
+
+ if (dev->priv_flags == INT_MAIN)
+ {
+ pAdapter = dev->priv;
+ }
+ else
+ {
+ pVirtualAd = dev->priv;
+ if (pVirtualAd && pVirtualAd->RtmpDev)
+ pAdapter = pVirtualAd->RtmpDev->priv;
+ }
- //check if the interface is down
- if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
+ if (pAdapter == NULL)
{
- DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n"));
- return -ENETDOWN;
+ /* if 1st open fail, pAd will be free;
+ So the net_dev->priv will be NULL in 2rd open */
+ return -ENETDOWN;
}
+
+ //check if the interface is down
+ if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n"));
+ return -ENETDOWN;
+ }
frag->value = pAdapter->CommonCfg.FragmentThreshold;
frag->disabled = (frag->value == MAX_FRAG_THRESHOLD);
@@ -1609,8 +1774,27 @@ rt_ioctl_giwencode(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *key)
{
- PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
int kid;
+ PRTMP_ADAPTER pAdapter = NULL;
+ VIRTUAL_ADAPTER *pVirtualAd = NULL;
+
+ if (dev->priv_flags == INT_MAIN)
+ {
+ pAdapter = dev->priv;
+ }
+ else
+ {
+ pVirtualAd = dev->priv;
+ if (pVirtualAd && pVirtualAd->RtmpDev)
+ pAdapter = pVirtualAd->RtmpDev->priv;
+ }
+
+ if (pAdapter == NULL)
+ {
+ /* if 1st open fail, pAd will be free;
+ So the net_dev->priv will be NULL in 2rd open */
+ return -ENETDOWN;
+ }
//check if the interface is down
if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
@@ -1738,6 +1922,7 @@ rt_ioctl_setparam(struct net_device *dev, struct iw_request_info *info,
return Status;
}
+
static int
rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info,
struct iw_point *wrq, char *extra)
@@ -1802,12 +1987,14 @@ rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info,
sprintf(extra+strlen(extra), "WpaSupplicantUP = %d\n\n", pAd->StaCfg.WpaSupplicantUP);
#endif // WPA_SUPPLICANT_SUPPORT //
+
wrq->length = strlen(extra) + 1; // 1: size of '\0'
DBGPRINT(RT_DEBUG_TRACE, ("<== rt_private_get_statistics, wrq->length = %d\n", wrq->length));
return Status;
}
+#ifdef DOT11_N_SUPPORT
void getBaInfo(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pOutBuf)
@@ -1855,9 +2042,7 @@ void getBaInfo(
return;
}
-
-
-
+#endif // DOT11_N_SUPPORT //
static int
rt_private_show(struct net_device *dev, struct iw_request_info *info,
@@ -1903,10 +2088,12 @@ rt_private_show(struct net_device *dev, struct iw_request_info *info,
case SHOW_CONN_STATUS:
if (MONITOR_ON(pAd))
{
+#ifdef DOT11_N_SUPPORT
if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED &&
pAd->CommonCfg.RegTransmitSetting.field.BW)
sprintf(extra, "Monitor Mode(CentralChannel %d)\n", pAd->CommonCfg.CentralChannel);
else
+#endif // DOT11_N_SUPPORT //
sprintf(extra, "Monitor Mode(Channel %d)\n", pAd->CommonCfg.Channel);
}
else
@@ -1940,18 +2127,18 @@ rt_private_show(struct net_device *dev, struct iw_request_info *info,
sprintf(extra, "Driver version-%s, %s %s\n", STA_DRIVER_VERSION, __DATE__, __TIME__ );
wrq->length = strlen(extra) + 1; // 1: size of '\0'
break;
+#ifdef DOT11_N_SUPPORT
case SHOW_BA_INFO:
getBaInfo(pAd, extra);
wrq->length = strlen(extra) + 1; // 1: size of '\0'
break;
+#endif // DOT11_N_SUPPORT //
case SHOW_DESC_INFO:
{
Show_DescInfo_Proc(pAd, NULL);
wrq->length = 0; // 1: size of '\0'
}
break;
-
-
case RAIO_OFF:
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
{
@@ -1995,6 +2182,7 @@ rt_private_show(struct net_device *dev, struct iw_request_info *info,
wrq->length = strlen(extra) + 1; // 1: size of '\0'
break;
+
#ifdef QOS_DLS_SUPPORT
case SHOW_DLS_ENTRY_INFO:
{
@@ -2179,7 +2367,9 @@ int rt_ioctl_siwauth(struct net_device *dev,
#endif // WPA_SUPPLICANT_SUPPORT //
}
else if (param->value == 0)
+ {
STA_PORT_SECURED(pAdapter);
+ }
DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_KEY_MGMT - param->value = %d!\n", __FUNCTION__, param->value));
break;
case IW_AUTH_RX_UNENCRYPTED_EAPOL:
@@ -2191,7 +2381,9 @@ int rt_ioctl_siwauth(struct net_device *dev,
if (param->value != 0)
pAdapter->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
else
+ {
STA_PORT_SECURED(pAdapter);
+ }
DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_AUTH_WPA_VERSION - param->value = %d!\n", __FUNCTION__, param->value));
break;
case IW_AUTH_80211_AUTH_ALG:
@@ -2361,7 +2553,9 @@ int rt_ioctl_siwencodeext(struct net_device *dev,
{
fnSetCipherKey(pAdapter, keyIdx, CIPHER_TKIP, FALSE, ext);
if (pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA2)
+ {
STA_PORT_SECURED(pAdapter);
+ }
}
else if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)
{
@@ -2522,7 +2716,7 @@ int rt_ioctl_giwgenie(struct net_device *dev,
#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
#ifdef SIOCSIWGENIE
- if (pAd->StaCfg.WpaSupplicantUP == 1)
+ if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE)
{
if (wrqu->data.length < pAd->StaCfg.RSNIE_Len)
return -E2BIG;
@@ -2642,7 +2836,6 @@ rt_private_ioctl_bbp(struct net_device *dev, struct iw_request_info *info,
INT Status = 0;
PRTMP_ADAPTER pAdapter = (PRTMP_ADAPTER) dev->priv;
- DBGPRINT(RT_DEBUG_INFO, ("==>rt_private_ioctl_bbp\n"));
memset(extra, 0x00, IW_PRIV_SIZE_MASK);
@@ -2693,11 +2886,9 @@ rt_private_ioctl_bbp(struct net_device *dev, struct iw_request_info *info,
}
}
else
- { //Write
- DBGPRINT(RT_DEBUG_INFO, ("this_char=%s, value=%s\n", this_char, value));
+ { //Write
if ((sscanf(this_char, "%d", &(bbpId)) == 1) && (sscanf(value, "%x", &(bbpValue)) == 1))
- {
- DBGPRINT(RT_DEBUG_INFO, ("bbpID=%02d, value=0x%x\n", bbpId, bbpValue));
+ {
if (bbpId <= 136)
{
#ifdef RALINK_ATE
@@ -2786,27 +2977,31 @@ int rt_ioctl_siwrate(struct net_device *dev,
*/
if (rate == -1)
{
- //Auto Rate
- pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
+ //Auto Rate
+ pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
pAd->StaCfg.bAutoTxRateSwitch = TRUE;
- if ((pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) ||
- (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE < MODE_HTMIX))
- RTMPSetDesiredRates(pAd, -1);
- if (pAd->StaCfg.BssType == BSS_INFRA)
- SetCommonHT(pAd);
+ if ((pAd->CommonCfg.PhyMode <= PHY_11G) ||
+ (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM))
+ RTMPSetDesiredRates(pAd, -1);
+
+#ifdef DOT11_N_SUPPORT
+ SetCommonHT(pAd);
+#endif // DOT11_N_SUPPORT //
}
else
{
if (fixed)
{
pAd->StaCfg.bAutoTxRateSwitch = FALSE;
- if ((pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) ||
- (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE < MODE_HTMIX))
+ if ((pAd->CommonCfg.PhyMode <= PHY_11G) ||
+ (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM))
RTMPSetDesiredRates(pAd, rate);
else
{
pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
+#ifdef DOT11_N_SUPPORT
SetCommonHT(pAd);
+#endif // DOT11_N_SUPPORT //
}
DBGPRINT(RT_DEBUG_TRACE, ("rt_ioctl_siwrate::(HtMcs=%d)\n",pAd->StaCfg.DesiredTransmitSetting.field.MCS));
}
@@ -2827,18 +3022,17 @@ int rt_ioctl_giwrate(struct net_device *dev,
PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) dev->priv;
int rate_index = 0, rate_count = 0;
HTTRANSMIT_SETTING ht_setting;
-
__s32 ralinkrate[] =
{2, 4, 11, 22, // CCK
12, 18, 24, 36, 48, 72, 96, 108, // OFDM
- 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260,
- 39, 78, 117, 156, 234, 312, 351, 390,
- 27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540,
- 81, 162, 243, 324, 486, 648, 729, 810,
- 14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288,
- 43, 87, 130, 173, 260, 317, 390, 433,
- 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600,
- 90, 180, 270, 360, 540, 720, 810, 900};
+ 13, 26, 39, 52, 78, 104, 117, 130, 26, 52, 78, 104, 156, 208, 234, 260, // 20MHz, 800ns GI, MCS: 0 ~ 15
+ 39, 78, 117, 156, 234, 312, 351, 390, // 20MHz, 800ns GI, MCS: 16 ~ 23
+ 27, 54, 81, 108, 162, 216, 243, 270, 54, 108, 162, 216, 324, 432, 486, 540, // 40MHz, 800ns GI, MCS: 0 ~ 15
+ 81, 162, 243, 324, 486, 648, 729, 810, // 40MHz, 800ns GI, MCS: 16 ~ 23
+ 14, 29, 43, 57, 87, 115, 130, 144, 29, 59, 87, 115, 173, 230, 260, 288, // 20MHz, 400ns GI, MCS: 0 ~ 15
+ 43, 87, 130, 173, 260, 317, 390, 433, // 20MHz, 400ns GI, MCS: 16 ~ 23
+ 30, 60, 90, 120, 180, 240, 270, 300, 60, 120, 180, 240, 360, 480, 540, 600, // 40MHz, 400ns GI, MCS: 0 ~ 15
+ 90, 180, 270, 360, 540, 720, 810, 900}; // 40MHz, 400ns GI, MCS: 16 ~ 23
rate_count = sizeof(ralinkrate)/sizeof(__s32);
//check if the interface is down
@@ -2848,31 +3042,25 @@ int rt_ioctl_giwrate(struct net_device *dev,
return -ENETDOWN;
}
- if ((pAd->StaCfg.bAutoTxRateSwitch == FALSE)/*!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED)*/ &&
+ if ((pAd->StaCfg.bAutoTxRateSwitch == FALSE) &&
(INFRA_ON(pAd)) &&
- ((pAd->CommonCfg.PhyMode < PHY_11ABGN_MIXED) || (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE < MODE_HTMIX)))
+ ((pAd->CommonCfg.PhyMode <= PHY_11G) || (pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM)))
ht_setting.word = pAd->StaCfg.HTPhyMode.word;
else
ht_setting.word = pAd->MacTab.Content[BSSID_WCID].HTPhyMode.word;
-
+
+#ifdef DOT11_N_SUPPORT
if (ht_setting.field.MODE >= MODE_HTMIX)
{
rate_index = 12 + ((UCHAR)ht_setting.field.BW *24) + ((UCHAR)ht_setting.field.ShortGI *48) + ((UCHAR)ht_setting.field.MCS);
}
- else if (ht_setting.field.MODE == MODE_OFDM)
+ else
+#endif // DOT11_N_SUPPORT //
+ if (ht_setting.field.MODE == MODE_OFDM)
rate_index = (UCHAR)(ht_setting.field.MCS) + 4;
else if (ht_setting.field.MODE == MODE_CCK)
rate_index = (UCHAR)(ht_setting.field.MCS);
- if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) &&
- ADHOC_ON(pAd))
- {
- if (pAd->StaCfg.AdhocMode == ADHOC_11B)
- rate_index = 3;
- else
- rate_index = 11;
- }
-
if (rate_index < 0)
rate_index = 0;
@@ -2984,9 +3172,7 @@ static const iw_handler rt_priv_handlers[] = {
(iw_handler) rt_private_show, /* + 0x11 */
(iw_handler) NULL, /* + 0x12 */
(iw_handler) NULL, /* + 0x13 */
- (iw_handler) NULL, /* + 0x14 */
(iw_handler) NULL, /* + 0x15 */
- (iw_handler) NULL, /* + 0x16 */
(iw_handler) NULL, /* + 0x17 */
(iw_handler) NULL, /* + 0x18 */
};
@@ -3030,11 +3216,13 @@ INT RTMPSetInformation(
NDIS_802_11_NETWORK_TYPE NetType;
ULONG Now;
UINT KeyIdx = 0;
- INT Status = NDIS_STATUS_SUCCESS;
+ INT Status = NDIS_STATUS_SUCCESS, MaxPhyMode = PHY_11G;
ULONG PowerTemp;
BOOLEAN RadioState;
BOOLEAN StateMachineTouched = FALSE;
+#ifdef DOT11_N_SUPPORT
OID_SET_HT_PHYMODE HT_PhyMode; //11n ,kathy
+#endif // DOT11_N_SUPPORT //
#ifdef WPA_SUPPLICANT_SUPPORT
PNDIS_802_11_PMKID pPmkId = NULL;
BOOLEAN IEEE8021xState = FALSE;
@@ -3048,6 +3236,12 @@ INT RTMPSetInformation(
UCHAR ctmp;
#endif // SNMP_SUPPORT //
+
+#ifdef DOT11_N_SUPPORT
+ MaxPhyMode = PHY_11N_5G;
+#endif // DOT11_N_SUPPORT //
+
+
DBGPRINT(RT_DEBUG_TRACE, ("-->RTMPSetInformation(), 0x%08x\n", cmd&0x7FFF));
switch(cmd & 0x7FFF) {
case RT_OID_802_11_COUNTRY_REGION:
@@ -3066,7 +3260,9 @@ INT RTMPSetInformation(
pAdapter->CommonCfg.PhyMode = 0xff;
// Build all corresponding channel information
RTMPSetPhyMode(pAdapter, TmpPhy);
+#ifdef DOT11_N_SUPPORT
SetCommonHT(pAdapter);
+#endif // DOT11_N_SUPPORT //
DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_COUNTRY_REGION (A:%d B/G:%d)\n", pAdapter->CommonCfg.CountryRegionForABand,
pAdapter->CommonCfg.CountryRegion));
}
@@ -3088,6 +3284,10 @@ INT RTMPSetInformation(
break;
}
+ //Benson add 20080527, when radio off, sta don't need to scan
+ if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_RADIO_OFF))
+ break;
+
if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
{
DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is scanning now !!!\n"));
@@ -3117,6 +3317,7 @@ INT RTMPSetInformation(
break;
}
+
if (pAdapter->Mlme.CntlMachine.CurrState != CNTL_IDLE)
{
RT28XX_MLME_RESET_STATE_MACHINE(pAdapter);
@@ -3250,8 +3451,13 @@ INT RTMPSetInformation(
else
{
Status = copy_from_user(&PhyMode, wrq->u.data.pointer, wrq->u.data.length);
- RTMPSetPhyMode(pAdapter, PhyMode);
- SetCommonHT(pAdapter);
+ if (PhyMode <= MaxPhyMode)
+ {
+ RTMPSetPhyMode(pAdapter, PhyMode);
+#ifdef DOT11_N_SUPPORT
+ SetCommonHT(pAdapter);
+#endif // DOT11_N_SUPPORT //
+ }
DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_PHY_MODE (=%d)\n", PhyMode));
}
break;
@@ -3264,23 +3470,24 @@ INT RTMPSetInformation(
pAdapter->CommonCfg.bEnableTxBurst = StaConfig.EnableTxBurst;
pAdapter->CommonCfg.UseBGProtection = StaConfig.UseBGProtection;
pAdapter->CommonCfg.bUseShortSlotTime = 1; // 2003-10-30 always SHORT SLOT capable
- if (pAdapter->StaCfg.AdhocMode != StaConfig.AdhocMode)
+ if ((pAdapter->CommonCfg.PhyMode != StaConfig.AdhocMode) &&
+ (StaConfig.AdhocMode <= MaxPhyMode))
{
// allow dynamic change of "USE OFDM rate or not" in ADHOC mode
// if setting changed, need to reset current TX rate as well as BEACON frame format
- pAdapter->StaCfg.AdhocMode = StaConfig.AdhocMode;
if (pAdapter->StaCfg.BssType == BSS_ADHOC)
{
+ pAdapter->CommonCfg.PhyMode = StaConfig.AdhocMode;
+ RTMPSetPhyMode(pAdapter, PhyMode);
MlmeUpdateTxRates(pAdapter, FALSE, 0);
MakeIbssBeacon(pAdapter); // re-build BEACON frame
AsicEnableIbssSync(pAdapter); // copy to on-chip memory
}
}
- DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_SET_STA_CONFIG (Burst=%d, Protection=%ld,ShortSlot=%d, Adhoc=%ld\n",
+ DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_SET_STA_CONFIG (Burst=%d, Protection=%ld,ShortSlot=%d\n",
pAdapter->CommonCfg.bEnableTxBurst,
pAdapter->CommonCfg.UseBGProtection,
- pAdapter->CommonCfg.bUseShortSlotTime,
- pAdapter->StaCfg.AdhocMode));
+ pAdapter->CommonCfg.bUseShortSlotTime));
}
break;
case OID_802_11_DESIRED_RATES:
@@ -3518,9 +3725,10 @@ INT RTMPSetInformation(
RTMPSetPhyMode(pAdapter, PHY_11A);
else
Status = -EINVAL;
-
+#ifdef DOT11_N_SUPPORT
if (Status == NDIS_STATUS_SUCCESS)
SetCommonHT(pAdapter);
+#endif // DOT11_N_SUPPORT //
DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_NETWORK_TYPE_IN_USE (=%d)\n",NetType));
}
break;
@@ -3664,7 +3872,7 @@ INT RTMPSetInformation(
pAdapter->bConfigChanged = TRUE;
}
break;
-
+#ifdef DOT11_N_SUPPORT
case RT_OID_802_11_SET_HT_PHYMODE:
if (wrq->u.data.length != sizeof(OID_SET_HT_PHYMODE))
Status = -EINVAL;
@@ -3683,7 +3891,7 @@ INT RTMPSetInformation(
pAdapter->StaCfg.HTPhyMode.field.MCS, pAdapter->StaCfg.HTPhyMode.field.BW, pAdapter->StaCfg.HTPhyMode.field.ShortGI,
pAdapter->StaCfg.HTPhyMode.field.STBC));
break;
-
+#endif // DOT11_N_SUPPORT //
case RT_OID_802_11_SET_APSD_SETTING:
if (wrq->u.data.length != sizeof(ULONG))
Status = -EINVAL;
@@ -3829,6 +4037,7 @@ INT RTMPSetInformation(
}
break;
+#ifdef DOT11_N_SUPPORT
case RT_OID_802_11_SET_IMME_BA_CAP:
if (wrq->u.data.length != sizeof(OID_BACAP_STRUC))
Status = -EINVAL;
@@ -3880,7 +4089,6 @@ INT RTMPSetInformation(
pAdapter->CommonCfg.BACapability.field.RxBAWinLimit,pAdapter->CommonCfg.BACapability.field.TxBAWinLimit, pAdapter->CommonCfg.BACapability.field.AutoBA));
DBGPRINT(RT_DEBUG_TRACE, ("Set::(MimoPs = %d)(AmsduEnable = %d) (AmsduSize=%d)(MpduDensity=%d)\n",pAdapter->CommonCfg.DesiredHtPhy.MimoPs, pAdapter->CommonCfg.DesiredHtPhy.AmsduEnable,
pAdapter->CommonCfg.DesiredHtPhy.AmsduSize, pAdapter->CommonCfg.DesiredHtPhy.MpduDensity));
- DBGPRINT(RT_DEBUG_INFO, ("Set::RT_OID_802_11_SET_IMME_BA_CAP (=%d)\n", Orde.Policy));
}
break;
@@ -3952,7 +4160,7 @@ INT RTMPSetInformation(
Status = copy_from_user(pBA, wrq->u.data.pointer, wrq->u.data.length);
DBGPRINT(RT_DEBUG_TRACE, ("Set :: RT_OID_802_11_TEAR_IMME_BA(TID=%d, bAllTid=%d)\n", pBA->TID, pBA->bAllTid));
- if (!pBA->bAllTid && (pBA->TID > 15))
+ if (!pBA->bAllTid && (pBA->TID > NUM_OF_TID))
{
Status = NDIS_STATUS_INVALID_DATA;
break;
@@ -3984,6 +4192,7 @@ INT RTMPSetInformation(
}
}
break;
+#endif // DOT11_N_SUPPORT //
// For WPA_SUPPLICANT to set static wep key
case OID_802_11_ADD_WEP:
@@ -4208,6 +4417,8 @@ INT RTMPSetInformation(
break;
#endif // WPA_SUPPLICANT_SUPPORT //
+
+
#ifdef SNMP_SUPPORT
case OID_802_11_SHORTRETRYLIMIT:
if (wrq->u.data.length != sizeof(ULONG))
@@ -4291,12 +4502,15 @@ INT RTMPSetInformation(
break;
#endif
+
+
default:
DBGPRINT(RT_DEBUG_TRACE, ("Set::unknown IOCTL's subcmd = 0x%08x\n", cmd));
Status = -EOPNOTSUPP;
break;
}
+
return Status;
}
@@ -4331,6 +4545,7 @@ INT RTMPQueryInformation(
UCHAR driverVersion[8];
OID_SET_HT_PHYMODE *pHTPhyMode = NULL;
+
#ifdef SNMP_SUPPORT
//for snmp, kathy
DefaultKeyIdxValue *pKeyIdxValue;
@@ -4343,7 +4558,6 @@ INT RTMPQueryInformation(
switch(cmd)
{
case RT_OID_DEVICE_NAME:
- DBGPRINT(RT_DEBUG_INFO, ("Query::RT_OID_DEVICE_NAME\n"));
wrq->u.data.length = sizeof(STA_NIC_DEVICE_NAME);
Status = copy_to_user(wrq->u.data.pointer, STA_NIC_DEVICE_NAME, wrq->u.data.length);
break;
@@ -4430,7 +4644,6 @@ INT RTMPQueryInformation(
else
{
pBss->Ssid.SsidLength = pAdapter->ScanTab.BssEntry[i].SsidLen;
- //NdisZeroMemory(pBss->Ssid.Ssid, NDIS_802_11_LENGTH_SSID);
NdisMoveMemory(pBss->Ssid.Ssid, pAdapter->ScanTab.BssEntry[i].Ssid, pAdapter->ScanTab.BssEntry[i].SsidLen);
}
pBss->Privacy = pAdapter->ScanTab.BssEntry[i].Privacy;
@@ -4452,12 +4665,6 @@ INT RTMPQueryInformation(
pAdapter->ScanTab.BssEntry[i].ExtRate,
pAdapter->ScanTab.BssEntry[i].ExtRateLen);
- DBGPRINT(RT_DEBUG_INFO,("BSS#%d - %s, Ch %d = %ld Khz, Sup+Ext rate# = %d\n",
- i,pBss->Ssid.Ssid,
- pAdapter->ScanTab.BssEntry[i].Channel,
- pBss->Configuration.DSConfig,
- pAdapter->ScanTab.BssEntry[i].SupRateLen + pAdapter->ScanTab.BssEntry[i].ExtRateLen));
-
if (pAdapter->ScanTab.BssEntry[i].VarIELen == 0)
{
pBss->IELength = sizeof(NDIS_802_11_FIXED_IEs);
@@ -4504,11 +4711,8 @@ INT RTMPQueryInformation(
case OID_802_3_CURRENT_ADDRESS:
wrq->u.data.length = MAC_ADDR_LEN;
Status = copy_to_user(wrq->u.data.pointer, &pAdapter->CurrentAddress, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_INFO, ("Query::OID_802_3_CURRENT_ADDRESS \n"));
break;
case OID_GEN_MEDIA_CONNECT_STATUS:
- DBGPRINT(RT_DEBUG_INFO, ("Query::OID_GEN_MEDIA_CONNECT_STATUS \n"));
-
if (pAdapter->IndicateMediaState == NdisMediaStateConnected)
MediaState = NdisMediaStateConnected;
else
@@ -4530,10 +4734,6 @@ INT RTMPQueryInformation(
{
Status = copy_to_user(wrq->u.data.pointer, &pAdapter->CommonCfg.Bssid, sizeof(NDIS_802_11_MAC_ADDRESS));
- DBGPRINT(RT_DEBUG_INFO, ("IOCTL::SIOCGIWAP(=%02x:%02x:%02x:%02x:%02x:%02x)\n",
- pAdapter->CommonCfg.Bssid[0],pAdapter->CommonCfg.Bssid[1],pAdapter->CommonCfg.Bssid[2],
- pAdapter->CommonCfg.Bssid[3],pAdapter->CommonCfg.Bssid[4],pAdapter->CommonCfg.Bssid[5]));
-
}
else
{
@@ -4580,9 +4780,9 @@ INT RTMPQueryInformation(
MAP_CHANNEL_ID_TO_KHZ(pAdapter->CommonCfg.Channel, pConfiguration->DSConfig);
wrq->u.data.length = sizeof(NDIS_802_11_CONFIGURATION);
Status = copy_to_user(wrq->u.data.pointer, pConfiguration, wrq->u.data.length);
- kfree(pConfiguration);
DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_CONFIGURATION(BeaconPeriod=%ld,AtimW=%ld,Channel=%d) \n",
pConfiguration->BeaconPeriod, pConfiguration->ATIMWindow, pAdapter->CommonCfg.Channel));
+ kfree(pConfiguration);
}
else
{
@@ -4625,19 +4825,16 @@ INT RTMPQueryInformation(
ulInfo = pAdapter->StaCfg.RssiSample.LastRssi0;
wrq->u.data.length = sizeof(ulInfo);
Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_INFO, ("Query::OID_802_11_RSSI(=%ld)\n", ulInfo));
break;
case RT_OID_802_11_RSSI_1:
ulInfo = pAdapter->StaCfg.RssiSample.LastRssi1;
wrq->u.data.length = sizeof(ulInfo);
Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_INFO, ("Query::OID_802_11_RSSI_1(=%ld)\n", ulInfo));
break;
case RT_OID_802_11_RSSI_2:
ulInfo = pAdapter->StaCfg.RssiSample.LastRssi2;
wrq->u.data.length = sizeof(ulInfo);
Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_INFO, ("Query::OID_802_11_RSSI_2(=%ld)\n", ulInfo));
break;
case OID_802_11_STATISTICS:
pStatistics = (NDIS_802_11_STATISTICS *) kmalloc(sizeof(NDIS_802_11_STATISTICS), MEM_ALLOC_FLAG);
@@ -4679,13 +4876,11 @@ INT RTMPQueryInformation(
}
break;
case OID_GEN_RCV_OK:
- DBGPRINT(RT_DEBUG_INFO, ("Query::OID_GEN_RCV_OK \n"));
ulInfo = pAdapter->Counters8023.GoodReceives;
wrq->u.data.length = sizeof(ulInfo);
Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
break;
case OID_GEN_RCV_NO_BUFFER:
- DBGPRINT(RT_DEBUG_INFO, ("Query::OID_GEN_RCV_NO_BUFFER \n"));
ulInfo = pAdapter->Counters8023.RxNoBuffer;
wrq->u.data.length = sizeof(ulInfo);
Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
@@ -4705,7 +4900,7 @@ INT RTMPQueryInformation(
pStaConfig->EnableTurboRate = 0;
pStaConfig->UseBGProtection = pAdapter->CommonCfg.UseBGProtection;
pStaConfig->UseShortSlotTime = pAdapter->CommonCfg.bUseShortSlotTime;
- pStaConfig->AdhocMode = pAdapter->StaCfg.AdhocMode;
+ //pStaConfig->AdhocMode = pAdapter->StaCfg.AdhocMode;
pStaConfig->HwRadioStatus = (pAdapter->StaCfg.bHwRadio == TRUE) ? 1 : 0;
pStaConfig->Rsv1 = 0;
pStaConfig->SystemErrorBitmap = pAdapter->SystemErrorBitmap;
@@ -4816,7 +5011,6 @@ INT RTMPQueryInformation(
else
ulInfo = Ndis802_11DS;
Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_INFO, ("Query::OID_802_11_NETWORK_TYPE_IN_USE(=%ld)\n", ulInfo));
break;
case RT_OID_802_11_QUERY_LAST_RX_RATE:
ulInfo = (ULONG)pAdapter->LastRxRate;
@@ -4834,12 +5028,10 @@ INT RTMPQueryInformation(
case RT_OID_802_11_QUERY_EEPROM_VERSION:
wrq->u.data.length = sizeof(ULONG);
Status = copy_to_user(wrq->u.data.pointer, &pAdapter->EepromVersion, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_INFO, ("Query::RT_OID_802_11_QUERY_EEPROM_VERSION (=%ld)\n", pAdapter->EepromVersion));
break;
case RT_OID_802_11_QUERY_FIRMWARE_VERSION:
wrq->u.data.length = sizeof(ULONG);
Status = copy_to_user(wrq->u.data.pointer, &pAdapter->FirmwareVersion, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_INFO, ("Query::RT_OID_802_11_QUERY_FIRMWARE_VERSION (=%ld)\n", pAdapter->FirmwareVersion));
break;
case RT_OID_802_11_QUERY_NOISE_LEVEL:
wrq->u.data.length = sizeof(UCHAR);
@@ -4855,7 +5047,6 @@ INT RTMPQueryInformation(
wrq->u.data.length = sizeof(UINT);
we_version_compiled = WIRELESS_EXT;
Status = copy_to_user(wrq->u.data.pointer, &we_version_compiled, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_INFO, ("Query::RT_OID_WE_VERSION_COMPILED (=%d)\n", we_version_compiled));
break;
case RT_OID_802_11_QUERY_APSD_SETTING:
apsd = (pAdapter->CommonCfg.bAPSDCapable | (pAdapter->CommonCfg.bAPSDAC_BE << 1) | (pAdapter->CommonCfg.bAPSDAC_BK << 2)
@@ -4979,7 +5170,6 @@ INT RTMPQueryInformation(
case RT_OID_802_11_MAC_ADDRESS:
wrq->u.data.length = MAC_ADDR_LEN;
Status = copy_to_user(wrq->u.data.pointer, &pAdapter->CurrentAddress, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_INFO, ("Query::RT_OID_802_11_MAC_ADDRESS \n"));
break;
case RT_OID_802_11_MANUFACTUREROUI:
@@ -5167,6 +5357,7 @@ INT RTMPQueryInformation(
DBGPRINT(RT_DEBUG_TRACE, ("Status=%d\n", Status));
break;
+
#ifdef QOS_DLS_SUPPORT
case RT_OID_802_11_QUERY_DLS:
wrq->u.data.length = sizeof(BOOLEAN);
@@ -5195,7 +5386,6 @@ INT RTMPQueryInformation(
}
break;
#endif // QOS_DLS_SUPPORT //
-
default:
DBGPRINT(RT_DEBUG_TRACE, ("Query::unknown IOCTL's subcmd = 0x%08x\n", cmd));
Status = -EOPNOTSUPP;
@@ -5631,14 +5821,20 @@ INT Set_NetworkType_Proc(
DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_MEDIA_STATE_CONNECTED \n"));
if (pAdapter->CommonCfg.CentralChannel == 0)
{
+#ifdef DOT11_N_SUPPORT
if (pAdapter->CommonCfg.PhyMode == PHY_11AN_MIXED)
pAdapter->CommonCfg.CentralChannel = 36;
else
+#endif // DOT11_N_SUPPORT //
pAdapter->CommonCfg.CentralChannel = 6;
}
+#ifdef DOT11_N_SUPPORT
else
N_ChannelCheck(pAdapter);
- if (pAdapter->CommonCfg.PhyMode >= PHY_11ABGN_MIXED &&
+#endif // DOT11_N_SUPPORT //
+
+#ifdef DOT11_N_SUPPORT
+ if (pAdapter->CommonCfg.PhyMode >= PHY_11ABGN_MIXED &&
pAdapter->CommonCfg.RegTransmitSetting.field.BW == BW_40 &&
pAdapter->CommonCfg.RegTransmitSetting.field.EXTCHA == EXTCHA_ABOVE)
{
@@ -5688,14 +5884,15 @@ INT Set_NetworkType_Proc(
pAdapter->CommonCfg.CentralChannel));
}
else
+#endif // DOT11_N_SUPPORT //
{
// 20MHz
RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, &bbpValue);
bbpValue &= (~0x18);
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R4, bbpValue);
pAdapter->CommonCfg.BBPCurrentBW = BW_20;
- AsicSwitchChannel(pAdapter, pAdapter->CommonCfg.Channel, FALSE);
- AsicLockChannel(pAdapter, pAdapter->CommonCfg.Channel);
+ AsicSwitchChannel(pAdapter, pAdapter->CommonCfg.Channel, FALSE);
+ AsicLockChannel(pAdapter, pAdapter->CommonCfg.Channel);
DBGPRINT(RT_DEBUG_TRACE, ("BW_20, Channel(%d)\n", pAdapter->CommonCfg.Channel));
}
// Enable Rx with promiscuous reception
@@ -6180,9 +6377,10 @@ INT Set_WPAPSK_Proc(
{
UCHAR keyMaterial[40];
- if ((pAdapter->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) &&\
- (pAdapter->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) &&\
- (pAdapter->StaCfg.AuthMode != Ndis802_11AuthModeWPANone) )
+ if ((pAdapter->StaCfg.AuthMode != Ndis802_11AuthModeWPAPSK) &&
+ (pAdapter->StaCfg.AuthMode != Ndis802_11AuthModeWPA2PSK) &&
+ (pAdapter->StaCfg.AuthMode != Ndis802_11AuthModeWPANone)
+ )
return TRUE; // do nothing
DBGPRINT(RT_DEBUG_TRACE, ("Set_WPAPSK_Proc::(WPAPSK=%s)\n", arg));
@@ -6207,6 +6405,8 @@ INT Set_WPAPSK_Proc(
NdisMoveMemory(pAdapter->StaCfg.PMK, keyMaterial, 32);
}
+
+
if(pAdapter->StaCfg.BssType == BSS_ADHOC &&
pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPANone)
{
@@ -6311,13 +6511,13 @@ INT Set_Wpa_Support(
{
if ( simple_strtol(arg, 0, 10) == 0)
- pAd->StaCfg.WpaSupplicantUP = 0;
+ pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE;
else if ( simple_strtol(arg, 0, 10) == 1)
- pAd->StaCfg.WpaSupplicantUP = 1;
+ pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE;
else if ( simple_strtol(arg, 0, 10) == 2)
- pAd->StaCfg.WpaSupplicantUP = 2;
+ pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_ENABLE_WITH_WEB_UI;
else
- pAd->StaCfg.WpaSupplicantUP = 0;
+ pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE;
DBGPRINT(RT_DEBUG_TRACE, ("Set_Wpa_Support::(WpaSupplicantUP=%d)\n", pAd->StaCfg.WpaSupplicantUP));
@@ -6356,8 +6556,8 @@ VOID RTMPIoctlMAC(
UCHAR temp[16], temp2[16];
UINT32 macValue = 0;
INT Status;
+
- DBGPRINT(RT_DEBUG_INFO, ("==>RTMPIoctlMAC\n"));
memset(msg, 0x00, 1024);
if (wrq->u.data.length > 1) //No parameters.
{
@@ -6366,7 +6566,6 @@ VOID RTMPIoctlMAC(
//Parsing Read or Write
this_char = arg;
- DBGPRINT(RT_DEBUG_INFO, ("this_char=%s\n", this_char));
if (!*this_char)
goto next;
@@ -6375,8 +6574,6 @@ VOID RTMPIoctlMAC(
if (!value || !*value)
{ //Read
- DBGPRINT(RT_DEBUG_INFO, ("Read: this_char=%s, strlen=%d\n", this_char, strlen(this_char)));
-
// Sanity check
if(strlen(this_char) > 4)
goto next;
@@ -6408,7 +6605,6 @@ VOID RTMPIoctlMAC(
RTMP_IO_READ32(pAdapter, macAddr, &macValue);
DBGPRINT(RT_DEBUG_TRACE, ("MacAddr=%lx, MacValue=%x\n", macAddr, macValue));
sprintf(msg+strlen(msg), "[0x%08lX]:%08X ", macAddr , macValue);
- DBGPRINT(RT_DEBUG_INFO, ("msg=%s\n", msg));
}
else
{//Invalid parametes, so default printk all bbp
@@ -6418,7 +6614,6 @@ VOID RTMPIoctlMAC(
}
else
{ //Write
- DBGPRINT(RT_DEBUG_INFO, ("Write: this_char=%s, strlen(value)=%d, value=%s\n", this_char, strlen(value), value));
memcpy(&temp2, value, strlen(value));
temp2[strlen(value)] = '\0';
@@ -6500,16 +6695,14 @@ VOID RTMPIoctlMAC(
RTMP_IO_WRITE32(pAdapter, macAddr, macValue);
sprintf(msg+strlen(msg), "[0x%08lX]:%08X ", macAddr, macValue);
- DBGPRINT(RT_DEBUG_INFO, ("msg=%s\n", msg));
}
}
}
next:
if(strlen(msg) == 1)
sprintf(msg+strlen(msg), "===>Error command format!");
- DBGPRINT(RT_DEBUG_INFO, ("copy to user [msg=%s]\n", msg));
+
// Copy the information into the user buffer
- DBGPRINT(RT_DEBUG_INFO, ("strlen(msg) =%d\n", strlen(msg)));
wrq->u.data.length = strlen(msg);
Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length);
@@ -6547,7 +6740,7 @@ VOID RTMPIoctlE2PROM(
USHORT eepValue;
int Status;
- DBGPRINT(RT_DEBUG_INFO, ("==>RTMPIoctlE2PROM\n"));
+
memset(msg, 0x00, 1024);
if (wrq->u.data.length > 1) //No parameters.
{
@@ -6556,8 +6749,8 @@ VOID RTMPIoctlE2PROM(
//Parsing Read or Write
this_char = arg;
- DBGPRINT(RT_DEBUG_INFO, ("this_char=%s\n", this_char));
+
if (!*this_char)
goto next;
@@ -6566,8 +6759,7 @@ VOID RTMPIoctlE2PROM(
if (!value || !*value)
{ //Read
- DBGPRINT(RT_DEBUG_INFO, ("Read: this_char=%s, strlen=%d\n", this_char, strlen(this_char)));
-
+
// Sanity check
if(strlen(this_char) > 4)
goto next;
@@ -6597,9 +6789,7 @@ VOID RTMPIoctlE2PROM(
if (eepAddr < 0xFFFF)
{
RT28xx_EEPROM_READ16(pAdapter, eepAddr, eepValue);
- DBGPRINT(RT_DEBUG_INFO, ("eepAddr=%x, eepValue=0x%x\n", eepAddr, eepValue));
sprintf(msg+strlen(msg), "[0x%04X]:0x%04X ", eepAddr , eepValue);
- DBGPRINT(RT_DEBUG_INFO, ("msg=%s\n", msg));
}
else
{//Invalid parametes, so default printk all bbp
@@ -6609,7 +6799,6 @@ VOID RTMPIoctlE2PROM(
}
else
{ //Write
- DBGPRINT(RT_DEBUG_INFO, ("Write: this_char=%s, strlen(value)=%d, value=%s\n", this_char, strlen(value), value));
memcpy(&temp2, value, strlen(value));
temp2[strlen(value)] = '\0';
@@ -6658,19 +6847,16 @@ VOID RTMPIoctlE2PROM(
AtoH(temp2, temp, 2);
eepValue = *temp*256 + temp[1];
- DBGPRINT(RT_DEBUG_INFO, ("eepAddr=%02x, eepValue=0x%x\n", eepAddr, eepValue));
-
RT28xx_EEPROM_WRITE16(pAdapter, eepAddr, eepValue);
sprintf(msg+strlen(msg), "[0x%02X]:%02X ", eepAddr, eepValue);
- DBGPRINT(RT_DEBUG_INFO, ("msg=%s\n", msg));
}
}
next:
if(strlen(msg) == 1)
sprintf(msg+strlen(msg), "===>Error command format!");
+
// Copy the information into the user buffer
- DBGPRINT(RT_DEBUG_INFO, ("copy to user [msg=%s]\n", msg));
wrq->u.data.length = strlen(msg);
Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length);
@@ -6678,6 +6864,9 @@ next:
}
#endif // DBG //
+
+
+
INT Set_TGnWifiTest_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg)
@@ -6738,3 +6927,18 @@ INT Set_Ieee80211dClientMode_Proc(
}
#endif // EXT_BUILD_CHANNEL_LIST //
+#ifdef CARRIER_DETECTION_SUPPORT
+INT Set_CarrierDetect_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR arg)
+{
+ if (simple_strtol(arg, 0, 10) == 0)
+ pAd->CommonCfg.CarrierDetect.Enable = FALSE;
+ else
+ pAd->CommonCfg.CarrierDetect.Enable = TRUE;
+
+ DBGPRINT(RT_DEBUG_TRACE, ("IF Set_CarrierDetect_Proc::(CarrierDetect.Enable=%d)\n", pAd->CommonCfg.CarrierDetect.Enable));
+ return TRUE;
+}
+#endif // CARRIER_DETECTION_SUPPORT //
+
diff --git a/rt2860-source-1.8.0.0/os/linux/sta_ioctl.c.patch b/rt2860-source-1.8.0.0/os/linux/sta_ioctl.c.patch
new file mode 100644
index 0000000..4bf50e5
--- /dev/null
+++ b/rt2860-source-1.8.0.0/os/linux/sta_ioctl.c.patch
@@ -0,0 +1,18 @@
+--- sta_ioctl.c 2008-09-18 10:14:57.000000000 +0800
++++ sta_ioctl.c.fc9 2008-09-18 10:45:57.000000000 +0800
+@@ -49,15 +49,9 @@
+
+ #define GROUP_KEY_NO 4
+
+-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
+ #define IWE_STREAM_ADD_EVENT(_A, _B, _C, _D, _E) iwe_stream_add_event(_A, _B, _C, _D, _E)
+ #define IWE_STREAM_ADD_POINT(_A, _B, _C, _D, _E) iwe_stream_add_point(_A, _B, _C, _D, _E)
+ #define IWE_STREAM_ADD_VALUE(_A, _B, _C, _D, _E, _F) iwe_stream_add_value(_A, _B, _C, _D, _E, _F)
+-#else
+-#define IWE_STREAM_ADD_EVENT(_A, _B, _C, _D, _E) iwe_stream_add_event(_B, _C, _D, _E)
+-#define IWE_STREAM_ADD_POINT(_A, _B, _C, _D, _E) iwe_stream_add_point(_B, _C, _D, _E)
+-#define IWE_STREAM_ADD_VALUE(_A, _B, _C, _D, _E, _F) iwe_stream_add_value(_B, _C, _D, _E, _F)
+-#endif
+
+ extern UCHAR CipherWpa2Template[];
+ extern UCHAR CipherWpaPskTkip[];
diff --git a/rt2860-1.7.0.0/sta/aironet.c b/rt2860-source-1.8.0.0/sta/aironet.c
similarity index 100%
copy from rt2860-1.7.0.0/sta/aironet.c
copy to rt2860-source-1.8.0.0/sta/aironet.c
diff --git a/rt2860-1.7.0.0/sta/assoc.c b/rt2860-source-1.8.0.0/sta/assoc.c
similarity index 98%
copy from rt2860-1.7.0.0/sta/assoc.c
copy to rt2860-source-1.8.0.0/sta/assoc.c
index cf7140c..246cc62 100644
--- a/rt2860-1.7.0.0/sta/assoc.c
+++ b/rt2860-source-1.8.0.0/sta/assoc.c
@@ -142,7 +142,6 @@ VOID AssocTimeout(IN PVOID SystemSpecific1,
IN PVOID SystemSpecific3)
{
RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext;
- DBGPRINT(RT_DEBUG_INFO,("ASSOC - enqueue MT2_ASSOC_TIMEOUT \n"));
// Do nothing if the driver is starting halt state.
// This might happen when timer already been fired before cancel timer with mlmehalt
@@ -171,7 +170,6 @@ VOID ReassocTimeout(IN PVOID SystemSpecific1,
IN PVOID SystemSpecific3)
{
RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext;
- DBGPRINT(RT_DEBUG_INFO,("ASSOC - enqueue MT2_REASSOC_TIMEOUT \n"));
// Do nothing if the driver is starting halt state.
// This might happen when timer already been fired before cancel timer with mlmehalt
@@ -200,7 +198,6 @@ VOID DisassocTimeout(IN PVOID SystemSpecific1,
IN PVOID SystemSpecific3)
{
RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext;
- DBGPRINT(RT_DEBUG_INFO,("ASSOC - enqueue MT2_DISASSOC_TIMEOUT \n"));
// Do nothing if the driver is starting halt state.
// This might happen when timer already been fired before cancel timer with mlmehalt
@@ -344,6 +341,7 @@ VOID MlmeAssocReqAction(
FrameLen += tmp;
}
+#ifdef DOT11_N_SUPPORT
// HT
if ((pAd->MlmeAux.HtCapabilityLen > 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
{
@@ -387,6 +385,7 @@ VOID MlmeAssocReqAction(
}
FrameLen += TmpLen;
}
+#endif // DOT11_N_SUPPORT //
// add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION
// Case I: (Aggregation + Piggy-Back)
@@ -459,16 +458,20 @@ VOID MlmeAssocReqAction(
// For example: Put Vendor Specific IE on the front of WPA IE.
// This happens on AP (Model No:Linksys WRK54G)
//
- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) ||
+ if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) ||
- (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2))
+ (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2)
+ )
+ )
{
UCHAR RSNIe = IE_WPA;
if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2))
+ {
RSNIe = IE_WPA2;
+ }
#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
#ifdef SIOCSIWGENIE
@@ -616,6 +619,7 @@ VOID MlmeAssocReqAction(
// End Add by James
}
+
MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
MlmeFreeMemory(pAd, pOutBuffer);
@@ -755,6 +759,7 @@ VOID MlmeReassocReqAction(
FrameLen += tmp;
}
+#ifdef DOT11_N_SUPPORT
// HT
if ((pAd->MlmeAux.HtCapabilityLen > 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
{
@@ -781,6 +786,8 @@ VOID MlmeReassocReqAction(
}
FrameLen += TmpLen;
}
+#endif // DOT11_N_SUPPORT //
+
// add Ralink proprietary IE to inform AP this STA is going to use AGGREGATION or PIGGY-BACK+AGGREGATION
// Case I: (Aggregation + Piggy-Back)
// 1. user enable aggregation, AND
@@ -984,6 +991,8 @@ VOID MlmeDisassocReqAction(
return;
}
+
+
RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &TimerCancelled);
DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - Send DISASSOC request[BSSID::%02x:%02x:%02x:%02x:%02x:%02x (Reason=%d)\n",
@@ -1013,7 +1022,8 @@ VOID MlmeDisassocReqAction(
#ifdef WPA_SUPPLICANT_SUPPORT
#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP) {
+ if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
+ {
union iwreq_data wrqu;
//send disassociate event to wpa_supplicant
memset(&wrqu, 0, sizeof(wrqu));
@@ -1068,7 +1078,9 @@ VOID PeerAssocRspAction(
if(MAC_ADDR_EQUAL(Addr2, pAd->MlmeAux.Bssid))
{
DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():ASSOC - receive ASSOC_RSP to me (status=%d)\n", Status));
+#ifdef DOT11_N_SUPPORT
DBGPRINT(RT_DEBUG_TRACE, ("PeerAssocRspAction():MacTable [%d].AMsduSize = %d. ClientStatusFlags = 0x%lx \n",Elem->Wcid, pAd->MacTab.Content[BSSID_WCID].AMsduSize, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags));
+#endif // DOT11_N_SUPPORT //
RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &TimerCancelled);
if(Status == MLME_SUCCESS)
{
@@ -1078,7 +1090,7 @@ VOID PeerAssocRspAction(
#ifdef WPA_SUPPLICANT_SUPPORT
#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP)
+ if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
{
union iwreq_data wrqu;
@@ -1183,7 +1195,7 @@ VOID PeerReassocRspAction(
#ifdef WPA_SUPPLICANT_SUPPORT
#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP)
+ if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
{
union iwreq_data wrqu;
@@ -1284,6 +1296,7 @@ VOID AssocPostProc(
COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pAddr2);
pAd->MlmeAux.Aid = Aid;
pAd->MlmeAux.CapabilityInfo = CapabilityInfo & SUPPORTED_CAPABILITY_INFO;
+#ifdef DOT11_N_SUPPORT
// Some HT AP might lost WMM IE. We add WMM ourselves. beacuase HT requires QoS on.
if ((HtCapabilityLen > 0) && (pEdcaParm->bValid == FALSE))
{
@@ -1309,6 +1322,7 @@ VOID AssocPostProc(
pEdcaParm->Txop[3] = 48;
}
+#endif // DOT11_N_SUPPORT //
NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM));
@@ -1322,6 +1336,7 @@ VOID AssocPostProc(
NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ExtRateLen);
RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen);
+#ifdef DOT11_N_SUPPORT
if (HtCapabilityLen > 0)
{
RTMPCheckHt(pAd, BSSID_WCID, pHtCapability, pAddHtInfo);
@@ -1330,6 +1345,8 @@ VOID AssocPostProc(
DBGPRINT(RT_DEBUG_TRACE, ("AssocPostProc===> (Mmps=%d, AmsduSize=%d, )\n",
pAd->MacTab.Content[BSSID_WCID].MmpsMode, pAd->MacTab.Content[BSSID_WCID].AMsduSize));
+#endif // DOT11_N_SUPPORT //
+
// Set New WPA information
Idx = BssTableSearch(&pAd->ScanTab, pAddr2, pAd->MlmeAux.Channel);
if (Idx == BSS_NOT_FOUND)
@@ -1418,6 +1435,7 @@ VOID PeerDisassocAction(
RTMPSendWirelessEvent(pAd, IW_DISASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0);
}
+
#ifdef LEAP_SUPPORT
if (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)
{
@@ -1442,7 +1460,8 @@ VOID PeerDisassocAction(
#ifdef WPA_SUPPLICANT_SUPPORT
#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP) {
+ if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
+ {
union iwreq_data wrqu;
//send disassociate event to wpa_supplicant
memset(&wrqu, 0, sizeof(wrqu));
diff --git a/rt2860-1.7.0.0/sta/auth.c b/rt2860-source-1.8.0.0/sta/auth.c
similarity index 100%
copy from rt2860-1.7.0.0/sta/auth.c
copy to rt2860-source-1.8.0.0/sta/auth.c
diff --git a/rt2860-1.7.0.0/sta/auth_rsp.c b/rt2860-source-1.8.0.0/sta/auth_rsp.c
similarity index 99%
copy from rt2860-1.7.0.0/sta/auth_rsp.c
copy to rt2860-source-1.8.0.0/sta/auth_rsp.c
index 4f3d91e..c54bfca 100644
--- a/rt2860-1.7.0.0/sta/auth_rsp.c
+++ b/rt2860-source-1.8.0.0/sta/auth_rsp.c
@@ -127,6 +127,7 @@ VOID PeerDeauthAction(
{
DBGPRINT(RT_DEBUG_TRACE,("AUTH_RSP - receive DE-AUTH from our AP (Reason=%d)\n", Reason));
+
#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
{
union iwreq_data wrqu;
diff --git a/rt2860-1.7.0.0/sta/connect.c b/rt2860-source-1.8.0.0/sta/connect.c
similarity index 91%
copy from rt2860-1.7.0.0/sta/connect.c
copy to rt2860-source-1.8.0.0/sta/connect.c
index bb24bc5..4c92571 100644
--- a/rt2860-1.7.0.0/sta/connect.c
+++ b/rt2860-source-1.8.0.0/sta/connect.c
@@ -87,8 +87,6 @@ UCHAR CipherSuiteWpaNoneAesLen = (sizeof(CipherSuiteWpaNoneAes) / sizeof(UCHAR))
(_pAd)->MacTab.Content[BSSID_WCID].PairwiseKey.CipherAlg = (_pAd)->StaCfg.PairCipher;\
COPY_MAC_ADDR((_pAd)->MacTab.Content[BSSID_WCID].PairwiseKey.BssId, (_pAd)->MlmeAux.Bssid);\
(_pAd)->MacTab.Content[BSSID_WCID].RateLen = (_pAd)->StaActive.SupRateLen + (_pAd)->StaActive.ExtRateLen;\
- NdisMoveMemory(&(_pAd)->CommonCfg.HtCapability, &(_pAd)->MlmeAux.HtCapability, sizeof(HT_CAPABILITY_IE));\
- NdisMoveMemory(&(_pAd)->CommonCfg.AddHTInfo, &(_pAd)->MlmeAux.AddHtInfo, sizeof(ADD_HT_INFO_IE));\
}
/*
@@ -125,7 +123,9 @@ VOID MlmeCntlMachinePerformAction(
switch(pAd->Mlme.CntlMachine.CurrState)
{
case CNTL_IDLE:
- CntlIdleProc(pAd, Elem);
+ {
+ CntlIdleProc(pAd, Elem);
+ }
break;
case CNTL_WAIT_DISASSOC:
CntlWaitDisassocProc(pAd, Elem);
@@ -245,7 +245,7 @@ VOID CntlIdleProc(
MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_DISASSOC_REQ, sizeof(MLME_DISASSOC_REQ_STRUCT), &DisassocReq);
pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_DISASSOC;
#ifdef WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP != 2)
+ if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_ENABLE_WITH_WEB_UI)
#endif // WPA_SUPPLICANT_SUPPORT //
{
// Set the AutoReconnectSsid to prevent it reconnect to old SSID
@@ -289,8 +289,7 @@ VOID CntlOidScanProc(
return;
#endif // RALINK_ATE //
- DBGPRINT(RT_DEBUG_INFO, ("CNTL - SCAN starts\n"));
-
+
// record current BSS if network is connected.
// 2003-2-13 do not include current IBSS if this is the only STA in this IBSS.
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
@@ -345,6 +344,7 @@ VOID CntlOidSsidProc(
NdisZeroMemory(pAd->MlmeAux.Bssid, MAC_ADDR_LEN);
pAd->MlmeAux.BssType = pAd->StaCfg.BssType;
+
//
// Update Reconnect Ssid, that user desired to connect.
//
@@ -471,7 +471,8 @@ VOID CntlOidSsidProc(
if ((pAd->MlmeAux.SsidBssTab.BssNr == 0) &&
(pAd->StaCfg.bAutoReconnect == TRUE) &&
(pAd->MlmeAux.BssType == BSS_INFRA) &&
- (MlmeValidateSSID(pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen) == TRUE))
+ (MlmeValidateSSID(pAd->MlmeAux.Ssid, pAd->MlmeAux.SsidLen) == TRUE)
+ )
{
MLME_SCAN_REQ_STRUCT ScanReq;
@@ -490,6 +491,7 @@ VOID CntlOidSsidProc(
}
}
+
/*
==========================================================================
Description:
@@ -621,6 +623,7 @@ VOID CntlOidRTBssidProc(
// RSN capability
pAd->StaCfg.RsnCapability = pAd->ScanTab.BssEntry[BssIdx].WPA2.RsnCapability;
}
+
// Set Mix cipher flag
pAd->StaCfg.bMixCipher = (pAd->StaCfg.PairCipher == pAd->StaCfg.GroupCipher) ? FALSE : TRUE;
if (pAd->StaCfg.bMixCipher == TRUE)
@@ -930,7 +933,34 @@ VOID CntlWaitStartProc(
DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Channel=%d, Start adhoc on W53(52,56,60,64) Channels are not accepted\n", pAd->CommonCfg.Channel));
return;
}
-
+#ifdef DOT11_N_SUPPORT
+ if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
+ {
+ N_ChannelCheck(pAd);
+ SetCommonHT(pAd);
+ NdisMoveMemory(&pAd->MlmeAux.AddHtInfo, &pAd->CommonCfg.AddHTInfo, sizeof(ADD_HT_INFO_IE));
+ RTMPCheckHt(pAd, BSSID_WCID, &pAd->CommonCfg.HtCapability, &pAd->CommonCfg.AddHTInfo);
+ pAd->StaActive.SupportedPhyInfo.bHtEnable = TRUE;
+ NdisZeroMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], 16);
+ NdisMoveMemory(&pAd->StaActive.SupportedPhyInfo.MCSSet[0], &pAd->CommonCfg.HtCapability.MCSSet[0], 16);
+ COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd);
+
+ if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) &&
+ (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE))
+ {
+ pAd->MlmeAux.CentralChannel = pAd->CommonCfg.Channel + 2;
+ }
+ else if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) &&
+ (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW))
+ {
+ pAd->MlmeAux.CentralChannel = pAd->CommonCfg.Channel - 2;
+ }
+ }
+ else
+#endif // DOT11_N_SUPPORT //
+ {
+ pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE;
+ }
LinkUp(pAd, BSS_ADHOC);
pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
// Before send beacon, driver need do radar detection
@@ -1211,6 +1241,7 @@ VOID LinkUp(
MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry;
pEntry = &pAd->MacTab.Content[BSSID_WCID];
+
//
// ASSOC - DisassocTimeoutAction
// CNTL - Dis-associate successful
@@ -1221,8 +1252,12 @@ VOID LinkUp(
// cancel the DisassocTimer no matter what it start or not.
//
RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled);
+
COPY_SETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd);
+
+#ifdef DOT11_N_SUPPORT
COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd);
+#endif // DOT11_N_SUPPORT //
// It's quite difficult to tell if a newly added KEY is WEP or CKIP until a new BSS
// is formed (either ASSOC/RE-ASSOC done or IBSS started. LinkUP should be a safe place
// to examine if cipher algorithm switching is required.
@@ -1254,166 +1289,146 @@ VOID LinkUp(
OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON);
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON);
- pAd->CommonCfg.BBPCurrentBW = BW_20;
- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
- AsicLockChannel(pAd, pAd->CommonCfg.Channel);
+#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
+ // No carrier detection when adhoc
+ // CarrierDetectionStop(pAd);
+ pAd->CommonCfg.CarrierDetect.CD_State = CD_NORMAL;
+#endif // CARRIER_DETECTION_SUPPORT //
+ DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n" ));
+ }
+ else
+ {
+ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_INFRA_ON);
+ OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON);
+
+ DBGPRINT(RT_DEBUG_TRACE, ("!!!Infra LINK UP !!! \n" ));
+ }
+
+ // 3*3
+ // reset Tx beamforming bit
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);
+ Value &= (~0x01);
+ Value |= pAd->CommonCfg.RegTransmitSetting.field.TxBF;
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);
+
+#ifdef DOT11_N_SUPPORT
+ // Change to AP channel
+ if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40))
+ {
+ // Must using 40MHz.
+ pAd->CommonCfg.BBPCurrentBW = BW_40;
+ AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
+ AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);
+
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);
Value &= (~0x18);
+ Value |= 0x10;
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);
+
+ // RX : control channel at lower
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);
+ Value &= (~0x20);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);
+#ifdef RT2860
+ pAd->StaCfg.BBPR3 = Value;
+#endif // RT2860 //
RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);
Data &= 0xfffffffe;
RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data);
+
+ if (pAd->MACVersion == 0x28600100)
+ {
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16);
+ DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" ));
+ }
+ DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel ));
+ }
+ else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40))
+ {
+ // Must using 40MHz.
+ pAd->CommonCfg.BBPCurrentBW = BW_40;
+ AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
+ AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);
+
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);
+ Value &= (~0x18);
+ Value |= 0x10;
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);
+
+ RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);
+ Data |= 0x1;
+ RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data);
+
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);
- Value &= (~0x20);
+ Value |= (0x20);
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);
#ifdef RT2860
pAd->StaCfg.BBPR3 = Value;
#endif // RT2860 //
+
if (pAd->MACVersion == 0x28600100)
{
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16);
+ DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" ));
}
-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
- // No carrier detection when adhoc
- CarrierDetectionStop(pAd);
- pAd->CommonCfg.CarrierDetect.CD_State = CD_NORMAL;
-#endif // CARRIER_DETECTION_SUPPORT //
-
- DBGPRINT(RT_DEBUG_TRACE, ("!!!20MHz Adhoc LINK UP !!! \n" ));
- }
- else
- {
- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_INFRA_ON);
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON);
-
- // 3*3
- // reset Tx beamforming bit
+ DBGPRINT(RT_DEBUG_TRACE, ("!!! 40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel ));
+ }
+ else
+#endif // DOT11_N_SUPPORT //
+ {
+ pAd->CommonCfg.BBPCurrentBW = BW_20;
+ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
+ AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
+ AsicLockChannel(pAd, pAd->CommonCfg.Channel);
+
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);
- Value &= (~0x01);
- Value |= pAd->CommonCfg.RegTransmitSetting.field.TxBF;
+ Value &= (~0x18);
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);
-
- // Change to AP channel
- if ((pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40))
- {
- // Must using 40MHz.
- pAd->CommonCfg.BBPCurrentBW = BW_40;
- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);
-
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);
- Value &= (~0x18);
- Value |= 0x10;
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);
-
- // RX : control channel at lower
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);
- Value &= (~0x20);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);
-#ifdef RT2860
- pAd->StaCfg.BBPR3 = Value;
-#endif // RT2860 //
-
- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);
- Data &= 0xfffffffe;
- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data);
-
- if (pAd->MACVersion == 0x28600100)
- {
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16);
- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" ));
- }
-
- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel ));
- }
- else if ((pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel) && (pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth == BW_40))
- {
- // Must using 40MHz.
- pAd->CommonCfg.BBPCurrentBW = BW_40;
- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);
-
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);
- Value &= (~0x18);
- Value |= 0x10;
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);
-
- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);
- Data |= 0x1;
- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data);
-
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);
- Value |= (0x20);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);
-#ifdef RT2860
- pAd->StaCfg.BBPR3 = Value;
-#endif // RT2860 //
- if (pAd->MACVersion == 0x28600100)
- {
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x1A);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0A);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x16);
- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" ));
- }
-
- DBGPRINT(RT_DEBUG_TRACE, ("!!! 40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel ));
- }
- else
- {
- pAd->CommonCfg.BBPCurrentBW = BW_20;
- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
- AsicLockChannel(pAd, pAd->CommonCfg.Channel);
-
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &Value);
- Value &= (~0x18);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, Value);
-
- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);
- Data &= 0xfffffffe;
- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data);
-
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);
- Value &= (~0x20);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);
+ RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);
+ Data &= 0xfffffffe;
+ RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Data);
+
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);
+ Value &= (~0x20);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);
#ifdef RT2860
- pAd->StaCfg.BBPR3 = Value;
+ pAd->StaCfg.BBPR3 = Value;
#endif // RT2860 //
-
- if (pAd->MACVersion == 0x28600100)
- {
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11);
- DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" ));
- }
-
- DBGPRINT(RT_DEBUG_TRACE, ("!!! 20MHz LINK UP !!! \n" ));
- }
- }
+
+ if (pAd->MACVersion == 0x28600100)
+ {
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x08);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, 0x11);
+ DBGPRINT(RT_DEBUG_TRACE, ("!!!rt2860C !!! \n" ));
+ }
+
+ DBGPRINT(RT_DEBUG_TRACE, ("!!! 20MHz LINK UP !!! \n" ));
+ }
- //RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, (0x2E + GET_LNA_GAIN(pAd)));
RTMPSetAGCInitValue(pAd, pAd->CommonCfg.BBPCurrentBW);
//
// Save BBP_R66 value, it will be used in RTUSBResumeMsduTransmission
//
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &pAd->BbpTuning.R66CurrentValue);
- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (Infra=%d, AID=%d, ssid=%s, Channel=%d, CentralChannel = %d)\n",
+ DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (BssType=%d, AID=%d, ssid=%s, Channel=%d, CentralChannel = %d)\n",
BssType, pAd->StaActive.Aid, pAd->CommonCfg.Ssid, pAd->CommonCfg.Channel, pAd->CommonCfg.CentralChannel));
+#ifdef DOT11_N_SUPPORT
DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! (Density =%d, )\n", pAd->MacTab.Content[BSSID_WCID].MpduDensity));
+#endif // DOT11_N_SUPPORT //
- AsicSetBssid(pAd, pAd->CommonCfg.Bssid);
+ AsicSetBssid(pAd, pAd->CommonCfg.Bssid);
AsicSetSlotTime(pAd, TRUE);
AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);
@@ -1421,6 +1436,7 @@ VOID LinkUp(
// Call this for RTS protectionfor legacy rate, we will always enable RTS threshold, but normally it will not hit
AsicUpdateProtect(pAd, 0, (OFDMSETPROTECT | CCKSETPROTECT), TRUE, FALSE);
+#ifdef DOT11_N_SUPPORT
if ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE))
{
// Update HT protectionfor based on AP's operating mode.
@@ -1431,6 +1447,7 @@ VOID LinkUp(
else
AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE);
}
+#endif // DOT11_N_SUPPORT //
NdisZeroMemory(&pAd->DrsCounters, sizeof(COUNTER_DRS));
@@ -1440,7 +1457,6 @@ VOID LinkUp(
if ((pAd->CommonCfg.TxPreamble != Rt802_11PreambleLong) &&
CAP_IS_SHORT_PREAMBLE_ON(pAd->StaActive.CapabilityInfo))
{
- DBGPRINT(RT_DEBUG_INFO, ("CNTL - !!! Set to short preamble!!!\n"));
MlmeSetTxPreamble(pAd, Rt802_11PreambleShort);
}
@@ -1468,15 +1484,6 @@ VOID LinkUp(
AsicEnableIbssSync(pAd);
}
-#ifdef SINGLE_ADHOC_LINKUP
- // Although this did not follow microsoft's recommendation.
- //Change based on customer's request
- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);
-
- pAd->IndicateMediaState = NdisMediaStateConnected;
- RTMP_IndicateMediaState(pAd);
- pAd->ExtraInfo = GENERAL_LINK_UP;
-#endif
// In ad hoc mode, use MAC table from index 1.
// p.s ASIC use all 0xff as termination of WCID table search.To prevent it's 0xff-ff-ff-ff-ff-ff, Write 0 here.
RTMP_IO_WRITE32(pAd, MAC_WCID_BASE, 0x00);
@@ -1584,6 +1591,7 @@ VOID LinkUp(
// Remove all WPA keys
RTMPWPARemoveAllKeys(pAd);
pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
+ pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP;
// Fixed connection failed with Range Maximizer - 515 AP (Marvell Chip) when security is WPAPSK/TKIP
// If IV related values are too large in GroupMsg2, AP would ignore this message.
@@ -1602,7 +1610,7 @@ VOID LinkUp(
ComposePsPoll(pAd);
ComposeNullFrame(pAd);
- AsicEnableBssSync(pAd);
+ AsicEnableBssSync(pAd);
// Add BSSID to WCID search table
AsicUpdateRxWCIDTable(pAd, BSSID_WCID, pAd->CommonCfg.Bssid);
@@ -1634,7 +1642,7 @@ VOID LinkUp(
if (((pAd->StaCfg.WpaSupplicantUP)&&
(pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)&&
(pAd->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED)) ||
- ((pAd->StaCfg.WpaSupplicantUP == 0)&&
+ ((pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE)&&
(pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)))
#else
if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)
@@ -1690,13 +1698,15 @@ VOID LinkUp(
pAd->MacTab.Content[BSSID_WCID].WepStatus = pAd->StaCfg.WepStatus;
NdisReleaseSpinLock(&pAd->MacTabLock);
- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! ClientStatusFlags=%lx, Mmps=%d, AmsduSize=%d, )\n",
- pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags,
- pAd->MacTab.Content[BSSID_WCID].MmpsMode, pAd->MacTab.Content[BSSID_WCID].AMsduSize));
- DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !! (StaActive.bHtEnable =%d, )\n", pAd->StaActive.SupportedPhyInfo.bHtEnable));
+ DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !!! ClientStatusFlags=%lx)\n",
+ pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags));
MlmeUpdateTxRates(pAd, TRUE, BSS0);
+#ifdef DOT11_N_SUPPORT
MlmeUpdateHtTxRates(pAd, BSS0);
+ DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK UP !! (StaActive.bHtEnable =%d, )\n", pAd->StaActive.SupportedPhyInfo.bHtEnable));
+#endif // DOT11_N_SUPPORT //
+
//
// Report Adjacent AP report.
//
@@ -1722,10 +1732,12 @@ VOID LinkUp(
if (pAd->MlmeAux.APRalinkIe != 0x0)
{
+#ifdef DOT11_N_SUPPORT
if (CLIENT_STATUS_TEST_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_RDG_CAPABLE))
{
AsicEnableRDG(pAd);
}
+#endif // DOT11_N_SUPPORT //
OPSTATUS_SET_FLAG(pAd, fCLIENT_STATUS_RALINK_CHIPSET);
CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_RALINK_CHIPSET);
}
@@ -1736,8 +1748,9 @@ VOID LinkUp(
}
}
+#ifdef DOT11_N_SUPPORT
DBGPRINT(RT_DEBUG_TRACE, ("NDIS_STATUS_MEDIA_CONNECT Event B!.BACapability = %x. ClientStatusFlags = %lx\n", pAd->CommonCfg.BACapability.word, pAd->MacTab.Content[BSSID_WCID].ClientStatusFlags));
- DBGPRINT(RT_DEBUG_INFO, ("CCX: CWMax CWMin %d %d\n", pAd->StaCfg.CCXQosECWMax, pAd->StaCfg.CCXQosECWMin));
+#endif // DOT11_N_SUPPORT //
// Set LED
RTMPSetLED(pAd, LED_LINK_UP);
@@ -1762,14 +1775,15 @@ VOID LinkUp(
if (pAd->StaCfg.bAutoTxRateSwitch == FALSE)
{
pEntry->bAutoTxRateSwitch = FALSE;
+#ifdef DOT11_N_SUPPORT
if (pEntry->HTPhyMode.field.MCS == 32)
pEntry->HTPhyMode.field.ShortGI = GI_800;
if ((pEntry->HTPhyMode.field.MCS > MCS_7) || (pEntry->HTPhyMode.field.MCS == 32))
pEntry->HTPhyMode.field.STBC = STBC_NONE;
-
+#endif // DOT11_N_SUPPORT //
// If the legacy mode is set, overwrite the transmit setting of this entry.
- if (pEntry->HTPhyMode.field.MODE < MODE_HTMIX)
+ if (pEntry->HTPhyMode.field.MODE <= MODE_OFDM)
RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry);
}
else
@@ -1796,6 +1810,7 @@ VOID LinkUp(
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, Value);
}
+#ifdef DOT11_N_SUPPORT
if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE)
{
}
@@ -1805,6 +1820,7 @@ VOID LinkUp(
// Because our Init value is 1 at MACRegTable.
RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, 0x0fff);
}
+#endif // DOT11_N_SUPPORT //
// Patch for Marvel AP to gain high throughput
// Need to set as following,
@@ -1816,6 +1832,7 @@ VOID LinkUp(
// Txop can only be modified when RDG is off, WMM is disable and TxBurst is enable
//
// if 1. Legacy AP WMM on, or 2. 11n AP, AMPDU disable. Force turn off burst no matter what bEnableTxBurst is.
+#ifdef DOT11_N_SUPPORT
if (((pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED)))
|| ((pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) && (pAd->CommonCfg.BACapability.field.Policy == BA_NOTUSE)))
{
@@ -1826,7 +1843,9 @@ VOID LinkUp(
RTMP_IO_WRITE32(pAd, PBF_MAX_PCNT, 0x1F3F7F9F);
DBGPRINT(RT_DEBUG_TRACE, ("Txburst 1\n"));
}
- else if (pAd->CommonCfg.bEnableTxBurst)
+ else
+#endif // DOT11_N_SUPPORT //
+ if (pAd->CommonCfg.bEnableTxBurst)
{
RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data);
Data &= 0xFFFFFF00;
@@ -1847,6 +1866,7 @@ VOID LinkUp(
DBGPRINT(RT_DEBUG_TRACE, ("Txburst 3\n"));
}
+#ifdef DOT11_N_SUPPORT
// Re-check to turn on TX burst or not.
if ((pAd->CommonCfg.IOTestParm.bLastAtheros == TRUE) && ((STA_WEP_ON(pAd))||(STA_TKIP_ON(pAd))))
{
@@ -1866,6 +1886,7 @@ VOID LinkUp(
{
pAd->CommonCfg.IOTestParm.bNextDisableRxBA = FALSE;
}
+#endif // DOT11_N_SUPPORT //
pAd->CommonCfg.IOTestParm.bLastAtheros = FALSE;
COPY_MAC_ADDR(pAd->CommonCfg.LastBssid, pAd->CommonCfg.Bssid);
@@ -1875,7 +1896,10 @@ VOID LinkUp(
// Note: As STA, The MACTab.Content[BSSID_WCID]. PairwiseKey and Shared Key for BSS0 are the same.
if (pAd->StaCfg.WepStatus <= Ndis802_11WEPDisabled)
+ {
pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED;
+ pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilterAcceptAll;
+ }
NdisAcquireSpinLock(&pAd->MacTabLock);
pEntry->PortSecured = pAd->StaCfg.PortSecured;
@@ -1896,6 +1920,7 @@ VOID LinkUp(
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);
+#ifdef DOT11_N_SUPPORT
#ifdef DOT11N_DRAFT3
if ((pAd->CommonCfg.BACapability.field.b2040CoexistScanSup) && (pAd->CommonCfg.Channel <= 11))
{
@@ -1903,6 +1928,7 @@ VOID LinkUp(
BuildEffectedChannelList(pAd);
}
#endif // DOT11N_DRAFT3 //
+#endif // DOT11_N_SUPPORT //
}
/*
@@ -1978,21 +2004,11 @@ VOID LinkDown(
DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 1!!!\n"));
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON);
-
- pAd->IndicateMediaState = NdisMediaStateDisconnected;
-#ifdef SINGLE_ADHOC_LINKUP
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);
- pAd->ExtraInfo = GENERAL_LINK_DOWN;
- // clean up previous SCAN result, add current BSS back to table if any
- BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, pAd->CommonCfg.Channel);
-#else
-
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);
pAd->IndicateMediaState = NdisMediaStateDisconnected;
RTMP_IndicateMediaState(pAd);
pAd->ExtraInfo = GENERAL_LINK_DOWN;
BssTableDeleteEntry(&pAd->ScanTab, pAd->CommonCfg.Bssid, pAd->CommonCfg.Channel);
-#endif
DBGPRINT(RT_DEBUG_TRACE, ("!!! MacTab.Size=%d !!!\n", pAd->MacTab.Size));
}
else // Infra structure mode
@@ -2026,10 +2042,6 @@ VOID LinkDown(
}
#endif // QOS_DLS_SUPPORT //
- // Delete every BA session with BSSID before tear down INFRA.
- // free resources of BA
- //BASessionTearDownALL(pAd, BSSID_WCID); ==> done in MacTableDeleteEntry
-
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON);
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);
@@ -2074,8 +2086,6 @@ VOID LinkDown(
COPY_MAC_ADDR(pAd->StaCfg.CCXAdjacentAPBssid, pAd->CommonCfg.Bssid);
}
- DBGPRINT(RT_DEBUG_TRACE, ("numAsOriginator = %ld, numAsRecipient = %ld, \n", pAd->BATable.numAsOriginator, pAd->BATable.numAsRecipient));
-
#ifdef EXT_BUILD_CHANNEL_LIST
// Country IE of the AP will be evaluated and will be used.
if (pAd->StaCfg.IEEE80211dClientMode != Rt802_11_D_None)
@@ -2105,19 +2115,24 @@ VOID LinkDown(
pAd->LedIndicatorStregth = 0xF0;
RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it.
- AsicDisableSync(pAd);
+ AsicDisableSync(pAd);
pAd->Mlme.PeriodicRound = 0;
pAd->Mlme.OneSecPeriodicRound = 0;
- // Remove StaCfg Information after link down
- NdisZeroMemory(pAd->CommonCfg.Bssid, MAC_ADDR_LEN);
- NdisZeroMemory(pAd->CommonCfg.Ssid, MAX_LEN_OF_SSID);
+ if (pAd->StaCfg.BssType == BSS_INFRA)
+ {
+ // Remove StaCfg Information after link down
+ NdisZeroMemory(pAd->CommonCfg.Bssid, MAC_ADDR_LEN);
+ NdisZeroMemory(pAd->CommonCfg.Ssid, MAX_LEN_OF_SSID);
+ pAd->CommonCfg.SsidLen = 0;
+ }
+#ifdef DOT11_N_SUPPORT
NdisZeroMemory(&pAd->MlmeAux.HtCapability, sizeof(HT_CAPABILITY_IE));
NdisZeroMemory(&pAd->MlmeAux.AddHtInfo, sizeof(ADD_HT_INFO_IE));
pAd->MlmeAux.HtCapabilityLen = 0;
pAd->MlmeAux.NewExtChannelOffset = 0xff;
- pAd->CommonCfg.SsidLen = 0;
+#endif // DOT11_N_SUPPORT //
// Reset WPA-PSK state. Only reset when supplicant enabled
if (pAd->StaCfg.WpaState != SS_NOTUSE)
@@ -2132,6 +2147,7 @@ VOID LinkDown(
#endif // QOS_DLS_SUPPORT //
}
+
//
// if link down come from AP, we need to remove all WPA keys on WPA mode.
// otherwise will cause 4-way handshaking failed, since the WPA key not empty.
@@ -2154,7 +2170,10 @@ VOID LinkDown(
}
else
#endif // WPA_SUPPLICANT_SUPPORT //
- pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
+ {
+ pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
+ pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP;
+ }
NdisAcquireSpinLock(&pAd->MacTabLock);
pAd->MacTab.Content[BSSID_WCID].PortSecured = pAd->StaCfg.PortSecured;
@@ -2171,6 +2190,8 @@ VOID LinkDown(
pAd->ExtraInfo = GENERAL_LINK_DOWN;
pAd->StaCfg.AdhocBOnlyJoined = FALSE;
+ pAd->StaCfg.AdhocBGJoined = FALSE;
+ pAd->StaCfg.Adhoc20NJoined = FALSE;
pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE;
// Reset the Current AP's IP address
@@ -2196,6 +2217,7 @@ VOID LinkDown(
pAd->CommonCfg.MlmeRate = pAd->CommonCfg.BasicMlmeRate;
pAd->CommonCfg.RtsRate = pAd->CommonCfg.BasicMlmeRate;
+#ifdef DOT11_N_SUPPORT
//
// After Link down, reset piggy-back setting in ASIC. Disable RDG.
//
@@ -2206,7 +2228,7 @@ VOID LinkDown(
ByteValue &= (~0x18);
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, ByteValue);
}
-
+#endif // DOT11_N_SUPPORT //
// Reset DAC
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &ByteValue);
ByteValue &= (~0x18);
@@ -2219,7 +2241,9 @@ VOID LinkDown(
RTMPSetPiggyBack(pAd,FALSE);
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_PIGGYBACK_INUSED);
+#ifdef DOT11_N_SUPPORT
pAd->CommonCfg.BACapability.word = pAd->CommonCfg.REGBACapability.word;
+#endif // DOT11_N_SUPPORT //
// Restore all settings in the following.
AsicUpdateProtect(pAd, 0, (ALLN_SETPROTECT|CCKSETPROTECT|OFDMSETPROTECT), TRUE, FALSE);
@@ -2227,6 +2251,7 @@ VOID LinkDown(
pAd->CommonCfg.IOTestParm.bCurrentAtheros = FALSE;
pAd->CommonCfg.IOTestParm.bNowAtherosBurstOn = FALSE;
+#ifdef DOT11_N_SUPPORT
#ifdef DOT11N_DRAFT3
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SCAN_2040);
pAd->CommonCfg.BSSCoexist2040.word = 0;
@@ -2236,6 +2261,7 @@ VOID LinkDown(
pAd->ChannelList[i].bEffectedChannel = FALSE;
}
#endif // DOT11N_DRAFT3 //
+#endif // DOT11_N_SUPPORT //
RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, 0x1fff);
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);
@@ -2312,6 +2338,7 @@ VOID IterateOnBssTab(
// RSN capability
pAd->StaCfg.RsnCapability = pAd->MlmeAux.SsidBssTab.BssEntry[BssIdx].WPA2.RsnCapability;
}
+
// Set Mix cipher flag
pAd->StaCfg.bMixCipher = (pAd->StaCfg.PairCipher == pAd->StaCfg.GroupCipher) ? FALSE : TRUE;
if (pAd->StaCfg.bMixCipher == TRUE)
@@ -2540,7 +2567,7 @@ ULONG MakeIbssBeacon(
UCHAR ExtRateLen = 0;
UCHAR RSNIe = IE_WPA;
- if ((pAd->StaCfg.AdhocMode == ADHOC_11B) && (pAd->CommonCfg.Channel <= 14))
+ if ((pAd->CommonCfg.PhyMode == PHY_11B) && (pAd->CommonCfg.Channel <= 14))
{
SupRate[0] = 0x82; // 1 mbps
SupRate[1] = 0x84; // 2 mbps
@@ -2650,6 +2677,52 @@ ULONG MakeIbssBeacon(
FrameLen += tmp;
}
+#ifdef DOT11_N_SUPPORT
+ if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
+ {
+ ULONG TmpLen;
+ UCHAR HtLen, HtLen1;
+
+#ifdef RT_BIG_ENDIAN
+ HT_CAPABILITY_IE HtCapabilityTmp;
+ ADD_HT_INFO_IE addHTInfoTmp;
+ USHORT b2lTmp, b2lTmp2;
+#endif
+
+ // add HT Capability IE
+ HtLen = sizeof(pAd->CommonCfg.HtCapability);
+ HtLen1 = sizeof(pAd->CommonCfg.AddHTInfo);
+#ifndef RT_BIG_ENDIAN
+ MakeOutgoingFrame(pBeaconFrame+FrameLen, &TmpLen,
+ 1, &HtCapIe,
+ 1, &HtLen,
+ HtLen, &pAd->CommonCfg.HtCapability,
+ 1, &AddHtInfoIe,
+ 1, &HtLen1,
+ HtLen1, &pAd->CommonCfg.AddHTInfo,
+ END_OF_ARGS);
+#else
+ NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen);
+ *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));
+ *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));
+
+ NdisMoveMemory(&addHTInfoTmp, &pAd->CommonCfg.AddHTInfo, HtLen1);
+ *(USHORT *)(&addHTInfoTmp.AddHtInfo2) = SWAP16(*(USHORT *)(&addHTInfoTmp.AddHtInfo2));
+ *(USHORT *)(&addHTInfoTmp.AddHtInfo3) = SWAP16(*(USHORT *)(&addHTInfoTmp.AddHtInfo3));
+
+ MakeOutgoingFrame(pBeaconFrame+FrameLen, &TmpLen,
+ 1, &HtCapIe,
+ 1, &HtLen,
+ HtLen, &HtCapabilityTmp,
+ 1, &AddHtInfoIe,
+ 1, &HtLen1,
+ HtLen1, &addHTInfoTmp,
+ END_OF_ARGS);
+#endif
+ FrameLen += TmpLen;
+ }
+#endif // DOT11_N_SUPPORT //
+
//beacon use reserved WCID 0xff
if (pAd->CommonCfg.Channel > 14)
{
@@ -2670,8 +2743,8 @@ ULONG MakeIbssBeacon(
RTMPWIEndianChange((PUCHAR)pTxWI, TYPE_TXWI);
#endif
- DBGPRINT(RT_DEBUG_TRACE, ("MakeIbssBeacon (len=%ld), SupRateLen=%d, ExtRateLen=%d, Channel=%d, AdhocMode=%ld, PhyMode=%d\n",
- FrameLen, SupRateLen, ExtRateLen, pAd->CommonCfg.Channel, pAd->StaCfg.AdhocMode, pAd->CommonCfg.PhyMode));
+ DBGPRINT(RT_DEBUG_TRACE, ("MakeIbssBeacon (len=%ld), SupRateLen=%d, ExtRateLen=%d, Channel=%d, PhyMode=%d\n",
+ FrameLen, SupRateLen, ExtRateLen, pAd->CommonCfg.Channel, pAd->CommonCfg.PhyMode));
return FrameLen;
}
diff --git a/rt2860-1.7.0.0/sta/dls.c b/rt2860-source-1.8.0.0/sta/dls.c
similarity index 95%
copy from rt2860-1.7.0.0/sta/dls.c
copy to rt2860-source-1.8.0.0/sta/dls.c
index 82edd74..ec05888 100644
--- a/rt2860-1.7.0.0/sta/dls.c
+++ b/rt2860-source-1.8.0.0/sta/dls.c
@@ -144,6 +144,7 @@ VOID MlmeDlsReqAction(
FrameLen += tmp;
}
+#ifdef DOT11_N_SUPPORT
if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
{
UCHAR HtLen;
@@ -173,6 +174,7 @@ VOID MlmeDlsReqAction(
#endif
FrameLen = FrameLen + tmp;
}
+#endif // DOT11_N_SUPPORT //
RTMPCancelTimer(&pDLS->Timer, &TimerCancelled);
Timeout = DLS_TIMEOUT;
@@ -347,6 +349,8 @@ VOID PeerDlsReqAction(
pEntry->MaxHTPhyMode.field.BW = BW_20;
pEntry->MinHTPhyMode.field.BW = BW_20;
+
+#ifdef DOT11_N_SUPPORT
pEntry->HTCapability.MCSSet[0] = 0;
pEntry->HTCapability.MCSSet[1] = 0;
@@ -356,6 +360,9 @@ VOID PeerDlsReqAction(
UCHAR j, bitmask; //k,bitmask;
CHAR ii;
+ DBGPRINT(RT_DEBUG_OFF, ("DLS - PeerDlsReqAction() Receive Peer HT Capable STA from %02x:%02x:%02x:%02x:%02x:%02x\n",
+ SA[0], SA[1], SA[2], SA[3], SA[4], SA[5]));
+
if ((HtCapability.HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF))
{
pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD;
@@ -439,6 +446,7 @@ VOID PeerDlsReqAction(
NdisMoveMemory(&pEntry->HTCapability, &HtCapability, sizeof(HT_CAPABILITY_IE));
}
+#endif // DOT11_N_SUPPORT //
pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;
pEntry->CurrTxRate = pEntry->MaxSupportedRate;
@@ -509,6 +517,7 @@ VOID PeerDlsReqAction(
FrameLen += tmp;
}
+#ifdef DOT11_N_SUPPORT
if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
{
UCHAR HtLen;
@@ -538,6 +547,7 @@ VOID PeerDlsReqAction(
#endif
FrameLen = FrameLen + tmp;
}
+#endif // DOT11_N_SUPPORT //
if (pDLS && (pDLS->Status != DLS_FINISH))
{
@@ -656,6 +666,8 @@ VOID PeerDlsRspAction(
pEntry->MaxHTPhyMode.field.BW = BW_20;
pEntry->MinHTPhyMode.field.BW = BW_20;
+
+#ifdef DOT11_N_SUPPORT
pEntry->HTCapability.MCSSet[0] = 0;
pEntry->HTCapability.MCSSet[1] = 0;
@@ -665,6 +677,9 @@ VOID PeerDlsRspAction(
UCHAR j, bitmask; //k,bitmask;
CHAR ii;
+ DBGPRINT(RT_DEBUG_OFF, ("DLS - PeerDlsRspAction Receive Peer HT Capable STA from %02x:%02x:%02x:%02x:%02x:%02x\n",
+ SA[0], SA[1], SA[2], SA[3], SA[4], SA[5]));
+
if ((HtCapability.HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF))
{
pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD;
@@ -704,8 +719,6 @@ VOID PeerDlsRspAction(
if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO)
{
- printk("@@@ pAd->CommonCfg.RegTransmitSetting.field.MCS = %d\n",
- pAd->StaCfg.DesiredTransmitSetting.field.MCS);
if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32)
{
// Fix MCS as HT Duplicated Mode
@@ -746,7 +759,7 @@ VOID PeerDlsRspAction(
NdisMoveMemory(&pEntry->HTCapability, &HtCapability, sizeof(HT_CAPABILITY_IE));
}
-
+#endif // DOT11_N_SUPPORT //
pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;
pEntry->CurrTxRate = pEntry->MaxSupportedRate;
CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE);
@@ -869,6 +882,8 @@ VOID PeerDlsRspAction(
pEntry->MaxHTPhyMode.field.BW = BW_20;
pEntry->MinHTPhyMode.field.BW = BW_20;
+
+#ifdef DOT11_N_SUPPORT
pEntry->HTCapability.MCSSet[0] = 0;
pEntry->HTCapability.MCSSet[1] = 0;
@@ -878,6 +893,9 @@ VOID PeerDlsRspAction(
UCHAR j, bitmask; //k,bitmask;
CHAR ii;
+ DBGPRINT(RT_DEBUG_OFF, ("DLS - PeerDlsRspAction Receive Peer HT Capable STA from %02x:%02x:%02x:%02x:%02x:%02x\n",
+ SA[0], SA[1], SA[2], SA[3], SA[4], SA[5]));
+
if ((HtCapability.HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF))
{
pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD;
@@ -959,6 +977,7 @@ VOID PeerDlsRspAction(
NdisMoveMemory(&pEntry->HTCapability, &HtCapability, sizeof(HT_CAPABILITY_IE));
}
+#endif // DOT11_N_SUPPORT //
pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;
pEntry->CurrTxRate = pEntry->MaxSupportedRate;
@@ -1248,8 +1267,7 @@ BOOLEAN RTMPRcvFrameDLSCheck(
BOOLEAN TimerCancelled;
CIPHER_KEY PairwiseKey;
- DBGPRINT(RT_DEBUG_INFO, ("====> RTMPRcvFrameDLSCheck\n"));
-
+
if (! pAd->CommonCfg.bDLSCapable)
return bSTAKeyFrame;
@@ -1334,7 +1352,7 @@ BOOLEAN RTMPRcvFrameDLSCheck(
}
else
DBGPRINT(RT_DEBUG_TRACE, ("MIC VALID in Msg1 of STAKey handshake! \n"));
-
+#if 1
if ((pEap->KeyDesc.KeyData[0] == 0xDD) && (pEap->KeyDesc.KeyData[2] == 0x00) && (pEap->KeyDesc.KeyData[3] == 0x0C)
&& (pEap->KeyDesc.KeyData[4] == 0x43) && (pEap->KeyDesc.KeyData[5] == 0x02))
{
@@ -1346,10 +1364,27 @@ BOOLEAN RTMPRcvFrameDLSCheck(
bSTAKeyFrame = TRUE;
}
+#else
+ if ((pEap->KeyDesc.KeyData[0] == 0xDD) && (pEap->KeyDesc.KeyData[2] == 0x00) && (pEap->KeyDesc.KeyData[3] == 0x0F)
+ && (pEap->KeyDesc.KeyData[4] == 0xAC) && (pEap->KeyDesc.KeyData[5] == 0x02))
+ {
+ pAddr = pEap->KeyDesc.KeyData + 8; // Tpe(1), Len(1), OUI(3), DataType(1), Reserved(2)
+ pSTAKey = pEap->KeyDesc.KeyData + 14; // Tpe(1), Len(1), OUI(3), DataType(1), Reserved(2), STAKey_Mac_Addr(6)
+
+ DBGPRINT(RT_DEBUG_TRACE,("DLS - Receive STAKey Message-1 from %02x:%02x:%02x:%02x:%02x:%02x Len=%d, KeyDataLen=%d\n",
+ pAddr[0], pAddr[1], pAddr[2], pAddr[3], pAddr[4], pAddr[5], Len, pEap->KeyDesc.KeyData[1]));
+
+ bSTAKeyFrame = TRUE;
+ }
+#endif
}
else if (Len >= (LENGTH_802_11 + 6 + 2 + 2 + sizeof(EAPOL_PACKET) - MAX_LEN_OF_RSNIE))
{
+#if 0
+ RTMPMoveMemory(pAd->StaCfg.ReplayCounter, pEap->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
+
+#endif
RTMPMoveMemory(pAd->StaCfg.DlsReplayCounter, pEap->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
DBGPRINT(RT_DEBUG_TRACE,("DLS - Sniff replay counter 2(%02x-%02x-%02x-%02x-%02x-%02x-%02x-%02x) Len=%ld, KeyDataLen=%d\n",
pAd->StaCfg.ReplayCounter[0], pAd->StaCfg.ReplayCounter[1], pAd->StaCfg.ReplayCounter[2],
@@ -1384,6 +1419,7 @@ BOOLEAN RTMPRcvFrameDLSCheck(
//AsicAddKeyEntry(pAd, (USHORT)(i + 2), BSS0, 0, &PairwiseKey, TRUE, TRUE); // reserve 0 for multicast, 1 for unicast
//AsicUpdateRxWCIDTable(pAd, (USHORT)(i + 2), pAddr);
// Add Pair-wise key to Asic
+#ifdef RT2860
AsicAddPairwiseKeyEntry(pAd,
pAd->StaCfg.DLSEntry[i].MacAddr,
(UCHAR)pAd->StaCfg.DLSEntry[i].MacTabMatchWCID,
@@ -1395,6 +1431,7 @@ BOOLEAN RTMPRcvFrameDLSCheck(
PairwiseKey.CipherAlg,
pEntry);
+#endif // RT2860 //
NdisMoveMemory(&pEntry->PairwiseKey, &PairwiseKey, sizeof(CIPHER_KEY));
DBGPRINT(RT_DEBUG_TRACE,("DLS - Receive STAKey Message-1 (Peer STA MAC Address STAKey) \n"));
@@ -1440,6 +1477,7 @@ BOOLEAN RTMPRcvFrameDLSCheck(
//AsicAddKeyEntry(pAd, (USHORT)(i + 2), BSS0, 0, &PairwiseKey, TRUE, TRUE); // reserve 0 for multicast, 1 for unicast
//AsicUpdateRxWCIDTable(pAd, (USHORT)(i + 2), pAddr);
// Add Pair-wise key to Asic
+#ifdef RT2860
AsicAddPairwiseKeyEntry(pAd,
pAd->StaCfg.DLSEntry[i].MacAddr,
(UCHAR)pAd->StaCfg.DLSEntry[i].MacTabMatchWCID,
@@ -1450,7 +1488,7 @@ BOOLEAN RTMPRcvFrameDLSCheck(
0,
PairwiseKey.CipherAlg,
pEntry);
-
+#endif // RT2860 //
NdisMoveMemory(&pEntry->PairwiseKey, &PairwiseKey, sizeof(CIPHER_KEY));
DBGPRINT(RT_DEBUG_TRACE,("DLS - Receive STAKey Message-1 (Initiator STA MAC Address STAKey)\n"));
@@ -1483,8 +1521,7 @@ BOOLEAN RTMPRcvFrameDLSCheck(
bFindEntry = TRUE;
}
}
-
- DBGPRINT(RT_DEBUG_INFO, ("<==== RTMPRcvFrameDLSCheck\n"));
+
return bSTAKeyFrame;
}
@@ -1905,6 +1942,7 @@ MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
pEntry->MatchDlsEntryIdx = DlsEntryIdx;
pEntry->AuthMode = pAd->StaCfg.AuthMode;
pEntry->WepStatus = pAd->StaCfg.WepStatus;
+ pEntry->PortSecured = WPA_802_1X_PORT_SECURED;
DBGPRINT(RT_DEBUG_TRACE, ("MacTableInsertDlsEntry - allocate entry #%d, Total= %d\n",pEntry->Aid, pAd->MacTab.Size));
@@ -2040,10 +2078,36 @@ INT Set_DlsEntryInfo_Display_Proc(
{
if ((pAd->StaCfg.DLSEntry[i].Valid) && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH))
{
+ PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[pAd->StaCfg.DLSEntry[i].MacTabMatchWCID];
+
printk("%02x:%02x:%02x:%02x:%02x:%02x ",
pAd->StaCfg.DLSEntry[i].MacAddr[0], pAd->StaCfg.DLSEntry[i].MacAddr[1], pAd->StaCfg.DLSEntry[i].MacAddr[2],
pAd->StaCfg.DLSEntry[i].MacAddr[3], pAd->StaCfg.DLSEntry[i].MacAddr[4], pAd->StaCfg.DLSEntry[i].MacAddr[5]);
printk("%-8d\n", pAd->StaCfg.DLSEntry[i].TimeOut);
+
+ printk("\n");
+ printk("\n%-19s%-4s%-4s%-4s%-4s%-8s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s\n",
+ "MAC", "AID", "BSS", "PSM", "WMM", "MIMOPS", "RSSI0", "RSSI1", "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC");
+ printk("%02X:%02X:%02X:%02X:%02X:%02X ",
+ pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2],
+ pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]);
+ printk("%-4d", (int)pEntry->Aid);
+ printk("%-4d", (int)pEntry->apidx);
+ printk("%-4d", (int)pEntry->PsMode);
+ printk("%-4d", (int)CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE));
+ printk("%-8d", (int)pEntry->MmpsMode);
+ printk("%-7d", pEntry->RssiSample.AvgRssi0);
+ printk("%-7d", pEntry->RssiSample.AvgRssi1);
+ printk("%-7d", pEntry->RssiSample.AvgRssi2);
+ printk("%-10s", GetPhyMode(pEntry->HTPhyMode.field.MODE));
+ printk("%-6s", GetBW(pEntry->HTPhyMode.field.BW));
+ printk("%-6d", pEntry->HTPhyMode.field.MCS);
+ printk("%-6d", pEntry->HTPhyMode.field.ShortGI);
+ printk("%-6d", pEntry->HTPhyMode.field.STBC);
+ printk("%-10d, %d, %d%%\n", pEntry->DebugFIFOCount, pEntry->DebugTxCount,
+ (pEntry->DebugTxCount) ? ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0);
+ printk("\n");
+
}
}
diff --git a/rt2860-1.7.0.0/sta/rtmp_data.c b/rt2860-source-1.8.0.0/sta/rtmp_data.c
similarity index 96%
copy from rt2860-1.7.0.0/sta/rtmp_data.c
copy to rt2860-source-1.8.0.0/sta/rtmp_data.c
index cecfa6c..a186dc8 100644
--- a/rt2860-1.7.0.0/sta/rtmp_data.c
+++ b/rt2860-source-1.8.0.0/sta/rtmp_data.c
@@ -90,7 +90,7 @@ VOID STARxEAPOLFrameIndicate(
pAd->IndicateMediaState = NdisMediaStateConnected;
pAd->ExtraInfo = GENERAL_LINK_UP;
#endif // RT2860 //
- // For Preventing ShardKey Table is cleared by remove key procedure.
+ // For Preventing ShardKey Table is cleared by remove key procedure.
pAd->SharedKey[BSS0][idx].CipherAlg = CipherAlg;
pAd->SharedKey[BSS0][idx].KeyLen = pAd->StaCfg.DesireSharedKey[idx].KeyLen;
NdisMoveMemory(pAd->SharedKey[BSS0][idx].Key,
@@ -177,11 +177,13 @@ VOID STARxDataFrameAnnounce(
else
{
RX_BLK_SET_FLAG(pRxBlk, fRX_EAP);
+#ifdef DOT11_N_SUPPORT
if (RX_BLK_TEST_FLAG(pRxBlk, fRX_AMPDU) && (pAd->CommonCfg.bDisableReordering == 0))
{
Indicate_AMPDU_Packet(pAd, pRxBlk, FromWhichBSSID);
}
else
+#endif // DOT11_N_SUPPORT //
{
// Determin the destination of the EAP frame
// to WPA state machine or upper layer
@@ -409,7 +411,6 @@ VOID STAHandleRxDataFrame(
{
AsicUpdateProtect(pAd, 8, ALLN_SETPROTECT, TRUE, FALSE);
}
- DBGPRINT(RT_DEBUG_INFO, ("Atheros Problem. Turn on RTS/CTS!!!\n"));
}
}
@@ -447,17 +448,19 @@ VOID STAHandleRxDataFrame(
if (pHeader->FC.Order)
{
#ifdef AGGREGATION_SUPPORT
- if ((pRxWI->PHYMODE < MODE_HTMIX) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)))
+ if ((pRxWI->PHYMODE <= MODE_OFDM) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED)))
{
RX_BLK_SET_FLAG(pRxBlk, fRX_ARALINK);
}
else
#endif
{
+#ifdef DOT11_N_SUPPORT
RX_BLK_SET_FLAG(pRxBlk, fRX_HTC);
// skip HTC contorl field
pRxBlk->pData += 4;
pRxBlk->DataSize -= 4;
+#endif // DOT11_N_SUPPORT //
}
}
@@ -470,10 +473,13 @@ VOID STAHandleRxDataFrame(
pRxBlk->pData += 2;
}
+#ifdef DOT11_N_SUPPORT
if (pRxD->BA)
{
RX_BLK_SET_FLAG(pRxBlk, fRX_AMPDU);
}
+#endif // DOT11_N_SUPPORT //
+
//
// Case I Process Broadcast & Multicast data frame
@@ -499,13 +505,32 @@ VOID STAHandleRxDataFrame(
}
Indicate_Legacy_Packet(pAd, pRxBlk, FromWhichBSSID);
- DBGPRINT_RAW(RT_DEBUG_INFO, ("!!! report BCAST DATA to LLC (len=%d) !!!\n", pRxBlk->DataSize));
return;
}
else if (pRxD->U2M)
{
pAd->LastRxRate = (USHORT)((pRxWI->MCS) + (pRxWI->BW <<7) + (pRxWI->ShortGI <<8)+ (pRxWI->PHYMODE <<14)) ;
+
+#ifdef QOS_DLS_SUPPORT
+ if (RX_BLK_TEST_FLAG(pRxBlk, fRX_DLS))
+ {
+ MAC_TABLE_ENTRY *pDlsEntry = NULL;
+
+ pDlsEntry = DlsEntryTableLookupByWcid(pAd, pRxWI->WirelessCliID, pHeader->Addr2, TRUE);
+ if(pDlsEntry)
+ Update_Rssi_Sample(pAd, &pDlsEntry->RssiSample, pRxWI);
+ }
+ else
+#endif // QOS_DLS_SUPPORT //
+ if (ADHOC_ON(pAd))
+ {
+ pEntry = MacTableLookup(pAd, pHeader->Addr2);
+ if (pEntry)
+ Update_Rssi_Sample(pAd, &pEntry->RssiSample, pRxWI);
+ }
+
+
Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI);
pAd->StaCfg.LastSNR0 = (UCHAR)(pRxWI->SNR0);
@@ -567,6 +592,7 @@ VOID STAHandleRxMgmtFrame(
do
{
+
// We should collect RSSI not only U2M data but also my beacon
if ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)))
{
@@ -594,21 +620,24 @@ VOID STAHandleRxControlFrame(
IN PRTMP_ADAPTER pAd,
IN RX_BLK *pRxBlk)
{
+#ifdef DOT11_N_SUPPORT
PRXWI_STRUC pRxWI = pRxBlk->pRxWI;
+#endif // DOT11_N_SUPPORT //
PHEADER_802_11 pHeader = pRxBlk->pHeader;
PNDIS_PACKET pRxPacket = pRxBlk->pRxPacket;
switch (pHeader->FC.SubType)
{
case SUBTYPE_BLOCK_ACK_REQ:
+#ifdef DOT11_N_SUPPORT
{
CntlEnqueueForRecv(pAd, pRxWI->WirelessCliID, (pRxWI->MPDUtotalByteCount), (PFRAME_BA_REQ)pHeader);
}
break;
+#endif // DOT11_N_SUPPORT //
case SUBTYPE_BLOCK_ACK:
case SUBTYPE_ACK:
- default:
- DBGPRINT(RT_DEBUG_INFO,("ignore CNTL (subtype=%d)\n", pHeader->FC.SubType));
+ default:
break;
}
@@ -635,7 +664,6 @@ VOID STAHandleRxControlFrame(
Need to consider QOS DATA format when converting to 802.3
========================================================================
*/
-
BOOLEAN STARxDoneInterruptHandle(
IN PRTMP_ADAPTER pAd,
IN BOOLEAN argc)
@@ -800,7 +828,6 @@ BOOLEAN STARxDoneInterruptHandle(
VOID RTMPHandleTwakeupInterrupt(
IN PRTMP_ADAPTER pAd)
{
- DBGPRINT(RT_DEBUG_INFO, ("Twakeup Expired... !!!\n"));
AsicForceWakeup(pAd, FALSE);
}
@@ -832,8 +859,7 @@ VOID STASendPackets(
PNDIS_PACKET pPacket;
BOOLEAN allowToSend = FALSE;
- DBGPRINT(RT_DEBUG_INFO, ("====> STASendPackets\n"));
-
+
for (Index = 0; Index < NumberOfPackets; Index++)
{
pPacket = ppPacketArray[Index];
@@ -935,8 +961,7 @@ NDIS_STATUS STASendPacket(
return NDIS_STATUS_FAILURE;
}
- DBGPRINT(RT_DEBUG_LOUD,("RTMPSendPacket --> pSrcBufVA == %p, SrcBufLen=%d\n", pSrcBufVA, SrcBufLen));
-
+
if (SrcBufLen < 14)
{
DBGPRINT(RT_DEBUG_ERROR,("STASendPacket --> Ndis Packet buffer error !!!\n"));
@@ -991,7 +1016,8 @@ NDIS_STATUS STASendPacket(
return NDIS_STATUS_FAILURE;
}
- if (ADHOC_ON(pAd))
+ if (ADHOC_ON(pAd)
+ )
{
RTMP_SET_PACKET_WCID(pPacket, (UCHAR)pEntry->Aid);
}
@@ -1002,6 +1028,7 @@ NDIS_STATUS STASendPacket(
RTMPCheckEtherType(pAd, pPacket);
+
//
// WPA 802.1x secured port control - drop all non-802.1x frame before port secured
//
@@ -1040,8 +1067,10 @@ NDIS_STATUS STASendPacket(
NumberOfFrag = 1; // Aggregation overwhelms fragmentation
else if (CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_AMSDU_INUSED))
NumberOfFrag = 1; // Aggregation overwhelms fragmentation
+#ifdef DOT11_N_SUPPORT
else if ((pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTMIX) || (pAd->StaCfg.HTPhyMode.field.MODE == MODE_HTGREENFIELD))
NumberOfFrag = 1; // MIMO RATE overwhelms fragmentation
+#endif // DOT11_N_SUPPORT //
else
{
// The calculated "NumberOfFrag" is a rough estimation because of various
@@ -1144,9 +1173,9 @@ NDIS_STATUS STASendPacket(
}
RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags);
+#ifdef DOT11_N_SUPPORT
if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE)&&
- (pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE) &&
- INFRA_ON(pAd))
+ (pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE))
{
if (((pEntry->TXBAbitmap & (1<<UserPriority)) == 0) &&
((pEntry->BADeclineBitmap & (1<<UserPriority)) == 0) &&
@@ -1162,6 +1191,7 @@ NDIS_STATUS STASendPacket(
BAOriSessionSetUp(pAd, pEntry, 0, 0, 10, FALSE);
}
}
+#endif // DOT11_N_SUPPORT //
pAd->RalinkCounters.OneSecOsTxCount[QueIdx]++; // TODO: for debug only. to be removed
return NDIS_STATUS_SUCCESS;
@@ -1545,7 +1575,7 @@ VOID STABuildCommon802_11Header(
pHeader_802_11->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE);
}
-
+#ifdef DOT11_N_SUPPORT
VOID STABuildCache802_11Header(
IN RTMP_ADAPTER *pAd,
IN TX_BLK *pTxBlk,
@@ -1595,7 +1625,10 @@ VOID STABuildCache802_11Header(
}
else
#endif // QOS_DLS_SUPPORT //
- COPY_MAC_ADDR(pHeader80211->Addr3, pTxBlk->pSrcBufHeader);
+ if (ADHOC_ON(pAd))
+ COPY_MAC_ADDR(pHeader80211->Addr3, pAd->CommonCfg.Bssid);
+ else
+ COPY_MAC_ADDR(pHeader80211->Addr3, pTxBlk->pSrcBufHeader);
}
// -----------------------------------------------------------------
@@ -1606,7 +1639,7 @@ VOID STABuildCache802_11Header(
else
pHeader80211->FC.PwrMgmt = (pAd->StaCfg.Psm == PWR_SAVE);
}
-
+#endif // DOT11_N_SUPPORT //
static inline PUCHAR STA_Build_ARalink_Frame_Header(
IN RTMP_ADAPTER *pAd,
@@ -1666,7 +1699,7 @@ static inline PUCHAR STA_Build_ARalink_Frame_Header(
}
-
+#ifdef DOT11_N_SUPPORT
static inline PUCHAR STA_Build_AMSDU_Frame_Header(
IN RTMP_ADAPTER *pAd,
IN TX_BLK *pTxBlk)
@@ -1725,7 +1758,6 @@ VOID STA_AMPDU_Frame_Tx(
MAC_TABLE_ENTRY *pMacEntry;
BOOLEAN bVLANPkt;
PQUEUE_ENTRY pQEntry;
-
ASSERT(pTxBlk);
@@ -1757,6 +1789,7 @@ VOID STA_AMPDU_Frame_Tx(
pHeaderBufPtr = &pTxBlk->HeaderBuf[TXINFO_SIZE + TXWI_SIZE];
}
+
pHeader_802_11 = (HEADER_802_11 *) pHeaderBufPtr;
// skip common header
@@ -1812,18 +1845,22 @@ VOID STA_AMPDU_Frame_Tx(
pHeaderBufPtr = (PCHAR) ROUND_UP(pHeaderBufPtr, 4);
pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen);
- //
- // Insert LLC-SNAP encapsulation - 8 octets
- //
- EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData-2, pTxBlk->pExtraLlcSnapEncap);
- if (pTxBlk->pExtraLlcSnapEncap)
{
- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6);
- pHeaderBufPtr += 6;
- // get 2 octets (TypeofLen)
- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2);
- pHeaderBufPtr += 2;
- pTxBlk->MpduHeaderLen += LENGTH_802_1_H;
+
+ //
+ // Insert LLC-SNAP encapsulation - 8 octets
+ //
+ EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(pTxBlk->pSrcBufData-2, pTxBlk->pExtraLlcSnapEncap);
+ if (pTxBlk->pExtraLlcSnapEncap)
+ {
+ NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6);
+ pHeaderBufPtr += 6;
+ // get 2 octets (TypeofLen)
+ NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufData-2, 2);
+ pHeaderBufPtr += 2;
+ pTxBlk->MpduHeaderLen += LENGTH_802_1_H;
+ }
+
}
if (pMacEntry->isCached)
@@ -1984,7 +2021,7 @@ VOID STA_AMSDU_Frame_Tx(
//
HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
}
-
+#endif // DOT11_N_SUPPORT //
VOID STA_Legacy_Frame_Tx(
IN PRTMP_ADAPTER pAd,
@@ -1995,7 +2032,6 @@ VOID STA_Legacy_Frame_Tx(
USHORT FreeNumber;
BOOLEAN bVLANPkt;
PQUEUE_ENTRY pQEntry;
-
ASSERT(pTxBlk);
@@ -2026,6 +2062,7 @@ VOID STA_Legacy_Frame_Tx(
STAFindCipherAlgorithm(pAd, pTxBlk);
STABuildCommon802_11Header(pAd, pTxBlk);
+
// skip 802.3 header
pTxBlk->pSrcBufData = pTxBlk->pSrcBufHeader + LENGTH_802_3;
pTxBlk->SrcBufLen -= LENGTH_802_3;
@@ -2054,34 +2091,35 @@ VOID STA_Legacy_Frame_Tx(
pTxBlk->MpduHeaderLen += 2;
}
- //
- // padding at front of LLC header
- // LLC header should locate at 4-octets aligment
- //
+ // The remaining content of MPDU header should locate at 4-octets aligment
pTxBlk->HdrPadLen = (ULONG)pHeaderBufPtr;
pHeaderBufPtr = (PCHAR) ROUND_UP(pHeaderBufPtr, 4);
pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen);
- //
- // Insert LLC-SNAP encapsulation - 8 octets
- //
- //
- // if original Ethernet frame contains no LLC/SNAP,
- // then an extra LLC/SNAP encap is required
- //
- EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, pTxBlk->pExtraLlcSnapEncap);
- if (pTxBlk->pExtraLlcSnapEncap)
{
- UCHAR vlan_size;
- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6);
- pHeaderBufPtr += 6;
- // skip vlan tag
- vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0;
- // get 2 octets (TypeofLen)
- NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader+12+vlan_size, 2);
- pHeaderBufPtr += 2;
- pTxBlk->MpduHeaderLen += LENGTH_802_1_H;
+ //
+ // Insert LLC-SNAP encapsulation - 8 octets
+ //
+ //
+ // if original Ethernet frame contains no LLC/SNAP,
+ // then an extra LLC/SNAP encap is required
+ //
+ EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(pTxBlk->pSrcBufHeader, pTxBlk->pExtraLlcSnapEncap);
+ if (pTxBlk->pExtraLlcSnapEncap)
+ {
+ UCHAR vlan_size;
+
+ NdisMoveMemory(pHeaderBufPtr, pTxBlk->pExtraLlcSnapEncap, 6);
+ pHeaderBufPtr += 6;
+ // skip vlan tag
+ vlan_size = (bVLANPkt) ? LENGTH_802_1Q : 0;
+ // get 2 octets (TypeofLen)
+ NdisMoveMemory(pHeaderBufPtr, pTxBlk->pSrcBufHeader+12+vlan_size, 2);
+ pHeaderBufPtr += 2;
+ pTxBlk->MpduHeaderLen += LENGTH_802_1_H;
+ }
+
}
//
@@ -2157,6 +2195,7 @@ VOID STA_ARalink_Frame_Tx(
// will be updated after final frame was handled.
RTMPWriteTxWI_Data(pAd, (PTXWI_STRUC)(&pTxBlk->HeaderBuf[TXINFO_SIZE]), pTxBlk);
+
//
// Insert LLC-SNAP encapsulation - 8 octets
//
@@ -2295,6 +2334,8 @@ VOID STA_Fragment_Frame_Tx(
pHeaderBufPtr = (PCHAR) ROUND_UP(pHeaderBufPtr, 4);
pTxBlk->HdrPadLen = (ULONG)(pHeaderBufPtr - pTxBlk->HdrPadLen);
+
+
//
// Insert LLC-SNAP encapsulation - 8 octets
//
@@ -2467,7 +2508,7 @@ NDIS_STATUS STAHardTransmit(
pPacket = QUEUE_ENTRY_TO_PACKET(pTxBlk->TxPacketList.Head);
-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
+#if 0 //def CARRIER_DETECTION_SUPPORT // Roger sync Carrier
if ((pAd->CommonCfg.CarrierDetect.Enable == TRUE) && (isCarrierDetectExist(pAd) == TRUE))
{
DBGPRINT(RT_DEBUG_INFO,("STAHardTransmit --> radar detect not in normal mode !!!\n"));
@@ -2490,7 +2531,8 @@ NDIS_STATUS STAHardTransmit(
// It should not change PSM bit, when APSD turn on.
if ((!(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable) && (pAd->CommonCfg.bAPSDForcePowerSave == FALSE))
- || (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket)))
+ || (RTMP_GET_PACKET_EAPOL(pTxBlk->pPacket))
+ || (RTMP_GET_PACKET_WAI(pTxBlk->pPacket)))
{
if ((pAd->StaCfg.Psm == PWR_SAVE) &&
(pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeFast_PSP))
@@ -2499,12 +2541,14 @@ NDIS_STATUS STAHardTransmit(
switch (pTxBlk->TxFrameType)
{
+#ifdef DOT11_N_SUPPORT
case TX_AMPDU_FRAME:
STA_AMPDU_Frame_Tx(pAd, pTxBlk);
break;
case TX_AMSDU_FRAME:
STA_AMSDU_Frame_Tx(pAd, pTxBlk);
break;
+#endif // DOT11_N_SUPPORT //
case TX_LEGACY_FRAME:
STA_Legacy_Frame_Tx(pAd, pTxBlk);
break;
@@ -2556,6 +2600,15 @@ VOID Sta_Announce_or_Forward_802_3_Packet(
IN PNDIS_PACKET pPacket,
IN UCHAR FromWhichBSSID)
{
- announce_802_3_packet(pAd, pPacket);
+ if (TRUE
+ )
+ {
+ announce_802_3_packet(pAd, pPacket);
+ }
+ else
+ {
+ // release packet
+ RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
+ }
}
diff --git a/rt2860-1.7.0.0/sta/sanity.c b/rt2860-source-1.8.0.0/sta/sanity.c
similarity index 99%
copy from rt2860-1.7.0.0/sta/sanity.c
copy to rt2860-source-1.8.0.0/sta/sanity.c
index cc890ea..2b32676 100644
--- a/rt2860-1.7.0.0/sta/sanity.c
+++ b/rt2860-source-1.8.0.0/sta/sanity.c
@@ -184,6 +184,7 @@ BOOLEAN PeerAssocRspSanity(
}
break;
+#ifdef DOT11_N_SUPPORT
case IE_ADD_HT:
case IE_ADD_HT2:
if (pEid->Len >= sizeof(ADD_HT_INFO_IE))
@@ -212,7 +213,7 @@ BOOLEAN PeerAssocRspSanity(
{
DBGPRINT(RT_DEBUG_WARN, ("PeerAssocRspSanity - wrong IE_SECONDARY_CH_OFFSET. \n"));
}
-
+#endif // DOT11_N_SUPPORT //
break;
case IE_AIRONET_CKIP:
// 0. Check Aironet IE length, it must be larger or equal to 28
@@ -343,7 +344,7 @@ BOOLEAN PeerProbeReqSanity(
}
else
{
- if ((pAd->StaCfg.AdhocMode == 2) && (RateLen < 8))
+ if ((pAd->CommonCfg.PhyMode == PHY_11G) && (RateLen < 8))
return (FALSE);
}
diff --git a/rt2860-1.7.0.0/sta/sync.c b/rt2860-source-1.8.0.0/sta/sync.c
similarity index 85%
copy from rt2860-1.7.0.0/sta/sync.c
copy to rt2860-source-1.8.0.0/sta/sync.c
index d41239e..040307d 100644
--- a/rt2860-1.7.0.0/sta/sync.c
+++ b/rt2860-source-1.8.0.0/sta/sync.c
@@ -37,6 +37,41 @@
*/
#include "rt_config.h"
+#define AC0_DEF_TXOP 0
+#define AC1_DEF_TXOP 0
+#define AC2_DEF_TXOP 94
+#define AC3_DEF_TXOP 47
+
+VOID AdhocTurnOnQos(
+ IN PRTMP_ADAPTER pAd)
+{
+ // Turn on QOs if use HT rate.
+ if (pAd->CommonCfg.APEdcaParm.bValid == FALSE)
+ {
+ pAd->CommonCfg.APEdcaParm.bValid = TRUE;
+ pAd->CommonCfg.APEdcaParm.Aifsn[0] = 3;
+ pAd->CommonCfg.APEdcaParm.Aifsn[1] = 7;
+ pAd->CommonCfg.APEdcaParm.Aifsn[2] = 1;
+ pAd->CommonCfg.APEdcaParm.Aifsn[3] = 1;
+
+ pAd->CommonCfg.APEdcaParm.Cwmin[0] = 4;
+ pAd->CommonCfg.APEdcaParm.Cwmin[1] = 4;
+ pAd->CommonCfg.APEdcaParm.Cwmin[2] = 3;
+ pAd->CommonCfg.APEdcaParm.Cwmin[3] = 2;
+
+ pAd->CommonCfg.APEdcaParm.Cwmax[0] = 10;
+ pAd->CommonCfg.APEdcaParm.Cwmax[1] = 6;
+ pAd->CommonCfg.APEdcaParm.Cwmax[2] = 4;
+ pAd->CommonCfg.APEdcaParm.Cwmax[3] = 3;
+
+ pAd->CommonCfg.APEdcaParm.Txop[0] = 0;
+ pAd->CommonCfg.APEdcaParm.Txop[1] = 0;
+ pAd->CommonCfg.APEdcaParm.Txop[2] = AC2_DEF_TXOP;
+ pAd->CommonCfg.APEdcaParm.Txop[3] = AC3_DEF_TXOP;
+ }
+ AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);
+}
+
/*
==========================================================================
Description:
@@ -97,7 +132,6 @@ VOID BeaconTimeout(
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3)
{
- UCHAR BBPValue = 0;
RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext;
DBGPRINT(RT_DEBUG_TRACE,("SYNC - BeaconTimeout\n"));
@@ -107,8 +141,11 @@ VOID BeaconTimeout(
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))
return;
- if (pAd->CommonCfg.BBPCurrentBW == BW_40)
+#ifdef DOT11_N_SUPPORT
+ if ((pAd->CommonCfg.BBPCurrentBW == BW_40)
+ )
{
+ UCHAR BBPValue = 0;
AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
@@ -117,6 +154,7 @@ VOID BeaconTimeout(
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to 40MHz channel %d, Total BSS[%02d]\n",pAd->CommonCfg.CentralChannel, pAd->ScanTab.BssNr));
}
+#endif // DOT11_N_SUPPORT //
MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_BEACON_TIMEOUT, 0, NULL);
RT28XX_MLME_HANDLER(pAd);
@@ -138,9 +176,8 @@ VOID ScanTimeout(
IN PVOID SystemSpecific3)
{
RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext;
-
- DBGPRINT(RT_DEBUG_INFO,("SYNC - Scan Timeout \n"));
+
// Do nothing if the driver is starting halt state.
// This might happen when timer already been fired before cancel timer with mlmehalt
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))
@@ -435,9 +472,9 @@ VOID MlmeJoinReqAction(
FrameLen += Tmp;
}
+
MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
MlmeFreeMemory(pAd, pOutBuffer);
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - send ProbeReq @ channel=%d, Len=%ld\n", pAd->MlmeAux.Channel, FrameLen));
}
} while (FALSE);
@@ -466,11 +503,6 @@ VOID MlmeStartReqAction(
LARGE_INTEGER TimeStamp;
BOOLEAN Privacy;
USHORT Status;
-#ifdef SINGLE_ADHOC_LINKUP
- ULONG Bssidx;
- CF_PARM CfParm;
- CfParm.bValid = FALSE;
-#endif
// Init Variable IE structure
pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
@@ -504,7 +536,6 @@ VOID MlmeStartReqAction(
pAd->MlmeAux.AtimWin = pAd->StaCfg.AtimWin;
pAd->MlmeAux.Channel = pAd->CommonCfg.Channel;
- // TODO: if consider 40MHz BW in Adhoc
pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
pAd->MlmeAux.CentralChannel = pAd->CommonCfg.CentralChannel;
@@ -514,6 +545,7 @@ VOID MlmeStartReqAction(
pAd->MlmeAux.ExtRateLen = pAd->CommonCfg.ExtRateLen;
NdisMoveMemory(pAd->MlmeAux.ExtRate, pAd->CommonCfg.ExtRate, MAX_LEN_OF_SUPPORTED_RATES);
RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen);
+#ifdef DOT11_N_SUPPORT
if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
{
RTMPUpdateHTIE(&pAd->CommonCfg.DesiredHtPhy, &pAd->StaCfg.DesiredHtPhyInfo.MCSSet[0], &pAd->MlmeAux.HtCapability, &pAd->MlmeAux.AddHtInfo);
@@ -522,6 +554,7 @@ VOID MlmeStartReqAction(
DBGPRINT(RT_DEBUG_TRACE, ("SYNC -pAd->StaActive.SupportedHtPhy.bHtEnable = TRUE\n"));
}
else
+#endif // DOT11_N_SUPPORT //
{
pAd->MlmeAux.HtCapabilityLen = 0;
pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE;
@@ -537,19 +570,6 @@ VOID MlmeStartReqAction(
DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeStartReqAction(ch= %d,sup rates= %d, ext rates=%d)\n",
pAd->MlmeAux.Channel, pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen));
-#ifdef SINGLE_ADHOC_LINKUP
- // Add itself as the entry within BSS table
- Bssidx = BssTableSearch(&pAd->ScanTab, pAd->MlmeAux.Bssid, pAd->MlmeAux.Channel);
- if (Bssidx == BSS_NOT_FOUND)
- {
- Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, pAd->MlmeAux.Bssid,Ssid, SsidLen, pAd->MlmeAux.BssType,
- pAd->MlmeAux.BeaconPeriod, &CfParm, pAd->MlmeAux.AtimWin, pAd->MlmeAux.CapabilityInfo,
- &pAd->MlmeAux.HtCapability, pAd->MlmeAux.HtCapabilityLen, &pAd->CommonCfg.AddHTInfo, SIZE_ADD_HT_INFO_IE, pAd->MlmeAux.NewExtChannelOffset,
- pAd->MlmeAux.SupRate, pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRate, pAd->MlmeAux.ExtRateLen,
- &pAd->MlmeAux.SupportedHtPhy, pAd->MlmeAux.Channel, pAd->BbpRssiToDbmDelta - 30, TimeStamp, 0, NULL, NULL, 0, pVIE);
- }
-#endif
-
pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
Status = MLME_SUCCESS;
MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_START_CONF, 2, &Status);
@@ -594,7 +614,7 @@ VOID PeerBeaconAtScanAction(
NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
HT_CAPABILITY_IE HtCapability;
ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE
- UCHAR HtCapabilityLen, PreNHtCapabilityLen;
+ UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0;
UCHAR AddHtInfoLen;
UCHAR NewExtChannelOffset = 0xff;
@@ -602,9 +622,10 @@ VOID PeerBeaconAtScanAction(
// Init Variable IE structure
pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
pVIE->Length = 0;
+#ifdef DOT11_N_SUPPORT
RTMPZeroMemory(&HtCapability, sizeof(HtCapability));
RTMPZeroMemory(&AddHtInfo, sizeof(ADD_HT_INFO_IE));
-
+#endif // DOT11_N_SUPPORT //
if (PeerBeaconAndProbeRspSanity(pAd,
Elem->Msg,
@@ -655,9 +676,11 @@ VOID PeerBeaconAtScanAction(
Rssi = RTMPMaxRssi(pAd, ConvertToRssi(pAd, Elem->Rssi0, RSSI_0), ConvertToRssi(pAd, Elem->Rssi1, RSSI_1), ConvertToRssi(pAd, Elem->Rssi2, RSSI_2));
+
+#ifdef DOT11_N_SUPPORT
if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0))
HtCapabilityLen = SIZE_HT_CAP_IE;
-
+#endif // DOT11_N_SUPPORT //
if ((pAd->StaCfg.CCXReqType != MSRN_TYPE_UNUSED) && (Channel == pAd->StaCfg.CCXScanChannel))
{
Idx = BssTableSetEntry(pAd, &pAd->StaCfg.CCXBssTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod,
@@ -679,6 +702,7 @@ VOID PeerBeaconAtScanAction(
&CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability,
&AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, Rssi, TimeStamp, CkipFlag,
&EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE);
+#ifdef DOT11_N_SUPPORT
#ifdef DOT11N_DRAFT3
if (pAd->ChannelList[pAd->CommonCfg.ChannelListIdx].bEffectedChannel == TRUE)
{
@@ -687,7 +711,7 @@ VOID PeerBeaconAtScanAction(
TriEventTableSetEntry(pAd, &pAd->CommonCfg.TriggerEventTab, Bssid, &HtCapability, HtCapabilityLen, RegClass, Channel);
}
#endif // DOT11N_DRAFT3 //
-
+#endif // DOT11_N_SUPPORT //
if (Idx != BSS_NOT_FOUND)
{
NdisMoveMemory(pAd->ScanTab.BssEntry[Idx].PTSF, &Elem->Msg[24], 4);
@@ -732,9 +756,12 @@ VOID PeerBeaconAtJoinAction(
ULONG Idx;
HT_CAPABILITY_IE HtCapability;
ADD_HT_INFO_IE AddHtInfo; // AP might use this additional ht info IE
- UCHAR HtCapabilityLen, PreNHtCapabilityLen;
+ UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0;
UCHAR AddHtInfoLen;
- UCHAR NewExtChannelOffset = 0xff, CentralChannel;
+ UCHAR NewExtChannelOffset = 0xff;
+#ifdef DOT11_N_SUPPORT
+ UCHAR CentralChannel;
+#endif // DOT11_N_SUPPORT //
// Init Variable IE structure
pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
@@ -784,7 +811,7 @@ VOID PeerBeaconAtJoinAction(
pVIE))
{
// Disqualify 11b only adhoc when we are in 11g only adhoc mode
- if ((BssType == BSS_ADHOC) && (pAd->StaCfg.AdhocMode == 2) && ((SupRateLen+ExtRateLen)< 12))
+ if ((BssType == BSS_ADHOC) && (pAd->CommonCfg.PhyMode == PHY_11G) && ((SupRateLen+ExtRateLen)< 12))
return;
// BEACON from desired BSS/IBSS found. We should be able to decide most
@@ -848,15 +875,19 @@ VOID PeerBeaconAtJoinAction(
pAd->MlmeAux.ExtRateLen = ExtRateLen;
NdisMoveMemory(pAd->MlmeAux.ExtRate, ExtRate, ExtRateLen);
RTMPCheckRates(pAd, pAd->MlmeAux.ExtRate, &pAd->MlmeAux.ExtRateLen);
+
+ NdisZeroMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, 16);
+#ifdef DOT11_N_SUPPORT
pAd->MlmeAux.NewExtChannelOffset = NewExtChannelOffset;
pAd->MlmeAux.HtCapabilityLen = HtCapabilityLen;
- NdisZeroMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, 16);
+
// filter out un-supported ht rates
if (((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0)) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
{
RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE);
RTMPMoveMemory(&pAd->MlmeAux.AddHtInfo, &AddHtInfo, SIZE_ADD_HT_INFO_IE);
- // StaActive.SupportedHtPhy.MCSSet stores Peer AP's 11n Rx capability
+
+ // StaActive.SupportedHtPhy.MCSSet stores Peer AP's 11n Rx capability
NdisMoveMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, HtCapability.MCSSet, 16);
pAd->MlmeAux.NewExtChannelOffset = NewExtChannelOffset;
pAd->MlmeAux.HtCapabilityLen = SIZE_HT_CAP_IE;
@@ -881,7 +912,7 @@ VOID PeerBeaconAtJoinAction(
CentralChannel = AddHtInfo.ControlChan + 2;
}
- // Check Error .
+ // Check Error .
if (pAd->MlmeAux.CentralChannel != CentralChannel)
DBGPRINT(RT_DEBUG_ERROR, ("PeerBeaconAtJoinAction HT===>Beacon Central Channel = %d, Control Channel = %d. Mlmeaux CentralChannel = %d\n", CentralChannel, AddHtInfo.ControlChan, pAd->MlmeAux.CentralChannel));
@@ -891,6 +922,7 @@ VOID PeerBeaconAtJoinAction(
}
else
+#endif // DOT11_N_SUPPORT //
{
// To prevent error, let legacy AP must have same CentralChannel and Channel.
if ((HtCapabilityLen == 0) && (PreNHtCapabilityLen == 0))
@@ -902,9 +934,13 @@ VOID PeerBeaconAtJoinAction(
}
RTMPUpdateMlmeRate(pAd);
-
+
// copy QOS related information
- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)|| (pAd->CommonCfg.bWmmCapable))
+ if ((pAd->CommonCfg.bWmmCapable)
+#ifdef DOT11_N_SUPPORT
+ || (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
+#endif // DOT11_N_SUPPORT //
+ )
{
NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, &EdcaParm, sizeof(EDCA_PARM));
NdisMoveMemory(&pAd->MlmeAux.APQbssLoad, &QbssLoad, sizeof(QBSS_LOAD_PARM));
@@ -918,7 +954,7 @@ VOID PeerBeaconAtJoinAction(
}
DBGPRINT(RT_DEBUG_TRACE, ("SYNC - after JOIN, SupRateLen=%d, ExtRateLen=%d\n",
- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen));
+ pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen));
#ifdef LEAP_SUPPORT
// Update CkipFlag
@@ -977,6 +1013,7 @@ VOID PeerBeacon(
QBSS_LOAD_PARM QbssLoad;
QOS_CAPABILITY_PARM QosCapability;
ULONG RalinkIe;
+ // New for WPA security suites
UCHAR VarIE[MAX_VIE_LEN]; // Total VIE length = MAX_VIE_LEN - -5
NDIS_802_11_VARIABLE_IEs *pVIE = NULL;
HT_CAPABILITY_IE HtCapability;
@@ -985,6 +1022,7 @@ VOID PeerBeacon(
UCHAR AddHtInfoLen;
UCHAR NewExtChannelOffset = 0xff;
+
#ifdef RALINK_ATE
if (ATE_ON(pAd))
{
@@ -992,7 +1030,8 @@ VOID PeerBeacon(
}
#endif // RALINK_ATE //
- if (!(INFRA_ON(pAd) || ADHOC_ON(pAd)))
+ if (!(INFRA_ON(pAd) || ADHOC_ON(pAd)
+ ))
return;
// Init Variable IE structure
@@ -1049,6 +1088,7 @@ VOID PeerBeacon(
is_my_bssid = MAC_ADDR_EQUAL(Bssid, pAd->CommonCfg.Bssid)? TRUE : FALSE;
is_my_ssid = SSID_EQUAL(Ssid, SsidLen, pAd->CommonCfg.Ssid, pAd->CommonCfg.SsidLen)? TRUE:FALSE;
+
// ignore BEACON not for my SSID
if ((! is_my_ssid) && (! is_my_bssid))
return;
@@ -1057,12 +1097,14 @@ VOID PeerBeacon(
if (pAd->Mlme.CntlMachine.CurrState == CNTL_WAIT_DISASSOC)
return;
+#ifdef DOT11_N_SUPPORT
// Copy Control channel for this BSSID.
if (AddHtInfoLen != 0)
Channel = AddHtInfo.ControlChan;
if ((HtCapabilityLen > 0) || (PreNHtCapabilityLen > 0))
HtCapabilityLen = SIZE_HT_CAP_IE;
+#endif // DOT11_N_SUPPORT //
//
// Housekeeping "SsidBssTab" table for later-on ROAMing usage.
@@ -1082,14 +1124,20 @@ VOID PeerBeacon(
NdisMoveMemory(pAd->ScanTab.BssEntry[Bssidx].PTSF, &Elem->Msg[24], 4);
NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[0], &Elem->TimeStamp.u.LowPart, 4);
NdisMoveMemory(&pAd->ScanTab.BssEntry[Bssidx].TTSF[4], &Elem->TimeStamp.u.LowPart, 4);
+
+
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - New AP added to SsidBssTab[%ld], RSSI=%d, MAC=%02x:%02x:%02x:%02x:%02x:%02x\n",
- Bssidx, RealRssi, Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5]));
}
if ((pAd->CommonCfg.bIEEE80211H == 1) && (NewChannel != 0) && (Channel != NewChannel))
{
+ // Switching to channel 1 can prevent from rescanning the current channel immediately (by auto reconnection).
+ // In addition, clear the MLME queue and the scan table to discard the RX packets and previous scanning results.
+ AsicSwitchChannel(pAd, 1, FALSE);
+ AsicLockChannel(pAd, 1);
LinkDown(pAd, FALSE);
+ MlmeQueueInit(&pAd->Mlme.Queue);
+ BssTableInit(&pAd->ScanTab);
RTMPusecDelay(1000000); // use delay to prevent STA do reassoc
// channel sanity check
@@ -1121,8 +1169,6 @@ VOID PeerBeacon(
// Add the safeguard against the mismatch of adhoc wep status
if (pAd->StaCfg.WepStatus != pAd->ScanTab.BssEntry[Bssidx].WepStatus)
{
- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - Not matched wep status %d %d\n", pAd->StaCfg.WepStatus, pAd->ScanTab.BssEntry[Bssidx].WepStatus));
- DBGPRINT(RT_DEBUG_TRACE, ("bssid=%s\n", pAd->ScanTab.BssEntry[Bssidx].Bssid));
return;
}
@@ -1146,10 +1192,7 @@ VOID PeerBeacon(
}
}
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - PeerBeacon from %02x:%02x:%02x:%02x:%02x:%02x - Dtim=%d/%d, Rssi=%02x\n",
- Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5],
- DtimCount, DtimPeriod, RealRssi));
-
+
NdisGetSystemUpTime(&Now);
pBss = &pAd->ScanTab.BssEntry[Bssidx];
pBss->Rssi = RealRssi; // lastest RSSI
@@ -1172,10 +1215,6 @@ VOID PeerBeacon(
RxWI.RSSI2 = Elem->Rssi2;
Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, &RxWI);
-
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - my beacon from %02x:%02x:%02x:%02x:%02x:%02x - Dtim=%d/%d, Rssi=%d, Rssi2=%d, Rssi3=%d\n",
- Bssid[0], Bssid[1], Bssid[2], Bssid[3], Bssid[4], Bssid[5], DtimCount, DtimPeriod, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2));
-
if (AironetCellPowerLimit != 0xFF)
{
//
@@ -1198,30 +1237,98 @@ VOID PeerBeacon(
// in MlmePeriodicExec()
if (ADHOC_ON(pAd) && (CAP_IS_IBSS_ON(CapabilityInfo)))
{
- BOOLEAN bRestart;
- BOOLEAN bnRestart;
-
- // this timestamp is for MlmePeriodicExec() to check if all 11B peers have left
- if (SupRateLen+ExtRateLen <= 4)
- pAd->StaCfg.Last11bBeaconRxTime = Now;
+ BOOLEAN bRestart;
+ BOOLEAN bnRestart;
bRestart = FALSE;
bnRestart = FALSE;
- if ((SupRateLen+ExtRateLen <= 4) && (pAd->CommonCfg.MaxTxRate > RATE_11))
+
+ do
{
- DBGPRINT(RT_DEBUG_TRACE, ("SYNC - 11b peer joined. down-grade to 11b TX rates \n"));
- NdisMoveMemory(pAd->StaActive.SupRate, SupRate, MAX_LEN_OF_SUPPORTED_RATES);
- pAd->StaActive.SupRateLen = SupRateLen;
- NdisMoveMemory(pAd->StaActive.ExtRate, ExtRate, MAX_LEN_OF_SUPPORTED_RATES);
- pAd->StaActive.ExtRateLen = ExtRateLen;
- pAd->StaCfg.AdhocBOnlyJoined = TRUE;
- bRestart = TRUE;
- }
-
- // Update Ht Phy.
- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
- ;
-
+ if ((SupRateLen+ExtRateLen <= 4) && (pAd->CommonCfg.MaxTxRate > RATE_11))
+ {
+ if (pAd->StaCfg.AdhocBOnlyJoined == FALSE)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("SYNC - 11b peer joined. down-grade to 11b TX rates \n"));
+ bRestart = TRUE;
+ NdisMoveMemory(pAd->StaActive.SupRate, SupRate, MAX_LEN_OF_SUPPORTED_RATES);
+ pAd->StaActive.SupRateLen = SupRateLen;
+ NdisMoveMemory(pAd->StaActive.ExtRate, ExtRate, MAX_LEN_OF_SUPPORTED_RATES);
+ pAd->StaActive.ExtRateLen = ExtRateLen;
+ pAd->StaCfg.AdhocBOnlyJoined = TRUE;
+ pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE;
+ AsicSetEdcaParm(pAd, NULL);
+ }
+
+ // this timestamp is for MlmePeriodicExec() to check if all 11B peers have left
+ pAd->StaCfg.Last11bBeaconRxTime = Now;
+ break;
+ }
+#ifdef DOT11_N_SUPPORT
+ // Update Ht Phy.
+ if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
+ {
+ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) &&
+ !pAd->StaCfg.AdhocBGJoined &&
+ !pAd->StaCfg.AdhocBOnlyJoined)
+ AdhocTurnOnQos(pAd);
+
+ // Handle rate switch issue when Adhoc mode
+ if ((SupRateLen+ExtRateLen >= 8) && (HtCapability.MCSSet[0] == 0) && (HtCapability.MCSSet[1] == 0))
+ {
+ if (pAd->StaCfg.AdhocBGJoined == FALSE)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("SYNC - 11g peer joined. down-grade to 11g TX rates \n"));
+ bRestart = TRUE;
+ NdisMoveMemory(pAd->StaActive.SupRate, SupRate, MAX_LEN_OF_SUPPORTED_RATES);
+ pAd->StaActive.SupRateLen = SupRateLen;
+ NdisMoveMemory(pAd->StaActive.ExtRate, ExtRate, MAX_LEN_OF_SUPPORTED_RATES);
+ pAd->StaActive.ExtRateLen = ExtRateLen;
+ pAd->StaCfg.AdhocBGJoined = TRUE;
+ pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE;
+ AsicSetEdcaParm(pAd, NULL);
+ }
+
+ // this timestamp is for MlmePeriodicExec() to check if all 11g peers have left
+ pAd->StaCfg.Last11gBeaconRxTime = Now;
+ break;
+ }
+ else if (!pAd->StaCfg.AdhocBGJoined &&
+ !pAd->StaCfg.AdhocBOnlyJoined &&
+ (pAd->CommonCfg.RegTransmitSetting.field.BW == BW_40) &&
+ (HtCapability.HtCapInfo.ChannelWidth == BW_20))
+ {
+ if (pAd->StaCfg.Adhoc20NJoined == FALSE)
+ {
+ UCHAR ByteValue = 0;
+
+ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
+
+ pAd->StaCfg.Adhoc20NJoined = TRUE;
+ NdisMoveMemory(&pAd->MlmeAux.HtCapability, &HtCapability, SIZE_HT_CAP_IE);
+ if (AddHtInfoLen != 0)
+ NdisMoveMemory(&pAd->MlmeAux.AddHtInfo, &AddHtInfo, AddHtInfoLen);
+ NdisMoveMemory(pAd->StaActive.SupportedPhyInfo.MCSSet, HtCapability.MCSSet, 16);
+
+ RTMPCheckHt(pAd, Elem->Wcid, &pAd->MlmeAux.HtCapability, &pAd->MlmeAux.AddHtInfo);
+ COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(pAd);
+ pAd->StaActive.SupportedPhyInfo.bHtEnable = TRUE;
+ bRestart = TRUE;
+ bnRestart = TRUE;
+ }
+ // this timestamp is for MlmePeriodicExec() to check if all 20MHz N peers have left
+ pAd->StaCfg.Last20NBeaconRxTime = Now;
+ }
+
+ }
+ else
+#endif // DOT11_N_SUPPORT //
+ {
+ RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE);
+ RTMPZeroMemory(&pAd->MlmeAux.AddHtInfo, SIZE_ADD_HT_INFO_IE);
+ }
+ }while (FALSE);
+
// If peer Adhoc is legacy mode, I don't need to call MlmeUpdateHtTxRates no matter I support HT or not
if ((bRestart == TRUE) && (bnRestart == FALSE))
{
@@ -1229,6 +1336,7 @@ VOID PeerBeacon(
MakeIbssBeacon(pAd); // re-build BEACON frame
AsicEnableIbssSync(pAd); // copy to on-chip memory
}
+#ifdef DOT11_N_SUPPORT
else if ((bRestart == TRUE) && (bnRestart == TRUE))
{
MlmeUpdateTxRates(pAd, FALSE, BSS0);
@@ -1236,6 +1344,106 @@ VOID PeerBeacon(
MakeIbssBeacon(pAd); // re-build BEACON frame
AsicEnableIbssSync(pAd); // copy to on-chip memory
}
+#endif // DOT11_N_SUPPORT //
+
+ // At least another peer in this IBSS, declare MediaState as CONNECTED
+ if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ {
+ OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);
+
+ pAd->IndicateMediaState = NdisMediaStateConnected;
+ RTMP_IndicateMediaState(pAd);
+ pAd->ExtraInfo = GENERAL_LINK_UP;
+ AsicSetBssid(pAd, pAd->CommonCfg.Bssid);
+
+ // 2003/03/12 - john
+ // Make sure this entry in "ScanTab" table, thus complies to Microsoft's policy that
+ // "site survey" result should always include the current connected network.
+ //
+ Bssidx = BssTableSearch(&pAd->ScanTab, Bssid, Channel);
+ if (Bssidx == BSS_NOT_FOUND)
+ {
+ Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod,
+ &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability,
+ &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, RealRssi, TimeStamp, 0,
+ &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE);
+ }
+ DBGPRINT(RT_DEBUG_TRACE, ("ADHOC fOP_STATUS_MEDIA_STATE_CONNECTED.\n"));
+ }
+
+ // Ad-hoc mode is using MAC address as BA session. So we need to continuously find newly joined adhoc station by receiving beacon.
+ // To prevent always check this, we use wcid == RESERVED_WCID to recognize it as newly joined adhoc station.
+ if (ADHOC_ON(pAd) && (Elem->Wcid == RESERVED_WCID))
+ {
+ UCHAR idx;
+ MAC_TABLE_ENTRY *pEntry;
+
+ // look up the existing table
+ pEntry = MacTableLookup(pAd, Addr2);
+ if (pEntry == NULL)
+ {
+ // Another adhoc joining, add to our MAC table.
+ pEntry = MacTableInsertEntry(pAd, Addr2, BSS0, FALSE);
+ if (pEntry)
+ {
+ pEntry->Sst = SST_ASSOC;
+ idx = pAd->StaCfg.DefaultKeyId;
+ // After InsertEntry, Write to ASIC on-chip table.
+ RT28XX_STA_SECURITY_INFO_ADD(pAd, BSS0, idx, pEntry);
+ DBGPRINT(RT_DEBUG_TRACE, ("ADHOC %x:%x:%x:%x:%x:%x join in.Entry=%d\n", Addr2[0],Addr2[1],Addr2[2],Addr2[3],Addr2[4],Addr2[5], pEntry->Aid));
+
+ pEntry->HTPhyMode.word = pAd->StaCfg.HTPhyMode.word;
+ if (HtCapabilityLen <= 0)
+ {
+ pEntry->HTPhyMode.field.STBC = 0;
+ pEntry->HTPhyMode.field.BW = 0;
+ pEntry->HTPhyMode.field.ShortGI = 0;
+ if ((SupRateLen+ExtRateLen <= 4) && (pAd->CommonCfg.Channel <= 14))
+ {
+ pEntry->HTPhyMode.field.MODE = MODE_CCK;
+ }
+ else
+ {
+ pEntry->HTPhyMode.field.MODE = MODE_OFDM;
+ }
+ MlmeUpdateTxRates(pAd, FALSE, 0);
+ }
+#ifdef DOT11_N_SUPPORT
+ else
+ {
+ MlmeUpdateTxRates(pAd, FALSE, 0);
+ MlmeUpdateHtTxRates(pAd, BSS0);
+ }
+#endif // DOT11_N_SUPPORT //
+
+#ifdef WPA_SUPPLICANT_SUPPORT
+#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
+ if (pAd->StaCfg.WpaSupplicantUP)
+ {
+ union iwreq_data wrqu;
+
+ SendAssocIEsToWpaSupplicant(pAd);
+ memset(&wrqu, 0, sizeof(wrqu));
+ wrqu.data.flags = RT_ASSOC_EVENT_FLAG;
+ wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL);
+ }
+#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
+#endif // WPA_SUPPLICANT_SUPPORT //
+
+#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
+ {
+ union iwreq_data wrqu;
+ wext_notify_event_assoc(pAd);
+
+ memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);
+ memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN);
+ wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
+
+ }
+#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
+ }
+ }
+ }
}
if (INFRA_ON(pAd))
@@ -1274,6 +1482,7 @@ VOID PeerBeacon(
DBGPRINT(RT_DEBUG_WARN, ("SYNC - AP changed B/G protection to %d\n", bUseBGProtection));
}
+#ifdef DOT11_N_SUPPORT
// check Ht protection mode. and adhere to the Non-GF device indication by AP.
if ((AddHtInfoLen != 0) &&
((AddHtInfo.AddHtInfo2.OperaionMode != pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode) ||
@@ -1290,6 +1499,7 @@ VOID PeerBeacon(
DBGPRINT(RT_DEBUG_TRACE, ("SYNC - AP changed N OperaionMode to %d\n", pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode));
}
+#endif // DOT11_N_SUPPORT //
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED) &&
ERP_IS_USE_BARKER_PREAMBLE(Erp))
@@ -1324,17 +1534,11 @@ VOID PeerBeacon(
// 5. otherwise, put PHY back to sleep to save battery.
if (MessageToMe)
{
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - AP backlog unicast-to-me, stay AWAKE, send PSPOLL\n"));
#ifdef RT2860
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
{
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3);
// Turn clk to 80Mhz.
- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ))
- {
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe80);
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ);
- }
}
#endif // RT2860 //
if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable &&
@@ -1351,15 +1555,8 @@ VOID PeerBeacon(
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
{
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3);
- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ))
- {
- // Turn clk to 80Mhz.
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe80);
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ);
- }
}
#endif // RT2860 //
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - AP backlog broadcast/multicast, stay AWAKE\n"));
}
else if ((pAd->TxSwQueue[QID_AC_BK].Number != 0) ||
(pAd->TxSwQueue[QID_AC_BE].Number != 0) ||
@@ -1373,17 +1570,10 @@ VOID PeerBeacon(
{
// TODO: consider scheduled HCCA. might not be proper to use traditional DTIM-based power-saving scheme
// can we cheat here (i.e. just check MGMT & AC_BE) for better performance?
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - outgoing frame in TxRing/MgmtRing, stay AWAKE\n"));
#ifdef RT2860
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
{
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, pAd->StaCfg.BBPR3);
- if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ))
- {
- // Turn clk to 80Mhz.
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe80);
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_CLKSELECT_40MHZ);
- }
}
#endif // RT2860 //
}
@@ -1398,109 +1588,12 @@ VOID PeerBeacon(
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM) && (TbttNumToNextWakeUp > NextDtim))
TbttNumToNextWakeUp = NextDtim;
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - PHY sleeps for %d TBTT, Dtim=%d/%d\n", TbttNumToNextWakeUp, DtimCount, DtimPeriod));
if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
{
AsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp);
}
}
}
-#ifndef SINGLE_ADHOC_LINKUP
- // At least another peer in this IBSS, declare MediaState as CONNECTED
- if (ADHOC_ON(pAd) &&
- !OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED) && ((CapabilityInfo&0x1)==0))
- {
- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);
-
- pAd->IndicateMediaState = NdisMediaStateConnected;
- RTMP_IndicateMediaState(pAd);
- pAd->ExtraInfo = GENERAL_LINK_UP;
- AsicSetBssid(pAd, pAd->CommonCfg.Bssid);
- // 2003/03/12 - john
- // Make sure this entry in "ScanTab" table, thus complies to Microsoft's policy that
- // "site survey" result should always include the current connected network.
- //
- Bssidx = BssTableSearch(&pAd->ScanTab, Bssid, Channel);
- if (Bssidx == BSS_NOT_FOUND)
- {
- Bssidx = BssTableSetEntry(pAd, &pAd->ScanTab, Bssid, Ssid, SsidLen, BssType, BeaconPeriod,
- &CfParm, AtimWin, CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen, &HtCapability,
- &AddHtInfo, HtCapabilityLen, AddHtInfoLen, NewExtChannelOffset, Channel, RealRssi, TimeStamp, 0,
- &EdcaParm, &QosCapability, &QbssLoad, LenVIE, pVIE);
- }
- DBGPRINT(RT_DEBUG_TRACE, ("ADHOC fOP_STATUS_MEDIA_STATE_CONNECTED.\n"));
- }
- // Ad-hoc mode is using MAC address as BA session. So we need to continuously find newly joined adhoc station by receiving beacon.
- // To prevent always check this, we use wcid == RESERVED_WCID to recognize it as newly joined adhoc station.
- if (ADHOC_ON(pAd) && (Elem->Wcid == RESERVED_WCID))
- {
- UCHAR idx;
- MAC_TABLE_ENTRY *pEntry;
-
- // look up the existing table
- pEntry = MacTableLookup(pAd, Addr2);
- if (pEntry == NULL)
- {
- // Another adhoc joining, add to our MAC table.
- pEntry = MacTableInsertEntry(pAd, Addr2, BSS0, FALSE);
- if (pEntry)
- {
- pEntry->Sst = SST_ASSOC;
- idx = pAd->StaCfg.DefaultKeyId;
- // After InsertEntry, Write to ASIC on-chip table.
- RT28XX_STA_SECURITY_INFO_ADD(pAd, BSS0, idx, pEntry);
- DBGPRINT(RT_DEBUG_TRACE, ("ADHOC %x:%x:%x:%x:%x:%x join in.Entry=%d\n", Addr2[0],Addr2[1],Addr2[2],Addr2[3],Addr2[4],Addr2[5], pEntry->Aid));
-
- /*if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE) &&
- (HtCapabilityLen > 0))
- BAOriSessionSetUp(pAd, pEntry, 0, 0, 2000, FALSE);*/
-
- pEntry->HTPhyMode.word = pAd->StaCfg.HTPhyMode.word;
- if (HtCapabilityLen <= 0)
- {
- pEntry->HTPhyMode.field.STBC = 0;
- pEntry->HTPhyMode.field.BW = 0;
- pEntry->HTPhyMode.field.ShortGI = 0;
- if ((SupRateLen+ExtRateLen <= 4) && (pAd->CommonCfg.Channel <= 14))
- {
- pEntry->HTPhyMode.field.MODE = MODE_CCK;
- }
- else
- {
- pEntry->HTPhyMode.field.MODE = MODE_OFDM;
- }
- }
- MlmeUpdateTxRates(pAd, FALSE, 0);
-
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP)
- {
- union iwreq_data wrqu;
-
- SendAssocIEsToWpaSupplicant(pAd);
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.flags = RT_ASSOC_EVENT_FLAG;
- wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL);
- }
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-#endif // WPA_SUPPLICANT_SUPPORT //
-
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
- {
- union iwreq_data wrqu;
- wext_notify_event_assoc(pAd);
-
- memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);
- memcpy(wrqu.ap_addr.sa_data, pAd->MlmeAux.Bssid, MAC_ADDR_LEN);
- wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
-
- }
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
- }
- }
- }
-#endif
}
// not my BSSID, ignore it
}
@@ -1519,7 +1612,10 @@ VOID PeerProbeReqAction(
{
UCHAR Addr2[MAC_ADDR_LEN];
CHAR Ssid[MAX_LEN_OF_SSID];
- UCHAR SsidLen, HtLen, AddHtLen, NewExtLen;
+ UCHAR SsidLen;
+#ifdef DOT11_N_SUPPORT
+ UCHAR HtLen, AddHtLen, NewExtLen;
+#endif // DOT11_N_SUPPORT //
HEADER_802_11 ProbeRspHdr;
NDIS_STATUS NStatus;
PUCHAR pOutBuffer = NULL;
@@ -1544,9 +1640,6 @@ VOID PeerProbeReqAction(
return;
//pAd->StaCfg.AtimWin = 0; // ??????
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - Send PROBE_RSP to %02x:%02x:%02x:%02x:%02x:%02x...\n",
- Addr2[0],Addr2[1],Addr2[2],Addr2[3],Addr2[4],Addr2[5] ));
- MgtMacHeaderInit(pAd, &ProbeRspHdr, SUBTYPE_PROBE_RSP, 0, Addr2, pAd->CommonCfg.Bssid);
Privacy = (pAd->StaCfg.WepStatus == Ndis802_11Encryption1Enabled) ||
(pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled) ||
@@ -1595,6 +1688,7 @@ VOID PeerProbeReqAction(
END_OF_ARGS);
FrameLen += tmp;
}
+#ifdef DOT11_N_SUPPORT
if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
{
ULONG TmpLen;
@@ -1627,7 +1721,7 @@ VOID PeerProbeReqAction(
}
FrameLen += TmpLen;
}
-
+#endif // DOT11_N_SUPPORT //
MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
MlmeFreeMemory(pAd, pOutBuffer);
}
@@ -1734,7 +1828,7 @@ VOID EnqueuePsPoll(
}
#endif // RALINK_ATE //
- DBGPRINT(RT_DEBUG_INFO, ("SYNC - send PsPoll ...\n"));
+
if (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeLegacy_PSP)
pAd->PsPollFrame.FC.PwrMgmt = PWR_SAVE;
MiniportMMRequest(pAd, 0, (PUCHAR)&pAd->PsPollFrame, sizeof(PSPOLL_FRAME));
@@ -1777,7 +1871,7 @@ VOID EnqueueProbeRequest(
}
-
+#ifdef DOT11_N_SUPPORT
#ifdef DOT11N_DRAFT3
VOID BuildEffectedChannelList(
IN PRTMP_ADAPTER pAd)
@@ -1857,6 +1951,7 @@ VOID BuildEffectedChannelList(
}
}
#endif // DOT11N_DRAFT3 //
+#endif // DOT11_N_SUPPORT //
BOOLEAN ScanRunning(
IN PRTMP_ADAPTER pAd)
diff --git a/rt2860-1.7.0.0/sta/wpa.c b/rt2860-source-1.8.0.0/sta/wpa.c
similarity index 97%
copy from rt2860-1.7.0.0/sta/wpa.c
copy to rt2860-source-1.8.0.0/sta/wpa.c
index b8ef7db..5933cb7 100644
--- a/rt2860-1.7.0.0/sta/wpa.c
+++ b/rt2860-source-1.8.0.0/sta/wpa.c
@@ -160,7 +160,6 @@ BOOLEAN WpaMsgTypeSubst(
*MsgType = MT2_EAPOLASFAlert;
break;
default:
- DBGPRINT(RT_DEBUG_INFO, ("WpaMsgTypeSubst : return FALSE; \n"));
return FALSE;
}
return TRUE;
@@ -221,19 +220,6 @@ VOID WpaEAPOLKeyAction(
*((USHORT *)&peerKeyInfo) = cpu2le16(*((USHORT *)&peerKeyInfo));
- // Sanity check, this should only happen in WPA(2)-PSK mode
- // 0. Debug print all bit information
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo Key Description Version %d\n", peerKeyInfo.KeyDescVer));
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo Key Type %d\n", peerKeyInfo.KeyType));
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo Key Index %d\n", peerKeyInfo.KeyIndex));
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo Install %d\n", peerKeyInfo.Install));
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo Key Ack %d\n", peerKeyInfo.KeyAck));
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo Key MIC %d\n", peerKeyInfo.KeyMic));
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo Secure %d\n", peerKeyInfo.Secure));
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo Error %d\n", peerKeyInfo.Error));
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo Request %d\n", peerKeyInfo.Request));
- DBGPRINT(RT_DEBUG_INFO, ("KeyInfo EKD_DL %d\n", peerKeyInfo.EKD_DL));
-
// 1. Check EAPOL frame version and type
EapolVr = (UCHAR) Elem->Msg[LENGTH_802_11+LENGTH_802_1_H];
@@ -506,10 +492,6 @@ VOID WpaPairMsg1Action(
// Save key to PTK entry
NdisMoveMemory(pAd->StaCfg.PTK, PTK, LEN_PTK);
-
- // Construct Msg 2
- pAd->Sequence = ((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER);
-
// init 802.3 header and Fill Packet
MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL);
@@ -662,9 +644,6 @@ VOID Wpa2PairMsg1Action(
// Save key to PTK entry
NdisMoveMemory(pAd->StaCfg.PTK, PTK, LEN_PTK);
- // Construct Msg 2
- pAd->Sequence = ((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER);
-
// init 802.3 header and Fill Packet
MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL);
@@ -866,9 +845,6 @@ VOID WpaPairMsg3Action(
if(!NdisEqualMemory(pAd->StaCfg.ANonce, pMsg3->KeyDesc.KeyNonce, LEN_KEY_DESC_NONCE))
return;
- // 5. Construct Message 4
- pAd->Sequence = ((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER);
-
// init 802.3 header and Fill Packet
MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL);
@@ -1126,10 +1102,6 @@ VOID Wpa2PairMsg3Action(
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg,
NULL);
-
- // 6. Construct Message 4
- pAd->Sequence = ((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER);
-
// init 802.3 header and Fill Packet
MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL);
@@ -1438,9 +1410,6 @@ VOID WpaGroupMsg1Action(
// Indicate Connected for GUI
pAd->IndicateMediaState = NdisMediaStateConnected;
- // 4. Construct Group Message 2
- pAd->Sequence = ((pAd->Sequence) + 1) & (MAX_SEQ_NUMBER);
-
// init header and Fill Packet
MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL);
@@ -1766,10 +1735,6 @@ BOOLEAN ParseKeyData(
if (KeyDataLength >= 8)
{
pKDE = (PKDE_ENCAP) pMyKeyData;
- DBGPRINT(RT_DEBUG_INFO, ("pKDE->Type %x \n", pKDE->Type));
- DBGPRINT(RT_DEBUG_INFO, ("pKDE->Len 0x%x \n", pKDE->Len));
- DBGPRINT(RT_DEBUG_INFO, ("pKDE->OUI %x %x %x \n", pKDE->OUI[0],pKDE->OUI[1],pKDE->OUI[2]));
- DBGPRINT(RT_DEBUG_INFO, ("pKDE->DataType %x \n", pKDE->DataType));
}
else
{
diff --git a/rt2860-1.7.0.0/tools/Makefile b/rt2860-source-1.8.0.0/tools/Makefile
similarity index 100%
copy from rt2860-1.7.0.0/tools/Makefile
copy to rt2860-source-1.8.0.0/tools/Makefile
diff --git a/rt2860-source-1.8.0.0/tools/bin2h b/rt2860-source-1.8.0.0/tools/bin2h
new file mode 100644
index 0000000..1536fdc
Binary files /dev/null and b/rt2860-source-1.8.0.0/tools/bin2h differ
diff --git a/rt2860-1.7.0.0/tools/bin2h.c b/rt2860-source-1.8.0.0/tools/bin2h.c
similarity index 100%
copy from rt2860-1.7.0.0/tools/bin2h.c
copy to rt2860-source-1.8.0.0/tools/bin2h.c
diff --git a/rt2860-source_1.8.0.0.orig.tar.gz b/rt2860-source_1.8.0.0.orig.tar.gz
new file mode 100644
index 0000000..b00e7e9
Binary files /dev/null and b/rt2860-source_1.8.0.0.orig.tar.gz differ
--
rt2860 source for the ralink wireless chip in the eeepc 901.
More information about the Debian-eeepc-devel
mailing list