Staging: rt3070: remove dead CONFIG_APSTA_MIXED_SUPPORT code
[linux-2.6/kvm.git] / drivers / staging / rt3070 / rtmp.h
blobb70c9543d04da29a247da430a0ce933d10a2d531
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 #ifdef CONFIG_STA_SUPPORT
47 #include "aironet.h"
48 #endif // CONFIG_STA_SUPPORT //
50 //#define DBG 1
52 //#define DBG_DIAGNOSE 1
54 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
55 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
56 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
57 #else
58 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
59 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
60 #endif
62 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
63 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
64 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
66 #ifdef RT2870
67 ////////////////////////////////////////////////////////////////////////////
68 // The TX_BUFFER structure forms the transmitted USB packet to the device
69 ////////////////////////////////////////////////////////////////////////////
70 typedef struct __TX_BUFFER{
71 union {
72 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
73 HEADER_802_11 NullFrame;
74 PSPOLL_FRAME PsPollPacket;
75 RTS_FRAME RTSFrame;
76 }field;
77 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
78 } TX_BUFFER, *PTX_BUFFER;
80 typedef struct __HTTX_BUFFER{
81 union {
82 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
83 HEADER_802_11 NullFrame;
84 PSPOLL_FRAME PsPollPacket;
85 RTS_FRAME RTSFrame;
86 }field;
87 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
88 } HTTX_BUFFER, *PHTTX_BUFFER;
91 // used to track driver-generated write irps
92 typedef struct _TX_CONTEXT
94 PVOID pAd; //Initialized in MiniportInitialize
95 PURB pUrb; //Initialized in MiniportInitialize
96 PIRP pIrp; //used to cancel pending bulk out.
97 //Initialized in MiniportInitialize
98 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
99 ULONG BulkOutSize;
100 UCHAR BulkOutPipeId;
101 UCHAR SelfIdx;
102 BOOLEAN InUse;
103 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
104 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
105 BOOLEAN IRPPending;
106 BOOLEAN LastOne;
107 BOOLEAN bAggregatible;
108 UCHAR Header_802_3[LENGTH_802_3];
109 UCHAR Rsv[2];
110 ULONG DataOffset;
111 UINT TxRate;
112 dma_addr_t data_dma; // urb dma on linux
114 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
117 // used to track driver-generated write irps
118 typedef struct _HT_TX_CONTEXT
120 PVOID pAd; //Initialized in MiniportInitialize
121 PURB pUrb; //Initialized in MiniportInitialize
122 PIRP pIrp; //used to cancel pending bulk out.
123 //Initialized in MiniportInitialize
124 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
125 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
126 UCHAR BulkOutPipeId;
127 BOOLEAN IRPPending;
128 BOOLEAN LastOne;
129 BOOLEAN bCurWriting;
130 BOOLEAN bRingEmpty;
131 BOOLEAN bCopySavePad;
132 UCHAR SavedPad[8];
133 UCHAR Header_802_3[LENGTH_802_3];
134 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
135 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
136 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
137 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
138 UINT TxRate;
139 dma_addr_t data_dma; // urb dma on linux
140 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
144 // Structure to keep track of receive packets and buffers to indicate
145 // receive data to the protocol.
147 typedef struct _RX_CONTEXT
149 PUCHAR TransferBuffer;
150 PVOID pAd;
151 PIRP pIrp;//used to cancel pending bulk in.
152 PURB pUrb;
153 //These 2 Boolean shouldn't both be 1 at the same time.
154 ULONG BulkInOffset; // number of packets waiting for reordering .
155 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
156 BOOLEAN bRxHandling; // Notify this packet is being process now.
157 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
158 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
159 BOOLEAN IRPPending; // TODO: To be removed
160 atomic_t IrpLock;
161 NDIS_SPIN_LOCK RxContextLock;
162 dma_addr_t data_dma; // urb dma on linux
163 } RX_CONTEXT, *PRX_CONTEXT;
164 #endif // RT2870 //
168 // NDIS Version definitions
170 #ifdef NDIS50_MINIPORT
171 #define RTMP_NDIS_MAJOR_VERSION 5
172 #define RTMP_NDIS_MINOR_VERSION 0
173 #endif
175 #ifdef NDIS51_MINIPORT
176 #define RTMP_NDIS_MAJOR_VERSION 5
177 #define RTMP_NDIS_MINOR_VERSION 1
178 #endif
180 extern char NIC_VENDOR_DESC[];
181 extern int NIC_VENDOR_DESC_LEN;
183 extern unsigned char SNAP_AIRONET[];
184 extern unsigned char CipherSuiteCiscoCCKM[];
185 extern unsigned char CipherSuiteCiscoCCKMLen;
186 extern unsigned char CipherSuiteCiscoCCKM24[];
187 extern unsigned char CipherSuiteCiscoCCKM24Len;
188 extern unsigned char CipherSuiteCCXTkip[];
189 extern unsigned char CipherSuiteCCXTkipLen;
190 extern unsigned char CISCO_OUI[];
191 extern UCHAR BaSizeArray[4];
193 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
194 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
195 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
196 extern ULONG BIT32[32];
197 extern UCHAR BIT8[8];
198 extern char* CipherName[];
199 extern char* MCSToMbps[];
200 extern UCHAR RxwiMCSToOfdmRate[12];
201 extern UCHAR SNAP_802_1H[6];
202 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
203 extern UCHAR SNAP_AIRONET[8];
204 extern UCHAR CKIP_LLC_SNAP[8];
205 extern UCHAR EAPOL_LLC_SNAP[8];
206 extern UCHAR EAPOL[2];
207 extern UCHAR IPX[2];
208 extern UCHAR APPLE_TALK[2];
209 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
210 extern UCHAR OfdmRateToRxwiMCS[];
211 extern UCHAR OfdmSignalToRateId[16] ;
212 extern UCHAR default_cwmin[4];
213 extern UCHAR default_cwmax[4];
214 extern UCHAR default_sta_aifsn[4];
215 extern UCHAR MapUserPriorityToAccessCategory[8];
217 extern USHORT RateUpPER[];
218 extern USHORT RateDownPER[];
219 extern UCHAR Phy11BNextRateDownward[];
220 extern UCHAR Phy11BNextRateUpward[];
221 extern UCHAR Phy11BGNextRateDownward[];
222 extern UCHAR Phy11BGNextRateUpward[];
223 extern UCHAR Phy11ANextRateDownward[];
224 extern UCHAR Phy11ANextRateUpward[];
225 extern CHAR RssiSafeLevelForTxRate[];
226 extern UCHAR RateIdToMbps[];
227 extern USHORT RateIdTo500Kbps[];
229 extern UCHAR CipherSuiteWpaNoneTkip[];
230 extern UCHAR CipherSuiteWpaNoneTkipLen;
232 extern UCHAR CipherSuiteWpaNoneAes[];
233 extern UCHAR CipherSuiteWpaNoneAesLen;
235 extern UCHAR SsidIe;
236 extern UCHAR SupRateIe;
237 extern UCHAR ExtRateIe;
239 #ifdef DOT11_N_SUPPORT
240 extern UCHAR HtCapIe;
241 extern UCHAR AddHtInfoIe;
242 extern UCHAR NewExtChanIe;
243 #ifdef DOT11N_DRAFT3
244 extern UCHAR ExtHtCapIe;
245 #endif // DOT11N_DRAFT3 //
246 #endif // DOT11_N_SUPPORT //
248 extern UCHAR ErpIe;
249 extern UCHAR DsIe;
250 extern UCHAR TimIe;
251 extern UCHAR WpaIe;
252 extern UCHAR Wpa2Ie;
253 extern UCHAR IbssIe;
254 extern UCHAR Ccx2Ie;
255 extern UCHAR WapiIe;
257 extern UCHAR WPA_OUI[];
258 extern UCHAR RSN_OUI[];
259 extern UCHAR WAPI_OUI[];
260 extern UCHAR WME_INFO_ELEM[];
261 extern UCHAR WME_PARM_ELEM[];
262 extern UCHAR Ccx2QosInfo[];
263 extern UCHAR Ccx2IeInfo[];
264 extern UCHAR RALINK_OUI[];
265 extern UCHAR PowerConstraintIE[];
268 extern UCHAR RateSwitchTable[];
269 extern UCHAR RateSwitchTable11B[];
270 extern UCHAR RateSwitchTable11G[];
271 extern UCHAR RateSwitchTable11BG[];
273 #ifdef DOT11_N_SUPPORT
274 extern UCHAR RateSwitchTable11BGN1S[];
275 extern UCHAR RateSwitchTable11BGN2S[];
276 extern UCHAR RateSwitchTable11BGN2SForABand[];
277 extern UCHAR RateSwitchTable11N1S[];
278 extern UCHAR RateSwitchTable11N2S[];
279 extern UCHAR RateSwitchTable11N2SForABand[];
281 #ifdef CONFIG_STA_SUPPORT
282 extern UCHAR PRE_N_HT_OUI[];
283 #endif // CONFIG_STA_SUPPORT //
284 #endif // DOT11_N_SUPPORT //
286 #define MAXSEQ (0xFFF)
288 #ifdef RALINK_ATE
289 typedef struct _ATE_INFO {
290 UCHAR Mode;
291 CHAR TxPower0;
292 CHAR TxPower1;
293 CHAR TxAntennaSel;
294 CHAR RxAntennaSel;
295 TXWI_STRUC TxWI; // TXWI
296 USHORT QID;
297 UCHAR Addr1[MAC_ADDR_LEN];
298 UCHAR Addr2[MAC_ADDR_LEN];
299 UCHAR Addr3[MAC_ADDR_LEN];
300 UCHAR Channel;
301 UINT32 TxLength;
302 UINT32 TxCount;
303 UINT32 TxDoneCount; // Tx DMA Done
304 UINT32 RFFreqOffset;
305 BOOLEAN bRxFer;
306 BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
307 BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
308 UINT32 RxTotalCnt;
309 UINT32 RxCntPerSec;
311 CHAR LastSNR0; // last received SNR
312 CHAR LastSNR1; // last received SNR for 2nd antenna
313 CHAR LastRssi0; // last received RSSI
314 CHAR LastRssi1; // last received RSSI for 2nd antenna
315 CHAR LastRssi2; // last received RSSI for 3rd antenna
316 CHAR AvgRssi0; // last 8 frames' average RSSI
317 CHAR AvgRssi1; // last 8 frames' average RSSI
318 CHAR AvgRssi2; // last 8 frames' average RSSI
319 SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
320 SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
321 SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
323 UINT32 NumOfAvgRssiSample;
325 #ifdef RALINK_28xx_QA
326 // Tx frame
327 #ifdef RT2870
328 /* not used in RT2860 */
329 TXINFO_STRUC TxInfo; // TxInfo
330 #endif // RT2870 //
331 USHORT HLen; // Header Length
332 USHORT PLen; // Pattern Length
333 UCHAR Header[32]; // Header buffer
334 UCHAR Pattern[32]; // Pattern buffer
335 USHORT DLen; // Data Length
336 USHORT seq;
337 UINT32 CID;
338 pid_t AtePid;
339 // counters
340 UINT32 U2M;
341 UINT32 OtherData;
342 UINT32 Beacon;
343 UINT32 OtherCount;
344 UINT32 TxAc0;
345 UINT32 TxAc1;
346 UINT32 TxAc2;
347 UINT32 TxAc3;
348 UINT32 TxHCCA;
349 UINT32 TxMgmt;
350 UINT32 RSSI0;
351 UINT32 RSSI1;
352 UINT32 RSSI2;
353 UINT32 SNR0;
354 UINT32 SNR1;
355 // control
356 //UINT32 Repeat; // Tx Cpu count
357 UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
358 #endif // RALINK_28xx_QA //
359 } ATE_INFO, *PATE_INFO;
361 #ifdef RALINK_28xx_QA
362 struct ate_racfghdr {
363 UINT32 magic_no;
364 USHORT command_type;
365 USHORT command_id;
366 USHORT length;
367 USHORT sequence;
368 USHORT status;
369 UCHAR data[2046];
370 } __attribute__((packed));
371 #endif // RALINK_28xx_QA //
372 #endif // RALINK_ATE //
374 #ifdef DOT11_N_SUPPORT
375 struct reordering_mpdu
377 struct reordering_mpdu *next;
378 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
379 int Sequence; /* sequence number of MPDU */
380 BOOLEAN bAMSDU;
383 struct reordering_list
385 struct reordering_mpdu *next;
386 int qlen;
389 struct reordering_mpdu_pool
391 PVOID mem;
392 NDIS_SPIN_LOCK lock;
393 struct reordering_list freelist;
395 #endif // DOT11_N_SUPPORT //
397 typedef struct _RSSI_SAMPLE {
398 CHAR LastRssi0; // last received RSSI
399 CHAR LastRssi1; // last received RSSI
400 CHAR LastRssi2; // last received RSSI
401 CHAR AvgRssi0;
402 CHAR AvgRssi1;
403 CHAR AvgRssi2;
404 SHORT AvgRssi0X8;
405 SHORT AvgRssi1X8;
406 SHORT AvgRssi2X8;
407 } RSSI_SAMPLE;
410 // Queue structure and macros
412 typedef struct _QUEUE_ENTRY {
413 struct _QUEUE_ENTRY *Next;
414 } QUEUE_ENTRY, *PQUEUE_ENTRY;
416 // Queue structure
417 typedef struct _QUEUE_HEADER {
418 PQUEUE_ENTRY Head;
419 PQUEUE_ENTRY Tail;
420 ULONG Number;
421 } QUEUE_HEADER, *PQUEUE_HEADER;
423 #define InitializeQueueHeader(QueueHeader) \
425 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
426 (QueueHeader)->Number = 0; \
429 #define RemoveHeadQueue(QueueHeader) \
430 (QueueHeader)->Head; \
432 PQUEUE_ENTRY pNext; \
433 if ((QueueHeader)->Head != NULL) \
435 pNext = (QueueHeader)->Head->Next; \
436 (QueueHeader)->Head = pNext; \
437 if (pNext == NULL) \
438 (QueueHeader)->Tail = NULL; \
439 (QueueHeader)->Number--; \
443 #define InsertHeadQueue(QueueHeader, QueueEntry) \
445 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
446 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
447 if ((QueueHeader)->Tail == NULL) \
448 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
449 (QueueHeader)->Number++; \
452 #define InsertTailQueue(QueueHeader, QueueEntry) \
454 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
455 if ((QueueHeader)->Tail) \
456 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
457 else \
458 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
459 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
460 (QueueHeader)->Number++; \
464 // Macros for flag and ref count operations
466 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
467 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
468 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
469 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
470 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
472 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
473 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
474 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
476 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
477 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
478 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
480 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
481 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
482 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
484 #ifdef CONFIG_STA_SUPPORT
485 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
486 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
487 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
488 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
490 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
491 #endif // CONFIG_STA_SUPPORT //
493 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
494 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
497 #define INC_RING_INDEX(_idx, _RingSize) \
499 (_idx) = (_idx+1) % (_RingSize); \
502 // We will have a cost down version which mac version is 0x3090xxxx
503 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
505 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
506 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
507 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
509 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
511 #define RING_PACKET_INIT(_TxRing, _idx) \
513 _TxRing->Cell[_idx].pNdisPacket = NULL; \
514 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
517 #define TXDT_INIT(_TxD) \
519 NdisZeroMemory(_TxD, TXD_SIZE); \
520 _TxD->DMADONE = 1; \
523 //Set last data segment
524 #define RING_SET_LASTDS(_TxD, _IsSD0) \
526 if (_IsSD0) {_TxD->LastSec0 = 1;} \
527 else {_TxD->LastSec1 = 1;} \
530 // Increase TxTsc value for next transmission
531 // TODO:
532 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
533 // Should send a special event microsoft defined to request re-key
534 #define INC_TX_TSC(_tsc) \
536 int i=0; \
537 while (++_tsc[i] == 0x0) \
539 i++; \
540 if (i == 6) \
541 break; \
545 #ifdef DOT11_N_SUPPORT
546 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
547 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
549 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
550 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
551 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
552 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
553 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
554 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
555 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
556 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
557 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
558 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
559 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
560 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
563 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
565 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
566 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
567 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
569 #endif // DOT11_N_SUPPORT //
572 // MACRO for 32-bit PCI register read / write
574 // Usage : RTMP_IO_READ32(
575 // PRTMP_ADAPTER pAd,
576 // ULONG Register_Offset,
577 // PULONG pValue)
579 // RTMP_IO_WRITE32(
580 // PRTMP_ADAPTER pAd,
581 // ULONG Register_Offset,
582 // ULONG Value)
586 // BBP & RF are using indirect access. Before write any value into it.
587 // We have to make sure there is no outstanding command pending via checking busy bit.
589 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
592 #ifdef RT2870
593 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
594 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
595 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
597 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
598 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
599 #endif // RT2870 //
601 #ifdef RT30xx
602 #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
603 #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
604 #endif // RT30xx //
606 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
607 switch (ch) \
609 case 1: khz = 2412000; break; \
610 case 2: khz = 2417000; break; \
611 case 3: khz = 2422000; break; \
612 case 4: khz = 2427000; break; \
613 case 5: khz = 2432000; break; \
614 case 6: khz = 2437000; break; \
615 case 7: khz = 2442000; break; \
616 case 8: khz = 2447000; break; \
617 case 9: khz = 2452000; break; \
618 case 10: khz = 2457000; break; \
619 case 11: khz = 2462000; break; \
620 case 12: khz = 2467000; break; \
621 case 13: khz = 2472000; break; \
622 case 14: khz = 2484000; break; \
623 case 36: /* UNII */ khz = 5180000; break; \
624 case 40: /* UNII */ khz = 5200000; break; \
625 case 44: /* UNII */ khz = 5220000; break; \
626 case 48: /* UNII */ khz = 5240000; break; \
627 case 52: /* UNII */ khz = 5260000; break; \
628 case 56: /* UNII */ khz = 5280000; break; \
629 case 60: /* UNII */ khz = 5300000; break; \
630 case 64: /* UNII */ khz = 5320000; break; \
631 case 149: /* UNII */ khz = 5745000; break; \
632 case 153: /* UNII */ khz = 5765000; break; \
633 case 157: /* UNII */ khz = 5785000; break; \
634 case 161: /* UNII */ khz = 5805000; break; \
635 case 165: /* UNII */ khz = 5825000; break; \
636 case 100: /* HiperLAN2 */ khz = 5500000; break; \
637 case 104: /* HiperLAN2 */ khz = 5520000; break; \
638 case 108: /* HiperLAN2 */ khz = 5540000; break; \
639 case 112: /* HiperLAN2 */ khz = 5560000; break; \
640 case 116: /* HiperLAN2 */ khz = 5580000; break; \
641 case 120: /* HiperLAN2 */ khz = 5600000; break; \
642 case 124: /* HiperLAN2 */ khz = 5620000; break; \
643 case 128: /* HiperLAN2 */ khz = 5640000; break; \
644 case 132: /* HiperLAN2 */ khz = 5660000; break; \
645 case 136: /* HiperLAN2 */ khz = 5680000; break; \
646 case 140: /* HiperLAN2 */ khz = 5700000; break; \
647 case 34: /* Japan MMAC */ khz = 5170000; break; \
648 case 38: /* Japan MMAC */ khz = 5190000; break; \
649 case 42: /* Japan MMAC */ khz = 5210000; break; \
650 case 46: /* Japan MMAC */ khz = 5230000; break; \
651 case 184: /* Japan */ khz = 4920000; break; \
652 case 188: /* Japan */ khz = 4940000; break; \
653 case 192: /* Japan */ khz = 4960000; break; \
654 case 196: /* Japan */ khz = 4980000; break; \
655 case 208: /* Japan, means J08 */ khz = 5040000; break; \
656 case 212: /* Japan, means J12 */ khz = 5060000; break; \
657 case 216: /* Japan, means J16 */ khz = 5080000; break; \
658 default: khz = 2412000; break; \
662 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
663 switch (khz) \
665 case 2412000: ch = 1; break; \
666 case 2417000: ch = 2; break; \
667 case 2422000: ch = 3; break; \
668 case 2427000: ch = 4; break; \
669 case 2432000: ch = 5; break; \
670 case 2437000: ch = 6; break; \
671 case 2442000: ch = 7; break; \
672 case 2447000: ch = 8; break; \
673 case 2452000: ch = 9; break; \
674 case 2457000: ch = 10; break; \
675 case 2462000: ch = 11; break; \
676 case 2467000: ch = 12; break; \
677 case 2472000: ch = 13; break; \
678 case 2484000: ch = 14; break; \
679 case 5180000: ch = 36; /* UNII */ break; \
680 case 5200000: ch = 40; /* UNII */ break; \
681 case 5220000: ch = 44; /* UNII */ break; \
682 case 5240000: ch = 48; /* UNII */ break; \
683 case 5260000: ch = 52; /* UNII */ break; \
684 case 5280000: ch = 56; /* UNII */ break; \
685 case 5300000: ch = 60; /* UNII */ break; \
686 case 5320000: ch = 64; /* UNII */ break; \
687 case 5745000: ch = 149; /* UNII */ break; \
688 case 5765000: ch = 153; /* UNII */ break; \
689 case 5785000: ch = 157; /* UNII */ break; \
690 case 5805000: ch = 161; /* UNII */ break; \
691 case 5825000: ch = 165; /* UNII */ break; \
692 case 5500000: ch = 100; /* HiperLAN2 */ break; \
693 case 5520000: ch = 104; /* HiperLAN2 */ break; \
694 case 5540000: ch = 108; /* HiperLAN2 */ break; \
695 case 5560000: ch = 112; /* HiperLAN2 */ break; \
696 case 5580000: ch = 116; /* HiperLAN2 */ break; \
697 case 5600000: ch = 120; /* HiperLAN2 */ break; \
698 case 5620000: ch = 124; /* HiperLAN2 */ break; \
699 case 5640000: ch = 128; /* HiperLAN2 */ break; \
700 case 5660000: ch = 132; /* HiperLAN2 */ break; \
701 case 5680000: ch = 136; /* HiperLAN2 */ break; \
702 case 5700000: ch = 140; /* HiperLAN2 */ break; \
703 case 5170000: ch = 34; /* Japan MMAC */ break; \
704 case 5190000: ch = 38; /* Japan MMAC */ break; \
705 case 5210000: ch = 42; /* Japan MMAC */ break; \
706 case 5230000: ch = 46; /* Japan MMAC */ break; \
707 case 4920000: ch = 184; /* Japan */ break; \
708 case 4940000: ch = 188; /* Japan */ break; \
709 case 4960000: ch = 192; /* Japan */ break; \
710 case 4980000: ch = 196; /* Japan */ break; \
711 case 5040000: ch = 208; /* Japan, means J08 */ break; \
712 case 5060000: ch = 212; /* Japan, means J12 */ break; \
713 case 5080000: ch = 216; /* Japan, means J16 */ break; \
714 default: ch = 1; break; \
719 // Common fragment list structure - Identical to the scatter gather frag list structure
721 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
722 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
723 #define NIC_MAX_PHYS_BUF_COUNT 8
725 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
726 PVOID Address;
727 ULONG Length;
728 PULONG Reserved;
729 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
732 typedef struct _RTMP_SCATTER_GATHER_LIST {
733 ULONG NumberOfElements;
734 PULONG Reserved;
735 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
736 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
739 // Some utility macros
741 #ifndef min
742 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
743 #endif
745 #ifndef max
746 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
747 #endif
749 #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))))
751 #define INC_COUNTER64(Val) (Val.QuadPart++)
753 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
754 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
755 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
756 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
758 // Check LEAP & CCKM flags
759 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
760 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
762 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
763 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
765 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
767 _pExtraLlcSnapEncap = SNAP_802_1H; \
768 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
769 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
771 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
774 else \
776 _pExtraLlcSnapEncap = NULL; \
780 // New Define for new Tx Path.
781 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
783 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
785 _pExtraLlcSnapEncap = SNAP_802_1H; \
786 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
787 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
789 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
792 else \
794 _pExtraLlcSnapEncap = NULL; \
799 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
801 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
802 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
803 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
806 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
807 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
808 // else remove the LLC/SNAP field from the result Ethernet frame
809 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
810 // Note:
811 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
812 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
813 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
815 char LLC_Len[2]; \
817 _pRemovedLLCSNAP = NULL; \
818 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
819 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
821 PUCHAR pProto = _pData + 6; \
823 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
824 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
826 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
827 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
828 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
830 else \
832 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
833 _pRemovedLLCSNAP = _pData; \
834 _DataSize -= LENGTH_802_1_H; \
835 _pData += LENGTH_802_1_H; \
838 else \
840 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
841 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
842 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
846 #define SWITCH_AB( _pAA, _pBB) \
848 PVOID pCC; \
849 pCC = _pBB; \
850 _pBB = _pAA; \
851 _pAA = pCC; \
854 // Enqueue this frame to MLME engine
855 // We need to enqueue the whole frame because MLME need to pass data type
856 // information from 802.11 header
857 #ifdef RT2870
858 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
860 UINT32 High32TSF=0, Low32TSF=0; \
861 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
863 #endif // RT2870 //
865 #ifdef RT30xx
866 //Need to collect each ant's rssi concurrently
867 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
868 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
870 SHORT AvgRssi; \
871 UCHAR UsedAnt; \
872 if (_pAd->RxAnt.EvaluatePeriod == 0) \
874 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
875 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
876 if (AvgRssi < 0) \
877 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
878 else \
879 AvgRssi = _rssi1 << 3; \
880 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
882 else \
884 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
885 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
886 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
887 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
888 else \
890 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
891 AvgRssi = _rssi1 << 3; \
893 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
894 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
897 #endif // RT30xx //
900 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
901 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
903 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
904 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
907 // Check if it is Japan W53(ch52,56,60,64) channel.
909 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
911 #ifdef CONFIG_STA_SUPPORT
912 #define STA_PORT_SECURED(_pAd) \
914 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
915 NdisAcquireSpinLock(&_pAd->MacTabLock); \
916 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
917 NdisReleaseSpinLock(&_pAd->MacTabLock); \
919 #endif // CONFIG_STA_SUPPORT //
923 // Register set pair for initialzation register set definition
925 typedef struct _RTMP_REG_PAIR
927 ULONG Register;
928 ULONG Value;
929 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
931 typedef struct _REG_PAIR
933 UCHAR Register;
934 UCHAR Value;
935 } REG_PAIR, *PREG_PAIR;
938 // Register set pair for initialzation register set definition
940 typedef struct _RTMP_RF_REGS
942 UCHAR Channel;
943 ULONG R1;
944 ULONG R2;
945 ULONG R3;
946 ULONG R4;
947 } RTMP_RF_REGS, *PRTMP_RF_REGS;
949 typedef struct _FREQUENCY_ITEM {
950 UCHAR Channel;
951 UCHAR N;
952 UCHAR R;
953 UCHAR K;
954 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
957 // Data buffer for DMA operation, the buffer must be contiguous physical memory
958 // Both DMA to / from CPU use the same structure.
960 typedef struct _RTMP_DMABUF
962 ULONG AllocSize;
963 PVOID AllocVa; // TxBuf virtual address
964 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
965 } RTMP_DMABUF, *PRTMP_DMABUF;
968 typedef union _HEADER_802_11_SEQ{
969 #ifdef RT_BIG_ENDIAN
970 struct {
971 USHORT Sequence:12;
972 USHORT Frag:4;
973 } field;
974 #else
975 struct {
976 USHORT Frag:4;
977 USHORT Sequence:12;
978 } field;
979 #endif
980 USHORT value;
981 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
984 // Data buffer for DMA operation, the buffer must be contiguous physical memory
985 // Both DMA to / from CPU use the same structure.
987 typedef struct _RTMP_REORDERBUF
989 BOOLEAN IsFull;
990 PVOID AllocVa; // TxBuf virtual address
991 UCHAR Header802_3[14];
992 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
993 UCHAR DataOffset;
994 USHORT Datasize;
995 ULONG AllocSize;
996 #ifdef RT2870
997 PUCHAR AllocPa;
998 #endif // RT2870 //
999 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1002 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1003 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1004 // which won't be released, driver has to wait until upper layer return the packet
1005 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1006 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1007 // which driver should ACK upper layer when the tx is physically done or failed.
1009 typedef struct _RTMP_DMACB
1011 ULONG AllocSize; // Control block size
1012 PVOID AllocVa; // Control block virtual address
1013 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1014 PNDIS_PACKET pNdisPacket;
1015 PNDIS_PACKET pNextNdisPacket;
1017 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1018 } RTMP_DMACB, *PRTMP_DMACB;
1020 typedef struct _RTMP_TX_BUF
1022 PQUEUE_ENTRY Next;
1023 UCHAR Index;
1024 ULONG AllocSize; // Control block size
1025 PVOID AllocVa; // Control block virtual address
1026 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1027 } RTMP_TXBUF, *PRTMP_TXBUF;
1029 typedef struct _RTMP_RX_BUF
1031 BOOLEAN InUse;
1032 ULONG ByBaRecIndex;
1033 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1034 } RTMP_RXBUF, *PRTMP_RXBUF;
1035 typedef struct _RTMP_TX_RING
1037 RTMP_DMACB Cell[TX_RING_SIZE];
1038 UINT32 TxCpuIdx;
1039 UINT32 TxDmaIdx;
1040 UINT32 TxSwFreeIdx; // software next free tx index
1041 } RTMP_TX_RING, *PRTMP_TX_RING;
1043 typedef struct _RTMP_RX_RING
1045 RTMP_DMACB Cell[RX_RING_SIZE];
1046 UINT32 RxCpuIdx;
1047 UINT32 RxDmaIdx;
1048 INT32 RxSwReadIdx; // software next read index
1049 } RTMP_RX_RING, *PRTMP_RX_RING;
1051 typedef struct _RTMP_MGMT_RING
1053 RTMP_DMACB Cell[MGMT_RING_SIZE];
1054 UINT32 TxCpuIdx;
1055 UINT32 TxDmaIdx;
1056 UINT32 TxSwFreeIdx; // software next free tx index
1057 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1060 // Statistic counter structure
1062 typedef struct _COUNTER_802_3
1064 // General Stats
1065 ULONG GoodTransmits;
1066 ULONG GoodReceives;
1067 ULONG TxErrors;
1068 ULONG RxErrors;
1069 ULONG RxNoBuffer;
1071 // Ethernet Stats
1072 ULONG RcvAlignmentErrors;
1073 ULONG OneCollision;
1074 ULONG MoreCollisions;
1076 } COUNTER_802_3, *PCOUNTER_802_3;
1078 typedef struct _COUNTER_802_11 {
1079 ULONG Length;
1080 LARGE_INTEGER LastTransmittedFragmentCount;
1081 LARGE_INTEGER TransmittedFragmentCount;
1082 LARGE_INTEGER MulticastTransmittedFrameCount;
1083 LARGE_INTEGER FailedCount;
1084 LARGE_INTEGER RetryCount;
1085 LARGE_INTEGER MultipleRetryCount;
1086 LARGE_INTEGER RTSSuccessCount;
1087 LARGE_INTEGER RTSFailureCount;
1088 LARGE_INTEGER ACKFailureCount;
1089 LARGE_INTEGER FrameDuplicateCount;
1090 LARGE_INTEGER ReceivedFragmentCount;
1091 LARGE_INTEGER MulticastReceivedFrameCount;
1092 LARGE_INTEGER FCSErrorCount;
1093 } COUNTER_802_11, *PCOUNTER_802_11;
1095 typedef struct _COUNTER_RALINK {
1096 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1097 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1098 ULONG BeenDisassociatedCount;
1099 ULONG BadCQIAutoRecoveryCount;
1100 ULONG PoorCQIRoamingCount;
1101 ULONG MgmtRingFullCount;
1102 ULONG RxCountSinceLastNULL;
1103 ULONG RxCount;
1104 ULONG RxRingErrCount;
1105 ULONG KickTxCount;
1106 ULONG TxRingErrCount;
1107 LARGE_INTEGER RealFcsErrCount;
1108 ULONG PendingNdisPacketCount;
1110 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1111 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1112 UINT32 OneSecTxDoneCount;
1113 ULONG OneSecRxCount;
1114 UINT32 OneSecTxAggregationCount;
1115 UINT32 OneSecRxAggregationCount;
1117 UINT32 OneSecFrameDuplicateCount;
1119 #ifdef RT2870
1120 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1121 #endif // RT2870 //
1123 UINT32 OneSecTxNoRetryOkCount;
1124 UINT32 OneSecTxRetryOkCount;
1125 UINT32 OneSecTxFailCount;
1126 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1127 UINT32 OneSecRxOkCnt; // RX without error
1128 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1129 UINT32 OneSecRxFcsErrCnt; // CRC error
1130 UINT32 OneSecBeaconSentCnt;
1131 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1132 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1133 ULONG DuplicateRcv;
1134 ULONG TxAggCount;
1135 ULONG TxNonAggCount;
1136 ULONG TxAgg1MPDUCount;
1137 ULONG TxAgg2MPDUCount;
1138 ULONG TxAgg3MPDUCount;
1139 ULONG TxAgg4MPDUCount;
1140 ULONG TxAgg5MPDUCount;
1141 ULONG TxAgg6MPDUCount;
1142 ULONG TxAgg7MPDUCount;
1143 ULONG TxAgg8MPDUCount;
1144 ULONG TxAgg9MPDUCount;
1145 ULONG TxAgg10MPDUCount;
1146 ULONG TxAgg11MPDUCount;
1147 ULONG TxAgg12MPDUCount;
1148 ULONG TxAgg13MPDUCount;
1149 ULONG TxAgg14MPDUCount;
1150 ULONG TxAgg15MPDUCount;
1151 ULONG TxAgg16MPDUCount;
1153 LARGE_INTEGER TransmittedOctetsInAMSDU;
1154 LARGE_INTEGER TransmittedAMSDUCount;
1155 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1156 LARGE_INTEGER ReceivedAMSDUCount;
1157 LARGE_INTEGER TransmittedAMPDUCount;
1158 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1159 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1160 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1161 } COUNTER_RALINK, *PCOUNTER_RALINK;
1163 typedef struct _PID_COUNTER {
1164 ULONG TxAckRequiredCount; // CRC error
1165 ULONG TxAggreCount;
1166 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1167 ULONG LastSuccessRate;
1168 } PID_COUNTER, *PPID_COUNTER;
1170 typedef struct _COUNTER_DRS {
1171 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1172 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1173 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1174 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1175 ULONG CurrTxRateStableTime; // # of second in current TX rate
1176 BOOLEAN fNoisyEnvironment;
1177 BOOLEAN fLastSecAccordingRSSI;
1178 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1179 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1180 ULONG LastTxOkCount;
1181 } COUNTER_DRS, *PCOUNTER_DRS;
1184 // Arcfour Structure Added by PaulWu
1186 typedef struct _ARCFOUR
1188 UINT X;
1189 UINT Y;
1190 UCHAR STATE[256];
1191 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1193 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1194 typedef struct _RECEIVE_SETTING {
1195 #ifdef RT_BIG_ENDIAN
1196 USHORT MIMO:1;
1197 USHORT OFDM:1;
1198 USHORT rsv:3;
1199 USHORT STBC:2; //SPACE
1200 USHORT ShortGI:1;
1201 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1202 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1203 #else
1204 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1205 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1206 USHORT ShortGI:1;
1207 USHORT STBC:2; //SPACE
1208 USHORT rsv:3;
1209 USHORT OFDM:1;
1210 USHORT MIMO:1;
1211 #endif
1212 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1214 // Shared key data structure
1215 typedef struct _WEP_KEY {
1216 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1217 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1218 } WEP_KEY, *PWEP_KEY;
1220 typedef struct _CIPHER_KEY {
1221 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1222 UCHAR RxMic[8]; // make alignment
1223 UCHAR TxMic[8];
1224 UCHAR TxTsc[6]; // 48bit TSC value
1225 UCHAR RxTsc[6]; // 48bit TSC value
1226 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1227 UCHAR KeyLen;
1228 #ifdef CONFIG_STA_SUPPORT
1229 UCHAR BssId[6];
1230 #endif // CONFIG_STA_SUPPORT //
1231 // Key length for each key, 0: entry is invalid
1232 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1233 } CIPHER_KEY, *PCIPHER_KEY;
1235 typedef struct _BBP_TUNING_STRUCT {
1236 BOOLEAN Enable;
1237 UCHAR FalseCcaCountUpperBound; // 100 per sec
1238 UCHAR FalseCcaCountLowerBound; // 10 per sec
1239 UCHAR R17LowerBound; // specified in E2PROM
1240 UCHAR R17UpperBound; // 0x68 according to David Tung
1241 UCHAR CurrentR17Value;
1242 } BBP_TUNING, *PBBP_TUNING;
1244 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1245 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1246 UCHAR EvaluateStableCnt;
1247 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1248 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1249 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1250 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1251 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1252 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1253 SHORT Pair1LastAvgRssi; //
1254 SHORT Pair2LastAvgRssi; //
1255 ULONG RcvPktNumWhenEvaluate;
1256 BOOLEAN FirstPktArrivedWhenEvaluate;
1257 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1258 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1260 typedef struct _LEAP_AUTH_INFO {
1261 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1262 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1263 UCHAR Reserve[2];
1264 UCHAR UserName[256]; //LEAP, User name
1265 ULONG UserNameLen;
1266 UCHAR Password[256]; //LEAP, User Password
1267 ULONG PasswordLen;
1268 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1270 typedef struct {
1271 UCHAR Addr[MAC_ADDR_LEN];
1272 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1273 //00 02-Authentication timeout
1274 //00 03-Challenge from AP failed
1275 //00 04-Challenge to AP failed
1276 BOOLEAN Reported;
1277 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1279 typedef struct {
1280 UCHAR RogueApNr;
1281 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1282 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1284 typedef struct {
1285 BOOLEAN Enable;
1286 UCHAR Delta;
1287 BOOLEAN PlusSign;
1288 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1291 // Receive Tuple Cache Format
1293 typedef struct _TUPLE_CACHE {
1294 BOOLEAN Valid;
1295 UCHAR MacAddress[MAC_ADDR_LEN];
1296 USHORT Sequence;
1297 USHORT Frag;
1298 } TUPLE_CACHE, *PTUPLE_CACHE;
1301 // Fragment Frame structure
1303 typedef struct _FRAGMENT_FRAME {
1304 PNDIS_PACKET pFragPacket;
1305 ULONG RxSize;
1306 USHORT Sequence;
1307 USHORT LastFrag;
1308 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1309 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1313 // Packet information for NdisQueryPacket
1315 typedef struct _PACKET_INFO {
1316 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1317 UINT BufferCount ; // Number of Buffer descriptor chained
1318 UINT TotalPacketLength ; // Self explained
1319 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1320 } PACKET_INFO, *PPACKET_INFO;
1323 // Tkip Key structure which RC4 key & MIC calculation
1325 typedef struct _TKIP_KEY_INFO {
1326 UINT nBytesInM; // # bytes in M for MICKEY
1327 ULONG IV16;
1328 ULONG IV32;
1329 ULONG K0; // for MICKEY Low
1330 ULONG K1; // for MICKEY Hig
1331 ULONG L; // Current state for MICKEY
1332 ULONG R; // Current state for MICKEY
1333 ULONG M; // Message accumulator for MICKEY
1334 UCHAR RC4KEY[16];
1335 UCHAR MIC[8];
1336 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1339 // Private / Misc data, counters for driver internal use
1341 typedef struct __PRIVATE_STRUC {
1342 UINT SystemResetCnt; // System reset counter
1343 UINT TxRingFullCnt; // Tx ring full occurrance number
1344 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1345 // Variables for WEP encryption / decryption in rtmp_wep.c
1346 UINT FCSCRC32;
1347 ARCFOURCONTEXT WEPCONTEXT;
1348 // Tkip stuff
1349 TKIP_KEY_INFO Tx;
1350 TKIP_KEY_INFO Rx;
1351 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1353 // structure to tune BBP R66 (BBP TUNING)
1354 typedef struct _BBP_R66_TUNING {
1355 BOOLEAN bEnable;
1356 USHORT FalseCcaLowerThreshold; // default 100
1357 USHORT FalseCcaUpperThreshold; // default 512
1358 UCHAR R66Delta;
1359 UCHAR R66CurrentValue;
1360 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1361 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1363 // structure to store channel TX power
1364 typedef struct _CHANNEL_TX_POWER {
1365 USHORT RemainingTimeForUse; //unit: sec
1366 UCHAR Channel;
1367 #ifdef DOT11N_DRAFT3
1368 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1369 #endif // DOT11N_DRAFT3 //
1370 CHAR Power;
1371 CHAR Power2;
1372 UCHAR MaxTxPwr;
1373 UCHAR DfsReq;
1374 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1376 // structure to store 802.11j channel TX power
1377 typedef struct _CHANNEL_11J_TX_POWER {
1378 UCHAR Channel;
1379 UCHAR BW; // BW_10 or BW_20
1380 CHAR Power;
1381 CHAR Power2;
1382 USHORT RemainingTimeForUse; //unit: sec
1383 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1385 typedef enum _ABGBAND_STATE_ {
1386 UNKNOWN_BAND,
1387 BG_BAND,
1388 A_BAND,
1389 } ABGBAND_STATE;
1391 typedef struct _MLME_STRUCT {
1392 #ifdef CONFIG_STA_SUPPORT
1393 // STA state machines
1394 STATE_MACHINE CntlMachine;
1395 STATE_MACHINE AssocMachine;
1396 STATE_MACHINE AuthMachine;
1397 STATE_MACHINE AuthRspMachine;
1398 STATE_MACHINE SyncMachine;
1399 STATE_MACHINE WpaPskMachine;
1400 STATE_MACHINE LeapMachine;
1401 STATE_MACHINE AironetMachine;
1402 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1403 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1404 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1405 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1406 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1407 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1408 #endif // CONFIG_STA_SUPPORT //
1409 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1410 // Action
1411 STATE_MACHINE ActMachine;
1414 #ifdef QOS_DLS_SUPPORT
1415 STATE_MACHINE DlsMachine;
1416 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1417 #endif // QOS_DLS_SUPPORT //
1422 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1423 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1424 ULONG LastSendNULLpsmTime;
1426 BOOLEAN bRunning;
1427 NDIS_SPIN_LOCK TaskLock;
1428 MLME_QUEUE Queue;
1430 UINT ShiftReg;
1432 RALINK_TIMER_STRUCT PeriodicTimer;
1433 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1434 RALINK_TIMER_STRUCT LinkDownTimer;
1435 RALINK_TIMER_STRUCT LinkUpTimer;
1436 ULONG PeriodicRound;
1437 ULONG OneSecPeriodicRound;
1439 UCHAR RealRxPath;
1440 BOOLEAN bLowThroughput;
1441 BOOLEAN bEnableAutoAntennaCheck;
1442 RALINK_TIMER_STRUCT RxAntEvalTimer;
1444 #ifdef RT30xx
1445 UCHAR CaliBW40RfR24;
1446 UCHAR CaliBW20RfR24;
1447 #endif // RT30xx //
1449 } MLME_STRUCT, *PMLME_STRUCT;
1451 // structure for radar detection and channel switch
1452 typedef struct _RADAR_DETECT_STRUCT {
1453 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1454 UCHAR CSCount; //Channel switch counter
1455 UCHAR CSPeriod; //Channel switch period (beacon count)
1456 UCHAR RDCount; //Radar detection counter
1457 UCHAR RDMode; //Radar Detection mode
1458 UCHAR RDDurRegion; //Radar detection duration region
1459 UCHAR BBPR16;
1460 UCHAR BBPR17;
1461 UCHAR BBPR18;
1462 UCHAR BBPR21;
1463 UCHAR BBPR22;
1464 UCHAR BBPR64;
1465 ULONG InServiceMonitorCount; // unit: sec
1466 UINT8 DfsSessionTime;
1467 BOOLEAN bFastDfs;
1468 UINT8 ChMovingTime;
1469 UINT8 LongPulseRadarTh;
1470 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1472 #ifdef CARRIER_DETECTION_SUPPORT
1473 typedef enum CD_STATE_n
1475 CD_NORMAL,
1476 CD_SILENCE,
1477 CD_MAX_STATE
1478 } CD_STATE;
1480 typedef struct CARRIER_DETECTION_s
1482 BOOLEAN Enable;
1483 UINT8 CDSessionTime;
1484 UINT8 CDPeriod;
1485 CD_STATE CD_State;
1486 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1487 #endif // CARRIER_DETECTION_SUPPORT //
1489 typedef enum _REC_BLOCKACK_STATUS
1491 Recipient_NONE=0,
1492 Recipient_USED,
1493 Recipient_HandleRes,
1494 Recipient_Accept
1495 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1497 typedef enum _ORI_BLOCKACK_STATUS
1499 Originator_NONE=0,
1500 Originator_USED,
1501 Originator_WaitRes,
1502 Originator_Done
1503 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1505 #ifdef DOT11_N_SUPPORT
1506 typedef struct _BA_ORI_ENTRY{
1507 UCHAR Wcid;
1508 UCHAR TID;
1509 UCHAR BAWinSize;
1510 UCHAR Token;
1511 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1512 USHORT Sequence;
1513 USHORT TimeOutValue;
1514 ORI_BLOCKACK_STATUS ORI_BA_Status;
1515 RALINK_TIMER_STRUCT ORIBATimer;
1516 PVOID pAdapter;
1517 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1519 typedef struct _BA_REC_ENTRY {
1520 UCHAR Wcid;
1521 UCHAR TID;
1522 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1523 //UCHAR NumOfRxPkt;
1524 //UCHAR Curindidx; // the head in the RX reordering buffer
1525 USHORT LastIndSeq;
1526 // USHORT LastIndSeqAtTimer;
1527 USHORT TimeOutValue;
1528 RALINK_TIMER_STRUCT RECBATimer;
1529 ULONG LastIndSeqAtTimer;
1530 ULONG nDropPacket;
1531 ULONG rcvSeq;
1532 REC_BLOCKACK_STATUS REC_BA_Status;
1533 // UCHAR RxBufIdxUsed;
1534 // corresponding virtual address for RX reordering packet storage.
1535 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1536 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1537 // struct _BA_REC_ENTRY *pNext;
1538 PVOID pAdapter;
1539 struct reordering_list list;
1540 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1543 typedef struct {
1544 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1545 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1546 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1547 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1548 } BA_TABLE, *PBA_TABLE;
1550 //For QureyBATableOID use;
1551 typedef struct PACKED _OID_BA_REC_ENTRY{
1552 UCHAR MACAddr[MAC_ADDR_LEN];
1553 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1554 UCHAR rsv;
1555 UCHAR BufSize[8];
1556 REC_BLOCKACK_STATUS REC_BA_Status[8];
1557 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1559 //For QureyBATableOID use;
1560 typedef struct PACKED _OID_BA_ORI_ENTRY{
1561 UCHAR MACAddr[MAC_ADDR_LEN];
1562 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
1563 UCHAR rsv;
1564 UCHAR BufSize[8];
1565 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1566 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1568 typedef struct _QUERYBA_TABLE{
1569 OID_BA_ORI_ENTRY BAOriEntry[32];
1570 OID_BA_REC_ENTRY BARecEntry[32];
1571 UCHAR OriNum;// Number of below BAOriEntry
1572 UCHAR RecNum;// Number of below BARecEntry
1573 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1575 typedef union _BACAP_STRUC {
1576 #ifdef RT_BIG_ENDIAN
1577 struct {
1578 UINT32 :4;
1579 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.
1580 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1581 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1582 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1583 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1584 UINT32 MpduDensity:3;
1585 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1586 UINT32 AutoBA:1; // automatically BA
1587 UINT32 TxBAWinLimit:8;
1588 UINT32 RxBAWinLimit:8;
1589 } field;
1590 #else
1591 struct {
1592 UINT32 RxBAWinLimit:8;
1593 UINT32 TxBAWinLimit:8;
1594 UINT32 AutoBA:1; // automatically BA
1595 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1596 UINT32 MpduDensity:3;
1597 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1598 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1599 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1600 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1601 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.
1602 UINT32 :4;
1603 } field;
1604 #endif
1605 UINT32 word;
1606 } BACAP_STRUC, *PBACAP_STRUC;
1607 #endif // DOT11_N_SUPPORT //
1609 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1610 typedef struct _IOT_STRUC {
1611 UCHAR Threshold[2];
1612 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1613 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1614 ULONG OneSecInWindowCount;
1615 ULONG OneSecFrameDuplicateCount;
1616 ULONG OneSecOutWindowCount;
1617 UCHAR DelOriAct;
1618 UCHAR DelRecAct;
1619 UCHAR RTSShortProt;
1620 UCHAR RTSLongProt;
1621 BOOLEAN bRTSLongProtOn;
1622 #ifdef CONFIG_STA_SUPPORT
1623 BOOLEAN bLastAtheros;
1624 BOOLEAN bCurrentAtheros;
1625 BOOLEAN bNowAtherosBurstOn;
1626 BOOLEAN bNextDisableRxBA;
1627 BOOLEAN bToggle;
1628 #endif // CONFIG_STA_SUPPORT //
1629 } IOT_STRUC, *PIOT_STRUC;
1631 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1632 typedef union _REG_TRANSMIT_SETTING {
1633 #ifdef RT_BIG_ENDIAN
1634 struct {
1635 UINT32 rsv:13;
1636 UINT32 EXTCHA:2;
1637 UINT32 HTMODE:1;
1638 UINT32 TRANSNO:2;
1639 UINT32 STBC:1; //SPACE
1640 UINT32 ShortGI:1;
1641 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1642 UINT32 TxBF:1; // 3*3
1643 UINT32 rsv0:10;
1644 //UINT32 MCS:7; // MCS
1645 //UINT32 PhyMode:4;
1646 } field;
1647 #else
1648 struct {
1649 //UINT32 PhyMode:4;
1650 //UINT32 MCS:7; // MCS
1651 UINT32 rsv0:10;
1652 UINT32 TxBF:1;
1653 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1654 UINT32 ShortGI:1;
1655 UINT32 STBC:1; //SPACE
1656 UINT32 TRANSNO:2;
1657 UINT32 HTMODE:1;
1658 UINT32 EXTCHA:2;
1659 UINT32 rsv:13;
1660 } field;
1661 #endif
1662 UINT32 word;
1663 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1665 typedef union _DESIRED_TRANSMIT_SETTING {
1666 #ifdef RT_BIG_ENDIAN
1667 struct {
1668 USHORT rsv:3;
1669 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1670 USHORT PhyMode:4;
1671 USHORT MCS:7; // MCS
1672 } field;
1673 #else
1674 struct {
1675 USHORT MCS:7; // MCS
1676 USHORT PhyMode:4;
1677 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1678 USHORT rsv:3;
1679 } field;
1680 #endif
1681 USHORT word;
1682 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1684 typedef struct {
1685 BOOLEAN IsRecipient;
1686 UCHAR MACAddr[MAC_ADDR_LEN];
1687 UCHAR TID;
1688 UCHAR nMSDU;
1689 USHORT TimeOut;
1690 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1691 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1694 // Multiple SSID structure
1696 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1697 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1699 /* clear bcmc TIM bit */
1700 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1701 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1703 /* set bcmc TIM bit */
1704 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1705 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1707 /* clear a station PS TIM bit */
1708 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1709 { UCHAR tim_offset = wcid >> 3; \
1710 UCHAR bit_offset = wcid & 0x7; \
1711 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1713 /* set a station PS TIM bit */
1714 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1715 { UCHAR tim_offset = wcid >> 3; \
1716 UCHAR bit_offset = wcid & 0x7; \
1717 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1719 #ifdef RT2870
1720 #define BEACON_BITMAP_MASK 0xff
1721 typedef struct _BEACON_SYNC_STRUCT_
1723 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1724 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1725 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1726 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1727 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1728 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1729 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1730 }BEACON_SYNC_STRUCT;
1731 #endif // RT2870 //
1733 typedef struct _MULTISSID_STRUCT {
1734 UCHAR Bssid[MAC_ADDR_LEN];
1735 UCHAR SsidLen;
1736 CHAR Ssid[MAX_LEN_OF_SSID];
1737 USHORT CapabilityInfo;
1739 PNET_DEV MSSIDDev;
1741 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1742 NDIS_802_11_WEP_STATUS WepStatus;
1743 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1744 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1746 ULONG TxCount;
1747 ULONG RxCount;
1748 ULONG ReceivedByteCount;
1749 ULONG TransmittedByteCount;
1750 ULONG RxErrorCount;
1751 ULONG RxDropCount;
1753 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1754 RT_HT_PHY_INFO DesiredHtPhyInfo;
1755 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1756 BOOLEAN bAutoTxRateSwitch;
1758 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1759 UCHAR DefaultKeyId;
1761 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1762 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1763 UCHAR DesiredRatesIndex;
1764 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1766 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1767 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1768 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1770 // WPA
1771 UCHAR GMK[32];
1772 UCHAR PMK[32];
1773 UCHAR GTK[32];
1774 BOOLEAN IEEE8021X;
1775 BOOLEAN PreAuth;
1776 UCHAR GNonce[32];
1777 UCHAR PortSecured;
1778 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1779 UCHAR BANClass3Data;
1780 ULONG IsolateInterStaTraffic;
1782 UCHAR RSNIE_Len[2];
1783 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1786 UCHAR TimIELocationInBeacon;
1787 UCHAR CapabilityInfoLocationInBeacon;
1788 // outgoing BEACON frame buffer and corresponding TXWI
1789 // PTXWI_STRUC BeaconTxWI; //
1790 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1792 BOOLEAN bHideSsid;
1793 UINT16 StationKeepAliveTime; // unit: second
1795 USHORT VLAN_VID;
1796 USHORT VLAN_Priority;
1798 RT_802_11_ACL AccessControlList;
1800 // EDCA Qos
1801 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1802 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1804 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1806 // For 802.1x daemon setting per BSS
1807 UCHAR radius_srv_num;
1808 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1810 #ifdef RTL865X_SOC
1811 unsigned int mylinkid;
1812 #endif
1815 UINT32 RcvdConflictSsidCount;
1816 UINT32 RcvdSpoofedAssocRespCount;
1817 UINT32 RcvdSpoofedReassocRespCount;
1818 UINT32 RcvdSpoofedProbeRespCount;
1819 UINT32 RcvdSpoofedBeaconCount;
1820 UINT32 RcvdSpoofedDisassocCount;
1821 UINT32 RcvdSpoofedAuthCount;
1822 UINT32 RcvdSpoofedDeauthCount;
1823 UINT32 RcvdSpoofedUnknownMgmtCount;
1824 UINT32 RcvdReplayAttackCount;
1826 CHAR RssiOfRcvdConflictSsid;
1827 CHAR RssiOfRcvdSpoofedAssocResp;
1828 CHAR RssiOfRcvdSpoofedReassocResp;
1829 CHAR RssiOfRcvdSpoofedProbeResp;
1830 CHAR RssiOfRcvdSpoofedBeacon;
1831 CHAR RssiOfRcvdSpoofedDisassoc;
1832 CHAR RssiOfRcvdSpoofedAuth;
1833 CHAR RssiOfRcvdSpoofedDeauth;
1834 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1835 CHAR RssiOfRcvdReplayAttack;
1837 BOOLEAN bBcnSntReq;
1838 UCHAR BcnBufIdx;
1839 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1843 #ifdef DOT11N_DRAFT3
1844 typedef enum _BSS2040COEXIST_FLAG{
1845 BSS_2040_COEXIST_DISABLE = 0,
1846 BSS_2040_COEXIST_TIMER_FIRED = 1,
1847 BSS_2040_COEXIST_INFO_SYNC = 2,
1848 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1849 }BSS2040COEXIST_FLAG;
1850 #endif // DOT11N_DRAFT3 //
1852 // configuration common to OPMODE_AP as well as OPMODE_STA
1853 typedef struct _COMMON_CONFIG {
1855 BOOLEAN bCountryFlag;
1856 UCHAR CountryCode[3];
1857 UCHAR Geography;
1858 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1859 UCHAR CountryRegionForABand; // Enum of country region for A band
1860 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1861 USHORT Dsifs; // in units of usec
1862 ULONG PacketFilter; // Packet filter for receiving
1864 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1865 UCHAR SsidLen; // the actual ssid length in used
1866 UCHAR LastSsidLen; // the actual ssid length in used
1867 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1868 UCHAR LastBssid[MAC_ADDR_LEN];
1870 UCHAR Bssid[MAC_ADDR_LEN];
1871 USHORT BeaconPeriod;
1872 UCHAR Channel;
1873 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1875 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1876 UCHAR SupRateLen;
1877 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1878 UCHAR ExtRateLen;
1879 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1880 UCHAR MaxDesiredRate;
1881 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1883 ULONG BasicRateBitmap; // backup basic ratebitmap
1885 BOOLEAN bAPSDCapable;
1886 BOOLEAN bInServicePeriod;
1887 BOOLEAN bAPSDAC_BE;
1888 BOOLEAN bAPSDAC_BK;
1889 BOOLEAN bAPSDAC_VI;
1890 BOOLEAN bAPSDAC_VO;
1891 BOOLEAN bNeedSendTriggerFrame;
1892 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1893 ULONG TriggerTimerCount;
1894 UCHAR MaxSPLength;
1895 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1896 // move to MULTISSID_STRUCT for MBSS
1897 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1898 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1899 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1900 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1901 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1902 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1903 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1904 //BOOLEAN bAutoTxRateSwitch;
1905 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1906 UCHAR RtsRate; // RATE_xxx
1907 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1908 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1909 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1911 USHORT RtsThreshold; // in unit of BYTE
1912 USHORT FragmentThreshold; // in unit of BYTE
1914 UCHAR TxPower; // in unit of mW
1915 ULONG TxPowerPercentage; // 0~100 %
1916 ULONG TxPowerDefault; // keep for TxPowerPercentage
1918 #ifdef DOT11_N_SUPPORT
1919 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1920 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1921 #endif // DOT11_N_SUPPORT //
1922 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1923 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1924 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1925 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1926 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1927 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1928 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1929 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1930 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1931 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1933 #ifdef DOT11_N_SUPPORT
1934 BOOLEAN bRdg;
1935 #endif // DOT11_N_SUPPORT //
1936 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1937 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1938 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1939 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1940 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1941 #ifdef CONFIG_STA_SUPPORT
1942 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1943 #endif // CONFIG_STA_SUPPORT //
1944 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1945 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1946 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1947 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1948 ULONG OpStatusFlags;
1950 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1951 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1952 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1954 // IEEE802.11H--DFS.
1955 RADAR_DETECT_STRUCT RadarDetect;
1957 #ifdef CARRIER_DETECTION_SUPPORT
1958 CARRIER_DETECTION CarrierDetect;
1959 #endif // CARRIER_DETECTION_SUPPORT //
1961 #ifdef DOT11_N_SUPPORT
1962 // HT
1963 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1964 //RT_HT_CAPABILITY SupportedHtPhy;
1965 RT_HT_CAPABILITY DesiredHtPhy;
1966 HT_CAPABILITY_IE HtCapability;
1967 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1968 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1969 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1970 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
1972 #ifdef DOT11N_DRAFT3
1973 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1974 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1976 //This IE is used for 20/40 BSS Coexistence.
1977 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1978 // ====== 11n D3.0 =======================>
1979 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1980 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1981 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1982 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1983 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1984 USHORT Dot11BssWidthChanTranDelayFactor;
1985 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1987 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1988 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1990 NDIS_SPIN_LOCK TriggerEventTabLock;
1991 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1992 BSS_2040_COEXIST_IE BSSCoexist2040;
1993 TRIGGER_EVENT_TAB TriggerEventTab;
1994 UCHAR ChannelListIdx;
1995 // <====== 11n D3.0 =======================
1996 BOOLEAN bOverlapScanning;
1997 #endif // DOT11N_DRAFT3 //
1999 BOOLEAN bHTProtect;
2000 BOOLEAN bMIMOPSEnable;
2001 BOOLEAN bBADecline;
2002 BOOLEAN bDisableReordering;
2003 BOOLEAN bForty_Mhz_Intolerant;
2004 BOOLEAN bExtChannelSwitchAnnouncement;
2005 BOOLEAN bRcvBSSWidthTriggerEvents;
2006 ULONG LastRcvBSSWidthTriggerEventsTime;
2008 UCHAR TxBASize;
2009 #endif // DOT11_N_SUPPORT //
2011 // Enable wireless event
2012 BOOLEAN bWirelessEvent;
2013 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
2015 // Tx & Rx Stream number selection
2016 UCHAR TxStream;
2017 UCHAR RxStream;
2019 // transmit phy mode, trasmit rate for Multicast.
2020 #ifdef MCAST_RATE_SPECIFIC
2021 UCHAR McastTransmitMcs;
2022 UCHAR McastTransmitPhyMode;
2023 #endif // MCAST_RATE_SPECIFIC //
2025 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2027 #ifdef RT2870
2028 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
2029 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
2030 RT_HT_CAPABILITY SupportedHtPhy;
2031 ULONG MaxPktOneTxBulk;
2032 UCHAR TxBulkFactor;
2033 UCHAR RxBulkFactor;
2035 BEACON_SYNC_STRUCT *pBeaconSync;
2036 RALINK_TIMER_STRUCT BeaconUpdateTimer;
2037 UINT32 BeaconAdjust;
2038 UINT32 BeaconFactor;
2039 UINT32 BeaconRemain;
2040 #endif // RT2870 //
2043 NDIS_SPIN_LOCK MeasureReqTabLock;
2044 PMEASURE_REQ_TAB pMeasureReqTab;
2046 NDIS_SPIN_LOCK TpcReqTabLock;
2047 PTPC_REQ_TAB pTpcReqTab;
2049 // transmit phy mode, trasmit rate for Multicast.
2050 #ifdef MCAST_RATE_SPECIFIC
2051 HTTRANSMIT_SETTING MCastPhyMode;
2052 #endif // MCAST_RATE_SPECIFIC //
2054 #ifdef SINGLE_SKU
2055 UINT16 DefineMaxTxPwr;
2056 #endif // SINGLE_SKU //
2059 } COMMON_CONFIG, *PCOMMON_CONFIG;
2062 #ifdef CONFIG_STA_SUPPORT
2063 /* Modified by Wu Xi-Kun 4/21/2006 */
2064 // STA configuration and status
2065 typedef struct _STA_ADMIN_CONFIG {
2066 // GROUP 1 -
2067 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2068 // the user intended configuration, but not necessary fully equal to the final
2069 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2070 // AP or IBSS holder).
2071 // Once initialized, user configuration can only be changed via OID_xxx
2072 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
2073 USHORT AtimWin; // used when starting a new IBSS
2075 // GROUP 2 -
2076 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2077 // the user intended configuration, and should be always applied to the final
2078 // settings in ACTIVE BSS without compromising with the BSS holder.
2079 // Once initialized, user configuration can only be changed via OID_xxx
2080 UCHAR RssiTrigger;
2081 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2082 USHORT DefaultListenCount; // default listen count;
2083 ULONG WindowsPowerMode; // Power mode for AC power
2084 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2085 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2086 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2087 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2089 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2090 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2091 USHORT DisassocReason;
2092 UCHAR DisassocSta[MAC_ADDR_LEN];
2093 USHORT DeauthReason;
2094 UCHAR DeauthSta[MAC_ADDR_LEN];
2095 USHORT AuthFailReason;
2096 UCHAR AuthFailSta[MAC_ADDR_LEN];
2098 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2099 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2100 NDIS_802_11_WEP_STATUS WepStatus;
2101 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2103 // Add to support different cipher suite for WPA2/WPA mode
2104 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2105 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2106 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2107 USHORT RsnCapability;
2109 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2111 UCHAR PMK[32]; // WPA PSK mode PMK
2112 UCHAR PTK[64]; // WPA PSK mode PTK
2113 UCHAR GTK[32]; // GTK from authenticator
2114 BSSID_INFO SavedPMK[PMKID_NO];
2115 UINT SavedPMKNum; // Saved PMKID number
2117 UCHAR DefaultKeyId;
2120 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2121 UCHAR PortSecured;
2123 // For WPA countermeasures
2124 ULONG LastMicErrorTime; // record last MIC error time
2125 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2126 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2127 // For WPA-PSK supplicant state
2128 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2129 UCHAR ReplayCounter[8];
2130 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2131 UCHAR SNonce[32]; // SNonce for WPA-PSK
2133 UCHAR LastSNR0; // last received BEACON's SNR
2134 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2135 RSSI_SAMPLE RssiSample;
2136 ULONG NumOfAvgRssiSample;
2138 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2139 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2140 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2141 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2143 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2144 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2145 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2146 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2147 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2148 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2149 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2151 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2152 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2153 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2155 // New for WPA, windows want us to to keep association information and
2156 // Fixed IEs from last association response
2157 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2158 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2159 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2160 USHORT ResVarIELen; // Length of next VIE include EID & Length
2161 UCHAR ResVarIEs[MAX_VIE_LEN];
2163 UCHAR RSNIE_Len;
2164 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2166 // New variables used for CCX 1.0
2167 BOOLEAN bCkipOn;
2168 BOOLEAN bCkipCmicOn;
2169 UCHAR CkipFlag;
2170 UCHAR GIV[3]; //for CCX iv
2171 UCHAR RxSEQ[4];
2172 UCHAR TxSEQ[4];
2173 UCHAR CKIPMIC[4];
2174 UCHAR LeapAuthMode;
2175 LEAP_AUTH_INFO LeapAuthInfo;
2176 UCHAR HashPwd[16];
2177 UCHAR NetworkChallenge[8];
2178 UCHAR NetworkChallengeResponse[24];
2179 UCHAR PeerChallenge[8];
2181 UCHAR PeerChallengeResponse[24];
2182 UCHAR SessionKey[16]; //Network session keys (NSK)
2183 RALINK_TIMER_STRUCT LeapAuthTimer;
2184 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2186 // New control flags for CCX
2187 CCX_CONTROL CCXControl; // Master administration state
2188 BOOLEAN CCXEnable; // Actual CCX state
2189 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2190 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2191 UCHAR CCXReqType; // Current processing CCX request type
2192 BSS_TABLE CCXBssTab; // BSS Table
2193 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2194 USHORT FrameReportLen; // Current Frame report length
2195 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2196 USHORT RPIDensity[8]; // Array for RPI density collection
2197 // Start address of each BSS table within FrameReportBuf
2198 // It's important to update the RxPower of the corresponding Bss
2199 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2200 USHORT BeaconToken; // Token for beacon report
2201 ULONG LastBssIndex; // Most current reported Bss index
2202 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2203 UCHAR RMReqCnt; // Number of measurement request saved.
2204 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2205 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2206 // It must be the same channel with maximum duration
2207 USHORT ParallelDuration; // Maximum duration for parallel measurement
2208 UCHAR ParallelChannel; // Only one channel with parallel measurement
2209 USHORT IAPPToken; // IAPP dialog token
2210 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2211 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2212 // Hack for channel load and noise histogram parameters
2213 UCHAR NHFactor; // Parameter for Noise histogram
2214 UCHAR CLFactor; // Parameter for channel load
2216 UCHAR KRK[16]; //Key Refresh Key.
2217 UCHAR BTK[32]; //Base Transient Key
2218 BOOLEAN CCKMLinkUpFlag;
2219 ULONG CCKMRN; //(Re)Association request number.
2220 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2221 UCHAR AironetCellPowerLimit; //in dBm
2222 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2223 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2224 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2225 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2226 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2227 USHORT CCXAdjacentAPChannel;
2228 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2230 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2231 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2233 UCHAR DtimCount; // 0.. DtimPeriod-1
2234 UCHAR DtimPeriod; // default = 3
2236 #ifdef QOS_DLS_SUPPORT
2237 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2238 UCHAR DlsReplayCounter[8];
2239 #endif // QOS_DLS_SUPPORT //
2240 ////////////////////////////////////////////////////////////////////////////////////////
2241 // This is only for WHQL test.
2242 BOOLEAN WhqlTest;
2243 ////////////////////////////////////////////////////////////////////////////////////////
2245 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2246 // Fast Roaming
2247 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2248 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2250 #ifdef WPA_SUPPLICANT_SUPPORT
2251 BOOLEAN IEEE8021X;
2252 BOOLEAN IEEE8021x_required_keys;
2253 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2254 UCHAR DesireSharedKeyId;
2256 // 0: driver ignores wpa_supplicant
2257 // 1: wpa_supplicant initiates scanning and AP selection
2258 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2259 UCHAR WpaSupplicantUP;
2260 UCHAR WpaSupplicantScanCount;
2261 #endif // WPA_SUPPLICANT_SUPPORT //
2263 CHAR dev_name[16];
2264 USHORT OriDevType;
2266 BOOLEAN bTGnWifiTest;
2267 BOOLEAN bScanReqIsFromWebUI;
2269 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2270 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2271 RT_HT_PHY_INFO DesiredHtPhyInfo;
2272 BOOLEAN bAutoTxRateSwitch;
2275 #ifdef EXT_BUILD_CHANNEL_LIST
2276 UCHAR IEEE80211dClientMode;
2277 UCHAR StaOriCountryCode[3];
2278 UCHAR StaOriGeography;
2279 #endif // EXT_BUILD_CHANNEL_LIST //
2280 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2282 // This data structure keep the current active BSS/IBSS's configuration that this STA
2283 // had agreed upon joining the network. Which means these parameters are usually decided
2284 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2285 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2286 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2287 // the current active settings.
2288 typedef struct _STA_ACTIVE_CONFIG {
2289 USHORT Aid;
2290 USHORT AtimWin; // in kusec; IBSS parameter set element
2291 USHORT CapabilityInfo;
2292 USHORT CfpMaxDuration;
2293 USHORT CfpPeriod;
2295 // Copy supported rate from desired AP's beacon. We are trying to match
2296 // AP's supported and extended rate settings.
2297 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2298 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2299 UCHAR SupRateLen;
2300 UCHAR ExtRateLen;
2301 // Copy supported ht from desired AP's beacon. We are trying to match
2302 RT_HT_PHY_INFO SupportedPhyInfo;
2303 RT_HT_CAPABILITY SupportedHtPhy;
2304 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2305 #endif // CONFIG_STA_SUPPORT //
2307 #ifdef RT2870
2308 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2309 NDIS_802_11_MAC_ADDRESS MacAddr;
2310 USHORT MacTabMatchWCID; // ASIC
2311 CIPHER_KEY CipherKey;
2312 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2313 #endif // RT2870 //
2315 // ----------- start of AP --------------------------
2316 // AUTH-RSP State Machine Aux data structure
2317 typedef struct _AP_MLME_AUX {
2318 UCHAR Addr[MAC_ADDR_LEN];
2319 USHORT Alg;
2320 CHAR Challenge[CIPHER_TEXT_LEN];
2321 } AP_MLME_AUX, *PAP_MLME_AUX;
2323 // structure to define WPA Group Key Rekey Interval
2324 typedef struct PACKED _RT_802_11_WPA_REKEY {
2325 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2326 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2327 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2329 typedef struct _MAC_TABLE_ENTRY {
2330 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2331 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2332 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2333 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2334 BOOLEAN ValidAsMesh;
2335 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2336 BOOLEAN isCached;
2337 BOOLEAN bIAmBadAtheros;
2339 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2340 //jan for wpa
2341 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2342 UCHAR CMTimerRunning;
2343 UCHAR apidx; // MBSS number
2344 UCHAR RSNIE_Len;
2345 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2346 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2347 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2348 UCHAR PTK[64];
2349 UCHAR ReTryCounter;
2350 RALINK_TIMER_STRUCT RetryTimer;
2351 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2352 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2353 NDIS_802_11_WEP_STATUS WepStatus;
2354 AP_WPA_STATE WpaState;
2355 GTK_STATE GTKState;
2356 USHORT PortSecured;
2357 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2358 CIPHER_KEY PairwiseKey;
2359 PVOID pAd;
2360 INT PMKID_CacheIdx;
2361 UCHAR PMKID[LEN_PMKID];
2364 UCHAR Addr[MAC_ADDR_LEN];
2365 UCHAR PsMode;
2366 SST Sst;
2367 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2368 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2369 USHORT Aid;
2370 USHORT CapabilityInfo;
2371 UCHAR LastRssi;
2372 ULONG NoDataIdleCount;
2373 UINT16 StationKeepAliveCount; // unit: second
2374 ULONG PsQIdleCount;
2375 QUEUE_HEADER PsQueue;
2377 UINT32 StaConnectTime; // the live time of this station since associated with AP
2380 #ifdef DOT11_N_SUPPORT
2381 BOOLEAN bSendBAR;
2382 USHORT NoBADataCountDown;
2384 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2385 UINT TxBFCount; // 3*3
2386 #endif // DOT11_N_SUPPORT //
2387 UINT FIFOCount;
2388 UINT DebugFIFOCount;
2389 UINT DebugTxCount;
2390 BOOLEAN bDlsInit;
2393 //====================================================
2394 //WDS entry needs these
2395 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2396 UINT MatchWDSTabIdx;
2397 UCHAR MaxSupportedRate;
2398 UCHAR CurrTxRate;
2399 UCHAR CurrTxRateIndex;
2400 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2401 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2402 // USHORT OneSecTxOkCount;
2403 UINT32 OneSecTxNoRetryOkCount;
2404 UINT32 OneSecTxRetryOkCount;
2405 UINT32 OneSecTxFailCount;
2406 UINT32 ContinueTxFailCnt;
2407 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2408 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2409 //====================================================
2413 #ifdef CONFIG_STA_SUPPORT
2414 #ifdef QOS_DLS_SUPPORT
2415 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2416 #endif // QOS_DLS_SUPPORT //
2417 #endif // CONFIG_STA_SUPPORT //
2419 BOOLEAN fNoisyEnvironment;
2420 BOOLEAN fLastSecAccordingRSSI;
2421 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2422 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2423 ULONG LastTxOkCount;
2424 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2426 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2427 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2428 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2429 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2430 ULONG ClientStatusFlags;
2432 // TODO: Shall we move that to DOT11_N_SUPPORT???
2433 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2435 #ifdef DOT11_N_SUPPORT
2436 // HT EWC MIMO-N used parameters
2437 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2438 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2439 USHORT TXAutoBAbitmap;
2440 USHORT BADeclineBitmap;
2441 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2442 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2443 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2445 // 802.11n features.
2446 UCHAR MpduDensity;
2447 UCHAR MaxRAmpduFactor;
2448 UCHAR AMsduSize;
2449 UCHAR MmpsMode; // MIMO power save more.
2451 HT_CAPABILITY_IE HTCapability;
2453 #ifdef DOT11N_DRAFT3
2454 UCHAR BSS2040CoexistenceMgmtSupport;
2455 #endif // DOT11N_DRAFT3 //
2456 #endif // DOT11_N_SUPPORT //
2458 BOOLEAN bAutoTxRateSwitch;
2460 UCHAR RateLen;
2461 struct _MAC_TABLE_ENTRY *pNext;
2462 USHORT TxSeq[NUM_OF_TID];
2463 USHORT NonQosDataSeq;
2465 RSSI_SAMPLE RssiSample;
2467 UINT32 TXMCSExpected[16];
2468 UINT32 TXMCSSuccessful[16];
2469 UINT32 TXMCSFailed[16];
2470 UINT32 TXMCSAutoFallBack[16][16];
2472 #ifdef CONFIG_STA_SUPPORT
2473 ULONG LastBeaconRxTime;
2474 #endif // CONFIG_STA_SUPPORT //
2475 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2477 typedef struct _MAC_TABLE {
2478 USHORT Size;
2479 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2480 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2481 QUEUE_HEADER McastPsQueue;
2482 ULONG PsQIdleCount;
2483 BOOLEAN fAnyStationInPsm;
2484 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2485 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2486 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2487 #ifdef DOT11_N_SUPPORT
2488 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2489 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2490 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2491 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2492 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2493 #endif // DOT11_N_SUPPORT //
2494 } MAC_TABLE, *PMAC_TABLE;
2496 #ifdef DOT11_N_SUPPORT
2497 #define IS_HT_STA(_pMacEntry) \
2498 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2500 #define IS_HT_RATE(_pMacEntry) \
2501 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2503 #define PEER_IS_HT_RATE(_pMacEntry) \
2504 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2505 #endif // DOT11_N_SUPPORT //
2507 typedef struct _WDS_ENTRY {
2508 BOOLEAN Valid;
2509 UCHAR Addr[MAC_ADDR_LEN];
2510 ULONG NoDataIdleCount;
2511 struct _WDS_ENTRY *pNext;
2512 } WDS_ENTRY, *PWDS_ENTRY;
2514 typedef struct _WDS_TABLE_ENTRY {
2515 USHORT Size;
2516 UCHAR WdsAddr[MAC_ADDR_LEN];
2517 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2518 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2519 UCHAR MaxSupportedRate;
2520 UCHAR CurrTxRate;
2521 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2522 USHORT OneSecTxOkCount;
2523 USHORT OneSecTxRetryOkCount;
2524 USHORT OneSecTxFailCount;
2525 ULONG CurrTxRateStableTime; // # of second in current TX rate
2526 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2527 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2529 typedef struct _RT_802_11_WDS_ENTRY {
2530 PNET_DEV dev;
2531 UCHAR Valid;
2532 UCHAR PhyMode;
2533 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2534 UCHAR MacTabMatchWCID; // ASIC
2535 NDIS_802_11_WEP_STATUS WepStatus;
2536 UCHAR KeyIdx;
2537 CIPHER_KEY WdsKey;
2538 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2539 RT_HT_PHY_INFO DesiredHtPhyInfo;
2540 BOOLEAN bAutoTxRateSwitch;
2541 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2542 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2544 typedef struct _WDS_TABLE {
2545 UCHAR Mode;
2546 ULONG Size;
2547 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2548 } WDS_TABLE, *PWDS_TABLE;
2550 typedef struct _APCLI_STRUCT {
2551 PNET_DEV dev;
2552 #ifdef RTL865X_SOC
2553 unsigned int mylinkid;
2554 #endif
2555 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2556 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2557 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2558 UCHAR SsidLen;
2559 CHAR Ssid[MAX_LEN_OF_SSID];
2561 UCHAR CfgSsidLen;
2562 CHAR CfgSsid[MAX_LEN_OF_SSID];
2563 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2564 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2566 ULONG ApCliRcvBeaconTime;
2568 ULONG CtrlCurrState;
2569 ULONG SyncCurrState;
2570 ULONG AuthCurrState;
2571 ULONG AssocCurrState;
2572 ULONG WpaPskCurrState;
2574 USHORT AuthReqCnt;
2575 USHORT AssocReqCnt;
2577 ULONG ClientStatusFlags;
2578 UCHAR MpduDensity;
2580 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2581 NDIS_802_11_WEP_STATUS WepStatus;
2583 // Add to support different cipher suite for WPA2/WPA mode
2584 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2585 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2586 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2587 USHORT RsnCapability;
2589 UCHAR PSK[100]; // reserve PSK key material
2590 UCHAR PSKLen;
2591 UCHAR PMK[32]; // WPA PSK mode PMK
2592 //UCHAR PTK[64]; // WPA PSK mode PTK
2593 UCHAR GTK[32]; // GTK from authenticator
2595 //CIPHER_KEY PairwiseKey;
2596 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2597 UCHAR DefaultKeyId;
2599 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2600 //UCHAR PortSecured;
2602 // store RSN_IE built by driver
2603 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2604 UCHAR RSNIE_Len;
2606 // For WPA countermeasures
2607 ULONG LastMicErrorTime; // record last MIC error time
2608 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2609 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2611 // For WPA-PSK supplicant state
2612 //WPA_STATE WpaState; // Default is SS_NOTUSE
2613 //UCHAR ReplayCounter[8];
2614 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2615 UCHAR SNonce[32]; // SNonce for WPA-PSK
2616 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2618 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2619 RT_HT_PHY_INFO DesiredHtPhyInfo;
2620 BOOLEAN bAutoTxRateSwitch;
2621 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2622 } APCLI_STRUCT, *PAPCLI_STRUCT;
2624 // ----------- end of AP ----------------------------
2626 #ifdef BLOCK_NET_IF
2627 typedef struct _BLOCK_QUEUE_ENTRY
2629 BOOLEAN SwTxQueueBlockFlag;
2630 LIST_HEADER NetIfList;
2631 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2632 #endif // BLOCK_NET_IF //
2635 struct wificonf
2637 BOOLEAN bShortGI;
2638 BOOLEAN bGreenField;
2644 typedef struct _INF_PCI_CONFIG
2646 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2647 }INF_PCI_CONFIG;
2649 typedef struct _INF_USB_CONFIG
2651 UINT BulkInEpAddr; // bulk-in endpoint address
2652 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2654 }INF_USB_CONFIG;
2656 #ifdef IKANOS_VX_1X0
2657 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2659 struct IKANOS_TX_INFO
2661 struct net_device *netdev;
2662 IkanosWlanTxCbFuncP *fp;
2664 #endif // IKANOS_VX_1X0 //
2666 #ifdef NINTENDO_AP
2667 typedef struct _NINDO_CTRL_BLOCK {
2669 RT_NINTENDO_TABLE DS_TABLE;
2671 #ifdef CHIP25XX
2672 spinlock_t NINTENDO_TABLE_Lock;
2673 #else
2674 NDIS_SPIN_LOCK NINTENDO_TABLE_Lock;
2675 #endif // CHIP25XX //
2677 UCHAR NINTENDO_UP_BUFFER[512];
2678 UCHAR Local_KeyIdx;
2679 CIPHER_KEY Local_SharedKey;
2680 UCHAR Local_bHideSsid;
2681 UCHAR Local_AuthMode;
2682 UCHAR Local_WepStatus;
2683 USHORT Local_CapabilityInfo;
2684 } NINDO_CTRL_BLOCK;
2685 #endif // NINTENDO_AP //
2688 #ifdef DBG_DIAGNOSE
2689 #define DIAGNOSE_TIME 10 // 10 sec
2690 typedef struct _RtmpDiagStrcut_
2691 { // Diagnosis Related element
2692 unsigned char inited;
2693 unsigned char qIdx;
2694 unsigned char ArrayStartIdx;
2695 unsigned char ArrayCurIdx;
2696 // Tx Related Count
2697 USHORT TxDataCnt[DIAGNOSE_TIME];
2698 USHORT TxFailCnt[DIAGNOSE_TIME];
2699 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2700 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2701 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2702 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2703 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2705 USHORT TxAggCnt[DIAGNOSE_TIME];
2706 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2707 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2708 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2709 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2710 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2712 // Rx Related Count
2713 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2714 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2715 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2716 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2717 }RtmpDiagStruct;
2718 #endif // DBG_DIAGNOSE //
2722 // The miniport adapter structure
2724 typedef struct _RTMP_ADAPTER
2726 PVOID OS_Cookie; // save specific structure relative to OS
2727 PNET_DEV net_dev;
2728 ULONG VirtualIfCnt;
2732 NDIS_SPIN_LOCK irq_lock;
2733 UCHAR irq_disabled;
2735 #ifdef RT2870
2736 /*****************************************************************************************/
2737 /* USB related parameters */
2738 /*****************************************************************************************/
2739 struct usb_config_descriptor *config;
2740 UINT BulkInEpAddr; // bulk-in endpoint address
2741 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2743 UINT NumberOfPipes;
2744 USHORT BulkOutMaxPacketSize;
2745 USHORT BulkInMaxPacketSize;
2747 //======Control Flags
2748 LONG PendingIoCount;
2749 ULONG BulkFlags;
2750 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2753 //======Timer Thread
2754 RT2870_TIMER_QUEUE TimerQ;
2755 NDIS_SPIN_LOCK TimerQLock;
2758 //======Cmd Thread
2759 CmdQ CmdQ;
2760 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2762 BOOLEAN TimerFunc_kill;
2763 BOOLEAN mlme_kill;
2766 //======Semaphores (event)
2767 struct semaphore mlme_semaphore; /* to sleep thread on */
2768 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2769 struct semaphore RTUSBTimer_semaphore;
2770 #ifdef INF_AMAZON_SE
2771 struct semaphore UsbVendorReq_semaphore;
2772 PVOID UsbVendorReqBuf;
2773 #endif // INF_AMAZON_SE //
2774 struct completion TimerQComplete;
2775 struct completion mlmeComplete;
2776 struct completion CmdQComplete;
2777 wait_queue_head_t *wait;
2779 //======Lock for 2870 ATE
2780 #ifdef RALINK_ATE
2781 NDIS_SPIN_LOCK GenericLock; // ATE Tx/Rx generic spinlock
2782 #endif // RALINK_ATE //
2784 #endif // RT2870 //
2787 /*****************************************************************************************/
2788 /* Both PCI/USB related parameters */
2789 /*****************************************************************************************/
2792 /*****************************************************************************************/
2793 /* Tx related parameters */
2794 /*****************************************************************************************/
2795 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2796 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2798 #ifdef RT2870
2799 // Data related context and AC specified, 4 AC supported
2800 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2801 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2803 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2804 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2806 // 4 sets of Bulk Out index and pending flag
2807 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2809 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2810 UCHAR bulkResetPipeid;
2811 BOOLEAN MgmtBulkPending;
2812 ULONG bulkResetReq[6];
2813 #endif // RT2870 //
2815 // resource for software backlog queues
2816 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2817 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2819 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2820 RTMP_MGMT_RING MgmtRing;
2821 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2824 /*****************************************************************************************/
2825 /* Rx related parameters */
2826 /*****************************************************************************************/
2829 #ifdef RT2870
2830 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2831 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2832 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2833 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2834 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2835 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2836 ULONG TransferBufferLength; // current length of the packet buffer
2837 ULONG ReadPosition; // current read position in a packet buffer
2838 #endif // RT2870 //
2841 /*****************************************************************************************/
2842 /* ASIC related parameters */
2843 /*****************************************************************************************/
2844 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2846 // ---------------------------
2847 // E2PROM
2848 // ---------------------------
2849 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2850 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2851 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2852 BOOLEAN EepromAccess;
2853 UCHAR EFuseTag;
2854 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2856 // ---------------------------
2857 // BBP Control
2858 // ---------------------------
2859 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2860 UCHAR BbpRssiToDbmDelta;
2861 BBP_R66_TUNING BbpTuning;
2863 // ----------------------------
2864 // RFIC control
2865 // ----------------------------
2866 UCHAR RfIcType; // RFIC_xxx
2867 ULONG RfFreqOffset; // Frequency offset for channel switching
2868 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2870 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2871 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2873 // This soft Rx Antenna Diversity mechanism is used only when user set
2874 // RX Antenna = DIVERSITY ON
2875 SOFT_RX_ANT_DIVERSITY RxAnt;
2877 UCHAR RFProgSeq;
2878 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2879 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2880 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2881 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2883 UCHAR ChannelListNum; // number of channel in ChannelList[]
2884 UCHAR Bbp94;
2885 BOOLEAN BbpForCCK;
2886 ULONG Tx20MPwrCfgABand[5];
2887 ULONG Tx20MPwrCfgGBand[5];
2888 ULONG Tx40MPwrCfgABand[5];
2889 ULONG Tx40MPwrCfgGBand[5];
2891 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2892 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2893 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2894 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2895 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2896 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2898 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2899 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2900 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2901 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2902 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2903 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2905 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2906 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2907 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2908 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2909 //---
2911 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2912 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2913 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2914 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2915 //---
2917 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2918 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2919 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2920 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2922 // ----------------------------
2923 // LED control
2924 // ----------------------------
2925 MCU_LEDCS_STRUC LedCntl;
2926 USHORT Led1; // read from EEPROM 0x3c
2927 USHORT Led2; // EEPROM 0x3e
2928 USHORT Led3; // EEPROM 0x40
2929 UCHAR LedIndicatorStregth;
2930 UCHAR RssiSingalstrengthOffet;
2931 BOOLEAN bLedOnScanning;
2932 UCHAR LedStatus;
2934 /*****************************************************************************************/
2935 /* 802.11 related parameters */
2936 /*****************************************************************************************/
2937 // outgoing BEACON frame buffer and corresponding TXD
2938 TXWI_STRUC BeaconTxWI;
2939 PUCHAR BeaconBuf;
2940 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2942 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2943 PSPOLL_FRAME PsPollFrame;
2944 HEADER_802_11 NullFrame;
2946 #ifdef RT2870
2947 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2948 TX_CONTEXT NullContext;
2949 TX_CONTEXT PsPollContext;
2950 TX_CONTEXT RTSContext;
2951 #endif // RT2870 //
2955 //=========AP===========
2958 //=======STA===========
2959 #ifdef CONFIG_STA_SUPPORT
2960 /* Modified by Wu Xi-Kun 4/21/2006 */
2961 // -----------------------------------------------
2962 // STA specific configuration & operation status
2963 // used only when pAd->OpMode == OPMODE_STA
2964 // -----------------------------------------------
2965 STA_ADMIN_CONFIG StaCfg; // user desired settings
2966 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2967 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2968 NDIS_MEDIA_STATE PreMediaState;
2969 #endif // CONFIG_STA_SUPPORT //
2971 //=======Common===========
2972 // OP mode: either AP or STA
2973 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2975 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2978 // MAT related parameters
2980 // configuration: read from Registry & E2PROM
2981 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2982 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2983 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2985 // ------------------------------------------------------
2986 // common configuration to both OPMODE_STA and OPMODE_AP
2987 // ------------------------------------------------------
2988 COMMON_CONFIG CommonCfg;
2989 MLME_STRUCT Mlme;
2991 // AP needs those vaiables for site survey feature.
2992 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2993 BSS_TABLE ScanTab; // store the latest SCAN result
2995 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2996 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2997 NDIS_SPIN_LOCK MacTabLock;
2999 #ifdef DOT11_N_SUPPORT
3000 BA_TABLE BATable;
3001 #endif // DOT11_N_SUPPORT //
3002 NDIS_SPIN_LOCK BATabLock;
3003 RALINK_TIMER_STRUCT RECBATimer;
3005 // encryption/decryption KEY tables
3006 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
3008 // RX re-assembly buffer for fragmentation
3009 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
3011 // various Counters
3012 COUNTER_802_3 Counters8023; // 802.3 counters
3013 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
3014 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
3015 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
3016 PRIVATE_STRUC PrivateInfo; // Private information & counters
3018 // flags, see fRTMP_ADAPTER_xxx flags
3019 ULONG Flags; // Represent current device status
3021 // current TX sequence #
3022 USHORT Sequence;
3024 // Control disconnect / connect event generation
3025 //+++Didn't used anymore
3026 ULONG LinkDownTime;
3027 //---
3028 ULONG LastRxRate;
3029 ULONG LastTxRate;
3030 //+++Used only for Station
3031 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
3032 //---
3034 ULONG ExtraInfo; // Extra information for displaying status
3035 ULONG SystemErrorBitmap; // b0: E2PROM version error
3037 //+++Didn't used anymore
3038 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
3039 //---
3041 // ---------------------------
3042 // System event log
3043 // ---------------------------
3044 RT_802_11_EVENT_TABLE EventTab;
3047 BOOLEAN HTCEnable;
3049 /*****************************************************************************************/
3050 /* Statistic related parameters */
3051 /*****************************************************************************************/
3052 #ifdef RT2870
3053 ULONG BulkOutDataOneSecCount;
3054 ULONG BulkInDataOneSecCount;
3055 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
3056 ULONG watchDogRxCnt;
3057 ULONG watchDogRxOverFlowCnt;
3058 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
3059 #endif // RT2870 //
3061 BOOLEAN bUpdateBcnCntDone;
3062 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
3063 // ----------------------------
3064 // DEBUG paramerts
3065 // ----------------------------
3066 //ULONG DebugSetting[4];
3067 BOOLEAN bBanAllBaSetup;
3068 BOOLEAN bPromiscuous;
3070 // ----------------------------
3071 // rt2860c emulation-use Parameters
3072 // ----------------------------
3073 ULONG rtsaccu[30];
3074 ULONG ctsaccu[30];
3075 ULONG cfendaccu[30];
3076 ULONG bacontent[16];
3077 ULONG rxint[RX_RING_SIZE+1];
3078 UCHAR rcvba[60];
3079 BOOLEAN bLinkAdapt;
3080 BOOLEAN bForcePrintTX;
3081 BOOLEAN bForcePrintRX;
3082 BOOLEAN bDisablescanning; //defined in RT2870 USB
3083 BOOLEAN bStaFifoTest;
3084 BOOLEAN bProtectionTest;
3085 BOOLEAN bHCCATest;
3086 BOOLEAN bGenOneHCCA;
3087 BOOLEAN bBroadComHT;
3088 //+++Following add from RT2870 USB.
3089 ULONG BulkOutReq;
3090 ULONG BulkOutComplete;
3091 ULONG BulkOutCompleteOther;
3092 ULONG BulkOutCompleteCancel; // seems not use now?
3093 ULONG BulkInReq;
3094 ULONG BulkInComplete;
3095 ULONG BulkInCompleteFail;
3096 //---
3098 struct wificonf WIFItestbed;
3100 #ifdef RALINK_ATE
3101 ATE_INFO ate;
3102 #ifdef RT2870
3103 BOOLEAN ContinBulkOut; //ATE bulk out control
3104 BOOLEAN ContinBulkIn; //ATE bulk in control
3105 atomic_t BulkOutRemained;
3106 atomic_t BulkInRemained;
3107 #endif // RT2870 //
3108 #endif // RALINK_ATE //
3110 #ifdef DOT11_N_SUPPORT
3111 struct reordering_mpdu_pool mpdu_blk_pool;
3112 #endif // DOT11_N_SUPPORT //
3114 ULONG OneSecondnonBEpackets; // record non BE packets per second
3116 #if WIRELESS_EXT >= 12
3117 struct iw_statistics iw_stats;
3118 #endif
3120 struct net_device_stats stats;
3122 #ifdef BLOCK_NET_IF
3123 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
3124 #endif // BLOCK_NET_IF //
3128 #ifdef MULTIPLE_CARD_SUPPORT
3129 INT32 MC_RowID;
3130 UCHAR MC_FileName[256];
3131 #endif // MULTIPLE_CARD_SUPPORT //
3133 ULONG TbttTickCount;
3134 #ifdef PCI_MSI_SUPPORT
3135 BOOLEAN HaveMsi;
3136 #endif // PCI_MSI_SUPPORT //
3139 UCHAR is_on;
3141 #define TIME_BASE (1000000/OS_HZ)
3142 #define TIME_ONE_SECOND (1000000/TIME_BASE)
3143 UCHAR flg_be_adjust;
3144 ULONG be_adjust_last_time;
3146 #ifdef NINTENDO_AP
3147 NINDO_CTRL_BLOCK nindo_ctrl_block;
3148 #endif // NINTENDO_AP //
3151 #ifdef IKANOS_VX_1X0
3152 struct IKANOS_TX_INFO IkanosTxInfo;
3153 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3154 #endif // IKANOS_VX_1X0 //
3157 #ifdef DBG_DIAGNOSE
3158 RtmpDiagStruct DiagStruct;
3159 #endif // DBG_DIAGNOSE //
3162 UINT8 PM_FlgSuspend;
3164 #ifdef RT30xx
3165 //======efuse
3166 BOOLEAN bUseEfuse;
3167 BOOLEAN bEEPROMFile;
3168 #endif // RT30xx //
3170 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3173 // Cisco IAPP format
3175 typedef struct _CISCO_IAPP_CONTENT_
3177 USHORT Length; //IAPP Length
3178 UCHAR MessageType; //IAPP type
3179 UCHAR FunctionCode; //IAPP function type
3180 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3181 UCHAR SourceMAC[MAC_ADDR_LEN];
3182 USHORT Tag; //Tag(element IE) - Adjacent AP report
3183 USHORT TagLength; //Length of element not including 4 byte header
3184 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3185 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3186 USHORT Channel;
3187 USHORT SsidLen;
3188 UCHAR Ssid[MAX_LEN_OF_SSID];
3189 USHORT Seconds; //Seconds that the client has been disassociated.
3190 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3192 #define DELAYINTMASK 0x0003fffb
3193 #define INTMASK 0x0003fffb
3194 #define IndMask 0x0003fffc
3195 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3196 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3197 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3198 #define TxCoherent 0x00020000 // tx coherent
3199 #define RxCoherent 0x00010000 // rx coherent
3200 #define McuCommand 0x00000200 // mcu
3201 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3202 #define TBTTInt 0x00000800 // TBTT interrupt
3203 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3204 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3205 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3208 typedef struct _RX_BLK_
3210 // RXD_STRUC RxD; // sample
3211 RT28XX_RXD_STRUC RxD;
3212 PRXWI_STRUC pRxWI;
3213 PHEADER_802_11 pHeader;
3214 PNDIS_PACKET pRxPacket;
3215 UCHAR *pData;
3216 USHORT DataSize;
3217 USHORT Flags;
3218 UCHAR UserPriority; // for calculate TKIP MIC using
3219 } RX_BLK;
3222 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3223 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3224 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3227 #define fRX_WDS 0x0001
3228 #define fRX_AMSDU 0x0002
3229 #define fRX_ARALINK 0x0004
3230 #define fRX_HTC 0x0008
3231 #define fRX_PAD 0x0010
3232 #define fRX_AMPDU 0x0020
3233 #define fRX_QOS 0x0040
3234 #define fRX_INFRA 0x0080
3235 #define fRX_EAP 0x0100
3236 #define fRX_MESH 0x0200
3237 #define fRX_APCLI 0x0400
3238 #define fRX_DLS 0x0800
3239 #define fRX_WPI 0x1000
3241 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3242 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3243 #define LENGTH_ARALINK_HEADER_FIELD 2
3245 #define TX_UNKOWN_FRAME 0x00
3246 #define TX_MCAST_FRAME 0x01
3247 #define TX_LEGACY_FRAME 0x02
3248 #define TX_AMPDU_FRAME 0x04
3249 #define TX_AMSDU_FRAME 0x08
3250 #define TX_RALINK_FRAME 0x10
3251 #define TX_FRAG_FRAME 0x20
3254 // Currently the sizeof(TX_BLK) is 148 bytes.
3255 typedef struct _TX_BLK_
3257 UCHAR QueIdx;
3258 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3259 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3260 USHORT TotalFragNum; // Total frame fragments required in one batch
3261 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3263 QUEUE_HEADER TxPacketList;
3264 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3265 HTTRANSMIT_SETTING *pTransmit;
3267 // Following structure used for the characteristics of a specific packet.
3268 PNDIS_PACKET pPacket;
3269 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3270 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3271 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3272 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3273 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3274 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3275 UCHAR HdrPadLen; // recording Header Padding Length;
3276 UCHAR apidx; // The interface associated to this packet
3277 UCHAR Wcid; // The MAC entry associated to this packet
3278 UCHAR UserPriority; // priority class of packet
3279 UCHAR FrameGap; // what kind of IFS this packet use
3280 UCHAR MpduReqNum; // number of fragments of this frame
3281 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3282 UCHAR CipherAlg; // cipher alogrithm
3283 PCIPHER_KEY pKey;
3287 USHORT Flags; //See following definitions for detail.
3289 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3290 ULONG Priv; // Hardware specific value saved in here.
3291 } TX_BLK, *PTX_BLK;
3294 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3295 #define fTX_bAckRequired 0x0002 // the packet need ack response
3296 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3297 #define fTX_bHTRate 0x0008 // allow to use HT rate
3298 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3299 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3300 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3301 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3302 #define fTX_bWMM 0x0080 // QOS Data
3304 #define fTX_bClearEAPFrame 0x0100
3307 #ifdef CONFIG_STA_SUPPORT
3308 #endif // CONFIG_STA_SUPPORT //
3312 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3313 do { \
3314 if (value) \
3315 (_pTxBlk->Flags |= _flag) \
3316 else \
3317 (_pTxBlk->Flags &= ~(_flag)) \
3318 }while(0)
3320 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3321 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3322 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3328 //------------------------------------------------------------------------------------------
3332 #ifdef RT_BIG_ENDIAN
3333 static inline VOID WriteBackToDescriptor(
3334 IN PUCHAR Dest,
3335 IN PUCHAR Src,
3336 IN BOOLEAN DoEncrypt,
3337 IN ULONG DescriptorType)
3339 UINT32 *p1, *p2;
3341 p1 = ((UINT32 *)Dest);
3342 p2 = ((UINT32 *)Src);
3344 *p1 = *p2;
3345 *(p1+2) = *(p2+2);
3346 *(p1+3) = *(p2+3);
3347 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3351 ========================================================================
3353 Routine Description:
3354 Endian conversion of Tx/Rx descriptor .
3356 Arguments:
3357 pAd Pointer to our adapter
3358 pData Pointer to Tx/Rx descriptor
3359 DescriptorType Direction of the frame
3361 Return Value:
3362 None
3364 Note:
3365 Call this function when read or update descriptor
3366 ========================================================================
3368 static inline VOID RTMPWIEndianChange(
3369 IN PUCHAR pData,
3370 IN ULONG DescriptorType)
3372 int size;
3373 int i;
3375 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3377 if(DescriptorType == TYPE_TXWI)
3379 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3380 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3382 else
3384 for(i=0; i < size/4 ; i++)
3385 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3390 ========================================================================
3392 Routine Description:
3393 Endian conversion of Tx/Rx descriptor .
3395 Arguments:
3396 pAd Pointer to our adapter
3397 pData Pointer to Tx/Rx descriptor
3398 DescriptorType Direction of the frame
3400 Return Value:
3401 None
3403 Note:
3404 Call this function when read or update descriptor
3405 ========================================================================
3408 #ifdef RT2870
3409 static inline VOID RTMPDescriptorEndianChange(
3410 IN PUCHAR pData,
3411 IN ULONG DescriptorType)
3413 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3415 #endif // RT2870 //
3417 ========================================================================
3419 Routine Description:
3420 Endian conversion of all kinds of 802.11 frames .
3422 Arguments:
3423 pAd Pointer to our adapter
3424 pData Pointer to the 802.11 frame structure
3425 Dir Direction of the frame
3426 FromRxDoneInt Caller is from RxDone interrupt
3428 Return Value:
3429 None
3431 Note:
3432 Call this function when read or update buffer data
3433 ========================================================================
3435 static inline VOID RTMPFrameEndianChange(
3436 IN PRTMP_ADAPTER pAd,
3437 IN PUCHAR pData,
3438 IN ULONG Dir,
3439 IN BOOLEAN FromRxDoneInt)
3441 PHEADER_802_11 pFrame;
3442 PUCHAR pMacHdr;
3444 // swab 16 bit fields - Frame Control field
3445 if(Dir == DIR_READ)
3447 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3450 pFrame = (PHEADER_802_11) pData;
3451 pMacHdr = (PUCHAR) pFrame;
3453 // swab 16 bit fields - Duration/ID field
3454 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3456 // swab 16 bit fields - Sequence Control field
3457 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3459 if(pFrame->FC.Type == BTYPE_MGMT)
3461 switch(pFrame->FC.SubType)
3463 case SUBTYPE_ASSOC_REQ:
3464 case SUBTYPE_REASSOC_REQ:
3465 // swab 16 bit fields - CapabilityInfo field
3466 pMacHdr += sizeof(HEADER_802_11);
3467 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3469 // swab 16 bit fields - Listen Interval field
3470 pMacHdr += 2;
3471 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3472 break;
3474 case SUBTYPE_ASSOC_RSP:
3475 case SUBTYPE_REASSOC_RSP:
3476 // swab 16 bit fields - CapabilityInfo field
3477 pMacHdr += sizeof(HEADER_802_11);
3478 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3480 // swab 16 bit fields - Status Code field
3481 pMacHdr += 2;
3482 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3484 // swab 16 bit fields - AID field
3485 pMacHdr += 2;
3486 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3487 break;
3489 case SUBTYPE_AUTH:
3490 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3491 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3492 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3493 break;
3494 else
3496 // swab 16 bit fields - Auth Alg No. field
3497 pMacHdr += sizeof(HEADER_802_11);
3498 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3500 // swab 16 bit fields - Auth Seq No. field
3501 pMacHdr += 2;
3502 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3504 // swab 16 bit fields - Status Code field
3505 pMacHdr += 2;
3506 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3508 break;
3510 case SUBTYPE_BEACON:
3511 case SUBTYPE_PROBE_RSP:
3512 // swab 16 bit fields - BeaconInterval field
3513 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3514 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3516 // swab 16 bit fields - CapabilityInfo field
3517 pMacHdr += sizeof(USHORT);
3518 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3519 break;
3521 case SUBTYPE_DEAUTH:
3522 case SUBTYPE_DISASSOC:
3523 // swab 16 bit fields - Reason code field
3524 pMacHdr += sizeof(HEADER_802_11);
3525 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3526 break;
3529 else if( pFrame->FC.Type == BTYPE_DATA )
3532 else if(pFrame->FC.Type == BTYPE_CNTL)
3534 switch(pFrame->FC.SubType)
3536 case SUBTYPE_BLOCK_ACK_REQ:
3538 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3539 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3540 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3542 break;
3543 case SUBTYPE_BLOCK_ACK:
3544 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3545 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3546 break;
3548 case SUBTYPE_ACK:
3549 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3550 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3551 break;
3554 else
3556 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3559 // swab 16 bit fields - Frame Control
3560 if(Dir == DIR_WRITE)
3562 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3565 #endif // RT_BIG_ENDIAN //
3568 static inline VOID ConvertMulticastIP2MAC(
3569 IN PUCHAR pIpAddr,
3570 IN PUCHAR *ppMacAddr,
3571 IN UINT16 ProtoType)
3573 if (pIpAddr == NULL)
3574 return;
3576 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3577 return;
3579 switch (ProtoType)
3581 case ETH_P_IPV6:
3582 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3583 *(*ppMacAddr) = 0x33;
3584 *(*ppMacAddr + 1) = 0x33;
3585 *(*ppMacAddr + 2) = pIpAddr[12];
3586 *(*ppMacAddr + 3) = pIpAddr[13];
3587 *(*ppMacAddr + 4) = pIpAddr[14];
3588 *(*ppMacAddr + 5) = pIpAddr[15];
3589 break;
3591 case ETH_P_IP:
3592 default:
3593 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3594 *(*ppMacAddr) = 0x01;
3595 *(*ppMacAddr + 1) = 0x00;
3596 *(*ppMacAddr + 2) = 0x5e;
3597 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3598 *(*ppMacAddr + 4) = pIpAddr[2];
3599 *(*ppMacAddr + 5) = pIpAddr[3];
3600 break;
3603 return;
3606 BOOLEAN RTMPCheckForHang(
3607 IN NDIS_HANDLE MiniportAdapterContext
3610 VOID RTMPHalt(
3611 IN NDIS_HANDLE MiniportAdapterContext
3615 // Private routines in rtmp_init.c
3617 NDIS_STATUS RTMPAllocAdapterBlock(
3618 IN PVOID handle,
3619 OUT PRTMP_ADAPTER *ppAdapter
3622 NDIS_STATUS RTMPAllocTxRxRingMemory(
3623 IN PRTMP_ADAPTER pAd
3626 NDIS_STATUS RTMPFindAdapter(
3627 IN PRTMP_ADAPTER pAd,
3628 IN NDIS_HANDLE WrapperConfigurationContext
3631 NDIS_STATUS RTMPReadParametersHook(
3632 IN PRTMP_ADAPTER pAd
3635 VOID RTMPFreeAdapter(
3636 IN PRTMP_ADAPTER pAd
3639 NDIS_STATUS NICReadRegParameters(
3640 IN PRTMP_ADAPTER pAd,
3641 IN NDIS_HANDLE WrapperConfigurationContext
3644 #ifdef RT30xx
3645 VOID NICInitRT30xxRFRegisters(
3646 IN PRTMP_ADAPTER pAd);
3647 #endif // RT30xx //
3649 VOID NICReadEEPROMParameters(
3650 IN PRTMP_ADAPTER pAd,
3651 IN PUCHAR mac_addr);
3653 VOID NICInitAsicFromEEPROM(
3654 IN PRTMP_ADAPTER pAd);
3656 VOID NICInitTxRxRingAndBacklogQueue(
3657 IN PRTMP_ADAPTER pAd);
3659 NDIS_STATUS NICInitializeAdapter(
3660 IN PRTMP_ADAPTER pAd,
3661 IN BOOLEAN bHardReset);
3663 NDIS_STATUS NICInitializeAsic(
3664 IN PRTMP_ADAPTER pAd,
3665 IN BOOLEAN bHardReset);
3667 VOID NICIssueReset(
3668 IN PRTMP_ADAPTER pAd);
3670 VOID RTMPRingCleanUp(
3671 IN PRTMP_ADAPTER pAd,
3672 IN UCHAR RingType);
3674 VOID RxTest(
3675 IN PRTMP_ADAPTER pAd);
3677 NDIS_STATUS DbgSendPacket(
3678 IN PRTMP_ADAPTER pAd,
3679 IN PNDIS_PACKET pPacket);
3681 VOID UserCfgInit(
3682 IN PRTMP_ADAPTER pAd);
3684 VOID NICResetFromError(
3685 IN PRTMP_ADAPTER pAd);
3687 VOID NICEraseFirmware(
3688 IN PRTMP_ADAPTER pAd);
3690 NDIS_STATUS NICLoadFirmware(
3691 IN PRTMP_ADAPTER pAd);
3693 NDIS_STATUS NICLoadRateSwitchingParams(
3694 IN PRTMP_ADAPTER pAd);
3696 BOOLEAN NICCheckForHang(
3697 IN PRTMP_ADAPTER pAd);
3699 VOID NICUpdateFifoStaCounters(
3700 IN PRTMP_ADAPTER pAd);
3702 VOID NICUpdateRawCounters(
3703 IN PRTMP_ADAPTER pAd);
3705 ULONG RTMPNotAllZero(
3706 IN PVOID pSrc1,
3707 IN ULONG Length);
3709 VOID RTMPZeroMemory(
3710 IN PVOID pSrc,
3711 IN ULONG Length);
3713 ULONG RTMPCompareMemory(
3714 IN PVOID pSrc1,
3715 IN PVOID pSrc2,
3716 IN ULONG Length);
3718 VOID RTMPMoveMemory(
3719 OUT PVOID pDest,
3720 IN PVOID pSrc,
3721 IN ULONG Length);
3723 VOID AtoH(
3724 char *src,
3725 UCHAR *dest,
3726 int destlen);
3728 UCHAR BtoH(
3729 char ch);
3731 VOID RTMPPatchMacBbpBug(
3732 IN PRTMP_ADAPTER pAd);
3734 VOID RTMPPatchCardBus(
3735 IN PRTMP_ADAPTER pAdapter);
3737 VOID RTMPPatchRalinkCardBus(
3738 IN PRTMP_ADAPTER pAdapter,
3739 IN ULONG Bus);
3741 ULONG RTMPReadCBConfig(
3742 IN ULONG Bus,
3743 IN ULONG Slot,
3744 IN ULONG Func,
3745 IN ULONG Offset);
3747 VOID RTMPWriteCBConfig(
3748 IN ULONG Bus,
3749 IN ULONG Slot,
3750 IN ULONG Func,
3751 IN ULONG Offset,
3752 IN ULONG Value);
3754 VOID RTMPInitTimer(
3755 IN PRTMP_ADAPTER pAd,
3756 IN PRALINK_TIMER_STRUCT pTimer,
3757 IN PVOID pTimerFunc,
3758 IN PVOID pData,
3759 IN BOOLEAN Repeat);
3761 VOID RTMPSetTimer(
3762 IN PRALINK_TIMER_STRUCT pTimer,
3763 IN ULONG Value);
3766 VOID RTMPModTimer(
3767 IN PRALINK_TIMER_STRUCT pTimer,
3768 IN ULONG Value);
3770 VOID RTMPCancelTimer(
3771 IN PRALINK_TIMER_STRUCT pTimer,
3772 OUT BOOLEAN *pCancelled);
3774 VOID RTMPSetLED(
3775 IN PRTMP_ADAPTER pAd,
3776 IN UCHAR Status);
3778 VOID RTMPSetSignalLED(
3779 IN PRTMP_ADAPTER pAd,
3780 IN NDIS_802_11_RSSI Dbm);
3782 VOID RTMPEnableRxTx(
3783 IN PRTMP_ADAPTER pAd);
3786 // prototype in action.c
3788 VOID ActionStateMachineInit(
3789 IN PRTMP_ADAPTER pAd,
3790 IN STATE_MACHINE *S,
3791 OUT STATE_MACHINE_FUNC Trans[]);
3793 VOID MlmeADDBAAction(
3794 IN PRTMP_ADAPTER pAd,
3795 IN MLME_QUEUE_ELEM *Elem);
3797 VOID MlmeDELBAAction(
3798 IN PRTMP_ADAPTER pAd,
3799 IN MLME_QUEUE_ELEM *Elem);
3801 VOID MlmeDLSAction(
3802 IN PRTMP_ADAPTER pAd,
3803 IN MLME_QUEUE_ELEM *Elem);
3805 VOID MlmeInvalidAction(
3806 IN PRTMP_ADAPTER pAd,
3807 IN MLME_QUEUE_ELEM *Elem);
3809 VOID MlmeQOSAction(
3810 IN PRTMP_ADAPTER pAd,
3811 IN MLME_QUEUE_ELEM *Elem);
3813 #ifdef DOT11_N_SUPPORT
3814 VOID PeerAddBAReqAction(
3815 IN PRTMP_ADAPTER pAd,
3816 IN MLME_QUEUE_ELEM *Elem);
3818 VOID PeerAddBARspAction(
3819 IN PRTMP_ADAPTER pAd,
3820 IN MLME_QUEUE_ELEM *Elem);
3822 VOID PeerDelBAAction(
3823 IN PRTMP_ADAPTER pAd,
3824 IN MLME_QUEUE_ELEM *Elem);
3826 VOID PeerBAAction(
3827 IN PRTMP_ADAPTER pAd,
3828 IN MLME_QUEUE_ELEM *Elem);
3829 #endif // DOT11_N_SUPPORT //
3831 VOID SendPSMPAction(
3832 IN PRTMP_ADAPTER pAd,
3833 IN UCHAR Wcid,
3834 IN UCHAR Psmp);
3837 #ifdef DOT11N_DRAFT3
3838 VOID SendBSS2040CoexistMgmtAction(
3839 IN PRTMP_ADAPTER pAd,
3840 IN UCHAR Wcid,
3841 IN UCHAR apidx,
3842 IN UCHAR InfoReq);
3844 VOID SendNotifyBWActionFrame(
3845 IN PRTMP_ADAPTER pAd,
3846 IN UCHAR Wcid,
3847 IN UCHAR apidx);
3849 BOOLEAN ChannelSwitchSanityCheck(
3850 IN PRTMP_ADAPTER pAd,
3851 IN UCHAR Wcid,
3852 IN UCHAR NewChannel,
3853 IN UCHAR Secondary);
3855 VOID ChannelSwitchAction(
3856 IN PRTMP_ADAPTER pAd,
3857 IN UCHAR Wcid,
3858 IN UCHAR Channel,
3859 IN UCHAR Secondary);
3861 ULONG BuildIntolerantChannelRep(
3862 IN PRTMP_ADAPTER pAd,
3863 IN PUCHAR pDest);
3865 VOID Update2040CoexistFrameAndNotify(
3866 IN PRTMP_ADAPTER pAd,
3867 IN UCHAR Wcid,
3868 IN BOOLEAN bAddIntolerantCha);
3870 VOID Send2040CoexistAction(
3871 IN PRTMP_ADAPTER pAd,
3872 IN UCHAR Wcid,
3873 IN BOOLEAN bAddIntolerantCha);
3874 #endif // DOT11N_DRAFT3 //
3876 VOID PeerRMAction(
3877 IN PRTMP_ADAPTER pAd,
3878 IN MLME_QUEUE_ELEM *Elem);
3880 VOID PeerPublicAction(
3881 IN PRTMP_ADAPTER pAd,
3882 IN MLME_QUEUE_ELEM *Elem);
3884 #ifdef CONFIG_STA_SUPPORT
3885 VOID StaPublicAction(
3886 IN PRTMP_ADAPTER pAd,
3887 IN UCHAR Bss2040Coexist);
3888 #endif // CONFIG_STA_SUPPORT //
3891 VOID PeerBSSTranAction(
3892 IN PRTMP_ADAPTER pAd,
3893 IN MLME_QUEUE_ELEM *Elem);
3895 #ifdef DOT11_N_SUPPORT
3896 VOID PeerHTAction(
3897 IN PRTMP_ADAPTER pAd,
3898 IN MLME_QUEUE_ELEM *Elem);
3899 #endif // DOT11_N_SUPPORT //
3901 VOID PeerQOSAction(
3902 IN PRTMP_ADAPTER pAd,
3903 IN MLME_QUEUE_ELEM *Elem);
3905 #ifdef QOS_DLS_SUPPORT
3906 VOID PeerDLSAction(
3907 IN PRTMP_ADAPTER pAd,
3908 IN MLME_QUEUE_ELEM *Elem);
3909 #endif // QOS_DLS_SUPPORT //
3911 #ifdef CONFIG_STA_SUPPORT
3912 #ifdef QOS_DLS_SUPPORT
3913 VOID DlsParmFill(
3914 IN PRTMP_ADAPTER pAd,
3915 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3916 IN PRT_802_11_DLS pDls,
3917 IN USHORT reason);
3918 #endif // QOS_DLS_SUPPORT //
3919 #endif // CONFIG_STA_SUPPORT //
3921 #ifdef DOT11_N_SUPPORT
3922 VOID RECBATimerTimeout(
3923 IN PVOID SystemSpecific1,
3924 IN PVOID FunctionContext,
3925 IN PVOID SystemSpecific2,
3926 IN PVOID SystemSpecific3);
3928 VOID ORIBATimerTimeout(
3929 IN PRTMP_ADAPTER pAd);
3931 VOID SendRefreshBAR(
3932 IN PRTMP_ADAPTER pAd,
3933 IN MAC_TABLE_ENTRY *pEntry);
3934 #endif // DOT11_N_SUPPORT //
3936 VOID ActHeaderInit(
3937 IN PRTMP_ADAPTER pAd,
3938 IN OUT PHEADER_802_11 pHdr80211,
3939 IN PUCHAR Addr1,
3940 IN PUCHAR Addr2,
3941 IN PUCHAR Addr3);
3943 VOID BarHeaderInit(
3944 IN PRTMP_ADAPTER pAd,
3945 IN OUT PFRAME_BAR pCntlBar,
3946 IN PUCHAR pDA,
3947 IN PUCHAR pSA);
3949 VOID InsertActField(
3950 IN PRTMP_ADAPTER pAd,
3951 OUT PUCHAR pFrameBuf,
3952 OUT PULONG pFrameLen,
3953 IN UINT8 Category,
3954 IN UINT8 ActCode);
3956 BOOLEAN QosBADataParse(
3957 IN PRTMP_ADAPTER pAd,
3958 IN BOOLEAN bAMSDU,
3959 IN PUCHAR p8023Header,
3960 IN UCHAR WCID,
3961 IN UCHAR TID,
3962 IN USHORT Sequence,
3963 IN UCHAR DataOffset,
3964 IN USHORT Datasize,
3965 IN UINT CurRxIndex);
3967 #ifdef DOT11_N_SUPPORT
3968 BOOLEAN CntlEnqueueForRecv(
3969 IN PRTMP_ADAPTER pAd,
3970 IN ULONG Wcid,
3971 IN ULONG MsgLen,
3972 IN PFRAME_BA_REQ pMsg);
3974 VOID BaAutoManSwitch(
3975 IN PRTMP_ADAPTER pAd);
3976 #endif // DOT11_N_SUPPORT //
3978 VOID HTIOTCheck(
3979 IN PRTMP_ADAPTER pAd,
3980 IN UCHAR BatRecIdx);
3983 // Private routines in rtmp_data.c
3985 BOOLEAN RTMPHandleRxDoneInterrupt(
3986 IN PRTMP_ADAPTER pAd);
3988 VOID RTMPHandleTxDoneInterrupt(
3989 IN PRTMP_ADAPTER pAd);
3991 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3992 IN PRTMP_ADAPTER pAd,
3993 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3995 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3996 IN PRTMP_ADAPTER pAd);
3998 VOID RTMPHandleTBTTInterrupt(
3999 IN PRTMP_ADAPTER pAd);
4001 VOID RTMPHandlePreTBTTInterrupt(
4002 IN PRTMP_ADAPTER pAd);
4004 void RTMPHandleTwakeupInterrupt(
4005 IN PRTMP_ADAPTER pAd);
4007 VOID RTMPHandleRxCoherentInterrupt(
4008 IN PRTMP_ADAPTER pAd);
4010 BOOLEAN TxFrameIsAggregatible(
4011 IN PRTMP_ADAPTER pAd,
4012 IN PUCHAR pPrevAddr1,
4013 IN PUCHAR p8023hdr);
4015 BOOLEAN PeerIsAggreOn(
4016 IN PRTMP_ADAPTER pAd,
4017 IN ULONG TxRate,
4018 IN PMAC_TABLE_ENTRY pMacEntry);
4020 NDIS_STATUS Sniff2BytesFromNdisBuffer(
4021 IN PNDIS_BUFFER pFirstBuffer,
4022 IN UCHAR DesiredOffset,
4023 OUT PUCHAR pByte0,
4024 OUT PUCHAR pByte1);
4026 NDIS_STATUS STASendPacket(
4027 IN PRTMP_ADAPTER pAd,
4028 IN PNDIS_PACKET pPacket);
4030 VOID STASendPackets(
4031 IN NDIS_HANDLE MiniportAdapterContext,
4032 IN PPNDIS_PACKET ppPacketArray,
4033 IN UINT NumberOfPackets);
4035 VOID RTMPDeQueuePacket(
4036 IN PRTMP_ADAPTER pAd,
4037 IN BOOLEAN bIntContext,
4038 IN UCHAR QueIdx,
4039 IN UCHAR Max_Tx_Packets);
4041 NDIS_STATUS RTMPHardTransmit(
4042 IN PRTMP_ADAPTER pAd,
4043 IN PNDIS_PACKET pPacket,
4044 IN UCHAR QueIdx,
4045 OUT PULONG pFreeTXDLeft);
4047 NDIS_STATUS STAHardTransmit(
4048 IN PRTMP_ADAPTER pAd,
4049 IN TX_BLK *pTxBlk,
4050 IN UCHAR QueIdx);
4052 VOID STARxEAPOLFrameIndicate(
4053 IN PRTMP_ADAPTER pAd,
4054 IN MAC_TABLE_ENTRY *pEntry,
4055 IN RX_BLK *pRxBlk,
4056 IN UCHAR FromWhichBSSID);
4058 NDIS_STATUS RTMPFreeTXDRequest(
4059 IN PRTMP_ADAPTER pAd,
4060 IN UCHAR RingType,
4061 IN UCHAR NumberRequired,
4062 IN PUCHAR FreeNumberIs);
4064 NDIS_STATUS MlmeHardTransmit(
4065 IN PRTMP_ADAPTER pAd,
4066 IN UCHAR QueIdx,
4067 IN PNDIS_PACKET pPacket);
4069 NDIS_STATUS MlmeHardTransmitMgmtRing(
4070 IN PRTMP_ADAPTER pAd,
4071 IN UCHAR QueIdx,
4072 IN PNDIS_PACKET pPacket);
4074 NDIS_STATUS MlmeHardTransmitTxRing(
4075 IN PRTMP_ADAPTER pAd,
4076 IN UCHAR QueIdx,
4077 IN PNDIS_PACKET pPacket);
4079 USHORT RTMPCalcDuration(
4080 IN PRTMP_ADAPTER pAd,
4081 IN UCHAR Rate,
4082 IN ULONG Size);
4084 VOID RTMPWriteTxWI(
4085 IN PRTMP_ADAPTER pAd,
4086 IN PTXWI_STRUC pTxWI,
4087 IN BOOLEAN FRAG,
4088 IN BOOLEAN CFACK,
4089 IN BOOLEAN InsTimestamp,
4090 IN BOOLEAN AMPDU,
4091 IN BOOLEAN Ack,
4092 IN BOOLEAN NSeq, // HW new a sequence.
4093 IN UCHAR BASize,
4094 IN UCHAR WCID,
4095 IN ULONG Length,
4096 IN UCHAR PID,
4097 IN UCHAR TID,
4098 IN UCHAR TxRate,
4099 IN UCHAR Txopmode,
4100 IN BOOLEAN CfAck,
4101 IN HTTRANSMIT_SETTING *pTransmit);
4104 VOID RTMPWriteTxWI_Data(
4105 IN PRTMP_ADAPTER pAd,
4106 IN OUT PTXWI_STRUC pTxWI,
4107 IN TX_BLK *pTxBlk);
4110 VOID RTMPWriteTxWI_Cache(
4111 IN PRTMP_ADAPTER pAd,
4112 IN OUT PTXWI_STRUC pTxWI,
4113 IN TX_BLK *pTxBlk);
4115 VOID RTMPWriteTxDescriptor(
4116 IN PRTMP_ADAPTER pAd,
4117 IN PTXD_STRUC pTxD,
4118 IN BOOLEAN bWIV,
4119 IN UCHAR QSEL);
4121 VOID RTMPSuspendMsduTransmission(
4122 IN PRTMP_ADAPTER pAd);
4124 VOID RTMPResumeMsduTransmission(
4125 IN PRTMP_ADAPTER pAd);
4127 NDIS_STATUS MiniportMMRequest(
4128 IN PRTMP_ADAPTER pAd,
4129 IN UCHAR QueIdx,
4130 IN PUCHAR pData,
4131 IN UINT Length);
4133 NDIS_STATUS MiniportDataMMRequest(
4134 IN PRTMP_ADAPTER pAd,
4135 IN UCHAR QueIdx,
4136 IN PUCHAR pData,
4137 IN UINT Length);
4139 VOID RTMPSendNullFrame(
4140 IN PRTMP_ADAPTER pAd,
4141 IN UCHAR TxRate,
4142 IN BOOLEAN bQosNull);
4144 VOID RTMPSendDisassociationFrame(
4145 IN PRTMP_ADAPTER pAd);
4147 VOID RTMPSendRTSFrame(
4148 IN PRTMP_ADAPTER pAd,
4149 IN PUCHAR pDA,
4150 IN unsigned int NextMpduSize,
4151 IN UCHAR TxRate,
4152 IN UCHAR RTSRate,
4153 IN USHORT AckDuration,
4154 IN UCHAR QueIdx,
4155 IN UCHAR FrameGap);
4158 NDIS_STATUS RTMPApplyPacketFilter(
4159 IN PRTMP_ADAPTER pAd,
4160 IN PRT28XX_RXD_STRUC pRxD,
4161 IN PHEADER_802_11 pHeader);
4163 PQUEUE_HEADER RTMPCheckTxSwQueue(
4164 IN PRTMP_ADAPTER pAd,
4165 OUT UCHAR *QueIdx);
4167 #ifdef CONFIG_STA_SUPPORT
4168 VOID RTMPReportMicError(
4169 IN PRTMP_ADAPTER pAd,
4170 IN PCIPHER_KEY pWpaKey);
4172 VOID WpaMicFailureReportFrame(
4173 IN PRTMP_ADAPTER pAd,
4174 IN MLME_QUEUE_ELEM *Elem);
4176 VOID WpaDisassocApAndBlockAssoc(
4177 IN PVOID SystemSpecific1,
4178 IN PVOID FunctionContext,
4179 IN PVOID SystemSpecific2,
4180 IN PVOID SystemSpecific3);
4181 #endif // CONFIG_STA_SUPPORT //
4183 NDIS_STATUS RTMPCloneNdisPacket(
4184 IN PRTMP_ADAPTER pAd,
4185 IN BOOLEAN pInsAMSDUHdr,
4186 IN PNDIS_PACKET pInPacket,
4187 OUT PNDIS_PACKET *ppOutPacket);
4189 NDIS_STATUS RTMPAllocateNdisPacket(
4190 IN PRTMP_ADAPTER pAd,
4191 IN PNDIS_PACKET *pPacket,
4192 IN PUCHAR pHeader,
4193 IN UINT HeaderLen,
4194 IN PUCHAR pData,
4195 IN UINT DataLen);
4197 VOID RTMPFreeNdisPacket(
4198 IN PRTMP_ADAPTER pAd,
4199 IN PNDIS_PACKET pPacket);
4201 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4202 IN PRTMP_ADAPTER pAd,
4203 IN UCHAR QueIdx);
4205 BOOLEAN RTMPCheckDHCPFrame(
4206 IN PRTMP_ADAPTER pAd,
4207 IN PNDIS_PACKET pPacket);
4210 BOOLEAN RTMPCheckEtherType(
4211 IN PRTMP_ADAPTER pAd,
4212 IN PNDIS_PACKET pPacket);
4215 VOID RTMPCckBbpTuning(
4216 IN PRTMP_ADAPTER pAd,
4217 IN UINT TxRate);
4220 // Private routines in rtmp_wep.c
4222 VOID RTMPInitWepEngine(
4223 IN PRTMP_ADAPTER pAd,
4224 IN PUCHAR pKey,
4225 IN UCHAR KeyId,
4226 IN UCHAR KeyLen,
4227 IN PUCHAR pDest);
4229 VOID RTMPEncryptData(
4230 IN PRTMP_ADAPTER pAd,
4231 IN PUCHAR pSrc,
4232 IN PUCHAR pDest,
4233 IN UINT Len);
4235 BOOLEAN RTMPDecryptData(
4236 IN PRTMP_ADAPTER pAdapter,
4237 IN PUCHAR pSrc,
4238 IN UINT Len,
4239 IN UINT idx);
4241 BOOLEAN RTMPSoftDecryptWEP(
4242 IN PRTMP_ADAPTER pAd,
4243 IN PUCHAR pData,
4244 IN ULONG DataByteCnt,
4245 IN PCIPHER_KEY pGroupKey);
4247 VOID RTMPSetICV(
4248 IN PRTMP_ADAPTER pAd,
4249 IN PUCHAR pDest);
4251 VOID ARCFOUR_INIT(
4252 IN PARCFOURCONTEXT Ctx,
4253 IN PUCHAR pKey,
4254 IN UINT KeyLen);
4256 UCHAR ARCFOUR_BYTE(
4257 IN PARCFOURCONTEXT Ctx);
4259 VOID ARCFOUR_DECRYPT(
4260 IN PARCFOURCONTEXT Ctx,
4261 IN PUCHAR pDest,
4262 IN PUCHAR pSrc,
4263 IN UINT Len);
4265 VOID ARCFOUR_ENCRYPT(
4266 IN PARCFOURCONTEXT Ctx,
4267 IN PUCHAR pDest,
4268 IN PUCHAR pSrc,
4269 IN UINT Len);
4271 VOID WPAARCFOUR_ENCRYPT(
4272 IN PARCFOURCONTEXT Ctx,
4273 IN PUCHAR pDest,
4274 IN PUCHAR pSrc,
4275 IN UINT Len);
4277 UINT RTMP_CALC_FCS32(
4278 IN UINT Fcs,
4279 IN PUCHAR Cp,
4280 IN INT Len);
4283 // MLME routines
4286 // Asic/RF/BBP related functions
4288 VOID AsicAdjustTxPower(
4289 IN PRTMP_ADAPTER pAd);
4291 VOID AsicUpdateProtect(
4292 IN PRTMP_ADAPTER pAd,
4293 IN USHORT OperaionMode,
4294 IN UCHAR SetMask,
4295 IN BOOLEAN bDisableBGProtect,
4296 IN BOOLEAN bNonGFExist);
4298 VOID AsicSwitchChannel(
4299 IN PRTMP_ADAPTER pAd,
4300 IN UCHAR Channel,
4301 IN BOOLEAN bScan);
4303 VOID AsicLockChannel(
4304 IN PRTMP_ADAPTER pAd,
4305 IN UCHAR Channel) ;
4307 VOID AsicAntennaSelect(
4308 IN PRTMP_ADAPTER pAd,
4309 IN UCHAR Channel);
4311 VOID AsicAntennaSetting(
4312 IN PRTMP_ADAPTER pAd,
4313 IN ABGBAND_STATE BandState);
4315 VOID AsicRfTuningExec(
4316 IN PVOID SystemSpecific1,
4317 IN PVOID FunctionContext,
4318 IN PVOID SystemSpecific2,
4319 IN PVOID SystemSpecific3);
4321 #ifdef CONFIG_STA_SUPPORT
4322 VOID AsicSleepThenAutoWakeup(
4323 IN PRTMP_ADAPTER pAd,
4324 IN USHORT TbttNumToNextWakeUp);
4326 VOID AsicForceSleep(
4327 IN PRTMP_ADAPTER pAd);
4329 VOID AsicForceWakeup(
4330 IN PRTMP_ADAPTER pAd,
4331 IN BOOLEAN bFromTx);
4332 #endif // CONFIG_STA_SUPPORT //
4334 VOID AsicSetBssid(
4335 IN PRTMP_ADAPTER pAd,
4336 IN PUCHAR pBssid);
4338 VOID AsicSetMcastWC(
4339 IN PRTMP_ADAPTER pAd);
4341 VOID AsicDelWcidTab(
4342 IN PRTMP_ADAPTER pAd,
4343 IN UCHAR Wcid);
4345 VOID AsicEnableRDG(
4346 IN PRTMP_ADAPTER pAd);
4348 VOID AsicDisableRDG(
4349 IN PRTMP_ADAPTER pAd);
4351 VOID AsicDisableSync(
4352 IN PRTMP_ADAPTER pAd);
4354 VOID AsicEnableBssSync(
4355 IN PRTMP_ADAPTER pAd);
4357 VOID AsicEnableIbssSync(
4358 IN PRTMP_ADAPTER pAd);
4360 VOID AsicSetEdcaParm(
4361 IN PRTMP_ADAPTER pAd,
4362 IN PEDCA_PARM pEdcaParm);
4364 VOID AsicSetSlotTime(
4365 IN PRTMP_ADAPTER pAd,
4366 IN BOOLEAN bUseShortSlotTime);
4368 VOID AsicAddSharedKeyEntry(
4369 IN PRTMP_ADAPTER pAd,
4370 IN UCHAR BssIndex,
4371 IN UCHAR KeyIdx,
4372 IN UCHAR CipherAlg,
4373 IN PUCHAR pKey,
4374 IN PUCHAR pTxMic,
4375 IN PUCHAR pRxMic);
4377 VOID AsicRemoveSharedKeyEntry(
4378 IN PRTMP_ADAPTER pAd,
4379 IN UCHAR BssIndex,
4380 IN UCHAR KeyIdx);
4382 VOID AsicUpdateWCIDAttribute(
4383 IN PRTMP_ADAPTER pAd,
4384 IN USHORT WCID,
4385 IN UCHAR BssIndex,
4386 IN UCHAR CipherAlg,
4387 IN BOOLEAN bUsePairewiseKeyTable);
4389 VOID AsicUpdateWCIDIVEIV(
4390 IN PRTMP_ADAPTER pAd,
4391 IN USHORT WCID,
4392 IN ULONG uIV,
4393 IN ULONG uEIV);
4395 VOID AsicUpdateRxWCIDTable(
4396 IN PRTMP_ADAPTER pAd,
4397 IN USHORT WCID,
4398 IN PUCHAR pAddr);
4400 VOID AsicAddKeyEntry(
4401 IN PRTMP_ADAPTER pAd,
4402 IN USHORT WCID,
4403 IN UCHAR BssIndex,
4404 IN UCHAR KeyIdx,
4405 IN PCIPHER_KEY pCipherKey,
4406 IN BOOLEAN bUsePairewiseKeyTable,
4407 IN BOOLEAN bTxKey);
4409 VOID AsicAddPairwiseKeyEntry(
4410 IN PRTMP_ADAPTER pAd,
4411 IN PUCHAR pAddr,
4412 IN UCHAR WCID,
4413 IN CIPHER_KEY *pCipherKey);
4415 VOID AsicRemovePairwiseKeyEntry(
4416 IN PRTMP_ADAPTER pAd,
4417 IN UCHAR BssIdx,
4418 IN UCHAR Wcid);
4420 BOOLEAN AsicSendCommandToMcu(
4421 IN PRTMP_ADAPTER pAd,
4422 IN UCHAR Command,
4423 IN UCHAR Token,
4424 IN UCHAR Arg0,
4425 IN UCHAR Arg1);
4428 VOID MacAddrRandomBssid(
4429 IN PRTMP_ADAPTER pAd,
4430 OUT PUCHAR pAddr);
4432 VOID MgtMacHeaderInit(
4433 IN PRTMP_ADAPTER pAd,
4434 IN OUT PHEADER_802_11 pHdr80211,
4435 IN UCHAR SubType,
4436 IN UCHAR ToDs,
4437 IN PUCHAR pDA,
4438 IN PUCHAR pBssid);
4440 VOID MlmeRadioOff(
4441 IN PRTMP_ADAPTER pAd);
4443 VOID MlmeRadioOn(
4444 IN PRTMP_ADAPTER pAd);
4447 VOID BssTableInit(
4448 IN BSS_TABLE *Tab);
4450 #ifdef DOT11_N_SUPPORT
4451 VOID BATableInit(
4452 IN PRTMP_ADAPTER pAd,
4453 IN BA_TABLE *Tab);
4454 #endif // DOT11_N_SUPPORT //
4456 ULONG BssTableSearch(
4457 IN BSS_TABLE *Tab,
4458 IN PUCHAR pBssid,
4459 IN UCHAR Channel);
4461 ULONG BssSsidTableSearch(
4462 IN BSS_TABLE *Tab,
4463 IN PUCHAR pBssid,
4464 IN PUCHAR pSsid,
4465 IN UCHAR SsidLen,
4466 IN UCHAR Channel);
4468 ULONG BssTableSearchWithSSID(
4469 IN BSS_TABLE *Tab,
4470 IN PUCHAR Bssid,
4471 IN PUCHAR pSsid,
4472 IN UCHAR SsidLen,
4473 IN UCHAR Channel);
4475 VOID BssTableDeleteEntry(
4476 IN OUT PBSS_TABLE pTab,
4477 IN PUCHAR pBssid,
4478 IN UCHAR Channel);
4480 #ifdef DOT11_N_SUPPORT
4481 VOID BATableDeleteORIEntry(
4482 IN OUT PRTMP_ADAPTER pAd,
4483 IN BA_ORI_ENTRY *pBAORIEntry);
4485 VOID BATableDeleteRECEntry(
4486 IN OUT PRTMP_ADAPTER pAd,
4487 IN BA_REC_ENTRY *pBARECEntry);
4489 VOID BATableTearORIEntry(
4490 IN OUT PRTMP_ADAPTER pAd,
4491 IN UCHAR TID,
4492 IN UCHAR Wcid,
4493 IN BOOLEAN bForceDelete,
4494 IN BOOLEAN ALL);
4496 VOID BATableTearRECEntry(
4497 IN OUT PRTMP_ADAPTER pAd,
4498 IN UCHAR TID,
4499 IN UCHAR WCID,
4500 IN BOOLEAN ALL);
4501 #endif // DOT11_N_SUPPORT //
4503 VOID BssEntrySet(
4504 IN PRTMP_ADAPTER pAd,
4505 OUT PBSS_ENTRY pBss,
4506 IN PUCHAR pBssid,
4507 IN CHAR Ssid[],
4508 IN UCHAR SsidLen,
4509 IN UCHAR BssType,
4510 IN USHORT BeaconPeriod,
4511 IN PCF_PARM CfParm,
4512 IN USHORT AtimWin,
4513 IN USHORT CapabilityInfo,
4514 IN UCHAR SupRate[],
4515 IN UCHAR SupRateLen,
4516 IN UCHAR ExtRate[],
4517 IN UCHAR ExtRateLen,
4518 IN HT_CAPABILITY_IE *pHtCapability,
4519 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4520 IN UCHAR HtCapabilityLen,
4521 IN UCHAR AddHtInfoLen,
4522 IN UCHAR NewExtChanOffset,
4523 IN UCHAR Channel,
4524 IN CHAR Rssi,
4525 IN LARGE_INTEGER TimeStamp,
4526 IN UCHAR CkipFlag,
4527 IN PEDCA_PARM pEdcaParm,
4528 IN PQOS_CAPABILITY_PARM pQosCapability,
4529 IN PQBSS_LOAD_PARM pQbssLoad,
4530 IN USHORT LengthVIE,
4531 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4533 ULONG BssTableSetEntry(
4534 IN PRTMP_ADAPTER pAd,
4535 OUT PBSS_TABLE pTab,
4536 IN PUCHAR pBssid,
4537 IN CHAR Ssid[],
4538 IN UCHAR SsidLen,
4539 IN UCHAR BssType,
4540 IN USHORT BeaconPeriod,
4541 IN CF_PARM *CfParm,
4542 IN USHORT AtimWin,
4543 IN USHORT CapabilityInfo,
4544 IN UCHAR SupRate[],
4545 IN UCHAR SupRateLen,
4546 IN UCHAR ExtRate[],
4547 IN UCHAR ExtRateLen,
4548 IN HT_CAPABILITY_IE *pHtCapability,
4549 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4550 IN UCHAR HtCapabilityLen,
4551 IN UCHAR AddHtInfoLen,
4552 IN UCHAR NewExtChanOffset,
4553 IN UCHAR Channel,
4554 IN CHAR Rssi,
4555 IN LARGE_INTEGER TimeStamp,
4556 IN UCHAR CkipFlag,
4557 IN PEDCA_PARM pEdcaParm,
4558 IN PQOS_CAPABILITY_PARM pQosCapability,
4559 IN PQBSS_LOAD_PARM pQbssLoad,
4560 IN USHORT LengthVIE,
4561 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4563 #ifdef DOT11_N_SUPPORT
4564 VOID BATableInsertEntry(
4565 IN PRTMP_ADAPTER pAd,
4566 IN USHORT Aid,
4567 IN USHORT TimeOutValue,
4568 IN USHORT StartingSeq,
4569 IN UCHAR TID,
4570 IN UCHAR BAWinSize,
4571 IN UCHAR OriginatorStatus,
4572 IN BOOLEAN IsRecipient);
4574 #ifdef DOT11N_DRAFT3
4575 VOID Bss2040CoexistTimeOut(
4576 IN PVOID SystemSpecific1,
4577 IN PVOID FunctionContext,
4578 IN PVOID SystemSpecific2,
4579 IN PVOID SystemSpecific3);
4582 VOID TriEventInit(
4583 IN PRTMP_ADAPTER pAd);
4585 ULONG TriEventTableSetEntry(
4586 IN PRTMP_ADAPTER pAd,
4587 OUT TRIGGER_EVENT_TAB *Tab,
4588 IN PUCHAR pBssid,
4589 IN HT_CAPABILITY_IE *pHtCapability,
4590 IN UCHAR HtCapabilityLen,
4591 IN UCHAR RegClass,
4592 IN UCHAR ChannelNo);
4594 VOID TriEventCounterMaintenance(
4595 IN PRTMP_ADAPTER pAd);
4596 #endif // DOT11N_DRAFT3 //
4597 #endif // DOT11_N_SUPPORT //
4599 VOID BssTableSsidSort(
4600 IN PRTMP_ADAPTER pAd,
4601 OUT BSS_TABLE *OutTab,
4602 IN CHAR Ssid[],
4603 IN UCHAR SsidLen);
4605 VOID BssTableSortByRssi(
4606 IN OUT BSS_TABLE *OutTab);
4608 VOID BssCipherParse(
4609 IN OUT PBSS_ENTRY pBss);
4611 NDIS_STATUS MlmeQueueInit(
4612 IN MLME_QUEUE *Queue);
4614 VOID MlmeQueueDestroy(
4615 IN MLME_QUEUE *Queue);
4617 BOOLEAN MlmeEnqueue(
4618 IN PRTMP_ADAPTER pAd,
4619 IN ULONG Machine,
4620 IN ULONG MsgType,
4621 IN ULONG MsgLen,
4622 IN VOID *Msg);
4624 BOOLEAN MlmeEnqueueForRecv(
4625 IN PRTMP_ADAPTER pAd,
4626 IN ULONG Wcid,
4627 IN ULONG TimeStampHigh,
4628 IN ULONG TimeStampLow,
4629 IN UCHAR Rssi0,
4630 IN UCHAR Rssi1,
4631 IN UCHAR Rssi2,
4632 IN ULONG MsgLen,
4633 IN PVOID Msg,
4634 IN UCHAR Signal);
4637 BOOLEAN MlmeDequeue(
4638 IN MLME_QUEUE *Queue,
4639 OUT MLME_QUEUE_ELEM **Elem);
4641 VOID MlmeRestartStateMachine(
4642 IN PRTMP_ADAPTER pAd);
4644 BOOLEAN MlmeQueueEmpty(
4645 IN MLME_QUEUE *Queue);
4647 BOOLEAN MlmeQueueFull(
4648 IN MLME_QUEUE *Queue);
4650 BOOLEAN MsgTypeSubst(
4651 IN PRTMP_ADAPTER pAd,
4652 IN PFRAME_802_11 pFrame,
4653 OUT INT *Machine,
4654 OUT INT *MsgType);
4656 VOID StateMachineInit(
4657 IN STATE_MACHINE *Sm,
4658 IN STATE_MACHINE_FUNC Trans[],
4659 IN ULONG StNr,
4660 IN ULONG MsgNr,
4661 IN STATE_MACHINE_FUNC DefFunc,
4662 IN ULONG InitState,
4663 IN ULONG Base);
4665 VOID StateMachineSetAction(
4666 IN STATE_MACHINE *S,
4667 IN ULONG St,
4668 ULONG Msg,
4669 IN STATE_MACHINE_FUNC F);
4671 VOID StateMachinePerformAction(
4672 IN PRTMP_ADAPTER pAd,
4673 IN STATE_MACHINE *S,
4674 IN MLME_QUEUE_ELEM *Elem);
4676 VOID Drop(
4677 IN PRTMP_ADAPTER pAd,
4678 IN MLME_QUEUE_ELEM *Elem);
4680 VOID AssocStateMachineInit(
4681 IN PRTMP_ADAPTER pAd,
4682 IN STATE_MACHINE *Sm,
4683 OUT STATE_MACHINE_FUNC Trans[]);
4685 VOID ReassocTimeout(
4686 IN PVOID SystemSpecific1,
4687 IN PVOID FunctionContext,
4688 IN PVOID SystemSpecific2,
4689 IN PVOID SystemSpecific3);
4691 VOID AssocTimeout(
4692 IN PVOID SystemSpecific1,
4693 IN PVOID FunctionContext,
4694 IN PVOID SystemSpecific2,
4695 IN PVOID SystemSpecific3);
4697 VOID DisassocTimeout(
4698 IN PVOID SystemSpecific1,
4699 IN PVOID FunctionContext,
4700 IN PVOID SystemSpecific2,
4701 IN PVOID SystemSpecific3);
4703 //----------------------------------------------
4704 VOID MlmeDisassocReqAction(
4705 IN PRTMP_ADAPTER pAd,
4706 IN MLME_QUEUE_ELEM *Elem);
4708 VOID MlmeAssocReqAction(
4709 IN PRTMP_ADAPTER pAd,
4710 IN MLME_QUEUE_ELEM *Elem);
4712 VOID MlmeReassocReqAction(
4713 IN PRTMP_ADAPTER pAd,
4714 IN MLME_QUEUE_ELEM *Elem);
4716 VOID MlmeDisassocReqAction(
4717 IN PRTMP_ADAPTER pAd,
4718 IN MLME_QUEUE_ELEM *Elem);
4720 VOID PeerAssocRspAction(
4721 IN PRTMP_ADAPTER pAd,
4722 IN MLME_QUEUE_ELEM *Elem);
4724 VOID PeerReassocRspAction(
4725 IN PRTMP_ADAPTER pAd,
4726 IN MLME_QUEUE_ELEM *Elem);
4728 VOID PeerDisassocAction(
4729 IN PRTMP_ADAPTER pAd,
4730 IN MLME_QUEUE_ELEM *Elem);
4732 VOID DisassocTimeoutAction(
4733 IN PRTMP_ADAPTER pAd,
4734 IN MLME_QUEUE_ELEM *Elem);
4736 VOID AssocTimeoutAction(
4737 IN PRTMP_ADAPTER pAd,
4738 IN MLME_QUEUE_ELEM *Elem);
4740 VOID ReassocTimeoutAction(
4741 IN PRTMP_ADAPTER pAd,
4742 IN MLME_QUEUE_ELEM *Elem);
4744 VOID Cls3errAction(
4745 IN PRTMP_ADAPTER pAd,
4746 IN PUCHAR pAddr);
4748 VOID SwitchBetweenWepAndCkip(
4749 IN PRTMP_ADAPTER pAd);
4751 VOID InvalidStateWhenAssoc(
4752 IN PRTMP_ADAPTER pAd,
4753 IN MLME_QUEUE_ELEM *Elem);
4755 VOID InvalidStateWhenReassoc(
4756 IN PRTMP_ADAPTER pAd,
4757 IN MLME_QUEUE_ELEM *Elem);
4759 VOID InvalidStateWhenDisassociate(
4760 IN PRTMP_ADAPTER pAd,
4761 IN MLME_QUEUE_ELEM *Elem);
4763 #ifdef RT2870
4764 VOID MlmeCntlConfirm(
4765 IN PRTMP_ADAPTER pAd,
4766 IN ULONG MsgType,
4767 IN USHORT Msg);
4768 #endif // RT2870 //
4770 VOID ComposePsPoll(
4771 IN PRTMP_ADAPTER pAd);
4773 VOID ComposeNullFrame(
4774 IN PRTMP_ADAPTER pAd);
4776 VOID AssocPostProc(
4777 IN PRTMP_ADAPTER pAd,
4778 IN PUCHAR pAddr2,
4779 IN USHORT CapabilityInfo,
4780 IN USHORT Aid,
4781 IN UCHAR SupRate[],
4782 IN UCHAR SupRateLen,
4783 IN UCHAR ExtRate[],
4784 IN UCHAR ExtRateLen,
4785 IN PEDCA_PARM pEdcaParm,
4786 IN HT_CAPABILITY_IE *pHtCapability,
4787 IN UCHAR HtCapabilityLen,
4788 IN ADD_HT_INFO_IE *pAddHtInfo);
4790 VOID AuthStateMachineInit(
4791 IN PRTMP_ADAPTER pAd,
4792 IN PSTATE_MACHINE sm,
4793 OUT STATE_MACHINE_FUNC Trans[]);
4795 VOID AuthTimeout(
4796 IN PVOID SystemSpecific1,
4797 IN PVOID FunctionContext,
4798 IN PVOID SystemSpecific2,
4799 IN PVOID SystemSpecific3);
4801 VOID MlmeAuthReqAction(
4802 IN PRTMP_ADAPTER pAd,
4803 IN MLME_QUEUE_ELEM *Elem);
4805 VOID PeerAuthRspAtSeq2Action(
4806 IN PRTMP_ADAPTER pAd,
4807 IN MLME_QUEUE_ELEM *Elem);
4809 VOID PeerAuthRspAtSeq4Action(
4810 IN PRTMP_ADAPTER pAd,
4811 IN MLME_QUEUE_ELEM *Elem);
4813 VOID AuthTimeoutAction(
4814 IN PRTMP_ADAPTER pAd,
4815 IN MLME_QUEUE_ELEM *Elem);
4817 VOID Cls2errAction(
4818 IN PRTMP_ADAPTER pAd,
4819 IN PUCHAR pAddr);
4821 VOID MlmeDeauthReqAction(
4822 IN PRTMP_ADAPTER pAd,
4823 IN MLME_QUEUE_ELEM *Elem);
4825 VOID InvalidStateWhenAuth(
4826 IN PRTMP_ADAPTER pAd,
4827 IN MLME_QUEUE_ELEM *Elem);
4829 //=============================================
4831 VOID AuthRspStateMachineInit(
4832 IN PRTMP_ADAPTER pAd,
4833 IN PSTATE_MACHINE Sm,
4834 IN STATE_MACHINE_FUNC Trans[]);
4836 VOID PeerDeauthAction(
4837 IN PRTMP_ADAPTER pAd,
4838 IN MLME_QUEUE_ELEM *Elem);
4840 VOID PeerAuthSimpleRspGenAndSend(
4841 IN PRTMP_ADAPTER pAd,
4842 IN PHEADER_802_11 pHdr80211,
4843 IN USHORT Alg,
4844 IN USHORT Seq,
4845 IN USHORT Reason,
4846 IN USHORT Status);
4849 // Private routines in dls.c
4852 #ifdef CONFIG_STA_SUPPORT
4853 #ifdef QOS_DLS_SUPPORT
4854 void DlsStateMachineInit(
4855 IN PRTMP_ADAPTER pAd,
4856 IN STATE_MACHINE *Sm,
4857 OUT STATE_MACHINE_FUNC Trans[]);
4859 VOID MlmeDlsReqAction(
4860 IN PRTMP_ADAPTER pAd,
4861 IN MLME_QUEUE_ELEM *Elem);
4863 VOID PeerDlsReqAction(
4864 IN PRTMP_ADAPTER pAd,
4865 IN MLME_QUEUE_ELEM *Elem);
4867 VOID PeerDlsRspAction(
4868 IN PRTMP_ADAPTER pAd,
4869 IN MLME_QUEUE_ELEM *Elem);
4871 VOID MlmeDlsTearDownAction(
4872 IN PRTMP_ADAPTER pAd,
4873 IN MLME_QUEUE_ELEM *Elem);
4875 VOID PeerDlsTearDownAction(
4876 IN PRTMP_ADAPTER pAd,
4877 IN MLME_QUEUE_ELEM *Elem);
4879 VOID RTMPCheckDLSTimeOut(
4880 IN PRTMP_ADAPTER pAd);
4882 BOOLEAN RTMPRcvFrameDLSCheck(
4883 IN PRTMP_ADAPTER pAd,
4884 IN PHEADER_802_11 pHeader,
4885 IN ULONG Len,
4886 IN PRT28XX_RXD_STRUC pRxD);
4888 INT RTMPCheckDLSFrame(
4889 IN PRTMP_ADAPTER pAd,
4890 IN PUCHAR pDA);
4892 VOID RTMPSendDLSTearDownFrame(
4893 IN PRTMP_ADAPTER pAd,
4894 IN PUCHAR pDA);
4896 NDIS_STATUS RTMPSendSTAKeyRequest(
4897 IN PRTMP_ADAPTER pAd,
4898 IN PUCHAR pDA);
4900 NDIS_STATUS RTMPSendSTAKeyHandShake(
4901 IN PRTMP_ADAPTER pAd,
4902 IN PUCHAR pDA);
4904 VOID DlsTimeoutAction(
4905 IN PVOID SystemSpecific1,
4906 IN PVOID FunctionContext,
4907 IN PVOID SystemSpecific2,
4908 IN PVOID SystemSpecific3);
4910 BOOLEAN MlmeDlsReqSanity(
4911 IN PRTMP_ADAPTER pAd,
4912 IN VOID *Msg,
4913 IN ULONG MsgLen,
4914 OUT PRT_802_11_DLS *pDLS,
4915 OUT PUSHORT pReason);
4917 INT Set_DlsEntryInfo_Display_Proc(
4918 IN PRTMP_ADAPTER pAd,
4919 IN PUCHAR arg);
4921 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4922 IN PRTMP_ADAPTER pAd,
4923 IN PUCHAR pAddr,
4924 IN UINT DlsEntryIdx);
4926 BOOLEAN MacTableDeleteDlsEntry(
4927 IN PRTMP_ADAPTER pAd,
4928 IN USHORT wcid,
4929 IN PUCHAR pAddr);
4931 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4932 IN PRTMP_ADAPTER pAd,
4933 IN PUCHAR pAddr,
4934 IN BOOLEAN bResetIdelCount);
4936 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4937 IN PRTMP_ADAPTER pAd,
4938 IN UCHAR wcid,
4939 IN PUCHAR pAddr,
4940 IN BOOLEAN bResetIdelCount);
4942 INT Set_DlsAddEntry_Proc(
4943 IN PRTMP_ADAPTER pAd,
4944 IN PUCHAR arg);
4946 INT Set_DlsTearDownEntry_Proc(
4947 IN PRTMP_ADAPTER pAd,
4948 IN PUCHAR arg);
4949 #endif // QOS_DLS_SUPPORT //
4950 #endif // CONFIG_STA_SUPPORT //
4952 #ifdef QOS_DLS_SUPPORT
4953 BOOLEAN PeerDlsReqSanity(
4954 IN PRTMP_ADAPTER pAd,
4955 IN VOID *Msg,
4956 IN ULONG MsgLen,
4957 OUT PUCHAR pDA,
4958 OUT PUCHAR pSA,
4959 OUT USHORT *pCapabilityInfo,
4960 OUT USHORT *pDlsTimeout,
4961 OUT UCHAR *pRatesLen,
4962 OUT UCHAR Rates[],
4963 OUT UCHAR *pHtCapabilityLen,
4964 OUT HT_CAPABILITY_IE *pHtCapability);
4966 BOOLEAN PeerDlsRspSanity(
4967 IN PRTMP_ADAPTER pAd,
4968 IN VOID *Msg,
4969 IN ULONG MsgLen,
4970 OUT PUCHAR pDA,
4971 OUT PUCHAR pSA,
4972 OUT USHORT *pCapabilityInfo,
4973 OUT USHORT *pStatus,
4974 OUT UCHAR *pRatesLen,
4975 OUT UCHAR Rates[],
4976 OUT UCHAR *pHtCapabilityLen,
4977 OUT HT_CAPABILITY_IE *pHtCapability);
4979 BOOLEAN PeerDlsTearDownSanity(
4980 IN PRTMP_ADAPTER pAd,
4981 IN VOID *Msg,
4982 IN ULONG MsgLen,
4983 OUT PUCHAR pDA,
4984 OUT PUCHAR pSA,
4985 OUT USHORT *pReason);
4986 #endif // QOS_DLS_SUPPORT //
4988 //========================================
4990 VOID SyncStateMachineInit(
4991 IN PRTMP_ADAPTER pAd,
4992 IN STATE_MACHINE *Sm,
4993 OUT STATE_MACHINE_FUNC Trans[]);
4995 VOID BeaconTimeout(
4996 IN PVOID SystemSpecific1,
4997 IN PVOID FunctionContext,
4998 IN PVOID SystemSpecific2,
4999 IN PVOID SystemSpecific3);
5001 VOID ScanTimeout(
5002 IN PVOID SystemSpecific1,
5003 IN PVOID FunctionContext,
5004 IN PVOID SystemSpecific2,
5005 IN PVOID SystemSpecific3);
5007 VOID MlmeScanReqAction(
5008 IN PRTMP_ADAPTER pAd,
5009 IN MLME_QUEUE_ELEM *Elem);
5011 VOID InvalidStateWhenScan(
5012 IN PRTMP_ADAPTER pAd,
5013 IN MLME_QUEUE_ELEM *Elem);
5015 VOID InvalidStateWhenJoin(
5016 IN PRTMP_ADAPTER pAd,
5017 IN MLME_QUEUE_ELEM *Elem);
5019 VOID InvalidStateWhenStart(
5020 IN PRTMP_ADAPTER pAd,
5021 IN MLME_QUEUE_ELEM *Elem);
5023 VOID PeerBeacon(
5024 IN PRTMP_ADAPTER pAd,
5025 IN MLME_QUEUE_ELEM *Elem);
5027 VOID EnqueueProbeRequest(
5028 IN PRTMP_ADAPTER pAd);
5030 BOOLEAN ScanRunning(
5031 IN PRTMP_ADAPTER pAd);
5032 //=========================================
5034 VOID MlmeCntlInit(
5035 IN PRTMP_ADAPTER pAd,
5036 IN STATE_MACHINE *S,
5037 OUT STATE_MACHINE_FUNC Trans[]);
5039 VOID MlmeCntlMachinePerformAction(
5040 IN PRTMP_ADAPTER pAd,
5041 IN STATE_MACHINE *S,
5042 IN MLME_QUEUE_ELEM *Elem);
5044 VOID CntlIdleProc(
5045 IN PRTMP_ADAPTER pAd,
5046 IN MLME_QUEUE_ELEM *Elem);
5048 VOID CntlOidScanProc(
5049 IN PRTMP_ADAPTER pAd,
5050 IN MLME_QUEUE_ELEM *Elem);
5052 VOID CntlOidSsidProc(
5053 IN PRTMP_ADAPTER pAd,
5054 IN MLME_QUEUE_ELEM * Elem);
5056 VOID CntlOidRTBssidProc(
5057 IN PRTMP_ADAPTER pAd,
5058 IN MLME_QUEUE_ELEM * Elem);
5060 VOID CntlMlmeRoamingProc(
5061 IN PRTMP_ADAPTER pAd,
5062 IN MLME_QUEUE_ELEM * Elem);
5064 VOID CntlWaitDisassocProc(
5065 IN PRTMP_ADAPTER pAd,
5066 IN MLME_QUEUE_ELEM *Elem);
5068 VOID CntlWaitJoinProc(
5069 IN PRTMP_ADAPTER pAd,
5070 IN MLME_QUEUE_ELEM *Elem);
5072 VOID CntlWaitReassocProc(
5073 IN PRTMP_ADAPTER pAd,
5074 IN MLME_QUEUE_ELEM *Elem);
5076 VOID CntlWaitStartProc(
5077 IN PRTMP_ADAPTER pAd,
5078 IN MLME_QUEUE_ELEM *Elem);
5080 VOID CntlWaitAuthProc(
5081 IN PRTMP_ADAPTER pAd,
5082 IN MLME_QUEUE_ELEM *Elem);
5084 VOID CntlWaitAuthProc2(
5085 IN PRTMP_ADAPTER pAd,
5086 IN MLME_QUEUE_ELEM *Elem);
5088 VOID CntlWaitAssocProc(
5089 IN PRTMP_ADAPTER pAd,
5090 IN MLME_QUEUE_ELEM *Elem);
5092 #ifdef QOS_DLS_SUPPORT
5093 VOID CntlOidDLSSetupProc(
5094 IN PRTMP_ADAPTER pAd,
5095 IN MLME_QUEUE_ELEM *Elem);
5096 #endif // QOS_DLS_SUPPORT //
5098 VOID LinkUp(
5099 IN PRTMP_ADAPTER pAd,
5100 IN UCHAR BssType);
5102 VOID LinkDown(
5103 IN PRTMP_ADAPTER pAd,
5104 IN BOOLEAN IsReqFromAP);
5106 VOID IterateOnBssTab(
5107 IN PRTMP_ADAPTER pAd);
5109 VOID IterateOnBssTab2(
5110 IN PRTMP_ADAPTER pAd);;
5112 VOID JoinParmFill(
5113 IN PRTMP_ADAPTER pAd,
5114 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
5115 IN ULONG BssIdx);
5117 VOID AssocParmFill(
5118 IN PRTMP_ADAPTER pAd,
5119 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
5120 IN PUCHAR pAddr,
5121 IN USHORT CapabilityInfo,
5122 IN ULONG Timeout,
5123 IN USHORT ListenIntv);
5125 VOID ScanParmFill(
5126 IN PRTMP_ADAPTER pAd,
5127 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5128 IN CHAR Ssid[],
5129 IN UCHAR SsidLen,
5130 IN UCHAR BssType,
5131 IN UCHAR ScanType);
5133 VOID DisassocParmFill(
5134 IN PRTMP_ADAPTER pAd,
5135 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5136 IN PUCHAR pAddr,
5137 IN USHORT Reason);
5139 VOID StartParmFill(
5140 IN PRTMP_ADAPTER pAd,
5141 IN OUT MLME_START_REQ_STRUCT *StartReq,
5142 IN CHAR Ssid[],
5143 IN UCHAR SsidLen);
5145 VOID AuthParmFill(
5146 IN PRTMP_ADAPTER pAd,
5147 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5148 IN PUCHAR pAddr,
5149 IN USHORT Alg);
5151 VOID EnqueuePsPoll(
5152 IN PRTMP_ADAPTER pAd);
5154 VOID EnqueueBeaconFrame(
5155 IN PRTMP_ADAPTER pAd);
5157 VOID MlmeJoinReqAction(
5158 IN PRTMP_ADAPTER pAd,
5159 IN MLME_QUEUE_ELEM *Elem);
5161 VOID MlmeScanReqAction(
5162 IN PRTMP_ADAPTER pAd,
5163 IN MLME_QUEUE_ELEM *Elem);
5165 VOID MlmeStartReqAction(
5166 IN PRTMP_ADAPTER pAd,
5167 IN MLME_QUEUE_ELEM *Elem);
5169 VOID ScanTimeoutAction(
5170 IN PRTMP_ADAPTER pAd,
5171 IN MLME_QUEUE_ELEM *Elem);
5173 VOID BeaconTimeoutAtJoinAction(
5174 IN PRTMP_ADAPTER pAd,
5175 IN MLME_QUEUE_ELEM *Elem);
5177 VOID PeerBeaconAtScanAction(
5178 IN PRTMP_ADAPTER pAd,
5179 IN MLME_QUEUE_ELEM *Elem);
5181 VOID PeerBeaconAtJoinAction(
5182 IN PRTMP_ADAPTER pAd,
5183 IN MLME_QUEUE_ELEM *Elem);
5185 VOID PeerBeacon(
5186 IN PRTMP_ADAPTER pAd,
5187 IN MLME_QUEUE_ELEM *Elem);
5189 VOID PeerProbeReqAction(
5190 IN PRTMP_ADAPTER pAd,
5191 IN MLME_QUEUE_ELEM *Elem);
5193 VOID ScanNextChannel(
5194 IN PRTMP_ADAPTER pAd);
5196 ULONG MakeIbssBeacon(
5197 IN PRTMP_ADAPTER pAd);
5199 VOID CCXAdjacentAPReport(
5200 IN PRTMP_ADAPTER pAd);
5202 BOOLEAN MlmeScanReqSanity(
5203 IN PRTMP_ADAPTER pAd,
5204 IN VOID *Msg,
5205 IN ULONG MsgLen,
5206 OUT UCHAR *BssType,
5207 OUT CHAR ssid[],
5208 OUT UCHAR *SsidLen,
5209 OUT UCHAR *ScanType);
5211 BOOLEAN PeerBeaconAndProbeRspSanity(
5212 IN PRTMP_ADAPTER pAd,
5213 IN VOID *Msg,
5214 IN ULONG MsgLen,
5215 IN UCHAR MsgChannel,
5216 OUT PUCHAR pAddr2,
5217 OUT PUCHAR pBssid,
5218 OUT CHAR Ssid[],
5219 OUT UCHAR *pSsidLen,
5220 OUT UCHAR *pBssType,
5221 OUT USHORT *pBeaconPeriod,
5222 OUT UCHAR *pChannel,
5223 OUT UCHAR *pNewChannel,
5224 OUT LARGE_INTEGER *pTimestamp,
5225 OUT CF_PARM *pCfParm,
5226 OUT USHORT *pAtimWin,
5227 OUT USHORT *pCapabilityInfo,
5228 OUT UCHAR *pErp,
5229 OUT UCHAR *pDtimCount,
5230 OUT UCHAR *pDtimPeriod,
5231 OUT UCHAR *pBcastFlag,
5232 OUT UCHAR *pMessageToMe,
5233 OUT UCHAR SupRate[],
5234 OUT UCHAR *pSupRateLen,
5235 OUT UCHAR ExtRate[],
5236 OUT UCHAR *pExtRateLen,
5237 OUT UCHAR *pCkipFlag,
5238 OUT UCHAR *pAironetCellPowerLimit,
5239 OUT PEDCA_PARM pEdcaParm,
5240 OUT PQBSS_LOAD_PARM pQbssLoad,
5241 OUT PQOS_CAPABILITY_PARM pQosCapability,
5242 OUT ULONG *pRalinkIe,
5243 OUT UCHAR *pHtCapabilityLen,
5244 #ifdef CONFIG_STA_SUPPORT
5245 OUT UCHAR *pPreNHtCapabilityLen,
5246 #endif // CONFIG_STA_SUPPORT //
5247 OUT HT_CAPABILITY_IE *pHtCapability,
5248 OUT UCHAR *AddHtInfoLen,
5249 OUT ADD_HT_INFO_IE *AddHtInfo,
5250 OUT UCHAR *NewExtChannel,
5251 OUT USHORT *LengthVIE,
5252 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5254 BOOLEAN PeerAddBAReqActionSanity(
5255 IN PRTMP_ADAPTER pAd,
5256 IN VOID *pMsg,
5257 IN ULONG MsgLen,
5258 OUT PUCHAR pAddr2);
5260 BOOLEAN PeerAddBARspActionSanity(
5261 IN PRTMP_ADAPTER pAd,
5262 IN VOID *pMsg,
5263 IN ULONG MsgLen);
5265 BOOLEAN PeerDelBAActionSanity(
5266 IN PRTMP_ADAPTER pAd,
5267 IN UCHAR Wcid,
5268 IN VOID *pMsg,
5269 IN ULONG MsgLen);
5271 BOOLEAN MlmeAssocReqSanity(
5272 IN PRTMP_ADAPTER pAd,
5273 IN VOID *Msg,
5274 IN ULONG MsgLen,
5275 OUT PUCHAR pApAddr,
5276 OUT USHORT *CapabilityInfo,
5277 OUT ULONG *Timeout,
5278 OUT USHORT *ListenIntv);
5280 BOOLEAN MlmeAuthReqSanity(
5281 IN PRTMP_ADAPTER pAd,
5282 IN VOID *Msg,
5283 IN ULONG MsgLen,
5284 OUT PUCHAR pAddr,
5285 OUT ULONG *Timeout,
5286 OUT USHORT *Alg);
5288 BOOLEAN MlmeStartReqSanity(
5289 IN PRTMP_ADAPTER pAd,
5290 IN VOID *Msg,
5291 IN ULONG MsgLen,
5292 OUT CHAR Ssid[],
5293 OUT UCHAR *Ssidlen);
5295 BOOLEAN PeerAuthSanity(
5296 IN PRTMP_ADAPTER pAd,
5297 IN VOID *Msg,
5298 IN ULONG MsgLen,
5299 OUT PUCHAR pAddr,
5300 OUT USHORT *Alg,
5301 OUT USHORT *Seq,
5302 OUT USHORT *Status,
5303 OUT CHAR ChlgText[]);
5305 BOOLEAN PeerAssocRspSanity(
5306 IN PRTMP_ADAPTER pAd,
5307 IN VOID *pMsg,
5308 IN ULONG MsgLen,
5309 OUT PUCHAR pAddr2,
5310 OUT USHORT *pCapabilityInfo,
5311 OUT USHORT *pStatus,
5312 OUT USHORT *pAid,
5313 OUT UCHAR SupRate[],
5314 OUT UCHAR *pSupRateLen,
5315 OUT UCHAR ExtRate[],
5316 OUT UCHAR *pExtRateLen,
5317 OUT HT_CAPABILITY_IE *pHtCapability,
5318 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5319 OUT UCHAR *pHtCapabilityLen,
5320 OUT UCHAR *pAddHtInfoLen,
5321 OUT UCHAR *pNewExtChannelOffset,
5322 OUT PEDCA_PARM pEdcaParm,
5323 OUT UCHAR *pCkipFlag);
5325 BOOLEAN PeerDisassocSanity(
5326 IN PRTMP_ADAPTER pAd,
5327 IN VOID *Msg,
5328 IN ULONG MsgLen,
5329 OUT PUCHAR pAddr2,
5330 OUT USHORT *Reason);
5332 BOOLEAN PeerWpaMessageSanity(
5333 IN PRTMP_ADAPTER pAd,
5334 IN PEAPOL_PACKET pMsg,
5335 IN ULONG MsgLen,
5336 IN UCHAR MsgType,
5337 IN MAC_TABLE_ENTRY *pEntry);
5339 BOOLEAN PeerDeauthSanity(
5340 IN PRTMP_ADAPTER pAd,
5341 IN VOID *Msg,
5342 IN ULONG MsgLen,
5343 OUT PUCHAR pAddr2,
5344 OUT USHORT *Reason);
5346 BOOLEAN PeerProbeReqSanity(
5347 IN PRTMP_ADAPTER pAd,
5348 IN VOID *Msg,
5349 IN ULONG MsgLen,
5350 OUT PUCHAR pAddr2,
5351 OUT CHAR Ssid[],
5352 OUT UCHAR *pSsidLen);
5354 BOOLEAN GetTimBit(
5355 IN CHAR *Ptr,
5356 IN USHORT Aid,
5357 OUT UCHAR *TimLen,
5358 OUT UCHAR *BcastFlag,
5359 OUT UCHAR *DtimCount,
5360 OUT UCHAR *DtimPeriod,
5361 OUT UCHAR *MessageToMe);
5363 UCHAR ChannelSanity(
5364 IN PRTMP_ADAPTER pAd,
5365 IN UCHAR channel);
5367 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5368 IN PBSS_ENTRY pBss);
5370 BOOLEAN MlmeDelBAReqSanity(
5371 IN PRTMP_ADAPTER pAd,
5372 IN VOID *Msg,
5373 IN ULONG MsgLen);
5375 BOOLEAN MlmeAddBAReqSanity(
5376 IN PRTMP_ADAPTER pAd,
5377 IN VOID *Msg,
5378 IN ULONG MsgLen,
5379 OUT PUCHAR pAddr2);
5381 ULONG MakeOutgoingFrame(
5382 OUT CHAR *Buffer,
5383 OUT ULONG *Length, ...);
5385 VOID LfsrInit(
5386 IN PRTMP_ADAPTER pAd,
5387 IN ULONG Seed);
5389 UCHAR RandomByte(
5390 IN PRTMP_ADAPTER pAd);
5392 VOID AsicUpdateAutoFallBackTable(
5393 IN PRTMP_ADAPTER pAd,
5394 IN PUCHAR pTxRate);
5396 VOID MlmePeriodicExec(
5397 IN PVOID SystemSpecific1,
5398 IN PVOID FunctionContext,
5399 IN PVOID SystemSpecific2,
5400 IN PVOID SystemSpecific3);
5402 VOID LinkDownExec(
5403 IN PVOID SystemSpecific1,
5404 IN PVOID FunctionContext,
5405 IN PVOID SystemSpecific2,
5406 IN PVOID SystemSpecific3);
5408 VOID LinkUpExec(
5409 IN PVOID SystemSpecific1,
5410 IN PVOID FunctionContext,
5411 IN PVOID SystemSpecific2,
5412 IN PVOID SystemSpecific3);
5414 VOID STAMlmePeriodicExec(
5415 PRTMP_ADAPTER pAd);
5417 VOID MlmeAutoScan(
5418 IN PRTMP_ADAPTER pAd);
5420 VOID MlmeAutoReconnectLastSSID(
5421 IN PRTMP_ADAPTER pAd);
5423 BOOLEAN MlmeValidateSSID(
5424 IN PUCHAR pSsid,
5425 IN UCHAR SsidLen);
5427 VOID MlmeCheckForRoaming(
5428 IN PRTMP_ADAPTER pAd,
5429 IN ULONG Now32);
5431 VOID MlmeCheckForFastRoaming(
5432 IN PRTMP_ADAPTER pAd,
5433 IN ULONG Now);
5435 VOID MlmeDynamicTxRateSwitching(
5436 IN PRTMP_ADAPTER pAd);
5438 VOID MlmeSetTxRate(
5439 IN PRTMP_ADAPTER pAd,
5440 IN PMAC_TABLE_ENTRY pEntry,
5441 IN PRTMP_TX_RATE_SWITCH pTxRate);
5443 VOID MlmeSelectTxRateTable(
5444 IN PRTMP_ADAPTER pAd,
5445 IN PMAC_TABLE_ENTRY pEntry,
5446 IN PUCHAR *ppTable,
5447 IN PUCHAR pTableSize,
5448 IN PUCHAR pInitTxRateIdx);
5450 VOID MlmeCalculateChannelQuality(
5451 IN PRTMP_ADAPTER pAd,
5452 IN ULONG Now);
5454 VOID MlmeCheckPsmChange(
5455 IN PRTMP_ADAPTER pAd,
5456 IN ULONG Now32);
5458 VOID MlmeSetPsmBit(
5459 IN PRTMP_ADAPTER pAd,
5460 IN USHORT psm);
5462 VOID MlmeSetTxPreamble(
5463 IN PRTMP_ADAPTER pAd,
5464 IN USHORT TxPreamble);
5466 VOID UpdateBasicRateBitmap(
5467 IN PRTMP_ADAPTER pAd);
5469 VOID MlmeUpdateTxRates(
5470 IN PRTMP_ADAPTER pAd,
5471 IN BOOLEAN bLinkUp,
5472 IN UCHAR apidx);
5474 #ifdef DOT11_N_SUPPORT
5475 VOID MlmeUpdateHtTxRates(
5476 IN PRTMP_ADAPTER pAd,
5477 IN UCHAR apidx);
5478 #endif // DOT11_N_SUPPORT //
5480 VOID RTMPCheckRates(
5481 IN PRTMP_ADAPTER pAd,
5482 IN OUT UCHAR SupRate[],
5483 IN OUT UCHAR *SupRateLen);
5485 #ifdef CONFIG_STA_SUPPORT
5486 BOOLEAN RTMPCheckChannel(
5487 IN PRTMP_ADAPTER pAd,
5488 IN UCHAR CentralChannel,
5489 IN UCHAR Channel);
5490 #endif // CONFIG_STA_SUPPORT //
5492 BOOLEAN RTMPCheckHt(
5493 IN PRTMP_ADAPTER pAd,
5494 IN UCHAR Wcid,
5495 IN OUT HT_CAPABILITY_IE *pHtCapability,
5496 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5498 VOID StaQuickResponeForRateUpExec(
5499 IN PVOID SystemSpecific1,
5500 IN PVOID FunctionContext,
5501 IN PVOID SystemSpecific2,
5502 IN PVOID SystemSpecific3);
5504 VOID AsicBbpTuning1(
5505 IN PRTMP_ADAPTER pAd);
5507 VOID AsicBbpTuning2(
5508 IN PRTMP_ADAPTER pAd);
5510 VOID RTMPUpdateMlmeRate(
5511 IN PRTMP_ADAPTER pAd);
5513 CHAR RTMPMaxRssi(
5514 IN PRTMP_ADAPTER pAd,
5515 IN CHAR Rssi0,
5516 IN CHAR Rssi1,
5517 IN CHAR Rssi2);
5519 VOID AsicSetRxAnt(
5520 IN PRTMP_ADAPTER pAd,
5521 IN UCHAR Ant);
5523 VOID AsicEvaluateRxAnt(
5524 IN PRTMP_ADAPTER pAd);
5526 VOID AsicRxAntEvalTimeout(
5527 IN PVOID SystemSpecific1,
5528 IN PVOID FunctionContext,
5529 IN PVOID SystemSpecific2,
5530 IN PVOID SystemSpecific3);
5532 VOID APSDPeriodicExec(
5533 IN PVOID SystemSpecific1,
5534 IN PVOID FunctionContext,
5535 IN PVOID SystemSpecific2,
5536 IN PVOID SystemSpecific3);
5538 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5539 IN PRTMP_ADAPTER pAd,
5540 IN PMAC_TABLE_ENTRY pEntry);
5542 UCHAR RTMPStaFixedTxMode(
5543 IN PRTMP_ADAPTER pAd,
5544 IN PMAC_TABLE_ENTRY pEntry);
5546 VOID RTMPUpdateLegacyTxSetting(
5547 UCHAR fixed_tx_mode,
5548 PMAC_TABLE_ENTRY pEntry);
5550 BOOLEAN RTMPAutoRateSwitchCheck(
5551 IN PRTMP_ADAPTER pAd);
5553 NDIS_STATUS MlmeInit(
5554 IN PRTMP_ADAPTER pAd);
5556 VOID MlmeHandler(
5557 IN PRTMP_ADAPTER pAd);
5559 VOID MlmeHalt(
5560 IN PRTMP_ADAPTER pAd);
5562 VOID MlmeResetRalinkCounters(
5563 IN PRTMP_ADAPTER pAd);
5565 VOID BuildChannelList(
5566 IN PRTMP_ADAPTER pAd);
5568 UCHAR FirstChannel(
5569 IN PRTMP_ADAPTER pAd);
5571 UCHAR NextChannel(
5572 IN PRTMP_ADAPTER pAd,
5573 IN UCHAR channel);
5575 VOID ChangeToCellPowerLimit(
5576 IN PRTMP_ADAPTER pAd,
5577 IN UCHAR AironetCellPowerLimit);
5579 VOID RaiseClock(
5580 IN PRTMP_ADAPTER pAd,
5581 IN UINT32 *x);
5583 VOID LowerClock(
5584 IN PRTMP_ADAPTER pAd,
5585 IN UINT32 *x);
5587 USHORT ShiftInBits(
5588 IN PRTMP_ADAPTER pAd);
5590 VOID ShiftOutBits(
5591 IN PRTMP_ADAPTER pAd,
5592 IN USHORT data,
5593 IN USHORT count);
5595 VOID EEpromCleanup(
5596 IN PRTMP_ADAPTER pAd);
5598 VOID EWDS(
5599 IN PRTMP_ADAPTER pAd);
5601 VOID EWEN(
5602 IN PRTMP_ADAPTER pAd);
5604 USHORT RTMP_EEPROM_READ16(
5605 IN PRTMP_ADAPTER pAd,
5606 IN USHORT Offset);
5608 VOID RTMP_EEPROM_WRITE16(
5609 IN PRTMP_ADAPTER pAd,
5610 IN USHORT Offset,
5611 IN USHORT Data);
5614 // Prototypes of function definition in rtmp_tkip.c
5616 VOID RTMPInitTkipEngine(
5617 IN PRTMP_ADAPTER pAd,
5618 IN PUCHAR pTKey,
5619 IN UCHAR KeyId,
5620 IN PUCHAR pTA,
5621 IN PUCHAR pMICKey,
5622 IN PUCHAR pTSC,
5623 OUT PULONG pIV16,
5624 OUT PULONG pIV32);
5626 VOID RTMPInitMICEngine(
5627 IN PRTMP_ADAPTER pAd,
5628 IN PUCHAR pKey,
5629 IN PUCHAR pDA,
5630 IN PUCHAR pSA,
5631 IN UCHAR UserPriority,
5632 IN PUCHAR pMICKey);
5634 BOOLEAN RTMPTkipCompareMICValue(
5635 IN PRTMP_ADAPTER pAd,
5636 IN PUCHAR pSrc,
5637 IN PUCHAR pDA,
5638 IN PUCHAR pSA,
5639 IN PUCHAR pMICKey,
5640 IN UCHAR UserPriority,
5641 IN UINT Len);
5643 VOID RTMPCalculateMICValue(
5644 IN PRTMP_ADAPTER pAd,
5645 IN PNDIS_PACKET pPacket,
5646 IN PUCHAR pEncap,
5647 IN PCIPHER_KEY pKey,
5648 IN UCHAR apidx);
5650 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5651 IN PRTMP_ADAPTER pAd,
5652 IN PUCHAR pLLC,
5653 IN PUCHAR pSrc,
5654 IN PUCHAR pDA,
5655 IN PUCHAR pSA,
5656 IN PUCHAR pMICKey,
5657 IN UINT Len);
5659 VOID RTMPTkipAppendByte(
5660 IN PTKIP_KEY_INFO pTkip,
5661 IN UCHAR uChar);
5663 VOID RTMPTkipAppend(
5664 IN PTKIP_KEY_INFO pTkip,
5665 IN PUCHAR pSrc,
5666 IN UINT nBytes);
5668 VOID RTMPTkipGetMIC(
5669 IN PTKIP_KEY_INFO pTkip);
5671 BOOLEAN RTMPSoftDecryptTKIP(
5672 IN PRTMP_ADAPTER pAd,
5673 IN PUCHAR pData,
5674 IN ULONG DataByteCnt,
5675 IN UCHAR UserPriority,
5676 IN PCIPHER_KEY pWpaKey);
5678 BOOLEAN RTMPSoftDecryptAES(
5679 IN PRTMP_ADAPTER pAd,
5680 IN PUCHAR pData,
5681 IN ULONG DataByteCnt,
5682 IN PCIPHER_KEY pWpaKey);
5685 // Prototypes of function definition in cmm_info.c
5687 NDIS_STATUS RTMPWPARemoveKeyProc(
5688 IN PRTMP_ADAPTER pAd,
5689 IN PVOID pBuf);
5691 VOID RTMPWPARemoveAllKeys(
5692 IN PRTMP_ADAPTER pAd);
5694 BOOLEAN RTMPCheckStrPrintAble(
5695 IN CHAR *pInPutStr,
5696 IN UCHAR strLen);
5698 VOID RTMPSetPhyMode(
5699 IN PRTMP_ADAPTER pAd,
5700 IN ULONG phymode);
5702 VOID RTMPUpdateHTIE(
5703 IN RT_HT_CAPABILITY *pRtHt,
5704 IN UCHAR *pMcsSet,
5705 OUT HT_CAPABILITY_IE *pHtCapability,
5706 OUT ADD_HT_INFO_IE *pAddHtInfo);
5708 VOID RTMPAddWcidAttributeEntry(
5709 IN PRTMP_ADAPTER pAd,
5710 IN UCHAR BssIdx,
5711 IN UCHAR KeyIdx,
5712 IN UCHAR CipherAlg,
5713 IN MAC_TABLE_ENTRY *pEntry);
5715 CHAR *GetEncryptType(
5716 CHAR enc);
5718 CHAR *GetAuthMode(
5719 CHAR auth);
5721 VOID RTMPIoctlGetSiteSurvey(
5722 IN PRTMP_ADAPTER pAdapter,
5723 IN struct iwreq *wrq);
5725 VOID RTMPIoctlGetMacTable(
5726 IN PRTMP_ADAPTER pAd,
5727 IN struct iwreq *wrq);
5729 VOID RTMPIndicateWPA2Status(
5730 IN PRTMP_ADAPTER pAdapter);
5732 VOID RTMPOPModeSwitching(
5733 IN PRTMP_ADAPTER pAd);
5735 #ifdef CONFIG_STA_SUPPORT
5736 VOID RTMPAddBSSIDCipher(
5737 IN PRTMP_ADAPTER pAd,
5738 IN UCHAR Aid,
5739 IN PNDIS_802_11_KEY pKey,
5740 IN UCHAR CipherAlg);
5741 #endif // CONFIG_STA_SUPPORT //
5743 #ifdef DOT11_N_SUPPORT
5744 VOID RTMPSetHT(
5745 IN PRTMP_ADAPTER pAd,
5746 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5748 VOID RTMPSetIndividualHT(
5749 IN PRTMP_ADAPTER pAd,
5750 IN UCHAR apidx);
5751 #endif // DOT11_N_SUPPORT //
5753 VOID RTMPSendWirelessEvent(
5754 IN PRTMP_ADAPTER pAd,
5755 IN USHORT Event_flag,
5756 IN PUCHAR pAddr,
5757 IN UCHAR BssIdx,
5758 IN CHAR Rssi);
5760 VOID NICUpdateCntlCounters(
5761 IN PRTMP_ADAPTER pAd,
5762 IN PHEADER_802_11 pHeader,
5763 IN UCHAR SubType,
5764 IN PRXWI_STRUC pRxWI);
5766 // prototype in wpa.c
5768 BOOLEAN WpaMsgTypeSubst(
5769 IN UCHAR EAPType,
5770 OUT INT *MsgType);
5772 VOID WpaPskStateMachineInit(
5773 IN PRTMP_ADAPTER pAd,
5774 IN STATE_MACHINE *S,
5775 OUT STATE_MACHINE_FUNC Trans[]);
5777 VOID WpaEAPOLKeyAction(
5778 IN PRTMP_ADAPTER pAd,
5779 IN MLME_QUEUE_ELEM *Elem);
5781 VOID WpaPairMsg1Action(
5782 IN PRTMP_ADAPTER pAd,
5783 IN MLME_QUEUE_ELEM *Elem);
5785 VOID WpaPairMsg3Action(
5786 IN PRTMP_ADAPTER pAd,
5787 IN MLME_QUEUE_ELEM *Elem);
5789 VOID WpaGroupMsg1Action(
5790 IN PRTMP_ADAPTER pAd,
5791 IN MLME_QUEUE_ELEM *Elem);
5793 VOID WpaMacHeaderInit(
5794 IN PRTMP_ADAPTER pAd,
5795 IN OUT PHEADER_802_11 pHdr80211,
5796 IN UCHAR wep,
5797 IN PUCHAR pAddr1);
5799 VOID Wpa2PairMsg1Action(
5800 IN PRTMP_ADAPTER pAd,
5801 IN MLME_QUEUE_ELEM *Elem);
5803 VOID Wpa2PairMsg3Action(
5804 IN PRTMP_ADAPTER pAd,
5805 IN MLME_QUEUE_ELEM *Elem);
5807 BOOLEAN ParseKeyData(
5808 IN PRTMP_ADAPTER pAd,
5809 IN PUCHAR pKeyData,
5810 IN UCHAR KeyDataLen,
5811 IN UCHAR bPairewise);
5813 VOID RTMPToWirelessSta(
5814 IN PRTMP_ADAPTER pAd,
5815 IN PUCHAR pHeader802_3,
5816 IN UINT HdrLen,
5817 IN PUCHAR pData,
5818 IN UINT DataLen,
5819 IN BOOLEAN is4wayFrame);
5821 VOID HMAC_SHA1(
5822 IN UCHAR *text,
5823 IN UINT text_len,
5824 IN UCHAR *key,
5825 IN UINT key_len,
5826 IN UCHAR *digest);
5828 VOID PRF(
5829 IN UCHAR *key,
5830 IN INT key_len,
5831 IN UCHAR *prefix,
5832 IN INT prefix_len,
5833 IN UCHAR *data,
5834 IN INT data_len,
5835 OUT UCHAR *output,
5836 IN INT len);
5838 VOID CCKMPRF(
5839 IN UCHAR *key,
5840 IN INT key_len,
5841 IN UCHAR *data,
5842 IN INT data_len,
5843 OUT UCHAR *output,
5844 IN INT len);
5846 VOID WpaCountPTK(
5847 IN PRTMP_ADAPTER pAd,
5848 IN UCHAR *PMK,
5849 IN UCHAR *ANonce,
5850 IN UCHAR *AA,
5851 IN UCHAR *SNonce,
5852 IN UCHAR *SA,
5853 OUT UCHAR *output,
5854 IN UINT len);
5856 VOID GenRandom(
5857 IN PRTMP_ADAPTER pAd,
5858 IN UCHAR *macAddr,
5859 OUT UCHAR *random);
5862 // prototype in aironet.c
5864 VOID AironetStateMachineInit(
5865 IN PRTMP_ADAPTER pAd,
5866 IN STATE_MACHINE *S,
5867 OUT STATE_MACHINE_FUNC Trans[]);
5869 VOID AironetMsgAction(
5870 IN PRTMP_ADAPTER pAd,
5871 IN MLME_QUEUE_ELEM *Elem);
5873 VOID AironetRequestAction(
5874 IN PRTMP_ADAPTER pAd,
5875 IN MLME_QUEUE_ELEM *Elem);
5877 VOID ChannelLoadRequestAction(
5878 IN PRTMP_ADAPTER pAd,
5879 IN UCHAR Index);
5881 VOID NoiseHistRequestAction(
5882 IN PRTMP_ADAPTER pAd,
5883 IN UCHAR Index);
5885 VOID BeaconRequestAction(
5886 IN PRTMP_ADAPTER pAd,
5887 IN UCHAR Index);
5889 VOID AironetReportAction(
5890 IN PRTMP_ADAPTER pAd,
5891 IN MLME_QUEUE_ELEM *Elem);
5893 VOID ChannelLoadReportAction(
5894 IN PRTMP_ADAPTER pAd,
5895 IN UCHAR Index);
5897 VOID NoiseHistReportAction(
5898 IN PRTMP_ADAPTER pAd,
5899 IN UCHAR Index);
5901 VOID AironetFinalReportAction(
5902 IN PRTMP_ADAPTER pAd);
5904 VOID BeaconReportAction(
5905 IN PRTMP_ADAPTER pAd,
5906 IN UCHAR Index);
5908 VOID AironetAddBeaconReport(
5909 IN PRTMP_ADAPTER pAd,
5910 IN ULONG Index,
5911 IN PMLME_QUEUE_ELEM pElem);
5913 VOID AironetCreateBeaconReportFromBssTable(
5914 IN PRTMP_ADAPTER pAd);
5916 VOID DBGPRINT_TX_RING(
5917 IN PRTMP_ADAPTER pAd,
5918 IN UCHAR QueIdx);
5920 VOID DBGPRINT_RX_RING(
5921 IN PRTMP_ADAPTER pAd);
5923 CHAR ConvertToRssi(
5924 IN PRTMP_ADAPTER pAd,
5925 IN CHAR Rssi,
5926 IN UCHAR RssiNumber);
5929 #ifdef DOT11N_DRAFT3
5930 VOID BuildEffectedChannelList(
5931 IN PRTMP_ADAPTER pAd);
5932 #endif // DOT11N_DRAFT3 //
5935 VOID APAsicEvaluateRxAnt(
5936 IN PRTMP_ADAPTER pAd);
5939 VOID APAsicRxAntEvalTimeout(
5940 IN PRTMP_ADAPTER pAd);
5943 // function prototype in cmm_wpa.c
5945 BOOLEAN RTMPCheckWPAframe(
5946 IN PRTMP_ADAPTER pAd,
5947 IN PMAC_TABLE_ENTRY pEntry,
5948 IN PUCHAR pData,
5949 IN ULONG DataByteCount,
5950 IN UCHAR FromWhichBSSID);
5952 VOID AES_GTK_KEY_UNWRAP(
5953 IN UCHAR *key,
5954 OUT UCHAR *plaintext,
5955 IN UCHAR c_len,
5956 IN UCHAR *ciphertext);
5958 BOOLEAN RTMPCheckRSNIE(
5959 IN PRTMP_ADAPTER pAd,
5960 IN PUCHAR pData,
5961 IN UCHAR DataLen,
5962 IN MAC_TABLE_ENTRY *pEntry,
5963 OUT UCHAR *Offset);
5965 BOOLEAN RTMPParseEapolKeyData(
5966 IN PRTMP_ADAPTER pAd,
5967 IN PUCHAR pKeyData,
5968 IN UCHAR KeyDataLen,
5969 IN UCHAR GroupKeyIndex,
5970 IN UCHAR MsgType,
5971 IN BOOLEAN bWPA2,
5972 IN MAC_TABLE_ENTRY *pEntry);
5974 VOID ConstructEapolMsg(
5975 IN PRTMP_ADAPTER pAd,
5976 IN UCHAR PeerAuthMode,
5977 IN UCHAR PeerWepStatus,
5978 IN UCHAR MyGroupKeyWepStatus,
5979 IN UCHAR MsgType,
5980 IN UCHAR DefaultKeyIdx,
5981 IN UCHAR *ReplayCounter,
5982 IN UCHAR *KeyNonce,
5983 IN UCHAR *TxRSC,
5984 IN UCHAR *PTK,
5985 IN UCHAR *GTK,
5986 IN UCHAR *RSNIE,
5987 IN UCHAR RSNIE_Len,
5988 OUT PEAPOL_PACKET pMsg);
5990 VOID CalculateMIC(
5991 IN PRTMP_ADAPTER pAd,
5992 IN UCHAR PeerWepStatus,
5993 IN UCHAR *PTK,
5994 OUT PEAPOL_PACKET pMsg);
5996 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5997 IN PRTMP_ADAPTER pAd,
5998 IN RX_BLK *pRxBlk,
5999 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
6000 IN PCIPHER_KEY pShard_key);
6002 VOID ConstructEapolKeyData(
6003 IN PRTMP_ADAPTER pAd,
6004 IN UCHAR PeerAuthMode,
6005 IN UCHAR PeerWepStatus,
6006 IN UCHAR GroupKeyWepStatus,
6007 IN UCHAR MsgType,
6008 IN UCHAR DefaultKeyIdx,
6009 IN BOOLEAN bWPA2Capable,
6010 IN UCHAR *PTK,
6011 IN UCHAR *GTK,
6012 IN UCHAR *RSNIE,
6013 IN UCHAR RSNIE_LEN,
6014 OUT PEAPOL_PACKET pMsg);
6016 VOID RTMPMakeRSNIE(
6017 IN PRTMP_ADAPTER pAd,
6018 IN UINT AuthMode,
6019 IN UINT WepStatus,
6020 IN UCHAR apidx);
6023 // function prototype in ap_wpa.c
6026 BOOLEAN APWpaMsgTypeSubst(
6027 IN UCHAR EAPType,
6028 OUT INT *MsgType) ;
6030 MAC_TABLE_ENTRY *PACInquiry(
6031 IN PRTMP_ADAPTER pAd,
6032 IN ULONG Wcid);
6034 BOOLEAN RTMPCheckMcast(
6035 IN PRTMP_ADAPTER pAd,
6036 IN PEID_STRUCT eid_ptr,
6037 IN MAC_TABLE_ENTRY *pEntry);
6039 BOOLEAN RTMPCheckUcast(
6040 IN PRTMP_ADAPTER pAd,
6041 IN PEID_STRUCT eid_ptr,
6042 IN MAC_TABLE_ENTRY *pEntry);
6044 BOOLEAN RTMPCheckAUTH(
6045 IN PRTMP_ADAPTER pAd,
6046 IN PEID_STRUCT eid_ptr,
6047 IN MAC_TABLE_ENTRY *pEntry);
6049 VOID WPAStart4WayHS(
6050 IN PRTMP_ADAPTER pAd,
6051 IN MAC_TABLE_ENTRY *pEntry,
6052 IN ULONG TimeInterval);
6054 VOID WPAStart2WayGroupHS(
6055 IN PRTMP_ADAPTER pAd,
6056 IN MAC_TABLE_ENTRY *pEntry);
6058 VOID APWpaEAPPacketAction(
6059 IN PRTMP_ADAPTER pAd,
6060 IN MLME_QUEUE_ELEM *Elem);
6062 VOID APWpaEAPOLStartAction(
6063 IN PRTMP_ADAPTER pAd,
6064 IN MLME_QUEUE_ELEM *Elem);
6066 VOID APWpaEAPOLLogoffAction(
6067 IN PRTMP_ADAPTER pAd,
6068 IN MLME_QUEUE_ELEM *Elem);
6070 VOID APWpaEAPOLKeyAction(
6071 IN PRTMP_ADAPTER pAd,
6072 IN MLME_QUEUE_ELEM *Elem);
6074 VOID APWpaEAPOLASFAlertAction(
6075 IN PRTMP_ADAPTER pAd,
6076 IN MLME_QUEUE_ELEM *Elem);
6078 VOID HandleCounterMeasure(
6079 IN PRTMP_ADAPTER pAd,
6080 IN MAC_TABLE_ENTRY *pEntry);
6082 VOID PeerPairMsg2Action(
6083 IN PRTMP_ADAPTER pAd,
6084 IN MAC_TABLE_ENTRY *pEntry,
6085 IN MLME_QUEUE_ELEM *Elem);
6087 VOID PeerPairMsg4Action(
6088 IN PRTMP_ADAPTER pAd,
6089 IN MAC_TABLE_ENTRY *pEntry,
6090 IN MLME_QUEUE_ELEM *Elem);
6092 VOID CMTimerExec(
6093 IN PVOID SystemSpecific1,
6094 IN PVOID FunctionContext,
6095 IN PVOID SystemSpecific2,
6096 IN PVOID SystemSpecific3);
6098 VOID WPARetryExec(
6099 IN PVOID SystemSpecific1,
6100 IN PVOID FunctionContext,
6101 IN PVOID SystemSpecific2,
6102 IN PVOID SystemSpecific3);
6104 VOID EnqueueStartForPSKExec(
6105 IN PVOID SystemSpecific1,
6106 IN PVOID FunctionContext,
6107 IN PVOID SystemSpecific2,
6108 IN PVOID SystemSpecific3);
6110 VOID RTMPHandleSTAKey(
6111 IN PRTMP_ADAPTER pAdapter,
6112 IN MAC_TABLE_ENTRY *pEntry,
6113 IN MLME_QUEUE_ELEM *Elem);
6115 VOID PeerGroupMsg2Action(
6116 IN PRTMP_ADAPTER pAd,
6117 IN PMAC_TABLE_ENTRY pEntry,
6118 IN VOID *Msg,
6119 IN UINT MsgLen);
6121 VOID PairDisAssocAction(
6122 IN PRTMP_ADAPTER pAd,
6123 IN PMAC_TABLE_ENTRY pEntry,
6124 IN USHORT Reason);
6126 VOID MlmeDeAuthAction(
6127 IN PRTMP_ADAPTER pAd,
6128 IN PMAC_TABLE_ENTRY pEntry,
6129 IN USHORT Reason);
6131 VOID GREKEYPeriodicExec(
6132 IN PVOID SystemSpecific1,
6133 IN PVOID FunctionContext,
6134 IN PVOID SystemSpecific2,
6135 IN PVOID SystemSpecific3);
6137 VOID CountGTK(
6138 IN UCHAR *PMK,
6139 IN UCHAR *GNonce,
6140 IN UCHAR *AA,
6141 OUT UCHAR *output,
6142 IN UINT len);
6144 VOID GetSmall(
6145 IN PVOID pSrc1,
6146 IN PVOID pSrc2,
6147 OUT PUCHAR out,
6148 IN ULONG Length);
6150 VOID GetLarge(
6151 IN PVOID pSrc1,
6152 IN PVOID pSrc2,
6153 OUT PUCHAR out,
6154 IN ULONG Length);
6156 VOID APGenRandom(
6157 IN PRTMP_ADAPTER pAd,
6158 OUT UCHAR *random);
6160 VOID AES_GTK_KEY_WRAP(
6161 IN UCHAR *key,
6162 IN UCHAR *plaintext,
6163 IN UCHAR p_len,
6164 OUT UCHAR *ciphertext);
6166 VOID WpaSend(
6167 IN PRTMP_ADAPTER pAdapter,
6168 IN PUCHAR pPacket,
6169 IN ULONG Len);
6171 VOID APToWirelessSta(
6172 IN PRTMP_ADAPTER pAd,
6173 IN MAC_TABLE_ENTRY *pEntry,
6174 IN PUCHAR pHeader802_3,
6175 IN UINT HdrLen,
6176 IN PUCHAR pData,
6177 IN UINT DataLen,
6178 IN BOOLEAN bClearFrame);
6180 VOID RTMPAddPMKIDCache(
6181 IN PRTMP_ADAPTER pAd,
6182 IN INT apidx,
6183 IN PUCHAR pAddr,
6184 IN UCHAR *PMKID,
6185 IN UCHAR *PMK);
6187 INT RTMPSearchPMKIDCache(
6188 IN PRTMP_ADAPTER pAd,
6189 IN INT apidx,
6190 IN PUCHAR pAddr);
6192 VOID RTMPDeletePMKIDCache(
6193 IN PRTMP_ADAPTER pAd,
6194 IN INT apidx,
6195 IN INT idx);
6197 VOID RTMPMaintainPMKIDCache(
6198 IN PRTMP_ADAPTER pAd);
6200 VOID RTMPSendTriggerFrame(
6201 IN PRTMP_ADAPTER pAd,
6202 IN PVOID pBuffer,
6203 IN ULONG Length,
6204 IN UCHAR TxRate,
6205 IN BOOLEAN bQosNull);
6207 #ifdef RT30xx
6208 VOID RTMPFilterCalibration(
6209 IN PRTMP_ADAPTER pAd);
6210 #endif // RT30xx //
6213 //typedef void (*TIMER_FUNCTION)(unsigned long);
6216 /* timeout -- ms */
6217 VOID RTMP_SetPeriodicTimer(
6218 IN NDIS_MINIPORT_TIMER *pTimer,
6219 IN unsigned long timeout);
6221 VOID RTMP_OS_Init_Timer(
6222 IN PRTMP_ADAPTER pAd,
6223 IN NDIS_MINIPORT_TIMER *pTimer,
6224 IN TIMER_FUNCTION function,
6225 IN PVOID data);
6227 VOID RTMP_OS_Add_Timer(
6228 IN NDIS_MINIPORT_TIMER *pTimer,
6229 IN unsigned long timeout);
6231 VOID RTMP_OS_Mod_Timer(
6232 IN NDIS_MINIPORT_TIMER *pTimer,
6233 IN unsigned long timeout);
6236 VOID RTMP_OS_Del_Timer(
6237 IN NDIS_MINIPORT_TIMER *pTimer,
6238 OUT BOOLEAN *pCancelled);
6241 VOID RTMP_OS_Release_Packet(
6242 IN PRTMP_ADAPTER pAd,
6243 IN PQUEUE_ENTRY pEntry);
6245 VOID RTMPusecDelay(
6246 IN ULONG usec);
6248 NDIS_STATUS os_alloc_mem(
6249 IN PRTMP_ADAPTER pAd,
6250 OUT PUCHAR *mem,
6251 IN ULONG size);
6253 NDIS_STATUS os_free_mem(
6254 IN PRTMP_ADAPTER pAd,
6255 IN PUCHAR mem);
6258 void RTMP_AllocateSharedMemory(
6259 IN PRTMP_ADAPTER pAd,
6260 IN ULONG Length,
6261 IN BOOLEAN Cached,
6262 OUT PVOID *VirtualAddress,
6263 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6265 VOID RTMPFreeTxRxRingMemory(
6266 IN PRTMP_ADAPTER pAd);
6268 NDIS_STATUS AdapterBlockAllocateMemory(
6269 IN PVOID handle,
6270 OUT PVOID *ppAd);
6272 void RTMP_AllocateTxDescMemory(
6273 IN PRTMP_ADAPTER pAd,
6274 IN UINT Index,
6275 IN ULONG Length,
6276 IN BOOLEAN Cached,
6277 OUT PVOID *VirtualAddress,
6278 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6280 void RTMP_AllocateFirstTxBuffer(
6281 IN PRTMP_ADAPTER pAd,
6282 IN UINT Index,
6283 IN ULONG Length,
6284 IN BOOLEAN Cached,
6285 OUT PVOID *VirtualAddress,
6286 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6288 void RTMP_AllocateMgmtDescMemory(
6289 IN PRTMP_ADAPTER pAd,
6290 IN ULONG Length,
6291 IN BOOLEAN Cached,
6292 OUT PVOID *VirtualAddress,
6293 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6295 void RTMP_AllocateRxDescMemory(
6296 IN PRTMP_ADAPTER pAd,
6297 IN ULONG Length,
6298 IN BOOLEAN Cached,
6299 OUT PVOID *VirtualAddress,
6300 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6302 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6303 IN PRTMP_ADAPTER pAd,
6304 IN ULONG Length,
6305 IN BOOLEAN Cached,
6306 OUT PVOID *VirtualAddress,
6307 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6309 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6310 IN PRTMP_ADAPTER pAd,
6311 IN ULONG Length,
6312 IN BOOLEAN Cached,
6313 OUT PVOID *VirtualAddress);
6315 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6316 IN PRTMP_ADAPTER pAd,
6317 IN ULONG Length);
6319 void RTMP_QueryPacketInfo(
6320 IN PNDIS_PACKET pPacket,
6321 OUT PACKET_INFO *pPacketInfo,
6322 OUT PUCHAR *pSrcBufVA,
6323 OUT UINT *pSrcBufLen);
6325 void RTMP_QueryNextPacketInfo(
6326 IN PNDIS_PACKET *ppPacket,
6327 OUT PACKET_INFO *pPacketInfo,
6328 OUT PUCHAR *pSrcBufVA,
6329 OUT UINT *pSrcBufLen);
6332 BOOLEAN RTMP_FillTxBlkInfo(
6333 IN RTMP_ADAPTER *pAd,
6334 IN TX_BLK *pTxBlk);
6337 PRTMP_SCATTER_GATHER_LIST
6338 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6341 void announce_802_3_packet(
6342 IN PRTMP_ADAPTER pAd,
6343 IN PNDIS_PACKET pPacket);
6346 UINT BA_Reorder_AMSDU_Annnounce(
6347 IN PRTMP_ADAPTER pAd,
6348 IN PNDIS_PACKET pPacket);
6351 UINT Handle_AMSDU_Packet(
6352 IN PRTMP_ADAPTER pAd,
6353 IN PUCHAR pData,
6354 IN ULONG DataSize,
6355 IN UCHAR FromWhichBSSID);
6358 void convert_802_11_to_802_3_packet(
6359 IN PRTMP_ADAPTER pAd,
6360 IN PNDIS_PACKET pPacket,
6361 IN PUCHAR p8023hdr,
6362 IN PUCHAR pData,
6363 IN ULONG DataSize,
6364 IN UCHAR FromWhichBSSID);
6367 PNET_DEV get_netdev_from_bssid(
6368 IN PRTMP_ADAPTER pAd,
6369 IN UCHAR FromWhichBSSID);
6372 PNDIS_PACKET duplicate_pkt(
6373 IN PRTMP_ADAPTER pAd,
6374 IN PUCHAR pHeader802_3,
6375 IN UINT HdrLen,
6376 IN PUCHAR pData,
6377 IN ULONG DataSize,
6378 IN UCHAR FromWhichBSSID);
6381 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6382 IN PRTMP_ADAPTER pAd,
6383 IN PNDIS_PACKET pOldPkt);
6385 PNDIS_PACKET duplicate_pkt_with_VLAN(
6386 IN PRTMP_ADAPTER pAd,
6387 IN PUCHAR pHeader802_3,
6388 IN UINT HdrLen,
6389 IN PUCHAR pData,
6390 IN ULONG DataSize,
6391 IN UCHAR FromWhichBSSID);
6393 PNDIS_PACKET duplicate_pkt_with_WPI(
6394 IN PRTMP_ADAPTER pAd,
6395 IN PNDIS_PACKET pPacket,
6396 IN UINT32 ext_head_len,
6397 IN UINT32 ext_tail_len);
6399 UCHAR VLAN_8023_Header_Copy(
6400 IN PRTMP_ADAPTER pAd,
6401 IN PUCHAR pHeader802_3,
6402 IN UINT HdrLen,
6403 OUT PUCHAR pData,
6404 IN UCHAR FromWhichBSSID);
6406 #ifdef DOT11_N_SUPPORT
6407 void ba_flush_reordering_timeout_mpdus(
6408 IN PRTMP_ADAPTER pAd,
6409 IN PBA_REC_ENTRY pBAEntry,
6410 IN ULONG Now32);
6413 VOID BAOriSessionSetUp(
6414 IN PRTMP_ADAPTER pAd,
6415 IN MAC_TABLE_ENTRY *pEntry,
6416 IN UCHAR TID,
6417 IN USHORT TimeOut,
6418 IN ULONG DelayTime,
6419 IN BOOLEAN isForced);
6421 VOID BASessionTearDownALL(
6422 IN OUT PRTMP_ADAPTER pAd,
6423 IN UCHAR Wcid);
6424 #endif // DOT11_N_SUPPORT //
6426 BOOLEAN OS_Need_Clone_Packet(void);
6429 VOID build_tx_packet(
6430 IN PRTMP_ADAPTER pAd,
6431 IN PNDIS_PACKET pPacket,
6432 IN PUCHAR pFrame,
6433 IN ULONG FrameLen);
6436 VOID BAOriSessionTearDown(
6437 IN OUT PRTMP_ADAPTER pAd,
6438 IN UCHAR Wcid,
6439 IN UCHAR TID,
6440 IN BOOLEAN bPassive,
6441 IN BOOLEAN bForceSend);
6443 VOID BARecSessionTearDown(
6444 IN OUT PRTMP_ADAPTER pAd,
6445 IN UCHAR Wcid,
6446 IN UCHAR TID,
6447 IN BOOLEAN bPassive);
6449 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6450 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6452 ULONG AutoChBssInsertEntry(
6453 IN PRTMP_ADAPTER pAd,
6454 IN PUCHAR pBssid,
6455 IN CHAR Ssid[],
6456 IN UCHAR SsidLen,
6457 IN UCHAR ChannelNo,
6458 IN CHAR Rssi);
6460 void AutoChBssTableInit(
6461 IN PRTMP_ADAPTER pAd);
6463 void ChannelInfoInit(
6464 IN PRTMP_ADAPTER pAd);
6466 void AutoChBssTableDestroy(
6467 IN PRTMP_ADAPTER pAd);
6469 void ChannelInfoDestroy(
6470 IN PRTMP_ADAPTER pAd);
6472 UCHAR New_ApAutoSelectChannel(
6473 IN PRTMP_ADAPTER pAd);
6476 #ifdef NINTENDO_AP
6477 VOID InitNINTENDO_TABLE(
6478 IN PRTMP_ADAPTER pAd);
6480 UCHAR CheckNINTENDO_TABLE(
6481 IN PRTMP_ADAPTER pAd,
6482 PCHAR pDS_Ssid,
6483 UCHAR DS_SsidLen,
6484 PUCHAR pDS_Addr);
6486 UCHAR DelNINTENDO_ENTRY(
6487 IN PRTMP_ADAPTER pAd,
6488 UCHAR * pDS_Addr);
6490 VOID RTMPIoctlNintendoCapable(
6491 IN PRTMP_ADAPTER pAd,
6492 IN struct iwreq *wrq);
6494 VOID RTMPIoctlNintendoGetTable(
6495 IN PRTMP_ADAPTER pAd,
6496 IN struct iwreq *wrq);
6498 VOID RTMPIoctlNintendoSetTable(
6499 IN PRTMP_ADAPTER pAd,
6500 IN struct iwreq *wrq);
6502 #endif // NINTENDO_AP //
6504 BOOLEAN rtstrmactohex(
6505 IN char *s1,
6506 IN char *s2);
6508 BOOLEAN rtstrcasecmp(
6509 IN char *s1,
6510 IN char *s2);
6512 char *rtstrstruncasecmp(
6513 IN char *s1,
6514 IN char *s2);
6516 char *rtstrstr(
6517 IN const char * s1,
6518 IN const char * s2);
6520 char *rstrtok(
6521 IN char * s,
6522 IN const char * ct);
6524 int rtinet_aton(
6525 const char *cp,
6526 unsigned int *addr);
6528 ////////// common ioctl functions //////////
6529 INT Set_DriverVersion_Proc(
6530 IN PRTMP_ADAPTER pAd,
6531 IN PUCHAR arg);
6533 INT Set_CountryRegion_Proc(
6534 IN PRTMP_ADAPTER pAd,
6535 IN PUCHAR arg);
6537 INT Set_CountryRegionABand_Proc(
6538 IN PRTMP_ADAPTER pAd,
6539 IN PUCHAR arg);
6541 INT Set_WirelessMode_Proc(
6542 IN PRTMP_ADAPTER pAd,
6543 IN PUCHAR arg);
6545 INT Set_Channel_Proc(
6546 IN PRTMP_ADAPTER pAd,
6547 IN PUCHAR arg);
6549 INT Set_ShortSlot_Proc(
6550 IN PRTMP_ADAPTER pAd,
6551 IN PUCHAR arg);
6553 INT Set_TxPower_Proc(
6554 IN PRTMP_ADAPTER pAd,
6555 IN PUCHAR arg);
6557 INT Set_BGProtection_Proc(
6558 IN PRTMP_ADAPTER pAd,
6559 IN PUCHAR arg);
6561 INT Set_TxPreamble_Proc(
6562 IN PRTMP_ADAPTER pAd,
6563 IN PUCHAR arg);
6565 INT Set_RTSThreshold_Proc(
6566 IN PRTMP_ADAPTER pAd,
6567 IN PUCHAR arg);
6569 INT Set_FragThreshold_Proc(
6570 IN PRTMP_ADAPTER pAd,
6571 IN PUCHAR arg);
6573 INT Set_TxBurst_Proc(
6574 IN PRTMP_ADAPTER pAd,
6575 IN PUCHAR arg);
6577 #ifdef AGGREGATION_SUPPORT
6578 INT Set_PktAggregate_Proc(
6579 IN PRTMP_ADAPTER pAd,
6580 IN PUCHAR arg);
6581 #endif
6583 INT Set_IEEE80211H_Proc(
6584 IN PRTMP_ADAPTER pAd,
6585 IN PUCHAR arg);
6587 #ifdef DBG
6588 INT Set_Debug_Proc(
6589 IN PRTMP_ADAPTER pAd,
6590 IN PUCHAR arg);
6591 #endif
6593 INT Show_DescInfo_Proc(
6594 IN PRTMP_ADAPTER pAd,
6595 IN PUCHAR arg);
6597 INT Set_ResetStatCounter_Proc(
6598 IN PRTMP_ADAPTER pAd,
6599 IN PUCHAR arg);
6601 #ifdef DOT11_N_SUPPORT
6602 INT Set_BASetup_Proc(
6603 IN PRTMP_ADAPTER pAd,
6604 IN PUCHAR arg);
6606 INT Set_BADecline_Proc(
6607 IN PRTMP_ADAPTER pAd,
6608 IN PUCHAR arg);
6610 INT Set_BAOriTearDown_Proc(
6611 IN PRTMP_ADAPTER pAd,
6612 IN PUCHAR arg);
6614 INT Set_BARecTearDown_Proc(
6615 IN PRTMP_ADAPTER pAd,
6616 IN PUCHAR arg);
6618 INT Set_HtBw_Proc(
6619 IN PRTMP_ADAPTER pAd,
6620 IN PUCHAR arg);
6622 INT Set_HtMcs_Proc(
6623 IN PRTMP_ADAPTER pAd,
6624 IN PUCHAR arg);
6626 INT Set_HtGi_Proc(
6627 IN PRTMP_ADAPTER pAd,
6628 IN PUCHAR arg);
6630 INT Set_HtOpMode_Proc(
6631 IN PRTMP_ADAPTER pAd,
6632 IN PUCHAR arg);
6634 INT Set_HtStbc_Proc(
6635 IN PRTMP_ADAPTER pAd,
6636 IN PUCHAR arg);
6638 INT Set_HtHtc_Proc(
6639 IN PRTMP_ADAPTER pAd,
6640 IN PUCHAR arg);
6642 INT Set_HtExtcha_Proc(
6643 IN PRTMP_ADAPTER pAd,
6644 IN PUCHAR arg);
6646 INT Set_HtMpduDensity_Proc(
6647 IN PRTMP_ADAPTER pAd,
6648 IN PUCHAR arg);
6650 INT Set_HtBaWinSize_Proc(
6651 IN PRTMP_ADAPTER pAd,
6652 IN PUCHAR arg);
6654 INT Set_HtRdg_Proc(
6655 IN PRTMP_ADAPTER pAd,
6656 IN PUCHAR arg);
6658 INT Set_HtLinkAdapt_Proc(
6659 IN PRTMP_ADAPTER pAd,
6660 IN PUCHAR arg);
6662 INT Set_HtAmsdu_Proc(
6663 IN PRTMP_ADAPTER pAd,
6664 IN PUCHAR arg);
6666 INT Set_HtAutoBa_Proc(
6667 IN PRTMP_ADAPTER pAd,
6668 IN PUCHAR arg);
6670 INT Set_HtProtect_Proc(
6671 IN PRTMP_ADAPTER pAd,
6672 IN PUCHAR arg);
6674 INT Set_HtMimoPs_Proc(
6675 IN PRTMP_ADAPTER pAd,
6676 IN PUCHAR arg);
6679 INT Set_ForceShortGI_Proc(
6680 IN PRTMP_ADAPTER pAd,
6681 IN PUCHAR arg);
6683 INT Set_ForceGF_Proc(
6684 IN PRTMP_ADAPTER pAd,
6685 IN PUCHAR arg);
6687 INT SetCommonHT(
6688 IN PRTMP_ADAPTER pAd);
6690 INT Set_SendPSMPAction_Proc(
6691 IN PRTMP_ADAPTER pAd,
6692 IN PUCHAR arg);
6694 INT Set_HtMIMOPSmode_Proc(
6695 IN PRTMP_ADAPTER pAd,
6696 IN PUCHAR arg);
6699 INT Set_HtTxBASize_Proc(
6700 IN PRTMP_ADAPTER pAd,
6701 IN PUCHAR arg);
6702 #endif // DOT11_N_SUPPORT //
6706 #ifdef CONFIG_STA_SUPPORT
6707 //Dls , kathy
6708 VOID RTMPSendDLSTearDownFrame(
6709 IN PRTMP_ADAPTER pAd,
6710 IN PUCHAR pDA);
6712 #ifdef DOT11_N_SUPPORT
6713 //Block ACK
6714 VOID QueryBATABLE(
6715 IN PRTMP_ADAPTER pAd,
6716 OUT PQUERYBA_TABLE pBAT);
6717 #endif // DOT11_N_SUPPORT //
6719 #ifdef WPA_SUPPLICANT_SUPPORT
6720 INT WpaCheckEapCode(
6721 IN PRTMP_ADAPTER pAd,
6722 IN PUCHAR pFrame,
6723 IN USHORT FrameLen,
6724 IN USHORT OffSet);
6726 VOID WpaSendMicFailureToWpaSupplicant(
6727 IN PRTMP_ADAPTER pAd,
6728 IN BOOLEAN bUnicast);
6730 VOID SendAssocIEsToWpaSupplicant(
6731 IN PRTMP_ADAPTER pAd);
6732 #endif // WPA_SUPPLICANT_SUPPORT //
6734 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6735 int wext_notify_event_assoc(
6736 IN RTMP_ADAPTER *pAd);
6737 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6739 #endif // CONFIG_STA_SUPPORT //
6743 #ifdef DOT11_N_SUPPORT
6744 VOID Handle_BSS_Width_Trigger_Events(
6745 IN PRTMP_ADAPTER pAd);
6747 void build_ext_channel_switch_ie(
6748 IN PRTMP_ADAPTER pAd,
6749 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6750 #endif // DOT11_N_SUPPORT //
6753 BOOLEAN APRxDoneInterruptHandle(
6754 IN PRTMP_ADAPTER pAd);
6756 BOOLEAN STARxDoneInterruptHandle(
6757 IN PRTMP_ADAPTER pAd,
6758 IN BOOLEAN argc);
6760 #ifdef DOT11_N_SUPPORT
6761 // AMPDU packet indication
6762 VOID Indicate_AMPDU_Packet(
6763 IN PRTMP_ADAPTER pAd,
6764 IN RX_BLK *pRxBlk,
6765 IN UCHAR FromWhichBSSID);
6767 // AMSDU packet indication
6768 VOID Indicate_AMSDU_Packet(
6769 IN PRTMP_ADAPTER pAd,
6770 IN RX_BLK *pRxBlk,
6771 IN UCHAR FromWhichBSSID);
6772 #endif // DOT11_N_SUPPORT //
6774 // Normal legacy Rx packet indication
6775 VOID Indicate_Legacy_Packet(
6776 IN PRTMP_ADAPTER pAd,
6777 IN RX_BLK *pRxBlk,
6778 IN UCHAR FromWhichBSSID);
6780 VOID Indicate_EAPOL_Packet(
6781 IN PRTMP_ADAPTER pAd,
6782 IN RX_BLK *pRxBlk,
6783 IN UCHAR FromWhichBSSID);
6785 void update_os_packet_info(
6786 IN PRTMP_ADAPTER pAd,
6787 IN RX_BLK *pRxBlk,
6788 IN UCHAR FromWhichBSSID);
6790 void wlan_802_11_to_802_3_packet(
6791 IN PRTMP_ADAPTER pAd,
6792 IN RX_BLK *pRxBlk,
6793 IN PUCHAR pHeader802_3,
6794 IN UCHAR FromWhichBSSID);
6796 UINT deaggregate_AMSDU_announce(
6797 IN PRTMP_ADAPTER pAd,
6798 PNDIS_PACKET pPacket,
6799 IN PUCHAR pData,
6800 IN ULONG DataSize);
6803 #ifdef CONFIG_STA_SUPPORT
6804 // remove LLC and get 802_3 Header
6805 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6807 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6809 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6811 _pDA = _pRxBlk->pHeader->Addr3; \
6812 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6814 else \
6816 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6818 _pDA = _pRxBlk->pHeader->Addr1; \
6819 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6820 _pSA = _pRxBlk->pHeader->Addr2; \
6821 else \
6822 _pSA = _pRxBlk->pHeader->Addr3; \
6824 else \
6826 _pDA = _pRxBlk->pHeader->Addr1; \
6827 _pSA = _pRxBlk->pHeader->Addr2; \
6831 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6832 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6834 #endif // CONFIG_STA_SUPPORT //
6837 BOOLEAN APFowardWirelessStaToWirelessSta(
6838 IN PRTMP_ADAPTER pAd,
6839 IN PNDIS_PACKET pPacket,
6840 IN ULONG FromWhichBSSID);
6842 VOID Announce_or_Forward_802_3_Packet(
6843 IN PRTMP_ADAPTER pAd,
6844 IN PNDIS_PACKET pPacket,
6845 IN UCHAR FromWhichBSSID);
6847 VOID Sta_Announce_or_Forward_802_3_Packet(
6848 IN PRTMP_ADAPTER pAd,
6849 IN PNDIS_PACKET pPacket,
6850 IN UCHAR FromWhichBSSID);
6853 #ifdef CONFIG_STA_SUPPORT
6854 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6855 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6856 //announce_802_3_packet(_pAd, _pPacket);
6857 #endif // CONFIG_STA_SUPPORT //
6860 PNDIS_PACKET DuplicatePacket(
6861 IN PRTMP_ADAPTER pAd,
6862 IN PNDIS_PACKET pPacket,
6863 IN UCHAR FromWhichBSSID);
6866 PNDIS_PACKET ClonePacket(
6867 IN PRTMP_ADAPTER pAd,
6868 IN PNDIS_PACKET pPacket,
6869 IN PUCHAR pData,
6870 IN ULONG DataSize);
6873 // Normal, AMPDU or AMSDU
6874 VOID CmmRxnonRalinkFrameIndicate(
6875 IN PRTMP_ADAPTER pAd,
6876 IN RX_BLK *pRxBlk,
6877 IN UCHAR FromWhichBSSID);
6879 VOID CmmRxRalinkFrameIndicate(
6880 IN PRTMP_ADAPTER pAd,
6881 IN MAC_TABLE_ENTRY *pEntry,
6882 IN RX_BLK *pRxBlk,
6883 IN UCHAR FromWhichBSSID);
6885 VOID Update_Rssi_Sample(
6886 IN PRTMP_ADAPTER pAd,
6887 IN RSSI_SAMPLE *pRssi,
6888 IN PRXWI_STRUC pRxWI);
6890 PNDIS_PACKET GetPacketFromRxRing(
6891 IN PRTMP_ADAPTER pAd,
6892 OUT PRT28XX_RXD_STRUC pSaveRxD,
6893 OUT BOOLEAN *pbReschedule,
6894 IN OUT UINT32 *pRxPending);
6896 PNDIS_PACKET RTMPDeFragmentDataFrame(
6897 IN PRTMP_ADAPTER pAd,
6898 IN RX_BLK *pRxBlk);
6900 ////////////////////////////////////////
6906 #ifdef SNMP_SUPPORT
6907 //for snmp , kathy
6908 typedef struct _DefaultKeyIdxValue
6910 UCHAR KeyIdx;
6911 UCHAR Value[16];
6912 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6913 #endif
6916 #ifdef CONFIG_STA_SUPPORT
6917 enum {
6918 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6919 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6920 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6921 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6922 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6923 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6924 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6925 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6926 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6927 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6928 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6930 enum {
6931 P80211ENUM_msgitem_status_no_value = 0x00
6933 enum {
6934 P80211ENUM_truth_false = 0x00,
6935 P80211ENUM_truth_true = 0x01
6938 /* Definition from madwifi */
6939 typedef struct {
6940 UINT32 did;
6941 UINT16 status;
6942 UINT16 len;
6943 UINT32 data;
6944 } p80211item_uint32_t;
6946 typedef struct {
6947 UINT32 msgcode;
6948 UINT32 msglen;
6949 #define WLAN_DEVNAMELEN_MAX 16
6950 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6951 p80211item_uint32_t hosttime;
6952 p80211item_uint32_t mactime;
6953 p80211item_uint32_t channel;
6954 p80211item_uint32_t rssi;
6955 p80211item_uint32_t sq;
6956 p80211item_uint32_t signal;
6957 p80211item_uint32_t noise;
6958 p80211item_uint32_t rate;
6959 p80211item_uint32_t istx;
6960 p80211item_uint32_t frmlen;
6961 } wlan_ng_prism2_header;
6963 /* The radio capture header precedes the 802.11 header. */
6964 typedef struct PACKED _ieee80211_radiotap_header {
6965 UINT8 it_version; /* Version 0. Only increases
6966 * for drastic changes,
6967 * introduction of compatible
6968 * new fields does not count.
6970 UINT8 it_pad;
6971 UINT16 it_len; /* length of the whole
6972 * header in bytes, including
6973 * it_version, it_pad,
6974 * it_len, and data fields.
6976 UINT32 it_present; /* A bitmap telling which
6977 * fields are present. Set bit 31
6978 * (0x80000000) to extend the
6979 * bitmap by another 32 bits.
6980 * Additional extensions are made
6981 * by setting bit 31.
6983 }ieee80211_radiotap_header ;
6985 enum ieee80211_radiotap_type {
6986 IEEE80211_RADIOTAP_TSFT = 0,
6987 IEEE80211_RADIOTAP_FLAGS = 1,
6988 IEEE80211_RADIOTAP_RATE = 2,
6989 IEEE80211_RADIOTAP_CHANNEL = 3,
6990 IEEE80211_RADIOTAP_FHSS = 4,
6991 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6992 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6993 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6994 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6995 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6996 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6997 IEEE80211_RADIOTAP_ANTENNA = 11,
6998 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6999 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
7002 #define WLAN_RADIOTAP_PRESENT ( \
7003 (1 << IEEE80211_RADIOTAP_TSFT) | \
7004 (1 << IEEE80211_RADIOTAP_FLAGS) | \
7005 (1 << IEEE80211_RADIOTAP_RATE) | \
7008 typedef struct _wlan_radiotap_header {
7009 ieee80211_radiotap_header wt_ihdr;
7010 INT64 wt_tsft;
7011 UINT8 wt_flags;
7012 UINT8 wt_rate;
7013 } wlan_radiotap_header;
7014 /* Definition from madwifi */
7016 void send_monitor_packets(
7017 IN PRTMP_ADAPTER pAd,
7018 IN RX_BLK *pRxBlk);
7020 #if WIRELESS_EXT >= 12
7021 // This function will be called when query /proc
7022 struct iw_statistics *rt28xx_get_wireless_stats(
7023 IN struct net_device *net_dev);
7024 #endif
7026 VOID RTMPSetDesiredRates(
7027 IN PRTMP_ADAPTER pAdapter,
7028 IN LONG Rates);
7029 #endif // CONFIG_STA_SUPPORT //
7031 INT Set_FixedTxMode_Proc(
7032 IN PRTMP_ADAPTER pAd,
7033 IN PUCHAR arg);
7035 static inline char* GetPhyMode(
7036 int Mode)
7038 switch(Mode)
7040 case MODE_CCK:
7041 return "CCK";
7043 case MODE_OFDM:
7044 return "OFDM";
7045 #ifdef DOT11_N_SUPPORT
7046 case MODE_HTMIX:
7047 return "HTMIX";
7049 case MODE_HTGREENFIELD:
7050 return "GREEN";
7051 #endif // DOT11_N_SUPPORT //
7052 default:
7053 return "N/A";
7058 static inline char* GetBW(
7059 int BW)
7061 switch(BW)
7063 case BW_10:
7064 return "10M";
7066 case BW_20:
7067 return "20M";
7068 #ifdef DOT11_N_SUPPORT
7069 case BW_40:
7070 return "40M";
7071 #endif // DOT11_N_SUPPORT //
7072 default:
7073 return "N/A";
7078 VOID RT28xxThreadTerminate(
7079 IN RTMP_ADAPTER *pAd);
7081 BOOLEAN RT28XXChipsetCheck(
7082 IN void *_dev_p);
7084 BOOLEAN RT28XXNetDevInit(
7085 IN void *_dev_p,
7086 IN struct net_device *net_dev,
7087 IN RTMP_ADAPTER *pAd);
7089 BOOLEAN RT28XXProbePostConfig(
7090 IN void *_dev_p,
7091 IN RTMP_ADAPTER *pAd,
7092 IN INT32 argc);
7094 VOID RT28XXDMADisable(
7095 IN RTMP_ADAPTER *pAd);
7097 VOID RT28XXDMAEnable(
7098 IN RTMP_ADAPTER *pAd);
7100 VOID RT28xx_UpdateBeaconToAsic(
7101 IN RTMP_ADAPTER * pAd,
7102 IN INT apidx,
7103 IN ULONG BeaconLen,
7104 IN ULONG UpdatePos);
7106 INT rt28xx_ioctl(
7107 IN struct net_device *net_dev,
7108 IN OUT struct ifreq *rq,
7109 IN INT cmd);
7112 #ifdef CONFIG_STA_SUPPORT
7113 INT rt28xx_sta_ioctl(
7114 IN struct net_device *net_dev,
7115 IN OUT struct ifreq *rq,
7116 IN INT cmd);
7117 #endif // CONFIG_STA_SUPPORT //
7119 BOOLEAN RT28XXSecurityKeyAdd(
7120 IN PRTMP_ADAPTER pAd,
7121 IN ULONG apidx,
7122 IN ULONG KeyIdx,
7123 IN MAC_TABLE_ENTRY *pEntry);
7125 ////////////////////////////////////////
7126 PNDIS_PACKET GetPacketFromRxRing(
7127 IN PRTMP_ADAPTER pAd,
7128 OUT PRT28XX_RXD_STRUC pSaveRxD,
7129 OUT BOOLEAN *pbReschedule,
7130 IN OUT UINT32 *pRxPending);
7133 void kill_thread_task(PRTMP_ADAPTER pAd);
7135 void tbtt_tasklet(unsigned long data);
7138 VOID AsicTurnOffRFClk(
7139 IN PRTMP_ADAPTER pAd,
7140 IN UCHAR Channel);
7142 VOID AsicTurnOnRFClk(
7143 IN PRTMP_ADAPTER pAd,
7144 IN UCHAR Channel);
7146 #ifdef RT30xx
7147 NTSTATUS RT30xxWriteRFRegister(
7148 IN PRTMP_ADAPTER pAd,
7149 IN UCHAR RegID,
7150 IN UCHAR Value);
7152 NTSTATUS RT30xxReadRFRegister(
7153 IN PRTMP_ADAPTER pAd,
7154 IN UCHAR RegID,
7155 IN PUCHAR pValue);
7157 //2008/09/11:KH add to support efuse<--
7158 UCHAR eFuseReadRegisters(
7159 IN PRTMP_ADAPTER pAd,
7160 IN USHORT Offset,
7161 IN USHORT Length,
7162 OUT USHORT* pData);
7164 VOID eFuseReadPhysical(
7165 IN PRTMP_ADAPTER pAd,
7166 IN PUSHORT lpInBuffer,
7167 IN ULONG nInBufferSize,
7168 OUT PUSHORT lpOutBuffer,
7169 IN ULONG nOutBufferSize
7172 NTSTATUS eFuseRead(
7173 IN PRTMP_ADAPTER pAd,
7174 IN USHORT Offset,
7175 OUT PUCHAR pData,
7176 IN USHORT Length);
7178 VOID eFusePhysicalWriteRegisters(
7179 IN PRTMP_ADAPTER pAd,
7180 IN USHORT Offset,
7181 IN USHORT Length,
7182 OUT USHORT* pData);
7184 NTSTATUS eFuseWriteRegisters(
7185 IN PRTMP_ADAPTER pAd,
7186 IN USHORT Offset,
7187 IN USHORT Length,
7188 IN USHORT* pData);
7190 VOID eFuseWritePhysical(
7191 IN PRTMP_ADAPTER pAd,
7192 PUSHORT lpInBuffer,
7193 ULONG nInBufferSize,
7194 PUCHAR lpOutBuffer,
7195 ULONG nOutBufferSize
7198 NTSTATUS eFuseWrite(
7199 IN PRTMP_ADAPTER pAd,
7200 IN USHORT Offset,
7201 IN PUCHAR pData,
7202 IN USHORT length);
7204 INT set_eFuseGetFreeBlockCount_Proc(
7205 IN PRTMP_ADAPTER pAd,
7206 IN PUCHAR arg);
7208 INT set_eFusedump_Proc(
7209 IN PRTMP_ADAPTER pAd,
7210 IN PUCHAR arg);
7212 INT set_eFuseLoadFromBin_Proc(
7213 IN PRTMP_ADAPTER pAd,
7214 IN PUCHAR arg);
7216 NTSTATUS eFuseWriteRegistersFromBin(
7217 IN PRTMP_ADAPTER pAd,
7218 IN USHORT Offset,
7219 IN USHORT Length,
7220 IN USHORT* pData);
7222 VOID eFusePhysicalReadRegisters(
7223 IN PRTMP_ADAPTER pAd,
7224 IN USHORT Offset,
7225 IN USHORT Length,
7226 OUT USHORT* pData);
7228 NDIS_STATUS NICLoadEEPROM(
7229 IN PRTMP_ADAPTER pAd);
7231 BOOLEAN bNeedLoadEEPROM(
7232 IN PRTMP_ADAPTER pAd);
7233 //2008/09/11:KH add to support efuse-->
7234 #endif // RT30xx //
7236 #ifdef RT30xx
7237 // add by johnli, RF power sequence setup
7238 VOID RT30xxLoadRFNormalModeSetup(
7239 IN PRTMP_ADAPTER pAd);
7241 VOID RT30xxLoadRFSleepModeSetup(
7242 IN PRTMP_ADAPTER pAd);
7244 VOID RT30xxReverseRFSleepModeSetup(
7245 IN PRTMP_ADAPTER pAd);
7246 // end johnli
7247 #endif // RT30xx //
7249 #ifdef RT2870
7251 // Function Prototype in rtusb_bulk.c
7253 VOID RTUSBInitTxDesc(
7254 IN PRTMP_ADAPTER pAd,
7255 IN PTX_CONTEXT pTxContext,
7256 IN UCHAR BulkOutPipeId,
7257 IN usb_complete_t Func);
7259 VOID RTUSBInitHTTxDesc(
7260 IN PRTMP_ADAPTER pAd,
7261 IN PHT_TX_CONTEXT pTxContext,
7262 IN UCHAR BulkOutPipeId,
7263 IN ULONG BulkOutSize,
7264 IN usb_complete_t Func);
7266 VOID RTUSBInitRxDesc(
7267 IN PRTMP_ADAPTER pAd,
7268 IN PRX_CONTEXT pRxContext);
7270 VOID RTUSBCleanUpDataBulkOutQueue(
7271 IN PRTMP_ADAPTER pAd);
7273 VOID RTUSBCancelPendingBulkOutIRP(
7274 IN PRTMP_ADAPTER pAd);
7276 VOID RTUSBBulkOutDataPacket(
7277 IN PRTMP_ADAPTER pAd,
7278 IN UCHAR BulkOutPipeId,
7279 IN UCHAR Index);
7281 VOID RTUSBBulkOutNullFrame(
7282 IN PRTMP_ADAPTER pAd);
7284 VOID RTUSBBulkOutRTSFrame(
7285 IN PRTMP_ADAPTER pAd);
7287 VOID RTUSBCancelPendingBulkInIRP(
7288 IN PRTMP_ADAPTER pAd);
7290 VOID RTUSBCancelPendingIRPs(
7291 IN PRTMP_ADAPTER pAd);
7293 VOID RTUSBBulkOutMLMEPacket(
7294 IN PRTMP_ADAPTER pAd,
7295 IN UCHAR Index);
7297 VOID RTUSBBulkOutPsPoll(
7298 IN PRTMP_ADAPTER pAd);
7300 VOID RTUSBCleanUpMLMEBulkOutQueue(
7301 IN PRTMP_ADAPTER pAd);
7303 VOID RTUSBKickBulkOut(
7304 IN PRTMP_ADAPTER pAd);
7306 VOID RTUSBBulkReceive(
7307 IN PRTMP_ADAPTER pAd);
7309 VOID DoBulkIn(
7310 IN RTMP_ADAPTER *pAd);
7312 VOID RTUSBInitRxDesc(
7313 IN PRTMP_ADAPTER pAd,
7314 IN PRX_CONTEXT pRxContext);
7316 VOID RTUSBBulkRxHandle(
7317 IN unsigned long data);
7320 // Function Prototype in rtusb_io.c
7322 NTSTATUS RTUSBMultiRead(
7323 IN PRTMP_ADAPTER pAd,
7324 IN USHORT Offset,
7325 OUT PUCHAR pData,
7326 IN USHORT length);
7328 NTSTATUS RTUSBMultiWrite(
7329 IN PRTMP_ADAPTER pAd,
7330 IN USHORT Offset,
7331 IN PUCHAR pData,
7332 IN USHORT length);
7334 NTSTATUS RTUSBMultiWrite_OneByte(
7335 IN PRTMP_ADAPTER pAd,
7336 IN USHORT Offset,
7337 IN PUCHAR pData);
7339 NTSTATUS RTUSBReadBBPRegister(
7340 IN PRTMP_ADAPTER pAd,
7341 IN UCHAR Id,
7342 IN PUCHAR pValue);
7344 NTSTATUS RTUSBWriteBBPRegister(
7345 IN PRTMP_ADAPTER pAd,
7346 IN UCHAR Id,
7347 IN UCHAR Value);
7349 NTSTATUS RTUSBWriteRFRegister(
7350 IN PRTMP_ADAPTER pAd,
7351 IN UINT32 Value);
7353 NTSTATUS RTUSB_VendorRequest(
7354 IN PRTMP_ADAPTER pAd,
7355 IN UINT32 TransferFlags,
7356 IN UCHAR ReservedBits,
7357 IN UCHAR Request,
7358 IN USHORT Value,
7359 IN USHORT Index,
7360 IN PVOID TransferBuffer,
7361 IN UINT32 TransferBufferLength);
7363 NTSTATUS RTUSBReadEEPROM(
7364 IN PRTMP_ADAPTER pAd,
7365 IN USHORT Offset,
7366 OUT PUCHAR pData,
7367 IN USHORT length);
7369 NTSTATUS RTUSBWriteEEPROM(
7370 IN PRTMP_ADAPTER pAd,
7371 IN USHORT Offset,
7372 IN PUCHAR pData,
7373 IN USHORT length);
7375 VOID RTUSBPutToSleep(
7376 IN PRTMP_ADAPTER pAd);
7378 NTSTATUS RTUSBWakeUp(
7379 IN PRTMP_ADAPTER pAd);
7381 VOID RTUSBInitializeCmdQ(
7382 IN PCmdQ cmdq);
7384 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7385 IN PRTMP_ADAPTER pAd,
7386 IN NDIS_OID Oid,
7387 IN BOOLEAN SetInformation,
7388 IN PVOID pInformationBuffer,
7389 IN UINT32 InformationBufferLength);
7391 NDIS_STATUS RTUSBEnqueueInternalCmd(
7392 IN PRTMP_ADAPTER pAd,
7393 IN NDIS_OID Oid,
7394 IN PVOID pInformationBuffer,
7395 IN UINT32 InformationBufferLength);
7397 VOID RTUSBDequeueCmd(
7398 IN PCmdQ cmdq,
7399 OUT PCmdQElmt *pcmdqelmt);
7401 INT RTUSBCmdThread(
7402 IN OUT PVOID Context);
7404 INT TimerQThread(
7405 IN OUT PVOID Context);
7407 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7408 IN RTMP_ADAPTER *pAd,
7409 IN RALINK_TIMER_STRUCT *pTimer);
7411 BOOLEAN RT2870_TimerQ_Remove(
7412 IN RTMP_ADAPTER *pAd,
7413 IN RALINK_TIMER_STRUCT *pTimer);
7415 void RT2870_TimerQ_Exit(
7416 IN RTMP_ADAPTER *pAd);
7418 void RT2870_TimerQ_Init(
7419 IN RTMP_ADAPTER *pAd);
7421 VOID RT2870_BssBeaconExit(
7422 IN RTMP_ADAPTER *pAd);
7424 VOID RT2870_BssBeaconStop(
7425 IN RTMP_ADAPTER *pAd);
7427 VOID RT2870_BssBeaconStart(
7428 IN RTMP_ADAPTER * pAd);
7430 VOID RT2870_BssBeaconInit(
7431 IN RTMP_ADAPTER *pAd);
7433 VOID RT2870_WatchDog(
7434 IN RTMP_ADAPTER *pAd);
7436 NTSTATUS RTUSBWriteMACRegister(
7437 IN PRTMP_ADAPTER pAd,
7438 IN USHORT Offset,
7439 IN UINT32 Value);
7441 NTSTATUS RTUSBReadMACRegister(
7442 IN PRTMP_ADAPTER pAd,
7443 IN USHORT Offset,
7444 OUT PUINT32 pValue);
7446 NTSTATUS RTUSBSingleWrite(
7447 IN RTMP_ADAPTER *pAd,
7448 IN USHORT Offset,
7449 IN USHORT Value);
7451 NTSTATUS RTUSBFirmwareRun(
7452 IN PRTMP_ADAPTER pAd);
7454 NTSTATUS RTUSBFirmwareWrite(
7455 IN PRTMP_ADAPTER pAd,
7456 IN PUCHAR pFwImage,
7457 IN ULONG FwLen);
7459 NTSTATUS RTUSBFirmwareOpmode(
7460 IN PRTMP_ADAPTER pAd,
7461 OUT PUINT32 pValue);
7463 NTSTATUS RTUSBVenderReset(
7464 IN PRTMP_ADAPTER pAd);
7466 NDIS_STATUS RTUSBSetHardWareRegister(
7467 IN PRTMP_ADAPTER pAdapter,
7468 IN PVOID pBuf);
7470 NDIS_STATUS RTUSBQueryHardWareRegister(
7471 IN PRTMP_ADAPTER pAdapter,
7472 IN PVOID pBuf);
7474 VOID CMDHandler(
7475 IN PRTMP_ADAPTER pAd);
7478 NDIS_STATUS CreateThreads(
7479 IN struct net_device *net_dev );
7482 VOID MacTableInitialize(
7483 IN PRTMP_ADAPTER pAd);
7485 VOID MlmeSetPsm(
7486 IN PRTMP_ADAPTER pAd,
7487 IN USHORT psm);
7489 NDIS_STATUS RTMPWPAAddKeyProc(
7490 IN PRTMP_ADAPTER pAd,
7491 IN PVOID pBuf);
7493 VOID AsicRxAntEvalAction(
7494 IN PRTMP_ADAPTER pAd);
7496 void append_pkt(
7497 IN PRTMP_ADAPTER pAd,
7498 IN PUCHAR pHeader802_3,
7499 IN UINT HdrLen,
7500 IN PUCHAR pData,
7501 IN ULONG DataSize,
7502 OUT PNDIS_PACKET *ppPacket);
7504 UINT deaggregate_AMSDU_announce(
7505 IN PRTMP_ADAPTER pAd,
7506 PNDIS_PACKET pPacket,
7507 IN PUCHAR pData,
7508 IN ULONG DataSize);
7510 NDIS_STATUS RTMPCheckRxError(
7511 IN PRTMP_ADAPTER pAd,
7512 IN PHEADER_802_11 pHeader,
7513 IN PRXWI_STRUC pRxWI,
7514 IN PRT28XX_RXD_STRUC pRxINFO);
7517 VOID RTUSBMlmeHardTransmit(
7518 IN PRTMP_ADAPTER pAd,
7519 IN PMGMT_STRUC pMgmt);
7521 INT MlmeThread(
7522 IN PVOID Context);
7525 // Function Prototype in rtusb_data.c
7527 NDIS_STATUS RTUSBFreeDescriptorRequest(
7528 IN PRTMP_ADAPTER pAd,
7529 IN UCHAR BulkOutPipeId,
7530 IN UINT32 NumberRequired);
7533 BOOLEAN RTUSBNeedQueueBackForAgg(
7534 IN RTMP_ADAPTER *pAd,
7535 IN UCHAR BulkOutPipeId);
7538 VOID RTMPWriteTxInfo(
7539 IN PRTMP_ADAPTER pAd,
7540 IN PTXINFO_STRUC pTxInfo,
7541 IN USHORT USBDMApktLen,
7542 IN BOOLEAN bWiv,
7543 IN UCHAR QueueSel,
7544 IN UCHAR NextValid,
7545 IN UCHAR TxBurst);
7548 // Function Prototype in cmm_data_2870.c
7550 USHORT RtmpUSB_WriteSubTxResource(
7551 IN PRTMP_ADAPTER pAd,
7552 IN TX_BLK *pTxBlk,
7553 IN BOOLEAN bIsLast,
7554 OUT USHORT *FreeNumber);
7556 USHORT RtmpUSB_WriteSingleTxResource(
7557 IN PRTMP_ADAPTER pAd,
7558 IN TX_BLK *pTxBlk,
7559 IN BOOLEAN bIsLast,
7560 OUT USHORT *FreeNumber);
7562 USHORT RtmpUSB_WriteFragTxResource(
7563 IN PRTMP_ADAPTER pAd,
7564 IN TX_BLK *pTxBlk,
7565 IN UCHAR fragNum,
7566 OUT USHORT *FreeNumber);
7568 USHORT RtmpUSB_WriteMultiTxResource(
7569 IN PRTMP_ADAPTER pAd,
7570 IN TX_BLK *pTxBlk,
7571 IN UCHAR frameNum,
7572 OUT USHORT *FreeNumber);
7574 VOID RtmpUSB_FinalWriteTxResource(
7575 IN PRTMP_ADAPTER pAd,
7576 IN TX_BLK *pTxBlk,
7577 IN USHORT totalMPDUSize,
7578 IN USHORT TxIdx);
7580 VOID RtmpUSBDataLastTxIdx(
7581 IN PRTMP_ADAPTER pAd,
7582 IN UCHAR QueIdx,
7583 IN USHORT TxIdx);
7585 VOID RtmpUSBDataKickOut(
7586 IN PRTMP_ADAPTER pAd,
7587 IN TX_BLK *pTxBlk,
7588 IN UCHAR QueIdx);
7591 int RtmpUSBMgmtKickOut(
7592 IN RTMP_ADAPTER *pAd,
7593 IN UCHAR QueIdx,
7594 IN PNDIS_PACKET pPacket,
7595 IN PUCHAR pSrcBufVA,
7596 IN UINT SrcBufLen);
7598 VOID RtmpUSBNullFrameKickOut(
7599 IN RTMP_ADAPTER *pAd,
7600 IN UCHAR QueIdx,
7601 IN UCHAR *pNullFrame,
7602 IN UINT32 frameLen);
7604 VOID RT28xxUsbStaAsicForceWakeup(
7605 IN PRTMP_ADAPTER pAd,
7606 IN BOOLEAN bFromTx);
7608 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7609 IN PRTMP_ADAPTER pAd,
7610 IN USHORT TbttNumToNextWakeUp);
7612 VOID RT28xxUsbMlmeRadioOn(
7613 IN PRTMP_ADAPTER pAd);
7615 VOID RT28xxUsbMlmeRadioOFF(
7616 IN PRTMP_ADAPTER pAd);
7617 #endif // RT2870 //
7619 ////////////////////////////////////////
7621 VOID QBSS_LoadInit(
7622 IN RTMP_ADAPTER *pAd);
7624 UINT32 QBSS_LoadElementAppend(
7625 IN RTMP_ADAPTER *pAd,
7626 OUT UINT8 *buf_p);
7628 VOID QBSS_LoadUpdate(
7629 IN RTMP_ADAPTER *pAd);
7631 ///////////////////////////////////////
7632 INT RTMPShowCfgValue(
7633 IN PRTMP_ADAPTER pAd,
7634 IN PUCHAR pName,
7635 IN PUCHAR pBuf);
7637 PCHAR RTMPGetRalinkAuthModeStr(
7638 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7640 PCHAR RTMPGetRalinkEncryModeStr(
7641 IN USHORT encryMode);
7642 //////////////////////////////////////
7644 #ifdef CONFIG_STA_SUPPORT
7645 VOID AsicStaBbpTuning(
7646 IN PRTMP_ADAPTER pAd);
7648 BOOLEAN StaAddMacTableEntry(
7649 IN PRTMP_ADAPTER pAd,
7650 IN PMAC_TABLE_ENTRY pEntry,
7651 IN UCHAR MaxSupportedRateIn500Kbps,
7652 IN HT_CAPABILITY_IE *pHtCapability,
7653 IN UCHAR HtCapabilityLen,
7654 IN USHORT CapabilityInfo);
7655 #endif // CONFIG_STA_SUPPORT //
7657 void RTMP_IndicateMediaState(
7658 IN PRTMP_ADAPTER pAd);
7660 VOID ReSyncBeaconTime(
7661 IN PRTMP_ADAPTER pAd);
7663 VOID RTMPSetAGCInitValue(
7664 IN PRTMP_ADAPTER pAd,
7665 IN UCHAR BandWidth);
7667 int rt28xx_close(IN PNET_DEV dev);
7668 int rt28xx_open(IN PNET_DEV dev);
7670 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7672 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7673 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7675 if (VIRTUAL_IF_NUM(pAd) == 0)
7677 if (rt28xx_open(pAd->net_dev) != 0)
7678 return -1;
7680 else
7683 VIRTUAL_IF_INC(pAd);
7684 return 0;
7687 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7689 VIRTUAL_IF_DEC(pAd);
7690 if (VIRTUAL_IF_NUM(pAd) == 0)
7691 rt28xx_close(pAd->net_dev);
7692 return;
7696 #endif // __RTMP_H__