Staging: rt3070: remove needless EFUSE_TAG register read
[linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git] / drivers / staging / rt2860 / rtmp.h
blob5356d8ccebdc6e93a651a5db8847cb704ec70d92
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 RT30xx
2942 //======efuse
2943 BOOLEAN bUseEfuse;
2944 BOOLEAN bEEPROMFile;
2945 #endif // RT30xx //
2947 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2950 // Cisco IAPP format
2952 typedef struct _CISCO_IAPP_CONTENT_
2954 USHORT Length; //IAPP Length
2955 UCHAR MessageType; //IAPP type
2956 UCHAR FunctionCode; //IAPP function type
2957 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2958 UCHAR SourceMAC[MAC_ADDR_LEN];
2959 USHORT Tag; //Tag(element IE) - Adjacent AP report
2960 USHORT TagLength; //Length of element not including 4 byte header
2961 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2962 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2963 USHORT Channel;
2964 USHORT SsidLen;
2965 UCHAR Ssid[MAX_LEN_OF_SSID];
2966 USHORT Seconds; //Seconds that the client has been disassociated.
2967 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2969 #define DELAYINTMASK 0x0003fffb
2970 #define INTMASK 0x0003fffb
2971 #define IndMask 0x0003fffc
2972 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2973 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2974 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2975 #define TxCoherent 0x00020000 // tx coherent
2976 #define RxCoherent 0x00010000 // rx coherent
2977 #define McuCommand 0x00000200 // mcu
2978 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2979 #define TBTTInt 0x00000800 // TBTT interrupt
2980 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2981 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2982 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2985 typedef struct _RX_BLK_
2987 RT28XX_RXD_STRUC RxD;
2988 PRXWI_STRUC pRxWI;
2989 PHEADER_802_11 pHeader;
2990 PNDIS_PACKET pRxPacket;
2991 UCHAR *pData;
2992 USHORT DataSize;
2993 USHORT Flags;
2994 UCHAR UserPriority; // for calculate TKIP MIC using
2995 } RX_BLK;
2998 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2999 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3000 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3003 #define fRX_WDS 0x0001
3004 #define fRX_AMSDU 0x0002
3005 #define fRX_ARALINK 0x0004
3006 #define fRX_HTC 0x0008
3007 #define fRX_PAD 0x0010
3008 #define fRX_AMPDU 0x0020
3009 #define fRX_QOS 0x0040
3010 #define fRX_INFRA 0x0080
3011 #define fRX_EAP 0x0100
3012 #define fRX_MESH 0x0200
3013 #define fRX_APCLI 0x0400
3014 #define fRX_DLS 0x0800
3015 #define fRX_WPI 0x1000
3017 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3018 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3019 #define LENGTH_ARALINK_HEADER_FIELD 2
3021 #define TX_UNKOWN_FRAME 0x00
3022 #define TX_MCAST_FRAME 0x01
3023 #define TX_LEGACY_FRAME 0x02
3024 #define TX_AMPDU_FRAME 0x04
3025 #define TX_AMSDU_FRAME 0x08
3026 #define TX_RALINK_FRAME 0x10
3027 #define TX_FRAG_FRAME 0x20
3030 // Currently the sizeof(TX_BLK) is 148 bytes.
3031 typedef struct _TX_BLK_
3033 UCHAR QueIdx;
3034 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3035 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3036 USHORT TotalFragNum; // Total frame fragments required in one batch
3037 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3039 QUEUE_HEADER TxPacketList;
3040 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3041 HTTRANSMIT_SETTING *pTransmit;
3043 // Following structure used for the characteristics of a specific packet.
3044 PNDIS_PACKET pPacket;
3045 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3046 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3047 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3048 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3049 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3050 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3051 UCHAR HdrPadLen; // recording Header Padding Length;
3052 UCHAR apidx; // The interface associated to this packet
3053 UCHAR Wcid; // The MAC entry associated to this packet
3054 UCHAR UserPriority; // priority class of packet
3055 UCHAR FrameGap; // what kind of IFS this packet use
3056 UCHAR MpduReqNum; // number of fragments of this frame
3057 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3058 UCHAR CipherAlg; // cipher alogrithm
3059 PCIPHER_KEY pKey;
3063 USHORT Flags; //See following definitions for detail.
3065 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3066 ULONG Priv; // Hardware specific value saved in here.
3067 } TX_BLK, *PTX_BLK;
3070 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3071 #define fTX_bAckRequired 0x0002 // the packet need ack response
3072 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3073 #define fTX_bHTRate 0x0008 // allow to use HT rate
3074 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3075 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3076 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3077 #define fTX_bWMM 0x0080 // QOS Data
3079 #define fTX_bClearEAPFrame 0x0100
3081 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3082 do { \
3083 if (value) \
3084 (_pTxBlk->Flags |= _flag) \
3085 else \
3086 (_pTxBlk->Flags &= ~(_flag)) \
3087 }while(0)
3089 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3090 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3091 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3097 //------------------------------------------------------------------------------------------
3099 #ifdef RT2860
3101 // Enable & Disable NIC interrupt via writing interrupt mask register
3102 // Since it use ADAPTER structure, it have to be put after structure definition.
3104 __inline VOID NICDisableInterrupt(
3105 IN PRTMP_ADAPTER pAd)
3107 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
3108 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3109 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3112 __inline VOID NICEnableInterrupt(
3113 IN PRTMP_ADAPTER pAd)
3116 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3117 // To prevent System hang, we should enalbe the interrupt when
3118 // ASIC is already Wake Up.
3120 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3121 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3122 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3124 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3126 //else
3127 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3129 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3130 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3133 static inline VOID ConvertMulticastIP2MAC(
3134 IN PUCHAR pIpAddr,
3135 IN PUCHAR *ppMacAddr,
3136 IN UINT16 ProtoType)
3138 if (pIpAddr == NULL)
3139 return;
3141 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3142 return;
3144 switch (ProtoType)
3146 case ETH_P_IPV6:
3147 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3148 *(*ppMacAddr) = 0x33;
3149 *(*ppMacAddr + 1) = 0x33;
3150 *(*ppMacAddr + 2) = pIpAddr[12];
3151 *(*ppMacAddr + 3) = pIpAddr[13];
3152 *(*ppMacAddr + 4) = pIpAddr[14];
3153 *(*ppMacAddr + 5) = pIpAddr[15];
3154 break;
3156 case ETH_P_IP:
3157 default:
3158 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3159 *(*ppMacAddr) = 0x01;
3160 *(*ppMacAddr + 1) = 0x00;
3161 *(*ppMacAddr + 2) = 0x5e;
3162 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3163 *(*ppMacAddr + 4) = pIpAddr[2];
3164 *(*ppMacAddr + 5) = pIpAddr[3];
3165 break;
3168 return;
3170 #endif /* RT2860 */
3173 // Private routines in rtmp_init.c
3175 NDIS_STATUS RTMPAllocAdapterBlock(
3176 IN PVOID handle,
3177 OUT PRTMP_ADAPTER *ppAdapter
3180 NDIS_STATUS RTMPAllocTxRxRingMemory(
3181 IN PRTMP_ADAPTER pAd
3184 NDIS_STATUS RTMPReadParametersHook(
3185 IN PRTMP_ADAPTER pAd
3188 VOID RTMPFreeAdapter(
3189 IN PRTMP_ADAPTER pAd
3192 NDIS_STATUS NICReadRegParameters(
3193 IN PRTMP_ADAPTER pAd,
3194 IN NDIS_HANDLE WrapperConfigurationContext
3197 #ifdef RT2870
3198 VOID NICInitRT30xxRFRegisters(
3199 IN PRTMP_ADAPTER pAd);
3200 #endif // RT2870 //
3202 VOID NICReadEEPROMParameters(
3203 IN PRTMP_ADAPTER pAd,
3204 IN PUCHAR mac_addr);
3206 VOID NICInitAsicFromEEPROM(
3207 IN PRTMP_ADAPTER pAd);
3209 VOID NICInitTxRxRingAndBacklogQueue(
3210 IN PRTMP_ADAPTER pAd);
3212 NDIS_STATUS NICInitializeAdapter(
3213 IN PRTMP_ADAPTER pAd,
3214 IN BOOLEAN bHardReset);
3216 NDIS_STATUS NICInitializeAsic(
3217 IN PRTMP_ADAPTER pAd,
3218 IN BOOLEAN bHardReset);
3219 #ifdef RT2860
3220 VOID NICRestoreBBPValue(
3221 IN PRTMP_ADAPTER pAd);
3222 #endif
3223 VOID NICIssueReset(
3224 IN PRTMP_ADAPTER pAd);
3226 VOID RTMPRingCleanUp(
3227 IN PRTMP_ADAPTER pAd,
3228 IN UCHAR RingType);
3230 VOID UserCfgInit(
3231 IN PRTMP_ADAPTER pAd);
3233 VOID NICResetFromError(
3234 IN PRTMP_ADAPTER pAd);
3236 VOID NICEraseFirmware(
3237 IN PRTMP_ADAPTER pAd);
3239 NDIS_STATUS NICLoadFirmware(
3240 IN PRTMP_ADAPTER pAd);
3242 NDIS_STATUS NICLoadRateSwitchingParams(
3243 IN PRTMP_ADAPTER pAd);
3245 BOOLEAN NICCheckForHang(
3246 IN PRTMP_ADAPTER pAd);
3248 VOID NICUpdateFifoStaCounters(
3249 IN PRTMP_ADAPTER pAd);
3251 VOID NICUpdateRawCounters(
3252 IN PRTMP_ADAPTER pAd);
3254 ULONG RTMPNotAllZero(
3255 IN PVOID pSrc1,
3256 IN ULONG Length);
3258 VOID RTMPZeroMemory(
3259 IN PVOID pSrc,
3260 IN ULONG Length);
3262 ULONG RTMPCompareMemory(
3263 IN PVOID pSrc1,
3264 IN PVOID pSrc2,
3265 IN ULONG Length);
3267 VOID RTMPMoveMemory(
3268 OUT PVOID pDest,
3269 IN PVOID pSrc,
3270 IN ULONG Length);
3272 VOID AtoH(
3273 char *src,
3274 UCHAR *dest,
3275 int destlen);
3277 UCHAR BtoH(
3278 char ch);
3280 VOID RTMPPatchMacBbpBug(
3281 IN PRTMP_ADAPTER pAd);
3283 VOID RTMPInitTimer(
3284 IN PRTMP_ADAPTER pAd,
3285 IN PRALINK_TIMER_STRUCT pTimer,
3286 IN PVOID pTimerFunc,
3287 IN PVOID pData,
3288 IN BOOLEAN Repeat);
3290 VOID RTMPSetTimer(
3291 IN PRALINK_TIMER_STRUCT pTimer,
3292 IN ULONG Value);
3295 VOID RTMPModTimer(
3296 IN PRALINK_TIMER_STRUCT pTimer,
3297 IN ULONG Value);
3299 VOID RTMPCancelTimer(
3300 IN PRALINK_TIMER_STRUCT pTimer,
3301 OUT BOOLEAN *pCancelled);
3303 VOID RTMPSetLED(
3304 IN PRTMP_ADAPTER pAd,
3305 IN UCHAR Status);
3307 VOID RTMPSetSignalLED(
3308 IN PRTMP_ADAPTER pAd,
3309 IN NDIS_802_11_RSSI Dbm);
3311 VOID RTMPEnableRxTx(
3312 IN PRTMP_ADAPTER pAd);
3315 // prototype in action.c
3317 VOID ActionStateMachineInit(
3318 IN PRTMP_ADAPTER pAd,
3319 IN STATE_MACHINE *S,
3320 OUT STATE_MACHINE_FUNC Trans[]);
3322 VOID MlmeADDBAAction(
3323 IN PRTMP_ADAPTER pAd,
3324 IN MLME_QUEUE_ELEM *Elem);
3326 VOID MlmeDELBAAction(
3327 IN PRTMP_ADAPTER pAd,
3328 IN MLME_QUEUE_ELEM *Elem);
3330 VOID MlmeDLSAction(
3331 IN PRTMP_ADAPTER pAd,
3332 IN MLME_QUEUE_ELEM *Elem);
3334 VOID MlmeInvalidAction(
3335 IN PRTMP_ADAPTER pAd,
3336 IN MLME_QUEUE_ELEM *Elem);
3338 VOID MlmeQOSAction(
3339 IN PRTMP_ADAPTER pAd,
3340 IN MLME_QUEUE_ELEM *Elem);
3342 VOID PeerAddBAReqAction(
3343 IN PRTMP_ADAPTER pAd,
3344 IN MLME_QUEUE_ELEM *Elem);
3346 VOID PeerAddBARspAction(
3347 IN PRTMP_ADAPTER pAd,
3348 IN MLME_QUEUE_ELEM *Elem);
3350 VOID PeerDelBAAction(
3351 IN PRTMP_ADAPTER pAd,
3352 IN MLME_QUEUE_ELEM *Elem);
3354 VOID PeerBAAction(
3355 IN PRTMP_ADAPTER pAd,
3356 IN MLME_QUEUE_ELEM *Elem);
3358 VOID SendPSMPAction(
3359 IN PRTMP_ADAPTER pAd,
3360 IN UCHAR Wcid,
3361 IN UCHAR Psmp);
3363 VOID PeerRMAction(
3364 IN PRTMP_ADAPTER pAd,
3365 IN MLME_QUEUE_ELEM *Elem);
3367 VOID PeerPublicAction(
3368 IN PRTMP_ADAPTER pAd,
3369 IN MLME_QUEUE_ELEM *Elem);
3371 VOID PeerHTAction(
3372 IN PRTMP_ADAPTER pAd,
3373 IN MLME_QUEUE_ELEM *Elem);
3375 VOID PeerQOSAction(
3376 IN PRTMP_ADAPTER pAd,
3377 IN MLME_QUEUE_ELEM *Elem);
3379 VOID RECBATimerTimeout(
3380 IN PVOID SystemSpecific1,
3381 IN PVOID FunctionContext,
3382 IN PVOID SystemSpecific2,
3383 IN PVOID SystemSpecific3);
3385 VOID ORIBATimerTimeout(
3386 IN PRTMP_ADAPTER pAd);
3388 VOID SendRefreshBAR(
3389 IN PRTMP_ADAPTER pAd,
3390 IN MAC_TABLE_ENTRY *pEntry);
3392 VOID ActHeaderInit(
3393 IN PRTMP_ADAPTER pAd,
3394 IN OUT PHEADER_802_11 pHdr80211,
3395 IN PUCHAR Addr1,
3396 IN PUCHAR Addr2,
3397 IN PUCHAR Addr3);
3399 VOID BarHeaderInit(
3400 IN PRTMP_ADAPTER pAd,
3401 IN OUT PFRAME_BAR pCntlBar,
3402 IN PUCHAR pDA,
3403 IN PUCHAR pSA);
3405 VOID InsertActField(
3406 IN PRTMP_ADAPTER pAd,
3407 OUT PUCHAR pFrameBuf,
3408 OUT PULONG pFrameLen,
3409 IN UINT8 Category,
3410 IN UINT8 ActCode);
3412 BOOLEAN CntlEnqueueForRecv(
3413 IN PRTMP_ADAPTER pAd,
3414 IN ULONG Wcid,
3415 IN ULONG MsgLen,
3416 IN PFRAME_BA_REQ pMsg);
3419 // Private routines in rtmp_data.c
3421 BOOLEAN RTMPHandleRxDoneInterrupt(
3422 IN PRTMP_ADAPTER pAd);
3424 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3425 IN PRTMP_ADAPTER pAd,
3426 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3428 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3429 IN PRTMP_ADAPTER pAd);
3431 VOID RTMPHandleTBTTInterrupt(
3432 IN PRTMP_ADAPTER pAd);
3434 VOID RTMPHandlePreTBTTInterrupt(
3435 IN PRTMP_ADAPTER pAd);
3437 void RTMPHandleTwakeupInterrupt(
3438 IN PRTMP_ADAPTER pAd);
3440 VOID RTMPHandleRxCoherentInterrupt(
3441 IN PRTMP_ADAPTER pAd);
3443 BOOLEAN TxFrameIsAggregatible(
3444 IN PRTMP_ADAPTER pAd,
3445 IN PUCHAR pPrevAddr1,
3446 IN PUCHAR p8023hdr);
3448 BOOLEAN PeerIsAggreOn(
3449 IN PRTMP_ADAPTER pAd,
3450 IN ULONG TxRate,
3451 IN PMAC_TABLE_ENTRY pMacEntry);
3453 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3454 IN PNDIS_BUFFER pFirstBuffer,
3455 IN UCHAR DesiredOffset,
3456 OUT PUCHAR pByte0,
3457 OUT PUCHAR pByte1);
3459 NDIS_STATUS STASendPacket(
3460 IN PRTMP_ADAPTER pAd,
3461 IN PNDIS_PACKET pPacket);
3463 VOID STASendPackets(
3464 IN NDIS_HANDLE MiniportAdapterContext,
3465 IN PPNDIS_PACKET ppPacketArray,
3466 IN UINT NumberOfPackets);
3468 VOID RTMPDeQueuePacket(
3469 IN PRTMP_ADAPTER pAd,
3470 IN BOOLEAN bIntContext,
3471 IN UCHAR QueIdx,
3472 IN UCHAR Max_Tx_Packets);
3474 NDIS_STATUS RTMPHardTransmit(
3475 IN PRTMP_ADAPTER pAd,
3476 IN PNDIS_PACKET pPacket,
3477 IN UCHAR QueIdx,
3478 OUT PULONG pFreeTXDLeft);
3480 NDIS_STATUS STAHardTransmit(
3481 IN PRTMP_ADAPTER pAd,
3482 IN TX_BLK *pTxBlk,
3483 IN UCHAR QueIdx);
3485 VOID STARxEAPOLFrameIndicate(
3486 IN PRTMP_ADAPTER pAd,
3487 IN MAC_TABLE_ENTRY *pEntry,
3488 IN RX_BLK *pRxBlk,
3489 IN UCHAR FromWhichBSSID);
3491 NDIS_STATUS RTMPFreeTXDRequest(
3492 IN PRTMP_ADAPTER pAd,
3493 IN UCHAR RingType,
3494 IN UCHAR NumberRequired,
3495 IN PUCHAR FreeNumberIs);
3497 NDIS_STATUS MlmeHardTransmit(
3498 IN PRTMP_ADAPTER pAd,
3499 IN UCHAR QueIdx,
3500 IN PNDIS_PACKET pPacket);
3502 NDIS_STATUS MlmeHardTransmitMgmtRing(
3503 IN PRTMP_ADAPTER pAd,
3504 IN UCHAR QueIdx,
3505 IN PNDIS_PACKET pPacket);
3507 NDIS_STATUS MlmeHardTransmitTxRing(
3508 IN PRTMP_ADAPTER pAd,
3509 IN UCHAR QueIdx,
3510 IN PNDIS_PACKET pPacket);
3512 USHORT RTMPCalcDuration(
3513 IN PRTMP_ADAPTER pAd,
3514 IN UCHAR Rate,
3515 IN ULONG Size);
3517 VOID RTMPWriteTxWI(
3518 IN PRTMP_ADAPTER pAd,
3519 IN PTXWI_STRUC pTxWI,
3520 IN BOOLEAN FRAG,
3521 IN BOOLEAN CFACK,
3522 IN BOOLEAN InsTimestamp,
3523 IN BOOLEAN AMPDU,
3524 IN BOOLEAN Ack,
3525 IN BOOLEAN NSeq, // HW new a sequence.
3526 IN UCHAR BASize,
3527 IN UCHAR WCID,
3528 IN ULONG Length,
3529 IN UCHAR PID,
3530 IN UCHAR TID,
3531 IN UCHAR TxRate,
3532 IN UCHAR Txopmode,
3533 IN BOOLEAN CfAck,
3534 IN HTTRANSMIT_SETTING *pTransmit);
3537 VOID RTMPWriteTxWI_Data(
3538 IN PRTMP_ADAPTER pAd,
3539 IN OUT PTXWI_STRUC pTxWI,
3540 IN TX_BLK *pTxBlk);
3543 VOID RTMPWriteTxWI_Cache(
3544 IN PRTMP_ADAPTER pAd,
3545 IN OUT PTXWI_STRUC pTxWI,
3546 IN TX_BLK *pTxBlk);
3548 VOID RTMPWriteTxDescriptor(
3549 IN PRTMP_ADAPTER pAd,
3550 IN PTXD_STRUC pTxD,
3551 IN BOOLEAN bWIV,
3552 IN UCHAR QSEL);
3554 VOID RTMPSuspendMsduTransmission(
3555 IN PRTMP_ADAPTER pAd);
3557 VOID RTMPResumeMsduTransmission(
3558 IN PRTMP_ADAPTER pAd);
3560 NDIS_STATUS MiniportMMRequest(
3561 IN PRTMP_ADAPTER pAd,
3562 IN UCHAR QueIdx,
3563 IN PUCHAR pData,
3564 IN UINT Length);
3565 #ifdef RT2870
3566 NDIS_STATUS MiniportDataMMRequest(
3567 IN PRTMP_ADAPTER pAd,
3568 IN UCHAR QueIdx,
3569 IN PUCHAR pData,
3570 IN UINT Length);
3571 #endif
3572 VOID RTMPSendNullFrame(
3573 IN PRTMP_ADAPTER pAd,
3574 IN UCHAR TxRate,
3575 IN BOOLEAN bQosNull);
3577 VOID RTMPSendDisassociationFrame(
3578 IN PRTMP_ADAPTER pAd);
3580 VOID RTMPSendRTSFrame(
3581 IN PRTMP_ADAPTER pAd,
3582 IN PUCHAR pDA,
3583 IN unsigned int NextMpduSize,
3584 IN UCHAR TxRate,
3585 IN UCHAR RTSRate,
3586 IN USHORT AckDuration,
3587 IN UCHAR QueIdx,
3588 IN UCHAR FrameGap);
3590 PQUEUE_HEADER RTMPCheckTxSwQueue(
3591 IN PRTMP_ADAPTER pAd,
3592 OUT UCHAR *QueIdx);
3594 VOID RTMPReportMicError(
3595 IN PRTMP_ADAPTER pAd,
3596 IN PCIPHER_KEY pWpaKey);
3598 VOID WpaMicFailureReportFrame(
3599 IN PRTMP_ADAPTER pAd,
3600 IN MLME_QUEUE_ELEM *Elem);
3602 VOID WpaDisassocApAndBlockAssoc(
3603 IN PVOID SystemSpecific1,
3604 IN PVOID FunctionContext,
3605 IN PVOID SystemSpecific2,
3606 IN PVOID SystemSpecific3);
3608 NDIS_STATUS RTMPCloneNdisPacket(
3609 IN PRTMP_ADAPTER pAd,
3610 IN BOOLEAN pInsAMSDUHdr,
3611 IN PNDIS_PACKET pInPacket,
3612 OUT PNDIS_PACKET *ppOutPacket);
3614 NDIS_STATUS RTMPAllocateNdisPacket(
3615 IN PRTMP_ADAPTER pAd,
3616 IN PNDIS_PACKET *pPacket,
3617 IN PUCHAR pHeader,
3618 IN UINT HeaderLen,
3619 IN PUCHAR pData,
3620 IN UINT DataLen);
3622 VOID RTMPFreeNdisPacket(
3623 IN PRTMP_ADAPTER pAd,
3624 IN PNDIS_PACKET pPacket);
3626 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3627 IN PRTMP_ADAPTER pAd,
3628 IN UCHAR QueIdx);
3630 BOOLEAN RTMPCheckDHCPFrame(
3631 IN PRTMP_ADAPTER pAd,
3632 IN PNDIS_PACKET pPacket);
3635 BOOLEAN RTMPCheckEtherType(
3636 IN PRTMP_ADAPTER pAd,
3637 IN PNDIS_PACKET pPacket);
3641 // Private routines in rtmp_wep.c
3643 VOID RTMPInitWepEngine(
3644 IN PRTMP_ADAPTER pAd,
3645 IN PUCHAR pKey,
3646 IN UCHAR KeyId,
3647 IN UCHAR KeyLen,
3648 IN PUCHAR pDest);
3650 VOID RTMPEncryptData(
3651 IN PRTMP_ADAPTER pAd,
3652 IN PUCHAR pSrc,
3653 IN PUCHAR pDest,
3654 IN UINT Len);
3656 BOOLEAN RTMPSoftDecryptWEP(
3657 IN PRTMP_ADAPTER pAd,
3658 IN PUCHAR pData,
3659 IN ULONG DataByteCnt,
3660 IN PCIPHER_KEY pGroupKey);
3662 VOID RTMPSetICV(
3663 IN PRTMP_ADAPTER pAd,
3664 IN PUCHAR pDest);
3666 VOID ARCFOUR_INIT(
3667 IN PARCFOURCONTEXT Ctx,
3668 IN PUCHAR pKey,
3669 IN UINT KeyLen);
3671 UCHAR ARCFOUR_BYTE(
3672 IN PARCFOURCONTEXT Ctx);
3674 VOID ARCFOUR_DECRYPT(
3675 IN PARCFOURCONTEXT Ctx,
3676 IN PUCHAR pDest,
3677 IN PUCHAR pSrc,
3678 IN UINT Len);
3680 VOID ARCFOUR_ENCRYPT(
3681 IN PARCFOURCONTEXT Ctx,
3682 IN PUCHAR pDest,
3683 IN PUCHAR pSrc,
3684 IN UINT Len);
3686 VOID WPAARCFOUR_ENCRYPT(
3687 IN PARCFOURCONTEXT Ctx,
3688 IN PUCHAR pDest,
3689 IN PUCHAR pSrc,
3690 IN UINT Len);
3692 UINT RTMP_CALC_FCS32(
3693 IN UINT Fcs,
3694 IN PUCHAR Cp,
3695 IN INT Len);
3698 // MLME routines
3701 // Asic/RF/BBP related functions
3703 VOID AsicAdjustTxPower(
3704 IN PRTMP_ADAPTER pAd);
3706 VOID AsicUpdateProtect(
3707 IN PRTMP_ADAPTER pAd,
3708 IN USHORT OperaionMode,
3709 IN UCHAR SetMask,
3710 IN BOOLEAN bDisableBGProtect,
3711 IN BOOLEAN bNonGFExist);
3713 VOID AsicSwitchChannel(
3714 IN PRTMP_ADAPTER pAd,
3715 IN UCHAR Channel,
3716 IN BOOLEAN bScan);
3718 VOID AsicLockChannel(
3719 IN PRTMP_ADAPTER pAd,
3720 IN UCHAR Channel) ;
3722 VOID AsicAntennaSelect(
3723 IN PRTMP_ADAPTER pAd,
3724 IN UCHAR Channel);
3726 VOID AsicAntennaSetting(
3727 IN PRTMP_ADAPTER pAd,
3728 IN ABGBAND_STATE BandState);
3730 VOID AsicRfTuningExec(
3731 IN PVOID SystemSpecific1,
3732 IN PVOID FunctionContext,
3733 IN PVOID SystemSpecific2,
3734 IN PVOID SystemSpecific3);
3736 VOID AsicSleepThenAutoWakeup(
3737 IN PRTMP_ADAPTER pAd,
3738 IN USHORT TbttNumToNextWakeUp);
3740 VOID AsicForceSleep(
3741 IN PRTMP_ADAPTER pAd);
3743 VOID AsicForceWakeup(
3744 IN PRTMP_ADAPTER pAd,
3745 #ifdef RT2860
3746 IN UCHAR Level);
3747 #endif
3748 #ifdef RT2870
3749 IN BOOLEAN bFromTx);
3750 #endif
3752 VOID AsicSetBssid(
3753 IN PRTMP_ADAPTER pAd,
3754 IN PUCHAR pBssid);
3756 VOID AsicSetMcastWC(
3757 IN PRTMP_ADAPTER pAd);
3759 VOID AsicDelWcidTab(
3760 IN PRTMP_ADAPTER pAd,
3761 IN UCHAR Wcid);
3763 VOID AsicEnableRDG(
3764 IN PRTMP_ADAPTER pAd);
3766 VOID AsicDisableRDG(
3767 IN PRTMP_ADAPTER pAd);
3769 VOID AsicDisableSync(
3770 IN PRTMP_ADAPTER pAd);
3772 VOID AsicEnableBssSync(
3773 IN PRTMP_ADAPTER pAd);
3775 VOID AsicEnableIbssSync(
3776 IN PRTMP_ADAPTER pAd);
3778 VOID AsicSetEdcaParm(
3779 IN PRTMP_ADAPTER pAd,
3780 IN PEDCA_PARM pEdcaParm);
3782 VOID AsicSetSlotTime(
3783 IN PRTMP_ADAPTER pAd,
3784 IN BOOLEAN bUseShortSlotTime);
3786 VOID AsicAddSharedKeyEntry(
3787 IN PRTMP_ADAPTER pAd,
3788 IN UCHAR BssIndex,
3789 IN UCHAR KeyIdx,
3790 IN UCHAR CipherAlg,
3791 IN PUCHAR pKey,
3792 IN PUCHAR pTxMic,
3793 IN PUCHAR pRxMic);
3795 VOID AsicRemoveSharedKeyEntry(
3796 IN PRTMP_ADAPTER pAd,
3797 IN UCHAR BssIndex,
3798 IN UCHAR KeyIdx);
3800 VOID AsicUpdateWCIDAttribute(
3801 IN PRTMP_ADAPTER pAd,
3802 IN USHORT WCID,
3803 IN UCHAR BssIndex,
3804 IN UCHAR CipherAlg,
3805 IN BOOLEAN bUsePairewiseKeyTable);
3807 VOID AsicUpdateWCIDIVEIV(
3808 IN PRTMP_ADAPTER pAd,
3809 IN USHORT WCID,
3810 IN ULONG uIV,
3811 IN ULONG uEIV);
3813 VOID AsicUpdateRxWCIDTable(
3814 IN PRTMP_ADAPTER pAd,
3815 IN USHORT WCID,
3816 IN PUCHAR pAddr);
3818 VOID AsicAddKeyEntry(
3819 IN PRTMP_ADAPTER pAd,
3820 IN USHORT WCID,
3821 IN UCHAR BssIndex,
3822 IN UCHAR KeyIdx,
3823 IN PCIPHER_KEY pCipherKey,
3824 IN BOOLEAN bUsePairewiseKeyTable,
3825 IN BOOLEAN bTxKey);
3827 VOID AsicAddPairwiseKeyEntry(
3828 IN PRTMP_ADAPTER pAd,
3829 IN PUCHAR pAddr,
3830 IN UCHAR WCID,
3831 IN CIPHER_KEY *pCipherKey);
3833 VOID AsicRemovePairwiseKeyEntry(
3834 IN PRTMP_ADAPTER pAd,
3835 IN UCHAR BssIdx,
3836 IN UCHAR Wcid);
3838 BOOLEAN AsicSendCommandToMcu(
3839 IN PRTMP_ADAPTER pAd,
3840 IN UCHAR Command,
3841 IN UCHAR Token,
3842 IN UCHAR Arg0,
3843 IN UCHAR Arg1);
3844 #ifdef RT2860
3845 BOOLEAN AsicCheckCommanOk(
3846 IN PRTMP_ADAPTER pAd,
3847 IN UCHAR Command);
3848 #endif
3849 VOID MacAddrRandomBssid(
3850 IN PRTMP_ADAPTER pAd,
3851 OUT PUCHAR pAddr);
3853 VOID MgtMacHeaderInit(
3854 IN PRTMP_ADAPTER pAd,
3855 IN OUT PHEADER_802_11 pHdr80211,
3856 IN UCHAR SubType,
3857 IN UCHAR ToDs,
3858 IN PUCHAR pDA,
3859 IN PUCHAR pBssid);
3861 VOID MlmeRadioOff(
3862 IN PRTMP_ADAPTER pAd);
3864 VOID MlmeRadioOn(
3865 IN PRTMP_ADAPTER pAd);
3868 VOID BssTableInit(
3869 IN BSS_TABLE *Tab);
3871 VOID BATableInit(
3872 IN PRTMP_ADAPTER pAd,
3873 IN BA_TABLE *Tab);
3875 ULONG BssTableSearch(
3876 IN BSS_TABLE *Tab,
3877 IN PUCHAR pBssid,
3878 IN UCHAR Channel);
3880 ULONG BssSsidTableSearch(
3881 IN BSS_TABLE *Tab,
3882 IN PUCHAR pBssid,
3883 IN PUCHAR pSsid,
3884 IN UCHAR SsidLen,
3885 IN UCHAR Channel);
3887 ULONG BssTableSearchWithSSID(
3888 IN BSS_TABLE *Tab,
3889 IN PUCHAR Bssid,
3890 IN PUCHAR pSsid,
3891 IN UCHAR SsidLen,
3892 IN UCHAR Channel);
3894 VOID BssTableDeleteEntry(
3895 IN OUT PBSS_TABLE pTab,
3896 IN PUCHAR pBssid,
3897 IN UCHAR Channel);
3899 VOID BATableDeleteORIEntry(
3900 IN OUT PRTMP_ADAPTER pAd,
3901 IN BA_ORI_ENTRY *pBAORIEntry);
3903 VOID BssEntrySet(
3904 IN PRTMP_ADAPTER pAd,
3905 OUT PBSS_ENTRY pBss,
3906 IN PUCHAR pBssid,
3907 IN CHAR Ssid[],
3908 IN UCHAR SsidLen,
3909 IN UCHAR BssType,
3910 IN USHORT BeaconPeriod,
3911 IN PCF_PARM CfParm,
3912 IN USHORT AtimWin,
3913 IN USHORT CapabilityInfo,
3914 IN UCHAR SupRate[],
3915 IN UCHAR SupRateLen,
3916 IN UCHAR ExtRate[],
3917 IN UCHAR ExtRateLen,
3918 IN HT_CAPABILITY_IE *pHtCapability,
3919 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3920 IN UCHAR HtCapabilityLen,
3921 IN UCHAR AddHtInfoLen,
3922 IN UCHAR NewExtChanOffset,
3923 IN UCHAR Channel,
3924 IN CHAR Rssi,
3925 IN LARGE_INTEGER TimeStamp,
3926 IN UCHAR CkipFlag,
3927 IN PEDCA_PARM pEdcaParm,
3928 IN PQOS_CAPABILITY_PARM pQosCapability,
3929 IN PQBSS_LOAD_PARM pQbssLoad,
3930 IN USHORT LengthVIE,
3931 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3933 ULONG BssTableSetEntry(
3934 IN PRTMP_ADAPTER pAd,
3935 OUT PBSS_TABLE pTab,
3936 IN PUCHAR pBssid,
3937 IN CHAR Ssid[],
3938 IN UCHAR SsidLen,
3939 IN UCHAR BssType,
3940 IN USHORT BeaconPeriod,
3941 IN CF_PARM *CfParm,
3942 IN USHORT AtimWin,
3943 IN USHORT CapabilityInfo,
3944 IN UCHAR SupRate[],
3945 IN UCHAR SupRateLen,
3946 IN UCHAR ExtRate[],
3947 IN UCHAR ExtRateLen,
3948 IN HT_CAPABILITY_IE *pHtCapability,
3949 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3950 IN UCHAR HtCapabilityLen,
3951 IN UCHAR AddHtInfoLen,
3952 IN UCHAR NewExtChanOffset,
3953 IN UCHAR Channel,
3954 IN CHAR Rssi,
3955 IN LARGE_INTEGER TimeStamp,
3956 IN UCHAR CkipFlag,
3957 IN PEDCA_PARM pEdcaParm,
3958 IN PQOS_CAPABILITY_PARM pQosCapability,
3959 IN PQBSS_LOAD_PARM pQbssLoad,
3960 IN USHORT LengthVIE,
3961 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3963 VOID BATableInsertEntry(
3964 IN PRTMP_ADAPTER pAd,
3965 IN USHORT Aid,
3966 IN USHORT TimeOutValue,
3967 IN USHORT StartingSeq,
3968 IN UCHAR TID,
3969 IN UCHAR BAWinSize,
3970 IN UCHAR OriginatorStatus,
3971 IN BOOLEAN IsRecipient);
3973 VOID BssTableSsidSort(
3974 IN PRTMP_ADAPTER pAd,
3975 OUT BSS_TABLE *OutTab,
3976 IN CHAR Ssid[],
3977 IN UCHAR SsidLen);
3979 VOID BssTableSortByRssi(
3980 IN OUT BSS_TABLE *OutTab);
3982 VOID BssCipherParse(
3983 IN OUT PBSS_ENTRY pBss);
3985 NDIS_STATUS MlmeQueueInit(
3986 IN MLME_QUEUE *Queue);
3988 VOID MlmeQueueDestroy(
3989 IN MLME_QUEUE *Queue);
3991 BOOLEAN MlmeEnqueue(
3992 IN PRTMP_ADAPTER pAd,
3993 IN ULONG Machine,
3994 IN ULONG MsgType,
3995 IN ULONG MsgLen,
3996 IN VOID *Msg);
3998 BOOLEAN MlmeEnqueueForRecv(
3999 IN PRTMP_ADAPTER pAd,
4000 IN ULONG Wcid,
4001 IN ULONG TimeStampHigh,
4002 IN ULONG TimeStampLow,
4003 IN UCHAR Rssi0,
4004 IN UCHAR Rssi1,
4005 IN UCHAR Rssi2,
4006 IN ULONG MsgLen,
4007 IN PVOID Msg,
4008 IN UCHAR Signal);
4011 BOOLEAN MlmeDequeue(
4012 IN MLME_QUEUE *Queue,
4013 OUT MLME_QUEUE_ELEM **Elem);
4015 VOID MlmeRestartStateMachine(
4016 IN PRTMP_ADAPTER pAd);
4018 BOOLEAN MlmeQueueEmpty(
4019 IN MLME_QUEUE *Queue);
4021 BOOLEAN MlmeQueueFull(
4022 IN MLME_QUEUE *Queue);
4024 BOOLEAN MsgTypeSubst(
4025 IN PRTMP_ADAPTER pAd,
4026 IN PFRAME_802_11 pFrame,
4027 OUT INT *Machine,
4028 OUT INT *MsgType);
4030 VOID StateMachineInit(
4031 IN STATE_MACHINE *Sm,
4032 IN STATE_MACHINE_FUNC Trans[],
4033 IN ULONG StNr,
4034 IN ULONG MsgNr,
4035 IN STATE_MACHINE_FUNC DefFunc,
4036 IN ULONG InitState,
4037 IN ULONG Base);
4039 VOID StateMachineSetAction(
4040 IN STATE_MACHINE *S,
4041 IN ULONG St,
4042 ULONG Msg,
4043 IN STATE_MACHINE_FUNC F);
4045 VOID StateMachinePerformAction(
4046 IN PRTMP_ADAPTER pAd,
4047 IN STATE_MACHINE *S,
4048 IN MLME_QUEUE_ELEM *Elem);
4050 VOID Drop(
4051 IN PRTMP_ADAPTER pAd,
4052 IN MLME_QUEUE_ELEM *Elem);
4054 VOID AssocStateMachineInit(
4055 IN PRTMP_ADAPTER pAd,
4056 IN STATE_MACHINE *Sm,
4057 OUT STATE_MACHINE_FUNC Trans[]);
4059 VOID ReassocTimeout(
4060 IN PVOID SystemSpecific1,
4061 IN PVOID FunctionContext,
4062 IN PVOID SystemSpecific2,
4063 IN PVOID SystemSpecific3);
4065 VOID AssocTimeout(
4066 IN PVOID SystemSpecific1,
4067 IN PVOID FunctionContext,
4068 IN PVOID SystemSpecific2,
4069 IN PVOID SystemSpecific3);
4071 VOID DisassocTimeout(
4072 IN PVOID SystemSpecific1,
4073 IN PVOID FunctionContext,
4074 IN PVOID SystemSpecific2,
4075 IN PVOID SystemSpecific3);
4077 //----------------------------------------------
4078 VOID MlmeAssocReqAction(
4079 IN PRTMP_ADAPTER pAd,
4080 IN MLME_QUEUE_ELEM *Elem);
4082 VOID MlmeReassocReqAction(
4083 IN PRTMP_ADAPTER pAd,
4084 IN MLME_QUEUE_ELEM *Elem);
4086 VOID MlmeDisassocReqAction(
4087 IN PRTMP_ADAPTER pAd,
4088 IN MLME_QUEUE_ELEM *Elem);
4090 VOID PeerAssocRspAction(
4091 IN PRTMP_ADAPTER pAd,
4092 IN MLME_QUEUE_ELEM *Elem);
4094 VOID PeerReassocRspAction(
4095 IN PRTMP_ADAPTER pAd,
4096 IN MLME_QUEUE_ELEM *Elem);
4098 VOID PeerDisassocAction(
4099 IN PRTMP_ADAPTER pAd,
4100 IN MLME_QUEUE_ELEM *Elem);
4102 VOID DisassocTimeoutAction(
4103 IN PRTMP_ADAPTER pAd,
4104 IN MLME_QUEUE_ELEM *Elem);
4106 VOID AssocTimeoutAction(
4107 IN PRTMP_ADAPTER pAd,
4108 IN MLME_QUEUE_ELEM *Elem);
4110 VOID ReassocTimeoutAction(
4111 IN PRTMP_ADAPTER pAd,
4112 IN MLME_QUEUE_ELEM *Elem);
4114 VOID Cls3errAction(
4115 IN PRTMP_ADAPTER pAd,
4116 IN PUCHAR pAddr);
4118 VOID SwitchBetweenWepAndCkip(
4119 IN PRTMP_ADAPTER pAd);
4121 VOID InvalidStateWhenAssoc(
4122 IN PRTMP_ADAPTER pAd,
4123 IN MLME_QUEUE_ELEM *Elem);
4125 VOID InvalidStateWhenReassoc(
4126 IN PRTMP_ADAPTER pAd,
4127 IN MLME_QUEUE_ELEM *Elem);
4129 VOID InvalidStateWhenDisassociate(
4130 IN PRTMP_ADAPTER pAd,
4131 IN MLME_QUEUE_ELEM *Elem);
4133 #ifdef RT2870
4134 VOID MlmeCntlConfirm(
4135 IN PRTMP_ADAPTER pAd,
4136 IN ULONG MsgType,
4137 IN USHORT Msg);
4138 #endif // RT2870 //
4140 VOID ComposePsPoll(
4141 IN PRTMP_ADAPTER pAd);
4143 VOID ComposeNullFrame(
4144 IN PRTMP_ADAPTER pAd);
4146 VOID AssocPostProc(
4147 IN PRTMP_ADAPTER pAd,
4148 IN PUCHAR pAddr2,
4149 IN USHORT CapabilityInfo,
4150 IN USHORT Aid,
4151 IN UCHAR SupRate[],
4152 IN UCHAR SupRateLen,
4153 IN UCHAR ExtRate[],
4154 IN UCHAR ExtRateLen,
4155 IN PEDCA_PARM pEdcaParm,
4156 IN HT_CAPABILITY_IE *pHtCapability,
4157 IN UCHAR HtCapabilityLen,
4158 IN ADD_HT_INFO_IE *pAddHtInfo);
4160 VOID AuthStateMachineInit(
4161 IN PRTMP_ADAPTER pAd,
4162 IN PSTATE_MACHINE sm,
4163 OUT STATE_MACHINE_FUNC Trans[]);
4165 VOID AuthTimeout(
4166 IN PVOID SystemSpecific1,
4167 IN PVOID FunctionContext,
4168 IN PVOID SystemSpecific2,
4169 IN PVOID SystemSpecific3);
4171 VOID MlmeAuthReqAction(
4172 IN PRTMP_ADAPTER pAd,
4173 IN MLME_QUEUE_ELEM *Elem);
4175 VOID PeerAuthRspAtSeq2Action(
4176 IN PRTMP_ADAPTER pAd,
4177 IN MLME_QUEUE_ELEM *Elem);
4179 VOID PeerAuthRspAtSeq4Action(
4180 IN PRTMP_ADAPTER pAd,
4181 IN MLME_QUEUE_ELEM *Elem);
4183 VOID AuthTimeoutAction(
4184 IN PRTMP_ADAPTER pAd,
4185 IN MLME_QUEUE_ELEM *Elem);
4187 VOID Cls2errAction(
4188 IN PRTMP_ADAPTER pAd,
4189 IN PUCHAR pAddr);
4191 VOID MlmeDeauthReqAction(
4192 IN PRTMP_ADAPTER pAd,
4193 IN MLME_QUEUE_ELEM *Elem);
4195 VOID InvalidStateWhenAuth(
4196 IN PRTMP_ADAPTER pAd,
4197 IN MLME_QUEUE_ELEM *Elem);
4199 //=============================================
4201 VOID AuthRspStateMachineInit(
4202 IN PRTMP_ADAPTER pAd,
4203 IN PSTATE_MACHINE Sm,
4204 IN STATE_MACHINE_FUNC Trans[]);
4206 VOID PeerDeauthAction(
4207 IN PRTMP_ADAPTER pAd,
4208 IN MLME_QUEUE_ELEM *Elem);
4210 VOID PeerAuthSimpleRspGenAndSend(
4211 IN PRTMP_ADAPTER pAd,
4212 IN PHEADER_802_11 pHdr80211,
4213 IN USHORT Alg,
4214 IN USHORT Seq,
4215 IN USHORT Reason,
4216 IN USHORT Status);
4219 // Private routines in dls.c
4222 //========================================
4224 VOID SyncStateMachineInit(
4225 IN PRTMP_ADAPTER pAd,
4226 IN STATE_MACHINE *Sm,
4227 OUT STATE_MACHINE_FUNC Trans[]);
4229 VOID BeaconTimeout(
4230 IN PVOID SystemSpecific1,
4231 IN PVOID FunctionContext,
4232 IN PVOID SystemSpecific2,
4233 IN PVOID SystemSpecific3);
4235 VOID ScanTimeout(
4236 IN PVOID SystemSpecific1,
4237 IN PVOID FunctionContext,
4238 IN PVOID SystemSpecific2,
4239 IN PVOID SystemSpecific3);
4241 VOID InvalidStateWhenScan(
4242 IN PRTMP_ADAPTER pAd,
4243 IN MLME_QUEUE_ELEM *Elem);
4245 VOID InvalidStateWhenJoin(
4246 IN PRTMP_ADAPTER pAd,
4247 IN MLME_QUEUE_ELEM *Elem);
4249 VOID InvalidStateWhenStart(
4250 IN PRTMP_ADAPTER pAd,
4251 IN MLME_QUEUE_ELEM *Elem);
4253 VOID EnqueueProbeRequest(
4254 IN PRTMP_ADAPTER pAd);
4256 BOOLEAN ScanRunning(
4257 IN PRTMP_ADAPTER pAd);
4258 //=========================================
4260 VOID MlmeCntlInit(
4261 IN PRTMP_ADAPTER pAd,
4262 IN STATE_MACHINE *S,
4263 OUT STATE_MACHINE_FUNC Trans[]);
4265 VOID MlmeCntlMachinePerformAction(
4266 IN PRTMP_ADAPTER pAd,
4267 IN STATE_MACHINE *S,
4268 IN MLME_QUEUE_ELEM *Elem);
4270 VOID CntlIdleProc(
4271 IN PRTMP_ADAPTER pAd,
4272 IN MLME_QUEUE_ELEM *Elem);
4274 VOID CntlOidScanProc(
4275 IN PRTMP_ADAPTER pAd,
4276 IN MLME_QUEUE_ELEM *Elem);
4278 VOID CntlOidSsidProc(
4279 IN PRTMP_ADAPTER pAd,
4280 IN MLME_QUEUE_ELEM * Elem);
4282 VOID CntlOidRTBssidProc(
4283 IN PRTMP_ADAPTER pAd,
4284 IN MLME_QUEUE_ELEM * Elem);
4286 VOID CntlMlmeRoamingProc(
4287 IN PRTMP_ADAPTER pAd,
4288 IN MLME_QUEUE_ELEM * Elem);
4290 VOID CntlWaitDisassocProc(
4291 IN PRTMP_ADAPTER pAd,
4292 IN MLME_QUEUE_ELEM *Elem);
4294 VOID CntlWaitJoinProc(
4295 IN PRTMP_ADAPTER pAd,
4296 IN MLME_QUEUE_ELEM *Elem);
4298 VOID CntlWaitReassocProc(
4299 IN PRTMP_ADAPTER pAd,
4300 IN MLME_QUEUE_ELEM *Elem);
4302 VOID CntlWaitStartProc(
4303 IN PRTMP_ADAPTER pAd,
4304 IN MLME_QUEUE_ELEM *Elem);
4306 VOID CntlWaitAuthProc(
4307 IN PRTMP_ADAPTER pAd,
4308 IN MLME_QUEUE_ELEM *Elem);
4310 VOID CntlWaitAuthProc2(
4311 IN PRTMP_ADAPTER pAd,
4312 IN MLME_QUEUE_ELEM *Elem);
4314 VOID CntlWaitAssocProc(
4315 IN PRTMP_ADAPTER pAd,
4316 IN MLME_QUEUE_ELEM *Elem);
4318 VOID LinkUp(
4319 IN PRTMP_ADAPTER pAd,
4320 IN UCHAR BssType);
4322 VOID LinkDown(
4323 IN PRTMP_ADAPTER pAd,
4324 IN BOOLEAN IsReqFromAP);
4326 VOID IterateOnBssTab(
4327 IN PRTMP_ADAPTER pAd);
4329 VOID IterateOnBssTab2(
4330 IN PRTMP_ADAPTER pAd);;
4332 VOID JoinParmFill(
4333 IN PRTMP_ADAPTER pAd,
4334 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4335 IN ULONG BssIdx);
4337 VOID AssocParmFill(
4338 IN PRTMP_ADAPTER pAd,
4339 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4340 IN PUCHAR pAddr,
4341 IN USHORT CapabilityInfo,
4342 IN ULONG Timeout,
4343 IN USHORT ListenIntv);
4345 VOID ScanParmFill(
4346 IN PRTMP_ADAPTER pAd,
4347 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4348 IN CHAR Ssid[],
4349 IN UCHAR SsidLen,
4350 IN UCHAR BssType,
4351 IN UCHAR ScanType);
4353 VOID DisassocParmFill(
4354 IN PRTMP_ADAPTER pAd,
4355 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4356 IN PUCHAR pAddr,
4357 IN USHORT Reason);
4359 VOID StartParmFill(
4360 IN PRTMP_ADAPTER pAd,
4361 IN OUT MLME_START_REQ_STRUCT *StartReq,
4362 IN CHAR Ssid[],
4363 IN UCHAR SsidLen);
4365 VOID AuthParmFill(
4366 IN PRTMP_ADAPTER pAd,
4367 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4368 IN PUCHAR pAddr,
4369 IN USHORT Alg);
4371 VOID EnqueuePsPoll(
4372 IN PRTMP_ADAPTER pAd);
4374 VOID EnqueueBeaconFrame(
4375 IN PRTMP_ADAPTER pAd);
4377 VOID MlmeJoinReqAction(
4378 IN PRTMP_ADAPTER pAd,
4379 IN MLME_QUEUE_ELEM *Elem);
4381 VOID MlmeScanReqAction(
4382 IN PRTMP_ADAPTER pAd,
4383 IN MLME_QUEUE_ELEM *Elem);
4385 VOID MlmeStartReqAction(
4386 IN PRTMP_ADAPTER pAd,
4387 IN MLME_QUEUE_ELEM *Elem);
4389 VOID ScanTimeoutAction(
4390 IN PRTMP_ADAPTER pAd,
4391 IN MLME_QUEUE_ELEM *Elem);
4393 VOID BeaconTimeoutAtJoinAction(
4394 IN PRTMP_ADAPTER pAd,
4395 IN MLME_QUEUE_ELEM *Elem);
4397 VOID PeerBeaconAtScanAction(
4398 IN PRTMP_ADAPTER pAd,
4399 IN MLME_QUEUE_ELEM *Elem);
4401 VOID PeerBeaconAtJoinAction(
4402 IN PRTMP_ADAPTER pAd,
4403 IN MLME_QUEUE_ELEM *Elem);
4405 VOID PeerBeacon(
4406 IN PRTMP_ADAPTER pAd,
4407 IN MLME_QUEUE_ELEM *Elem);
4409 VOID PeerProbeReqAction(
4410 IN PRTMP_ADAPTER pAd,
4411 IN MLME_QUEUE_ELEM *Elem);
4413 VOID ScanNextChannel(
4414 IN PRTMP_ADAPTER pAd);
4416 ULONG MakeIbssBeacon(
4417 IN PRTMP_ADAPTER pAd);
4419 VOID CCXAdjacentAPReport(
4420 IN PRTMP_ADAPTER pAd);
4422 BOOLEAN MlmeScanReqSanity(
4423 IN PRTMP_ADAPTER pAd,
4424 IN VOID *Msg,
4425 IN ULONG MsgLen,
4426 OUT UCHAR *BssType,
4427 OUT CHAR ssid[],
4428 OUT UCHAR *SsidLen,
4429 OUT UCHAR *ScanType);
4431 BOOLEAN PeerBeaconAndProbeRspSanity(
4432 IN PRTMP_ADAPTER pAd,
4433 IN VOID *Msg,
4434 IN ULONG MsgLen,
4435 IN UCHAR MsgChannel,
4436 OUT PUCHAR pAddr2,
4437 OUT PUCHAR pBssid,
4438 OUT CHAR Ssid[],
4439 OUT UCHAR *pSsidLen,
4440 OUT UCHAR *pBssType,
4441 OUT USHORT *pBeaconPeriod,
4442 OUT UCHAR *pChannel,
4443 OUT UCHAR *pNewChannel,
4444 OUT LARGE_INTEGER *pTimestamp,
4445 OUT CF_PARM *pCfParm,
4446 OUT USHORT *pAtimWin,
4447 OUT USHORT *pCapabilityInfo,
4448 OUT UCHAR *pErp,
4449 OUT UCHAR *pDtimCount,
4450 OUT UCHAR *pDtimPeriod,
4451 OUT UCHAR *pBcastFlag,
4452 OUT UCHAR *pMessageToMe,
4453 OUT UCHAR SupRate[],
4454 OUT UCHAR *pSupRateLen,
4455 OUT UCHAR ExtRate[],
4456 OUT UCHAR *pExtRateLen,
4457 OUT UCHAR *pCkipFlag,
4458 OUT UCHAR *pAironetCellPowerLimit,
4459 OUT PEDCA_PARM pEdcaParm,
4460 OUT PQBSS_LOAD_PARM pQbssLoad,
4461 OUT PQOS_CAPABILITY_PARM pQosCapability,
4462 OUT ULONG *pRalinkIe,
4463 OUT UCHAR *pHtCapabilityLen,
4464 OUT UCHAR *pPreNHtCapabilityLen,
4465 OUT HT_CAPABILITY_IE *pHtCapability,
4466 OUT UCHAR *AddHtInfoLen,
4467 OUT ADD_HT_INFO_IE *AddHtInfo,
4468 OUT UCHAR *NewExtChannel,
4469 OUT USHORT *LengthVIE,
4470 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4472 BOOLEAN PeerAddBAReqActionSanity(
4473 IN PRTMP_ADAPTER pAd,
4474 IN VOID *pMsg,
4475 IN ULONG MsgLen,
4476 OUT PUCHAR pAddr2);
4478 BOOLEAN PeerAddBARspActionSanity(
4479 IN PRTMP_ADAPTER pAd,
4480 IN VOID *pMsg,
4481 IN ULONG MsgLen);
4483 BOOLEAN PeerDelBAActionSanity(
4484 IN PRTMP_ADAPTER pAd,
4485 IN UCHAR Wcid,
4486 IN VOID *pMsg,
4487 IN ULONG MsgLen);
4489 BOOLEAN MlmeAssocReqSanity(
4490 IN PRTMP_ADAPTER pAd,
4491 IN VOID *Msg,
4492 IN ULONG MsgLen,
4493 OUT PUCHAR pApAddr,
4494 OUT USHORT *CapabilityInfo,
4495 OUT ULONG *Timeout,
4496 OUT USHORT *ListenIntv);
4498 BOOLEAN MlmeAuthReqSanity(
4499 IN PRTMP_ADAPTER pAd,
4500 IN VOID *Msg,
4501 IN ULONG MsgLen,
4502 OUT PUCHAR pAddr,
4503 OUT ULONG *Timeout,
4504 OUT USHORT *Alg);
4506 BOOLEAN MlmeStartReqSanity(
4507 IN PRTMP_ADAPTER pAd,
4508 IN VOID *Msg,
4509 IN ULONG MsgLen,
4510 OUT CHAR Ssid[],
4511 OUT UCHAR *Ssidlen);
4513 BOOLEAN PeerAuthSanity(
4514 IN PRTMP_ADAPTER pAd,
4515 IN VOID *Msg,
4516 IN ULONG MsgLen,
4517 OUT PUCHAR pAddr,
4518 OUT USHORT *Alg,
4519 OUT USHORT *Seq,
4520 OUT USHORT *Status,
4521 OUT CHAR ChlgText[]);
4523 BOOLEAN PeerAssocRspSanity(
4524 IN PRTMP_ADAPTER pAd,
4525 IN VOID *pMsg,
4526 IN ULONG MsgLen,
4527 OUT PUCHAR pAddr2,
4528 OUT USHORT *pCapabilityInfo,
4529 OUT USHORT *pStatus,
4530 OUT USHORT *pAid,
4531 OUT UCHAR SupRate[],
4532 OUT UCHAR *pSupRateLen,
4533 OUT UCHAR ExtRate[],
4534 OUT UCHAR *pExtRateLen,
4535 OUT HT_CAPABILITY_IE *pHtCapability,
4536 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4537 OUT UCHAR *pHtCapabilityLen,
4538 OUT UCHAR *pAddHtInfoLen,
4539 OUT UCHAR *pNewExtChannelOffset,
4540 OUT PEDCA_PARM pEdcaParm,
4541 OUT UCHAR *pCkipFlag);
4543 BOOLEAN PeerDisassocSanity(
4544 IN PRTMP_ADAPTER pAd,
4545 IN VOID *Msg,
4546 IN ULONG MsgLen,
4547 OUT PUCHAR pAddr2,
4548 OUT USHORT *Reason);
4550 BOOLEAN PeerDeauthSanity(
4551 IN PRTMP_ADAPTER pAd,
4552 IN VOID *Msg,
4553 IN ULONG MsgLen,
4554 OUT PUCHAR pAddr2,
4555 OUT USHORT *Reason);
4557 BOOLEAN PeerProbeReqSanity(
4558 IN PRTMP_ADAPTER pAd,
4559 IN VOID *Msg,
4560 IN ULONG MsgLen,
4561 OUT PUCHAR pAddr2,
4562 OUT CHAR Ssid[],
4563 OUT UCHAR *pSsidLen);
4565 BOOLEAN GetTimBit(
4566 IN CHAR *Ptr,
4567 IN USHORT Aid,
4568 OUT UCHAR *TimLen,
4569 OUT UCHAR *BcastFlag,
4570 OUT UCHAR *DtimCount,
4571 OUT UCHAR *DtimPeriod,
4572 OUT UCHAR *MessageToMe);
4574 UCHAR ChannelSanity(
4575 IN PRTMP_ADAPTER pAd,
4576 IN UCHAR channel);
4578 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4579 IN PBSS_ENTRY pBss);
4581 BOOLEAN MlmeDelBAReqSanity(
4582 IN PRTMP_ADAPTER pAd,
4583 IN VOID *Msg,
4584 IN ULONG MsgLen);
4586 BOOLEAN MlmeAddBAReqSanity(
4587 IN PRTMP_ADAPTER pAd,
4588 IN VOID *Msg,
4589 IN ULONG MsgLen,
4590 OUT PUCHAR pAddr2);
4592 ULONG MakeOutgoingFrame(
4593 OUT CHAR *Buffer,
4594 OUT ULONG *Length, ...);
4596 VOID LfsrInit(
4597 IN PRTMP_ADAPTER pAd,
4598 IN ULONG Seed);
4600 UCHAR RandomByte(
4601 IN PRTMP_ADAPTER pAd);
4603 VOID AsicUpdateAutoFallBackTable(
4604 IN PRTMP_ADAPTER pAd,
4605 IN PUCHAR pTxRate);
4607 VOID MlmePeriodicExec(
4608 IN PVOID SystemSpecific1,
4609 IN PVOID FunctionContext,
4610 IN PVOID SystemSpecific2,
4611 IN PVOID SystemSpecific3);
4613 VOID LinkDownExec(
4614 IN PVOID SystemSpecific1,
4615 IN PVOID FunctionContext,
4616 IN PVOID SystemSpecific2,
4617 IN PVOID SystemSpecific3);
4619 VOID STAMlmePeriodicExec(
4620 PRTMP_ADAPTER pAd);
4622 VOID MlmeAutoScan(
4623 IN PRTMP_ADAPTER pAd);
4625 VOID MlmeAutoReconnectLastSSID(
4626 IN PRTMP_ADAPTER pAd);
4628 BOOLEAN MlmeValidateSSID(
4629 IN PUCHAR pSsid,
4630 IN UCHAR SsidLen);
4632 VOID MlmeCheckForRoaming(
4633 IN PRTMP_ADAPTER pAd,
4634 IN ULONG Now32);
4636 VOID MlmeCheckForFastRoaming(
4637 IN PRTMP_ADAPTER pAd,
4638 IN ULONG Now);
4640 VOID MlmeDynamicTxRateSwitching(
4641 IN PRTMP_ADAPTER pAd);
4643 VOID MlmeSetTxRate(
4644 IN PRTMP_ADAPTER pAd,
4645 IN PMAC_TABLE_ENTRY pEntry,
4646 IN PRTMP_TX_RATE_SWITCH pTxRate);
4648 VOID MlmeSelectTxRateTable(
4649 IN PRTMP_ADAPTER pAd,
4650 IN PMAC_TABLE_ENTRY pEntry,
4651 IN PUCHAR *ppTable,
4652 IN PUCHAR pTableSize,
4653 IN PUCHAR pInitTxRateIdx);
4655 VOID MlmeCalculateChannelQuality(
4656 IN PRTMP_ADAPTER pAd,
4657 IN ULONG Now);
4659 VOID MlmeCheckPsmChange(
4660 IN PRTMP_ADAPTER pAd,
4661 IN ULONG Now32);
4663 VOID MlmeSetPsmBit(
4664 IN PRTMP_ADAPTER pAd,
4665 IN USHORT psm);
4667 VOID MlmeSetTxPreamble(
4668 IN PRTMP_ADAPTER pAd,
4669 IN USHORT TxPreamble);
4671 VOID UpdateBasicRateBitmap(
4672 IN PRTMP_ADAPTER pAd);
4674 VOID MlmeUpdateTxRates(
4675 IN PRTMP_ADAPTER pAd,
4676 IN BOOLEAN bLinkUp,
4677 IN UCHAR apidx);
4679 VOID MlmeUpdateHtTxRates(
4680 IN PRTMP_ADAPTER pAd,
4681 IN UCHAR apidx);
4683 VOID RTMPCheckRates(
4684 IN PRTMP_ADAPTER pAd,
4685 IN OUT UCHAR SupRate[],
4686 IN OUT UCHAR *SupRateLen);
4688 BOOLEAN RTMPCheckChannel(
4689 IN PRTMP_ADAPTER pAd,
4690 IN UCHAR CentralChannel,
4691 IN UCHAR Channel);
4693 BOOLEAN RTMPCheckHt(
4694 IN PRTMP_ADAPTER pAd,
4695 IN UCHAR Wcid,
4696 IN OUT HT_CAPABILITY_IE *pHtCapability,
4697 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
4699 VOID StaQuickResponeForRateUpExec(
4700 IN PVOID SystemSpecific1,
4701 IN PVOID FunctionContext,
4702 IN PVOID SystemSpecific2,
4703 IN PVOID SystemSpecific3);
4705 VOID RTMPUpdateMlmeRate(
4706 IN PRTMP_ADAPTER pAd);
4708 CHAR RTMPMaxRssi(
4709 IN PRTMP_ADAPTER pAd,
4710 IN CHAR Rssi0,
4711 IN CHAR Rssi1,
4712 IN CHAR Rssi2);
4714 VOID AsicSetRxAnt(
4715 IN PRTMP_ADAPTER pAd,
4716 IN UCHAR Ant);
4718 VOID AsicEvaluateRxAnt(
4719 IN PRTMP_ADAPTER pAd);
4721 VOID AsicRxAntEvalTimeout(
4722 IN PVOID SystemSpecific1,
4723 IN PVOID FunctionContext,
4724 IN PVOID SystemSpecific2,
4725 IN PVOID SystemSpecific3);
4727 VOID APSDPeriodicExec(
4728 IN PVOID SystemSpecific1,
4729 IN PVOID FunctionContext,
4730 IN PVOID SystemSpecific2,
4731 IN PVOID SystemSpecific3);
4733 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4734 IN PRTMP_ADAPTER pAd,
4735 IN PMAC_TABLE_ENTRY pEntry);
4737 UCHAR RTMPStaFixedTxMode(
4738 IN PRTMP_ADAPTER pAd,
4739 IN PMAC_TABLE_ENTRY pEntry);
4741 VOID RTMPUpdateLegacyTxSetting(
4742 UCHAR fixed_tx_mode,
4743 PMAC_TABLE_ENTRY pEntry);
4745 BOOLEAN RTMPAutoRateSwitchCheck(
4746 IN PRTMP_ADAPTER pAd);
4748 NDIS_STATUS MlmeInit(
4749 IN PRTMP_ADAPTER pAd);
4751 VOID MlmeHandler(
4752 IN PRTMP_ADAPTER pAd);
4754 VOID MlmeHalt(
4755 IN PRTMP_ADAPTER pAd);
4757 VOID MlmeResetRalinkCounters(
4758 IN PRTMP_ADAPTER pAd);
4760 VOID BuildChannelList(
4761 IN PRTMP_ADAPTER pAd);
4763 UCHAR FirstChannel(
4764 IN PRTMP_ADAPTER pAd);
4766 UCHAR NextChannel(
4767 IN PRTMP_ADAPTER pAd,
4768 IN UCHAR channel);
4770 VOID ChangeToCellPowerLimit(
4771 IN PRTMP_ADAPTER pAd,
4772 IN UCHAR AironetCellPowerLimit);
4774 USHORT RTMP_EEPROM_READ16(
4775 IN PRTMP_ADAPTER pAd,
4776 IN USHORT Offset);
4778 VOID RTMP_EEPROM_WRITE16(
4779 IN PRTMP_ADAPTER pAd,
4780 IN USHORT Offset,
4781 IN USHORT Data);
4784 // Prototypes of function definition in rtmp_tkip.c
4786 VOID RTMPInitTkipEngine(
4787 IN PRTMP_ADAPTER pAd,
4788 IN PUCHAR pTKey,
4789 IN UCHAR KeyId,
4790 IN PUCHAR pTA,
4791 IN PUCHAR pMICKey,
4792 IN PUCHAR pTSC,
4793 OUT PULONG pIV16,
4794 OUT PULONG pIV32);
4796 VOID RTMPInitMICEngine(
4797 IN PRTMP_ADAPTER pAd,
4798 IN PUCHAR pKey,
4799 IN PUCHAR pDA,
4800 IN PUCHAR pSA,
4801 IN UCHAR UserPriority,
4802 IN PUCHAR pMICKey);
4804 BOOLEAN RTMPTkipCompareMICValue(
4805 IN PRTMP_ADAPTER pAd,
4806 IN PUCHAR pSrc,
4807 IN PUCHAR pDA,
4808 IN PUCHAR pSA,
4809 IN PUCHAR pMICKey,
4810 IN UCHAR UserPriority,
4811 IN UINT Len);
4813 VOID RTMPCalculateMICValue(
4814 IN PRTMP_ADAPTER pAd,
4815 IN PNDIS_PACKET pPacket,
4816 IN PUCHAR pEncap,
4817 IN PCIPHER_KEY pKey,
4818 IN UCHAR apidx);
4820 BOOLEAN RTMPTkipCompareMICValueWithLLC(
4821 IN PRTMP_ADAPTER pAd,
4822 IN PUCHAR pLLC,
4823 IN PUCHAR pSrc,
4824 IN PUCHAR pDA,
4825 IN PUCHAR pSA,
4826 IN PUCHAR pMICKey,
4827 IN UINT Len);
4829 VOID RTMPTkipAppendByte(
4830 IN PTKIP_KEY_INFO pTkip,
4831 IN UCHAR uChar);
4833 VOID RTMPTkipAppend(
4834 IN PTKIP_KEY_INFO pTkip,
4835 IN PUCHAR pSrc,
4836 IN UINT nBytes);
4838 VOID RTMPTkipGetMIC(
4839 IN PTKIP_KEY_INFO pTkip);
4841 BOOLEAN RTMPSoftDecryptTKIP(
4842 IN PRTMP_ADAPTER pAd,
4843 IN PUCHAR pData,
4844 IN ULONG DataByteCnt,
4845 IN UCHAR UserPriority,
4846 IN PCIPHER_KEY pWpaKey);
4848 BOOLEAN RTMPSoftDecryptAES(
4849 IN PRTMP_ADAPTER pAd,
4850 IN PUCHAR pData,
4851 IN ULONG DataByteCnt,
4852 IN PCIPHER_KEY pWpaKey);
4855 // Prototypes of function definition in cmm_info.c
4857 NDIS_STATUS RTMPWPARemoveKeyProc(
4858 IN PRTMP_ADAPTER pAd,
4859 IN PVOID pBuf);
4861 VOID RTMPWPARemoveAllKeys(
4862 IN PRTMP_ADAPTER pAd);
4864 BOOLEAN RTMPCheckStrPrintAble(
4865 IN CHAR *pInPutStr,
4866 IN UCHAR strLen);
4868 VOID RTMPSetPhyMode(
4869 IN PRTMP_ADAPTER pAd,
4870 IN ULONG phymode);
4872 VOID RTMPUpdateHTIE(
4873 IN RT_HT_CAPABILITY *pRtHt,
4874 IN UCHAR *pMcsSet,
4875 OUT HT_CAPABILITY_IE *pHtCapability,
4876 OUT ADD_HT_INFO_IE *pAddHtInfo);
4878 VOID RTMPAddWcidAttributeEntry(
4879 IN PRTMP_ADAPTER pAd,
4880 IN UCHAR BssIdx,
4881 IN UCHAR KeyIdx,
4882 IN UCHAR CipherAlg,
4883 IN MAC_TABLE_ENTRY *pEntry);
4885 CHAR *GetEncryptType(
4886 CHAR enc);
4888 CHAR *GetAuthMode(
4889 CHAR auth);
4891 VOID RTMPIoctlGetSiteSurvey(
4892 IN PRTMP_ADAPTER pAdapter,
4893 IN struct iwreq *wrq);
4895 VOID RTMPIoctlGetMacTable(
4896 IN PRTMP_ADAPTER pAd,
4897 IN struct iwreq *wrq);
4899 VOID RTMPAddBSSIDCipher(
4900 IN PRTMP_ADAPTER pAd,
4901 IN UCHAR Aid,
4902 IN PNDIS_802_11_KEY pKey,
4903 IN UCHAR CipherAlg);
4905 VOID RTMPSetHT(
4906 IN PRTMP_ADAPTER pAd,
4907 IN OID_SET_HT_PHYMODE *pHTPhyMode);
4909 VOID RTMPSetIndividualHT(
4910 IN PRTMP_ADAPTER pAd,
4911 IN UCHAR apidx);
4913 VOID RTMPSendWirelessEvent(
4914 IN PRTMP_ADAPTER pAd,
4915 IN USHORT Event_flag,
4916 IN PUCHAR pAddr,
4917 IN UCHAR BssIdx,
4918 IN CHAR Rssi);
4921 // prototype in wpa.c
4923 BOOLEAN WpaMsgTypeSubst(
4924 IN UCHAR EAPType,
4925 OUT INT *MsgType);
4927 VOID WpaPskStateMachineInit(
4928 IN PRTMP_ADAPTER pAd,
4929 IN STATE_MACHINE *S,
4930 OUT STATE_MACHINE_FUNC Trans[]);
4932 VOID WpaEAPOLKeyAction(
4933 IN PRTMP_ADAPTER pAd,
4934 IN MLME_QUEUE_ELEM *Elem);
4936 VOID WpaPairMsg1Action(
4937 IN PRTMP_ADAPTER pAd,
4938 IN MLME_QUEUE_ELEM *Elem);
4940 VOID WpaPairMsg3Action(
4941 IN PRTMP_ADAPTER pAd,
4942 IN MLME_QUEUE_ELEM *Elem);
4944 VOID WpaGroupMsg1Action(
4945 IN PRTMP_ADAPTER pAd,
4946 IN MLME_QUEUE_ELEM *Elem);
4948 VOID WpaMacHeaderInit(
4949 IN PRTMP_ADAPTER pAd,
4950 IN OUT PHEADER_802_11 pHdr80211,
4951 IN UCHAR wep,
4952 IN PUCHAR pAddr1);
4954 VOID Wpa2PairMsg1Action(
4955 IN PRTMP_ADAPTER pAd,
4956 IN MLME_QUEUE_ELEM *Elem);
4958 VOID Wpa2PairMsg3Action(
4959 IN PRTMP_ADAPTER pAd,
4960 IN MLME_QUEUE_ELEM *Elem);
4962 BOOLEAN ParseKeyData(
4963 IN PRTMP_ADAPTER pAd,
4964 IN PUCHAR pKeyData,
4965 IN UCHAR KeyDataLen,
4966 IN UCHAR bPairewise);
4968 VOID RTMPToWirelessSta(
4969 IN PRTMP_ADAPTER pAd,
4970 IN PUCHAR pHeader802_3,
4971 IN UINT HdrLen,
4972 IN PUCHAR pData,
4973 IN UINT DataLen,
4974 IN BOOLEAN is4wayFrame);
4976 VOID HMAC_SHA1(
4977 IN UCHAR *text,
4978 IN UINT text_len,
4979 IN UCHAR *key,
4980 IN UINT key_len,
4981 IN UCHAR *digest);
4983 VOID PRF(
4984 IN UCHAR *key,
4985 IN INT key_len,
4986 IN UCHAR *prefix,
4987 IN INT prefix_len,
4988 IN UCHAR *data,
4989 IN INT data_len,
4990 OUT UCHAR *output,
4991 IN INT len);
4993 VOID CCKMPRF(
4994 IN UCHAR *key,
4995 IN INT key_len,
4996 IN UCHAR *data,
4997 IN INT data_len,
4998 OUT UCHAR *output,
4999 IN INT len);
5001 VOID WpaCountPTK(
5002 IN PRTMP_ADAPTER pAd,
5003 IN UCHAR *PMK,
5004 IN UCHAR *ANonce,
5005 IN UCHAR *AA,
5006 IN UCHAR *SNonce,
5007 IN UCHAR *SA,
5008 OUT UCHAR *output,
5009 IN UINT len);
5011 VOID GenRandom(
5012 IN PRTMP_ADAPTER pAd,
5013 IN UCHAR *macAddr,
5014 OUT UCHAR *random);
5017 // prototype in aironet.c
5019 VOID AironetStateMachineInit(
5020 IN PRTMP_ADAPTER pAd,
5021 IN STATE_MACHINE *S,
5022 OUT STATE_MACHINE_FUNC Trans[]);
5024 VOID AironetMsgAction(
5025 IN PRTMP_ADAPTER pAd,
5026 IN MLME_QUEUE_ELEM *Elem);
5028 VOID AironetRequestAction(
5029 IN PRTMP_ADAPTER pAd,
5030 IN MLME_QUEUE_ELEM *Elem);
5032 VOID ChannelLoadRequestAction(
5033 IN PRTMP_ADAPTER pAd,
5034 IN UCHAR Index);
5036 VOID NoiseHistRequestAction(
5037 IN PRTMP_ADAPTER pAd,
5038 IN UCHAR Index);
5040 VOID BeaconRequestAction(
5041 IN PRTMP_ADAPTER pAd,
5042 IN UCHAR Index);
5044 VOID AironetReportAction(
5045 IN PRTMP_ADAPTER pAd,
5046 IN MLME_QUEUE_ELEM *Elem);
5048 VOID ChannelLoadReportAction(
5049 IN PRTMP_ADAPTER pAd,
5050 IN UCHAR Index);
5052 VOID NoiseHistReportAction(
5053 IN PRTMP_ADAPTER pAd,
5054 IN UCHAR Index);
5056 VOID AironetFinalReportAction(
5057 IN PRTMP_ADAPTER pAd);
5059 VOID BeaconReportAction(
5060 IN PRTMP_ADAPTER pAd,
5061 IN UCHAR Index);
5063 VOID AironetAddBeaconReport(
5064 IN PRTMP_ADAPTER pAd,
5065 IN ULONG Index,
5066 IN PMLME_QUEUE_ELEM pElem);
5068 VOID AironetCreateBeaconReportFromBssTable(
5069 IN PRTMP_ADAPTER pAd);
5071 CHAR ConvertToRssi(
5072 IN PRTMP_ADAPTER pAd,
5073 IN CHAR Rssi,
5074 IN UCHAR RssiNumber);
5077 // function prototype in cmm_wpa.c
5079 BOOLEAN RTMPCheckWPAframe(
5080 IN PRTMP_ADAPTER pAd,
5081 IN PMAC_TABLE_ENTRY pEntry,
5082 IN PUCHAR pData,
5083 IN ULONG DataByteCount,
5084 IN UCHAR FromWhichBSSID);
5086 VOID AES_GTK_KEY_UNWRAP(
5087 IN UCHAR *key,
5088 OUT UCHAR *plaintext,
5089 IN UCHAR c_len,
5090 IN UCHAR *ciphertext);
5092 VOID RTMPMakeRSNIE(
5093 IN PRTMP_ADAPTER pAd,
5094 IN UINT AuthMode,
5095 IN UINT WepStatus,
5096 IN UCHAR apidx);
5099 // function prototype in ap_wpa.c
5102 VOID HandleCounterMeasure(
5103 IN PRTMP_ADAPTER pAd,
5104 IN MAC_TABLE_ENTRY *pEntry);
5106 /* timeout -- ms */
5107 VOID RTMP_SetPeriodicTimer(
5108 IN NDIS_MINIPORT_TIMER *pTimer,
5109 IN unsigned long timeout);
5111 VOID RTMP_OS_Init_Timer(
5112 IN PRTMP_ADAPTER pAd,
5113 IN NDIS_MINIPORT_TIMER *pTimer,
5114 IN TIMER_FUNCTION function,
5115 IN PVOID data);
5117 VOID RTMP_OS_Add_Timer(
5118 IN NDIS_MINIPORT_TIMER *pTimer,
5119 IN unsigned long timeout);
5121 VOID RTMP_OS_Mod_Timer(
5122 IN NDIS_MINIPORT_TIMER *pTimer,
5123 IN unsigned long timeout);
5126 VOID RTMP_OS_Del_Timer(
5127 IN NDIS_MINIPORT_TIMER *pTimer,
5128 OUT BOOLEAN *pCancelled);
5131 VOID RTMP_OS_Release_Packet(
5132 IN PRTMP_ADAPTER pAd,
5133 IN PQUEUE_ENTRY pEntry);
5135 VOID RTMPusecDelay(
5136 IN ULONG usec);
5138 NDIS_STATUS os_alloc_mem(
5139 IN PRTMP_ADAPTER pAd,
5140 OUT PUCHAR *mem,
5141 IN ULONG size);
5143 NDIS_STATUS os_free_mem(
5144 IN PRTMP_ADAPTER pAd,
5145 IN PUCHAR mem);
5148 void RTMP_AllocateSharedMemory(
5149 IN PRTMP_ADAPTER pAd,
5150 IN ULONG Length,
5151 IN BOOLEAN Cached,
5152 OUT PVOID *VirtualAddress,
5153 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5155 VOID RTMPFreeTxRxRingMemory(
5156 IN PRTMP_ADAPTER pAd);
5158 NDIS_STATUS AdapterBlockAllocateMemory(
5159 IN PVOID handle,
5160 OUT PVOID *ppAd);
5162 void RTMP_AllocateTxDescMemory(
5163 IN PRTMP_ADAPTER pAd,
5164 IN UINT Index,
5165 IN ULONG Length,
5166 IN BOOLEAN Cached,
5167 OUT PVOID *VirtualAddress,
5168 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5170 void RTMP_AllocateFirstTxBuffer(
5171 IN PRTMP_ADAPTER pAd,
5172 IN UINT Index,
5173 IN ULONG Length,
5174 IN BOOLEAN Cached,
5175 OUT PVOID *VirtualAddress,
5176 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5178 void RTMP_AllocateMgmtDescMemory(
5179 IN PRTMP_ADAPTER pAd,
5180 IN ULONG Length,
5181 IN BOOLEAN Cached,
5182 OUT PVOID *VirtualAddress,
5183 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5185 void RTMP_AllocateRxDescMemory(
5186 IN PRTMP_ADAPTER pAd,
5187 IN ULONG Length,
5188 IN BOOLEAN Cached,
5189 OUT PVOID *VirtualAddress,
5190 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5192 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5193 IN PRTMP_ADAPTER pAd,
5194 IN ULONG Length,
5195 IN BOOLEAN Cached,
5196 OUT PVOID *VirtualAddress,
5197 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5199 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5200 IN PRTMP_ADAPTER pAd,
5201 IN ULONG Length,
5202 IN BOOLEAN Cached,
5203 OUT PVOID *VirtualAddress);
5205 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5206 IN PRTMP_ADAPTER pAd,
5207 IN ULONG Length);
5209 void RTMP_QueryPacketInfo(
5210 IN PNDIS_PACKET pPacket,
5211 OUT PACKET_INFO *pPacketInfo,
5212 OUT PUCHAR *pSrcBufVA,
5213 OUT UINT *pSrcBufLen);
5215 void RTMP_QueryNextPacketInfo(
5216 IN PNDIS_PACKET *ppPacket,
5217 OUT PACKET_INFO *pPacketInfo,
5218 OUT PUCHAR *pSrcBufVA,
5219 OUT UINT *pSrcBufLen);
5222 BOOLEAN RTMP_FillTxBlkInfo(
5223 IN RTMP_ADAPTER *pAd,
5224 IN TX_BLK *pTxBlk);
5227 PRTMP_SCATTER_GATHER_LIST
5228 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5231 void announce_802_3_packet(
5232 IN PRTMP_ADAPTER pAd,
5233 IN PNDIS_PACKET pPacket);
5236 UINT BA_Reorder_AMSDU_Annnounce(
5237 IN PRTMP_ADAPTER pAd,
5238 IN PNDIS_PACKET pPacket);
5240 PNET_DEV get_netdev_from_bssid(
5241 IN PRTMP_ADAPTER pAd,
5242 IN UCHAR FromWhichBSSID);
5245 PNDIS_PACKET duplicate_pkt(
5246 IN PRTMP_ADAPTER pAd,
5247 IN PUCHAR pHeader802_3,
5248 IN UINT HdrLen,
5249 IN PUCHAR pData,
5250 IN ULONG DataSize,
5251 IN UCHAR FromWhichBSSID);
5254 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5255 IN PRTMP_ADAPTER pAd,
5256 IN PNDIS_PACKET pOldPkt);
5258 void ba_flush_reordering_timeout_mpdus(
5259 IN PRTMP_ADAPTER pAd,
5260 IN PBA_REC_ENTRY pBAEntry,
5261 IN ULONG Now32);
5264 VOID BAOriSessionSetUp(
5265 IN PRTMP_ADAPTER pAd,
5266 IN MAC_TABLE_ENTRY *pEntry,
5267 IN UCHAR TID,
5268 IN USHORT TimeOut,
5269 IN ULONG DelayTime,
5270 IN BOOLEAN isForced);
5272 VOID BASessionTearDownALL(
5273 IN OUT PRTMP_ADAPTER pAd,
5274 IN UCHAR Wcid);
5276 BOOLEAN OS_Need_Clone_Packet(void);
5279 VOID build_tx_packet(
5280 IN PRTMP_ADAPTER pAd,
5281 IN PNDIS_PACKET pPacket,
5282 IN PUCHAR pFrame,
5283 IN ULONG FrameLen);
5286 VOID BAOriSessionTearDown(
5287 IN OUT PRTMP_ADAPTER pAd,
5288 IN UCHAR Wcid,
5289 IN UCHAR TID,
5290 IN BOOLEAN bPassive,
5291 IN BOOLEAN bForceSend);
5293 VOID BARecSessionTearDown(
5294 IN OUT PRTMP_ADAPTER pAd,
5295 IN UCHAR Wcid,
5296 IN UCHAR TID,
5297 IN BOOLEAN bPassive);
5299 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5300 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5302 BOOLEAN rtstrmactohex(
5303 IN char *s1,
5304 IN char *s2);
5306 BOOLEAN rtstrcasecmp(
5307 IN char *s1,
5308 IN char *s2);
5310 char *rtstrstruncasecmp(
5311 IN char *s1,
5312 IN char *s2);
5314 char *rtstrstr(
5315 IN const char * s1,
5316 IN const char * s2);
5318 char *rstrtok(
5319 IN char * s,
5320 IN const char * ct);
5322 int rtinet_aton(
5323 const char *cp,
5324 unsigned int *addr);
5326 ////////// common ioctl functions //////////
5327 INT Set_DriverVersion_Proc(
5328 IN PRTMP_ADAPTER pAd,
5329 IN PUCHAR arg);
5331 INT Set_CountryRegion_Proc(
5332 IN PRTMP_ADAPTER pAd,
5333 IN PUCHAR arg);
5335 INT Set_CountryRegionABand_Proc(
5336 IN PRTMP_ADAPTER pAd,
5337 IN PUCHAR arg);
5339 INT Set_WirelessMode_Proc(
5340 IN PRTMP_ADAPTER pAd,
5341 IN PUCHAR arg);
5343 INT Set_Channel_Proc(
5344 IN PRTMP_ADAPTER pAd,
5345 IN PUCHAR arg);
5347 INT Set_ShortSlot_Proc(
5348 IN PRTMP_ADAPTER pAd,
5349 IN PUCHAR arg);
5351 INT Set_TxPower_Proc(
5352 IN PRTMP_ADAPTER pAd,
5353 IN PUCHAR arg);
5355 INT Set_BGProtection_Proc(
5356 IN PRTMP_ADAPTER pAd,
5357 IN PUCHAR arg);
5359 INT Set_TxPreamble_Proc(
5360 IN PRTMP_ADAPTER pAd,
5361 IN PUCHAR arg);
5363 INT Set_RTSThreshold_Proc(
5364 IN PRTMP_ADAPTER pAd,
5365 IN PUCHAR arg);
5367 INT Set_FragThreshold_Proc(
5368 IN PRTMP_ADAPTER pAd,
5369 IN PUCHAR arg);
5371 INT Set_TxBurst_Proc(
5372 IN PRTMP_ADAPTER pAd,
5373 IN PUCHAR arg);
5375 #ifdef AGGREGATION_SUPPORT
5376 INT Set_PktAggregate_Proc(
5377 IN PRTMP_ADAPTER pAd,
5378 IN PUCHAR arg);
5379 #endif
5381 INT Set_IEEE80211H_Proc(
5382 IN PRTMP_ADAPTER pAd,
5383 IN PUCHAR arg);
5385 #ifdef DBG
5386 INT Set_Debug_Proc(
5387 IN PRTMP_ADAPTER pAd,
5388 IN PUCHAR arg);
5389 #endif
5391 INT Show_DescInfo_Proc(
5392 IN PRTMP_ADAPTER pAd,
5393 IN PUCHAR arg);
5395 INT Set_ResetStatCounter_Proc(
5396 IN PRTMP_ADAPTER pAd,
5397 IN PUCHAR arg);
5399 INT Set_BASetup_Proc(
5400 IN PRTMP_ADAPTER pAd,
5401 IN PUCHAR arg);
5403 INT Set_BADecline_Proc(
5404 IN PRTMP_ADAPTER pAd,
5405 IN PUCHAR arg);
5407 INT Set_BAOriTearDown_Proc(
5408 IN PRTMP_ADAPTER pAd,
5409 IN PUCHAR arg);
5411 INT Set_BARecTearDown_Proc(
5412 IN PRTMP_ADAPTER pAd,
5413 IN PUCHAR arg);
5415 INT Set_HtBw_Proc(
5416 IN PRTMP_ADAPTER pAd,
5417 IN PUCHAR arg);
5419 INT Set_HtMcs_Proc(
5420 IN PRTMP_ADAPTER pAd,
5421 IN PUCHAR arg);
5423 INT Set_HtGi_Proc(
5424 IN PRTMP_ADAPTER pAd,
5425 IN PUCHAR arg);
5427 INT Set_HtOpMode_Proc(
5428 IN PRTMP_ADAPTER pAd,
5429 IN PUCHAR arg);
5431 INT Set_HtStbc_Proc(
5432 IN PRTMP_ADAPTER pAd,
5433 IN PUCHAR arg);
5435 INT Set_HtHtc_Proc(
5436 IN PRTMP_ADAPTER pAd,
5437 IN PUCHAR arg);
5439 INT Set_HtExtcha_Proc(
5440 IN PRTMP_ADAPTER pAd,
5441 IN PUCHAR arg);
5443 INT Set_HtMpduDensity_Proc(
5444 IN PRTMP_ADAPTER pAd,
5445 IN PUCHAR arg);
5447 INT Set_HtBaWinSize_Proc(
5448 IN PRTMP_ADAPTER pAd,
5449 IN PUCHAR arg);
5451 INT Set_HtRdg_Proc(
5452 IN PRTMP_ADAPTER pAd,
5453 IN PUCHAR arg);
5455 INT Set_HtLinkAdapt_Proc(
5456 IN PRTMP_ADAPTER pAd,
5457 IN PUCHAR arg);
5459 INT Set_HtAmsdu_Proc(
5460 IN PRTMP_ADAPTER pAd,
5461 IN PUCHAR arg);
5463 INT Set_HtAutoBa_Proc(
5464 IN PRTMP_ADAPTER pAd,
5465 IN PUCHAR arg);
5467 INT Set_HtProtect_Proc(
5468 IN PRTMP_ADAPTER pAd,
5469 IN PUCHAR arg);
5471 INT Set_HtMimoPs_Proc(
5472 IN PRTMP_ADAPTER pAd,
5473 IN PUCHAR arg);
5476 INT Set_ForceShortGI_Proc(
5477 IN PRTMP_ADAPTER pAd,
5478 IN PUCHAR arg);
5480 INT Set_ForceGF_Proc(
5481 IN PRTMP_ADAPTER pAd,
5482 IN PUCHAR arg);
5484 INT SetCommonHT(
5485 IN PRTMP_ADAPTER pAd);
5487 INT Set_SendPSMPAction_Proc(
5488 IN PRTMP_ADAPTER pAd,
5489 IN PUCHAR arg);
5491 INT Set_HtMIMOPSmode_Proc(
5492 IN PRTMP_ADAPTER pAd,
5493 IN PUCHAR arg);
5496 INT Set_HtTxBASize_Proc(
5497 IN PRTMP_ADAPTER pAd,
5498 IN PUCHAR arg);
5500 INT WpaCheckEapCode(
5501 IN PRTMP_ADAPTER pAd,
5502 IN PUCHAR pFrame,
5503 IN USHORT FrameLen,
5504 IN USHORT OffSet);
5506 VOID WpaSendMicFailureToWpaSupplicant(
5507 IN PRTMP_ADAPTER pAd,
5508 IN BOOLEAN bUnicast);
5510 int wext_notify_event_assoc(
5511 IN RTMP_ADAPTER *pAd);
5513 BOOLEAN STARxDoneInterruptHandle(
5514 IN PRTMP_ADAPTER pAd,
5515 IN BOOLEAN argc);
5517 // AMPDU packet indication
5518 VOID Indicate_AMPDU_Packet(
5519 IN PRTMP_ADAPTER pAd,
5520 IN RX_BLK *pRxBlk,
5521 IN UCHAR FromWhichBSSID);
5523 // AMSDU packet indication
5524 VOID Indicate_AMSDU_Packet(
5525 IN PRTMP_ADAPTER pAd,
5526 IN RX_BLK *pRxBlk,
5527 IN UCHAR FromWhichBSSID);
5529 // Normal legacy Rx packet indication
5530 VOID Indicate_Legacy_Packet(
5531 IN PRTMP_ADAPTER pAd,
5532 IN RX_BLK *pRxBlk,
5533 IN UCHAR FromWhichBSSID);
5535 VOID Indicate_EAPOL_Packet(
5536 IN PRTMP_ADAPTER pAd,
5537 IN RX_BLK *pRxBlk,
5538 IN UCHAR FromWhichBSSID);
5540 void update_os_packet_info(
5541 IN PRTMP_ADAPTER pAd,
5542 IN RX_BLK *pRxBlk,
5543 IN UCHAR FromWhichBSSID);
5545 void wlan_802_11_to_802_3_packet(
5546 IN PRTMP_ADAPTER pAd,
5547 IN RX_BLK *pRxBlk,
5548 IN PUCHAR pHeader802_3,
5549 IN UCHAR FromWhichBSSID);
5551 UINT deaggregate_AMSDU_announce(
5552 IN PRTMP_ADAPTER pAd,
5553 PNDIS_PACKET pPacket,
5554 IN PUCHAR pData,
5555 IN ULONG DataSize);
5557 // remove LLC and get 802_3 Header
5558 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
5560 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
5562 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
5564 _pDA = _pRxBlk->pHeader->Addr3; \
5565 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
5567 else \
5569 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
5571 _pDA = _pRxBlk->pHeader->Addr1; \
5572 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
5573 _pSA = _pRxBlk->pHeader->Addr2; \
5574 else \
5575 _pSA = _pRxBlk->pHeader->Addr3; \
5577 else \
5579 _pDA = _pRxBlk->pHeader->Addr1; \
5580 _pSA = _pRxBlk->pHeader->Addr2; \
5584 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
5585 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
5588 VOID Sta_Announce_or_Forward_802_3_Packet(
5589 IN PRTMP_ADAPTER pAd,
5590 IN PNDIS_PACKET pPacket,
5591 IN UCHAR FromWhichBSSID);
5593 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
5594 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
5595 //announce_802_3_packet(_pAd, _pPacket);
5597 PNDIS_PACKET DuplicatePacket(
5598 IN PRTMP_ADAPTER pAd,
5599 IN PNDIS_PACKET pPacket,
5600 IN UCHAR FromWhichBSSID);
5603 PNDIS_PACKET ClonePacket(
5604 IN PRTMP_ADAPTER pAd,
5605 IN PNDIS_PACKET pPacket,
5606 IN PUCHAR pData,
5607 IN ULONG DataSize);
5610 // Normal, AMPDU or AMSDU
5611 VOID CmmRxnonRalinkFrameIndicate(
5612 IN PRTMP_ADAPTER pAd,
5613 IN RX_BLK *pRxBlk,
5614 IN UCHAR FromWhichBSSID);
5616 VOID CmmRxRalinkFrameIndicate(
5617 IN PRTMP_ADAPTER pAd,
5618 IN MAC_TABLE_ENTRY *pEntry,
5619 IN RX_BLK *pRxBlk,
5620 IN UCHAR FromWhichBSSID);
5622 VOID Update_Rssi_Sample(
5623 IN PRTMP_ADAPTER pAd,
5624 IN RSSI_SAMPLE *pRssi,
5625 IN PRXWI_STRUC pRxWI);
5627 PNDIS_PACKET RTMPDeFragmentDataFrame(
5628 IN PRTMP_ADAPTER pAd,
5629 IN RX_BLK *pRxBlk);
5631 ////////////////////////////////////////
5632 enum {
5633 DIDmsg_lnxind_wlansniffrm = 0x00000044,
5634 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
5635 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
5636 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
5637 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
5638 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
5639 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
5640 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
5641 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
5642 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
5643 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
5645 enum {
5646 P80211ENUM_msgitem_status_no_value = 0x00
5648 enum {
5649 P80211ENUM_truth_false = 0x00,
5650 P80211ENUM_truth_true = 0x01
5653 /* Definition from madwifi */
5654 typedef struct {
5655 UINT32 did;
5656 UINT16 status;
5657 UINT16 len;
5658 UINT32 data;
5659 } p80211item_uint32_t;
5661 typedef struct {
5662 UINT32 msgcode;
5663 UINT32 msglen;
5664 #define WLAN_DEVNAMELEN_MAX 16
5665 UINT8 devname[WLAN_DEVNAMELEN_MAX];
5666 p80211item_uint32_t hosttime;
5667 p80211item_uint32_t mactime;
5668 p80211item_uint32_t channel;
5669 p80211item_uint32_t rssi;
5670 p80211item_uint32_t sq;
5671 p80211item_uint32_t signal;
5672 p80211item_uint32_t noise;
5673 p80211item_uint32_t rate;
5674 p80211item_uint32_t istx;
5675 p80211item_uint32_t frmlen;
5676 } wlan_ng_prism2_header;
5678 /* The radio capture header precedes the 802.11 header. */
5679 typedef struct PACKED _ieee80211_radiotap_header {
5680 UINT8 it_version; /* Version 0. Only increases
5681 * for drastic changes,
5682 * introduction of compatible
5683 * new fields does not count.
5685 UINT8 it_pad;
5686 UINT16 it_len; /* length of the whole
5687 * header in bytes, including
5688 * it_version, it_pad,
5689 * it_len, and data fields.
5691 UINT32 it_present; /* A bitmap telling which
5692 * fields are present. Set bit 31
5693 * (0x80000000) to extend the
5694 * bitmap by another 32 bits.
5695 * Additional extensions are made
5696 * by setting bit 31.
5698 }ieee80211_radiotap_header ;
5700 enum ieee80211_radiotap_type {
5701 IEEE80211_RADIOTAP_TSFT = 0,
5702 IEEE80211_RADIOTAP_FLAGS = 1,
5703 IEEE80211_RADIOTAP_RATE = 2,
5704 IEEE80211_RADIOTAP_CHANNEL = 3,
5705 IEEE80211_RADIOTAP_FHSS = 4,
5706 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
5707 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
5708 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
5709 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
5710 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
5711 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
5712 IEEE80211_RADIOTAP_ANTENNA = 11,
5713 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
5714 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
5717 #define WLAN_RADIOTAP_PRESENT ( \
5718 (1 << IEEE80211_RADIOTAP_TSFT) | \
5719 (1 << IEEE80211_RADIOTAP_FLAGS) | \
5720 (1 << IEEE80211_RADIOTAP_RATE) | \
5723 typedef struct _wlan_radiotap_header {
5724 ieee80211_radiotap_header wt_ihdr;
5725 INT64 wt_tsft;
5726 UINT8 wt_flags;
5727 UINT8 wt_rate;
5728 } wlan_radiotap_header;
5729 /* Definition from madwifi */
5731 void send_monitor_packets(
5732 IN PRTMP_ADAPTER pAd,
5733 IN RX_BLK *pRxBlk);
5735 // This function will be called when query /proc
5736 struct iw_statistics *rt28xx_get_wireless_stats(
5737 IN struct net_device *net_dev);
5739 VOID RTMPSetDesiredRates(
5740 IN PRTMP_ADAPTER pAdapter,
5741 IN LONG Rates);
5743 INT Set_FixedTxMode_Proc(
5744 IN PRTMP_ADAPTER pAd,
5745 IN PUCHAR arg);
5747 static inline char* GetPhyMode(
5748 int Mode)
5750 switch(Mode)
5752 case MODE_CCK:
5753 return "CCK";
5755 case MODE_OFDM:
5756 return "OFDM";
5757 case MODE_HTMIX:
5758 return "HTMIX";
5760 case MODE_HTGREENFIELD:
5761 return "GREEN";
5762 default:
5763 return "N/A";
5768 static inline char* GetBW(
5769 int BW)
5771 switch(BW)
5773 case BW_10:
5774 return "10M";
5776 case BW_20:
5777 return "20M";
5778 case BW_40:
5779 return "40M";
5780 default:
5781 return "N/A";
5786 VOID RT28xxThreadTerminate(
5787 IN RTMP_ADAPTER *pAd);
5789 BOOLEAN RT28XXChipsetCheck(
5790 IN void *_dev_p);
5792 BOOLEAN RT28XXNetDevInit(
5793 IN void *_dev_p,
5794 IN struct net_device *net_dev,
5795 IN RTMP_ADAPTER *pAd);
5797 BOOLEAN RT28XXProbePostConfig(
5798 IN void *_dev_p,
5799 IN RTMP_ADAPTER *pAd,
5800 IN INT32 argc);
5802 VOID RT28XXDMADisable(
5803 IN RTMP_ADAPTER *pAd);
5805 VOID RT28XXDMAEnable(
5806 IN RTMP_ADAPTER *pAd);
5808 VOID RT28xx_UpdateBeaconToAsic(
5809 IN RTMP_ADAPTER * pAd,
5810 IN INT apidx,
5811 IN ULONG BeaconLen,
5812 IN ULONG UpdatePos);
5814 INT rt28xx_sta_ioctl(
5815 IN struct net_device *net_dev,
5816 IN OUT struct ifreq *rq,
5817 IN INT cmd);
5819 ////////////////////////////////////////
5820 PNDIS_PACKET GetPacketFromRxRing(
5821 IN PRTMP_ADAPTER pAd,
5822 OUT PRT28XX_RXD_STRUC pSaveRxD,
5823 OUT BOOLEAN *pbReschedule,
5824 IN OUT UINT32 *pRxPending);
5827 void kill_thread_task(PRTMP_ADAPTER pAd);
5829 void tbtt_tasklet(unsigned long data);
5831 #ifdef RT2860
5833 // Function Prototype in cmm_data_2860.c
5835 USHORT RtmpPCI_WriteTxResource(
5836 IN PRTMP_ADAPTER pAd,
5837 IN TX_BLK *pTxBlk,
5838 IN BOOLEAN bIsLast,
5839 OUT USHORT *FreeNumber);
5841 USHORT RtmpPCI_WriteSingleTxResource(
5842 IN PRTMP_ADAPTER pAd,
5843 IN TX_BLK *pTxBlk,
5844 IN BOOLEAN bIsLast,
5845 OUT USHORT *FreeNumber);
5847 USHORT RtmpPCI_WriteMultiTxResource(
5848 IN PRTMP_ADAPTER pAd,
5849 IN TX_BLK *pTxBlk,
5850 IN UCHAR frameNum,
5851 OUT USHORT *FreeNumber);
5853 USHORT RtmpPCI_WriteFragTxResource(
5854 IN PRTMP_ADAPTER pAd,
5855 IN TX_BLK *pTxBlk,
5856 IN UCHAR fragNum,
5857 OUT USHORT *FreeNumber);
5859 USHORT RtmpPCI_WriteSubTxResource(
5860 IN PRTMP_ADAPTER pAd,
5861 IN TX_BLK *pTxBlk,
5862 IN BOOLEAN bIsLast,
5863 OUT USHORT *FreeNumber);
5865 VOID RtmpPCI_FinalWriteTxResource(
5866 IN PRTMP_ADAPTER pAd,
5867 IN TX_BLK *pTxBlk,
5868 IN USHORT totalMPDUSize,
5869 IN USHORT FirstTxIdx);
5871 VOID RtmpPCIDataLastTxIdx(
5872 IN PRTMP_ADAPTER pAd,
5873 IN UCHAR QueIdx,
5874 IN USHORT LastTxIdx);
5876 VOID RtmpPCIDataKickOut(
5877 IN PRTMP_ADAPTER pAd,
5878 IN TX_BLK *pTxBlk,
5879 IN UCHAR QueIdx);
5882 int RtmpPCIMgmtKickOut(
5883 IN RTMP_ADAPTER *pAd,
5884 IN UCHAR QueIdx,
5885 IN PNDIS_PACKET pPacket,
5886 IN PUCHAR pSrcBufVA,
5887 IN UINT SrcBufLen);
5890 NDIS_STATUS RTMPCheckRxError(
5891 IN PRTMP_ADAPTER pAd,
5892 IN PHEADER_802_11 pHeader,
5893 IN PRXWI_STRUC pRxWI,
5894 IN PRT28XX_RXD_STRUC pRxD);
5896 VOID RTMPInitPCIeLinkCtrlValue(
5897 IN PRTMP_ADAPTER pAd);
5899 VOID RTMPFindHostPCIDev(
5900 IN PRTMP_ADAPTER pAd);
5902 VOID RTMPPCIeLinkCtrlValueRestore(
5903 IN PRTMP_ADAPTER pAd,
5904 IN UCHAR Level);
5906 VOID RTMPPCIeLinkCtrlSetting(
5907 IN PRTMP_ADAPTER pAd,
5908 IN USHORT Max);
5910 VOID RT28xxPciAsicRadioOff(
5911 IN PRTMP_ADAPTER pAd,
5912 IN UCHAR Level,
5913 IN USHORT TbttNumToNextWakeUp);
5915 BOOLEAN RT28xxPciAsicRadioOn(
5916 IN PRTMP_ADAPTER pAd,
5917 IN UCHAR Level);
5919 VOID RT28xxPciStaAsicForceWakeup(
5920 IN PRTMP_ADAPTER pAd,
5921 IN UCHAR Level);
5923 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
5924 IN PRTMP_ADAPTER pAd,
5925 IN USHORT TbttNumToNextWakeUp);
5927 VOID PsPollWakeExec(
5928 IN PVOID SystemSpecific1,
5929 IN PVOID FunctionContext,
5930 IN PVOID SystemSpecific2,
5931 IN PVOID SystemSpecific3);
5933 VOID RadioOnExec(
5934 IN PVOID SystemSpecific1,
5935 IN PVOID FunctionContext,
5936 IN PVOID SystemSpecific2,
5937 IN PVOID SystemSpecific3);
5939 VOID RT28xxPciMlmeRadioOn(
5940 IN PRTMP_ADAPTER pAd);
5942 VOID RT28xxPciMlmeRadioOFF(
5943 IN PRTMP_ADAPTER pAd);
5944 #endif /* RT2860 */
5946 VOID AsicTurnOffRFClk(
5947 IN PRTMP_ADAPTER pAd,
5948 IN UCHAR Channel);
5950 VOID AsicTurnOnRFClk(
5951 IN PRTMP_ADAPTER pAd,
5952 IN UCHAR Channel);
5954 NTSTATUS RT30xxWriteRFRegister(
5955 IN PRTMP_ADAPTER pAd,
5956 IN UCHAR RegID,
5957 IN UCHAR Value);
5959 NTSTATUS RT30xxReadRFRegister(
5960 IN PRTMP_ADAPTER pAd,
5961 IN UCHAR RegID,
5962 IN PUCHAR pValue);
5964 UCHAR eFuseReadRegisters(
5965 IN PRTMP_ADAPTER pAd,
5966 IN USHORT Offset,
5967 IN USHORT Length,
5968 OUT USHORT* pData);
5970 VOID eFuseReadPhysical(
5971 IN PRTMP_ADAPTER pAd,
5972 IN PUSHORT lpInBuffer,
5973 IN ULONG nInBufferSize,
5974 OUT PUSHORT lpOutBuffer,
5975 IN ULONG nOutBufferSize
5978 NTSTATUS eFuseRead(
5979 IN PRTMP_ADAPTER pAd,
5980 IN USHORT Offset,
5981 OUT PUCHAR pData,
5982 IN USHORT Length);
5984 VOID eFusePhysicalWriteRegisters(
5985 IN PRTMP_ADAPTER pAd,
5986 IN USHORT Offset,
5987 IN USHORT Length,
5988 OUT USHORT* pData);
5990 NTSTATUS eFuseWriteRegisters(
5991 IN PRTMP_ADAPTER pAd,
5992 IN USHORT Offset,
5993 IN USHORT Length,
5994 IN USHORT* pData);
5996 VOID eFuseWritePhysical(
5997 IN PRTMP_ADAPTER pAd,
5998 PUSHORT lpInBuffer,
5999 ULONG nInBufferSize,
6000 PUCHAR lpOutBuffer,
6001 ULONG nOutBufferSize
6004 NTSTATUS eFuseWrite(
6005 IN PRTMP_ADAPTER pAd,
6006 IN USHORT Offset,
6007 IN PUCHAR pData,
6008 IN USHORT length);
6010 INT set_eFuseGetFreeBlockCount_Proc(
6011 IN PRTMP_ADAPTER pAd,
6012 IN PUCHAR arg);
6014 INT set_eFusedump_Proc(
6015 IN PRTMP_ADAPTER pAd,
6016 IN PUCHAR arg);
6018 INT set_eFuseLoadFromBin_Proc(
6019 IN PRTMP_ADAPTER pAd,
6020 IN PUCHAR arg);
6022 NTSTATUS eFuseWriteRegistersFromBin(
6023 IN PRTMP_ADAPTER pAd,
6024 IN USHORT Offset,
6025 IN USHORT Length,
6026 IN USHORT* pData);
6028 VOID eFusePhysicalReadRegisters(
6029 IN PRTMP_ADAPTER pAd,
6030 IN USHORT Offset,
6031 IN USHORT Length,
6032 OUT USHORT* pData);
6034 VOID RT30xxLoadRFNormalModeSetup(
6035 IN PRTMP_ADAPTER pAd);
6037 VOID RT30xxLoadRFSleepModeSetup(
6038 IN PRTMP_ADAPTER pAd);
6040 VOID RT30xxReverseRFSleepModeSetup(
6041 IN PRTMP_ADAPTER pAd);
6043 #ifdef RT2870
6045 // Function Prototype in rtusb_bulk.c
6047 VOID RTUSBInitTxDesc(
6048 IN PRTMP_ADAPTER pAd,
6049 IN PTX_CONTEXT pTxContext,
6050 IN UCHAR BulkOutPipeId,
6051 IN usb_complete_t Func);
6053 VOID RTUSBInitHTTxDesc(
6054 IN PRTMP_ADAPTER pAd,
6055 IN PHT_TX_CONTEXT pTxContext,
6056 IN UCHAR BulkOutPipeId,
6057 IN ULONG BulkOutSize,
6058 IN usb_complete_t Func);
6060 VOID RTUSBCleanUpDataBulkOutQueue(
6061 IN PRTMP_ADAPTER pAd);
6063 VOID RTUSBCancelPendingBulkOutIRP(
6064 IN PRTMP_ADAPTER pAd);
6066 VOID RTUSBBulkOutDataPacket(
6067 IN PRTMP_ADAPTER pAd,
6068 IN UCHAR BulkOutPipeId,
6069 IN UCHAR Index);
6071 VOID RTUSBBulkOutNullFrame(
6072 IN PRTMP_ADAPTER pAd);
6074 VOID RTUSBBulkOutRTSFrame(
6075 IN PRTMP_ADAPTER pAd);
6077 VOID RTUSBCancelPendingBulkInIRP(
6078 IN PRTMP_ADAPTER pAd);
6080 VOID RTUSBCancelPendingIRPs(
6081 IN PRTMP_ADAPTER pAd);
6083 VOID RTUSBBulkOutMLMEPacket(
6084 IN PRTMP_ADAPTER pAd,
6085 IN UCHAR Index);
6087 VOID RTUSBBulkOutPsPoll(
6088 IN PRTMP_ADAPTER pAd);
6090 VOID RTUSBCleanUpMLMEBulkOutQueue(
6091 IN PRTMP_ADAPTER pAd);
6093 VOID RTUSBKickBulkOut(
6094 IN PRTMP_ADAPTER pAd);
6096 VOID RTUSBBulkReceive(
6097 IN PRTMP_ADAPTER pAd);
6099 VOID DoBulkIn(
6100 IN RTMP_ADAPTER *pAd);
6102 VOID RTUSBInitRxDesc(
6103 IN PRTMP_ADAPTER pAd,
6104 IN PRX_CONTEXT pRxContext);
6107 // Function Prototype in rtusb_io.c
6109 NTSTATUS RTUSBMultiRead(
6110 IN PRTMP_ADAPTER pAd,
6111 IN USHORT Offset,
6112 OUT PUCHAR pData,
6113 IN USHORT length);
6115 NTSTATUS RTUSBMultiWrite(
6116 IN PRTMP_ADAPTER pAd,
6117 IN USHORT Offset,
6118 IN PUCHAR pData,
6119 IN USHORT length);
6121 NTSTATUS RTUSBMultiWrite_OneByte(
6122 IN PRTMP_ADAPTER pAd,
6123 IN USHORT Offset,
6124 IN PUCHAR pData);
6126 NTSTATUS RTUSBReadBBPRegister(
6127 IN PRTMP_ADAPTER pAd,
6128 IN UCHAR Id,
6129 IN PUCHAR pValue);
6131 NTSTATUS RTUSBWriteBBPRegister(
6132 IN PRTMP_ADAPTER pAd,
6133 IN UCHAR Id,
6134 IN UCHAR Value);
6136 NTSTATUS RTUSBWriteRFRegister(
6137 IN PRTMP_ADAPTER pAd,
6138 IN UINT32 Value);
6140 NTSTATUS RTUSB_VendorRequest(
6141 IN PRTMP_ADAPTER pAd,
6142 IN UINT32 TransferFlags,
6143 IN UCHAR ReservedBits,
6144 IN UCHAR Request,
6145 IN USHORT Value,
6146 IN USHORT Index,
6147 IN PVOID TransferBuffer,
6148 IN UINT32 TransferBufferLength);
6150 NTSTATUS RTUSBReadEEPROM(
6151 IN PRTMP_ADAPTER pAd,
6152 IN USHORT Offset,
6153 OUT PUCHAR pData,
6154 IN USHORT length);
6156 NTSTATUS RTUSBWriteEEPROM(
6157 IN PRTMP_ADAPTER pAd,
6158 IN USHORT Offset,
6159 IN PUCHAR pData,
6160 IN USHORT length);
6162 VOID RTUSBPutToSleep(
6163 IN PRTMP_ADAPTER pAd);
6165 NTSTATUS RTUSBWakeUp(
6166 IN PRTMP_ADAPTER pAd);
6168 VOID RTUSBInitializeCmdQ(
6169 IN PCmdQ cmdq);
6171 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6172 IN PRTMP_ADAPTER pAd,
6173 IN NDIS_OID Oid,
6174 IN BOOLEAN SetInformation,
6175 IN PVOID pInformationBuffer,
6176 IN UINT32 InformationBufferLength);
6178 NDIS_STATUS RTUSBEnqueueInternalCmd(
6179 IN PRTMP_ADAPTER pAd,
6180 IN NDIS_OID Oid,
6181 IN PVOID pInformationBuffer,
6182 IN UINT32 InformationBufferLength);
6184 VOID RTUSBDequeueCmd(
6185 IN PCmdQ cmdq,
6186 OUT PCmdQElmt *pcmdqelmt);
6188 INT RTUSBCmdThread(
6189 IN OUT PVOID Context);
6191 INT TimerQThread(
6192 IN OUT PVOID Context);
6194 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6195 IN RTMP_ADAPTER *pAd,
6196 IN RALINK_TIMER_STRUCT *pTimer);
6198 BOOLEAN RT2870_TimerQ_Remove(
6199 IN RTMP_ADAPTER *pAd,
6200 IN RALINK_TIMER_STRUCT *pTimer);
6202 void RT2870_TimerQ_Exit(
6203 IN RTMP_ADAPTER *pAd);
6205 void RT2870_TimerQ_Init(
6206 IN RTMP_ADAPTER *pAd);
6208 VOID RT2870_BssBeaconExit(
6209 IN RTMP_ADAPTER *pAd);
6211 VOID RT2870_BssBeaconStop(
6212 IN RTMP_ADAPTER *pAd);
6214 VOID RT2870_BssBeaconStart(
6215 IN RTMP_ADAPTER * pAd);
6217 VOID RT2870_BssBeaconInit(
6218 IN RTMP_ADAPTER *pAd);
6220 VOID RT2870_WatchDog(
6221 IN RTMP_ADAPTER *pAd);
6223 NTSTATUS RTUSBWriteMACRegister(
6224 IN PRTMP_ADAPTER pAd,
6225 IN USHORT Offset,
6226 IN UINT32 Value);
6228 NTSTATUS RTUSBReadMACRegister(
6229 IN PRTMP_ADAPTER pAd,
6230 IN USHORT Offset,
6231 OUT PUINT32 pValue);
6233 NTSTATUS RTUSBSingleWrite(
6234 IN RTMP_ADAPTER *pAd,
6235 IN USHORT Offset,
6236 IN USHORT Value);
6238 NTSTATUS RTUSBFirmwareRun(
6239 IN PRTMP_ADAPTER pAd);
6241 NTSTATUS RTUSBFirmwareWrite(
6242 IN PRTMP_ADAPTER pAd,
6243 IN PUCHAR pFwImage,
6244 IN ULONG FwLen);
6246 NTSTATUS RTUSBFirmwareOpmode(
6247 IN PRTMP_ADAPTER pAd,
6248 OUT PUINT32 pValue);
6250 NTSTATUS RTUSBVenderReset(
6251 IN PRTMP_ADAPTER pAd);
6253 VOID CMDHandler(
6254 IN PRTMP_ADAPTER pAd);
6257 NDIS_STATUS CreateThreads(
6258 IN struct net_device *net_dev );
6261 VOID MacTableInitialize(
6262 IN PRTMP_ADAPTER pAd);
6264 VOID MlmeSetPsm(
6265 IN PRTMP_ADAPTER pAd,
6266 IN USHORT psm);
6268 NDIS_STATUS RTMPWPAAddKeyProc(
6269 IN PRTMP_ADAPTER pAd,
6270 IN PVOID pBuf);
6272 VOID AsicRxAntEvalAction(
6273 IN PRTMP_ADAPTER pAd);
6275 NDIS_STATUS RTMPCheckRxError(
6276 IN PRTMP_ADAPTER pAd,
6277 IN PHEADER_802_11 pHeader,
6278 IN PRXWI_STRUC pRxWI,
6279 IN PRT28XX_RXD_STRUC pRxINFO);
6281 INT MlmeThread(
6282 IN PVOID Context);
6285 // Function Prototype in rtusb_data.c
6287 NDIS_STATUS RTUSBFreeDescriptorRequest(
6288 IN PRTMP_ADAPTER pAd,
6289 IN UCHAR BulkOutPipeId,
6290 IN UINT32 NumberRequired);
6293 BOOLEAN RTUSBNeedQueueBackForAgg(
6294 IN RTMP_ADAPTER *pAd,
6295 IN UCHAR BulkOutPipeId);
6298 VOID RTMPWriteTxInfo(
6299 IN PRTMP_ADAPTER pAd,
6300 IN PTXINFO_STRUC pTxInfo,
6301 IN USHORT USBDMApktLen,
6302 IN BOOLEAN bWiv,
6303 IN UCHAR QueueSel,
6304 IN UCHAR NextValid,
6305 IN UCHAR TxBurst);
6308 // Function Prototype in cmm_data_2870.c
6310 USHORT RtmpUSB_WriteSubTxResource(
6311 IN PRTMP_ADAPTER pAd,
6312 IN TX_BLK *pTxBlk,
6313 IN BOOLEAN bIsLast,
6314 OUT USHORT *FreeNumber);
6316 USHORT RtmpUSB_WriteSingleTxResource(
6317 IN PRTMP_ADAPTER pAd,
6318 IN TX_BLK *pTxBlk,
6319 IN BOOLEAN bIsLast,
6320 OUT USHORT *FreeNumber);
6322 USHORT RtmpUSB_WriteFragTxResource(
6323 IN PRTMP_ADAPTER pAd,
6324 IN TX_BLK *pTxBlk,
6325 IN UCHAR fragNum,
6326 OUT USHORT *FreeNumber);
6328 USHORT RtmpUSB_WriteMultiTxResource(
6329 IN PRTMP_ADAPTER pAd,
6330 IN TX_BLK *pTxBlk,
6331 IN UCHAR frameNum,
6332 OUT USHORT *FreeNumber);
6334 VOID RtmpUSB_FinalWriteTxResource(
6335 IN PRTMP_ADAPTER pAd,
6336 IN TX_BLK *pTxBlk,
6337 IN USHORT totalMPDUSize,
6338 #ifdef RT2860
6339 IN USHORT FirstTxIdx);
6340 #endif
6341 IN USHORT TxIdx);
6343 VOID RtmpUSBDataLastTxIdx(
6344 IN PRTMP_ADAPTER pAd,
6345 IN UCHAR QueIdx,
6346 IN USHORT TxIdx);
6348 VOID RtmpUSBDataKickOut(
6349 IN PRTMP_ADAPTER pAd,
6350 IN TX_BLK *pTxBlk,
6351 IN UCHAR QueIdx);
6354 int RtmpUSBMgmtKickOut(
6355 IN RTMP_ADAPTER *pAd,
6356 IN UCHAR QueIdx,
6357 IN PNDIS_PACKET pPacket,
6358 IN PUCHAR pSrcBufVA,
6359 IN UINT SrcBufLen);
6361 VOID RtmpUSBNullFrameKickOut(
6362 IN RTMP_ADAPTER *pAd,
6363 IN UCHAR QueIdx,
6364 IN UCHAR *pNullFrame,
6365 IN UINT32 frameLen);
6367 VOID RT28xxUsbStaAsicForceWakeup(
6368 IN PRTMP_ADAPTER pAd,
6369 IN BOOLEAN bFromTx);
6371 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
6372 IN PRTMP_ADAPTER pAd,
6373 IN USHORT TbttNumToNextWakeUp);
6375 VOID RT28xxUsbMlmeRadioOn(
6376 IN PRTMP_ADAPTER pAd);
6378 VOID RT28xxUsbMlmeRadioOFF(
6379 IN PRTMP_ADAPTER pAd);
6380 #endif // RT2870 //
6382 INT RTMPShowCfgValue(
6383 IN PRTMP_ADAPTER pAd,
6384 IN PUCHAR pName,
6385 IN PUCHAR pBuf);
6387 PCHAR RTMPGetRalinkAuthModeStr(
6388 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6390 PCHAR RTMPGetRalinkEncryModeStr(
6391 IN USHORT encryMode);
6393 VOID AsicStaBbpTuning(
6394 IN PRTMP_ADAPTER pAd);
6396 #ifdef RT2860
6397 VOID AsicResetFromDMABusy(
6398 IN PRTMP_ADAPTER pAd);
6400 VOID AsicResetBBP(
6401 IN PRTMP_ADAPTER pAd);
6403 VOID AsicResetMAC(
6404 IN PRTMP_ADAPTER pAd);
6406 VOID AsicResetPBF(
6407 IN PRTMP_ADAPTER pAd);
6408 #endif
6409 #ifdef RT2870
6410 BOOLEAN StaAddMacTableEntry(
6411 IN PRTMP_ADAPTER pAd,
6412 IN PMAC_TABLE_ENTRY pEntry,
6413 IN UCHAR MaxSupportedRateIn500Kbps,
6414 IN HT_CAPABILITY_IE *pHtCapability,
6415 IN UCHAR HtCapabilityLen,
6416 IN USHORT CapabilityInfo);
6417 #endif
6419 void RTMP_IndicateMediaState(
6420 IN PRTMP_ADAPTER pAd);
6422 VOID ReSyncBeaconTime(
6423 IN PRTMP_ADAPTER pAd);
6425 VOID RTMPSetAGCInitValue(
6426 IN PRTMP_ADAPTER pAd,
6427 IN UCHAR BandWidth);
6429 int rt28xx_close(IN PNET_DEV dev);
6430 int rt28xx_open(IN PNET_DEV dev);
6432 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6434 if (VIRTUAL_IF_NUM(pAd) == 0)
6436 if (rt28xx_open(pAd->net_dev) != 0)
6437 return -1;
6439 else
6442 VIRTUAL_IF_INC(pAd);
6443 return 0;
6446 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6448 VIRTUAL_IF_DEC(pAd);
6449 if (VIRTUAL_IF_NUM(pAd) == 0)
6450 rt28xx_close(pAd->net_dev);
6451 return;
6455 #endif // __RTMP_H__