Staging: rtxxx0: unify different RT30xx{Read,Write}RFRegister() flavors
[linux-2.6/mini2440.git] / drivers / staging / rt2860 / rtmp.h
blob99f9ebc8d55d9f6690a4cdf11227573423b9f518
1 /*
2 *************************************************************************
3 * Ralink Tech Inc.
4 * 5F., No.36, Taiyuan St., Jhubei City,
5 * Hsinchu County 302,
6 * Taiwan, R.O.C.
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
14 * *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
19 * *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
24 * *
25 *************************************************************************
27 Module Name:
28 rtmp.h
30 Abstract:
31 Miniport generic portion header file
33 Revision History:
34 Who When What
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
40 #ifndef __RTMP_H__
41 #define __RTMP_H__
43 #include "link_list.h"
44 #include "spectrum_def.h"
46 #include "aironet.h"
48 //#define DBG_DIAGNOSE 1
50 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
51 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
52 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
54 #ifdef RT2870
55 ////////////////////////////////////////////////////////////////////////////
56 // The TX_BUFFER structure forms the transmitted USB packet to the device
57 ////////////////////////////////////////////////////////////////////////////
58 typedef struct __TX_BUFFER{
59 union {
60 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
61 HEADER_802_11 NullFrame;
62 PSPOLL_FRAME PsPollPacket;
63 RTS_FRAME RTSFrame;
64 }field;
65 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
66 } TX_BUFFER, *PTX_BUFFER;
68 typedef struct __HTTX_BUFFER{
69 union {
70 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
71 HEADER_802_11 NullFrame;
72 PSPOLL_FRAME PsPollPacket;
73 RTS_FRAME RTSFrame;
74 }field;
75 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
76 } HTTX_BUFFER, *PHTTX_BUFFER;
79 // used to track driver-generated write irps
80 typedef struct _TX_CONTEXT
82 PVOID pAd; //Initialized in MiniportInitialize
83 PURB pUrb; //Initialized in MiniportInitialize
84 PIRP pIrp; //used to cancel pending bulk out.
85 //Initialized in MiniportInitialize
86 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
87 ULONG BulkOutSize;
88 UCHAR BulkOutPipeId;
89 UCHAR SelfIdx;
90 BOOLEAN InUse;
91 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
92 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
93 BOOLEAN IRPPending;
94 BOOLEAN LastOne;
95 BOOLEAN bAggregatible;
96 UCHAR Header_802_3[LENGTH_802_3];
97 UCHAR Rsv[2];
98 ULONG DataOffset;
99 UINT TxRate;
100 dma_addr_t data_dma; // urb dma on linux
102 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
105 // used to track driver-generated write irps
106 typedef struct _HT_TX_CONTEXT
108 PVOID pAd; //Initialized in MiniportInitialize
109 PURB pUrb; //Initialized in MiniportInitialize
110 PIRP pIrp; //used to cancel pending bulk out.
111 //Initialized in MiniportInitialize
112 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
113 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
114 UCHAR BulkOutPipeId;
115 BOOLEAN IRPPending;
116 BOOLEAN LastOne;
117 BOOLEAN bCurWriting;
118 BOOLEAN bRingEmpty;
119 BOOLEAN bCopySavePad;
120 UCHAR SavedPad[8];
121 UCHAR Header_802_3[LENGTH_802_3];
122 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
123 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
124 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
125 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
126 UINT TxRate;
127 dma_addr_t data_dma; // urb dma on linux
128 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
132 // Structure to keep track of receive packets and buffers to indicate
133 // receive data to the protocol.
135 typedef struct _RX_CONTEXT
137 PUCHAR TransferBuffer;
138 PVOID pAd;
139 PIRP pIrp;//used to cancel pending bulk in.
140 PURB pUrb;
141 //These 2 Boolean shouldn't both be 1 at the same time.
142 ULONG BulkInOffset; // number of packets waiting for reordering .
143 BOOLEAN bRxHandling; // Notify this packet is being process now.
144 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
145 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
146 BOOLEAN IRPPending; // TODO: To be removed
147 atomic_t IrpLock;
148 NDIS_SPIN_LOCK RxContextLock;
149 dma_addr_t data_dma; // urb dma on linux
150 } RX_CONTEXT, *PRX_CONTEXT;
151 #endif // RT2870 //
155 // NDIS Version definitions
157 #ifdef NDIS50_MINIPORT
158 #define RTMP_NDIS_MAJOR_VERSION 5
159 #define RTMP_NDIS_MINOR_VERSION 0
160 #endif
162 #ifdef NDIS51_MINIPORT
163 #define RTMP_NDIS_MAJOR_VERSION 5
164 #define RTMP_NDIS_MINOR_VERSION 1
165 #endif
167 extern char NIC_VENDOR_DESC[];
168 extern int NIC_VENDOR_DESC_LEN;
170 extern unsigned char SNAP_AIRONET[];
171 extern unsigned char CipherSuiteCiscoCCKM[];
172 extern unsigned char CipherSuiteCiscoCCKMLen;
173 extern unsigned char CipherSuiteCiscoCCKM24[];
174 extern unsigned char CipherSuiteCiscoCCKM24Len;
175 extern unsigned char CipherSuiteCCXTkip[];
176 extern unsigned char CipherSuiteCCXTkipLen;
177 extern unsigned char CISCO_OUI[];
178 extern UCHAR BaSizeArray[4];
180 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
181 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
182 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
183 extern ULONG BIT32[32];
184 extern UCHAR BIT8[8];
185 extern char* CipherName[];
186 extern char* MCSToMbps[];
187 extern UCHAR RxwiMCSToOfdmRate[12];
188 extern UCHAR SNAP_802_1H[6];
189 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
190 extern UCHAR SNAP_AIRONET[8];
191 extern UCHAR CKIP_LLC_SNAP[8];
192 extern UCHAR EAPOL_LLC_SNAP[8];
193 extern UCHAR EAPOL[2];
194 extern UCHAR IPX[2];
195 extern UCHAR APPLE_TALK[2];
196 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
197 extern UCHAR OfdmRateToRxwiMCS[];
198 extern UCHAR OfdmSignalToRateId[16] ;
199 extern UCHAR default_cwmin[4];
200 extern UCHAR default_cwmax[4];
201 extern UCHAR default_sta_aifsn[4];
202 extern UCHAR MapUserPriorityToAccessCategory[8];
204 extern USHORT RateUpPER[];
205 extern USHORT RateDownPER[];
206 extern UCHAR Phy11BNextRateDownward[];
207 extern UCHAR Phy11BNextRateUpward[];
208 extern UCHAR Phy11BGNextRateDownward[];
209 extern UCHAR Phy11BGNextRateUpward[];
210 extern UCHAR Phy11ANextRateDownward[];
211 extern UCHAR Phy11ANextRateUpward[];
212 extern CHAR RssiSafeLevelForTxRate[];
213 extern UCHAR RateIdToMbps[];
214 extern USHORT RateIdTo500Kbps[];
216 extern UCHAR CipherSuiteWpaNoneTkip[];
217 extern UCHAR CipherSuiteWpaNoneTkipLen;
219 extern UCHAR CipherSuiteWpaNoneAes[];
220 extern UCHAR CipherSuiteWpaNoneAesLen;
222 extern UCHAR SsidIe;
223 extern UCHAR SupRateIe;
224 extern UCHAR ExtRateIe;
226 extern UCHAR HtCapIe;
227 extern UCHAR AddHtInfoIe;
228 extern UCHAR NewExtChanIe;
230 extern UCHAR ErpIe;
231 extern UCHAR DsIe;
232 extern UCHAR TimIe;
233 extern UCHAR WpaIe;
234 extern UCHAR Wpa2Ie;
235 extern UCHAR IbssIe;
236 extern UCHAR Ccx2Ie;
237 #ifdef RT30xx
238 extern UCHAR WapiIe;
239 #endif
241 extern UCHAR WPA_OUI[];
242 extern UCHAR RSN_OUI[];
243 #ifdef RT30xx
244 extern UCHAR WAPI_OUI[];
245 #endif
246 extern UCHAR WME_INFO_ELEM[];
247 extern UCHAR WME_PARM_ELEM[];
248 extern UCHAR Ccx2QosInfo[];
249 extern UCHAR Ccx2IeInfo[];
250 extern UCHAR RALINK_OUI[];
251 extern UCHAR PowerConstraintIE[];
254 extern UCHAR RateSwitchTable[];
255 extern UCHAR RateSwitchTable11B[];
256 extern UCHAR RateSwitchTable11G[];
257 extern UCHAR RateSwitchTable11BG[];
259 extern UCHAR RateSwitchTable11BGN1S[];
260 extern UCHAR RateSwitchTable11BGN2S[];
261 extern UCHAR RateSwitchTable11BGN2SForABand[];
262 extern UCHAR RateSwitchTable11N1S[];
263 extern UCHAR RateSwitchTable11N2S[];
264 extern UCHAR RateSwitchTable11N2SForABand[];
266 extern UCHAR PRE_N_HT_OUI[];
268 #define MAXSEQ (0xFFF)
270 struct reordering_mpdu
272 struct reordering_mpdu *next;
273 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
274 int Sequence; /* sequence number of MPDU */
275 BOOLEAN bAMSDU;
278 struct reordering_list
280 struct reordering_mpdu *next;
281 int qlen;
284 struct reordering_mpdu_pool
286 PVOID mem;
287 NDIS_SPIN_LOCK lock;
288 struct reordering_list freelist;
291 typedef struct _RSSI_SAMPLE {
292 CHAR LastRssi0; // last received RSSI
293 CHAR LastRssi1; // last received RSSI
294 CHAR LastRssi2; // last received RSSI
295 CHAR AvgRssi0;
296 CHAR AvgRssi1;
297 CHAR AvgRssi2;
298 SHORT AvgRssi0X8;
299 SHORT AvgRssi1X8;
300 SHORT AvgRssi2X8;
301 } RSSI_SAMPLE;
304 // Queue structure and macros
306 typedef struct _QUEUE_ENTRY {
307 struct _QUEUE_ENTRY *Next;
308 } QUEUE_ENTRY, *PQUEUE_ENTRY;
310 // Queue structure
311 typedef struct _QUEUE_HEADER {
312 PQUEUE_ENTRY Head;
313 PQUEUE_ENTRY Tail;
314 ULONG Number;
315 } QUEUE_HEADER, *PQUEUE_HEADER;
317 #define InitializeQueueHeader(QueueHeader) \
319 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
320 (QueueHeader)->Number = 0; \
323 #define RemoveHeadQueue(QueueHeader) \
324 (QueueHeader)->Head; \
326 PQUEUE_ENTRY pNext; \
327 if ((QueueHeader)->Head != NULL) \
329 pNext = (QueueHeader)->Head->Next; \
330 (QueueHeader)->Head = pNext; \
331 if (pNext == NULL) \
332 (QueueHeader)->Tail = NULL; \
333 (QueueHeader)->Number--; \
337 #define InsertHeadQueue(QueueHeader, QueueEntry) \
339 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
340 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
341 if ((QueueHeader)->Tail == NULL) \
342 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
343 (QueueHeader)->Number++; \
346 #define InsertTailQueue(QueueHeader, QueueEntry) \
348 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
349 if ((QueueHeader)->Tail) \
350 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
351 else \
352 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
353 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
354 (QueueHeader)->Number++; \
358 // Macros for flag and ref count operations
360 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
361 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
362 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
363 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
364 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
366 #ifdef RT2860
367 // Macro for power save flag.
368 #define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
369 #define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
370 #define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
371 #define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
372 #define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
373 #endif
375 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
376 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
377 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
379 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
380 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
381 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
383 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
384 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
385 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
387 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
388 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
389 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
390 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
392 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
394 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
395 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
398 #define INC_RING_INDEX(_idx, _RingSize) \
400 (_idx) = (_idx+1) % (_RingSize); \
403 #ifdef RT30xx
404 // We will have a cost down version which mac version is 0x3090xxxx
405 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
406 #endif
407 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
408 #ifdef RT30xx
409 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
410 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
411 #endif
413 #define RING_PACKET_INIT(_TxRing, _idx) \
415 _TxRing->Cell[_idx].pNdisPacket = NULL; \
416 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
419 #define TXDT_INIT(_TxD) \
421 NdisZeroMemory(_TxD, TXD_SIZE); \
422 _TxD->DMADONE = 1; \
425 //Set last data segment
426 #define RING_SET_LASTDS(_TxD, _IsSD0) \
428 if (_IsSD0) {_TxD->LastSec0 = 1;} \
429 else {_TxD->LastSec1 = 1;} \
432 // Increase TxTsc value for next transmission
433 // TODO:
434 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
435 // Should send a special event microsoft defined to request re-key
436 #define INC_TX_TSC(_tsc) \
438 int i=0; \
439 while (++_tsc[i] == 0x0) \
441 i++; \
442 if (i == 6) \
443 break; \
447 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
448 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
450 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
451 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
452 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
453 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
454 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
455 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
456 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
457 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
458 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
459 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
460 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
461 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
464 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
466 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
467 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
468 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
472 // MACRO for 32-bit PCI register read / write
474 // Usage : RTMP_IO_READ32(
475 // PRTMP_ADAPTER pAd,
476 // ULONG Register_Offset,
477 // PULONG pValue)
479 // RTMP_IO_WRITE32(
480 // PRTMP_ADAPTER pAd,
481 // ULONG Register_Offset,
482 // ULONG Value)
486 // BBP & RF are using indirect access. Before write any value into it.
487 // We have to make sure there is no outstanding command pending via checking busy bit.
489 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
491 #ifdef RT2860
492 #define RTMP_RF_IO_WRITE32(_A, _V) \
494 PHY_CSR4_STRUC Value; \
495 ULONG BusyCnt = 0; \
496 if ((_A)->bPCIclkOff) \
498 return; \
500 do { \
501 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
502 if (Value.field.Busy == IDLE) \
503 break; \
504 BusyCnt++; \
505 } while (BusyCnt < MAX_BUSY_COUNT); \
506 if (BusyCnt < MAX_BUSY_COUNT) \
508 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
512 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
514 BBP_CSR_CFG_STRUC BbpCsr; \
515 int i, k; \
516 for (i=0; i<MAX_BUSY_COUNT; i++) \
518 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
519 if (BbpCsr.field.Busy == BUSY) \
521 continue; \
523 BbpCsr.word = 0; \
524 BbpCsr.field.fRead = 1; \
525 BbpCsr.field.BBP_RW_MODE = 1; \
526 BbpCsr.field.Busy = 1; \
527 BbpCsr.field.RegNum = _I; \
528 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
529 for (k=0; k<MAX_BUSY_COUNT; k++) \
531 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
532 if (BbpCsr.field.Busy == IDLE) \
533 break; \
535 if ((BbpCsr.field.Busy == IDLE) && \
536 (BbpCsr.field.RegNum == _I)) \
538 *(_pV) = (UCHAR)BbpCsr.field.Value; \
539 break; \
542 if (BbpCsr.field.Busy == BUSY) \
544 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
545 *(_pV) = (_A)->BbpWriteLatch[_I]; \
549 //#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
550 // Read BBP register by register's ID. Generate PER to test BA
551 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
553 BBP_CSR_CFG_STRUC BbpCsr; \
554 int i, k; \
555 if ((_A)->bPCIclkOff == FALSE) \
557 for (i=0; i<MAX_BUSY_COUNT; i++) \
559 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
560 if (BbpCsr.field.Busy == BUSY) \
562 continue; \
564 BbpCsr.word = 0; \
565 BbpCsr.field.fRead = 1; \
566 BbpCsr.field.BBP_RW_MODE = 1; \
567 BbpCsr.field.Busy = 1; \
568 BbpCsr.field.RegNum = _I; \
569 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
570 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
571 RTMPusecDelay(1000); \
572 for (k=0; k<MAX_BUSY_COUNT; k++) \
574 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
575 if (BbpCsr.field.Busy == IDLE) \
576 break; \
578 if ((BbpCsr.field.Busy == IDLE) && \
579 (BbpCsr.field.RegNum == _I)) \
581 *(_pV) = (UCHAR)BbpCsr.field.Value; \
582 break; \
585 if (BbpCsr.field.Busy == BUSY) \
587 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
588 *(_pV) = (_A)->BbpWriteLatch[_I]; \
589 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
590 BbpCsr.field.Busy = 0; \
591 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
596 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
598 BBP_CSR_CFG_STRUC BbpCsr; \
599 int BusyCnt; \
600 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
602 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
603 if (BbpCsr.field.Busy == BUSY) \
604 continue; \
605 BbpCsr.word = 0; \
606 BbpCsr.field.fRead = 0; \
607 BbpCsr.field.BBP_RW_MODE = 1; \
608 BbpCsr.field.Busy = 1; \
609 BbpCsr.field.Value = _V; \
610 BbpCsr.field.RegNum = _I; \
611 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
612 (_A)->BbpWriteLatch[_I] = _V; \
613 break; \
615 if (BusyCnt == MAX_BUSY_COUNT) \
617 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
621 // Write BBP register by register's ID & value
622 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
624 BBP_CSR_CFG_STRUC BbpCsr; \
625 int BusyCnt; \
626 if ((_A)->bPCIclkOff == FALSE) \
628 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
630 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
631 if (BbpCsr.field.Busy == BUSY) \
632 continue; \
633 BbpCsr.word = 0; \
634 BbpCsr.field.fRead = 0; \
635 BbpCsr.field.BBP_RW_MODE = 1; \
636 BbpCsr.field.Busy = 1; \
637 BbpCsr.field.Value = _V; \
638 BbpCsr.field.RegNum = _I; \
639 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
640 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
641 if (_A->OpMode == OPMODE_AP) \
642 RTMPusecDelay(1000); \
643 (_A)->BbpWriteLatch[_I] = _V; \
644 break; \
646 if (BusyCnt == MAX_BUSY_COUNT) \
648 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
649 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
650 BbpCsr.field.Busy = 0; \
651 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
655 #endif /* RT2860 */
656 #ifdef RT2870
657 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
658 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
659 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
661 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
662 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
663 #endif // RT2870 //
665 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
666 switch (ch) \
668 case 1: khz = 2412000; break; \
669 case 2: khz = 2417000; break; \
670 case 3: khz = 2422000; break; \
671 case 4: khz = 2427000; break; \
672 case 5: khz = 2432000; break; \
673 case 6: khz = 2437000; break; \
674 case 7: khz = 2442000; break; \
675 case 8: khz = 2447000; break; \
676 case 9: khz = 2452000; break; \
677 case 10: khz = 2457000; break; \
678 case 11: khz = 2462000; break; \
679 case 12: khz = 2467000; break; \
680 case 13: khz = 2472000; break; \
681 case 14: khz = 2484000; break; \
682 case 36: /* UNII */ khz = 5180000; break; \
683 case 40: /* UNII */ khz = 5200000; break; \
684 case 44: /* UNII */ khz = 5220000; break; \
685 case 48: /* UNII */ khz = 5240000; break; \
686 case 52: /* UNII */ khz = 5260000; break; \
687 case 56: /* UNII */ khz = 5280000; break; \
688 case 60: /* UNII */ khz = 5300000; break; \
689 case 64: /* UNII */ khz = 5320000; break; \
690 case 149: /* UNII */ khz = 5745000; break; \
691 case 153: /* UNII */ khz = 5765000; break; \
692 case 157: /* UNII */ khz = 5785000; break; \
693 case 161: /* UNII */ khz = 5805000; break; \
694 case 165: /* UNII */ khz = 5825000; break; \
695 case 100: /* HiperLAN2 */ khz = 5500000; break; \
696 case 104: /* HiperLAN2 */ khz = 5520000; break; \
697 case 108: /* HiperLAN2 */ khz = 5540000; break; \
698 case 112: /* HiperLAN2 */ khz = 5560000; break; \
699 case 116: /* HiperLAN2 */ khz = 5580000; break; \
700 case 120: /* HiperLAN2 */ khz = 5600000; break; \
701 case 124: /* HiperLAN2 */ khz = 5620000; break; \
702 case 128: /* HiperLAN2 */ khz = 5640000; break; \
703 case 132: /* HiperLAN2 */ khz = 5660000; break; \
704 case 136: /* HiperLAN2 */ khz = 5680000; break; \
705 case 140: /* HiperLAN2 */ khz = 5700000; break; \
706 case 34: /* Japan MMAC */ khz = 5170000; break; \
707 case 38: /* Japan MMAC */ khz = 5190000; break; \
708 case 42: /* Japan MMAC */ khz = 5210000; break; \
709 case 46: /* Japan MMAC */ khz = 5230000; break; \
710 case 184: /* Japan */ khz = 4920000; break; \
711 case 188: /* Japan */ khz = 4940000; break; \
712 case 192: /* Japan */ khz = 4960000; break; \
713 case 196: /* Japan */ khz = 4980000; break; \
714 case 208: /* Japan, means J08 */ khz = 5040000; break; \
715 case 212: /* Japan, means J12 */ khz = 5060000; break; \
716 case 216: /* Japan, means J16 */ khz = 5080000; break; \
717 default: khz = 2412000; break; \
721 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
722 switch (khz) \
724 case 2412000: ch = 1; break; \
725 case 2417000: ch = 2; break; \
726 case 2422000: ch = 3; break; \
727 case 2427000: ch = 4; break; \
728 case 2432000: ch = 5; break; \
729 case 2437000: ch = 6; break; \
730 case 2442000: ch = 7; break; \
731 case 2447000: ch = 8; break; \
732 case 2452000: ch = 9; break; \
733 case 2457000: ch = 10; break; \
734 case 2462000: ch = 11; break; \
735 case 2467000: ch = 12; break; \
736 case 2472000: ch = 13; break; \
737 case 2484000: ch = 14; break; \
738 case 5180000: ch = 36; /* UNII */ break; \
739 case 5200000: ch = 40; /* UNII */ break; \
740 case 5220000: ch = 44; /* UNII */ break; \
741 case 5240000: ch = 48; /* UNII */ break; \
742 case 5260000: ch = 52; /* UNII */ break; \
743 case 5280000: ch = 56; /* UNII */ break; \
744 case 5300000: ch = 60; /* UNII */ break; \
745 case 5320000: ch = 64; /* UNII */ break; \
746 case 5745000: ch = 149; /* UNII */ break; \
747 case 5765000: ch = 153; /* UNII */ break; \
748 case 5785000: ch = 157; /* UNII */ break; \
749 case 5805000: ch = 161; /* UNII */ break; \
750 case 5825000: ch = 165; /* UNII */ break; \
751 case 5500000: ch = 100; /* HiperLAN2 */ break; \
752 case 5520000: ch = 104; /* HiperLAN2 */ break; \
753 case 5540000: ch = 108; /* HiperLAN2 */ break; \
754 case 5560000: ch = 112; /* HiperLAN2 */ break; \
755 case 5580000: ch = 116; /* HiperLAN2 */ break; \
756 case 5600000: ch = 120; /* HiperLAN2 */ break; \
757 case 5620000: ch = 124; /* HiperLAN2 */ break; \
758 case 5640000: ch = 128; /* HiperLAN2 */ break; \
759 case 5660000: ch = 132; /* HiperLAN2 */ break; \
760 case 5680000: ch = 136; /* HiperLAN2 */ break; \
761 case 5700000: ch = 140; /* HiperLAN2 */ break; \
762 case 5170000: ch = 34; /* Japan MMAC */ break; \
763 case 5190000: ch = 38; /* Japan MMAC */ break; \
764 case 5210000: ch = 42; /* Japan MMAC */ break; \
765 case 5230000: ch = 46; /* Japan MMAC */ break; \
766 case 4920000: ch = 184; /* Japan */ break; \
767 case 4940000: ch = 188; /* Japan */ break; \
768 case 4960000: ch = 192; /* Japan */ break; \
769 case 4980000: ch = 196; /* Japan */ break; \
770 case 5040000: ch = 208; /* Japan, means J08 */ break; \
771 case 5060000: ch = 212; /* Japan, means J12 */ break; \
772 case 5080000: ch = 216; /* Japan, means J16 */ break; \
773 default: ch = 1; break; \
778 // Common fragment list structure - Identical to the scatter gather frag list structure
780 #define NIC_MAX_PHYS_BUF_COUNT 8
782 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
783 PVOID Address;
784 ULONG Length;
785 PULONG Reserved;
786 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
789 typedef struct _RTMP_SCATTER_GATHER_LIST {
790 ULONG NumberOfElements;
791 PULONG Reserved;
792 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
793 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
796 // Some utility macros
798 #ifndef min
799 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
800 #endif
802 #ifndef max
803 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
804 #endif
806 #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))))
808 #define INC_COUNTER64(Val) (Val.QuadPart++)
810 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
811 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
812 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
813 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
815 // Check LEAP & CCKM flags
816 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
817 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
819 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
820 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
822 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
824 _pExtraLlcSnapEncap = SNAP_802_1H; \
825 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
826 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
828 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
831 else \
833 _pExtraLlcSnapEncap = NULL; \
837 // New Define for new Tx Path.
838 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
840 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
842 _pExtraLlcSnapEncap = SNAP_802_1H; \
843 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
844 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
846 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
849 else \
851 _pExtraLlcSnapEncap = NULL; \
856 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
858 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
859 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
860 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
863 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
864 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
865 // else remove the LLC/SNAP field from the result Ethernet frame
866 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
867 // Note:
868 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
869 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
870 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
872 char LLC_Len[2]; \
874 _pRemovedLLCSNAP = NULL; \
875 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
876 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
878 PUCHAR pProto = _pData + 6; \
880 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
881 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
883 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
884 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
885 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
887 else \
889 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
890 _pRemovedLLCSNAP = _pData; \
891 _DataSize -= LENGTH_802_1_H; \
892 _pData += LENGTH_802_1_H; \
895 else \
897 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
898 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
899 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
903 #define SWITCH_AB( _pAA, _pBB) \
905 PVOID pCC; \
906 pCC = _pBB; \
907 _pBB = _pAA; \
908 _pAA = pCC; \
911 // Enqueue this frame to MLME engine
912 // We need to enqueue the whole frame because MLME need to pass data type
913 // information from 802.11 header
914 #ifdef RT2860
915 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
917 UINT32 High32TSF, Low32TSF; \
918 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
919 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
920 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
922 #endif
923 #ifdef RT2870
924 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
926 UINT32 High32TSF=0, Low32TSF=0; \
927 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
929 #endif // RT2870 //
931 #ifdef RT30xx
932 //Need to collect each ant's rssi concurrently
933 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
934 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
936 SHORT AvgRssi; \
937 UCHAR UsedAnt; \
938 if (_pAd->RxAnt.EvaluatePeriod == 0) \
940 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
941 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
942 if (AvgRssi < 0) \
943 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
944 else \
945 AvgRssi = _rssi1 << 3; \
946 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
948 else \
950 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
951 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
952 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
953 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
954 else \
956 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
957 AvgRssi = _rssi1 << 3; \
959 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
960 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
963 #endif // RT30xx //
966 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
967 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
969 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
970 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
973 // Check if it is Japan W53(ch52,56,60,64) channel.
975 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
977 #ifdef RT2860
978 #define STA_PORT_SECURED(_pAd) \
980 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
981 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \
982 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \
983 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
984 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
986 #endif
987 #ifdef RT2870
988 #define STA_PORT_SECURED(_pAd) \
990 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
991 NdisAcquireSpinLock(&_pAd->MacTabLock); \
992 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
993 NdisReleaseSpinLock(&_pAd->MacTabLock); \
995 #endif
998 // Register set pair for initialzation register set definition
1000 typedef struct _RTMP_REG_PAIR
1002 ULONG Register;
1003 ULONG Value;
1004 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
1006 typedef struct _REG_PAIR
1008 UCHAR Register;
1009 UCHAR Value;
1010 } REG_PAIR, *PREG_PAIR;
1013 // Register set pair for initialzation register set definition
1015 typedef struct _RTMP_RF_REGS
1017 UCHAR Channel;
1018 ULONG R1;
1019 ULONG R2;
1020 ULONG R3;
1021 ULONG R4;
1022 } RTMP_RF_REGS, *PRTMP_RF_REGS;
1024 typedef struct _FREQUENCY_ITEM {
1025 UCHAR Channel;
1026 UCHAR N;
1027 UCHAR R;
1028 UCHAR K;
1029 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
1032 // Data buffer for DMA operation, the buffer must be contiguous physical memory
1033 // Both DMA to / from CPU use the same structure.
1035 typedef struct _RTMP_DMABUF
1037 ULONG AllocSize;
1038 PVOID AllocVa; // TxBuf virtual address
1039 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
1040 } RTMP_DMABUF, *PRTMP_DMABUF;
1043 typedef union _HEADER_802_11_SEQ{
1044 struct {
1045 USHORT Frag:4;
1046 USHORT Sequence:12;
1047 } field;
1048 USHORT value;
1049 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
1052 // Data buffer for DMA operation, the buffer must be contiguous physical memory
1053 // Both DMA to / from CPU use the same structure.
1055 typedef struct _RTMP_REORDERBUF
1057 BOOLEAN IsFull;
1058 PVOID AllocVa; // TxBuf virtual address
1059 UCHAR Header802_3[14];
1060 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
1061 UCHAR DataOffset;
1062 USHORT Datasize;
1063 ULONG AllocSize;
1064 #ifdef RT2860
1065 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
1066 #endif
1067 #ifdef RT2870
1068 PUCHAR AllocPa;
1069 #endif // RT2870 //
1070 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1073 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1074 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1075 // which won't be released, driver has to wait until upper layer return the packet
1076 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1077 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1078 // which driver should ACK upper layer when the tx is physically done or failed.
1080 typedef struct _RTMP_DMACB
1082 ULONG AllocSize; // Control block size
1083 PVOID AllocVa; // Control block virtual address
1084 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1085 PNDIS_PACKET pNdisPacket;
1086 PNDIS_PACKET pNextNdisPacket;
1088 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1089 } RTMP_DMACB, *PRTMP_DMACB;
1091 typedef struct _RTMP_TX_BUF
1093 PQUEUE_ENTRY Next;
1094 UCHAR Index;
1095 ULONG AllocSize; // Control block size
1096 PVOID AllocVa; // Control block virtual address
1097 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1098 } RTMP_TXBUF, *PRTMP_TXBUF;
1100 typedef struct _RTMP_RX_BUF
1102 BOOLEAN InUse;
1103 ULONG ByBaRecIndex;
1104 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1105 } RTMP_RXBUF, *PRTMP_RXBUF;
1106 typedef struct _RTMP_TX_RING
1108 RTMP_DMACB Cell[TX_RING_SIZE];
1109 UINT32 TxCpuIdx;
1110 UINT32 TxDmaIdx;
1111 UINT32 TxSwFreeIdx; // software next free tx index
1112 } RTMP_TX_RING, *PRTMP_TX_RING;
1114 typedef struct _RTMP_RX_RING
1116 RTMP_DMACB Cell[RX_RING_SIZE];
1117 UINT32 RxCpuIdx;
1118 UINT32 RxDmaIdx;
1119 INT32 RxSwReadIdx; // software next read index
1120 } RTMP_RX_RING, *PRTMP_RX_RING;
1122 typedef struct _RTMP_MGMT_RING
1124 RTMP_DMACB Cell[MGMT_RING_SIZE];
1125 UINT32 TxCpuIdx;
1126 UINT32 TxDmaIdx;
1127 UINT32 TxSwFreeIdx; // software next free tx index
1128 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1131 // Statistic counter structure
1133 typedef struct _COUNTER_802_3
1135 // General Stats
1136 ULONG GoodTransmits;
1137 ULONG GoodReceives;
1138 ULONG TxErrors;
1139 ULONG RxErrors;
1140 ULONG RxNoBuffer;
1142 // Ethernet Stats
1143 ULONG RcvAlignmentErrors;
1144 ULONG OneCollision;
1145 ULONG MoreCollisions;
1147 } COUNTER_802_3, *PCOUNTER_802_3;
1149 typedef struct _COUNTER_802_11 {
1150 ULONG Length;
1151 LARGE_INTEGER LastTransmittedFragmentCount;
1152 LARGE_INTEGER TransmittedFragmentCount;
1153 LARGE_INTEGER MulticastTransmittedFrameCount;
1154 LARGE_INTEGER FailedCount;
1155 LARGE_INTEGER RetryCount;
1156 LARGE_INTEGER MultipleRetryCount;
1157 LARGE_INTEGER RTSSuccessCount;
1158 LARGE_INTEGER RTSFailureCount;
1159 LARGE_INTEGER ACKFailureCount;
1160 LARGE_INTEGER FrameDuplicateCount;
1161 LARGE_INTEGER ReceivedFragmentCount;
1162 LARGE_INTEGER MulticastReceivedFrameCount;
1163 LARGE_INTEGER FCSErrorCount;
1164 } COUNTER_802_11, *PCOUNTER_802_11;
1166 typedef struct _COUNTER_RALINK {
1167 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1168 #ifdef RT2860
1169 ULONG LastReceivedByteCount;
1170 #endif
1171 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1172 ULONG BeenDisassociatedCount;
1173 ULONG BadCQIAutoRecoveryCount;
1174 ULONG PoorCQIRoamingCount;
1175 ULONG MgmtRingFullCount;
1176 ULONG RxCountSinceLastNULL;
1177 ULONG RxCount;
1178 ULONG RxRingErrCount;
1179 ULONG KickTxCount;
1180 ULONG TxRingErrCount;
1181 LARGE_INTEGER RealFcsErrCount;
1182 ULONG PendingNdisPacketCount;
1184 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1185 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1186 UINT32 OneSecTxDoneCount;
1187 ULONG OneSecRxCount;
1188 UINT32 OneSecTxAggregationCount;
1189 UINT32 OneSecRxAggregationCount;
1191 UINT32 OneSecFrameDuplicateCount;
1193 #ifdef RT2870
1194 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1195 #endif // RT2870 //
1197 UINT32 OneSecTxNoRetryOkCount;
1198 UINT32 OneSecTxRetryOkCount;
1199 UINT32 OneSecTxFailCount;
1200 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1201 UINT32 OneSecRxOkCnt; // RX without error
1202 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1203 UINT32 OneSecRxFcsErrCnt; // CRC error
1204 UINT32 OneSecBeaconSentCnt;
1205 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1206 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1207 ULONG DuplicateRcv;
1208 ULONG TxAggCount;
1209 ULONG TxNonAggCount;
1210 ULONG TxAgg1MPDUCount;
1211 ULONG TxAgg2MPDUCount;
1212 ULONG TxAgg3MPDUCount;
1213 ULONG TxAgg4MPDUCount;
1214 ULONG TxAgg5MPDUCount;
1215 ULONG TxAgg6MPDUCount;
1216 ULONG TxAgg7MPDUCount;
1217 ULONG TxAgg8MPDUCount;
1218 ULONG TxAgg9MPDUCount;
1219 ULONG TxAgg10MPDUCount;
1220 ULONG TxAgg11MPDUCount;
1221 ULONG TxAgg12MPDUCount;
1222 ULONG TxAgg13MPDUCount;
1223 ULONG TxAgg14MPDUCount;
1224 ULONG TxAgg15MPDUCount;
1225 ULONG TxAgg16MPDUCount;
1227 LARGE_INTEGER TransmittedOctetsInAMSDU;
1228 LARGE_INTEGER TransmittedAMSDUCount;
1229 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1230 LARGE_INTEGER ReceivedAMSDUCount;
1231 LARGE_INTEGER TransmittedAMPDUCount;
1232 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1233 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1234 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1235 } COUNTER_RALINK, *PCOUNTER_RALINK;
1237 typedef struct _PID_COUNTER {
1238 ULONG TxAckRequiredCount; // CRC error
1239 ULONG TxAggreCount;
1240 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1241 ULONG LastSuccessRate;
1242 } PID_COUNTER, *PPID_COUNTER;
1244 typedef struct _COUNTER_DRS {
1245 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1246 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1247 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1248 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1249 ULONG CurrTxRateStableTime; // # of second in current TX rate
1250 BOOLEAN fNoisyEnvironment;
1251 BOOLEAN fLastSecAccordingRSSI;
1252 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1253 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1254 ULONG LastTxOkCount;
1255 } COUNTER_DRS, *PCOUNTER_DRS;
1258 // Arcfour Structure Added by PaulWu
1260 typedef struct _ARCFOUR
1262 UINT X;
1263 UINT Y;
1264 UCHAR STATE[256];
1265 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1267 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1268 typedef struct _RECEIVE_SETTING {
1269 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1270 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1271 USHORT ShortGI:1;
1272 USHORT STBC:2; //SPACE
1273 USHORT rsv:3;
1274 USHORT OFDM:1;
1275 USHORT MIMO:1;
1276 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1278 // Shared key data structure
1279 typedef struct _WEP_KEY {
1280 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1281 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1282 } WEP_KEY, *PWEP_KEY;
1284 typedef struct _CIPHER_KEY {
1285 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1286 UCHAR RxMic[8]; // make alignment
1287 UCHAR TxMic[8];
1288 UCHAR TxTsc[6]; // 48bit TSC value
1289 UCHAR RxTsc[6]; // 48bit TSC value
1290 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1291 UCHAR KeyLen;
1292 UCHAR BssId[6];
1293 // Key length for each key, 0: entry is invalid
1294 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1295 } CIPHER_KEY, *PCIPHER_KEY;
1297 typedef struct _BBP_TUNING_STRUCT {
1298 BOOLEAN Enable;
1299 UCHAR FalseCcaCountUpperBound; // 100 per sec
1300 UCHAR FalseCcaCountLowerBound; // 10 per sec
1301 UCHAR R17LowerBound; // specified in E2PROM
1302 UCHAR R17UpperBound; // 0x68 according to David Tung
1303 UCHAR CurrentR17Value;
1304 } BBP_TUNING, *PBBP_TUNING;
1306 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1307 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1308 #ifdef RT30xx
1309 UCHAR EvaluateStableCnt;
1310 #endif
1311 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1312 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1313 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1314 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1315 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1316 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1317 SHORT Pair1LastAvgRssi; //
1318 SHORT Pair2LastAvgRssi; //
1319 ULONG RcvPktNumWhenEvaluate;
1320 BOOLEAN FirstPktArrivedWhenEvaluate;
1321 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1322 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1324 typedef struct _LEAP_AUTH_INFO {
1325 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1326 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1327 UCHAR Reserve[2];
1328 UCHAR UserName[256]; //LEAP, User name
1329 ULONG UserNameLen;
1330 UCHAR Password[256]; //LEAP, User Password
1331 ULONG PasswordLen;
1332 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1334 typedef struct {
1335 UCHAR Addr[MAC_ADDR_LEN];
1336 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1337 //00 02-Authentication timeout
1338 //00 03-Challenge from AP failed
1339 //00 04-Challenge to AP failed
1340 BOOLEAN Reported;
1341 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1343 typedef struct {
1344 UCHAR RogueApNr;
1345 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1346 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1348 typedef struct {
1349 BOOLEAN Enable;
1350 UCHAR Delta;
1351 BOOLEAN PlusSign;
1352 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1355 // Receive Tuple Cache Format
1357 typedef struct _TUPLE_CACHE {
1358 BOOLEAN Valid;
1359 UCHAR MacAddress[MAC_ADDR_LEN];
1360 USHORT Sequence;
1361 USHORT Frag;
1362 } TUPLE_CACHE, *PTUPLE_CACHE;
1365 // Fragment Frame structure
1367 typedef struct _FRAGMENT_FRAME {
1368 PNDIS_PACKET pFragPacket;
1369 ULONG RxSize;
1370 USHORT Sequence;
1371 USHORT LastFrag;
1372 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1373 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1377 // Packet information for NdisQueryPacket
1379 typedef struct _PACKET_INFO {
1380 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1381 UINT BufferCount ; // Number of Buffer descriptor chained
1382 UINT TotalPacketLength ; // Self explained
1383 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1384 } PACKET_INFO, *PPACKET_INFO;
1387 // Tkip Key structure which RC4 key & MIC calculation
1389 typedef struct _TKIP_KEY_INFO {
1390 UINT nBytesInM; // # bytes in M for MICKEY
1391 ULONG IV16;
1392 ULONG IV32;
1393 ULONG K0; // for MICKEY Low
1394 ULONG K1; // for MICKEY Hig
1395 ULONG L; // Current state for MICKEY
1396 ULONG R; // Current state for MICKEY
1397 ULONG M; // Message accumulator for MICKEY
1398 UCHAR RC4KEY[16];
1399 UCHAR MIC[8];
1400 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1403 // Private / Misc data, counters for driver internal use
1405 typedef struct __PRIVATE_STRUC {
1406 UINT SystemResetCnt; // System reset counter
1407 UINT TxRingFullCnt; // Tx ring full occurrance number
1408 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1409 // Variables for WEP encryption / decryption in rtmp_wep.c
1410 UINT FCSCRC32;
1411 ARCFOURCONTEXT WEPCONTEXT;
1412 // Tkip stuff
1413 TKIP_KEY_INFO Tx;
1414 TKIP_KEY_INFO Rx;
1415 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1417 // structure to tune BBP R66 (BBP TUNING)
1418 typedef struct _BBP_R66_TUNING {
1419 BOOLEAN bEnable;
1420 USHORT FalseCcaLowerThreshold; // default 100
1421 USHORT FalseCcaUpperThreshold; // default 512
1422 UCHAR R66Delta;
1423 UCHAR R66CurrentValue;
1424 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1425 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1427 // structure to store channel TX power
1428 typedef struct _CHANNEL_TX_POWER {
1429 USHORT RemainingTimeForUse; //unit: sec
1430 UCHAR Channel;
1431 CHAR Power;
1432 CHAR Power2;
1433 UCHAR MaxTxPwr;
1434 UCHAR DfsReq;
1435 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1437 // structure to store 802.11j channel TX power
1438 typedef struct _CHANNEL_11J_TX_POWER {
1439 UCHAR Channel;
1440 UCHAR BW; // BW_10 or BW_20
1441 CHAR Power;
1442 CHAR Power2;
1443 USHORT RemainingTimeForUse; //unit: sec
1444 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1446 typedef enum _ABGBAND_STATE_ {
1447 UNKNOWN_BAND,
1448 BG_BAND,
1449 A_BAND,
1450 } ABGBAND_STATE;
1452 typedef struct _MLME_STRUCT {
1453 // STA state machines
1454 STATE_MACHINE CntlMachine;
1455 STATE_MACHINE AssocMachine;
1456 STATE_MACHINE AuthMachine;
1457 STATE_MACHINE AuthRspMachine;
1458 STATE_MACHINE SyncMachine;
1459 STATE_MACHINE WpaPskMachine;
1460 STATE_MACHINE LeapMachine;
1461 STATE_MACHINE AironetMachine;
1462 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1463 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1464 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1465 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1466 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1467 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1468 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1469 // Action
1470 STATE_MACHINE ActMachine;
1472 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1473 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1474 ULONG LastSendNULLpsmTime;
1476 BOOLEAN bRunning;
1477 NDIS_SPIN_LOCK TaskLock;
1478 MLME_QUEUE Queue;
1480 UINT ShiftReg;
1482 RALINK_TIMER_STRUCT PeriodicTimer;
1483 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1484 RALINK_TIMER_STRUCT LinkDownTimer;
1485 RALINK_TIMER_STRUCT LinkUpTimer;
1486 #ifdef RT2860
1487 UCHAR bPsPollTimerRunning;
1488 RALINK_TIMER_STRUCT PsPollTimer;
1489 RALINK_TIMER_STRUCT RadioOnOffTimer;
1490 #endif
1491 ULONG PeriodicRound;
1492 ULONG OneSecPeriodicRound;
1494 UCHAR RealRxPath;
1495 BOOLEAN bLowThroughput;
1496 BOOLEAN bEnableAutoAntennaCheck;
1497 RALINK_TIMER_STRUCT RxAntEvalTimer;
1499 #ifdef RT2870
1500 UCHAR CaliBW40RfR24;
1501 UCHAR CaliBW20RfR24;
1502 #endif // RT2870 //
1503 } MLME_STRUCT, *PMLME_STRUCT;
1505 // structure for radar detection and channel switch
1506 typedef struct _RADAR_DETECT_STRUCT {
1507 UCHAR CSCount; //Channel switch counter
1508 UCHAR CSPeriod; //Channel switch period (beacon count)
1509 UCHAR RDCount; //Radar detection counter
1510 UCHAR RDMode; //Radar Detection mode
1511 UCHAR RDDurRegion; //Radar detection duration region
1512 UCHAR BBPR16;
1513 UCHAR BBPR17;
1514 UCHAR BBPR18;
1515 UCHAR BBPR21;
1516 UCHAR BBPR22;
1517 UCHAR BBPR64;
1518 ULONG InServiceMonitorCount; // unit: sec
1519 UINT8 DfsSessionTime;
1520 BOOLEAN bFastDfs;
1521 UINT8 ChMovingTime;
1522 UINT8 LongPulseRadarTh;
1523 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1525 typedef enum _REC_BLOCKACK_STATUS
1527 Recipient_NONE=0,
1528 Recipient_USED,
1529 Recipient_HandleRes,
1530 Recipient_Accept
1531 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1533 typedef enum _ORI_BLOCKACK_STATUS
1535 Originator_NONE=0,
1536 Originator_USED,
1537 Originator_WaitRes,
1538 Originator_Done
1539 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1541 typedef struct _BA_ORI_ENTRY{
1542 UCHAR Wcid;
1543 UCHAR TID;
1544 UCHAR BAWinSize;
1545 UCHAR Token;
1546 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1547 USHORT Sequence;
1548 USHORT TimeOutValue;
1549 ORI_BLOCKACK_STATUS ORI_BA_Status;
1550 RALINK_TIMER_STRUCT ORIBATimer;
1551 PVOID pAdapter;
1552 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1554 typedef struct _BA_REC_ENTRY {
1555 UCHAR Wcid;
1556 UCHAR TID;
1557 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1558 USHORT LastIndSeq;
1559 USHORT TimeOutValue;
1560 RALINK_TIMER_STRUCT RECBATimer;
1561 ULONG LastIndSeqAtTimer;
1562 ULONG nDropPacket;
1563 ULONG rcvSeq;
1564 REC_BLOCKACK_STATUS REC_BA_Status;
1565 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1566 PVOID pAdapter;
1567 struct reordering_list list;
1568 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1571 typedef struct {
1572 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1573 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1574 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1575 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1576 } BA_TABLE, *PBA_TABLE;
1578 //For QureyBATableOID use;
1579 typedef struct PACKED _OID_BA_REC_ENTRY{
1580 UCHAR MACAddr[MAC_ADDR_LEN];
1581 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1582 UCHAR rsv;
1583 UCHAR BufSize[8];
1584 REC_BLOCKACK_STATUS REC_BA_Status[8];
1585 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1587 //For QureyBATableOID use;
1588 typedef struct PACKED _OID_BA_ORI_ENTRY{
1589 UCHAR MACAddr[MAC_ADDR_LEN];
1590 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
1591 UCHAR rsv;
1592 UCHAR BufSize[8];
1593 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1594 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1596 typedef struct _QUERYBA_TABLE{
1597 OID_BA_ORI_ENTRY BAOriEntry[32];
1598 OID_BA_REC_ENTRY BARecEntry[32];
1599 UCHAR OriNum;// Number of below BAOriEntry
1600 UCHAR RecNum;// Number of below BARecEntry
1601 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1603 typedef union _BACAP_STRUC {
1604 struct {
1605 UINT32 RxBAWinLimit:8;
1606 UINT32 TxBAWinLimit:8;
1607 UINT32 AutoBA:1; // automatically BA
1608 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1609 UINT32 MpduDensity:3;
1610 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1611 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1612 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1613 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1614 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.
1615 UINT32 :4;
1616 } field;
1617 UINT32 word;
1618 } BACAP_STRUC, *PBACAP_STRUC;
1620 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1621 typedef struct _IOT_STRUC {
1622 UCHAR Threshold[2];
1623 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1624 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1625 ULONG OneSecInWindowCount;
1626 ULONG OneSecFrameDuplicateCount;
1627 ULONG OneSecOutWindowCount;
1628 UCHAR DelOriAct;
1629 UCHAR DelRecAct;
1630 UCHAR RTSShortProt;
1631 UCHAR RTSLongProt;
1632 BOOLEAN bRTSLongProtOn;
1633 BOOLEAN bLastAtheros;
1634 BOOLEAN bCurrentAtheros;
1635 BOOLEAN bNowAtherosBurstOn;
1636 BOOLEAN bNextDisableRxBA;
1637 BOOLEAN bToggle;
1638 } IOT_STRUC, *PIOT_STRUC;
1640 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1641 typedef union _REG_TRANSMIT_SETTING {
1642 struct {
1643 UINT32 rsv0:10;
1644 UINT32 TxBF:1;
1645 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1646 UINT32 ShortGI:1;
1647 UINT32 STBC:1; //SPACE
1648 UINT32 TRANSNO:2;
1649 UINT32 HTMODE:1;
1650 UINT32 EXTCHA:2;
1651 UINT32 rsv:13;
1652 } field;
1653 UINT32 word;
1654 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1656 typedef union _DESIRED_TRANSMIT_SETTING {
1657 struct {
1658 USHORT MCS:7; // MCS
1659 USHORT PhyMode:4;
1660 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1661 USHORT rsv:3;
1662 } field;
1663 USHORT word;
1664 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1666 typedef struct {
1667 BOOLEAN IsRecipient;
1668 UCHAR MACAddr[MAC_ADDR_LEN];
1669 UCHAR TID;
1670 UCHAR nMSDU;
1671 USHORT TimeOut;
1672 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1673 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1676 // Multiple SSID structure
1678 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1679 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1681 /* clear bcmc TIM bit */
1682 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1683 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1685 /* set bcmc TIM bit */
1686 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1687 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1689 /* clear a station PS TIM bit */
1690 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1691 { UCHAR tim_offset = wcid >> 3; \
1692 UCHAR bit_offset = wcid & 0x7; \
1693 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1695 /* set a station PS TIM bit */
1696 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1697 { UCHAR tim_offset = wcid >> 3; \
1698 UCHAR bit_offset = wcid & 0x7; \
1699 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1701 #ifdef RT2870
1702 #define BEACON_BITMAP_MASK 0xff
1703 typedef struct _BEACON_SYNC_STRUCT_
1705 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1706 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1707 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1708 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1709 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1710 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1711 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1712 }BEACON_SYNC_STRUCT;
1713 #endif // RT2870 //
1715 typedef struct _MULTISSID_STRUCT {
1716 UCHAR Bssid[MAC_ADDR_LEN];
1717 UCHAR SsidLen;
1718 CHAR Ssid[MAX_LEN_OF_SSID];
1719 USHORT CapabilityInfo;
1721 PNET_DEV MSSIDDev;
1723 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1724 NDIS_802_11_WEP_STATUS WepStatus;
1725 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1726 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1728 ULONG TxCount;
1729 ULONG RxCount;
1730 ULONG ReceivedByteCount;
1731 ULONG TransmittedByteCount;
1732 ULONG RxErrorCount;
1733 ULONG RxDropCount;
1735 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1736 RT_HT_PHY_INFO DesiredHtPhyInfo;
1737 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1738 BOOLEAN bAutoTxRateSwitch;
1740 UCHAR DefaultKeyId;
1742 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1743 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1744 UCHAR DesiredRatesIndex;
1745 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1747 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1749 // WPA
1750 UCHAR GMK[32];
1751 UCHAR PMK[32];
1752 UCHAR GTK[32];
1753 BOOLEAN IEEE8021X;
1754 BOOLEAN PreAuth;
1755 UCHAR GNonce[32];
1756 UCHAR PortSecured;
1757 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1758 UCHAR BANClass3Data;
1759 ULONG IsolateInterStaTraffic;
1761 UCHAR RSNIE_Len[2];
1762 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1765 UCHAR TimIELocationInBeacon;
1766 UCHAR CapabilityInfoLocationInBeacon;
1767 // outgoing BEACON frame buffer and corresponding TXWI
1768 // PTXWI_STRUC BeaconTxWI; //
1769 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1771 BOOLEAN bHideSsid;
1772 UINT16 StationKeepAliveTime; // unit: second
1774 USHORT VLAN_VID;
1775 USHORT VLAN_Priority;
1777 RT_802_11_ACL AccessControlList;
1779 // EDCA Qos
1780 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1781 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1783 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1785 // For 802.1x daemon setting per BSS
1786 UCHAR radius_srv_num;
1787 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1789 #ifdef RTL865X_SOC
1790 unsigned int mylinkid;
1791 #endif
1794 UINT32 RcvdConflictSsidCount;
1795 UINT32 RcvdSpoofedAssocRespCount;
1796 UINT32 RcvdSpoofedReassocRespCount;
1797 UINT32 RcvdSpoofedProbeRespCount;
1798 UINT32 RcvdSpoofedBeaconCount;
1799 UINT32 RcvdSpoofedDisassocCount;
1800 UINT32 RcvdSpoofedAuthCount;
1801 UINT32 RcvdSpoofedDeauthCount;
1802 UINT32 RcvdSpoofedUnknownMgmtCount;
1803 UINT32 RcvdReplayAttackCount;
1805 CHAR RssiOfRcvdConflictSsid;
1806 CHAR RssiOfRcvdSpoofedAssocResp;
1807 CHAR RssiOfRcvdSpoofedReassocResp;
1808 CHAR RssiOfRcvdSpoofedProbeResp;
1809 CHAR RssiOfRcvdSpoofedBeacon;
1810 CHAR RssiOfRcvdSpoofedDisassoc;
1811 CHAR RssiOfRcvdSpoofedAuth;
1812 CHAR RssiOfRcvdSpoofedDeauth;
1813 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1814 CHAR RssiOfRcvdReplayAttack;
1816 BOOLEAN bBcnSntReq;
1817 UCHAR BcnBufIdx;
1818 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1820 // configuration common to OPMODE_AP as well as OPMODE_STA
1821 typedef struct _COMMON_CONFIG {
1823 BOOLEAN bCountryFlag;
1824 UCHAR CountryCode[3];
1825 UCHAR Geography;
1826 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1827 UCHAR CountryRegionForABand; // Enum of country region for A band
1828 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1829 USHORT Dsifs; // in units of usec
1830 ULONG PacketFilter; // Packet filter for receiving
1832 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1833 UCHAR SsidLen; // the actual ssid length in used
1834 UCHAR LastSsidLen; // the actual ssid length in used
1835 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1836 UCHAR LastBssid[MAC_ADDR_LEN];
1838 UCHAR Bssid[MAC_ADDR_LEN];
1839 USHORT BeaconPeriod;
1840 UCHAR Channel;
1841 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1843 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1844 UCHAR SupRateLen;
1845 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1846 UCHAR ExtRateLen;
1847 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1848 UCHAR MaxDesiredRate;
1849 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1851 ULONG BasicRateBitmap; // backup basic ratebitmap
1853 BOOLEAN bAPSDCapable;
1854 BOOLEAN bInServicePeriod;
1855 BOOLEAN bAPSDAC_BE;
1856 BOOLEAN bAPSDAC_BK;
1857 BOOLEAN bAPSDAC_VI;
1858 BOOLEAN bAPSDAC_VO;
1859 BOOLEAN bNeedSendTriggerFrame;
1860 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1861 ULONG TriggerTimerCount;
1862 UCHAR MaxSPLength;
1863 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1864 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1865 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1866 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1867 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1868 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1869 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1870 UCHAR RtsRate; // RATE_xxx
1871 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1872 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1873 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1875 USHORT RtsThreshold; // in unit of BYTE
1876 USHORT FragmentThreshold; // in unit of BYTE
1878 UCHAR TxPower; // in unit of mW
1879 ULONG TxPowerPercentage; // 0~100 %
1880 ULONG TxPowerDefault; // keep for TxPowerPercentage
1882 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1883 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1885 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1886 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1887 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1888 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1889 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1890 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1891 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1892 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1893 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1894 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1896 BOOLEAN bRdg;
1898 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1899 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1900 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1901 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1902 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1903 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1904 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1905 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1906 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1907 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1908 ULONG OpStatusFlags;
1910 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1911 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1912 #ifdef RT30xx
1913 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1914 #endif
1916 // IEEE802.11H--DFS.
1917 RADAR_DETECT_STRUCT RadarDetect;
1919 // HT
1920 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1921 //RT_HT_CAPABILITY SupportedHtPhy;
1922 RT_HT_CAPABILITY DesiredHtPhy;
1923 HT_CAPABILITY_IE HtCapability;
1924 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1925 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1926 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1927 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
1929 BOOLEAN bHTProtect;
1930 BOOLEAN bMIMOPSEnable;
1931 BOOLEAN bBADecline;
1932 BOOLEAN bDisableReordering;
1933 BOOLEAN bForty_Mhz_Intolerant;
1934 BOOLEAN bExtChannelSwitchAnnouncement;
1935 BOOLEAN bRcvBSSWidthTriggerEvents;
1936 ULONG LastRcvBSSWidthTriggerEventsTime;
1938 UCHAR TxBASize;
1940 // Enable wireless event
1941 BOOLEAN bWirelessEvent;
1942 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1944 // Tx & Rx Stream number selection
1945 UCHAR TxStream;
1946 UCHAR RxStream;
1948 // transmit phy mode, trasmit rate for Multicast.
1949 #ifdef MCAST_RATE_SPECIFIC
1950 UCHAR McastTransmitMcs;
1951 UCHAR McastTransmitPhyMode;
1952 #endif // MCAST_RATE_SPECIFIC //
1954 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1956 #ifdef RT2870
1957 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1958 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1959 RT_HT_CAPABILITY SupportedHtPhy;
1960 ULONG MaxPktOneTxBulk;
1961 UCHAR TxBulkFactor;
1962 UCHAR RxBulkFactor;
1964 BEACON_SYNC_STRUCT *pBeaconSync;
1965 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1966 UINT32 BeaconAdjust;
1967 UINT32 BeaconFactor;
1968 UINT32 BeaconRemain;
1969 #endif // RT2870 //
1972 NDIS_SPIN_LOCK MeasureReqTabLock;
1973 PMEASURE_REQ_TAB pMeasureReqTab;
1975 NDIS_SPIN_LOCK TpcReqTabLock;
1976 PTPC_REQ_TAB pTpcReqTab;
1978 // transmit phy mode, trasmit rate for Multicast.
1979 #ifdef MCAST_RATE_SPECIFIC
1980 HTTRANSMIT_SETTING MCastPhyMode;
1981 #endif // MCAST_RATE_SPECIFIC //
1982 } COMMON_CONFIG, *PCOMMON_CONFIG;
1984 /* Modified by Wu Xi-Kun 4/21/2006 */
1985 // STA configuration and status
1986 typedef struct _STA_ADMIN_CONFIG {
1987 // GROUP 1 -
1988 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1989 // the user intended configuration, but not necessary fully equal to the final
1990 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1991 // AP or IBSS holder).
1992 // Once initialized, user configuration can only be changed via OID_xxx
1993 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1994 USHORT AtimWin; // used when starting a new IBSS
1996 // GROUP 2 -
1997 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1998 // the user intended configuration, and should be always applied to the final
1999 // settings in ACTIVE BSS without compromising with the BSS holder.
2000 // Once initialized, user configuration can only be changed via OID_xxx
2001 UCHAR RssiTrigger;
2002 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2003 USHORT DefaultListenCount; // default listen count;
2004 ULONG WindowsPowerMode; // Power mode for AC power
2005 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2006 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2007 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2008 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2010 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2011 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2012 USHORT DisassocReason;
2013 UCHAR DisassocSta[MAC_ADDR_LEN];
2014 USHORT DeauthReason;
2015 UCHAR DeauthSta[MAC_ADDR_LEN];
2016 USHORT AuthFailReason;
2017 UCHAR AuthFailSta[MAC_ADDR_LEN];
2019 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2020 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2021 NDIS_802_11_WEP_STATUS WepStatus;
2022 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2024 // Add to support different cipher suite for WPA2/WPA mode
2025 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2026 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2027 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2028 USHORT RsnCapability;
2030 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2032 UCHAR PMK[32]; // WPA PSK mode PMK
2033 UCHAR PTK[64]; // WPA PSK mode PTK
2034 UCHAR GTK[32]; // GTK from authenticator
2035 BSSID_INFO SavedPMK[PMKID_NO];
2036 UINT SavedPMKNum; // Saved PMKID number
2038 UCHAR DefaultKeyId;
2041 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2042 UCHAR PortSecured;
2044 // For WPA countermeasures
2045 ULONG LastMicErrorTime; // record last MIC error time
2046 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2047 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2048 // For WPA-PSK supplicant state
2049 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2050 UCHAR ReplayCounter[8];
2051 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2052 UCHAR SNonce[32]; // SNonce for WPA-PSK
2054 UCHAR LastSNR0; // last received BEACON's SNR
2055 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2056 RSSI_SAMPLE RssiSample;
2057 ULONG NumOfAvgRssiSample;
2059 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2060 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2061 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2062 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2064 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2065 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2066 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2067 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2068 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2069 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2070 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2071 #ifdef RT2860
2072 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2073 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2074 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2075 #endif
2076 // New for WPA, windows want us to to keep association information and
2077 // Fixed IEs from last association response
2078 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2079 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2080 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2081 USHORT ResVarIELen; // Length of next VIE include EID & Length
2082 UCHAR ResVarIEs[MAX_VIE_LEN];
2084 UCHAR RSNIE_Len;
2085 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2087 // New variables used for CCX 1.0
2088 BOOLEAN bCkipOn;
2089 BOOLEAN bCkipCmicOn;
2090 UCHAR CkipFlag;
2091 UCHAR GIV[3]; //for CCX iv
2092 UCHAR RxSEQ[4];
2093 UCHAR TxSEQ[4];
2094 UCHAR CKIPMIC[4];
2095 UCHAR LeapAuthMode;
2096 LEAP_AUTH_INFO LeapAuthInfo;
2097 UCHAR HashPwd[16];
2098 UCHAR NetworkChallenge[8];
2099 UCHAR NetworkChallengeResponse[24];
2100 UCHAR PeerChallenge[8];
2102 UCHAR PeerChallengeResponse[24];
2103 UCHAR SessionKey[16]; //Network session keys (NSK)
2104 RALINK_TIMER_STRUCT LeapAuthTimer;
2105 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2107 // New control flags for CCX
2108 CCX_CONTROL CCXControl; // Master administration state
2109 BOOLEAN CCXEnable; // Actual CCX state
2110 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2111 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2112 UCHAR CCXReqType; // Current processing CCX request type
2113 BSS_TABLE CCXBssTab; // BSS Table
2114 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2115 USHORT FrameReportLen; // Current Frame report length
2116 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2117 USHORT RPIDensity[8]; // Array for RPI density collection
2118 // Start address of each BSS table within FrameReportBuf
2119 // It's important to update the RxPower of the corresponding Bss
2120 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2121 USHORT BeaconToken; // Token for beacon report
2122 ULONG LastBssIndex; // Most current reported Bss index
2123 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2124 UCHAR RMReqCnt; // Number of measurement request saved.
2125 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2126 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2127 // It must be the same channel with maximum duration
2128 USHORT ParallelDuration; // Maximum duration for parallel measurement
2129 UCHAR ParallelChannel; // Only one channel with parallel measurement
2130 USHORT IAPPToken; // IAPP dialog token
2131 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2132 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2133 // Hack for channel load and noise histogram parameters
2134 UCHAR NHFactor; // Parameter for Noise histogram
2135 UCHAR CLFactor; // Parameter for channel load
2137 UCHAR KRK[16]; //Key Refresh Key.
2138 UCHAR BTK[32]; //Base Transient Key
2139 BOOLEAN CCKMLinkUpFlag;
2140 ULONG CCKMRN; //(Re)Association request number.
2141 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2142 UCHAR AironetCellPowerLimit; //in dBm
2143 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2144 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2145 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2146 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2147 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2148 USHORT CCXAdjacentAPChannel;
2149 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2151 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2152 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2154 UCHAR DtimCount; // 0.. DtimPeriod-1
2155 UCHAR DtimPeriod; // default = 3
2157 ////////////////////////////////////////////////////////////////////////////////////////
2158 // This is only for WHQL test.
2159 BOOLEAN WhqlTest;
2160 ////////////////////////////////////////////////////////////////////////////////////////
2162 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2163 // Fast Roaming
2164 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2165 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2167 BOOLEAN IEEE8021X;
2168 BOOLEAN IEEE8021x_required_keys;
2169 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2170 UCHAR DesireSharedKeyId;
2172 // 0: driver ignores wpa_supplicant
2173 // 1: wpa_supplicant initiates scanning and AP selection
2174 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2175 UCHAR WpaSupplicantUP;
2176 UCHAR WpaSupplicantScanCount;
2178 CHAR dev_name[16];
2179 USHORT OriDevType;
2181 BOOLEAN bTGnWifiTest;
2182 BOOLEAN bScanReqIsFromWebUI;
2184 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2185 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2186 RT_HT_PHY_INFO DesiredHtPhyInfo;
2187 BOOLEAN bAutoTxRateSwitch;
2189 #ifdef RT2860
2190 UCHAR BBPR3;
2191 #endif
2192 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2194 // This data structure keep the current active BSS/IBSS's configuration that this STA
2195 // had agreed upon joining the network. Which means these parameters are usually decided
2196 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2197 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2198 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2199 // the current active settings.
2200 typedef struct _STA_ACTIVE_CONFIG {
2201 USHORT Aid;
2202 USHORT AtimWin; // in kusec; IBSS parameter set element
2203 USHORT CapabilityInfo;
2204 USHORT CfpMaxDuration;
2205 USHORT CfpPeriod;
2207 // Copy supported rate from desired AP's beacon. We are trying to match
2208 // AP's supported and extended rate settings.
2209 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2210 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2211 UCHAR SupRateLen;
2212 UCHAR ExtRateLen;
2213 // Copy supported ht from desired AP's beacon. We are trying to match
2214 RT_HT_PHY_INFO SupportedPhyInfo;
2215 RT_HT_CAPABILITY SupportedHtPhy;
2216 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2218 #ifdef RT2870
2219 // for USB interface, avoid in interrupt when write key
2220 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2221 NDIS_802_11_MAC_ADDRESS MacAddr;
2222 USHORT MacTabMatchWCID; // ASIC
2223 CIPHER_KEY CipherKey;
2224 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2225 #endif // RT2870 //
2227 // ----------- start of AP --------------------------
2228 // AUTH-RSP State Machine Aux data structure
2229 typedef struct _AP_MLME_AUX {
2230 UCHAR Addr[MAC_ADDR_LEN];
2231 USHORT Alg;
2232 CHAR Challenge[CIPHER_TEXT_LEN];
2233 } AP_MLME_AUX, *PAP_MLME_AUX;
2235 // structure to define WPA Group Key Rekey Interval
2236 typedef struct PACKED _RT_802_11_WPA_REKEY {
2237 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2238 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2239 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2241 typedef struct _MAC_TABLE_ENTRY {
2242 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2243 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2244 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2245 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2246 BOOLEAN ValidAsMesh;
2247 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2248 BOOLEAN isCached;
2249 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2251 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2252 //jan for wpa
2253 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2254 UCHAR CMTimerRunning;
2255 UCHAR apidx; // MBSS number
2256 UCHAR RSNIE_Len;
2257 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2258 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2259 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2260 UCHAR PTK[64];
2261 UCHAR ReTryCounter;
2262 RALINK_TIMER_STRUCT RetryTimer;
2263 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2264 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2265 NDIS_802_11_WEP_STATUS WepStatus;
2266 AP_WPA_STATE WpaState;
2267 GTK_STATE GTKState;
2268 USHORT PortSecured;
2269 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2270 CIPHER_KEY PairwiseKey;
2271 PVOID pAd;
2272 INT PMKID_CacheIdx;
2273 UCHAR PMKID[LEN_PMKID];
2276 UCHAR Addr[MAC_ADDR_LEN];
2277 UCHAR PsMode;
2278 SST Sst;
2279 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2280 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2281 USHORT Aid;
2282 USHORT CapabilityInfo;
2283 UCHAR LastRssi;
2284 ULONG NoDataIdleCount;
2285 UINT16 StationKeepAliveCount; // unit: second
2286 ULONG PsQIdleCount;
2287 QUEUE_HEADER PsQueue;
2289 UINT32 StaConnectTime; // the live time of this station since associated with AP
2291 BOOLEAN bSendBAR;
2292 USHORT NoBADataCountDown;
2294 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2295 UINT TxBFCount; // 3*3
2296 UINT FIFOCount;
2297 UINT DebugFIFOCount;
2298 UINT DebugTxCount;
2299 BOOLEAN bDlsInit;
2302 //====================================================
2303 //WDS entry needs these
2304 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2305 UINT MatchWDSTabIdx;
2306 UCHAR MaxSupportedRate;
2307 UCHAR CurrTxRate;
2308 UCHAR CurrTxRateIndex;
2309 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2310 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2311 UINT32 OneSecTxNoRetryOkCount;
2312 UINT32 OneSecTxRetryOkCount;
2313 UINT32 OneSecTxFailCount;
2314 UINT32 ContinueTxFailCnt;
2315 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2316 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2317 //====================================================
2319 BOOLEAN fNoisyEnvironment;
2320 BOOLEAN fLastSecAccordingRSSI;
2321 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2322 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2323 ULONG LastTxOkCount;
2324 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2326 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2327 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2328 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2329 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2330 ULONG ClientStatusFlags;
2332 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2334 // HT EWC MIMO-N used parameters
2335 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2336 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2337 USHORT TXAutoBAbitmap;
2338 USHORT BADeclineBitmap;
2339 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2340 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2341 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2343 // 802.11n features.
2344 UCHAR MpduDensity;
2345 UCHAR MaxRAmpduFactor;
2346 UCHAR AMsduSize;
2347 UCHAR MmpsMode; // MIMO power save more.
2349 HT_CAPABILITY_IE HTCapability;
2351 BOOLEAN bAutoTxRateSwitch;
2353 UCHAR RateLen;
2354 struct _MAC_TABLE_ENTRY *pNext;
2355 USHORT TxSeq[NUM_OF_TID];
2356 USHORT NonQosDataSeq;
2358 RSSI_SAMPLE RssiSample;
2360 UINT32 TXMCSExpected[16];
2361 UINT32 TXMCSSuccessful[16];
2362 UINT32 TXMCSFailed[16];
2363 UINT32 TXMCSAutoFallBack[16][16];
2364 #ifdef RT2870
2365 ULONG LastBeaconRxTime;
2366 #endif
2367 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2369 typedef struct _MAC_TABLE {
2370 USHORT Size;
2371 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2372 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2373 QUEUE_HEADER McastPsQueue;
2374 ULONG PsQIdleCount;
2375 BOOLEAN fAnyStationInPsm;
2376 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2377 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2378 #ifdef RT2870
2379 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2380 #endif
2381 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2382 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2383 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2384 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2385 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2386 } MAC_TABLE, *PMAC_TABLE;
2388 #define IS_HT_STA(_pMacEntry) \
2389 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2391 #define IS_HT_RATE(_pMacEntry) \
2392 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2394 #define PEER_IS_HT_RATE(_pMacEntry) \
2395 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2397 typedef struct _WDS_ENTRY {
2398 BOOLEAN Valid;
2399 UCHAR Addr[MAC_ADDR_LEN];
2400 ULONG NoDataIdleCount;
2401 struct _WDS_ENTRY *pNext;
2402 } WDS_ENTRY, *PWDS_ENTRY;
2404 typedef struct _WDS_TABLE_ENTRY {
2405 USHORT Size;
2406 UCHAR WdsAddr[MAC_ADDR_LEN];
2407 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2408 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2409 UCHAR MaxSupportedRate;
2410 UCHAR CurrTxRate;
2411 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2412 USHORT OneSecTxOkCount;
2413 USHORT OneSecTxRetryOkCount;
2414 USHORT OneSecTxFailCount;
2415 ULONG CurrTxRateStableTime; // # of second in current TX rate
2416 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2417 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2419 typedef struct _RT_802_11_WDS_ENTRY {
2420 PNET_DEV dev;
2421 UCHAR Valid;
2422 UCHAR PhyMode;
2423 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2424 UCHAR MacTabMatchWCID; // ASIC
2425 NDIS_802_11_WEP_STATUS WepStatus;
2426 UCHAR KeyIdx;
2427 CIPHER_KEY WdsKey;
2428 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2429 RT_HT_PHY_INFO DesiredHtPhyInfo;
2430 BOOLEAN bAutoTxRateSwitch;
2431 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2432 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2434 typedef struct _WDS_TABLE {
2435 UCHAR Mode;
2436 ULONG Size;
2437 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2438 } WDS_TABLE, *PWDS_TABLE;
2440 typedef struct _APCLI_STRUCT {
2441 PNET_DEV dev;
2442 #ifdef RTL865X_SOC
2443 unsigned int mylinkid;
2444 #endif
2445 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2446 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2447 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2448 UCHAR SsidLen;
2449 CHAR Ssid[MAX_LEN_OF_SSID];
2451 UCHAR CfgSsidLen;
2452 CHAR CfgSsid[MAX_LEN_OF_SSID];
2453 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2454 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2456 ULONG ApCliRcvBeaconTime;
2458 ULONG CtrlCurrState;
2459 ULONG SyncCurrState;
2460 ULONG AuthCurrState;
2461 ULONG AssocCurrState;
2462 ULONG WpaPskCurrState;
2464 USHORT AuthReqCnt;
2465 USHORT AssocReqCnt;
2467 ULONG ClientStatusFlags;
2468 UCHAR MpduDensity;
2470 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2471 NDIS_802_11_WEP_STATUS WepStatus;
2473 // Add to support different cipher suite for WPA2/WPA mode
2474 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2475 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2476 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2477 USHORT RsnCapability;
2479 UCHAR PSK[100]; // reserve PSK key material
2480 UCHAR PSKLen;
2481 UCHAR PMK[32]; // WPA PSK mode PMK
2482 UCHAR GTK[32]; // GTK from authenticator
2484 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2485 UCHAR DefaultKeyId;
2487 // store RSN_IE built by driver
2488 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2489 UCHAR RSNIE_Len;
2491 // For WPA countermeasures
2492 ULONG LastMicErrorTime; // record last MIC error time
2493 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2495 // For WPA-PSK supplicant state
2496 UCHAR SNonce[32]; // SNonce for WPA-PSK
2497 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2499 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2500 RT_HT_PHY_INFO DesiredHtPhyInfo;
2501 BOOLEAN bAutoTxRateSwitch;
2502 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2503 } APCLI_STRUCT, *PAPCLI_STRUCT;
2505 // ----------- end of AP ----------------------------
2507 struct wificonf
2509 BOOLEAN bShortGI;
2510 BOOLEAN bGreenField;
2516 typedef struct _INF_PCI_CONFIG
2518 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2519 }INF_PCI_CONFIG;
2521 typedef struct _INF_USB_CONFIG
2523 UINT BulkInEpAddr; // bulk-in endpoint address
2524 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2526 }INF_USB_CONFIG;
2528 #ifdef DBG_DIAGNOSE
2529 #define DIAGNOSE_TIME 10 // 10 sec
2530 typedef struct _RtmpDiagStrcut_
2531 { // Diagnosis Related element
2532 unsigned char inited;
2533 unsigned char qIdx;
2534 unsigned char ArrayStartIdx;
2535 unsigned char ArrayCurIdx;
2536 // Tx Related Count
2537 USHORT TxDataCnt[DIAGNOSE_TIME];
2538 USHORT TxFailCnt[DIAGNOSE_TIME];
2539 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2540 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2541 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2543 USHORT TxAggCnt[DIAGNOSE_TIME];
2544 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2545 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2546 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2547 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2549 // Rx Related Count
2550 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2551 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2552 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2553 }RtmpDiagStruct;
2554 #endif // DBG_DIAGNOSE //
2558 // The miniport adapter structure
2560 typedef struct _RTMP_ADAPTER
2562 PVOID OS_Cookie; // save specific structure relative to OS
2563 PNET_DEV net_dev;
2564 ULONG VirtualIfCnt;
2566 #ifdef RT2860
2567 USHORT LnkCtrlBitMask;
2568 USHORT RLnkCtrlConfiguration;
2569 USHORT RLnkCtrlOffset;
2570 USHORT HostLnkCtrlConfiguration;
2571 USHORT HostLnkCtrlOffset;
2572 USHORT PCIePowerSaveLevel;
2573 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2574 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2575 USHORT ThisTbttNumToNextWakeUp;
2576 ULONG SameRxByteCount;
2579 /*****************************************************************************************/
2580 /* PCI related parameters */
2581 /*****************************************************************************************/
2582 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2584 UINT int_enable_reg;
2585 UINT int_disable_mask;
2586 UINT int_pending;
2589 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2590 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2591 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2592 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2593 #endif
2595 NDIS_SPIN_LOCK irq_lock;
2596 UCHAR irq_disabled;
2598 #ifdef RT2870
2599 /*****************************************************************************************/
2600 /* USB related parameters */
2601 /*****************************************************************************************/
2602 struct usb_config_descriptor *config;
2603 UINT BulkInEpAddr; // bulk-in endpoint address
2604 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2606 UINT NumberOfPipes;
2607 USHORT BulkOutMaxPacketSize;
2608 USHORT BulkInMaxPacketSize;
2610 //======Control Flags
2611 LONG PendingIoCount;
2612 ULONG BulkFlags;
2613 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2616 //======Timer Thread
2617 RT2870_TIMER_QUEUE TimerQ;
2618 NDIS_SPIN_LOCK TimerQLock;
2621 //======Cmd Thread
2622 CmdQ CmdQ;
2623 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2625 BOOLEAN TimerFunc_kill;
2626 BOOLEAN mlme_kill;
2629 //======Semaphores (event)
2630 struct semaphore mlme_semaphore; /* to sleep thread on */
2631 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2632 struct semaphore RTUSBTimer_semaphore;
2633 struct completion TimerQComplete;
2634 struct completion mlmeComplete;
2635 struct completion CmdQComplete;
2636 wait_queue_head_t *wait;
2637 #endif // RT2870 //
2640 /*****************************************************************************************/
2641 /* Both PCI/USB related parameters */
2642 /*****************************************************************************************/
2645 /*****************************************************************************************/
2646 /* Tx related parameters */
2647 /*****************************************************************************************/
2648 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2649 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2651 #ifdef RT2870
2652 // Data related context and AC specified, 4 AC supported
2653 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2654 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2656 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2657 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2659 // 4 sets of Bulk Out index and pending flag
2660 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2662 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2663 UCHAR bulkResetPipeid;
2664 BOOLEAN MgmtBulkPending;
2665 ULONG bulkResetReq[6];
2666 #endif // RT2870 //
2668 // resource for software backlog queues
2669 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2670 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2672 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2673 RTMP_MGMT_RING MgmtRing;
2674 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2677 /*****************************************************************************************/
2678 /* Rx related parameters */
2679 /*****************************************************************************************/
2680 #ifdef RT2860
2681 RTMP_RX_RING RxRing;
2682 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2683 #endif
2684 #ifdef RT2870
2685 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2686 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2687 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2688 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2689 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2690 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2691 ULONG TransferBufferLength; // current length of the packet buffer
2692 ULONG ReadPosition; // current read position in a packet buffer
2693 #endif // RT2870 //
2696 /*****************************************************************************************/
2697 /* ASIC related parameters */
2698 /*****************************************************************************************/
2699 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2701 // ---------------------------
2702 // E2PROM
2703 // ---------------------------
2704 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2705 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2706 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2707 #ifdef RT30xx
2708 BOOLEAN EepromAccess;
2709 UCHAR EFuseTag;
2710 #endif
2711 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2713 // ---------------------------
2714 // BBP Control
2715 // ---------------------------
2716 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2717 UCHAR BbpRssiToDbmDelta;
2718 BBP_R66_TUNING BbpTuning;
2720 // ----------------------------
2721 // RFIC control
2722 // ----------------------------
2723 UCHAR RfIcType; // RFIC_xxx
2724 ULONG RfFreqOffset; // Frequency offset for channel switching
2725 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2727 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2728 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2730 // This soft Rx Antenna Diversity mechanism is used only when user set
2731 // RX Antenna = DIVERSITY ON
2732 SOFT_RX_ANT_DIVERSITY RxAnt;
2734 UCHAR RFProgSeq;
2735 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2736 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2737 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2738 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2740 UCHAR ChannelListNum; // number of channel in ChannelList[]
2741 UCHAR Bbp94;
2742 BOOLEAN BbpForCCK;
2743 ULONG Tx20MPwrCfgABand[5];
2744 ULONG Tx20MPwrCfgGBand[5];
2745 ULONG Tx40MPwrCfgABand[5];
2746 ULONG Tx40MPwrCfgGBand[5];
2748 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2749 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2750 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2751 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2752 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2753 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2755 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2756 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2757 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2758 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2759 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2760 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2762 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2763 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2764 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2765 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2766 //---
2768 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2769 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2770 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2771 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2772 //---
2774 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2775 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2776 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2777 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2779 // ----------------------------
2780 // LED control
2781 // ----------------------------
2782 MCU_LEDCS_STRUC LedCntl;
2783 USHORT Led1; // read from EEPROM 0x3c
2784 USHORT Led2; // EEPROM 0x3e
2785 USHORT Led3; // EEPROM 0x40
2786 UCHAR LedIndicatorStregth;
2787 UCHAR RssiSingalstrengthOffet;
2788 BOOLEAN bLedOnScanning;
2789 UCHAR LedStatus;
2791 /*****************************************************************************************/
2792 /* 802.11 related parameters */
2793 /*****************************************************************************************/
2794 // outgoing BEACON frame buffer and corresponding TXD
2795 TXWI_STRUC BeaconTxWI;
2796 PUCHAR BeaconBuf;
2797 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2799 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2800 PSPOLL_FRAME PsPollFrame;
2801 HEADER_802_11 NullFrame;
2803 #ifdef RT2870
2804 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2805 TX_CONTEXT NullContext;
2806 TX_CONTEXT PsPollContext;
2807 TX_CONTEXT RTSContext;
2808 #endif // RT2870 //
2812 //=========AP===========
2815 //=======STA===========
2816 /* Modified by Wu Xi-Kun 4/21/2006 */
2817 // -----------------------------------------------
2818 // STA specific configuration & operation status
2819 // used only when pAd->OpMode == OPMODE_STA
2820 // -----------------------------------------------
2821 STA_ADMIN_CONFIG StaCfg; // user desired settings
2822 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2823 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2824 NDIS_MEDIA_STATE PreMediaState;
2826 //=======Common===========
2827 // OP mode: either AP or STA
2828 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2830 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2833 // configuration: read from Registry & E2PROM
2834 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2835 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2836 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2838 // ------------------------------------------------------
2839 // common configuration to both OPMODE_STA and OPMODE_AP
2840 // ------------------------------------------------------
2841 COMMON_CONFIG CommonCfg;
2842 MLME_STRUCT Mlme;
2844 // AP needs those vaiables for site survey feature.
2845 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2846 BSS_TABLE ScanTab; // store the latest SCAN result
2848 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2849 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2850 NDIS_SPIN_LOCK MacTabLock;
2852 BA_TABLE BATable;
2854 NDIS_SPIN_LOCK BATabLock;
2855 RALINK_TIMER_STRUCT RECBATimer;
2857 // encryption/decryption KEY tables
2858 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2860 // RX re-assembly buffer for fragmentation
2861 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2863 // various Counters
2864 COUNTER_802_3 Counters8023; // 802.3 counters
2865 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2866 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2867 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2868 PRIVATE_STRUC PrivateInfo; // Private information & counters
2870 // flags, see fRTMP_ADAPTER_xxx flags
2871 ULONG Flags; // Represent current device status
2872 #ifdef RT2860
2873 ULONG PSFlags; // Power Save operation flag.
2874 #endif
2876 // current TX sequence #
2877 USHORT Sequence;
2879 // Control disconnect / connect event generation
2880 //+++Didn't used anymore
2881 ULONG LinkDownTime;
2882 //---
2883 ULONG LastRxRate;
2884 ULONG LastTxRate;
2885 //+++Used only for Station
2886 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2887 //---
2889 ULONG ExtraInfo; // Extra information for displaying status
2890 ULONG SystemErrorBitmap; // b0: E2PROM version error
2892 //+++Didn't used anymore
2893 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2894 //---
2896 // ---------------------------
2897 // System event log
2898 // ---------------------------
2899 RT_802_11_EVENT_TABLE EventTab;
2902 BOOLEAN HTCEnable;
2904 /*****************************************************************************************/
2905 /* Statistic related parameters */
2906 /*****************************************************************************************/
2907 #ifdef RT2870
2908 ULONG BulkOutDataOneSecCount;
2909 ULONG BulkInDataOneSecCount;
2910 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2911 ULONG watchDogRxCnt;
2912 ULONG watchDogRxOverFlowCnt;
2913 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2914 #endif // RT2870 //
2916 BOOLEAN bUpdateBcnCntDone;
2917 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2918 // ----------------------------
2919 // DEBUG paramerts
2920 // ----------------------------
2921 BOOLEAN bBanAllBaSetup;
2922 BOOLEAN bPromiscuous;
2924 // ----------------------------
2925 // rt2860c emulation-use Parameters
2926 // ----------------------------
2927 ULONG rtsaccu[30];
2928 ULONG ctsaccu[30];
2929 ULONG cfendaccu[30];
2930 ULONG bacontent[16];
2931 ULONG rxint[RX_RING_SIZE+1];
2932 UCHAR rcvba[60];
2933 BOOLEAN bLinkAdapt;
2934 BOOLEAN bForcePrintTX;
2935 BOOLEAN bForcePrintRX;
2936 BOOLEAN bDisablescanning; //defined in RT2870 USB
2937 BOOLEAN bStaFifoTest;
2938 BOOLEAN bProtectionTest;
2939 BOOLEAN bHCCATest;
2940 BOOLEAN bGenOneHCCA;
2941 BOOLEAN bBroadComHT;
2942 //+++Following add from RT2870 USB.
2943 ULONG BulkOutReq;
2944 ULONG BulkOutComplete;
2945 ULONG BulkOutCompleteOther;
2946 ULONG BulkOutCompleteCancel; // seems not use now?
2947 ULONG BulkInReq;
2948 ULONG BulkInComplete;
2949 ULONG BulkInCompleteFail;
2950 //---
2952 struct wificonf WIFItestbed;
2954 struct reordering_mpdu_pool mpdu_blk_pool;
2956 ULONG OneSecondnonBEpackets; // record non BE packets per second
2958 struct iw_statistics iw_stats;
2960 struct net_device_stats stats;
2962 ULONG TbttTickCount;
2963 #ifdef PCI_MSI_SUPPORT
2964 BOOLEAN HaveMsi;
2965 #endif // PCI_MSI_SUPPORT //
2968 UCHAR is_on;
2970 #define TIME_BASE (1000000/OS_HZ)
2971 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2972 UCHAR flg_be_adjust;
2973 ULONG be_adjust_last_time;
2975 #ifdef DBG_DIAGNOSE
2976 RtmpDiagStruct DiagStruct;
2977 #endif // DBG_DIAGNOSE //
2980 UINT8 PM_FlgSuspend;
2982 #ifdef RT30xx
2983 //======efuse
2984 BOOLEAN bUseEfuse;
2985 BOOLEAN bEEPROMFile;
2986 #endif // RT30xx //
2988 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2991 // Cisco IAPP format
2993 typedef struct _CISCO_IAPP_CONTENT_
2995 USHORT Length; //IAPP Length
2996 UCHAR MessageType; //IAPP type
2997 UCHAR FunctionCode; //IAPP function type
2998 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2999 UCHAR SourceMAC[MAC_ADDR_LEN];
3000 USHORT Tag; //Tag(element IE) - Adjacent AP report
3001 USHORT TagLength; //Length of element not including 4 byte header
3002 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3003 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3004 USHORT Channel;
3005 USHORT SsidLen;
3006 UCHAR Ssid[MAX_LEN_OF_SSID];
3007 USHORT Seconds; //Seconds that the client has been disassociated.
3008 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3010 #define DELAYINTMASK 0x0003fffb
3011 #define INTMASK 0x0003fffb
3012 #define IndMask 0x0003fffc
3013 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3014 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3015 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3016 #define TxCoherent 0x00020000 // tx coherent
3017 #define RxCoherent 0x00010000 // rx coherent
3018 #define McuCommand 0x00000200 // mcu
3019 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3020 #define TBTTInt 0x00000800 // TBTT interrupt
3021 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3022 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3023 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3026 typedef struct _RX_BLK_
3028 RT28XX_RXD_STRUC RxD;
3029 PRXWI_STRUC pRxWI;
3030 PHEADER_802_11 pHeader;
3031 PNDIS_PACKET pRxPacket;
3032 UCHAR *pData;
3033 USHORT DataSize;
3034 USHORT Flags;
3035 UCHAR UserPriority; // for calculate TKIP MIC using
3036 } RX_BLK;
3039 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3040 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3041 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3044 #define fRX_WDS 0x0001
3045 #define fRX_AMSDU 0x0002
3046 #define fRX_ARALINK 0x0004
3047 #define fRX_HTC 0x0008
3048 #define fRX_PAD 0x0010
3049 #define fRX_AMPDU 0x0020
3050 #define fRX_QOS 0x0040
3051 #define fRX_INFRA 0x0080
3052 #define fRX_EAP 0x0100
3053 #define fRX_MESH 0x0200
3054 #define fRX_APCLI 0x0400
3055 #define fRX_DLS 0x0800
3056 #define fRX_WPI 0x1000
3058 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3059 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3060 #define LENGTH_ARALINK_HEADER_FIELD 2
3062 #define TX_UNKOWN_FRAME 0x00
3063 #define TX_MCAST_FRAME 0x01
3064 #define TX_LEGACY_FRAME 0x02
3065 #define TX_AMPDU_FRAME 0x04
3066 #define TX_AMSDU_FRAME 0x08
3067 #define TX_RALINK_FRAME 0x10
3068 #define TX_FRAG_FRAME 0x20
3071 // Currently the sizeof(TX_BLK) is 148 bytes.
3072 typedef struct _TX_BLK_
3074 UCHAR QueIdx;
3075 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3076 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3077 USHORT TotalFragNum; // Total frame fragments required in one batch
3078 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3080 QUEUE_HEADER TxPacketList;
3081 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3082 HTTRANSMIT_SETTING *pTransmit;
3084 // Following structure used for the characteristics of a specific packet.
3085 PNDIS_PACKET pPacket;
3086 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3087 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3088 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3089 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3090 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3091 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3092 UCHAR HdrPadLen; // recording Header Padding Length;
3093 UCHAR apidx; // The interface associated to this packet
3094 UCHAR Wcid; // The MAC entry associated to this packet
3095 UCHAR UserPriority; // priority class of packet
3096 UCHAR FrameGap; // what kind of IFS this packet use
3097 UCHAR MpduReqNum; // number of fragments of this frame
3098 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3099 UCHAR CipherAlg; // cipher alogrithm
3100 PCIPHER_KEY pKey;
3104 USHORT Flags; //See following definitions for detail.
3106 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3107 ULONG Priv; // Hardware specific value saved in here.
3108 } TX_BLK, *PTX_BLK;
3111 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3112 #define fTX_bAckRequired 0x0002 // the packet need ack response
3113 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3114 #define fTX_bHTRate 0x0008 // allow to use HT rate
3115 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3116 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3117 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3118 #define fTX_bWMM 0x0080 // QOS Data
3120 #define fTX_bClearEAPFrame 0x0100
3122 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3123 do { \
3124 if (value) \
3125 (_pTxBlk->Flags |= _flag) \
3126 else \
3127 (_pTxBlk->Flags &= ~(_flag)) \
3128 }while(0)
3130 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3131 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3132 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3138 //------------------------------------------------------------------------------------------
3140 #ifdef RT2860
3142 // Enable & Disable NIC interrupt via writing interrupt mask register
3143 // Since it use ADAPTER structure, it have to be put after structure definition.
3145 __inline VOID NICDisableInterrupt(
3146 IN PRTMP_ADAPTER pAd)
3148 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
3149 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3150 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3153 __inline VOID NICEnableInterrupt(
3154 IN PRTMP_ADAPTER pAd)
3157 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3158 // To prevent System hang, we should enalbe the interrupt when
3159 // ASIC is already Wake Up.
3161 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3162 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3163 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3165 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3167 //else
3168 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3170 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3171 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3174 static inline VOID ConvertMulticastIP2MAC(
3175 IN PUCHAR pIpAddr,
3176 IN PUCHAR *ppMacAddr,
3177 IN UINT16 ProtoType)
3179 if (pIpAddr == NULL)
3180 return;
3182 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3183 return;
3185 switch (ProtoType)
3187 case ETH_P_IPV6:
3188 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3189 *(*ppMacAddr) = 0x33;
3190 *(*ppMacAddr + 1) = 0x33;
3191 *(*ppMacAddr + 2) = pIpAddr[12];
3192 *(*ppMacAddr + 3) = pIpAddr[13];
3193 *(*ppMacAddr + 4) = pIpAddr[14];
3194 *(*ppMacAddr + 5) = pIpAddr[15];
3195 break;
3197 case ETH_P_IP:
3198 default:
3199 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3200 *(*ppMacAddr) = 0x01;
3201 *(*ppMacAddr + 1) = 0x00;
3202 *(*ppMacAddr + 2) = 0x5e;
3203 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3204 *(*ppMacAddr + 4) = pIpAddr[2];
3205 *(*ppMacAddr + 5) = pIpAddr[3];
3206 break;
3209 return;
3211 #endif /* RT2860 */
3213 BOOLEAN RTMPCheckForHang(
3214 IN NDIS_HANDLE MiniportAdapterContext
3217 VOID RTMPHalt(
3218 IN NDIS_HANDLE MiniportAdapterContext
3222 // Private routines in rtmp_init.c
3224 NDIS_STATUS RTMPAllocAdapterBlock(
3225 IN PVOID handle,
3226 OUT PRTMP_ADAPTER *ppAdapter
3229 NDIS_STATUS RTMPAllocTxRxRingMemory(
3230 IN PRTMP_ADAPTER pAd
3233 NDIS_STATUS RTMPFindAdapter(
3234 IN PRTMP_ADAPTER pAd,
3235 IN NDIS_HANDLE WrapperConfigurationContext
3238 NDIS_STATUS RTMPReadParametersHook(
3239 IN PRTMP_ADAPTER pAd
3242 VOID RTMPFreeAdapter(
3243 IN PRTMP_ADAPTER pAd
3246 NDIS_STATUS NICReadRegParameters(
3247 IN PRTMP_ADAPTER pAd,
3248 IN NDIS_HANDLE WrapperConfigurationContext
3251 #ifdef RT2870
3252 VOID NICInitRT30xxRFRegisters(
3253 IN PRTMP_ADAPTER pAd);
3254 #endif // RT2870 //
3256 VOID NICReadEEPROMParameters(
3257 IN PRTMP_ADAPTER pAd,
3258 IN PUCHAR mac_addr);
3260 VOID NICInitAsicFromEEPROM(
3261 IN PRTMP_ADAPTER pAd);
3263 VOID NICInitTxRxRingAndBacklogQueue(
3264 IN PRTMP_ADAPTER pAd);
3266 NDIS_STATUS NICInitializeAdapter(
3267 IN PRTMP_ADAPTER pAd,
3268 IN BOOLEAN bHardReset);
3270 NDIS_STATUS NICInitializeAsic(
3271 IN PRTMP_ADAPTER pAd,
3272 IN BOOLEAN bHardReset);
3273 #ifdef RT2860
3274 VOID NICRestoreBBPValue(
3275 IN PRTMP_ADAPTER pAd);
3276 #endif
3277 VOID NICIssueReset(
3278 IN PRTMP_ADAPTER pAd);
3280 VOID RTMPRingCleanUp(
3281 IN PRTMP_ADAPTER pAd,
3282 IN UCHAR RingType);
3284 VOID RxTest(
3285 IN PRTMP_ADAPTER pAd);
3287 NDIS_STATUS DbgSendPacket(
3288 IN PRTMP_ADAPTER pAd,
3289 IN PNDIS_PACKET pPacket);
3291 VOID UserCfgInit(
3292 IN PRTMP_ADAPTER pAd);
3294 VOID NICResetFromError(
3295 IN PRTMP_ADAPTER pAd);
3297 VOID NICEraseFirmware(
3298 IN PRTMP_ADAPTER pAd);
3300 NDIS_STATUS NICLoadFirmware(
3301 IN PRTMP_ADAPTER pAd);
3303 NDIS_STATUS NICLoadRateSwitchingParams(
3304 IN PRTMP_ADAPTER pAd);
3306 BOOLEAN NICCheckForHang(
3307 IN PRTMP_ADAPTER pAd);
3309 VOID NICUpdateFifoStaCounters(
3310 IN PRTMP_ADAPTER pAd);
3312 VOID NICUpdateRawCounters(
3313 IN PRTMP_ADAPTER pAd);
3315 ULONG RTMPNotAllZero(
3316 IN PVOID pSrc1,
3317 IN ULONG Length);
3319 VOID RTMPZeroMemory(
3320 IN PVOID pSrc,
3321 IN ULONG Length);
3323 ULONG RTMPCompareMemory(
3324 IN PVOID pSrc1,
3325 IN PVOID pSrc2,
3326 IN ULONG Length);
3328 VOID RTMPMoveMemory(
3329 OUT PVOID pDest,
3330 IN PVOID pSrc,
3331 IN ULONG Length);
3333 VOID AtoH(
3334 char *src,
3335 UCHAR *dest,
3336 int destlen);
3338 UCHAR BtoH(
3339 char ch);
3341 VOID RTMPPatchMacBbpBug(
3342 IN PRTMP_ADAPTER pAd);
3344 VOID RTMPPatchCardBus(
3345 IN PRTMP_ADAPTER pAdapter);
3347 VOID RTMPPatchRalinkCardBus(
3348 IN PRTMP_ADAPTER pAdapter,
3349 IN ULONG Bus);
3351 ULONG RTMPReadCBConfig(
3352 IN ULONG Bus,
3353 IN ULONG Slot,
3354 IN ULONG Func,
3355 IN ULONG Offset);
3357 VOID RTMPWriteCBConfig(
3358 IN ULONG Bus,
3359 IN ULONG Slot,
3360 IN ULONG Func,
3361 IN ULONG Offset,
3362 IN ULONG Value);
3364 VOID RTMPInitTimer(
3365 IN PRTMP_ADAPTER pAd,
3366 IN PRALINK_TIMER_STRUCT pTimer,
3367 IN PVOID pTimerFunc,
3368 IN PVOID pData,
3369 IN BOOLEAN Repeat);
3371 VOID RTMPSetTimer(
3372 IN PRALINK_TIMER_STRUCT pTimer,
3373 IN ULONG Value);
3376 VOID RTMPModTimer(
3377 IN PRALINK_TIMER_STRUCT pTimer,
3378 IN ULONG Value);
3380 VOID RTMPCancelTimer(
3381 IN PRALINK_TIMER_STRUCT pTimer,
3382 OUT BOOLEAN *pCancelled);
3384 VOID RTMPSetLED(
3385 IN PRTMP_ADAPTER pAd,
3386 IN UCHAR Status);
3388 VOID RTMPSetSignalLED(
3389 IN PRTMP_ADAPTER pAd,
3390 IN NDIS_802_11_RSSI Dbm);
3392 VOID RTMPEnableRxTx(
3393 IN PRTMP_ADAPTER pAd);
3396 // prototype in action.c
3398 VOID ActionStateMachineInit(
3399 IN PRTMP_ADAPTER pAd,
3400 IN STATE_MACHINE *S,
3401 OUT STATE_MACHINE_FUNC Trans[]);
3403 VOID MlmeADDBAAction(
3404 IN PRTMP_ADAPTER pAd,
3405 IN MLME_QUEUE_ELEM *Elem);
3407 VOID MlmeDELBAAction(
3408 IN PRTMP_ADAPTER pAd,
3409 IN MLME_QUEUE_ELEM *Elem);
3411 VOID MlmeDLSAction(
3412 IN PRTMP_ADAPTER pAd,
3413 IN MLME_QUEUE_ELEM *Elem);
3415 VOID MlmeInvalidAction(
3416 IN PRTMP_ADAPTER pAd,
3417 IN MLME_QUEUE_ELEM *Elem);
3419 VOID MlmeQOSAction(
3420 IN PRTMP_ADAPTER pAd,
3421 IN MLME_QUEUE_ELEM *Elem);
3423 VOID PeerAddBAReqAction(
3424 IN PRTMP_ADAPTER pAd,
3425 IN MLME_QUEUE_ELEM *Elem);
3427 VOID PeerAddBARspAction(
3428 IN PRTMP_ADAPTER pAd,
3429 IN MLME_QUEUE_ELEM *Elem);
3431 VOID PeerDelBAAction(
3432 IN PRTMP_ADAPTER pAd,
3433 IN MLME_QUEUE_ELEM *Elem);
3435 VOID PeerBAAction(
3436 IN PRTMP_ADAPTER pAd,
3437 IN MLME_QUEUE_ELEM *Elem);
3439 VOID SendPSMPAction(
3440 IN PRTMP_ADAPTER pAd,
3441 IN UCHAR Wcid,
3442 IN UCHAR Psmp);
3444 VOID PeerRMAction(
3445 IN PRTMP_ADAPTER pAd,
3446 IN MLME_QUEUE_ELEM *Elem);
3448 VOID PeerPublicAction(
3449 IN PRTMP_ADAPTER pAd,
3450 IN MLME_QUEUE_ELEM *Elem);
3452 VOID StaPublicAction(
3453 IN PRTMP_ADAPTER pAd,
3454 IN UCHAR Bss2040Coexist);
3456 VOID PeerBSSTranAction(
3457 IN PRTMP_ADAPTER pAd,
3458 IN MLME_QUEUE_ELEM *Elem);
3460 VOID PeerHTAction(
3461 IN PRTMP_ADAPTER pAd,
3462 IN MLME_QUEUE_ELEM *Elem);
3464 VOID PeerQOSAction(
3465 IN PRTMP_ADAPTER pAd,
3466 IN MLME_QUEUE_ELEM *Elem);
3468 VOID RECBATimerTimeout(
3469 IN PVOID SystemSpecific1,
3470 IN PVOID FunctionContext,
3471 IN PVOID SystemSpecific2,
3472 IN PVOID SystemSpecific3);
3474 VOID ORIBATimerTimeout(
3475 IN PRTMP_ADAPTER pAd);
3477 VOID SendRefreshBAR(
3478 IN PRTMP_ADAPTER pAd,
3479 IN MAC_TABLE_ENTRY *pEntry);
3481 VOID ActHeaderInit(
3482 IN PRTMP_ADAPTER pAd,
3483 IN OUT PHEADER_802_11 pHdr80211,
3484 IN PUCHAR Addr1,
3485 IN PUCHAR Addr2,
3486 IN PUCHAR Addr3);
3488 VOID BarHeaderInit(
3489 IN PRTMP_ADAPTER pAd,
3490 IN OUT PFRAME_BAR pCntlBar,
3491 IN PUCHAR pDA,
3492 IN PUCHAR pSA);
3494 VOID InsertActField(
3495 IN PRTMP_ADAPTER pAd,
3496 OUT PUCHAR pFrameBuf,
3497 OUT PULONG pFrameLen,
3498 IN UINT8 Category,
3499 IN UINT8 ActCode);
3501 BOOLEAN QosBADataParse(
3502 IN PRTMP_ADAPTER pAd,
3503 IN BOOLEAN bAMSDU,
3504 IN PUCHAR p8023Header,
3505 IN UCHAR WCID,
3506 IN UCHAR TID,
3507 IN USHORT Sequence,
3508 IN UCHAR DataOffset,
3509 IN USHORT Datasize,
3510 IN UINT CurRxIndex);
3512 BOOLEAN CntlEnqueueForRecv(
3513 IN PRTMP_ADAPTER pAd,
3514 IN ULONG Wcid,
3515 IN ULONG MsgLen,
3516 IN PFRAME_BA_REQ pMsg);
3518 VOID BaAutoManSwitch(
3519 IN PRTMP_ADAPTER pAd);
3521 VOID HTIOTCheck(
3522 IN PRTMP_ADAPTER pAd,
3523 IN UCHAR BatRecIdx);
3526 // Private routines in rtmp_data.c
3528 BOOLEAN RTMPHandleRxDoneInterrupt(
3529 IN PRTMP_ADAPTER pAd);
3531 VOID RTMPHandleTxDoneInterrupt(
3532 IN PRTMP_ADAPTER pAd);
3534 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3535 IN PRTMP_ADAPTER pAd,
3536 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3538 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3539 IN PRTMP_ADAPTER pAd);
3541 VOID RTMPHandleTBTTInterrupt(
3542 IN PRTMP_ADAPTER pAd);
3544 VOID RTMPHandlePreTBTTInterrupt(
3545 IN PRTMP_ADAPTER pAd);
3547 void RTMPHandleTwakeupInterrupt(
3548 IN PRTMP_ADAPTER pAd);
3550 VOID RTMPHandleRxCoherentInterrupt(
3551 IN PRTMP_ADAPTER pAd);
3553 BOOLEAN TxFrameIsAggregatible(
3554 IN PRTMP_ADAPTER pAd,
3555 IN PUCHAR pPrevAddr1,
3556 IN PUCHAR p8023hdr);
3558 BOOLEAN PeerIsAggreOn(
3559 IN PRTMP_ADAPTER pAd,
3560 IN ULONG TxRate,
3561 IN PMAC_TABLE_ENTRY pMacEntry);
3563 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3564 IN PNDIS_BUFFER pFirstBuffer,
3565 IN UCHAR DesiredOffset,
3566 OUT PUCHAR pByte0,
3567 OUT PUCHAR pByte1);
3569 NDIS_STATUS STASendPacket(
3570 IN PRTMP_ADAPTER pAd,
3571 IN PNDIS_PACKET pPacket);
3573 VOID STASendPackets(
3574 IN NDIS_HANDLE MiniportAdapterContext,
3575 IN PPNDIS_PACKET ppPacketArray,
3576 IN UINT NumberOfPackets);
3578 VOID RTMPDeQueuePacket(
3579 IN PRTMP_ADAPTER pAd,
3580 IN BOOLEAN bIntContext,
3581 IN UCHAR QueIdx,
3582 IN UCHAR Max_Tx_Packets);
3584 NDIS_STATUS RTMPHardTransmit(
3585 IN PRTMP_ADAPTER pAd,
3586 IN PNDIS_PACKET pPacket,
3587 IN UCHAR QueIdx,
3588 OUT PULONG pFreeTXDLeft);
3590 NDIS_STATUS STAHardTransmit(
3591 IN PRTMP_ADAPTER pAd,
3592 IN TX_BLK *pTxBlk,
3593 IN UCHAR QueIdx);
3595 VOID STARxEAPOLFrameIndicate(
3596 IN PRTMP_ADAPTER pAd,
3597 IN MAC_TABLE_ENTRY *pEntry,
3598 IN RX_BLK *pRxBlk,
3599 IN UCHAR FromWhichBSSID);
3601 NDIS_STATUS RTMPFreeTXDRequest(
3602 IN PRTMP_ADAPTER pAd,
3603 IN UCHAR RingType,
3604 IN UCHAR NumberRequired,
3605 IN PUCHAR FreeNumberIs);
3607 NDIS_STATUS MlmeHardTransmit(
3608 IN PRTMP_ADAPTER pAd,
3609 IN UCHAR QueIdx,
3610 IN PNDIS_PACKET pPacket);
3612 NDIS_STATUS MlmeHardTransmitMgmtRing(
3613 IN PRTMP_ADAPTER pAd,
3614 IN UCHAR QueIdx,
3615 IN PNDIS_PACKET pPacket);
3617 NDIS_STATUS MlmeHardTransmitTxRing(
3618 IN PRTMP_ADAPTER pAd,
3619 IN UCHAR QueIdx,
3620 IN PNDIS_PACKET pPacket);
3622 USHORT RTMPCalcDuration(
3623 IN PRTMP_ADAPTER pAd,
3624 IN UCHAR Rate,
3625 IN ULONG Size);
3627 VOID RTMPWriteTxWI(
3628 IN PRTMP_ADAPTER pAd,
3629 IN PTXWI_STRUC pTxWI,
3630 IN BOOLEAN FRAG,
3631 IN BOOLEAN CFACK,
3632 IN BOOLEAN InsTimestamp,
3633 IN BOOLEAN AMPDU,
3634 IN BOOLEAN Ack,
3635 IN BOOLEAN NSeq, // HW new a sequence.
3636 IN UCHAR BASize,
3637 IN UCHAR WCID,
3638 IN ULONG Length,
3639 IN UCHAR PID,
3640 IN UCHAR TID,
3641 IN UCHAR TxRate,
3642 IN UCHAR Txopmode,
3643 IN BOOLEAN CfAck,
3644 IN HTTRANSMIT_SETTING *pTransmit);
3647 VOID RTMPWriteTxWI_Data(
3648 IN PRTMP_ADAPTER pAd,
3649 IN OUT PTXWI_STRUC pTxWI,
3650 IN TX_BLK *pTxBlk);
3653 VOID RTMPWriteTxWI_Cache(
3654 IN PRTMP_ADAPTER pAd,
3655 IN OUT PTXWI_STRUC pTxWI,
3656 IN TX_BLK *pTxBlk);
3658 VOID RTMPWriteTxDescriptor(
3659 IN PRTMP_ADAPTER pAd,
3660 IN PTXD_STRUC pTxD,
3661 IN BOOLEAN bWIV,
3662 IN UCHAR QSEL);
3664 VOID RTMPSuspendMsduTransmission(
3665 IN PRTMP_ADAPTER pAd);
3667 VOID RTMPResumeMsduTransmission(
3668 IN PRTMP_ADAPTER pAd);
3670 NDIS_STATUS MiniportMMRequest(
3671 IN PRTMP_ADAPTER pAd,
3672 IN UCHAR QueIdx,
3673 IN PUCHAR pData,
3674 IN UINT Length);
3675 #ifdef RT2870
3676 NDIS_STATUS MiniportDataMMRequest(
3677 IN PRTMP_ADAPTER pAd,
3678 IN UCHAR QueIdx,
3679 IN PUCHAR pData,
3680 IN UINT Length);
3681 #endif
3682 VOID RTMPSendNullFrame(
3683 IN PRTMP_ADAPTER pAd,
3684 IN UCHAR TxRate,
3685 IN BOOLEAN bQosNull);
3687 VOID RTMPSendDisassociationFrame(
3688 IN PRTMP_ADAPTER pAd);
3690 VOID RTMPSendRTSFrame(
3691 IN PRTMP_ADAPTER pAd,
3692 IN PUCHAR pDA,
3693 IN unsigned int NextMpduSize,
3694 IN UCHAR TxRate,
3695 IN UCHAR RTSRate,
3696 IN USHORT AckDuration,
3697 IN UCHAR QueIdx,
3698 IN UCHAR FrameGap);
3701 NDIS_STATUS RTMPApplyPacketFilter(
3702 IN PRTMP_ADAPTER pAd,
3703 IN PRT28XX_RXD_STRUC pRxD,
3704 IN PHEADER_802_11 pHeader);
3706 PQUEUE_HEADER RTMPCheckTxSwQueue(
3707 IN PRTMP_ADAPTER pAd,
3708 OUT UCHAR *QueIdx);
3710 VOID RTMPReportMicError(
3711 IN PRTMP_ADAPTER pAd,
3712 IN PCIPHER_KEY pWpaKey);
3714 VOID WpaMicFailureReportFrame(
3715 IN PRTMP_ADAPTER pAd,
3716 IN MLME_QUEUE_ELEM *Elem);
3718 VOID WpaDisassocApAndBlockAssoc(
3719 IN PVOID SystemSpecific1,
3720 IN PVOID FunctionContext,
3721 IN PVOID SystemSpecific2,
3722 IN PVOID SystemSpecific3);
3724 NDIS_STATUS RTMPCloneNdisPacket(
3725 IN PRTMP_ADAPTER pAd,
3726 IN BOOLEAN pInsAMSDUHdr,
3727 IN PNDIS_PACKET pInPacket,
3728 OUT PNDIS_PACKET *ppOutPacket);
3730 NDIS_STATUS RTMPAllocateNdisPacket(
3731 IN PRTMP_ADAPTER pAd,
3732 IN PNDIS_PACKET *pPacket,
3733 IN PUCHAR pHeader,
3734 IN UINT HeaderLen,
3735 IN PUCHAR pData,
3736 IN UINT DataLen);
3738 VOID RTMPFreeNdisPacket(
3739 IN PRTMP_ADAPTER pAd,
3740 IN PNDIS_PACKET pPacket);
3742 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3743 IN PRTMP_ADAPTER pAd,
3744 IN UCHAR QueIdx);
3746 BOOLEAN RTMPCheckDHCPFrame(
3747 IN PRTMP_ADAPTER pAd,
3748 IN PNDIS_PACKET pPacket);
3751 BOOLEAN RTMPCheckEtherType(
3752 IN PRTMP_ADAPTER pAd,
3753 IN PNDIS_PACKET pPacket);
3756 VOID RTMPCckBbpTuning(
3757 IN PRTMP_ADAPTER pAd,
3758 IN UINT TxRate);
3761 // Private routines in rtmp_wep.c
3763 VOID RTMPInitWepEngine(
3764 IN PRTMP_ADAPTER pAd,
3765 IN PUCHAR pKey,
3766 IN UCHAR KeyId,
3767 IN UCHAR KeyLen,
3768 IN PUCHAR pDest);
3770 VOID RTMPEncryptData(
3771 IN PRTMP_ADAPTER pAd,
3772 IN PUCHAR pSrc,
3773 IN PUCHAR pDest,
3774 IN UINT Len);
3776 BOOLEAN RTMPDecryptData(
3777 IN PRTMP_ADAPTER pAdapter,
3778 IN PUCHAR pSrc,
3779 IN UINT Len,
3780 IN UINT idx);
3782 BOOLEAN RTMPSoftDecryptWEP(
3783 IN PRTMP_ADAPTER pAd,
3784 IN PUCHAR pData,
3785 IN ULONG DataByteCnt,
3786 IN PCIPHER_KEY pGroupKey);
3788 VOID RTMPSetICV(
3789 IN PRTMP_ADAPTER pAd,
3790 IN PUCHAR pDest);
3792 VOID ARCFOUR_INIT(
3793 IN PARCFOURCONTEXT Ctx,
3794 IN PUCHAR pKey,
3795 IN UINT KeyLen);
3797 UCHAR ARCFOUR_BYTE(
3798 IN PARCFOURCONTEXT Ctx);
3800 VOID ARCFOUR_DECRYPT(
3801 IN PARCFOURCONTEXT Ctx,
3802 IN PUCHAR pDest,
3803 IN PUCHAR pSrc,
3804 IN UINT Len);
3806 VOID ARCFOUR_ENCRYPT(
3807 IN PARCFOURCONTEXT Ctx,
3808 IN PUCHAR pDest,
3809 IN PUCHAR pSrc,
3810 IN UINT Len);
3812 VOID WPAARCFOUR_ENCRYPT(
3813 IN PARCFOURCONTEXT Ctx,
3814 IN PUCHAR pDest,
3815 IN PUCHAR pSrc,
3816 IN UINT Len);
3818 UINT RTMP_CALC_FCS32(
3819 IN UINT Fcs,
3820 IN PUCHAR Cp,
3821 IN INT Len);
3824 // MLME routines
3827 // Asic/RF/BBP related functions
3829 VOID AsicAdjustTxPower(
3830 IN PRTMP_ADAPTER pAd);
3832 VOID AsicUpdateProtect(
3833 IN PRTMP_ADAPTER pAd,
3834 IN USHORT OperaionMode,
3835 IN UCHAR SetMask,
3836 IN BOOLEAN bDisableBGProtect,
3837 IN BOOLEAN bNonGFExist);
3839 VOID AsicSwitchChannel(
3840 IN PRTMP_ADAPTER pAd,
3841 IN UCHAR Channel,
3842 IN BOOLEAN bScan);
3844 VOID AsicLockChannel(
3845 IN PRTMP_ADAPTER pAd,
3846 IN UCHAR Channel) ;
3848 VOID AsicAntennaSelect(
3849 IN PRTMP_ADAPTER pAd,
3850 IN UCHAR Channel);
3852 VOID AsicAntennaSetting(
3853 IN PRTMP_ADAPTER pAd,
3854 IN ABGBAND_STATE BandState);
3856 VOID AsicRfTuningExec(
3857 IN PVOID SystemSpecific1,
3858 IN PVOID FunctionContext,
3859 IN PVOID SystemSpecific2,
3860 IN PVOID SystemSpecific3);
3862 VOID AsicSleepThenAutoWakeup(
3863 IN PRTMP_ADAPTER pAd,
3864 IN USHORT TbttNumToNextWakeUp);
3866 VOID AsicForceSleep(
3867 IN PRTMP_ADAPTER pAd);
3869 VOID AsicForceWakeup(
3870 IN PRTMP_ADAPTER pAd,
3871 #ifdef RT2860
3872 IN UCHAR Level);
3873 #endif
3874 #ifdef RT2870
3875 IN BOOLEAN bFromTx);
3876 #endif
3878 VOID AsicSetBssid(
3879 IN PRTMP_ADAPTER pAd,
3880 IN PUCHAR pBssid);
3882 VOID AsicSetMcastWC(
3883 IN PRTMP_ADAPTER pAd);
3885 VOID AsicDelWcidTab(
3886 IN PRTMP_ADAPTER pAd,
3887 IN UCHAR Wcid);
3889 VOID AsicEnableRDG(
3890 IN PRTMP_ADAPTER pAd);
3892 VOID AsicDisableRDG(
3893 IN PRTMP_ADAPTER pAd);
3895 VOID AsicDisableSync(
3896 IN PRTMP_ADAPTER pAd);
3898 VOID AsicEnableBssSync(
3899 IN PRTMP_ADAPTER pAd);
3901 VOID AsicEnableIbssSync(
3902 IN PRTMP_ADAPTER pAd);
3904 VOID AsicSetEdcaParm(
3905 IN PRTMP_ADAPTER pAd,
3906 IN PEDCA_PARM pEdcaParm);
3908 VOID AsicSetSlotTime(
3909 IN PRTMP_ADAPTER pAd,
3910 IN BOOLEAN bUseShortSlotTime);
3912 VOID AsicAddSharedKeyEntry(
3913 IN PRTMP_ADAPTER pAd,
3914 IN UCHAR BssIndex,
3915 IN UCHAR KeyIdx,
3916 IN UCHAR CipherAlg,
3917 IN PUCHAR pKey,
3918 IN PUCHAR pTxMic,
3919 IN PUCHAR pRxMic);
3921 VOID AsicRemoveSharedKeyEntry(
3922 IN PRTMP_ADAPTER pAd,
3923 IN UCHAR BssIndex,
3924 IN UCHAR KeyIdx);
3926 VOID AsicUpdateWCIDAttribute(
3927 IN PRTMP_ADAPTER pAd,
3928 IN USHORT WCID,
3929 IN UCHAR BssIndex,
3930 IN UCHAR CipherAlg,
3931 IN BOOLEAN bUsePairewiseKeyTable);
3933 VOID AsicUpdateWCIDIVEIV(
3934 IN PRTMP_ADAPTER pAd,
3935 IN USHORT WCID,
3936 IN ULONG uIV,
3937 IN ULONG uEIV);
3939 VOID AsicUpdateRxWCIDTable(
3940 IN PRTMP_ADAPTER pAd,
3941 IN USHORT WCID,
3942 IN PUCHAR pAddr);
3944 VOID AsicAddKeyEntry(
3945 IN PRTMP_ADAPTER pAd,
3946 IN USHORT WCID,
3947 IN UCHAR BssIndex,
3948 IN UCHAR KeyIdx,
3949 IN PCIPHER_KEY pCipherKey,
3950 IN BOOLEAN bUsePairewiseKeyTable,
3951 IN BOOLEAN bTxKey);
3953 VOID AsicAddPairwiseKeyEntry(
3954 IN PRTMP_ADAPTER pAd,
3955 IN PUCHAR pAddr,
3956 IN UCHAR WCID,
3957 IN CIPHER_KEY *pCipherKey);
3959 VOID AsicRemovePairwiseKeyEntry(
3960 IN PRTMP_ADAPTER pAd,
3961 IN UCHAR BssIdx,
3962 IN UCHAR Wcid);
3964 BOOLEAN AsicSendCommandToMcu(
3965 IN PRTMP_ADAPTER pAd,
3966 IN UCHAR Command,
3967 IN UCHAR Token,
3968 IN UCHAR Arg0,
3969 IN UCHAR Arg1);
3970 #ifdef RT2860
3971 BOOLEAN AsicCheckCommanOk(
3972 IN PRTMP_ADAPTER pAd,
3973 IN UCHAR Command);
3974 #endif
3975 VOID MacAddrRandomBssid(
3976 IN PRTMP_ADAPTER pAd,
3977 OUT PUCHAR pAddr);
3979 VOID MgtMacHeaderInit(
3980 IN PRTMP_ADAPTER pAd,
3981 IN OUT PHEADER_802_11 pHdr80211,
3982 IN UCHAR SubType,
3983 IN UCHAR ToDs,
3984 IN PUCHAR pDA,
3985 IN PUCHAR pBssid);
3987 VOID MlmeRadioOff(
3988 IN PRTMP_ADAPTER pAd);
3990 VOID MlmeRadioOn(
3991 IN PRTMP_ADAPTER pAd);
3994 VOID BssTableInit(
3995 IN BSS_TABLE *Tab);
3997 VOID BATableInit(
3998 IN PRTMP_ADAPTER pAd,
3999 IN BA_TABLE *Tab);
4001 ULONG BssTableSearch(
4002 IN BSS_TABLE *Tab,
4003 IN PUCHAR pBssid,
4004 IN UCHAR Channel);
4006 ULONG BssSsidTableSearch(
4007 IN BSS_TABLE *Tab,
4008 IN PUCHAR pBssid,
4009 IN PUCHAR pSsid,
4010 IN UCHAR SsidLen,
4011 IN UCHAR Channel);
4013 ULONG BssTableSearchWithSSID(
4014 IN BSS_TABLE *Tab,
4015 IN PUCHAR Bssid,
4016 IN PUCHAR pSsid,
4017 IN UCHAR SsidLen,
4018 IN UCHAR Channel);
4020 VOID BssTableDeleteEntry(
4021 IN OUT PBSS_TABLE pTab,
4022 IN PUCHAR pBssid,
4023 IN UCHAR Channel);
4025 VOID BATableDeleteORIEntry(
4026 IN OUT PRTMP_ADAPTER pAd,
4027 IN BA_ORI_ENTRY *pBAORIEntry);
4029 VOID BATableDeleteRECEntry(
4030 IN OUT PRTMP_ADAPTER pAd,
4031 IN BA_REC_ENTRY *pBARECEntry);
4033 VOID BATableTearORIEntry(
4034 IN OUT PRTMP_ADAPTER pAd,
4035 IN UCHAR TID,
4036 IN UCHAR Wcid,
4037 IN BOOLEAN bForceDelete,
4038 IN BOOLEAN ALL);
4040 VOID BATableTearRECEntry(
4041 IN OUT PRTMP_ADAPTER pAd,
4042 IN UCHAR TID,
4043 IN UCHAR WCID,
4044 IN BOOLEAN ALL);
4046 VOID BssEntrySet(
4047 IN PRTMP_ADAPTER pAd,
4048 OUT PBSS_ENTRY pBss,
4049 IN PUCHAR pBssid,
4050 IN CHAR Ssid[],
4051 IN UCHAR SsidLen,
4052 IN UCHAR BssType,
4053 IN USHORT BeaconPeriod,
4054 IN PCF_PARM CfParm,
4055 IN USHORT AtimWin,
4056 IN USHORT CapabilityInfo,
4057 IN UCHAR SupRate[],
4058 IN UCHAR SupRateLen,
4059 IN UCHAR ExtRate[],
4060 IN UCHAR ExtRateLen,
4061 IN HT_CAPABILITY_IE *pHtCapability,
4062 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4063 IN UCHAR HtCapabilityLen,
4064 IN UCHAR AddHtInfoLen,
4065 IN UCHAR NewExtChanOffset,
4066 IN UCHAR Channel,
4067 IN CHAR Rssi,
4068 IN LARGE_INTEGER TimeStamp,
4069 IN UCHAR CkipFlag,
4070 IN PEDCA_PARM pEdcaParm,
4071 IN PQOS_CAPABILITY_PARM pQosCapability,
4072 IN PQBSS_LOAD_PARM pQbssLoad,
4073 IN USHORT LengthVIE,
4074 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4076 ULONG BssTableSetEntry(
4077 IN PRTMP_ADAPTER pAd,
4078 OUT PBSS_TABLE pTab,
4079 IN PUCHAR pBssid,
4080 IN CHAR Ssid[],
4081 IN UCHAR SsidLen,
4082 IN UCHAR BssType,
4083 IN USHORT BeaconPeriod,
4084 IN CF_PARM *CfParm,
4085 IN USHORT AtimWin,
4086 IN USHORT CapabilityInfo,
4087 IN UCHAR SupRate[],
4088 IN UCHAR SupRateLen,
4089 IN UCHAR ExtRate[],
4090 IN UCHAR ExtRateLen,
4091 IN HT_CAPABILITY_IE *pHtCapability,
4092 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4093 IN UCHAR HtCapabilityLen,
4094 IN UCHAR AddHtInfoLen,
4095 IN UCHAR NewExtChanOffset,
4096 IN UCHAR Channel,
4097 IN CHAR Rssi,
4098 IN LARGE_INTEGER TimeStamp,
4099 IN UCHAR CkipFlag,
4100 IN PEDCA_PARM pEdcaParm,
4101 IN PQOS_CAPABILITY_PARM pQosCapability,
4102 IN PQBSS_LOAD_PARM pQbssLoad,
4103 IN USHORT LengthVIE,
4104 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4106 VOID BATableInsertEntry(
4107 IN PRTMP_ADAPTER pAd,
4108 IN USHORT Aid,
4109 IN USHORT TimeOutValue,
4110 IN USHORT StartingSeq,
4111 IN UCHAR TID,
4112 IN UCHAR BAWinSize,
4113 IN UCHAR OriginatorStatus,
4114 IN BOOLEAN IsRecipient);
4116 VOID BssTableSsidSort(
4117 IN PRTMP_ADAPTER pAd,
4118 OUT BSS_TABLE *OutTab,
4119 IN CHAR Ssid[],
4120 IN UCHAR SsidLen);
4122 VOID BssTableSortByRssi(
4123 IN OUT BSS_TABLE *OutTab);
4125 VOID BssCipherParse(
4126 IN OUT PBSS_ENTRY pBss);
4128 NDIS_STATUS MlmeQueueInit(
4129 IN MLME_QUEUE *Queue);
4131 VOID MlmeQueueDestroy(
4132 IN MLME_QUEUE *Queue);
4134 BOOLEAN MlmeEnqueue(
4135 IN PRTMP_ADAPTER pAd,
4136 IN ULONG Machine,
4137 IN ULONG MsgType,
4138 IN ULONG MsgLen,
4139 IN VOID *Msg);
4141 BOOLEAN MlmeEnqueueForRecv(
4142 IN PRTMP_ADAPTER pAd,
4143 IN ULONG Wcid,
4144 IN ULONG TimeStampHigh,
4145 IN ULONG TimeStampLow,
4146 IN UCHAR Rssi0,
4147 IN UCHAR Rssi1,
4148 IN UCHAR Rssi2,
4149 IN ULONG MsgLen,
4150 IN PVOID Msg,
4151 IN UCHAR Signal);
4154 BOOLEAN MlmeDequeue(
4155 IN MLME_QUEUE *Queue,
4156 OUT MLME_QUEUE_ELEM **Elem);
4158 VOID MlmeRestartStateMachine(
4159 IN PRTMP_ADAPTER pAd);
4161 BOOLEAN MlmeQueueEmpty(
4162 IN MLME_QUEUE *Queue);
4164 BOOLEAN MlmeQueueFull(
4165 IN MLME_QUEUE *Queue);
4167 BOOLEAN MsgTypeSubst(
4168 IN PRTMP_ADAPTER pAd,
4169 IN PFRAME_802_11 pFrame,
4170 OUT INT *Machine,
4171 OUT INT *MsgType);
4173 VOID StateMachineInit(
4174 IN STATE_MACHINE *Sm,
4175 IN STATE_MACHINE_FUNC Trans[],
4176 IN ULONG StNr,
4177 IN ULONG MsgNr,
4178 IN STATE_MACHINE_FUNC DefFunc,
4179 IN ULONG InitState,
4180 IN ULONG Base);
4182 VOID StateMachineSetAction(
4183 IN STATE_MACHINE *S,
4184 IN ULONG St,
4185 ULONG Msg,
4186 IN STATE_MACHINE_FUNC F);
4188 VOID StateMachinePerformAction(
4189 IN PRTMP_ADAPTER pAd,
4190 IN STATE_MACHINE *S,
4191 IN MLME_QUEUE_ELEM *Elem);
4193 VOID Drop(
4194 IN PRTMP_ADAPTER pAd,
4195 IN MLME_QUEUE_ELEM *Elem);
4197 VOID AssocStateMachineInit(
4198 IN PRTMP_ADAPTER pAd,
4199 IN STATE_MACHINE *Sm,
4200 OUT STATE_MACHINE_FUNC Trans[]);
4202 VOID ReassocTimeout(
4203 IN PVOID SystemSpecific1,
4204 IN PVOID FunctionContext,
4205 IN PVOID SystemSpecific2,
4206 IN PVOID SystemSpecific3);
4208 VOID AssocTimeout(
4209 IN PVOID SystemSpecific1,
4210 IN PVOID FunctionContext,
4211 IN PVOID SystemSpecific2,
4212 IN PVOID SystemSpecific3);
4214 VOID DisassocTimeout(
4215 IN PVOID SystemSpecific1,
4216 IN PVOID FunctionContext,
4217 IN PVOID SystemSpecific2,
4218 IN PVOID SystemSpecific3);
4220 //----------------------------------------------
4221 VOID MlmeDisassocReqAction(
4222 IN PRTMP_ADAPTER pAd,
4223 IN MLME_QUEUE_ELEM *Elem);
4225 VOID MlmeAssocReqAction(
4226 IN PRTMP_ADAPTER pAd,
4227 IN MLME_QUEUE_ELEM *Elem);
4229 VOID MlmeReassocReqAction(
4230 IN PRTMP_ADAPTER pAd,
4231 IN MLME_QUEUE_ELEM *Elem);
4233 VOID MlmeDisassocReqAction(
4234 IN PRTMP_ADAPTER pAd,
4235 IN MLME_QUEUE_ELEM *Elem);
4237 VOID PeerAssocRspAction(
4238 IN PRTMP_ADAPTER pAd,
4239 IN MLME_QUEUE_ELEM *Elem);
4241 VOID PeerReassocRspAction(
4242 IN PRTMP_ADAPTER pAd,
4243 IN MLME_QUEUE_ELEM *Elem);
4245 VOID PeerDisassocAction(
4246 IN PRTMP_ADAPTER pAd,
4247 IN MLME_QUEUE_ELEM *Elem);
4249 VOID DisassocTimeoutAction(
4250 IN PRTMP_ADAPTER pAd,
4251 IN MLME_QUEUE_ELEM *Elem);
4253 VOID AssocTimeoutAction(
4254 IN PRTMP_ADAPTER pAd,
4255 IN MLME_QUEUE_ELEM *Elem);
4257 VOID ReassocTimeoutAction(
4258 IN PRTMP_ADAPTER pAd,
4259 IN MLME_QUEUE_ELEM *Elem);
4261 VOID Cls3errAction(
4262 IN PRTMP_ADAPTER pAd,
4263 IN PUCHAR pAddr);
4265 VOID SwitchBetweenWepAndCkip(
4266 IN PRTMP_ADAPTER pAd);
4268 VOID InvalidStateWhenAssoc(
4269 IN PRTMP_ADAPTER pAd,
4270 IN MLME_QUEUE_ELEM *Elem);
4272 VOID InvalidStateWhenReassoc(
4273 IN PRTMP_ADAPTER pAd,
4274 IN MLME_QUEUE_ELEM *Elem);
4276 VOID InvalidStateWhenDisassociate(
4277 IN PRTMP_ADAPTER pAd,
4278 IN MLME_QUEUE_ELEM *Elem);
4280 #ifdef RT2870
4281 VOID MlmeCntlConfirm(
4282 IN PRTMP_ADAPTER pAd,
4283 IN ULONG MsgType,
4284 IN USHORT Msg);
4285 #endif // RT2870 //
4287 VOID ComposePsPoll(
4288 IN PRTMP_ADAPTER pAd);
4290 VOID ComposeNullFrame(
4291 IN PRTMP_ADAPTER pAd);
4293 VOID AssocPostProc(
4294 IN PRTMP_ADAPTER pAd,
4295 IN PUCHAR pAddr2,
4296 IN USHORT CapabilityInfo,
4297 IN USHORT Aid,
4298 IN UCHAR SupRate[],
4299 IN UCHAR SupRateLen,
4300 IN UCHAR ExtRate[],
4301 IN UCHAR ExtRateLen,
4302 IN PEDCA_PARM pEdcaParm,
4303 IN HT_CAPABILITY_IE *pHtCapability,
4304 IN UCHAR HtCapabilityLen,
4305 IN ADD_HT_INFO_IE *pAddHtInfo);
4307 VOID AuthStateMachineInit(
4308 IN PRTMP_ADAPTER pAd,
4309 IN PSTATE_MACHINE sm,
4310 OUT STATE_MACHINE_FUNC Trans[]);
4312 VOID AuthTimeout(
4313 IN PVOID SystemSpecific1,
4314 IN PVOID FunctionContext,
4315 IN PVOID SystemSpecific2,
4316 IN PVOID SystemSpecific3);
4318 VOID MlmeAuthReqAction(
4319 IN PRTMP_ADAPTER pAd,
4320 IN MLME_QUEUE_ELEM *Elem);
4322 VOID PeerAuthRspAtSeq2Action(
4323 IN PRTMP_ADAPTER pAd,
4324 IN MLME_QUEUE_ELEM *Elem);
4326 VOID PeerAuthRspAtSeq4Action(
4327 IN PRTMP_ADAPTER pAd,
4328 IN MLME_QUEUE_ELEM *Elem);
4330 VOID AuthTimeoutAction(
4331 IN PRTMP_ADAPTER pAd,
4332 IN MLME_QUEUE_ELEM *Elem);
4334 VOID Cls2errAction(
4335 IN PRTMP_ADAPTER pAd,
4336 IN PUCHAR pAddr);
4338 VOID MlmeDeauthReqAction(
4339 IN PRTMP_ADAPTER pAd,
4340 IN MLME_QUEUE_ELEM *Elem);
4342 VOID InvalidStateWhenAuth(
4343 IN PRTMP_ADAPTER pAd,
4344 IN MLME_QUEUE_ELEM *Elem);
4346 //=============================================
4348 VOID AuthRspStateMachineInit(
4349 IN PRTMP_ADAPTER pAd,
4350 IN PSTATE_MACHINE Sm,
4351 IN STATE_MACHINE_FUNC Trans[]);
4353 VOID PeerDeauthAction(
4354 IN PRTMP_ADAPTER pAd,
4355 IN MLME_QUEUE_ELEM *Elem);
4357 VOID PeerAuthSimpleRspGenAndSend(
4358 IN PRTMP_ADAPTER pAd,
4359 IN PHEADER_802_11 pHdr80211,
4360 IN USHORT Alg,
4361 IN USHORT Seq,
4362 IN USHORT Reason,
4363 IN USHORT Status);
4366 // Private routines in dls.c
4369 //========================================
4371 VOID SyncStateMachineInit(
4372 IN PRTMP_ADAPTER pAd,
4373 IN STATE_MACHINE *Sm,
4374 OUT STATE_MACHINE_FUNC Trans[]);
4376 VOID BeaconTimeout(
4377 IN PVOID SystemSpecific1,
4378 IN PVOID FunctionContext,
4379 IN PVOID SystemSpecific2,
4380 IN PVOID SystemSpecific3);
4382 VOID ScanTimeout(
4383 IN PVOID SystemSpecific1,
4384 IN PVOID FunctionContext,
4385 IN PVOID SystemSpecific2,
4386 IN PVOID SystemSpecific3);
4388 VOID MlmeScanReqAction(
4389 IN PRTMP_ADAPTER pAd,
4390 IN MLME_QUEUE_ELEM *Elem);
4392 VOID InvalidStateWhenScan(
4393 IN PRTMP_ADAPTER pAd,
4394 IN MLME_QUEUE_ELEM *Elem);
4396 VOID InvalidStateWhenJoin(
4397 IN PRTMP_ADAPTER pAd,
4398 IN MLME_QUEUE_ELEM *Elem);
4400 VOID InvalidStateWhenStart(
4401 IN PRTMP_ADAPTER pAd,
4402 IN MLME_QUEUE_ELEM *Elem);
4404 VOID PeerBeacon(
4405 IN PRTMP_ADAPTER pAd,
4406 IN MLME_QUEUE_ELEM *Elem);
4408 VOID EnqueueProbeRequest(
4409 IN PRTMP_ADAPTER pAd);
4411 BOOLEAN ScanRunning(
4412 IN PRTMP_ADAPTER pAd);
4413 //=========================================
4415 VOID MlmeCntlInit(
4416 IN PRTMP_ADAPTER pAd,
4417 IN STATE_MACHINE *S,
4418 OUT STATE_MACHINE_FUNC Trans[]);
4420 VOID MlmeCntlMachinePerformAction(
4421 IN PRTMP_ADAPTER pAd,
4422 IN STATE_MACHINE *S,
4423 IN MLME_QUEUE_ELEM *Elem);
4425 VOID CntlIdleProc(
4426 IN PRTMP_ADAPTER pAd,
4427 IN MLME_QUEUE_ELEM *Elem);
4429 VOID CntlOidScanProc(
4430 IN PRTMP_ADAPTER pAd,
4431 IN MLME_QUEUE_ELEM *Elem);
4433 VOID CntlOidSsidProc(
4434 IN PRTMP_ADAPTER pAd,
4435 IN MLME_QUEUE_ELEM * Elem);
4437 VOID CntlOidRTBssidProc(
4438 IN PRTMP_ADAPTER pAd,
4439 IN MLME_QUEUE_ELEM * Elem);
4441 VOID CntlMlmeRoamingProc(
4442 IN PRTMP_ADAPTER pAd,
4443 IN MLME_QUEUE_ELEM * Elem);
4445 VOID CntlWaitDisassocProc(
4446 IN PRTMP_ADAPTER pAd,
4447 IN MLME_QUEUE_ELEM *Elem);
4449 VOID CntlWaitJoinProc(
4450 IN PRTMP_ADAPTER pAd,
4451 IN MLME_QUEUE_ELEM *Elem);
4453 VOID CntlWaitReassocProc(
4454 IN PRTMP_ADAPTER pAd,
4455 IN MLME_QUEUE_ELEM *Elem);
4457 VOID CntlWaitStartProc(
4458 IN PRTMP_ADAPTER pAd,
4459 IN MLME_QUEUE_ELEM *Elem);
4461 VOID CntlWaitAuthProc(
4462 IN PRTMP_ADAPTER pAd,
4463 IN MLME_QUEUE_ELEM *Elem);
4465 VOID CntlWaitAuthProc2(
4466 IN PRTMP_ADAPTER pAd,
4467 IN MLME_QUEUE_ELEM *Elem);
4469 VOID CntlWaitAssocProc(
4470 IN PRTMP_ADAPTER pAd,
4471 IN MLME_QUEUE_ELEM *Elem);
4473 VOID LinkUp(
4474 IN PRTMP_ADAPTER pAd,
4475 IN UCHAR BssType);
4477 VOID LinkDown(
4478 IN PRTMP_ADAPTER pAd,
4479 IN BOOLEAN IsReqFromAP);
4481 VOID IterateOnBssTab(
4482 IN PRTMP_ADAPTER pAd);
4484 VOID IterateOnBssTab2(
4485 IN PRTMP_ADAPTER pAd);;
4487 VOID JoinParmFill(
4488 IN PRTMP_ADAPTER pAd,
4489 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4490 IN ULONG BssIdx);
4492 VOID AssocParmFill(
4493 IN PRTMP_ADAPTER pAd,
4494 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4495 IN PUCHAR pAddr,
4496 IN USHORT CapabilityInfo,
4497 IN ULONG Timeout,
4498 IN USHORT ListenIntv);
4500 VOID ScanParmFill(
4501 IN PRTMP_ADAPTER pAd,
4502 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4503 IN CHAR Ssid[],
4504 IN UCHAR SsidLen,
4505 IN UCHAR BssType,
4506 IN UCHAR ScanType);
4508 VOID DisassocParmFill(
4509 IN PRTMP_ADAPTER pAd,
4510 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4511 IN PUCHAR pAddr,
4512 IN USHORT Reason);
4514 VOID StartParmFill(
4515 IN PRTMP_ADAPTER pAd,
4516 IN OUT MLME_START_REQ_STRUCT *StartReq,
4517 IN CHAR Ssid[],
4518 IN UCHAR SsidLen);
4520 VOID AuthParmFill(
4521 IN PRTMP_ADAPTER pAd,
4522 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4523 IN PUCHAR pAddr,
4524 IN USHORT Alg);
4526 VOID EnqueuePsPoll(
4527 IN PRTMP_ADAPTER pAd);
4529 VOID EnqueueBeaconFrame(
4530 IN PRTMP_ADAPTER pAd);
4532 VOID MlmeJoinReqAction(
4533 IN PRTMP_ADAPTER pAd,
4534 IN MLME_QUEUE_ELEM *Elem);
4536 VOID MlmeScanReqAction(
4537 IN PRTMP_ADAPTER pAd,
4538 IN MLME_QUEUE_ELEM *Elem);
4540 VOID MlmeStartReqAction(
4541 IN PRTMP_ADAPTER pAd,
4542 IN MLME_QUEUE_ELEM *Elem);
4544 VOID ScanTimeoutAction(
4545 IN PRTMP_ADAPTER pAd,
4546 IN MLME_QUEUE_ELEM *Elem);
4548 VOID BeaconTimeoutAtJoinAction(
4549 IN PRTMP_ADAPTER pAd,
4550 IN MLME_QUEUE_ELEM *Elem);
4552 VOID PeerBeaconAtScanAction(
4553 IN PRTMP_ADAPTER pAd,
4554 IN MLME_QUEUE_ELEM *Elem);
4556 VOID PeerBeaconAtJoinAction(
4557 IN PRTMP_ADAPTER pAd,
4558 IN MLME_QUEUE_ELEM *Elem);
4560 VOID PeerBeacon(
4561 IN PRTMP_ADAPTER pAd,
4562 IN MLME_QUEUE_ELEM *Elem);
4564 VOID PeerProbeReqAction(
4565 IN PRTMP_ADAPTER pAd,
4566 IN MLME_QUEUE_ELEM *Elem);
4568 VOID ScanNextChannel(
4569 IN PRTMP_ADAPTER pAd);
4571 ULONG MakeIbssBeacon(
4572 IN PRTMP_ADAPTER pAd);
4574 VOID CCXAdjacentAPReport(
4575 IN PRTMP_ADAPTER pAd);
4577 BOOLEAN MlmeScanReqSanity(
4578 IN PRTMP_ADAPTER pAd,
4579 IN VOID *Msg,
4580 IN ULONG MsgLen,
4581 OUT UCHAR *BssType,
4582 OUT CHAR ssid[],
4583 OUT UCHAR *SsidLen,
4584 OUT UCHAR *ScanType);
4586 BOOLEAN PeerBeaconAndProbeRspSanity(
4587 IN PRTMP_ADAPTER pAd,
4588 IN VOID *Msg,
4589 IN ULONG MsgLen,
4590 IN UCHAR MsgChannel,
4591 OUT PUCHAR pAddr2,
4592 OUT PUCHAR pBssid,
4593 OUT CHAR Ssid[],
4594 OUT UCHAR *pSsidLen,
4595 OUT UCHAR *pBssType,
4596 OUT USHORT *pBeaconPeriod,
4597 OUT UCHAR *pChannel,
4598 OUT UCHAR *pNewChannel,
4599 OUT LARGE_INTEGER *pTimestamp,
4600 OUT CF_PARM *pCfParm,
4601 OUT USHORT *pAtimWin,
4602 OUT USHORT *pCapabilityInfo,
4603 OUT UCHAR *pErp,
4604 OUT UCHAR *pDtimCount,
4605 OUT UCHAR *pDtimPeriod,
4606 OUT UCHAR *pBcastFlag,
4607 OUT UCHAR *pMessageToMe,
4608 OUT UCHAR SupRate[],
4609 OUT UCHAR *pSupRateLen,
4610 OUT UCHAR ExtRate[],
4611 OUT UCHAR *pExtRateLen,
4612 OUT UCHAR *pCkipFlag,
4613 OUT UCHAR *pAironetCellPowerLimit,
4614 OUT PEDCA_PARM pEdcaParm,
4615 OUT PQBSS_LOAD_PARM pQbssLoad,
4616 OUT PQOS_CAPABILITY_PARM pQosCapability,
4617 OUT ULONG *pRalinkIe,
4618 OUT UCHAR *pHtCapabilityLen,
4619 OUT UCHAR *pPreNHtCapabilityLen,
4620 OUT HT_CAPABILITY_IE *pHtCapability,
4621 OUT UCHAR *AddHtInfoLen,
4622 OUT ADD_HT_INFO_IE *AddHtInfo,
4623 OUT UCHAR *NewExtChannel,
4624 OUT USHORT *LengthVIE,
4625 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4627 BOOLEAN PeerAddBAReqActionSanity(
4628 IN PRTMP_ADAPTER pAd,
4629 IN VOID *pMsg,
4630 IN ULONG MsgLen,
4631 OUT PUCHAR pAddr2);
4633 BOOLEAN PeerAddBARspActionSanity(
4634 IN PRTMP_ADAPTER pAd,
4635 IN VOID *pMsg,
4636 IN ULONG MsgLen);
4638 BOOLEAN PeerDelBAActionSanity(
4639 IN PRTMP_ADAPTER pAd,
4640 IN UCHAR Wcid,
4641 IN VOID *pMsg,
4642 IN ULONG MsgLen);
4644 BOOLEAN MlmeAssocReqSanity(
4645 IN PRTMP_ADAPTER pAd,
4646 IN VOID *Msg,
4647 IN ULONG MsgLen,
4648 OUT PUCHAR pApAddr,
4649 OUT USHORT *CapabilityInfo,
4650 OUT ULONG *Timeout,
4651 OUT USHORT *ListenIntv);
4653 BOOLEAN MlmeAuthReqSanity(
4654 IN PRTMP_ADAPTER pAd,
4655 IN VOID *Msg,
4656 IN ULONG MsgLen,
4657 OUT PUCHAR pAddr,
4658 OUT ULONG *Timeout,
4659 OUT USHORT *Alg);
4661 BOOLEAN MlmeStartReqSanity(
4662 IN PRTMP_ADAPTER pAd,
4663 IN VOID *Msg,
4664 IN ULONG MsgLen,
4665 OUT CHAR Ssid[],
4666 OUT UCHAR *Ssidlen);
4668 BOOLEAN PeerAuthSanity(
4669 IN PRTMP_ADAPTER pAd,
4670 IN VOID *Msg,
4671 IN ULONG MsgLen,
4672 OUT PUCHAR pAddr,
4673 OUT USHORT *Alg,
4674 OUT USHORT *Seq,
4675 OUT USHORT *Status,
4676 OUT CHAR ChlgText[]);
4678 BOOLEAN PeerAssocRspSanity(
4679 IN PRTMP_ADAPTER pAd,
4680 IN VOID *pMsg,
4681 IN ULONG MsgLen,
4682 OUT PUCHAR pAddr2,
4683 OUT USHORT *pCapabilityInfo,
4684 OUT USHORT *pStatus,
4685 OUT USHORT *pAid,
4686 OUT UCHAR SupRate[],
4687 OUT UCHAR *pSupRateLen,
4688 OUT UCHAR ExtRate[],
4689 OUT UCHAR *pExtRateLen,
4690 OUT HT_CAPABILITY_IE *pHtCapability,
4691 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4692 OUT UCHAR *pHtCapabilityLen,
4693 OUT UCHAR *pAddHtInfoLen,
4694 OUT UCHAR *pNewExtChannelOffset,
4695 OUT PEDCA_PARM pEdcaParm,
4696 OUT UCHAR *pCkipFlag);
4698 BOOLEAN PeerDisassocSanity(
4699 IN PRTMP_ADAPTER pAd,
4700 IN VOID *Msg,
4701 IN ULONG MsgLen,
4702 OUT PUCHAR pAddr2,
4703 OUT USHORT *Reason);
4705 BOOLEAN PeerWpaMessageSanity(
4706 IN PRTMP_ADAPTER pAd,
4707 IN PEAPOL_PACKET pMsg,
4708 IN ULONG MsgLen,
4709 IN UCHAR MsgType,
4710 IN MAC_TABLE_ENTRY *pEntry);
4712 BOOLEAN PeerDeauthSanity(
4713 IN PRTMP_ADAPTER pAd,
4714 IN VOID *Msg,
4715 IN ULONG MsgLen,
4716 OUT PUCHAR pAddr2,
4717 OUT USHORT *Reason);
4719 BOOLEAN PeerProbeReqSanity(
4720 IN PRTMP_ADAPTER pAd,
4721 IN VOID *Msg,
4722 IN ULONG MsgLen,
4723 OUT PUCHAR pAddr2,
4724 OUT CHAR Ssid[],
4725 OUT UCHAR *pSsidLen);
4727 BOOLEAN GetTimBit(
4728 IN CHAR *Ptr,
4729 IN USHORT Aid,
4730 OUT UCHAR *TimLen,
4731 OUT UCHAR *BcastFlag,
4732 OUT UCHAR *DtimCount,
4733 OUT UCHAR *DtimPeriod,
4734 OUT UCHAR *MessageToMe);
4736 UCHAR ChannelSanity(
4737 IN PRTMP_ADAPTER pAd,
4738 IN UCHAR channel);
4740 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4741 IN PBSS_ENTRY pBss);
4743 BOOLEAN MlmeDelBAReqSanity(
4744 IN PRTMP_ADAPTER pAd,
4745 IN VOID *Msg,
4746 IN ULONG MsgLen);
4748 BOOLEAN MlmeAddBAReqSanity(
4749 IN PRTMP_ADAPTER pAd,
4750 IN VOID *Msg,
4751 IN ULONG MsgLen,
4752 OUT PUCHAR pAddr2);
4754 ULONG MakeOutgoingFrame(
4755 OUT CHAR *Buffer,
4756 OUT ULONG *Length, ...);
4758 VOID LfsrInit(
4759 IN PRTMP_ADAPTER pAd,
4760 IN ULONG Seed);
4762 UCHAR RandomByte(
4763 IN PRTMP_ADAPTER pAd);
4765 VOID AsicUpdateAutoFallBackTable(
4766 IN PRTMP_ADAPTER pAd,
4767 IN PUCHAR pTxRate);
4769 VOID MlmePeriodicExec(
4770 IN PVOID SystemSpecific1,
4771 IN PVOID FunctionContext,
4772 IN PVOID SystemSpecific2,
4773 IN PVOID SystemSpecific3);
4775 VOID LinkDownExec(
4776 IN PVOID SystemSpecific1,
4777 IN PVOID FunctionContext,
4778 IN PVOID SystemSpecific2,
4779 IN PVOID SystemSpecific3);
4781 VOID LinkUpExec(
4782 IN PVOID SystemSpecific1,
4783 IN PVOID FunctionContext,
4784 IN PVOID SystemSpecific2,
4785 IN PVOID SystemSpecific3);
4787 VOID STAMlmePeriodicExec(
4788 PRTMP_ADAPTER pAd);
4790 VOID MlmeAutoScan(
4791 IN PRTMP_ADAPTER pAd);
4793 VOID MlmeAutoReconnectLastSSID(
4794 IN PRTMP_ADAPTER pAd);
4796 BOOLEAN MlmeValidateSSID(
4797 IN PUCHAR pSsid,
4798 IN UCHAR SsidLen);
4800 VOID MlmeCheckForRoaming(
4801 IN PRTMP_ADAPTER pAd,
4802 IN ULONG Now32);
4804 VOID MlmeCheckForFastRoaming(
4805 IN PRTMP_ADAPTER pAd,
4806 IN ULONG Now);
4808 VOID MlmeDynamicTxRateSwitching(
4809 IN PRTMP_ADAPTER pAd);
4811 VOID MlmeSetTxRate(
4812 IN PRTMP_ADAPTER pAd,
4813 IN PMAC_TABLE_ENTRY pEntry,
4814 IN PRTMP_TX_RATE_SWITCH pTxRate);
4816 VOID MlmeSelectTxRateTable(
4817 IN PRTMP_ADAPTER pAd,
4818 IN PMAC_TABLE_ENTRY pEntry,
4819 IN PUCHAR *ppTable,
4820 IN PUCHAR pTableSize,
4821 IN PUCHAR pInitTxRateIdx);
4823 VOID MlmeCalculateChannelQuality(
4824 IN PRTMP_ADAPTER pAd,
4825 IN ULONG Now);
4827 VOID MlmeCheckPsmChange(
4828 IN PRTMP_ADAPTER pAd,
4829 IN ULONG Now32);
4831 VOID MlmeSetPsmBit(
4832 IN PRTMP_ADAPTER pAd,
4833 IN USHORT psm);
4835 VOID MlmeSetTxPreamble(
4836 IN PRTMP_ADAPTER pAd,
4837 IN USHORT TxPreamble);
4839 VOID UpdateBasicRateBitmap(
4840 IN PRTMP_ADAPTER pAd);
4842 VOID MlmeUpdateTxRates(
4843 IN PRTMP_ADAPTER pAd,
4844 IN BOOLEAN bLinkUp,
4845 IN UCHAR apidx);
4847 VOID MlmeUpdateHtTxRates(
4848 IN PRTMP_ADAPTER pAd,
4849 IN UCHAR apidx);
4851 VOID RTMPCheckRates(
4852 IN PRTMP_ADAPTER pAd,
4853 IN OUT UCHAR SupRate[],
4854 IN OUT UCHAR *SupRateLen);
4856 BOOLEAN RTMPCheckChannel(
4857 IN PRTMP_ADAPTER pAd,
4858 IN UCHAR CentralChannel,
4859 IN UCHAR Channel);
4861 BOOLEAN RTMPCheckHt(
4862 IN PRTMP_ADAPTER pAd,
4863 IN UCHAR Wcid,
4864 IN OUT HT_CAPABILITY_IE *pHtCapability,
4865 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
4867 VOID StaQuickResponeForRateUpExec(
4868 IN PVOID SystemSpecific1,
4869 IN PVOID FunctionContext,
4870 IN PVOID SystemSpecific2,
4871 IN PVOID SystemSpecific3);
4873 VOID AsicBbpTuning1(
4874 IN PRTMP_ADAPTER pAd);
4876 VOID AsicBbpTuning2(
4877 IN PRTMP_ADAPTER pAd);
4879 VOID RTMPUpdateMlmeRate(
4880 IN PRTMP_ADAPTER pAd);
4882 CHAR RTMPMaxRssi(
4883 IN PRTMP_ADAPTER pAd,
4884 IN CHAR Rssi0,
4885 IN CHAR Rssi1,
4886 IN CHAR Rssi2);
4888 #ifdef RT30xx
4889 VOID AsicSetRxAnt(
4890 IN PRTMP_ADAPTER pAd,
4891 IN UCHAR Ant);
4892 #endif
4894 VOID AsicEvaluateRxAnt(
4895 IN PRTMP_ADAPTER pAd);
4897 VOID AsicRxAntEvalTimeout(
4898 IN PVOID SystemSpecific1,
4899 IN PVOID FunctionContext,
4900 IN PVOID SystemSpecific2,
4901 IN PVOID SystemSpecific3);
4903 VOID APSDPeriodicExec(
4904 IN PVOID SystemSpecific1,
4905 IN PVOID FunctionContext,
4906 IN PVOID SystemSpecific2,
4907 IN PVOID SystemSpecific3);
4909 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4910 IN PRTMP_ADAPTER pAd,
4911 IN PMAC_TABLE_ENTRY pEntry);
4913 UCHAR RTMPStaFixedTxMode(
4914 IN PRTMP_ADAPTER pAd,
4915 IN PMAC_TABLE_ENTRY pEntry);
4917 VOID RTMPUpdateLegacyTxSetting(
4918 UCHAR fixed_tx_mode,
4919 PMAC_TABLE_ENTRY pEntry);
4921 BOOLEAN RTMPAutoRateSwitchCheck(
4922 IN PRTMP_ADAPTER pAd);
4924 NDIS_STATUS MlmeInit(
4925 IN PRTMP_ADAPTER pAd);
4927 VOID MlmeHandler(
4928 IN PRTMP_ADAPTER pAd);
4930 VOID MlmeHalt(
4931 IN PRTMP_ADAPTER pAd);
4933 VOID MlmeResetRalinkCounters(
4934 IN PRTMP_ADAPTER pAd);
4936 VOID BuildChannelList(
4937 IN PRTMP_ADAPTER pAd);
4939 UCHAR FirstChannel(
4940 IN PRTMP_ADAPTER pAd);
4942 UCHAR NextChannel(
4943 IN PRTMP_ADAPTER pAd,
4944 IN UCHAR channel);
4946 VOID ChangeToCellPowerLimit(
4947 IN PRTMP_ADAPTER pAd,
4948 IN UCHAR AironetCellPowerLimit);
4950 VOID RaiseClock(
4951 IN PRTMP_ADAPTER pAd,
4952 IN UINT32 *x);
4954 VOID LowerClock(
4955 IN PRTMP_ADAPTER pAd,
4956 IN UINT32 *x);
4958 USHORT ShiftInBits(
4959 IN PRTMP_ADAPTER pAd);
4961 VOID ShiftOutBits(
4962 IN PRTMP_ADAPTER pAd,
4963 IN USHORT data,
4964 IN USHORT count);
4966 VOID EEpromCleanup(
4967 IN PRTMP_ADAPTER pAd);
4969 VOID EWDS(
4970 IN PRTMP_ADAPTER pAd);
4972 VOID EWEN(
4973 IN PRTMP_ADAPTER pAd);
4975 USHORT RTMP_EEPROM_READ16(
4976 IN PRTMP_ADAPTER pAd,
4977 IN USHORT Offset);
4979 VOID RTMP_EEPROM_WRITE16(
4980 IN PRTMP_ADAPTER pAd,
4981 IN USHORT Offset,
4982 IN USHORT Data);
4985 // Prototypes of function definition in rtmp_tkip.c
4987 VOID RTMPInitTkipEngine(
4988 IN PRTMP_ADAPTER pAd,
4989 IN PUCHAR pTKey,
4990 IN UCHAR KeyId,
4991 IN PUCHAR pTA,
4992 IN PUCHAR pMICKey,
4993 IN PUCHAR pTSC,
4994 OUT PULONG pIV16,
4995 OUT PULONG pIV32);
4997 VOID RTMPInitMICEngine(
4998 IN PRTMP_ADAPTER pAd,
4999 IN PUCHAR pKey,
5000 IN PUCHAR pDA,
5001 IN PUCHAR pSA,
5002 IN UCHAR UserPriority,
5003 IN PUCHAR pMICKey);
5005 BOOLEAN RTMPTkipCompareMICValue(
5006 IN PRTMP_ADAPTER pAd,
5007 IN PUCHAR pSrc,
5008 IN PUCHAR pDA,
5009 IN PUCHAR pSA,
5010 IN PUCHAR pMICKey,
5011 IN UCHAR UserPriority,
5012 IN UINT Len);
5014 VOID RTMPCalculateMICValue(
5015 IN PRTMP_ADAPTER pAd,
5016 IN PNDIS_PACKET pPacket,
5017 IN PUCHAR pEncap,
5018 IN PCIPHER_KEY pKey,
5019 IN UCHAR apidx);
5021 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5022 IN PRTMP_ADAPTER pAd,
5023 IN PUCHAR pLLC,
5024 IN PUCHAR pSrc,
5025 IN PUCHAR pDA,
5026 IN PUCHAR pSA,
5027 IN PUCHAR pMICKey,
5028 IN UINT Len);
5030 VOID RTMPTkipAppendByte(
5031 IN PTKIP_KEY_INFO pTkip,
5032 IN UCHAR uChar);
5034 VOID RTMPTkipAppend(
5035 IN PTKIP_KEY_INFO pTkip,
5036 IN PUCHAR pSrc,
5037 IN UINT nBytes);
5039 VOID RTMPTkipGetMIC(
5040 IN PTKIP_KEY_INFO pTkip);
5042 BOOLEAN RTMPSoftDecryptTKIP(
5043 IN PRTMP_ADAPTER pAd,
5044 IN PUCHAR pData,
5045 IN ULONG DataByteCnt,
5046 IN UCHAR UserPriority,
5047 IN PCIPHER_KEY pWpaKey);
5049 BOOLEAN RTMPSoftDecryptAES(
5050 IN PRTMP_ADAPTER pAd,
5051 IN PUCHAR pData,
5052 IN ULONG DataByteCnt,
5053 IN PCIPHER_KEY pWpaKey);
5056 // Prototypes of function definition in cmm_info.c
5058 NDIS_STATUS RTMPWPARemoveKeyProc(
5059 IN PRTMP_ADAPTER pAd,
5060 IN PVOID pBuf);
5062 VOID RTMPWPARemoveAllKeys(
5063 IN PRTMP_ADAPTER pAd);
5065 BOOLEAN RTMPCheckStrPrintAble(
5066 IN CHAR *pInPutStr,
5067 IN UCHAR strLen);
5069 VOID RTMPSetPhyMode(
5070 IN PRTMP_ADAPTER pAd,
5071 IN ULONG phymode);
5073 VOID RTMPUpdateHTIE(
5074 IN RT_HT_CAPABILITY *pRtHt,
5075 IN UCHAR *pMcsSet,
5076 OUT HT_CAPABILITY_IE *pHtCapability,
5077 OUT ADD_HT_INFO_IE *pAddHtInfo);
5079 VOID RTMPAddWcidAttributeEntry(
5080 IN PRTMP_ADAPTER pAd,
5081 IN UCHAR BssIdx,
5082 IN UCHAR KeyIdx,
5083 IN UCHAR CipherAlg,
5084 IN MAC_TABLE_ENTRY *pEntry);
5086 CHAR *GetEncryptType(
5087 CHAR enc);
5089 CHAR *GetAuthMode(
5090 CHAR auth);
5092 VOID RTMPIoctlGetSiteSurvey(
5093 IN PRTMP_ADAPTER pAdapter,
5094 IN struct iwreq *wrq);
5096 VOID RTMPIoctlGetMacTable(
5097 IN PRTMP_ADAPTER pAd,
5098 IN struct iwreq *wrq);
5100 VOID RTMPIndicateWPA2Status(
5101 IN PRTMP_ADAPTER pAdapter);
5103 VOID RTMPOPModeSwitching(
5104 IN PRTMP_ADAPTER pAd);
5106 VOID RTMPAddBSSIDCipher(
5107 IN PRTMP_ADAPTER pAd,
5108 IN UCHAR Aid,
5109 IN PNDIS_802_11_KEY pKey,
5110 IN UCHAR CipherAlg);
5112 VOID RTMPSetHT(
5113 IN PRTMP_ADAPTER pAd,
5114 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5116 VOID RTMPSetIndividualHT(
5117 IN PRTMP_ADAPTER pAd,
5118 IN UCHAR apidx);
5120 VOID RTMPSendWirelessEvent(
5121 IN PRTMP_ADAPTER pAd,
5122 IN USHORT Event_flag,
5123 IN PUCHAR pAddr,
5124 IN UCHAR BssIdx,
5125 IN CHAR Rssi);
5127 VOID NICUpdateCntlCounters(
5128 IN PRTMP_ADAPTER pAd,
5129 IN PHEADER_802_11 pHeader,
5130 IN UCHAR SubType,
5131 IN PRXWI_STRUC pRxWI);
5133 // prototype in wpa.c
5135 BOOLEAN WpaMsgTypeSubst(
5136 IN UCHAR EAPType,
5137 OUT INT *MsgType);
5139 VOID WpaPskStateMachineInit(
5140 IN PRTMP_ADAPTER pAd,
5141 IN STATE_MACHINE *S,
5142 OUT STATE_MACHINE_FUNC Trans[]);
5144 VOID WpaEAPOLKeyAction(
5145 IN PRTMP_ADAPTER pAd,
5146 IN MLME_QUEUE_ELEM *Elem);
5148 VOID WpaPairMsg1Action(
5149 IN PRTMP_ADAPTER pAd,
5150 IN MLME_QUEUE_ELEM *Elem);
5152 VOID WpaPairMsg3Action(
5153 IN PRTMP_ADAPTER pAd,
5154 IN MLME_QUEUE_ELEM *Elem);
5156 VOID WpaGroupMsg1Action(
5157 IN PRTMP_ADAPTER pAd,
5158 IN MLME_QUEUE_ELEM *Elem);
5160 VOID WpaMacHeaderInit(
5161 IN PRTMP_ADAPTER pAd,
5162 IN OUT PHEADER_802_11 pHdr80211,
5163 IN UCHAR wep,
5164 IN PUCHAR pAddr1);
5166 VOID Wpa2PairMsg1Action(
5167 IN PRTMP_ADAPTER pAd,
5168 IN MLME_QUEUE_ELEM *Elem);
5170 VOID Wpa2PairMsg3Action(
5171 IN PRTMP_ADAPTER pAd,
5172 IN MLME_QUEUE_ELEM *Elem);
5174 BOOLEAN ParseKeyData(
5175 IN PRTMP_ADAPTER pAd,
5176 IN PUCHAR pKeyData,
5177 IN UCHAR KeyDataLen,
5178 IN UCHAR bPairewise);
5180 VOID RTMPToWirelessSta(
5181 IN PRTMP_ADAPTER pAd,
5182 IN PUCHAR pHeader802_3,
5183 IN UINT HdrLen,
5184 IN PUCHAR pData,
5185 IN UINT DataLen,
5186 IN BOOLEAN is4wayFrame);
5188 VOID HMAC_SHA1(
5189 IN UCHAR *text,
5190 IN UINT text_len,
5191 IN UCHAR *key,
5192 IN UINT key_len,
5193 IN UCHAR *digest);
5195 VOID PRF(
5196 IN UCHAR *key,
5197 IN INT key_len,
5198 IN UCHAR *prefix,
5199 IN INT prefix_len,
5200 IN UCHAR *data,
5201 IN INT data_len,
5202 OUT UCHAR *output,
5203 IN INT len);
5205 VOID CCKMPRF(
5206 IN UCHAR *key,
5207 IN INT key_len,
5208 IN UCHAR *data,
5209 IN INT data_len,
5210 OUT UCHAR *output,
5211 IN INT len);
5213 VOID WpaCountPTK(
5214 IN PRTMP_ADAPTER pAd,
5215 IN UCHAR *PMK,
5216 IN UCHAR *ANonce,
5217 IN UCHAR *AA,
5218 IN UCHAR *SNonce,
5219 IN UCHAR *SA,
5220 OUT UCHAR *output,
5221 IN UINT len);
5223 VOID GenRandom(
5224 IN PRTMP_ADAPTER pAd,
5225 IN UCHAR *macAddr,
5226 OUT UCHAR *random);
5229 // prototype in aironet.c
5231 VOID AironetStateMachineInit(
5232 IN PRTMP_ADAPTER pAd,
5233 IN STATE_MACHINE *S,
5234 OUT STATE_MACHINE_FUNC Trans[]);
5236 VOID AironetMsgAction(
5237 IN PRTMP_ADAPTER pAd,
5238 IN MLME_QUEUE_ELEM *Elem);
5240 VOID AironetRequestAction(
5241 IN PRTMP_ADAPTER pAd,
5242 IN MLME_QUEUE_ELEM *Elem);
5244 VOID ChannelLoadRequestAction(
5245 IN PRTMP_ADAPTER pAd,
5246 IN UCHAR Index);
5248 VOID NoiseHistRequestAction(
5249 IN PRTMP_ADAPTER pAd,
5250 IN UCHAR Index);
5252 VOID BeaconRequestAction(
5253 IN PRTMP_ADAPTER pAd,
5254 IN UCHAR Index);
5256 VOID AironetReportAction(
5257 IN PRTMP_ADAPTER pAd,
5258 IN MLME_QUEUE_ELEM *Elem);
5260 VOID ChannelLoadReportAction(
5261 IN PRTMP_ADAPTER pAd,
5262 IN UCHAR Index);
5264 VOID NoiseHistReportAction(
5265 IN PRTMP_ADAPTER pAd,
5266 IN UCHAR Index);
5268 VOID AironetFinalReportAction(
5269 IN PRTMP_ADAPTER pAd);
5271 VOID BeaconReportAction(
5272 IN PRTMP_ADAPTER pAd,
5273 IN UCHAR Index);
5275 VOID AironetAddBeaconReport(
5276 IN PRTMP_ADAPTER pAd,
5277 IN ULONG Index,
5278 IN PMLME_QUEUE_ELEM pElem);
5280 VOID AironetCreateBeaconReportFromBssTable(
5281 IN PRTMP_ADAPTER pAd);
5283 VOID DBGPRINT_TX_RING(
5284 IN PRTMP_ADAPTER pAd,
5285 IN UCHAR QueIdx);
5287 VOID DBGPRINT_RX_RING(
5288 IN PRTMP_ADAPTER pAd);
5290 CHAR ConvertToRssi(
5291 IN PRTMP_ADAPTER pAd,
5292 IN CHAR Rssi,
5293 IN UCHAR RssiNumber);
5295 VOID APAsicEvaluateRxAnt(
5296 IN PRTMP_ADAPTER pAd);
5299 VOID APAsicRxAntEvalTimeout(
5300 IN PRTMP_ADAPTER pAd);
5303 // function prototype in cmm_wpa.c
5305 BOOLEAN RTMPCheckWPAframe(
5306 IN PRTMP_ADAPTER pAd,
5307 IN PMAC_TABLE_ENTRY pEntry,
5308 IN PUCHAR pData,
5309 IN ULONG DataByteCount,
5310 IN UCHAR FromWhichBSSID);
5312 VOID AES_GTK_KEY_UNWRAP(
5313 IN UCHAR *key,
5314 OUT UCHAR *plaintext,
5315 IN UCHAR c_len,
5316 IN UCHAR *ciphertext);
5318 BOOLEAN RTMPCheckRSNIE(
5319 IN PRTMP_ADAPTER pAd,
5320 IN PUCHAR pData,
5321 IN UCHAR DataLen,
5322 IN MAC_TABLE_ENTRY *pEntry,
5323 OUT UCHAR *Offset);
5325 BOOLEAN RTMPParseEapolKeyData(
5326 IN PRTMP_ADAPTER pAd,
5327 IN PUCHAR pKeyData,
5328 IN UCHAR KeyDataLen,
5329 IN UCHAR GroupKeyIndex,
5330 IN UCHAR MsgType,
5331 IN BOOLEAN bWPA2,
5332 IN MAC_TABLE_ENTRY *pEntry);
5334 VOID ConstructEapolMsg(
5335 IN PRTMP_ADAPTER pAd,
5336 IN UCHAR PeerAuthMode,
5337 IN UCHAR PeerWepStatus,
5338 IN UCHAR MyGroupKeyWepStatus,
5339 IN UCHAR MsgType,
5340 IN UCHAR DefaultKeyIdx,
5341 IN UCHAR *ReplayCounter,
5342 IN UCHAR *KeyNonce,
5343 IN UCHAR *TxRSC,
5344 IN UCHAR *PTK,
5345 IN UCHAR *GTK,
5346 IN UCHAR *RSNIE,
5347 IN UCHAR RSNIE_Len,
5348 OUT PEAPOL_PACKET pMsg);
5350 VOID CalculateMIC(
5351 IN PRTMP_ADAPTER pAd,
5352 IN UCHAR PeerWepStatus,
5353 IN UCHAR *PTK,
5354 OUT PEAPOL_PACKET pMsg);
5356 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5357 IN PRTMP_ADAPTER pAd,
5358 IN RX_BLK *pRxBlk,
5359 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5360 IN PCIPHER_KEY pShard_key);
5362 VOID ConstructEapolKeyData(
5363 IN PRTMP_ADAPTER pAd,
5364 IN UCHAR PeerAuthMode,
5365 IN UCHAR PeerWepStatus,
5366 IN UCHAR GroupKeyWepStatus,
5367 IN UCHAR MsgType,
5368 IN UCHAR DefaultKeyIdx,
5369 IN BOOLEAN bWPA2Capable,
5370 IN UCHAR *PTK,
5371 IN UCHAR *GTK,
5372 IN UCHAR *RSNIE,
5373 IN UCHAR RSNIE_LEN,
5374 OUT PEAPOL_PACKET pMsg);
5376 VOID RTMPMakeRSNIE(
5377 IN PRTMP_ADAPTER pAd,
5378 IN UINT AuthMode,
5379 IN UINT WepStatus,
5380 IN UCHAR apidx);
5383 // function prototype in ap_wpa.c
5386 BOOLEAN APWpaMsgTypeSubst(
5387 IN UCHAR EAPType,
5388 OUT INT *MsgType) ;
5390 MAC_TABLE_ENTRY *PACInquiry(
5391 IN PRTMP_ADAPTER pAd,
5392 IN ULONG Wcid);
5394 BOOLEAN RTMPCheckMcast(
5395 IN PRTMP_ADAPTER pAd,
5396 IN PEID_STRUCT eid_ptr,
5397 IN MAC_TABLE_ENTRY *pEntry);
5399 BOOLEAN RTMPCheckUcast(
5400 IN PRTMP_ADAPTER pAd,
5401 IN PEID_STRUCT eid_ptr,
5402 IN MAC_TABLE_ENTRY *pEntry);
5404 BOOLEAN RTMPCheckAUTH(
5405 IN PRTMP_ADAPTER pAd,
5406 IN PEID_STRUCT eid_ptr,
5407 IN MAC_TABLE_ENTRY *pEntry);
5409 VOID WPAStart4WayHS(
5410 IN PRTMP_ADAPTER pAd,
5411 IN MAC_TABLE_ENTRY *pEntry,
5412 IN ULONG TimeInterval);
5414 VOID WPAStart2WayGroupHS(
5415 IN PRTMP_ADAPTER pAd,
5416 IN MAC_TABLE_ENTRY *pEntry);
5418 VOID APWpaEAPPacketAction(
5419 IN PRTMP_ADAPTER pAd,
5420 IN MLME_QUEUE_ELEM *Elem);
5422 VOID APWpaEAPOLStartAction(
5423 IN PRTMP_ADAPTER pAd,
5424 IN MLME_QUEUE_ELEM *Elem);
5426 VOID APWpaEAPOLLogoffAction(
5427 IN PRTMP_ADAPTER pAd,
5428 IN MLME_QUEUE_ELEM *Elem);
5430 VOID APWpaEAPOLKeyAction(
5431 IN PRTMP_ADAPTER pAd,
5432 IN MLME_QUEUE_ELEM *Elem);
5434 VOID APWpaEAPOLASFAlertAction(
5435 IN PRTMP_ADAPTER pAd,
5436 IN MLME_QUEUE_ELEM *Elem);
5438 VOID HandleCounterMeasure(
5439 IN PRTMP_ADAPTER pAd,
5440 IN MAC_TABLE_ENTRY *pEntry);
5442 VOID PeerPairMsg2Action(
5443 IN PRTMP_ADAPTER pAd,
5444 IN MAC_TABLE_ENTRY *pEntry,
5445 IN MLME_QUEUE_ELEM *Elem);
5447 VOID PeerPairMsg4Action(
5448 IN PRTMP_ADAPTER pAd,
5449 IN MAC_TABLE_ENTRY *pEntry,
5450 IN MLME_QUEUE_ELEM *Elem);
5452 VOID CMTimerExec(
5453 IN PVOID SystemSpecific1,
5454 IN PVOID FunctionContext,
5455 IN PVOID SystemSpecific2,
5456 IN PVOID SystemSpecific3);
5458 VOID WPARetryExec(
5459 IN PVOID SystemSpecific1,
5460 IN PVOID FunctionContext,
5461 IN PVOID SystemSpecific2,
5462 IN PVOID SystemSpecific3);
5464 VOID EnqueueStartForPSKExec(
5465 IN PVOID SystemSpecific1,
5466 IN PVOID FunctionContext,
5467 IN PVOID SystemSpecific2,
5468 IN PVOID SystemSpecific3);
5470 VOID RTMPHandleSTAKey(
5471 IN PRTMP_ADAPTER pAdapter,
5472 IN MAC_TABLE_ENTRY *pEntry,
5473 IN MLME_QUEUE_ELEM *Elem);
5475 VOID PeerGroupMsg2Action(
5476 IN PRTMP_ADAPTER pAd,
5477 IN PMAC_TABLE_ENTRY pEntry,
5478 IN VOID *Msg,
5479 IN UINT MsgLen);
5481 VOID PairDisAssocAction(
5482 IN PRTMP_ADAPTER pAd,
5483 IN PMAC_TABLE_ENTRY pEntry,
5484 IN USHORT Reason);
5486 VOID MlmeDeAuthAction(
5487 IN PRTMP_ADAPTER pAd,
5488 IN PMAC_TABLE_ENTRY pEntry,
5489 IN USHORT Reason);
5491 VOID GREKEYPeriodicExec(
5492 IN PVOID SystemSpecific1,
5493 IN PVOID FunctionContext,
5494 IN PVOID SystemSpecific2,
5495 IN PVOID SystemSpecific3);
5497 VOID CountGTK(
5498 IN UCHAR *PMK,
5499 IN UCHAR *GNonce,
5500 IN UCHAR *AA,
5501 OUT UCHAR *output,
5502 IN UINT len);
5504 VOID GetSmall(
5505 IN PVOID pSrc1,
5506 IN PVOID pSrc2,
5507 OUT PUCHAR out,
5508 IN ULONG Length);
5510 VOID GetLarge(
5511 IN PVOID pSrc1,
5512 IN PVOID pSrc2,
5513 OUT PUCHAR out,
5514 IN ULONG Length);
5516 VOID APGenRandom(
5517 IN PRTMP_ADAPTER pAd,
5518 OUT UCHAR *random);
5520 VOID AES_GTK_KEY_WRAP(
5521 IN UCHAR *key,
5522 IN UCHAR *plaintext,
5523 IN UCHAR p_len,
5524 OUT UCHAR *ciphertext);
5526 VOID WpaSend(
5527 IN PRTMP_ADAPTER pAdapter,
5528 IN PUCHAR pPacket,
5529 IN ULONG Len);
5531 VOID APToWirelessSta(
5532 IN PRTMP_ADAPTER pAd,
5533 IN MAC_TABLE_ENTRY *pEntry,
5534 IN PUCHAR pHeader802_3,
5535 IN UINT HdrLen,
5536 IN PUCHAR pData,
5537 IN UINT DataLen,
5538 IN BOOLEAN bClearFrame);
5540 VOID RTMPAddPMKIDCache(
5541 IN PRTMP_ADAPTER pAd,
5542 IN INT apidx,
5543 IN PUCHAR pAddr,
5544 IN UCHAR *PMKID,
5545 IN UCHAR *PMK);
5547 INT RTMPSearchPMKIDCache(
5548 IN PRTMP_ADAPTER pAd,
5549 IN INT apidx,
5550 IN PUCHAR pAddr);
5552 VOID RTMPDeletePMKIDCache(
5553 IN PRTMP_ADAPTER pAd,
5554 IN INT apidx,
5555 IN INT idx);
5557 VOID RTMPMaintainPMKIDCache(
5558 IN PRTMP_ADAPTER pAd);
5560 VOID RTMPSendTriggerFrame(
5561 IN PRTMP_ADAPTER pAd,
5562 IN PVOID pBuffer,
5563 IN ULONG Length,
5564 IN UCHAR TxRate,
5565 IN BOOLEAN bQosNull);
5567 #ifdef RT30xx
5568 VOID RTMPFilterCalibration(
5569 IN PRTMP_ADAPTER pAd);
5570 #endif // RT30xx //
5572 /* timeout -- ms */
5573 VOID RTMP_SetPeriodicTimer(
5574 IN NDIS_MINIPORT_TIMER *pTimer,
5575 IN unsigned long timeout);
5577 VOID RTMP_OS_Init_Timer(
5578 IN PRTMP_ADAPTER pAd,
5579 IN NDIS_MINIPORT_TIMER *pTimer,
5580 IN TIMER_FUNCTION function,
5581 IN PVOID data);
5583 VOID RTMP_OS_Add_Timer(
5584 IN NDIS_MINIPORT_TIMER *pTimer,
5585 IN unsigned long timeout);
5587 VOID RTMP_OS_Mod_Timer(
5588 IN NDIS_MINIPORT_TIMER *pTimer,
5589 IN unsigned long timeout);
5592 VOID RTMP_OS_Del_Timer(
5593 IN NDIS_MINIPORT_TIMER *pTimer,
5594 OUT BOOLEAN *pCancelled);
5597 VOID RTMP_OS_Release_Packet(
5598 IN PRTMP_ADAPTER pAd,
5599 IN PQUEUE_ENTRY pEntry);
5601 VOID RTMPusecDelay(
5602 IN ULONG usec);
5604 NDIS_STATUS os_alloc_mem(
5605 IN PRTMP_ADAPTER pAd,
5606 OUT PUCHAR *mem,
5607 IN ULONG size);
5609 NDIS_STATUS os_free_mem(
5610 IN PRTMP_ADAPTER pAd,
5611 IN PUCHAR mem);
5614 void RTMP_AllocateSharedMemory(
5615 IN PRTMP_ADAPTER pAd,
5616 IN ULONG Length,
5617 IN BOOLEAN Cached,
5618 OUT PVOID *VirtualAddress,
5619 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5621 VOID RTMPFreeTxRxRingMemory(
5622 IN PRTMP_ADAPTER pAd);
5624 NDIS_STATUS AdapterBlockAllocateMemory(
5625 IN PVOID handle,
5626 OUT PVOID *ppAd);
5628 void RTMP_AllocateTxDescMemory(
5629 IN PRTMP_ADAPTER pAd,
5630 IN UINT Index,
5631 IN ULONG Length,
5632 IN BOOLEAN Cached,
5633 OUT PVOID *VirtualAddress,
5634 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5636 void RTMP_AllocateFirstTxBuffer(
5637 IN PRTMP_ADAPTER pAd,
5638 IN UINT Index,
5639 IN ULONG Length,
5640 IN BOOLEAN Cached,
5641 OUT PVOID *VirtualAddress,
5642 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5644 void RTMP_AllocateMgmtDescMemory(
5645 IN PRTMP_ADAPTER pAd,
5646 IN ULONG Length,
5647 IN BOOLEAN Cached,
5648 OUT PVOID *VirtualAddress,
5649 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5651 void RTMP_AllocateRxDescMemory(
5652 IN PRTMP_ADAPTER pAd,
5653 IN ULONG Length,
5654 IN BOOLEAN Cached,
5655 OUT PVOID *VirtualAddress,
5656 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5658 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5659 IN PRTMP_ADAPTER pAd,
5660 IN ULONG Length,
5661 IN BOOLEAN Cached,
5662 OUT PVOID *VirtualAddress,
5663 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5665 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5666 IN PRTMP_ADAPTER pAd,
5667 IN ULONG Length,
5668 IN BOOLEAN Cached,
5669 OUT PVOID *VirtualAddress);
5671 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5672 IN PRTMP_ADAPTER pAd,
5673 IN ULONG Length);
5675 void RTMP_QueryPacketInfo(
5676 IN PNDIS_PACKET pPacket,
5677 OUT PACKET_INFO *pPacketInfo,
5678 OUT PUCHAR *pSrcBufVA,
5679 OUT UINT *pSrcBufLen);
5681 void RTMP_QueryNextPacketInfo(
5682 IN PNDIS_PACKET *ppPacket,
5683 OUT PACKET_INFO *pPacketInfo,
5684 OUT PUCHAR *pSrcBufVA,
5685 OUT UINT *pSrcBufLen);
5688 BOOLEAN RTMP_FillTxBlkInfo(
5689 IN RTMP_ADAPTER *pAd,
5690 IN TX_BLK *pTxBlk);
5693 PRTMP_SCATTER_GATHER_LIST
5694 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5697 void announce_802_3_packet(
5698 IN PRTMP_ADAPTER pAd,
5699 IN PNDIS_PACKET pPacket);
5702 UINT BA_Reorder_AMSDU_Annnounce(
5703 IN PRTMP_ADAPTER pAd,
5704 IN PNDIS_PACKET pPacket);
5707 UINT Handle_AMSDU_Packet(
5708 IN PRTMP_ADAPTER pAd,
5709 IN PUCHAR pData,
5710 IN ULONG DataSize,
5711 IN UCHAR FromWhichBSSID);
5714 void convert_802_11_to_802_3_packet(
5715 IN PRTMP_ADAPTER pAd,
5716 IN PNDIS_PACKET pPacket,
5717 IN PUCHAR p8023hdr,
5718 IN PUCHAR pData,
5719 IN ULONG DataSize,
5720 IN UCHAR FromWhichBSSID);
5723 PNET_DEV get_netdev_from_bssid(
5724 IN PRTMP_ADAPTER pAd,
5725 IN UCHAR FromWhichBSSID);
5728 PNDIS_PACKET duplicate_pkt(
5729 IN PRTMP_ADAPTER pAd,
5730 IN PUCHAR pHeader802_3,
5731 IN UINT HdrLen,
5732 IN PUCHAR pData,
5733 IN ULONG DataSize,
5734 IN UCHAR FromWhichBSSID);
5737 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5738 IN PRTMP_ADAPTER pAd,
5739 IN PNDIS_PACKET pOldPkt);
5741 PNDIS_PACKET duplicate_pkt_with_VLAN(
5742 IN PRTMP_ADAPTER pAd,
5743 IN PUCHAR pHeader802_3,
5744 IN UINT HdrLen,
5745 IN PUCHAR pData,
5746 IN ULONG DataSize,
5747 IN UCHAR FromWhichBSSID);
5749 PNDIS_PACKET duplicate_pkt_with_WPI(
5750 IN PRTMP_ADAPTER pAd,
5751 IN PNDIS_PACKET pPacket,
5752 IN UINT32 ext_head_len,
5753 IN UINT32 ext_tail_len);
5755 UCHAR VLAN_8023_Header_Copy(
5756 IN PRTMP_ADAPTER pAd,
5757 IN PUCHAR pHeader802_3,
5758 IN UINT HdrLen,
5759 OUT PUCHAR pData,
5760 IN UCHAR FromWhichBSSID);
5762 void ba_flush_reordering_timeout_mpdus(
5763 IN PRTMP_ADAPTER pAd,
5764 IN PBA_REC_ENTRY pBAEntry,
5765 IN ULONG Now32);
5768 VOID BAOriSessionSetUp(
5769 IN PRTMP_ADAPTER pAd,
5770 IN MAC_TABLE_ENTRY *pEntry,
5771 IN UCHAR TID,
5772 IN USHORT TimeOut,
5773 IN ULONG DelayTime,
5774 IN BOOLEAN isForced);
5776 VOID BASessionTearDownALL(
5777 IN OUT PRTMP_ADAPTER pAd,
5778 IN UCHAR Wcid);
5780 BOOLEAN OS_Need_Clone_Packet(void);
5783 VOID build_tx_packet(
5784 IN PRTMP_ADAPTER pAd,
5785 IN PNDIS_PACKET pPacket,
5786 IN PUCHAR pFrame,
5787 IN ULONG FrameLen);
5790 VOID BAOriSessionTearDown(
5791 IN OUT PRTMP_ADAPTER pAd,
5792 IN UCHAR Wcid,
5793 IN UCHAR TID,
5794 IN BOOLEAN bPassive,
5795 IN BOOLEAN bForceSend);
5797 VOID BARecSessionTearDown(
5798 IN OUT PRTMP_ADAPTER pAd,
5799 IN UCHAR Wcid,
5800 IN UCHAR TID,
5801 IN BOOLEAN bPassive);
5803 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5804 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5806 ULONG AutoChBssInsertEntry(
5807 IN PRTMP_ADAPTER pAd,
5808 IN PUCHAR pBssid,
5809 IN CHAR Ssid[],
5810 IN UCHAR SsidLen,
5811 IN UCHAR ChannelNo,
5812 IN CHAR Rssi);
5814 void AutoChBssTableInit(
5815 IN PRTMP_ADAPTER pAd);
5817 void ChannelInfoInit(
5818 IN PRTMP_ADAPTER pAd);
5820 void AutoChBssTableDestroy(
5821 IN PRTMP_ADAPTER pAd);
5823 void ChannelInfoDestroy(
5824 IN PRTMP_ADAPTER pAd);
5826 UCHAR New_ApAutoSelectChannel(
5827 IN PRTMP_ADAPTER pAd);
5829 BOOLEAN rtstrmactohex(
5830 IN char *s1,
5831 IN char *s2);
5833 BOOLEAN rtstrcasecmp(
5834 IN char *s1,
5835 IN char *s2);
5837 char *rtstrstruncasecmp(
5838 IN char *s1,
5839 IN char *s2);
5841 char *rtstrstr(
5842 IN const char * s1,
5843 IN const char * s2);
5845 char *rstrtok(
5846 IN char * s,
5847 IN const char * ct);
5849 int rtinet_aton(
5850 const char *cp,
5851 unsigned int *addr);
5853 ////////// common ioctl functions //////////
5854 INT Set_DriverVersion_Proc(
5855 IN PRTMP_ADAPTER pAd,
5856 IN PUCHAR arg);
5858 INT Set_CountryRegion_Proc(
5859 IN PRTMP_ADAPTER pAd,
5860 IN PUCHAR arg);
5862 INT Set_CountryRegionABand_Proc(
5863 IN PRTMP_ADAPTER pAd,
5864 IN PUCHAR arg);
5866 INT Set_WirelessMode_Proc(
5867 IN PRTMP_ADAPTER pAd,
5868 IN PUCHAR arg);
5870 INT Set_Channel_Proc(
5871 IN PRTMP_ADAPTER pAd,
5872 IN PUCHAR arg);
5874 INT Set_ShortSlot_Proc(
5875 IN PRTMP_ADAPTER pAd,
5876 IN PUCHAR arg);
5878 INT Set_TxPower_Proc(
5879 IN PRTMP_ADAPTER pAd,
5880 IN PUCHAR arg);
5882 INT Set_BGProtection_Proc(
5883 IN PRTMP_ADAPTER pAd,
5884 IN PUCHAR arg);
5886 INT Set_TxPreamble_Proc(
5887 IN PRTMP_ADAPTER pAd,
5888 IN PUCHAR arg);
5890 INT Set_RTSThreshold_Proc(
5891 IN PRTMP_ADAPTER pAd,
5892 IN PUCHAR arg);
5894 INT Set_FragThreshold_Proc(
5895 IN PRTMP_ADAPTER pAd,
5896 IN PUCHAR arg);
5898 INT Set_TxBurst_Proc(
5899 IN PRTMP_ADAPTER pAd,
5900 IN PUCHAR arg);
5902 #ifdef AGGREGATION_SUPPORT
5903 INT Set_PktAggregate_Proc(
5904 IN PRTMP_ADAPTER pAd,
5905 IN PUCHAR arg);
5906 #endif
5908 INT Set_IEEE80211H_Proc(
5909 IN PRTMP_ADAPTER pAd,
5910 IN PUCHAR arg);
5912 #ifdef DBG
5913 INT Set_Debug_Proc(
5914 IN PRTMP_ADAPTER pAd,
5915 IN PUCHAR arg);
5916 #endif
5918 INT Show_DescInfo_Proc(
5919 IN PRTMP_ADAPTER pAd,
5920 IN PUCHAR arg);
5922 INT Set_ResetStatCounter_Proc(
5923 IN PRTMP_ADAPTER pAd,
5924 IN PUCHAR arg);
5926 INT Set_BASetup_Proc(
5927 IN PRTMP_ADAPTER pAd,
5928 IN PUCHAR arg);
5930 INT Set_BADecline_Proc(
5931 IN PRTMP_ADAPTER pAd,
5932 IN PUCHAR arg);
5934 INT Set_BAOriTearDown_Proc(
5935 IN PRTMP_ADAPTER pAd,
5936 IN PUCHAR arg);
5938 INT Set_BARecTearDown_Proc(
5939 IN PRTMP_ADAPTER pAd,
5940 IN PUCHAR arg);
5942 INT Set_HtBw_Proc(
5943 IN PRTMP_ADAPTER pAd,
5944 IN PUCHAR arg);
5946 INT Set_HtMcs_Proc(
5947 IN PRTMP_ADAPTER pAd,
5948 IN PUCHAR arg);
5950 INT Set_HtGi_Proc(
5951 IN PRTMP_ADAPTER pAd,
5952 IN PUCHAR arg);
5954 INT Set_HtOpMode_Proc(
5955 IN PRTMP_ADAPTER pAd,
5956 IN PUCHAR arg);
5958 INT Set_HtStbc_Proc(
5959 IN PRTMP_ADAPTER pAd,
5960 IN PUCHAR arg);
5962 INT Set_HtHtc_Proc(
5963 IN PRTMP_ADAPTER pAd,
5964 IN PUCHAR arg);
5966 INT Set_HtExtcha_Proc(
5967 IN PRTMP_ADAPTER pAd,
5968 IN PUCHAR arg);
5970 INT Set_HtMpduDensity_Proc(
5971 IN PRTMP_ADAPTER pAd,
5972 IN PUCHAR arg);
5974 INT Set_HtBaWinSize_Proc(
5975 IN PRTMP_ADAPTER pAd,
5976 IN PUCHAR arg);
5978 INT Set_HtRdg_Proc(
5979 IN PRTMP_ADAPTER pAd,
5980 IN PUCHAR arg);
5982 INT Set_HtLinkAdapt_Proc(
5983 IN PRTMP_ADAPTER pAd,
5984 IN PUCHAR arg);
5986 INT Set_HtAmsdu_Proc(
5987 IN PRTMP_ADAPTER pAd,
5988 IN PUCHAR arg);
5990 INT Set_HtAutoBa_Proc(
5991 IN PRTMP_ADAPTER pAd,
5992 IN PUCHAR arg);
5994 INT Set_HtProtect_Proc(
5995 IN PRTMP_ADAPTER pAd,
5996 IN PUCHAR arg);
5998 INT Set_HtMimoPs_Proc(
5999 IN PRTMP_ADAPTER pAd,
6000 IN PUCHAR arg);
6003 INT Set_ForceShortGI_Proc(
6004 IN PRTMP_ADAPTER pAd,
6005 IN PUCHAR arg);
6007 INT Set_ForceGF_Proc(
6008 IN PRTMP_ADAPTER pAd,
6009 IN PUCHAR arg);
6011 INT SetCommonHT(
6012 IN PRTMP_ADAPTER pAd);
6014 INT Set_SendPSMPAction_Proc(
6015 IN PRTMP_ADAPTER pAd,
6016 IN PUCHAR arg);
6018 INT Set_HtMIMOPSmode_Proc(
6019 IN PRTMP_ADAPTER pAd,
6020 IN PUCHAR arg);
6023 INT Set_HtTxBASize_Proc(
6024 IN PRTMP_ADAPTER pAd,
6025 IN PUCHAR arg);
6027 //Dls , kathy
6028 VOID RTMPSendDLSTearDownFrame(
6029 IN PRTMP_ADAPTER pAd,
6030 IN PUCHAR pDA);
6032 //Block ACK
6033 VOID QueryBATABLE(
6034 IN PRTMP_ADAPTER pAd,
6035 OUT PQUERYBA_TABLE pBAT);
6037 INT WpaCheckEapCode(
6038 IN PRTMP_ADAPTER pAd,
6039 IN PUCHAR pFrame,
6040 IN USHORT FrameLen,
6041 IN USHORT OffSet);
6043 VOID WpaSendMicFailureToWpaSupplicant(
6044 IN PRTMP_ADAPTER pAd,
6045 IN BOOLEAN bUnicast);
6047 VOID SendAssocIEsToWpaSupplicant(
6048 IN PRTMP_ADAPTER pAd);
6050 int wext_notify_event_assoc(
6051 IN RTMP_ADAPTER *pAd);
6053 VOID Handle_BSS_Width_Trigger_Events(
6054 IN PRTMP_ADAPTER pAd);
6056 void build_ext_channel_switch_ie(
6057 IN PRTMP_ADAPTER pAd,
6058 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6060 BOOLEAN APRxDoneInterruptHandle(
6061 IN PRTMP_ADAPTER pAd);
6063 BOOLEAN STARxDoneInterruptHandle(
6064 IN PRTMP_ADAPTER pAd,
6065 IN BOOLEAN argc);
6067 // AMPDU packet indication
6068 VOID Indicate_AMPDU_Packet(
6069 IN PRTMP_ADAPTER pAd,
6070 IN RX_BLK *pRxBlk,
6071 IN UCHAR FromWhichBSSID);
6073 // AMSDU packet indication
6074 VOID Indicate_AMSDU_Packet(
6075 IN PRTMP_ADAPTER pAd,
6076 IN RX_BLK *pRxBlk,
6077 IN UCHAR FromWhichBSSID);
6079 // Normal legacy Rx packet indication
6080 VOID Indicate_Legacy_Packet(
6081 IN PRTMP_ADAPTER pAd,
6082 IN RX_BLK *pRxBlk,
6083 IN UCHAR FromWhichBSSID);
6085 VOID Indicate_EAPOL_Packet(
6086 IN PRTMP_ADAPTER pAd,
6087 IN RX_BLK *pRxBlk,
6088 IN UCHAR FromWhichBSSID);
6090 void update_os_packet_info(
6091 IN PRTMP_ADAPTER pAd,
6092 IN RX_BLK *pRxBlk,
6093 IN UCHAR FromWhichBSSID);
6095 void wlan_802_11_to_802_3_packet(
6096 IN PRTMP_ADAPTER pAd,
6097 IN RX_BLK *pRxBlk,
6098 IN PUCHAR pHeader802_3,
6099 IN UCHAR FromWhichBSSID);
6101 UINT deaggregate_AMSDU_announce(
6102 IN PRTMP_ADAPTER pAd,
6103 PNDIS_PACKET pPacket,
6104 IN PUCHAR pData,
6105 IN ULONG DataSize);
6107 // remove LLC and get 802_3 Header
6108 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6110 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6112 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6114 _pDA = _pRxBlk->pHeader->Addr3; \
6115 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6117 else \
6119 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6121 _pDA = _pRxBlk->pHeader->Addr1; \
6122 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6123 _pSA = _pRxBlk->pHeader->Addr2; \
6124 else \
6125 _pSA = _pRxBlk->pHeader->Addr3; \
6127 else \
6129 _pDA = _pRxBlk->pHeader->Addr1; \
6130 _pSA = _pRxBlk->pHeader->Addr2; \
6134 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6135 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6138 BOOLEAN APFowardWirelessStaToWirelessSta(
6139 IN PRTMP_ADAPTER pAd,
6140 IN PNDIS_PACKET pPacket,
6141 IN ULONG FromWhichBSSID);
6143 VOID Announce_or_Forward_802_3_Packet(
6144 IN PRTMP_ADAPTER pAd,
6145 IN PNDIS_PACKET pPacket,
6146 IN UCHAR FromWhichBSSID);
6148 VOID Sta_Announce_or_Forward_802_3_Packet(
6149 IN PRTMP_ADAPTER pAd,
6150 IN PNDIS_PACKET pPacket,
6151 IN UCHAR FromWhichBSSID);
6153 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6154 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6155 //announce_802_3_packet(_pAd, _pPacket);
6157 PNDIS_PACKET DuplicatePacket(
6158 IN PRTMP_ADAPTER pAd,
6159 IN PNDIS_PACKET pPacket,
6160 IN UCHAR FromWhichBSSID);
6163 PNDIS_PACKET ClonePacket(
6164 IN PRTMP_ADAPTER pAd,
6165 IN PNDIS_PACKET pPacket,
6166 IN PUCHAR pData,
6167 IN ULONG DataSize);
6170 // Normal, AMPDU or AMSDU
6171 VOID CmmRxnonRalinkFrameIndicate(
6172 IN PRTMP_ADAPTER pAd,
6173 IN RX_BLK *pRxBlk,
6174 IN UCHAR FromWhichBSSID);
6176 VOID CmmRxRalinkFrameIndicate(
6177 IN PRTMP_ADAPTER pAd,
6178 IN MAC_TABLE_ENTRY *pEntry,
6179 IN RX_BLK *pRxBlk,
6180 IN UCHAR FromWhichBSSID);
6182 VOID Update_Rssi_Sample(
6183 IN PRTMP_ADAPTER pAd,
6184 IN RSSI_SAMPLE *pRssi,
6185 IN PRXWI_STRUC pRxWI);
6187 PNDIS_PACKET GetPacketFromRxRing(
6188 IN PRTMP_ADAPTER pAd,
6189 OUT PRT28XX_RXD_STRUC pSaveRxD,
6190 OUT BOOLEAN *pbReschedule,
6191 IN OUT UINT32 *pRxPending);
6193 PNDIS_PACKET RTMPDeFragmentDataFrame(
6194 IN PRTMP_ADAPTER pAd,
6195 IN RX_BLK *pRxBlk);
6197 ////////////////////////////////////////
6198 enum {
6199 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6200 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6201 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6202 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6203 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6204 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6205 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6206 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6207 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6208 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6209 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6211 enum {
6212 P80211ENUM_msgitem_status_no_value = 0x00
6214 enum {
6215 P80211ENUM_truth_false = 0x00,
6216 P80211ENUM_truth_true = 0x01
6219 /* Definition from madwifi */
6220 typedef struct {
6221 UINT32 did;
6222 UINT16 status;
6223 UINT16 len;
6224 UINT32 data;
6225 } p80211item_uint32_t;
6227 typedef struct {
6228 UINT32 msgcode;
6229 UINT32 msglen;
6230 #define WLAN_DEVNAMELEN_MAX 16
6231 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6232 p80211item_uint32_t hosttime;
6233 p80211item_uint32_t mactime;
6234 p80211item_uint32_t channel;
6235 p80211item_uint32_t rssi;
6236 p80211item_uint32_t sq;
6237 p80211item_uint32_t signal;
6238 p80211item_uint32_t noise;
6239 p80211item_uint32_t rate;
6240 p80211item_uint32_t istx;
6241 p80211item_uint32_t frmlen;
6242 } wlan_ng_prism2_header;
6244 /* The radio capture header precedes the 802.11 header. */
6245 typedef struct PACKED _ieee80211_radiotap_header {
6246 UINT8 it_version; /* Version 0. Only increases
6247 * for drastic changes,
6248 * introduction of compatible
6249 * new fields does not count.
6251 UINT8 it_pad;
6252 UINT16 it_len; /* length of the whole
6253 * header in bytes, including
6254 * it_version, it_pad,
6255 * it_len, and data fields.
6257 UINT32 it_present; /* A bitmap telling which
6258 * fields are present. Set bit 31
6259 * (0x80000000) to extend the
6260 * bitmap by another 32 bits.
6261 * Additional extensions are made
6262 * by setting bit 31.
6264 }ieee80211_radiotap_header ;
6266 enum ieee80211_radiotap_type {
6267 IEEE80211_RADIOTAP_TSFT = 0,
6268 IEEE80211_RADIOTAP_FLAGS = 1,
6269 IEEE80211_RADIOTAP_RATE = 2,
6270 IEEE80211_RADIOTAP_CHANNEL = 3,
6271 IEEE80211_RADIOTAP_FHSS = 4,
6272 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6273 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6274 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6275 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6276 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6277 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6278 IEEE80211_RADIOTAP_ANTENNA = 11,
6279 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6280 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6283 #define WLAN_RADIOTAP_PRESENT ( \
6284 (1 << IEEE80211_RADIOTAP_TSFT) | \
6285 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6286 (1 << IEEE80211_RADIOTAP_RATE) | \
6289 typedef struct _wlan_radiotap_header {
6290 ieee80211_radiotap_header wt_ihdr;
6291 INT64 wt_tsft;
6292 UINT8 wt_flags;
6293 UINT8 wt_rate;
6294 } wlan_radiotap_header;
6295 /* Definition from madwifi */
6297 void send_monitor_packets(
6298 IN PRTMP_ADAPTER pAd,
6299 IN RX_BLK *pRxBlk);
6301 // This function will be called when query /proc
6302 struct iw_statistics *rt28xx_get_wireless_stats(
6303 IN struct net_device *net_dev);
6305 VOID RTMPSetDesiredRates(
6306 IN PRTMP_ADAPTER pAdapter,
6307 IN LONG Rates);
6309 INT Set_FixedTxMode_Proc(
6310 IN PRTMP_ADAPTER pAd,
6311 IN PUCHAR arg);
6313 static inline char* GetPhyMode(
6314 int Mode)
6316 switch(Mode)
6318 case MODE_CCK:
6319 return "CCK";
6321 case MODE_OFDM:
6322 return "OFDM";
6323 case MODE_HTMIX:
6324 return "HTMIX";
6326 case MODE_HTGREENFIELD:
6327 return "GREEN";
6328 default:
6329 return "N/A";
6334 static inline char* GetBW(
6335 int BW)
6337 switch(BW)
6339 case BW_10:
6340 return "10M";
6342 case BW_20:
6343 return "20M";
6344 case BW_40:
6345 return "40M";
6346 default:
6347 return "N/A";
6352 VOID RT28xxThreadTerminate(
6353 IN RTMP_ADAPTER *pAd);
6355 BOOLEAN RT28XXChipsetCheck(
6356 IN void *_dev_p);
6358 BOOLEAN RT28XXNetDevInit(
6359 IN void *_dev_p,
6360 IN struct net_device *net_dev,
6361 IN RTMP_ADAPTER *pAd);
6363 BOOLEAN RT28XXProbePostConfig(
6364 IN void *_dev_p,
6365 IN RTMP_ADAPTER *pAd,
6366 IN INT32 argc);
6368 VOID RT28XXDMADisable(
6369 IN RTMP_ADAPTER *pAd);
6371 VOID RT28XXDMAEnable(
6372 IN RTMP_ADAPTER *pAd);
6374 VOID RT28xx_UpdateBeaconToAsic(
6375 IN RTMP_ADAPTER * pAd,
6376 IN INT apidx,
6377 IN ULONG BeaconLen,
6378 IN ULONG UpdatePos);
6380 INT rt28xx_ioctl(
6381 IN struct net_device *net_dev,
6382 IN OUT struct ifreq *rq,
6383 IN INT cmd);
6385 INT rt28xx_sta_ioctl(
6386 IN struct net_device *net_dev,
6387 IN OUT struct ifreq *rq,
6388 IN INT cmd);
6390 BOOLEAN RT28XXSecurityKeyAdd(
6391 IN PRTMP_ADAPTER pAd,
6392 IN ULONG apidx,
6393 IN ULONG KeyIdx,
6394 IN MAC_TABLE_ENTRY *pEntry);
6396 ////////////////////////////////////////
6397 PNDIS_PACKET GetPacketFromRxRing(
6398 IN PRTMP_ADAPTER pAd,
6399 OUT PRT28XX_RXD_STRUC pSaveRxD,
6400 OUT BOOLEAN *pbReschedule,
6401 IN OUT UINT32 *pRxPending);
6404 void kill_thread_task(PRTMP_ADAPTER pAd);
6406 void tbtt_tasklet(unsigned long data);
6408 #ifdef RT2860
6410 // Function Prototype in cmm_data_2860.c
6412 USHORT RtmpPCI_WriteTxResource(
6413 IN PRTMP_ADAPTER pAd,
6414 IN TX_BLK *pTxBlk,
6415 IN BOOLEAN bIsLast,
6416 OUT USHORT *FreeNumber);
6418 USHORT RtmpPCI_WriteSingleTxResource(
6419 IN PRTMP_ADAPTER pAd,
6420 IN TX_BLK *pTxBlk,
6421 IN BOOLEAN bIsLast,
6422 OUT USHORT *FreeNumber);
6424 USHORT RtmpPCI_WriteMultiTxResource(
6425 IN PRTMP_ADAPTER pAd,
6426 IN TX_BLK *pTxBlk,
6427 IN UCHAR frameNum,
6428 OUT USHORT *FreeNumber);
6430 USHORT RtmpPCI_WriteFragTxResource(
6431 IN PRTMP_ADAPTER pAd,
6432 IN TX_BLK *pTxBlk,
6433 IN UCHAR fragNum,
6434 OUT USHORT *FreeNumber);
6436 USHORT RtmpPCI_WriteSubTxResource(
6437 IN PRTMP_ADAPTER pAd,
6438 IN TX_BLK *pTxBlk,
6439 IN BOOLEAN bIsLast,
6440 OUT USHORT *FreeNumber);
6442 VOID RtmpPCI_FinalWriteTxResource(
6443 IN PRTMP_ADAPTER pAd,
6444 IN TX_BLK *pTxBlk,
6445 IN USHORT totalMPDUSize,
6446 IN USHORT FirstTxIdx);
6448 VOID RtmpPCIDataLastTxIdx(
6449 IN PRTMP_ADAPTER pAd,
6450 IN UCHAR QueIdx,
6451 IN USHORT LastTxIdx);
6453 VOID RtmpPCIDataKickOut(
6454 IN PRTMP_ADAPTER pAd,
6455 IN TX_BLK *pTxBlk,
6456 IN UCHAR QueIdx);
6459 int RtmpPCIMgmtKickOut(
6460 IN RTMP_ADAPTER *pAd,
6461 IN UCHAR QueIdx,
6462 IN PNDIS_PACKET pPacket,
6463 IN PUCHAR pSrcBufVA,
6464 IN UINT SrcBufLen);
6467 NDIS_STATUS RTMPCheckRxError(
6468 IN PRTMP_ADAPTER pAd,
6469 IN PHEADER_802_11 pHeader,
6470 IN PRXWI_STRUC pRxWI,
6471 IN PRT28XX_RXD_STRUC pRxD);
6473 VOID RTMPInitPCIeLinkCtrlValue(
6474 IN PRTMP_ADAPTER pAd);
6476 VOID RTMPFindHostPCIDev(
6477 IN PRTMP_ADAPTER pAd);
6479 VOID RTMPPCIeLinkCtrlValueRestore(
6480 IN PRTMP_ADAPTER pAd,
6481 IN UCHAR Level);
6483 VOID RTMPPCIeLinkCtrlSetting(
6484 IN PRTMP_ADAPTER pAd,
6485 IN USHORT Max);
6487 VOID RT28xxPciAsicRadioOff(
6488 IN PRTMP_ADAPTER pAd,
6489 IN UCHAR Level,
6490 IN USHORT TbttNumToNextWakeUp);
6492 BOOLEAN RT28xxPciAsicRadioOn(
6493 IN PRTMP_ADAPTER pAd,
6494 IN UCHAR Level);
6496 VOID RT28xxPciStaAsicForceWakeup(
6497 IN PRTMP_ADAPTER pAd,
6498 IN UCHAR Level);
6500 VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6501 IN PRTMP_ADAPTER pAd,
6502 IN USHORT TbttNumToNextWakeUp);
6504 VOID PsPollWakeExec(
6505 IN PVOID SystemSpecific1,
6506 IN PVOID FunctionContext,
6507 IN PVOID SystemSpecific2,
6508 IN PVOID SystemSpecific3);
6510 VOID RadioOnExec(
6511 IN PVOID SystemSpecific1,
6512 IN PVOID FunctionContext,
6513 IN PVOID SystemSpecific2,
6514 IN PVOID SystemSpecific3);
6516 VOID RT28xxPciMlmeRadioOn(
6517 IN PRTMP_ADAPTER pAd);
6519 VOID RT28xxPciMlmeRadioOFF(
6520 IN PRTMP_ADAPTER pAd);
6521 #endif /* RT2860 */
6523 VOID AsicTurnOffRFClk(
6524 IN PRTMP_ADAPTER pAd,
6525 IN UCHAR Channel);
6527 VOID AsicTurnOnRFClk(
6528 IN PRTMP_ADAPTER pAd,
6529 IN UCHAR Channel);
6531 NTSTATUS RT30xxWriteRFRegister(
6532 IN PRTMP_ADAPTER pAd,
6533 IN UCHAR RegID,
6534 IN UCHAR Value);
6536 NTSTATUS RT30xxReadRFRegister(
6537 IN PRTMP_ADAPTER pAd,
6538 IN UCHAR RegID,
6539 IN PUCHAR pValue);
6541 #ifdef RT30xx
6542 //2008/09/11:KH add to support efuse<--
6543 UCHAR eFuseReadRegisters(
6544 IN PRTMP_ADAPTER pAd,
6545 IN USHORT Offset,
6546 IN USHORT Length,
6547 OUT USHORT* pData);
6549 VOID eFuseReadPhysical(
6550 IN PRTMP_ADAPTER pAd,
6551 IN PUSHORT lpInBuffer,
6552 IN ULONG nInBufferSize,
6553 OUT PUSHORT lpOutBuffer,
6554 IN ULONG nOutBufferSize
6557 NTSTATUS eFuseRead(
6558 IN PRTMP_ADAPTER pAd,
6559 IN USHORT Offset,
6560 OUT PUCHAR pData,
6561 IN USHORT Length);
6563 VOID eFusePhysicalWriteRegisters(
6564 IN PRTMP_ADAPTER pAd,
6565 IN USHORT Offset,
6566 IN USHORT Length,
6567 OUT USHORT* pData);
6569 NTSTATUS eFuseWriteRegisters(
6570 IN PRTMP_ADAPTER pAd,
6571 IN USHORT Offset,
6572 IN USHORT Length,
6573 IN USHORT* pData);
6575 VOID eFuseWritePhysical(
6576 IN PRTMP_ADAPTER pAd,
6577 PUSHORT lpInBuffer,
6578 ULONG nInBufferSize,
6579 PUCHAR lpOutBuffer,
6580 ULONG nOutBufferSize
6583 NTSTATUS eFuseWrite(
6584 IN PRTMP_ADAPTER pAd,
6585 IN USHORT Offset,
6586 IN PUCHAR pData,
6587 IN USHORT length);
6589 INT set_eFuseGetFreeBlockCount_Proc(
6590 IN PRTMP_ADAPTER pAd,
6591 IN PUCHAR arg);
6593 INT set_eFusedump_Proc(
6594 IN PRTMP_ADAPTER pAd,
6595 IN PUCHAR arg);
6597 INT set_eFuseLoadFromBin_Proc(
6598 IN PRTMP_ADAPTER pAd,
6599 IN PUCHAR arg);
6601 NTSTATUS eFuseWriteRegistersFromBin(
6602 IN PRTMP_ADAPTER pAd,
6603 IN USHORT Offset,
6604 IN USHORT Length,
6605 IN USHORT* pData);
6607 VOID eFusePhysicalReadRegisters(
6608 IN PRTMP_ADAPTER pAd,
6609 IN USHORT Offset,
6610 IN USHORT Length,
6611 OUT USHORT* pData);
6613 NDIS_STATUS NICLoadEEPROM(
6614 IN PRTMP_ADAPTER pAd);
6616 BOOLEAN bNeedLoadEEPROM(
6617 IN PRTMP_ADAPTER pAd);
6618 //2008/09/11:KH add to support efuse-->
6619 #endif // RT30xx //
6621 #ifdef RT30xx
6622 // add by johnli, RF power sequence setup
6623 VOID RT30xxLoadRFNormalModeSetup(
6624 IN PRTMP_ADAPTER pAd);
6626 VOID RT30xxLoadRFSleepModeSetup(
6627 IN PRTMP_ADAPTER pAd);
6629 VOID RT30xxReverseRFSleepModeSetup(
6630 IN PRTMP_ADAPTER pAd);
6631 // end johnli
6632 #endif // RT30xx //
6634 #ifdef RT2870
6636 // Function Prototype in rtusb_bulk.c
6638 VOID RTUSBInitTxDesc(
6639 IN PRTMP_ADAPTER pAd,
6640 IN PTX_CONTEXT pTxContext,
6641 IN UCHAR BulkOutPipeId,
6642 IN usb_complete_t Func);
6644 VOID RTUSBInitHTTxDesc(
6645 IN PRTMP_ADAPTER pAd,
6646 IN PHT_TX_CONTEXT pTxContext,
6647 IN UCHAR BulkOutPipeId,
6648 IN ULONG BulkOutSize,
6649 IN usb_complete_t Func);
6651 VOID RTUSBInitRxDesc(
6652 IN PRTMP_ADAPTER pAd,
6653 IN PRX_CONTEXT pRxContext);
6655 VOID RTUSBCleanUpDataBulkOutQueue(
6656 IN PRTMP_ADAPTER pAd);
6658 VOID RTUSBCancelPendingBulkOutIRP(
6659 IN PRTMP_ADAPTER pAd);
6661 VOID RTUSBBulkOutDataPacket(
6662 IN PRTMP_ADAPTER pAd,
6663 IN UCHAR BulkOutPipeId,
6664 IN UCHAR Index);
6666 VOID RTUSBBulkOutNullFrame(
6667 IN PRTMP_ADAPTER pAd);
6669 VOID RTUSBBulkOutRTSFrame(
6670 IN PRTMP_ADAPTER pAd);
6672 VOID RTUSBCancelPendingBulkInIRP(
6673 IN PRTMP_ADAPTER pAd);
6675 VOID RTUSBCancelPendingIRPs(
6676 IN PRTMP_ADAPTER pAd);
6678 VOID RTUSBBulkOutMLMEPacket(
6679 IN PRTMP_ADAPTER pAd,
6680 IN UCHAR Index);
6682 VOID RTUSBBulkOutPsPoll(
6683 IN PRTMP_ADAPTER pAd);
6685 VOID RTUSBCleanUpMLMEBulkOutQueue(
6686 IN PRTMP_ADAPTER pAd);
6688 VOID RTUSBKickBulkOut(
6689 IN PRTMP_ADAPTER pAd);
6691 VOID RTUSBBulkReceive(
6692 IN PRTMP_ADAPTER pAd);
6694 VOID DoBulkIn(
6695 IN RTMP_ADAPTER *pAd);
6697 VOID RTUSBInitRxDesc(
6698 IN PRTMP_ADAPTER pAd,
6699 IN PRX_CONTEXT pRxContext);
6701 VOID RTUSBBulkRxHandle(
6702 IN unsigned long data);
6705 // Function Prototype in rtusb_io.c
6707 NTSTATUS RTUSBMultiRead(
6708 IN PRTMP_ADAPTER pAd,
6709 IN USHORT Offset,
6710 OUT PUCHAR pData,
6711 IN USHORT length);
6713 NTSTATUS RTUSBMultiWrite(
6714 IN PRTMP_ADAPTER pAd,
6715 IN USHORT Offset,
6716 IN PUCHAR pData,
6717 IN USHORT length);
6719 NTSTATUS RTUSBMultiWrite_OneByte(
6720 IN PRTMP_ADAPTER pAd,
6721 IN USHORT Offset,
6722 IN PUCHAR pData);
6724 NTSTATUS RTUSBReadBBPRegister(
6725 IN PRTMP_ADAPTER pAd,
6726 IN UCHAR Id,
6727 IN PUCHAR pValue);
6729 NTSTATUS RTUSBWriteBBPRegister(
6730 IN PRTMP_ADAPTER pAd,
6731 IN UCHAR Id,
6732 IN UCHAR Value);
6734 NTSTATUS RTUSBWriteRFRegister(
6735 IN PRTMP_ADAPTER pAd,
6736 IN UINT32 Value);
6738 NTSTATUS RTUSB_VendorRequest(
6739 IN PRTMP_ADAPTER pAd,
6740 IN UINT32 TransferFlags,
6741 IN UCHAR ReservedBits,
6742 IN UCHAR Request,
6743 IN USHORT Value,
6744 IN USHORT Index,
6745 IN PVOID TransferBuffer,
6746 IN UINT32 TransferBufferLength);
6748 NTSTATUS RTUSBReadEEPROM(
6749 IN PRTMP_ADAPTER pAd,
6750 IN USHORT Offset,
6751 OUT PUCHAR pData,
6752 IN USHORT length);
6754 NTSTATUS RTUSBWriteEEPROM(
6755 IN PRTMP_ADAPTER pAd,
6756 IN USHORT Offset,
6757 IN PUCHAR pData,
6758 IN USHORT length);
6760 VOID RTUSBPutToSleep(
6761 IN PRTMP_ADAPTER pAd);
6763 NTSTATUS RTUSBWakeUp(
6764 IN PRTMP_ADAPTER pAd);
6766 VOID RTUSBInitializeCmdQ(
6767 IN PCmdQ cmdq);
6769 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6770 IN PRTMP_ADAPTER pAd,
6771 IN NDIS_OID Oid,
6772 IN BOOLEAN SetInformation,
6773 IN PVOID pInformationBuffer,
6774 IN UINT32 InformationBufferLength);
6776 NDIS_STATUS RTUSBEnqueueInternalCmd(
6777 IN PRTMP_ADAPTER pAd,
6778 IN NDIS_OID Oid,
6779 IN PVOID pInformationBuffer,
6780 IN UINT32 InformationBufferLength);
6782 VOID RTUSBDequeueCmd(
6783 IN PCmdQ cmdq,
6784 OUT PCmdQElmt *pcmdqelmt);
6786 INT RTUSBCmdThread(
6787 IN OUT PVOID Context);
6789 INT TimerQThread(
6790 IN OUT PVOID Context);
6792 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6793 IN RTMP_ADAPTER *pAd,
6794 IN RALINK_TIMER_STRUCT *pTimer);
6796 BOOLEAN RT2870_TimerQ_Remove(
6797 IN RTMP_ADAPTER *pAd,
6798 IN RALINK_TIMER_STRUCT *pTimer);
6800 void RT2870_TimerQ_Exit(
6801 IN RTMP_ADAPTER *pAd);
6803 void RT2870_TimerQ_Init(
6804 IN RTMP_ADAPTER *pAd);
6806 VOID RT2870_BssBeaconExit(
6807 IN RTMP_ADAPTER *pAd);
6809 VOID RT2870_BssBeaconStop(
6810 IN RTMP_ADAPTER *pAd);
6812 VOID RT2870_BssBeaconStart(
6813 IN RTMP_ADAPTER * pAd);
6815 VOID RT2870_BssBeaconInit(
6816 IN RTMP_ADAPTER *pAd);
6818 VOID RT2870_WatchDog(
6819 IN RTMP_ADAPTER *pAd);
6821 NTSTATUS RTUSBWriteMACRegister(
6822 IN PRTMP_ADAPTER pAd,
6823 IN USHORT Offset,
6824 IN UINT32 Value);
6826 NTSTATUS RTUSBReadMACRegister(
6827 IN PRTMP_ADAPTER pAd,
6828 IN USHORT Offset,
6829 OUT PUINT32 pValue);
6831 NTSTATUS RTUSBSingleWrite(
6832 IN RTMP_ADAPTER *pAd,
6833 IN USHORT Offset,
6834 IN USHORT Value);
6836 NTSTATUS RTUSBFirmwareRun(
6837 IN PRTMP_ADAPTER pAd);
6839 NTSTATUS RTUSBFirmwareWrite(
6840 IN PRTMP_ADAPTER pAd,
6841 IN PUCHAR pFwImage,
6842 IN ULONG FwLen);
6844 NTSTATUS RTUSBFirmwareOpmode(
6845 IN PRTMP_ADAPTER pAd,
6846 OUT PUINT32 pValue);
6848 NTSTATUS RTUSBVenderReset(
6849 IN PRTMP_ADAPTER pAd);
6851 NDIS_STATUS RTUSBSetHardWareRegister(
6852 IN PRTMP_ADAPTER pAdapter,
6853 IN PVOID pBuf);
6855 NDIS_STATUS RTUSBQueryHardWareRegister(
6856 IN PRTMP_ADAPTER pAdapter,
6857 IN PVOID pBuf);
6859 VOID CMDHandler(
6860 IN PRTMP_ADAPTER pAd);
6863 NDIS_STATUS CreateThreads(
6864 IN struct net_device *net_dev );
6867 VOID MacTableInitialize(
6868 IN PRTMP_ADAPTER pAd);
6870 VOID MlmeSetPsm(
6871 IN PRTMP_ADAPTER pAd,
6872 IN USHORT psm);
6874 NDIS_STATUS RTMPWPAAddKeyProc(
6875 IN PRTMP_ADAPTER pAd,
6876 IN PVOID pBuf);
6878 VOID AsicRxAntEvalAction(
6879 IN PRTMP_ADAPTER pAd);
6881 void append_pkt(
6882 IN PRTMP_ADAPTER pAd,
6883 IN PUCHAR pHeader802_3,
6884 IN UINT HdrLen,
6885 IN PUCHAR pData,
6886 IN ULONG DataSize,
6887 OUT PNDIS_PACKET *ppPacket);
6889 UINT deaggregate_AMSDU_announce(
6890 IN PRTMP_ADAPTER pAd,
6891 PNDIS_PACKET pPacket,
6892 IN PUCHAR pData,
6893 IN ULONG DataSize);
6895 NDIS_STATUS RTMPCheckRxError(
6896 IN PRTMP_ADAPTER pAd,
6897 IN PHEADER_802_11 pHeader,
6898 IN PRXWI_STRUC pRxWI,
6899 IN PRT28XX_RXD_STRUC pRxINFO);
6902 VOID RTUSBMlmeHardTransmit(
6903 IN PRTMP_ADAPTER pAd,
6904 IN PMGMT_STRUC pMgmt);
6906 INT MlmeThread(
6907 IN PVOID Context);
6910 // Function Prototype in rtusb_data.c
6912 NDIS_STATUS RTUSBFreeDescriptorRequest(
6913 IN PRTMP_ADAPTER pAd,
6914 IN UCHAR BulkOutPipeId,
6915 IN UINT32 NumberRequired);
6918 BOOLEAN RTUSBNeedQueueBackForAgg(
6919 IN RTMP_ADAPTER *pAd,
6920 IN UCHAR BulkOutPipeId);
6923 VOID RTMPWriteTxInfo(
6924 IN PRTMP_ADAPTER pAd,
6925 IN PTXINFO_STRUC pTxInfo,
6926 IN USHORT USBDMApktLen,
6927 IN BOOLEAN bWiv,
6928 IN UCHAR QueueSel,
6929 IN UCHAR NextValid,
6930 IN UCHAR TxBurst);
6933 // Function Prototype in cmm_data_2870.c
6935 USHORT RtmpUSB_WriteSubTxResource(
6936 IN PRTMP_ADAPTER pAd,
6937 IN TX_BLK *pTxBlk,
6938 IN BOOLEAN bIsLast,
6939 OUT USHORT *FreeNumber);
6941 USHORT RtmpUSB_WriteSingleTxResource(
6942 IN PRTMP_ADAPTER pAd,
6943 IN TX_BLK *pTxBlk,
6944 IN BOOLEAN bIsLast,
6945 OUT USHORT *FreeNumber);
6947 USHORT RtmpUSB_WriteFragTxResource(
6948 IN PRTMP_ADAPTER pAd,
6949 IN TX_BLK *pTxBlk,
6950 IN UCHAR fragNum,
6951 OUT USHORT *FreeNumber);
6953 USHORT RtmpUSB_WriteMultiTxResource(
6954 IN PRTMP_ADAPTER pAd,
6955 IN TX_BLK *pTxBlk,
6956 IN UCHAR frameNum,
6957 OUT USHORT *FreeNumber);
6959 VOID RtmpUSB_FinalWriteTxResource(
6960 IN PRTMP_ADAPTER pAd,
6961 IN TX_BLK *pTxBlk,
6962 IN USHORT totalMPDUSize,
6963 #ifdef RT2860
6964 IN USHORT FirstTxIdx);
6965 #endif
6966 IN USHORT TxIdx);
6968 VOID RtmpUSBDataLastTxIdx(
6969 IN PRTMP_ADAPTER pAd,
6970 IN UCHAR QueIdx,
6971 IN USHORT TxIdx);
6973 VOID RtmpUSBDataKickOut(
6974 IN PRTMP_ADAPTER pAd,
6975 IN TX_BLK *pTxBlk,
6976 IN UCHAR QueIdx);
6979 int RtmpUSBMgmtKickOut(
6980 IN RTMP_ADAPTER *pAd,
6981 IN UCHAR QueIdx,
6982 IN PNDIS_PACKET pPacket,
6983 IN PUCHAR pSrcBufVA,
6984 IN UINT SrcBufLen);
6986 VOID RtmpUSBNullFrameKickOut(
6987 IN RTMP_ADAPTER *pAd,
6988 IN UCHAR QueIdx,
6989 IN UCHAR *pNullFrame,
6990 IN UINT32 frameLen);
6992 VOID RT28xxUsbStaAsicForceWakeup(
6993 IN PRTMP_ADAPTER pAd,
6994 IN BOOLEAN bFromTx);
6996 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
6997 IN PRTMP_ADAPTER pAd,
6998 IN USHORT TbttNumToNextWakeUp);
7000 VOID RT28xxUsbMlmeRadioOn(
7001 IN PRTMP_ADAPTER pAd);
7003 VOID RT28xxUsbMlmeRadioOFF(
7004 IN PRTMP_ADAPTER pAd);
7005 #endif // RT2870 //
7007 ////////////////////////////////////////
7009 VOID QBSS_LoadInit(
7010 IN RTMP_ADAPTER *pAd);
7012 UINT32 QBSS_LoadElementAppend(
7013 IN RTMP_ADAPTER *pAd,
7014 OUT UINT8 *buf_p);
7016 VOID QBSS_LoadUpdate(
7017 IN RTMP_ADAPTER *pAd);
7019 ///////////////////////////////////////
7020 INT RTMPShowCfgValue(
7021 IN PRTMP_ADAPTER pAd,
7022 IN PUCHAR pName,
7023 IN PUCHAR pBuf);
7025 PCHAR RTMPGetRalinkAuthModeStr(
7026 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7028 PCHAR RTMPGetRalinkEncryModeStr(
7029 IN USHORT encryMode);
7030 //////////////////////////////////////
7032 VOID AsicStaBbpTuning(
7033 IN PRTMP_ADAPTER pAd);
7035 #ifdef RT2860
7036 VOID AsicResetFromDMABusy(
7037 IN PRTMP_ADAPTER pAd);
7039 VOID AsicResetBBP(
7040 IN PRTMP_ADAPTER pAd);
7042 VOID AsicResetMAC(
7043 IN PRTMP_ADAPTER pAd);
7045 VOID AsicResetPBF(
7046 IN PRTMP_ADAPTER pAd);
7047 #endif
7048 #ifdef RT2870
7049 BOOLEAN StaAddMacTableEntry(
7050 IN PRTMP_ADAPTER pAd,
7051 IN PMAC_TABLE_ENTRY pEntry,
7052 IN UCHAR MaxSupportedRateIn500Kbps,
7053 IN HT_CAPABILITY_IE *pHtCapability,
7054 IN UCHAR HtCapabilityLen,
7055 IN USHORT CapabilityInfo);
7056 #endif
7058 void RTMP_IndicateMediaState(
7059 IN PRTMP_ADAPTER pAd);
7061 VOID ReSyncBeaconTime(
7062 IN PRTMP_ADAPTER pAd);
7064 VOID RTMPSetAGCInitValue(
7065 IN PRTMP_ADAPTER pAd,
7066 IN UCHAR BandWidth);
7068 int rt28xx_close(IN PNET_DEV dev);
7069 int rt28xx_open(IN PNET_DEV dev);
7071 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7073 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7074 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7076 if (VIRTUAL_IF_NUM(pAd) == 0)
7078 if (rt28xx_open(pAd->net_dev) != 0)
7079 return -1;
7081 else
7084 VIRTUAL_IF_INC(pAd);
7085 return 0;
7088 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7090 VIRTUAL_IF_DEC(pAd);
7091 if (VIRTUAL_IF_NUM(pAd) == 0)
7092 rt28xx_close(pAd->net_dev);
7093 return;
7097 #endif // __RTMP_H__