2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
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. *
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. *
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. *
25 *************************************************************************
31 Miniport generic portion header file
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
43 #include "link_list.h"
44 #include "spectrum_def.h"
47 #ifdef CONFIG_STA_SUPPORT
49 #endif // CONFIG_STA_SUPPORT //
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)
59 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
60 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
63 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
64 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
65 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
68 ////////////////////////////////////////////////////////////////////////////
69 // The TX_BUFFER structure forms the transmitted USB packet to the device
70 ////////////////////////////////////////////////////////////////////////////
71 typedef struct __TX_BUFFER{
73 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
74 HEADER_802_11 NullFrame;
75 PSPOLL_FRAME PsPollPacket;
78 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
79 } TX_BUFFER, *PTX_BUFFER;
81 typedef struct __HTTX_BUFFER{
83 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
84 HEADER_802_11 NullFrame;
85 PSPOLL_FRAME PsPollPacket;
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
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.
108 BOOLEAN bAggregatible;
109 UCHAR Header_802_3[LENGTH_802_3];
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
132 BOOLEAN bCopySavePad;
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
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;
152 PIRP pIrp;//used to cancel pending bulk in.
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
162 NDIS_SPIN_LOCK RxContextLock;
163 dma_addr_t data_dma; // urb dma on linux
164 } RX_CONTEXT, *PRX_CONTEXT;
169 // NDIS Version definitions
171 #ifdef NDIS50_MINIPORT
172 #define RTMP_NDIS_MAJOR_VERSION 5
173 #define RTMP_NDIS_MINOR_VERSION 0
176 #ifdef NDIS51_MINIPORT
177 #define RTMP_NDIS_MAJOR_VERSION 5
178 #define RTMP_NDIS_MINOR_VERSION 1
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];
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;
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;
245 extern UCHAR ExtHtCapIe;
246 #endif // DOT11N_DRAFT3 //
247 #endif // DOT11_N_SUPPORT //
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 DOT11_N_SUPPORT
288 struct reordering_mpdu
290 struct reordering_mpdu *next;
291 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
292 int Sequence; /* sequence number of MPDU */
296 struct reordering_list
298 struct reordering_mpdu *next;
302 struct reordering_mpdu_pool
306 struct reordering_list freelist;
308 #endif // DOT11_N_SUPPORT //
310 typedef struct _RSSI_SAMPLE {
311 CHAR LastRssi0; // last received RSSI
312 CHAR LastRssi1; // last received RSSI
313 CHAR LastRssi2; // last received RSSI
323 // Queue structure and macros
325 typedef struct _QUEUE_ENTRY {
326 struct _QUEUE_ENTRY *Next;
327 } QUEUE_ENTRY, *PQUEUE_ENTRY;
330 typedef struct _QUEUE_HEADER {
334 } QUEUE_HEADER, *PQUEUE_HEADER;
336 #define InitializeQueueHeader(QueueHeader) \
338 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
339 (QueueHeader)->Number = 0; \
342 #define RemoveHeadQueue(QueueHeader) \
343 (QueueHeader)->Head; \
345 PQUEUE_ENTRY pNext; \
346 if ((QueueHeader)->Head != NULL) \
348 pNext = (QueueHeader)->Head->Next; \
349 (QueueHeader)->Head = pNext; \
351 (QueueHeader)->Tail = NULL; \
352 (QueueHeader)->Number--; \
356 #define InsertHeadQueue(QueueHeader, QueueEntry) \
358 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
359 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
360 if ((QueueHeader)->Tail == NULL) \
361 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
362 (QueueHeader)->Number++; \
365 #define InsertTailQueue(QueueHeader, QueueEntry) \
367 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
368 if ((QueueHeader)->Tail) \
369 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
371 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
372 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
373 (QueueHeader)->Number++; \
377 // Macros for flag and ref count operations
379 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
380 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
381 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
382 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
383 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
385 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
386 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
387 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
389 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
390 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
391 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
393 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
394 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
395 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
397 #ifdef CONFIG_STA_SUPPORT
398 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
399 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
400 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
401 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
403 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
404 #endif // CONFIG_STA_SUPPORT //
406 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
407 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
410 #define INC_RING_INDEX(_idx, _RingSize) \
412 (_idx) = (_idx+1) % (_RingSize); \
415 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
417 #define RING_PACKET_INIT(_TxRing, _idx) \
419 _TxRing->Cell[_idx].pNdisPacket = NULL; \
420 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
423 #define TXDT_INIT(_TxD) \
425 NdisZeroMemory(_TxD, TXD_SIZE); \
429 //Set last data segment
430 #define RING_SET_LASTDS(_TxD, _IsSD0) \
432 if (_IsSD0) {_TxD->LastSec0 = 1;} \
433 else {_TxD->LastSec1 = 1;} \
436 // Increase TxTsc value for next transmission
438 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
439 // Should send a special event microsoft defined to request re-key
440 #define INC_TX_TSC(_tsc) \
443 while (++_tsc[i] == 0x0) \
451 #ifdef DOT11_N_SUPPORT
452 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
453 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
455 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
456 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
457 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
458 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
459 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
460 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
461 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
462 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
463 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
464 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
465 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
466 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
469 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
471 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
472 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
473 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
475 #endif // DOT11_N_SUPPORT //
478 // BBP & RF are using indirect access. Before write any value into it.
479 // We have to make sure there is no outstanding command pending via checking busy bit.
481 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
485 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
486 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
487 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
489 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
490 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
493 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
496 case 1: khz = 2412000; break; \
497 case 2: khz = 2417000; break; \
498 case 3: khz = 2422000; break; \
499 case 4: khz = 2427000; break; \
500 case 5: khz = 2432000; break; \
501 case 6: khz = 2437000; break; \
502 case 7: khz = 2442000; break; \
503 case 8: khz = 2447000; break; \
504 case 9: khz = 2452000; break; \
505 case 10: khz = 2457000; break; \
506 case 11: khz = 2462000; break; \
507 case 12: khz = 2467000; break; \
508 case 13: khz = 2472000; break; \
509 case 14: khz = 2484000; break; \
510 case 36: /* UNII */ khz = 5180000; break; \
511 case 40: /* UNII */ khz = 5200000; break; \
512 case 44: /* UNII */ khz = 5220000; break; \
513 case 48: /* UNII */ khz = 5240000; break; \
514 case 52: /* UNII */ khz = 5260000; break; \
515 case 56: /* UNII */ khz = 5280000; break; \
516 case 60: /* UNII */ khz = 5300000; break; \
517 case 64: /* UNII */ khz = 5320000; break; \
518 case 149: /* UNII */ khz = 5745000; break; \
519 case 153: /* UNII */ khz = 5765000; break; \
520 case 157: /* UNII */ khz = 5785000; break; \
521 case 161: /* UNII */ khz = 5805000; break; \
522 case 165: /* UNII */ khz = 5825000; break; \
523 case 100: /* HiperLAN2 */ khz = 5500000; break; \
524 case 104: /* HiperLAN2 */ khz = 5520000; break; \
525 case 108: /* HiperLAN2 */ khz = 5540000; break; \
526 case 112: /* HiperLAN2 */ khz = 5560000; break; \
527 case 116: /* HiperLAN2 */ khz = 5580000; break; \
528 case 120: /* HiperLAN2 */ khz = 5600000; break; \
529 case 124: /* HiperLAN2 */ khz = 5620000; break; \
530 case 128: /* HiperLAN2 */ khz = 5640000; break; \
531 case 132: /* HiperLAN2 */ khz = 5660000; break; \
532 case 136: /* HiperLAN2 */ khz = 5680000; break; \
533 case 140: /* HiperLAN2 */ khz = 5700000; break; \
534 case 34: /* Japan MMAC */ khz = 5170000; break; \
535 case 38: /* Japan MMAC */ khz = 5190000; break; \
536 case 42: /* Japan MMAC */ khz = 5210000; break; \
537 case 46: /* Japan MMAC */ khz = 5230000; break; \
538 case 184: /* Japan */ khz = 4920000; break; \
539 case 188: /* Japan */ khz = 4940000; break; \
540 case 192: /* Japan */ khz = 4960000; break; \
541 case 196: /* Japan */ khz = 4980000; break; \
542 case 208: /* Japan, means J08 */ khz = 5040000; break; \
543 case 212: /* Japan, means J12 */ khz = 5060000; break; \
544 case 216: /* Japan, means J16 */ khz = 5080000; break; \
545 default: khz = 2412000; break; \
549 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
552 case 2412000: ch = 1; break; \
553 case 2417000: ch = 2; break; \
554 case 2422000: ch = 3; break; \
555 case 2427000: ch = 4; break; \
556 case 2432000: ch = 5; break; \
557 case 2437000: ch = 6; break; \
558 case 2442000: ch = 7; break; \
559 case 2447000: ch = 8; break; \
560 case 2452000: ch = 9; break; \
561 case 2457000: ch = 10; break; \
562 case 2462000: ch = 11; break; \
563 case 2467000: ch = 12; break; \
564 case 2472000: ch = 13; break; \
565 case 2484000: ch = 14; break; \
566 case 5180000: ch = 36; /* UNII */ break; \
567 case 5200000: ch = 40; /* UNII */ break; \
568 case 5220000: ch = 44; /* UNII */ break; \
569 case 5240000: ch = 48; /* UNII */ break; \
570 case 5260000: ch = 52; /* UNII */ break; \
571 case 5280000: ch = 56; /* UNII */ break; \
572 case 5300000: ch = 60; /* UNII */ break; \
573 case 5320000: ch = 64; /* UNII */ break; \
574 case 5745000: ch = 149; /* UNII */ break; \
575 case 5765000: ch = 153; /* UNII */ break; \
576 case 5785000: ch = 157; /* UNII */ break; \
577 case 5805000: ch = 161; /* UNII */ break; \
578 case 5825000: ch = 165; /* UNII */ break; \
579 case 5500000: ch = 100; /* HiperLAN2 */ break; \
580 case 5520000: ch = 104; /* HiperLAN2 */ break; \
581 case 5540000: ch = 108; /* HiperLAN2 */ break; \
582 case 5560000: ch = 112; /* HiperLAN2 */ break; \
583 case 5580000: ch = 116; /* HiperLAN2 */ break; \
584 case 5600000: ch = 120; /* HiperLAN2 */ break; \
585 case 5620000: ch = 124; /* HiperLAN2 */ break; \
586 case 5640000: ch = 128; /* HiperLAN2 */ break; \
587 case 5660000: ch = 132; /* HiperLAN2 */ break; \
588 case 5680000: ch = 136; /* HiperLAN2 */ break; \
589 case 5700000: ch = 140; /* HiperLAN2 */ break; \
590 case 5170000: ch = 34; /* Japan MMAC */ break; \
591 case 5190000: ch = 38; /* Japan MMAC */ break; \
592 case 5210000: ch = 42; /* Japan MMAC */ break; \
593 case 5230000: ch = 46; /* Japan MMAC */ break; \
594 case 4920000: ch = 184; /* Japan */ break; \
595 case 4940000: ch = 188; /* Japan */ break; \
596 case 4960000: ch = 192; /* Japan */ break; \
597 case 4980000: ch = 196; /* Japan */ break; \
598 case 5040000: ch = 208; /* Japan, means J08 */ break; \
599 case 5060000: ch = 212; /* Japan, means J12 */ break; \
600 case 5080000: ch = 216; /* Japan, means J16 */ break; \
601 default: ch = 1; break; \
606 // Common fragment list structure - Identical to the scatter gather frag list structure
608 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
609 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
610 #define NIC_MAX_PHYS_BUF_COUNT 8
612 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
616 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
619 typedef struct _RTMP_SCATTER_GATHER_LIST {
620 ULONG NumberOfElements;
622 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
623 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
626 // Some utility macros
629 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
633 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
636 #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))))
638 #define INC_COUNTER64(Val) (Val.QuadPart++)
640 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
641 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
642 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
643 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
645 // Check LEAP & CCKM flags
646 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
647 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
649 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
650 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
652 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
654 _pExtraLlcSnapEncap = SNAP_802_1H; \
655 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
656 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
658 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
663 _pExtraLlcSnapEncap = NULL; \
667 // New Define for new Tx Path.
668 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
670 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
672 _pExtraLlcSnapEncap = SNAP_802_1H; \
673 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
674 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
676 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
681 _pExtraLlcSnapEncap = NULL; \
686 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
688 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
689 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
690 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
693 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
694 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
695 // else remove the LLC/SNAP field from the result Ethernet frame
696 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
698 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
699 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
700 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
704 _pRemovedLLCSNAP = NULL; \
705 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
706 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
708 PUCHAR pProto = _pData + 6; \
710 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
711 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
713 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
714 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
715 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
719 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
720 _pRemovedLLCSNAP = _pData; \
721 _DataSize -= LENGTH_802_1_H; \
722 _pData += LENGTH_802_1_H; \
727 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
728 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
729 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
733 #define SWITCH_AB( _pAA, _pBB) \
741 // Enqueue this frame to MLME engine
742 // We need to enqueue the whole frame because MLME need to pass data type
743 // information from 802.11 header
745 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
747 UINT32 High32TSF=0, Low32TSF=0; \
748 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
752 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
753 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
755 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
756 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
759 // Check if it is Japan W53(ch52,56,60,64) channel.
761 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
763 #ifdef CONFIG_STA_SUPPORT
764 #define STA_PORT_SECURED(_pAd) \
766 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
767 NdisAcquireSpinLock(&_pAd->MacTabLock); \
768 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
769 NdisReleaseSpinLock(&_pAd->MacTabLock); \
771 #endif // CONFIG_STA_SUPPORT //
775 // Register set pair for initialzation register set definition
777 typedef struct _RTMP_REG_PAIR
781 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
783 typedef struct _REG_PAIR
787 } REG_PAIR, *PREG_PAIR;
790 // Register set pair for initialzation register set definition
792 typedef struct _RTMP_RF_REGS
799 } RTMP_RF_REGS, *PRTMP_RF_REGS;
801 typedef struct _FREQUENCY_ITEM {
806 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
809 // Data buffer for DMA operation, the buffer must be contiguous physical memory
810 // Both DMA to / from CPU use the same structure.
812 typedef struct _RTMP_DMABUF
815 PVOID AllocVa; // TxBuf virtual address
816 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
817 } RTMP_DMABUF, *PRTMP_DMABUF;
820 typedef union _HEADER_802_11_SEQ{
833 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
836 // Data buffer for DMA operation, the buffer must be contiguous physical memory
837 // Both DMA to / from CPU use the same structure.
839 typedef struct _RTMP_REORDERBUF
842 PVOID AllocVa; // TxBuf virtual address
843 UCHAR Header802_3[14];
844 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
851 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
854 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
855 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
856 // which won't be released, driver has to wait until upper layer return the packet
857 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
858 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
859 // which driver should ACK upper layer when the tx is physically done or failed.
861 typedef struct _RTMP_DMACB
863 ULONG AllocSize; // Control block size
864 PVOID AllocVa; // Control block virtual address
865 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
866 PNDIS_PACKET pNdisPacket;
867 PNDIS_PACKET pNextNdisPacket;
869 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
870 } RTMP_DMACB, *PRTMP_DMACB;
872 typedef struct _RTMP_TX_BUF
876 ULONG AllocSize; // Control block size
877 PVOID AllocVa; // Control block virtual address
878 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
879 } RTMP_TXBUF, *PRTMP_TXBUF;
881 typedef struct _RTMP_RX_BUF
885 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
886 } RTMP_RXBUF, *PRTMP_RXBUF;
887 typedef struct _RTMP_TX_RING
889 RTMP_DMACB Cell[TX_RING_SIZE];
892 UINT32 TxSwFreeIdx; // software next free tx index
893 } RTMP_TX_RING, *PRTMP_TX_RING;
895 typedef struct _RTMP_RX_RING
897 RTMP_DMACB Cell[RX_RING_SIZE];
900 INT32 RxSwReadIdx; // software next read index
901 } RTMP_RX_RING, *PRTMP_RX_RING;
903 typedef struct _RTMP_MGMT_RING
905 RTMP_DMACB Cell[MGMT_RING_SIZE];
908 UINT32 TxSwFreeIdx; // software next free tx index
909 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
912 // Statistic counter structure
914 typedef struct _COUNTER_802_3
924 ULONG RcvAlignmentErrors;
926 ULONG MoreCollisions;
928 } COUNTER_802_3, *PCOUNTER_802_3;
930 typedef struct _COUNTER_802_11 {
932 LARGE_INTEGER LastTransmittedFragmentCount;
933 LARGE_INTEGER TransmittedFragmentCount;
934 LARGE_INTEGER MulticastTransmittedFrameCount;
935 LARGE_INTEGER FailedCount;
936 LARGE_INTEGER RetryCount;
937 LARGE_INTEGER MultipleRetryCount;
938 LARGE_INTEGER RTSSuccessCount;
939 LARGE_INTEGER RTSFailureCount;
940 LARGE_INTEGER ACKFailureCount;
941 LARGE_INTEGER FrameDuplicateCount;
942 LARGE_INTEGER ReceivedFragmentCount;
943 LARGE_INTEGER MulticastReceivedFrameCount;
944 LARGE_INTEGER FCSErrorCount;
945 } COUNTER_802_11, *PCOUNTER_802_11;
947 typedef struct _COUNTER_RALINK {
948 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
949 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
950 ULONG BeenDisassociatedCount;
951 ULONG BadCQIAutoRecoveryCount;
952 ULONG PoorCQIRoamingCount;
953 ULONG MgmtRingFullCount;
954 ULONG RxCountSinceLastNULL;
956 ULONG RxRingErrCount;
958 ULONG TxRingErrCount;
959 LARGE_INTEGER RealFcsErrCount;
960 ULONG PendingNdisPacketCount;
962 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
963 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
964 UINT32 OneSecTxDoneCount;
966 UINT32 OneSecTxAggregationCount;
967 UINT32 OneSecRxAggregationCount;
969 UINT32 OneSecFrameDuplicateCount;
972 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
975 UINT32 OneSecTxNoRetryOkCount;
976 UINT32 OneSecTxRetryOkCount;
977 UINT32 OneSecTxFailCount;
978 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
979 UINT32 OneSecRxOkCnt; // RX without error
980 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
981 UINT32 OneSecRxFcsErrCnt; // CRC error
982 UINT32 OneSecBeaconSentCnt;
983 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
984 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
988 ULONG TxAgg1MPDUCount;
989 ULONG TxAgg2MPDUCount;
990 ULONG TxAgg3MPDUCount;
991 ULONG TxAgg4MPDUCount;
992 ULONG TxAgg5MPDUCount;
993 ULONG TxAgg6MPDUCount;
994 ULONG TxAgg7MPDUCount;
995 ULONG TxAgg8MPDUCount;
996 ULONG TxAgg9MPDUCount;
997 ULONG TxAgg10MPDUCount;
998 ULONG TxAgg11MPDUCount;
999 ULONG TxAgg12MPDUCount;
1000 ULONG TxAgg13MPDUCount;
1001 ULONG TxAgg14MPDUCount;
1002 ULONG TxAgg15MPDUCount;
1003 ULONG TxAgg16MPDUCount;
1005 LARGE_INTEGER TransmittedOctetsInAMSDU;
1006 LARGE_INTEGER TransmittedAMSDUCount;
1007 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1008 LARGE_INTEGER ReceivedAMSDUCount;
1009 LARGE_INTEGER TransmittedAMPDUCount;
1010 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1011 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1012 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1013 } COUNTER_RALINK, *PCOUNTER_RALINK;
1015 typedef struct _PID_COUNTER {
1016 ULONG TxAckRequiredCount; // CRC error
1018 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1019 ULONG LastSuccessRate;
1020 } PID_COUNTER, *PPID_COUNTER;
1022 typedef struct _COUNTER_DRS {
1023 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1024 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1025 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1026 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1027 ULONG CurrTxRateStableTime; // # of second in current TX rate
1028 BOOLEAN fNoisyEnvironment;
1029 BOOLEAN fLastSecAccordingRSSI;
1030 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1031 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1032 ULONG LastTxOkCount;
1033 } COUNTER_DRS, *PCOUNTER_DRS;
1036 // Arcfour Structure Added by PaulWu
1038 typedef struct _ARCFOUR
1043 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1045 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1046 typedef struct _RECEIVE_SETTING {
1047 #ifdef RT_BIG_ENDIAN
1051 USHORT STBC:2; //SPACE
1053 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1054 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1056 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1057 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1059 USHORT STBC:2; //SPACE
1064 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1066 // Shared key data structure
1067 typedef struct _WEP_KEY {
1068 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1069 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1070 } WEP_KEY, *PWEP_KEY;
1072 typedef struct _CIPHER_KEY {
1073 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1074 UCHAR RxMic[8]; // make alignment
1076 UCHAR TxTsc[6]; // 48bit TSC value
1077 UCHAR RxTsc[6]; // 48bit TSC value
1078 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1080 #ifdef CONFIG_STA_SUPPORT
1082 #endif // CONFIG_STA_SUPPORT //
1083 // Key length for each key, 0: entry is invalid
1084 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1085 } CIPHER_KEY, *PCIPHER_KEY;
1087 typedef struct _BBP_TUNING_STRUCT {
1089 UCHAR FalseCcaCountUpperBound; // 100 per sec
1090 UCHAR FalseCcaCountLowerBound; // 10 per sec
1091 UCHAR R17LowerBound; // specified in E2PROM
1092 UCHAR R17UpperBound; // 0x68 according to David Tung
1093 UCHAR CurrentR17Value;
1094 } BBP_TUNING, *PBBP_TUNING;
1096 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1097 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1098 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1099 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1100 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1101 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1102 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1103 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1104 SHORT Pair1LastAvgRssi; //
1105 SHORT Pair2LastAvgRssi; //
1106 ULONG RcvPktNumWhenEvaluate;
1107 BOOLEAN FirstPktArrivedWhenEvaluate;
1108 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1109 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1111 typedef struct _LEAP_AUTH_INFO {
1112 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1113 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1115 UCHAR UserName[256]; //LEAP, User name
1117 UCHAR Password[256]; //LEAP, User Password
1119 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1122 UCHAR Addr[MAC_ADDR_LEN];
1123 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1124 //00 02-Authentication timeout
1125 //00 03-Challenge from AP failed
1126 //00 04-Challenge to AP failed
1128 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1132 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1133 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1139 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1142 // Receive Tuple Cache Format
1144 typedef struct _TUPLE_CACHE {
1146 UCHAR MacAddress[MAC_ADDR_LEN];
1149 } TUPLE_CACHE, *PTUPLE_CACHE;
1152 // Fragment Frame structure
1154 typedef struct _FRAGMENT_FRAME {
1155 PNDIS_PACKET pFragPacket;
1159 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1160 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1164 // Packet information for NdisQueryPacket
1166 typedef struct _PACKET_INFO {
1167 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1168 UINT BufferCount ; // Number of Buffer descriptor chained
1169 UINT TotalPacketLength ; // Self explained
1170 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1171 } PACKET_INFO, *PPACKET_INFO;
1174 // Tkip Key structure which RC4 key & MIC calculation
1176 typedef struct _TKIP_KEY_INFO {
1177 UINT nBytesInM; // # bytes in M for MICKEY
1180 ULONG K0; // for MICKEY Low
1181 ULONG K1; // for MICKEY Hig
1182 ULONG L; // Current state for MICKEY
1183 ULONG R; // Current state for MICKEY
1184 ULONG M; // Message accumulator for MICKEY
1187 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1190 // Private / Misc data, counters for driver internal use
1192 typedef struct __PRIVATE_STRUC {
1193 UINT SystemResetCnt; // System reset counter
1194 UINT TxRingFullCnt; // Tx ring full occurrance number
1195 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1196 // Variables for WEP encryption / decryption in rtmp_wep.c
1198 ARCFOURCONTEXT WEPCONTEXT;
1202 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1204 // structure to tune BBP R66 (BBP TUNING)
1205 typedef struct _BBP_R66_TUNING {
1207 USHORT FalseCcaLowerThreshold; // default 100
1208 USHORT FalseCcaUpperThreshold; // default 512
1210 UCHAR R66CurrentValue;
1211 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1212 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1214 // structure to store channel TX power
1215 typedef struct _CHANNEL_TX_POWER {
1216 USHORT RemainingTimeForUse; //unit: sec
1218 #ifdef DOT11N_DRAFT3
1219 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1220 #endif // DOT11N_DRAFT3 //
1225 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1227 // structure to store 802.11j channel TX power
1228 typedef struct _CHANNEL_11J_TX_POWER {
1230 UCHAR BW; // BW_10 or BW_20
1233 USHORT RemainingTimeForUse; //unit: sec
1234 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1236 typedef enum _ABGBAND_STATE_ {
1242 typedef struct _MLME_STRUCT {
1243 #ifdef CONFIG_STA_SUPPORT
1244 // STA state machines
1245 STATE_MACHINE CntlMachine;
1246 STATE_MACHINE AssocMachine;
1247 STATE_MACHINE AuthMachine;
1248 STATE_MACHINE AuthRspMachine;
1249 STATE_MACHINE SyncMachine;
1250 STATE_MACHINE WpaPskMachine;
1251 STATE_MACHINE LeapMachine;
1252 STATE_MACHINE AironetMachine;
1253 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1254 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1255 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1256 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1257 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1258 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1259 #endif // CONFIG_STA_SUPPORT //
1260 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1262 STATE_MACHINE ActMachine;
1264 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1265 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1266 ULONG LastSendNULLpsmTime;
1269 NDIS_SPIN_LOCK TaskLock;
1274 RALINK_TIMER_STRUCT PeriodicTimer;
1275 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1276 RALINK_TIMER_STRUCT LinkDownTimer;
1277 RALINK_TIMER_STRUCT LinkUpTimer;
1278 ULONG PeriodicRound;
1279 ULONG OneSecPeriodicRound;
1282 BOOLEAN bLowThroughput;
1283 BOOLEAN bEnableAutoAntennaCheck;
1284 RALINK_TIMER_STRUCT RxAntEvalTimer;
1287 UCHAR CaliBW40RfR24;
1288 UCHAR CaliBW20RfR24;
1291 } MLME_STRUCT, *PMLME_STRUCT;
1293 // structure for radar detection and channel switch
1294 typedef struct _RADAR_DETECT_STRUCT {
1295 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1296 UCHAR CSCount; //Channel switch counter
1297 UCHAR CSPeriod; //Channel switch period (beacon count)
1298 UCHAR RDCount; //Radar detection counter
1299 UCHAR RDMode; //Radar Detection mode
1300 UCHAR RDDurRegion; //Radar detection duration region
1307 ULONG InServiceMonitorCount; // unit: sec
1308 UINT8 DfsSessionTime;
1311 UINT8 LongPulseRadarTh;
1312 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1314 typedef enum _REC_BLOCKACK_STATUS
1318 Recipient_HandleRes,
1320 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1322 typedef enum _ORI_BLOCKACK_STATUS
1328 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1330 #ifdef DOT11_N_SUPPORT
1331 typedef struct _BA_ORI_ENTRY{
1336 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1338 USHORT TimeOutValue;
1339 ORI_BLOCKACK_STATUS ORI_BA_Status;
1340 RALINK_TIMER_STRUCT ORIBATimer;
1342 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1344 typedef struct _BA_REC_ENTRY {
1347 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1349 //UCHAR Curindidx; // the head in the RX reordering buffer
1351 // USHORT LastIndSeqAtTimer;
1352 USHORT TimeOutValue;
1353 RALINK_TIMER_STRUCT RECBATimer;
1354 ULONG LastIndSeqAtTimer;
1357 REC_BLOCKACK_STATUS REC_BA_Status;
1358 // UCHAR RxBufIdxUsed;
1359 // corresponding virtual address for RX reordering packet storage.
1360 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1361 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1362 // struct _BA_REC_ENTRY *pNext;
1364 struct reordering_list list;
1365 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1369 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1370 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1371 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1372 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1373 } BA_TABLE, *PBA_TABLE;
1375 //For QureyBATableOID use;
1376 typedef struct PACKED _OID_BA_REC_ENTRY{
1377 UCHAR MACAddr[MAC_ADDR_LEN];
1378 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1381 REC_BLOCKACK_STATUS REC_BA_Status[8];
1382 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1384 //For QureyBATableOID use;
1385 typedef struct PACKED _OID_BA_ORI_ENTRY{
1386 UCHAR MACAddr[MAC_ADDR_LEN];
1387 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
1390 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1391 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1393 typedef struct _QUERYBA_TABLE{
1394 OID_BA_ORI_ENTRY BAOriEntry[32];
1395 OID_BA_REC_ENTRY BARecEntry[32];
1396 UCHAR OriNum;// Number of below BAOriEntry
1397 UCHAR RecNum;// Number of below BARecEntry
1398 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1400 typedef union _BACAP_STRUC {
1401 #ifdef RT_BIG_ENDIAN
1404 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.
1405 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1406 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1407 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1408 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1409 UINT32 MpduDensity:3;
1410 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1411 UINT32 AutoBA:1; // automatically BA
1412 UINT32 TxBAWinLimit:8;
1413 UINT32 RxBAWinLimit:8;
1417 UINT32 RxBAWinLimit:8;
1418 UINT32 TxBAWinLimit:8;
1419 UINT32 AutoBA:1; // automatically BA
1420 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1421 UINT32 MpduDensity:3;
1422 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1423 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1424 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1425 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1426 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.
1431 } BACAP_STRUC, *PBACAP_STRUC;
1432 #endif // DOT11_N_SUPPORT //
1434 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1435 typedef struct _IOT_STRUC {
1437 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1438 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1439 ULONG OneSecInWindowCount;
1440 ULONG OneSecFrameDuplicateCount;
1441 ULONG OneSecOutWindowCount;
1446 BOOLEAN bRTSLongProtOn;
1447 #ifdef CONFIG_STA_SUPPORT
1448 BOOLEAN bLastAtheros;
1449 BOOLEAN bCurrentAtheros;
1450 BOOLEAN bNowAtherosBurstOn;
1451 BOOLEAN bNextDisableRxBA;
1453 #endif // CONFIG_STA_SUPPORT //
1454 } IOT_STRUC, *PIOT_STRUC;
1456 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1457 typedef union _REG_TRANSMIT_SETTING {
1458 #ifdef RT_BIG_ENDIAN
1464 UINT32 STBC:1; //SPACE
1466 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1467 UINT32 TxBF:1; // 3*3
1469 //UINT32 MCS:7; // MCS
1475 //UINT32 MCS:7; // MCS
1478 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1480 UINT32 STBC:1; //SPACE
1488 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1490 typedef union _DESIRED_TRANSMIT_SETTING {
1491 #ifdef RT_BIG_ENDIAN
1494 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1496 USHORT MCS:7; // MCS
1500 USHORT MCS:7; // MCS
1502 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1507 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1510 BOOLEAN IsRecipient;
1511 UCHAR MACAddr[MAC_ADDR_LEN];
1515 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1516 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1519 // Multiple SSID structure
1521 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1522 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1524 /* clear bcmc TIM bit */
1525 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1526 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1528 /* set bcmc TIM bit */
1529 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1530 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1532 /* clear a station PS TIM bit */
1533 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1534 { UCHAR tim_offset = wcid >> 3; \
1535 UCHAR bit_offset = wcid & 0x7; \
1536 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1538 /* set a station PS TIM bit */
1539 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1540 { UCHAR tim_offset = wcid >> 3; \
1541 UCHAR bit_offset = wcid & 0x7; \
1542 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1545 #define BEACON_BITMAP_MASK 0xff
1546 typedef struct _BEACON_SYNC_STRUCT_
1548 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1549 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1550 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1551 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1552 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1553 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1554 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1555 }BEACON_SYNC_STRUCT;
1558 typedef struct _MULTISSID_STRUCT {
1559 UCHAR Bssid[MAC_ADDR_LEN];
1561 CHAR Ssid[MAX_LEN_OF_SSID];
1562 USHORT CapabilityInfo;
1566 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1567 NDIS_802_11_WEP_STATUS WepStatus;
1568 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1569 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1573 ULONG ReceivedByteCount;
1574 ULONG TransmittedByteCount;
1578 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1579 RT_HT_PHY_INFO DesiredHtPhyInfo;
1580 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1581 BOOLEAN bAutoTxRateSwitch;
1583 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1586 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1587 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1588 UCHAR DesiredRatesIndex;
1589 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1591 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1592 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1593 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1603 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1604 UCHAR BANClass3Data;
1605 ULONG IsolateInterStaTraffic;
1608 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1611 UCHAR TimIELocationInBeacon;
1612 UCHAR CapabilityInfoLocationInBeacon;
1613 // outgoing BEACON frame buffer and corresponding TXWI
1614 // PTXWI_STRUC BeaconTxWI; //
1615 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1618 UINT16 StationKeepAliveTime; // unit: second
1621 USHORT VLAN_Priority;
1623 RT_802_11_ACL AccessControlList;
1626 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1627 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1629 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1631 // For 802.1x daemon setting per BSS
1632 UCHAR radius_srv_num;
1633 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1636 unsigned int mylinkid;
1640 UINT32 RcvdConflictSsidCount;
1641 UINT32 RcvdSpoofedAssocRespCount;
1642 UINT32 RcvdSpoofedReassocRespCount;
1643 UINT32 RcvdSpoofedProbeRespCount;
1644 UINT32 RcvdSpoofedBeaconCount;
1645 UINT32 RcvdSpoofedDisassocCount;
1646 UINT32 RcvdSpoofedAuthCount;
1647 UINT32 RcvdSpoofedDeauthCount;
1648 UINT32 RcvdSpoofedUnknownMgmtCount;
1649 UINT32 RcvdReplayAttackCount;
1651 CHAR RssiOfRcvdConflictSsid;
1652 CHAR RssiOfRcvdSpoofedAssocResp;
1653 CHAR RssiOfRcvdSpoofedReassocResp;
1654 CHAR RssiOfRcvdSpoofedProbeResp;
1655 CHAR RssiOfRcvdSpoofedBeacon;
1656 CHAR RssiOfRcvdSpoofedDisassoc;
1657 CHAR RssiOfRcvdSpoofedAuth;
1658 CHAR RssiOfRcvdSpoofedDeauth;
1659 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1660 CHAR RssiOfRcvdReplayAttack;
1664 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1668 #ifdef DOT11N_DRAFT3
1669 typedef enum _BSS2040COEXIST_FLAG{
1670 BSS_2040_COEXIST_DISABLE = 0,
1671 BSS_2040_COEXIST_TIMER_FIRED = 1,
1672 BSS_2040_COEXIST_INFO_SYNC = 2,
1673 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1674 }BSS2040COEXIST_FLAG;
1675 #endif // DOT11N_DRAFT3 //
1677 // configuration common to OPMODE_AP as well as OPMODE_STA
1678 typedef struct _COMMON_CONFIG {
1680 BOOLEAN bCountryFlag;
1681 UCHAR CountryCode[3];
1683 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1684 UCHAR CountryRegionForABand; // Enum of country region for A band
1685 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1686 USHORT Dsifs; // in units of usec
1687 ULONG PacketFilter; // Packet filter for receiving
1689 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1690 UCHAR SsidLen; // the actual ssid length in used
1691 UCHAR LastSsidLen; // the actual ssid length in used
1692 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1693 UCHAR LastBssid[MAC_ADDR_LEN];
1695 UCHAR Bssid[MAC_ADDR_LEN];
1696 USHORT BeaconPeriod;
1698 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1700 #if 0 // move to STA_ADMIN_CONFIG
1703 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1704 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1705 NDIS_802_11_WEP_STATUS WepStatus;
1706 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1708 // Add to support different cipher suite for WPA2/WPA mode
1709 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1710 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1711 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1712 USHORT RsnCapability;
1714 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1717 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1719 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1721 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1722 UCHAR MaxDesiredRate;
1723 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1725 ULONG BasicRateBitmap; // backup basic ratebitmap
1727 BOOLEAN bAPSDCapable;
1728 BOOLEAN bInServicePeriod;
1733 BOOLEAN bNeedSendTriggerFrame;
1734 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1735 ULONG TriggerTimerCount;
1737 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1738 // move to MULTISSID_STRUCT for MBSS
1739 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1740 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1741 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1742 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1743 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1744 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1745 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1746 //BOOLEAN bAutoTxRateSwitch;
1747 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1748 UCHAR RtsRate; // RATE_xxx
1749 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1750 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1751 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1753 USHORT RtsThreshold; // in unit of BYTE
1754 USHORT FragmentThreshold; // in unit of BYTE
1756 UCHAR TxPower; // in unit of mW
1757 ULONG TxPowerPercentage; // 0~100 %
1758 ULONG TxPowerDefault; // keep for TxPowerPercentage
1760 #ifdef DOT11_N_SUPPORT
1761 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1762 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1763 #endif // DOT11_N_SUPPORT //
1764 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1765 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1766 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1767 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1768 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1769 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1770 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1771 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1772 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1773 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1775 #ifdef DOT11_N_SUPPORT
1777 #endif // DOT11_N_SUPPORT //
1778 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1779 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1780 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1781 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1782 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1783 #ifdef CONFIG_STA_SUPPORT
1784 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1785 #endif // CONFIG_STA_SUPPORT //
1786 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1787 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1788 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1789 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1790 ULONG OpStatusFlags;
1792 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1793 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1795 // IEEE802.11H--DFS.
1796 RADAR_DETECT_STRUCT RadarDetect;
1798 #ifdef DOT11_N_SUPPORT
1800 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1801 //RT_HT_CAPABILITY SupportedHtPhy;
1802 RT_HT_CAPABILITY DesiredHtPhy;
1803 HT_CAPABILITY_IE HtCapability;
1804 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1805 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1806 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1807 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
1809 #ifdef DOT11N_DRAFT3
1810 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1811 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1813 //This IE is used for 20/40 BSS Coexistence.
1814 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1815 // ====== 11n D3.0 =======================>
1816 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1817 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1818 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1819 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1820 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1821 USHORT Dot11BssWidthChanTranDelayFactor;
1822 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1824 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1825 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1827 NDIS_SPIN_LOCK TriggerEventTabLock;
1828 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1829 BSS_2040_COEXIST_IE BSSCoexist2040;
1830 TRIGGER_EVENT_TAB TriggerEventTab;
1831 UCHAR ChannelListIdx;
1832 // <====== 11n D3.0 =======================
1833 BOOLEAN bOverlapScanning;
1834 #endif // DOT11N_DRAFT3 //
1837 BOOLEAN bMIMOPSEnable;
1839 BOOLEAN bDisableReordering;
1840 BOOLEAN bForty_Mhz_Intolerant;
1841 BOOLEAN bExtChannelSwitchAnnouncement;
1842 BOOLEAN bRcvBSSWidthTriggerEvents;
1843 ULONG LastRcvBSSWidthTriggerEventsTime;
1846 #endif // DOT11_N_SUPPORT //
1848 // Enable wireless event
1849 BOOLEAN bWirelessEvent;
1850 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1852 // Tx & Rx Stream number selection
1856 // transmit phy mode, trasmit rate for Multicast.
1857 #ifdef MCAST_RATE_SPECIFIC
1858 UCHAR McastTransmitMcs;
1859 UCHAR McastTransmitPhyMode;
1860 #endif // MCAST_RATE_SPECIFIC //
1862 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1865 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1866 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1867 RT_HT_CAPABILITY SupportedHtPhy;
1868 ULONG MaxPktOneTxBulk;
1872 BEACON_SYNC_STRUCT *pBeaconSync;
1873 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1874 UINT32 BeaconAdjust;
1875 UINT32 BeaconFactor;
1876 UINT32 BeaconRemain;
1880 NDIS_SPIN_LOCK MeasureReqTabLock;
1881 PMEASURE_REQ_TAB pMeasureReqTab;
1883 NDIS_SPIN_LOCK TpcReqTabLock;
1884 PTPC_REQ_TAB pTpcReqTab;
1886 // transmit phy mode, trasmit rate for Multicast.
1887 #ifdef MCAST_RATE_SPECIFIC
1888 HTTRANSMIT_SETTING MCastPhyMode;
1889 #endif // MCAST_RATE_SPECIFIC //
1892 UINT16 DefineMaxTxPwr;
1893 #endif // SINGLE_SKU //
1896 } COMMON_CONFIG, *PCOMMON_CONFIG;
1899 #ifdef CONFIG_STA_SUPPORT
1900 /* Modified by Wu Xi-Kun 4/21/2006 */
1901 // STA configuration and status
1902 typedef struct _STA_ADMIN_CONFIG {
1904 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1905 // the user intended configuration, but not necessary fully equal to the final
1906 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1907 // AP or IBSS holder).
1908 // Once initialized, user configuration can only be changed via OID_xxx
1909 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1910 USHORT AtimWin; // used when starting a new IBSS
1913 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1914 // the user intended configuration, and should be always applied to the final
1915 // settings in ACTIVE BSS without compromising with the BSS holder.
1916 // Once initialized, user configuration can only be changed via OID_xxx
1918 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1919 USHORT DefaultListenCount; // default listen count;
1920 ULONG WindowsPowerMode; // Power mode for AC power
1921 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1922 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1923 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1924 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1926 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1927 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1928 USHORT DisassocReason;
1929 UCHAR DisassocSta[MAC_ADDR_LEN];
1930 USHORT DeauthReason;
1931 UCHAR DeauthSta[MAC_ADDR_LEN];
1932 USHORT AuthFailReason;
1933 UCHAR AuthFailSta[MAC_ADDR_LEN];
1935 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1936 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1937 NDIS_802_11_WEP_STATUS WepStatus;
1938 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1940 // Add to support different cipher suite for WPA2/WPA mode
1941 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1942 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1943 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1944 USHORT RsnCapability;
1946 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1948 UCHAR PMK[32]; // WPA PSK mode PMK
1949 UCHAR PTK[64]; // WPA PSK mode PTK
1950 UCHAR GTK[32]; // GTK from authenticator
1951 BSSID_INFO SavedPMK[PMKID_NO];
1952 UINT SavedPMKNum; // Saved PMKID number
1957 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1960 // For WPA countermeasures
1961 ULONG LastMicErrorTime; // record last MIC error time
1962 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1963 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1964 // For WPA-PSK supplicant state
1965 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1966 UCHAR ReplayCounter[8];
1967 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1968 UCHAR SNonce[32]; // SNonce for WPA-PSK
1970 UCHAR LastSNR0; // last received BEACON's SNR
1971 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1972 RSSI_SAMPLE RssiSample;
1973 ULONG NumOfAvgRssiSample;
1975 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1976 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1977 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1978 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1980 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1981 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1982 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1983 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1984 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1985 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1986 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1989 // New for WPA, windows want us to to keep association information and
1990 // Fixed IEs from last association response
1991 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1992 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1993 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1994 USHORT ResVarIELen; // Length of next VIE include EID & Length
1995 UCHAR ResVarIEs[MAX_VIE_LEN];
1998 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2000 // New variables used for CCX 1.0
2002 BOOLEAN bCkipCmicOn;
2004 UCHAR GIV[3]; //for CCX iv
2009 LEAP_AUTH_INFO LeapAuthInfo;
2011 UCHAR NetworkChallenge[8];
2012 UCHAR NetworkChallengeResponse[24];
2013 UCHAR PeerChallenge[8];
2015 UCHAR PeerChallengeResponse[24];
2016 UCHAR SessionKey[16]; //Network session keys (NSK)
2017 RALINK_TIMER_STRUCT LeapAuthTimer;
2018 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2020 // New control flags for CCX
2021 CCX_CONTROL CCXControl; // Master administration state
2022 BOOLEAN CCXEnable; // Actual CCX state
2023 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2024 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2025 UCHAR CCXReqType; // Current processing CCX request type
2026 BSS_TABLE CCXBssTab; // BSS Table
2027 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2028 USHORT FrameReportLen; // Current Frame report length
2029 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2030 USHORT RPIDensity[8]; // Array for RPI density collection
2031 // Start address of each BSS table within FrameReportBuf
2032 // It's important to update the RxPower of the corresponding Bss
2033 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2034 USHORT BeaconToken; // Token for beacon report
2035 ULONG LastBssIndex; // Most current reported Bss index
2036 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2037 UCHAR RMReqCnt; // Number of measurement request saved.
2038 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2039 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2040 // It must be the same channel with maximum duration
2041 USHORT ParallelDuration; // Maximum duration for parallel measurement
2042 UCHAR ParallelChannel; // Only one channel with parallel measurement
2043 USHORT IAPPToken; // IAPP dialog token
2044 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2045 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2046 // Hack for channel load and noise histogram parameters
2047 UCHAR NHFactor; // Parameter for Noise histogram
2048 UCHAR CLFactor; // Parameter for channel load
2050 UCHAR KRK[16]; //Key Refresh Key.
2051 UCHAR BTK[32]; //Base Transient Key
2052 BOOLEAN CCKMLinkUpFlag;
2053 ULONG CCKMRN; //(Re)Association request number.
2054 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2055 UCHAR AironetCellPowerLimit; //in dBm
2056 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2057 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2058 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2059 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2060 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2061 USHORT CCXAdjacentAPChannel;
2062 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2064 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2065 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2067 UCHAR DtimCount; // 0.. DtimPeriod-1
2068 UCHAR DtimPeriod; // default = 3
2070 ////////////////////////////////////////////////////////////////////////////////////////
2071 // This is only for WHQL test.
2073 ////////////////////////////////////////////////////////////////////////////////////////
2075 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2077 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2078 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2080 #ifdef WPA_SUPPLICANT_SUPPORT
2082 BOOLEAN IEEE8021x_required_keys;
2083 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2084 UCHAR DesireSharedKeyId;
2086 // 0: driver ignores wpa_supplicant
2087 // 1: wpa_supplicant initiates scanning and AP selection
2088 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2089 UCHAR WpaSupplicantUP;
2090 UCHAR WpaSupplicantScanCount;
2091 #endif // WPA_SUPPLICANT_SUPPORT //
2096 BOOLEAN bTGnWifiTest;
2097 BOOLEAN bScanReqIsFromWebUI;
2099 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2100 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2101 RT_HT_PHY_INFO DesiredHtPhyInfo;
2102 BOOLEAN bAutoTxRateSwitch;
2105 #ifdef EXT_BUILD_CHANNEL_LIST
2106 UCHAR IEEE80211dClientMode;
2107 UCHAR StaOriCountryCode[3];
2108 UCHAR StaOriGeography;
2109 #endif // EXT_BUILD_CHANNEL_LIST //
2110 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2112 // This data structure keep the current active BSS/IBSS's configuration that this STA
2113 // had agreed upon joining the network. Which means these parameters are usually decided
2114 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2115 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2116 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2117 // the current active settings.
2118 typedef struct _STA_ACTIVE_CONFIG {
2120 USHORT AtimWin; // in kusec; IBSS parameter set element
2121 USHORT CapabilityInfo;
2122 USHORT CfpMaxDuration;
2125 // Copy supported rate from desired AP's beacon. We are trying to match
2126 // AP's supported and extended rate settings.
2127 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2128 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2131 // Copy supported ht from desired AP's beacon. We are trying to match
2132 RT_HT_PHY_INFO SupportedPhyInfo;
2133 RT_HT_CAPABILITY SupportedHtPhy;
2134 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2137 // for USB interface, avoid in interrupt when write key
2138 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2139 NDIS_802_11_MAC_ADDRESS MacAddr;
2140 USHORT MacTabMatchWCID; // ASIC
2141 CIPHER_KEY CipherKey;
2142 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2144 #endif // CONFIG_STA_SUPPORT //
2146 // ----------- start of AP --------------------------
2147 // AUTH-RSP State Machine Aux data structure
2148 typedef struct _AP_MLME_AUX {
2149 UCHAR Addr[MAC_ADDR_LEN];
2151 CHAR Challenge[CIPHER_TEXT_LEN];
2152 } AP_MLME_AUX, *PAP_MLME_AUX;
2154 // structure to define WPA Group Key Rekey Interval
2155 typedef struct PACKED _RT_802_11_WPA_REKEY {
2156 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2157 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2158 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2160 typedef struct _MAC_TABLE_ENTRY {
2161 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2162 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2163 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2164 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2165 BOOLEAN ValidAsMesh;
2166 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2168 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2170 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2172 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2173 UCHAR CMTimerRunning;
2174 UCHAR apidx; // MBSS number
2176 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2177 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2178 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2181 RALINK_TIMER_STRUCT RetryTimer;
2182 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2183 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2184 NDIS_802_11_WEP_STATUS WepStatus;
2185 AP_WPA_STATE WpaState;
2188 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2189 CIPHER_KEY PairwiseKey;
2192 UCHAR PMKID[LEN_PMKID];
2195 UCHAR Addr[MAC_ADDR_LEN];
2198 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2199 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2201 USHORT CapabilityInfo;
2203 ULONG NoDataIdleCount;
2204 UINT16 StationKeepAliveCount; // unit: second
2206 QUEUE_HEADER PsQueue;
2208 UINT32 StaConnectTime; // the live time of this station since associated with AP
2211 #ifdef DOT11_N_SUPPORT
2213 USHORT NoBADataCountDown;
2215 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2216 UINT TxBFCount; // 3*3
2217 #endif // DOT11_N_SUPPORT //
2219 UINT DebugFIFOCount;
2224 //====================================================
2225 //WDS entry needs these
2226 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2227 UINT MatchWDSTabIdx;
2228 UCHAR MaxSupportedRate;
2230 UCHAR CurrTxRateIndex;
2231 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2232 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2233 // USHORT OneSecTxOkCount;
2234 UINT32 OneSecTxNoRetryOkCount;
2235 UINT32 OneSecTxRetryOkCount;
2236 UINT32 OneSecTxFailCount;
2237 UINT32 ContinueTxFailCnt;
2238 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2239 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2240 //====================================================
2242 BOOLEAN fNoisyEnvironment;
2243 BOOLEAN fLastSecAccordingRSSI;
2244 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2245 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2246 ULONG LastTxOkCount;
2247 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2249 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2250 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2251 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2252 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2253 ULONG ClientStatusFlags;
2255 // TODO: Shall we move that to DOT11_N_SUPPORT???
2256 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2258 #ifdef DOT11_N_SUPPORT
2259 // HT EWC MIMO-N used parameters
2260 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2261 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2262 USHORT TXAutoBAbitmap;
2263 USHORT BADeclineBitmap;
2264 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2265 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2266 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2268 // 802.11n features.
2270 UCHAR MaxRAmpduFactor;
2272 UCHAR MmpsMode; // MIMO power save more.
2274 HT_CAPABILITY_IE HTCapability;
2276 #ifdef DOT11N_DRAFT3
2277 UCHAR BSS2040CoexistenceMgmtSupport;
2278 #endif // DOT11N_DRAFT3 //
2279 #endif // DOT11_N_SUPPORT //
2281 BOOLEAN bAutoTxRateSwitch;
2284 struct _MAC_TABLE_ENTRY *pNext;
2285 USHORT TxSeq[NUM_OF_TID];
2286 USHORT NonQosDataSeq;
2288 RSSI_SAMPLE RssiSample;
2290 UINT32 TXMCSExpected[16];
2291 UINT32 TXMCSSuccessful[16];
2292 UINT32 TXMCSFailed[16];
2293 UINT32 TXMCSAutoFallBack[16][16];
2295 #ifdef CONFIG_STA_SUPPORT
2296 ULONG LastBeaconRxTime;
2297 #endif // CONFIG_STA_SUPPORT //
2298 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2300 typedef struct _MAC_TABLE {
2302 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2303 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2304 QUEUE_HEADER McastPsQueue;
2306 BOOLEAN fAnyStationInPsm;
2307 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2308 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2309 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2310 #ifdef DOT11_N_SUPPORT
2311 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2312 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2313 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2314 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2315 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2316 #endif // DOT11_N_SUPPORT //
2317 } MAC_TABLE, *PMAC_TABLE;
2319 #ifdef DOT11_N_SUPPORT
2320 #define IS_HT_STA(_pMacEntry) \
2321 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2323 #define IS_HT_RATE(_pMacEntry) \
2324 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2326 #define PEER_IS_HT_RATE(_pMacEntry) \
2327 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2328 #endif // DOT11_N_SUPPORT //
2330 typedef struct _WDS_ENTRY {
2332 UCHAR Addr[MAC_ADDR_LEN];
2333 ULONG NoDataIdleCount;
2334 struct _WDS_ENTRY *pNext;
2335 } WDS_ENTRY, *PWDS_ENTRY;
2337 typedef struct _WDS_TABLE_ENTRY {
2339 UCHAR WdsAddr[MAC_ADDR_LEN];
2340 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2341 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2342 UCHAR MaxSupportedRate;
2344 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2345 USHORT OneSecTxOkCount;
2346 USHORT OneSecTxRetryOkCount;
2347 USHORT OneSecTxFailCount;
2348 ULONG CurrTxRateStableTime; // # of second in current TX rate
2349 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2350 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2352 typedef struct _RT_802_11_WDS_ENTRY {
2356 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2357 UCHAR MacTabMatchWCID; // ASIC
2358 NDIS_802_11_WEP_STATUS WepStatus;
2361 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2362 RT_HT_PHY_INFO DesiredHtPhyInfo;
2363 BOOLEAN bAutoTxRateSwitch;
2364 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2365 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2367 typedef struct _WDS_TABLE {
2370 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2371 } WDS_TABLE, *PWDS_TABLE;
2373 typedef struct _APCLI_STRUCT {
2376 unsigned int mylinkid;
2378 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2379 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2380 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2382 CHAR Ssid[MAX_LEN_OF_SSID];
2385 CHAR CfgSsid[MAX_LEN_OF_SSID];
2386 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2387 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2389 ULONG ApCliRcvBeaconTime;
2391 ULONG CtrlCurrState;
2392 ULONG SyncCurrState;
2393 ULONG AuthCurrState;
2394 ULONG AssocCurrState;
2395 ULONG WpaPskCurrState;
2400 ULONG ClientStatusFlags;
2403 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2404 NDIS_802_11_WEP_STATUS WepStatus;
2406 // Add to support different cipher suite for WPA2/WPA mode
2407 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2408 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2409 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2410 USHORT RsnCapability;
2412 UCHAR PSK[100]; // reserve PSK key material
2414 UCHAR PMK[32]; // WPA PSK mode PMK
2415 //UCHAR PTK[64]; // WPA PSK mode PTK
2416 UCHAR GTK[32]; // GTK from authenticator
2418 //CIPHER_KEY PairwiseKey;
2419 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2422 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2423 //UCHAR PortSecured;
2425 // store RSN_IE built by driver
2426 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2429 // For WPA countermeasures
2430 ULONG LastMicErrorTime; // record last MIC error time
2431 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2432 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2434 // For WPA-PSK supplicant state
2435 //WPA_STATE WpaState; // Default is SS_NOTUSE
2436 //UCHAR ReplayCounter[8];
2437 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2438 UCHAR SNonce[32]; // SNonce for WPA-PSK
2439 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2441 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2442 RT_HT_PHY_INFO DesiredHtPhyInfo;
2443 BOOLEAN bAutoTxRateSwitch;
2444 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2445 } APCLI_STRUCT, *PAPCLI_STRUCT;
2447 // ----------- end of AP ----------------------------
2452 BOOLEAN bGreenField;
2457 typedef struct _INF_PCI_CONFIG
2459 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2462 typedef struct _INF_USB_CONFIG
2464 UINT BulkInEpAddr; // bulk-in endpoint address
2465 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2469 #ifdef IKANOS_VX_1X0
2470 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2472 struct IKANOS_TX_INFO
2474 struct net_device *netdev;
2475 IkanosWlanTxCbFuncP *fp;
2477 #endif // IKANOS_VX_1X0 //
2480 #define DIAGNOSE_TIME 10 // 10 sec
2481 typedef struct _RtmpDiagStrcut_
2482 { // Diagnosis Related element
2483 unsigned char inited;
2485 unsigned char ArrayStartIdx;
2486 unsigned char ArrayCurIdx;
2488 USHORT TxDataCnt[DIAGNOSE_TIME];
2489 USHORT TxFailCnt[DIAGNOSE_TIME];
2490 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2491 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2492 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2493 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2494 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2496 USHORT TxAggCnt[DIAGNOSE_TIME];
2497 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2498 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2499 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2500 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2501 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2504 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2505 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2506 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2507 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2509 #endif // DBG_DIAGNOSE //
2513 // The miniport adapter structure
2515 typedef struct _RTMP_ADAPTER
2517 PVOID OS_Cookie; // save specific structure relative to OS
2523 NDIS_SPIN_LOCK irq_lock;
2527 /*****************************************************************************************/
2528 /* USB related parameters */
2529 /*****************************************************************************************/
2530 struct usb_config_descriptor *config;
2531 UINT BulkInEpAddr; // bulk-in endpoint address
2532 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2535 USHORT BulkOutMaxPacketSize;
2536 USHORT BulkInMaxPacketSize;
2538 //======Control Flags
2539 LONG PendingIoCount;
2541 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2544 //======Timer Thread
2545 RT2870_TIMER_QUEUE TimerQ;
2546 NDIS_SPIN_LOCK TimerQLock;
2551 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2553 BOOLEAN TimerFunc_kill;
2557 //======Semaphores (event)
2558 struct semaphore mlme_semaphore; /* to sleep thread on */
2559 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2560 struct semaphore RTUSBTimer_semaphore;
2561 #ifdef INF_AMAZON_SE
2562 struct semaphore UsbVendorReq_semaphore;
2563 PVOID UsbVendorReqBuf;
2564 #endif // INF_AMAZON_SE //
2565 struct completion TimerQComplete;
2566 struct completion mlmeComplete;
2567 struct completion CmdQComplete;
2568 wait_queue_head_t *wait;
2572 /*****************************************************************************************/
2573 /* Both PCI/USB related parameters */
2574 /*****************************************************************************************/
2577 /*****************************************************************************************/
2578 /* Tx related parameters */
2579 /*****************************************************************************************/
2580 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2581 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2584 // Data related context and AC specified, 4 AC supported
2585 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2586 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2588 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2589 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2591 // 4 sets of Bulk Out index and pending flag
2592 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2594 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2595 UCHAR bulkResetPipeid;
2596 BOOLEAN MgmtBulkPending;
2597 ULONG bulkResetReq[6];
2600 // resource for software backlog queues
2601 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2602 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2604 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2605 RTMP_MGMT_RING MgmtRing;
2606 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2609 /*****************************************************************************************/
2610 /* Rx related parameters */
2611 /*****************************************************************************************/
2615 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2616 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2617 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2618 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2619 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2620 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2621 ULONG TransferBufferLength; // current length of the packet buffer
2622 ULONG ReadPosition; // current read position in a packet buffer
2626 /*****************************************************************************************/
2627 /* ASIC related parameters */
2628 /*****************************************************************************************/
2629 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2631 // ---------------------------
2633 // ---------------------------
2634 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2635 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2636 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2637 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2639 // ---------------------------
2641 // ---------------------------
2642 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2643 UCHAR BbpRssiToDbmDelta;
2644 BBP_R66_TUNING BbpTuning;
2646 // ----------------------------
2648 // ----------------------------
2649 UCHAR RfIcType; // RFIC_xxx
2650 ULONG RfFreqOffset; // Frequency offset for channel switching
2651 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2653 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2654 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2656 // This soft Rx Antenna Diversity mechanism is used only when user set
2657 // RX Antenna = DIVERSITY ON
2658 SOFT_RX_ANT_DIVERSITY RxAnt;
2661 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2662 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2663 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2664 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2666 UCHAR ChannelListNum; // number of channel in ChannelList[]
2669 ULONG Tx20MPwrCfgABand[5];
2670 ULONG Tx20MPwrCfgGBand[5];
2671 ULONG Tx40MPwrCfgABand[5];
2672 ULONG Tx40MPwrCfgGBand[5];
2674 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2675 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2676 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2677 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2678 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2679 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2681 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2682 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2683 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2684 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2685 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2686 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2688 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2689 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2690 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2691 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2694 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2695 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2696 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2697 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2700 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2701 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2702 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2703 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2705 // ----------------------------
2707 // ----------------------------
2708 MCU_LEDCS_STRUC LedCntl;
2709 USHORT Led1; // read from EEPROM 0x3c
2710 USHORT Led2; // EEPROM 0x3e
2711 USHORT Led3; // EEPROM 0x40
2712 UCHAR LedIndicatorStregth;
2713 UCHAR RssiSingalstrengthOffet;
2714 BOOLEAN bLedOnScanning;
2717 /*****************************************************************************************/
2718 /* 802.11 related parameters */
2719 /*****************************************************************************************/
2720 // outgoing BEACON frame buffer and corresponding TXD
2721 TXWI_STRUC BeaconTxWI;
2723 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2725 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2726 PSPOLL_FRAME PsPollFrame;
2727 HEADER_802_11 NullFrame;
2730 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2731 TX_CONTEXT NullContext;
2732 TX_CONTEXT PsPollContext;
2733 TX_CONTEXT RTSContext;
2738 //=========AP===========
2741 //=======STA===========
2742 #ifdef CONFIG_STA_SUPPORT
2743 /* Modified by Wu Xi-Kun 4/21/2006 */
2744 // -----------------------------------------------
2745 // STA specific configuration & operation status
2746 // used only when pAd->OpMode == OPMODE_STA
2747 // -----------------------------------------------
2748 STA_ADMIN_CONFIG StaCfg; // user desired settings
2749 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2750 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2751 NDIS_MEDIA_STATE PreMediaState;
2752 #endif // CONFIG_STA_SUPPORT //
2754 //=======Common===========
2755 // OP mode: either AP or STA
2756 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2758 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2761 // configuration: read from Registry & E2PROM
2762 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2763 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2764 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2766 // ------------------------------------------------------
2767 // common configuration to both OPMODE_STA and OPMODE_AP
2768 // ------------------------------------------------------
2769 COMMON_CONFIG CommonCfg;
2772 // AP needs those vaiables for site survey feature.
2773 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2774 BSS_TABLE ScanTab; // store the latest SCAN result
2776 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2777 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2778 NDIS_SPIN_LOCK MacTabLock;
2780 #ifdef DOT11_N_SUPPORT
2782 #endif // DOT11_N_SUPPORT //
2783 NDIS_SPIN_LOCK BATabLock;
2784 RALINK_TIMER_STRUCT RECBATimer;
2786 // encryption/decryption KEY tables
2787 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2789 // RX re-assembly buffer for fragmentation
2790 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2793 COUNTER_802_3 Counters8023; // 802.3 counters
2794 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2795 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2796 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2797 PRIVATE_STRUC PrivateInfo; // Private information & counters
2799 // flags, see fRTMP_ADAPTER_xxx flags
2800 ULONG Flags; // Represent current device status
2802 // current TX sequence #
2805 // Control disconnect / connect event generation
2806 //+++Didn't used anymore
2811 //+++Used only for Station
2812 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2815 ULONG ExtraInfo; // Extra information for displaying status
2816 ULONG SystemErrorBitmap; // b0: E2PROM version error
2818 //+++Didn't used anymore
2819 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2822 // ---------------------------
2824 // ---------------------------
2825 RT_802_11_EVENT_TABLE EventTab;
2830 /*****************************************************************************************/
2831 /* Statistic related parameters */
2832 /*****************************************************************************************/
2834 ULONG BulkOutDataOneSecCount;
2835 ULONG BulkInDataOneSecCount;
2836 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2837 ULONG watchDogRxCnt;
2838 ULONG watchDogRxOverFlowCnt;
2839 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2842 BOOLEAN bUpdateBcnCntDone;
2843 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2844 // ----------------------------
2846 // ----------------------------
2847 //ULONG DebugSetting[4];
2848 BOOLEAN bBanAllBaSetup;
2849 BOOLEAN bPromiscuous;
2851 // ----------------------------
2852 // rt2860c emulation-use Parameters
2853 // ----------------------------
2856 ULONG cfendaccu[30];
2857 ULONG bacontent[16];
2858 ULONG rxint[RX_RING_SIZE+1];
2861 BOOLEAN bForcePrintTX;
2862 BOOLEAN bForcePrintRX;
2863 BOOLEAN bDisablescanning; //defined in RT2870 USB
2864 BOOLEAN bStaFifoTest;
2865 BOOLEAN bProtectionTest;
2867 BOOLEAN bGenOneHCCA;
2868 BOOLEAN bBroadComHT;
2869 //+++Following add from RT2870 USB.
2871 ULONG BulkOutComplete;
2872 ULONG BulkOutCompleteOther;
2873 ULONG BulkOutCompleteCancel; // seems not use now?
2875 ULONG BulkInComplete;
2876 ULONG BulkInCompleteFail;
2879 struct wificonf WIFItestbed;
2881 #ifdef DOT11_N_SUPPORT
2882 struct reordering_mpdu_pool mpdu_blk_pool;
2883 #endif // DOT11_N_SUPPORT //
2885 ULONG OneSecondnonBEpackets; // record non BE packets per second
2887 #if WIRELESS_EXT >= 12
2888 struct iw_statistics iw_stats;
2891 struct net_device_stats stats;
2893 ULONG TbttTickCount;
2894 #ifdef PCI_MSI_SUPPORT
2896 #endif // PCI_MSI_SUPPORT //
2901 #define TIME_BASE (1000000/OS_HZ)
2902 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2903 UCHAR flg_be_adjust;
2904 ULONG be_adjust_last_time;
2907 #ifdef IKANOS_VX_1X0
2908 struct IKANOS_TX_INFO IkanosTxInfo;
2909 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2910 #endif // IKANOS_VX_1X0 //
2914 RtmpDiagStruct DiagStruct;
2915 #endif // DBG_DIAGNOSE //
2918 UINT8 PM_FlgSuspend;
2919 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2922 // Cisco IAPP format
2924 typedef struct _CISCO_IAPP_CONTENT_
2926 USHORT Length; //IAPP Length
2927 UCHAR MessageType; //IAPP type
2928 UCHAR FunctionCode; //IAPP function type
2929 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2930 UCHAR SourceMAC[MAC_ADDR_LEN];
2931 USHORT Tag; //Tag(element IE) - Adjacent AP report
2932 USHORT TagLength; //Length of element not including 4 byte header
2933 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2934 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2937 UCHAR Ssid[MAX_LEN_OF_SSID];
2938 USHORT Seconds; //Seconds that the client has been disassociated.
2939 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2941 #define DELAYINTMASK 0x0003fffb
2942 #define INTMASK 0x0003fffb
2943 #define IndMask 0x0003fffc
2944 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2945 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2946 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2947 #define TxCoherent 0x00020000 // tx coherent
2948 #define RxCoherent 0x00010000 // rx coherent
2949 #define McuCommand 0x00000200 // mcu
2950 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2951 #define TBTTInt 0x00000800 // TBTT interrupt
2952 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2953 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2954 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2957 typedef struct _RX_BLK_
2959 // RXD_STRUC RxD; // sample
2960 RT28XX_RXD_STRUC RxD;
2962 PHEADER_802_11 pHeader;
2963 PNDIS_PACKET pRxPacket;
2967 UCHAR UserPriority; // for calculate TKIP MIC using
2971 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2972 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2973 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2976 #define fRX_WDS 0x0001
2977 #define fRX_AMSDU 0x0002
2978 #define fRX_ARALINK 0x0004
2979 #define fRX_HTC 0x0008
2980 #define fRX_PAD 0x0010
2981 #define fRX_AMPDU 0x0020
2982 #define fRX_QOS 0x0040
2983 #define fRX_INFRA 0x0080
2984 #define fRX_EAP 0x0100
2985 #define fRX_MESH 0x0200
2986 #define fRX_APCLI 0x0400
2987 #define fRX_DLS 0x0800
2988 #define fRX_WPI 0x1000
2990 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2991 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2992 #define LENGTH_ARALINK_HEADER_FIELD 2
2994 #define TX_UNKOWN_FRAME 0x00
2995 #define TX_MCAST_FRAME 0x01
2996 #define TX_LEGACY_FRAME 0x02
2997 #define TX_AMPDU_FRAME 0x04
2998 #define TX_AMSDU_FRAME 0x08
2999 #define TX_RALINK_FRAME 0x10
3000 #define TX_FRAG_FRAME 0x20
3003 // Currently the sizeof(TX_BLK) is 148 bytes.
3004 typedef struct _TX_BLK_
3007 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3008 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3009 USHORT TotalFragNum; // Total frame fragments required in one batch
3010 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3012 QUEUE_HEADER TxPacketList;
3013 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3014 HTTRANSMIT_SETTING *pTransmit;
3016 // Following structure used for the characteristics of a specific packet.
3017 PNDIS_PACKET pPacket;
3018 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3019 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3020 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3021 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3022 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3023 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3024 UCHAR HdrPadLen; // recording Header Padding Length;
3025 UCHAR apidx; // The interface associated to this packet
3026 UCHAR Wcid; // The MAC entry associated to this packet
3027 UCHAR UserPriority; // priority class of packet
3028 UCHAR FrameGap; // what kind of IFS this packet use
3029 UCHAR MpduReqNum; // number of fragments of this frame
3030 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3031 UCHAR CipherAlg; // cipher alogrithm
3036 USHORT Flags; //See following definitions for detail.
3038 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3039 ULONG Priv; // Hardware specific value saved in here.
3043 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3044 #define fTX_bAckRequired 0x0002 // the packet need ack response
3045 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3046 #define fTX_bHTRate 0x0008 // allow to use HT rate
3047 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3048 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3049 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3050 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3051 #define fTX_bWMM 0x0080 // QOS Data
3053 #define fTX_bClearEAPFrame 0x0100
3056 #ifdef CONFIG_STA_SUPPORT
3057 #endif // CONFIG_STA_SUPPORT //
3061 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3064 (_pTxBlk->Flags |= _flag) \
3066 (_pTxBlk->Flags &= ~(_flag)) \
3069 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3070 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3071 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3077 //------------------------------------------------------------------------------------------
3081 #ifdef RT_BIG_ENDIAN
3082 static inline VOID WriteBackToDescriptor(
3085 IN BOOLEAN DoEncrypt,
3086 IN ULONG DescriptorType)
3090 p1 = ((UINT32 *)Dest);
3091 p2 = ((UINT32 *)Src);
3096 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3100 ========================================================================
3102 Routine Description:
3103 Endian conversion of Tx/Rx descriptor .
3106 pAd Pointer to our adapter
3107 pData Pointer to Tx/Rx descriptor
3108 DescriptorType Direction of the frame
3114 Call this function when read or update descriptor
3115 ========================================================================
3117 static inline VOID RTMPWIEndianChange(
3119 IN ULONG DescriptorType)
3124 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3126 if(DescriptorType == TYPE_TXWI)
3128 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3129 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3133 for(i=0; i < size/4 ; i++)
3134 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3139 ========================================================================
3141 Routine Description:
3142 Endian conversion of Tx/Rx descriptor .
3145 pAd Pointer to our adapter
3146 pData Pointer to Tx/Rx descriptor
3147 DescriptorType Direction of the frame
3153 Call this function when read or update descriptor
3154 ========================================================================
3158 static inline VOID RTMPDescriptorEndianChange(
3160 IN ULONG DescriptorType)
3162 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3166 ========================================================================
3168 Routine Description:
3169 Endian conversion of all kinds of 802.11 frames .
3172 pAd Pointer to our adapter
3173 pData Pointer to the 802.11 frame structure
3174 Dir Direction of the frame
3175 FromRxDoneInt Caller is from RxDone interrupt
3181 Call this function when read or update buffer data
3182 ========================================================================
3184 static inline VOID RTMPFrameEndianChange(
3185 IN PRTMP_ADAPTER pAd,
3188 IN BOOLEAN FromRxDoneInt)
3190 PHEADER_802_11 pFrame;
3193 // swab 16 bit fields - Frame Control field
3196 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3199 pFrame = (PHEADER_802_11) pData;
3200 pMacHdr = (PUCHAR) pFrame;
3202 // swab 16 bit fields - Duration/ID field
3203 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3205 // swab 16 bit fields - Sequence Control field
3206 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3208 if(pFrame->FC.Type == BTYPE_MGMT)
3210 switch(pFrame->FC.SubType)
3212 case SUBTYPE_ASSOC_REQ:
3213 case SUBTYPE_REASSOC_REQ:
3214 // swab 16 bit fields - CapabilityInfo field
3215 pMacHdr += sizeof(HEADER_802_11);
3216 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3218 // swab 16 bit fields - Listen Interval field
3220 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3223 case SUBTYPE_ASSOC_RSP:
3224 case SUBTYPE_REASSOC_RSP:
3225 // swab 16 bit fields - CapabilityInfo field
3226 pMacHdr += sizeof(HEADER_802_11);
3227 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3229 // swab 16 bit fields - Status Code field
3231 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3233 // swab 16 bit fields - AID field
3235 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3239 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3240 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3241 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3245 // swab 16 bit fields - Auth Alg No. field
3246 pMacHdr += sizeof(HEADER_802_11);
3247 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3249 // swab 16 bit fields - Auth Seq No. field
3251 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3253 // swab 16 bit fields - Status Code field
3255 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3259 case SUBTYPE_BEACON:
3260 case SUBTYPE_PROBE_RSP:
3261 // swab 16 bit fields - BeaconInterval field
3262 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3263 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3265 // swab 16 bit fields - CapabilityInfo field
3266 pMacHdr += sizeof(USHORT);
3267 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3270 case SUBTYPE_DEAUTH:
3271 case SUBTYPE_DISASSOC:
3272 // swab 16 bit fields - Reason code field
3273 pMacHdr += sizeof(HEADER_802_11);
3274 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3278 else if( pFrame->FC.Type == BTYPE_DATA )
3281 else if(pFrame->FC.Type == BTYPE_CNTL)
3283 switch(pFrame->FC.SubType)
3285 case SUBTYPE_BLOCK_ACK_REQ:
3287 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3288 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3289 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3292 case SUBTYPE_BLOCK_ACK:
3293 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3294 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3298 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3299 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3305 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3308 // swab 16 bit fields - Frame Control
3309 if(Dir == DIR_WRITE)
3311 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3314 #endif // RT_BIG_ENDIAN //
3317 static inline VOID ConvertMulticastIP2MAC(
3319 IN PUCHAR *ppMacAddr,
3320 IN UINT16 ProtoType)
3322 if (pIpAddr == NULL)
3325 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3331 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3332 *(*ppMacAddr) = 0x33;
3333 *(*ppMacAddr + 1) = 0x33;
3334 *(*ppMacAddr + 2) = pIpAddr[12];
3335 *(*ppMacAddr + 3) = pIpAddr[13];
3336 *(*ppMacAddr + 4) = pIpAddr[14];
3337 *(*ppMacAddr + 5) = pIpAddr[15];
3342 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3343 *(*ppMacAddr) = 0x01;
3344 *(*ppMacAddr + 1) = 0x00;
3345 *(*ppMacAddr + 2) = 0x5e;
3346 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3347 *(*ppMacAddr + 4) = pIpAddr[2];
3348 *(*ppMacAddr + 5) = pIpAddr[3];
3355 BOOLEAN RTMPCheckForHang(
3356 IN NDIS_HANDLE MiniportAdapterContext
3360 IN NDIS_HANDLE MiniportAdapterContext
3364 // Private routines in rtmp_init.c
3366 NDIS_STATUS RTMPAllocAdapterBlock(
3368 OUT PRTMP_ADAPTER *ppAdapter
3371 NDIS_STATUS RTMPAllocTxRxRingMemory(
3372 IN PRTMP_ADAPTER pAd
3375 NDIS_STATUS RTMPFindAdapter(
3376 IN PRTMP_ADAPTER pAd,
3377 IN NDIS_HANDLE WrapperConfigurationContext
3380 NDIS_STATUS RTMPReadParametersHook(
3381 IN PRTMP_ADAPTER pAd
3384 VOID RTMPFreeAdapter(
3385 IN PRTMP_ADAPTER pAd
3388 NDIS_STATUS NICReadRegParameters(
3389 IN PRTMP_ADAPTER pAd,
3390 IN NDIS_HANDLE WrapperConfigurationContext
3394 VOID NICInitRT30xxRFRegisters(
3395 IN PRTMP_ADAPTER pAd);
3398 VOID NICReadEEPROMParameters(
3399 IN PRTMP_ADAPTER pAd,
3400 IN PUCHAR mac_addr);
3402 VOID NICInitAsicFromEEPROM(
3403 IN PRTMP_ADAPTER pAd);
3405 VOID NICInitTxRxRingAndBacklogQueue(
3406 IN PRTMP_ADAPTER pAd);
3408 NDIS_STATUS NICInitializeAdapter(
3409 IN PRTMP_ADAPTER pAd,
3410 IN BOOLEAN bHardReset);
3412 NDIS_STATUS NICInitializeAsic(
3413 IN PRTMP_ADAPTER pAd,
3414 IN BOOLEAN bHardReset);
3417 IN PRTMP_ADAPTER pAd);
3419 VOID RTMPRingCleanUp(
3420 IN PRTMP_ADAPTER pAd,
3424 IN PRTMP_ADAPTER pAd);
3426 NDIS_STATUS DbgSendPacket(
3427 IN PRTMP_ADAPTER pAd,
3428 IN PNDIS_PACKET pPacket);
3431 IN PRTMP_ADAPTER pAd);
3433 VOID NICResetFromError(
3434 IN PRTMP_ADAPTER pAd);
3436 VOID NICEraseFirmware(
3437 IN PRTMP_ADAPTER pAd);
3439 NDIS_STATUS NICLoadFirmware(
3440 IN PRTMP_ADAPTER pAd);
3442 NDIS_STATUS NICLoadRateSwitchingParams(
3443 IN PRTMP_ADAPTER pAd);
3445 BOOLEAN NICCheckForHang(
3446 IN PRTMP_ADAPTER pAd);
3448 VOID NICUpdateFifoStaCounters(
3449 IN PRTMP_ADAPTER pAd);
3451 VOID NICUpdateRawCounters(
3452 IN PRTMP_ADAPTER pAd);
3455 ULONG RTMPEqualMemory(
3461 ULONG RTMPNotAllZero(
3465 VOID RTMPZeroMemory(
3469 ULONG RTMPCompareMemory(
3474 VOID RTMPMoveMemory(
3487 VOID RTMPPatchMacBbpBug(
3488 IN PRTMP_ADAPTER pAd);
3490 VOID RTMPPatchCardBus(
3491 IN PRTMP_ADAPTER pAdapter);
3493 VOID RTMPPatchRalinkCardBus(
3494 IN PRTMP_ADAPTER pAdapter,
3497 ULONG RTMPReadCBConfig(
3503 VOID RTMPWriteCBConfig(
3511 IN PRTMP_ADAPTER pAd,
3512 IN PRALINK_TIMER_STRUCT pTimer,
3513 IN PVOID pTimerFunc,
3518 IN PRALINK_TIMER_STRUCT pTimer,
3523 IN PRALINK_TIMER_STRUCT pTimer,
3526 VOID RTMPCancelTimer(
3527 IN PRALINK_TIMER_STRUCT pTimer,
3528 OUT BOOLEAN *pCancelled);
3531 IN PRTMP_ADAPTER pAd,
3534 VOID RTMPSetSignalLED(
3535 IN PRTMP_ADAPTER pAd,
3536 IN NDIS_802_11_RSSI Dbm);
3538 VOID RTMPEnableRxTx(
3539 IN PRTMP_ADAPTER pAd);
3542 // prototype in action.c
3544 VOID ActionStateMachineInit(
3545 IN PRTMP_ADAPTER pAd,
3546 IN STATE_MACHINE *S,
3547 OUT STATE_MACHINE_FUNC Trans[]);
3549 VOID MlmeADDBAAction(
3550 IN PRTMP_ADAPTER pAd,
3551 IN MLME_QUEUE_ELEM *Elem);
3553 VOID MlmeDELBAAction(
3554 IN PRTMP_ADAPTER pAd,
3555 IN MLME_QUEUE_ELEM *Elem);
3558 IN PRTMP_ADAPTER pAd,
3559 IN MLME_QUEUE_ELEM *Elem);
3561 VOID MlmeInvalidAction(
3562 IN PRTMP_ADAPTER pAd,
3563 IN MLME_QUEUE_ELEM *Elem);
3566 IN PRTMP_ADAPTER pAd,
3567 IN MLME_QUEUE_ELEM *Elem);
3569 #ifdef DOT11_N_SUPPORT
3570 VOID PeerAddBAReqAction(
3571 IN PRTMP_ADAPTER pAd,
3572 IN MLME_QUEUE_ELEM *Elem);
3574 VOID PeerAddBARspAction(
3575 IN PRTMP_ADAPTER pAd,
3576 IN MLME_QUEUE_ELEM *Elem);
3578 VOID PeerDelBAAction(
3579 IN PRTMP_ADAPTER pAd,
3580 IN MLME_QUEUE_ELEM *Elem);
3583 IN PRTMP_ADAPTER pAd,
3584 IN MLME_QUEUE_ELEM *Elem);
3585 #endif // DOT11_N_SUPPORT //
3587 VOID SendPSMPAction(
3588 IN PRTMP_ADAPTER pAd,
3593 #ifdef DOT11N_DRAFT3
3594 VOID SendBSS2040CoexistMgmtAction(
3595 IN PRTMP_ADAPTER pAd,
3600 VOID SendNotifyBWActionFrame(
3601 IN PRTMP_ADAPTER pAd,
3605 BOOLEAN ChannelSwitchSanityCheck(
3606 IN PRTMP_ADAPTER pAd,
3608 IN UCHAR NewChannel,
3609 IN UCHAR Secondary);
3611 VOID ChannelSwitchAction(
3612 IN PRTMP_ADAPTER pAd,
3615 IN UCHAR Secondary);
3617 ULONG BuildIntolerantChannelRep(
3618 IN PRTMP_ADAPTER pAd,
3621 VOID Update2040CoexistFrameAndNotify(
3622 IN PRTMP_ADAPTER pAd,
3624 IN BOOLEAN bAddIntolerantCha);
3626 VOID Send2040CoexistAction(
3627 IN PRTMP_ADAPTER pAd,
3629 IN BOOLEAN bAddIntolerantCha);
3630 #endif // DOT11N_DRAFT3 //
3633 IN PRTMP_ADAPTER pAd,
3634 IN MLME_QUEUE_ELEM *Elem);
3636 VOID PeerPublicAction(
3637 IN PRTMP_ADAPTER pAd,
3638 IN MLME_QUEUE_ELEM *Elem);
3640 #ifdef CONFIG_STA_SUPPORT
3641 VOID StaPublicAction(
3642 IN PRTMP_ADAPTER pAd,
3643 IN UCHAR Bss2040Coexist);
3644 #endif // CONFIG_STA_SUPPORT //
3647 VOID PeerBSSTranAction(
3648 IN PRTMP_ADAPTER pAd,
3649 IN MLME_QUEUE_ELEM *Elem);
3651 #ifdef DOT11_N_SUPPORT
3653 IN PRTMP_ADAPTER pAd,
3654 IN MLME_QUEUE_ELEM *Elem);
3655 #endif // DOT11_N_SUPPORT //
3658 IN PRTMP_ADAPTER pAd,
3659 IN MLME_QUEUE_ELEM *Elem);
3661 #ifdef DOT11_N_SUPPORT
3662 VOID RECBATimerTimeout(
3663 IN PVOID SystemSpecific1,
3664 IN PVOID FunctionContext,
3665 IN PVOID SystemSpecific2,
3666 IN PVOID SystemSpecific3);
3668 VOID ORIBATimerTimeout(
3669 IN PRTMP_ADAPTER pAd);
3671 VOID SendRefreshBAR(
3672 IN PRTMP_ADAPTER pAd,
3673 IN MAC_TABLE_ENTRY *pEntry);
3674 #endif // DOT11_N_SUPPORT //
3677 IN PRTMP_ADAPTER pAd,
3678 IN OUT PHEADER_802_11 pHdr80211,
3684 IN PRTMP_ADAPTER pAd,
3685 IN OUT PFRAME_BAR pCntlBar,
3689 VOID InsertActField(
3690 IN PRTMP_ADAPTER pAd,
3691 OUT PUCHAR pFrameBuf,
3692 OUT PULONG pFrameLen,
3696 BOOLEAN QosBADataParse(
3697 IN PRTMP_ADAPTER pAd,
3699 IN PUCHAR p8023Header,
3703 IN UCHAR DataOffset,
3705 IN UINT CurRxIndex);
3707 #ifdef DOT11_N_SUPPORT
3708 BOOLEAN CntlEnqueueForRecv(
3709 IN PRTMP_ADAPTER pAd,
3712 IN PFRAME_BA_REQ pMsg);
3714 VOID BaAutoManSwitch(
3715 IN PRTMP_ADAPTER pAd);
3716 #endif // DOT11_N_SUPPORT //
3719 IN PRTMP_ADAPTER pAd,
3720 IN UCHAR BatRecIdx);
3723 // Private routines in rtmp_data.c
3725 BOOLEAN RTMPHandleRxDoneInterrupt(
3726 IN PRTMP_ADAPTER pAd);
3728 VOID RTMPHandleTxDoneInterrupt(
3729 IN PRTMP_ADAPTER pAd);
3731 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3732 IN PRTMP_ADAPTER pAd,
3733 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3735 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3736 IN PRTMP_ADAPTER pAd);
3738 VOID RTMPHandleTBTTInterrupt(
3739 IN PRTMP_ADAPTER pAd);
3741 VOID RTMPHandlePreTBTTInterrupt(
3742 IN PRTMP_ADAPTER pAd);
3744 void RTMPHandleTwakeupInterrupt(
3745 IN PRTMP_ADAPTER pAd);
3747 VOID RTMPHandleRxCoherentInterrupt(
3748 IN PRTMP_ADAPTER pAd);
3750 BOOLEAN TxFrameIsAggregatible(
3751 IN PRTMP_ADAPTER pAd,
3752 IN PUCHAR pPrevAddr1,
3753 IN PUCHAR p8023hdr);
3755 BOOLEAN PeerIsAggreOn(
3756 IN PRTMP_ADAPTER pAd,
3758 IN PMAC_TABLE_ENTRY pMacEntry);
3760 #if 0 // It's not be used
3761 HTTRANSMIT_SETTING *GetTxMode(
3762 IN PRTMP_ADAPTER pAd,
3766 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3767 IN PNDIS_BUFFER pFirstBuffer,
3768 IN UCHAR DesiredOffset,
3772 NDIS_STATUS STASendPacket(
3773 IN PRTMP_ADAPTER pAd,
3774 IN PNDIS_PACKET pPacket);
3776 VOID STASendPackets(
3777 IN NDIS_HANDLE MiniportAdapterContext,
3778 IN PPNDIS_PACKET ppPacketArray,
3779 IN UINT NumberOfPackets);
3781 VOID RTMPDeQueuePacket(
3782 IN PRTMP_ADAPTER pAd,
3783 IN BOOLEAN bIntContext,
3785 IN UCHAR Max_Tx_Packets);
3787 NDIS_STATUS RTMPHardTransmit(
3788 IN PRTMP_ADAPTER pAd,
3789 IN PNDIS_PACKET pPacket,
3791 OUT PULONG pFreeTXDLeft);
3793 NDIS_STATUS STAHardTransmit(
3794 IN PRTMP_ADAPTER pAd,
3798 VOID STARxEAPOLFrameIndicate(
3799 IN PRTMP_ADAPTER pAd,
3800 IN MAC_TABLE_ENTRY *pEntry,
3802 IN UCHAR FromWhichBSSID);
3804 NDIS_STATUS RTMPFreeTXDRequest(
3805 IN PRTMP_ADAPTER pAd,
3807 IN UCHAR NumberRequired,
3808 IN PUCHAR FreeNumberIs);
3810 NDIS_STATUS MlmeHardTransmit(
3811 IN PRTMP_ADAPTER pAd,
3813 IN PNDIS_PACKET pPacket);
3815 NDIS_STATUS MlmeHardTransmitMgmtRing(
3816 IN PRTMP_ADAPTER pAd,
3818 IN PNDIS_PACKET pPacket);
3820 NDIS_STATUS MlmeHardTransmitTxRing(
3821 IN PRTMP_ADAPTER pAd,
3823 IN PNDIS_PACKET pPacket);
3825 USHORT RTMPCalcDuration(
3826 IN PRTMP_ADAPTER pAd,
3831 IN PRTMP_ADAPTER pAd,
3832 IN PTXWI_STRUC pTxWI,
3835 IN BOOLEAN InsTimestamp,
3838 IN BOOLEAN NSeq, // HW new a sequence.
3847 IN HTTRANSMIT_SETTING *pTransmit);
3850 VOID RTMPWriteTxWI_Data(
3851 IN PRTMP_ADAPTER pAd,
3852 IN OUT PTXWI_STRUC pTxWI,
3856 VOID RTMPWriteTxWI_Cache(
3857 IN PRTMP_ADAPTER pAd,
3858 IN OUT PTXWI_STRUC pTxWI,
3861 VOID RTMPWriteTxDescriptor(
3862 IN PRTMP_ADAPTER pAd,
3867 VOID RTMPSuspendMsduTransmission(
3868 IN PRTMP_ADAPTER pAd);
3870 VOID RTMPResumeMsduTransmission(
3871 IN PRTMP_ADAPTER pAd);
3873 NDIS_STATUS MiniportMMRequest(
3874 IN PRTMP_ADAPTER pAd,
3879 NDIS_STATUS MiniportDataMMRequest(
3880 IN PRTMP_ADAPTER pAd,
3885 VOID RTMPSendNullFrame(
3886 IN PRTMP_ADAPTER pAd,
3888 IN BOOLEAN bQosNull);
3890 VOID RTMPSendDisassociationFrame(
3891 IN PRTMP_ADAPTER pAd);
3893 VOID RTMPSendRTSFrame(
3894 IN PRTMP_ADAPTER pAd,
3896 IN unsigned int NextMpduSize,
3899 IN USHORT AckDuration,
3904 NDIS_STATUS RTMPApplyPacketFilter(
3905 IN PRTMP_ADAPTER pAd,
3906 IN PRT28XX_RXD_STRUC pRxD,
3907 IN PHEADER_802_11 pHeader);
3909 PQUEUE_HEADER RTMPCheckTxSwQueue(
3910 IN PRTMP_ADAPTER pAd,
3913 #ifdef CONFIG_STA_SUPPORT
3914 VOID RTMPReportMicError(
3915 IN PRTMP_ADAPTER pAd,
3916 IN PCIPHER_KEY pWpaKey);
3918 VOID WpaMicFailureReportFrame(
3919 IN PRTMP_ADAPTER pAd,
3920 IN MLME_QUEUE_ELEM *Elem);
3922 VOID WpaDisassocApAndBlockAssoc(
3923 IN PVOID SystemSpecific1,
3924 IN PVOID FunctionContext,
3925 IN PVOID SystemSpecific2,
3926 IN PVOID SystemSpecific3);
3927 #endif // CONFIG_STA_SUPPORT //
3929 NDIS_STATUS RTMPCloneNdisPacket(
3930 IN PRTMP_ADAPTER pAd,
3931 IN BOOLEAN pInsAMSDUHdr,
3932 IN PNDIS_PACKET pInPacket,
3933 OUT PNDIS_PACKET *ppOutPacket);
3935 NDIS_STATUS RTMPAllocateNdisPacket(
3936 IN PRTMP_ADAPTER pAd,
3937 IN PNDIS_PACKET *pPacket,
3943 VOID RTMPFreeNdisPacket(
3944 IN PRTMP_ADAPTER pAd,
3945 IN PNDIS_PACKET pPacket);
3947 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3948 IN PRTMP_ADAPTER pAd,
3951 BOOLEAN RTMPCheckDHCPFrame(
3952 IN PRTMP_ADAPTER pAd,
3953 IN PNDIS_PACKET pPacket);
3956 BOOLEAN RTMPCheckEtherType(
3957 IN PRTMP_ADAPTER pAd,
3958 IN PNDIS_PACKET pPacket);
3961 VOID RTMPCckBbpTuning(
3962 IN PRTMP_ADAPTER pAd,
3966 // Private routines in rtmp_wep.c
3968 VOID RTMPInitWepEngine(
3969 IN PRTMP_ADAPTER pAd,
3975 VOID RTMPEncryptData(
3976 IN PRTMP_ADAPTER pAd,
3981 BOOLEAN RTMPDecryptData(
3982 IN PRTMP_ADAPTER pAdapter,
3987 BOOLEAN RTMPSoftDecryptWEP(
3988 IN PRTMP_ADAPTER pAd,
3990 IN ULONG DataByteCnt,
3991 IN PCIPHER_KEY pGroupKey);
3994 IN PRTMP_ADAPTER pAd,
3998 IN PARCFOURCONTEXT Ctx,
4003 IN PARCFOURCONTEXT Ctx);
4005 VOID ARCFOUR_DECRYPT(
4006 IN PARCFOURCONTEXT Ctx,
4011 VOID ARCFOUR_ENCRYPT(
4012 IN PARCFOURCONTEXT Ctx,
4017 VOID WPAARCFOUR_ENCRYPT(
4018 IN PARCFOURCONTEXT Ctx,
4023 UINT RTMP_CALC_FCS32(
4032 // Asic/RF/BBP related functions
4034 VOID AsicAdjustTxPower(
4035 IN PRTMP_ADAPTER pAd);
4037 VOID AsicUpdateProtect(
4038 IN PRTMP_ADAPTER pAd,
4039 IN USHORT OperaionMode,
4041 IN BOOLEAN bDisableBGProtect,
4042 IN BOOLEAN bNonGFExist);
4044 VOID AsicSwitchChannel(
4045 IN PRTMP_ADAPTER pAd,
4049 VOID AsicLockChannel(
4050 IN PRTMP_ADAPTER pAd,
4053 VOID AsicAntennaSelect(
4054 IN PRTMP_ADAPTER pAd,
4057 VOID AsicAntennaSetting(
4058 IN PRTMP_ADAPTER pAd,
4059 IN ABGBAND_STATE BandState);
4061 VOID AsicRfTuningExec(
4062 IN PVOID SystemSpecific1,
4063 IN PVOID FunctionContext,
4064 IN PVOID SystemSpecific2,
4065 IN PVOID SystemSpecific3);
4067 #ifdef CONFIG_STA_SUPPORT
4068 VOID AsicSleepThenAutoWakeup(
4069 IN PRTMP_ADAPTER pAd,
4070 IN USHORT TbttNumToNextWakeUp);
4072 VOID AsicForceSleep(
4073 IN PRTMP_ADAPTER pAd);
4075 VOID AsicForceWakeup(
4076 IN PRTMP_ADAPTER pAd,
4077 IN BOOLEAN bFromTx);
4078 #endif // CONFIG_STA_SUPPORT //
4081 IN PRTMP_ADAPTER pAd,
4084 VOID AsicSetMcastWC(
4085 IN PRTMP_ADAPTER pAd);
4087 #if 0 // removed by AlbertY
4088 VOID AsicSetBssidWC(
4089 IN PRTMP_ADAPTER pAd,
4093 VOID AsicDelWcidTab(
4094 IN PRTMP_ADAPTER pAd,
4098 IN PRTMP_ADAPTER pAd);
4100 VOID AsicDisableRDG(
4101 IN PRTMP_ADAPTER pAd);
4103 VOID AsicDisableSync(
4104 IN PRTMP_ADAPTER pAd);
4106 VOID AsicEnableBssSync(
4107 IN PRTMP_ADAPTER pAd);
4109 VOID AsicEnableIbssSync(
4110 IN PRTMP_ADAPTER pAd);
4112 VOID AsicSetEdcaParm(
4113 IN PRTMP_ADAPTER pAd,
4114 IN PEDCA_PARM pEdcaParm);
4116 VOID AsicSetSlotTime(
4117 IN PRTMP_ADAPTER pAd,
4118 IN BOOLEAN bUseShortSlotTime);
4121 VOID AsicAddWcidCipherEntry(
4122 IN PRTMP_ADAPTER pAd,
4128 IN CIPHER_KEY *pCipherKey);
4131 VOID AsicAddSharedKeyEntry(
4132 IN PRTMP_ADAPTER pAd,
4140 VOID AsicRemoveSharedKeyEntry(
4141 IN PRTMP_ADAPTER pAd,
4145 VOID AsicUpdateWCIDAttribute(
4146 IN PRTMP_ADAPTER pAd,
4150 IN BOOLEAN bUsePairewiseKeyTable);
4152 VOID AsicUpdateWCIDIVEIV(
4153 IN PRTMP_ADAPTER pAd,
4158 VOID AsicUpdateRxWCIDTable(
4159 IN PRTMP_ADAPTER pAd,
4163 VOID AsicAddKeyEntry(
4164 IN PRTMP_ADAPTER pAd,
4168 IN PCIPHER_KEY pCipherKey,
4169 IN BOOLEAN bUsePairewiseKeyTable,
4172 VOID AsicAddPairwiseKeyEntry(
4173 IN PRTMP_ADAPTER pAd,
4176 IN CIPHER_KEY *pCipherKey);
4178 VOID AsicRemovePairwiseKeyEntry(
4179 IN PRTMP_ADAPTER pAd,
4183 BOOLEAN AsicSendCommandToMcu(
4184 IN PRTMP_ADAPTER pAd,
4191 VOID MacAddrRandomBssid(
4192 IN PRTMP_ADAPTER pAd,
4195 VOID MgtMacHeaderInit(
4196 IN PRTMP_ADAPTER pAd,
4197 IN OUT PHEADER_802_11 pHdr80211,
4204 IN PRTMP_ADAPTER pAd);
4207 IN PRTMP_ADAPTER pAd);
4213 #ifdef DOT11_N_SUPPORT
4215 IN PRTMP_ADAPTER pAd,
4217 #endif // DOT11_N_SUPPORT //
4219 ULONG BssTableSearch(
4224 ULONG BssSsidTableSearch(
4231 ULONG BssTableSearchWithSSID(
4238 VOID BssTableDeleteEntry(
4239 IN OUT PBSS_TABLE pTab,
4243 #ifdef DOT11_N_SUPPORT
4244 VOID BATableDeleteORIEntry(
4245 IN OUT PRTMP_ADAPTER pAd,
4246 IN BA_ORI_ENTRY *pBAORIEntry);
4248 VOID BATableDeleteRECEntry(
4249 IN OUT PRTMP_ADAPTER pAd,
4250 IN BA_REC_ENTRY *pBARECEntry);
4252 VOID BATableTearORIEntry(
4253 IN OUT PRTMP_ADAPTER pAd,
4256 IN BOOLEAN bForceDelete,
4259 VOID BATableTearRECEntry(
4260 IN OUT PRTMP_ADAPTER pAd,
4264 #endif // DOT11_N_SUPPORT //
4267 IN PRTMP_ADAPTER pAd,
4268 OUT PBSS_ENTRY pBss,
4273 IN USHORT BeaconPeriod,
4276 IN USHORT CapabilityInfo,
4278 IN UCHAR SupRateLen,
4280 IN UCHAR ExtRateLen,
4281 IN HT_CAPABILITY_IE *pHtCapability,
4282 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4283 IN UCHAR HtCapabilityLen,
4284 IN UCHAR AddHtInfoLen,
4285 IN UCHAR NewExtChanOffset,
4288 IN LARGE_INTEGER TimeStamp,
4290 IN PEDCA_PARM pEdcaParm,
4291 IN PQOS_CAPABILITY_PARM pQosCapability,
4292 IN PQBSS_LOAD_PARM pQbssLoad,
4293 IN USHORT LengthVIE,
4294 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4296 ULONG BssTableSetEntry(
4297 IN PRTMP_ADAPTER pAd,
4298 OUT PBSS_TABLE pTab,
4303 IN USHORT BeaconPeriod,
4306 IN USHORT CapabilityInfo,
4308 IN UCHAR SupRateLen,
4310 IN UCHAR ExtRateLen,
4311 IN HT_CAPABILITY_IE *pHtCapability,
4312 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4313 IN UCHAR HtCapabilityLen,
4314 IN UCHAR AddHtInfoLen,
4315 IN UCHAR NewExtChanOffset,
4318 IN LARGE_INTEGER TimeStamp,
4320 IN PEDCA_PARM pEdcaParm,
4321 IN PQOS_CAPABILITY_PARM pQosCapability,
4322 IN PQBSS_LOAD_PARM pQbssLoad,
4323 IN USHORT LengthVIE,
4324 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4326 #ifdef DOT11_N_SUPPORT
4327 VOID BATableInsertEntry(
4328 IN PRTMP_ADAPTER pAd,
4330 IN USHORT TimeOutValue,
4331 IN USHORT StartingSeq,
4334 IN UCHAR OriginatorStatus,
4335 IN BOOLEAN IsRecipient);
4337 #ifdef DOT11N_DRAFT3
4338 VOID Bss2040CoexistTimeOut(
4339 IN PVOID SystemSpecific1,
4340 IN PVOID FunctionContext,
4341 IN PVOID SystemSpecific2,
4342 IN PVOID SystemSpecific3);
4346 IN PRTMP_ADAPTER pAd);
4348 ULONG TriEventTableSetEntry(
4349 IN PRTMP_ADAPTER pAd,
4350 OUT TRIGGER_EVENT_TAB *Tab,
4352 IN HT_CAPABILITY_IE *pHtCapability,
4353 IN UCHAR HtCapabilityLen,
4355 IN UCHAR ChannelNo);
4357 VOID TriEventCounterMaintenance(
4358 IN PRTMP_ADAPTER pAd);
4359 #endif // DOT11N_DRAFT3 //
4360 #endif // DOT11_N_SUPPORT //
4362 VOID BssTableSsidSort(
4363 IN PRTMP_ADAPTER pAd,
4364 OUT BSS_TABLE *OutTab,
4368 VOID BssTableSortByRssi(
4369 IN OUT BSS_TABLE *OutTab);
4371 VOID BssCipherParse(
4372 IN OUT PBSS_ENTRY pBss);
4374 NDIS_STATUS MlmeQueueInit(
4375 IN MLME_QUEUE *Queue);
4377 VOID MlmeQueueDestroy(
4378 IN MLME_QUEUE *Queue);
4380 BOOLEAN MlmeEnqueue(
4381 IN PRTMP_ADAPTER pAd,
4387 BOOLEAN MlmeEnqueueForRecv(
4388 IN PRTMP_ADAPTER pAd,
4390 IN ULONG TimeStampHigh,
4391 IN ULONG TimeStampLow,
4400 BOOLEAN MlmeDequeue(
4401 IN MLME_QUEUE *Queue,
4402 OUT MLME_QUEUE_ELEM **Elem);
4404 VOID MlmeRestartStateMachine(
4405 IN PRTMP_ADAPTER pAd);
4407 BOOLEAN MlmeQueueEmpty(
4408 IN MLME_QUEUE *Queue);
4410 BOOLEAN MlmeQueueFull(
4411 IN MLME_QUEUE *Queue);
4413 BOOLEAN MsgTypeSubst(
4414 IN PRTMP_ADAPTER pAd,
4415 IN PFRAME_802_11 pFrame,
4419 VOID StateMachineInit(
4420 IN STATE_MACHINE *Sm,
4421 IN STATE_MACHINE_FUNC Trans[],
4424 IN STATE_MACHINE_FUNC DefFunc,
4428 VOID StateMachineSetAction(
4429 IN STATE_MACHINE *S,
4432 IN STATE_MACHINE_FUNC F);
4434 VOID StateMachinePerformAction(
4435 IN PRTMP_ADAPTER pAd,
4436 IN STATE_MACHINE *S,
4437 IN MLME_QUEUE_ELEM *Elem);
4440 IN PRTMP_ADAPTER pAd,
4441 IN MLME_QUEUE_ELEM *Elem);
4443 VOID AssocStateMachineInit(
4444 IN PRTMP_ADAPTER pAd,
4445 IN STATE_MACHINE *Sm,
4446 OUT STATE_MACHINE_FUNC Trans[]);
4448 VOID ReassocTimeout(
4449 IN PVOID SystemSpecific1,
4450 IN PVOID FunctionContext,
4451 IN PVOID SystemSpecific2,
4452 IN PVOID SystemSpecific3);
4455 IN PVOID SystemSpecific1,
4456 IN PVOID FunctionContext,
4457 IN PVOID SystemSpecific2,
4458 IN PVOID SystemSpecific3);
4460 VOID DisassocTimeout(
4461 IN PVOID SystemSpecific1,
4462 IN PVOID FunctionContext,
4463 IN PVOID SystemSpecific2,
4464 IN PVOID SystemSpecific3);
4466 //----------------------------------------------
4467 VOID MlmeDisassocReqAction(
4468 IN PRTMP_ADAPTER pAd,
4469 IN MLME_QUEUE_ELEM *Elem);
4471 VOID MlmeAssocReqAction(
4472 IN PRTMP_ADAPTER pAd,
4473 IN MLME_QUEUE_ELEM *Elem);
4475 VOID MlmeReassocReqAction(
4476 IN PRTMP_ADAPTER pAd,
4477 IN MLME_QUEUE_ELEM *Elem);
4479 VOID MlmeDisassocReqAction(
4480 IN PRTMP_ADAPTER pAd,
4481 IN MLME_QUEUE_ELEM *Elem);
4483 VOID PeerAssocRspAction(
4484 IN PRTMP_ADAPTER pAd,
4485 IN MLME_QUEUE_ELEM *Elem);
4487 VOID PeerReassocRspAction(
4488 IN PRTMP_ADAPTER pAd,
4489 IN MLME_QUEUE_ELEM *Elem);
4491 VOID PeerDisassocAction(
4492 IN PRTMP_ADAPTER pAd,
4493 IN MLME_QUEUE_ELEM *Elem);
4495 VOID DisassocTimeoutAction(
4496 IN PRTMP_ADAPTER pAd,
4497 IN MLME_QUEUE_ELEM *Elem);
4499 VOID AssocTimeoutAction(
4500 IN PRTMP_ADAPTER pAd,
4501 IN MLME_QUEUE_ELEM *Elem);
4503 VOID ReassocTimeoutAction(
4504 IN PRTMP_ADAPTER pAd,
4505 IN MLME_QUEUE_ELEM *Elem);
4508 IN PRTMP_ADAPTER pAd,
4511 VOID SwitchBetweenWepAndCkip(
4512 IN PRTMP_ADAPTER pAd);
4514 VOID InvalidStateWhenAssoc(
4515 IN PRTMP_ADAPTER pAd,
4516 IN MLME_QUEUE_ELEM *Elem);
4518 VOID InvalidStateWhenReassoc(
4519 IN PRTMP_ADAPTER pAd,
4520 IN MLME_QUEUE_ELEM *Elem);
4522 VOID InvalidStateWhenDisassociate(
4523 IN PRTMP_ADAPTER pAd,
4524 IN MLME_QUEUE_ELEM *Elem);
4527 VOID MlmeCntlConfirm(
4528 IN PRTMP_ADAPTER pAd,
4534 IN PRTMP_ADAPTER pAd);
4536 VOID ComposeNullFrame(
4537 IN PRTMP_ADAPTER pAd);
4540 IN PRTMP_ADAPTER pAd,
4542 IN USHORT CapabilityInfo,
4545 IN UCHAR SupRateLen,
4547 IN UCHAR ExtRateLen,
4548 IN PEDCA_PARM pEdcaParm,
4549 IN HT_CAPABILITY_IE *pHtCapability,
4550 IN UCHAR HtCapabilityLen,
4551 IN ADD_HT_INFO_IE *pAddHtInfo);
4553 VOID AuthStateMachineInit(
4554 IN PRTMP_ADAPTER pAd,
4555 IN PSTATE_MACHINE sm,
4556 OUT STATE_MACHINE_FUNC Trans[]);
4559 IN PVOID SystemSpecific1,
4560 IN PVOID FunctionContext,
4561 IN PVOID SystemSpecific2,
4562 IN PVOID SystemSpecific3);
4564 VOID MlmeAuthReqAction(
4565 IN PRTMP_ADAPTER pAd,
4566 IN MLME_QUEUE_ELEM *Elem);
4568 VOID PeerAuthRspAtSeq2Action(
4569 IN PRTMP_ADAPTER pAd,
4570 IN MLME_QUEUE_ELEM *Elem);
4572 VOID PeerAuthRspAtSeq4Action(
4573 IN PRTMP_ADAPTER pAd,
4574 IN MLME_QUEUE_ELEM *Elem);
4576 VOID AuthTimeoutAction(
4577 IN PRTMP_ADAPTER pAd,
4578 IN MLME_QUEUE_ELEM *Elem);
4581 IN PRTMP_ADAPTER pAd,
4584 VOID MlmeDeauthReqAction(
4585 IN PRTMP_ADAPTER pAd,
4586 IN MLME_QUEUE_ELEM *Elem);
4588 VOID InvalidStateWhenAuth(
4589 IN PRTMP_ADAPTER pAd,
4590 IN MLME_QUEUE_ELEM *Elem);
4592 //=============================================
4594 VOID AuthRspStateMachineInit(
4595 IN PRTMP_ADAPTER pAd,
4596 IN PSTATE_MACHINE Sm,
4597 IN STATE_MACHINE_FUNC Trans[]);
4599 VOID PeerDeauthAction(
4600 IN PRTMP_ADAPTER pAd,
4601 IN MLME_QUEUE_ELEM *Elem);
4603 VOID PeerAuthSimpleRspGenAndSend(
4604 IN PRTMP_ADAPTER pAd,
4605 IN PHEADER_802_11 pHdr80211,
4612 // Private routines in dls.c
4615 //========================================
4617 VOID SyncStateMachineInit(
4618 IN PRTMP_ADAPTER pAd,
4619 IN STATE_MACHINE *Sm,
4620 OUT STATE_MACHINE_FUNC Trans[]);
4623 IN PVOID SystemSpecific1,
4624 IN PVOID FunctionContext,
4625 IN PVOID SystemSpecific2,
4626 IN PVOID SystemSpecific3);
4629 IN PVOID SystemSpecific1,
4630 IN PVOID FunctionContext,
4631 IN PVOID SystemSpecific2,
4632 IN PVOID SystemSpecific3);
4634 VOID MlmeScanReqAction(
4635 IN PRTMP_ADAPTER pAd,
4636 IN MLME_QUEUE_ELEM *Elem);
4638 VOID InvalidStateWhenScan(
4639 IN PRTMP_ADAPTER pAd,
4640 IN MLME_QUEUE_ELEM *Elem);
4642 VOID InvalidStateWhenJoin(
4643 IN PRTMP_ADAPTER pAd,
4644 IN MLME_QUEUE_ELEM *Elem);
4646 VOID InvalidStateWhenStart(
4647 IN PRTMP_ADAPTER pAd,
4648 IN MLME_QUEUE_ELEM *Elem);
4651 IN PRTMP_ADAPTER pAd,
4652 IN MLME_QUEUE_ELEM *Elem);
4654 VOID EnqueueProbeRequest(
4655 IN PRTMP_ADAPTER pAd);
4657 BOOLEAN ScanRunning(
4658 IN PRTMP_ADAPTER pAd);
4659 //=========================================
4662 IN PRTMP_ADAPTER pAd,
4663 IN STATE_MACHINE *S,
4664 OUT STATE_MACHINE_FUNC Trans[]);
4666 VOID MlmeCntlMachinePerformAction(
4667 IN PRTMP_ADAPTER pAd,
4668 IN STATE_MACHINE *S,
4669 IN MLME_QUEUE_ELEM *Elem);
4672 IN PRTMP_ADAPTER pAd,
4673 IN MLME_QUEUE_ELEM *Elem);
4675 VOID CntlOidScanProc(
4676 IN PRTMP_ADAPTER pAd,
4677 IN MLME_QUEUE_ELEM *Elem);
4679 VOID CntlOidSsidProc(
4680 IN PRTMP_ADAPTER pAd,
4681 IN MLME_QUEUE_ELEM * Elem);
4683 VOID CntlOidRTBssidProc(
4684 IN PRTMP_ADAPTER pAd,
4685 IN MLME_QUEUE_ELEM * Elem);
4687 VOID CntlMlmeRoamingProc(
4688 IN PRTMP_ADAPTER pAd,
4689 IN MLME_QUEUE_ELEM * Elem);
4691 VOID CntlWaitDisassocProc(
4692 IN PRTMP_ADAPTER pAd,
4693 IN MLME_QUEUE_ELEM *Elem);
4695 VOID CntlWaitJoinProc(
4696 IN PRTMP_ADAPTER pAd,
4697 IN MLME_QUEUE_ELEM *Elem);
4699 VOID CntlWaitReassocProc(
4700 IN PRTMP_ADAPTER pAd,
4701 IN MLME_QUEUE_ELEM *Elem);
4703 VOID CntlWaitStartProc(
4704 IN PRTMP_ADAPTER pAd,
4705 IN MLME_QUEUE_ELEM *Elem);
4707 VOID CntlWaitAuthProc(
4708 IN PRTMP_ADAPTER pAd,
4709 IN MLME_QUEUE_ELEM *Elem);
4711 VOID CntlWaitAuthProc2(
4712 IN PRTMP_ADAPTER pAd,
4713 IN MLME_QUEUE_ELEM *Elem);
4715 VOID CntlWaitAssocProc(
4716 IN PRTMP_ADAPTER pAd,
4717 IN MLME_QUEUE_ELEM *Elem);
4720 IN PRTMP_ADAPTER pAd,
4724 IN PRTMP_ADAPTER pAd,
4725 IN BOOLEAN IsReqFromAP);
4727 VOID IterateOnBssTab(
4728 IN PRTMP_ADAPTER pAd);
4730 VOID IterateOnBssTab2(
4731 IN PRTMP_ADAPTER pAd);;
4734 IN PRTMP_ADAPTER pAd,
4735 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4739 IN PRTMP_ADAPTER pAd,
4740 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4742 IN USHORT CapabilityInfo,
4744 IN USHORT ListenIntv);
4747 IN PRTMP_ADAPTER pAd,
4748 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4754 VOID DisassocParmFill(
4755 IN PRTMP_ADAPTER pAd,
4756 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4761 IN PRTMP_ADAPTER pAd,
4762 IN OUT MLME_START_REQ_STRUCT *StartReq,
4767 IN PRTMP_ADAPTER pAd,
4768 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4773 IN PRTMP_ADAPTER pAd);
4775 VOID EnqueueBeaconFrame(
4776 IN PRTMP_ADAPTER pAd);
4778 VOID MlmeJoinReqAction(
4779 IN PRTMP_ADAPTER pAd,
4780 IN MLME_QUEUE_ELEM *Elem);
4782 VOID MlmeScanReqAction(
4783 IN PRTMP_ADAPTER pAd,
4784 IN MLME_QUEUE_ELEM *Elem);
4786 VOID MlmeStartReqAction(
4787 IN PRTMP_ADAPTER pAd,
4788 IN MLME_QUEUE_ELEM *Elem);
4790 VOID ScanTimeoutAction(
4791 IN PRTMP_ADAPTER pAd,
4792 IN MLME_QUEUE_ELEM *Elem);
4794 VOID BeaconTimeoutAtJoinAction(
4795 IN PRTMP_ADAPTER pAd,
4796 IN MLME_QUEUE_ELEM *Elem);
4798 VOID PeerBeaconAtScanAction(
4799 IN PRTMP_ADAPTER pAd,
4800 IN MLME_QUEUE_ELEM *Elem);
4802 VOID PeerBeaconAtJoinAction(
4803 IN PRTMP_ADAPTER pAd,
4804 IN MLME_QUEUE_ELEM *Elem);
4807 IN PRTMP_ADAPTER pAd,
4808 IN MLME_QUEUE_ELEM *Elem);
4810 VOID PeerProbeReqAction(
4811 IN PRTMP_ADAPTER pAd,
4812 IN MLME_QUEUE_ELEM *Elem);
4814 VOID ScanNextChannel(
4815 IN PRTMP_ADAPTER pAd);
4817 ULONG MakeIbssBeacon(
4818 IN PRTMP_ADAPTER pAd);
4820 VOID CCXAdjacentAPReport(
4821 IN PRTMP_ADAPTER pAd);
4823 BOOLEAN MlmeScanReqSanity(
4824 IN PRTMP_ADAPTER pAd,
4830 OUT UCHAR *ScanType);
4832 BOOLEAN PeerBeaconAndProbeRspSanity(
4833 IN PRTMP_ADAPTER pAd,
4836 IN UCHAR MsgChannel,
4840 OUT UCHAR *pSsidLen,
4841 OUT UCHAR *pBssType,
4842 OUT USHORT *pBeaconPeriod,
4843 OUT UCHAR *pChannel,
4844 OUT UCHAR *pNewChannel,
4845 OUT LARGE_INTEGER *pTimestamp,
4846 OUT CF_PARM *pCfParm,
4847 OUT USHORT *pAtimWin,
4848 OUT USHORT *pCapabilityInfo,
4850 OUT UCHAR *pDtimCount,
4851 OUT UCHAR *pDtimPeriod,
4852 OUT UCHAR *pBcastFlag,
4853 OUT UCHAR *pMessageToMe,
4854 OUT UCHAR SupRate[],
4855 OUT UCHAR *pSupRateLen,
4856 OUT UCHAR ExtRate[],
4857 OUT UCHAR *pExtRateLen,
4858 OUT UCHAR *pCkipFlag,
4859 OUT UCHAR *pAironetCellPowerLimit,
4860 OUT PEDCA_PARM pEdcaParm,
4861 OUT PQBSS_LOAD_PARM pQbssLoad,
4862 OUT PQOS_CAPABILITY_PARM pQosCapability,
4863 OUT ULONG *pRalinkIe,
4864 OUT UCHAR *pHtCapabilityLen,
4865 #ifdef CONFIG_STA_SUPPORT
4866 OUT UCHAR *pPreNHtCapabilityLen,
4867 #endif // CONFIG_STA_SUPPORT //
4868 OUT HT_CAPABILITY_IE *pHtCapability,
4869 OUT UCHAR *AddHtInfoLen,
4870 OUT ADD_HT_INFO_IE *AddHtInfo,
4871 OUT UCHAR *NewExtChannel,
4872 OUT USHORT *LengthVIE,
4873 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4875 BOOLEAN PeerAddBAReqActionSanity(
4876 IN PRTMP_ADAPTER pAd,
4881 BOOLEAN PeerAddBARspActionSanity(
4882 IN PRTMP_ADAPTER pAd,
4886 BOOLEAN PeerDelBAActionSanity(
4887 IN PRTMP_ADAPTER pAd,
4892 BOOLEAN MlmeAssocReqSanity(
4893 IN PRTMP_ADAPTER pAd,
4897 OUT USHORT *CapabilityInfo,
4899 OUT USHORT *ListenIntv);
4901 BOOLEAN MlmeAuthReqSanity(
4902 IN PRTMP_ADAPTER pAd,
4909 BOOLEAN MlmeStartReqSanity(
4910 IN PRTMP_ADAPTER pAd,
4914 OUT UCHAR *Ssidlen);
4916 BOOLEAN PeerAuthSanity(
4917 IN PRTMP_ADAPTER pAd,
4924 OUT CHAR ChlgText[]);
4926 BOOLEAN PeerAssocRspSanity(
4927 IN PRTMP_ADAPTER pAd,
4931 OUT USHORT *pCapabilityInfo,
4932 OUT USHORT *pStatus,
4934 OUT UCHAR SupRate[],
4935 OUT UCHAR *pSupRateLen,
4936 OUT UCHAR ExtRate[],
4937 OUT UCHAR *pExtRateLen,
4938 OUT HT_CAPABILITY_IE *pHtCapability,
4939 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4940 OUT UCHAR *pHtCapabilityLen,
4941 OUT UCHAR *pAddHtInfoLen,
4942 OUT UCHAR *pNewExtChannelOffset,
4943 OUT PEDCA_PARM pEdcaParm,
4944 OUT UCHAR *pCkipFlag);
4946 BOOLEAN PeerDisassocSanity(
4947 IN PRTMP_ADAPTER pAd,
4951 OUT USHORT *Reason);
4953 BOOLEAN PeerWpaMessageSanity(
4954 IN PRTMP_ADAPTER pAd,
4955 IN PEAPOL_PACKET pMsg,
4958 IN MAC_TABLE_ENTRY *pEntry);
4960 BOOLEAN PeerDeauthSanity(
4961 IN PRTMP_ADAPTER pAd,
4965 OUT USHORT *Reason);
4967 BOOLEAN PeerProbeReqSanity(
4968 IN PRTMP_ADAPTER pAd,
4973 OUT UCHAR *pSsidLen);
4979 OUT UCHAR *BcastFlag,
4980 OUT UCHAR *DtimCount,
4981 OUT UCHAR *DtimPeriod,
4982 OUT UCHAR *MessageToMe);
4984 UCHAR ChannelSanity(
4985 IN PRTMP_ADAPTER pAd,
4988 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4989 IN PBSS_ENTRY pBss);
4991 #if 0 // It's omitted
4992 NDIS_STATUS RTMPWepKeySanity(
4993 IN PRTMP_ADAPTER pAdapter,
4997 BOOLEAN MlmeDelBAReqSanity(
4998 IN PRTMP_ADAPTER pAd,
5002 BOOLEAN MlmeAddBAReqSanity(
5003 IN PRTMP_ADAPTER pAd,
5008 ULONG MakeOutgoingFrame(
5010 OUT ULONG *Length, ...);
5013 IN PRTMP_ADAPTER pAd,
5017 IN PRTMP_ADAPTER pAd);
5019 VOID AsicUpdateAutoFallBackTable(
5020 IN PRTMP_ADAPTER pAd,
5023 VOID MlmePeriodicExec(
5024 IN PVOID SystemSpecific1,
5025 IN PVOID FunctionContext,
5026 IN PVOID SystemSpecific2,
5027 IN PVOID SystemSpecific3);
5030 IN PVOID SystemSpecific1,
5031 IN PVOID FunctionContext,
5032 IN PVOID SystemSpecific2,
5033 IN PVOID SystemSpecific3);
5036 IN PVOID SystemSpecific1,
5037 IN PVOID FunctionContext,
5038 IN PVOID SystemSpecific2,
5039 IN PVOID SystemSpecific3);
5041 VOID STAMlmePeriodicExec(
5045 IN PRTMP_ADAPTER pAd);
5047 VOID MlmeAutoReconnectLastSSID(
5048 IN PRTMP_ADAPTER pAd);
5050 BOOLEAN MlmeValidateSSID(
5054 VOID MlmeCheckForRoaming(
5055 IN PRTMP_ADAPTER pAd,
5058 VOID MlmeCheckForFastRoaming(
5059 IN PRTMP_ADAPTER pAd,
5062 VOID MlmeDynamicTxRateSwitching(
5063 IN PRTMP_ADAPTER pAd);
5066 IN PRTMP_ADAPTER pAd,
5067 IN PMAC_TABLE_ENTRY pEntry,
5068 IN PRTMP_TX_RATE_SWITCH pTxRate);
5070 VOID MlmeSelectTxRateTable(
5071 IN PRTMP_ADAPTER pAd,
5072 IN PMAC_TABLE_ENTRY pEntry,
5074 IN PUCHAR pTableSize,
5075 IN PUCHAR pInitTxRateIdx);
5077 VOID MlmeCalculateChannelQuality(
5078 IN PRTMP_ADAPTER pAd,
5081 VOID MlmeCheckPsmChange(
5082 IN PRTMP_ADAPTER pAd,
5086 IN PRTMP_ADAPTER pAd,
5089 VOID MlmeSetTxPreamble(
5090 IN PRTMP_ADAPTER pAd,
5091 IN USHORT TxPreamble);
5093 VOID UpdateBasicRateBitmap(
5094 IN PRTMP_ADAPTER pAd);
5096 VOID MlmeUpdateTxRates(
5097 IN PRTMP_ADAPTER pAd,
5101 #ifdef DOT11_N_SUPPORT
5102 VOID MlmeUpdateHtTxRates(
5103 IN PRTMP_ADAPTER pAd,
5105 #endif // DOT11_N_SUPPORT //
5107 VOID RTMPCheckRates(
5108 IN PRTMP_ADAPTER pAd,
5109 IN OUT UCHAR SupRate[],
5110 IN OUT UCHAR *SupRateLen);
5112 #ifdef CONFIG_STA_SUPPORT
5113 BOOLEAN RTMPCheckChannel(
5114 IN PRTMP_ADAPTER pAd,
5115 IN UCHAR CentralChannel,
5117 #endif // CONFIG_STA_SUPPORT //
5119 BOOLEAN RTMPCheckHt(
5120 IN PRTMP_ADAPTER pAd,
5122 IN OUT HT_CAPABILITY_IE *pHtCapability,
5123 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5125 VOID StaQuickResponeForRateUpExec(
5126 IN PVOID SystemSpecific1,
5127 IN PVOID FunctionContext,
5128 IN PVOID SystemSpecific2,
5129 IN PVOID SystemSpecific3);
5131 VOID AsicBbpTuning1(
5132 IN PRTMP_ADAPTER pAd);
5134 VOID AsicBbpTuning2(
5135 IN PRTMP_ADAPTER pAd);
5137 VOID RTMPUpdateMlmeRate(
5138 IN PRTMP_ADAPTER pAd);
5141 IN PRTMP_ADAPTER pAd,
5146 VOID AsicEvaluateRxAnt(
5147 IN PRTMP_ADAPTER pAd);
5149 VOID AsicRxAntEvalTimeout(
5150 IN PVOID SystemSpecific1,
5151 IN PVOID FunctionContext,
5152 IN PVOID SystemSpecific2,
5153 IN PVOID SystemSpecific3);
5155 VOID APSDPeriodicExec(
5156 IN PVOID SystemSpecific1,
5157 IN PVOID FunctionContext,
5158 IN PVOID SystemSpecific2,
5159 IN PVOID SystemSpecific3);
5161 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5162 IN PRTMP_ADAPTER pAd,
5163 IN PMAC_TABLE_ENTRY pEntry);
5165 UCHAR RTMPStaFixedTxMode(
5166 IN PRTMP_ADAPTER pAd,
5167 IN PMAC_TABLE_ENTRY pEntry);
5169 VOID RTMPUpdateLegacyTxSetting(
5170 UCHAR fixed_tx_mode,
5171 PMAC_TABLE_ENTRY pEntry);
5173 BOOLEAN RTMPAutoRateSwitchCheck(
5174 IN PRTMP_ADAPTER pAd);
5176 NDIS_STATUS MlmeInit(
5177 IN PRTMP_ADAPTER pAd);
5180 IN PRTMP_ADAPTER pAd);
5183 IN PRTMP_ADAPTER pAd);
5185 VOID MlmeResetRalinkCounters(
5186 IN PRTMP_ADAPTER pAd);
5188 VOID BuildChannelList(
5189 IN PRTMP_ADAPTER pAd);
5192 IN PRTMP_ADAPTER pAd);
5195 IN PRTMP_ADAPTER pAd,
5198 VOID ChangeToCellPowerLimit(
5199 IN PRTMP_ADAPTER pAd,
5200 IN UCHAR AironetCellPowerLimit);
5203 IN PRTMP_ADAPTER pAd,
5207 IN PRTMP_ADAPTER pAd,
5211 IN PRTMP_ADAPTER pAd);
5214 IN PRTMP_ADAPTER pAd,
5219 IN PRTMP_ADAPTER pAd);
5222 IN PRTMP_ADAPTER pAd);
5225 IN PRTMP_ADAPTER pAd);
5227 USHORT RTMP_EEPROM_READ16(
5228 IN PRTMP_ADAPTER pAd,
5231 VOID RTMP_EEPROM_WRITE16(
5232 IN PRTMP_ADAPTER pAd,
5237 // Prototypes of function definition in rtmp_tkip.c
5239 VOID RTMPInitTkipEngine(
5240 IN PRTMP_ADAPTER pAd,
5249 VOID RTMPInitMICEngine(
5250 IN PRTMP_ADAPTER pAd,
5254 IN UCHAR UserPriority,
5257 BOOLEAN RTMPTkipCompareMICValue(
5258 IN PRTMP_ADAPTER pAd,
5263 IN UCHAR UserPriority,
5266 VOID RTMPCalculateMICValue(
5267 IN PRTMP_ADAPTER pAd,
5268 IN PNDIS_PACKET pPacket,
5270 IN PCIPHER_KEY pKey,
5273 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5274 IN PRTMP_ADAPTER pAd,
5282 VOID RTMPTkipAppendByte(
5283 IN PTKIP_KEY_INFO pTkip,
5286 VOID RTMPTkipAppend(
5287 IN PTKIP_KEY_INFO pTkip,
5291 VOID RTMPTkipGetMIC(
5292 IN PTKIP_KEY_INFO pTkip);
5294 BOOLEAN RTMPSoftDecryptTKIP(
5295 IN PRTMP_ADAPTER pAd,
5297 IN ULONG DataByteCnt,
5298 IN UCHAR UserPriority,
5299 IN PCIPHER_KEY pWpaKey);
5301 BOOLEAN RTMPSoftDecryptAES(
5302 IN PRTMP_ADAPTER pAd,
5304 IN ULONG DataByteCnt,
5305 IN PCIPHER_KEY pWpaKey);
5307 #if 0 // removed by AlbertY
5308 NDIS_STATUS RTMPWPAAddKeyProc(
5309 IN PRTMP_ADAPTER pAd,
5314 // Prototypes of function definition in cmm_info.c
5316 NDIS_STATUS RTMPWPARemoveKeyProc(
5317 IN PRTMP_ADAPTER pAd,
5320 VOID RTMPWPARemoveAllKeys(
5321 IN PRTMP_ADAPTER pAd);
5323 BOOLEAN RTMPCheckStrPrintAble(
5327 VOID RTMPSetPhyMode(
5328 IN PRTMP_ADAPTER pAd,
5331 VOID RTMPUpdateHTIE(
5332 IN RT_HT_CAPABILITY *pRtHt,
5334 OUT HT_CAPABILITY_IE *pHtCapability,
5335 OUT ADD_HT_INFO_IE *pAddHtInfo);
5337 VOID RTMPAddWcidAttributeEntry(
5338 IN PRTMP_ADAPTER pAd,
5342 IN MAC_TABLE_ENTRY *pEntry);
5344 CHAR *GetEncryptType(
5350 VOID RTMPIoctlGetSiteSurvey(
5351 IN PRTMP_ADAPTER pAdapter,
5352 IN struct iwreq *wrq);
5354 VOID RTMPIoctlGetMacTable(
5355 IN PRTMP_ADAPTER pAd,
5356 IN struct iwreq *wrq);
5358 VOID RTMPIndicateWPA2Status(
5359 IN PRTMP_ADAPTER pAdapter);
5361 VOID RTMPOPModeSwitching(
5362 IN PRTMP_ADAPTER pAd);
5364 #ifdef CONFIG_STA_SUPPORT
5365 VOID RTMPAddBSSIDCipher(
5366 IN PRTMP_ADAPTER pAd,
5368 IN PNDIS_802_11_KEY pKey,
5369 IN UCHAR CipherAlg);
5370 #endif // CONFIG_STA_SUPPORT //
5372 #ifdef DOT11_N_SUPPORT
5374 IN PRTMP_ADAPTER pAd,
5375 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5377 VOID RTMPSetIndividualHT(
5378 IN PRTMP_ADAPTER pAd,
5380 #endif // DOT11_N_SUPPORT //
5382 VOID RTMPSendWirelessEvent(
5383 IN PRTMP_ADAPTER pAd,
5384 IN USHORT Event_flag,
5389 VOID NICUpdateCntlCounters(
5390 IN PRTMP_ADAPTER pAd,
5391 IN PHEADER_802_11 pHeader,
5393 IN PRXWI_STRUC pRxWI);
5395 // prototype in wpa.c
5397 BOOLEAN WpaMsgTypeSubst(
5401 VOID WpaPskStateMachineInit(
5402 IN PRTMP_ADAPTER pAd,
5403 IN STATE_MACHINE *S,
5404 OUT STATE_MACHINE_FUNC Trans[]);
5406 VOID WpaEAPOLKeyAction(
5407 IN PRTMP_ADAPTER pAd,
5408 IN MLME_QUEUE_ELEM *Elem);
5410 VOID WpaPairMsg1Action(
5411 IN PRTMP_ADAPTER pAd,
5412 IN MLME_QUEUE_ELEM *Elem);
5414 VOID WpaPairMsg3Action(
5415 IN PRTMP_ADAPTER pAd,
5416 IN MLME_QUEUE_ELEM *Elem);
5418 VOID WpaGroupMsg1Action(
5419 IN PRTMP_ADAPTER pAd,
5420 IN MLME_QUEUE_ELEM *Elem);
5422 VOID WpaMacHeaderInit(
5423 IN PRTMP_ADAPTER pAd,
5424 IN OUT PHEADER_802_11 pHdr80211,
5428 VOID Wpa2PairMsg1Action(
5429 IN PRTMP_ADAPTER pAd,
5430 IN MLME_QUEUE_ELEM *Elem);
5432 VOID Wpa2PairMsg3Action(
5433 IN PRTMP_ADAPTER pAd,
5434 IN MLME_QUEUE_ELEM *Elem);
5436 BOOLEAN ParseKeyData(
5437 IN PRTMP_ADAPTER pAd,
5439 IN UCHAR KeyDataLen,
5440 IN UCHAR bPairewise);
5442 VOID RTMPToWirelessSta(
5443 IN PRTMP_ADAPTER pAd,
5444 IN PUCHAR pHeader802_3,
5448 IN BOOLEAN is4wayFrame);
5476 IN PRTMP_ADAPTER pAd,
5486 IN PRTMP_ADAPTER pAd,
5491 // prototype in aironet.c
5493 VOID AironetStateMachineInit(
5494 IN PRTMP_ADAPTER pAd,
5495 IN STATE_MACHINE *S,
5496 OUT STATE_MACHINE_FUNC Trans[]);
5498 VOID AironetMsgAction(
5499 IN PRTMP_ADAPTER pAd,
5500 IN MLME_QUEUE_ELEM *Elem);
5502 VOID AironetRequestAction(
5503 IN PRTMP_ADAPTER pAd,
5504 IN MLME_QUEUE_ELEM *Elem);
5506 VOID ChannelLoadRequestAction(
5507 IN PRTMP_ADAPTER pAd,
5510 VOID NoiseHistRequestAction(
5511 IN PRTMP_ADAPTER pAd,
5514 VOID BeaconRequestAction(
5515 IN PRTMP_ADAPTER pAd,
5518 VOID AironetReportAction(
5519 IN PRTMP_ADAPTER pAd,
5520 IN MLME_QUEUE_ELEM *Elem);
5522 VOID ChannelLoadReportAction(
5523 IN PRTMP_ADAPTER pAd,
5526 VOID NoiseHistReportAction(
5527 IN PRTMP_ADAPTER pAd,
5530 VOID AironetFinalReportAction(
5531 IN PRTMP_ADAPTER pAd);
5533 VOID BeaconReportAction(
5534 IN PRTMP_ADAPTER pAd,
5537 VOID AironetAddBeaconReport(
5538 IN PRTMP_ADAPTER pAd,
5540 IN PMLME_QUEUE_ELEM pElem);
5542 VOID AironetCreateBeaconReportFromBssTable(
5543 IN PRTMP_ADAPTER pAd);
5545 VOID DBGPRINT_TX_RING(
5546 IN PRTMP_ADAPTER pAd,
5549 VOID DBGPRINT_RX_RING(
5550 IN PRTMP_ADAPTER pAd);
5553 IN PRTMP_ADAPTER pAd,
5555 IN UCHAR RssiNumber);
5558 #ifdef DOT11N_DRAFT3
5559 VOID BuildEffectedChannelList(
5560 IN PRTMP_ADAPTER pAd);
5561 #endif // DOT11N_DRAFT3 //
5564 VOID APAsicEvaluateRxAnt(
5565 IN PRTMP_ADAPTER pAd);
5568 VOID APAsicRxAntEvalTimeout(
5569 IN PRTMP_ADAPTER pAd);
5572 // function prototype in cmm_wpa.c
5574 BOOLEAN RTMPCheckWPAframe(
5575 IN PRTMP_ADAPTER pAd,
5576 IN PMAC_TABLE_ENTRY pEntry,
5578 IN ULONG DataByteCount,
5579 IN UCHAR FromWhichBSSID);
5581 VOID AES_GTK_KEY_UNWRAP(
5583 OUT UCHAR *plaintext,
5585 IN UCHAR *ciphertext);
5587 BOOLEAN RTMPCheckRSNIE(
5588 IN PRTMP_ADAPTER pAd,
5591 IN MAC_TABLE_ENTRY *pEntry,
5594 BOOLEAN RTMPParseEapolKeyData(
5595 IN PRTMP_ADAPTER pAd,
5597 IN UCHAR KeyDataLen,
5598 IN UCHAR GroupKeyIndex,
5601 IN MAC_TABLE_ENTRY *pEntry);
5603 VOID ConstructEapolMsg(
5604 IN PRTMP_ADAPTER pAd,
5605 IN UCHAR PeerAuthMode,
5606 IN UCHAR PeerWepStatus,
5607 IN UCHAR MyGroupKeyWepStatus,
5609 IN UCHAR DefaultKeyIdx,
5610 IN UCHAR *ReplayCounter,
5617 OUT PEAPOL_PACKET pMsg);
5620 IN PRTMP_ADAPTER pAd,
5621 IN UCHAR PeerWepStatus,
5623 OUT PEAPOL_PACKET pMsg);
5625 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5626 IN PRTMP_ADAPTER pAd,
5628 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5629 IN PCIPHER_KEY pShard_key);
5631 VOID ConstructEapolKeyData(
5632 IN PRTMP_ADAPTER pAd,
5633 IN UCHAR PeerAuthMode,
5634 IN UCHAR PeerWepStatus,
5635 IN UCHAR GroupKeyWepStatus,
5637 IN UCHAR DefaultKeyIdx,
5638 IN BOOLEAN bWPA2Capable,
5643 OUT PEAPOL_PACKET pMsg);
5646 IN PRTMP_ADAPTER pAd,
5652 // function prototype in ap_wpa.c
5655 BOOLEAN APWpaMsgTypeSubst(
5659 MAC_TABLE_ENTRY *PACInquiry(
5660 IN PRTMP_ADAPTER pAd,
5663 BOOLEAN RTMPCheckMcast(
5664 IN PRTMP_ADAPTER pAd,
5665 IN PEID_STRUCT eid_ptr,
5666 IN MAC_TABLE_ENTRY *pEntry);
5668 BOOLEAN RTMPCheckUcast(
5669 IN PRTMP_ADAPTER pAd,
5670 IN PEID_STRUCT eid_ptr,
5671 IN MAC_TABLE_ENTRY *pEntry);
5673 BOOLEAN RTMPCheckAUTH(
5674 IN PRTMP_ADAPTER pAd,
5675 IN PEID_STRUCT eid_ptr,
5676 IN MAC_TABLE_ENTRY *pEntry);
5678 VOID WPAStart4WayHS(
5679 IN PRTMP_ADAPTER pAd,
5680 IN MAC_TABLE_ENTRY *pEntry,
5681 IN ULONG TimeInterval);
5683 VOID WPAStart2WayGroupHS(
5684 IN PRTMP_ADAPTER pAd,
5685 IN MAC_TABLE_ENTRY *pEntry);
5687 VOID APWpaEAPPacketAction(
5688 IN PRTMP_ADAPTER pAd,
5689 IN MLME_QUEUE_ELEM *Elem);
5691 VOID APWpaEAPOLStartAction(
5692 IN PRTMP_ADAPTER pAd,
5693 IN MLME_QUEUE_ELEM *Elem);
5695 VOID APWpaEAPOLLogoffAction(
5696 IN PRTMP_ADAPTER pAd,
5697 IN MLME_QUEUE_ELEM *Elem);
5699 VOID APWpaEAPOLKeyAction(
5700 IN PRTMP_ADAPTER pAd,
5701 IN MLME_QUEUE_ELEM *Elem);
5703 VOID APWpaEAPOLASFAlertAction(
5704 IN PRTMP_ADAPTER pAd,
5705 IN MLME_QUEUE_ELEM *Elem);
5707 VOID HandleCounterMeasure(
5708 IN PRTMP_ADAPTER pAd,
5709 IN MAC_TABLE_ENTRY *pEntry);
5711 VOID PeerPairMsg2Action(
5712 IN PRTMP_ADAPTER pAd,
5713 IN MAC_TABLE_ENTRY *pEntry,
5714 IN MLME_QUEUE_ELEM *Elem);
5716 VOID PeerPairMsg4Action(
5717 IN PRTMP_ADAPTER pAd,
5718 IN MAC_TABLE_ENTRY *pEntry,
5719 IN MLME_QUEUE_ELEM *Elem);
5722 IN PVOID SystemSpecific1,
5723 IN PVOID FunctionContext,
5724 IN PVOID SystemSpecific2,
5725 IN PVOID SystemSpecific3);
5728 IN PVOID SystemSpecific1,
5729 IN PVOID FunctionContext,
5730 IN PVOID SystemSpecific2,
5731 IN PVOID SystemSpecific3);
5733 VOID EnqueueStartForPSKExec(
5734 IN PVOID SystemSpecific1,
5735 IN PVOID FunctionContext,
5736 IN PVOID SystemSpecific2,
5737 IN PVOID SystemSpecific3);
5739 VOID RTMPHandleSTAKey(
5740 IN PRTMP_ADAPTER pAdapter,
5741 IN MAC_TABLE_ENTRY *pEntry,
5742 IN MLME_QUEUE_ELEM *Elem);
5744 #if 0 // merge into PeerPairMsg4Action
5745 VOID Wpa1PeerPairMsg4Action(
5746 IN PRTMP_ADAPTER pAd,
5747 IN MAC_TABLE_ENTRY *pEntry,
5748 IN MLME_QUEUE_ELEM *Elem);
5750 VOID Wpa2PeerPairMsg4Action(
5751 IN PRTMP_ADAPTER pAd,
5752 IN PMAC_TABLE_ENTRY pEntry,
5753 IN MLME_QUEUE_ELEM *Elem);
5756 VOID PeerGroupMsg2Action(
5757 IN PRTMP_ADAPTER pAd,
5758 IN PMAC_TABLE_ENTRY pEntry,
5762 #if 0 // replaced by WPAStart2WayGroupHS
5763 NDIS_STATUS APWpaHardTransmit(
5764 IN PRTMP_ADAPTER pAd,
5765 IN PMAC_TABLE_ENTRY pEntry);
5768 VOID PairDisAssocAction(
5769 IN PRTMP_ADAPTER pAd,
5770 IN PMAC_TABLE_ENTRY pEntry,
5773 VOID MlmeDeAuthAction(
5774 IN PRTMP_ADAPTER pAd,
5775 IN PMAC_TABLE_ENTRY pEntry,
5778 VOID GREKEYPeriodicExec(
5779 IN PVOID SystemSpecific1,
5780 IN PVOID FunctionContext,
5781 IN PVOID SystemSpecific2,
5782 IN PVOID SystemSpecific3);
5804 IN PRTMP_ADAPTER pAd,
5807 VOID AES_GTK_KEY_WRAP(
5809 IN UCHAR *plaintext,
5811 OUT UCHAR *ciphertext);
5814 IN PRTMP_ADAPTER pAdapter,
5818 VOID APToWirelessSta(
5819 IN PRTMP_ADAPTER pAd,
5820 IN MAC_TABLE_ENTRY *pEntry,
5821 IN PUCHAR pHeader802_3,
5825 IN BOOLEAN bClearFrame);
5827 VOID RTMPAddPMKIDCache(
5828 IN PRTMP_ADAPTER pAd,
5834 INT RTMPSearchPMKIDCache(
5835 IN PRTMP_ADAPTER pAd,
5839 VOID RTMPDeletePMKIDCache(
5840 IN PRTMP_ADAPTER pAd,
5844 VOID RTMPMaintainPMKIDCache(
5845 IN PRTMP_ADAPTER pAd);
5847 VOID RTMPSendTriggerFrame(
5848 IN PRTMP_ADAPTER pAd,
5852 IN BOOLEAN bQosNull);
5855 //typedef void (*TIMER_FUNCTION)(unsigned long);
5859 VOID RTMP_SetPeriodicTimer(
5860 IN NDIS_MINIPORT_TIMER *pTimer,
5861 IN unsigned long timeout);
5863 VOID RTMP_OS_Init_Timer(
5864 IN PRTMP_ADAPTER pAd,
5865 IN NDIS_MINIPORT_TIMER *pTimer,
5866 IN TIMER_FUNCTION function,
5869 VOID RTMP_OS_Add_Timer(
5870 IN NDIS_MINIPORT_TIMER *pTimer,
5871 IN unsigned long timeout);
5873 VOID RTMP_OS_Mod_Timer(
5874 IN NDIS_MINIPORT_TIMER *pTimer,
5875 IN unsigned long timeout);
5878 VOID RTMP_OS_Del_Timer(
5879 IN NDIS_MINIPORT_TIMER *pTimer,
5880 OUT BOOLEAN *pCancelled);
5883 VOID RTMP_OS_Release_Packet(
5884 IN PRTMP_ADAPTER pAd,
5885 IN PQUEUE_ENTRY pEntry);
5890 NDIS_STATUS os_alloc_mem(
5891 IN PRTMP_ADAPTER pAd,
5895 NDIS_STATUS os_free_mem(
5896 IN PRTMP_ADAPTER pAd,
5900 void RTMP_AllocateSharedMemory(
5901 IN PRTMP_ADAPTER pAd,
5904 OUT PVOID *VirtualAddress,
5905 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5907 VOID RTMPFreeTxRxRingMemory(
5908 IN PRTMP_ADAPTER pAd);
5910 NDIS_STATUS AdapterBlockAllocateMemory(
5914 void RTMP_AllocateTxDescMemory(
5915 IN PRTMP_ADAPTER pAd,
5919 OUT PVOID *VirtualAddress,
5920 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5922 void RTMP_AllocateFirstTxBuffer(
5923 IN PRTMP_ADAPTER pAd,
5927 OUT PVOID *VirtualAddress,
5928 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5930 void RTMP_AllocateMgmtDescMemory(
5931 IN PRTMP_ADAPTER pAd,
5934 OUT PVOID *VirtualAddress,
5935 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5937 void RTMP_AllocateRxDescMemory(
5938 IN PRTMP_ADAPTER pAd,
5941 OUT PVOID *VirtualAddress,
5942 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5944 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5945 IN PRTMP_ADAPTER pAd,
5948 OUT PVOID *VirtualAddress,
5949 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5951 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5952 IN PRTMP_ADAPTER pAd,
5955 OUT PVOID *VirtualAddress);
5957 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5958 IN PRTMP_ADAPTER pAd,
5961 void RTMP_QueryPacketInfo(
5962 IN PNDIS_PACKET pPacket,
5963 OUT PACKET_INFO *pPacketInfo,
5964 OUT PUCHAR *pSrcBufVA,
5965 OUT UINT *pSrcBufLen);
5967 void RTMP_QueryNextPacketInfo(
5968 IN PNDIS_PACKET *ppPacket,
5969 OUT PACKET_INFO *pPacketInfo,
5970 OUT PUCHAR *pSrcBufVA,
5971 OUT UINT *pSrcBufLen);
5974 BOOLEAN RTMP_FillTxBlkInfo(
5975 IN RTMP_ADAPTER *pAd,
5979 PRTMP_SCATTER_GATHER_LIST
5980 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5983 void announce_802_3_packet(
5984 IN PRTMP_ADAPTER pAd,
5985 IN PNDIS_PACKET pPacket);
5988 UINT BA_Reorder_AMSDU_Annnounce(
5989 IN PRTMP_ADAPTER pAd,
5990 IN PNDIS_PACKET pPacket);
5993 UINT Handle_AMSDU_Packet(
5994 IN PRTMP_ADAPTER pAd,
5997 IN UCHAR FromWhichBSSID);
6000 void convert_802_11_to_802_3_packet(
6001 IN PRTMP_ADAPTER pAd,
6002 IN PNDIS_PACKET pPacket,
6006 IN UCHAR FromWhichBSSID);
6009 PNET_DEV get_netdev_from_bssid(
6010 IN PRTMP_ADAPTER pAd,
6011 IN UCHAR FromWhichBSSID);
6014 PNDIS_PACKET duplicate_pkt(
6015 IN PRTMP_ADAPTER pAd,
6016 IN PUCHAR pHeader802_3,
6020 IN UCHAR FromWhichBSSID);
6023 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6024 IN PRTMP_ADAPTER pAd,
6025 IN PNDIS_PACKET pOldPkt);
6027 PNDIS_PACKET duplicate_pkt_with_VLAN(
6028 IN PRTMP_ADAPTER pAd,
6029 IN PUCHAR pHeader802_3,
6033 IN UCHAR FromWhichBSSID);
6035 PNDIS_PACKET duplicate_pkt_with_WPI(
6036 IN PRTMP_ADAPTER pAd,
6037 IN PNDIS_PACKET pPacket,
6038 IN UINT32 ext_head_len,
6039 IN UINT32 ext_tail_len);
6041 UCHAR VLAN_8023_Header_Copy(
6042 IN PRTMP_ADAPTER pAd,
6043 IN PUCHAR pHeader802_3,
6046 IN UCHAR FromWhichBSSID);
6048 #ifdef DOT11_N_SUPPORT
6049 void ba_flush_reordering_timeout_mpdus(
6050 IN PRTMP_ADAPTER pAd,
6051 IN PBA_REC_ENTRY pBAEntry,
6055 VOID BAOriSessionSetUp(
6056 IN PRTMP_ADAPTER pAd,
6057 IN MAC_TABLE_ENTRY *pEntry,
6061 IN BOOLEAN isForced);
6063 VOID BASessionTearDownALL(
6064 IN OUT PRTMP_ADAPTER pAd,
6066 #endif // DOT11_N_SUPPORT //
6068 BOOLEAN OS_Need_Clone_Packet(void);
6071 VOID build_tx_packet(
6072 IN PRTMP_ADAPTER pAd,
6073 IN PNDIS_PACKET pPacket,
6078 VOID BAOriSessionTearDown(
6079 IN OUT PRTMP_ADAPTER pAd,
6082 IN BOOLEAN bPassive,
6083 IN BOOLEAN bForceSend);
6085 VOID BARecSessionTearDown(
6086 IN OUT PRTMP_ADAPTER pAd,
6089 IN BOOLEAN bPassive);
6091 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6092 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6094 ULONG AutoChBssInsertEntry(
6095 IN PRTMP_ADAPTER pAd,
6102 void AutoChBssTableInit(
6103 IN PRTMP_ADAPTER pAd);
6105 void ChannelInfoInit(
6106 IN PRTMP_ADAPTER pAd);
6108 void AutoChBssTableDestroy(
6109 IN PRTMP_ADAPTER pAd);
6111 void ChannelInfoDestroy(
6112 IN PRTMP_ADAPTER pAd);
6114 UCHAR New_ApAutoSelectChannel(
6115 IN PRTMP_ADAPTER pAd);
6117 BOOLEAN rtstrmactohex(
6121 BOOLEAN rtstrcasecmp(
6125 char *rtstrstruncasecmp(
6131 IN const char * s2);
6135 IN const char * ct);
6139 unsigned int *addr);
6141 ////////// common ioctl functions //////////
6142 INT Set_DriverVersion_Proc(
6143 IN PRTMP_ADAPTER pAd,
6146 INT Set_CountryRegion_Proc(
6147 IN PRTMP_ADAPTER pAd,
6150 INT Set_CountryRegionABand_Proc(
6151 IN PRTMP_ADAPTER pAd,
6154 INT Set_WirelessMode_Proc(
6155 IN PRTMP_ADAPTER pAd,
6158 INT Set_Channel_Proc(
6159 IN PRTMP_ADAPTER pAd,
6162 INT Set_ShortSlot_Proc(
6163 IN PRTMP_ADAPTER pAd,
6166 INT Set_TxPower_Proc(
6167 IN PRTMP_ADAPTER pAd,
6170 INT Set_BGProtection_Proc(
6171 IN PRTMP_ADAPTER pAd,
6174 INT Set_TxPreamble_Proc(
6175 IN PRTMP_ADAPTER pAd,
6178 INT Set_RTSThreshold_Proc(
6179 IN PRTMP_ADAPTER pAd,
6182 INT Set_FragThreshold_Proc(
6183 IN PRTMP_ADAPTER pAd,
6186 INT Set_TxBurst_Proc(
6187 IN PRTMP_ADAPTER pAd,
6190 #ifdef AGGREGATION_SUPPORT
6191 INT Set_PktAggregate_Proc(
6192 IN PRTMP_ADAPTER pAd,
6196 INT Set_IEEE80211H_Proc(
6197 IN PRTMP_ADAPTER pAd,
6202 IN PRTMP_ADAPTER pAd,
6206 INT Show_DescInfo_Proc(
6207 IN PRTMP_ADAPTER pAd,
6210 INT Set_ResetStatCounter_Proc(
6211 IN PRTMP_ADAPTER pAd,
6214 #ifdef DOT11_N_SUPPORT
6215 INT Set_BASetup_Proc(
6216 IN PRTMP_ADAPTER pAd,
6219 INT Set_BADecline_Proc(
6220 IN PRTMP_ADAPTER pAd,
6223 INT Set_BAOriTearDown_Proc(
6224 IN PRTMP_ADAPTER pAd,
6227 INT Set_BARecTearDown_Proc(
6228 IN PRTMP_ADAPTER pAd,
6232 IN PRTMP_ADAPTER pAd,
6236 IN PRTMP_ADAPTER pAd,
6240 IN PRTMP_ADAPTER pAd,
6243 INT Set_HtOpMode_Proc(
6244 IN PRTMP_ADAPTER pAd,
6247 INT Set_HtStbc_Proc(
6248 IN PRTMP_ADAPTER pAd,
6252 IN PRTMP_ADAPTER pAd,
6255 INT Set_HtExtcha_Proc(
6256 IN PRTMP_ADAPTER pAd,
6259 INT Set_HtMpduDensity_Proc(
6260 IN PRTMP_ADAPTER pAd,
6263 INT Set_HtBaWinSize_Proc(
6264 IN PRTMP_ADAPTER pAd,
6268 IN PRTMP_ADAPTER pAd,
6271 INT Set_HtLinkAdapt_Proc(
6272 IN PRTMP_ADAPTER pAd,
6275 INT Set_HtAmsdu_Proc(
6276 IN PRTMP_ADAPTER pAd,
6279 INT Set_HtAutoBa_Proc(
6280 IN PRTMP_ADAPTER pAd,
6283 INT Set_HtProtect_Proc(
6284 IN PRTMP_ADAPTER pAd,
6287 INT Set_HtMimoPs_Proc(
6288 IN PRTMP_ADAPTER pAd,
6292 INT Set_ForceShortGI_Proc(
6293 IN PRTMP_ADAPTER pAd,
6296 INT Set_ForceGF_Proc(
6297 IN PRTMP_ADAPTER pAd,
6301 IN PRTMP_ADAPTER pAd);
6303 INT Set_SendPSMPAction_Proc(
6304 IN PRTMP_ADAPTER pAd,
6307 INT Set_HtMIMOPSmode_Proc(
6308 IN PRTMP_ADAPTER pAd,
6312 INT Set_HtTxBASize_Proc(
6313 IN PRTMP_ADAPTER pAd,
6315 #endif // DOT11_N_SUPPORT //
6319 #ifdef CONFIG_STA_SUPPORT
6321 VOID RTMPSendDLSTearDownFrame(
6322 IN PRTMP_ADAPTER pAd,
6325 #ifdef DOT11_N_SUPPORT
6328 IN PRTMP_ADAPTER pAd,
6329 OUT PQUERYBA_TABLE pBAT);
6330 #endif // DOT11_N_SUPPORT //
6332 #ifdef WPA_SUPPLICANT_SUPPORT
6333 INT WpaCheckEapCode(
6334 IN PRTMP_ADAPTER pAd,
6339 VOID WpaSendMicFailureToWpaSupplicant(
6340 IN PRTMP_ADAPTER pAd,
6341 IN BOOLEAN bUnicast);
6343 VOID SendAssocIEsToWpaSupplicant(
6344 IN PRTMP_ADAPTER pAd);
6345 #endif // WPA_SUPPLICANT_SUPPORT //
6347 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6348 int wext_notify_event_assoc(
6349 IN RTMP_ADAPTER *pAd);
6350 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6352 #endif // CONFIG_STA_SUPPORT //
6356 #ifdef DOT11_N_SUPPORT
6357 VOID Handle_BSS_Width_Trigger_Events(
6358 IN PRTMP_ADAPTER pAd);
6360 void build_ext_channel_switch_ie(
6361 IN PRTMP_ADAPTER pAd,
6362 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6363 #endif // DOT11_N_SUPPORT //
6366 BOOLEAN APRxDoneInterruptHandle(
6367 IN PRTMP_ADAPTER pAd);
6369 BOOLEAN STARxDoneInterruptHandle(
6370 IN PRTMP_ADAPTER pAd,
6373 #ifdef DOT11_N_SUPPORT
6374 // AMPDU packet indication
6375 VOID Indicate_AMPDU_Packet(
6376 IN PRTMP_ADAPTER pAd,
6378 IN UCHAR FromWhichBSSID);
6380 // AMSDU packet indication
6381 VOID Indicate_AMSDU_Packet(
6382 IN PRTMP_ADAPTER pAd,
6384 IN UCHAR FromWhichBSSID);
6385 #endif // DOT11_N_SUPPORT //
6387 // Normal legacy Rx packet indication
6388 VOID Indicate_Legacy_Packet(
6389 IN PRTMP_ADAPTER pAd,
6391 IN UCHAR FromWhichBSSID);
6393 VOID Indicate_EAPOL_Packet(
6394 IN PRTMP_ADAPTER pAd,
6396 IN UCHAR FromWhichBSSID);
6398 void update_os_packet_info(
6399 IN PRTMP_ADAPTER pAd,
6401 IN UCHAR FromWhichBSSID);
6403 void wlan_802_11_to_802_3_packet(
6404 IN PRTMP_ADAPTER pAd,
6406 IN PUCHAR pHeader802_3,
6407 IN UCHAR FromWhichBSSID);
6409 UINT deaggregate_AMSDU_announce(
6410 IN PRTMP_ADAPTER pAd,
6411 PNDIS_PACKET pPacket,
6416 #ifdef CONFIG_STA_SUPPORT
6417 // remove LLC and get 802_3 Header
6418 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6420 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6422 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6424 _pDA = _pRxBlk->pHeader->Addr3; \
6425 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6429 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6431 _pDA = _pRxBlk->pHeader->Addr1; \
6432 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6433 _pSA = _pRxBlk->pHeader->Addr2; \
6435 _pSA = _pRxBlk->pHeader->Addr3; \
6439 _pDA = _pRxBlk->pHeader->Addr1; \
6440 _pSA = _pRxBlk->pHeader->Addr2; \
6444 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6445 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6447 #endif // CONFIG_STA_SUPPORT //
6450 BOOLEAN APFowardWirelessStaToWirelessSta(
6451 IN PRTMP_ADAPTER pAd,
6452 IN PNDIS_PACKET pPacket,
6453 IN ULONG FromWhichBSSID);
6455 VOID Announce_or_Forward_802_3_Packet(
6456 IN PRTMP_ADAPTER pAd,
6457 IN PNDIS_PACKET pPacket,
6458 IN UCHAR FromWhichBSSID);
6460 VOID Sta_Announce_or_Forward_802_3_Packet(
6461 IN PRTMP_ADAPTER pAd,
6462 IN PNDIS_PACKET pPacket,
6463 IN UCHAR FromWhichBSSID);
6466 #ifdef CONFIG_STA_SUPPORT
6467 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6468 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6469 //announce_802_3_packet(_pAd, _pPacket);
6470 #endif // CONFIG_STA_SUPPORT //
6473 PNDIS_PACKET DuplicatePacket(
6474 IN PRTMP_ADAPTER pAd,
6475 IN PNDIS_PACKET pPacket,
6476 IN UCHAR FromWhichBSSID);
6479 PNDIS_PACKET ClonePacket(
6480 IN PRTMP_ADAPTER pAd,
6481 IN PNDIS_PACKET pPacket,
6486 // Normal, AMPDU or AMSDU
6487 VOID CmmRxnonRalinkFrameIndicate(
6488 IN PRTMP_ADAPTER pAd,
6490 IN UCHAR FromWhichBSSID);
6492 VOID CmmRxRalinkFrameIndicate(
6493 IN PRTMP_ADAPTER pAd,
6494 IN MAC_TABLE_ENTRY *pEntry,
6496 IN UCHAR FromWhichBSSID);
6498 VOID Update_Rssi_Sample(
6499 IN PRTMP_ADAPTER pAd,
6500 IN RSSI_SAMPLE *pRssi,
6501 IN PRXWI_STRUC pRxWI);
6503 PNDIS_PACKET GetPacketFromRxRing(
6504 IN PRTMP_ADAPTER pAd,
6505 OUT PRT28XX_RXD_STRUC pSaveRxD,
6506 OUT BOOLEAN *pbReschedule,
6507 IN OUT UINT32 *pRxPending);
6509 PNDIS_PACKET RTMPDeFragmentDataFrame(
6510 IN PRTMP_ADAPTER pAd,
6513 ////////////////////////////////////////
6521 typedef struct _DefaultKeyIdxValue
6525 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6529 #ifdef CONFIG_STA_SUPPORT
6531 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6532 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6533 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6534 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6535 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6536 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6537 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6538 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6539 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6540 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6541 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6544 P80211ENUM_msgitem_status_no_value = 0x00
6547 P80211ENUM_truth_false = 0x00,
6548 P80211ENUM_truth_true = 0x01
6551 /* Definition from madwifi */
6557 } p80211item_uint32_t;
6562 #define WLAN_DEVNAMELEN_MAX 16
6563 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6564 p80211item_uint32_t hosttime;
6565 p80211item_uint32_t mactime;
6566 p80211item_uint32_t channel;
6567 p80211item_uint32_t rssi;
6568 p80211item_uint32_t sq;
6569 p80211item_uint32_t signal;
6570 p80211item_uint32_t noise;
6571 p80211item_uint32_t rate;
6572 p80211item_uint32_t istx;
6573 p80211item_uint32_t frmlen;
6574 } wlan_ng_prism2_header;
6576 /* The radio capture header precedes the 802.11 header. */
6577 typedef struct PACKED _ieee80211_radiotap_header {
6578 UINT8 it_version; /* Version 0. Only increases
6579 * for drastic changes,
6580 * introduction of compatible
6581 * new fields does not count.
6584 UINT16 it_len; /* length of the whole
6585 * header in bytes, including
6586 * it_version, it_pad,
6587 * it_len, and data fields.
6589 UINT32 it_present; /* A bitmap telling which
6590 * fields are present. Set bit 31
6591 * (0x80000000) to extend the
6592 * bitmap by another 32 bits.
6593 * Additional extensions are made
6594 * by setting bit 31.
6596 }ieee80211_radiotap_header ;
6598 enum ieee80211_radiotap_type {
6599 IEEE80211_RADIOTAP_TSFT = 0,
6600 IEEE80211_RADIOTAP_FLAGS = 1,
6601 IEEE80211_RADIOTAP_RATE = 2,
6602 IEEE80211_RADIOTAP_CHANNEL = 3,
6603 IEEE80211_RADIOTAP_FHSS = 4,
6604 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6605 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6606 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6607 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6608 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6609 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6610 IEEE80211_RADIOTAP_ANTENNA = 11,
6611 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6612 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6615 #define WLAN_RADIOTAP_PRESENT ( \
6616 (1 << IEEE80211_RADIOTAP_TSFT) | \
6617 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6618 (1 << IEEE80211_RADIOTAP_RATE) | \
6621 typedef struct _wlan_radiotap_header {
6622 ieee80211_radiotap_header wt_ihdr;
6626 } wlan_radiotap_header;
6627 /* Definition from madwifi */
6629 void send_monitor_packets(
6630 IN PRTMP_ADAPTER pAd,
6633 #if WIRELESS_EXT >= 12
6634 // This function will be called when query /proc
6635 struct iw_statistics *rt28xx_get_wireless_stats(
6636 IN struct net_device *net_dev);
6639 VOID RTMPSetDesiredRates(
6640 IN PRTMP_ADAPTER pAdapter,
6642 #endif // CONFIG_STA_SUPPORT //
6644 INT Set_FixedTxMode_Proc(
6645 IN PRTMP_ADAPTER pAd,
6648 static inline char* GetPhyMode(
6658 #ifdef DOT11_N_SUPPORT
6662 case MODE_HTGREENFIELD:
6664 #endif // DOT11_N_SUPPORT //
6671 static inline char* GetBW(
6681 #ifdef DOT11_N_SUPPORT
6684 #endif // DOT11_N_SUPPORT //
6691 VOID RT28xxThreadTerminate(
6692 IN RTMP_ADAPTER *pAd);
6694 BOOLEAN RT28XXChipsetCheck(
6697 BOOLEAN RT28XXNetDevInit(
6699 IN struct net_device *net_dev,
6700 IN RTMP_ADAPTER *pAd);
6702 BOOLEAN RT28XXProbePostConfig(
6704 IN RTMP_ADAPTER *pAd,
6707 VOID RT28XXDMADisable(
6708 IN RTMP_ADAPTER *pAd);
6710 VOID RT28XXDMAEnable(
6711 IN RTMP_ADAPTER *pAd);
6713 VOID RT28xx_UpdateBeaconToAsic(
6714 IN RTMP_ADAPTER * pAd,
6717 IN ULONG UpdatePos);
6720 IN struct net_device *net_dev,
6721 IN OUT struct ifreq *rq,
6725 #ifdef CONFIG_STA_SUPPORT
6726 INT rt28xx_sta_ioctl(
6727 IN struct net_device *net_dev,
6728 IN OUT struct ifreq *rq,
6730 #endif // CONFIG_STA_SUPPORT //
6732 BOOLEAN RT28XXSecurityKeyAdd(
6733 IN PRTMP_ADAPTER pAd,
6736 IN MAC_TABLE_ENTRY *pEntry);
6738 ////////////////////////////////////////
6739 PNDIS_PACKET GetPacketFromRxRing(
6740 IN PRTMP_ADAPTER pAd,
6741 OUT PRT28XX_RXD_STRUC pSaveRxD,
6742 OUT BOOLEAN *pbReschedule,
6743 IN OUT UINT32 *pRxPending);
6746 void kill_thread_task(PRTMP_ADAPTER pAd);
6748 void tbtt_tasklet(unsigned long data);
6751 VOID AsicTurnOffRFClk(
6752 IN PRTMP_ADAPTER pAd,
6755 VOID AsicTurnOnRFClk(
6756 IN PRTMP_ADAPTER pAd,
6761 // Function Prototype in rtusb_bulk.c
6763 VOID RTUSBInitTxDesc(
6764 IN PRTMP_ADAPTER pAd,
6765 IN PTX_CONTEXT pTxContext,
6766 IN UCHAR BulkOutPipeId,
6767 IN usb_complete_t Func);
6769 VOID RTUSBInitHTTxDesc(
6770 IN PRTMP_ADAPTER pAd,
6771 IN PHT_TX_CONTEXT pTxContext,
6772 IN UCHAR BulkOutPipeId,
6773 IN ULONG BulkOutSize,
6774 IN usb_complete_t Func);
6776 VOID RTUSBInitRxDesc(
6777 IN PRTMP_ADAPTER pAd,
6778 IN PRX_CONTEXT pRxContext);
6780 VOID RTUSBCleanUpDataBulkOutQueue(
6781 IN PRTMP_ADAPTER pAd);
6783 VOID RTUSBCancelPendingBulkOutIRP(
6784 IN PRTMP_ADAPTER pAd);
6786 VOID RTUSBBulkOutDataPacket(
6787 IN PRTMP_ADAPTER pAd,
6788 IN UCHAR BulkOutPipeId,
6791 VOID RTUSBBulkOutNullFrame(
6792 IN PRTMP_ADAPTER pAd);
6794 VOID RTUSBBulkOutRTSFrame(
6795 IN PRTMP_ADAPTER pAd);
6797 VOID RTUSBCancelPendingBulkInIRP(
6798 IN PRTMP_ADAPTER pAd);
6800 VOID RTUSBCancelPendingIRPs(
6801 IN PRTMP_ADAPTER pAd);
6803 VOID RTUSBBulkOutMLMEPacket(
6804 IN PRTMP_ADAPTER pAd,
6807 VOID RTUSBBulkOutPsPoll(
6808 IN PRTMP_ADAPTER pAd);
6810 VOID RTUSBCleanUpMLMEBulkOutQueue(
6811 IN PRTMP_ADAPTER pAd);
6813 VOID RTUSBKickBulkOut(
6814 IN PRTMP_ADAPTER pAd);
6816 VOID RTUSBBulkReceive(
6817 IN PRTMP_ADAPTER pAd);
6820 IN RTMP_ADAPTER *pAd);
6822 VOID RTUSBInitRxDesc(
6823 IN PRTMP_ADAPTER pAd,
6824 IN PRX_CONTEXT pRxContext);
6826 VOID RTUSBBulkRxHandle(
6827 IN unsigned long data);
6830 // Function Prototype in rtusb_io.c
6832 NTSTATUS RTUSBMultiRead(
6833 IN PRTMP_ADAPTER pAd,
6838 NTSTATUS RTUSBMultiWrite(
6839 IN PRTMP_ADAPTER pAd,
6844 NTSTATUS RTUSBMultiWrite_OneByte(
6845 IN PRTMP_ADAPTER pAd,
6849 NTSTATUS RTUSBReadBBPRegister(
6850 IN PRTMP_ADAPTER pAd,
6854 NTSTATUS RTUSBWriteBBPRegister(
6855 IN PRTMP_ADAPTER pAd,
6859 NTSTATUS RTUSBWriteRFRegister(
6860 IN PRTMP_ADAPTER pAd,
6863 NTSTATUS RT30xxWriteRFRegister(
6864 IN PRTMP_ADAPTER pAd,
6868 NTSTATUS RT30xxReadRFRegister(
6869 IN PRTMP_ADAPTER pAd,
6873 NTSTATUS RTUSB_VendorRequest(
6874 IN PRTMP_ADAPTER pAd,
6875 IN UINT32 TransferFlags,
6876 IN UCHAR ReservedBits,
6880 IN PVOID TransferBuffer,
6881 IN UINT32 TransferBufferLength);
6883 NTSTATUS RTUSBReadEEPROM(
6884 IN PRTMP_ADAPTER pAd,
6889 NTSTATUS RTUSBWriteEEPROM(
6890 IN PRTMP_ADAPTER pAd,
6895 VOID RTUSBPutToSleep(
6896 IN PRTMP_ADAPTER pAd);
6898 NTSTATUS RTUSBWakeUp(
6899 IN PRTMP_ADAPTER pAd);
6901 VOID RTUSBInitializeCmdQ(
6904 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6905 IN PRTMP_ADAPTER pAd,
6907 IN BOOLEAN SetInformation,
6908 IN PVOID pInformationBuffer,
6909 IN UINT32 InformationBufferLength);
6911 NDIS_STATUS RTUSBEnqueueInternalCmd(
6912 IN PRTMP_ADAPTER pAd,
6914 IN PVOID pInformationBuffer,
6915 IN UINT32 InformationBufferLength);
6917 VOID RTUSBDequeueCmd(
6919 OUT PCmdQElmt *pcmdqelmt);
6922 IN OUT PVOID Context);
6925 IN OUT PVOID Context);
6927 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6928 IN RTMP_ADAPTER *pAd,
6929 IN RALINK_TIMER_STRUCT *pTimer);
6931 BOOLEAN RT2870_TimerQ_Remove(
6932 IN RTMP_ADAPTER *pAd,
6933 IN RALINK_TIMER_STRUCT *pTimer);
6935 void RT2870_TimerQ_Exit(
6936 IN RTMP_ADAPTER *pAd);
6938 void RT2870_TimerQ_Init(
6939 IN RTMP_ADAPTER *pAd);
6941 VOID RT2870_BssBeaconExit(
6942 IN RTMP_ADAPTER *pAd);
6944 VOID RT2870_BssBeaconStop(
6945 IN RTMP_ADAPTER *pAd);
6947 VOID RT2870_BssBeaconStart(
6948 IN RTMP_ADAPTER * pAd);
6950 VOID RT2870_BssBeaconInit(
6951 IN RTMP_ADAPTER *pAd);
6953 VOID RT2870_WatchDog(
6954 IN RTMP_ADAPTER *pAd);
6956 NTSTATUS RTUSBWriteMACRegister(
6957 IN PRTMP_ADAPTER pAd,
6961 NTSTATUS RTUSBReadMACRegister(
6962 IN PRTMP_ADAPTER pAd,
6964 OUT PUINT32 pValue);
6966 NTSTATUS RTUSBSingleWrite(
6967 IN RTMP_ADAPTER *pAd,
6971 NTSTATUS RTUSBFirmwareRun(
6972 IN PRTMP_ADAPTER pAd);
6974 NTSTATUS RTUSBFirmwareWrite(
6975 IN PRTMP_ADAPTER pAd,
6979 NTSTATUS RTUSBFirmwareOpmode(
6980 IN PRTMP_ADAPTER pAd,
6981 OUT PUINT32 pValue);
6983 NTSTATUS RTUSBVenderReset(
6984 IN PRTMP_ADAPTER pAd);
6986 NDIS_STATUS RTUSBSetHardWareRegister(
6987 IN PRTMP_ADAPTER pAdapter,
6990 NDIS_STATUS RTUSBQueryHardWareRegister(
6991 IN PRTMP_ADAPTER pAdapter,
6995 IN PRTMP_ADAPTER pAd);
6998 NDIS_STATUS CreateThreads(
6999 IN struct net_device *net_dev );
7002 VOID MacTableInitialize(
7003 IN PRTMP_ADAPTER pAd);
7006 IN PRTMP_ADAPTER pAd,
7009 NDIS_STATUS RTMPWPAAddKeyProc(
7010 IN PRTMP_ADAPTER pAd,
7013 VOID AsicRxAntEvalAction(
7014 IN PRTMP_ADAPTER pAd);
7016 #if 0 // Mark because not used in RT28xx.
7017 NTSTATUS RTUSBRxPacket(
7018 IN PRTMP_ADAPTER pAd,
7019 IN BOOLEAN bBulkReceive);
7021 VOID RTUSBDequeueMLMEPacket(
7022 IN PRTMP_ADAPTER pAd);
7024 VOID RTUSBCleanUpMLMEWaitQueue(
7025 IN PRTMP_ADAPTER pAd);
7029 IN PRTMP_ADAPTER pAd,
7030 IN PUCHAR pHeader802_3,
7034 OUT PNDIS_PACKET *ppPacket);
7036 UINT deaggregate_AMSDU_announce(
7037 IN PRTMP_ADAPTER pAd,
7038 PNDIS_PACKET pPacket,
7042 NDIS_STATUS RTMPCheckRxError(
7043 IN PRTMP_ADAPTER pAd,
7044 IN PHEADER_802_11 pHeader,
7045 IN PRXWI_STRUC pRxWI,
7046 IN PRT28XX_RXD_STRUC pRxINFO);
7049 VOID RTUSBMlmeHardTransmit(
7050 IN PRTMP_ADAPTER pAd,
7051 IN PMGMT_STRUC pMgmt);
7057 VOID RTUSBResumeMsduTransmission(
7058 IN PRTMP_ADAPTER pAd);
7060 VOID RTUSBSuspendMsduTransmission(
7061 IN PRTMP_ADAPTER pAd);
7065 // Function Prototype in rtusb_data.c
7067 NDIS_STATUS RTUSBFreeDescriptorRequest(
7068 IN PRTMP_ADAPTER pAd,
7069 IN UCHAR BulkOutPipeId,
7070 IN UINT32 NumberRequired);
7073 BOOLEAN RTUSBNeedQueueBackForAgg(
7074 IN RTMP_ADAPTER *pAd,
7075 IN UCHAR BulkOutPipeId);
7078 VOID RTMPWriteTxInfo(
7079 IN PRTMP_ADAPTER pAd,
7080 IN PTXINFO_STRUC pTxInfo,
7081 IN USHORT USBDMApktLen,
7088 // Function Prototype in cmm_data_2870.c
7090 USHORT RtmpUSB_WriteSubTxResource(
7091 IN PRTMP_ADAPTER pAd,
7094 OUT USHORT *FreeNumber);
7096 USHORT RtmpUSB_WriteSingleTxResource(
7097 IN PRTMP_ADAPTER pAd,
7100 OUT USHORT *FreeNumber);
7102 USHORT RtmpUSB_WriteFragTxResource(
7103 IN PRTMP_ADAPTER pAd,
7106 OUT USHORT *FreeNumber);
7108 USHORT RtmpUSB_WriteMultiTxResource(
7109 IN PRTMP_ADAPTER pAd,
7112 OUT USHORT *FreeNumber);
7114 VOID RtmpUSB_FinalWriteTxResource(
7115 IN PRTMP_ADAPTER pAd,
7117 IN USHORT totalMPDUSize,
7120 VOID RtmpUSBDataLastTxIdx(
7121 IN PRTMP_ADAPTER pAd,
7125 VOID RtmpUSBDataKickOut(
7126 IN PRTMP_ADAPTER pAd,
7131 int RtmpUSBMgmtKickOut(
7132 IN RTMP_ADAPTER *pAd,
7134 IN PNDIS_PACKET pPacket,
7135 IN PUCHAR pSrcBufVA,
7138 VOID RtmpUSBNullFrameKickOut(
7139 IN RTMP_ADAPTER *pAd,
7141 IN UCHAR *pNullFrame,
7142 IN UINT32 frameLen);
7144 VOID RT28xxUsbStaAsicForceWakeup(
7145 IN PRTMP_ADAPTER pAd,
7146 IN BOOLEAN bFromTx);
7148 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7149 IN PRTMP_ADAPTER pAd,
7150 IN USHORT TbttNumToNextWakeUp);
7152 VOID RT28xxUsbMlmeRadioOn(
7153 IN PRTMP_ADAPTER pAd);
7155 VOID RT28xxUsbMlmeRadioOFF(
7156 IN PRTMP_ADAPTER pAd);
7159 ////////////////////////////////////////
7162 IN RTMP_ADAPTER *pAd);
7164 UINT32 QBSS_LoadElementAppend(
7165 IN RTMP_ADAPTER *pAd,
7168 VOID QBSS_LoadUpdate(
7169 IN RTMP_ADAPTER *pAd);
7171 ///////////////////////////////////////
7172 INT RTMPShowCfgValue(
7173 IN PRTMP_ADAPTER pAd,
7177 PCHAR RTMPGetRalinkAuthModeStr(
7178 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7180 PCHAR RTMPGetRalinkEncryModeStr(
7181 IN USHORT encryMode);
7182 //////////////////////////////////////
7184 #ifdef CONFIG_STA_SUPPORT
7185 VOID AsicStaBbpTuning(
7186 IN PRTMP_ADAPTER pAd);
7188 BOOLEAN StaAddMacTableEntry(
7189 IN PRTMP_ADAPTER pAd,
7190 IN PMAC_TABLE_ENTRY pEntry,
7191 IN UCHAR MaxSupportedRateIn500Kbps,
7192 IN HT_CAPABILITY_IE *pHtCapability,
7193 IN UCHAR HtCapabilityLen,
7194 IN USHORT CapabilityInfo);
7195 #endif // CONFIG_STA_SUPPORT //
7197 void RTMP_IndicateMediaState(
7198 IN PRTMP_ADAPTER pAd);
7200 VOID ReSyncBeaconTime(
7201 IN PRTMP_ADAPTER pAd);
7203 VOID RTMPSetAGCInitValue(
7204 IN PRTMP_ADAPTER pAd,
7205 IN UCHAR BandWidth);
7207 int rt28xx_close(IN PNET_DEV dev);
7208 int rt28xx_open(IN PNET_DEV dev);
7210 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7212 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7213 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7215 if (VIRTUAL_IF_NUM(pAd) == 0)
7217 if (rt28xx_open(pAd->net_dev) != 0)
7223 VIRTUAL_IF_INC(pAd);
7227 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7229 VIRTUAL_IF_DEC(pAd);
7230 if (VIRTUAL_IF_NUM(pAd) == 0)
7231 rt28xx_close(pAd->net_dev);
7236 #endif // __RTMP_H__