aboutsummaryrefslogtreecommitdiff
path: root/drivers/staging/rt2860
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rt2860')
-rw-r--r--drivers/staging/rt2860/2860_main_dev.c41
-rw-r--r--drivers/staging/rt2860/Makefile5
-rw-r--r--drivers/staging/rt2860/ap.h40
-rw-r--r--drivers/staging/rt2860/chlist.h56
-rw-r--r--drivers/staging/rt2860/common/2860_rtmp_init.c25
-rw-r--r--drivers/staging/rt2860/common/action.c444
-rw-r--r--drivers/staging/rt2860/common/action.h7
-rw-r--r--drivers/staging/rt2860/common/ba_action.c179
-rw-r--r--drivers/staging/rt2860/common/cmm_data.c647
-rw-r--r--drivers/staging/rt2860/common/cmm_data_2860.c105
-rw-r--r--drivers/staging/rt2860/common/cmm_info.c273
-rw-r--r--drivers/staging/rt2860/common/cmm_sanity.c401
-rw-r--r--drivers/staging/rt2860/common/cmm_sync.c113
-rw-r--r--drivers/staging/rt2860/common/cmm_wpa.c28
-rw-r--r--drivers/staging/rt2860/common/dfs.c21
-rw-r--r--drivers/staging/rt2860/common/eeprom.c1268
-rw-r--r--drivers/staging/rt2860/common/md5.c12
-rw-r--r--drivers/staging/rt2860/common/mlme.c1890
-rw-r--r--drivers/staging/rt2860/common/netif_block.c144
-rw-r--r--drivers/staging/rt2860/common/netif_block.h58
-rw-r--r--drivers/staging/rt2860/common/rtmp_init.c1253
-rw-r--r--drivers/staging/rt2860/common/rtmp_tkip.c21
-rw-r--r--drivers/staging/rt2860/common/rtmp_wep.c2
-rw-r--r--drivers/staging/rt2860/common/spectrum.c57
-rw-r--r--drivers/staging/rt2860/leap.h215
-rw-r--r--drivers/staging/rt2860/mlme.h309
-rw-r--r--drivers/staging/rt2860/oid.h173
-rw-r--r--drivers/staging/rt2860/rt28xx.h1218
-rw-r--r--drivers/staging/rt2860/rt_ate.c6009
-rw-r--r--drivers/staging/rt2860/rt_ate.h347
-rw-r--r--drivers/staging/rt2860/rt_config.h33
-rw-r--r--drivers/staging/rt2860/rt_linux.c45
-rw-r--r--drivers/staging/rt2860/rt_linux.h188
-rw-r--r--drivers/staging/rt2860/rt_main_dev.c717
-rw-r--r--drivers/staging/rt2860/rt_profile.c161
-rw-r--r--drivers/staging/rt2860/rtmp.h1831
-rw-r--r--drivers/staging/rt2860/rtmp_def.h210
-rw-r--r--drivers/staging/rt2860/spectrum.h30
-rw-r--r--drivers/staging/rt2860/sta/assoc.c586
-rw-r--r--drivers/staging/rt2860/sta/auth.c14
-rw-r--r--drivers/staging/rt2860/sta/auth_rsp.c19
-rw-r--r--drivers/staging/rt2860/sta/connect.c602
-rw-r--r--drivers/staging/rt2860/sta/dls.c2197
-rw-r--r--drivers/staging/rt2860/sta/rtmp_data.c336
-rw-r--r--drivers/staging/rt2860/sta/sanity.c2
-rw-r--r--drivers/staging/rt2860/sta/sync.c290
-rw-r--r--drivers/staging/rt2860/sta/wpa.c12
-rw-r--r--drivers/staging/rt2860/sta_ioctl.c1236
-rw-r--r--drivers/staging/rt2860/wpa.h31
49 files changed, 6501 insertions, 17400 deletions
diff --git a/drivers/staging/rt2860/2860_main_dev.c b/drivers/staging/rt2860/2860_main_dev.c
index ff7f83380736..c7038e03a4dc 100644
--- a/drivers/staging/rt2860/2860_main_dev.c
+++ b/drivers/staging/rt2860/2860_main_dev.c
@@ -37,13 +37,6 @@
#include "rt_config.h"
-
-#ifdef MULTIPLE_CARD_SUPPORT
-// record whether the card in the card list is used in the card file
-extern UINT8 MC_CardUsed[];
-#endif // MULTIPLE_CARD_SUPPORT //
-
-
extern INT __devinit rt28xx_probe(IN void *_dev_p, IN void *_dev_id_p,
IN UINT argc, OUT PRTMP_ADAPTER *ppAd);
@@ -110,13 +103,10 @@ static struct pci_device_id rt2860_pci_tbl[] __devinitdata =
};
MODULE_DEVICE_TABLE(pci, rt2860_pci_tbl);
-#ifdef CONFIG_STA_SUPPORT
MODULE_LICENSE("GPL");
#ifdef MODULE_VERSION
MODULE_VERSION(STA_DRIVER_VERSION);
#endif
-#endif // CONFIG_STA_SUPPORT //
-
//
// Our PCI driver structure
@@ -328,14 +318,6 @@ static VOID __devexit rt2860_remove_one(
if (pAd != NULL)
{
-#ifdef MULTIPLE_CARD_SUPPORT
- if ((pAd->MC_RowID >= 0) && (pAd->MC_RowID <= MAX_NUM_OF_MULTIPLE_CARD))
- MC_CardUsed[pAd->MC_RowID] = 0; // not clear MAC address
-#endif // MULTIPLE_CARD_SUPPORT //
-
-
-
-
// Unregister network device
unregister_netdev(net_dev);
@@ -494,10 +476,8 @@ static void rx_done_tasklet(unsigned long data)
pObj = (POS_COOKIE) pAd->OS_Cookie;
pAd->int_pending &= ~(INT_RX);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- bReschedule = STARxDoneInterruptHandle(pAd, 0);
-#endif // CONFIG_STA_SUPPORT //
+
+ bReschedule = STARxDoneInterruptHandle(pAd, 0);
RTMP_INT_LOCK(&pAd->irq_lock, flags);
/*
@@ -933,15 +913,8 @@ rt2860_interrupt(int irq, void *dev_instance)
RTMPHandleTBTTInterrupt(pAd);
}
-
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- if (IntSource.word & AutoWakeupInt)
- RTMPHandleTwakeupInterrupt(pAd);
- }
-#endif // CONFIG_STA_SUPPORT //
+ if (IntSource.word & AutoWakeupInt)
+ RTMPHandleTwakeupInterrupt(pAd);
return IRQ_HANDLED;
}
@@ -1182,9 +1155,7 @@ VOID RT28xx_UpdateBeaconToAsic(
else
{
ptr = (PUCHAR)&pAd->BeaconTxWI;
-#ifdef RT_BIG_ENDIAN
- RTMPWIEndianChange(ptr, TYPE_TXWI);
-#endif
+
for (i=0; i<TXWI_SIZE; i+=4) // 16-byte TXWI field
{
UINT32 longptr = *ptr + (*(ptr+1)<<8) + (*(ptr+2)<<16) + (*(ptr+3)<<24);
@@ -1212,7 +1183,6 @@ VOID RT28xx_UpdateBeaconToAsic(
}
-#ifdef CONFIG_STA_SUPPORT
VOID RTMPInitPCIeLinkCtrlValue(
IN PRTMP_ADAPTER pAd)
{
@@ -1256,7 +1226,6 @@ VOID RTMPPCIeLinkCtrlSetting(
IN USHORT Max)
{
}
-#endif // CONFIG_STA_SUPPORT //
VOID rt2860_stop(struct net_device *net_dev)
{
diff --git a/drivers/staging/rt2860/Makefile b/drivers/staging/rt2860/Makefile
index b95636478464..c9fe92583d7e 100644
--- a/drivers/staging/rt2860/Makefile
+++ b/drivers/staging/rt2860/Makefile
@@ -2,11 +2,8 @@ obj-$(CONFIG_RT2860) += rt2860sta.o
# TODO: all of these should be removed
EXTRA_CFLAGS += -DLINUX -DAGGREGATION_SUPPORT -DPIGGYBACK_SUPPORT -DWMM_SUPPORT
-EXTRA_CFLAGS += -DCONFIG_STA_SUPPORT
+EXTRA_CFLAGS += -DRT2860
EXTRA_CFLAGS += -DDBG
-EXTRA_CFLAGS += -DDOT11_N_SUPPORT
-EXTRA_CFLAGS += -DWPA_SUPPLICANT_SUPPORT
-EXTRA_CFLAGS += -DNATIVE_WPA_SUPPLICANT_SUPPORT
rt2860sta-objs := \
common/md5.o \
diff --git a/drivers/staging/rt2860/ap.h b/drivers/staging/rt2860/ap.h
index df6db2813121..a814d55abeff 100644
--- a/drivers/staging/rt2860/ap.h
+++ b/drivers/staging/rt2860/ap.h
@@ -159,9 +159,6 @@ USHORT APBuildAssociation(
IN UCHAR *pRSNLen,
IN BOOLEAN bWmmCapable,
IN ULONG RalinkIe,
-#ifdef DOT11N_DRAFT3
- IN EXT_CAP_INFO_ELEMENT ExtCapInfo,
-#endif // DOT11N_DRAFT3 //
IN HT_CAPABILITY_IE *pHtCapability,
IN UCHAR HtCapabilityLen,
OUT USHORT *pAid);
@@ -282,11 +279,6 @@ VOID SupportRate(
BOOLEAN ApScanRunning(
IN PRTMP_ADAPTER pAd);
-#ifdef DOT11N_DRAFT3
-VOID APOverlappingBSSScan(
- IN RTMP_ADAPTER *pAd);
-#endif // DOT11N_DRAFT3 //
-
// ap_wpa.c
VOID APWpaStateMachineInit(
@@ -332,6 +324,13 @@ VOID APQuickResponeForRateUpExec(
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3);
+#ifdef RT2870
+VOID BeaconUpdateExec(
+ IN PVOID SystemSpecific1,
+ IN PVOID FunctionContext,
+ IN PVOID SystemSpecific2,
+ IN PVOID SystemSpecific3);
+#endif // RT2870 //
VOID RTMPSetPiggyBack(
IN PRTMP_ADAPTER pAd,
@@ -408,10 +407,8 @@ 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);
@@ -472,9 +469,6 @@ BOOLEAN PeerAssocReqCmmSanity(
OUT UCHAR *pRSNLen,
OUT BOOLEAN *pbWmmCapable,
OUT ULONG *pRalinkIe,
-#ifdef DOT11N_DRAFT3
- OUT EXT_CAP_INFO_ELEMENT *pExtCapInfo,
-#endif // DOT11N_DRAFT3 //
OUT UCHAR *pHtCapabilityLen,
OUT HT_CAPABILITY_IE *pHtCapability);
@@ -529,26 +523,6 @@ BOOLEAN APPeerBeaconAndProbeRspSanity(
OUT BOOLEAN *ExtendedRateIeExist,
OUT UCHAR *Erp);
-// ap_info.c
-
-#ifdef WIN_NDIS
-NDIS_STATUS APQueryInformation(
- IN NDIS_HANDLE MiniportAdapterContext,
- IN NDIS_OID Oid,
- IN PVOID pInformationBuffer,
- IN ULONG InformationBufferLength,
- OUT PULONG pBytesWritten,
- OUT PULONG pBytesNeeded);
-
-NDIS_STATUS APSetInformation(
- IN NDIS_HANDLE MiniportAdapterContext,
- IN NDIS_OID Oid,
- IN PVOID pInformationBuffer,
- IN ULONG InformationBufferLength,
- OUT PULONG pBytesRead,
- OUT PULONG pBytesNeeded);
-#endif
-
// ================== end of AP RTMP.h ========================
diff --git a/drivers/staging/rt2860/chlist.h b/drivers/staging/rt2860/chlist.h
index 9e15b9daeb80..1ad26b574083 100644
--- a/drivers/staging/rt2860/chlist.h
+++ b/drivers/staging/rt2860/chlist.h
@@ -524,7 +524,12 @@ static CH_REGION ChRegion[] =
JAP,
{
{ 1, 14, 20, BOTH, FALSE}, // 2.4 G, ch 1~14
+#ifndef RT30xx
{ 36, 4, 23, IDOR, FALSE}, // 5G, ch 36~48
+#endif
+#ifdef RT30xx
+ { 34, 4, 23, IDOR, FALSE}, // 5G, ch 34~46
+#endif
{ 0}, // end
}
},
@@ -957,16 +962,12 @@ static inline VOID ChBandCheck(
switch(PhyMode)
{
case PHY_11A:
-#ifdef DOT11_N_SUPPORT
case PHY_11AN_MIXED:
-#endif // DOT11_N_SUPPORT //
*pChType = BAND_5G;
break;
case PHY_11ABG_MIXED:
-#ifdef DOT11_N_SUPPORT
case PHY_11AGN_MIXED:
case PHY_11ABGN_MIXED:
-#endif // DOT11_N_SUPPORT //
*pChType = BAND_BOTH;
break;
@@ -1114,8 +1115,6 @@ static inline VOID BuildBeaconChList(
}
}
-
-#ifdef DOT11_N_SUPPORT
static inline BOOLEAN IsValidChannel(
IN PRTMP_ADAPTER pAd,
IN UCHAR channel)
@@ -1201,49 +1200,6 @@ static inline VOID N_ChannelCheck(
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
}
}
@@ -1273,8 +1229,6 @@ static inline VOID N_SetCenCh(
pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
}
}
-#endif // DOT11_N_SUPPORT //
-
static inline UINT8 GetCuntryMaxTxPwr(
IN PRTMP_ADAPTER pAd,
diff --git a/drivers/staging/rt2860/common/2860_rtmp_init.c b/drivers/staging/rt2860/common/2860_rtmp_init.c
index 546f304ec330..0bc0fb99d2e4 100644
--- a/drivers/staging/rt2860/common/2860_rtmp_init.c
+++ b/drivers/staging/rt2860/common/2860_rtmp_init.c
@@ -173,9 +173,6 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(
pTxD->SDPtr0 = BufBasePaLow;
// advance to next ring descriptor address
pTxD->DMADONE = 1;
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
RingBasePaLow += TXD_SIZE;
RingBaseVa = (PUCHAR) RingBaseVa + TXD_SIZE;
@@ -236,9 +233,6 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(
pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[index].AllocVa;
pTxD->DMADONE = 1;
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
// no pre-allocated buffer required in MgmtRing for scatter-gather case
}
DBGPRINT(RT_DEBUG_TRACE, ("MGMT Ring: total %d entry allocated\n", index));
@@ -318,10 +312,6 @@ NDIS_STATUS RTMPAllocTxRxRingMemory(
pRxD = (PRXD_STRUC) pAd->RxRing.Cell[index].AllocVa;
pRxD->SDP0 = RTMP_GetPhysicalAddressLow(pDmaBuf->AllocPa);
pRxD->DDONE = 0;
-
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD);
-#endif
}
DBGPRINT(RT_DEBUG_TRACE, ("Rx Ring: total %d entry allocated\n", index));
@@ -821,10 +811,6 @@ PNDIS_PACKET GetPacketFromRxRing(
IN OUT UINT32 *pRxPending)
{
PRXD_STRUC pRxD;
-#ifdef RT_BIG_ENDIAN
- PRXD_STRUC pDestRxD;
- RXD_STRUC RxD;
-#endif
PNDIS_PACKET pRxPacket = NULL;
PNDIS_PACKET pNewPacket;
PVOID AllocVa;
@@ -853,15 +839,8 @@ PNDIS_PACKET GetPacketFromRxRing(
}
-#ifdef RT_BIG_ENDIAN
- pDestRxD = (PRXD_STRUC) pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].AllocVa;
- RxD = *pDestRxD;
- pRxD = &RxD;
- RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD);
-#else
// Point to Rx indexed rx ring descriptor
pRxD = (PRXD_STRUC) pAd->RxRing.Cell[pAd->RxRing.RxSwReadIdx].AllocVa;
-#endif
if (pRxD->DDONE == 0)
{
@@ -904,10 +883,6 @@ PNDIS_PACKET GetPacketFromRxRing(
*pRxPending = *pRxPending - 1;
// update rx descriptor and kick rx
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pRxD, TYPE_RXD);
- WriteBackToDescriptor((PUCHAR)pDestRxD, (PUCHAR)pRxD, FALSE, TYPE_RXD);
-#endif
INC_RING_INDEX(pAd->RxRing.RxSwReadIdx, RX_RING_SIZE);
pAd->RxRing.RxCpuIdx = (pAd->RxRing.RxSwReadIdx == 0) ? (RX_RING_SIZE-1) : (pAd->RxRing.RxSwReadIdx-1);
diff --git a/drivers/staging/rt2860/common/action.c b/drivers/staging/rt2860/common/action.c
index d6f530fb857f..a4d9fdc0736e 100644
--- a/drivers/staging/rt2860/common/action.c
+++ b/drivers/staging/rt2860/common/action.c
@@ -72,17 +72,12 @@ VOID ActionStateMachineInit(
StateMachineSetAction(S, ACT_IDLE, MT2_PEER_QOS_CATE, (STATE_MACHINE_FUNC)PeerQOSAction);
StateMachineSetAction(S, ACT_IDLE, MT2_PEER_DLS_CATE, (STATE_MACHINE_FUNC)ReservedAction);
-#ifdef QOS_DLS_SUPPORT
- 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_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);
@@ -92,7 +87,6 @@ VOID ActionStateMachineInit(
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)
@@ -131,21 +125,12 @@ VOID MlmeADDBAAction(
pBAEntry =&pAd->BATable.BAOriEntry[Idx];
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
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;
Frame.Action = ADDBA_REQ;
@@ -220,10 +205,8 @@ VOID MlmeDELBAAction(
// SEND BAR (Send BAR to refresh peer reordering buffer.)
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);
-#endif // CONFIG_STA_SUPPORT //
+
+ BarHeaderInit(pAd, &FrameBar, pAd->MacTab.Content[pInfo->Wcid].Addr, pAd->CurrentAddress);
FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL funciton.
FrameBar.StartingSeq.field.StartSeq = pAd->MacTab.Content[pInfo->Wcid].TxSeq[pInfo->TID]; // make sure sequence not clear in DEL funciton.
@@ -241,20 +224,14 @@ VOID MlmeDELBAAction(
// SEND DELBA FRAME
FrameLen = 0;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+
{
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;
Frame.DelbaParm.Initiator = pInfo->Initiator;
@@ -271,7 +248,6 @@ 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,
@@ -299,40 +275,6 @@ VOID PeerQOSAction(
{
}
-#ifdef QOS_DLS_SUPPORT
-VOID PeerDLSAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem)
-{
- UCHAR Action = Elem->Msg[LENGTH_802_11+1];
-
- switch(Action)
- {
- case ACTION_DLS_REQUEST:
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- PeerDlsReqAction(pAd, Elem);
-#endif // CONFIG_STA_SUPPORT //
- break;
-
- case ACTION_DLS_RESPONSE:
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- PeerDlsRspAction(pAd, Elem);
-#endif // CONFIG_STA_SUPPORT //
- break;
-
- case ACTION_DLS_TEARDOWN:
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- PeerDlsTearDownAction(pAd, Elem);
-#endif // CONFIG_STA_SUPPORT //
- break;
- }
-}
-#endif // QOS_DLS_SUPPORT //
-
-#ifdef DOT11_N_SUPPORT
VOID PeerBAAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
@@ -353,320 +295,12 @@ VOID PeerBAAction(
}
}
-
-#ifdef DOT11N_DRAFT3
-
-#ifdef CONFIG_STA_SUPPORT
-VOID StaPublicAction(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Bss2040Coexist)
-{
- BSS_2040_COEXIST_IE BssCoexist;
- MLME_SCAN_REQ_STRUCT ScanReq;
-
- BssCoexist.word = Bss2040Coexist;
- // AP asks Station to return a 20/40 BSS Coexistence mgmt frame. So we first starts a scan, then send back 20/40 BSS Coexistence mgmt frame
- if ((BssCoexist.field.InfoReq == 1) && (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_SCAN_2040)))
- {
- // Clear record first. After scan , will update those bit and send back to transmiter.
- pAd->CommonCfg.BSSCoexist2040.field.InfoReq = 1;
- pAd->CommonCfg.BSSCoexist2040.field.Intolerant40 = 0;
- pAd->CommonCfg.BSSCoexist2040.field.BSS20WidthReq = 0;
- // Fill out stuff for scan request
- ScanParmFill(pAd, &ScanReq, ZeroSsid, 0, BSS_ANY, SCAN_2040_BSS_COEXIST);
- MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_SCAN_REQ, sizeof(MLME_SCAN_REQ_STRUCT), &ScanReq);
- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_OID_LIST_SCAN;
- }
-}
-
-
-/*
-Description : Build Intolerant Channel Rerpot from Trigger event table.
-return : how many bytes copied.
-*/
-ULONG BuildIntolerantChannelRep(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDest)
-{
- ULONG FrameLen = 0;
- ULONG ReadOffset = 0;
- UCHAR i;
- UCHAR LastRegClass = 0xff;
- PUCHAR pLen;
-
- for ( i = 0;i < MAX_TRIGGER_EVENT;i++)
- {
- if (pAd->CommonCfg.TriggerEventTab.EventA[i].bValid == TRUE)
- {
- if (pAd->CommonCfg.TriggerEventTab.EventA[i].RegClass == LastRegClass)
- {
- *(pDest + ReadOffset) = (UCHAR)pAd->CommonCfg.TriggerEventTab.EventA[i].Channel;
- *pLen++;
- ReadOffset++;
- FrameLen++;
- }
- else
- {
- *(pDest + ReadOffset) = IE_2040_BSS_INTOLERANT_REPORT; // IE
- *(pDest + ReadOffset + 1) = 2; // Len = RegClass byte + channel byte.
- pLen = pDest + ReadOffset + 1;
- LastRegClass = pAd->CommonCfg.TriggerEventTab.EventA[i].RegClass;
- *(pDest + ReadOffset + 2) = LastRegClass; // Len = RegClass byte + channel byte.
- *(pDest + ReadOffset + 3) = (UCHAR)pAd->CommonCfg.TriggerEventTab.EventA[i].Channel;
- FrameLen += 4;
- ReadOffset += 4;
- }
-
- }
- }
- return FrameLen;
-}
-
-
-/*
-Description : Send 20/40 BSS Coexistence Action frame If one trigger event is triggered.
-*/
-VOID Send2040CoexistAction(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN BOOLEAN bAddIntolerantCha)
-{
- PUCHAR pOutBuffer = NULL;
- NDIS_STATUS NStatus;
- FRAME_ACTION_HDR Frame;
- ULONG FrameLen;
- ULONG IntolerantChaRepLen;
-
- IntolerantChaRepLen = 0;
- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory
- if(NStatus != NDIS_STATUS_SUCCESS)
- {
- DBGPRINT(RT_DEBUG_ERROR,("ACT - Send2040CoexistAction() allocate memory failed \n"));
- return;
- }
- ActHeaderInit(pAd, &Frame.Hdr, pAd->MacTab.Content[Wcid].Addr, pAd->CommonCfg.Bssid);
- Frame.Category = CATEGORY_PUBLIC;
- Frame.Action = ACTION_BSS_2040_COEXIST;
-
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- sizeof(FRAME_ACTION_HDR), &Frame,
- END_OF_ARGS);
-
- *(pOutBuffer + FrameLen) = pAd->CommonCfg.BSSCoexist2040.word;
- FrameLen++;
-
- if (bAddIntolerantCha == TRUE)
- IntolerantChaRepLen = BuildIntolerantChannelRep(pAd, pOutBuffer + FrameLen);
-
- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen + IntolerantChaRepLen);
- DBGPRINT(RT_DEBUG_ERROR,("ACT - Send2040CoexistAction( BSSCoexist2040 = 0x%x ) \n", pAd->CommonCfg.BSSCoexist2040.word));
-
-}
-
-
-/*
- ==========================================================================
- Description:
- After scan, Update 20/40 BSS Coexistence IE and send out.
- According to 802.11n D3.03 11.14.10
-
- Parameters:
- ==========================================================================
- */
-VOID Update2040CoexistFrameAndNotify(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN BOOLEAN bAddIntolerantCha)
-{
- BSS_2040_COEXIST_IE OldValue;
-
- OldValue.word = pAd->CommonCfg.BSSCoexist2040.word;
- if ((pAd->CommonCfg.TriggerEventTab.EventANo > 0) || (pAd->CommonCfg.TriggerEventTab.EventBCountDown > 0))
- pAd->CommonCfg.BSSCoexist2040.field.BSS20WidthReq = 1;
-
- // Need to check !!!!
- // How STA will set Intolerant40 if implementation dependent. Now we don't set this bit first.!!!!!
- // So Only check BSS20WidthReq change.
- if (OldValue.field.BSS20WidthReq != pAd->CommonCfg.BSSCoexist2040.field.BSS20WidthReq)
- {
- Send2040CoexistAction(pAd, Wcid, bAddIntolerantCha);
- }
-}
-#endif // CONFIG_STA_SUPPORT //
-
-
-BOOLEAN ChannelSwitchSanityCheck(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN UCHAR NewChannel,
- IN UCHAR Secondary)
-{
- UCHAR i;
-
- if (Wcid >= MAX_LEN_OF_MAC_TABLE)
- return FALSE;
-
- if ((NewChannel > 7) && (Secondary == 1))
- return FALSE;
-
- if ((NewChannel < 5) && (Secondary == 3))
- return FALSE;
-
- // 0. Check if new channel is in the channellist.
- for (i = 0;i < pAd->ChannelListNum;i++)
- {
- if (pAd->ChannelList[i].Channel == NewChannel)
- {
- break;
- }
- }
-
- if (i == pAd->ChannelListNum)
- return FALSE;
-
- return TRUE;
-}
-
-
-VOID ChannelSwitchAction(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN UCHAR NewChannel,
- IN UCHAR Secondary)
-{
- UCHAR BBPValue = 0;
- ULONG MACValue;
-
- DBGPRINT(RT_DEBUG_TRACE,("SPECTRUM - ChannelSwitchAction(NewChannel = %d , Secondary = %d) \n", NewChannel, Secondary));
-
- if (ChannelSwitchSanityCheck(pAd, Wcid, NewChannel, Secondary) == FALSE)
- return;
-
- // 1. Switches to BW = 20.
- if (Secondary == 0)
- {
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
- BBPValue&= (~0x18);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
- 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" ));
- }
- pAd->CommonCfg.BBPCurrentBW = BW_20;
- pAd->CommonCfg.Channel = NewChannel;
- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel;
- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel,FALSE);
- AsicLockChannel(pAd, pAd->CommonCfg.Channel);
- pAd->MacTab.Content[Wcid].HTPhyMode.field.BW = 0;
- DBGPRINT(RT_DEBUG_TRACE, ("!!!20MHz !!! \n" ));
- }
- // 1. Switches to BW = 40 And Station supports BW = 40.
- else if (((Secondary == 1) || (Secondary == 3)) && (pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == 1))
- {
- pAd->CommonCfg.Channel = NewChannel;
-
- if (Secondary == 1)
- {
- // Secondary above.
- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2;
- RTMP_IO_READ32(pAd, TX_BAND_CFG, &MACValue);
- MACValue &= 0xfe;
- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, MACValue);
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
- BBPValue&= (~0x18);
- BBPValue|= (0x10);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPValue);
- BBPValue&= (~0x20);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPValue);
- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Lower LINK UP !!! Control Channel at Below. Central = %d \n", pAd->CommonCfg.CentralChannel ));
- }
- else
- {
- // Secondary below.
- pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2;
- RTMP_IO_READ32(pAd, TX_BAND_CFG, &MACValue);
- MACValue &= 0xfe;
- MACValue |= 0x1;
- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, MACValue);
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
- BBPValue&= (~0x18);
- BBPValue|= (0x10);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPValue);
- BBPValue&= (~0x20);
- BBPValue|= (0x20);
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPValue);
- DBGPRINT(RT_DEBUG_TRACE, ("!!!40MHz Upper LINK UP !!! Control Channel at UpperCentral = %d \n", pAd->CommonCfg.CentralChannel ));
- }
- pAd->CommonCfg.BBPCurrentBW = BW_40;
- AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
- AsicLockChannel(pAd, pAd->CommonCfg.CentralChannel);
- pAd->MacTab.Content[Wcid].HTPhyMode.field.BW = 1;
- }
-}
-#endif // DOT11N_DRAFT3 //
-#endif // DOT11_N_SUPPORT //
-
VOID PeerPublicAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
{
-#ifdef DOT11N_DRAFT3
- UCHAR Action = Elem->Msg[LENGTH_802_11+1];
-#endif // DOT11N_DRAFT3 //
-
if (Elem->Wcid >= MAX_LEN_OF_MAC_TABLE)
return;
-
-#ifdef DOT11N_DRAFT3
- switch(Action)
- {
- case ACTION_BSS_2040_COEXIST: // Format defined in IEEE 7.4.7a.1 in 11n Draf3.03
- {
- //UCHAR BssCoexist;
- BSS_2040_COEXIST_ELEMENT *pCoexistInfo;
- BSS_2040_COEXIST_IE *pBssCoexistIe;
- BSS_2040_INTOLERANT_CH_REPORT *pIntolerantReport = NULL;
-
- if (Elem->MsgLen <= (LENGTH_802_11 + sizeof(BSS_2040_COEXIST_ELEMENT)) )
- {
- DBGPRINT(RT_DEBUG_ERROR, ("ACTION - 20/40 BSS Coexistence Management Frame length too short! len = %ld!\n", Elem->MsgLen));
- break;
- }
- DBGPRINT(RT_DEBUG_TRACE, ("ACTION - 20/40 BSS Coexistence Management action----> \n"));
- hex_dump("CoexistenceMgmtFrame", Elem->Msg, Elem->MsgLen);
-
-
- pCoexistInfo = (BSS_2040_COEXIST_ELEMENT *) &Elem->Msg[LENGTH_802_11+2];
- //hex_dump("CoexistInfo", (PUCHAR)pCoexistInfo, sizeof(BSS_2040_COEXIST_ELEMENT));
- if (Elem->MsgLen >= (LENGTH_802_11 + sizeof(BSS_2040_COEXIST_ELEMENT) + sizeof(BSS_2040_INTOLERANT_CH_REPORT)))
- {
- pIntolerantReport = (BSS_2040_INTOLERANT_CH_REPORT *)((PUCHAR)pCoexistInfo + sizeof(BSS_2040_COEXIST_ELEMENT));
- }
- //hex_dump("IntolerantReport ", (PUCHAR)pIntolerantReport, sizeof(BSS_2040_INTOLERANT_CH_REPORT));
-
- pBssCoexistIe = (BSS_2040_COEXIST_IE *)(&pCoexistInfo->BssCoexistIe);
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- if (INFRA_ON(pAd))
- {
- StaPublicAction(pAd, pCoexistInfo);
- }
- }
-#endif // CONFIG_STA_SUPPORT //
-
- }
- break;
- }
-
-#endif // DOT11N_DRAFT3 //
-
}
@@ -694,7 +328,6 @@ VOID PeerRMAction(
return;
}
-#ifdef DOT11_N_SUPPORT
static VOID respond_ht_information_exchange_action(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
@@ -721,15 +354,12 @@ static VOID respond_ht_information_exchange_action(
NdisZeroMemory(&HTINFOframe, sizeof(FRAME_HT_INFO));
// 2-1. Prepare ADDBA Response frame.
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
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;
HTINFOframe.Action = HT_INFO_EXCHANGE;
@@ -745,51 +375,6 @@ static VOID respond_ht_information_exchange_action(
MlmeFreeMemory(pAd, pOutBuffer);
}
-
-#ifdef DOT11N_DRAFT3
-VOID SendNotifyBWActionFrame(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN UCHAR apidx)
-{
- PUCHAR pOutBuffer = NULL;
- NDIS_STATUS NStatus;
- FRAME_ACTION_HDR Frame;
- ULONG FrameLen;
- PUCHAR pAddr1;
-
-
- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory
- if(NStatus != NDIS_STATUS_SUCCESS)
- {
- DBGPRINT(RT_DEBUG_ERROR,("ACT - SendNotifyBWAction() allocate memory failed \n"));
- return;
- }
-
- if (Wcid == MCAST_WCID)
- pAddr1 = &BROADCAST_ADDR[0];
- else
- pAddr1 = pAd->MacTab.Content[Wcid].Addr;
- ActHeaderInit(pAd, &Frame.Hdr, pAddr1, pAd->ApCfg.MBSSID[apidx].Bssid, pAd->ApCfg.MBSSID[apidx].Bssid);
-
- Frame.Category = CATEGORY_HT;
- Frame.Action = NOTIFY_BW_ACTION;
-
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- sizeof(FRAME_ACTION_HDR), &Frame,
- END_OF_ARGS);
-
- *(pOutBuffer + FrameLen) = pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth;
- FrameLen++;
-
-
- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);
- DBGPRINT(RT_DEBUG_TRACE,("ACT - SendNotifyBWAction(NotifyBW= %d)!\n", pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth));
-
-}
-#endif // DOT11N_DRAFT3 //
-
-
VOID PeerHTAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem)
@@ -803,7 +388,7 @@ 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
@@ -813,7 +398,6 @@ VOID PeerHTAction(
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;
@@ -881,11 +465,6 @@ VOID ORIBATimerTimeout(
INT i, total;
UCHAR TID;
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
total = pAd->MacTab.Size * NUM_OF_TID;
for (i = 1; ((i <MAX_LEN_OF_BA_ORI_TABLE) && (total > 0)) ; i++)
@@ -938,10 +517,8 @@ VOID SendRefreshBAR(
}
Sequence = pEntry->TxSeq[TID];
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- BarHeaderInit(pAd, &FrameBar, pEntry->Addr, pAd->CurrentAddress);
-#endif // CONFIG_STA_SUPPORT //
+
+ BarHeaderInit(pAd, &FrameBar, pEntry->Addr, pAd->CurrentAddress);
FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function.
FrameBar.StartingSeq.field.StartSeq = Sequence; // make sure sequence not clear in DEL funciton.
@@ -950,15 +527,20 @@ VOID SendRefreshBAR(
MakeOutgoingFrame(pOutBuffer, &FrameLen,
sizeof(FRAME_BAR), &FrameBar,
END_OF_ARGS);
+
if (1) // Now we always send BAR.
{
+#ifndef RT30xx
MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
+#endif
+#ifdef RT30xx
+ MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);
+#endif
}
MlmeFreeMemory(pAd, pOutBuffer);
}
}
}
-#endif // DOT11_N_SUPPORT //
VOID ActHeaderInit(
IN PRTMP_ADAPTER pAd,
diff --git a/drivers/staging/rt2860/common/action.h b/drivers/staging/rt2860/common/action.h
index ce3877dce81b..cfc2a5f8d1aa 100644
--- a/drivers/staging/rt2860/common/action.h
+++ b/drivers/staging/rt2860/common/action.h
@@ -41,17 +41,10 @@
typedef struct PACKED __HT_INFO_OCTET
{
-#ifdef RT_BIG_ENDIAN
- UCHAR Reserved:5;
- UCHAR STA_Channel_Width:1;
- UCHAR Forty_MHz_Intolerant:1;
- UCHAR Request:1;
-#else
UCHAR Request:1;
UCHAR Forty_MHz_Intolerant:1;
UCHAR STA_Channel_Width:1;
UCHAR Reserved:5;
-#endif
} HT_INFORMATION_OCTET;
diff --git a/drivers/staging/rt2860/common/ba_action.c b/drivers/staging/rt2860/common/ba_action.c
index 591d1e2158da..b95a341caacd 100644
--- a/drivers/staging/rt2860/common/ba_action.c
+++ b/drivers/staging/rt2860/common/ba_action.c
@@ -25,8 +25,6 @@
*************************************************************************
*/
-#ifdef DOT11_N_SUPPORT
-
#include "../rt_config.h"
@@ -132,10 +130,7 @@ void Announce_Reordering_Packet(IN PRTMP_ADAPTER pAd,
// pass this 802.3 packet to upper layer or forward this packet to WM directly
//
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket, RTMP_GET_PACKET_IF(pPacket));
-#endif // CONFIG_STA_SUPPORT //
+ ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket, RTMP_GET_PACKET_IF(pPacket));
}
}
@@ -449,9 +444,6 @@ 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);
//
// force LastIndSeq to shift to LastIndSeq+1
//
@@ -468,22 +460,7 @@ void ba_flush_reordering_timeout_mpdus(
pBAEntry->LastIndSeq = Sequence;
}
- //printk("%x, flush one!\n", pBAEntry->LastIndSeq);
-
}
-#if 0
- else if (
- (RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(MAX_REORDERING_PACKET_TIMEOUT))) &&
- (pBAEntry->list.qlen > 1))
- )
- {
- 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));
- ba_refresh_reordering_mpdus(pAd, pBAEntry);
- pBAEntry->LastIndSeqAtTimer = Now32;
- }
-#endif
}
@@ -554,6 +531,13 @@ VOID BAOriSessionSetUp(
pBAEntry->TimeOutValue = TimeOut;
pBAEntry->pAdapter = pAd;
+#ifdef RT30xx
+ DBGPRINT(RT_DEBUG_TRACE,("Send AddBA to %02x:%02x:%02x:%02x:%02x:%02x Tid:%d isForced:%d Wcid:%d\n"
+ ,pEntry->Addr[0],pEntry->Addr[1],pEntry->Addr[2]
+ ,pEntry->Addr[3],pEntry->Addr[4],pEntry->Addr[5]
+ ,TID,isForced,pEntry->Aid));
+#endif
+
if (!(pEntry->TXBAbitmap & (1<<TID)))
{
RTMPInitTimer(pAd, &pBAEntry->ORIBATimer, GET_TIMER_FUNCTION(BAOriSessionSetupTimeout), pBAEntry, FALSE);
@@ -610,11 +594,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);
-#endif // CONFIG_STA_SUPPORT //
+ BarHeaderInit(pAd, &FrameBar, pAd->MacTab.Content[pBAEntry->Wcid].Addr, pAd->CurrentAddress);
FrameBar.StartingSeq.field.FragNum = 0; // make sure sequence not clear in DEL function.
FrameBar.StartingSeq.field.StartSeq = pBAEntry->Sequence; // make sure sequence not clear in DEL funciton.
@@ -701,10 +681,6 @@ BOOLEAN BARecSessionAdd(
RTMPInitTimer(pAd, &pBAEntry->RECBATimer, GET_TIMER_FUNCTION(BARecSessionIdleTimeout), pBAEntry, TRUE);
}
-#if 0 // for debugging
- RTMPSetTimer(&pBAEntry->RECBATimer, REC_BA_SESSION_IDLE_TIMEOUT);
-#endif
-
// Set Bitmap flag.
pEntry->RXBAbitmap |= (1<<TID);
pEntry->BARecWcidArray[TID] = Idx;
@@ -1083,20 +1059,9 @@ VOID BAOriSessionSetupTimeout(
pAd = pBAEntry->pAdapter;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- // Do nothing if monitor mode is on
- if (MONITOR_ON(pAd))
- return;
- }
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef RALINK_ATE
- // Nothing to do in ATE mode.
- if (ATE_ON(pAd))
+ // Do nothing if monitor mode is on
+ if (MONITOR_ON(pAd))
return;
-#endif // RALINK_ATE //
pEntry = &pAd->MacTab.Content[pBAEntry->Wcid];
@@ -1113,8 +1078,16 @@ VOID BAOriSessionSetupTimeout(
AddbaReq.Token = pBAEntry->Token;
MlmeEnqueue(pAd, ACTION_STATE_MACHINE, MT2_MLME_ADD_BA_CATE, sizeof(MLME_ADDBA_REQ_STRUCT), (PVOID)&AddbaReq);
RT28XX_MLME_HANDLER(pAd);
+#ifndef RT30xx
DBGPRINT(RT_DEBUG_TRACE,("BA Ori Session Timeout(%d) : Send ADD BA again\n", pBAEntry->Token));
-
+#endif
+#ifdef RT30xx
+ DBGPRINT(RT_DEBUG_TRACE,("BA Ori Session Timeout(%d) to %02x:%02x:%02x:%02x:%02x:%02x Tid:%d Wcid:%d\n"
+ ,pBAEntry->Token
+ ,pEntry->Addr[0],pEntry->Addr[1],pEntry->Addr[2]
+ ,pEntry->Addr[3],pEntry->Addr[4],pEntry->Addr[5]
+ ,pBAEntry->TID,pEntry->Aid));
+#endif
pBAEntry->Token++;
RTMPSetTimer(&pBAEntry->ORIBATimer, ORI_BA_SESSION_TIMEOUT);
}
@@ -1229,21 +1202,15 @@ VOID PeerAddBAReqAction(
}
NdisZeroMemory(&ADDframe, sizeof(FRAME_ADDBA_RSP));
+
// 2-1. Prepare ADDBA Response frame.
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
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;
ADDframe.Token = pAddreqFrame->Token;
@@ -1310,9 +1277,7 @@ VOID PeerAddBARspAction(
}
// Rcv Decline StatusCode
if ((pFrame->StatusCode == 37)
-#ifdef CONFIG_STA_SUPPORT
|| ((pAd->OpMode == OPMODE_STA) && STA_TGN_WIFI_ON(pAd) && (pFrame->StatusCode != 0))
-#endif // CONFIG_STA_SUPPORT //
)
{
pAd->MacTab.Content[Elem->Wcid].BADeclineBitmap |= 1<<pFrame->BaParm.TID;
@@ -1426,6 +1391,10 @@ VOID SendPSMPAction(
//ULONG Idx;
FRAME_PSMP_ACTION Frame;
ULONG FrameLen;
+#ifdef RT30xx
+ UCHAR bbpdata=0;
+ UINT32 macdata;
+#endif // RT30xx //
NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory
if (NStatus != NDIS_STATUS_SUCCESS)
@@ -1433,22 +1402,62 @@ VOID SendPSMPAction(
DBGPRINT(RT_DEBUG_ERROR,("BA - MlmeADDBAAction() allocate memory failed \n"));
return;
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->MacTab.Content[Wcid].Addr);
-#endif // CONFIG_STA_SUPPORT //
+
+ ActHeaderInit(pAd, &Frame.Hdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->MacTab.Content[Wcid].Addr);
Frame.Category = CATEGORY_HT;
Frame.Action = SMPS_ACTION;
switch (Psmp)
{
case MMPS_ENABLE:
+#ifdef RT30xx
+ if (IS_RT3090(pAd))
+ {
+ // disable MMPS BBP control register
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &bbpdata);
+ bbpdata &= ~(0x04); //bit 2
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, bbpdata);
+
+ // disable MMPS MAC control register
+ RTMP_IO_READ32(pAd, 0x1210, &macdata);
+ macdata &= ~(0x09); //bit 0, 3
+ RTMP_IO_WRITE32(pAd, 0x1210, macdata);
+ }
+#endif // RT30xx //
Frame.Psmp = 0;
break;
case MMPS_DYNAMIC:
+#ifdef RT30xx
+ if (IS_RT3090(pAd))
+ {
+ // enable MMPS BBP control register
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &bbpdata);
+ bbpdata |= 0x04; //bit 2
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, bbpdata);
+
+ // enable MMPS MAC control register
+ RTMP_IO_READ32(pAd, 0x1210, &macdata);
+ macdata |= 0x09; //bit 0, 3
+ RTMP_IO_WRITE32(pAd, 0x1210, macdata);
+ }
+#endif // RT30xx //
Frame.Psmp = 3;
break;
case MMPS_STATIC:
+#ifdef RT30xx
+ if (IS_RT3090(pAd))
+ {
+ // enable MMPS BBP control register
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &bbpdata);
+ bbpdata |= 0x04; //bit 2
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, bbpdata);
+
+ // enable MMPS MAC control register
+ RTMP_IO_READ32(pAd, 0x1210, &macdata);
+ macdata |= 0x09; //bit 0, 3
+ RTMP_IO_WRITE32(pAd, 0x1210, macdata);
+ }
+#endif // RT30xx //
Frame.Psmp = 1;
break;
}
@@ -1501,10 +1510,7 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet(
// a. pointer pRxBlk->pData to payload
// b. modify pRxBlk->DataSize
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3);
-#endif // CONFIG_STA_SUPPORT //
+ RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3);
ASSERT(pRxBlk->pRxPacket);
pRxPkt = RTPKT_TO_OSPKT(pRxBlk->pRxPacket);
@@ -1519,18 +1525,9 @@ void convert_reordering_packet_to_preAMSDU_or_802_3_packet(
//
if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU))
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
#ifdef LINUX
- NdisMoveMemory(skb_push(pRxPkt, LENGTH_802_3), Header802_3, LENGTH_802_3);
-#endif
-#ifdef UCOS
- NdisMoveMemory(net_pkt_push(pRxPkt, LENGTH_802_3), Header802_3, LENGTH_802_3);
+ NdisMoveMemory(skb_push(pRxPkt, LENGTH_802_3), Header802_3, LENGTH_802_3);
#endif
- }
-#endif // CONFIG_STA_SUPPORT //
}
}
@@ -1598,13 +1595,9 @@ static VOID ba_enqueue_reordering_packet(
}
else
{
-#if 0
- DBGPRINT(RT_DEBUG_ERROR, ("!!! (%d:%d) Can't allocate reordering mpdu blk\n",
- blk_count, pBAEntry->list.qlen));
-#else
DBGPRINT(RT_DEBUG_ERROR, ("!!! (%d) Can't allocate reordering mpdu blk\n",
pBAEntry->list.qlen));
-#endif
+
/*
* flush all pending reordering mpdus
* and receving mpdu to upper layer
@@ -1652,29 +1645,11 @@ VOID Indicate_AMPDU_Packet(
if (!RX_BLK_TEST_FLAG(pRxBlk, fRX_AMSDU) && (pRxBlk->DataSize > MAX_RX_PKT_LEN))
{
-#if 0 // sample take off, no use
- static int err_size;
-
- err_size++;
- if (err_size > 20) {
- printk("AMPDU DataSize = %d\n", pRxBlk->DataSize);
- hex_dump("802.11 Header", (UCHAR *)pRxBlk->pHeader, 24);
- hex_dump("Payload", pRxBlk->pData, 64);
- err_size = 0;
- }
-#endif
// release packet
RELEASE_NDIS_PACKET(pAd, pRxBlk->pRxPacket, NDIS_STATUS_FAILURE);
return;
}
-
-#if 0 // test
- /* Rec BA Session had been torn down */
- INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID);
- return;
-#endif
-
if (Wcid < MAX_LEN_OF_MAC_TABLE)
{
Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID];
@@ -1769,10 +1744,6 @@ VOID Indicate_AMPDU_Packet(
//
else
{
-#if 0
- ba_refresh_reordering_mpdus(pAd, pBAEntry);
- INDICATE_LEGACY_OR_AMSDU(pAd, pRxBlk, FromWhichBSSID);
-#else
LONG WinStartSeq, TmpSeq;
@@ -1794,9 +1765,5 @@ VOID Indicate_AMPDU_Packet(
{
pBAEntry->LastIndSeq = TmpSeq;
}
-#endif
}
}
-
-#endif // DOT11_N_SUPPORT //
-
diff --git a/drivers/staging/rt2860/common/cmm_data.c b/drivers/staging/rt2860/common/cmm_data.c
index b3f88f52af7c..66eca202eae4 100644
--- a/drivers/staging/rt2860/common/cmm_data.c
+++ b/drivers/staging/rt2860/common/cmm_data.c
@@ -105,7 +105,9 @@ NDIS_STATUS MiniportMMRequest(
PNDIS_PACKET pPacket;
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
ULONG FreeNum;
+#ifdef RT2860
unsigned long IrqFlags = 0;
+#endif
UCHAR IrqState;
UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN];
@@ -117,9 +119,10 @@ NDIS_STATUS MiniportMMRequest(
IrqState = pAd->irq_disabled;
+#ifdef RT2860
if ((pAd->MACVersion == 0x28600100) && (!IrqState))
RTMP_IRQ_LOCK(&pAd->irq_lock, IrqFlags);
-
+#endif
do
{
// Reset is in progress, stop immediately
@@ -172,14 +175,15 @@ NDIS_STATUS MiniportMMRequest(
} while (FALSE);
+#ifdef RT2860
// 2860C use Tx Ring
if ((pAd->MACVersion == 0x28600100) && (!IrqState))
RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags);
-
+#endif
return Status;
}
-
+#ifdef RT2860
NDIS_STATUS MiniportMMRequestUnlock(
IN PRTMP_ADAPTER pAd,
IN UCHAR QueIdx,
@@ -247,7 +251,115 @@ NDIS_STATUS MiniportMMRequestUnlock(
return Status;
}
+#endif
+#ifdef RT30xx
+NDIS_STATUS MlmeDataHardTransmit(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR QueIdx,
+ IN PNDIS_PACKET pPacket);
+
+#define MAX_DATAMM_RETRY 3
+/*
+ ========================================================================
+
+ Routine Description:
+ API for MLME to transmit management frame to AP (BSS Mode)
+ or station (IBSS Mode)
+
+ Arguments:
+ pAd Pointer to our adapter
+ pData Pointer to the outgoing 802.11 frame
+ Length Size of outgoing management frame
+
+ Return Value:
+ NDIS_STATUS_FAILURE
+ NDIS_STATUS_PENDING
+ NDIS_STATUS_SUCCESS
+
+ IRQL = PASSIVE_LEVEL
+ IRQL = DISPATCH_LEVEL
+
+ Note:
+
+ ========================================================================
+*/
+NDIS_STATUS MiniportDataMMRequest(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR QueIdx,
+ IN PUCHAR pData,
+ IN UINT Length)
+{
+ PNDIS_PACKET pPacket;
+ NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
+ ULONG FreeNum;
+ int retry = 0;
+ UCHAR IrqState;
+ UCHAR rtmpHwHdr[TXINFO_SIZE + TXWI_SIZE]; //RTMP_HW_HDR_LEN];
+
+ ASSERT(Length <= MGMT_DMA_BUFFER_SIZE);
+
+ // 2860C use Tx Ring
+ IrqState = pAd->irq_disabled;
+
+ do
+ {
+ // Reset is in progress, stop immediately
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) ||
+ RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS | fRTMP_ADAPTER_NIC_NOT_EXIST)||
+ !RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_START_UP))
+ {
+ Status = NDIS_STATUS_FAILURE;
+ break;
+ }
+
+ // Check Free priority queue
+ // Since we use PBF Queue2 for management frame. Its corresponding DMA ring should be using TxRing.
+
+ // 2860C use Tx Ring
+
+ // free Tx(QueIdx) resources
+ FreeNum = GET_TXRING_FREENO(pAd, QueIdx);
+
+ if ((FreeNum > 0))
+ {
+ // We need to reserve space for rtmp hardware header. i.e., TxWI for RT2860 and TxInfo+TxWI for RT2870
+ NdisZeroMemory(&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE));
+ Status = RTMPAllocateNdisPacket(pAd, &pPacket, (PUCHAR)&rtmpHwHdr, (TXINFO_SIZE + TXWI_SIZE), pData, Length);
+ if (Status != NDIS_STATUS_SUCCESS)
+ {
+ DBGPRINT(RT_DEBUG_WARN, ("MiniportMMRequest (error:: can't allocate NDIS PACKET)\n"));
+ break;
+ }
+
+ //pAd->CommonCfg.MlmeTransmit.field.MODE = MODE_CCK;
+ //pAd->CommonCfg.MlmeRate = RATE_2;
+
+
+ Status = MlmeDataHardTransmit(pAd, QueIdx, pPacket);
+ if (Status != NDIS_STATUS_SUCCESS)
+ RTMPFreeNdisPacket(pAd, pPacket);
+ retry = MAX_DATAMM_RETRY;
+ }
+ else
+ {
+ retry ++;
+
+ printk("retry %d\n", retry);
+ pAd->RalinkCounters.MgmtRingFullCount++;
+ if (retry >= MAX_DATAMM_RETRY)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("Qidx(%d), not enough space in DataRing, MgmtRingFullCount=%ld!\n",
+ QueIdx, pAd->RalinkCounters.MgmtRingFullCount));
+ }
+ }
+
+ } while (retry < MAX_DATAMM_RETRY);
+
+
+ return Status;
+}
+#endif /* RT30xx */
/*
========================================================================
@@ -283,14 +395,16 @@ NDIS_STATUS MlmeHardTransmit(
return NDIS_STATUS_FAILURE;
}
+#ifdef RT2860
if ( pAd->MACVersion == 0x28600100 )
return MlmeHardTransmitTxRing(pAd,QueIdx,pPacket);
else
+#endif
return MlmeHardTransmitMgmtRing(pAd,QueIdx,pPacket);
}
-
+#ifdef RT2860
NDIS_STATUS MlmeHardTransmitTxRing(
IN PRTMP_ADAPTER pAd,
IN UCHAR QueIdx,
@@ -300,10 +414,6 @@ NDIS_STATUS MlmeHardTransmitTxRing(
PUCHAR pSrcBufVA;
UINT SrcBufLen;
PTXD_STRUC pTxD;
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
- TXD_STRUC TxD;
-#endif
PHEADER_802_11 pHeader_802_11;
BOOLEAN bAckRequired, bInsertTimestamp;
ULONG SrcBufPA;
@@ -335,14 +445,7 @@ NDIS_STATUS MlmeHardTransmitTxRing(
SwIdx = pAd->TxRing[QueIdx].TxCpuIdx;
-#ifndef RT_BIG_ENDIAN
pTxD = (PTXD_STRUC) pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC)pAd->TxRing[QueIdx].Cell[SwIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
if (pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket)
{
@@ -350,15 +453,10 @@ NDIS_STATUS MlmeHardTransmitTxRing(
return NDIS_STATUS_FAILURE;
}
+ // outgoing frame always wakeup PHY to prevent frame lost
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
+ AsicForceWakeup(pAd, FROM_TX);
-#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, FROM_TX);
- }
-#endif // CONFIG_STA_SUPPORT //
pFirstTxWI =(PTXWI_STRUC)pSrcBufVA;
pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXWI_SIZE);
@@ -388,7 +486,7 @@ NDIS_STATUS MlmeHardTransmitTxRing(
//
//
// 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)
{
@@ -401,7 +499,6 @@ NDIS_STATUS MlmeHardTransmitTxRing(
pHeader_802_11->FC.PwrMgmt = pAd->CommonCfg.bAPSDForcePowerSave;
}
}
-#endif // CONFIG_STA_SUPPORT //
bInsertTimestamp = FALSE;
if (pHeader_802_11->FC.Type == BTYPE_CNTL) // must be PS-POLL
@@ -438,9 +535,6 @@ NDIS_STATUS MlmeHardTransmitTxRing(
return (NDIS_STATUS_FAILURE);
}
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader_802_11, DIR_WRITE, FALSE);
-#endif
//
// fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET
// should always has only one ohysical buffer, and the whole frame size equals
@@ -470,9 +564,7 @@ NDIS_STATUS MlmeHardTransmitTxRing(
pAd->TxRing[QueIdx].Cell[SwIdx].pNdisPacket = pPacket;
pAd->TxRing[QueIdx].Cell[SwIdx].pNextNdisPacket = NULL;
-#ifdef RT_BIG_ENDIAN
- RTMPWIEndianChange((PUCHAR)pFirstTxWI, TYPE_TXWI);
-#endif
+
SrcBufPA = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE);
@@ -484,11 +576,6 @@ NDIS_STATUS MlmeHardTransmitTxRing(
pTxD->SDPtr0 = SrcBufPA;
pTxD->DMADONE = 0;
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif
-
pAd->RalinkCounters.KickTxCount++;
pAd->RalinkCounters.OneSecTxDoneCount++;
@@ -499,7 +586,25 @@ NDIS_STATUS MlmeHardTransmitTxRing(
return NDIS_STATUS_SUCCESS;
}
+#endif /* RT2860 */
+#ifdef RT30xx
+NDIS_STATUS MlmeDataHardTransmit(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR QueIdx,
+ IN PNDIS_PACKET pPacket)
+{
+ if ((pAd->CommonCfg.RadarDetect.RDMode != RD_NORMAL_MODE)
+ )
+ {
+ return NDIS_STATUS_FAILURE;
+ }
+
+#ifdef RT2870
+ return MlmeHardTransmitMgmtRing(pAd,QueIdx,pPacket);
+#endif // RT2870 //
+}
+#endif /* RT30xx */
NDIS_STATUS MlmeHardTransmitMgmtRing(
IN PRTMP_ADAPTER pAd,
@@ -525,14 +630,14 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
return NDIS_STATUS_FAILURE;
}
-#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, FROM_TX);
- }
-#endif // CONFIG_STA_SUPPORT //
+ // outgoing frame always wakeup PHY to prevent frame lost
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
+#ifdef RT2860
+ AsicForceWakeup(pAd, FROM_TX);
+#endif
+#ifdef RT2870
+ AsicForceWakeup(pAd, TRUE);
+#endif
pFirstTxWI = (PTXWI_STRUC)(pSrcBufVA + TXINFO_SIZE);
pHeader_802_11 = (PHEADER_802_11) (pSrcBufVA + TXINFO_SIZE + TXWI_SIZE); //TXWI_SIZE);
@@ -556,14 +661,10 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
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
-#ifdef DOT11_N_SUPPORT
|| pAd->CommonCfg.PhyMode == PHY_11ABGN_MIXED
-#endif // DOT11_N_SUPPORT //
)
{
if (pAd->LatchRfRegs.Channel > 14)
@@ -572,7 +673,6 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
pAd->CommonCfg.MlmeTransmit.field.MODE = 0;
}
}
-#endif // CONFIG_STA_SUPPORT //
//
// Should not be hard code to set PwrMgmt to 0 (PWR_ACTIVE)
@@ -582,7 +682,7 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
// 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) && (pHeader_802_11->FC.Type != BTYPE_CNTL))
{
@@ -592,18 +692,15 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
else
pHeader_802_11->FC.PwrMgmt = PWR_ACTIVE;
}
-#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)
@@ -639,10 +736,6 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
return (NDIS_STATUS_FAILURE);
}
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader_802_11, DIR_WRITE, FALSE);
-#endif
-
//
// fill scatter-and-gather buffer list into TXD. Internally created NDIS PACKET
// should always has only one ohysical buffer, and the whole frame size equals
@@ -669,10 +762,6 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
IFS_BACKOFF, FALSE, &pMacEntry->MaxHTPhyMode);
}
-#ifdef RT_BIG_ENDIAN
- RTMPWIEndianChange((PUCHAR)pFirstTxWI, TYPE_TXWI);
-#endif
-
// Now do hardware-depened kick out.
HAL_KickOutMgmtTx(pAd, QueIdx, pPacket, pSrcBufVA, SrcBufLen);
@@ -752,9 +841,7 @@ 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)
@@ -768,7 +855,6 @@ static UCHAR TxPktClassification(
{ // 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
@@ -788,7 +874,6 @@ 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) &&
@@ -874,16 +959,15 @@ BOOLEAN RTMP_FillTxBlkInfo(
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);
- }
-#endif // CONFIG_STA_SUPPORT //
+ // If support WMM, enable it.
+#ifdef RT2860
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))
+#endif
+#ifdef RT2870
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) &&
+ CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE))
+#endif
+ TX_BLK_SET_FLAG(pTxBlk, fTX_bWMM);
}
if (pTxBlk->TxFrameType == TX_LEGACY_FRAME)
@@ -892,7 +976,7 @@ BOOLEAN RTMP_FillTxBlkInfo(
((pAd->OpMode == OPMODE_AP) && (pMacEntry->MaxHTPhyMode.field.MODE == MODE_CCK) && (pMacEntry->MaxHTPhyMode.field.MCS == RATE_1)))
{ // 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)) &&
@@ -901,16 +985,13 @@ 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))
{
@@ -932,6 +1013,11 @@ BOOLEAN RTMP_FillTxBlkInfo(
}
return TRUE;
+
+#ifdef RT30xx
+FillTxBlkErr:
+ return FALSE;
+#endif
}
@@ -963,13 +1049,10 @@ BOOLEAN CanDoAggregateTransmit(
return FALSE;
}
-#ifdef CONFIG_STA_SUPPORT
if ((INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA)) // must be unicast to AP
return TRUE;
else
-#endif // CONFIG_STA_SUPPORT //
return FALSE;
-
}
@@ -1022,6 +1105,7 @@ VOID RTMPDeQueuePacket(
if (QIdx == NUM_OF_TX_RING)
{
sQIdx = 0;
+//PS packets use HCCA queue when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA)
eQIdx = 3; // 4 ACs, start from 0.
}
else
@@ -1064,7 +1148,7 @@ VOID RTMPDeQueuePacket(
DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags);
break;
}
-
+#ifdef RT2860
FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx);
#ifdef DBG_DIAGNOSE
@@ -1089,7 +1173,7 @@ VOID RTMPDeQueuePacket(
RTMPFreeTXDUponTxDmaDone(pAd, QueIdx);
FreeNumber[QueIdx] = GET_TXRING_FREENO(pAd, QueIdx);
}
-
+#endif /* RT2860 */
// probe the Queue Head
pQueue = &pAd->TxSwQueue[QueIdx];
if ((pEntry = pQueue->Head) == NULL)
@@ -1158,32 +1242,29 @@ VOID RTMPDeQueuePacket(
pTxBlk->TxFrameType = TX_LEGACY_FRAME;
}
+#ifdef RT2870
+ DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags);
+#endif // RT2870 //
Count += pTxBlk->TxPacketList.Number;
- // Do HardTransmit now.
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- Status = STAHardTransmit(pAd, pTxBlk, QueIdx);
-#endif // CONFIG_STA_SUPPORT //
+ // Do HardTransmit now.
+ Status = STAHardTransmit(pAd, pTxBlk, QueIdx);
+#ifdef RT2860
DEQUEUE_UNLOCK(&pAd->irq_lock, bIntContext, IrqFlags);
// static rate also need NICUpdateFifoStaCounters() function.
//if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED))
NICUpdateFifoStaCounters(pAd);
+#endif
}
RT28XX_STOP_DEQUEUE(pAd, QueIdx, IrqFlags);
-
-#ifdef BLOCK_NET_IF
- if ((pAd->blockQueueTab[QueIdx].SwTxQueueBlockFlag == TRUE)
- && (pAd->TxSwQueue[QueIdx].Number < 1))
- {
- releaseNetIf(&pAd->blockQueueTab[QueIdx]);
- }
-#endif // BLOCK_NET_IF //
-
+#ifdef RT2870
+ if (!hasTxDesc)
+ RTUSBKickBulkOut(pAd);
+#endif // RT2870 //
}
}
@@ -1318,7 +1399,6 @@ 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 )
@@ -1326,7 +1406,6 @@ VOID RTMPWriteTxWI(
pTxWI->BAWinSize = BASize;
pTxWI->ShortGI = pTransmit->field.ShortGI;
pTxWI->STBC = pTransmit->field.STBC;
-#endif // DOT11_N_SUPPORT //
pTxWI->WirelessCliID = WCID;
pTxWI->MPDUtotalByteCount = Length;
@@ -1334,16 +1413,11 @@ VOID RTMPWriteTxWI(
// If CCK or OFDM, BW must be 20
pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW);
-#ifdef DOT11N_DRAFT3
- if (pTxWI->BW)
- pTxWI->BW = (pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth == 0) ? (BW_20) : (pTransmit->field.BW);
-#endif // DOT11N_DRAFT3 //
pTxWI->MCS = pTransmit->field.MCS;
pTxWI->PHYMODE = pTransmit->field.MODE;
pTxWI->CFACK = CfAck;
-#ifdef DOT11_N_SUPPORT
if (pMac)
{
if (pAd->CommonCfg.bMIMOPSEnable)
@@ -1373,7 +1447,6 @@ VOID RTMPWriteTxWI(
pTxWI->MpduDensity = pMac->MpduDensity;
}
}
-#endif // DOT11_N_SUPPORT //
pTxWI->PacketId = pTxWI->MCS;
NdisMoveMemory(pOutTxWI, &TxWI, sizeof(TXWI_STRUC));
@@ -1387,10 +1460,7 @@ VOID RTMPWriteTxWI_Data(
{
HTTRANSMIT_SETTING *pTransmit;
PMAC_TABLE_ENTRY pMacEntry;
-#ifdef DOT11_N_SUPPORT
UCHAR BASize;
-#endif // DOT11_N_SUPPORT //
-
ASSERT(pTxWI);
@@ -1409,15 +1479,6 @@ VOID RTMPWriteTxWI_Data(
pTxWI->ACK = TX_BLK_TEST_FLAG(pTxBlk, fTX_bAckRequired);
pTxWI->txop = pTxBlk->FrameGap;
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
- if (pMacEntry &&
- (pAd->StaCfg.BssType == BSS_INFRA) &&
- (pMacEntry->ValidAsDls == TRUE))
- pTxWI->WirelessCliID = BSSID_WCID;
- else
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
pTxWI->WirelessCliID = pTxBlk->Wcid;
pTxWI->MPDUtotalByteCount = pTxBlk->MpduHeaderLen + pTxBlk->SrcBufLen;
@@ -1425,11 +1486,6 @@ VOID RTMPWriteTxWI_Data(
// 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
@@ -1446,12 +1502,10 @@ VOID RTMPWriteTxWI_Data(
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))
@@ -1478,7 +1532,6 @@ VOID RTMPWriteTxWI_Data(
pTxWI->MpduDensity = pMacEntry->MpduDensity;
}
}
-#endif // DOT11_N_SUPPORT //
#ifdef DBG_DIAGNOSE
if (pTxBlk->QueIdx== 0)
@@ -1523,15 +1576,9 @@ VOID RTMPWriteTxWI_Cache(
pTxWI->PacketId = pTransmit->field.MCS;
}
-#ifdef DOT11_N_SUPPORT
pTxWI->AMPDU = ((pMacEntry->NoBADataCountDown == 0) ? TRUE: FALSE);
pTxWI->MIMOps = 0;
-#ifdef DOT11N_DRAFT3
- if (pTxWI->BW)
- pTxWI->BW = (pAd->CommonCfg.AddHTInfo.AddHtInfo.RecomWidth == 0) ? (BW_20) : (pTransmit->field.BW);
-#endif // DOT11N_DRAFT3 //
-
if (pAd->CommonCfg.bMIMOPSEnable)
{
// MIMO Power Save Mode
@@ -1550,7 +1597,6 @@ VOID RTMPWriteTxWI_Cache(
}
}
}
-#endif // DOT11_N_SUPPORT //
#ifdef DBG_DIAGNOSE
if (pTxBlk->QueIdx== 0)
@@ -1665,12 +1711,10 @@ BOOLEAN PeerIsAggreOn(
if (pMacEntry != NULL && CLIENT_STATUS_TEST_FLAG(pMacEntry, AFlags))
{
-#ifdef DOT11_N_SUPPORT
if (pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
{
return TRUE;
}
-#endif // DOT11_N_SUPPORT //
#ifdef AGGREGATION_SUPPORT
if (TxRate >= RATE_6 && pAd->CommonCfg.bAggregationCapable && (!(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) && CLIENT_STATUS_TEST_FLAG(pMacEntry, fCLIENT_STATUS_WMM_CAPABLE))))
@@ -1748,16 +1792,13 @@ PQUEUE_HEADER RTMPCheckTxSwQueue(
return (NULL);
}
-
+#ifdef RT2860
BOOLEAN RTMPFreeTXDUponTxDmaDone(
IN PRTMP_ADAPTER pAd,
IN UCHAR QueIdx)
{
PRTMP_TX_RING pTxRing;
PTXD_STRUC pTxD;
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
-#endif
PNDIS_PACKET pPacket;
UCHAR FREE = 0;
TXD_STRUC TxD, *pOriTxD;
@@ -1771,111 +1812,19 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(
RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF, &pTxRing->TxDmaIdx);
while (pTxRing->TxSwFreeIdx != pTxRing->TxDmaIdx)
{
-#ifdef RALINK_ATE
-#ifdef RALINK_28xx_QA
- PHEADER_802_11 pHeader80211;
-
- if ((ATE_ON(pAd)) && (pAd->ate.bQATxStart == TRUE))
- {
- if (pAd->ate.QID == QueIdx)
- {
- pAd->ate.TxDoneCount++;
- //pAd->ate.Repeat++;
- pAd->RalinkCounters.KickTxCount++;
-
- /* always use QID_AC_BE and FIFO_EDCA */
- ASSERT(pAd->ate.QID == 0);
- pAd->ate.TxAc0++;
-
- FREE++;
-#ifndef RT_BIG_ENDIAN
- pTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa);
- pOriTxD = pTxD;
- NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC));
- pTxD = &TxD;
-#else
- pDestTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa);
- pOriTxD = pDestTxD ;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
- pTxD->DMADONE = 0;
-
- pHeader80211 = pTxRing->Cell[pTxRing->TxSwFreeIdx].DmaBuf.AllocVa + sizeof(TXWI_STRUC);
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader80211, DIR_READ, FALSE);
-#endif
- pHeader80211->Sequence = ++pAd->ate.seq;
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader80211, DIR_WRITE, FALSE);
-#endif
-
- if ((pAd->ate.bQATxStart == TRUE) && (pAd->ate.Mode & ATE_TXFRAME) && (pAd->ate.TxDoneCount < pAd->ate.TxCount))
- {
- pAd->RalinkCounters.TransmittedByteCount += (pTxD->SDLen1 + pTxD->SDLen0);
- pAd->RalinkCounters.OneSecDmaDoneCount[QueIdx] ++;
- INC_RING_INDEX(pTxRing->TxSwFreeIdx, TX_RING_SIZE);
- /* get tx_tdx_idx again */
- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF , &pTxRing->TxDmaIdx);
- goto kick_out;
- }
- else if ((pAd->ate.TxStatus == 1)/* or (pAd->ate.bQATxStart == TRUE) ??? */ && (pAd->ate.TxDoneCount == pAd->ate.TxCount))//<========================PETER
- {
- DBGPRINT(RT_DEBUG_TRACE,("all Tx is done\n"));
- // Tx status enters idle mode.
- pAd->ate.TxStatus = 0;
- }
- else if (!(pAd->ate.Mode & ATE_TXFRAME))
- {
- /* not complete sending yet, but someone press the Stop TX botton. */
- DBGPRINT(RT_DEBUG_ERROR,("not complete sending yet, but someone pressed the Stop TX bottom\n"));
- DBGPRINT(RT_DEBUG_ERROR,("pAd->ate.Mode = 0x%02x\n", pAd->ate.Mode));
- }
- else
- {
- DBGPRINT(RT_DEBUG_OFF,("pTxRing->TxSwFreeIdx = %d\n", pTxRing->TxSwFreeIdx));
- }
-#ifndef RT_BIG_ENDIAN
- NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC));
-#else
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- *pDestTxD = TxD;
-#endif // RT_BIG_ENDIAN //
-
- INC_RING_INDEX(pTxRing->TxSwFreeIdx, TX_RING_SIZE);
- continue;
- }
- }
-#endif // RALINK_28xx_QA //
-#endif // RALINK_ATE //
-
// static rate also need NICUpdateFifoStaCounters() function.
//if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_TX_RATE_SWITCH_ENABLED))
NICUpdateFifoStaCounters(pAd);
/* Note : If (pAd->ate.bQATxStart == TRUE), we will never reach here. */
FREE++;
-#ifndef RT_BIG_ENDIAN
pTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa);
pOriTxD = pTxD;
NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC));
pTxD = &TxD;
-#else
- pDestTxD = (PTXD_STRUC) (pTxRing->Cell[pTxRing->TxSwFreeIdx].AllocVa);
- pOriTxD = pDestTxD ;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
pTxD->DMADONE = 0;
-
-#ifdef RALINK_ATE
- /* Execution of this block is not allowed when ATE is running. */
- if (!(ATE_ON(pAd)))
-#endif // RALINK_ATE //
/*====================================================================*/
{
pPacket = pTxRing->Cell[pTxRing->TxSwFreeIdx].pNdisPacket;
@@ -1915,59 +1864,8 @@ BOOLEAN RTMPFreeTXDUponTxDmaDone(
INC_RING_INDEX(pTxRing->TxSwFreeIdx, TX_RING_SIZE);
/* get tx_tdx_idx again */
RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QueIdx * RINGREG_DIFF , &pTxRing->TxDmaIdx);
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- *pDestTxD = TxD;
-#else
- NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC));
-#endif
-
-#ifdef RALINK_ATE
-#ifdef RALINK_28xx_QA
-kick_out:
-#endif // RALINK_28xx_QA //
- //
- // ATE_TXCONT mode also need to send some normal frames, so let it in.
- // ATE_STOP must be changed not to be 0xff
- // to prevent it from running into this block.
- //
- if ((pAd->ate.Mode & ATE_TXFRAME) && (pAd->ate.QID == QueIdx))
- {
- // TxDoneCount++ has been done if QA is used.
- if (pAd->ate.bQATxStart == FALSE)
- {
- pAd->ate.TxDoneCount++;
- }
- if (((pAd->ate.TxCount - pAd->ate.TxDoneCount + 1) >= TX_RING_SIZE))
- {
- /* Note : We increase TxCpuIdx here, not TxSwFreeIdx ! */
- INC_RING_INDEX(pAd->TxRing[QueIdx].TxCpuIdx, TX_RING_SIZE);
-#ifndef RT_BIG_ENDIAN//<==========================PETER
- pTxD = (PTXD_STRUC) (pTxRing->Cell[pAd->TxRing[QueIdx].TxCpuIdx].AllocVa);
- pOriTxD = pTxD;
- NdisMoveMemory(&TxD, pTxD, sizeof(TXD_STRUC));
- pTxD = &TxD;
-#else
- pDestTxD = (PTXD_STRUC) (pTxRing->Cell[pAd->TxRing[QueIdx].TxCpuIdx].AllocVa);
- pOriTxD = pDestTxD ;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
- pTxD->DMADONE = 0;
-#ifndef RT_BIG_ENDIAN//<==========================PETER
- NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC));
-#else
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- *pDestTxD = TxD;
-#endif
- // kick Tx-Ring.
- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QueIdx * RINGREG_DIFF, pAd->TxRing[QueIdx].TxCpuIdx);
- pAd->RalinkCounters.KickTxCount++;
- }
- }
-#endif // RALINK_ATE //
+ NdisMoveMemory(pOriTxD, pTxD, sizeof(TXD_STRUC));
}
@@ -2050,10 +1948,6 @@ VOID RTMPHandleMgmtRingDmaDoneInterrupt(
IN PRTMP_ADAPTER pAd)
{
PTXD_STRUC pTxD;
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
- TXD_STRUC TxD;
-#endif
PNDIS_PACKET pPacket;
UCHAR FREE = 0;
PRTMP_MGMT_RING pMgmtRing = &pAd->MgmtRing;
@@ -2064,14 +1958,7 @@ VOID RTMPHandleMgmtRingDmaDoneInterrupt(
while (pMgmtRing->TxSwFreeIdx!= pMgmtRing->TxDmaIdx)
{
FREE++;
-#ifdef RT_BIG_ENDIAN
- pDestTxD = (PTXD_STRUC) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx].AllocVa);
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#else
pTxD = (PTXD_STRUC) (pMgmtRing->Cell[pAd->MgmtRing.TxSwFreeIdx].AllocVa);
-#endif
pTxD->DMADONE = 0;
pPacket = pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNdisPacket;
@@ -2091,11 +1978,6 @@ VOID RTMPHandleMgmtRingDmaDoneInterrupt(
}
pMgmtRing->Cell[pMgmtRing->TxSwFreeIdx].pNextNdisPacket = NULL;
INC_RING_INDEX(pMgmtRing->TxSwFreeIdx, MGMT_RING_SIZE);
-
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, TRUE, TYPE_TXD);
-#endif
}
NdisReleaseSpinLock(&pAd->MgmtRingLock);
@@ -2293,6 +2175,7 @@ VOID DBGPRINT_RX_RING(
DBGPRINT_RAW(RT_DEBUG_TRACE,(" RxSwReadIdx [%d]=", AC0freeIdx));
DBGPRINT_RAW(RT_DEBUG_TRACE,(" pending-NDIS=%ld\n", pAd->RalinkCounters.PendingNdisPacketCount));
}
+#endif /* RT2860 */
/*
========================================================================
@@ -2352,7 +2235,15 @@ VOID RTMPResumeMsduTransmission(
{
DBGPRINT(RT_DEBUG_TRACE,("SCAN done, resume MSDU transmission ...\n"));
-
+#ifdef RT30xx
+ // After finish BSS_SCAN_IN_PROGRESS, we need to restore Current R66 value
+ // R66 should not be 0
+ if (pAd->BbpTuning.R66CurrentValue == 0)
+ {
+ pAd->BbpTuning.R66CurrentValue = 0x38;
+ DBGPRINT_ERR(("RTMPResumeMsduTransmission, R66CurrentValue=0...\n"));
+ }
+#endif
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, pAd->BbpTuning.R66CurrentValue);
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);
@@ -2401,7 +2292,6 @@ UINT deaggregate_AMSDU_announce(
// convert to 802.3 header
CONVERT_TO_802_3(Header802_3, pDA, pSA, pPayload, PayloadSize, pRemovedLLCSNAP);
-#ifdef CONFIG_STA_SUPPORT
if ((Header802_3[12] == 0x88) && (Header802_3[13] == 0x8E) )
{
// avoid local heap overflow, use dyanamic allocation
@@ -2411,10 +2301,7 @@ UINT deaggregate_AMSDU_announce(
WpaEAPOLKeyAction(pAd, Elem);
kfree(Elem);
}
-#endif // CONFIG_STA_SUPPORT //
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if (pRemovedLLCSNAP)
{
@@ -2423,15 +2310,11 @@ UINT deaggregate_AMSDU_announce(
NdisMoveMemory(pPayload, &Header802_3[0], LENGTH_802_3);
}
}
-#endif // CONFIG_STA_SUPPORT //
pClonePacket = ClonePacket(pAd, pPacket, pPayload, PayloadSize);
if (pClonePacket)
{
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pClonePacket, RTMP_GET_PACKET_IF(pPacket));
-#endif // CONFIG_STA_SUPPORT //
+ ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pClonePacket, RTMP_GET_PACKET_IF(pPacket));
}
@@ -2527,11 +2410,9 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(
return NULL;
FirstWcid = 1;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+
if (pAd->StaCfg.BssType == BSS_INFRA)
FirstWcid = 2;
-#endif // CONFIG_STA_SUPPORT //
// allocate one MAC entry
NdisAcquireSpinLock(&pAd->MacTabLock);
@@ -2542,11 +2423,6 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(
(pAd->MacTab.Content[i].ValidAsWDS == FALSE) &&
(pAd->MacTab.Content[i].ValidAsApCli== FALSE) &&
(pAd->MacTab.Content[i].ValidAsMesh == FALSE)
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
- && (pAd->MacTab.Content[i].ValidAsDls == FALSE)
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
)
{
pEntry = &pAd->MacTab.Content[i];
@@ -2558,24 +2434,7 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(
pEntry->PairwiseKey.KeyLen = 0;
pEntry->PairwiseKey.CipherAlg = CIPHER_NONE;
}
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
- if (apidx >= MIN_NET_DEVICE_FOR_DLS)
- {
- pEntry->ValidAsCLI = FALSE;
- pEntry->ValidAsWDS = FALSE;
- pEntry->ValidAsApCli = FALSE;
- pEntry->ValidAsMesh = FALSE;
- pEntry->ValidAsDls = TRUE;
- pEntry->isCached = FALSE;
- }
- else
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pEntry->ValidAsCLI = TRUE;
pEntry->ValidAsWDS = FALSE;
@@ -2583,7 +2442,6 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(
pEntry->ValidAsMesh = FALSE;
pEntry->ValidAsDls = FALSE;
}
-#endif // CONFIG_STA_SUPPORT //
}
pEntry->bIAmBadAtheros = FALSE;
@@ -2600,43 +2458,32 @@ MAC_TABLE_ENTRY *MacTableInsertEntry(
pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_APCLI);
else if (pEntry->ValidAsWDS)
pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_WDS);
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
- else if (pEntry->ValidAsDls)
- pEntry->apidx = (apidx - MIN_NET_DEVICE_FOR_DLS);
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
else
pEntry->apidx = apidx;
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pEntry->AuthMode = pAd->StaCfg.AuthMode;
pEntry->WepStatus = pAd->StaCfg.WepStatus;
pEntry->PrivacyFilter = Ndis802_11PrivFilterAcceptAll;
+#ifdef RT2860
AsicRemovePairwiseKeyEntry(pAd, pEntry->apidx, (UCHAR)i);
+#endif
}
-#endif // CONFIG_STA_SUPPORT //
}
pEntry->GTKState = REKEY_NEGOTIATING;
pEntry->PairwiseKey.KeyLen = 0;
pEntry->PairwiseKey.CipherAlg = CIPHER_NONE;
-#ifdef CONFIG_STA_SUPPORT
+
+#ifdef RT2860
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 //
+#endif
pEntry->PortSecured = WPA_802_1X_PORT_NOT_SECURED;
+
pEntry->PMKID_CacheIdx = ENTRY_NOT_FOUND;
COPY_MAC_ADDR(pEntry->Addr, pAddr);
pEntry->Sst = SST_NOT_AUTH;
@@ -2706,11 +2553,6 @@ BOOLEAN MacTableDeleteEntry(
pEntry = &pAd->MacTab.Content[wcid];
if (pEntry && (pEntry->ValidAsCLI || pEntry->ValidAsApCli || pEntry->ValidAsWDS || pEntry->ValidAsMesh
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
- || pEntry->ValidAsDls
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
))
{
if (MAC_ADDR_EQUAL(pEntry->Addr, pAddr))
@@ -2719,11 +2561,8 @@ 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;
pProbeEntry = pAd->MacTab.Hash[HashIdx];
@@ -2777,10 +2616,13 @@ BOOLEAN MacTableDeleteEntry(
//Reset operating mode when no Sta.
if (pAd->MacTab.Size == 0)
{
-#ifdef DOT11_N_SUPPORT
pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode = 0;
-#endif // DOT11_N_SUPPORT //
+#ifndef RT30xx
AsicUpdateProtect(pAd, 0 /*pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode*/, (ALLN_SETPROTECT), TRUE, 0 /*pAd->MacTab.fAnyStationNonGF*/);
+#endif
+#ifdef RT30xx
+ RT28XX_UPDATE_PROTECT(pAd); // edit by johnli, fix "in_interrupt" error when call "MacTableDeleteEntry" in Rx tasklet
+#endif
}
return TRUE;
@@ -2804,19 +2646,22 @@ VOID MacTableReset(
for (i=1; i<MAX_LEN_OF_MAC_TABLE; i++)
{
+#ifdef RT2860
RT28XX_STA_ENTRY_MAC_RESET(pAd, i);
+#endif
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;
+#ifdef RT2870
+ NdisZeroMemory(pAd->MacTab.Content[i].Addr, 6);
+ RT28XX_STA_ENTRY_MAC_RESET(pAd, i);
+#endif // RT2870 //
//AsicDelWcidTab(pAd, i);
}
@@ -3116,10 +2961,7 @@ VOID Indicate_Legacy_Packet(
// 2. remove LLC
// a. pointer pRxBlk->pData to payload
// b. modify pRxBlk->DataSize
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3);
-#endif // CONFIG_STA_SUPPORT //
+ RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3);
if (pRxBlk->DataSize > MAX_RX_PKT_LEN)
{
@@ -3132,17 +2974,44 @@ VOID Indicate_Legacy_Packet(
STATS_INC_RX_PACKETS(pAd, FromWhichBSSID);
+#ifdef RT2870
+ if (pAd->CommonCfg.bDisableReordering == 0)
+ {
+ PBA_REC_ENTRY pBAEntry;
+ ULONG Now32;
+ UCHAR Wcid = pRxBlk->pRxWI->WirelessCliID;
+ UCHAR TID = pRxBlk->pRxWI->TID;
+ USHORT Idx;
+
+#define REORDERING_PACKET_TIMEOUT ((100 * HZ)/1000) // system ticks -- 100 ms
+
+ if (Wcid < MAX_LEN_OF_MAC_TABLE)
+ {
+ Idx = pAd->MacTab.Content[Wcid].BARecWcidArray[TID];
+ if (Idx != 0)
+ {
+ pBAEntry = &pAd->BATable.BARecEntry[Idx];
+ // update last rx time
+ NdisGetSystemUpTime(&Now32);
+ if ((pBAEntry->list.qlen > 0) &&
+ RTMP_TIME_AFTER((unsigned long)Now32, (unsigned long)(pBAEntry->LastIndSeqAtTimer+(REORDERING_PACKET_TIMEOUT)))
+ )
+ {
+ printk("Indicate_Legacy_Packet():flush reordering_timeout_mpdus! RxWI->Flags=%d, pRxWI.TID=%d, RxD->AMPDU=%d!\n", pRxBlk->Flags, pRxBlk->pRxWI->TID, pRxBlk->RxD.AMPDU);
+ hex_dump("Dump the legacy Packet:", GET_OS_PKT_DATAPTR(pRxBlk->pRxPacket), 64);
+ ba_flush_reordering_timeout_mpdus(pAd, pBAEntry, Now32);
+ }
+ }
+ }
+ }
+#endif // RT2870 //
wlan_802_11_to_802_3_packet(pAd, pRxBlk, Header802_3, FromWhichBSSID);
//
// pass this 802.3 packet to upper layer or forward this packet to WM directly
//
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxPacket, FromWhichBSSID);
-#endif // CONFIG_STA_SUPPORT //
-
+ ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxPacket, FromWhichBSSID);
}
@@ -3152,22 +3021,18 @@ 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);
}
@@ -3205,11 +3070,7 @@ VOID CmmRxRalinkFrameIndicate(
}
// get 802.3 Header and remove LLC
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3);
-#endif // CONFIG_STA_SUPPORT //
-
+ RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(pRxBlk, Header802_3);
ASSERT(pRxBlk->pRxPacket);
@@ -3219,10 +3080,8 @@ VOID CmmRxRalinkFrameIndicate(
Payload2Size = Msdu2Size - LENGTH_802_3;
pData2 = pRxBlk->pData + Payload1Size + LENGTH_802_3;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- pPacket2 = duplicate_pkt(pAd, (pData2-LENGTH_802_3), LENGTH_802_3, pData2, Payload2Size, FromWhichBSSID);
-#endif // CONFIG_STA_SUPPORT //
+
+ pPacket2 = duplicate_pkt(pAd, (pData2-LENGTH_802_3), LENGTH_802_3, pData2, Payload2Size, FromWhichBSSID);
if (!pPacket2)
{
@@ -3235,17 +3094,11 @@ VOID CmmRxRalinkFrameIndicate(
pRxBlk->DataSize = Payload1Size;
wlan_802_11_to_802_3_packet(pAd, pRxBlk, Header802_3, FromWhichBSSID);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxBlk->pRxPacket, FromWhichBSSID);
-#endif // CONFIG_STA_SUPPORT //
+ ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pRxBlk->pRxPacket, FromWhichBSSID);
if (pPacket2)
{
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket2, FromWhichBSSID);
-#endif // CONFIG_STA_SUPPORT //
+ ANNOUNCE_OR_FORWARD_802_3_PACKET(pAd, pPacket2, FromWhichBSSID);
}
}
@@ -3388,15 +3241,11 @@ VOID Indicate_EAPOL_Packet(
{
MAC_TABLE_ENTRY *pEntry = NULL;
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pEntry = &pAd->MacTab.Content[BSSID_WCID];
STARxEAPOLFrameIndicate(pAd, pEntry, pRxBlk, FromWhichBSSID);
return;
}
-#endif // CONFIG_STA_SUPPORT //
if (pEntry == NULL)
{
diff --git a/drivers/staging/rt2860/common/cmm_data_2860.c b/drivers/staging/rt2860/common/cmm_data_2860.c
index fae741e4beeb..fb1735533b74 100644
--- a/drivers/staging/rt2860/common/cmm_data_2860.c
+++ b/drivers/staging/rt2860/common/cmm_data_2860.c
@@ -110,10 +110,6 @@ USHORT RtmpPCI_WriteSingleTxResource(
UCHAR *pDMAHeaderBufVA;
USHORT TxIdx, RetTxIdx;
PTXD_STRUC pTxD;
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
- TXD_STRUC TxD;
-#endif
UINT32 BufBasePaLow;
PRTMP_TX_RING pTxRing;
USHORT hwHeaderLen;
@@ -137,13 +133,8 @@ USHORT RtmpPCI_WriteSingleTxResource(
//
// build Tx Descriptor
//
-#ifndef RT_BIG_ENDIAN
pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
-#endif
+
NdisZeroMemory(pTxD, TXD_SIZE);
pTxD->SDPtr0 = BufBasePaLow;
@@ -154,12 +145,6 @@ USHORT RtmpPCI_WriteSingleTxResource(
pTxD->LastSec1 = (bIsLast) ? 1 : 0;
RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA);
-#ifdef RT_BIG_ENDIAN
- RTMPWIEndianChange((PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE), TYPE_TXWI);
- RTMPFrameEndianChange(pAd, (PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE + TXWI_SIZE), DIR_WRITE, FALSE);
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif // RT_BIG_ENDIAN //
RetTxIdx = TxIdx;
//
@@ -184,10 +169,6 @@ USHORT RtmpPCI_WriteMultiTxResource(
UCHAR *pDMAHeaderBufVA;
USHORT TxIdx, RetTxIdx;
PTXD_STRUC pTxD;
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
- TXD_STRUC TxD;
-#endif
UINT32 BufBasePaLow;
PRTMP_TX_RING pTxRing;
USHORT hwHdrLen;
@@ -231,13 +212,8 @@ USHORT RtmpPCI_WriteMultiTxResource(
//
// build Tx Descriptor
//
-#ifndef RT_BIG_ENDIAN
pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
-#endif
+
NdisZeroMemory(pTxD, TXD_SIZE);
pTxD->SDPtr0 = BufBasePaLow;
@@ -249,17 +225,6 @@ USHORT RtmpPCI_WriteMultiTxResource(
RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA);
-#ifdef RT_BIG_ENDIAN
- if (frameNum == 0)
- RTMPFrameEndianChange(pAd, (PUCHAR)(pDMAHeaderBufVA+ TXINFO_SIZE + TXWI_SIZE), DIR_WRITE, FALSE);
-
- if (frameNum != 0)
- RTMPWIEndianChange((PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE), TYPE_TXWI);
-
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif // RT_BIG_ENDIAN //
-
RetTxIdx = TxIdx;
//
// Update Tx index
@@ -290,10 +255,6 @@ VOID RtmpPCI_FinalWriteTxResource(
pTxRing = &pAd->TxRing[pTxBlk->QueIdx];
pTxWI = (PTXWI_STRUC) pTxRing->Cell[FirstTxIdx].DmaBuf.AllocVa;
pTxWI->MPDUtotalByteCount = totalMPDUSize;
-#ifdef RT_BIG_ENDIAN
- RTMPWIEndianChange((PUCHAR)pTxWI, TYPE_TXWI);
-#endif // RT_BIG_ENDIAN //
-
}
@@ -303,10 +264,6 @@ VOID RtmpPCIDataLastTxIdx(
IN USHORT LastTxIdx)
{
PTXD_STRUC pTxD;
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
- TXD_STRUC TxD;
-#endif
PRTMP_TX_RING pTxRing;
//
@@ -317,21 +274,9 @@ VOID RtmpPCIDataLastTxIdx(
//
// build Tx Descriptor
//
-#ifndef RT_BIG_ENDIAN
pTxD = (PTXD_STRUC) pTxRing->Cell[LastTxIdx].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC) pTxRing->Cell[LastTxIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
-#endif
pTxD->LastSec1 = 1;
-
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif // RT_BIG_ENDIAN //
-
}
@@ -344,10 +289,6 @@ USHORT RtmpPCI_WriteFragTxResource(
UCHAR *pDMAHeaderBufVA;
USHORT TxIdx, RetTxIdx;
PTXD_STRUC pTxD;
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
- TXD_STRUC TxD;
-#endif
UINT32 BufBasePaLow;
PRTMP_TX_RING pTxRing;
USHORT hwHeaderLen;
@@ -373,13 +314,8 @@ USHORT RtmpPCI_WriteFragTxResource(
//
// Build Tx Descriptor
//
-#ifndef RT_BIG_ENDIAN
pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
-#endif
+
NdisZeroMemory(pTxD, TXD_SIZE);
if (fragNum == pTxBlk->TotalFragNum)
@@ -397,13 +333,6 @@ USHORT RtmpPCI_WriteFragTxResource(
RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA);
-#ifdef RT_BIG_ENDIAN
- RTMPWIEndianChange((PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE), TYPE_TXWI);
- RTMPFrameEndianChange(pAd, (PUCHAR)(pDMAHeaderBufVA + TXINFO_SIZE + TXWI_SIZE), DIR_WRITE, FALSE);
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif // RT_BIG_ENDIAN //
-
RetTxIdx = TxIdx;
pTxBlk->Priv += pTxBlk->SrcBufLen;
@@ -431,20 +360,9 @@ int RtmpPCIMgmtKickOut(
IN UINT SrcBufLen)
{
PTXD_STRUC pTxD;
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
- TXD_STRUC TxD;
-#endif
ULONG SwIdx = pAd->MgmtRing.TxCpuIdx;
-#ifdef RT_BIG_ENDIAN
- pDestTxD = (PTXD_STRUC)pAd->MgmtRing.Cell[SwIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#else
pTxD = (PTXD_STRUC) pAd->MgmtRing.Cell[SwIdx].AllocVa;
-#endif
pAd->MgmtRing.Cell[SwIdx].pNdisPacket = pPacket;
pAd->MgmtRing.Cell[SwIdx].pNextNdisPacket = NULL;
@@ -457,11 +375,6 @@ int RtmpPCIMgmtKickOut(
pTxD->SDPtr0 = PCI_MAP_SINGLE(pAd, pSrcBufVA, SrcBufLen, 0, PCI_DMA_TODEVICE);;
pTxD->SDLen0 = SrcBufLen;
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif
-
pAd->RalinkCounters.KickTxCount++;
pAd->RalinkCounters.OneSecTxDoneCount++;
@@ -473,8 +386,6 @@ int RtmpPCIMgmtKickOut(
return 0;
}
-
-#ifdef CONFIG_STA_SUPPORT
/*
========================================================================
@@ -570,12 +481,11 @@ NDIS_STATUS RTMPCheckRxError(
if (pRxD->CipherErr == 2)
{
pWpaKey = &pAd->SharedKey[BSS0][pRxWI->KeyIndex];
-#ifdef WPA_SUPPLICANT_SUPPORT
+
if (pAd->StaCfg.WpaSupplicantUP)
WpaSendMicFailureToWpaSupplicant(pAd,
(pWpaKey->Type == PAIRWISEKEY) ? TRUE:FALSE);
else
-#endif // WPA_SUPPLICANT_SUPPORT //
RTMPReportMicError(pAd, pWpaKey);
if (((pRxD->CipherErr & 2) == 2) && pAd->CommonCfg.bWirelessEvent && INFRA_ON(pAd))
@@ -1128,8 +1038,6 @@ VOID RadioOnExec(
}
}
-#endif // CONFIG_STA_SUPPORT //
-
VOID RT28xxPciMlmeRadioOn(
IN PRTMP_ADAPTER pAd)
{
@@ -1163,7 +1071,6 @@ VOID RT28xxPciMlmeRadioOn(
RTMPSetLED(pAd, LED_RADIO_ON);
}
-#ifdef CONFIG_STA_SUPPORT
if ((pAd->OpMode == OPMODE_STA) &&
(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)))
{
@@ -1176,7 +1083,6 @@ VOID RT28xxPciMlmeRadioOn(
RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled);
RTMPSetTimer(&pAd->Mlme.RadioOnOffTimer, 10);
}
-#endif // CONFIG_STA_SUPPORT //
}
VOID RT28xxPciMlmeRadioOFF(
@@ -1199,8 +1105,6 @@ VOID RT28xxPciMlmeRadioOFF(
// Set LED
RTMPSetLED(pAd, LED_RADIO_OFF);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
BOOLEAN Cancelled;
@@ -1249,7 +1153,6 @@ VOID RT28xxPciMlmeRadioOFF(
return;
}
}
-#endif // CONFIG_STA_SUPPORT //
// Set Radio off flag
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF);
diff --git a/drivers/staging/rt2860/common/cmm_info.c b/drivers/staging/rt2860/common/cmm_info.c
index c3e13195e121..306c3a21f905 100644
--- a/drivers/staging/rt2860/common/cmm_info.c
+++ b/drivers/staging/rt2860/common/cmm_info.c
@@ -63,7 +63,6 @@ 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);
@@ -103,7 +102,6 @@ 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,
@@ -133,11 +131,9 @@ INT Show_IEEE80211H_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf);
-#ifdef CONFIG_STA_SUPPORT
INT Show_NetworkType_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf);
-#endif // CONFIG_STA_SUPPORT //
INT Show_AuthMode_Proc(
IN PRTMP_ADAPTER pAd,
@@ -184,7 +180,6 @@ 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},
@@ -195,7 +190,6 @@ 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},
@@ -207,9 +201,7 @@ static struct {
{"WmmCapable", Show_WmmCapable_Proc},
#endif
{"IEEE80211H", Show_IEEE80211H_Proc},
-#ifdef CONFIG_STA_SUPPORT
{"NetworkType", Show_NetworkType_Proc},
-#endif // CONFIG_STA_SUPPORT //
{"AuthMode", Show_AuthMode_Proc},
{"EncrypType", Show_EncrypType_Proc},
{"DefaultKeyID", Show_DefaultKeyID_Proc},
@@ -233,11 +225,7 @@ INT Set_DriverVersion_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg)
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- DBGPRINT(RT_DEBUG_TRACE, ("Driver version-%s\n", STA_DRIVER_VERSION));
-#endif // CONFIG_STA_SUPPORT //
+ DBGPRINT(RT_DEBUG_TRACE, ("Driver version-%s\n", STA_DRIVER_VERSION));
return TRUE;
}
@@ -259,10 +247,6 @@ INT Set_CountryRegion_Proc(
region = simple_strtol(arg, 0, 10);
-#ifdef EXT_BUILD_CHANNEL_LIST
- return -EOPNOTSUPP;
-#endif // EXT_BUILD_CHANNEL_LIST //
-
// Country can be set only when EEPROM not programmed
if (pAd->CommonCfg.CountryRegion & 0x80)
{
@@ -309,10 +293,6 @@ INT Set_CountryRegionABand_Proc(
region = simple_strtol(arg, 0, 10);
-#ifdef EXT_BUILD_CHANNEL_LIST
- return -EOPNOTSUPP;
-#endif // EXT_BUILD_CHANNEL_LIST //
-
// Country can be set only when EEPROM not programmed
if (pAd->CommonCfg.CountryRegionForABand & 0x80)
{
@@ -355,20 +335,15 @@ INT Set_WirelessMode_Proc(
WirelessMode = simple_strtol(arg, 0, 10);
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
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;
@@ -379,7 +354,7 @@ 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)
{
@@ -393,14 +368,11 @@ INT Set_WirelessMode_Proc(
success = FALSE;
}
}
-#endif // CONFIG_STA_SUPPORT //
// 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
@@ -431,14 +403,11 @@ INT Set_Channel_Proc(
// check if this channel is valid
if (ChannelSanity(pAd, Channel) == TRUE)
{
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pAd->CommonCfg.Channel = Channel;
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)
@@ -450,7 +419,6 @@ 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);
@@ -458,16 +426,11 @@ INT Set_Channel_Proc(
}
}
}
-#endif // CONFIG_STA_SUPPORT //
success = TRUE;
}
else
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- success = FALSE;
-#endif // CONFIG_STA_SUPPORT //
+ success = FALSE;
}
@@ -523,14 +486,10 @@ INT Set_TxPower_Proc(
TxPower = (ULONG) simple_strtol(arg, 0, 10);
if (TxPower <= 100)
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pAd->CommonCfg.TxPowerDefault = TxPower;
pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault;
}
-#endif // CONFIG_STA_SUPPORT //
success = TRUE;
}
else
@@ -595,22 +554,16 @@ INT Set_TxPreamble_Proc(
{
case Rt802_11PreambleShort:
pAd->CommonCfg.TxPreamble = Preamble;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- MlmeSetTxPreamble(pAd, Rt802_11PreambleShort);
-#endif // CONFIG_STA_SUPPORT //
+
+ MlmeSetTxPreamble(pAd, Rt802_11PreambleShort);
break;
case Rt802_11PreambleLong:
-#ifdef CONFIG_STA_SUPPORT
case Rt802_11PreambleAuto:
// if user wants AUTO, initialize to LONG here, then change according to AP's
// capability upon association.
-#endif // CONFIG_STA_SUPPORT //
pAd->CommonCfg.TxPreamble = Preamble;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- MlmeSetTxPreamble(pAd, Rt802_11PreambleLong);
-#endif // CONFIG_STA_SUPPORT //
+
+ MlmeSetTxPreamble(pAd, Rt802_11PreambleLong);
break;
default: //Invalid argument
return FALSE;
@@ -639,10 +592,8 @@ INT Set_RTSThreshold_Proc(
if((RtsThresh > 0) && (RtsThresh <= MAX_RTS_THRESHOLD))
pAd->CommonCfg.RtsThreshold = (USHORT)RtsThresh;
-#ifdef CONFIG_STA_SUPPORT
else if (RtsThresh == 0)
pAd->CommonCfg.RtsThreshold = MAX_RTS_THRESHOLD;
-#endif // CONFIG_STA_SUPPORT //
else
return FALSE; //Invalid argument
@@ -683,15 +634,12 @@ INT Set_FragThreshold_Proc(
pAd->CommonCfg.FragmentThreshold = (USHORT)FragThresh;
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if (pAd->CommonCfg.FragmentThreshold == MAX_FRAG_THRESHOLD)
pAd->CommonCfg.bUseZeroToDisableFragment = TRUE;
else
pAd->CommonCfg.bUseZeroToDisableFragment = FALSE;
}
-#endif // CONFIG_STA_SUPPORT //
DBGPRINT(RT_DEBUG_TRACE, ("Set_FragThreshold_Proc::(FragThreshold=%d)\n", pAd->CommonCfg.FragmentThreshold));
@@ -814,6 +762,7 @@ INT Show_DescInfo_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg)
{
+#ifdef RT2860
INT i, QueIdx=0;
PRT28XX_RXD_STRUC pRxD;
PTXD_STRUC pTxD;
@@ -844,7 +793,7 @@ INT Show_DescInfo_Proc(
hex_dump("Rx Descriptor", (char *)pRxD, 16);
printk("pRxD->DDONE = %x\n", pRxD->DDONE);
}
-
+#endif /* RT2860 */
return TRUE;
}
@@ -912,7 +861,6 @@ BOOLEAN RTMPCheckStrPrintAble(
========================================================================
*/
-#ifdef CONFIG_STA_SUPPORT
VOID RTMPSetDesiredRates(
IN PRTMP_ADAPTER pAdapter,
IN LONG Rates)
@@ -1125,10 +1073,7 @@ NDIS_STATUS RTMPWPARemoveKeyProc(
return (Status);
}
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef CONFIG_STA_SUPPORT
/*
========================================================================
@@ -1178,7 +1123,6 @@ VOID RTMPWPARemoveAllKeys(
}
}
-#endif // CONFIG_STA_SUPPORT //
/*
========================================================================
@@ -1202,19 +1146,11 @@ VOID RTMPSetPhyMode(
INT i;
// the selected phymode must be supported by the RF IC encoded in E2PROM
- // if no change, do nothing
- /* bug fix
- if (pAd->CommonCfg.PhyMode == phymode)
- return;
- */
pAd->CommonCfg.PhyMode = (UCHAR)phymode;
DBGPRINT(RT_DEBUG_TRACE,("RTMPSetPhyMode : PhyMode=%d, channel=%d \n", pAd->CommonCfg.PhyMode, pAd->CommonCfg.Channel));
-#ifdef EXT_BUILD_CHANNEL_LIST
- BuildChannelListEx(pAd);
-#else
+
BuildChannelList(pAd);
-#endif // EXT_BUILD_CHANNEL_LIST //
// sanity check user setting
for (i = 0; i < pAd->ChannelListNum; i++)
@@ -1225,10 +1161,7 @@ VOID RTMPSetPhyMode(
if (i == pAd->ChannelListNum)
{
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- pAd->CommonCfg.Channel = FirstChannel(pAd);
-#endif // CONFIG_STA_SUPPORT //
+ pAd->CommonCfg.Channel = FirstChannel(pAd);
DBGPRINT(RT_DEBUG_ERROR, ("RTMPSetPhyMode: channel is out of range, use first channel=%d \n", pAd->CommonCfg.Channel));
}
@@ -1253,12 +1186,10 @@ VOID RTMPSetPhyMode(
case PHY_11G:
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
@@ -1288,11 +1219,9 @@ 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
@@ -1322,8 +1251,6 @@ VOID RTMPSetPhyMode(
pAd->CommonCfg.BandState = UNKNOWN_BAND;
}
-
-#ifdef DOT11_N_SUPPORT
/*
========================================================================
Routine Description:
@@ -1492,6 +1419,16 @@ VOID RTMPSetHT(
pAd->CommonCfg.DesiredHtPhy.RxSTBC = 0;
}
+#ifndef RT30xx
+#ifdef RT2870
+ /* Frank recommend ,If not, Tx maybe block in high power. Rx has no problem*/
+ if(IS_RT3070(pAd) && ((pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020)))
+ {
+ pAd->CommonCfg.HtCapability.HtCapInfo.TxSTBC = 0;
+ pAd->CommonCfg.DesiredHtPhy.TxSTBC = 0;
+ }
+#endif // RT2870 //
+#endif
if(pHTPhyMode->SHORTGI == GI_400)
{
@@ -1539,14 +1476,7 @@ VOID RTMPSetHT(
}
AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- RTMPSetIndividualHT(pAd, 0);
- }
-#endif // CONFIG_STA_SUPPORT //
-
+ RTMPSetIndividualHT(pAd, 0);
}
/*
@@ -1571,16 +1501,12 @@ VOID RTMPSetIndividualHT(
do
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pDesired_ht_phy = &pAd->StaCfg.DesiredHtPhyInfo;
DesiredMcs = pAd->StaCfg.DesiredTransmitSetting.field.MCS;
//pAd->StaCfg.bAutoTxRateSwitch = (DesiredMcs == MCS_AUTO) ? TRUE : FALSE;
break;
}
-#endif // CONFIG_STA_SUPPORT //
} while (FALSE);
if (pDesired_ht_phy == NULL)
@@ -1710,7 +1636,6 @@ VOID RTMPUpdateHTIE(
DBGPRINT(RT_DEBUG_TRACE,("RTMPUpdateHTIE <== \n"));
}
-#endif // DOT11_N_SUPPORT //
/*
========================================================================
@@ -1732,8 +1657,6 @@ VOID RTMPAddWcidAttributeEntry(
USHORT Wcid = 0;
{
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if (BssIdx > BSS0)
{
@@ -1748,39 +1671,22 @@ VOID RTMPAddWcidAttributeEntry(
Wcid = pEntry->Aid;
else if (pEntry && INFRA_ON(pAd))
{
-#ifdef QOS_DLS_SUPPORT
- if (pEntry->ValidAsDls == TRUE)
- Wcid = pEntry->Aid;
- else
-#endif // QOS_DLS_SUPPORT //
Wcid = BSSID_WCID;
}
else
Wcid = MCAST_WCID;
}
-#endif // CONFIG_STA_SUPPORT //
}
// Update WCID attribute table
offset = MAC_WCID_ATTRIBUTE_BASE + (Wcid * HW_WCID_ATTRI_SIZE);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if (pEntry && pEntry->ValidAsMesh)
WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE;
-#ifdef QOS_DLS_SUPPORT
- else if ((pEntry) && (pEntry->ValidAsDls) &&
- ((CipherAlg == CIPHER_TKIP) ||
- (CipherAlg == CIPHER_TKIP_NO_MIC) ||
- (CipherAlg == CIPHER_AES) ||
- (CipherAlg == CIPHER_NONE)))
- WCIDAttri = (CipherAlg<<1) | PAIRWISEKEYTABLE;
-#endif // QOS_DLS_SUPPORT //
else
WCIDAttri = (CipherAlg<<1) | SHAREDKEYTABLE;
}
-#endif // CONFIG_STA_SUPPORT //
RTMP_IO_WRITE32(pAd, offset, WCIDAttri);
@@ -1801,7 +1707,12 @@ VOID RTMPAddWcidAttributeEntry(
}
// For key index and ext IV bit, so only need to update the position(offset+3).
+#ifdef RT2860
RTMP_IO_WRITE8(pAd, offset+3, IVEIV);
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite_OneByte(pAd, offset+3, &IVEIV);
+#endif // RT2870 //
DBGPRINT(RT_DEBUG_TRACE,("RTMPAddWcidAttributeEntry: WCID #%d, KeyIndex #%d, Alg=%s\n",Wcid, KeyIdx, CipherName[CipherAlg]));
DBGPRINT(RT_DEBUG_TRACE,(" WCIDAttri = 0x%x \n", WCIDAttri));
@@ -1864,7 +1775,6 @@ CHAR *GetAuthMode(CHAR auth)
return "UNKNOW";
}
-#if 1 //#ifndef UCOS
/*
==========================================================================
Description:
@@ -1912,11 +1822,10 @@ VOID RTMPIoctlGetSiteSurvey(
"Ch", "SSID", "BSSID", "Enc", "Auth", "Siganl(%)", "W-Mode", " NT");
WaitCnt = 0;
-#ifdef CONFIG_STA_SUPPORT
pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE;
+
while ((ScanRunning(pAdapter) == TRUE) && (WaitCnt++ < 200))
OS_WAIT(500);
-#endif // CONFIG_STA_SUPPORT //
for(i=0; i<pAdapter->ScanTab.BssNr ;i++)
{
@@ -1982,9 +1891,7 @@ VOID RTMPIoctlGetSiteSurvey(
sprintf(msg+strlen(msg),"\n");
}
-#ifdef CONFIG_STA_SUPPORT
pAdapter->StaCfg.bScanReqIsFromWebUI = FALSE;
-#endif // CONFIG_STA_SUPPORT //
wrq->u.data.length = strlen(msg);
Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length);
@@ -2010,9 +1917,7 @@ 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;
@@ -2072,9 +1977,7 @@ VOID RTMPIoctlGetMacTable(
kfree(msg);
}
-#endif // UCOS //
-#ifdef DOT11_N_SUPPORT
INT Set_BASetup_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg)
@@ -2089,7 +1992,6 @@ INT Set_BASetup_Proc(
=>The six 2 digit hex-decimal number previous are the Mac address,
=>The seventh decimal number is the tid value.
*/
- //printk("\n%s\n", arg);
if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and tid value in decimal format.
return FALSE;
@@ -2283,9 +2185,7 @@ INT Set_HtMcs_Proc(
IN PUCHAR arg)
{
ULONG HtMcs, Mcs_tmp;
-#ifdef CONFIG_STA_SUPPORT
BOOLEAN bAutoRate = FALSE;
-#endif // CONFIG_STA_SUPPORT //
Mcs_tmp = simple_strtol(arg, 0, 10);
@@ -2294,8 +2194,6 @@ INT Set_HtMcs_Proc(
else
HtMcs = MCS_AUTO;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pAd->StaCfg.DesiredTransmitSetting.field.MCS = HtMcs;
pAd->StaCfg.bAutoTxRateSwitch = (HtMcs == MCS_AUTO) ? TRUE:FALSE;
@@ -2330,7 +2228,6 @@ INT Set_HtMcs_Proc(
if (ADHOC_ON(pAd))
return TRUE;
}
-#endif // CONFIG_STA_SUPPORT //
SetCommonHT(pAd);
@@ -2592,13 +2489,26 @@ INT Set_HtAutoBa_Proc(
Value = simple_strtol(arg, 0, 10);
if (Value == 0)
+ {
pAd->CommonCfg.BACapability.field.AutoBA = FALSE;
+#ifdef RT30xx
+ pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE;
+#endif
+ }
else if (Value == 1)
+ {
pAd->CommonCfg.BACapability.field.AutoBA = TRUE;
+#ifdef RT30xx
+ pAd->CommonCfg.BACapability.field.Policy = IMMED_BA;
+#endif
+ }
else
return FALSE; //Invalid argument
pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA;
+#ifdef RT30xx
+ pAd->CommonCfg.REGBACapability.field.Policy = pAd->CommonCfg.BACapability.field.Policy;
+#endif
SetCommonHT(pAd);
DBGPRINT(RT_DEBUG_TRACE, ("Set_HtAutoBa_Proc::(HtAutoBa=%d)\n",pAd->CommonCfg.BACapability.field.AutoBA));
@@ -2762,10 +2672,7 @@ INT Set_HtMimoPs_Proc(
return TRUE;
}
-#endif // DOT11_N_SUPPORT //
-
-#ifdef DOT11_N_SUPPORT
INT SetCommonHT(
IN PRTMP_ADAPTER pAd)
{
@@ -2787,7 +2694,6 @@ INT SetCommonHT(
return TRUE;
}
-#endif // DOT11_N_SUPPORT //
INT Set_FixedTxMode_Proc(
IN PRTMP_ADAPTER pAd,
@@ -2804,45 +2710,13 @@ INT Set_FixedTxMode_Proc(
fix_tx_mode = FIXED_TXMODE_CCK;
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode;
-#endif // CONFIG_STA_SUPPORT //
+ pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode = fix_tx_mode;
DBGPRINT(RT_DEBUG_TRACE, ("Set_FixedTxMode_Proc::(FixedTxMode=%d)\n", fix_tx_mode));
return TRUE;
}
-#ifdef CONFIG_APSTA_MIXED_SUPPORT
-INT Set_OpMode_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- ULONG Value;
-
- Value = simple_strtol(arg, 0, 10);
-
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE))
- {
- DBGPRINT(RT_DEBUG_ERROR, ("Can not switch operate mode on interface up !! \n"));
- return FALSE;
- }
-
- if (Value == 0)
- pAd->OpMode = OPMODE_STA;
- else if (Value == 1)
- pAd->OpMode = OPMODE_AP;
- else
- return FALSE; //Invalid argument
-
- DBGPRINT(RT_DEBUG_TRACE, ("Set_OpMode_Proc::(OpMode=%s)\n", pAd->OpMode == 1 ? "AP Mode" : "STA Mode"));
-
- return TRUE;
-}
-#endif // CONFIG_APSTA_MIXED_SUPPORT //
-
-
/////////////////////////////////////////////////////////////////////////
PCHAR RTMPGetRalinkAuthModeStr(
IN NDIS_802_11_AUTHENTICATION_MODE authMode)
@@ -2851,7 +2725,9 @@ PCHAR RTMPGetRalinkAuthModeStr(
{
case Ndis802_11AuthModeOpen:
return "OPEN";
+#if defined(RT2860) || defined(RT30xx)
default:
+#endif
case Ndis802_11AuthModeWPAPSK:
return "WPAPSK";
case Ndis802_11AuthModeShared:
@@ -2866,8 +2742,14 @@ PCHAR RTMPGetRalinkAuthModeStr(
return "WPAPSKWPA2PSK";
case Ndis802_11AuthModeWPA1WPA2:
return "WPA1WPA2";
+#ifndef RT30xx
case Ndis802_11AuthModeWPANone:
return "WPANONE";
+#ifdef RT2870
+ default:
+ return "UNKNOW";
+#endif
+#endif
}
}
@@ -2876,7 +2758,9 @@ PCHAR RTMPGetRalinkEncryModeStr(
{
switch(encryMode)
{
+#if defined(RT2860) || defined(RT30xx)
default:
+#endif
case Ndis802_11WEPDisabled:
return "NONE";
case Ndis802_11WEPEnabled:
@@ -2887,6 +2771,10 @@ PCHAR RTMPGetRalinkEncryModeStr(
return "AES";
case Ndis802_11Encryption4Enabled:
return "TKIPAES";
+#if !defined(RT2860) && !defined(RT30xx)
+ default:
+ return "UNKNOW";
+#endif
}
}
@@ -2911,7 +2799,7 @@ INT RTMPShowCfgValue(
{
sprintf(pBuf, "\n");
for (PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC = RTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name; PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC++)
- sprintf(pBuf, "%s%s\n", pBuf, PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name);
+ sprintf(pBuf + strlen(pBuf), "%s\n", PRTMP_PRIVATE_STA_SHOW_CFG_VALUE_PROC->name);
}
return Status;
@@ -2921,11 +2809,7 @@ INT Show_SSID_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf)
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- sprintf(pBuf, "\t%s", pAd->CommonCfg.Ssid);
-#endif // CONFIG_STA_SUPPORT //
+ sprintf(pBuf, "\t%s", pAd->CommonCfg.Ssid);
return 0;
}
@@ -2950,7 +2834,6 @@ 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;
@@ -2972,7 +2855,6 @@ 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;
@@ -3066,7 +2948,6 @@ INT Show_FragThreshold_Proc(
return 0;
}
-#ifdef DOT11_N_SUPPORT
INT Show_HtBw_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf)
@@ -3086,11 +2967,7 @@ INT Show_HtMcs_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf)
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- sprintf(pBuf, "\t%u", pAd->StaCfg.DesiredTransmitSetting.field.MCS);
-#endif // CONFIG_STA_SUPPORT //
+ sprintf(pBuf, "\t%u", pAd->StaCfg.DesiredTransmitSetting.field.MCS);
return 0;
}
@@ -3191,7 +3068,6 @@ 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,
@@ -3232,11 +3108,7 @@ INT Show_WmmCapable_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf)
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- sprintf(pBuf, "\t%s", pAd->CommonCfg.bWmmCapable ? "TRUE":"FALSE");
-#endif // CONFIG_STA_SUPPORT //
+ sprintf(pBuf, "\t%s", pAd->CommonCfg.bWmmCapable ? "TRUE":"FALSE");
return 0;
}
@@ -3250,7 +3122,6 @@ INT Show_IEEE80211H_Proc(
return 0;
}
-#ifdef CONFIG_STA_SUPPORT
INT Show_NetworkType_Proc(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pBuf)
@@ -3275,7 +3146,6 @@ INT Show_NetworkType_Proc(
}
return 0;
}
-#endif // CONFIG_STA_SUPPORT //
INT Show_AuthMode_Proc(
IN PRTMP_ADAPTER pAd,
@@ -3283,10 +3153,7 @@ INT Show_AuthMode_Proc(
{
NDIS_802_11_AUTHENTICATION_MODE AuthMode = Ndis802_11AuthModeOpen;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- AuthMode = pAd->StaCfg.AuthMode;
-#endif // CONFIG_STA_SUPPORT //
+ AuthMode = pAd->StaCfg.AuthMode;
if ((AuthMode >= Ndis802_11AuthModeOpen) &&
(AuthMode <= Ndis802_11AuthModeWPA1PSKWPA2PSK))
@@ -3303,10 +3170,7 @@ INT Show_EncrypType_Proc(
{
NDIS_802_11_WEP_STATUS WepStatus = Ndis802_11WEPDisabled;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- WepStatus = pAd->StaCfg.WepStatus;
-#endif // CONFIG_STA_SUPPORT //
+ WepStatus = pAd->StaCfg.WepStatus;
if ((WepStatus >= Ndis802_11WEPEnabled) &&
(WepStatus <= Ndis802_11Encryption4KeyAbsent))
@@ -3323,10 +3187,7 @@ INT Show_DefaultKeyID_Proc(
{
UCHAR DefaultKeyId = 0;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- DefaultKeyId = pAd->StaCfg.DefaultKeyId;
-#endif // CONFIG_STA_SUPPORT //
+ DefaultKeyId = pAd->StaCfg.DefaultKeyId;
sprintf(pBuf, "\t%d", DefaultKeyId);
@@ -3396,11 +3257,7 @@ INT Show_WPAPSK_Proc(
INT idx;
UCHAR PMK[32] = {0};
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- NdisMoveMemory(PMK, pAd->StaCfg.PMK, 32);
-#endif // CONFIG_STA_SUPPORT //
+ NdisMoveMemory(PMK, pAd->StaCfg.PMK, 32);
sprintf(pBuf, "\tPMK = ");
for (idx = 0; idx < 32; idx++)
diff --git a/drivers/staging/rt2860/common/cmm_sanity.c b/drivers/staging/rt2860/common/cmm_sanity.c
index b0f070d43135..843e44e41abe 100644
--- a/drivers/staging/rt2860/common/cmm_sanity.c
+++ b/drivers/staging/rt2860/common/cmm_sanity.c
@@ -275,9 +275,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
OUT PQOS_CAPABILITY_PARM pQosCapability,
OUT ULONG *pRalinkIe,
OUT UCHAR *pHtCapabilityLen,
-#ifdef CONFIG_STA_SUPPORT
OUT UCHAR *pPreNHtCapabilityLen,
-#endif // CONFIG_STA_SUPPORT //
OUT HT_CAPABILITY_IE *pHtCapability,
OUT UCHAR *AddHtInfoLen,
OUT ADD_HT_INFO_IE *AddHtInfo,
@@ -286,9 +284,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
OUT PNDIS_802_11_VARIABLE_IEs pVIE)
{
CHAR *Ptr;
-#ifdef CONFIG_STA_SUPPORT
CHAR TimLen;
-#endif // CONFIG_STA_SUPPORT //
PFRAME_802_11 pFrame;
PEID_STRUCT pEid;
UCHAR SubType;
@@ -316,10 +312,8 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
*pAironetCellPowerLimit = 0xFF; // Default of AironetCellPowerLimit is 0xFF
*LengthVIE = 0; // Set the length of VIE to init value 0
*pHtCapabilityLen = 0; // Set the length of VIE to init value 0
-#ifdef CONFIG_STA_SUPPORT
if (pAd->OpMode == OPMODE_STA)
*pPreNHtCapabilityLen = 0; // Set the length of VIE to init value 0
-#endif // CONFIG_STA_SUPPORT //
*AddHtInfoLen = 0; // Set the length of VIE to init value 0
*pRalinkIe = 0;
*pNewChannel = 0;
@@ -428,8 +422,6 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
*(USHORT *)(&pHtCapability->HtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->HtCapInfo));
*(USHORT *)(&pHtCapability->ExtHtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->ExtHtCapInfo));
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
*pPreNHtCapabilityLen = 0; // Nnow we only support 26 bytes.
@@ -437,7 +429,6 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2);
*LengthVIE += (pEid->Len + 2);
}
-#endif // CONFIG_STA_SUPPORT //
}
else
{
@@ -458,14 +449,11 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
*(USHORT *)(&AddHtInfo->AddHtInfo2) = cpu2le16(*(USHORT *)(&AddHtInfo->AddHtInfo2));
*(USHORT *)(&AddHtInfo->AddHtInfo3) = cpu2le16(*(USHORT *)(&AddHtInfo->AddHtInfo3));
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
Ptr = (PUCHAR) pVIE;
NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2);
*LengthVIE += (pEid->Len + 2);
}
-#endif // CONFIG_STA_SUPPORT //
}
else
{
@@ -492,8 +480,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
if(pEid->Len == 1)
{
*pChannel = *pEid->Octet;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+
{
if (ChannelSanity(pAd, *pChannel) == 0)
{
@@ -501,7 +488,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
return FALSE;
}
}
-#endif // CONFIG_STA_SUPPORT //
+
Sanity |= 0x4;
}
else
@@ -539,14 +526,13 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
}
break;
-#ifdef CONFIG_STA_SUPPORT
case IE_TIM:
if(INFRA_ON(pAd) && SubType == SUBTYPE_BEACON)
{
GetTimBit((PUCHAR)pEid, pAd->StaActive.Aid, &TimLen, pBcastFlag, pDtimCount, pDtimPeriod, pMessageToMe);
}
break;
-#endif // CONFIG_STA_SUPPORT //
+
case IE_CHANNEL_SWITCH_ANNOUNCEMENT:
if(pEid->Len == 3)
{
@@ -568,8 +554,6 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
else
*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,
@@ -588,8 +572,6 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
*AddHtInfoLen = SIZE_ADD_HT_INFO_IE;
}
}
-#endif // DOT11_N_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
else if (NdisEqualMemory(pEid->Octet, WPA_OUI, 4))
{
// Copy to pVIE which will report to microsoft bssid list.
@@ -712,15 +694,6 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
*LengthVIE += (pEid->Len + 2);
}
break;
-#ifdef CONFIG_STA_SUPPORT
-#ifdef EXT_BUILD_CHANNEL_LIST
- case IE_COUNTRY:
- Ptr = (PUCHAR) pVIE;
- NdisMoveMemory(Ptr + *LengthVIE, &pEid->Eid, pEid->Len + 2);
- *LengthVIE += (pEid->Len + 2);
- break;
-#endif // EXT_BUILD_CHANNEL_LIST //
-#endif // CONFIG_STA_SUPPORT //
default:
break;
@@ -731,8 +704,6 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
}
// For some 11a AP. it did not have the channel EID, patch here
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
UCHAR LatchRfChannel = MsgChannel;
if ((pAd->LatchRfRegs.Channel > 14) && ((Sanity & 0x4) == 0))
@@ -744,7 +715,6 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
Sanity |= 0x4;
}
}
-#endif // CONFIG_STA_SUPPORT //
if (Sanity != 0x7)
{
@@ -758,76 +728,6 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
}
-#ifdef DOT11N_DRAFT3
-/*
- ==========================================================================
- Description:
- MLME message sanity check for some IE addressed in 802.11n d3.03.
- Return:
- TRUE if all parameters are OK, FALSE otherwise
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-BOOLEAN PeerBeaconAndProbeRspSanity2(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen,
- OUT UCHAR *RegClass)
-{
- CHAR *Ptr;
- PFRAME_802_11 pFrame;
- PEID_STRUCT pEid;
- ULONG Length = 0;
-
- pFrame = (PFRAME_802_11)Msg;
-
- *RegClass = 0;
- Ptr = pFrame->Octet;
- Length += LENGTH_802_11;
-
- // get timestamp from payload and advance the pointer
- Ptr += TIMESTAMP_LEN;
- Length += TIMESTAMP_LEN;
-
- // get beacon interval from payload and advance the pointer
- Ptr += 2;
- Length += 2;
-
- // get capability info from payload and advance the pointer
- Ptr += 2;
- Length += 2;
-
- pEid = (PEID_STRUCT) Ptr;
-
- // get variable fields from payload and advance the pointer
- while ((Length + 2 + pEid->Len) <= MsgLen)
- {
- switch(pEid->Eid)
- {
- case IE_SUPP_REG_CLASS:
- if(pEid->Len > 0)
- {
- *RegClass = *pEid->Octet;
- }
- else
- {
- DBGPRINT(RT_DEBUG_TRACE, ("PeerBeaconAndProbeRspSanity - wrong IE_SSID (len=%d)\n",pEid->Len));
- return FALSE;
- }
- break;
- }
-
- Length = Length + 2 + pEid->Len; // Eid[1] + Len[1]+ content[Len]
- pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len);
- }
-
- return TRUE;
-
-}
-#endif // DOT11N_DRAFT3 //
-
/*
==========================================================================
Description:
@@ -855,10 +755,8 @@ BOOLEAN MlmeScanReqSanity(
if ((*pBssType == BSS_INFRA || *pBssType == BSS_ADHOC || *pBssType == BSS_ANY)
&& (*pScanType == SCAN_ACTIVE || *pScanType == SCAN_PASSIVE
-#ifdef CONFIG_STA_SUPPORT
|| *pScanType == SCAN_CISCO_PASSIVE || *pScanType == SCAN_CISCO_ACTIVE
|| *pScanType == SCAN_CISCO_CHANNEL_LOAD || *pScanType == SCAN_CISCO_NOISE
-#endif // CONFIG_STA_SUPPORT //
))
{
return TRUE;
@@ -940,9 +838,6 @@ BOOLEAN PeerAuthSanity(
NdisMoveMemory(pStatus, &pFrame->Octet[4], 2);
if ((*pAlg == Ndis802_11AuthModeOpen)
-#ifdef LEAP_SUPPORT
- || (*pAlg == CISCO_AuthModeLEAP)
-#endif // LEAP_SUPPORT //
)
{
if (*pSeq == 1 || *pSeq == 2)
@@ -1003,9 +898,6 @@ BOOLEAN MlmeAuthReqSanity(
*pAlg = pInfo->Alg;
if (((*pAlg == Ndis802_11AuthModeShared) ||(*pAlg == Ndis802_11AuthModeOpen)
-#ifdef LEAP_SUPPORT
- || (*pAlg == CISCO_AuthModeLEAP)
-#endif // LEAP_SUPPORT //
) &&
((*pAddr & 0x01) == 0))
{
@@ -1344,290 +1236,3 @@ BOOLEAN PeerWpaMessageSanity(
return TRUE;
}
-
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
-BOOLEAN MlmeDlsReqSanity(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen,
- OUT PRT_802_11_DLS *pDLS,
- OUT PUSHORT pReason)
-{
- MLME_DLS_REQ_STRUCT *pInfo;
-
- pInfo = (MLME_DLS_REQ_STRUCT *)Msg;
-
- *pDLS = pInfo->pDLS;
- *pReason = pInfo->Reason;
-
- return TRUE;
-}
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef QOS_DLS_SUPPORT
-BOOLEAN PeerDlsReqSanity(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen,
- OUT PUCHAR pDA,
- OUT PUCHAR pSA,
- OUT USHORT *pCapabilityInfo,
- OUT USHORT *pDlsTimeout,
- OUT UCHAR *pRatesLen,
- OUT UCHAR Rates[],
- OUT UCHAR *pHtCapabilityLen,
- OUT HT_CAPABILITY_IE *pHtCapability)
-{
- CHAR *Ptr;
- PFRAME_802_11 Fr = (PFRAME_802_11)Msg;
- PEID_STRUCT eid_ptr;
-
- // to prevent caller from using garbage output value
- *pCapabilityInfo = 0;
- *pDlsTimeout = 0;
- *pHtCapabilityLen = 0;
-
- Ptr = Fr->Octet;
-
- // offset to destination MAC address (Category and Action field)
- Ptr += 2;
-
- // get DA from payload and advance the pointer
- NdisMoveMemory(pDA, Ptr, MAC_ADDR_LEN);
- Ptr += MAC_ADDR_LEN;
-
- // get SA from payload and advance the pointer
- NdisMoveMemory(pSA, Ptr, MAC_ADDR_LEN);
- Ptr += MAC_ADDR_LEN;
-
- // get capability info from payload and advance the pointer
- NdisMoveMemory(pCapabilityInfo, Ptr, 2);
- Ptr += 2;
-
- // get capability info from payload and advance the pointer
- NdisMoveMemory(pDlsTimeout, Ptr, 2);
- Ptr += 2;
-
- // Category and Action field + DA + SA + capability + Timeout
- eid_ptr = (PEID_STRUCT) &Fr->Octet[18];
-
- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((UCHAR*)Fr + MsgLen))
- {
- switch(eid_ptr->Eid)
- {
- case IE_SUPP_RATES:
- if ((eid_ptr->Len <= MAX_LEN_OF_SUPPORTED_RATES) && (eid_ptr->Len > 0))
- {
- NdisMoveMemory(Rates, eid_ptr->Octet, eid_ptr->Len);
- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsReqSanity - IE_SUPP_RATES., Len=%d. Rates[0]=%x\n",eid_ptr->Len, Rates[0]));
- DBGPRINT(RT_DEBUG_TRACE, ("Rates[1]=%x %x %x %x %x %x %x\n", Rates[1], Rates[2], Rates[3], Rates[4], Rates[5], Rates[6], Rates[7]));
- *pRatesLen = eid_ptr->Len;
- }
- else
- {
- *pRatesLen = 8;
- Rates[0] = 0x82;
- Rates[1] = 0x84;
- Rates[2] = 0x8b;
- Rates[3] = 0x96;
- Rates[4] = 0x12;
- Rates[5] = 0x24;
- Rates[6] = 0x48;
- Rates[7] = 0x6c;
- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsReqSanity - wrong IE_SUPP_RATES., Len=%d\n",eid_ptr->Len));
- }
- break;
-
- case IE_EXT_SUPP_RATES:
- if (eid_ptr->Len + *pRatesLen <= MAX_LEN_OF_SUPPORTED_RATES)
- {
- NdisMoveMemory(&Rates[*pRatesLen], eid_ptr->Octet, eid_ptr->Len);
- *pRatesLen = (*pRatesLen) + eid_ptr->Len;
- }
- else
- {
- NdisMoveMemory(&Rates[*pRatesLen], eid_ptr->Octet, MAX_LEN_OF_SUPPORTED_RATES - (*pRatesLen));
- *pRatesLen = MAX_LEN_OF_SUPPORTED_RATES;
- }
- break;
-
- case IE_HT_CAP:
- if (eid_ptr->Len >= sizeof(HT_CAPABILITY_IE))
- {
- NdisMoveMemory(pHtCapability, eid_ptr->Octet, sizeof(HT_CAPABILITY_IE));
-
- *(USHORT *)(&pHtCapability->HtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->HtCapInfo));
- *(USHORT *)(&pHtCapability->ExtHtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->ExtHtCapInfo));
- *pHtCapabilityLen = sizeof(HT_CAPABILITY_IE);
-
- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsReqSanity - IE_HT_CAP\n"));
- }
- else
- {
- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsReqSanity - wrong IE_HT_CAP.eid_ptr->Len = %d\n", eid_ptr->Len));
- }
- break;
-
- default:
- break;
- }
-
- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len);
- }
-
- return TRUE;
-}
-
-BOOLEAN PeerDlsRspSanity(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen,
- OUT PUCHAR pDA,
- OUT PUCHAR pSA,
- OUT USHORT *pCapabilityInfo,
- OUT USHORT *pStatus,
- OUT UCHAR *pRatesLen,
- OUT UCHAR Rates[],
- OUT UCHAR *pHtCapabilityLen,
- OUT HT_CAPABILITY_IE *pHtCapability)
-{
- CHAR *Ptr;
- PFRAME_802_11 Fr = (PFRAME_802_11)Msg;
- PEID_STRUCT eid_ptr;
-
- // to prevent caller from using garbage output value
- *pStatus = 0;
- *pCapabilityInfo = 0;
- *pHtCapabilityLen = 0;
-
- Ptr = Fr->Octet;
-
- // offset to destination MAC address (Category and Action field)
- Ptr += 2;
-
- // get status code from payload and advance the pointer
- NdisMoveMemory(pStatus, Ptr, 2);
- Ptr += 2;
-
- // get DA from payload and advance the pointer
- NdisMoveMemory(pDA, Ptr, MAC_ADDR_LEN);
- Ptr += MAC_ADDR_LEN;
-
- // get SA from payload and advance the pointer
- NdisMoveMemory(pSA, Ptr, MAC_ADDR_LEN);
- Ptr += MAC_ADDR_LEN;
-
- if (pStatus == 0)
- {
- // get capability info from payload and advance the pointer
- NdisMoveMemory(pCapabilityInfo, Ptr, 2);
- Ptr += 2;
- }
-
- // Category and Action field + status code + DA + SA + capability
- eid_ptr = (PEID_STRUCT) &Fr->Octet[18];
-
- while (((UCHAR*)eid_ptr + eid_ptr->Len + 1) < ((UCHAR*)Fr + MsgLen))
- {
- switch(eid_ptr->Eid)
- {
- case IE_SUPP_RATES:
- if ((eid_ptr->Len <= MAX_LEN_OF_SUPPORTED_RATES) && (eid_ptr->Len > 0))
- {
- NdisMoveMemory(Rates, eid_ptr->Octet, eid_ptr->Len);
- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsRspSanity - IE_SUPP_RATES., Len=%d. Rates[0]=%x\n",eid_ptr->Len, Rates[0]));
- DBGPRINT(RT_DEBUG_TRACE, ("Rates[1]=%x %x %x %x %x %x %x\n", Rates[1], Rates[2], Rates[3], Rates[4], Rates[5], Rates[6], Rates[7]));
- *pRatesLen = eid_ptr->Len;
- }
- else
- {
- *pRatesLen = 8;
- Rates[0] = 0x82;
- Rates[1] = 0x84;
- Rates[2] = 0x8b;
- Rates[3] = 0x96;
- Rates[4] = 0x12;
- Rates[5] = 0x24;
- Rates[6] = 0x48;
- Rates[7] = 0x6c;
- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsRspSanity - wrong IE_SUPP_RATES., Len=%d\n",eid_ptr->Len));
- }
- break;
-
- case IE_EXT_SUPP_RATES:
- if (eid_ptr->Len + *pRatesLen <= MAX_LEN_OF_SUPPORTED_RATES)
- {
- NdisMoveMemory(&Rates[*pRatesLen], eid_ptr->Octet, eid_ptr->Len);
- *pRatesLen = (*pRatesLen) + eid_ptr->Len;
- }
- else
- {
- NdisMoveMemory(&Rates[*pRatesLen], eid_ptr->Octet, MAX_LEN_OF_SUPPORTED_RATES - (*pRatesLen));
- *pRatesLen = MAX_LEN_OF_SUPPORTED_RATES;
- }
- break;
-
- case IE_HT_CAP:
- if (eid_ptr->Len >= sizeof(HT_CAPABILITY_IE))
- {
- NdisMoveMemory(pHtCapability, eid_ptr->Octet, sizeof(HT_CAPABILITY_IE));
-
- *(USHORT *)(&pHtCapability->HtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->HtCapInfo));
- *(USHORT *)(&pHtCapability->ExtHtCapInfo) = cpu2le16(*(USHORT *)(&pHtCapability->ExtHtCapInfo));
- *pHtCapabilityLen = sizeof(HT_CAPABILITY_IE);
-
- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsRspSanity - IE_HT_CAP\n"));
- }
- else
- {
- DBGPRINT(RT_DEBUG_TRACE, ("PeerDlsRspSanity - wrong IE_HT_CAP.eid_ptr->Len = %d\n", eid_ptr->Len));
- }
- break;
-
- default:
- break;
- }
-
- eid_ptr = (PEID_STRUCT)((UCHAR*)eid_ptr + 2 + eid_ptr->Len);
- }
-
- return TRUE;
-}
-
-BOOLEAN PeerDlsTearDownSanity(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen,
- OUT PUCHAR pDA,
- OUT PUCHAR pSA,
- OUT USHORT *pReason)
-{
- CHAR *Ptr;
- PFRAME_802_11 Fr = (PFRAME_802_11)Msg;
-
- // to prevent caller from using garbage output value
- *pReason = 0;
-
- Ptr = Fr->Octet;
-
- // offset to destination MAC address (Category and Action field)
- Ptr += 2;
-
- // get DA from payload and advance the pointer
- NdisMoveMemory(pDA, Ptr, MAC_ADDR_LEN);
- Ptr += MAC_ADDR_LEN;
-
- // get SA from payload and advance the pointer
- NdisMoveMemory(pSA, Ptr, MAC_ADDR_LEN);
- Ptr += MAC_ADDR_LEN;
-
- // get reason code from payload and advance the pointer
- NdisMoveMemory(pReason, Ptr, 2);
- Ptr += 2;
-
- return TRUE;
-}
-#endif // QOS_DLS_SUPPORT //
-
diff --git a/drivers/staging/rt2860/common/cmm_sync.c b/drivers/staging/rt2860/common/cmm_sync.c
index d29e0b630e2e..a6e1b6ddfe57 100644
--- a/drivers/staging/rt2860/common/cmm_sync.c
+++ b/drivers/staging/rt2860/common/cmm_sync.c
@@ -95,9 +95,7 @@ VOID BuildChannelList(
// if not 11a-only mode, channel list starts from 2.4Ghz band
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)
@@ -146,10 +144,8 @@ VOID BuildChannelList(
}
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)
@@ -383,33 +379,18 @@ VOID ScanNextChannel(
NDIS_STATUS NStatus;
ULONG FrameLen = 0;
UCHAR SsidLen = 0, ScanType = pAd->MlmeAux.ScanType, BBPValue = 0;
-#ifdef CONFIG_STA_SUPPORT
USHORT Status;
PHEADER_802_11 pHdr80211;
-#endif // CONFIG_STA_SUPPORT //
UINT ScanTimeIn5gChannel = SHORT_CHANNEL_TIME;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- if (MONITOR_ON(pAd))
- return;
- }
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef RALINK_ATE
- // Nothing to do in ATE mode.
- if (ATE_ON(pAd))
+ if (MONITOR_ON(pAd))
return;
-#endif // RALINK_ATE //
if (pAd->MlmeAux.Channel == 0)
{
if ((pAd->CommonCfg.BBPCurrentBW == BW_40)
-#ifdef CONFIG_STA_SUPPORT
&& (INFRA_ON(pAd)
|| (pAd->OpMode == OPMODE_AP))
-#endif // CONFIG_STA_SUPPORT //
)
{
AsicSwitchChannel(pAd, pAd->CommonCfg.CentralChannel, FALSE);
@@ -427,8 +408,6 @@ VOID ScanNextChannel(
DBGPRINT(RT_DEBUG_TRACE, ("SYNC - End of SCAN, restore to channel %d, Total BSS[%02d]\n",pAd->CommonCfg.Channel, pAd->ScanTab.BssNr));
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
//
// To prevent data lost.
@@ -458,31 +437,35 @@ VOID ScanNextChannel(
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);
}
+#ifdef RT2870
+ else if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->OpMode == OPMODE_STA))
+ {
+ pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
+ MlmeCntlConfirm(pAd, MT2_SCAN_CONF, MLME_FAIL_NO_RESOURCE);
+ }
+#endif // RT2870 //
else
{
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// BBP and RF are not accessible in PS mode, we has to wake them up first
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
+#ifdef RT2860
AsicForceWakeup(pAd, FROM_TX);
-
+#endif
+#ifdef RT2870
+ AsicForceWakeup(pAd, TRUE);
+#endif
// leave PSM during scanning. otherwise we may lost ProbeRsp & BEACON
if (pAd->StaCfg.Psm == PWR_SAVE)
MlmeSetPsmBit(pAd, PWR_ACTIVE);
}
-#endif // CONFIG_STA_SUPPORT //
AsicSwitchChannel(pAd, pAd->MlmeAux.Channel, TRUE);
AsicLockChannel(pAd, pAd->MlmeAux.Channel);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if (pAd->MlmeAux.Channel > 14)
{
@@ -492,19 +475,8 @@ VOID ScanNextChannel(
ScanTimeIn5gChannel = MIN_CHANNEL_TIME;
}
}
-
-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
- // carrier detection
- if (pAd->CommonCfg.CarrierDetect.Enable == TRUE)
- {
- ScanType = SCAN_PASSIVE;
- ScanTimeIn5gChannel = MIN_CHANNEL_TIME;
- }
-#endif // CARRIER_DETECTION_SUPPORT //
}
-#endif // CONFIG_STA_SUPPORT //
-
//Global country domain(ch1-11:active scan, ch12-14 passive scan)
if ((pAd->MlmeAux.Channel <= 14) && (pAd->MlmeAux.Channel >= 12) && ((pAd->CommonCfg.CountryRegion & 0x7f) == REGION_31_BG_BAND))
{
@@ -515,7 +487,6 @@ VOID ScanNextChannel(
// Chnage the channel scan time for CISCO stuff based on its IAPP announcement
if (ScanType == FAST_SCAN_ACTIVE)
RTMPSetTimer(&pAd->MlmeAux.ScanTimer, FAST_ACTIVE_SCAN_TIME);
-#ifdef CONFIG_STA_SUPPORT
else if (((ScanType == SCAN_CISCO_ACTIVE) ||
(ScanType == SCAN_CISCO_PASSIVE) ||
(ScanType == SCAN_CISCO_CHANNEL_LOAD) ||
@@ -526,13 +497,10 @@ VOID ScanNextChannel(
else
RTMPSetTimer(&pAd->MlmeAux.ScanTimer, pAd->StaCfg.CCXScanTime);
}
-#endif // CONFIG_STA_SUPPORT //
else // must be SCAN_PASSIVE or SCAN_ACTIVE
{
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)
@@ -551,14 +519,12 @@ VOID ScanNextChannel(
if (NStatus != NDIS_STATUS_SUCCESS)
{
DBGPRINT(RT_DEBUG_TRACE, ("SYNC - ScanNextChannel() allocate memory fail\n"));
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+
{
pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
Status = MLME_FAIL_NO_RESOURCE;
MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_SCAN_CONF, 2, &Status);
}
-#endif // CONFIG_STA_SUPPORT //
return;
}
@@ -592,78 +558,35 @@ VOID ScanNextChannel(
FrameLen += Tmp;
}
-#ifdef DOT11_N_SUPPORT
if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
{
ULONG Tmp;
UCHAR HtLen;
UCHAR BROADCOM[4] = {0x0, 0x90, 0x4c, 0x33};
-#ifdef RT_BIG_ENDIAN
- HT_CAPABILITY_IE HtCapabilityTmp;
-#endif
+
if (pAd->bBroadComHT == TRUE)
{
HtLen = pAd->MlmeAux.HtCapabilityLen + 4;
-#ifdef RT_BIG_ENDIAN
- NdisMoveMemory(&HtCapabilityTmp, &pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE);
- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));
- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));
MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp,
1, &WpaIe,
1, &HtLen,
4, &BROADCOM[0],
- pAd->MlmeAux.HtCapabilityLen, &HtCapabilityTmp,
- END_OF_ARGS);
-#else
- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp,
- 1, &WpaIe,
- 1, &HtLen,
- 4, &BROADCOM[0],
pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability,
END_OF_ARGS);
-#endif // RT_BIG_ENDIAN //
}
else
{
HtLen = pAd->MlmeAux.HtCapabilityLen;
-#ifdef RT_BIG_ENDIAN
- NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, SIZE_HT_CAP_IE);
- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));
- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));
MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp,
1, &HtCapIe,
1, &HtLen,
- HtLen, &HtCapabilityTmp,
- END_OF_ARGS);
-#else
- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp,
- 1, &HtCapIe,
- 1, &HtLen,
HtLen, &pAd->CommonCfg.HtCapability,
END_OF_ARGS);
-#endif // RT_BIG_ENDIAN //
}
FrameLen += Tmp;
-
-#ifdef DOT11N_DRAFT3
- if (pAd->CommonCfg.BACapability.field.b2040CoexistScanSup == 1)
- {
- ULONG Tmp;
- HtLen = 1;
- MakeOutgoingFrame(pOutBuffer + FrameLen, &Tmp,
- 1, &ExtHtCapIe,
- 1, &HtLen,
- 1, &pAd->CommonCfg.BSSCoexist2040.word,
- END_OF_ARGS);
-
- FrameLen += Tmp;
- }
-#endif // DOT11N_DRAFT3 //
}
-#endif // DOT11_N_SUPPORT //
-
MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
MlmeFreeMemory(pAd, pOutBuffer);
@@ -671,11 +594,7 @@ VOID ScanNextChannel(
// For SCAN_CISCO_PASSIVE, do nothing and silently wait for beacon or other probe reponse
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- pAd->Mlme.SyncMachine.CurrState = SCAN_LISTEN;
-#endif // CONFIG_STA_SUPPORT //
-
+ pAd->Mlme.SyncMachine.CurrState = SCAN_LISTEN;
}
}
diff --git a/drivers/staging/rt2860/common/cmm_wpa.c b/drivers/staging/rt2860/common/cmm_wpa.c
index 69baf522fa01..bda69e76867e 100644
--- a/drivers/staging/rt2860/common/cmm_wpa.c
+++ b/drivers/staging/rt2860/common/cmm_wpa.c
@@ -39,10 +39,14 @@
// WPA OUI
UCHAR OUI_WPA_NONE_AKM[4] = {0x00, 0x50, 0xF2, 0x00};
UCHAR OUI_WPA_VERSION[4] = {0x00, 0x50, 0xF2, 0x01};
+#ifndef RT30xx
UCHAR OUI_WPA_WEP40[4] = {0x00, 0x50, 0xF2, 0x01};
+#endif
UCHAR OUI_WPA_TKIP[4] = {0x00, 0x50, 0xF2, 0x02};
UCHAR OUI_WPA_CCMP[4] = {0x00, 0x50, 0xF2, 0x04};
+#ifndef RT30xx
UCHAR OUI_WPA_WEP104[4] = {0x00, 0x50, 0xF2, 0x05};
+#endif
UCHAR OUI_WPA_8021X_AKM[4] = {0x00, 0x50, 0xF2, 0x01};
UCHAR OUI_WPA_PSK_AKM[4] = {0x00, 0x50, 0xF2, 0x02};
// WPA2 OUI
@@ -51,7 +55,9 @@ UCHAR OUI_WPA2_TKIP[4] = {0x00, 0x0F, 0xAC, 0x02};
UCHAR OUI_WPA2_CCMP[4] = {0x00, 0x0F, 0xAC, 0x04};
UCHAR OUI_WPA2_8021X_AKM[4] = {0x00, 0x0F, 0xAC, 0x01};
UCHAR OUI_WPA2_PSK_AKM[4] = {0x00, 0x0F, 0xAC, 0x02};
+#ifndef RT30xx
UCHAR OUI_WPA2_WEP104[4] = {0x00, 0x0F, 0xAC, 0x05};
+#endif
// MSA OUI
UCHAR OUI_MSA_8021X_AKM[4] = {0x00, 0x0F, 0xAC, 0x05}; // Not yet final - IEEE 802.11s-D1.06
UCHAR OUI_MSA_PSK_AKM[4] = {0x00, 0x0F, 0xAC, 0x06}; // Not yet final - IEEE 802.11s-D1.06
@@ -370,7 +376,7 @@ static VOID RTMPInsertRsnIeCipher(
break;
}
-#ifdef CONFIG_STA_SUPPORT
+#ifndef RT30xx
if ((pAd->OpMode == OPMODE_STA) &&
(pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) &&
(pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled))
@@ -386,8 +392,7 @@ static VOID RTMPInsertRsnIeCipher(
break;
}
}
-#endif // CONFIG_STA_SUPPORT //
-
+#endif
// swap for big-endian platform
pRsnie_cipher->version = cpu2le16(pRsnie_cipher->version);
pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount);
@@ -448,7 +453,7 @@ static VOID RTMPInsertRsnIeCipher(
break;
}
-#ifdef CONFIG_STA_SUPPORT
+#ifndef RT30xx
if ((pAd->OpMode == OPMODE_STA) &&
(pAd->StaCfg.GroupCipher != Ndis802_11Encryption2Enabled) &&
(pAd->StaCfg.GroupCipher != Ndis802_11Encryption3Enabled))
@@ -464,8 +469,7 @@ static VOID RTMPInsertRsnIeCipher(
break;
}
}
-#endif // CONFIG_STA_SUPPORT //
-
+#endif
// swap for big-endian platform
pRsnie_cipher->version = cpu2le16(pRsnie_cipher->version);
pRsnie_cipher->ucount = cpu2le16(pRsnie_cipher->ucount);
@@ -621,23 +625,19 @@ 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
+ WPA_MIX_PAIR_CIPHER FlexibleCipher = WPA_TKIPAES_WPA2_TKIPAES; // it provide the more flexible cipher combination in WPA-WPA2 and TKIPAES mode
rsnielen_cur_p = NULL;
rsnielen_ex_cur_p = NULL;
{
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
-#ifdef WPA_SUPPLICANT_SUPPORT
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
@@ -660,7 +660,6 @@ VOID RTMPMakeRSNIE(
bMixCipher = pAd->StaCfg.bMixCipher;
}
-#endif // CONFIG_STA_SUPPORT //
}
// indicate primary RSNIE as WPA or WPA2
@@ -1131,11 +1130,6 @@ BOOLEAN RTMPParseEapolKeyData(
return FALSE;
}
-
-#ifdef CONFIG_STA_SUPPORT
- // Todo
-#endif // CONFIG_STA_SUPPORT //
-
return TRUE;
}
diff --git a/drivers/staging/rt2860/common/dfs.c b/drivers/staging/rt2860/common/dfs.c
index b09bba5cb206..23330f2661d9 100644
--- a/drivers/staging/rt2860/common/dfs.c
+++ b/drivers/staging/rt2860/common/dfs.c
@@ -80,18 +80,6 @@ VOID BbpRadarDetectionStart(
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 124, 0x28);
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, 125, 0xff);
-#if 0
- // toggle Rx enable bit for radar detection.
- // it's Andy's recommand.
- {
- UINT32 Value;
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value |= (0x1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
- Value &= ~(0x1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
- }
-#endif
RadarPeriod = ((UINT)RdIdleTimeTable[pAd->CommonCfg.RadarDetect.RDDurRegion][0] + (UINT)pAd->CommonCfg.RadarDetect.DfsSessionTime) < 250 ?
(RdIdleTimeTable[pAd->CommonCfg.RadarDetect.RDDurRegion][0] + pAd->CommonCfg.RadarDetect.DfsSessionTime) : 250;
@@ -314,15 +302,6 @@ ULONG RTMPReadRadarDuration(
{
ULONG result = 0;
-#ifdef DFS_SUPPORT
- UINT8 duration1 = 0, duration2 = 0, duration3 = 0;
-
- BBP_IO_READ8_BY_REG_ID(pAd, BBP_R116, &duration1);
- BBP_IO_READ8_BY_REG_ID(pAd, BBP_R117, &duration2);
- BBP_IO_READ8_BY_REG_ID(pAd, BBP_R118, &duration3);
- result = (duration1 << 16) + (duration2 << 8) + duration3;
-#endif // DFS_SUPPORT //
-
return result;
}
diff --git a/drivers/staging/rt2860/common/eeprom.c b/drivers/staging/rt2860/common/eeprom.c
index bed2d666629c..9729323baca5 100644
--- a/drivers/staging/rt2860/common/eeprom.c
+++ b/drivers/staging/rt2860/common/eeprom.c
@@ -73,12 +73,16 @@ USHORT ShiftInBits(
RaiseClock(pAd, &x);
RTMP_IO_READ32(pAd, E2PROM_CSR, &x);
-
+#ifdef RT30xx
+ LowerClock(pAd, &x); //prevent read failed
+#endif
x &= ~(EEDI);
if(x & EEDO)
data |= 1;
+#ifndef RT30xx
LowerClock(pAd, &x);
+#endif
}
return data;
@@ -181,6 +185,15 @@ USHORT RTMP_EEPROM_READ16(
UINT32 x;
USHORT data;
+#ifdef RT30xx
+ if (pAd->NicConfig2.field.AntDiversity)
+ {
+ pAd->EepromAccess = TRUE;
+ }
+//2008/09/11:KH add to support efuse<--
+//2008/09/11:KH add to support efuse-->
+{
+#endif
Offset /= 2;
// reset bits and set EECS
RTMP_IO_READ32(pAd, E2PROM_CSR, &x);
@@ -188,9 +201,17 @@ USHORT RTMP_EEPROM_READ16(
x |= EECS;
RTMP_IO_WRITE32(pAd, E2PROM_CSR, x);
+#ifdef RT30xx
+ // patch can not access e-Fuse issue
+ if (!IS_RT3090(pAd))
+ {
+#endif
// kick a pulse
RaiseClock(pAd, &x);
LowerClock(pAd, &x);
+#ifdef RT30xx
+ }
+#endif
// output the read_opcode and register number in that order
ShiftOutBits(pAd, EEPROM_READ_OPCODE, 3);
@@ -201,6 +222,17 @@ USHORT RTMP_EEPROM_READ16(
EEpromCleanup(pAd);
+#ifdef RT30xx
+ // Antenna and EEPROM access are both using EESK pin,
+ // Therefor we should avoid accessing EESK at the same time
+ // Then restore antenna after EEPROM access
+ if ((pAd->NicConfig2.field.AntDiversity) || (pAd->RfIcType == RFIC_3020))
+ {
+ pAd->EepromAccess = FALSE;
+ AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt);
+ }
+}
+#endif
return data;
} //ReadEEprom
@@ -211,6 +243,15 @@ VOID RTMP_EEPROM_WRITE16(
{
UINT32 x;
+#ifdef RT30xx
+ if (pAd->NicConfig2.field.AntDiversity)
+ {
+ pAd->EepromAccess = TRUE;
+ }
+ //2008/09/11:KH add to support efuse<--
+//2008/09/11:KH add to support efuse-->
+ {
+#endif
Offset /= 2;
EWEN(pAd);
@@ -221,9 +262,17 @@ VOID RTMP_EEPROM_WRITE16(
x |= EECS;
RTMP_IO_WRITE32(pAd, E2PROM_CSR, x);
+#ifdef RT30xx
+ // patch can not access e-Fuse issue
+ if (!IS_RT3090(pAd))
+ {
+#endif
// kick a pulse
RaiseClock(pAd, &x);
LowerClock(pAd, &x);
+#ifdef RT30xx
+ }
+#endif
// output the read_opcode ,register number and data in that order
ShiftOutBits(pAd, EEPROM_WRITE_OPCODE, 3);
@@ -240,5 +289,1222 @@ VOID RTMP_EEPROM_WRITE16(
EWDS(pAd);
EEpromCleanup(pAd);
+
+#ifdef RT30xx
+ // Antenna and EEPROM access are both using EESK pin,
+ // Therefor we should avoid accessing EESK at the same time
+ // Then restore antenna after EEPROM access
+ if ((pAd->NicConfig2.field.AntDiversity) || (pAd->RfIcType == RFIC_3020))
+ {
+ pAd->EepromAccess = FALSE;
+ AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt);
+ }
+}
+#endif
+}
+
+//2008/09/11:KH add to support efuse<--
+#ifdef RT30xx
+/*
+ ========================================================================
+
+ Routine Description:
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+UCHAR eFuseReadRegisters(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ OUT USHORT* pData)
+{
+ EFUSE_CTRL_STRUC eFuseCtrlStruc;
+ int i;
+ USHORT efuseDataOffset;
+ UINT32 data;
+
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+
+ //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment.
+ //Use the eeprom logical address and covert to address to block number
+ eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0;
+
+ //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 0.
+ eFuseCtrlStruc.field.EFSROM_MODE = 0;
+
+ //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure.
+ eFuseCtrlStruc.field.EFSROM_KICK = 1;
+
+ NdisMoveMemory(&data, &eFuseCtrlStruc, 4);
+ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data);
+
+ //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again.
+ i = 0;
+ while(i < 100)
+ {
+ //rtmp.HwMemoryReadDword(EFUSE_CTRL, (DWORD *) &eFuseCtrlStruc, 4);
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+ if(eFuseCtrlStruc.field.EFSROM_KICK == 0)
+ {
+ break;
+ }
+ RTMPusecDelay(2);
+ i++;
+ }
+
+ //if EFSROM_AOUT is not found in physical address, write 0xffff
+ if (eFuseCtrlStruc.field.EFSROM_AOUT == 0x3f)
+ {
+ for(i=0; i<Length/2; i++)
+ *(pData+2*i) = 0xffff;
+ }
+ else
+ {
+ //Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x590-0x59C)
+ efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC) ;
+ //data hold 4 bytes data.
+ //In RTMP_IO_READ32 will automatically execute 32-bytes swapping
+ RTMP_IO_READ32(pAd, efuseDataOffset, &data);
+ //Decide the upper 2 bytes or the bottom 2 bytes.
+ // Little-endian S | S Big-endian
+ // addr 3 2 1 0 | 0 1 2 3
+ // Ori-V D C B A | A B C D
+ //After swapping
+ // D C B A | D C B A
+ //Return 2-bytes
+ //The return byte statrs from S. Therefore, the little-endian will return BA, the Big-endian will return DC.
+ //For returning the bottom 2 bytes, the Big-endian should shift right 2-bytes.
+ data = data >> (8*(Offset & 0x3));
+
+ NdisMoveMemory(pData, &data, Length);
+ }
+
+ return (UCHAR) eFuseCtrlStruc.field.EFSROM_AOUT;
+
+}
+
+/*
+ ========================================================================
+
+ Routine Description:
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+VOID eFusePhysicalReadRegisters(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ OUT USHORT* pData)
+{
+ EFUSE_CTRL_STRUC eFuseCtrlStruc;
+ int i;
+ USHORT efuseDataOffset;
+ UINT32 data;
+
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+
+ //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment.
+ eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0;
+
+ //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 1.
+ //Read in physical view
+ eFuseCtrlStruc.field.EFSROM_MODE = 1;
+
+ //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure.
+ eFuseCtrlStruc.field.EFSROM_KICK = 1;
+
+ NdisMoveMemory(&data, &eFuseCtrlStruc, 4);
+ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data);
+
+ //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again.
+ i = 0;
+ while(i < 100)
+ {
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+ if(eFuseCtrlStruc.field.EFSROM_KICK == 0)
+ break;
+ RTMPusecDelay(2);
+ i++;
+ }
+
+ //Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590)
+ //Because the size of each EFUSE_DATA is 4 Bytes, the size of address of each is 2 bits.
+ //The previous 2 bits is the EFUSE_DATA number, the last 2 bits is used to decide which bytes
+ //Decide which EFUSE_DATA to read
+ //590:F E D C
+ //594:B A 9 8
+ //598:7 6 5 4
+ //59C:3 2 1 0
+ efuseDataOffset = EFUSE_DATA3 - (Offset & 0xC) ;
+
+ RTMP_IO_READ32(pAd, efuseDataOffset, &data);
+
+ data = data >> (8*(Offset & 0x3));
+
+ NdisMoveMemory(pData, &data, Length);
+
+}
+
+/*
+ ========================================================================
+
+ Routine Description:
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+VOID eFuseReadPhysical(
+ IN PRTMP_ADAPTER pAd,
+ IN PUSHORT lpInBuffer,
+ IN ULONG nInBufferSize,
+ OUT PUSHORT lpOutBuffer,
+ IN ULONG nOutBufferSize
+)
+{
+ USHORT* pInBuf = (USHORT*)lpInBuffer;
+ USHORT* pOutBuf = (USHORT*)lpOutBuffer;
+
+ USHORT Offset = pInBuf[0]; //addr
+ USHORT Length = pInBuf[1]; //length
+ int i;
+
+ for(i=0; i<Length; i+=2)
+ {
+ eFusePhysicalReadRegisters(pAd,Offset+i, 2, &pOutBuf[i/2]);
+ }
+}
+
+/*
+ ========================================================================
+
+ Routine Description:
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+NTSTATUS eFuseRead(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ OUT PUCHAR pData,
+ IN USHORT Length)
+{
+ USHORT* pOutBuf = (USHORT*)pData;
+ NTSTATUS Status = STATUS_SUCCESS;
+ UCHAR EFSROM_AOUT;
+ int i;
+
+ for(i=0; i<Length; i+=2)
+ {
+ EFSROM_AOUT = eFuseReadRegisters(pAd, Offset+i, 2, &pOutBuf[i/2]);
+ }
+ return Status;
+}
+
+/*
+ ========================================================================
+
+ Routine Description:
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+VOID eFusePhysicalWriteRegisters(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ OUT USHORT* pData)
+{
+ EFUSE_CTRL_STRUC eFuseCtrlStruc;
+ int i;
+ USHORT efuseDataOffset;
+ UINT32 data, eFuseDataBuffer[4];
+
+ //Step0. Write 16-byte of data to EFUSE_DATA0-3 (0x590-0x59C), where EFUSE_DATA0 is the LSB DW, EFUSE_DATA3 is the MSB DW.
+
+ /////////////////////////////////////////////////////////////////
+ //read current values of 16-byte block
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+
+ //Step0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment.
+ eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0;
+
+ //Step1. Write EFSROM_MODE (0x580, bit7:bit6) to 1.
+ eFuseCtrlStruc.field.EFSROM_MODE = 1;
+
+ //Step2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure.
+ eFuseCtrlStruc.field.EFSROM_KICK = 1;
+
+ NdisMoveMemory(&data, &eFuseCtrlStruc, 4);
+ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data);
+
+ //Step3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again.
+ i = 0;
+ while(i < 100)
+ {
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+
+ if(eFuseCtrlStruc.field.EFSROM_KICK == 0)
+ break;
+ RTMPusecDelay(2);
+ i++;
+ }
+
+ //Step4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590)
+ efuseDataOffset = EFUSE_DATA3;
+ for(i=0; i< 4; i++)
+ {
+ RTMP_IO_READ32(pAd, efuseDataOffset, (PUINT32) &eFuseDataBuffer[i]);
+ efuseDataOffset -= 4;
+ }
+
+ //Update the value, the offset is multiple of 2, length is 2
+ efuseDataOffset = (Offset & 0xc) >> 2;
+ data = pData[0] & 0xffff;
+ //The offset should be 0x***10 or 0x***00
+ if((Offset % 4) != 0)
+ {
+ eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff) | (data << 16);
+ }
+ else
+ {
+ eFuseDataBuffer[efuseDataOffset] = (eFuseDataBuffer[efuseDataOffset] & 0xffff0000) | data;
+ }
+
+ efuseDataOffset = EFUSE_DATA3;
+ for(i=0; i< 4; i++)
+ {
+ RTMP_IO_WRITE32(pAd, efuseDataOffset, eFuseDataBuffer[i]);
+ efuseDataOffset -= 4;
+ }
+ /////////////////////////////////////////////////////////////////
+
+ //Step1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment.
+ eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0;
+
+ //Step2. Write EFSROM_MODE (0x580, bit7:bit6) to 3.
+ eFuseCtrlStruc.field.EFSROM_MODE = 3;
+
+ //Step3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure.
+ eFuseCtrlStruc.field.EFSROM_KICK = 1;
+
+ NdisMoveMemory(&data, &eFuseCtrlStruc, 4);
+ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data);
+
+ //Step4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It��s done.
+ i = 0;
+ while(i < 100)
+ {
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+
+ if(eFuseCtrlStruc.field.EFSROM_KICK == 0)
+ break;
+
+ RTMPusecDelay(2);
+ i++;
+ }
+}
+
+/*
+ ========================================================================
+
+ Routine Description:
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+NTSTATUS eFuseWriteRegisters(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ IN USHORT* pData)
+{
+ USHORT i;
+ USHORT eFuseData;
+ USHORT LogicalAddress, BlkNum = 0xffff;
+ UCHAR EFSROM_AOUT;
+
+ USHORT addr,tmpaddr, InBuf[3], tmpOffset;
+ USHORT buffer[8];
+ BOOLEAN bWriteSuccess = TRUE;
+
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters Offset=%x, pData=%x\n", Offset, *pData));
+
+ //Step 0. find the entry in the mapping table
+ //The address of EEPROM is 2-bytes alignment.
+ //The last bit is used for alignment, so it must be 0.
+ tmpOffset = Offset & 0xfffe;
+ EFSROM_AOUT = eFuseReadRegisters(pAd, tmpOffset, 2, &eFuseData);
+
+ if( EFSROM_AOUT == 0x3f)
+ { //find available logical address pointer
+ //the logical address does not exist, find an empty one
+ //from the first address of block 45=16*45=0x2d0 to the last address of block 47
+ //==>48*16-3(reserved)=2FC
+ for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2)
+ {
+ //Retrive the logical block nubmer form each logical address pointer
+ //It will access two logical address pointer each time.
+ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress);
+ if( (LogicalAddress & 0xff) == 0)
+ {//Not used logical address pointer
+ BlkNum = i-EFUSE_USAGE_MAP_START;
+ break;
+ }
+ else if(( (LogicalAddress >> 8) & 0xff) == 0)
+ {//Not used logical address pointer
+ if (i != EFUSE_USAGE_MAP_END)
+ {
+ BlkNum = i-EFUSE_USAGE_MAP_START+1;
+ }
+ break;
+ }
+ }
+ }
+ else
+ {
+ BlkNum = EFSROM_AOUT;
+ }
+
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum));
+
+ if(BlkNum == 0xffff)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n"));
+ return FALSE;
+ }
+
+ //Step 1. Save data of this block which is pointed by the avaible logical address pointer
+ // read and save the original block data
+ for(i =0; i<8; i++)
+ {
+ addr = BlkNum * 0x10 ;
+
+ InBuf[0] = addr+2*i;
+ InBuf[1] = 2;
+ InBuf[2] = 0x0;
+
+ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
+
+ buffer[i] = InBuf[2];
+ }
+
+ //Step 2. Update the data in buffer, and write the data to Efuse
+ buffer[ (Offset >> 1) % 8] = pData[0];
+
+ do
+ {
+ //Step 3. Write the data to Efuse
+ if(!bWriteSuccess)
+ {
+ for(i =0; i<8; i++)
+ {
+ addr = BlkNum * 0x10 ;
+
+ InBuf[0] = addr+2*i;
+ InBuf[1] = 2;
+ InBuf[2] = buffer[i];
+
+ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2);
+ }
+ }
+ else
+ {
+ addr = BlkNum * 0x10 ;
+
+ InBuf[0] = addr+(Offset % 16);
+ InBuf[1] = 2;
+ InBuf[2] = pData[0];
+
+ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2);
+ }
+
+ //Step 4. Write mapping table
+ addr = EFUSE_USAGE_MAP_START+BlkNum;
+
+ tmpaddr = addr;
+
+ if(addr % 2 != 0)
+ addr = addr -1;
+ InBuf[0] = addr;
+ InBuf[1] = 2;
+
+ //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry
+ tmpOffset = Offset;
+ tmpOffset >>= 4;
+ tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40;
+ tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80;
+
+ // write the logical address
+ if(tmpaddr%2 != 0)
+ InBuf[2] = tmpOffset<<8;
+ else
+ InBuf[2] = tmpOffset;
+
+ eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0);
+
+ //Step 5. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted
+ bWriteSuccess = TRUE;
+ for(i =0; i<8; i++)
+ {
+ addr = BlkNum * 0x10 ;
+
+ InBuf[0] = addr+2*i;
+ InBuf[1] = 2;
+ InBuf[2] = 0x0;
+
+ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
+
+ if(buffer[i] != InBuf[2])
+ {
+ bWriteSuccess = FALSE;
+ break;
+ }
+ }
+
+ //Step 6. invlidate mapping entry and find a free mapping entry if not succeed
+ if (!bWriteSuccess)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess BlkNum = %d\n", BlkNum));
+
+ // the offset of current mapping entry
+ addr = EFUSE_USAGE_MAP_START+BlkNum;
+
+ //find a new mapping entry
+ BlkNum = 0xffff;
+ for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2)
+ {
+ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress);
+ if( (LogicalAddress & 0xff) == 0)
+ {
+ BlkNum = i-EFUSE_USAGE_MAP_START;
+ break;
+ }
+ else if(( (LogicalAddress >> 8) & 0xff) == 0)
+ {
+ if (i != EFUSE_USAGE_MAP_END)
+ {
+ BlkNum = i+1-EFUSE_USAGE_MAP_START;
+ }
+ break;
+ }
+ }
+ DBGPRINT(RT_DEBUG_TRACE, ("Not bWriteSuccess new BlkNum = %d\n", BlkNum));
+ if(BlkNum == 0xffff)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n"));
+ return FALSE;
+ }
+
+ //invalidate the original mapping entry if new entry is not found
+ tmpaddr = addr;
+
+ if(addr % 2 != 0)
+ addr = addr -1;
+ InBuf[0] = addr;
+ InBuf[1] = 2;
+
+ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
+
+ // write the logical address
+ if(tmpaddr%2 != 0)
+ {
+ // Invalidate the high byte
+ for (i=8; i<15; i++)
+ {
+ if( ( (InBuf[2] >> i) & 0x01) == 0)
+ {
+ InBuf[2] |= (0x1 <<i);
+ break;
+ }
+ }
+ }
+ else
+ {
+ // invalidate the low byte
+ for (i=0; i<8; i++)
+ {
+ if( ( (InBuf[2] >> i) & 0x01) == 0)
+ {
+ InBuf[2] |= (0x1 <<i);
+ break;
+ }
+ }
+ }
+ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
+ }
+ }
+ while(!bWriteSuccess);
+
+ return TRUE;
+}
+
+/*
+ ========================================================================
+
+ Routine Description:
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+VOID eFuseWritePhysical(
+ IN PRTMP_ADAPTER pAd,
+ PUSHORT lpInBuffer,
+ ULONG nInBufferSize,
+ PUCHAR lpOutBuffer,
+ ULONG nOutBufferSize
+)
+{
+ USHORT* pInBuf = (USHORT*)lpInBuffer;
+ int i;
+ //USHORT* pOutBuf = (USHORT*)ioBuffer;
+
+ USHORT Offset = pInBuf[0]; //addr
+ USHORT Length = pInBuf[1]; //length
+ USHORT* pValueX = &pInBuf[2]; //value ...
+ // Little-endian S | S Big-endian
+ // addr 3 2 1 0 | 0 1 2 3
+ // Ori-V D C B A | A B C D
+ //After swapping
+ // D C B A | D C B A
+ //Both the little and big-endian use the same sequence to write data.
+ //Therefore, we only need swap data when read the data.
+ for(i=0; i<Length; i+=2)
+ {
+ eFusePhysicalWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
+ }
+}
+
+
+/*
+ ========================================================================
+
+ Routine Description:
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+NTSTATUS eFuseWrite(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN PUCHAR pData,
+ IN USHORT length)
+{
+ int i;
+
+ USHORT* pValueX = (PUSHORT) pData; //value ...
+ //The input value=3070 will be stored as following
+ // Little-endian S | S Big-endian
+ // addr 1 0 | 0 1
+ // Ori-V 30 70 | 30 70
+ //After swapping
+ // 30 70 | 70 30
+ //Casting
+ // 3070 | 7030 (x)
+ //The swapping should be removed for big-endian
+ for(i=0; i<length; i+=2)
+ {
+ eFuseWriteRegisters(pAd, Offset+i, 2, &pValueX[i/2]);
+ }
+
+ return TRUE;
+}
+
+/*
+ ========================================================================
+
+ Routine Description:
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+INT set_eFuseGetFreeBlockCount_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR arg)
+{
+ USHORT i;
+ USHORT LogicalAddress;
+ USHORT efusefreenum=0;
+ if(!pAd->bUseEfuse)
+ return FALSE;
+ for (i = EFUSE_USAGE_MAP_START; i <= EFUSE_USAGE_MAP_END; i+=2)
+ {
+ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress);
+ if( (LogicalAddress & 0xff) == 0)
+ {
+ efusefreenum= (UCHAR) (EFUSE_USAGE_MAP_END-i+1);
+ break;
+ }
+ else if(( (LogicalAddress >> 8) & 0xff) == 0)
+ {
+ efusefreenum = (UCHAR) (EFUSE_USAGE_MAP_END-i);
+ break;
+ }
+
+ if(i == EFUSE_USAGE_MAP_END)
+ efusefreenum = 0;
+ }
+ printk("efuseFreeNumber is %d\n",efusefreenum);
+ return TRUE;
+}
+INT set_eFusedump_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR arg)
+{
+USHORT InBuf[3];
+ INT i=0;
+ if(!pAd->bUseEfuse)
+ return FALSE;
+ for(i =0; i<EFUSE_USAGE_MAP_END/2; i++)
+ {
+ InBuf[0] = 2*i;
+ InBuf[1] = 2;
+ InBuf[2] = 0x0;
+
+ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
+ if(i%4==0)
+ printk("\nBlock %x:",i/8);
+ printk("%04x ",InBuf[2]);
+ }
+ return TRUE;
+}
+INT set_eFuseLoadFromBin_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR arg)
+{
+ CHAR *src;
+ struct file *srcf;
+ INT retval, orgfsuid, orgfsgid;
+ mm_segment_t orgfs;
+ UCHAR *buffer;
+ UCHAR BinFileSize=0;
+ INT i = 0,j=0,k=1;
+ USHORT *PDATA;
+ USHORT DATA;
+ BinFileSize=strlen("RT30xxEEPROM.bin");
+ src = kmalloc(128, MEM_ALLOC_FLAG);
+ NdisZeroMemory(src, 128);
+
+ if(strlen(arg)>0)
+ {
+
+ NdisMoveMemory(src, arg, strlen(arg));
+ }
+
+ else
+ {
+
+ NdisMoveMemory(src, "RT30xxEEPROM.bin", BinFileSize);
+ }
+
+ DBGPRINT(RT_DEBUG_TRACE, ("FileName=%s\n",src));
+ buffer = kmalloc(MAX_EEPROM_BIN_FILE_SIZE, MEM_ALLOC_FLAG);
+
+ if(buffer == NULL)
+ {
+ kfree(src);
+ return FALSE;
+}
+ PDATA=kmalloc(sizeof(USHORT)*8,MEM_ALLOC_FLAG);
+
+ if(PDATA==NULL)
+ {
+ kfree(src);
+
+ kfree(buffer);
+ return FALSE;
+ }
+ /* Don't change to uid 0, let the file be opened as the "normal" user */
+#if 0
+ orgfsuid = current->fsuid;
+ orgfsgid = current->fsgid;
+ current->fsuid=current->fsgid = 0;
+#endif
+ orgfs = get_fs();
+ set_fs(KERNEL_DS);
+
+ if (src && *src)
+ {
+ srcf = filp_open(src, O_RDONLY, 0);
+ if (IS_ERR(srcf))
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld opening %s\n", -PTR_ERR(srcf),src));
+ return FALSE;
+ }
+ else
+ {
+ // The object must have a read method
+ if (srcf->f_op && srcf->f_op->read)
+ {
+ memset(buffer, 0x00, MAX_EEPROM_BIN_FILE_SIZE);
+ while(srcf->f_op->read(srcf, &buffer[i], 1, &srcf->f_pos)==1)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("%02X ",buffer[i]));
+ if((i+1)%8==0)
+ DBGPRINT(RT_DEBUG_TRACE, ("\n"));
+ i++;
+ if(i>=MAX_EEPROM_BIN_FILE_SIZE)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("--> Error %ld reading %s, The file is too large[1024]\n", -PTR_ERR(srcf),src));
+ kfree(PDATA);
+ kfree(buffer);
+ kfree(src);
+ return FALSE;
+ }
+ }
+ }
+ else
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("--> Error!! System doest not support read function\n"));
+ kfree(PDATA);
+ kfree(buffer);
+ kfree(src);
+ return FALSE;
+ }
+ }
+
+
+ }
+ else
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("--> Error src or srcf is null\n"));
+ kfree(PDATA);
+ kfree(buffer);
+ return FALSE;
+
+ }
+
+
+ retval=filp_close(srcf,NULL);
+
+ if (retval)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("--> Error %d closing %s\n", -retval, src));
+ }
+ set_fs(orgfs);
+#if 0
+ current->fsuid = orgfsuid;
+ current->fsgid = orgfsgid;
+#endif
+ for(j=0;j<i;j++)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("%02X ",buffer[j]));
+ if((j+1)%2==0)
+ PDATA[j/2%8]=((buffer[j]<<8)&0xff00)|(buffer[j-1]&0xff);
+ if(j%16==0)
+ {
+ k=buffer[j];
+ }
+ else
+ {
+ k&=buffer[j];
+ if((j+1)%16==0)
+ {
+
+ DBGPRINT(RT_DEBUG_TRACE, (" result=%02X,blk=%02x\n",k,j/16));
+
+ if(k!=0xff)
+ eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
+ else
+ {
+ if(eFuseReadRegisters(pAd,j, 2,(PUSHORT)&DATA)!=0x3f)
+ eFuseWriteRegistersFromBin(pAd,(USHORT)j-15, 16, PDATA);
+ }
+ /*
+ for(l=0;l<8;l++)
+ printk("%04x ",PDATA[l]);
+ printk("\n");
+ */
+ NdisZeroMemory(PDATA,16);
+
+
+ }
+ }
+
+
+ }
+
+
+ kfree(PDATA);
+ kfree(buffer);
+ kfree(src);
+ return TRUE;
+}
+NTSTATUS eFuseWriteRegistersFromBin(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ IN USHORT* pData)
+{
+ USHORT i;
+ USHORT eFuseData;
+ USHORT LogicalAddress, BlkNum = 0xffff;
+ UCHAR EFSROM_AOUT,Loop=0;
+ EFUSE_CTRL_STRUC eFuseCtrlStruc;
+ USHORT efuseDataOffset;
+ UINT32 data,tempbuffer;
+ USHORT addr,tmpaddr, InBuf[3], tmpOffset;
+ UINT32 buffer[4];
+ BOOLEAN bWriteSuccess = TRUE;
+ BOOLEAN bNotWrite=TRUE;
+ BOOLEAN bAllocateNewBlk=TRUE;
+
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin Offset=%x, pData=%04x:%04x:%04x:%04x\n", Offset, *pData,*(pData+1),*(pData+2),*(pData+3)));
+
+ do
+ {
+ //Step 0. find the entry in the mapping table
+ //The address of EEPROM is 2-bytes alignment.
+ //The last bit is used for alignment, so it must be 0.
+ Loop++;
+ tmpOffset = Offset & 0xfffe;
+ EFSROM_AOUT = eFuseReadRegisters(pAd, tmpOffset, 2, &eFuseData);
+
+ if( EFSROM_AOUT == 0x3f)
+ { //find available logical address pointer
+ //the logical address does not exist, find an empty one
+ //from the first address of block 45=16*45=0x2d0 to the last address of block 47
+ //==>48*16-3(reserved)=2FC
+ bAllocateNewBlk=TRUE;
+ for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2)
+ {
+ //Retrive the logical block nubmer form each logical address pointer
+ //It will access two logical address pointer each time.
+ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress);
+ if( (LogicalAddress & 0xff) == 0)
+ {//Not used logical address pointer
+ BlkNum = i-EFUSE_USAGE_MAP_START;
+ break;
+ }
+ else if(( (LogicalAddress >> 8) & 0xff) == 0)
+ {//Not used logical address pointer
+ if (i != EFUSE_USAGE_MAP_END)
+ {
+ BlkNum = i-EFUSE_USAGE_MAP_START+1;
+ }
+ break;
+ }
+ }
+ }
+ else
+ {
+ bAllocateNewBlk=FALSE;
+ BlkNum = EFSROM_AOUT;
+ }
+
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters BlkNum = %d \n", BlkNum));
+
+ if(BlkNum == 0xffff)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegisters: out of free E-fuse space!!!\n"));
+ return FALSE;
+ }
+ //Step 1.1.0
+ //If the block is not existing in mapping table, create one
+ //and write down the 16-bytes data to the new block
+ if(bAllocateNewBlk)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk\n"));
+ efuseDataOffset = EFUSE_DATA3;
+ for(i=0; i< 4; i++)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("Allocate New Blk, Data%d=%04x%04x\n",3-i,pData[2*i+1],pData[2*i]));
+ tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i];
+
+
+ RTMP_IO_WRITE32(pAd, efuseDataOffset,tempbuffer);
+ efuseDataOffset -= 4;
+
+ }
+ /////////////////////////////////////////////////////////////////
+
+ //Step1.1.1. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment.
+ eFuseCtrlStruc.field.EFSROM_AIN = BlkNum* 0x10 ;
+
+ //Step1.1.2. Write EFSROM_MODE (0x580, bit7:bit6) to 3.
+ eFuseCtrlStruc.field.EFSROM_MODE = 3;
+
+ //Step1.1.3. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical write procedure.
+ eFuseCtrlStruc.field.EFSROM_KICK = 1;
+
+ NdisMoveMemory(&data, &eFuseCtrlStruc, 4);
+
+ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data);
+
+ //Step1.1.4. Polling EFSROM_KICK(0x580, bit30) until it become 0 again. It��s done.
+ i = 0;
+ while(i < 100)
+ {
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+
+ if(eFuseCtrlStruc.field.EFSROM_KICK == 0)
+ break;
+
+ RTMPusecDelay(2);
+ i++;
+ }
+
+ }
+ else
+ { //Step1.2.
+ //If the same logical number is existing, check if the writting data and the data
+ //saving in this block are the same.
+ /////////////////////////////////////////////////////////////////
+ //read current values of 16-byte block
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+
+ //Step1.2.0. Write 10-bit of address to EFSROM_AIN (0x580, bit25:bit16). The address must be 16-byte alignment.
+ eFuseCtrlStruc.field.EFSROM_AIN = Offset & 0xfff0;
+
+ //Step1.2.1. Write EFSROM_MODE (0x580, bit7:bit6) to 1.
+ eFuseCtrlStruc.field.EFSROM_MODE = 0;
+
+ //Step1.2.2. Write EFSROM_KICK (0x580, bit30) to 1 to kick-off physical read procedure.
+ eFuseCtrlStruc.field.EFSROM_KICK = 1;
+
+ NdisMoveMemory(&data, &eFuseCtrlStruc, 4);
+ RTMP_IO_WRITE32(pAd, EFUSE_CTRL, data);
+
+ //Step1.2.3. Polling EFSROM_KICK(0x580, bit30) until it become 0 again.
+ i = 0;
+ while(i < 100)
+ {
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, (PUINT32) &eFuseCtrlStruc);
+
+ if(eFuseCtrlStruc.field.EFSROM_KICK == 0)
+ break;
+ RTMPusecDelay(2);
+ i++;
+ }
+
+ //Step1.2.4. Read 16-byte of data from EFUSE_DATA0-3 (0x59C-0x590)
+ efuseDataOffset = EFUSE_DATA3;
+ for(i=0; i< 4; i++)
+ {
+ RTMP_IO_READ32(pAd, efuseDataOffset, (PUINT32) &buffer[i]);
+ efuseDataOffset -= 4;
+ }
+ //Step1.2.5. Check if the data of efuse and the writing data are the same.
+ for(i =0; i<4; i++)
+ {
+ tempbuffer=((pData[2*i+1]<<16)&0xffff0000)|pData[2*i];
+ DBGPRINT(RT_DEBUG_TRACE, ("buffer[%d]=%x,pData[%d]=%x,pData[%d]=%x,tempbuffer=%x\n",i,buffer[i],2*i,pData[2*i],2*i+1,pData[2*i+1],tempbuffer));
+
+ if(((buffer[i]&0xffff0000)==(pData[2*i+1]<<16))&&((buffer[i]&0xffff)==pData[2*i]))
+ bNotWrite&=TRUE;
+ else
+ {
+ bNotWrite&=FALSE;
+ break;
+ }
+ }
+ if(!bNotWrite)
+ {
+ printk("The data is not the same\n");
+
+ for(i =0; i<8; i++)
+ {
+ addr = BlkNum * 0x10 ;
+
+ InBuf[0] = addr+2*i;
+ InBuf[1] = 2;
+ InBuf[2] = pData[i];
+
+ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 2);
+ }
+
+ }
+ else
+ return TRUE;
+ }
+
+
+
+ //Step 2. Write mapping table
+ addr = EFUSE_USAGE_MAP_START+BlkNum;
+
+ tmpaddr = addr;
+
+ if(addr % 2 != 0)
+ addr = addr -1;
+ InBuf[0] = addr;
+ InBuf[1] = 2;
+
+ //convert the address from 10 to 8 bit ( bit7, 6 = parity and bit5 ~ 0 = bit9~4), and write to logical map entry
+ tmpOffset = Offset;
+ tmpOffset >>= 4;
+ tmpOffset |= ((~((tmpOffset & 0x01) ^ ( tmpOffset >> 1 & 0x01) ^ (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01))) << 6) & 0x40;
+ tmpOffset |= ((~( (tmpOffset >> 2 & 0x01) ^ (tmpOffset >> 3 & 0x01) ^ (tmpOffset >> 4 & 0x01) ^ ( tmpOffset >> 5 & 0x01))) << 7) & 0x80;
+
+ // write the logical address
+ if(tmpaddr%2 != 0)
+ InBuf[2] = tmpOffset<<8;
+ else
+ InBuf[2] = tmpOffset;
+
+ eFuseWritePhysical(pAd,&InBuf[0], 6, NULL, 0);
+
+ //Step 3. Compare data if not the same, invalidate the mapping entry, then re-write the data until E-fuse is exhausted
+ bWriteSuccess = TRUE;
+ for(i =0; i<8; i++)
+ {
+ addr = BlkNum * 0x10 ;
+
+ InBuf[0] = addr+2*i;
+ InBuf[1] = 2;
+ InBuf[2] = 0x0;
+
+ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
+ DBGPRINT(RT_DEBUG_TRACE, ("addr=%x, buffer[i]=%x,InBuf[2]=%x\n",InBuf[0],pData[i],InBuf[2]));
+ if(pData[i] != InBuf[2])
+ {
+ bWriteSuccess = FALSE;
+ break;
+ }
+ }
+
+ //Step 4. invlidate mapping entry and find a free mapping entry if not succeed
+
+ if (!bWriteSuccess&&Loop<2)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess BlkNum = %d\n", BlkNum));
+
+ // the offset of current mapping entry
+ addr = EFUSE_USAGE_MAP_START+BlkNum;
+
+ //find a new mapping entry
+ BlkNum = 0xffff;
+ for (i=EFUSE_USAGE_MAP_START; i<=EFUSE_USAGE_MAP_END; i+=2)
+ {
+ eFusePhysicalReadRegisters(pAd, i, 2, &LogicalAddress);
+ if( (LogicalAddress & 0xff) == 0)
+ {
+ BlkNum = i-EFUSE_USAGE_MAP_START;
+ break;
+ }
+ else if(( (LogicalAddress >> 8) & 0xff) == 0)
+ {
+ if (i != EFUSE_USAGE_MAP_END)
+ {
+ BlkNum = i+1-EFUSE_USAGE_MAP_START;
+ }
+ break;
+ }
+ }
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin::Not bWriteSuccess new BlkNum = %d\n", BlkNum));
+ if(BlkNum == 0xffff)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("eFuseWriteRegistersFromBin: out of free E-fuse space!!!\n"));
+ return FALSE;
+ }
+
+ //invalidate the original mapping entry if new entry is not found
+ tmpaddr = addr;
+
+ if(addr % 2 != 0)
+ addr = addr -1;
+ InBuf[0] = addr;
+ InBuf[1] = 2;
+
+ eFuseReadPhysical(pAd, &InBuf[0], 4, &InBuf[2], 2);
+
+ // write the logical address
+ if(tmpaddr%2 != 0)
+ {
+ // Invalidate the high byte
+ for (i=8; i<15; i++)
+ {
+ if( ( (InBuf[2] >> i) & 0x01) == 0)
+ {
+ InBuf[2] |= (0x1 <<i);
+ break;
+ }
+ }
+ }
+ else
+ {
+ // invalidate the low byte
+ for (i=0; i<8; i++)
+ {
+ if( ( (InBuf[2] >> i) & 0x01) == 0)
+ {
+ InBuf[2] |= (0x1 <<i);
+ break;
+ }
+ }
+ }
+ eFuseWritePhysical(pAd, &InBuf[0], 6, NULL, 0);
+ }
+
+ }
+ while(!bWriteSuccess&&Loop<2);
+
+ return TRUE;
}
+#endif // RT30xx //
+//2008/09/11:KH add to support efuse-->
diff --git a/drivers/staging/rt2860/common/md5.c b/drivers/staging/rt2860/common/md5.c
index 774776b4b8c3..ad883ca2ffc8 100644
--- a/drivers/staging/rt2860/common/md5.c
+++ b/drivers/staging/rt2860/common/md5.c
@@ -131,19 +131,7 @@ void hmac_md5(u8 *key, size_t key_len, u8 *data, size_t data_len, u8 *mac)
MD5Final(mac, &context); /* finish up 2nd pass */
}
-#ifndef RT_BIG_ENDIAN
#define byteReverse(buf, len) /* Nothing */
-#else
-void byteReverse(unsigned char *buf, unsigned longs);
-void byteReverse(unsigned char *buf, unsigned longs)
-{
- do {
- *(UINT32 *)buf = SWAP32(*(UINT32 *)buf);
- buf += 4;
- } while (--longs);
-}
-#endif
-
/* ========================== MD5 implementation =========================== */
// four base functions for MD5
diff --git a/drivers/staging/rt2860/common/mlme.c b/drivers/staging/rt2860/common/mlme.c
index 2edf2999f5c8..bb6fccbdca41 100644
--- a/drivers/staging/rt2860/common/mlme.c
+++ b/drivers/staging/rt2860/common/mlme.c
@@ -50,11 +50,7 @@ UCHAR Ccx2QosInfo[] = {0x00, 0x40, 0x96, 0x04};
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[] = {
// 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)
@@ -130,7 +126,6 @@ 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
@@ -287,7 +282,6 @@ UCHAR RateSwitchTable11BGN3SForABand[] = { // 3*3
0x0a, 0x20, 23, 8, 25,
0x0b, 0x22, 23, 8, 25,
};
-#endif // DOT11_N_SUPPORT //
PUCHAR ReasonString[] = {
/* 0 */ "Reserved",
@@ -334,14 +328,9 @@ 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;
@@ -349,6 +338,9 @@ UCHAR WpaIe = IE_WPA;
UCHAR Wpa2Ie = IE_WPA2;
UCHAR IbssIe = IE_IBSS_PARM;
UCHAR Ccx2Ie = IE_CCX_V2;
+#ifdef RT2870
+UCHAR WapiIe = IE_WAPI;
+#endif
extern UCHAR WPA_OUI[];
@@ -457,7 +449,13 @@ FREQUENCY_ITEM FreqItems3020[] =
{13, 247, 2, 2},
{14, 248, 2, 4},
};
+#ifndef RT30xx
#define NUM_OF_3020_CHNL (sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM))
+#endif
+#ifdef RT30xx
+//2008/07/10:KH Modified to share this variable
+UCHAR NUM_OF_3020_CHNL=(sizeof(FreqItems3020) / sizeof(FREQUENCY_ITEM));
+#endif
/*
==========================================================================
@@ -488,8 +486,6 @@ NDIS_STATUS MlmeInit(
pAd->Mlme.bRunning = FALSE;
NdisAllocateSpinLock(&pAd->Mlme.TaskLock);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
BssTableInit(&pAd->ScanTab);
@@ -501,18 +497,10 @@ NDIS_STATUS MlmeInit(
WpaPskStateMachineInit(pAd, &pAd->Mlme.WpaPskMachine, pAd->Mlme.WpaPskFunc);
AironetStateMachineInit(pAd, &pAd->Mlme.AironetMachine, pAd->Mlme.AironetFunc);
-#ifdef QOS_DLS_SUPPORT
- 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);
@@ -525,9 +513,7 @@ NDIS_STATUS MlmeInit(
// software-based RX Antenna diversity
RTMPInitTimer(pAd, &pAd->Mlme.RxAntEvalTimer, GET_TIMER_FUNCTION(AsicRxAntEvalTimeout), pAd, FALSE);
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+#ifdef RT2860
{
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
{
@@ -536,8 +522,7 @@ NDIS_STATUS MlmeInit(
RTMPInitTimer(pAd, &pAd->Mlme.RadioOnOffTimer, GET_TIMER_FUNCTION(RadioOnExec), pAd, FALSE);
}
}
-#endif // CONFIG_STA_SUPPORT //
-
+#endif
} while (FALSE);
DBGPRINT(RT_DEBUG_TRACE, ("<-- MLME Initialize\n"));
@@ -563,9 +548,6 @@ VOID MlmeHandler(
IN PRTMP_ADAPTER pAd)
{
MLME_QUEUE_ELEM *Elem = NULL;
-#ifdef APCLI_SUPPORT
- SHORT apcliIfIndex;
-#endif
// Only accept MLME and Frame from peer side, no other (control/data) frame should
// get into this state machine
@@ -592,23 +574,24 @@ VOID MlmeHandler(
break;
}
-#ifdef RALINK_ATE
- if(ATE_ON(pAd))
- {
- DBGPRINT(RT_DEBUG_TRACE, ("The driver is in ATE mode now in MlmeHandler\n"));
- break;
- }
-#endif // RALINK_ATE //
-
//From message type, determine which state machine I should drive
if (MlmeDequeue(&pAd->Mlme.Queue, &Elem))
{
+#ifdef RT2870
+ if (Elem->MsgType == MT2_RESET_CONF)
+ {
+ DBGPRINT_RAW(RT_DEBUG_TRACE, ("!!! reset MLME state machine !!!\n"));
+ MlmeRestartStateMachine(pAd);
+ Elem->Occupied = FALSE;
+ Elem->MsgLen = 0;
+ continue;
+ }
+#endif // RT2870 //
// if dequeue success
switch (Elem->Machine)
{
// STA state machines
-#ifdef CONFIG_STA_SUPPORT
case ASSOC_STATE_MACHINE:
StateMachinePerformAction(pAd, &pAd->Mlme.AssocMachine, Elem);
break;
@@ -627,22 +610,9 @@ VOID MlmeHandler(
case WPA_PSK_STATE_MACHINE:
StateMachinePerformAction(pAd, &pAd->Mlme.WpaPskMachine, Elem);
break;
-#ifdef LEAP_SUPPORT
- case LEAP_STATE_MACHINE:
- LeapMachinePerformAction(pAd, &pAd->Mlme.LeapMachine, Elem);
- break;
-#endif
case AIRONET_STATE_MACHINE:
StateMachinePerformAction(pAd, &pAd->Mlme.AironetMachine, Elem);
break;
-
-#ifdef QOS_DLS_SUPPORT
- case DLS_STATE_MACHINE:
- StateMachinePerformAction(pAd, &pAd->Mlme.DlsMachine, Elem);
- break;
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
-
case ACTION_STATE_MACHINE:
StateMachinePerformAction(pAd, &pAd->Mlme.ActMachine, Elem);
break;
@@ -687,6 +657,9 @@ VOID MlmeHalt(
IN PRTMP_ADAPTER pAd)
{
BOOLEAN Cancelled;
+#ifdef RT3070
+ UINT32 TxPinCfg = 0x00050F0F;
+#endif // RT3070 //
DBGPRINT(RT_DEBUG_TRACE, ("==> MlmeHalt\n"));
@@ -696,12 +669,7 @@ VOID MlmeHalt(
AsicDisableSync(pAd);
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
-#ifdef QOS_DLS_SUPPORT
- UCHAR i;
-#endif // QOS_DLS_SUPPORT //
// Cancel pending timers
RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled);
RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled);
@@ -709,20 +677,14 @@ VOID MlmeHalt(
RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled);
RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled);
RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled);
+#ifdef RT2860
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
{
RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled);
RTMPCancelTimer(&pAd->Mlme.RadioOnOffTimer, &Cancelled);
}
-
-#ifdef QOS_DLS_SUPPORT
- for (i=0; i<MAX_NUM_OF_DLS_ENTRY; i++)
- {
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &Cancelled);
- }
-#endif // QOS_DLS_SUPPORT //
+#endif
}
-#endif // CONFIG_STA_SUPPORT //
RTMPCancelTimer(&pAd->Mlme.PeriodicTimer, &Cancelled);
RTMPCancelTimer(&pAd->Mlme.RxAntEvalTimer, &Cancelled);
@@ -734,6 +696,27 @@ VOID MlmeHalt(
// Set LED
RTMPSetLED(pAd, LED_HALT);
RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, firmware is not done it.
+#ifdef RT2870
+ {
+ LED_CFG_STRUC LedCfg;
+ RTMP_IO_READ32(pAd, LED_CFG, &LedCfg.word);
+ LedCfg.field.LedPolar = 0;
+ LedCfg.field.RLedMode = 0;
+ LedCfg.field.GLedMode = 0;
+ LedCfg.field.YLedMode = 0;
+ RTMP_IO_WRITE32(pAd, LED_CFG, LedCfg.word);
+ }
+#endif // RT2870 //
+#ifdef RT3070
+ //
+ // Turn off LNA_PE
+ //
+ if (IS_RT3070(pAd) || IS_RT3071(pAd))
+ {
+ TxPinCfg &= 0xFFFFF0F0;
+ RTUSBWriteMACRegister(pAd, TX_PIN_CFG, TxPinCfg);
+ }
+#endif // RT3070 //
}
RTMPusecDelay(5000); // 5 msec to gurantee Ant Diversity timer canceled
@@ -804,6 +787,7 @@ VOID MlmePeriodicExec(
ULONG TxTotalCnt;
PRTMP_ADAPTER pAd = (RTMP_ADAPTER *)FunctionContext;
+#ifdef RT2860
//Baron 2008/07/10
//printk("Baron_Test:\t%s", RTMPGetRalinkEncryModeStr(pAd->StaCfg.WepStatus));
//If the STA security setting is OPEN or WEP, pAd->StaCfg.WpaSupplicantUP = 0.
@@ -817,8 +801,6 @@ VOID MlmePeriodicExec(
pAd->StaCfg.WpaSupplicantUP = 1;
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// If Hardware controlled Radio enabled, we have to check GPIO pin2 every 2 second.
// Move code to here, because following code will return when radio is off
@@ -858,7 +840,7 @@ VOID MlmePeriodicExec(
}
}
}
-#endif // CONFIG_STA_SUPPORT //
+#endif /* RT2860 */
// Do nothing if the driver is starting halt state.
// This might happen when timer already been fired before cancel timer with mlmehalt
@@ -868,7 +850,7 @@ VOID MlmePeriodicExec(
fRTMP_ADAPTER_RESET_IN_PROGRESS))))
return;
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+#ifdef RT2860
{
if ((pAd->RalinkCounters.LastReceivedByteCount == pAd->RalinkCounters.ReceivedByteCount) && (pAd->StaCfg.bRadio == TRUE))
{
@@ -906,23 +888,9 @@ VOID MlmePeriodicExec(
AsicResetFromDMABusy(pAd);
}
}
-
+#endif /* RT2860 */
RT28XX_MLME_PRE_SANITY_CHECK(pAd);
-#ifdef RALINK_ATE
- /* Do not show RSSI until "Normal 1 second Mlme PeriodicExec". */
- if (ATE_ON(pAd))
- {
- if (pAd->Mlme.PeriodicRound % MLME_TASK_EXEC_MULTIPLE != (MLME_TASK_EXEC_MULTIPLE - 1))
- {
- pAd->Mlme.PeriodicRound ++;
- return;
- }
- }
-#endif // RALINK_ATE //
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// Do nothing if monitor mode is on
if (MONITOR_ON(pAd))
@@ -947,26 +915,26 @@ VOID MlmePeriodicExec(
}
}
}
-#endif // CONFIG_STA_SUPPORT //
pAd->bUpdateBcnCntDone = FALSE;
// RECBATimerTimeout(SystemSpecific1,FunctionContext,SystemSpecific2,SystemSpecific3);
pAd->Mlme.PeriodicRound ++;
+#ifdef RT3070
+ // execute every 100ms, update the Tx FIFO Cnt for update Tx Rate.
+ NICUpdateFifoStaCounters(pAd);
+#endif // RT3070 //
// execute every 500ms
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)
)
&& (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)))
MlmeDynamicTxRateSwitching(pAd);
}
-#endif // CONFIG_STA_SUPPORT //
}
// Normal 1 second Mlme PeriodicExec.
@@ -974,30 +942,6 @@ VOID MlmePeriodicExec(
{
pAd->Mlme.OneSecPeriodicRound ++;
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- {
- /* request from Baron : move this routine from later to here */
- /* for showing Rx error count in ATE RXFRAME */
- NICUpdateRawCounters(pAd);
- if (pAd->ate.bRxFer == 1)
- {
- pAd->ate.RxTotalCnt += pAd->ate.RxCntPerSec;
- ate_print(KERN_EMERG "MlmePeriodicExec: Rx packet cnt = %d/%d\n", pAd->ate.RxCntPerSec, pAd->ate.RxTotalCnt);
- pAd->ate.RxCntPerSec = 0;
-
- if (pAd->ate.RxAntennaSel == 0)
- ate_print(KERN_EMERG "MlmePeriodicExec: Rx AvgRssi0=%d, AvgRssi1=%d, AvgRssi2=%d\n\n",
- pAd->ate.AvgRssi0, pAd->ate.AvgRssi1, pAd->ate.AvgRssi2);
- else
- ate_print(KERN_EMERG "MlmePeriodicExec: Rx AvgRssi=%d\n\n", pAd->ate.AvgRssi0);
- }
- MlmeResetRalinkCounters(pAd);
- return;
- }
-#endif // RALINK_ATE //
-
-
if (rx_Total)
{
@@ -1029,12 +973,12 @@ VOID MlmePeriodicExec(
// the dynamic tuning mechanism below are based on most up-to-date information
NICUpdateRawCounters(pAd);
+#ifdef RT2870
+ RT2870_WatchDog(pAd);
+#endif // RT2870 //
-#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)
@@ -1043,6 +987,7 @@ VOID MlmePeriodicExec(
pAd->RalinkCounters.OneSecTxRetryOkCount +
pAd->RalinkCounters.OneSecTxFailCount;
+ // dynamic adjust antenna evaluation period according to the traffic
if (TxTotalCnt > 50)
{
if (pAd->Mlme.OneSecPeriodicRound % 10 == 0)
@@ -1059,17 +1004,14 @@ VOID MlmePeriodicExec(
}
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- STAMlmePeriodicExec(pAd);
-#endif // CONFIG_STA_SUPPORT //
+ STAMlmePeriodicExec(pAd);
MlmeResetRalinkCounters(pAd);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
+#ifdef RT2860
if (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST) && (pAd->bPCIclkOff == FALSE))
+#endif
{
// When Adhoc beacon is enabled and RTS/CTS is enabled, there is a chance that hardware MAC FSM will run into a deadlock
// and sending CTS-to-self over and over.
@@ -1091,41 +1033,32 @@ VOID MlmePeriodicExec(
}
}
}
-#endif // CONFIG_STA_SUPPORT //
RT28XX_MLME_HANDLER(pAd);
}
-
pAd->bUpdateBcnCntDone = FALSE;
}
-#ifdef CONFIG_STA_SUPPORT
VOID STAMlmePeriodicExec(
PRTMP_ADAPTER pAd)
{
+#ifdef RT2860
ULONG TxTotalCnt;
+#endif
+#ifdef RT2870
+ ULONG TxTotalCnt;
+ int i;
+#endif
-//
-// We return here in ATE mode, because the statistics
-// that ATE needs are not collected via this routine.
-//
-#ifdef RALINK_ATE
- // It is supposed that we will never reach here in ATE mode.
- ASSERT(!(ATE_ON(pAd)));
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
-#ifdef WPA_SUPPLICANT_SUPPORT
if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE)
-#endif // WPA_SUPPLICANT_SUPPORT //
{
// WPA MIC error should block association attempt for 60 seconds
if (pAd->StaCfg.bBlockAssoc && (pAd->StaCfg.LastMicErrorTime + (60 * OS_HZ) < pAd->Mlme.Now32))
pAd->StaCfg.bBlockAssoc = FALSE;
}
+#ifdef RT2860
//Baron 2008/07/10
//printk("Baron_Test:\t%s", RTMPGetRalinkEncryModeStr(pAd->StaCfg.WepStatus));
//If the STA security setting is OPEN or WEP, pAd->StaCfg.WpaSupplicantUP = 0.
@@ -1138,6 +1071,7 @@ VOID STAMlmePeriodicExec(
{
pAd->StaCfg.WpaSupplicantUP = 1;
}
+#endif
if ((pAd->PreMediaState != pAd->IndicateMediaState) && (pAd->CommonCfg.bWirelessEvent))
{
@@ -1148,6 +1082,7 @@ VOID STAMlmePeriodicExec(
pAd->PreMediaState = pAd->IndicateMediaState;
}
+#ifdef RT2860
if ((pAd->OpMode == OPMODE_STA) && (IDLE_ON(pAd)) &&
(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) &&
(pAd->Mlme.SyncMachine.CurrState == SYNC_IDLE) &&
@@ -1157,6 +1092,7 @@ VOID STAMlmePeriodicExec(
{
RT28xxPciAsicRadioOff(pAd, GUI_IDLE_POWER_SAVE, 0);
}
+#endif
@@ -1179,11 +1115,6 @@ VOID STAMlmePeriodicExec(
if (INFRA_ON(pAd))
{
-#ifdef QOS_DLS_SUPPORT
- // Check DLS time out, then tear down those session
- RTMPCheckDLSTimeOut(pAd);
-#endif // QOS_DLS_SUPPORT //
-
// Is PSM bit consistent with user power management policy?
// This is the only place that will set PSM bit ON.
if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
@@ -1228,26 +1159,11 @@ VOID STAMlmePeriodicExec(
// Lost AP, send disconnect & link down event
LinkDown(pAd, FALSE);
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP)
- {
- union iwreq_data wrqu;
- //send disassociate event to wpa_supplicant
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.flags = RT_DISASSOC_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;
memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
MlmeAutoReconnectLastSSID(pAd);
}
@@ -1273,6 +1189,7 @@ VOID STAMlmePeriodicExec(
}
else if (ADHOC_ON(pAd))
{
+#ifdef RT2860
// 2003-04-17 john. this is a patch that driver forces a BEACON out if ASIC fails
// the "TX BEACON competition" for the entire past 1 sec.
// So that even when ASIC's BEACONgen engine been blocked
@@ -1297,7 +1214,6 @@ VOID STAMlmePeriodicExec(
pAd->StaCfg.AdhocBOnlyJoined = FALSE;
}
-#ifdef DOT11_N_SUPPORT
if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
{
if ((pAd->StaCfg.AdhocBGJoined) &&
@@ -1314,7 +1230,7 @@ VOID STAMlmePeriodicExec(
pAd->StaCfg.Adhoc20NJoined = FALSE;
}
}
-#endif // DOT11_N_SUPPORT //
+#endif /* RT2860 */
//radar detect
if ((pAd->CommonCfg.Channel > 14)
@@ -1339,6 +1255,19 @@ VOID STAMlmePeriodicExec(
MlmeEnqueue(pAd, SYNC_STATE_MACHINE, MT2_MLME_START_REQ, sizeof(MLME_START_REQ_STRUCT), &StartReq);
pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_START;
}
+
+#ifdef RT2870
+ for (i = 1; i < MAX_LEN_OF_MAC_TABLE; i++)
+ {
+ MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[i];
+
+ if (pEntry->ValidAsCLI == FALSE)
+ continue;
+
+ if (pEntry->LastBeaconRxTime + ADHOC_BEACON_LOST_TIME < pAd->Mlme.Now32)
+ MacTableDeleteEntry(pAd, pEntry->Aid, pEntry->Addr);
+ }
+#endif
}
else // no INFRA nor ADHOC connection
{
@@ -1378,14 +1307,6 @@ VOID STAMlmePeriodicExec(
}
else
{
-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
- if (pAd->CommonCfg.CarrierDetect.Enable == TRUE)
- {
- if ((pAd->Mlme.OneSecPeriodicRound % 5) == 1)
- MlmeAutoReconnectLastSSID(pAd);
- }
- else
-#endif // CARRIER_DETECTION_SUPPORT //
MlmeAutoReconnectLastSSID(pAd);
}
}
@@ -1394,7 +1315,6 @@ VOID STAMlmePeriodicExec(
SKIP_AUTO_SCAN_CONN:
-#ifdef DOT11_N_SUPPORT
if ((pAd->MacTab.Content[BSSID_WCID].TXBAbitmap !=0) && (pAd->MacTab.fAnyBASession == FALSE))
{
pAd->MacTab.fAnyBASession = TRUE;
@@ -1405,15 +1325,6 @@ 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;
}
@@ -1473,7 +1384,6 @@ VOID MlmeAutoReconnectLastSSID(
RT28XX_MLME_HANDLER(pAd);
}
}
-#endif // CONFIG_STA_SUPPORT //
/*
==========================================================================
@@ -1522,15 +1432,19 @@ VOID MlmeSelectTxRateTable(
break;
}
-#ifdef CONFIG_STA_SUPPORT
if ((pAd->OpMode == OPMODE_STA) && ADHOC_ON(pAd))
{
-#ifdef DOT11_N_SUPPORT
if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) &&
+#ifdef RT2860
!pAd->StaCfg.AdhocBOnlyJoined &&
!pAd->StaCfg.AdhocBGJoined &&
(pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) &&
((pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1)))
+#endif
+#ifdef RT2870
+ (pEntry->HTCapability.MCSSet[0] == 0xff) &&
+ ((pEntry->HTCapability.MCSSet[1] == 0x00) || (pAd->Antenna.field.TxPath == 1)))
+#endif
{// 11N 1S Adhoc
*ppTable = RateSwitchTable11N1S;
*pTableSize = RateSwitchTable11N1S[0];
@@ -1538,10 +1452,16 @@ VOID MlmeSelectTxRateTable(
}
else if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED) &&
+#ifdef RT2860
!pAd->StaCfg.AdhocBOnlyJoined &&
!pAd->StaCfg.AdhocBGJoined &&
(pAd->StaActive.SupportedPhyInfo.MCSSet[0] == 0xff) &&
(pAd->StaActive.SupportedPhyInfo.MCSSet[1] == 0xff) &&
+#endif
+#ifdef RT2870
+ (pEntry->HTCapability.MCSSet[0] == 0xff) &&
+ (pEntry->HTCapability.MCSSet[1] == 0xff) &&
+#endif
(pAd->Antenna.field.TxPath == 2))
{// 11N 2S Adhoc
if (pAd->LatchRfRegs.Channel <= 14)
@@ -1559,7 +1479,7 @@ VOID MlmeSelectTxRateTable(
}
else
-#endif // DOT11_N_SUPPORT //
+#ifdef RT2860
if (pAd->CommonCfg.PhyMode == PHY_11B)
{
*ppTable = RateSwitchTable11B;
@@ -1568,6 +1488,12 @@ VOID MlmeSelectTxRateTable(
}
else if((pAd->LatchRfRegs.Channel <= 14) && (pAd->StaCfg.AdhocBOnlyJoined == TRUE))
+#endif
+#ifdef RT2870
+ if ((pEntry->RateLen == 4)
+ && (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)
+ )
+#endif
{
// USe B Table when Only b-only Station in my IBSS .
*ppTable = RateSwitchTable11B;
@@ -1591,9 +1517,7 @@ VOID MlmeSelectTxRateTable(
}
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
@@ -1650,12 +1574,13 @@ VOID MlmeSelectTxRateTable(
break;
}
-#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
+#ifndef RT30xx
+//Iverson mark for Adhoc b mode,sta will use rate 54 Mbps when connect with sta b/g/n mode
&& (pEntry->HTCapability.MCSSet[0] == 0) && (pEntry->HTCapability.MCSSet[1] == 0)
-#endif // DOT11_N_SUPPORT //
+#endif
)
{// B only AP
*ppTable = RateSwitchTable11B;
@@ -1667,9 +1592,7 @@ VOID MlmeSelectTxRateTable(
//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;
@@ -1681,9 +1604,7 @@ VOID MlmeSelectTxRateTable(
//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;
@@ -1692,16 +1613,10 @@ VOID MlmeSelectTxRateTable(
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))
-#endif // DOT11_N_SUPPORT //
{ // Legacy mode
if (pAd->CommonCfg.MaxTxRate <= RATE_11)
{
@@ -1724,7 +1639,7 @@ VOID MlmeSelectTxRateTable(
}
break;
}
-#ifdef DOT11_N_SUPPORT
+
if (pAd->LatchRfRegs.Channel <= 14)
{
if (pAd->CommonCfg.TxStream == 1)
@@ -1759,15 +1674,13 @@ 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]));
}
-#endif // CONFIG_STA_SUPPORT //
} while(FALSE);
}
-#ifdef CONFIG_STA_SUPPORT
/*
==========================================================================
Description:
@@ -1921,14 +1834,6 @@ VOID MlmeCalculateChannelQuality(
CHAR MaxRssi;
ULONG BeaconLostTime = BEACON_LOST_TIME;
-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
- // longer beacon lost time when carrier detection enabled
- if (pAd->CommonCfg.CarrierDetect.Enable == TRUE)
- {
- BeaconLostTime = BEACON_LOST_TIME + BEACON_LOST_TIME/2;
- }
-#endif // CARRIER_DETECTION_SUPPORT //
-
MaxRssi = RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2);
//
@@ -1993,13 +1898,11 @@ VOID MlmeSetTxRate(
{
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)
@@ -2029,14 +1932,11 @@ VOID MlmeSetTxRate(
if (pTxRate->Mode <= MaxMode)
pAd->StaCfg.HTPhyMode.field.MODE = pTxRate->Mode;
-#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)
{
@@ -2080,17 +1980,15 @@ 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;
-#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);
@@ -2130,18 +2028,6 @@ VOID MlmeDynamicTxRateSwitching(
ULONG TxRetransmit = 0, TxSuccess = 0, TxFailCount = 0;
MAC_TABLE_ENTRY *pEntry;
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- {
- return;
- }
-#endif // RALINK_ATE //
-
- /*if (pAd->Antenna.field.RxPath > 1)
- Rssi = (pAd->StaCfg.RssiSample.AvgRssi0 + pAd->StaCfg.RssiSample.AvgRssi1) >> 1;
- else
- Rssi = pAd->StaCfg.RssiSample.AvgRssi0;*/
-
//
// walk through MAC table, see if need to change AP's TX rate toward each entry
//
@@ -2155,7 +2041,15 @@ VOID MlmeDynamicTxRateSwitching(
if ((pAd->MacTab.Size == 1) || (pEntry->ValidAsDls))
{
+#ifdef RT2860
Rssi = RTMPMaxRssi(pAd, (CHAR)pAd->StaCfg.RssiSample.AvgRssi0, (CHAR)pAd->StaCfg.RssiSample.AvgRssi1, (CHAR)pAd->StaCfg.RssiSample.AvgRssi2);
+#endif
+#ifdef RT2870
+ Rssi = RTMPMaxRssi(pAd,
+ pAd->StaCfg.RssiSample.AvgRssi0,
+ pAd->StaCfg.RssiSample.AvgRssi1,
+ pAd->StaCfg.RssiSample.AvgRssi2);
+#endif
// Update statistic counter
RTMP_IO_READ32(pAd, TX_STA_CNT0, &TxStaCnt0.word);
@@ -2185,7 +2079,21 @@ VOID MlmeDynamicTxRateSwitching(
}
else
{
+#ifdef RT2860
Rssi = RTMPMaxRssi(pAd, (CHAR)pEntry->RssiSample.AvgRssi0, (CHAR)pEntry->RssiSample.AvgRssi1, (CHAR)pEntry->RssiSample.AvgRssi2);
+#endif
+#ifdef RT2870
+ if (INFRA_ON(pAd) && (i == 1))
+ Rssi = RTMPMaxRssi(pAd,
+ pAd->StaCfg.RssiSample.AvgRssi0,
+ pAd->StaCfg.RssiSample.AvgRssi1,
+ pAd->StaCfg.RssiSample.AvgRssi2);
+ else
+ Rssi = RTMPMaxRssi(pAd,
+ pEntry->RssiSample.AvgRssi0,
+ pEntry->RssiSample.AvgRssi1,
+ pEntry->RssiSample.AvgRssi2);
+#endif
TxTotalCnt = pEntry->OneSecTxNoRetryOkCount +
pEntry->OneSecTxRetryOkCount +
@@ -2242,14 +2150,12 @@ 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;
@@ -2327,7 +2233,6 @@ VOID MlmeDynamicTxRateSwitching(
{
MCS14 = idx;
}
- //else if ((pCurrTxRate->CurrMCS == MCS_15)/* && (pCurrTxRate->ShortGI == GI_800)*/) //we hope to use ShortGI as initial rate
else if ((pCurrTxRate->CurrMCS == MCS_15) && (pCurrTxRate->ShortGI == GI_800)) //we hope to use ShortGI as initial rate, however Atheros's chip has bugs when short GI
{
MCS15 = idx;
@@ -2373,7 +2278,7 @@ VOID MlmeDynamicTxRateSwitching(
RssiOffset = 8;
}
}
-#ifdef DOT11_N_SUPPORT
+
/*if (MCS15)*/
if ((pTable == RateSwitchTable11BGN3S) ||
(pTable == RateSwitchTable11N3S) ||
@@ -2439,7 +2344,6 @@ VOID MlmeDynamicTxRateSwitching(
TxRateIdx = MCS0;
}
else
-#endif // DOT11_N_SUPPORT //
{// Legacy mode
if (MCS7 && (Rssi > -70))
TxRateIdx = MCS7;
@@ -2613,7 +2517,12 @@ VOID StaQuickResponeForRateUpExec(
UCHAR UpRateIdx = 0, DownRateIdx = 0, CurrRateIdx = 0;
ULONG TxTotalCnt;
ULONG TxErrorRatio = 0;
+#ifdef RT2860
BOOLEAN bTxRateChanged = TRUE; //, bUpgradeQuality = FALSE;
+#endif
+#ifdef RT2870
+ BOOLEAN bTxRateChanged; //, bUpgradeQuality = FALSE;
+#endif
PRTMP_TX_RATE_SWITCH pCurrTxRate, pNextTxRate = NULL;
PUCHAR pTable;
UCHAR TableSize = 0;
@@ -2638,11 +2547,25 @@ VOID StaQuickResponeForRateUpExec(
if (RTMPCheckEntryEnableAutoRateSwitch(pAd, pEntry) == FALSE)
continue;
+#ifdef RT2860
//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;
else
Rssi = pAd->StaCfg.RssiSample.AvgRssi0;
+#endif
+#ifdef RT2870
+ if (INFRA_ON(pAd) && (i == 1))
+ Rssi = RTMPMaxRssi(pAd,
+ pAd->StaCfg.RssiSample.AvgRssi0,
+ pAd->StaCfg.RssiSample.AvgRssi1,
+ pAd->StaCfg.RssiSample.AvgRssi2);
+ else
+ Rssi = RTMPMaxRssi(pAd,
+ pEntry->RssiSample.AvgRssi0,
+ pEntry->RssiSample.AvgRssi1,
+ pEntry->RssiSample.AvgRssi2);
+#endif
CurrRateIdx = pAd->CommonCfg.TxRateIndex;
@@ -2667,14 +2590,12 @@ 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;
@@ -2784,6 +2705,9 @@ VOID StaQuickResponeForRateUpExec(
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);
+#ifdef RT2870
+ bTxRateChanged = TRUE;
+#endif
}
// if rate-down happen, only clear DownRate's bad history
else if (pAd->CommonCfg.TxRateIndex < CurrRateIdx)
@@ -2793,6 +2717,9 @@ VOID StaQuickResponeForRateUpExec(
pAd->DrsCounters.TxRateUpPenalty = 0; // no penalty
pAd->DrsCounters.TxQuality[pAd->CommonCfg.TxRateIndex] = 0;
pAd->DrsCounters.PER[pAd->CommonCfg.TxRateIndex] = 0;
+#ifdef RT2870
+ bTxRateChanged = TRUE;
+#endif
}
else
{
@@ -2848,7 +2775,13 @@ VOID MlmeCheckPsmChange(
if (INFRA_ON(pAd) &&
(PowerMode != Ndis802_11PowerModeCAM) &&
(pAd->StaCfg.Psm == PWR_ACTIVE) &&
+#ifdef RT2860
RTMP_TEST_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP))
+#endif
+#if !defined(RT2860) && !defined(RT30xx)
+ (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE))
+#endif
+#ifndef RT30xx
{
NdisGetSystemUpTime(&pAd->Mlme.LastSendNULLpsmTime);
pAd->RalinkCounters.RxCountSinceLastNULL = 0;
@@ -2862,6 +2795,42 @@ VOID MlmeCheckPsmChange(
RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE);
}
}
+#endif
+#ifdef RT30xx
+// (! RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
+ (pAd->Mlme.CntlMachine.CurrState == CNTL_IDLE) /*&&
+ (pAd->RalinkCounters.OneSecTxNoRetryOkCount == 0) &&
+ (pAd->RalinkCounters.OneSecTxRetryOkCount == 0)*/)
+ {
+ // add by johnli, use Rx OK data count per second to calculate throughput
+ // If Ttraffic is too high ( > 400 Rx per second), don't go to sleep mode. If tx rate is low, use low criteria
+ // Mode=CCK/MCS=3 => 11 Mbps, Mode=OFDM/MCS=3 => 18 Mbps
+ if (((pAd->StaCfg.HTPhyMode.field.MCS <= 3) &&
+/* Iverson mark
+ (pAd->StaCfg.HTPhyMode.field.MODE <= MODE_OFDM) &&
+*/
+ (pAd->RalinkCounters.OneSecRxOkDataCnt < (ULONG)100)) ||
+ ((pAd->StaCfg.HTPhyMode.field.MCS > 3) &&
+/* Iverson mark
+ (pAd->StaCfg.HTPhyMode.field.MODE > MODE_OFDM) &&
+*/
+ (pAd->RalinkCounters.OneSecRxOkDataCnt < (ULONG)400)))
+ {
+ // Get this time
+ NdisGetSystemUpTime(&pAd->Mlme.LastSendNULLpsmTime);
+ pAd->RalinkCounters.RxCountSinceLastNULL = 0;
+ MlmeSetPsmBit(pAd, PWR_SAVE);
+ if (!(pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable))
+ {
+ RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, FALSE);
+ }
+ else
+ {
+ RTMPSendNullFrame(pAd, pAd->CommonCfg.TxRate, TRUE);
+ }
+ }
+ }
+#endif
}
// IRQL = PASSIVE_LEVEL
@@ -2876,10 +2845,10 @@ VOID MlmeSetPsmBit(
RTMP_IO_READ32(pAd, AUTO_RSP_CFG, &csr4.word);
csr4.field.AckCtsPsmBit = (psm == PWR_SAVE)? 1:0;
RTMP_IO_WRITE32(pAd, AUTO_RSP_CFG, csr4.word);
+#ifndef RT30xx
DBGPRINT(RT_DEBUG_TRACE, ("MlmeSetPsmBit = %d\n", psm));
+#endif
}
-#endif // CONFIG_STA_SUPPORT //
-
// IRQL = DISPATCH_LEVEL
VOID MlmeSetTxPreamble(
@@ -3018,9 +2987,6 @@ VOID MlmeUpdateTxRates(
//===========================================================================
//===========================================================================
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pHtPhy = &pAd->StaCfg.HTPhyMode;
pMaxHtPhy = &pAd->StaCfg.MaxHTPhyMode;
@@ -3036,7 +3002,6 @@ VOID MlmeUpdateTxRates(
MaxDesire = RATE_11;
}
}
-#endif // CONFIG_STA_SUPPORT //
pAd->CommonCfg.MaxDesiredRate = MaxDesire;
pMinHtPhy->word = 0;
@@ -3065,7 +3030,6 @@ VOID MlmeUpdateTxRates(
}
#endif
-#ifdef CONFIG_STA_SUPPORT
if ((ADHOC_ON(pAd) || INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA))
{
pSupRate = &pAd->StaActive.SupRate[0];
@@ -3074,7 +3038,6 @@ VOID MlmeUpdateTxRates(
ExtRateLen = pAd->StaActive.ExtRateLen;
}
else
-#endif // CONFIG_STA_SUPPORT //
{
pSupRate = &pAd->CommonCfg.SupRate[0];
pExtRate = &pAd->CommonCfg.ExtRate[0];
@@ -3151,10 +3114,9 @@ VOID MlmeUpdateTxRates(
if (*auto_rate_cur_p)
{
short dbm = 0;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- dbm = pAd->StaCfg.RssiSample.AvgRssi0 - pAd->BbpRssiToDbmDelta;
-#endif // CONFIG_STA_SUPPORT //
+
+ dbm = pAd->StaCfg.RssiSample.AvgRssi0 - pAd->BbpRssiToDbmDelta;
+
if (bLinkUp == TRUE)
pAd->CommonCfg.TxRate = RATE_24;
else
@@ -3212,9 +3174,7 @@ 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;
@@ -3222,22 +3182,18 @@ VOID MlmeUpdateTxRates(
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_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;
@@ -3280,7 +3236,6 @@ 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:
@@ -3313,8 +3268,6 @@ VOID MlmeUpdateHtTxRates(
auto_rate_cur_p = NULL;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
pDesireHtPhy = &pAd->StaCfg.DesiredHtPhyInfo;
pActiveHtPhy = &pAd->StaCfg.DesiredHtPhyInfo;
@@ -3324,9 +3277,7 @@ VOID MlmeUpdateHtTxRates(
auto_rate_cur_p = &pAd->StaCfg.bAutoTxRateSwitch;
}
-#endif // CONFIG_STA_SUPPORT //
-#ifdef CONFIG_STA_SUPPORT
if ((ADHOC_ON(pAd) || INFRA_ON(pAd)) && (pAd->OpMode == OPMODE_STA))
{
if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE)
@@ -3342,7 +3293,6 @@ VOID MlmeUpdateHtTxRates(
pMaxHtPhy->field.STBC = STBC_NONE;
}
else
-#endif // CONFIG_STA_SUPPORT //
{
if (pDesireHtPhy->bHtEnable == FALSE)
return;
@@ -3393,7 +3343,6 @@ VOID MlmeUpdateHtTxRates(
pMinHtPhy->field.STBC = 0;
pMinHtPhy->field.ShortGI = 0;
//If STA assigns fixed rate. update to fixed here.
-#ifdef CONFIG_STA_SUPPORT
if ( (pAd->OpMode == OPMODE_STA) && (pDesireHtPhy->MCSSet[0] != 0xff))
{
if (pDesireHtPhy->MCSSet[4] != 0)
@@ -3417,8 +3366,6 @@ VOID MlmeUpdateHtTxRates(
break;
}
}
-#endif // CONFIG_STA_SUPPORT //
-
// Decide ht rate
pHtPhy->field.STBC = pMaxHtPhy->field.STBC;
@@ -3438,7 +3385,6 @@ 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(
@@ -3483,7 +3429,6 @@ VOID BssTableInit(
}
}
-#ifdef DOT11_N_SUPPORT
VOID BATableInit(
IN PRTMP_ADAPTER pAd,
IN BA_TABLE *Tab)
@@ -3503,7 +3448,6 @@ 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
@@ -3613,7 +3557,6 @@ VOID BssTableDeleteEntry(
}
}
-#ifdef DOT11_N_SUPPORT
/*
========================================================================
Routine Description:
@@ -3645,7 +3588,6 @@ VOID BATableDeleteORIEntry(
NdisReleaseSpinLock(&pAd->BATabLock);
}
}
-#endif // DOT11_N_SUPPORT //
/*! \brief
* \param
@@ -3762,7 +3704,7 @@ VOID BssEntrySet(
pBss->AddHtInfoLen = 0;
pBss->HtCapabilityLen = 0;
-#ifdef DOT11_N_SUPPORT
+
if (HtCapabilityLen> 0)
{
pBss->HtCapabilityLen = HtCapabilityLen;
@@ -3782,7 +3724,6 @@ VOID BssEntrySet(
}
}
}
-#endif // DOT11_N_SUPPORT //
BssCipherParse(pBss);
@@ -3800,8 +3741,6 @@ VOID BssEntrySet(
else
pBss->QbssLoad.bValid = FALSE;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
PEID_STRUCT pEid;
USHORT Length = 0;
@@ -3809,11 +3748,9 @@ VOID BssEntrySet(
NdisZeroMemory(&pBss->WpaIE.IE[0], MAX_CUSTOM_LEN);
NdisZeroMemory(&pBss->RsnIE.IE[0], MAX_CUSTOM_LEN);
-#ifdef EXT_BUILD_CHANNEL_LIST
- NdisZeroMemory(&pBss->CountryString[0], 3);
- pBss->bHasCountryIE = FALSE;
-#endif // EXT_BUILD_CHANNEL_LIST //
+
pEid = (PEID_STRUCT) pVIE;
+
while ((Length + 2 + (USHORT)pEid->Len) <= LengthVIE)
{
switch(pEid->Eid)
@@ -3842,18 +3779,11 @@ VOID BssEntrySet(
NdisMoveMemory(pBss->RsnIE.IE, pEid, pBss->RsnIE.IELen);
}
break;
-#ifdef EXT_BUILD_CHANNEL_LIST
- case IE_COUNTRY:
- NdisMoveMemory(&pBss->CountryString[0], pEid->Octet, 3);
- pBss->bHasCountryIE = TRUE;
- break;
-#endif // EXT_BUILD_CHANNEL_LIST //
}
Length = Length + 2 + (USHORT)pEid->Len; // Eid[1] + Len[1]+ content[Len]
pEid = (PEID_STRUCT)((UCHAR*)pEid + 2 + pEid->Len);
}
}
-#endif // CONFIG_STA_SUPPORT //
}
/*!
@@ -3947,119 +3877,22 @@ ULONG BssTableSetEntry(
}
else
{
+#ifdef RT30xx
+ /* avoid Hidden SSID form beacon to overwirite correct SSID from probe response */
+ if ((SSID_EQUAL(Ssid, SsidLen, Tab->BssEntry[Idx].Ssid, Tab->BssEntry[Idx].SsidLen)) ||
+ (NdisEqualMemory(Tab->BssEntry[Idx].Ssid, ZeroSsid, Tab->BssEntry[Idx].SsidLen)))
+ {
+#endif
BssEntrySet(pAd, &Tab->BssEntry[Idx], pBssid, Ssid, SsidLen, BssType, BeaconPeriod,CfParm, AtimWin,
CapabilityInfo, SupRate, SupRateLen, ExtRate, ExtRateLen,pHtCapability, pAddHtInfo,HtCapabilityLen, AddHtInfoLen,
NewExtChanOffset, ChannelNo, Rssi, TimeStamp, CkipFlag, pEdcaParm, pQosCapability, pQbssLoad, LengthVIE, pVIE);
- }
-
- return Idx;
-}
-
-#ifdef CONFIG_STA_SUPPORT
-#ifdef DOT11_N_SUPPORT
-#ifdef DOT11N_DRAFT3
-VOID TriEventInit(
- IN PRTMP_ADAPTER pAd)
-{
- UCHAR i;
-
- for (i = 0;i < MAX_TRIGGER_EVENT;i++)
- pAd->CommonCfg.TriggerEventTab.EventA[i].bValid = FALSE;
-
- pAd->CommonCfg.TriggerEventTab.EventANo = 0;
- pAd->CommonCfg.TriggerEventTab.EventBCountDown = 0;
-}
-
-ULONG TriEventTableSetEntry(
- IN PRTMP_ADAPTER pAd,
- OUT TRIGGER_EVENT_TAB *Tab,
- IN PUCHAR pBssid,
- IN HT_CAPABILITY_IE *pHtCapability,
- IN UCHAR HtCapabilityLen,
- IN UCHAR RegClass,
- IN UCHAR ChannelNo)
-{
- // Event A
- if (HtCapabilityLen == 0)
- {
- if (Tab->EventANo < MAX_TRIGGER_EVENT)
- {
- RTMPMoveMemory(Tab->EventA[Tab->EventANo].BSSID, pBssid, 6);
- Tab->EventA[Tab->EventANo].bValid = TRUE;
- Tab->EventA[Tab->EventANo].Channel = ChannelNo;
- Tab->EventA[Tab->EventANo].CDCounter = pAd->CommonCfg.Dot11BssWidthChanTranDelay;
- if (RegClass != 0)
- {
- // Beacon has Regulatory class IE. So use beacon's
- Tab->EventA[Tab->EventANo].RegClass = RegClass;
- }
- else
- {
- // Use Station's Regulatory class instead.
- if (pAd->StaActive.SupportedHtPhy.bHtEnable == TRUE)
- {
- if (pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel)
- {
- Tab->EventA[Tab->EventANo].RegClass = 32;
- }
- else if (pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel)
- Tab->EventA[Tab->EventANo].RegClass = 33;
- }
- else
- Tab->EventA[Tab->EventANo].RegClass = ??;
-
- }
-
- Tab->EventANo ++;
- }
- }
- else if (pHtCapability->HtCapInfo.Intolerant40)
- {
- Tab->EventBCountDown = pAd->CommonCfg.Dot11BssWidthChanTranDelay;
- }
-
-}
-
-/*
- ========================================================================
- Routine Description:
- Trigger Event table Maintainence called once every second.
-
- Arguments:
- // IRQL = DISPATCH_LEVEL
- ========================================================================
-*/
-VOID TriEventCounterMaintenance(
- IN PRTMP_ADAPTER pAd)
-{
- UCHAR i;
- BOOLEAN bNotify = FALSE;
- for (i = 0;i < MAX_TRIGGER_EVENT;i++)
- {
- if (pAd->CommonCfg.TriggerEventTab.EventA[i].bValid && (pAd->CommonCfg.TriggerEventTab.EventA[i].CDCounter > 0))
- {
- pAd->CommonCfg.TriggerEventTab.EventA[i].CDCounter--;
- if (pAd->CommonCfg.TriggerEventTab.EventA[i].CDCounter == 0)
- {
- pAd->CommonCfg.TriggerEventTab.EventA[i].bValid = FALSE;
- pAd->CommonCfg.TriggerEventTab.EventANo --;
- // Need to send 20/40 Coexistence Notify frame if has status change.
- bNotify = TRUE;
- }
+#ifdef RT30xx
}
- }
- if (pAd->CommonCfg.TriggerEventTab.EventBCountDown > 0)
- {
- pAd->CommonCfg.TriggerEventTab.EventBCountDown--;
- if (pAd->CommonCfg.TriggerEventTab.EventBCountDown == 0)
- bNotify = TRUE;
+#endif
}
- if (bNotify == TRUE)
- Update2040CoexistFrameAndNotify(pAd, BSSID_WCID, TRUE);
+ return Idx;
}
-#endif // DOT11N_DRAFT3 //
-#endif // DOT11_N_SUPPORT //
// IRQL = DISPATCH_LEVEL
VOID BssTableSsidSort(
@@ -4079,9 +3912,6 @@ VOID BssTableSsidSort(
if (((pAd->CommonCfg.bIEEE80211H == 1) &&
(pAd->MlmeAux.Channel > 14) &&
RadarChannelCheck(pAd, pInBss->Channel))
-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
- || (pAd->CommonCfg.CarrierDetect.Enable == TRUE)
-#endif // CARRIER_DETECTION_SUPPORT //
)
{
if (pInBss->Hidden)
@@ -4093,18 +3923,6 @@ 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) &&
- (pInBss->bHasCountryIE == FALSE))
- {
- DBGPRINT(RT_DEBUG_TRACE,("StaCfg.IEEE80211dClientMode == Rt802_11_D_Strict, but this AP doesn't have country IE.\n"));
- continue;
- }
-#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)))
@@ -4112,7 +3930,6 @@ 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
@@ -4132,9 +3949,14 @@ VOID BssTableSsidSort(
continue;
// check group cipher
+#ifndef RT30xx
if ((pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) &&
(pInBss->WPA.GroupCipher != Ndis802_11GroupWEP40Enabled) &&
(pInBss->WPA.GroupCipher != Ndis802_11GroupWEP104Enabled))
+#endif
+#ifdef RT30xx
+ if (pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher)
+#endif
continue;
// check pairwise cipher, skip if none matched
@@ -4153,9 +3975,14 @@ VOID BssTableSsidSort(
continue;
// check group cipher
+#ifndef RT30xx
if ((pAd->StaCfg.WepStatus < pInBss->WPA.GroupCipher) &&
(pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP40Enabled) &&
(pInBss->WPA2.GroupCipher != Ndis802_11GroupWEP104Enabled))
+#endif
+#ifdef RT30xx
+ if (pAd->StaCfg.WepStatus < pInBss->WPA2.GroupCipher)
+#endif
continue;
// check pairwise cipher, skip if none matched
@@ -4185,7 +4012,6 @@ 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) &&
@@ -4205,7 +4031,6 @@ VOID BssTableSsidSort(
}
}
}
-#endif // DOT11_N_SUPPORT //
// copy matching BSS from InTab to OutTab
NdisMoveMemory(pOutBss, pInBss, sizeof(BSS_ENTRY));
@@ -4216,8 +4041,6 @@ 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)))
@@ -4225,7 +4048,6 @@ 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
@@ -4281,7 +4103,6 @@ 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) &&
@@ -4294,7 +4115,6 @@ 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));
@@ -4330,8 +4150,6 @@ VOID BssTableSortByRssi(
}
}
}
-#endif // CONFIG_STA_SUPPORT //
-
VOID BssCipherParse(
IN OUT PBSS_ENTRY pBss)
@@ -4442,10 +4260,16 @@ VOID BssCipherParse(
switch (*pTmp)
{
case 1:
+#ifndef RT30xx
pBss->WPA.GroupCipher = Ndis802_11GroupWEP40Enabled;
break;
case 5:
pBss->WPA.GroupCipher = Ndis802_11GroupWEP104Enabled;
+#endif
+#ifdef RT30xx
+ case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway
+ pBss->WPA.GroupCipher = Ndis802_11Encryption1Enabled;
+#endif
break;
case 2:
pBss->WPA.GroupCipher = Ndis802_11Encryption2Enabled;
@@ -4532,7 +4356,6 @@ VOID BssCipherParse(
pBss->AuthMode = Ndis802_11AuthModeWPANone;
pBss->AuthModeAux = Ndis802_11AuthModeWPANone;
pBss->WepStatus = pBss->WPA.GroupCipher;
- // Patched bugs for old driver
if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)
pBss->WPA.PairCipherAux = pBss->WPA.GroupCipher;
}
@@ -4562,10 +4385,16 @@ VOID BssCipherParse(
switch (pCipher->Type)
{
case 1:
+#ifndef RT30xx
pBss->WPA2.GroupCipher = Ndis802_11GroupWEP40Enabled;
break;
case 5:
pBss->WPA2.GroupCipher = Ndis802_11GroupWEP104Enabled;
+#endif
+#ifdef RT30xx
+ case 5: // Although WEP is not allowed in WPA related auth mode, we parse it anyway
+ pBss->WPA2.GroupCipher = Ndis802_11Encryption1Enabled;
+#endif
break;
case 2:
pBss->WPA2.GroupCipher = Ndis802_11Encryption2Enabled;
@@ -4659,7 +4488,6 @@ VOID BssCipherParse(
pBss->WPA.PairCipherAux = pBss->WPA2.PairCipherAux;
pBss->WPA.GroupCipher = pBss->WPA2.GroupCipher;
pBss->WepStatus = pBss->WPA.GroupCipher;
- // Patched bugs for old driver
if (pBss->WPA.PairCipherAux == Ndis802_11WEPDisabled)
pBss->WPA.PairCipherAux = pBss->WPA.GroupCipher;
}
@@ -4735,10 +4563,9 @@ VOID MgtMacHeaderInit(
pHdr80211->FC.SubType = SubType;
pHdr80211->FC.ToDs = ToDs;
COPY_MAC_ADDR(pHdr80211->Addr1, pDA);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress);
-#endif // CONFIG_STA_SUPPORT //
+
+ COPY_MAC_ADDR(pHdr80211->Addr2, pAd->CurrentAddress);
+
COPY_MAC_ADDR(pHdr80211->Addr3, pBssid);
}
@@ -4925,12 +4752,6 @@ BOOLEAN MlmeEnqueueForRecv(
INT MsgType;
MLME_QUEUE *Queue = (MLME_QUEUE *)&pAd->Mlme.Queue;
-#ifdef RALINK_ATE
- /* Nothing to do in ATE mode */
- if(ATE_ON(pAd))
- return FALSE;
-#endif // RALINK_ATE //
-
// 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 | fRTMP_ADAPTER_NIC_NOT_EXIST))
@@ -4951,8 +4772,6 @@ BOOLEAN MlmeEnqueueForRecv(
return FALSE;
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if (!MsgTypeSubst(pAd, pFrame, &Machine, &MsgType))
{
@@ -4960,7 +4779,6 @@ BOOLEAN MlmeEnqueueForRecv(
return FALSE;
}
}
-#endif // CONFIG_STA_SUPPORT //
// OK, we got all the informations, it is time to put things into queue
NdisAcquireSpinLock(&(Queue->Lock));
@@ -5028,13 +4846,14 @@ BOOLEAN MlmeDequeue(
VOID MlmeRestartStateMachine(
IN PRTMP_ADAPTER pAd)
{
+#ifdef RT2860
MLME_QUEUE_ELEM *Elem = NULL;
-#ifdef CONFIG_STA_SUPPORT
+#endif
BOOLEAN Cancelled;
-#endif // CONFIG_STA_SUPPORT //
DBGPRINT(RT_DEBUG_TRACE, ("MlmeRestartStateMachine \n"));
+#ifdef RT2860
NdisAcquireSpinLock(&pAd->Mlme.TaskLock);
if(pAd->Mlme.bRunning)
{
@@ -5062,13 +4881,9 @@ VOID MlmeRestartStateMachine(
DBGPRINT_ERR(("MlmeRestartStateMachine: MlmeQueue empty\n"));
}
}
+#endif /* RT2860 */
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
-#ifdef QOS_DLS_SUPPORT
- UCHAR i;
-#endif // QOS_DLS_SUPPORT //
// Cancel all timer events
// Be careful to cancel new added timer
RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled);
@@ -5077,15 +4892,7 @@ VOID MlmeRestartStateMachine(
RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled);
RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled);
RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled);
-
-#ifdef QOS_DLS_SUPPORT
- for (i=0; i<MAX_NUM_OF_DLS_ENTRY; i++)
- {
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &Cancelled);
- }
-#endif // QOS_DLS_SUPPORT //
}
-#endif // CONFIG_STA_SUPPORT //
// Change back to original channel in case of doing scan
AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
@@ -5094,8 +4901,6 @@ VOID MlmeRestartStateMachine(
// Resume MSDU which is turned off durning scan
RTMPResumeMsduTransmission(pAd);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// Set all state machines back IDLE
pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
@@ -5104,16 +4909,14 @@ VOID MlmeRestartStateMachine(
pAd->Mlme.AuthRspMachine.CurrState = AUTH_RSP_IDLE;
pAd->Mlme.SyncMachine.CurrState = SYNC_IDLE;
pAd->Mlme.ActMachine.CurrState = ACT_IDLE;
-#ifdef QOS_DLS_SUPPORT
- pAd->Mlme.DlsMachine.CurrState = DLS_IDLE;
-#endif // QOS_DLS_SUPPORT //
}
-#endif // CONFIG_STA_SUPPORT //
+#ifdef RT2860
// Remove running state
NdisAcquireSpinLock(&pAd->Mlme.TaskLock);
pAd->Mlme.bRunning = FALSE;
NdisReleaseSpinLock(&pAd->Mlme.TaskLock);
+#endif
}
/*! \brief test if the MLME Queue is empty
@@ -5191,7 +4994,6 @@ VOID MlmeQueueDestroy(
IRQL = DISPATCH_LEVEL
*/
-#ifdef CONFIG_STA_SUPPORT
BOOLEAN MsgTypeSubst(
IN PRTMP_ADAPTER pAd,
IN PFRAME_802_11 pFrame,
@@ -5215,16 +5017,6 @@ BOOLEAN MsgTypeSubst(
*MsgType = MT2_AIRONET_MSG;
return (TRUE);
}
-#ifdef LEAP_SUPPORT
- if ( pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP ) //LEAP
- {
- // LEAP frames
- *Machine = LEAP_STATE_MACHINE;
- EAPType = *((UCHAR*)pFrame + LENGTH_802_11 + LENGTH_802_1_H + 1);
- return (LeapMsgTypeSubst(EAPType, MsgType));
- }
- else
-#endif // LEAP_SUPPORT //
{
*Machine = WPA_PSK_STATE_MACHINE;
EAPType = *((UCHAR*)pFrame + LENGTH_802_11 + LENGTH_802_1_H + 1);
@@ -5311,7 +5103,6 @@ BOOLEAN MsgTypeSubst(
return TRUE;
}
-#endif // CONFIG_STA_SUPPORT //
// ===========================================================================================
// state_machine.c
@@ -5533,7 +5324,6 @@ VOID AsicUpdateAutoFallBackTable(
}
}
break;
-#ifdef DOT11_N_SUPPORT
case 2: //HT-MIX
case 3: //HT-GF
{
@@ -5595,7 +5385,6 @@ VOID AsicUpdateAutoFallBackTable(
}
}
break;
-#endif // DOT11_N_SUPPORT //
}
pNextTxRate = pCurrTxRate;
@@ -5637,12 +5426,6 @@ VOID AsicUpdateProtect(
UCHAR i;
UINT32 MacReg = 0;
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
-#ifdef DOT11_N_SUPPORT
if (!(pAd->CommonCfg.bHTProtect) && (OperationMode != 8))
{
return;
@@ -5656,19 +5439,14 @@ VOID AsicUpdateProtect(
SetMask = ALLN_SETPROTECT;
OperationMode = 8;
}
-#endif // DOT11_N_SUPPORT //
// Config ASIC RTS threshold register
RTMP_IO_READ32(pAd, TX_RTS_CFG, &MacReg);
MacReg &= 0xFF0000FF;
-#if 0
- MacReg |= (pAd->CommonCfg.RtsThreshold << 8);
-#else
+
// If the user want disable RtsThreshold and enable Amsdu/Ralink-Aggregation, set the RtsThreshold as 4096
if ((
-#ifdef DOT11_N_SUPPORT
(pAd->CommonCfg.BACapability.field.AmsduEnable) ||
-#endif // DOT11_N_SUPPORT //
(pAd->CommonCfg.bAggregationCapable == TRUE))
&& pAd->CommonCfg.RtsThreshold == MAX_RTS_THRESHOLD)
{
@@ -5678,7 +5456,6 @@ VOID AsicUpdateProtect(
{
MacReg |= (pAd->CommonCfg.RtsThreshold << 8);
}
-#endif
RTMP_IO_WRITE32(pAd, TX_RTS_CFG, MacReg);
@@ -5717,7 +5494,6 @@ VOID AsicUpdateProtect(
Protect[1] = ProtCfg.word;
}
-#ifdef DOT11_N_SUPPORT
// Decide HT frame protection.
if ((SetMask & ALLN_SETPROTECT) != 0)
{
@@ -5848,7 +5624,6 @@ VOID AsicUpdateProtect(
break;
}
}
-#endif // DOT11_N_SUPPORT //
offset = CCK_PROT_CFG;
for (i = 0;i < 6;i++)
@@ -5860,6 +5635,276 @@ VOID AsicUpdateProtect(
}
}
+#ifdef RT30xx
+/*
+ ========================================================================
+
+ Routine Description: Write RT30xx RF register through MAC
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+NTSTATUS RT30xxWriteRFRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR RegID,
+ IN UCHAR Value)
+{
+ RF_CSR_CFG_STRUC rfcsr;
+ UINT i = 0;
+
+ do
+ {
+ RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+
+ if (!rfcsr.field.RF_CSR_KICK)
+ break;
+ i++;
+ }
+ while ((i < RETRY_LIMIT) && (!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)));
+
+ if ((i == RETRY_LIMIT) || (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
+ {
+ DBGPRINT_RAW(RT_DEBUG_ERROR, ("Retry count exhausted or device removed!!!\n"));
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ rfcsr.field.RF_CSR_WR = 1;
+ rfcsr.field.RF_CSR_KICK = 1;
+ rfcsr.field.TESTCSR_RFACC_REGNUM = RegID;
+ rfcsr.field.RF_CSR_DATA = Value;
+
+ RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word);
+
+ return STATUS_SUCCESS;
+}
+
+
+/*
+ ========================================================================
+
+ Routine Description: Read RT30xx RF register through MAC
+
+ Arguments:
+
+ Return Value:
+
+ IRQL =
+
+ Note:
+
+ ========================================================================
+*/
+NTSTATUS RT30xxReadRFRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR RegID,
+ IN PUCHAR pValue)
+{
+ RF_CSR_CFG_STRUC rfcsr;
+ UINT i=0, k=0;
+
+ for (i=0; i<MAX_BUSY_COUNT; i++)
+ {
+ RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+
+ if (rfcsr.field.RF_CSR_KICK == BUSY)
+ {
+ continue;
+ }
+ rfcsr.word = 0;
+ rfcsr.field.RF_CSR_WR = 0;
+ rfcsr.field.RF_CSR_KICK = 1;
+ rfcsr.field.TESTCSR_RFACC_REGNUM = RegID;
+ RTMP_IO_WRITE32(pAd, RF_CSR_CFG, rfcsr.word);
+ for (k=0; k<MAX_BUSY_COUNT; k++)
+ {
+ RTMP_IO_READ32(pAd, RF_CSR_CFG, &rfcsr.word);
+
+ if (rfcsr.field.RF_CSR_KICK == IDLE)
+ break;
+ }
+ if ((rfcsr.field.RF_CSR_KICK == IDLE) &&
+ (rfcsr.field.TESTCSR_RFACC_REGNUM == RegID))
+ {
+ *pValue = (UCHAR)rfcsr.field.RF_CSR_DATA;
+ break;
+ }
+ }
+ if (rfcsr.field.RF_CSR_KICK == BUSY)
+ {
+ DBGPRINT_ERR(("RF read R%d=0x%x fail, i[%d], k[%d]\n", RegID, rfcsr.word,i,k));
+ return STATUS_UNSUCCESSFUL;
+ }
+
+ return STATUS_SUCCESS;
+}
+#endif // RT30xx //
+
+#ifdef RT30xx
+// add by johnli, RF power sequence setup
+/*
+ ==========================================================================
+ Description:
+
+ Load RF normal operation-mode setup
+
+ ==========================================================================
+ */
+VOID RT30xxLoadRFNormalModeSetup(
+ IN PRTMP_ADAPTER pAd)
+{
+ UCHAR RFValue;
+
+ // RX0_PD & TX0_PD, RF R1 register Bit 2 & Bit 3 to 0 and RF_BLOCK_en,RX1_PD & TX1_PD, Bit0, Bit 4 & Bit5 to 1
+ RT30xxReadRFRegister(pAd, RF_R01, &RFValue);
+ RFValue = (RFValue & (~0x0C)) | 0x31;
+ RT30xxWriteRFRegister(pAd, RF_R01, RFValue);
+
+ // TX_LO2_en, RF R15 register Bit 3 to 0
+ RT30xxReadRFRegister(pAd, RF_R15, &RFValue);
+ RFValue &= (~0x08);
+ RT30xxWriteRFRegister(pAd, RF_R15, RFValue);
+
+ // TX_LO1_en, RF R17 register Bit 3 to 0
+ RT30xxReadRFRegister(pAd, RF_R17, &RFValue);
+ RFValue &= (~0x08);
+ // to fix rx long range issue
+ if (((pAd->MACVersion & 0xffff) >= 0x0211) && (pAd->NicConfig2.field.ExternalLNAForG == 0))
+ {
+ RFValue |= 0x20;
+ }
+ RT30xxWriteRFRegister(pAd, RF_R17, RFValue);
+
+ // RX_LO1_en, RF R20 register Bit 3 to 0
+ RT30xxReadRFRegister(pAd, RF_R20, &RFValue);
+ RFValue &= (~0x08);
+ RT30xxWriteRFRegister(pAd, RF_R20, RFValue);
+
+ // RX_LO2_en, RF R21 register Bit 3 to 0
+ RT30xxReadRFRegister(pAd, RF_R21, &RFValue);
+ RFValue &= (~0x08);
+ RT30xxWriteRFRegister(pAd, RF_R21, RFValue);
+
+ // LDORF_VC, RF R27 register Bit 2 to 0
+ RT30xxReadRFRegister(pAd, RF_R27, &RFValue);
+ if ((pAd->MACVersion & 0xffff) < 0x0211)
+ RFValue = (RFValue & (~0x77)) | 0x3;
+ else
+ RFValue = (RFValue & (~0x77));
+ RT30xxWriteRFRegister(pAd, RF_R27, RFValue);
+ /* end johnli */
+}
+
+/*
+ ==========================================================================
+ Description:
+
+ Load RF sleep-mode setup
+
+ ==========================================================================
+ */
+VOID RT30xxLoadRFSleepModeSetup(
+ IN PRTMP_ADAPTER pAd)
+{
+ UCHAR RFValue;
+ UINT32 MACValue;
+
+ // RF_BLOCK_en. RF R1 register Bit 0 to 0
+ RT30xxReadRFRegister(pAd, RF_R01, &RFValue);
+ RFValue &= (~0x01);
+ RT30xxWriteRFRegister(pAd, RF_R01, RFValue);
+
+ // VCO_IC, RF R7 register Bit 4 & Bit 5 to 0
+ RT30xxReadRFRegister(pAd, RF_R07, &RFValue);
+ RFValue &= (~0x30);
+ RT30xxWriteRFRegister(pAd, RF_R07, RFValue);
+
+ // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 0
+ RT30xxReadRFRegister(pAd, RF_R09, &RFValue);
+ RFValue &= (~0x0E);
+ RT30xxWriteRFRegister(pAd, RF_R09, RFValue);
+
+ // RX_CTB_en, RF R21 register Bit 7 to 0
+ RT30xxReadRFRegister(pAd, RF_R21, &RFValue);
+ RFValue &= (~0x80);
+ RT30xxWriteRFRegister(pAd, RF_R21, RFValue);
+
+ // LDORF_VC, RF R27 register Bit 0, Bit 1 & Bit 2 to 1
+ RT30xxReadRFRegister(pAd, RF_R27, &RFValue);
+ RFValue |= 0x77;
+ RT30xxWriteRFRegister(pAd, RF_R27, RFValue);
+
+ RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue);
+ MACValue |= 0x1D000000;
+ RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue);
+}
+
+/*
+ ==========================================================================
+ Description:
+
+ Reverse RF sleep-mode setup
+
+ ==========================================================================
+ */
+VOID RT30xxReverseRFSleepModeSetup(
+ IN PRTMP_ADAPTER pAd)
+{
+ UCHAR RFValue;
+ UINT32 MACValue;
+
+ // RF_BLOCK_en, RF R1 register Bit 0 to 1
+ RT30xxReadRFRegister(pAd, RF_R01, &RFValue);
+ RFValue |= 0x01;
+ RT30xxWriteRFRegister(pAd, RF_R01, RFValue);
+
+ // VCO_IC, RF R7 register Bit 4 & Bit 5 to 1
+ RT30xxReadRFRegister(pAd, RF_R07, &RFValue);
+ RFValue |= 0x30;
+ RT30xxWriteRFRegister(pAd, RF_R07, RFValue);
+
+ // Idoh, RF R9 register Bit 1, Bit 2 & Bit 3 to 1
+ RT30xxReadRFRegister(pAd, RF_R09, &RFValue);
+ RFValue |= 0x0E;
+ RT30xxWriteRFRegister(pAd, RF_R09, RFValue);
+
+ // RX_CTB_en, RF R21 register Bit 7 to 1
+ RT30xxReadRFRegister(pAd, RF_R21, &RFValue);
+ RFValue |= 0x80;
+ RT30xxWriteRFRegister(pAd, RF_R21, RFValue);
+
+ // LDORF_VC, RF R27 register Bit 2 to 0
+ RT30xxReadRFRegister(pAd, RF_R27, &RFValue);
+ if ((pAd->MACVersion & 0xffff) < 0x0211)
+ RFValue = (RFValue & (~0x77)) | 0x3;
+ else
+ RFValue = (RFValue & (~0x77));
+ RT30xxWriteRFRegister(pAd, RF_R27, RFValue);
+
+ // RT3071 version E has fixed this issue
+ if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211))
+ {
+ // patch tx EVM issue temporarily
+ RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue);
+ MACValue = ((MACValue & 0xE0FFFFFF) | 0x0D000000);
+ RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue);
+ }
+ else
+ {
+ RTMP_IO_READ32(pAd, LDO_CFG0, &MACValue);
+ MACValue = ((MACValue & 0xE0FFFFFF) | 0x01000000);
+ RTMP_IO_WRITE32(pAd, LDO_CFG0, MACValue);
+ }
+}
+// end johnli
+#endif // RT30xx //
+
/*
==========================================================================
Description:
@@ -5881,6 +5926,21 @@ VOID AsicSwitchChannel(
RTMP_RF_REGS *RFRegTable;
// Search Tx power value
+#ifdef RT30xx
+ // We can't use ChannelList to search channel, since some central channl's txpowr doesn't list
+ // in ChannelList, so use TxPower array instead.
+ //
+ for (index = 0; index < MAX_NUM_OF_CHANNELS; index++)
+ {
+ if (Channel == pAd->TxPower[index].Channel)
+ {
+ TxPwer = pAd->TxPower[index].Power;
+ TxPwer2 = pAd->TxPower[index].Power2;
+ break;
+ }
+ }
+#endif
+#ifndef RT30xx
for (index = 0; index < pAd->ChannelListNum; index++)
{
if (Channel == pAd->ChannelList[index].Channel)
@@ -5890,12 +5950,152 @@ VOID AsicSwitchChannel(
break;
}
}
+#endif
if (index == MAX_NUM_OF_CHANNELS)
{
+#ifndef RT30xx
DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: Cant find the Channel#%d \n", Channel));
+#endif
+#ifdef RT30xx
+ DBGPRINT(RT_DEBUG_ERROR, ("AsicSwitchChannel: Can't find the Channel#%d \n", Channel));
+#endif
}
+#ifdef RT2870
+ // The RF programming sequence is difference between 3xxx and 2xxx
+#ifdef RT30xx
+ if ((IS_RT3070(pAd) || IS_RT3090(pAd)) && ((pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020) ||
+ (pAd->RfIcType == RFIC_3021) || (pAd->RfIcType == RFIC_3022)))
+#endif
+#ifndef RT30xx
+ if (IS_RT3070(pAd) && ((pAd->RfIcType == RFIC_3020) || (pAd->RfIcType == RFIC_2020)))
+#endif
+ {
+ /* modify by WY for Read RF Reg. error */
+ UCHAR RFValue;
+
+ for (index = 0; index < NUM_OF_3020_CHNL; index++)
+ {
+ if (Channel == FreqItems3020[index].Channel)
+ {
+ // Programming channel parameters
+ RT30xxWriteRFRegister(pAd, RF_R02, FreqItems3020[index].N);
+ RT30xxWriteRFRegister(pAd, RF_R03, FreqItems3020[index].K);
+
+#ifndef RT30xx
+ RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RFValue);
+ RFValue = (RFValue & 0xFC) | FreqItems3020[index].R;
+ RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RFValue);
+
+ // Set Tx Power
+ RT30xxReadRFRegister(pAd, RF_R12, (PUCHAR)&RFValue);
+ RFValue = (RFValue & 0xE0) | TxPwer;
+ RT30xxWriteRFRegister(pAd, RF_R12, (UCHAR)RFValue);
+
+ // Set RF offset
+ RT30xxReadRFRegister(pAd, RF_R23, (PUCHAR)&RFValue);
+ RFValue = (RFValue & 0x80) | pAd->RfFreqOffset;
+ RT30xxWriteRFRegister(pAd, RF_R23, (UCHAR)RFValue);
+#endif
+#ifdef RT30xx
+ RT30xxReadRFRegister(pAd, RF_R06, &RFValue);
+ RFValue = (RFValue & 0xFC) | FreqItems3020[index].R;
+ RT30xxWriteRFRegister(pAd, RF_R06, RFValue);
+
+ // Set Tx0 Power
+ RT30xxReadRFRegister(pAd, RF_R12, &RFValue);
+ RFValue = (RFValue & 0xE0) | TxPwer;
+ RT30xxWriteRFRegister(pAd, RF_R12, RFValue);
+
+ // Set Tx1 Power
+ RT30xxReadRFRegister(pAd, RF_R13, &RFValue);
+ RFValue = (RFValue & 0xE0) | TxPwer2;
+ RT30xxWriteRFRegister(pAd, RF_R13, RFValue);
+
+ // Tx/Rx Stream setting
+ RT30xxReadRFRegister(pAd, RF_R01, &RFValue);
+ //if (IS_RT3090(pAd))
+ // RFValue |= 0x01; // Enable RF block.
+ RFValue &= 0x03; //clear bit[7~2]
+ if (pAd->Antenna.field.TxPath == 1)
+ RFValue |= 0xA0;
+ else if (pAd->Antenna.field.TxPath == 2)
+ RFValue |= 0x80;
+ if (pAd->Antenna.field.RxPath == 1)
+ RFValue |= 0x50;
+ else if (pAd->Antenna.field.RxPath == 2)
+ RFValue |= 0x40;
+ RT30xxWriteRFRegister(pAd, RF_R01, RFValue);
+
+ // Set RF offset
+ RT30xxReadRFRegister(pAd, RF_R23, &RFValue);
+ RFValue = (RFValue & 0x80) | pAd->RfFreqOffset;
+ RT30xxWriteRFRegister(pAd, RF_R23, RFValue);
+#endif
+
+ // Set BW
+ if (!bScan && (pAd->CommonCfg.BBPCurrentBW == BW_40))
+ {
+ RFValue = pAd->Mlme.CaliBW40RfR24;
+ //DISABLE_11N_CHECK(pAd);
+ }
+ else
+ {
+ RFValue = pAd->Mlme.CaliBW20RfR24;
+ }
+#ifndef RT30xx
+ RT30xxWriteRFRegister(pAd, RF_R24, (UCHAR)RFValue);
+
+ // Enable RF tuning
+ RT30xxReadRFRegister(pAd, RF_R07, (PUCHAR)&RFValue);
+ RFValue = RFValue | 0x1;
+ RT30xxWriteRFRegister(pAd, RF_R07, (UCHAR)RFValue);
+
+ // latch channel for future usage.
+ pAd->LatchRfRegs.Channel = Channel;
+#endif
+#ifdef RT30xx
+ RT30xxWriteRFRegister(pAd, RF_R24, RFValue);
+ RT30xxWriteRFRegister(pAd, RF_R31, RFValue);
+
+ // Enable RF tuning
+ RT30xxReadRFRegister(pAd, RF_R07, &RFValue);
+ RFValue = RFValue | 0x1;
+ RT30xxWriteRFRegister(pAd, RF_R07, RFValue);
+
+ // latch channel for future usage.
+ pAd->LatchRfRegs.Channel = Channel;
+
+ DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%d, Pwr1=%d, %dT), N=0x%02X, K=0x%02X, R=0x%02X\n",
+ Channel,
+ pAd->RfIcType,
+ TxPwer,
+ TxPwer2,
+ pAd->Antenna.field.TxPath,
+ FreqItems3020[index].N,
+ FreqItems3020[index].K,
+ FreqItems3020[index].R));
+#endif
+
+ break;
+ }
+ }
+
+#ifndef RT30xx
+ DBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%d, Pwr1=%d, %dT), N=0x%02X, K=0x%02X, R=0x%02X\n",
+ Channel,
+ pAd->RfIcType,
+ TxPwer,
+ TxPwer2,
+ pAd->Antenna.field.TxPath,
+ FreqItems3020[index].N,
+ FreqItems3020[index].K,
+ FreqItems3020[index].R));
+#endif
+ }
+ else
+#endif // RT2870 //
{
RFRegTable = RF2850RegTable;
@@ -6149,6 +6349,53 @@ VOID AsicAntennaSelect(
IN PRTMP_ADAPTER pAd,
IN UCHAR Channel)
{
+#ifdef RT30xx
+ if (pAd->Mlme.OneSecPeriodicRound % 2 == 1)
+ {
+ // patch for AsicSetRxAnt failed
+ pAd->RxAnt.EvaluatePeriod = 0;
+
+ // check every 2 second. If rcv-beacon less than 5 in the past 2 second, then AvgRSSI is no longer a
+ // valid indication of the distance between this AP and its clients.
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ {
+ SHORT realavgrssi1;
+
+ // if no traffic then reset average rssi to trigger evaluation
+ if (pAd->StaCfg.NumOfAvgRssiSample < 5)
+ {
+ pAd->RxAnt.Pair1LastAvgRssi = (-99);
+ pAd->RxAnt.Pair2LastAvgRssi = (-99);
+ DBGPRINT(RT_DEBUG_TRACE, ("MlmePeriodicExec: no traffic/beacon, reset RSSI\n"));
+ }
+
+ pAd->StaCfg.NumOfAvgRssiSample = 0;
+ realavgrssi1 = (pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1PrimaryRxAnt] >> 3);
+
+ DBGPRINT(RT_DEBUG_TRACE,("Ant-realrssi0(%d), Lastrssi0(%d), EvaluateStableCnt=%d\n", realavgrssi1, pAd->RxAnt.Pair1LastAvgRssi, pAd->RxAnt.EvaluateStableCnt));
+
+ // if the difference between two rssi is larger or less than 5, then evaluate the other antenna
+ if ((pAd->RxAnt.EvaluateStableCnt < 2) || (realavgrssi1 > (pAd->RxAnt.Pair1LastAvgRssi + 5)) || (realavgrssi1 < (pAd->RxAnt.Pair1LastAvgRssi - 5)))
+ {
+ pAd->RxAnt.Pair1LastAvgRssi = realavgrssi1;
+ AsicEvaluateRxAnt(pAd);
+ }
+ }
+ else
+ {
+ // if not connected, always switch antenna to try to connect
+ UCHAR temp;
+
+ temp = pAd->RxAnt.Pair1PrimaryRxAnt;
+ pAd->RxAnt.Pair1PrimaryRxAnt = pAd->RxAnt.Pair1SecondaryRxAnt;
+ pAd->RxAnt.Pair1SecondaryRxAnt = temp;
+
+ DBGPRINT(RT_DEBUG_TRACE, ("MlmePeriodicExec: no connect, switch to another one to try connection\n"));
+
+ AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt);
+ }
+ }
+#endif /* RT30xx */
}
/*
@@ -6218,11 +6465,13 @@ VOID AsicAdjustTxPower(
ULONG TxPwr[5];
CHAR Value;
+#ifdef RT2860
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)
|| (pAd->bPCIclkOff == TRUE)
|| RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF)
|| RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
return;
+#endif
if (pAd->CommonCfg.BBPCurrentBW == BW_40)
{
@@ -6364,95 +6613,6 @@ 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
@@ -6522,7 +6682,6 @@ VOID AsicAdjustTxPower(
}
-#ifdef CONFIG_STA_SUPPORT
/*
==========================================================================
Description:
@@ -6568,12 +6727,22 @@ VOID AsicForceSleep(
*/
VOID AsicForceWakeup(
IN PRTMP_ADAPTER pAd,
+#ifdef RT2860
IN UCHAR Level)
+#endif
+#ifdef RT2870
+ IN BOOLEAN bFromTx)
+#endif
{
DBGPRINT(RT_DEBUG_TRACE, ("--> AsicForceWakeup \n"));
+#ifdef RT2860
RT28XX_STA_FORCE_WAKEUP(pAd, Level);
+#endif
+#ifdef RT2870
+ RT28XX_STA_FORCE_WAKEUP(pAd, bFromTx);
+#endif
}
-#endif // CONFIG_STA_SUPPORT //
+
/*
==========================================================================
Description:
@@ -6688,9 +6857,7 @@ VOID AsicDisableRDG(
Data &= 0xFFFFFF00;
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
@@ -6745,8 +6912,7 @@ VOID AsicEnableBssSync(
DBGPRINT(RT_DEBUG_TRACE, ("--->AsicEnableBssSync(INFRA mode)\n"));
RTMP_IO_READ32(pAd, BCN_TIME_CFG, &csr.word);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+
{
csr.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU
csr.field.bTsfTicking = 1;
@@ -6754,7 +6920,7 @@ VOID AsicEnableBssSync(
csr.field.bBeaconGen = 0; // do NOT generate BEACON
csr.field.bTBTTEnable = 1;
}
-#endif // CONFIG_STA_SUPPORT //
+
RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr.word);
}
@@ -6785,6 +6951,7 @@ VOID AsicEnableIbssSync(
csr9.field.bTsfTicking = 0;
RTMP_IO_WRITE32(pAd, BCN_TIME_CFG, csr9.word);
+#ifdef RT2860
// move BEACON TXD and frame content to on-chip memory
ptr = (PUCHAR)&pAd->BeaconTxWI;
for (i=0; i<TXWI_SIZE; i+=4) // 16-byte TXWI field
@@ -6802,6 +6969,24 @@ VOID AsicEnableIbssSync(
RTMP_IO_WRITE32(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, longptr);
ptr +=4;
}
+#endif
+#ifdef RT2870
+ // move BEACON TXD and frame content to on-chip memory
+ ptr = (PUCHAR)&pAd->BeaconTxWI;
+ for (i=0; i<TXWI_SIZE; i+=2) // 16-byte TXWI field
+ {
+ RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + i, ptr, 2);
+ ptr += 2;
+ }
+
+ // start right after the 16-byte TXWI field
+ ptr = pAd->BeaconBuf;
+ for (i=0; i< pAd->BeaconTxWI.MPDUtotalByteCount; i+=2)
+ {
+ RTUSBMultiWrite(pAd, HW_BEACON_BASE0 + TXWI_SIZE + i, ptr, 2);
+ ptr +=2;
+ }
+#endif // RT2870 //
// start sending BEACON
csr9.field.BeaconInterval = pAd->CommonCfg.BeaconPeriod << 4; // ASIC register in units of 1/16 TU
@@ -6949,8 +7134,7 @@ VOID AsicSetEdcaParm(
Ac2Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VI];
Ac2Cfg.field.Cwmax = pEdcaParm->Cwmax[QID_AC_VI];
Ac2Cfg.field.Aifsn = pEdcaParm->Aifsn[QID_AC_VI];
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+
{
// Tuning for Wi-Fi WMM S06
if (pAd->CommonCfg.bWiFiTest &&
@@ -6958,15 +7142,22 @@ VOID AsicSetEdcaParm(
Ac2Cfg.field.Aifsn -= 1;
// Tuning for TGn Wi-Fi 5.2.32
- // STA TestBed changes in this item: conexant legacy sta ==> broadcom 11n sta
+ // STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta
if (STA_TGN_WIFI_ON(pAd) &&
pEdcaParm->Aifsn[QID_AC_VI] == 10)
{
Ac0Cfg.field.Aifsn = 3;
Ac2Cfg.field.AcTxop = 5;
}
+
+#ifdef RT30xx
+ if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020)
+ {
+ // Tuning for WiFi WMM S3-T07: connexant legacy sta ==> broadcom 11n sta.
+ Ac2Cfg.field.Aifsn = 5;
+ }
+#endif // RT30xx //
}
-#endif // CONFIG_STA_SUPPORT //
Ac3Cfg.field.AcTxop = pEdcaParm->Txop[QID_AC_VO];
Ac3Cfg.field.Cwmin = pEdcaParm->Cwmin[QID_AC_VO];
@@ -7008,10 +7199,9 @@ VOID AsicSetEdcaParm(
CwminCsr.field.Cwmin0 = pEdcaParm->Cwmin[QID_AC_BE];
CwminCsr.field.Cwmin1 = pEdcaParm->Cwmin[QID_AC_BK];
CwminCsr.field.Cwmin2 = pEdcaParm->Cwmin[QID_AC_VI];
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; //for TGn wifi test
-#endif // CONFIG_STA_SUPPORT //
+
+ CwminCsr.field.Cwmin3 = pEdcaParm->Cwmin[QID_AC_VO] - 1; //for TGn wifi test
+
RTMP_IO_WRITE32(pAd, WMM_CWMIN_CFG, CwminCsr.word);
CwmaxCsr.word = 0;
@@ -7025,8 +7215,7 @@ VOID AsicSetEdcaParm(
AifsnCsr.field.Aifsn0 = Ac0Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BE];
AifsnCsr.field.Aifsn1 = Ac1Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_BK];
AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn; //pEdcaParm->Aifsn[QID_AC_VI];
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+
{
// Tuning for Wi-Fi WMM S06
if (pAd->CommonCfg.bWiFiTest &&
@@ -7034,20 +7223,25 @@ VOID AsicSetEdcaParm(
AifsnCsr.field.Aifsn2 = Ac2Cfg.field.Aifsn - 4;
// Tuning for TGn Wi-Fi 5.2.32
- // STA TestBed changes in this item: conexant legacy sta ==> broadcom 11n sta
+ // STA TestBed changes in this item: connexant legacy sta ==> broadcom 11n sta
if (STA_TGN_WIFI_ON(pAd) &&
pEdcaParm->Aifsn[QID_AC_VI] == 10)
{
AifsnCsr.field.Aifsn0 = 3;
AifsnCsr.field.Aifsn2 = 7;
}
+#ifdef RT2870
+ if (INFRA_ON(pAd))
+ CLIENT_STATUS_SET_FLAG(&pAd->MacTab.Content[BSSID_WCID], fCLIENT_STATUS_WMM_CAPABLE);
+#endif
}
-#endif // CONFIG_STA_SUPPORT //
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; //pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test
-#endif // CONFIG_STA_SUPPORT //
+ AifsnCsr.field.Aifsn3 = Ac3Cfg.field.Aifsn - 1; //pEdcaParm->Aifsn[QID_AC_VO]; //for TGn wifi test
+#ifdef RT30xx
+ if (pAd->RfIcType == RFIC_3020 || pAd->RfIcType == RFIC_2020)
+ AifsnCsr.field.Aifsn2 = 0x2; //pEdcaParm->Aifsn[QID_AC_VI]; //for WiFi WMM S4-T04.
+#endif // RT30xx //
+
RTMP_IO_WRITE32(pAd, WMM_AIFSN_CFG, AifsnCsr.word);
NdisMoveMemory(&pAd->CommonCfg.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM));
@@ -7098,10 +7292,8 @@ VOID AsicSetSlotTime(
ULONG SlotTime;
UINT32 RegValue = 0;
-#ifdef CONFIG_STA_SUPPORT
if (pAd->CommonCfg.Channel > 14)
bUseShortSlotTime = TRUE;
-#endif // CONFIG_STA_SUPPORT //
if (bUseShortSlotTime)
OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SHORT_SLOT_INUSED);
@@ -7110,36 +7302,31 @@ VOID AsicSetSlotTime(
SlotTime = (bUseShortSlotTime)? 9 : 20;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
+#ifndef RT30xx
// force using short SLOT time for FAE to demo performance when TxBurst is ON
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)
+#endif
+#ifdef RT30xx
+ if (pAd->CommonCfg.bEnableTxBurst)
+#endif
SlotTime = 9;
}
-#endif // CONFIG_STA_SUPPORT //
//
// For some reasons, always set it to short slot time.
//
// ToDo: Should consider capability with 11B
//
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- if (pAd->StaCfg.BssType == BSS_ADHOC)
- SlotTime = 20;
- }
-#endif // CONFIG_STA_SUPPORT //
+ if (pAd->StaCfg.BssType == BSS_ADHOC)
+ SlotTime = 20;
RTMP_IO_READ32(pAd, BKOFF_SLOT_CFG, &RegValue);
RegValue = RegValue & 0xFFFFFF00;
@@ -7170,7 +7357,9 @@ VOID AsicAddSharedKeyEntry(
{
ULONG offset; //, csr0;
SHAREDKEY_MODE_STRUC csr1;
+#ifdef RT2860
INT i;
+#endif
DBGPRINT(RT_DEBUG_TRACE, ("AsicAddSharedKeyEntry BssIndex=%d, KeyIdx=%d\n", BssIndex,KeyIdx));
//============================================================================================
@@ -7192,28 +7381,43 @@ VOID AsicAddSharedKeyEntry(
//
// fill key material - key + TX MIC + RX MIC
//
+
offset = SHARED_KEY_TABLE_BASE + (4*BssIndex + KeyIdx)*HW_KEY_ENTRY_SIZE;
+#ifdef RT2860
for (i=0; i<MAX_LEN_OF_SHARE_KEY; i++)
{
RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
}
-
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_SHARE_KEY);
+#endif
offset += MAX_LEN_OF_SHARE_KEY;
if (pTxMic)
{
+#ifdef RT2860
for (i=0; i<8; i++)
{
RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]);
}
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite(pAd, offset, pTxMic, 8);
+#endif
}
offset += 8;
if (pRxMic)
{
+#ifdef RT2860
for (i=0; i<8; i++)
{
RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]);
}
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite(pAd, offset, pRxMic, 8);
+#endif
}
@@ -7389,7 +7593,9 @@ VOID AsicAddKeyEntry(
PUCHAR pTxtsc = pCipherKey->TxTsc;
UCHAR CipherAlg = pCipherKey->CipherAlg;
SHAREDKEY_MODE_STRUC csr1;
+#ifdef RT2860
UCHAR i;
+#endif
DBGPRINT(RT_DEBUG_TRACE, ("==> AsicAddKeyEntry\n"));
//
@@ -7404,10 +7610,15 @@ VOID AsicAddKeyEntry(
// 2.) Set Key to Asic
//
//for (i = 0; i < KeyLen; i++)
+#ifdef RT2860
for (i = 0; i < MAX_LEN_OF_PEER_KEY; i++)
{
RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
}
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite(pAd, offset, pKey, MAX_LEN_OF_PEER_KEY);
+#endif
offset += MAX_LEN_OF_PEER_KEY;
//
@@ -7415,19 +7626,29 @@ VOID AsicAddKeyEntry(
//
if (pTxMic)
{
+#ifdef RT2860
for (i = 0; i < 8; i++)
{
RTMP_IO_WRITE8(pAd, offset + i, pTxMic[i]);
}
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite(pAd, offset, pTxMic, 8);
+#endif
}
offset += LEN_TKIP_TXMICK;
if (pRxMic)
{
+#ifdef RT2860
for (i = 0; i < 8; i++)
{
RTMP_IO_WRITE8(pAd, offset + i, pRxMic[i]);
}
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite(pAd, offset, pRxMic, 8);
+#endif
}
@@ -7437,6 +7658,7 @@ VOID AsicAddKeyEntry(
//
if (bTxKey)
{
+#ifdef RT2860
offset = MAC_IVEIV_TABLE_BASE + (WCID * HW_IVEIV_ENTRY_SIZE);
//
// Write IV
@@ -7460,6 +7682,26 @@ VOID AsicAddKeyEntry(
RTMP_IO_WRITE8(pAd, offset + i, pTxtsc[i + 2]);
}
+#endif
+#ifdef RT2870
+ UINT32 tmpVal;
+
+ //
+ // Write IV
+ //
+ IV4 = (KeyIdx << 6);
+ if ((CipherAlg == CIPHER_TKIP) || (CipherAlg == CIPHER_TKIP_NO_MIC) ||(CipherAlg == CIPHER_AES))
+ IV4 |= 0x20; // turn on extension bit means EIV existence
+
+ tmpVal = pTxtsc[1] + (((pTxtsc[1] | 0x20) & 0x7f) << 8) + (pTxtsc[0] << 16) + (IV4 << 24);
+ RTMP_IO_WRITE32(pAd, offset, tmpVal);
+
+ //
+ // Write EIV
+ //
+ offset += 4;
+ RTMP_IO_WRITE32(pAd, offset, *(PUINT32)&pCipherKey->TxTsc[2]);
+#endif // RT2870 //
AsicUpdateWCIDAttribute(pAd, WCID, BssIndex, CipherAlg, bUsePairewiseKeyTable);
}
@@ -7524,10 +7766,15 @@ VOID AsicAddPairwiseKeyEntry(
// EKEY
offset = PAIRWISE_KEY_TABLE_BASE + (WCID * HW_KEY_ENTRY_SIZE);
+#ifdef RT2860
for (i=0; i<MAX_LEN_OF_PEER_KEY; i++)
{
RTMP_IO_WRITE8(pAd, offset + i, pKey[i]);
}
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite(pAd, offset, &pCipherKey->Key[0], MAX_LEN_OF_PEER_KEY);
+#endif // RT2870 //
for (i=0; i<MAX_LEN_OF_PEER_KEY; i+=4)
{
UINT32 Value;
@@ -7539,18 +7786,28 @@ VOID AsicAddPairwiseKeyEntry(
// MIC KEY
if (pTxMic)
{
+#ifdef RT2860
for (i=0; i<8; i++)
{
RTMP_IO_WRITE8(pAd, offset+i, pTxMic[i]);
}
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite(pAd, offset, &pCipherKey->TxMic[0], 8);
+#endif // RT2870 //
}
offset += 8;
if (pRxMic)
{
+#ifdef RT2860
for (i=0; i<8; i++)
{
RTMP_IO_WRITE8(pAd, offset+i, pRxMic[i]);
}
+#endif
+#ifdef RT2870
+ RTUSBMultiWrite(pAd, offset, &pCipherKey->RxMic[0], 8);
+#endif // RT2870 //
}
DBGPRINT(RT_DEBUG_TRACE,("AsicAddPairwiseKeyEntry: WCID #%d Alg=%s\n",WCID, CipherName[CipherAlg]));
@@ -7599,9 +7856,7 @@ BOOLEAN AsicSendCommandToMcu(
HOST_CMD_CSR_STRUC H2MCmd;
H2M_MAILBOX_STRUC H2MMailbox;
ULONG i = 0;
-#ifdef RALINK_ATE
- static UINT32 j = 0;
-#endif // RALINK_ATE //
+
do
{
RTMP_IO_READ32(pAd, H2M_MAILBOX_CSR, &H2MMailbox.word);
@@ -7611,33 +7866,10 @@ BOOLEAN AsicSendCommandToMcu(
RTMPusecDelay(2);
} while(i++ < 100);
- if (i >= 100)
+ if (i > 100)
{
-#ifdef RALINK_ATE
- if (pAd->ate.bFWLoading == TRUE)
- {
- /* reloading firmware when received iwpriv cmd "ATE=ATESTOP" */
- if (j > 0)
- {
- if (j % 64 != 0)
- {
- DBGPRINT(RT_DEBUG_ERROR, ("#"));
- }
- else
- {
- DBGPRINT(RT_DEBUG_ERROR, ("\n"));
- }
- ++j;
- }
- else if (j == 0)
- {
- DBGPRINT(RT_DEBUG_ERROR, ("Loading firmware. Please wait for a moment...\n"));
- ++j;
- }
- }
- else
-#endif // RALINK_ATE //
{
+#ifdef RT2860
UINT32 Data;
// Reset DMA
@@ -7659,21 +7891,15 @@ BOOLEAN AsicSendCommandToMcu(
RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &Data);
Data &= 0xfffffffd;
RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, Data);
+#endif /* RT2860 */
DBGPRINT_ERR(("H2M_MAILBOX still hold by MCU. command fail\n"));
}
//return FALSE;
+#ifdef RT2870
+ return FALSE;
+#endif
}
-#ifdef RALINK_ATE
- else if (pAd->ate.bFWLoading == TRUE)
- {
- /* reloading of firmware is completed */
- pAd->ate.bFWLoading = FALSE;
- DBGPRINT(RT_DEBUG_ERROR, ("\n"));
- j = 0;
- }
-#endif // RALINK_ATE //
-
H2MMailbox.field.Owner = 1; // pass ownership to MCU
H2MMailbox.field.CmdToken = Token;
H2MMailbox.field.HighByte = Arg1;
@@ -7691,6 +7917,7 @@ BOOLEAN AsicSendCommandToMcu(
return TRUE;
}
+#ifdef RT2860
BOOLEAN AsicCheckCommanOk(
IN PRTMP_ADAPTER pAd,
IN UCHAR Command)
@@ -7755,6 +7982,7 @@ BOOLEAN AsicCheckCommanOk(
return FALSE;
}
+#endif /* RT8260 */
/*
========================================================================
@@ -7797,8 +8025,6 @@ VOID RTMPCheckRates(
NdisMoveMemory(SupRate, NewRate, NewRateLen);
}
-#ifdef CONFIG_STA_SUPPORT
-#ifdef DOT11_N_SUPPORT
BOOLEAN RTMPCheckChannel(
IN PRTMP_ADAPTER pAd,
IN UCHAR CentralChannel,
@@ -7944,8 +8170,6 @@ BOOLEAN RTMPCheckHt(
COPY_AP_HTSETTINGS_FROM_BEACON(pAd, pHtCapability);
return TRUE;
}
-#endif // DOT11_N_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
/*
========================================================================
@@ -7978,10 +8202,8 @@ 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
@@ -7995,13 +8217,11 @@ 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;
@@ -8111,6 +8331,58 @@ CHAR RTMPMaxRssi(
return larger;
}
+#ifdef RT30xx
+// Antenna divesity use GPIO3 and EESK pin for control
+// Antenna and EEPROM access are both using EESK pin,
+// Therefor we should avoid accessing EESK at the same time
+// Then restore antenna after EEPROM access
+VOID AsicSetRxAnt(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR Ant)
+{
+#ifdef RT30xx
+ UINT32 Value;
+ UINT32 x;
+
+ if ((pAd->EepromAccess) ||
+ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS)) ||
+ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS)) ||
+ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RADIO_OFF)) ||
+ (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
+ {
+ return;
+ }
+
+ // the antenna selection is through firmware and MAC register(GPIO3)
+ if (Ant == 0)
+ {
+ // Main antenna
+ RTMP_IO_READ32(pAd, E2PROM_CSR, &x);
+ x |= (EESK);
+ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x);
+
+ RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value);
+ Value &= ~(0x0808);
+ RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value);
+ DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to main antenna\n"));
+ }
+ else
+ {
+ // Aux antenna
+ RTMP_IO_READ32(pAd, E2PROM_CSR, &x);
+ x &= ~(EESK);
+ RTMP_IO_WRITE32(pAd, E2PROM_CSR, x);
+
+ RTMP_IO_READ32(pAd, GPIO_CTRL_CFG, &Value);
+ Value &= ~(0x0808);
+ Value |= 0x08;
+ RTMP_IO_WRITE32(pAd, GPIO_CTRL_CFG, Value);
+ DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicSetRxAnt, switch to aux antenna\n"));
+ }
+#endif // RT30xx //
+}
+#endif /* RT30xx */
+
/*
========================================================================
Routine Description:
@@ -8129,14 +8401,7 @@ VOID AsicEvaluateRxAnt(
{
UCHAR BBPR3 = 0;
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+#ifndef RT30xx
{
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS |
fRTMP_ADAPTER_HALT_IN_PROGRESS |
@@ -8148,7 +8413,6 @@ VOID AsicEvaluateRxAnt(
if (pAd->StaCfg.Psm == PWR_SAVE)
return;
}
-#endif // CONFIG_STA_SUPPORT //
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3);
BBPR3 &= (~0x18);
@@ -8165,10 +8429,11 @@ VOID AsicEvaluateRxAnt(
BBPR3 |= (0x0);
}
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+
+#ifdef RT2860
pAd->StaCfg.BBPR3 = BBPR3;
-#endif // CONFIG_STA_SUPPORT //
+#endif
+#ifdef RT2870
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)
)
{
@@ -8187,6 +8452,90 @@ VOID AsicEvaluateRxAnt(
pAd->Mlme.bLowThroughput = TRUE;
}
}
+#endif
+#endif /* RT30xx */
+#ifdef RT30xx
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS |
+ fRTMP_ADAPTER_HALT_IN_PROGRESS |
+ fRTMP_ADAPTER_RADIO_OFF |
+ fRTMP_ADAPTER_NIC_NOT_EXIST |
+ fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS) ||
+ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)
+#ifdef RT30xx
+ || (pAd->EepromAccess)
+#endif // RT30xx //
+ )
+ return;
+
+
+ {
+ //if (pAd->StaCfg.Psm == PWR_SAVE)
+ // return;
+ }
+
+ // two antenna selection mechanism- one is antenna diversity, the other is failed antenna remove
+ // one is antenna diversity:there is only one antenna can rx and tx
+ // the other is failed antenna remove:two physical antenna can rx and tx
+ if (pAd->NicConfig2.field.AntDiversity)
+ {
+ DBGPRINT(RT_DEBUG_TRACE,("AntDiv - before evaluate Pair1-Ant (%d,%d)\n",
+ pAd->RxAnt.Pair1PrimaryRxAnt, pAd->RxAnt.Pair1SecondaryRxAnt));
+
+ AsicSetRxAnt(pAd, pAd->RxAnt.Pair1SecondaryRxAnt);
+
+ pAd->RxAnt.EvaluatePeriod = 1; // 1:Means switch to SecondaryRxAnt, 0:Means switch to Pair1PrimaryRxAnt
+ pAd->RxAnt.FirstPktArrivedWhenEvaluate = FALSE;
+ pAd->RxAnt.RcvPktNumWhenEvaluate = 0;
+
+ // a one-shot timer to end the evalution
+ // dynamic adjust antenna evaluation period according to the traffic
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED))
+ RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 100);
+ else
+ RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 300);
+ }
+ else
+ {
+ if (pAd->StaCfg.Psm == PWR_SAVE)
+ return;
+
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3);
+ BBPR3 &= (~0x18);
+ if(pAd->Antenna.field.RxPath == 3)
+ {
+ BBPR3 |= (0x10);
+ }
+ else if(pAd->Antenna.field.RxPath == 2)
+ {
+ BBPR3 |= (0x8);
+ }
+ else if(pAd->Antenna.field.RxPath == 1)
+ {
+ BBPR3 |= (0x0);
+ }
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3);
+ }
+#endif /* RT30xx */
+
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)
+ )
+ {
+ ULONG TxTotalCnt = pAd->RalinkCounters.OneSecTxNoRetryOkCount +
+ pAd->RalinkCounters.OneSecTxRetryOkCount +
+ pAd->RalinkCounters.OneSecTxFailCount;
+
+ // dynamic adjust antenna evaluation period according to the traffic
+ if (TxTotalCnt > 50)
+ {
+ RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 20);
+ pAd->Mlme.bLowThroughput = FALSE;
+ }
+ else
+ {
+ RTMPSetTimer(&pAd->Mlme.RxAntEvalTimer, 300);
+ pAd->Mlme.bLowThroughput = TRUE;
+ }
+ }
}
/*
@@ -8209,19 +8558,10 @@ VOID AsicRxAntEvalTimeout(
IN PVOID SystemSpecific3)
{
RTMP_ADAPTER *pAd = (RTMP_ADAPTER *)FunctionContext;
-#ifdef CONFIG_STA_SUPPORT
UCHAR BBPR3 = 0;
CHAR larger = -127, rssi0, rssi1, rssi2;
-#endif // CONFIG_STA_SUPPORT //
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+#ifndef RT30xx
{
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) ||
RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS) ||
@@ -8279,11 +8619,111 @@ VOID AsicRxAntEvalTimeout(
BBPR3 |= (0x0);
}
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3);
+#ifdef RT2860
pAd->StaCfg.BBPR3 = BBPR3;
+#endif
}
+#endif /* RT30xx */
+#ifdef RT30xx
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS |
+ fRTMP_ADAPTER_HALT_IN_PROGRESS |
+ fRTMP_ADAPTER_RADIO_OFF |
+ fRTMP_ADAPTER_NIC_NOT_EXIST) ||
+ OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE)
+#ifdef RT30xx
+ || (pAd->EepromAccess)
+#endif // RT30xx //
+ )
+ return;
-#endif // CONFIG_STA_SUPPORT //
+ {
+ //if (pAd->StaCfg.Psm == PWR_SAVE)
+ // return;
+ if (pAd->NicConfig2.field.AntDiversity)
+ {
+ if ((pAd->RxAnt.RcvPktNumWhenEvaluate != 0) && (pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1SecondaryRxAnt] >= pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1PrimaryRxAnt]))
+ {
+ UCHAR temp;
+
+ //
+ // select PrimaryRxAntPair
+ // Role change, Used Pair1SecondaryRxAnt as PrimaryRxAntPair.
+ // Since Pair1SecondaryRxAnt Quality good than Pair1PrimaryRxAnt
+ //
+ temp = pAd->RxAnt.Pair1PrimaryRxAnt;
+ pAd->RxAnt.Pair1PrimaryRxAnt = pAd->RxAnt.Pair1SecondaryRxAnt;
+ pAd->RxAnt.Pair1SecondaryRxAnt = temp;
+
+ pAd->RxAnt.Pair1LastAvgRssi = (pAd->RxAnt.Pair1AvgRssi[pAd->RxAnt.Pair1SecondaryRxAnt] >> 3);
+ pAd->RxAnt.EvaluateStableCnt = 0;
+ }
+ else
+ {
+ // if the evaluated antenna is not better than original, switch back to original antenna
+ AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt);
+ pAd->RxAnt.EvaluateStableCnt ++;
+ }
+
+ pAd->RxAnt.EvaluatePeriod = 0; // 1:Means switch to SecondaryRxAnt, 0:Means switch to Pair1PrimaryRxAnt
+
+ DBGPRINT(RT_DEBUG_TRACE,("AsicRxAntEvalAction::After Eval(fix in #%d), <%d, %d>, RcvPktNumWhenEvaluate=%ld\n",
+ pAd->RxAnt.Pair1PrimaryRxAnt, (pAd->RxAnt.Pair1AvgRssi[0] >> 3), (pAd->RxAnt.Pair1AvgRssi[1] >> 3), pAd->RxAnt.RcvPktNumWhenEvaluate));
+ }
+ else
+ {
+ if (pAd->StaCfg.Psm == PWR_SAVE)
+ return;
+
+ // if the traffic is low, use average rssi as the criteria
+ if (pAd->Mlme.bLowThroughput == TRUE)
+ {
+ rssi0 = pAd->StaCfg.RssiSample.LastRssi0;
+ rssi1 = pAd->StaCfg.RssiSample.LastRssi1;
+ rssi2 = pAd->StaCfg.RssiSample.LastRssi2;
+ }
+ else
+ {
+ rssi0 = pAd->StaCfg.RssiSample.AvgRssi0;
+ rssi1 = pAd->StaCfg.RssiSample.AvgRssi1;
+ rssi2 = pAd->StaCfg.RssiSample.AvgRssi2;
+ }
+
+ if(pAd->Antenna.field.RxPath == 3)
+ {
+ larger = max(rssi0, rssi1);
+
+ if (larger > (rssi2 + 20))
+ pAd->Mlme.RealRxPath = 2;
+ else
+ pAd->Mlme.RealRxPath = 3;
+ }
+ else if(pAd->Antenna.field.RxPath == 2)
+ {
+ if (rssi0 > (rssi1 + 20))
+ pAd->Mlme.RealRxPath = 1;
+ else
+ pAd->Mlme.RealRxPath = 2;
+ }
+
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BBPR3);
+ BBPR3 &= (~0x18);
+ if(pAd->Mlme.RealRxPath == 3)
+ {
+ BBPR3 |= (0x10);
+ }
+ else if(pAd->Mlme.RealRxPath == 2)
+ {
+ BBPR3 |= (0x8);
+ }
+ else if(pAd->Mlme.RealRxPath == 1)
+ {
+ BBPR3 |= (0x0);
+ }
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3);
+ }
+ }
+#endif /* RT30xx */
}
@@ -8350,9 +8790,6 @@ BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
{
BOOLEAN result = TRUE;
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// only associated STA counts
if (pEntry && (pEntry->ValidAsCLI) && (pEntry->Sst == SST_ASSOC))
@@ -8361,15 +8798,7 @@ 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;
}
@@ -8378,14 +8807,9 @@ BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
BOOLEAN RTMPAutoRateSwitchCheck(
IN PRTMP_ADAPTER pAd)
{
+ if (pAd->StaCfg.bAutoTxRateSwitch)
+ return TRUE;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- if (pAd->StaCfg.bAutoTxRateSwitch)
- return TRUE;
- }
-#endif // CONFIG_STA_SUPPORT //
return FALSE;
}
@@ -8411,13 +8835,7 @@ UCHAR RTMPStaFixedTxMode(
{
UCHAR tx_mode = FIXED_TXMODE_HT;
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- tx_mode = (UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode;
- }
-#endif // CONFIG_STA_SUPPORT //
+ tx_mode = (UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode;
return tx_mode;
}
@@ -8474,7 +8892,6 @@ VOID RTMPUpdateLegacyTxSetting(
}
}
-#ifdef CONFIG_STA_SUPPORT
/*
==========================================================================
Description:
@@ -8505,7 +8922,12 @@ VOID AsicStaBbpTuning(
&& (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED)
)
&& !(OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
+#ifdef RT2860
&& (pAd->bPCIclkOff == FALSE))
+#endif
+#ifdef RT2870
+ )
+#endif
{
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &OrigR66Value);
R66 = OrigR66Value;
@@ -8517,6 +8939,45 @@ VOID AsicStaBbpTuning(
if (pAd->LatchRfRegs.Channel <= 14)
{ //BG band
+#ifdef RT2870
+ // RT3070 is a no LNA solution, it should have different control regarding to AGC gain control
+ // Otherwise, it will have some throughput side effect when low RSSI
+#ifndef RT30xx
+ if (IS_RT3070(pAd))
+#endif
+#ifdef RT30xx
+ if (IS_RT30xx(pAd))
+#endif
+ {
+ if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY)
+ {
+ R66 = 0x1C + 2*GET_LNA_GAIN(pAd) + 0x20;
+ if (OrigR66Value != R66)
+ {
+#ifndef RT30xx
+ RTUSBWriteBBPRegister(pAd, BBP_R66, R66);
+#endif
+#ifdef RT30xx
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
+#endif
+ }
+ }
+ else
+ {
+ R66 = 0x1C + 2*GET_LNA_GAIN(pAd);
+ if (OrigR66Value != R66)
+ {
+#ifndef RT30xx
+ RTUSBWriteBBPRegister(pAd, BBP_R66, R66);
+#endif
+#ifdef RT30xx
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
+#endif
+ }
+ }
+ }
+ else
+#endif // RT2870 //
{
if (Rssi > RSSI_FOR_MID_LOW_SENSIBILITY)
{
@@ -8582,6 +9043,7 @@ VOID AsicStaBbpTuning(
}
}
+#ifdef RT2860
VOID AsicResetFromDMABusy(
IN PRTMP_ADAPTER pAd)
{
@@ -8681,7 +9143,7 @@ VOID AsicResetPBF(
DBGPRINT(RT_DEBUG_TRACE, ("<--- Asic HardReset PBF !!!! \n"));
}
}
-#endif // CONFIG_STA_SUPPORT //
+#endif /* RT2860 */
VOID RTMPSetAGCInitValue(
IN PRTMP_ADAPTER pAd,
@@ -8701,13 +9163,11 @@ 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 //
}
}
@@ -8722,6 +9182,15 @@ VOID AsicTurnOffRFClk(
UCHAR index;
RTMP_RF_REGS *RFRegTable;
+#ifdef RT30xx
+ // The RF programming sequence is difference between 3xxx and 2xxx
+ if (IS_RT3090(pAd))
+ {
+ RT30xxLoadRFSleepModeSetup(pAd); // add by johnli, RF power sequence setup, load RF sleep-mode setup
+ }
+ else
+ {
+#endif // RT30xx //
RFRegTable = RF2850RegTable;
switch (pAd->RfIcType)
@@ -8763,6 +9232,10 @@ VOID AsicTurnOffRFClk(
default:
break;
}
+#ifdef RT30xx
+ }
+#endif // RT30xx //
+
}
@@ -8776,6 +9249,14 @@ VOID AsicTurnOnRFClk(
UCHAR index;
RTMP_RF_REGS *RFRegTable;
+#ifdef RT30xx
+ // The RF programming sequence is difference between 3xxx and 2xxx
+ if (IS_RT3090(pAd))
+ {
+ }
+ else
+ {
+#endif // RT30xx //
RFRegTable = RF2850RegTable;
switch (pAd->RfIcType)
@@ -8822,9 +9303,14 @@ VOID AsicTurnOnRFClk(
break;
}
+#ifndef RT30xx
DBGPRINT(RT_DEBUG_TRACE, ("AsicTurnOnRFClk#%d(RF=%d, ) , R2=0x%08x\n",
Channel,
pAd->RfIcType,
R2));
+#endif
+#ifdef RT30xx
+ }
+#endif // RT30xx //
}
diff --git a/drivers/staging/rt2860/common/netif_block.c b/drivers/staging/rt2860/common/netif_block.c
deleted file mode 100644
index d3f7d087e7f0..000000000000
--- a/drivers/staging/rt2860/common/netif_block.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
- */
-
-#include "../rt_config.h"
-#include "netif_block.h"
-
-static NETIF_ENTRY freeNetIfEntryPool[FREE_NETIF_POOL_SIZE];
-static LIST_HEADER freeNetIfEntryList;
-
-void initblockQueueTab(
- IN PRTMP_ADAPTER pAd)
-{
- int i;
-
- initList(&freeNetIfEntryList);
- for (i = 0; i < FREE_NETIF_POOL_SIZE; i++)
- insertTailList(&freeNetIfEntryList, (PLIST_ENTRY)&freeNetIfEntryPool[i]);
-
- for (i=0; i < NUM_OF_TX_RING; i++)
- initList(&pAd->blockQueueTab[i].NetIfList);
-
- return;
-}
-
-BOOLEAN blockNetIf(
- IN PBLOCK_QUEUE_ENTRY pBlockQueueEntry,
- IN PNET_DEV pNetDev)
-{
- PNETIF_ENTRY pNetIfEntry = NULL;
-
- if ((pNetIfEntry = (PNETIF_ENTRY)removeHeadList(&freeNetIfEntryList)) != NULL)
- {
- netif_stop_queue(pNetDev);
- pNetIfEntry->pNetDev = pNetDev;
- insertTailList(&pBlockQueueEntry->NetIfList, (PLIST_ENTRY)pNetIfEntry);
-
- pBlockQueueEntry->SwTxQueueBlockFlag = TRUE;
- DBGPRINT(RT_DEBUG_TRACE, ("netif_stop_queue(%s)\n", pNetDev->name));
- }
- else
- return FALSE;
-
- return TRUE;
-}
-
-VOID releaseNetIf(
- IN PBLOCK_QUEUE_ENTRY pBlockQueueEntry)
-{
- PNETIF_ENTRY pNetIfEntry = NULL;
- PLIST_HEADER pNetIfList = &pBlockQueueEntry->NetIfList;
-
- while((pNetIfEntry = (PNETIF_ENTRY)removeHeadList(pNetIfList)) != NULL)
- {
- PNET_DEV pNetDev = pNetIfEntry->pNetDev;
- netif_wake_queue(pNetDev);
- insertTailList(&freeNetIfEntryList, (PLIST_ENTRY)pNetIfEntry);
-
- DBGPRINT(RT_DEBUG_TRACE, ("netif_wake_queue(%s)\n", pNetDev->name));
- }
- pBlockQueueEntry->SwTxQueueBlockFlag = FALSE;
- return;
-}
-
-
-VOID StopNetIfQueue(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR QueIdx,
- IN PNDIS_PACKET pPacket)
-{
- PNET_DEV NetDev = NULL;
- UCHAR IfIdx = 0;
- BOOLEAN valid = FALSE;
-
-#ifdef APCLI_SUPPORT
- if (RTMP_GET_PACKET_NET_DEVICE(pPacket) >= MIN_NET_DEVICE_FOR_APCLI)
- {
- IfIdx = (RTMP_GET_PACKET_NET_DEVICE(pPacket) - MIN_NET_DEVICE_FOR_APCLI) % MAX_APCLI_NUM;
- NetDev = pAd->ApCfg.ApCliTab[IfIdx].dev;
- }
- else
-#endif // APCLI_SUPPORT //
-#ifdef WDS_SUPPORT
- if (RTMP_GET_PACKET_NET_DEVICE(pPacket) >= MIN_NET_DEVICE_FOR_WDS)
- {
- IfIdx = (RTMP_GET_PACKET_NET_DEVICE(pPacket) - MIN_NET_DEVICE_FOR_WDS) % MAX_WDS_ENTRY;
- NetDev = pAd->WdsTab.WdsEntry[IfIdx].dev;
- }
- else
-#endif // WDS_SUPPORT //
- {
-#ifdef MBSS_SUPPORT
- if (pAd->OpMode == OPMODE_AP)
- {
- IfIdx = (RTMP_GET_PACKET_NET_DEVICE(pPacket) - MIN_NET_DEVICE_FOR_MBSSID) % MAX_MBSSID_NUM;
- NetDev = pAd->ApCfg.MBSSID[IfIdx].MSSIDDev;
- }
- else
- {
- IfIdx = MAIN_MBSSID;
- NetDev = pAd->net_dev;
- }
-#else
- IfIdx = MAIN_MBSSID;
- NetDev = pAd->net_dev;
-#endif
- }
-
- // WMM support 4 software queues.
- // One software queue full doesn't mean device have no capbility to transmit packet.
- // So disable block Net-If queue function while WMM enable.
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- valid = (pAd->CommonCfg.bWmmCapable == TRUE) ? FALSE : TRUE;
-#endif // CONFIG_STA_SUPPORT //
-
- if (valid)
- blockNetIf(&pAd->blockQueueTab[QueIdx], NetDev);
- return;
-}
-
diff --git a/drivers/staging/rt2860/common/netif_block.h b/drivers/staging/rt2860/common/netif_block.h
deleted file mode 100644
index 6e5151c41095..000000000000
--- a/drivers/staging/rt2860/common/netif_block.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
- */
-
-#ifndef __NET_IF_BLOCK_H__
-#define __NET_IF_BLOCK_H__
-
-//#include <linux/device.h>
-#include "link_list.h"
-#include "rtmp.h"
-
-#define FREE_NETIF_POOL_SIZE 32
-
-typedef struct _NETIF_ENTRY
-{
- struct _NETIF_ENTRY *pNext;
- PNET_DEV pNetDev;
-} NETIF_ENTRY, *PNETIF_ENTRY;
-
-void initblockQueueTab(
- IN PRTMP_ADAPTER pAd);
-
-BOOLEAN blockNetIf(
- IN PBLOCK_QUEUE_ENTRY pBlockQueueEntry,
- IN PNET_DEV pNetDev);
-
-VOID releaseNetIf(
- IN PBLOCK_QUEUE_ENTRY pBlockQueueEntry);
-
-VOID StopNetIfQueue(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR QueIdx,
- IN PNDIS_PACKET pPacket);
-#endif // __NET_IF_BLOCK_H__
-
diff --git a/drivers/staging/rt2860/common/rtmp_init.c b/drivers/staging/rt2860/common/rtmp_init.c
index 8a00cee3ee91..004f53023b0f 100644
--- a/drivers/staging/rt2860/common/rtmp_init.c
+++ b/drivers/staging/rt2860/common/rtmp_init.c
@@ -38,8 +38,18 @@
Jan Lee 2006-09-15 RT2860. Change for 802.11n , EEPROM, Led, BA, HT.
*/
#include "../rt_config.h"
-#include "firmware.h"
+#ifndef RT30xx
+#ifdef RT2860
+#include "firmware.h"
#include <linux/bitrev.h>
+#endif
+#ifdef RT2870
+#include "../../rt2870/common/firmware.h"
+#endif
+#endif
+#ifdef RT30xx
+#include "../../rt3070/firmware.h"
+#endif
UCHAR BIT8[] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
ULONG BIT32[] = {0x00000001, 0x00000002, 0x00000004, 0x00000008,
@@ -90,6 +100,22 @@ const unsigned short ccitt_16Table[] = {
#define ByteCRC16(v, crc) \
(unsigned short)((crc << 8) ^ ccitt_16Table[((crc >> 8) ^ (v)) & 255])
+#ifdef RT2870
+unsigned char BitReverse(unsigned char x)
+{
+ int i;
+ unsigned char Temp=0;
+ for(i=0; ; i++)
+ {
+ if(x & 0x80) Temp |= 0x80;
+ if(i==7) break;
+ x <<= 1;
+ Temp >>= 1;
+ }
+ return Temp;
+}
+#endif
+
//
// BBP register initialization set
//
@@ -114,6 +140,38 @@ REG_PAIR BBPRegTable[] = {
//
// RF register initialization set
//
+#ifdef RT2870
+REG_PAIR RT30xx_RFRegTable[] = {
+ {RF_R04, 0x40},
+ {RF_R05, 0x03},
+ {RF_R06, 0x02},
+ {RF_R07, 0x70},
+ {RF_R09, 0x0F},
+#ifndef RT30xx
+ {RF_R10, 0x71},
+#endif
+#ifdef RT30xx
+ {RF_R10, 0x41},
+#endif
+ {RF_R11, 0x21},
+ {RF_R12, 0x7B},
+ {RF_R14, 0x90},
+ {RF_R15, 0x58},
+ {RF_R16, 0xB3},
+ {RF_R17, 0x92},
+ {RF_R18, 0x2C},
+ {RF_R19, 0x02},
+ {RF_R20, 0xBA},
+ {RF_R21, 0xDB},
+ {RF_R24, 0x16},
+ {RF_R25, 0x01},
+#ifndef RT30xx
+ {RF_R27, 0x03},
+#endif
+ {RF_R29, 0x1F},
+};
+#define NUM_RF_REG_PARMS (sizeof(RT30xx_RFRegTable) / sizeof(REG_PAIR))
+#endif // RT2870 //
//
// ASIC register initialization sets
@@ -146,10 +204,18 @@ RTMP_REG_PAIR MACRegTable[] = {
{AUTO_RSP_CFG, 0x00000013}, // Initial Auto_Responder, because QA will turn off Auto-Responder
{CCK_PROT_CFG, 0x05740003 /*0x01740003*/}, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled.
{OFDM_PROT_CFG, 0x05740003 /*0x01740003*/}, // Initial Auto_Responder, because QA will turn off Auto-Responder. And RTS threshold is enabled.
+//PS packets use Tx1Q (for HCCA) when dequeue from PS unicast queue (WiFi WPA2 MA9_DT1 for Marvell B STA)
+#ifdef RT2870
+ {PBF_CFG, 0xf40006}, // Only enable Queue 2
+ {MM40_PROT_CFG, 0x3F44084}, // Initial Auto_Responder, because QA will turn off Auto-Responder
+ {WPDMA_GLO_CFG, 0x00000030},
+#endif // RT2870 //
{GF20_PROT_CFG, 0x01744004}, // set 19:18 --> Short NAV for MIMO PS
{GF40_PROT_CFG, 0x03F44084},
{MM20_PROT_CFG, 0x01744004},
+#ifdef RT2860
{MM40_PROT_CFG, 0x03F54084},
+#endif
{TXOP_CTRL_CFG, 0x0000583f, /*0x0000243f*/ /*0x000024bf*/}, //Extension channel backoff.
{TX_RTS_CFG, 0x00092b20},
{EXP_ACK_TIME, 0x002400ca}, // default value
@@ -163,20 +229,22 @@ RTMP_REG_PAIR MACRegTable[] = {
{PWR_PIN_CFG, 0x00000003}, // patch for 2880-E
};
-
-#ifdef CONFIG_STA_SUPPORT
RTMP_REG_PAIR STAMACRegTable[] = {
{WMM_AIFSN_CFG, 0x00002273},
{WMM_CWMIN_CFG, 0x00002344},
{WMM_CWMAX_CFG, 0x000034aa},
};
-#endif // CONFIG_STA_SUPPORT //
#define NUM_MAC_REG_PARMS (sizeof(MACRegTable) / sizeof(RTMP_REG_PAIR))
-#ifdef CONFIG_STA_SUPPORT
#define NUM_STA_MAC_REG_PARMS (sizeof(STAMACRegTable) / sizeof(RTMP_REG_PAIR))
-#endif // CONFIG_STA_SUPPORT //
+#ifdef RT2870
+//
+// RT2870 Firmware Spec only used 1 oct for version expression
+//
+#define FIRMWARE_MINOR_VERSION 7
+
+#endif // RT2870 //
// New 8k byte firmware size for RT3071/RT3072
#define FIRMWAREIMAGE_MAX_LENGTH 0x2000
@@ -186,7 +254,9 @@ RTMP_REG_PAIR STAMACRegTable[] = {
#define FIRMWAREIMAGEV1_LENGTH 0x1000
#define FIRMWAREIMAGEV2_LENGTH 0x1000
+#ifdef RT2860
#define FIRMWARE_MINOR_VERSION 2
+#endif
/*
@@ -244,7 +314,9 @@ NDIS_STATUS RTMPAllocAdapterBlock(
// Init spin locks
NdisAllocateSpinLock(&pAd->MgmtRingLock);
+#ifdef RT2860
NdisAllocateSpinLock(&pAd->RxRingLock);
+#endif
for (index =0 ; index < NUM_OF_TX_RING; index++)
{
@@ -974,67 +1046,6 @@ VOID RTMPReadChannelPwr(
// 4. Print and Debug
choffset = 14 + 12 + 16 + 7;
-
-
-#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++)
- {
- 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
}
/*
@@ -1071,6 +1082,425 @@ NDIS_STATUS NICReadRegParameters(
}
+#ifdef RT2870
+/*
+ ========================================================================
+
+ Routine Description:
+ For RF filter calibration purpose
+
+ Arguments:
+ pAd Pointer to our adapter
+
+ Return Value:
+ None
+
+ IRQL = PASSIVE_LEVEL
+
+ ========================================================================
+*/
+#ifndef RT30xx
+VOID RTUSBFilterCalibration(
+ IN PRTMP_ADAPTER pAd)
+{
+ UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue;
+ UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0;
+ UCHAR RF_R24_Value = 0;
+
+ // Give bbp filter initial value
+ pAd->Mlme.CaliBW20RfR24 = 0x16;
+ pAd->Mlme.CaliBW40RfR24 = 0x36; //Bit[5] must be 1 for BW 40
+
+ do
+ {
+ if (loop == 1) //BandWidth = 40 MHz
+ {
+ // Write 0x27 to RF_R24 to program filter
+ RF_R24_Value = 0x27;
+ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
+ FilterTarget = 0x19;
+
+ // when calibrate BW40, BBP mask must set to BW40.
+ RTUSBReadBBPRegister(pAd, BBP_R4, &BBPValue);
+ BBPValue&= (~0x18);
+ BBPValue|= (0x10);
+ RTUSBWriteBBPRegister(pAd, BBP_R4, BBPValue);
+ }
+ else //BandWidth = 20 MHz
+ {
+ // Write 0x07 to RF_R24 to program filter
+ RF_R24_Value = 0x07;
+ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
+ FilterTarget = 0x16;
+ }
+
+ // Write 0x01 to RF_R22 to enable baseband loopback mode
+ RT30xxReadRFRegister(pAd, RF_R22, &value);
+ value |= 0x01;
+ RT30xxWriteRFRegister(pAd, RF_R22, value);
+
+ // Write 0x00 to BBP_R24 to set power & frequency of passband test tone
+ RTUSBWriteBBPRegister(pAd, BBP_R24, 0);
+
+ do
+ {
+ // Write 0x90 to BBP_R25 to transmit test tone
+ RTUSBWriteBBPRegister(pAd, BBP_R25, 0x90);
+
+ RTMPusecDelay(1000);
+ // Read BBP_R55[6:0] for received power, set R55x = BBP_R55[6:0]
+ RTUSBReadBBPRegister(pAd, BBP_R55, &value);
+ R55x = value & 0xFF;
+
+ } while ((ReTry++ < 100) && (R55x == 0));
+
+ // Write 0x06 to BBP_R24 to set power & frequency of stopband test tone
+ RTUSBWriteBBPRegister(pAd, BBP_R24, 0x06);
+
+ while(TRUE)
+ {
+ // Write 0x90 to BBP_R25 to transmit test tone
+ RTUSBWriteBBPRegister(pAd, BBP_R25, 0x90);
+
+ //We need to wait for calibration
+ RTMPusecDelay(1000);
+ RTUSBReadBBPRegister(pAd, BBP_R55, &value);
+ value &= 0xFF;
+ if ((R55x - value) < FilterTarget)
+ {
+ RF_R24_Value ++;
+ }
+ else if ((R55x - value) == FilterTarget)
+ {
+ RF_R24_Value ++;
+ count ++;
+ }
+ else
+ {
+ break;
+ }
+
+ // prevent infinite loop cause driver hang.
+ if (loopcnt++ > 100)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("RTUSBFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", loopcnt));
+ break;
+ }
+
+ // Write RF_R24 to program filter
+ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
+ }
+
+ if (count > 0)
+ {
+ RF_R24_Value = RF_R24_Value - ((count) ? (1) : (0));
+ }
+
+ // Store for future usage
+ if (loopcnt < 100)
+ {
+ if (loop++ == 0)
+ {
+ //BandWidth = 20 MHz
+ pAd->Mlme.CaliBW20RfR24 = (UCHAR)RF_R24_Value;
+ }
+ else
+ {
+ //BandWidth = 40 MHz
+ pAd->Mlme.CaliBW40RfR24 = (UCHAR)RF_R24_Value;
+ break;
+ }
+ }
+ else
+ break;
+
+ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
+
+ // reset count
+ count = 0;
+ } while(TRUE);
+
+ //
+ // Set back to initial state
+ //
+ RTUSBWriteBBPRegister(pAd, BBP_R24, 0);
+
+ RT30xxReadRFRegister(pAd, RF_R22, &value);
+ value &= ~(0x01);
+ RT30xxWriteRFRegister(pAd, RF_R22, value);
+
+ // set BBP back to BW20
+ RTUSBReadBBPRegister(pAd, BBP_R4, &BBPValue);
+ BBPValue&= (~0x18);
+ RTUSBWriteBBPRegister(pAd, BBP_R4, BBPValue);
+
+ DBGPRINT(RT_DEBUG_TRACE, ("RTUSBFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n", pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24));
+}
+#endif /* RT30xx */
+#ifdef RT30xx
+VOID RTMPFilterCalibration(
+ IN PRTMP_ADAPTER pAd)
+{
+ UCHAR R55x = 0, value, FilterTarget = 0x1E, BBPValue=0;
+ UINT loop = 0, count = 0, loopcnt = 0, ReTry = 0;
+ UCHAR RF_R24_Value = 0;
+
+ // Give bbp filter initial value
+ pAd->Mlme.CaliBW20RfR24 = 0x1F;
+ pAd->Mlme.CaliBW40RfR24 = 0x2F; //Bit[5] must be 1 for BW 40
+
+ do
+ {
+ if (loop == 1) //BandWidth = 40 MHz
+ {
+ // Write 0x27 to RF_R24 to program filter
+ RF_R24_Value = 0x27;
+ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
+ if (IS_RT3090(pAd))
+ FilterTarget = 0x15;
+ else
+ FilterTarget = 0x19;
+
+ // when calibrate BW40, BBP mask must set to BW40.
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
+ BBPValue&= (~0x18);
+ BBPValue|= (0x10);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
+
+ // set to BW40
+ RT30xxReadRFRegister(pAd, RF_R31, &value);
+ value |= 0x20;
+ RT30xxWriteRFRegister(pAd, RF_R31, value);
+ }
+ else //BandWidth = 20 MHz
+ {
+ // Write 0x07 to RF_R24 to program filter
+ RF_R24_Value = 0x07;
+ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
+ if (IS_RT3090(pAd))
+ FilterTarget = 0x13;
+ else
+ FilterTarget = 0x16;
+
+ // set to BW20
+ RT30xxReadRFRegister(pAd, RF_R31, &value);
+ value &= (~0x20);
+ RT30xxWriteRFRegister(pAd, RF_R31, value);
+ }
+
+ // Write 0x01 to RF_R22 to enable baseband loopback mode
+ RT30xxReadRFRegister(pAd, RF_R22, &value);
+ value |= 0x01;
+ RT30xxWriteRFRegister(pAd, RF_R22, value);
+
+ // Write 0x00 to BBP_R24 to set power & frequency of passband test tone
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0);
+
+ do
+ {
+ // Write 0x90 to BBP_R25 to transmit test tone
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90);
+
+ RTMPusecDelay(1000);
+ // Read BBP_R55[6:0] for received power, set R55x = BBP_R55[6:0]
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value);
+ R55x = value & 0xFF;
+
+ } while ((ReTry++ < 100) && (R55x == 0));
+
+ // Write 0x06 to BBP_R24 to set power & frequency of stopband test tone
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0x06);
+
+ while(TRUE)
+ {
+ // Write 0x90 to BBP_R25 to transmit test tone
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R25, 0x90);
+
+ //We need to wait for calibration
+ RTMPusecDelay(1000);
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R55, &value);
+ value &= 0xFF;
+ if ((R55x - value) < FilterTarget)
+ {
+ RF_R24_Value ++;
+ }
+ else if ((R55x - value) == FilterTarget)
+ {
+ RF_R24_Value ++;
+ count ++;
+ }
+ else
+ {
+ break;
+ }
+
+ // prevent infinite loop cause driver hang.
+ if (loopcnt++ > 100)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("RTMPFilterCalibration - can't find a valid value, loopcnt=%d stop calibrating", loopcnt));
+ break;
+ }
+
+ // Write RF_R24 to program filter
+ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
+ }
+
+ if (count > 0)
+ {
+ RF_R24_Value = RF_R24_Value - ((count) ? (1) : (0));
+ }
+
+ // Store for future usage
+ if (loopcnt < 100)
+ {
+ if (loop++ == 0)
+ {
+ //BandWidth = 20 MHz
+ pAd->Mlme.CaliBW20RfR24 = (UCHAR)RF_R24_Value;
+ }
+ else
+ {
+ //BandWidth = 40 MHz
+ pAd->Mlme.CaliBW40RfR24 = (UCHAR)RF_R24_Value;
+ break;
+ }
+ }
+ else
+ break;
+
+ RT30xxWriteRFRegister(pAd, RF_R24, RF_R24_Value);
+
+ // reset count
+ count = 0;
+ } while(TRUE);
+
+ //
+ // Set back to initial state
+ //
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, 0);
+
+ RT30xxReadRFRegister(pAd, RF_R22, &value);
+ value &= ~(0x01);
+ RT30xxWriteRFRegister(pAd, RF_R22, value);
+
+ // set BBP back to BW20
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
+ BBPValue&= (~0x18);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BBPValue);
+
+ DBGPRINT(RT_DEBUG_TRACE, ("RTMPFilterCalibration - CaliBW20RfR24=0x%x, CaliBW40RfR24=0x%x\n", pAd->Mlme.CaliBW20RfR24, pAd->Mlme.CaliBW40RfR24));
+}
+#endif /* RT30xx */
+
+VOID NICInitRT30xxRFRegisters(IN PRTMP_ADAPTER pAd)
+{
+ INT i;
+ // Driver must read EEPROM to get RfIcType before initial RF registers
+ // Initialize RF register to default value
+#ifndef RT30xx
+ if (IS_RT3070(pAd) && ((pAd->RfIcType == RFIC_3020) ||(pAd->RfIcType == RFIC_2020)))
+ {
+ // Init RF calibration
+ // Driver should toggle RF R30 bit7 before init RF registers
+ ULONG RfReg = 0;
+ RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg);
+ RfReg |= 0x80;
+ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg);
+ RTMPusecDelay(1000);
+ RfReg &= 0x7F;
+ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg);
+
+ // Initialize RF register to default value
+ for (i = 0; i < NUM_RF_REG_PARMS; i++)
+ {
+ RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value);
+ }
+
+ //For RF filter Calibration
+ RTUSBFilterCalibration(pAd);
+ }
+#endif
+#ifdef RT30xx
+ if (IS_RT3070(pAd) || IS_RT3071(pAd))
+ {
+ // Init RF calibration
+ // Driver should toggle RF R30 bit7 before init RF registers
+ UINT32 RfReg = 0;
+ UINT32 data;
+
+ RT30xxReadRFRegister(pAd, RF_R30, (PUCHAR)&RfReg);
+ RfReg |= 0x80;
+ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg);
+ RTMPusecDelay(1000);
+ RfReg &= 0x7F;
+ RT30xxWriteRFRegister(pAd, RF_R30, (UCHAR)RfReg);
+
+ // Initialize RF register to default value
+ for (i = 0; i < NUM_RF_REG_PARMS; i++)
+ {
+ RT30xxWriteRFRegister(pAd, RT30xx_RFRegTable[i].Register, RT30xx_RFRegTable[i].Value);
+ }
+
+ // add by johnli
+ if (IS_RT3070(pAd))
+ {
+ // Update MAC 0x05D4 from 01xxxxxx to 0Dxxxxxx (voltage 1.2V to 1.35V) for RT3070 to improve yield rate
+ RTUSBReadMACRegister(pAd, LDO_CFG0, &data);
+ data = ((data & 0xF0FFFFFF) | 0x0D000000);
+ RTUSBWriteMACRegister(pAd, LDO_CFG0, data);
+ }
+ else if (IS_RT3071(pAd))
+ {
+ // Driver should set RF R6 bit6 on before init RF registers
+ RT30xxReadRFRegister(pAd, RF_R06, (PUCHAR)&RfReg);
+ RfReg |= 0x40;
+ RT30xxWriteRFRegister(pAd, RF_R06, (UCHAR)RfReg);
+
+ // init R31
+ RT30xxWriteRFRegister(pAd, RF_R31, 0x14);
+
+ // RT3071 version E has fixed this issue
+ if ((pAd->NicConfig2.field.DACTestBit == 1) && ((pAd->MACVersion & 0xffff) < 0x0211))
+ {
+ // patch tx EVM issue temporarily
+ RTUSBReadMACRegister(pAd, LDO_CFG0, &data);
+ data = ((data & 0xE0FFFFFF) | 0x0D000000);
+ RTUSBWriteMACRegister(pAd, LDO_CFG0, data);
+ }
+ else
+ {
+ RTMP_IO_READ32(pAd, LDO_CFG0, &data);
+ data = ((data & 0xE0FFFFFF) | 0x01000000);
+ RTMP_IO_WRITE32(pAd, LDO_CFG0, data);
+ }
+
+ // patch LNA_PE_G1 failed issue
+ RTUSBReadMACRegister(pAd, GPIO_SWITCH, &data);
+ data &= ~(0x20);
+ RTUSBWriteMACRegister(pAd, GPIO_SWITCH, data);
+ }
+
+ //For RF filter Calibration
+ RTMPFilterCalibration(pAd);
+
+ // Initialize RF R27 register, set RF R27 must be behind RTMPFilterCalibration()
+ if ((pAd->MACVersion & 0xffff) < 0x0211)
+ RT30xxWriteRFRegister(pAd, RF_R27, 0x3);
+
+ // set led open drain enable
+ RTUSBReadMACRegister(pAd, OPT_14, &data);
+ data |= 0x01;
+ RTUSBWriteMACRegister(pAd, OPT_14, data);
+
+ if (IS_RT3071(pAd))
+ {
+ // add by johnli, RF power sequence setup, load RF normal operation-mode setup
+ RT30xxLoadRFNormalModeSetup(pAd);
+ }
+ }
+#endif
+}
+#endif // RT2870 //
/*
@@ -1245,11 +1675,25 @@ VOID NICReadEEPROMParameters(
Antenna.word = pAd->EEPROMDefaultValue[0];
if (Antenna.word == 0xFFFF)
{
+#ifdef RT30xx
+ if(IS_RT3090(pAd))
+ {
+ Antenna.word = 0;
+ Antenna.field.RfIcType = RFIC_3020;
+ Antenna.field.TxPath = 1;
+ Antenna.field.RxPath = 1;
+ }
+ else
+ {
+#endif // RT30xx //
Antenna.word = 0;
Antenna.field.RfIcType = RFIC_2820;
Antenna.field.TxPath = 1;
Antenna.field.RxPath = 2;
DBGPRINT(RT_DEBUG_WARN, ("E2PROM error, hard code as 0x%04x\n", Antenna.word));
+#ifdef RT30xx
+ }
+#endif // RT30xx //
}
// Choose the desired Tx&Rx stream.
@@ -1277,12 +1721,10 @@ VOID NICReadEEPROMParameters(
NicConfig2.word = pAd->EEPROMDefaultValue[1];
-
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
+#ifndef RT30xx
NicConfig2.word = 0;
+#endif
if ((NicConfig2.word & 0x00ff) == 0xff)
{
NicConfig2.word &= 0xff00;
@@ -1293,7 +1735,6 @@ VOID NICReadEEPROMParameters(
NicConfig2.word &= 0x00ff;
}
}
-#endif // CONFIG_STA_SUPPORT //
if (NicConfig2.field.DynamicTxAgcControl == 1)
pAd->bAutoTxAgcA = pAd->bAutoTxAgcG = TRUE;
@@ -1314,13 +1755,11 @@ VOID NICReadEEPROMParameters(
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
@@ -1411,9 +1850,7 @@ VOID NICReadEEPROMParameters(
TmpPhy = pAd->CommonCfg.PhyMode;
pAd->CommonCfg.PhyMode = 0xff;
RTMPSetPhyMode(pAd, TmpPhy);
-#ifdef DOT11_N_SUPPORT
SetCommonHT(pAd);
-#endif // DOT11_N_SUPPORT //
}
//
@@ -1480,10 +1917,13 @@ VOID NICReadEEPROMParameters(
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 //
+#ifdef RT30xx
+ if (IS_RT30xx(pAd))
+ {
+ eFusePhysicalReadRegisters(pAd, EFUSE_TAG, 2, &value);
+ pAd->EFuseTag = (value & 0xff);
+ }
+#endif // RT30xx //
DBGPRINT(RT_DEBUG_TRACE, ("<-- NICReadEEPROMParameters\n"));
}
@@ -1509,10 +1949,8 @@ VOID NICReadEEPROMParameters(
VOID NICInitAsicFromEEPROM(
IN PRTMP_ADAPTER pAd)
{
-#ifdef CONFIG_STA_SUPPORT
UINT32 data = 0;
UCHAR BBPR1 = 0;
-#endif // CONFIG_STA_SUPPORT //
USHORT i;
EEPROM_ANTENNA_STRUC Antenna;
EEPROM_NIC_CONFIG2_STRUC NicConfig2;
@@ -1531,16 +1969,49 @@ VOID NICInitAsicFromEEPROM(
}
}
+#ifndef RT30xx
Antenna.word = pAd->Antenna.word;
+#endif
+#ifdef RT30xx
+ Antenna.word = pAd->EEPROMDefaultValue[0];
+ if (Antenna.word == 0xFFFF)
+ {
+ DBGPRINT(RT_DEBUG_ERROR, ("E2PROM error, hard code as 0x%04x\n", Antenna.word));
+ BUG_ON(Antenna.word == 0xFFFF);
+ }
+#endif
pAd->Mlme.RealRxPath = (UCHAR) Antenna.field.RxPath;
pAd->RfIcType = (UCHAR) Antenna.field.RfIcType;
+#ifdef RT30xx
+ DBGPRINT(RT_DEBUG_WARN, ("pAd->RfIcType = %d, RealRxPath=%d, TxPath = %d\n", pAd->RfIcType, pAd->Mlme.RealRxPath,Antenna.field.TxPath));
+
+ // Save the antenna for future use
+ pAd->Antenna.word = Antenna.word;
+#endif
NicConfig2.word = pAd->EEPROMDefaultValue[1];
+#ifdef RT30xx
+ {
+ if ((NicConfig2.word & 0x00ff) == 0xff)
+ {
+ NicConfig2.word &= 0xff00;
+ }
+ if ((NicConfig2.word >> 8) == 0xff)
+ {
+ NicConfig2.word &= 0x00ff;
+ }
+ }
+#endif
// Save the antenna for future use
pAd->NicConfig2.word = NicConfig2.word;
+#ifdef RT30xx
+ // set default antenna as main
+ if (pAd->RfIcType == RFIC_3020)
+ AsicSetRxAnt(pAd, pAd->RxAnt.Pair1PrimaryRxAnt);
+#endif
//
// Send LED Setting to MCU.
//
@@ -1549,7 +2020,13 @@ VOID NICInitAsicFromEEPROM(
pAd->LedCntl.word = 0x01;
pAd->Led1 = 0x5555;
pAd->Led2 = 0x2221;
+#ifdef RT2860
pAd->Led3 = 0xA9F8;
+#endif
+
+#ifdef RT2870
+ pAd->Led3 = 0x5627;
+#endif // RT2870 //
}
AsicSendCommandToMcu(pAd, 0x52, 0xff, (UCHAR)pAd->Led1, (UCHAR)(pAd->Led1 >> 8));
@@ -1558,8 +2035,6 @@ VOID NICInitAsicFromEEPROM(
pAd->LedIndicatorStregth = 0xFF;
RTMPSetSignalLED(pAd, -100); // Force signal strength Led to be turned off, before link up
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// Read Hardware controlled Radio state enable bit
if (NicConfig2.field.HardwareRadioControl == 1)
@@ -1585,13 +2060,14 @@ VOID NICInitAsicFromEEPROM(
else
{
RTMPSetLED(pAd, LED_RADIO_ON);
+#ifdef RT2860
AsicSendCommandToMcu(pAd, 0x30, 0xff, 0xff, 0x02);
AsicSendCommandToMcu(pAd, 0x31, PowerWakeCID, 0x00, 0x00);
// 2-1. wait command ok.
AsicCheckCommanOk(pAd, PowerWakeCID);
+#endif
}
}
-#endif // CONFIG_STA_SUPPORT //
// Turn off patching for cardbus controller
if (NicConfig2.field.CardbusAcceleration == 1)
@@ -1624,8 +2100,6 @@ VOID NICInitAsicFromEEPROM(
}
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BBPR3);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// Handle the difference when 1T
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BBPR1);
@@ -1637,7 +2111,7 @@ VOID NICInitAsicFromEEPROM(
DBGPRINT(RT_DEBUG_TRACE, ("Use Hw Radio Control Pin=%d; if used Pin=%d;\n", pAd->CommonCfg.bHardwareRadio, pAd->CommonCfg.bHardwareRadio));
}
-#endif // CONFIG_STA_SUPPORT //
+
DBGPRINT(RT_DEBUG_TRACE, ("TxPath = %d, RxPath = %d, RFIC=%d, Polar+LED mode=%x\n", pAd->Antenna.field.TxPath, pAd->Antenna.field.RxPath, pAd->RfIcType, pAd->LedCntl.word));
DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitAsicFromEEPROM\n"));
}
@@ -1666,8 +2140,10 @@ NDIS_STATUS NICInitializeAdapter(
{
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
WPDMA_GLO_CFG_STRUC GloCfg;
+#ifdef RT2860
UINT32 Value;
DELAY_INT_CFG_STRUC IntCfg;
+#endif
ULONG i =0, j=0;
AC_TXOP_CSR0_STRUC csr0;
@@ -1706,9 +2182,11 @@ retry:
// asic simulation sequence put this ahead before loading firmware.
// pbf hardware reset
+#ifdef RT2860
RTMP_IO_WRITE32(pAd, WPDMA_RST_IDX, 0x1003f); // 0x10000 for reset rx, 0x3f resets all 6 tx rings.
RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe1f);
RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0xe00);
+#endif
// Initialze ASIC for TX & Rx operation
if (NICInitializeAsic(pAd , bHardReset) != NDIS_STATUS_SUCCESS)
@@ -1722,6 +2200,7 @@ retry:
}
+#ifdef RT2860
// Write AC_BK base address register
Value = RTMP_GetPhysicalAddressLow(pAd->TxRing[QID_AC_BK].Cell[0].AllocPa);
RTMP_IO_WRITE32(pAd, TX_BASE_PTR1, Value);
@@ -1794,6 +2273,7 @@ retry:
// Write RX_RING_CSR register
Value = RX_RING_SIZE;
RTMP_IO_WRITE32(pAd, RX_MAX_CNT, Value);
+#endif /* RT2860 */
// WMM parameter
@@ -1812,6 +2292,7 @@ retry:
RTMP_IO_WRITE32(pAd, WMM_TXOP1_CFG, csr0.word);
+#ifdef RT2860
// 3. Set DMA global configuration except TX_DMA_EN and RX_DMA_EN bits:
i = 0;
do
@@ -1830,6 +2311,7 @@ retry:
IntCfg.word = 0;
RTMP_IO_WRITE32(pAd, DELAY_INT_CFG, IntCfg.word);
+#endif
// reset action
@@ -1865,36 +2347,133 @@ NDIS_STATUS NICInitializeAsic(
ULONG Index = 0;
UCHAR R0 = 0xff;
UINT32 MacCsr12 = 0, Counter = 0;
+#ifdef RT2870
+ UINT32 MacCsr0 = 0;
+ NTSTATUS Status;
+ UCHAR Value = 0xff;
+#endif // RT2870 //
+#ifdef RT30xx
+ UINT32 eFuseCtrl;
+#endif // RT30xx //
USHORT KeyIdx;
INT i,apidx;
DBGPRINT(RT_DEBUG_TRACE, ("--> NICInitializeAsic\n"));
+#ifdef RT2860
if (bHardReset == TRUE)
{
RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x3);
}
else
RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x1);
+#endif
+#ifdef RT2870
+ //
+ // Make sure MAC gets ready after NICLoadFirmware().
+ //
+ Index = 0;
+
+ //To avoid hang-on issue when interface up in kernel 2.4,
+ //we use a local variable "MacCsr0" instead of using "pAd->MACVersion" directly.
+ do
+ {
+ RTMP_IO_READ32(pAd, MAC_CSR0, &MacCsr0);
+
+ if ((MacCsr0 != 0x00) && (MacCsr0 != 0xFFFFFFFF))
+ break;
+
+ RTMPusecDelay(10);
+ } while (Index++ < 100);
+
+ pAd->MACVersion = MacCsr0;
+ DBGPRINT(RT_DEBUG_TRACE, ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion));
+ // turn on bit13 (set to zero) after rt2860D. This is to solve high-current issue.
+ RTMP_IO_READ32(pAd, PBF_SYS_CTRL, &MacCsr12);
+ MacCsr12 &= (~0x2000);
+ RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, MacCsr12);
+
+ RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x3);
+ RTMP_IO_WRITE32(pAd, USB_DMA_CFG, 0x0);
+ Status = RTUSBVenderReset(pAd);
+#endif
RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, 0x0);
+
// Initialize MAC register to default value
+#ifdef RT2860
for (Index = 0; Index < NUM_MAC_REG_PARMS; Index++)
{
RTMP_IO_WRITE32(pAd, MACRegTable[Index].Register, MACRegTable[Index].Value);
}
+#endif
+#ifdef RT2870
+ for(Index=0; Index<NUM_MAC_REG_PARMS; Index++)
+ {
+#ifdef RT3070
+ if ((MACRegTable[Index].Register == TX_SW_CFG0) && (IS_RT3070(pAd) || IS_RT3071(pAd)))
+ {
+ MACRegTable[Index].Value = 0x00000400;
+ }
+#endif // RT3070 //
+ RTMP_IO_WRITE32(pAd, (USHORT)MACRegTable[Index].Register, MACRegTable[Index].Value);
+ }
+
+#ifndef RT30xx
+ if(IS_RT3070(pAd))
+ {
+ // According to Frank Hsu (from Gary Tsao)
+ RTMP_IO_WRITE32(pAd, (USHORT)TX_SW_CFG0, 0x00000400);
+
+ // Initialize RT3070 serial MAC registers which is different from RT2870 serial
+ RTUSBWriteMACRegister(pAd, TX_SW_CFG1, 0);
+ RTUSBWriteMACRegister(pAd, TX_SW_CFG2, 0);
+ }
+#endif
+#endif // RT2870 //
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
for (Index = 0; Index < NUM_STA_MAC_REG_PARMS; Index++)
{
+#ifdef RT2860
RTMP_IO_WRITE32(pAd, STAMACRegTable[Index].Register, STAMACRegTable[Index].Value);
+#endif
+#ifdef RT2870
+ RTMP_IO_WRITE32(pAd, (USHORT)STAMACRegTable[Index].Register, STAMACRegTable[Index].Value);
+#endif
}
}
-#endif // CONFIG_STA_SUPPORT //
+#ifdef RT30xx
+ // Initialize RT3070 serial MAc registers which is different from RT2870 serial
+ if (IS_RT3090(pAd))
+ {
+ RTMP_IO_WRITE32(pAd, TX_SW_CFG1, 0);
+
+ // RT3071 version E has fixed this issue
+ if ((pAd->MACVersion & 0xffff) < 0x0211)
+ {
+ if (pAd->NicConfig2.field.DACTestBit == 1)
+ {
+ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x1F); // To fix throughput drop drastically
+ }
+ else
+ {
+ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0F); // To fix throughput drop drastically
+ }
+ }
+ else
+ {
+ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x0);
+ }
+ }
+ else if (IS_RT3070(pAd))
+ {
+ RTMP_IO_WRITE32(pAd, TX_SW_CFG1, 0);
+ RTMP_IO_WRITE32(pAd, TX_SW_CFG2, 0x1F); // To fix throughput drop drastically
+ }
+#endif // RT30xx //
//
// Before program BBP, we need to wait BBP/RF get wake up.
@@ -1935,11 +2514,69 @@ NDIS_STATUS NICInitializeAsic(
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBPRegTable[Index].Register, BBPRegTable[Index].Value);
}
+#ifndef RT30xx
// for rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT.
if ((pAd->MACVersion&0xffff) != 0x0101)
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19);
+#ifdef RT2870
+ //write RT3070 BBP wchich different with 2870 after write RT2870 BBP
+ if (IS_RT3070(pAd))
+ {
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, 0x0a);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x99);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R105, 0x05);
+ }
+#endif // RT2870 //
+#endif
+#ifdef RT30xx
+ // for rt2860E and after, init BBP_R84 with 0x19. This is for extension channel overlapping IOT.
+ // RT3090 should not program BBP R84 to 0x19, otherwise TX will block.
+ if (((pAd->MACVersion&0xffff) != 0x0101) && (!IS_RT30xx(pAd)))
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R84, 0x19);
+
+// add by johnli, RF power sequence setup
+ if (IS_RT30xx(pAd))
+ { //update for RT3070/71/72/90/91/92.
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R79, 0x13);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R80, 0x05);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R81, 0x33);
+ }
+
+ if (IS_RT3090(pAd))
+ {
+ UCHAR bbpreg=0;
+
+ // enable DC filter
+ if ((pAd->MACVersion & 0xffff) >= 0x0211)
+ {
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R103, 0xc0);
+ }
+ // improve power consumption
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R138, &bbpreg);
+ if (pAd->Antenna.field.TxPath == 1)
+ {
+ // turn off tx DAC_1
+ bbpreg = (bbpreg | 0x20);
+ }
+
+ if (pAd->Antenna.field.RxPath == 1)
+ {
+ // turn off tx ADC_1
+ bbpreg &= (~0x2);
+ }
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R138, bbpreg);
+
+ // improve power consumption in RT3071 Ver.E
+ if ((pAd->MACVersion & 0xffff) >= 0x0211)
+ {
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R31, &bbpreg);
+ bbpreg &= (~0x3);
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R31, bbpreg);
+ }
+ }
+#endif
if (pAd->MACVersion == 0x28600100)
{
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, 0x16);
@@ -1956,10 +2593,20 @@ NDIS_STATUS NICInitializeAsic(
RTMP_IO_WRITE32(pAd, MAX_LEN_CFG, csr);
}
+#ifdef RT2870
+{
+ UCHAR MAC_Value[]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0,0};
+
+ //Initialize WCID table
+ Value = 0xff;
+ for(Index =0 ;Index < 254;Index++)
+ {
+ RTUSBMultiWrite(pAd, (USHORT)(MAC_WCID_BASE + Index * 8), MAC_Value, 8);
+ }
+}
+#endif // RT2870 //
// Add radio off control
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if (pAd->StaCfg.bRadio == FALSE)
{
@@ -1968,7 +2615,6 @@ NDIS_STATUS NICInitializeAsic(
DBGPRINT(RT_DEBUG_TRACE, ("Set Radio Off\n"));
}
}
-#endif // CONFIG_STA_SUPPORT //
// Clear raw counters
RTMP_IO_READ32(pAd, RX_STA_CNT0, &Counter);
@@ -2006,21 +2652,48 @@ NDIS_STATUS NICInitializeAsic(
RTMP_IO_WRITE32(pAd, pAd->BeaconOffset[apidx] + i, 0x00);
}
}
+#ifdef RT2870
+ AsicDisableSync(pAd);
+ // Clear raw counters
+ RTMP_IO_READ32(pAd, RX_STA_CNT0, &Counter);
+ RTMP_IO_READ32(pAd, RX_STA_CNT1, &Counter);
+ RTMP_IO_READ32(pAd, RX_STA_CNT2, &Counter);
+ RTMP_IO_READ32(pAd, TX_STA_CNT0, &Counter);
+ RTMP_IO_READ32(pAd, TX_STA_CNT1, &Counter);
+ RTMP_IO_READ32(pAd, TX_STA_CNT2, &Counter);
+ // Default PCI clock cycle per ms is different as default setting, which is based on PCI.
+ RTMP_IO_READ32(pAd, USB_CYC_CFG, &Counter);
+ Counter&=0xffffff00;
+ Counter|=0x000001e;
+ RTMP_IO_WRITE32(pAd, USB_CYC_CFG, Counter);
+#endif // RT2870 //
+#ifdef RT30xx
+ pAd->bUseEfuse=FALSE;
+ RTMP_IO_READ32(pAd, EFUSE_CTRL, &eFuseCtrl);
+ pAd->bUseEfuse = ( (eFuseCtrl & 0x80000000) == 0x80000000) ? 1 : 0;
+ if(pAd->bUseEfuse)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("NVM is Efuse\n"));
+ }
+ else
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("NVM is EEPROM\n"));
+
+ }
+#endif // RT30xx //
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// for rt2860E and after, init TXOP_CTRL_CFG with 0x583f. This is for extension channel overlapping IOT.
if ((pAd->MACVersion&0xffff) != 0x0101)
RTMP_IO_WRITE32(pAd, TXOP_CTRL_CFG, 0x583f);
}
-#endif // CONFIG_STA_SUPPORT //
DBGPRINT(RT_DEBUG_TRACE, ("<-- NICInitializeAsic\n"));
return NDIS_STATUS_SUCCESS;
}
+#ifdef RT2860
VOID NICRestoreBBPValue(
IN PRTMP_ADAPTER pAd)
{
@@ -2144,6 +2817,7 @@ VOID NICRestoreBBPValue(
DBGPRINT(RT_DEBUG_TRACE, ("<--- NICRestoreBBPValue !!!!!!!!!!!!!!!!!!!!!!! \n"));
}
+#endif /* RT2860 */
/*
========================================================================
@@ -2214,12 +2888,6 @@ VOID NICUpdateFifoStaCounters(
CHAR reTry;
UCHAR succMCS;
-#ifdef RALINK_ATE
- /* Nothing to do in ATE mode */
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
do
{
RTMP_IO_READ32(pAd, TX_STA_FIFO, &StaFifo.word);
@@ -2244,10 +2912,8 @@ 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);
@@ -2261,23 +2927,15 @@ VOID NICUpdateFifoStaCounters(
if (pEntry->FIFOCount >= 1)
{
DBGPRINT(RT_DEBUG_TRACE, ("#"));
-#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<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++;
@@ -2289,14 +2947,10 @@ VOID NICUpdateFifoStaCounters(
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--;
@@ -2305,7 +2959,7 @@ VOID NICUpdateFifoStaCounters(
DBGPRINT(RT_DEBUG_TRACE, ("@\n"));
}
}
-#endif // DOT11_N_SUPPORT //
+
pEntry->FIFOCount = 0;
pEntry->OneSecTxNoRetryOkCount++;
// update NoDataIdleCount when sucessful send packet to STA.
@@ -2416,6 +3070,22 @@ VOID NICUpdateRawCounters(
// Update RX Overflow counter
pAd->Counters8023.RxNoBuffer += (RxStaCnt2.field.RxFifoOverflowCount);
+#ifdef RT2870
+ if (pAd->RalinkCounters.RxCount != pAd->watchDogRxCnt)
+ {
+ pAd->watchDogRxCnt = pAd->RalinkCounters.RxCount;
+ pAd->watchDogRxOverFlowCnt = 0;
+ }
+ else
+ {
+ if (RxStaCnt2.field.RxFifoOverflowCount)
+ pAd->watchDogRxOverFlowCnt++;
+ else
+ pAd->watchDogRxOverFlowCnt = 0;
+ }
+#endif // RT2870 //
+
+
if (!pAd->bUpdateBcnCntDone)
{
// Update BEACON sent count
@@ -2643,217 +3313,46 @@ VOID NICEraseFirmware(
NDIS_STATUS NICLoadFirmware(
IN PRTMP_ADAPTER pAd)
{
-#ifdef BIN_IN_FILE
-#define NICLF_DEFAULT_USE() \
- flg_default_firm_use = TRUE; \
- printk("%s - Use default firmware!\n", __func__);
-
NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
- PUCHAR src;
- struct file *srcf;
- INT retval, orgfsuid, orgfsgid, i;
- mm_segment_t orgfs;
PUCHAR pFirmwareImage;
- UINT FileLength = 0;
- UINT32 MacReg;
- ULONG Index;
- ULONG firm;
- BOOLEAN flg_default_firm_use = FALSE;
-
-
- DBGPRINT(RT_DEBUG_TRACE, ("===> %s\n", __func__));
-
- /* init */
- pFirmwareImage = NULL;
- src = RTMP_FIRMWARE_FILE_NAME;
-
- /* save uid and gid used for filesystem access.
- set user and group to 0 (root) */
- orgfsuid = current->fsuid;
- orgfsgid = current->fsgid;
- current->fsuid = current->fsgid = 0;
- orgfs = get_fs();
- set_fs(KERNEL_DS);
-
- pAd->FirmwareVersion = (FIRMWARE_MAJOR_VERSION << 8) + \
- FIRMWARE_MINOR_VERSION;
-
-
- /* allocate firmware buffer */
- pFirmwareImage = kmalloc(MAX_FIRMWARE_IMAGE_SIZE, MEM_ALLOC_FLAG);
- if (pFirmwareImage == NULL)
- {
- /* allocate fail, use default firmware array in firmware.h */
- printk("%s - Allocate memory fail!\n", __func__);
- NICLF_DEFAULT_USE();
- }
- else
- {
- /* allocate ok! zero the firmware buffer */
- memset(pFirmwareImage, 0x00, MAX_FIRMWARE_IMAGE_SIZE);
- } /* End of if */
-
+ ULONG FileLength, Index;
+ //ULONG firm;
+ UINT32 MacReg = 0;
+#ifdef RT2870
+ UINT32 Version = (pAd->MACVersion >> 16);
+#endif // RT2870 //
- /* if ok, read firmware file from *.bin file */
- if (flg_default_firm_use == FALSE)
+ pFirmwareImage = FirmwareImage;
+ FileLength = sizeof(FirmwareImage);
+#ifdef RT2870
+ // New 8k byte firmware size for RT3071/RT3072
+ //printk("Usb Chip\n");
+ if (FIRMWAREIMAGE_LENGTH == FIRMWAREIMAGE_MAX_LENGTH)
+ //The firmware image consists of two parts. One is the origianl and the other is the new.
+ //Use Second Part
{
- do
- {
- /* open the bin file */
- srcf = filp_open(src, O_RDONLY, 0);
-
- if (IS_ERR(srcf))
- {
- printk("%s - Error %ld opening %s\n",
- __func__, -PTR_ERR(srcf), src);
- NICLF_DEFAULT_USE();
- break;
- } /* End of if */
-
- /* the object must have a read method */
- if ((srcf->f_op == NULL) || (srcf->f_op->read == NULL))
- {
- printk("%s - %s does not have a write method\n", __func__, src);
- NICLF_DEFAULT_USE();
- break;
- } /* End of if */
-
- /* read the firmware from the file *.bin */
- FileLength = srcf->f_op->read(srcf,
- pFirmwareImage,
- MAX_FIRMWARE_IMAGE_SIZE,
- &srcf->f_pos);
-
- if (FileLength != MAX_FIRMWARE_IMAGE_SIZE)
- {
- printk("%s: error file length (=%d) in RT2860AP.BIN\n",
- __func__, FileLength);
- NICLF_DEFAULT_USE();
- break;
- }
- else
- {
- PUCHAR ptr = pFirmwareImage;
- USHORT crc = 0xffff;
-
-
- /* calculate firmware CRC */
- for(i=0; i<(MAX_FIRMWARE_IMAGE_SIZE-2); i++, ptr++)
- crc = ByteCRC16(bitrev8(*ptr), crc);
- /* End of for */
-
- if ((pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-2] != \
- (UCHAR)bitrev8((UCHAR)(crc>>8))) ||
- (pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-1] != \
- (UCHAR)bitrev8((UCHAR)crc)))
- {
- /* CRC fail */
- printk("%s: CRC = 0x%02x 0x%02x "
- "error, should be 0x%02x 0x%02x\n",
- __func__,
- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-2],
- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-1],
- (UCHAR)(crc>>8), (UCHAR)(crc));
- NICLF_DEFAULT_USE();
- break;
- }
- else
- {
- /* firmware is ok */
- pAd->FirmwareVersion = \
- (pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-4] << 8) +
- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-3];
-
- /* check if firmware version of the file is too old */
- if ((pAd->FirmwareVersion) < \
- ((FIRMWARE_MAJOR_VERSION << 8) +
- FIRMWARE_MINOR_VERSION))
- {
- printk("%s: firmware version too old!\n", __func__);
- NICLF_DEFAULT_USE();
- break;
- } /* End of if */
- } /* End of if */
-
- DBGPRINT(RT_DEBUG_TRACE,
- ("NICLoadFirmware: CRC ok, ver=%d.%d\n",
- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-4],
- pFirmwareImage[MAX_FIRMWARE_IMAGE_SIZE-3]));
- } /* End of if (FileLength == MAX_FIRMWARE_IMAGE_SIZE) */
- break;
- } while(TRUE);
-
- /* close firmware file */
- if (IS_ERR(srcf))
- ;
+ if ((Version != 0x2860) && (Version != 0x2872) && (Version != 0x3070))
+ { // Use Firmware V2.
+ //printk("KH:Use New Version,part2\n");
+ pFirmwareImage = (PUCHAR)&FirmwareImage[FIRMWAREIMAGEV1_LENGTH];
+ FileLength = FIRMWAREIMAGEV2_LENGTH;
+ }
else
{
- retval = filp_close(srcf, NULL);
- if (retval)
- {
- DBGPRINT(RT_DEBUG_ERROR,
- ("--> Error %d closing %s\n", -retval, src));
- } /* End of if */
- } /* End of if */
- } /* End of if */
-
-
- /* write firmware to ASIC */
- if (flg_default_firm_use == TRUE)
- {
- /* use default fimeware, free allocated buffer */
- if (pFirmwareImage != NULL)
- kfree(pFirmwareImage);
- /* End of if */
-
- /* use default *.bin array */
- pFirmwareImage = FirmwareImage;
- FileLength = sizeof(FirmwareImage);
- } /* End of if */
-
- /* enable Host program ram write selection */
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x10000);
-
- for(i=0; i<FileLength; i+=4)
- {
- firm = pFirmwareImage[i] +
- (pFirmwareImage[i+3] << 24) +
- (pFirmwareImage[i+2] << 16) +
- (pFirmwareImage[i+1] << 8);
-
- RTMP_IO_WRITE32(pAd, FIRMWARE_IMAGE_BASE + i, firm);
- } /* End of for */
-
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x00000);
- RTMP_IO_WRITE32(pAd, PBF_SYS_CTRL, 0x00001);
-
- /* initialize BBP R/W access agent */
- RTMP_IO_WRITE32(pAd, H2M_BBP_AGENT, 0);
- RTMP_IO_WRITE32(pAd, H2M_MAILBOX_CSR, 0);
-
- if (flg_default_firm_use == FALSE)
+ //printk("KH:Use New Version,part1\n");
+ pFirmwareImage = FirmwareImage;
+ FileLength = FIRMWAREIMAGEV1_LENGTH;
+ }
+ }
+ else
{
- /* use file firmware, free allocated buffer */
- if (pFirmwareImage != NULL)
- kfree(pFirmwareImage);
- /* End of if */
- } /* End of if */
+ DBGPRINT(RT_DEBUG_ERROR, ("KH: bin file should be 8KB.\n"));
+ Status = NDIS_STATUS_FAILURE;
+ }
- set_fs(orgfs);
- current->fsuid = orgfsuid;
- current->fsgid = orgfsgid;
-#else
+#endif // RT2870 //
- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
- PUCHAR pFirmwareImage;
- ULONG FileLength, Index;
- //ULONG firm;
- UINT32 MacReg = 0;
-
- pFirmwareImage = FirmwareImage;
- FileLength = sizeof(FirmwareImage);
RT28XX_WRITE_FIRMWARE(pAd, pFirmwareImage, FileLength);
-#endif
/* check if MCU is ready */
Index = 0;
@@ -2867,7 +3366,7 @@ NDIS_STATUS NICLoadFirmware(
RTMPusecDelay(1000);
} while (Index++ < 1000);
- if (Index >= 1000)
+ if (Index > 1000)
{
Status = NDIS_STATUS_FAILURE;
DBGPRINT(RT_DEBUG_ERROR, ("NICLoadFirmware: MCU is not ready\n\n\n"));
@@ -3118,6 +3617,31 @@ VOID UserCfgInit(
//
// part I. intialize common configuration
//
+#ifdef RT2870
+ pAd->BulkOutReq = 0;
+
+ pAd->BulkOutComplete = 0;
+ pAd->BulkOutCompleteOther = 0;
+ pAd->BulkOutCompleteCancel = 0;
+ pAd->BulkInReq = 0;
+ pAd->BulkInComplete = 0;
+ pAd->BulkInCompleteFail = 0;
+
+ //pAd->QuickTimerP = 100;
+ //pAd->TurnAggrBulkInCount = 0;
+ pAd->bUsbTxBulkAggre = 0;
+
+ // init as unsed value to ensure driver will set to MCU once.
+ pAd->LedIndicatorStregth = 0xFF;
+
+ pAd->CommonCfg.MaxPktOneTxBulk = 2;
+ pAd->CommonCfg.TxBulkFactor = 1;
+ pAd->CommonCfg.RxBulkFactor =1;
+
+ pAd->CommonCfg.TxPower = 100; //mW
+
+ NdisZeroMemory(&pAd->CommonCfg.IOTestParm, sizeof(pAd->CommonCfg.IOTestParm));
+#endif // RT2870 //
for(key_index=0; key_index<SHARE_KEY_NUM; key_index++)
{
@@ -3128,14 +3652,19 @@ VOID UserCfgInit(
}
}
+#ifdef RT30xx
+ pAd->EepromAccess = FALSE;
+#endif
pAd->Antenna.word = 0;
pAd->CommonCfg.BBPCurrentBW = BW_20;
pAd->LedCntl.word = 0;
+#ifdef RT2860
pAd->LedIndicatorStregth = 0;
pAd->RLnkCtrlOffset = 0;
pAd->HostLnkCtrlOffset = 0;
pAd->CheckDmaBusyCount = 0;
+#endif
pAd->bAutoTxAgcA = FALSE; // Default is OFF
pAd->bAutoTxAgcG = FALSE; // Default is OFF
@@ -3176,23 +3705,11 @@ VOID UserCfgInit(
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;
@@ -3213,7 +3730,6 @@ VOID UserCfgInit(
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;
@@ -3230,8 +3746,6 @@ VOID UserCfgInit(
//
// part II. intialize STA specific configuration
//
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
RX_FILTER_SET_FLAG(pAd, fRX_FILTER_ACCEPT_DIRECT);
RX_FILTER_CLEAR_FLAG(pAd, fRX_FILTER_ACCEPT_MULTICAST);
@@ -3270,11 +3784,6 @@ VOID UserCfgInit(
pAd->StaCfg.DesiredTransmitSetting.field.MCS = MCS_AUTO;
}
-#ifdef EXT_BUILD_CHANNEL_LIST
- pAd->StaCfg.IEEE80211dClientMode = Rt802_11_D_None;
-#endif // EXT_BUILD_CHANNEL_LIST //
-#endif // CONFIG_STA_SUPPORT //
-
// global variables mXXXX used in MAC protocol state machines
OPSTATUS_SET_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM);
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_ADHOC_ON);
@@ -3284,21 +3793,12 @@ VOID UserCfgInit(
pAd->CommonCfg.PhyMode = PHY_11BG_MIXED; // default PHY mode
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED); // CCK use LONG preamble
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// user desired power mode
pAd->StaCfg.WindowsPowerMode = Ndis802_11PowerModeCAM;
pAd->StaCfg.WindowsBatteryPowerMode = Ndis802_11PowerModeCAM;
pAd->StaCfg.bWindowsACCAMEnable = FALSE;
-#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;
-#endif // LEAP_SUPPORT //
-
RTMPInitTimer(pAd, &pAd->StaCfg.StaQuickResponeForRateUpTimer, GET_TIMER_FUNCTION(StaQuickResponeForRateUpExec), pAd, FALSE);
pAd->StaCfg.StaQuickResponeForRateUpTimerRunning = FALSE;
@@ -3326,17 +3826,11 @@ VOID UserCfgInit(
NdisZeroMemory(pAd->nickname, IW_ESSID_MAX_SIZE+1);
sprintf(pAd->nickname, "%s", STA_NIC_DEVICE_NAME);
RTMPInitTimer(pAd, &pAd->StaCfg.WpaDisassocAndBlockAssocTimer, GET_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc), pAd, FALSE);
-#ifdef WPA_SUPPLICANT_SUPPORT
pAd->StaCfg.IEEE8021X = FALSE;
pAd->StaCfg.IEEE8021x_required_keys = FALSE;
pAd->StaCfg.WpaSupplicantUP = WPA_SUPPLICANT_DISABLE;
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
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
pAd->ExtraInfo = EXTRA_INFO_CLEAR;
@@ -3373,41 +3867,12 @@ VOID UserCfgInit(
InitializeQueueHeader(&pAd->MacTab.McastPsQueue);
NdisAllocateSpinLock(&pAd->MacTabLock);
-#ifdef RALINK_ATE
- NdisZeroMemory(&pAd->ate, sizeof(ATE_INFO));
- pAd->ate.Mode = ATE_STOP;
- pAd->ate.TxCount = 200;/* to exceed TX_RING_SIZE ... */
- pAd->ate.TxLength = 1024;
- pAd->ate.TxWI.ShortGI = 0;// LONG GI : 800 ns
- pAd->ate.TxWI.PHYMODE = MODE_CCK;
- pAd->ate.TxWI.MCS = 3;
- pAd->ate.TxWI.BW = BW_20;
- pAd->ate.Channel = 1;
- pAd->ate.QID = QID_AC_BE;
- pAd->ate.Addr1[0] = 0x00;
- pAd->ate.Addr1[1] = 0x11;
- pAd->ate.Addr1[2] = 0x22;
- pAd->ate.Addr1[3] = 0xAA;
- pAd->ate.Addr1[4] = 0xBB;
- pAd->ate.Addr1[5] = 0xCC;
- NdisMoveMemory(pAd->ate.Addr2, pAd->ate.Addr1, ETH_LENGTH_OF_ADDRESS);
- NdisMoveMemory(pAd->ate.Addr3, pAd->ate.Addr1, ETH_LENGTH_OF_ADDRESS);
- pAd->ate.bRxFer = 0;
- pAd->ate.bQATxStart = FALSE;
- pAd->ate.bQARxStart = FALSE;
- pAd->ate.bFWLoading = FALSE;
-#ifdef RALINK_28xx_QA
- //pAd->ate.Repeat = 0;
- pAd->ate.TxStatus = 0;
- pAd->ate.AtePid = THREAD_PID_INIT_VALUE;
-#endif // RALINK_28xx_QA //
-#endif // RALINK_ATE //
-
-
pAd->CommonCfg.bWiFiTest = FALSE;
+#ifdef RT2860
pAd->bPCIclkOff = FALSE;
RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP);
+#endif
DBGPRINT(RT_DEBUG_TRACE, ("<-- UserCfgInit\n"));
}
@@ -3509,6 +3974,9 @@ VOID RTMPInitTimer(
pTimer->State = FALSE;
pTimer->cookie = (ULONG) pData;
+#ifdef RT2870
+ pTimer->pAd = pAd;
+#endif // RT2870 //
RTMP_OS_Init_Timer(pAd, &pTimer->TimerObj, pTimerFunc, (PVOID) pTimer);
}
@@ -3635,6 +4103,12 @@ VOID RTMPCancelTimer(
if (*pCancelled == TRUE)
pTimer->State = TRUE;
+#ifdef RT2870
+ // We need to go-through the TimerQ to findout this timer handler and remove it if
+ // it's still waiting for execution.
+
+ RT2870_TimerQ_Remove(pTimer->pAd, pTimer);
+#endif // RT2870 //
}
else
{
@@ -3674,13 +4148,6 @@ VOID RTMPSetLED(
UCHAR HighByte = 0;
UCHAR LowByte;
-// In ATE mode of RT2860 AP/STA, we have erased 8051 firmware.
-// So LED mode is not supported when ATE is running.
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
LowByte = pAd->LedCntl.field.LedMode&0x7f;
switch (Status)
{
diff --git a/drivers/staging/rt2860/common/rtmp_tkip.c b/drivers/staging/rt2860/common/rtmp_tkip.c
index a87ea3a5d3ea..4a7fda69f9b4 100644
--- a/drivers/staging/rt2860/common/rtmp_tkip.c
+++ b/drivers/staging/rt2860/common/rtmp_tkip.c
@@ -199,15 +199,9 @@ typedef struct PACKED _IV_CONTROL_
{
struct PACKED
{
-#ifdef RT_BIG_ENDIAN
- UCHAR KeyID:2;
- UCHAR ExtIV:1;
- UCHAR Rsvd:5;
-#else
UCHAR Rsvd:5;
UCHAR ExtIV:1;
UCHAR KeyID:2;
-#endif
} field;
UCHAR Byte;
} CONTROL;
@@ -1114,10 +1108,6 @@ BOOLEAN RTMPSoftDecryptTKIP(
UCHAR MIC[8];
UCHAR TrailMIC[8];
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (PUCHAR)pData, DIR_READ, FALSE);
-#endif
-
fc0 = *pData;
fc1 = *(pData + 1);
@@ -1224,9 +1214,6 @@ BOOLEAN RTMPSoftDecryptTKIP(
return (FALSE);
}
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (PUCHAR)pData, DIR_READ, FALSE);
-#endif
return TRUE;
}
@@ -1266,10 +1253,6 @@ BOOLEAN RTMPSoftDecryptAES(
UCHAR MIC[8];
UCHAR TrailMIC[8];
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (PUCHAR)pData, DIR_READ, FALSE);
-#endif
-
fc0 = *pData;
fc1 = *(pData + 1);
@@ -1437,10 +1420,6 @@ BOOLEAN RTMPSoftDecryptAES(
return FALSE;
}
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (PUCHAR)pData, DIR_READ, FALSE);
-#endif
-
return TRUE;
}
diff --git a/drivers/staging/rt2860/common/rtmp_wep.c b/drivers/staging/rt2860/common/rtmp_wep.c
index ffe26c237950..8e833e7011bd 100644
--- a/drivers/staging/rt2860/common/rtmp_wep.c
+++ b/drivers/staging/rt2860/common/rtmp_wep.c
@@ -144,14 +144,12 @@ VOID RTMPInitWepEngine(
pAd->PrivateInfo.FCSCRC32 = PPPINITFCS32; //Init crc32.
-#ifdef CONFIG_STA_SUPPORT
if (pAd->StaCfg.bCkipOn && (pAd->StaCfg.CkipFlag & 0x10) && (pAd->OpMode == OPMODE_STA))
{
ARCFOUR_INIT(&pAd->PrivateInfo.WEPCONTEXT, pKey, KeyLen); //INIT SBOX, KEYLEN+3(IV)
NdisMoveMemory(pDest, pKey, 3); //Append Init Vector
}
else
-#endif // CONFIG_STA_SUPPORT //
{
NdisMoveMemory(WEPKEY + 3, pKey, KeyLen);
diff --git a/drivers/staging/rt2860/common/spectrum.c b/drivers/staging/rt2860/common/spectrum.c
index b3650ec46563..101c2923ca37 100644
--- a/drivers/staging/rt2860/common/spectrum.c
+++ b/drivers/staging/rt2860/common/spectrum.c
@@ -1060,27 +1060,6 @@ VOID NotifyChSwAnnToPeerAPs(
IN UINT8 ChSwMode,
IN UINT8 Channel)
{
-#ifdef WDS_SUPPORT
- if (!((pRA[0] & 0xff) == 0xff)) // is pRA a broadcase address.
- {
- INT i;
- // info neighbor APs that Radar signal found throgh WDS link.
- for (i = 0; i < MAX_WDS_ENTRY; i++)
- {
- if (ValidWdsEntry(pAd, i))
- {
- PUCHAR pDA = pAd->WdsTab.WdsEntry[i].PeerWdsAddr;
-
- // DA equal to SA. have no necessary orignal AP which found Radar signal.
- if (MAC_ADDR_EQUAL(pTA, pDA))
- continue;
-
- // send Channel Switch Action frame to info Neighbro APs.
- EnqueueChSwAnn(pAd, pDA, ChSwMode, Channel);
- }
- }
- }
-#endif // WDS_SUPPORT //
}
static VOID StartDFSProcedure(
@@ -1090,9 +1069,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;
}
@@ -1475,10 +1454,8 @@ 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))
@@ -1487,8 +1464,6 @@ static VOID PeerChSwAnnAction(
return;
}
-
-#ifdef CONFIG_STA_SUPPORT
if (pAd->OpMode == OPMODE_STA)
{
Bssidx = BssTableSearch(&pAd->ScanTab, pFr->Hdr.Addr3, pAd->CommonCfg.Channel);
@@ -1535,7 +1510,6 @@ static VOID PeerChSwAnnAction(
}
}
}
-#endif // CONFIG_STA_SUPPORT //
return;
}
@@ -1596,7 +1570,12 @@ static VOID PeerMeasureReportAction(
if ((pMeasureReportInfo = kmalloc(sizeof(MEASURE_RPI_REPORT), GFP_ATOMIC)) == NULL)
{
+#ifndef RT30xx
DBGPRINT(RT_DEBUG_ERROR, ("%s unable to alloc memory for measure report buffer (size=%zu).\n", __func__, sizeof(MEASURE_RPI_REPORT)));
+#endif
+#ifdef RT30xx
+ DBGPRINT(RT_DEBUG_ERROR, ("%s unable to alloc memory for measure report buffer (size=%d).\n", __func__, sizeof(MEASURE_RPI_REPORT)));
+#endif
return;
}
@@ -1756,28 +1735,6 @@ VOID PeerSpectrumAction(
case SPEC_CHANNEL_SWITCH:
{
-#ifdef DOT11N_DRAFT3
- SEC_CHA_OFFSET_IE Secondary;
- CHA_SWITCH_ANNOUNCE_IE ChannelSwitch;
-
- // 802.11h only has Channel Switch Announcement IE.
- RTMPMoveMemory(&ChannelSwitch, &Elem->Msg[LENGTH_802_11+4], sizeof (CHA_SWITCH_ANNOUNCE_IE));
-
- // 802.11n D3.03 adds secondary channel offset element in the end.
- if (Elem->MsgLen == (LENGTH_802_11 + 2 + sizeof (CHA_SWITCH_ANNOUNCE_IE) + sizeof (SEC_CHA_OFFSET_IE)))
- {
- RTMPMoveMemory(&Secondary, &Elem->Msg[LENGTH_802_11+9], sizeof (SEC_CHA_OFFSET_IE));
- }
- else
- {
- Secondary.SecondaryChannelOffset = 0;
- }
-
- if ((Elem->Msg[LENGTH_802_11+2] == IE_CHANNEL_SWITCH_ANNOUNCEMENT) && (Elem->Msg[LENGTH_802_11+3] == 3))
- {
- ChannelSwitchAction(pAd, Elem->Wcid, ChannelSwitch.NewChannel, Secondary.SecondaryChannelOffset);
- }
-#endif // DOT11N_DRAFT3 //
}
PeerChSwAnnAction(pAd, Elem);
break;
diff --git a/drivers/staging/rt2860/leap.h b/drivers/staging/rt2860/leap.h
deleted file mode 100644
index 6818c1ff4d73..000000000000
--- a/drivers/staging/rt2860/leap.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
-
- Module Name:
- leap.h
-
- Abstract:
-
- Revision History:
- Who When What
- -------- ---------- ----------------------------------------------
- Name Date Modification logs
-*/
-#ifndef __LEAP_H__
-#define __LEAP_H__
-
-// Messages for Associate state machine
-#define LEAP_MACHINE_BASE 30
-
-#define LEAP_MSG_REQUEST_IDENTITY 31
-#define LEAP_MSG_REQUEST_LEAP 32
-#define LEAP_MSG_SUCCESS 33
-#define LEAP_MSG_FAILED 34
-#define LEAP_MSG_RESPONSE_LEAP 35
-#define LEAP_MSG_EAPOLKEY 36
-#define LEAP_MSG_UNKNOWN 37
-#define LEAP_MSG 38
-//! assoc state-machine states
-#define LEAP_IDLE 0
-#define LEAP_WAIT_IDENTITY_REQUEST 1
-#define LEAP_WAIT_CHANLLENGE_REQUEST 2
-#define LEAP_WAIT_SUCCESS 3
-#define LEAP_WAIT_CHANLLENGE_RESPONSE 4
-#define LEAP_WAIT_EAPOLKEY 5
-
-#define LEAP_REASON_INVALID_AUTH 0x01
-#define LEAP_REASON_AUTH_TIMEOUT 0x02
-#define LEAP_REASON_CHALLENGE_FROM_AP_FAILED 0x03
-#define LEAP_REASON_CHALLENGE_TO_AP_FAILED 0x04
-
-#define CISCO_AuthModeLEAP 0x80
-#define CISCO_AuthModeLEAPNone 0x00
-#define LEAP_AUTH_TIMEOUT 30000
-#define LEAP_CHALLENGE_RESPONSE_LENGTH 24
-#define LEAP_CHALLENGE_REQUEST_LENGTH 8
-
-typedef struct _LEAP_EAPOL_HEADER_ {
- UCHAR Version;
- UCHAR Type;
- UCHAR Length[2];
-} LEAP_EAPOL_HEADER, *PLEAP_EAPOL_HEADER;
-
-typedef struct _LEAP_EAPOL_PACKET_ {
- UCHAR Code;
- UCHAR Identifier;
- UCHAR Length[2];
- UCHAR Type;
-} LEAP_EAPOL_PACKET, *PLEAP_EAPOL_PACKET;
-
-typedef struct _LEAP_EAP_CONTENTS_ {
- UCHAR Version;
- UCHAR Reserved;
- UCHAR Length;
-} LEAP_EAP_CONTENTS, *PLEAP_EAP_CONTENTS;
-
-/*** EAPOL key ***/
-typedef struct _EAPOL_KEY_HEADER_ {
- UCHAR Type;
- UCHAR Length[2];
- UCHAR Counter[8];
- UCHAR IV[16];
- UCHAR Index;
- UCHAR Signature[16];
-} EAPOL_KEY_HEADER, *PEAPOL_KEY_HEADER;
-
-BOOLEAN LeapMsgTypeSubst(
- IN UCHAR EAPType,
- OUT ULONG *MsgType);
-
-VOID LeapMachinePerformAction(
- IN PRTMP_ADAPTER pAd,
- IN STATE_MACHINE *S,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID LeapMacHeaderInit(
- IN PRTMP_ADAPTER pAd,
- IN OUT PHEADER_802_11 pHdr80211,
- IN UCHAR wep,
- IN PUCHAR pAddr3);
-
-VOID LeapStartAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID LeapIdentityAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID LeapPeerChallengeAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID HashPwd(
- IN PUCHAR pwd,
- IN INT pwdlen,
- OUT PUCHAR hash);
-
-VOID PeerChallengeResponse(
- IN PUCHAR szChallenge,
- IN PUCHAR smbPasswd,
- OUT PUCHAR szResponse);
-
-VOID ParityKey(
- OUT PUCHAR szOut,
- IN PUCHAR szIn);
-
-VOID DesKey(
- OUT ULONG k[16][2],
- IN PUCHAR key,
- IN INT decrypt);
-
-VOID Des(
- IN ULONG ks[16][2],
- OUT UCHAR block[8]);
-
-VOID DesEncrypt(
- IN PUCHAR szClear,
- IN PUCHAR szKey,
- OUT PUCHAR szOut);
-
-VOID LeapNetworkChallengeAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID LeapNetworkChallengeResponse(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID HashpwdHash(
- IN PUCHAR hash,
- IN PUCHAR hashhash);
-
-VOID ProcessSessionKey(
- OUT PUCHAR SessionKey,
- IN PUCHAR hash2,
- IN PUCHAR ChallengeToRadius,
- IN PUCHAR ChallengeResponseFromRadius,
- IN PUCHAR ChallengeFromRadius,
- IN PUCHAR ChallengeResponseToRadius);
-
-VOID LeapEapolKeyAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID RogueApTableInit(
- IN ROGUEAP_TABLE *Tab);
-
-ULONG RogueApTableSearch(
- IN ROGUEAP_TABLE *Tab,
- IN PUCHAR pAddr);
-
-VOID RogueApEntrySet(
- IN PRTMP_ADAPTER pAd,
- OUT ROGUEAP_ENTRY *pRogueAp,
- IN PUCHAR pAddr,
- IN UCHAR FaileCode);
-
-ULONG RogueApTableSetEntry(
- IN PRTMP_ADAPTER pAd,
- OUT ROGUEAP_TABLE *Tab,
- IN PUCHAR pAddr,
- IN UCHAR FaileCode);
-
-VOID RogueApTableDeleteEntry(
- IN OUT ROGUEAP_TABLE *Tab,
- IN PUCHAR pAddr);
-
-VOID LeapAuthTimeout(
- IN PVOID SystemSpecific1,
- IN PVOID FunctionContext,
- IN PVOID SystemSpecific2,
- IN PVOID SystemSpecific3);
-
-VOID LeapSendRogueAPReport(
- IN PRTMP_ADAPTER pAd);
-
-BOOLEAN CCKMAssocRspSanity(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen);
-
-#endif // __LEAP_H__
diff --git a/drivers/staging/rt2860/mlme.h b/drivers/staging/rt2860/mlme.h
index 5cb61652b668..3d1a8284fbd4 100644
--- a/drivers/staging/rt2860/mlme.h
+++ b/drivers/staging/rt2860/mlme.h
@@ -73,17 +73,7 @@
#define MAX_CHANNEL_TIME 140 // unit: msec, for single band scan
#define FAST_ACTIVE_SCAN_TIME 30 // Active scan waiting for probe response time
#define CW_MIN_IN_BITS 4 // actual CwMin = 2^CW_MIN_IN_BITS - 1
-
-
-#ifdef CONFIG_STA_SUPPORT
-#ifndef CONFIG_AP_SUPPORT
#define CW_MAX_IN_BITS 10 // actual CwMax = 2^CW_MAX_IN_BITS - 1
-#endif
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef CONFIG_APSTA_MIXED_SUPPORT
-extern UINT32 CW_MAX_IN_BITS;
-#endif // CONFIG_APSTA_MIXED_SUPPORT //
// Note: RSSI_TO_DBM_OFFSET has been changed to variable for new RF (2004-0720).
// SHould not refer to this constant anymore
@@ -115,10 +105,7 @@ extern UINT32 CW_MAX_IN_BITS;
#define BSS_NOT_FOUND 0xFFFFFFFF
-
-#ifdef CONFIG_STA_SUPPORT
#define MAX_LEN_OF_MLME_QUEUE 40 //10
-#endif // CONFIG_STA_SUPPORT //
#define SCAN_PASSIVE 18 // scan with no probe request, only wait beacon and probe response
#define SCAN_ACTIVE 19 // scan with probe request, and wait beacon and probe response
@@ -128,10 +115,6 @@ extern UINT32 CW_MAX_IN_BITS;
#define SCAN_CISCO_CHANNEL_LOAD 23 // Single channel passive scan for channel load collection
#define FAST_SCAN_ACTIVE 24 // scan with probe request, and wait beacon and probe response
-#ifdef DOT11N_DRAFT3
-#define SCAN_2040_BSS_COEXIST 26
-#endif // DOT11N_DRAFT3 //
-
#define MAC_ADDR_IS_GROUP(Addr) (((Addr[0]) & 0x01))
#define MAC_ADDR_HASH(Addr) (Addr[0] ^ Addr[1] ^ Addr[2] ^ Addr[3] ^ Addr[4] ^ Addr[5])
#define MAC_ADDR_HASH_INDEX(Addr) (MAC_ADDR_HASH(Addr) % HASH_TABLE_SIZE)
@@ -204,22 +187,6 @@ if (((__pEntry)) != NULL) \
//
// HT Capability INFO field in HT Cap IE .
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT LSIGTxopProSup:1;
- USHORT Forty_Mhz_Intolerant:1;
- USHORT PSMP:1;
- USHORT CCKmodein40:1;
- USHORT AMsduSize:1;
- USHORT DelayedBA:1; //rt2860c not support
- USHORT RxSTBC:2;
- USHORT TxSTBC:1;
- USHORT ShortGIfor40:1; //for40MHz
- USHORT ShortGIfor20:1;
- USHORT GF:1; //green field
- USHORT MimoPs:2;//momi power safe
- USHORT ChannelWidth:1;
- USHORT AdvCoding:1;
-#else
USHORT AdvCoding:1;
USHORT ChannelWidth:1;
USHORT MimoPs:2;//momi power safe
@@ -234,53 +201,29 @@ typedef struct PACKED {
USHORT PSMP:1;
USHORT Forty_Mhz_Intolerant:1;
USHORT LSIGTxopProSup:1;
-#endif /* !RT_BIG_ENDIAN */
} HT_CAP_INFO, *PHT_CAP_INFO;
// HT Capability INFO field in HT Cap IE .
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- UCHAR rsv:3;//momi power safe
- UCHAR MpduDensity:3;
- UCHAR MaxRAmpduFactor:2;
-#else
UCHAR MaxRAmpduFactor:2;
UCHAR MpduDensity:3;
UCHAR rsv:3;//momi power safe
-#endif /* !RT_BIG_ENDIAN */
} HT_CAP_PARM, *PHT_CAP_PARM;
// HT Capability INFO field in HT Cap IE .
typedef struct PACKED {
UCHAR MCSSet[10];
UCHAR SupRate[2]; // unit : 1Mbps
-#ifdef RT_BIG_ENDIAN
- UCHAR rsv:3;
- UCHAR MpduDensity:1;
- UCHAR TxStream:2;
- UCHAR TxRxNotEqual:1;
- UCHAR TxMCSSetDefined:1;
-#else
UCHAR TxMCSSetDefined:1;
UCHAR TxRxNotEqual:1;
UCHAR TxStream:2;
UCHAR MpduDensity:1;
UCHAR rsv:3;
-#endif // RT_BIG_ENDIAN //
UCHAR rsv3[3];
} HT_MCS_SET, *PHT_MCS_SET;
// HT Capability INFO field in HT Cap IE .
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT rsv2:4;
- USHORT RDGSupport:1; //reverse Direction Grant support
- USHORT PlusHTC:1; //+HTC control field support
- USHORT MCSFeedback:2; //0:no MCS feedback, 2:unsolicited MCS feedback, 3:Full MCS feedback, 1:rsv.
- USHORT rsv:5;//momi power safe
- USHORT TranTime:2;
- USHORT Pco:1;
-#else
USHORT Pco:1;
USHORT TranTime:2;
USHORT rsv:5;//momi power safe
@@ -288,33 +231,10 @@ typedef struct PACKED {
USHORT PlusHTC:1; //+HTC control field support
USHORT RDGSupport:1; //reverse Direction Grant support
USHORT rsv2:4;
-#endif /* RT_BIG_ENDIAN */
} EXT_HT_CAP_INFO, *PEXT_HT_CAP_INFO;
// HT Beamforming field in HT Cap IE .
typedef struct PACKED _HT_BF_CAP{
-#ifdef RT_BIG_ENDIAN
- ULONG rsv:3;
- ULONG ChanEstimation:2;
- ULONG CSIRowBFSup:2;
- ULONG ComSteerBFAntSup:2;
- ULONG NoComSteerBFAntSup:2;
- ULONG CSIBFAntSup:2;
- ULONG MinGrouping:2;
- ULONG ExpComBF:2;
- ULONG ExpNoComBF:2;
- ULONG ExpCSIFbk:2;
- ULONG ExpComSteerCapable:1;
- ULONG ExpNoComSteerCapable:1;
- ULONG ExpCSICapable:1;
- ULONG Calibration:2;
- ULONG ImpTxBFCapable:1;
- ULONG TxNDPCapable:1;
- ULONG RxNDPCapable:1;
- ULONG TxSoundCapable:1;
- ULONG RxSoundCapable:1;
- ULONG TxBFRecCapable:1;
-#else
ULONG TxBFRecCapable:1;
ULONG RxSoundCapable:1;
ULONG TxSoundCapable:1;
@@ -335,21 +255,10 @@ typedef struct PACKED _HT_BF_CAP{
ULONG CSIRowBFSup:2;
ULONG ChanEstimation:2;
ULONG rsv:3;
-#endif // RT_BIG_ENDIAN //
} HT_BF_CAP, *PHT_BF_CAP;
// HT antenna selection field in HT Cap IE .
typedef struct PACKED _HT_AS_CAP{
-#ifdef RT_BIG_ENDIAN
- UCHAR rsv:1;
- UCHAR TxSoundPPDU:1;
- UCHAR RxASel:1;
- UCHAR AntIndFbk:1;
- UCHAR ExpCSIFbk:1;
- UCHAR AntIndFbkTxASEL:1;
- UCHAR ExpCSIFbkTxASEL:1;
- UCHAR AntSelect:1;
-#else
UCHAR AntSelect:1;
UCHAR ExpCSIFbkTxASEL:1;
UCHAR AntIndFbkTxASEL:1;
@@ -358,7 +267,6 @@ typedef struct PACKED _HT_AS_CAP{
UCHAR RxASel:1;
UCHAR TxSoundPPDU:1;
UCHAR rsv:1;
-#endif // RT_BIG_ENDIAN //
} HT_AS_CAP, *PHT_AS_CAP;
// Draft 1.0 set IE length 26, but is extensible..
@@ -402,17 +310,10 @@ typedef struct PACKED _OVERLAP_BSS_SCAN_IE{
// 7.3.2.56. 20/40 Coexistence element used in Element ID = 72 = IE_2040_BSS_COEXIST
typedef union PACKED _BSS_2040_COEXIST_IE{
struct PACKED {
- #ifdef RT_BIG_ENDIAN
- UCHAR rsv:5;
- UCHAR BSS20WidthReq:1;
- UCHAR Intolerant40:1;
- UCHAR InfoReq:1;
- #else
UCHAR InfoReq:1;
UCHAR Intolerant40:1; // Inter-BSS. set 1 when prohibits a receiving BSS from operating as a 20/40 Mhz BSS.
UCHAR BSS20WidthReq:1; // Intra-BSS set 1 when prohibits a receiving AP from operating its BSS as a 20/40MHz BSS.
UCHAR rsv:5;
-#endif // RT_BIG_ENDIAN //
} field;
UCHAR word;
} BSS_2040_COEXIST_IE, *PBSS_2040_COEXIST_IE;
@@ -438,17 +339,10 @@ typedef struct _TRIGGER_EVENT_TAB{
// 7.3.27 20/40 Bss Coexistence Mgmt capability used in extended capabilities information IE( ID = 127 = IE_EXT_CAPABILITY).
// This is the first octet and was defined in 802.11n D3.03 and 802.11yD9.0
typedef struct PACKED _EXT_CAP_INFO_ELEMENT{
-#ifdef RT_BIG_ENDIAN
- UCHAR rsv2:5;
- UCHAR ExtendChannelSwitch:1;
- UCHAR rsv:1;
- UCHAR BssCoexistMgmtSupport:1;
-#else
UCHAR BssCoexistMgmtSupport:1;
UCHAR rsv:1;
UCHAR ExtendChannelSwitch:1;
UCHAR rsv2:5;
-#endif // RT_BIG_ENDIAN //
}EXT_CAP_INFO_ELEMENT, *PEXT_CAP_INFO_ELEMENT;
@@ -494,18 +388,6 @@ 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
- 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
- USHORT RxSTBC:2; // 2 bits
- USHORT TxSTBC:1;
- USHORT ShortGIfor40:1; //for40MHz
- USHORT ShortGIfor20:1;
- USHORT GF:1; //green field
- USHORT MimoPs:2;//mimo power safe MMPS_
- USHORT ChannelWidth:1;
-#else
USHORT ChannelWidth:1;
USHORT MimoPs:2;//mimo power safe MMPS_
USHORT GF:1; //green field
@@ -516,34 +398,18 @@ typedef struct {
USHORT AmsduEnable:1; // Enable to transmit A-MSDU. Suggest disable. We should use A-MPDU to gain best benifit of 802.11n
USHORT AmsduSize:1; // Max receiving A-MSDU size
USHORT rsv:5;
-#endif
//Substract from Addiont HT INFO IE
-#ifdef RT_BIG_ENDIAN
- UCHAR RecomWidth:1;
- UCHAR ExtChanOffset:2; // Please not the difference with following UCHAR NewExtChannelOffset; from 802.11n
- UCHAR MpduDensity:3;
- UCHAR MaxRAmpduFactor:2;
-#else
UCHAR MaxRAmpduFactor:2;
UCHAR MpduDensity:3;
UCHAR ExtChanOffset:2; // Please not the difference with following UCHAR NewExtChannelOffset; from 802.11n
UCHAR RecomWidth:1;
-#endif
-#ifdef RT_BIG_ENDIAN
- USHORT rsv2:11;
- USHORT OBSS_NonHTExist:1;
- USHORT rsv3:1;
- USHORT NonGfPresent:1;
- USHORT OperaionMode:2;
-#else
USHORT OperaionMode:2;
USHORT NonGfPresent:1;
USHORT rsv3:1;
USHORT OBSS_NonHTExist:1;
USHORT rsv2:11;
-#endif
// New Extension Channel Offset IE
UCHAR NewExtChannelOffset;
@@ -553,50 +419,24 @@ typedef struct {
// field in Addtional HT Information IE .
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- UCHAR SerInterGranu:3;
- UCHAR S_PSMPSup:1;
- UCHAR RifsMode:1;
- UCHAR RecomWidth:1;
- UCHAR ExtChanOffset:2;
-#else
UCHAR ExtChanOffset:2;
UCHAR RecomWidth:1;
UCHAR RifsMode:1;
UCHAR S_PSMPSup:1; //Indicate support for scheduled PSMP
UCHAR SerInterGranu:3; //service interval granularity
-#endif
} ADD_HTINFO, *PADD_HTINFO;
typedef struct PACKED{
-#ifdef RT_BIG_ENDIAN
- USHORT rsv2:11;
- USHORT OBSS_NonHTExist:1;
- USHORT rsv:1;
- USHORT NonGfPresent:1;
- USHORT OperaionMode:2;
-#else
USHORT OperaionMode:2;
USHORT NonGfPresent:1;
USHORT rsv:1;
USHORT OBSS_NonHTExist:1;
USHORT rsv2:11;
-#endif
} ADD_HTINFO2, *PADD_HTINFO2;
// TODO: Need sync with spec about the definition of StbcMcs. In Draft 3.03, it's reserved.
typedef struct PACKED{
-#ifdef RT_BIG_ENDIAN
- USHORT rsv:4;
- USHORT PcoPhase:1;
- USHORT PcoActive:1;
- USHORT LsigTxopProt:1;
- USHORT STBCBeacon:1;
- USHORT DualCTSProtect:1;
- USHORT DualBeacon:1;
- USHORT StbcMcs:6;
-#else
USHORT StbcMcs:6;
USHORT DualBeacon:1;
USHORT DualCTSProtect:1;
@@ -605,7 +445,6 @@ typedef struct PACKED{
USHORT PcoActive:1;
USHORT PcoPhase:1;
USHORT rsv:4;
-#endif // RT_BIG_ENDIAN //
} ADD_HTINFO3, *PADD_HTINFO3;
#define SIZE_ADD_HT_INFO_IE 22
@@ -624,22 +463,6 @@ typedef struct PACKED{
// 4-byte HTC field. maybe included in any frame except non-QOS data frame. The Order bit must set 1.
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- UINT32 RDG:1; //RDG / More PPDU
- UINT32 ACConstraint:1; //feedback request
- UINT32 rsv:5; //calibration sequence
- UINT32 ZLFAnnouce:1; // ZLF announcement
- UINT32 CSISTEERING:2; //CSI/ STEERING
- UINT32 FBKReq:2; //feedback request
- UINT32 CalSeq:2; //calibration sequence
- UINT32 CalPos:2; // calibration position
- UINT32 MFBorASC:7; //Link adaptation feedback containing recommended MCS. 0x7f for no feedback or not available
- UINT32 MFS:3; //SET to the received value of MRS. 0x111 for unsolicited MFB.
- UINT32 MRSorASI:3; // MRQ Sequence identifier. unchanged during entire procedure. 0x000-0x110.
- UINT32 MRQ:1; //MCS feedback. Request for a MCS feedback
- UINT32 TRQ:1; //sounding request
- UINT32 MA:1; //management action payload exist in (QoS Null+HTC)
-#else
UINT32 MA:1; //management action payload exist in (QoS Null+HTC)
UINT32 TRQ:1; //sounding request
UINT32 MRQ:1; //MCS feedback. Request for a MCS feedback
@@ -654,41 +477,19 @@ typedef struct PACKED {
UINT32 rsv:5; //calibration sequence
UINT32 ACConstraint:1; //feedback request
UINT32 RDG:1; //RDG / More PPDU
-#endif /* !RT_BIG_ENDIAN */
} HT_CONTROL, *PHT_CONTROL;
// 2-byte QOS CONTROL field
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT Txop_QueueSize:8;
- USHORT AMsduPresent:1;
- USHORT AckPolicy:2; //0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA
- USHORT EOSP:1;
- USHORT TID:4;
-#else
USHORT TID:4;
USHORT EOSP:1;
USHORT AckPolicy:2; //0: normal ACK 1:No ACK 2:scheduled under MTBA/PSMP 3: BA
USHORT AMsduPresent:1;
USHORT Txop_QueueSize:8;
-#endif /* !RT_BIG_ENDIAN */
} QOS_CONTROL, *PQOS_CONTROL;
// 2-byte Frame control field
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT Order:1; // Strict order expected
- USHORT Wep:1; // Wep data
- USHORT MoreData:1; // More data bit
- USHORT PwrMgmt:1; // Power management bit
- USHORT Retry:1; // Retry status bit
- USHORT MoreFrag:1; // More fragment bit
- USHORT FrDs:1; // From DS indication
- USHORT ToDs:1; // To DS indication
- USHORT SubType:4; // MSDU subtype
- USHORT Type:2; // MSDU type
- USHORT Ver:2; // Protocol version
-#else
USHORT Ver:2; // Protocol version
USHORT Type:2; // MSDU type
USHORT SubType:4; // MSDU subtype
@@ -700,7 +501,6 @@ typedef struct PACKED {
USHORT MoreData:1; // More data bit
USHORT Wep:1; // Wep data
USHORT Order:1; // Strict order expected
-#endif /* !RT_BIG_ENDIAN */
} FRAME_CONTROL, *PFRAME_CONTROL;
typedef struct PACKED _HEADER_802_11 {
@@ -709,13 +509,8 @@ typedef struct PACKED _HEADER_802_11 {
UCHAR Addr1[MAC_ADDR_LEN];
UCHAR Addr2[MAC_ADDR_LEN];
UCHAR Addr3[MAC_ADDR_LEN];
-#ifdef RT_BIG_ENDIAN
- USHORT Sequence:12;
- USHORT Frag:4;
-#else
USHORT Frag:4;
USHORT Sequence:12;
-#endif /* !RT_BIG_ENDIAN */
UCHAR Octet[0];
} HEADER_802_11, *PHEADER_802_11;
@@ -739,42 +534,24 @@ typedef struct PACKED _HEADER_802_3 {
////Block ACK related format
// 2-byte BA Parameter field in DELBA frames to terminate an already set up bA
typedef struct PACKED{
-#ifdef RT_BIG_ENDIAN
- USHORT TID:4; // value of TC os TS
- USHORT Initiator:1; // 1: originator 0:recipient
- USHORT Rsv:11; // always set to 0
-#else
USHORT Rsv:11; // always set to 0
USHORT Initiator:1; // 1: originator 0:recipient
USHORT TID:4; // value of TC os TS
-#endif /* !RT_BIG_ENDIAN */
} DELBA_PARM, *PDELBA_PARM;
// 2-byte BA Parameter Set field in ADDBA frames to signal parm for setting up a BA
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT BufSize:10; // number of buffe of size 2304 octetsr
- USHORT TID:4; // value of TC os TS
- USHORT BAPolicy:1; // 1: immediately BA 0:delayed BA
- USHORT AMSDUSupported:1; // 0: not permitted 1: permitted
-#else
USHORT AMSDUSupported:1; // 0: not permitted 1: permitted
USHORT BAPolicy:1; // 1: immediately BA 0:delayed BA
USHORT TID:4; // value of TC os TS
USHORT BufSize:10; // number of buffe of size 2304 octetsr
-#endif /* !RT_BIG_ENDIAN */
} BA_PARM, *PBA_PARM;
// 2-byte BA Starting Seq CONTROL field
typedef union PACKED {
struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT StartSeq:12; // sequence number of the 1st MSDU for which this BAR is sent
- USHORT FragNum:4; // always set to 0
-#else
USHORT FragNum:4; // always set to 0
USHORT StartSeq:12; // sequence number of the 1st MSDU for which this BAR is sent
-#endif /* RT_BIG_ENDIAN */
} field;
USHORT word;
} BASEQ_CONTROL, *PBASEQ_CONTROL;
@@ -782,63 +559,34 @@ typedef union PACKED {
//BAControl and BARControl are the same
// 2-byte BA CONTROL field in BA frame
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT TID:4;
- USHORT Rsv:9;
- USHORT Compressed:1;
- USHORT MTID:1; //EWC V1.24
- USHORT ACKPolicy:1; // only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK
-#else
USHORT ACKPolicy:1; // only related to N-Delayed BA. But not support in RT2860b. 0:NormalACK 1:No ACK
USHORT MTID:1; //EWC V1.24
USHORT Compressed:1;
USHORT Rsv:9;
USHORT TID:4;
-#endif /* !RT_BIG_ENDIAN */
} BA_CONTROL, *PBA_CONTROL;
// 2-byte BAR CONTROL field in BAR frame
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT TID:4;
- USHORT Rsv1:9;
- USHORT Compressed:1;
- USHORT MTID:1; //if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ
- USHORT ACKPolicy:1;
-#else
USHORT ACKPolicy:1; // 0:normal ack, 1:no ack.
USHORT MTID:1; //if this bit1, use FRAME_MTBA_REQ, if 0, use FRAME_BA_REQ
USHORT Compressed:1;
USHORT Rsv1:9;
USHORT TID:4;
-#endif /* !RT_BIG_ENDIAN */
} BAR_CONTROL, *PBAR_CONTROL;
// BARControl in MTBAR frame
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT NumTID:4;
- USHORT Rsv1:9;
- USHORT Compressed:1;
- USHORT MTID:1;
- USHORT ACKPolicy:1;
-#else
USHORT ACKPolicy:1;
USHORT MTID:1;
USHORT Compressed:1;
USHORT Rsv1:9;
USHORT NumTID:4;
-#endif /* !RT_BIG_ENDIAN */
} MTBAR_CONTROL, *PMTBAR_CONTROL;
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT TID:4;
- USHORT Rsv1:12;
-#else
USHORT Rsv1:12;
USHORT TID:4;
-#endif /* !RT_BIG_ENDIAN */
} PER_TID_INFO, *PPER_TID_INFO;
typedef struct {
@@ -1058,15 +806,6 @@ typedef struct {
// QBSS Info field in QSTA's assoc req
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- UCHAR Rsv2:1;
- UCHAR MaxSPLength:2;
- UCHAR Rsv1:1;
- UCHAR UAPSD_AC_BE:1;
- UCHAR UAPSD_AC_BK:1;
- UCHAR UAPSD_AC_VI:1;
- UCHAR UAPSD_AC_VO:1;
-#else
UCHAR UAPSD_AC_VO:1;
UCHAR UAPSD_AC_VI:1;
UCHAR UAPSD_AC_BK:1;
@@ -1074,20 +813,13 @@ typedef struct PACKED {
UCHAR Rsv1:1;
UCHAR MaxSPLength:2;
UCHAR Rsv2:1;
-#endif /* !RT_BIG_ENDIAN */
} QBSS_STA_INFO_PARM, *PQBSS_STA_INFO_PARM;
// QBSS Info field in QAP's Beacon/ProbeRsp
typedef struct PACKED {
-#ifdef RT_BIG_ENDIAN
- UCHAR UAPSD:1;
- UCHAR Rsv:3;
- UCHAR ParamSetCount:4;
-#else
UCHAR ParamSetCount:4;
UCHAR Rsv:3;
UCHAR UAPSD:1;
-#endif /* !RT_BIG_ENDIAN */
} QBSS_AP_INFO_PARM, *PQBSS_AP_INFO_PARM;
// QOS Capability reported in QAP's BEACON/ProbeRsp
@@ -1101,13 +833,10 @@ typedef struct {
UCHAR EdcaUpdateCount;
} QOS_CAPABILITY_PARM, *PQOS_CAPABILITY_PARM;
-#ifdef CONFIG_STA_SUPPORT
typedef struct {
UCHAR IELen;
UCHAR IE[MAX_CUSTOM_LEN];
} WPA_IE_;
-#endif // CONFIG_STA_SUPPORT //
-
typedef struct {
UCHAR Bssid[MAC_ADDR_LEN];
@@ -1167,14 +896,8 @@ typedef struct {
EDCA_PARM EdcaParm;
QOS_CAPABILITY_PARM QosCapability;
QBSS_LOAD_PARM QbssLoad;
-#ifdef CONFIG_STA_SUPPORT
WPA_IE_ WpaIE;
WPA_IE_ RsnIE;
-#ifdef EXT_BUILD_CHANNEL_LIST
- UCHAR CountryString[3];
- BOOLEAN bHasCountryIE;
-#endif // EXT_BUILD_CHANNEL_LIST //
-#endif // CONFIG_STA_SUPPORT //
} BSS_ENTRY, *PBSS_ENTRY;
typedef struct {
@@ -1333,29 +1056,6 @@ typedef struct _MLME_START_REQ_STRUCT {
UCHAR SsidLen;
} MLME_START_REQ_STRUCT, *PMLME_START_REQ_STRUCT;
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
-// structure for DLS
-typedef struct _RT_802_11_DLS {
- USHORT TimeOut; // Use to time out while slience, unit: second , set by UI
- USHORT CountDownTimer; // Use to time out while slience,unit: second , used by driver only
- NDIS_802_11_MAC_ADDRESS MacAddr; // set by UI
- UCHAR Status; // 0: none , 1: wait STAkey, 2: finish DLS setup , set by driver only
- BOOLEAN Valid; // 1: valid , 0: invalid , set by UI, use to setup or tear down DLS link
- RALINK_TIMER_STRUCT Timer; // Use to time out while handshake
- USHORT Sequence;
- USHORT MacTabMatchWCID; // ASIC
- BOOLEAN bHTCap;
- PVOID pAd;
-} RT_802_11_DLS, *PRT_802_11_DLS;
-
-typedef struct _MLME_DLS_REQ_STRUCT {
- PRT_802_11_DLS pDLS;
- USHORT Reason;
-} MLME_DLS_REQ_STRUCT, *PMLME_DLS_REQ_STRUCT;
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
-
typedef struct PACKED {
UCHAR Eid;
UCHAR Len;
@@ -1365,21 +1065,12 @@ typedef struct PACKED {
typedef struct PACKED _RTMP_TX_RATE_SWITCH
{
UCHAR ItemNo;
-#ifdef RT_BIG_ENDIAN
- UCHAR Rsv2:2;
- UCHAR Mode:2;
- UCHAR Rsv1:1;
- UCHAR BW:1;
- UCHAR ShortGI:1;
- UCHAR STBC:1;
-#else
UCHAR STBC:1;
UCHAR ShortGI:1;
UCHAR BW:1;
UCHAR Rsv1:1;
UCHAR Mode:2;
UCHAR Rsv2:2;
-#endif
UCHAR CurrMCS;
UCHAR TrainUp;
UCHAR TrainDown;
diff --git a/drivers/staging/rt2860/oid.h b/drivers/staging/rt2860/oid.h
index 5e6ed9f62f9d..8519afccd979 100644
--- a/drivers/staging/rt2860/oid.h
+++ b/drivers/staging/rt2860/oid.h
@@ -80,13 +80,8 @@
#define MAX_LENGTH_OF_SUPPORT_RATES 12 // 1, 2, 5.5, 11, 6, 9, 12, 18, 24, 36, 48, 54
#define MAX_NUMBER_OF_DLS_ENTRY 4
-#ifndef UNDER_CE
-
#define OID_GEN_MACHINE_NAME 0x0001021A
-#ifdef RALINK_ATE
-#define RT_QUERY_ATE_TXDONE_COUNT 0x0401
-#endif // RALINK_ATE //
#define RT_QUERY_SIGNAL_CONTEXT 0x0402
#define RT_SET_IAPP_PID 0x0404
#define RT_SET_APD_PID 0x0405
@@ -163,7 +158,7 @@
#define RT_OID_802_11_QUERY_LAST_RX_RATE 0x0613
#define RT_OID_802_11_TX_POWER_LEVEL_1 0x0614
#define RT_OID_802_11_QUERY_PIDVID 0x0615
-//for WPA_SUPPLICANT_SUPPORT
+
#define OID_SET_COUNTERMEASURES 0x0616
#define OID_802_11_SET_IEEE8021X 0x0617
#define OID_802_11_SET_IEEE8021X_REQUIRE_KEY 0x0618
@@ -388,9 +383,6 @@ typedef struct PACKED _RADIUS_CONF
RADIUS_KEY_INFO RadiusInfo[8/*MAX_MBSSID_NUM*/];
} RADIUS_CONF, *PRADIUS_CONF;
-
-
-#ifdef CONFIG_STA_SUPPORT
// Key mapping keys require a BSSID
typedef struct _NDIS_802_11_KEY
{
@@ -401,7 +393,6 @@ typedef struct _NDIS_802_11_KEY
NDIS_802_11_KEY_RSC KeyRSC;
UCHAR KeyMaterial[1]; // variable length depending on above field
} NDIS_802_11_KEY, *PNDIS_802_11_KEY;
-#endif // CONFIG_STA_SUPPORT //
typedef struct _NDIS_802_11_REMOVE_KEY
{
@@ -544,8 +535,10 @@ typedef enum _NDIS_802_11_WEP_STATUS
Ndis802_11Encryption3KeyAbsent,
Ndis802_11Encryption4Enabled, // TKIP or AES mix
Ndis802_11Encryption4KeyAbsent,
+#ifndef RT30xx
Ndis802_11GroupWEP40Enabled,
Ndis802_11GroupWEP104Enabled,
+#endif
} NDIS_802_11_WEP_STATUS, *PNDIS_802_11_WEP_STATUS,
NDIS_802_11_ENCRYPTION_STATUS, *PNDIS_802_11_ENCRYPTION_STATUS;
@@ -605,7 +598,6 @@ typedef enum _NDIS_802_11_MEDIA_STREAM_MODE
// PMKID Structures
typedef UCHAR NDIS_802_11_PMKID_VALUE[16];
-#ifdef CONFIG_STA_SUPPORT
typedef struct _BSSID_INFO
{
NDIS_802_11_MAC_ADDRESS BSSID;
@@ -618,8 +610,6 @@ typedef struct _NDIS_802_11_PMKID
UINT BSSIDInfoCount;
BSSID_INFO BSSIDInfo[1];
} NDIS_802_11_PMKID, *PNDIS_802_11_PMKID;
-#endif // CONFIG_STA_SUPPORT //
-
typedef struct _NDIS_802_11_AUTHENTICATION_ENCRYPTION
{
@@ -636,9 +626,6 @@ typedef struct _NDIS_802_11_CAPABILITY
NDIS_802_11_AUTHENTICATION_ENCRYPTION AuthenticationEncryptionSupported[1];
} NDIS_802_11_CAPABILITY, *PNDIS_802_11_CAPABILITY;
-//#endif //of WIN 2k
-#endif //UNDER_CE
-
#if WIRELESS_EXT <= 11
#ifndef SIOCDEVPRIVATE
#define SIOCDEVPRIVATE 0x8BE0
@@ -646,21 +633,20 @@ typedef struct _NDIS_802_11_CAPABILITY
#define SIOCIWFIRSTPRIV SIOCDEVPRIVATE
#endif
-#ifdef CONFIG_STA_SUPPORT
+#ifdef RT30xx
+#define RT_PRIV_IOCTL_EXT (SIOCIWFIRSTPRIV + 0x01) // Sync. with AP for wsc upnp daemon
+#endif
#define RTPRIV_IOCTL_SET (SIOCIWFIRSTPRIV + 0x02)
#ifdef DBG
#define RTPRIV_IOCTL_BBP (SIOCIWFIRSTPRIV + 0x03)
#define RTPRIV_IOCTL_MAC (SIOCIWFIRSTPRIV + 0x05)
+#ifdef RT30xx
+#define RTPRIV_IOCTL_RF (SIOCIWFIRSTPRIV + 0x13)
+#endif
#define RTPRIV_IOCTL_E2P (SIOCIWFIRSTPRIV + 0x07)
#endif
-#ifdef RALINK_ATE
-#ifdef RALINK_28xx_QA
-#define RTPRIV_IOCTL_ATE (SIOCIWFIRSTPRIV + 0x08)
-#endif // RALINK_28xx_QA //
-#endif // RALINK_ATE //
-
#define RTPRIV_IOCTL_STATISTICS (SIOCIWFIRSTPRIV + 0x09)
#define RTPRIV_IOCTL_ADD_PMKID_CACHE (SIOCIWFIRSTPRIV + 0x0A)
#define RTPRIV_IOCTL_RADIUS_DATA (SIOCIWFIRSTPRIV + 0x0C)
@@ -674,67 +660,61 @@ enum {
SHOW_DRVIER_VERION = 5,
SHOW_BA_INFO = 6,
SHOW_DESC_INFO = 7,
+#ifdef RT2870
+ SHOW_RXBULK_INFO = 8,
+ SHOW_TXBULK_INFO = 9,
+#endif // RT2870 //
RAIO_OFF = 10,
RAIO_ON = 11,
-#ifdef QOS_DLS_SUPPORT
- SHOW_DLS_ENTRY_INFO = 19,
-#endif // QOS_DLS_SUPPORT //
SHOW_CFG_VALUE = 20,
+#if !defined(RT2860) && !defined(RT30xx)
+ SHOW_ADHOC_ENTRY_INFO = 21,
+#endif
};
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef SNMP_SUPPORT
-//SNMP ieee 802dot11, kathy , 2008_0220
-// dot11res(3)
-#define RT_OID_802_11_MANUFACTUREROUI 0x0700
-#define RT_OID_802_11_MANUFACTURERNAME 0x0701
-#define RT_OID_802_11_RESOURCETYPEIDNAME 0x0702
-
-// dot11smt(1)
-#define RT_OID_802_11_PRIVACYOPTIONIMPLEMENTED 0x0703
-#define RT_OID_802_11_POWERMANAGEMENTMODE 0x0704
-#define OID_802_11_WEPDEFAULTKEYVALUE 0x0705 // read , write
-#define OID_802_11_WEPDEFAULTKEYID 0x0706
-#define RT_OID_802_11_WEPKEYMAPPINGLENGTH 0x0707
-#define OID_802_11_SHORTRETRYLIMIT 0x0708
-#define OID_802_11_LONGRETRYLIMIT 0x0709
-#define RT_OID_802_11_PRODUCTID 0x0710
-#define RT_OID_802_11_MANUFACTUREID 0x0711
-
-// //dot11Phy(4)
-#define OID_802_11_CURRENTCHANNEL 0x0712
-
-//dot11mac
-#define RT_OID_802_11_MAC_ADDRESS 0x0713
-#endif // SNMP_SUPPORT //
-
#define OID_802_11_BUILD_CHANNEL_EX 0x0714
#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 RT30xx
+#define RT_OID_WSC_SET_PASSPHRASE 0x0740 // passphrase for wpa(2)-psk
+#define RT_OID_WSC_DRIVER_AUTO_CONNECT 0x0741
+#define RT_OID_WSC_QUERY_DEFAULT_PROFILE 0x0742
+#define RT_OID_WSC_SET_CONN_BY_PROFILE_INDEX 0x0743
+#define RT_OID_WSC_SET_ACTION 0x0744
+#define RT_OID_WSC_SET_SSID 0x0745
+#define RT_OID_WSC_SET_PIN_CODE 0x0746
+#define RT_OID_WSC_SET_MODE 0x0747 // PIN or PBC
+#define RT_OID_WSC_SET_CONF_MODE 0x0748 // Enrollee or Registrar
+#define RT_OID_WSC_SET_PROFILE 0x0749
+
+#define RT_OID_802_11_WSC_QUERY_PROFILE 0x0750
+// for consistency with RT61
+#define RT_OID_WSC_QUERY_STATUS 0x0751
+#define RT_OID_WSC_PIN_CODE 0x0752
+#define RT_OID_WSC_UUID 0x0753
+#define RT_OID_WSC_SET_SELECTED_REGISTRAR 0x0754
+#define RT_OID_WSC_EAPMSG 0x0755
+#define RT_OID_WSC_MANUFACTURER 0x0756
+#define RT_OID_WSC_MODEL_NAME 0x0757
+#define RT_OID_WSC_MODEL_NO 0x0758
+#define RT_OID_WSC_SERIAL_NO 0x0759
+#define RT_OID_WSC_MAC_ADDRESS 0x0760
+#endif
+
#ifdef LLTD_SUPPORT
// for consistency with RT61
#define RT_OID_GET_PHY_MODE 0x761
#endif // LLTD_SUPPORT //
+#if defined(RT2860) || defined(RT30xx)
// New for MeetingHouse Api support
#define OID_MH_802_1X_SUPPORTED 0xFFEDC100
+#endif
// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI. Don't change this definition!!!
typedef union _HTTRANSMIT_SETTING {
-#ifdef RT_BIG_ENDIAN
- struct {
- USHORT MODE:2; // Use definition MODE_xxx.
- USHORT TxBF:1;
- USHORT rsv:2;
- USHORT STBC:2; //SPACE
- USHORT ShortGI:1;
- USHORT BW:1; //channel bandwidth 20MHz or 40 MHz
- USHORT MCS:7; // MCS
- } field;
-#else
struct {
USHORT MCS:7; // MCS
USHORT BW:1; //channel bandwidth 20MHz or 40 MHz
@@ -744,7 +724,6 @@ typedef union _HTTRANSMIT_SETTING {
USHORT TxBF:1;
USHORT MODE:2; // Use definition MODE_xxx.
} field;
-#endif
USHORT word;
} HTTRANSMIT_SETTING, *PHTTRANSMIT_SETTING;
@@ -755,14 +734,12 @@ typedef enum _RT_802_11_PREAMBLE {
} RT_802_11_PREAMBLE, *PRT_802_11_PREAMBLE;
// Only for STA, need to sync with AP
-// 2005-03-08 match current RaConfig.
typedef enum _RT_802_11_PHY_MODE {
PHY_11BG_MIXED = 0,
PHY_11B,
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
@@ -770,7 +747,6 @@ 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;
// put all proprietery for-query objects here to reduce # of Query_OID
@@ -937,54 +913,14 @@ typedef struct _RT_LLTD_ASSOICATION_TABLE {
} RT_LLTD_ASSOICATION_TABLE, *PRT_LLTD_ASSOICATION_TABLE;
#endif // LLTD_SUPPORT //
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
-//rt2860, kathy 2007-0118
-// structure for DLS
-typedef struct _RT_802_11_DLS_UI {
- USHORT TimeOut; // unit: second , set by UI
- USHORT CountDownTimer; // unit: second , used by driver only
- NDIS_802_11_MAC_ADDRESS MacAddr; // set by UI
- UCHAR Status; // 0: none , 1: wait STAkey, 2: finish DLS setup , set by driver only
- BOOLEAN Valid; // 1: valid , 0: invalid , set by UI, use to setup or tear down DLS link
-} RT_802_11_DLS_UI, *PRT_802_11_DLS_UI;
-
-typedef struct _RT_802_11_DLS_INFO {
- RT_802_11_DLS_UI Entry[MAX_NUMBER_OF_DLS_ENTRY];
- UCHAR num;
-} RT_802_11_DLS_INFO, *PRT_802_11_DLS_INFO;
-
-typedef enum _RT_802_11_DLS_MODE {
- DLS_NONE,
- DLS_WAIT_KEY,
- DLS_FINISH
-} RT_802_11_DLS_MODE;
-#endif // QOS_DLS_SUPPORT //
-
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
-#define RT_ASSOC_EVENT_FLAG 0x0101
-#define RT_DISASSOC_EVENT_FLAG 0x0102
-#define RT_REQIE_EVENT_FLAG 0x0103
-#define RT_RESPIE_EVENT_FLAG 0x0104
-#define RT_ASSOCINFO_EVENT_FLAG 0x0105
-#define RT_PMKIDCAND_FLAG 0x0106
-#define RT_INTERFACE_DOWN 0x0107
-#define RT_INTERFACE_UP 0x0108
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-#endif // WPA_SUPPLICANT_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
-
#define MAX_CUSTOM_LEN 128
-#ifdef CONFIG_STA_SUPPORT
typedef enum _RT_802_11_D_CLIENT_MODE
{
Rt802_11_D_None,
Rt802_11_D_Flexible,
Rt802_11_D_Strict,
} RT_802_11_D_CLIENT_MODE, *PRT_802_11_D_CLIENT_MODE;
-#endif // CONFIG_STA_SUPPORT //
typedef struct _RT_CHANNEL_LIST_INFO
{
@@ -992,6 +928,27 @@ typedef struct _RT_CHANNEL_LIST_INFO
UCHAR ChannelListNum; // number of channel in ChannelList[]
} RT_CHANNEL_LIST_INFO, *PRT_CHANNEL_LIST_INFO;
+#ifdef RT2870
+// WSC configured credential
+typedef struct _WSC_CREDENTIAL
+{
+ NDIS_802_11_SSID SSID; // mandatory
+ USHORT AuthType; // mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa2-psk
+ USHORT EncrType; // mandatory, 1: none, 2: wep, 4: tkip, 8: aes
+ UCHAR Key[64]; // mandatory, Maximum 64 byte
+ USHORT KeyLength;
+ UCHAR MacAddr[6]; // mandatory, AP MAC address
+ UCHAR KeyIndex; // optional, default is 1
+ UCHAR Rsvd[3]; // Make alignment
+} WSC_CREDENTIAL, *PWSC_CREDENTIAL;
+
+// WSC configured profiles
+typedef struct _WSC_PROFILE
+{
+ UINT ProfileCnt;
+ WSC_CREDENTIAL Profile[8]; // Support up to 8 profiles
+} WSC_PROFILE, *PWSC_PROFILE;
+#endif
#endif // _OID_H_
diff --git a/drivers/staging/rt2860/rt28xx.h b/drivers/staging/rt2860/rt28xx.h
index e5e6f0a8de63..6e71acb16dc3 100644
--- a/drivers/staging/rt2860/rt28xx.h
+++ b/drivers/staging/rt2860/rt28xx.h
@@ -47,6 +47,15 @@
#define PCI_EECTRL 0x0004
#define PCI_MCUCTRL 0x0008
+#ifdef RT30xx
+#define OPT_14 0x114
+
+typedef int NTSTATUS;
+#define RETRY_LIMIT 10
+#define STATUS_SUCCESS 0x00
+#define STATUS_UNSUCCESSFUL 0x01
+#endif
+
//
// SCH/DMA registers - base address 0x0200
//
@@ -54,32 +63,6 @@
//
#define DMA_CSR0 0x200
#define INT_SOURCE_CSR 0x200
-#ifdef RT_BIG_ENDIAN
-typedef union _INT_SOURCE_CSR_STRUC {
- struct {
- UINT32 :14;
- UINT32 TxCoherent:1;
- UINT32 RxCoherent:1;
- UINT32 GPTimer:1;
- UINT32 AutoWakeup:1;//bit14
- UINT32 TXFifoStatusInt:1;//FIFO Statistics is full, sw should read 0x171c
- UINT32 PreTBTT:1;
- UINT32 TBTTInt:1;
- UINT32 RxTxCoherent:1;
- UINT32 MCUCommandINT:1;
- UINT32 MgmtDmaDone:1;
- UINT32 HccaDmaDone:1;
- UINT32 Ac3DmaDone:1;
- UINT32 Ac2DmaDone:1;
- UINT32 Ac1DmaDone:1;
- UINT32 Ac0DmaDone:1;
- UINT32 RxDone:1;
- UINT32 TxDelayINT:1; //delayed interrupt, not interrupt until several int or time limit hit
- UINT32 RxDelayINT:1; //dealyed interrupt
- } field;
- UINT32 word;
-} INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC;
-#else
typedef union _INT_SOURCE_CSR_STRUC {
struct {
UINT32 RxDelayINT:1;
@@ -104,32 +87,11 @@ typedef union _INT_SOURCE_CSR_STRUC {
} field;
UINT32 word;
} INT_SOURCE_CSR_STRUC, *PINT_SOURCE_CSR_STRUC;
-#endif
//
// INT_MASK_CSR: Interrupt MASK register. 1: the interrupt is mask OFF
//
#define INT_MASK_CSR 0x204
-#ifdef RT_BIG_ENDIAN
-typedef union _INT_MASK_CSR_STRUC {
- struct {
- UINT32 TxCoherent:1;
- UINT32 RxCoherent:1;
- UINT32 :20;
- UINT32 MCUCommandINT:1;
- UINT32 MgmtDmaDone:1;
- UINT32 HccaDmaDone:1;
- UINT32 Ac3DmaDone:1;
- UINT32 Ac2DmaDone:1;
- UINT32 Ac1DmaDone:1;
- UINT32 Ac0DmaDone:1;
- UINT32 RxDone:1;
- UINT32 TxDelay:1;
- UINT32 RXDelay_INT_MSK:1;
- } field;
- UINT32 word;
-}INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC;
-#else
typedef union _INT_MASK_CSR_STRUC {
struct {
UINT32 RXDelay_INT_MSK:1;
@@ -148,24 +110,8 @@ typedef union _INT_MASK_CSR_STRUC {
} field;
UINT32 word;
} INT_MASK_CSR_STRUC, *PINT_MASK_CSR_STRUC;
-#endif
+
#define WPDMA_GLO_CFG 0x208
-#ifdef RT_BIG_ENDIAN
-typedef union _WPDMA_GLO_CFG_STRUC {
- struct {
- UINT32 HDR_SEG_LEN:16;
- UINT32 RXHdrScater:8;
- UINT32 BigEndian:1;
- UINT32 EnTXWriteBackDDONE:1;
- UINT32 WPDMABurstSIZE:2;
- UINT32 RxDMABusy:1;
- UINT32 EnableRxDMA:1;
- UINT32 TxDMABusy:1;
- UINT32 EnableTxDMA:1;
- } field;
- UINT32 word;
-}WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC;
-#else
typedef union _WPDMA_GLO_CFG_STRUC {
struct {
UINT32 EnableTxDMA:1;
@@ -180,24 +126,8 @@ typedef union _WPDMA_GLO_CFG_STRUC {
} field;
UINT32 word;
} WPDMA_GLO_CFG_STRUC, *PWPDMA_GLO_CFG_STRUC;
-#endif
+
#define WPDMA_RST_IDX 0x20c
-#ifdef RT_BIG_ENDIAN
-typedef union _WPDMA_RST_IDX_STRUC {
- struct {
- UINT32 :15;
- UINT32 RST_DRX_IDX0:1;
- UINT32 rsv:10;
- UINT32 RST_DTX_IDX5:1;
- UINT32 RST_DTX_IDX4:1;
- UINT32 RST_DTX_IDX3:1;
- UINT32 RST_DTX_IDX2:1;
- UINT32 RST_DTX_IDX1:1;
- UINT32 RST_DTX_IDX0:1;
- } field;
- UINT32 word;
-}WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC;
-#else
typedef union _WPDMA_RST_IDX_STRUC {
struct {
UINT32 RST_DTX_IDX0:1;
@@ -212,21 +142,8 @@ typedef union _WPDMA_RST_IDX_STRUC {
} field;
UINT32 word;
} WPDMA_RST_IDX_STRUC, *PWPDMA_RST_IDX_STRUC;
-#endif
+
#define DELAY_INT_CFG 0x0210
-#ifdef RT_BIG_ENDIAN
-typedef union _DELAY_INT_CFG_STRUC {
- struct {
- UINT32 TXDLY_INT_EN:1;
- UINT32 TXMAX_PINT:7;
- UINT32 TXMAX_PTIME:8;
- UINT32 RXDLY_INT_EN:1;
- UINT32 RXMAX_PINT:7;
- UINT32 RXMAX_PTIME:8;
- } field;
- UINT32 word;
-}DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC;
-#else
typedef union _DELAY_INT_CFG_STRUC {
struct {
UINT32 RXMAX_PTIME:8;
@@ -238,20 +155,8 @@ typedef union _DELAY_INT_CFG_STRUC {
} field;
UINT32 word;
} DELAY_INT_CFG_STRUC, *PDELAY_INT_CFG_STRUC;
-#endif
+
#define WMM_AIFSN_CFG 0x0214
-#ifdef RT_BIG_ENDIAN
-typedef union _AIFSN_CSR_STRUC {
- struct {
- UINT32 Rsv:16;
- UINT32 Aifsn3:4; // for AC_VO
- UINT32 Aifsn2:4; // for AC_VI
- UINT32 Aifsn1:4; // for AC_BK
- UINT32 Aifsn0:4; // for AC_BE
- } field;
- UINT32 word;
-} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC;
-#else
typedef union _AIFSN_CSR_STRUC {
struct {
UINT32 Aifsn0:4; // for AC_BE
@@ -262,23 +167,11 @@ typedef union _AIFSN_CSR_STRUC {
} field;
UINT32 word;
} AIFSN_CSR_STRUC, *PAIFSN_CSR_STRUC;
-#endif
+
//
// CWMIN_CSR: CWmin for each EDCA AC
//
#define WMM_CWMIN_CFG 0x0218
-#ifdef RT_BIG_ENDIAN
-typedef union _CWMIN_CSR_STRUC {
- struct {
- UINT32 Rsv:16;
- UINT32 Cwmin3:4; // for AC_VO
- UINT32 Cwmin2:4; // for AC_VI
- UINT32 Cwmin1:4; // for AC_BK
- UINT32 Cwmin0:4; // for AC_BE
- } field;
- UINT32 word;
-} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC;
-#else
typedef union _CWMIN_CSR_STRUC {
struct {
UINT32 Cwmin0:4; // for AC_BE
@@ -289,24 +182,11 @@ typedef union _CWMIN_CSR_STRUC {
} field;
UINT32 word;
} CWMIN_CSR_STRUC, *PCWMIN_CSR_STRUC;
-#endif
//
// CWMAX_CSR: CWmin for each EDCA AC
//
#define WMM_CWMAX_CFG 0x021c
-#ifdef RT_BIG_ENDIAN
-typedef union _CWMAX_CSR_STRUC {
- struct {
- UINT32 Rsv:16;
- UINT32 Cwmax3:4; // for AC_VO
- UINT32 Cwmax2:4; // for AC_VI
- UINT32 Cwmax1:4; // for AC_BK
- UINT32 Cwmax0:4; // for AC_BE
- } field;
- UINT32 word;
-} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC;
-#else
typedef union _CWMAX_CSR_STRUC {
struct {
UINT32 Cwmax0:4; // for AC_BE
@@ -317,22 +197,11 @@ typedef union _CWMAX_CSR_STRUC {
} field;
UINT32 word;
} CWMAX_CSR_STRUC, *PCWMAX_CSR_STRUC;
-#endif
-
//
// AC_TXOP_CSR0: AC_BK/AC_BE TXOP register
//
#define WMM_TXOP0_CFG 0x0220
-#ifdef RT_BIG_ENDIAN
-typedef union _AC_TXOP_CSR0_STRUC {
- struct {
- USHORT Ac1Txop; // for AC_BE, in unit of 32us
- USHORT Ac0Txop; // for AC_BK, in unit of 32us
- } field;
- UINT32 word;
-} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC;
-#else
typedef union _AC_TXOP_CSR0_STRUC {
struct {
USHORT Ac0Txop; // for AC_BK, in unit of 32us
@@ -340,21 +209,11 @@ typedef union _AC_TXOP_CSR0_STRUC {
} field;
UINT32 word;
} AC_TXOP_CSR0_STRUC, *PAC_TXOP_CSR0_STRUC;
-#endif
//
// AC_TXOP_CSR1: AC_VO/AC_VI TXOP register
//
#define WMM_TXOP1_CFG 0x0224
-#ifdef RT_BIG_ENDIAN
-typedef union _AC_TXOP_CSR1_STRUC {
- struct {
- USHORT Ac3Txop; // for AC_VO, in unit of 32us
- USHORT Ac2Txop; // for AC_VI, in unit of 32us
- } field;
- UINT32 word;
-} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC;
-#else
typedef union _AC_TXOP_CSR1_STRUC {
struct {
USHORT Ac2Txop; // for AC_VI, in unit of 32us
@@ -362,7 +221,7 @@ typedef union _AC_TXOP_CSR1_STRUC {
} field;
UINT32 word;
} AC_TXOP_CSR1_STRUC, *PAC_TXOP_CSR1_STRUC;
-#endif
+
#define RINGREG_DIFF 0x10
#define GPIO_CTRL_CFG 0x0228 //MAC_CSR13
#define MCU_CMD_CFG 0x022c
@@ -398,25 +257,7 @@ typedef union _AC_TXOP_CSR1_STRUC {
#define RX_CRX_IDX 0x0298
#define RX_DRX_IDX 0x029c
#define USB_DMA_CFG 0x02a0
-#ifdef RT_BIG_ENDIAN
-typedef union _USB_DMA_CFG_STRUC {
- struct {
- UINT32 TxBusy:1; //USB DMA TX FSM busy . debug only
- UINT32 RxBusy:1; //USB DMA RX FSM busy . debug only
- UINT32 EpoutValid:6; //OUT endpoint data valid. debug only
- UINT32 TxBulkEn:1; //Enable USB DMA Tx
- UINT32 RxBulkEn:1; //Enable USB DMA Rx
- UINT32 RxBulkAggEn:1; //Enable Rx Bulk Aggregation
- UINT32 TxopHalt:1; //Halt TXOP count down when TX buffer is full.
- UINT32 TxClear:1; //Clear USB DMA TX path
- UINT32 rsv:2;
- UINT32 phyclear:1; //phy watch dog enable. write 1
- UINT32 RxBulkAggLmt:8; //Rx Bulk Aggregation Limit in unit of 1024 bytes
- UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns
- } field;
- UINT32 word;
-} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC;
-#else
+
typedef union _USB_DMA_CFG_STRUC {
struct {
UINT32 RxBulkAggTOut:8; //Rx Bulk Aggregation TimeOut in unit of 33ns
@@ -434,7 +275,6 @@ typedef union _USB_DMA_CFG_STRUC {
} field;
UINT32 word;
} USB_DMA_CFG_STRUC, *PUSB_DMA_CFG_STRUC;
-#endif
//
// 3 PBF registers
@@ -451,6 +291,36 @@ typedef union _USB_DMA_CFG_STRUC {
#define PBF_DBG 0x043c
#define PBF_CAP_CTRL 0x0440
+#ifdef RT30xx
+// eFuse registers
+#define EFUSE_CTRL 0x0580
+#define EFUSE_DATA0 0x0590
+#define EFUSE_DATA1 0x0594
+#define EFUSE_DATA2 0x0598
+#define EFUSE_DATA3 0x059c
+#define EFUSE_USAGE_MAP_START 0x2d0
+#define EFUSE_USAGE_MAP_END 0x2fc
+#define EFUSE_TAG 0x2fe
+#define EFUSE_USAGE_MAP_SIZE 45
+
+typedef union _EFUSE_CTRL_STRUC {
+ struct {
+ UINT32 EFSROM_AOUT:6;
+ UINT32 EFSROM_MODE:2;
+ UINT32 EFSROM_LDO_OFF_TIME:6;
+ UINT32 EFSROM_LDO_ON_TIME:2;
+ UINT32 EFSROM_AIN:10;
+ UINT32 RESERVED:4;
+ UINT32 EFSROM_KICK:1;
+ UINT32 SEL_EFUSE:1;
+ } field;
+ UINT32 word;
+} EFUSE_CTRL_STRUC, *PEFUSE_CTRL_STRUC;
+
+#define LDO_CFG0 0x05d4
+#define GPIO_SWITCH 0x05dc
+#endif /* RT30xx */
+
//
// 4 MAC registers
//
@@ -458,15 +328,6 @@ typedef union _USB_DMA_CFG_STRUC {
// 4.1 MAC SYSTEM configuration registers (offset:0x1000)
//
#define MAC_CSR0 0x1000
-#ifdef RT_BIG_ENDIAN
-typedef union _ASIC_VER_ID_STRUC {
- struct {
- USHORT ASICVer; // version : 2860
- USHORT ASICRev; // reversion : 0
- } field;
- UINT32 word;
-} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC;
-#else
typedef union _ASIC_VER_ID_STRUC {
struct {
USHORT ASICRev; // reversion : 0
@@ -474,24 +335,13 @@ typedef union _ASIC_VER_ID_STRUC {
} field;
UINT32 word;
} ASIC_VER_ID_STRUC, *PASIC_VER_ID_STRUC;
-#endif
+
#define MAC_SYS_CTRL 0x1004 //MAC_CSR1
#define MAC_ADDR_DW0 0x1008 // MAC ADDR DW0
#define MAC_ADDR_DW1 0x100c // MAC ADDR DW1
//
// MAC_CSR2: STA MAC register 0
//
-#ifdef RT_BIG_ENDIAN
-typedef union _MAC_DW0_STRUC {
- struct {
- UCHAR Byte3; // MAC address byte 3
- UCHAR Byte2; // MAC address byte 2
- UCHAR Byte1; // MAC address byte 1
- UCHAR Byte0; // MAC address byte 0
- } field;
- UINT32 word;
-} MAC_DW0_STRUC, *PMAC_DW0_STRUC;
-#else
typedef union _MAC_DW0_STRUC {
struct {
UCHAR Byte0; // MAC address byte 0
@@ -501,22 +351,10 @@ typedef union _MAC_DW0_STRUC {
} field;
UINT32 word;
} MAC_DW0_STRUC, *PMAC_DW0_STRUC;
-#endif
//
// MAC_CSR3: STA MAC register 1
//
-#ifdef RT_BIG_ENDIAN
-typedef union _MAC_DW1_STRUC {
- struct {
- UCHAR Rsvd1;
- UCHAR U2MeMask;
- UCHAR Byte5; // MAC address byte 5
- UCHAR Byte4; // MAC address byte 4
- } field;
- UINT32 word;
-} MAC_DW1_STRUC, *PMAC_DW1_STRUC;
-#else
typedef union _MAC_DW1_STRUC {
struct {
UCHAR Byte4; // MAC address byte 4
@@ -526,7 +364,6 @@ typedef union _MAC_DW1_STRUC {
} field;
UINT32 word;
} MAC_DW1_STRUC, *PMAC_DW1_STRUC;
-#endif
#define MAC_BSSID_DW0 0x1010 // MAC BSSID DW0
#define MAC_BSSID_DW1 0x1014 // MAC BSSID DW1
@@ -534,18 +371,6 @@ typedef union _MAC_DW1_STRUC {
//
// MAC_CSR5: BSSID register 1
//
-#ifdef RT_BIG_ENDIAN
-typedef union _MAC_CSR5_STRUC {
- struct {
- USHORT Rsvd:11;
- USHORT MBssBcnNum:3;
- USHORT BssIdMode:2; // 0: one BSSID, 10: 4 BSSID, 01: 2 BSSID , 11: 8BSSID
- UCHAR Byte5; // BSSID byte 5
- UCHAR Byte4; // BSSID byte 4
- } field;
- UINT32 word;
-} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC;
-#else
typedef union _MAC_CSR5_STRUC {
struct {
UCHAR Byte4; // BSSID byte 4
@@ -556,27 +381,12 @@ typedef union _MAC_CSR5_STRUC {
} field;
UINT32 word;
} MAC_CSR5_STRUC, *PMAC_CSR5_STRUC;
-#endif
#define MAX_LEN_CFG 0x1018 // rt2860b max 16k bytes. bit12:13 Maximum PSDU length (power factor) 0:2^13, 1:2^14, 2:2^15, 3:2^16
#define BBP_CSR_CFG 0x101c //
//
// BBP_CSR_CFG: BBP serial control register
//
-#ifdef RT_BIG_ENDIAN
-typedef union _BBP_CSR_CFG_STRUC {
- struct {
- UINT32 :12;
- UINT32 BBP_RW_MODE:1; // 0: use serial mode 1:parallel
- UINT32 BBP_PAR_DUR:1; // 0: 4 MAC clock cycles 1: 8 MAC clock cycles
- UINT32 Busy:1; // 1: ASIC is busy execute BBP programming.
- UINT32 fRead:1; // 0: Write BBP, 1: Read BBP
- UINT32 RegNum:8; // Selected BBP register
- UINT32 Value:8; // Register value to program into BBP
- } field;
- UINT32 word;
-} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC;
-#else
typedef union _BBP_CSR_CFG_STRUC {
struct {
UINT32 Value:8; // Register value to program into BBP
@@ -589,23 +399,11 @@ typedef union _BBP_CSR_CFG_STRUC {
} field;
UINT32 word;
} BBP_CSR_CFG_STRUC, *PBBP_CSR_CFG_STRUC;
-#endif
+
#define RF_CSR_CFG0 0x1020
//
// RF_CSR_CFG: RF control register
//
-#ifdef RT_BIG_ENDIAN
-typedef union _RF_CSR_CFG0_STRUC {
- struct {
- UINT32 Busy:1; // 0: idle 1: 8busy
- UINT32 Sel:1; // 0:RF_LE0 activate 1:RF_LE1 activate
- UINT32 StandbyMode:1; // 0: high when stand by 1: low when standby
- UINT32 bitwidth:5; // Selected BBP register
- UINT32 RegIdAndContent:24; // Register value to program into BBP
- } field;
- UINT32 word;
-} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC;
-#else
typedef union _RF_CSR_CFG0_STRUC {
struct {
UINT32 RegIdAndContent:24; // Register value to program into BBP
@@ -616,18 +414,8 @@ typedef union _RF_CSR_CFG0_STRUC {
} field;
UINT32 word;
} RF_CSR_CFG0_STRUC, *PRF_CSR_CFG0_STRUC;
-#endif
+
#define RF_CSR_CFG1 0x1024
-#ifdef RT_BIG_ENDIAN
-typedef union _RF_CSR_CFG1_STRUC {
- struct {
- UINT32 rsv:7; // 0: idle 1: 8busy
- UINT32 RFGap:5; // Gap between BB_CONTROL_RF and RF_LE. 0: 3 system clock cycle (37.5usec) 1: 5 system clock cycle (62.5usec)
- UINT32 RegIdAndContent:24; // Register value to program into BBP
- } field;
- UINT32 word;
-} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC;
-#else
typedef union _RF_CSR_CFG1_STRUC {
struct {
UINT32 RegIdAndContent:24; // Register value to program into BBP
@@ -636,17 +424,8 @@ typedef union _RF_CSR_CFG1_STRUC {
} field;
UINT32 word;
} RF_CSR_CFG1_STRUC, *PRF_CSR_CFG1_STRUC;
-#endif
+
#define RF_CSR_CFG2 0x1028 //
-#ifdef RT_BIG_ENDIAN
-typedef union _RF_CSR_CFG2_STRUC {
- struct {
- UINT32 rsv:8; // 0: idle 1: 8busy
- UINT32 RegIdAndContent:24; // Register value to program into BBP
- } field;
- UINT32 word;
-} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC;
-#else
typedef union _RF_CSR_CFG2_STRUC {
struct {
UINT32 RegIdAndContent:24; // Register value to program into BBP
@@ -654,24 +433,8 @@ typedef union _RF_CSR_CFG2_STRUC {
} field;
UINT32 word;
} RF_CSR_CFG2_STRUC, *PRF_CSR_CFG2_STRUC;
-#endif
+
#define LED_CFG 0x102c // MAC_CSR14
-#ifdef RT_BIG_ENDIAN
-typedef union _LED_CFG_STRUC {
- struct {
- UINT32 :1;
- UINT32 LedPolar:1; // Led Polarity. 0: active low1: active high
- UINT32 YLedMode:2; // yellow Led Mode
- UINT32 GLedMode:2; // green Led Mode
- UINT32 RLedMode:2; // red Led Mode 0: off1: blinking upon TX2: periodic slow blinking3: always on
- UINT32 rsv:2;
- UINT32 SlowBlinkPeriod:6; // slow blinking period. unit:1ms
- UINT32 OffPeriod:8; // blinking off period unit 1ms
- UINT32 OnPeriod:8; // blinking on period unit 1ms
- } field;
- UINT32 word;
-} LED_CFG_STRUC, *PLED_CFG_STRUC;
-#else
typedef union _LED_CFG_STRUC {
struct {
UINT32 OnPeriod:8; // blinking on period unit 1ms
@@ -686,24 +449,11 @@ typedef union _LED_CFG_STRUC {
} field;
UINT32 word;
} LED_CFG_STRUC, *PLED_CFG_STRUC;
-#endif
+
//
// 4.2 MAC TIMING configuration registers (offset:0x1100)
//
#define XIFS_TIME_CFG 0x1100 // MAC_CSR8 MAC_CSR9
-#ifdef RT_BIG_ENDIAN
-typedef union _IFS_SLOT_CFG_STRUC {
- struct {
- UINT32 rsv:2;
- UINT32 BBRxendEnable:1; // reference RXEND signal to begin XIFS defer
- UINT32 EIFS:9; // unit 1us
- UINT32 OfdmXifsTime:4; //OFDM SIFS. unit 1us. Applied after OFDM RX when MAC doesn't reference BBP signal BBRXEND
- UINT32 OfdmSifsTime:8; // unit 1us. Applied after OFDM RX/TX
- UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX
- } field;
- UINT32 word;
-} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC;
-#else
typedef union _IFS_SLOT_CFG_STRUC {
struct {
UINT32 CckmSifsTime:8; // unit 1us. Applied after CCK RX/TX
@@ -715,7 +465,6 @@ typedef union _IFS_SLOT_CFG_STRUC {
} field;
UINT32 word;
} IFS_SLOT_CFG_STRUC, *PIFS_SLOT_CFG_STRUC;
-#endif
#define BKOFF_SLOT_CFG 0x1104 // mac_csr9 last 8 bits
#define NAV_TIME_CFG 0x1108 // NAV (MAC_CSR15)
@@ -729,20 +478,6 @@ typedef union _IFS_SLOT_CFG_STRUC {
//
// BCN_TIME_CFG : Synchronization control register
//
-#ifdef RT_BIG_ENDIAN
-typedef union _BCN_TIME_CFG_STRUC {
- struct {
- UINT32 TxTimestampCompensate:8;
- UINT32 :3;
- UINT32 bBeaconGen:1; // Enable beacon generator
- UINT32 bTBTTEnable:1;
- UINT32 TsfSyncMode:2; // Enable TSF sync, 00: disable, 01: infra mode, 10: ad-hoc mode
- UINT32 bTsfTicking:1; // Enable TSF auto counting
- UINT32 BeaconInterval:16; // in unit of 1/16 TU
- } field;
- UINT32 word;
-} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC;
-#else
typedef union _BCN_TIME_CFG_STRUC {
struct {
UINT32 BeaconInterval:16; // in unit of 1/16 TU
@@ -755,7 +490,7 @@ typedef union _BCN_TIME_CFG_STRUC {
} field;
UINT32 word;
} BCN_TIME_CFG_STRUC, *PBCN_TIME_CFG_STRUC;
-#endif
+
#define TBTT_SYNC_CFG 0x1118 // txrx_csr10
#define TSF_TIMER_DW0 0x111C // Local TSF timer lsb 32 bits. Read-only
#define TSF_TIMER_DW1 0x1120 // msb 32 bits. Read-only.
@@ -773,17 +508,6 @@ typedef union _BCN_TIME_CFG_STRUC {
//
// AUTO_WAKEUP_CFG: Manual power control / status register
//
-#ifdef RT_BIG_ENDIAN
-typedef union _AUTO_WAKEUP_STRUC {
- struct {
- UINT32 :16;
- UINT32 EnableAutoWakeup:1; // 0:sleep, 1:awake
- UINT32 NumofSleepingTbtt:7; // ForceWake has high privilege than PutToSleep when both set
- UINT32 AutoLeadTime:8;
- } field;
- UINT32 word;
-} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC;
-#else
typedef union _AUTO_WAKEUP_STRUC {
struct {
UINT32 AutoLeadTime:8;
@@ -793,7 +517,7 @@ typedef union _AUTO_WAKEUP_STRUC {
} field;
UINT32 word;
} AUTO_WAKEUP_STRUC, *PAUTO_WAKEUP_STRUC;
-#endif
+
//
// 4.3 MAC TX configuration registers (offset:0x1300)
//
@@ -802,18 +526,6 @@ typedef union _AUTO_WAKEUP_STRUC {
#define EDCA_AC1_CFG 0x1304
#define EDCA_AC2_CFG 0x1308
#define EDCA_AC3_CFG 0x130c
-#ifdef RT_BIG_ENDIAN
-typedef union _EDCA_AC_CFG_STRUC {
- struct {
- UINT32 :12; //
- UINT32 Cwmax:4; //unit power of 2
- UINT32 Cwmin:4; //
- UINT32 Aifsn:4; // # of slot time
- UINT32 AcTxop:8; // in unit of 32us
- } field;
- UINT32 word;
-} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC;
-#else
typedef union _EDCA_AC_CFG_STRUC {
struct {
UINT32 AcTxop:8; // in unit of 32us
@@ -824,7 +536,6 @@ typedef union _EDCA_AC_CFG_STRUC {
} field;
UINT32 word;
} EDCA_AC_CFG_STRUC, *PEDCA_AC_CFG_STRUC;
-#endif
#define EDCA_TID_AC_MAP 0x1310
#define TX_PWR_CFG_0 0x1314
@@ -841,17 +552,6 @@ typedef union _EDCA_AC_CFG_STRUC {
#define TXOP_CTRL_CFG 0x1340
#define TX_RTS_CFG 0x1344
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_RTS_CFG_STRUC {
- struct {
- UINT32 rsv:7;
- UINT32 RtsFbkEn:1; // enable rts rate fallback
- UINT32 RtsThres:16; // unit:byte
- UINT32 AutoRtsRetryLimit:8;
- } field;
- UINT32 word;
-} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC;
-#else
typedef union _TX_RTS_CFG_STRUC {
struct {
UINT32 AutoRtsRetryLimit:8;
@@ -861,20 +561,8 @@ typedef union _TX_RTS_CFG_STRUC {
} field;
UINT32 word;
} TX_RTS_CFG_STRUC, *PTX_RTS_CFG_STRUC;
-#endif
+
#define TX_TIMEOUT_CFG 0x1348
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_TIMEOUT_CFG_STRUC {
- struct {
- UINT32 rsv2:8;
- UINT32 TxopTimeout:8; //TXOP timeout value for TXOP truncation. It is recommended that (SLOT_TIME) > (TX_OP_TIMEOUT) > (RX_ACK_TIMEOUT)
- UINT32 RxAckTimeout:8; // unit:slot. Used for TX precedure
- UINT32 MpduLifeTime:4; // expiration time = 2^(9+MPDU LIFE TIME) us
- UINT32 rsv:4;
- } field;
- UINT32 word;
-} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC;
-#else
typedef union _TX_TIMEOUT_CFG_STRUC {
struct {
UINT32 rsv:4;
@@ -885,23 +573,8 @@ typedef union _TX_TIMEOUT_CFG_STRUC {
} field;
UINT32 word;
} TX_TIMEOUT_CFG_STRUC, *PTX_TIMEOUT_CFG_STRUC;
-#endif
-#define TX_RTY_CFG 0x134c
-#ifdef RT_BIG_ENDIAN
-typedef union PACKED _TX_RTY_CFG_STRUC {
- struct {
- UINT32 rsv:1;
- UINT32 TxautoFBEnable:1; // Tx retry PHY rate auto fallback enable
- UINT32 AggRtyMode:1; // Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer
- UINT32 NonAggRtyMode:1; // Non-Aggregate MPDU retry mode. 0:expired by retry limit, 1: expired by mpdu life timer
- UINT32 LongRtyThre:12; // Long retry threshoold
- UINT32 LongRtyLimit:8; //long retry limit
- UINT32 ShortRtyLimit:8; // short retry limit
- } field;
- UINT32 word;
-} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC;
-#else
+#define TX_RTY_CFG 0x134c
typedef union PACKED _TX_RTY_CFG_STRUC {
struct {
UINT32 ShortRtyLimit:8; // short retry limit
@@ -914,24 +587,8 @@ typedef union PACKED _TX_RTY_CFG_STRUC {
} field;
UINT32 word;
} TX_RTY_CFG_STRUC, *PTX_RTY_CFG_STRUC;
-#endif
+
#define TX_LINK_CFG 0x1350
-#ifdef RT_BIG_ENDIAN
-typedef union PACKED _TX_LINK_CFG_STRUC {
- struct PACKED {
- UINT32 RemotMFS:8; //remote MCS feedback sequence number
- UINT32 RemotMFB:8; // remote MCS feedback
- UINT32 rsv:3; //
- UINT32 TxCFAckEn:1; // Piggyback CF-ACK enable
- UINT32 TxRDGEn:1; // RDG TX enable
- UINT32 TxMRQEn:1; // MCS request TX enable
- UINT32 RemoteUMFSEnable:1; // remote unsolicit MFB enable. 0: not apply remote remote unsolicit (MFS=7)
- UINT32 MFBEnable:1; // TX apply remote MFB 1:enable
- UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us
- } field;
- UINT32 word;
-} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC;
-#else
typedef union PACKED _TX_LINK_CFG_STRUC {
struct PACKED {
UINT32 RemoteMFBLifeTime:8; //remote MFB life time. unit : 32us
@@ -946,23 +603,8 @@ typedef union PACKED _TX_LINK_CFG_STRUC {
} field;
UINT32 word;
} TX_LINK_CFG_STRUC, *PTX_LINK_CFG_STRUC;
-#endif
+
#define HT_FBK_CFG0 0x1354
-#ifdef RT_BIG_ENDIAN
-typedef union PACKED _HT_FBK_CFG0_STRUC {
- struct {
- UINT32 HTMCS7FBK:4;
- UINT32 HTMCS6FBK:4;
- UINT32 HTMCS5FBK:4;
- UINT32 HTMCS4FBK:4;
- UINT32 HTMCS3FBK:4;
- UINT32 HTMCS2FBK:4;
- UINT32 HTMCS1FBK:4;
- UINT32 HTMCS0FBK:4;
- } field;
- UINT32 word;
-} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC;
-#else
typedef union PACKED _HT_FBK_CFG0_STRUC {
struct {
UINT32 HTMCS0FBK:4;
@@ -976,23 +618,8 @@ typedef union PACKED _HT_FBK_CFG0_STRUC {
} field;
UINT32 word;
} HT_FBK_CFG0_STRUC, *PHT_FBK_CFG0_STRUC;
-#endif
+
#define HT_FBK_CFG1 0x1358
-#ifdef RT_BIG_ENDIAN
-typedef union _HT_FBK_CFG1_STRUC {
- struct {
- UINT32 HTMCS15FBK:4;
- UINT32 HTMCS14FBK:4;
- UINT32 HTMCS13FBK:4;
- UINT32 HTMCS12FBK:4;
- UINT32 HTMCS11FBK:4;
- UINT32 HTMCS10FBK:4;
- UINT32 HTMCS9FBK:4;
- UINT32 HTMCS8FBK:4;
- } field;
- UINT32 word;
-} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC;
-#else
typedef union _HT_FBK_CFG1_STRUC {
struct {
UINT32 HTMCS8FBK:4;
@@ -1006,23 +633,8 @@ typedef union _HT_FBK_CFG1_STRUC {
} field;
UINT32 word;
} HT_FBK_CFG1_STRUC, *PHT_FBK_CFG1_STRUC;
-#endif
+
#define LG_FBK_CFG0 0x135c
-#ifdef RT_BIG_ENDIAN
-typedef union _LG_FBK_CFG0_STRUC {
- struct {
- UINT32 OFDMMCS7FBK:4; //initial value is 6
- UINT32 OFDMMCS6FBK:4; //initial value is 5
- UINT32 OFDMMCS5FBK:4; //initial value is 4
- UINT32 OFDMMCS4FBK:4; //initial value is 3
- UINT32 OFDMMCS3FBK:4; //initial value is 2
- UINT32 OFDMMCS2FBK:4; //initial value is 1
- UINT32 OFDMMCS1FBK:4; //initial value is 0
- UINT32 OFDMMCS0FBK:4; //initial value is 0
- } field;
- UINT32 word;
-} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC;
-#else
typedef union _LG_FBK_CFG0_STRUC {
struct {
UINT32 OFDMMCS0FBK:4; //initial value is 0
@@ -1036,20 +648,8 @@ typedef union _LG_FBK_CFG0_STRUC {
} field;
UINT32 word;
} LG_FBK_CFG0_STRUC, *PLG_FBK_CFG0_STRUC;
-#endif
+
#define LG_FBK_CFG1 0x1360
-#ifdef RT_BIG_ENDIAN
-typedef union _LG_FBK_CFG1_STRUC {
- struct {
- UINT32 rsv:16;
- UINT32 CCKMCS3FBK:4; //initial value is 2
- UINT32 CCKMCS2FBK:4; //initial value is 1
- UINT32 CCKMCS1FBK:4; //initial value is 0
- UINT32 CCKMCS0FBK:4; //initial value is 0
- } field;
- UINT32 word;
-} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC;
-#else
typedef union _LG_FBK_CFG1_STRUC {
struct {
UINT32 CCKMCS0FBK:4; //initial value is 0
@@ -1060,7 +660,6 @@ typedef union _LG_FBK_CFG1_STRUC {
} field;
UINT32 word;
} LG_FBK_CFG1_STRUC, *PLG_FBK_CFG1_STRUC;
-#endif
//=======================================================
//================ Protection Paramater================================
@@ -1070,24 +669,6 @@ typedef union _LG_FBK_CFG1_STRUC {
#define ASIC_LONGNAV 2
#define ASIC_RTS 1
#define ASIC_CTS 2
-#ifdef RT_BIG_ENDIAN
-typedef union _PROT_CFG_STRUC {
- struct {
- UINT32 rsv:5;
- UINT32 RTSThEn:1; //RTS threshold enable on CCK TX
- UINT32 TxopAllowGF40:1; //CCK TXOP allowance.0:disallow.
- UINT32 TxopAllowGF20:1; //CCK TXOP allowance.0:disallow.
- UINT32 TxopAllowMM40:1; //CCK TXOP allowance.0:disallow.
- UINT32 TxopAllowMM20:1; //CCK TXOP allowance. 0:disallow.
- UINT32 TxopAllowOfdm:1; //CCK TXOP allowance.0:disallow.
- UINT32 TxopAllowCck:1; //CCK TXOP allowance.0:disallow.
- UINT32 ProtectNav:2; //TXOP protection type for CCK TX. 0:None, 1:ShortNAVprotect, 2:LongNAVProtect, 3:rsv
- UINT32 ProtectCtrl:2; //Protection control frame type for CCK TX. 1:RTS/CTS, 2:CTS-to-self, 0:None, 3:rsv
- UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd).
- } field;
- UINT32 word;
-} PROT_CFG_STRUC, *PPROT_CFG_STRUC;
-#else
typedef union _PROT_CFG_STRUC {
struct {
UINT32 ProtectRate:16; //Protection control frame rate for CCK TX(RTS/CTS/CFEnd).
@@ -1104,7 +685,6 @@ typedef union _PROT_CFG_STRUC {
} field;
UINT32 word;
} PROT_CFG_STRUC, *PPROT_CFG_STRUC;
-#endif
#define OFDM_PROT_CFG 0x1368 //OFDM Protection
#define MM20_PROT_CFG 0x136C //MM20 Protection
@@ -1122,22 +702,6 @@ typedef union _PROT_CFG_STRUC {
//
// TXRX_CSR4: Auto-Responder/
//
-#ifdef RT_BIG_ENDIAN
-typedef union _AUTO_RSP_CFG_STRUC {
- struct {
- UINT32 :24;
- UINT32 AckCtsPsmBit:1; // Power bit value in conrtrol frame
- UINT32 DualCTSEn:1; // Power bit value in conrtrol frame
- UINT32 rsv:1; // Power bit value in conrtrol frame
- UINT32 AutoResponderPreamble:1; // 0:long, 1:short preamble
- UINT32 CTS40MRef:1; // Response CTS 40MHz duplicate mode
- UINT32 CTS40MMode:1; // Response CTS 40MHz duplicate mode
- UINT32 BACAckPolicyEnable:1; // 0:long, 1:short preamble
- UINT32 AutoResponderEnable:1;
- } field;
- UINT32 word;
-} AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC;
-#else
typedef union _AUTO_RSP_CFG_STRUC {
struct {
UINT32 AutoResponderEnable:1;
@@ -1152,7 +716,6 @@ typedef union _AUTO_RSP_CFG_STRUC {
} field;
UINT32 word;
} AUTO_RSP_CFG_STRUC, *PAUTO_RSP_CFG_STRUC;
-#endif
#define LEGACY_BASIC_RATE 0x1408 // TXRX_CSR5 0x3054
#define HT_BASIC_RATE 0x140c
@@ -1185,15 +748,6 @@ typedef union _AUTO_RSP_CFG_STRUC {
//
// RX_STA_CNT0_STRUC: RX PLCP error count & RX CRC error count
//
-#ifdef RT_BIG_ENDIAN
-typedef union _RX_STA_CNT0_STRUC {
- struct {
- USHORT PhyErr;
- USHORT CrcErr;
- } field;
- UINT32 word;
-} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC;
-#else
typedef union _RX_STA_CNT0_STRUC {
struct {
USHORT CrcErr;
@@ -1201,20 +755,10 @@ typedef union _RX_STA_CNT0_STRUC {
} field;
UINT32 word;
} RX_STA_CNT0_STRUC, *PRX_STA_CNT0_STRUC;
-#endif
//
// RX_STA_CNT1_STRUC: RX False CCA count & RX LONG frame count
//
-#ifdef RT_BIG_ENDIAN
-typedef union _RX_STA_CNT1_STRUC {
- struct {
- USHORT PlcpErr;
- USHORT FalseCca;
- } field;
- UINT32 word;
-} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC;
-#else
typedef union _RX_STA_CNT1_STRUC {
struct {
USHORT FalseCca;
@@ -1222,20 +766,10 @@ typedef union _RX_STA_CNT1_STRUC {
} field;
UINT32 word;
} RX_STA_CNT1_STRUC, *PRX_STA_CNT1_STRUC;
-#endif
//
// RX_STA_CNT2_STRUC:
//
-#ifdef RT_BIG_ENDIAN
-typedef union _RX_STA_CNT2_STRUC {
- struct {
- USHORT RxFifoOverflowCount;
- USHORT RxDupliCount;
- } field;
- UINT32 word;
-} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC;
-#else
typedef union _RX_STA_CNT2_STRUC {
struct {
USHORT RxDupliCount;
@@ -1243,20 +777,11 @@ typedef union _RX_STA_CNT2_STRUC {
} field;
UINT32 word;
} RX_STA_CNT2_STRUC, *PRX_STA_CNT2_STRUC;
-#endif
+
#define TX_STA_CNT0 0x170C //
//
// STA_CSR3: TX Beacon count
//
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_STA_CNT0_STRUC {
- struct {
- USHORT TxBeaconCount;
- USHORT TxFailCount;
- } field;
- UINT32 word;
-} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC;
-#else
typedef union _TX_STA_CNT0_STRUC {
struct {
USHORT TxFailCount;
@@ -1264,20 +789,11 @@ typedef union _TX_STA_CNT0_STRUC {
} field;
UINT32 word;
} TX_STA_CNT0_STRUC, *PTX_STA_CNT0_STRUC;
-#endif
+
#define TX_STA_CNT1 0x1710 //
//
// TX_STA_CNT1: TX tx count
//
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_STA_CNT1_STRUC {
- struct {
- USHORT TxRetransmit;
- USHORT TxSuccess;
- } field;
- UINT32 word;
-} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC;
-#else
typedef union _TX_STA_CNT1_STRUC {
struct {
USHORT TxSuccess;
@@ -1285,20 +801,11 @@ typedef union _TX_STA_CNT1_STRUC {
} field;
UINT32 word;
} TX_STA_CNT1_STRUC, *PTX_STA_CNT1_STRUC;
-#endif
+
#define TX_STA_CNT2 0x1714 //
//
// TX_STA_CNT2: TX tx count
//
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_STA_CNT2_STRUC {
- struct {
- USHORT TxUnderFlowCount;
- USHORT TxZeroLenCount;
- } field;
- UINT32 word;
-} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC;
-#else
typedef union _TX_STA_CNT2_STRUC {
struct {
USHORT TxZeroLenCount;
@@ -1306,28 +813,11 @@ typedef union _TX_STA_CNT2_STRUC {
} field;
UINT32 word;
} TX_STA_CNT2_STRUC, *PTX_STA_CNT2_STRUC;
-#endif
+
#define TX_STA_FIFO 0x1718 //
//
// TX_STA_FIFO_STRUC: TX Result for specific PID status fifo register
//
-#ifdef RT_BIG_ENDIAN
-typedef union PACKED _TX_STA_FIFO_STRUC {
- struct {
- UINT32 Reserve:2;
- UINT32 TxBF:1; // 3*3
- UINT32 SuccessRate:13; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16.
-// UINT32 SuccessRate:16; //include MCS, mode ,shortGI, BW settingSame format as TXWI Word 0 Bit 31-16.
- UINT32 wcid:8; //wireless client index
- UINT32 TxAckRequired:1; // ack required
- UINT32 TxAggre:1; // Tx is aggregated
- UINT32 TxSuccess:1; // Tx success. whether success or not
- UINT32 PidType:4;
- UINT32 bValid:1; // 1:This register contains a valid TX result
- } field;
- UINT32 word;
-} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC;
-#else
typedef union PACKED _TX_STA_FIFO_STRUC {
struct {
UINT32 bValid:1; // 1:This register contains a valid TX result
@@ -1343,18 +833,9 @@ typedef union PACKED _TX_STA_FIFO_STRUC {
} field;
UINT32 word;
} TX_STA_FIFO_STRUC, *PTX_STA_FIFO_STRUC;
-#endif
+
// Debug counter
#define TX_AGG_CNT 0x171c
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_AGG_CNT_STRUC {
- struct {
- USHORT AggTxCount;
- USHORT NonAggTxCount;
- } field;
- UINT32 word;
-} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC;
-#else
typedef union _TX_AGG_CNT_STRUC {
struct {
USHORT NonAggTxCount;
@@ -1362,18 +843,9 @@ typedef union _TX_AGG_CNT_STRUC {
} field;
UINT32 word;
} TX_AGG_CNT_STRUC, *PTX_AGG_CNT_STRUC;
-#endif
+
// Debug counter
#define TX_AGG_CNT0 0x1720
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_AGG_CNT0_STRUC {
- struct {
- USHORT AggSize2Count;
- USHORT AggSize1Count;
- } field;
- UINT32 word;
-} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC;
-#else
typedef union _TX_AGG_CNT0_STRUC {
struct {
USHORT AggSize1Count;
@@ -1381,18 +853,9 @@ typedef union _TX_AGG_CNT0_STRUC {
} field;
UINT32 word;
} TX_AGG_CNT0_STRUC, *PTX_AGG_CNT0_STRUC;
-#endif
+
// Debug counter
#define TX_AGG_CNT1 0x1724
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_AGG_CNT1_STRUC {
- struct {
- USHORT AggSize4Count;
- USHORT AggSize3Count;
- } field;
- UINT32 word;
-} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC;
-#else
typedef union _TX_AGG_CNT1_STRUC {
struct {
USHORT AggSize3Count;
@@ -1400,17 +863,8 @@ typedef union _TX_AGG_CNT1_STRUC {
} field;
UINT32 word;
} TX_AGG_CNT1_STRUC, *PTX_AGG_CNT1_STRUC;
-#endif
+
#define TX_AGG_CNT2 0x1728
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_AGG_CNT2_STRUC {
- struct {
- USHORT AggSize6Count;
- USHORT AggSize5Count;
- } field;
- UINT32 word;
-} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC;
-#else
typedef union _TX_AGG_CNT2_STRUC {
struct {
USHORT AggSize5Count;
@@ -1418,18 +872,9 @@ typedef union _TX_AGG_CNT2_STRUC {
} field;
UINT32 word;
} TX_AGG_CNT2_STRUC, *PTX_AGG_CNT2_STRUC;
-#endif
+
// Debug counter
#define TX_AGG_CNT3 0x172c
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_AGG_CNT3_STRUC {
- struct {
- USHORT AggSize8Count;
- USHORT AggSize7Count;
- } field;
- UINT32 word;
-} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC;
-#else
typedef union _TX_AGG_CNT3_STRUC {
struct {
USHORT AggSize7Count;
@@ -1437,18 +882,9 @@ typedef union _TX_AGG_CNT3_STRUC {
} field;
UINT32 word;
} TX_AGG_CNT3_STRUC, *PTX_AGG_CNT3_STRUC;
-#endif
+
// Debug counter
#define TX_AGG_CNT4 0x1730
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_AGG_CNT4_STRUC {
- struct {
- USHORT AggSize10Count;
- USHORT AggSize9Count;
- } field;
- UINT32 word;
-} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC;
-#else
typedef union _TX_AGG_CNT4_STRUC {
struct {
USHORT AggSize9Count;
@@ -1456,17 +892,8 @@ typedef union _TX_AGG_CNT4_STRUC {
} field;
UINT32 word;
} TX_AGG_CNT4_STRUC, *PTX_AGG_CNT4_STRUC;
-#endif
+
#define TX_AGG_CNT5 0x1734
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_AGG_CNT5_STRUC {
- struct {
- USHORT AggSize12Count;
- USHORT AggSize11Count;
- } field;
- UINT32 word;
-} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC;
-#else
typedef union _TX_AGG_CNT5_STRUC {
struct {
USHORT AggSize11Count;
@@ -1474,17 +901,8 @@ typedef union _TX_AGG_CNT5_STRUC {
} field;
UINT32 word;
} TX_AGG_CNT5_STRUC, *PTX_AGG_CNT5_STRUC;
-#endif
+
#define TX_AGG_CNT6 0x1738
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_AGG_CNT6_STRUC {
- struct {
- USHORT AggSize14Count;
- USHORT AggSize13Count;
- } field;
- UINT32 word;
-} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC;
-#else
typedef union _TX_AGG_CNT6_STRUC {
struct {
USHORT AggSize13Count;
@@ -1492,17 +910,8 @@ typedef union _TX_AGG_CNT6_STRUC {
} field;
UINT32 word;
} TX_AGG_CNT6_STRUC, *PTX_AGG_CNT6_STRUC;
-#endif
+
#define TX_AGG_CNT7 0x173c
-#ifdef RT_BIG_ENDIAN
-typedef union _TX_AGG_CNT7_STRUC {
- struct {
- USHORT AggSize16Count;
- USHORT AggSize15Count;
- } field;
- UINT32 word;
-} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC;
-#else
typedef union _TX_AGG_CNT7_STRUC {
struct {
USHORT AggSize15Count;
@@ -1510,17 +919,8 @@ typedef union _TX_AGG_CNT7_STRUC {
} field;
UINT32 word;
} TX_AGG_CNT7_STRUC, *PTX_AGG_CNT7_STRUC;
-#endif
+
#define MPDU_DENSITY_CNT 0x1740
-#ifdef RT_BIG_ENDIAN
-typedef union _MPDU_DEN_CNT_STRUC {
- struct {
- USHORT RXZeroDelCount; //RX zero length delimiter count
- USHORT TXZeroDelCount; //TX zero length delimiter count
- } field;
- UINT32 word;
-} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC;
-#else
typedef union _MPDU_DEN_CNT_STRUC {
struct {
USHORT TXZeroDelCount; //TX zero length delimiter count
@@ -1528,7 +928,7 @@ typedef union _MPDU_DEN_CNT_STRUC {
} field;
UINT32 word;
} MPDU_DEN_CNT_STRUC, *PMPDU_DEN_CNT_STRUC;
-#endif
+
//
// TXRX control registers - base address 0x3000
//
@@ -1554,30 +954,6 @@ typedef union _MPDU_DEN_CNT_STRUC {
#define SHAREDKEYTABLE 0
#define PAIRWISEKEYTABLE 1
-
-#ifdef RT_BIG_ENDIAN
-typedef union _SHAREDKEY_MODE_STRUC {
- struct {
- UINT32 :1;
- UINT32 Bss1Key3CipherAlg:3;
- UINT32 :1;
- UINT32 Bss1Key2CipherAlg:3;
- UINT32 :1;
- UINT32 Bss1Key1CipherAlg:3;
- UINT32 :1;
- UINT32 Bss1Key0CipherAlg:3;
- UINT32 :1;
- UINT32 Bss0Key3CipherAlg:3;
- UINT32 :1;
- UINT32 Bss0Key2CipherAlg:3;
- UINT32 :1;
- UINT32 Bss0Key1CipherAlg:3;
- UINT32 :1;
- UINT32 Bss0Key0CipherAlg:3;
- } field;
- UINT32 word;
-} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC;
-#else
typedef union _SHAREDKEY_MODE_STRUC {
struct {
UINT32 Bss0Key0CipherAlg:3;
@@ -1599,7 +975,7 @@ typedef union _SHAREDKEY_MODE_STRUC {
} field;
UINT32 word;
} SHAREDKEY_MODE_STRUC, *PSHAREDKEY_MODE_STRUC;
-#endif
+
// 64-entry for pairwise key table
typedef struct _HW_WCID_ENTRY { // 8-byte per entry
UCHAR Address[6];
@@ -1670,10 +1046,16 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define E2PROM_CSR 0x0004
#define IO_CNTL_CSR 0x77d0
+#ifdef RT2860
// 8051 firmware image for RT2860 - base address = 0x4000
#define FIRMWARE_IMAGE_BASE 0x2000
#define MAX_FIRMWARE_IMAGE_SIZE 0x2000 // 8kbyte
-
+#endif
+#ifdef RT2870
+// 8051 firmware image for usb - use last-half base address = 0x3000
+#define FIRMWARE_IMAGE_BASE 0x3000
+#define MAX_FIRMWARE_IMAGE_SIZE 0x1000 // 4kbyte
+#endif // RT2870 //
// ================================================================
// Tx / Rx / Mgmt ring descriptor definition
@@ -1754,6 +1136,9 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define BBP_R22 22
#define BBP_R24 24
#define BBP_R25 25
+#ifdef RT30xx
+#define BBP_R31 31
+#endif
#define BBP_R49 49 //TSSI
#define BBP_R50 50
#define BBP_R51 51
@@ -1771,6 +1156,10 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define BBP_R73 73
#define BBP_R75 75
#define BBP_R77 77
+#ifdef RT30xx
+#define BBP_R79 79
+#define BBP_R80 80
+#endif
#define BBP_R81 81
#define BBP_R82 82
#define BBP_R83 83
@@ -1792,6 +1181,9 @@ typedef struct _HW_WCID_ENTRY { // 8-byte per entry
#define BBP_R121 121
#define BBP_R122 122
#define BBP_R123 123
+#ifdef RT30xx
+#define BBP_R138 138 // add by johnli, RF power sequence setup, ADC dynamic on/off control
+#endif // RT30xx //
#define BBPR94_DEFAULT 0x06 // Add 1 value will gain 1db
@@ -1872,15 +1264,6 @@ typedef struct _HW_KEY_ENTRY { // 32-byte per entry
//8.1.2 IV/EIV format : 2DW
//8.1.3 RX attribute entry format : 1DW
-#ifdef RT_BIG_ENDIAN
-typedef struct _MAC_ATTRIBUTE_STRUC {
- UINT32 rsv:22;
- UINT32 RXWIUDF:3;
- UINT32 BSSIDIdx:3; //multipleBSS index for the WCID
- UINT32 PairKeyMode:3;
- UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table
-} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC;
-#else
typedef struct _MAC_ATTRIBUTE_STRUC {
UINT32 KeyTab:1; // 0 for shared key table. 1 for pairwise key table
UINT32 PairKeyMode:3;
@@ -1888,8 +1271,6 @@ typedef struct _MAC_ATTRIBUTE_STRUC {
UINT32 RXWIUDF:3;
UINT32 rsv:22;
} MAC_ATTRIBUTE_STRUC, *PMAC_ATTRIBUTE_STRUC;
-#endif
-
// =================================================================================
// TX / RX ring descriptor format
@@ -1904,29 +1285,6 @@ typedef struct _MAC_ATTRIBUTE_STRUC {
//
// TX descriptor format, Tx ring, Mgmt Ring
//
-#ifdef RT_BIG_ENDIAN
-typedef struct PACKED _TXD_STRUC {
- // Word 0
- UINT32 SDPtr0;
- // Word 1
- UINT32 DMADONE:1;
- UINT32 LastSec0:1;
- UINT32 SDLen0:14;
- UINT32 Burst:1;
- UINT32 LastSec1:1;
- UINT32 SDLen1:14;
- // Word 2
- UINT32 SDPtr1;
- // Word 3
- UINT32 ICO:1;
- UINT32 UCO:1;
- UINT32 TCO:1;
- UINT32 rsv:2;
- UINT32 QSEL:2; // select on-chip FIFO ID for 2nd-stage output scheduler.0:MGMT, 1:HCCA 2:EDCA
- UINT32 WIV:1; // Wireless Info Valid. 1 if Driver already fill WI, o if DMA needs to copy WI to correctposition
- UINT32 rsv2:24;
-} TXD_STRUC, *PTXD_STRUC;
-#else
typedef struct PACKED _TXD_STRUC {
// Word 0
UINT32 SDPtr0;
@@ -1948,8 +1306,6 @@ typedef struct PACKED _TXD_STRUC {
UINT32 UCO:1; //
UINT32 ICO:1; //
} TXD_STRUC, *PTXD_STRUC;
-#endif
-
//
// TXD Wireless Information format for Tx ring and Mgmt Ring
@@ -1957,40 +1313,6 @@ typedef struct PACKED _TXD_STRUC {
//txop : for txop mode
// 0:txop for the MPDU frame will be handles by ASIC by register
// 1/2/3:the MPDU frame is send after PIFS/backoff/SIFS
-#ifdef RT_BIG_ENDIAN
-typedef struct PACKED _TXWI_STRUC {
- // Word 0
- UINT32 PHYMODE:2;
- UINT32 TxBF:1; // 3*3
- UINT32 rsv2:1;
- UINT32 Ifs:1; //
- UINT32 STBC:2; //channel bandwidth 20MHz or 40 MHz
- UINT32 ShortGI:1;
- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
- UINT32 MCS:7;
-
- UINT32 rsv:6;
- UINT32 txop:2; //tx back off mode 0:HT TXOP rule , 1:PIFS TX ,2:Backoff, 3:sifs only when previous frame exchange is successful.
- UINT32 MpduDensity:3;
- UINT32 AMPDU:1;
-
- UINT32 TS:1;
- UINT32 CFACK:1;
- UINT32 MIMOps:1; // the remote peer is in dynamic MIMO-PS mode
- UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment.
- // Word 1
- UINT32 PacketId:4;
- UINT32 MPDUtotalByteCount:12;
- UINT32 WirelessCliID:8;
- UINT32 BAWinSize:6;
- UINT32 NSEQ:1;
- UINT32 ACK:1;
- // Word 2
- UINT32 IV;
- // Word 3
- UINT32 EIV;
-} TXWI_STRUC, *PTXWI_STRUC;
-#else
typedef struct PACKED _TXWI_STRUC {
// Word 0
UINT32 FRAG:1; // 1 to inform TKIP engine this is a fragment.
@@ -2023,45 +1345,11 @@ typedef struct PACKED _TXWI_STRUC {
//Word3
UINT32 EIV;
} TXWI_STRUC, *PTXWI_STRUC;
-#endif
+
//
// Rx descriptor format, Rx Ring
//
-#ifdef RT_BIG_ENDIAN
-typedef struct PACKED _RXD_STRUC {
- // Word 0
- UINT32 SDP0;
- // Word 1
- UINT32 DDONE:1;
- UINT32 LS0:1;
- UINT32 SDL0:14;
- UINT32 Rsv:2;
- UINT32 SDL1:14;
- // Word 2
- UINT32 SDP1;
- // Word 3
- UINT32 Rsv1:13;
- UINT32 PlcpRssil:1;// To be moved
- UINT32 PlcpSignal:1; // To be moved
- UINT32 Decrypted:1; // this frame is being decrypted.
- UINT32 AMPDU:1;
- UINT32 L2PAD:1;
- UINT32 RSSI:1;
- UINT32 HTC:1;
- UINT32 AMSDU:1; // rx with 802.3 header, not 802.11 header. obsolete.
- UINT32 CipherErr:2; // 0: decryption okay, 1:ICV error, 2:MIC error, 3:KEY not valid
- UINT32 Crc:1; // 1: CRC error
- UINT32 MyBss:1; // 1: this frame belongs to the same BSSID
- UINT32 Bcast:1; // 1: this is a broadcast frame
- UINT32 Mcast:1; // 1: this is a multicast frame
- UINT32 U2M:1; // 1: this RX frame is unicast to me
- UINT32 FRAG:1;
- UINT32 NULLDATA:1;
- UINT32 DATA:1;
- UINT32 BA:1;
-
-} RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC;
-#else
+#ifdef RT2860
typedef struct PACKED _RXD_STRUC {
// Word 0
UINT32 SDP0;
@@ -2094,39 +1382,11 @@ typedef struct PACKED _RXD_STRUC {
UINT32 PlcpRssil:1;// To be moved
UINT32 Rsv1:13;
} RXD_STRUC, *PRXD_STRUC, RT28XX_RXD_STRUC, *PRT28XX_RXD_STRUC;
-#endif
+#endif /* RT2860 */
+
//
// RXWI wireless information format, in PBF. invisible in driver.
//
-#ifdef RT_BIG_ENDIAN
-typedef struct PACKED _RXWI_STRUC {
- // Word 0
- UINT32 TID:4;
- UINT32 MPDUtotalByteCount:12;
- UINT32 UDF:3;
- UINT32 BSSID:3;
- UINT32 KeyIndex:2;
- UINT32 WirelessCliID:8;
- // Word 1
- UINT32 PHYMODE:2; // 1: this RX frame is unicast to me
- UINT32 rsv:3;
- UINT32 STBC:2;
- UINT32 ShortGI:1;
- UINT32 BW:1;
- UINT32 MCS:7;
- UINT32 SEQUENCE:12;
- UINT32 FRAG:4;
- // Word 2
- UINT32 rsv1:8;
- UINT32 RSSI2:8;
- UINT32 RSSI1:8;
- UINT32 RSSI0:8;
- // Word 3
- UINT32 rsv2:16;
- UINT32 SNR1:8;
- UINT32 SNR0:8;
-} RXWI_STRUC, *PRXWI_STRUC;
-#else
typedef struct PACKED _RXWI_STRUC {
// Word 0
UINT32 WirelessCliID:8;
@@ -2154,8 +1414,6 @@ typedef struct PACKED _RXWI_STRUC {
UINT32 SNR1:8;
UINT32 rsv2:16;
} RXWI_STRUC, *PRXWI_STRUC;
-#endif
-
// =================================================================================
// HOST-MCU communication data structure
@@ -2164,17 +1422,6 @@ typedef struct PACKED _RXWI_STRUC {
//
// H2M_MAILBOX_CSR: Host-to-MCU Mailbox
//
-#ifdef RT_BIG_ENDIAN
-typedef union _H2M_MAILBOX_STRUC {
- struct {
- UINT32 Owner:8;
- UINT32 CmdToken:8; // 0xff tells MCU not to report CmdDoneInt after excuting the command
- UINT32 HighByte:8;
- UINT32 LowByte:8;
- } field;
- UINT32 word;
-} H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC;
-#else
typedef union _H2M_MAILBOX_STRUC {
struct {
UINT32 LowByte:8;
@@ -2184,22 +1431,10 @@ typedef union _H2M_MAILBOX_STRUC {
} field;
UINT32 word;
} H2M_MAILBOX_STRUC, *PH2M_MAILBOX_STRUC;
-#endif
//
// M2H_CMD_DONE_CSR: MCU-to-Host command complete indication
//
-#ifdef RT_BIG_ENDIAN
-typedef union _M2H_CMD_DONE_STRUC {
- struct {
- UINT32 CmdToken3;
- UINT32 CmdToken2;
- UINT32 CmdToken1;
- UINT32 CmdToken0;
- } field;
- UINT32 word;
-} M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC;
-#else
typedef union _M2H_CMD_DONE_STRUC {
struct {
UINT32 CmdToken0;
@@ -2209,22 +1444,10 @@ typedef union _M2H_CMD_DONE_STRUC {
} field;
UINT32 word;
} M2H_CMD_DONE_STRUC, *PM2H_CMD_DONE_STRUC;
-#endif
-
-
//
// MCU_LEDCS: MCU LED Control Setting.
//
-#ifdef RT_BIG_ENDIAN
-typedef union _MCU_LEDCS_STRUC {
- struct {
- UCHAR Polarity:1;
- UCHAR LedMode:7;
- } field;
- UCHAR word;
-} MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC;
-#else
typedef union _MCU_LEDCS_STRUC {
struct {
UCHAR LedMode:7;
@@ -2232,7 +1455,7 @@ typedef union _MCU_LEDCS_STRUC {
} field;
UCHAR word;
} MCU_LEDCS_STRUC, *PMCU_LEDCS_STRUC;
-#endif
+
// =================================================================================
// Register format
// =================================================================================
@@ -2240,18 +1463,6 @@ typedef union _MCU_LEDCS_STRUC {
//NAV_TIME_CFG :NAV
-#ifdef RT_BIG_ENDIAN
-typedef union _NAV_TIME_CFG_STRUC {
- struct {
- USHORT rsv:6;
- USHORT ZeroSifs:1; // Applied zero SIFS timer after OFDM RX 0: disable
- USHORT Eifs:9; // in unit of 1-us
- UCHAR SlotTime; // in unit of 1-us
- UCHAR Sifs; // in unit of 1-us
- } field;
- UINT32 word;
-} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC;
-#else
typedef union _NAV_TIME_CFG_STRUC {
struct {
UCHAR Sifs; // in unit of 1-us
@@ -2262,44 +1473,10 @@ typedef union _NAV_TIME_CFG_STRUC {
} field;
UINT32 word;
} NAV_TIME_CFG_STRUC, *PNAV_TIME_CFG_STRUC;
-#endif
-
-
-
-
//
// RX_FILTR_CFG: /RX configuration register
//
-#ifdef RT_BIG_ENDIAN
-typedef union RX_FILTR_CFG_STRUC {
- struct {
- UINT32 :15;
- UINT32 DropRsvCntlType:1;
-
- UINT32 DropBAR:1; //
- UINT32 DropBA:1; //
- UINT32 DropPsPoll:1; // Drop Ps-Poll
- UINT32 DropRts:1; // Drop Ps-Poll
-
- UINT32 DropCts:1; // Drop Ps-Poll
- UINT32 DropAck:1; // Drop Ps-Poll
- UINT32 DropCFEnd:1; // Drop Ps-Poll
- UINT32 DropCFEndAck:1; // Drop Ps-Poll
-
- UINT32 DropDuplicate:1; // Drop duplicate frame
- UINT32 DropBcast:1; // Drop broadcast frames
- UINT32 DropMcast:1; // Drop multicast frames
- UINT32 DropVerErr:1; // Drop version error frame
-
- UINT32 DropNotMyBSSID:1; // Drop fram ToDs bit is true
- UINT32 DropNotToMe:1; // Drop not to me unicast frame
- UINT32 DropPhyErr:1; // Drop physical error
- UINT32 DropCRCErr:1; // Drop CRC error
- } field;
- UINT32 word;
-} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC;
-#else
typedef union _RX_FILTR_CFG_STRUC {
struct {
UINT32 DropCRCErr:1; // Drop CRC error
@@ -2327,26 +1504,10 @@ typedef union _RX_FILTR_CFG_STRUC {
} field;
UINT32 word;
} RX_FILTR_CFG_STRUC, *PRX_FILTR_CFG_STRUC;
-#endif
-
-
-
//
// PHY_CSR4: RF serial control register
//
-#ifdef RT_BIG_ENDIAN
-typedef union _PHY_CSR4_STRUC {
- struct {
- UINT32 Busy:1; // 1: ASIC is busy execute RF programming.
- UINT32 PLL_LD:1; // RF PLL_LD status
- UINT32 IFSelect:1; // 1: select IF to program, 0: select RF to program
- UINT32 NumberOfBits:5; // Number of bits used in RFRegValue (I:20, RFMD:22)
- UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip.
- } field;
- UINT32 word;
-} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC;
-#else
typedef union _PHY_CSR4_STRUC {
struct {
UINT32 RFRegValue:24; // Register value (include register id) serial out to RF/IF chip.
@@ -2357,35 +1518,10 @@ typedef union _PHY_CSR4_STRUC {
} field;
UINT32 word;
} PHY_CSR4_STRUC, *PPHY_CSR4_STRUC;
-#endif
-
//
// SEC_CSR5: shared key table security mode register
//
-#ifdef RT_BIG_ENDIAN
-typedef union _SEC_CSR5_STRUC {
- struct {
- UINT32 :1;
- UINT32 Bss3Key3CipherAlg:3;
- UINT32 :1;
- UINT32 Bss3Key2CipherAlg:3;
- UINT32 :1;
- UINT32 Bss3Key1CipherAlg:3;
- UINT32 :1;
- UINT32 Bss3Key0CipherAlg:3;
- UINT32 :1;
- UINT32 Bss2Key3CipherAlg:3;
- UINT32 :1;
- UINT32 Bss2Key2CipherAlg:3;
- UINT32 :1;
- UINT32 Bss2Key1CipherAlg:3;
- UINT32 :1;
- UINT32 Bss2Key0CipherAlg:3;
- } field;
- UINT32 word;
-} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC;
-#else
typedef union _SEC_CSR5_STRUC {
struct {
UINT32 Bss2Key0CipherAlg:3;
@@ -2407,21 +1543,10 @@ typedef union _SEC_CSR5_STRUC {
} field;
UINT32 word;
} SEC_CSR5_STRUC, *PSEC_CSR5_STRUC;
-#endif
-
//
// HOST_CMD_CSR: For HOST to interrupt embedded processor
//
-#ifdef RT_BIG_ENDIAN
-typedef union _HOST_CMD_CSR_STRUC {
- struct {
- UINT32 Rsv:24;
- UINT32 HostCommand:8;
- } field;
- UINT32 word;
-} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC;
-#else
typedef union _HOST_CMD_CSR_STRUC {
struct {
UINT32 HostCommand:8;
@@ -2429,8 +1554,6 @@ typedef union _HOST_CMD_CSR_STRUC {
} field;
UINT32 word;
} HOST_CMD_CSR_STRUC, *PHOST_CMD_CSR_STRUC;
-#endif
-
//
// AIFSN_CSR: AIFSN for each EDCA AC
@@ -2441,21 +1564,6 @@ typedef union _HOST_CMD_CSR_STRUC {
//
// E2PROM_CSR: EEPROM control register
//
-#ifdef RT_BIG_ENDIAN
-typedef union _E2PROM_CSR_STRUC {
- struct {
- UINT32 Rsvd:25;
- UINT32 LoadStatus:1; // 1:loading, 0:done
- UINT32 Type:1; // 1: 93C46, 0:93C66
- UINT32 EepromDO:1;
- UINT32 EepromDI:1;
- UINT32 EepromCS:1;
- UINT32 EepromSK:1;
- UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared.
- } field;
- UINT32 word;
-} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC;
-#else
typedef union _E2PROM_CSR_STRUC {
struct {
UINT32 Reload:1; // Reload EEPROM content, write one to reload, self-cleared.
@@ -2469,8 +1577,6 @@ typedef union _E2PROM_CSR_STRUC {
} field;
UINT32 word;
} E2PROM_CSR_STRUC, *PE2PROM_CSR_STRUC;
-#endif
-
// -------------------------------------------------------------------
// E2PROM data layout
@@ -2479,17 +1585,6 @@ typedef union _E2PROM_CSR_STRUC {
//
// EEPROM antenna select format
//
-#ifdef RT_BIG_ENDIAN
-typedef union _EEPROM_ANTENNA_STRUC {
- struct {
- USHORT Rsv:4;
- USHORT RfIcType:4; // see E2PROM document
- USHORT TxPath:4; // 1: 1T, 2: 2T
- USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R
- } field;
- USHORT word;
-} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC;
-#else
typedef union _EEPROM_ANTENNA_STRUC {
struct {
USHORT RxPath:4; // 1: 1R, 2: 2R, 3: 3R
@@ -2499,26 +1594,7 @@ typedef union _EEPROM_ANTENNA_STRUC {
} field;
USHORT word;
} EEPROM_ANTENNA_STRUC, *PEEPROM_ANTENNA_STRUC;
-#endif
-#ifdef RT_BIG_ENDIAN
-typedef union _EEPROM_NIC_CINFIG2_STRUC {
- struct {
- USHORT Rsv2:6; // must be 0
- USHORT BW40MAvailForA:1; // 0:enable, 1:disable
- USHORT BW40MAvailForG:1; // 0:enable, 1:disable
- USHORT EnableWPSPBC:1; // WPS PBC Control bit
- USHORT BW40MSidebandForA:1;
- USHORT BW40MSidebandForG:1;
- USHORT CardbusAcceleration:1; // !!! NOTE: 0 - enable, 1 - disable
- USHORT ExternalLNAForA:1; // external LNA enable for 5G
- USHORT ExternalLNAForG:1; // external LNA enable for 2.4G
- USHORT DynamicTxAgcControl:1; //
- USHORT HardwareRadioControl:1; // Whether RF is controlled by driver or HW. 1:enable hw control, 0:disable
- } field;
- USHORT word;
-} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC;
-#else
typedef union _EEPROM_NIC_CINFIG2_STRUC {
struct {
USHORT HardwareRadioControl:1; // 1:enable, 0:disable
@@ -2531,24 +1607,22 @@ typedef union _EEPROM_NIC_CINFIG2_STRUC {
USHORT EnableWPSPBC:1; // WPS PBC Control bit
USHORT BW40MAvailForG:1; // 0:enable, 1:disable
USHORT BW40MAvailForA:1; // 0:enable, 1:disable
+#ifndef RT30xx
USHORT Rsv2:6; // must be 0
+#endif
+#ifdef RT30xx
+ USHORT Rsv1:1; // must be 0
+ USHORT AntDiversity:1; // Antenna diversity
+ USHORT Rsv2:3; // must be 0
+ USHORT DACTestBit:1; // control if driver should patch the DAC issue
+#endif
} field;
USHORT word;
} EEPROM_NIC_CONFIG2_STRUC, *PEEPROM_NIC_CONFIG2_STRUC;
-#endif
//
// TX_PWR Value valid range 0xFA(-6) ~ 0x24(36)
//
-#ifdef RT_BIG_ENDIAN
-typedef union _EEPROM_TX_PWR_STRUC {
- struct {
- CHAR Byte1; // High Byte
- CHAR Byte0; // Low Byte
- } field;
- USHORT word;
-} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC;
-#else
typedef union _EEPROM_TX_PWR_STRUC {
struct {
CHAR Byte0; // Low Byte
@@ -2556,17 +1630,7 @@ typedef union _EEPROM_TX_PWR_STRUC {
} field;
USHORT word;
} EEPROM_TX_PWR_STRUC, *PEEPROM_TX_PWR_STRUC;
-#endif
-#ifdef RT_BIG_ENDIAN
-typedef union _EEPROM_VERSION_STRUC {
- struct {
- UCHAR Version; // High Byte
- UCHAR FaeReleaseNumber; // Low Byte
- } field;
- USHORT word;
-} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC;
-#else
typedef union _EEPROM_VERSION_STRUC {
struct {
UCHAR FaeReleaseNumber; // Low Byte
@@ -2574,25 +1638,7 @@ typedef union _EEPROM_VERSION_STRUC {
} field;
USHORT word;
} EEPROM_VERSION_STRUC, *PEEPROM_VERSION_STRUC;
-#endif
-#ifdef RT_BIG_ENDIAN
-typedef union _EEPROM_LED_STRUC {
- struct {
- USHORT Rsvd:3; // Reserved
- USHORT LedMode:5; // Led mode.
- USHORT PolarityGPIO_4:1; // Polarity GPIO#4 setting.
- USHORT PolarityGPIO_3:1; // Polarity GPIO#3 setting.
- USHORT PolarityGPIO_2:1; // Polarity GPIO#2 setting.
- USHORT PolarityGPIO_1:1; // Polarity GPIO#1 setting.
- USHORT PolarityGPIO_0:1; // Polarity GPIO#0 setting.
- USHORT PolarityACT:1; // Polarity ACT setting.
- USHORT PolarityRDY_A:1; // Polarity RDY_A setting.
- USHORT PolarityRDY_G:1; // Polarity RDY_G setting.
- } field;
- USHORT word;
-} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC;
-#else
typedef union _EEPROM_LED_STRUC {
struct {
USHORT PolarityRDY_G:1; // Polarity RDY_G setting.
@@ -2608,18 +1654,7 @@ typedef union _EEPROM_LED_STRUC {
} field;
USHORT word;
} EEPROM_LED_STRUC, *PEEPROM_LED_STRUC;
-#endif
-#ifdef RT_BIG_ENDIAN
-typedef union _EEPROM_TXPOWER_DELTA_STRUC {
- struct {
- UCHAR TxPowerEnable:1;// Enable
- UCHAR Type:1; // 1: plus the delta value, 0: minus the delta value
- UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4)
- } field;
- UCHAR value;
-} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC;
-#else
typedef union _EEPROM_TXPOWER_DELTA_STRUC {
struct {
UCHAR DeltaValue:6; // Tx Power dalta value (MAX=4)
@@ -2628,22 +1663,10 @@ typedef union _EEPROM_TXPOWER_DELTA_STRUC {
} field;
UCHAR value;
} EEPROM_TXPOWER_DELTA_STRUC, *PEEPROM_TXPOWER_DELTA_STRUC;
-#endif
//
// QOS_CSR0: TXOP holder address0 register
//
-#ifdef RT_BIG_ENDIAN
-typedef union _QOS_CSR0_STRUC {
- struct {
- UCHAR Byte3; // MAC address byte 3
- UCHAR Byte2; // MAC address byte 2
- UCHAR Byte1; // MAC address byte 1
- UCHAR Byte0; // MAC address byte 0
- } field;
- UINT32 word;
-} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC;
-#else
typedef union _QOS_CSR0_STRUC {
struct {
UCHAR Byte0; // MAC address byte 0
@@ -2653,22 +1676,10 @@ typedef union _QOS_CSR0_STRUC {
} field;
UINT32 word;
} QOS_CSR0_STRUC, *PQOS_CSR0_STRUC;
-#endif
//
// QOS_CSR1: TXOP holder address1 register
//
-#ifdef RT_BIG_ENDIAN
-typedef union _QOS_CSR1_STRUC {
- struct {
- UCHAR Rsvd1;
- UCHAR Rsvd0;
- UCHAR Byte5; // MAC address byte 5
- UCHAR Byte4; // MAC address byte 4
- } field;
- UINT32 word;
-} QOS_CSR1_STRUC, *PQOS_CSR1_STRUC;
-#else
typedef union _QOS_CSR1_STRUC {
struct {
UCHAR Byte4; // MAC address byte 4
@@ -2678,22 +1689,8 @@ typedef union _QOS_CSR1_STRUC {
} field;
UINT32 word;
} 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
@@ -2705,6 +1702,5 @@ typedef union _RF_CSR_CFG_STRUC {
} field;
UINT word;
} RF_CSR_CFG_STRUC, *PRF_CSR_CFG_STRUC;
-#endif
#endif // __RT28XX_H__
diff --git a/drivers/staging/rt2860/rt_ate.c b/drivers/staging/rt2860/rt_ate.c
deleted file mode 100644
index 1ed73c9e6b60..000000000000
--- a/drivers/staging/rt2860/rt_ate.c
+++ /dev/null
@@ -1,6009 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
- */
-
-#include "rt_config.h"
-
-#ifdef RALINK_ATE
-UCHAR TemplateFrame[24] = {0x08/* Data type */,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0xAA,0xBB,0x12,0x34,0x56,0x00,0x11,0x22,0xAA,0xBB,0xCC,0x00,0x00}; // 802.11 MAC Header, Type:Data, Length:24bytes
-extern RTMP_RF_REGS RF2850RegTable[];
-extern UCHAR NUM_OF_2850_CHNL;
-
-static CHAR CCKRateTable[] = {0, 1, 2, 3, 8, 9, 10, 11, -1}; /* CCK Mode. */
-static CHAR OFDMRateTable[] = {0, 1, 2, 3, 4, 5, 6, 7, -1}; /* OFDM Mode. */
-static CHAR HTMIXRateTable[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -1}; /* HT Mix Mode. */
-
-static INT TxDmaBusy(
- IN PRTMP_ADAPTER pAd);
-
-static INT RxDmaBusy(
- IN PRTMP_ADAPTER pAd);
-
-static VOID RtmpDmaEnable(
- IN PRTMP_ADAPTER pAd,
- IN INT Enable);
-
-static VOID BbpSoftReset(
- IN PRTMP_ADAPTER pAd);
-
-static VOID RtmpRfIoWrite(
- IN PRTMP_ADAPTER pAd);
-
-static INT ATESetUpFrame(
- IN PRTMP_ADAPTER pAd,
- IN UINT32 TxIdx);
-
-static INT ATETxPwrHandler(
- IN PRTMP_ADAPTER pAd,
- IN char index);
-
-static INT ATECmdHandler(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-static int CheckMCSValid(
- IN UCHAR Mode,
- IN UCHAR Mcs);
-
-static VOID ATEWriteTxWI(
- IN PRTMP_ADAPTER pAd,
- IN PTXWI_STRUC pOutTxWI,
- IN BOOLEAN FRAG,
- IN BOOLEAN CFACK,
- IN BOOLEAN InsTimestamp,
- IN BOOLEAN AMPDU,
- IN BOOLEAN Ack,
- IN BOOLEAN NSeq, // HW new a sequence.
- IN UCHAR BASize,
- IN UCHAR WCID,
- IN ULONG Length,
- IN UCHAR PID,
- IN UCHAR TID,
- IN UCHAR TxRate,
- IN UCHAR Txopmode,
- IN BOOLEAN CfAck,
- IN HTTRANSMIT_SETTING *pTransmit);
-
-
-static VOID SetJapanFilter(
- IN PRTMP_ADAPTER pAd);
-
-/*=========================end of prototype=========================*/
-
-static INT TxDmaBusy(
- IN PRTMP_ADAPTER pAd)
-{
- INT result;
- WPDMA_GLO_CFG_STRUC GloCfg;
-
- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA
- if (GloCfg.field.TxDMABusy)
- result = 1;
- else
- result = 0;
-
- return result;
-}
-
-static INT RxDmaBusy(
- IN PRTMP_ADAPTER pAd)
-{
- INT result;
- WPDMA_GLO_CFG_STRUC GloCfg;
-
- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA
- if (GloCfg.field.RxDMABusy)
- result = 1;
- else
- result = 0;
-
- return result;
-}
-
-static VOID RtmpDmaEnable(
- IN PRTMP_ADAPTER pAd,
- IN INT Enable)
-{
- BOOLEAN value;
- ULONG WaitCnt;
- WPDMA_GLO_CFG_STRUC GloCfg;
-
- value = Enable > 0 ? 1 : 0;
-
- // check DMA is in busy mode.
- WaitCnt = 0;
- while (TxDmaBusy(pAd) || RxDmaBusy(pAd))
- {
- RTMPusecDelay(10);
- if (WaitCnt++ > 100)
- break;
- }
-
- RTMP_IO_READ32(pAd, WPDMA_GLO_CFG, &GloCfg.word); // disable DMA
- GloCfg.field.EnableTxDMA = value;
- GloCfg.field.EnableRxDMA = value;
- RTMP_IO_WRITE32(pAd, WPDMA_GLO_CFG, GloCfg.word); // abort all TX rings
- RTMPusecDelay(5000);
-
- return;
-}
-
-
-static VOID BbpSoftReset(
- IN PRTMP_ADAPTER pAd)
-{
- UCHAR BbpData = 0;
-
- // Soft reset, set BBP R21 bit0=1->0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R21, &BbpData);
- BbpData |= 0x00000001; //set bit0=1
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R21, BbpData);
-
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R21, &BbpData);
- BbpData &= ~(0x00000001); //set bit0=0
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R21, BbpData);
-
- return;
-}
-
-static VOID RtmpRfIoWrite(
- IN PRTMP_ADAPTER pAd)
-{
- // Set RF value 1's set R3[bit2] = [0]
- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1);
- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2);
- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04)));
- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4);
-
- RTMPusecDelay(200);
-
- // Set RF value 2's set R3[bit2] = [1]
- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1);
- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2);
- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 | 0x04));
- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4);
-
- RTMPusecDelay(200);
-
- // Set RF value 3's set R3[bit2] = [0]
- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R1);
- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R2);
- RTMP_RF_IO_WRITE32(pAd, (pAd->LatchRfRegs.R3 & (~0x04)));
- RTMP_RF_IO_WRITE32(pAd, pAd->LatchRfRegs.R4);
-
- return;
-}
-
-static int CheckMCSValid(
- UCHAR Mode,
- UCHAR Mcs)
-{
- int i;
- PCHAR pRateTab;
-
- switch(Mode)
- {
- case 0:
- pRateTab = CCKRateTable;
- break;
- case 1:
- pRateTab = OFDMRateTable;
- break;
- case 2:
- case 3:
- pRateTab = HTMIXRateTable;
- break;
- default:
- ATEDBGPRINT(RT_DEBUG_ERROR, ("unrecognizable Tx Mode %d\n", Mode));
- return -1;
- break;
- }
-
- i = 0;
- while(pRateTab[i] != -1)
- {
- if (pRateTab[i] == Mcs)
- return 0;
- i++;
- }
-
- return -1;
-}
-
-#if 1
-static INT ATETxPwrHandler(
- IN PRTMP_ADAPTER pAd,
- IN char index)
-{
- ULONG R;
- CHAR TxPower;
- UCHAR Bbp94 = 0;
- BOOLEAN bPowerReduce = FALSE;
-
-#ifdef RALINK_28xx_QA
- if ((pAd->ate.bQATxStart == TRUE) || (pAd->ate.bQARxStart == TRUE))
- {
- /* When QA is used for Tx, pAd->ate.TxPower0/1 and real tx power
- ** are not synchronized.
- */
-/*
- pAd->ate.TxPower0 = pAd->LatchRfRegs.xxx;
- pAd->ate.TxPower1 = pAd->LatchRfRegs.xxx;
-*/
- return 0;
- }
- else
-#endif // RALINK_28xx_QA //
- {
- TxPower = index == 0 ? pAd->ate.TxPower0 : pAd->ate.TxPower1;
-
- if (pAd->ate.Channel <= 14)
- {
- if (TxPower > 31)
- {
- //
- // R3, R4 can't large than 31 (0x24), 31 ~ 36 used by BBP 94
- //
- R = 31;
- if (TxPower <= 36)
- Bbp94 = BBPR94_DEFAULT + (UCHAR)(TxPower - 31);
- }
- else if (TxPower < 0)
- {
- //
- // R3, R4 can't less than 0, -1 ~ -6 used by BBP 94
- //
- R = 0;
- if (TxPower >= -6)
- Bbp94 = BBPR94_DEFAULT + TxPower;
- }
- else
- {
- // 0 ~ 31
- R = (ULONG) TxPower;
- Bbp94 = BBPR94_DEFAULT;
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("%s (TxPower=%d, R=%ld, BBP_R94=%d)\n", __func__, TxPower, R, Bbp94));
- }
- else// 5.5 GHz
- {
- if (TxPower > 15)
- {
- //
- // R3, R4 can't large than 15 (0x0F)
- //
- R = 15;
- }
- else if (TxPower < 0)
- {
- //
- // R3, R4 can't less than 0
- //
- // -1 ~ -7
- ASSERT((TxPower >= -7));
- R = (ULONG)(TxPower + 7);
- bPowerReduce = TRUE;
- }
- else
- {
- // 0 ~ 15
- R = (ULONG) TxPower;
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("%s (TxPower=%d, R=%lu)\n", __func__, TxPower, R));
- }
-
- if (pAd->ate.Channel <= 14)
- {
- if (index == 0)
- {
- R = R << 9; // shift TX power control to correct RF(R3) register bit position
- R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff);
- pAd->LatchRfRegs.R3 = R;
- }
- else
- {
- R = R << 6; // shift TX power control to correct RF(R4) register bit position
- R |= (pAd->LatchRfRegs.R4 & 0xfffff83f);
- pAd->LatchRfRegs.R4 = R;
- }
- }
- else// 5.5GHz
- {
- if (bPowerReduce == FALSE)
- {
- if (index == 0)
- {
- R = (R << 10) | (1 << 9); // shift TX power control to correct RF(R3) register bit position
- R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff);
- pAd->LatchRfRegs.R3 = R;
- }
- else
- {
- R = (R << 7) | (1 << 6); // shift TX power control to correct RF(R4) register bit position
- R |= (pAd->LatchRfRegs.R4 & 0xfffff83f);
- pAd->LatchRfRegs.R4 = R;
- }
- }
- else
- {
- if (index == 0)
- {
- R = (R << 10); // shift TX power control to correct RF(R3) register bit position
- R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff);
-
- /* Clear bit 9 of R3 to reduce 7dB. */
- pAd->LatchRfRegs.R3 = (R & (~(1 << 9)));
- }
- else
- {
- R = (R << 7); // shift TX power control to correct RF(R4) register bit position
- R |= (pAd->LatchRfRegs.R4 & 0xfffff83f);
-
- /* Clear bit 6 of R4 to reduce 7dB. */
- pAd->LatchRfRegs.R4 = (R & (~(1 << 6)));
- }
- }
- }
-
- RtmpRfIoWrite(pAd);
-
- return 0;
- }
-}
-#else// 1 //
-static INT ATETxPwrHandler(
- IN PRTMP_ADAPTER pAd,
- IN char index)
-{
- ULONG R;
- CHAR TxPower;
- UCHAR Bbp94 = 0;
-
-#ifdef RALINK_28xx_QA
- if ((pAd->ate.bQATxStart == TRUE) || (pAd->ate.bQARxStart == TRUE))
- {
- // TODO: how to get current TxPower0/1 from pAd->LatchRfRegs ?
- /* When QA is used for Tx, pAd->ate.TxPower0/1 and real tx power
- ** are not synchronized.
- */
-/*
- pAd->ate.TxPower0 = pAd->LatchRfRegs.xxx;
- pAd->ate.TxPower1 = pAd->LatchRfRegs.xxx;
-*/
- return 0;
- }
- else
-#endif // RALINK_28xx_QA //
- {
- TxPower = index == 0 ? pAd->ate.TxPower0 : pAd->ate.TxPower1;
-
- if (TxPower > 31)
- {
- //
- // R3, R4 can't large than 36 (0x24), 31 ~ 36 used by BBP 94
- //
- R = 31;
- if (TxPower <= 36)
- Bbp94 = BBPR94_DEFAULT + (UCHAR)(TxPower - 31);
- }
- else if (TxPower < 0)
- {
- //
- // R3, R4 can't less than 0, -1 ~ -6 used by BBP 94
- //
- R = 0;
- if (TxPower >= -6)
- Bbp94 = BBPR94_DEFAULT + TxPower;
- }
- else
- {
- // 0 ~ 31
- R = (ULONG) TxPower;
- Bbp94 = BBPR94_DEFAULT;
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("%s (TxPower=%d, R3=%ld, BBP_R94=%d)\n", __func__, TxPower, R, Bbp94));
-
- if (pAd->ate.Channel <= 14)
- {
- if (index == 0)
- {
- R = R << 9; // shift TX power control to correct RF(R3) register bit position
- R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff);
- pAd->LatchRfRegs.R3 = R;
- }
- else
- {
- R = R << 6; // shift TX power control to correct RF(R4) register bit position
- R |= (pAd->LatchRfRegs.R4 & 0xfffff83f);
- pAd->LatchRfRegs.R4 = R;
- }
- }
- else
- {
- if (index == 0)
- {
- R = (R << 10) | (1 << 9); // shift TX power control to correct RF(R3) register bit position
- R |= (pAd->LatchRfRegs.R3 & 0xffffc1ff);
- pAd->LatchRfRegs.R3 = R;
- }
- else
- {
- R = (R << 7) | (1 << 6); // shift TX power control to correct RF(R4) register bit position
- R |= (pAd->LatchRfRegs.R4 & 0xfffff83f);
- pAd->LatchRfRegs.R4 = R;
- }
- }
-
- RtmpRfIoWrite(pAd);
-
- return 0;
- }
-}
-#endif // 1 //
-/*
- ==========================================================================
- Description:
- Set ATE operation mode to
- 0. ATESTART = Start ATE Mode
- 1. ATESTOP = Stop ATE Mode
- 2. TXCONT = Continuous Transmit
- 3. TXCARR = Transmit Carrier
- 4. TXFRAME = Transmit Frames
- 5. RXFRAME = Receive Frames
-#ifdef RALINK_28xx_QA
- 6. TXSTOP = Stop Any Type of Transmition
- 7. RXSTOP = Stop Receiving Frames
-#endif // RALINK_28xx_QA //
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-static INT ATECmdHandler(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UINT32 Value = 0;
- UCHAR BbpData;
- UINT32 MacData = 0;
- PTXD_STRUC pTxD;
- INT index;
- UINT i=0, atemode;
- PRXD_STRUC pRxD;
- PRTMP_TX_RING pTxRing = &pAd->TxRing[QID_AC_BE];
-#ifndef UCOS
- NDIS_STATUS Status = NDIS_STATUS_SUCCESS;
-#endif // UCOS //
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
- TXD_STRUC TxD;
-#endif
- ATEDBGPRINT(RT_DEBUG_TRACE, ("===> ATECmdHandler()\n"));
-
- ATEAsicSwitchChannel(pAd);
- AsicLockChannel(pAd, pAd->ate.Channel);
-
- RTMPusecDelay(5000);
-
- // read MAC_SYS_CTRL and backup MAC_SYS_CTRL value.
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);
-
- // Default value in BBP R22 is 0x0.
- BbpData = 0;
-
- // clean bit4 to stop continuous Tx production test.
- MacData &= 0xFFFFFFEF;
-
- if (!strcmp(arg, "ATESTART")) //Enter ATE mode and set Tx/Rx Idle
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: ATESTART\n"));
-
-#ifndef UCOS
- // check if we have removed the firmware
- if (!(ATE_ON(pAd)))
- {
- NICEraseFirmware(pAd);
- }
-#endif // !UCOS //
- atemode = pAd->ate.Mode;
- pAd->ate.Mode = ATE_START;
-// pAd->ate.TxDoneCount = pAd->ate.TxCount;
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);
-
- if (atemode & ATE_TXCARR)
- {
- // No Carrier Test set BBP R22 bit7=0, bit6=0, bit[5~0]=0x0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);
- BbpData &= 0xFFFFFF00; //clear bit7, bit6, bit[5~0]
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
- }
- else if (atemode & ATE_TXCARRSUPP)
- {
- // No Cont. TX set BBP R22 bit7=0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);
- BbpData &= ~(1 << 7); //set bit7=0
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
-
- // No Carrier Suppression set BBP R24 bit0=0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R24, &BbpData);
- BbpData &= 0xFFFFFFFE; //clear bit0
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, BbpData);
- }
- // We should free some resource which was allocated when ATE_TXFRAME , ATE_STOP, and ATE_TXCONT.
- else if ((atemode & ATE_TXFRAME) || (atemode == ATE_STOP))
- {
- PRTMP_TX_RING pTxRing = &pAd->TxRing[QID_AC_BE];
-
- if (atemode & ATE_TXCONT)
- {
- // No Cont. TX set BBP R22 bit7=0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);
- BbpData &= ~(1 << 7); //set bit7=0
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
- }
- // Abort Tx, Rx DMA.
- RtmpDmaEnable(pAd, 0);
- for (i=0; i<TX_RING_SIZE; i++)
- {
- PNDIS_PACKET pPacket;
-
-#ifndef RT_BIG_ENDIAN
- pTxD = (PTXD_STRUC)pAd->TxRing[QID_AC_BE].Cell[i].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC)pAd->TxRing[QID_AC_BE].Cell[i].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
- pTxD->DMADONE = 0;
- pPacket = pTxRing->Cell[i].pNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNdisPacket as NULL after clear
- pTxRing->Cell[i].pNdisPacket = NULL;
-
- pPacket = pTxRing->Cell[i].pNextNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNextNdisPacket as NULL after clear
- pTxRing->Cell[i].pNextNdisPacket = NULL;
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif
- }
- // Start Tx, RX DMA
- RtmpDmaEnable(pAd, 1);
- }
- // reset Rx statistics.
- pAd->ate.LastSNR0 = 0;
- pAd->ate.LastSNR1 = 0;
- pAd->ate.LastRssi0 = 0;
- pAd->ate.LastRssi1 = 0;
- pAd->ate.LastRssi2 = 0;
- pAd->ate.AvgRssi0 = 0;
- pAd->ate.AvgRssi1 = 0;
- pAd->ate.AvgRssi2 = 0;
- pAd->ate.AvgRssi0X8 = 0;
- pAd->ate.AvgRssi1X8 = 0;
- pAd->ate.AvgRssi2X8 = 0;
- pAd->ate.NumOfAvgRssiSample = 0;
-
-#ifdef RALINK_28xx_QA
- // Tx frame
- pAd->ate.bQATxStart = FALSE;
- pAd->ate.bQARxStart = FALSE;
- pAd->ate.seq = 0;
-
- // counters
- pAd->ate.U2M = 0;
- pAd->ate.OtherData = 0;
- pAd->ate.Beacon = 0;
- pAd->ate.OtherCount = 0;
- pAd->ate.TxAc0 = 0;
- pAd->ate.TxAc1 = 0;
- pAd->ate.TxAc2 = 0;
- pAd->ate.TxAc3 = 0;
- pAd->ate.TxHCCA = 0;
- pAd->ate.TxMgmt = 0;
- pAd->ate.RSSI0 = 0;
- pAd->ate.RSSI1 = 0;
- pAd->ate.RSSI2 = 0;
- pAd->ate.SNR0 = 0;
- pAd->ate.SNR1 = 0;
-
- // control
- pAd->ate.TxDoneCount = 0;
- pAd->ate.TxStatus = 0; // task Tx status // 0 --> task is idle, 1 --> task is running
-#endif // RALINK_28xx_QA //
-
- // Soft reset BBP.
- BbpSoftReset(pAd);
-
-
-#ifdef CONFIG_STA_SUPPORT
- //
- // LinkDown() has "AsicDisableSync();" and "RTMP_BBP_IO_R/W8_BY_REG_ID();" inside.
- //
-// LinkDown(pAd, FALSE);
-// AsicEnableBssSync(pAd);
-#ifndef UCOS
- netif_stop_queue(pAd->net_dev);
-#endif // !UCOS //
- //
- // If we skip "LinkDown()", we should disable protection
- // to prevent from sending out RTS or CTS-to-self.
- //
- ATEDisableAsicProtect(pAd);
- RTMPStationStop(pAd);
-#endif // CONFIG_STA_SUPPORT //
-
- /* Disable Tx */
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= ~(1 << 2);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
- /* Disable Rx */
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= ~(1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
- }
- else if (!strcmp(arg, "ATESTOP"))
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: ATESTOP\n"));
-
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData); // recover the MAC_SYS_CTRL register back.
-
- // Disable Tx, Rx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= (0xfffffff3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
- // Abort Tx, RX DMA.
- RtmpDmaEnable(pAd, 0);
-
-#ifndef UCOS
- pAd->ate.bFWLoading = TRUE;
- Status = NICLoadFirmware(pAd);
- if (Status != NDIS_STATUS_SUCCESS)
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("NICLoadFirmware failed, Status[=0x%08x]\n", Status));
- return FALSE;
- }
-#endif // !UCOS //
- pAd->ate.Mode = ATE_STOP;
-
-
-#ifdef CONFIG_STA_SUPPORT
- //
- // Even the firmware has been loaded,
- // we still could use ATE_BBP_IO_READ8_BY_REG_ID().
- // But this is not suggested.
- //
- BbpSoftReset(pAd);
-#endif // CONFIG_STA_SUPPORT //
-
- NICDisableInterrupt(pAd);
-
- NICInitializeAdapter(pAd, TRUE);
-
-
- // Reinitialize Rx Ring before Rx DMA is enabled.
- // The nightmare of >>>RxCoherent<<< was gone !
- for (index = 0; index < RX_RING_SIZE; index++)
- {
- pRxD = (PRXD_STRUC) pAd->RxRing.Cell[index].AllocVa;
- pRxD->DDONE = 0;
- }
-
- // We should read EEPROM for all cases.
- NICReadEEPROMParameters(pAd, NULL);
- NICInitAsicFromEEPROM(pAd);
-
- AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
- AsicLockChannel(pAd, pAd->CommonCfg.Channel);
-
- //
- // Enable Interrupt
- //
-
- //
- // These steps are only for APAutoSelectChannel().
- //
-#if 0
- //pAd->bStaFifoTest = TRUE;
- pAd->int_enable_reg = ((DELAYINTMASK) | (RxINT|TxDataInt|TxMgmtInt)) & ~(0x03);
- pAd->int_disable_mask = 0;
- pAd->int_pending = 0;
-#endif
- RTMP_IO_WRITE32(pAd, INT_SOURCE_CSR, 0xffffffff); // clear garbage interrupts
- NICEnableInterrupt(pAd);
-
-
-/*=========================================================================*/
- /* restore RX_FILTR_CFG */
-#ifdef CONFIG_STA_SUPPORT
- /* restore RX_FILTR_CFG due to that QA maybe set it to 0x3 */
- RTMP_IO_WRITE32(pAd, RX_FILTR_CFG, STANORMAL);
-#endif // CONFIG_STA_SUPPORT //
-/*=========================================================================*/
-
- // Enable Tx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value |= (1 << 2);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
- // Enable Tx, Rx DMA.
- RtmpDmaEnable(pAd, 1);
-
- // Enable Rx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value |= (1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
-
-#ifdef CONFIG_STA_SUPPORT
- RTMPStationStart(pAd);
-#endif // CONFIG_STA_SUPPORT //
-#ifndef UCOS
- netif_start_queue(pAd->net_dev);
-#endif // !UCOS //
- }
- else if (!strcmp(arg, "TXCARR")) // Tx Carrier
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCARR\n"));
- pAd->ate.Mode |= ATE_TXCARR;
-
- // QA has done the following steps if it is used.
- if (pAd->ate.bQATxStart == FALSE)
- {
- // Soft reset BBP.
- BbpSoftReset(pAd);
-
- // Carrier Test set BBP R22 bit7=1, bit6=1, bit[5~0]=0x01
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);
- BbpData &= 0xFFFFFF00; //clear bit7, bit6, bit[5~0]
- BbpData |= 0x000000C1; //set bit7=1, bit6=1, bit[5~0]=0x01
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
-
- // set MAC_SYS_CTRL(0x1004) Continuous Tx Production Test (bit4) = 1
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value = Value | 0x00000010;
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
- }
- }
- else if (!strcmp(arg, "TXCONT")) // Tx Continue
- {
- if (pAd->ate.bQATxStart == TRUE)
- {
- /* set MAC_SYS_CTRL(0x1004) bit4(Continuous Tx Production Test)
- and bit2(MAC TX enable) back to zero. */
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);
- MacData &= 0xFFFFFFEB;
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);
-
- // set BBP R22 bit7=0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);
- BbpData &= 0xFFFFFF7F; //set bit7=0
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
- }
-
- /* for TxCont mode.
- ** Step 1: Send 50 packets first then wait for a moment.
- ** Step 2: Send more 50 packet then start continue mode.
- */
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXCONT\n"));
- // Step 1: send 50 packets first.
- pAd->ate.Mode |= ATE_TXCONT;
- pAd->ate.TxCount = 50;
- /* Do it after Tx/Rx DMA is aborted. */
-// pAd->ate.TxDoneCount = 0;
-
- // Soft reset BBP.
- BbpSoftReset(pAd);
-
- // Abort Tx, RX DMA.
- RtmpDmaEnable(pAd, 0);
-
- // Fix can't smooth kick
- {
- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * 0x10, &pTxRing->TxDmaIdx);
- pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx;
- pTxRing->TxCpuIdx = pTxRing->TxDmaIdx;
- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * 0x10, pTxRing->TxCpuIdx);
- }
-
- pAd->ate.TxDoneCount = 0;
-
- /* Only needed if we have to send some normal frames. */
- SetJapanFilter(pAd);
-
- for (i = 0; (i < TX_RING_SIZE-1) && (i < pAd->ate.TxCount); i++)
- {
- PNDIS_PACKET pPacket;
- UINT32 TxIdx = pTxRing->TxCpuIdx;
-
-#ifndef RT_BIG_ENDIAN
- pTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
- // Clean current cell.
- pPacket = pTxRing->Cell[TxIdx].pNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNdisPacket as NULL after clear
- pTxRing->Cell[TxIdx].pNdisPacket = NULL;
-
- pPacket = pTxRing->Cell[TxIdx].pNextNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNextNdisPacket as NULL after clear
- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL;
-
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif
-
- if (ATESetUpFrame(pAd, TxIdx) != 0)
- break;
-
- INC_RING_INDEX(pTxRing->TxCpuIdx, TX_RING_SIZE);
- }
-
- // Setup frame format.
- ATESetUpFrame(pAd, pTxRing->TxCpuIdx);
-
- // Start Tx, RX DMA.
- RtmpDmaEnable(pAd, 1);
-
- // Enable Tx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value |= (1 << 2);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
- // Disable Rx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= ~(1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
-#ifdef RALINK_28xx_QA
- if (pAd->ate.bQATxStart == TRUE)
- {
- pAd->ate.TxStatus = 1;
- //pAd->ate.Repeat = 0;
- }
-#endif // RALINK_28xx_QA //
-
- // kick Tx-Ring.
- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * RINGREG_DIFF, pAd->TxRing[QID_AC_BE].TxCpuIdx);
-
- RTMPusecDelay(5000);
-
-
- // Step 2: send more 50 packets then start continue mode.
- // Abort Tx, RX DMA.
- RtmpDmaEnable(pAd, 0);
-
- // Cont. TX set BBP R22 bit7=1
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);
- BbpData |= 0x00000080; //set bit7=1
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
-
- pAd->ate.TxCount = 50;
-
- // Fix can't smooth kick
- {
- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * 0x10, &pTxRing->TxDmaIdx);
- pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx;
- pTxRing->TxCpuIdx = pTxRing->TxDmaIdx;
- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * 0x10, pTxRing->TxCpuIdx);
- }
-
- pAd->ate.TxDoneCount = 0;
-
- SetJapanFilter(pAd);
-
- for (i = 0; (i < TX_RING_SIZE-1) && (i < pAd->ate.TxCount); i++)
- {
- PNDIS_PACKET pPacket;
- UINT32 TxIdx = pTxRing->TxCpuIdx;
-
-#ifndef RT_BIG_ENDIAN
- pTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
- // clean current cell.
- pPacket = pTxRing->Cell[TxIdx].pNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNdisPacket as NULL after clear
- pTxRing->Cell[TxIdx].pNdisPacket = NULL;
-
- pPacket = pTxRing->Cell[TxIdx].pNextNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNextNdisPacket as NULL after clear
- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL;
-
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif
-
- if (ATESetUpFrame(pAd, TxIdx) != 0)
- break;
-
- INC_RING_INDEX(pTxRing->TxCpuIdx, TX_RING_SIZE);
- }
-
- ATESetUpFrame(pAd, pTxRing->TxCpuIdx);
-
- // Start Tx, RX DMA.
- RtmpDmaEnable(pAd, 1);
-
- // Enable Tx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value |= (1 << 2);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
- // Disable Rx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= ~(1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
-#ifdef RALINK_28xx_QA
- if (pAd->ate.bQATxStart == TRUE)
- {
- pAd->ate.TxStatus = 1;
- //pAd->ate.Repeat = 0;
- }
-#endif // RALINK_28xx_QA //
-
- // kick Tx-Ring.
- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * RINGREG_DIFF, pAd->TxRing[QID_AC_BE].TxCpuIdx);
-
- RTMPusecDelay(500);
-
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &MacData);
- MacData |= 0x00000010;
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);
- }
- else if (!strcmp(arg, "TXFRAME")) // Tx Frames
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXFRAME(Count=%d)\n", pAd->ate.TxCount));
- pAd->ate.Mode |= ATE_TXFRAME;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
-
- // Soft reset BBP.
- BbpSoftReset(pAd);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);
-
- // Abort Tx, RX DMA.
- RtmpDmaEnable(pAd, 0);
-
- // Fix can't smooth kick
- {
- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * 0x10, &pTxRing->TxDmaIdx);
- pTxRing->TxSwFreeIdx = pTxRing->TxDmaIdx;
- pTxRing->TxCpuIdx = pTxRing->TxDmaIdx;
- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * 0x10, pTxRing->TxCpuIdx);
- }
-
- pAd->ate.TxDoneCount = 0;
-
- SetJapanFilter(pAd);
-
- for (i = 0; (i < TX_RING_SIZE-1) && (i < pAd->ate.TxCount); i++)
- {
- PNDIS_PACKET pPacket;
- UINT32 TxIdx = pTxRing->TxCpuIdx;
-
-#ifndef RT_BIG_ENDIAN
- pTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
- // Clean current cell.
- pPacket = pTxRing->Cell[TxIdx].pNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNdisPacket as NULL after clear
- pTxRing->Cell[TxIdx].pNdisPacket = NULL;
-
- pPacket = pTxRing->Cell[TxIdx].pNextNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNextNdisPacket as NULL after clear
- pTxRing->Cell[TxIdx].pNextNdisPacket = NULL;
-
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif
-
- if (ATESetUpFrame(pAd, TxIdx) != 0)
- break;
-
- INC_RING_INDEX(pTxRing->TxCpuIdx, TX_RING_SIZE);
-
- }
-
- ATESetUpFrame(pAd, pTxRing->TxCpuIdx);
-
- // Start Tx, Rx DMA.
- RtmpDmaEnable(pAd, 1);
-
- // Enable Tx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value |= (1 << 2);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-#ifdef RALINK_28xx_QA
- // add this for LoopBack mode
- if (pAd->ate.bQARxStart == FALSE)
- {
- // Disable Rx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= ~(1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
- }
-
- if (pAd->ate.bQATxStart == TRUE)
- {
- pAd->ate.TxStatus = 1;
- //pAd->ate.Repeat = 0;
- }
-#else
- // Disable Rx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= ~(1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-#endif // RALINK_28xx_QA //
-
- RTMP_IO_READ32(pAd, TX_DTX_IDX0 + QID_AC_BE * RINGREG_DIFF, &pAd->TxRing[QID_AC_BE].TxDmaIdx);
- // kick Tx-Ring.
- RTMP_IO_WRITE32(pAd, TX_CTX_IDX0 + QID_AC_BE * RINGREG_DIFF, pAd->TxRing[QID_AC_BE].TxCpuIdx);
-
- pAd->RalinkCounters.KickTxCount++;
- }
-#ifdef RALINK_28xx_QA
- else if (!strcmp(arg, "TXSTOP"))
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: TXSTOP\n"));
- atemode = pAd->ate.Mode;
- pAd->ate.Mode &= ATE_TXSTOP;
- pAd->ate.bQATxStart = FALSE;
-// pAd->ate.TxDoneCount = pAd->ate.TxCount;
-
- if (atemode & ATE_TXCARR)
- {
- // No Carrier Test set BBP R22 bit7=0, bit6=0, bit[5~0]=0x0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);
- BbpData &= 0xFFFFFF00; //clear bit7, bit6, bit[5~0]
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
- }
- else if (atemode & ATE_TXCARRSUPP)
- {
- // No Cont. TX set BBP R22 bit7=0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);
- BbpData &= ~(1 << 7); //set bit7=0
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
-
- // No Carrier Suppression set BBP R24 bit0=0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R24, &BbpData);
- BbpData &= 0xFFFFFFFE; //clear bit0
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R24, BbpData);
- }
- // We should free some resource which allocate when ATE_TXFRAME , ATE_STOP, and ATE_TXCONT.
- else if ((atemode & ATE_TXFRAME) || (atemode == ATE_STOP))
- {
-
- PRTMP_TX_RING pTxRing = &pAd->TxRing[QID_AC_BE];
-
- if (atemode & ATE_TXCONT)
- {
- // No Cont. TX set BBP R22 bit7=0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R22, &BbpData);
- BbpData &= ~(1 << 7); //set bit7=0
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
- }
-
- // Abort Tx, Rx DMA.
- RtmpDmaEnable(pAd, 0);
- for (i=0; i<TX_RING_SIZE; i++)
- {
- PNDIS_PACKET pPacket;
-
-#ifndef RT_BIG_ENDIAN
- pTxD = (PTXD_STRUC)pAd->TxRing[QID_AC_BE].Cell[i].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC)pAd->TxRing[QID_AC_BE].Cell[i].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
-#endif
- pTxD->DMADONE = 0;
- pPacket = pTxRing->Cell[i].pNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr0, pTxD->SDLen0, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNdisPacket as NULL after clear
- pTxRing->Cell[i].pNdisPacket = NULL;
-
- pPacket = pTxRing->Cell[i].pNextNdisPacket;
- if (pPacket)
- {
- PCI_UNMAP_SINGLE(pAd, pTxD->SDPtr1, pTxD->SDLen1, PCI_DMA_TODEVICE);
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_SUCCESS);
- }
- //Always assign pNextNdisPacket as NULL after clear
- pTxRing->Cell[i].pNextNdisPacket = NULL;
-#ifdef RT_BIG_ENDIAN
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif
- }
- // Enable Tx, Rx DMA
- RtmpDmaEnable(pAd, 1);
-
- }
-
- // control
-// pAd->ate.TxDoneCount = 0;
- pAd->ate.TxStatus = 0; // task Tx status // 0 --> task is idle, 1 --> task is running
-
- // Soft reset BBP.
- BbpSoftReset(pAd);
-
- // Disable Tx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= ~(1 << 2);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
- }
- else if (!strcmp(arg, "RXSTOP"))
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: RXSTOP\n"));
- atemode = pAd->ate.Mode;
- pAd->ate.Mode &= ATE_RXSTOP;
- pAd->ate.bQARxStart = FALSE;
-// pAd->ate.TxDoneCount = pAd->ate.TxCount;
-
- if (atemode & ATE_TXCARR)
- {
- ;
- }
- else if (atemode & ATE_TXCARRSUPP)
- {
- ;
- }
-
- // We should free some resource which was allocated when ATE_TXFRAME , ATE_STOP, and ATE_TXCONT.
- else if ((atemode & ATE_TXFRAME) || (atemode == ATE_STOP))
- {
- if (atemode & ATE_TXCONT)
- {
- ;
- }
- }
-
- // control
-// pAd->ate.TxDoneCount = 0;
-// pAd->ate.TxStatus = 0; // task Tx status // 0 --> task is idle, 1 --> task is running
-
- // Soft reset BBP.
- BbpSoftReset(pAd);
-
- // Disable Rx
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= ~(1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
- }
-#endif // RALINK_28xx_QA //
- else if (!strcmp(arg, "RXFRAME")) // Rx Frames
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: RXFRAME\n"));
-
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R22, BbpData);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, MacData);
-
- pAd->ate.Mode |= ATE_RXFRAME;
-
- // Disable Tx of MAC block.
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value &= ~(1 << 2);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
-
- // Enable Rx of MAC block.
- RTMP_IO_READ32(pAd, MAC_SYS_CTRL, &Value);
- Value |= (1 << 3);
- RTMP_IO_WRITE32(pAd, MAC_SYS_CTRL, Value);
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATE: Invalid arg!\n"));
- return FALSE;
- }
- RTMPusecDelay(5000);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("<=== ATECmdHandler()\n"));
-
- return TRUE;
-}
-/* */
-/* */
-/*=======================End of RT2860=======================*/
-
-
-/*======================Start of RT2870======================*/
-/* */
-/* */
-
-
-INT Set_ATE_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- if (ATECmdHandler(pAd, arg))
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_Proc Success\n"));
-
-
- return TRUE;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_Proc Failed\n"));
- return FALSE;
- }
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE ADDR1=DA for TxFrame(AP : To DS = 0 ; From DS = 1)
- or
- Set ATE ADDR3=DA for TxFrame(STA : To DS = 1 ; From DS = 0)
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_DA_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- CHAR *value;
- INT i;
-
- if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
- return FALSE;
-
- for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":"))
- {
- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
- return FALSE; //Invalid
-
-
-#ifdef CONFIG_STA_SUPPORT
- AtoH(value, &pAd->ate.Addr3[i++], 1);
-#endif // CONFIG_STA_SUPPORT //
- }
-
- if(i != 6)
- return FALSE; //Invalid
-
-
-#ifdef CONFIG_STA_SUPPORT
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_DA_Proc (DA = %2X:%2X:%2X:%2X:%2X:%2X)\n", pAd->ate.Addr3[0],
- pAd->ate.Addr3[1], pAd->ate.Addr3[2], pAd->ate.Addr3[3], pAd->ate.Addr3[4], pAd->ate.Addr3[5]));
-#endif // CONFIG_STA_SUPPORT //
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_DA_Proc Success\n"));
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE ADDR3=SA for TxFrame(AP : To DS = 0 ; From DS = 1)
- or
- Set ATE ADDR2=SA for TxFrame(STA : To DS = 1 ; From DS = 0)
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_SA_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- CHAR *value;
- INT i;
-
- if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
- return FALSE;
-
- for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":"))
- {
- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
- return FALSE; //Invalid
-
-
-#ifdef CONFIG_STA_SUPPORT
- AtoH(value, &pAd->ate.Addr2[i++], 1);
-#endif // CONFIG_STA_SUPPORT //
- }
-
- if(i != 6)
- return FALSE; //Invalid
-
-
-#ifdef CONFIG_STA_SUPPORT
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_SA_Proc (SA = %2X:%2X:%2X:%2X:%2X:%2X)\n", pAd->ate.Addr2[0],
- pAd->ate.Addr2[1], pAd->ate.Addr2[2], pAd->ate.Addr2[3], pAd->ate.Addr2[4], pAd->ate.Addr2[5]));
-#endif // CONFIG_STA_SUPPORT //
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_SA_Proc Success\n"));
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE ADDR2=BSSID for TxFrame(AP : To DS = 0 ; From DS = 1)
- or
- Set ATE ADDR1=BSSID for TxFrame(STA : To DS = 1 ; From DS = 0)
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_BSSID_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- CHAR *value;
- INT i;
-
- if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
- return FALSE;
-
- for (i=0, value = rstrtok(arg, ":"); value; value = rstrtok(NULL, ":"))
- {
- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
- return FALSE; //Invalid
-
-
-#ifdef CONFIG_STA_SUPPORT
- AtoH(value, &pAd->ate.Addr1[i++], 1);
-#endif // CONFIG_STA_SUPPORT //
- }
-
- if(i != 6)
- return FALSE; //Invalid
-
-
-#ifdef CONFIG_STA_SUPPORT
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_BSSID_Proc (BSSID = %2X:%2X:%2X:%2X:%2X:%2X)\n", pAd->ate.Addr1[0],
- pAd->ate.Addr1[1], pAd->ate.Addr1[2], pAd->ate.Addr1[3], pAd->ate.Addr1[4], pAd->ate.Addr1[5]));
-#endif // CONFIG_STA_SUPPORT //
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_BSSID_Proc Success\n"));
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Tx Channel
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_CHANNEL_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UCHAR channel;
-
- channel = simple_strtol(arg, 0, 10);
-
- if ((channel < 1) || (channel > 216))// to allow A band channel : ((channel < 1) || (channel > 14))
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_CHANNEL_Proc::Out of range, it should be in range of 1~14.\n"));
- return FALSE;
- }
- pAd->ate.Channel = channel;
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_CHANNEL_Proc (ATE Channel = %d)\n", pAd->ate.Channel));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_CHANNEL_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Tx Power0
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_POWER0_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- CHAR TxPower;
-
- TxPower = simple_strtol(arg, 0, 10);
-
- if (pAd->ate.Channel <= 14)
- {
- if ((TxPower > 31) || (TxPower < 0))
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER0_Proc::Out of range (Value=%d)\n", TxPower));
- return FALSE;
- }
- }
- else// 5.5GHz
- {
- if ((TxPower > 15) || (TxPower < -7))
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER0_Proc::Out of range (Value=%d)\n", TxPower));
- return FALSE;
- }
- }
-
- pAd->ate.TxPower0 = TxPower;
- ATETxPwrHandler(pAd, 0);
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_POWER0_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Tx Power1
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_POWER1_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- CHAR TxPower;
-
- TxPower = simple_strtol(arg, 0, 10);
-
- if (pAd->ate.Channel <= 14)
- {
- if ((TxPower > 31) || (TxPower < 0))
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER1_Proc::Out of range (Value=%d)\n", TxPower));
- return FALSE;
- }
- }
- else
- {
- if ((TxPower > 15) || (TxPower < -7))
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_POWER1_Proc::Out of range (Value=%d)\n", TxPower));
- return FALSE;
- }
- }
-
- pAd->ate.TxPower1 = TxPower;
- ATETxPwrHandler(pAd, 1);
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_POWER1_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Tx Antenna
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_Antenna_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- CHAR value;
-
- value = simple_strtol(arg, 0, 10);
-
- if ((value > 2) || (value < 0))
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_Antenna_Proc::Out of range (Value=%d)\n", value));
- return FALSE;
- }
-
- pAd->ate.TxAntennaSel = value;
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_Antenna_Proc (Antenna = %d)\n", pAd->ate.TxAntennaSel));
- ATEDBGPRINT(RT_DEBUG_TRACE,("Ralink: Set_ATE_TX_Antenna_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Rx Antenna
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_RX_Antenna_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- CHAR value;
-
- value = simple_strtol(arg, 0, 10);
-
- if ((value > 3) || (value < 0))
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_RX_Antenna_Proc::Out of range (Value=%d)\n", value));
- return FALSE;
- }
-
- pAd->ate.RxAntennaSel = value;
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_RX_Antenna_Proc (Antenna = %d)\n", pAd->ate.RxAntennaSel));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_RX_Antenna_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE RF frequence offset
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_FREQOFFSET_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UCHAR RFFreqOffset;
- ULONG R4;
-
- RFFreqOffset = simple_strtol(arg, 0, 10);
-
- if(RFFreqOffset >= 64)
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_FREQOFFSET_Proc::Out of range, it should be in range of 0~63.\n"));
- return FALSE;
- }
-
- pAd->ate.RFFreqOffset = RFFreqOffset;
- R4 = pAd->ate.RFFreqOffset << 15; // shift TX power control to correct RF register bit position
- R4 |= (pAd->LatchRfRegs.R4 & ((~0x001f8000)));
- pAd->LatchRfRegs.R4 = R4;
-
- RtmpRfIoWrite(pAd);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_FREQOFFSET_Proc (RFFreqOffset = %d)\n", pAd->ate.RFFreqOffset));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_FREQOFFSET_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE RF BW
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_BW_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- int i;
- UCHAR value = 0;
- UCHAR BBPCurrentBW;
-
- BBPCurrentBW = simple_strtol(arg, 0, 10);
-
- if(BBPCurrentBW == 0)
- pAd->ate.TxWI.BW = BW_20;
- else
- pAd->ate.TxWI.BW = BW_40;
-
- if(pAd->ate.TxWI.BW == BW_20)
- {
- if(pAd->ate.Channel <= 14)
- {
- for (i=0; i<5; i++)
- {
- if (pAd->Tx20MPwrCfgGBand[i] != 0xffffffff)
- {
- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx20MPwrCfgGBand[i]);
- RTMPusecDelay(5000);
- }
- }
- }
- else
- {
- for (i=0; i<5; i++)
- {
- if (pAd->Tx20MPwrCfgABand[i] != 0xffffffff)
- {
- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx20MPwrCfgABand[i]);
- RTMPusecDelay(5000);
- }
- }
- }
-
- //Set BBP R4 bit[4:3]=0:0
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value);
- value &= (~0x18);
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value);
-
- //Set BBP R66=0x3C
- value = 0x3C;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, value);
- //Set BBP R68=0x0B
- //to improve Rx sensitivity.
- value = 0x0B;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R68, value);
- //Set BBP R69=0x16
- value = 0x16;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, value);
- //Set BBP R70=0x08
- value = 0x08;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, value);
- //Set BBP R73=0x11
- value = 0x11;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, value);
-
- // If Channel=14, Bandwidth=20M and Mode=CCK, Set BBP R4 bit5=1
- // (Japan filter coefficients)
- // This segment of code will only works when ATETXMODE and ATECHANNEL
- // were set to MODE_CCK and 14 respectively before ATETXBW is set to 0.
- //=====================================================================
- if (pAd->ate.Channel == 14)
- {
- int TxMode = pAd->ate.TxWI.PHYMODE;
- if (TxMode == MODE_CCK)
- {
- // when Channel==14 && Mode==CCK && BandWidth==20M, BBP R4 bit5=1
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value);
- value |= 0x20; //set bit5=1
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value);
- }
- }
-
- //=====================================================================
- // If bandwidth != 40M, RF Reg4 bit 21 = 0.
- pAd->LatchRfRegs.R4 &= ~0x00200000;
- RtmpRfIoWrite(pAd);
- }
- else if(pAd->ate.TxWI.BW == BW_40)
- {
- if(pAd->ate.Channel <= 14)
- {
- for (i=0; i<5; i++)
- {
- if (pAd->Tx40MPwrCfgGBand[i] != 0xffffffff)
- {
- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx40MPwrCfgGBand[i]);
- RTMPusecDelay(5000);
- }
- }
- }
- else
- {
- for (i=0; i<5; i++)
- {
- if (pAd->Tx40MPwrCfgABand[i] != 0xffffffff)
- {
- RTMP_IO_WRITE32(pAd, TX_PWR_CFG_0 + i*4, pAd->Tx40MPwrCfgABand[i]);
- 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
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &value);
- value &= (~0x18);
- value |= 0x10;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, value);
-
- //Set BBP R66=0x3C
- value = 0x3C;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, value);
- //Set BBP R68=0x0C
- //to improve Rx sensitivity.
- value = 0x0C;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R68, value);
- //Set BBP R69=0x1A
- value = 0x1A;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, value);
- //Set BBP R70=0x0A
- value = 0x0A;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, value);
- //Set BBP R73=0x16
- value = 0x16;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R73, value);
-
- // If bandwidth = 40M, set RF Reg4 bit 21 = 1.
- pAd->LatchRfRegs.R4 |= 0x00200000;
- RtmpRfIoWrite(pAd);
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_BW_Proc (BBPCurrentBW = %d)\n", pAd->ate.TxWI.BW));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_BW_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Tx frame length
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_LENGTH_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- pAd->ate.TxLength = simple_strtol(arg, 0, 10);
-
- if((pAd->ate.TxLength < 24) || (pAd->ate.TxLength > (MAX_FRAME_SIZE - 34/* == 2312 */)))
- {
- pAd->ate.TxLength = (MAX_FRAME_SIZE - 34/* == 2312 */);
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_LENGTH_Proc::Out of range, it should be in range of 24~%d.\n", (MAX_FRAME_SIZE - 34/* == 2312 */)));
- return FALSE;
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_LENGTH_Proc (TxLength = %d)\n", pAd->ate.TxLength));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_LENGTH_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Tx frame count
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_COUNT_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- pAd->ate.TxCount = simple_strtol(arg, 0, 10);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_COUNT_Proc (TxCount = %d)\n", pAd->ate.TxCount));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_COUNT_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Tx frame MCS
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_MCS_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UCHAR MCS;
- int result;
-
- MCS = simple_strtol(arg, 0, 10);
- result = CheckMCSValid(pAd->ate.TxWI.PHYMODE, MCS);
-
- if (result != -1)
- {
- pAd->ate.TxWI.MCS = (UCHAR)MCS;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MCS_Proc::Out of range, refer to rate table.\n"));
- return FALSE;
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MCS_Proc (MCS = %d)\n", pAd->ate.TxWI.MCS));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_MCS_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Tx frame Mode
- 0: MODE_CCK
- 1: MODE_OFDM
- 2: MODE_HTMIX
- 3: MODE_HTGREENFIELD
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_MODE_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- pAd->ate.TxWI.PHYMODE = simple_strtol(arg, 0, 10);
-
- if(pAd->ate.TxWI.PHYMODE > 3)
- {
- pAd->ate.TxWI.PHYMODE = 0;
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_MODE_Proc::Out of range. it should be in range of 0~3\n"));
- ATEDBGPRINT(RT_DEBUG_ERROR, ("0: CCK, 1: OFDM, 2: HT_MIX, 3: HT_GREEN_FIELD.\n"));
- return FALSE;
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_MODE_Proc (TxMode = %d)\n", pAd->ate.TxWI.PHYMODE));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_MODE_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Set ATE Tx frame GI
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-INT Set_ATE_TX_GI_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- pAd->ate.TxWI.ShortGI = simple_strtol(arg, 0, 10);
-
- if(pAd->ate.TxWI.ShortGI > 1)
- {
- pAd->ate.TxWI.ShortGI = 0;
- ATEDBGPRINT(RT_DEBUG_ERROR, ("Set_ATE_TX_GI_Proc::Out of range\n"));
- return FALSE;
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_GI_Proc (GI = %d)\n", pAd->ate.TxWI.ShortGI));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_GI_Proc Success\n"));
-
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- ==========================================================================
- */
-INT Set_ATE_RX_FER_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- pAd->ate.bRxFer = simple_strtol(arg, 0, 10);
-
- if (pAd->ate.bRxFer == 1)
- {
- pAd->ate.RxCntPerSec = 0;
- pAd->ate.RxTotalCnt = 0;
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_RX_FER_Proc (bRxFer = %d)\n", pAd->ate.bRxFer));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_RX_FER_Proc Success\n"));
-
-
- return TRUE;
-}
-
-INT Set_ATE_Read_RF_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- ate_print(KERN_EMERG "R1 = %lx\n", pAd->LatchRfRegs.R1);
- ate_print(KERN_EMERG "R2 = %lx\n", pAd->LatchRfRegs.R2);
- ate_print(KERN_EMERG "R3 = %lx\n", pAd->LatchRfRegs.R3);
- ate_print(KERN_EMERG "R4 = %lx\n", pAd->LatchRfRegs.R4);
-
- return TRUE;
-}
-
-INT Set_ATE_Write_RF1_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UINT32 value = simple_strtol(arg, 0, 16);
-
- pAd->LatchRfRegs.R1 = value;
- RtmpRfIoWrite(pAd);
-
- return TRUE;
-}
-
-INT Set_ATE_Write_RF2_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UINT32 value = simple_strtol(arg, 0, 16);
-
- pAd->LatchRfRegs.R2 = value;
- RtmpRfIoWrite(pAd);
-
- return TRUE;
-}
-
-INT Set_ATE_Write_RF3_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UINT32 value = simple_strtol(arg, 0, 16);
-
- pAd->LatchRfRegs.R3 = value;
- RtmpRfIoWrite(pAd);
-
- return TRUE;
-}
-
-INT Set_ATE_Write_RF4_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UINT32 value = simple_strtol(arg, 0, 16);
-
- pAd->LatchRfRegs.R4 = value;
- RtmpRfIoWrite(pAd);
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
- Load and Write EEPROM from a binary file prepared in advance.
-
- Return:
- TRUE if all parameters are OK, FALSE otherwise
- ==========================================================================
-*/
-#ifndef UCOS
-INT Set_ATE_Load_E2P_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- BOOLEAN ret = FALSE;
- PUCHAR src = EEPROM_BIN_FILE_NAME;
- struct file *srcf;
- INT32 retval, orgfsuid, orgfsgid;
- mm_segment_t orgfs;
- USHORT WriteEEPROM[(EEPROM_SIZE/2)];
- UINT32 FileLength = 0;
- UINT32 value = simple_strtol(arg, 0, 10);
-
- ATEDBGPRINT(RT_DEBUG_ERROR, ("===> %s (value=%d)\n\n", __func__, value));
-
- if (value > 0)
- {
- /* zero the e2p buffer */
- NdisZeroMemory((PUCHAR)WriteEEPROM, EEPROM_SIZE);
-
- /* save uid and gid used for filesystem access.
- ** set user and group to 0 (root)
- */
- orgfsuid = current->fsuid;
- orgfsgid = current->fsgid;
- /* as root */
- current->fsuid = current->fsgid = 0;
- orgfs = get_fs();
- set_fs(KERNEL_DS);
-
- do
- {
- /* open the bin file */
- srcf = filp_open(src, O_RDONLY, 0);
-
- if (IS_ERR(srcf))
- {
- ate_print("%s - Error %ld opening %s\n", __func__, -PTR_ERR(srcf), src);
- break;
- }
-
- /* the object must have a read method */
- if ((srcf->f_op == NULL) || (srcf->f_op->read == NULL))
- {
- ate_print("%s - %s does not have a read method\n", __func__, src);
- break;
- }
-
- /* read the firmware from the file *.bin */
- FileLength = srcf->f_op->read(srcf,
- (PUCHAR)WriteEEPROM,
- EEPROM_SIZE,
- &srcf->f_pos);
-
- if (FileLength != EEPROM_SIZE)
- {
- ate_print("%s: error file length (=%d) in e2p.bin\n",
- __func__, FileLength);
- break;
- }
- else
- {
- /* write the content of .bin file to EEPROM */
- rt_ee_write_all(pAd, WriteEEPROM);
- ret = TRUE;
- }
- break;
- } while(TRUE);
-
- /* close firmware file */
- if (IS_ERR(srcf))
- {
- ;
- }
- else
- {
- retval = filp_close(srcf, NULL);
- if (retval)
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("--> Error %d closing %s\n", -retval, src));
-
- }
- }
-
- /* restore */
- set_fs(orgfs);
- current->fsuid = orgfsuid;
- current->fsgid = orgfsgid;
- }
- ATEDBGPRINT(RT_DEBUG_ERROR, ("<=== %s (ret=%d)\n", __func__, ret));
-
- return ret;
-
-}
-#else
-INT Set_ATE_Load_E2P_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- USHORT WriteEEPROM[(EEPROM_SIZE/2)];
- struct iwreq *wrq = (struct iwreq *)arg;
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("===> %s (wrq->u.data.length = %d)\n\n", __func__, wrq->u.data.length));
-
- if (wrq->u.data.length != EEPROM_SIZE)
- {
- ate_print("%s: error length (=%d) from host\n",
- __func__, wrq->u.data.length);
- return FALSE;
- }
- else/* (wrq->u.data.length == EEPROM_SIZE) */
- {
- /* zero the e2p buffer */
- NdisZeroMemory((PUCHAR)WriteEEPROM, EEPROM_SIZE);
-
- /* fill the local buffer */
- NdisMoveMemory((PUCHAR)WriteEEPROM, wrq->u.data.pointer, wrq->u.data.length);
-
- do
- {
- /* write the content of .bin file to EEPROM */
- rt_ee_write_all(pAd, WriteEEPROM);
-
- } while(FALSE);
- }
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("<=== %s\n", __func__));
-
- return TRUE;
-
-}
-#endif // !UCOS //
-
-INT Set_ATE_Read_E2P_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- USHORT buffer[EEPROM_SIZE/2];
- USHORT *p;
- int i;
-
- rt_ee_read_all(pAd, (USHORT *)buffer);
- p = buffer;
- for (i = 0; i < (EEPROM_SIZE/2); i++)
- {
- ate_print("%4.4x ", *p);
- if (((i+1) % 16) == 0)
- ate_print("\n");
- p++;
- }
- return TRUE;
-}
-
-INT Set_ATE_Show_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- ate_print("Mode=%d\n", pAd->ate.Mode);
- ate_print("TxPower0=%d\n", pAd->ate.TxPower0);
- ate_print("TxPower1=%d\n", pAd->ate.TxPower1);
- ate_print("TxAntennaSel=%d\n", pAd->ate.TxAntennaSel);
- ate_print("RxAntennaSel=%d\n", pAd->ate.RxAntennaSel);
- ate_print("BBPCurrentBW=%d\n", pAd->ate.TxWI.BW);
- ate_print("GI=%d\n", pAd->ate.TxWI.ShortGI);
- ate_print("MCS=%d\n", pAd->ate.TxWI.MCS);
- ate_print("TxMode=%d\n", pAd->ate.TxWI.PHYMODE);
- ate_print("Addr1=%02x:%02x:%02x:%02x:%02x:%02x\n",
- pAd->ate.Addr1[0], pAd->ate.Addr1[1], pAd->ate.Addr1[2], pAd->ate.Addr1[3], pAd->ate.Addr1[4], pAd->ate.Addr1[5]);
- ate_print("Addr2=%02x:%02x:%02x:%02x:%02x:%02x\n",
- pAd->ate.Addr2[0], pAd->ate.Addr2[1], pAd->ate.Addr2[2], pAd->ate.Addr2[3], pAd->ate.Addr2[4], pAd->ate.Addr2[5]);
- ate_print("Addr3=%02x:%02x:%02x:%02x:%02x:%02x\n",
- pAd->ate.Addr3[0], pAd->ate.Addr3[1], pAd->ate.Addr3[2], pAd->ate.Addr3[3], pAd->ate.Addr3[4], pAd->ate.Addr3[5]);
- ate_print("Channel=%d\n", pAd->ate.Channel);
- ate_print("TxLength=%d\n", pAd->ate.TxLength);
- ate_print("TxCount=%u\n", pAd->ate.TxCount);
- ate_print("RFFreqOffset=%d\n", pAd->ate.RFFreqOffset);
- ate_print(KERN_EMERG "Set_ATE_Show_Proc Success\n");
- return TRUE;
-}
-
-INT Set_ATE_Help_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- ate_print("ATE=ATESTART, ATESTOP, TXCONT, TXCARR, TXFRAME, RXFRAME\n");
- ate_print("ATEDA\n");
- ate_print("ATESA\n");
- ate_print("ATEBSSID\n");
- ate_print("ATECHANNEL, range:0~14(unless A band !)\n");
- ate_print("ATETXPOW0, set power level of antenna 1.\n");
- ate_print("ATETXPOW1, set power level of antenna 2.\n");
- ate_print("ATETXANT, set TX antenna. 0:all, 1:antenna one, 2:antenna two.\n");
- ate_print("ATERXANT, set RX antenna.0:all, 1:antenna one, 2:antenna two, 3:antenna three.\n");
- ate_print("ATETXFREQOFFSET, set frequency offset, range 0~63\n");
- ate_print("ATETXBW, set BandWidth, 0:20MHz, 1:40MHz.\n");
- ate_print("ATETXLEN, set Frame length, range 24~%d\n", (MAX_FRAME_SIZE - 34/* == 2312 */));
- ate_print("ATETXCNT, set how many frame going to transmit.\n");
- ate_print("ATETXMCS, set MCS, reference to rate table.\n");
- ate_print("ATETXMODE, set Mode 0:CCK, 1:OFDM, 2:HT-Mix, 3:GreenField, reference to rate table.\n");
- ate_print("ATETXGI, set GI interval, 0:Long, 1:Short\n");
- ate_print("ATERXFER, 0:disable Rx Frame error rate. 1:enable Rx Frame error rate.\n");
- ate_print("ATERRF, show all RF registers.\n");
- ate_print("ATEWRF1, set RF1 register.\n");
- ate_print("ATEWRF2, set RF2 register.\n");
- ate_print("ATEWRF3, set RF3 register.\n");
- ate_print("ATEWRF4, set RF4 register.\n");
- ate_print("ATELDE2P, load EEPROM from .bin file.\n");
- ate_print("ATERE2P, display all EEPROM content.\n");
- ate_print("ATESHOW, display all parameters of ATE.\n");
- ate_print("ATEHELP, online help.\n");
-
- return TRUE;
-}
-
-/*
- ==========================================================================
- Description:
-
- AsicSwitchChannel() dedicated for ATE.
-
- ==========================================================================
-*/
-VOID ATEAsicSwitchChannel(
- IN PRTMP_ADAPTER pAd)
-{
- UINT32 R2 = 0, R3 = DEFAULT_RF_TX_POWER, R4 = 0, Value = 0;
- CHAR TxPwer = 0, TxPwer2 = 0;
- UCHAR index, BbpValue = 0, R66 = 0x30;
- RTMP_RF_REGS *RFRegTable;
- UCHAR Channel;
-
-#ifdef RALINK_28xx_QA
- if ((pAd->ate.bQATxStart == TRUE) || (pAd->ate.bQARxStart == TRUE))
- {
- if (pAd->ate.Channel != pAd->LatchRfRegs.Channel)
- {
- pAd->ate.Channel = pAd->LatchRfRegs.Channel;
- }
- return;
- }
- else
-#endif // RALINK_28xx_QA //
- Channel = pAd->ate.Channel;
-
- // Select antenna
- AsicAntennaSelect(pAd, Channel);
-
- // fill Tx power value
- TxPwer = pAd->ate.TxPower0;
- TxPwer2 = pAd->ate.TxPower1;
-
- RFRegTable = RF2850RegTable;
-
- switch (pAd->RfIcType)
- {
- /* But only 2850 and 2750 support 5.5GHz band... */
- case RFIC_2820:
- case RFIC_2850:
- case RFIC_2720:
- case RFIC_2750:
-
- for (index = 0; index < NUM_OF_2850_CHNL; index++)
- {
- if (Channel == RFRegTable[index].Channel)
- {
- R2 = RFRegTable[index].R2;
- if (pAd->Antenna.field.TxPath == 1)
- {
- R2 |= 0x4000; // If TXpath is 1, bit 14 = 1;
- }
-
- if (pAd->Antenna.field.RxPath == 2)
- {
- switch (pAd->ate.RxAntennaSel)
- {
- case 1:
- R2 |= 0x20040;
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue);
- BbpValue &= 0xE4;
- BbpValue |= 0x00;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue);
- break;
- case 2:
- R2 |= 0x10040;
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue);
- BbpValue &= 0xE4;
- BbpValue |= 0x01;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue);
- break;
- default:
- R2 |= 0x40;
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue);
- BbpValue &= 0xE4;
- /* Only enable two Antenna to receive. */
- BbpValue |= 0x08;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue);
- break;
- }
- }
- else if (pAd->Antenna.field.RxPath == 1)
- {
- R2 |= 0x20040; // write 1 to off RxPath
- }
-
- if (pAd->Antenna.field.TxPath == 2)
- {
- if (pAd->ate.TxAntennaSel == 1)
- {
- R2 |= 0x4000; // If TX Antenna select is 1 , bit 14 = 1; Disable Ant 2
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpValue);
- BbpValue &= 0xE7; //11100111B
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpValue);
- }
- else if (pAd->ate.TxAntennaSel == 2)
- {
- R2 |= 0x8000; // If TX Antenna select is 2 , bit 15 = 1; Disable Ant 1
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpValue);
- BbpValue &= 0xE7;
- BbpValue |= 0x08;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpValue);
- }
- else
- {
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R1, &BbpValue);
- BbpValue &= 0xE7;
- BbpValue |= 0x10;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, BbpValue);
- }
- }
- if (pAd->Antenna.field.RxPath == 3)
- {
- switch (pAd->ate.RxAntennaSel)
- {
- case 1:
- R2 |= 0x20040;
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue);
- BbpValue &= 0xE4;
- BbpValue |= 0x00;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue);
- break;
- case 2:
- R2 |= 0x10040;
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue);
- BbpValue &= 0xE4;
- BbpValue |= 0x01;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue);
- break;
- case 3:
- R2 |= 0x30000;
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue);
- BbpValue &= 0xE4;
- BbpValue |= 0x02;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue);
- break;
- default:
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &BbpValue);
- BbpValue &= 0xE4;
- BbpValue |= 0x10;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, BbpValue);
- break;
- }
- }
-
- if (Channel > 14)
- {
- // initialize R3, R4
- R3 = (RFRegTable[index].R3 & 0xffffc1ff);
- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->ate.RFFreqOffset << 15);
-
- // According the Rory's suggestion to solve the middle range issue.
- // 5.5G band power range: 0xF9~0X0F, TX0 Reg3 bit9/TX1 Reg4 bit6="0" means the TX power reduce 7dB
- // R3
- if ((TxPwer >= -7) && (TxPwer < 0))
- {
- TxPwer = (7+TxPwer);
- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer);
- R3 |= (TxPwer << 10);
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATEAsicSwitchChannel: TxPwer=%d \n", TxPwer));
- }
- else
- {
- TxPwer = (TxPwer > 0xF) ? (0xF) : (TxPwer);
- R3 |= (TxPwer << 10) | (1 << 9);
- }
-
- // R4
- if ((TxPwer2 >= -7) && (TxPwer2 < 0))
- {
- TxPwer2 = (7+TxPwer2);
- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2);
- R4 |= (TxPwer2 << 7);
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ATEAsicSwitchChannel: TxPwer2=%d \n", TxPwer2));
- }
- else
- {
- TxPwer2 = (TxPwer2 > 0xF) ? (0xF) : (TxPwer2);
- R4 |= (TxPwer2 << 7) | (1 << 6);
- }
- }
- else
- {
- R3 = (RFRegTable[index].R3 & 0xffffc1ff) | (TxPwer << 9); // set TX power0
- R4 = (RFRegTable[index].R4 & (~0x001f87c0)) | (pAd->ate.RFFreqOffset << 15) | (TxPwer2 <<6);// Set freq offset & TxPwr1
- }
-
- // Based on BBP current mode before changing RF channel.
- if (pAd->ate.TxWI.BW == BW_40)
- {
- R4 |=0x200000;
- }
-
- // Update variables
- pAd->LatchRfRegs.Channel = Channel;
- pAd->LatchRfRegs.R1 = RFRegTable[index].R1;
- pAd->LatchRfRegs.R2 = R2;
- pAd->LatchRfRegs.R3 = R3;
- pAd->LatchRfRegs.R4 = R4;
-
- RtmpRfIoWrite(pAd);
-
- break;
- }
- }
- break;
-
- default:
- break;
- }
-
- // Change BBP setting during switch from a->g, g->a
- if (Channel <= 14)
- {
- ULONG TxPinCfg = 0x00050F0A;// 2007.10.09 by Brian : 0x0005050A ==> 0x00050F0A
-
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd)));
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd)));
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd)));
-
- /* For 1T/2R chip only... */
- if (pAd->NicConfig2.field.ExternalLNAForG)
- {
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x62);
- }
- else
- {
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0x84);
- }
-
- // According the Rory's suggestion to solve the middle range issue.
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R86, &BbpValue);
- ASSERT((BbpValue == 0x00));
- if ((BbpValue != 0x00))
- {
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0x00);
- }
-
- // 5.5GHz band selection PIN, bit1 and bit2 are complement
- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value);
- Value &= (~0x6);
- Value |= (0x04);
- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value);
-
- // Turn off unused PA or LNA when only 1T or 1R.
- if (pAd->Antenna.field.TxPath == 1)
- {
- TxPinCfg &= 0xFFFFFFF3;
- }
- if (pAd->Antenna.field.RxPath == 1)
- {
- TxPinCfg &= 0xFFFFF3FF;
- }
-
- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg);
- }
- else
- {
- ULONG TxPinCfg = 0x00050F05;//2007.10.09 by Brian : 0x00050505 ==> 0x00050F05
-
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R62, (0x37 - GET_LNA_GAIN(pAd)));
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R63, (0x37 - GET_LNA_GAIN(pAd)));
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R64, (0x37 - GET_LNA_GAIN(pAd)));
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R82, 0xF2);
-
- // According the Rory's suggestion to solve the middle range issue.
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R86, &BbpValue);
- ASSERT((BbpValue == 0x00));
- if ((BbpValue != 0x00))
- {
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R86, 0x00);
- }
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R91, &BbpValue);
- ASSERT((BbpValue == 0x04));
-
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R92, &BbpValue);
- ASSERT((BbpValue == 0x00));
-
- // 5.5GHz band selection PIN, bit1 and bit2 are complement
- RTMP_IO_READ32(pAd, TX_BAND_CFG, &Value);
- Value &= (~0x6);
- Value |= (0x02);
- RTMP_IO_WRITE32(pAd, TX_BAND_CFG, Value);
-
- // Turn off unused PA or LNA when only 1T or 1R.
- if (pAd->Antenna.field.TxPath == 1)
- {
- TxPinCfg &= 0xFFFFFFF3;
- }
- if (pAd->Antenna.field.RxPath == 1)
- {
- TxPinCfg &= 0xFFFFF3FF;
- }
-
- RTMP_IO_WRITE32(pAd, TX_PIN_CFG, TxPinCfg);
- }
-
- // R66 should be set according to Channel and use 20MHz when scanning
- if (Channel <= 14)
- {
- // BG band
- R66 = 0x2E + GET_LNA_GAIN(pAd);
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
- }
- else
- {
- // 5.5 GHz band
- if (pAd->ate.TxWI.BW == BW_20)
- {
- R66 = (UCHAR)(0x32 + (GET_LNA_GAIN(pAd)*5)/3);
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
- }
- else
- {
- R66 = (UCHAR)(0x3A + (GET_LNA_GAIN(pAd)*5)/3);
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, R66);
- }
- }
-
- //
- // On 11A, We should delay and wait RF/BBP to be stable
- // and the appropriate time should be 1000 micro seconds
- // 2005/06/05 - On 11G, We also need this delay time. Otherwise it's difficult to pass the WHQL.
- //
- RTMPusecDelay(1000);
-
- if (Channel > 14)
- {
- // When 5.5GHz band the LSB of TxPwr will be used to reduced 7dB or not.
- ATEDBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, %dT) to , R1=0x%08lx, R2=0x%08lx, R3=0x%08lx, R4=0x%08lx\n",
- Channel,
- pAd->RfIcType,
- pAd->Antenna.field.TxPath,
- pAd->LatchRfRegs.R1,
- pAd->LatchRfRegs.R2,
- pAd->LatchRfRegs.R3,
- pAd->LatchRfRegs.R4));
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("SwitchChannel#%d(RF=%d, Pwr0=%u, Pwr1=%u, %dT) to , R1=0x%08lx, R2=0x%08lx, R3=0x%08lx, R4=0x%08lx\n",
- Channel,
- pAd->RfIcType,
- (R3 & 0x00003e00) >> 9,
- (R4 & 0x000007c0) >> 6,
- pAd->Antenna.field.TxPath,
- pAd->LatchRfRegs.R1,
- pAd->LatchRfRegs.R2,
- pAd->LatchRfRegs.R3,
- pAd->LatchRfRegs.R4));
- }
-}
-
-//
-// In fact, no one will call this routine so far !
-//
-/*
- ==========================================================================
- Description:
- Gives CCK TX rate 2 more dB TX power.
- This routine works only in ATE mode.
-
- calculate desired Tx power in RF R3.Tx0~5, should consider -
- 0. if current radio is a noisy environment (pAd->DrsCounters.fNoisyEnvironment)
- 1. TxPowerPercentage
- 2. auto calibration based on TSSI feedback
- 3. extra 2 db for CCK
- 4. -10 db upon very-short distance (AvgRSSI >= -40db) to AP
-
- NOTE: Since this routine requires the value of (pAd->DrsCounters.fNoisyEnvironment),
- it should be called AFTER MlmeDynamicTxRateSwitching()
- ==========================================================================
- */
-VOID ATEAsicAdjustTxPower(
- IN PRTMP_ADAPTER pAd)
-{
- INT i, j;
- CHAR DeltaPwr = 0;
- BOOLEAN bAutoTxAgc = FALSE;
- UCHAR TssiRef, *pTssiMinusBoundary, *pTssiPlusBoundary, TxAgcStep;
- UCHAR BbpR49 = 0, idx;
- PCHAR pTxAgcCompensate;
- ULONG TxPwr[5];
- CHAR Value;
-
- /* no one calls this procedure so far */
- if (pAd->ate.TxWI.BW == BW_40)
- {
- if (pAd->ate.Channel > 14)
- {
- TxPwr[0] = pAd->Tx40MPwrCfgABand[0];
- TxPwr[1] = pAd->Tx40MPwrCfgABand[1];
- TxPwr[2] = pAd->Tx40MPwrCfgABand[2];
- TxPwr[3] = pAd->Tx40MPwrCfgABand[3];
- TxPwr[4] = pAd->Tx40MPwrCfgABand[4];
- }
- else
- {
- TxPwr[0] = pAd->Tx40MPwrCfgGBand[0];
- TxPwr[1] = pAd->Tx40MPwrCfgGBand[1];
- TxPwr[2] = pAd->Tx40MPwrCfgGBand[2];
- TxPwr[3] = pAd->Tx40MPwrCfgGBand[3];
- TxPwr[4] = pAd->Tx40MPwrCfgGBand[4];
- }
- }
- else
- {
- if (pAd->ate.Channel > 14)
- {
- TxPwr[0] = pAd->Tx20MPwrCfgABand[0];
- TxPwr[1] = pAd->Tx20MPwrCfgABand[1];
- TxPwr[2] = pAd->Tx20MPwrCfgABand[2];
- TxPwr[3] = pAd->Tx20MPwrCfgABand[3];
- TxPwr[4] = pAd->Tx20MPwrCfgABand[4];
- }
- else
- {
- TxPwr[0] = pAd->Tx20MPwrCfgGBand[0];
- TxPwr[1] = pAd->Tx20MPwrCfgGBand[1];
- TxPwr[2] = pAd->Tx20MPwrCfgGBand[2];
- TxPwr[3] = pAd->Tx20MPwrCfgGBand[3];
- TxPwr[4] = pAd->Tx20MPwrCfgGBand[4];
- }
- }
-
- // TX power compensation for temperature variation based on TSSI.
- // Do it per 4 seconds.
- if (pAd->Mlme.OneSecPeriodicRound % 4 == 0)
- {
- if (pAd->ate.Channel <= 14)
- {
- /* bg channel */
- bAutoTxAgc = pAd->bAutoTxAgcG;
- TssiRef = pAd->TssiRefG;
- pTssiMinusBoundary = &pAd->TssiMinusBoundaryG[0];
- pTssiPlusBoundary = &pAd->TssiPlusBoundaryG[0];
- TxAgcStep = pAd->TxAgcStepG;
- pTxAgcCompensate = &pAd->TxAgcCompensateG;
- }
- else
- {
- /* a channel */
- bAutoTxAgc = pAd->bAutoTxAgcA;
- TssiRef = pAd->TssiRefA;
- pTssiMinusBoundary = &pAd->TssiMinusBoundaryA[0];
- pTssiPlusBoundary = &pAd->TssiPlusBoundaryA[0];
- TxAgcStep = pAd->TxAgcStepA;
- pTxAgcCompensate = &pAd->TxAgcCompensateA;
- }
-
- if (bAutoTxAgc)
- {
- /* BbpR49 is unsigned char */
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R49, &BbpR49);
-
- /* (p) TssiPlusBoundaryG[0] = 0 = (m) TssiMinusBoundaryG[0] */
- /* compensate: +4 +3 +2 +1 0 -1 -2 -3 -4 * steps */
- /* step value is defined in pAd->TxAgcStepG for tx power value */
-
- /* [4]+1+[4] p4 p3 p2 p1 o1 m1 m2 m3 m4 */
- /* ex: 0x00 0x15 0x25 0x45 0x88 0xA0 0xB5 0xD0 0xF0
- above value are examined in mass factory production */
- /* [4] [3] [2] [1] [0] [1] [2] [3] [4] */
-
- /* plus is 0x10 ~ 0x40, minus is 0x60 ~ 0x90 */
- /* if value is between p1 ~ o1 or o1 ~ s1, no need to adjust tx power */
- /* if value is 0x65, tx power will be -= TxAgcStep*(2-1) */
-
- if (BbpR49 > pTssiMinusBoundary[1])
- {
- // Reading is larger than the reference value.
- // Check for how large we need to decrease the Tx power.
- for (idx = 1; idx < 5; idx++)
- {
- if (BbpR49 <= pTssiMinusBoundary[idx]) // Found the range
- break;
- }
- // The index is the step we should decrease, idx = 0 means there is nothing to compensate
-// if (R3 > (ULONG) (TxAgcStep * (idx-1)))
- *pTxAgcCompensate = -(TxAgcStep * (idx-1));
-// else
-// *pTxAgcCompensate = -((UCHAR)R3);
-
- DeltaPwr += (*pTxAgcCompensate);
- ATEDBGPRINT(RT_DEBUG_TRACE, ("-- Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = -%d\n",
- BbpR49, TssiRef, TxAgcStep, idx-1));
- }
- else if (BbpR49 < pTssiPlusBoundary[1])
- {
- // Reading is smaller than the reference value
- // check for how large we need to increase the Tx power
- for (idx = 1; idx < 5; idx++)
- {
- if (BbpR49 >= pTssiPlusBoundary[idx]) // Found the range
- break;
- }
- // The index is the step we should increase, idx = 0 means there is nothing to compensate
- *pTxAgcCompensate = TxAgcStep * (idx-1);
- DeltaPwr += (*pTxAgcCompensate);
- ATEDBGPRINT(RT_DEBUG_TRACE, ("++ Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n",
- BbpR49, TssiRef, TxAgcStep, idx-1));
- }
- else
- {
- *pTxAgcCompensate = 0;
- ATEDBGPRINT(RT_DEBUG_TRACE, (" Tx Power, BBP R1=%x, TssiRef=%x, TxAgcStep=%x, step = +%d\n",
- BbpR49, TssiRef, TxAgcStep, 0));
- }
- }
- }
- else
- {
- if (pAd->ate.Channel <= 14)
- {
- bAutoTxAgc = pAd->bAutoTxAgcG;
- pTxAgcCompensate = &pAd->TxAgcCompensateG;
- }
- else
- {
- bAutoTxAgc = pAd->bAutoTxAgcA;
- pTxAgcCompensate = &pAd->TxAgcCompensateA;
- }
-
- if (bAutoTxAgc)
- DeltaPwr += (*pTxAgcCompensate);
- }
-
- /* 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
- if (pAd->CommonCfg.TxPowerPercentage == 0xffffffff) // AUTO TX POWER control
- ;
- else if (pAd->CommonCfg.TxPowerPercentage > 90) // 91 ~ 100% & AUTO, treat as 100% in terms of mW
- ;
- else if (pAd->CommonCfg.TxPowerPercentage > 60) // 61 ~ 90%, treat as 75% in terms of mW
- {
- DeltaPwr -= 1;
- }
- else if (pAd->CommonCfg.TxPowerPercentage > 30) // 31 ~ 60%, treat as 50% in terms of mW
- {
- DeltaPwr -= 3;
- }
- else if (pAd->CommonCfg.TxPowerPercentage > 15) // 16 ~ 30%, treat as 25% in terms of mW
- {
- DeltaPwr -= 6;
- }
- else if (pAd->CommonCfg.TxPowerPercentage > 9) // 10 ~ 15%, treat as 12.5% in terms of mW
- {
- DeltaPwr -= 9;
- }
- else // 0 ~ 9 %, treat as MIN(~3%) in terms of mW
- {
- DeltaPwr -= 12;
- }
-
- /* reset different new tx power for different TX rate */
- for(i=0; i<5; i++)
- {
- if (TxPwr[i] != 0xffffffff)
- {
- for (j=0; j<8; j++)
- {
- Value = (CHAR)((TxPwr[i] >> j*4) & 0x0F); /* 0 ~ 15 */
-
- if ((Value + DeltaPwr) < 0)
- {
- Value = 0; /* min */
- }
- else if ((Value + DeltaPwr) > 0xF)
- {
- Value = 0xF; /* max */
- }
- else
- {
- Value += DeltaPwr; /* temperature compensation */
- }
-
- /* fill new value to CSR offset */
- TxPwr[i] = (TxPwr[i] & ~(0x0000000F << j*4)) | (Value << j*4);
- }
-
- /* write tx power value to CSR */
- /* TX_PWR_CFG_0 (8 tx rate) for TX power for OFDM 12M/18M
- TX power for OFDM 6M/9M
- TX power for CCK5.5M/11M
- 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]);
-
-
- }
- }
-
-}
-
-/*
- ========================================================================
- Routine Description:
- Write TxWI for ATE mode.
-
- Return Value:
- None
- ========================================================================
-*/
-static VOID ATEWriteTxWI(
- IN PRTMP_ADAPTER pAd,
- IN PTXWI_STRUC pOutTxWI,
- IN BOOLEAN FRAG,
- IN BOOLEAN CFACK,
- IN BOOLEAN InsTimestamp,
- IN BOOLEAN AMPDU,
- IN BOOLEAN Ack,
- IN BOOLEAN NSeq, // HW new a sequence.
- IN UCHAR BASize,
- IN UCHAR WCID,
- IN ULONG Length,
- IN UCHAR PID,
- IN UCHAR TID,
- IN UCHAR TxRate,
- IN UCHAR Txopmode,
- IN BOOLEAN CfAck,
- IN HTTRANSMIT_SETTING *pTransmit)
-{
- TXWI_STRUC TxWI;
- PTXWI_STRUC pTxWI;
-
- //
- // Always use Long preamble before verifiation short preamble functionality works well.
- // Todo: remove the following line if short preamble functionality works
- //
- OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_SHORT_PREAMBLE_INUSED);
- NdisZeroMemory(&TxWI, TXWI_SIZE);
- pTxWI = &TxWI;
-
- pTxWI->FRAG= FRAG;
-
- pTxWI->CFACK = CFACK;
- pTxWI->TS= InsTimestamp;
- pTxWI->AMPDU = AMPDU;
- pTxWI->ACK = Ack;
- pTxWI->txop= Txopmode;
-
- pTxWI->NSEQ = NSeq;
- // John tune the performace with Intel Client in 20 MHz performance
- if( BASize >7 )
- BASize =7;
-
- pTxWI->BAWinSize = BASize;
- pTxWI->WirelessCliID = WCID;
- pTxWI->MPDUtotalByteCount = Length;
- pTxWI->PacketId = PID;
-
- // If CCK or OFDM, BW must be 20
- pTxWI->BW = (pTransmit->field.MODE <= MODE_OFDM) ? (BW_20) : (pTransmit->field.BW);
- pTxWI->ShortGI = pTransmit->field.ShortGI;
- pTxWI->STBC = pTransmit->field.STBC;
-
- pTxWI->MCS = pTransmit->field.MCS;
- pTxWI->PHYMODE = pTransmit->field.MODE;
- pTxWI->CFACK = CfAck;
- pTxWI->MIMOps = 0;
- pTxWI->MpduDensity = 0;
-
- pTxWI->PacketId = pTxWI->MCS;
- NdisMoveMemory(pOutTxWI, &TxWI, sizeof(TXWI_STRUC));
-
- return;
-}
-
-/*
- ========================================================================
-
- Routine Description:
- Disable protection for ATE.
- ========================================================================
-*/
-VOID ATEDisableAsicProtect(
- IN PRTMP_ADAPTER pAd)
-{
- PROT_CFG_STRUC ProtCfg, ProtCfg4;
- UINT32 Protect[6];
- USHORT offset;
- UCHAR i;
- UINT32 MacReg = 0;
-
- // Config ASIC RTS threshold register
- RTMP_IO_READ32(pAd, TX_RTS_CFG, &MacReg);
- MacReg &= 0xFF0000FF;
- MacReg |= (pAd->CommonCfg.RtsThreshold << 8);
- RTMP_IO_WRITE32(pAd, TX_RTS_CFG, MacReg);
-
- // Initial common protection settings
- RTMPZeroMemory(Protect, sizeof(Protect));
- ProtCfg4.word = 0;
- ProtCfg.word = 0;
- ProtCfg.field.TxopAllowGF40 = 1;
- ProtCfg.field.TxopAllowGF20 = 1;
- ProtCfg.field.TxopAllowMM40 = 1;
- ProtCfg.field.TxopAllowMM20 = 1;
- ProtCfg.field.TxopAllowOfdm = 1;
- ProtCfg.field.TxopAllowCck = 1;
- ProtCfg.field.RTSThEn = 1;
- ProtCfg.field.ProtectNav = ASIC_SHORTNAV;
-
- // Handle legacy(B/G) protection
- ProtCfg.field.ProtectRate = pAd->CommonCfg.RtsRate;
- ProtCfg.field.ProtectCtrl = 0;
- Protect[0] = ProtCfg.word;
- Protect[1] = ProtCfg.word;
-
- // NO PROTECT
- // 1.All STAs in the BSS are 20/40 MHz HT
- // 2. in ai 20/40MHz BSS
- // 3. all STAs are 20MHz in a 20MHz BSS
- // Pure HT. no protection.
-
- // MM20_PROT_CFG
- // Reserved (31:27)
- // PROT_TXOP(25:20) -- 010111
- // PROT_NAV(19:18) -- 01 (Short NAV protection)
- // PROT_CTRL(17:16) -- 00 (None)
- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M)
- Protect[2] = 0x01744004;
-
- // MM40_PROT_CFG
- // Reserved (31:27)
- // PROT_TXOP(25:20) -- 111111
- // PROT_NAV(19:18) -- 01 (Short NAV protection)
- // PROT_CTRL(17:16) -- 00 (None)
- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M)
- Protect[3] = 0x03f44084;
-
- // CF20_PROT_CFG
- // Reserved (31:27)
- // PROT_TXOP(25:20) -- 010111
- // PROT_NAV(19:18) -- 01 (Short NAV protection)
- // PROT_CTRL(17:16) -- 00 (None)
- // PROT_RATE(15:0) -- 0x4004 (OFDM 24M)
- Protect[4] = 0x01744004;
-
- // CF40_PROT_CFG
- // Reserved (31:27)
- // PROT_TXOP(25:20) -- 111111
- // PROT_NAV(19:18) -- 01 (Short NAV protection)
- // PROT_CTRL(17:16) -- 00 (None)
- // PROT_RATE(15:0) -- 0x4084 (duplicate OFDM 24M)
- Protect[5] = 0x03f44084;
-
- pAd->CommonCfg.IOTestParm.bRTSLongProtOn = FALSE;
-
- offset = CCK_PROT_CFG;
- for (i = 0;i < 6;i++)
- RTMP_IO_WRITE32(pAd, offset + i*4, Protect[i]);
-
-}
-
-
-/* There are two ways to convert Rssi */
-#if 1
-//
-// The way used with GET_LNA_GAIN().
-//
-CHAR ATEConvertToRssi(
- IN PRTMP_ADAPTER pAd,
- IN CHAR Rssi,
- IN UCHAR RssiNumber)
-{
- UCHAR RssiOffset, LNAGain;
-
- // Rssi equals to zero should be an invalid value
- if (Rssi == 0)
- return -99;
-
- LNAGain = GET_LNA_GAIN(pAd);
- if (pAd->LatchRfRegs.Channel > 14)
- {
- if (RssiNumber == 0)
- RssiOffset = pAd->ARssiOffset0;
- else if (RssiNumber == 1)
- RssiOffset = pAd->ARssiOffset1;
- else
- RssiOffset = pAd->ARssiOffset2;
- }
- else
- {
- if (RssiNumber == 0)
- RssiOffset = pAd->BGRssiOffset0;
- else if (RssiNumber == 1)
- RssiOffset = pAd->BGRssiOffset1;
- else
- RssiOffset = pAd->BGRssiOffset2;
- }
-
- return (-12 - RssiOffset - LNAGain - Rssi);
-}
-#else
-//
-// The way originally used in ATE of rt2860ap.
-//
-CHAR ATEConvertToRssi(
- IN PRTMP_ADAPTER pAd,
- IN CHAR Rssi,
- IN UCHAR RssiNumber)
-{
- UCHAR RssiOffset, LNAGain;
-
- // Rssi equals to zero should be an invalid value
- if (Rssi == 0)
- return -99;
-
- if (pAd->LatchRfRegs.Channel > 14)
- {
- LNAGain = pAd->ALNAGain;
- if (RssiNumber == 0)
- RssiOffset = pAd->ARssiOffset0;
- else if (RssiNumber == 1)
- RssiOffset = pAd->ARssiOffset1;
- else
- RssiOffset = pAd->ARssiOffset2;
- }
- else
- {
- LNAGain = pAd->BLNAGain;
- if (RssiNumber == 0)
- RssiOffset = pAd->BGRssiOffset0;
- else if (RssiNumber == 1)
- RssiOffset = pAd->BGRssiOffset1;
- else
- RssiOffset = pAd->BGRssiOffset2;
- }
-
- return (-32 - RssiOffset + LNAGain - Rssi);
-}
-#endif /* end of #if 1 */
-
-/*
- ========================================================================
-
- Routine Description:
- Set Japan filter coefficients if needed.
- Note:
- This routine should only be called when
- entering TXFRAME mode or TXCONT mode.
-
- ========================================================================
-*/
-static VOID SetJapanFilter(
- IN PRTMP_ADAPTER pAd)
-{
- UCHAR BbpData = 0;
-
- //
- // If Channel=14 and Bandwidth=20M and Mode=CCK, set BBP R4 bit5=1
- // (Japan Tx filter coefficients)when (TXFRAME or TXCONT).
- //
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BbpData);
-
- if ((pAd->ate.TxWI.PHYMODE == MODE_CCK) && (pAd->ate.Channel == 14) && (pAd->ate.TxWI.BW == BW_20))
- {
- BbpData |= 0x20; // turn on
- ATEDBGPRINT(RT_DEBUG_TRACE, ("SetJapanFilter!!!\n"));
- }
- else
- {
- BbpData &= 0xdf; // turn off
- ATEDBGPRINT(RT_DEBUG_TRACE, ("ClearJapanFilter!!!\n"));
- }
-
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R4, BbpData);
-}
-
-VOID ATESampleRssi(
- IN PRTMP_ADAPTER pAd,
- IN PRXWI_STRUC pRxWI)
-{
- /* There are two ways to collect RSSI. */
-#if 1
- //pAd->LastRxRate = (USHORT)((pRxWI->MCS) + (pRxWI->BW <<7) + (pRxWI->ShortGI <<8)+ (pRxWI->PHYMODE <<14)) ;
- if (pRxWI->RSSI0 != 0)
- {
- pAd->ate.LastRssi0 = ATEConvertToRssi(pAd, (CHAR) pRxWI->RSSI0, RSSI_0);
- pAd->ate.AvgRssi0X8 = (pAd->ate.AvgRssi0X8 - pAd->ate.AvgRssi0) + pAd->ate.LastRssi0;
- pAd->ate.AvgRssi0 = pAd->ate.AvgRssi0X8 >> 3;
- }
- if (pRxWI->RSSI1 != 0)
- {
- pAd->ate.LastRssi1 = ATEConvertToRssi(pAd, (CHAR) pRxWI->RSSI1, RSSI_1);
- pAd->ate.AvgRssi1X8 = (pAd->ate.AvgRssi1X8 - pAd->ate.AvgRssi1) + pAd->ate.LastRssi1;
- pAd->ate.AvgRssi1 = pAd->ate.AvgRssi1X8 >> 3;
- }
- if (pRxWI->RSSI2 != 0)
- {
- pAd->ate.LastRssi2 = ATEConvertToRssi(pAd, (CHAR) pRxWI->RSSI2, RSSI_2);
- pAd->ate.AvgRssi2X8 = (pAd->ate.AvgRssi2X8 - pAd->ate.AvgRssi2) + pAd->ate.LastRssi2;
- pAd->ate.AvgRssi2 = pAd->ate.AvgRssi2X8 >> 3;
- }
-
- pAd->ate.LastSNR0 = (CHAR)(pRxWI->SNR0);// CHAR ==> UCHAR ?
- pAd->ate.LastSNR1 = (CHAR)(pRxWI->SNR1);// CHAR ==> UCHAR ?
-
- pAd->ate.NumOfAvgRssiSample ++;
-#else
- pAd->ate.LastSNR0 = (CHAR)(pRxWI->SNR0);
- pAd->ate.LastSNR1 = (CHAR)(pRxWI->SNR1);
- pAd->ate.RxCntPerSec++;
- pAd->ate.LastRssi0 = ATEConvertToRssi(pAd, (CHAR) pRxWI->RSSI0, RSSI_0);
- pAd->ate.LastRssi1 = ATEConvertToRssi(pAd, (CHAR) pRxWI->RSSI1, RSSI_1);
- pAd->ate.LastRssi2 = ATEConvertToRssi(pAd, (CHAR) pRxWI->RSSI2, RSSI_2);
- pAd->ate.AvgRssi0X8 = (pAd->ate.AvgRssi0X8 - pAd->ate.AvgRssi0) + pAd->ate.LastRssi0;
- pAd->ate.AvgRssi0 = pAd->ate.AvgRssi0X8 >> 3;
- pAd->ate.AvgRssi1X8 = (pAd->ate.AvgRssi1X8 - pAd->ate.AvgRssi1) + pAd->ate.LastRssi1;
- pAd->ate.AvgRssi1 = pAd->ate.AvgRssi1X8 >> 3;
- pAd->ate.AvgRssi2X8 = (pAd->ate.AvgRssi2X8 - pAd->ate.AvgRssi2) + pAd->ate.LastRssi2;
- pAd->ate.AvgRssi2 = pAd->ate.AvgRssi2X8 >> 3;
- pAd->ate.NumOfAvgRssiSample ++;
-#endif
-}
-
-#ifdef CONFIG_STA_SUPPORT
-VOID RTMPStationStop(
- IN PRTMP_ADAPTER pAd)
-{
-// BOOLEAN Cancelled;
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("==> RTMPStationStop\n"));
-
-#if 0
- RTMPCancelTimer(&pAd->MlmeAux.AssocTimer, &Cancelled);
- RTMPCancelTimer(&pAd->MlmeAux.ReassocTimer, &Cancelled);
- RTMPCancelTimer(&pAd->MlmeAux.DisassocTimer, &Cancelled);
- RTMPCancelTimer(&pAd->MlmeAux.AuthTimer, &Cancelled);
- RTMPCancelTimer(&pAd->MlmeAux.BeaconTimer, &Cancelled);
- RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &Cancelled);
-#endif
- // For rx statistics, we need to keep this timer running.
-// RTMPCancelTimer(&pAd->Mlme.PeriodicTimer, &Cancelled);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("<== RTMPStationStop\n"));
-}
-
-VOID RTMPStationStart(
- IN PRTMP_ADAPTER pAd)
-{
- ATEDBGPRINT(RT_DEBUG_TRACE, ("==> RTMPStationStart\n"));
-epAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
- //
- // We did not cancel this timer when entering ATE mode.
- //
-// RTMPSetTimer(&pAd->Mlme.PeriodicTimer, MLME_TASK_EXEC_INTV);
- ATEDBGPRINT(RT_DEBUG_TRACE, ("<== RTMPStationStart\n"));
-}
-#endif // CONFIG_STA_SUPPORT //
-
-/*
- ==========================================================================
- Description:
- Setup Frame format.
- NOTE:
- This routine should only be used in ATE mode.
- ==========================================================================
- */
-static INT ATESetUpFrame(
- IN PRTMP_ADAPTER pAd,
- IN UINT32 TxIdx)
-{
- UINT j;
- PTXD_STRUC pTxD;
-#ifdef RT_BIG_ENDIAN
- PTXD_STRUC pDestTxD;
- TXD_STRUC TxD;
-#endif
- PNDIS_PACKET pPacket;
- PUCHAR pDest;
- PVOID AllocVa;
- NDIS_PHYSICAL_ADDRESS AllocPa;
- HTTRANSMIT_SETTING TxHTPhyMode;
-
- PRTMP_TX_RING pTxRing = &pAd->TxRing[QID_AC_BE];
- PTXWI_STRUC pTxWI = (PTXWI_STRUC) pTxRing->Cell[TxIdx].DmaBuf.AllocVa;
- PUCHAR pDMAHeaderBufVA = (PUCHAR) pTxRing->Cell[TxIdx].DmaBuf.AllocVa;
-
-#ifdef RALINK_28xx_QA
- PHEADER_802_11 pHeader80211;
-#endif // RALINK_28xx_QA //
-
- if (pAd->ate.bQATxStart == TRUE)
- {
- // always use QID_AC_BE and FIFO_EDCA
-
- // fill TxWI
- TxHTPhyMode.field.BW = pAd->ate.TxWI.BW;
- TxHTPhyMode.field.ShortGI = pAd->ate.TxWI.ShortGI;
- TxHTPhyMode.field.STBC = 0;
- TxHTPhyMode.field.MCS = pAd->ate.TxWI.MCS;
- TxHTPhyMode.field.MODE = pAd->ate.TxWI.PHYMODE;
- ATEWriteTxWI(pAd, pTxWI, pAd->ate.TxWI.FRAG, pAd->ate.TxWI.CFACK, pAd->ate.TxWI.TS, pAd->ate.TxWI.AMPDU, pAd->ate.TxWI.ACK, pAd->ate.TxWI.NSEQ,
- pAd->ate.TxWI.BAWinSize, 0, pAd->ate.TxWI.MPDUtotalByteCount, pAd->ate.TxWI.PacketId, 0, 0, pAd->ate.TxWI.txop/*IFS_HTTXOP*/, pAd->ate.TxWI.CFACK/*FALSE*/, &TxHTPhyMode);
- }
- else
- {
- TxHTPhyMode.field.BW = pAd->ate.TxWI.BW;
- TxHTPhyMode.field.ShortGI = pAd->ate.TxWI.ShortGI;
- TxHTPhyMode.field.STBC = 0;
- TxHTPhyMode.field.MCS = pAd->ate.TxWI.MCS;
- TxHTPhyMode.field.MODE = pAd->ate.TxWI.PHYMODE;
- ATEWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
- 4, 0, pAd->ate.TxLength, 0, 0, 0, IFS_HTTXOP, FALSE, &TxHTPhyMode);
- }
-
- // fill 802.11 header.
-#ifdef RALINK_28xx_QA
- if (pAd->ate.bQATxStart == TRUE)
- {
- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE, pAd->ate.Header, pAd->ate.HLen);
- }
- else
-#endif // RALINK_28xx_QA //
- {
- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE, TemplateFrame, LENGTH_802_11);
- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE+4, pAd->ate.Addr1, ETH_LENGTH_OF_ADDRESS);
- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE+10, pAd->ate.Addr2, ETH_LENGTH_OF_ADDRESS);
- NdisMoveMemory(pDMAHeaderBufVA+TXWI_SIZE+16, pAd->ate.Addr3, ETH_LENGTH_OF_ADDRESS);
- }
-
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (((PUCHAR)pDMAHeaderBufVA)+TXWI_SIZE), DIR_READ, FALSE);
-#endif // RT_BIG_ENDIAN //
-
- /* alloc buffer for payload */
-#ifdef RALINK_28xx_QA
- if (pAd->ate.bQATxStart == TRUE)
- {
- /* Why not use RTMP_AllocateTxPacketBuffer() instead of RTMP_AllocateRxPacketBuffer()? */
- pPacket = RTMP_AllocateRxPacketBuffer(pAd, pAd->ate.DLen + 0x100, FALSE, &AllocVa, &AllocPa);
- }
- else
-#endif // RALINK_28xx_QA //
- {
- /* Why not use RTMP_AllocateTxPacketBuffer() instead of RTMP_AllocateRxPacketBuffer()? */
- pPacket = RTMP_AllocateRxPacketBuffer(pAd, pAd->ate.TxLength, FALSE, &AllocVa, &AllocPa);
- }
-
- if (pPacket == NULL)
- {
- pAd->ate.TxCount = 0;
- ATEDBGPRINT(RT_DEBUG_TRACE, ("%s fail to alloc packet space.\n", __func__));
- return -1;
- }
- pTxRing->Cell[TxIdx].pNextNdisPacket = pPacket;
-
- pDest = (PUCHAR) AllocVa;
-
-#ifdef RALINK_28xx_QA
- if (pAd->ate.bQATxStart == TRUE)
- {
- RTPKT_TO_OSPKT(pPacket)->len = pAd->ate.DLen;
- }
- else
-#endif // RALINK_28xx_QA //
- {
- RTPKT_TO_OSPKT(pPacket)->len = pAd->ate.TxLength - LENGTH_802_11;
- }
-
- // Prepare frame payload
-#ifdef RALINK_28xx_QA
- if (pAd->ate.bQATxStart == TRUE)
- {
- // copy pattern
- if ((pAd->ate.PLen != 0))
- {
- int j;
-
- for (j = 0; j < pAd->ate.DLen; j+=pAd->ate.PLen)
- {
- memcpy(RTPKT_TO_OSPKT(pPacket)->data + j, pAd->ate.Pattern, pAd->ate.PLen);
- }
- }
- }
- else
-#endif // RALINK_28xx_QA //
- {
- for(j = 0; j < RTPKT_TO_OSPKT(pPacket)->len; j++)
- pDest[j] = 0xA5;
- }
-
- //
- // build Tx Descriptor
- //
-#ifndef RT_BIG_ENDIAN
- pTxD = (PTXD_STRUC) pTxRing->Cell[TxIdx].AllocVa;
-#else
- pDestTxD = (PTXD_STRUC)pTxRing->Cell[TxIdx].AllocVa;
- TxD = *pDestTxD;
- pTxD = &TxD;
-#endif // !RT_BIG_ENDIAN //
-
-#ifdef RALINK_28xx_QA
- if (pAd->ate.bQATxStart == TRUE)
- {
- // prepare TxD
- NdisZeroMemory(pTxD, TXD_SIZE);
- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA);
- // build TX DESC
- pTxD->SDPtr0 = RTMP_GetPhysicalAddressLow(pTxRing->Cell[TxIdx].DmaBuf.AllocPa);
- pTxD->SDLen0 = TXWI_SIZE + pAd->ate.HLen;
- pTxD->LastSec0 = 0;
- pTxD->SDPtr1 = AllocPa;
- pTxD->SDLen1 = RTPKT_TO_OSPKT(pPacket)->len;
- pTxD->LastSec1 = 1;
-
- pDest = (PUCHAR)pTxWI;
- pDest += TXWI_SIZE;
- pHeader80211 = (PHEADER_802_11)pDest;
-
- // modify sequence number....
- if (pAd->ate.TxDoneCount == 0)
- {
- pAd->ate.seq = pHeader80211->Sequence;
- }
- else
- pHeader80211->Sequence = ++pAd->ate.seq;
- }
- else
-#endif // RALINK_28xx_QA //
- {
- NdisZeroMemory(pTxD, TXD_SIZE);
- RTMPWriteTxDescriptor(pAd, pTxD, FALSE, FIFO_EDCA);
- // build TX DESC
- pTxD->SDPtr0 = RTMP_GetPhysicalAddressLow (pTxRing->Cell[TxIdx].DmaBuf.AllocPa);
- pTxD->SDLen0 = TXWI_SIZE + LENGTH_802_11;
- pTxD->LastSec0 = 0;
- pTxD->SDPtr1 = AllocPa;
- pTxD->SDLen1 = RTPKT_TO_OSPKT(pPacket)->len;
- pTxD->LastSec1 = 1;
- }
-
-#ifdef RT_BIG_ENDIAN
- RTMPWIEndianChange((PUCHAR)pTxWI, TYPE_TXWI);
- RTMPFrameEndianChange(pAd, (((PUCHAR)pDMAHeaderBufVA)+TXWI_SIZE), DIR_WRITE, FALSE);
- RTMPDescriptorEndianChange((PUCHAR)pTxD, TYPE_TXD);
- WriteBackToDescriptor((PUCHAR)pDestTxD, (PUCHAR)pTxD, FALSE, TYPE_TXD);
-#endif // RT_BIG_ENDIAN //
- return 0;
-}
-/* */
-/* */
-/*=======================End of RT2860=======================*/
-
-
-VOID rt_ee_read_all(PRTMP_ADAPTER pAd, USHORT *Data)
-{
- USHORT i;
- USHORT value;
-
- for (i = 0 ; i < EEPROM_SIZE/2 ; )
- {
- /* "value" is expecially for some compilers... */
- RT28xx_EEPROM_READ16(pAd, i*2, value);
- Data[i] = value;
- i++;
- }
-}
-
-VOID rt_ee_write_all(PRTMP_ADAPTER pAd, USHORT *Data)
-{
- USHORT i;
- USHORT value;
-
- for (i = 0 ; i < EEPROM_SIZE/2 ; )
- {
- /* "value" is expecially for some compilers... */
- value = Data[i];
- RT28xx_EEPROM_WRITE16(pAd, i*2, value);
- i ++;
- }
-}
-#ifdef RALINK_28xx_QA
-VOID ATE_QA_Statistics(
- IN PRTMP_ADAPTER pAd,
- IN PRXWI_STRUC pRxWI,
- IN PRT28XX_RXD_STRUC pRxD,
- IN PHEADER_802_11 pHeader)
-{
- // update counter first
- if (pHeader != NULL)
- {
- if (pHeader->FC.Type == BTYPE_DATA)
- {
- if (pRxD->U2M)
- pAd->ate.U2M++;
- else
- pAd->ate.OtherData++;
- }
- else if (pHeader->FC.Type == BTYPE_MGMT)
- {
- if (pHeader->FC.SubType == SUBTYPE_BEACON)
- pAd->ate.Beacon++;
- else
- pAd->ate.OtherCount++;
- }
- else if (pHeader->FC.Type == BTYPE_CNTL)
- {
- pAd->ate.OtherCount++;
- }
- }
- pAd->ate.RSSI0 = pRxWI->RSSI0;
- pAd->ate.RSSI1 = pRxWI->RSSI1;
- pAd->ate.RSSI2 = pRxWI->RSSI2;
- pAd->ate.SNR0 = pRxWI->SNR0;
- pAd->ate.SNR1 = pRxWI->SNR1;
-}
-
-/* command id with Cmd Type == 0x0008(for 28xx)/0x0005(for iNIC) */
-#define RACFG_CMD_RF_WRITE_ALL 0x0000
-#define RACFG_CMD_E2PROM_READ16 0x0001
-#define RACFG_CMD_E2PROM_WRITE16 0x0002
-#define RACFG_CMD_E2PROM_READ_ALL 0x0003
-#define RACFG_CMD_E2PROM_WRITE_ALL 0x0004
-#define RACFG_CMD_IO_READ 0x0005
-#define RACFG_CMD_IO_WRITE 0x0006
-#define RACFG_CMD_IO_READ_BULK 0x0007
-#define RACFG_CMD_BBP_READ8 0x0008
-#define RACFG_CMD_BBP_WRITE8 0x0009
-#define RACFG_CMD_BBP_READ_ALL 0x000a
-#define RACFG_CMD_GET_COUNTER 0x000b
-#define RACFG_CMD_CLEAR_COUNTER 0x000c
-
-#define RACFG_CMD_RSV1 0x000d
-#define RACFG_CMD_RSV2 0x000e
-#define RACFG_CMD_RSV3 0x000f
-
-#define RACFG_CMD_TX_START 0x0010
-#define RACFG_CMD_GET_TX_STATUS 0x0011
-#define RACFG_CMD_TX_STOP 0x0012
-#define RACFG_CMD_RX_START 0x0013
-#define RACFG_CMD_RX_STOP 0x0014
-#define RACFG_CMD_GET_NOISE_LEVEL 0x0015
-
-#define RACFG_CMD_ATE_START 0x0080
-#define RACFG_CMD_ATE_STOP 0x0081
-
-#define RACFG_CMD_ATE_START_TX_CARRIER 0x0100
-#define RACFG_CMD_ATE_START_TX_CONT 0x0101
-#define RACFG_CMD_ATE_START_TX_FRAME 0x0102
-#define RACFG_CMD_ATE_SET_BW 0x0103
-#define RACFG_CMD_ATE_SET_TX_POWER0 0x0104
-#define RACFG_CMD_ATE_SET_TX_POWER1 0x0105
-#define RACFG_CMD_ATE_SET_FREQ_OFFSET 0x0106
-#define RACFG_CMD_ATE_GET_STATISTICS 0x0107
-#define RACFG_CMD_ATE_RESET_COUNTER 0x0108
-#define RACFG_CMD_ATE_SEL_TX_ANTENNA 0x0109
-#define RACFG_CMD_ATE_SEL_RX_ANTENNA 0x010a
-#define RACFG_CMD_ATE_SET_PREAMBLE 0x010b
-#define RACFG_CMD_ATE_SET_CHANNEL 0x010c
-#define RACFG_CMD_ATE_SET_ADDR1 0x010d
-#define RACFG_CMD_ATE_SET_ADDR2 0x010e
-#define RACFG_CMD_ATE_SET_ADDR3 0x010f
-#define RACFG_CMD_ATE_SET_RATE 0x0110
-#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) \
-{ \
- UCHAR *p; \
- _X = 0; \
- p = _p; \
- while (((*p >= 'a') && (*p <= 'f')) || ((*p >= 'A') && (*p <= 'F')) || ((*p >= '0') && (*p <= '9'))) \
- { \
- if ((*p >= 'a') && (*p <= 'f')) \
- _X = _X * 16 + *p - 87; \
- else if ((*p >= 'A') && (*p <= 'F')) \
- _X = _X * 16 + *p - 55; \
- else if ((*p >= '0') && (*p <= '9')) \
- _X = _X * 16 + *p - 48; \
- p++; \
- } \
-}
-
-
-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);
-
-#ifdef UCOS
-int ate_copy_to_user(
- IN PUCHAR payload,
- IN PUCHAR msg,
- IN INT len)
-{
- memmove(payload, msg, len);
- return 0;
-}
-
-#undef copy_to_user
-#define copy_to_user(x,y,z) ate_copy_to_user((PUCHAR)x, (PUCHAR)y, z)
-#endif // UCOS //
-
-#define LEN_OF_ARG 16
-
-VOID RtmpDoAte(
- IN PRTMP_ADAPTER pAdapter,
- IN struct iwreq *wrq)
-{
- unsigned short Command_Id;
- struct ate_racfghdr *pRaCfg;
- INT Status = NDIS_STATUS_SUCCESS;
-
-
-
- if((pRaCfg = kmalloc(sizeof(struct ate_racfghdr), GFP_KERNEL)) == NULL)
- {
- Status = -EINVAL;
- return;
- }
-
- NdisZeroMemory(pRaCfg, sizeof(struct ate_racfghdr));
-
- if (copy_from_user((PUCHAR)pRaCfg, wrq->u.data.pointer, wrq->u.data.length))
- {
- Status = -EFAULT;
- kfree(pRaCfg);
- return;
- }
-
-
- Command_Id = ntohs(pRaCfg->command_id);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("\n%s: Command_Id = 0x%04x !\n", __func__, Command_Id));
-
- switch (Command_Id)
- {
- // We will get this command when QA starts.
- case RACFG_CMD_ATE_START:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_START\n"));
-
- // prepare feedback as soon as we can to avoid QA timeout.
- 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);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("wrq->u.data.length = %d\n", wrq->u.data.length));
-
- if (copy_to_user(wrq->u.data.pointer, pRaCfg, wrq->u.data.length))
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("copy_to_user() fail in case RACFG_CMD_ATE_START\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_START is done !\n"));
- }
- Set_ATE_Proc(pAdapter, "ATESTART");
- }
- break;
-
- // We will get this command either QA is closed or ated is killed by user.
- case RACFG_CMD_ATE_STOP:
- {
-#ifndef UCOS
- INT32 ret;
-#endif // !UCOS //
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_STOP\n"));
-
- // Distinguish this command came from QA(via ated)
- // or ate daemon according to the existence of pid in payload.
- // No need to prepare feedback if this cmd came directly from ate daemon.
- pRaCfg->length = ntohs(pRaCfg->length);
-
- if (pRaCfg->length == sizeof(pAdapter->ate.AtePid))
- {
- // This command came from QA.
- // Get the pid of ATE daemon.
- memcpy((UCHAR *)&pAdapter->ate.AtePid,
- (&pRaCfg->data[0]) - 2/* == &(pRaCfg->status) */,
- sizeof(pAdapter->ate.AtePid));
-
- // prepare feedback as soon as we can to avoid QA timeout.
- 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);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("wrq->u.data.length = %d\n", wrq->u.data.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_STOP\n"));
- Status = -EFAULT;
- }
-
- //
- // kill ATE daemon when leaving ATE mode.
- // We must kill ATE daemon first before setting ATESTOP,
- // or Microsoft will report sth. wrong.
-#ifndef UCOS
- 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));
- }
-#endif // !UCOS //
- }
-
- // AP might have in ATE_STOP mode due to cmd from QA.
- if (ATE_ON(pAdapter))
- {
- // Someone has killed ate daemon while QA GUI is still open.
- Set_ATE_Proc(pAdapter, "ATESTOP");
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_AP_START is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_RF_WRITE_ALL:
- {
- UINT32 R1, R2, R3, R4;
- USHORT channel;
-
- memcpy(&R1, pRaCfg->data-2, 4);
- memcpy(&R2, pRaCfg->data+2, 4);
- memcpy(&R3, pRaCfg->data+6, 4);
- memcpy(&R4, pRaCfg->data+10, 4);
- memcpy(&channel, pRaCfg->data+14, 2);
-
- pAdapter->LatchRfRegs.R1 = ntohl(R1);
- pAdapter->LatchRfRegs.R2 = ntohl(R2);
- pAdapter->LatchRfRegs.R3 = ntohl(R3);
- pAdapter->LatchRfRegs.R4 = ntohl(R4);
- pAdapter->LatchRfRegs.Channel = ntohs(channel);
-
- RTMP_RF_IO_WRITE32(pAdapter, pAdapter->LatchRfRegs.R1);
- RTMP_RF_IO_WRITE32(pAdapter, pAdapter->LatchRfRegs.R2);
- RTMP_RF_IO_WRITE32(pAdapter, pAdapter->LatchRfRegs.R3);
- RTMP_RF_IO_WRITE32(pAdapter, pAdapter->LatchRfRegs.R4);
-
- // 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);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("wrq->u.data.length = %d\n", wrq->u.data.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_RF_WRITE_ALL\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_RF_WRITE_ALL is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_E2PROM_READ16:
- {
- USHORT offset, value, tmp;
-
- offset = ntohs(pRaCfg->status);
- /* "tmp" is expecially for some compilers... */
- RT28xx_EEPROM_READ16(pAdapter, offset, tmp);
- value = tmp;
- value = htons(value);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("EEPROM Read offset = 0x%04x, value = 0x%04x\n", offset, value));
-
- // prepare feedback
- pRaCfg->length = htons(4);
- pRaCfg->status = htons(0);
- memcpy(pRaCfg->data, &value, 2);
-
- 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);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("sizeof(struct ate_racfghdr) = %d\n", sizeof(struct ate_racfghdr)));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("wrq->u.data.length = %d\n", wrq->u.data.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_E2PROM_READ16\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_E2PROM_READ16 is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_E2PROM_WRITE16:
- {
- USHORT offset, value;
-
- offset = ntohs(pRaCfg->status);
- memcpy(&value, pRaCfg->data, 2);
- value = ntohs(value);
- RT28xx_EEPROM_WRITE16(pAdapter, offset, 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_E2PROM_WRITE16\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_E2PROM_WRITE16 is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_E2PROM_READ_ALL:
- {
- USHORT buffer[EEPROM_SIZE/2];
-
- rt_ee_read_all(pAdapter,(USHORT *)buffer);
- memcpy_exs(pAdapter, pRaCfg->data, (UCHAR *)buffer, EEPROM_SIZE);
-
- // prepare feedback
- pRaCfg->length = htons(2+EEPROM_SIZE);
- 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_E2PROM_READ_ALL\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_E2PROM_READ_ALL is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_E2PROM_WRITE_ALL:
- {
- USHORT buffer[EEPROM_SIZE/2];
-
- NdisZeroMemory((UCHAR *)buffer, EEPROM_SIZE);
- memcpy_exs(pAdapter, (UCHAR *)buffer, (UCHAR *)&pRaCfg->status, EEPROM_SIZE);
- 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_E2PROM_WRITE_ALL\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_ERROR, ("RACFG_CMD_E2PROM_WRITE_ALL is done !\n"));
- }
-
- }
- break;
-
- case RACFG_CMD_IO_READ:
- {
- UINT32 offset;
- UINT32 value;
-
- memcpy(&offset, &pRaCfg->status, 4);
- offset = ntohl(offset);
-
- // We do not need the base address.
- // So just extract the offset out.
- offset &= 0x0000FFFF;
- RTMP_IO_READ32(pAdapter, offset, &value);
- value = htonl(value);
-
- // prepare feedback
- pRaCfg->length = htons(6);
- pRaCfg->status = htons(0);
- memcpy(pRaCfg->data, &value, 4);
-
- 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_IO_READ\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_IO_READ is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_IO_WRITE:
- {
- UINT32 offset, value;
-
- memcpy(&offset, pRaCfg->data-2, 4);
- memcpy(&value, pRaCfg->data+2, 4);
-
- offset = ntohl(offset);
-
- // We do not need the base address.
- // So just extract out the offset.
- offset &= 0x0000FFFF;
- value = ntohl(value);
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_IO_WRITE: offset = %x, value = %x\n", offset, value));
- RTMP_IO_WRITE32(pAdapter, offset, 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_IO_WRITE\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_IO_WRITE is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_IO_READ_BULK:
- {
- UINT32 offset;
- USHORT len;
-
- memcpy(&offset, &pRaCfg->status, 4);
- offset = ntohl(offset);
-
- // We do not need the base address.
- // So just extract the offset.
- offset &= 0x0000FFFF;
- memcpy(&len, pRaCfg->data+2, 2);
- len = ntohs(len);
-
- if (len > 371)
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("len is too large, make it smaller\n"));
- pRaCfg->length = htons(2);
- pRaCfg->status = htons(1);
- break;
- }
-
- RTMP_IO_READ_BULK(pAdapter, pRaCfg->data, (UCHAR *)offset, len*4);// unit in four bytes
-
- // prepare feedback
- pRaCfg->length = htons(2+len*4);// unit in four bytes
- 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_IO_READ_BULK\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_IO_READ_BULK is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_BBP_READ8:
- {
- USHORT offset;
- UCHAR value;
-
- value = 0;
- offset = ntohs(pRaCfg->status);
-
- if (ATE_ON(pAdapter))
- {
- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, offset, &value);
- }
- else
- {
- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, offset, &value);
- }
- // prepare feedback
- pRaCfg->length = htons(3);
- pRaCfg->status = htons(0);
- pRaCfg->data[0] = value;
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("BBP value = %x\n", value));
-
- 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_BBP_READ8\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_BBP_READ8 is done !\n"));
- }
- }
- break;
- case RACFG_CMD_BBP_WRITE8:
- {
- USHORT offset;
- UCHAR value;
-
- offset = ntohs(pRaCfg->status);
- memcpy(&value, pRaCfg->data, 1);
-
- if (ATE_ON(pAdapter))
- {
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAdapter, offset, value);
- }
- else
- {
- RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, offset, value);
- }
-
- if ((offset == BBP_R1) || (offset == BBP_R3))
- {
- SyncTxRxConfig(pAdapter, offset, 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_BBP_WRITE8\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_BBP_WRITE8 is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_BBP_READ_ALL:
- {
- USHORT j;
-
- for (j = 0; j < 137; j++)
- {
- pRaCfg->data[j] = 0;
-
- if (ATE_ON(pAdapter))
- {
- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, j, &pRaCfg->data[j]);
- }
- else
- {
- RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, j, &pRaCfg->data[j]);
- }
- }
-
- // prepare feedback
- pRaCfg->length = htons(2+137);
- 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_BBP_READ_ALL\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_BBP_READ_ALL is done !\n"));
- }
- }
-
- 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;
- INT32 buffer[3][10];/* 3 : RxPath ; 10 : no. of per rssi samples */
-
- channel = (ntohs(pRaCfg->status) & 0x00FF);
- CalNoiseLevel(pAdapter, channel, buffer);
- memcpy_exl(pAdapter, (UCHAR *)pRaCfg->data, (UCHAR *)&(buffer[0][0]), (sizeof(INT32)*3*10));
-
- // prepare feedback
- pRaCfg->length = htons(2 + (sizeof(INT32)*3*10));
- 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_GET_NOISE_LEVEL\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_GET_NOISE_LEVEL is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_GET_COUNTER:
- {
- memcpy_exl(pAdapter, &pRaCfg->data[0], (UCHAR *)&pAdapter->ate.U2M, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[4], (UCHAR *)&pAdapter->ate.OtherData, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[8], (UCHAR *)&pAdapter->ate.Beacon, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[12], (UCHAR *)&pAdapter->ate.OtherCount, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[16], (UCHAR *)&pAdapter->ate.TxAc0, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[20], (UCHAR *)&pAdapter->ate.TxAc1, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[24], (UCHAR *)&pAdapter->ate.TxAc2, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[28], (UCHAR *)&pAdapter->ate.TxAc3, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[32], (UCHAR *)&pAdapter->ate.TxHCCA, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[36], (UCHAR *)&pAdapter->ate.TxMgmt, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[40], (UCHAR *)&pAdapter->ate.RSSI0, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[44], (UCHAR *)&pAdapter->ate.RSSI1, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[48], (UCHAR *)&pAdapter->ate.RSSI2, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[52], (UCHAR *)&pAdapter->ate.SNR0, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[56], (UCHAR *)&pAdapter->ate.SNR1, 4);
-
- pRaCfg->length = htons(2+60);
- 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_GET_COUNTER\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_GET_COUNTER is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_CLEAR_COUNTER:
- {
- pAdapter->ate.U2M = 0;
- pAdapter->ate.OtherData = 0;
- pAdapter->ate.Beacon = 0;
- pAdapter->ate.OtherCount = 0;
- pAdapter->ate.TxAc0 = 0;
- pAdapter->ate.TxAc1 = 0;
- pAdapter->ate.TxAc2 = 0;
- pAdapter->ate.TxAc3 = 0;
- pAdapter->ate.TxHCCA = 0;
- pAdapter->ate.TxMgmt = 0;
- pAdapter->ate.TxDoneCount = 0;
-
- 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_CLEAR_COUNTER\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_CLEAR_COUNTER is done !\n"));
- }
- }
-
- break;
-
- case RACFG_CMD_TX_START:
- {
- USHORT *p;
- USHORT err = 1;
- UCHAR Bbp22Value = 0, Bbp24Value = 0;
-
- if ((pAdapter->ate.TxStatus != 0) && (pAdapter->ate.Mode & ATE_TXFRAME))
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("Ate Tx is already running, to run next Tx, you must stop it first\n"));
- err = 2;
- goto TX_START_ERROR;
- }
- else if ((pAdapter->ate.TxStatus != 0) && !(pAdapter->ate.Mode & ATE_TXFRAME))
- {
- int i = 0;
-
- while ((i++ < 10) && (pAdapter->ate.TxStatus != 0))
- {
- RTMPusecDelay(5000);
- }
-
- // force it to stop
- pAdapter->ate.TxStatus = 0;
- pAdapter->ate.TxDoneCount = 0;
- //pAdapter->ate.Repeat = 0;
- pAdapter->ate.bQATxStart = FALSE;
- }
-
- // If pRaCfg->length == 0, this "RACFG_CMD_TX_START" is for Carrier test or Carrier Suppression.
- if (ntohs(pRaCfg->length) != 0)
- {
- // Get frame info
-
- NdisMoveMemory(&pAdapter->ate.TxWI, pRaCfg->data + 2, 16);
-#ifdef RT_BIG_ENDIAN
- RTMPWIEndianChange((PUCHAR)&pAdapter->ate.TxWI, TYPE_TXWI);
-#endif // RT_BIG_ENDIAN //
-
- NdisMoveMemory(&pAdapter->ate.TxCount, pRaCfg->data + 18, 4);
- pAdapter->ate.TxCount = ntohl(pAdapter->ate.TxCount);
-
- p = (USHORT *)(&pRaCfg->data[22]);
- //p = pRaCfg->data + 22;
- // always use QID_AC_BE
- pAdapter->ate.QID = 0;
- p = (USHORT *)(&pRaCfg->data[24]);
- //p = pRaCfg->data + 24;
- pAdapter->ate.HLen = ntohs(*p);
-
- if (pAdapter->ate.HLen > 32)
- {
- ATEDBGPRINT(RT_DEBUG_ERROR,("pAdapter->ate.HLen > 32\n"));
- err = 3;
- goto TX_START_ERROR;
- }
-
- NdisMoveMemory(&pAdapter->ate.Header, pRaCfg->data + 26, pAdapter->ate.HLen);
-
-
- pAdapter->ate.PLen = ntohs(pRaCfg->length) - (pAdapter->ate.HLen + 28);
-
- if (pAdapter->ate.PLen > 32)
- {
- ATEDBGPRINT(RT_DEBUG_ERROR,("pAdapter->ate.PLen > 32\n"));
- err = 4;
- goto TX_START_ERROR;
- }
-
- NdisMoveMemory(&pAdapter->ate.Pattern, pRaCfg->data + 26 + pAdapter->ate.HLen, pAdapter->ate.PLen);
- pAdapter->ate.DLen = pAdapter->ate.TxWI.MPDUtotalByteCount - pAdapter->ate.HLen;
- }
-
- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R22, &Bbp22Value);
-
- switch (Bbp22Value)
- {
- case BBP22_TXFRAME:
- {
- if (pAdapter->ate.TxCount == 0)
- {
- pAdapter->ate.TxCount = 0xFFFFFFFF;
- }
- ATEDBGPRINT(RT_DEBUG_TRACE,("START TXFRAME\n"));
- pAdapter->ate.bQATxStart = TRUE;
- Set_ATE_Proc(pAdapter, "TXFRAME");
- }
- break;
-
- case BBP22_TXCONT_OR_CARRSUPP:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("BBP22_TXCONT_OR_CARRSUPP\n"));
- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, 24, &Bbp24Value);
-
- switch (Bbp24Value)
- {
- case BBP24_TXCONT:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("START TXCONT\n"));
- pAdapter->ate.bQATxStart = TRUE;
- Set_ATE_Proc(pAdapter, "TXCONT");
- }
- break;
-
- case BBP24_CARRSUPP:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("START TXCARRSUPP\n"));
- pAdapter->ate.bQATxStart = TRUE;
- pAdapter->ate.Mode |= ATE_TXCARRSUPP;
- }
- break;
-
- default:
- {
- ATEDBGPRINT(RT_DEBUG_ERROR,("Unknown Start TX subtype !"));
- }
- break;
- }
- }
- break;
-
- case BBP22_TXCARR:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("START TXCARR\n"));
- pAdapter->ate.bQATxStart = TRUE;
- Set_ATE_Proc(pAdapter, "TXCARR");
- }
- break;
-
- default:
- {
- ATEDBGPRINT(RT_DEBUG_ERROR,("Unknown Start TX subtype !"));
- }
- break;
- }
-
- if (pAdapter->ate.bQATxStart == TRUE)
- {
- // 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() was failed in case RACFG_CMD_TX_START\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_TX_START is done !\n"));
- }
- break;
- }
-
-TX_START_ERROR:
- // prepare feedback
- pRaCfg->length = htons(2);
- pRaCfg->status = htons(err);
-
- 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_TX_START\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("feedback of TX_START_ERROR is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_GET_TX_STATUS:
- {
- UINT32 count;
-
- // prepare feedback
- pRaCfg->length = htons(6);
- pRaCfg->status = htons(0);
- count = htonl(pAdapter->ate.TxDoneCount);
- NdisMoveMemory(pRaCfg->data, &count, 4);
- 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_GET_TX_STATUS\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_GET_TX_STATUS is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_TX_STOP:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_TX_STOP\n"));
-
- Set_ATE_Proc(pAdapter, "TXSTOP");
-
- // 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_TRACE, ("copy_to_user() fail in case RACFG_CMD_TX_STOP\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_TX_STOP is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_RX_START:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_RX_START\n"));
-
- pAdapter->ate.bQARxStart = TRUE;
- Set_ATE_Proc(pAdapter, "RXFRAME");
-
- // 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_RX_START\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_RX_START is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_RX_STOP:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_RX_STOP\n"));
-
- Set_ATE_Proc(pAdapter, "RXSTOP");
-
- // 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_RX_STOP\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_RX_STOP is done !\n"));
- }
- }
- break;
-
- /* The following cases are for new ATE GUI(not QA). */
- /*==================================================*/
- case RACFG_CMD_ATE_START_TX_CARRIER:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_START_TX_CARRIER\n"));
-
- Set_ATE_Proc(pAdapter, "TXCARR");
-
- 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);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("wrq->u.data.length = %d\n", wrq->u.data.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_START_TX_CARRIER\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_START_TX_CARRIER is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_START_TX_CONT:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_START_TX_CONT\n"));
-
- Set_ATE_Proc(pAdapter, "TXCONT");
-
- 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);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("wrq->u.data.length = %d\n", wrq->u.data.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_START_TX_CONT\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_START_TX_CONT is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_START_TX_FRAME:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_START_TX_FRAME\n"));
-
- Set_ATE_Proc(pAdapter, "TXFRAME");
-
- 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);
-
- ATEDBGPRINT(RT_DEBUG_TRACE, ("wrq->u.data.length = %d\n", wrq->u.data.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_START_TX_FRAME\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_START_TX_FRAME is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_BW:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_BW\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
-
- Set_ATE_TX_BW_Proc(pAdapter, str);
-
- // 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_SET_BW\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_BW is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_TX_POWER0:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_TX_POWER0\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_TX_POWER0_Proc(pAdapter, str);
-
- // 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_SET_TX_POWER0\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_TX_POWER0 is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_TX_POWER1:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_TX_POWER1\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_TX_POWER1_Proc(pAdapter, str);
-
- // 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_SET_TX_POWER1\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_TX_POWER1 is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_FREQ_OFFSET:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_FREQ_OFFSET\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_TX_FREQOFFSET_Proc(pAdapter, str);
-
- // 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_SET_FREQ_OFFSET\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_FREQ_OFFSET is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_GET_STATISTICS:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_GET_STATISTICS\n"));
-
- memcpy_exl(pAdapter, &pRaCfg->data[0], (UCHAR *)&pAdapter->ate.TxDoneCount, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[4], (UCHAR *)&pAdapter->WlanCounters.RetryCount.u.LowPart, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[8], (UCHAR *)&pAdapter->WlanCounters.FailedCount.u.LowPart, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[12], (UCHAR *)&pAdapter->WlanCounters.RTSSuccessCount.u.LowPart, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[16], (UCHAR *)&pAdapter->WlanCounters.RTSFailureCount.u.LowPart, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[20], (UCHAR *)&pAdapter->WlanCounters.ReceivedFragmentCount.QuadPart, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[24], (UCHAR *)&pAdapter->WlanCounters.FCSErrorCount.u.LowPart, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[28], (UCHAR *)&pAdapter->Counters8023.RxNoBuffer, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[32], (UCHAR *)&pAdapter->WlanCounters.FrameDuplicateCount.u.LowPart, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[36], (UCHAR *)&pAdapter->RalinkCounters.OneSecFalseCCACnt, 4);
-
- if (pAdapter->ate.RxAntennaSel == 0)
- {
- INT32 RSSI0 = 0;
- INT32 RSSI1 = 0;
- INT32 RSSI2 = 0;
-
- RSSI0 = (INT32)(pAdapter->ate.LastRssi0 - pAdapter->BbpRssiToDbmDelta);
- RSSI1 = (INT32)(pAdapter->ate.LastRssi1 - pAdapter->BbpRssiToDbmDelta);
- RSSI2 = (INT32)(pAdapter->ate.LastRssi2 - pAdapter->BbpRssiToDbmDelta);
- memcpy_exl(pAdapter, &pRaCfg->data[40], (UCHAR *)&RSSI0, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[44], (UCHAR *)&RSSI1, 4);
- memcpy_exl(pAdapter, &pRaCfg->data[48], (UCHAR *)&RSSI2, 4);
- pRaCfg->length = htons(2+52);
- }
- else
- {
- INT32 RSSI0 = 0;
-
- RSSI0 = (INT32)(pAdapter->ate.LastRssi0 - pAdapter->BbpRssiToDbmDelta);
- memcpy_exl(pAdapter, &pRaCfg->data[40], (UCHAR *)&RSSI0, 4);
- pRaCfg->length = htons(2+44);
- }
- 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_GET_STATISTICS\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_GET_STATISTICS is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_RESET_COUNTER:
- {
- SHORT value = 1;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_RESET_COUNTER\n"));
-
- sprintf((PCHAR)str, "%d", value);
- Set_ResetStatCounter_Proc(pAdapter, str);
-
- pAdapter->ate.TxDoneCount = 0;
-
- 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_RESET_COUNTER\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_RESET_COUNTER is done !\n"));
- }
- }
-
- break;
-
- case RACFG_CMD_ATE_SEL_TX_ANTENNA:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SEL_TX_ANTENNA\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_TX_Antenna_Proc(pAdapter, str);
-
- // 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_SEL_TX_ANTENNA\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SEL_TX_ANTENNA is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SEL_RX_ANTENNA:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SEL_RX_ANTENNA\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_RX_Antenna_Proc(pAdapter, str);
-
- // 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_SEL_RX_ANTENNA\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SEL_RX_ANTENNA is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_PREAMBLE:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_PREAMBLE\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_TX_MODE_Proc(pAdapter, str);
-
- // 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_SET_PREAMBLE\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_PREAMBLE is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_CHANNEL:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_CHANNEL\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_CHANNEL_Proc(pAdapter, str);
-
- // 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_SET_CHANNEL\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_CHANNEL is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_ADDR1:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_ADDR1\n"));
-
- // Addr is an array of UCHAR,
- // so no need to perform endian swap.
- memcpy(pAdapter->ate.Addr1, (PUCHAR)(pRaCfg->data - 2), MAC_ADDR_LEN);
-
- // 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_SET_ADDR1\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_ADDR1 is done !\n (ADDR1 = %2X:%2X:%2X:%2X:%2X:%2X)\n", pAdapter->ate.Addr1[0],
- pAdapter->ate.Addr1[1], pAdapter->ate.Addr1[2], pAdapter->ate.Addr1[3], pAdapter->ate.Addr1[4], pAdapter->ate.Addr1[5]));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_ADDR2:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_ADDR2\n"));
-
- // Addr is an array of UCHAR,
- // so no need to perform endian swap.
- memcpy(pAdapter->ate.Addr2, (PUCHAR)(pRaCfg->data - 2), MAC_ADDR_LEN);
-
- // 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_SET_ADDR2\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_ADDR2 is done !\n (ADDR2 = %2X:%2X:%2X:%2X:%2X:%2X)\n", pAdapter->ate.Addr2[0],
- pAdapter->ate.Addr2[1], pAdapter->ate.Addr2[2], pAdapter->ate.Addr2[3], pAdapter->ate.Addr2[4], pAdapter->ate.Addr2[5]));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_ADDR3:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_ADDR3\n"));
-
- // Addr is an array of UCHAR,
- // so no need to perform endian swap.
- memcpy(pAdapter->ate.Addr3, (PUCHAR)(pRaCfg->data - 2), MAC_ADDR_LEN);
-
- // 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_SET_ADDR3\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_ADDR3 is done !\n (ADDR3 = %2X:%2X:%2X:%2X:%2X:%2X)\n", pAdapter->ate.Addr3[0],
- pAdapter->ate.Addr3[1], pAdapter->ate.Addr3[2], pAdapter->ate.Addr3[3], pAdapter->ate.Addr3[4], pAdapter->ate.Addr3[5]));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_RATE:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_RATE\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_TX_MCS_Proc(pAdapter, str);
-
- // 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_SET_RATE\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_RATE is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_TX_FRAME_LEN:
- {
- SHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_TX_FRAME_LEN\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_TX_LENGTH_Proc(pAdapter, str);
-
- // 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_SET_TX_FRAME_LEN\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_TX_FRAME_LEN is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_SET_TX_FRAME_COUNT:
- {
- USHORT value = 0;
- UCHAR str[LEN_OF_ARG];
-
- NdisZeroMemory(str, LEN_OF_ARG);
-
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_ATE_SET_TX_FRAME_COUNT\n"));
-
- memcpy((PUCHAR)&value, (PUCHAR)&(pRaCfg->status), 2);
- value = ntohs(value);
- /* TX_FRAME_COUNT == 0 means tx infinitely */
- if (value == 0)
- {
- /* Use TxCount = 0xFFFFFFFF to approximate the infinity. */
- pAdapter->ate.TxCount = 0xFFFFFFFF;
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Set_ATE_TX_COUNT_Proc (TxCount = %d)\n", pAdapter->ate.TxCount));
- ATEDBGPRINT(RT_DEBUG_TRACE, ("Ralink: Set_ATE_TX_COUNT_Proc Success\n"));
-
-
- }
- else
- {
- sprintf((PCHAR)str, "%d", value);
- Set_ATE_TX_COUNT_Proc(pAdapter, str);
- }
-
- // 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_SET_TX_FRAME_COUNT\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_ATE_SET_TX_FRAME_COUNT is done !\n"));
- }
- }
- break;
-
- case RACFG_CMD_ATE_START_RX_FRAME:
- {
- ATEDBGPRINT(RT_DEBUG_TRACE,("RACFG_CMD_RX_START\n"));
-
- Set_ATE_Proc(pAdapter, "RXFRAME");
-
- // 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_RX_START\n"));
- Status = -EFAULT;
- }
- else
- {
- ATEDBGPRINT(RT_DEBUG_TRACE, ("RACFG_CMD_RX_START is done !\n"));
- }
- }
- break;
- default:
- break;
- }
- ASSERT(pRaCfg != NULL);
- if (pRaCfg != NULL)
- {
- kfree(pRaCfg);
- }
- return;
-}
-
-VOID BubbleSort(INT32 n, INT32 a[])
-{
- INT32 k, j, temp;
-
- for (k = n-1; k>0; k--)
- {
- for (j = 0; j<k; j++)
- {
- if(a[j] > a[j+1])
- {
- temp = a[j];
- a[j]=a[j+1];
- a[j+1]=temp;
- }
- }
- }
-}
-
-VOID CalNoiseLevel(PRTMP_ADAPTER pAd, UCHAR channel, INT32 RSSI[3][10])
-{
- INT32 RSSI0, RSSI1, RSSI2;
- CHAR Rssi0Offset, Rssi1Offset, Rssi2Offset;
- UCHAR BbpR50Rssi0 = 0, BbpR51Rssi1 = 0, BbpR52Rssi2 = 0;
- UCHAR Org_BBP66value = 0, Org_BBP69value = 0, Org_BBP70value = 0, data = 0;
- USHORT LNA_Gain = 0;
- INT32 j = 0;
- UCHAR Org_Channel = pAd->ate.Channel;
- USHORT GainValue = 0, OffsetValue = 0;
-
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R66, &Org_BBP66value);
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R69, &Org_BBP69value);
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R70, &Org_BBP70value);
-
- //**********************************************************************
- // Read the value of LNA gain and Rssi offset
- //**********************************************************************
- RT28xx_EEPROM_READ16(pAd, EEPROM_LNA_OFFSET, GainValue);
-
- // for Noise Level
- if (channel <= 14)
- {
- LNA_Gain = GainValue & 0x00FF;
-
- RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_BG_OFFSET, OffsetValue);
- Rssi0Offset = OffsetValue & 0x00FF;
- Rssi1Offset = (OffsetValue & 0xFF00) >> 8;
- RT28xx_EEPROM_READ16(pAd, (EEPROM_RSSI_BG_OFFSET + 2)/* 0x48 */, OffsetValue);
- Rssi2Offset = OffsetValue & 0x00FF;
- }
- else
- {
- LNA_Gain = (GainValue & 0xFF00) >> 8;
-
- RT28xx_EEPROM_READ16(pAd, EEPROM_RSSI_A_OFFSET, OffsetValue);
- Rssi0Offset = OffsetValue & 0x00FF;
- Rssi1Offset = (OffsetValue & 0xFF00) >> 8;
- RT28xx_EEPROM_READ16(pAd, (EEPROM_RSSI_A_OFFSET + 2)/* 0x4C */, OffsetValue);
- Rssi2Offset = OffsetValue & 0x00FF;
- }
- //**********************************************************************
- {
- pAd->ate.Channel = channel;
- ATEAsicSwitchChannel(pAd);
- mdelay(5);
-
- data = 0x10;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, data);
- data = 0x40;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, data);
- data = 0x40;
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, data);
- mdelay(5);
-
- // Start Rx
- pAd->ate.bQARxStart = TRUE;
- Set_ATE_Proc(pAd, "RXFRAME");
-
- mdelay(5);
-
- for (j = 0; j < 10; j++)
- {
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R50, &BbpR50Rssi0);
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R51, &BbpR51Rssi1);
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R52, &BbpR52Rssi2);
-
- mdelay(10);
-
- // Calculate RSSI 0
- if (BbpR50Rssi0 == 0)
- {
- RSSI0 = -100;
- }
- else
- {
- RSSI0 = (INT32)(-12 - BbpR50Rssi0 - LNA_Gain - Rssi0Offset);
- }
- RSSI[0][j] = RSSI0;
-
- if ( pAd->Antenna.field.RxPath >= 2 ) // 2R
- {
- // Calculate RSSI 1
- if (BbpR51Rssi1 == 0)
- {
- RSSI1 = -100;
- }
- else
- {
- RSSI1 = (INT32)(-12 - BbpR51Rssi1 - LNA_Gain - Rssi1Offset);
- }
- RSSI[1][j] = RSSI1;
- }
-
- if ( pAd->Antenna.field.RxPath >= 3 ) // 3R
- {
- // Calculate RSSI 2
- if (BbpR52Rssi2 == 0)
- RSSI2 = -100;
- else
- RSSI2 = (INT32)(-12 - BbpR52Rssi2 - LNA_Gain - Rssi2Offset);
-
- RSSI[2][j] = RSSI2;
- }
- }
-
- // Stop Rx
- Set_ATE_Proc(pAd, "RXSTOP");
-
- mdelay(5);
-
-#if 0// Debug Message................
- ate_print("\n**********************************************************\n");
- ate_print("Noise Level: Channel %d\n", channel);
- ate_print("RSSI0 = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n",
- RSSI[0][0], RSSI[0][1], RSSI[0][2],
- RSSI[0][3], RSSI[0][4], RSSI[0][5],
- RSSI[0][6], RSSI[0][7], RSSI[0][8],
- RSSI[0][9]);
- if ( pAd->Antenna.field.RxPath >= 2 ) // 2R
- {
- ate_print("RSSI1 = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n",
- RSSI[1][0], RSSI[1][1], RSSI[1][2],
- RSSI[1][3], RSSI[1][4], RSSI[1][5],
- RSSI[1][6], RSSI[1][7], RSSI[1][8],
- RSSI[1][9]);
- }
- if ( pAd->Antenna.field.RxPath >= 3 ) // 3R
- {
- ate_print("RSSI2 = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n",
- RSSI[2][0], RSSI[2][1], RSSI[2][2],
- RSSI[2][3], RSSI[2][4], RSSI[2][5],
- RSSI[2][6], RSSI[2][7], RSSI[2][8],
- RSSI[2][9]);
- }
-#endif // 0 //
- BubbleSort(10, RSSI[0]); // 1R
-
- if ( pAd->Antenna.field.RxPath >= 2 ) // 2R
- {
- BubbleSort(10, RSSI[1]);
- }
-
- if ( pAd->Antenna.field.RxPath >= 3 ) // 3R
- {
- BubbleSort(10, RSSI[2]);
- }
-
-#if 0// Debug Message................
- ate_print("\nAfter Sorting....Channel %d\n", channel);
- ate_print("RSSI0 = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n",
- RSSI[0][0], RSSI[0][1], RSSI[0][2],
- RSSI[0][3], RSSI[0][4], RSSI[0][5],
- RSSI[0][6], RSSI[0][7], RSSI[0][8],
- RSSI[0][9]);
- if ( pAd->Antenna.field.RxPath >= 2 ) // 2R
- {
- ate_print("RSSI1 = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n",
- RSSI[1][0], RSSI[1][1], RSSI[1][2],
- RSSI[1][3], RSSI[1][4], RSSI[1][5],
- RSSI[1][6], RSSI[1][7], RSSI[1][8],
- RSSI[1][9]);
- }
- if ( pAd->Antenna.field.RxPath >= 3 ) // 3R
- {
- ate_print("RSSI2 = %d, %d, %d, %d, %d, %d, %d, %d, %d, %d\n",
- RSSI[2][0], RSSI[2][1], RSSI[2][2],
- RSSI[2][3], RSSI[2][4], RSSI[2][5],
- RSSI[2][6], RSSI[2][7], RSSI[2][8],
- RSSI[2][9]);
- }
- ate_print("**********************************************************\n");
-#endif // 0 //
- }
-
- pAd->ate.Channel = Org_Channel;
- ATEAsicSwitchChannel(pAd);
-
- // Restore original value
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R66, Org_BBP66value);
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R69, Org_BBP69value);
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R70, Org_BBP70value);
-
- return;
-}
-
-BOOLEAN SyncTxRxConfig(PRTMP_ADAPTER pAd, USHORT offset, UCHAR value)
-{
- UCHAR tmp = 0, bbp_data = 0;
-
- if (ATE_ON(pAd))
- {
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, offset, &bbp_data);
- }
- else
- {
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, offset, &bbp_data);
- }
-
- /* confirm again */
- ASSERT(bbp_data == value);
-
- switch(offset)
- {
- case BBP_R1:
- /* Need to sync. tx configuration with legacy ATE. */
- tmp = (bbp_data & ((1 << 4) | (1 << 3))/* 0x18 */) >> 3;
- switch(tmp)
- {
- /* The BBP R1 bit[4:3] = 2 :: Both DACs will be used by QA. */
- case 2:
- /* All */
- pAd->ate.TxAntennaSel = 0;
- break;
- /* The BBP R1 bit[4:3] = 0 :: DAC 0 will be used by QA. */
- case 0:
- /* Antenna one */
- pAd->ate.TxAntennaSel = 1;
- break;
- /* The BBP R1 bit[4:3] = 1 :: DAC 1 will be used by QA. */
- case 1:
- /* Antenna two */
- pAd->ate.TxAntennaSel = 2;
- break;
- default:
- DBGPRINT(RT_DEBUG_TRACE, ("%s -- Sth. wrong! : return FALSE; \n", __func__));
- return FALSE;
- }
- break;/* case BBP_R1 */
-
- case BBP_R3:
- /* Need to sync. rx configuration with legacy ATE. */
- tmp = (bbp_data & ((1 << 1) | (1 << 0))/* 0x03 */);
- switch(tmp)
- {
- /* The BBP R3 bit[1:0] = 3 :: All ADCs will be used by QA. */
- case 3:
- /* All */
- pAd->ate.RxAntennaSel = 0;
- break;
- /* The BBP R3 bit[1:0] = 0 :: ADC 0 will be used by QA, */
- /* unless the BBP R3 bit[4:3] = 2 */
- case 0:
- /* Antenna one */
- pAd->ate.RxAntennaSel = 1;
- tmp = ((bbp_data & ((1 << 4) | (1 << 3))/* 0x03 */) >> 3);
- if (tmp == 2)// 3R
- {
- /* Default : All ADCs will be used by QA */
- pAd->ate.RxAntennaSel = 0;
- }
- break;
- /* The BBP R3 bit[1:0] = 1 :: ADC 1 will be used by QA. */
- case 1:
- /* Antenna two */
- pAd->ate.RxAntennaSel = 2;
- break;
- /* The BBP R3 bit[1:0] = 2 :: ADC 2 will be used by QA. */
- case 2:
- /* Antenna three */
- pAd->ate.RxAntennaSel = 3;
- break;
- default:
- DBGPRINT(RT_DEBUG_ERROR, ("%s -- Impossible! : return FALSE; \n", __func__));
- return FALSE;
- }
- break;/* case BBP_R3 */
-
- default:
- DBGPRINT(RT_DEBUG_ERROR, ("%s -- Sth. wrong! : return FALSE; \n", __func__));
- return FALSE;
-
- }
- return TRUE;
-}
-
-static VOID memcpy_exl(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, ULONG len)
-{
- ULONG i, Value = 0;
- ULONG *pDst, *pSrc;
- UCHAR *p8;
-
- p8 = src;
- pDst = (ULONG *) dst;
- pSrc = (ULONG *) src;
-
- for (i = 0 ; i < (len/4); i++)
- {
- /* For alignment issue, we need a variable "Value". */
- memmove(&Value, pSrc, 4);
- Value = htonl(Value);
- memmove(pDst, &Value, 4);
- pDst++;
- pSrc++;
- }
- if ((len % 4) != 0)
- {
- /* wish that it will never reach here */
- memmove(&Value, pSrc, (len % 4));
- Value = htonl(Value);
- memmove(pDst, &Value, (len % 4));
- }
-}
-
-static VOID memcpy_exs(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, ULONG len)
-{
- ULONG i;
- UCHAR *pDst, *pSrc;
-
- pDst = dst;
- pSrc = src;
-
- for (i = 0; i < (len/2); i++)
- {
- memmove(pDst, pSrc, 2);
- *((USHORT *)pDst) = htons(*((USHORT *)pDst));
- pDst+=2;
- pSrc+=2;
- }
-
- if ((len % 2) != 0)
- {
- memmove(pDst, pSrc, 1);
- }
-}
-
-static VOID RTMP_IO_READ_BULK(PRTMP_ADAPTER pAd, UCHAR *dst, UCHAR *src, UINT32 len)
-{
- UINT32 i, Value;
- UINT32 *pDst, *pSrc;
-
- pDst = (UINT32 *) dst;
- pSrc = (UINT32 *) src;
-
- for (i = 0 ; i < (len/4); i++)
- {
- RTMP_IO_READ32(pAd, (ULONG)pSrc, &Value);
- Value = htonl(Value);
- memmove(pDst, &Value, 4);
- pDst++;
- pSrc++;
- }
- return;
-}
-
-// TODO:
-#if 0
-/* These work only when RALINK_ATE is defined */
-INT Set_TxStart_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- ULONG value = simple_strtol(arg, 0, 10);
- UCHAR buffer[26] = {0x88, 0x02, 0x2c, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x00, 0x55, 0x44, 0x33, 0x22, 0x11, 0xc0, 0x22, 0x00, 0x00};
- POS_COOKIE pObj;
-
- if (pAd->ate.TxStatus != 0)
- return FALSE;
-
- pAd->ate.TxInfo = 0x04000000;
- bzero(&pAd->ate.TxWI, sizeof(TXWI_STRUC));
- pAd->ate.TxWI.PHYMODE = 0;// MODE_CCK
- pAd->ate.TxWI.MPDUtotalByteCount = 1226;
- pAd->ate.TxWI.MCS = 3;
- //pAd->ate.Mode = ATE_START;
- pAd->ate.Mode |= ATE_TXFRAME;
- pAd->ate.TxCount = value;
- pAd->ate.QID = 0;
- pAd->ate.HLen = 26;
- pAd->ate.PLen = 0;
- pAd->ate.DLen = 1200;
- memcpy(pAd->ate.Header, buffer, 26);
- pAd->ate.bQATxStart = TRUE;
- //pObj = (POS_COOKIE) pAd->OS_Cookie;
- //tasklet_hi_schedule(&pObj->AteTxTask);
- return TRUE;
-}
-#endif /* end of #if 0 */
-
-INT Set_TxStop_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- ATEDBGPRINT(RT_DEBUG_TRACE,("Set_TxStop_Proc\n"));
-
- if (Set_ATE_Proc(pAd, "TXSTOP"))
- {
- return TRUE;
-}
- else
- {
- return FALSE;
- }
-}
-
-INT Set_RxStop_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- ATEDBGPRINT(RT_DEBUG_TRACE,("Set_RxStop_Proc\n"));
-
- if (Set_ATE_Proc(pAd, "RXSTOP"))
- {
- return TRUE;
-}
- else
- {
- return FALSE;
- }
-}
-
-#if 0
-INT Set_EEWrite_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- USHORT offset = 0, value;
- PUCHAR p2 = arg;
-
- while((*p2 != ':') && (*p2 != '\0'))
- {
- p2++;
- }
-
- if (*p2 == ':')
- {
- A2Hex(offset, arg);
- A2Hex(value, p2+ 1);
- }
- else
- {
- A2Hex(value, arg);
- }
-
- if (offset >= EEPROM_SIZE)
- {
- ate_print("Offset can not exceed EEPROM_SIZE( == 0x%04x)\n", EEPROM_SIZE);
- return FALSE;
- }
-
- RTMP_EEPROM_WRITE16(pAd, offset, value);
-
- return TRUE;
-}
-
-INT Set_BBPRead_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UCHAR value = 0, offset;
-
- A2Hex(offset, arg);
-
- if (ATE_ON(pAd))
- {
- ATE_BBP_IO_READ8_BY_REG_ID(pAd, offset, &value);
- }
- else
- {
- RTMP_BBP_IO_READ8_BY_REG_ID(pAd, offset, &value);
- }
-
- ate_print("%x\n", value);
-
- return TRUE;
-}
-
-
-INT Set_BBPWrite_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- USHORT offset = 0;
- PUCHAR p2 = arg;
- UCHAR value;
-
- while((*p2 != ':') && (*p2 != '\0'))
- {
- p2++;
- }
-
- if (*p2 == ':')
- {
- A2Hex(offset, arg);
- A2Hex(value, p2+ 1);
- }
- else
- {
- A2Hex(value, arg);
- }
-
- if (ATE_ON(pAd))
- {
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAd, offset, value);
- }
- else
- {
- RTNP_BBP_IO_WRITE8_BY_REG_ID(pAd, offset, value);
- }
-
- return TRUE;
-}
-
-INT Set_RFWrite_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- PUCHAR p2, p3, p4;
- ULONG R1, R2, R3, R4;
-
- p2 = arg;
-
- while((*p2 != ':') && (*p2 != '\0'))
- {
- p2++;
- }
-
- if (*p2 != ':')
- return FALSE;
-
- p3 = p2 + 1;
-
- while((*p3 != ':') && (*p3 != '\0'))
- {
- p3++;
- }
-
- if (*p3 != ':')
- return FALSE;
-
- p4 = p3 + 1;
-
- while((*p4 != ':') && (*p4 != '\0'))
- {
- p4++;
- }
-
- if (*p4 != ':')
- return FALSE;
-
-
- A2Hex(R1, arg);
- A2Hex(R2, p2 + 1);
- A2Hex(R3, p3 + 1);
- A2Hex(R4, p4 + 1);
-
- RTMP_RF_IO_WRITE32(pAd, R1);
- RTMP_RF_IO_WRITE32(pAd, R2);
- RTMP_RF_IO_WRITE32(pAd, R3);
- RTMP_RF_IO_WRITE32(pAd, R4);
-
- return TRUE;
-}
-#endif // end of #if 0 //
-#endif // RALINK_28xx_QA //
-
-#endif // RALINK_ATE //
-
diff --git a/drivers/staging/rt2860/rt_ate.h b/drivers/staging/rt2860/rt_ate.h
deleted file mode 100644
index 38f5c4af5462..000000000000
--- a/drivers/staging/rt2860/rt_ate.h
+++ /dev/null
@@ -1,347 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
- */
-
-#ifndef __ATE_H__
-#define __ATE_H__
-
-#ifndef UCOS
-#define ate_print printk
-#define ATEDBGPRINT DBGPRINT
-#define EEPROM_SIZE 0x200
-#ifdef CONFIG_STA_SUPPORT
-#define EEPROM_BIN_FILE_NAME "/etc/Wireless/RT2860STA/e2p.bin"
-#endif // CONFIG_STA_SUPPORT //
-
-#else // !UCOS //
-#define fATE_LOAD_EEPROM 0x0C43
-#ifdef CONFIG_PRINTK
-extern INT ConsoleResponse(IN PUCHAR buff);
-extern int (*remote_display)(char *);
-extern void puts (const char *s);
-
-/* specificly defined to redirect and show ate-related messages to host. */
-/* Try to define ate_print as a macro. */
-#define ate_print(fmt, args...) \
-do{ int (*org_remote_display)(char *) = NULL; \
- org_remote_display = remote_display;\
- /* Save original "remote_display" */\
- remote_display = (int (*)(char *))ConsoleResponse; \
- printk(fmt, ## args); \
- /* Restore the remote_display function pointer */ \
- remote_display = org_remote_display; }while(0)
-
-#define ATEDBGPRINT(Level, Fmt) \
-{ \
- if ((Level) <= RTDebugLevel) \
- { \
- ate_print Fmt; \
- } \
-}
-#endif // CONFIG_PRINTK //
-#endif // !UCOS //
-
-#define ATE_ON(_p) (((_p)->ate.Mode) != ATE_STOP)
-
-/* RT2880_iNIC will define "RT2860". */
-#define ATE_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
-{ \
- BBP_CSR_CFG_STRUC BbpCsr; \
- int i, k; \
- for (i=0; i<MAX_BUSY_COUNT; i++) \
- { \
- RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
- if (BbpCsr.field.Busy == BUSY) \
- { \
- continue; \
- } \
- BbpCsr.word = 0; \
- BbpCsr.field.fRead = 1; \
- BbpCsr.field.BBP_RW_MODE = 1; \
- BbpCsr.field.Busy = 1; \
- BbpCsr.field.RegNum = _I; \
- RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
- for (k=0; k<MAX_BUSY_COUNT; k++) \
- { \
- RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
- if (BbpCsr.field.Busy == IDLE) \
- break; \
- } \
- if ((BbpCsr.field.Busy == IDLE) && \
- (BbpCsr.field.RegNum == _I)) \
- { \
- *(_pV) = (UCHAR)BbpCsr.field.Value; \
- break; \
- } \
- } \
- if (BbpCsr.field.Busy == BUSY) \
- { \
- ATEDBGPRINT(RT_DEBUG_ERROR, ("BBP read R%d fail\n", _I)); \
- *(_pV) = (_A)->BbpWriteLatch[_I]; \
- } \
-}
-
-#define ATE_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
-{ \
- BBP_CSR_CFG_STRUC BbpCsr; \
- int BusyCnt; \
- for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
- { \
- RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
- if (BbpCsr.field.Busy == BUSY) \
- continue; \
- BbpCsr.word = 0; \
- BbpCsr.field.fRead = 0; \
- BbpCsr.field.BBP_RW_MODE = 1; \
- BbpCsr.field.Busy = 1; \
- BbpCsr.field.Value = _V; \
- BbpCsr.field.RegNum = _I; \
- RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
- (_A)->BbpWriteLatch[_I] = _V; \
- break; \
- } \
- if (BusyCnt == MAX_BUSY_COUNT) \
- { \
- ATEDBGPRINT(RT_DEBUG_ERROR, ("BBP write R%d fail\n", _I)); \
- } \
-}
-
-/* RT2880_iNIC will define RT2860. */
-#define EEPROM_SIZE 0x200
-/* iNIC has its own EEPROM_BIN_FILE_NAME */
-#ifndef UCOS
-#ifdef CONFIG_STA_SUPPORT
-#define EEPROM_BIN_FILE_NAME "/etc/Wireless/RT2860STA/e2p.bin"
-#endif // CONFIG_STA_SUPPORT //
-#endif // !UCOS //
-
-
-
-VOID rt_ee_read_all(
- IN PRTMP_ADAPTER pAd,
- OUT USHORT *Data);
-
-
-VOID rt_ee_write_all(
- IN PRTMP_ADAPTER pAd,
- IN USHORT *Data);
-
-INT Set_ATE_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_DA_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_SA_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_BSSID_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_CHANNEL_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_POWER0_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_POWER1_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_Antenna_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_RX_Antenna_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_FREQOFFSET_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_BW_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_LENGTH_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_COUNT_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_MCS_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_MODE_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_TX_GI_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-
-INT Set_ATE_RX_FER_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_Read_RF_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_Write_RF1_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_Write_RF2_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_Write_RF3_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_Write_RF4_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_Load_E2P_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_Read_E2P_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_Show_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_ATE_Help_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-#ifdef RALINK_ATE
-#ifdef RALINK_28xx_QA
-VOID ATE_QA_Statistics(
- IN PRTMP_ADAPTER pAd,
- IN PRXWI_STRUC pRxWI,
- IN PRT28XX_RXD_STRUC p28xxRxD,
- IN PHEADER_802_11 pHeader);
-
-VOID RtmpDoAte(
- IN PRTMP_ADAPTER pAdapter,
- IN struct iwreq *wrq);
-
-VOID BubbleSort(
- IN INT32 n,
- IN INT32 a[]);
-
-VOID CalNoiseLevel(
- IN PRTMP_ADAPTER pAdapter,
- IN UCHAR channel,
- OUT INT32 buffer[3][10]);
-
-BOOLEAN SyncTxRxConfig(
- IN PRTMP_ADAPTER pAdapter,
- IN USHORT offset,
- IN UCHAR value);
-
-#if 0
-INT Set_TxStart_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-#endif // 0 //
-
-INT Set_TxStop_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_RxStop_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-#if 0
-INT Set_EERead_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_EEWrite_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_BBPRead_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_BBPWrite_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_RFWrite_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-#endif // end of #if 0 //
-#endif // RALINK_28xx_QA //
-#endif // RALINK_ATE //
-
-VOID ATEAsicSwitchChannel(
- IN PRTMP_ADAPTER pAd);
-
-VOID ATEAsicAdjustTxPower(
- IN PRTMP_ADAPTER pAd);
-
-VOID ATEDisableAsicProtect(
- IN PRTMP_ADAPTER pAd);
-
-CHAR ATEConvertToRssi(
- IN PRTMP_ADAPTER pAd,
- IN CHAR Rssi,
- IN UCHAR RssiNumber);
-
-VOID ATESampleRssi(
- IN PRTMP_ADAPTER pAd,
- IN PRXWI_STRUC pRxWI);
-
-
-#ifdef CONFIG_STA_SUPPORT
-VOID RTMPStationStop(
- IN PRTMP_ADAPTER pAd);
-
-VOID RTMPStationStart(
- IN PRTMP_ADAPTER pAd);
-#endif // CONFIG_STA_SUPPORT //
-#endif // __ATE_H__ //
diff --git a/drivers/staging/rt2860/rt_config.h b/drivers/staging/rt2860/rt_config.h
index a67024fb4373..a19cbe1dedeb 100644
--- a/drivers/staging/rt2860/rt_config.h
+++ b/drivers/staging/rt2860/rt_config.h
@@ -41,20 +41,18 @@
#define __RT_CONFIG_H__
#include "rtmp_type.h"
-#ifdef UCOS
-#include "includes.h"
-#include <stdio.h>
-#include "rt_ucos.h"
-#endif
-
#ifdef LINUX
#include "rt_linux.h"
#endif
#include "rtmp_def.h"
#include "rt28xx.h"
+#ifdef RT2860
#include "rt2860.h"
-
+#endif
+#ifdef RT2870
+#include "../rt2870/rt2870.h"
+#endif // RT2870 //
#include "oid.h"
#include "mlme.h"
@@ -66,31 +64,10 @@
#include "chlist.h"
#include "spectrum.h"
-#ifdef LEAP_SUPPORT
-#include "leap.h"
-#endif // LEAP_SUPPORT //
-
-#ifdef BLOCK_NET_IF
-#include "netif_block.h"
-#endif // BLOCK_NET_IF //
-
#ifdef IGMP_SNOOP_SUPPORT
#include "igmp_snoop.h"
#endif // IGMP_SNOOP_SUPPORT //
-#ifdef RALINK_ATE
-#include "rt_ate.h"
-#endif // RALINK_ATE //
-
-#ifdef CONFIG_STA_SUPPORT
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
-#ifndef WPA_SUPPLICANT_SUPPORT
-#error "Build for being controlled by NetworkManager or wext, please set HAS_WPA_SUPPLICANT=y and HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y"
-#endif // WPA_SUPPLICANT_SUPPORT //
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-
-#endif // CONFIG_STA_SUPPORT //
-
#ifdef IKANOS_VX_1X0
#include "vr_ikans.h"
#endif // IKANOS_VX_1X0 //
diff --git a/drivers/staging/rt2860/rt_linux.c b/drivers/staging/rt2860/rt_linux.c
index f3c128c72a21..80176b20db07 100644
--- a/drivers/staging/rt2860/rt_linux.c
+++ b/drivers/staging/rt2860/rt_linux.c
@@ -33,9 +33,10 @@ BUILD_TIMER_FUNCTION(MlmePeriodicExec);
BUILD_TIMER_FUNCTION(AsicRxAntEvalTimeout);
BUILD_TIMER_FUNCTION(APSDPeriodicExec);
BUILD_TIMER_FUNCTION(AsicRfTuningExec);
+#ifdef RT2870
+BUILD_TIMER_FUNCTION(BeaconUpdateExec);
+#endif // RT2870 //
-
-#ifdef CONFIG_STA_SUPPORT
BUILD_TIMER_FUNCTION(BeaconTimeout);
BUILD_TIMER_FUNCTION(ScanTimeout);
BUILD_TIMER_FUNCTION(AuthTimeout);
@@ -43,17 +44,12 @@ BUILD_TIMER_FUNCTION(AssocTimeout);
BUILD_TIMER_FUNCTION(ReassocTimeout);
BUILD_TIMER_FUNCTION(DisassocTimeout);
BUILD_TIMER_FUNCTION(LinkDownExec);
-#ifdef LEAP_SUPPORT
-BUILD_TIMER_FUNCTION(LeapAuthTimeout);
-#endif
BUILD_TIMER_FUNCTION(StaQuickResponeForRateUpExec);
BUILD_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc);
+#ifdef RT2860
BUILD_TIMER_FUNCTION(PsPollWakeExec);
BUILD_TIMER_FUNCTION(RadioOnExec);
-#ifdef QOS_DLS_SUPPORT
-BUILD_TIMER_FUNCTION(DlsTimeoutAction);
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
+#endif
// for wireless system event message
char const *pWirelessSysEventText[IW_SYS_EVENT_TYPE_NUM] = {
@@ -290,9 +286,9 @@ VOID RTMPFreeAdapter(
NdisFreeSpinLock(&pAd->MgmtRingLock);
-
+#ifdef RT2860
NdisFreeSpinLock(&pAd->RxRingLock);
-
+#endif
for (index =0 ; index < NUM_OF_TX_RING; index++)
{
NdisFreeSpinLock(&pAd->TxSwQueueLock[index]);
@@ -495,12 +491,7 @@ PNET_DEV get_netdev_from_bssid(
{
PNET_DEV dev_p = NULL;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- dev_p = pAd->net_dev;
- }
-#endif // CONFIG_STA_SUPPORT //
+ dev_p = pAd->net_dev;
ASSERT(dev_p);
return dev_p; /* return one of MBSS */
@@ -656,13 +647,8 @@ void wlan_802_11_to_802_3_packet(
//
//
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- NdisMoveMemory(skb_push(pOSPkt, LENGTH_802_3), pHeader802_3, LENGTH_802_3);
-#endif // CONFIG_STA_SUPPORT //
- }
-
-
+ NdisMoveMemory(skb_push(pOSPkt, LENGTH_802_3), pHeader802_3, LENGTH_802_3);
+}
void announce_802_3_packet(
IN PRTMP_ADAPTER pAd,
@@ -824,8 +810,6 @@ VOID RTMPSendWirelessEvent(
#endif /* WIRELESS_EXT >= 15 */
}
-
-#ifdef CONFIG_STA_SUPPORT
void send_monitor_packets(
IN PRTMP_ADAPTER pAd,
IN RX_BLK *pRxBlk)
@@ -850,7 +834,12 @@ void send_monitor_packets(
if (pRxBlk->DataSize + sizeof(wlan_ng_prism2_header) > RX_BUFFER_AGGRESIZE)
{
+#ifndef RT30xx
DBGPRINT(RT_DEBUG_ERROR, ("%s : Size is too large! (%zu)\n", __func__, pRxBlk->DataSize + sizeof(wlan_ng_prism2_header)));
+#endif
+#ifdef RT30xx
+ DBGPRINT(RT_DEBUG_ERROR, ("%s : Size is too large! (%d)\n", __func__, pRxBlk->DataSize + sizeof(wlan_ng_prism2_header)));
+#endif
goto err_free_sk_buff;
}
@@ -957,13 +946,11 @@ 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
-#endif // DOT11_N_SUPPORT //
if (pRxBlk->pRxWI->PHYMODE == MODE_OFDM)
rate_index = (UCHAR)(pRxBlk->pRxWI->MCS) + 4;
else
@@ -996,8 +983,6 @@ err_free_sk_buff:
return;
}
-#endif // CONFIG_STA_SUPPORT //
-
void rtmp_os_thread_init(PUCHAR pThreadName, PVOID pNotify)
{
diff --git a/drivers/staging/rt2860/rt_linux.h b/drivers/staging/rt2860/rt_linux.h
index 708923cecaa2..85175c182432 100644
--- a/drivers/staging/rt2860/rt_linux.h
+++ b/drivers/staging/rt2860/rt_linux.h
@@ -42,8 +42,10 @@
#include "rtmp_type.h"
#include <linux/module.h>
-#include <linux/version.h>
#include <linux/kernel.h>
+#if !defined(RT2860) && !defined(RT30xx)
+#include <linux/kthread.h>
+#endif
#include <linux/spinlock.h>
#include <linux/init.h>
@@ -65,6 +67,9 @@
#include <linux/vmalloc.h>
+#ifdef RT30xx
+#include <linux/wireless.h>
+#endif
#include <net/iw_handler.h>
// load firmware
@@ -88,23 +93,31 @@ typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_
// add by kathy
-#ifdef CONFIG_STA_SUPPORT
+#ifdef RT2860
#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.8.1.1"
-#ifdef MULTIPLE_CARD_SUPPORT
-#define CARD_INFO_PATH "/etc/Wireless/RT2860STA/RT2860STACard.dat"
-#endif // MULTIPLE_CARD_SUPPORT //
-
-
-#endif // CONFIG_STA_SUPPORT //
+#endif
+#ifdef RT2870
+#define STA_PROFILE_PATH "/etc/Wireless/RT2870STA/RT2870STA.dat"
+#define STA_RT2870_IMAGE_FILE_NAME "/etc/Wireless/RT2870STA/rt2870.bin"
+#define STA_NIC_DEVICE_NAME "RT2870STA"
+#ifndef RT30xx
+#define STA_DRIVER_VERSION "1.4.0.0"
+#endif
+#ifdef RT30xx
+#define STA_DRIVER_VERSION "2.0.1.0"
+#endif
+#endif
+#ifdef RT2860
#ifndef PCI_DEVICE
#define PCI_DEVICE(vend,dev) \
.vendor = (vend), .device = (dev), \
.subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID
#endif // PCI_DEVICE //
+#endif
#define RTMP_TIME_AFTER(a,b) \
(typecheck(unsigned long, (unsigned long)a) && \
@@ -144,24 +157,23 @@ typedef int (*HARD_START_XMIT_FUNC)(struct sk_buff *skb, struct net_device *net_
#define MIN_NET_DEVICE_FOR_WDS 0x10 //0x40,0x50,0x60,0x70
#define MIN_NET_DEVICE_FOR_APCLI 0x20
#define MIN_NET_DEVICE_FOR_MESH 0x30
-#ifdef CONFIG_STA_SUPPORT
#define MIN_NET_DEVICE_FOR_DLS 0x40
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef CONFIG_STA_SUPPORT
#define NDIS_PACKET_TYPE_DIRECTED 0
#define NDIS_PACKET_TYPE_MULTICAST 1
#define NDIS_PACKET_TYPE_BROADCAST 2
#define NDIS_PACKET_TYPE_ALL_MULTICAST 3
-#endif // CONFIG_STA_SUPPORT //
+#ifndef RT30xx
typedef struct pid * THREAD_PID;
+#ifdef RT2860
#define THREAD_PID_INIT_VALUE NULL
+#endif
#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)
+#endif
struct os_lock {
spinlock_t lock;
@@ -170,10 +182,25 @@ struct os_lock {
struct os_cookie {
+#ifdef RT2860
struct pci_dev *pci_dev;
struct pci_dev *parent_pci_dev;
dma_addr_t pAd_pa;
+#endif
+#ifdef RT2870
+ struct usb_device *pUsb_Dev;
+#ifndef RT30xx
+ struct task_struct *MLMEThr_task;
+ struct task_struct *RTUSBCmdThr_task;
+ struct task_struct *TimerQThr_task;
+#endif
+#ifdef RT30xx
+ struct pid *MLMEThr_pid;
+ struct pid *RTUSBCmdThr_pid;
+ struct pid *TimerQThr_pid;
+#endif
+#endif // RT2870 //
struct tasklet_struct rx_done_task;
struct tasklet_struct mgmt_dma_done_task;
@@ -183,8 +210,14 @@ struct os_cookie {
struct tasklet_struct ac3_dma_done_task;
struct tasklet_struct hcca_dma_done_task;
struct tasklet_struct tbtt_task;
+#ifdef RT2860
struct tasklet_struct fifo_statistic_full_task;
-
+#endif
+#ifdef RT2870
+ struct tasklet_struct null_frame_complete_task;
+ struct tasklet_struct rts_frame_complete_task;
+ struct tasklet_struct pspoll_frame_complete_task;
+#endif // RT2870 //
unsigned long apd_pid; //802.1x daemon pid
INT ioctl_if_type;
@@ -198,13 +231,7 @@ typedef struct _VIRTUAL_ADAPTER
} VIRTUAL_ADAPTER, PVIRTUAL_ADAPTER;
#undef ASSERT
-#define ASSERT(x) \
-{ \
- if (!(x)) \
- { \
- printk(KERN_WARNING __FILE__ ":%d assert " #x "failed\n", __LINE__); \
- } \
-}
+#define ASSERT(x)
typedef struct os_cookie * POS_COOKIE;
typedef struct pci_dev * PPCI_DEV;
@@ -238,6 +265,7 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int
#define RT2860_PCI_DEVICE_ID 0x0601
+#ifdef RT2860
#define PCI_MAP_SINGLE(_handle, _ptr, _size, _sd_idx, _dir) \
linux_pci_map_single(_handle, _ptr, _size, _sd_idx, _dir)
@@ -252,7 +280,12 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int
#define DEV_ALLOC_SKB(_length) \
dev_alloc_skb(_length)
+#endif
+#ifdef RT2870
+#define PCI_MAP_SINGLE(_handle, _ptr, _size, _dir) (ULONG)0
+#define PCI_UNMAP_SINGLE(_handle, _ptr, _size, _dir)
+#endif // RT2870 //
#define BEACON_FRAME_DMA_CACHE_WBACK(_ptr, _size) \
@@ -266,9 +299,20 @@ void linux_pci_unmap_single(void *handle, dma_addr_t dma_addr, size_t size, int
#define NdisMIndicateStatus(_w, _x, _y, _z)
-
typedef struct timer_list RTMP_OS_TIMER;
+#ifdef RT2870
+/* ----------------- Timer Related MARCO ---------------*/
+// In RT2870, we have a lot of timer functions and will read/write register, it's
+// not allowed in Linux USB sub-system to do it ( because of sleep issue when submit
+// to ctrl pipe). So we need a wrapper function to take care it.
+
+typedef VOID (*RT2870_TIMER_HANDLE)(
+ IN PVOID SystemSpecific1,
+ IN PVOID FunctionContext,
+ IN PVOID SystemSpecific2,
+ IN PVOID SystemSpecific3);
+#endif // RT2870 //
typedef struct _RALINK_TIMER_STRUCT {
@@ -279,9 +323,42 @@ typedef struct _RALINK_TIMER_STRUCT {
BOOLEAN Repeat; // True if periodic timer
ULONG TimerValue; // Timer value in milliseconds
ULONG cookie; // os specific object
+#ifdef RT2870
+ RT2870_TIMER_HANDLE handle;
+ void *pAd;
+#endif // RT2870 //
} RALINK_TIMER_STRUCT, *PRALINK_TIMER_STRUCT;
+#ifdef RT2870
+
+typedef enum _RT2870_KERNEL_THREAD_STATUS_
+{
+ RT2870_THREAD_UNKNOWN = 0,
+ RT2870_THREAD_INITED = 1,
+ RT2870_THREAD_RUNNING = 2,
+ RT2870_THREAD_STOPED = 4,
+}RT2870_KERNEL_THREAD_STATUS;
+
+#define RT2870_THREAD_CAN_DO_INSERT (RT2870_THREAD_INITED |RT2870_THREAD_RUNNING)
+
+typedef struct _RT2870_TIMER_ENTRY_
+{
+ RALINK_TIMER_STRUCT *pRaTimer;
+ struct _RT2870_TIMER_ENTRY_ *pNext;
+}RT2870_TIMER_ENTRY;
+
+
+#define TIMER_QUEUE_SIZE_MAX 128
+typedef struct _RT2870_TIMER_QUEUE_
+{
+ unsigned int status;
+ UCHAR *pTimerQPoll;
+ RT2870_TIMER_ENTRY *pQPollFreeList;
+ RT2870_TIMER_ENTRY *pQHead;
+ RT2870_TIMER_ENTRY *pQTail;
+}RT2870_TIMER_QUEUE;
+#endif // RT2870 //
//#define DBG 1
@@ -371,6 +448,7 @@ extern ULONG RTDebugLevel;
spin_unlock_irqrestore((spinlock_t *)(__lock), ((unsigned long)__irqflag)); \
}
+#ifdef RT2860
#if defined(INF_TWINPASS) || defined(INF_DANUBE) || defined(IKANOS_VX_1X0)
//Patch for ASIC turst read/write bug, needs to remove after metel fix
#define RTMP_IO_READ32(_A, _R, _pV) \
@@ -472,7 +550,32 @@ extern ULONG RTDebugLevel;
writew((_V), (PUSHORT)((_A)->CSRBaseAddress + (_R))); \
}
#endif
+#endif /* RT2860 */
+#ifdef RT2870
+//Patch for ASIC turst read/write bug, needs to remove after metel fix
+#define RTMP_IO_READ32(_A, _R, _pV) \
+ RTUSBReadMACRegister(_A, _R, _pV)
+
+#define RTMP_IO_READ8(_A, _R, _pV) \
+{ \
+}
+
+#define RTMP_IO_WRITE32(_A, _R, _V) \
+ RTUSBWriteMACRegister(_A, _R, _V)
+
+
+#define RTMP_IO_WRITE8(_A, _R, _V) \
+{ \
+ USHORT _Val = _V; \
+ RTUSBSingleWrite(_A, _R, _Val); \
+}
+
+#define RTMP_IO_WRITE16(_A, _R, _V) \
+{ \
+ RTUSBSingleWrite(_A, _R, _V); \
+}
+#endif // RT2870 //
#ifndef wait_event_interruptible_timeout
#define __wait_event_interruptible_timeout(wq, condition, ret) \
@@ -515,7 +618,6 @@ do { \
wait_event_interruptible_timeout(_wait, 0, ONE_TICK); }
-/* 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)
@@ -523,6 +625,7 @@ typedef void (*TIMER_FUNCTION)(unsigned long);
#define MlmeAllocateMemory(_pAd, _ppVA) os_alloc_mem(_pAd, _ppVA, MGMT_DMA_BUFFER_SIZE)
#define MlmeFreeMemory(_pAd, _pVA) os_free_mem(_pAd, _pVA)
+#ifdef RT2860
#define BUILD_TIMER_FUNCTION(_func) \
void linux_##_func(unsigned long data) \
{ \
@@ -532,7 +635,22 @@ void linux_##_func(unsigned long data) \
if (pTimer->Repeat) \
RTMP_OS_Add_Timer(&pTimer->TimerObj, pTimer->TimerValue); \
}
-
+#endif
+#ifdef RT2870
+#define BUILD_TIMER_FUNCTION(_func) \
+void linux_##_func(unsigned long data) \
+{ \
+ PRALINK_TIMER_STRUCT _pTimer = (PRALINK_TIMER_STRUCT)data; \
+ RT2870_TIMER_ENTRY *_pQNode; \
+ RTMP_ADAPTER *_pAd; \
+ \
+ _pTimer->handle = _func; \
+ _pAd = (RTMP_ADAPTER *)_pTimer->pAd; \
+ _pQNode = RT2870_TimerQ_Insert(_pAd, _pTimer); \
+ if ((_pQNode == NULL) && (_pAd->TimerQ.status & RT2870_THREAD_CAN_DO_INSERT)) \
+ RTMP_OS_Add_Timer(&_pTimer->TimerObj, HZ); \
+}
+#endif // RT2870 //
#define DECLARE_TIMER_FUNCTION(_func) \
@@ -546,9 +664,10 @@ DECLARE_TIMER_FUNCTION(MlmeRssiReportExec);
DECLARE_TIMER_FUNCTION(AsicRxAntEvalTimeout);
DECLARE_TIMER_FUNCTION(APSDPeriodicExec);
DECLARE_TIMER_FUNCTION(AsicRfTuningExec);
+#ifdef RT2870
+DECLARE_TIMER_FUNCTION(BeaconUpdateExec);
+#endif // RT2870 //
-
-#ifdef CONFIG_STA_SUPPORT
DECLARE_TIMER_FUNCTION(BeaconTimeout);
DECLARE_TIMER_FUNCTION(ScanTimeout);
DECLARE_TIMER_FUNCTION(AuthTimeout);
@@ -556,19 +675,11 @@ DECLARE_TIMER_FUNCTION(AssocTimeout);
DECLARE_TIMER_FUNCTION(ReassocTimeout);
DECLARE_TIMER_FUNCTION(DisassocTimeout);
DECLARE_TIMER_FUNCTION(LinkDownExec);
-#ifdef LEAP_SUPPORT
-DECLARE_TIMER_FUNCTION(LeapAuthTimeout);
-#endif
DECLARE_TIMER_FUNCTION(StaQuickResponeForRateUpExec);
DECLARE_TIMER_FUNCTION(WpaDisassocApAndBlockAssoc);
DECLARE_TIMER_FUNCTION(PsPollWakeExec);
DECLARE_TIMER_FUNCTION(RadioOnExec);
-#ifdef QOS_DLS_SUPPORT
-DECLARE_TIMER_FUNCTION(DlsTimeoutAction);
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
-
void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time);
@@ -676,10 +787,6 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time);
#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
//
@@ -759,8 +866,6 @@ void RTMP_GetCurrentSystemTime(LARGE_INTEGER *time);
#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.
#define RTMP_SET_PACKET_CLEAR_EAP_FRAME(_p, _flg) (RTPKT_TO_OSPKT(_p)->cb[CB_OFF+12] = _flg)
@@ -884,6 +989,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb);
void rtmp_os_thread_init(PUCHAR pThreadName, PVOID pNotify);
+#ifdef RT2860
#if !defined(PCI_CAP_ID_EXP)
#define PCI_CAP_ID_EXP 0x10
#endif
@@ -897,5 +1003,5 @@ void rtmp_os_thread_init(PUCHAR pThreadName, PVOID pNotify);
#endif
#define PCIBUS_INTEL_VENDOR 0x8086
-
+#endif
diff --git a/drivers/staging/rt2860/rt_main_dev.c b/drivers/staging/rt2860/rt_main_dev.c
index 6c4396f0903b..f298b9bcec39 100644
--- a/drivers/staging/rt2860/rt_main_dev.c
+++ b/drivers/staging/rt2860/rt_main_dev.c
@@ -40,17 +40,6 @@
#define FORTY_MHZ_INTOLERANT_INTERVAL (60*1000) // 1 min
-#ifdef MULTIPLE_CARD_SUPPORT
-// record whether the card in the card list is used in the card file
-UINT8 MC_CardUsed[MAX_NUM_OF_MULTIPLE_CARD];
-// record used card mac address in the card list
-static UINT8 MC_CardMac[MAX_NUM_OF_MULTIPLE_CARD][6];
-#endif // MULTIPLE_CARD_SUPPORT //
-
-#ifdef CONFIG_APSTA_MIXED_SUPPORT
-UINT32 CW_MAX_IN_BITS;
-#endif // CONFIG_APSTA_MIXED_SUPPORT //
-
/*---------------------------------------------------------------------*/
/* Private Variables Used */
/*---------------------------------------------------------------------*/
@@ -65,13 +54,13 @@ 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
extern void init_thread_task(PRTMP_ADAPTER pAd);
+#endif
// public function prototype
INT __devinit rt28xx_probe(IN void *_dev_p, IN void *_dev_id_p,
@@ -83,13 +72,7 @@ INT rt28xx_send_packets(IN struct sk_buff *skb_p, IN struct net_device *net_dev)
static void CfgInitHook(PRTMP_ADAPTER pAd);
-#ifdef CONFIG_STA_SUPPORT
extern const struct iw_handler_def rt28xx_iw_handler_def;
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef CONFIG_APSTA_MIXED_SUPPORT
-extern const struct iw_handler_def rt28xx_ap_iw_handler_def;
-#endif // CONFIG_APSTA_MIXED_SUPPORT //
#if WIRELESS_EXT >= 12
// This function will be called when query /proc
@@ -206,6 +189,12 @@ int rt28xx_close(IN PNET_DEV dev)
RTMP_ADAPTER *pAd = net_dev->ml_priv;
BOOLEAN Cancelled = FALSE;
UINT32 i = 0;
+#ifdef RT2870
+ DECLARE_WAIT_QUEUE_HEAD(unlink_wakeup);
+ DECLARE_WAITQUEUE(wait, current);
+
+ //RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS);
+#endif // RT2870 //
DBGPRINT(RT_DEBUG_TRACE, ("===> rt28xx_close\n"));
@@ -214,54 +203,26 @@ int rt28xx_close(IN PNET_DEV dev)
if (pAd == NULL)
return 0; // close ok
-
-#ifdef WDS_SUPPORT
- WdsDown(pAd);
-#endif // WDS_SUPPORT //
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// If dirver doesn't wake up firmware here,
// NICLoadFirmware will hang forever when interface is up again.
+#ifdef RT2860
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE) ||
RTMP_SET_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND) ||
RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_IDLE_RADIO_OFF))
+#endif
+#ifdef RT2870
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
+#endif
{
+#ifdef RT2860
AsicForceWakeup(pAd, RTMP_HALT);
+#endif
+#ifdef RT2870
+ AsicForceWakeup(pAd, TRUE);
+#endif
}
-#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++)
- {
- 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))
- {
- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr);
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- }
- }
- RT28XX_MLME_HANDLER(pAd);
- }
-#endif // QOS_DLS_SUPPORT //
-
if (INFRA_ON(pAd) &&
(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_NIC_NOT_EXIST)))
{
@@ -287,6 +248,9 @@ int rt28xx_close(IN PNET_DEV dev)
RTMPusecDelay(1000);
}
+#ifdef RT2870
+ RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS);
+#endif // RT2870 //
#ifdef CCX_SUPPORT
RTMPCancelTimer(&pAd->StaCfg.LeapAuthTimer, &Cancelled);
@@ -295,22 +259,11 @@ int rt28xx_close(IN PNET_DEV dev)
RTMPCancelTimer(&pAd->StaCfg.StaQuickResponeForRateUpTimer, &Cancelled);
RTMPCancelTimer(&pAd->StaCfg.WpaDisassocAndBlockAssocTimer, &Cancelled);
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- {
- union iwreq_data wrqu;
- // send wireless event to wpa_supplicant for infroming interface down.
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.flags = RT_INTERFACE_DOWN;
- wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL);
- }
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-#endif // WPA_SUPPLICANT_SUPPORT //
-
MlmeRadioOff(pAd);
+#ifdef RT2860
pAd->bPCIclkOff = FALSE;
+#endif
}
-#endif // CONFIG_STA_SUPPORT //
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS);
@@ -323,25 +276,52 @@ int rt28xx_close(IN PNET_DEV dev)
}
}
+#ifdef RT2870
+ // ensure there are no more active urbs.
+ add_wait_queue (&unlink_wakeup, &wait);
+ pAd->wait = &unlink_wakeup;
+
+ // maybe wait for deletions to finish.
+ i = 0;
+ //while((i < 25) && atomic_read(&pAd->PendingRx) > 0)
+ while(i < 25)
+ {
+ unsigned long IrqFlags;
+
+ RTMP_IRQ_LOCK(&pAd->BulkInLock, IrqFlags);
+ if (pAd->PendingRx == 0)
+ {
+ RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
+ break;
+ }
+ RTMP_IRQ_UNLOCK(&pAd->BulkInLock, IrqFlags);
+
+ msleep(UNLINK_TIMEOUT_MS); //Time in millisecond
+ i++;
+ }
+ pAd->wait = NULL;
+ remove_wait_queue (&unlink_wakeup, &wait);
+#endif // RT2870 //
+
+#ifdef RT2870
+ // We need clear timerQ related structure before exits of the timer thread.
+ RT2870_TimerQ_Exit(pAd);
+ // Close kernel threads or tasklets
+ RT28xxThreadTerminate(pAd);
+#endif // RT2870 //
+
// Stop Mlme state machine
MlmeHalt(pAd);
// Close kernel threads or tasklets
kill_thread_task(pAd);
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- MacTableReset(pAd);
- }
-#endif // CONFIG_STA_SUPPORT //
-
+ MacTableReset(pAd);
MeasureReqTabExit(pAd);
TpcReqTabExit(pAd);
-
+#ifdef RT2860
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE))
{
NICDisableInterrupt(pAd);
@@ -357,18 +337,15 @@ int rt28xx_close(IN PNET_DEV dev)
RT28XX_IRQ_RELEASE(net_dev)
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE);
}
-
+#endif
// Free Ring or USB buffers
RTMPFreeTxRxRingMemory(pAd);
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);
@@ -377,17 +354,19 @@ int rt28xx_close(IN PNET_DEV dev)
static int rt28xx_init(IN struct net_device *net_dev)
{
+#ifdef RT2860
PRTMP_ADAPTER pAd = (PRTMP_ADAPTER)net_dev->ml_priv;
+#endif
+#ifdef RT2870
+ PRTMP_ADAPTER pAd = net_dev->ml_priv;
+#endif
UINT index;
UCHAR TmpPhy;
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;
@@ -403,11 +382,11 @@ static int rt28xx_init(IN struct net_device *net_dev)
} while (index++ < 100);
DBGPRINT(RT_DEBUG_TRACE, ("MAC_CSR0 [ Ver:Rev=0x%08x]\n", pAd->MACVersion));
+/*Iverson patch PCIE L1 issue */
// Disable DMA
RT28XXDMADisable(pAd);
-
// Load 8051 firmware
Status = NICLoadFirmware(pAd);
if (Status != NDIS_STATUS_SUCCESS)
@@ -420,10 +399,12 @@ static int rt28xx_init(IN struct net_device *net_dev)
// Disable interrupts here which is as soon as possible
// This statement should never be true. We might consider to remove it later
+#ifdef RT2860
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE))
{
NICDisableInterrupt(pAd);
}
+#endif
Status = RTMPAllocTxRxRingMemory(pAd);
if (Status != NDIS_STATUS_SUCCESS)
@@ -448,6 +429,10 @@ static int rt28xx_init(IN struct net_device *net_dev)
//
UserCfgInit(pAd);
+#ifdef RT2870
+ // We need init timerQ related structure before create the timer thread.
+ RT2870_TimerQ_Init(pAd);
+#endif // RT2870 //
RT28XX_TASK_THREAD_INIT(pAd, Status);
if (Status != NDIS_STATUS_SUCCESS)
@@ -455,15 +440,7 @@ static int rt28xx_init(IN struct net_device *net_dev)
CfgInitHook(pAd);
-
-#ifdef BLOCK_NET_IF
- initblockQueueTab(pAd);
-#endif // BLOCK_NET_IF //
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- NdisAllocateSpinLock(&pAd->MacTabLock);
-#endif // CONFIG_STA_SUPPORT //
+ NdisAllocateSpinLock(&pAd->MacTabLock);
MeasureReqTabInit(pAd);
TpcReqTabInit(pAd);
@@ -489,10 +466,17 @@ static int rt28xx_init(IN struct net_device *net_dev)
goto err4;
}
+#ifdef RT2870
+ pAd->CommonCfg.bMultipleIRP = FALSE;
+
+ if (pAd->CommonCfg.bMultipleIRP)
+ pAd->CommonCfg.NumOfBulkInIRP = RX_RING_SIZE;
+ else
+ pAd->CommonCfg.NumOfBulkInIRP = 1;
+#endif // RT2870 //
//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;
@@ -501,7 +485,6 @@ 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);
@@ -516,9 +499,7 @@ static int rt28xx_init(IN struct net_device *net_dev)
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)
@@ -527,11 +508,14 @@ static int rt28xx_init(IN struct net_device *net_dev)
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]);
-#endif // DOT11_N_SUPPORT //
+
+#ifdef RT2870
+ //Init RT30xx RFRegisters after read RFIC type from EEPROM
+ NICInitRT30xxRFRegisters(pAd);
+#endif // RT2870 //
#ifdef IKANOS_VX_1X0
VR_IKANOS_FP_Init(pAd->ApCfg.BssidNum, pAd->PermanentAddress);
@@ -543,8 +527,10 @@ static int rt28xx_init(IN struct net_device *net_dev)
AsicSwitchChannel(pAd, pAd->CommonCfg.Channel, FALSE);
AsicLockChannel(pAd, pAd->CommonCfg.Channel);
+#ifndef RT30xx
// 8051 firmware require the signal during booting time.
AsicSendCommandToMcu(pAd, 0x72, 0xFF, 0x00, 0x00);
+#endif
if (pAd && (Status != NDIS_STATUS_SUCCESS))
{
@@ -561,9 +547,24 @@ static int rt28xx_init(IN struct net_device *net_dev)
// Microsoft HCT require driver send a disconnect event after driver initialization.
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"));
+#ifdef RT2870
+ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS);
+ RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_REMOVE_IN_PROGRESS);
+
+ //
+ // Support multiple BulkIn IRP,
+ // the value on pAd->CommonCfg.NumOfBulkInIRP may be large than 1.
+ //
+ for(index=0; index<pAd->CommonCfg.NumOfBulkInIRP; index++)
+ {
+ RTUSBBulkReceive(pAd);
+ DBGPRINT(RT_DEBUG_TRACE, ("RTUSBBulkReceive!\n" ));
+ }
+#endif // RT2870 //
}// end of else
@@ -578,17 +579,12 @@ err3:
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 ml_priv to NULL here because the ml_priv didn't been free yet.
//net_dev->ml_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 */
@@ -625,27 +621,6 @@ int rt28xx_open(IN PNET_DEV dev)
return -1;
}
-#ifdef CONFIG_APSTA_MIXED_SUPPORT
- if (pAd->OpMode == OPMODE_AP)
- {
- CW_MAX_IN_BITS = 6;
- }
- else if (pAd->OpMode == OPMODE_STA)
- {
- CW_MAX_IN_BITS = 10;
- }
-
-#if WIRELESS_EXT >= 12
- if (net_dev->priv_flags == INT_MAIN)
- {
- if (pAd->OpMode == OPMODE_AP)
- net_dev->wireless_handlers = (struct iw_handler_def *) &rt28xx_ap_iw_handler_def;
- else if (pAd->OpMode == OPMODE_STA)
- net_dev->wireless_handlers = (struct iw_handler_def *) &rt28xx_iw_handler_def;
- }
-#endif // WIRELESS_EXT >= 12 //
-#endif // CONFIG_APSTA_MIXED_SUPPORT //
-
// Init
pObj = (POS_COOKIE)pAd->OS_Cookie;
@@ -664,13 +639,8 @@ int rt28xx_open(IN PNET_DEV dev)
if (rt28xx_init(net_dev) == FALSE)
goto err;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- NdisZeroMemory(pAd->StaCfg.dev_name, 16);
- NdisMoveMemory(pAd->StaCfg.dev_name, net_dev->name, strlen(net_dev->name));
- }
-#endif // CONFIG_STA_SUPPORT //
+ NdisZeroMemory(pAd->StaCfg.dev_name, 16);
+ NdisMoveMemory(pAd->StaCfg.dev_name, net_dev->name, strlen(net_dev->name));
// Set up the Mac address
NdisMoveMemory(net_dev->dev_addr, (void *) pAd->CurrentAddress, 6);
@@ -680,24 +650,6 @@ int rt28xx_open(IN PNET_DEV dev)
// Various AP function init
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- {
- union iwreq_data wrqu;
- // send wireless event to wpa_supplicant for infroming interface down.
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.flags = RT_INTERFACE_UP;
- wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL);
- }
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-#endif // WPA_SUPPLICANT_SUPPORT //
-
- }
-#endif // CONFIG_STA_SUPPORT //
-
// Enable Interrupt
RT28XX_IRQ_ENABLE(pAd);
@@ -711,11 +663,9 @@ int rt28xx_open(IN PNET_DEV dev)
printk("0x1300 = %08x\n", reg);
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
+#ifdef RT2860
RTMPInitPCIeLinkCtrlValue(pAd);
-#endif // CONFIG_STA_SUPPORT //
-
+#endif
return (retval);
err:
@@ -745,26 +695,12 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
CHAR slot_name[IFNAMSIZ];
struct net_device *device;
-
- //ether_setup(dev);
-
-#ifdef CONFIG_STA_SUPPORT
#if WIRELESS_EXT >= 12
if (pAd->OpMode == OPMODE_STA)
{
dev->wireless_handlers = &rt28xx_iw_handler_def;
}
#endif //WIRELESS_EXT >= 12
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef CONFIG_APSTA_MIXED_SUPPORT
-#if WIRELESS_EXT >= 12
- if (pAd->OpMode == OPMODE_AP)
- {
- dev->wireless_handlers = &rt28xx_ap_iw_handler_def;
- }
-#endif //WIRELESS_EXT >= 12
-#endif // CONFIG_APSTA_MIXED_SUPPORT //
#if WIRELESS_EXT < 21
dev->get_wireless_stats = rt28xx_get_wireless_stats;
@@ -774,11 +710,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
// find available device name
for (i = 0; i < 8; i++)
{
-#ifdef MULTIPLE_CARD_SUPPORT
- if (pAd->MC_RowID >= 0)
- sprintf(slot_name, "ra%02d_%d", pAd->MC_RowID, i);
- else
-#endif // MULTIPLE_CARD_SUPPORT //
sprintf(slot_name, "ra%d", i);
device = dev_get_by_name(dev_net(dev), slot_name);
@@ -796,11 +727,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
}
else
{
-#ifdef MULTIPLE_CARD_SUPPORT
- if (pAd->MC_RowID >= 0)
- sprintf(dev->name, "ra%02d_%d", pAd->MC_RowID, i);
- else
-#endif // MULTIPLE_CARD_SUPPORT //
sprintf(dev->name, "ra%d", i);
Status = NDIS_STATUS_SUCCESS;
}
@@ -809,369 +735,6 @@ static NDIS_STATUS rt_ieee80211_if_setup(struct net_device *dev, PRTMP_ADAPTER p
}
-
-#ifdef MULTIPLE_CARD_SUPPORT
-/*
-========================================================================
-Routine Description:
- Get card profile path.
-
-Arguments:
- pAd
-
-Return Value:
- TRUE - Find a card profile
- FALSE - use default profile
-
-Note:
-========================================================================
-*/
-extern INT RTMPGetKeyParameter(
- IN PCHAR key,
- OUT PCHAR dest,
- IN INT destsize,
- IN PCHAR buffer);
-
-BOOLEAN RTMP_CardInfoRead(
- IN PRTMP_ADAPTER pAd)
-{
-#define MC_SELECT_CARDID 0 /* use CARD ID (0 ~ 31) to identify different cards */
-#define MC_SELECT_MAC 1 /* use CARD MAC to identify different cards */
-#define MC_SELECT_CARDTYPE 2 /* use CARD type (abgn or bgn) to identify different cards */
-
-#define LETTER_CASE_TRANSLATE(txt_p, card_id) \
- { UINT32 _len; char _char; \
- for(_len=0; _len<strlen(card_id); _len++) { \
- _char = *(txt_p + _len); \
- if (('A' <= _char) && (_char <= 'Z')) \
- *(txt_p+_len) = 'a'+(_char-'A'); \
- } }
-
- struct file *srcf;
- INT retval, orgfsuid, orgfsgid;
- mm_segment_t orgfs;
- CHAR *buffer, *tmpbuf, card_id_buf[30], RFIC_word[30];
- BOOLEAN flg_match_ok = FALSE;
- INT32 card_select_method;
- INT32 card_free_id, card_nouse_id, card_same_mac_id, card_match_id;
- EEPROM_ANTENNA_STRUC antenna;
- USHORT addr01, addr23, addr45;
- UINT8 mac[6];
- UINT32 data, card_index;
- UCHAR *start_ptr;
-
-
- // init
- buffer = kmalloc(MAX_INI_BUFFER_SIZE, MEM_ALLOC_FLAG);
- if (buffer == NULL)
- return FALSE;
-
- tmpbuf = kmalloc(MAX_PARAM_BUFFER_SIZE, MEM_ALLOC_FLAG);
- if(tmpbuf == NULL)
- {
- kfree(buffer);
- return NDIS_STATUS_FAILURE;
- }
-
- orgfsuid = current->fsuid;
- orgfsgid = current->fsgid;
- current->fsuid = current->fsgid = 0;
- orgfs = get_fs();
- set_fs(KERNEL_DS);
-
- // get RF IC type
- RTMP_IO_READ32(pAd, E2PROM_CSR, &data);
-
- if ((data & 0x30) == 0)
- pAd->EEPROMAddressNum = 6; // 93C46
- else if ((data & 0x30) == 0x10)
- pAd->EEPROMAddressNum = 8; // 93C66
- else
- pAd->EEPROMAddressNum = 8; // 93C86
-
- RT28xx_EEPROM_READ16(pAd, EEPROM_NIC1_OFFSET, antenna.word);
-
- if ((antenna.field.RfIcType == RFIC_2850) ||
- (antenna.field.RfIcType == RFIC_2750))
- {
- /* ABGN card */
- strcpy(RFIC_word, "abgn");
- }
- else
- {
- /* BGN card */
- strcpy(RFIC_word, "bgn");
- }
-
- // get MAC address
- 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);
- mac[2] = (UCHAR)(addr23 & 0xff);
- mac[3] = (UCHAR)(addr23 >> 8);
- mac[4] = (UCHAR)(addr45 & 0xff);
- mac[5] = (UCHAR)(addr45 >> 8);
-
- // open card information file
- srcf = filp_open(CARD_INFO_PATH, O_RDONLY, 0);
- if (IS_ERR(srcf))
- {
- /* card information file does not exist */
- DBGPRINT(RT_DEBUG_TRACE,
- ("--> Error %ld opening %s\n", -PTR_ERR(srcf), CARD_INFO_PATH));
- return FALSE;
- }
-
- if (srcf->f_op && srcf->f_op->read)
- {
- /* card information file exists so reading the card information */
- memset(buffer, 0x00, MAX_INI_BUFFER_SIZE);
- retval = srcf->f_op->read(srcf, buffer, MAX_INI_BUFFER_SIZE, &srcf->f_pos);
- if (retval < 0)
- {
- /* read fail */
- DBGPRINT(RT_DEBUG_TRACE,
- ("--> Read %s error %d\n", CARD_INFO_PATH, -retval));
- }
- else
- {
- /* get card selection method */
- memset(tmpbuf, 0x00, MAX_PARAM_BUFFER_SIZE);
- card_select_method = MC_SELECT_CARDTYPE; // default
-
- if (RTMPGetKeyParameter("SELECT", tmpbuf, 256, buffer))
- {
- if (strcmp(tmpbuf, "CARDID") == 0)
- card_select_method = MC_SELECT_CARDID;
- else if (strcmp(tmpbuf, "MAC") == 0)
- card_select_method = MC_SELECT_MAC;
- else if (strcmp(tmpbuf, "CARDTYPE") == 0)
- card_select_method = MC_SELECT_CARDTYPE;
- }
-
- DBGPRINT(RT_DEBUG_TRACE,
- ("MC> Card Selection = %d\n", card_select_method));
-
- // init
- card_free_id = -1;
- card_nouse_id = -1;
- card_same_mac_id = -1;
- card_match_id = -1;
-
- // search current card information records
- for(card_index=0;
- card_index<MAX_NUM_OF_MULTIPLE_CARD;
- card_index++)
- {
- if ((*(UINT32 *)&MC_CardMac[card_index][0] == 0) &&
- (*(UINT16 *)&MC_CardMac[card_index][4] == 0))
- {
- // MAC is all-0 so the entry is available
- MC_CardUsed[card_index] = 0;
-
- if (card_free_id < 0)
- card_free_id = card_index; // 1st free entry
- }
- else
- {
- if (memcmp(MC_CardMac[card_index], mac, 6) == 0)
- {
- // we find the entry with same MAC
- if (card_same_mac_id < 0)
- card_same_mac_id = card_index; // 1st same entry
- }
- else
- {
- // MAC is not all-0 but used flag == 0
- if ((MC_CardUsed[card_index] == 0) &&
- (card_nouse_id < 0))
- {
- card_nouse_id = card_index; // 1st available entry
- }
- }
- }
- }
-
- DBGPRINT(RT_DEBUG_TRACE,
- ("MC> Free = %d, Same = %d, NOUSE = %d\n",
- card_free_id, card_same_mac_id, card_nouse_id));
-
- if ((card_same_mac_id >= 0) &&
- ((card_select_method == MC_SELECT_CARDID) ||
- (card_select_method == MC_SELECT_CARDTYPE)))
- {
- // same MAC entry is found
- card_match_id = card_same_mac_id;
-
- if (card_select_method == MC_SELECT_CARDTYPE)
- {
- // for CARDTYPE
- sprintf(card_id_buf, "%02dCARDTYPE%s",
- card_match_id, RFIC_word);
-
- if ((start_ptr=rtstrstruncasecmp(buffer, card_id_buf)) != NULL)
- {
- // we found the card ID
- LETTER_CASE_TRANSLATE(start_ptr, card_id_buf);
- }
- }
- }
- else
- {
- // the card is 1st plug-in, try to find the match card profile
- switch(card_select_method)
- {
- case MC_SELECT_CARDID: // CARDID
- default:
- if (card_free_id >= 0)
- card_match_id = card_free_id;
- else
- card_match_id = card_nouse_id;
- break;
-
- case MC_SELECT_MAC: // MAC
- sprintf(card_id_buf, "MAC%02x:%02x:%02x:%02x:%02x:%02x",
- mac[0], mac[1], mac[2],
- mac[3], mac[4], mac[5]);
-
- /* try to find the key word in the card file */
- if ((start_ptr=rtstrstruncasecmp(buffer, card_id_buf)) != NULL)
- {
- LETTER_CASE_TRANSLATE(start_ptr, card_id_buf);
-
- /* get the row ID (2 ASCII characters) */
- start_ptr -= 2;
- card_id_buf[0] = *(start_ptr);
- card_id_buf[1] = *(start_ptr+1);
- card_id_buf[2] = 0x00;
-
- card_match_id = simple_strtol(card_id_buf, 0, 10);
- }
- break;
-
- case MC_SELECT_CARDTYPE: // CARDTYPE
- card_nouse_id = -1;
-
- for(card_index=0;
- card_index<MAX_NUM_OF_MULTIPLE_CARD;
- card_index++)
- {
- sprintf(card_id_buf, "%02dCARDTYPE%s",
- card_index, RFIC_word);
-
- if ((start_ptr=rtstrstruncasecmp(buffer,
- card_id_buf)) != NULL)
- {
- LETTER_CASE_TRANSLATE(start_ptr, card_id_buf);
-
- if (MC_CardUsed[card_index] == 0)
- {
- /* current the card profile is not used */
- if ((*(UINT32 *)&MC_CardMac[card_index][0] == 0) &&
- (*(UINT16 *)&MC_CardMac[card_index][4] == 0))
- {
- // find it and no previous card use it
- card_match_id = card_index;
- break;
- }
- else
- {
- // ever a card use it
- if (card_nouse_id < 0)
- card_nouse_id = card_index;
- }
- }
- }
- }
-
- // if not find a free one, use the available one
- if (card_match_id < 0)
- card_match_id = card_nouse_id;
- break;
- }
- }
-
- if (card_match_id >= 0)
- {
- // make up search keyword
- switch(card_select_method)
- {
- case MC_SELECT_CARDID: // CARDID
- sprintf(card_id_buf, "%02dCARDID", card_match_id);
- break;
-
- case MC_SELECT_MAC: // MAC
- sprintf(card_id_buf,
- "%02dmac%02x:%02x:%02x:%02x:%02x:%02x",
- card_match_id,
- mac[0], mac[1], mac[2],
- mac[3], mac[4], mac[5]);
- break;
-
- case MC_SELECT_CARDTYPE: // CARDTYPE
- default:
- sprintf(card_id_buf, "%02dcardtype%s",
- card_match_id, RFIC_word);
- break;
- }
-
- DBGPRINT(RT_DEBUG_TRACE, ("Search Keyword = %s\n", card_id_buf));
-
- // read card file path
- if (RTMPGetKeyParameter(card_id_buf, tmpbuf, 256, buffer))
- {
- if (strlen(tmpbuf) < sizeof(pAd->MC_FileName))
- {
- // backup card information
- pAd->MC_RowID = card_match_id; /* base 0 */
- MC_CardUsed[card_match_id] = 1;
- memcpy(MC_CardMac[card_match_id], mac, sizeof(mac));
-
- // backup card file path
- NdisMoveMemory(pAd->MC_FileName, tmpbuf , strlen(tmpbuf));
- pAd->MC_FileName[strlen(tmpbuf)] = '\0';
- flg_match_ok = TRUE;
-
- DBGPRINT(RT_DEBUG_TRACE,
- ("Card Profile Name = %s\n", pAd->MC_FileName));
- }
- else
- {
- DBGPRINT(RT_DEBUG_ERROR,
- ("Card Profile Name length too large!\n"));
- }
- }
- else
- {
- DBGPRINT(RT_DEBUG_ERROR,
- ("Can not find search key word in card.dat!\n"));
- }
-
- if ((flg_match_ok != TRUE) &&
- (card_match_id < MAX_NUM_OF_MULTIPLE_CARD))
- {
- MC_CardUsed[card_match_id] = 0;
- memset(MC_CardMac[card_match_id], 0, sizeof(mac));
- }
- } // if (card_match_id >= 0)
- }
- }
-
- // close file
- retval = filp_close(srcf, NULL);
- set_fs(orgfs);
- current->fsuid = orgfsuid;
- current->fsgid = orgfsgid;
- kfree(buffer);
- kfree(tmpbuf);
- return flg_match_ok;
-}
-#endif // MULTIPLE_CARD_SUPPORT //
-
-
/*
========================================================================
Routine Description:
@@ -1198,12 +761,17 @@ INT __devinit rt28xx_probe(
PRTMP_ADAPTER pAd = (PRTMP_ADAPTER) NULL;
INT status;
PVOID handle;
+#ifdef RT2860
struct pci_dev *dev_p = (struct pci_dev *)_dev_p;
+#endif
+#ifdef RT2870
+ struct usb_interface *intf = (struct usb_interface *)_dev_p;
+ struct usb_device *dev_p = interface_to_usbdev(intf);
+ dev_p = usb_get_dev(dev_p);
+#endif // RT2870 //
-#ifdef CONFIG_STA_SUPPORT
DBGPRINT(RT_DEBUG_TRACE, ("STA Driver version-%s\n", STA_DRIVER_VERSION));
-#endif // CONFIG_STA_SUPPORT //
net_dev = alloc_etherdev(sizeof(PRTMP_ADAPTER));
if (net_dev == NULL)
@@ -1214,13 +782,12 @@ INT __devinit rt28xx_probe(
}
netif_stop_queue(net_dev);
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
+
/* for supporting Network Manager */
/* Set the sysfs physical device reference for the network logical device
* if set prior to registration will cause a symlink during initialization.
*/
SET_NETDEV_DEV(net_dev, &(dev_p->dev));
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
// Allocate RTMP_ADAPTER miniport adapter structure
handle = kmalloc(sizeof(struct os_cookie), GFP_KERNEL);
@@ -1235,32 +802,13 @@ INT __devinit rt28xx_probe(
RT28XXNetDevInit(_dev_p, net_dev, pAd);
-#ifdef CONFIG_STA_SUPPORT
pAd->StaCfg.OriDevType = net_dev->type;
-#endif // CONFIG_STA_SUPPORT //
// Post config
if (RT28XXProbePostConfig(_dev_p, pAd, 0) == FALSE)
goto err_out_unmap;
-#ifdef CONFIG_STA_SUPPORT
pAd->OpMode = OPMODE_STA;
-#endif // CONFIG_STA_SUPPORT //
-
-
-#ifdef MULTIPLE_CARD_SUPPORT
- // find its profile path
- pAd->MC_RowID = -1; // use default profile path
- RTMP_CardInfoRead(pAd);
-
- if (pAd->MC_RowID == -1)
-#ifdef CONFIG_STA_SUPPORT
- strcpy(pAd->MC_FileName, STA_PROFILE_PATH);
-#endif // CONFIG_STA_SUPPORT //
-
- DBGPRINT(RT_DEBUG_TRACE,
- ("MC> ROW = %d, PATH = %s\n", pAd->MC_RowID, pAd->MC_FileName));
-#endif // MULTIPLE_CARD_SUPPORT //
// sample move
if (rt_ieee80211_if_setup(net_dev, pAd) != NDIS_STATUS_SUCCESS)
@@ -1317,17 +865,6 @@ int rt28xx_packet_xmit(struct sk_buff *skb)
int status = 0;
PNDIS_PACKET pPacket = (PNDIS_PACKET) skb;
- /* RT2870STA does this in RTMPSendPackets() */
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- {
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_RESOURCES);
- return 0;
- }
-#endif // RALINK_ATE //
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
// Drop send request since we are in monitor mode
if (MONITOR_ON(pAd))
@@ -1336,7 +873,6 @@ int rt28xx_packet_xmit(struct sk_buff *skb)
goto done;
}
}
-#endif // CONFIG_STA_SUPPORT //
// EapolStart size is 18
if (skb->len < 14)
@@ -1354,16 +890,7 @@ int rt28xx_packet_xmit(struct sk_buff *skb)
}
#endif
-
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
-
- STASendPackets((NDIS_HANDLE)pAd, (PPNDIS_PACKET) &pPacket, 1);
- }
-
-#endif // CONFIG_STA_SUPPORT //
+ STASendPackets((NDIS_HANDLE)pAd, (PPNDIS_PACKET) &pPacket, 1);
status = 0;
done:
@@ -1432,10 +959,8 @@ struct iw_statistics *rt28xx_get_wireless_stats(
if(pAd->iw_stats.qual.qual > 100)
pAd->iw_stats.qual.qual = 100;
-#ifdef CONFIG_STA_SUPPORT
if (pAd->OpMode == OPMODE_STA)
pAd->iw_stats.qual.level = RTMPMaxRssi(pAd, pAd->StaCfg.RssiSample.LastRssi0, pAd->StaCfg.RssiSample.LastRssi1, pAd->StaCfg.RssiSample.LastRssi2);
-#endif // CONFIG_STA_SUPPORT //
pAd->iw_stats.qual.noise = pAd->BbpWriteLatch[66]; // noise level (dBm)
@@ -1487,13 +1012,7 @@ INT rt28xx_ioctl(
return -ENETDOWN;
}
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- {
- ret = rt28xx_sta_ioctl(net_dev, rq, cmd);
- }
-#endif // CONFIG_STA_SUPPORT //
+ ret = rt28xx_sta_ioctl(net_dev, rq, cmd);
return ret;
}
diff --git a/drivers/staging/rt2860/rt_profile.c b/drivers/staging/rt2860/rt_profile.c
index 62141f376972..d92b14328d40 100644
--- a/drivers/staging/rt2860/rt_profile.c
+++ b/drivers/staging/rt2860/rt_profile.c
@@ -27,12 +27,10 @@
#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
@@ -756,9 +754,6 @@ static void rtmp_read_key_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, c
//DefaultKeyID
if(RTMPGetKeyParameter("DefaultKeyID", tmpbuf, 25, buffer))
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
KeyIdx = simple_strtol(tmpbuf, 0, 10);
if((KeyIdx >= 1 ) && (KeyIdx <= 4))
@@ -768,7 +763,6 @@ static void rtmp_read_key_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, c
DBGPRINT(RT_DEBUG_TRACE, ("DefaultKeyID(0~3)=%d\n", pAd->StaCfg.DefaultKeyId));
}
-#endif // CONFIG_STA_SUPPORT //
}
@@ -783,8 +777,6 @@ static void rtmp_read_key_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, c
KeyType[i] = simple_strtol(macptr, 0, 10);
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
sprintf(tok_str, "Key%dStr", idx + 1);
if (RTMPGetCriticalParameter(tok_str, tmpbuf, 128, buffer))
@@ -792,13 +784,10 @@ static void rtmp_read_key_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, c
rtmp_parse_key_buffer_from_file(pAd, tmpbuf, KeyType[BSS0], BSS0, idx);
}
}
-#endif // CONFIG_STA_SUPPORT //
}
}
}
-
-#ifdef CONFIG_STA_SUPPORT
static void rtmp_read_sta_wmm_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbuf, char *buffer)
{
PUCHAR macptr;
@@ -821,23 +810,6 @@ static void rtmp_read_sta_wmm_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbu
DBGPRINT(RT_DEBUG_TRACE, ("WmmCapable=%d\n", pAd->CommonCfg.bWmmCapable));
}
-#ifdef QOS_DLS_SUPPORT
- //DLSCapable
- if(RTMPGetKeyParameter("DLSCapable", tmpbuf, 32, buffer))
- {
- if(simple_strtol(tmpbuf, 0, 10) != 0) //Enable
- {
- pAd->CommonCfg.bDLSCapable = TRUE;
- }
- else //Disable
- {
- pAd->CommonCfg.bDLSCapable = FALSE;
- }
-
- DBGPRINT(RT_DEBUG_TRACE, ("bDLSCapable=%d\n", pAd->CommonCfg.bDLSCapable));
- }
-#endif // QOS_DLS_SUPPORT //
-
//AckPolicy for AC_BK, AC_BE, AC_VI, AC_VO
if(RTMPGetKeyParameter("AckPolicy", tmpbuf, 32, buffer))
{
@@ -882,8 +854,6 @@ static void rtmp_read_sta_wmm_parms_from_file(IN PRTMP_ADAPTER pAd, char *tmpbu
}
}
-#endif // CONFIG_STA_SUPPORT //
-
NDIS_STATUS RTMPReadParametersHook(
IN PRTMP_ADAPTER pAd)
@@ -896,10 +866,7 @@ NDIS_STATUS RTMPReadParametersHook(
CHAR *tmpbuf;
ULONG RtsThresh;
ULONG FragThresh;
-#ifdef CONFIG_STA_SUPPORT
UCHAR keyMaterial[40];
-#endif // CONFIG_STA_SUPPORT //
-
PUCHAR macptr;
INT i = 0;
@@ -915,21 +882,17 @@ NDIS_STATUS RTMPReadParametersHook(
return NDIS_STATUS_FAILURE;
}
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- src = STA_PROFILE_PATH;
-#endif // CONFIG_STA_SUPPORT //
-#ifdef MULTIPLE_CARD_SUPPORT
- src = pAd->MC_FileName;
-#endif // MULTIPLE_CARD_SUPPORT //
+ src = STA_PROFILE_PATH;
// Save uid and gid used for filesystem access.
// Set user and group to 0 (root)
+#ifndef RT30xx
orgfsuid = current_fsuid();
orgfsgid = current_fsgid();
/* Hm, can't really do this nicely anymore, so rely on these files
* being set to the proper permission to read them... */
/* current->cred->fsuid = current->cred->fsgid = 0; */
+#endif
orgfs = get_fs();
set_fs(KERNEL_DS);
@@ -970,12 +933,7 @@ NDIS_STATUS RTMPReadParametersHook(
if(RTMPGetKeyParameter("CountryCode", tmpbuf, 25, buffer))
{
NdisMoveMemory(pAd->CommonCfg.CountryCode, tmpbuf , 2);
-#ifdef CONFIG_STA_SUPPORT
-#ifdef EXT_BUILD_CHANNEL_LIST
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- NdisMoveMemory(pAd->StaCfg.StaOriCountryCode, tmpbuf , 2);
-#endif // EXT_BUILD_CHANNEL_LIST //
-#endif // CONFIG_STA_SUPPORT //
+
if (strlen(pAd->CommonCfg.CountryCode) != 0)
{
pAd->CommonCfg.bCountryFlag = TRUE;
@@ -991,12 +949,6 @@ NDIS_STATUS RTMPReadParametersHook(
pAd->CommonCfg.Geography = Geography;
pAd->CommonCfg.CountryCode[2] =
(pAd->CommonCfg.Geography == BOTH) ? ' ' : ((pAd->CommonCfg.Geography == IDOR) ? 'I' : 'O');
-#ifdef CONFIG_STA_SUPPORT
-#ifdef EXT_BUILD_CHANNEL_LIST
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- pAd->StaCfg.StaOriGeography = pAd->CommonCfg.Geography;
-#endif // EXT_BUILD_CHANNEL_LIST //
-#endif // CONFIG_STA_SUPPORT //
DBGPRINT(RT_DEBUG_TRACE, ("ChannelGeography=%d\n", pAd->CommonCfg.Geography));
}
}
@@ -1006,9 +958,6 @@ NDIS_STATUS RTMPReadParametersHook(
pAd->CommonCfg.CountryCode[2] = ' ';
}
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
//SSID
if (RTMPGetCriticalParameter("SSID", tmpbuf, 256, buffer))
@@ -1028,10 +977,7 @@ NDIS_STATUS RTMPReadParametersHook(
}
}
}
-#endif // CONFIG_STA_SUPPORT //
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
//NetworkType
if (RTMPGetKeyParameter("NetworkType", tmpbuf, 25, buffer))
@@ -1046,7 +992,7 @@ NDIS_STATUS RTMPReadParametersHook(
DBGPRINT(RT_DEBUG_TRACE, ("%s::(NetworkType=%d)\n", __func__, pAd->StaCfg.BssType));
}
}
-#endif // CONFIG_STA_SUPPORT //
+
//Channel
if(RTMPGetKeyParameter("Channel", tmpbuf, 10, buffer))
{
@@ -1058,9 +1004,7 @@ NDIS_STATUS RTMPReadParametersHook(
{
int value = 0, maxPhyMode = PHY_11G;
-#ifdef DOT11_N_SUPPORT
maxPhyMode = PHY_11N_5G;
-#endif // DOT11_N_SUPPORT //
value = simple_strtol(tmpbuf, 0, 10);
@@ -1086,10 +1030,9 @@ NDIS_STATUS RTMPReadParametersHook(
if(RTMPGetKeyParameter("TxPower", tmpbuf, 10, buffer))
{
pAd->CommonCfg.TxPowerPercentage = (ULONG) simple_strtol(tmpbuf, 0, 10);
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- pAd->CommonCfg.TxPowerDefault = pAd->CommonCfg.TxPowerPercentage;
-#endif // CONFIG_STA_SUPPORT //
+
+ pAd->CommonCfg.TxPowerDefault = pAd->CommonCfg.TxPowerPercentage;
+
DBGPRINT(RT_DEBUG_TRACE, ("TxPower=%ld\n", pAd->CommonCfg.TxPowerPercentage));
}
//BGProtection
@@ -1206,11 +1149,7 @@ NDIS_STATUS RTMPReadParametersHook(
#endif // AGGREGATION_SUPPORT //
// WmmCapable
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
- rtmp_read_sta_wmm_parms_from_file(pAd, tmpbuf, buffer);
-#endif // CONFIG_STA_SUPPORT //
+ rtmp_read_sta_wmm_parms_from_file(pAd, tmpbuf, buffer);
//ShortSlot
if(RTMPGetKeyParameter("ShortSlot", tmpbuf, 10, buffer))
@@ -1313,8 +1252,6 @@ NDIS_STATUS RTMPReadParametersHook(
//AuthMode
if(RTMPGetKeyParameter("AuthMode", tmpbuf, 128, buffer))
{
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if ((strcmp(tmpbuf, "WEPAUTO") == 0) || (strcmp(tmpbuf, "wepauto") == 0))
pAd->StaCfg.AuthMode = Ndis802_11AuthModeAutoSwitch;
@@ -1326,12 +1263,10 @@ NDIS_STATUS RTMPReadParametersHook(
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;
@@ -1339,14 +1274,10 @@ NDIS_STATUS RTMPReadParametersHook(
DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __func__, pAd->StaCfg.WepStatus));
}
-#endif // CONFIG_STA_SUPPORT //
}
//EncrypType
if(RTMPGetKeyParameter("EncrypType", tmpbuf, 128, buffer))
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if ((strcmp(tmpbuf, "WEP") == 0) || (strcmp(tmpbuf, "wep") == 0))
pAd->StaCfg.WepStatus = Ndis802_11WEPEnabled;
@@ -1365,13 +1296,8 @@ NDIS_STATUS RTMPReadParametersHook(
DBGPRINT(RT_DEBUG_TRACE, ("%s::(EncrypType=%d)\n", __func__, pAd->StaCfg.WepStatus));
}
-#endif // CONFIG_STA_SUPPORT //
}
-
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
if(RTMPGetCriticalParameter("WPAPSK", tmpbuf, 512, buffer))
{
@@ -1420,38 +1346,20 @@ NDIS_STATUS RTMPReadParametersHook(
}
}
}
-#endif // CONFIG_STA_SUPPORT //
//DefaultKeyID, KeyType, KeyStr
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)
{
//PSMode
+#ifdef RT2860
if (RTMPGetKeyParameter("PSMode", tmpbuf, 32, buffer))
+#endif
+#ifdef RT2870
+ if (RTMPGetKeyParameter("PSMode", tmpbuf, 10, buffer))
+#endif
{
if (pAd->StaCfg.BssType == BSS_INFRA)
{
@@ -1534,8 +1442,23 @@ NDIS_STATUS RTMPReadParametersHook(
DBGPRINT(RT_DEBUG_TRACE, ("TGnWifiTest=%d\n", pAd->StaCfg.bTGnWifiTest));
}
}
-#endif // CONFIG_STA_SUPPORT //
+#ifdef RT30xx
+ {
+ if(RTMPGetKeyParameter("AntDiversity", tmpbuf, 10, buffer))
+ {
+ for (i = 0, macptr = rstrtok(tmpbuf,";"); macptr; macptr = rstrtok(NULL,";"), i++)
+ {
+ if(simple_strtol(macptr, 0, 10) != 0) //Enable
+ pAd->CommonCfg.bRxAntDiversity = TRUE;
+ else //Disable
+ pAd->CommonCfg.bRxAntDiversity = FALSE;
+
+ DBGPRINT(RT_DEBUG_ERROR, ("AntDiversity=%d\n", pAd->CommonCfg.bRxAntDiversity));
+ }
+ }
+ }
+#endif // RT30xx //
}
}
else
@@ -1554,18 +1477,12 @@ NDIS_STATUS RTMPReadParametersHook(
set_fs(orgfs);
-#if 0
- current->cred->fsuid = orgfsuid;
- current->cred->fsgid = orgfsgid;
-#endif
-
kfree(buffer);
kfree(tmpbuf);
return (NDIS_STATUS_SUCCESS);
}
-#ifdef DOT11_N_SUPPORT
static void HTParametersHook(
IN PRTMP_ADAPTER pAd,
IN CHAR *pValueStr,
@@ -1654,12 +1571,21 @@ static void HTParametersHook(
if (Value == 0)
{
pAd->CommonCfg.BACapability.field.AutoBA = FALSE;
+#ifdef RT30xx
+ pAd->CommonCfg.BACapability.field.Policy = BA_NOTUSE;
+#endif
}
else
{
pAd->CommonCfg.BACapability.field.AutoBA = TRUE;
+#ifdef RT30xx
+ pAd->CommonCfg.BACapability.field.Policy = IMMED_BA;
+#endif
}
pAd->CommonCfg.REGBACapability.field.AutoBA = pAd->CommonCfg.BACapability.field.AutoBA;
+#ifdef RT30xx
+ pAd->CommonCfg.REGBACapability.field.Policy = pAd->CommonCfg.BACapability.field.Policy;
+#endif
DBGPRINT(RT_DEBUG_TRACE, ("HT: Auto BA = %s\n", (Value==0) ? "Disable" : "Enable"));
}
@@ -1804,8 +1730,6 @@ static void HTParametersHook(
{
UCHAR fix_tx_mode;
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
fix_tx_mode = FIXED_TXMODE_HT;
@@ -1837,7 +1761,6 @@ static void HTParametersHook(
DBGPRINT(RT_DEBUG_TRACE, ("Fixed Tx Mode = %d\n", fix_tx_mode));
}
-#endif // CONFIG_STA_SUPPORT //
}
@@ -1882,9 +1805,6 @@ static void HTParametersHook(
// MSC
if (RTMPGetKeyParameter("HT_MCS", pValueStr, 50, pInput))
{
-
-#ifdef CONFIG_STA_SUPPORT
- IF_DEV_CONFIG_OPMODE_ON_STA(pAd)
{
Value = simple_strtol(pValueStr, 0, 10);
@@ -1901,7 +1821,6 @@ static void HTParametersHook(
DBGPRINT(RT_DEBUG_TRACE, ("HT: MCS = AUTO\n"));
}
}
-#endif // CONFIG_STA_SUPPORT //
}
// STBC
@@ -1977,5 +1896,3 @@ static void HTParametersHook(
}
}
-#endif // DOT11_N_SUPPORT //
-
diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h
index b904b7886c28..25c31998d071 100644
--- a/drivers/staging/rt2860/rtmp.h
+++ b/drivers/staging/rt2860/rtmp.h
@@ -43,25 +43,112 @@
#include "link_list.h"
#include "spectrum_def.h"
-
-#ifdef CONFIG_STA_SUPPORT
#include "aironet.h"
-#endif // CONFIG_STA_SUPPORT //
//#define DBG_DIAGNOSE 1
-#if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
-#define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
-#define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
-#else
-#define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
-#define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
-#endif
-
#define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
#define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
#define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
+#ifdef RT2870
+////////////////////////////////////////////////////////////////////////////
+// The TX_BUFFER structure forms the transmitted USB packet to the device
+////////////////////////////////////////////////////////////////////////////
+typedef struct __TX_BUFFER{
+ union {
+ UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
+ HEADER_802_11 NullFrame;
+ PSPOLL_FRAME PsPollPacket;
+ RTS_FRAME RTSFrame;
+ }field;
+ UCHAR Aggregation[4]; //Buffer for save Aggregation size.
+} TX_BUFFER, *PTX_BUFFER;
+
+typedef struct __HTTX_BUFFER{
+ union {
+ UCHAR WirelessPacket[MAX_TXBULK_SIZE];
+ HEADER_802_11 NullFrame;
+ PSPOLL_FRAME PsPollPacket;
+ RTS_FRAME RTSFrame;
+ }field;
+ UCHAR Aggregation[4]; //Buffer for save Aggregation size.
+} HTTX_BUFFER, *PHTTX_BUFFER;
+
+
+// used to track driver-generated write irps
+typedef struct _TX_CONTEXT
+{
+ PVOID pAd; //Initialized in MiniportInitialize
+ PURB pUrb; //Initialized in MiniportInitialize
+ PIRP pIrp; //used to cancel pending bulk out.
+ //Initialized in MiniportInitialize
+ PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
+ ULONG BulkOutSize;
+ UCHAR BulkOutPipeId;
+ UCHAR SelfIdx;
+ BOOLEAN InUse;
+ BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
+ BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
+ BOOLEAN IRPPending;
+ BOOLEAN LastOne;
+ BOOLEAN bAggregatible;
+ UCHAR Header_802_3[LENGTH_802_3];
+ UCHAR Rsv[2];
+ ULONG DataOffset;
+ UINT TxRate;
+ dma_addr_t data_dma; // urb dma on linux
+
+} TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
+
+
+// used to track driver-generated write irps
+typedef struct _HT_TX_CONTEXT
+{
+ PVOID pAd; //Initialized in MiniportInitialize
+ PURB pUrb; //Initialized in MiniportInitialize
+ PIRP pIrp; //used to cancel pending bulk out.
+ //Initialized in MiniportInitialize
+ PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
+ ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
+ UCHAR BulkOutPipeId;
+ BOOLEAN IRPPending;
+ BOOLEAN LastOne;
+ BOOLEAN bCurWriting;
+ BOOLEAN bRingEmpty;
+ BOOLEAN bCopySavePad;
+ UCHAR SavedPad[8];
+ UCHAR Header_802_3[LENGTH_802_3];
+ ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
+ ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
+ ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
+ ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
+ UINT TxRate;
+ dma_addr_t data_dma; // urb dma on linux
+} HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
+
+
+//
+// Structure to keep track of receive packets and buffers to indicate
+// receive data to the protocol.
+//
+typedef struct _RX_CONTEXT
+{
+ PUCHAR TransferBuffer;
+ PVOID pAd;
+ PIRP pIrp;//used to cancel pending bulk in.
+ PURB pUrb;
+ //These 2 Boolean shouldn't both be 1 at the same time.
+ ULONG BulkInOffset; // number of packets waiting for reordering .
+ BOOLEAN bRxHandling; // Notify this packet is being process now.
+ BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
+ BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
+ BOOLEAN IRPPending; // TODO: To be removed
+ atomic_t IrpLock;
+ NDIS_SPIN_LOCK RxContextLock;
+ dma_addr_t data_dma; // urb dma on linux
+} RX_CONTEXT, *PRX_CONTEXT;
+#endif // RT2870 //
//
@@ -136,14 +223,9 @@ 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;
@@ -152,9 +234,15 @@ extern UCHAR WpaIe;
extern UCHAR Wpa2Ie;
extern UCHAR IbssIe;
extern UCHAR Ccx2Ie;
+#ifdef RT30xx
+extern UCHAR WapiIe;
+#endif
extern UCHAR WPA_OUI[];
extern UCHAR RSN_OUI[];
+#ifdef RT30xx
+extern UCHAR WAPI_OUI[];
+#endif
extern UCHAR WME_INFO_ELEM[];
extern UCHAR WME_PARM_ELEM[];
extern UCHAR Ccx2QosInfo[];
@@ -168,7 +256,6 @@ extern UCHAR RateSwitchTable11B[];
extern UCHAR RateSwitchTable11G[];
extern UCHAR RateSwitchTable11BG[];
-#ifdef DOT11_N_SUPPORT
extern UCHAR RateSwitchTable11BGN1S[];
extern UCHAR RateSwitchTable11BGN2S[];
extern UCHAR RateSwitchTable11BGN2SForABand[];
@@ -176,97 +263,10 @@ extern UCHAR RateSwitchTable11N1S[];
extern UCHAR RateSwitchTable11N2S[];
extern UCHAR RateSwitchTable11N2SForABand[];
-#ifdef CONFIG_STA_SUPPORT
extern UCHAR PRE_N_HT_OUI[];
-#endif // CONFIG_STA_SUPPORT //
-#endif // DOT11_N_SUPPORT //
#define MAXSEQ (0xFFF)
-#ifdef RALINK_ATE
-typedef struct _ATE_INFO {
- UCHAR Mode;
- CHAR TxPower0;
- CHAR TxPower1;
- CHAR TxAntennaSel;
- CHAR RxAntennaSel;
- TXWI_STRUC TxWI; // TXWI
- USHORT QID;
- UCHAR Addr1[MAC_ADDR_LEN];
- UCHAR Addr2[MAC_ADDR_LEN];
- UCHAR Addr3[MAC_ADDR_LEN];
- UCHAR Channel;
- UINT32 TxLength;
- UINT32 TxCount;
- UINT32 TxDoneCount; // Tx DMA Done
- UINT32 RFFreqOffset;
- BOOLEAN bRxFer;
- BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
- BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
- BOOLEAN bFWLoading; // Reload firmware when ATE is done.
- UINT32 RxTotalCnt;
- UINT32 RxCntPerSec;
-
- CHAR LastSNR0; // last received SNR
- CHAR LastSNR1; // last received SNR for 2nd antenna
- CHAR LastRssi0; // last received RSSI
- CHAR LastRssi1; // last received RSSI for 2nd antenna
- CHAR LastRssi2; // last received RSSI for 3rd antenna
- CHAR AvgRssi0; // last 8 frames' average RSSI
- CHAR AvgRssi1; // last 8 frames' average RSSI
- CHAR AvgRssi2; // last 8 frames' average RSSI
- SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
- SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
- SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
-
- UINT32 NumOfAvgRssiSample;
-
-#ifdef RALINK_28xx_QA
- // Tx frame
- USHORT HLen; // Header Length
- USHORT PLen; // Pattern Length
- UCHAR Header[32]; // Header buffer
- UCHAR Pattern[32]; // Pattern buffer
- USHORT DLen; // Data Length
- USHORT seq;
- UINT32 CID;
- THREAD_PID AtePid;
- // counters
- UINT32 U2M;
- UINT32 OtherData;
- UINT32 Beacon;
- UINT32 OtherCount;
- UINT32 TxAc0;
- UINT32 TxAc1;
- UINT32 TxAc2;
- UINT32 TxAc3;
- UINT32 TxHCCA;
- UINT32 TxMgmt;
- UINT32 RSSI0;
- UINT32 RSSI1;
- UINT32 RSSI2;
- UINT32 SNR0;
- UINT32 SNR1;
- // control
- //UINT32 Repeat; // Tx Cpu count
- UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
-#endif // RALINK_28xx_QA //
-} ATE_INFO, *PATE_INFO;
-
-#ifdef RALINK_28xx_QA
-struct ate_racfghdr {
- UINT32 magic_no;
- USHORT command_type;
- USHORT command_id;
- USHORT length;
- USHORT sequence;
- USHORT status;
- UCHAR data[2046];
-} __attribute__((packed));
-#endif // RALINK_28xx_QA //
-#endif // RALINK_ATE //
-
-#ifdef DOT11_N_SUPPORT
struct reordering_mpdu
{
struct reordering_mpdu *next;
@@ -287,7 +287,6 @@ 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
@@ -364,12 +363,14 @@ typedef struct _QUEUE_HEADER {
#define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
#define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
+#ifdef RT2860
// Macro for power save flag.
#define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
#define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
#define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
#define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
#define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
+#endif
#define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
#define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
@@ -383,14 +384,12 @@ typedef struct _QUEUE_HEADER {
#define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
#define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
-#ifdef CONFIG_STA_SUPPORT
#define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
#define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
#define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
#define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
#define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
-#endif // CONFIG_STA_SUPPORT //
#define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
#define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
@@ -401,7 +400,17 @@ typedef struct _QUEUE_HEADER {
(_idx) = (_idx+1) % (_RingSize); \
}
+#ifdef RT30xx
+// We will have a cost down version which mac version is 0x3090xxxx
+#define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
+#endif
#define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
+#ifdef RT30xx
+#define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
+#define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
+
+#define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
+#endif
#define RING_PACKET_INIT(_TxRing, _idx) \
{ \
@@ -437,7 +446,6 @@ typedef struct _QUEUE_HEADER {
} \
}
-#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) \
{ \
@@ -461,7 +469,6 @@ 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
@@ -483,6 +490,7 @@ typedef struct _QUEUE_HEADER {
//
#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
//
+#ifdef RT2860
#define RTMP_RF_IO_WRITE32(_A, _V) \
{ \
PHY_CSR4_STRUC Value; \
@@ -646,7 +654,20 @@ typedef struct _QUEUE_HEADER {
} \
} \
}
+#endif /* RT2860 */
+#ifdef RT2870
+#define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
+#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
+#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
+#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
+#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
+#endif // RT2870 //
+
+#ifdef RT30xx
+#define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
+#define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
+#endif // RT30xx //
#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
switch (ch) \
@@ -897,6 +918,7 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
// Enqueue this frame to MLME engine
// We need to enqueue the whole frame because MLME need to pass data type
// information from 802.11 header
+#ifdef RT2860
#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
{ \
UINT32 High32TSF, Low32TSF; \
@@ -904,6 +926,49 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
}
+#endif
+#ifdef RT2870
+#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
+{ \
+ UINT32 High32TSF=0, Low32TSF=0; \
+ MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
+}
+#endif // RT2870 //
+
+#ifdef RT30xx
+//Need to collect each ant's rssi concurrently
+//rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
+#define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
+{ \
+ SHORT AvgRssi; \
+ UCHAR UsedAnt; \
+ if (_pAd->RxAnt.EvaluatePeriod == 0) \
+ { \
+ UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
+ AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
+ if (AvgRssi < 0) \
+ AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
+ else \
+ AvgRssi = _rssi1 << 3; \
+ _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
+ } \
+ else \
+ { \
+ UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
+ AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
+ if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
+ AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
+ else \
+ { \
+ _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
+ AvgRssi = _rssi1 << 3; \
+ } \
+ _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
+ _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
+ } \
+}
+#endif // RT30xx //
+
#define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
@@ -916,7 +981,7 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
//
#define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
-#ifdef CONFIG_STA_SUPPORT
+#ifdef RT2860
#define STA_PORT_SECURED(_pAd) \
{ \
_pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
@@ -925,8 +990,16 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
_pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
}
-#endif // CONFIG_STA_SUPPORT //
-
+#endif
+#ifdef RT2870
+#define STA_PORT_SECURED(_pAd) \
+{ \
+ _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
+ NdisAcquireSpinLock(&_pAd->MacTabLock); \
+ _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
+ NdisReleaseSpinLock(&_pAd->MacTabLock); \
+}
+#endif
//
// Register set pair for initialzation register set definition
@@ -975,17 +1048,10 @@ typedef struct _RTMP_DMABUF
typedef union _HEADER_802_11_SEQ{
-#ifdef RT_BIG_ENDIAN
- struct {
- USHORT Sequence:12;
- USHORT Frag:4;
- } field;
-#else
struct {
USHORT Frag:4;
USHORT Sequence:12;
} field;
-#endif
USHORT value;
} HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
@@ -1002,7 +1068,12 @@ typedef struct _RTMP_REORDERBUF
UCHAR DataOffset;
USHORT Datasize;
ULONG AllocSize;
+#ifdef RT2860
NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
+#endif
+#ifdef RT2870
+ PUCHAR AllocPa;
+#endif // RT2870 //
} RTMP_REORDERBUF, *PRTMP_REORDERBUF;
//
@@ -1101,7 +1172,9 @@ typedef struct _COUNTER_802_11 {
typedef struct _COUNTER_RALINK {
ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
+#ifdef RT2860
ULONG LastReceivedByteCount;
+#endif
ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
ULONG BeenDisassociatedCount;
ULONG BadCQIAutoRecoveryCount;
@@ -1124,6 +1197,9 @@ typedef struct _COUNTER_RALINK {
UINT32 OneSecFrameDuplicateCount;
+#ifdef RT2870
+ ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
+#endif // RT2870 //
UINT32 OneSecTxNoRetryOkCount;
UINT32 OneSecTxRetryOkCount;
@@ -1197,15 +1273,6 @@ typedef struct _ARCFOUR
// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
typedef struct _RECEIVE_SETTING {
-#ifdef RT_BIG_ENDIAN
- USHORT MIMO:1;
- USHORT OFDM:1;
- USHORT rsv:3;
- USHORT STBC:2; //SPACE
- USHORT ShortGI:1;
- USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
- USHORT NumOfRX:2; // MIMO. WE HAVE 3R
-#else
USHORT NumOfRX:2; // MIMO. WE HAVE 3R
USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
USHORT ShortGI:1;
@@ -1213,7 +1280,6 @@ typedef struct _RECEIVE_SETTING {
USHORT rsv:3;
USHORT OFDM:1;
USHORT MIMO:1;
-#endif
} RECEIVE_SETTING, *PRECEIVE_SETTING;
// Shared key data structure
@@ -1230,9 +1296,7 @@ typedef struct _CIPHER_KEY {
UCHAR RxTsc[6]; // 48bit TSC value
UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
UCHAR KeyLen;
-#ifdef CONFIG_STA_SUPPORT
UCHAR BssId[6];
-#endif // CONFIG_STA_SUPPORT //
// Key length for each key, 0: entry is invalid
UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
} CIPHER_KEY, *PCIPHER_KEY;
@@ -1248,6 +1312,9 @@ typedef struct _BBP_TUNING_STRUCT {
typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
+#ifdef RT30xx
+ UCHAR EvaluateStableCnt;
+#endif
UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
@@ -1368,9 +1435,6 @@ typedef struct _BBP_R66_TUNING {
typedef struct _CHANNEL_TX_POWER {
USHORT RemainingTimeForUse; //unit: sec
UCHAR Channel;
-#ifdef DOT11N_DRAFT3
- BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
-#endif // DOT11N_DRAFT3 //
CHAR Power;
CHAR Power2;
UCHAR MaxTxPwr;
@@ -1393,7 +1457,6 @@ typedef enum _ABGBAND_STATE_ {
} ABGBAND_STATE;
typedef struct _MLME_STRUCT {
-#ifdef CONFIG_STA_SUPPORT
// STA state machines
STATE_MACHINE CntlMachine;
STATE_MACHINE AssocMachine;
@@ -1409,20 +1472,10 @@ typedef struct _MLME_STRUCT {
STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
-#endif // CONFIG_STA_SUPPORT //
STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
// Action
STATE_MACHINE ActMachine;
-
-#ifdef QOS_DLS_SUPPORT
- STATE_MACHINE DlsMachine;
- STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
-#endif // QOS_DLS_SUPPORT //
-
-
-
-
ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
ULONG Now32; // latch the value of NdisGetSystemUpTime()
ULONG LastSendNULLpsmTime;
@@ -1437,9 +1490,11 @@ typedef struct _MLME_STRUCT {
RALINK_TIMER_STRUCT APSDPeriodicTimer;
RALINK_TIMER_STRUCT LinkDownTimer;
RALINK_TIMER_STRUCT LinkUpTimer;
+#ifdef RT2860
UCHAR bPsPollTimerRunning;
RALINK_TIMER_STRUCT PsPollTimer;
RALINK_TIMER_STRUCT RadioOnOffTimer;
+#endif
ULONG PeriodicRound;
ULONG OneSecPeriodicRound;
@@ -1448,7 +1503,10 @@ typedef struct _MLME_STRUCT {
BOOLEAN bEnableAutoAntennaCheck;
RALINK_TIMER_STRUCT RxAntEvalTimer;
-
+#ifdef RT2870
+ UCHAR CaliBW40RfR24;
+ UCHAR CaliBW20RfR24;
+#endif // RT2870 //
} MLME_STRUCT, *PMLME_STRUCT;
// structure for radar detection and channel switch
@@ -1471,23 +1529,6 @@ typedef struct _RADAR_DETECT_STRUCT {
UINT8 LongPulseRadarTh;
} RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
-#ifdef CARRIER_DETECTION_SUPPORT
-typedef enum CD_STATE_n
-{
- CD_NORMAL,
- CD_SILENCE,
- CD_MAX_STATE
-} CD_STATE;
-
-typedef struct CARRIER_DETECTION_s
-{
- BOOLEAN Enable;
- UINT8 CDSessionTime;
- UINT8 CDPeriod;
- CD_STATE CD_State;
-} CARRIER_DETECTION, *PCARRIER_DETECTION;
-#endif // CARRIER_DETECTION_SUPPORT //
-
typedef enum _REC_BLOCKACK_STATUS
{
Recipient_NONE=0,
@@ -1504,7 +1545,6 @@ 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;
@@ -1568,21 +1608,6 @@ typedef struct _QUERYBA_TABLE{
} QUERYBA_TABLE, *PQUERYBA_TABLE;
typedef union _BACAP_STRUC {
-#ifdef RT_BIG_ENDIAN
- struct {
- UINT32 :4;
- UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
- UINT32 bHtAdhoc:1; // adhoc can use ht rate.
- UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
- UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
- UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
- UINT32 MpduDensity:3;
- UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
- UINT32 AutoBA:1; // automatically BA
- UINT32 TxBAWinLimit:8;
- UINT32 RxBAWinLimit:8;
- } field;
-#else
struct {
UINT32 RxBAWinLimit:8;
UINT32 TxBAWinLimit:8;
@@ -1596,10 +1621,8 @@ typedef union _BACAP_STRUC {
UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
UINT32 :4;
} field;
-#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 {
@@ -1614,30 +1637,15 @@ typedef struct _IOT_STRUC {
UCHAR RTSShortProt;
UCHAR RTSLongProt;
BOOLEAN bRTSLongProtOn;
-#ifdef CONFIG_STA_SUPPORT
BOOLEAN bLastAtheros;
BOOLEAN bCurrentAtheros;
BOOLEAN bNowAtherosBurstOn;
BOOLEAN bNextDisableRxBA;
BOOLEAN bToggle;
-#endif // CONFIG_STA_SUPPORT //
} IOT_STRUC, *PIOT_STRUC;
// This is the registry setting for 802.11n transmit setting. Used in advanced page.
typedef union _REG_TRANSMIT_SETTING {
-#ifdef RT_BIG_ENDIAN
- struct {
- UINT32 rsv:13;
- UINT32 EXTCHA:2;
- UINT32 HTMODE:1;
- UINT32 TRANSNO:2;
- UINT32 STBC:1; //SPACE
- UINT32 ShortGI:1;
- UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
- UINT32 TxBF:1; // 3*3
- UINT32 rsv0:10;
- } field;
-#else
struct {
UINT32 rsv0:10;
UINT32 TxBF:1;
@@ -1649,26 +1657,16 @@ typedef union _REG_TRANSMIT_SETTING {
UINT32 EXTCHA:2;
UINT32 rsv:13;
} field;
-#endif
UINT32 word;
} REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
typedef union _DESIRED_TRANSMIT_SETTING {
-#ifdef RT_BIG_ENDIAN
- struct {
- USHORT rsv:3;
- USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
- USHORT PhyMode:4;
- USHORT MCS:7; // MCS
- } field;
-#else
struct {
USHORT MCS:7; // MCS
USHORT PhyMode:4;
USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
USHORT rsv:3;
} field;
-#endif
USHORT word;
} DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
@@ -1707,6 +1705,19 @@ typedef struct {
UCHAR bit_offset = wcid & 0x7; \
ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
+#ifdef RT2870
+#define BEACON_BITMAP_MASK 0xff
+typedef struct _BEACON_SYNC_STRUCT_
+{
+ UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
+ UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
+ ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
+ ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
+ BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
+ UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
+ UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
+}BEACON_SYNC_STRUCT;
+#endif // RT2870 //
typedef struct _MULTISSID_STRUCT {
UCHAR Bssid[MAC_ADDR_LEN];
@@ -1813,17 +1824,6 @@ typedef struct _MULTISSID_STRUCT {
UCHAR BcnBufIdx;
} MULTISSID_STRUCT, *PMULTISSID_STRUCT;
-
-
-#ifdef DOT11N_DRAFT3
-typedef enum _BSS2040COEXIST_FLAG{
- BSS_2040_COEXIST_DISABLE = 0,
- BSS_2040_COEXIST_TIMER_FIRED = 1,
- BSS_2040_COEXIST_INFO_SYNC = 2,
- BSS_2040_COEXIST_INFO_NOTIFY = 4,
-}BSS2040COEXIST_FLAG;
-#endif // DOT11N_DRAFT3 //
-
// configuration common to OPMODE_AP as well as OPMODE_STA
typedef struct _COMMON_CONFIG {
@@ -1886,10 +1886,9 @@ 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
@@ -1901,17 +1900,14 @@ 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
QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
-#ifdef CONFIG_STA_SUPPORT
BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
-#endif // CONFIG_STA_SUPPORT //
// a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
// BOOLEAN control, either ON or OFF. These flags should always be accessed via
// OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
@@ -1920,15 +1916,13 @@ typedef struct _COMMON_CONFIG {
BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
+#ifdef RT30xx
+ BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
+#endif
// 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;
@@ -1939,33 +1933,6 @@ typedef struct _COMMON_CONFIG {
//This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present
-#ifdef DOT11N_DRAFT3
- UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
- RALINK_TIMER_STRUCT Bss2040CoexistTimer;
-
- //This IE is used for 20/40 BSS Coexistence.
- BSS_2040_COEXIST_IE BSS2040CoexistInfo;
- // ====== 11n D3.0 =======================>
- USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
- USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
- USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
- USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
- USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
- USHORT Dot11BssWidthChanTranDelayFactor;
- USHORT Dot11OBssScanActivityThre; // Unit : percentage
-
- ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
- ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
-
- 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;
@@ -1976,7 +1943,6 @@ typedef struct _COMMON_CONFIG {
ULONG LastRcvBSSWidthTriggerEventsTime;
UCHAR TxBASize;
-#endif // DOT11_N_SUPPORT //
// Enable wireless event
BOOLEAN bWirelessEvent;
@@ -1994,6 +1960,20 @@ typedef struct _COMMON_CONFIG {
BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
+#ifdef RT2870
+ BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
+ UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
+ RT_HT_CAPABILITY SupportedHtPhy;
+ ULONG MaxPktOneTxBulk;
+ UCHAR TxBulkFactor;
+ UCHAR RxBulkFactor;
+
+ BEACON_SYNC_STRUCT *pBeaconSync;
+ RALINK_TIMER_STRUCT BeaconUpdateTimer;
+ UINT32 BeaconAdjust;
+ UINT32 BeaconFactor;
+ UINT32 BeaconRemain;
+#endif // RT2870 //
NDIS_SPIN_LOCK MeasureReqTabLock;
@@ -2006,16 +1986,8 @@ typedef struct _COMMON_CONFIG {
#ifdef MCAST_RATE_SPECIFIC
HTTRANSMIT_SETTING MCastPhyMode;
#endif // MCAST_RATE_SPECIFIC //
-
-#ifdef SINGLE_SKU
- UINT16 DefineMaxTxPwr;
-#endif // SINGLE_SKU //
-
-
} COMMON_CONFIG, *PCOMMON_CONFIG;
-
-#ifdef CONFIG_STA_SUPPORT
/* Modified by Wu Xi-Kun 4/21/2006 */
// STA configuration and status
typedef struct _STA_ADMIN_CONFIG {
@@ -2103,11 +2075,11 @@ typedef struct _STA_ADMIN_CONFIG {
BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
-
+#ifdef RT2860
BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
-
+#endif
// New for WPA, windows want us to to keep association information and
// Fixed IEs from last association response
NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
@@ -2189,10 +2161,6 @@ typedef struct _STA_ADMIN_CONFIG {
UCHAR DtimCount; // 0.. DtimPeriod-1
UCHAR DtimPeriod; // default = 3
-#ifdef QOS_DLS_SUPPORT
- RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
- UCHAR DlsReplayCounter[8];
-#endif // QOS_DLS_SUPPORT //
////////////////////////////////////////////////////////////////////////////////////////
// This is only for WHQL test.
BOOLEAN WhqlTest;
@@ -2203,7 +2171,6 @@ typedef struct _STA_ADMIN_CONFIG {
BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
-#ifdef WPA_SUPPLICANT_SUPPORT
BOOLEAN IEEE8021X;
BOOLEAN IEEE8021x_required_keys;
CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
@@ -2214,7 +2181,6 @@ typedef struct _STA_ADMIN_CONFIG {
// 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
UCHAR WpaSupplicantUP;
UCHAR WpaSupplicantScanCount;
-#endif // WPA_SUPPLICANT_SUPPORT //
CHAR dev_name[16];
USHORT OriDevType;
@@ -2227,13 +2193,9 @@ typedef struct _STA_ADMIN_CONFIG {
RT_HT_PHY_INFO DesiredHtPhyInfo;
BOOLEAN bAutoTxRateSwitch;
+#ifdef RT2860
UCHAR BBPR3;
-
-#ifdef EXT_BUILD_CHANNEL_LIST
- UCHAR IEEE80211dClientMode;
- UCHAR StaOriCountryCode[3];
- UCHAR StaOriGeography;
-#endif // EXT_BUILD_CHANNEL_LIST //
+#endif
} STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
// This data structure keep the current active BSS/IBSS's configuration that this STA
@@ -2259,7 +2221,15 @@ typedef struct _STA_ACTIVE_CONFIG {
RT_HT_PHY_INFO SupportedPhyInfo;
RT_HT_CAPABILITY SupportedHtPhy;
} STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
-#endif // CONFIG_STA_SUPPORT //
+
+#ifdef RT2870
+// for USB interface, avoid in interrupt when write key
+typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
+ NDIS_802_11_MAC_ADDRESS MacAddr;
+ USHORT MacTabMatchWCID; // ASIC
+ CIPHER_KEY CipherKey;
+} RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
+#endif // RT2870 //
// ----------- start of AP --------------------------
// AUTH-RSP State Machine Aux data structure
@@ -2325,14 +2295,11 @@ 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;
UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
UINT TxBFCount; // 3*3
-#endif // DOT11_N_SUPPORT //
UINT FIFOCount;
UINT DebugFIFOCount;
UINT DebugTxCount;
@@ -2356,14 +2323,6 @@ typedef struct _MAC_TABLE_ENTRY {
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
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
-
BOOLEAN fNoisyEnvironment;
BOOLEAN fLastSecAccordingRSSI;
UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
@@ -2377,10 +2336,8 @@ typedef struct _MAC_TABLE_ENTRY {
// 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
@@ -2398,11 +2355,6 @@ typedef struct _MAC_TABLE_ENTRY {
HT_CAPABILITY_IE HTCapability;
-#ifdef DOT11N_DRAFT3
- UCHAR BSS2040CoexistenceMgmtSupport;
-#endif // DOT11N_DRAFT3 //
-#endif // DOT11_N_SUPPORT //
-
BOOLEAN bAutoTxRateSwitch;
UCHAR RateLen;
@@ -2416,6 +2368,9 @@ typedef struct _MAC_TABLE_ENTRY {
UINT32 TXMCSSuccessful[16];
UINT32 TXMCSFailed[16];
UINT32 TXMCSAutoFallBack[16][16];
+#ifdef RT2870
+ ULONG LastBeaconRxTime;
+#endif
} MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
typedef struct _MAC_TABLE {
@@ -2427,16 +2382,16 @@ typedef struct _MAC_TABLE {
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
+#ifdef RT2870
+ BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
+#endif
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 fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
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)
@@ -2445,7 +2400,6 @@ 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;
@@ -2549,10 +2503,6 @@ 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;
@@ -2561,14 +2511,6 @@ typedef struct _APCLI_STRUCT {
// ----------- end of AP ----------------------------
-#ifdef BLOCK_NET_IF
-typedef struct _BLOCK_QUEUE_ENTRY
-{
- BOOLEAN SwTxQueueBlockFlag;
- LIST_HEADER NetIfList;
-} BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
-#endif // BLOCK_NET_IF //
-
struct wificonf
{
BOOLEAN bShortGI;
@@ -2600,28 +2542,6 @@ typedef struct _INF_USB_CONFIG
};
#endif // IKANOS_VX_1X0 //
-#ifdef NINTENDO_AP
-typedef struct _NINDO_CTRL_BLOCK {
-
- RT_NINTENDO_TABLE DS_TABLE;
-
-#ifdef CHIP25XX
- spinlock_t NINTENDO_TABLE_Lock;
-#else
- NDIS_SPIN_LOCK NINTENDO_TABLE_Lock;
-#endif // CHIP25XX //
-
- UCHAR NINTENDO_UP_BUFFER[512];
- UCHAR Local_KeyIdx;
- CIPHER_KEY Local_SharedKey;
- UCHAR Local_bHideSsid;
- UCHAR Local_AuthMode;
- UCHAR Local_WepStatus;
- USHORT Local_CapabilityInfo;
-} NINDO_CTRL_BLOCK;
-#endif // NINTENDO_AP //
-
-
#ifdef DBG_DIAGNOSE
#define DIAGNOSE_TIME 10 // 10 sec
typedef struct _RtmpDiagStrcut_
@@ -2660,6 +2580,7 @@ typedef struct _RTMP_ADAPTER
PNET_DEV net_dev;
ULONG VirtualIfCnt;
+#ifdef RT2860
USHORT LnkCtrlBitMask;
USHORT RLnkCtrlConfiguration;
USHORT RLnkCtrlOffset;
@@ -2686,11 +2607,51 @@ typedef struct _RTMP_ADAPTER
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
-
+#endif
NDIS_SPIN_LOCK irq_lock;
UCHAR irq_disabled;
+#ifdef RT2870
+/*****************************************************************************************/
+/* USB related parameters */
+/*****************************************************************************************/
+ struct usb_config_descriptor *config;
+ UINT BulkInEpAddr; // bulk-in endpoint address
+ UINT BulkOutEpAddr[6]; // bulk-out endpoint address
+
+ UINT NumberOfPipes;
+ USHORT BulkOutMaxPacketSize;
+ USHORT BulkInMaxPacketSize;
+
+ //======Control Flags
+ LONG PendingIoCount;
+ ULONG BulkFlags;
+ BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
+
+
+ //======Timer Thread
+ RT2870_TIMER_QUEUE TimerQ;
+ NDIS_SPIN_LOCK TimerQLock;
+
+
+ //======Cmd Thread
+ CmdQ CmdQ;
+ NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
+
+ BOOLEAN TimerFunc_kill;
+ BOOLEAN mlme_kill;
+
+
+ //======Semaphores (event)
+ struct semaphore mlme_semaphore; /* to sleep thread on */
+ struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
+ struct semaphore RTUSBTimer_semaphore;
+ struct completion TimerQComplete;
+ struct completion mlmeComplete;
+ struct completion CmdQComplete;
+ wait_queue_head_t *wait;
+#endif // RT2870 //
/*****************************************************************************************/
@@ -2704,6 +2665,22 @@ typedef struct _RTMP_ADAPTER
BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
+#ifdef RT2870
+ // Data related context and AC specified, 4 AC supported
+ NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
+ NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
+
+ HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
+ NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
+
+ // 4 sets of Bulk Out index and pending flag
+ UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
+
+ BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
+ UCHAR bulkResetPipeid;
+ BOOLEAN MgmtBulkPending;
+ ULONG bulkResetReq[6];
+#endif // RT2870 //
// resource for software backlog queues
QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
@@ -2717,10 +2694,20 @@ typedef struct _RTMP_ADAPTER
/*****************************************************************************************/
/* Rx related parameters */
/*****************************************************************************************/
-
+#ifdef RT2860
RTMP_RX_RING RxRing;
NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
-
+#endif
+#ifdef RT2870
+ RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
+ NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
+ UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
+ UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
+ UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
+ ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
+ ULONG TransferBufferLength; // current length of the packet buffer
+ ULONG ReadPosition; // current read position in a packet buffer
+#endif // RT2870 //
/*****************************************************************************************/
@@ -2734,6 +2721,10 @@ typedef struct _RTMP_ADAPTER
ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
+#ifdef RT30xx
+ BOOLEAN EepromAccess;
+ UCHAR EFuseTag;
+#endif
ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
// ---------------------------
@@ -2826,11 +2817,19 @@ typedef struct _RTMP_ADAPTER
PSPOLL_FRAME PsPollFrame;
HEADER_802_11 NullFrame;
+#ifdef RT2870
+ TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
+ TX_CONTEXT NullContext;
+ TX_CONTEXT PsPollContext;
+ TX_CONTEXT RTSContext;
+#endif // RT2870 //
+
+
+
//=========AP===========
//=======STA===========
-#ifdef CONFIG_STA_SUPPORT
/* Modified by Wu Xi-Kun 4/21/2006 */
// -----------------------------------------------
// STA specific configuration & operation status
@@ -2840,7 +2839,6 @@ typedef struct _RTMP_ADAPTER
STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
NDIS_MEDIA_STATE PreMediaState;
-#endif // CONFIG_STA_SUPPORT //
//=======Common===========
// OP mode: either AP or STA
@@ -2848,7 +2846,6 @@ typedef struct _RTMP_ADAPTER
NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
- // MAT related parameters
// configuration: read from Registry & E2PROM
BOOLEAN bLocalAdminMAC; // Use user changed MAC
@@ -2869,9 +2866,8 @@ 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;
@@ -2890,16 +2886,13 @@ typedef struct _RTMP_ADAPTER
// flags, see fRTMP_ADAPTER_xxx flags
ULONG Flags; // Represent current device status
+#ifdef RT2860
ULONG PSFlags; // Power Save operation flag.
+#endif
// current TX sequence #
USHORT Sequence;
-#ifdef UNDER_CE
- NDIS_HANDLE hGiISR;
-#endif
-
-
// Control disconnect / connect event generation
//+++Didn't used anymore
ULONG LinkDownTime;
@@ -2928,6 +2921,14 @@ typedef struct _RTMP_ADAPTER
/*****************************************************************************************/
/* Statistic related parameters */
/*****************************************************************************************/
+#ifdef RT2870
+ ULONG BulkOutDataOneSecCount;
+ ULONG BulkInDataOneSecCount;
+ ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
+ ULONG watchDogRxCnt;
+ ULONG watchDogRxOverFlowCnt;
+ ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
+#endif // RT2870 //
BOOLEAN bUpdateBcnCntDone;
ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
@@ -2967,13 +2968,7 @@ typedef struct _RTMP_ADAPTER
struct wificonf WIFItestbed;
-#ifdef RALINK_ATE
- 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
@@ -2983,17 +2978,6 @@ typedef struct _RTMP_ADAPTER
struct net_device_stats stats;
-#ifdef BLOCK_NET_IF
- BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
-#endif // BLOCK_NET_IF //
-
-
-
-#ifdef MULTIPLE_CARD_SUPPORT
- INT32 MC_RowID;
- UCHAR MC_FileName[256];
-#endif // MULTIPLE_CARD_SUPPORT //
-
ULONG TbttTickCount;
#ifdef PCI_MSI_SUPPORT
BOOLEAN HaveMsi;
@@ -3007,11 +2991,6 @@ 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 + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
@@ -3024,6 +3003,13 @@ typedef struct _RTMP_ADAPTER
UINT8 PM_FlgSuspend;
+
+#ifdef RT30xx
+//======efuse
+ BOOLEAN bUseEfuse;
+ BOOLEAN bEEPROMFile;
+#endif // RT30xx //
+
} RTMP_ADAPTER, *PRTMP_ADAPTER;
//
@@ -3176,7 +3162,7 @@ typedef struct _TX_BLK_
//------------------------------------------------------------------------------------------
-
+#ifdef RT2860
//
// Enable & Disable NIC interrupt via writing interrupt mask register
// Since it use ADAPTER structure, it have to be put after structure definition.
@@ -3210,243 +3196,6 @@ __inline VOID NICEnableInterrupt(
RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
}
-#ifdef RT_BIG_ENDIAN
-static inline VOID WriteBackToDescriptor(
- IN PUCHAR Dest,
- IN PUCHAR Src,
- IN BOOLEAN DoEncrypt,
- IN ULONG DescriptorType)
-{
- UINT32 *p1, *p2;
-
- p1 = ((UINT32 *)Dest);
- p2 = ((UINT32 *)Src);
-
- *p1 = *p2;
- *(p1+2) = *(p2+2);
- *(p1+3) = *(p2+3);
- *(p1+1) = *(p2+1); // Word 1; this must be written back last
-}
-
-/*
- ========================================================================
-
- Routine Description:
- Endian conversion of Tx/Rx descriptor .
-
- Arguments:
- pAd Pointer to our adapter
- pData Pointer to Tx/Rx descriptor
- DescriptorType Direction of the frame
-
- Return Value:
- None
-
- Note:
- Call this function when read or update descriptor
- ========================================================================
-*/
-static inline VOID RTMPWIEndianChange(
- IN PUCHAR pData,
- IN ULONG DescriptorType)
-{
- int size;
- int i;
-
- size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
-
- if(DescriptorType == TYPE_TXWI)
- {
- *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
- *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
- }
- else
- {
- for(i=0; i < size/4 ; i++)
- *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
- }
-}
-
-/*
- ========================================================================
-
- Routine Description:
- Endian conversion of Tx/Rx descriptor .
-
- Arguments:
- pAd Pointer to our adapter
- pData Pointer to Tx/Rx descriptor
- DescriptorType Direction of the frame
-
- Return Value:
- None
-
- Note:
- Call this function when read or update descriptor
- ========================================================================
-*/
-static inline VOID RTMPDescriptorEndianChange(
- IN PUCHAR pData,
- IN ULONG DescriptorType)
-{
- *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
- *((UINT32 *)(pData + 8)) = SWAP32(*((UINT32 *)(pData+8))); // Byte 8~11
- *((UINT32 *)(pData +12)) = SWAP32(*((UINT32 *)(pData + 12))); // Byte 12~15
- *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData + 4))); // Byte 4~7, this must be swapped last
-}
-
-/*
- ========================================================================
-
- Routine Description:
- Endian conversion of all kinds of 802.11 frames .
-
- Arguments:
- pAd Pointer to our adapter
- pData Pointer to the 802.11 frame structure
- Dir Direction of the frame
- FromRxDoneInt Caller is from RxDone interrupt
-
- Return Value:
- None
-
- Note:
- Call this function when read or update buffer data
- ========================================================================
-*/
-static inline VOID RTMPFrameEndianChange(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pData,
- IN ULONG Dir,
- IN BOOLEAN FromRxDoneInt)
-{
- PHEADER_802_11 pFrame;
- PUCHAR pMacHdr;
-
- // swab 16 bit fields - Frame Control field
- if(Dir == DIR_READ)
- {
- *(USHORT *)pData = SWAP16(*(USHORT *)pData);
- }
-
- pFrame = (PHEADER_802_11) pData;
- pMacHdr = (PUCHAR) pFrame;
-
- // swab 16 bit fields - Duration/ID field
- *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
-
- // swab 16 bit fields - Sequence Control field
- *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
-
- if(pFrame->FC.Type == BTYPE_MGMT)
- {
- switch(pFrame->FC.SubType)
- {
- case SUBTYPE_ASSOC_REQ:
- case SUBTYPE_REASSOC_REQ:
- // swab 16 bit fields - CapabilityInfo field
- pMacHdr += sizeof(HEADER_802_11);
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
-
- // swab 16 bit fields - Listen Interval field
- pMacHdr += 2;
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
- break;
-
- case SUBTYPE_ASSOC_RSP:
- case SUBTYPE_REASSOC_RSP:
- // swab 16 bit fields - CapabilityInfo field
- pMacHdr += sizeof(HEADER_802_11);
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
-
- // swab 16 bit fields - Status Code field
- pMacHdr += 2;
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
-
- // swab 16 bit fields - AID field
- pMacHdr += 2;
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
- break;
-
- case SUBTYPE_AUTH:
- // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
- // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
- if(!FromRxDoneInt && pFrame->FC.Wep == 1)
- break;
- else
- {
- // swab 16 bit fields - Auth Alg No. field
- pMacHdr += sizeof(HEADER_802_11);
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
-
- // swab 16 bit fields - Auth Seq No. field
- pMacHdr += 2;
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
-
- // swab 16 bit fields - Status Code field
- pMacHdr += 2;
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
- }
- break;
-
- case SUBTYPE_BEACON:
- case SUBTYPE_PROBE_RSP:
- // swab 16 bit fields - BeaconInterval field
- pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
-
- // swab 16 bit fields - CapabilityInfo field
- pMacHdr += sizeof(USHORT);
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
- break;
-
- case SUBTYPE_DEAUTH:
- case SUBTYPE_DISASSOC:
- // swab 16 bit fields - Reason code field
- pMacHdr += sizeof(HEADER_802_11);
- *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
- break;
- }
- }
- else if( pFrame->FC.Type == BTYPE_DATA )
- {
- }
- else if(pFrame->FC.Type == BTYPE_CNTL)
- {
- switch(pFrame->FC.SubType)
- {
- case SUBTYPE_BLOCK_ACK_REQ:
- {
- PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
- *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
- pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
- }
- break;
- case SUBTYPE_BLOCK_ACK:
- // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
- *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
- break;
-
- case SUBTYPE_ACK:
- //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
- *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
- break;
- }
- }
- else
- {
- DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
- }
-
- // swab 16 bit fields - Frame Control
- if(Dir == DIR_WRITE)
- {
- *(USHORT *)pData = SWAP16(*(USHORT *)pData);
- }
-}
-#endif // RT_BIG_ENDIAN //
-
-
static inline VOID ConvertMulticastIP2MAC(
IN PUCHAR pIpAddr,
IN PUCHAR *ppMacAddr,
@@ -3484,6 +3233,7 @@ static inline VOID ConvertMulticastIP2MAC(
return;
}
+#endif /* RT2860 */
BOOLEAN RTMPCheckForHang(
IN NDIS_HANDLE MiniportAdapterContext
@@ -3523,6 +3273,10 @@ NDIS_STATUS NICReadRegParameters(
IN NDIS_HANDLE WrapperConfigurationContext
);
+#ifdef RT2870
+VOID NICInitRT30xxRFRegisters(
+ IN PRTMP_ADAPTER pAd);
+#endif // RT2870 //
VOID NICReadEEPROMParameters(
IN PRTMP_ADAPTER pAd,
@@ -3541,10 +3295,10 @@ NDIS_STATUS NICInitializeAdapter(
NDIS_STATUS NICInitializeAsic(
IN PRTMP_ADAPTER pAd,
IN BOOLEAN bHardReset);
-
+#ifdef RT2860
VOID NICRestoreBBPValue(
IN PRTMP_ADAPTER pAd);
-
+#endif
VOID NICIssueReset(
IN PRTMP_ADAPTER pAd);
@@ -3691,7 +3445,6 @@ 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);
@@ -3707,53 +3460,12 @@ VOID PeerDelBAAction(
VOID PeerBAAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
-#endif // DOT11_N_SUPPORT //
VOID SendPSMPAction(
IN PRTMP_ADAPTER pAd,
IN UCHAR Wcid,
IN UCHAR Psmp);
-
-#ifdef DOT11N_DRAFT3
-VOID SendBSS2040CoexistMgmtAction(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN UCHAR apidx,
- IN UCHAR InfoReq);
-
-VOID SendNotifyBWActionFrame(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN UCHAR apidx);
-
-BOOLEAN ChannelSwitchSanityCheck(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN UCHAR NewChannel,
- IN UCHAR Secondary);
-
-VOID ChannelSwitchAction(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN UCHAR Channel,
- IN UCHAR Secondary);
-
-ULONG BuildIntolerantChannelRep(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDest);
-
-VOID Update2040CoexistFrameAndNotify(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN BOOLEAN bAddIntolerantCha);
-
-VOID Send2040CoexistAction(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR Wcid,
- IN BOOLEAN bAddIntolerantCha);
-#endif // DOT11N_DRAFT3 //
-
VOID PeerRMAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
@@ -3762,44 +3474,22 @@ VOID PeerPublicAction(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
-#ifdef CONFIG_STA_SUPPORT
VOID StaPublicAction(
IN PRTMP_ADAPTER pAd,
IN UCHAR Bss2040Coexist);
-#endif // CONFIG_STA_SUPPORT //
-
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,
IN MLME_QUEUE_ELEM *Elem);
-#ifdef QOS_DLS_SUPPORT
-VOID PeerDLSAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-#endif // QOS_DLS_SUPPORT //
-
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
-VOID DlsParmFill(
- IN PRTMP_ADAPTER pAd,
- IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
- IN PRT_802_11_DLS pDls,
- IN USHORT reason);
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef DOT11_N_SUPPORT
VOID RECBATimerTimeout(
IN PVOID SystemSpecific1,
IN PVOID FunctionContext,
@@ -3812,7 +3502,6 @@ VOID ORIBATimerTimeout(
VOID SendRefreshBAR(
IN PRTMP_ADAPTER pAd,
IN MAC_TABLE_ENTRY *pEntry);
-#endif // DOT11_N_SUPPORT //
VOID ActHeaderInit(
IN PRTMP_ADAPTER pAd,
@@ -3845,7 +3534,6 @@ BOOLEAN QosBADataParse(
IN USHORT Datasize,
IN UINT CurRxIndex);
-#ifdef DOT11_N_SUPPORT
BOOLEAN CntlEnqueueForRecv(
IN PRTMP_ADAPTER pAd,
IN ULONG Wcid,
@@ -3854,7 +3542,6 @@ BOOLEAN CntlEnqueueForRecv(
VOID BaAutoManSwitch(
IN PRTMP_ADAPTER pAd);
-#endif // DOT11_N_SUPPORT //
VOID HTIOTCheck(
IN PRTMP_ADAPTER pAd,
@@ -4010,7 +3697,13 @@ NDIS_STATUS MiniportMMRequest(
IN UCHAR QueIdx,
IN PUCHAR pData,
IN UINT Length);
-
+#ifdef RT2870
+NDIS_STATUS MiniportDataMMRequest(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR QueIdx,
+ IN PUCHAR pData,
+ IN UINT Length);
+#endif
VOID RTMPSendNullFrame(
IN PRTMP_ADAPTER pAd,
IN UCHAR TxRate,
@@ -4039,7 +3732,6 @@ PQUEUE_HEADER RTMPCheckTxSwQueue(
IN PRTMP_ADAPTER pAd,
OUT UCHAR *QueIdx);
-#ifdef CONFIG_STA_SUPPORT
VOID RTMPReportMicError(
IN PRTMP_ADAPTER pAd,
IN PCIPHER_KEY pWpaKey);
@@ -4053,7 +3745,6 @@ VOID WpaDisassocApAndBlockAssoc(
IN PVOID FunctionContext,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3);
-#endif // CONFIG_STA_SUPPORT //
NDIS_STATUS RTMPCloneNdisPacket(
IN PRTMP_ADAPTER pAd,
@@ -4193,7 +3884,6 @@ VOID AsicRfTuningExec(
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3);
-#ifdef CONFIG_STA_SUPPORT
VOID AsicSleepThenAutoWakeup(
IN PRTMP_ADAPTER pAd,
IN USHORT TbttNumToNextWakeUp);
@@ -4203,8 +3893,12 @@ VOID AsicForceSleep(
VOID AsicForceWakeup(
IN PRTMP_ADAPTER pAd,
+#ifdef RT2860
IN UCHAR Level);
-#endif // CONFIG_STA_SUPPORT //
+#endif
+#ifdef RT2870
+ IN BOOLEAN bFromTx);
+#endif
VOID AsicSetBssid(
IN PRTMP_ADAPTER pAd,
@@ -4298,11 +3992,11 @@ BOOLEAN AsicSendCommandToMcu(
IN UCHAR Token,
IN UCHAR Arg0,
IN UCHAR Arg1);
-
+#ifdef RT2860
BOOLEAN AsicCheckCommanOk(
IN PRTMP_ADAPTER pAd,
IN UCHAR Command);
-
+#endif
VOID MacAddrRandomBssid(
IN PRTMP_ADAPTER pAd,
OUT PUCHAR pAddr);
@@ -4325,11 +4019,9 @@ 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,
@@ -4355,7 +4047,6 @@ VOID BssTableDeleteEntry(
IN PUCHAR pBssid,
IN UCHAR Channel);
-#ifdef DOT11_N_SUPPORT
VOID BATableDeleteORIEntry(
IN OUT PRTMP_ADAPTER pAd,
IN BA_ORI_ENTRY *pBAORIEntry);
@@ -4376,7 +4067,6 @@ VOID BATableTearRECEntry(
IN UCHAR TID,
IN UCHAR WCID,
IN BOOLEAN ALL);
-#endif // DOT11_N_SUPPORT //
VOID BssEntrySet(
IN PRTMP_ADAPTER pAd,
@@ -4438,7 +4128,6 @@ 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,
@@ -4449,31 +4138,6 @@ VOID BATableInsertEntry(
IN UCHAR OriginatorStatus,
IN BOOLEAN IsRecipient);
-#ifdef DOT11N_DRAFT3
-VOID Bss2040CoexistTimeOut(
- IN PVOID SystemSpecific1,
- IN PVOID FunctionContext,
- IN PVOID SystemSpecific2,
- IN PVOID SystemSpecific3);
-
-
-VOID TriEventInit(
- IN PRTMP_ADAPTER pAd);
-
-ULONG TriEventTableSetEntry(
- IN PRTMP_ADAPTER pAd,
- OUT TRIGGER_EVENT_TAB *Tab,
- IN PUCHAR pBssid,
- IN HT_CAPABILITY_IE *pHtCapability,
- IN UCHAR HtCapabilityLen,
- IN UCHAR RegClass,
- IN UCHAR ChannelNo);
-
-VOID TriEventCounterMaintenance(
- IN PRTMP_ADAPTER pAd);
-#endif // DOT11N_DRAFT3 //
-#endif // DOT11_N_SUPPORT //
-
VOID BssTableSsidSort(
IN PRTMP_ADAPTER pAd,
OUT BSS_TABLE *OutTab,
@@ -4638,6 +4302,12 @@ VOID InvalidStateWhenDisassociate(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
+#ifdef RT2870
+VOID MlmeCntlConfirm(
+ IN PRTMP_ADAPTER pAd,
+ IN ULONG MsgType,
+ IN USHORT Msg);
+#endif // RT2870 //
VOID ComposePsPoll(
IN PRTMP_ADAPTER pAd);
@@ -4721,142 +4391,6 @@ VOID PeerAuthSimpleRspGenAndSend(
// Private routines in dls.c
//
-#ifdef CONFIG_STA_SUPPORT
-#ifdef QOS_DLS_SUPPORT
-void DlsStateMachineInit(
- IN PRTMP_ADAPTER pAd,
- IN STATE_MACHINE *Sm,
- OUT STATE_MACHINE_FUNC Trans[]);
-
-VOID MlmeDlsReqAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID PeerDlsReqAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID PeerDlsRspAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID MlmeDlsTearDownAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID PeerDlsTearDownAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-
-VOID RTMPCheckDLSTimeOut(
- IN PRTMP_ADAPTER pAd);
-
-BOOLEAN RTMPRcvFrameDLSCheck(
- IN PRTMP_ADAPTER pAd,
- IN PHEADER_802_11 pHeader,
- IN ULONG Len,
- IN PRT28XX_RXD_STRUC pRxD);
-
-INT RTMPCheckDLSFrame(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDA);
-
-VOID RTMPSendDLSTearDownFrame(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDA);
-
-NDIS_STATUS RTMPSendSTAKeyRequest(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDA);
-
-NDIS_STATUS RTMPSendSTAKeyHandShake(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDA);
-
-VOID DlsTimeoutAction(
- IN PVOID SystemSpecific1,
- IN PVOID FunctionContext,
- IN PVOID SystemSpecific2,
- IN PVOID SystemSpecific3);
-
-BOOLEAN MlmeDlsReqSanity(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen,
- OUT PRT_802_11_DLS *pDLS,
- OUT PUSHORT pReason);
-
-INT Set_DlsEntryInfo_Display_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pAddr,
- IN UINT DlsEntryIdx);
-
-BOOLEAN MacTableDeleteDlsEntry(
- IN PRTMP_ADAPTER pAd,
- IN USHORT wcid,
- IN PUCHAR pAddr);
-
-MAC_TABLE_ENTRY *DlsEntryTableLookup(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pAddr,
- IN BOOLEAN bResetIdelCount);
-
-MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR wcid,
- IN PUCHAR pAddr,
- IN BOOLEAN bResetIdelCount);
-
-INT Set_DlsAddEntry_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-
-INT Set_DlsTearDownEntry_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-#endif // QOS_DLS_SUPPORT //
-#endif // CONFIG_STA_SUPPORT //
-
-#ifdef QOS_DLS_SUPPORT
-BOOLEAN PeerDlsReqSanity(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen,
- OUT PUCHAR pDA,
- OUT PUCHAR pSA,
- OUT USHORT *pCapabilityInfo,
- OUT USHORT *pDlsTimeout,
- OUT UCHAR *pRatesLen,
- OUT UCHAR Rates[],
- OUT UCHAR *pHtCapabilityLen,
- OUT HT_CAPABILITY_IE *pHtCapability);
-
-BOOLEAN PeerDlsRspSanity(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen,
- OUT PUCHAR pDA,
- OUT PUCHAR pSA,
- OUT USHORT *pCapabilityInfo,
- OUT USHORT *pStatus,
- OUT UCHAR *pRatesLen,
- OUT UCHAR Rates[],
- OUT UCHAR *pHtCapabilityLen,
- OUT HT_CAPABILITY_IE *pHtCapability);
-
-BOOLEAN PeerDlsTearDownSanity(
- IN PRTMP_ADAPTER pAd,
- IN VOID *Msg,
- IN ULONG MsgLen,
- OUT PUCHAR pDA,
- OUT PUCHAR pSA,
- OUT USHORT *pReason);
-#endif // QOS_DLS_SUPPORT //
-
//========================================
VOID SyncStateMachineInit(
@@ -4961,12 +4495,6 @@ VOID CntlWaitAssocProc(
IN PRTMP_ADAPTER pAd,
IN MLME_QUEUE_ELEM *Elem);
-#ifdef QOS_DLS_SUPPORT
-VOID CntlOidDLSSetupProc(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem);
-#endif // QOS_DLS_SUPPORT //
-
VOID LinkUp(
IN PRTMP_ADAPTER pAd,
IN UCHAR BssType);
@@ -5113,9 +4641,7 @@ BOOLEAN PeerBeaconAndProbeRspSanity(
OUT PQOS_CAPABILITY_PARM pQosCapability,
OUT ULONG *pRalinkIe,
OUT UCHAR *pHtCapabilityLen,
-#ifdef CONFIG_STA_SUPPORT
OUT UCHAR *pPreNHtCapabilityLen,
-#endif // CONFIG_STA_SUPPORT //
OUT HT_CAPABILITY_IE *pHtCapability,
OUT UCHAR *AddHtInfoLen,
OUT ADD_HT_INFO_IE *AddHtInfo,
@@ -5343,23 +4869,19 @@ 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,
IN OUT UCHAR SupRate[],
IN OUT UCHAR *SupRateLen);
-#ifdef CONFIG_STA_SUPPORT
BOOLEAN RTMPCheckChannel(
IN PRTMP_ADAPTER pAd,
IN UCHAR CentralChannel,
IN UCHAR Channel);
-#endif // CONFIG_STA_SUPPORT //
BOOLEAN RTMPCheckHt(
IN PRTMP_ADAPTER pAd,
@@ -5388,6 +4910,12 @@ CHAR RTMPMaxRssi(
IN CHAR Rssi1,
IN CHAR Rssi2);
+#ifdef RT30xx
+VOID AsicSetRxAnt(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR Ant);
+#endif
+
VOID AsicEvaluateRxAnt(
IN PRTMP_ADAPTER pAd);
@@ -5600,15 +5128,12 @@ VOID RTMPIndicateWPA2Status(
VOID RTMPOPModeSwitching(
IN PRTMP_ADAPTER pAd);
-#ifdef CONFIG_STA_SUPPORT
VOID RTMPAddBSSIDCipher(
IN PRTMP_ADAPTER pAd,
IN UCHAR Aid,
IN PNDIS_802_11_KEY pKey,
IN UCHAR CipherAlg);
-#endif // CONFIG_STA_SUPPORT //
-#ifdef DOT11_N_SUPPORT
VOID RTMPSetHT(
IN PRTMP_ADAPTER pAd,
IN OID_SET_HT_PHYMODE *pHTPhyMode);
@@ -5616,7 +5141,6 @@ VOID RTMPSetHT(
VOID RTMPSetIndividualHT(
IN PRTMP_ADAPTER pAd,
IN UCHAR apidx);
-#endif // DOT11_N_SUPPORT //
VOID RTMPSendWirelessEvent(
IN PRTMP_ADAPTER pAd,
@@ -5793,13 +5317,6 @@ CHAR ConvertToRssi(
IN CHAR Rssi,
IN UCHAR RssiNumber);
-
-#ifdef DOT11N_DRAFT3
-VOID BuildEffectedChannelList(
- IN PRTMP_ADAPTER pAd);
-#endif // DOT11N_DRAFT3 //
-
-
VOID APAsicEvaluateRxAnt(
IN PRTMP_ADAPTER pAd);
@@ -6072,6 +5589,10 @@ VOID RTMPSendTriggerFrame(
IN UCHAR TxRate,
IN BOOLEAN bQosNull);
+#ifdef RT30xx
+VOID RTMPFilterCalibration(
+ IN PRTMP_ADAPTER pAd);
+#endif // RT30xx //
/* timeout -- ms */
VOID RTMP_SetPeriodicTimer(
@@ -6263,7 +5784,6 @@ 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,
@@ -6281,7 +5801,6 @@ VOID BAOriSessionSetUp(
VOID BASessionTearDownALL(
IN OUT PRTMP_ADAPTER pAd,
IN UCHAR Wcid);
-#endif // DOT11_N_SUPPORT //
BOOLEAN OS_Need_Clone_Packet(void);
@@ -6429,7 +5948,6 @@ 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);
@@ -6530,24 +6048,17 @@ 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
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(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pFrame,
@@ -6560,26 +6071,16 @@ VOID WpaSendMicFailureToWpaSupplicant(
VOID SendAssocIEsToWpaSupplicant(
IN PRTMP_ADAPTER pAd);
-#endif // WPA_SUPPLICANT_SUPPORT //
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
int wext_notify_event_assoc(
IN RTMP_ADAPTER *pAd);
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-
-#endif // CONFIG_STA_SUPPORT //
-
-
-#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(
IN PRTMP_ADAPTER pAd);
@@ -6588,7 +6089,6 @@ BOOLEAN STARxDoneInterruptHandle(
IN PRTMP_ADAPTER pAd,
IN BOOLEAN argc);
-#ifdef DOT11_N_SUPPORT
// AMPDU packet indication
VOID Indicate_AMPDU_Packet(
IN PRTMP_ADAPTER pAd,
@@ -6600,7 +6100,6 @@ VOID Indicate_AMSDU_Packet(
IN PRTMP_ADAPTER pAd,
IN RX_BLK *pRxBlk,
IN UCHAR FromWhichBSSID);
-#endif // DOT11_N_SUPPORT //
// Normal legacy Rx packet indication
VOID Indicate_Legacy_Packet(
@@ -6630,8 +6129,6 @@ UINT deaggregate_AMSDU_announce(
IN PUCHAR pData,
IN ULONG DataSize);
-
-#ifdef CONFIG_STA_SUPPORT
// remove LLC and get 802_3 Header
#define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
{ \
@@ -6662,8 +6159,6 @@ UINT deaggregate_AMSDU_announce(
CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
_pRxBlk->DataSize, _pRemovedLLCSNAP); \
}
-#endif // CONFIG_STA_SUPPORT //
-
BOOLEAN APFowardWirelessStaToWirelessSta(
IN PRTMP_ADAPTER pAd,
@@ -6680,13 +6175,9 @@ VOID Sta_Announce_or_Forward_802_3_Packet(
IN PNDIS_PACKET pPacket,
IN UCHAR FromWhichBSSID);
-
-#ifdef CONFIG_STA_SUPPORT
#define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
//announce_802_3_packet(_pAd, _pPacket);
-#endif // CONFIG_STA_SUPPORT //
-
PNDIS_PACKET DuplicatePacket(
IN PRTMP_ADAPTER pAd,
@@ -6729,22 +6220,6 @@ PNDIS_PACKET RTMPDeFragmentDataFrame(
IN RX_BLK *pRxBlk);
////////////////////////////////////////
-
-
-
-
-
-#ifdef SNMP_SUPPORT
-//for snmp , kathy
-typedef struct _DefaultKeyIdxValue
-{
- UCHAR KeyIdx;
- UCHAR Value[16];
-} DefaultKeyIdxValue, *PDefaultKeyIdxValue;
-#endif
-
-
-#ifdef CONFIG_STA_SUPPORT
enum {
DIDmsg_lnxind_wlansniffrm = 0x00000044,
DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
@@ -6857,18 +6332,11 @@ struct iw_statistics *rt28xx_get_wireless_stats(
VOID RTMPSetDesiredRates(
IN PRTMP_ADAPTER pAdapter,
IN LONG Rates);
-#endif // CONFIG_STA_SUPPORT //
INT Set_FixedTxMode_Proc(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg);
-#ifdef CONFIG_APSTA_MIXED_SUPPORT
-INT Set_OpMode_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg);
-#endif // CONFIG_APSTA_MIXED_SUPPORT //
-
static inline char* GetPhyMode(
int Mode)
{
@@ -6879,13 +6347,11 @@ 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";
}
@@ -6902,10 +6368,8 @@ 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";
}
@@ -6945,13 +6409,10 @@ INT rt28xx_ioctl(
IN OUT struct ifreq *rq,
IN INT cmd);
-
-#ifdef CONFIG_STA_SUPPORT
INT rt28xx_sta_ioctl(
IN struct net_device *net_dev,
IN OUT struct ifreq *rq,
IN INT cmd);
-#endif // CONFIG_STA_SUPPORT //
BOOLEAN RT28XXSecurityKeyAdd(
IN PRTMP_ADAPTER pAd,
@@ -6971,6 +6432,7 @@ void kill_thread_task(PRTMP_ADAPTER pAd);
void tbtt_tasklet(unsigned long data);
+#ifdef RT2860
//
// Function Prototype in cmm_data_2860.c
//
@@ -7035,7 +6497,6 @@ NDIS_STATUS RTMPCheckRxError(
IN PRXWI_STRUC pRxWI,
IN PRT28XX_RXD_STRUC pRxD);
-#ifdef CONFIG_STA_SUPPORT
VOID RTMPInitPCIeLinkCtrlValue(
IN PRTMP_ADAPTER pAd);
@@ -7078,13 +6539,13 @@ VOID RadioOnExec(
IN PVOID FunctionContext,
IN PVOID SystemSpecific2,
IN PVOID SystemSpecific3);
-#endif // CONFIG_STA_SUPPORT //
VOID RT28xxPciMlmeRadioOn(
IN PRTMP_ADAPTER pAd);
VOID RT28xxPciMlmeRadioOFF(
IN PRTMP_ADAPTER pAd);
+#endif /* RT2860 */
VOID AsicTurnOffRFClk(
IN PRTMP_ADAPTER pAd,
@@ -7094,6 +6555,493 @@ VOID AsicTurnOnRFClk(
IN PRTMP_ADAPTER pAd,
IN UCHAR Channel);
+#ifdef RT30xx
+NTSTATUS RT30xxWriteRFRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR RegID,
+ IN UCHAR Value);
+
+NTSTATUS RT30xxReadRFRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR RegID,
+ IN PUCHAR pValue);
+
+//2008/09/11:KH add to support efuse<--
+UCHAR eFuseReadRegisters(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ OUT USHORT* pData);
+
+VOID eFuseReadPhysical(
+ IN PRTMP_ADAPTER pAd,
+ IN PUSHORT lpInBuffer,
+ IN ULONG nInBufferSize,
+ OUT PUSHORT lpOutBuffer,
+ IN ULONG nOutBufferSize
+);
+
+NTSTATUS eFuseRead(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ OUT PUCHAR pData,
+ IN USHORT Length);
+
+VOID eFusePhysicalWriteRegisters(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ OUT USHORT* pData);
+
+NTSTATUS eFuseWriteRegisters(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ IN USHORT* pData);
+
+VOID eFuseWritePhysical(
+ IN PRTMP_ADAPTER pAd,
+ PUSHORT lpInBuffer,
+ ULONG nInBufferSize,
+ PUCHAR lpOutBuffer,
+ ULONG nOutBufferSize
+);
+
+NTSTATUS eFuseWrite(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN PUCHAR pData,
+ IN USHORT length);
+
+INT set_eFuseGetFreeBlockCount_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR arg);
+
+INT set_eFusedump_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR arg);
+
+INT set_eFuseLoadFromBin_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR arg);
+
+NTSTATUS eFuseWriteRegistersFromBin(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ IN USHORT* pData);
+
+VOID eFusePhysicalReadRegisters(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN USHORT Length,
+ OUT USHORT* pData);
+
+NDIS_STATUS NICLoadEEPROM(
+ IN PRTMP_ADAPTER pAd);
+
+BOOLEAN bNeedLoadEEPROM(
+ IN PRTMP_ADAPTER pAd);
+//2008/09/11:KH add to support efuse-->
+#endif // RT30xx //
+
+#ifdef RT30xx
+// add by johnli, RF power sequence setup
+VOID RT30xxLoadRFNormalModeSetup(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RT30xxLoadRFSleepModeSetup(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RT30xxReverseRFSleepModeSetup(
+ IN PRTMP_ADAPTER pAd);
+// end johnli
+#endif // RT30xx //
+
+#ifdef RT2870
+//
+// Function Prototype in rtusb_bulk.c
+//
+VOID RTUSBInitTxDesc(
+ IN PRTMP_ADAPTER pAd,
+ IN PTX_CONTEXT pTxContext,
+ IN UCHAR BulkOutPipeId,
+ IN usb_complete_t Func);
+
+VOID RTUSBInitHTTxDesc(
+ IN PRTMP_ADAPTER pAd,
+ IN PHT_TX_CONTEXT pTxContext,
+ IN UCHAR BulkOutPipeId,
+ IN ULONG BulkOutSize,
+ IN usb_complete_t Func);
+
+VOID RTUSBInitRxDesc(
+ IN PRTMP_ADAPTER pAd,
+ IN PRX_CONTEXT pRxContext);
+
+VOID RTUSBCleanUpDataBulkOutQueue(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBCancelPendingBulkOutIRP(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBBulkOutDataPacket(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR BulkOutPipeId,
+ IN UCHAR Index);
+
+VOID RTUSBBulkOutNullFrame(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBBulkOutRTSFrame(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBCancelPendingBulkInIRP(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBCancelPendingIRPs(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBBulkOutMLMEPacket(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR Index);
+
+VOID RTUSBBulkOutPsPoll(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBCleanUpMLMEBulkOutQueue(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBKickBulkOut(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBBulkReceive(
+ IN PRTMP_ADAPTER pAd);
+
+VOID DoBulkIn(
+ IN RTMP_ADAPTER *pAd);
+
+VOID RTUSBInitRxDesc(
+ IN PRTMP_ADAPTER pAd,
+ IN PRX_CONTEXT pRxContext);
+
+VOID RTUSBBulkRxHandle(
+ IN unsigned long data);
+
+//
+// Function Prototype in rtusb_io.c
+//
+NTSTATUS RTUSBMultiRead(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ OUT PUCHAR pData,
+ IN USHORT length);
+
+NTSTATUS RTUSBMultiWrite(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN PUCHAR pData,
+ IN USHORT length);
+
+NTSTATUS RTUSBMultiWrite_OneByte(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN PUCHAR pData);
+
+NTSTATUS RTUSBReadBBPRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR Id,
+ IN PUCHAR pValue);
+
+NTSTATUS RTUSBWriteBBPRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR Id,
+ IN UCHAR Value);
+
+NTSTATUS RTUSBWriteRFRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN UINT32 Value);
+
+#ifndef RT30xx
+NTSTATUS RT30xxWriteRFRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR RegID,
+ IN UCHAR Value);
+
+NTSTATUS RT30xxReadRFRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR RegID,
+ IN PUCHAR pValue);
+#endif
+
+NTSTATUS RTUSB_VendorRequest(
+ IN PRTMP_ADAPTER pAd,
+ IN UINT32 TransferFlags,
+ IN UCHAR ReservedBits,
+ IN UCHAR Request,
+ IN USHORT Value,
+ IN USHORT Index,
+ IN PVOID TransferBuffer,
+ IN UINT32 TransferBufferLength);
+
+NTSTATUS RTUSBReadEEPROM(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ OUT PUCHAR pData,
+ IN USHORT length);
+
+NTSTATUS RTUSBWriteEEPROM(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN PUCHAR pData,
+ IN USHORT length);
+
+VOID RTUSBPutToSleep(
+ IN PRTMP_ADAPTER pAd);
+
+NTSTATUS RTUSBWakeUp(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RTUSBInitializeCmdQ(
+ IN PCmdQ cmdq);
+
+NDIS_STATUS RTUSBEnqueueCmdFromNdis(
+ IN PRTMP_ADAPTER pAd,
+ IN NDIS_OID Oid,
+ IN BOOLEAN SetInformation,
+ IN PVOID pInformationBuffer,
+ IN UINT32 InformationBufferLength);
+
+NDIS_STATUS RTUSBEnqueueInternalCmd(
+ IN PRTMP_ADAPTER pAd,
+ IN NDIS_OID Oid,
+ IN PVOID pInformationBuffer,
+ IN UINT32 InformationBufferLength);
+
+VOID RTUSBDequeueCmd(
+ IN PCmdQ cmdq,
+ OUT PCmdQElmt *pcmdqelmt);
+
+INT RTUSBCmdThread(
+ IN OUT PVOID Context);
+
+INT TimerQThread(
+ IN OUT PVOID Context);
+
+RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
+ IN RTMP_ADAPTER *pAd,
+ IN RALINK_TIMER_STRUCT *pTimer);
+
+BOOLEAN RT2870_TimerQ_Remove(
+ IN RTMP_ADAPTER *pAd,
+ IN RALINK_TIMER_STRUCT *pTimer);
+
+void RT2870_TimerQ_Exit(
+ IN RTMP_ADAPTER *pAd);
+
+void RT2870_TimerQ_Init(
+ IN RTMP_ADAPTER *pAd);
+
+VOID RT2870_BssBeaconExit(
+ IN RTMP_ADAPTER *pAd);
+
+VOID RT2870_BssBeaconStop(
+ IN RTMP_ADAPTER *pAd);
+
+VOID RT2870_BssBeaconStart(
+ IN RTMP_ADAPTER * pAd);
+
+VOID RT2870_BssBeaconInit(
+ IN RTMP_ADAPTER *pAd);
+
+VOID RT2870_WatchDog(
+ IN RTMP_ADAPTER *pAd);
+
+NTSTATUS RTUSBWriteMACRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ IN UINT32 Value);
+
+NTSTATUS RTUSBReadMACRegister(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT Offset,
+ OUT PUINT32 pValue);
+
+NTSTATUS RTUSBSingleWrite(
+ IN RTMP_ADAPTER *pAd,
+ IN USHORT Offset,
+ IN USHORT Value);
+
+NTSTATUS RTUSBFirmwareRun(
+ IN PRTMP_ADAPTER pAd);
+
+NTSTATUS RTUSBFirmwareWrite(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR pFwImage,
+ IN ULONG FwLen);
+
+NTSTATUS RTUSBFirmwareOpmode(
+ IN PRTMP_ADAPTER pAd,
+ OUT PUINT32 pValue);
+
+NTSTATUS RTUSBVenderReset(
+ IN PRTMP_ADAPTER pAd);
+
+NDIS_STATUS RTUSBSetHardWareRegister(
+ IN PRTMP_ADAPTER pAdapter,
+ IN PVOID pBuf);
+
+NDIS_STATUS RTUSBQueryHardWareRegister(
+ IN PRTMP_ADAPTER pAdapter,
+ IN PVOID pBuf);
+
+VOID CMDHandler(
+ IN PRTMP_ADAPTER pAd);
+
+
+NDIS_STATUS CreateThreads(
+ IN struct net_device *net_dev );
+
+
+VOID MacTableInitialize(
+ IN PRTMP_ADAPTER pAd);
+
+VOID MlmeSetPsm(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT psm);
+
+NDIS_STATUS RTMPWPAAddKeyProc(
+ IN PRTMP_ADAPTER pAd,
+ IN PVOID pBuf);
+
+VOID AsicRxAntEvalAction(
+ IN PRTMP_ADAPTER pAd);
+
+void append_pkt(
+ IN PRTMP_ADAPTER pAd,
+ IN PUCHAR pHeader802_3,
+ IN UINT HdrLen,
+ IN PUCHAR pData,
+ IN ULONG DataSize,
+ OUT PNDIS_PACKET *ppPacket);
+
+UINT deaggregate_AMSDU_announce(
+ IN PRTMP_ADAPTER pAd,
+ PNDIS_PACKET pPacket,
+ IN PUCHAR pData,
+ IN ULONG DataSize);
+
+NDIS_STATUS RTMPCheckRxError(
+ IN PRTMP_ADAPTER pAd,
+ IN PHEADER_802_11 pHeader,
+ IN PRXWI_STRUC pRxWI,
+ IN PRT28XX_RXD_STRUC pRxINFO);
+
+
+VOID RTUSBMlmeHardTransmit(
+ IN PRTMP_ADAPTER pAd,
+ IN PMGMT_STRUC pMgmt);
+
+INT MlmeThread(
+ IN PVOID Context);
+
+//
+// Function Prototype in rtusb_data.c
+//
+NDIS_STATUS RTUSBFreeDescriptorRequest(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR BulkOutPipeId,
+ IN UINT32 NumberRequired);
+
+
+BOOLEAN RTUSBNeedQueueBackForAgg(
+ IN RTMP_ADAPTER *pAd,
+ IN UCHAR BulkOutPipeId);
+
+
+VOID RTMPWriteTxInfo(
+ IN PRTMP_ADAPTER pAd,
+ IN PTXINFO_STRUC pTxInfo,
+ IN USHORT USBDMApktLen,
+ IN BOOLEAN bWiv,
+ IN UCHAR QueueSel,
+ IN UCHAR NextValid,
+ IN UCHAR TxBurst);
+
+//
+// Function Prototype in cmm_data_2870.c
+//
+USHORT RtmpUSB_WriteSubTxResource(
+ IN PRTMP_ADAPTER pAd,
+ IN TX_BLK *pTxBlk,
+ IN BOOLEAN bIsLast,
+ OUT USHORT *FreeNumber);
+
+USHORT RtmpUSB_WriteSingleTxResource(
+ IN PRTMP_ADAPTER pAd,
+ IN TX_BLK *pTxBlk,
+ IN BOOLEAN bIsLast,
+ OUT USHORT *FreeNumber);
+
+USHORT RtmpUSB_WriteFragTxResource(
+ IN PRTMP_ADAPTER pAd,
+ IN TX_BLK *pTxBlk,
+ IN UCHAR fragNum,
+ OUT USHORT *FreeNumber);
+
+USHORT RtmpUSB_WriteMultiTxResource(
+ IN PRTMP_ADAPTER pAd,
+ IN TX_BLK *pTxBlk,
+ IN UCHAR frameNum,
+ OUT USHORT *FreeNumber);
+
+VOID RtmpUSB_FinalWriteTxResource(
+ IN PRTMP_ADAPTER pAd,
+ IN TX_BLK *pTxBlk,
+ IN USHORT totalMPDUSize,
+#ifdef RT2860
+ IN USHORT FirstTxIdx);
+#endif
+ IN USHORT TxIdx);
+
+VOID RtmpUSBDataLastTxIdx(
+ IN PRTMP_ADAPTER pAd,
+ IN UCHAR QueIdx,
+ IN USHORT TxIdx);
+
+VOID RtmpUSBDataKickOut(
+ IN PRTMP_ADAPTER pAd,
+ IN TX_BLK *pTxBlk,
+ IN UCHAR QueIdx);
+
+
+int RtmpUSBMgmtKickOut(
+ IN RTMP_ADAPTER *pAd,
+ IN UCHAR QueIdx,
+ IN PNDIS_PACKET pPacket,
+ IN PUCHAR pSrcBufVA,
+ IN UINT SrcBufLen);
+
+VOID RtmpUSBNullFrameKickOut(
+ IN RTMP_ADAPTER *pAd,
+ IN UCHAR QueIdx,
+ IN UCHAR *pNullFrame,
+ IN UINT32 frameLen);
+
+VOID RT28xxUsbStaAsicForceWakeup(
+ IN PRTMP_ADAPTER pAd,
+ IN BOOLEAN bFromTx);
+
+VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
+ IN PRTMP_ADAPTER pAd,
+ IN USHORT TbttNumToNextWakeUp);
+
+VOID RT28xxUsbMlmeRadioOn(
+ IN PRTMP_ADAPTER pAd);
+
+VOID RT28xxUsbMlmeRadioOFF(
+ IN PRTMP_ADAPTER pAd);
+#endif // RT2870 //
////////////////////////////////////////
@@ -7120,10 +7068,10 @@ PCHAR RTMPGetRalinkEncryModeStr(
IN USHORT encryMode);
//////////////////////////////////////
-#ifdef CONFIG_STA_SUPPORT
VOID AsicStaBbpTuning(
IN PRTMP_ADAPTER pAd);
+#ifdef RT2860
VOID AsicResetFromDMABusy(
IN PRTMP_ADAPTER pAd);
@@ -7135,7 +7083,16 @@ VOID AsicResetMAC(
VOID AsicResetPBF(
IN PRTMP_ADAPTER pAd);
-#endif // CONFIG_STA_SUPPORT //
+#endif
+#ifdef RT2870
+BOOLEAN StaAddMacTableEntry(
+ IN PRTMP_ADAPTER pAd,
+ IN PMAC_TABLE_ENTRY pEntry,
+ IN UCHAR MaxSupportedRateIn500Kbps,
+ IN HT_CAPABILITY_IE *pHtCapability,
+ IN UCHAR HtCapabilityLen,
+ IN USHORT CapabilityInfo);
+#endif
void RTMP_IndicateMediaState(
IN PRTMP_ADAPTER pAd);
diff --git a/drivers/staging/rt2860/rtmp_def.h b/drivers/staging/rt2860/rtmp_def.h
index 25a53d83a0d7..5dde860cbbd4 100644
--- a/drivers/staging/rt2860/rtmp_def.h
+++ b/drivers/staging/rt2860/rtmp_def.h
@@ -54,15 +54,6 @@
#define NIC_TAG ((ULONG)'0682')
#define NIC_DBG_STRING ("**RT28xx**")
-#ifdef SNMP_SUPPORT
-// for snmp
-// to get manufacturer OUI, kathy, 2008_0220
-#define ManufacturerOUI_LEN 3
-#define ManufacturerNAME ("Ralink Technology Company.")
-#define ResourceTypeIdName ("Ralink_ID")
-#endif
-
-
#define RALINK_2883_VERSION ((UINT32)0x28830300)
#define RALINK_2880E_VERSION ((UINT32)0x28720200)
#define RALINK_3070_VERSION ((UINT32)0x30700200)
@@ -111,6 +102,7 @@
// Entry number for each DMA descriptor ring
//
+#ifdef RT2860
#define TX_RING_SIZE 64 //64
#define MGMT_RING_SIZE 128
#define RX_RING_SIZE 128 //64
@@ -118,12 +110,15 @@
#define MAX_DMA_DONE_PROCESS TX_RING_SIZE
#define MAX_TX_DONE_PROCESS TX_RING_SIZE //8
#define LOCAL_TXBUF_SIZE 2
-
-
-#ifdef MULTIPLE_CARD_SUPPORT
-// MC: Multple Cards
-#define MAX_NUM_OF_MULTIPLE_CARD 32
-#endif // MULTIPLE_CARD_SUPPORT //
+#endif
+#ifdef RT2870
+#define TX_RING_SIZE 8 // 1
+#define PRIO_RING_SIZE 8
+#define MGMT_RING_SIZE 32 // PRIO_RING_SIZE
+#define RX_RING_SIZE 8
+#define MAX_TX_PROCESS 4
+#define LOCAL_TXBUF_SIZE 2048
+#endif // RT2870 //
#define MAX_RX_PROCESS 128 //64 //32
#define NUM_OF_LOCAL_TXBUF 2
@@ -153,7 +148,11 @@
#define MAX_PACKETS_IN_PS_QUEUE 128 //32
#define WMM_NUM_OF_AC 4 /* AC0, AC1, AC2, and AC3 */
-
+#ifdef RT30xx
+//2008/09/11:KH add to support efuse<--
+#define MAX_EEPROM_BIN_FILE_SIZE 1024
+//2008/09/11:KH add to support efuse-->
+#endif
// RxFilter
#define STANORMAL 0x17f97
@@ -210,6 +209,7 @@
#define fOP_STATUS_WAKEUP_NOW 0x00008000
#define fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE 0x00020000
+#ifdef RT2860
//
// RTMP_ADAPTER PSFlags : related to advanced power save.
//
@@ -222,10 +222,7 @@
// Indicate driver should IMMEDIATELY fo to sleep after receiving AP's beacon in which doesn't indicate unicate nor multicast packets for me
//. This flag is used ONLY in RTMPHandleRxDoneInterrupt routine.
#define fRTMP_PS_GO_TO_SLEEP_NOW 0x00000008
-
-#ifdef DOT11N_DRAFT3
-#define fOP_STATUS_SCAN_2040 0x00040000
-#endif // DOT11N_DRAFT3 //
+#endif
#define CCKSETPROTECT 0x1
#define OFDMSETPROTECT 0x2
@@ -251,10 +248,6 @@
#define fCLIENT_STATUS_MCSFEEDBACK_CAPABLE 0x00000400
#define fCLIENT_STATUS_APSD_CAPABLE 0x00000800 /* UAPSD STATION */
-#ifdef DOT11N_DRAFT3
-#define fCLIENT_STATUS_BSSCOEXIST_CAPABLE 0x00001000
-#endif // DOT11N_DRAFT3 //
-
#define fCLIENT_STATUS_RALINK_CHIPSET 0x00100000
//
// STA configuration flags
@@ -330,16 +323,14 @@
#define MAX_MESH_NUM 0
#define MAX_APCLI_NUM 0
-#ifdef APCLI_SUPPORT
-#undef MAX_APCLI_NUM
-#define MAX_APCLI_NUM 1
-#endif // APCLI_SUPPORT //
#define MAX_MBSSID_NUM 1
+#if defined(RT2860) || defined(RT30xx)
#ifdef MBSS_SUPPORT
#undef MAX_MBSSID_NUM
#define MAX_MBSSID_NUM (8 - MAX_MESH_NUM - MAX_APCLI_NUM)
#endif // MBSS_SUPPORT //
+#endif
/* sanity check for apidx */
#define MBSS_MR_APIDX_SANITY_CHECK(apidx) \
@@ -582,6 +573,9 @@
// For 802.11n D3.03
//#define IE_NEW_EXT_CHA_OFFSET 62 // 802.11n d1. New extension channel offset elemet
#define IE_SECONDARY_CH_OFFSET 62 // 802.11n D3.03 Secondary Channel Offset element
+#ifdef RT2870
+#define IE_WAPI 68 // WAPI information element
+#endif
#define IE_2040_BSS_COEXIST 72 // 802.11n D3.0.3
#define IE_2040_BSS_INTOLERANT_REPORT 73 // 802.11n D3.03
#define IE_OVERLAPBSS_SCAN_PARM 74 // 802.11n D3.03
@@ -630,9 +624,10 @@
#define AP_CNTL_STATE_MACHINE 15
#define AP_WPA_STATE_MACHINE 16
-#ifdef QOS_DLS_SUPPORT
-#define DLS_STATE_MACHINE 26
-#endif // QOS_DLS_SUPPORT //
+#ifdef RT30xx
+#define WSC_STATE_MACHINE 17
+#define WSC_UPNP_STATE_MACHINE 18
+#endif
//
// STA's CONTROL/CONNECT state machine: states, events, total function #
@@ -647,6 +642,9 @@
#define CNTL_WAIT_AUTH2 7
#define CNTL_WAIT_OID_LIST_SCAN 8
#define CNTL_WAIT_OID_DISASSOC 9
+#ifdef RT2870
+#define CNTL_WAIT_SCAN_FOR_CONNECT 10
+#endif // RT2870 //
#define MT2_ASSOC_CONF 34
#define MT2_AUTH_CONF 35
@@ -948,79 +946,6 @@
#define AP_WPA_FUNC_SIZE (AP_MAX_WPA_PTK_STATE * AP_MAX_WPA_MSG)
-#ifdef APCLI_SUPPORT
-//ApCli authentication state machine
-#define APCLI_AUTH_REQ_IDLE 0
-#define APCLI_AUTH_WAIT_SEQ2 1
-#define APCLI_AUTH_WAIT_SEQ4 2
-#define APCLI_MAX_AUTH_STATE 3
-
-#define APCLI_AUTH_MACHINE_BASE 0
-#define APCLI_MT2_MLME_AUTH_REQ 0
-#define APCLI_MT2_MLME_DEAUTH_REQ 1
-#define APCLI_MT2_PEER_AUTH_EVEN 2
-#define APCLI_MT2_PEER_DEAUTH 3
-#define APCLI_MT2_AUTH_TIMEOUT 4
-#define APCLI_MAX_AUTH_MSG 5
-
-#define APCLI_AUTH_FUNC_SIZE (APCLI_MAX_AUTH_STATE * APCLI_MAX_AUTH_MSG)
-
-//ApCli association state machine
-#define APCLI_ASSOC_IDLE 0
-#define APCLI_ASSOC_WAIT_RSP 1
-#define APCLI_MAX_ASSOC_STATE 2
-
-#define APCLI_ASSOC_MACHINE_BASE 0
-#define APCLI_MT2_MLME_ASSOC_REQ 0
-#define APCLI_MT2_MLME_DISASSOC_REQ 1
-#define APCLI_MT2_PEER_DISASSOC_REQ 2
-#define APCLI_MT2_PEER_ASSOC_RSP 3
-#define APCLI_MT2_ASSOC_TIMEOUT 4
-#define APCLI_MAX_ASSOC_MSG 5
-
-#define APCLI_ASSOC_FUNC_SIZE (APCLI_MAX_ASSOC_STATE * APCLI_MAX_ASSOC_MSG)
-
-//ApCli sync state machine
-#define APCLI_SYNC_IDLE 0 // merge NO_BSS,IBSS_IDLE,IBSS_ACTIVE and BSS in to 1 state
-#define APCLI_JOIN_WAIT_PROBE_RSP 1
-#define APCLI_MAX_SYNC_STATE 2
-
-#define APCLI_SYNC_MACHINE_BASE 0
-#define APCLI_MT2_MLME_PROBE_REQ 0
-#define APCLI_MT2_PEER_PROBE_RSP 1
-#define APCLI_MT2_PROBE_TIMEOUT 2
-#define APCLI_MAX_SYNC_MSG 3
-
-#define APCLI_SYNC_FUNC_SIZE (APCLI_MAX_SYNC_STATE * APCLI_MAX_SYNC_MSG)
-
-//ApCli ctrl state machine
-#define APCLI_CTRL_DISCONNECTED 0 // merge NO_BSS,IBSS_IDLE,IBSS_ACTIVE and BSS in to 1 state
-#define APCLI_CTRL_PROBE 1
-#define APCLI_CTRL_AUTH 2
-#define APCLI_CTRL_AUTH_2 3
-#define APCLI_CTRL_ASSOC 4
-#define APCLI_CTRL_DEASSOC 5
-#define APCLI_CTRL_CONNECTED 6
-#define APCLI_MAX_CTRL_STATE 7
-
-#define APCLI_CTRL_MACHINE_BASE 0
-#define APCLI_CTRL_JOIN_REQ 0
-#define APCLI_CTRL_PROBE_RSP 1
-#define APCLI_CTRL_AUTH_RSP 2
-#define APCLI_CTRL_DISCONNECT_REQ 3
-#define APCLI_CTRL_PEER_DISCONNECT_REQ 4
-#define APCLI_CTRL_ASSOC_RSP 5
-#define APCLI_CTRL_DEASSOC_RSP 6
-#define APCLI_CTRL_JOIN_REQ_TIMEOUT 7
-#define APCLI_CTRL_AUTH_REQ_TIMEOUT 8
-#define APCLI_CTRL_ASSOC_REQ_TIMEOUT 9
-#define APCLI_MAX_CTRL_MSG 10
-
-#define APCLI_CTRL_FUNC_SIZE (APCLI_MAX_CTRL_STATE * APCLI_MAX_CTRL_MSG)
-
-#endif // APCLI_SUPPORT //
-
-
// =============================================================================
// value domain of 802.11 header FC.Tyte, which is b3..b2 of the 1st-byte of MAC header
@@ -1107,10 +1032,9 @@
// 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
@@ -1157,12 +1081,10 @@
#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
@@ -1174,15 +1096,12 @@
#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_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
@@ -1204,8 +1123,6 @@
#define AMSDU_0 0
#define AMSDU_1 1
-#endif // DOT11_N_SUPPORT //
-
// MCS use 7 bits
#define TXRATEMIMO 0x80
#define TXRATEMCS 0x7F
@@ -1298,6 +1215,10 @@
#define RFIC_2750 4 // 2.4G/5G 1T2R
#define RFIC_3020 5 // 2.4G 1T1R
#define RFIC_2020 6 // 2.4G B/G
+#ifdef RT30xx
+#define RFIC_3021 7 // 2.4G 1T2R
+#define RFIC_3022 8 // 2.4G 2T2R
+#endif
// LED Status.
#define LED_LINK_DOWN 0
@@ -1353,17 +1274,6 @@
#define OPMODE_AP 1
//#define OPMODE_L3_BRG 2 // as AP and STA at the same time
-#ifdef RT_BIG_ENDIAN
-#define DIR_READ 0
-#define DIR_WRITE 1
-#define TYPE_TXD 0
-#define TYPE_RXD 1
-#define TYPE_TXINFO 0
-#define TYPE_RXINFO 1
-#define TYPE_TXWI 0
-#define TYPE_RXWI 1
-#endif
-
// ========================= AP rtmp_def.h ===========================
// value domain for pAd->EventTab.Log[].Event
#define EVENT_RESET_ACCESS_POINT 0 // Log = "hh:mm:ss Restart Access Point"
@@ -1410,24 +1320,6 @@
#define INT_MESH 0x0500
// Use bitmap to allow coexist of ATE_TXFRAME and ATE_RXFRAME(i.e.,to support LoopBack mode)
-#ifdef RALINK_ATE
-#define ATE_START 0x00 // Start ATE
-#define ATE_STOP 0x80 // Stop ATE
-#define ATE_TXCONT 0x05 // Continuous Transmit
-#define ATE_TXCARR 0x09 // Transmit Carrier
-#define ATE_TXCARRSUPP 0x11 // Transmit Carrier Suppression
-#define ATE_TXFRAME 0x01 // Transmit Frames
-#define ATE_RXFRAME 0x02 // Receive Frames
-#ifdef RALINK_28xx_QA
-#define ATE_TXSTOP 0xe2 // Stop Transmition(i.e., TXCONT, TXCARR, TXCARRSUPP, and TXFRAME)
-#define ATE_RXSTOP 0xfd // Stop receiving Frames
-#define BBP22_TXFRAME 0x00 // Transmit Frames
-#define BBP22_TXCONT_OR_CARRSUPP 0x80 // Continuous Transmit or Carrier Suppression
-#define BBP22_TXCARR 0xc1 // Transmit Carrier
-#define BBP24_TXCONT 0x00 // Continuous Transmit
-#define BBP24_CARRSUPP 0x01 // Carrier Suppression
-#endif // RALINK_28xx_QA //
-#endif // RALINK_ATE //
// WEP Key TYPE
#define WEP_HEXADECIMAL_TYPE 0
@@ -1498,7 +1390,6 @@
// End - WIRELESS EVENTS definition
-#ifdef CONFIG_STA_SUPPORT
// definition for DLS, kathy
#define MAX_NUM_OF_INIT_DLS_ENTRY 1
#define MAX_NUM_OF_DLS_ENTRY MAX_NUMBER_OF_DLS_ENTRY
@@ -1508,15 +1399,12 @@
#define MAX_RX_REORDERBUF 64
#define DEFAULT_TX_TIMEOUT 30
#define DEFAULT_RX_TIMEOUT 30
-#ifndef CONFIG_AP_SUPPORT
#define MAX_BARECI_SESSION 8
-#endif
#ifndef IW_ESSID_MAX_SIZE
/* Maximum size of the ESSID and pAd->nickname strings */
#define IW_ESSID_MAX_SIZE 32
#endif
-#endif // CONFIG_STA_SUPPORT //
#ifdef MCAST_RATE_SPECIFIC
#define MCAST_DISABLE 0
@@ -1525,6 +1413,7 @@
#define MCAST_HTMIX 3
#endif // MCAST_RATE_SPECIFIC //
+#ifdef RT2860
// For AsicRadioOff/AsicRadioOn/AsicForceWakeup function
// This is to indicate from where to call this function.
#define DOT11POWERSAVE 0 // TO do .11 power save sleep
@@ -1532,8 +1421,14 @@
#define RTMP_HALT 2 // Called from Halt handler.
#define GUI_IDLE_POWER_SAVE 3 // Call to sleep before link up with AP
#define FROM_TX 4 // Force wake up from Tx packet.
-
-
+#endif
+#ifdef RT2870
+// For AsicRadioOff/AsicRadioOn function
+#define DOT11POWERSAVE 0
+#define GUIRADIO_OFF 1
+#define RTMP_HALT 2
+#define GUI_IDLE_POWER_SAVE 3
+#endif
// definition for WpaSupport flag
#define WPA_SUPPLICANT_DISABLE 0
@@ -1564,23 +1459,6 @@
(UINT64)(((UINT64)(x) & (UINT64) 0x00ff000000000000ULL) >> 40) | \
(UINT64)(((UINT64)(x) & (UINT64) 0xff00000000000000ULL) >> 56) ))
-#ifdef RT_BIG_ENDIAN
-
-#define cpu2le64(x) SWAP64((x))
-#define le2cpu64(x) SWAP64((x))
-#define cpu2le32(x) SWAP32((x))
-#define le2cpu32(x) SWAP32((x))
-#define cpu2le16(x) SWAP16((x))
-#define le2cpu16(x) SWAP16((x))
-#define cpu2be64(x) ((UINT64)(x))
-#define be2cpu64(x) ((UINT64)(x))
-#define cpu2be32(x) ((UINT32)(x))
-#define be2cpu32(x) ((UINT32)(x))
-#define cpu2be16(x) ((UINT16)(x))
-#define be2cpu16(x) ((UINT16)(x))
-
-#else // Little_Endian
-
#define cpu2le64(x) ((UINT64)(x))
#define le2cpu64(x) ((UINT64)(x))
#define cpu2le32(x) ((UINT32)(x))
@@ -1594,8 +1472,6 @@
#define cpu2be16(x) SWAP16((x))
#define be2cpu16(x) SWAP16((x))
-#endif // RT_BIG_ENDIAN
-
#endif // __RTMP_DEF_H__
diff --git a/drivers/staging/rt2860/spectrum.h b/drivers/staging/rt2860/spectrum.h
index 60f25dbdba9f..0a878ba81b48 100644
--- a/drivers/staging/rt2860/spectrum.h
+++ b/drivers/staging/rt2860/spectrum.h
@@ -46,16 +46,6 @@ typedef struct PACKED _CH_SW_ANN_INFO
typedef union PACKED _MEASURE_REQ_MODE
{
-#ifdef RT_BIG_ENDIAN
- struct PACKED
- {
- UINT8 Rev1:4;
- UINT8 Report:1;
- UINT8 Request:1;
- UINT8 Enable:1;
- UINT8 Rev0:1;
- } field;
-#else
struct PACKED
{
UINT8 Rev0:1;
@@ -64,7 +54,6 @@ typedef union PACKED _MEASURE_REQ_MODE
UINT8 Report:1;
UINT8 Rev1:4;
} field;
-#endif // RT_BIG_ENDIAN //
UINT8 word;
} MEASURE_REQ_MODE, *PMEASURE_REQ_MODE;
@@ -85,17 +74,6 @@ typedef struct PACKED _MEASURE_REQ_INFO
typedef union PACKED _MEASURE_BASIC_REPORT_MAP
{
-#ifdef RT_BIG_ENDIAN
- struct PACKED
- {
- UINT8 Rev:3;
- UINT8 Unmeasure:1;
- UINT8 Radar:1;
- UINT8 UnidentifiedSignal:1;
- UINT8 OfdmPreamble:1;
- UINT8 BSS:1;
- } field;
-#else
struct PACKED
{
UINT8 BSS:1;
@@ -105,7 +83,6 @@ typedef union PACKED _MEASURE_BASIC_REPORT_MAP
UINT8 Unmeasure:1;
UINT8 Rev:3;
} field;
-#endif // RT_BIG_ENDIAN //
UINT8 word;
} MEASURE_BASIC_REPORT_MAP, *PMEASURE_BASIC_REPORT_MAP;
@@ -137,17 +114,10 @@ typedef union PACKED _MEASURE_REPORT_MODE
{
struct PACKED
{
-#ifdef RT_BIG_ENDIAN
- UINT8 Rev:5;
- UINT8 Refused:1;
- UINT8 Incapable:1;
- UINT8 Late:1;
-#else
UINT8 Late:1;
UINT8 Incapable:1;
UINT8 Refused:1;
UINT8 Rev:5;
-#endif // RT_BIG_ENDIAN //
} field;
UINT8 word;
} MEASURE_REPORT_MODE, *PMEASURE_REPORT_MODE;
diff --git a/drivers/staging/rt2860/sta/assoc.c b/drivers/staging/rt2860/sta/assoc.c
index 34f1c1490f44..a0734c65bc2f 100644
--- a/drivers/staging/rt2860/sta/assoc.c
+++ b/drivers/staging/rt2860/sta/assoc.c
@@ -341,7 +341,6 @@ VOID MlmeAssocReqAction(
FrameLen += tmp;
}
-#ifdef DOT11_N_SUPPORT
// HT
if ((pAd->MlmeAux.HtCapabilityLen > 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
{
@@ -360,32 +359,14 @@ VOID MlmeAssocReqAction(
}
else
{
-#ifdef RT_BIG_ENDIAN
- HT_CAPABILITY_IE HtCapabilityTmp;
-#endif
-
-#ifndef RT_BIG_ENDIAN
MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen,
1, &HtCapIe,
1, &pAd->MlmeAux.HtCapabilityLen,
pAd->MlmeAux.HtCapabilityLen, &pAd->MlmeAux.HtCapability,
END_OF_ARGS);
-#else
- NdisZeroMemory(&HtCapabilityTmp, sizeof(HT_CAPABILITY_IE));
- NdisMoveMemory(&HtCapabilityTmp, &pAd->MlmeAux.HtCapability, pAd->MlmeAux.HtCapabilityLen);
- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));
- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));
-
- MakeOutgoingFrame(pOutBuffer + FrameLen, &TmpLen,
- 1, &HtCapIe,
- 1, &pAd->MlmeAux.HtCapabilityLen,
- pAd->MlmeAux.HtCapabilityLen,&HtCapabilityTmp,
- END_OF_ARGS);
-#endif
}
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)
@@ -473,6 +454,11 @@ VOID MlmeAssocReqAction(
RSNIe = IE_WPA2;
}
+#ifdef RT30xx
+#ifdef SIOCSIWGENIE
+ if (pAd->StaCfg.WpaSupplicantUP != 1)
+#endif // SIOCSIWGENIE //
+#endif
RTMPMakeRSNIE(pAd, pAd->StaCfg.AuthMode, pAd->StaCfg.WepStatus, BSS0);
// Check for WPA PMK cache list
@@ -499,6 +485,17 @@ VOID MlmeAssocReqAction(
}
}
+#ifdef RT30xx
+#ifdef SIOCSIWGENIE
+ if (pAd->StaCfg.WpaSupplicantUP == 1)
+ {
+ MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
+ pAd->StaCfg.RSNIE_Len, pAd->StaCfg.RSN_IE,
+ END_OF_ARGS);
+ }
+ else
+#endif
+#endif
{
MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
1, &RSNIe,
@@ -509,6 +506,11 @@ VOID MlmeAssocReqAction(
FrameLen += tmp;
+#ifdef RT30xx
+#ifdef SIOCSIWGENIE
+ if (pAd->StaCfg.WpaSupplicantUP != 1)
+#endif
+#endif
{
// Append Variable IE
NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, &RSNIe, 1);
@@ -560,34 +562,6 @@ VOID MlmeAssocReqAction(
END_OF_ARGS);
FrameLen += tmp;
- //
- // Add CipherSuite CCKM or LeapTkip if setting.
- //
-#ifdef LEAP_SUPPORT
- if (LEAP_CCKM_ON(pAd))
- {
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- CipherSuiteCiscoCCKMLen, CipherSuiteCiscoCCKM,
- END_OF_ARGS);
- FrameLen += tmp;
-
- // Third add RSN
- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, CipherSuiteCiscoCCKM, CipherSuiteCiscoCCKMLen); //Save CipherSuite
- VarIesOffset += CipherSuiteCiscoCCKMLen;
- }
- else if ((pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP) && (pAd->StaCfg.WepStatus == Ndis802_11Encryption2Enabled))
- {
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- CipherSuiteCCXTkipLen, CipherSuiteCCXTkip,
- END_OF_ARGS);
- FrameLen += tmp;
-
- // Third add RSN
- NdisMoveMemory(pAd->StaCfg.ReqVarIEs + VarIesOffset, CipherSuiteCCXTkip, CipherSuiteCCXTkipLen);
- VarIesOffset += CipherSuiteCCXTkipLen;
- }
-#endif // LEAP_SUPPORT //
-
// Add by James 03/06/27
// Set Variable IEs Length
pAd->StaCfg.ReqVarIELen = VarIesOffset;
@@ -647,23 +621,6 @@ VOID MlmeReassocReqAction(
NDIS_STATUS NStatus;
ULONG tmp;
PUCHAR pOutBuffer = NULL;
-//CCX 2.X
-#ifdef LEAP_SUPPORT
- UCHAR CkipFlag;
- UCHAR CkipNegotiationBuffer[CKIP_NEGOTIATION_LENGTH];
- UCHAR AironetCkipIe = IE_AIRONET_CKIP;
- UCHAR AironetCkipLen = CKIP_NEGOTIATION_LENGTH;
- UCHAR AironetIPAddressIE = IE_AIRONET_IPADDRESS;
- UCHAR AironetIPAddressLen = AIRONET_IPADDRESS_LENGTH;
- UCHAR AironetIPAddressBuffer[AIRONET_IPADDRESS_LENGTH] = {0x00, 0x40, 0x96, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00};
- UCHAR AironetCCKMReassocIE = IE_AIRONET_CCKMREASSOC;
- UCHAR AironetCCKMReassocLen = AIRONET_CCKMREASSOC_LENGTH;
- UCHAR AironetCCKMReassocBuffer[AIRONET_CCKMREASSOC_LENGTH];
- UCHAR AironetOUI[] = {0x00, 0x40, 0x96, 0x00};
- UCHAR MICMN[16];
- UCHAR CalcMicBuffer[80];
- ULONG CalcMicBufferLen = 0;
-#endif // LEAP_SUPPORT //
USHORT Status;
// Block all authentication request durning WPA block period
@@ -738,7 +695,6 @@ VOID MlmeReassocReqAction(
FrameLen += tmp;
}
-#ifdef DOT11_N_SUPPORT
// HT
if ((pAd->MlmeAux.HtCapabilityLen > 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
{
@@ -765,7 +721,6 @@ 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)
@@ -805,73 +760,6 @@ VOID MlmeReassocReqAction(
END_OF_ARGS);
FrameLen += TmpLen;
}
-#ifdef LEAP_SUPPORT
- if (LEAP_CCKM_ON(pAd) && (pAd->StaCfg.CCKMLinkUpFlag == TRUE))
- {
- CkipFlag = pAd->StaCfg.CkipFlag; // We have update that at PeerBeaconAtJoinRequest()
- if (CkipFlag != 0)
- {
- NdisZeroMemory(CkipNegotiationBuffer, CKIP_NEGOTIATION_LENGTH);
- CkipNegotiationBuffer[2] = 0x66;
- // Make it try KP & MIC, since we have to follow the result from AssocRsp
- CkipNegotiationBuffer[8] = 0x18;
- CkipNegotiationBuffer[CKIP_NEGOTIATION_LENGTH - 1] = 0x22;
-
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- 1, &AironetCkipIe,
- 1, &AironetCkipLen,
- AironetCkipLen, CkipNegotiationBuffer,
- END_OF_ARGS);
- FrameLen += tmp;
- }
-
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- 1, &AironetIPAddressIE,
- 1, &AironetIPAddressLen,
- AironetIPAddressLen, AironetIPAddressBuffer,
- END_OF_ARGS);
- FrameLen += tmp;
-
- //
- // The RN is incremented before each reassociation request.
- //
- pAd->StaCfg.CCKMRN++;
- //
- // Calculate MIC = hmac-md5(krk, STA-ID|BSSID|RSNIE|TSF|RN);
- //
- COPY_MAC_ADDR(CalcMicBuffer, pAd->CurrentAddress);
- CalcMicBufferLen = MAC_ADDR_LEN;
- COPY_MAC_ADDR(CalcMicBuffer + CalcMicBufferLen, pAd->MlmeAux.Bssid);
- CalcMicBufferLen += MAC_ADDR_LEN;
- NdisMoveMemory(CalcMicBuffer + CalcMicBufferLen, CipherSuiteCiscoCCKM, CipherSuiteCiscoCCKMLen);
- CalcMicBufferLen += CipherSuiteCiscoCCKMLen;
- NdisMoveMemory(CalcMicBuffer + CalcMicBufferLen, (PUCHAR) &pAd->StaCfg.CCKMBeaconAtJoinTimeStamp, sizeof(pAd->StaCfg.CCKMBeaconAtJoinTimeStamp));
- CalcMicBufferLen += sizeof(pAd->StaCfg.CCKMBeaconAtJoinTimeStamp);
- NdisMoveMemory(CalcMicBuffer + CalcMicBufferLen, (PUCHAR)&pAd->StaCfg.CCKMRN, sizeof(pAd->StaCfg.CCKMRN));
- CalcMicBufferLen += sizeof(pAd->StaCfg.CCKMRN);
- hmac_md5(pAd->StaCfg.KRK, LEN_EAP_MICK, CalcMicBuffer, CalcMicBufferLen, MICMN);
-
- //
- // fill up CCKM reassociation request element
- //
- NdisMoveMemory(AironetCCKMReassocBuffer, AironetOUI, 4);
- NdisMoveMemory(AironetCCKMReassocBuffer + 4, (PUCHAR)&pAd->StaCfg.CCKMBeaconAtJoinTimeStamp, 8);
- NdisMoveMemory(AironetCCKMReassocBuffer + 12, (PUCHAR) &pAd->StaCfg.CCKMRN, 4);
- NdisMoveMemory(AironetCCKMReassocBuffer +16, MICMN, 8);
-
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- 1, &AironetCCKMReassocIE,
- 1, &AironetCCKMReassocLen,
- AironetCCKMReassocLen, AironetCCKMReassocBuffer,
- END_OF_ARGS);
- FrameLen += tmp;
-
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- CipherSuiteCiscoCCKMLen,CipherSuiteCiscoCCKM,
- END_OF_ARGS);
- FrameLen += tmp;
- }
-#endif // LEAP_SUPPORT //
// Add CCX v2 request if CCX2 admin state is on
if (pAd->StaCfg.CCXControl.field.Enable == 1)
@@ -927,36 +815,6 @@ VOID MlmeDisassocReqAction(
ULONG Timeout = 0;
USHORT Status;
-#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++)
- {
- 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))
- {
- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr);
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- }
- }
- }
-#endif // QOS_DLS_SUPPORT //
-
// skip sanity check
pDisassocReq = (PMLME_DISASSOC_REQ_STRUCT)(Elem->Msg);
@@ -999,27 +857,11 @@ VOID MlmeDisassocReqAction(
RTMPSetTimer(&pAd->MlmeAux.DisassocTimer, Timeout); /* in mSec */
pAd->Mlme.AssocMachine.CurrState = DISASSOC_WAIT_RSP;
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
- {
- union iwreq_data wrqu;
- //send disassociate event to wpa_supplicant
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.flags = RT_DISASSOC_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;
memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-
}
/*
@@ -1057,31 +899,15 @@ 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)
{
+#ifdef RT2860
// go to procedure listed on page 376
AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen,
&EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo);
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
- {
- 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);
@@ -1091,9 +917,29 @@ VOID PeerAssocRspAction(
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
+#endif
+#ifdef RT2870
+ UCHAR MaxSupportedRateIn500Kbps = 0;
+ UCHAR idx;
+ // supported rates array may not be sorted. sort it and find the maximum rate
+ for (idx=0; idx<SupRateLen; idx++)
+ {
+ if (MaxSupportedRateIn500Kbps < (SupRate[idx] & 0x7f))
+ MaxSupportedRateIn500Kbps = SupRate[idx] & 0x7f;
+ }
+
+ for (idx=0; idx<ExtRateLen; idx++)
+ {
+ if (MaxSupportedRateIn500Kbps < (ExtRate[idx] & 0x7f))
+ MaxSupportedRateIn500Kbps = ExtRate[idx] & 0x7f;
+ }
+ // go to procedure listed on page 376
+ AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen,
+ &EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo);
+ StaAddMacTableEntry(pAd, &pAd->MacTab.Content[BSSID_WCID], MaxSupportedRateIn500Kbps, &HtCapability, HtCapabilityLen, CapabilityInfo);
+#endif
pAd->StaCfg.CkipFlag = CkipFlag;
if (CkipFlag & 0x18)
{
@@ -1109,14 +955,6 @@ VOID PeerAssocRspAction(
}
else
{
- // Faile on Association, we need to check the status code
- // Is that a Rogue AP?
-#ifdef LEAP_SUPPORT
- if ((pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP) && (Status == MLME_ALG_NOT_SUPPORT))
- { //Possibly Rogue AP
- RogueApTableSetEntry(pAd, &pAd->StaCfg.RogueApTab, pAd->MlmeAux.Bssid, LEAP_REASON_INVALID_AUTH);
- }
-#endif // LEAP_SUPPORT //
}
pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_ASSOC_CONF, 2, &Status);
@@ -1172,21 +1010,6 @@ VOID PeerReassocRspAction(
AssocPostProc(pAd, Addr2, CapabilityInfo, Aid, SupRate, SupRateLen, ExtRate, ExtRateLen,
&EdcaParm, &HtCapability, HtCapabilityLen, &AddHtInfo);
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
- {
- 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);
@@ -1196,41 +1019,9 @@ VOID PeerReassocRspAction(
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
}
- //
- // Cisco Leap CCKM supported Re-association.
- //
-#ifdef LEAP_SUPPORT
- if (LEAP_CCKM_ON(pAd) && (pAd->StaCfg.CCKMLinkUpFlag == TRUE))
- {
- if (CCKMAssocRspSanity(pAd, Elem->Msg, Elem->MsgLen) == TRUE)
- {
- pAd->StaCfg.CkipFlag = CkipFlag;
- if (CkipFlag & 0x18)
- {
- NdisZeroMemory(pAd->StaCfg.TxSEQ, 4);
- NdisZeroMemory(pAd->StaCfg.RxSEQ, 4);
- NdisZeroMemory(pAd->StaCfg.CKIPMIC, 4);
- pAd->StaCfg.GIV[0] = RandomByte(pAd);
- pAd->StaCfg.GIV[1] = RandomByte(pAd);
- pAd->StaCfg.GIV[2] = RandomByte(pAd);
- pAd->StaCfg.bCkipOn = TRUE;
- DBGPRINT(RT_DEBUG_TRACE, ("<CCX> pAd->StaCfg.CkipFlag = 0x%02x\n", pAd->StaCfg.CkipFlag));
- }
-
- pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
- MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_REASSOC_CONF, 2, &Status);
- }
- else
- {
- DBGPRINT(RT_DEBUG_TRACE, ("ASSOC - CCKMAssocRspSanity() sanity check fail\n"));
- }
- }
- else
-#endif // LEAP_SUPPORT //
{
// CkipFlag is no use for reassociate
pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
@@ -1275,7 +1066,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))
{
@@ -1301,7 +1092,6 @@ VOID AssocPostProc(
pEdcaParm->Txop[3] = 48;
}
-#endif // DOT11_N_SUPPORT //
NdisMoveMemory(&pAd->MlmeAux.APEdcaParm, pEdcaParm, sizeof(EDCA_PARM));
@@ -1315,7 +1105,6 @@ 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);
@@ -1324,7 +1113,6 @@ 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);
@@ -1414,21 +1202,6 @@ 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)
- {
- // Cisco_LEAP has start a timer
- // We should cancel it if using LEAP
- RTMPCancelTimer(&pAd->StaCfg.LeapAuthTimer, &TimerCancelled);
- //Check is it mach the LEAP Authentication failed as possible a Rogue AP
- //on it's PortSecured not equal to WPA_802_1X_PORT_SECURED while process the Association.
- if ((pAd->Mlme.LeapMachine.CurrState != LEAP_IDLE) && (pAd->StaCfg.PortSecured != WPA_802_1X_PORT_SECURED))
- {
- RogueApTableSetEntry(pAd, &pAd->StaCfg.RogueApTab, Addr2, LEAP_REASON_AUTH_TIMEOUT);
- }
- }
-#endif // LEAP_SUPPORT //
//
// Get Current System time and Turn on AdjacentAPReport
//
@@ -1437,26 +1210,11 @@ VOID PeerDisassocAction(
LinkDown(pAd, TRUE);
pAd->Mlme.AssocMachine.CurrState = ASSOC_IDLE;
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
- {
- union iwreq_data wrqu;
- //send disassociate event to wpa_supplicant
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.flags = RT_DISASSOC_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;
memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
}
}
else
@@ -1739,36 +1497,6 @@ VOID SwitchBetweenWepAndCkip(
}
}
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
-VOID SendAssocIEsToWpaSupplicant(
- IN PRTMP_ADAPTER pAd)
-{
- union iwreq_data wrqu;
- unsigned char custom[IW_CUSTOM_MAX] = {0};
-
- if ((pAd->StaCfg.ReqVarIELen + 17) <= IW_CUSTOM_MAX)
- {
- sprintf(custom, "ASSOCINFO_ReqIEs=");
- NdisMoveMemory(custom+17, pAd->StaCfg.ReqVarIEs, pAd->StaCfg.ReqVarIELen);
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.length = pAd->StaCfg.ReqVarIELen + 17;
- wrqu.data.flags = RT_REQIE_EVENT_FLAG;
- wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, custom);
-
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.flags = RT_ASSOCINFO_EVENT_FLAG;
- wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, NULL);
- }
- else
- DBGPRINT(RT_DEBUG_TRACE, ("pAd->StaCfg.ReqVarIELen + 17 > MAX_CUSTOM_LEN\n"));
-
- return;
-}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-#endif // WPA_SUPPLICANT_SUPPORT //
-
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
int wext_notify_event_assoc(
IN RTMP_ADAPTER *pAd)
{
@@ -1791,7 +1519,7 @@ int wext_notify_event_assoc(
wrqu.data.length = (pAd->StaCfg.ReqVarIELen*2) + 17;
sprintf(custom, "ASSOCINFO(ReqIEs=");
for (idx=0; idx<pAd->StaCfg.ReqVarIELen; idx++)
- sprintf(custom, "%s%02x", custom, pAd->StaCfg.ReqVarIEs[idx]);
+ sprintf(custom + strlen(custom), "%02x", pAd->StaCfg.ReqVarIEs[idx]);
wireless_send_event(pAd->net_dev, IWEVCUSTOM, &wrqu, custom);
}
else
@@ -1801,5 +1529,227 @@ int wext_notify_event_assoc(
return 0;
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
+#ifdef RT2870
+BOOLEAN StaAddMacTableEntry(
+ IN PRTMP_ADAPTER pAd,
+ IN PMAC_TABLE_ENTRY pEntry,
+ IN UCHAR MaxSupportedRateIn500Kbps,
+ IN HT_CAPABILITY_IE *pHtCapability,
+ IN UCHAR HtCapabilityLen,
+ IN USHORT CapabilityInfo)
+{
+ UCHAR MaxSupportedRate = RATE_11;
+
+ if (ADHOC_ON(pAd))
+ CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE);
+
+ switch (MaxSupportedRateIn500Kbps)
+ {
+ case 108: MaxSupportedRate = RATE_54; break;
+ case 96: MaxSupportedRate = RATE_48; break;
+ case 72: MaxSupportedRate = RATE_36; break;
+ case 48: MaxSupportedRate = RATE_24; break;
+ case 36: MaxSupportedRate = RATE_18; break;
+ case 24: MaxSupportedRate = RATE_12; break;
+ case 18: MaxSupportedRate = RATE_9; break;
+ case 12: MaxSupportedRate = RATE_6; break;
+ case 22: MaxSupportedRate = RATE_11; break;
+ case 11: MaxSupportedRate = RATE_5_5; break;
+ case 4: MaxSupportedRate = RATE_2; break;
+ case 2: MaxSupportedRate = RATE_1; break;
+ default: MaxSupportedRate = RATE_11; break;
+ }
+
+ if ((pAd->CommonCfg.PhyMode == PHY_11G) && (MaxSupportedRate < RATE_FIRST_OFDM_RATE))
+ return FALSE;
+
+ // 11n only
+ if (((pAd->CommonCfg.PhyMode == PHY_11N_2_4G) || (pAd->CommonCfg.PhyMode == PHY_11N_5G))&& (HtCapabilityLen == 0))
+ return FALSE;
+
+ if (!pEntry)
+ return FALSE;
+
+ NdisAcquireSpinLock(&pAd->MacTabLock);
+ if (pEntry)
+ {
+ pEntry->PortSecured = WPA_802_1X_PORT_SECURED;
+ if ((MaxSupportedRate < RATE_FIRST_OFDM_RATE) ||
+ (pAd->CommonCfg.PhyMode == PHY_11B))
+ {
+ pEntry->RateLen = 4;
+ if (MaxSupportedRate >= RATE_FIRST_OFDM_RATE)
+ MaxSupportedRate = RATE_11;
+ }
+ else
+ pEntry->RateLen = 12;
+
+ pEntry->MaxHTPhyMode.word = 0;
+ pEntry->MinHTPhyMode.word = 0;
+ pEntry->HTPhyMode.word = 0;
+ pEntry->MaxSupportedRate = MaxSupportedRate;
+ if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE)
+ {
+ pEntry->MaxHTPhyMode.field.MODE = MODE_CCK;
+ pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate;
+ pEntry->MinHTPhyMode.field.MODE = MODE_CCK;
+ pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate;
+ pEntry->HTPhyMode.field.MODE = MODE_CCK;
+ pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate;
+ }
+ else
+ {
+ pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM;
+ pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
+ pEntry->MinHTPhyMode.field.MODE = MODE_OFDM;
+ pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
+ pEntry->HTPhyMode.field.MODE = MODE_OFDM;
+ pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
+ }
+ pEntry->CapabilityInfo = CapabilityInfo;
+ CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_AGGREGATION_CAPABLE);
+ CLIENT_STATUS_CLEAR_FLAG(pEntry, fCLIENT_STATUS_PIGGYBACK_CAPABLE);
+ }
+
+ // If this Entry supports 802.11n, upgrade to HT rate.
+ if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
+ {
+ UCHAR j, bitmask; //k,bitmask;
+ CHAR i;
+
+ if (ADHOC_ON(pAd))
+ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE);
+ if ((pHtCapability->HtCapInfo.GF) && (pAd->CommonCfg.DesiredHtPhy.GF))
+ {
+ pEntry->MaxHTPhyMode.field.MODE = MODE_HTGREENFIELD;
+ }
+ else
+ {
+ pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;
+ pAd->MacTab.fAnyStationNonGF = TRUE;
+ pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1;
+ }
+
+ if ((pHtCapability->HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth))
+ {
+ pEntry->MaxHTPhyMode.field.BW= BW_40;
+ pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(pHtCapability->HtCapInfo.ShortGIfor40));
+ }
+ else
+ {
+ pEntry->MaxHTPhyMode.field.BW = BW_20;
+ pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(pHtCapability->HtCapInfo.ShortGIfor20));
+ pAd->MacTab.fAnyStation20Only = TRUE;
+ }
+
+ // 3*3
+ if (pAd->MACVersion >= RALINK_2883_VERSION && pAd->MACVersion < RALINK_3070_VERSION)
+ pEntry->MaxHTPhyMode.field.TxBF = pAd->CommonCfg.RegTransmitSetting.field.TxBF;
+
+ // find max fixed rate
+ for (i=23; i>=0; i--) // 3*3
+ {
+ j = i/8;
+ bitmask = (1<<(i-(j*8)));
+ if ((pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j] & bitmask) && (pHtCapability->MCSSet[j] & bitmask))
+ {
+ pEntry->MaxHTPhyMode.field.MCS = i;
+ break;
+ }
+ if (i==0)
+ break;
+ }
+
+
+ if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO)
+ {
+ if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32)
+ {
+ // Fix MCS as HT Duplicated Mode
+ pEntry->MaxHTPhyMode.field.BW = 1;
+ pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;
+ pEntry->MaxHTPhyMode.field.STBC = 0;
+ pEntry->MaxHTPhyMode.field.ShortGI = 0;
+ pEntry->MaxHTPhyMode.field.MCS = 32;
+ }
+ else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS)
+ {
+ // STA supports fixed MCS
+ pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
+ }
+ }
+
+ pEntry->MaxHTPhyMode.field.STBC = (pHtCapability->HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC));
+ pEntry->MpduDensity = pHtCapability->HtCapParm.MpduDensity;
+ pEntry->MaxRAmpduFactor = pHtCapability->HtCapParm.MaxRAmpduFactor;
+ pEntry->MmpsMode = (UCHAR)pHtCapability->HtCapInfo.MimoPs;
+ pEntry->AMsduSize = (UCHAR)pHtCapability->HtCapInfo.AMsduSize;
+ pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;
+
+ if (pAd->CommonCfg.DesiredHtPhy.AmsduEnable && (pAd->CommonCfg.REGBACapability.field.AutoBA == FALSE))
+ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_AMSDU_INUSED);
+ if (pHtCapability->HtCapInfo.ShortGIfor20)
+ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE);
+ if (pHtCapability->HtCapInfo.ShortGIfor40)
+ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE);
+ if (pHtCapability->HtCapInfo.TxSTBC)
+ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE);
+ if (pHtCapability->HtCapInfo.RxSTBC)
+ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE);
+ if (pHtCapability->ExtHtCapInfo.PlusHTC)
+ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE);
+ if (pAd->CommonCfg.bRdg && pHtCapability->ExtHtCapInfo.RDGSupport)
+ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE);
+ if (pHtCapability->ExtHtCapInfo.MCSFeedback == 0x03)
+ CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE);
+ }
+ else
+ {
+ pAd->MacTab.fAnyStationIsLegacy = TRUE;
+ }
+
+ NdisMoveMemory(&pEntry->HTCapability, pHtCapability, sizeof(HT_CAPABILITY_IE));
+
+ pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;
+ pEntry->CurrTxRate = pEntry->MaxSupportedRate;
+
+ // Set asic auto fall back
+ if (pAd->StaCfg.bAutoTxRateSwitch == TRUE)
+ {
+ PUCHAR pTable;
+ UCHAR TableSize = 0;
+
+ MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex);
+ pEntry->bAutoTxRateSwitch = TRUE;
+ }
+ else
+ {
+ pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE;
+ pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
+ pEntry->bAutoTxRateSwitch = FALSE;
+
+ // If the legacy mode is set, overwrite the transmit setting of this entry.
+ RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry);
+ }
+
+ pEntry->PortSecured = WPA_802_1X_PORT_SECURED;
+ pEntry->Sst = SST_ASSOC;
+ pEntry->AuthState = AS_AUTH_OPEN;
+ pEntry->AuthMode = pAd->StaCfg.AuthMode;
+ pEntry->WepStatus = pAd->StaCfg.WepStatus;
+
+ NdisReleaseSpinLock(&pAd->MacTabLock);
+
+ {
+ 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);
+
+ }
+ return TRUE;
+}
+#endif /* RT2870 */
diff --git a/drivers/staging/rt2860/sta/auth.c b/drivers/staging/rt2860/sta/auth.c
index 73fb8d6ea76f..d8414eac42f8 100644
--- a/drivers/staging/rt2860/sta/auth.c
+++ b/drivers/staging/rt2860/sta/auth.c
@@ -218,15 +218,9 @@ VOID PeerAuthRspAtSeq2Action(
{
// Authentication Mode "LEAP" has allow for CCX 1.X
if ((pAd->MlmeAux.Alg == Ndis802_11AuthModeOpen)
-#ifdef LEAP_SUPPORT
- || (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)
-#endif // LEAP_SUPPORT //
)
{
pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
-#ifdef LEAP_SUPPORT
- pAd->Mlme.LeapMachine.CurrState = LEAP_IDLE;
-#endif // LEAP_SUPPORT //
MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MT2_AUTH_CONF, 2, &Status);
}
else
@@ -282,14 +276,6 @@ VOID PeerAuthRspAtSeq2Action(
}
else
{
-#ifdef LEAP_SUPPORT
- if (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)
- {
- //Invalid Authentication possible rogue AP
- //Add this Ap to Rogue AP.
- RogueApTableSetEntry(pAd, &pAd->StaCfg.RogueApTab, Addr2, LEAP_REASON_INVALID_AUTH);
- }
-#endif // LEAP_SUPPORT //
pAd->StaCfg.AuthFailReason = Status;
COPY_MAC_ADDR(pAd->StaCfg.AuthFailSta, Addr2);
pAd->Mlme.AuthMachine.CurrState = AUTH_REQ_IDLE;
diff --git a/drivers/staging/rt2860/sta/auth_rsp.c b/drivers/staging/rt2860/sta/auth_rsp.c
index f7aa4b99cf56..cc639b1c6c13 100644
--- a/drivers/staging/rt2860/sta/auth_rsp.c
+++ b/drivers/staging/rt2860/sta/auth_rsp.c
@@ -127,36 +127,17 @@ 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;
memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
-
// send wireless event - for deauthentication
if (pAd->CommonCfg.bWirelessEvent)
RTMPSendWirelessEvent(pAd, IW_DEAUTH_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0);
LinkDown(pAd, TRUE);
-
- // Authentication Mode Cisco_LEAP has start a timer
- // We should cancel it if using LEAP
-#ifdef LEAP_SUPPORT
- if (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)
- {
- RTMPCancelTimer(&pAd->StaCfg.LeapAuthTimer, &TimerCancelled);
- //Check is it mach the LEAP Authentication failed as possible a Rogue AP
- //on it's PortSecured not equal to WPA_802_1X_PORT_SECURED while process the Authenticaton.
- if ((pAd->StaCfg.PortSecured != WPA_802_1X_PORT_SECURED) && (pAd->Mlme.LeapMachine.CurrState != LEAP_IDLE))
- {
- RogueApTableSetEntry(pAd, &pAd->StaCfg.RogueApTab, Addr2, LEAP_REASON_AUTH_TIMEOUT);
- }
- }
-#endif // LEAP_SUPPORT //
}
}
else
diff --git a/drivers/staging/rt2860/sta/connect.c b/drivers/staging/rt2860/sta/connect.c
index d8bcc76688a6..ac7135186665 100644
--- a/drivers/staging/rt2860/sta/connect.c
+++ b/drivers/staging/rt2860/sta/connect.c
@@ -178,13 +178,6 @@ VOID MlmeCntlMachinePerformAction(
pAd->bLedOnScanning = FALSE;
RTMPSetLED(pAd, pAd->LedStatus);
}
-#ifdef DOT11N_DRAFT3
- // AP sent a 2040Coexistence mgmt frame, then station perform a scan, and then send back the respone.
- if (pAd->CommonCfg.BSSCoexist2040.field.InfoReq == 1)
- {
- Update2040CoexistFrameAndNotify(pAd, BSSID_WCID, TRUE);
- }
-#endif // DOT11N_DRAFT3 //
}
break;
@@ -195,6 +188,38 @@ VOID MlmeCntlMachinePerformAction(
pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
}
break;
+#ifdef RT2870
+ //
+ // This state is for that we want to connect to an AP but
+ // it didn't find on BSS List table. So we need to scan the air first,
+ // after that we can try to connect to the desired AP if available.
+ //
+ case CNTL_WAIT_SCAN_FOR_CONNECT:
+ if(Elem->MsgType == MT2_SCAN_CONF)
+ {
+ // Resume TxRing after SCANING complete. We hope the out-of-service time
+ // won't be too long to let upper layer time-out the waiting frames
+ RTMPResumeMsduTransmission(pAd);
+#ifdef CCX_SUPPORT
+ if (pAd->StaCfg.CCXReqType != MSRN_TYPE_UNUSED)
+ {
+ // Cisco scan request is finished, prepare beacon report
+ MlmeEnqueue(pAd, AIRONET_STATE_MACHINE, MT2_AIRONET_SCAN_DONE, 0, NULL);
+ }
+#endif // CCX_SUPPORT //
+ pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
+
+ //
+ // Check if we can connect to.
+ //
+ BssTableSsidSort(pAd, &pAd->MlmeAux.SsidBssTab, pAd->MlmeAux.AutoReconnectSsid, pAd->MlmeAux.AutoReconnectSsidLen);
+ if (pAd->MlmeAux.SsidBssTab.BssNr > 0)
+ {
+ MlmeAutoReconnectLastSSID(pAd);
+ }
+ }
+ break;
+#endif // RT2870 //
default:
DBGPRINT_ERR(("!ERROR! CNTL - Illegal message type(=%ld)", Elem->MsgType));
break;
@@ -234,19 +259,11 @@ VOID CntlIdleProc(
break;
case OID_802_11_DISASSOCIATE:
-#ifdef RALINK_ATE
- if(ATE_ON(pAd))
- {
- DBGPRINT(RT_DEBUG_TRACE, ("The driver is in ATE mode now\n"));
- break;
- }
-#endif // RALINK_ATE //
DisassocParmFill(pAd, &DisassocReq, pAd->CommonCfg.Bssid, REASON_DISASSOC_STA_LEAVING);
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 != WPA_SUPPLICANT_ENABLE_WITH_WEB_UI)
-#endif // WPA_SUPPLICANT_SUPPORT //
{
// Set the AutoReconnectSsid to prevent it reconnect to old SSID
// Since calling this indicate user don't want to connect to that SSID anymore.
@@ -263,12 +280,6 @@ VOID CntlIdleProc(
WpaMicFailureReportFrame(pAd, Elem);
break;
-#ifdef QOS_DLS_SUPPORT
- case RT_OID_802_11_SET_DLS_PARAM:
- CntlOidDLSSetupProc(pAd, Elem);
- break;
-#endif // QOS_DLS_SUPPORT //
-
default:
DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Illegal message in CntlIdleProc(MsgType=%ld)\n",Elem->MsgType));
break;
@@ -283,13 +294,6 @@ VOID CntlOidScanProc(
ULONG BssIdx = BSS_NOT_FOUND;
BSS_ENTRY CurrBss;
-#ifdef RALINK_ATE
-/* Disable scanning when ATE is running. */
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
-
// 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))
@@ -337,9 +341,11 @@ VOID CntlOidSsidProc(
MLME_DISASSOC_REQ_STRUCT DisassocReq;
ULONG Now;
+#ifdef RT2860
// BBP and RF are not accessible in PS mode, we has to wake them up first
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
AsicForceWakeup(pAd, RTMP_HALT);
+#endif
// Step 1. record the desired user settings to MlmeAux
NdisZeroMemory(pAd->MlmeAux.Ssid, MAX_LEN_OF_SSID);
@@ -377,9 +383,6 @@ VOID CntlOidSsidProc(
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)
-#ifdef LEAP_SUPPORT
- || (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)
-#endif // LEAP_SUPPORT //
) &&
(pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED))
{
@@ -420,7 +423,7 @@ VOID CntlOidSsidProc(
}
pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
+
{
union iwreq_data wrqu;
@@ -429,7 +432,6 @@ VOID CntlOidSsidProc(
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
}
}
else if (INFRA_ON(pAd))
@@ -513,12 +515,6 @@ VOID CntlOidRTBssidProc(
MLME_DISASSOC_REQ_STRUCT DisassocReq;
MLME_JOIN_REQ_STRUCT JoinReq;
-#ifdef RALINK_ATE
-/* No need to perform this routine when ATE is running. */
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
// record user desired settings
COPY_MAC_ADDR(pAd->MlmeAux.Bssid, pOidBssid);
pAd->MlmeAux.BssType = pAd->StaCfg.BssType;
@@ -558,7 +554,7 @@ VOID CntlOidRTBssidProc(
// already connected to the same BSSID, go back to idle state directly
DBGPRINT(RT_DEBUG_TRACE, ("CNTL - already in this BSSID. ignore this SET_BSSID request\n"));
pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
+
{
union iwreq_data wrqu;
@@ -567,7 +563,6 @@ VOID CntlOidRTBssidProc(
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
}
else
{
@@ -672,113 +667,6 @@ VOID CntlMlmeRoamingProc(
IterateOnBssTab(pAd);
}
-#ifdef QOS_DLS_SUPPORT
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
-*/
-VOID CntlOidDLSSetupProc(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem)
-{
- PRT_802_11_DLS pDLS = (PRT_802_11_DLS)Elem->Msg;
- MLME_DLS_REQ_STRUCT MlmeDlsReq;
- INT i;
- USHORT reason = REASON_UNSPECIFY;
-
- DBGPRINT(RT_DEBUG_TRACE,("CNTL - (OID set %02x:%02x:%02x:%02x:%02x:%02x with Valid=%d, Status=%d, TimeOut=%d, CountDownTimer=%d)\n",
- pDLS->MacAddr[0], pDLS->MacAddr[1], pDLS->MacAddr[2], pDLS->MacAddr[3], pDLS->MacAddr[4], pDLS->MacAddr[5],
- pDLS->Valid, pDLS->Status, pDLS->TimeOut, pDLS->CountDownTimer));
-
- if (!pAd->CommonCfg.bDLSCapable)
- return;
-
- // DLS will not be supported when Adhoc mode
- if (INFRA_ON(pAd))
- {
- for (i = 0; i < MAX_NUM_OF_DLS_ENTRY; i++)
- {
- if (pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) &&
- (pDLS->TimeOut == pAd->StaCfg.DLSEntry[i].TimeOut) && MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- // 1. Same setting, just drop it
- DBGPRINT(RT_DEBUG_TRACE,("CNTL - setting unchanged\n"));
- break;
- }
- else if (!pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) &&
- MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- // 2. Disable DLS link case, just tear down DLS link
- reason = REASON_QOS_UNWANTED_MECHANISM;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- DBGPRINT(RT_DEBUG_TRACE,("CNTL - start tear down procedure\n"));
- break;
- }
- else if ((i < MAX_NUM_OF_DLS_ENTRY) && pDLS->Valid && !pAd->StaCfg.DLSEntry[i].Valid)
- {
- // 3. Enable case, start DLS setup procedure
- NdisMoveMemory(&pAd->StaCfg.DLSEntry[i], pDLS, sizeof(RT_802_11_DLS_UI));
-
- //Update countdown timer
- pAd->StaCfg.DLSEntry[i].CountDownTimer = pAd->StaCfg.DLSEntry[i].TimeOut;
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_REQ, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- DBGPRINT(RT_DEBUG_TRACE,("CNTL - DLS setup case\n"));
- break;
- }
- else if ((i < MAX_NUM_OF_DLS_ENTRY) && pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid &&
- (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) && !MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- // 4. update mac case, tear down old DLS and setup new DLS
- reason = REASON_QOS_UNWANTED_MECHANISM;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- NdisMoveMemory(&pAd->StaCfg.DLSEntry[i], pDLS, sizeof(RT_802_11_DLS_UI));
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_REQ, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- DBGPRINT(RT_DEBUG_TRACE,("CNTL - DLS tear down and restart case\n"));
- break;
- }
- else if (pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid &&
- MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr) && (pAd->StaCfg.DLSEntry[i].TimeOut != pDLS->TimeOut))
- {
- // 5. update timeout case, start DLS setup procedure (no tear down)
- pAd->StaCfg.DLSEntry[i].TimeOut = pDLS->TimeOut;
- //Update countdown timer
- pAd->StaCfg.DLSEntry[i].CountDownTimer = pAd->StaCfg.DLSEntry[i].TimeOut;
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_REQ, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- DBGPRINT(RT_DEBUG_TRACE,("CNTL - DLS update timeout case\n"));
- break;
- }
- else if (pDLS->Valid && pAd->StaCfg.DLSEntry[i].Valid &&
- (pAd->StaCfg.DLSEntry[i].Status != DLS_FINISH) && MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- // 6. re-setup case, start DLS setup procedure (no tear down)
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_REQ, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- DBGPRINT(RT_DEBUG_TRACE,("CNTL - DLS retry setup procedure\n"));
- break;
- }
- else
- {
- DBGPRINT(RT_DEBUG_WARN,("CNTL - DLS not changed in entry - %d - Valid=%d, Status=%d, TimeOut=%d\n",
- i, pAd->StaCfg.DLSEntry[i].Valid, pAd->StaCfg.DLSEntry[i].Status, pAd->StaCfg.DLSEntry[i].TimeOut));
- }
- }
- }
-}
-#endif // QOS_DLS_SUPPORT //
-
/*
==========================================================================
Description:
@@ -870,14 +758,6 @@ VOID CntlWaitJoinProc(
// 2. joined a new INFRA network, start from authentication
else
{
-#ifdef LEAP_SUPPORT
- // Add AuthMode "LEAP" for CCX 1.X
- if (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)
- {
- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, CISCO_AuthModeLEAP);
- }
- else
-#endif // LEAP_SUPPORT //
{
// either Ndis802_11AuthModeShared or Ndis802_11AuthModeAutoSwitch, try shared key first
if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeShared) ||
@@ -937,7 +817,7 @@ 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);
@@ -961,7 +841,6 @@ VOID CntlWaitStartProc(
}
}
else
-#endif // DOT11_N_SUPPORT //
{
pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE;
}
@@ -974,9 +853,6 @@ VOID CntlWaitStartProc(
{
pAd->CommonCfg.RadarDetect.RDMode = RD_SILENCE_MODE;
pAd->CommonCfg.RadarDetect.RDCount = 0;
-#ifdef DFS_SUPPORT
- BbpRadarDetectionStart(pAd);
-#endif // DFS_SUPPORT //
}
DBGPRINT(RT_DEBUG_TRACE, ("CNTL - start a new IBSS = %02x:%02x:%02x:%02x:%02x:%02x ...\n",
@@ -1016,21 +892,6 @@ VOID CntlWaitAuthProc(
AssocParmFill(pAd, &AssocReq, pAd->MlmeAux.Bssid, pAd->MlmeAux.CapabilityInfo,
ASSOC_TIMEOUT, pAd->StaCfg.DefaultListenCount);
-#ifdef LEAP_SUPPORT
- //
- // Cisco Leap CCKM supported Re-association.
- //
- if (LEAP_CCKM_ON(pAd) && (pAd->StaCfg.CCKMLinkUpFlag == TRUE))
- {
- //if CCKM is turn on , that's mean Fast Reauthentication
- //Use CCKM Reassociation instead of normal association for Fast Roaming.
- MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_REASSOC_REQ,
- sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq);
-
- pAd->Mlme.CntlMachine.CurrState = CNTL_WAIT_REASSOC;
- }
- else
-#endif // LEAP_SUPPORT //
{
MlmeEnqueue(pAd, ASSOC_STATE_MACHINE, MT2_MLME_ASSOC_REQ,
sizeof(MLME_ASSOC_REQ_STRUCT), &AssocReq);
@@ -1044,14 +905,7 @@ VOID CntlWaitAuthProc(
// ageing-out. The previous authentication attempt must have let it remove us.
// so try Authentication again may help. For D-Link DWL-900AP+ compatibility.
DBGPRINT(RT_DEBUG_TRACE, ("CNTL - AUTH FAIL, try again...\n"));
-#ifdef LEAP_SUPPORT
- //Add AuthMode "LEAP" for CCX 1.X
- if (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)
- {
- AuthParmFill(pAd, &AuthReq, pAd->MlmeAux.Bssid, CISCO_AuthModeLEAP);
- }
- else
-#endif // LEAP_SUPPORT //
+
{
if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeShared) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch))
@@ -1103,20 +957,6 @@ VOID CntlWaitAuthProc2(
}
else
{
-#ifdef LEAP_SUPPORT
- // Process LEAP first, since it use different control variable
- // We don't want to affect other poven operation
- if (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)
- {
- // LEAP Auth not success, try next BSS
- DBGPRINT(RT_DEBUG_TRACE, ("CNTL - *LEAP* AUTH FAIL, give up; try next BSS\n"));
- DBGPRINT(RT_DEBUG_TRACE, ("Total match BSSID [=%d]\n", pAd->MlmeAux.SsidBssTab.BssNr));
- pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
- pAd->MlmeAux.BssIdx++;
- IterateOnBssTab(pAd);
- }
- else
-#endif // LEAP_SUPPORT //
if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeAutoSwitch) &&
(pAd->MlmeAux.Alg == Ndis802_11AuthModeShared))
{
@@ -1205,14 +1045,6 @@ VOID CntlWaitReassocProc(
if (pAd->CommonCfg.bWirelessEvent)
RTMPSendWirelessEvent(pAd, IW_ASSOC_EVENT_FLAG, pAd->MacTab.Content[BSSID_WCID].Addr, BSS0, 0);
-
-#ifdef LEAP_SUPPORT
- if (LEAP_CCKM_ON(pAd))
- {
- STA_PORT_SECURED(pAd);
- pAd->StaCfg.WpaState = SS_FINISH;
- }
-#endif // LEAP_SUPPORT //
pAd->Mlme.CntlMachine.CurrState = CNTL_IDLE;
DBGPRINT(RT_DEBUG_TRACE, ("CNTL - Re-assocition successful on BSS #%ld\n", pAd->MlmeAux.RoamIdx));
}
@@ -1226,6 +1058,44 @@ VOID CntlWaitReassocProc(
}
}
+
+#ifdef RT2870
+VOID AdhocTurnOnQos(
+ IN PRTMP_ADAPTER pAd)
+{
+#define AC0_DEF_TXOP 0
+#define AC1_DEF_TXOP 0
+#define AC2_DEF_TXOP 94
+#define AC3_DEF_TXOP 47
+
+ // 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);
+}
+#endif /* RT2870 */
+
/*
==========================================================================
Description:
@@ -1244,12 +1114,14 @@ VOID LinkUp(
UCHAR Value = 0, idx;
MAC_TABLE_ENTRY *pEntry = NULL, *pCurrEntry;
+#ifdef RT2860
if (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND))
{
RTMPPCIeLinkCtrlValueRestore(pAd, RESTORE_HALT);
RTMPusecDelay(6000);
pAd->bPCIclkOff = FALSE;
}
+#endif
pEntry = &pAd->MacTab.Content[BSSID_WCID];
@@ -1266,15 +1138,15 @@ VOID LinkUp(
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.
//rt2860b. Don't know why need this
SwitchBetweenWepAndCkip(pAd);
+#ifdef RT2860
// Before power save before link up function, We will force use 1R.
// So after link up, check Rx antenna # again.
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &Value);
@@ -1292,17 +1164,30 @@ VOID LinkUp(
}
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, Value);
pAd->StaCfg.BBPR3 = Value;
+#endif /* RT2860 */
if (BssType == BSS_ADHOC)
{
OPSTATUS_SET_FLAG(pAd, fOP_STATUS_ADHOC_ON);
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON);
-#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 //
+#ifdef RT30xx
+ if ((pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) &&
+ (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_ABOVE))
+ {
+ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel + 2;
+ }
+ else if ((pAd->CommonCfg.Channel > 2) &&
+ (pAd->CommonCfg.HtCapability.HtCapInfo.ChannelWidth == BW_40) &&
+ (pAd->CommonCfg.AddHTInfo.AddHtInfo.ExtChanOffset == EXTCHA_BELOW))
+ {
+ pAd->CommonCfg.CentralChannel = pAd->CommonCfg.Channel - 2;
+ }
+#endif
+#ifdef RT2870
+ if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
+ AdhocTurnOnQos(pAd);
+#endif
DBGPRINT(RT_DEBUG_TRACE, ("!!!Adhoc LINK UP !!! \n" ));
}
@@ -1321,7 +1206,6 @@ VOID LinkUp(
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))
{
@@ -1339,7 +1223,9 @@ VOID LinkUp(
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
RTMP_IO_READ32(pAd, TX_BAND_CFG, &Data);
Data &= 0xfffffffe;
@@ -1374,7 +1260,9 @@ VOID LinkUp(
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
if (pAd->MACVersion == 0x28600100)
{
@@ -1387,7 +1275,6 @@ VOID LinkUp(
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;
@@ -1405,7 +1292,9 @@ VOID LinkUp(
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
if (pAd->MACVersion == 0x28600100)
{
@@ -1427,9 +1316,7 @@ VOID LinkUp(
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);
@@ -1439,7 +1326,6 @@ 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.
@@ -1450,7 +1336,6 @@ VOID LinkUp(
else
AsicUpdateProtect(pAd, pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode, ALLN_SETPROTECT, FALSE, FALSE);
}
-#endif // DOT11_N_SUPPORT //
NdisZeroMemory(&pAd->DrsCounters, sizeof(COUNTER_DRS));
@@ -1467,9 +1352,6 @@ VOID LinkUp(
if (pAd->CommonCfg.RadarDetect.RDMode == RD_SILENCE_MODE)
{
-#ifdef DFS_SUPPORT
- RadarDetectionStop(pAd);
-#endif // DFS_SUPPORT //
}
pAd->CommonCfg.RadarDetect.RDMode = RD_NORMAL_MODE;
@@ -1602,7 +1484,9 @@ VOID LinkUp(
IV |= (pAd->StaCfg.DefaultKeyId << 30);
AsicUpdateWCIDIVEIV(pAd, BSSID_WCID, IV, 0);
+#ifdef RT2860
RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP);
+#endif
}
// NOTE:
// the decision of using "short slot time" or not may change dynamically due to
@@ -1643,15 +1527,11 @@ VOID LinkUp(
// If WEP is enabled, add paiewise and shared key
-#ifdef WPA_SUPPLICANT_SUPPORT
if (((pAd->StaCfg.WpaSupplicantUP)&&
(pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)&&
(pAd->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED)) ||
((pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_DISABLE)&&
(pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)))
-#else
- if (pAd->StaCfg.WepStatus == Ndis802_11WEPEnabled)
-#endif // WPA_SUPPLICANT_SUPPORT //
{
PUCHAR Key;
UCHAR CipherAlg;
@@ -1687,9 +1567,14 @@ VOID LinkUp(
{
pAd->IndicateMediaState = NdisMediaStateConnected;
pAd->ExtraInfo = GENERAL_LINK_UP;
+#ifdef RT2870
+ RTMP_IndicateMediaState(pAd);
+#endif
}
// --
+#ifdef RT2860
RTMP_IndicateMediaState(pAd);
+#endif
// Add BSSID in my MAC Table.
NdisAcquireSpinLock(&pAd->MacTabLock);
@@ -1700,6 +1585,9 @@ VOID LinkUp(
pAd->MacTab.Size = 1; // infra mode always set MACtab size =1.
pAd->MacTab.Content[BSSID_WCID].Sst = SST_ASSOC;
pAd->MacTab.Content[BSSID_WCID].AuthState = SST_ASSOC;
+#ifdef RT30xx
+ pAd->MacTab.Content[BSSID_WCID].AuthMode = pAd->StaCfg.AuthMode;
+#endif
pAd->MacTab.Content[BSSID_WCID].WepStatus = pAd->StaCfg.WepStatus;
NdisReleaseSpinLock(&pAd->MacTabLock);
@@ -1707,17 +1595,8 @@ VOID LinkUp(
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.
- //
-#ifdef LEAP_SUPPORT
- CCXAdjacentAPReport(pAd);
-#endif // LEAP_SUPPORT //
if (pAd->CommonCfg.bAggregationCapable)
{
@@ -1737,12 +1616,11 @@ 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);
}
@@ -1753,9 +1631,7 @@ 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));
-#endif // DOT11_N_SUPPORT //
// Set LED
RTMPSetLED(pAd, LED_LINK_UP);
@@ -1780,13 +1656,13 @@ 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_OFDM)
RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry);
@@ -1815,7 +1691,6 @@ VOID LinkUp(
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R1, Value);
}
-#ifdef DOT11_N_SUPPORT
if (pAd->StaActive.SupportedPhyInfo.bHtEnable == FALSE)
{
}
@@ -1825,7 +1700,6 @@ 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,
@@ -1837,9 +1711,15 @@ 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
+#ifdef RT30xx
+ if (!((pAd->CommonCfg.RxStream == 1)&&(pAd->CommonCfg.TxStream == 1)) &&
+ (((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))))
+#endif
+#ifndef RT30xx
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)))
+#endif
{
RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data);
Data &= 0xFFFFFF00;
@@ -1849,7 +1729,6 @@ VOID LinkUp(
DBGPRINT(RT_DEBUG_TRACE, ("Txburst 1\n"));
}
else
-#endif // DOT11_N_SUPPORT //
if (pAd->CommonCfg.bEnableTxBurst)
{
RTMP_IO_READ32(pAd, EDCA_AC0_CFG, &Data);
@@ -1871,7 +1750,6 @@ 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))))
{
@@ -1891,7 +1769,6 @@ 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);
@@ -1924,17 +1801,9 @@ VOID LinkUp(
}
RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS);
+#ifdef RT2860
RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW);
-
-#ifdef DOT11_N_SUPPORT
-#ifdef DOT11N_DRAFT3
- if ((pAd->CommonCfg.BACapability.field.b2040CoexistScanSup) && (pAd->CommonCfg.Channel <= 11))
- {
- OPSTATUS_SET_FLAG(pAd, fOP_STATUS_SCAN_2040);
- BuildEffectedChannelList(pAd);
- }
-#endif // DOT11N_DRAFT3 //
-#endif // DOT11_N_SUPPORT //
+#endif
}
/*
@@ -1967,23 +1836,21 @@ VOID LinkDown(
IN BOOLEAN IsReqFromAP)
{
UCHAR i, ByteValue = 0;
+#ifdef RT2860
BOOLEAN Cancelled;
+#endif
// Do nothing if monitor mode is on
if (MONITOR_ON(pAd))
return;
-#ifdef RALINK_ATE
- // Nothing to do in ATE mode.
- if (ATE_ON(pAd))
- return;
-#endif // RALINK_ATE //
-
+#ifdef RT2860
RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW);
RTMPCancelTimer(&pAd->Mlme.PsPollTimer, &Cancelled);
// Not allow go to sleep within linkdown function.
RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP);
+#endif
if (pAd->CommonCfg.bWirelessEvent)
{
@@ -1993,6 +1860,7 @@ VOID LinkDown(
DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN !!!\n"));
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_AGGREGATION_INUSED);
+#ifdef RT2860
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE))
{
BOOLEAN Cancelled;
@@ -2009,6 +1877,7 @@ VOID LinkDown(
}
pAd->bPCIclkOff = FALSE;
+#endif
if (ADHOC_ON(pAd)) // Adhoc mode link down
{
DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 1!!!\n"));
@@ -2025,33 +1894,6 @@ VOID LinkDown(
{
DBGPRINT(RT_DEBUG_TRACE, ("!!! LINK DOWN 2!!!\n"));
-#ifdef QOS_DLS_SUPPORT
- // DLS tear down frame must be sent before link down
- // send DLS-TEAR_DOWN message
- if (pAd->CommonCfg.bDLSCapable)
- {
- // tear down local dls table entry
- for (i=0; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
- {
- if (pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH))
- {
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr);
- }
- }
-
- // 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))
- {
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- RTMPSendDLSTearDownFrame(pAd, pAd->StaCfg.DLSEntry[i].MacAddr);
- }
- }
- }
-#endif // QOS_DLS_SUPPORT //
-
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_INFRA_ON);
OPSTATUS_CLEAR_FLAG(pAd, fOP_STATUS_MEDIA_STATE_CONNECTED);
@@ -2095,17 +1937,6 @@ VOID LinkDown(
NdisMoveMemory(pAd->StaCfg.CCXAdjacentAPSsid, pAd->CommonCfg.Ssid, pAd->StaCfg.CCXAdjacentAPSsidLen);
COPY_MAC_ADDR(pAd->StaCfg.CCXAdjacentAPBssid, pAd->CommonCfg.Bssid);
}
-
-#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)
- {
- NdisMoveMemory(&pAd->CommonCfg.CountryCode[0], &pAd->StaCfg.StaOriCountryCode[0], 2);
- pAd->CommonCfg.Geography = pAd->StaCfg.StaOriGeography;
- BuildChannelListEx(pAd);
- }
-#endif // EXT_BUILD_CHANNEL_LIST //
-
}
for (i=1; i<MAX_LEN_OF_MAC_TABLE; i++)
@@ -2137,12 +1968,11 @@ VOID LinkDown(
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;
-#endif // DOT11_N_SUPPORT //
// Reset WPA-PSK state. Only reset when supplicant enabled
if (pAd->StaCfg.WpaState != SS_NOTUSE)
@@ -2150,11 +1980,6 @@ VOID LinkDown(
pAd->StaCfg.WpaState = SS_START;
// Clear Replay counter
NdisZeroMemory(pAd->StaCfg.ReplayCounter, 8);
-
-#ifdef QOS_DLS_SUPPORT
- if (pAd->CommonCfg.bDLSCapable)
- NdisZeroMemory(pAd->StaCfg.DlsReplayCounter, 8);
-#endif // QOS_DLS_SUPPORT //
}
@@ -2169,7 +1994,7 @@ VOID LinkDown(
}
// 802.1x port control
-#ifdef WPA_SUPPLICANT_SUPPORT
+
// Prevent clear PortSecured here with static WEP
// NetworkManger set security policy first then set SSID to connect AP.
if (pAd->StaCfg.WpaSupplicantUP &&
@@ -2179,7 +2004,6 @@ VOID LinkDown(
pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED;
}
else
-#endif // WPA_SUPPLICANT_SUPPORT //
{
pAd->StaCfg.PortSecured = WPA_802_1X_PORT_NOT_SECURED;
pAd->StaCfg.PrivacyFilter = Ndis802_11PrivFilter8021xWEP;
@@ -2199,13 +2023,18 @@ VOID LinkDown(
// Update extra information to link is up
pAd->ExtraInfo = GENERAL_LINK_DOWN;
+#ifdef RT2860
pAd->StaCfg.AdhocBOnlyJoined = FALSE;
pAd->StaCfg.AdhocBGJoined = FALSE;
pAd->StaCfg.Adhoc20NJoined = FALSE;
+#endif
pAd->StaActive.SupportedPhyInfo.bHtEnable = FALSE;
// Reset the Current AP's IP address
NdisZeroMemory(pAd->StaCfg.AironetIPAddress, 4);
+#ifdef RT2870
+ pAd->bUsbTxBulkAggre = FALSE;
+#endif // RT2870 //
// Clean association information
NdisZeroMemory(&pAd->StaCfg.AssocInfo, sizeof(NDIS_802_11_ASSOCIATION_INFORMATION));
@@ -2227,7 +2056,6 @@ 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.
//
@@ -2238,7 +2066,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);
@@ -2251,9 +2079,7 @@ 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);
@@ -2261,43 +2087,35 @@ 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;
- TriEventInit(pAd);
- for (i = 0; i < (pAd->ChannelListNum - 1); i++)
- {
- 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);
+#ifdef RT2860
// Allow go to sleep after linkdown steps.
RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP);
+#endif
-#ifdef WPA_SUPPLICANT_SUPPORT
-#ifndef NATIVE_WPA_SUPPLICANT_SUPPORT
- if (pAd->StaCfg.WpaSupplicantUP) {
- union iwreq_data wrqu;
- //send disassociate event to wpa_supplicant
- memset(&wrqu, 0, sizeof(wrqu));
- wrqu.data.flags = RT_DISASSOC_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;
memset(wrqu.ap_addr.sa_data, 0, MAC_ADDR_LEN);
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
+
+#ifdef RT30xx
+ if (IS_RT3090(pAd))
+ {
+ UINT32 macdata;
+ // disable MMPS BBP control register
+ RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R3, &ByteValue);
+ ByteValue &= ~(0x04); //bit 2
+ RTMP_BBP_IO_WRITE8_BY_REG_ID(pAd, BBP_R3, ByteValue);
+
+ // disable MMPS MAC control register
+ RTMP_IO_READ32(pAd, 0x1210, &macdata);
+ macdata &= ~(0x09); //bit 0, 3
+ RTMP_IO_WRITE32(pAd, 0x1210, macdata);
+ }
+#endif // RT30xx //
}
/*
@@ -2457,26 +2275,6 @@ VOID ScanParmFill(
ScanReq->ScanType = ScanType;
}
-#ifdef QOS_DLS_SUPPORT
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
-*/
-VOID DlsParmFill(
- IN PRTMP_ADAPTER pAd,
- IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
- IN PRT_802_11_DLS pDls,
- IN USHORT reason)
-{
- pDlsReq->pDLS = pDls;
- pDlsReq->Reason = reason;
-}
-#endif // QOS_DLS_SUPPORT //
-
/*
==========================================================================
Description:
@@ -2523,21 +2321,61 @@ VOID AuthParmFill(
==========================================================================
*/
+
+
+#ifdef RT2870
+
+VOID MlmeCntlConfirm(
+ IN PRTMP_ADAPTER pAd,
+ IN ULONG MsgType,
+ IN USHORT Msg)
+{
+ MlmeEnqueue(pAd, MLME_CNTL_STATE_MACHINE, MsgType, sizeof(USHORT), &Msg);
+}
+#endif
+
VOID ComposePsPoll(
IN PRTMP_ADAPTER pAd)
{
+#ifdef RT2870
+ PTXINFO_STRUC pTxInfo;
+ PTXWI_STRUC pTxWI;
+
+ DBGPRINT(RT_DEBUG_TRACE, ("ComposePsPoll\n"));
+#endif
NdisZeroMemory(&pAd->PsPollFrame, sizeof(PSPOLL_FRAME));
+
+#ifdef RT2870
+ pAd->PsPollFrame.FC.PwrMgmt = 0;
+#endif
pAd->PsPollFrame.FC.Type = BTYPE_CNTL;
pAd->PsPollFrame.FC.SubType = SUBTYPE_PS_POLL;
pAd->PsPollFrame.Aid = pAd->StaActive.Aid | 0xC000;
COPY_MAC_ADDR(pAd->PsPollFrame.Bssid, pAd->CommonCfg.Bssid);
COPY_MAC_ADDR(pAd->PsPollFrame.Ta, pAd->CurrentAddress);
+
+#ifdef RT2870
+ RTMPZeroMemory(&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[0], 100);
+ pTxInfo = (PTXINFO_STRUC)&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[0];
+ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(PSPOLL_FRAME)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE);
+ pTxWI = (PTXWI_STRUC)&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[TXINFO_SIZE];
+ RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(PSPOLL_FRAME)),
+ 0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit);
+ RTMPMoveMemory(&pAd->PsPollContext.TransferBuffer->field.WirelessPacket[TXWI_SIZE+TXINFO_SIZE], &pAd->PsPollFrame, sizeof(PSPOLL_FRAME));
+ // Append 4 extra zero bytes.
+ pAd->PsPollContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(PSPOLL_FRAME) + 4;
+#endif
}
// IRQL = DISPATCH_LEVEL
VOID ComposeNullFrame(
IN PRTMP_ADAPTER pAd)
{
+#ifdef RT2870
+ PTXINFO_STRUC pTxInfo;
+ PTXWI_STRUC pTxWI;
+#endif
+
NdisZeroMemory(&pAd->NullFrame, sizeof(HEADER_802_11));
pAd->NullFrame.FC.Type = BTYPE_DATA;
pAd->NullFrame.FC.SubType = SUBTYPE_NULL_FUNC;
@@ -2545,6 +2383,16 @@ VOID ComposeNullFrame(
COPY_MAC_ADDR(pAd->NullFrame.Addr1, pAd->CommonCfg.Bssid);
COPY_MAC_ADDR(pAd->NullFrame.Addr2, pAd->CurrentAddress);
COPY_MAC_ADDR(pAd->NullFrame.Addr3, pAd->CommonCfg.Bssid);
+#ifdef RT2870
+ RTMPZeroMemory(&pAd->NullContext.TransferBuffer->field.WirelessPacket[0], 100);
+ pTxInfo = (PTXINFO_STRUC)&pAd->NullContext.TransferBuffer->field.WirelessPacket[0];
+ RTMPWriteTxInfo(pAd, pTxInfo, (USHORT)(sizeof(HEADER_802_11)+TXWI_SIZE), TRUE, EpToQueue[MGMTPIPEIDX], FALSE, FALSE);
+ pTxWI = (PTXWI_STRUC)&pAd->NullContext.TransferBuffer->field.WirelessPacket[TXINFO_SIZE];
+ RTMPWriteTxWI(pAd, pTxWI, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, 0, BSSID_WCID, (sizeof(HEADER_802_11)),
+ 0, 0, (UCHAR)pAd->CommonCfg.MlmeTransmit.field.MCS, IFS_BACKOFF, FALSE, &pAd->CommonCfg.MlmeTransmit);
+ RTMPMoveMemory(&pAd->NullContext.TransferBuffer->field.WirelessPacket[TXWI_SIZE+TXINFO_SIZE], &pAd->NullFrame, sizeof(HEADER_802_11));
+ pAd->NullContext.BulkOutSize = TXINFO_SIZE + TXWI_SIZE + sizeof(pAd->NullFrame) + 4;
+#endif
}
@@ -2688,22 +2536,15 @@ 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,
@@ -2712,27 +2553,9 @@ ULONG MakeIbssBeacon(
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)
@@ -2749,11 +2572,6 @@ ULONG MakeIbssBeacon(
PID_MGMT, PID_BEACON, RATE_1, IFS_HTTXOP, FALSE, &Transmit);
}
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, pBeaconFrame, DIR_WRITE, FALSE);
- RTMPWIEndianChange((PUCHAR)pTxWI, TYPE_TXWI);
-#endif
-
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/drivers/staging/rt2860/sta/dls.c b/drivers/staging/rt2860/sta/dls.c
deleted file mode 100644
index 873cf7f1de93..000000000000
--- a/drivers/staging/rt2860/sta/dls.c
+++ /dev/null
@@ -1,2197 +0,0 @@
-/*
- *************************************************************************
- * Ralink Tech Inc.
- * 5F., No.36, Taiyuan St., Jhubei City,
- * Hsinchu County 302,
- * Taiwan, R.O.C.
- *
- * (c) Copyright 2002-2007, Ralink Technology, Inc.
- *
- * This program is free software; you can redistribute it and/or modify *
- * it under the terms of the GNU General Public License as published by *
- * the Free Software Foundation; either version 2 of the License, or *
- * (at your option) any later version. *
- * *
- * This program is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
- * GNU General Public License for more details. *
- * *
- * You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
- * *
- *************************************************************************
-
- Module Name:
- dls.c
-
- Abstract:
- Handle WMM-DLS state machine
-
- Revision History:
- Who When What
- -------- ---------- ----------------------------------------------
- Rory Chen 02-14-2006
- Arvin Tai 06-03-2008 Modified for RT28xx
- */
-
-#include "../rt_config.h"
-
-/*
- ==========================================================================
- Description:
- dls state machine init, including state transition and timer init
- Parameters:
- Sm - pointer to the dls state machine
- Note:
- The state machine looks like this
-
- DLS_IDLE
- MT2_MLME_DLS_REQUEST MlmeDlsReqAction
- MT2_PEER_DLS_REQUEST PeerDlsReqAction
- MT2_PEER_DLS_RESPONSE PeerDlsRspAction
- MT2_MLME_DLS_TEARDOWN MlmeTearDownAction
- MT2_PEER_DLS_TEARDOWN PeerTearDownAction
-
- IRQL = PASSIVE_LEVEL
-
- ==========================================================================
- */
-void DlsStateMachineInit(
- IN PRTMP_ADAPTER pAd,
- IN STATE_MACHINE *Sm,
- OUT STATE_MACHINE_FUNC Trans[])
-{
- UCHAR i;
-
- StateMachineInit(Sm, (STATE_MACHINE_FUNC*)Trans, MAX_DLS_STATE, MAX_DLS_MSG, (STATE_MACHINE_FUNC)Drop, DLS_IDLE, DLS_MACHINE_BASE);
-
- // the first column
- StateMachineSetAction(Sm, DLS_IDLE, MT2_MLME_DLS_REQ, (STATE_MACHINE_FUNC)MlmeDlsReqAction);
- StateMachineSetAction(Sm, DLS_IDLE, MT2_PEER_DLS_REQ, (STATE_MACHINE_FUNC)PeerDlsReqAction);
- StateMachineSetAction(Sm, DLS_IDLE, MT2_PEER_DLS_RSP, (STATE_MACHINE_FUNC)PeerDlsRspAction);
- StateMachineSetAction(Sm, DLS_IDLE, MT2_MLME_DLS_TEAR_DOWN, (STATE_MACHINE_FUNC)MlmeDlsTearDownAction);
- StateMachineSetAction(Sm, DLS_IDLE, MT2_PEER_DLS_TEAR_DOWN, (STATE_MACHINE_FUNC)PeerDlsTearDownAction);
-
- for (i=0; i<MAX_NUM_OF_DLS_ENTRY; i++)
- {
- pAd->StaCfg.DLSEntry[i].pAd = pAd;
- RTMPInitTimer(pAd, &pAd->StaCfg.DLSEntry[i].Timer, GET_TIMER_FUNCTION(DlsTimeoutAction), pAd, FALSE);
- }
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-VOID MlmeDlsReqAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem)
-{
- PUCHAR pOutBuffer = NULL;
- NDIS_STATUS NStatus;
- ULONG FrameLen = 0;
- HEADER_802_11 DlsReqHdr;
- PRT_802_11_DLS pDLS = NULL;
- UCHAR Category = CATEGORY_DLS;
- UCHAR Action = ACTION_DLS_REQUEST;
- ULONG tmp;
- USHORT reason;
- ULONG Timeout;
- BOOLEAN TimerCancelled;
-
- if(!MlmeDlsReqSanity(pAd, Elem->Msg, Elem->MsgLen, &pDLS, &reason))
- return;
-
- DBGPRINT(RT_DEBUG_TRACE,("DLS - MlmeDlsReqAction() \n"));
-
- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory
- if (NStatus != NDIS_STATUS_SUCCESS)
- {
- DBGPRINT(RT_DEBUG_ERROR,("DLS - MlmeDlsReqAction() allocate memory failed \n"));
- return;
- }
-
- ActHeaderInit(pAd, &DlsReqHdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
-
- // Build basic frame first
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- sizeof(HEADER_802_11), &DlsReqHdr,
- 1, &Category,
- 1, &Action,
- 6, &pDLS->MacAddr,
- 6, pAd->CurrentAddress,
- 2, &pAd->StaActive.CapabilityInfo,
- 2, &pDLS->TimeOut,
- 1, &SupRateIe,
- 1, &pAd->MlmeAux.SupRateLen,
- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate,
- END_OF_ARGS);
-
- if (pAd->MlmeAux.ExtRateLen != 0)
- {
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- 1, &ExtRateIe,
- 1, &pAd->MlmeAux.ExtRateLen,
- pAd->MlmeAux.ExtRateLen, pAd->MlmeAux.ExtRate,
- END_OF_ARGS);
- FrameLen += tmp;
- }
-
-#ifdef DOT11_N_SUPPORT
- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
- {
- UCHAR HtLen;
-
-#ifdef RT_BIG_ENDIAN
- HT_CAPABILITY_IE HtCapabilityTmp;
-#endif
-
- // add HT Capability IE
- HtLen = sizeof(HT_CAPABILITY_IE);
-#ifndef RT_BIG_ENDIAN
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- 1, &HtCapIe,
- 1, &HtLen,
- HtLen, &pAd->CommonCfg.HtCapability,
- END_OF_ARGS);
-#else
- NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen);
- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));
- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));
-
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- 1, &HtCapIe,
- 1, &HtLen,
- HtLen, &HtCapabilityTmp,
- END_OF_ARGS);
-#endif
- FrameLen = FrameLen + tmp;
- }
-#endif // DOT11_N_SUPPORT //
-
- RTMPCancelTimer(&pDLS->Timer, &TimerCancelled);
- Timeout = DLS_TIMEOUT;
- RTMPSetTimer(&pDLS->Timer, Timeout);
-
- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);
- MlmeFreeMemory(pAd, pOutBuffer);
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-VOID PeerDlsReqAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem)
-{
- PUCHAR pOutBuffer = NULL;
- NDIS_STATUS NStatus;
- ULONG FrameLen = 0;
- USHORT StatusCode = MLME_SUCCESS;
- HEADER_802_11 DlsRspHdr;
- UCHAR Category = CATEGORY_DLS;
- UCHAR Action = ACTION_DLS_RESPONSE;
- ULONG tmp;
- USHORT CapabilityInfo;
- UCHAR DA[MAC_ADDR_LEN], SA[MAC_ADDR_LEN];
- USHORT DLSTimeOut;
- SHORT i;
- ULONG Timeout;
- BOOLEAN TimerCancelled;
- PRT_802_11_DLS pDLS = NULL;
- UCHAR MaxSupportedRateIn500Kbps = 0;
- UCHAR SupportedRatesLen;
- UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES];
- UCHAR HtCapabilityLen;
- HT_CAPABILITY_IE HtCapability;
-
- if (!PeerDlsReqSanity(pAd, Elem->Msg, Elem->MsgLen, DA, SA, &CapabilityInfo, &DLSTimeOut,
- &SupportedRatesLen, &SupportedRates[0], &HtCapabilityLen, &HtCapability))
- return;
-
- // supported rates array may not be sorted. sort it and find the maximum rate
- for (i = 0; i < SupportedRatesLen; i++)
- {
- if (MaxSupportedRateIn500Kbps < (SupportedRates[i] & 0x7f))
- MaxSupportedRateIn500Kbps = SupportedRates[i] & 0x7f;
- }
-
- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsReqAction() from %02x:%02x:%02x:%02x:%02x:%02x\n", SA[0], SA[1], SA[2], SA[3], SA[4], SA[5]));
-
- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory
- if (NStatus != NDIS_STATUS_SUCCESS)
- {
- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsReqAction() allocate memory failed \n"));
- return;
- }
-
- if (!INFRA_ON(pAd))
- {
- StatusCode = MLME_REQUEST_DECLINED;
- }
- else if (!pAd->CommonCfg.bWmmCapable)
- {
- StatusCode = MLME_DEST_STA_IS_NOT_A_QSTA;
- }
- else if (!pAd->CommonCfg.bDLSCapable)
- {
- StatusCode = MLME_REQUEST_DECLINED;
- }
- else
- {
- // find table to update parameters
- for (i = (MAX_NUM_OF_DLS_ENTRY-1); i >= 0; i--)
- {
- if (pAd->StaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)
- pAd->StaCfg.DLSEntry[i].Status = DLS_WAIT_KEY;
- else
- {
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH;
- }
-
- pAd->StaCfg.DLSEntry[i].Sequence = 0;
- pAd->StaCfg.DLSEntry[i].TimeOut = DLSTimeOut;
- pAd->StaCfg.DLSEntry[i].CountDownTimer = DLSTimeOut;
- if (HtCapabilityLen != 0)
- pAd->StaCfg.DLSEntry[i].bHTCap = TRUE;
- else
- pAd->StaCfg.DLSEntry[i].bHTCap = FALSE;
- pDLS = &pAd->StaCfg.DLSEntry[i];
- break;
- }
- }
-
- // can not find in table, create a new one
- if (i < 0)
- {
- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsReqAction() can not find same entry \n"));
- for (i=(MAX_NUM_OF_DLS_ENTRY - 1); i >= MAX_NUM_OF_INIT_DLS_ENTRY; i--)
- {
- if (!pAd->StaCfg.DLSEntry[i].Valid)
- {
- MAC_TABLE_ENTRY *pEntry;
- UCHAR MaxSupportedRate = RATE_11;
-
- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)
- {
- pAd->StaCfg.DLSEntry[i].Status = DLS_WAIT_KEY;
- }
- else
- {
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH;
- }
-
- pAd->StaCfg.DLSEntry[i].Sequence = 0;
- pAd->StaCfg.DLSEntry[i].Valid = TRUE;
- pAd->StaCfg.DLSEntry[i].TimeOut = DLSTimeOut;
- pAd->StaCfg.DLSEntry[i].CountDownTimer = DLSTimeOut;
- NdisMoveMemory(pAd->StaCfg.DLSEntry[i].MacAddr, SA, MAC_ADDR_LEN);
- if (HtCapabilityLen != 0)
- pAd->StaCfg.DLSEntry[i].bHTCap = TRUE;
- else
- pAd->StaCfg.DLSEntry[i].bHTCap = FALSE;
- pDLS = &pAd->StaCfg.DLSEntry[i];
- pEntry = MacTableInsertDlsEntry(pAd, SA, i);
-
- switch (MaxSupportedRateIn500Kbps)
- {
- case 108: MaxSupportedRate = RATE_54; break;
- case 96: MaxSupportedRate = RATE_48; break;
- case 72: MaxSupportedRate = RATE_36; break;
- case 48: MaxSupportedRate = RATE_24; break;
- case 36: MaxSupportedRate = RATE_18; break;
- case 24: MaxSupportedRate = RATE_12; break;
- case 18: MaxSupportedRate = RATE_9; break;
- case 12: MaxSupportedRate = RATE_6; break;
- case 22: MaxSupportedRate = RATE_11; break;
- case 11: MaxSupportedRate = RATE_5_5; break;
- case 4: MaxSupportedRate = RATE_2; break;
- case 2: MaxSupportedRate = RATE_1; break;
- default: MaxSupportedRate = RATE_11; break;
- }
-
- pEntry->MaxSupportedRate = min(pAd->CommonCfg.MaxTxRate, MaxSupportedRate);
-
- if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE)
- {
- pEntry->MaxHTPhyMode.field.MODE = MODE_CCK;
- pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate;
- pEntry->MinHTPhyMode.field.MODE = MODE_CCK;
- pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate;
- pEntry->HTPhyMode.field.MODE = MODE_CCK;
- pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate;
- }
- else
- {
- pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM;
- pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
- pEntry->MinHTPhyMode.field.MODE = MODE_OFDM;
- pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
- pEntry->HTPhyMode.field.MODE = MODE_OFDM;
- pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
- }
-
- 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;
-
- // If this Entry supports 802.11n, upgrade to HT rate.
- if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
- {
- 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;
- }
- else
- {
- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;
- pAd->MacTab.fAnyStationNonGF = TRUE;
- pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1;
- }
-
- if ((HtCapability.HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth))
- {
- pEntry->MaxHTPhyMode.field.BW= BW_40;
- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(HtCapability.HtCapInfo.ShortGIfor40));
- }
- else
- {
- pEntry->MaxHTPhyMode.field.BW = BW_20;
- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(HtCapability.HtCapInfo.ShortGIfor20));
- pAd->MacTab.fAnyStation20Only = TRUE;
- }
-
- // find max fixed rate
- for (ii=15; ii>=0; ii--)
- {
- j = ii/8;
- bitmask = (1<<(ii-(j*8)));
- if ( (pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j]&bitmask) && (HtCapability.MCSSet[j]&bitmask))
- {
- pEntry->MaxHTPhyMode.field.MCS = ii;
- break;
- }
- if (ii==0)
- break;
- }
-
-
- 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
- pEntry->MaxHTPhyMode.field.BW = 1;
- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;
- pEntry->MaxHTPhyMode.field.STBC = 0;
- pEntry->MaxHTPhyMode.field.ShortGI = 0;
- pEntry->MaxHTPhyMode.field.MCS = 32;
- }
- else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS)
- {
- // STA supports fixed MCS
- pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
- }
- }
-
- pEntry->MaxHTPhyMode.field.STBC = (HtCapability.HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC));
- pEntry->MpduDensity = HtCapability.HtCapParm.MpduDensity;
- pEntry->MaxRAmpduFactor = HtCapability.HtCapParm.MaxRAmpduFactor;
- pEntry->MmpsMode = (UCHAR)HtCapability.HtCapInfo.MimoPs;
- pEntry->AMsduSize = (UCHAR)HtCapability.HtCapInfo.AMsduSize;
- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;
-
- if (HtCapability.HtCapInfo.ShortGIfor20)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE);
- if (HtCapability.HtCapInfo.ShortGIfor40)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE);
- if (HtCapability.HtCapInfo.TxSTBC)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE);
- if (HtCapability.HtCapInfo.RxSTBC)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE);
- if (HtCapability.ExtHtCapInfo.PlusHTC)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE);
- if (pAd->CommonCfg.bRdg && HtCapability.ExtHtCapInfo.RDGSupport)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE);
- if (HtCapability.ExtHtCapInfo.MCSFeedback == 0x03)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE);
-
- 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);
-
- if (pAd->StaCfg.bAutoTxRateSwitch == TRUE)
- {
- PUCHAR pTable;
- UCHAR TableSize = 0;
-
- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex);
- pEntry->bAutoTxRateSwitch = TRUE;
- }
- else
- {
- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE;
- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
- pEntry->bAutoTxRateSwitch = FALSE;
-
- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry);
- }
- pEntry->RateLen = SupportedRatesLen;
-
- break;
- }
- }
- }
- StatusCode = MLME_SUCCESS;
-
- // can not find in table, create a new one
- if (i < 0)
- {
- StatusCode = MLME_QOS_UNSPECIFY;
- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsReqAction() DLSEntry table full(only can support %d DLS session) \n", MAX_NUM_OF_DLS_ENTRY - MAX_NUM_OF_INIT_DLS_ENTRY));
- }
- else
- {
- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsReqAction() use entry(%d) %02x:%02x:%02x:%02x:%02x:%02x\n",
- i, SA[0], SA[1], SA[2], SA[3], SA[4], SA[5]));
- }
- }
-
- ActHeaderInit(pAd, &DlsRspHdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
-
- // Build basic frame first
- if (StatusCode == MLME_SUCCESS)
- {
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- sizeof(HEADER_802_11), &DlsRspHdr,
- 1, &Category,
- 1, &Action,
- 2, &StatusCode,
- 6, SA,
- 6, pAd->CurrentAddress,
- 2, &pAd->StaActive.CapabilityInfo,
- 1, &SupRateIe,
- 1, &pAd->MlmeAux.SupRateLen,
- pAd->MlmeAux.SupRateLen, pAd->MlmeAux.SupRate,
- END_OF_ARGS);
-
- if (pAd->MlmeAux.ExtRateLen != 0)
- {
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- 1, &ExtRateIe,
- 1, &pAd->MlmeAux.ExtRateLen,
- pAd->MlmeAux.ExtRateLen, pAd->MlmeAux.ExtRate,
- END_OF_ARGS);
- FrameLen += tmp;
- }
-
-#ifdef DOT11_N_SUPPORT
- if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
- {
- UCHAR HtLen;
-
-#ifdef RT_BIG_ENDIAN
- HT_CAPABILITY_IE HtCapabilityTmp;
-#endif
-
- // add HT Capability IE
- HtLen = sizeof(HT_CAPABILITY_IE);
-#ifndef RT_BIG_ENDIAN
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- 1, &HtCapIe,
- 1, &HtLen,
- HtLen, &pAd->CommonCfg.HtCapability,
- END_OF_ARGS);
-#else
- NdisMoveMemory(&HtCapabilityTmp, &pAd->CommonCfg.HtCapability, HtLen);
- *(USHORT *)(&HtCapabilityTmp.HtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.HtCapInfo));
- *(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo) = SWAP16(*(USHORT *)(&HtCapabilityTmp.ExtHtCapInfo));
-
- MakeOutgoingFrame(pOutBuffer + FrameLen, &tmp,
- 1, &HtCapIe,
- 1, &HtLen,
- HtLen, &HtCapabilityTmp,
- END_OF_ARGS);
-#endif
- FrameLen = FrameLen + tmp;
- }
-#endif // DOT11_N_SUPPORT //
-
- if (pDLS && (pDLS->Status != DLS_FINISH))
- {
- RTMPCancelTimer(&pDLS->Timer, &TimerCancelled);
- Timeout = DLS_TIMEOUT;
- RTMPSetTimer(&pDLS->Timer, Timeout);
- }
- }
- else
- {
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- sizeof(HEADER_802_11), &DlsRspHdr,
- 1, &Category,
- 1, &Action,
- 2, &StatusCode,
- 6, SA,
- 6, pAd->CurrentAddress,
- END_OF_ARGS);
- }
-
- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);
- MlmeFreeMemory(pAd, pOutBuffer);
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-VOID PeerDlsRspAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem)
-{
- USHORT CapabilityInfo;
- UCHAR DA[MAC_ADDR_LEN], SA[MAC_ADDR_LEN];
- USHORT StatusCode;
- SHORT i;
- BOOLEAN TimerCancelled;
- UCHAR MaxSupportedRateIn500Kbps = 0;
- UCHAR SupportedRatesLen;
- UCHAR SupportedRates[MAX_LEN_OF_SUPPORTED_RATES];
- UCHAR HtCapabilityLen;
- HT_CAPABILITY_IE HtCapability;
-
- if (!pAd->CommonCfg.bDLSCapable)
- return;
-
- if (!INFRA_ON(pAd))
- return;
-
- if (!PeerDlsRspSanity(pAd, Elem->Msg, Elem->MsgLen, DA, SA, &CapabilityInfo, &StatusCode,
- &SupportedRatesLen, &SupportedRates[0], &HtCapabilityLen, &HtCapability))
- return;
-
- // supported rates array may not be sorted. sort it and find the maximum rate
- for (i=0; i<SupportedRatesLen; i++)
- {
- if (MaxSupportedRateIn500Kbps < (SupportedRates[i] & 0x7f))
- MaxSupportedRateIn500Kbps = SupportedRates[i] & 0x7f;
- }
-
- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsRspAction() from %02x:%02x:%02x:%02x:%02x:%02x with StatusCode=%d, CapabilityInfo=0x%x\n",
- SA[0], SA[1], SA[2], SA[3], SA[4], SA[5], StatusCode, CapabilityInfo));
-
- for (i = 0; i < MAX_NUM_OF_INIT_DLS_ENTRY; i++)
- {
- if (pAd->StaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- if (StatusCode == MLME_SUCCESS)
- {
- MAC_TABLE_ENTRY *pEntry;
- UCHAR MaxSupportedRate = RATE_11;
-
- pEntry = MacTableInsertDlsEntry(pAd, SA, i);
-
- switch (MaxSupportedRateIn500Kbps)
- {
- case 108: MaxSupportedRate = RATE_54; break;
- case 96: MaxSupportedRate = RATE_48; break;
- case 72: MaxSupportedRate = RATE_36; break;
- case 48: MaxSupportedRate = RATE_24; break;
- case 36: MaxSupportedRate = RATE_18; break;
- case 24: MaxSupportedRate = RATE_12; break;
- case 18: MaxSupportedRate = RATE_9; break;
- case 12: MaxSupportedRate = RATE_6; break;
- case 22: MaxSupportedRate = RATE_11; break;
- case 11: MaxSupportedRate = RATE_5_5; break;
- case 4: MaxSupportedRate = RATE_2; break;
- case 2: MaxSupportedRate = RATE_1; break;
- default: MaxSupportedRate = RATE_11; break;
- }
-
- pEntry->MaxSupportedRate = min(pAd->CommonCfg.MaxTxRate, MaxSupportedRate);
-
- if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE)
- {
- pEntry->MaxHTPhyMode.field.MODE = MODE_CCK;
- pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate;
- pEntry->MinHTPhyMode.field.MODE = MODE_CCK;
- pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate;
- pEntry->HTPhyMode.field.MODE = MODE_CCK;
- pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate;
- }
- else
- {
- pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM;
- pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
- pEntry->MinHTPhyMode.field.MODE = MODE_OFDM;
- pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
- pEntry->HTPhyMode.field.MODE = MODE_OFDM;
- pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
- }
-
- 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;
-
- // If this Entry supports 802.11n, upgrade to HT rate.
- if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
- {
- 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;
- }
- else
- {
- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;
- pAd->MacTab.fAnyStationNonGF = TRUE;
- pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1;
- }
-
- if ((HtCapability.HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth))
- {
- pEntry->MaxHTPhyMode.field.BW= BW_40;
- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(HtCapability.HtCapInfo.ShortGIfor40));
- }
- else
- {
- pEntry->MaxHTPhyMode.field.BW = BW_20;
- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(HtCapability.HtCapInfo.ShortGIfor20));
- pAd->MacTab.fAnyStation20Only = TRUE;
- }
-
- // find max fixed rate
- for (ii=15; ii>=0; ii--)
- {
- j = ii/8;
- bitmask = (1<<(ii-(j*8)));
- if ( (pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j]&bitmask) && (HtCapability.MCSSet[j]&bitmask))
- {
- pEntry->MaxHTPhyMode.field.MCS = ii;
- break;
- }
- if (ii==0)
- break;
- }
-
- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS != MCS_AUTO)
- {
- if (pAd->StaCfg.DesiredTransmitSetting.field.MCS == 32)
- {
- // Fix MCS as HT Duplicated Mode
- pEntry->MaxHTPhyMode.field.BW = 1;
- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;
- pEntry->MaxHTPhyMode.field.STBC = 0;
- pEntry->MaxHTPhyMode.field.ShortGI = 0;
- pEntry->MaxHTPhyMode.field.MCS = 32;
- }
- else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS)
- {
- // STA supports fixed MCS
- pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
- }
- }
-
- pEntry->MaxHTPhyMode.field.STBC = (HtCapability.HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC));
- pEntry->MpduDensity = HtCapability.HtCapParm.MpduDensity;
- pEntry->MaxRAmpduFactor = HtCapability.HtCapParm.MaxRAmpduFactor;
- pEntry->MmpsMode = (UCHAR)HtCapability.HtCapInfo.MimoPs;
- pEntry->AMsduSize = (UCHAR)HtCapability.HtCapInfo.AMsduSize;
- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;
-
- if (HtCapability.HtCapInfo.ShortGIfor20)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE);
- if (HtCapability.HtCapInfo.ShortGIfor40)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE);
- if (HtCapability.HtCapInfo.TxSTBC)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE);
- if (HtCapability.HtCapInfo.RxSTBC)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE);
- if (HtCapability.ExtHtCapInfo.PlusHTC)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE);
- if (pAd->CommonCfg.bRdg && HtCapability.ExtHtCapInfo.RDGSupport)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE);
- if (HtCapability.ExtHtCapInfo.MCSFeedback == 0x03)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE);
-
- 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);
-
- if (pAd->StaCfg.bAutoTxRateSwitch == TRUE)
- {
- PUCHAR pTable;
- UCHAR TableSize = 0;
-
- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex);
- pEntry->bAutoTxRateSwitch = TRUE;
- }
- else
- {
- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE;
- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
- pEntry->bAutoTxRateSwitch = FALSE;
-
- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry);
- }
- pEntry->RateLen = SupportedRatesLen;
-
- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)
- {
- // If support WPA or WPA2, start STAKey hand shake,
- // If failed hand shake, just tear down peer DLS
- if (RTMPSendSTAKeyRequest(pAd, pAd->StaCfg.DLSEntry[i].MacAddr) != NDIS_STATUS_SUCCESS)
- {
- MLME_DLS_REQ_STRUCT MlmeDlsReq;
- USHORT reason = REASON_QOS_CIPHER_NOT_SUPPORT;
-
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsRspAction failed when call RTMPSendSTAKeyRequest \n"));
- }
- else
- {
- pAd->StaCfg.DLSEntry[i].Status = DLS_WAIT_KEY;
- DBGPRINT(RT_DEBUG_TRACE,("DLS - waiting for STAKey handshake procedure\n"));
- }
- }
- else
- {
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH;
- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsRspAction() from %02x:%02x:%02x:%02x:%02x:%02x Succeed with WEP or no security\n", SA[0], SA[1], SA[2], SA[3], SA[4], SA[5]));
- }
-
- //initialize seq no for DLS frames.
- pAd->StaCfg.DLSEntry[i].Sequence = 0;
- if (HtCapabilityLen != 0)
- pAd->StaCfg.DLSEntry[i].bHTCap = TRUE;
- else
- pAd->StaCfg.DLSEntry[i].bHTCap = FALSE;
- }
- else
- {
- // DLS setup procedure failed.
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsRspAction failed with StatusCode=%d \n", StatusCode));
- }
- }
- }
-
- if (i >= MAX_NUM_OF_INIT_DLS_ENTRY)
- {
- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsRspAction() update timeout value \n"));
- for (i=(MAX_NUM_OF_DLS_ENTRY-1); i>=MAX_NUM_OF_INIT_DLS_ENTRY; i--)
- {
- if (pAd->StaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- if (StatusCode == MLME_SUCCESS)
- {
- MAC_TABLE_ENTRY *pEntry;
- UCHAR MaxSupportedRate = RATE_11;
-
- pEntry = MacTableInsertDlsEntry(pAd, SA, i);
-
- switch (MaxSupportedRateIn500Kbps)
- {
- case 108: MaxSupportedRate = RATE_54; break;
- case 96: MaxSupportedRate = RATE_48; break;
- case 72: MaxSupportedRate = RATE_36; break;
- case 48: MaxSupportedRate = RATE_24; break;
- case 36: MaxSupportedRate = RATE_18; break;
- case 24: MaxSupportedRate = RATE_12; break;
- case 18: MaxSupportedRate = RATE_9; break;
- case 12: MaxSupportedRate = RATE_6; break;
- case 22: MaxSupportedRate = RATE_11; break;
- case 11: MaxSupportedRate = RATE_5_5; break;
- case 4: MaxSupportedRate = RATE_2; break;
- case 2: MaxSupportedRate = RATE_1; break;
- default: MaxSupportedRate = RATE_11; break;
- }
-
- pEntry->MaxSupportedRate = min(pAd->CommonCfg.MaxTxRate, MaxSupportedRate);
-
- if (pEntry->MaxSupportedRate < RATE_FIRST_OFDM_RATE)
- {
- pEntry->MaxHTPhyMode.field.MODE = MODE_CCK;
- pEntry->MaxHTPhyMode.field.MCS = pEntry->MaxSupportedRate;
- pEntry->MinHTPhyMode.field.MODE = MODE_CCK;
- pEntry->MinHTPhyMode.field.MCS = pEntry->MaxSupportedRate;
- pEntry->HTPhyMode.field.MODE = MODE_CCK;
- pEntry->HTPhyMode.field.MCS = pEntry->MaxSupportedRate;
- }
- else
- {
- pEntry->MaxHTPhyMode.field.MODE = MODE_OFDM;
- pEntry->MaxHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
- pEntry->MinHTPhyMode.field.MODE = MODE_OFDM;
- pEntry->MinHTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
- pEntry->HTPhyMode.field.MODE = MODE_OFDM;
- pEntry->HTPhyMode.field.MCS = OfdmRateToRxwiMCS[pEntry->MaxSupportedRate];
- }
-
- 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;
-
- // If this Entry supports 802.11n, upgrade to HT rate.
- if ((HtCapabilityLen != 0) && (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
- {
- 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;
- }
- else
- {
- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;
- pAd->MacTab.fAnyStationNonGF = TRUE;
- pAd->CommonCfg.AddHTInfo.AddHtInfo2.NonGfPresent = 1;
- }
-
- if ((HtCapability.HtCapInfo.ChannelWidth) && (pAd->CommonCfg.DesiredHtPhy.ChannelWidth))
- {
- pEntry->MaxHTPhyMode.field.BW= BW_40;
- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor40)&(HtCapability.HtCapInfo.ShortGIfor40));
- }
- else
- {
- pEntry->MaxHTPhyMode.field.BW = BW_20;
- pEntry->MaxHTPhyMode.field.ShortGI = ((pAd->CommonCfg.DesiredHtPhy.ShortGIfor20)&(HtCapability.HtCapInfo.ShortGIfor20));
- pAd->MacTab.fAnyStation20Only = TRUE;
- }
-
- // find max fixed rate
- for (ii=15; ii>=0; ii--)
- {
- j = ii/8;
- bitmask = (1<<(ii-(j*8)));
- if ( (pAd->StaCfg.DesiredHtPhyInfo.MCSSet[j]&bitmask) && (HtCapability.MCSSet[j]&bitmask))
- {
- pEntry->MaxHTPhyMode.field.MCS = ii;
- break;
- }
- if (ii==0)
- break;
- }
-
- 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
- pEntry->MaxHTPhyMode.field.BW = 1;
- pEntry->MaxHTPhyMode.field.MODE = MODE_HTMIX;
- pEntry->MaxHTPhyMode.field.STBC = 0;
- pEntry->MaxHTPhyMode.field.ShortGI = 0;
- pEntry->MaxHTPhyMode.field.MCS = 32;
- }
- else if (pEntry->MaxHTPhyMode.field.MCS > pAd->StaCfg.HTPhyMode.field.MCS)
- {
- // STA supports fixed MCS
- pEntry->MaxHTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
- }
- }
-
- pEntry->MaxHTPhyMode.field.STBC = (HtCapability.HtCapInfo.RxSTBC & (pAd->CommonCfg.DesiredHtPhy.TxSTBC));
- pEntry->MpduDensity = HtCapability.HtCapParm.MpduDensity;
- pEntry->MaxRAmpduFactor = HtCapability.HtCapParm.MaxRAmpduFactor;
- pEntry->MmpsMode = (UCHAR)HtCapability.HtCapInfo.MimoPs;
- pEntry->AMsduSize = (UCHAR)HtCapability.HtCapInfo.AMsduSize;
- pEntry->HTPhyMode.word = pEntry->MaxHTPhyMode.word;
-
- if (HtCapability.HtCapInfo.ShortGIfor20)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI20_CAPABLE);
- if (HtCapability.HtCapInfo.ShortGIfor40)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_SGI40_CAPABLE);
- if (HtCapability.HtCapInfo.TxSTBC)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_TxSTBC_CAPABLE);
- if (HtCapability.HtCapInfo.RxSTBC)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RxSTBC_CAPABLE);
- if (HtCapability.ExtHtCapInfo.PlusHTC)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_HTC_CAPABLE);
- if (pAd->CommonCfg.bRdg && HtCapability.ExtHtCapInfo.RDGSupport)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_RDG_CAPABLE);
- if (HtCapability.ExtHtCapInfo.MCSFeedback == 0x03)
- CLIENT_STATUS_SET_FLAG(pEntry, fCLIENT_STATUS_MCSFEEDBACK_CAPABLE);
-
- 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);
-
- if (pAd->StaCfg.bAutoTxRateSwitch == TRUE)
- {
- PUCHAR pTable;
- UCHAR TableSize = 0;
-
- MlmeSelectTxRateTable(pAd, pEntry, &pTable, &TableSize, &pEntry->CurrTxRateIndex);
- pEntry->bAutoTxRateSwitch = TRUE;
- }
- else
- {
- pEntry->HTPhyMode.field.MODE = pAd->StaCfg.HTPhyMode.field.MODE;
- pEntry->HTPhyMode.field.MCS = pAd->StaCfg.HTPhyMode.field.MCS;
- pEntry->bAutoTxRateSwitch = FALSE;
-
- RTMPUpdateLegacyTxSetting((UCHAR)pAd->StaCfg.DesiredTransmitSetting.field.FixedTxMode, pEntry);
- }
- pEntry->RateLen = SupportedRatesLen;
-
- if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)
- {
- // If support WPA or WPA2, start STAKey hand shake,
- // If failed hand shake, just tear down peer DLS
- if (RTMPSendSTAKeyRequest(pAd, pAd->StaCfg.DLSEntry[i].MacAddr) != NDIS_STATUS_SUCCESS)
- {
- MLME_DLS_REQ_STRUCT MlmeDlsReq;
- USHORT reason = REASON_QOS_CIPHER_NOT_SUPPORT;
-
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsRspAction failed when call RTMPSendSTAKeyRequest \n"));
- }
- else
- {
- pAd->StaCfg.DLSEntry[i].Status = DLS_WAIT_KEY;
- DBGPRINT(RT_DEBUG_TRACE,("DLS - waiting for STAKey handshake procedure\n"));
- }
- }
- else
- {
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH;
- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsRspAction() from %02x:%02x:%02x:%02x:%02x:%02x Succeed with WEP or no security\n", SA[0], SA[1], SA[2], SA[3], SA[4], SA[5]));
- }
- pAd->StaCfg.DLSEntry[i].Sequence = 0;
- if (HtCapabilityLen != 0)
- pAd->StaCfg.DLSEntry[i].bHTCap = TRUE;
- else
- pAd->StaCfg.DLSEntry[i].bHTCap = FALSE;
- }
- else
- {
- // DLS setup procedure failed.
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
- DBGPRINT(RT_DEBUG_ERROR,("DLS - PeerDlsRspAction failed with StatusCode=%d \n", StatusCode));
- }
- }
- }
- }
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-VOID MlmeDlsTearDownAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem)
-{
- PUCHAR pOutBuffer = NULL;
- NDIS_STATUS NStatus;
- ULONG FrameLen = 0;
- UCHAR Category = CATEGORY_DLS;
- UCHAR Action = ACTION_DLS_TEARDOWN;
- USHORT ReasonCode = REASON_QOS_UNSPECIFY;
- HEADER_802_11 DlsTearDownHdr;
- PRT_802_11_DLS pDLS;
- BOOLEAN TimerCancelled;
- UCHAR i;
-
- if(!MlmeDlsReqSanity(pAd, Elem->Msg, Elem->MsgLen, &pDLS, &ReasonCode))
- return;
-
- DBGPRINT(RT_DEBUG_TRACE,("DLS - MlmeDlsTearDownAction() with ReasonCode=%d \n", ReasonCode));
-
- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory
- if (NStatus != NDIS_STATUS_SUCCESS)
- {
- DBGPRINT(RT_DEBUG_ERROR,("DLS - MlmeDlsTearDownAction() allocate memory failed \n"));
- return;
- }
-
- ActHeaderInit(pAd, &DlsTearDownHdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
-
- // Build basic frame first
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- sizeof(HEADER_802_11), &DlsTearDownHdr,
- 1, &Category,
- 1, &Action,
- 6, &pDLS->MacAddr,
- 6, pAd->CurrentAddress,
- 2, &ReasonCode,
- END_OF_ARGS);
-
- MiniportMMRequest(pAd, QID_AC_BE, pOutBuffer, FrameLen);
- MlmeFreeMemory(pAd, pOutBuffer);
- RTMPCancelTimer(&pDLS->Timer, &TimerCancelled);
-
- // Remove key in local dls table entry
- for (i = 0; i < MAX_NUM_OF_INIT_DLS_ENTRY; i++)
- {
- if (MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr);
- }
- }
-
- // clear peer dls table entry
- for (i = MAX_NUM_OF_INIT_DLS_ENTRY; i < MAX_NUM_OF_DLS_ENTRY; i++)
- {
- if (MAC_ADDR_EQUAL(pDLS->MacAddr, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr);
- }
- }
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-VOID PeerDlsTearDownAction(
- IN PRTMP_ADAPTER pAd,
- IN MLME_QUEUE_ELEM *Elem)
-{
- UCHAR DA[MAC_ADDR_LEN], SA[MAC_ADDR_LEN];
- USHORT ReasonCode;
- UINT i;
- BOOLEAN TimerCancelled;
-
- if (!pAd->CommonCfg.bDLSCapable)
- return;
-
- if (!INFRA_ON(pAd))
- return;
-
- if (!PeerDlsTearDownSanity(pAd, Elem->Msg, Elem->MsgLen, DA, SA, &ReasonCode))
- return;
-
- DBGPRINT(RT_DEBUG_TRACE,("DLS - PeerDlsTearDownAction() from %02x:%02x:%02x:%02x:%02x:%02x with ReasonCode=%d\n", SA[0], SA[1], SA[2], SA[3], SA[4], SA[5], ReasonCode));
-
- // clear local dls table entry
- for (i=0; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
- {
- if (pAd->StaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
- //AsicDelWcidTab(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID);
- //AsicRemovePairwiseKeyEntry(pAd, BSS0, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID);
- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr);
- }
- }
-
- // clear 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 && MAC_ADDR_EQUAL(SA, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
- //AsicDelWcidTab(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID);
- //AsicRemovePairwiseKeyEntry(pAd, BSS0, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID);
- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr);
- }
- }
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-VOID RTMPCheckDLSTimeOut(
- IN PRTMP_ADAPTER pAd)
-{
- ULONG i;
- MLME_DLS_REQ_STRUCT MlmeDlsReq;
- USHORT reason = REASON_QOS_UNSPECIFY;
-
- if (! pAd->CommonCfg.bDLSCapable)
- return;
-
- if (! INFRA_ON(pAd))
- return;
-
- // If timeout value is equaled to zero, it means always not be timeout.
-
- // update local dls table entry
- for (i=0; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
- {
- if ((pAd->StaCfg.DLSEntry[i].Valid) && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)
- && (pAd->StaCfg.DLSEntry[i].TimeOut != 0))
- {
- pAd->StaCfg.DLSEntry[i].CountDownTimer --;
-
- if (pAd->StaCfg.DLSEntry[i].CountDownTimer == 0)
- {
- reason = REASON_QOS_REQUEST_TIMEOUT;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- }
- }
- }
-
- // update 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)
- && (pAd->StaCfg.DLSEntry[i].TimeOut != 0))
- {
- pAd->StaCfg.DLSEntry[i].CountDownTimer --;
-
- if (pAd->StaCfg.DLSEntry[i].CountDownTimer == 0)
- {
- reason = REASON_QOS_REQUEST_TIMEOUT;
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- }
- }
- }
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-BOOLEAN RTMPRcvFrameDLSCheck(
- IN PRTMP_ADAPTER pAd,
- IN PHEADER_802_11 pHeader,
- IN ULONG Len,
- IN PRT28XX_RXD_STRUC pRxD)
-{
- ULONG i;
- BOOLEAN bFindEntry = FALSE;
- BOOLEAN bSTAKeyFrame = FALSE;
- PEAPOL_PACKET pEap;
- PUCHAR pProto, pAddr = NULL;
- PUCHAR pSTAKey = NULL;
- UCHAR ZeroReplay[LEN_KEY_DESC_REPLAY];
- UCHAR Mic[16], OldMic[16];
- UCHAR digest[80];
- UCHAR DlsPTK[80];
- UCHAR temp[64];
- BOOLEAN TimerCancelled;
- CIPHER_KEY PairwiseKey;
-
-
- if (! pAd->CommonCfg.bDLSCapable)
- return bSTAKeyFrame;
-
- if (! INFRA_ON(pAd))
- return bSTAKeyFrame;
-
- if (! (pHeader->FC.SubType & 0x08))
- return bSTAKeyFrame;
-
- if (Len < LENGTH_802_11 + 6 + 2 + 2)
- return bSTAKeyFrame;
-
- pProto = (PUCHAR)pHeader + LENGTH_802_11 + 2 + 6; // QOS Control field , 0xAA 0xAA 0xAA 0x00 0x00 0x00
- pAddr = pHeader->Addr2;
-
- // L2PAD bit on will pad 2 bytes at LLC
- if (pRxD->L2PAD)
- {
- pProto += 2;
- }
-
- if (RTMPEqualMemory(EAPOL, pProto, 2) && (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA))
- {
- pEap = (PEAPOL_PACKET) (pProto + 2);
-
- DBGPRINT(RT_DEBUG_TRACE,("DLS - Sniff Len=%ld, DataLen=%d, KeyMic=%d, Install=%d, KeyAck=%d, Secure=%d, EKD_DL=%d, Error=%d, Request=%d\n", Len,
- (LENGTH_802_11 + 6 + 2 + 2 + sizeof(EAPOL_PACKET) - MAX_LEN_OF_RSNIE + 16),
- pEap->KeyDesc.KeyInfo.KeyMic,
- pEap->KeyDesc.KeyInfo.Install,
- pEap->KeyDesc.KeyInfo.KeyAck,
- pEap->KeyDesc.KeyInfo.Secure,
- pEap->KeyDesc.KeyInfo.EKD_DL,
- pEap->KeyDesc.KeyInfo.Error,
- pEap->KeyDesc.KeyInfo.Request));
-
- if ((Len >= (LENGTH_802_11 + 6 + 2 + 2 + sizeof(EAPOL_PACKET) - MAX_LEN_OF_RSNIE + 16)) && pEap->KeyDesc.KeyInfo.KeyMic
- && pEap->KeyDesc.KeyInfo.Install && pEap->KeyDesc.KeyInfo.KeyAck && pEap->KeyDesc.KeyInfo.Secure
- && pEap->KeyDesc.KeyInfo.EKD_DL && !pEap->KeyDesc.KeyInfo.Error && !pEap->KeyDesc.KeyInfo.Request)
- {
- // First validate replay counter, only accept message with larger replay counter
- // Let equal pass, some AP start with all zero replay counter
- NdisZeroMemory(ZeroReplay, LEN_KEY_DESC_REPLAY);
- if ((RTMPCompareMemory(pEap->KeyDesc.ReplayCounter, pAd->StaCfg.ReplayCounter, LEN_KEY_DESC_REPLAY) != 1) &&
- (RTMPCompareMemory(pEap->KeyDesc.ReplayCounter, ZeroReplay, LEN_KEY_DESC_REPLAY) != 0))
- return bSTAKeyFrame;
-
- //RTMPMoveMemory(pAd->StaCfg.ReplayCounter, pEap->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
- RTMPMoveMemory(pAd->StaCfg.DlsReplayCounter, pEap->KeyDesc.ReplayCounter, LEN_KEY_DESC_REPLAY);
- DBGPRINT(RT_DEBUG_TRACE,("DLS - Sniff replay counter (%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],
- pAd->StaCfg.ReplayCounter[3], pAd->StaCfg.ReplayCounter[4], pAd->StaCfg.ReplayCounter[5],
- pAd->StaCfg.ReplayCounter[6], pAd->StaCfg.ReplayCounter[7], Len, pEap->KeyDesc.KeyData[1]));
-
- // put these code segment to get the replay counter
- if (pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED)
- return bSTAKeyFrame;
-
- // Check MIC value
- // Save the MIC and replace with zero
- // use proprietary PTK
- NdisZeroMemory(temp, 64);
- NdisMoveMemory(temp, "IEEE802.11 WIRELESS ACCESS POINT", 32);
- WpaCountPTK(pAd, temp, temp, pAd->CommonCfg.Bssid, temp, pAd->CurrentAddress, DlsPTK, LEN_PTK);
-
- NdisMoveMemory(OldMic, pEap->KeyDesc.KeyMic, LEN_KEY_DESC_MIC);
- NdisZeroMemory(pEap->KeyDesc.KeyMic, LEN_KEY_DESC_MIC);
- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
- {
- // AES
- HMAC_SHA1((PUCHAR) pEap, pEap->Body_Len[1] + 4, DlsPTK, LEN_EAP_MICK, digest);
- NdisMoveMemory(Mic, digest, LEN_KEY_DESC_MIC);
- }
- else
- {
- hmac_md5(DlsPTK, LEN_EAP_MICK, (PUCHAR) pEap, pEap->Body_Len[1] + 4, Mic);
- }
-
- if (!NdisEqualMemory(OldMic, Mic, LEN_KEY_DESC_MIC))
- {
- DBGPRINT(RT_DEBUG_ERROR, ("MIC Different in Msg1 of STAKey handshake! \n"));
- return bSTAKeyFrame;
- }
- 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))
- {
- 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=%ld, KeyDataLen=%d\n",
- pAddr[0], pAddr[1], pAddr[2], pAddr[3], pAddr[4], pAddr[5], Len, pEap->KeyDesc.KeyData[1]));
-
- 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],
- pAd->StaCfg.ReplayCounter[3], pAd->StaCfg.ReplayCounter[4], pAd->StaCfg.ReplayCounter[5],
- pAd->StaCfg.ReplayCounter[6], pAd->StaCfg.ReplayCounter[7], Len, pEap->KeyDesc.KeyData[1]));
-
- }
- }
-
- // If timeout value is equaled to zero, it means always not be timeout.
- // update local dls table entry
- for (i= 0; i < MAX_NUM_OF_INIT_DLS_ENTRY; i++)
- {
- if (pAd->StaCfg.DLSEntry[i].Valid && MAC_ADDR_EQUAL(pAddr, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- if (bSTAKeyFrame)
- {
- PMAC_TABLE_ENTRY pEntry;
-
- // STAKey frame, add pairwise key table
- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH;
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
-
- PairwiseKey.KeyLen = LEN_TKIP_EK;
- NdisMoveMemory(PairwiseKey.Key, &pSTAKey[0], LEN_TKIP_EK);
- NdisMoveMemory(PairwiseKey.TxMic, &pSTAKey[16], LEN_TKIP_RXMICK);
- NdisMoveMemory(PairwiseKey.RxMic, &pSTAKey[24], LEN_TKIP_TXMICK);
-
- PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg;
-
- pEntry = DlsEntryTableLookup(pAd, pAd->StaCfg.DLSEntry[i].MacAddr, TRUE);
- //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
- AsicAddPairwiseKeyEntry(pAd,
- pAd->StaCfg.DLSEntry[i].MacAddr,
- (UCHAR)pAd->StaCfg.DLSEntry[i].MacTabMatchWCID,
- &PairwiseKey);
-
- RTMPAddWcidAttributeEntry(pAd,
- BSS0,
- 0,
- PairwiseKey.CipherAlg,
- pEntry);
-
- NdisMoveMemory(&pEntry->PairwiseKey, &PairwiseKey, sizeof(CIPHER_KEY));
- DBGPRINT(RT_DEBUG_TRACE,("DLS - Receive STAKey Message-1 (Peer STA MAC Address STAKey) \n"));
-
- RTMPSendSTAKeyHandShake(pAd, pAd->StaCfg.DLSEntry[i].MacAddr);
-
- DBGPRINT(RT_DEBUG_TRACE,("DLS - Finish STAKey handshake procedure (Initiator side)\n"));
- }
- else
- {
- // Data frame, update timeout value
- if (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)
- {
- pAd->StaCfg.DLSEntry[i].CountDownTimer = pAd->StaCfg.DLSEntry[i].TimeOut;
- //AsicUpdateRxWCIDTable(pAd, (USHORT)(i + 2), pAddr);
- }
- }
-
- bFindEntry = TRUE;
- }
- }
-
- // update 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 && MAC_ADDR_EQUAL(pAddr, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- if (bSTAKeyFrame)
- {
- PMAC_TABLE_ENTRY pEntry = NULL;
-
- // STAKey frame, add pairwise key table, and send STAkey Msg-2
- pAd->StaCfg.DLSEntry[i].Status = DLS_FINISH;
- RTMPCancelTimer(&pAd->StaCfg.DLSEntry[i].Timer, &TimerCancelled);
-
- PairwiseKey.KeyLen = LEN_TKIP_EK;
- NdisMoveMemory(PairwiseKey.Key, &pSTAKey[0], LEN_TKIP_EK);
- NdisMoveMemory(PairwiseKey.TxMic, &pSTAKey[16], LEN_TKIP_RXMICK);
- NdisMoveMemory(PairwiseKey.RxMic, &pSTAKey[24], LEN_TKIP_TXMICK);
-
- PairwiseKey.CipherAlg = pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg;
-
- pEntry = DlsEntryTableLookup(pAd, pAd->StaCfg.DLSEntry[i].MacAddr, TRUE);
- //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
- AsicAddPairwiseKeyEntry(pAd,
- pAd->StaCfg.DLSEntry[i].MacAddr,
- (UCHAR)pAd->StaCfg.DLSEntry[i].MacTabMatchWCID,
- &PairwiseKey);
-
- RTMPAddWcidAttributeEntry(pAd,
- BSS0,
- 0,
- PairwiseKey.CipherAlg,
- pEntry);
- NdisMoveMemory(&pEntry->PairwiseKey, &PairwiseKey, sizeof(CIPHER_KEY));
- DBGPRINT(RT_DEBUG_TRACE,("DLS - Receive STAKey Message-1 (Initiator STA MAC Address STAKey)\n"));
-
- // If support WPA or WPA2, start STAKey hand shake,
- // If failed hand shake, just tear down peer DLS
- if (RTMPSendSTAKeyHandShake(pAd, pAddr) != NDIS_STATUS_SUCCESS)
- {
- MLME_DLS_REQ_STRUCT MlmeDlsReq;
- USHORT reason = REASON_QOS_CIPHER_NOT_SUPPORT;
-
- pAd->StaCfg.DLSEntry[i].Valid = FALSE;
- pAd->StaCfg.DLSEntry[i].Status = DLS_NONE;
- DlsParmFill(pAd, &MlmeDlsReq, &pAd->StaCfg.DLSEntry[i], reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- }
- else
- {
- DBGPRINT(RT_DEBUG_TRACE,("DLS - Finish STAKey handshake procedure (Peer side)\n"));
- }
- }
- else
- {
- // Data frame, update timeout value
- if (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)
- {
- pAd->StaCfg.DLSEntry[i].CountDownTimer = pAd->StaCfg.DLSEntry[i].TimeOut;
- }
- }
-
- bFindEntry = TRUE;
- }
- }
-
-
- return bSTAKeyFrame;
-}
-
-/*
- ========================================================================
-
- Routine Description:
- Check if the frame can be sent through DLS direct link interface
-
- Arguments:
- pAd Pointer to adapter
-
- Return Value:
- DLS entry index
-
- Note:
-
- ========================================================================
-*/
-INT RTMPCheckDLSFrame(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDA)
-{
- INT rval = -1;
- INT i;
-
- if (!pAd->CommonCfg.bDLSCapable)
- return rval;
-
- if (!INFRA_ON(pAd))
- return rval;
-
- do{
- // check local dls table entry
- for (i=0; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
- {
- if (pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH) &&
- MAC_ADDR_EQUAL(pDA, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- rval = i;
- break;
- }
- }
-
- // check 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) &&
- MAC_ADDR_EQUAL(pDA, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- rval = i;
- break;
- }
- }
- } while (FALSE);
-
- return rval;
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-VOID RTMPSendDLSTearDownFrame(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDA)
-{
- PUCHAR pOutBuffer = NULL;
- NDIS_STATUS NStatus;
- HEADER_802_11 DlsTearDownHdr;
- ULONG FrameLen = 0;
- USHORT Reason = REASON_QOS_QSTA_LEAVING_QBSS;
- UCHAR Category = CATEGORY_DLS;
- UCHAR Action = ACTION_DLS_TEARDOWN;
- UCHAR i = 0;
-
- if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_RESET_IN_PROGRESS) ||
- RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))
- return;
-
- DBGPRINT(RT_DEBUG_TRACE, ("Send DLS TearDown Frame \n"));
-
- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer); //Get an unused nonpaged memory
- if (NStatus != NDIS_STATUS_SUCCESS)
- {
- DBGPRINT(RT_DEBUG_ERROR,("ASSOC - RTMPSendDLSTearDownFrame() allocate memory failed \n"));
- return;
- }
-
- ActHeaderInit(pAd, &DlsTearDownHdr, pAd->CommonCfg.Bssid, pAd->CurrentAddress, pAd->CommonCfg.Bssid);
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- sizeof(HEADER_802_11), &DlsTearDownHdr,
- 1, &Category,
- 1, &Action,
- 6, pDA,
- 6, pAd->CurrentAddress,
- 2, &Reason,
- END_OF_ARGS);
-
- MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
- MlmeFreeMemory(pAd, pOutBuffer);
-
- // Remove key in local dls table entry
- for (i = 0; i < MAX_NUM_OF_INIT_DLS_ENTRY; i++)
- {
- if (pAd->StaCfg.DLSEntry[i].Valid && (pAd->StaCfg.DLSEntry[i].Status == DLS_FINISH)
- && MAC_ADDR_EQUAL(pDA, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr);
- }
- }
-
- // Remove key in 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)
- && MAC_ADDR_EQUAL(pDA, pAd->StaCfg.DLSEntry[i].MacAddr))
- {
- MacTableDeleteDlsEntry(pAd, pAd->StaCfg.DLSEntry[i].MacTabMatchWCID, pAd->StaCfg.DLSEntry[i].MacAddr);
- }
- }
-
- DBGPRINT(RT_DEBUG_TRACE, ("Send DLS TearDown Frame and remove key in (i=%d) \n", i));
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-NDIS_STATUS RTMPSendSTAKeyRequest(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDA)
-{
- UCHAR Header802_3[14];
- NDIS_STATUS NStatus;
- ULONG FrameLen = 0;
- EAPOL_PACKET Packet;
- UCHAR Mic[16];
- UCHAR digest[80];
- PUCHAR pOutBuffer = NULL;
- PNDIS_PACKET pNdisPacket;
- UCHAR temp[64];
- UCHAR DlsPTK[80];
-
- DBGPRINT(RT_DEBUG_TRACE,("DLS - RTMPSendSTAKeyRequest() to %02x:%02x:%02x:%02x:%02x:%02x\n", pDA[0], pDA[1], pDA[2], pDA[3], pDA[4], pDA[5]));
-
- pAd->Sequence ++;
- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL);
-
- // Zero message body
- NdisZeroMemory(&Packet, sizeof(Packet));
- Packet.ProVer = EAPOL_VER;
- Packet.ProType = EAPOLKey;
- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE + 6 + MAC_ADDR_LEN; // data field contain KDE andPeer MAC address
-
- // STAKey Message is as EAPOL-Key(1,1,0,0,G/0,0,0, MIC, 0,Peer MAC KDE)
- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK))
- {
- Packet.KeyDesc.Type = WPA1_KEY_DESC;
- }
- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK))
- {
- Packet.KeyDesc.Type = WPA2_KEY_DESC;
- }
-
- // Key descriptor version
- Packet.KeyDesc.KeyInfo.KeyDescVer =
- (((pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) || (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled)) ? (DESC_TYPE_AES) : (DESC_TYPE_TKIP));
-
- Packet.KeyDesc.KeyInfo.KeyMic = 1;
- Packet.KeyDesc.KeyInfo.Secure = 1;
- Packet.KeyDesc.KeyInfo.Request = 1;
-
- Packet.KeyDesc.KeyDataLen[1] = 12;
-
- // use our own OUI to distinguish proprietary with standard.
- Packet.KeyDesc.KeyData[0] = 0xDD;
- Packet.KeyDesc.KeyData[1] = 0x0A;
- Packet.KeyDesc.KeyData[2] = 0x00;
- Packet.KeyDesc.KeyData[3] = 0x0C;
- Packet.KeyDesc.KeyData[4] = 0x43;
- Packet.KeyDesc.KeyData[5] = 0x03;
- NdisMoveMemory(&Packet.KeyDesc.KeyData[6], pDA, MAC_ADDR_LEN);
-
- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pAd->StaCfg.DlsReplayCounter, LEN_KEY_DESC_REPLAY);
-
- // Allocate buffer for transmitting message
- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);
- if (NStatus != NDIS_STATUS_SUCCESS)
- return NStatus;
-
- // Prepare EAPOL frame for MIC calculation
- // Be careful, only EAPOL frame is counted for MIC calculation
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- Packet.Body_Len[1] + 4, &Packet,
- END_OF_ARGS);
-
- // use proprietary PTK
- NdisZeroMemory(temp, 64);
- NdisMoveMemory(temp, "IEEE802.11 WIRELESS ACCESS POINT", 32);
- WpaCountPTK(pAd, temp, temp, pAd->CommonCfg.Bssid, temp, pAd->CurrentAddress, DlsPTK, LEN_PTK);
-
- // calculate MIC
- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
- {
- // AES
- NdisZeroMemory(digest, sizeof(digest));
- HMAC_SHA1(pOutBuffer, FrameLen, DlsPTK, LEN_EAP_MICK, digest);
- NdisMoveMemory(Packet.KeyDesc.KeyMic, digest, LEN_KEY_DESC_MIC);
- }
- else
- {
- NdisZeroMemory(Mic, sizeof(Mic));
- hmac_md5(DlsPTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic);
- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC);
- }
-
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- sizeof(Header802_3), Header802_3,
- Packet.Body_Len[1] + 4, &Packet,
- END_OF_ARGS);
-
- NStatus = RTMPAllocateNdisPacket(pAd, &pNdisPacket, NULL, 0, pOutBuffer, FrameLen);
- if (NStatus == NDIS_STATUS_SUCCESS)
- {
- RTMP_SET_PACKET_WCID(pNdisPacket, BSSID_WCID);
- STASendPacket(pAd, pNdisPacket);
- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
- }
-
- MlmeFreeMemory(pAd, pOutBuffer);
-
- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSendSTAKeyRequest- Send STAKey request (NStatus=%x, FrameLen=%ld)\n", NStatus, FrameLen));
-
- return NStatus;
-}
-
-/*
- ==========================================================================
- Description:
-
- IRQL = DISPATCH_LEVEL
-
- ==========================================================================
- */
-NDIS_STATUS RTMPSendSTAKeyHandShake(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pDA)
-{
- UCHAR Header802_3[14];
- NDIS_STATUS NStatus;
- ULONG FrameLen = 0;
- EAPOL_PACKET Packet;
- UCHAR Mic[16];
- UCHAR digest[80];
- PUCHAR pOutBuffer = NULL;
- PNDIS_PACKET pNdisPacket;
- UCHAR temp[64];
- UCHAR DlsPTK[80]; // Due to dirver can not get PTK, use proprietary PTK
-
- DBGPRINT(RT_DEBUG_TRACE,("DLS - RTMPSendSTAKeyHandShake() to %02x:%02x:%02x:%02x:%02x:%02x\n", pDA[0], pDA[1], pDA[2], pDA[3], pDA[4], pDA[5]));
-
- pAd->Sequence ++;
- MAKE_802_3_HEADER(Header802_3, pAd->CommonCfg.Bssid, pAd->CurrentAddress, EAPOL);
-
- // Zero message body
- NdisZeroMemory(&Packet, sizeof(Packet));
- Packet.ProVer = EAPOL_VER;
- Packet.ProType = EAPOLKey;
- Packet.Body_Len[1] = sizeof(KEY_DESCRIPTER) - MAX_LEN_OF_RSNIE + 6 + MAC_ADDR_LEN; // data field contain KDE and Peer MAC address
-
- // STAKey Message is as EAPOL-Key(1,1,0,0,G/0,0,0, MIC, 0,Peer MAC KDE)
- if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK))
- {
- Packet.KeyDesc.Type = WPA1_KEY_DESC;
- }
- else if ((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) || (pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK))
- {
- Packet.KeyDesc.Type = WPA2_KEY_DESC;
- }
-
- // Key descriptor version
- Packet.KeyDesc.KeyInfo.KeyDescVer =
- (((pAd->StaCfg.PairCipher == Ndis802_11Encryption3Enabled) || (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled)) ? (DESC_TYPE_AES) : (DESC_TYPE_TKIP));
-
- Packet.KeyDesc.KeyInfo.KeyMic = 1;
- Packet.KeyDesc.KeyInfo.Secure = 1;
-
- Packet.KeyDesc.KeyDataLen[1] = 12;
-
- // use our own OUI to distinguish proprietary with standard.
- Packet.KeyDesc.KeyData[0] = 0xDD;
- Packet.KeyDesc.KeyData[1] = 0x0A;
- Packet.KeyDesc.KeyData[2] = 0x00;
- Packet.KeyDesc.KeyData[3] = 0x0C;
- Packet.KeyDesc.KeyData[4] = 0x43;
- Packet.KeyDesc.KeyData[5] = 0x03;
- NdisMoveMemory(&Packet.KeyDesc.KeyData[6], pDA, MAC_ADDR_LEN);
-
- NdisMoveMemory(Packet.KeyDesc.ReplayCounter, pAd->StaCfg.DlsReplayCounter, LEN_KEY_DESC_REPLAY);
-
- // Allocate buffer for transmitting message
- NStatus = MlmeAllocateMemory(pAd, &pOutBuffer);
- if (NStatus != NDIS_STATUS_SUCCESS)
- return NStatus;
-
- // Prepare EAPOL frame for MIC calculation
- // Be careful, only EAPOL frame is counted for MIC calculation
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- Packet.Body_Len[1] + 4, &Packet,
- END_OF_ARGS);
-
- // use proprietary PTK
- NdisZeroMemory(temp, 64);
- NdisMoveMemory(temp, "IEEE802.11 WIRELESS ACCESS POINT", 32);
- WpaCountPTK(pAd, temp, temp, pAd->CommonCfg.Bssid, temp, pAd->CurrentAddress, DlsPTK, LEN_PTK);
-
- // calculate MIC
- if (pAd->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
- {
- // AES
- NdisZeroMemory(digest, sizeof(digest));
- HMAC_SHA1(pOutBuffer, FrameLen, DlsPTK, LEN_EAP_MICK, digest);
- NdisMoveMemory(Packet.KeyDesc.KeyMic, digest, LEN_KEY_DESC_MIC);
- }
- else
- {
- NdisZeroMemory(Mic, sizeof(Mic));
- hmac_md5(DlsPTK, LEN_EAP_MICK, pOutBuffer, FrameLen, Mic);
- NdisMoveMemory(Packet.KeyDesc.KeyMic, Mic, LEN_KEY_DESC_MIC);
- }
-
- MakeOutgoingFrame(pOutBuffer, &FrameLen,
- sizeof(Header802_3), Header802_3,
- Packet.Body_Len[1] + 4, &Packet,
- END_OF_ARGS);
-
- NStatus = RTMPAllocateNdisPacket(pAd, &pNdisPacket, NULL, 0, pOutBuffer, FrameLen);
- if (NStatus == NDIS_STATUS_SUCCESS)
- {
- RTMP_SET_PACKET_WCID(pNdisPacket, BSSID_WCID);
- STASendPacket(pAd, pNdisPacket);
- RTMPDeQueuePacket(pAd, FALSE, NUM_OF_TX_RING, MAX_TX_PROCESS);
- }
-
- MlmeFreeMemory(pAd, pOutBuffer);
-
- DBGPRINT(RT_DEBUG_TRACE, ("RTMPSendSTAKeyHandShake- Send STAKey Message-2 (NStatus=%x, FrameLen=%ld)\n", NStatus, FrameLen));
-
- return NStatus;
-}
-
-VOID DlsTimeoutAction(
- IN PVOID SystemSpecific1,
- IN PVOID FunctionContext,
- IN PVOID SystemSpecific2,
- IN PVOID SystemSpecific3)
-{
- MLME_DLS_REQ_STRUCT MlmeDlsReq;
- USHORT reason;
- PRT_802_11_DLS pDLS = (PRT_802_11_DLS)FunctionContext;
- PRTMP_ADAPTER pAd = pDLS->pAd;
-
- DBGPRINT(RT_DEBUG_TRACE, ("DlsTimeout - Tear down DLS links (%02x:%02x:%02x:%02x:%02x:%02x)\n",
- pDLS->MacAddr[0], pDLS->MacAddr[1], pDLS->MacAddr[2], pDLS->MacAddr[3], pDLS->MacAddr[4], pDLS->MacAddr[5]));
-
- if ((pDLS) && (pDLS->Valid))
- {
- reason = REASON_QOS_REQUEST_TIMEOUT;
- pDLS->Valid = FALSE;
- pDLS->Status = DLS_NONE;
- DlsParmFill(pAd, &MlmeDlsReq, pDLS, reason);
- MlmeEnqueue(pAd, DLS_STATE_MACHINE, MT2_MLME_DLS_TEAR_DOWN, sizeof(MLME_DLS_REQ_STRUCT), &MlmeDlsReq);
- RT28XX_MLME_HANDLER(pAd);
- }
-}
-
-/*
-================================================================
-Description : because DLS and CLI share the same WCID table in ASIC.
-Mesh entry also insert to pAd->MacTab.content[]. Such is marked as ValidAsDls = TRUE.
-Also fills the pairwise key.
-Because front MAX_AID_BA entries have direct mapping to BAEntry, which is only used as CLI. So we insert Dls
-from index MAX_AID_BA.
-================================================================
-*/
-MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pAddr,
- IN UINT DlsEntryIdx)
-{
- PMAC_TABLE_ENTRY pEntry = NULL;
-
- DBGPRINT(RT_DEBUG_TRACE, ("====> MacTableInsertDlsEntry\n"));
- // if FULL, return
- if (pAd->MacTab.Size >= MAX_LEN_OF_MAC_TABLE)
- return NULL;
-
- do
- {
- if((pEntry = DlsEntryTableLookup(pAd, pAddr, TRUE)) != NULL)
- break;
-
- // allocate one MAC entry
- pEntry = MacTableInsertEntry(pAd, pAddr, DlsEntryIdx + MIN_NET_DEVICE_FOR_DLS, TRUE);
- if (pEntry)
- {
- pAd->StaCfg.DLSEntry[DlsEntryIdx].MacTabMatchWCID = pEntry->Aid;
- 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));
-
- // If legacy WEP is used, set pair-wise cipherAlg into WCID attribute table for this entry
- if ((pEntry->ValidAsDls) && (pEntry->WepStatus == Ndis802_11WEPEnabled))
- {
- UCHAR KeyIdx = 0;
- UCHAR CipherAlg = 0;
-
- KeyIdx = pAd->StaCfg.DefaultKeyId;
-
- CipherAlg = pAd->SharedKey[BSS0][KeyIdx].CipherAlg;
-
- RTMPAddWcidAttributeEntry(pAd,
- BSS0,
- pAd->StaCfg.DefaultKeyId,
- pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg,
- pEntry);
- }
-
- break;
- }
- } while(FALSE);
-
- DBGPRINT(RT_DEBUG_TRACE, ("<==== MacTableInsertDlsEntry\n"));
-
- return pEntry;
-}
-
-
-/*
- ==========================================================================
- Description:
- Delete all Mesh Entry in pAd->MacTab
- ==========================================================================
- */
-BOOLEAN MacTableDeleteDlsEntry(
- IN PRTMP_ADAPTER pAd,
- IN USHORT wcid,
- IN PUCHAR pAddr)
-{
- DBGPRINT(RT_DEBUG_TRACE, ("====> MacTableDeleteDlsEntry\n"));
-
- if (!VALID_WCID(wcid))
- return FALSE;
-
- MacTableDeleteEntry(pAd, wcid, pAddr);
-
- DBGPRINT(RT_DEBUG_TRACE, ("<==== MacTableDeleteDlsEntry\n"));
-
- return TRUE;
-}
-
-MAC_TABLE_ENTRY *DlsEntryTableLookup(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR pAddr,
- IN BOOLEAN bResetIdelCount)
-{
- ULONG HashIdx;
- MAC_TABLE_ENTRY *pEntry = NULL;
-
- RTMP_SEM_LOCK(&pAd->MacTabLock);
- HashIdx = MAC_ADDR_HASH_INDEX(pAddr);
- pEntry = pAd->MacTab.Hash[HashIdx];
-
- while (pEntry)
- {
- if ((pEntry->ValidAsDls == TRUE)
- && MAC_ADDR_EQUAL(pEntry->Addr, pAddr))
- {
- if(bResetIdelCount)
- pEntry->NoDataIdleCount = 0;
- break;
- }
- else
- pEntry = pEntry->pNext;
- }
-
- RTMP_SEM_UNLOCK(&pAd->MacTabLock);
- return pEntry;
-}
-
-MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
- IN PRTMP_ADAPTER pAd,
- IN UCHAR wcid,
- IN PUCHAR pAddr,
- IN BOOLEAN bResetIdelCount)
-{
- ULONG DLsIndex;
- PMAC_TABLE_ENTRY pCurEntry = NULL;
- PMAC_TABLE_ENTRY pEntry = NULL;
-
- if (!VALID_WCID(wcid))
- return NULL;
-
- RTMP_SEM_LOCK(&pAd->MacTabLock);
-
- do
- {
- pCurEntry = &pAd->MacTab.Content[wcid];
-
- DLsIndex = 0xff;
- if ((pCurEntry) && (pCurEntry->ValidAsDls== TRUE))
- {
- DLsIndex = pCurEntry->MatchDlsEntryIdx;
- }
-
- if (DLsIndex == 0xff)
- break;
-
- if (MAC_ADDR_EQUAL(pCurEntry->Addr, pAddr))
- {
- if(bResetIdelCount)
- pCurEntry->NoDataIdleCount = 0;
- pEntry = pCurEntry;
- break;
- }
- } while(FALSE);
-
- RTMP_SEM_UNLOCK(&pAd->MacTabLock);
-
- return pEntry;
-}
-
-INT Set_DlsEntryInfo_Display_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- INT i;
-
- printk("\n%-19s%-8s\n", "MAC", "TIMEOUT\n");
- for (i=0; i<MAX_NUM_OF_DLS_ENTRY; i++)
- {
- 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");
-
- }
- }
-
- return TRUE;
-}
-
-INT Set_DlsAddEntry_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UCHAR mac[MAC_ADDR_LEN];
- USHORT Timeout;
- char *token, sepValue[] = ":", DASH = '-';
- INT i;
- RT_802_11_DLS Dls;
-
- if(strlen(arg) < 19) //Mac address acceptable format 01:02:03:04:05:06 length 17 plus the "-" and timeout value in decimal format.
- return FALSE;
-
- token = strchr(arg, DASH);
- if ((token != NULL) && (strlen(token)>1))
- {
- Timeout = simple_strtol((token+1), 0, 10);
-
- *token = '\0';
- for (i = 0, token = rstrtok(arg, &sepValue[0]); token; token = rstrtok(NULL, &sepValue[0]), i++)
- {
- if((strlen(token) != 2) || (!isxdigit(*token)) || (!isxdigit(*(token+1))))
- return FALSE;
- AtoH(token, (PUCHAR)(&mac[i]), 1);
- }
- if(i != 6)
- return FALSE;
-
- printk("\n%02x:%02x:%02x:%02x:%02x:%02x-%d", mac[0], mac[1],
- mac[2], mac[3], mac[4], mac[5], (int)Timeout);
-
- NdisZeroMemory(&Dls, sizeof(RT_802_11_DLS));
- Dls.TimeOut = Timeout;
- COPY_MAC_ADDR(Dls.MacAddr, mac);
- Dls.Valid = 1;
-
- MlmeEnqueue(pAd,
- MLME_CNTL_STATE_MACHINE,
- RT_OID_802_11_SET_DLS_PARAM,
- sizeof(RT_802_11_DLS),
- &Dls);
-
- return TRUE;
- }
-
- return FALSE;
-
-}
-
-INT Set_DlsTearDownEntry_Proc(
- IN PRTMP_ADAPTER pAd,
- IN PUCHAR arg)
-{
- UCHAR macAddr[MAC_ADDR_LEN];
- CHAR *value;
- INT i;
- RT_802_11_DLS Dls;
-
- if(strlen(arg) != 17) //Mac address acceptable format 01:02:03:04:05:06 length 17
- return FALSE;
-
- for (i=0, value = rstrtok(arg,":"); value; value = rstrtok(NULL,":"))
- {
- if((strlen(value) != 2) || (!isxdigit(*value)) || (!isxdigit(*(value+1))) )
- return FALSE; //Invalid
-
- AtoH(value, &macAddr[i++], 2);
- }
-
- printk("\n%02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1],
- macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
-
- NdisZeroMemory(&Dls, sizeof(RT_802_11_DLS));
- COPY_MAC_ADDR(Dls.MacAddr, macAddr);
- Dls.Valid = 0;
-
- MlmeEnqueue(pAd,
- MLME_CNTL_STATE_MACHINE,
- RT_OID_802_11_SET_DLS_PARAM,
- sizeof(RT_802_11_DLS),
- &Dls);
-
- return TRUE;
-}
-
diff --git a/drivers/staging/rt2860/sta/rtmp_data.c b/drivers/staging/rt2860/sta/rtmp_data.c
index c5e76a2da56d..b41ce230c501 100644
--- a/drivers/staging/rt2860/sta/rtmp_data.c
+++ b/drivers/staging/rt2860/sta/rtmp_data.c
@@ -50,7 +50,6 @@ VOID STARxEAPOLFrameIndicate(
PRXWI_STRUC pRxWI = pRxBlk->pRxWI;
UCHAR *pTmpBuf;
-#ifdef WPA_SUPPLICANT_SUPPORT
if (pAd->StaCfg.WpaSupplicantUP)
{
// All EAPoL frames have to pass to upper layer (ex. WPA_SUPPLICANT daemon)
@@ -75,6 +74,7 @@ VOID STARxEAPOLFrameIndicate(
if (pAd->StaCfg.DesireSharedKey[idx].KeyLen > 0)
{
+#ifdef RT2860
MAC_TABLE_ENTRY *pEntry = &pAd->MacTab.Content[BSSID_WCID];
// Set key material and cipherAlg to Asic
@@ -88,6 +88,32 @@ VOID STARxEAPOLFrameIndicate(
pAd->IndicateMediaState = NdisMediaStateConnected;
pAd->ExtraInfo = GENERAL_LINK_UP;
+#endif
+#ifdef RT2870
+ union
+ {
+ char buf[sizeof(NDIS_802_11_WEP)+MAX_LEN_OF_KEY- 1];
+ NDIS_802_11_WEP keyinfo;
+ } WepKey;
+ int len;
+
+
+ NdisZeroMemory(&WepKey, sizeof(WepKey));
+ len =pAd->StaCfg.DesireSharedKey[idx].KeyLen;
+
+ NdisMoveMemory(WepKey.keyinfo.KeyMaterial,
+ pAd->StaCfg.DesireSharedKey[idx].Key,
+ pAd->StaCfg.DesireSharedKey[idx].KeyLen);
+
+ WepKey.keyinfo.KeyIndex = 0x80000000 + idx;
+ WepKey.keyinfo.KeyLength = len;
+ pAd->SharedKey[BSS0][idx].KeyLen =(UCHAR) (len <= 5 ? 5 : 13);
+
+ pAd->IndicateMediaState = NdisMediaStateConnected;
+ pAd->ExtraInfo = GENERAL_LINK_UP;
+ // need to enqueue cmd to thread
+ RTUSBEnqueueCmdFromNdis(pAd, OID_802_11_ADD_WEP, TRUE, &WepKey, sizeof(WepKey.keyinfo) + len - 1);
+#endif // RT2870 //
// 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;
@@ -103,7 +129,6 @@ VOID STARxEAPOLFrameIndicate(
}
}
else
-#endif // WPA_SUPPLICANT_SUPPORT //
{
// Special DATA frame that has to pass to MLME
// 1. Cisco Aironet frames for CCX2. We need pass it to MLME for special process
@@ -168,20 +193,16 @@ VOID STARxDataFrameAnnounce(
// ARALINK
CmmRxRalinkFrameIndicate(pAd, pEntry, pRxBlk, FromWhichBSSID);
}
-#ifdef QOS_DLS_SUPPORT
- RX_BLK_CLEAR_FLAG(pRxBlk, fRX_DLS);
-#endif // QOS_DLS_SUPPORT //
}
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
@@ -226,13 +247,11 @@ BOOLEAN STACheckTkipMICValue(
{
DBGPRINT_RAW(RT_DEBUG_ERROR,("Rx MIC Value error 2\n"));
-#ifdef WPA_SUPPLICANT_SUPPORT
if (pAd->StaCfg.WpaSupplicantUP)
{
WpaSendMicFailureToWpaSupplicant(pAd, (pWpaKey->Type == PAIRWISEKEY) ? TRUE : FALSE);
}
else
-#endif // WPA_SUPPLICANT_SUPPORT //
{
RTMPReportMicError(pAd, pWpaKey);
}
@@ -276,14 +295,6 @@ VOID STAHandleRxDataFrame(
return;
}
-#ifdef QOS_DLS_SUPPORT
- //if ((pHeader->FC.FrDs == 0) && (pHeader->FC.ToDs == 0))
- if (RTMPRcvFrameDLSCheck(pAd, pHeader, pRxWI->MPDUtotalByteCount, pRxD))
- {
- return;
- }
-#endif // QOS_DLS_SUPPORT //
-
// Drop not my BSS frames
if (pRxD->MyBss == 0)
{
@@ -342,10 +353,7 @@ VOID STAHandleRxDataFrame(
}
// Drop not my BSS frame (we can not only check the MyBss bit in RxD)
-#ifdef QOS_DLS_SUPPORT
- if (!pAd->CommonCfg.bDLSCapable)
- {
-#endif // QOS_DLS_SUPPORT //
+
if (INFRA_ON(pAd))
{
// Infrastructure mode, check address 2 for BSSID
@@ -368,9 +376,6 @@ VOID STAHandleRxDataFrame(
return;
}
}
-#ifdef QOS_DLS_SUPPORT
- }
-#endif // QOS_DLS_SUPPORT //
//
// find pEntry
@@ -391,11 +396,6 @@ VOID STAHandleRxDataFrame(
if (INFRA_ON(pAd))
{
RX_BLK_SET_FLAG(pRxBlk, fRX_INFRA);
-#ifdef QOS_DLS_SUPPORT
- if ((pHeader->FC.FrDs == 0) && (pHeader->FC.ToDs == 0))
- RX_BLK_SET_FLAG(pRxBlk, fRX_DLS);
- else
-#endif // QOS_DLS_SUPPORT //
ASSERT(pRxWI->WirelessCliID == BSSID_WCID);
}
@@ -453,12 +453,10 @@ VOID STAHandleRxDataFrame(
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 //
}
}
@@ -471,13 +469,10 @@ 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
@@ -509,18 +504,6 @@ VOID STAHandleRxDataFrame(
{
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);
@@ -592,7 +575,13 @@ VOID STAHandleRxMgmtFrame(
{
// We should collect RSSI not only U2M data but also my beacon
+#ifdef RT30xx
+ if ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2))
+ && (pAd->RxAnt.EvaluatePeriod == 0))
+#endif
+#ifndef RT30xx
if ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2)))
+#endif
{
Update_Rssi_Sample(pAd, &pAd->StaCfg.RssiSample, pRxWI);
@@ -600,6 +589,18 @@ VOID STAHandleRxMgmtFrame(
pAd->StaCfg.LastSNR1 = (UCHAR)(pRxWI->SNR1);
}
+#ifdef RT30xx
+ // collect rssi information for antenna diversity
+ if (pAd->NicConfig2.field.AntDiversity)
+ {
+ if ((pRxD->U2M) || ((pHeader->FC.SubType == SUBTYPE_BEACON) && (MAC_ADDR_EQUAL(&pAd->CommonCfg.Bssid, &pHeader->Addr2))))
+ {
+ COLLECT_RX_ANTENNA_AVERAGE_RSSI(pAd, ConvertToRssi(pAd, (UCHAR)pRxWI->RSSI0, RSSI_0), 0); //Note: RSSI2 not used on RT73
+ pAd->StaCfg.NumOfAvgRssiSample ++;
+ }
+ }
+#endif // RT30xx //
+
// First check the size, it MUST not exceed the mlme queue size
if (pRxWI->MPDUtotalByteCount > MGMT_DMA_BUFFER_SIZE)
{
@@ -618,21 +619,17 @@ 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:
@@ -691,12 +688,14 @@ BOOLEAN STARxDoneInterruptHandle(
break;
}
+#ifdef RT2860
if (RxProcessed++ > MAX_RX_PROCESS_CNT)
{
// need to reschedule rx handle
bReschedule = TRUE;
break;
}
+#endif
RxProcessed ++; // test
@@ -721,11 +720,6 @@ BOOLEAN STARxDoneInterruptHandle(
pRxWI = (PRXWI_STRUC) pData;
pHeader = (PHEADER_802_11) (pData+RXWI_SIZE) ;
-#ifdef RT_BIG_ENDIAN
- RTMPFrameEndianChange(pAd, (PUCHAR)pHeader, DIR_READ, TRUE);
- RTMPWIEndianChange((PUCHAR)pRxWI, TYPE_RXWI);
-#endif
-
// build RxCell
RxCell.pRxWI = pRxWI;
RxCell.pHeader = pHeader;
@@ -749,22 +743,6 @@ BOOLEAN STARxDoneInterruptHandle(
break;
}
/* RT2870 invokes STARxDoneInterruptHandle() in rtusb_bulk.c */
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- {
- pAd->ate.RxCntPerSec++;
- ATESampleRssi(pAd, pRxWI);
-#ifdef RALINK_28xx_QA
- if (pAd->ate.bQARxStart == TRUE)
- {
- /* (*pRxD) has been swapped in GetPacketFromRxRing() */
- ATE_QA_Statistics(pAd, pRxWI, pRxD, pHeader);
- }
-#endif // RALINK_28xx_QA //
- RELEASE_NDIS_PACKET(pAd, pRxPacket, NDIS_STATUS_SUCCESS);
- continue;
- }
-#endif // RALINK_ATE //
// Check for all RxD errors
Status = RTMPCheckRxError(pAd, pHeader, pRxWI, pRxD);
@@ -807,6 +785,7 @@ BOOLEAN STARxDoneInterruptHandle(
}
}
+#ifdef RT2860
// fRTMP_PS_GO_TO_SLEEP_NOW is set if receiving beacon.
if (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW) && (INFRA_ON(pAd)))
{
@@ -814,6 +793,7 @@ BOOLEAN STARxDoneInterruptHandle(
AsicSleepThenAutoWakeup(pAd, pAd->ThisTbttNumToNextWakeUp);
bReschedule = FALSE;
}
+#endif
return bReschedule;
}
@@ -831,7 +811,12 @@ BOOLEAN STARxDoneInterruptHandle(
VOID RTMPHandleTwakeupInterrupt(
IN PRTMP_ADAPTER pAd)
{
+#ifdef RT2860
AsicForceWakeup(pAd, DOT11POWERSAVE);
+#endif
+#ifdef RT2870
+ AsicForceWakeup(pAd, FALSE);
+#endif
}
/*
@@ -885,17 +870,6 @@ VOID STASendPackets(
{
// Record that orignal packet source is from NDIS layer,so that
// later on driver knows how to release this NDIS PACKET
-#ifdef QOS_DLS_SUPPORT
- MAC_TABLE_ENTRY *pEntry;
- PUCHAR pSrcBufVA = GET_OS_PKT_DATAPTR(pPacket);
-
- pEntry = MacTableLookup(pAd, pSrcBufVA);
- if (pEntry && (pEntry->ValidAsDls == TRUE))
- {
- RTMP_SET_PACKET_WCID(pPacket, pEntry->Aid);
- }
- else
-#endif // QOS_DLS_SUPPORT //
RTMP_SET_PACKET_WCID(pPacket, 0); // this field is useless when in STA mode
RTMP_SET_PACKET_SOURCE(pPacket, PKTSRC_NDIS);
NDIS_SET_PACKET_STATUS(pPacket, NDIS_STATUS_PENDING);
@@ -977,18 +951,6 @@ NDIS_STATUS STASendPacket(
{
if(INFRA_ON(pAd))
{
-#ifdef QOS_DLS_SUPPORT
- USHORT tmpWcid;
-
- tmpWcid = RTMP_GET_PACKET_WCID(pPacket);
- if (VALID_WCID(tmpWcid) &&
- (pAd->MacTab.Content[tmpWcid].ValidAsDls== TRUE))
- {
- pEntry = &pAd->MacTab.Content[tmpWcid];
- Rate = pAd->MacTab.Content[tmpWcid].CurrTxRate;
- }
- else
-#endif // QOS_DLS_SUPPORT //
{
pEntry = &pAd->MacTab.Content[BSSID_WCID];
RTMP_SET_PACKET_WCID(pPacket, BSSID_WCID);
@@ -1039,12 +1001,7 @@ NDIS_STATUS STASendPacket(
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)
-#ifdef WPA_SUPPLICANT_SUPPORT
|| (pAd->StaCfg.IEEE8021X == TRUE)
-#endif // WPA_SUPPLICANT_SUPPORT //
-#ifdef LEAP_SUPPORT
- || (pAd->StaCfg.LeapAuthMode == CISCO_AuthModeLEAP)
-#endif // LEAP_SUPPORT //
)
&& ((pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED) || (pAd->StaCfg.MicErrCnt >= 2))
&& (RTMP_GET_PACKET_EAPOL(pPacket)== FALSE)
@@ -1070,10 +1027,8 @@ 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
@@ -1110,7 +1065,13 @@ NDIS_STATUS STASendPacket(
//
UserPriority = 0;
QueIdx = QID_AC_BE;
+#ifdef RT2860
if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED))
+#endif
+#ifdef RT2870
+ if (OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_WMM_INUSED) &&
+ CLIENT_STATUS_TEST_FLAG(pEntry, fCLIENT_STATUS_WMM_CAPABLE))
+#endif
{
USHORT Protocol;
UCHAR LlcSnapLen = 0, Byte0, Byte1;
@@ -1163,9 +1124,6 @@ NDIS_STATUS STASendPacket(
if (pAd->TxSwQueue[QueIdx].Number >= MAX_PACKETS_IN_QUEUE)
{
RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags);
-#ifdef BLOCK_NET_IF
- StopNetIfQueue(pAd, QueIdx, pPacket);
-#endif // BLOCK_NET_IF //
RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
return NDIS_STATUS_FAILURE;
@@ -1176,9 +1134,13 @@ NDIS_STATUS STASendPacket(
}
RTMP_IRQ_UNLOCK(&pAd->irq_lock, IrqFlags);
-#ifdef DOT11_N_SUPPORT
if ((pAd->CommonCfg.BACapability.field.AutoBA == TRUE)&&
+#ifdef RT2860
(pAd->StaActive.SupportedPhyInfo.bHtEnable == TRUE))
+#endif
+#ifdef RT2870
+ IS_HT_STA(pEntry))
+#endif
{
if (((pEntry->TXBAbitmap & (1<<UserPriority)) == 0) &&
((pEntry->BADeclineBitmap & (1<<UserPriority)) == 0) &&
@@ -1194,7 +1156,6 @@ 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;
@@ -1223,14 +1184,27 @@ NDIS_STATUS STASendPacket(
========================================================================
*/
+
+#ifdef RT2870
+/*
+ Actually, this function used to check if the TxHardware Queue still has frame need to send.
+ If no frame need to send, go to sleep, else, still wake up.
+*/
+#endif
NDIS_STATUS RTMPFreeTXDRequest(
IN PRTMP_ADAPTER pAd,
IN UCHAR QueIdx,
IN UCHAR NumberRequired,
IN PUCHAR FreeNumberIs)
{
+#ifdef RT2860
ULONG FreeNumber = 0;
+#endif
NDIS_STATUS Status = NDIS_STATUS_FAILURE;
+#ifdef RT2870
+ unsigned long IrqFlags;
+ HT_TX_CONTEXT *pHTTXContext;
+#endif
switch (QueIdx)
{
@@ -1239,6 +1213,7 @@ NDIS_STATUS RTMPFreeTXDRequest(
case QID_AC_VI:
case QID_AC_VO:
case QID_HCCA:
+#ifdef RT2860
if (pAd->TxRing[QueIdx].TxSwFreeIdx > pAd->TxRing[QueIdx].TxCpuIdx)
FreeNumber = pAd->TxRing[QueIdx].TxSwFreeIdx - pAd->TxRing[QueIdx].TxCpuIdx - 1;
else
@@ -1246,9 +1221,27 @@ NDIS_STATUS RTMPFreeTXDRequest(
if (FreeNumber >= NumberRequired)
Status = NDIS_STATUS_SUCCESS;
+#endif
+#ifdef RT2870
+ {
+ pHTTXContext = &pAd->TxContext[QueIdx];
+ RTMP_IRQ_LOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
+ if ((pHTTXContext->CurWritePosition != pHTTXContext->ENextBulkOutPosition) ||
+ (pHTTXContext->IRPPending == TRUE))
+ {
+ Status = NDIS_STATUS_FAILURE;
+ }
+ else
+ {
+ Status = NDIS_STATUS_SUCCESS;
+ }
+ RTMP_IRQ_UNLOCK(&pAd->TxContextQueueLock[QueIdx], IrqFlags);
+ }
+#endif
break;
case QID_MGMT:
+#ifdef RT2860
if (pAd->MgmtRing.TxSwFreeIdx > pAd->MgmtRing.TxCpuIdx)
FreeNumber = pAd->MgmtRing.TxSwFreeIdx - pAd->MgmtRing.TxCpuIdx - 1;
else
@@ -1256,13 +1249,22 @@ NDIS_STATUS RTMPFreeTXDRequest(
if (FreeNumber >= NumberRequired)
Status = NDIS_STATUS_SUCCESS;
+#endif
+#ifdef RT2870
+ if (pAd->MgmtRing.TxSwFreeIdx != MGMT_RING_SIZE)
+ Status = NDIS_STATUS_FAILURE;
+ else
+ Status = NDIS_STATUS_SUCCESS;
+#endif
break;
default:
DBGPRINT(RT_DEBUG_ERROR,("RTMPFreeTXDRequest::Invalid QueIdx(=%d)\n", QueIdx));
break;
}
+#ifdef RT2860
*FreeNumberIs = (UCHAR)FreeNumber;
+#endif
return (Status);
}
@@ -1283,22 +1285,12 @@ VOID RTMPSendNullFrame(
ULONG Length;
PHEADER_802_11 pHeader_802_11;
-
-#ifdef RALINK_ATE
- if(ATE_ON(pAd))
- {
- return;
- }
-#endif // RALINK_ATE //
-
// WPA 802.1x secured port control
if (((pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2) ||
(pAd->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)
-#ifdef WPA_SUPPLICANT_SUPPORT
|| (pAd->StaCfg.IEEE8021X == TRUE)
-#endif
) &&
(pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED))
{
@@ -1402,30 +1394,6 @@ VOID STAFindCipherAlgorithm(
}
else if (Cipher == Ndis802_11Encryption1Enabled)
{
-#ifdef LEAP_SUPPORT
- if (pAd->StaCfg.CkipFlag & 0x10) // Cisco CKIP KP is on
- {
- if (LEAP_CCKM_ON(pAd))
- {
- if (((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd))))
- KeyIdx = 1;
- else
- KeyIdx = 0;
- }
- else
- KeyIdx = pAd->StaCfg.DefaultKeyId;
- }
- else if (pAd->StaCfg.CkipFlag & 0x08) // only CKIP CMIC
- KeyIdx = pAd->StaCfg.DefaultKeyId;
- else if (LEAP_CCKM_ON(pAd))
- {
- if ((*pSrcBufVA & 0x01) && (ADHOC_ON(pAd)))
- KeyIdx = 1;
- else
- KeyIdx = 0;
- }
- else // standard WEP64 or WEP128
-#endif // LEAP_SUPPORT //
KeyIdx = pAd->StaCfg.DefaultKeyId;
}
else if ((Cipher == Ndis802_11Encryption2Enabled) ||
@@ -1443,13 +1411,11 @@ VOID STAFindCipherAlgorithm(
CipherAlg = CIPHER_NONE;
else if ((Cipher == Ndis802_11EncryptionDisabled) || (pAd->SharedKey[BSS0][KeyIdx].KeyLen == 0))
CipherAlg = CIPHER_NONE;
-#ifdef WPA_SUPPLICANT_SUPPORT
else if ( pAd->StaCfg.WpaSupplicantUP &&
(Cipher == Ndis802_11Encryption1Enabled) &&
(pAd->StaCfg.IEEE8021X == TRUE) &&
(pAd->StaCfg.PortSecured == WPA_802_1X_PORT_NOT_SECURED))
CipherAlg = CIPHER_NONE;
-#endif // WPA_SUPPLICANT_SUPPORT //
else
{
//Header_802_11.FC.Wep = 1;
@@ -1467,12 +1433,7 @@ VOID STABuildCommon802_11Header(
IN PRTMP_ADAPTER pAd,
IN TX_BLK *pTxBlk)
{
-
HEADER_802_11 *pHeader_802_11;
-#ifdef QOS_DLS_SUPPORT
- BOOLEAN bDLSFrame = FALSE;
- INT DlsEntryIndex = 0;
-#endif // QOS_DLS_SUPPORT //
//
// MAKE A COMMON 802.11 HEADER
@@ -1489,19 +1450,6 @@ VOID STABuildCommon802_11Header(
pHeader_802_11->FC.Type = BTYPE_DATA;
pHeader_802_11->FC.SubType = ((TX_BLK_TEST_FLAG(pTxBlk, fTX_bWMM)) ? SUBTYPE_QDATA : SUBTYPE_DATA);
-#ifdef QOS_DLS_SUPPORT
- if (INFRA_ON(pAd))
- {
- // Check if the frame can be sent through DLS direct link interface
- // If packet can be sent through DLS, then force aggregation disable. (Hard to determine peer STA's capability)
- DlsEntryIndex = RTMPCheckDLSFrame(pAd, pTxBlk->pSrcBufHeader);
- if (DlsEntryIndex >= 0)
- bDLSFrame = TRUE;
- else
- bDLSFrame = FALSE;
- }
-#endif // QOS_DLS_SUPPORT //
-
if (pTxBlk->pMacEntry)
{
if (TX_BLK_TEST_FLAG(pTxBlk, fTX_bForceNonQoS))
@@ -1511,14 +1459,6 @@ VOID STABuildCommon802_11Header(
}
else
{
-#ifdef QOS_DLS_SUPPORT
- if (bDLSFrame)
- {
- pHeader_802_11->Sequence = pAd->StaCfg.DLSEntry[DlsEntryIndex].Sequence;
- pAd->StaCfg.DLSEntry[DlsEntryIndex].Sequence = (pAd->StaCfg.DLSEntry[DlsEntryIndex].Sequence+1) & MAXSEQ;
- }
- else
-#endif // QOS_DLS_SUPPORT //
{
pHeader_802_11->Sequence = pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority];
pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority] = (pTxBlk->pMacEntry->TxSeq[pTxBlk->UserPriority]+1) & MAXSEQ;
@@ -1538,16 +1478,6 @@ VOID STABuildCommon802_11Header(
{
if (INFRA_ON(pAd))
{
-#ifdef QOS_DLS_SUPPORT
- if (bDLSFrame)
- {
- COPY_MAC_ADDR(pHeader_802_11->Addr1, pTxBlk->pSrcBufHeader);
- COPY_MAC_ADDR(pHeader_802_11->Addr2, pAd->CurrentAddress);
- COPY_MAC_ADDR(pHeader_802_11->Addr3, pAd->CommonCfg.Bssid);
- pHeader_802_11->FC.ToDs = 0;
- }
- else
-#endif // QOS_DLS_SUPPORT //
{
COPY_MAC_ADDR(pHeader_802_11->Addr1, pAd->CommonCfg.Bssid);
COPY_MAC_ADDR(pHeader_802_11->Addr2, pAd->CurrentAddress);
@@ -1576,7 +1506,6 @@ 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,
@@ -1603,29 +1532,7 @@ VOID STABuildCache802_11Header(
pMacEntry->TxSeq[pTxBlk->UserPriority] = (pMacEntry->TxSeq[pTxBlk->UserPriority]+1) & MAXSEQ;
{
- // Check if the frame can be sent through DLS direct link interface
- // If packet can be sent through DLS, then force aggregation disable. (Hard to determine peer STA's capability)
-#ifdef QOS_DLS_SUPPORT
- BOOLEAN bDLSFrame = FALSE;
- INT DlsEntryIndex = 0;
-
- DlsEntryIndex = RTMPCheckDLSFrame(pAd, pTxBlk->pSrcBufHeader);
- if (DlsEntryIndex >= 0)
- bDLSFrame = TRUE;
- else
- bDLSFrame = FALSE;
-#endif // QOS_DLS_SUPPORT //
-
// The addr3 of normal packet send from DS is Dest Mac address.
-#ifdef QOS_DLS_SUPPORT
- if (bDLSFrame)
- {
- COPY_MAC_ADDR(pHeader80211->Addr1, pTxBlk->pSrcBufHeader);
- COPY_MAC_ADDR(pHeader80211->Addr3, pAd->CommonCfg.Bssid);
- pHeader80211->FC.ToDs = 0;
- }
- else
-#endif // QOS_DLS_SUPPORT //
if (ADHOC_ON(pAd))
COPY_MAC_ADDR(pHeader80211->Addr3, pAd->CommonCfg.Bssid);
else
@@ -1640,7 +1547,6 @@ 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,
@@ -1700,7 +1606,6 @@ 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)
@@ -1890,7 +1795,9 @@ VOID STA_AMPDU_Frame_Tx(
//
// Kick out Tx
//
+#ifdef RT2860
if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX))
+#endif
HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
pAd->RalinkCounters.KickTxCount++;
@@ -2021,10 +1928,11 @@ VOID STA_AMSDU_Frame_Tx(
//
// Kick out Tx
//
+#ifdef RT2860
if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX))
+#endif
HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
}
-#endif // DOT11_N_SUPPORT //
VOID STA_Legacy_Frame_Tx(
IN PRTMP_ADAPTER pAd,
@@ -2142,7 +2050,9 @@ VOID STA_Legacy_Frame_Tx(
//
// Kick out Tx
//
+#ifdef RT2860
if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX))
+#endif
HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
}
@@ -2253,7 +2163,9 @@ VOID STA_ARalink_Frame_Tx(
//
// Kick out Tx
//
+#ifdef RT2860
if (!RTMP_TEST_PSFLAG(pAd, fRTMP_PS_DISABLE_TX))
+#endif
HAL_KickOutTx(pAd, pTxBlk, pTxBlk->QueIdx);
}
@@ -2513,15 +2425,6 @@ NDIS_STATUS STAHardTransmit(
pPacket = QUEUE_ENTRY_TO_PACKET(pTxBlk->TxPacketList.Head);
-#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"));
- RELEASE_NDIS_PACKET(pAd, pPacket, NDIS_STATUS_FAILURE);
- return (NDIS_STATUS_FAILURE);
- }
-#endif // CARRIER_DETECTION_SUPPORT //
-
// ------------------------------------------------------------------
// STEP 1. WAKE UP PHY
// outgoing frame always wakeup PHY to prevent frame lost and
@@ -2531,7 +2434,12 @@ NDIS_STATUS STAHardTransmit(
if ((pAd->StaCfg.Psm == PWR_SAVE) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
{
DBGPRINT_RAW(RT_DEBUG_TRACE, ("AsicForceWakeup At HardTx\n"));
+#ifdef RT2860
AsicForceWakeup(pAd, FROM_TX);
+#endif
+#ifdef RT2870
+ AsicForceWakeup(pAd, TRUE);
+#endif
}
// It should not change PSM bit, when APSD turn on.
@@ -2546,14 +2454,12 @@ 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;
diff --git a/drivers/staging/rt2860/sta/sanity.c b/drivers/staging/rt2860/sta/sanity.c
index 239872464bed..7d530f601602 100644
--- a/drivers/staging/rt2860/sta/sanity.c
+++ b/drivers/staging/rt2860/sta/sanity.c
@@ -184,7 +184,6 @@ BOOLEAN PeerAssocRspSanity(
}
break;
-#ifdef DOT11_N_SUPPORT
case IE_ADD_HT:
case IE_ADD_HT2:
if (pEid->Len >= sizeof(ADD_HT_INFO_IE))
@@ -213,7 +212,6 @@ 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
diff --git a/drivers/staging/rt2860/sta/sync.c b/drivers/staging/rt2860/sta/sync.c
index 148037a79d51..87b5e49cec54 100644
--- a/drivers/staging/rt2860/sta/sync.c
+++ b/drivers/staging/rt2860/sta/sync.c
@@ -37,6 +37,7 @@
*/
#include "../rt_config.h"
+#ifdef RT2860
#define AC0_DEF_TXOP 0
#define AC1_DEF_TXOP 0
#define AC2_DEF_TXOP 94
@@ -71,6 +72,10 @@ VOID AdhocTurnOnQos(
}
AsicSetEdcaParm(pAd, &pAd->CommonCfg.APEdcaParm);
}
+#endif /* RT2860 */
+#ifdef RT2870
+#define ADHOC_ENTRY_BEACON_LOST_TIME (2*OS_HZ) // 2 sec
+#endif
/*
==========================================================================
@@ -141,7 +146,6 @@ VOID BeaconTimeout(
if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_HALT_IN_PROGRESS))
return;
-#ifdef DOT11_N_SUPPORT
if ((pAd->CommonCfg.BBPCurrentBW == BW_40)
)
{
@@ -154,7 +158,6 @@ 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);
@@ -228,6 +231,7 @@ VOID MlmeScanReqAction(
// Increase the scan retry counters.
pAd->StaCfg.ScanCnt++;
+#ifdef RT2860
if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) &&
(IDLE_ON(pAd)) &&
(pAd->StaCfg.bRadio == TRUE) &&
@@ -235,6 +239,7 @@ VOID MlmeScanReqAction(
{
RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE);
}
+#endif
// first check the parameter sanity
if (MlmeScanReqSanity(pAd,
@@ -347,6 +352,7 @@ VOID MlmeJoinReqAction(
DBGPRINT(RT_DEBUG_TRACE, ("SYNC - MlmeJoinReqAction(BSS #%ld)\n", pInfo->BssIdx));
+#ifdef RT2860
if ((OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_ADVANCE_POWER_SAVE_PCIE_DEVICE)) &&
(IDLE_ON(pAd)) &&
(pAd->StaCfg.bRadio == TRUE) &&
@@ -354,6 +360,7 @@ VOID MlmeJoinReqAction(
{
RT28xxPciAsicRadioOn(pAd, GUI_IDLE_POWER_SAVE);
}
+#endif
// reset all the timers
RTMPCancelTimer(&pAd->MlmeAux.ScanTimer, &TimerCancelled);
@@ -375,22 +382,6 @@ VOID MlmeJoinReqAction(
pAd->MlmeAux.Channel = pBss->Channel;
pAd->MlmeAux.CentralChannel = pBss->CentralChannel;
-#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) &&
- (pBss->bHasCountryIE == TRUE))
- {
- NdisMoveMemory(&pAd->CommonCfg.CountryCode[0], &pBss->CountryString[0], 2);
- if (pBss->CountryString[2] == 'I')
- pAd->CommonCfg.Geography = IDOR;
- else if (pBss->CountryString[2] == 'O')
- pAd->CommonCfg.Geography = ODOR;
- else
- pAd->CommonCfg.Geography = BOTH;
- BuildChannelListEx(pAd);
- }
-#endif // EXT_BUILD_CHANNEL_LIST //
-
// Let BBP register at 20MHz to do scan
RTMP_BBP_IO_READ8_BY_REG_ID(pAd, BBP_R4, &BBPValue);
BBPValue &= (~0x18);
@@ -407,9 +398,6 @@ VOID MlmeJoinReqAction(
if (((pAd->CommonCfg.bIEEE80211H == 1) &&
(pAd->MlmeAux.Channel > 14) &&
RadarChannelCheck(pAd, pAd->MlmeAux.Channel))
-#ifdef CARRIER_DETECTION_SUPPORT // Roger sync Carrier
- || (pAd->CommonCfg.CarrierDetect.Enable == TRUE)
-#endif // CARRIER_DETECTION_SUPPORT //
)
{
//
@@ -541,7 +529,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);
@@ -550,7 +538,6 @@ 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;
@@ -618,10 +605,9 @@ 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,
@@ -672,11 +658,9 @@ 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,
@@ -698,16 +682,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)
- {
- UCHAR RegClass;
- PeerBeaconAndProbeRspSanity2(pAd, Elem->Msg, Elem->MsgLen, &RegClass);
- 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);
@@ -755,9 +730,7 @@ VOID PeerBeaconAtJoinAction(
UCHAR HtCapabilityLen = 0, PreNHtCapabilityLen = 0;
UCHAR AddHtInfoLen;
UCHAR NewExtChannelOffset = 0xff;
-#ifdef DOT11_N_SUPPORT
UCHAR CentralChannel;
-#endif // DOT11_N_SUPPORT //
// Init Variable IE structure
pVIE = (PNDIS_802_11_VARIABLE_IEs) VarIE;
@@ -873,7 +846,7 @@ VOID PeerBeaconAtJoinAction(
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;
@@ -918,7 +891,6 @@ VOID PeerBeaconAtJoinAction(
}
else
-#endif // DOT11_N_SUPPORT //
{
// To prevent error, let legacy AP must have same CentralChannel and Channel.
if ((HtCapabilityLen == 0) && (PreNHtCapabilityLen == 0))
@@ -933,9 +905,7 @@ VOID PeerBeaconAtJoinAction(
// copy QOS related information
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));
@@ -952,15 +922,6 @@ VOID PeerBeaconAtJoinAction(
DBGPRINT(RT_DEBUG_TRACE, ("SYNC - after JOIN, SupRateLen=%d, ExtRateLen=%d\n",
pAd->MlmeAux.SupRateLen, pAd->MlmeAux.ExtRateLen));
-#ifdef LEAP_SUPPORT
- // Update CkipFlag
- pAd->StaCfg.CkipFlag = CkipFlag;
-
- // Keep TimeStamp for Re-Association used.
- if (LEAP_CCKM_ON(pAd) && (pAd->StaCfg.CCKMLinkUpFlag == TRUE))
- pAd->StaCfg.CCKMBeaconAtJoinTimeStamp = TimeStamp;
-#endif // LEAP_SUPPORT //
-
if (AironetCellPowerLimit != 0xFF)
{
//We need to change our TxPower for CCX 2.0 AP Control of Client Transmit Power
@@ -1018,14 +979,6 @@ VOID PeerBeacon(
UCHAR AddHtInfoLen;
UCHAR NewExtChannelOffset = 0xff;
-
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- {
- return;
- }
-#endif // RALINK_ATE //
-
if (!(INFRA_ON(pAd) || ADHOC_ON(pAd)
))
return;
@@ -1093,14 +1046,12 @@ 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.
@@ -1165,6 +1116,10 @@ VOID PeerBeacon(
// Add the safeguard against the mismatch of adhoc wep status
if (pAd->StaCfg.WepStatus != pAd->ScanTab.BssEntry[Bssidx].WepStatus)
{
+#ifdef RT30xx
+ 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));
+#endif
return;
}
@@ -1228,11 +1183,14 @@ VOID PeerBeacon(
pAd->CommonCfg.TxPowerPercentage = pAd->CommonCfg.TxPowerDefault;
}
+#ifdef RT2860
// at least one 11b peer joined. downgrade the MaxTxRate to 11Mbps
// after last 11b peer left for several seconds, we'll auto switch back to 11G rate
// in MlmePeriodicExec()
+#endif
if (ADHOC_ON(pAd) && (CAP_IS_IBSS_ON(CapabilityInfo)))
{
+#ifdef RT2860
BOOLEAN bRestart;
BOOLEAN bnRestart;
@@ -1260,7 +1218,7 @@ VOID PeerBeacon(
pAd->StaCfg.Last11bBeaconRxTime = Now;
break;
}
-#ifdef DOT11_N_SUPPORT
+
// Update Ht Phy.
if ((pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED))
{
@@ -1316,7 +1274,6 @@ VOID PeerBeacon(
}
else
-#endif // DOT11_N_SUPPORT //
{
RTMPZeroMemory(&pAd->MlmeAux.HtCapability, SIZE_HT_CAP_IE);
RTMPZeroMemory(&pAd->MlmeAux.AddHtInfo, SIZE_ADD_HT_INFO_IE);
@@ -1330,7 +1287,6 @@ 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);
@@ -1338,7 +1294,6 @@ 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))
@@ -1402,29 +1357,12 @@ VOID PeerBeacon(
}
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);
@@ -1434,10 +1372,82 @@ VOID PeerBeacon(
wireless_send_event(pAd->net_dev, SIOCGIWAP, &wrqu, NULL);
}
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
}
}
}
+#endif /* RT2860 */
+#ifdef RT2870
+ UCHAR MaxSupportedRateIn500Kbps = 0;
+ UCHAR idx;
+ MAC_TABLE_ENTRY *pEntry;
+
+ // supported rates array may not be sorted. sort it and find the maximum rate
+ for (idx=0; idx<SupRateLen; idx++)
+ {
+ if (MaxSupportedRateIn500Kbps < (SupRate[idx] & 0x7f))
+ MaxSupportedRateIn500Kbps = SupRate[idx] & 0x7f;
+ }
+
+ for (idx=0; idx<ExtRateLen; idx++)
+ {
+ if (MaxSupportedRateIn500Kbps < (ExtRate[idx] & 0x7f))
+ MaxSupportedRateIn500Kbps = ExtRate[idx] & 0x7f;
+ }
+
+ // look up the existing table
+ pEntry = MacTableLookup(pAd, Addr2);
+
+ // 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)) ||
+ (pEntry && ((pEntry->LastBeaconRxTime + ADHOC_ENTRY_BEACON_LOST_TIME) < Now)))
+ {
+ if (pEntry == NULL)
+ // Another adhoc joining, add to our MAC table.
+ pEntry = MacTableInsertEntry(pAd, Addr2, BSS0, FALSE);
+
+ if (StaAddMacTableEntry(pAd, pEntry, MaxSupportedRateIn500Kbps, &HtCapability, HtCapabilityLen, CapabilityInfo) == FALSE)
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("ADHOC - Add Entry failed.\n"));
+ return;
+ }
+
+ if (pEntry &&
+ (Elem->Wcid == RESERVED_WCID))
+ {
+ idx = pAd->StaCfg.DefaultKeyId;
+ RT28XX_STA_SECURITY_INFO_ADD(pAd, BSS0, idx, pEntry);
+ }
+ }
+
+ if (pEntry && pEntry->ValidAsCLI)
+ pEntry->LastBeaconRxTime = Now;
+
+ // 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"));
+ }
+#endif /* RT2870 */
}
if (INFRA_ON(pAd))
@@ -1476,7 +1486,6 @@ 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) ||
@@ -1493,7 +1502,6 @@ 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))
@@ -1528,10 +1536,12 @@ VOID PeerBeacon(
// 5. otherwise, put PHY back to sleep to save battery.
if (MessageToMe)
{
+#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);
}
+#endif
if (pAd->CommonCfg.bAPSDCapable && pAd->CommonCfg.APEdcaParm.bAPSDCapable &&
pAd->CommonCfg.bAPSDAC_BE && pAd->CommonCfg.bAPSDAC_BK && pAd->CommonCfg.bAPSDAC_VI && pAd->CommonCfg.bAPSDAC_VO)
{
@@ -1542,10 +1552,12 @@ VOID PeerBeacon(
}
else if (BcastFlag && (DtimCount == 0) && OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_RECEIVE_DTIM))
{
+#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);
}
+#endif
}
else if ((pAd->TxSwQueue[QID_AC_BK].Number != 0) ||
(pAd->TxSwQueue[QID_AC_BE].Number != 0) ||
@@ -1559,10 +1571,12 @@ 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?
+#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);
}
+#endif
}
else
{
@@ -1577,10 +1591,14 @@ VOID PeerBeacon(
if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
{
+#ifdef RT2860
// Set a flag to go to sleep . Then after parse this RxDoneInterrupt, will go to sleep mode.
RTMP_SET_PSFLAG(pAd, fRTMP_PS_GO_TO_SLEEP_NOW);
pAd->ThisTbttNumToNextWakeUp = TbttNumToNextWakeUp;
- //AsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp);
+#endif
+#ifdef RT2870
+ AsicSleepThenAutoWakeup(pAd, TbttNumToNextWakeUp);
+#endif
}
}
}
@@ -1603,9 +1621,7 @@ VOID PeerProbeReqAction(
UCHAR Addr2[MAC_ADDR_LEN];
CHAR Ssid[MAX_LEN_OF_SSID];
UCHAR SsidLen;
-#ifdef DOT11_N_SUPPORT
UCHAR HtLen, AddHtLen, NewExtLen;
-#endif // DOT11_N_SUPPORT //
HEADER_802_11 ProbeRspHdr;
NDIS_STATUS NStatus;
PUCHAR pOutBuffer = NULL;
@@ -1678,7 +1694,7 @@ VOID PeerProbeReqAction(
END_OF_ARGS);
FrameLen += tmp;
}
-#ifdef DOT11_N_SUPPORT
+
if (pAd->CommonCfg.PhyMode >= PHY_11ABGN_MIXED)
{
ULONG TmpLen;
@@ -1711,7 +1727,7 @@ VOID PeerProbeReqAction(
}
FrameLen += TmpLen;
}
-#endif // DOT11_N_SUPPORT //
+
MiniportMMRequest(pAd, 0, pOutBuffer, FrameLen);
MlmeFreeMemory(pAd, pOutBuffer);
}
@@ -1811,14 +1827,6 @@ VOID InvalidStateWhenStart(
VOID EnqueuePsPoll(
IN PRTMP_ADAPTER pAd)
{
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- {
- return;
- }
-#endif // RALINK_ATE //
-
-
if (pAd->StaCfg.WindowsPowerMode == Ndis802_11PowerModeLegacy_PSP)
pAd->PsPollFrame.FC.PwrMgmt = PWR_SAVE;
MiniportMMRequest(pAd, 0, (PUCHAR)&pAd->PsPollFrame, sizeof(PSPOLL_FRAME));
@@ -1861,88 +1869,6 @@ VOID EnqueueProbeRequest(
}
-#ifdef DOT11_N_SUPPORT
-#ifdef DOT11N_DRAFT3
-VOID BuildEffectedChannelList(
- IN PRTMP_ADAPTER pAd)
-{
- UCHAR EChannel[11];
- UCHAR i, j, k;
- UCHAR UpperChannel = 0, LowerChannel = 0;
-
- RTMPZeroMemory(EChannel, 11);
- i = 0;
- // Find upper channel and lower channel.
- if (pAd->CommonCfg.CentralChannel < pAd->CommonCfg.Channel)
- {
- UpperChannel = pAd->CommonCfg.Channel;
- LowerChannel = pAd->CommonCfg.CentralChannel;
- }
- else if (pAd->CommonCfg.CentralChannel > pAd->CommonCfg.Channel)
- {
- UpperChannel = pAd->CommonCfg.CentralChannel;
- LowerChannel = pAd->CommonCfg.Channel;
- }
- else
- {
- return;
- }
-
- // Record channels that is below lower channel..
- if (LowerChannel > 1)
- {
- EChannel[0] = LowerChannel - 1;
- i = 1;
- if (LowerChannel > 2)
- {
- EChannel[1] = LowerChannel - 2;
- i = 2;
- if (LowerChannel > 3)
- {
- EChannel[2] = LowerChannel - 3;
- i = 3;
- }
- }
- }
- // Record channels that is between lower channel and upper channel.
- for (k = LowerChannel;k < UpperChannel;k++)
- {
- EChannel[i] = k;
- i++;
- }
- // Record channels that is above upper channel..
- if (LowerChannel < 11)
- {
- EChannel[i] = UpperChannel + 1;
- i++;
- if (LowerChannel < 10)
- {
- EChannel[i] = LowerChannel + 2;
- i++;
- if (LowerChannel < 9)
- {
- EChannel[i] = LowerChannel + 3;
- i++;
- }
- }
- }
- //
- for (j = 0;j < i;j++)
- {
- for (k = 0;k < pAd->ChannelListNum;k++)
- {
- if (pAd->ChannelList[k].Channel == EChannel[j])
- {
- pAd->ChannelList[k].bEffectedChannel = TRUE;
- DBGPRINT(RT_DEBUG_TRACE,(" EffectedChannel( =%d)\n", EChannel[j]));
- break;
- }
- }
- }
-}
-#endif // DOT11N_DRAFT3 //
-#endif // DOT11_N_SUPPORT //
-
BOOLEAN ScanRunning(
IN PRTMP_ADAPTER pAd)
{
diff --git a/drivers/staging/rt2860/sta/wpa.c b/drivers/staging/rt2860/sta/wpa.c
index 2609d845fd5c..58274364d78c 100644
--- a/drivers/staging/rt2860/sta/wpa.c
+++ b/drivers/staging/rt2860/sta/wpa.c
@@ -1384,10 +1384,12 @@ VOID WpaGroupMsg1Action(
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_TKIP;
else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled)
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_AES;
+#ifndef RT30xx
else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled)
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP64;
else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled)
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP128;
+#endif
//hex_dump("Group Key :", pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, LEN_TKIP_EK);
}
@@ -1764,7 +1766,12 @@ BOOLEAN ParseKeyData(
// Get GTK length - refer to IEEE 802.11i-2004 p.82
GTKLEN = pKDE->Len -6;
+#ifdef RT30xx
+ if (GTKLEN < LEN_AES_KEY)
+#endif
+#ifndef RT30xx
if (GTKLEN < MIN_LEN_OF_GTK)
+#endif
{
DBGPRINT(RT_DEBUG_ERROR, ("ERROR: GTK Key length is too short (%d) \n", GTKLEN));
return FALSE;
@@ -1790,10 +1797,12 @@ BOOLEAN ParseKeyData(
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_TKIP;
else if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption3Enabled)
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_AES;
+#ifndef RT30xx
else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled)
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP64;
else if (pAd->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled)
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].CipherAlg = CIPHER_WEP128;
+#endif
return TRUE;
@@ -1915,8 +1924,6 @@ VOID RTMPReportMicError(
}
}
-
-#ifdef WPA_SUPPLICANT_SUPPORT
#define LENGTH_EAP_H 4
// If the received frame is EAP-Packet ,find out its EAP-Code (Request(0x01), Response(0x02), Success(0x03), Failure(0x04)).
INT WpaCheckEapCode(
@@ -1957,7 +1964,6 @@ VOID WpaSendMicFailureToWpaSupplicant(
return;
}
-#endif // WPA_SUPPLICANT_SUPPORT //
VOID WpaMicFailureReportFrame(
IN PRTMP_ADAPTER pAd,
diff --git a/drivers/staging/rt2860/sta_ioctl.c b/drivers/staging/rt2860/sta_ioctl.c
index c5452f152a21..eb0109ad2fc0 100644
--- a/drivers/staging/rt2860/sta_ioctl.c
+++ b/drivers/staging/rt2860/sta_ioctl.c
@@ -49,10 +49,6 @@ extern ULONG RTDebugLevel;
#define GROUP_KEY_NO 4
-#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)
-
extern UCHAR CipherWpa2Template[];
extern UCHAR CipherWpaPskTkip[];
extern UCHAR CipherWpaPskTkipLen;
@@ -89,12 +85,12 @@ struct iw_priv_args privtab[] = {
0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_off" },
{ RAIO_ON,
0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "radio_on" },
-#ifdef QOS_DLS_SUPPORT
- { SHOW_DLS_ENTRY_INFO,
- 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "dlsentryinfo" },
-#endif // QOS_DLS_SUPPORT //
{ SHOW_CFG_VALUE,
IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "show" },
+#if !defined(RT2860) && !defined(RT30xx)
+ { SHOW_ADHOC_ENTRY_INFO,
+ 0, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, "adhocEntry" },
+#endif
/* --- sub-ioctls relations --- */
#ifdef DBG
@@ -104,6 +100,11 @@ struct iw_priv_args privtab[] = {
{ RTPRIV_IOCTL_MAC,
IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024,
"mac"},
+#ifdef RT30xx
+{ RTPRIV_IOCTL_RF,
+ IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK, IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_MASK,
+ "rf"},
+#endif // RT30xx //
{ RTPRIV_IOCTL_E2P,
IW_PRIV_TYPE_CHAR | 1024, IW_PRIV_TYPE_CHAR | 1024,
"e2p"},
@@ -168,16 +169,16 @@ INT Set_PSMode_Proc(
IN PRTMP_ADAPTER pAdapter,
IN PUCHAR arg);
-#ifdef WPA_SUPPLICANT_SUPPORT
INT Set_Wpa_Support(
IN PRTMP_ADAPTER pAd,
IN PUCHAR arg);
-#endif // WPA_SUPPLICANT_SUPPORT //
#ifdef DBG
+#if !defined(RT2860) && !defined(RT30xx)
VOID RTMPIoctlBBP(
IN PRTMP_ADAPTER pAdapter,
IN struct iwreq *wrq);
+#endif
VOID RTMPIoctlMAC(
IN PRTMP_ADAPTER pAdapter,
@@ -186,6 +187,12 @@ VOID RTMPIoctlMAC(
VOID RTMPIoctlE2PROM(
IN PRTMP_ADAPTER pAdapter,
IN struct iwreq *wrq);
+
+#ifdef RT30xx
+VOID RTMPIoctlRF(
+ IN PRTMP_ADAPTER pAdapter,
+ IN struct iwreq *wrq);
+#endif // RT30xx //
#endif // DBG //
@@ -197,11 +204,9 @@ 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,
@@ -211,17 +216,11 @@ INT Set_ShortRetryLimit_Proc(
IN PRTMP_ADAPTER pAdapter,
IN PUCHAR arg);
-#ifdef EXT_BUILD_CHANNEL_LIST
-INT Set_Ieee80211dClientMode_Proc(
- IN PRTMP_ADAPTER pAdapter,
- 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 //
+#if !defined(RT2860) && !defined(RT30xx)
+INT Show_Adhoc_MacTable_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PCHAR extra);
+#endif
static struct {
CHAR *name;
@@ -239,7 +238,6 @@ 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},
@@ -253,8 +251,6 @@ 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},
#endif
@@ -277,68 +273,19 @@ static struct {
#ifdef DBG
{"Debug", Set_Debug_Proc},
#endif
-
-#ifdef RALINK_ATE
- {"ATE", Set_ATE_Proc},
- {"ATEDA", Set_ATE_DA_Proc},
- {"ATESA", Set_ATE_SA_Proc},
- {"ATEBSSID", Set_ATE_BSSID_Proc},
- {"ATECHANNEL", Set_ATE_CHANNEL_Proc},
- {"ATETXPOW0", Set_ATE_TX_POWER0_Proc},
- {"ATETXPOW1", Set_ATE_TX_POWER1_Proc},
- {"ATETXANT", Set_ATE_TX_Antenna_Proc},
- {"ATERXANT", Set_ATE_RX_Antenna_Proc},
- {"ATETXFREQOFFSET", Set_ATE_TX_FREQOFFSET_Proc},
- {"ATETXBW", Set_ATE_TX_BW_Proc},
- {"ATETXLEN", Set_ATE_TX_LENGTH_Proc},
- {"ATETXCNT", Set_ATE_TX_COUNT_Proc},
- {"ATETXMCS", Set_ATE_TX_MCS_Proc},
- {"ATETXMODE", Set_ATE_TX_MODE_Proc},
- {"ATETXGI", Set_ATE_TX_GI_Proc},
- {"ATERXFER", Set_ATE_RX_FER_Proc},
- {"ATERRF", Set_ATE_Read_RF_Proc},
- {"ATEWRF1", Set_ATE_Write_RF1_Proc},
- {"ATEWRF2", Set_ATE_Write_RF2_Proc},
- {"ATEWRF3", Set_ATE_Write_RF3_Proc},
- {"ATEWRF4", Set_ATE_Write_RF4_Proc},
- {"ATELDE2P", Set_ATE_Load_E2P_Proc},
- {"ATERE2P", Set_ATE_Read_E2P_Proc},
- {"ATESHOW", Set_ATE_Show_Proc},
- {"ATEHELP", Set_ATE_Help_Proc},
-
-#ifdef RALINK_28xx_QA
- {"TxStop", Set_TxStop_Proc},
- {"RxStop", Set_RxStop_Proc},
-#endif // RALINK_28xx_QA //
-#endif // RALINK_ATE //
-
-#ifdef WPA_SUPPLICANT_SUPPORT
{"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},
-#endif // QOS_DLS_SUPPORT //
{"LongRetry", Set_LongRetryLimit_Proc},
{"ShortRetry", Set_ShortRetryLimit_Proc},
-#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 //
-
+//2008/09/11:KH add to support efuse<--
+#ifdef RT30xx
+ {"efuseFreeNumber", set_eFuseGetFreeBlockCount_Proc},
+ {"efuseDump", set_eFusedump_Proc},
+ {"efuseLoadFromBin", set_eFuseLoadFromBin_Proc},
+#endif // RT30xx //
+//2008/09/11:KH add to support efuse-->
{NULL,}
};
@@ -352,6 +299,7 @@ VOID RTMPAddKey(
DBGPRINT(RT_DEBUG_TRACE, ("RTMPAddKey ------>\n"));
+#ifdef RT2860
RTMP_CLEAR_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP);
if (RTMP_TEST_PSFLAG(pAd, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND))
{
@@ -365,6 +313,7 @@ VOID RTMPAddKey(
RTMPusecDelay(6000);
pAd->bPCIclkOff = FALSE;
}
+#endif
if (pAd->StaCfg.AuthMode >= Ndis802_11AuthModeWPA)
{
@@ -380,14 +329,13 @@ VOID RTMPAddKey(
NdisZeroMemory(&pAd->SharedKey[BSS0][0], sizeof(CIPHER_KEY));
pAd->SharedKey[BSS0][0].KeyLen = LEN_TKIP_EK;
NdisMoveMemory(pAd->SharedKey[BSS0][0].Key, pKey->KeyMaterial, LEN_TKIP_EK);
-#ifdef WPA_SUPPLICANT_SUPPORT
+
if (pAd->StaCfg.PairCipher == Ndis802_11Encryption2Enabled)
{
NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK);
NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK);
}
else
-#endif // WPA_SUPPLICANT_SUPPORT //
{
NdisMoveMemory(pAd->SharedKey[BSS0][0].TxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK);
NdisMoveMemory(pAd->SharedKey[BSS0][0].RxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK);
@@ -440,14 +388,13 @@ VOID RTMPAddKey(
NdisZeroMemory(&pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId], sizeof(CIPHER_KEY));
pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].KeyLen = LEN_TKIP_EK;
NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].Key, pKey->KeyMaterial, LEN_TKIP_EK);
-#ifdef WPA_SUPPLICANT_SUPPORT
+
if (pAd->StaCfg.GroupCipher == Ndis802_11Encryption2Enabled)
{
NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK);
NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK);
}
else
-#endif // WPA_SUPPLICANT_SUPPORT //
{
NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].TxMic, pKey->KeyMaterial + LEN_TKIP_EK, LEN_TKIP_TXMICK);
NdisMoveMemory(pAd->SharedKey[BSS0][pAd->StaCfg.DefaultKeyId].RxMic, pKey->KeyMaterial + LEN_TKIP_EK + LEN_TKIP_TXMICK, LEN_TKIP_RXMICK);
@@ -559,8 +506,10 @@ VOID RTMPAddKey(
}
}
end:
+#ifdef RT2860
RTMP_SET_PSFLAG(pAd, fRTMP_PS_CAN_GO_SLEEP);
DBGPRINT(RT_DEBUG_INFO, ("<------ RTMPAddKey\n"));
+#endif
return;
}
@@ -582,8 +531,12 @@ rt_ioctl_giwname(struct net_device *dev,
char *name, char *extra)
{
// PRTMP_ADAPTER pAdapter = dev->ml_priv;
-
+#ifdef RT2860
strncpy(name, "RT2860 Wireless", IFNAMSIZ);
+#endif
+#ifdef RT2870
+ strncpy(name, "RT2870 Wireless", IFNAMSIZ);
+#endif // RT2870 //
return 0;
}
@@ -625,7 +578,12 @@ int rt_ioctl_giwfreq(struct net_device *dev,
struct iw_freq *freq, char *extra)
{
VIRTUAL_ADAPTER *pVirtualAd = NULL;
+#ifndef RT30xx
PRTMP_ADAPTER pAdapter = NULL;
+#endif
+#ifdef RT30xx
+ PRTMP_ADAPTER pAdapter;
+#endif
UCHAR ch;
ULONG m;
@@ -636,7 +594,9 @@ int rt_ioctl_giwfreq(struct net_device *dev,
else
{
pVirtualAd = dev->ml_priv;
+#ifndef RT30xx
if (pVirtualAd && pVirtualAd->RtmpDev)
+#endif
pAdapter = pVirtualAd->RtmpDev->ml_priv;
}
@@ -696,6 +656,7 @@ int rt_ioctl_giwmode(struct net_device *dev,
struct iw_request_info *info,
__u32 *mode, char *extra)
{
+#ifndef RT30xx
PRTMP_ADAPTER pAdapter = NULL;
VIRTUAL_ADAPTER *pVirtualAd = NULL;
@@ -716,6 +677,10 @@ int rt_ioctl_giwmode(struct net_device *dev,
So the net_dev->ml_priv will be NULL in 2rd open */
return -ENETDOWN;
}
+#endif
+#ifdef RT30xx
+ PRTMP_ADAPTER pAdapter = dev->ml_priv;
+#endif
if (ADHOC_ON(pAdapter))
*mode = IW_MODE_ADHOC;
@@ -759,12 +724,18 @@ int rt_ioctl_giwrange(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *extra)
{
+#ifndef RT30xx
PRTMP_ADAPTER pAdapter = NULL;
VIRTUAL_ADAPTER *pVirtualAd = NULL;
+#endif
+#ifdef RT30xx
+ PRTMP_ADAPTER pAdapter = dev->ml_priv;
+#endif
struct iw_range *range = (struct iw_range *) extra;
u16 val;
int i;
+#ifndef RT30xx
if (dev->priv_flags == INT_MAIN)
{
pAdapter = dev->ml_priv;
@@ -782,6 +753,7 @@ int rt_ioctl_giwrange(struct net_device *dev,
So the net_dev->ml_priv will be NULL in 2rd open */
return -ENETDOWN;
}
+#endif
DBGPRINT(RT_DEBUG_TRACE ,("===>rt_ioctl_giwrange\n"));
data->length = sizeof(struct iw_range);
@@ -901,6 +873,7 @@ int rt_ioctl_giwap(struct net_device *dev,
struct iw_request_info *info,
struct sockaddr *ap_addr, char *extra)
{
+#ifndef RT30xx
PRTMP_ADAPTER pAdapter = NULL;
VIRTUAL_ADAPTER *pVirtualAd = NULL;
@@ -921,20 +894,22 @@ int rt_ioctl_giwap(struct net_device *dev,
So the net_dev->ml_priv will be NULL in 2rd open */
return -ENETDOWN;
}
+#endif
+#ifdef RT30xx
+ PRTMP_ADAPTER pAdapter = dev->ml_priv;
+#endif
if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter))
{
ap_addr->sa_family = ARPHRD_ETHER;
memcpy(ap_addr->sa_data, &pAdapter->CommonCfg.Bssid, ETH_ALEN);
}
-#ifdef WPA_SUPPLICANT_SUPPORT
// Add for RT2870
else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
{
ap_addr->sa_family = ARPHRD_ETHER;
memcpy(ap_addr->sa_data, &pAdapter->MlmeAux.Bssid, ETH_ALEN);
}
-#endif // WPA_SUPPLICANT_SUPPORT //
else
{
DBGPRINT(RT_DEBUG_TRACE, ("IOCTL::SIOCGIWAP(=EMPTY)\n"));
@@ -1041,7 +1016,7 @@ int rt_ioctl_siwscan(struct net_device *dev,
DBGPRINT(RT_DEBUG_TRACE, ("!!! Driver is in Monitor Mode now !!!\n"));
return -EINVAL;
}
-
+#ifdef RT2860
if ((pAdapter->OpMode == OPMODE_STA) && (IDLE_ON(pAdapter))
&& (pAdapter->StaCfg.bRadio == TRUE)
&& (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_IDLE_RADIO_OFF)))
@@ -1051,13 +1026,11 @@ int rt_ioctl_siwscan(struct net_device *dev,
// Check if still radio off.
else if (pAdapter->bPCIclkOff == TRUE)
return 0;
-
-#ifdef WPA_SUPPLICANT_SUPPORT
+#endif
if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE)
{
pAdapter->StaCfg.WpaSupplicantScanCount++;
}
-#endif // WPA_SUPPLICANT_SUPPORT //
pAdapter->StaCfg.bScanReqIsFromWebUI = TRUE;
if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
@@ -1065,7 +1038,6 @@ int rt_ioctl_siwscan(struct net_device *dev,
do{
Now = jiffies;
-#ifdef WPA_SUPPLICANT_SUPPORT
if ((pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE) &&
(pAdapter->StaCfg.WpaSupplicantScanCount > 3))
{
@@ -1073,7 +1045,6 @@ int rt_ioctl_siwscan(struct net_device *dev,
Status = NDIS_STATUS_SUCCESS;
break;
}
-#endif // WPA_SUPPLICANT_SUPPORT //
if ((OPSTATUS_TEST_FLAG(pAdapter, fOP_STATUS_MEDIA_STATE_CONNECTED)) &&
((pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPA) ||
@@ -1133,13 +1104,10 @@ int rt_ioctl_giwscan(struct net_device *dev,
return -EAGAIN;
}
-
-#ifdef WPA_SUPPLICANT_SUPPORT
if (pAdapter->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE)
{
pAdapter->StaCfg.WpaSupplicantScanCount = 0;
}
-#endif // WPA_SUPPLICANT_SUPPORT //
if (pAdapter->ScanTab.BssNr == 0)
{
@@ -1175,7 +1143,88 @@ int rt_ioctl_giwscan(struct net_device *dev,
memcpy(iwe.u.ap_addr.sa_data, &pAdapter->ScanTab.BssEntry[i].Bssid, ETH_ALEN);
previous_ev = current_ev;
- current_ev = IWE_STREAM_ADD_EVENT(info, 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);
+#ifdef RT30xx
+ if (current_ev == previous_ev)
+#if WIRELESS_EXT >= 17
+ return -E2BIG;
+#else
+ break;
+#endif
+
+ /*
+ Protocol:
+ it will show scanned AP's WirelessMode .
+ it might be
+ 802.11a
+ 802.11a/n
+ 802.11g/n
+ 802.11b/g/n
+ 802.11g
+ 802.11b/g
+ */
+ memset(&iwe, 0, sizeof(iwe));
+ iwe.cmd = SIOCGIWNAME;
+
+
+ {
+ PBSS_ENTRY pBssEntry=&pAdapter->ScanTab.BssEntry[i];
+ BOOLEAN isGonly=FALSE;
+ int rateCnt=0;
+
+ if (pBssEntry->Channel>14)
+ {
+ if (pBssEntry->HtCapabilityLen!=0)
+ strcpy(iwe.u.name,"802.11a/n");
+ else
+ strcpy(iwe.u.name,"802.11a");
+ }
+ else
+ {
+ /*
+ if one of non B mode rate is set supported rate . it mean G only.
+ */
+ for (rateCnt=0;rateCnt<pBssEntry->SupRateLen;rateCnt++)
+ {
+ /*
+ 6Mbps(140) 9Mbps(146) and >=12Mbps(152) are supported rate , it mean G only.
+ */
+ if (pBssEntry->SupRate[rateCnt]==140 || pBssEntry->SupRate[rateCnt]==146 || pBssEntry->SupRate[rateCnt]>=152)
+ isGonly=TRUE;
+ }
+
+ for (rateCnt=0;rateCnt<pBssEntry->ExtRateLen;rateCnt++)
+ {
+ if (pBssEntry->ExtRate[rateCnt]==140 || pBssEntry->ExtRate[rateCnt]==146 || pBssEntry->ExtRate[rateCnt]>=152)
+ isGonly=TRUE;
+ }
+
+
+ if (pBssEntry->HtCapabilityLen!=0)
+ {
+ if (isGonly==TRUE)
+ strcpy(iwe.u.name,"802.11g/n");
+ else
+ strcpy(iwe.u.name,"802.11b/g/n");
+ }
+ else
+ {
+ if (isGonly==TRUE)
+ strcpy(iwe.u.name,"802.11g");
+ else
+ {
+ if (pBssEntry->SupRateLen==4 && pBssEntry->ExtRateLen==0)
+ strcpy(iwe.u.name,"802.11b");
+ else
+ strcpy(iwe.u.name,"802.11b/g");
+ }
+ }
+ }
+ }
+
+ previous_ev = current_ev;
+ current_ev = iwe_stream_add_event(info, current_ev, end_buf, &iwe, IW_EV_ADDR_LEN);
+#endif /* RT30xx */
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1191,7 +1240,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.u.data.flags = 1;
previous_ev = current_ev;
- current_ev = IWE_STREAM_ADD_POINT(info, 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;
@@ -1218,7 +1267,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(info, 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;
@@ -1238,7 +1287,7 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.u.freq.i = 0;
previous_ev = current_ev;
- current_ev = IWE_STREAM_ADD_EVENT(info, 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;
@@ -1253,7 +1302,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(info, 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;
@@ -1271,7 +1320,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(info, 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;
@@ -1299,7 +1348,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(info, current_ev,
+ current_val = iwe_stream_add_value(info, current_ev,
current_val, end_buf, &iwe,
IW_EV_PARAM_LEN);
@@ -1323,7 +1372,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(info, 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;
@@ -1341,7 +1390,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(info, 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;
@@ -1360,9 +1409,9 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.u.data.length = (pAdapter->ScanTab.BssEntry[i].WpaIE.IELen * 2) + 7;
NdisMoveMemory(custom, "wpa_ie=", 7);
for (idx = 0; idx < pAdapter->ScanTab.BssEntry[i].WpaIE.IELen; idx++)
- sprintf(custom, "%s%02x", custom, pAdapter->ScanTab.BssEntry[i].WpaIE.IE[idx]);
+ sprintf(custom + strlen(custom), "%02x", pAdapter->ScanTab.BssEntry[i].WpaIE.IE[idx]);
previous_ev = current_ev;
- current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom);
+ current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, custom);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1380,9 +1429,9 @@ int rt_ioctl_giwscan(struct net_device *dev,
iwe.u.data.length = (pAdapter->ScanTab.BssEntry[i].RsnIE.IELen * 2) + 7;
NdisMoveMemory(custom, "rsn_ie=", 7);
for (idx = 0; idx < pAdapter->ScanTab.BssEntry[i].RsnIE.IELen; idx++)
- sprintf(custom, "%s%02x", custom, pAdapter->ScanTab.BssEntry[i].RsnIE.IE[idx]);
+ sprintf(custom + strlen(custom), "%02x", pAdapter->ScanTab.BssEntry[i].RsnIE.IE[idx]);
previous_ev = current_ev;
- current_ev = IWE_STREAM_ADD_POINT(info, current_ev, end_buf, &iwe, custom);
+ current_ev = iwe_stream_add_point(current_ev, end_buf, &iwe, custom);
if (current_ev == previous_ev)
#if WIRELESS_EXT >= 17
return -E2BIG;
@@ -1445,6 +1494,7 @@ int rt_ioctl_giwessid(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *essid)
{
+#ifndef RT30xx
PRTMP_ADAPTER pAdapter = NULL;
VIRTUAL_ADAPTER *pVirtualAd = NULL;
@@ -1465,6 +1515,10 @@ int rt_ioctl_giwessid(struct net_device *dev,
So the net_dev->ml_priv will be NULL in 2rd open */
return -ENETDOWN;
}
+#endif
+#ifdef RT30xx
+ PRTMP_ADAPTER pAdapter = dev->ml_priv;
+#endif
data->flags = 1;
if (MONITOR_ON(pAdapter))
@@ -1479,6 +1533,14 @@ int rt_ioctl_giwessid(struct net_device *dev,
data->length = pAdapter->CommonCfg.SsidLen;
memcpy(essid, pAdapter->CommonCfg.Ssid, pAdapter->CommonCfg.SsidLen);
}
+#ifdef RT2870
+ // Add for RT2870
+ else if (pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE)
+ {
+ data->length = pAdapter->CommonCfg.SsidLen;
+ memcpy(essid, pAdapter->CommonCfg.Ssid, pAdapter->CommonCfg.SsidLen);
+ }
+#endif // RT2870 //
else
{//the ANY ssid was specified
data->length = 0;
@@ -1516,6 +1578,7 @@ int rt_ioctl_giwnickn(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *data, char *nickname)
{
+#ifndef RT30xx
PRTMP_ADAPTER pAdapter = NULL;
VIRTUAL_ADAPTER *pVirtualAd = NULL;
@@ -1536,6 +1599,10 @@ int rt_ioctl_giwnickn(struct net_device *dev,
So the net_dev->ml_priv will be NULL in 2rd open */
return -ENETDOWN;
}
+#endif
+#ifdef RT30xx
+ PRTMP_ADAPTER pAdapter = dev->ml_priv;
+#endif
if (data->length > strlen(pAdapter->nickname) + 1)
data->length = strlen(pAdapter->nickname) + 1;
@@ -1579,6 +1646,7 @@ int rt_ioctl_giwrts(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rts, char *extra)
{
+#ifndef RT30xx
PRTMP_ADAPTER pAdapter = NULL;
VIRTUAL_ADAPTER *pVirtualAd = NULL;
@@ -1599,6 +1667,10 @@ int rt_ioctl_giwrts(struct net_device *dev,
So the net_dev->ml_priv will be NULL in 2rd open */
return -ENETDOWN;
}
+#endif
+#ifdef RT30xx
+ PRTMP_ADAPTER pAdapter = dev->ml_priv;
+#endif
//check if the interface is down
if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
@@ -1645,6 +1717,7 @@ int rt_ioctl_giwfrag(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *frag, char *extra)
{
+#ifndef RT30xx
PRTMP_ADAPTER pAdapter = NULL;
VIRTUAL_ADAPTER *pVirtualAd = NULL;
@@ -1665,6 +1738,10 @@ int rt_ioctl_giwfrag(struct net_device *dev,
So the net_dev->ml_priv will be NULL in 2rd open */
return -ENETDOWN;
}
+#endif
+#ifdef RT30xx
+ PRTMP_ADAPTER pAdapter = dev->ml_priv;
+#endif
//check if the interface is down
if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
@@ -1705,8 +1782,13 @@ int rt_ioctl_siwencode(struct net_device *dev,
pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen;
goto done;
}
+#ifndef RT30xx
else if ((erq->length == 0) &&
(erq->flags & IW_ENCODE_RESTRICTED || erq->flags & IW_ENCODE_OPEN))
+#endif
+#ifdef RT30xx
+ else if (erq->flags & IW_ENCODE_RESTRICTED || erq->flags & IW_ENCODE_OPEN)
+#endif
{
STA_PORT_SECURED(pAdapter);
pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled;
@@ -1717,7 +1799,9 @@ int rt_ioctl_siwencode(struct net_device *dev,
pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeShared;
else
pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeOpen;
+#ifndef RT30xx
goto done;
+#endif
}
if (erq->length > 0)
@@ -1736,6 +1820,12 @@ int rt_ioctl_siwencode(struct net_device *dev,
//Using default key
keyIdx = pAdapter->StaCfg.DefaultKeyId;
}
+#ifdef RT30xx
+ else
+ {
+ pAdapter->StaCfg.DefaultKeyId=keyIdx;
+ }
+#endif
NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, 16);
@@ -1787,7 +1877,11 @@ rt_ioctl_giwencode(struct net_device *dev,
struct iw_request_info *info,
struct iw_point *erq, char *key)
{
+#ifdef RT30xx
+ PRTMP_ADAPTER pAdapter = dev->ml_priv;
+#endif
int kid;
+#ifndef RT30xx
PRTMP_ADAPTER pAdapter = NULL;
VIRTUAL_ADAPTER *pVirtualAd = NULL;
@@ -1808,6 +1902,7 @@ rt_ioctl_giwencode(struct net_device *dev,
So the net_dev->ml_priv will be NULL in 2rd open */
return -ENETDOWN;
}
+#endif
//check if the interface is down
if(!RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_INTERRUPT_IN_USE))
@@ -1952,14 +2047,6 @@ rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info,
memset(extra, 0x00, IW_PRIV_SIZE_MASK);
sprintf(extra, "\n\n");
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- {
- sprintf(extra+strlen(extra), "Tx success = %ld\n", (ULONG)pAd->ate.TxDoneCount);
- //sprintf(extra+strlen(extra), "Tx success without retry = %ld\n", (ULONG)pAd->ate.TxDoneCount);
- }
- else
-#endif // RALINK_ATE //
{
sprintf(extra+strlen(extra), "Tx success = %ld\n", (ULONG)pAd->WlanCounters.TransmittedFragmentCount.QuadPart);
sprintf(extra+strlen(extra), "Tx success without retry = %ld\n", (ULONG)pAd->WlanCounters.TransmittedFragmentCount.QuadPart - (ULONG)pAd->WlanCounters.RetryCount.QuadPart);
@@ -1975,31 +2062,12 @@ rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info,
sprintf(extra+strlen(extra), "Rx duplicate frame = %ld\n", (ULONG)pAd->WlanCounters.FrameDuplicateCount.QuadPart);
sprintf(extra+strlen(extra), "False CCA (one second) = %ld\n", (ULONG)pAd->RalinkCounters.OneSecFalseCCACnt);
-#ifdef RALINK_ATE
- if (ATE_ON(pAd))
- {
- if (pAd->ate.RxAntennaSel == 0)
- {
- sprintf(extra+strlen(extra), "RSSI-A = %ld\n", (LONG)(pAd->ate.LastRssi0 - pAd->BbpRssiToDbmDelta));
- sprintf(extra+strlen(extra), "RSSI-B (if available) = %ld\n", (LONG)(pAd->ate.LastRssi1 - pAd->BbpRssiToDbmDelta));
- sprintf(extra+strlen(extra), "RSSI-C (if available) = %ld\n\n", (LONG)(pAd->ate.LastRssi2 - pAd->BbpRssiToDbmDelta));
- }
- else
- {
- sprintf(extra+strlen(extra), "RSSI = %ld\n", (LONG)(pAd->ate.LastRssi0 - pAd->BbpRssiToDbmDelta));
- }
- }
- else
-#endif // RALINK_ATE //
{
sprintf(extra+strlen(extra), "RSSI-A = %ld\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi0 - pAd->BbpRssiToDbmDelta));
sprintf(extra+strlen(extra), "RSSI-B (if available) = %ld\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi1 - pAd->BbpRssiToDbmDelta));
sprintf(extra+strlen(extra), "RSSI-C (if available) = %ld\n\n", (LONG)(pAd->StaCfg.RssiSample.LastRssi2 - pAd->BbpRssiToDbmDelta));
}
-#ifdef WPA_SUPPLICANT_SUPPORT
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));
@@ -2007,7 +2075,6 @@ rt_private_get_statistics(struct net_device *dev, struct iw_request_info *info,
return Status;
}
-#ifdef DOT11_N_SUPPORT
void getBaInfo(
IN PRTMP_ADAPTER pAd,
IN PUCHAR pOutBuf)
@@ -2022,8 +2089,7 @@ void getBaInfo(
if (((pEntry->ValidAsCLI || pEntry->ValidAsApCli) && (pEntry->Sst == SST_ASSOC))
|| (pEntry->ValidAsWDS) || (pEntry->ValidAsMesh))
{
- sprintf(pOutBuf, "%s\n%02X:%02X:%02X:%02X:%02X:%02X (Aid = %d) (AP) -\n",
- pOutBuf,
+ sprintf(pOutBuf + strlen(pOutBuf), "\n%02X:%02X:%02X:%02X:%02X:%02X (Aid = %d) (AP) -\n",
pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2],
pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5], pEntry->Aid);
@@ -2033,7 +2099,7 @@ void getBaInfo(
if (pEntry->BARecWcidArray[j] != 0)
{
pRecBAEntry =&pAd->BATable.BARecEntry[pEntry->BARecWcidArray[j]];
- sprintf(pOutBuf, "%sTID=%d, BAWinSize=%d, LastIndSeq=%d, ReorderingPkts=%d\n", pOutBuf, j, pRecBAEntry->BAWinSize, pRecBAEntry->LastIndSeq, pRecBAEntry->list.qlen);
+ sprintf(pOutBuf + strlen(pOutBuf), "TID=%d, BAWinSize=%d, LastIndSeq=%d, ReorderingPkts=%d\n", j, pRecBAEntry->BAWinSize, pRecBAEntry->LastIndSeq, pRecBAEntry->list.qlen);
}
}
sprintf(pOutBuf, "%s\n", pOutBuf);
@@ -2044,7 +2110,7 @@ void getBaInfo(
if (pEntry->BAOriWcidArray[j] != 0)
{
pOriBAEntry =&pAd->BATable.BAOriEntry[pEntry->BAOriWcidArray[j]];
- sprintf(pOutBuf, "%sTID=%d, BAWinSize=%d, StartSeq=%d, CurTxSeq=%d\n", pOutBuf, j, pOriBAEntry->BAWinSize, pOriBAEntry->Sequence, pEntry->TxSeq[j]);
+ sprintf(pOutBuf + strlen(pOutBuf), "TID=%d, BAWinSize=%d, StartSeq=%d, CurTxSeq=%d\n", j, pOriBAEntry->BAWinSize, pOriBAEntry->Sequence, pEntry->TxSeq[j]);
}
}
sprintf(pOutBuf, "%s\n\n", pOutBuf);
@@ -2055,7 +2121,6 @@ void getBaInfo(
return;
}
-#endif // DOT11_N_SUPPORT //
static int
rt_private_show(struct net_device *dev, struct iw_request_info *info,
@@ -2101,12 +2166,10 @@ 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
@@ -2140,12 +2203,10 @@ 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);
@@ -2174,6 +2235,14 @@ rt_private_show(struct net_device *dev, struct iw_request_info *info,
wrq->length = strlen(extra) + 1; // 1: size of '\0'
break;
case RAIO_ON:
+#ifdef RT2870
+ if (RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
+ {
+ sprintf(extra, "Scanning\n");
+ wrq->length = strlen(extra) + 1; // 1: size of '\0'
+ break;
+ }
+#endif
pAd->StaCfg.bSwRadio = TRUE;
//if (pAd->StaCfg.bRadio != (pAd->StaCfg.bHwRadio && pAd->StaCfg.bSwRadio))
{
@@ -2189,16 +2258,6 @@ 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:
- {
- Set_DlsEntryInfo_Display_Proc(pAd, NULL);
- wrq->length = 0; // 1: size of '\0'
- }
- break;
-#endif // QOS_DLS_SUPPORT //
-
case SHOW_CFG_VALUE:
{
Status = RTMPShowCfgValue(pAd, wrq->pointer, extra);
@@ -2206,6 +2265,12 @@ rt_private_show(struct net_device *dev, struct iw_request_info *info,
wrq->length = strlen(extra) + 1; // 1: size of '\0'
}
break;
+#if !defined(RT2860) && !defined(RT30xx)
+ case SHOW_ADHOC_ENTRY_INFO:
+ Show_Adhoc_MacTable_Proc(pAd, extra);
+ wrq->length = strlen(extra) + 1; // 1: size of '\0'
+ break;
+#endif
default:
DBGPRINT(RT_DEBUG_TRACE, ("%s - unknow subcmd = %d\n", __func__, subcmd));
break;
@@ -2312,9 +2377,7 @@ int rt_ioctl_siwauth(struct net_device *dev,
pAdapter->StaCfg.WepStatus = Ndis802_11WEPEnabled;
pAdapter->StaCfg.OrigWepStatus = pAdapter->StaCfg.WepStatus;
pAdapter->StaCfg.PairCipher = Ndis802_11WEPEnabled;
-#ifdef WPA_SUPPLICANT_SUPPORT
pAdapter->StaCfg.IEEE8021X = FALSE;
-#endif // WPA_SUPPLICANT_SUPPORT //
}
else if (param->value == IW_AUTH_CIPHER_TKIP)
{
@@ -2356,22 +2419,16 @@ int rt_ioctl_siwauth(struct net_device *dev,
if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPAPSK)
{
pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA;
-#ifdef WPA_SUPPLICANT_SUPPORT
pAdapter->StaCfg.IEEE8021X = FALSE;
-#endif // WPA_SUPPLICANT_SUPPORT //
}
else if (pAdapter->StaCfg.AuthMode == Ndis802_11AuthModeWPA2PSK)
{
pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2;
-#ifdef WPA_SUPPLICANT_SUPPORT
pAdapter->StaCfg.IEEE8021X = FALSE;
-#endif // WPA_SUPPLICANT_SUPPORT //
}
-#ifdef WPA_SUPPLICANT_SUPPORT
else
// WEP 1x
pAdapter->StaCfg.IEEE8021X = TRUE;
-#endif // WPA_SUPPLICANT_SUPPORT //
}
else if (param->value == 0)
{
@@ -2457,6 +2514,7 @@ void fnSetCipherKey(
IN BOOLEAN bGTK,
IN struct iw_encode_ext *ext)
{
+#ifdef RT2860
RTMP_CLEAR_PSFLAG(pAdapter, fRTMP_PS_CAN_GO_SLEEP);
if (RTMP_TEST_PSFLAG(pAdapter, fRTMP_PS_SET_PCI_CLK_OFF_COMMAND))
{
@@ -2470,7 +2528,7 @@ void fnSetCipherKey(
RTMPusecDelay(6000);
pAdapter->bPCIclkOff = FALSE;
}
-
+#endif
NdisZeroMemory(&pAdapter->SharedKey[BSS0][keyIdx], sizeof(CIPHER_KEY));
pAdapter->SharedKey[BSS0][keyIdx].KeyLen = LEN_TKIP_EK;
NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ext->key, LEN_TKIP_EK);
@@ -2501,8 +2559,9 @@ void fnSetCipherKey(
keyIdx,
pAdapter->SharedKey[BSS0][keyIdx].CipherAlg,
&pAdapter->MacTab.Content[BSSID_WCID]);
-
+#ifdef RT2860
RTMP_SET_PSFLAG(pAdapter, fRTMP_PS_CAN_GO_SLEEP);
+#endif
}
int rt_ioctl_siwencodeext(struct net_device *dev,
@@ -2567,7 +2626,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev,
NdisZeroMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, 16);
NdisMoveMemory(pAdapter->SharedKey[BSS0][keyIdx].Key, ext->key, ext->key_len);
-
+#ifndef RT30xx
if (pAdapter->StaCfg.GroupCipher == Ndis802_11GroupWEP40Enabled ||
pAdapter->StaCfg.GroupCipher == Ndis802_11GroupWEP104Enabled)
{
@@ -2582,6 +2641,7 @@ int rt_ioctl_siwencodeext(struct net_device *dev,
// Indicate Connected for GUI
pAdapter->IndicateMediaState = NdisMediaStateConnected;
}
+#endif
break;
case IW_ENCODE_ALG_TKIP:
DBGPRINT(RT_DEBUG_TRACE, ("%s::IW_ENCODE_ALG_TKIP - keyIdx = %d, ext->key_len = %d\n", __func__, keyIdx, ext->key_len));
@@ -2752,7 +2812,6 @@ int rt_ioctl_giwgenie(struct net_device *dev,
return 0;
}
-#ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
#ifdef SIOCSIWGENIE
if (pAd->StaCfg.WpaSupplicantUP == WPA_SUPPLICANT_ENABLE)
{
@@ -2764,7 +2823,6 @@ int rt_ioctl_giwgenie(struct net_device *dev,
}
else
#endif // SIOCSIWGENIE //
-#endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
{
UCHAR RSNIe = IE_WPA;
@@ -2895,15 +2953,13 @@ rt_private_ioctl_bbp(struct net_device *dev, struct iw_request_info *info,
DBGPRINT(RT_DEBUG_TRACE, ("this_char=%s, value=%s\n", this_char, value));
if (sscanf(this_char, "%d", &(bbpId)) == 1)
{
+#ifndef RT30xx
if (bbpId <= 136)
+#endif // RT30xx //
+#ifdef RT30xx
+ if (bbpId <= 138) // edit by johnli, RF power sequence setup, add BBP R138 for ADC dynamic on/off control
+#endif // RT30xx //
{
-#ifdef RALINK_ATE
- if (ATE_ON(pAdapter))
- {
- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, &regBBP);
- }
- else
-#endif // RALINK_ATE //
{
RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, &regBBP);
}
@@ -2927,17 +2983,13 @@ rt_private_ioctl_bbp(struct net_device *dev, struct iw_request_info *info,
{ //Write
if ((sscanf(this_char, "%d", &(bbpId)) == 1) && (sscanf(value, "%x", &(bbpValue)) == 1))
{
+#ifndef RT30xx
if (bbpId <= 136)
+#endif // RT30xx //
+#ifdef RT30xx
+ if (bbpId <= 138) // edit by johnli, RF power sequence setup, add BBP R138 for ADC dynamic on/off control
+#endif // RT30xx //
{
-#ifdef RALINK_ATE
- if (ATE_ON(pAdapter))
- {
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAdapter, bbpId, bbpValue);
- //Read it back for showing
- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, &regBBP);
- }
- else
-#endif // RALINK_ATE //
{
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, bbpId, bbpValue);
//Read it back for showing
@@ -2968,21 +3020,24 @@ next:
{
memset(extra, 0x00, IW_PRIV_SIZE_MASK);
sprintf(extra, "\n");
+#ifndef RT30xx
for (bbpId = 0; bbpId <= 136; bbpId++)
+#endif // RT30xx //
+#ifdef RT30xx
+ for (bbpId = 0; bbpId <= 138; bbpId++) // edit by johnli, RF power sequence setup, add BBP R138 for ADC dynamic on/off control
+#endif // RT30xx //
{
if (strlen(extra) >= (IW_PRIV_SIZE_MASK - 10))
break;
-#ifdef RALINK_ATE
- if (ATE_ON(pAdapter))
- {
- ATE_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, &regBBP);
- }
- else
-#endif // RALINK_ATE //
RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, &regBBP);
+#ifndef RT30xx
sprintf(extra+strlen(extra), "R%02d[0x%02X]:%02X ", bbpId, bbpId*2, regBBP);
if (bbpId%5 == 4)
sprintf(extra+strlen(extra), "\n");
+#endif
+#ifdef RT30xx
+ sprintf(extra+strlen(extra), "%03d = %02X\n", bbpId, regBBP); // edit by johnli, change display format
+#endif
}
wrq->length = strlen(extra) + 1; // 1: size of '\0'
@@ -3022,9 +3077,7 @@ int rt_ioctl_siwrate(struct net_device *dev,
(pAd->MacTab.Content[BSSID_WCID].HTPhyMode.field.MODE <= MODE_OFDM))
RTMPSetDesiredRates(pAd, -1);
-#ifdef DOT11_N_SUPPORT
SetCommonHT(pAd);
-#endif // DOT11_N_SUPPORT //
}
else
{
@@ -3037,9 +3090,7 @@ int rt_ioctl_siwrate(struct net_device *dev,
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));
}
@@ -3087,13 +3138,11 @@ int rt_ioctl_giwrate(struct net_device *dev,
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
-#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)
@@ -3184,11 +3233,7 @@ static const iw_handler rt_handler[] =
static const iw_handler rt_priv_handlers[] = {
(iw_handler) NULL, /* + 0x00 */
(iw_handler) NULL, /* + 0x01 */
-#ifndef CONFIG_AP_SUPPORT
(iw_handler) rt_ioctl_setparam, /* + 0x02 */
-#else
- (iw_handler) NULL, /* + 0x02 */
-#endif // CONFIG_AP_SUPPORT //
#ifdef DBG
(iw_handler) rt_private_ioctl_bbp, /* + 0x03 */
#else
@@ -3258,27 +3303,13 @@ INT RTMPSetInformation(
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;
BOOLEAN IEEE8021x_required_keys = FALSE;
UCHAR wpa_supplicant_enable = 0;
-#endif // WPA_SUPPLICANT_SUPPORT //
-
-#ifdef SNMP_SUPPORT
- TX_RTY_CFG_STRUC tx_rty_cfg;
- ULONG ShortRetryLimit, LongRetryLimit;
- 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) {
@@ -3298,21 +3329,12 @@ 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));
}
break;
case OID_802_11_BSSID_LIST_SCAN:
- #ifdef RALINK_ATE
- if (ATE_ON(pAdapter))
- {
- DBGPRINT(RT_DEBUG_TRACE, ("The driver is in ATE mode now\n"));
- break;
- }
-#endif // RALINK_ATE //
Now = jiffies;
DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_BSSID_LIST_SCAN, TxCnt = %d \n", pAdapter->RalinkCounters.LastOneSecTotalTxCount));
@@ -3414,13 +3436,6 @@ INT RTMPSetInformation(
}
break;
case OID_802_11_BSSID:
-#ifdef RALINK_ATE
- if (ATE_ON(pAdapter))
- {
- DBGPRINT(RT_DEBUG_TRACE, ("The driver is in ATE mode now\n"));
- break;
- }
-#endif // RALINK_ATE //
if (wrq->u.data.length != sizeof(NDIS_802_11_MAC_ADDRESS))
Status = -EINVAL;
else
@@ -3492,9 +3507,7 @@ INT RTMPSetInformation(
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));
}
@@ -3513,9 +3526,14 @@ INT RTMPSetInformation(
{
// 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
+#ifdef RT30xx
+ pAdapter->CommonCfg.PhyMode = StaConfig.AdhocMode;
+#endif
if (pAdapter->StaCfg.BssType == BSS_ADHOC)
{
+#ifndef RT30xx
pAdapter->CommonCfg.PhyMode = StaConfig.AdhocMode;
+#endif
RTMPSetPhyMode(pAdapter, PhyMode);
MlmeUpdateTxRates(pAdapter, FALSE, 0);
MakeIbssBeacon(pAdapter); // re-build BEACON frame
@@ -3679,6 +3697,15 @@ INT RTMPSetInformation(
pAdapter->Counters8023.RxNoBuffer = 0;
pAdapter->Counters8023.GoodReceives = 0;
pAdapter->Counters8023.RxNoBuffer = 0;
+#ifdef RT2870
+ pAdapter->BulkOutComplete = 0;
+ pAdapter->BulkOutCompleteOther= 0;
+ pAdapter->BulkOutCompleteCancel = 0;
+ pAdapter->BulkOutReq = 0;
+ pAdapter->BulkInReq= 0;
+ pAdapter->BulkInComplete = 0;
+ pAdapter->BulkInCompleteFail = 0;
+#endif // RT2870 //
DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_RESET_COUNTERS \n"));
break;
case OID_802_11_RTS_THRESHOLD:
@@ -3763,10 +3790,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;
@@ -3910,7 +3937,6 @@ 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;
@@ -3929,7 +3955,6 @@ 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;
@@ -3970,62 +3995,7 @@ INT RTMPSetInformation(
DBGPRINT(RT_DEBUG_TRACE, ("Set::RT_OID_802_11_SET_APSD_PSM (bAPSDForcePowerSave:%d)\n", pAdapter->CommonCfg.bAPSDForcePowerSave));
}
break;
-#ifdef QOS_DLS_SUPPORT
- case RT_OID_802_11_SET_DLS:
- if (wrq->u.data.length != sizeof(ULONG))
- Status = -EINVAL;
- else
- {
- BOOLEAN oldvalue = pAdapter->CommonCfg.bDLSCapable;
- Status = copy_from_user(&pAdapter->CommonCfg.bDLSCapable, wrq->u.data.pointer, wrq->u.data.length);
- if (oldvalue && !pAdapter->CommonCfg.bDLSCapable)
- {
- int i;
- // tear down local dls table entry
- for (i=0; i<MAX_NUM_OF_INIT_DLS_ENTRY; i++)
- {
- if (pAdapter->StaCfg.DLSEntry[i].Valid && (pAdapter->StaCfg.DLSEntry[i].Status == DLS_FINISH))
- {
- pAdapter->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAdapter->StaCfg.DLSEntry[i].Valid = FALSE;
- RTMPSendDLSTearDownFrame(pAdapter, pAdapter->StaCfg.DLSEntry[i].MacAddr);
- }
- }
- // tear down peer dls table entry
- for (i=MAX_NUM_OF_INIT_DLS_ENTRY; i<MAX_NUM_OF_DLS_ENTRY; i++)
- {
- if (pAdapter->StaCfg.DLSEntry[i].Valid && (pAdapter->StaCfg.DLSEntry[i].Status == DLS_FINISH))
- {
- pAdapter->StaCfg.DLSEntry[i].Status = DLS_NONE;
- pAdapter->StaCfg.DLSEntry[i].Valid = FALSE;
- RTMPSendDLSTearDownFrame(pAdapter, pAdapter->StaCfg.DLSEntry[i].MacAddr);
- }
- }
- }
-
- DBGPRINT(RT_DEBUG_TRACE,("Set::RT_OID_802_11_SET_DLS (=%d)\n", pAdapter->CommonCfg.bDLSCapable));
- }
- break;
-
- case RT_OID_802_11_SET_DLS_PARAM:
- if (wrq->u.data.length != sizeof(RT_802_11_DLS_UI))
- Status = -EINVAL;
- else
- {
- RT_802_11_DLS Dls;
-
- NdisZeroMemory(&Dls, sizeof(RT_802_11_DLS));
- RTMPMoveMemory(&Dls, wrq->u.data.pointer, sizeof(RT_802_11_DLS_UI));
- MlmeEnqueue(pAdapter,
- MLME_CNTL_STATE_MACHINE,
- RT_OID_802_11_SET_DLS_PARAM,
- sizeof(RT_802_11_DLS),
- &Dls);
- DBGPRINT(RT_DEBUG_TRACE,("Set::RT_OID_802_11_SET_DLS_PARAM \n"));
- }
- break;
-#endif // QOS_DLS_SUPPORT //
case RT_OID_802_11_SET_WMM:
if (wrq->u.data.length != sizeof(BOOLEAN))
Status = -EINVAL;
@@ -4037,13 +4007,6 @@ INT RTMPSetInformation(
break;
case OID_802_11_DISASSOCIATE:
-#ifdef RALINK_ATE
- if (ATE_ON(pAdapter))
- {
- DBGPRINT(RT_DEBUG_TRACE, ("The driver is in ATE mode now\n"));
- break;
- }
-#endif // RALINK_ATE //
//
// Set NdisRadioStateOff to TRUE, instead of called MlmeRadioOff.
// Later on, NDIS_802_11_BSSID_LIST_EX->NumberOfItems should be 0
@@ -4074,8 +4037,6 @@ INT RTMPSetInformation(
StateMachineTouched = TRUE;
}
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;
@@ -4230,8 +4191,6 @@ INT RTMPSetInformation(
}
}
break;
-#endif // DOT11_N_SUPPORT //
-
// For WPA_SUPPLICANT to set static wep key
case OID_802_11_ADD_WEP:
pWepKey = kmalloc(wrq->u.data.length, MEM_ALLOC_FLAG);
@@ -4285,19 +4244,21 @@ INT RTMPSetInformation(
// Default key for tx (shared key)
if (pWepKey->KeyIndex & 0x80000000)
{
-#ifdef WPA_SUPPLICANT_SUPPORT
// set key material and key length
NdisZeroMemory(pAdapter->StaCfg.DesireSharedKey[KeyIdx].Key, 16);
pAdapter->StaCfg.DesireSharedKey[KeyIdx].KeyLen = (UCHAR) pWepKey->KeyLength;
NdisMoveMemory(pAdapter->StaCfg.DesireSharedKey[KeyIdx].Key, &pWepKey->KeyMaterial, pWepKey->KeyLength);
pAdapter->StaCfg.DesireSharedKeyId = KeyIdx;
pAdapter->StaCfg.DesireSharedKey[KeyIdx].CipherAlg = CipherAlg;
-#endif // WPA_SUPPLICANT_SUPPORT //
pAdapter->StaCfg.DefaultKeyId = (UCHAR) KeyIdx;
}
-
-#ifdef WPA_SUPPLICANT_SUPPORT
+#ifndef RT30xx
+#ifdef RT2860
if ((pAdapter->StaCfg.WpaSupplicantUP != 0) &&
+#endif
+#ifdef RT2870
+ if ((pAdapter->StaCfg.WpaSupplicantUP != WPA_SUPPLICANT_DISABLE) &&
+#endif
(pAdapter->StaCfg.AuthMode >= Ndis802_11AuthModeWPA))
{
Key = pWepKey->KeyMaterial;
@@ -4314,7 +4275,10 @@ INT RTMPSetInformation(
pAdapter->IndicateMediaState = NdisMediaStateConnected;
}
else if (pAdapter->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED)
-#endif // WPA_SUPPLICANT_SUPPORT
+#endif
+#ifdef RT30xx
+ if (pAdapter->StaCfg.PortSecured == WPA_802_1X_PORT_SECURED)
+#endif
{
Key = pAdapter->SharedKey[BSS0][KeyIdx].Key;
@@ -4335,7 +4299,6 @@ INT RTMPSetInformation(
}
kfree(pWepKey);
break;
-#ifdef WPA_SUPPLICANT_SUPPORT
case OID_SET_COUNTERMEASURES:
if (wrq->u.data.length != sizeof(int))
Status = -EINVAL;
@@ -4469,95 +4432,6 @@ INT RTMPSetInformation(
if(pPmkId)
kfree(pPmkId);
break;
-#endif // WPA_SUPPLICANT_SUPPORT //
-
-
-
-#ifdef SNMP_SUPPORT
- case OID_802_11_SHORTRETRYLIMIT:
- if (wrq->u.data.length != sizeof(ULONG))
- Status = -EINVAL;
- else
- {
- Status = copy_from_user(&ShortRetryLimit, wrq->u.data.pointer, wrq->u.data.length);
- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word);
- tx_rty_cfg.field.ShortRtyLimit = ShortRetryLimit;
- RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word);
- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_SHORTRETRYLIMIT (tx_rty_cfg.field.ShortRetryLimit=%d, ShortRetryLimit=%ld)\n", tx_rty_cfg.field.ShortRtyLimit, ShortRetryLimit));
- }
- break;
-
- case OID_802_11_LONGRETRYLIMIT:
- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_LONGRETRYLIMIT \n"));
- if (wrq->u.data.length != sizeof(ULONG))
- Status = -EINVAL;
- else
- {
- Status = copy_from_user(&LongRetryLimit, wrq->u.data.pointer, wrq->u.data.length);
- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word);
- tx_rty_cfg.field.LongRtyLimit = LongRetryLimit;
- RTMP_IO_WRITE32(pAdapter, TX_RTY_CFG, tx_rty_cfg.word);
- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_LONGRETRYLIMIT (tx_rty_cfg.field.LongRetryLimit= %d,LongRetryLimit=%ld)\n", tx_rty_cfg.field.LongRtyLimit, LongRetryLimit));
- }
- break;
-
- case OID_802_11_WEPDEFAULTKEYVALUE:
- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_WEPDEFAULTKEYVALUE\n"));
- pKey = kmalloc(wrq->u.data.length, GFP_KERNEL);
- Status = copy_from_user(pKey, wrq->u.data.pointer, wrq->u.data.length);
- //pKey = &WepKey;
-
- if ( pKey->Length != wrq->u.data.length)
- {
- Status = -EINVAL;
- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_WEPDEFAULTKEYVALUE, Failed!!\n"));
- }
- KeyIdx = pKey->KeyIndex & 0x0fffffff;
- DBGPRINT(RT_DEBUG_TRACE,("pKey->KeyIndex =%d, pKey->KeyLength=%d\n", pKey->KeyIndex, pKey->KeyLength));
-
- // it is a shared key
- if (KeyIdx > 4)
- Status = -EINVAL;
- else
- {
- pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen = (UCHAR) pKey->KeyLength;
- NdisMoveMemory(&pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].Key, &pKey->KeyMaterial, pKey->KeyLength);
- if (pKey->KeyIndex & 0x80000000)
- {
- // Default key for tx (shared key)
- pAdapter->StaCfg.DefaultKeyId = (UCHAR) KeyIdx;
- }
- //RestartAPIsRequired = TRUE;
- }
- break;
-
-
- case OID_802_11_WEPDEFAULTKEYID:
- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_WEPDEFAULTKEYID \n"));
-
- if (wrq->u.data.length != sizeof(UCHAR))
- Status = -EINVAL;
- else
- Status = copy_from_user(&pAdapter->StaCfg.DefaultKeyId, wrq->u.data.pointer, wrq->u.data.length);
-
- break;
-
-
- case OID_802_11_CURRENTCHANNEL:
- DBGPRINT(RT_DEBUG_TRACE, ("Set::OID_802_11_CURRENTCHANNEL \n"));
- if (wrq->u.data.length != sizeof(UCHAR))
- Status = -EINVAL;
- else
- {
- Status = copy_from_user(&ctmp, wrq->u.data.pointer, wrq->u.data.length);
- sprintf(&ctmp,"%d", ctmp);
- Set_Channel_Proc(pAdapter, &ctmp);
- }
- break;
-#endif
-
-
-
default:
DBGPRINT(RT_DEBUG_TRACE, ("Set::unknown IOCTL's subcmd = 0x%08x\n", cmd));
Status = -EOPNOTSUPP;
@@ -4599,16 +4473,6 @@ INT RTMPQueryInformation(
UCHAR driverVersion[8];
OID_SET_HT_PHYMODE *pHTPhyMode = NULL;
-
-#ifdef SNMP_SUPPORT
- //for snmp, kathy
- DefaultKeyIdxValue *pKeyIdxValue;
- INT valueLen;
- TX_RTY_CFG_STRUC tx_rty_cfg;
- ULONG ShortRetryLimit, LongRetryLimit;
- UCHAR tmp[64];
-#endif //SNMP
-
switch(cmd)
{
case RT_OID_DEVICE_NAME:
@@ -4625,16 +4489,6 @@ INT RTMPQueryInformation(
Status = -EFAULT;
}
break;
-#ifdef RALINK_ATE
- case RT_QUERY_ATE_TXDONE_COUNT:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_QUERY_ATE_TXDONE_COUNT \n"));
- wrq->u.data.length = sizeof(UINT32);
- if (copy_to_user(wrq->u.data.pointer, &pAdapter->ate.TxDoneCount, wrq->u.data.length))
- {
- Status = -EFAULT;
- }
- break;
-#endif // RALINK_ATE //
case OID_802_11_BSSID_LIST:
if (RTMP_TEST_FLAG(pAdapter, fRTMP_ADAPTER_BSS_SCAN_IN_PROGRESS))
{
@@ -4776,14 +4630,6 @@ INT RTMPQueryInformation(
Status = copy_to_user(wrq->u.data.pointer, &MediaState, wrq->u.data.length);
break;
case OID_802_11_BSSID:
-#ifdef RALINK_ATE
- if (ATE_ON(pAdapter))
- {
- DBGPRINT(RT_DEBUG_TRACE, ("The driver is in ATE mode now\n"));
- Status = NDIS_STATUS_RESOURCES;
- break;
- }
-#endif // RALINK_ATE //
if (INFRA_ON(pAdapter) || ADHOC_ON(pAdapter))
{
Status = copy_to_user(wrq->u.data.pointer, &pAdapter->CommonCfg.Bssid, sizeof(NDIS_802_11_MAC_ADDRESS));
@@ -5121,7 +4967,6 @@ INT RTMPQueryInformation(
Status = copy_to_user(wrq->u.data.pointer, &pAdapter->CommonCfg.bWmmCapable, wrq->u.data.length);
DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_WMM (=%d)\n", pAdapter->CommonCfg.bWmmCapable));
break;
-#ifdef WPA_SUPPLICANT_SUPPORT
case RT_OID_NEW_DRIVER:
{
UCHAR enabled = 1;
@@ -5135,8 +4980,6 @@ INT RTMPQueryInformation(
Status = copy_to_user(wrq->u.data.pointer, &pAdapter->StaCfg.WpaSupplicantUP, wrq->u.data.length);
DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_WPA_SUPPLICANT_SUPPORT (=%d)\n", pAdapter->StaCfg.WpaSupplicantUP));
break;
-#endif // WPA_SUPPLICANT_SUPPORT //
-
case RT_OID_DRIVER_DEVICE_NAME:
DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_DRIVER_DEVICE_NAME \n"));
wrq->u.data.length = 16;
@@ -5211,154 +5054,20 @@ INT RTMPQueryInformation(
case RT_OID_QUERY_MULTIPLE_CARD_SUPPORT:
wrq->u.data.length = sizeof(UCHAR);
i = 0;
-#ifdef MULTIPLE_CARD_SUPPORT
- i = 1;
-#endif // MULTIPLE_CARD_SUPPORT //
if (copy_to_user(wrq->u.data.pointer, &i, wrq->u.data.length))
{
Status = -EFAULT;
}
DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_QUERY_MULTIPLE_CARD_SUPPORT(=%d) \n", i));
break;
-#ifdef SNMP_SUPPORT
- 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);
- break;
-
- case RT_OID_802_11_MANUFACTUREROUI:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_MANUFACTUREROUI \n"));
- wrq->u.data.length = ManufacturerOUI_LEN;
- Status = copy_to_user(wrq->u.data.pointer, &pAdapter->CurrentAddress, wrq->u.data.length);
- break;
-
- case RT_OID_802_11_MANUFACTURERNAME:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_MANUFACTURERNAME \n"));
- wrq->u.data.length = strlen(ManufacturerNAME);
- Status = copy_to_user(wrq->u.data.pointer, ManufacturerNAME, wrq->u.data.length);
- break;
-
- case RT_OID_802_11_RESOURCETYPEIDNAME:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_RESOURCETYPEIDNAME \n"));
- wrq->u.data.length = strlen(ResourceTypeIdName);
- Status = copy_to_user(wrq->u.data.pointer, ResourceTypeIdName, wrq->u.data.length);
- break;
-
- case RT_OID_802_11_PRIVACYOPTIONIMPLEMENTED:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_PRIVACYOPTIONIMPLEMENTED \n"));
- ulInfo = 1; // 1 is support wep else 2 is not support.
- wrq->u.data.length = sizeof(ulInfo);
- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
- break;
-
- case RT_OID_802_11_POWERMANAGEMENTMODE:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_POWERMANAGEMENTMODE \n"));
- if (pAdapter->StaCfg.Psm == PSMP_ACTION)
- ulInfo = 1; // 1 is power active else 2 is power save.
- else
- ulInfo = 2;
-
- wrq->u.data.length = sizeof(ulInfo);
- Status = copy_to_user(wrq->u.data.pointer, &ulInfo, wrq->u.data.length);
- break;
-
- case OID_802_11_WEPDEFAULTKEYVALUE:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_WEPDEFAULTKEYVALUE \n"));
- //KeyIdxValue.KeyIdx = pAd->PortCfg.MBSSID[pAd->IoctlIF].DefaultKeyId;
- pKeyIdxValue = wrq->u.data.pointer;
- DBGPRINT(RT_DEBUG_TRACE,("KeyIdxValue.KeyIdx = %d, \n",pKeyIdxValue->KeyIdx));
- valueLen = pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen;
- NdisMoveMemory(pKeyIdxValue->Value,
- &pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].Key,
- valueLen);
- pKeyIdxValue->Value[valueLen]='\0';
-
- wrq->u.data.length = sizeof(DefaultKeyIdxValue);
-
- Status = copy_to_user(wrq->u.data.pointer, pKeyIdxValue, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_TRACE,("DefaultKeyId = %d, total len = %d, str len=%d, KeyValue= %02x %02x %02x %02x \n", pAdapter->StaCfg.DefaultKeyId, wrq->u.data.length, pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen,
- pAdapter->SharedKey[BSS0][0].Key[0],
- pAdapter->SharedKey[BSS0][1].Key[0],
- pAdapter->SharedKey[BSS0][2].Key[0],
- pAdapter->SharedKey[BSS0][3].Key[0]));
- break;
-
- case OID_802_11_WEPDEFAULTKEYID:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_WEPDEFAULTKEYID \n"));
- wrq->u.data.length = sizeof(UCHAR);
- Status = copy_to_user(wrq->u.data.pointer, &pAdapter->StaCfg.DefaultKeyId, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_TRACE, ("DefaultKeyId =%d \n", pAdapter->StaCfg.DefaultKeyId));
- break;
-
- case RT_OID_802_11_WEPKEYMAPPINGLENGTH:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_WEPKEYMAPPINGLENGTH \n"));
- wrq->u.data.length = sizeof(UCHAR);
- Status = copy_to_user(wrq->u.data.pointer,
- &pAdapter->SharedKey[BSS0][pAdapter->StaCfg.DefaultKeyId].KeyLen,
- wrq->u.data.length);
- break;
-
- case OID_802_11_SHORTRETRYLIMIT:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_SHORTRETRYLIMIT \n"));
- wrq->u.data.length = sizeof(ULONG);
- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word);
- ShortRetryLimit = tx_rty_cfg.field.ShortRtyLimit;
- DBGPRINT(RT_DEBUG_TRACE, ("ShortRetryLimit =%ld, tx_rty_cfg.field.ShortRetryLimit=%d\n", ShortRetryLimit, tx_rty_cfg.field.ShortRtyLimit));
- Status = copy_to_user(wrq->u.data.pointer, &ShortRetryLimit, wrq->u.data.length);
- break;
-
- case OID_802_11_LONGRETRYLIMIT:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_LONGRETRYLIMIT \n"));
- wrq->u.data.length = sizeof(ULONG);
- RTMP_IO_READ32(pAdapter, TX_RTY_CFG, &tx_rty_cfg.word);
- LongRetryLimit = tx_rty_cfg.field.LongRtyLimit;
- DBGPRINT(RT_DEBUG_TRACE, ("LongRetryLimit =%ld, tx_rty_cfg.field.LongRtyLimit=%d\n", LongRetryLimit, tx_rty_cfg.field.LongRtyLimit));
- Status = copy_to_user(wrq->u.data.pointer, &LongRetryLimit, wrq->u.data.length);
- break;
-
- case RT_OID_802_11_PRODUCTID:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_PRODUCTID \n"));
-
- {
-
- USHORT device_id;
- if (((POS_COOKIE)pAdapter->OS_Cookie)->pci_dev != NULL)
- pci_read_config_word(((POS_COOKIE)pAdapter->OS_Cookie)->pci_dev, PCI_DEVICE_ID, &device_id);
- else
- DBGPRINT(RT_DEBUG_TRACE, (" pci_dev = NULL\n"));
- sprintf(tmp, "%04x %04x\n", NIC_PCI_VENDOR_ID, device_id);
- }
- wrq->u.data.length = strlen(tmp);
- Status = copy_to_user(wrq->u.data.pointer, tmp, wrq->u.data.length);
- break;
-
- case RT_OID_802_11_MANUFACTUREID:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_MANUFACTUREID \n"));
- wrq->u.data.length = strlen(ManufacturerNAME);
- Status = copy_to_user(wrq->u.data.pointer, ManufacturerNAME, wrq->u.data.length);
- break;
-
- case OID_802_11_CURRENTCHANNEL:
- DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_CURRENTCHANNEL \n"));
- wrq->u.data.length = sizeof(UCHAR);
- DBGPRINT(RT_DEBUG_TRACE, ("sizeof UCHAR=%d, channel=%d \n", sizeof(UCHAR), pAdapter->CommonCfg.Channel));
- Status = copy_to_user(wrq->u.data.pointer, &pAdapter->CommonCfg.Channel, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_TRACE, ("Status=%d\n", Status));
- break;
-#endif //SNMP_SUPPORT
case OID_802_11_BUILD_CHANNEL_EX:
{
UCHAR value;
DBGPRINT(RT_DEBUG_TRACE, ("Query::OID_802_11_BUILD_CHANNEL_EX \n"));
wrq->u.data.length = sizeof(UCHAR);
-#ifdef EXT_BUILD_CHANNEL_LIST
- DBGPRINT(RT_DEBUG_TRACE, ("Support EXT_BUILD_CHANNEL_LIST.\n"));
- value = 1;
-#else
DBGPRINT(RT_DEBUG_TRACE, ("Doesn't support EXT_BUILD_CHANNEL_LIST.\n"));
value = 0;
-#endif // EXT_BUILD_CHANNEL_LIST //
Status = copy_to_user(wrq->u.data.pointer, &value, 1);
DBGPRINT(RT_DEBUG_TRACE, ("Status=%d\n", Status));
}
@@ -5409,35 +5118,6 @@ 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);
- Status = copy_to_user(wrq->u.data.pointer, &pAdapter->CommonCfg.bDLSCapable, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_DLS(=%d)\n", pAdapter->CommonCfg.bDLSCapable));
- break;
-
- case RT_OID_802_11_QUERY_DLS_PARAM:
- {
- PRT_802_11_DLS_INFO pDlsInfo = kmalloc(sizeof(RT_802_11_DLS_INFO), GFP_ATOMIC);
- if (pDlsInfo == NULL)
- break;
-
- for (i=0; i<MAX_NUM_OF_DLS_ENTRY; i++)
- {
- RTMPMoveMemory(&pDlsInfo->Entry[i], &pAdapter->StaCfg.DLSEntry[i], sizeof(RT_802_11_DLS_UI));
- }
-
- pDlsInfo->num = MAX_NUM_OF_DLS_ENTRY;
- wrq->u.data.length = sizeof(RT_802_11_DLS_INFO);
- Status = copy_to_user(wrq->u.data.pointer, pDlsInfo, wrq->u.data.length);
- DBGPRINT(RT_DEBUG_TRACE, ("Query::RT_OID_802_11_QUERY_DLS_PARAM\n"));
-
- if (pDlsInfo)
- kfree(pDlsInfo);
- }
- break;
-#endif // QOS_DLS_SUPPORT //
default:
DBGPRINT(RT_DEBUG_TRACE, ("Query::unknown IOCTL's subcmd = 0x%08x\n", cmd));
Status = -EOPNOTSUPP;
@@ -5480,14 +5160,6 @@ INT rt28xx_sta_ioctl(
//check if the interface is down
if(!RTMP_TEST_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_IN_USE))
{
-#ifdef CONFIG_APSTA_MIXED_SUPPORT
- if (wrq->u.data.pointer == NULL)
- {
- return Status;
- }
-
- if (strstr(wrq->u.data.pointer, "OpMode") == NULL)
-#endif // CONFIG_APSTA_MIXED_SUPPORT //
{
DBGPRINT(RT_DEBUG_TRACE, ("INFO::Network is down!\n"));
return -ENETDOWN;
@@ -5501,15 +5173,6 @@ INT rt28xx_sta_ioctl(
switch(cmd)
{
-#ifdef RALINK_ATE
-#ifdef RALINK_28xx_QA
- case RTPRIV_IOCTL_ATE:
- {
- RtmpDoAte(pAd, wrq);
- }
- break;
-#endif // RALINK_28xx_QA //
-#endif // RALINK_ATE //
case SIOCGIFHWADDR:
DBGPRINT(RT_DEBUG_TRACE, ("IOCTL::SIOCGIFHWADDR\n"));
memcpy(wrq->u.name, pAd->CurrentAddress, ETH_ALEN);
@@ -5640,6 +5303,9 @@ INT rt28xx_sta_ioctl(
Status = -EOPNOTSUPP;
break;
case RT_PRIV_IOCTL:
+#ifdef RT30xx
+ case RT_PRIV_IOCTL_EXT:
+#endif
subcmd = wrq->u.data.flags;
if( subcmd & OID_GET_SET_TOGGLE)
Status = RTMPSetInformation(pAd, rq, subcmd);
@@ -5671,6 +5337,11 @@ INT rt28xx_sta_ioctl(
case RTPRIV_IOCTL_E2P:
RTMPIoctlE2PROM(pAd, wrq);
break;
+#ifdef RT30xx
+ case RTPRIV_IOCTL_RF:
+ RTMPIoctlRF(pAd, wrq);
+ break;
+#endif // RT30xx //
#endif // DBG //
case SIOCETHTOOL:
break;
@@ -5766,6 +5437,9 @@ INT Set_WmmCapable_Proc(
bWmmCapable = simple_strtol(arg, 0, 10);
if ((bWmmCapable == 1)
+#ifdef RT2870
+ && (pAd->NumberOfPipes >= 5)
+#endif // RT2870 //
)
pAd->CommonCfg.bWmmCapable = TRUE;
else if (bWmmCapable == 0)
@@ -5873,19 +5547,14 @@ 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);
-#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)
@@ -5936,7 +5605,6 @@ INT Set_NetworkType_Proc(
pAdapter->CommonCfg.CentralChannel));
}
else
-#endif // DOT11_N_SUPPORT //
{
// 20MHz
RTMP_BBP_IO_READ8_BY_REG_ID(pAdapter, BBP_R4, &bbpValue);
@@ -5997,12 +5665,10 @@ INT Set_AuthMode_Proc(
pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPANone;
else if ((strcmp(arg, "WPA2PSK") == 0) || (strcmp(arg, "wpa2psk") == 0))
pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2PSK;
-#ifdef WPA_SUPPLICANT_SUPPORT
else if ((strcmp(arg, "WPA") == 0) || (strcmp(arg, "wpa") == 0))
pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA;
else if ((strcmp(arg, "WPA2") == 0) || (strcmp(arg, "wpa2") == 0))
pAdapter->StaCfg.AuthMode = Ndis802_11AuthModeWPA2;
-#endif // WPA_SUPPLICANT_SUPPORT //
else
return FALSE;
@@ -6544,7 +6210,6 @@ INT Set_PSMode_Proc(
return TRUE;
}
-#ifdef WPA_SUPPLICANT_SUPPORT
/*
==========================================================================
Description:
@@ -6575,7 +6240,6 @@ INT Set_Wpa_Support(
return TRUE;
}
-#endif // WPA_SUPPLICANT_SUPPORT //
#ifdef DBG
/*
@@ -6608,7 +6272,9 @@ VOID RTMPIoctlMAC(
UCHAR temp[16], temp2[16];
UINT32 macValue = 0;
INT Status;
-
+#ifdef RT30xx
+ BOOLEAN bIsPrintAllMAC = FALSE;
+#endif
memset(msg, 0x00, 1024);
if (wrq->u.data.length > 1) //No parameters.
@@ -6659,7 +6325,13 @@ VOID RTMPIoctlMAC(
sprintf(msg+strlen(msg), "[0x%08lX]:%08X ", macAddr , macValue);
}
else
+#ifndef RT30xx
{//Invalid parametes, so default printk all bbp
+#endif
+#ifdef RT30xx
+ {//Invalid parametes, so default printk all mac
+ bIsPrintAllMAC = TRUE;
+#endif
goto next;
}
}
@@ -6730,13 +6402,6 @@ VOID RTMPIoctlMAC(
UCHAR R66;
pAdapter->BbpTuning.bEnable = FALSE;
R66 = 0x26 + GET_LNA_GAIN(pAdapter);
-#ifdef RALINK_ATE
- if (ATE_ON(pAdapter))
- {
- ATE_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R66, (0x26 + GET_LNA_GAIN(pAdapter)));
- }
- else
-#endif // RALINK_ATE //
RTMP_BBP_IO_WRITE8_BY_REG_ID(pAdapter, BBP_R66, (0x26 + GET_LNA_GAIN(pAdapter)));
DBGPRINT(RT_DEBUG_TRACE,("turn off R17 tuning, restore to 0x%02x\n", R66));
}
@@ -6750,7 +6415,52 @@ VOID RTMPIoctlMAC(
}
}
}
+#ifdef RT30xx
+ else
+ bIsPrintAllMAC = TRUE;
+#endif
next:
+#ifdef RT30xx
+ if (bIsPrintAllMAC)
+ {
+ struct file *file_w;
+ PCHAR fileName = "MacDump.txt";
+ mm_segment_t orig_fs;
+
+ orig_fs = get_fs();
+ set_fs(KERNEL_DS);
+
+ // open file
+ file_w = filp_open(fileName, O_WRONLY|O_CREAT, 0);
+ if (IS_ERR(file_w))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("-->2) %s: Error %ld opening %s\n", __func__, -PTR_ERR(file_w), fileName));
+ }
+ else
+ {
+ if (file_w->f_op && file_w->f_op->write)
+ {
+ file_w->f_pos = 0;
+ macAddr = 0x1000;
+
+ while (macAddr <= 0x1800)
+ {
+ RTMP_IO_READ32(pAdapter, macAddr, &macValue);
+ sprintf(msg, "%08lx = %08X\n", macAddr, macValue);
+
+ // write data to file
+ file_w->f_op->write(file_w, msg, strlen(msg), &file_w->f_pos);
+
+ printk("%s", msg);
+ macAddr += 4;
+ }
+ sprintf(msg, "\nDump all MAC values to %s\n", fileName);
+ }
+ filp_close(file_w, NULL);
+ }
+ set_fs(orig_fs);
+ }
+#endif /* RT30xx */
if(strlen(msg) == 1)
sprintf(msg+strlen(msg), "===>Error command format!");
@@ -6791,7 +6501,9 @@ VOID RTMPIoctlE2PROM(
UCHAR temp[16], temp2[16];
USHORT eepValue;
int Status;
-
+#ifdef RT30xx
+ BOOLEAN bIsPrintAllE2P = FALSE;
+#endif
memset(msg, 0x00, 1024);
if (wrq->u.data.length > 1) //No parameters.
@@ -6845,6 +6557,9 @@ VOID RTMPIoctlE2PROM(
}
else
{//Invalid parametes, so default printk all bbp
+#ifdef RT30xx
+ bIsPrintAllE2P = TRUE;
+#endif
goto next;
}
}
@@ -6903,7 +6618,52 @@ VOID RTMPIoctlE2PROM(
sprintf(msg+strlen(msg), "[0x%02X]:%02X ", eepAddr, eepValue);
}
}
+#ifdef RT30xx
+ else
+ bIsPrintAllE2P = TRUE;
+#endif
next:
+#ifdef RT30xx
+ if (bIsPrintAllE2P)
+ {
+ struct file *file_w;
+ PCHAR fileName = "EEPROMDump.txt";
+ mm_segment_t orig_fs;
+
+ orig_fs = get_fs();
+ set_fs(KERNEL_DS);
+
+ // open file
+ file_w = filp_open(fileName, O_WRONLY|O_CREAT, 0);
+ if (IS_ERR(file_w))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("-->2) %s: Error %ld opening %s\n", __func__, -PTR_ERR(file_w), fileName));
+ }
+ else
+ {
+ if (file_w->f_op && file_w->f_op->write)
+ {
+ file_w->f_pos = 0;
+ eepAddr = 0x00;
+
+ while (eepAddr <= 0xFE)
+ {
+ RT28xx_EEPROM_READ16(pAdapter, eepAddr, eepValue);
+ sprintf(msg, "%08x = %04x\n", eepAddr , eepValue);
+
+ // write data to file
+ file_w->f_op->write(file_w, msg, strlen(msg), &file_w->f_pos);
+
+ printk("%s", msg);
+ eepAddr += 2;
+ }
+ sprintf(msg, "\nDump all EEPROM values to %s\n", fileName);
+ }
+ filp_close(file_w, NULL);
+ }
+ set_fs(orig_fs);
+ }
+#endif /* RT30xx */
if(strlen(msg) == 1)
sprintf(msg+strlen(msg), "===>Error command format!");
@@ -6914,6 +6674,154 @@ next:
DBGPRINT(RT_DEBUG_TRACE, ("<==RTMPIoctlE2PROM\n"));
}
+#ifdef RT30xx
+/*
+ ==========================================================================
+ Description:
+ Read / Write RF register
+Arguments:
+ pAdapter Pointer to our adapter
+ wrq Pointer to the ioctl argument
+
+ Return Value:
+ None
+
+ Note:
+ Usage:
+ 1.) iwpriv ra0 rf ==> read all RF registers
+ 2.) iwpriv ra0 rf 1 ==> read RF where RegID=1
+ 3.) iwpriv ra0 rf 1=10 ==> write RF R1=0x10
+ ==========================================================================
+*/
+VOID RTMPIoctlRF(
+ IN PRTMP_ADAPTER pAdapter,
+ IN struct iwreq *wrq)
+{
+ CHAR *this_char;
+ CHAR *value;
+ UCHAR regRF = 0;
+ CHAR msg[2048];
+ CHAR arg[255];
+ INT rfId;
+ LONG rfValue;
+ int Status;
+ BOOLEAN bIsPrintAllRF = FALSE;
+
+
+ memset(msg, 0x00, 2048);
+ if (wrq->u.data.length > 1) //No parameters.
+ {
+ Status = copy_from_user(arg, wrq->u.data.pointer, (wrq->u.data.length > 255) ? 255 : wrq->u.data.length);
+ sprintf(msg, "\n");
+
+ //Parsing Read or Write
+ this_char = arg;
+ if (!*this_char)
+ goto next;
+
+ if ((value = strchr(this_char, '=')) != NULL)
+ *value++ = 0;
+
+ if (!value || !*value)
+ { //Read
+ if (sscanf(this_char, "%d", &(rfId)) == 1)
+ {
+ if (rfId <= 31)
+ {
+ // In RT2860 ATE mode, we do not load 8051 firmware.
+ //We must access RF directly.
+ // For RT2870 ATE mode, ATE_RF_IO_WRITE8(/READ8)_BY_REG_ID are redefined.
+ // according to Andy, Gary, David require.
+ // the command rf shall read rf register directly for dubug.
+ // BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, &regBBP);
+ RT30xxReadRFRegister(pAdapter, rfId, &regRF);
+
+ sprintf(msg+strlen(msg), "R%02d[0x%02x]:%02X ", rfId, rfId*2, regRF);
+ }
+ else
+ {//Invalid parametes, so default printk all RF
+ bIsPrintAllRF = TRUE;
+ goto next;
+ }
+ }
+ else
+ { //Invalid parametes, so default printk all RF
+ bIsPrintAllRF = TRUE;
+ goto next;
+ }
+ }
+ else
+ { //Write
+ if ((sscanf(this_char, "%d", &(rfId)) == 1) && (sscanf(value, "%lx", &(rfValue)) == 1))
+ {
+ if (rfId <= 31)
+ {
+ // In RT2860 ATE mode, we do not load 8051 firmware.
+ // We should access RF registers directly.
+ // For RT2870 ATE mode, ATE_RF_IO_WRITE8/READ8_BY_REG_ID are redefined.
+ {
+ // according to Andy, Gary, David require.
+ // the command RF shall read/write RF register directly for dubug.
+ //BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, &regBBP);
+ //BBP_IO_WRITE8_BY_REG_ID(pAdapter, (UCHAR)bbpId,(UCHAR) bbpValue);
+ RT30xxReadRFRegister(pAdapter, rfId, &regRF);
+ RT30xxWriteRFRegister(pAdapter, (UCHAR)rfId,(UCHAR) rfValue);
+ //Read it back for showing
+ //BBP_IO_READ8_BY_REG_ID(pAdapter, bbpId, &regBBP);
+ RT30xxReadRFRegister(pAdapter, rfId, &regRF);
+ sprintf(msg+strlen(msg), "R%02d[0x%02X]:%02X\n", rfId, rfId*2, regRF);
+ }
+ }
+ else
+ {//Invalid parametes, so default printk all RF
+ bIsPrintAllRF = TRUE;
+ }
+ }
+ else
+ { //Invalid parametes, so default printk all RF
+ bIsPrintAllRF = TRUE;
+ }
+ }
+ }
+ else
+ bIsPrintAllRF = TRUE;
+next:
+ if (bIsPrintAllRF)
+ {
+ memset(msg, 0x00, 2048);
+ sprintf(msg, "\n");
+ for (rfId = 0; rfId <= 31; rfId++)
+ {
+ // according to Andy, Gary, David require.
+ // the command RF shall read/write RF register directly for dubug.
+ RT30xxReadRFRegister(pAdapter, rfId, &regRF);
+ sprintf(msg+strlen(msg), "%03d = %02X\n", rfId, regRF);
+ }
+ // Copy the information into the user buffer
+ DBGPRINT(RT_DEBUG_TRACE, ("strlen(msg)=%d\n", (UINT32)strlen(msg)));
+ wrq->u.data.length = strlen(msg);
+ if (copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length))
+ {
+ DBGPRINT(RT_DEBUG_TRACE, ("%s: copy_to_user() fail\n", __func__));
+ }
+ }
+ else
+ {
+ if(strlen(msg) == 1)
+ sprintf(msg+strlen(msg), "===>Error command format!");
+
+ DBGPRINT(RT_DEBUG_TRACE, ("copy to user [msg=%s]\n", msg));
+ // Copy the information into the user buffer
+ DBGPRINT(RT_DEBUG_TRACE, ("strlen(msg) =%d\n", (UINT32)strlen(msg)));
+
+ // Copy the information into the user buffer
+ wrq->u.data.length = strlen(msg);
+ Status = copy_to_user(wrq->u.data.pointer, msg, wrq->u.data.length);
+ }
+
+ DBGPRINT(RT_DEBUG_TRACE, ("<==RTMPIoctlRF\n\n"));
+}
+#endif // RT30xx //
#endif // DBG //
@@ -6960,37 +6868,47 @@ INT Set_ShortRetryLimit_Proc(
return TRUE;
}
-#ifdef EXT_BUILD_CHANNEL_LIST
-INT Set_Ieee80211dClientMode_Proc(
- IN PRTMP_ADAPTER pAdapter,
- IN PUCHAR arg)
+#if !defined(RT2860) && !defined(RT30xx)
+INT Show_Adhoc_MacTable_Proc(
+ IN PRTMP_ADAPTER pAd,
+ IN PCHAR extra)
{
- if (simple_strtol(arg, 0, 10) == 0)
- pAdapter->StaCfg.IEEE80211dClientMode = Rt802_11_D_None;
- else if (simple_strtol(arg, 0, 10) == 1)
- pAdapter->StaCfg.IEEE80211dClientMode = Rt802_11_D_Flexible;
- else if (simple_strtol(arg, 0, 10) == 2)
- pAdapter->StaCfg.IEEE80211dClientMode = Rt802_11_D_Strict;
- else
- return FALSE;
+ INT i;
- DBGPRINT(RT_DEBUG_TRACE, ("Set_Ieee802dMode_Proc::(IEEEE0211dMode=%d)\n", pAdapter->StaCfg.IEEE80211dClientMode));
- return TRUE;
-}
-#endif // EXT_BUILD_CHANNEL_LIST //
+ sprintf(extra, "\n");
-#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;
+ sprintf(extra + strlen(extra), "HT Operating Mode : %d\n", pAd->CommonCfg.AddHTInfo.AddHtInfo2.OperaionMode);
+
+ sprintf(extra + strlen(extra), "\n%-19s%-4s%-4s%-7s%-7s%-7s%-10s%-6s%-6s%-6s%-6s\n",
+ "MAC", "AID", "BSS", "RSSI0", "RSSI1", "RSSI2", "PhMd", "BW", "MCS", "SGI", "STBC");
+
+ for (i=1; i<MAX_LEN_OF_MAC_TABLE; i++)
+ {
+ PMAC_TABLE_ENTRY pEntry = &pAd->MacTab.Content[i];
+
+ if (strlen(extra) > (IW_PRIV_SIZE_MASK - 30))
+ break;
+ if ((pEntry->ValidAsCLI || pEntry->ValidAsApCli) && (pEntry->Sst == SST_ASSOC))
+ {
+ sprintf(extra + strlen(extra), "%02X:%02X:%02X:%02X:%02X:%02X ",
+ pEntry->Addr[0], pEntry->Addr[1], pEntry->Addr[2],
+ pEntry->Addr[3], pEntry->Addr[4], pEntry->Addr[5]);
+ sprintf(extra + strlen(extra), "%-4d", (int)pEntry->Aid);
+ sprintf(extra + strlen(extra), "%-4d", (int)pEntry->apidx);
+ sprintf(extra + strlen(extra), "%-7d", pEntry->RssiSample.AvgRssi0);
+ sprintf(extra + strlen(extra), "%-7d", pEntry->RssiSample.AvgRssi1);
+ sprintf(extra + strlen(extra), "%-7d", pEntry->RssiSample.AvgRssi2);
+ sprintf(extra + strlen(extra), "%-10s", GetPhyMode(pEntry->HTPhyMode.field.MODE));
+ sprintf(extra + strlen(extra), "%-6s", GetBW(pEntry->HTPhyMode.field.BW));
+ sprintf(extra + strlen(extra), "%-6d", pEntry->HTPhyMode.field.MCS);
+ sprintf(extra + strlen(extra), "%-6d", pEntry->HTPhyMode.field.ShortGI);
+ sprintf(extra + strlen(extra), "%-6d", pEntry->HTPhyMode.field.STBC);
+ sprintf(extra + strlen(extra), "%-10d, %d, %d%%\n", pEntry->DebugFIFOCount, pEntry->DebugTxCount,
+ (pEntry->DebugTxCount) ? ((pEntry->DebugTxCount-pEntry->DebugFIFOCount)*100/pEntry->DebugTxCount) : 0);
+ sprintf(extra, "%s\n", extra);
+ }
+ }
- DBGPRINT(RT_DEBUG_TRACE, ("IF Set_CarrierDetect_Proc::(CarrierDetect.Enable=%d)\n", pAd->CommonCfg.CarrierDetect.Enable));
return TRUE;
}
-#endif // CARRIER_DETECTION_SUPPORT //
-
+#endif /* RT2870 */
diff --git a/drivers/staging/rt2860/wpa.h b/drivers/staging/rt2860/wpa.h
index 0134ae6097cf..e6716748adfa 100644
--- a/drivers/staging/rt2860/wpa.h
+++ b/drivers/staging/rt2860/wpa.h
@@ -90,7 +90,9 @@
#define TKIP_AP_RXMICK_OFFSET (TKIP_AP_TXMICK_OFFSET+LEN_TKIP_TXMICK)
#define TKIP_GTK_LENGTH ((LEN_TKIP_EK)+(LEN_TKIP_RXMICK)+(LEN_TKIP_TXMICK))
#define LEN_PTK ((LEN_EAP_KEY)+(LEN_TKIP_KEY))
+#ifndef RT30xx
#define MIN_LEN_OF_GTK 5
+#endif
// RSN IE Length definition
#define MAX_LEN_OF_RSNIE 90
@@ -150,19 +152,6 @@
// EAPOL Key Information definition within Key descriptor format
typedef struct PACKED _KEY_INFO
{
-#ifdef RT_BIG_ENDIAN
- UCHAR KeyAck:1;
- UCHAR Install:1;
- UCHAR KeyIndex:2;
- UCHAR KeyType:1;
- UCHAR KeyDescVer:3;
- UCHAR Rsvd:3;
- UCHAR EKD_DL:1; // EKD for AP; DL for STA
- UCHAR Request:1;
- UCHAR Error:1;
- UCHAR Secure:1;
- UCHAR KeyMic:1;
-#else
UCHAR KeyMic:1;
UCHAR Secure:1;
UCHAR Error:1;
@@ -174,7 +163,6 @@ typedef struct PACKED _KEY_INFO
UCHAR KeyIndex:2;
UCHAR Install:1;
UCHAR KeyAck:1;
-#endif
} KEY_INFO, *PKEY_INFO;
// EAPOL Key descriptor format
@@ -204,17 +192,10 @@ typedef struct PACKED _EAPOL_PACKET
//802.11i D10 page 83
typedef struct PACKED _GTK_ENCAP
{
-#ifndef RT_BIG_ENDIAN
UCHAR Kid:2;
UCHAR tx:1;
UCHAR rsv:5;
UCHAR rsv1;
-#else
- UCHAR rsv:5;
- UCHAR tx:1;
- UCHAR Kid:2;
- UCHAR rsv1;
-#endif
UCHAR GTK[TKIP_GTK_LENGTH];
} GTK_ENCAP, *PGTK_ENCAP;
@@ -258,19 +239,11 @@ typedef struct PACKED _RSNIE_AUTH {
typedef union PACKED _RSN_CAPABILITIES {
struct PACKED {
-#ifdef RT_BIG_ENDIAN
- USHORT Rsvd:10;
- USHORT GTKSA_R_Counter:2;
- USHORT PTKSA_R_Counter:2;
- USHORT No_Pairwise:1;
- USHORT PreAuth:1;
-#else
USHORT PreAuth:1;
USHORT No_Pairwise:1;
USHORT PTKSA_R_Counter:2;
USHORT GTKSA_R_Counter:2;
USHORT Rsvd:10;
-#endif
} field;
USHORT word;
} RSN_CAPABILITIES, *PRSN_CAPABILITIES;