Staging: rtxxx0: remove superfluous RT30xx ifdefs
[linux-2.6/mini2440.git] / drivers / staging / rt2860 / rtmp.h
blob4c17cc5248cfca2e044aa4aba55831598b23c73c
1 /*
2 *************************************************************************
3 * Ralink Tech Inc.
4 * 5F., No.36, Taiyuan St., Jhubei City,
5 * Hsinchu County 302,
6 * Taiwan, R.O.C.
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
19 * *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
24 * *
25 *************************************************************************
27 Module Name:
28 rtmp.h
30 Abstract:
31 Miniport generic portion header file
33 Revision History:
34 Who When What
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
40 #ifndef __RTMP_H__
41 #define __RTMP_H__
43 #include "link_list.h"
44 #include "spectrum_def.h"
46 #include "aironet.h"
48 //#define DBG_DIAGNOSE 1
50 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
51 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
52 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
54 #ifdef RT2870
55 ////////////////////////////////////////////////////////////////////////////
56 // The TX_BUFFER structure forms the transmitted USB packet to the device
57 ////////////////////////////////////////////////////////////////////////////
58 typedef struct __TX_BUFFER{
59 union {
60 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
61 HEADER_802_11 NullFrame;
62 PSPOLL_FRAME PsPollPacket;
63 RTS_FRAME RTSFrame;
64 }field;
65 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
66 } TX_BUFFER, *PTX_BUFFER;
68 typedef struct __HTTX_BUFFER{
69 union {
70 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
71 HEADER_802_11 NullFrame;
72 PSPOLL_FRAME PsPollPacket;
73 RTS_FRAME RTSFrame;
74 }field;
75 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
76 } HTTX_BUFFER, *PHTTX_BUFFER;
79 // used to track driver-generated write irps
80 typedef struct _TX_CONTEXT
82 PVOID pAd; //Initialized in MiniportInitialize
83 PURB pUrb; //Initialized in MiniportInitialize
84 PIRP pIrp; //used to cancel pending bulk out.
85 //Initialized in MiniportInitialize
86 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
87 ULONG BulkOutSize;
88 UCHAR BulkOutPipeId;
89 UCHAR SelfIdx;
90 BOOLEAN InUse;
91 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
92 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
93 BOOLEAN IRPPending;
94 BOOLEAN LastOne;
95 BOOLEAN bAggregatible;
96 UCHAR Header_802_3[LENGTH_802_3];
97 UCHAR Rsv[2];
98 ULONG DataOffset;
99 UINT TxRate;
100 dma_addr_t data_dma; // urb dma on linux
102 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
105 // used to track driver-generated write irps
106 typedef struct _HT_TX_CONTEXT
108 PVOID pAd; //Initialized in MiniportInitialize
109 PURB pUrb; //Initialized in MiniportInitialize
110 PIRP pIrp; //used to cancel pending bulk out.
111 //Initialized in MiniportInitialize
112 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
113 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
114 UCHAR BulkOutPipeId;
115 BOOLEAN IRPPending;
116 BOOLEAN LastOne;
117 BOOLEAN bCurWriting;
118 BOOLEAN bRingEmpty;
119 BOOLEAN bCopySavePad;
120 UCHAR SavedPad[8];
121 UCHAR Header_802_3[LENGTH_802_3];
122 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
123 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
124 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
125 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
126 UINT TxRate;
127 dma_addr_t data_dma; // urb dma on linux
128 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
132 // Structure to keep track of receive packets and buffers to indicate
133 // receive data to the protocol.
135 typedef struct _RX_CONTEXT
137 PUCHAR TransferBuffer;
138 PVOID pAd;
139 PIRP pIrp;//used to cancel pending bulk in.
140 PURB pUrb;
141 //These 2 Boolean shouldn't both be 1 at the same time.
142 ULONG BulkInOffset; // number of packets waiting for reordering .
143 BOOLEAN bRxHandling; // Notify this packet is being process now.
144 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
145 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
146 BOOLEAN IRPPending; // TODO: To be removed
147 atomic_t IrpLock;
148 NDIS_SPIN_LOCK RxContextLock;
149 dma_addr_t data_dma; // urb dma on linux
150 } RX_CONTEXT, *PRX_CONTEXT;
151 #endif // RT2870 //
155 // NDIS Version definitions
157 #ifdef NDIS50_MINIPORT
158 #define RTMP_NDIS_MAJOR_VERSION 5
159 #define RTMP_NDIS_MINOR_VERSION 0
160 #endif
162 #ifdef NDIS51_MINIPORT
163 #define RTMP_NDIS_MAJOR_VERSION 5
164 #define RTMP_NDIS_MINOR_VERSION 1
165 #endif
167 extern char NIC_VENDOR_DESC[];
168 extern int NIC_VENDOR_DESC_LEN;
170 extern unsigned char SNAP_AIRONET[];
171 extern unsigned char CipherSuiteCiscoCCKM[];
172 extern unsigned char CipherSuiteCiscoCCKMLen;
173 extern unsigned char CipherSuiteCiscoCCKM24[];
174 extern unsigned char CipherSuiteCiscoCCKM24Len;
175 extern unsigned char CipherSuiteCCXTkip[];
176 extern unsigned char CipherSuiteCCXTkipLen;
177 extern unsigned char CISCO_OUI[];
178 extern UCHAR BaSizeArray[4];
180 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
181 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
182 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
183 extern ULONG BIT32[32];
184 extern UCHAR BIT8[8];
185 extern char* CipherName[];
186 extern char* MCSToMbps[];
187 extern UCHAR RxwiMCSToOfdmRate[12];
188 extern UCHAR SNAP_802_1H[6];
189 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
190 extern UCHAR SNAP_AIRONET[8];
191 extern UCHAR CKIP_LLC_SNAP[8];
192 extern UCHAR EAPOL_LLC_SNAP[8];
193 extern UCHAR EAPOL[2];
194 extern UCHAR IPX[2];
195 extern UCHAR APPLE_TALK[2];
196 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
197 extern UCHAR OfdmRateToRxwiMCS[];
198 extern UCHAR OfdmSignalToRateId[16] ;
199 extern UCHAR default_cwmin[4];
200 extern UCHAR default_cwmax[4];
201 extern UCHAR default_sta_aifsn[4];
202 extern UCHAR MapUserPriorityToAccessCategory[8];
204 extern USHORT RateUpPER[];
205 extern USHORT RateDownPER[];
206 extern UCHAR Phy11BNextRateDownward[];
207 extern UCHAR Phy11BNextRateUpward[];
208 extern UCHAR Phy11BGNextRateDownward[];
209 extern UCHAR Phy11BGNextRateUpward[];
210 extern UCHAR Phy11ANextRateDownward[];
211 extern UCHAR Phy11ANextRateUpward[];
212 extern CHAR RssiSafeLevelForTxRate[];
213 extern UCHAR RateIdToMbps[];
214 extern USHORT RateIdTo500Kbps[];
216 extern UCHAR CipherSuiteWpaNoneTkip[];
217 extern UCHAR CipherSuiteWpaNoneTkipLen;
219 extern UCHAR CipherSuiteWpaNoneAes[];
220 extern UCHAR CipherSuiteWpaNoneAesLen;
222 extern UCHAR SsidIe;
223 extern UCHAR SupRateIe;
224 extern UCHAR ExtRateIe;
226 extern UCHAR HtCapIe;
227 extern UCHAR AddHtInfoIe;
228 extern UCHAR NewExtChanIe;
230 extern UCHAR ErpIe;
231 extern UCHAR DsIe;
232 extern UCHAR TimIe;
233 extern UCHAR WpaIe;
234 extern UCHAR Wpa2Ie;
235 extern UCHAR IbssIe;
236 extern UCHAR Ccx2Ie;
237 #ifdef RT30xx
238 extern UCHAR WapiIe;
239 #endif
241 extern UCHAR WPA_OUI[];
242 extern UCHAR RSN_OUI[];
243 #ifdef RT30xx
244 extern UCHAR WAPI_OUI[];
245 #endif
246 extern UCHAR WME_INFO_ELEM[];
247 extern UCHAR WME_PARM_ELEM[];
248 extern UCHAR Ccx2QosInfo[];
249 extern UCHAR Ccx2IeInfo[];
250 extern UCHAR RALINK_OUI[];
251 extern UCHAR PowerConstraintIE[];
254 extern UCHAR RateSwitchTable[];
255 extern UCHAR RateSwitchTable11B[];
256 extern UCHAR RateSwitchTable11G[];
257 extern UCHAR RateSwitchTable11BG[];
259 extern UCHAR RateSwitchTable11BGN1S[];
260 extern UCHAR RateSwitchTable11BGN2S[];
261 extern UCHAR RateSwitchTable11BGN2SForABand[];
262 extern UCHAR RateSwitchTable11N1S[];
263 extern UCHAR RateSwitchTable11N2S[];
264 extern UCHAR RateSwitchTable11N2SForABand[];
266 extern UCHAR PRE_N_HT_OUI[];
268 #define MAXSEQ (0xFFF)
270 struct reordering_mpdu
272 struct reordering_mpdu *next;
273 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
274 int Sequence; /* sequence number of MPDU */
275 BOOLEAN bAMSDU;
278 struct reordering_list
280 struct reordering_mpdu *next;
281 int qlen;
284 struct reordering_mpdu_pool
286 PVOID mem;
287 NDIS_SPIN_LOCK lock;
288 struct reordering_list freelist;
291 typedef struct _RSSI_SAMPLE {
292 CHAR LastRssi0; // last received RSSI
293 CHAR LastRssi1; // last received RSSI
294 CHAR LastRssi2; // last received RSSI
295 CHAR AvgRssi0;
296 CHAR AvgRssi1;
297 CHAR AvgRssi2;
298 SHORT AvgRssi0X8;
299 SHORT AvgRssi1X8;
300 SHORT AvgRssi2X8;
301 } RSSI_SAMPLE;
304 // Queue structure and macros
306 typedef struct _QUEUE_ENTRY {
307 struct _QUEUE_ENTRY *Next;
308 } QUEUE_ENTRY, *PQUEUE_ENTRY;
310 // Queue structure
311 typedef struct _QUEUE_HEADER {
312 PQUEUE_ENTRY Head;
313 PQUEUE_ENTRY Tail;
314 ULONG Number;
315 } QUEUE_HEADER, *PQUEUE_HEADER;
317 #define InitializeQueueHeader(QueueHeader) \
319 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
320 (QueueHeader)->Number = 0; \
323 #define RemoveHeadQueue(QueueHeader) \
324 (QueueHeader)->Head; \
326 PQUEUE_ENTRY pNext; \
327 if ((QueueHeader)->Head != NULL) \
329 pNext = (QueueHeader)->Head->Next; \
330 (QueueHeader)->Head = pNext; \
331 if (pNext == NULL) \
332 (QueueHeader)->Tail = NULL; \
333 (QueueHeader)->Number--; \
337 #define InsertHeadQueue(QueueHeader, QueueEntry) \
339 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
340 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
341 if ((QueueHeader)->Tail == NULL) \
342 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
343 (QueueHeader)->Number++; \
346 #define InsertTailQueue(QueueHeader, QueueEntry) \
348 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
349 if ((QueueHeader)->Tail) \
350 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
351 else \
352 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
353 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
354 (QueueHeader)->Number++; \
358 // Macros for flag and ref count operations
360 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
361 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
362 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
363 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
364 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
366 #ifdef RT2860
367 // Macro for power save flag.
368 #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
369 #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
370 #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
371 #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
372 #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
373 #endif
375 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
376 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
377 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
379 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
380 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
381 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
383 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
384 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
385 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
387 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
388 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
389 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
390 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
392 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
394 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
395 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
398 #define INC_RING_INDEX(_idx, _RingSize) \
400 (_idx) = (_idx+1) % (_RingSize); \
403 #ifdef RT30xx
404 // We will have a cost down version which mac version is 0x3090xxxx
405 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
406 #else
407 #define IS_RT3090(_pAd) 0
408 #endif
409 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
410 #ifdef RT30xx
411 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
412 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
413 #endif
415 #define RING_PACKET_INIT(_TxRing, _idx) \
417 _TxRing->Cell[_idx].pNdisPacket = NULL; \
418 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
421 #define TXDT_INIT(_TxD) \
423 NdisZeroMemory(_TxD, TXD_SIZE); \
424 _TxD->DMADONE = 1; \
427 //Set last data segment
428 #define RING_SET_LASTDS(_TxD, _IsSD0) \
430 if (_IsSD0) {_TxD->LastSec0 = 1;} \
431 else {_TxD->LastSec1 = 1;} \
434 // Increase TxTsc value for next transmission
435 // TODO:
436 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
437 // Should send a special event microsoft defined to request re-key
438 #define INC_TX_TSC(_tsc) \
440 int i=0; \
441 while (++_tsc[i] == 0x0) \
443 i++; \
444 if (i == 6) \
445 break; \
449 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
450 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
452 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
453 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
454 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
455 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
456 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
457 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
458 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
459 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
460 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
461 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
462 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
463 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
466 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
468 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
469 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
470 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
474 // MACRO for 32-bit PCI register read / write
476 // Usage : RTMP_IO_READ32(
477 // PRTMP_ADAPTER pAd,
478 // ULONG Register_Offset,
479 // PULONG pValue)
481 // RTMP_IO_WRITE32(
482 // PRTMP_ADAPTER pAd,
483 // ULONG Register_Offset,
484 // ULONG Value)
488 // BBP & RF are using indirect access. Before write any value into it.
489 // We have to make sure there is no outstanding command pending via checking busy bit.
491 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
493 #ifdef RT2860
494 #define RTMP_RF_IO_WRITE32(_A, _V) \
496 PHY_CSR4_STRUC Value; \
497 ULONG BusyCnt = 0; \
498 if ((_A)->bPCIclkOff) \
500 return; \
502 do { \
503 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
504 if (Value.field.Busy == IDLE) \
505 break; \
506 BusyCnt++; \
507 } while (BusyCnt < MAX_BUSY_COUNT); \
508 if (BusyCnt < MAX_BUSY_COUNT) \
510 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
514 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
516 BBP_CSR_CFG_STRUC BbpCsr; \
517 int i, k; \
518 for (i=0; i<MAX_BUSY_COUNT; i++) \
520 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
521 if (BbpCsr.field.Busy == BUSY) \
523 continue; \
525 BbpCsr.word = 0; \
526 BbpCsr.field.fRead = 1; \
527 BbpCsr.field.BBP_RW_MODE = 1; \
528 BbpCsr.field.Busy = 1; \
529 BbpCsr.field.RegNum = _I; \
530 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
531 for (k=0; k<MAX_BUSY_COUNT; k++) \
533 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
534 if (BbpCsr.field.Busy == IDLE) \
535 break; \
537 if ((BbpCsr.field.Busy == IDLE) && \
538 (BbpCsr.field.RegNum == _I)) \
540 *(_pV) = (UCHAR)BbpCsr.field.Value; \
541 break; \
544 if (BbpCsr.field.Busy == BUSY) \
546 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
547 *(_pV) = (_A)->BbpWriteLatch[_I]; \
551 //#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
552 // Read BBP register by register's ID. Generate PER to test BA
553 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
555 BBP_CSR_CFG_STRUC BbpCsr; \
556 int i, k; \
557 if ((_A)->bPCIclkOff == FALSE) \
559 for (i=0; i<MAX_BUSY_COUNT; i++) \
561 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
562 if (BbpCsr.field.Busy == BUSY) \
564 continue; \
566 BbpCsr.word = 0; \
567 BbpCsr.field.fRead = 1; \
568 BbpCsr.field.BBP_RW_MODE = 1; \
569 BbpCsr.field.Busy = 1; \
570 BbpCsr.field.RegNum = _I; \
571 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
572 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
573 RTMPusecDelay(1000); \
574 for (k=0; k<MAX_BUSY_COUNT; k++) \
576 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
577 if (BbpCsr.field.Busy == IDLE) \
578 break; \
580 if ((BbpCsr.field.Busy == IDLE) && \
581 (BbpCsr.field.RegNum == _I)) \
583 *(_pV) = (UCHAR)BbpCsr.field.Value; \
584 break; \
587 if (BbpCsr.field.Busy == BUSY) \
589 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
590 *(_pV) = (_A)->BbpWriteLatch[_I]; \
591 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
592 BbpCsr.field.Busy = 0; \
593 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
598 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
600 BBP_CSR_CFG_STRUC BbpCsr; \
601 int BusyCnt; \
602 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
604 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
605 if (BbpCsr.field.Busy == BUSY) \
606 continue; \
607 BbpCsr.word = 0; \
608 BbpCsr.field.fRead = 0; \
609 BbpCsr.field.BBP_RW_MODE = 1; \
610 BbpCsr.field.Busy = 1; \
611 BbpCsr.field.Value = _V; \
612 BbpCsr.field.RegNum = _I; \
613 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
614 (_A)->BbpWriteLatch[_I] = _V; \
615 break; \
617 if (BusyCnt == MAX_BUSY_COUNT) \
619 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
623 // Write BBP register by register's ID & value
624 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
626 BBP_CSR_CFG_STRUC BbpCsr; \
627 int BusyCnt; \
628 if ((_A)->bPCIclkOff == FALSE) \
630 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
632 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
633 if (BbpCsr.field.Busy == BUSY) \
634 continue; \
635 BbpCsr.word = 0; \
636 BbpCsr.field.fRead = 0; \
637 BbpCsr.field.BBP_RW_MODE = 1; \
638 BbpCsr.field.Busy = 1; \
639 BbpCsr.field.Value = _V; \
640 BbpCsr.field.RegNum = _I; \
641 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
642 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
643 if (_A->OpMode == OPMODE_AP) \
644 RTMPusecDelay(1000); \
645 (_A)->BbpWriteLatch[_I] = _V; \
646 break; \
648 if (BusyCnt == MAX_BUSY_COUNT) \
650 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
651 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
652 BbpCsr.field.Busy = 0; \
653 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
657 #endif /* RT2860 */
658 #ifdef RT2870
659 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
660 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
661 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
663 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
664 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
665 #endif // RT2870 //
667 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
668 switch (ch) \
670 case 1: khz = 2412000; break; \
671 case 2: khz = 2417000; break; \
672 case 3: khz = 2422000; break; \
673 case 4: khz = 2427000; break; \
674 case 5: khz = 2432000; break; \
675 case 6: khz = 2437000; break; \
676 case 7: khz = 2442000; break; \
677 case 8: khz = 2447000; break; \
678 case 9: khz = 2452000; break; \
679 case 10: khz = 2457000; break; \
680 case 11: khz = 2462000; break; \
681 case 12: khz = 2467000; break; \
682 case 13: khz = 2472000; break; \
683 case 14: khz = 2484000; break; \
684 case 36: /* UNII */ khz = 5180000; break; \
685 case 40: /* UNII */ khz = 5200000; break; \
686 case 44: /* UNII */ khz = 5220000; break; \
687 case 48: /* UNII */ khz = 5240000; break; \
688 case 52: /* UNII */ khz = 5260000; break; \
689 case 56: /* UNII */ khz = 5280000; break; \
690 case 60: /* UNII */ khz = 5300000; break; \
691 case 64: /* UNII */ khz = 5320000; break; \
692 case 149: /* UNII */ khz = 5745000; break; \
693 case 153: /* UNII */ khz = 5765000; break; \
694 case 157: /* UNII */ khz = 5785000; break; \
695 case 161: /* UNII */ khz = 5805000; break; \
696 case 165: /* UNII */ khz = 5825000; break; \
697 case 100: /* HiperLAN2 */ khz = 5500000; break; \
698 case 104: /* HiperLAN2 */ khz = 5520000; break; \
699 case 108: /* HiperLAN2 */ khz = 5540000; break; \
700 case 112: /* HiperLAN2 */ khz = 5560000; break; \
701 case 116: /* HiperLAN2 */ khz = 5580000; break; \
702 case 120: /* HiperLAN2 */ khz = 5600000; break; \
703 case 124: /* HiperLAN2 */ khz = 5620000; break; \
704 case 128: /* HiperLAN2 */ khz = 5640000; break; \
705 case 132: /* HiperLAN2 */ khz = 5660000; break; \
706 case 136: /* HiperLAN2 */ khz = 5680000; break; \
707 case 140: /* HiperLAN2 */ khz = 5700000; break; \
708 case 34: /* Japan MMAC */ khz = 5170000; break; \
709 case 38: /* Japan MMAC */ khz = 5190000; break; \
710 case 42: /* Japan MMAC */ khz = 5210000; break; \
711 case 46: /* Japan MMAC */ khz = 5230000; break; \
712 case 184: /* Japan */ khz = 4920000; break; \
713 case 188: /* Japan */ khz = 4940000; break; \
714 case 192: /* Japan */ khz = 4960000; break; \
715 case 196: /* Japan */ khz = 4980000; break; \
716 case 208: /* Japan, means J08 */ khz = 5040000; break; \
717 case 212: /* Japan, means J12 */ khz = 5060000; break; \
718 case 216: /* Japan, means J16 */ khz = 5080000; break; \
719 default: khz = 2412000; break; \
723 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
724 switch (khz) \
726 case 2412000: ch = 1; break; \
727 case 2417000: ch = 2; break; \
728 case 2422000: ch = 3; break; \
729 case 2427000: ch = 4; break; \
730 case 2432000: ch = 5; break; \
731 case 2437000: ch = 6; break; \
732 case 2442000: ch = 7; break; \
733 case 2447000: ch = 8; break; \
734 case 2452000: ch = 9; break; \
735 case 2457000: ch = 10; break; \
736 case 2462000: ch = 11; break; \
737 case 2467000: ch = 12; break; \
738 case 2472000: ch = 13; break; \
739 case 2484000: ch = 14; break; \
740 case 5180000: ch = 36; /* UNII */ break; \
741 case 5200000: ch = 40; /* UNII */ break; \
742 case 5220000: ch = 44; /* UNII */ break; \
743 case 5240000: ch = 48; /* UNII */ break; \
744 case 5260000: ch = 52; /* UNII */ break; \
745 case 5280000: ch = 56; /* UNII */ break; \
746 case 5300000: ch = 60; /* UNII */ break; \
747 case 5320000: ch = 64; /* UNII */ break; \
748 case 5745000: ch = 149; /* UNII */ break; \
749 case 5765000: ch = 153; /* UNII */ break; \
750 case 5785000: ch = 157; /* UNII */ break; \
751 case 5805000: ch = 161; /* UNII */ break; \
752 case 5825000: ch = 165; /* UNII */ break; \
753 case 5500000: ch = 100; /* HiperLAN2 */ break; \
754 case 5520000: ch = 104; /* HiperLAN2 */ break; \
755 case 5540000: ch = 108; /* HiperLAN2 */ break; \
756 case 5560000: ch = 112; /* HiperLAN2 */ break; \
757 case 5580000: ch = 116; /* HiperLAN2 */ break; \
758 case 5600000: ch = 120; /* HiperLAN2 */ break; \
759 case 5620000: ch = 124; /* HiperLAN2 */ break; \
760 case 5640000: ch = 128; /* HiperLAN2 */ break; \
761 case 5660000: ch = 132; /* HiperLAN2 */ break; \
762 case 5680000: ch = 136; /* HiperLAN2 */ break; \
763 case 5700000: ch = 140; /* HiperLAN2 */ break; \
764 case 5170000: ch = 34; /* Japan MMAC */ break; \
765 case 5190000: ch = 38; /* Japan MMAC */ break; \
766 case 5210000: ch = 42; /* Japan MMAC */ break; \
767 case 5230000: ch = 46; /* Japan MMAC */ break; \
768 case 4920000: ch = 184; /* Japan */ break; \
769 case 4940000: ch = 188; /* Japan */ break; \
770 case 4960000: ch = 192; /* Japan */ break; \
771 case 4980000: ch = 196; /* Japan */ break; \
772 case 5040000: ch = 208; /* Japan, means J08 */ break; \
773 case 5060000: ch = 212; /* Japan, means J12 */ break; \
774 case 5080000: ch = 216; /* Japan, means J16 */ break; \
775 default: ch = 1; break; \
780 // Common fragment list structure - Identical to the scatter gather frag list structure
782 #define NIC_MAX_PHYS_BUF_COUNT 8
784 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
785 PVOID Address;
786 ULONG Length;
787 PULONG Reserved;
788 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
791 typedef struct _RTMP_SCATTER_GATHER_LIST {
792 ULONG NumberOfElements;
793 PULONG Reserved;
794 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
795 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
798 // Some utility macros
800 #ifndef min
801 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
802 #endif
804 #ifndef max
805 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
806 #endif
808 #define GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2))))
810 #define INC_COUNTER64(Val) (Val.QuadPart++)
812 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
813 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
814 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
815 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
817 // Check LEAP & CCKM flags
818 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
819 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
821 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
822 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
824 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
826 _pExtraLlcSnapEncap = SNAP_802_1H; \
827 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
828 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
830 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
833 else \
835 _pExtraLlcSnapEncap = NULL; \
839 // New Define for new Tx Path.
840 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
842 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
844 _pExtraLlcSnapEncap = SNAP_802_1H; \
845 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
846 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
848 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
851 else \
853 _pExtraLlcSnapEncap = NULL; \
858 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
860 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
861 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
862 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
865 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
866 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
867 // else remove the LLC/SNAP field from the result Ethernet frame
868 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
869 // Note:
870 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
871 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
872 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
874 char LLC_Len[2]; \
876 _pRemovedLLCSNAP = NULL; \
877 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
878 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
880 PUCHAR pProto = _pData + 6; \
882 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
883 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
885 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
886 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
887 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
889 else \
891 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
892 _pRemovedLLCSNAP = _pData; \
893 _DataSize -= LENGTH_802_1_H; \
894 _pData += LENGTH_802_1_H; \
897 else \
899 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
900 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
901 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
905 #define SWITCH_AB( _pAA, _pBB) \
907 PVOID pCC; \
908 pCC = _pBB; \
909 _pBB = _pAA; \
910 _pAA = pCC; \
913 // Enqueue this frame to MLME engine
914 // We need to enqueue the whole frame because MLME need to pass data type
915 // information from 802.11 header
916 #ifdef RT2860
917 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
919 UINT32 High32TSF, Low32TSF; \
920 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
921 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
922 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
924 #endif
925 #ifdef RT2870
926 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
928 UINT32 High32TSF=0, Low32TSF=0; \
929 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
931 #endif // RT2870 //
933 //Need to collect each ant's rssi concurrently
934 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
935 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
937 SHORT AvgRssi; \
938 UCHAR UsedAnt; \
939 if (_pAd->RxAnt.EvaluatePeriod == 0) \
941 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
942 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
943 if (AvgRssi < 0) \
944 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
945 else \
946 AvgRssi = _rssi1 << 3; \
947 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
949 else \
951 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
952 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
953 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
954 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
955 else \
957 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
958 AvgRssi = _rssi1 << 3; \
960 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
961 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
965 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
966 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
968 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
969 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
972 // Check if it is Japan W53(ch52,56,60,64) channel.
974 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
976 #ifdef RT2860
977 #define STA_PORT_SECURED(_pAd) \
979 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
980 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \
981 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \
982 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
983 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
985 #endif
986 #ifdef RT2870
987 #define STA_PORT_SECURED(_pAd) \
989 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
990 NdisAcquireSpinLock(&_pAd->MacTabLock); \
991 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
992 NdisReleaseSpinLock(&_pAd->MacTabLock); \
994 #endif
997 // Register set pair for initialzation register set definition
999 typedef struct _RTMP_REG_PAIR
1001 ULONG Register;
1002 ULONG Value;
1003 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
1005 typedef struct _REG_PAIR
1007 UCHAR Register;
1008 UCHAR Value;
1009 } REG_PAIR, *PREG_PAIR;
1012 // Register set pair for initialzation register set definition
1014 typedef struct _RTMP_RF_REGS
1016 UCHAR Channel;
1017 ULONG R1;
1018 ULONG R2;
1019 ULONG R3;
1020 ULONG R4;
1021 } RTMP_RF_REGS, *PRTMP_RF_REGS;
1023 typedef struct _FREQUENCY_ITEM {
1024 UCHAR Channel;
1025 UCHAR N;
1026 UCHAR R;
1027 UCHAR K;
1028 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
1031 // Data buffer for DMA operation, the buffer must be contiguous physical memory
1032 // Both DMA to / from CPU use the same structure.
1034 typedef struct _RTMP_DMABUF
1036 ULONG AllocSize;
1037 PVOID AllocVa; // TxBuf virtual address
1038 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
1039 } RTMP_DMABUF, *PRTMP_DMABUF;
1042 typedef union _HEADER_802_11_SEQ{
1043 struct {
1044 USHORT Frag:4;
1045 USHORT Sequence:12;
1046 } field;
1047 USHORT value;
1048 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
1051 // Data buffer for DMA operation, the buffer must be contiguous physical memory
1052 // Both DMA to / from CPU use the same structure.
1054 typedef struct _RTMP_REORDERBUF
1056 BOOLEAN IsFull;
1057 PVOID AllocVa; // TxBuf virtual address
1058 UCHAR Header802_3[14];
1059 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
1060 UCHAR DataOffset;
1061 USHORT Datasize;
1062 ULONG AllocSize;
1063 #ifdef RT2860
1064 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
1065 #endif
1066 #ifdef RT2870
1067 PUCHAR AllocPa;
1068 #endif // RT2870 //
1069 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1072 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1073 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1074 // which won't be released, driver has to wait until upper layer return the packet
1075 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1076 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1077 // which driver should ACK upper layer when the tx is physically done or failed.
1079 typedef struct _RTMP_DMACB
1081 ULONG AllocSize; // Control block size
1082 PVOID AllocVa; // Control block virtual address
1083 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1084 PNDIS_PACKET pNdisPacket;
1085 PNDIS_PACKET pNextNdisPacket;
1087 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1088 } RTMP_DMACB, *PRTMP_DMACB;
1090 typedef struct _RTMP_TX_BUF
1092 PQUEUE_ENTRY Next;
1093 UCHAR Index;
1094 ULONG AllocSize; // Control block size
1095 PVOID AllocVa; // Control block virtual address
1096 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1097 } RTMP_TXBUF, *PRTMP_TXBUF;
1099 typedef struct _RTMP_RX_BUF
1101 BOOLEAN InUse;
1102 ULONG ByBaRecIndex;
1103 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1104 } RTMP_RXBUF, *PRTMP_RXBUF;
1105 typedef struct _RTMP_TX_RING
1107 RTMP_DMACB Cell[TX_RING_SIZE];
1108 UINT32 TxCpuIdx;
1109 UINT32 TxDmaIdx;
1110 UINT32 TxSwFreeIdx; // software next free tx index
1111 } RTMP_TX_RING, *PRTMP_TX_RING;
1113 typedef struct _RTMP_RX_RING
1115 RTMP_DMACB Cell[RX_RING_SIZE];
1116 UINT32 RxCpuIdx;
1117 UINT32 RxDmaIdx;
1118 INT32 RxSwReadIdx; // software next read index
1119 } RTMP_RX_RING, *PRTMP_RX_RING;
1121 typedef struct _RTMP_MGMT_RING
1123 RTMP_DMACB Cell[MGMT_RING_SIZE];
1124 UINT32 TxCpuIdx;
1125 UINT32 TxDmaIdx;
1126 UINT32 TxSwFreeIdx; // software next free tx index
1127 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1130 // Statistic counter structure
1132 typedef struct _COUNTER_802_3
1134 // General Stats
1135 ULONG GoodTransmits;
1136 ULONG GoodReceives;
1137 ULONG TxErrors;
1138 ULONG RxErrors;
1139 ULONG RxNoBuffer;
1141 // Ethernet Stats
1142 ULONG RcvAlignmentErrors;
1143 ULONG OneCollision;
1144 ULONG MoreCollisions;
1146 } COUNTER_802_3, *PCOUNTER_802_3;
1148 typedef struct _COUNTER_802_11 {
1149 ULONG Length;
1150 LARGE_INTEGER LastTransmittedFragmentCount;
1151 LARGE_INTEGER TransmittedFragmentCount;
1152 LARGE_INTEGER MulticastTransmittedFrameCount;
1153 LARGE_INTEGER FailedCount;
1154 LARGE_INTEGER RetryCount;
1155 LARGE_INTEGER MultipleRetryCount;
1156 LARGE_INTEGER RTSSuccessCount;
1157 LARGE_INTEGER RTSFailureCount;
1158 LARGE_INTEGER ACKFailureCount;
1159 LARGE_INTEGER FrameDuplicateCount;
1160 LARGE_INTEGER ReceivedFragmentCount;
1161 LARGE_INTEGER MulticastReceivedFrameCount;
1162 LARGE_INTEGER FCSErrorCount;
1163 } COUNTER_802_11, *PCOUNTER_802_11;
1165 typedef struct _COUNTER_RALINK {
1166 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1167 #ifdef RT2860
1168 ULONG LastReceivedByteCount;
1169 #endif
1170 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1171 ULONG BeenDisassociatedCount;
1172 ULONG BadCQIAutoRecoveryCount;
1173 ULONG PoorCQIRoamingCount;
1174 ULONG MgmtRingFullCount;
1175 ULONG RxCountSinceLastNULL;
1176 ULONG RxCount;
1177 ULONG RxRingErrCount;
1178 ULONG KickTxCount;
1179 ULONG TxRingErrCount;
1180 LARGE_INTEGER RealFcsErrCount;
1181 ULONG PendingNdisPacketCount;
1183 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1184 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1185 UINT32 OneSecTxDoneCount;
1186 ULONG OneSecRxCount;
1187 UINT32 OneSecTxAggregationCount;
1188 UINT32 OneSecRxAggregationCount;
1190 UINT32 OneSecFrameDuplicateCount;
1192 #ifdef RT2870
1193 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1194 #endif // RT2870 //
1196 UINT32 OneSecTxNoRetryOkCount;
1197 UINT32 OneSecTxRetryOkCount;
1198 UINT32 OneSecTxFailCount;
1199 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1200 UINT32 OneSecRxOkCnt; // RX without error
1201 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1202 UINT32 OneSecRxFcsErrCnt; // CRC error
1203 UINT32 OneSecBeaconSentCnt;
1204 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1205 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1206 ULONG DuplicateRcv;
1207 ULONG TxAggCount;
1208 ULONG TxNonAggCount;
1209 ULONG TxAgg1MPDUCount;
1210 ULONG TxAgg2MPDUCount;
1211 ULONG TxAgg3MPDUCount;
1212 ULONG TxAgg4MPDUCount;
1213 ULONG TxAgg5MPDUCount;
1214 ULONG TxAgg6MPDUCount;
1215 ULONG TxAgg7MPDUCount;
1216 ULONG TxAgg8MPDUCount;
1217 ULONG TxAgg9MPDUCount;
1218 ULONG TxAgg10MPDUCount;
1219 ULONG TxAgg11MPDUCount;
1220 ULONG TxAgg12MPDUCount;
1221 ULONG TxAgg13MPDUCount;
1222 ULONG TxAgg14MPDUCount;
1223 ULONG TxAgg15MPDUCount;
1224 ULONG TxAgg16MPDUCount;
1226 LARGE_INTEGER TransmittedOctetsInAMSDU;
1227 LARGE_INTEGER TransmittedAMSDUCount;
1228 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1229 LARGE_INTEGER ReceivedAMSDUCount;
1230 LARGE_INTEGER TransmittedAMPDUCount;
1231 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1232 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1233 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1234 } COUNTER_RALINK, *PCOUNTER_RALINK;
1236 typedef struct _PID_COUNTER {
1237 ULONG TxAckRequiredCount; // CRC error
1238 ULONG TxAggreCount;
1239 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1240 ULONG LastSuccessRate;
1241 } PID_COUNTER, *PPID_COUNTER;
1243 typedef struct _COUNTER_DRS {
1244 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1245 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1246 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1247 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1248 ULONG CurrTxRateStableTime; // # of second in current TX rate
1249 BOOLEAN fNoisyEnvironment;
1250 BOOLEAN fLastSecAccordingRSSI;
1251 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1252 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1253 ULONG LastTxOkCount;
1254 } COUNTER_DRS, *PCOUNTER_DRS;
1257 // Arcfour Structure Added by PaulWu
1259 typedef struct _ARCFOUR
1261 UINT X;
1262 UINT Y;
1263 UCHAR STATE[256];
1264 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1266 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1267 typedef struct _RECEIVE_SETTING {
1268 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1269 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1270 USHORT ShortGI:1;
1271 USHORT STBC:2; //SPACE
1272 USHORT rsv:3;
1273 USHORT OFDM:1;
1274 USHORT MIMO:1;
1275 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1277 // Shared key data structure
1278 typedef struct _WEP_KEY {
1279 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1280 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1281 } WEP_KEY, *PWEP_KEY;
1283 typedef struct _CIPHER_KEY {
1284 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1285 UCHAR RxMic[8]; // make alignment
1286 UCHAR TxMic[8];
1287 UCHAR TxTsc[6]; // 48bit TSC value
1288 UCHAR RxTsc[6]; // 48bit TSC value
1289 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1290 UCHAR KeyLen;
1291 UCHAR BssId[6];
1292 // Key length for each key, 0: entry is invalid
1293 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1294 } CIPHER_KEY, *PCIPHER_KEY;
1296 typedef struct _BBP_TUNING_STRUCT {
1297 BOOLEAN Enable;
1298 UCHAR FalseCcaCountUpperBound; // 100 per sec
1299 UCHAR FalseCcaCountLowerBound; // 10 per sec
1300 UCHAR R17LowerBound; // specified in E2PROM
1301 UCHAR R17UpperBound; // 0x68 according to David Tung
1302 UCHAR CurrentR17Value;
1303 } BBP_TUNING, *PBBP_TUNING;
1305 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1306 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1307 #ifdef RT30xx
1308 UCHAR EvaluateStableCnt;
1309 #endif
1310 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1311 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1312 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1313 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1314 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1315 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1316 SHORT Pair1LastAvgRssi; //
1317 SHORT Pair2LastAvgRssi; //
1318 ULONG RcvPktNumWhenEvaluate;
1319 BOOLEAN FirstPktArrivedWhenEvaluate;
1320 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1321 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1323 typedef struct _LEAP_AUTH_INFO {
1324 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1325 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1326 UCHAR Reserve[2];
1327 UCHAR UserName[256]; //LEAP, User name
1328 ULONG UserNameLen;
1329 UCHAR Password[256]; //LEAP, User Password
1330 ULONG PasswordLen;
1331 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1333 typedef struct {
1334 UCHAR Addr[MAC_ADDR_LEN];
1335 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1336 //00 02-Authentication timeout
1337 //00 03-Challenge from AP failed
1338 //00 04-Challenge to AP failed
1339 BOOLEAN Reported;
1340 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1342 typedef struct {
1343 UCHAR RogueApNr;
1344 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1345 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1347 typedef struct {
1348 BOOLEAN Enable;
1349 UCHAR Delta;
1350 BOOLEAN PlusSign;
1351 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1354 // Receive Tuple Cache Format
1356 typedef struct _TUPLE_CACHE {
1357 BOOLEAN Valid;
1358 UCHAR MacAddress[MAC_ADDR_LEN];
1359 USHORT Sequence;
1360 USHORT Frag;
1361 } TUPLE_CACHE, *PTUPLE_CACHE;
1364 // Fragment Frame structure
1366 typedef struct _FRAGMENT_FRAME {
1367 PNDIS_PACKET pFragPacket;
1368 ULONG RxSize;
1369 USHORT Sequence;
1370 USHORT LastFrag;
1371 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1372 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1376 // Packet information for NdisQueryPacket
1378 typedef struct _PACKET_INFO {
1379 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1380 UINT BufferCount ; // Number of Buffer descriptor chained
1381 UINT TotalPacketLength ; // Self explained
1382 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1383 } PACKET_INFO, *PPACKET_INFO;
1386 // Tkip Key structure which RC4 key & MIC calculation
1388 typedef struct _TKIP_KEY_INFO {
1389 UINT nBytesInM; // # bytes in M for MICKEY
1390 ULONG IV16;
1391 ULONG IV32;
1392 ULONG K0; // for MICKEY Low
1393 ULONG K1; // for MICKEY Hig
1394 ULONG L; // Current state for MICKEY
1395 ULONG R; // Current state for MICKEY
1396 ULONG M; // Message accumulator for MICKEY
1397 UCHAR RC4KEY[16];
1398 UCHAR MIC[8];
1399 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1402 // Private / Misc data, counters for driver internal use
1404 typedef struct __PRIVATE_STRUC {
1405 UINT SystemResetCnt; // System reset counter
1406 UINT TxRingFullCnt; // Tx ring full occurrance number
1407 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1408 // Variables for WEP encryption / decryption in rtmp_wep.c
1409 UINT FCSCRC32;
1410 ARCFOURCONTEXT WEPCONTEXT;
1411 // Tkip stuff
1412 TKIP_KEY_INFO Tx;
1413 TKIP_KEY_INFO Rx;
1414 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1416 // structure to tune BBP R66 (BBP TUNING)
1417 typedef struct _BBP_R66_TUNING {
1418 BOOLEAN bEnable;
1419 USHORT FalseCcaLowerThreshold; // default 100
1420 USHORT FalseCcaUpperThreshold; // default 512
1421 UCHAR R66Delta;
1422 UCHAR R66CurrentValue;
1423 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1424 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1426 // structure to store channel TX power
1427 typedef struct _CHANNEL_TX_POWER {
1428 USHORT RemainingTimeForUse; //unit: sec
1429 UCHAR Channel;
1430 CHAR Power;
1431 CHAR Power2;
1432 UCHAR MaxTxPwr;
1433 UCHAR DfsReq;
1434 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1436 // structure to store 802.11j channel TX power
1437 typedef struct _CHANNEL_11J_TX_POWER {
1438 UCHAR Channel;
1439 UCHAR BW; // BW_10 or BW_20
1440 CHAR Power;
1441 CHAR Power2;
1442 USHORT RemainingTimeForUse; //unit: sec
1443 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1445 typedef enum _ABGBAND_STATE_ {
1446 UNKNOWN_BAND,
1447 BG_BAND,
1448 A_BAND,
1449 } ABGBAND_STATE;
1451 typedef struct _MLME_STRUCT {
1452 // STA state machines
1453 STATE_MACHINE CntlMachine;
1454 STATE_MACHINE AssocMachine;
1455 STATE_MACHINE AuthMachine;
1456 STATE_MACHINE AuthRspMachine;
1457 STATE_MACHINE SyncMachine;
1458 STATE_MACHINE WpaPskMachine;
1459 STATE_MACHINE LeapMachine;
1460 STATE_MACHINE AironetMachine;
1461 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1462 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1463 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1464 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1465 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1466 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1467 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1468 // Action
1469 STATE_MACHINE ActMachine;
1471 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1472 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1473 ULONG LastSendNULLpsmTime;
1475 BOOLEAN bRunning;
1476 NDIS_SPIN_LOCK TaskLock;
1477 MLME_QUEUE Queue;
1479 UINT ShiftReg;
1481 RALINK_TIMER_STRUCT PeriodicTimer;
1482 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1483 RALINK_TIMER_STRUCT LinkDownTimer;
1484 RALINK_TIMER_STRUCT LinkUpTimer;
1485 #ifdef RT2860
1486 UCHAR bPsPollTimerRunning;
1487 RALINK_TIMER_STRUCT PsPollTimer;
1488 RALINK_TIMER_STRUCT RadioOnOffTimer;
1489 #endif
1490 ULONG PeriodicRound;
1491 ULONG OneSecPeriodicRound;
1493 UCHAR RealRxPath;
1494 BOOLEAN bLowThroughput;
1495 BOOLEAN bEnableAutoAntennaCheck;
1496 RALINK_TIMER_STRUCT RxAntEvalTimer;
1498 #ifdef RT2870
1499 UCHAR CaliBW40RfR24;
1500 UCHAR CaliBW20RfR24;
1501 #endif // RT2870 //
1502 } MLME_STRUCT, *PMLME_STRUCT;
1504 // structure for radar detection and channel switch
1505 typedef struct _RADAR_DETECT_STRUCT {
1506 UCHAR CSCount; //Channel switch counter
1507 UCHAR CSPeriod; //Channel switch period (beacon count)
1508 UCHAR RDCount; //Radar detection counter
1509 UCHAR RDMode; //Radar Detection mode
1510 UCHAR RDDurRegion; //Radar detection duration region
1511 UCHAR BBPR16;
1512 UCHAR BBPR17;
1513 UCHAR BBPR18;
1514 UCHAR BBPR21;
1515 UCHAR BBPR22;
1516 UCHAR BBPR64;
1517 ULONG InServiceMonitorCount; // unit: sec
1518 UINT8 DfsSessionTime;
1519 BOOLEAN bFastDfs;
1520 UINT8 ChMovingTime;
1521 UINT8 LongPulseRadarTh;
1522 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1524 typedef enum _REC_BLOCKACK_STATUS
1526 Recipient_NONE=0,
1527 Recipient_USED,
1528 Recipient_HandleRes,
1529 Recipient_Accept
1530 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1532 typedef enum _ORI_BLOCKACK_STATUS
1534 Originator_NONE=0,
1535 Originator_USED,
1536 Originator_WaitRes,
1537 Originator_Done
1538 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1540 typedef struct _BA_ORI_ENTRY{
1541 UCHAR Wcid;
1542 UCHAR TID;
1543 UCHAR BAWinSize;
1544 UCHAR Token;
1545 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1546 USHORT Sequence;
1547 USHORT TimeOutValue;
1548 ORI_BLOCKACK_STATUS ORI_BA_Status;
1549 RALINK_TIMER_STRUCT ORIBATimer;
1550 PVOID pAdapter;
1551 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1553 typedef struct _BA_REC_ENTRY {
1554 UCHAR Wcid;
1555 UCHAR TID;
1556 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1557 USHORT LastIndSeq;
1558 USHORT TimeOutValue;
1559 RALINK_TIMER_STRUCT RECBATimer;
1560 ULONG LastIndSeqAtTimer;
1561 ULONG nDropPacket;
1562 ULONG rcvSeq;
1563 REC_BLOCKACK_STATUS REC_BA_Status;
1564 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1565 PVOID pAdapter;
1566 struct reordering_list list;
1567 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1570 typedef struct {
1571 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1572 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1573 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1574 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1575 } BA_TABLE, *PBA_TABLE;
1577 //For QureyBATableOID use;
1578 typedef struct PACKED _OID_BA_REC_ENTRY{
1579 UCHAR MACAddr[MAC_ADDR_LEN];
1580 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1581 UCHAR rsv;
1582 UCHAR BufSize[8];
1583 REC_BLOCKACK_STATUS REC_BA_Status[8];
1584 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1586 //For QureyBATableOID use;
1587 typedef struct PACKED _OID_BA_ORI_ENTRY{
1588 UCHAR MACAddr[MAC_ADDR_LEN];
1589 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
1590 UCHAR rsv;
1591 UCHAR BufSize[8];
1592 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1593 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1595 typedef struct _QUERYBA_TABLE{
1596 OID_BA_ORI_ENTRY BAOriEntry[32];
1597 OID_BA_REC_ENTRY BARecEntry[32];
1598 UCHAR OriNum;// Number of below BAOriEntry
1599 UCHAR RecNum;// Number of below BARecEntry
1600 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1602 typedef union _BACAP_STRUC {
1603 struct {
1604 UINT32 RxBAWinLimit:8;
1605 UINT32 TxBAWinLimit:8;
1606 UINT32 AutoBA:1; // automatically BA
1607 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1608 UINT32 MpduDensity:3;
1609 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1610 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1611 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1612 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1613 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.
1614 UINT32 :4;
1615 } field;
1616 UINT32 word;
1617 } BACAP_STRUC, *PBACAP_STRUC;
1619 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1620 typedef struct _IOT_STRUC {
1621 UCHAR Threshold[2];
1622 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1623 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1624 ULONG OneSecInWindowCount;
1625 ULONG OneSecFrameDuplicateCount;
1626 ULONG OneSecOutWindowCount;
1627 UCHAR DelOriAct;
1628 UCHAR DelRecAct;
1629 UCHAR RTSShortProt;
1630 UCHAR RTSLongProt;
1631 BOOLEAN bRTSLongProtOn;
1632 BOOLEAN bLastAtheros;
1633 BOOLEAN bCurrentAtheros;
1634 BOOLEAN bNowAtherosBurstOn;
1635 BOOLEAN bNextDisableRxBA;
1636 BOOLEAN bToggle;
1637 } IOT_STRUC, *PIOT_STRUC;
1639 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1640 typedef union _REG_TRANSMIT_SETTING {
1641 struct {
1642 UINT32 rsv0:10;
1643 UINT32 TxBF:1;
1644 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1645 UINT32 ShortGI:1;
1646 UINT32 STBC:1; //SPACE
1647 UINT32 TRANSNO:2;
1648 UINT32 HTMODE:1;
1649 UINT32 EXTCHA:2;
1650 UINT32 rsv:13;
1651 } field;
1652 UINT32 word;
1653 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1655 typedef union _DESIRED_TRANSMIT_SETTING {
1656 struct {
1657 USHORT MCS:7; // MCS
1658 USHORT PhyMode:4;
1659 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1660 USHORT rsv:3;
1661 } field;
1662 USHORT word;
1663 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1665 typedef struct {
1666 BOOLEAN IsRecipient;
1667 UCHAR MACAddr[MAC_ADDR_LEN];
1668 UCHAR TID;
1669 UCHAR nMSDU;
1670 USHORT TimeOut;
1671 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1672 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1675 // Multiple SSID structure
1677 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1678 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1680 /* clear bcmc TIM bit */
1681 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1682 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1684 /* set bcmc TIM bit */
1685 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1686 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1688 /* clear a station PS TIM bit */
1689 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1690 { UCHAR tim_offset = wcid >> 3; \
1691 UCHAR bit_offset = wcid & 0x7; \
1692 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1694 /* set a station PS TIM bit */
1695 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1696 { UCHAR tim_offset = wcid >> 3; \
1697 UCHAR bit_offset = wcid & 0x7; \
1698 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1700 #ifdef RT2870
1701 #define BEACON_BITMAP_MASK 0xff
1702 typedef struct _BEACON_SYNC_STRUCT_
1704 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1705 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1706 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1707 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1708 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1709 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1710 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1711 }BEACON_SYNC_STRUCT;
1712 #endif // RT2870 //
1714 typedef struct _MULTISSID_STRUCT {
1715 UCHAR Bssid[MAC_ADDR_LEN];
1716 UCHAR SsidLen;
1717 CHAR Ssid[MAX_LEN_OF_SSID];
1718 USHORT CapabilityInfo;
1720 PNET_DEV MSSIDDev;
1722 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1723 NDIS_802_11_WEP_STATUS WepStatus;
1724 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1725 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1727 ULONG TxCount;
1728 ULONG RxCount;
1729 ULONG ReceivedByteCount;
1730 ULONG TransmittedByteCount;
1731 ULONG RxErrorCount;
1732 ULONG RxDropCount;
1734 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1735 RT_HT_PHY_INFO DesiredHtPhyInfo;
1736 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1737 BOOLEAN bAutoTxRateSwitch;
1739 UCHAR DefaultKeyId;
1741 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1742 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1743 UCHAR DesiredRatesIndex;
1744 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1746 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1748 // WPA
1749 UCHAR GMK[32];
1750 UCHAR PMK[32];
1751 UCHAR GTK[32];
1752 BOOLEAN IEEE8021X;
1753 BOOLEAN PreAuth;
1754 UCHAR GNonce[32];
1755 UCHAR PortSecured;
1756 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1757 UCHAR BANClass3Data;
1758 ULONG IsolateInterStaTraffic;
1760 UCHAR RSNIE_Len[2];
1761 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1764 UCHAR TimIELocationInBeacon;
1765 UCHAR CapabilityInfoLocationInBeacon;
1766 // outgoing BEACON frame buffer and corresponding TXWI
1767 // PTXWI_STRUC BeaconTxWI; //
1768 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1770 BOOLEAN bHideSsid;
1771 UINT16 StationKeepAliveTime; // unit: second
1773 USHORT VLAN_VID;
1774 USHORT VLAN_Priority;
1776 RT_802_11_ACL AccessControlList;
1778 // EDCA Qos
1779 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1780 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1782 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1784 // For 802.1x daemon setting per BSS
1785 UCHAR radius_srv_num;
1786 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1788 #ifdef RTL865X_SOC
1789 unsigned int mylinkid;
1790 #endif
1793 UINT32 RcvdConflictSsidCount;
1794 UINT32 RcvdSpoofedAssocRespCount;
1795 UINT32 RcvdSpoofedReassocRespCount;
1796 UINT32 RcvdSpoofedProbeRespCount;
1797 UINT32 RcvdSpoofedBeaconCount;
1798 UINT32 RcvdSpoofedDisassocCount;
1799 UINT32 RcvdSpoofedAuthCount;
1800 UINT32 RcvdSpoofedDeauthCount;
1801 UINT32 RcvdSpoofedUnknownMgmtCount;
1802 UINT32 RcvdReplayAttackCount;
1804 CHAR RssiOfRcvdConflictSsid;
1805 CHAR RssiOfRcvdSpoofedAssocResp;
1806 CHAR RssiOfRcvdSpoofedReassocResp;
1807 CHAR RssiOfRcvdSpoofedProbeResp;
1808 CHAR RssiOfRcvdSpoofedBeacon;
1809 CHAR RssiOfRcvdSpoofedDisassoc;
1810 CHAR RssiOfRcvdSpoofedAuth;
1811 CHAR RssiOfRcvdSpoofedDeauth;
1812 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1813 CHAR RssiOfRcvdReplayAttack;
1815 BOOLEAN bBcnSntReq;
1816 UCHAR BcnBufIdx;
1817 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1819 // configuration common to OPMODE_AP as well as OPMODE_STA
1820 typedef struct _COMMON_CONFIG {
1822 BOOLEAN bCountryFlag;
1823 UCHAR CountryCode[3];
1824 UCHAR Geography;
1825 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1826 UCHAR CountryRegionForABand; // Enum of country region for A band
1827 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1828 USHORT Dsifs; // in units of usec
1829 ULONG PacketFilter; // Packet filter for receiving
1831 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1832 UCHAR SsidLen; // the actual ssid length in used
1833 UCHAR LastSsidLen; // the actual ssid length in used
1834 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1835 UCHAR LastBssid[MAC_ADDR_LEN];
1837 UCHAR Bssid[MAC_ADDR_LEN];
1838 USHORT BeaconPeriod;
1839 UCHAR Channel;
1840 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1842 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1843 UCHAR SupRateLen;
1844 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1845 UCHAR ExtRateLen;
1846 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1847 UCHAR MaxDesiredRate;
1848 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1850 ULONG BasicRateBitmap; // backup basic ratebitmap
1852 BOOLEAN bAPSDCapable;
1853 BOOLEAN bInServicePeriod;
1854 BOOLEAN bAPSDAC_BE;
1855 BOOLEAN bAPSDAC_BK;
1856 BOOLEAN bAPSDAC_VI;
1857 BOOLEAN bAPSDAC_VO;
1858 BOOLEAN bNeedSendTriggerFrame;
1859 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1860 ULONG TriggerTimerCount;
1861 UCHAR MaxSPLength;
1862 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1863 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1864 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1865 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1866 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1867 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1868 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1869 UCHAR RtsRate; // RATE_xxx
1870 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1871 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1872 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1874 USHORT RtsThreshold; // in unit of BYTE
1875 USHORT FragmentThreshold; // in unit of BYTE
1877 UCHAR TxPower; // in unit of mW
1878 ULONG TxPowerPercentage; // 0~100 %
1879 ULONG TxPowerDefault; // keep for TxPowerPercentage
1881 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1882 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1884 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1885 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1886 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1887 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1888 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1889 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1890 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1891 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1892 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1893 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1895 BOOLEAN bRdg;
1897 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1898 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1899 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1900 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1901 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1902 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1903 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1904 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1905 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1906 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1907 ULONG OpStatusFlags;
1909 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1910 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1911 #ifdef RT30xx
1912 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1913 #endif
1915 // IEEE802.11H--DFS.
1916 RADAR_DETECT_STRUCT RadarDetect;
1918 // HT
1919 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1920 //RT_HT_CAPABILITY SupportedHtPhy;
1921 RT_HT_CAPABILITY DesiredHtPhy;
1922 HT_CAPABILITY_IE HtCapability;
1923 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1924 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1925 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1926 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
1928 BOOLEAN bHTProtect;
1929 BOOLEAN bMIMOPSEnable;
1930 BOOLEAN bBADecline;
1931 BOOLEAN bDisableReordering;
1932 BOOLEAN bForty_Mhz_Intolerant;
1933 BOOLEAN bExtChannelSwitchAnnouncement;
1934 BOOLEAN bRcvBSSWidthTriggerEvents;
1935 ULONG LastRcvBSSWidthTriggerEventsTime;
1937 UCHAR TxBASize;
1939 // Enable wireless event
1940 BOOLEAN bWirelessEvent;
1941 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1943 // Tx & Rx Stream number selection
1944 UCHAR TxStream;
1945 UCHAR RxStream;
1947 // transmit phy mode, trasmit rate for Multicast.
1948 #ifdef MCAST_RATE_SPECIFIC
1949 UCHAR McastTransmitMcs;
1950 UCHAR McastTransmitPhyMode;
1951 #endif // MCAST_RATE_SPECIFIC //
1953 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1955 #ifdef RT2870
1956 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1957 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1958 RT_HT_CAPABILITY SupportedHtPhy;
1959 ULONG MaxPktOneTxBulk;
1960 UCHAR TxBulkFactor;
1961 UCHAR RxBulkFactor;
1963 BEACON_SYNC_STRUCT *pBeaconSync;
1964 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1965 UINT32 BeaconAdjust;
1966 UINT32 BeaconFactor;
1967 UINT32 BeaconRemain;
1968 #endif // RT2870 //
1971 NDIS_SPIN_LOCK MeasureReqTabLock;
1972 PMEASURE_REQ_TAB pMeasureReqTab;
1974 NDIS_SPIN_LOCK TpcReqTabLock;
1975 PTPC_REQ_TAB pTpcReqTab;
1977 // transmit phy mode, trasmit rate for Multicast.
1978 #ifdef MCAST_RATE_SPECIFIC
1979 HTTRANSMIT_SETTING MCastPhyMode;
1980 #endif // MCAST_RATE_SPECIFIC //
1981 } COMMON_CONFIG, *PCOMMON_CONFIG;
1983 /* Modified by Wu Xi-Kun 4/21/2006 */
1984 // STA configuration and status
1985 typedef struct _STA_ADMIN_CONFIG {
1986 // GROUP 1 -
1987 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1988 // the user intended configuration, but not necessary fully equal to the final
1989 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1990 // AP or IBSS holder).
1991 // Once initialized, user configuration can only be changed via OID_xxx
1992 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1993 USHORT AtimWin; // used when starting a new IBSS
1995 // GROUP 2 -
1996 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1997 // the user intended configuration, and should be always applied to the final
1998 // settings in ACTIVE BSS without compromising with the BSS holder.
1999 // Once initialized, user configuration can only be changed via OID_xxx
2000 UCHAR RssiTrigger;
2001 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2002 USHORT DefaultListenCount; // default listen count;
2003 ULONG WindowsPowerMode; // Power mode for AC power
2004 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2005 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2006 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2007 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2009 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2010 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2011 USHORT DisassocReason;
2012 UCHAR DisassocSta[MAC_ADDR_LEN];
2013 USHORT DeauthReason;
2014 UCHAR DeauthSta[MAC_ADDR_LEN];
2015 USHORT AuthFailReason;
2016 UCHAR AuthFailSta[MAC_ADDR_LEN];
2018 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2019 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2020 NDIS_802_11_WEP_STATUS WepStatus;
2021 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2023 // Add to support different cipher suite for WPA2/WPA mode
2024 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2025 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2026 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2027 USHORT RsnCapability;
2029 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2031 UCHAR PMK[32]; // WPA PSK mode PMK
2032 UCHAR PTK[64]; // WPA PSK mode PTK
2033 UCHAR GTK[32]; // GTK from authenticator
2034 BSSID_INFO SavedPMK[PMKID_NO];
2035 UINT SavedPMKNum; // Saved PMKID number
2037 UCHAR DefaultKeyId;
2040 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2041 UCHAR PortSecured;
2043 // For WPA countermeasures
2044 ULONG LastMicErrorTime; // record last MIC error time
2045 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2046 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2047 // For WPA-PSK supplicant state
2048 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2049 UCHAR ReplayCounter[8];
2050 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2051 UCHAR SNonce[32]; // SNonce for WPA-PSK
2053 UCHAR LastSNR0; // last received BEACON's SNR
2054 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2055 RSSI_SAMPLE RssiSample;
2056 ULONG NumOfAvgRssiSample;
2058 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2059 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2060 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2061 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2063 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2064 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2065 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2066 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2067 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2068 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2069 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2070 #ifdef RT2860
2071 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2072 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2073 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2074 #endif
2075 // New for WPA, windows want us to to keep association information and
2076 // Fixed IEs from last association response
2077 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2078 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2079 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2080 USHORT ResVarIELen; // Length of next VIE include EID & Length
2081 UCHAR ResVarIEs[MAX_VIE_LEN];
2083 UCHAR RSNIE_Len;
2084 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2086 // New variables used for CCX 1.0
2087 BOOLEAN bCkipOn;
2088 BOOLEAN bCkipCmicOn;
2089 UCHAR CkipFlag;
2090 UCHAR GIV[3]; //for CCX iv
2091 UCHAR RxSEQ[4];
2092 UCHAR TxSEQ[4];
2093 UCHAR CKIPMIC[4];
2094 UCHAR LeapAuthMode;
2095 LEAP_AUTH_INFO LeapAuthInfo;
2096 UCHAR HashPwd[16];
2097 UCHAR NetworkChallenge[8];
2098 UCHAR NetworkChallengeResponse[24];
2099 UCHAR PeerChallenge[8];
2101 UCHAR PeerChallengeResponse[24];
2102 UCHAR SessionKey[16]; //Network session keys (NSK)
2103 RALINK_TIMER_STRUCT LeapAuthTimer;
2104 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2106 // New control flags for CCX
2107 CCX_CONTROL CCXControl; // Master administration state
2108 BOOLEAN CCXEnable; // Actual CCX state
2109 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2110 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2111 UCHAR CCXReqType; // Current processing CCX request type
2112 BSS_TABLE CCXBssTab; // BSS Table
2113 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2114 USHORT FrameReportLen; // Current Frame report length
2115 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2116 USHORT RPIDensity[8]; // Array for RPI density collection
2117 // Start address of each BSS table within FrameReportBuf
2118 // It's important to update the RxPower of the corresponding Bss
2119 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2120 USHORT BeaconToken; // Token for beacon report
2121 ULONG LastBssIndex; // Most current reported Bss index
2122 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2123 UCHAR RMReqCnt; // Number of measurement request saved.
2124 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2125 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2126 // It must be the same channel with maximum duration
2127 USHORT ParallelDuration; // Maximum duration for parallel measurement
2128 UCHAR ParallelChannel; // Only one channel with parallel measurement
2129 USHORT IAPPToken; // IAPP dialog token
2130 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2131 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2132 // Hack for channel load and noise histogram parameters
2133 UCHAR NHFactor; // Parameter for Noise histogram
2134 UCHAR CLFactor; // Parameter for channel load
2136 UCHAR KRK[16]; //Key Refresh Key.
2137 UCHAR BTK[32]; //Base Transient Key
2138 BOOLEAN CCKMLinkUpFlag;
2139 ULONG CCKMRN; //(Re)Association request number.
2140 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2141 UCHAR AironetCellPowerLimit; //in dBm
2142 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2143 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2144 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2145 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2146 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2147 USHORT CCXAdjacentAPChannel;
2148 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2150 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2151 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2153 UCHAR DtimCount; // 0.. DtimPeriod-1
2154 UCHAR DtimPeriod; // default = 3
2156 ////////////////////////////////////////////////////////////////////////////////////////
2157 // This is only for WHQL test.
2158 BOOLEAN WhqlTest;
2159 ////////////////////////////////////////////////////////////////////////////////////////
2161 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2162 // Fast Roaming
2163 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2164 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2166 BOOLEAN IEEE8021X;
2167 BOOLEAN IEEE8021x_required_keys;
2168 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2169 UCHAR DesireSharedKeyId;
2171 // 0: driver ignores wpa_supplicant
2172 // 1: wpa_supplicant initiates scanning and AP selection
2173 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2174 UCHAR WpaSupplicantUP;
2175 UCHAR WpaSupplicantScanCount;
2177 CHAR dev_name[16];
2178 USHORT OriDevType;
2180 BOOLEAN bTGnWifiTest;
2181 BOOLEAN bScanReqIsFromWebUI;
2183 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2184 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2185 RT_HT_PHY_INFO DesiredHtPhyInfo;
2186 BOOLEAN bAutoTxRateSwitch;
2188 #ifdef RT2860
2189 UCHAR BBPR3;
2190 #endif
2191 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2193 // This data structure keep the current active BSS/IBSS's configuration that this STA
2194 // had agreed upon joining the network. Which means these parameters are usually decided
2195 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2196 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2197 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2198 // the current active settings.
2199 typedef struct _STA_ACTIVE_CONFIG {
2200 USHORT Aid;
2201 USHORT AtimWin; // in kusec; IBSS parameter set element
2202 USHORT CapabilityInfo;
2203 USHORT CfpMaxDuration;
2204 USHORT CfpPeriod;
2206 // Copy supported rate from desired AP's beacon. We are trying to match
2207 // AP's supported and extended rate settings.
2208 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2209 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2210 UCHAR SupRateLen;
2211 UCHAR ExtRateLen;
2212 // Copy supported ht from desired AP's beacon. We are trying to match
2213 RT_HT_PHY_INFO SupportedPhyInfo;
2214 RT_HT_CAPABILITY SupportedHtPhy;
2215 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2217 #ifdef RT2870
2218 // for USB interface, avoid in interrupt when write key
2219 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2220 NDIS_802_11_MAC_ADDRESS MacAddr;
2221 USHORT MacTabMatchWCID; // ASIC
2222 CIPHER_KEY CipherKey;
2223 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2224 #endif // RT2870 //
2226 // ----------- start of AP --------------------------
2227 // AUTH-RSP State Machine Aux data structure
2228 typedef struct _AP_MLME_AUX {
2229 UCHAR Addr[MAC_ADDR_LEN];
2230 USHORT Alg;
2231 CHAR Challenge[CIPHER_TEXT_LEN];
2232 } AP_MLME_AUX, *PAP_MLME_AUX;
2234 // structure to define WPA Group Key Rekey Interval
2235 typedef struct PACKED _RT_802_11_WPA_REKEY {
2236 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2237 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2238 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2240 typedef struct _MAC_TABLE_ENTRY {
2241 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2242 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2243 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2244 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2245 BOOLEAN ValidAsMesh;
2246 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2247 BOOLEAN isCached;
2248 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2250 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2251 //jan for wpa
2252 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2253 UCHAR CMTimerRunning;
2254 UCHAR apidx; // MBSS number
2255 UCHAR RSNIE_Len;
2256 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2257 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2258 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2259 UCHAR PTK[64];
2260 UCHAR ReTryCounter;
2261 RALINK_TIMER_STRUCT RetryTimer;
2262 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2263 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2264 NDIS_802_11_WEP_STATUS WepStatus;
2265 AP_WPA_STATE WpaState;
2266 GTK_STATE GTKState;
2267 USHORT PortSecured;
2268 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2269 CIPHER_KEY PairwiseKey;
2270 PVOID pAd;
2271 INT PMKID_CacheIdx;
2272 UCHAR PMKID[LEN_PMKID];
2275 UCHAR Addr[MAC_ADDR_LEN];
2276 UCHAR PsMode;
2277 SST Sst;
2278 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2279 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2280 USHORT Aid;
2281 USHORT CapabilityInfo;
2282 UCHAR LastRssi;
2283 ULONG NoDataIdleCount;
2284 UINT16 StationKeepAliveCount; // unit: second
2285 ULONG PsQIdleCount;
2286 QUEUE_HEADER PsQueue;
2288 UINT32 StaConnectTime; // the live time of this station since associated with AP
2290 BOOLEAN bSendBAR;
2291 USHORT NoBADataCountDown;
2293 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2294 UINT TxBFCount; // 3*3
2295 UINT FIFOCount;
2296 UINT DebugFIFOCount;
2297 UINT DebugTxCount;
2298 BOOLEAN bDlsInit;
2301 //====================================================
2302 //WDS entry needs these
2303 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2304 UINT MatchWDSTabIdx;
2305 UCHAR MaxSupportedRate;
2306 UCHAR CurrTxRate;
2307 UCHAR CurrTxRateIndex;
2308 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2309 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2310 UINT32 OneSecTxNoRetryOkCount;
2311 UINT32 OneSecTxRetryOkCount;
2312 UINT32 OneSecTxFailCount;
2313 UINT32 ContinueTxFailCnt;
2314 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2315 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2316 //====================================================
2318 BOOLEAN fNoisyEnvironment;
2319 BOOLEAN fLastSecAccordingRSSI;
2320 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2321 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2322 ULONG LastTxOkCount;
2323 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2325 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2326 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2327 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2328 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2329 ULONG ClientStatusFlags;
2331 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2333 // HT EWC MIMO-N used parameters
2334 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2335 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2336 USHORT TXAutoBAbitmap;
2337 USHORT BADeclineBitmap;
2338 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2339 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2340 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2342 // 802.11n features.
2343 UCHAR MpduDensity;
2344 UCHAR MaxRAmpduFactor;
2345 UCHAR AMsduSize;
2346 UCHAR MmpsMode; // MIMO power save more.
2348 HT_CAPABILITY_IE HTCapability;
2350 BOOLEAN bAutoTxRateSwitch;
2352 UCHAR RateLen;
2353 struct _MAC_TABLE_ENTRY *pNext;
2354 USHORT TxSeq[NUM_OF_TID];
2355 USHORT NonQosDataSeq;
2357 RSSI_SAMPLE RssiSample;
2359 UINT32 TXMCSExpected[16];
2360 UINT32 TXMCSSuccessful[16];
2361 UINT32 TXMCSFailed[16];
2362 UINT32 TXMCSAutoFallBack[16][16];
2363 #ifdef RT2870
2364 ULONG LastBeaconRxTime;
2365 #endif
2366 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2368 typedef struct _MAC_TABLE {
2369 USHORT Size;
2370 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2371 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2372 QUEUE_HEADER McastPsQueue;
2373 ULONG PsQIdleCount;
2374 BOOLEAN fAnyStationInPsm;
2375 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2376 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2377 #ifdef RT2870
2378 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2379 #endif
2380 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2381 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2382 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2383 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2384 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2385 } MAC_TABLE, *PMAC_TABLE;
2387 #define IS_HT_STA(_pMacEntry) \
2388 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2390 #define IS_HT_RATE(_pMacEntry) \
2391 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2393 #define PEER_IS_HT_RATE(_pMacEntry) \
2394 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2396 typedef struct _WDS_ENTRY {
2397 BOOLEAN Valid;
2398 UCHAR Addr[MAC_ADDR_LEN];
2399 ULONG NoDataIdleCount;
2400 struct _WDS_ENTRY *pNext;
2401 } WDS_ENTRY, *PWDS_ENTRY;
2403 typedef struct _WDS_TABLE_ENTRY {
2404 USHORT Size;
2405 UCHAR WdsAddr[MAC_ADDR_LEN];
2406 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2407 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2408 UCHAR MaxSupportedRate;
2409 UCHAR CurrTxRate;
2410 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2411 USHORT OneSecTxOkCount;
2412 USHORT OneSecTxRetryOkCount;
2413 USHORT OneSecTxFailCount;
2414 ULONG CurrTxRateStableTime; // # of second in current TX rate
2415 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2416 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2418 typedef struct _RT_802_11_WDS_ENTRY {
2419 PNET_DEV dev;
2420 UCHAR Valid;
2421 UCHAR PhyMode;
2422 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2423 UCHAR MacTabMatchWCID; // ASIC
2424 NDIS_802_11_WEP_STATUS WepStatus;
2425 UCHAR KeyIdx;
2426 CIPHER_KEY WdsKey;
2427 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2428 RT_HT_PHY_INFO DesiredHtPhyInfo;
2429 BOOLEAN bAutoTxRateSwitch;
2430 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2431 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2433 typedef struct _WDS_TABLE {
2434 UCHAR Mode;
2435 ULONG Size;
2436 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2437 } WDS_TABLE, *PWDS_TABLE;
2439 typedef struct _APCLI_STRUCT {
2440 PNET_DEV dev;
2441 #ifdef RTL865X_SOC
2442 unsigned int mylinkid;
2443 #endif
2444 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2445 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2446 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2447 UCHAR SsidLen;
2448 CHAR Ssid[MAX_LEN_OF_SSID];
2450 UCHAR CfgSsidLen;
2451 CHAR CfgSsid[MAX_LEN_OF_SSID];
2452 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2453 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2455 ULONG ApCliRcvBeaconTime;
2457 ULONG CtrlCurrState;
2458 ULONG SyncCurrState;
2459 ULONG AuthCurrState;
2460 ULONG AssocCurrState;
2461 ULONG WpaPskCurrState;
2463 USHORT AuthReqCnt;
2464 USHORT AssocReqCnt;
2466 ULONG ClientStatusFlags;
2467 UCHAR MpduDensity;
2469 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2470 NDIS_802_11_WEP_STATUS WepStatus;
2472 // Add to support different cipher suite for WPA2/WPA mode
2473 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2474 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2475 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2476 USHORT RsnCapability;
2478 UCHAR PSK[100]; // reserve PSK key material
2479 UCHAR PSKLen;
2480 UCHAR PMK[32]; // WPA PSK mode PMK
2481 UCHAR GTK[32]; // GTK from authenticator
2483 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2484 UCHAR DefaultKeyId;
2486 // store RSN_IE built by driver
2487 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2488 UCHAR RSNIE_Len;
2490 // For WPA countermeasures
2491 ULONG LastMicErrorTime; // record last MIC error time
2492 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2494 // For WPA-PSK supplicant state
2495 UCHAR SNonce[32]; // SNonce for WPA-PSK
2496 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2498 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2499 RT_HT_PHY_INFO DesiredHtPhyInfo;
2500 BOOLEAN bAutoTxRateSwitch;
2501 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2502 } APCLI_STRUCT, *PAPCLI_STRUCT;
2504 // ----------- end of AP ----------------------------
2506 struct wificonf
2508 BOOLEAN bShortGI;
2509 BOOLEAN bGreenField;
2515 typedef struct _INF_PCI_CONFIG
2517 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2518 }INF_PCI_CONFIG;
2520 typedef struct _INF_USB_CONFIG
2522 UINT BulkInEpAddr; // bulk-in endpoint address
2523 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2525 }INF_USB_CONFIG;
2527 #ifdef DBG_DIAGNOSE
2528 #define DIAGNOSE_TIME 10 // 10 sec
2529 typedef struct _RtmpDiagStrcut_
2530 { // Diagnosis Related element
2531 unsigned char inited;
2532 unsigned char qIdx;
2533 unsigned char ArrayStartIdx;
2534 unsigned char ArrayCurIdx;
2535 // Tx Related Count
2536 USHORT TxDataCnt[DIAGNOSE_TIME];
2537 USHORT TxFailCnt[DIAGNOSE_TIME];
2538 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2539 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2540 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2542 USHORT TxAggCnt[DIAGNOSE_TIME];
2543 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2544 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2545 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2546 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2548 // Rx Related Count
2549 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2550 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2551 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2552 }RtmpDiagStruct;
2553 #endif // DBG_DIAGNOSE //
2557 // The miniport adapter structure
2559 typedef struct _RTMP_ADAPTER
2561 PVOID OS_Cookie; // save specific structure relative to OS
2562 PNET_DEV net_dev;
2563 ULONG VirtualIfCnt;
2565 #ifdef RT2860
2566 USHORT LnkCtrlBitMask;
2567 USHORT RLnkCtrlConfiguration;
2568 USHORT RLnkCtrlOffset;
2569 USHORT HostLnkCtrlConfiguration;
2570 USHORT HostLnkCtrlOffset;
2571 USHORT PCIePowerSaveLevel;
2572 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2573 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2574 USHORT ThisTbttNumToNextWakeUp;
2575 ULONG SameRxByteCount;
2578 /*****************************************************************************************/
2579 /* PCI related parameters */
2580 /*****************************************************************************************/
2581 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2583 UINT int_enable_reg;
2584 UINT int_disable_mask;
2585 UINT int_pending;
2588 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2589 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2590 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2591 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2592 #endif
2594 NDIS_SPIN_LOCK irq_lock;
2595 UCHAR irq_disabled;
2597 #ifdef RT2870
2598 /*****************************************************************************************/
2599 /* USB related parameters */
2600 /*****************************************************************************************/
2601 struct usb_config_descriptor *config;
2602 UINT BulkInEpAddr; // bulk-in endpoint address
2603 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2605 UINT NumberOfPipes;
2606 USHORT BulkOutMaxPacketSize;
2607 USHORT BulkInMaxPacketSize;
2609 //======Control Flags
2610 LONG PendingIoCount;
2611 ULONG BulkFlags;
2612 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2615 //======Timer Thread
2616 RT2870_TIMER_QUEUE TimerQ;
2617 NDIS_SPIN_LOCK TimerQLock;
2620 //======Cmd Thread
2621 CmdQ CmdQ;
2622 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2624 BOOLEAN TimerFunc_kill;
2625 BOOLEAN mlme_kill;
2628 //======Semaphores (event)
2629 struct semaphore mlme_semaphore; /* to sleep thread on */
2630 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2631 struct semaphore RTUSBTimer_semaphore;
2632 struct completion TimerQComplete;
2633 struct completion mlmeComplete;
2634 struct completion CmdQComplete;
2635 wait_queue_head_t *wait;
2636 #endif // RT2870 //
2639 /*****************************************************************************************/
2640 /* Both PCI/USB related parameters */
2641 /*****************************************************************************************/
2644 /*****************************************************************************************/
2645 /* Tx related parameters */
2646 /*****************************************************************************************/
2647 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2648 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2650 #ifdef RT2870
2651 // Data related context and AC specified, 4 AC supported
2652 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2653 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2655 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2656 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2658 // 4 sets of Bulk Out index and pending flag
2659 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2661 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2662 UCHAR bulkResetPipeid;
2663 BOOLEAN MgmtBulkPending;
2664 ULONG bulkResetReq[6];
2665 #endif // RT2870 //
2667 // resource for software backlog queues
2668 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2669 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2671 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2672 RTMP_MGMT_RING MgmtRing;
2673 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2676 /*****************************************************************************************/
2677 /* Rx related parameters */
2678 /*****************************************************************************************/
2679 #ifdef RT2860
2680 RTMP_RX_RING RxRing;
2681 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2682 #endif
2683 #ifdef RT2870
2684 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2685 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2686 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2687 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2688 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2689 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2690 ULONG TransferBufferLength; // current length of the packet buffer
2691 ULONG ReadPosition; // current read position in a packet buffer
2692 #endif // RT2870 //
2695 /*****************************************************************************************/
2696 /* ASIC related parameters */
2697 /*****************************************************************************************/
2698 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2700 // ---------------------------
2701 // E2PROM
2702 // ---------------------------
2703 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2704 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2705 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2706 #ifdef RT30xx
2707 BOOLEAN EepromAccess;
2708 UCHAR EFuseTag;
2709 #endif
2710 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2712 // ---------------------------
2713 // BBP Control
2714 // ---------------------------
2715 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2716 UCHAR BbpRssiToDbmDelta;
2717 BBP_R66_TUNING BbpTuning;
2719 // ----------------------------
2720 // RFIC control
2721 // ----------------------------
2722 UCHAR RfIcType; // RFIC_xxx
2723 ULONG RfFreqOffset; // Frequency offset for channel switching
2724 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2726 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2727 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2729 // This soft Rx Antenna Diversity mechanism is used only when user set
2730 // RX Antenna = DIVERSITY ON
2731 SOFT_RX_ANT_DIVERSITY RxAnt;
2733 UCHAR RFProgSeq;
2734 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2735 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2736 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2737 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2739 UCHAR ChannelListNum; // number of channel in ChannelList[]
2740 UCHAR Bbp94;
2741 BOOLEAN BbpForCCK;
2742 ULONG Tx20MPwrCfgABand[5];
2743 ULONG Tx20MPwrCfgGBand[5];
2744 ULONG Tx40MPwrCfgABand[5];
2745 ULONG Tx40MPwrCfgGBand[5];
2747 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2748 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2749 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2750 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2751 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2752 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2754 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2755 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2756 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2757 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2758 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2759 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2761 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2762 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2763 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2764 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2765 //---
2767 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2768 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2769 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2770 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2771 //---
2773 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2774 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2775 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2776 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2778 // ----------------------------
2779 // LED control
2780 // ----------------------------
2781 MCU_LEDCS_STRUC LedCntl;
2782 USHORT Led1; // read from EEPROM 0x3c
2783 USHORT Led2; // EEPROM 0x3e
2784 USHORT Led3; // EEPROM 0x40
2785 UCHAR LedIndicatorStregth;
2786 UCHAR RssiSingalstrengthOffet;
2787 BOOLEAN bLedOnScanning;
2788 UCHAR LedStatus;
2790 /*****************************************************************************************/
2791 /* 802.11 related parameters */
2792 /*****************************************************************************************/
2793 // outgoing BEACON frame buffer and corresponding TXD
2794 TXWI_STRUC BeaconTxWI;
2795 PUCHAR BeaconBuf;
2796 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2798 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2799 PSPOLL_FRAME PsPollFrame;
2800 HEADER_802_11 NullFrame;
2802 #ifdef RT2870
2803 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2804 TX_CONTEXT NullContext;
2805 TX_CONTEXT PsPollContext;
2806 TX_CONTEXT RTSContext;
2807 #endif // RT2870 //
2811 //=========AP===========
2814 //=======STA===========
2815 /* Modified by Wu Xi-Kun 4/21/2006 */
2816 // -----------------------------------------------
2817 // STA specific configuration & operation status
2818 // used only when pAd->OpMode == OPMODE_STA
2819 // -----------------------------------------------
2820 STA_ADMIN_CONFIG StaCfg; // user desired settings
2821 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2822 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2823 NDIS_MEDIA_STATE PreMediaState;
2825 //=======Common===========
2826 // OP mode: either AP or STA
2827 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2829 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2832 // configuration: read from Registry & E2PROM
2833 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2834 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2835 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2837 // ------------------------------------------------------
2838 // common configuration to both OPMODE_STA and OPMODE_AP
2839 // ------------------------------------------------------
2840 COMMON_CONFIG CommonCfg;
2841 MLME_STRUCT Mlme;
2843 // AP needs those vaiables for site survey feature.
2844 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2845 BSS_TABLE ScanTab; // store the latest SCAN result
2847 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2848 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2849 NDIS_SPIN_LOCK MacTabLock;
2851 BA_TABLE BATable;
2853 NDIS_SPIN_LOCK BATabLock;
2854 RALINK_TIMER_STRUCT RECBATimer;
2856 // encryption/decryption KEY tables
2857 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2859 // RX re-assembly buffer for fragmentation
2860 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2862 // various Counters
2863 COUNTER_802_3 Counters8023; // 802.3 counters
2864 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2865 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2866 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2867 PRIVATE_STRUC PrivateInfo; // Private information & counters
2869 // flags, see fRTMP_ADAPTER_xxx flags
2870 ULONG Flags; // Represent current device status
2871 #ifdef RT2860
2872 ULONG PSFlags; // Power Save operation flag.
2873 #endif
2875 // current TX sequence #
2876 USHORT Sequence;
2878 // Control disconnect / connect event generation
2879 //+++Didn't used anymore
2880 ULONG LinkDownTime;
2881 //---
2882 ULONG LastRxRate;
2883 ULONG LastTxRate;
2884 //+++Used only for Station
2885 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2886 //---
2888 ULONG ExtraInfo; // Extra information for displaying status
2889 ULONG SystemErrorBitmap; // b0: E2PROM version error
2891 //+++Didn't used anymore
2892 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2893 //---
2895 // ---------------------------
2896 // System event log
2897 // ---------------------------
2898 RT_802_11_EVENT_TABLE EventTab;
2901 BOOLEAN HTCEnable;
2903 /*****************************************************************************************/
2904 /* Statistic related parameters */
2905 /*****************************************************************************************/
2906 #ifdef RT2870
2907 ULONG BulkOutDataOneSecCount;
2908 ULONG BulkInDataOneSecCount;
2909 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2910 ULONG watchDogRxCnt;
2911 ULONG watchDogRxOverFlowCnt;
2912 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2913 #endif // RT2870 //
2915 BOOLEAN bUpdateBcnCntDone;
2916 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2917 // ----------------------------
2918 // DEBUG paramerts
2919 // ----------------------------
2920 BOOLEAN bBanAllBaSetup;
2921 BOOLEAN bPromiscuous;
2923 // ----------------------------
2924 // rt2860c emulation-use Parameters
2925 // ----------------------------
2926 ULONG rtsaccu[30];
2927 ULONG ctsaccu[30];
2928 ULONG cfendaccu[30];
2929 ULONG bacontent[16];
2930 ULONG rxint[RX_RING_SIZE+1];
2931 UCHAR rcvba[60];
2932 BOOLEAN bLinkAdapt;
2933 BOOLEAN bForcePrintTX;
2934 BOOLEAN bForcePrintRX;
2935 BOOLEAN bDisablescanning; //defined in RT2870 USB
2936 BOOLEAN bStaFifoTest;
2937 BOOLEAN bProtectionTest;
2938 BOOLEAN bHCCATest;
2939 BOOLEAN bGenOneHCCA;
2940 BOOLEAN bBroadComHT;
2941 //+++Following add from RT2870 USB.
2942 ULONG BulkOutReq;
2943 ULONG BulkOutComplete;
2944 ULONG BulkOutCompleteOther;
2945 ULONG BulkOutCompleteCancel; // seems not use now?
2946 ULONG BulkInReq;
2947 ULONG BulkInComplete;
2948 ULONG BulkInCompleteFail;
2949 //---
2951 struct wificonf WIFItestbed;
2953 struct reordering_mpdu_pool mpdu_blk_pool;
2955 ULONG OneSecondnonBEpackets; // record non BE packets per second
2957 struct iw_statistics iw_stats;
2959 struct net_device_stats stats;
2961 ULONG TbttTickCount;
2962 #ifdef PCI_MSI_SUPPORT
2963 BOOLEAN HaveMsi;
2964 #endif // PCI_MSI_SUPPORT //
2967 UCHAR is_on;
2969 #define TIME_BASE (1000000/OS_HZ)
2970 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2971 UCHAR flg_be_adjust;
2972 ULONG be_adjust_last_time;
2974 #ifdef DBG_DIAGNOSE
2975 RtmpDiagStruct DiagStruct;
2976 #endif // DBG_DIAGNOSE //
2979 UINT8 PM_FlgSuspend;
2981 #ifdef RT30xx
2982 //======efuse
2983 BOOLEAN bUseEfuse;
2984 BOOLEAN bEEPROMFile;
2985 #endif // RT30xx //
2987 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2990 // Cisco IAPP format
2992 typedef struct _CISCO_IAPP_CONTENT_
2994 USHORT Length; //IAPP Length
2995 UCHAR MessageType; //IAPP type
2996 UCHAR FunctionCode; //IAPP function type
2997 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2998 UCHAR SourceMAC[MAC_ADDR_LEN];
2999 USHORT Tag; //Tag(element IE) - Adjacent AP report
3000 USHORT TagLength; //Length of element not including 4 byte header
3001 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3002 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3003 USHORT Channel;
3004 USHORT SsidLen;
3005 UCHAR Ssid[MAX_LEN_OF_SSID];
3006 USHORT Seconds; //Seconds that the client has been disassociated.
3007 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3009 #define DELAYINTMASK 0x0003fffb
3010 #define INTMASK 0x0003fffb
3011 #define IndMask 0x0003fffc
3012 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3013 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3014 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3015 #define TxCoherent 0x00020000 // tx coherent
3016 #define RxCoherent 0x00010000 // rx coherent
3017 #define McuCommand 0x00000200 // mcu
3018 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3019 #define TBTTInt 0x00000800 // TBTT interrupt
3020 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3021 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3022 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3025 typedef struct _RX_BLK_
3027 RT28XX_RXD_STRUC RxD;
3028 PRXWI_STRUC pRxWI;
3029 PHEADER_802_11 pHeader;
3030 PNDIS_PACKET pRxPacket;
3031 UCHAR *pData;
3032 USHORT DataSize;
3033 USHORT Flags;
3034 UCHAR UserPriority; // for calculate TKIP MIC using
3035 } RX_BLK;
3038 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3039 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3040 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3043 #define fRX_WDS 0x0001
3044 #define fRX_AMSDU 0x0002
3045 #define fRX_ARALINK 0x0004
3046 #define fRX_HTC 0x0008
3047 #define fRX_PAD 0x0010
3048 #define fRX_AMPDU 0x0020
3049 #define fRX_QOS 0x0040
3050 #define fRX_INFRA 0x0080
3051 #define fRX_EAP 0x0100
3052 #define fRX_MESH 0x0200
3053 #define fRX_APCLI 0x0400
3054 #define fRX_DLS 0x0800
3055 #define fRX_WPI 0x1000
3057 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3058 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3059 #define LENGTH_ARALINK_HEADER_FIELD 2
3061 #define TX_UNKOWN_FRAME 0x00
3062 #define TX_MCAST_FRAME 0x01
3063 #define TX_LEGACY_FRAME 0x02
3064 #define TX_AMPDU_FRAME 0x04
3065 #define TX_AMSDU_FRAME 0x08
3066 #define TX_RALINK_FRAME 0x10
3067 #define TX_FRAG_FRAME 0x20
3070 // Currently the sizeof(TX_BLK) is 148 bytes.
3071 typedef struct _TX_BLK_
3073 UCHAR QueIdx;
3074 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3075 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3076 USHORT TotalFragNum; // Total frame fragments required in one batch
3077 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3079 QUEUE_HEADER TxPacketList;
3080 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3081 HTTRANSMIT_SETTING *pTransmit;
3083 // Following structure used for the characteristics of a specific packet.
3084 PNDIS_PACKET pPacket;
3085 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3086 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3087 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3088 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3089 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3090 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3091 UCHAR HdrPadLen; // recording Header Padding Length;
3092 UCHAR apidx; // The interface associated to this packet
3093 UCHAR Wcid; // The MAC entry associated to this packet
3094 UCHAR UserPriority; // priority class of packet
3095 UCHAR FrameGap; // what kind of IFS this packet use
3096 UCHAR MpduReqNum; // number of fragments of this frame
3097 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3098 UCHAR CipherAlg; // cipher alogrithm
3099 PCIPHER_KEY pKey;
3103 USHORT Flags; //See following definitions for detail.
3105 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3106 ULONG Priv; // Hardware specific value saved in here.
3107 } TX_BLK, *PTX_BLK;
3110 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3111 #define fTX_bAckRequired 0x0002 // the packet need ack response
3112 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3113 #define fTX_bHTRate 0x0008 // allow to use HT rate
3114 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3115 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3116 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3117 #define fTX_bWMM 0x0080 // QOS Data
3119 #define fTX_bClearEAPFrame 0x0100
3121 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3122 do { \
3123 if (value) \
3124 (_pTxBlk->Flags |= _flag) \
3125 else \
3126 (_pTxBlk->Flags &= ~(_flag)) \
3127 }while(0)
3129 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3130 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3131 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3137 //------------------------------------------------------------------------------------------
3139 #ifdef RT2860
3141 // Enable & Disable NIC interrupt via writing interrupt mask register
3142 // Since it use ADAPTER structure, it have to be put after structure definition.
3144 __inline VOID NICDisableInterrupt(
3145 IN PRTMP_ADAPTER pAd)
3147 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
3148 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3149 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3152 __inline VOID NICEnableInterrupt(
3153 IN PRTMP_ADAPTER pAd)
3156 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3157 // To prevent System hang, we should enalbe the interrupt when
3158 // ASIC is already Wake Up.
3160 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3161 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3162 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3164 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3166 //else
3167 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3169 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3170 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3173 static inline VOID ConvertMulticastIP2MAC(
3174 IN PUCHAR pIpAddr,
3175 IN PUCHAR *ppMacAddr,
3176 IN UINT16 ProtoType)
3178 if (pIpAddr == NULL)
3179 return;
3181 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3182 return;
3184 switch (ProtoType)
3186 case ETH_P_IPV6:
3187 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3188 *(*ppMacAddr) = 0x33;
3189 *(*ppMacAddr + 1) = 0x33;
3190 *(*ppMacAddr + 2) = pIpAddr[12];
3191 *(*ppMacAddr + 3) = pIpAddr[13];
3192 *(*ppMacAddr + 4) = pIpAddr[14];
3193 *(*ppMacAddr + 5) = pIpAddr[15];
3194 break;
3196 case ETH_P_IP:
3197 default:
3198 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3199 *(*ppMacAddr) = 0x01;
3200 *(*ppMacAddr + 1) = 0x00;
3201 *(*ppMacAddr + 2) = 0x5e;
3202 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3203 *(*ppMacAddr + 4) = pIpAddr[2];
3204 *(*ppMacAddr + 5) = pIpAddr[3];
3205 break;
3208 return;
3210 #endif /* RT2860 */
3212 BOOLEAN RTMPCheckForHang(
3213 IN NDIS_HANDLE MiniportAdapterContext
3216 VOID RTMPHalt(
3217 IN NDIS_HANDLE MiniportAdapterContext
3221 // Private routines in rtmp_init.c
3223 NDIS_STATUS RTMPAllocAdapterBlock(
3224 IN PVOID handle,
3225 OUT PRTMP_ADAPTER *ppAdapter
3228 NDIS_STATUS RTMPAllocTxRxRingMemory(
3229 IN PRTMP_ADAPTER pAd
3232 NDIS_STATUS RTMPFindAdapter(
3233 IN PRTMP_ADAPTER pAd,
3234 IN NDIS_HANDLE WrapperConfigurationContext
3237 NDIS_STATUS RTMPReadParametersHook(
3238 IN PRTMP_ADAPTER pAd
3241 VOID RTMPFreeAdapter(
3242 IN PRTMP_ADAPTER pAd
3245 NDIS_STATUS NICReadRegParameters(
3246 IN PRTMP_ADAPTER pAd,
3247 IN NDIS_HANDLE WrapperConfigurationContext
3250 #ifdef RT2870
3251 VOID NICInitRT30xxRFRegisters(
3252 IN PRTMP_ADAPTER pAd);
3253 #endif // RT2870 //
3255 VOID NICReadEEPROMParameters(
3256 IN PRTMP_ADAPTER pAd,
3257 IN PUCHAR mac_addr);
3259 VOID NICInitAsicFromEEPROM(
3260 IN PRTMP_ADAPTER pAd);
3262 VOID NICInitTxRxRingAndBacklogQueue(
3263 IN PRTMP_ADAPTER pAd);
3265 NDIS_STATUS NICInitializeAdapter(
3266 IN PRTMP_ADAPTER pAd,
3267 IN BOOLEAN bHardReset);
3269 NDIS_STATUS NICInitializeAsic(
3270 IN PRTMP_ADAPTER pAd,
3271 IN BOOLEAN bHardReset);
3272 #ifdef RT2860
3273 VOID NICRestoreBBPValue(
3274 IN PRTMP_ADAPTER pAd);
3275 #endif
3276 VOID NICIssueReset(
3277 IN PRTMP_ADAPTER pAd);
3279 VOID RTMPRingCleanUp(
3280 IN PRTMP_ADAPTER pAd,
3281 IN UCHAR RingType);
3283 VOID RxTest(
3284 IN PRTMP_ADAPTER pAd);
3286 NDIS_STATUS DbgSendPacket(
3287 IN PRTMP_ADAPTER pAd,
3288 IN PNDIS_PACKET pPacket);
3290 VOID UserCfgInit(
3291 IN PRTMP_ADAPTER pAd);
3293 VOID NICResetFromError(
3294 IN PRTMP_ADAPTER pAd);
3296 VOID NICEraseFirmware(
3297 IN PRTMP_ADAPTER pAd);
3299 NDIS_STATUS NICLoadFirmware(
3300 IN PRTMP_ADAPTER pAd);
3302 NDIS_STATUS NICLoadRateSwitchingParams(
3303 IN PRTMP_ADAPTER pAd);
3305 BOOLEAN NICCheckForHang(
3306 IN PRTMP_ADAPTER pAd);
3308 VOID NICUpdateFifoStaCounters(
3309 IN PRTMP_ADAPTER pAd);
3311 VOID NICUpdateRawCounters(
3312 IN PRTMP_ADAPTER pAd);
3314 ULONG RTMPNotAllZero(
3315 IN PVOID pSrc1,
3316 IN ULONG Length);
3318 VOID RTMPZeroMemory(
3319 IN PVOID pSrc,
3320 IN ULONG Length);
3322 ULONG RTMPCompareMemory(
3323 IN PVOID pSrc1,
3324 IN PVOID pSrc2,
3325 IN ULONG Length);
3327 VOID RTMPMoveMemory(
3328 OUT PVOID pDest,
3329 IN PVOID pSrc,
3330 IN ULONG Length);
3332 VOID AtoH(
3333 char *src,
3334 UCHAR *dest,
3335 int destlen);
3337 UCHAR BtoH(
3338 char ch);
3340 VOID RTMPPatchMacBbpBug(
3341 IN PRTMP_ADAPTER pAd);
3343 VOID RTMPPatchCardBus(
3344 IN PRTMP_ADAPTER pAdapter);
3346 VOID RTMPPatchRalinkCardBus(
3347 IN PRTMP_ADAPTER pAdapter,
3348 IN ULONG Bus);
3350 ULONG RTMPReadCBConfig(
3351 IN ULONG Bus,
3352 IN ULONG Slot,
3353 IN ULONG Func,
3354 IN ULONG Offset);
3356 VOID RTMPWriteCBConfig(
3357 IN ULONG Bus,
3358 IN ULONG Slot,
3359 IN ULONG Func,
3360 IN ULONG Offset,
3361 IN ULONG Value);
3363 VOID RTMPInitTimer(
3364 IN PRTMP_ADAPTER pAd,
3365 IN PRALINK_TIMER_STRUCT pTimer,
3366 IN PVOID pTimerFunc,
3367 IN PVOID pData,
3368 IN BOOLEAN Repeat);
3370 VOID RTMPSetTimer(
3371 IN PRALINK_TIMER_STRUCT pTimer,
3372 IN ULONG Value);
3375 VOID RTMPModTimer(
3376 IN PRALINK_TIMER_STRUCT pTimer,
3377 IN ULONG Value);
3379 VOID RTMPCancelTimer(
3380 IN PRALINK_TIMER_STRUCT pTimer,
3381 OUT BOOLEAN *pCancelled);
3383 VOID RTMPSetLED(
3384 IN PRTMP_ADAPTER pAd,
3385 IN UCHAR Status);
3387 VOID RTMPSetSignalLED(
3388 IN PRTMP_ADAPTER pAd,
3389 IN NDIS_802_11_RSSI Dbm);
3391 VOID RTMPEnableRxTx(
3392 IN PRTMP_ADAPTER pAd);
3395 // prototype in action.c
3397 VOID ActionStateMachineInit(
3398 IN PRTMP_ADAPTER pAd,
3399 IN STATE_MACHINE *S,
3400 OUT STATE_MACHINE_FUNC Trans[]);
3402 VOID MlmeADDBAAction(
3403 IN PRTMP_ADAPTER pAd,
3404 IN MLME_QUEUE_ELEM *Elem);
3406 VOID MlmeDELBAAction(
3407 IN PRTMP_ADAPTER pAd,
3408 IN MLME_QUEUE_ELEM *Elem);
3410 VOID MlmeDLSAction(
3411 IN PRTMP_ADAPTER pAd,
3412 IN MLME_QUEUE_ELEM *Elem);
3414 VOID MlmeInvalidAction(
3415 IN PRTMP_ADAPTER pAd,
3416 IN MLME_QUEUE_ELEM *Elem);
3418 VOID MlmeQOSAction(
3419 IN PRTMP_ADAPTER pAd,
3420 IN MLME_QUEUE_ELEM *Elem);
3422 VOID PeerAddBAReqAction(
3423 IN PRTMP_ADAPTER pAd,
3424 IN MLME_QUEUE_ELEM *Elem);
3426 VOID PeerAddBARspAction(
3427 IN PRTMP_ADAPTER pAd,
3428 IN MLME_QUEUE_ELEM *Elem);
3430 VOID PeerDelBAAction(
3431 IN PRTMP_ADAPTER pAd,
3432 IN MLME_QUEUE_ELEM *Elem);
3434 VOID PeerBAAction(
3435 IN PRTMP_ADAPTER pAd,
3436 IN MLME_QUEUE_ELEM *Elem);
3438 VOID SendPSMPAction(
3439 IN PRTMP_ADAPTER pAd,
3440 IN UCHAR Wcid,
3441 IN UCHAR Psmp);
3443 VOID PeerRMAction(
3444 IN PRTMP_ADAPTER pAd,
3445 IN MLME_QUEUE_ELEM *Elem);
3447 VOID PeerPublicAction(
3448 IN PRTMP_ADAPTER pAd,
3449 IN MLME_QUEUE_ELEM *Elem);
3451 VOID StaPublicAction(
3452 IN PRTMP_ADAPTER pAd,
3453 IN UCHAR Bss2040Coexist);
3455 VOID PeerBSSTranAction(
3456 IN PRTMP_ADAPTER pAd,
3457 IN MLME_QUEUE_ELEM *Elem);
3459 VOID PeerHTAction(
3460 IN PRTMP_ADAPTER pAd,
3461 IN MLME_QUEUE_ELEM *Elem);
3463 VOID PeerQOSAction(
3464 IN PRTMP_ADAPTER pAd,
3465 IN MLME_QUEUE_ELEM *Elem);
3467 VOID RECBATimerTimeout(
3468 IN PVOID SystemSpecific1,
3469 IN PVOID FunctionContext,
3470 IN PVOID SystemSpecific2,
3471 IN PVOID SystemSpecific3);
3473 VOID ORIBATimerTimeout(
3474 IN PRTMP_ADAPTER pAd);
3476 VOID SendRefreshBAR(
3477 IN PRTMP_ADAPTER pAd,
3478 IN MAC_TABLE_ENTRY *pEntry);
3480 VOID ActHeaderInit(
3481 IN PRTMP_ADAPTER pAd,
3482 IN OUT PHEADER_802_11 pHdr80211,
3483 IN PUCHAR Addr1,
3484 IN PUCHAR Addr2,
3485 IN PUCHAR Addr3);
3487 VOID BarHeaderInit(
3488 IN PRTMP_ADAPTER pAd,
3489 IN OUT PFRAME_BAR pCntlBar,
3490 IN PUCHAR pDA,
3491 IN PUCHAR pSA);
3493 VOID InsertActField(
3494 IN PRTMP_ADAPTER pAd,
3495 OUT PUCHAR pFrameBuf,
3496 OUT PULONG pFrameLen,
3497 IN UINT8 Category,
3498 IN UINT8 ActCode);
3500 BOOLEAN QosBADataParse(
3501 IN PRTMP_ADAPTER pAd,
3502 IN BOOLEAN bAMSDU,
3503 IN PUCHAR p8023Header,
3504 IN UCHAR WCID,
3505 IN UCHAR TID,
3506 IN USHORT Sequence,
3507 IN UCHAR DataOffset,
3508 IN USHORT Datasize,
3509 IN UINT CurRxIndex);
3511 BOOLEAN CntlEnqueueForRecv(
3512 IN PRTMP_ADAPTER pAd,
3513 IN ULONG Wcid,
3514 IN ULONG MsgLen,
3515 IN PFRAME_BA_REQ pMsg);
3517 VOID BaAutoManSwitch(
3518 IN PRTMP_ADAPTER pAd);
3520 VOID HTIOTCheck(
3521 IN PRTMP_ADAPTER pAd,
3522 IN UCHAR BatRecIdx);
3525 // Private routines in rtmp_data.c
3527 BOOLEAN RTMPHandleRxDoneInterrupt(
3528 IN PRTMP_ADAPTER pAd);
3530 VOID RTMPHandleTxDoneInterrupt(
3531 IN PRTMP_ADAPTER pAd);
3533 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3534 IN PRTMP_ADAPTER pAd,
3535 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3537 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3538 IN PRTMP_ADAPTER pAd);
3540 VOID RTMPHandleTBTTInterrupt(
3541 IN PRTMP_ADAPTER pAd);
3543 VOID RTMPHandlePreTBTTInterrupt(
3544 IN PRTMP_ADAPTER pAd);
3546 void RTMPHandleTwakeupInterrupt(
3547 IN PRTMP_ADAPTER pAd);
3549 VOID RTMPHandleRxCoherentInterrupt(
3550 IN PRTMP_ADAPTER pAd);
3552 BOOLEAN TxFrameIsAggregatible(
3553 IN PRTMP_ADAPTER pAd,
3554 IN PUCHAR pPrevAddr1,
3555 IN PUCHAR p8023hdr);
3557 BOOLEAN PeerIsAggreOn(
3558 IN PRTMP_ADAPTER pAd,
3559 IN ULONG TxRate,
3560 IN PMAC_TABLE_ENTRY pMacEntry);
3562 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3563 IN PNDIS_BUFFER pFirstBuffer,
3564 IN UCHAR DesiredOffset,
3565 OUT PUCHAR pByte0,
3566 OUT PUCHAR pByte1);
3568 NDIS_STATUS STASendPacket(
3569 IN PRTMP_ADAPTER pAd,
3570 IN PNDIS_PACKET pPacket);
3572 VOID STASendPackets(
3573 IN NDIS_HANDLE MiniportAdapterContext,
3574 IN PPNDIS_PACKET ppPacketArray,
3575 IN UINT NumberOfPackets);
3577 VOID RTMPDeQueuePacket(
3578 IN PRTMP_ADAPTER pAd,
3579 IN BOOLEAN bIntContext,
3580 IN UCHAR QueIdx,
3581 IN UCHAR Max_Tx_Packets);
3583 NDIS_STATUS RTMPHardTransmit(
3584 IN PRTMP_ADAPTER pAd,
3585 IN PNDIS_PACKET pPacket,
3586 IN UCHAR QueIdx,
3587 OUT PULONG pFreeTXDLeft);
3589 NDIS_STATUS STAHardTransmit(
3590 IN PRTMP_ADAPTER pAd,
3591 IN TX_BLK *pTxBlk,
3592 IN UCHAR QueIdx);
3594 VOID STARxEAPOLFrameIndicate(
3595 IN PRTMP_ADAPTER pAd,
3596 IN MAC_TABLE_ENTRY *pEntry,
3597 IN RX_BLK *pRxBlk,
3598 IN UCHAR FromWhichBSSID);
3600 NDIS_STATUS RTMPFreeTXDRequest(
3601 IN PRTMP_ADAPTER pAd,
3602 IN UCHAR RingType,
3603 IN UCHAR NumberRequired,
3604 IN PUCHAR FreeNumberIs);
3606 NDIS_STATUS MlmeHardTransmit(
3607 IN PRTMP_ADAPTER pAd,
3608 IN UCHAR QueIdx,
3609 IN PNDIS_PACKET pPacket);
3611 NDIS_STATUS MlmeHardTransmitMgmtRing(
3612 IN PRTMP_ADAPTER pAd,
3613 IN UCHAR QueIdx,
3614 IN PNDIS_PACKET pPacket);
3616 NDIS_STATUS MlmeHardTransmitTxRing(
3617 IN PRTMP_ADAPTER pAd,
3618 IN UCHAR QueIdx,
3619 IN PNDIS_PACKET pPacket);
3621 USHORT RTMPCalcDuration(
3622 IN PRTMP_ADAPTER pAd,
3623 IN UCHAR Rate,
3624 IN ULONG Size);
3626 VOID RTMPWriteTxWI(
3627 IN PRTMP_ADAPTER pAd,
3628 IN PTXWI_STRUC pTxWI,
3629 IN BOOLEAN FRAG,
3630 IN BOOLEAN CFACK,
3631 IN BOOLEAN InsTimestamp,
3632 IN BOOLEAN AMPDU,
3633 IN BOOLEAN Ack,
3634 IN BOOLEAN NSeq, // HW new a sequence.
3635 IN UCHAR BASize,
3636 IN UCHAR WCID,
3637 IN ULONG Length,
3638 IN UCHAR PID,
3639 IN UCHAR TID,
3640 IN UCHAR TxRate,
3641 IN UCHAR Txopmode,
3642 IN BOOLEAN CfAck,
3643 IN HTTRANSMIT_SETTING *pTransmit);
3646 VOID RTMPWriteTxWI_Data(
3647 IN PRTMP_ADAPTER pAd,
3648 IN OUT PTXWI_STRUC pTxWI,
3649 IN TX_BLK *pTxBlk);
3652 VOID RTMPWriteTxWI_Cache(
3653 IN PRTMP_ADAPTER pAd,
3654 IN OUT PTXWI_STRUC pTxWI,
3655 IN TX_BLK *pTxBlk);
3657 VOID RTMPWriteTxDescriptor(
3658 IN PRTMP_ADAPTER pAd,
3659 IN PTXD_STRUC pTxD,
3660 IN BOOLEAN bWIV,
3661 IN UCHAR QSEL);
3663 VOID RTMPSuspendMsduTransmission(
3664 IN PRTMP_ADAPTER pAd);
3666 VOID RTMPResumeMsduTransmission(
3667 IN PRTMP_ADAPTER pAd);
3669 NDIS_STATUS MiniportMMRequest(
3670 IN PRTMP_ADAPTER pAd,
3671 IN UCHAR QueIdx,
3672 IN PUCHAR pData,
3673 IN UINT Length);
3674 #ifdef RT2870
3675 NDIS_STATUS MiniportDataMMRequest(
3676 IN PRTMP_ADAPTER pAd,
3677 IN UCHAR QueIdx,
3678 IN PUCHAR pData,
3679 IN UINT Length);
3680 #endif
3681 VOID RTMPSendNullFrame(
3682 IN PRTMP_ADAPTER pAd,
3683 IN UCHAR TxRate,
3684 IN BOOLEAN bQosNull);
3686 VOID RTMPSendDisassociationFrame(
3687 IN PRTMP_ADAPTER pAd);
3689 VOID RTMPSendRTSFrame(
3690 IN PRTMP_ADAPTER pAd,
3691 IN PUCHAR pDA,
3692 IN unsigned int NextMpduSize,
3693 IN UCHAR TxRate,
3694 IN UCHAR RTSRate,
3695 IN USHORT AckDuration,
3696 IN UCHAR QueIdx,
3697 IN UCHAR FrameGap);
3700 NDIS_STATUS RTMPApplyPacketFilter(
3701 IN PRTMP_ADAPTER pAd,
3702 IN PRT28XX_RXD_STRUC pRxD,
3703 IN PHEADER_802_11 pHeader);
3705 PQUEUE_HEADER RTMPCheckTxSwQueue(
3706 IN PRTMP_ADAPTER pAd,
3707 OUT UCHAR *QueIdx);
3709 VOID RTMPReportMicError(
3710 IN PRTMP_ADAPTER pAd,
3711 IN PCIPHER_KEY pWpaKey);
3713 VOID WpaMicFailureReportFrame(
3714 IN PRTMP_ADAPTER pAd,
3715 IN MLME_QUEUE_ELEM *Elem);
3717 VOID WpaDisassocApAndBlockAssoc(
3718 IN PVOID SystemSpecific1,
3719 IN PVOID FunctionContext,
3720 IN PVOID SystemSpecific2,
3721 IN PVOID SystemSpecific3);
3723 NDIS_STATUS RTMPCloneNdisPacket(
3724 IN PRTMP_ADAPTER pAd,
3725 IN BOOLEAN pInsAMSDUHdr,
3726 IN PNDIS_PACKET pInPacket,
3727 OUT PNDIS_PACKET *ppOutPacket);
3729 NDIS_STATUS RTMPAllocateNdisPacket(
3730 IN PRTMP_ADAPTER pAd,
3731 IN PNDIS_PACKET *pPacket,
3732 IN PUCHAR pHeader,
3733 IN UINT HeaderLen,
3734 IN PUCHAR pData,
3735 IN UINT DataLen);
3737 VOID RTMPFreeNdisPacket(
3738 IN PRTMP_ADAPTER pAd,
3739 IN PNDIS_PACKET pPacket);
3741 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3742 IN PRTMP_ADAPTER pAd,
3743 IN UCHAR QueIdx);
3745 BOOLEAN RTMPCheckDHCPFrame(
3746 IN PRTMP_ADAPTER pAd,
3747 IN PNDIS_PACKET pPacket);
3750 BOOLEAN RTMPCheckEtherType(
3751 IN PRTMP_ADAPTER pAd,
3752 IN PNDIS_PACKET pPacket);
3755 VOID RTMPCckBbpTuning(
3756 IN PRTMP_ADAPTER pAd,
3757 IN UINT TxRate);
3760 // Private routines in rtmp_wep.c
3762 VOID RTMPInitWepEngine(
3763 IN PRTMP_ADAPTER pAd,
3764 IN PUCHAR pKey,
3765 IN UCHAR KeyId,
3766 IN UCHAR KeyLen,
3767 IN PUCHAR pDest);
3769 VOID RTMPEncryptData(
3770 IN PRTMP_ADAPTER pAd,
3771 IN PUCHAR pSrc,
3772 IN PUCHAR pDest,
3773 IN UINT Len);
3775 BOOLEAN RTMPDecryptData(
3776 IN PRTMP_ADAPTER pAdapter,
3777 IN PUCHAR pSrc,
3778 IN UINT Len,
3779 IN UINT idx);
3781 BOOLEAN RTMPSoftDecryptWEP(
3782 IN PRTMP_ADAPTER pAd,
3783 IN PUCHAR pData,
3784 IN ULONG DataByteCnt,
3785 IN PCIPHER_KEY pGroupKey);
3787 VOID RTMPSetICV(
3788 IN PRTMP_ADAPTER pAd,
3789 IN PUCHAR pDest);
3791 VOID ARCFOUR_INIT(
3792 IN PARCFOURCONTEXT Ctx,
3793 IN PUCHAR pKey,
3794 IN UINT KeyLen);
3796 UCHAR ARCFOUR_BYTE(
3797 IN PARCFOURCONTEXT Ctx);
3799 VOID ARCFOUR_DECRYPT(
3800 IN PARCFOURCONTEXT Ctx,
3801 IN PUCHAR pDest,
3802 IN PUCHAR pSrc,
3803 IN UINT Len);
3805 VOID ARCFOUR_ENCRYPT(
3806 IN PARCFOURCONTEXT Ctx,
3807 IN PUCHAR pDest,
3808 IN PUCHAR pSrc,
3809 IN UINT Len);
3811 VOID WPAARCFOUR_ENCRYPT(
3812 IN PARCFOURCONTEXT Ctx,
3813 IN PUCHAR pDest,
3814 IN PUCHAR pSrc,
3815 IN UINT Len);
3817 UINT RTMP_CALC_FCS32(
3818 IN UINT Fcs,
3819 IN PUCHAR Cp,
3820 IN INT Len);
3823 // MLME routines
3826 // Asic/RF/BBP related functions
3828 VOID AsicAdjustTxPower(
3829 IN PRTMP_ADAPTER pAd);
3831 VOID AsicUpdateProtect(
3832 IN PRTMP_ADAPTER pAd,
3833 IN USHORT OperaionMode,
3834 IN UCHAR SetMask,
3835 IN BOOLEAN bDisableBGProtect,
3836 IN BOOLEAN bNonGFExist);
3838 VOID AsicSwitchChannel(
3839 IN PRTMP_ADAPTER pAd,
3840 IN UCHAR Channel,
3841 IN BOOLEAN bScan);
3843 VOID AsicLockChannel(
3844 IN PRTMP_ADAPTER pAd,
3845 IN UCHAR Channel) ;
3847 VOID AsicAntennaSelect(
3848 IN PRTMP_ADAPTER pAd,
3849 IN UCHAR Channel);
3851 VOID AsicAntennaSetting(
3852 IN PRTMP_ADAPTER pAd,
3853 IN ABGBAND_STATE BandState);
3855 VOID AsicRfTuningExec(
3856 IN PVOID SystemSpecific1,
3857 IN PVOID FunctionContext,
3858 IN PVOID SystemSpecific2,
3859 IN PVOID SystemSpecific3);
3861 VOID AsicSleepThenAutoWakeup(
3862 IN PRTMP_ADAPTER pAd,
3863 IN USHORT TbttNumToNextWakeUp);
3865 VOID AsicForceSleep(
3866 IN PRTMP_ADAPTER pAd);
3868 VOID AsicForceWakeup(
3869 IN PRTMP_ADAPTER pAd,
3870 #ifdef RT2860
3871 IN UCHAR Level);
3872 #endif
3873 #ifdef RT2870
3874 IN BOOLEAN bFromTx);
3875 #endif
3877 VOID AsicSetBssid(
3878 IN PRTMP_ADAPTER pAd,
3879 IN PUCHAR pBssid);
3881 VOID AsicSetMcastWC(
3882 IN PRTMP_ADAPTER pAd);
3884 VOID AsicDelWcidTab(
3885 IN PRTMP_ADAPTER pAd,
3886 IN UCHAR Wcid);
3888 VOID AsicEnableRDG(
3889 IN PRTMP_ADAPTER pAd);
3891 VOID AsicDisableRDG(
3892 IN PRTMP_ADAPTER pAd);
3894 VOID AsicDisableSync(
3895 IN PRTMP_ADAPTER pAd);
3897 VOID AsicEnableBssSync(
3898 IN PRTMP_ADAPTER pAd);
3900 VOID AsicEnableIbssSync(
3901 IN PRTMP_ADAPTER pAd);
3903 VOID AsicSetEdcaParm(
3904 IN PRTMP_ADAPTER pAd,
3905 IN PEDCA_PARM pEdcaParm);
3907 VOID AsicSetSlotTime(
3908 IN PRTMP_ADAPTER pAd,
3909 IN BOOLEAN bUseShortSlotTime);
3911 VOID AsicAddSharedKeyEntry(
3912 IN PRTMP_ADAPTER pAd,
3913 IN UCHAR BssIndex,
3914 IN UCHAR KeyIdx,
3915 IN UCHAR CipherAlg,
3916 IN PUCHAR pKey,
3917 IN PUCHAR pTxMic,
3918 IN PUCHAR pRxMic);
3920 VOID AsicRemoveSharedKeyEntry(
3921 IN PRTMP_ADAPTER pAd,
3922 IN UCHAR BssIndex,
3923 IN UCHAR KeyIdx);
3925 VOID AsicUpdateWCIDAttribute(
3926 IN PRTMP_ADAPTER pAd,
3927 IN USHORT WCID,
3928 IN UCHAR BssIndex,
3929 IN UCHAR CipherAlg,
3930 IN BOOLEAN bUsePairewiseKeyTable);
3932 VOID AsicUpdateWCIDIVEIV(
3933 IN PRTMP_ADAPTER pAd,
3934 IN USHORT WCID,
3935 IN ULONG uIV,
3936 IN ULONG uEIV);
3938 VOID AsicUpdateRxWCIDTable(
3939 IN PRTMP_ADAPTER pAd,
3940 IN USHORT WCID,
3941 IN PUCHAR pAddr);
3943 VOID AsicAddKeyEntry(
3944 IN PRTMP_ADAPTER pAd,
3945 IN USHORT WCID,
3946 IN UCHAR BssIndex,
3947 IN UCHAR KeyIdx,
3948 IN PCIPHER_KEY pCipherKey,
3949 IN BOOLEAN bUsePairewiseKeyTable,
3950 IN BOOLEAN bTxKey);
3952 VOID AsicAddPairwiseKeyEntry(
3953 IN PRTMP_ADAPTER pAd,
3954 IN PUCHAR pAddr,
3955 IN UCHAR WCID,
3956 IN CIPHER_KEY *pCipherKey);
3958 VOID AsicRemovePairwiseKeyEntry(
3959 IN PRTMP_ADAPTER pAd,
3960 IN UCHAR BssIdx,
3961 IN UCHAR Wcid);
3963 BOOLEAN AsicSendCommandToMcu(
3964 IN PRTMP_ADAPTER pAd,
3965 IN UCHAR Command,
3966 IN UCHAR Token,
3967 IN UCHAR Arg0,
3968 IN UCHAR Arg1);
3969 #ifdef RT2860
3970 BOOLEAN AsicCheckCommanOk(
3971 IN PRTMP_ADAPTER pAd,
3972 IN UCHAR Command);
3973 #endif
3974 VOID MacAddrRandomBssid(
3975 IN PRTMP_ADAPTER pAd,
3976 OUT PUCHAR pAddr);
3978 VOID MgtMacHeaderInit(
3979 IN PRTMP_ADAPTER pAd,
3980 IN OUT PHEADER_802_11 pHdr80211,
3981 IN UCHAR SubType,
3982 IN UCHAR ToDs,
3983 IN PUCHAR pDA,
3984 IN PUCHAR pBssid);
3986 VOID MlmeRadioOff(
3987 IN PRTMP_ADAPTER pAd);
3989 VOID MlmeRadioOn(
3990 IN PRTMP_ADAPTER pAd);
3993 VOID BssTableInit(
3994 IN BSS_TABLE *Tab);
3996 VOID BATableInit(
3997 IN PRTMP_ADAPTER pAd,
3998 IN BA_TABLE *Tab);
4000 ULONG BssTableSearch(
4001 IN BSS_TABLE *Tab,
4002 IN PUCHAR pBssid,
4003 IN UCHAR Channel);
4005 ULONG BssSsidTableSearch(
4006 IN BSS_TABLE *Tab,
4007 IN PUCHAR pBssid,
4008 IN PUCHAR pSsid,
4009 IN UCHAR SsidLen,
4010 IN UCHAR Channel);
4012 ULONG BssTableSearchWithSSID(
4013 IN BSS_TABLE *Tab,
4014 IN PUCHAR Bssid,
4015 IN PUCHAR pSsid,
4016 IN UCHAR SsidLen,
4017 IN UCHAR Channel);
4019 VOID BssTableDeleteEntry(
4020 IN OUT PBSS_TABLE pTab,
4021 IN PUCHAR pBssid,
4022 IN UCHAR Channel);
4024 VOID BATableDeleteORIEntry(
4025 IN OUT PRTMP_ADAPTER pAd,
4026 IN BA_ORI_ENTRY *pBAORIEntry);
4028 VOID BATableDeleteRECEntry(
4029 IN OUT PRTMP_ADAPTER pAd,
4030 IN BA_REC_ENTRY *pBARECEntry);
4032 VOID BATableTearORIEntry(
4033 IN OUT PRTMP_ADAPTER pAd,
4034 IN UCHAR TID,
4035 IN UCHAR Wcid,
4036 IN BOOLEAN bForceDelete,
4037 IN BOOLEAN ALL);
4039 VOID BATableTearRECEntry(
4040 IN OUT PRTMP_ADAPTER pAd,
4041 IN UCHAR TID,
4042 IN UCHAR WCID,
4043 IN BOOLEAN ALL);
4045 VOID BssEntrySet(
4046 IN PRTMP_ADAPTER pAd,
4047 OUT PBSS_ENTRY pBss,
4048 IN PUCHAR pBssid,
4049 IN CHAR Ssid[],
4050 IN UCHAR SsidLen,
4051 IN UCHAR BssType,
4052 IN USHORT BeaconPeriod,
4053 IN PCF_PARM CfParm,
4054 IN USHORT AtimWin,
4055 IN USHORT CapabilityInfo,
4056 IN UCHAR SupRate[],
4057 IN UCHAR SupRateLen,
4058 IN UCHAR ExtRate[],
4059 IN UCHAR ExtRateLen,
4060 IN HT_CAPABILITY_IE *pHtCapability,
4061 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4062 IN UCHAR HtCapabilityLen,
4063 IN UCHAR AddHtInfoLen,
4064 IN UCHAR NewExtChanOffset,
4065 IN UCHAR Channel,
4066 IN CHAR Rssi,
4067 IN LARGE_INTEGER TimeStamp,
4068 IN UCHAR CkipFlag,
4069 IN PEDCA_PARM pEdcaParm,
4070 IN PQOS_CAPABILITY_PARM pQosCapability,
4071 IN PQBSS_LOAD_PARM pQbssLoad,
4072 IN USHORT LengthVIE,
4073 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4075 ULONG BssTableSetEntry(
4076 IN PRTMP_ADAPTER pAd,
4077 OUT PBSS_TABLE pTab,
4078 IN PUCHAR pBssid,
4079 IN CHAR Ssid[],
4080 IN UCHAR SsidLen,
4081 IN UCHAR BssType,
4082 IN USHORT BeaconPeriod,
4083 IN CF_PARM *CfParm,
4084 IN USHORT AtimWin,
4085 IN USHORT CapabilityInfo,
4086 IN UCHAR SupRate[],
4087 IN UCHAR SupRateLen,
4088 IN UCHAR ExtRate[],
4089 IN UCHAR ExtRateLen,
4090 IN HT_CAPABILITY_IE *pHtCapability,
4091 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4092 IN UCHAR HtCapabilityLen,
4093 IN UCHAR AddHtInfoLen,
4094 IN UCHAR NewExtChanOffset,
4095 IN UCHAR Channel,
4096 IN CHAR Rssi,
4097 IN LARGE_INTEGER TimeStamp,
4098 IN UCHAR CkipFlag,
4099 IN PEDCA_PARM pEdcaParm,
4100 IN PQOS_CAPABILITY_PARM pQosCapability,
4101 IN PQBSS_LOAD_PARM pQbssLoad,
4102 IN USHORT LengthVIE,
4103 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4105 VOID BATableInsertEntry(
4106 IN PRTMP_ADAPTER pAd,
4107 IN USHORT Aid,
4108 IN USHORT TimeOutValue,
4109 IN USHORT StartingSeq,
4110 IN UCHAR TID,
4111 IN UCHAR BAWinSize,
4112 IN UCHAR OriginatorStatus,
4113 IN BOOLEAN IsRecipient);
4115 VOID BssTableSsidSort(
4116 IN PRTMP_ADAPTER pAd,
4117 OUT BSS_TABLE *OutTab,
4118 IN CHAR Ssid[],
4119 IN UCHAR SsidLen);
4121 VOID BssTableSortByRssi(
4122 IN OUT BSS_TABLE *OutTab);
4124 VOID BssCipherParse(
4125 IN OUT PBSS_ENTRY pBss);
4127 NDIS_STATUS MlmeQueueInit(
4128 IN MLME_QUEUE *Queue);
4130 VOID MlmeQueueDestroy(
4131 IN MLME_QUEUE *Queue);
4133 BOOLEAN MlmeEnqueue(
4134 IN PRTMP_ADAPTER pAd,
4135 IN ULONG Machine,
4136 IN ULONG MsgType,
4137 IN ULONG MsgLen,
4138 IN VOID *Msg);
4140 BOOLEAN MlmeEnqueueForRecv(
4141 IN PRTMP_ADAPTER pAd,
4142 IN ULONG Wcid,
4143 IN ULONG TimeStampHigh,
4144 IN ULONG TimeStampLow,
4145 IN UCHAR Rssi0,
4146 IN UCHAR Rssi1,
4147 IN UCHAR Rssi2,
4148 IN ULONG MsgLen,
4149 IN PVOID Msg,
4150 IN UCHAR Signal);
4153 BOOLEAN MlmeDequeue(
4154 IN MLME_QUEUE *Queue,
4155 OUT MLME_QUEUE_ELEM **Elem);
4157 VOID MlmeRestartStateMachine(
4158 IN PRTMP_ADAPTER pAd);
4160 BOOLEAN MlmeQueueEmpty(
4161 IN MLME_QUEUE *Queue);
4163 BOOLEAN MlmeQueueFull(
4164 IN MLME_QUEUE *Queue);
4166 BOOLEAN MsgTypeSubst(
4167 IN PRTMP_ADAPTER pAd,
4168 IN PFRAME_802_11 pFrame,
4169 OUT INT *Machine,
4170 OUT INT *MsgType);
4172 VOID StateMachineInit(
4173 IN STATE_MACHINE *Sm,
4174 IN STATE_MACHINE_FUNC Trans[],
4175 IN ULONG StNr,
4176 IN ULONG MsgNr,
4177 IN STATE_MACHINE_FUNC DefFunc,
4178 IN ULONG InitState,
4179 IN ULONG Base);
4181 VOID StateMachineSetAction(
4182 IN STATE_MACHINE *S,
4183 IN ULONG St,
4184 ULONG Msg,
4185 IN STATE_MACHINE_FUNC F);
4187 VOID StateMachinePerformAction(
4188 IN PRTMP_ADAPTER pAd,
4189 IN STATE_MACHINE *S,
4190 IN MLME_QUEUE_ELEM *Elem);
4192 VOID Drop(
4193 IN PRTMP_ADAPTER pAd,
4194 IN MLME_QUEUE_ELEM *Elem);
4196 VOID AssocStateMachineInit(
4197 IN PRTMP_ADAPTER pAd,
4198 IN STATE_MACHINE *Sm,
4199 OUT STATE_MACHINE_FUNC Trans[]);
4201 VOID ReassocTimeout(
4202 IN PVOID SystemSpecific1,
4203 IN PVOID FunctionContext,
4204 IN PVOID SystemSpecific2,
4205 IN PVOID SystemSpecific3);
4207 VOID AssocTimeout(
4208 IN PVOID SystemSpecific1,
4209 IN PVOID FunctionContext,
4210 IN PVOID SystemSpecific2,
4211 IN PVOID SystemSpecific3);
4213 VOID DisassocTimeout(
4214 IN PVOID SystemSpecific1,
4215 IN PVOID FunctionContext,
4216 IN PVOID SystemSpecific2,
4217 IN PVOID SystemSpecific3);
4219 //----------------------------------------------
4220 VOID MlmeDisassocReqAction(
4221 IN PRTMP_ADAPTER pAd,
4222 IN MLME_QUEUE_ELEM *Elem);
4224 VOID MlmeAssocReqAction(
4225 IN PRTMP_ADAPTER pAd,
4226 IN MLME_QUEUE_ELEM *Elem);
4228 VOID MlmeReassocReqAction(
4229 IN PRTMP_ADAPTER pAd,
4230 IN MLME_QUEUE_ELEM *Elem);
4232 VOID MlmeDisassocReqAction(
4233 IN PRTMP_ADAPTER pAd,
4234 IN MLME_QUEUE_ELEM *Elem);
4236 VOID PeerAssocRspAction(
4237 IN PRTMP_ADAPTER pAd,
4238 IN MLME_QUEUE_ELEM *Elem);
4240 VOID PeerReassocRspAction(
4241 IN PRTMP_ADAPTER pAd,
4242 IN MLME_QUEUE_ELEM *Elem);
4244 VOID PeerDisassocAction(
4245 IN PRTMP_ADAPTER pAd,
4246 IN MLME_QUEUE_ELEM *Elem);
4248 VOID DisassocTimeoutAction(
4249 IN PRTMP_ADAPTER pAd,
4250 IN MLME_QUEUE_ELEM *Elem);
4252 VOID AssocTimeoutAction(
4253 IN PRTMP_ADAPTER pAd,
4254 IN MLME_QUEUE_ELEM *Elem);
4256 VOID ReassocTimeoutAction(
4257 IN PRTMP_ADAPTER pAd,
4258 IN MLME_QUEUE_ELEM *Elem);
4260 VOID Cls3errAction(
4261 IN PRTMP_ADAPTER pAd,
4262 IN PUCHAR pAddr);
4264 VOID SwitchBetweenWepAndCkip(
4265 IN PRTMP_ADAPTER pAd);
4267 VOID InvalidStateWhenAssoc(
4268 IN PRTMP_ADAPTER pAd,
4269 IN MLME_QUEUE_ELEM *Elem);
4271 VOID InvalidStateWhenReassoc(
4272 IN PRTMP_ADAPTER pAd,
4273 IN MLME_QUEUE_ELEM *Elem);
4275 VOID InvalidStateWhenDisassociate(
4276 IN PRTMP_ADAPTER pAd,
4277 IN MLME_QUEUE_ELEM *Elem);
4279 #ifdef RT2870
4280 VOID MlmeCntlConfirm(
4281 IN PRTMP_ADAPTER pAd,
4282 IN ULONG MsgType,
4283 IN USHORT Msg);
4284 #endif // RT2870 //
4286 VOID ComposePsPoll(
4287 IN PRTMP_ADAPTER pAd);
4289 VOID ComposeNullFrame(
4290 IN PRTMP_ADAPTER pAd);
4292 VOID AssocPostProc(
4293 IN PRTMP_ADAPTER pAd,
4294 IN PUCHAR pAddr2,
4295 IN USHORT CapabilityInfo,
4296 IN USHORT Aid,
4297 IN UCHAR SupRate[],
4298 IN UCHAR SupRateLen,
4299 IN UCHAR ExtRate[],
4300 IN UCHAR ExtRateLen,
4301 IN PEDCA_PARM pEdcaParm,
4302 IN HT_CAPABILITY_IE *pHtCapability,
4303 IN UCHAR HtCapabilityLen,
4304 IN ADD_HT_INFO_IE *pAddHtInfo);
4306 VOID AuthStateMachineInit(
4307 IN PRTMP_ADAPTER pAd,
4308 IN PSTATE_MACHINE sm,
4309 OUT STATE_MACHINE_FUNC Trans[]);
4311 VOID AuthTimeout(
4312 IN PVOID SystemSpecific1,
4313 IN PVOID FunctionContext,
4314 IN PVOID SystemSpecific2,
4315 IN PVOID SystemSpecific3);
4317 VOID MlmeAuthReqAction(
4318 IN PRTMP_ADAPTER pAd,
4319 IN MLME_QUEUE_ELEM *Elem);
4321 VOID PeerAuthRspAtSeq2Action(
4322 IN PRTMP_ADAPTER pAd,
4323 IN MLME_QUEUE_ELEM *Elem);
4325 VOID PeerAuthRspAtSeq4Action(
4326 IN PRTMP_ADAPTER pAd,
4327 IN MLME_QUEUE_ELEM *Elem);
4329 VOID AuthTimeoutAction(
4330 IN PRTMP_ADAPTER pAd,
4331 IN MLME_QUEUE_ELEM *Elem);
4333 VOID Cls2errAction(
4334 IN PRTMP_ADAPTER pAd,
4335 IN PUCHAR pAddr);
4337 VOID MlmeDeauthReqAction(
4338 IN PRTMP_ADAPTER pAd,
4339 IN MLME_QUEUE_ELEM *Elem);
4341 VOID InvalidStateWhenAuth(
4342 IN PRTMP_ADAPTER pAd,
4343 IN MLME_QUEUE_ELEM *Elem);
4345 //=============================================
4347 VOID AuthRspStateMachineInit(
4348 IN PRTMP_ADAPTER pAd,
4349 IN PSTATE_MACHINE Sm,
4350 IN STATE_MACHINE_FUNC Trans[]);
4352 VOID PeerDeauthAction(
4353 IN PRTMP_ADAPTER pAd,
4354 IN MLME_QUEUE_ELEM *Elem);
4356 VOID PeerAuthSimpleRspGenAndSend(
4357 IN PRTMP_ADAPTER pAd,
4358 IN PHEADER_802_11 pHdr80211,
4359 IN USHORT Alg,
4360 IN USHORT Seq,
4361 IN USHORT Reason,
4362 IN USHORT Status);
4365 // Private routines in dls.c
4368 //========================================
4370 VOID SyncStateMachineInit(
4371 IN PRTMP_ADAPTER pAd,
4372 IN STATE_MACHINE *Sm,
4373 OUT STATE_MACHINE_FUNC Trans[]);
4375 VOID BeaconTimeout(
4376 IN PVOID SystemSpecific1,
4377 IN PVOID FunctionContext,
4378 IN PVOID SystemSpecific2,
4379 IN PVOID SystemSpecific3);
4381 VOID ScanTimeout(
4382 IN PVOID SystemSpecific1,
4383 IN PVOID FunctionContext,
4384 IN PVOID SystemSpecific2,
4385 IN PVOID SystemSpecific3);
4387 VOID MlmeScanReqAction(
4388 IN PRTMP_ADAPTER pAd,
4389 IN MLME_QUEUE_ELEM *Elem);
4391 VOID InvalidStateWhenScan(
4392 IN PRTMP_ADAPTER pAd,
4393 IN MLME_QUEUE_ELEM *Elem);
4395 VOID InvalidStateWhenJoin(
4396 IN PRTMP_ADAPTER pAd,
4397 IN MLME_QUEUE_ELEM *Elem);
4399 VOID InvalidStateWhenStart(
4400 IN PRTMP_ADAPTER pAd,
4401 IN MLME_QUEUE_ELEM *Elem);
4403 VOID PeerBeacon(
4404 IN PRTMP_ADAPTER pAd,
4405 IN MLME_QUEUE_ELEM *Elem);
4407 VOID EnqueueProbeRequest(
4408 IN PRTMP_ADAPTER pAd);
4410 BOOLEAN ScanRunning(
4411 IN PRTMP_ADAPTER pAd);
4412 //=========================================
4414 VOID MlmeCntlInit(
4415 IN PRTMP_ADAPTER pAd,
4416 IN STATE_MACHINE *S,
4417 OUT STATE_MACHINE_FUNC Trans[]);
4419 VOID MlmeCntlMachinePerformAction(
4420 IN PRTMP_ADAPTER pAd,
4421 IN STATE_MACHINE *S,
4422 IN MLME_QUEUE_ELEM *Elem);
4424 VOID CntlIdleProc(
4425 IN PRTMP_ADAPTER pAd,
4426 IN MLME_QUEUE_ELEM *Elem);
4428 VOID CntlOidScanProc(
4429 IN PRTMP_ADAPTER pAd,
4430 IN MLME_QUEUE_ELEM *Elem);
4432 VOID CntlOidSsidProc(
4433 IN PRTMP_ADAPTER pAd,
4434 IN MLME_QUEUE_ELEM * Elem);
4436 VOID CntlOidRTBssidProc(
4437 IN PRTMP_ADAPTER pAd,
4438 IN MLME_QUEUE_ELEM * Elem);
4440 VOID CntlMlmeRoamingProc(
4441 IN PRTMP_ADAPTER pAd,
4442 IN MLME_QUEUE_ELEM * Elem);
4444 VOID CntlWaitDisassocProc(
4445 IN PRTMP_ADAPTER pAd,
4446 IN MLME_QUEUE_ELEM *Elem);
4448 VOID CntlWaitJoinProc(
4449 IN PRTMP_ADAPTER pAd,
4450 IN MLME_QUEUE_ELEM *Elem);
4452 VOID CntlWaitReassocProc(
4453 IN PRTMP_ADAPTER pAd,
4454 IN MLME_QUEUE_ELEM *Elem);
4456 VOID CntlWaitStartProc(
4457 IN PRTMP_ADAPTER pAd,
4458 IN MLME_QUEUE_ELEM *Elem);
4460 VOID CntlWaitAuthProc(
4461 IN PRTMP_ADAPTER pAd,
4462 IN MLME_QUEUE_ELEM *Elem);
4464 VOID CntlWaitAuthProc2(
4465 IN PRTMP_ADAPTER pAd,
4466 IN MLME_QUEUE_ELEM *Elem);
4468 VOID CntlWaitAssocProc(
4469 IN PRTMP_ADAPTER pAd,
4470 IN MLME_QUEUE_ELEM *Elem);
4472 VOID LinkUp(
4473 IN PRTMP_ADAPTER pAd,
4474 IN UCHAR BssType);
4476 VOID LinkDown(
4477 IN PRTMP_ADAPTER pAd,
4478 IN BOOLEAN IsReqFromAP);
4480 VOID IterateOnBssTab(
4481 IN PRTMP_ADAPTER pAd);
4483 VOID IterateOnBssTab2(
4484 IN PRTMP_ADAPTER pAd);;
4486 VOID JoinParmFill(
4487 IN PRTMP_ADAPTER pAd,
4488 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4489 IN ULONG BssIdx);
4491 VOID AssocParmFill(
4492 IN PRTMP_ADAPTER pAd,
4493 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4494 IN PUCHAR pAddr,
4495 IN USHORT CapabilityInfo,
4496 IN ULONG Timeout,
4497 IN USHORT ListenIntv);
4499 VOID ScanParmFill(
4500 IN PRTMP_ADAPTER pAd,
4501 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4502 IN CHAR Ssid[],
4503 IN UCHAR SsidLen,
4504 IN UCHAR BssType,
4505 IN UCHAR ScanType);
4507 VOID DisassocParmFill(
4508 IN PRTMP_ADAPTER pAd,
4509 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4510 IN PUCHAR pAddr,
4511 IN USHORT Reason);
4513 VOID StartParmFill(
4514 IN PRTMP_ADAPTER pAd,
4515 IN OUT MLME_START_REQ_STRUCT *StartReq,
4516 IN CHAR Ssid[],
4517 IN UCHAR SsidLen);
4519 VOID AuthParmFill(
4520 IN PRTMP_ADAPTER pAd,
4521 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4522 IN PUCHAR pAddr,
4523 IN USHORT Alg);
4525 VOID EnqueuePsPoll(
4526 IN PRTMP_ADAPTER pAd);
4528 VOID EnqueueBeaconFrame(
4529 IN PRTMP_ADAPTER pAd);
4531 VOID MlmeJoinReqAction(
4532 IN PRTMP_ADAPTER pAd,
4533 IN MLME_QUEUE_ELEM *Elem);
4535 VOID MlmeScanReqAction(
4536 IN PRTMP_ADAPTER pAd,
4537 IN MLME_QUEUE_ELEM *Elem);
4539 VOID MlmeStartReqAction(
4540 IN PRTMP_ADAPTER pAd,
4541 IN MLME_QUEUE_ELEM *Elem);
4543 VOID ScanTimeoutAction(
4544 IN PRTMP_ADAPTER pAd,
4545 IN MLME_QUEUE_ELEM *Elem);
4547 VOID BeaconTimeoutAtJoinAction(
4548 IN PRTMP_ADAPTER pAd,
4549 IN MLME_QUEUE_ELEM *Elem);
4551 VOID PeerBeaconAtScanAction(
4552 IN PRTMP_ADAPTER pAd,
4553 IN MLME_QUEUE_ELEM *Elem);
4555 VOID PeerBeaconAtJoinAction(
4556 IN PRTMP_ADAPTER pAd,
4557 IN MLME_QUEUE_ELEM *Elem);
4559 VOID PeerBeacon(
4560 IN PRTMP_ADAPTER pAd,
4561 IN MLME_QUEUE_ELEM *Elem);
4563 VOID PeerProbeReqAction(
4564 IN PRTMP_ADAPTER pAd,
4565 IN MLME_QUEUE_ELEM *Elem);
4567 VOID ScanNextChannel(
4568 IN PRTMP_ADAPTER pAd);
4570 ULONG MakeIbssBeacon(
4571 IN PRTMP_ADAPTER pAd);
4573 VOID CCXAdjacentAPReport(
4574 IN PRTMP_ADAPTER pAd);
4576 BOOLEAN MlmeScanReqSanity(
4577 IN PRTMP_ADAPTER pAd,
4578 IN VOID *Msg,
4579 IN ULONG MsgLen,
4580 OUT UCHAR *BssType,
4581 OUT CHAR ssid[],
4582 OUT UCHAR *SsidLen,
4583 OUT UCHAR *ScanType);
4585 BOOLEAN PeerBeaconAndProbeRspSanity(
4586 IN PRTMP_ADAPTER pAd,
4587 IN VOID *Msg,
4588 IN ULONG MsgLen,
4589 IN UCHAR MsgChannel,
4590 OUT PUCHAR pAddr2,
4591 OUT PUCHAR pBssid,
4592 OUT CHAR Ssid[],
4593 OUT UCHAR *pSsidLen,
4594 OUT UCHAR *pBssType,
4595 OUT USHORT *pBeaconPeriod,
4596 OUT UCHAR *pChannel,
4597 OUT UCHAR *pNewChannel,
4598 OUT LARGE_INTEGER *pTimestamp,
4599 OUT CF_PARM *pCfParm,
4600 OUT USHORT *pAtimWin,
4601 OUT USHORT *pCapabilityInfo,
4602 OUT UCHAR *pErp,
4603 OUT UCHAR *pDtimCount,
4604 OUT UCHAR *pDtimPeriod,
4605 OUT UCHAR *pBcastFlag,
4606 OUT UCHAR *pMessageToMe,
4607 OUT UCHAR SupRate[],
4608 OUT UCHAR *pSupRateLen,
4609 OUT UCHAR ExtRate[],
4610 OUT UCHAR *pExtRateLen,
4611 OUT UCHAR *pCkipFlag,
4612 OUT UCHAR *pAironetCellPowerLimit,
4613 OUT PEDCA_PARM pEdcaParm,
4614 OUT PQBSS_LOAD_PARM pQbssLoad,
4615 OUT PQOS_CAPABILITY_PARM pQosCapability,
4616 OUT ULONG *pRalinkIe,
4617 OUT UCHAR *pHtCapabilityLen,
4618 OUT UCHAR *pPreNHtCapabilityLen,
4619 OUT HT_CAPABILITY_IE *pHtCapability,
4620 OUT UCHAR *AddHtInfoLen,
4621 OUT ADD_HT_INFO_IE *AddHtInfo,
4622 OUT UCHAR *NewExtChannel,
4623 OUT USHORT *LengthVIE,
4624 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4626 BOOLEAN PeerAddBAReqActionSanity(
4627 IN PRTMP_ADAPTER pAd,
4628 IN VOID *pMsg,
4629 IN ULONG MsgLen,
4630 OUT PUCHAR pAddr2);
4632 BOOLEAN PeerAddBARspActionSanity(
4633 IN PRTMP_ADAPTER pAd,
4634 IN VOID *pMsg,
4635 IN ULONG MsgLen);
4637 BOOLEAN PeerDelBAActionSanity(
4638 IN PRTMP_ADAPTER pAd,
4639 IN UCHAR Wcid,
4640 IN VOID *pMsg,
4641 IN ULONG MsgLen);
4643 BOOLEAN MlmeAssocReqSanity(
4644 IN PRTMP_ADAPTER pAd,
4645 IN VOID *Msg,
4646 IN ULONG MsgLen,
4647 OUT PUCHAR pApAddr,
4648 OUT USHORT *CapabilityInfo,
4649 OUT ULONG *Timeout,
4650 OUT USHORT *ListenIntv);
4652 BOOLEAN MlmeAuthReqSanity(
4653 IN PRTMP_ADAPTER pAd,
4654 IN VOID *Msg,
4655 IN ULONG MsgLen,
4656 OUT PUCHAR pAddr,
4657 OUT ULONG *Timeout,
4658 OUT USHORT *Alg);
4660 BOOLEAN MlmeStartReqSanity(
4661 IN PRTMP_ADAPTER pAd,
4662 IN VOID *Msg,
4663 IN ULONG MsgLen,
4664 OUT CHAR Ssid[],
4665 OUT UCHAR *Ssidlen);
4667 BOOLEAN PeerAuthSanity(
4668 IN PRTMP_ADAPTER pAd,
4669 IN VOID *Msg,
4670 IN ULONG MsgLen,
4671 OUT PUCHAR pAddr,
4672 OUT USHORT *Alg,
4673 OUT USHORT *Seq,
4674 OUT USHORT *Status,
4675 OUT CHAR ChlgText[]);
4677 BOOLEAN PeerAssocRspSanity(
4678 IN PRTMP_ADAPTER pAd,
4679 IN VOID *pMsg,
4680 IN ULONG MsgLen,
4681 OUT PUCHAR pAddr2,
4682 OUT USHORT *pCapabilityInfo,
4683 OUT USHORT *pStatus,
4684 OUT USHORT *pAid,
4685 OUT UCHAR SupRate[],
4686 OUT UCHAR *pSupRateLen,
4687 OUT UCHAR ExtRate[],
4688 OUT UCHAR *pExtRateLen,
4689 OUT HT_CAPABILITY_IE *pHtCapability,
4690 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4691 OUT UCHAR *pHtCapabilityLen,
4692 OUT UCHAR *pAddHtInfoLen,
4693 OUT UCHAR *pNewExtChannelOffset,
4694 OUT PEDCA_PARM pEdcaParm,
4695 OUT UCHAR *pCkipFlag);
4697 BOOLEAN PeerDisassocSanity(
4698 IN PRTMP_ADAPTER pAd,
4699 IN VOID *Msg,
4700 IN ULONG MsgLen,
4701 OUT PUCHAR pAddr2,
4702 OUT USHORT *Reason);
4704 BOOLEAN PeerWpaMessageSanity(
4705 IN PRTMP_ADAPTER pAd,
4706 IN PEAPOL_PACKET pMsg,
4707 IN ULONG MsgLen,
4708 IN UCHAR MsgType,
4709 IN MAC_TABLE_ENTRY *pEntry);
4711 BOOLEAN PeerDeauthSanity(
4712 IN PRTMP_ADAPTER pAd,
4713 IN VOID *Msg,
4714 IN ULONG MsgLen,
4715 OUT PUCHAR pAddr2,
4716 OUT USHORT *Reason);
4718 BOOLEAN PeerProbeReqSanity(
4719 IN PRTMP_ADAPTER pAd,
4720 IN VOID *Msg,
4721 IN ULONG MsgLen,
4722 OUT PUCHAR pAddr2,
4723 OUT CHAR Ssid[],
4724 OUT UCHAR *pSsidLen);
4726 BOOLEAN GetTimBit(
4727 IN CHAR *Ptr,
4728 IN USHORT Aid,
4729 OUT UCHAR *TimLen,
4730 OUT UCHAR *BcastFlag,
4731 OUT UCHAR *DtimCount,
4732 OUT UCHAR *DtimPeriod,
4733 OUT UCHAR *MessageToMe);
4735 UCHAR ChannelSanity(
4736 IN PRTMP_ADAPTER pAd,
4737 IN UCHAR channel);
4739 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4740 IN PBSS_ENTRY pBss);
4742 BOOLEAN MlmeDelBAReqSanity(
4743 IN PRTMP_ADAPTER pAd,
4744 IN VOID *Msg,
4745 IN ULONG MsgLen);
4747 BOOLEAN MlmeAddBAReqSanity(
4748 IN PRTMP_ADAPTER pAd,
4749 IN VOID *Msg,
4750 IN ULONG MsgLen,
4751 OUT PUCHAR pAddr2);
4753 ULONG MakeOutgoingFrame(
4754 OUT CHAR *Buffer,
4755 OUT ULONG *Length, ...);
4757 VOID LfsrInit(
4758 IN PRTMP_ADAPTER pAd,
4759 IN ULONG Seed);
4761 UCHAR RandomByte(
4762 IN PRTMP_ADAPTER pAd);
4764 VOID AsicUpdateAutoFallBackTable(
4765 IN PRTMP_ADAPTER pAd,
4766 IN PUCHAR pTxRate);
4768 VOID MlmePeriodicExec(
4769 IN PVOID SystemSpecific1,
4770 IN PVOID FunctionContext,
4771 IN PVOID SystemSpecific2,
4772 IN PVOID SystemSpecific3);
4774 VOID LinkDownExec(
4775 IN PVOID SystemSpecific1,
4776 IN PVOID FunctionContext,
4777 IN PVOID SystemSpecific2,
4778 IN PVOID SystemSpecific3);
4780 VOID LinkUpExec(
4781 IN PVOID SystemSpecific1,
4782 IN PVOID FunctionContext,
4783 IN PVOID SystemSpecific2,
4784 IN PVOID SystemSpecific3);
4786 VOID STAMlmePeriodicExec(
4787 PRTMP_ADAPTER pAd);
4789 VOID MlmeAutoScan(
4790 IN PRTMP_ADAPTER pAd);
4792 VOID MlmeAutoReconnectLastSSID(
4793 IN PRTMP_ADAPTER pAd);
4795 BOOLEAN MlmeValidateSSID(
4796 IN PUCHAR pSsid,
4797 IN UCHAR SsidLen);
4799 VOID MlmeCheckForRoaming(
4800 IN PRTMP_ADAPTER pAd,
4801 IN ULONG Now32);
4803 VOID MlmeCheckForFastRoaming(
4804 IN PRTMP_ADAPTER pAd,
4805 IN ULONG Now);
4807 VOID MlmeDynamicTxRateSwitching(
4808 IN PRTMP_ADAPTER pAd);
4810 VOID MlmeSetTxRate(
4811 IN PRTMP_ADAPTER pAd,
4812 IN PMAC_TABLE_ENTRY pEntry,
4813 IN PRTMP_TX_RATE_SWITCH pTxRate);
4815 VOID MlmeSelectTxRateTable(
4816 IN PRTMP_ADAPTER pAd,
4817 IN PMAC_TABLE_ENTRY pEntry,
4818 IN PUCHAR *ppTable,
4819 IN PUCHAR pTableSize,
4820 IN PUCHAR pInitTxRateIdx);
4822 VOID MlmeCalculateChannelQuality(
4823 IN PRTMP_ADAPTER pAd,
4824 IN ULONG Now);
4826 VOID MlmeCheckPsmChange(
4827 IN PRTMP_ADAPTER pAd,
4828 IN ULONG Now32);
4830 VOID MlmeSetPsmBit(
4831 IN PRTMP_ADAPTER pAd,
4832 IN USHORT psm);
4834 VOID MlmeSetTxPreamble(
4835 IN PRTMP_ADAPTER pAd,
4836 IN USHORT TxPreamble);
4838 VOID UpdateBasicRateBitmap(
4839 IN PRTMP_ADAPTER pAd);
4841 VOID MlmeUpdateTxRates(
4842 IN PRTMP_ADAPTER pAd,
4843 IN BOOLEAN bLinkUp,
4844 IN UCHAR apidx);
4846 VOID MlmeUpdateHtTxRates(
4847 IN PRTMP_ADAPTER pAd,
4848 IN UCHAR apidx);
4850 VOID RTMPCheckRates(
4851 IN PRTMP_ADAPTER pAd,
4852 IN OUT UCHAR SupRate[],
4853 IN OUT UCHAR *SupRateLen);
4855 BOOLEAN RTMPCheckChannel(
4856 IN PRTMP_ADAPTER pAd,
4857 IN UCHAR CentralChannel,
4858 IN UCHAR Channel);
4860 BOOLEAN RTMPCheckHt(
4861 IN PRTMP_ADAPTER pAd,
4862 IN UCHAR Wcid,
4863 IN OUT HT_CAPABILITY_IE *pHtCapability,
4864 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
4866 VOID StaQuickResponeForRateUpExec(
4867 IN PVOID SystemSpecific1,
4868 IN PVOID FunctionContext,
4869 IN PVOID SystemSpecific2,
4870 IN PVOID SystemSpecific3);
4872 VOID AsicBbpTuning1(
4873 IN PRTMP_ADAPTER pAd);
4875 VOID AsicBbpTuning2(
4876 IN PRTMP_ADAPTER pAd);
4878 VOID RTMPUpdateMlmeRate(
4879 IN PRTMP_ADAPTER pAd);
4881 CHAR RTMPMaxRssi(
4882 IN PRTMP_ADAPTER pAd,
4883 IN CHAR Rssi0,
4884 IN CHAR Rssi1,
4885 IN CHAR Rssi2);
4887 VOID AsicSetRxAnt(
4888 IN PRTMP_ADAPTER pAd,
4889 IN UCHAR Ant);
4891 VOID AsicEvaluateRxAnt(
4892 IN PRTMP_ADAPTER pAd);
4894 VOID AsicRxAntEvalTimeout(
4895 IN PVOID SystemSpecific1,
4896 IN PVOID FunctionContext,
4897 IN PVOID SystemSpecific2,
4898 IN PVOID SystemSpecific3);
4900 VOID APSDPeriodicExec(
4901 IN PVOID SystemSpecific1,
4902 IN PVOID FunctionContext,
4903 IN PVOID SystemSpecific2,
4904 IN PVOID SystemSpecific3);
4906 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4907 IN PRTMP_ADAPTER pAd,
4908 IN PMAC_TABLE_ENTRY pEntry);
4910 UCHAR RTMPStaFixedTxMode(
4911 IN PRTMP_ADAPTER pAd,
4912 IN PMAC_TABLE_ENTRY pEntry);
4914 VOID RTMPUpdateLegacyTxSetting(
4915 UCHAR fixed_tx_mode,
4916 PMAC_TABLE_ENTRY pEntry);
4918 BOOLEAN RTMPAutoRateSwitchCheck(
4919 IN PRTMP_ADAPTER pAd);
4921 NDIS_STATUS MlmeInit(
4922 IN PRTMP_ADAPTER pAd);
4924 VOID MlmeHandler(
4925 IN PRTMP_ADAPTER pAd);
4927 VOID MlmeHalt(
4928 IN PRTMP_ADAPTER pAd);
4930 VOID MlmeResetRalinkCounters(
4931 IN PRTMP_ADAPTER pAd);
4933 VOID BuildChannelList(
4934 IN PRTMP_ADAPTER pAd);
4936 UCHAR FirstChannel(
4937 IN PRTMP_ADAPTER pAd);
4939 UCHAR NextChannel(
4940 IN PRTMP_ADAPTER pAd,
4941 IN UCHAR channel);
4943 VOID ChangeToCellPowerLimit(
4944 IN PRTMP_ADAPTER pAd,
4945 IN UCHAR AironetCellPowerLimit);
4947 VOID RaiseClock(
4948 IN PRTMP_ADAPTER pAd,
4949 IN UINT32 *x);
4951 VOID LowerClock(
4952 IN PRTMP_ADAPTER pAd,
4953 IN UINT32 *x);
4955 USHORT ShiftInBits(
4956 IN PRTMP_ADAPTER pAd);
4958 VOID ShiftOutBits(
4959 IN PRTMP_ADAPTER pAd,
4960 IN USHORT data,
4961 IN USHORT count);
4963 VOID EEpromCleanup(
4964 IN PRTMP_ADAPTER pAd);
4966 VOID EWDS(
4967 IN PRTMP_ADAPTER pAd);
4969 VOID EWEN(
4970 IN PRTMP_ADAPTER pAd);
4972 USHORT RTMP_EEPROM_READ16(
4973 IN PRTMP_ADAPTER pAd,
4974 IN USHORT Offset);
4976 VOID RTMP_EEPROM_WRITE16(
4977 IN PRTMP_ADAPTER pAd,
4978 IN USHORT Offset,
4979 IN USHORT Data);
4982 // Prototypes of function definition in rtmp_tkip.c
4984 VOID RTMPInitTkipEngine(
4985 IN PRTMP_ADAPTER pAd,
4986 IN PUCHAR pTKey,
4987 IN UCHAR KeyId,
4988 IN PUCHAR pTA,
4989 IN PUCHAR pMICKey,
4990 IN PUCHAR pTSC,
4991 OUT PULONG pIV16,
4992 OUT PULONG pIV32);
4994 VOID RTMPInitMICEngine(
4995 IN PRTMP_ADAPTER pAd,
4996 IN PUCHAR pKey,
4997 IN PUCHAR pDA,
4998 IN PUCHAR pSA,
4999 IN UCHAR UserPriority,
5000 IN PUCHAR pMICKey);
5002 BOOLEAN RTMPTkipCompareMICValue(
5003 IN PRTMP_ADAPTER pAd,
5004 IN PUCHAR pSrc,
5005 IN PUCHAR pDA,
5006 IN PUCHAR pSA,
5007 IN PUCHAR pMICKey,
5008 IN UCHAR UserPriority,
5009 IN UINT Len);
5011 VOID RTMPCalculateMICValue(
5012 IN PRTMP_ADAPTER pAd,
5013 IN PNDIS_PACKET pPacket,
5014 IN PUCHAR pEncap,
5015 IN PCIPHER_KEY pKey,
5016 IN UCHAR apidx);
5018 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5019 IN PRTMP_ADAPTER pAd,
5020 IN PUCHAR pLLC,
5021 IN PUCHAR pSrc,
5022 IN PUCHAR pDA,
5023 IN PUCHAR pSA,
5024 IN PUCHAR pMICKey,
5025 IN UINT Len);
5027 VOID RTMPTkipAppendByte(
5028 IN PTKIP_KEY_INFO pTkip,
5029 IN UCHAR uChar);
5031 VOID RTMPTkipAppend(
5032 IN PTKIP_KEY_INFO pTkip,
5033 IN PUCHAR pSrc,
5034 IN UINT nBytes);
5036 VOID RTMPTkipGetMIC(
5037 IN PTKIP_KEY_INFO pTkip);
5039 BOOLEAN RTMPSoftDecryptTKIP(
5040 IN PRTMP_ADAPTER pAd,
5041 IN PUCHAR pData,
5042 IN ULONG DataByteCnt,
5043 IN UCHAR UserPriority,
5044 IN PCIPHER_KEY pWpaKey);
5046 BOOLEAN RTMPSoftDecryptAES(
5047 IN PRTMP_ADAPTER pAd,
5048 IN PUCHAR pData,
5049 IN ULONG DataByteCnt,
5050 IN PCIPHER_KEY pWpaKey);
5053 // Prototypes of function definition in cmm_info.c
5055 NDIS_STATUS RTMPWPARemoveKeyProc(
5056 IN PRTMP_ADAPTER pAd,
5057 IN PVOID pBuf);
5059 VOID RTMPWPARemoveAllKeys(
5060 IN PRTMP_ADAPTER pAd);
5062 BOOLEAN RTMPCheckStrPrintAble(
5063 IN CHAR *pInPutStr,
5064 IN UCHAR strLen);
5066 VOID RTMPSetPhyMode(
5067 IN PRTMP_ADAPTER pAd,
5068 IN ULONG phymode);
5070 VOID RTMPUpdateHTIE(
5071 IN RT_HT_CAPABILITY *pRtHt,
5072 IN UCHAR *pMcsSet,
5073 OUT HT_CAPABILITY_IE *pHtCapability,
5074 OUT ADD_HT_INFO_IE *pAddHtInfo);
5076 VOID RTMPAddWcidAttributeEntry(
5077 IN PRTMP_ADAPTER pAd,
5078 IN UCHAR BssIdx,
5079 IN UCHAR KeyIdx,
5080 IN UCHAR CipherAlg,
5081 IN MAC_TABLE_ENTRY *pEntry);
5083 CHAR *GetEncryptType(
5084 CHAR enc);
5086 CHAR *GetAuthMode(
5087 CHAR auth);
5089 VOID RTMPIoctlGetSiteSurvey(
5090 IN PRTMP_ADAPTER pAdapter,
5091 IN struct iwreq *wrq);
5093 VOID RTMPIoctlGetMacTable(
5094 IN PRTMP_ADAPTER pAd,
5095 IN struct iwreq *wrq);
5097 VOID RTMPIndicateWPA2Status(
5098 IN PRTMP_ADAPTER pAdapter);
5100 VOID RTMPOPModeSwitching(
5101 IN PRTMP_ADAPTER pAd);
5103 VOID RTMPAddBSSIDCipher(
5104 IN PRTMP_ADAPTER pAd,
5105 IN UCHAR Aid,
5106 IN PNDIS_802_11_KEY pKey,
5107 IN UCHAR CipherAlg);
5109 VOID RTMPSetHT(
5110 IN PRTMP_ADAPTER pAd,
5111 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5113 VOID RTMPSetIndividualHT(
5114 IN PRTMP_ADAPTER pAd,
5115 IN UCHAR apidx);
5117 VOID RTMPSendWirelessEvent(
5118 IN PRTMP_ADAPTER pAd,
5119 IN USHORT Event_flag,
5120 IN PUCHAR pAddr,
5121 IN UCHAR BssIdx,
5122 IN CHAR Rssi);
5124 VOID NICUpdateCntlCounters(
5125 IN PRTMP_ADAPTER pAd,
5126 IN PHEADER_802_11 pHeader,
5127 IN UCHAR SubType,
5128 IN PRXWI_STRUC pRxWI);
5130 // prototype in wpa.c
5132 BOOLEAN WpaMsgTypeSubst(
5133 IN UCHAR EAPType,
5134 OUT INT *MsgType);
5136 VOID WpaPskStateMachineInit(
5137 IN PRTMP_ADAPTER pAd,
5138 IN STATE_MACHINE *S,
5139 OUT STATE_MACHINE_FUNC Trans[]);
5141 VOID WpaEAPOLKeyAction(
5142 IN PRTMP_ADAPTER pAd,
5143 IN MLME_QUEUE_ELEM *Elem);
5145 VOID WpaPairMsg1Action(
5146 IN PRTMP_ADAPTER pAd,
5147 IN MLME_QUEUE_ELEM *Elem);
5149 VOID WpaPairMsg3Action(
5150 IN PRTMP_ADAPTER pAd,
5151 IN MLME_QUEUE_ELEM *Elem);
5153 VOID WpaGroupMsg1Action(
5154 IN PRTMP_ADAPTER pAd,
5155 IN MLME_QUEUE_ELEM *Elem);
5157 VOID WpaMacHeaderInit(
5158 IN PRTMP_ADAPTER pAd,
5159 IN OUT PHEADER_802_11 pHdr80211,
5160 IN UCHAR wep,
5161 IN PUCHAR pAddr1);
5163 VOID Wpa2PairMsg1Action(
5164 IN PRTMP_ADAPTER pAd,
5165 IN MLME_QUEUE_ELEM *Elem);
5167 VOID Wpa2PairMsg3Action(
5168 IN PRTMP_ADAPTER pAd,
5169 IN MLME_QUEUE_ELEM *Elem);
5171 BOOLEAN ParseKeyData(
5172 IN PRTMP_ADAPTER pAd,
5173 IN PUCHAR pKeyData,
5174 IN UCHAR KeyDataLen,
5175 IN UCHAR bPairewise);
5177 VOID RTMPToWirelessSta(
5178 IN PRTMP_ADAPTER pAd,
5179 IN PUCHAR pHeader802_3,
5180 IN UINT HdrLen,
5181 IN PUCHAR pData,
5182 IN UINT DataLen,
5183 IN BOOLEAN is4wayFrame);
5185 VOID HMAC_SHA1(
5186 IN UCHAR *text,
5187 IN UINT text_len,
5188 IN UCHAR *key,
5189 IN UINT key_len,
5190 IN UCHAR *digest);
5192 VOID PRF(
5193 IN UCHAR *key,
5194 IN INT key_len,
5195 IN UCHAR *prefix,
5196 IN INT prefix_len,
5197 IN UCHAR *data,
5198 IN INT data_len,
5199 OUT UCHAR *output,
5200 IN INT len);
5202 VOID CCKMPRF(
5203 IN UCHAR *key,
5204 IN INT key_len,
5205 IN UCHAR *data,
5206 IN INT data_len,
5207 OUT UCHAR *output,
5208 IN INT len);
5210 VOID WpaCountPTK(
5211 IN PRTMP_ADAPTER pAd,
5212 IN UCHAR *PMK,
5213 IN UCHAR *ANonce,
5214 IN UCHAR *AA,
5215 IN UCHAR *SNonce,
5216 IN UCHAR *SA,
5217 OUT UCHAR *output,
5218 IN UINT len);
5220 VOID GenRandom(
5221 IN PRTMP_ADAPTER pAd,
5222 IN UCHAR *macAddr,
5223 OUT UCHAR *random);
5226 // prototype in aironet.c
5228 VOID AironetStateMachineInit(
5229 IN PRTMP_ADAPTER pAd,
5230 IN STATE_MACHINE *S,
5231 OUT STATE_MACHINE_FUNC Trans[]);
5233 VOID AironetMsgAction(
5234 IN PRTMP_ADAPTER pAd,
5235 IN MLME_QUEUE_ELEM *Elem);
5237 VOID AironetRequestAction(
5238 IN PRTMP_ADAPTER pAd,
5239 IN MLME_QUEUE_ELEM *Elem);
5241 VOID ChannelLoadRequestAction(
5242 IN PRTMP_ADAPTER pAd,
5243 IN UCHAR Index);
5245 VOID NoiseHistRequestAction(
5246 IN PRTMP_ADAPTER pAd,
5247 IN UCHAR Index);
5249 VOID BeaconRequestAction(
5250 IN PRTMP_ADAPTER pAd,
5251 IN UCHAR Index);
5253 VOID AironetReportAction(
5254 IN PRTMP_ADAPTER pAd,
5255 IN MLME_QUEUE_ELEM *Elem);
5257 VOID ChannelLoadReportAction(
5258 IN PRTMP_ADAPTER pAd,
5259 IN UCHAR Index);
5261 VOID NoiseHistReportAction(
5262 IN PRTMP_ADAPTER pAd,
5263 IN UCHAR Index);
5265 VOID AironetFinalReportAction(
5266 IN PRTMP_ADAPTER pAd);
5268 VOID BeaconReportAction(
5269 IN PRTMP_ADAPTER pAd,
5270 IN UCHAR Index);
5272 VOID AironetAddBeaconReport(
5273 IN PRTMP_ADAPTER pAd,
5274 IN ULONG Index,
5275 IN PMLME_QUEUE_ELEM pElem);
5277 VOID AironetCreateBeaconReportFromBssTable(
5278 IN PRTMP_ADAPTER pAd);
5280 VOID DBGPRINT_TX_RING(
5281 IN PRTMP_ADAPTER pAd,
5282 IN UCHAR QueIdx);
5284 VOID DBGPRINT_RX_RING(
5285 IN PRTMP_ADAPTER pAd);
5287 CHAR ConvertToRssi(
5288 IN PRTMP_ADAPTER pAd,
5289 IN CHAR Rssi,
5290 IN UCHAR RssiNumber);
5292 VOID APAsicEvaluateRxAnt(
5293 IN PRTMP_ADAPTER pAd);
5296 VOID APAsicRxAntEvalTimeout(
5297 IN PRTMP_ADAPTER pAd);
5300 // function prototype in cmm_wpa.c
5302 BOOLEAN RTMPCheckWPAframe(
5303 IN PRTMP_ADAPTER pAd,
5304 IN PMAC_TABLE_ENTRY pEntry,
5305 IN PUCHAR pData,
5306 IN ULONG DataByteCount,
5307 IN UCHAR FromWhichBSSID);
5309 VOID AES_GTK_KEY_UNWRAP(
5310 IN UCHAR *key,
5311 OUT UCHAR *plaintext,
5312 IN UCHAR c_len,
5313 IN UCHAR *ciphertext);
5315 BOOLEAN RTMPCheckRSNIE(
5316 IN PRTMP_ADAPTER pAd,
5317 IN PUCHAR pData,
5318 IN UCHAR DataLen,
5319 IN MAC_TABLE_ENTRY *pEntry,
5320 OUT UCHAR *Offset);
5322 BOOLEAN RTMPParseEapolKeyData(
5323 IN PRTMP_ADAPTER pAd,
5324 IN PUCHAR pKeyData,
5325 IN UCHAR KeyDataLen,
5326 IN UCHAR GroupKeyIndex,
5327 IN UCHAR MsgType,
5328 IN BOOLEAN bWPA2,
5329 IN MAC_TABLE_ENTRY *pEntry);
5331 VOID ConstructEapolMsg(
5332 IN PRTMP_ADAPTER pAd,
5333 IN UCHAR PeerAuthMode,
5334 IN UCHAR PeerWepStatus,
5335 IN UCHAR MyGroupKeyWepStatus,
5336 IN UCHAR MsgType,
5337 IN UCHAR DefaultKeyIdx,
5338 IN UCHAR *ReplayCounter,
5339 IN UCHAR *KeyNonce,
5340 IN UCHAR *TxRSC,
5341 IN UCHAR *PTK,
5342 IN UCHAR *GTK,
5343 IN UCHAR *RSNIE,
5344 IN UCHAR RSNIE_Len,
5345 OUT PEAPOL_PACKET pMsg);
5347 VOID CalculateMIC(
5348 IN PRTMP_ADAPTER pAd,
5349 IN UCHAR PeerWepStatus,
5350 IN UCHAR *PTK,
5351 OUT PEAPOL_PACKET pMsg);
5353 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5354 IN PRTMP_ADAPTER pAd,
5355 IN RX_BLK *pRxBlk,
5356 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5357 IN PCIPHER_KEY pShard_key);
5359 VOID ConstructEapolKeyData(
5360 IN PRTMP_ADAPTER pAd,
5361 IN UCHAR PeerAuthMode,
5362 IN UCHAR PeerWepStatus,
5363 IN UCHAR GroupKeyWepStatus,
5364 IN UCHAR MsgType,
5365 IN UCHAR DefaultKeyIdx,
5366 IN BOOLEAN bWPA2Capable,
5367 IN UCHAR *PTK,
5368 IN UCHAR *GTK,
5369 IN UCHAR *RSNIE,
5370 IN UCHAR RSNIE_LEN,
5371 OUT PEAPOL_PACKET pMsg);
5373 VOID RTMPMakeRSNIE(
5374 IN PRTMP_ADAPTER pAd,
5375 IN UINT AuthMode,
5376 IN UINT WepStatus,
5377 IN UCHAR apidx);
5380 // function prototype in ap_wpa.c
5383 BOOLEAN APWpaMsgTypeSubst(
5384 IN UCHAR EAPType,
5385 OUT INT *MsgType) ;
5387 MAC_TABLE_ENTRY *PACInquiry(
5388 IN PRTMP_ADAPTER pAd,
5389 IN ULONG Wcid);
5391 BOOLEAN RTMPCheckMcast(
5392 IN PRTMP_ADAPTER pAd,
5393 IN PEID_STRUCT eid_ptr,
5394 IN MAC_TABLE_ENTRY *pEntry);
5396 BOOLEAN RTMPCheckUcast(
5397 IN PRTMP_ADAPTER pAd,
5398 IN PEID_STRUCT eid_ptr,
5399 IN MAC_TABLE_ENTRY *pEntry);
5401 BOOLEAN RTMPCheckAUTH(
5402 IN PRTMP_ADAPTER pAd,
5403 IN PEID_STRUCT eid_ptr,
5404 IN MAC_TABLE_ENTRY *pEntry);
5406 VOID WPAStart4WayHS(
5407 IN PRTMP_ADAPTER pAd,
5408 IN MAC_TABLE_ENTRY *pEntry,
5409 IN ULONG TimeInterval);
5411 VOID WPAStart2WayGroupHS(
5412 IN PRTMP_ADAPTER pAd,
5413 IN MAC_TABLE_ENTRY *pEntry);
5415 VOID APWpaEAPPacketAction(
5416 IN PRTMP_ADAPTER pAd,
5417 IN MLME_QUEUE_ELEM *Elem);
5419 VOID APWpaEAPOLStartAction(
5420 IN PRTMP_ADAPTER pAd,
5421 IN MLME_QUEUE_ELEM *Elem);
5423 VOID APWpaEAPOLLogoffAction(
5424 IN PRTMP_ADAPTER pAd,
5425 IN MLME_QUEUE_ELEM *Elem);
5427 VOID APWpaEAPOLKeyAction(
5428 IN PRTMP_ADAPTER pAd,
5429 IN MLME_QUEUE_ELEM *Elem);
5431 VOID APWpaEAPOLASFAlertAction(
5432 IN PRTMP_ADAPTER pAd,
5433 IN MLME_QUEUE_ELEM *Elem);
5435 VOID HandleCounterMeasure(
5436 IN PRTMP_ADAPTER pAd,
5437 IN MAC_TABLE_ENTRY *pEntry);
5439 VOID PeerPairMsg2Action(
5440 IN PRTMP_ADAPTER pAd,
5441 IN MAC_TABLE_ENTRY *pEntry,
5442 IN MLME_QUEUE_ELEM *Elem);
5444 VOID PeerPairMsg4Action(
5445 IN PRTMP_ADAPTER pAd,
5446 IN MAC_TABLE_ENTRY *pEntry,
5447 IN MLME_QUEUE_ELEM *Elem);
5449 VOID CMTimerExec(
5450 IN PVOID SystemSpecific1,
5451 IN PVOID FunctionContext,
5452 IN PVOID SystemSpecific2,
5453 IN PVOID SystemSpecific3);
5455 VOID WPARetryExec(
5456 IN PVOID SystemSpecific1,
5457 IN PVOID FunctionContext,
5458 IN PVOID SystemSpecific2,
5459 IN PVOID SystemSpecific3);
5461 VOID EnqueueStartForPSKExec(
5462 IN PVOID SystemSpecific1,
5463 IN PVOID FunctionContext,
5464 IN PVOID SystemSpecific2,
5465 IN PVOID SystemSpecific3);
5467 VOID RTMPHandleSTAKey(
5468 IN PRTMP_ADAPTER pAdapter,
5469 IN MAC_TABLE_ENTRY *pEntry,
5470 IN MLME_QUEUE_ELEM *Elem);
5472 VOID PeerGroupMsg2Action(
5473 IN PRTMP_ADAPTER pAd,
5474 IN PMAC_TABLE_ENTRY pEntry,
5475 IN VOID *Msg,
5476 IN UINT MsgLen);
5478 VOID PairDisAssocAction(
5479 IN PRTMP_ADAPTER pAd,
5480 IN PMAC_TABLE_ENTRY pEntry,
5481 IN USHORT Reason);
5483 VOID MlmeDeAuthAction(
5484 IN PRTMP_ADAPTER pAd,
5485 IN PMAC_TABLE_ENTRY pEntry,
5486 IN USHORT Reason);
5488 VOID GREKEYPeriodicExec(
5489 IN PVOID SystemSpecific1,
5490 IN PVOID FunctionContext,
5491 IN PVOID SystemSpecific2,
5492 IN PVOID SystemSpecific3);
5494 VOID CountGTK(
5495 IN UCHAR *PMK,
5496 IN UCHAR *GNonce,
5497 IN UCHAR *AA,
5498 OUT UCHAR *output,
5499 IN UINT len);
5501 VOID GetSmall(
5502 IN PVOID pSrc1,
5503 IN PVOID pSrc2,
5504 OUT PUCHAR out,
5505 IN ULONG Length);
5507 VOID GetLarge(
5508 IN PVOID pSrc1,
5509 IN PVOID pSrc2,
5510 OUT PUCHAR out,
5511 IN ULONG Length);
5513 VOID APGenRandom(
5514 IN PRTMP_ADAPTER pAd,
5515 OUT UCHAR *random);
5517 VOID AES_GTK_KEY_WRAP(
5518 IN UCHAR *key,
5519 IN UCHAR *plaintext,
5520 IN UCHAR p_len,
5521 OUT UCHAR *ciphertext);
5523 VOID WpaSend(
5524 IN PRTMP_ADAPTER pAdapter,
5525 IN PUCHAR pPacket,
5526 IN ULONG Len);
5528 VOID APToWirelessSta(
5529 IN PRTMP_ADAPTER pAd,
5530 IN MAC_TABLE_ENTRY *pEntry,
5531 IN PUCHAR pHeader802_3,
5532 IN UINT HdrLen,
5533 IN PUCHAR pData,
5534 IN UINT DataLen,
5535 IN BOOLEAN bClearFrame);
5537 VOID RTMPAddPMKIDCache(
5538 IN PRTMP_ADAPTER pAd,
5539 IN INT apidx,
5540 IN PUCHAR pAddr,
5541 IN UCHAR *PMKID,
5542 IN UCHAR *PMK);
5544 INT RTMPSearchPMKIDCache(
5545 IN PRTMP_ADAPTER pAd,
5546 IN INT apidx,
5547 IN PUCHAR pAddr);
5549 VOID RTMPDeletePMKIDCache(
5550 IN PRTMP_ADAPTER pAd,
5551 IN INT apidx,
5552 IN INT idx);
5554 VOID RTMPMaintainPMKIDCache(
5555 IN PRTMP_ADAPTER pAd);
5557 VOID RTMPSendTriggerFrame(
5558 IN PRTMP_ADAPTER pAd,
5559 IN PVOID pBuffer,
5560 IN ULONG Length,
5561 IN UCHAR TxRate,
5562 IN BOOLEAN bQosNull);
5564 /* timeout -- ms */
5565 VOID RTMP_SetPeriodicTimer(
5566 IN NDIS_MINIPORT_TIMER *pTimer,
5567 IN unsigned long timeout);
5569 VOID RTMP_OS_Init_Timer(
5570 IN PRTMP_ADAPTER pAd,
5571 IN NDIS_MINIPORT_TIMER *pTimer,
5572 IN TIMER_FUNCTION function,
5573 IN PVOID data);
5575 VOID RTMP_OS_Add_Timer(
5576 IN NDIS_MINIPORT_TIMER *pTimer,
5577 IN unsigned long timeout);
5579 VOID RTMP_OS_Mod_Timer(
5580 IN NDIS_MINIPORT_TIMER *pTimer,
5581 IN unsigned long timeout);
5584 VOID RTMP_OS_Del_Timer(
5585 IN NDIS_MINIPORT_TIMER *pTimer,
5586 OUT BOOLEAN *pCancelled);
5589 VOID RTMP_OS_Release_Packet(
5590 IN PRTMP_ADAPTER pAd,
5591 IN PQUEUE_ENTRY pEntry);
5593 VOID RTMPusecDelay(
5594 IN ULONG usec);
5596 NDIS_STATUS os_alloc_mem(
5597 IN PRTMP_ADAPTER pAd,
5598 OUT PUCHAR *mem,
5599 IN ULONG size);
5601 NDIS_STATUS os_free_mem(
5602 IN PRTMP_ADAPTER pAd,
5603 IN PUCHAR mem);
5606 void RTMP_AllocateSharedMemory(
5607 IN PRTMP_ADAPTER pAd,
5608 IN ULONG Length,
5609 IN BOOLEAN Cached,
5610 OUT PVOID *VirtualAddress,
5611 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5613 VOID RTMPFreeTxRxRingMemory(
5614 IN PRTMP_ADAPTER pAd);
5616 NDIS_STATUS AdapterBlockAllocateMemory(
5617 IN PVOID handle,
5618 OUT PVOID *ppAd);
5620 void RTMP_AllocateTxDescMemory(
5621 IN PRTMP_ADAPTER pAd,
5622 IN UINT Index,
5623 IN ULONG Length,
5624 IN BOOLEAN Cached,
5625 OUT PVOID *VirtualAddress,
5626 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5628 void RTMP_AllocateFirstTxBuffer(
5629 IN PRTMP_ADAPTER pAd,
5630 IN UINT Index,
5631 IN ULONG Length,
5632 IN BOOLEAN Cached,
5633 OUT PVOID *VirtualAddress,
5634 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5636 void RTMP_AllocateMgmtDescMemory(
5637 IN PRTMP_ADAPTER pAd,
5638 IN ULONG Length,
5639 IN BOOLEAN Cached,
5640 OUT PVOID *VirtualAddress,
5641 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5643 void RTMP_AllocateRxDescMemory(
5644 IN PRTMP_ADAPTER pAd,
5645 IN ULONG Length,
5646 IN BOOLEAN Cached,
5647 OUT PVOID *VirtualAddress,
5648 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5650 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5651 IN PRTMP_ADAPTER pAd,
5652 IN ULONG Length,
5653 IN BOOLEAN Cached,
5654 OUT PVOID *VirtualAddress,
5655 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5657 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5658 IN PRTMP_ADAPTER pAd,
5659 IN ULONG Length,
5660 IN BOOLEAN Cached,
5661 OUT PVOID *VirtualAddress);
5663 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5664 IN PRTMP_ADAPTER pAd,
5665 IN ULONG Length);
5667 void RTMP_QueryPacketInfo(
5668 IN PNDIS_PACKET pPacket,
5669 OUT PACKET_INFO *pPacketInfo,
5670 OUT PUCHAR *pSrcBufVA,
5671 OUT UINT *pSrcBufLen);
5673 void RTMP_QueryNextPacketInfo(
5674 IN PNDIS_PACKET *ppPacket,
5675 OUT PACKET_INFO *pPacketInfo,
5676 OUT PUCHAR *pSrcBufVA,
5677 OUT UINT *pSrcBufLen);
5680 BOOLEAN RTMP_FillTxBlkInfo(
5681 IN RTMP_ADAPTER *pAd,
5682 IN TX_BLK *pTxBlk);
5685 PRTMP_SCATTER_GATHER_LIST
5686 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5689 void announce_802_3_packet(
5690 IN PRTMP_ADAPTER pAd,
5691 IN PNDIS_PACKET pPacket);
5694 UINT BA_Reorder_AMSDU_Annnounce(
5695 IN PRTMP_ADAPTER pAd,
5696 IN PNDIS_PACKET pPacket);
5699 UINT Handle_AMSDU_Packet(
5700 IN PRTMP_ADAPTER pAd,
5701 IN PUCHAR pData,
5702 IN ULONG DataSize,
5703 IN UCHAR FromWhichBSSID);
5706 void convert_802_11_to_802_3_packet(
5707 IN PRTMP_ADAPTER pAd,
5708 IN PNDIS_PACKET pPacket,
5709 IN PUCHAR p8023hdr,
5710 IN PUCHAR pData,
5711 IN ULONG DataSize,
5712 IN UCHAR FromWhichBSSID);
5715 PNET_DEV get_netdev_from_bssid(
5716 IN PRTMP_ADAPTER pAd,
5717 IN UCHAR FromWhichBSSID);
5720 PNDIS_PACKET duplicate_pkt(
5721 IN PRTMP_ADAPTER pAd,
5722 IN PUCHAR pHeader802_3,
5723 IN UINT HdrLen,
5724 IN PUCHAR pData,
5725 IN ULONG DataSize,
5726 IN UCHAR FromWhichBSSID);
5729 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5730 IN PRTMP_ADAPTER pAd,
5731 IN PNDIS_PACKET pOldPkt);
5733 PNDIS_PACKET duplicate_pkt_with_VLAN(
5734 IN PRTMP_ADAPTER pAd,
5735 IN PUCHAR pHeader802_3,
5736 IN UINT HdrLen,
5737 IN PUCHAR pData,
5738 IN ULONG DataSize,
5739 IN UCHAR FromWhichBSSID);
5741 PNDIS_PACKET duplicate_pkt_with_WPI(
5742 IN PRTMP_ADAPTER pAd,
5743 IN PNDIS_PACKET pPacket,
5744 IN UINT32 ext_head_len,
5745 IN UINT32 ext_tail_len);
5747 UCHAR VLAN_8023_Header_Copy(
5748 IN PRTMP_ADAPTER pAd,
5749 IN PUCHAR pHeader802_3,
5750 IN UINT HdrLen,
5751 OUT PUCHAR pData,
5752 IN UCHAR FromWhichBSSID);
5754 void ba_flush_reordering_timeout_mpdus(
5755 IN PRTMP_ADAPTER pAd,
5756 IN PBA_REC_ENTRY pBAEntry,
5757 IN ULONG Now32);
5760 VOID BAOriSessionSetUp(
5761 IN PRTMP_ADAPTER pAd,
5762 IN MAC_TABLE_ENTRY *pEntry,
5763 IN UCHAR TID,
5764 IN USHORT TimeOut,
5765 IN ULONG DelayTime,
5766 IN BOOLEAN isForced);
5768 VOID BASessionTearDownALL(
5769 IN OUT PRTMP_ADAPTER pAd,
5770 IN UCHAR Wcid);
5772 BOOLEAN OS_Need_Clone_Packet(void);
5775 VOID build_tx_packet(
5776 IN PRTMP_ADAPTER pAd,
5777 IN PNDIS_PACKET pPacket,
5778 IN PUCHAR pFrame,
5779 IN ULONG FrameLen);
5782 VOID BAOriSessionTearDown(
5783 IN OUT PRTMP_ADAPTER pAd,
5784 IN UCHAR Wcid,
5785 IN UCHAR TID,
5786 IN BOOLEAN bPassive,
5787 IN BOOLEAN bForceSend);
5789 VOID BARecSessionTearDown(
5790 IN OUT PRTMP_ADAPTER pAd,
5791 IN UCHAR Wcid,
5792 IN UCHAR TID,
5793 IN BOOLEAN bPassive);
5795 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5796 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5798 ULONG AutoChBssInsertEntry(
5799 IN PRTMP_ADAPTER pAd,
5800 IN PUCHAR pBssid,
5801 IN CHAR Ssid[],
5802 IN UCHAR SsidLen,
5803 IN UCHAR ChannelNo,
5804 IN CHAR Rssi);
5806 void AutoChBssTableInit(
5807 IN PRTMP_ADAPTER pAd);
5809 void ChannelInfoInit(
5810 IN PRTMP_ADAPTER pAd);
5812 void AutoChBssTableDestroy(
5813 IN PRTMP_ADAPTER pAd);
5815 void ChannelInfoDestroy(
5816 IN PRTMP_ADAPTER pAd);
5818 UCHAR New_ApAutoSelectChannel(
5819 IN PRTMP_ADAPTER pAd);
5821 BOOLEAN rtstrmactohex(
5822 IN char *s1,
5823 IN char *s2);
5825 BOOLEAN rtstrcasecmp(
5826 IN char *s1,
5827 IN char *s2);
5829 char *rtstrstruncasecmp(
5830 IN char *s1,
5831 IN char *s2);
5833 char *rtstrstr(
5834 IN const char * s1,
5835 IN const char * s2);
5837 char *rstrtok(
5838 IN char * s,
5839 IN const char * ct);
5841 int rtinet_aton(
5842 const char *cp,
5843 unsigned int *addr);
5845 ////////// common ioctl functions //////////
5846 INT Set_DriverVersion_Proc(
5847 IN PRTMP_ADAPTER pAd,
5848 IN PUCHAR arg);
5850 INT Set_CountryRegion_Proc(
5851 IN PRTMP_ADAPTER pAd,
5852 IN PUCHAR arg);
5854 INT Set_CountryRegionABand_Proc(
5855 IN PRTMP_ADAPTER pAd,
5856 IN PUCHAR arg);
5858 INT Set_WirelessMode_Proc(
5859 IN PRTMP_ADAPTER pAd,
5860 IN PUCHAR arg);
5862 INT Set_Channel_Proc(
5863 IN PRTMP_ADAPTER pAd,
5864 IN PUCHAR arg);
5866 INT Set_ShortSlot_Proc(
5867 IN PRTMP_ADAPTER pAd,
5868 IN PUCHAR arg);
5870 INT Set_TxPower_Proc(
5871 IN PRTMP_ADAPTER pAd,
5872 IN PUCHAR arg);
5874 INT Set_BGProtection_Proc(
5875 IN PRTMP_ADAPTER pAd,
5876 IN PUCHAR arg);
5878 INT Set_TxPreamble_Proc(
5879 IN PRTMP_ADAPTER pAd,
5880 IN PUCHAR arg);
5882 INT Set_RTSThreshold_Proc(
5883 IN PRTMP_ADAPTER pAd,
5884 IN PUCHAR arg);
5886 INT Set_FragThreshold_Proc(
5887 IN PRTMP_ADAPTER pAd,
5888 IN PUCHAR arg);
5890 INT Set_TxBurst_Proc(
5891 IN PRTMP_ADAPTER pAd,
5892 IN PUCHAR arg);
5894 #ifdef AGGREGATION_SUPPORT
5895 INT Set_PktAggregate_Proc(
5896 IN PRTMP_ADAPTER pAd,
5897 IN PUCHAR arg);
5898 #endif
5900 INT Set_IEEE80211H_Proc(
5901 IN PRTMP_ADAPTER pAd,
5902 IN PUCHAR arg);
5904 #ifdef DBG
5905 INT Set_Debug_Proc(
5906 IN PRTMP_ADAPTER pAd,
5907 IN PUCHAR arg);
5908 #endif
5910 INT Show_DescInfo_Proc(
5911 IN PRTMP_ADAPTER pAd,
5912 IN PUCHAR arg);
5914 INT Set_ResetStatCounter_Proc(
5915 IN PRTMP_ADAPTER pAd,
5916 IN PUCHAR arg);
5918 INT Set_BASetup_Proc(
5919 IN PRTMP_ADAPTER pAd,
5920 IN PUCHAR arg);
5922 INT Set_BADecline_Proc(
5923 IN PRTMP_ADAPTER pAd,
5924 IN PUCHAR arg);
5926 INT Set_BAOriTearDown_Proc(
5927 IN PRTMP_ADAPTER pAd,
5928 IN PUCHAR arg);
5930 INT Set_BARecTearDown_Proc(
5931 IN PRTMP_ADAPTER pAd,
5932 IN PUCHAR arg);
5934 INT Set_HtBw_Proc(
5935 IN PRTMP_ADAPTER pAd,
5936 IN PUCHAR arg);
5938 INT Set_HtMcs_Proc(
5939 IN PRTMP_ADAPTER pAd,
5940 IN PUCHAR arg);
5942 INT Set_HtGi_Proc(
5943 IN PRTMP_ADAPTER pAd,
5944 IN PUCHAR arg);
5946 INT Set_HtOpMode_Proc(
5947 IN PRTMP_ADAPTER pAd,
5948 IN PUCHAR arg);
5950 INT Set_HtStbc_Proc(
5951 IN PRTMP_ADAPTER pAd,
5952 IN PUCHAR arg);
5954 INT Set_HtHtc_Proc(
5955 IN PRTMP_ADAPTER pAd,
5956 IN PUCHAR arg);
5958 INT Set_HtExtcha_Proc(
5959 IN PRTMP_ADAPTER pAd,
5960 IN PUCHAR arg);
5962 INT Set_HtMpduDensity_Proc(
5963 IN PRTMP_ADAPTER pAd,
5964 IN PUCHAR arg);
5966 INT Set_HtBaWinSize_Proc(
5967 IN PRTMP_ADAPTER pAd,
5968 IN PUCHAR arg);
5970 INT Set_HtRdg_Proc(
5971 IN PRTMP_ADAPTER pAd,
5972 IN PUCHAR arg);
5974 INT Set_HtLinkAdapt_Proc(
5975 IN PRTMP_ADAPTER pAd,
5976 IN PUCHAR arg);
5978 INT Set_HtAmsdu_Proc(
5979 IN PRTMP_ADAPTER pAd,
5980 IN PUCHAR arg);
5982 INT Set_HtAutoBa_Proc(
5983 IN PRTMP_ADAPTER pAd,
5984 IN PUCHAR arg);
5986 INT Set_HtProtect_Proc(
5987 IN PRTMP_ADAPTER pAd,
5988 IN PUCHAR arg);
5990 INT Set_HtMimoPs_Proc(
5991 IN PRTMP_ADAPTER pAd,
5992 IN PUCHAR arg);
5995 INT Set_ForceShortGI_Proc(
5996 IN PRTMP_ADAPTER pAd,
5997 IN PUCHAR arg);
5999 INT Set_ForceGF_Proc(
6000 IN PRTMP_ADAPTER pAd,
6001 IN PUCHAR arg);
6003 INT SetCommonHT(
6004 IN PRTMP_ADAPTER pAd);
6006 INT Set_SendPSMPAction_Proc(
6007 IN PRTMP_ADAPTER pAd,
6008 IN PUCHAR arg);
6010 INT Set_HtMIMOPSmode_Proc(
6011 IN PRTMP_ADAPTER pAd,
6012 IN PUCHAR arg);
6015 INT Set_HtTxBASize_Proc(
6016 IN PRTMP_ADAPTER pAd,
6017 IN PUCHAR arg);
6019 //Dls , kathy
6020 VOID RTMPSendDLSTearDownFrame(
6021 IN PRTMP_ADAPTER pAd,
6022 IN PUCHAR pDA);
6024 //Block ACK
6025 VOID QueryBATABLE(
6026 IN PRTMP_ADAPTER pAd,
6027 OUT PQUERYBA_TABLE pBAT);
6029 INT WpaCheckEapCode(
6030 IN PRTMP_ADAPTER pAd,
6031 IN PUCHAR pFrame,
6032 IN USHORT FrameLen,
6033 IN USHORT OffSet);
6035 VOID WpaSendMicFailureToWpaSupplicant(
6036 IN PRTMP_ADAPTER pAd,
6037 IN BOOLEAN bUnicast);
6039 VOID SendAssocIEsToWpaSupplicant(
6040 IN PRTMP_ADAPTER pAd);
6042 int wext_notify_event_assoc(
6043 IN RTMP_ADAPTER *pAd);
6045 VOID Handle_BSS_Width_Trigger_Events(
6046 IN PRTMP_ADAPTER pAd);
6048 void build_ext_channel_switch_ie(
6049 IN PRTMP_ADAPTER pAd,
6050 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6052 BOOLEAN APRxDoneInterruptHandle(
6053 IN PRTMP_ADAPTER pAd);
6055 BOOLEAN STARxDoneInterruptHandle(
6056 IN PRTMP_ADAPTER pAd,
6057 IN BOOLEAN argc);
6059 // AMPDU packet indication
6060 VOID Indicate_AMPDU_Packet(
6061 IN PRTMP_ADAPTER pAd,
6062 IN RX_BLK *pRxBlk,
6063 IN UCHAR FromWhichBSSID);
6065 // AMSDU packet indication
6066 VOID Indicate_AMSDU_Packet(
6067 IN PRTMP_ADAPTER pAd,
6068 IN RX_BLK *pRxBlk,
6069 IN UCHAR FromWhichBSSID);
6071 // Normal legacy Rx packet indication
6072 VOID Indicate_Legacy_Packet(
6073 IN PRTMP_ADAPTER pAd,
6074 IN RX_BLK *pRxBlk,
6075 IN UCHAR FromWhichBSSID);
6077 VOID Indicate_EAPOL_Packet(
6078 IN PRTMP_ADAPTER pAd,
6079 IN RX_BLK *pRxBlk,
6080 IN UCHAR FromWhichBSSID);
6082 void update_os_packet_info(
6083 IN PRTMP_ADAPTER pAd,
6084 IN RX_BLK *pRxBlk,
6085 IN UCHAR FromWhichBSSID);
6087 void wlan_802_11_to_802_3_packet(
6088 IN PRTMP_ADAPTER pAd,
6089 IN RX_BLK *pRxBlk,
6090 IN PUCHAR pHeader802_3,
6091 IN UCHAR FromWhichBSSID);
6093 UINT deaggregate_AMSDU_announce(
6094 IN PRTMP_ADAPTER pAd,
6095 PNDIS_PACKET pPacket,
6096 IN PUCHAR pData,
6097 IN ULONG DataSize);
6099 // remove LLC and get 802_3 Header
6100 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6102 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6104 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6106 _pDA = _pRxBlk->pHeader->Addr3; \
6107 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6109 else \
6111 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6113 _pDA = _pRxBlk->pHeader->Addr1; \
6114 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6115 _pSA = _pRxBlk->pHeader->Addr2; \
6116 else \
6117 _pSA = _pRxBlk->pHeader->Addr3; \
6119 else \
6121 _pDA = _pRxBlk->pHeader->Addr1; \
6122 _pSA = _pRxBlk->pHeader->Addr2; \
6126 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6127 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6130 BOOLEAN APFowardWirelessStaToWirelessSta(
6131 IN PRTMP_ADAPTER pAd,
6132 IN PNDIS_PACKET pPacket,
6133 IN ULONG FromWhichBSSID);
6135 VOID Announce_or_Forward_802_3_Packet(
6136 IN PRTMP_ADAPTER pAd,
6137 IN PNDIS_PACKET pPacket,
6138 IN UCHAR FromWhichBSSID);
6140 VOID Sta_Announce_or_Forward_802_3_Packet(
6141 IN PRTMP_ADAPTER pAd,
6142 IN PNDIS_PACKET pPacket,
6143 IN UCHAR FromWhichBSSID);
6145 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6146 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6147 //announce_802_3_packet(_pAd, _pPacket);
6149 PNDIS_PACKET DuplicatePacket(
6150 IN PRTMP_ADAPTER pAd,
6151 IN PNDIS_PACKET pPacket,
6152 IN UCHAR FromWhichBSSID);
6155 PNDIS_PACKET ClonePacket(
6156 IN PRTMP_ADAPTER pAd,
6157 IN PNDIS_PACKET pPacket,
6158 IN PUCHAR pData,
6159 IN ULONG DataSize);
6162 // Normal, AMPDU or AMSDU
6163 VOID CmmRxnonRalinkFrameIndicate(
6164 IN PRTMP_ADAPTER pAd,
6165 IN RX_BLK *pRxBlk,
6166 IN UCHAR FromWhichBSSID);
6168 VOID CmmRxRalinkFrameIndicate(
6169 IN PRTMP_ADAPTER pAd,
6170 IN MAC_TABLE_ENTRY *pEntry,
6171 IN RX_BLK *pRxBlk,
6172 IN UCHAR FromWhichBSSID);
6174 VOID Update_Rssi_Sample(
6175 IN PRTMP_ADAPTER pAd,
6176 IN RSSI_SAMPLE *pRssi,
6177 IN PRXWI_STRUC pRxWI);
6179 PNDIS_PACKET GetPacketFromRxRing(
6180 IN PRTMP_ADAPTER pAd,
6181 OUT PRT28XX_RXD_STRUC pSaveRxD,
6182 OUT BOOLEAN *pbReschedule,
6183 IN OUT UINT32 *pRxPending);
6185 PNDIS_PACKET RTMPDeFragmentDataFrame(
6186 IN PRTMP_ADAPTER pAd,
6187 IN RX_BLK *pRxBlk);
6189 ////////////////////////////////////////
6190 enum {
6191 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6192 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6193 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6194 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6195 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6196 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6197 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6198 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6199 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6200 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6201 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6203 enum {
6204 P80211ENUM_msgitem_status_no_value = 0x00
6206 enum {
6207 P80211ENUM_truth_false = 0x00,
6208 P80211ENUM_truth_true = 0x01
6211 /* Definition from madwifi */
6212 typedef struct {
6213 UINT32 did;
6214 UINT16 status;
6215 UINT16 len;
6216 UINT32 data;
6217 } p80211item_uint32_t;
6219 typedef struct {
6220 UINT32 msgcode;
6221 UINT32 msglen;
6222 #define WLAN_DEVNAMELEN_MAX 16
6223 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6224 p80211item_uint32_t hosttime;
6225 p80211item_uint32_t mactime;
6226 p80211item_uint32_t channel;
6227 p80211item_uint32_t rssi;
6228 p80211item_uint32_t sq;
6229 p80211item_uint32_t signal;
6230 p80211item_uint32_t noise;
6231 p80211item_uint32_t rate;
6232 p80211item_uint32_t istx;
6233 p80211item_uint32_t frmlen;
6234 } wlan_ng_prism2_header;
6236 /* The radio capture header precedes the 802.11 header. */
6237 typedef struct PACKED _ieee80211_radiotap_header {
6238 UINT8 it_version; /* Version 0. Only increases
6239 * for drastic changes,
6240 * introduction of compatible
6241 * new fields does not count.
6243 UINT8 it_pad;
6244 UINT16 it_len; /* length of the whole
6245 * header in bytes, including
6246 * it_version, it_pad,
6247 * it_len, and data fields.
6249 UINT32 it_present; /* A bitmap telling which
6250 * fields are present. Set bit 31
6251 * (0x80000000) to extend the
6252 * bitmap by another 32 bits.
6253 * Additional extensions are made
6254 * by setting bit 31.
6256 }ieee80211_radiotap_header ;
6258 enum ieee80211_radiotap_type {
6259 IEEE80211_RADIOTAP_TSFT = 0,
6260 IEEE80211_RADIOTAP_FLAGS = 1,
6261 IEEE80211_RADIOTAP_RATE = 2,
6262 IEEE80211_RADIOTAP_CHANNEL = 3,
6263 IEEE80211_RADIOTAP_FHSS = 4,
6264 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6265 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6266 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6267 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6268 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6269 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6270 IEEE80211_RADIOTAP_ANTENNA = 11,
6271 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6272 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6275 #define WLAN_RADIOTAP_PRESENT ( \
6276 (1 << IEEE80211_RADIOTAP_TSFT) | \
6277 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6278 (1 << IEEE80211_RADIOTAP_RATE) | \
6281 typedef struct _wlan_radiotap_header {
6282 ieee80211_radiotap_header wt_ihdr;
6283 INT64 wt_tsft;
6284 UINT8 wt_flags;
6285 UINT8 wt_rate;
6286 } wlan_radiotap_header;
6287 /* Definition from madwifi */
6289 void send_monitor_packets(
6290 IN PRTMP_ADAPTER pAd,
6291 IN RX_BLK *pRxBlk);
6293 // This function will be called when query /proc
6294 struct iw_statistics *rt28xx_get_wireless_stats(
6295 IN struct net_device *net_dev);
6297 VOID RTMPSetDesiredRates(
6298 IN PRTMP_ADAPTER pAdapter,
6299 IN LONG Rates);
6301 INT Set_FixedTxMode_Proc(
6302 IN PRTMP_ADAPTER pAd,
6303 IN PUCHAR arg);
6305 static inline char* GetPhyMode(
6306 int Mode)
6308 switch(Mode)
6310 case MODE_CCK:
6311 return "CCK";
6313 case MODE_OFDM:
6314 return "OFDM";
6315 case MODE_HTMIX:
6316 return "HTMIX";
6318 case MODE_HTGREENFIELD:
6319 return "GREEN";
6320 default:
6321 return "N/A";
6326 static inline char* GetBW(
6327 int BW)
6329 switch(BW)
6331 case BW_10:
6332 return "10M";
6334 case BW_20:
6335 return "20M";
6336 case BW_40:
6337 return "40M";
6338 default:
6339 return "N/A";
6344 VOID RT28xxThreadTerminate(
6345 IN RTMP_ADAPTER *pAd);
6347 BOOLEAN RT28XXChipsetCheck(
6348 IN void *_dev_p);
6350 BOOLEAN RT28XXNetDevInit(
6351 IN void *_dev_p,
6352 IN struct net_device *net_dev,
6353 IN RTMP_ADAPTER *pAd);
6355 BOOLEAN RT28XXProbePostConfig(
6356 IN void *_dev_p,
6357 IN RTMP_ADAPTER *pAd,
6358 IN INT32 argc);
6360 VOID RT28XXDMADisable(
6361 IN RTMP_ADAPTER *pAd);
6363 VOID RT28XXDMAEnable(
6364 IN RTMP_ADAPTER *pAd);
6366 VOID RT28xx_UpdateBeaconToAsic(
6367 IN RTMP_ADAPTER * pAd,
6368 IN INT apidx,
6369 IN ULONG BeaconLen,
6370 IN ULONG UpdatePos);
6372 INT rt28xx_ioctl(
6373 IN struct net_device *net_dev,
6374 IN OUT struct ifreq *rq,
6375 IN INT cmd);
6377 INT rt28xx_sta_ioctl(
6378 IN struct net_device *net_dev,
6379 IN OUT struct ifreq *rq,
6380 IN INT cmd);
6382 BOOLEAN RT28XXSecurityKeyAdd(
6383 IN PRTMP_ADAPTER pAd,
6384 IN ULONG apidx,
6385 IN ULONG KeyIdx,
6386 IN MAC_TABLE_ENTRY *pEntry);
6388 ////////////////////////////////////////
6389 PNDIS_PACKET GetPacketFromRxRing(
6390 IN PRTMP_ADAPTER pAd,
6391 OUT PRT28XX_RXD_STRUC pSaveRxD,
6392 OUT BOOLEAN *pbReschedule,
6393 IN OUT UINT32 *pRxPending);
6396 void kill_thread_task(PRTMP_ADAPTER pAd);
6398 void tbtt_tasklet(unsigned long data);
6400 #ifdef RT2860
6402 // Function Prototype in cmm_data_2860.c
6404 USHORT RtmpPCI_WriteTxResource(
6405 IN PRTMP_ADAPTER pAd,
6406 IN TX_BLK *pTxBlk,
6407 IN BOOLEAN bIsLast,
6408 OUT USHORT *FreeNumber);
6410 USHORT RtmpPCI_WriteSingleTxResource(
6411 IN PRTMP_ADAPTER pAd,
6412 IN TX_BLK *pTxBlk,
6413 IN BOOLEAN bIsLast,
6414 OUT USHORT *FreeNumber);
6416 USHORT RtmpPCI_WriteMultiTxResource(
6417 IN PRTMP_ADAPTER pAd,
6418 IN TX_BLK *pTxBlk,
6419 IN UCHAR frameNum,
6420 OUT USHORT *FreeNumber);
6422 USHORT RtmpPCI_WriteFragTxResource(
6423 IN PRTMP_ADAPTER pAd,
6424 IN TX_BLK *pTxBlk,
6425 IN UCHAR fragNum,
6426 OUT USHORT *FreeNumber);
6428 USHORT RtmpPCI_WriteSubTxResource(
6429 IN PRTMP_ADAPTER pAd,
6430 IN TX_BLK *pTxBlk,
6431 IN BOOLEAN bIsLast,
6432 OUT USHORT *FreeNumber);
6434 VOID RtmpPCI_FinalWriteTxResource(
6435 IN PRTMP_ADAPTER pAd,
6436 IN TX_BLK *pTxBlk,
6437 IN USHORT totalMPDUSize,
6438 IN USHORT FirstTxIdx);
6440 VOID RtmpPCIDataLastTxIdx(
6441 IN PRTMP_ADAPTER pAd,
6442 IN UCHAR QueIdx,
6443 IN USHORT LastTxIdx);
6445 VOID RtmpPCIDataKickOut(
6446 IN PRTMP_ADAPTER pAd,
6447 IN TX_BLK *pTxBlk,
6448 IN UCHAR QueIdx);
6451 int RtmpPCIMgmtKickOut(
6452 IN RTMP_ADAPTER *pAd,
6453 IN UCHAR QueIdx,
6454 IN PNDIS_PACKET pPacket,
6455 IN PUCHAR pSrcBufVA,
6456 IN UINT SrcBufLen);
6459 NDIS_STATUS RTMPCheckRxError(
6460 IN PRTMP_ADAPTER pAd,
6461 IN PHEADER_802_11 pHeader,
6462 IN PRXWI_STRUC pRxWI,
6463 IN PRT28XX_RXD_STRUC pRxD);
6465 VOID RTMPInitPCIeLinkCtrlValue(
6466 IN PRTMP_ADAPTER pAd);
6468 VOID RTMPFindHostPCIDev(
6469 IN PRTMP_ADAPTER pAd);
6471 VOID RTMPPCIeLinkCtrlValueRestore(
6472 IN PRTMP_ADAPTER pAd,
6473 IN UCHAR Level);
6475 VOID RTMPPCIeLinkCtrlSetting(
6476 IN PRTMP_ADAPTER pAd,
6477 IN USHORT Max);
6479 VOID RT28xxPciAsicRadioOff(
6480 IN PRTMP_ADAPTER pAd,
6481 IN UCHAR Level,
6482 IN USHORT TbttNumToNextWakeUp);
6484 BOOLEAN RT28xxPciAsicRadioOn(
6485 IN PRTMP_ADAPTER pAd,
6486 IN UCHAR Level);
6488 VOID RT28xxPciStaAsicForceWakeup(
6489 IN PRTMP_ADAPTER pAd,
6490 IN UCHAR Level);
6492 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6493 IN PRTMP_ADAPTER pAd,
6494 IN USHORT TbttNumToNextWakeUp);
6496 VOID PsPollWakeExec(
6497 IN PVOID SystemSpecific1,
6498 IN PVOID FunctionContext,
6499 IN PVOID SystemSpecific2,
6500 IN PVOID SystemSpecific3);
6502 VOID RadioOnExec(
6503 IN PVOID SystemSpecific1,
6504 IN PVOID FunctionContext,
6505 IN PVOID SystemSpecific2,
6506 IN PVOID SystemSpecific3);
6508 VOID RT28xxPciMlmeRadioOn(
6509 IN PRTMP_ADAPTER pAd);
6511 VOID RT28xxPciMlmeRadioOFF(
6512 IN PRTMP_ADAPTER pAd);
6513 #endif /* RT2860 */
6515 VOID AsicTurnOffRFClk(
6516 IN PRTMP_ADAPTER pAd,
6517 IN UCHAR Channel);
6519 VOID AsicTurnOnRFClk(
6520 IN PRTMP_ADAPTER pAd,
6521 IN UCHAR Channel);
6523 NTSTATUS RT30xxWriteRFRegister(
6524 IN PRTMP_ADAPTER pAd,
6525 IN UCHAR RegID,
6526 IN UCHAR Value);
6528 NTSTATUS RT30xxReadRFRegister(
6529 IN PRTMP_ADAPTER pAd,
6530 IN UCHAR RegID,
6531 IN PUCHAR pValue);
6533 UCHAR eFuseReadRegisters(
6534 IN PRTMP_ADAPTER pAd,
6535 IN USHORT Offset,
6536 IN USHORT Length,
6537 OUT USHORT* pData);
6539 VOID eFuseReadPhysical(
6540 IN PRTMP_ADAPTER pAd,
6541 IN PUSHORT lpInBuffer,
6542 IN ULONG nInBufferSize,
6543 OUT PUSHORT lpOutBuffer,
6544 IN ULONG nOutBufferSize
6547 NTSTATUS eFuseRead(
6548 IN PRTMP_ADAPTER pAd,
6549 IN USHORT Offset,
6550 OUT PUCHAR pData,
6551 IN USHORT Length);
6553 VOID eFusePhysicalWriteRegisters(
6554 IN PRTMP_ADAPTER pAd,
6555 IN USHORT Offset,
6556 IN USHORT Length,
6557 OUT USHORT* pData);
6559 NTSTATUS eFuseWriteRegisters(
6560 IN PRTMP_ADAPTER pAd,
6561 IN USHORT Offset,
6562 IN USHORT Length,
6563 IN USHORT* pData);
6565 VOID eFuseWritePhysical(
6566 IN PRTMP_ADAPTER pAd,
6567 PUSHORT lpInBuffer,
6568 ULONG nInBufferSize,
6569 PUCHAR lpOutBuffer,
6570 ULONG nOutBufferSize
6573 NTSTATUS eFuseWrite(
6574 IN PRTMP_ADAPTER pAd,
6575 IN USHORT Offset,
6576 IN PUCHAR pData,
6577 IN USHORT length);
6579 INT set_eFuseGetFreeBlockCount_Proc(
6580 IN PRTMP_ADAPTER pAd,
6581 IN PUCHAR arg);
6583 INT set_eFusedump_Proc(
6584 IN PRTMP_ADAPTER pAd,
6585 IN PUCHAR arg);
6587 INT set_eFuseLoadFromBin_Proc(
6588 IN PRTMP_ADAPTER pAd,
6589 IN PUCHAR arg);
6591 NTSTATUS eFuseWriteRegistersFromBin(
6592 IN PRTMP_ADAPTER pAd,
6593 IN USHORT Offset,
6594 IN USHORT Length,
6595 IN USHORT* pData);
6597 VOID eFusePhysicalReadRegisters(
6598 IN PRTMP_ADAPTER pAd,
6599 IN USHORT Offset,
6600 IN USHORT Length,
6601 OUT USHORT* pData);
6603 NDIS_STATUS NICLoadEEPROM(
6604 IN PRTMP_ADAPTER pAd);
6606 BOOLEAN bNeedLoadEEPROM(
6607 IN PRTMP_ADAPTER pAd);
6609 VOID RT30xxLoadRFNormalModeSetup(
6610 IN PRTMP_ADAPTER pAd);
6612 VOID RT30xxLoadRFSleepModeSetup(
6613 IN PRTMP_ADAPTER pAd);
6615 VOID RT30xxReverseRFSleepModeSetup(
6616 IN PRTMP_ADAPTER pAd);
6618 #ifdef RT2870
6620 // Function Prototype in rtusb_bulk.c
6622 VOID RTUSBInitTxDesc(
6623 IN PRTMP_ADAPTER pAd,
6624 IN PTX_CONTEXT pTxContext,
6625 IN UCHAR BulkOutPipeId,
6626 IN usb_complete_t Func);
6628 VOID RTUSBInitHTTxDesc(
6629 IN PRTMP_ADAPTER pAd,
6630 IN PHT_TX_CONTEXT pTxContext,
6631 IN UCHAR BulkOutPipeId,
6632 IN ULONG BulkOutSize,
6633 IN usb_complete_t Func);
6635 VOID RTUSBInitRxDesc(
6636 IN PRTMP_ADAPTER pAd,
6637 IN PRX_CONTEXT pRxContext);
6639 VOID RTUSBCleanUpDataBulkOutQueue(
6640 IN PRTMP_ADAPTER pAd);
6642 VOID RTUSBCancelPendingBulkOutIRP(
6643 IN PRTMP_ADAPTER pAd);
6645 VOID RTUSBBulkOutDataPacket(
6646 IN PRTMP_ADAPTER pAd,
6647 IN UCHAR BulkOutPipeId,
6648 IN UCHAR Index);
6650 VOID RTUSBBulkOutNullFrame(
6651 IN PRTMP_ADAPTER pAd);
6653 VOID RTUSBBulkOutRTSFrame(
6654 IN PRTMP_ADAPTER pAd);
6656 VOID RTUSBCancelPendingBulkInIRP(
6657 IN PRTMP_ADAPTER pAd);
6659 VOID RTUSBCancelPendingIRPs(
6660 IN PRTMP_ADAPTER pAd);
6662 VOID RTUSBBulkOutMLMEPacket(
6663 IN PRTMP_ADAPTER pAd,
6664 IN UCHAR Index);
6666 VOID RTUSBBulkOutPsPoll(
6667 IN PRTMP_ADAPTER pAd);
6669 VOID RTUSBCleanUpMLMEBulkOutQueue(
6670 IN PRTMP_ADAPTER pAd);
6672 VOID RTUSBKickBulkOut(
6673 IN PRTMP_ADAPTER pAd);
6675 VOID RTUSBBulkReceive(
6676 IN PRTMP_ADAPTER pAd);
6678 VOID DoBulkIn(
6679 IN RTMP_ADAPTER *pAd);
6681 VOID RTUSBInitRxDesc(
6682 IN PRTMP_ADAPTER pAd,
6683 IN PRX_CONTEXT pRxContext);
6685 VOID RTUSBBulkRxHandle(
6686 IN unsigned long data);
6689 // Function Prototype in rtusb_io.c
6691 NTSTATUS RTUSBMultiRead(
6692 IN PRTMP_ADAPTER pAd,
6693 IN USHORT Offset,
6694 OUT PUCHAR pData,
6695 IN USHORT length);
6697 NTSTATUS RTUSBMultiWrite(
6698 IN PRTMP_ADAPTER pAd,
6699 IN USHORT Offset,
6700 IN PUCHAR pData,
6701 IN USHORT length);
6703 NTSTATUS RTUSBMultiWrite_OneByte(
6704 IN PRTMP_ADAPTER pAd,
6705 IN USHORT Offset,
6706 IN PUCHAR pData);
6708 NTSTATUS RTUSBReadBBPRegister(
6709 IN PRTMP_ADAPTER pAd,
6710 IN UCHAR Id,
6711 IN PUCHAR pValue);
6713 NTSTATUS RTUSBWriteBBPRegister(
6714 IN PRTMP_ADAPTER pAd,
6715 IN UCHAR Id,
6716 IN UCHAR Value);
6718 NTSTATUS RTUSBWriteRFRegister(
6719 IN PRTMP_ADAPTER pAd,
6720 IN UINT32 Value);
6722 NTSTATUS RTUSB_VendorRequest(
6723 IN PRTMP_ADAPTER pAd,
6724 IN UINT32 TransferFlags,
6725 IN UCHAR ReservedBits,
6726 IN UCHAR Request,
6727 IN USHORT Value,
6728 IN USHORT Index,
6729 IN PVOID TransferBuffer,
6730 IN UINT32 TransferBufferLength);
6732 NTSTATUS RTUSBReadEEPROM(
6733 IN PRTMP_ADAPTER pAd,
6734 IN USHORT Offset,
6735 OUT PUCHAR pData,
6736 IN USHORT length);
6738 NTSTATUS RTUSBWriteEEPROM(
6739 IN PRTMP_ADAPTER pAd,
6740 IN USHORT Offset,
6741 IN PUCHAR pData,
6742 IN USHORT length);
6744 VOID RTUSBPutToSleep(
6745 IN PRTMP_ADAPTER pAd);
6747 NTSTATUS RTUSBWakeUp(
6748 IN PRTMP_ADAPTER pAd);
6750 VOID RTUSBInitializeCmdQ(
6751 IN PCmdQ cmdq);
6753 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6754 IN PRTMP_ADAPTER pAd,
6755 IN NDIS_OID Oid,
6756 IN BOOLEAN SetInformation,
6757 IN PVOID pInformationBuffer,
6758 IN UINT32 InformationBufferLength);
6760 NDIS_STATUS RTUSBEnqueueInternalCmd(
6761 IN PRTMP_ADAPTER pAd,
6762 IN NDIS_OID Oid,
6763 IN PVOID pInformationBuffer,
6764 IN UINT32 InformationBufferLength);
6766 VOID RTUSBDequeueCmd(
6767 IN PCmdQ cmdq,
6768 OUT PCmdQElmt *pcmdqelmt);
6770 INT RTUSBCmdThread(
6771 IN OUT PVOID Context);
6773 INT TimerQThread(
6774 IN OUT PVOID Context);
6776 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6777 IN RTMP_ADAPTER *pAd,
6778 IN RALINK_TIMER_STRUCT *pTimer);
6780 BOOLEAN RT2870_TimerQ_Remove(
6781 IN RTMP_ADAPTER *pAd,
6782 IN RALINK_TIMER_STRUCT *pTimer);
6784 void RT2870_TimerQ_Exit(
6785 IN RTMP_ADAPTER *pAd);
6787 void RT2870_TimerQ_Init(
6788 IN RTMP_ADAPTER *pAd);
6790 VOID RT2870_BssBeaconExit(
6791 IN RTMP_ADAPTER *pAd);
6793 VOID RT2870_BssBeaconStop(
6794 IN RTMP_ADAPTER *pAd);
6796 VOID RT2870_BssBeaconStart(
6797 IN RTMP_ADAPTER * pAd);
6799 VOID RT2870_BssBeaconInit(
6800 IN RTMP_ADAPTER *pAd);
6802 VOID RT2870_WatchDog(
6803 IN RTMP_ADAPTER *pAd);
6805 NTSTATUS RTUSBWriteMACRegister(
6806 IN PRTMP_ADAPTER pAd,
6807 IN USHORT Offset,
6808 IN UINT32 Value);
6810 NTSTATUS RTUSBReadMACRegister(
6811 IN PRTMP_ADAPTER pAd,
6812 IN USHORT Offset,
6813 OUT PUINT32 pValue);
6815 NTSTATUS RTUSBSingleWrite(
6816 IN RTMP_ADAPTER *pAd,
6817 IN USHORT Offset,
6818 IN USHORT Value);
6820 NTSTATUS RTUSBFirmwareRun(
6821 IN PRTMP_ADAPTER pAd);
6823 NTSTATUS RTUSBFirmwareWrite(
6824 IN PRTMP_ADAPTER pAd,
6825 IN PUCHAR pFwImage,
6826 IN ULONG FwLen);
6828 NTSTATUS RTUSBFirmwareOpmode(
6829 IN PRTMP_ADAPTER pAd,
6830 OUT PUINT32 pValue);
6832 NTSTATUS RTUSBVenderReset(
6833 IN PRTMP_ADAPTER pAd);
6835 NDIS_STATUS RTUSBSetHardWareRegister(
6836 IN PRTMP_ADAPTER pAdapter,
6837 IN PVOID pBuf);
6839 NDIS_STATUS RTUSBQueryHardWareRegister(
6840 IN PRTMP_ADAPTER pAdapter,
6841 IN PVOID pBuf);
6843 VOID CMDHandler(
6844 IN PRTMP_ADAPTER pAd);
6847 NDIS_STATUS CreateThreads(
6848 IN struct net_device *net_dev );
6851 VOID MacTableInitialize(
6852 IN PRTMP_ADAPTER pAd);
6854 VOID MlmeSetPsm(
6855 IN PRTMP_ADAPTER pAd,
6856 IN USHORT psm);
6858 NDIS_STATUS RTMPWPAAddKeyProc(
6859 IN PRTMP_ADAPTER pAd,
6860 IN PVOID pBuf);
6862 VOID AsicRxAntEvalAction(
6863 IN PRTMP_ADAPTER pAd);
6865 void append_pkt(
6866 IN PRTMP_ADAPTER pAd,
6867 IN PUCHAR pHeader802_3,
6868 IN UINT HdrLen,
6869 IN PUCHAR pData,
6870 IN ULONG DataSize,
6871 OUT PNDIS_PACKET *ppPacket);
6873 UINT deaggregate_AMSDU_announce(
6874 IN PRTMP_ADAPTER pAd,
6875 PNDIS_PACKET pPacket,
6876 IN PUCHAR pData,
6877 IN ULONG DataSize);
6879 NDIS_STATUS RTMPCheckRxError(
6880 IN PRTMP_ADAPTER pAd,
6881 IN PHEADER_802_11 pHeader,
6882 IN PRXWI_STRUC pRxWI,
6883 IN PRT28XX_RXD_STRUC pRxINFO);
6886 VOID RTUSBMlmeHardTransmit(
6887 IN PRTMP_ADAPTER pAd,
6888 IN PMGMT_STRUC pMgmt);
6890 INT MlmeThread(
6891 IN PVOID Context);
6894 // Function Prototype in rtusb_data.c
6896 NDIS_STATUS RTUSBFreeDescriptorRequest(
6897 IN PRTMP_ADAPTER pAd,
6898 IN UCHAR BulkOutPipeId,
6899 IN UINT32 NumberRequired);
6902 BOOLEAN RTUSBNeedQueueBackForAgg(
6903 IN RTMP_ADAPTER *pAd,
6904 IN UCHAR BulkOutPipeId);
6907 VOID RTMPWriteTxInfo(
6908 IN PRTMP_ADAPTER pAd,
6909 IN PTXINFO_STRUC pTxInfo,
6910 IN USHORT USBDMApktLen,
6911 IN BOOLEAN bWiv,
6912 IN UCHAR QueueSel,
6913 IN UCHAR NextValid,
6914 IN UCHAR TxBurst);
6917 // Function Prototype in cmm_data_2870.c
6919 USHORT RtmpUSB_WriteSubTxResource(
6920 IN PRTMP_ADAPTER pAd,
6921 IN TX_BLK *pTxBlk,
6922 IN BOOLEAN bIsLast,
6923 OUT USHORT *FreeNumber);
6925 USHORT RtmpUSB_WriteSingleTxResource(
6926 IN PRTMP_ADAPTER pAd,
6927 IN TX_BLK *pTxBlk,
6928 IN BOOLEAN bIsLast,
6929 OUT USHORT *FreeNumber);
6931 USHORT RtmpUSB_WriteFragTxResource(
6932 IN PRTMP_ADAPTER pAd,
6933 IN TX_BLK *pTxBlk,
6934 IN UCHAR fragNum,
6935 OUT USHORT *FreeNumber);
6937 USHORT RtmpUSB_WriteMultiTxResource(
6938 IN PRTMP_ADAPTER pAd,
6939 IN TX_BLK *pTxBlk,
6940 IN UCHAR frameNum,
6941 OUT USHORT *FreeNumber);
6943 VOID RtmpUSB_FinalWriteTxResource(
6944 IN PRTMP_ADAPTER pAd,
6945 IN TX_BLK *pTxBlk,
6946 IN USHORT totalMPDUSize,
6947 #ifdef RT2860
6948 IN USHORT FirstTxIdx);
6949 #endif
6950 IN USHORT TxIdx);
6952 VOID RtmpUSBDataLastTxIdx(
6953 IN PRTMP_ADAPTER pAd,
6954 IN UCHAR QueIdx,
6955 IN USHORT TxIdx);
6957 VOID RtmpUSBDataKickOut(
6958 IN PRTMP_ADAPTER pAd,
6959 IN TX_BLK *pTxBlk,
6960 IN UCHAR QueIdx);
6963 int RtmpUSBMgmtKickOut(
6964 IN RTMP_ADAPTER *pAd,
6965 IN UCHAR QueIdx,
6966 IN PNDIS_PACKET pPacket,
6967 IN PUCHAR pSrcBufVA,
6968 IN UINT SrcBufLen);
6970 VOID RtmpUSBNullFrameKickOut(
6971 IN RTMP_ADAPTER *pAd,
6972 IN UCHAR QueIdx,
6973 IN UCHAR *pNullFrame,
6974 IN UINT32 frameLen);
6976 VOID RT28xxUsbStaAsicForceWakeup(
6977 IN PRTMP_ADAPTER pAd,
6978 IN BOOLEAN bFromTx);
6980 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
6981 IN PRTMP_ADAPTER pAd,
6982 IN USHORT TbttNumToNextWakeUp);
6984 VOID RT28xxUsbMlmeRadioOn(
6985 IN PRTMP_ADAPTER pAd);
6987 VOID RT28xxUsbMlmeRadioOFF(
6988 IN PRTMP_ADAPTER pAd);
6989 #endif // RT2870 //
6991 ////////////////////////////////////////
6993 VOID QBSS_LoadInit(
6994 IN RTMP_ADAPTER *pAd);
6996 UINT32 QBSS_LoadElementAppend(
6997 IN RTMP_ADAPTER *pAd,
6998 OUT UINT8 *buf_p);
7000 VOID QBSS_LoadUpdate(
7001 IN RTMP_ADAPTER *pAd);
7003 ///////////////////////////////////////
7004 INT RTMPShowCfgValue(
7005 IN PRTMP_ADAPTER pAd,
7006 IN PUCHAR pName,
7007 IN PUCHAR pBuf);
7009 PCHAR RTMPGetRalinkAuthModeStr(
7010 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7012 PCHAR RTMPGetRalinkEncryModeStr(
7013 IN USHORT encryMode);
7014 //////////////////////////////////////
7016 VOID AsicStaBbpTuning(
7017 IN PRTMP_ADAPTER pAd);
7019 #ifdef RT2860
7020 VOID AsicResetFromDMABusy(
7021 IN PRTMP_ADAPTER pAd);
7023 VOID AsicResetBBP(
7024 IN PRTMP_ADAPTER pAd);
7026 VOID AsicResetMAC(
7027 IN PRTMP_ADAPTER pAd);
7029 VOID AsicResetPBF(
7030 IN PRTMP_ADAPTER pAd);
7031 #endif
7032 #ifdef RT2870
7033 BOOLEAN StaAddMacTableEntry(
7034 IN PRTMP_ADAPTER pAd,
7035 IN PMAC_TABLE_ENTRY pEntry,
7036 IN UCHAR MaxSupportedRateIn500Kbps,
7037 IN HT_CAPABILITY_IE *pHtCapability,
7038 IN UCHAR HtCapabilityLen,
7039 IN USHORT CapabilityInfo);
7040 #endif
7042 void RTMP_IndicateMediaState(
7043 IN PRTMP_ADAPTER pAd);
7045 VOID ReSyncBeaconTime(
7046 IN PRTMP_ADAPTER pAd);
7048 VOID RTMPSetAGCInitValue(
7049 IN PRTMP_ADAPTER pAd,
7050 IN UCHAR BandWidth);
7052 int rt28xx_close(IN PNET_DEV dev);
7053 int rt28xx_open(IN PNET_DEV dev);
7055 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7057 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7058 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7060 if (VIRTUAL_IF_NUM(pAd) == 0)
7062 if (rt28xx_open(pAd->net_dev) != 0)
7063 return -1;
7065 else
7068 VIRTUAL_IF_INC(pAd);
7069 return 0;
7072 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7074 VIRTUAL_IF_DEC(pAd);
7075 if (VIRTUAL_IF_NUM(pAd) == 0)
7076 rt28xx_close(pAd->net_dev);
7077 return;
7081 #endif // __RTMP_H__