Staging: rt2870: add eFuse support
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / staging / rt2860 / rtmp.h
blob92411246cf971d13035da6b34b589741d713eecc
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 "spectrum_def.h"
45 #include "aironet.h"
47 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
48 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
49 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
51 #ifdef RT2870
52 ////////////////////////////////////////////////////////////////////////////
53 // The TX_BUFFER structure forms the transmitted USB packet to the device
54 ////////////////////////////////////////////////////////////////////////////
55 typedef struct __TX_BUFFER{
56 union {
57 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
58 HEADER_802_11 NullFrame;
59 PSPOLL_FRAME PsPollPacket;
60 RTS_FRAME RTSFrame;
61 }field;
62 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
63 } TX_BUFFER, *PTX_BUFFER;
65 typedef struct __HTTX_BUFFER{
66 union {
67 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
68 HEADER_802_11 NullFrame;
69 PSPOLL_FRAME PsPollPacket;
70 RTS_FRAME RTSFrame;
71 }field;
72 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
73 } HTTX_BUFFER, *PHTTX_BUFFER;
76 // used to track driver-generated write irps
77 typedef struct _TX_CONTEXT
79 PVOID pAd; //Initialized in MiniportInitialize
80 PURB pUrb; //Initialized in MiniportInitialize
81 PIRP pIrp; //used to cancel pending bulk out.
82 //Initialized in MiniportInitialize
83 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
84 ULONG BulkOutSize;
85 UCHAR BulkOutPipeId;
86 UCHAR SelfIdx;
87 BOOLEAN InUse;
88 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
89 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
90 BOOLEAN IRPPending;
91 BOOLEAN LastOne;
92 BOOLEAN bAggregatible;
93 UCHAR Header_802_3[LENGTH_802_3];
94 UCHAR Rsv[2];
95 ULONG DataOffset;
96 UINT TxRate;
97 dma_addr_t data_dma; // urb dma on linux
99 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
102 // used to track driver-generated write irps
103 typedef struct _HT_TX_CONTEXT
105 PVOID pAd; //Initialized in MiniportInitialize
106 PURB pUrb; //Initialized in MiniportInitialize
107 PIRP pIrp; //used to cancel pending bulk out.
108 //Initialized in MiniportInitialize
109 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
110 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
111 UCHAR BulkOutPipeId;
112 BOOLEAN IRPPending;
113 BOOLEAN LastOne;
114 BOOLEAN bCurWriting;
115 BOOLEAN bRingEmpty;
116 BOOLEAN bCopySavePad;
117 UCHAR SavedPad[8];
118 UCHAR Header_802_3[LENGTH_802_3];
119 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
120 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
121 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
122 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
123 UINT TxRate;
124 dma_addr_t data_dma; // urb dma on linux
125 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
129 // Structure to keep track of receive packets and buffers to indicate
130 // receive data to the protocol.
132 typedef struct _RX_CONTEXT
134 PUCHAR TransferBuffer;
135 PVOID pAd;
136 PIRP pIrp;//used to cancel pending bulk in.
137 PURB pUrb;
138 //These 2 Boolean shouldn't both be 1 at the same time.
139 ULONG BulkInOffset; // number of packets waiting for reordering .
140 BOOLEAN bRxHandling; // Notify this packet is being process now.
141 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
142 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
143 BOOLEAN IRPPending; // TODO: To be removed
144 atomic_t IrpLock;
145 NDIS_SPIN_LOCK RxContextLock;
146 dma_addr_t data_dma; // urb dma on linux
147 } RX_CONTEXT, *PRX_CONTEXT;
148 #endif // RT2870 //
152 // NDIS Version definitions
154 #ifdef NDIS50_MINIPORT
155 #define RTMP_NDIS_MAJOR_VERSION 5
156 #define RTMP_NDIS_MINOR_VERSION 0
157 #endif
159 #ifdef NDIS51_MINIPORT
160 #define RTMP_NDIS_MAJOR_VERSION 5
161 #define RTMP_NDIS_MINOR_VERSION 1
162 #endif
164 extern char NIC_VENDOR_DESC[];
165 extern int NIC_VENDOR_DESC_LEN;
167 extern unsigned char SNAP_AIRONET[];
168 extern unsigned char CipherSuiteCiscoCCKM[];
169 extern unsigned char CipherSuiteCiscoCCKMLen;
170 extern unsigned char CipherSuiteCiscoCCKM24[];
171 extern unsigned char CipherSuiteCiscoCCKM24Len;
172 extern unsigned char CipherSuiteCCXTkip[];
173 extern unsigned char CipherSuiteCCXTkipLen;
174 extern unsigned char CISCO_OUI[];
175 extern UCHAR BaSizeArray[4];
177 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
178 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
179 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
180 extern ULONG BIT32[32];
181 extern UCHAR BIT8[8];
182 extern char* CipherName[];
183 extern char* MCSToMbps[];
184 extern UCHAR RxwiMCSToOfdmRate[12];
185 extern UCHAR SNAP_802_1H[6];
186 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
187 extern UCHAR SNAP_AIRONET[8];
188 extern UCHAR CKIP_LLC_SNAP[8];
189 extern UCHAR EAPOL_LLC_SNAP[8];
190 extern UCHAR EAPOL[2];
191 extern UCHAR IPX[2];
192 extern UCHAR APPLE_TALK[2];
193 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
194 extern UCHAR OfdmRateToRxwiMCS[];
195 extern UCHAR OfdmSignalToRateId[16] ;
196 extern UCHAR default_cwmin[4];
197 extern UCHAR default_cwmax[4];
198 extern UCHAR default_sta_aifsn[4];
199 extern UCHAR MapUserPriorityToAccessCategory[8];
201 extern USHORT RateUpPER[];
202 extern USHORT RateDownPER[];
203 extern UCHAR Phy11BNextRateDownward[];
204 extern UCHAR Phy11BNextRateUpward[];
205 extern UCHAR Phy11BGNextRateDownward[];
206 extern UCHAR Phy11BGNextRateUpward[];
207 extern UCHAR Phy11ANextRateDownward[];
208 extern UCHAR Phy11ANextRateUpward[];
209 extern CHAR RssiSafeLevelForTxRate[];
210 extern UCHAR RateIdToMbps[];
211 extern USHORT RateIdTo500Kbps[];
213 extern UCHAR CipherSuiteWpaNoneTkip[];
214 extern UCHAR CipherSuiteWpaNoneTkipLen;
216 extern UCHAR CipherSuiteWpaNoneAes[];
217 extern UCHAR CipherSuiteWpaNoneAesLen;
219 extern UCHAR SsidIe;
220 extern UCHAR SupRateIe;
221 extern UCHAR ExtRateIe;
223 extern UCHAR HtCapIe;
224 extern UCHAR AddHtInfoIe;
225 extern UCHAR NewExtChanIe;
227 extern UCHAR ErpIe;
228 extern UCHAR DsIe;
229 extern UCHAR TimIe;
230 extern UCHAR WpaIe;
231 extern UCHAR Wpa2Ie;
232 extern UCHAR IbssIe;
233 extern UCHAR Ccx2Ie;
235 extern UCHAR WPA_OUI[];
236 extern UCHAR RSN_OUI[];
237 extern UCHAR WME_INFO_ELEM[];
238 extern UCHAR WME_PARM_ELEM[];
239 extern UCHAR Ccx2QosInfo[];
240 extern UCHAR Ccx2IeInfo[];
241 extern UCHAR RALINK_OUI[];
242 extern UCHAR PowerConstraintIE[];
245 extern UCHAR RateSwitchTable[];
246 extern UCHAR RateSwitchTable11B[];
247 extern UCHAR RateSwitchTable11G[];
248 extern UCHAR RateSwitchTable11BG[];
250 extern UCHAR RateSwitchTable11BGN1S[];
251 extern UCHAR RateSwitchTable11BGN2S[];
252 extern UCHAR RateSwitchTable11BGN2SForABand[];
253 extern UCHAR RateSwitchTable11N1S[];
254 extern UCHAR RateSwitchTable11N2S[];
255 extern UCHAR RateSwitchTable11N2SForABand[];
257 extern UCHAR PRE_N_HT_OUI[];
259 #define MAXSEQ (0xFFF)
261 struct reordering_mpdu
263 struct reordering_mpdu *next;
264 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
265 int Sequence; /* sequence number of MPDU */
266 BOOLEAN bAMSDU;
269 struct reordering_list
271 struct reordering_mpdu *next;
272 int qlen;
275 struct reordering_mpdu_pool
277 PVOID mem;
278 NDIS_SPIN_LOCK lock;
279 struct reordering_list freelist;
282 typedef struct _RSSI_SAMPLE {
283 CHAR LastRssi0; // last received RSSI
284 CHAR LastRssi1; // last received RSSI
285 CHAR LastRssi2; // last received RSSI
286 CHAR AvgRssi0;
287 CHAR AvgRssi1;
288 CHAR AvgRssi2;
289 SHORT AvgRssi0X8;
290 SHORT AvgRssi1X8;
291 SHORT AvgRssi2X8;
292 } RSSI_SAMPLE;
295 // Queue structure and macros
297 typedef struct _QUEUE_ENTRY {
298 struct _QUEUE_ENTRY *Next;
299 } QUEUE_ENTRY, *PQUEUE_ENTRY;
301 // Queue structure
302 typedef struct _QUEUE_HEADER {
303 PQUEUE_ENTRY Head;
304 PQUEUE_ENTRY Tail;
305 ULONG Number;
306 } QUEUE_HEADER, *PQUEUE_HEADER;
308 #define InitializeQueueHeader(QueueHeader) \
310 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
311 (QueueHeader)->Number = 0; \
314 #define RemoveHeadQueue(QueueHeader) \
315 (QueueHeader)->Head; \
317 PQUEUE_ENTRY pNext; \
318 if ((QueueHeader)->Head != NULL) \
320 pNext = (QueueHeader)->Head->Next; \
321 (QueueHeader)->Head = pNext; \
322 if (pNext == NULL) \
323 (QueueHeader)->Tail = NULL; \
324 (QueueHeader)->Number--; \
328 #define InsertHeadQueue(QueueHeader, QueueEntry) \
330 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
331 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
332 if ((QueueHeader)->Tail == NULL) \
333 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
334 (QueueHeader)->Number++; \
337 #define InsertTailQueue(QueueHeader, QueueEntry) \
339 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
340 if ((QueueHeader)->Tail) \
341 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
342 else \
343 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
344 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
345 (QueueHeader)->Number++; \
349 // Macros for flag and ref count operations
351 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
352 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
353 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
354 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
355 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
357 #ifdef RT2860
358 // Macro for power save flag.
359 #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
360 #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
361 #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
362 #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
363 #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
364 #endif
366 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
367 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
368 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
370 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
371 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
372 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
374 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
375 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
376 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
378 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
379 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
380 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
381 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
383 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
385 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
386 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
389 #define INC_RING_INDEX(_idx, _RingSize) \
391 (_idx) = (_idx+1) % (_RingSize); \
394 #ifdef RT30xx
395 // We will have a cost down version which mac version is 0x3090xxxx
396 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
397 #else
398 #define IS_RT3090(_pAd) 0
399 #endif
400 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
401 #ifdef RT30xx
402 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
403 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
404 #endif
406 #define RING_PACKET_INIT(_TxRing, _idx) \
408 _TxRing->Cell[_idx].pNdisPacket = NULL; \
409 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
412 #define TXDT_INIT(_TxD) \
414 NdisZeroMemory(_TxD, TXD_SIZE); \
415 _TxD->DMADONE = 1; \
418 //Set last data segment
419 #define RING_SET_LASTDS(_TxD, _IsSD0) \
421 if (_IsSD0) {_TxD->LastSec0 = 1;} \
422 else {_TxD->LastSec1 = 1;} \
425 // Increase TxTsc value for next transmission
426 // TODO:
427 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
428 // Should send a special event microsoft defined to request re-key
429 #define INC_TX_TSC(_tsc) \
431 int i=0; \
432 while (++_tsc[i] == 0x0) \
434 i++; \
435 if (i == 6) \
436 break; \
440 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
441 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
443 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
444 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
445 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
446 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
447 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
448 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
449 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
450 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
451 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
452 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
453 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
454 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
457 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
459 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
460 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
461 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
465 // MACRO for 32-bit PCI register read / write
467 // Usage : RTMP_IO_READ32(
468 // PRTMP_ADAPTER pAd,
469 // ULONG Register_Offset,
470 // PULONG pValue)
472 // RTMP_IO_WRITE32(
473 // PRTMP_ADAPTER pAd,
474 // ULONG Register_Offset,
475 // ULONG Value)
479 // BBP & RF are using indirect access. Before write any value into it.
480 // We have to make sure there is no outstanding command pending via checking busy bit.
482 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
484 #ifdef RT2860
485 #define RTMP_RF_IO_WRITE32(_A, _V) \
487 PHY_CSR4_STRUC Value; \
488 ULONG BusyCnt = 0; \
489 if ((_A)->bPCIclkOff) \
491 return; \
493 do { \
494 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
495 if (Value.field.Busy == IDLE) \
496 break; \
497 BusyCnt++; \
498 } while (BusyCnt < MAX_BUSY_COUNT); \
499 if (BusyCnt < MAX_BUSY_COUNT) \
501 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
505 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
507 BBP_CSR_CFG_STRUC BbpCsr; \
508 int i, k; \
509 for (i=0; i<MAX_BUSY_COUNT; i++) \
511 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
512 if (BbpCsr.field.Busy == BUSY) \
514 continue; \
516 BbpCsr.word = 0; \
517 BbpCsr.field.fRead = 1; \
518 BbpCsr.field.BBP_RW_MODE = 1; \
519 BbpCsr.field.Busy = 1; \
520 BbpCsr.field.RegNum = _I; \
521 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
522 for (k=0; k<MAX_BUSY_COUNT; k++) \
524 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
525 if (BbpCsr.field.Busy == IDLE) \
526 break; \
528 if ((BbpCsr.field.Busy == IDLE) && \
529 (BbpCsr.field.RegNum == _I)) \
531 *(_pV) = (UCHAR)BbpCsr.field.Value; \
532 break; \
535 if (BbpCsr.field.Busy == BUSY) \
537 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
538 *(_pV) = (_A)->BbpWriteLatch[_I]; \
542 //#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
543 // Read BBP register by register's ID. Generate PER to test BA
544 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
546 BBP_CSR_CFG_STRUC BbpCsr; \
547 int i, k; \
548 if ((_A)->bPCIclkOff == FALSE) \
550 for (i=0; i<MAX_BUSY_COUNT; i++) \
552 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
553 if (BbpCsr.field.Busy == BUSY) \
555 continue; \
557 BbpCsr.word = 0; \
558 BbpCsr.field.fRead = 1; \
559 BbpCsr.field.BBP_RW_MODE = 1; \
560 BbpCsr.field.Busy = 1; \
561 BbpCsr.field.RegNum = _I; \
562 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
563 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
564 RTMPusecDelay(1000); \
565 for (k=0; k<MAX_BUSY_COUNT; k++) \
567 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
568 if (BbpCsr.field.Busy == IDLE) \
569 break; \
571 if ((BbpCsr.field.Busy == IDLE) && \
572 (BbpCsr.field.RegNum == _I)) \
574 *(_pV) = (UCHAR)BbpCsr.field.Value; \
575 break; \
578 if (BbpCsr.field.Busy == BUSY) \
580 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
581 *(_pV) = (_A)->BbpWriteLatch[_I]; \
582 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
583 BbpCsr.field.Busy = 0; \
584 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
589 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
591 BBP_CSR_CFG_STRUC BbpCsr; \
592 int BusyCnt; \
593 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
595 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
596 if (BbpCsr.field.Busy == BUSY) \
597 continue; \
598 BbpCsr.word = 0; \
599 BbpCsr.field.fRead = 0; \
600 BbpCsr.field.BBP_RW_MODE = 1; \
601 BbpCsr.field.Busy = 1; \
602 BbpCsr.field.Value = _V; \
603 BbpCsr.field.RegNum = _I; \
604 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
605 (_A)->BbpWriteLatch[_I] = _V; \
606 break; \
608 if (BusyCnt == MAX_BUSY_COUNT) \
610 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
614 // Write BBP register by register's ID & value
615 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
617 BBP_CSR_CFG_STRUC BbpCsr; \
618 int BusyCnt; \
619 if ((_A)->bPCIclkOff == FALSE) \
621 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
623 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
624 if (BbpCsr.field.Busy == BUSY) \
625 continue; \
626 BbpCsr.word = 0; \
627 BbpCsr.field.fRead = 0; \
628 BbpCsr.field.BBP_RW_MODE = 1; \
629 BbpCsr.field.Busy = 1; \
630 BbpCsr.field.Value = _V; \
631 BbpCsr.field.RegNum = _I; \
632 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
633 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
634 if (_A->OpMode == OPMODE_AP) \
635 RTMPusecDelay(1000); \
636 (_A)->BbpWriteLatch[_I] = _V; \
637 break; \
639 if (BusyCnt == MAX_BUSY_COUNT) \
641 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
642 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
643 BbpCsr.field.Busy = 0; \
644 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
648 #endif /* RT2860 */
649 #ifdef RT2870
650 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
651 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
652 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
654 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
655 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
656 #endif // RT2870 //
658 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
659 switch (ch) \
661 case 1: khz = 2412000; break; \
662 case 2: khz = 2417000; break; \
663 case 3: khz = 2422000; break; \
664 case 4: khz = 2427000; break; \
665 case 5: khz = 2432000; break; \
666 case 6: khz = 2437000; break; \
667 case 7: khz = 2442000; break; \
668 case 8: khz = 2447000; break; \
669 case 9: khz = 2452000; break; \
670 case 10: khz = 2457000; break; \
671 case 11: khz = 2462000; break; \
672 case 12: khz = 2467000; break; \
673 case 13: khz = 2472000; break; \
674 case 14: khz = 2484000; break; \
675 case 36: /* UNII */ khz = 5180000; break; \
676 case 40: /* UNII */ khz = 5200000; break; \
677 case 44: /* UNII */ khz = 5220000; break; \
678 case 48: /* UNII */ khz = 5240000; break; \
679 case 52: /* UNII */ khz = 5260000; break; \
680 case 56: /* UNII */ khz = 5280000; break; \
681 case 60: /* UNII */ khz = 5300000; break; \
682 case 64: /* UNII */ khz = 5320000; break; \
683 case 149: /* UNII */ khz = 5745000; break; \
684 case 153: /* UNII */ khz = 5765000; break; \
685 case 157: /* UNII */ khz = 5785000; break; \
686 case 161: /* UNII */ khz = 5805000; break; \
687 case 165: /* UNII */ khz = 5825000; break; \
688 case 100: /* HiperLAN2 */ khz = 5500000; break; \
689 case 104: /* HiperLAN2 */ khz = 5520000; break; \
690 case 108: /* HiperLAN2 */ khz = 5540000; break; \
691 case 112: /* HiperLAN2 */ khz = 5560000; break; \
692 case 116: /* HiperLAN2 */ khz = 5580000; break; \
693 case 120: /* HiperLAN2 */ khz = 5600000; break; \
694 case 124: /* HiperLAN2 */ khz = 5620000; break; \
695 case 128: /* HiperLAN2 */ khz = 5640000; break; \
696 case 132: /* HiperLAN2 */ khz = 5660000; break; \
697 case 136: /* HiperLAN2 */ khz = 5680000; break; \
698 case 140: /* HiperLAN2 */ khz = 5700000; break; \
699 case 34: /* Japan MMAC */ khz = 5170000; break; \
700 case 38: /* Japan MMAC */ khz = 5190000; break; \
701 case 42: /* Japan MMAC */ khz = 5210000; break; \
702 case 46: /* Japan MMAC */ khz = 5230000; break; \
703 case 184: /* Japan */ khz = 4920000; break; \
704 case 188: /* Japan */ khz = 4940000; break; \
705 case 192: /* Japan */ khz = 4960000; break; \
706 case 196: /* Japan */ khz = 4980000; break; \
707 case 208: /* Japan, means J08 */ khz = 5040000; break; \
708 case 212: /* Japan, means J12 */ khz = 5060000; break; \
709 case 216: /* Japan, means J16 */ khz = 5080000; break; \
710 default: khz = 2412000; break; \
714 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
715 switch (khz) \
717 case 2412000: ch = 1; break; \
718 case 2417000: ch = 2; break; \
719 case 2422000: ch = 3; break; \
720 case 2427000: ch = 4; break; \
721 case 2432000: ch = 5; break; \
722 case 2437000: ch = 6; break; \
723 case 2442000: ch = 7; break; \
724 case 2447000: ch = 8; break; \
725 case 2452000: ch = 9; break; \
726 case 2457000: ch = 10; break; \
727 case 2462000: ch = 11; break; \
728 case 2467000: ch = 12; break; \
729 case 2472000: ch = 13; break; \
730 case 2484000: ch = 14; break; \
731 case 5180000: ch = 36; /* UNII */ break; \
732 case 5200000: ch = 40; /* UNII */ break; \
733 case 5220000: ch = 44; /* UNII */ break; \
734 case 5240000: ch = 48; /* UNII */ break; \
735 case 5260000: ch = 52; /* UNII */ break; \
736 case 5280000: ch = 56; /* UNII */ break; \
737 case 5300000: ch = 60; /* UNII */ break; \
738 case 5320000: ch = 64; /* UNII */ break; \
739 case 5745000: ch = 149; /* UNII */ break; \
740 case 5765000: ch = 153; /* UNII */ break; \
741 case 5785000: ch = 157; /* UNII */ break; \
742 case 5805000: ch = 161; /* UNII */ break; \
743 case 5825000: ch = 165; /* UNII */ break; \
744 case 5500000: ch = 100; /* HiperLAN2 */ break; \
745 case 5520000: ch = 104; /* HiperLAN2 */ break; \
746 case 5540000: ch = 108; /* HiperLAN2 */ break; \
747 case 5560000: ch = 112; /* HiperLAN2 */ break; \
748 case 5580000: ch = 116; /* HiperLAN2 */ break; \
749 case 5600000: ch = 120; /* HiperLAN2 */ break; \
750 case 5620000: ch = 124; /* HiperLAN2 */ break; \
751 case 5640000: ch = 128; /* HiperLAN2 */ break; \
752 case 5660000: ch = 132; /* HiperLAN2 */ break; \
753 case 5680000: ch = 136; /* HiperLAN2 */ break; \
754 case 5700000: ch = 140; /* HiperLAN2 */ break; \
755 case 5170000: ch = 34; /* Japan MMAC */ break; \
756 case 5190000: ch = 38; /* Japan MMAC */ break; \
757 case 5210000: ch = 42; /* Japan MMAC */ break; \
758 case 5230000: ch = 46; /* Japan MMAC */ break; \
759 case 4920000: ch = 184; /* Japan */ break; \
760 case 4940000: ch = 188; /* Japan */ break; \
761 case 4960000: ch = 192; /* Japan */ break; \
762 case 4980000: ch = 196; /* Japan */ break; \
763 case 5040000: ch = 208; /* Japan, means J08 */ break; \
764 case 5060000: ch = 212; /* Japan, means J12 */ break; \
765 case 5080000: ch = 216; /* Japan, means J16 */ break; \
766 default: ch = 1; break; \
771 // Common fragment list structure - Identical to the scatter gather frag list structure
773 #define NIC_MAX_PHYS_BUF_COUNT 8
775 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
776 PVOID Address;
777 ULONG Length;
778 PULONG Reserved;
779 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
782 typedef struct _RTMP_SCATTER_GATHER_LIST {
783 ULONG NumberOfElements;
784 PULONG Reserved;
785 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
786 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
789 // Some utility macros
791 #ifndef min
792 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
793 #endif
795 #ifndef max
796 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
797 #endif
799 #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))))
801 #define INC_COUNTER64(Val) (Val.QuadPart++)
803 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
804 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
805 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
806 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
808 // Check LEAP & CCKM flags
809 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
810 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
812 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
813 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
815 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
817 _pExtraLlcSnapEncap = SNAP_802_1H; \
818 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
819 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
821 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
824 else \
826 _pExtraLlcSnapEncap = NULL; \
830 // New Define for new Tx Path.
831 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
833 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
835 _pExtraLlcSnapEncap = SNAP_802_1H; \
836 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
837 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
839 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
842 else \
844 _pExtraLlcSnapEncap = NULL; \
849 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
851 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
852 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
853 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
856 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
857 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
858 // else remove the LLC/SNAP field from the result Ethernet frame
859 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
860 // Note:
861 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
862 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
863 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
865 char LLC_Len[2]; \
867 _pRemovedLLCSNAP = NULL; \
868 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
869 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
871 PUCHAR pProto = _pData + 6; \
873 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
874 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
876 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
877 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
878 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
880 else \
882 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
883 _pRemovedLLCSNAP = _pData; \
884 _DataSize -= LENGTH_802_1_H; \
885 _pData += LENGTH_802_1_H; \
888 else \
890 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
891 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
892 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
896 #define SWITCH_AB( _pAA, _pBB) \
898 PVOID pCC; \
899 pCC = _pBB; \
900 _pBB = _pAA; \
901 _pAA = pCC; \
904 // Enqueue this frame to MLME engine
905 // We need to enqueue the whole frame because MLME need to pass data type
906 // information from 802.11 header
907 #ifdef RT2860
908 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
910 UINT32 High32TSF, Low32TSF; \
911 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
912 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
913 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
915 #endif
916 #ifdef RT2870
917 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
919 UINT32 High32TSF=0, Low32TSF=0; \
920 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
922 #endif // RT2870 //
924 //Need to collect each ant's rssi concurrently
925 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
926 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
928 SHORT AvgRssi; \
929 UCHAR UsedAnt; \
930 if (_pAd->RxAnt.EvaluatePeriod == 0) \
932 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
933 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
934 if (AvgRssi < 0) \
935 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
936 else \
937 AvgRssi = _rssi1 << 3; \
938 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
940 else \
942 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
943 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
944 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
945 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
946 else \
948 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
949 AvgRssi = _rssi1 << 3; \
951 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
952 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
956 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
957 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
959 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
960 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
963 // Check if it is Japan W53(ch52,56,60,64) channel.
965 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
967 #ifdef RT2860
968 #define STA_PORT_SECURED(_pAd) \
970 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
971 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \
972 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \
973 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
974 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
976 #endif
977 #ifdef RT2870
978 #define STA_PORT_SECURED(_pAd) \
980 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
981 NdisAcquireSpinLock(&_pAd->MacTabLock); \
982 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
983 NdisReleaseSpinLock(&_pAd->MacTabLock); \
985 #endif
988 // Register set pair for initialzation register set definition
990 typedef struct _RTMP_REG_PAIR
992 ULONG Register;
993 ULONG Value;
994 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
996 typedef struct _REG_PAIR
998 UCHAR Register;
999 UCHAR Value;
1000 } REG_PAIR, *PREG_PAIR;
1003 // Register set pair for initialzation register set definition
1005 typedef struct _RTMP_RF_REGS
1007 UCHAR Channel;
1008 ULONG R1;
1009 ULONG R2;
1010 ULONG R3;
1011 ULONG R4;
1012 } RTMP_RF_REGS, *PRTMP_RF_REGS;
1014 typedef struct _FREQUENCY_ITEM {
1015 UCHAR Channel;
1016 UCHAR N;
1017 UCHAR R;
1018 UCHAR K;
1019 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
1022 // Data buffer for DMA operation, the buffer must be contiguous physical memory
1023 // Both DMA to / from CPU use the same structure.
1025 typedef struct _RTMP_DMABUF
1027 ULONG AllocSize;
1028 PVOID AllocVa; // TxBuf virtual address
1029 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
1030 } RTMP_DMABUF, *PRTMP_DMABUF;
1033 typedef union _HEADER_802_11_SEQ{
1034 struct {
1035 USHORT Frag:4;
1036 USHORT Sequence:12;
1037 } field;
1038 USHORT value;
1039 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
1042 // Data buffer for DMA operation, the buffer must be contiguous physical memory
1043 // Both DMA to / from CPU use the same structure.
1045 typedef struct _RTMP_REORDERBUF
1047 BOOLEAN IsFull;
1048 PVOID AllocVa; // TxBuf virtual address
1049 UCHAR Header802_3[14];
1050 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
1051 UCHAR DataOffset;
1052 USHORT Datasize;
1053 ULONG AllocSize;
1054 #ifdef RT2860
1055 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
1056 #endif
1057 #ifdef RT2870
1058 PUCHAR AllocPa;
1059 #endif // RT2870 //
1060 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1063 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1064 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1065 // which won't be released, driver has to wait until upper layer return the packet
1066 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1067 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1068 // which driver should ACK upper layer when the tx is physically done or failed.
1070 typedef struct _RTMP_DMACB
1072 ULONG AllocSize; // Control block size
1073 PVOID AllocVa; // Control block virtual address
1074 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1075 PNDIS_PACKET pNdisPacket;
1076 PNDIS_PACKET pNextNdisPacket;
1078 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1079 } RTMP_DMACB, *PRTMP_DMACB;
1081 typedef struct _RTMP_TX_BUF
1083 PQUEUE_ENTRY Next;
1084 UCHAR Index;
1085 ULONG AllocSize; // Control block size
1086 PVOID AllocVa; // Control block virtual address
1087 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1088 } RTMP_TXBUF, *PRTMP_TXBUF;
1090 typedef struct _RTMP_RX_BUF
1092 BOOLEAN InUse;
1093 ULONG ByBaRecIndex;
1094 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1095 } RTMP_RXBUF, *PRTMP_RXBUF;
1096 typedef struct _RTMP_TX_RING
1098 RTMP_DMACB Cell[TX_RING_SIZE];
1099 UINT32 TxCpuIdx;
1100 UINT32 TxDmaIdx;
1101 UINT32 TxSwFreeIdx; // software next free tx index
1102 } RTMP_TX_RING, *PRTMP_TX_RING;
1104 typedef struct _RTMP_RX_RING
1106 RTMP_DMACB Cell[RX_RING_SIZE];
1107 UINT32 RxCpuIdx;
1108 UINT32 RxDmaIdx;
1109 INT32 RxSwReadIdx; // software next read index
1110 } RTMP_RX_RING, *PRTMP_RX_RING;
1112 typedef struct _RTMP_MGMT_RING
1114 RTMP_DMACB Cell[MGMT_RING_SIZE];
1115 UINT32 TxCpuIdx;
1116 UINT32 TxDmaIdx;
1117 UINT32 TxSwFreeIdx; // software next free tx index
1118 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1121 // Statistic counter structure
1123 typedef struct _COUNTER_802_3
1125 // General Stats
1126 ULONG GoodTransmits;
1127 ULONG GoodReceives;
1128 ULONG TxErrors;
1129 ULONG RxErrors;
1130 ULONG RxNoBuffer;
1132 // Ethernet Stats
1133 ULONG RcvAlignmentErrors;
1134 ULONG OneCollision;
1135 ULONG MoreCollisions;
1137 } COUNTER_802_3, *PCOUNTER_802_3;
1139 typedef struct _COUNTER_802_11 {
1140 ULONG Length;
1141 LARGE_INTEGER LastTransmittedFragmentCount;
1142 LARGE_INTEGER TransmittedFragmentCount;
1143 LARGE_INTEGER MulticastTransmittedFrameCount;
1144 LARGE_INTEGER FailedCount;
1145 LARGE_INTEGER RetryCount;
1146 LARGE_INTEGER MultipleRetryCount;
1147 LARGE_INTEGER RTSSuccessCount;
1148 LARGE_INTEGER RTSFailureCount;
1149 LARGE_INTEGER ACKFailureCount;
1150 LARGE_INTEGER FrameDuplicateCount;
1151 LARGE_INTEGER ReceivedFragmentCount;
1152 LARGE_INTEGER MulticastReceivedFrameCount;
1153 LARGE_INTEGER FCSErrorCount;
1154 } COUNTER_802_11, *PCOUNTER_802_11;
1156 typedef struct _COUNTER_RALINK {
1157 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1158 #ifdef RT2860
1159 ULONG LastReceivedByteCount;
1160 #endif
1161 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1162 ULONG BeenDisassociatedCount;
1163 ULONG BadCQIAutoRecoveryCount;
1164 ULONG PoorCQIRoamingCount;
1165 ULONG MgmtRingFullCount;
1166 ULONG RxCountSinceLastNULL;
1167 ULONG RxCount;
1168 ULONG RxRingErrCount;
1169 ULONG KickTxCount;
1170 ULONG TxRingErrCount;
1171 LARGE_INTEGER RealFcsErrCount;
1172 ULONG PendingNdisPacketCount;
1174 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1175 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1176 UINT32 OneSecTxDoneCount;
1177 ULONG OneSecRxCount;
1178 UINT32 OneSecTxAggregationCount;
1179 UINT32 OneSecRxAggregationCount;
1181 UINT32 OneSecFrameDuplicateCount;
1183 #ifdef RT2870
1184 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1185 #endif // RT2870 //
1187 UINT32 OneSecTxNoRetryOkCount;
1188 UINT32 OneSecTxRetryOkCount;
1189 UINT32 OneSecTxFailCount;
1190 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1191 UINT32 OneSecRxOkCnt; // RX without error
1192 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1193 UINT32 OneSecRxFcsErrCnt; // CRC error
1194 UINT32 OneSecBeaconSentCnt;
1195 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1196 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1197 ULONG DuplicateRcv;
1198 ULONG TxAggCount;
1199 ULONG TxNonAggCount;
1200 ULONG TxAgg1MPDUCount;
1201 ULONG TxAgg2MPDUCount;
1202 ULONG TxAgg3MPDUCount;
1203 ULONG TxAgg4MPDUCount;
1204 ULONG TxAgg5MPDUCount;
1205 ULONG TxAgg6MPDUCount;
1206 ULONG TxAgg7MPDUCount;
1207 ULONG TxAgg8MPDUCount;
1208 ULONG TxAgg9MPDUCount;
1209 ULONG TxAgg10MPDUCount;
1210 ULONG TxAgg11MPDUCount;
1211 ULONG TxAgg12MPDUCount;
1212 ULONG TxAgg13MPDUCount;
1213 ULONG TxAgg14MPDUCount;
1214 ULONG TxAgg15MPDUCount;
1215 ULONG TxAgg16MPDUCount;
1217 LARGE_INTEGER TransmittedOctetsInAMSDU;
1218 LARGE_INTEGER TransmittedAMSDUCount;
1219 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1220 LARGE_INTEGER ReceivedAMSDUCount;
1221 LARGE_INTEGER TransmittedAMPDUCount;
1222 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1223 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1224 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1225 } COUNTER_RALINK, *PCOUNTER_RALINK;
1227 typedef struct _PID_COUNTER {
1228 ULONG TxAckRequiredCount; // CRC error
1229 ULONG TxAggreCount;
1230 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1231 ULONG LastSuccessRate;
1232 } PID_COUNTER, *PPID_COUNTER;
1234 typedef struct _COUNTER_DRS {
1235 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1236 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1237 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1238 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1239 ULONG CurrTxRateStableTime; // # of second in current TX rate
1240 BOOLEAN fNoisyEnvironment;
1241 BOOLEAN fLastSecAccordingRSSI;
1242 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1243 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1244 ULONG LastTxOkCount;
1245 } COUNTER_DRS, *PCOUNTER_DRS;
1248 // Arcfour Structure Added by PaulWu
1250 typedef struct _ARCFOUR
1252 UINT X;
1253 UINT Y;
1254 UCHAR STATE[256];
1255 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1257 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1258 typedef struct _RECEIVE_SETTING {
1259 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1260 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1261 USHORT ShortGI:1;
1262 USHORT STBC:2; //SPACE
1263 USHORT rsv:3;
1264 USHORT OFDM:1;
1265 USHORT MIMO:1;
1266 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1268 // Shared key data structure
1269 typedef struct _WEP_KEY {
1270 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1271 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1272 } WEP_KEY, *PWEP_KEY;
1274 typedef struct _CIPHER_KEY {
1275 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1276 UCHAR RxMic[8]; // make alignment
1277 UCHAR TxMic[8];
1278 UCHAR TxTsc[6]; // 48bit TSC value
1279 UCHAR RxTsc[6]; // 48bit TSC value
1280 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1281 UCHAR KeyLen;
1282 UCHAR BssId[6];
1283 // Key length for each key, 0: entry is invalid
1284 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1285 } CIPHER_KEY, *PCIPHER_KEY;
1287 typedef struct _BBP_TUNING_STRUCT {
1288 BOOLEAN Enable;
1289 UCHAR FalseCcaCountUpperBound; // 100 per sec
1290 UCHAR FalseCcaCountLowerBound; // 10 per sec
1291 UCHAR R17LowerBound; // specified in E2PROM
1292 UCHAR R17UpperBound; // 0x68 according to David Tung
1293 UCHAR CurrentR17Value;
1294 } BBP_TUNING, *PBBP_TUNING;
1296 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1297 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1298 #ifdef RT30xx
1299 UCHAR EvaluateStableCnt;
1300 #endif
1301 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1302 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1303 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1304 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1305 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1306 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1307 SHORT Pair1LastAvgRssi; //
1308 SHORT Pair2LastAvgRssi; //
1309 ULONG RcvPktNumWhenEvaluate;
1310 BOOLEAN FirstPktArrivedWhenEvaluate;
1311 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1312 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1314 typedef struct _LEAP_AUTH_INFO {
1315 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1316 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1317 UCHAR Reserve[2];
1318 UCHAR UserName[256]; //LEAP, User name
1319 ULONG UserNameLen;
1320 UCHAR Password[256]; //LEAP, User Password
1321 ULONG PasswordLen;
1322 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1324 typedef struct {
1325 UCHAR Addr[MAC_ADDR_LEN];
1326 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1327 //00 02-Authentication timeout
1328 //00 03-Challenge from AP failed
1329 //00 04-Challenge to AP failed
1330 BOOLEAN Reported;
1331 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1333 typedef struct {
1334 UCHAR RogueApNr;
1335 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1336 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1338 typedef struct {
1339 BOOLEAN Enable;
1340 UCHAR Delta;
1341 BOOLEAN PlusSign;
1342 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1345 // Receive Tuple Cache Format
1347 typedef struct _TUPLE_CACHE {
1348 BOOLEAN Valid;
1349 UCHAR MacAddress[MAC_ADDR_LEN];
1350 USHORT Sequence;
1351 USHORT Frag;
1352 } TUPLE_CACHE, *PTUPLE_CACHE;
1355 // Fragment Frame structure
1357 typedef struct _FRAGMENT_FRAME {
1358 PNDIS_PACKET pFragPacket;
1359 ULONG RxSize;
1360 USHORT Sequence;
1361 USHORT LastFrag;
1362 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1363 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1367 // Packet information for NdisQueryPacket
1369 typedef struct _PACKET_INFO {
1370 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1371 UINT BufferCount ; // Number of Buffer descriptor chained
1372 UINT TotalPacketLength ; // Self explained
1373 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1374 } PACKET_INFO, *PPACKET_INFO;
1377 // Tkip Key structure which RC4 key & MIC calculation
1379 typedef struct _TKIP_KEY_INFO {
1380 UINT nBytesInM; // # bytes in M for MICKEY
1381 ULONG IV16;
1382 ULONG IV32;
1383 ULONG K0; // for MICKEY Low
1384 ULONG K1; // for MICKEY Hig
1385 ULONG L; // Current state for MICKEY
1386 ULONG R; // Current state for MICKEY
1387 ULONG M; // Message accumulator for MICKEY
1388 UCHAR RC4KEY[16];
1389 UCHAR MIC[8];
1390 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1393 // Private / Misc data, counters for driver internal use
1395 typedef struct __PRIVATE_STRUC {
1396 UINT SystemResetCnt; // System reset counter
1397 UINT TxRingFullCnt; // Tx ring full occurrance number
1398 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1399 // Variables for WEP encryption / decryption in rtmp_wep.c
1400 UINT FCSCRC32;
1401 ARCFOURCONTEXT WEPCONTEXT;
1402 // Tkip stuff
1403 TKIP_KEY_INFO Tx;
1404 TKIP_KEY_INFO Rx;
1405 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1407 // structure to tune BBP R66 (BBP TUNING)
1408 typedef struct _BBP_R66_TUNING {
1409 BOOLEAN bEnable;
1410 USHORT FalseCcaLowerThreshold; // default 100
1411 USHORT FalseCcaUpperThreshold; // default 512
1412 UCHAR R66Delta;
1413 UCHAR R66CurrentValue;
1414 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1415 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1417 // structure to store channel TX power
1418 typedef struct _CHANNEL_TX_POWER {
1419 USHORT RemainingTimeForUse; //unit: sec
1420 UCHAR Channel;
1421 CHAR Power;
1422 CHAR Power2;
1423 UCHAR MaxTxPwr;
1424 UCHAR DfsReq;
1425 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1427 // structure to store 802.11j channel TX power
1428 typedef struct _CHANNEL_11J_TX_POWER {
1429 UCHAR Channel;
1430 UCHAR BW; // BW_10 or BW_20
1431 CHAR Power;
1432 CHAR Power2;
1433 USHORT RemainingTimeForUse; //unit: sec
1434 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1436 typedef enum _ABGBAND_STATE_ {
1437 UNKNOWN_BAND,
1438 BG_BAND,
1439 A_BAND,
1440 } ABGBAND_STATE;
1442 typedef struct _MLME_STRUCT {
1443 // STA state machines
1444 STATE_MACHINE CntlMachine;
1445 STATE_MACHINE AssocMachine;
1446 STATE_MACHINE AuthMachine;
1447 STATE_MACHINE AuthRspMachine;
1448 STATE_MACHINE SyncMachine;
1449 STATE_MACHINE WpaPskMachine;
1450 STATE_MACHINE LeapMachine;
1451 STATE_MACHINE AironetMachine;
1452 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1453 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1454 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1455 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1456 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1457 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1458 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1459 // Action
1460 STATE_MACHINE ActMachine;
1462 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1463 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1464 ULONG LastSendNULLpsmTime;
1466 BOOLEAN bRunning;
1467 NDIS_SPIN_LOCK TaskLock;
1468 MLME_QUEUE Queue;
1470 UINT ShiftReg;
1472 RALINK_TIMER_STRUCT PeriodicTimer;
1473 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1474 RALINK_TIMER_STRUCT LinkDownTimer;
1475 RALINK_TIMER_STRUCT LinkUpTimer;
1476 #ifdef RT2860
1477 UCHAR bPsPollTimerRunning;
1478 RALINK_TIMER_STRUCT PsPollTimer;
1479 RALINK_TIMER_STRUCT RadioOnOffTimer;
1480 #endif
1481 ULONG PeriodicRound;
1482 ULONG OneSecPeriodicRound;
1484 UCHAR RealRxPath;
1485 BOOLEAN bLowThroughput;
1486 BOOLEAN bEnableAutoAntennaCheck;
1487 RALINK_TIMER_STRUCT RxAntEvalTimer;
1489 #ifdef RT2870
1490 UCHAR CaliBW40RfR24;
1491 UCHAR CaliBW20RfR24;
1492 #endif // RT2870 //
1493 } MLME_STRUCT, *PMLME_STRUCT;
1495 // structure for radar detection and channel switch
1496 typedef struct _RADAR_DETECT_STRUCT {
1497 UCHAR CSCount; //Channel switch counter
1498 UCHAR CSPeriod; //Channel switch period (beacon count)
1499 UCHAR RDCount; //Radar detection counter
1500 UCHAR RDMode; //Radar Detection mode
1501 UCHAR RDDurRegion; //Radar detection duration region
1502 UCHAR BBPR16;
1503 UCHAR BBPR17;
1504 UCHAR BBPR18;
1505 UCHAR BBPR21;
1506 UCHAR BBPR22;
1507 UCHAR BBPR64;
1508 ULONG InServiceMonitorCount; // unit: sec
1509 UINT8 DfsSessionTime;
1510 BOOLEAN bFastDfs;
1511 UINT8 ChMovingTime;
1512 UINT8 LongPulseRadarTh;
1513 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1515 typedef enum _REC_BLOCKACK_STATUS
1517 Recipient_NONE=0,
1518 Recipient_USED,
1519 Recipient_HandleRes,
1520 Recipient_Accept
1521 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1523 typedef enum _ORI_BLOCKACK_STATUS
1525 Originator_NONE=0,
1526 Originator_USED,
1527 Originator_WaitRes,
1528 Originator_Done
1529 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1531 typedef struct _BA_ORI_ENTRY{
1532 UCHAR Wcid;
1533 UCHAR TID;
1534 UCHAR BAWinSize;
1535 UCHAR Token;
1536 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1537 USHORT Sequence;
1538 USHORT TimeOutValue;
1539 ORI_BLOCKACK_STATUS ORI_BA_Status;
1540 RALINK_TIMER_STRUCT ORIBATimer;
1541 PVOID pAdapter;
1542 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1544 typedef struct _BA_REC_ENTRY {
1545 UCHAR Wcid;
1546 UCHAR TID;
1547 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1548 USHORT LastIndSeq;
1549 USHORT TimeOutValue;
1550 RALINK_TIMER_STRUCT RECBATimer;
1551 ULONG LastIndSeqAtTimer;
1552 ULONG nDropPacket;
1553 ULONG rcvSeq;
1554 REC_BLOCKACK_STATUS REC_BA_Status;
1555 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1556 PVOID pAdapter;
1557 struct reordering_list list;
1558 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1561 typedef struct {
1562 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1563 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1564 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1565 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1566 } BA_TABLE, *PBA_TABLE;
1568 //For QureyBATableOID use;
1569 typedef struct PACKED _OID_BA_REC_ENTRY{
1570 UCHAR MACAddr[MAC_ADDR_LEN];
1571 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1572 UCHAR rsv;
1573 UCHAR BufSize[8];
1574 REC_BLOCKACK_STATUS REC_BA_Status[8];
1575 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1577 //For QureyBATableOID use;
1578 typedef struct PACKED _OID_BA_ORI_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, read ORI_BA_Status[TID] for status
1581 UCHAR rsv;
1582 UCHAR BufSize[8];
1583 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1584 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1586 typedef struct _QUERYBA_TABLE{
1587 OID_BA_ORI_ENTRY BAOriEntry[32];
1588 OID_BA_REC_ENTRY BARecEntry[32];
1589 UCHAR OriNum;// Number of below BAOriEntry
1590 UCHAR RecNum;// Number of below BARecEntry
1591 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1593 typedef union _BACAP_STRUC {
1594 struct {
1595 UINT32 RxBAWinLimit:8;
1596 UINT32 TxBAWinLimit:8;
1597 UINT32 AutoBA:1; // automatically BA
1598 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1599 UINT32 MpduDensity:3;
1600 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1601 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1602 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1603 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1604 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.
1605 UINT32 :4;
1606 } field;
1607 UINT32 word;
1608 } BACAP_STRUC, *PBACAP_STRUC;
1610 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1611 typedef struct _IOT_STRUC {
1612 UCHAR Threshold[2];
1613 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1614 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1615 ULONG OneSecInWindowCount;
1616 ULONG OneSecFrameDuplicateCount;
1617 ULONG OneSecOutWindowCount;
1618 UCHAR DelOriAct;
1619 UCHAR DelRecAct;
1620 UCHAR RTSShortProt;
1621 UCHAR RTSLongProt;
1622 BOOLEAN bRTSLongProtOn;
1623 BOOLEAN bLastAtheros;
1624 BOOLEAN bCurrentAtheros;
1625 BOOLEAN bNowAtherosBurstOn;
1626 BOOLEAN bNextDisableRxBA;
1627 BOOLEAN bToggle;
1628 } IOT_STRUC, *PIOT_STRUC;
1630 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1631 typedef union _REG_TRANSMIT_SETTING {
1632 struct {
1633 UINT32 rsv0:10;
1634 UINT32 TxBF:1;
1635 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1636 UINT32 ShortGI:1;
1637 UINT32 STBC:1; //SPACE
1638 UINT32 TRANSNO:2;
1639 UINT32 HTMODE:1;
1640 UINT32 EXTCHA:2;
1641 UINT32 rsv:13;
1642 } field;
1643 UINT32 word;
1644 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1646 typedef union _DESIRED_TRANSMIT_SETTING {
1647 struct {
1648 USHORT MCS:7; // MCS
1649 USHORT PhyMode:4;
1650 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1651 USHORT rsv:3;
1652 } field;
1653 USHORT word;
1654 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1656 typedef struct {
1657 BOOLEAN IsRecipient;
1658 UCHAR MACAddr[MAC_ADDR_LEN];
1659 UCHAR TID;
1660 UCHAR nMSDU;
1661 USHORT TimeOut;
1662 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1663 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1666 // Multiple SSID structure
1668 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1669 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1671 /* clear bcmc TIM bit */
1672 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1673 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1675 /* set bcmc TIM bit */
1676 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1677 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1679 /* clear a station PS TIM bit */
1680 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1681 { UCHAR tim_offset = wcid >> 3; \
1682 UCHAR bit_offset = wcid & 0x7; \
1683 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1685 /* set a station PS TIM bit */
1686 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1687 { UCHAR tim_offset = wcid >> 3; \
1688 UCHAR bit_offset = wcid & 0x7; \
1689 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1691 #ifdef RT2870
1692 #define BEACON_BITMAP_MASK 0xff
1693 typedef struct _BEACON_SYNC_STRUCT_
1695 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1696 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1697 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1698 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1699 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1700 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1701 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1702 }BEACON_SYNC_STRUCT;
1703 #endif // RT2870 //
1705 typedef struct _MULTISSID_STRUCT {
1706 UCHAR Bssid[MAC_ADDR_LEN];
1707 UCHAR SsidLen;
1708 CHAR Ssid[MAX_LEN_OF_SSID];
1709 USHORT CapabilityInfo;
1711 PNET_DEV MSSIDDev;
1713 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1714 NDIS_802_11_WEP_STATUS WepStatus;
1715 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1716 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1718 ULONG TxCount;
1719 ULONG RxCount;
1720 ULONG ReceivedByteCount;
1721 ULONG TransmittedByteCount;
1722 ULONG RxErrorCount;
1723 ULONG RxDropCount;
1725 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1726 RT_HT_PHY_INFO DesiredHtPhyInfo;
1727 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1728 BOOLEAN bAutoTxRateSwitch;
1730 UCHAR DefaultKeyId;
1732 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1733 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1734 UCHAR DesiredRatesIndex;
1735 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1737 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1739 // WPA
1740 UCHAR GMK[32];
1741 UCHAR PMK[32];
1742 UCHAR GTK[32];
1743 BOOLEAN IEEE8021X;
1744 BOOLEAN PreAuth;
1745 UCHAR GNonce[32];
1746 UCHAR PortSecured;
1747 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1748 UCHAR BANClass3Data;
1749 ULONG IsolateInterStaTraffic;
1751 UCHAR RSNIE_Len[2];
1752 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1755 UCHAR TimIELocationInBeacon;
1756 UCHAR CapabilityInfoLocationInBeacon;
1757 // outgoing BEACON frame buffer and corresponding TXWI
1758 // PTXWI_STRUC BeaconTxWI; //
1759 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1761 BOOLEAN bHideSsid;
1762 UINT16 StationKeepAliveTime; // unit: second
1764 USHORT VLAN_VID;
1765 USHORT VLAN_Priority;
1767 RT_802_11_ACL AccessControlList;
1769 // EDCA Qos
1770 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1771 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1773 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1775 // For 802.1x daemon setting per BSS
1776 UCHAR radius_srv_num;
1777 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1779 #ifdef RTL865X_SOC
1780 unsigned int mylinkid;
1781 #endif
1784 UINT32 RcvdConflictSsidCount;
1785 UINT32 RcvdSpoofedAssocRespCount;
1786 UINT32 RcvdSpoofedReassocRespCount;
1787 UINT32 RcvdSpoofedProbeRespCount;
1788 UINT32 RcvdSpoofedBeaconCount;
1789 UINT32 RcvdSpoofedDisassocCount;
1790 UINT32 RcvdSpoofedAuthCount;
1791 UINT32 RcvdSpoofedDeauthCount;
1792 UINT32 RcvdSpoofedUnknownMgmtCount;
1793 UINT32 RcvdReplayAttackCount;
1795 CHAR RssiOfRcvdConflictSsid;
1796 CHAR RssiOfRcvdSpoofedAssocResp;
1797 CHAR RssiOfRcvdSpoofedReassocResp;
1798 CHAR RssiOfRcvdSpoofedProbeResp;
1799 CHAR RssiOfRcvdSpoofedBeacon;
1800 CHAR RssiOfRcvdSpoofedDisassoc;
1801 CHAR RssiOfRcvdSpoofedAuth;
1802 CHAR RssiOfRcvdSpoofedDeauth;
1803 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1804 CHAR RssiOfRcvdReplayAttack;
1806 BOOLEAN bBcnSntReq;
1807 UCHAR BcnBufIdx;
1808 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1810 // configuration common to OPMODE_AP as well as OPMODE_STA
1811 typedef struct _COMMON_CONFIG {
1813 BOOLEAN bCountryFlag;
1814 UCHAR CountryCode[3];
1815 UCHAR Geography;
1816 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1817 UCHAR CountryRegionForABand; // Enum of country region for A band
1818 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1819 USHORT Dsifs; // in units of usec
1820 ULONG PacketFilter; // Packet filter for receiving
1822 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1823 UCHAR SsidLen; // the actual ssid length in used
1824 UCHAR LastSsidLen; // the actual ssid length in used
1825 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1826 UCHAR LastBssid[MAC_ADDR_LEN];
1828 UCHAR Bssid[MAC_ADDR_LEN];
1829 USHORT BeaconPeriod;
1830 UCHAR Channel;
1831 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1833 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1834 UCHAR SupRateLen;
1835 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1836 UCHAR ExtRateLen;
1837 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1838 UCHAR MaxDesiredRate;
1839 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1841 ULONG BasicRateBitmap; // backup basic ratebitmap
1843 BOOLEAN bAPSDCapable;
1844 BOOLEAN bInServicePeriod;
1845 BOOLEAN bAPSDAC_BE;
1846 BOOLEAN bAPSDAC_BK;
1847 BOOLEAN bAPSDAC_VI;
1848 BOOLEAN bAPSDAC_VO;
1849 BOOLEAN bNeedSendTriggerFrame;
1850 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1851 ULONG TriggerTimerCount;
1852 UCHAR MaxSPLength;
1853 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1854 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1855 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1856 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1857 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1858 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1859 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1860 UCHAR RtsRate; // RATE_xxx
1861 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1862 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1863 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1865 USHORT RtsThreshold; // in unit of BYTE
1866 USHORT FragmentThreshold; // in unit of BYTE
1868 UCHAR TxPower; // in unit of mW
1869 ULONG TxPowerPercentage; // 0~100 %
1870 ULONG TxPowerDefault; // keep for TxPowerPercentage
1872 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1873 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1875 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1876 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1877 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1878 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1879 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1880 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1881 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1882 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1883 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1884 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1886 BOOLEAN bRdg;
1888 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1889 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1890 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1891 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1892 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1893 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1894 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1895 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1896 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1897 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1898 ULONG OpStatusFlags;
1900 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1901 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1902 #ifdef RT30xx
1903 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1904 #endif
1906 // IEEE802.11H--DFS.
1907 RADAR_DETECT_STRUCT RadarDetect;
1909 // HT
1910 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1911 //RT_HT_CAPABILITY SupportedHtPhy;
1912 RT_HT_CAPABILITY DesiredHtPhy;
1913 HT_CAPABILITY_IE HtCapability;
1914 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1915 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1916 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1917 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
1919 BOOLEAN bHTProtect;
1920 BOOLEAN bMIMOPSEnable;
1921 BOOLEAN bBADecline;
1922 BOOLEAN bDisableReordering;
1923 BOOLEAN bForty_Mhz_Intolerant;
1924 BOOLEAN bExtChannelSwitchAnnouncement;
1925 BOOLEAN bRcvBSSWidthTriggerEvents;
1926 ULONG LastRcvBSSWidthTriggerEventsTime;
1928 UCHAR TxBASize;
1930 // Enable wireless event
1931 BOOLEAN bWirelessEvent;
1932 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1934 // Tx & Rx Stream number selection
1935 UCHAR TxStream;
1936 UCHAR RxStream;
1938 // transmit phy mode, trasmit rate for Multicast.
1939 #ifdef MCAST_RATE_SPECIFIC
1940 UCHAR McastTransmitMcs;
1941 UCHAR McastTransmitPhyMode;
1942 #endif // MCAST_RATE_SPECIFIC //
1944 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1946 #ifdef RT2870
1947 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1948 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1949 RT_HT_CAPABILITY SupportedHtPhy;
1950 ULONG MaxPktOneTxBulk;
1951 UCHAR TxBulkFactor;
1952 UCHAR RxBulkFactor;
1954 BEACON_SYNC_STRUCT *pBeaconSync;
1955 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1956 UINT32 BeaconAdjust;
1957 UINT32 BeaconFactor;
1958 UINT32 BeaconRemain;
1959 #endif // RT2870 //
1962 NDIS_SPIN_LOCK MeasureReqTabLock;
1963 PMEASURE_REQ_TAB pMeasureReqTab;
1965 NDIS_SPIN_LOCK TpcReqTabLock;
1966 PTPC_REQ_TAB pTpcReqTab;
1968 // transmit phy mode, trasmit rate for Multicast.
1969 #ifdef MCAST_RATE_SPECIFIC
1970 HTTRANSMIT_SETTING MCastPhyMode;
1971 #endif // MCAST_RATE_SPECIFIC //
1972 } COMMON_CONFIG, *PCOMMON_CONFIG;
1974 /* Modified by Wu Xi-Kun 4/21/2006 */
1975 // STA configuration and status
1976 typedef struct _STA_ADMIN_CONFIG {
1977 // GROUP 1 -
1978 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1979 // the user intended configuration, but not necessary fully equal to the final
1980 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1981 // AP or IBSS holder).
1982 // Once initialized, user configuration can only be changed via OID_xxx
1983 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1984 USHORT AtimWin; // used when starting a new IBSS
1986 // GROUP 2 -
1987 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1988 // the user intended configuration, and should be always applied to the final
1989 // settings in ACTIVE BSS without compromising with the BSS holder.
1990 // Once initialized, user configuration can only be changed via OID_xxx
1991 UCHAR RssiTrigger;
1992 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1993 USHORT DefaultListenCount; // default listen count;
1994 ULONG WindowsPowerMode; // Power mode for AC power
1995 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1996 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1997 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1998 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2000 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2001 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2002 USHORT DisassocReason;
2003 UCHAR DisassocSta[MAC_ADDR_LEN];
2004 USHORT DeauthReason;
2005 UCHAR DeauthSta[MAC_ADDR_LEN];
2006 USHORT AuthFailReason;
2007 UCHAR AuthFailSta[MAC_ADDR_LEN];
2009 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2010 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2011 NDIS_802_11_WEP_STATUS WepStatus;
2012 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2014 // Add to support different cipher suite for WPA2/WPA mode
2015 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2016 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2017 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2018 USHORT RsnCapability;
2020 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2022 UCHAR PMK[32]; // WPA PSK mode PMK
2023 UCHAR PTK[64]; // WPA PSK mode PTK
2024 UCHAR GTK[32]; // GTK from authenticator
2025 BSSID_INFO SavedPMK[PMKID_NO];
2026 UINT SavedPMKNum; // Saved PMKID number
2028 UCHAR DefaultKeyId;
2031 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2032 UCHAR PortSecured;
2034 // For WPA countermeasures
2035 ULONG LastMicErrorTime; // record last MIC error time
2036 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2037 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2038 // For WPA-PSK supplicant state
2039 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2040 UCHAR ReplayCounter[8];
2041 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2042 UCHAR SNonce[32]; // SNonce for WPA-PSK
2044 UCHAR LastSNR0; // last received BEACON's SNR
2045 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2046 RSSI_SAMPLE RssiSample;
2047 ULONG NumOfAvgRssiSample;
2049 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2050 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2051 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2052 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2054 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2055 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2056 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2057 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2058 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2059 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2060 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2061 #ifdef RT2860
2062 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2063 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2064 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2065 #endif
2066 // New for WPA, windows want us to to keep association information and
2067 // Fixed IEs from last association response
2068 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2069 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2070 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2071 USHORT ResVarIELen; // Length of next VIE include EID & Length
2072 UCHAR ResVarIEs[MAX_VIE_LEN];
2074 UCHAR RSNIE_Len;
2075 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2077 // New variables used for CCX 1.0
2078 BOOLEAN bCkipOn;
2079 BOOLEAN bCkipCmicOn;
2080 UCHAR CkipFlag;
2081 UCHAR GIV[3]; //for CCX iv
2082 UCHAR RxSEQ[4];
2083 UCHAR TxSEQ[4];
2084 UCHAR CKIPMIC[4];
2085 UCHAR LeapAuthMode;
2086 LEAP_AUTH_INFO LeapAuthInfo;
2087 UCHAR HashPwd[16];
2088 UCHAR NetworkChallenge[8];
2089 UCHAR NetworkChallengeResponse[24];
2090 UCHAR PeerChallenge[8];
2092 UCHAR PeerChallengeResponse[24];
2093 UCHAR SessionKey[16]; //Network session keys (NSK)
2094 RALINK_TIMER_STRUCT LeapAuthTimer;
2095 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2097 // New control flags for CCX
2098 CCX_CONTROL CCXControl; // Master administration state
2099 BOOLEAN CCXEnable; // Actual CCX state
2100 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2101 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2102 UCHAR CCXReqType; // Current processing CCX request type
2103 BSS_TABLE CCXBssTab; // BSS Table
2104 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2105 USHORT FrameReportLen; // Current Frame report length
2106 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2107 USHORT RPIDensity[8]; // Array for RPI density collection
2108 // Start address of each BSS table within FrameReportBuf
2109 // It's important to update the RxPower of the corresponding Bss
2110 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2111 USHORT BeaconToken; // Token for beacon report
2112 ULONG LastBssIndex; // Most current reported Bss index
2113 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2114 UCHAR RMReqCnt; // Number of measurement request saved.
2115 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2116 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2117 // It must be the same channel with maximum duration
2118 USHORT ParallelDuration; // Maximum duration for parallel measurement
2119 UCHAR ParallelChannel; // Only one channel with parallel measurement
2120 USHORT IAPPToken; // IAPP dialog token
2121 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2122 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2123 // Hack for channel load and noise histogram parameters
2124 UCHAR NHFactor; // Parameter for Noise histogram
2125 UCHAR CLFactor; // Parameter for channel load
2127 UCHAR KRK[16]; //Key Refresh Key.
2128 UCHAR BTK[32]; //Base Transient Key
2129 BOOLEAN CCKMLinkUpFlag;
2130 ULONG CCKMRN; //(Re)Association request number.
2131 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2132 UCHAR AironetCellPowerLimit; //in dBm
2133 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2134 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2135 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2136 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2137 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2138 USHORT CCXAdjacentAPChannel;
2139 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2141 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2142 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2144 UCHAR DtimCount; // 0.. DtimPeriod-1
2145 UCHAR DtimPeriod; // default = 3
2147 ////////////////////////////////////////////////////////////////////////////////////////
2148 // This is only for WHQL test.
2149 BOOLEAN WhqlTest;
2150 ////////////////////////////////////////////////////////////////////////////////////////
2152 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2153 // Fast Roaming
2154 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2155 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2157 BOOLEAN IEEE8021X;
2158 BOOLEAN IEEE8021x_required_keys;
2159 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2160 UCHAR DesireSharedKeyId;
2162 // 0: driver ignores wpa_supplicant
2163 // 1: wpa_supplicant initiates scanning and AP selection
2164 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2165 UCHAR WpaSupplicantUP;
2166 UCHAR WpaSupplicantScanCount;
2168 CHAR dev_name[16];
2169 USHORT OriDevType;
2171 BOOLEAN bTGnWifiTest;
2172 BOOLEAN bScanReqIsFromWebUI;
2174 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2175 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2176 RT_HT_PHY_INFO DesiredHtPhyInfo;
2177 BOOLEAN bAutoTxRateSwitch;
2179 #ifdef RT2860
2180 UCHAR BBPR3;
2181 #endif
2182 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2184 // This data structure keep the current active BSS/IBSS's configuration that this STA
2185 // had agreed upon joining the network. Which means these parameters are usually decided
2186 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2187 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2188 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2189 // the current active settings.
2190 typedef struct _STA_ACTIVE_CONFIG {
2191 USHORT Aid;
2192 USHORT AtimWin; // in kusec; IBSS parameter set element
2193 USHORT CapabilityInfo;
2194 USHORT CfpMaxDuration;
2195 USHORT CfpPeriod;
2197 // Copy supported rate from desired AP's beacon. We are trying to match
2198 // AP's supported and extended rate settings.
2199 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2200 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2201 UCHAR SupRateLen;
2202 UCHAR ExtRateLen;
2203 // Copy supported ht from desired AP's beacon. We are trying to match
2204 RT_HT_PHY_INFO SupportedPhyInfo;
2205 RT_HT_CAPABILITY SupportedHtPhy;
2206 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2208 #ifdef RT2870
2209 // for USB interface, avoid in interrupt when write key
2210 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2211 NDIS_802_11_MAC_ADDRESS MacAddr;
2212 USHORT MacTabMatchWCID; // ASIC
2213 CIPHER_KEY CipherKey;
2214 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2215 #endif // RT2870 //
2217 // ----------- start of AP --------------------------
2218 // AUTH-RSP State Machine Aux data structure
2219 typedef struct _AP_MLME_AUX {
2220 UCHAR Addr[MAC_ADDR_LEN];
2221 USHORT Alg;
2222 CHAR Challenge[CIPHER_TEXT_LEN];
2223 } AP_MLME_AUX, *PAP_MLME_AUX;
2225 // structure to define WPA Group Key Rekey Interval
2226 typedef struct PACKED _RT_802_11_WPA_REKEY {
2227 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2228 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2229 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2231 typedef struct _MAC_TABLE_ENTRY {
2232 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2233 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2234 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2235 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2236 BOOLEAN ValidAsMesh;
2237 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2238 BOOLEAN isCached;
2239 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2241 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2242 //jan for wpa
2243 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2244 UCHAR CMTimerRunning;
2245 UCHAR apidx; // MBSS number
2246 UCHAR RSNIE_Len;
2247 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2248 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2249 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2250 UCHAR PTK[64];
2251 UCHAR ReTryCounter;
2252 RALINK_TIMER_STRUCT RetryTimer;
2253 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2254 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2255 NDIS_802_11_WEP_STATUS WepStatus;
2256 AP_WPA_STATE WpaState;
2257 GTK_STATE GTKState;
2258 USHORT PortSecured;
2259 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2260 CIPHER_KEY PairwiseKey;
2261 PVOID pAd;
2262 INT PMKID_CacheIdx;
2263 UCHAR PMKID[LEN_PMKID];
2266 UCHAR Addr[MAC_ADDR_LEN];
2267 UCHAR PsMode;
2268 SST Sst;
2269 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2270 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2271 USHORT Aid;
2272 USHORT CapabilityInfo;
2273 UCHAR LastRssi;
2274 ULONG NoDataIdleCount;
2275 UINT16 StationKeepAliveCount; // unit: second
2276 ULONG PsQIdleCount;
2277 QUEUE_HEADER PsQueue;
2279 UINT32 StaConnectTime; // the live time of this station since associated with AP
2281 BOOLEAN bSendBAR;
2282 USHORT NoBADataCountDown;
2284 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2285 UINT TxBFCount; // 3*3
2286 UINT FIFOCount;
2287 UINT DebugFIFOCount;
2288 UINT DebugTxCount;
2289 BOOLEAN bDlsInit;
2292 //====================================================
2293 //WDS entry needs these
2294 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2295 UINT MatchWDSTabIdx;
2296 UCHAR MaxSupportedRate;
2297 UCHAR CurrTxRate;
2298 UCHAR CurrTxRateIndex;
2299 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2300 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2301 UINT32 OneSecTxNoRetryOkCount;
2302 UINT32 OneSecTxRetryOkCount;
2303 UINT32 OneSecTxFailCount;
2304 UINT32 ContinueTxFailCnt;
2305 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2306 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2307 //====================================================
2309 BOOLEAN fNoisyEnvironment;
2310 BOOLEAN fLastSecAccordingRSSI;
2311 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2312 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2313 ULONG LastTxOkCount;
2314 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2316 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2317 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2318 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2319 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2320 ULONG ClientStatusFlags;
2322 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2324 // HT EWC MIMO-N used parameters
2325 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2326 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2327 USHORT TXAutoBAbitmap;
2328 USHORT BADeclineBitmap;
2329 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2330 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2331 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2333 // 802.11n features.
2334 UCHAR MpduDensity;
2335 UCHAR MaxRAmpduFactor;
2336 UCHAR AMsduSize;
2337 UCHAR MmpsMode; // MIMO power save more.
2339 HT_CAPABILITY_IE HTCapability;
2341 BOOLEAN bAutoTxRateSwitch;
2343 UCHAR RateLen;
2344 struct _MAC_TABLE_ENTRY *pNext;
2345 USHORT TxSeq[NUM_OF_TID];
2346 USHORT NonQosDataSeq;
2348 RSSI_SAMPLE RssiSample;
2350 UINT32 TXMCSExpected[16];
2351 UINT32 TXMCSSuccessful[16];
2352 UINT32 TXMCSFailed[16];
2353 UINT32 TXMCSAutoFallBack[16][16];
2354 #ifdef RT2870
2355 ULONG LastBeaconRxTime;
2356 #endif
2357 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2359 typedef struct _MAC_TABLE {
2360 USHORT Size;
2361 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2362 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2363 QUEUE_HEADER McastPsQueue;
2364 ULONG PsQIdleCount;
2365 BOOLEAN fAnyStationInPsm;
2366 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2367 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2368 #ifdef RT2870
2369 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2370 #endif
2371 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2372 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2373 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2374 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2375 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2376 } MAC_TABLE, *PMAC_TABLE;
2378 #define IS_HT_STA(_pMacEntry) \
2379 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2381 #define IS_HT_RATE(_pMacEntry) \
2382 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2384 #define PEER_IS_HT_RATE(_pMacEntry) \
2385 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2387 typedef struct _WDS_ENTRY {
2388 BOOLEAN Valid;
2389 UCHAR Addr[MAC_ADDR_LEN];
2390 ULONG NoDataIdleCount;
2391 struct _WDS_ENTRY *pNext;
2392 } WDS_ENTRY, *PWDS_ENTRY;
2394 typedef struct _WDS_TABLE_ENTRY {
2395 USHORT Size;
2396 UCHAR WdsAddr[MAC_ADDR_LEN];
2397 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2398 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2399 UCHAR MaxSupportedRate;
2400 UCHAR CurrTxRate;
2401 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2402 USHORT OneSecTxOkCount;
2403 USHORT OneSecTxRetryOkCount;
2404 USHORT OneSecTxFailCount;
2405 ULONG CurrTxRateStableTime; // # of second in current TX rate
2406 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2407 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2409 typedef struct _RT_802_11_WDS_ENTRY {
2410 PNET_DEV dev;
2411 UCHAR Valid;
2412 UCHAR PhyMode;
2413 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2414 UCHAR MacTabMatchWCID; // ASIC
2415 NDIS_802_11_WEP_STATUS WepStatus;
2416 UCHAR KeyIdx;
2417 CIPHER_KEY WdsKey;
2418 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2419 RT_HT_PHY_INFO DesiredHtPhyInfo;
2420 BOOLEAN bAutoTxRateSwitch;
2421 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2422 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2424 typedef struct _WDS_TABLE {
2425 UCHAR Mode;
2426 ULONG Size;
2427 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2428 } WDS_TABLE, *PWDS_TABLE;
2430 typedef struct _APCLI_STRUCT {
2431 PNET_DEV dev;
2432 #ifdef RTL865X_SOC
2433 unsigned int mylinkid;
2434 #endif
2435 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2436 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2437 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2438 UCHAR SsidLen;
2439 CHAR Ssid[MAX_LEN_OF_SSID];
2441 UCHAR CfgSsidLen;
2442 CHAR CfgSsid[MAX_LEN_OF_SSID];
2443 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2444 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2446 ULONG ApCliRcvBeaconTime;
2448 ULONG CtrlCurrState;
2449 ULONG SyncCurrState;
2450 ULONG AuthCurrState;
2451 ULONG AssocCurrState;
2452 ULONG WpaPskCurrState;
2454 USHORT AuthReqCnt;
2455 USHORT AssocReqCnt;
2457 ULONG ClientStatusFlags;
2458 UCHAR MpduDensity;
2460 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2461 NDIS_802_11_WEP_STATUS WepStatus;
2463 // Add to support different cipher suite for WPA2/WPA mode
2464 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2465 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2466 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2467 USHORT RsnCapability;
2469 UCHAR PSK[100]; // reserve PSK key material
2470 UCHAR PSKLen;
2471 UCHAR PMK[32]; // WPA PSK mode PMK
2472 UCHAR GTK[32]; // GTK from authenticator
2474 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2475 UCHAR DefaultKeyId;
2477 // store RSN_IE built by driver
2478 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2479 UCHAR RSNIE_Len;
2481 // For WPA countermeasures
2482 ULONG LastMicErrorTime; // record last MIC error time
2483 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2485 // For WPA-PSK supplicant state
2486 UCHAR SNonce[32]; // SNonce for WPA-PSK
2487 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2489 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2490 RT_HT_PHY_INFO DesiredHtPhyInfo;
2491 BOOLEAN bAutoTxRateSwitch;
2492 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2493 } APCLI_STRUCT, *PAPCLI_STRUCT;
2495 // ----------- end of AP ----------------------------
2497 struct wificonf
2499 BOOLEAN bShortGI;
2500 BOOLEAN bGreenField;
2506 typedef struct _INF_PCI_CONFIG
2508 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2509 }INF_PCI_CONFIG;
2511 typedef struct _INF_USB_CONFIG
2513 UINT BulkInEpAddr; // bulk-in endpoint address
2514 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2516 }INF_USB_CONFIG;
2521 // The miniport adapter structure
2523 typedef struct _RTMP_ADAPTER
2525 PVOID OS_Cookie; // save specific structure relative to OS
2526 PNET_DEV net_dev;
2527 ULONG VirtualIfCnt;
2529 #ifdef RT2860
2530 USHORT LnkCtrlBitMask;
2531 USHORT RLnkCtrlConfiguration;
2532 USHORT RLnkCtrlOffset;
2533 USHORT HostLnkCtrlConfiguration;
2534 USHORT HostLnkCtrlOffset;
2535 USHORT PCIePowerSaveLevel;
2536 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2537 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2538 USHORT ThisTbttNumToNextWakeUp;
2539 ULONG SameRxByteCount;
2542 /*****************************************************************************************/
2543 /* PCI related parameters */
2544 /*****************************************************************************************/
2545 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2547 UINT int_enable_reg;
2548 UINT int_disable_mask;
2549 UINT int_pending;
2552 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2553 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2554 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2555 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2556 #endif
2558 NDIS_SPIN_LOCK irq_lock;
2559 UCHAR irq_disabled;
2561 #ifdef RT2870
2562 /*****************************************************************************************/
2563 /* USB related parameters */
2564 /*****************************************************************************************/
2565 struct usb_config_descriptor *config;
2566 UINT BulkInEpAddr; // bulk-in endpoint address
2567 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2569 UINT NumberOfPipes;
2570 USHORT BulkOutMaxPacketSize;
2571 USHORT BulkInMaxPacketSize;
2573 //======Control Flags
2574 LONG PendingIoCount;
2575 ULONG BulkFlags;
2576 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2579 //======Timer Thread
2580 RT2870_TIMER_QUEUE TimerQ;
2581 NDIS_SPIN_LOCK TimerQLock;
2584 //======Cmd Thread
2585 CmdQ CmdQ;
2586 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2588 BOOLEAN TimerFunc_kill;
2589 BOOLEAN mlme_kill;
2592 //======Semaphores (event)
2593 struct semaphore mlme_semaphore; /* to sleep thread on */
2594 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2595 struct semaphore RTUSBTimer_semaphore;
2596 struct completion TimerQComplete;
2597 struct completion mlmeComplete;
2598 struct completion CmdQComplete;
2599 wait_queue_head_t *wait;
2600 #endif // RT2870 //
2603 /*****************************************************************************************/
2604 /* Both PCI/USB related parameters */
2605 /*****************************************************************************************/
2608 /*****************************************************************************************/
2609 /* Tx related parameters */
2610 /*****************************************************************************************/
2611 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2612 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2614 #ifdef RT2870
2615 // Data related context and AC specified, 4 AC supported
2616 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2617 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2619 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2620 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2622 // 4 sets of Bulk Out index and pending flag
2623 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2625 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2626 UCHAR bulkResetPipeid;
2627 BOOLEAN MgmtBulkPending;
2628 ULONG bulkResetReq[6];
2629 #endif // RT2870 //
2631 // resource for software backlog queues
2632 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2633 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2635 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2636 RTMP_MGMT_RING MgmtRing;
2637 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2640 /*****************************************************************************************/
2641 /* Rx related parameters */
2642 /*****************************************************************************************/
2643 #ifdef RT2860
2644 RTMP_RX_RING RxRing;
2645 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2646 #endif
2647 #ifdef RT2870
2648 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2649 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2650 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2651 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2652 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2653 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2654 ULONG TransferBufferLength; // current length of the packet buffer
2655 ULONG ReadPosition; // current read position in a packet buffer
2656 #endif // RT2870 //
2659 /*****************************************************************************************/
2660 /* ASIC related parameters */
2661 /*****************************************************************************************/
2662 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2664 // ---------------------------
2665 // E2PROM
2666 // ---------------------------
2667 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2668 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2669 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2670 #ifdef RT30xx
2671 BOOLEAN EepromAccess;
2672 #endif
2673 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2675 // ---------------------------
2676 // BBP Control
2677 // ---------------------------
2678 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2679 UCHAR BbpRssiToDbmDelta;
2680 BBP_R66_TUNING BbpTuning;
2682 // ----------------------------
2683 // RFIC control
2684 // ----------------------------
2685 UCHAR RfIcType; // RFIC_xxx
2686 ULONG RfFreqOffset; // Frequency offset for channel switching
2687 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2689 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2690 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2692 // This soft Rx Antenna Diversity mechanism is used only when user set
2693 // RX Antenna = DIVERSITY ON
2694 SOFT_RX_ANT_DIVERSITY RxAnt;
2696 UCHAR RFProgSeq;
2697 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2698 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2699 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2700 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2702 UCHAR ChannelListNum; // number of channel in ChannelList[]
2703 UCHAR Bbp94;
2704 BOOLEAN BbpForCCK;
2705 ULONG Tx20MPwrCfgABand[5];
2706 ULONG Tx20MPwrCfgGBand[5];
2707 ULONG Tx40MPwrCfgABand[5];
2708 ULONG Tx40MPwrCfgGBand[5];
2710 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2711 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2712 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2713 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2714 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2715 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2717 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2718 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2719 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2720 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2721 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2722 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2724 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2725 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2726 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2727 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2728 //---
2730 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2731 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2732 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2733 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2734 //---
2736 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2737 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2738 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2739 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2741 // ----------------------------
2742 // LED control
2743 // ----------------------------
2744 MCU_LEDCS_STRUC LedCntl;
2745 USHORT Led1; // read from EEPROM 0x3c
2746 USHORT Led2; // EEPROM 0x3e
2747 USHORT Led3; // EEPROM 0x40
2748 UCHAR LedIndicatorStregth;
2749 UCHAR RssiSingalstrengthOffet;
2750 BOOLEAN bLedOnScanning;
2751 UCHAR LedStatus;
2753 /*****************************************************************************************/
2754 /* 802.11 related parameters */
2755 /*****************************************************************************************/
2756 // outgoing BEACON frame buffer and corresponding TXD
2757 TXWI_STRUC BeaconTxWI;
2758 PUCHAR BeaconBuf;
2759 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2761 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2762 PSPOLL_FRAME PsPollFrame;
2763 HEADER_802_11 NullFrame;
2765 #ifdef RT2870
2766 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2767 TX_CONTEXT NullContext;
2768 TX_CONTEXT PsPollContext;
2769 TX_CONTEXT RTSContext;
2770 #endif // RT2870 //
2774 //=========AP===========
2777 //=======STA===========
2778 /* Modified by Wu Xi-Kun 4/21/2006 */
2779 // -----------------------------------------------
2780 // STA specific configuration & operation status
2781 // used only when pAd->OpMode == OPMODE_STA
2782 // -----------------------------------------------
2783 STA_ADMIN_CONFIG StaCfg; // user desired settings
2784 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2785 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2786 NDIS_MEDIA_STATE PreMediaState;
2788 //=======Common===========
2789 // OP mode: either AP or STA
2790 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2792 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2795 // configuration: read from Registry & E2PROM
2796 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2797 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2798 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2800 // ------------------------------------------------------
2801 // common configuration to both OPMODE_STA and OPMODE_AP
2802 // ------------------------------------------------------
2803 COMMON_CONFIG CommonCfg;
2804 MLME_STRUCT Mlme;
2806 // AP needs those vaiables for site survey feature.
2807 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2808 BSS_TABLE ScanTab; // store the latest SCAN result
2810 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2811 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2812 NDIS_SPIN_LOCK MacTabLock;
2814 BA_TABLE BATable;
2816 NDIS_SPIN_LOCK BATabLock;
2817 RALINK_TIMER_STRUCT RECBATimer;
2819 // encryption/decryption KEY tables
2820 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2822 // RX re-assembly buffer for fragmentation
2823 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2825 // various Counters
2826 COUNTER_802_3 Counters8023; // 802.3 counters
2827 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2828 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2829 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2830 PRIVATE_STRUC PrivateInfo; // Private information & counters
2832 // flags, see fRTMP_ADAPTER_xxx flags
2833 ULONG Flags; // Represent current device status
2834 #ifdef RT2860
2835 ULONG PSFlags; // Power Save operation flag.
2836 #endif
2838 // current TX sequence #
2839 USHORT Sequence;
2841 // Control disconnect / connect event generation
2842 //+++Didn't used anymore
2843 ULONG LinkDownTime;
2844 //---
2845 ULONG LastRxRate;
2846 ULONG LastTxRate;
2847 //+++Used only for Station
2848 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2849 //---
2851 ULONG ExtraInfo; // Extra information for displaying status
2852 ULONG SystemErrorBitmap; // b0: E2PROM version error
2854 //+++Didn't used anymore
2855 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2856 //---
2858 // ---------------------------
2859 // System event log
2860 // ---------------------------
2861 RT_802_11_EVENT_TABLE EventTab;
2864 BOOLEAN HTCEnable;
2866 /*****************************************************************************************/
2867 /* Statistic related parameters */
2868 /*****************************************************************************************/
2869 #ifdef RT2870
2870 ULONG BulkOutDataOneSecCount;
2871 ULONG BulkInDataOneSecCount;
2872 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2873 ULONG watchDogRxCnt;
2874 ULONG watchDogRxOverFlowCnt;
2875 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2876 #endif // RT2870 //
2878 BOOLEAN bUpdateBcnCntDone;
2879 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2880 // ----------------------------
2881 // DEBUG paramerts
2882 // ----------------------------
2883 BOOLEAN bBanAllBaSetup;
2884 BOOLEAN bPromiscuous;
2886 // ----------------------------
2887 // rt2860c emulation-use Parameters
2888 // ----------------------------
2889 ULONG rtsaccu[30];
2890 ULONG ctsaccu[30];
2891 ULONG cfendaccu[30];
2892 ULONG bacontent[16];
2893 ULONG rxint[RX_RING_SIZE+1];
2894 UCHAR rcvba[60];
2895 BOOLEAN bLinkAdapt;
2896 BOOLEAN bForcePrintTX;
2897 BOOLEAN bForcePrintRX;
2898 BOOLEAN bDisablescanning; //defined in RT2870 USB
2899 BOOLEAN bStaFifoTest;
2900 BOOLEAN bProtectionTest;
2901 BOOLEAN bHCCATest;
2902 BOOLEAN bGenOneHCCA;
2903 BOOLEAN bBroadComHT;
2904 //+++Following add from RT2870 USB.
2905 ULONG BulkOutReq;
2906 ULONG BulkOutComplete;
2907 ULONG BulkOutCompleteOther;
2908 ULONG BulkOutCompleteCancel; // seems not use now?
2909 ULONG BulkInReq;
2910 ULONG BulkInComplete;
2911 ULONG BulkInCompleteFail;
2912 //---
2914 struct wificonf WIFItestbed;
2916 struct reordering_mpdu_pool mpdu_blk_pool;
2918 ULONG OneSecondnonBEpackets; // record non BE packets per second
2920 struct iw_statistics iw_stats;
2922 struct net_device_stats stats;
2924 ULONG TbttTickCount;
2925 #ifdef PCI_MSI_SUPPORT
2926 BOOLEAN HaveMsi;
2927 #endif // PCI_MSI_SUPPORT //
2930 UCHAR is_on;
2932 #define TIME_BASE (1000000/OS_HZ)
2933 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2934 UCHAR flg_be_adjust;
2935 ULONG be_adjust_last_time;
2939 UINT8 PM_FlgSuspend;
2941 #ifdef RT2870
2942 BOOLEAN bUseEfuse;
2943 #endif
2944 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2947 // Cisco IAPP format
2949 typedef struct _CISCO_IAPP_CONTENT_
2951 USHORT Length; //IAPP Length
2952 UCHAR MessageType; //IAPP type
2953 UCHAR FunctionCode; //IAPP function type
2954 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2955 UCHAR SourceMAC[MAC_ADDR_LEN];
2956 USHORT Tag; //Tag(element IE) - Adjacent AP report
2957 USHORT TagLength; //Length of element not including 4 byte header
2958 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2959 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2960 USHORT Channel;
2961 USHORT SsidLen;
2962 UCHAR Ssid[MAX_LEN_OF_SSID];
2963 USHORT Seconds; //Seconds that the client has been disassociated.
2964 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2966 #define DELAYINTMASK 0x0003fffb
2967 #define INTMASK 0x0003fffb
2968 #define IndMask 0x0003fffc
2969 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2970 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2971 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2972 #define TxCoherent 0x00020000 // tx coherent
2973 #define RxCoherent 0x00010000 // rx coherent
2974 #define McuCommand 0x00000200 // mcu
2975 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2976 #define TBTTInt 0x00000800 // TBTT interrupt
2977 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2978 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2979 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2982 typedef struct _RX_BLK_
2984 RT28XX_RXD_STRUC RxD;
2985 PRXWI_STRUC pRxWI;
2986 PHEADER_802_11 pHeader;
2987 PNDIS_PACKET pRxPacket;
2988 UCHAR *pData;
2989 USHORT DataSize;
2990 USHORT Flags;
2991 UCHAR UserPriority; // for calculate TKIP MIC using
2992 } RX_BLK;
2995 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2996 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2997 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3000 #define fRX_WDS 0x0001
3001 #define fRX_AMSDU 0x0002
3002 #define fRX_ARALINK 0x0004
3003 #define fRX_HTC 0x0008
3004 #define fRX_PAD 0x0010
3005 #define fRX_AMPDU 0x0020
3006 #define fRX_QOS 0x0040
3007 #define fRX_INFRA 0x0080
3008 #define fRX_EAP 0x0100
3009 #define fRX_MESH 0x0200
3010 #define fRX_APCLI 0x0400
3011 #define fRX_DLS 0x0800
3012 #define fRX_WPI 0x1000
3014 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3015 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3016 #define LENGTH_ARALINK_HEADER_FIELD 2
3018 #define TX_UNKOWN_FRAME 0x00
3019 #define TX_MCAST_FRAME 0x01
3020 #define TX_LEGACY_FRAME 0x02
3021 #define TX_AMPDU_FRAME 0x04
3022 #define TX_AMSDU_FRAME 0x08
3023 #define TX_RALINK_FRAME 0x10
3024 #define TX_FRAG_FRAME 0x20
3027 // Currently the sizeof(TX_BLK) is 148 bytes.
3028 typedef struct _TX_BLK_
3030 UCHAR QueIdx;
3031 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3032 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3033 USHORT TotalFragNum; // Total frame fragments required in one batch
3034 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3036 QUEUE_HEADER TxPacketList;
3037 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3038 HTTRANSMIT_SETTING *pTransmit;
3040 // Following structure used for the characteristics of a specific packet.
3041 PNDIS_PACKET pPacket;
3042 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3043 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3044 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3045 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3046 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3047 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3048 UCHAR HdrPadLen; // recording Header Padding Length;
3049 UCHAR apidx; // The interface associated to this packet
3050 UCHAR Wcid; // The MAC entry associated to this packet
3051 UCHAR UserPriority; // priority class of packet
3052 UCHAR FrameGap; // what kind of IFS this packet use
3053 UCHAR MpduReqNum; // number of fragments of this frame
3054 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3055 UCHAR CipherAlg; // cipher alogrithm
3056 PCIPHER_KEY pKey;
3060 USHORT Flags; //See following definitions for detail.
3062 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3063 ULONG Priv; // Hardware specific value saved in here.
3064 } TX_BLK, *PTX_BLK;
3067 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3068 #define fTX_bAckRequired 0x0002 // the packet need ack response
3069 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3070 #define fTX_bHTRate 0x0008 // allow to use HT rate
3071 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3072 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3073 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3074 #define fTX_bWMM 0x0080 // QOS Data
3076 #define fTX_bClearEAPFrame 0x0100
3078 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3079 do { \
3080 if (value) \
3081 (_pTxBlk->Flags |= _flag) \
3082 else \
3083 (_pTxBlk->Flags &= ~(_flag)) \
3084 }while(0)
3086 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3087 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3088 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3094 //------------------------------------------------------------------------------------------
3096 #ifdef RT2860
3098 // Enable & Disable NIC interrupt via writing interrupt mask register
3099 // Since it use ADAPTER structure, it have to be put after structure definition.
3101 __inline VOID NICDisableInterrupt(
3102 IN PRTMP_ADAPTER pAd)
3104 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
3105 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3106 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3109 __inline VOID NICEnableInterrupt(
3110 IN PRTMP_ADAPTER pAd)
3113 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3114 // To prevent System hang, we should enalbe the interrupt when
3115 // ASIC is already Wake Up.
3117 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3118 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3119 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3121 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3123 //else
3124 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3126 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3127 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3130 static inline VOID ConvertMulticastIP2MAC(
3131 IN PUCHAR pIpAddr,
3132 IN PUCHAR *ppMacAddr,
3133 IN UINT16 ProtoType)
3135 if (pIpAddr == NULL)
3136 return;
3138 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3139 return;
3141 switch (ProtoType)
3143 case ETH_P_IPV6:
3144 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3145 *(*ppMacAddr) = 0x33;
3146 *(*ppMacAddr + 1) = 0x33;
3147 *(*ppMacAddr + 2) = pIpAddr[12];
3148 *(*ppMacAddr + 3) = pIpAddr[13];
3149 *(*ppMacAddr + 4) = pIpAddr[14];
3150 *(*ppMacAddr + 5) = pIpAddr[15];
3151 break;
3153 case ETH_P_IP:
3154 default:
3155 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3156 *(*ppMacAddr) = 0x01;
3157 *(*ppMacAddr + 1) = 0x00;
3158 *(*ppMacAddr + 2) = 0x5e;
3159 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3160 *(*ppMacAddr + 4) = pIpAddr[2];
3161 *(*ppMacAddr + 5) = pIpAddr[3];
3162 break;
3165 return;
3167 #endif /* RT2860 */
3170 // Private routines in rtmp_init.c
3172 NDIS_STATUS RTMPAllocAdapterBlock(
3173 IN PVOID handle,
3174 OUT PRTMP_ADAPTER *ppAdapter
3177 NDIS_STATUS RTMPAllocTxRxRingMemory(
3178 IN PRTMP_ADAPTER pAd
3181 NDIS_STATUS RTMPReadParametersHook(
3182 IN PRTMP_ADAPTER pAd
3185 VOID RTMPFreeAdapter(
3186 IN PRTMP_ADAPTER pAd
3189 NDIS_STATUS NICReadRegParameters(
3190 IN PRTMP_ADAPTER pAd,
3191 IN NDIS_HANDLE WrapperConfigurationContext
3194 #ifdef RT2870
3195 VOID NICInitRT30xxRFRegisters(
3196 IN PRTMP_ADAPTER pAd);
3197 #endif // RT2870 //
3199 VOID NICReadEEPROMParameters(
3200 IN PRTMP_ADAPTER pAd,
3201 IN PUCHAR mac_addr);
3203 VOID NICInitAsicFromEEPROM(
3204 IN PRTMP_ADAPTER pAd);
3206 VOID NICInitTxRxRingAndBacklogQueue(
3207 IN PRTMP_ADAPTER pAd);
3209 NDIS_STATUS NICInitializeAdapter(
3210 IN PRTMP_ADAPTER pAd,
3211 IN BOOLEAN bHardReset);
3213 NDIS_STATUS NICInitializeAsic(
3214 IN PRTMP_ADAPTER pAd,
3215 IN BOOLEAN bHardReset);
3216 #ifdef RT2860
3217 VOID NICRestoreBBPValue(
3218 IN PRTMP_ADAPTER pAd);
3219 #endif
3220 VOID NICIssueReset(
3221 IN PRTMP_ADAPTER pAd);
3223 VOID RTMPRingCleanUp(
3224 IN PRTMP_ADAPTER pAd,
3225 IN UCHAR RingType);
3227 VOID UserCfgInit(
3228 IN PRTMP_ADAPTER pAd);
3230 VOID NICResetFromError(
3231 IN PRTMP_ADAPTER pAd);
3233 VOID NICEraseFirmware(
3234 IN PRTMP_ADAPTER pAd);
3236 NDIS_STATUS NICLoadFirmware(
3237 IN PRTMP_ADAPTER pAd);
3239 NDIS_STATUS NICLoadRateSwitchingParams(
3240 IN PRTMP_ADAPTER pAd);
3242 BOOLEAN NICCheckForHang(
3243 IN PRTMP_ADAPTER pAd);
3245 VOID NICUpdateFifoStaCounters(
3246 IN PRTMP_ADAPTER pAd);
3248 VOID NICUpdateRawCounters(
3249 IN PRTMP_ADAPTER pAd);
3251 ULONG RTMPNotAllZero(
3252 IN PVOID pSrc1,
3253 IN ULONG Length);
3255 VOID RTMPZeroMemory(
3256 IN PVOID pSrc,
3257 IN ULONG Length);
3259 ULONG RTMPCompareMemory(
3260 IN PVOID pSrc1,
3261 IN PVOID pSrc2,
3262 IN ULONG Length);
3264 VOID RTMPMoveMemory(
3265 OUT PVOID pDest,
3266 IN PVOID pSrc,
3267 IN ULONG Length);
3269 VOID AtoH(
3270 char *src,
3271 UCHAR *dest,
3272 int destlen);
3274 UCHAR BtoH(
3275 char ch);
3277 VOID RTMPPatchMacBbpBug(
3278 IN PRTMP_ADAPTER pAd);
3280 VOID RTMPInitTimer(
3281 IN PRTMP_ADAPTER pAd,
3282 IN PRALINK_TIMER_STRUCT pTimer,
3283 IN PVOID pTimerFunc,
3284 IN PVOID pData,
3285 IN BOOLEAN Repeat);
3287 VOID RTMPSetTimer(
3288 IN PRALINK_TIMER_STRUCT pTimer,
3289 IN ULONG Value);
3292 VOID RTMPModTimer(
3293 IN PRALINK_TIMER_STRUCT pTimer,
3294 IN ULONG Value);
3296 VOID RTMPCancelTimer(
3297 IN PRALINK_TIMER_STRUCT pTimer,
3298 OUT BOOLEAN *pCancelled);
3300 VOID RTMPSetLED(
3301 IN PRTMP_ADAPTER pAd,
3302 IN UCHAR Status);
3304 VOID RTMPSetSignalLED(
3305 IN PRTMP_ADAPTER pAd,
3306 IN NDIS_802_11_RSSI Dbm);
3308 VOID RTMPEnableRxTx(
3309 IN PRTMP_ADAPTER pAd);
3312 // prototype in action.c
3314 VOID ActionStateMachineInit(
3315 IN PRTMP_ADAPTER pAd,
3316 IN STATE_MACHINE *S,
3317 OUT STATE_MACHINE_FUNC Trans[]);
3319 VOID MlmeADDBAAction(
3320 IN PRTMP_ADAPTER pAd,
3321 IN MLME_QUEUE_ELEM *Elem);
3323 VOID MlmeDELBAAction(
3324 IN PRTMP_ADAPTER pAd,
3325 IN MLME_QUEUE_ELEM *Elem);
3327 VOID MlmeDLSAction(
3328 IN PRTMP_ADAPTER pAd,
3329 IN MLME_QUEUE_ELEM *Elem);
3331 VOID MlmeInvalidAction(
3332 IN PRTMP_ADAPTER pAd,
3333 IN MLME_QUEUE_ELEM *Elem);
3335 VOID MlmeQOSAction(
3336 IN PRTMP_ADAPTER pAd,
3337 IN MLME_QUEUE_ELEM *Elem);
3339 VOID PeerAddBAReqAction(
3340 IN PRTMP_ADAPTER pAd,
3341 IN MLME_QUEUE_ELEM *Elem);
3343 VOID PeerAddBARspAction(
3344 IN PRTMP_ADAPTER pAd,
3345 IN MLME_QUEUE_ELEM *Elem);
3347 VOID PeerDelBAAction(
3348 IN PRTMP_ADAPTER pAd,
3349 IN MLME_QUEUE_ELEM *Elem);
3351 VOID PeerBAAction(
3352 IN PRTMP_ADAPTER pAd,
3353 IN MLME_QUEUE_ELEM *Elem);
3355 VOID SendPSMPAction(
3356 IN PRTMP_ADAPTER pAd,
3357 IN UCHAR Wcid,
3358 IN UCHAR Psmp);
3360 VOID PeerRMAction(
3361 IN PRTMP_ADAPTER pAd,
3362 IN MLME_QUEUE_ELEM *Elem);
3364 VOID PeerPublicAction(
3365 IN PRTMP_ADAPTER pAd,
3366 IN MLME_QUEUE_ELEM *Elem);
3368 VOID PeerHTAction(
3369 IN PRTMP_ADAPTER pAd,
3370 IN MLME_QUEUE_ELEM *Elem);
3372 VOID PeerQOSAction(
3373 IN PRTMP_ADAPTER pAd,
3374 IN MLME_QUEUE_ELEM *Elem);
3376 VOID RECBATimerTimeout(
3377 IN PVOID SystemSpecific1,
3378 IN PVOID FunctionContext,
3379 IN PVOID SystemSpecific2,
3380 IN PVOID SystemSpecific3);
3382 VOID ORIBATimerTimeout(
3383 IN PRTMP_ADAPTER pAd);
3385 VOID SendRefreshBAR(
3386 IN PRTMP_ADAPTER pAd,
3387 IN MAC_TABLE_ENTRY *pEntry);
3389 VOID ActHeaderInit(
3390 IN PRTMP_ADAPTER pAd,
3391 IN OUT PHEADER_802_11 pHdr80211,
3392 IN PUCHAR Addr1,
3393 IN PUCHAR Addr2,
3394 IN PUCHAR Addr3);
3396 VOID BarHeaderInit(
3397 IN PRTMP_ADAPTER pAd,
3398 IN OUT PFRAME_BAR pCntlBar,
3399 IN PUCHAR pDA,
3400 IN PUCHAR pSA);
3402 VOID InsertActField(
3403 IN PRTMP_ADAPTER pAd,
3404 OUT PUCHAR pFrameBuf,
3405 OUT PULONG pFrameLen,
3406 IN UINT8 Category,
3407 IN UINT8 ActCode);
3409 BOOLEAN CntlEnqueueForRecv(
3410 IN PRTMP_ADAPTER pAd,
3411 IN ULONG Wcid,
3412 IN ULONG MsgLen,
3413 IN PFRAME_BA_REQ pMsg);
3416 // Private routines in rtmp_data.c
3418 BOOLEAN RTMPHandleRxDoneInterrupt(
3419 IN PRTMP_ADAPTER pAd);
3421 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3422 IN PRTMP_ADAPTER pAd,
3423 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3425 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3426 IN PRTMP_ADAPTER pAd);
3428 VOID RTMPHandleTBTTInterrupt(
3429 IN PRTMP_ADAPTER pAd);
3431 VOID RTMPHandlePreTBTTInterrupt(
3432 IN PRTMP_ADAPTER pAd);
3434 void RTMPHandleTwakeupInterrupt(
3435 IN PRTMP_ADAPTER pAd);
3437 VOID RTMPHandleRxCoherentInterrupt(
3438 IN PRTMP_ADAPTER pAd);
3440 BOOLEAN TxFrameIsAggregatible(
3441 IN PRTMP_ADAPTER pAd,
3442 IN PUCHAR pPrevAddr1,
3443 IN PUCHAR p8023hdr);
3445 BOOLEAN PeerIsAggreOn(
3446 IN PRTMP_ADAPTER pAd,
3447 IN ULONG TxRate,
3448 IN PMAC_TABLE_ENTRY pMacEntry);
3450 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3451 IN PNDIS_BUFFER pFirstBuffer,
3452 IN UCHAR DesiredOffset,
3453 OUT PUCHAR pByte0,
3454 OUT PUCHAR pByte1);
3456 NDIS_STATUS STASendPacket(
3457 IN PRTMP_ADAPTER pAd,
3458 IN PNDIS_PACKET pPacket);
3460 VOID STASendPackets(
3461 IN NDIS_HANDLE MiniportAdapterContext,
3462 IN PPNDIS_PACKET ppPacketArray,
3463 IN UINT NumberOfPackets);
3465 VOID RTMPDeQueuePacket(
3466 IN PRTMP_ADAPTER pAd,
3467 IN BOOLEAN bIntContext,
3468 IN UCHAR QueIdx,
3469 IN UCHAR Max_Tx_Packets);
3471 NDIS_STATUS RTMPHardTransmit(
3472 IN PRTMP_ADAPTER pAd,
3473 IN PNDIS_PACKET pPacket,
3474 IN UCHAR QueIdx,
3475 OUT PULONG pFreeTXDLeft);
3477 NDIS_STATUS STAHardTransmit(
3478 IN PRTMP_ADAPTER pAd,
3479 IN TX_BLK *pTxBlk,
3480 IN UCHAR QueIdx);
3482 VOID STARxEAPOLFrameIndicate(
3483 IN PRTMP_ADAPTER pAd,
3484 IN MAC_TABLE_ENTRY *pEntry,
3485 IN RX_BLK *pRxBlk,
3486 IN UCHAR FromWhichBSSID);
3488 NDIS_STATUS RTMPFreeTXDRequest(
3489 IN PRTMP_ADAPTER pAd,
3490 IN UCHAR RingType,
3491 IN UCHAR NumberRequired,
3492 IN PUCHAR FreeNumberIs);
3494 NDIS_STATUS MlmeHardTransmit(
3495 IN PRTMP_ADAPTER pAd,
3496 IN UCHAR QueIdx,
3497 IN PNDIS_PACKET pPacket);
3499 NDIS_STATUS MlmeHardTransmitMgmtRing(
3500 IN PRTMP_ADAPTER pAd,
3501 IN UCHAR QueIdx,
3502 IN PNDIS_PACKET pPacket);
3504 NDIS_STATUS MlmeHardTransmitTxRing(
3505 IN PRTMP_ADAPTER pAd,
3506 IN UCHAR QueIdx,
3507 IN PNDIS_PACKET pPacket);
3509 USHORT RTMPCalcDuration(
3510 IN PRTMP_ADAPTER pAd,
3511 IN UCHAR Rate,
3512 IN ULONG Size);
3514 VOID RTMPWriteTxWI(
3515 IN PRTMP_ADAPTER pAd,
3516 IN PTXWI_STRUC pTxWI,
3517 IN BOOLEAN FRAG,
3518 IN BOOLEAN CFACK,
3519 IN BOOLEAN InsTimestamp,
3520 IN BOOLEAN AMPDU,
3521 IN BOOLEAN Ack,
3522 IN BOOLEAN NSeq, // HW new a sequence.
3523 IN UCHAR BASize,
3524 IN UCHAR WCID,
3525 IN ULONG Length,
3526 IN UCHAR PID,
3527 IN UCHAR TID,
3528 IN UCHAR TxRate,
3529 IN UCHAR Txopmode,
3530 IN BOOLEAN CfAck,
3531 IN HTTRANSMIT_SETTING *pTransmit);
3534 VOID RTMPWriteTxWI_Data(
3535 IN PRTMP_ADAPTER pAd,
3536 IN OUT PTXWI_STRUC pTxWI,
3537 IN TX_BLK *pTxBlk);
3540 VOID RTMPWriteTxWI_Cache(
3541 IN PRTMP_ADAPTER pAd,
3542 IN OUT PTXWI_STRUC pTxWI,
3543 IN TX_BLK *pTxBlk);
3545 VOID RTMPWriteTxDescriptor(
3546 IN PRTMP_ADAPTER pAd,
3547 IN PTXD_STRUC pTxD,
3548 IN BOOLEAN bWIV,
3549 IN UCHAR QSEL);
3551 VOID RTMPSuspendMsduTransmission(
3552 IN PRTMP_ADAPTER pAd);
3554 VOID RTMPResumeMsduTransmission(
3555 IN PRTMP_ADAPTER pAd);
3557 NDIS_STATUS MiniportMMRequest(
3558 IN PRTMP_ADAPTER pAd,
3559 IN UCHAR QueIdx,
3560 IN PUCHAR pData,
3561 IN UINT Length);
3563 VOID RTMPSendNullFrame(
3564 IN PRTMP_ADAPTER pAd,
3565 IN UCHAR TxRate,
3566 IN BOOLEAN bQosNull);
3568 VOID RTMPSendDisassociationFrame(
3569 IN PRTMP_ADAPTER pAd);
3571 VOID RTMPSendRTSFrame(
3572 IN PRTMP_ADAPTER pAd,
3573 IN PUCHAR pDA,
3574 IN unsigned int NextMpduSize,
3575 IN UCHAR TxRate,
3576 IN UCHAR RTSRate,
3577 IN USHORT AckDuration,
3578 IN UCHAR QueIdx,
3579 IN UCHAR FrameGap);
3581 PQUEUE_HEADER RTMPCheckTxSwQueue(
3582 IN PRTMP_ADAPTER pAd,
3583 OUT UCHAR *QueIdx);
3585 VOID RTMPReportMicError(
3586 IN PRTMP_ADAPTER pAd,
3587 IN PCIPHER_KEY pWpaKey);
3589 VOID WpaMicFailureReportFrame(
3590 IN PRTMP_ADAPTER pAd,
3591 IN MLME_QUEUE_ELEM *Elem);
3593 VOID WpaDisassocApAndBlockAssoc(
3594 IN PVOID SystemSpecific1,
3595 IN PVOID FunctionContext,
3596 IN PVOID SystemSpecific2,
3597 IN PVOID SystemSpecific3);
3599 NDIS_STATUS RTMPCloneNdisPacket(
3600 IN PRTMP_ADAPTER pAd,
3601 IN BOOLEAN pInsAMSDUHdr,
3602 IN PNDIS_PACKET pInPacket,
3603 OUT PNDIS_PACKET *ppOutPacket);
3605 NDIS_STATUS RTMPAllocateNdisPacket(
3606 IN PRTMP_ADAPTER pAd,
3607 IN PNDIS_PACKET *pPacket,
3608 IN PUCHAR pHeader,
3609 IN UINT HeaderLen,
3610 IN PUCHAR pData,
3611 IN UINT DataLen);
3613 VOID RTMPFreeNdisPacket(
3614 IN PRTMP_ADAPTER pAd,
3615 IN PNDIS_PACKET pPacket);
3617 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3618 IN PRTMP_ADAPTER pAd,
3619 IN UCHAR QueIdx);
3621 BOOLEAN RTMPCheckDHCPFrame(
3622 IN PRTMP_ADAPTER pAd,
3623 IN PNDIS_PACKET pPacket);
3626 BOOLEAN RTMPCheckEtherType(
3627 IN PRTMP_ADAPTER pAd,
3628 IN PNDIS_PACKET pPacket);
3632 // Private routines in rtmp_wep.c
3634 VOID RTMPInitWepEngine(
3635 IN PRTMP_ADAPTER pAd,
3636 IN PUCHAR pKey,
3637 IN UCHAR KeyId,
3638 IN UCHAR KeyLen,
3639 IN PUCHAR pDest);
3641 VOID RTMPEncryptData(
3642 IN PRTMP_ADAPTER pAd,
3643 IN PUCHAR pSrc,
3644 IN PUCHAR pDest,
3645 IN UINT Len);
3647 BOOLEAN RTMPSoftDecryptWEP(
3648 IN PRTMP_ADAPTER pAd,
3649 IN PUCHAR pData,
3650 IN ULONG DataByteCnt,
3651 IN PCIPHER_KEY pGroupKey);
3653 VOID RTMPSetICV(
3654 IN PRTMP_ADAPTER pAd,
3655 IN PUCHAR pDest);
3657 VOID ARCFOUR_INIT(
3658 IN PARCFOURCONTEXT Ctx,
3659 IN PUCHAR pKey,
3660 IN UINT KeyLen);
3662 UCHAR ARCFOUR_BYTE(
3663 IN PARCFOURCONTEXT Ctx);
3665 VOID ARCFOUR_DECRYPT(
3666 IN PARCFOURCONTEXT Ctx,
3667 IN PUCHAR pDest,
3668 IN PUCHAR pSrc,
3669 IN UINT Len);
3671 VOID ARCFOUR_ENCRYPT(
3672 IN PARCFOURCONTEXT Ctx,
3673 IN PUCHAR pDest,
3674 IN PUCHAR pSrc,
3675 IN UINT Len);
3677 VOID WPAARCFOUR_ENCRYPT(
3678 IN PARCFOURCONTEXT Ctx,
3679 IN PUCHAR pDest,
3680 IN PUCHAR pSrc,
3681 IN UINT Len);
3683 UINT RTMP_CALC_FCS32(
3684 IN UINT Fcs,
3685 IN PUCHAR Cp,
3686 IN INT Len);
3689 // MLME routines
3692 // Asic/RF/BBP related functions
3694 VOID AsicAdjustTxPower(
3695 IN PRTMP_ADAPTER pAd);
3697 VOID AsicUpdateProtect(
3698 IN PRTMP_ADAPTER pAd,
3699 IN USHORT OperaionMode,
3700 IN UCHAR SetMask,
3701 IN BOOLEAN bDisableBGProtect,
3702 IN BOOLEAN bNonGFExist);
3704 VOID AsicSwitchChannel(
3705 IN PRTMP_ADAPTER pAd,
3706 IN UCHAR Channel,
3707 IN BOOLEAN bScan);
3709 VOID AsicLockChannel(
3710 IN PRTMP_ADAPTER pAd,
3711 IN UCHAR Channel) ;
3713 VOID AsicRfTuningExec(
3714 IN PVOID SystemSpecific1,
3715 IN PVOID FunctionContext,
3716 IN PVOID SystemSpecific2,
3717 IN PVOID SystemSpecific3);
3719 VOID AsicSleepThenAutoWakeup(
3720 IN PRTMP_ADAPTER pAd,
3721 IN USHORT TbttNumToNextWakeUp);
3723 VOID AsicForceSleep(
3724 IN PRTMP_ADAPTER pAd);
3726 VOID AsicForceWakeup(
3727 IN PRTMP_ADAPTER pAd,
3728 #ifdef RT2860
3729 IN UCHAR Level);
3730 #endif
3731 #ifdef RT2870
3732 IN BOOLEAN bFromTx);
3733 #endif
3735 VOID AsicSetBssid(
3736 IN PRTMP_ADAPTER pAd,
3737 IN PUCHAR pBssid);
3739 VOID AsicSetMcastWC(
3740 IN PRTMP_ADAPTER pAd);
3742 VOID AsicDelWcidTab(
3743 IN PRTMP_ADAPTER pAd,
3744 IN UCHAR Wcid);
3746 VOID AsicEnableRDG(
3747 IN PRTMP_ADAPTER pAd);
3749 VOID AsicDisableRDG(
3750 IN PRTMP_ADAPTER pAd);
3752 VOID AsicDisableSync(
3753 IN PRTMP_ADAPTER pAd);
3755 VOID AsicEnableBssSync(
3756 IN PRTMP_ADAPTER pAd);
3758 VOID AsicEnableIbssSync(
3759 IN PRTMP_ADAPTER pAd);
3761 VOID AsicSetEdcaParm(
3762 IN PRTMP_ADAPTER pAd,
3763 IN PEDCA_PARM pEdcaParm);
3765 VOID AsicSetSlotTime(
3766 IN PRTMP_ADAPTER pAd,
3767 IN BOOLEAN bUseShortSlotTime);
3769 VOID AsicAddSharedKeyEntry(
3770 IN PRTMP_ADAPTER pAd,
3771 IN UCHAR BssIndex,
3772 IN UCHAR KeyIdx,
3773 IN UCHAR CipherAlg,
3774 IN PUCHAR pKey,
3775 IN PUCHAR pTxMic,
3776 IN PUCHAR pRxMic);
3778 VOID AsicRemoveSharedKeyEntry(
3779 IN PRTMP_ADAPTER pAd,
3780 IN UCHAR BssIndex,
3781 IN UCHAR KeyIdx);
3783 VOID AsicUpdateWCIDAttribute(
3784 IN PRTMP_ADAPTER pAd,
3785 IN USHORT WCID,
3786 IN UCHAR BssIndex,
3787 IN UCHAR CipherAlg,
3788 IN BOOLEAN bUsePairewiseKeyTable);
3790 VOID AsicUpdateWCIDIVEIV(
3791 IN PRTMP_ADAPTER pAd,
3792 IN USHORT WCID,
3793 IN ULONG uIV,
3794 IN ULONG uEIV);
3796 VOID AsicUpdateRxWCIDTable(
3797 IN PRTMP_ADAPTER pAd,
3798 IN USHORT WCID,
3799 IN PUCHAR pAddr);
3801 VOID AsicAddKeyEntry(
3802 IN PRTMP_ADAPTER pAd,
3803 IN USHORT WCID,
3804 IN UCHAR BssIndex,
3805 IN UCHAR KeyIdx,
3806 IN PCIPHER_KEY pCipherKey,
3807 IN BOOLEAN bUsePairewiseKeyTable,
3808 IN BOOLEAN bTxKey);
3810 VOID AsicAddPairwiseKeyEntry(
3811 IN PRTMP_ADAPTER pAd,
3812 IN PUCHAR pAddr,
3813 IN UCHAR WCID,
3814 IN CIPHER_KEY *pCipherKey);
3816 VOID AsicRemovePairwiseKeyEntry(
3817 IN PRTMP_ADAPTER pAd,
3818 IN UCHAR BssIdx,
3819 IN UCHAR Wcid);
3821 BOOLEAN AsicSendCommandToMcu(
3822 IN PRTMP_ADAPTER pAd,
3823 IN UCHAR Command,
3824 IN UCHAR Token,
3825 IN UCHAR Arg0,
3826 IN UCHAR Arg1);
3827 #ifdef RT2860
3828 BOOLEAN AsicCheckCommanOk(
3829 IN PRTMP_ADAPTER pAd,
3830 IN UCHAR Command);
3831 #endif
3832 VOID MacAddrRandomBssid(
3833 IN PRTMP_ADAPTER pAd,
3834 OUT PUCHAR pAddr);
3836 VOID MgtMacHeaderInit(
3837 IN PRTMP_ADAPTER pAd,
3838 IN OUT PHEADER_802_11 pHdr80211,
3839 IN UCHAR SubType,
3840 IN UCHAR ToDs,
3841 IN PUCHAR pDA,
3842 IN PUCHAR pBssid);
3844 VOID MlmeRadioOff(
3845 IN PRTMP_ADAPTER pAd);
3847 VOID MlmeRadioOn(
3848 IN PRTMP_ADAPTER pAd);
3851 VOID BssTableInit(
3852 IN BSS_TABLE *Tab);
3854 VOID BATableInit(
3855 IN PRTMP_ADAPTER pAd,
3856 IN BA_TABLE *Tab);
3858 ULONG BssTableSearch(
3859 IN BSS_TABLE *Tab,
3860 IN PUCHAR pBssid,
3861 IN UCHAR Channel);
3863 ULONG BssSsidTableSearch(
3864 IN BSS_TABLE *Tab,
3865 IN PUCHAR pBssid,
3866 IN PUCHAR pSsid,
3867 IN UCHAR SsidLen,
3868 IN UCHAR Channel);
3870 ULONG BssTableSearchWithSSID(
3871 IN BSS_TABLE *Tab,
3872 IN PUCHAR Bssid,
3873 IN PUCHAR pSsid,
3874 IN UCHAR SsidLen,
3875 IN UCHAR Channel);
3877 VOID BssTableDeleteEntry(
3878 IN OUT PBSS_TABLE pTab,
3879 IN PUCHAR pBssid,
3880 IN UCHAR Channel);
3882 VOID BATableDeleteORIEntry(
3883 IN OUT PRTMP_ADAPTER pAd,
3884 IN BA_ORI_ENTRY *pBAORIEntry);
3886 VOID BssEntrySet(
3887 IN PRTMP_ADAPTER pAd,
3888 OUT PBSS_ENTRY pBss,
3889 IN PUCHAR pBssid,
3890 IN CHAR Ssid[],
3891 IN UCHAR SsidLen,
3892 IN UCHAR BssType,
3893 IN USHORT BeaconPeriod,
3894 IN PCF_PARM CfParm,
3895 IN USHORT AtimWin,
3896 IN USHORT CapabilityInfo,
3897 IN UCHAR SupRate[],
3898 IN UCHAR SupRateLen,
3899 IN UCHAR ExtRate[],
3900 IN UCHAR ExtRateLen,
3901 IN HT_CAPABILITY_IE *pHtCapability,
3902 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3903 IN UCHAR HtCapabilityLen,
3904 IN UCHAR AddHtInfoLen,
3905 IN UCHAR NewExtChanOffset,
3906 IN UCHAR Channel,
3907 IN CHAR Rssi,
3908 IN LARGE_INTEGER TimeStamp,
3909 IN UCHAR CkipFlag,
3910 IN PEDCA_PARM pEdcaParm,
3911 IN PQOS_CAPABILITY_PARM pQosCapability,
3912 IN PQBSS_LOAD_PARM pQbssLoad,
3913 IN USHORT LengthVIE,
3914 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3916 ULONG BssTableSetEntry(
3917 IN PRTMP_ADAPTER pAd,
3918 OUT PBSS_TABLE pTab,
3919 IN PUCHAR pBssid,
3920 IN CHAR Ssid[],
3921 IN UCHAR SsidLen,
3922 IN UCHAR BssType,
3923 IN USHORT BeaconPeriod,
3924 IN CF_PARM *CfParm,
3925 IN USHORT AtimWin,
3926 IN USHORT CapabilityInfo,
3927 IN UCHAR SupRate[],
3928 IN UCHAR SupRateLen,
3929 IN UCHAR ExtRate[],
3930 IN UCHAR ExtRateLen,
3931 IN HT_CAPABILITY_IE *pHtCapability,
3932 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3933 IN UCHAR HtCapabilityLen,
3934 IN UCHAR AddHtInfoLen,
3935 IN UCHAR NewExtChanOffset,
3936 IN UCHAR Channel,
3937 IN CHAR Rssi,
3938 IN LARGE_INTEGER TimeStamp,
3939 IN UCHAR CkipFlag,
3940 IN PEDCA_PARM pEdcaParm,
3941 IN PQOS_CAPABILITY_PARM pQosCapability,
3942 IN PQBSS_LOAD_PARM pQbssLoad,
3943 IN USHORT LengthVIE,
3944 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3946 VOID BATableInsertEntry(
3947 IN PRTMP_ADAPTER pAd,
3948 IN USHORT Aid,
3949 IN USHORT TimeOutValue,
3950 IN USHORT StartingSeq,
3951 IN UCHAR TID,
3952 IN UCHAR BAWinSize,
3953 IN UCHAR OriginatorStatus,
3954 IN BOOLEAN IsRecipient);
3956 VOID BssTableSsidSort(
3957 IN PRTMP_ADAPTER pAd,
3958 OUT BSS_TABLE *OutTab,
3959 IN CHAR Ssid[],
3960 IN UCHAR SsidLen);
3962 VOID BssTableSortByRssi(
3963 IN OUT BSS_TABLE *OutTab);
3965 VOID BssCipherParse(
3966 IN OUT PBSS_ENTRY pBss);
3968 NDIS_STATUS MlmeQueueInit(
3969 IN MLME_QUEUE *Queue);
3971 VOID MlmeQueueDestroy(
3972 IN MLME_QUEUE *Queue);
3974 BOOLEAN MlmeEnqueue(
3975 IN PRTMP_ADAPTER pAd,
3976 IN ULONG Machine,
3977 IN ULONG MsgType,
3978 IN ULONG MsgLen,
3979 IN VOID *Msg);
3981 BOOLEAN MlmeEnqueueForRecv(
3982 IN PRTMP_ADAPTER pAd,
3983 IN ULONG Wcid,
3984 IN ULONG TimeStampHigh,
3985 IN ULONG TimeStampLow,
3986 IN UCHAR Rssi0,
3987 IN UCHAR Rssi1,
3988 IN UCHAR Rssi2,
3989 IN ULONG MsgLen,
3990 IN PVOID Msg,
3991 IN UCHAR Signal);
3994 BOOLEAN MlmeDequeue(
3995 IN MLME_QUEUE *Queue,
3996 OUT MLME_QUEUE_ELEM **Elem);
3998 VOID MlmeRestartStateMachine(
3999 IN PRTMP_ADAPTER pAd);
4001 BOOLEAN MlmeQueueEmpty(
4002 IN MLME_QUEUE *Queue);
4004 BOOLEAN MlmeQueueFull(
4005 IN MLME_QUEUE *Queue);
4007 BOOLEAN MsgTypeSubst(
4008 IN PRTMP_ADAPTER pAd,
4009 IN PFRAME_802_11 pFrame,
4010 OUT INT *Machine,
4011 OUT INT *MsgType);
4013 VOID StateMachineInit(
4014 IN STATE_MACHINE *Sm,
4015 IN STATE_MACHINE_FUNC Trans[],
4016 IN ULONG StNr,
4017 IN ULONG MsgNr,
4018 IN STATE_MACHINE_FUNC DefFunc,
4019 IN ULONG InitState,
4020 IN ULONG Base);
4022 VOID StateMachineSetAction(
4023 IN STATE_MACHINE *S,
4024 IN ULONG St,
4025 ULONG Msg,
4026 IN STATE_MACHINE_FUNC F);
4028 VOID StateMachinePerformAction(
4029 IN PRTMP_ADAPTER pAd,
4030 IN STATE_MACHINE *S,
4031 IN MLME_QUEUE_ELEM *Elem);
4033 VOID Drop(
4034 IN PRTMP_ADAPTER pAd,
4035 IN MLME_QUEUE_ELEM *Elem);
4037 VOID AssocStateMachineInit(
4038 IN PRTMP_ADAPTER pAd,
4039 IN STATE_MACHINE *Sm,
4040 OUT STATE_MACHINE_FUNC Trans[]);
4042 VOID ReassocTimeout(
4043 IN PVOID SystemSpecific1,
4044 IN PVOID FunctionContext,
4045 IN PVOID SystemSpecific2,
4046 IN PVOID SystemSpecific3);
4048 VOID AssocTimeout(
4049 IN PVOID SystemSpecific1,
4050 IN PVOID FunctionContext,
4051 IN PVOID SystemSpecific2,
4052 IN PVOID SystemSpecific3);
4054 VOID DisassocTimeout(
4055 IN PVOID SystemSpecific1,
4056 IN PVOID FunctionContext,
4057 IN PVOID SystemSpecific2,
4058 IN PVOID SystemSpecific3);
4060 //----------------------------------------------
4061 VOID MlmeAssocReqAction(
4062 IN PRTMP_ADAPTER pAd,
4063 IN MLME_QUEUE_ELEM *Elem);
4065 VOID MlmeReassocReqAction(
4066 IN PRTMP_ADAPTER pAd,
4067 IN MLME_QUEUE_ELEM *Elem);
4069 VOID MlmeDisassocReqAction(
4070 IN PRTMP_ADAPTER pAd,
4071 IN MLME_QUEUE_ELEM *Elem);
4073 VOID PeerAssocRspAction(
4074 IN PRTMP_ADAPTER pAd,
4075 IN MLME_QUEUE_ELEM *Elem);
4077 VOID PeerReassocRspAction(
4078 IN PRTMP_ADAPTER pAd,
4079 IN MLME_QUEUE_ELEM *Elem);
4081 VOID PeerDisassocAction(
4082 IN PRTMP_ADAPTER pAd,
4083 IN MLME_QUEUE_ELEM *Elem);
4085 VOID DisassocTimeoutAction(
4086 IN PRTMP_ADAPTER pAd,
4087 IN MLME_QUEUE_ELEM *Elem);
4089 VOID AssocTimeoutAction(
4090 IN PRTMP_ADAPTER pAd,
4091 IN MLME_QUEUE_ELEM *Elem);
4093 VOID ReassocTimeoutAction(
4094 IN PRTMP_ADAPTER pAd,
4095 IN MLME_QUEUE_ELEM *Elem);
4097 VOID Cls3errAction(
4098 IN PRTMP_ADAPTER pAd,
4099 IN PUCHAR pAddr);
4101 VOID SwitchBetweenWepAndCkip(
4102 IN PRTMP_ADAPTER pAd);
4104 VOID InvalidStateWhenAssoc(
4105 IN PRTMP_ADAPTER pAd,
4106 IN MLME_QUEUE_ELEM *Elem);
4108 VOID InvalidStateWhenReassoc(
4109 IN PRTMP_ADAPTER pAd,
4110 IN MLME_QUEUE_ELEM *Elem);
4112 VOID InvalidStateWhenDisassociate(
4113 IN PRTMP_ADAPTER pAd,
4114 IN MLME_QUEUE_ELEM *Elem);
4116 #ifdef RT2870
4117 VOID MlmeCntlConfirm(
4118 IN PRTMP_ADAPTER pAd,
4119 IN ULONG MsgType,
4120 IN USHORT Msg);
4121 #endif // RT2870 //
4123 VOID ComposePsPoll(
4124 IN PRTMP_ADAPTER pAd);
4126 VOID ComposeNullFrame(
4127 IN PRTMP_ADAPTER pAd);
4129 VOID AssocPostProc(
4130 IN PRTMP_ADAPTER pAd,
4131 IN PUCHAR pAddr2,
4132 IN USHORT CapabilityInfo,
4133 IN USHORT Aid,
4134 IN UCHAR SupRate[],
4135 IN UCHAR SupRateLen,
4136 IN UCHAR ExtRate[],
4137 IN UCHAR ExtRateLen,
4138 IN PEDCA_PARM pEdcaParm,
4139 IN HT_CAPABILITY_IE *pHtCapability,
4140 IN UCHAR HtCapabilityLen,
4141 IN ADD_HT_INFO_IE *pAddHtInfo);
4143 VOID AuthStateMachineInit(
4144 IN PRTMP_ADAPTER pAd,
4145 IN PSTATE_MACHINE sm,
4146 OUT STATE_MACHINE_FUNC Trans[]);
4148 VOID AuthTimeout(
4149 IN PVOID SystemSpecific1,
4150 IN PVOID FunctionContext,
4151 IN PVOID SystemSpecific2,
4152 IN PVOID SystemSpecific3);
4154 VOID MlmeAuthReqAction(
4155 IN PRTMP_ADAPTER pAd,
4156 IN MLME_QUEUE_ELEM *Elem);
4158 VOID PeerAuthRspAtSeq2Action(
4159 IN PRTMP_ADAPTER pAd,
4160 IN MLME_QUEUE_ELEM *Elem);
4162 VOID PeerAuthRspAtSeq4Action(
4163 IN PRTMP_ADAPTER pAd,
4164 IN MLME_QUEUE_ELEM *Elem);
4166 VOID AuthTimeoutAction(
4167 IN PRTMP_ADAPTER pAd,
4168 IN MLME_QUEUE_ELEM *Elem);
4170 VOID Cls2errAction(
4171 IN PRTMP_ADAPTER pAd,
4172 IN PUCHAR pAddr);
4174 VOID MlmeDeauthReqAction(
4175 IN PRTMP_ADAPTER pAd,
4176 IN MLME_QUEUE_ELEM *Elem);
4178 VOID InvalidStateWhenAuth(
4179 IN PRTMP_ADAPTER pAd,
4180 IN MLME_QUEUE_ELEM *Elem);
4182 //=============================================
4184 VOID AuthRspStateMachineInit(
4185 IN PRTMP_ADAPTER pAd,
4186 IN PSTATE_MACHINE Sm,
4187 IN STATE_MACHINE_FUNC Trans[]);
4189 VOID PeerDeauthAction(
4190 IN PRTMP_ADAPTER pAd,
4191 IN MLME_QUEUE_ELEM *Elem);
4193 VOID PeerAuthSimpleRspGenAndSend(
4194 IN PRTMP_ADAPTER pAd,
4195 IN PHEADER_802_11 pHdr80211,
4196 IN USHORT Alg,
4197 IN USHORT Seq,
4198 IN USHORT Reason,
4199 IN USHORT Status);
4202 // Private routines in dls.c
4205 //========================================
4207 VOID SyncStateMachineInit(
4208 IN PRTMP_ADAPTER pAd,
4209 IN STATE_MACHINE *Sm,
4210 OUT STATE_MACHINE_FUNC Trans[]);
4212 VOID BeaconTimeout(
4213 IN PVOID SystemSpecific1,
4214 IN PVOID FunctionContext,
4215 IN PVOID SystemSpecific2,
4216 IN PVOID SystemSpecific3);
4218 VOID ScanTimeout(
4219 IN PVOID SystemSpecific1,
4220 IN PVOID FunctionContext,
4221 IN PVOID SystemSpecific2,
4222 IN PVOID SystemSpecific3);
4224 VOID InvalidStateWhenScan(
4225 IN PRTMP_ADAPTER pAd,
4226 IN MLME_QUEUE_ELEM *Elem);
4228 VOID InvalidStateWhenJoin(
4229 IN PRTMP_ADAPTER pAd,
4230 IN MLME_QUEUE_ELEM *Elem);
4232 VOID InvalidStateWhenStart(
4233 IN PRTMP_ADAPTER pAd,
4234 IN MLME_QUEUE_ELEM *Elem);
4236 VOID EnqueueProbeRequest(
4237 IN PRTMP_ADAPTER pAd);
4239 BOOLEAN ScanRunning(
4240 IN PRTMP_ADAPTER pAd);
4241 //=========================================
4243 VOID MlmeCntlInit(
4244 IN PRTMP_ADAPTER pAd,
4245 IN STATE_MACHINE *S,
4246 OUT STATE_MACHINE_FUNC Trans[]);
4248 VOID MlmeCntlMachinePerformAction(
4249 IN PRTMP_ADAPTER pAd,
4250 IN STATE_MACHINE *S,
4251 IN MLME_QUEUE_ELEM *Elem);
4253 VOID CntlIdleProc(
4254 IN PRTMP_ADAPTER pAd,
4255 IN MLME_QUEUE_ELEM *Elem);
4257 VOID CntlOidScanProc(
4258 IN PRTMP_ADAPTER pAd,
4259 IN MLME_QUEUE_ELEM *Elem);
4261 VOID CntlOidSsidProc(
4262 IN PRTMP_ADAPTER pAd,
4263 IN MLME_QUEUE_ELEM * Elem);
4265 VOID CntlOidRTBssidProc(
4266 IN PRTMP_ADAPTER pAd,
4267 IN MLME_QUEUE_ELEM * Elem);
4269 VOID CntlMlmeRoamingProc(
4270 IN PRTMP_ADAPTER pAd,
4271 IN MLME_QUEUE_ELEM * Elem);
4273 VOID CntlWaitDisassocProc(
4274 IN PRTMP_ADAPTER pAd,
4275 IN MLME_QUEUE_ELEM *Elem);
4277 VOID CntlWaitJoinProc(
4278 IN PRTMP_ADAPTER pAd,
4279 IN MLME_QUEUE_ELEM *Elem);
4281 VOID CntlWaitReassocProc(
4282 IN PRTMP_ADAPTER pAd,
4283 IN MLME_QUEUE_ELEM *Elem);
4285 VOID CntlWaitStartProc(
4286 IN PRTMP_ADAPTER pAd,
4287 IN MLME_QUEUE_ELEM *Elem);
4289 VOID CntlWaitAuthProc(
4290 IN PRTMP_ADAPTER pAd,
4291 IN MLME_QUEUE_ELEM *Elem);
4293 VOID CntlWaitAuthProc2(
4294 IN PRTMP_ADAPTER pAd,
4295 IN MLME_QUEUE_ELEM *Elem);
4297 VOID CntlWaitAssocProc(
4298 IN PRTMP_ADAPTER pAd,
4299 IN MLME_QUEUE_ELEM *Elem);
4301 VOID LinkUp(
4302 IN PRTMP_ADAPTER pAd,
4303 IN UCHAR BssType);
4305 VOID LinkDown(
4306 IN PRTMP_ADAPTER pAd,
4307 IN BOOLEAN IsReqFromAP);
4309 VOID IterateOnBssTab(
4310 IN PRTMP_ADAPTER pAd);
4312 VOID IterateOnBssTab2(
4313 IN PRTMP_ADAPTER pAd);;
4315 VOID JoinParmFill(
4316 IN PRTMP_ADAPTER pAd,
4317 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4318 IN ULONG BssIdx);
4320 VOID AssocParmFill(
4321 IN PRTMP_ADAPTER pAd,
4322 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4323 IN PUCHAR pAddr,
4324 IN USHORT CapabilityInfo,
4325 IN ULONG Timeout,
4326 IN USHORT ListenIntv);
4328 VOID ScanParmFill(
4329 IN PRTMP_ADAPTER pAd,
4330 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4331 IN CHAR Ssid[],
4332 IN UCHAR SsidLen,
4333 IN UCHAR BssType,
4334 IN UCHAR ScanType);
4336 VOID DisassocParmFill(
4337 IN PRTMP_ADAPTER pAd,
4338 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4339 IN PUCHAR pAddr,
4340 IN USHORT Reason);
4342 VOID StartParmFill(
4343 IN PRTMP_ADAPTER pAd,
4344 IN OUT MLME_START_REQ_STRUCT *StartReq,
4345 IN CHAR Ssid[],
4346 IN UCHAR SsidLen);
4348 VOID AuthParmFill(
4349 IN PRTMP_ADAPTER pAd,
4350 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4351 IN PUCHAR pAddr,
4352 IN USHORT Alg);
4354 VOID EnqueuePsPoll(
4355 IN PRTMP_ADAPTER pAd);
4357 VOID EnqueueBeaconFrame(
4358 IN PRTMP_ADAPTER pAd);
4360 VOID MlmeJoinReqAction(
4361 IN PRTMP_ADAPTER pAd,
4362 IN MLME_QUEUE_ELEM *Elem);
4364 VOID MlmeScanReqAction(
4365 IN PRTMP_ADAPTER pAd,
4366 IN MLME_QUEUE_ELEM *Elem);
4368 VOID MlmeStartReqAction(
4369 IN PRTMP_ADAPTER pAd,
4370 IN MLME_QUEUE_ELEM *Elem);
4372 VOID ScanTimeoutAction(
4373 IN PRTMP_ADAPTER pAd,
4374 IN MLME_QUEUE_ELEM *Elem);
4376 VOID BeaconTimeoutAtJoinAction(
4377 IN PRTMP_ADAPTER pAd,
4378 IN MLME_QUEUE_ELEM *Elem);
4380 VOID PeerBeaconAtScanAction(
4381 IN PRTMP_ADAPTER pAd,
4382 IN MLME_QUEUE_ELEM *Elem);
4384 VOID PeerBeaconAtJoinAction(
4385 IN PRTMP_ADAPTER pAd,
4386 IN MLME_QUEUE_ELEM *Elem);
4388 VOID PeerBeacon(
4389 IN PRTMP_ADAPTER pAd,
4390 IN MLME_QUEUE_ELEM *Elem);
4392 VOID PeerProbeReqAction(
4393 IN PRTMP_ADAPTER pAd,
4394 IN MLME_QUEUE_ELEM *Elem);
4396 VOID ScanNextChannel(
4397 IN PRTMP_ADAPTER pAd);
4399 ULONG MakeIbssBeacon(
4400 IN PRTMP_ADAPTER pAd);
4402 VOID CCXAdjacentAPReport(
4403 IN PRTMP_ADAPTER pAd);
4405 BOOLEAN MlmeScanReqSanity(
4406 IN PRTMP_ADAPTER pAd,
4407 IN VOID *Msg,
4408 IN ULONG MsgLen,
4409 OUT UCHAR *BssType,
4410 OUT CHAR ssid[],
4411 OUT UCHAR *SsidLen,
4412 OUT UCHAR *ScanType);
4414 BOOLEAN PeerBeaconAndProbeRspSanity(
4415 IN PRTMP_ADAPTER pAd,
4416 IN VOID *Msg,
4417 IN ULONG MsgLen,
4418 IN UCHAR MsgChannel,
4419 OUT PUCHAR pAddr2,
4420 OUT PUCHAR pBssid,
4421 OUT CHAR Ssid[],
4422 OUT UCHAR *pSsidLen,
4423 OUT UCHAR *pBssType,
4424 OUT USHORT *pBeaconPeriod,
4425 OUT UCHAR *pChannel,
4426 OUT UCHAR *pNewChannel,
4427 OUT LARGE_INTEGER *pTimestamp,
4428 OUT CF_PARM *pCfParm,
4429 OUT USHORT *pAtimWin,
4430 OUT USHORT *pCapabilityInfo,
4431 OUT UCHAR *pErp,
4432 OUT UCHAR *pDtimCount,
4433 OUT UCHAR *pDtimPeriod,
4434 OUT UCHAR *pBcastFlag,
4435 OUT UCHAR *pMessageToMe,
4436 OUT UCHAR SupRate[],
4437 OUT UCHAR *pSupRateLen,
4438 OUT UCHAR ExtRate[],
4439 OUT UCHAR *pExtRateLen,
4440 OUT UCHAR *pCkipFlag,
4441 OUT UCHAR *pAironetCellPowerLimit,
4442 OUT PEDCA_PARM pEdcaParm,
4443 OUT PQBSS_LOAD_PARM pQbssLoad,
4444 OUT PQOS_CAPABILITY_PARM pQosCapability,
4445 OUT ULONG *pRalinkIe,
4446 OUT UCHAR *pHtCapabilityLen,
4447 OUT UCHAR *pPreNHtCapabilityLen,
4448 OUT HT_CAPABILITY_IE *pHtCapability,
4449 OUT UCHAR *AddHtInfoLen,
4450 OUT ADD_HT_INFO_IE *AddHtInfo,
4451 OUT UCHAR *NewExtChannel,
4452 OUT USHORT *LengthVIE,
4453 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4455 BOOLEAN PeerAddBAReqActionSanity(
4456 IN PRTMP_ADAPTER pAd,
4457 IN VOID *pMsg,
4458 IN ULONG MsgLen,
4459 OUT PUCHAR pAddr2);
4461 BOOLEAN PeerAddBARspActionSanity(
4462 IN PRTMP_ADAPTER pAd,
4463 IN VOID *pMsg,
4464 IN ULONG MsgLen);
4466 BOOLEAN PeerDelBAActionSanity(
4467 IN PRTMP_ADAPTER pAd,
4468 IN UCHAR Wcid,
4469 IN VOID *pMsg,
4470 IN ULONG MsgLen);
4472 BOOLEAN MlmeAssocReqSanity(
4473 IN PRTMP_ADAPTER pAd,
4474 IN VOID *Msg,
4475 IN ULONG MsgLen,
4476 OUT PUCHAR pApAddr,
4477 OUT USHORT *CapabilityInfo,
4478 OUT ULONG *Timeout,
4479 OUT USHORT *ListenIntv);
4481 BOOLEAN MlmeAuthReqSanity(
4482 IN PRTMP_ADAPTER pAd,
4483 IN VOID *Msg,
4484 IN ULONG MsgLen,
4485 OUT PUCHAR pAddr,
4486 OUT ULONG *Timeout,
4487 OUT USHORT *Alg);
4489 BOOLEAN MlmeStartReqSanity(
4490 IN PRTMP_ADAPTER pAd,
4491 IN VOID *Msg,
4492 IN ULONG MsgLen,
4493 OUT CHAR Ssid[],
4494 OUT UCHAR *Ssidlen);
4496 BOOLEAN PeerAuthSanity(
4497 IN PRTMP_ADAPTER pAd,
4498 IN VOID *Msg,
4499 IN ULONG MsgLen,
4500 OUT PUCHAR pAddr,
4501 OUT USHORT *Alg,
4502 OUT USHORT *Seq,
4503 OUT USHORT *Status,
4504 OUT CHAR ChlgText[]);
4506 BOOLEAN PeerAssocRspSanity(
4507 IN PRTMP_ADAPTER pAd,
4508 IN VOID *pMsg,
4509 IN ULONG MsgLen,
4510 OUT PUCHAR pAddr2,
4511 OUT USHORT *pCapabilityInfo,
4512 OUT USHORT *pStatus,
4513 OUT USHORT *pAid,
4514 OUT UCHAR SupRate[],
4515 OUT UCHAR *pSupRateLen,
4516 OUT UCHAR ExtRate[],
4517 OUT UCHAR *pExtRateLen,
4518 OUT HT_CAPABILITY_IE *pHtCapability,
4519 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4520 OUT UCHAR *pHtCapabilityLen,
4521 OUT UCHAR *pAddHtInfoLen,
4522 OUT UCHAR *pNewExtChannelOffset,
4523 OUT PEDCA_PARM pEdcaParm,
4524 OUT UCHAR *pCkipFlag);
4526 BOOLEAN PeerDisassocSanity(
4527 IN PRTMP_ADAPTER pAd,
4528 IN VOID *Msg,
4529 IN ULONG MsgLen,
4530 OUT PUCHAR pAddr2,
4531 OUT USHORT *Reason);
4533 BOOLEAN PeerDeauthSanity(
4534 IN PRTMP_ADAPTER pAd,
4535 IN VOID *Msg,
4536 IN ULONG MsgLen,
4537 OUT PUCHAR pAddr2,
4538 OUT USHORT *Reason);
4540 BOOLEAN PeerProbeReqSanity(
4541 IN PRTMP_ADAPTER pAd,
4542 IN VOID *Msg,
4543 IN ULONG MsgLen,
4544 OUT PUCHAR pAddr2,
4545 OUT CHAR Ssid[],
4546 OUT UCHAR *pSsidLen);
4548 BOOLEAN GetTimBit(
4549 IN CHAR *Ptr,
4550 IN USHORT Aid,
4551 OUT UCHAR *TimLen,
4552 OUT UCHAR *BcastFlag,
4553 OUT UCHAR *DtimCount,
4554 OUT UCHAR *DtimPeriod,
4555 OUT UCHAR *MessageToMe);
4557 UCHAR ChannelSanity(
4558 IN PRTMP_ADAPTER pAd,
4559 IN UCHAR channel);
4561 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4562 IN PBSS_ENTRY pBss);
4564 BOOLEAN MlmeDelBAReqSanity(
4565 IN PRTMP_ADAPTER pAd,
4566 IN VOID *Msg,
4567 IN ULONG MsgLen);
4569 BOOLEAN MlmeAddBAReqSanity(
4570 IN PRTMP_ADAPTER pAd,
4571 IN VOID *Msg,
4572 IN ULONG MsgLen,
4573 OUT PUCHAR pAddr2);
4575 ULONG MakeOutgoingFrame(
4576 OUT CHAR *Buffer,
4577 OUT ULONG *Length, ...);
4579 VOID LfsrInit(
4580 IN PRTMP_ADAPTER pAd,
4581 IN ULONG Seed);
4583 UCHAR RandomByte(
4584 IN PRTMP_ADAPTER pAd);
4586 VOID AsicUpdateAutoFallBackTable(
4587 IN PRTMP_ADAPTER pAd,
4588 IN PUCHAR pTxRate);
4590 VOID MlmePeriodicExec(
4591 IN PVOID SystemSpecific1,
4592 IN PVOID FunctionContext,
4593 IN PVOID SystemSpecific2,
4594 IN PVOID SystemSpecific3);
4596 VOID LinkDownExec(
4597 IN PVOID SystemSpecific1,
4598 IN PVOID FunctionContext,
4599 IN PVOID SystemSpecific2,
4600 IN PVOID SystemSpecific3);
4602 VOID STAMlmePeriodicExec(
4603 PRTMP_ADAPTER pAd);
4605 VOID MlmeAutoScan(
4606 IN PRTMP_ADAPTER pAd);
4608 VOID MlmeAutoReconnectLastSSID(
4609 IN PRTMP_ADAPTER pAd);
4611 BOOLEAN MlmeValidateSSID(
4612 IN PUCHAR pSsid,
4613 IN UCHAR SsidLen);
4615 VOID MlmeCheckForRoaming(
4616 IN PRTMP_ADAPTER pAd,
4617 IN ULONG Now32);
4619 VOID MlmeCheckForFastRoaming(
4620 IN PRTMP_ADAPTER pAd,
4621 IN ULONG Now);
4623 VOID MlmeDynamicTxRateSwitching(
4624 IN PRTMP_ADAPTER pAd);
4626 VOID MlmeSetTxRate(
4627 IN PRTMP_ADAPTER pAd,
4628 IN PMAC_TABLE_ENTRY pEntry,
4629 IN PRTMP_TX_RATE_SWITCH pTxRate);
4631 VOID MlmeSelectTxRateTable(
4632 IN PRTMP_ADAPTER pAd,
4633 IN PMAC_TABLE_ENTRY pEntry,
4634 IN PUCHAR *ppTable,
4635 IN PUCHAR pTableSize,
4636 IN PUCHAR pInitTxRateIdx);
4638 VOID MlmeCalculateChannelQuality(
4639 IN PRTMP_ADAPTER pAd,
4640 IN ULONG Now);
4642 VOID MlmeCheckPsmChange(
4643 IN PRTMP_ADAPTER pAd,
4644 IN ULONG Now32);
4646 VOID MlmeSetPsmBit(
4647 IN PRTMP_ADAPTER pAd,
4648 IN USHORT psm);
4650 VOID MlmeSetTxPreamble(
4651 IN PRTMP_ADAPTER pAd,
4652 IN USHORT TxPreamble);
4654 VOID UpdateBasicRateBitmap(
4655 IN PRTMP_ADAPTER pAd);
4657 VOID MlmeUpdateTxRates(
4658 IN PRTMP_ADAPTER pAd,
4659 IN BOOLEAN bLinkUp,
4660 IN UCHAR apidx);
4662 VOID MlmeUpdateHtTxRates(
4663 IN PRTMP_ADAPTER pAd,
4664 IN UCHAR apidx);
4666 VOID RTMPCheckRates(
4667 IN PRTMP_ADAPTER pAd,
4668 IN OUT UCHAR SupRate[],
4669 IN OUT UCHAR *SupRateLen);
4671 BOOLEAN RTMPCheckChannel(
4672 IN PRTMP_ADAPTER pAd,
4673 IN UCHAR CentralChannel,
4674 IN UCHAR Channel);
4676 BOOLEAN RTMPCheckHt(
4677 IN PRTMP_ADAPTER pAd,
4678 IN UCHAR Wcid,
4679 IN OUT HT_CAPABILITY_IE *pHtCapability,
4680 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
4682 VOID StaQuickResponeForRateUpExec(
4683 IN PVOID SystemSpecific1,
4684 IN PVOID FunctionContext,
4685 IN PVOID SystemSpecific2,
4686 IN PVOID SystemSpecific3);
4688 VOID RTMPUpdateMlmeRate(
4689 IN PRTMP_ADAPTER pAd);
4691 CHAR RTMPMaxRssi(
4692 IN PRTMP_ADAPTER pAd,
4693 IN CHAR Rssi0,
4694 IN CHAR Rssi1,
4695 IN CHAR Rssi2);
4697 VOID AsicSetRxAnt(
4698 IN PRTMP_ADAPTER pAd,
4699 IN UCHAR Ant);
4701 VOID AsicEvaluateRxAnt(
4702 IN PRTMP_ADAPTER pAd);
4704 VOID AsicRxAntEvalTimeout(
4705 IN PVOID SystemSpecific1,
4706 IN PVOID FunctionContext,
4707 IN PVOID SystemSpecific2,
4708 IN PVOID SystemSpecific3);
4710 VOID APSDPeriodicExec(
4711 IN PVOID SystemSpecific1,
4712 IN PVOID FunctionContext,
4713 IN PVOID SystemSpecific2,
4714 IN PVOID SystemSpecific3);
4716 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4717 IN PRTMP_ADAPTER pAd,
4718 IN PMAC_TABLE_ENTRY pEntry);
4720 UCHAR RTMPStaFixedTxMode(
4721 IN PRTMP_ADAPTER pAd,
4722 IN PMAC_TABLE_ENTRY pEntry);
4724 VOID RTMPUpdateLegacyTxSetting(
4725 UCHAR fixed_tx_mode,
4726 PMAC_TABLE_ENTRY pEntry);
4728 BOOLEAN RTMPAutoRateSwitchCheck(
4729 IN PRTMP_ADAPTER pAd);
4731 NDIS_STATUS MlmeInit(
4732 IN PRTMP_ADAPTER pAd);
4734 VOID MlmeHandler(
4735 IN PRTMP_ADAPTER pAd);
4737 VOID MlmeHalt(
4738 IN PRTMP_ADAPTER pAd);
4740 VOID MlmeResetRalinkCounters(
4741 IN PRTMP_ADAPTER pAd);
4743 VOID BuildChannelList(
4744 IN PRTMP_ADAPTER pAd);
4746 UCHAR FirstChannel(
4747 IN PRTMP_ADAPTER pAd);
4749 UCHAR NextChannel(
4750 IN PRTMP_ADAPTER pAd,
4751 IN UCHAR channel);
4753 VOID ChangeToCellPowerLimit(
4754 IN PRTMP_ADAPTER pAd,
4755 IN UCHAR AironetCellPowerLimit);
4757 USHORT RTMP_EEPROM_READ16(
4758 IN PRTMP_ADAPTER pAd,
4759 IN USHORT Offset);
4761 VOID RTMP_EEPROM_WRITE16(
4762 IN PRTMP_ADAPTER pAd,
4763 IN USHORT Offset,
4764 IN USHORT Data);
4767 // Prototypes of function definition in rtmp_tkip.c
4769 VOID RTMPInitTkipEngine(
4770 IN PRTMP_ADAPTER pAd,
4771 IN PUCHAR pTKey,
4772 IN UCHAR KeyId,
4773 IN PUCHAR pTA,
4774 IN PUCHAR pMICKey,
4775 IN PUCHAR pTSC,
4776 OUT PULONG pIV16,
4777 OUT PULONG pIV32);
4779 VOID RTMPInitMICEngine(
4780 IN PRTMP_ADAPTER pAd,
4781 IN PUCHAR pKey,
4782 IN PUCHAR pDA,
4783 IN PUCHAR pSA,
4784 IN UCHAR UserPriority,
4785 IN PUCHAR pMICKey);
4787 BOOLEAN RTMPTkipCompareMICValue(
4788 IN PRTMP_ADAPTER pAd,
4789 IN PUCHAR pSrc,
4790 IN PUCHAR pDA,
4791 IN PUCHAR pSA,
4792 IN PUCHAR pMICKey,
4793 IN UCHAR UserPriority,
4794 IN UINT Len);
4796 VOID RTMPCalculateMICValue(
4797 IN PRTMP_ADAPTER pAd,
4798 IN PNDIS_PACKET pPacket,
4799 IN PUCHAR pEncap,
4800 IN PCIPHER_KEY pKey,
4801 IN UCHAR apidx);
4803 BOOLEAN RTMPTkipCompareMICValueWithLLC(
4804 IN PRTMP_ADAPTER pAd,
4805 IN PUCHAR pLLC,
4806 IN PUCHAR pSrc,
4807 IN PUCHAR pDA,
4808 IN PUCHAR pSA,
4809 IN PUCHAR pMICKey,
4810 IN UINT Len);
4812 VOID RTMPTkipAppendByte(
4813 IN PTKIP_KEY_INFO pTkip,
4814 IN UCHAR uChar);
4816 VOID RTMPTkipAppend(
4817 IN PTKIP_KEY_INFO pTkip,
4818 IN PUCHAR pSrc,
4819 IN UINT nBytes);
4821 VOID RTMPTkipGetMIC(
4822 IN PTKIP_KEY_INFO pTkip);
4824 BOOLEAN RTMPSoftDecryptTKIP(
4825 IN PRTMP_ADAPTER pAd,
4826 IN PUCHAR pData,
4827 IN ULONG DataByteCnt,
4828 IN UCHAR UserPriority,
4829 IN PCIPHER_KEY pWpaKey);
4831 BOOLEAN RTMPSoftDecryptAES(
4832 IN PRTMP_ADAPTER pAd,
4833 IN PUCHAR pData,
4834 IN ULONG DataByteCnt,
4835 IN PCIPHER_KEY pWpaKey);
4838 // Prototypes of function definition in cmm_info.c
4840 NDIS_STATUS RTMPWPARemoveKeyProc(
4841 IN PRTMP_ADAPTER pAd,
4842 IN PVOID pBuf);
4844 VOID RTMPWPARemoveAllKeys(
4845 IN PRTMP_ADAPTER pAd);
4847 BOOLEAN RTMPCheckStrPrintAble(
4848 IN CHAR *pInPutStr,
4849 IN UCHAR strLen);
4851 VOID RTMPSetPhyMode(
4852 IN PRTMP_ADAPTER pAd,
4853 IN ULONG phymode);
4855 VOID RTMPUpdateHTIE(
4856 IN RT_HT_CAPABILITY *pRtHt,
4857 IN UCHAR *pMcsSet,
4858 OUT HT_CAPABILITY_IE *pHtCapability,
4859 OUT ADD_HT_INFO_IE *pAddHtInfo);
4861 VOID RTMPAddWcidAttributeEntry(
4862 IN PRTMP_ADAPTER pAd,
4863 IN UCHAR BssIdx,
4864 IN UCHAR KeyIdx,
4865 IN UCHAR CipherAlg,
4866 IN MAC_TABLE_ENTRY *pEntry);
4868 CHAR *GetEncryptType(
4869 CHAR enc);
4871 CHAR *GetAuthMode(
4872 CHAR auth);
4874 VOID RTMPIoctlGetSiteSurvey(
4875 IN PRTMP_ADAPTER pAdapter,
4876 IN struct iwreq *wrq);
4878 VOID RTMPIoctlGetMacTable(
4879 IN PRTMP_ADAPTER pAd,
4880 IN struct iwreq *wrq);
4882 VOID RTMPAddBSSIDCipher(
4883 IN PRTMP_ADAPTER pAd,
4884 IN UCHAR Aid,
4885 IN PNDIS_802_11_KEY pKey,
4886 IN UCHAR CipherAlg);
4888 VOID RTMPSetHT(
4889 IN PRTMP_ADAPTER pAd,
4890 IN OID_SET_HT_PHYMODE *pHTPhyMode);
4892 VOID RTMPSetIndividualHT(
4893 IN PRTMP_ADAPTER pAd,
4894 IN UCHAR apidx);
4896 VOID RTMPSendWirelessEvent(
4897 IN PRTMP_ADAPTER pAd,
4898 IN USHORT Event_flag,
4899 IN PUCHAR pAddr,
4900 IN UCHAR BssIdx,
4901 IN CHAR Rssi);
4904 // prototype in wpa.c
4906 BOOLEAN WpaMsgTypeSubst(
4907 IN UCHAR EAPType,
4908 OUT INT *MsgType);
4910 VOID WpaPskStateMachineInit(
4911 IN PRTMP_ADAPTER pAd,
4912 IN STATE_MACHINE *S,
4913 OUT STATE_MACHINE_FUNC Trans[]);
4915 VOID WpaEAPOLKeyAction(
4916 IN PRTMP_ADAPTER pAd,
4917 IN MLME_QUEUE_ELEM *Elem);
4919 VOID WpaPairMsg1Action(
4920 IN PRTMP_ADAPTER pAd,
4921 IN MLME_QUEUE_ELEM *Elem);
4923 VOID WpaPairMsg3Action(
4924 IN PRTMP_ADAPTER pAd,
4925 IN MLME_QUEUE_ELEM *Elem);
4927 VOID WpaGroupMsg1Action(
4928 IN PRTMP_ADAPTER pAd,
4929 IN MLME_QUEUE_ELEM *Elem);
4931 VOID WpaMacHeaderInit(
4932 IN PRTMP_ADAPTER pAd,
4933 IN OUT PHEADER_802_11 pHdr80211,
4934 IN UCHAR wep,
4935 IN PUCHAR pAddr1);
4937 VOID Wpa2PairMsg1Action(
4938 IN PRTMP_ADAPTER pAd,
4939 IN MLME_QUEUE_ELEM *Elem);
4941 VOID Wpa2PairMsg3Action(
4942 IN PRTMP_ADAPTER pAd,
4943 IN MLME_QUEUE_ELEM *Elem);
4945 BOOLEAN ParseKeyData(
4946 IN PRTMP_ADAPTER pAd,
4947 IN PUCHAR pKeyData,
4948 IN UCHAR KeyDataLen,
4949 IN UCHAR bPairewise);
4951 VOID RTMPToWirelessSta(
4952 IN PRTMP_ADAPTER pAd,
4953 IN PUCHAR pHeader802_3,
4954 IN UINT HdrLen,
4955 IN PUCHAR pData,
4956 IN UINT DataLen,
4957 IN BOOLEAN is4wayFrame);
4959 VOID HMAC_SHA1(
4960 IN UCHAR *text,
4961 IN UINT text_len,
4962 IN UCHAR *key,
4963 IN UINT key_len,
4964 IN UCHAR *digest);
4966 VOID PRF(
4967 IN UCHAR *key,
4968 IN INT key_len,
4969 IN UCHAR *prefix,
4970 IN INT prefix_len,
4971 IN UCHAR *data,
4972 IN INT data_len,
4973 OUT UCHAR *output,
4974 IN INT len);
4976 VOID CCKMPRF(
4977 IN UCHAR *key,
4978 IN INT key_len,
4979 IN UCHAR *data,
4980 IN INT data_len,
4981 OUT UCHAR *output,
4982 IN INT len);
4984 VOID WpaCountPTK(
4985 IN PRTMP_ADAPTER pAd,
4986 IN UCHAR *PMK,
4987 IN UCHAR *ANonce,
4988 IN UCHAR *AA,
4989 IN UCHAR *SNonce,
4990 IN UCHAR *SA,
4991 OUT UCHAR *output,
4992 IN UINT len);
4994 VOID GenRandom(
4995 IN PRTMP_ADAPTER pAd,
4996 IN UCHAR *macAddr,
4997 OUT UCHAR *random);
5000 // prototype in aironet.c
5002 VOID AironetStateMachineInit(
5003 IN PRTMP_ADAPTER pAd,
5004 IN STATE_MACHINE *S,
5005 OUT STATE_MACHINE_FUNC Trans[]);
5007 VOID AironetMsgAction(
5008 IN PRTMP_ADAPTER pAd,
5009 IN MLME_QUEUE_ELEM *Elem);
5011 VOID AironetRequestAction(
5012 IN PRTMP_ADAPTER pAd,
5013 IN MLME_QUEUE_ELEM *Elem);
5015 VOID ChannelLoadRequestAction(
5016 IN PRTMP_ADAPTER pAd,
5017 IN UCHAR Index);
5019 VOID NoiseHistRequestAction(
5020 IN PRTMP_ADAPTER pAd,
5021 IN UCHAR Index);
5023 VOID BeaconRequestAction(
5024 IN PRTMP_ADAPTER pAd,
5025 IN UCHAR Index);
5027 VOID AironetReportAction(
5028 IN PRTMP_ADAPTER pAd,
5029 IN MLME_QUEUE_ELEM *Elem);
5031 VOID ChannelLoadReportAction(
5032 IN PRTMP_ADAPTER pAd,
5033 IN UCHAR Index);
5035 VOID NoiseHistReportAction(
5036 IN PRTMP_ADAPTER pAd,
5037 IN UCHAR Index);
5039 VOID AironetFinalReportAction(
5040 IN PRTMP_ADAPTER pAd);
5042 VOID BeaconReportAction(
5043 IN PRTMP_ADAPTER pAd,
5044 IN UCHAR Index);
5046 VOID AironetAddBeaconReport(
5047 IN PRTMP_ADAPTER pAd,
5048 IN ULONG Index,
5049 IN PMLME_QUEUE_ELEM pElem);
5051 VOID AironetCreateBeaconReportFromBssTable(
5052 IN PRTMP_ADAPTER pAd);
5054 CHAR ConvertToRssi(
5055 IN PRTMP_ADAPTER pAd,
5056 IN CHAR Rssi,
5057 IN UCHAR RssiNumber);
5060 // function prototype in cmm_wpa.c
5062 BOOLEAN RTMPCheckWPAframe(
5063 IN PRTMP_ADAPTER pAd,
5064 IN PMAC_TABLE_ENTRY pEntry,
5065 IN PUCHAR pData,
5066 IN ULONG DataByteCount,
5067 IN UCHAR FromWhichBSSID);
5069 VOID AES_GTK_KEY_UNWRAP(
5070 IN UCHAR *key,
5071 OUT UCHAR *plaintext,
5072 IN UCHAR c_len,
5073 IN UCHAR *ciphertext);
5075 VOID RTMPMakeRSNIE(
5076 IN PRTMP_ADAPTER pAd,
5077 IN UINT AuthMode,
5078 IN UINT WepStatus,
5079 IN UCHAR apidx);
5082 // function prototype in ap_wpa.c
5085 VOID HandleCounterMeasure(
5086 IN PRTMP_ADAPTER pAd,
5087 IN MAC_TABLE_ENTRY *pEntry);
5089 /* timeout -- ms */
5090 VOID RTMP_SetPeriodicTimer(
5091 IN NDIS_MINIPORT_TIMER *pTimer,
5092 IN unsigned long timeout);
5094 VOID RTMP_OS_Init_Timer(
5095 IN PRTMP_ADAPTER pAd,
5096 IN NDIS_MINIPORT_TIMER *pTimer,
5097 IN TIMER_FUNCTION function,
5098 IN PVOID data);
5100 VOID RTMP_OS_Add_Timer(
5101 IN NDIS_MINIPORT_TIMER *pTimer,
5102 IN unsigned long timeout);
5104 VOID RTMP_OS_Mod_Timer(
5105 IN NDIS_MINIPORT_TIMER *pTimer,
5106 IN unsigned long timeout);
5109 VOID RTMP_OS_Del_Timer(
5110 IN NDIS_MINIPORT_TIMER *pTimer,
5111 OUT BOOLEAN *pCancelled);
5114 VOID RTMP_OS_Release_Packet(
5115 IN PRTMP_ADAPTER pAd,
5116 IN PQUEUE_ENTRY pEntry);
5118 VOID RTMPusecDelay(
5119 IN ULONG usec);
5121 NDIS_STATUS os_alloc_mem(
5122 IN PRTMP_ADAPTER pAd,
5123 OUT PUCHAR *mem,
5124 IN ULONG size);
5126 NDIS_STATUS os_free_mem(
5127 IN PRTMP_ADAPTER pAd,
5128 IN PUCHAR mem);
5131 void RTMP_AllocateSharedMemory(
5132 IN PRTMP_ADAPTER pAd,
5133 IN ULONG Length,
5134 IN BOOLEAN Cached,
5135 OUT PVOID *VirtualAddress,
5136 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5138 VOID RTMPFreeTxRxRingMemory(
5139 IN PRTMP_ADAPTER pAd);
5141 NDIS_STATUS AdapterBlockAllocateMemory(
5142 IN PVOID handle,
5143 OUT PVOID *ppAd);
5145 void RTMP_AllocateTxDescMemory(
5146 IN PRTMP_ADAPTER pAd,
5147 IN UINT Index,
5148 IN ULONG Length,
5149 IN BOOLEAN Cached,
5150 OUT PVOID *VirtualAddress,
5151 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5153 void RTMP_AllocateFirstTxBuffer(
5154 IN PRTMP_ADAPTER pAd,
5155 IN UINT Index,
5156 IN ULONG Length,
5157 IN BOOLEAN Cached,
5158 OUT PVOID *VirtualAddress,
5159 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5161 void RTMP_AllocateMgmtDescMemory(
5162 IN PRTMP_ADAPTER pAd,
5163 IN ULONG Length,
5164 IN BOOLEAN Cached,
5165 OUT PVOID *VirtualAddress,
5166 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5168 void RTMP_AllocateRxDescMemory(
5169 IN PRTMP_ADAPTER pAd,
5170 IN ULONG Length,
5171 IN BOOLEAN Cached,
5172 OUT PVOID *VirtualAddress,
5173 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5175 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5176 IN PRTMP_ADAPTER pAd,
5177 IN ULONG Length,
5178 IN BOOLEAN Cached,
5179 OUT PVOID *VirtualAddress,
5180 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5182 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5183 IN PRTMP_ADAPTER pAd,
5184 IN ULONG Length,
5185 IN BOOLEAN Cached,
5186 OUT PVOID *VirtualAddress);
5188 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5189 IN PRTMP_ADAPTER pAd,
5190 IN ULONG Length);
5192 void RTMP_QueryPacketInfo(
5193 IN PNDIS_PACKET pPacket,
5194 OUT PACKET_INFO *pPacketInfo,
5195 OUT PUCHAR *pSrcBufVA,
5196 OUT UINT *pSrcBufLen);
5198 void RTMP_QueryNextPacketInfo(
5199 IN PNDIS_PACKET *ppPacket,
5200 OUT PACKET_INFO *pPacketInfo,
5201 OUT PUCHAR *pSrcBufVA,
5202 OUT UINT *pSrcBufLen);
5205 BOOLEAN RTMP_FillTxBlkInfo(
5206 IN RTMP_ADAPTER *pAd,
5207 IN TX_BLK *pTxBlk);
5210 PRTMP_SCATTER_GATHER_LIST
5211 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5214 void announce_802_3_packet(
5215 IN PRTMP_ADAPTER pAd,
5216 IN PNDIS_PACKET pPacket);
5219 UINT BA_Reorder_AMSDU_Annnounce(
5220 IN PRTMP_ADAPTER pAd,
5221 IN PNDIS_PACKET pPacket);
5223 PNET_DEV get_netdev_from_bssid(
5224 IN PRTMP_ADAPTER pAd,
5225 IN UCHAR FromWhichBSSID);
5228 PNDIS_PACKET duplicate_pkt(
5229 IN PRTMP_ADAPTER pAd,
5230 IN PUCHAR pHeader802_3,
5231 IN UINT HdrLen,
5232 IN PUCHAR pData,
5233 IN ULONG DataSize,
5234 IN UCHAR FromWhichBSSID);
5237 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5238 IN PRTMP_ADAPTER pAd,
5239 IN PNDIS_PACKET pOldPkt);
5241 void ba_flush_reordering_timeout_mpdus(
5242 IN PRTMP_ADAPTER pAd,
5243 IN PBA_REC_ENTRY pBAEntry,
5244 IN ULONG Now32);
5247 VOID BAOriSessionSetUp(
5248 IN PRTMP_ADAPTER pAd,
5249 IN MAC_TABLE_ENTRY *pEntry,
5250 IN UCHAR TID,
5251 IN USHORT TimeOut,
5252 IN ULONG DelayTime,
5253 IN BOOLEAN isForced);
5255 VOID BASessionTearDownALL(
5256 IN OUT PRTMP_ADAPTER pAd,
5257 IN UCHAR Wcid);
5259 BOOLEAN OS_Need_Clone_Packet(void);
5262 VOID build_tx_packet(
5263 IN PRTMP_ADAPTER pAd,
5264 IN PNDIS_PACKET pPacket,
5265 IN PUCHAR pFrame,
5266 IN ULONG FrameLen);
5269 VOID BAOriSessionTearDown(
5270 IN OUT PRTMP_ADAPTER pAd,
5271 IN UCHAR Wcid,
5272 IN UCHAR TID,
5273 IN BOOLEAN bPassive,
5274 IN BOOLEAN bForceSend);
5276 VOID BARecSessionTearDown(
5277 IN OUT PRTMP_ADAPTER pAd,
5278 IN UCHAR Wcid,
5279 IN UCHAR TID,
5280 IN BOOLEAN bPassive);
5282 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5283 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5285 BOOLEAN rtstrmactohex(
5286 IN char *s1,
5287 IN char *s2);
5289 BOOLEAN rtstrcasecmp(
5290 IN char *s1,
5291 IN char *s2);
5293 char *rtstrstruncasecmp(
5294 IN char *s1,
5295 IN char *s2);
5297 char *rtstrstr(
5298 IN const char * s1,
5299 IN const char * s2);
5301 char *rstrtok(
5302 IN char * s,
5303 IN const char * ct);
5305 int rtinet_aton(
5306 const char *cp,
5307 unsigned int *addr);
5309 ////////// common ioctl functions //////////
5310 INT Set_DriverVersion_Proc(
5311 IN PRTMP_ADAPTER pAd,
5312 IN PUCHAR arg);
5314 INT Set_CountryRegion_Proc(
5315 IN PRTMP_ADAPTER pAd,
5316 IN PUCHAR arg);
5318 INT Set_CountryRegionABand_Proc(
5319 IN PRTMP_ADAPTER pAd,
5320 IN PUCHAR arg);
5322 INT Set_WirelessMode_Proc(
5323 IN PRTMP_ADAPTER pAd,
5324 IN PUCHAR arg);
5326 INT Set_Channel_Proc(
5327 IN PRTMP_ADAPTER pAd,
5328 IN PUCHAR arg);
5330 INT Set_ShortSlot_Proc(
5331 IN PRTMP_ADAPTER pAd,
5332 IN PUCHAR arg);
5334 INT Set_TxPower_Proc(
5335 IN PRTMP_ADAPTER pAd,
5336 IN PUCHAR arg);
5338 INT Set_BGProtection_Proc(
5339 IN PRTMP_ADAPTER pAd,
5340 IN PUCHAR arg);
5342 INT Set_TxPreamble_Proc(
5343 IN PRTMP_ADAPTER pAd,
5344 IN PUCHAR arg);
5346 INT Set_RTSThreshold_Proc(
5347 IN PRTMP_ADAPTER pAd,
5348 IN PUCHAR arg);
5350 INT Set_FragThreshold_Proc(
5351 IN PRTMP_ADAPTER pAd,
5352 IN PUCHAR arg);
5354 INT Set_TxBurst_Proc(
5355 IN PRTMP_ADAPTER pAd,
5356 IN PUCHAR arg);
5358 #ifdef AGGREGATION_SUPPORT
5359 INT Set_PktAggregate_Proc(
5360 IN PRTMP_ADAPTER pAd,
5361 IN PUCHAR arg);
5362 #endif
5364 INT Set_IEEE80211H_Proc(
5365 IN PRTMP_ADAPTER pAd,
5366 IN PUCHAR arg);
5368 #ifdef DBG
5369 INT Set_Debug_Proc(
5370 IN PRTMP_ADAPTER pAd,
5371 IN PUCHAR arg);
5372 #endif
5374 INT Show_DescInfo_Proc(
5375 IN PRTMP_ADAPTER pAd,
5376 IN PUCHAR arg);
5378 INT Set_ResetStatCounter_Proc(
5379 IN PRTMP_ADAPTER pAd,
5380 IN PUCHAR arg);
5382 INT Set_BASetup_Proc(
5383 IN PRTMP_ADAPTER pAd,
5384 IN PUCHAR arg);
5386 INT Set_BADecline_Proc(
5387 IN PRTMP_ADAPTER pAd,
5388 IN PUCHAR arg);
5390 INT Set_BAOriTearDown_Proc(
5391 IN PRTMP_ADAPTER pAd,
5392 IN PUCHAR arg);
5394 INT Set_BARecTearDown_Proc(
5395 IN PRTMP_ADAPTER pAd,
5396 IN PUCHAR arg);
5398 INT Set_HtBw_Proc(
5399 IN PRTMP_ADAPTER pAd,
5400 IN PUCHAR arg);
5402 INT Set_HtMcs_Proc(
5403 IN PRTMP_ADAPTER pAd,
5404 IN PUCHAR arg);
5406 INT Set_HtGi_Proc(
5407 IN PRTMP_ADAPTER pAd,
5408 IN PUCHAR arg);
5410 INT Set_HtOpMode_Proc(
5411 IN PRTMP_ADAPTER pAd,
5412 IN PUCHAR arg);
5414 INT Set_HtStbc_Proc(
5415 IN PRTMP_ADAPTER pAd,
5416 IN PUCHAR arg);
5418 INT Set_HtHtc_Proc(
5419 IN PRTMP_ADAPTER pAd,
5420 IN PUCHAR arg);
5422 INT Set_HtExtcha_Proc(
5423 IN PRTMP_ADAPTER pAd,
5424 IN PUCHAR arg);
5426 INT Set_HtMpduDensity_Proc(
5427 IN PRTMP_ADAPTER pAd,
5428 IN PUCHAR arg);
5430 INT Set_HtBaWinSize_Proc(
5431 IN PRTMP_ADAPTER pAd,
5432 IN PUCHAR arg);
5434 INT Set_HtRdg_Proc(
5435 IN PRTMP_ADAPTER pAd,
5436 IN PUCHAR arg);
5438 INT Set_HtLinkAdapt_Proc(
5439 IN PRTMP_ADAPTER pAd,
5440 IN PUCHAR arg);
5442 INT Set_HtAmsdu_Proc(
5443 IN PRTMP_ADAPTER pAd,
5444 IN PUCHAR arg);
5446 INT Set_HtAutoBa_Proc(
5447 IN PRTMP_ADAPTER pAd,
5448 IN PUCHAR arg);
5450 INT Set_HtProtect_Proc(
5451 IN PRTMP_ADAPTER pAd,
5452 IN PUCHAR arg);
5454 INT Set_HtMimoPs_Proc(
5455 IN PRTMP_ADAPTER pAd,
5456 IN PUCHAR arg);
5459 INT Set_ForceShortGI_Proc(
5460 IN PRTMP_ADAPTER pAd,
5461 IN PUCHAR arg);
5463 INT Set_ForceGF_Proc(
5464 IN PRTMP_ADAPTER pAd,
5465 IN PUCHAR arg);
5467 INT SetCommonHT(
5468 IN PRTMP_ADAPTER pAd);
5470 INT Set_SendPSMPAction_Proc(
5471 IN PRTMP_ADAPTER pAd,
5472 IN PUCHAR arg);
5474 INT Set_HtMIMOPSmode_Proc(
5475 IN PRTMP_ADAPTER pAd,
5476 IN PUCHAR arg);
5479 INT Set_HtTxBASize_Proc(
5480 IN PRTMP_ADAPTER pAd,
5481 IN PUCHAR arg);
5483 INT WpaCheckEapCode(
5484 IN PRTMP_ADAPTER pAd,
5485 IN PUCHAR pFrame,
5486 IN USHORT FrameLen,
5487 IN USHORT OffSet);
5489 VOID WpaSendMicFailureToWpaSupplicant(
5490 IN PRTMP_ADAPTER pAd,
5491 IN BOOLEAN bUnicast);
5493 int wext_notify_event_assoc(
5494 IN RTMP_ADAPTER *pAd);
5496 BOOLEAN STARxDoneInterruptHandle(
5497 IN PRTMP_ADAPTER pAd,
5498 IN BOOLEAN argc);
5500 // AMPDU packet indication
5501 VOID Indicate_AMPDU_Packet(
5502 IN PRTMP_ADAPTER pAd,
5503 IN RX_BLK *pRxBlk,
5504 IN UCHAR FromWhichBSSID);
5506 // AMSDU packet indication
5507 VOID Indicate_AMSDU_Packet(
5508 IN PRTMP_ADAPTER pAd,
5509 IN RX_BLK *pRxBlk,
5510 IN UCHAR FromWhichBSSID);
5512 // Normal legacy Rx packet indication
5513 VOID Indicate_Legacy_Packet(
5514 IN PRTMP_ADAPTER pAd,
5515 IN RX_BLK *pRxBlk,
5516 IN UCHAR FromWhichBSSID);
5518 VOID Indicate_EAPOL_Packet(
5519 IN PRTMP_ADAPTER pAd,
5520 IN RX_BLK *pRxBlk,
5521 IN UCHAR FromWhichBSSID);
5523 void update_os_packet_info(
5524 IN PRTMP_ADAPTER pAd,
5525 IN RX_BLK *pRxBlk,
5526 IN UCHAR FromWhichBSSID);
5528 void wlan_802_11_to_802_3_packet(
5529 IN PRTMP_ADAPTER pAd,
5530 IN RX_BLK *pRxBlk,
5531 IN PUCHAR pHeader802_3,
5532 IN UCHAR FromWhichBSSID);
5534 UINT deaggregate_AMSDU_announce(
5535 IN PRTMP_ADAPTER pAd,
5536 PNDIS_PACKET pPacket,
5537 IN PUCHAR pData,
5538 IN ULONG DataSize);
5540 // remove LLC and get 802_3 Header
5541 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
5543 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
5545 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
5547 _pDA = _pRxBlk->pHeader->Addr3; \
5548 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
5550 else \
5552 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
5554 _pDA = _pRxBlk->pHeader->Addr1; \
5555 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
5556 _pSA = _pRxBlk->pHeader->Addr2; \
5557 else \
5558 _pSA = _pRxBlk->pHeader->Addr3; \
5560 else \
5562 _pDA = _pRxBlk->pHeader->Addr1; \
5563 _pSA = _pRxBlk->pHeader->Addr2; \
5567 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
5568 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
5571 VOID Sta_Announce_or_Forward_802_3_Packet(
5572 IN PRTMP_ADAPTER pAd,
5573 IN PNDIS_PACKET pPacket,
5574 IN UCHAR FromWhichBSSID);
5576 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
5577 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
5578 //announce_802_3_packet(_pAd, _pPacket);
5580 PNDIS_PACKET DuplicatePacket(
5581 IN PRTMP_ADAPTER pAd,
5582 IN PNDIS_PACKET pPacket,
5583 IN UCHAR FromWhichBSSID);
5586 PNDIS_PACKET ClonePacket(
5587 IN PRTMP_ADAPTER pAd,
5588 IN PNDIS_PACKET pPacket,
5589 IN PUCHAR pData,
5590 IN ULONG DataSize);
5593 // Normal, AMPDU or AMSDU
5594 VOID CmmRxnonRalinkFrameIndicate(
5595 IN PRTMP_ADAPTER pAd,
5596 IN RX_BLK *pRxBlk,
5597 IN UCHAR FromWhichBSSID);
5599 VOID CmmRxRalinkFrameIndicate(
5600 IN PRTMP_ADAPTER pAd,
5601 IN MAC_TABLE_ENTRY *pEntry,
5602 IN RX_BLK *pRxBlk,
5603 IN UCHAR FromWhichBSSID);
5605 VOID Update_Rssi_Sample(
5606 IN PRTMP_ADAPTER pAd,
5607 IN RSSI_SAMPLE *pRssi,
5608 IN PRXWI_STRUC pRxWI);
5610 PNDIS_PACKET RTMPDeFragmentDataFrame(
5611 IN PRTMP_ADAPTER pAd,
5612 IN RX_BLK *pRxBlk);
5614 ////////////////////////////////////////
5615 enum {
5616 DIDmsg_lnxind_wlansniffrm = 0x00000044,
5617 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
5618 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
5619 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
5620 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
5621 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
5622 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
5623 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
5624 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
5625 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
5626 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
5628 enum {
5629 P80211ENUM_msgitem_status_no_value = 0x00
5631 enum {
5632 P80211ENUM_truth_false = 0x00,
5633 P80211ENUM_truth_true = 0x01
5636 /* Definition from madwifi */
5637 typedef struct {
5638 UINT32 did;
5639 UINT16 status;
5640 UINT16 len;
5641 UINT32 data;
5642 } p80211item_uint32_t;
5644 typedef struct {
5645 UINT32 msgcode;
5646 UINT32 msglen;
5647 #define WLAN_DEVNAMELEN_MAX 16
5648 UINT8 devname[WLAN_DEVNAMELEN_MAX];
5649 p80211item_uint32_t hosttime;
5650 p80211item_uint32_t mactime;
5651 p80211item_uint32_t channel;
5652 p80211item_uint32_t rssi;
5653 p80211item_uint32_t sq;
5654 p80211item_uint32_t signal;
5655 p80211item_uint32_t noise;
5656 p80211item_uint32_t rate;
5657 p80211item_uint32_t istx;
5658 p80211item_uint32_t frmlen;
5659 } wlan_ng_prism2_header;
5661 /* The radio capture header precedes the 802.11 header. */
5662 typedef struct PACKED _ieee80211_radiotap_header {
5663 UINT8 it_version; /* Version 0. Only increases
5664 * for drastic changes,
5665 * introduction of compatible
5666 * new fields does not count.
5668 UINT8 it_pad;
5669 UINT16 it_len; /* length of the whole
5670 * header in bytes, including
5671 * it_version, it_pad,
5672 * it_len, and data fields.
5674 UINT32 it_present; /* A bitmap telling which
5675 * fields are present. Set bit 31
5676 * (0x80000000) to extend the
5677 * bitmap by another 32 bits.
5678 * Additional extensions are made
5679 * by setting bit 31.
5681 }ieee80211_radiotap_header ;
5683 enum ieee80211_radiotap_type {
5684 IEEE80211_RADIOTAP_TSFT = 0,
5685 IEEE80211_RADIOTAP_FLAGS = 1,
5686 IEEE80211_RADIOTAP_RATE = 2,
5687 IEEE80211_RADIOTAP_CHANNEL = 3,
5688 IEEE80211_RADIOTAP_FHSS = 4,
5689 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
5690 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
5691 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
5692 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
5693 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
5694 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
5695 IEEE80211_RADIOTAP_ANTENNA = 11,
5696 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
5697 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
5700 #define WLAN_RADIOTAP_PRESENT ( \
5701 (1 << IEEE80211_RADIOTAP_TSFT) | \
5702 (1 << IEEE80211_RADIOTAP_FLAGS) | \
5703 (1 << IEEE80211_RADIOTAP_RATE) | \
5706 typedef struct _wlan_radiotap_header {
5707 ieee80211_radiotap_header wt_ihdr;
5708 INT64 wt_tsft;
5709 UINT8 wt_flags;
5710 UINT8 wt_rate;
5711 } wlan_radiotap_header;
5712 /* Definition from madwifi */
5714 void send_monitor_packets(
5715 IN PRTMP_ADAPTER pAd,
5716 IN RX_BLK *pRxBlk);
5718 // This function will be called when query /proc
5719 struct iw_statistics *rt28xx_get_wireless_stats(
5720 IN struct net_device *net_dev);
5722 VOID RTMPSetDesiredRates(
5723 IN PRTMP_ADAPTER pAdapter,
5724 IN LONG Rates);
5726 INT Set_FixedTxMode_Proc(
5727 IN PRTMP_ADAPTER pAd,
5728 IN PUCHAR arg);
5730 static inline char* GetPhyMode(
5731 int Mode)
5733 switch(Mode)
5735 case MODE_CCK:
5736 return "CCK";
5738 case MODE_OFDM:
5739 return "OFDM";
5740 case MODE_HTMIX:
5741 return "HTMIX";
5743 case MODE_HTGREENFIELD:
5744 return "GREEN";
5745 default:
5746 return "N/A";
5751 static inline char* GetBW(
5752 int BW)
5754 switch(BW)
5756 case BW_10:
5757 return "10M";
5759 case BW_20:
5760 return "20M";
5761 case BW_40:
5762 return "40M";
5763 default:
5764 return "N/A";
5769 VOID RT28xxThreadTerminate(
5770 IN RTMP_ADAPTER *pAd);
5772 BOOLEAN RT28XXChipsetCheck(
5773 IN void *_dev_p);
5775 BOOLEAN RT28XXNetDevInit(
5776 IN void *_dev_p,
5777 IN struct net_device *net_dev,
5778 IN RTMP_ADAPTER *pAd);
5780 BOOLEAN RT28XXProbePostConfig(
5781 IN void *_dev_p,
5782 IN RTMP_ADAPTER *pAd,
5783 IN INT32 argc);
5785 VOID RT28XXDMADisable(
5786 IN RTMP_ADAPTER *pAd);
5788 VOID RT28XXDMAEnable(
5789 IN RTMP_ADAPTER *pAd);
5791 VOID RT28xx_UpdateBeaconToAsic(
5792 IN RTMP_ADAPTER * pAd,
5793 IN INT apidx,
5794 IN ULONG BeaconLen,
5795 IN ULONG UpdatePos);
5797 INT rt28xx_sta_ioctl(
5798 IN struct net_device *net_dev,
5799 IN OUT struct ifreq *rq,
5800 IN INT cmd);
5802 ////////////////////////////////////////
5803 PNDIS_PACKET GetPacketFromRxRing(
5804 IN PRTMP_ADAPTER pAd,
5805 OUT PRT28XX_RXD_STRUC pSaveRxD,
5806 OUT BOOLEAN *pbReschedule,
5807 IN OUT UINT32 *pRxPending);
5810 void kill_thread_task(PRTMP_ADAPTER pAd);
5812 void tbtt_tasklet(unsigned long data);
5814 #ifdef RT2860
5816 // Function Prototype in cmm_data_2860.c
5818 USHORT RtmpPCI_WriteTxResource(
5819 IN PRTMP_ADAPTER pAd,
5820 IN TX_BLK *pTxBlk,
5821 IN BOOLEAN bIsLast,
5822 OUT USHORT *FreeNumber);
5824 USHORT RtmpPCI_WriteSingleTxResource(
5825 IN PRTMP_ADAPTER pAd,
5826 IN TX_BLK *pTxBlk,
5827 IN BOOLEAN bIsLast,
5828 OUT USHORT *FreeNumber);
5830 USHORT RtmpPCI_WriteMultiTxResource(
5831 IN PRTMP_ADAPTER pAd,
5832 IN TX_BLK *pTxBlk,
5833 IN UCHAR frameNum,
5834 OUT USHORT *FreeNumber);
5836 USHORT RtmpPCI_WriteFragTxResource(
5837 IN PRTMP_ADAPTER pAd,
5838 IN TX_BLK *pTxBlk,
5839 IN UCHAR fragNum,
5840 OUT USHORT *FreeNumber);
5842 USHORT RtmpPCI_WriteSubTxResource(
5843 IN PRTMP_ADAPTER pAd,
5844 IN TX_BLK *pTxBlk,
5845 IN BOOLEAN bIsLast,
5846 OUT USHORT *FreeNumber);
5848 VOID RtmpPCI_FinalWriteTxResource(
5849 IN PRTMP_ADAPTER pAd,
5850 IN TX_BLK *pTxBlk,
5851 IN USHORT totalMPDUSize,
5852 IN USHORT FirstTxIdx);
5854 VOID RtmpPCIDataLastTxIdx(
5855 IN PRTMP_ADAPTER pAd,
5856 IN UCHAR QueIdx,
5857 IN USHORT LastTxIdx);
5859 VOID RtmpPCIDataKickOut(
5860 IN PRTMP_ADAPTER pAd,
5861 IN TX_BLK *pTxBlk,
5862 IN UCHAR QueIdx);
5865 int RtmpPCIMgmtKickOut(
5866 IN RTMP_ADAPTER *pAd,
5867 IN UCHAR QueIdx,
5868 IN PNDIS_PACKET pPacket,
5869 IN PUCHAR pSrcBufVA,
5870 IN UINT SrcBufLen);
5873 NDIS_STATUS RTMPCheckRxError(
5874 IN PRTMP_ADAPTER pAd,
5875 IN PHEADER_802_11 pHeader,
5876 IN PRXWI_STRUC pRxWI,
5877 IN PRT28XX_RXD_STRUC pRxD);
5879 VOID RTMPInitPCIeLinkCtrlValue(
5880 IN PRTMP_ADAPTER pAd);
5882 VOID RTMPFindHostPCIDev(
5883 IN PRTMP_ADAPTER pAd);
5885 VOID RTMPPCIeLinkCtrlValueRestore(
5886 IN PRTMP_ADAPTER pAd,
5887 IN UCHAR Level);
5889 VOID RTMPPCIeLinkCtrlSetting(
5890 IN PRTMP_ADAPTER pAd,
5891 IN USHORT Max);
5893 VOID RT28xxPciAsicRadioOff(
5894 IN PRTMP_ADAPTER pAd,
5895 IN UCHAR Level,
5896 IN USHORT TbttNumToNextWakeUp);
5898 BOOLEAN RT28xxPciAsicRadioOn(
5899 IN PRTMP_ADAPTER pAd,
5900 IN UCHAR Level);
5902 VOID RT28xxPciStaAsicForceWakeup(
5903 IN PRTMP_ADAPTER pAd,
5904 IN UCHAR Level);
5906 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
5907 IN PRTMP_ADAPTER pAd,
5908 IN USHORT TbttNumToNextWakeUp);
5910 VOID PsPollWakeExec(
5911 IN PVOID SystemSpecific1,
5912 IN PVOID FunctionContext,
5913 IN PVOID SystemSpecific2,
5914 IN PVOID SystemSpecific3);
5916 VOID RadioOnExec(
5917 IN PVOID SystemSpecific1,
5918 IN PVOID FunctionContext,
5919 IN PVOID SystemSpecific2,
5920 IN PVOID SystemSpecific3);
5922 VOID RT28xxPciMlmeRadioOn(
5923 IN PRTMP_ADAPTER pAd);
5925 VOID RT28xxPciMlmeRadioOFF(
5926 IN PRTMP_ADAPTER pAd);
5927 #endif /* RT2860 */
5929 VOID AsicTurnOffRFClk(
5930 IN PRTMP_ADAPTER pAd,
5931 IN UCHAR Channel);
5933 VOID AsicTurnOnRFClk(
5934 IN PRTMP_ADAPTER pAd,
5935 IN UCHAR Channel);
5937 NTSTATUS RT30xxWriteRFRegister(
5938 IN PRTMP_ADAPTER pAd,
5939 IN UCHAR RegID,
5940 IN UCHAR Value);
5942 NTSTATUS RT30xxReadRFRegister(
5943 IN PRTMP_ADAPTER pAd,
5944 IN UCHAR RegID,
5945 IN PUCHAR pValue);
5947 UCHAR eFuseReadRegisters(
5948 IN PRTMP_ADAPTER pAd,
5949 IN USHORT Offset,
5950 IN USHORT Length,
5951 OUT USHORT* pData);
5953 VOID eFuseReadPhysical(
5954 IN PRTMP_ADAPTER pAd,
5955 IN PUSHORT lpInBuffer,
5956 IN ULONG nInBufferSize,
5957 OUT PUSHORT lpOutBuffer,
5958 IN ULONG nOutBufferSize
5961 NTSTATUS eFuseRead(
5962 IN PRTMP_ADAPTER pAd,
5963 IN USHORT Offset,
5964 OUT PUCHAR pData,
5965 IN USHORT Length);
5967 VOID eFusePhysicalWriteRegisters(
5968 IN PRTMP_ADAPTER pAd,
5969 IN USHORT Offset,
5970 IN USHORT Length,
5971 OUT USHORT* pData);
5973 NTSTATUS eFuseWriteRegisters(
5974 IN PRTMP_ADAPTER pAd,
5975 IN USHORT Offset,
5976 IN USHORT Length,
5977 IN USHORT* pData);
5979 VOID eFuseWritePhysical(
5980 IN PRTMP_ADAPTER pAd,
5981 PUSHORT lpInBuffer,
5982 ULONG nInBufferSize,
5983 PUCHAR lpOutBuffer,
5984 ULONG nOutBufferSize
5987 NTSTATUS eFuseWrite(
5988 IN PRTMP_ADAPTER pAd,
5989 IN USHORT Offset,
5990 IN PUCHAR pData,
5991 IN USHORT length);
5993 INT set_eFuseGetFreeBlockCount_Proc(
5994 IN PRTMP_ADAPTER pAd,
5995 IN PUCHAR arg);
5997 INT set_eFusedump_Proc(
5998 IN PRTMP_ADAPTER pAd,
5999 IN PUCHAR arg);
6001 INT set_eFuseLoadFromBin_Proc(
6002 IN PRTMP_ADAPTER pAd,
6003 IN PUCHAR arg);
6005 NTSTATUS eFuseWriteRegistersFromBin(
6006 IN PRTMP_ADAPTER pAd,
6007 IN USHORT Offset,
6008 IN USHORT Length,
6009 IN USHORT* pData);
6011 VOID eFusePhysicalReadRegisters(
6012 IN PRTMP_ADAPTER pAd,
6013 IN USHORT Offset,
6014 IN USHORT Length,
6015 OUT USHORT* pData);
6017 VOID RT30xxLoadRFNormalModeSetup(
6018 IN PRTMP_ADAPTER pAd);
6020 VOID RT30xxLoadRFSleepModeSetup(
6021 IN PRTMP_ADAPTER pAd);
6023 VOID RT30xxReverseRFSleepModeSetup(
6024 IN PRTMP_ADAPTER pAd);
6026 #ifdef RT2870
6028 // Function Prototype in rtusb_bulk.c
6030 VOID RTUSBInitTxDesc(
6031 IN PRTMP_ADAPTER pAd,
6032 IN PTX_CONTEXT pTxContext,
6033 IN UCHAR BulkOutPipeId,
6034 IN usb_complete_t Func);
6036 VOID RTUSBInitHTTxDesc(
6037 IN PRTMP_ADAPTER pAd,
6038 IN PHT_TX_CONTEXT pTxContext,
6039 IN UCHAR BulkOutPipeId,
6040 IN ULONG BulkOutSize,
6041 IN usb_complete_t Func);
6043 VOID RTUSBCleanUpDataBulkOutQueue(
6044 IN PRTMP_ADAPTER pAd);
6046 VOID RTUSBCancelPendingBulkOutIRP(
6047 IN PRTMP_ADAPTER pAd);
6049 VOID RTUSBBulkOutDataPacket(
6050 IN PRTMP_ADAPTER pAd,
6051 IN UCHAR BulkOutPipeId,
6052 IN UCHAR Index);
6054 VOID RTUSBBulkOutNullFrame(
6055 IN PRTMP_ADAPTER pAd);
6057 VOID RTUSBBulkOutRTSFrame(
6058 IN PRTMP_ADAPTER pAd);
6060 VOID RTUSBCancelPendingBulkInIRP(
6061 IN PRTMP_ADAPTER pAd);
6063 VOID RTUSBCancelPendingIRPs(
6064 IN PRTMP_ADAPTER pAd);
6066 VOID RTUSBBulkOutMLMEPacket(
6067 IN PRTMP_ADAPTER pAd,
6068 IN UCHAR Index);
6070 VOID RTUSBBulkOutPsPoll(
6071 IN PRTMP_ADAPTER pAd);
6073 VOID RTUSBCleanUpMLMEBulkOutQueue(
6074 IN PRTMP_ADAPTER pAd);
6076 VOID RTUSBKickBulkOut(
6077 IN PRTMP_ADAPTER pAd);
6079 VOID RTUSBBulkReceive(
6080 IN PRTMP_ADAPTER pAd);
6082 VOID DoBulkIn(
6083 IN RTMP_ADAPTER *pAd);
6085 VOID RTUSBInitRxDesc(
6086 IN PRTMP_ADAPTER pAd,
6087 IN PRX_CONTEXT pRxContext);
6090 // Function Prototype in rtusb_io.c
6092 NTSTATUS RTUSBMultiRead(
6093 IN PRTMP_ADAPTER pAd,
6094 IN USHORT Offset,
6095 OUT PUCHAR pData,
6096 IN USHORT length);
6098 NTSTATUS RTUSBMultiWrite(
6099 IN PRTMP_ADAPTER pAd,
6100 IN USHORT Offset,
6101 IN PUCHAR pData,
6102 IN USHORT length);
6104 NTSTATUS RTUSBMultiWrite_OneByte(
6105 IN PRTMP_ADAPTER pAd,
6106 IN USHORT Offset,
6107 IN PUCHAR pData);
6109 NTSTATUS RTUSBReadBBPRegister(
6110 IN PRTMP_ADAPTER pAd,
6111 IN UCHAR Id,
6112 IN PUCHAR pValue);
6114 NTSTATUS RTUSBWriteBBPRegister(
6115 IN PRTMP_ADAPTER pAd,
6116 IN UCHAR Id,
6117 IN UCHAR Value);
6119 NTSTATUS RTUSBWriteRFRegister(
6120 IN PRTMP_ADAPTER pAd,
6121 IN UINT32 Value);
6123 NTSTATUS RTUSB_VendorRequest(
6124 IN PRTMP_ADAPTER pAd,
6125 IN UINT32 TransferFlags,
6126 IN UCHAR ReservedBits,
6127 IN UCHAR Request,
6128 IN USHORT Value,
6129 IN USHORT Index,
6130 IN PVOID TransferBuffer,
6131 IN UINT32 TransferBufferLength);
6133 NTSTATUS RTUSBReadEEPROM(
6134 IN PRTMP_ADAPTER pAd,
6135 IN USHORT Offset,
6136 OUT PUCHAR pData,
6137 IN USHORT length);
6139 NTSTATUS RTUSBWriteEEPROM(
6140 IN PRTMP_ADAPTER pAd,
6141 IN USHORT Offset,
6142 IN PUCHAR pData,
6143 IN USHORT length);
6145 VOID RTUSBPutToSleep(
6146 IN PRTMP_ADAPTER pAd);
6148 NTSTATUS RTUSBWakeUp(
6149 IN PRTMP_ADAPTER pAd);
6151 VOID RTUSBInitializeCmdQ(
6152 IN PCmdQ cmdq);
6154 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6155 IN PRTMP_ADAPTER pAd,
6156 IN NDIS_OID Oid,
6157 IN BOOLEAN SetInformation,
6158 IN PVOID pInformationBuffer,
6159 IN UINT32 InformationBufferLength);
6161 NDIS_STATUS RTUSBEnqueueInternalCmd(
6162 IN PRTMP_ADAPTER pAd,
6163 IN NDIS_OID Oid,
6164 IN PVOID pInformationBuffer,
6165 IN UINT32 InformationBufferLength);
6167 VOID RTUSBDequeueCmd(
6168 IN PCmdQ cmdq,
6169 OUT PCmdQElmt *pcmdqelmt);
6171 INT RTUSBCmdThread(
6172 IN OUT PVOID Context);
6174 INT TimerQThread(
6175 IN OUT PVOID Context);
6177 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6178 IN RTMP_ADAPTER *pAd,
6179 IN RALINK_TIMER_STRUCT *pTimer);
6181 BOOLEAN RT2870_TimerQ_Remove(
6182 IN RTMP_ADAPTER *pAd,
6183 IN RALINK_TIMER_STRUCT *pTimer);
6185 void RT2870_TimerQ_Exit(
6186 IN RTMP_ADAPTER *pAd);
6188 void RT2870_TimerQ_Init(
6189 IN RTMP_ADAPTER *pAd);
6191 VOID RT2870_BssBeaconExit(
6192 IN RTMP_ADAPTER *pAd);
6194 VOID RT2870_BssBeaconStop(
6195 IN RTMP_ADAPTER *pAd);
6197 VOID RT2870_BssBeaconStart(
6198 IN RTMP_ADAPTER * pAd);
6200 VOID RT2870_BssBeaconInit(
6201 IN RTMP_ADAPTER *pAd);
6203 VOID RT2870_WatchDog(
6204 IN RTMP_ADAPTER *pAd);
6206 NTSTATUS RTUSBWriteMACRegister(
6207 IN PRTMP_ADAPTER pAd,
6208 IN USHORT Offset,
6209 IN UINT32 Value);
6211 NTSTATUS RTUSBReadMACRegister(
6212 IN PRTMP_ADAPTER pAd,
6213 IN USHORT Offset,
6214 OUT PUINT32 pValue);
6216 NTSTATUS RTUSBSingleWrite(
6217 IN RTMP_ADAPTER *pAd,
6218 IN USHORT Offset,
6219 IN USHORT Value);
6221 NTSTATUS RTUSBFirmwareRun(
6222 IN PRTMP_ADAPTER pAd);
6224 NTSTATUS RTUSBFirmwareWrite(
6225 IN PRTMP_ADAPTER pAd,
6226 IN PUCHAR pFwImage,
6227 IN ULONG FwLen);
6229 NTSTATUS RTUSBFirmwareOpmode(
6230 IN PRTMP_ADAPTER pAd,
6231 OUT PUINT32 pValue);
6233 NTSTATUS RTUSBVenderReset(
6234 IN PRTMP_ADAPTER pAd);
6236 VOID CMDHandler(
6237 IN PRTMP_ADAPTER pAd);
6240 NDIS_STATUS CreateThreads(
6241 IN struct net_device *net_dev );
6244 VOID MacTableInitialize(
6245 IN PRTMP_ADAPTER pAd);
6247 VOID MlmeSetPsm(
6248 IN PRTMP_ADAPTER pAd,
6249 IN USHORT psm);
6251 NDIS_STATUS RTMPWPAAddKeyProc(
6252 IN PRTMP_ADAPTER pAd,
6253 IN PVOID pBuf);
6255 VOID AsicRxAntEvalAction(
6256 IN PRTMP_ADAPTER pAd);
6258 NDIS_STATUS RTMPCheckRxError(
6259 IN PRTMP_ADAPTER pAd,
6260 IN PHEADER_802_11 pHeader,
6261 IN PRXWI_STRUC pRxWI,
6262 IN PRT28XX_RXD_STRUC pRxINFO);
6264 INT MlmeThread(
6265 IN PVOID Context);
6268 // Function Prototype in rtusb_data.c
6270 NDIS_STATUS RTUSBFreeDescriptorRequest(
6271 IN PRTMP_ADAPTER pAd,
6272 IN UCHAR BulkOutPipeId,
6273 IN UINT32 NumberRequired);
6276 BOOLEAN RTUSBNeedQueueBackForAgg(
6277 IN RTMP_ADAPTER *pAd,
6278 IN UCHAR BulkOutPipeId);
6281 VOID RTMPWriteTxInfo(
6282 IN PRTMP_ADAPTER pAd,
6283 IN PTXINFO_STRUC pTxInfo,
6284 IN USHORT USBDMApktLen,
6285 IN BOOLEAN bWiv,
6286 IN UCHAR QueueSel,
6287 IN UCHAR NextValid,
6288 IN UCHAR TxBurst);
6291 // Function Prototype in cmm_data_2870.c
6293 USHORT RtmpUSB_WriteSubTxResource(
6294 IN PRTMP_ADAPTER pAd,
6295 IN TX_BLK *pTxBlk,
6296 IN BOOLEAN bIsLast,
6297 OUT USHORT *FreeNumber);
6299 USHORT RtmpUSB_WriteSingleTxResource(
6300 IN PRTMP_ADAPTER pAd,
6301 IN TX_BLK *pTxBlk,
6302 IN BOOLEAN bIsLast,
6303 OUT USHORT *FreeNumber);
6305 USHORT RtmpUSB_WriteFragTxResource(
6306 IN PRTMP_ADAPTER pAd,
6307 IN TX_BLK *pTxBlk,
6308 IN UCHAR fragNum,
6309 OUT USHORT *FreeNumber);
6311 USHORT RtmpUSB_WriteMultiTxResource(
6312 IN PRTMP_ADAPTER pAd,
6313 IN TX_BLK *pTxBlk,
6314 IN UCHAR frameNum,
6315 OUT USHORT *FreeNumber);
6317 VOID RtmpUSB_FinalWriteTxResource(
6318 IN PRTMP_ADAPTER pAd,
6319 IN TX_BLK *pTxBlk,
6320 IN USHORT totalMPDUSize,
6321 #ifdef RT2860
6322 IN USHORT FirstTxIdx);
6323 #endif
6324 IN USHORT TxIdx);
6326 VOID RtmpUSBDataLastTxIdx(
6327 IN PRTMP_ADAPTER pAd,
6328 IN UCHAR QueIdx,
6329 IN USHORT TxIdx);
6331 VOID RtmpUSBDataKickOut(
6332 IN PRTMP_ADAPTER pAd,
6333 IN TX_BLK *pTxBlk,
6334 IN UCHAR QueIdx);
6337 int RtmpUSBMgmtKickOut(
6338 IN RTMP_ADAPTER *pAd,
6339 IN UCHAR QueIdx,
6340 IN PNDIS_PACKET pPacket,
6341 IN PUCHAR pSrcBufVA,
6342 IN UINT SrcBufLen);
6344 VOID RtmpUSBNullFrameKickOut(
6345 IN RTMP_ADAPTER *pAd,
6346 IN UCHAR QueIdx,
6347 IN UCHAR *pNullFrame,
6348 IN UINT32 frameLen);
6350 VOID RT28xxUsbStaAsicForceWakeup(
6351 IN PRTMP_ADAPTER pAd,
6352 IN BOOLEAN bFromTx);
6354 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
6355 IN PRTMP_ADAPTER pAd,
6356 IN USHORT TbttNumToNextWakeUp);
6358 VOID RT28xxUsbMlmeRadioOn(
6359 IN PRTMP_ADAPTER pAd);
6361 VOID RT28xxUsbMlmeRadioOFF(
6362 IN PRTMP_ADAPTER pAd);
6363 #endif // RT2870 //
6365 INT RTMPShowCfgValue(
6366 IN PRTMP_ADAPTER pAd,
6367 IN PUCHAR pName,
6368 IN PUCHAR pBuf);
6370 PCHAR RTMPGetRalinkAuthModeStr(
6371 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6373 PCHAR RTMPGetRalinkEncryModeStr(
6374 IN USHORT encryMode);
6376 VOID AsicStaBbpTuning(
6377 IN PRTMP_ADAPTER pAd);
6379 #ifdef RT2860
6380 VOID AsicResetFromDMABusy(
6381 IN PRTMP_ADAPTER pAd);
6383 VOID AsicResetBBP(
6384 IN PRTMP_ADAPTER pAd);
6386 VOID AsicResetMAC(
6387 IN PRTMP_ADAPTER pAd);
6389 VOID AsicResetPBF(
6390 IN PRTMP_ADAPTER pAd);
6391 #endif
6392 #ifdef RT2870
6393 BOOLEAN StaAddMacTableEntry(
6394 IN PRTMP_ADAPTER pAd,
6395 IN PMAC_TABLE_ENTRY pEntry,
6396 IN UCHAR MaxSupportedRateIn500Kbps,
6397 IN HT_CAPABILITY_IE *pHtCapability,
6398 IN UCHAR HtCapabilityLen,
6399 IN USHORT CapabilityInfo);
6400 #endif
6402 void RTMP_IndicateMediaState(
6403 IN PRTMP_ADAPTER pAd);
6405 VOID ReSyncBeaconTime(
6406 IN PRTMP_ADAPTER pAd);
6408 VOID RTMPSetAGCInitValue(
6409 IN PRTMP_ADAPTER pAd,
6410 IN UCHAR BandWidth);
6412 int rt28xx_close(IN PNET_DEV dev);
6413 int rt28xx_open(IN PNET_DEV dev);
6415 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6417 if (VIRTUAL_IF_NUM(pAd) == 0)
6419 if (rt28xx_open(pAd->net_dev) != 0)
6420 return -1;
6422 else
6425 VIRTUAL_IF_INC(pAd);
6426 return 0;
6429 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6431 VIRTUAL_IF_DEC(pAd);
6432 if (VIRTUAL_IF_NUM(pAd) == 0)
6433 rt28xx_close(pAd->net_dev);
6434 return;
6438 #endif // __RTMP_H__