Staging: add rt2870 wireless driver
[linux-2.6/mini2440.git] / drivers / staging / rt2870 / rtmp.h
blobc2a4784ec3381665fa36cbd3cab03e3c9c95816f
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"
47 #ifdef CONFIG_STA_SUPPORT
48 #include "aironet.h"
49 #endif // CONFIG_STA_SUPPORT //
51 //#define DBG 1
53 //#define DBG_DIAGNOSE 1
55 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
56 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
57 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
58 #else
59 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
60 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
61 #endif
63 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
64 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
65 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
67 #ifdef RT2870
68 ////////////////////////////////////////////////////////////////////////////
69 // The TX_BUFFER structure forms the transmitted USB packet to the device
70 ////////////////////////////////////////////////////////////////////////////
71 typedef struct __TX_BUFFER{
72 union {
73 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
74 HEADER_802_11 NullFrame;
75 PSPOLL_FRAME PsPollPacket;
76 RTS_FRAME RTSFrame;
77 }field;
78 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
79 } TX_BUFFER, *PTX_BUFFER;
81 typedef struct __HTTX_BUFFER{
82 union {
83 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
84 HEADER_802_11 NullFrame;
85 PSPOLL_FRAME PsPollPacket;
86 RTS_FRAME RTSFrame;
87 }field;
88 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
89 } HTTX_BUFFER, *PHTTX_BUFFER;
92 // used to track driver-generated write irps
93 typedef struct _TX_CONTEXT
95 PVOID pAd; //Initialized in MiniportInitialize
96 PURB pUrb; //Initialized in MiniportInitialize
97 PIRP pIrp; //used to cancel pending bulk out.
98 //Initialized in MiniportInitialize
99 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
100 ULONG BulkOutSize;
101 UCHAR BulkOutPipeId;
102 UCHAR SelfIdx;
103 BOOLEAN InUse;
104 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
105 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
106 BOOLEAN IRPPending;
107 BOOLEAN LastOne;
108 BOOLEAN bAggregatible;
109 UCHAR Header_802_3[LENGTH_802_3];
110 UCHAR Rsv[2];
111 ULONG DataOffset;
112 UINT TxRate;
113 dma_addr_t data_dma; // urb dma on linux
115 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
118 // used to track driver-generated write irps
119 typedef struct _HT_TX_CONTEXT
121 PVOID pAd; //Initialized in MiniportInitialize
122 PURB pUrb; //Initialized in MiniportInitialize
123 PIRP pIrp; //used to cancel pending bulk out.
124 //Initialized in MiniportInitialize
125 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
126 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
127 UCHAR BulkOutPipeId;
128 BOOLEAN IRPPending;
129 BOOLEAN LastOne;
130 BOOLEAN bCurWriting;
131 BOOLEAN bRingEmpty;
132 BOOLEAN bCopySavePad;
133 UCHAR SavedPad[8];
134 UCHAR Header_802_3[LENGTH_802_3];
135 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
136 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
137 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
138 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
139 UINT TxRate;
140 dma_addr_t data_dma; // urb dma on linux
141 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
145 // Structure to keep track of receive packets and buffers to indicate
146 // receive data to the protocol.
148 typedef struct _RX_CONTEXT
150 PUCHAR TransferBuffer;
151 PVOID pAd;
152 PIRP pIrp;//used to cancel pending bulk in.
153 PURB pUrb;
154 //These 2 Boolean shouldn't both be 1 at the same time.
155 ULONG BulkInOffset; // number of packets waiting for reordering .
156 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
157 BOOLEAN bRxHandling; // Notify this packet is being process now.
158 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
159 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
160 BOOLEAN IRPPending; // TODO: To be removed
161 atomic_t IrpLock;
162 NDIS_SPIN_LOCK RxContextLock;
163 dma_addr_t data_dma; // urb dma on linux
164 } RX_CONTEXT, *PRX_CONTEXT;
165 #endif // RT2870 //
169 // NDIS Version definitions
171 #ifdef NDIS50_MINIPORT
172 #define RTMP_NDIS_MAJOR_VERSION 5
173 #define RTMP_NDIS_MINOR_VERSION 0
174 #endif
176 #ifdef NDIS51_MINIPORT
177 #define RTMP_NDIS_MAJOR_VERSION 5
178 #define RTMP_NDIS_MINOR_VERSION 1
179 #endif
181 extern char NIC_VENDOR_DESC[];
182 extern int NIC_VENDOR_DESC_LEN;
184 extern unsigned char SNAP_AIRONET[];
185 extern unsigned char CipherSuiteCiscoCCKM[];
186 extern unsigned char CipherSuiteCiscoCCKMLen;
187 extern unsigned char CipherSuiteCiscoCCKM24[];
188 extern unsigned char CipherSuiteCiscoCCKM24Len;
189 extern unsigned char CipherSuiteCCXTkip[];
190 extern unsigned char CipherSuiteCCXTkipLen;
191 extern unsigned char CISCO_OUI[];
192 extern UCHAR BaSizeArray[4];
194 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
195 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
196 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
197 extern ULONG BIT32[32];
198 extern UCHAR BIT8[8];
199 extern char* CipherName[];
200 extern char* MCSToMbps[];
201 extern UCHAR RxwiMCSToOfdmRate[12];
202 extern UCHAR SNAP_802_1H[6];
203 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
204 extern UCHAR SNAP_AIRONET[8];
205 extern UCHAR CKIP_LLC_SNAP[8];
206 extern UCHAR EAPOL_LLC_SNAP[8];
207 extern UCHAR EAPOL[2];
208 extern UCHAR IPX[2];
209 extern UCHAR APPLE_TALK[2];
210 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
211 extern UCHAR OfdmRateToRxwiMCS[];
212 extern UCHAR OfdmSignalToRateId[16] ;
213 extern UCHAR default_cwmin[4];
214 extern UCHAR default_cwmax[4];
215 extern UCHAR default_sta_aifsn[4];
216 extern UCHAR MapUserPriorityToAccessCategory[8];
218 extern USHORT RateUpPER[];
219 extern USHORT RateDownPER[];
220 extern UCHAR Phy11BNextRateDownward[];
221 extern UCHAR Phy11BNextRateUpward[];
222 extern UCHAR Phy11BGNextRateDownward[];
223 extern UCHAR Phy11BGNextRateUpward[];
224 extern UCHAR Phy11ANextRateDownward[];
225 extern UCHAR Phy11ANextRateUpward[];
226 extern CHAR RssiSafeLevelForTxRate[];
227 extern UCHAR RateIdToMbps[];
228 extern USHORT RateIdTo500Kbps[];
230 extern UCHAR CipherSuiteWpaNoneTkip[];
231 extern UCHAR CipherSuiteWpaNoneTkipLen;
233 extern UCHAR CipherSuiteWpaNoneAes[];
234 extern UCHAR CipherSuiteWpaNoneAesLen;
236 extern UCHAR SsidIe;
237 extern UCHAR SupRateIe;
238 extern UCHAR ExtRateIe;
240 #ifdef DOT11_N_SUPPORT
241 extern UCHAR HtCapIe;
242 extern UCHAR AddHtInfoIe;
243 extern UCHAR NewExtChanIe;
244 #ifdef DOT11N_DRAFT3
245 extern UCHAR ExtHtCapIe;
246 #endif // DOT11N_DRAFT3 //
247 #endif // DOT11_N_SUPPORT //
249 extern UCHAR ErpIe;
250 extern UCHAR DsIe;
251 extern UCHAR TimIe;
252 extern UCHAR WpaIe;
253 extern UCHAR Wpa2Ie;
254 extern UCHAR IbssIe;
255 extern UCHAR Ccx2Ie;
257 extern UCHAR WPA_OUI[];
258 extern UCHAR RSN_OUI[];
259 extern UCHAR WME_INFO_ELEM[];
260 extern UCHAR WME_PARM_ELEM[];
261 extern UCHAR Ccx2QosInfo[];
262 extern UCHAR Ccx2IeInfo[];
263 extern UCHAR RALINK_OUI[];
264 extern UCHAR PowerConstraintIE[];
267 extern UCHAR RateSwitchTable[];
268 extern UCHAR RateSwitchTable11B[];
269 extern UCHAR RateSwitchTable11G[];
270 extern UCHAR RateSwitchTable11BG[];
272 #ifdef DOT11_N_SUPPORT
273 extern UCHAR RateSwitchTable11BGN1S[];
274 extern UCHAR RateSwitchTable11BGN2S[];
275 extern UCHAR RateSwitchTable11BGN2SForABand[];
276 extern UCHAR RateSwitchTable11N1S[];
277 extern UCHAR RateSwitchTable11N2S[];
278 extern UCHAR RateSwitchTable11N2SForABand[];
280 #ifdef CONFIG_STA_SUPPORT
281 extern UCHAR PRE_N_HT_OUI[];
282 #endif // CONFIG_STA_SUPPORT //
283 #endif // DOT11_N_SUPPORT //
285 #define MAXSEQ (0xFFF)
287 #ifdef RALINK_ATE
288 typedef struct _ATE_INFO {
289 UCHAR Mode;
290 CHAR TxPower0;
291 CHAR TxPower1;
292 CHAR TxAntennaSel;
293 CHAR RxAntennaSel;
294 TXWI_STRUC TxWI; // TXWI
295 USHORT QID;
296 UCHAR Addr1[MAC_ADDR_LEN];
297 UCHAR Addr2[MAC_ADDR_LEN];
298 UCHAR Addr3[MAC_ADDR_LEN];
299 UCHAR Channel;
300 UINT32 TxLength;
301 UINT32 TxCount;
302 UINT32 TxDoneCount; // Tx DMA Done
303 UINT32 RFFreqOffset;
304 BOOLEAN bRxFer;
305 BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
306 BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
307 UINT32 RxTotalCnt;
308 UINT32 RxCntPerSec;
310 CHAR LastSNR0; // last received SNR
311 CHAR LastSNR1; // last received SNR for 2nd antenna
312 CHAR LastRssi0; // last received RSSI
313 CHAR LastRssi1; // last received RSSI for 2nd antenna
314 CHAR LastRssi2; // last received RSSI for 3rd antenna
315 CHAR AvgRssi0; // last 8 frames' average RSSI
316 CHAR AvgRssi1; // last 8 frames' average RSSI
317 CHAR AvgRssi2; // last 8 frames' average RSSI
318 SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
319 SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
320 SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
322 UINT32 NumOfAvgRssiSample;
324 #ifdef RALINK_28xx_QA
325 // Tx frame
326 #ifdef RT2870
327 /* not used in RT2860 */
328 TXINFO_STRUC TxInfo; // TxInfo
329 #endif // RT2870 //
330 USHORT HLen; // Header Length
331 USHORT PLen; // Pattern Length
332 UCHAR Header[32]; // Header buffer
333 UCHAR Pattern[32]; // Pattern buffer
334 USHORT DLen; // Data Length
335 USHORT seq;
336 UINT32 CID;
337 THREAD_PID AtePid;
338 // counters
339 UINT32 U2M;
340 UINT32 OtherData;
341 UINT32 Beacon;
342 UINT32 OtherCount;
343 UINT32 TxAc0;
344 UINT32 TxAc1;
345 UINT32 TxAc2;
346 UINT32 TxAc3;
347 UINT32 TxHCCA;
348 UINT32 TxMgmt;
349 UINT32 RSSI0;
350 UINT32 RSSI1;
351 UINT32 RSSI2;
352 UINT32 SNR0;
353 UINT32 SNR1;
354 // control
355 //UINT32 Repeat; // Tx Cpu count
356 UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
357 #endif // RALINK_28xx_QA //
358 } ATE_INFO, *PATE_INFO;
360 #ifdef RALINK_28xx_QA
361 struct ate_racfghdr {
362 UINT32 magic_no;
363 USHORT command_type;
364 USHORT command_id;
365 USHORT length;
366 USHORT sequence;
367 USHORT status;
368 UCHAR data[2046];
369 } __attribute__((packed));
370 #endif // RALINK_28xx_QA //
371 #endif // RALINK_ATE //
373 #ifdef DOT11_N_SUPPORT
374 struct reordering_mpdu
376 struct reordering_mpdu *next;
377 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
378 int Sequence; /* sequence number of MPDU */
379 BOOLEAN bAMSDU;
382 struct reordering_list
384 struct reordering_mpdu *next;
385 int qlen;
388 struct reordering_mpdu_pool
390 PVOID mem;
391 NDIS_SPIN_LOCK lock;
392 struct reordering_list freelist;
394 #endif // DOT11_N_SUPPORT //
396 typedef struct _RSSI_SAMPLE {
397 CHAR LastRssi0; // last received RSSI
398 CHAR LastRssi1; // last received RSSI
399 CHAR LastRssi2; // last received RSSI
400 CHAR AvgRssi0;
401 CHAR AvgRssi1;
402 CHAR AvgRssi2;
403 SHORT AvgRssi0X8;
404 SHORT AvgRssi1X8;
405 SHORT AvgRssi2X8;
406 } RSSI_SAMPLE;
409 // Queue structure and macros
411 typedef struct _QUEUE_ENTRY {
412 struct _QUEUE_ENTRY *Next;
413 } QUEUE_ENTRY, *PQUEUE_ENTRY;
415 // Queue structure
416 typedef struct _QUEUE_HEADER {
417 PQUEUE_ENTRY Head;
418 PQUEUE_ENTRY Tail;
419 ULONG Number;
420 } QUEUE_HEADER, *PQUEUE_HEADER;
422 #define InitializeQueueHeader(QueueHeader) \
424 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
425 (QueueHeader)->Number = 0; \
428 #define RemoveHeadQueue(QueueHeader) \
429 (QueueHeader)->Head; \
431 PQUEUE_ENTRY pNext; \
432 if ((QueueHeader)->Head != NULL) \
434 pNext = (QueueHeader)->Head->Next; \
435 (QueueHeader)->Head = pNext; \
436 if (pNext == NULL) \
437 (QueueHeader)->Tail = NULL; \
438 (QueueHeader)->Number--; \
442 #define InsertHeadQueue(QueueHeader, QueueEntry) \
444 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
445 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
446 if ((QueueHeader)->Tail == NULL) \
447 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
448 (QueueHeader)->Number++; \
451 #define InsertTailQueue(QueueHeader, QueueEntry) \
453 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
454 if ((QueueHeader)->Tail) \
455 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
456 else \
457 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
458 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
459 (QueueHeader)->Number++; \
463 // Macros for flag and ref count operations
465 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
466 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
467 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
468 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
469 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
471 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
472 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
473 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
475 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
476 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
477 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
479 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
480 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
481 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
483 #ifdef CONFIG_STA_SUPPORT
484 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
485 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
486 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
487 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
489 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
490 #endif // CONFIG_STA_SUPPORT //
492 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
493 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
496 #define INC_RING_INDEX(_idx, _RingSize) \
498 (_idx) = (_idx+1) % (_RingSize); \
501 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
503 #define RING_PACKET_INIT(_TxRing, _idx) \
505 _TxRing->Cell[_idx].pNdisPacket = NULL; \
506 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
509 #define TXDT_INIT(_TxD) \
511 NdisZeroMemory(_TxD, TXD_SIZE); \
512 _TxD->DMADONE = 1; \
515 //Set last data segment
516 #define RING_SET_LASTDS(_TxD, _IsSD0) \
518 if (_IsSD0) {_TxD->LastSec0 = 1;} \
519 else {_TxD->LastSec1 = 1;} \
522 // Increase TxTsc value for next transmission
523 // TODO:
524 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
525 // Should send a special event microsoft defined to request re-key
526 #define INC_TX_TSC(_tsc) \
528 int i=0; \
529 while (++_tsc[i] == 0x0) \
531 i++; \
532 if (i == 6) \
533 break; \
537 #ifdef DOT11_N_SUPPORT
538 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
539 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
541 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
542 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
543 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
544 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
545 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
546 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
547 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
548 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
549 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
550 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
551 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
552 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
555 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
557 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
558 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
559 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
561 #endif // DOT11_N_SUPPORT //
564 // BBP & RF are using indirect access. Before write any value into it.
565 // We have to make sure there is no outstanding command pending via checking busy bit.
567 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
570 #ifdef RT2870
571 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
572 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
573 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
575 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
576 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
577 #endif // RT2870 //
579 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
580 switch (ch) \
582 case 1: khz = 2412000; break; \
583 case 2: khz = 2417000; break; \
584 case 3: khz = 2422000; break; \
585 case 4: khz = 2427000; break; \
586 case 5: khz = 2432000; break; \
587 case 6: khz = 2437000; break; \
588 case 7: khz = 2442000; break; \
589 case 8: khz = 2447000; break; \
590 case 9: khz = 2452000; break; \
591 case 10: khz = 2457000; break; \
592 case 11: khz = 2462000; break; \
593 case 12: khz = 2467000; break; \
594 case 13: khz = 2472000; break; \
595 case 14: khz = 2484000; break; \
596 case 36: /* UNII */ khz = 5180000; break; \
597 case 40: /* UNII */ khz = 5200000; break; \
598 case 44: /* UNII */ khz = 5220000; break; \
599 case 48: /* UNII */ khz = 5240000; break; \
600 case 52: /* UNII */ khz = 5260000; break; \
601 case 56: /* UNII */ khz = 5280000; break; \
602 case 60: /* UNII */ khz = 5300000; break; \
603 case 64: /* UNII */ khz = 5320000; break; \
604 case 149: /* UNII */ khz = 5745000; break; \
605 case 153: /* UNII */ khz = 5765000; break; \
606 case 157: /* UNII */ khz = 5785000; break; \
607 case 161: /* UNII */ khz = 5805000; break; \
608 case 165: /* UNII */ khz = 5825000; break; \
609 case 100: /* HiperLAN2 */ khz = 5500000; break; \
610 case 104: /* HiperLAN2 */ khz = 5520000; break; \
611 case 108: /* HiperLAN2 */ khz = 5540000; break; \
612 case 112: /* HiperLAN2 */ khz = 5560000; break; \
613 case 116: /* HiperLAN2 */ khz = 5580000; break; \
614 case 120: /* HiperLAN2 */ khz = 5600000; break; \
615 case 124: /* HiperLAN2 */ khz = 5620000; break; \
616 case 128: /* HiperLAN2 */ khz = 5640000; break; \
617 case 132: /* HiperLAN2 */ khz = 5660000; break; \
618 case 136: /* HiperLAN2 */ khz = 5680000; break; \
619 case 140: /* HiperLAN2 */ khz = 5700000; break; \
620 case 34: /* Japan MMAC */ khz = 5170000; break; \
621 case 38: /* Japan MMAC */ khz = 5190000; break; \
622 case 42: /* Japan MMAC */ khz = 5210000; break; \
623 case 46: /* Japan MMAC */ khz = 5230000; break; \
624 case 184: /* Japan */ khz = 4920000; break; \
625 case 188: /* Japan */ khz = 4940000; break; \
626 case 192: /* Japan */ khz = 4960000; break; \
627 case 196: /* Japan */ khz = 4980000; break; \
628 case 208: /* Japan, means J08 */ khz = 5040000; break; \
629 case 212: /* Japan, means J12 */ khz = 5060000; break; \
630 case 216: /* Japan, means J16 */ khz = 5080000; break; \
631 default: khz = 2412000; break; \
635 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
636 switch (khz) \
638 case 2412000: ch = 1; break; \
639 case 2417000: ch = 2; break; \
640 case 2422000: ch = 3; break; \
641 case 2427000: ch = 4; break; \
642 case 2432000: ch = 5; break; \
643 case 2437000: ch = 6; break; \
644 case 2442000: ch = 7; break; \
645 case 2447000: ch = 8; break; \
646 case 2452000: ch = 9; break; \
647 case 2457000: ch = 10; break; \
648 case 2462000: ch = 11; break; \
649 case 2467000: ch = 12; break; \
650 case 2472000: ch = 13; break; \
651 case 2484000: ch = 14; break; \
652 case 5180000: ch = 36; /* UNII */ break; \
653 case 5200000: ch = 40; /* UNII */ break; \
654 case 5220000: ch = 44; /* UNII */ break; \
655 case 5240000: ch = 48; /* UNII */ break; \
656 case 5260000: ch = 52; /* UNII */ break; \
657 case 5280000: ch = 56; /* UNII */ break; \
658 case 5300000: ch = 60; /* UNII */ break; \
659 case 5320000: ch = 64; /* UNII */ break; \
660 case 5745000: ch = 149; /* UNII */ break; \
661 case 5765000: ch = 153; /* UNII */ break; \
662 case 5785000: ch = 157; /* UNII */ break; \
663 case 5805000: ch = 161; /* UNII */ break; \
664 case 5825000: ch = 165; /* UNII */ break; \
665 case 5500000: ch = 100; /* HiperLAN2 */ break; \
666 case 5520000: ch = 104; /* HiperLAN2 */ break; \
667 case 5540000: ch = 108; /* HiperLAN2 */ break; \
668 case 5560000: ch = 112; /* HiperLAN2 */ break; \
669 case 5580000: ch = 116; /* HiperLAN2 */ break; \
670 case 5600000: ch = 120; /* HiperLAN2 */ break; \
671 case 5620000: ch = 124; /* HiperLAN2 */ break; \
672 case 5640000: ch = 128; /* HiperLAN2 */ break; \
673 case 5660000: ch = 132; /* HiperLAN2 */ break; \
674 case 5680000: ch = 136; /* HiperLAN2 */ break; \
675 case 5700000: ch = 140; /* HiperLAN2 */ break; \
676 case 5170000: ch = 34; /* Japan MMAC */ break; \
677 case 5190000: ch = 38; /* Japan MMAC */ break; \
678 case 5210000: ch = 42; /* Japan MMAC */ break; \
679 case 5230000: ch = 46; /* Japan MMAC */ break; \
680 case 4920000: ch = 184; /* Japan */ break; \
681 case 4940000: ch = 188; /* Japan */ break; \
682 case 4960000: ch = 192; /* Japan */ break; \
683 case 4980000: ch = 196; /* Japan */ break; \
684 case 5040000: ch = 208; /* Japan, means J08 */ break; \
685 case 5060000: ch = 212; /* Japan, means J12 */ break; \
686 case 5080000: ch = 216; /* Japan, means J16 */ break; \
687 default: ch = 1; break; \
692 // Common fragment list structure - Identical to the scatter gather frag list structure
694 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
695 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
696 #define NIC_MAX_PHYS_BUF_COUNT 8
698 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
699 PVOID Address;
700 ULONG Length;
701 PULONG Reserved;
702 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
705 typedef struct _RTMP_SCATTER_GATHER_LIST {
706 ULONG NumberOfElements;
707 PULONG Reserved;
708 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
709 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
712 // Some utility macros
714 #ifndef min
715 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
716 #endif
718 #ifndef max
719 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
720 #endif
722 #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))))
724 #define INC_COUNTER64(Val) (Val.QuadPart++)
726 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
727 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
728 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
729 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
731 // Check LEAP & CCKM flags
732 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
733 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
735 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
736 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
738 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
740 _pExtraLlcSnapEncap = SNAP_802_1H; \
741 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
742 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
744 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
747 else \
749 _pExtraLlcSnapEncap = NULL; \
753 // New Define for new Tx Path.
754 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
756 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
758 _pExtraLlcSnapEncap = SNAP_802_1H; \
759 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
760 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
762 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
765 else \
767 _pExtraLlcSnapEncap = NULL; \
772 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
774 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
775 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
776 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
779 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
780 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
781 // else remove the LLC/SNAP field from the result Ethernet frame
782 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
783 // Note:
784 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
785 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
786 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
788 char LLC_Len[2]; \
790 _pRemovedLLCSNAP = NULL; \
791 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
792 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
794 PUCHAR pProto = _pData + 6; \
796 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
797 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
799 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
800 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
801 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
803 else \
805 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
806 _pRemovedLLCSNAP = _pData; \
807 _DataSize -= LENGTH_802_1_H; \
808 _pData += LENGTH_802_1_H; \
811 else \
813 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
814 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
815 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
819 #define SWITCH_AB( _pAA, _pBB) \
821 PVOID pCC; \
822 pCC = _pBB; \
823 _pBB = _pAA; \
824 _pAA = pCC; \
827 // Enqueue this frame to MLME engine
828 // We need to enqueue the whole frame because MLME need to pass data type
829 // information from 802.11 header
830 #ifdef RT2870
831 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
833 UINT32 High32TSF=0, Low32TSF=0; \
834 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
836 #endif // RT2870 //
838 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
839 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
841 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
842 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
845 // Check if it is Japan W53(ch52,56,60,64) channel.
847 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
849 #ifdef CONFIG_STA_SUPPORT
850 #define STA_PORT_SECURED(_pAd) \
852 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
853 NdisAcquireSpinLock(&_pAd->MacTabLock); \
854 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
855 NdisReleaseSpinLock(&_pAd->MacTabLock); \
857 #endif // CONFIG_STA_SUPPORT //
861 // Register set pair for initialzation register set definition
863 typedef struct _RTMP_REG_PAIR
865 ULONG Register;
866 ULONG Value;
867 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
869 typedef struct _REG_PAIR
871 UCHAR Register;
872 UCHAR Value;
873 } REG_PAIR, *PREG_PAIR;
876 // Register set pair for initialzation register set definition
878 typedef struct _RTMP_RF_REGS
880 UCHAR Channel;
881 ULONG R1;
882 ULONG R2;
883 ULONG R3;
884 ULONG R4;
885 } RTMP_RF_REGS, *PRTMP_RF_REGS;
887 typedef struct _FREQUENCY_ITEM {
888 UCHAR Channel;
889 UCHAR N;
890 UCHAR R;
891 UCHAR K;
892 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
895 // Data buffer for DMA operation, the buffer must be contiguous physical memory
896 // Both DMA to / from CPU use the same structure.
898 typedef struct _RTMP_DMABUF
900 ULONG AllocSize;
901 PVOID AllocVa; // TxBuf virtual address
902 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
903 } RTMP_DMABUF, *PRTMP_DMABUF;
906 typedef union _HEADER_802_11_SEQ{
907 #ifdef RT_BIG_ENDIAN
908 struct {
909 USHORT Sequence:12;
910 USHORT Frag:4;
911 } field;
912 #else
913 struct {
914 USHORT Frag:4;
915 USHORT Sequence:12;
916 } field;
917 #endif
918 USHORT value;
919 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
922 // Data buffer for DMA operation, the buffer must be contiguous physical memory
923 // Both DMA to / from CPU use the same structure.
925 typedef struct _RTMP_REORDERBUF
927 BOOLEAN IsFull;
928 PVOID AllocVa; // TxBuf virtual address
929 UCHAR Header802_3[14];
930 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
931 UCHAR DataOffset;
932 USHORT Datasize;
933 ULONG AllocSize;
934 #ifdef RT2870
935 PUCHAR AllocPa;
936 #endif // RT2870 //
937 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
940 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
941 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
942 // which won't be released, driver has to wait until upper layer return the packet
943 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
944 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
945 // which driver should ACK upper layer when the tx is physically done or failed.
947 typedef struct _RTMP_DMACB
949 ULONG AllocSize; // Control block size
950 PVOID AllocVa; // Control block virtual address
951 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
952 PNDIS_PACKET pNdisPacket;
953 PNDIS_PACKET pNextNdisPacket;
955 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
956 } RTMP_DMACB, *PRTMP_DMACB;
958 typedef struct _RTMP_TX_BUF
960 PQUEUE_ENTRY Next;
961 UCHAR Index;
962 ULONG AllocSize; // Control block size
963 PVOID AllocVa; // Control block virtual address
964 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
965 } RTMP_TXBUF, *PRTMP_TXBUF;
967 typedef struct _RTMP_RX_BUF
969 BOOLEAN InUse;
970 ULONG ByBaRecIndex;
971 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
972 } RTMP_RXBUF, *PRTMP_RXBUF;
973 typedef struct _RTMP_TX_RING
975 RTMP_DMACB Cell[TX_RING_SIZE];
976 UINT32 TxCpuIdx;
977 UINT32 TxDmaIdx;
978 UINT32 TxSwFreeIdx; // software next free tx index
979 } RTMP_TX_RING, *PRTMP_TX_RING;
981 typedef struct _RTMP_RX_RING
983 RTMP_DMACB Cell[RX_RING_SIZE];
984 UINT32 RxCpuIdx;
985 UINT32 RxDmaIdx;
986 INT32 RxSwReadIdx; // software next read index
987 } RTMP_RX_RING, *PRTMP_RX_RING;
989 typedef struct _RTMP_MGMT_RING
991 RTMP_DMACB Cell[MGMT_RING_SIZE];
992 UINT32 TxCpuIdx;
993 UINT32 TxDmaIdx;
994 UINT32 TxSwFreeIdx; // software next free tx index
995 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
998 // Statistic counter structure
1000 typedef struct _COUNTER_802_3
1002 // General Stats
1003 ULONG GoodTransmits;
1004 ULONG GoodReceives;
1005 ULONG TxErrors;
1006 ULONG RxErrors;
1007 ULONG RxNoBuffer;
1009 // Ethernet Stats
1010 ULONG RcvAlignmentErrors;
1011 ULONG OneCollision;
1012 ULONG MoreCollisions;
1014 } COUNTER_802_3, *PCOUNTER_802_3;
1016 typedef struct _COUNTER_802_11 {
1017 ULONG Length;
1018 LARGE_INTEGER LastTransmittedFragmentCount;
1019 LARGE_INTEGER TransmittedFragmentCount;
1020 LARGE_INTEGER MulticastTransmittedFrameCount;
1021 LARGE_INTEGER FailedCount;
1022 LARGE_INTEGER RetryCount;
1023 LARGE_INTEGER MultipleRetryCount;
1024 LARGE_INTEGER RTSSuccessCount;
1025 LARGE_INTEGER RTSFailureCount;
1026 LARGE_INTEGER ACKFailureCount;
1027 LARGE_INTEGER FrameDuplicateCount;
1028 LARGE_INTEGER ReceivedFragmentCount;
1029 LARGE_INTEGER MulticastReceivedFrameCount;
1030 LARGE_INTEGER FCSErrorCount;
1031 } COUNTER_802_11, *PCOUNTER_802_11;
1033 typedef struct _COUNTER_RALINK {
1034 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1035 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1036 ULONG BeenDisassociatedCount;
1037 ULONG BadCQIAutoRecoveryCount;
1038 ULONG PoorCQIRoamingCount;
1039 ULONG MgmtRingFullCount;
1040 ULONG RxCountSinceLastNULL;
1041 ULONG RxCount;
1042 ULONG RxRingErrCount;
1043 ULONG KickTxCount;
1044 ULONG TxRingErrCount;
1045 LARGE_INTEGER RealFcsErrCount;
1046 ULONG PendingNdisPacketCount;
1048 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1049 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1050 UINT32 OneSecTxDoneCount;
1051 ULONG OneSecRxCount;
1052 UINT32 OneSecTxAggregationCount;
1053 UINT32 OneSecRxAggregationCount;
1055 UINT32 OneSecFrameDuplicateCount;
1057 #ifdef RT2870
1058 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1059 #endif // RT2870 //
1061 UINT32 OneSecTxNoRetryOkCount;
1062 UINT32 OneSecTxRetryOkCount;
1063 UINT32 OneSecTxFailCount;
1064 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1065 UINT32 OneSecRxOkCnt; // RX without error
1066 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1067 UINT32 OneSecRxFcsErrCnt; // CRC error
1068 UINT32 OneSecBeaconSentCnt;
1069 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1070 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1071 ULONG DuplicateRcv;
1072 ULONG TxAggCount;
1073 ULONG TxNonAggCount;
1074 ULONG TxAgg1MPDUCount;
1075 ULONG TxAgg2MPDUCount;
1076 ULONG TxAgg3MPDUCount;
1077 ULONG TxAgg4MPDUCount;
1078 ULONG TxAgg5MPDUCount;
1079 ULONG TxAgg6MPDUCount;
1080 ULONG TxAgg7MPDUCount;
1081 ULONG TxAgg8MPDUCount;
1082 ULONG TxAgg9MPDUCount;
1083 ULONG TxAgg10MPDUCount;
1084 ULONG TxAgg11MPDUCount;
1085 ULONG TxAgg12MPDUCount;
1086 ULONG TxAgg13MPDUCount;
1087 ULONG TxAgg14MPDUCount;
1088 ULONG TxAgg15MPDUCount;
1089 ULONG TxAgg16MPDUCount;
1091 LARGE_INTEGER TransmittedOctetsInAMSDU;
1092 LARGE_INTEGER TransmittedAMSDUCount;
1093 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1094 LARGE_INTEGER ReceivedAMSDUCount;
1095 LARGE_INTEGER TransmittedAMPDUCount;
1096 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1097 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1098 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1099 } COUNTER_RALINK, *PCOUNTER_RALINK;
1101 typedef struct _PID_COUNTER {
1102 ULONG TxAckRequiredCount; // CRC error
1103 ULONG TxAggreCount;
1104 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1105 ULONG LastSuccessRate;
1106 } PID_COUNTER, *PPID_COUNTER;
1108 typedef struct _COUNTER_DRS {
1109 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1110 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1111 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1112 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1113 ULONG CurrTxRateStableTime; // # of second in current TX rate
1114 BOOLEAN fNoisyEnvironment;
1115 BOOLEAN fLastSecAccordingRSSI;
1116 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1117 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1118 ULONG LastTxOkCount;
1119 } COUNTER_DRS, *PCOUNTER_DRS;
1122 // Arcfour Structure Added by PaulWu
1124 typedef struct _ARCFOUR
1126 UINT X;
1127 UINT Y;
1128 UCHAR STATE[256];
1129 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1131 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1132 typedef struct _RECEIVE_SETTING {
1133 #ifdef RT_BIG_ENDIAN
1134 USHORT MIMO:1;
1135 USHORT OFDM:1;
1136 USHORT rsv:3;
1137 USHORT STBC:2; //SPACE
1138 USHORT ShortGI:1;
1139 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1140 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1141 #else
1142 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1143 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1144 USHORT ShortGI:1;
1145 USHORT STBC:2; //SPACE
1146 USHORT rsv:3;
1147 USHORT OFDM:1;
1148 USHORT MIMO:1;
1149 #endif
1150 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1152 // Shared key data structure
1153 typedef struct _WEP_KEY {
1154 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1155 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1156 } WEP_KEY, *PWEP_KEY;
1158 typedef struct _CIPHER_KEY {
1159 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1160 UCHAR RxMic[8]; // make alignment
1161 UCHAR TxMic[8];
1162 UCHAR TxTsc[6]; // 48bit TSC value
1163 UCHAR RxTsc[6]; // 48bit TSC value
1164 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1165 UCHAR KeyLen;
1166 #ifdef CONFIG_STA_SUPPORT
1167 UCHAR BssId[6];
1168 #endif // CONFIG_STA_SUPPORT //
1169 // Key length for each key, 0: entry is invalid
1170 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1171 } CIPHER_KEY, *PCIPHER_KEY;
1173 typedef struct _BBP_TUNING_STRUCT {
1174 BOOLEAN Enable;
1175 UCHAR FalseCcaCountUpperBound; // 100 per sec
1176 UCHAR FalseCcaCountLowerBound; // 10 per sec
1177 UCHAR R17LowerBound; // specified in E2PROM
1178 UCHAR R17UpperBound; // 0x68 according to David Tung
1179 UCHAR CurrentR17Value;
1180 } BBP_TUNING, *PBBP_TUNING;
1182 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1183 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1184 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1185 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1186 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1187 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1188 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1189 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1190 SHORT Pair1LastAvgRssi; //
1191 SHORT Pair2LastAvgRssi; //
1192 ULONG RcvPktNumWhenEvaluate;
1193 BOOLEAN FirstPktArrivedWhenEvaluate;
1194 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1195 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1197 typedef struct _LEAP_AUTH_INFO {
1198 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1199 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1200 UCHAR Reserve[2];
1201 UCHAR UserName[256]; //LEAP, User name
1202 ULONG UserNameLen;
1203 UCHAR Password[256]; //LEAP, User Password
1204 ULONG PasswordLen;
1205 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1207 typedef struct {
1208 UCHAR Addr[MAC_ADDR_LEN];
1209 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1210 //00 02-Authentication timeout
1211 //00 03-Challenge from AP failed
1212 //00 04-Challenge to AP failed
1213 BOOLEAN Reported;
1214 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1216 typedef struct {
1217 UCHAR RogueApNr;
1218 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1219 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1221 typedef struct {
1222 BOOLEAN Enable;
1223 UCHAR Delta;
1224 BOOLEAN PlusSign;
1225 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1228 // Receive Tuple Cache Format
1230 typedef struct _TUPLE_CACHE {
1231 BOOLEAN Valid;
1232 UCHAR MacAddress[MAC_ADDR_LEN];
1233 USHORT Sequence;
1234 USHORT Frag;
1235 } TUPLE_CACHE, *PTUPLE_CACHE;
1238 // Fragment Frame structure
1240 typedef struct _FRAGMENT_FRAME {
1241 PNDIS_PACKET pFragPacket;
1242 ULONG RxSize;
1243 USHORT Sequence;
1244 USHORT LastFrag;
1245 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1246 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1250 // Packet information for NdisQueryPacket
1252 typedef struct _PACKET_INFO {
1253 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1254 UINT BufferCount ; // Number of Buffer descriptor chained
1255 UINT TotalPacketLength ; // Self explained
1256 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1257 } PACKET_INFO, *PPACKET_INFO;
1260 // Tkip Key structure which RC4 key & MIC calculation
1262 typedef struct _TKIP_KEY_INFO {
1263 UINT nBytesInM; // # bytes in M for MICKEY
1264 ULONG IV16;
1265 ULONG IV32;
1266 ULONG K0; // for MICKEY Low
1267 ULONG K1; // for MICKEY Hig
1268 ULONG L; // Current state for MICKEY
1269 ULONG R; // Current state for MICKEY
1270 ULONG M; // Message accumulator for MICKEY
1271 UCHAR RC4KEY[16];
1272 UCHAR MIC[8];
1273 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1276 // Private / Misc data, counters for driver internal use
1278 typedef struct __PRIVATE_STRUC {
1279 UINT SystemResetCnt; // System reset counter
1280 UINT TxRingFullCnt; // Tx ring full occurrance number
1281 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1282 // Variables for WEP encryption / decryption in rtmp_wep.c
1283 UINT FCSCRC32;
1284 ARCFOURCONTEXT WEPCONTEXT;
1285 // Tkip stuff
1286 TKIP_KEY_INFO Tx;
1287 TKIP_KEY_INFO Rx;
1288 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1290 // structure to tune BBP R66 (BBP TUNING)
1291 typedef struct _BBP_R66_TUNING {
1292 BOOLEAN bEnable;
1293 USHORT FalseCcaLowerThreshold; // default 100
1294 USHORT FalseCcaUpperThreshold; // default 512
1295 UCHAR R66Delta;
1296 UCHAR R66CurrentValue;
1297 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1298 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1300 // structure to store channel TX power
1301 typedef struct _CHANNEL_TX_POWER {
1302 USHORT RemainingTimeForUse; //unit: sec
1303 UCHAR Channel;
1304 #ifdef DOT11N_DRAFT3
1305 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1306 #endif // DOT11N_DRAFT3 //
1307 CHAR Power;
1308 CHAR Power2;
1309 UCHAR MaxTxPwr;
1310 UCHAR DfsReq;
1311 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1313 // structure to store 802.11j channel TX power
1314 typedef struct _CHANNEL_11J_TX_POWER {
1315 UCHAR Channel;
1316 UCHAR BW; // BW_10 or BW_20
1317 CHAR Power;
1318 CHAR Power2;
1319 USHORT RemainingTimeForUse; //unit: sec
1320 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1322 typedef enum _ABGBAND_STATE_ {
1323 UNKNOWN_BAND,
1324 BG_BAND,
1325 A_BAND,
1326 } ABGBAND_STATE;
1328 typedef struct _MLME_STRUCT {
1329 #ifdef CONFIG_STA_SUPPORT
1330 // STA state machines
1331 STATE_MACHINE CntlMachine;
1332 STATE_MACHINE AssocMachine;
1333 STATE_MACHINE AuthMachine;
1334 STATE_MACHINE AuthRspMachine;
1335 STATE_MACHINE SyncMachine;
1336 STATE_MACHINE WpaPskMachine;
1337 STATE_MACHINE LeapMachine;
1338 STATE_MACHINE AironetMachine;
1339 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1340 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1341 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1342 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1343 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1344 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1345 #endif // CONFIG_STA_SUPPORT //
1346 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1347 // Action
1348 STATE_MACHINE ActMachine;
1351 #ifdef QOS_DLS_SUPPORT
1352 STATE_MACHINE DlsMachine;
1353 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1354 #endif // QOS_DLS_SUPPORT //
1359 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1360 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1361 ULONG LastSendNULLpsmTime;
1363 BOOLEAN bRunning;
1364 NDIS_SPIN_LOCK TaskLock;
1365 MLME_QUEUE Queue;
1367 UINT ShiftReg;
1369 RALINK_TIMER_STRUCT PeriodicTimer;
1370 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1371 RALINK_TIMER_STRUCT LinkDownTimer;
1372 RALINK_TIMER_STRUCT LinkUpTimer;
1373 ULONG PeriodicRound;
1374 ULONG OneSecPeriodicRound;
1376 UCHAR RealRxPath;
1377 BOOLEAN bLowThroughput;
1378 BOOLEAN bEnableAutoAntennaCheck;
1379 RALINK_TIMER_STRUCT RxAntEvalTimer;
1381 #ifdef RT2870
1382 UCHAR CaliBW40RfR24;
1383 UCHAR CaliBW20RfR24;
1384 #endif // RT2870 //
1386 } MLME_STRUCT, *PMLME_STRUCT;
1388 // structure for radar detection and channel switch
1389 typedef struct _RADAR_DETECT_STRUCT {
1390 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1391 UCHAR CSCount; //Channel switch counter
1392 UCHAR CSPeriod; //Channel switch period (beacon count)
1393 UCHAR RDCount; //Radar detection counter
1394 UCHAR RDMode; //Radar Detection mode
1395 UCHAR RDDurRegion; //Radar detection duration region
1396 UCHAR BBPR16;
1397 UCHAR BBPR17;
1398 UCHAR BBPR18;
1399 UCHAR BBPR21;
1400 UCHAR BBPR22;
1401 UCHAR BBPR64;
1402 ULONG InServiceMonitorCount; // unit: sec
1403 UINT8 DfsSessionTime;
1404 BOOLEAN bFastDfs;
1405 UINT8 ChMovingTime;
1406 UINT8 LongPulseRadarTh;
1407 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1409 #ifdef CARRIER_DETECTION_SUPPORT
1410 typedef enum CD_STATE_n
1412 CD_NORMAL,
1413 CD_SILENCE,
1414 CD_MAX_STATE
1415 } CD_STATE;
1417 typedef struct CARRIER_DETECTION_s
1419 BOOLEAN Enable;
1420 UINT8 CDSessionTime;
1421 UINT8 CDPeriod;
1422 CD_STATE CD_State;
1423 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1424 #endif // CARRIER_DETECTION_SUPPORT //
1426 typedef enum _REC_BLOCKACK_STATUS
1428 Recipient_NONE=0,
1429 Recipient_USED,
1430 Recipient_HandleRes,
1431 Recipient_Accept
1432 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1434 typedef enum _ORI_BLOCKACK_STATUS
1436 Originator_NONE=0,
1437 Originator_USED,
1438 Originator_WaitRes,
1439 Originator_Done
1440 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1442 #ifdef DOT11_N_SUPPORT
1443 typedef struct _BA_ORI_ENTRY{
1444 UCHAR Wcid;
1445 UCHAR TID;
1446 UCHAR BAWinSize;
1447 UCHAR Token;
1448 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1449 USHORT Sequence;
1450 USHORT TimeOutValue;
1451 ORI_BLOCKACK_STATUS ORI_BA_Status;
1452 RALINK_TIMER_STRUCT ORIBATimer;
1453 PVOID pAdapter;
1454 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1456 typedef struct _BA_REC_ENTRY {
1457 UCHAR Wcid;
1458 UCHAR TID;
1459 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1460 //UCHAR NumOfRxPkt;
1461 //UCHAR Curindidx; // the head in the RX reordering buffer
1462 USHORT LastIndSeq;
1463 // USHORT LastIndSeqAtTimer;
1464 USHORT TimeOutValue;
1465 RALINK_TIMER_STRUCT RECBATimer;
1466 ULONG LastIndSeqAtTimer;
1467 ULONG nDropPacket;
1468 ULONG rcvSeq;
1469 REC_BLOCKACK_STATUS REC_BA_Status;
1470 // UCHAR RxBufIdxUsed;
1471 // corresponding virtual address for RX reordering packet storage.
1472 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1473 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1474 // struct _BA_REC_ENTRY *pNext;
1475 PVOID pAdapter;
1476 struct reordering_list list;
1477 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1480 typedef struct {
1481 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1482 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1483 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1484 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1485 } BA_TABLE, *PBA_TABLE;
1487 //For QureyBATableOID use;
1488 typedef struct PACKED _OID_BA_REC_ENTRY{
1489 UCHAR MACAddr[MAC_ADDR_LEN];
1490 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1491 UCHAR rsv;
1492 UCHAR BufSize[8];
1493 REC_BLOCKACK_STATUS REC_BA_Status[8];
1494 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1496 //For QureyBATableOID use;
1497 typedef struct PACKED _OID_BA_ORI_ENTRY{
1498 UCHAR MACAddr[MAC_ADDR_LEN];
1499 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
1500 UCHAR rsv;
1501 UCHAR BufSize[8];
1502 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1503 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1505 typedef struct _QUERYBA_TABLE{
1506 OID_BA_ORI_ENTRY BAOriEntry[32];
1507 OID_BA_REC_ENTRY BARecEntry[32];
1508 UCHAR OriNum;// Number of below BAOriEntry
1509 UCHAR RecNum;// Number of below BARecEntry
1510 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1512 typedef union _BACAP_STRUC {
1513 #ifdef RT_BIG_ENDIAN
1514 struct {
1515 UINT32 :4;
1516 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.
1517 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1518 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1519 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1520 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1521 UINT32 MpduDensity:3;
1522 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1523 UINT32 AutoBA:1; // automatically BA
1524 UINT32 TxBAWinLimit:8;
1525 UINT32 RxBAWinLimit:8;
1526 } field;
1527 #else
1528 struct {
1529 UINT32 RxBAWinLimit:8;
1530 UINT32 TxBAWinLimit:8;
1531 UINT32 AutoBA:1; // automatically BA
1532 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1533 UINT32 MpduDensity:3;
1534 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1535 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1536 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1537 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1538 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.
1539 UINT32 :4;
1540 } field;
1541 #endif
1542 UINT32 word;
1543 } BACAP_STRUC, *PBACAP_STRUC;
1544 #endif // DOT11_N_SUPPORT //
1546 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1547 typedef struct _IOT_STRUC {
1548 UCHAR Threshold[2];
1549 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1550 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1551 ULONG OneSecInWindowCount;
1552 ULONG OneSecFrameDuplicateCount;
1553 ULONG OneSecOutWindowCount;
1554 UCHAR DelOriAct;
1555 UCHAR DelRecAct;
1556 UCHAR RTSShortProt;
1557 UCHAR RTSLongProt;
1558 BOOLEAN bRTSLongProtOn;
1559 #ifdef CONFIG_STA_SUPPORT
1560 BOOLEAN bLastAtheros;
1561 BOOLEAN bCurrentAtheros;
1562 BOOLEAN bNowAtherosBurstOn;
1563 BOOLEAN bNextDisableRxBA;
1564 BOOLEAN bToggle;
1565 #endif // CONFIG_STA_SUPPORT //
1566 } IOT_STRUC, *PIOT_STRUC;
1568 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1569 typedef union _REG_TRANSMIT_SETTING {
1570 #ifdef RT_BIG_ENDIAN
1571 struct {
1572 UINT32 rsv:13;
1573 UINT32 EXTCHA:2;
1574 UINT32 HTMODE:1;
1575 UINT32 TRANSNO:2;
1576 UINT32 STBC:1; //SPACE
1577 UINT32 ShortGI:1;
1578 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1579 UINT32 TxBF:1; // 3*3
1580 UINT32 rsv0:10;
1581 //UINT32 MCS:7; // MCS
1582 //UINT32 PhyMode:4;
1583 } field;
1584 #else
1585 struct {
1586 //UINT32 PhyMode:4;
1587 //UINT32 MCS:7; // MCS
1588 UINT32 rsv0:10;
1589 UINT32 TxBF:1;
1590 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1591 UINT32 ShortGI:1;
1592 UINT32 STBC:1; //SPACE
1593 UINT32 TRANSNO:2;
1594 UINT32 HTMODE:1;
1595 UINT32 EXTCHA:2;
1596 UINT32 rsv:13;
1597 } field;
1598 #endif
1599 UINT32 word;
1600 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1602 typedef union _DESIRED_TRANSMIT_SETTING {
1603 #ifdef RT_BIG_ENDIAN
1604 struct {
1605 USHORT rsv:3;
1606 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1607 USHORT PhyMode:4;
1608 USHORT MCS:7; // MCS
1609 } field;
1610 #else
1611 struct {
1612 USHORT MCS:7; // MCS
1613 USHORT PhyMode:4;
1614 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1615 USHORT rsv:3;
1616 } field;
1617 #endif
1618 USHORT word;
1619 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1621 typedef struct {
1622 BOOLEAN IsRecipient;
1623 UCHAR MACAddr[MAC_ADDR_LEN];
1624 UCHAR TID;
1625 UCHAR nMSDU;
1626 USHORT TimeOut;
1627 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1628 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1631 // Multiple SSID structure
1633 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1634 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1636 /* clear bcmc TIM bit */
1637 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1638 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1640 /* set bcmc TIM bit */
1641 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1642 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1644 /* clear a station PS TIM bit */
1645 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1646 { UCHAR tim_offset = wcid >> 3; \
1647 UCHAR bit_offset = wcid & 0x7; \
1648 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1650 /* set a station PS TIM bit */
1651 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1652 { UCHAR tim_offset = wcid >> 3; \
1653 UCHAR bit_offset = wcid & 0x7; \
1654 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1656 #ifdef RT2870
1657 #define BEACON_BITMAP_MASK 0xff
1658 typedef struct _BEACON_SYNC_STRUCT_
1660 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1661 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1662 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1663 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1664 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1665 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1666 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1667 }BEACON_SYNC_STRUCT;
1668 #endif // RT2870 //
1670 typedef struct _MULTISSID_STRUCT {
1671 UCHAR Bssid[MAC_ADDR_LEN];
1672 UCHAR SsidLen;
1673 CHAR Ssid[MAX_LEN_OF_SSID];
1674 USHORT CapabilityInfo;
1676 PNET_DEV MSSIDDev;
1678 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1679 NDIS_802_11_WEP_STATUS WepStatus;
1680 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1681 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1683 ULONG TxCount;
1684 ULONG RxCount;
1685 ULONG ReceivedByteCount;
1686 ULONG TransmittedByteCount;
1687 ULONG RxErrorCount;
1688 ULONG RxDropCount;
1690 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1691 RT_HT_PHY_INFO DesiredHtPhyInfo;
1692 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1693 BOOLEAN bAutoTxRateSwitch;
1695 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1696 UCHAR DefaultKeyId;
1698 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1699 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1700 UCHAR DesiredRatesIndex;
1701 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1703 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1704 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1705 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1707 // WPA
1708 UCHAR GMK[32];
1709 UCHAR PMK[32];
1710 UCHAR GTK[32];
1711 BOOLEAN IEEE8021X;
1712 BOOLEAN PreAuth;
1713 UCHAR GNonce[32];
1714 UCHAR PortSecured;
1715 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1716 UCHAR BANClass3Data;
1717 ULONG IsolateInterStaTraffic;
1719 UCHAR RSNIE_Len[2];
1720 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1723 UCHAR TimIELocationInBeacon;
1724 UCHAR CapabilityInfoLocationInBeacon;
1725 // outgoing BEACON frame buffer and corresponding TXWI
1726 // PTXWI_STRUC BeaconTxWI; //
1727 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1729 BOOLEAN bHideSsid;
1730 UINT16 StationKeepAliveTime; // unit: second
1732 USHORT VLAN_VID;
1733 USHORT VLAN_Priority;
1735 RT_802_11_ACL AccessControlList;
1737 // EDCA Qos
1738 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1739 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1741 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1743 // For 802.1x daemon setting per BSS
1744 UCHAR radius_srv_num;
1745 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1747 #ifdef RTL865X_SOC
1748 unsigned int mylinkid;
1749 #endif
1752 UINT32 RcvdConflictSsidCount;
1753 UINT32 RcvdSpoofedAssocRespCount;
1754 UINT32 RcvdSpoofedReassocRespCount;
1755 UINT32 RcvdSpoofedProbeRespCount;
1756 UINT32 RcvdSpoofedBeaconCount;
1757 UINT32 RcvdSpoofedDisassocCount;
1758 UINT32 RcvdSpoofedAuthCount;
1759 UINT32 RcvdSpoofedDeauthCount;
1760 UINT32 RcvdSpoofedUnknownMgmtCount;
1761 UINT32 RcvdReplayAttackCount;
1763 CHAR RssiOfRcvdConflictSsid;
1764 CHAR RssiOfRcvdSpoofedAssocResp;
1765 CHAR RssiOfRcvdSpoofedReassocResp;
1766 CHAR RssiOfRcvdSpoofedProbeResp;
1767 CHAR RssiOfRcvdSpoofedBeacon;
1768 CHAR RssiOfRcvdSpoofedDisassoc;
1769 CHAR RssiOfRcvdSpoofedAuth;
1770 CHAR RssiOfRcvdSpoofedDeauth;
1771 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1772 CHAR RssiOfRcvdReplayAttack;
1774 BOOLEAN bBcnSntReq;
1775 UCHAR BcnBufIdx;
1776 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1780 #ifdef DOT11N_DRAFT3
1781 typedef enum _BSS2040COEXIST_FLAG{
1782 BSS_2040_COEXIST_DISABLE = 0,
1783 BSS_2040_COEXIST_TIMER_FIRED = 1,
1784 BSS_2040_COEXIST_INFO_SYNC = 2,
1785 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1786 }BSS2040COEXIST_FLAG;
1787 #endif // DOT11N_DRAFT3 //
1789 // configuration common to OPMODE_AP as well as OPMODE_STA
1790 typedef struct _COMMON_CONFIG {
1792 BOOLEAN bCountryFlag;
1793 UCHAR CountryCode[3];
1794 UCHAR Geography;
1795 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1796 UCHAR CountryRegionForABand; // Enum of country region for A band
1797 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1798 USHORT Dsifs; // in units of usec
1799 ULONG PacketFilter; // Packet filter for receiving
1801 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1802 UCHAR SsidLen; // the actual ssid length in used
1803 UCHAR LastSsidLen; // the actual ssid length in used
1804 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1805 UCHAR LastBssid[MAC_ADDR_LEN];
1807 UCHAR Bssid[MAC_ADDR_LEN];
1808 USHORT BeaconPeriod;
1809 UCHAR Channel;
1810 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1812 #if 0 // move to STA_ADMIN_CONFIG
1813 UCHAR DefaultKeyId;
1815 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1816 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1817 NDIS_802_11_WEP_STATUS WepStatus;
1818 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1820 // Add to support different cipher suite for WPA2/WPA mode
1821 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1822 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1823 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1824 USHORT RsnCapability;
1826 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1827 #endif
1829 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1830 UCHAR SupRateLen;
1831 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1832 UCHAR ExtRateLen;
1833 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1834 UCHAR MaxDesiredRate;
1835 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1837 ULONG BasicRateBitmap; // backup basic ratebitmap
1839 BOOLEAN bAPSDCapable;
1840 BOOLEAN bInServicePeriod;
1841 BOOLEAN bAPSDAC_BE;
1842 BOOLEAN bAPSDAC_BK;
1843 BOOLEAN bAPSDAC_VI;
1844 BOOLEAN bAPSDAC_VO;
1845 BOOLEAN bNeedSendTriggerFrame;
1846 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1847 ULONG TriggerTimerCount;
1848 UCHAR MaxSPLength;
1849 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1850 // move to MULTISSID_STRUCT for MBSS
1851 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1852 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1853 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1854 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1855 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1856 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1857 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1858 //BOOLEAN bAutoTxRateSwitch;
1859 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1860 UCHAR RtsRate; // RATE_xxx
1861 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1862 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1863 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1865 USHORT RtsThreshold; // in unit of BYTE
1866 USHORT FragmentThreshold; // in unit of BYTE
1868 UCHAR TxPower; // in unit of mW
1869 ULONG TxPowerPercentage; // 0~100 %
1870 ULONG TxPowerDefault; // keep for TxPowerPercentage
1872 #ifdef DOT11_N_SUPPORT
1873 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1874 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1875 #endif // DOT11_N_SUPPORT //
1876 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1877 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1878 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1879 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1880 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1881 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1882 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1883 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1884 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1885 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1887 #ifdef DOT11_N_SUPPORT
1888 BOOLEAN bRdg;
1889 #endif // DOT11_N_SUPPORT //
1890 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1891 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1892 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1893 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1894 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1895 #ifdef CONFIG_STA_SUPPORT
1896 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1897 #endif // CONFIG_STA_SUPPORT //
1898 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1899 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1900 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1901 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1902 ULONG OpStatusFlags;
1904 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1905 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1907 // IEEE802.11H--DFS.
1908 RADAR_DETECT_STRUCT RadarDetect;
1910 #ifdef CARRIER_DETECTION_SUPPORT
1911 CARRIER_DETECTION CarrierDetect;
1912 #endif // CARRIER_DETECTION_SUPPORT //
1914 #ifdef DOT11_N_SUPPORT
1915 // HT
1916 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1917 //RT_HT_CAPABILITY SupportedHtPhy;
1918 RT_HT_CAPABILITY DesiredHtPhy;
1919 HT_CAPABILITY_IE HtCapability;
1920 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1921 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1922 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1923 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
1925 #ifdef DOT11N_DRAFT3
1926 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1927 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1929 //This IE is used for 20/40 BSS Coexistence.
1930 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1931 // ====== 11n D3.0 =======================>
1932 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1933 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1934 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1935 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1936 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1937 USHORT Dot11BssWidthChanTranDelayFactor;
1938 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1940 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1941 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1943 NDIS_SPIN_LOCK TriggerEventTabLock;
1944 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1945 BSS_2040_COEXIST_IE BSSCoexist2040;
1946 TRIGGER_EVENT_TAB TriggerEventTab;
1947 UCHAR ChannelListIdx;
1948 // <====== 11n D3.0 =======================
1949 BOOLEAN bOverlapScanning;
1950 #endif // DOT11N_DRAFT3 //
1952 BOOLEAN bHTProtect;
1953 BOOLEAN bMIMOPSEnable;
1954 BOOLEAN bBADecline;
1955 BOOLEAN bDisableReordering;
1956 BOOLEAN bForty_Mhz_Intolerant;
1957 BOOLEAN bExtChannelSwitchAnnouncement;
1958 BOOLEAN bRcvBSSWidthTriggerEvents;
1959 ULONG LastRcvBSSWidthTriggerEventsTime;
1961 UCHAR TxBASize;
1962 #endif // DOT11_N_SUPPORT //
1964 // Enable wireless event
1965 BOOLEAN bWirelessEvent;
1966 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1968 // Tx & Rx Stream number selection
1969 UCHAR TxStream;
1970 UCHAR RxStream;
1972 // transmit phy mode, trasmit rate for Multicast.
1973 #ifdef MCAST_RATE_SPECIFIC
1974 UCHAR McastTransmitMcs;
1975 UCHAR McastTransmitPhyMode;
1976 #endif // MCAST_RATE_SPECIFIC //
1978 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1980 #ifdef RT2870
1981 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1982 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1983 RT_HT_CAPABILITY SupportedHtPhy;
1984 ULONG MaxPktOneTxBulk;
1985 UCHAR TxBulkFactor;
1986 UCHAR RxBulkFactor;
1988 BEACON_SYNC_STRUCT *pBeaconSync;
1989 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1990 UINT32 BeaconAdjust;
1991 UINT32 BeaconFactor;
1992 UINT32 BeaconRemain;
1993 #endif // RT2870 //
1996 NDIS_SPIN_LOCK MeasureReqTabLock;
1997 PMEASURE_REQ_TAB pMeasureReqTab;
1999 NDIS_SPIN_LOCK TpcReqTabLock;
2000 PTPC_REQ_TAB pTpcReqTab;
2002 // transmit phy mode, trasmit rate for Multicast.
2003 #ifdef MCAST_RATE_SPECIFIC
2004 HTTRANSMIT_SETTING MCastPhyMode;
2005 #endif // MCAST_RATE_SPECIFIC //
2007 #ifdef SINGLE_SKU
2008 UINT16 DefineMaxTxPwr;
2009 #endif // SINGLE_SKU //
2012 } COMMON_CONFIG, *PCOMMON_CONFIG;
2015 #ifdef CONFIG_STA_SUPPORT
2016 /* Modified by Wu Xi-Kun 4/21/2006 */
2017 // STA configuration and status
2018 typedef struct _STA_ADMIN_CONFIG {
2019 // GROUP 1 -
2020 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2021 // the user intended configuration, but not necessary fully equal to the final
2022 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2023 // AP or IBSS holder).
2024 // Once initialized, user configuration can only be changed via OID_xxx
2025 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
2026 USHORT AtimWin; // used when starting a new IBSS
2028 // GROUP 2 -
2029 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2030 // the user intended configuration, and should be always applied to the final
2031 // settings in ACTIVE BSS without compromising with the BSS holder.
2032 // Once initialized, user configuration can only be changed via OID_xxx
2033 UCHAR RssiTrigger;
2034 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2035 USHORT DefaultListenCount; // default listen count;
2036 ULONG WindowsPowerMode; // Power mode for AC power
2037 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2038 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2039 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2040 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2042 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2043 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2044 USHORT DisassocReason;
2045 UCHAR DisassocSta[MAC_ADDR_LEN];
2046 USHORT DeauthReason;
2047 UCHAR DeauthSta[MAC_ADDR_LEN];
2048 USHORT AuthFailReason;
2049 UCHAR AuthFailSta[MAC_ADDR_LEN];
2051 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2052 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2053 NDIS_802_11_WEP_STATUS WepStatus;
2054 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2056 // Add to support different cipher suite for WPA2/WPA mode
2057 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2058 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2059 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2060 USHORT RsnCapability;
2062 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2064 UCHAR PMK[32]; // WPA PSK mode PMK
2065 UCHAR PTK[64]; // WPA PSK mode PTK
2066 UCHAR GTK[32]; // GTK from authenticator
2067 BSSID_INFO SavedPMK[PMKID_NO];
2068 UINT SavedPMKNum; // Saved PMKID number
2070 UCHAR DefaultKeyId;
2073 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2074 UCHAR PortSecured;
2076 // For WPA countermeasures
2077 ULONG LastMicErrorTime; // record last MIC error time
2078 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2079 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2080 // For WPA-PSK supplicant state
2081 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2082 UCHAR ReplayCounter[8];
2083 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2084 UCHAR SNonce[32]; // SNonce for WPA-PSK
2086 UCHAR LastSNR0; // last received BEACON's SNR
2087 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2088 RSSI_SAMPLE RssiSample;
2089 ULONG NumOfAvgRssiSample;
2091 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2092 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2093 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2094 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2096 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2097 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2098 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2099 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2100 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2101 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2102 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2105 // New for WPA, windows want us to to keep association information and
2106 // Fixed IEs from last association response
2107 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2108 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2109 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2110 USHORT ResVarIELen; // Length of next VIE include EID & Length
2111 UCHAR ResVarIEs[MAX_VIE_LEN];
2113 UCHAR RSNIE_Len;
2114 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2116 // New variables used for CCX 1.0
2117 BOOLEAN bCkipOn;
2118 BOOLEAN bCkipCmicOn;
2119 UCHAR CkipFlag;
2120 UCHAR GIV[3]; //for CCX iv
2121 UCHAR RxSEQ[4];
2122 UCHAR TxSEQ[4];
2123 UCHAR CKIPMIC[4];
2124 UCHAR LeapAuthMode;
2125 LEAP_AUTH_INFO LeapAuthInfo;
2126 UCHAR HashPwd[16];
2127 UCHAR NetworkChallenge[8];
2128 UCHAR NetworkChallengeResponse[24];
2129 UCHAR PeerChallenge[8];
2131 UCHAR PeerChallengeResponse[24];
2132 UCHAR SessionKey[16]; //Network session keys (NSK)
2133 RALINK_TIMER_STRUCT LeapAuthTimer;
2134 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2136 // New control flags for CCX
2137 CCX_CONTROL CCXControl; // Master administration state
2138 BOOLEAN CCXEnable; // Actual CCX state
2139 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2140 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2141 UCHAR CCXReqType; // Current processing CCX request type
2142 BSS_TABLE CCXBssTab; // BSS Table
2143 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2144 USHORT FrameReportLen; // Current Frame report length
2145 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2146 USHORT RPIDensity[8]; // Array for RPI density collection
2147 // Start address of each BSS table within FrameReportBuf
2148 // It's important to update the RxPower of the corresponding Bss
2149 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2150 USHORT BeaconToken; // Token for beacon report
2151 ULONG LastBssIndex; // Most current reported Bss index
2152 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2153 UCHAR RMReqCnt; // Number of measurement request saved.
2154 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2155 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2156 // It must be the same channel with maximum duration
2157 USHORT ParallelDuration; // Maximum duration for parallel measurement
2158 UCHAR ParallelChannel; // Only one channel with parallel measurement
2159 USHORT IAPPToken; // IAPP dialog token
2160 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2161 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2162 // Hack for channel load and noise histogram parameters
2163 UCHAR NHFactor; // Parameter for Noise histogram
2164 UCHAR CLFactor; // Parameter for channel load
2166 UCHAR KRK[16]; //Key Refresh Key.
2167 UCHAR BTK[32]; //Base Transient Key
2168 BOOLEAN CCKMLinkUpFlag;
2169 ULONG CCKMRN; //(Re)Association request number.
2170 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2171 UCHAR AironetCellPowerLimit; //in dBm
2172 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2173 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2174 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2175 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2176 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2177 USHORT CCXAdjacentAPChannel;
2178 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2180 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2181 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2183 UCHAR DtimCount; // 0.. DtimPeriod-1
2184 UCHAR DtimPeriod; // default = 3
2186 #ifdef QOS_DLS_SUPPORT
2187 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2188 UCHAR DlsReplayCounter[8];
2189 #endif // QOS_DLS_SUPPORT //
2190 ////////////////////////////////////////////////////////////////////////////////////////
2191 // This is only for WHQL test.
2192 BOOLEAN WhqlTest;
2193 ////////////////////////////////////////////////////////////////////////////////////////
2195 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2196 // Fast Roaming
2197 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2198 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2200 #ifdef WPA_SUPPLICANT_SUPPORT
2201 BOOLEAN IEEE8021X;
2202 BOOLEAN IEEE8021x_required_keys;
2203 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2204 UCHAR DesireSharedKeyId;
2206 // 0: driver ignores wpa_supplicant
2207 // 1: wpa_supplicant initiates scanning and AP selection
2208 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2209 UCHAR WpaSupplicantUP;
2210 UCHAR WpaSupplicantScanCount;
2211 #endif // WPA_SUPPLICANT_SUPPORT //
2213 CHAR dev_name[16];
2214 USHORT OriDevType;
2216 BOOLEAN bTGnWifiTest;
2217 BOOLEAN bScanReqIsFromWebUI;
2219 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2220 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2221 RT_HT_PHY_INFO DesiredHtPhyInfo;
2222 BOOLEAN bAutoTxRateSwitch;
2225 #ifdef EXT_BUILD_CHANNEL_LIST
2226 UCHAR IEEE80211dClientMode;
2227 UCHAR StaOriCountryCode[3];
2228 UCHAR StaOriGeography;
2229 #endif // EXT_BUILD_CHANNEL_LIST //
2230 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2232 // This data structure keep the current active BSS/IBSS's configuration that this STA
2233 // had agreed upon joining the network. Which means these parameters are usually decided
2234 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2235 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2236 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2237 // the current active settings.
2238 typedef struct _STA_ACTIVE_CONFIG {
2239 USHORT Aid;
2240 USHORT AtimWin; // in kusec; IBSS parameter set element
2241 USHORT CapabilityInfo;
2242 USHORT CfpMaxDuration;
2243 USHORT CfpPeriod;
2245 // Copy supported rate from desired AP's beacon. We are trying to match
2246 // AP's supported and extended rate settings.
2247 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2248 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2249 UCHAR SupRateLen;
2250 UCHAR ExtRateLen;
2251 // Copy supported ht from desired AP's beacon. We are trying to match
2252 RT_HT_PHY_INFO SupportedPhyInfo;
2253 RT_HT_CAPABILITY SupportedHtPhy;
2254 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2256 #ifdef RT2870
2257 // for USB interface, avoid in interrupt when write key
2258 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2259 NDIS_802_11_MAC_ADDRESS MacAddr;
2260 USHORT MacTabMatchWCID; // ASIC
2261 CIPHER_KEY CipherKey;
2262 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2263 #endif // RT2870 //
2264 #endif // CONFIG_STA_SUPPORT //
2266 // ----------- start of AP --------------------------
2267 // AUTH-RSP State Machine Aux data structure
2268 typedef struct _AP_MLME_AUX {
2269 UCHAR Addr[MAC_ADDR_LEN];
2270 USHORT Alg;
2271 CHAR Challenge[CIPHER_TEXT_LEN];
2272 } AP_MLME_AUX, *PAP_MLME_AUX;
2274 // structure to define WPA Group Key Rekey Interval
2275 typedef struct PACKED _RT_802_11_WPA_REKEY {
2276 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2277 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2278 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2280 typedef struct _MAC_TABLE_ENTRY {
2281 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2282 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2283 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2284 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2285 BOOLEAN ValidAsMesh;
2286 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2287 BOOLEAN isCached;
2288 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2290 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2291 //jan for wpa
2292 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2293 UCHAR CMTimerRunning;
2294 UCHAR apidx; // MBSS number
2295 UCHAR RSNIE_Len;
2296 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2297 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2298 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2299 UCHAR PTK[64];
2300 UCHAR ReTryCounter;
2301 RALINK_TIMER_STRUCT RetryTimer;
2302 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2303 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2304 NDIS_802_11_WEP_STATUS WepStatus;
2305 AP_WPA_STATE WpaState;
2306 GTK_STATE GTKState;
2307 USHORT PortSecured;
2308 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2309 CIPHER_KEY PairwiseKey;
2310 PVOID pAd;
2311 INT PMKID_CacheIdx;
2312 UCHAR PMKID[LEN_PMKID];
2315 UCHAR Addr[MAC_ADDR_LEN];
2316 UCHAR PsMode;
2317 SST Sst;
2318 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2319 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2320 USHORT Aid;
2321 USHORT CapabilityInfo;
2322 UCHAR LastRssi;
2323 ULONG NoDataIdleCount;
2324 UINT16 StationKeepAliveCount; // unit: second
2325 ULONG PsQIdleCount;
2326 QUEUE_HEADER PsQueue;
2328 UINT32 StaConnectTime; // the live time of this station since associated with AP
2331 #ifdef DOT11_N_SUPPORT
2332 BOOLEAN bSendBAR;
2333 USHORT NoBADataCountDown;
2335 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2336 UINT TxBFCount; // 3*3
2337 #endif // DOT11_N_SUPPORT //
2338 UINT FIFOCount;
2339 UINT DebugFIFOCount;
2340 UINT DebugTxCount;
2341 BOOLEAN bDlsInit;
2344 //====================================================
2345 //WDS entry needs these
2346 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2347 UINT MatchWDSTabIdx;
2348 UCHAR MaxSupportedRate;
2349 UCHAR CurrTxRate;
2350 UCHAR CurrTxRateIndex;
2351 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2352 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2353 // USHORT OneSecTxOkCount;
2354 UINT32 OneSecTxNoRetryOkCount;
2355 UINT32 OneSecTxRetryOkCount;
2356 UINT32 OneSecTxFailCount;
2357 UINT32 ContinueTxFailCnt;
2358 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2359 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2360 //====================================================
2364 #ifdef CONFIG_STA_SUPPORT
2365 #ifdef QOS_DLS_SUPPORT
2366 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2367 #endif // QOS_DLS_SUPPORT //
2368 #endif // CONFIG_STA_SUPPORT //
2370 BOOLEAN fNoisyEnvironment;
2371 BOOLEAN fLastSecAccordingRSSI;
2372 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2373 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2374 ULONG LastTxOkCount;
2375 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2377 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2378 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2379 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2380 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2381 ULONG ClientStatusFlags;
2383 // TODO: Shall we move that to DOT11_N_SUPPORT???
2384 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2386 #ifdef DOT11_N_SUPPORT
2387 // HT EWC MIMO-N used parameters
2388 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2389 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2390 USHORT TXAutoBAbitmap;
2391 USHORT BADeclineBitmap;
2392 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2393 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2394 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2396 // 802.11n features.
2397 UCHAR MpduDensity;
2398 UCHAR MaxRAmpduFactor;
2399 UCHAR AMsduSize;
2400 UCHAR MmpsMode; // MIMO power save more.
2402 HT_CAPABILITY_IE HTCapability;
2404 #ifdef DOT11N_DRAFT3
2405 UCHAR BSS2040CoexistenceMgmtSupport;
2406 #endif // DOT11N_DRAFT3 //
2407 #endif // DOT11_N_SUPPORT //
2409 BOOLEAN bAutoTxRateSwitch;
2411 UCHAR RateLen;
2412 struct _MAC_TABLE_ENTRY *pNext;
2413 USHORT TxSeq[NUM_OF_TID];
2414 USHORT NonQosDataSeq;
2416 RSSI_SAMPLE RssiSample;
2418 UINT32 TXMCSExpected[16];
2419 UINT32 TXMCSSuccessful[16];
2420 UINT32 TXMCSFailed[16];
2421 UINT32 TXMCSAutoFallBack[16][16];
2423 #ifdef CONFIG_STA_SUPPORT
2424 ULONG LastBeaconRxTime;
2425 #endif // CONFIG_STA_SUPPORT //
2426 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2428 typedef struct _MAC_TABLE {
2429 USHORT Size;
2430 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2431 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2432 QUEUE_HEADER McastPsQueue;
2433 ULONG PsQIdleCount;
2434 BOOLEAN fAnyStationInPsm;
2435 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2436 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2437 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2438 #ifdef DOT11_N_SUPPORT
2439 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2440 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2441 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2442 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2443 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2444 #endif // DOT11_N_SUPPORT //
2445 } MAC_TABLE, *PMAC_TABLE;
2447 #ifdef DOT11_N_SUPPORT
2448 #define IS_HT_STA(_pMacEntry) \
2449 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2451 #define IS_HT_RATE(_pMacEntry) \
2452 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2454 #define PEER_IS_HT_RATE(_pMacEntry) \
2455 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2456 #endif // DOT11_N_SUPPORT //
2458 typedef struct _WDS_ENTRY {
2459 BOOLEAN Valid;
2460 UCHAR Addr[MAC_ADDR_LEN];
2461 ULONG NoDataIdleCount;
2462 struct _WDS_ENTRY *pNext;
2463 } WDS_ENTRY, *PWDS_ENTRY;
2465 typedef struct _WDS_TABLE_ENTRY {
2466 USHORT Size;
2467 UCHAR WdsAddr[MAC_ADDR_LEN];
2468 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2469 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2470 UCHAR MaxSupportedRate;
2471 UCHAR CurrTxRate;
2472 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2473 USHORT OneSecTxOkCount;
2474 USHORT OneSecTxRetryOkCount;
2475 USHORT OneSecTxFailCount;
2476 ULONG CurrTxRateStableTime; // # of second in current TX rate
2477 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2478 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2480 typedef struct _RT_802_11_WDS_ENTRY {
2481 PNET_DEV dev;
2482 UCHAR Valid;
2483 UCHAR PhyMode;
2484 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2485 UCHAR MacTabMatchWCID; // ASIC
2486 NDIS_802_11_WEP_STATUS WepStatus;
2487 UCHAR KeyIdx;
2488 CIPHER_KEY WdsKey;
2489 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2490 RT_HT_PHY_INFO DesiredHtPhyInfo;
2491 BOOLEAN bAutoTxRateSwitch;
2492 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2493 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2495 typedef struct _WDS_TABLE {
2496 UCHAR Mode;
2497 ULONG Size;
2498 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2499 } WDS_TABLE, *PWDS_TABLE;
2501 typedef struct _APCLI_STRUCT {
2502 PNET_DEV dev;
2503 #ifdef RTL865X_SOC
2504 unsigned int mylinkid;
2505 #endif
2506 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2507 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2508 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2509 UCHAR SsidLen;
2510 CHAR Ssid[MAX_LEN_OF_SSID];
2512 UCHAR CfgSsidLen;
2513 CHAR CfgSsid[MAX_LEN_OF_SSID];
2514 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2515 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2517 ULONG ApCliRcvBeaconTime;
2519 ULONG CtrlCurrState;
2520 ULONG SyncCurrState;
2521 ULONG AuthCurrState;
2522 ULONG AssocCurrState;
2523 ULONG WpaPskCurrState;
2525 USHORT AuthReqCnt;
2526 USHORT AssocReqCnt;
2528 ULONG ClientStatusFlags;
2529 UCHAR MpduDensity;
2531 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2532 NDIS_802_11_WEP_STATUS WepStatus;
2534 // Add to support different cipher suite for WPA2/WPA mode
2535 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2536 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2537 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2538 USHORT RsnCapability;
2540 UCHAR PSK[100]; // reserve PSK key material
2541 UCHAR PSKLen;
2542 UCHAR PMK[32]; // WPA PSK mode PMK
2543 //UCHAR PTK[64]; // WPA PSK mode PTK
2544 UCHAR GTK[32]; // GTK from authenticator
2546 //CIPHER_KEY PairwiseKey;
2547 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2548 UCHAR DefaultKeyId;
2550 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2551 //UCHAR PortSecured;
2553 // store RSN_IE built by driver
2554 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2555 UCHAR RSNIE_Len;
2557 // For WPA countermeasures
2558 ULONG LastMicErrorTime; // record last MIC error time
2559 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2560 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2562 // For WPA-PSK supplicant state
2563 //WPA_STATE WpaState; // Default is SS_NOTUSE
2564 //UCHAR ReplayCounter[8];
2565 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2566 UCHAR SNonce[32]; // SNonce for WPA-PSK
2567 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2569 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2570 RT_HT_PHY_INFO DesiredHtPhyInfo;
2571 BOOLEAN bAutoTxRateSwitch;
2572 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2573 } APCLI_STRUCT, *PAPCLI_STRUCT;
2575 // ----------- end of AP ----------------------------
2577 #ifdef BLOCK_NET_IF
2578 typedef struct _BLOCK_QUEUE_ENTRY
2580 BOOLEAN SwTxQueueBlockFlag;
2581 LIST_HEADER NetIfList;
2582 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2583 #endif // BLOCK_NET_IF //
2585 struct wificonf
2587 BOOLEAN bShortGI;
2588 BOOLEAN bGreenField;
2593 typedef struct _INF_PCI_CONFIG
2595 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2596 }INF_PCI_CONFIG;
2598 typedef struct _INF_USB_CONFIG
2600 UINT BulkInEpAddr; // bulk-in endpoint address
2601 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2603 }INF_USB_CONFIG;
2605 #ifdef IKANOS_VX_1X0
2606 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2608 struct IKANOS_TX_INFO
2610 struct net_device *netdev;
2611 IkanosWlanTxCbFuncP *fp;
2613 #endif // IKANOS_VX_1X0 //
2615 #ifdef NINTENDO_AP
2616 typedef struct _NINDO_CTRL_BLOCK {
2618 RT_NINTENDO_TABLE DS_TABLE;
2620 #ifdef CHIP25XX
2621 spinlock_t NINTENDO_TABLE_Lock;
2622 #else
2623 NDIS_SPIN_LOCK NINTENDO_TABLE_Lock;
2624 #endif // CHIP25XX //
2626 UCHAR NINTENDO_UP_BUFFER[512];
2627 UCHAR Local_KeyIdx;
2628 CIPHER_KEY Local_SharedKey;
2629 UCHAR Local_bHideSsid;
2630 UCHAR Local_AuthMode;
2631 UCHAR Local_WepStatus;
2632 USHORT Local_CapabilityInfo;
2633 } NINDO_CTRL_BLOCK;
2634 #endif // NINTENDO_AP //
2637 #ifdef DBG_DIAGNOSE
2638 #define DIAGNOSE_TIME 10 // 10 sec
2639 typedef struct _RtmpDiagStrcut_
2640 { // Diagnosis Related element
2641 unsigned char inited;
2642 unsigned char qIdx;
2643 unsigned char ArrayStartIdx;
2644 unsigned char ArrayCurIdx;
2645 // Tx Related Count
2646 USHORT TxDataCnt[DIAGNOSE_TIME];
2647 USHORT TxFailCnt[DIAGNOSE_TIME];
2648 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2649 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2650 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2651 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2652 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2654 USHORT TxAggCnt[DIAGNOSE_TIME];
2655 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2656 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2657 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2658 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2659 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2661 // Rx Related Count
2662 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2663 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2664 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2665 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2666 }RtmpDiagStruct;
2667 #endif // DBG_DIAGNOSE //
2671 // The miniport adapter structure
2673 typedef struct _RTMP_ADAPTER
2675 PVOID OS_Cookie; // save specific structure relative to OS
2676 PNET_DEV net_dev;
2677 ULONG VirtualIfCnt;
2681 NDIS_SPIN_LOCK irq_lock;
2682 UCHAR irq_disabled;
2684 #ifdef RT2870
2685 /*****************************************************************************************/
2686 /* USB related parameters */
2687 /*****************************************************************************************/
2688 struct usb_config_descriptor *config;
2689 UINT BulkInEpAddr; // bulk-in endpoint address
2690 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2692 UINT NumberOfPipes;
2693 USHORT BulkOutMaxPacketSize;
2694 USHORT BulkInMaxPacketSize;
2696 //======Control Flags
2697 LONG PendingIoCount;
2698 ULONG BulkFlags;
2699 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2702 //======Timer Thread
2703 RT2870_TIMER_QUEUE TimerQ;
2704 NDIS_SPIN_LOCK TimerQLock;
2707 //======Cmd Thread
2708 CmdQ CmdQ;
2709 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2711 BOOLEAN TimerFunc_kill;
2712 BOOLEAN mlme_kill;
2715 //======Semaphores (event)
2716 struct semaphore mlme_semaphore; /* to sleep thread on */
2717 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2718 struct semaphore RTUSBTimer_semaphore;
2719 #ifdef INF_AMAZON_SE
2720 struct semaphore UsbVendorReq_semaphore;
2721 PVOID UsbVendorReqBuf;
2722 #endif // INF_AMAZON_SE //
2723 struct completion TimerQComplete;
2724 struct completion mlmeComplete;
2725 struct completion CmdQComplete;
2726 wait_queue_head_t *wait;
2728 //======Lock for 2870 ATE
2729 #ifdef RALINK_ATE
2730 NDIS_SPIN_LOCK GenericLock; // ATE Tx/Rx generic spinlock
2731 #endif // RALINK_ATE //
2733 #endif // RT2870 //
2736 /*****************************************************************************************/
2737 /* Both PCI/USB related parameters */
2738 /*****************************************************************************************/
2741 /*****************************************************************************************/
2742 /* Tx related parameters */
2743 /*****************************************************************************************/
2744 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2745 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2747 #ifdef RT2870
2748 // Data related context and AC specified, 4 AC supported
2749 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2750 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2752 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2753 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2755 // 4 sets of Bulk Out index and pending flag
2756 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2758 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2759 UCHAR bulkResetPipeid;
2760 BOOLEAN MgmtBulkPending;
2761 ULONG bulkResetReq[6];
2762 #endif // RT2870 //
2764 // resource for software backlog queues
2765 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2766 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2768 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2769 RTMP_MGMT_RING MgmtRing;
2770 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2773 /*****************************************************************************************/
2774 /* Rx related parameters */
2775 /*****************************************************************************************/
2778 #ifdef RT2870
2779 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2780 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2781 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2782 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2783 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2784 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2785 ULONG TransferBufferLength; // current length of the packet buffer
2786 ULONG ReadPosition; // current read position in a packet buffer
2787 #endif // RT2870 //
2790 /*****************************************************************************************/
2791 /* ASIC related parameters */
2792 /*****************************************************************************************/
2793 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2795 // ---------------------------
2796 // E2PROM
2797 // ---------------------------
2798 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2799 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2800 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2801 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2803 // ---------------------------
2804 // BBP Control
2805 // ---------------------------
2806 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2807 UCHAR BbpRssiToDbmDelta;
2808 BBP_R66_TUNING BbpTuning;
2810 // ----------------------------
2811 // RFIC control
2812 // ----------------------------
2813 UCHAR RfIcType; // RFIC_xxx
2814 ULONG RfFreqOffset; // Frequency offset for channel switching
2815 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2817 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2818 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2820 // This soft Rx Antenna Diversity mechanism is used only when user set
2821 // RX Antenna = DIVERSITY ON
2822 SOFT_RX_ANT_DIVERSITY RxAnt;
2824 UCHAR RFProgSeq;
2825 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2826 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2827 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2828 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2830 UCHAR ChannelListNum; // number of channel in ChannelList[]
2831 UCHAR Bbp94;
2832 BOOLEAN BbpForCCK;
2833 ULONG Tx20MPwrCfgABand[5];
2834 ULONG Tx20MPwrCfgGBand[5];
2835 ULONG Tx40MPwrCfgABand[5];
2836 ULONG Tx40MPwrCfgGBand[5];
2838 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2839 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2840 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2841 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2842 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2843 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2845 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2846 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2847 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2848 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2849 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2850 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2852 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2853 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2854 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2855 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2856 //---
2858 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2859 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2860 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2861 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2862 //---
2864 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2865 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2866 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2867 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2869 // ----------------------------
2870 // LED control
2871 // ----------------------------
2872 MCU_LEDCS_STRUC LedCntl;
2873 USHORT Led1; // read from EEPROM 0x3c
2874 USHORT Led2; // EEPROM 0x3e
2875 USHORT Led3; // EEPROM 0x40
2876 UCHAR LedIndicatorStregth;
2877 UCHAR RssiSingalstrengthOffet;
2878 BOOLEAN bLedOnScanning;
2879 UCHAR LedStatus;
2881 /*****************************************************************************************/
2882 /* 802.11 related parameters */
2883 /*****************************************************************************************/
2884 // outgoing BEACON frame buffer and corresponding TXD
2885 TXWI_STRUC BeaconTxWI;
2886 PUCHAR BeaconBuf;
2887 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2889 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2890 PSPOLL_FRAME PsPollFrame;
2891 HEADER_802_11 NullFrame;
2893 #ifdef RT2870
2894 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2895 TX_CONTEXT NullContext;
2896 TX_CONTEXT PsPollContext;
2897 TX_CONTEXT RTSContext;
2898 #endif // RT2870 //
2902 //=========AP===========
2905 //=======STA===========
2906 #ifdef CONFIG_STA_SUPPORT
2907 /* Modified by Wu Xi-Kun 4/21/2006 */
2908 // -----------------------------------------------
2909 // STA specific configuration & operation status
2910 // used only when pAd->OpMode == OPMODE_STA
2911 // -----------------------------------------------
2912 STA_ADMIN_CONFIG StaCfg; // user desired settings
2913 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2914 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2915 NDIS_MEDIA_STATE PreMediaState;
2916 #endif // CONFIG_STA_SUPPORT //
2918 //=======Common===========
2919 // OP mode: either AP or STA
2920 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2922 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2925 // configuration: read from Registry & E2PROM
2926 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2927 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2928 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2930 // ------------------------------------------------------
2931 // common configuration to both OPMODE_STA and OPMODE_AP
2932 // ------------------------------------------------------
2933 COMMON_CONFIG CommonCfg;
2934 MLME_STRUCT Mlme;
2936 // AP needs those vaiables for site survey feature.
2937 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2938 BSS_TABLE ScanTab; // store the latest SCAN result
2940 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2941 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2942 NDIS_SPIN_LOCK MacTabLock;
2944 #ifdef DOT11_N_SUPPORT
2945 BA_TABLE BATable;
2946 #endif // DOT11_N_SUPPORT //
2947 NDIS_SPIN_LOCK BATabLock;
2948 RALINK_TIMER_STRUCT RECBATimer;
2950 // encryption/decryption KEY tables
2951 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2953 // RX re-assembly buffer for fragmentation
2954 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2956 // various Counters
2957 COUNTER_802_3 Counters8023; // 802.3 counters
2958 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2959 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2960 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2961 PRIVATE_STRUC PrivateInfo; // Private information & counters
2963 // flags, see fRTMP_ADAPTER_xxx flags
2964 ULONG Flags; // Represent current device status
2966 // current TX sequence #
2967 USHORT Sequence;
2969 // Control disconnect / connect event generation
2970 //+++Didn't used anymore
2971 ULONG LinkDownTime;
2972 //---
2973 ULONG LastRxRate;
2974 ULONG LastTxRate;
2975 //+++Used only for Station
2976 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2977 //---
2979 ULONG ExtraInfo; // Extra information for displaying status
2980 ULONG SystemErrorBitmap; // b0: E2PROM version error
2982 //+++Didn't used anymore
2983 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2984 //---
2986 // ---------------------------
2987 // System event log
2988 // ---------------------------
2989 RT_802_11_EVENT_TABLE EventTab;
2992 BOOLEAN HTCEnable;
2994 /*****************************************************************************************/
2995 /* Statistic related parameters */
2996 /*****************************************************************************************/
2997 #ifdef RT2870
2998 ULONG BulkOutDataOneSecCount;
2999 ULONG BulkInDataOneSecCount;
3000 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
3001 ULONG watchDogRxCnt;
3002 ULONG watchDogRxOverFlowCnt;
3003 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
3004 #endif // RT2870 //
3006 BOOLEAN bUpdateBcnCntDone;
3007 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
3008 // ----------------------------
3009 // DEBUG paramerts
3010 // ----------------------------
3011 //ULONG DebugSetting[4];
3012 BOOLEAN bBanAllBaSetup;
3013 BOOLEAN bPromiscuous;
3015 // ----------------------------
3016 // rt2860c emulation-use Parameters
3017 // ----------------------------
3018 ULONG rtsaccu[30];
3019 ULONG ctsaccu[30];
3020 ULONG cfendaccu[30];
3021 ULONG bacontent[16];
3022 ULONG rxint[RX_RING_SIZE+1];
3023 UCHAR rcvba[60];
3024 BOOLEAN bLinkAdapt;
3025 BOOLEAN bForcePrintTX;
3026 BOOLEAN bForcePrintRX;
3027 BOOLEAN bDisablescanning; //defined in RT2870 USB
3028 BOOLEAN bStaFifoTest;
3029 BOOLEAN bProtectionTest;
3030 BOOLEAN bHCCATest;
3031 BOOLEAN bGenOneHCCA;
3032 BOOLEAN bBroadComHT;
3033 //+++Following add from RT2870 USB.
3034 ULONG BulkOutReq;
3035 ULONG BulkOutComplete;
3036 ULONG BulkOutCompleteOther;
3037 ULONG BulkOutCompleteCancel; // seems not use now?
3038 ULONG BulkInReq;
3039 ULONG BulkInComplete;
3040 ULONG BulkInCompleteFail;
3041 //---
3043 struct wificonf WIFItestbed;
3045 #ifdef RALINK_ATE
3046 ATE_INFO ate;
3047 #ifdef RT2870
3048 BOOLEAN ContinBulkOut; //ATE bulk out control
3049 BOOLEAN ContinBulkIn; //ATE bulk in control
3050 atomic_t BulkOutRemained;
3051 atomic_t BulkInRemained;
3052 #endif // RT2870 //
3053 #endif // RALINK_ATE //
3055 #ifdef DOT11_N_SUPPORT
3056 struct reordering_mpdu_pool mpdu_blk_pool;
3057 #endif // DOT11_N_SUPPORT //
3059 ULONG OneSecondnonBEpackets; // record non BE packets per second
3061 #if WIRELESS_EXT >= 12
3062 struct iw_statistics iw_stats;
3063 #endif
3065 struct net_device_stats stats;
3067 #ifdef BLOCK_NET_IF
3068 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
3069 #endif // BLOCK_NET_IF //
3073 #ifdef MULTIPLE_CARD_SUPPORT
3074 INT32 MC_RowID;
3075 UCHAR MC_FileName[256];
3076 #endif // MULTIPLE_CARD_SUPPORT //
3078 ULONG TbttTickCount;
3079 #ifdef PCI_MSI_SUPPORT
3080 BOOLEAN HaveMsi;
3081 #endif // PCI_MSI_SUPPORT //
3084 UCHAR is_on;
3086 #define TIME_BASE (1000000/OS_HZ)
3087 #define TIME_ONE_SECOND (1000000/TIME_BASE)
3088 UCHAR flg_be_adjust;
3089 ULONG be_adjust_last_time;
3092 #ifdef IKANOS_VX_1X0
3093 struct IKANOS_TX_INFO IkanosTxInfo;
3094 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3095 #endif // IKANOS_VX_1X0 //
3098 #ifdef DBG_DIAGNOSE
3099 RtmpDiagStruct DiagStruct;
3100 #endif // DBG_DIAGNOSE //
3103 UINT8 PM_FlgSuspend;
3104 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3107 // Cisco IAPP format
3109 typedef struct _CISCO_IAPP_CONTENT_
3111 USHORT Length; //IAPP Length
3112 UCHAR MessageType; //IAPP type
3113 UCHAR FunctionCode; //IAPP function type
3114 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3115 UCHAR SourceMAC[MAC_ADDR_LEN];
3116 USHORT Tag; //Tag(element IE) - Adjacent AP report
3117 USHORT TagLength; //Length of element not including 4 byte header
3118 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3119 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3120 USHORT Channel;
3121 USHORT SsidLen;
3122 UCHAR Ssid[MAX_LEN_OF_SSID];
3123 USHORT Seconds; //Seconds that the client has been disassociated.
3124 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3126 #define DELAYINTMASK 0x0003fffb
3127 #define INTMASK 0x0003fffb
3128 #define IndMask 0x0003fffc
3129 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3130 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3131 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3132 #define TxCoherent 0x00020000 // tx coherent
3133 #define RxCoherent 0x00010000 // rx coherent
3134 #define McuCommand 0x00000200 // mcu
3135 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3136 #define TBTTInt 0x00000800 // TBTT interrupt
3137 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3138 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3139 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3142 typedef struct _RX_BLK_
3144 // RXD_STRUC RxD; // sample
3145 RT28XX_RXD_STRUC RxD;
3146 PRXWI_STRUC pRxWI;
3147 PHEADER_802_11 pHeader;
3148 PNDIS_PACKET pRxPacket;
3149 UCHAR *pData;
3150 USHORT DataSize;
3151 USHORT Flags;
3152 UCHAR UserPriority; // for calculate TKIP MIC using
3153 } RX_BLK;
3156 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3157 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3158 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3161 #define fRX_WDS 0x0001
3162 #define fRX_AMSDU 0x0002
3163 #define fRX_ARALINK 0x0004
3164 #define fRX_HTC 0x0008
3165 #define fRX_PAD 0x0010
3166 #define fRX_AMPDU 0x0020
3167 #define fRX_QOS 0x0040
3168 #define fRX_INFRA 0x0080
3169 #define fRX_EAP 0x0100
3170 #define fRX_MESH 0x0200
3171 #define fRX_APCLI 0x0400
3172 #define fRX_DLS 0x0800
3173 #define fRX_WPI 0x1000
3175 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3176 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3177 #define LENGTH_ARALINK_HEADER_FIELD 2
3179 #define TX_UNKOWN_FRAME 0x00
3180 #define TX_MCAST_FRAME 0x01
3181 #define TX_LEGACY_FRAME 0x02
3182 #define TX_AMPDU_FRAME 0x04
3183 #define TX_AMSDU_FRAME 0x08
3184 #define TX_RALINK_FRAME 0x10
3185 #define TX_FRAG_FRAME 0x20
3188 // Currently the sizeof(TX_BLK) is 148 bytes.
3189 typedef struct _TX_BLK_
3191 UCHAR QueIdx;
3192 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3193 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3194 USHORT TotalFragNum; // Total frame fragments required in one batch
3195 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3197 QUEUE_HEADER TxPacketList;
3198 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3199 HTTRANSMIT_SETTING *pTransmit;
3201 // Following structure used for the characteristics of a specific packet.
3202 PNDIS_PACKET pPacket;
3203 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3204 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3205 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3206 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3207 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3208 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3209 UCHAR HdrPadLen; // recording Header Padding Length;
3210 UCHAR apidx; // The interface associated to this packet
3211 UCHAR Wcid; // The MAC entry associated to this packet
3212 UCHAR UserPriority; // priority class of packet
3213 UCHAR FrameGap; // what kind of IFS this packet use
3214 UCHAR MpduReqNum; // number of fragments of this frame
3215 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3216 UCHAR CipherAlg; // cipher alogrithm
3217 PCIPHER_KEY pKey;
3221 USHORT Flags; //See following definitions for detail.
3223 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3224 ULONG Priv; // Hardware specific value saved in here.
3225 } TX_BLK, *PTX_BLK;
3228 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3229 #define fTX_bAckRequired 0x0002 // the packet need ack response
3230 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3231 #define fTX_bHTRate 0x0008 // allow to use HT rate
3232 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3233 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3234 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3235 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3236 #define fTX_bWMM 0x0080 // QOS Data
3238 #define fTX_bClearEAPFrame 0x0100
3241 #ifdef CONFIG_STA_SUPPORT
3242 #endif // CONFIG_STA_SUPPORT //
3246 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3247 do { \
3248 if (value) \
3249 (_pTxBlk->Flags |= _flag) \
3250 else \
3251 (_pTxBlk->Flags &= ~(_flag)) \
3252 }while(0)
3254 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3255 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3256 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3262 //------------------------------------------------------------------------------------------
3266 #ifdef RT_BIG_ENDIAN
3267 static inline VOID WriteBackToDescriptor(
3268 IN PUCHAR Dest,
3269 IN PUCHAR Src,
3270 IN BOOLEAN DoEncrypt,
3271 IN ULONG DescriptorType)
3273 UINT32 *p1, *p2;
3275 p1 = ((UINT32 *)Dest);
3276 p2 = ((UINT32 *)Src);
3278 *p1 = *p2;
3279 *(p1+2) = *(p2+2);
3280 *(p1+3) = *(p2+3);
3281 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3285 ========================================================================
3287 Routine Description:
3288 Endian conversion of Tx/Rx descriptor .
3290 Arguments:
3291 pAd Pointer to our adapter
3292 pData Pointer to Tx/Rx descriptor
3293 DescriptorType Direction of the frame
3295 Return Value:
3296 None
3298 Note:
3299 Call this function when read or update descriptor
3300 ========================================================================
3302 static inline VOID RTMPWIEndianChange(
3303 IN PUCHAR pData,
3304 IN ULONG DescriptorType)
3306 int size;
3307 int i;
3309 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3311 if(DescriptorType == TYPE_TXWI)
3313 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3314 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3316 else
3318 for(i=0; i < size/4 ; i++)
3319 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3324 ========================================================================
3326 Routine Description:
3327 Endian conversion of Tx/Rx descriptor .
3329 Arguments:
3330 pAd Pointer to our adapter
3331 pData Pointer to Tx/Rx descriptor
3332 DescriptorType Direction of the frame
3334 Return Value:
3335 None
3337 Note:
3338 Call this function when read or update descriptor
3339 ========================================================================
3342 #ifdef RT2870
3343 static inline VOID RTMPDescriptorEndianChange(
3344 IN PUCHAR pData,
3345 IN ULONG DescriptorType)
3347 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3349 #endif // RT2870 //
3351 ========================================================================
3353 Routine Description:
3354 Endian conversion of all kinds of 802.11 frames .
3356 Arguments:
3357 pAd Pointer to our adapter
3358 pData Pointer to the 802.11 frame structure
3359 Dir Direction of the frame
3360 FromRxDoneInt Caller is from RxDone interrupt
3362 Return Value:
3363 None
3365 Note:
3366 Call this function when read or update buffer data
3367 ========================================================================
3369 static inline VOID RTMPFrameEndianChange(
3370 IN PRTMP_ADAPTER pAd,
3371 IN PUCHAR pData,
3372 IN ULONG Dir,
3373 IN BOOLEAN FromRxDoneInt)
3375 PHEADER_802_11 pFrame;
3376 PUCHAR pMacHdr;
3378 // swab 16 bit fields - Frame Control field
3379 if(Dir == DIR_READ)
3381 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3384 pFrame = (PHEADER_802_11) pData;
3385 pMacHdr = (PUCHAR) pFrame;
3387 // swab 16 bit fields - Duration/ID field
3388 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3390 // swab 16 bit fields - Sequence Control field
3391 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3393 if(pFrame->FC.Type == BTYPE_MGMT)
3395 switch(pFrame->FC.SubType)
3397 case SUBTYPE_ASSOC_REQ:
3398 case SUBTYPE_REASSOC_REQ:
3399 // swab 16 bit fields - CapabilityInfo field
3400 pMacHdr += sizeof(HEADER_802_11);
3401 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3403 // swab 16 bit fields - Listen Interval field
3404 pMacHdr += 2;
3405 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3406 break;
3408 case SUBTYPE_ASSOC_RSP:
3409 case SUBTYPE_REASSOC_RSP:
3410 // swab 16 bit fields - CapabilityInfo field
3411 pMacHdr += sizeof(HEADER_802_11);
3412 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3414 // swab 16 bit fields - Status Code field
3415 pMacHdr += 2;
3416 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3418 // swab 16 bit fields - AID field
3419 pMacHdr += 2;
3420 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3421 break;
3423 case SUBTYPE_AUTH:
3424 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3425 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3426 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3427 break;
3428 else
3430 // swab 16 bit fields - Auth Alg No. field
3431 pMacHdr += sizeof(HEADER_802_11);
3432 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3434 // swab 16 bit fields - Auth Seq No. field
3435 pMacHdr += 2;
3436 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3438 // swab 16 bit fields - Status Code field
3439 pMacHdr += 2;
3440 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3442 break;
3444 case SUBTYPE_BEACON:
3445 case SUBTYPE_PROBE_RSP:
3446 // swab 16 bit fields - BeaconInterval field
3447 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3448 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3450 // swab 16 bit fields - CapabilityInfo field
3451 pMacHdr += sizeof(USHORT);
3452 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3453 break;
3455 case SUBTYPE_DEAUTH:
3456 case SUBTYPE_DISASSOC:
3457 // swab 16 bit fields - Reason code field
3458 pMacHdr += sizeof(HEADER_802_11);
3459 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3460 break;
3463 else if( pFrame->FC.Type == BTYPE_DATA )
3466 else if(pFrame->FC.Type == BTYPE_CNTL)
3468 switch(pFrame->FC.SubType)
3470 case SUBTYPE_BLOCK_ACK_REQ:
3472 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3473 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3474 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3476 break;
3477 case SUBTYPE_BLOCK_ACK:
3478 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3479 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3480 break;
3482 case SUBTYPE_ACK:
3483 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3484 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3485 break;
3488 else
3490 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3493 // swab 16 bit fields - Frame Control
3494 if(Dir == DIR_WRITE)
3496 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3499 #endif // RT_BIG_ENDIAN //
3502 static inline VOID ConvertMulticastIP2MAC(
3503 IN PUCHAR pIpAddr,
3504 IN PUCHAR *ppMacAddr,
3505 IN UINT16 ProtoType)
3507 if (pIpAddr == NULL)
3508 return;
3510 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3511 return;
3513 switch (ProtoType)
3515 case ETH_P_IPV6:
3516 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3517 *(*ppMacAddr) = 0x33;
3518 *(*ppMacAddr + 1) = 0x33;
3519 *(*ppMacAddr + 2) = pIpAddr[12];
3520 *(*ppMacAddr + 3) = pIpAddr[13];
3521 *(*ppMacAddr + 4) = pIpAddr[14];
3522 *(*ppMacAddr + 5) = pIpAddr[15];
3523 break;
3525 case ETH_P_IP:
3526 default:
3527 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3528 *(*ppMacAddr) = 0x01;
3529 *(*ppMacAddr + 1) = 0x00;
3530 *(*ppMacAddr + 2) = 0x5e;
3531 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3532 *(*ppMacAddr + 4) = pIpAddr[2];
3533 *(*ppMacAddr + 5) = pIpAddr[3];
3534 break;
3537 return;
3540 BOOLEAN RTMPCheckForHang(
3541 IN NDIS_HANDLE MiniportAdapterContext
3544 VOID RTMPHalt(
3545 IN NDIS_HANDLE MiniportAdapterContext
3549 // Private routines in rtmp_init.c
3551 NDIS_STATUS RTMPAllocAdapterBlock(
3552 IN PVOID handle,
3553 OUT PRTMP_ADAPTER *ppAdapter
3556 NDIS_STATUS RTMPAllocTxRxRingMemory(
3557 IN PRTMP_ADAPTER pAd
3560 NDIS_STATUS RTMPFindAdapter(
3561 IN PRTMP_ADAPTER pAd,
3562 IN NDIS_HANDLE WrapperConfigurationContext
3565 NDIS_STATUS RTMPReadParametersHook(
3566 IN PRTMP_ADAPTER pAd
3569 VOID RTMPFreeAdapter(
3570 IN PRTMP_ADAPTER pAd
3573 NDIS_STATUS NICReadRegParameters(
3574 IN PRTMP_ADAPTER pAd,
3575 IN NDIS_HANDLE WrapperConfigurationContext
3578 #ifdef RT2870
3579 VOID NICInitRT30xxRFRegisters(
3580 IN PRTMP_ADAPTER pAd);
3581 #endif // RT2870 //
3583 VOID NICReadEEPROMParameters(
3584 IN PRTMP_ADAPTER pAd,
3585 IN PUCHAR mac_addr);
3587 VOID NICInitAsicFromEEPROM(
3588 IN PRTMP_ADAPTER pAd);
3590 VOID NICInitTxRxRingAndBacklogQueue(
3591 IN PRTMP_ADAPTER pAd);
3593 NDIS_STATUS NICInitializeAdapter(
3594 IN PRTMP_ADAPTER pAd,
3595 IN BOOLEAN bHardReset);
3597 NDIS_STATUS NICInitializeAsic(
3598 IN PRTMP_ADAPTER pAd,
3599 IN BOOLEAN bHardReset);
3601 VOID NICIssueReset(
3602 IN PRTMP_ADAPTER pAd);
3604 VOID RTMPRingCleanUp(
3605 IN PRTMP_ADAPTER pAd,
3606 IN UCHAR RingType);
3608 VOID RxTest(
3609 IN PRTMP_ADAPTER pAd);
3611 NDIS_STATUS DbgSendPacket(
3612 IN PRTMP_ADAPTER pAd,
3613 IN PNDIS_PACKET pPacket);
3615 VOID UserCfgInit(
3616 IN PRTMP_ADAPTER pAd);
3618 VOID NICResetFromError(
3619 IN PRTMP_ADAPTER pAd);
3621 VOID NICEraseFirmware(
3622 IN PRTMP_ADAPTER pAd);
3624 NDIS_STATUS NICLoadFirmware(
3625 IN PRTMP_ADAPTER pAd);
3627 NDIS_STATUS NICLoadRateSwitchingParams(
3628 IN PRTMP_ADAPTER pAd);
3630 BOOLEAN NICCheckForHang(
3631 IN PRTMP_ADAPTER pAd);
3633 VOID NICUpdateFifoStaCounters(
3634 IN PRTMP_ADAPTER pAd);
3636 VOID NICUpdateRawCounters(
3637 IN PRTMP_ADAPTER pAd);
3639 #if 0
3640 ULONG RTMPEqualMemory(
3641 IN PVOID pSrc1,
3642 IN PVOID pSrc2,
3643 IN ULONG Length);
3644 #endif
3646 ULONG RTMPNotAllZero(
3647 IN PVOID pSrc1,
3648 IN ULONG Length);
3650 VOID RTMPZeroMemory(
3651 IN PVOID pSrc,
3652 IN ULONG Length);
3654 ULONG RTMPCompareMemory(
3655 IN PVOID pSrc1,
3656 IN PVOID pSrc2,
3657 IN ULONG Length);
3659 VOID RTMPMoveMemory(
3660 OUT PVOID pDest,
3661 IN PVOID pSrc,
3662 IN ULONG Length);
3664 VOID AtoH(
3665 char *src,
3666 UCHAR *dest,
3667 int destlen);
3669 UCHAR BtoH(
3670 char ch);
3672 VOID RTMPPatchMacBbpBug(
3673 IN PRTMP_ADAPTER pAd);
3675 VOID RTMPPatchCardBus(
3676 IN PRTMP_ADAPTER pAdapter);
3678 VOID RTMPPatchRalinkCardBus(
3679 IN PRTMP_ADAPTER pAdapter,
3680 IN ULONG Bus);
3682 ULONG RTMPReadCBConfig(
3683 IN ULONG Bus,
3684 IN ULONG Slot,
3685 IN ULONG Func,
3686 IN ULONG Offset);
3688 VOID RTMPWriteCBConfig(
3689 IN ULONG Bus,
3690 IN ULONG Slot,
3691 IN ULONG Func,
3692 IN ULONG Offset,
3693 IN ULONG Value);
3695 VOID RTMPInitTimer(
3696 IN PRTMP_ADAPTER pAd,
3697 IN PRALINK_TIMER_STRUCT pTimer,
3698 IN PVOID pTimerFunc,
3699 IN PVOID pData,
3700 IN BOOLEAN Repeat);
3702 VOID RTMPSetTimer(
3703 IN PRALINK_TIMER_STRUCT pTimer,
3704 IN ULONG Value);
3707 VOID RTMPModTimer(
3708 IN PRALINK_TIMER_STRUCT pTimer,
3709 IN ULONG Value);
3711 VOID RTMPCancelTimer(
3712 IN PRALINK_TIMER_STRUCT pTimer,
3713 OUT BOOLEAN *pCancelled);
3715 VOID RTMPSetLED(
3716 IN PRTMP_ADAPTER pAd,
3717 IN UCHAR Status);
3719 VOID RTMPSetSignalLED(
3720 IN PRTMP_ADAPTER pAd,
3721 IN NDIS_802_11_RSSI Dbm);
3723 VOID RTMPEnableRxTx(
3724 IN PRTMP_ADAPTER pAd);
3727 // prototype in action.c
3729 VOID ActionStateMachineInit(
3730 IN PRTMP_ADAPTER pAd,
3731 IN STATE_MACHINE *S,
3732 OUT STATE_MACHINE_FUNC Trans[]);
3734 VOID MlmeADDBAAction(
3735 IN PRTMP_ADAPTER pAd,
3736 IN MLME_QUEUE_ELEM *Elem);
3738 VOID MlmeDELBAAction(
3739 IN PRTMP_ADAPTER pAd,
3740 IN MLME_QUEUE_ELEM *Elem);
3742 VOID MlmeDLSAction(
3743 IN PRTMP_ADAPTER pAd,
3744 IN MLME_QUEUE_ELEM *Elem);
3746 VOID MlmeInvalidAction(
3747 IN PRTMP_ADAPTER pAd,
3748 IN MLME_QUEUE_ELEM *Elem);
3750 VOID MlmeQOSAction(
3751 IN PRTMP_ADAPTER pAd,
3752 IN MLME_QUEUE_ELEM *Elem);
3754 #ifdef DOT11_N_SUPPORT
3755 VOID PeerAddBAReqAction(
3756 IN PRTMP_ADAPTER pAd,
3757 IN MLME_QUEUE_ELEM *Elem);
3759 VOID PeerAddBARspAction(
3760 IN PRTMP_ADAPTER pAd,
3761 IN MLME_QUEUE_ELEM *Elem);
3763 VOID PeerDelBAAction(
3764 IN PRTMP_ADAPTER pAd,
3765 IN MLME_QUEUE_ELEM *Elem);
3767 VOID PeerBAAction(
3768 IN PRTMP_ADAPTER pAd,
3769 IN MLME_QUEUE_ELEM *Elem);
3770 #endif // DOT11_N_SUPPORT //
3772 VOID SendPSMPAction(
3773 IN PRTMP_ADAPTER pAd,
3774 IN UCHAR Wcid,
3775 IN UCHAR Psmp);
3778 #ifdef DOT11N_DRAFT3
3779 VOID SendBSS2040CoexistMgmtAction(
3780 IN PRTMP_ADAPTER pAd,
3781 IN UCHAR Wcid,
3782 IN UCHAR apidx,
3783 IN UCHAR InfoReq);
3785 VOID SendNotifyBWActionFrame(
3786 IN PRTMP_ADAPTER pAd,
3787 IN UCHAR Wcid,
3788 IN UCHAR apidx);
3790 BOOLEAN ChannelSwitchSanityCheck(
3791 IN PRTMP_ADAPTER pAd,
3792 IN UCHAR Wcid,
3793 IN UCHAR NewChannel,
3794 IN UCHAR Secondary);
3796 VOID ChannelSwitchAction(
3797 IN PRTMP_ADAPTER pAd,
3798 IN UCHAR Wcid,
3799 IN UCHAR Channel,
3800 IN UCHAR Secondary);
3802 ULONG BuildIntolerantChannelRep(
3803 IN PRTMP_ADAPTER pAd,
3804 IN PUCHAR pDest);
3806 VOID Update2040CoexistFrameAndNotify(
3807 IN PRTMP_ADAPTER pAd,
3808 IN UCHAR Wcid,
3809 IN BOOLEAN bAddIntolerantCha);
3811 VOID Send2040CoexistAction(
3812 IN PRTMP_ADAPTER pAd,
3813 IN UCHAR Wcid,
3814 IN BOOLEAN bAddIntolerantCha);
3815 #endif // DOT11N_DRAFT3 //
3817 VOID PeerRMAction(
3818 IN PRTMP_ADAPTER pAd,
3819 IN MLME_QUEUE_ELEM *Elem);
3821 VOID PeerPublicAction(
3822 IN PRTMP_ADAPTER pAd,
3823 IN MLME_QUEUE_ELEM *Elem);
3825 #ifdef CONFIG_STA_SUPPORT
3826 VOID StaPublicAction(
3827 IN PRTMP_ADAPTER pAd,
3828 IN UCHAR Bss2040Coexist);
3829 #endif // CONFIG_STA_SUPPORT //
3832 VOID PeerBSSTranAction(
3833 IN PRTMP_ADAPTER pAd,
3834 IN MLME_QUEUE_ELEM *Elem);
3836 #ifdef DOT11_N_SUPPORT
3837 VOID PeerHTAction(
3838 IN PRTMP_ADAPTER pAd,
3839 IN MLME_QUEUE_ELEM *Elem);
3840 #endif // DOT11_N_SUPPORT //
3842 VOID PeerQOSAction(
3843 IN PRTMP_ADAPTER pAd,
3844 IN MLME_QUEUE_ELEM *Elem);
3846 #ifdef QOS_DLS_SUPPORT
3847 VOID PeerDLSAction(
3848 IN PRTMP_ADAPTER pAd,
3849 IN MLME_QUEUE_ELEM *Elem);
3850 #endif // QOS_DLS_SUPPORT //
3852 #ifdef CONFIG_STA_SUPPORT
3853 #ifdef QOS_DLS_SUPPORT
3854 VOID DlsParmFill(
3855 IN PRTMP_ADAPTER pAd,
3856 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3857 IN PRT_802_11_DLS pDls,
3858 IN USHORT reason);
3859 #endif // QOS_DLS_SUPPORT //
3860 #endif // CONFIG_STA_SUPPORT //
3862 #ifdef DOT11_N_SUPPORT
3863 VOID RECBATimerTimeout(
3864 IN PVOID SystemSpecific1,
3865 IN PVOID FunctionContext,
3866 IN PVOID SystemSpecific2,
3867 IN PVOID SystemSpecific3);
3869 VOID ORIBATimerTimeout(
3870 IN PRTMP_ADAPTER pAd);
3872 VOID SendRefreshBAR(
3873 IN PRTMP_ADAPTER pAd,
3874 IN MAC_TABLE_ENTRY *pEntry);
3875 #endif // DOT11_N_SUPPORT //
3877 VOID ActHeaderInit(
3878 IN PRTMP_ADAPTER pAd,
3879 IN OUT PHEADER_802_11 pHdr80211,
3880 IN PUCHAR Addr1,
3881 IN PUCHAR Addr2,
3882 IN PUCHAR Addr3);
3884 VOID BarHeaderInit(
3885 IN PRTMP_ADAPTER pAd,
3886 IN OUT PFRAME_BAR pCntlBar,
3887 IN PUCHAR pDA,
3888 IN PUCHAR pSA);
3890 VOID InsertActField(
3891 IN PRTMP_ADAPTER pAd,
3892 OUT PUCHAR pFrameBuf,
3893 OUT PULONG pFrameLen,
3894 IN UINT8 Category,
3895 IN UINT8 ActCode);
3897 BOOLEAN QosBADataParse(
3898 IN PRTMP_ADAPTER pAd,
3899 IN BOOLEAN bAMSDU,
3900 IN PUCHAR p8023Header,
3901 IN UCHAR WCID,
3902 IN UCHAR TID,
3903 IN USHORT Sequence,
3904 IN UCHAR DataOffset,
3905 IN USHORT Datasize,
3906 IN UINT CurRxIndex);
3908 #ifdef DOT11_N_SUPPORT
3909 BOOLEAN CntlEnqueueForRecv(
3910 IN PRTMP_ADAPTER pAd,
3911 IN ULONG Wcid,
3912 IN ULONG MsgLen,
3913 IN PFRAME_BA_REQ pMsg);
3915 VOID BaAutoManSwitch(
3916 IN PRTMP_ADAPTER pAd);
3917 #endif // DOT11_N_SUPPORT //
3919 VOID HTIOTCheck(
3920 IN PRTMP_ADAPTER pAd,
3921 IN UCHAR BatRecIdx);
3924 // Private routines in rtmp_data.c
3926 BOOLEAN RTMPHandleRxDoneInterrupt(
3927 IN PRTMP_ADAPTER pAd);
3929 VOID RTMPHandleTxDoneInterrupt(
3930 IN PRTMP_ADAPTER pAd);
3932 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3933 IN PRTMP_ADAPTER pAd,
3934 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3936 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3937 IN PRTMP_ADAPTER pAd);
3939 VOID RTMPHandleTBTTInterrupt(
3940 IN PRTMP_ADAPTER pAd);
3942 VOID RTMPHandlePreTBTTInterrupt(
3943 IN PRTMP_ADAPTER pAd);
3945 void RTMPHandleTwakeupInterrupt(
3946 IN PRTMP_ADAPTER pAd);
3948 VOID RTMPHandleRxCoherentInterrupt(
3949 IN PRTMP_ADAPTER pAd);
3951 BOOLEAN TxFrameIsAggregatible(
3952 IN PRTMP_ADAPTER pAd,
3953 IN PUCHAR pPrevAddr1,
3954 IN PUCHAR p8023hdr);
3956 BOOLEAN PeerIsAggreOn(
3957 IN PRTMP_ADAPTER pAd,
3958 IN ULONG TxRate,
3959 IN PMAC_TABLE_ENTRY pMacEntry);
3961 #if 0 // It's not be used
3962 HTTRANSMIT_SETTING *GetTxMode(
3963 IN PRTMP_ADAPTER pAd,
3964 IN TX_BLK *pTxBlk);
3965 #endif
3967 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3968 IN PNDIS_BUFFER pFirstBuffer,
3969 IN UCHAR DesiredOffset,
3970 OUT PUCHAR pByte0,
3971 OUT PUCHAR pByte1);
3973 NDIS_STATUS STASendPacket(
3974 IN PRTMP_ADAPTER pAd,
3975 IN PNDIS_PACKET pPacket);
3977 VOID STASendPackets(
3978 IN NDIS_HANDLE MiniportAdapterContext,
3979 IN PPNDIS_PACKET ppPacketArray,
3980 IN UINT NumberOfPackets);
3982 VOID RTMPDeQueuePacket(
3983 IN PRTMP_ADAPTER pAd,
3984 IN BOOLEAN bIntContext,
3985 IN UCHAR QueIdx,
3986 IN UCHAR Max_Tx_Packets);
3988 NDIS_STATUS RTMPHardTransmit(
3989 IN PRTMP_ADAPTER pAd,
3990 IN PNDIS_PACKET pPacket,
3991 IN UCHAR QueIdx,
3992 OUT PULONG pFreeTXDLeft);
3994 NDIS_STATUS STAHardTransmit(
3995 IN PRTMP_ADAPTER pAd,
3996 IN TX_BLK *pTxBlk,
3997 IN UCHAR QueIdx);
3999 VOID STARxEAPOLFrameIndicate(
4000 IN PRTMP_ADAPTER pAd,
4001 IN MAC_TABLE_ENTRY *pEntry,
4002 IN RX_BLK *pRxBlk,
4003 IN UCHAR FromWhichBSSID);
4005 NDIS_STATUS RTMPFreeTXDRequest(
4006 IN PRTMP_ADAPTER pAd,
4007 IN UCHAR RingType,
4008 IN UCHAR NumberRequired,
4009 IN PUCHAR FreeNumberIs);
4011 NDIS_STATUS MlmeHardTransmit(
4012 IN PRTMP_ADAPTER pAd,
4013 IN UCHAR QueIdx,
4014 IN PNDIS_PACKET pPacket);
4016 NDIS_STATUS MlmeHardTransmitMgmtRing(
4017 IN PRTMP_ADAPTER pAd,
4018 IN UCHAR QueIdx,
4019 IN PNDIS_PACKET pPacket);
4021 NDIS_STATUS MlmeHardTransmitTxRing(
4022 IN PRTMP_ADAPTER pAd,
4023 IN UCHAR QueIdx,
4024 IN PNDIS_PACKET pPacket);
4026 USHORT RTMPCalcDuration(
4027 IN PRTMP_ADAPTER pAd,
4028 IN UCHAR Rate,
4029 IN ULONG Size);
4031 VOID RTMPWriteTxWI(
4032 IN PRTMP_ADAPTER pAd,
4033 IN PTXWI_STRUC pTxWI,
4034 IN BOOLEAN FRAG,
4035 IN BOOLEAN CFACK,
4036 IN BOOLEAN InsTimestamp,
4037 IN BOOLEAN AMPDU,
4038 IN BOOLEAN Ack,
4039 IN BOOLEAN NSeq, // HW new a sequence.
4040 IN UCHAR BASize,
4041 IN UCHAR WCID,
4042 IN ULONG Length,
4043 IN UCHAR PID,
4044 IN UCHAR TID,
4045 IN UCHAR TxRate,
4046 IN UCHAR Txopmode,
4047 IN BOOLEAN CfAck,
4048 IN HTTRANSMIT_SETTING *pTransmit);
4051 VOID RTMPWriteTxWI_Data(
4052 IN PRTMP_ADAPTER pAd,
4053 IN OUT PTXWI_STRUC pTxWI,
4054 IN TX_BLK *pTxBlk);
4057 VOID RTMPWriteTxWI_Cache(
4058 IN PRTMP_ADAPTER pAd,
4059 IN OUT PTXWI_STRUC pTxWI,
4060 IN TX_BLK *pTxBlk);
4062 VOID RTMPWriteTxDescriptor(
4063 IN PRTMP_ADAPTER pAd,
4064 IN PTXD_STRUC pTxD,
4065 IN BOOLEAN bWIV,
4066 IN UCHAR QSEL);
4068 VOID RTMPSuspendMsduTransmission(
4069 IN PRTMP_ADAPTER pAd);
4071 VOID RTMPResumeMsduTransmission(
4072 IN PRTMP_ADAPTER pAd);
4074 NDIS_STATUS MiniportMMRequest(
4075 IN PRTMP_ADAPTER pAd,
4076 IN UCHAR QueIdx,
4077 IN PUCHAR pData,
4078 IN UINT Length);
4080 NDIS_STATUS MiniportDataMMRequest(
4081 IN PRTMP_ADAPTER pAd,
4082 IN UCHAR QueIdx,
4083 IN PUCHAR pData,
4084 IN UINT Length);
4086 VOID RTMPSendNullFrame(
4087 IN PRTMP_ADAPTER pAd,
4088 IN UCHAR TxRate,
4089 IN BOOLEAN bQosNull);
4091 VOID RTMPSendDisassociationFrame(
4092 IN PRTMP_ADAPTER pAd);
4094 VOID RTMPSendRTSFrame(
4095 IN PRTMP_ADAPTER pAd,
4096 IN PUCHAR pDA,
4097 IN unsigned int NextMpduSize,
4098 IN UCHAR TxRate,
4099 IN UCHAR RTSRate,
4100 IN USHORT AckDuration,
4101 IN UCHAR QueIdx,
4102 IN UCHAR FrameGap);
4105 NDIS_STATUS RTMPApplyPacketFilter(
4106 IN PRTMP_ADAPTER pAd,
4107 IN PRT28XX_RXD_STRUC pRxD,
4108 IN PHEADER_802_11 pHeader);
4110 PQUEUE_HEADER RTMPCheckTxSwQueue(
4111 IN PRTMP_ADAPTER pAd,
4112 OUT UCHAR *QueIdx);
4114 #ifdef CONFIG_STA_SUPPORT
4115 VOID RTMPReportMicError(
4116 IN PRTMP_ADAPTER pAd,
4117 IN PCIPHER_KEY pWpaKey);
4119 VOID WpaMicFailureReportFrame(
4120 IN PRTMP_ADAPTER pAd,
4121 IN MLME_QUEUE_ELEM *Elem);
4123 VOID WpaDisassocApAndBlockAssoc(
4124 IN PVOID SystemSpecific1,
4125 IN PVOID FunctionContext,
4126 IN PVOID SystemSpecific2,
4127 IN PVOID SystemSpecific3);
4128 #endif // CONFIG_STA_SUPPORT //
4130 NDIS_STATUS RTMPCloneNdisPacket(
4131 IN PRTMP_ADAPTER pAd,
4132 IN BOOLEAN pInsAMSDUHdr,
4133 IN PNDIS_PACKET pInPacket,
4134 OUT PNDIS_PACKET *ppOutPacket);
4136 NDIS_STATUS RTMPAllocateNdisPacket(
4137 IN PRTMP_ADAPTER pAd,
4138 IN PNDIS_PACKET *pPacket,
4139 IN PUCHAR pHeader,
4140 IN UINT HeaderLen,
4141 IN PUCHAR pData,
4142 IN UINT DataLen);
4144 VOID RTMPFreeNdisPacket(
4145 IN PRTMP_ADAPTER pAd,
4146 IN PNDIS_PACKET pPacket);
4148 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4149 IN PRTMP_ADAPTER pAd,
4150 IN UCHAR QueIdx);
4152 BOOLEAN RTMPCheckDHCPFrame(
4153 IN PRTMP_ADAPTER pAd,
4154 IN PNDIS_PACKET pPacket);
4157 BOOLEAN RTMPCheckEtherType(
4158 IN PRTMP_ADAPTER pAd,
4159 IN PNDIS_PACKET pPacket);
4162 VOID RTMPCckBbpTuning(
4163 IN PRTMP_ADAPTER pAd,
4164 IN UINT TxRate);
4167 // Private routines in rtmp_wep.c
4169 VOID RTMPInitWepEngine(
4170 IN PRTMP_ADAPTER pAd,
4171 IN PUCHAR pKey,
4172 IN UCHAR KeyId,
4173 IN UCHAR KeyLen,
4174 IN PUCHAR pDest);
4176 VOID RTMPEncryptData(
4177 IN PRTMP_ADAPTER pAd,
4178 IN PUCHAR pSrc,
4179 IN PUCHAR pDest,
4180 IN UINT Len);
4182 BOOLEAN RTMPDecryptData(
4183 IN PRTMP_ADAPTER pAdapter,
4184 IN PUCHAR pSrc,
4185 IN UINT Len,
4186 IN UINT idx);
4188 BOOLEAN RTMPSoftDecryptWEP(
4189 IN PRTMP_ADAPTER pAd,
4190 IN PUCHAR pData,
4191 IN ULONG DataByteCnt,
4192 IN PCIPHER_KEY pGroupKey);
4194 VOID RTMPSetICV(
4195 IN PRTMP_ADAPTER pAd,
4196 IN PUCHAR pDest);
4198 VOID ARCFOUR_INIT(
4199 IN PARCFOURCONTEXT Ctx,
4200 IN PUCHAR pKey,
4201 IN UINT KeyLen);
4203 UCHAR ARCFOUR_BYTE(
4204 IN PARCFOURCONTEXT Ctx);
4206 VOID ARCFOUR_DECRYPT(
4207 IN PARCFOURCONTEXT Ctx,
4208 IN PUCHAR pDest,
4209 IN PUCHAR pSrc,
4210 IN UINT Len);
4212 VOID ARCFOUR_ENCRYPT(
4213 IN PARCFOURCONTEXT Ctx,
4214 IN PUCHAR pDest,
4215 IN PUCHAR pSrc,
4216 IN UINT Len);
4218 VOID WPAARCFOUR_ENCRYPT(
4219 IN PARCFOURCONTEXT Ctx,
4220 IN PUCHAR pDest,
4221 IN PUCHAR pSrc,
4222 IN UINT Len);
4224 UINT RTMP_CALC_FCS32(
4225 IN UINT Fcs,
4226 IN PUCHAR Cp,
4227 IN INT Len);
4230 // MLME routines
4233 // Asic/RF/BBP related functions
4235 VOID AsicAdjustTxPower(
4236 IN PRTMP_ADAPTER pAd);
4238 VOID AsicUpdateProtect(
4239 IN PRTMP_ADAPTER pAd,
4240 IN USHORT OperaionMode,
4241 IN UCHAR SetMask,
4242 IN BOOLEAN bDisableBGProtect,
4243 IN BOOLEAN bNonGFExist);
4245 VOID AsicSwitchChannel(
4246 IN PRTMP_ADAPTER pAd,
4247 IN UCHAR Channel,
4248 IN BOOLEAN bScan);
4250 VOID AsicLockChannel(
4251 IN PRTMP_ADAPTER pAd,
4252 IN UCHAR Channel) ;
4254 VOID AsicAntennaSelect(
4255 IN PRTMP_ADAPTER pAd,
4256 IN UCHAR Channel);
4258 VOID AsicAntennaSetting(
4259 IN PRTMP_ADAPTER pAd,
4260 IN ABGBAND_STATE BandState);
4262 VOID AsicRfTuningExec(
4263 IN PVOID SystemSpecific1,
4264 IN PVOID FunctionContext,
4265 IN PVOID SystemSpecific2,
4266 IN PVOID SystemSpecific3);
4268 #ifdef CONFIG_STA_SUPPORT
4269 VOID AsicSleepThenAutoWakeup(
4270 IN PRTMP_ADAPTER pAd,
4271 IN USHORT TbttNumToNextWakeUp);
4273 VOID AsicForceSleep(
4274 IN PRTMP_ADAPTER pAd);
4276 VOID AsicForceWakeup(
4277 IN PRTMP_ADAPTER pAd,
4278 IN BOOLEAN bFromTx);
4279 #endif // CONFIG_STA_SUPPORT //
4281 VOID AsicSetBssid(
4282 IN PRTMP_ADAPTER pAd,
4283 IN PUCHAR pBssid);
4285 VOID AsicSetMcastWC(
4286 IN PRTMP_ADAPTER pAd);
4288 #if 0 // removed by AlbertY
4289 VOID AsicSetBssidWC(
4290 IN PRTMP_ADAPTER pAd,
4291 IN PUCHAR pBssid);
4292 #endif
4294 VOID AsicDelWcidTab(
4295 IN PRTMP_ADAPTER pAd,
4296 IN UCHAR Wcid);
4298 VOID AsicEnableRDG(
4299 IN PRTMP_ADAPTER pAd);
4301 VOID AsicDisableRDG(
4302 IN PRTMP_ADAPTER pAd);
4304 VOID AsicDisableSync(
4305 IN PRTMP_ADAPTER pAd);
4307 VOID AsicEnableBssSync(
4308 IN PRTMP_ADAPTER pAd);
4310 VOID AsicEnableIbssSync(
4311 IN PRTMP_ADAPTER pAd);
4313 VOID AsicSetEdcaParm(
4314 IN PRTMP_ADAPTER pAd,
4315 IN PEDCA_PARM pEdcaParm);
4317 VOID AsicSetSlotTime(
4318 IN PRTMP_ADAPTER pAd,
4319 IN BOOLEAN bUseShortSlotTime);
4321 #if 0
4322 VOID AsicAddWcidCipherEntry(
4323 IN PRTMP_ADAPTER pAd,
4324 IN UCHAR WCID,
4325 IN UCHAR BssIndex,
4326 IN UCHAR KeyTable,
4327 IN UCHAR CipherAlg,
4328 IN PUCHAR pAddr,
4329 IN CIPHER_KEY *pCipherKey);
4330 #endif
4332 VOID AsicAddSharedKeyEntry(
4333 IN PRTMP_ADAPTER pAd,
4334 IN UCHAR BssIndex,
4335 IN UCHAR KeyIdx,
4336 IN UCHAR CipherAlg,
4337 IN PUCHAR pKey,
4338 IN PUCHAR pTxMic,
4339 IN PUCHAR pRxMic);
4341 VOID AsicRemoveSharedKeyEntry(
4342 IN PRTMP_ADAPTER pAd,
4343 IN UCHAR BssIndex,
4344 IN UCHAR KeyIdx);
4346 VOID AsicUpdateWCIDAttribute(
4347 IN PRTMP_ADAPTER pAd,
4348 IN USHORT WCID,
4349 IN UCHAR BssIndex,
4350 IN UCHAR CipherAlg,
4351 IN BOOLEAN bUsePairewiseKeyTable);
4353 VOID AsicUpdateWCIDIVEIV(
4354 IN PRTMP_ADAPTER pAd,
4355 IN USHORT WCID,
4356 IN ULONG uIV,
4357 IN ULONG uEIV);
4359 VOID AsicUpdateRxWCIDTable(
4360 IN PRTMP_ADAPTER pAd,
4361 IN USHORT WCID,
4362 IN PUCHAR pAddr);
4364 VOID AsicAddKeyEntry(
4365 IN PRTMP_ADAPTER pAd,
4366 IN USHORT WCID,
4367 IN UCHAR BssIndex,
4368 IN UCHAR KeyIdx,
4369 IN PCIPHER_KEY pCipherKey,
4370 IN BOOLEAN bUsePairewiseKeyTable,
4371 IN BOOLEAN bTxKey);
4373 VOID AsicAddPairwiseKeyEntry(
4374 IN PRTMP_ADAPTER pAd,
4375 IN PUCHAR pAddr,
4376 IN UCHAR WCID,
4377 IN CIPHER_KEY *pCipherKey);
4379 VOID AsicRemovePairwiseKeyEntry(
4380 IN PRTMP_ADAPTER pAd,
4381 IN UCHAR BssIdx,
4382 IN UCHAR Wcid);
4384 BOOLEAN AsicSendCommandToMcu(
4385 IN PRTMP_ADAPTER pAd,
4386 IN UCHAR Command,
4387 IN UCHAR Token,
4388 IN UCHAR Arg0,
4389 IN UCHAR Arg1);
4392 VOID MacAddrRandomBssid(
4393 IN PRTMP_ADAPTER pAd,
4394 OUT PUCHAR pAddr);
4396 VOID MgtMacHeaderInit(
4397 IN PRTMP_ADAPTER pAd,
4398 IN OUT PHEADER_802_11 pHdr80211,
4399 IN UCHAR SubType,
4400 IN UCHAR ToDs,
4401 IN PUCHAR pDA,
4402 IN PUCHAR pBssid);
4404 VOID MlmeRadioOff(
4405 IN PRTMP_ADAPTER pAd);
4407 VOID MlmeRadioOn(
4408 IN PRTMP_ADAPTER pAd);
4411 VOID BssTableInit(
4412 IN BSS_TABLE *Tab);
4414 #ifdef DOT11_N_SUPPORT
4415 VOID BATableInit(
4416 IN PRTMP_ADAPTER pAd,
4417 IN BA_TABLE *Tab);
4418 #endif // DOT11_N_SUPPORT //
4420 ULONG BssTableSearch(
4421 IN BSS_TABLE *Tab,
4422 IN PUCHAR pBssid,
4423 IN UCHAR Channel);
4425 ULONG BssSsidTableSearch(
4426 IN BSS_TABLE *Tab,
4427 IN PUCHAR pBssid,
4428 IN PUCHAR pSsid,
4429 IN UCHAR SsidLen,
4430 IN UCHAR Channel);
4432 ULONG BssTableSearchWithSSID(
4433 IN BSS_TABLE *Tab,
4434 IN PUCHAR Bssid,
4435 IN PUCHAR pSsid,
4436 IN UCHAR SsidLen,
4437 IN UCHAR Channel);
4439 VOID BssTableDeleteEntry(
4440 IN OUT PBSS_TABLE pTab,
4441 IN PUCHAR pBssid,
4442 IN UCHAR Channel);
4444 #ifdef DOT11_N_SUPPORT
4445 VOID BATableDeleteORIEntry(
4446 IN OUT PRTMP_ADAPTER pAd,
4447 IN BA_ORI_ENTRY *pBAORIEntry);
4449 VOID BATableDeleteRECEntry(
4450 IN OUT PRTMP_ADAPTER pAd,
4451 IN BA_REC_ENTRY *pBARECEntry);
4453 VOID BATableTearORIEntry(
4454 IN OUT PRTMP_ADAPTER pAd,
4455 IN UCHAR TID,
4456 IN UCHAR Wcid,
4457 IN BOOLEAN bForceDelete,
4458 IN BOOLEAN ALL);
4460 VOID BATableTearRECEntry(
4461 IN OUT PRTMP_ADAPTER pAd,
4462 IN UCHAR TID,
4463 IN UCHAR WCID,
4464 IN BOOLEAN ALL);
4465 #endif // DOT11_N_SUPPORT //
4467 VOID BssEntrySet(
4468 IN PRTMP_ADAPTER pAd,
4469 OUT PBSS_ENTRY pBss,
4470 IN PUCHAR pBssid,
4471 IN CHAR Ssid[],
4472 IN UCHAR SsidLen,
4473 IN UCHAR BssType,
4474 IN USHORT BeaconPeriod,
4475 IN PCF_PARM CfParm,
4476 IN USHORT AtimWin,
4477 IN USHORT CapabilityInfo,
4478 IN UCHAR SupRate[],
4479 IN UCHAR SupRateLen,
4480 IN UCHAR ExtRate[],
4481 IN UCHAR ExtRateLen,
4482 IN HT_CAPABILITY_IE *pHtCapability,
4483 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4484 IN UCHAR HtCapabilityLen,
4485 IN UCHAR AddHtInfoLen,
4486 IN UCHAR NewExtChanOffset,
4487 IN UCHAR Channel,
4488 IN CHAR Rssi,
4489 IN LARGE_INTEGER TimeStamp,
4490 IN UCHAR CkipFlag,
4491 IN PEDCA_PARM pEdcaParm,
4492 IN PQOS_CAPABILITY_PARM pQosCapability,
4493 IN PQBSS_LOAD_PARM pQbssLoad,
4494 IN USHORT LengthVIE,
4495 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4497 ULONG BssTableSetEntry(
4498 IN PRTMP_ADAPTER pAd,
4499 OUT PBSS_TABLE pTab,
4500 IN PUCHAR pBssid,
4501 IN CHAR Ssid[],
4502 IN UCHAR SsidLen,
4503 IN UCHAR BssType,
4504 IN USHORT BeaconPeriod,
4505 IN CF_PARM *CfParm,
4506 IN USHORT AtimWin,
4507 IN USHORT CapabilityInfo,
4508 IN UCHAR SupRate[],
4509 IN UCHAR SupRateLen,
4510 IN UCHAR ExtRate[],
4511 IN UCHAR ExtRateLen,
4512 IN HT_CAPABILITY_IE *pHtCapability,
4513 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4514 IN UCHAR HtCapabilityLen,
4515 IN UCHAR AddHtInfoLen,
4516 IN UCHAR NewExtChanOffset,
4517 IN UCHAR Channel,
4518 IN CHAR Rssi,
4519 IN LARGE_INTEGER TimeStamp,
4520 IN UCHAR CkipFlag,
4521 IN PEDCA_PARM pEdcaParm,
4522 IN PQOS_CAPABILITY_PARM pQosCapability,
4523 IN PQBSS_LOAD_PARM pQbssLoad,
4524 IN USHORT LengthVIE,
4525 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4527 #ifdef DOT11_N_SUPPORT
4528 VOID BATableInsertEntry(
4529 IN PRTMP_ADAPTER pAd,
4530 IN USHORT Aid,
4531 IN USHORT TimeOutValue,
4532 IN USHORT StartingSeq,
4533 IN UCHAR TID,
4534 IN UCHAR BAWinSize,
4535 IN UCHAR OriginatorStatus,
4536 IN BOOLEAN IsRecipient);
4538 #ifdef DOT11N_DRAFT3
4539 VOID Bss2040CoexistTimeOut(
4540 IN PVOID SystemSpecific1,
4541 IN PVOID FunctionContext,
4542 IN PVOID SystemSpecific2,
4543 IN PVOID SystemSpecific3);
4546 VOID TriEventInit(
4547 IN PRTMP_ADAPTER pAd);
4549 ULONG TriEventTableSetEntry(
4550 IN PRTMP_ADAPTER pAd,
4551 OUT TRIGGER_EVENT_TAB *Tab,
4552 IN PUCHAR pBssid,
4553 IN HT_CAPABILITY_IE *pHtCapability,
4554 IN UCHAR HtCapabilityLen,
4555 IN UCHAR RegClass,
4556 IN UCHAR ChannelNo);
4558 VOID TriEventCounterMaintenance(
4559 IN PRTMP_ADAPTER pAd);
4560 #endif // DOT11N_DRAFT3 //
4561 #endif // DOT11_N_SUPPORT //
4563 VOID BssTableSsidSort(
4564 IN PRTMP_ADAPTER pAd,
4565 OUT BSS_TABLE *OutTab,
4566 IN CHAR Ssid[],
4567 IN UCHAR SsidLen);
4569 VOID BssTableSortByRssi(
4570 IN OUT BSS_TABLE *OutTab);
4572 VOID BssCipherParse(
4573 IN OUT PBSS_ENTRY pBss);
4575 NDIS_STATUS MlmeQueueInit(
4576 IN MLME_QUEUE *Queue);
4578 VOID MlmeQueueDestroy(
4579 IN MLME_QUEUE *Queue);
4581 BOOLEAN MlmeEnqueue(
4582 IN PRTMP_ADAPTER pAd,
4583 IN ULONG Machine,
4584 IN ULONG MsgType,
4585 IN ULONG MsgLen,
4586 IN VOID *Msg);
4588 BOOLEAN MlmeEnqueueForRecv(
4589 IN PRTMP_ADAPTER pAd,
4590 IN ULONG Wcid,
4591 IN ULONG TimeStampHigh,
4592 IN ULONG TimeStampLow,
4593 IN UCHAR Rssi0,
4594 IN UCHAR Rssi1,
4595 IN UCHAR Rssi2,
4596 IN ULONG MsgLen,
4597 IN PVOID Msg,
4598 IN UCHAR Signal);
4601 BOOLEAN MlmeDequeue(
4602 IN MLME_QUEUE *Queue,
4603 OUT MLME_QUEUE_ELEM **Elem);
4605 VOID MlmeRestartStateMachine(
4606 IN PRTMP_ADAPTER pAd);
4608 BOOLEAN MlmeQueueEmpty(
4609 IN MLME_QUEUE *Queue);
4611 BOOLEAN MlmeQueueFull(
4612 IN MLME_QUEUE *Queue);
4614 BOOLEAN MsgTypeSubst(
4615 IN PRTMP_ADAPTER pAd,
4616 IN PFRAME_802_11 pFrame,
4617 OUT INT *Machine,
4618 OUT INT *MsgType);
4620 VOID StateMachineInit(
4621 IN STATE_MACHINE *Sm,
4622 IN STATE_MACHINE_FUNC Trans[],
4623 IN ULONG StNr,
4624 IN ULONG MsgNr,
4625 IN STATE_MACHINE_FUNC DefFunc,
4626 IN ULONG InitState,
4627 IN ULONG Base);
4629 VOID StateMachineSetAction(
4630 IN STATE_MACHINE *S,
4631 IN ULONG St,
4632 ULONG Msg,
4633 IN STATE_MACHINE_FUNC F);
4635 VOID StateMachinePerformAction(
4636 IN PRTMP_ADAPTER pAd,
4637 IN STATE_MACHINE *S,
4638 IN MLME_QUEUE_ELEM *Elem);
4640 VOID Drop(
4641 IN PRTMP_ADAPTER pAd,
4642 IN MLME_QUEUE_ELEM *Elem);
4644 VOID AssocStateMachineInit(
4645 IN PRTMP_ADAPTER pAd,
4646 IN STATE_MACHINE *Sm,
4647 OUT STATE_MACHINE_FUNC Trans[]);
4649 VOID ReassocTimeout(
4650 IN PVOID SystemSpecific1,
4651 IN PVOID FunctionContext,
4652 IN PVOID SystemSpecific2,
4653 IN PVOID SystemSpecific3);
4655 VOID AssocTimeout(
4656 IN PVOID SystemSpecific1,
4657 IN PVOID FunctionContext,
4658 IN PVOID SystemSpecific2,
4659 IN PVOID SystemSpecific3);
4661 VOID DisassocTimeout(
4662 IN PVOID SystemSpecific1,
4663 IN PVOID FunctionContext,
4664 IN PVOID SystemSpecific2,
4665 IN PVOID SystemSpecific3);
4667 //----------------------------------------------
4668 VOID MlmeDisassocReqAction(
4669 IN PRTMP_ADAPTER pAd,
4670 IN MLME_QUEUE_ELEM *Elem);
4672 VOID MlmeAssocReqAction(
4673 IN PRTMP_ADAPTER pAd,
4674 IN MLME_QUEUE_ELEM *Elem);
4676 VOID MlmeReassocReqAction(
4677 IN PRTMP_ADAPTER pAd,
4678 IN MLME_QUEUE_ELEM *Elem);
4680 VOID MlmeDisassocReqAction(
4681 IN PRTMP_ADAPTER pAd,
4682 IN MLME_QUEUE_ELEM *Elem);
4684 VOID PeerAssocRspAction(
4685 IN PRTMP_ADAPTER pAd,
4686 IN MLME_QUEUE_ELEM *Elem);
4688 VOID PeerReassocRspAction(
4689 IN PRTMP_ADAPTER pAd,
4690 IN MLME_QUEUE_ELEM *Elem);
4692 VOID PeerDisassocAction(
4693 IN PRTMP_ADAPTER pAd,
4694 IN MLME_QUEUE_ELEM *Elem);
4696 VOID DisassocTimeoutAction(
4697 IN PRTMP_ADAPTER pAd,
4698 IN MLME_QUEUE_ELEM *Elem);
4700 VOID AssocTimeoutAction(
4701 IN PRTMP_ADAPTER pAd,
4702 IN MLME_QUEUE_ELEM *Elem);
4704 VOID ReassocTimeoutAction(
4705 IN PRTMP_ADAPTER pAd,
4706 IN MLME_QUEUE_ELEM *Elem);
4708 VOID Cls3errAction(
4709 IN PRTMP_ADAPTER pAd,
4710 IN PUCHAR pAddr);
4712 VOID SwitchBetweenWepAndCkip(
4713 IN PRTMP_ADAPTER pAd);
4715 VOID InvalidStateWhenAssoc(
4716 IN PRTMP_ADAPTER pAd,
4717 IN MLME_QUEUE_ELEM *Elem);
4719 VOID InvalidStateWhenReassoc(
4720 IN PRTMP_ADAPTER pAd,
4721 IN MLME_QUEUE_ELEM *Elem);
4723 VOID InvalidStateWhenDisassociate(
4724 IN PRTMP_ADAPTER pAd,
4725 IN MLME_QUEUE_ELEM *Elem);
4727 #ifdef RT2870
4728 VOID MlmeCntlConfirm(
4729 IN PRTMP_ADAPTER pAd,
4730 IN ULONG MsgType,
4731 IN USHORT Msg);
4732 #endif // RT2870 //
4734 VOID ComposePsPoll(
4735 IN PRTMP_ADAPTER pAd);
4737 VOID ComposeNullFrame(
4738 IN PRTMP_ADAPTER pAd);
4740 VOID AssocPostProc(
4741 IN PRTMP_ADAPTER pAd,
4742 IN PUCHAR pAddr2,
4743 IN USHORT CapabilityInfo,
4744 IN USHORT Aid,
4745 IN UCHAR SupRate[],
4746 IN UCHAR SupRateLen,
4747 IN UCHAR ExtRate[],
4748 IN UCHAR ExtRateLen,
4749 IN PEDCA_PARM pEdcaParm,
4750 IN HT_CAPABILITY_IE *pHtCapability,
4751 IN UCHAR HtCapabilityLen,
4752 IN ADD_HT_INFO_IE *pAddHtInfo);
4754 VOID AuthStateMachineInit(
4755 IN PRTMP_ADAPTER pAd,
4756 IN PSTATE_MACHINE sm,
4757 OUT STATE_MACHINE_FUNC Trans[]);
4759 VOID AuthTimeout(
4760 IN PVOID SystemSpecific1,
4761 IN PVOID FunctionContext,
4762 IN PVOID SystemSpecific2,
4763 IN PVOID SystemSpecific3);
4765 VOID MlmeAuthReqAction(
4766 IN PRTMP_ADAPTER pAd,
4767 IN MLME_QUEUE_ELEM *Elem);
4769 VOID PeerAuthRspAtSeq2Action(
4770 IN PRTMP_ADAPTER pAd,
4771 IN MLME_QUEUE_ELEM *Elem);
4773 VOID PeerAuthRspAtSeq4Action(
4774 IN PRTMP_ADAPTER pAd,
4775 IN MLME_QUEUE_ELEM *Elem);
4777 VOID AuthTimeoutAction(
4778 IN PRTMP_ADAPTER pAd,
4779 IN MLME_QUEUE_ELEM *Elem);
4781 VOID Cls2errAction(
4782 IN PRTMP_ADAPTER pAd,
4783 IN PUCHAR pAddr);
4785 VOID MlmeDeauthReqAction(
4786 IN PRTMP_ADAPTER pAd,
4787 IN MLME_QUEUE_ELEM *Elem);
4789 VOID InvalidStateWhenAuth(
4790 IN PRTMP_ADAPTER pAd,
4791 IN MLME_QUEUE_ELEM *Elem);
4793 //=============================================
4795 VOID AuthRspStateMachineInit(
4796 IN PRTMP_ADAPTER pAd,
4797 IN PSTATE_MACHINE Sm,
4798 IN STATE_MACHINE_FUNC Trans[]);
4800 VOID PeerDeauthAction(
4801 IN PRTMP_ADAPTER pAd,
4802 IN MLME_QUEUE_ELEM *Elem);
4804 VOID PeerAuthSimpleRspGenAndSend(
4805 IN PRTMP_ADAPTER pAd,
4806 IN PHEADER_802_11 pHdr80211,
4807 IN USHORT Alg,
4808 IN USHORT Seq,
4809 IN USHORT Reason,
4810 IN USHORT Status);
4813 // Private routines in dls.c
4816 #ifdef CONFIG_STA_SUPPORT
4817 #ifdef QOS_DLS_SUPPORT
4818 void DlsStateMachineInit(
4819 IN PRTMP_ADAPTER pAd,
4820 IN STATE_MACHINE *Sm,
4821 OUT STATE_MACHINE_FUNC Trans[]);
4823 VOID MlmeDlsReqAction(
4824 IN PRTMP_ADAPTER pAd,
4825 IN MLME_QUEUE_ELEM *Elem);
4827 VOID PeerDlsReqAction(
4828 IN PRTMP_ADAPTER pAd,
4829 IN MLME_QUEUE_ELEM *Elem);
4831 VOID PeerDlsRspAction(
4832 IN PRTMP_ADAPTER pAd,
4833 IN MLME_QUEUE_ELEM *Elem);
4835 VOID MlmeDlsTearDownAction(
4836 IN PRTMP_ADAPTER pAd,
4837 IN MLME_QUEUE_ELEM *Elem);
4839 VOID PeerDlsTearDownAction(
4840 IN PRTMP_ADAPTER pAd,
4841 IN MLME_QUEUE_ELEM *Elem);
4843 VOID RTMPCheckDLSTimeOut(
4844 IN PRTMP_ADAPTER pAd);
4846 BOOLEAN RTMPRcvFrameDLSCheck(
4847 IN PRTMP_ADAPTER pAd,
4848 IN PHEADER_802_11 pHeader,
4849 IN ULONG Len,
4850 IN PRT28XX_RXD_STRUC pRxD);
4852 INT RTMPCheckDLSFrame(
4853 IN PRTMP_ADAPTER pAd,
4854 IN PUCHAR pDA);
4856 VOID RTMPSendDLSTearDownFrame(
4857 IN PRTMP_ADAPTER pAd,
4858 IN PUCHAR pDA);
4860 NDIS_STATUS RTMPSendSTAKeyRequest(
4861 IN PRTMP_ADAPTER pAd,
4862 IN PUCHAR pDA);
4864 NDIS_STATUS RTMPSendSTAKeyHandShake(
4865 IN PRTMP_ADAPTER pAd,
4866 IN PUCHAR pDA);
4868 VOID DlsTimeoutAction(
4869 IN PVOID SystemSpecific1,
4870 IN PVOID FunctionContext,
4871 IN PVOID SystemSpecific2,
4872 IN PVOID SystemSpecific3);
4874 BOOLEAN MlmeDlsReqSanity(
4875 IN PRTMP_ADAPTER pAd,
4876 IN VOID *Msg,
4877 IN ULONG MsgLen,
4878 OUT PRT_802_11_DLS *pDLS,
4879 OUT PUSHORT pReason);
4881 INT Set_DlsEntryInfo_Display_Proc(
4882 IN PRTMP_ADAPTER pAd,
4883 IN PUCHAR arg);
4885 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4886 IN PRTMP_ADAPTER pAd,
4887 IN PUCHAR pAddr,
4888 IN UINT DlsEntryIdx);
4890 BOOLEAN MacTableDeleteDlsEntry(
4891 IN PRTMP_ADAPTER pAd,
4892 IN USHORT wcid,
4893 IN PUCHAR pAddr);
4895 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4896 IN PRTMP_ADAPTER pAd,
4897 IN PUCHAR pAddr,
4898 IN BOOLEAN bResetIdelCount);
4900 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4901 IN PRTMP_ADAPTER pAd,
4902 IN UCHAR wcid,
4903 IN PUCHAR pAddr,
4904 IN BOOLEAN bResetIdelCount);
4906 INT Set_DlsAddEntry_Proc(
4907 IN PRTMP_ADAPTER pAd,
4908 IN PUCHAR arg);
4910 INT Set_DlsTearDownEntry_Proc(
4911 IN PRTMP_ADAPTER pAd,
4912 IN PUCHAR arg);
4913 #endif // QOS_DLS_SUPPORT //
4914 #endif // CONFIG_STA_SUPPORT //
4916 #ifdef QOS_DLS_SUPPORT
4917 BOOLEAN PeerDlsReqSanity(
4918 IN PRTMP_ADAPTER pAd,
4919 IN VOID *Msg,
4920 IN ULONG MsgLen,
4921 OUT PUCHAR pDA,
4922 OUT PUCHAR pSA,
4923 OUT USHORT *pCapabilityInfo,
4924 OUT USHORT *pDlsTimeout,
4925 OUT UCHAR *pRatesLen,
4926 OUT UCHAR Rates[],
4927 OUT UCHAR *pHtCapabilityLen,
4928 OUT HT_CAPABILITY_IE *pHtCapability);
4930 BOOLEAN PeerDlsRspSanity(
4931 IN PRTMP_ADAPTER pAd,
4932 IN VOID *Msg,
4933 IN ULONG MsgLen,
4934 OUT PUCHAR pDA,
4935 OUT PUCHAR pSA,
4936 OUT USHORT *pCapabilityInfo,
4937 OUT USHORT *pStatus,
4938 OUT UCHAR *pRatesLen,
4939 OUT UCHAR Rates[],
4940 OUT UCHAR *pHtCapabilityLen,
4941 OUT HT_CAPABILITY_IE *pHtCapability);
4943 BOOLEAN PeerDlsTearDownSanity(
4944 IN PRTMP_ADAPTER pAd,
4945 IN VOID *Msg,
4946 IN ULONG MsgLen,
4947 OUT PUCHAR pDA,
4948 OUT PUCHAR pSA,
4949 OUT USHORT *pReason);
4950 #endif // QOS_DLS_SUPPORT //
4952 //========================================
4954 VOID SyncStateMachineInit(
4955 IN PRTMP_ADAPTER pAd,
4956 IN STATE_MACHINE *Sm,
4957 OUT STATE_MACHINE_FUNC Trans[]);
4959 VOID BeaconTimeout(
4960 IN PVOID SystemSpecific1,
4961 IN PVOID FunctionContext,
4962 IN PVOID SystemSpecific2,
4963 IN PVOID SystemSpecific3);
4965 VOID ScanTimeout(
4966 IN PVOID SystemSpecific1,
4967 IN PVOID FunctionContext,
4968 IN PVOID SystemSpecific2,
4969 IN PVOID SystemSpecific3);
4971 VOID MlmeScanReqAction(
4972 IN PRTMP_ADAPTER pAd,
4973 IN MLME_QUEUE_ELEM *Elem);
4975 VOID InvalidStateWhenScan(
4976 IN PRTMP_ADAPTER pAd,
4977 IN MLME_QUEUE_ELEM *Elem);
4979 VOID InvalidStateWhenJoin(
4980 IN PRTMP_ADAPTER pAd,
4981 IN MLME_QUEUE_ELEM *Elem);
4983 VOID InvalidStateWhenStart(
4984 IN PRTMP_ADAPTER pAd,
4985 IN MLME_QUEUE_ELEM *Elem);
4987 VOID PeerBeacon(
4988 IN PRTMP_ADAPTER pAd,
4989 IN MLME_QUEUE_ELEM *Elem);
4991 VOID EnqueueProbeRequest(
4992 IN PRTMP_ADAPTER pAd);
4994 BOOLEAN ScanRunning(
4995 IN PRTMP_ADAPTER pAd);
4996 //=========================================
4998 VOID MlmeCntlInit(
4999 IN PRTMP_ADAPTER pAd,
5000 IN STATE_MACHINE *S,
5001 OUT STATE_MACHINE_FUNC Trans[]);
5003 VOID MlmeCntlMachinePerformAction(
5004 IN PRTMP_ADAPTER pAd,
5005 IN STATE_MACHINE *S,
5006 IN MLME_QUEUE_ELEM *Elem);
5008 VOID CntlIdleProc(
5009 IN PRTMP_ADAPTER pAd,
5010 IN MLME_QUEUE_ELEM *Elem);
5012 VOID CntlOidScanProc(
5013 IN PRTMP_ADAPTER pAd,
5014 IN MLME_QUEUE_ELEM *Elem);
5016 VOID CntlOidSsidProc(
5017 IN PRTMP_ADAPTER pAd,
5018 IN MLME_QUEUE_ELEM * Elem);
5020 VOID CntlOidRTBssidProc(
5021 IN PRTMP_ADAPTER pAd,
5022 IN MLME_QUEUE_ELEM * Elem);
5024 VOID CntlMlmeRoamingProc(
5025 IN PRTMP_ADAPTER pAd,
5026 IN MLME_QUEUE_ELEM * Elem);
5028 VOID CntlWaitDisassocProc(
5029 IN PRTMP_ADAPTER pAd,
5030 IN MLME_QUEUE_ELEM *Elem);
5032 VOID CntlWaitJoinProc(
5033 IN PRTMP_ADAPTER pAd,
5034 IN MLME_QUEUE_ELEM *Elem);
5036 VOID CntlWaitReassocProc(
5037 IN PRTMP_ADAPTER pAd,
5038 IN MLME_QUEUE_ELEM *Elem);
5040 VOID CntlWaitStartProc(
5041 IN PRTMP_ADAPTER pAd,
5042 IN MLME_QUEUE_ELEM *Elem);
5044 VOID CntlWaitAuthProc(
5045 IN PRTMP_ADAPTER pAd,
5046 IN MLME_QUEUE_ELEM *Elem);
5048 VOID CntlWaitAuthProc2(
5049 IN PRTMP_ADAPTER pAd,
5050 IN MLME_QUEUE_ELEM *Elem);
5052 VOID CntlWaitAssocProc(
5053 IN PRTMP_ADAPTER pAd,
5054 IN MLME_QUEUE_ELEM *Elem);
5056 #ifdef QOS_DLS_SUPPORT
5057 VOID CntlOidDLSSetupProc(
5058 IN PRTMP_ADAPTER pAd,
5059 IN MLME_QUEUE_ELEM *Elem);
5060 #endif // QOS_DLS_SUPPORT //
5062 VOID LinkUp(
5063 IN PRTMP_ADAPTER pAd,
5064 IN UCHAR BssType);
5066 VOID LinkDown(
5067 IN PRTMP_ADAPTER pAd,
5068 IN BOOLEAN IsReqFromAP);
5070 VOID IterateOnBssTab(
5071 IN PRTMP_ADAPTER pAd);
5073 VOID IterateOnBssTab2(
5074 IN PRTMP_ADAPTER pAd);;
5076 VOID JoinParmFill(
5077 IN PRTMP_ADAPTER pAd,
5078 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
5079 IN ULONG BssIdx);
5081 VOID AssocParmFill(
5082 IN PRTMP_ADAPTER pAd,
5083 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
5084 IN PUCHAR pAddr,
5085 IN USHORT CapabilityInfo,
5086 IN ULONG Timeout,
5087 IN USHORT ListenIntv);
5089 VOID ScanParmFill(
5090 IN PRTMP_ADAPTER pAd,
5091 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5092 IN CHAR Ssid[],
5093 IN UCHAR SsidLen,
5094 IN UCHAR BssType,
5095 IN UCHAR ScanType);
5097 VOID DisassocParmFill(
5098 IN PRTMP_ADAPTER pAd,
5099 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5100 IN PUCHAR pAddr,
5101 IN USHORT Reason);
5103 VOID StartParmFill(
5104 IN PRTMP_ADAPTER pAd,
5105 IN OUT MLME_START_REQ_STRUCT *StartReq,
5106 IN CHAR Ssid[],
5107 IN UCHAR SsidLen);
5109 VOID AuthParmFill(
5110 IN PRTMP_ADAPTER pAd,
5111 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5112 IN PUCHAR pAddr,
5113 IN USHORT Alg);
5115 VOID EnqueuePsPoll(
5116 IN PRTMP_ADAPTER pAd);
5118 VOID EnqueueBeaconFrame(
5119 IN PRTMP_ADAPTER pAd);
5121 VOID MlmeJoinReqAction(
5122 IN PRTMP_ADAPTER pAd,
5123 IN MLME_QUEUE_ELEM *Elem);
5125 VOID MlmeScanReqAction(
5126 IN PRTMP_ADAPTER pAd,
5127 IN MLME_QUEUE_ELEM *Elem);
5129 VOID MlmeStartReqAction(
5130 IN PRTMP_ADAPTER pAd,
5131 IN MLME_QUEUE_ELEM *Elem);
5133 VOID ScanTimeoutAction(
5134 IN PRTMP_ADAPTER pAd,
5135 IN MLME_QUEUE_ELEM *Elem);
5137 VOID BeaconTimeoutAtJoinAction(
5138 IN PRTMP_ADAPTER pAd,
5139 IN MLME_QUEUE_ELEM *Elem);
5141 VOID PeerBeaconAtScanAction(
5142 IN PRTMP_ADAPTER pAd,
5143 IN MLME_QUEUE_ELEM *Elem);
5145 VOID PeerBeaconAtJoinAction(
5146 IN PRTMP_ADAPTER pAd,
5147 IN MLME_QUEUE_ELEM *Elem);
5149 VOID PeerBeacon(
5150 IN PRTMP_ADAPTER pAd,
5151 IN MLME_QUEUE_ELEM *Elem);
5153 VOID PeerProbeReqAction(
5154 IN PRTMP_ADAPTER pAd,
5155 IN MLME_QUEUE_ELEM *Elem);
5157 VOID ScanNextChannel(
5158 IN PRTMP_ADAPTER pAd);
5160 ULONG MakeIbssBeacon(
5161 IN PRTMP_ADAPTER pAd);
5163 VOID CCXAdjacentAPReport(
5164 IN PRTMP_ADAPTER pAd);
5166 BOOLEAN MlmeScanReqSanity(
5167 IN PRTMP_ADAPTER pAd,
5168 IN VOID *Msg,
5169 IN ULONG MsgLen,
5170 OUT UCHAR *BssType,
5171 OUT CHAR ssid[],
5172 OUT UCHAR *SsidLen,
5173 OUT UCHAR *ScanType);
5175 BOOLEAN PeerBeaconAndProbeRspSanity(
5176 IN PRTMP_ADAPTER pAd,
5177 IN VOID *Msg,
5178 IN ULONG MsgLen,
5179 IN UCHAR MsgChannel,
5180 OUT PUCHAR pAddr2,
5181 OUT PUCHAR pBssid,
5182 OUT CHAR Ssid[],
5183 OUT UCHAR *pSsidLen,
5184 OUT UCHAR *pBssType,
5185 OUT USHORT *pBeaconPeriod,
5186 OUT UCHAR *pChannel,
5187 OUT UCHAR *pNewChannel,
5188 OUT LARGE_INTEGER *pTimestamp,
5189 OUT CF_PARM *pCfParm,
5190 OUT USHORT *pAtimWin,
5191 OUT USHORT *pCapabilityInfo,
5192 OUT UCHAR *pErp,
5193 OUT UCHAR *pDtimCount,
5194 OUT UCHAR *pDtimPeriod,
5195 OUT UCHAR *pBcastFlag,
5196 OUT UCHAR *pMessageToMe,
5197 OUT UCHAR SupRate[],
5198 OUT UCHAR *pSupRateLen,
5199 OUT UCHAR ExtRate[],
5200 OUT UCHAR *pExtRateLen,
5201 OUT UCHAR *pCkipFlag,
5202 OUT UCHAR *pAironetCellPowerLimit,
5203 OUT PEDCA_PARM pEdcaParm,
5204 OUT PQBSS_LOAD_PARM pQbssLoad,
5205 OUT PQOS_CAPABILITY_PARM pQosCapability,
5206 OUT ULONG *pRalinkIe,
5207 OUT UCHAR *pHtCapabilityLen,
5208 #ifdef CONFIG_STA_SUPPORT
5209 OUT UCHAR *pPreNHtCapabilityLen,
5210 #endif // CONFIG_STA_SUPPORT //
5211 OUT HT_CAPABILITY_IE *pHtCapability,
5212 OUT UCHAR *AddHtInfoLen,
5213 OUT ADD_HT_INFO_IE *AddHtInfo,
5214 OUT UCHAR *NewExtChannel,
5215 OUT USHORT *LengthVIE,
5216 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5218 BOOLEAN PeerAddBAReqActionSanity(
5219 IN PRTMP_ADAPTER pAd,
5220 IN VOID *pMsg,
5221 IN ULONG MsgLen,
5222 OUT PUCHAR pAddr2);
5224 BOOLEAN PeerAddBARspActionSanity(
5225 IN PRTMP_ADAPTER pAd,
5226 IN VOID *pMsg,
5227 IN ULONG MsgLen);
5229 BOOLEAN PeerDelBAActionSanity(
5230 IN PRTMP_ADAPTER pAd,
5231 IN UCHAR Wcid,
5232 IN VOID *pMsg,
5233 IN ULONG MsgLen);
5235 BOOLEAN MlmeAssocReqSanity(
5236 IN PRTMP_ADAPTER pAd,
5237 IN VOID *Msg,
5238 IN ULONG MsgLen,
5239 OUT PUCHAR pApAddr,
5240 OUT USHORT *CapabilityInfo,
5241 OUT ULONG *Timeout,
5242 OUT USHORT *ListenIntv);
5244 BOOLEAN MlmeAuthReqSanity(
5245 IN PRTMP_ADAPTER pAd,
5246 IN VOID *Msg,
5247 IN ULONG MsgLen,
5248 OUT PUCHAR pAddr,
5249 OUT ULONG *Timeout,
5250 OUT USHORT *Alg);
5252 BOOLEAN MlmeStartReqSanity(
5253 IN PRTMP_ADAPTER pAd,
5254 IN VOID *Msg,
5255 IN ULONG MsgLen,
5256 OUT CHAR Ssid[],
5257 OUT UCHAR *Ssidlen);
5259 BOOLEAN PeerAuthSanity(
5260 IN PRTMP_ADAPTER pAd,
5261 IN VOID *Msg,
5262 IN ULONG MsgLen,
5263 OUT PUCHAR pAddr,
5264 OUT USHORT *Alg,
5265 OUT USHORT *Seq,
5266 OUT USHORT *Status,
5267 OUT CHAR ChlgText[]);
5269 BOOLEAN PeerAssocRspSanity(
5270 IN PRTMP_ADAPTER pAd,
5271 IN VOID *pMsg,
5272 IN ULONG MsgLen,
5273 OUT PUCHAR pAddr2,
5274 OUT USHORT *pCapabilityInfo,
5275 OUT USHORT *pStatus,
5276 OUT USHORT *pAid,
5277 OUT UCHAR SupRate[],
5278 OUT UCHAR *pSupRateLen,
5279 OUT UCHAR ExtRate[],
5280 OUT UCHAR *pExtRateLen,
5281 OUT HT_CAPABILITY_IE *pHtCapability,
5282 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5283 OUT UCHAR *pHtCapabilityLen,
5284 OUT UCHAR *pAddHtInfoLen,
5285 OUT UCHAR *pNewExtChannelOffset,
5286 OUT PEDCA_PARM pEdcaParm,
5287 OUT UCHAR *pCkipFlag);
5289 BOOLEAN PeerDisassocSanity(
5290 IN PRTMP_ADAPTER pAd,
5291 IN VOID *Msg,
5292 IN ULONG MsgLen,
5293 OUT PUCHAR pAddr2,
5294 OUT USHORT *Reason);
5296 BOOLEAN PeerWpaMessageSanity(
5297 IN PRTMP_ADAPTER pAd,
5298 IN PEAPOL_PACKET pMsg,
5299 IN ULONG MsgLen,
5300 IN UCHAR MsgType,
5301 IN MAC_TABLE_ENTRY *pEntry);
5303 BOOLEAN PeerDeauthSanity(
5304 IN PRTMP_ADAPTER pAd,
5305 IN VOID *Msg,
5306 IN ULONG MsgLen,
5307 OUT PUCHAR pAddr2,
5308 OUT USHORT *Reason);
5310 BOOLEAN PeerProbeReqSanity(
5311 IN PRTMP_ADAPTER pAd,
5312 IN VOID *Msg,
5313 IN ULONG MsgLen,
5314 OUT PUCHAR pAddr2,
5315 OUT CHAR Ssid[],
5316 OUT UCHAR *pSsidLen);
5318 BOOLEAN GetTimBit(
5319 IN CHAR *Ptr,
5320 IN USHORT Aid,
5321 OUT UCHAR *TimLen,
5322 OUT UCHAR *BcastFlag,
5323 OUT UCHAR *DtimCount,
5324 OUT UCHAR *DtimPeriod,
5325 OUT UCHAR *MessageToMe);
5327 UCHAR ChannelSanity(
5328 IN PRTMP_ADAPTER pAd,
5329 IN UCHAR channel);
5331 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5332 IN PBSS_ENTRY pBss);
5334 #if 0 // It's omitted
5335 NDIS_STATUS RTMPWepKeySanity(
5336 IN PRTMP_ADAPTER pAdapter,
5337 IN PVOID pBuf);
5338 #endif
5340 BOOLEAN MlmeDelBAReqSanity(
5341 IN PRTMP_ADAPTER pAd,
5342 IN VOID *Msg,
5343 IN ULONG MsgLen);
5345 BOOLEAN MlmeAddBAReqSanity(
5346 IN PRTMP_ADAPTER pAd,
5347 IN VOID *Msg,
5348 IN ULONG MsgLen,
5349 OUT PUCHAR pAddr2);
5351 ULONG MakeOutgoingFrame(
5352 OUT CHAR *Buffer,
5353 OUT ULONG *Length, ...);
5355 VOID LfsrInit(
5356 IN PRTMP_ADAPTER pAd,
5357 IN ULONG Seed);
5359 UCHAR RandomByte(
5360 IN PRTMP_ADAPTER pAd);
5362 VOID AsicUpdateAutoFallBackTable(
5363 IN PRTMP_ADAPTER pAd,
5364 IN PUCHAR pTxRate);
5366 VOID MlmePeriodicExec(
5367 IN PVOID SystemSpecific1,
5368 IN PVOID FunctionContext,
5369 IN PVOID SystemSpecific2,
5370 IN PVOID SystemSpecific3);
5372 VOID LinkDownExec(
5373 IN PVOID SystemSpecific1,
5374 IN PVOID FunctionContext,
5375 IN PVOID SystemSpecific2,
5376 IN PVOID SystemSpecific3);
5378 VOID LinkUpExec(
5379 IN PVOID SystemSpecific1,
5380 IN PVOID FunctionContext,
5381 IN PVOID SystemSpecific2,
5382 IN PVOID SystemSpecific3);
5384 VOID STAMlmePeriodicExec(
5385 PRTMP_ADAPTER pAd);
5387 VOID MlmeAutoScan(
5388 IN PRTMP_ADAPTER pAd);
5390 VOID MlmeAutoReconnectLastSSID(
5391 IN PRTMP_ADAPTER pAd);
5393 BOOLEAN MlmeValidateSSID(
5394 IN PUCHAR pSsid,
5395 IN UCHAR SsidLen);
5397 VOID MlmeCheckForRoaming(
5398 IN PRTMP_ADAPTER pAd,
5399 IN ULONG Now32);
5401 VOID MlmeCheckForFastRoaming(
5402 IN PRTMP_ADAPTER pAd,
5403 IN ULONG Now);
5405 VOID MlmeDynamicTxRateSwitching(
5406 IN PRTMP_ADAPTER pAd);
5408 VOID MlmeSetTxRate(
5409 IN PRTMP_ADAPTER pAd,
5410 IN PMAC_TABLE_ENTRY pEntry,
5411 IN PRTMP_TX_RATE_SWITCH pTxRate);
5413 VOID MlmeSelectTxRateTable(
5414 IN PRTMP_ADAPTER pAd,
5415 IN PMAC_TABLE_ENTRY pEntry,
5416 IN PUCHAR *ppTable,
5417 IN PUCHAR pTableSize,
5418 IN PUCHAR pInitTxRateIdx);
5420 VOID MlmeCalculateChannelQuality(
5421 IN PRTMP_ADAPTER pAd,
5422 IN ULONG Now);
5424 VOID MlmeCheckPsmChange(
5425 IN PRTMP_ADAPTER pAd,
5426 IN ULONG Now32);
5428 VOID MlmeSetPsmBit(
5429 IN PRTMP_ADAPTER pAd,
5430 IN USHORT psm);
5432 VOID MlmeSetTxPreamble(
5433 IN PRTMP_ADAPTER pAd,
5434 IN USHORT TxPreamble);
5436 VOID UpdateBasicRateBitmap(
5437 IN PRTMP_ADAPTER pAd);
5439 VOID MlmeUpdateTxRates(
5440 IN PRTMP_ADAPTER pAd,
5441 IN BOOLEAN bLinkUp,
5442 IN UCHAR apidx);
5444 #ifdef DOT11_N_SUPPORT
5445 VOID MlmeUpdateHtTxRates(
5446 IN PRTMP_ADAPTER pAd,
5447 IN UCHAR apidx);
5448 #endif // DOT11_N_SUPPORT //
5450 VOID RTMPCheckRates(
5451 IN PRTMP_ADAPTER pAd,
5452 IN OUT UCHAR SupRate[],
5453 IN OUT UCHAR *SupRateLen);
5455 #ifdef CONFIG_STA_SUPPORT
5456 BOOLEAN RTMPCheckChannel(
5457 IN PRTMP_ADAPTER pAd,
5458 IN UCHAR CentralChannel,
5459 IN UCHAR Channel);
5460 #endif // CONFIG_STA_SUPPORT //
5462 BOOLEAN RTMPCheckHt(
5463 IN PRTMP_ADAPTER pAd,
5464 IN UCHAR Wcid,
5465 IN OUT HT_CAPABILITY_IE *pHtCapability,
5466 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5468 VOID StaQuickResponeForRateUpExec(
5469 IN PVOID SystemSpecific1,
5470 IN PVOID FunctionContext,
5471 IN PVOID SystemSpecific2,
5472 IN PVOID SystemSpecific3);
5474 VOID AsicBbpTuning1(
5475 IN PRTMP_ADAPTER pAd);
5477 VOID AsicBbpTuning2(
5478 IN PRTMP_ADAPTER pAd);
5480 VOID RTMPUpdateMlmeRate(
5481 IN PRTMP_ADAPTER pAd);
5483 CHAR RTMPMaxRssi(
5484 IN PRTMP_ADAPTER pAd,
5485 IN CHAR Rssi0,
5486 IN CHAR Rssi1,
5487 IN CHAR Rssi2);
5489 VOID AsicEvaluateRxAnt(
5490 IN PRTMP_ADAPTER pAd);
5492 VOID AsicRxAntEvalTimeout(
5493 IN PVOID SystemSpecific1,
5494 IN PVOID FunctionContext,
5495 IN PVOID SystemSpecific2,
5496 IN PVOID SystemSpecific3);
5498 VOID APSDPeriodicExec(
5499 IN PVOID SystemSpecific1,
5500 IN PVOID FunctionContext,
5501 IN PVOID SystemSpecific2,
5502 IN PVOID SystemSpecific3);
5504 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5505 IN PRTMP_ADAPTER pAd,
5506 IN PMAC_TABLE_ENTRY pEntry);
5508 UCHAR RTMPStaFixedTxMode(
5509 IN PRTMP_ADAPTER pAd,
5510 IN PMAC_TABLE_ENTRY pEntry);
5512 VOID RTMPUpdateLegacyTxSetting(
5513 UCHAR fixed_tx_mode,
5514 PMAC_TABLE_ENTRY pEntry);
5516 BOOLEAN RTMPAutoRateSwitchCheck(
5517 IN PRTMP_ADAPTER pAd);
5519 NDIS_STATUS MlmeInit(
5520 IN PRTMP_ADAPTER pAd);
5522 VOID MlmeHandler(
5523 IN PRTMP_ADAPTER pAd);
5525 VOID MlmeHalt(
5526 IN PRTMP_ADAPTER pAd);
5528 VOID MlmeResetRalinkCounters(
5529 IN PRTMP_ADAPTER pAd);
5531 VOID BuildChannelList(
5532 IN PRTMP_ADAPTER pAd);
5534 UCHAR FirstChannel(
5535 IN PRTMP_ADAPTER pAd);
5537 UCHAR NextChannel(
5538 IN PRTMP_ADAPTER pAd,
5539 IN UCHAR channel);
5541 VOID ChangeToCellPowerLimit(
5542 IN PRTMP_ADAPTER pAd,
5543 IN UCHAR AironetCellPowerLimit);
5545 VOID RaiseClock(
5546 IN PRTMP_ADAPTER pAd,
5547 IN UINT32 *x);
5549 VOID LowerClock(
5550 IN PRTMP_ADAPTER pAd,
5551 IN UINT32 *x);
5553 USHORT ShiftInBits(
5554 IN PRTMP_ADAPTER pAd);
5556 VOID ShiftOutBits(
5557 IN PRTMP_ADAPTER pAd,
5558 IN USHORT data,
5559 IN USHORT count);
5561 VOID EEpromCleanup(
5562 IN PRTMP_ADAPTER pAd);
5564 VOID EWDS(
5565 IN PRTMP_ADAPTER pAd);
5567 VOID EWEN(
5568 IN PRTMP_ADAPTER pAd);
5570 USHORT RTMP_EEPROM_READ16(
5571 IN PRTMP_ADAPTER pAd,
5572 IN USHORT Offset);
5574 VOID RTMP_EEPROM_WRITE16(
5575 IN PRTMP_ADAPTER pAd,
5576 IN USHORT Offset,
5577 IN USHORT Data);
5580 // Prototypes of function definition in rtmp_tkip.c
5582 VOID RTMPInitTkipEngine(
5583 IN PRTMP_ADAPTER pAd,
5584 IN PUCHAR pTKey,
5585 IN UCHAR KeyId,
5586 IN PUCHAR pTA,
5587 IN PUCHAR pMICKey,
5588 IN PUCHAR pTSC,
5589 OUT PULONG pIV16,
5590 OUT PULONG pIV32);
5592 VOID RTMPInitMICEngine(
5593 IN PRTMP_ADAPTER pAd,
5594 IN PUCHAR pKey,
5595 IN PUCHAR pDA,
5596 IN PUCHAR pSA,
5597 IN UCHAR UserPriority,
5598 IN PUCHAR pMICKey);
5600 BOOLEAN RTMPTkipCompareMICValue(
5601 IN PRTMP_ADAPTER pAd,
5602 IN PUCHAR pSrc,
5603 IN PUCHAR pDA,
5604 IN PUCHAR pSA,
5605 IN PUCHAR pMICKey,
5606 IN UCHAR UserPriority,
5607 IN UINT Len);
5609 VOID RTMPCalculateMICValue(
5610 IN PRTMP_ADAPTER pAd,
5611 IN PNDIS_PACKET pPacket,
5612 IN PUCHAR pEncap,
5613 IN PCIPHER_KEY pKey,
5614 IN UCHAR apidx);
5616 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5617 IN PRTMP_ADAPTER pAd,
5618 IN PUCHAR pLLC,
5619 IN PUCHAR pSrc,
5620 IN PUCHAR pDA,
5621 IN PUCHAR pSA,
5622 IN PUCHAR pMICKey,
5623 IN UINT Len);
5625 VOID RTMPTkipAppendByte(
5626 IN PTKIP_KEY_INFO pTkip,
5627 IN UCHAR uChar);
5629 VOID RTMPTkipAppend(
5630 IN PTKIP_KEY_INFO pTkip,
5631 IN PUCHAR pSrc,
5632 IN UINT nBytes);
5634 VOID RTMPTkipGetMIC(
5635 IN PTKIP_KEY_INFO pTkip);
5637 BOOLEAN RTMPSoftDecryptTKIP(
5638 IN PRTMP_ADAPTER pAd,
5639 IN PUCHAR pData,
5640 IN ULONG DataByteCnt,
5641 IN UCHAR UserPriority,
5642 IN PCIPHER_KEY pWpaKey);
5644 BOOLEAN RTMPSoftDecryptAES(
5645 IN PRTMP_ADAPTER pAd,
5646 IN PUCHAR pData,
5647 IN ULONG DataByteCnt,
5648 IN PCIPHER_KEY pWpaKey);
5650 #if 0 // removed by AlbertY
5651 NDIS_STATUS RTMPWPAAddKeyProc(
5652 IN PRTMP_ADAPTER pAd,
5653 IN PVOID pBuf);
5654 #endif
5657 // Prototypes of function definition in cmm_info.c
5659 NDIS_STATUS RTMPWPARemoveKeyProc(
5660 IN PRTMP_ADAPTER pAd,
5661 IN PVOID pBuf);
5663 VOID RTMPWPARemoveAllKeys(
5664 IN PRTMP_ADAPTER pAd);
5666 BOOLEAN RTMPCheckStrPrintAble(
5667 IN CHAR *pInPutStr,
5668 IN UCHAR strLen);
5670 VOID RTMPSetPhyMode(
5671 IN PRTMP_ADAPTER pAd,
5672 IN ULONG phymode);
5674 VOID RTMPUpdateHTIE(
5675 IN RT_HT_CAPABILITY *pRtHt,
5676 IN UCHAR *pMcsSet,
5677 OUT HT_CAPABILITY_IE *pHtCapability,
5678 OUT ADD_HT_INFO_IE *pAddHtInfo);
5680 VOID RTMPAddWcidAttributeEntry(
5681 IN PRTMP_ADAPTER pAd,
5682 IN UCHAR BssIdx,
5683 IN UCHAR KeyIdx,
5684 IN UCHAR CipherAlg,
5685 IN MAC_TABLE_ENTRY *pEntry);
5687 CHAR *GetEncryptType(
5688 CHAR enc);
5690 CHAR *GetAuthMode(
5691 CHAR auth);
5693 VOID RTMPIoctlGetSiteSurvey(
5694 IN PRTMP_ADAPTER pAdapter,
5695 IN struct iwreq *wrq);
5697 VOID RTMPIoctlGetMacTable(
5698 IN PRTMP_ADAPTER pAd,
5699 IN struct iwreq *wrq);
5701 VOID RTMPIndicateWPA2Status(
5702 IN PRTMP_ADAPTER pAdapter);
5704 VOID RTMPOPModeSwitching(
5705 IN PRTMP_ADAPTER pAd);
5707 #ifdef CONFIG_STA_SUPPORT
5708 VOID RTMPAddBSSIDCipher(
5709 IN PRTMP_ADAPTER pAd,
5710 IN UCHAR Aid,
5711 IN PNDIS_802_11_KEY pKey,
5712 IN UCHAR CipherAlg);
5713 #endif // CONFIG_STA_SUPPORT //
5715 #ifdef DOT11_N_SUPPORT
5716 VOID RTMPSetHT(
5717 IN PRTMP_ADAPTER pAd,
5718 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5720 VOID RTMPSetIndividualHT(
5721 IN PRTMP_ADAPTER pAd,
5722 IN UCHAR apidx);
5723 #endif // DOT11_N_SUPPORT //
5725 VOID RTMPSendWirelessEvent(
5726 IN PRTMP_ADAPTER pAd,
5727 IN USHORT Event_flag,
5728 IN PUCHAR pAddr,
5729 IN UCHAR BssIdx,
5730 IN CHAR Rssi);
5732 VOID NICUpdateCntlCounters(
5733 IN PRTMP_ADAPTER pAd,
5734 IN PHEADER_802_11 pHeader,
5735 IN UCHAR SubType,
5736 IN PRXWI_STRUC pRxWI);
5738 // prototype in wpa.c
5740 BOOLEAN WpaMsgTypeSubst(
5741 IN UCHAR EAPType,
5742 OUT INT *MsgType);
5744 VOID WpaPskStateMachineInit(
5745 IN PRTMP_ADAPTER pAd,
5746 IN STATE_MACHINE *S,
5747 OUT STATE_MACHINE_FUNC Trans[]);
5749 VOID WpaEAPOLKeyAction(
5750 IN PRTMP_ADAPTER pAd,
5751 IN MLME_QUEUE_ELEM *Elem);
5753 VOID WpaPairMsg1Action(
5754 IN PRTMP_ADAPTER pAd,
5755 IN MLME_QUEUE_ELEM *Elem);
5757 VOID WpaPairMsg3Action(
5758 IN PRTMP_ADAPTER pAd,
5759 IN MLME_QUEUE_ELEM *Elem);
5761 VOID WpaGroupMsg1Action(
5762 IN PRTMP_ADAPTER pAd,
5763 IN MLME_QUEUE_ELEM *Elem);
5765 VOID WpaMacHeaderInit(
5766 IN PRTMP_ADAPTER pAd,
5767 IN OUT PHEADER_802_11 pHdr80211,
5768 IN UCHAR wep,
5769 IN PUCHAR pAddr1);
5771 VOID Wpa2PairMsg1Action(
5772 IN PRTMP_ADAPTER pAd,
5773 IN MLME_QUEUE_ELEM *Elem);
5775 VOID Wpa2PairMsg3Action(
5776 IN PRTMP_ADAPTER pAd,
5777 IN MLME_QUEUE_ELEM *Elem);
5779 BOOLEAN ParseKeyData(
5780 IN PRTMP_ADAPTER pAd,
5781 IN PUCHAR pKeyData,
5782 IN UCHAR KeyDataLen,
5783 IN UCHAR bPairewise);
5785 VOID RTMPToWirelessSta(
5786 IN PRTMP_ADAPTER pAd,
5787 IN PUCHAR pHeader802_3,
5788 IN UINT HdrLen,
5789 IN PUCHAR pData,
5790 IN UINT DataLen,
5791 IN BOOLEAN is4wayFrame);
5793 VOID HMAC_SHA1(
5794 IN UCHAR *text,
5795 IN UINT text_len,
5796 IN UCHAR *key,
5797 IN UINT key_len,
5798 IN UCHAR *digest);
5800 VOID PRF(
5801 IN UCHAR *key,
5802 IN INT key_len,
5803 IN UCHAR *prefix,
5804 IN INT prefix_len,
5805 IN UCHAR *data,
5806 IN INT data_len,
5807 OUT UCHAR *output,
5808 IN INT len);
5810 VOID CCKMPRF(
5811 IN UCHAR *key,
5812 IN INT key_len,
5813 IN UCHAR *data,
5814 IN INT data_len,
5815 OUT UCHAR *output,
5816 IN INT len);
5818 VOID WpaCountPTK(
5819 IN PRTMP_ADAPTER pAd,
5820 IN UCHAR *PMK,
5821 IN UCHAR *ANonce,
5822 IN UCHAR *AA,
5823 IN UCHAR *SNonce,
5824 IN UCHAR *SA,
5825 OUT UCHAR *output,
5826 IN UINT len);
5828 VOID GenRandom(
5829 IN PRTMP_ADAPTER pAd,
5830 IN UCHAR *macAddr,
5831 OUT UCHAR *random);
5834 // prototype in aironet.c
5836 VOID AironetStateMachineInit(
5837 IN PRTMP_ADAPTER pAd,
5838 IN STATE_MACHINE *S,
5839 OUT STATE_MACHINE_FUNC Trans[]);
5841 VOID AironetMsgAction(
5842 IN PRTMP_ADAPTER pAd,
5843 IN MLME_QUEUE_ELEM *Elem);
5845 VOID AironetRequestAction(
5846 IN PRTMP_ADAPTER pAd,
5847 IN MLME_QUEUE_ELEM *Elem);
5849 VOID ChannelLoadRequestAction(
5850 IN PRTMP_ADAPTER pAd,
5851 IN UCHAR Index);
5853 VOID NoiseHistRequestAction(
5854 IN PRTMP_ADAPTER pAd,
5855 IN UCHAR Index);
5857 VOID BeaconRequestAction(
5858 IN PRTMP_ADAPTER pAd,
5859 IN UCHAR Index);
5861 VOID AironetReportAction(
5862 IN PRTMP_ADAPTER pAd,
5863 IN MLME_QUEUE_ELEM *Elem);
5865 VOID ChannelLoadReportAction(
5866 IN PRTMP_ADAPTER pAd,
5867 IN UCHAR Index);
5869 VOID NoiseHistReportAction(
5870 IN PRTMP_ADAPTER pAd,
5871 IN UCHAR Index);
5873 VOID AironetFinalReportAction(
5874 IN PRTMP_ADAPTER pAd);
5876 VOID BeaconReportAction(
5877 IN PRTMP_ADAPTER pAd,
5878 IN UCHAR Index);
5880 VOID AironetAddBeaconReport(
5881 IN PRTMP_ADAPTER pAd,
5882 IN ULONG Index,
5883 IN PMLME_QUEUE_ELEM pElem);
5885 VOID AironetCreateBeaconReportFromBssTable(
5886 IN PRTMP_ADAPTER pAd);
5888 VOID DBGPRINT_TX_RING(
5889 IN PRTMP_ADAPTER pAd,
5890 IN UCHAR QueIdx);
5892 VOID DBGPRINT_RX_RING(
5893 IN PRTMP_ADAPTER pAd);
5895 CHAR ConvertToRssi(
5896 IN PRTMP_ADAPTER pAd,
5897 IN CHAR Rssi,
5898 IN UCHAR RssiNumber);
5901 #ifdef DOT11N_DRAFT3
5902 VOID BuildEffectedChannelList(
5903 IN PRTMP_ADAPTER pAd);
5904 #endif // DOT11N_DRAFT3 //
5907 VOID APAsicEvaluateRxAnt(
5908 IN PRTMP_ADAPTER pAd);
5911 VOID APAsicRxAntEvalTimeout(
5912 IN PRTMP_ADAPTER pAd);
5915 // function prototype in cmm_wpa.c
5917 BOOLEAN RTMPCheckWPAframe(
5918 IN PRTMP_ADAPTER pAd,
5919 IN PMAC_TABLE_ENTRY pEntry,
5920 IN PUCHAR pData,
5921 IN ULONG DataByteCount,
5922 IN UCHAR FromWhichBSSID);
5924 VOID AES_GTK_KEY_UNWRAP(
5925 IN UCHAR *key,
5926 OUT UCHAR *plaintext,
5927 IN UCHAR c_len,
5928 IN UCHAR *ciphertext);
5930 BOOLEAN RTMPCheckRSNIE(
5931 IN PRTMP_ADAPTER pAd,
5932 IN PUCHAR pData,
5933 IN UCHAR DataLen,
5934 IN MAC_TABLE_ENTRY *pEntry,
5935 OUT UCHAR *Offset);
5937 BOOLEAN RTMPParseEapolKeyData(
5938 IN PRTMP_ADAPTER pAd,
5939 IN PUCHAR pKeyData,
5940 IN UCHAR KeyDataLen,
5941 IN UCHAR GroupKeyIndex,
5942 IN UCHAR MsgType,
5943 IN BOOLEAN bWPA2,
5944 IN MAC_TABLE_ENTRY *pEntry);
5946 VOID ConstructEapolMsg(
5947 IN PRTMP_ADAPTER pAd,
5948 IN UCHAR PeerAuthMode,
5949 IN UCHAR PeerWepStatus,
5950 IN UCHAR MyGroupKeyWepStatus,
5951 IN UCHAR MsgType,
5952 IN UCHAR DefaultKeyIdx,
5953 IN UCHAR *ReplayCounter,
5954 IN UCHAR *KeyNonce,
5955 IN UCHAR *TxRSC,
5956 IN UCHAR *PTK,
5957 IN UCHAR *GTK,
5958 IN UCHAR *RSNIE,
5959 IN UCHAR RSNIE_Len,
5960 OUT PEAPOL_PACKET pMsg);
5962 VOID CalculateMIC(
5963 IN PRTMP_ADAPTER pAd,
5964 IN UCHAR PeerWepStatus,
5965 IN UCHAR *PTK,
5966 OUT PEAPOL_PACKET pMsg);
5968 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5969 IN PRTMP_ADAPTER pAd,
5970 IN RX_BLK *pRxBlk,
5971 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5972 IN PCIPHER_KEY pShard_key);
5974 VOID ConstructEapolKeyData(
5975 IN PRTMP_ADAPTER pAd,
5976 IN UCHAR PeerAuthMode,
5977 IN UCHAR PeerWepStatus,
5978 IN UCHAR GroupKeyWepStatus,
5979 IN UCHAR MsgType,
5980 IN UCHAR DefaultKeyIdx,
5981 IN BOOLEAN bWPA2Capable,
5982 IN UCHAR *PTK,
5983 IN UCHAR *GTK,
5984 IN UCHAR *RSNIE,
5985 IN UCHAR RSNIE_LEN,
5986 OUT PEAPOL_PACKET pMsg);
5988 VOID RTMPMakeRSNIE(
5989 IN PRTMP_ADAPTER pAd,
5990 IN UINT AuthMode,
5991 IN UINT WepStatus,
5992 IN UCHAR apidx);
5995 // function prototype in ap_wpa.c
5998 BOOLEAN APWpaMsgTypeSubst(
5999 IN UCHAR EAPType,
6000 OUT INT *MsgType) ;
6002 MAC_TABLE_ENTRY *PACInquiry(
6003 IN PRTMP_ADAPTER pAd,
6004 IN ULONG Wcid);
6006 BOOLEAN RTMPCheckMcast(
6007 IN PRTMP_ADAPTER pAd,
6008 IN PEID_STRUCT eid_ptr,
6009 IN MAC_TABLE_ENTRY *pEntry);
6011 BOOLEAN RTMPCheckUcast(
6012 IN PRTMP_ADAPTER pAd,
6013 IN PEID_STRUCT eid_ptr,
6014 IN MAC_TABLE_ENTRY *pEntry);
6016 BOOLEAN RTMPCheckAUTH(
6017 IN PRTMP_ADAPTER pAd,
6018 IN PEID_STRUCT eid_ptr,
6019 IN MAC_TABLE_ENTRY *pEntry);
6021 VOID WPAStart4WayHS(
6022 IN PRTMP_ADAPTER pAd,
6023 IN MAC_TABLE_ENTRY *pEntry,
6024 IN ULONG TimeInterval);
6026 VOID WPAStart2WayGroupHS(
6027 IN PRTMP_ADAPTER pAd,
6028 IN MAC_TABLE_ENTRY *pEntry);
6030 VOID APWpaEAPPacketAction(
6031 IN PRTMP_ADAPTER pAd,
6032 IN MLME_QUEUE_ELEM *Elem);
6034 VOID APWpaEAPOLStartAction(
6035 IN PRTMP_ADAPTER pAd,
6036 IN MLME_QUEUE_ELEM *Elem);
6038 VOID APWpaEAPOLLogoffAction(
6039 IN PRTMP_ADAPTER pAd,
6040 IN MLME_QUEUE_ELEM *Elem);
6042 VOID APWpaEAPOLKeyAction(
6043 IN PRTMP_ADAPTER pAd,
6044 IN MLME_QUEUE_ELEM *Elem);
6046 VOID APWpaEAPOLASFAlertAction(
6047 IN PRTMP_ADAPTER pAd,
6048 IN MLME_QUEUE_ELEM *Elem);
6050 VOID HandleCounterMeasure(
6051 IN PRTMP_ADAPTER pAd,
6052 IN MAC_TABLE_ENTRY *pEntry);
6054 VOID PeerPairMsg2Action(
6055 IN PRTMP_ADAPTER pAd,
6056 IN MAC_TABLE_ENTRY *pEntry,
6057 IN MLME_QUEUE_ELEM *Elem);
6059 VOID PeerPairMsg4Action(
6060 IN PRTMP_ADAPTER pAd,
6061 IN MAC_TABLE_ENTRY *pEntry,
6062 IN MLME_QUEUE_ELEM *Elem);
6064 VOID CMTimerExec(
6065 IN PVOID SystemSpecific1,
6066 IN PVOID FunctionContext,
6067 IN PVOID SystemSpecific2,
6068 IN PVOID SystemSpecific3);
6070 VOID WPARetryExec(
6071 IN PVOID SystemSpecific1,
6072 IN PVOID FunctionContext,
6073 IN PVOID SystemSpecific2,
6074 IN PVOID SystemSpecific3);
6076 VOID EnqueueStartForPSKExec(
6077 IN PVOID SystemSpecific1,
6078 IN PVOID FunctionContext,
6079 IN PVOID SystemSpecific2,
6080 IN PVOID SystemSpecific3);
6082 VOID RTMPHandleSTAKey(
6083 IN PRTMP_ADAPTER pAdapter,
6084 IN MAC_TABLE_ENTRY *pEntry,
6085 IN MLME_QUEUE_ELEM *Elem);
6087 #if 0 // merge into PeerPairMsg4Action
6088 VOID Wpa1PeerPairMsg4Action(
6089 IN PRTMP_ADAPTER pAd,
6090 IN MAC_TABLE_ENTRY *pEntry,
6091 IN MLME_QUEUE_ELEM *Elem);
6093 VOID Wpa2PeerPairMsg4Action(
6094 IN PRTMP_ADAPTER pAd,
6095 IN PMAC_TABLE_ENTRY pEntry,
6096 IN MLME_QUEUE_ELEM *Elem);
6097 #endif // 0 //
6099 VOID PeerGroupMsg2Action(
6100 IN PRTMP_ADAPTER pAd,
6101 IN PMAC_TABLE_ENTRY pEntry,
6102 IN VOID *Msg,
6103 IN UINT MsgLen);
6105 #if 0 // replaced by WPAStart2WayGroupHS
6106 NDIS_STATUS APWpaHardTransmit(
6107 IN PRTMP_ADAPTER pAd,
6108 IN PMAC_TABLE_ENTRY pEntry);
6109 #endif // 0 //
6111 VOID PairDisAssocAction(
6112 IN PRTMP_ADAPTER pAd,
6113 IN PMAC_TABLE_ENTRY pEntry,
6114 IN USHORT Reason);
6116 VOID MlmeDeAuthAction(
6117 IN PRTMP_ADAPTER pAd,
6118 IN PMAC_TABLE_ENTRY pEntry,
6119 IN USHORT Reason);
6121 VOID GREKEYPeriodicExec(
6122 IN PVOID SystemSpecific1,
6123 IN PVOID FunctionContext,
6124 IN PVOID SystemSpecific2,
6125 IN PVOID SystemSpecific3);
6127 VOID CountGTK(
6128 IN UCHAR *PMK,
6129 IN UCHAR *GNonce,
6130 IN UCHAR *AA,
6131 OUT UCHAR *output,
6132 IN UINT len);
6134 VOID GetSmall(
6135 IN PVOID pSrc1,
6136 IN PVOID pSrc2,
6137 OUT PUCHAR out,
6138 IN ULONG Length);
6140 VOID GetLarge(
6141 IN PVOID pSrc1,
6142 IN PVOID pSrc2,
6143 OUT PUCHAR out,
6144 IN ULONG Length);
6146 VOID APGenRandom(
6147 IN PRTMP_ADAPTER pAd,
6148 OUT UCHAR *random);
6150 VOID AES_GTK_KEY_WRAP(
6151 IN UCHAR *key,
6152 IN UCHAR *plaintext,
6153 IN UCHAR p_len,
6154 OUT UCHAR *ciphertext);
6156 VOID WpaSend(
6157 IN PRTMP_ADAPTER pAdapter,
6158 IN PUCHAR pPacket,
6159 IN ULONG Len);
6161 VOID APToWirelessSta(
6162 IN PRTMP_ADAPTER pAd,
6163 IN MAC_TABLE_ENTRY *pEntry,
6164 IN PUCHAR pHeader802_3,
6165 IN UINT HdrLen,
6166 IN PUCHAR pData,
6167 IN UINT DataLen,
6168 IN BOOLEAN bClearFrame);
6170 VOID RTMPAddPMKIDCache(
6171 IN PRTMP_ADAPTER pAd,
6172 IN INT apidx,
6173 IN PUCHAR pAddr,
6174 IN UCHAR *PMKID,
6175 IN UCHAR *PMK);
6177 INT RTMPSearchPMKIDCache(
6178 IN PRTMP_ADAPTER pAd,
6179 IN INT apidx,
6180 IN PUCHAR pAddr);
6182 VOID RTMPDeletePMKIDCache(
6183 IN PRTMP_ADAPTER pAd,
6184 IN INT apidx,
6185 IN INT idx);
6187 VOID RTMPMaintainPMKIDCache(
6188 IN PRTMP_ADAPTER pAd);
6190 VOID RTMPSendTriggerFrame(
6191 IN PRTMP_ADAPTER pAd,
6192 IN PVOID pBuffer,
6193 IN ULONG Length,
6194 IN UCHAR TxRate,
6195 IN BOOLEAN bQosNull);
6198 //typedef void (*TIMER_FUNCTION)(unsigned long);
6201 /* timeout -- ms */
6202 VOID RTMP_SetPeriodicTimer(
6203 IN NDIS_MINIPORT_TIMER *pTimer,
6204 IN unsigned long timeout);
6206 VOID RTMP_OS_Init_Timer(
6207 IN PRTMP_ADAPTER pAd,
6208 IN NDIS_MINIPORT_TIMER *pTimer,
6209 IN TIMER_FUNCTION function,
6210 IN PVOID data);
6212 VOID RTMP_OS_Add_Timer(
6213 IN NDIS_MINIPORT_TIMER *pTimer,
6214 IN unsigned long timeout);
6216 VOID RTMP_OS_Mod_Timer(
6217 IN NDIS_MINIPORT_TIMER *pTimer,
6218 IN unsigned long timeout);
6221 VOID RTMP_OS_Del_Timer(
6222 IN NDIS_MINIPORT_TIMER *pTimer,
6223 OUT BOOLEAN *pCancelled);
6226 VOID RTMP_OS_Release_Packet(
6227 IN PRTMP_ADAPTER pAd,
6228 IN PQUEUE_ENTRY pEntry);
6230 VOID RTMPusecDelay(
6231 IN ULONG usec);
6233 NDIS_STATUS os_alloc_mem(
6234 IN PRTMP_ADAPTER pAd,
6235 OUT PUCHAR *mem,
6236 IN ULONG size);
6238 NDIS_STATUS os_free_mem(
6239 IN PRTMP_ADAPTER pAd,
6240 IN PUCHAR mem);
6243 void RTMP_AllocateSharedMemory(
6244 IN PRTMP_ADAPTER pAd,
6245 IN ULONG Length,
6246 IN BOOLEAN Cached,
6247 OUT PVOID *VirtualAddress,
6248 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6250 VOID RTMPFreeTxRxRingMemory(
6251 IN PRTMP_ADAPTER pAd);
6253 NDIS_STATUS AdapterBlockAllocateMemory(
6254 IN PVOID handle,
6255 OUT PVOID *ppAd);
6257 void RTMP_AllocateTxDescMemory(
6258 IN PRTMP_ADAPTER pAd,
6259 IN UINT Index,
6260 IN ULONG Length,
6261 IN BOOLEAN Cached,
6262 OUT PVOID *VirtualAddress,
6263 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6265 void RTMP_AllocateFirstTxBuffer(
6266 IN PRTMP_ADAPTER pAd,
6267 IN UINT Index,
6268 IN ULONG Length,
6269 IN BOOLEAN Cached,
6270 OUT PVOID *VirtualAddress,
6271 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6273 void RTMP_AllocateMgmtDescMemory(
6274 IN PRTMP_ADAPTER pAd,
6275 IN ULONG Length,
6276 IN BOOLEAN Cached,
6277 OUT PVOID *VirtualAddress,
6278 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6280 void RTMP_AllocateRxDescMemory(
6281 IN PRTMP_ADAPTER pAd,
6282 IN ULONG Length,
6283 IN BOOLEAN Cached,
6284 OUT PVOID *VirtualAddress,
6285 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6287 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6288 IN PRTMP_ADAPTER pAd,
6289 IN ULONG Length,
6290 IN BOOLEAN Cached,
6291 OUT PVOID *VirtualAddress,
6292 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6294 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6295 IN PRTMP_ADAPTER pAd,
6296 IN ULONG Length,
6297 IN BOOLEAN Cached,
6298 OUT PVOID *VirtualAddress);
6300 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6301 IN PRTMP_ADAPTER pAd,
6302 IN ULONG Length);
6304 void RTMP_QueryPacketInfo(
6305 IN PNDIS_PACKET pPacket,
6306 OUT PACKET_INFO *pPacketInfo,
6307 OUT PUCHAR *pSrcBufVA,
6308 OUT UINT *pSrcBufLen);
6310 void RTMP_QueryNextPacketInfo(
6311 IN PNDIS_PACKET *ppPacket,
6312 OUT PACKET_INFO *pPacketInfo,
6313 OUT PUCHAR *pSrcBufVA,
6314 OUT UINT *pSrcBufLen);
6317 BOOLEAN RTMP_FillTxBlkInfo(
6318 IN RTMP_ADAPTER *pAd,
6319 IN TX_BLK *pTxBlk);
6322 PRTMP_SCATTER_GATHER_LIST
6323 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6326 void announce_802_3_packet(
6327 IN PRTMP_ADAPTER pAd,
6328 IN PNDIS_PACKET pPacket);
6331 UINT BA_Reorder_AMSDU_Annnounce(
6332 IN PRTMP_ADAPTER pAd,
6333 IN PNDIS_PACKET pPacket);
6336 UINT Handle_AMSDU_Packet(
6337 IN PRTMP_ADAPTER pAd,
6338 IN PUCHAR pData,
6339 IN ULONG DataSize,
6340 IN UCHAR FromWhichBSSID);
6343 void convert_802_11_to_802_3_packet(
6344 IN PRTMP_ADAPTER pAd,
6345 IN PNDIS_PACKET pPacket,
6346 IN PUCHAR p8023hdr,
6347 IN PUCHAR pData,
6348 IN ULONG DataSize,
6349 IN UCHAR FromWhichBSSID);
6352 PNET_DEV get_netdev_from_bssid(
6353 IN PRTMP_ADAPTER pAd,
6354 IN UCHAR FromWhichBSSID);
6357 PNDIS_PACKET duplicate_pkt(
6358 IN PRTMP_ADAPTER pAd,
6359 IN PUCHAR pHeader802_3,
6360 IN UINT HdrLen,
6361 IN PUCHAR pData,
6362 IN ULONG DataSize,
6363 IN UCHAR FromWhichBSSID);
6366 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6367 IN PRTMP_ADAPTER pAd,
6368 IN PNDIS_PACKET pOldPkt);
6370 PNDIS_PACKET duplicate_pkt_with_VLAN(
6371 IN PRTMP_ADAPTER pAd,
6372 IN PUCHAR pHeader802_3,
6373 IN UINT HdrLen,
6374 IN PUCHAR pData,
6375 IN ULONG DataSize,
6376 IN UCHAR FromWhichBSSID);
6378 PNDIS_PACKET duplicate_pkt_with_WPI(
6379 IN PRTMP_ADAPTER pAd,
6380 IN PNDIS_PACKET pPacket,
6381 IN UINT32 ext_head_len,
6382 IN UINT32 ext_tail_len);
6384 UCHAR VLAN_8023_Header_Copy(
6385 IN PRTMP_ADAPTER pAd,
6386 IN PUCHAR pHeader802_3,
6387 IN UINT HdrLen,
6388 OUT PUCHAR pData,
6389 IN UCHAR FromWhichBSSID);
6391 #ifdef DOT11_N_SUPPORT
6392 void ba_flush_reordering_timeout_mpdus(
6393 IN PRTMP_ADAPTER pAd,
6394 IN PBA_REC_ENTRY pBAEntry,
6395 IN ULONG Now32);
6398 VOID BAOriSessionSetUp(
6399 IN PRTMP_ADAPTER pAd,
6400 IN MAC_TABLE_ENTRY *pEntry,
6401 IN UCHAR TID,
6402 IN USHORT TimeOut,
6403 IN ULONG DelayTime,
6404 IN BOOLEAN isForced);
6406 VOID BASessionTearDownALL(
6407 IN OUT PRTMP_ADAPTER pAd,
6408 IN UCHAR Wcid);
6409 #endif // DOT11_N_SUPPORT //
6411 BOOLEAN OS_Need_Clone_Packet(void);
6414 VOID build_tx_packet(
6415 IN PRTMP_ADAPTER pAd,
6416 IN PNDIS_PACKET pPacket,
6417 IN PUCHAR pFrame,
6418 IN ULONG FrameLen);
6421 VOID BAOriSessionTearDown(
6422 IN OUT PRTMP_ADAPTER pAd,
6423 IN UCHAR Wcid,
6424 IN UCHAR TID,
6425 IN BOOLEAN bPassive,
6426 IN BOOLEAN bForceSend);
6428 VOID BARecSessionTearDown(
6429 IN OUT PRTMP_ADAPTER pAd,
6430 IN UCHAR Wcid,
6431 IN UCHAR TID,
6432 IN BOOLEAN bPassive);
6434 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6435 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6437 ULONG AutoChBssInsertEntry(
6438 IN PRTMP_ADAPTER pAd,
6439 IN PUCHAR pBssid,
6440 IN CHAR Ssid[],
6441 IN UCHAR SsidLen,
6442 IN UCHAR ChannelNo,
6443 IN CHAR Rssi);
6445 void AutoChBssTableInit(
6446 IN PRTMP_ADAPTER pAd);
6448 void ChannelInfoInit(
6449 IN PRTMP_ADAPTER pAd);
6451 void AutoChBssTableDestroy(
6452 IN PRTMP_ADAPTER pAd);
6454 void ChannelInfoDestroy(
6455 IN PRTMP_ADAPTER pAd);
6457 UCHAR New_ApAutoSelectChannel(
6458 IN PRTMP_ADAPTER pAd);
6460 BOOLEAN rtstrmactohex(
6461 IN char *s1,
6462 IN char *s2);
6464 BOOLEAN rtstrcasecmp(
6465 IN char *s1,
6466 IN char *s2);
6468 char *rtstrstruncasecmp(
6469 IN char *s1,
6470 IN char *s2);
6472 char *rtstrstr(
6473 IN const char * s1,
6474 IN const char * s2);
6476 char *rstrtok(
6477 IN char * s,
6478 IN const char * ct);
6480 int rtinet_aton(
6481 const char *cp,
6482 unsigned int *addr);
6484 ////////// common ioctl functions //////////
6485 INT Set_DriverVersion_Proc(
6486 IN PRTMP_ADAPTER pAd,
6487 IN PUCHAR arg);
6489 INT Set_CountryRegion_Proc(
6490 IN PRTMP_ADAPTER pAd,
6491 IN PUCHAR arg);
6493 INT Set_CountryRegionABand_Proc(
6494 IN PRTMP_ADAPTER pAd,
6495 IN PUCHAR arg);
6497 INT Set_WirelessMode_Proc(
6498 IN PRTMP_ADAPTER pAd,
6499 IN PUCHAR arg);
6501 INT Set_Channel_Proc(
6502 IN PRTMP_ADAPTER pAd,
6503 IN PUCHAR arg);
6505 INT Set_ShortSlot_Proc(
6506 IN PRTMP_ADAPTER pAd,
6507 IN PUCHAR arg);
6509 INT Set_TxPower_Proc(
6510 IN PRTMP_ADAPTER pAd,
6511 IN PUCHAR arg);
6513 INT Set_BGProtection_Proc(
6514 IN PRTMP_ADAPTER pAd,
6515 IN PUCHAR arg);
6517 INT Set_TxPreamble_Proc(
6518 IN PRTMP_ADAPTER pAd,
6519 IN PUCHAR arg);
6521 INT Set_RTSThreshold_Proc(
6522 IN PRTMP_ADAPTER pAd,
6523 IN PUCHAR arg);
6525 INT Set_FragThreshold_Proc(
6526 IN PRTMP_ADAPTER pAd,
6527 IN PUCHAR arg);
6529 INT Set_TxBurst_Proc(
6530 IN PRTMP_ADAPTER pAd,
6531 IN PUCHAR arg);
6533 #ifdef AGGREGATION_SUPPORT
6534 INT Set_PktAggregate_Proc(
6535 IN PRTMP_ADAPTER pAd,
6536 IN PUCHAR arg);
6537 #endif
6539 INT Set_IEEE80211H_Proc(
6540 IN PRTMP_ADAPTER pAd,
6541 IN PUCHAR arg);
6543 #ifdef DBG
6544 INT Set_Debug_Proc(
6545 IN PRTMP_ADAPTER pAd,
6546 IN PUCHAR arg);
6547 #endif
6549 INT Show_DescInfo_Proc(
6550 IN PRTMP_ADAPTER pAd,
6551 IN PUCHAR arg);
6553 INT Set_ResetStatCounter_Proc(
6554 IN PRTMP_ADAPTER pAd,
6555 IN PUCHAR arg);
6557 #ifdef DOT11_N_SUPPORT
6558 INT Set_BASetup_Proc(
6559 IN PRTMP_ADAPTER pAd,
6560 IN PUCHAR arg);
6562 INT Set_BADecline_Proc(
6563 IN PRTMP_ADAPTER pAd,
6564 IN PUCHAR arg);
6566 INT Set_BAOriTearDown_Proc(
6567 IN PRTMP_ADAPTER pAd,
6568 IN PUCHAR arg);
6570 INT Set_BARecTearDown_Proc(
6571 IN PRTMP_ADAPTER pAd,
6572 IN PUCHAR arg);
6574 INT Set_HtBw_Proc(
6575 IN PRTMP_ADAPTER pAd,
6576 IN PUCHAR arg);
6578 INT Set_HtMcs_Proc(
6579 IN PRTMP_ADAPTER pAd,
6580 IN PUCHAR arg);
6582 INT Set_HtGi_Proc(
6583 IN PRTMP_ADAPTER pAd,
6584 IN PUCHAR arg);
6586 INT Set_HtOpMode_Proc(
6587 IN PRTMP_ADAPTER pAd,
6588 IN PUCHAR arg);
6590 INT Set_HtStbc_Proc(
6591 IN PRTMP_ADAPTER pAd,
6592 IN PUCHAR arg);
6594 INT Set_HtHtc_Proc(
6595 IN PRTMP_ADAPTER pAd,
6596 IN PUCHAR arg);
6598 INT Set_HtExtcha_Proc(
6599 IN PRTMP_ADAPTER pAd,
6600 IN PUCHAR arg);
6602 INT Set_HtMpduDensity_Proc(
6603 IN PRTMP_ADAPTER pAd,
6604 IN PUCHAR arg);
6606 INT Set_HtBaWinSize_Proc(
6607 IN PRTMP_ADAPTER pAd,
6608 IN PUCHAR arg);
6610 INT Set_HtRdg_Proc(
6611 IN PRTMP_ADAPTER pAd,
6612 IN PUCHAR arg);
6614 INT Set_HtLinkAdapt_Proc(
6615 IN PRTMP_ADAPTER pAd,
6616 IN PUCHAR arg);
6618 INT Set_HtAmsdu_Proc(
6619 IN PRTMP_ADAPTER pAd,
6620 IN PUCHAR arg);
6622 INT Set_HtAutoBa_Proc(
6623 IN PRTMP_ADAPTER pAd,
6624 IN PUCHAR arg);
6626 INT Set_HtProtect_Proc(
6627 IN PRTMP_ADAPTER pAd,
6628 IN PUCHAR arg);
6630 INT Set_HtMimoPs_Proc(
6631 IN PRTMP_ADAPTER pAd,
6632 IN PUCHAR arg);
6635 INT Set_ForceShortGI_Proc(
6636 IN PRTMP_ADAPTER pAd,
6637 IN PUCHAR arg);
6639 INT Set_ForceGF_Proc(
6640 IN PRTMP_ADAPTER pAd,
6641 IN PUCHAR arg);
6643 INT SetCommonHT(
6644 IN PRTMP_ADAPTER pAd);
6646 INT Set_SendPSMPAction_Proc(
6647 IN PRTMP_ADAPTER pAd,
6648 IN PUCHAR arg);
6650 INT Set_HtMIMOPSmode_Proc(
6651 IN PRTMP_ADAPTER pAd,
6652 IN PUCHAR arg);
6655 INT Set_HtTxBASize_Proc(
6656 IN PRTMP_ADAPTER pAd,
6657 IN PUCHAR arg);
6658 #endif // DOT11_N_SUPPORT //
6662 #ifdef CONFIG_STA_SUPPORT
6663 //Dls , kathy
6664 VOID RTMPSendDLSTearDownFrame(
6665 IN PRTMP_ADAPTER pAd,
6666 IN PUCHAR pDA);
6668 #ifdef DOT11_N_SUPPORT
6669 //Block ACK
6670 VOID QueryBATABLE(
6671 IN PRTMP_ADAPTER pAd,
6672 OUT PQUERYBA_TABLE pBAT);
6673 #endif // DOT11_N_SUPPORT //
6675 #ifdef WPA_SUPPLICANT_SUPPORT
6676 INT WpaCheckEapCode(
6677 IN PRTMP_ADAPTER pAd,
6678 IN PUCHAR pFrame,
6679 IN USHORT FrameLen,
6680 IN USHORT OffSet);
6682 VOID WpaSendMicFailureToWpaSupplicant(
6683 IN PRTMP_ADAPTER pAd,
6684 IN BOOLEAN bUnicast);
6686 VOID SendAssocIEsToWpaSupplicant(
6687 IN PRTMP_ADAPTER pAd);
6688 #endif // WPA_SUPPLICANT_SUPPORT //
6690 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6691 int wext_notify_event_assoc(
6692 IN RTMP_ADAPTER *pAd);
6693 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6695 #endif // CONFIG_STA_SUPPORT //
6699 #ifdef DOT11_N_SUPPORT
6700 VOID Handle_BSS_Width_Trigger_Events(
6701 IN PRTMP_ADAPTER pAd);
6703 void build_ext_channel_switch_ie(
6704 IN PRTMP_ADAPTER pAd,
6705 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6706 #endif // DOT11_N_SUPPORT //
6709 BOOLEAN APRxDoneInterruptHandle(
6710 IN PRTMP_ADAPTER pAd);
6712 BOOLEAN STARxDoneInterruptHandle(
6713 IN PRTMP_ADAPTER pAd,
6714 IN BOOLEAN argc);
6716 #ifdef DOT11_N_SUPPORT
6717 // AMPDU packet indication
6718 VOID Indicate_AMPDU_Packet(
6719 IN PRTMP_ADAPTER pAd,
6720 IN RX_BLK *pRxBlk,
6721 IN UCHAR FromWhichBSSID);
6723 // AMSDU packet indication
6724 VOID Indicate_AMSDU_Packet(
6725 IN PRTMP_ADAPTER pAd,
6726 IN RX_BLK *pRxBlk,
6727 IN UCHAR FromWhichBSSID);
6728 #endif // DOT11_N_SUPPORT //
6730 // Normal legacy Rx packet indication
6731 VOID Indicate_Legacy_Packet(
6732 IN PRTMP_ADAPTER pAd,
6733 IN RX_BLK *pRxBlk,
6734 IN UCHAR FromWhichBSSID);
6736 VOID Indicate_EAPOL_Packet(
6737 IN PRTMP_ADAPTER pAd,
6738 IN RX_BLK *pRxBlk,
6739 IN UCHAR FromWhichBSSID);
6741 void update_os_packet_info(
6742 IN PRTMP_ADAPTER pAd,
6743 IN RX_BLK *pRxBlk,
6744 IN UCHAR FromWhichBSSID);
6746 void wlan_802_11_to_802_3_packet(
6747 IN PRTMP_ADAPTER pAd,
6748 IN RX_BLK *pRxBlk,
6749 IN PUCHAR pHeader802_3,
6750 IN UCHAR FromWhichBSSID);
6752 UINT deaggregate_AMSDU_announce(
6753 IN PRTMP_ADAPTER pAd,
6754 PNDIS_PACKET pPacket,
6755 IN PUCHAR pData,
6756 IN ULONG DataSize);
6759 #ifdef CONFIG_STA_SUPPORT
6760 // remove LLC and get 802_3 Header
6761 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6763 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6765 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6767 _pDA = _pRxBlk->pHeader->Addr3; \
6768 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6770 else \
6772 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6774 _pDA = _pRxBlk->pHeader->Addr1; \
6775 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6776 _pSA = _pRxBlk->pHeader->Addr2; \
6777 else \
6778 _pSA = _pRxBlk->pHeader->Addr3; \
6780 else \
6782 _pDA = _pRxBlk->pHeader->Addr1; \
6783 _pSA = _pRxBlk->pHeader->Addr2; \
6787 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6788 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6790 #endif // CONFIG_STA_SUPPORT //
6793 BOOLEAN APFowardWirelessStaToWirelessSta(
6794 IN PRTMP_ADAPTER pAd,
6795 IN PNDIS_PACKET pPacket,
6796 IN ULONG FromWhichBSSID);
6798 VOID Announce_or_Forward_802_3_Packet(
6799 IN PRTMP_ADAPTER pAd,
6800 IN PNDIS_PACKET pPacket,
6801 IN UCHAR FromWhichBSSID);
6803 VOID Sta_Announce_or_Forward_802_3_Packet(
6804 IN PRTMP_ADAPTER pAd,
6805 IN PNDIS_PACKET pPacket,
6806 IN UCHAR FromWhichBSSID);
6809 #ifdef CONFIG_STA_SUPPORT
6810 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6811 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6812 //announce_802_3_packet(_pAd, _pPacket);
6813 #endif // CONFIG_STA_SUPPORT //
6816 PNDIS_PACKET DuplicatePacket(
6817 IN PRTMP_ADAPTER pAd,
6818 IN PNDIS_PACKET pPacket,
6819 IN UCHAR FromWhichBSSID);
6822 PNDIS_PACKET ClonePacket(
6823 IN PRTMP_ADAPTER pAd,
6824 IN PNDIS_PACKET pPacket,
6825 IN PUCHAR pData,
6826 IN ULONG DataSize);
6829 // Normal, AMPDU or AMSDU
6830 VOID CmmRxnonRalinkFrameIndicate(
6831 IN PRTMP_ADAPTER pAd,
6832 IN RX_BLK *pRxBlk,
6833 IN UCHAR FromWhichBSSID);
6835 VOID CmmRxRalinkFrameIndicate(
6836 IN PRTMP_ADAPTER pAd,
6837 IN MAC_TABLE_ENTRY *pEntry,
6838 IN RX_BLK *pRxBlk,
6839 IN UCHAR FromWhichBSSID);
6841 VOID Update_Rssi_Sample(
6842 IN PRTMP_ADAPTER pAd,
6843 IN RSSI_SAMPLE *pRssi,
6844 IN PRXWI_STRUC pRxWI);
6846 PNDIS_PACKET GetPacketFromRxRing(
6847 IN PRTMP_ADAPTER pAd,
6848 OUT PRT28XX_RXD_STRUC pSaveRxD,
6849 OUT BOOLEAN *pbReschedule,
6850 IN OUT UINT32 *pRxPending);
6852 PNDIS_PACKET RTMPDeFragmentDataFrame(
6853 IN PRTMP_ADAPTER pAd,
6854 IN RX_BLK *pRxBlk);
6856 ////////////////////////////////////////
6862 #ifdef SNMP_SUPPORT
6863 //for snmp , kathy
6864 typedef struct _DefaultKeyIdxValue
6866 UCHAR KeyIdx;
6867 UCHAR Value[16];
6868 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6869 #endif
6872 #ifdef CONFIG_STA_SUPPORT
6873 enum {
6874 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6875 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6876 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6877 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6878 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6879 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6880 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6881 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6882 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6883 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6884 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6886 enum {
6887 P80211ENUM_msgitem_status_no_value = 0x00
6889 enum {
6890 P80211ENUM_truth_false = 0x00,
6891 P80211ENUM_truth_true = 0x01
6894 /* Definition from madwifi */
6895 typedef struct {
6896 UINT32 did;
6897 UINT16 status;
6898 UINT16 len;
6899 UINT32 data;
6900 } p80211item_uint32_t;
6902 typedef struct {
6903 UINT32 msgcode;
6904 UINT32 msglen;
6905 #define WLAN_DEVNAMELEN_MAX 16
6906 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6907 p80211item_uint32_t hosttime;
6908 p80211item_uint32_t mactime;
6909 p80211item_uint32_t channel;
6910 p80211item_uint32_t rssi;
6911 p80211item_uint32_t sq;
6912 p80211item_uint32_t signal;
6913 p80211item_uint32_t noise;
6914 p80211item_uint32_t rate;
6915 p80211item_uint32_t istx;
6916 p80211item_uint32_t frmlen;
6917 } wlan_ng_prism2_header;
6919 /* The radio capture header precedes the 802.11 header. */
6920 typedef struct PACKED _ieee80211_radiotap_header {
6921 UINT8 it_version; /* Version 0. Only increases
6922 * for drastic changes,
6923 * introduction of compatible
6924 * new fields does not count.
6926 UINT8 it_pad;
6927 UINT16 it_len; /* length of the whole
6928 * header in bytes, including
6929 * it_version, it_pad,
6930 * it_len, and data fields.
6932 UINT32 it_present; /* A bitmap telling which
6933 * fields are present. Set bit 31
6934 * (0x80000000) to extend the
6935 * bitmap by another 32 bits.
6936 * Additional extensions are made
6937 * by setting bit 31.
6939 }ieee80211_radiotap_header ;
6941 enum ieee80211_radiotap_type {
6942 IEEE80211_RADIOTAP_TSFT = 0,
6943 IEEE80211_RADIOTAP_FLAGS = 1,
6944 IEEE80211_RADIOTAP_RATE = 2,
6945 IEEE80211_RADIOTAP_CHANNEL = 3,
6946 IEEE80211_RADIOTAP_FHSS = 4,
6947 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6948 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6949 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6950 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6951 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6952 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6953 IEEE80211_RADIOTAP_ANTENNA = 11,
6954 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6955 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6958 #define WLAN_RADIOTAP_PRESENT ( \
6959 (1 << IEEE80211_RADIOTAP_TSFT) | \
6960 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6961 (1 << IEEE80211_RADIOTAP_RATE) | \
6964 typedef struct _wlan_radiotap_header {
6965 ieee80211_radiotap_header wt_ihdr;
6966 INT64 wt_tsft;
6967 UINT8 wt_flags;
6968 UINT8 wt_rate;
6969 } wlan_radiotap_header;
6970 /* Definition from madwifi */
6972 void send_monitor_packets(
6973 IN PRTMP_ADAPTER pAd,
6974 IN RX_BLK *pRxBlk);
6976 #if WIRELESS_EXT >= 12
6977 // This function will be called when query /proc
6978 struct iw_statistics *rt28xx_get_wireless_stats(
6979 IN struct net_device *net_dev);
6980 #endif
6982 VOID RTMPSetDesiredRates(
6983 IN PRTMP_ADAPTER pAdapter,
6984 IN LONG Rates);
6985 #endif // CONFIG_STA_SUPPORT //
6987 INT Set_FixedTxMode_Proc(
6988 IN PRTMP_ADAPTER pAd,
6989 IN PUCHAR arg);
6991 #ifdef CONFIG_APSTA_MIXED_SUPPORT
6992 INT Set_OpMode_Proc(
6993 IN PRTMP_ADAPTER pAd,
6994 IN PUCHAR arg);
6995 #endif // CONFIG_APSTA_MIXED_SUPPORT //
6997 static inline char* GetPhyMode(
6998 int Mode)
7000 switch(Mode)
7002 case MODE_CCK:
7003 return "CCK";
7005 case MODE_OFDM:
7006 return "OFDM";
7007 #ifdef DOT11_N_SUPPORT
7008 case MODE_HTMIX:
7009 return "HTMIX";
7011 case MODE_HTGREENFIELD:
7012 return "GREEN";
7013 #endif // DOT11_N_SUPPORT //
7014 default:
7015 return "N/A";
7020 static inline char* GetBW(
7021 int BW)
7023 switch(BW)
7025 case BW_10:
7026 return "10M";
7028 case BW_20:
7029 return "20M";
7030 #ifdef DOT11_N_SUPPORT
7031 case BW_40:
7032 return "40M";
7033 #endif // DOT11_N_SUPPORT //
7034 default:
7035 return "N/A";
7040 VOID RT28xxThreadTerminate(
7041 IN RTMP_ADAPTER *pAd);
7043 BOOLEAN RT28XXChipsetCheck(
7044 IN void *_dev_p);
7046 BOOLEAN RT28XXNetDevInit(
7047 IN void *_dev_p,
7048 IN struct net_device *net_dev,
7049 IN RTMP_ADAPTER *pAd);
7051 BOOLEAN RT28XXProbePostConfig(
7052 IN void *_dev_p,
7053 IN RTMP_ADAPTER *pAd,
7054 IN INT32 argc);
7056 VOID RT28XXDMADisable(
7057 IN RTMP_ADAPTER *pAd);
7059 VOID RT28XXDMAEnable(
7060 IN RTMP_ADAPTER *pAd);
7062 VOID RT28xx_UpdateBeaconToAsic(
7063 IN RTMP_ADAPTER * pAd,
7064 IN INT apidx,
7065 IN ULONG BeaconLen,
7066 IN ULONG UpdatePos);
7068 INT rt28xx_ioctl(
7069 IN struct net_device *net_dev,
7070 IN OUT struct ifreq *rq,
7071 IN INT cmd);
7074 #ifdef CONFIG_STA_SUPPORT
7075 INT rt28xx_sta_ioctl(
7076 IN struct net_device *net_dev,
7077 IN OUT struct ifreq *rq,
7078 IN INT cmd);
7079 #endif // CONFIG_STA_SUPPORT //
7081 BOOLEAN RT28XXSecurityKeyAdd(
7082 IN PRTMP_ADAPTER pAd,
7083 IN ULONG apidx,
7084 IN ULONG KeyIdx,
7085 IN MAC_TABLE_ENTRY *pEntry);
7087 ////////////////////////////////////////
7088 PNDIS_PACKET GetPacketFromRxRing(
7089 IN PRTMP_ADAPTER pAd,
7090 OUT PRT28XX_RXD_STRUC pSaveRxD,
7091 OUT BOOLEAN *pbReschedule,
7092 IN OUT UINT32 *pRxPending);
7095 void kill_thread_task(PRTMP_ADAPTER pAd);
7097 void tbtt_tasklet(unsigned long data);
7100 VOID AsicTurnOffRFClk(
7101 IN PRTMP_ADAPTER pAd,
7102 IN UCHAR Channel);
7104 VOID AsicTurnOnRFClk(
7105 IN PRTMP_ADAPTER pAd,
7106 IN UCHAR Channel);
7108 #ifdef RT2870
7110 // Function Prototype in rtusb_bulk.c
7112 VOID RTUSBInitTxDesc(
7113 IN PRTMP_ADAPTER pAd,
7114 IN PTX_CONTEXT pTxContext,
7115 IN UCHAR BulkOutPipeId,
7116 IN usb_complete_t Func);
7118 VOID RTUSBInitHTTxDesc(
7119 IN PRTMP_ADAPTER pAd,
7120 IN PHT_TX_CONTEXT pTxContext,
7121 IN UCHAR BulkOutPipeId,
7122 IN ULONG BulkOutSize,
7123 IN usb_complete_t Func);
7125 VOID RTUSBInitRxDesc(
7126 IN PRTMP_ADAPTER pAd,
7127 IN PRX_CONTEXT pRxContext);
7129 VOID RTUSBCleanUpDataBulkOutQueue(
7130 IN PRTMP_ADAPTER pAd);
7132 VOID RTUSBCancelPendingBulkOutIRP(
7133 IN PRTMP_ADAPTER pAd);
7135 VOID RTUSBBulkOutDataPacket(
7136 IN PRTMP_ADAPTER pAd,
7137 IN UCHAR BulkOutPipeId,
7138 IN UCHAR Index);
7140 VOID RTUSBBulkOutNullFrame(
7141 IN PRTMP_ADAPTER pAd);
7143 VOID RTUSBBulkOutRTSFrame(
7144 IN PRTMP_ADAPTER pAd);
7146 VOID RTUSBCancelPendingBulkInIRP(
7147 IN PRTMP_ADAPTER pAd);
7149 VOID RTUSBCancelPendingIRPs(
7150 IN PRTMP_ADAPTER pAd);
7152 VOID RTUSBBulkOutMLMEPacket(
7153 IN PRTMP_ADAPTER pAd,
7154 IN UCHAR Index);
7156 VOID RTUSBBulkOutPsPoll(
7157 IN PRTMP_ADAPTER pAd);
7159 VOID RTUSBCleanUpMLMEBulkOutQueue(
7160 IN PRTMP_ADAPTER pAd);
7162 VOID RTUSBKickBulkOut(
7163 IN PRTMP_ADAPTER pAd);
7165 VOID RTUSBBulkReceive(
7166 IN PRTMP_ADAPTER pAd);
7168 VOID DoBulkIn(
7169 IN RTMP_ADAPTER *pAd);
7171 VOID RTUSBInitRxDesc(
7172 IN PRTMP_ADAPTER pAd,
7173 IN PRX_CONTEXT pRxContext);
7175 VOID RTUSBBulkRxHandle(
7176 IN unsigned long data);
7179 // Function Prototype in rtusb_io.c
7181 NTSTATUS RTUSBMultiRead(
7182 IN PRTMP_ADAPTER pAd,
7183 IN USHORT Offset,
7184 OUT PUCHAR pData,
7185 IN USHORT length);
7187 NTSTATUS RTUSBMultiWrite(
7188 IN PRTMP_ADAPTER pAd,
7189 IN USHORT Offset,
7190 IN PUCHAR pData,
7191 IN USHORT length);
7193 NTSTATUS RTUSBMultiWrite_OneByte(
7194 IN PRTMP_ADAPTER pAd,
7195 IN USHORT Offset,
7196 IN PUCHAR pData);
7198 NTSTATUS RTUSBReadBBPRegister(
7199 IN PRTMP_ADAPTER pAd,
7200 IN UCHAR Id,
7201 IN PUCHAR pValue);
7203 NTSTATUS RTUSBWriteBBPRegister(
7204 IN PRTMP_ADAPTER pAd,
7205 IN UCHAR Id,
7206 IN UCHAR Value);
7208 NTSTATUS RTUSBWriteRFRegister(
7209 IN PRTMP_ADAPTER pAd,
7210 IN UINT32 Value);
7212 NTSTATUS RT30xxWriteRFRegister(
7213 IN PRTMP_ADAPTER pAd,
7214 IN UCHAR RegID,
7215 IN UCHAR Value);
7217 NTSTATUS RT30xxReadRFRegister(
7218 IN PRTMP_ADAPTER pAd,
7219 IN UCHAR RegID,
7220 IN PUCHAR pValue);
7222 NTSTATUS RTUSB_VendorRequest(
7223 IN PRTMP_ADAPTER pAd,
7224 IN UINT32 TransferFlags,
7225 IN UCHAR ReservedBits,
7226 IN UCHAR Request,
7227 IN USHORT Value,
7228 IN USHORT Index,
7229 IN PVOID TransferBuffer,
7230 IN UINT32 TransferBufferLength);
7232 NTSTATUS RTUSBReadEEPROM(
7233 IN PRTMP_ADAPTER pAd,
7234 IN USHORT Offset,
7235 OUT PUCHAR pData,
7236 IN USHORT length);
7238 NTSTATUS RTUSBWriteEEPROM(
7239 IN PRTMP_ADAPTER pAd,
7240 IN USHORT Offset,
7241 IN PUCHAR pData,
7242 IN USHORT length);
7244 VOID RTUSBPutToSleep(
7245 IN PRTMP_ADAPTER pAd);
7247 NTSTATUS RTUSBWakeUp(
7248 IN PRTMP_ADAPTER pAd);
7250 VOID RTUSBInitializeCmdQ(
7251 IN PCmdQ cmdq);
7253 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7254 IN PRTMP_ADAPTER pAd,
7255 IN NDIS_OID Oid,
7256 IN BOOLEAN SetInformation,
7257 IN PVOID pInformationBuffer,
7258 IN UINT32 InformationBufferLength);
7260 NDIS_STATUS RTUSBEnqueueInternalCmd(
7261 IN PRTMP_ADAPTER pAd,
7262 IN NDIS_OID Oid,
7263 IN PVOID pInformationBuffer,
7264 IN UINT32 InformationBufferLength);
7266 VOID RTUSBDequeueCmd(
7267 IN PCmdQ cmdq,
7268 OUT PCmdQElmt *pcmdqelmt);
7270 INT RTUSBCmdThread(
7271 IN OUT PVOID Context);
7273 INT TimerQThread(
7274 IN OUT PVOID Context);
7276 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7277 IN RTMP_ADAPTER *pAd,
7278 IN RALINK_TIMER_STRUCT *pTimer);
7280 BOOLEAN RT2870_TimerQ_Remove(
7281 IN RTMP_ADAPTER *pAd,
7282 IN RALINK_TIMER_STRUCT *pTimer);
7284 void RT2870_TimerQ_Exit(
7285 IN RTMP_ADAPTER *pAd);
7287 void RT2870_TimerQ_Init(
7288 IN RTMP_ADAPTER *pAd);
7290 VOID RT2870_BssBeaconExit(
7291 IN RTMP_ADAPTER *pAd);
7293 VOID RT2870_BssBeaconStop(
7294 IN RTMP_ADAPTER *pAd);
7296 VOID RT2870_BssBeaconStart(
7297 IN RTMP_ADAPTER * pAd);
7299 VOID RT2870_BssBeaconInit(
7300 IN RTMP_ADAPTER *pAd);
7302 VOID RT2870_WatchDog(
7303 IN RTMP_ADAPTER *pAd);
7305 NTSTATUS RTUSBWriteMACRegister(
7306 IN PRTMP_ADAPTER pAd,
7307 IN USHORT Offset,
7308 IN UINT32 Value);
7310 NTSTATUS RTUSBReadMACRegister(
7311 IN PRTMP_ADAPTER pAd,
7312 IN USHORT Offset,
7313 OUT PUINT32 pValue);
7315 NTSTATUS RTUSBSingleWrite(
7316 IN RTMP_ADAPTER *pAd,
7317 IN USHORT Offset,
7318 IN USHORT Value);
7320 NTSTATUS RTUSBFirmwareRun(
7321 IN PRTMP_ADAPTER pAd);
7323 NTSTATUS RTUSBFirmwareWrite(
7324 IN PRTMP_ADAPTER pAd,
7325 IN PUCHAR pFwImage,
7326 IN ULONG FwLen);
7328 NTSTATUS RTUSBFirmwareOpmode(
7329 IN PRTMP_ADAPTER pAd,
7330 OUT PUINT32 pValue);
7332 NTSTATUS RTUSBVenderReset(
7333 IN PRTMP_ADAPTER pAd);
7335 NDIS_STATUS RTUSBSetHardWareRegister(
7336 IN PRTMP_ADAPTER pAdapter,
7337 IN PVOID pBuf);
7339 NDIS_STATUS RTUSBQueryHardWareRegister(
7340 IN PRTMP_ADAPTER pAdapter,
7341 IN PVOID pBuf);
7343 VOID CMDHandler(
7344 IN PRTMP_ADAPTER pAd);
7347 NDIS_STATUS CreateThreads(
7348 IN struct net_device *net_dev );
7351 VOID MacTableInitialize(
7352 IN PRTMP_ADAPTER pAd);
7354 VOID MlmeSetPsm(
7355 IN PRTMP_ADAPTER pAd,
7356 IN USHORT psm);
7358 NDIS_STATUS RTMPWPAAddKeyProc(
7359 IN PRTMP_ADAPTER pAd,
7360 IN PVOID pBuf);
7362 VOID AsicRxAntEvalAction(
7363 IN PRTMP_ADAPTER pAd);
7365 #if 0 // Mark because not used in RT28xx.
7366 NTSTATUS RTUSBRxPacket(
7367 IN PRTMP_ADAPTER pAd,
7368 IN BOOLEAN bBulkReceive);
7370 VOID RTUSBDequeueMLMEPacket(
7371 IN PRTMP_ADAPTER pAd);
7373 VOID RTUSBCleanUpMLMEWaitQueue(
7374 IN PRTMP_ADAPTER pAd);
7375 #endif
7377 void append_pkt(
7378 IN PRTMP_ADAPTER pAd,
7379 IN PUCHAR pHeader802_3,
7380 IN UINT HdrLen,
7381 IN PUCHAR pData,
7382 IN ULONG DataSize,
7383 OUT PNDIS_PACKET *ppPacket);
7385 UINT deaggregate_AMSDU_announce(
7386 IN PRTMP_ADAPTER pAd,
7387 PNDIS_PACKET pPacket,
7388 IN PUCHAR pData,
7389 IN ULONG DataSize);
7391 NDIS_STATUS RTMPCheckRxError(
7392 IN PRTMP_ADAPTER pAd,
7393 IN PHEADER_802_11 pHeader,
7394 IN PRXWI_STRUC pRxWI,
7395 IN PRT28XX_RXD_STRUC pRxINFO);
7398 VOID RTUSBMlmeHardTransmit(
7399 IN PRTMP_ADAPTER pAd,
7400 IN PMGMT_STRUC pMgmt);
7402 INT MlmeThread(
7403 IN PVOID Context);
7405 #if 0
7406 VOID RTUSBResumeMsduTransmission(
7407 IN PRTMP_ADAPTER pAd);
7409 VOID RTUSBSuspendMsduTransmission(
7410 IN PRTMP_ADAPTER pAd);
7411 #endif
7414 // Function Prototype in rtusb_data.c
7416 NDIS_STATUS RTUSBFreeDescriptorRequest(
7417 IN PRTMP_ADAPTER pAd,
7418 IN UCHAR BulkOutPipeId,
7419 IN UINT32 NumberRequired);
7422 BOOLEAN RTUSBNeedQueueBackForAgg(
7423 IN RTMP_ADAPTER *pAd,
7424 IN UCHAR BulkOutPipeId);
7427 VOID RTMPWriteTxInfo(
7428 IN PRTMP_ADAPTER pAd,
7429 IN PTXINFO_STRUC pTxInfo,
7430 IN USHORT USBDMApktLen,
7431 IN BOOLEAN bWiv,
7432 IN UCHAR QueueSel,
7433 IN UCHAR NextValid,
7434 IN UCHAR TxBurst);
7437 // Function Prototype in cmm_data_2870.c
7439 USHORT RtmpUSB_WriteSubTxResource(
7440 IN PRTMP_ADAPTER pAd,
7441 IN TX_BLK *pTxBlk,
7442 IN BOOLEAN bIsLast,
7443 OUT USHORT *FreeNumber);
7445 USHORT RtmpUSB_WriteSingleTxResource(
7446 IN PRTMP_ADAPTER pAd,
7447 IN TX_BLK *pTxBlk,
7448 IN BOOLEAN bIsLast,
7449 OUT USHORT *FreeNumber);
7451 USHORT RtmpUSB_WriteFragTxResource(
7452 IN PRTMP_ADAPTER pAd,
7453 IN TX_BLK *pTxBlk,
7454 IN UCHAR fragNum,
7455 OUT USHORT *FreeNumber);
7457 USHORT RtmpUSB_WriteMultiTxResource(
7458 IN PRTMP_ADAPTER pAd,
7459 IN TX_BLK *pTxBlk,
7460 IN UCHAR frameNum,
7461 OUT USHORT *FreeNumber);
7463 VOID RtmpUSB_FinalWriteTxResource(
7464 IN PRTMP_ADAPTER pAd,
7465 IN TX_BLK *pTxBlk,
7466 IN USHORT totalMPDUSize,
7467 IN USHORT TxIdx);
7469 VOID RtmpUSBDataLastTxIdx(
7470 IN PRTMP_ADAPTER pAd,
7471 IN UCHAR QueIdx,
7472 IN USHORT TxIdx);
7474 VOID RtmpUSBDataKickOut(
7475 IN PRTMP_ADAPTER pAd,
7476 IN TX_BLK *pTxBlk,
7477 IN UCHAR QueIdx);
7480 int RtmpUSBMgmtKickOut(
7481 IN RTMP_ADAPTER *pAd,
7482 IN UCHAR QueIdx,
7483 IN PNDIS_PACKET pPacket,
7484 IN PUCHAR pSrcBufVA,
7485 IN UINT SrcBufLen);
7487 VOID RtmpUSBNullFrameKickOut(
7488 IN RTMP_ADAPTER *pAd,
7489 IN UCHAR QueIdx,
7490 IN UCHAR *pNullFrame,
7491 IN UINT32 frameLen);
7493 VOID RT28xxUsbStaAsicForceWakeup(
7494 IN PRTMP_ADAPTER pAd,
7495 IN BOOLEAN bFromTx);
7497 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7498 IN PRTMP_ADAPTER pAd,
7499 IN USHORT TbttNumToNextWakeUp);
7501 VOID RT28xxUsbMlmeRadioOn(
7502 IN PRTMP_ADAPTER pAd);
7504 VOID RT28xxUsbMlmeRadioOFF(
7505 IN PRTMP_ADAPTER pAd);
7506 #endif // RT2870 //
7508 ////////////////////////////////////////
7510 VOID QBSS_LoadInit(
7511 IN RTMP_ADAPTER *pAd);
7513 UINT32 QBSS_LoadElementAppend(
7514 IN RTMP_ADAPTER *pAd,
7515 OUT UINT8 *buf_p);
7517 VOID QBSS_LoadUpdate(
7518 IN RTMP_ADAPTER *pAd);
7520 ///////////////////////////////////////
7521 INT RTMPShowCfgValue(
7522 IN PRTMP_ADAPTER pAd,
7523 IN PUCHAR pName,
7524 IN PUCHAR pBuf);
7526 PCHAR RTMPGetRalinkAuthModeStr(
7527 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7529 PCHAR RTMPGetRalinkEncryModeStr(
7530 IN USHORT encryMode);
7531 //////////////////////////////////////
7533 #ifdef CONFIG_STA_SUPPORT
7534 VOID AsicStaBbpTuning(
7535 IN PRTMP_ADAPTER pAd);
7537 BOOLEAN StaAddMacTableEntry(
7538 IN PRTMP_ADAPTER pAd,
7539 IN PMAC_TABLE_ENTRY pEntry,
7540 IN UCHAR MaxSupportedRateIn500Kbps,
7541 IN HT_CAPABILITY_IE *pHtCapability,
7542 IN UCHAR HtCapabilityLen,
7543 IN USHORT CapabilityInfo);
7544 #endif // CONFIG_STA_SUPPORT //
7546 void RTMP_IndicateMediaState(
7547 IN PRTMP_ADAPTER pAd);
7549 VOID ReSyncBeaconTime(
7550 IN PRTMP_ADAPTER pAd);
7552 VOID RTMPSetAGCInitValue(
7553 IN PRTMP_ADAPTER pAd,
7554 IN UCHAR BandWidth);
7556 int rt28xx_close(IN PNET_DEV dev);
7557 int rt28xx_open(IN PNET_DEV dev);
7559 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7561 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7562 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7564 if (VIRTUAL_IF_NUM(pAd) == 0)
7566 if (rt28xx_open(pAd->net_dev) != 0)
7567 return -1;
7569 else
7572 VIRTUAL_IF_INC(pAd);
7573 return 0;
7576 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7578 VIRTUAL_IF_DEC(pAd);
7579 if (VIRTUAL_IF_NUM(pAd) == 0)
7580 rt28xx_close(pAd->net_dev);
7581 return;
7585 #endif // __RTMP_H__