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 //
1890 } COMMON_CONFIG, *PCOMMON_CONFIG;
1893 #ifdef CONFIG_STA_SUPPORT
1894 /* Modified by Wu Xi-Kun 4/21/2006 */
1895 // STA configuration and status
1896 typedef struct _STA_ADMIN_CONFIG {
1898 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1899 // the user intended configuration, but not necessary fully equal to the final
1900 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1901 // AP or IBSS holder).
1902 // Once initialized, user configuration can only be changed via OID_xxx
1903 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1904 USHORT AtimWin; // used when starting a new IBSS
1907 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1908 // the user intended configuration, and should be always applied to the final
1909 // settings in ACTIVE BSS without compromising with the BSS holder.
1910 // Once initialized, user configuration can only be changed via OID_xxx
1912 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1913 USHORT DefaultListenCount; // default listen count;
1914 ULONG WindowsPowerMode; // Power mode for AC power
1915 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1916 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1917 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1918 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1920 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1921 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1922 USHORT DisassocReason;
1923 UCHAR DisassocSta[MAC_ADDR_LEN];
1924 USHORT DeauthReason;
1925 UCHAR DeauthSta[MAC_ADDR_LEN];
1926 USHORT AuthFailReason;
1927 UCHAR AuthFailSta[MAC_ADDR_LEN];
1929 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1930 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1931 NDIS_802_11_WEP_STATUS WepStatus;
1932 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1934 // Add to support different cipher suite for WPA2/WPA mode
1935 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1936 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1937 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1938 USHORT RsnCapability;
1940 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1942 UCHAR PMK[32]; // WPA PSK mode PMK
1943 UCHAR PTK[64]; // WPA PSK mode PTK
1944 UCHAR GTK[32]; // GTK from authenticator
1945 BSSID_INFO SavedPMK[PMKID_NO];
1946 UINT SavedPMKNum; // Saved PMKID number
1951 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1954 // For WPA countermeasures
1955 ULONG LastMicErrorTime; // record last MIC error time
1956 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1957 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1958 // For WPA-PSK supplicant state
1959 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1960 UCHAR ReplayCounter[8];
1961 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1962 UCHAR SNonce[32]; // SNonce for WPA-PSK
1964 UCHAR LastSNR0; // last received BEACON's SNR
1965 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1966 RSSI_SAMPLE RssiSample;
1967 ULONG NumOfAvgRssiSample;
1969 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1970 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1971 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1972 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1974 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1975 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1976 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1977 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1978 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1979 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1980 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1983 // New for WPA, windows want us to to keep association information and
1984 // Fixed IEs from last association response
1985 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1986 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1987 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1988 USHORT ResVarIELen; // Length of next VIE include EID & Length
1989 UCHAR ResVarIEs[MAX_VIE_LEN];
1992 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
1994 // New variables used for CCX 1.0
1996 BOOLEAN bCkipCmicOn;
1998 UCHAR GIV[3]; //for CCX iv
2003 LEAP_AUTH_INFO LeapAuthInfo;
2005 UCHAR NetworkChallenge[8];
2006 UCHAR NetworkChallengeResponse[24];
2007 UCHAR PeerChallenge[8];
2009 UCHAR PeerChallengeResponse[24];
2010 UCHAR SessionKey[16]; //Network session keys (NSK)
2011 RALINK_TIMER_STRUCT LeapAuthTimer;
2012 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2014 // New control flags for CCX
2015 CCX_CONTROL CCXControl; // Master administration state
2016 BOOLEAN CCXEnable; // Actual CCX state
2017 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2018 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2019 UCHAR CCXReqType; // Current processing CCX request type
2020 BSS_TABLE CCXBssTab; // BSS Table
2021 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2022 USHORT FrameReportLen; // Current Frame report length
2023 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2024 USHORT RPIDensity[8]; // Array for RPI density collection
2025 // Start address of each BSS table within FrameReportBuf
2026 // It's important to update the RxPower of the corresponding Bss
2027 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2028 USHORT BeaconToken; // Token for beacon report
2029 ULONG LastBssIndex; // Most current reported Bss index
2030 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2031 UCHAR RMReqCnt; // Number of measurement request saved.
2032 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2033 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2034 // It must be the same channel with maximum duration
2035 USHORT ParallelDuration; // Maximum duration for parallel measurement
2036 UCHAR ParallelChannel; // Only one channel with parallel measurement
2037 USHORT IAPPToken; // IAPP dialog token
2038 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2039 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2040 // Hack for channel load and noise histogram parameters
2041 UCHAR NHFactor; // Parameter for Noise histogram
2042 UCHAR CLFactor; // Parameter for channel load
2044 UCHAR KRK[16]; //Key Refresh Key.
2045 UCHAR BTK[32]; //Base Transient Key
2046 BOOLEAN CCKMLinkUpFlag;
2047 ULONG CCKMRN; //(Re)Association request number.
2048 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2049 UCHAR AironetCellPowerLimit; //in dBm
2050 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2051 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2052 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2053 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2054 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2055 USHORT CCXAdjacentAPChannel;
2056 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2058 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2059 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2061 UCHAR DtimCount; // 0.. DtimPeriod-1
2062 UCHAR DtimPeriod; // default = 3
2064 ////////////////////////////////////////////////////////////////////////////////////////
2065 // This is only for WHQL test.
2067 ////////////////////////////////////////////////////////////////////////////////////////
2069 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2071 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2072 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2074 #ifdef WPA_SUPPLICANT_SUPPORT
2076 BOOLEAN IEEE8021x_required_keys;
2077 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2078 UCHAR DesireSharedKeyId;
2080 // 0: driver ignores wpa_supplicant
2081 // 1: wpa_supplicant initiates scanning and AP selection
2082 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2083 UCHAR WpaSupplicantUP;
2084 UCHAR WpaSupplicantScanCount;
2085 #endif // WPA_SUPPLICANT_SUPPORT //
2090 BOOLEAN bTGnWifiTest;
2091 BOOLEAN bScanReqIsFromWebUI;
2093 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2094 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2095 RT_HT_PHY_INFO DesiredHtPhyInfo;
2096 BOOLEAN bAutoTxRateSwitch;
2097 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2099 // This data structure keep the current active BSS/IBSS's configuration that this STA
2100 // had agreed upon joining the network. Which means these parameters are usually decided
2101 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2102 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2103 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2104 // the current active settings.
2105 typedef struct _STA_ACTIVE_CONFIG {
2107 USHORT AtimWin; // in kusec; IBSS parameter set element
2108 USHORT CapabilityInfo;
2109 USHORT CfpMaxDuration;
2112 // Copy supported rate from desired AP's beacon. We are trying to match
2113 // AP's supported and extended rate settings.
2114 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2115 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2118 // Copy supported ht from desired AP's beacon. We are trying to match
2119 RT_HT_PHY_INFO SupportedPhyInfo;
2120 RT_HT_CAPABILITY SupportedHtPhy;
2121 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2124 // for USB interface, avoid in interrupt when write key
2125 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2126 NDIS_802_11_MAC_ADDRESS MacAddr;
2127 USHORT MacTabMatchWCID; // ASIC
2128 CIPHER_KEY CipherKey;
2129 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2131 #endif // CONFIG_STA_SUPPORT //
2133 // ----------- start of AP --------------------------
2134 // AUTH-RSP State Machine Aux data structure
2135 typedef struct _AP_MLME_AUX {
2136 UCHAR Addr[MAC_ADDR_LEN];
2138 CHAR Challenge[CIPHER_TEXT_LEN];
2139 } AP_MLME_AUX, *PAP_MLME_AUX;
2141 // structure to define WPA Group Key Rekey Interval
2142 typedef struct PACKED _RT_802_11_WPA_REKEY {
2143 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2144 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2145 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2147 typedef struct _MAC_TABLE_ENTRY {
2148 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2149 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2150 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2151 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2152 BOOLEAN ValidAsMesh;
2153 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2155 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2157 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2159 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2160 UCHAR CMTimerRunning;
2161 UCHAR apidx; // MBSS number
2163 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2164 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2165 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2168 RALINK_TIMER_STRUCT RetryTimer;
2169 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2170 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2171 NDIS_802_11_WEP_STATUS WepStatus;
2172 AP_WPA_STATE WpaState;
2175 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2176 CIPHER_KEY PairwiseKey;
2179 UCHAR PMKID[LEN_PMKID];
2182 UCHAR Addr[MAC_ADDR_LEN];
2185 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2186 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2188 USHORT CapabilityInfo;
2190 ULONG NoDataIdleCount;
2191 UINT16 StationKeepAliveCount; // unit: second
2193 QUEUE_HEADER PsQueue;
2195 UINT32 StaConnectTime; // the live time of this station since associated with AP
2198 #ifdef DOT11_N_SUPPORT
2200 USHORT NoBADataCountDown;
2202 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2203 UINT TxBFCount; // 3*3
2204 #endif // DOT11_N_SUPPORT //
2206 UINT DebugFIFOCount;
2211 //====================================================
2212 //WDS entry needs these
2213 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2214 UINT MatchWDSTabIdx;
2215 UCHAR MaxSupportedRate;
2217 UCHAR CurrTxRateIndex;
2218 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2219 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2220 // USHORT OneSecTxOkCount;
2221 UINT32 OneSecTxNoRetryOkCount;
2222 UINT32 OneSecTxRetryOkCount;
2223 UINT32 OneSecTxFailCount;
2224 UINT32 ContinueTxFailCnt;
2225 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2226 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2227 //====================================================
2229 BOOLEAN fNoisyEnvironment;
2230 BOOLEAN fLastSecAccordingRSSI;
2231 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2232 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2233 ULONG LastTxOkCount;
2234 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2236 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2237 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2238 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2239 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2240 ULONG ClientStatusFlags;
2242 // TODO: Shall we move that to DOT11_N_SUPPORT???
2243 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2245 #ifdef DOT11_N_SUPPORT
2246 // HT EWC MIMO-N used parameters
2247 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2248 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2249 USHORT TXAutoBAbitmap;
2250 USHORT BADeclineBitmap;
2251 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2252 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2253 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2255 // 802.11n features.
2257 UCHAR MaxRAmpduFactor;
2259 UCHAR MmpsMode; // MIMO power save more.
2261 HT_CAPABILITY_IE HTCapability;
2263 #ifdef DOT11N_DRAFT3
2264 UCHAR BSS2040CoexistenceMgmtSupport;
2265 #endif // DOT11N_DRAFT3 //
2266 #endif // DOT11_N_SUPPORT //
2268 BOOLEAN bAutoTxRateSwitch;
2271 struct _MAC_TABLE_ENTRY *pNext;
2272 USHORT TxSeq[NUM_OF_TID];
2273 USHORT NonQosDataSeq;
2275 RSSI_SAMPLE RssiSample;
2277 UINT32 TXMCSExpected[16];
2278 UINT32 TXMCSSuccessful[16];
2279 UINT32 TXMCSFailed[16];
2280 UINT32 TXMCSAutoFallBack[16][16];
2282 #ifdef CONFIG_STA_SUPPORT
2283 ULONG LastBeaconRxTime;
2284 #endif // CONFIG_STA_SUPPORT //
2285 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2287 typedef struct _MAC_TABLE {
2289 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2290 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2291 QUEUE_HEADER McastPsQueue;
2293 BOOLEAN fAnyStationInPsm;
2294 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2295 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2296 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2297 #ifdef DOT11_N_SUPPORT
2298 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2299 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2300 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2301 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2302 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2303 #endif // DOT11_N_SUPPORT //
2304 } MAC_TABLE, *PMAC_TABLE;
2306 #ifdef DOT11_N_SUPPORT
2307 #define IS_HT_STA(_pMacEntry) \
2308 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2310 #define IS_HT_RATE(_pMacEntry) \
2311 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2313 #define PEER_IS_HT_RATE(_pMacEntry) \
2314 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2315 #endif // DOT11_N_SUPPORT //
2317 typedef struct _WDS_ENTRY {
2319 UCHAR Addr[MAC_ADDR_LEN];
2320 ULONG NoDataIdleCount;
2321 struct _WDS_ENTRY *pNext;
2322 } WDS_ENTRY, *PWDS_ENTRY;
2324 typedef struct _WDS_TABLE_ENTRY {
2326 UCHAR WdsAddr[MAC_ADDR_LEN];
2327 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2328 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2329 UCHAR MaxSupportedRate;
2331 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2332 USHORT OneSecTxOkCount;
2333 USHORT OneSecTxRetryOkCount;
2334 USHORT OneSecTxFailCount;
2335 ULONG CurrTxRateStableTime; // # of second in current TX rate
2336 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2337 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2339 typedef struct _RT_802_11_WDS_ENTRY {
2343 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2344 UCHAR MacTabMatchWCID; // ASIC
2345 NDIS_802_11_WEP_STATUS WepStatus;
2348 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2349 RT_HT_PHY_INFO DesiredHtPhyInfo;
2350 BOOLEAN bAutoTxRateSwitch;
2351 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2352 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2354 typedef struct _WDS_TABLE {
2357 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2358 } WDS_TABLE, *PWDS_TABLE;
2360 typedef struct _APCLI_STRUCT {
2363 unsigned int mylinkid;
2365 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2366 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2367 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2369 CHAR Ssid[MAX_LEN_OF_SSID];
2372 CHAR CfgSsid[MAX_LEN_OF_SSID];
2373 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2374 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2376 ULONG ApCliRcvBeaconTime;
2378 ULONG CtrlCurrState;
2379 ULONG SyncCurrState;
2380 ULONG AuthCurrState;
2381 ULONG AssocCurrState;
2382 ULONG WpaPskCurrState;
2387 ULONG ClientStatusFlags;
2390 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2391 NDIS_802_11_WEP_STATUS WepStatus;
2393 // Add to support different cipher suite for WPA2/WPA mode
2394 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2395 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2396 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2397 USHORT RsnCapability;
2399 UCHAR PSK[100]; // reserve PSK key material
2401 UCHAR PMK[32]; // WPA PSK mode PMK
2402 //UCHAR PTK[64]; // WPA PSK mode PTK
2403 UCHAR GTK[32]; // GTK from authenticator
2405 //CIPHER_KEY PairwiseKey;
2406 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2409 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2410 //UCHAR PortSecured;
2412 // store RSN_IE built by driver
2413 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2416 // For WPA countermeasures
2417 ULONG LastMicErrorTime; // record last MIC error time
2418 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2419 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2421 // For WPA-PSK supplicant state
2422 //WPA_STATE WpaState; // Default is SS_NOTUSE
2423 //UCHAR ReplayCounter[8];
2424 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2425 UCHAR SNonce[32]; // SNonce for WPA-PSK
2426 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2428 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2429 RT_HT_PHY_INFO DesiredHtPhyInfo;
2430 BOOLEAN bAutoTxRateSwitch;
2431 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2432 } APCLI_STRUCT, *PAPCLI_STRUCT;
2434 // ----------- end of AP ----------------------------
2439 BOOLEAN bGreenField;
2444 typedef struct _INF_PCI_CONFIG
2446 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2449 typedef struct _INF_USB_CONFIG
2451 UINT BulkInEpAddr; // bulk-in endpoint address
2452 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2456 #ifdef IKANOS_VX_1X0
2457 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2459 struct IKANOS_TX_INFO
2461 struct net_device *netdev;
2462 IkanosWlanTxCbFuncP *fp;
2464 #endif // IKANOS_VX_1X0 //
2467 #define DIAGNOSE_TIME 10 // 10 sec
2468 typedef struct _RtmpDiagStrcut_
2469 { // Diagnosis Related element
2470 unsigned char inited;
2472 unsigned char ArrayStartIdx;
2473 unsigned char ArrayCurIdx;
2475 USHORT TxDataCnt[DIAGNOSE_TIME];
2476 USHORT TxFailCnt[DIAGNOSE_TIME];
2477 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2478 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2479 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2480 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2481 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2483 USHORT TxAggCnt[DIAGNOSE_TIME];
2484 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2485 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2486 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2487 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2488 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2491 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2492 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2493 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2494 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2496 #endif // DBG_DIAGNOSE //
2500 // The miniport adapter structure
2502 typedef struct _RTMP_ADAPTER
2504 PVOID OS_Cookie; // save specific structure relative to OS
2510 NDIS_SPIN_LOCK irq_lock;
2514 /*****************************************************************************************/
2515 /* USB related parameters */
2516 /*****************************************************************************************/
2517 struct usb_config_descriptor *config;
2518 UINT BulkInEpAddr; // bulk-in endpoint address
2519 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2522 USHORT BulkOutMaxPacketSize;
2523 USHORT BulkInMaxPacketSize;
2525 //======Control Flags
2526 LONG PendingIoCount;
2528 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2531 //======Timer Thread
2532 RT2870_TIMER_QUEUE TimerQ;
2533 NDIS_SPIN_LOCK TimerQLock;
2538 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2540 BOOLEAN TimerFunc_kill;
2544 //======Semaphores (event)
2545 struct semaphore mlme_semaphore; /* to sleep thread on */
2546 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2547 struct semaphore RTUSBTimer_semaphore;
2548 #ifdef INF_AMAZON_SE
2549 struct semaphore UsbVendorReq_semaphore;
2550 PVOID UsbVendorReqBuf;
2551 #endif // INF_AMAZON_SE //
2552 struct completion TimerQComplete;
2553 struct completion mlmeComplete;
2554 struct completion CmdQComplete;
2555 wait_queue_head_t *wait;
2559 /*****************************************************************************************/
2560 /* Both PCI/USB related parameters */
2561 /*****************************************************************************************/
2564 /*****************************************************************************************/
2565 /* Tx related parameters */
2566 /*****************************************************************************************/
2567 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2568 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2571 // Data related context and AC specified, 4 AC supported
2572 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2573 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2575 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2576 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2578 // 4 sets of Bulk Out index and pending flag
2579 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2581 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2582 UCHAR bulkResetPipeid;
2583 BOOLEAN MgmtBulkPending;
2584 ULONG bulkResetReq[6];
2587 // resource for software backlog queues
2588 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2589 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2591 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2592 RTMP_MGMT_RING MgmtRing;
2593 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2596 /*****************************************************************************************/
2597 /* Rx related parameters */
2598 /*****************************************************************************************/
2602 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2603 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2604 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2605 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2606 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2607 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2608 ULONG TransferBufferLength; // current length of the packet buffer
2609 ULONG ReadPosition; // current read position in a packet buffer
2613 /*****************************************************************************************/
2614 /* ASIC related parameters */
2615 /*****************************************************************************************/
2616 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2618 // ---------------------------
2620 // ---------------------------
2621 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2622 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2623 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2624 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2626 // ---------------------------
2628 // ---------------------------
2629 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2630 UCHAR BbpRssiToDbmDelta;
2631 BBP_R66_TUNING BbpTuning;
2633 // ----------------------------
2635 // ----------------------------
2636 UCHAR RfIcType; // RFIC_xxx
2637 ULONG RfFreqOffset; // Frequency offset for channel switching
2638 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2640 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2641 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2643 // This soft Rx Antenna Diversity mechanism is used only when user set
2644 // RX Antenna = DIVERSITY ON
2645 SOFT_RX_ANT_DIVERSITY RxAnt;
2648 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2649 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2650 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2651 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2653 UCHAR ChannelListNum; // number of channel in ChannelList[]
2656 ULONG Tx20MPwrCfgABand[5];
2657 ULONG Tx20MPwrCfgGBand[5];
2658 ULONG Tx40MPwrCfgABand[5];
2659 ULONG Tx40MPwrCfgGBand[5];
2661 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2662 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2663 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2664 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2665 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2666 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2668 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2669 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2670 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2671 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2672 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2673 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2675 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2676 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2677 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2678 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2681 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2682 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2683 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2684 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2687 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2688 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2689 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2690 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2692 // ----------------------------
2694 // ----------------------------
2695 MCU_LEDCS_STRUC LedCntl;
2696 USHORT Led1; // read from EEPROM 0x3c
2697 USHORT Led2; // EEPROM 0x3e
2698 USHORT Led3; // EEPROM 0x40
2699 UCHAR LedIndicatorStregth;
2700 UCHAR RssiSingalstrengthOffet;
2701 BOOLEAN bLedOnScanning;
2704 /*****************************************************************************************/
2705 /* 802.11 related parameters */
2706 /*****************************************************************************************/
2707 // outgoing BEACON frame buffer and corresponding TXD
2708 TXWI_STRUC BeaconTxWI;
2710 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2712 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2713 PSPOLL_FRAME PsPollFrame;
2714 HEADER_802_11 NullFrame;
2717 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2718 TX_CONTEXT NullContext;
2719 TX_CONTEXT PsPollContext;
2720 TX_CONTEXT RTSContext;
2725 //=========AP===========
2728 //=======STA===========
2729 #ifdef CONFIG_STA_SUPPORT
2730 /* Modified by Wu Xi-Kun 4/21/2006 */
2731 // -----------------------------------------------
2732 // STA specific configuration & operation status
2733 // used only when pAd->OpMode == OPMODE_STA
2734 // -----------------------------------------------
2735 STA_ADMIN_CONFIG StaCfg; // user desired settings
2736 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2737 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2738 NDIS_MEDIA_STATE PreMediaState;
2739 #endif // CONFIG_STA_SUPPORT //
2741 //=======Common===========
2742 // OP mode: either AP or STA
2743 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2745 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2748 // configuration: read from Registry & E2PROM
2749 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2750 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2751 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2753 // ------------------------------------------------------
2754 // common configuration to both OPMODE_STA and OPMODE_AP
2755 // ------------------------------------------------------
2756 COMMON_CONFIG CommonCfg;
2759 // AP needs those vaiables for site survey feature.
2760 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2761 BSS_TABLE ScanTab; // store the latest SCAN result
2763 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2764 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2765 NDIS_SPIN_LOCK MacTabLock;
2767 #ifdef DOT11_N_SUPPORT
2769 #endif // DOT11_N_SUPPORT //
2770 NDIS_SPIN_LOCK BATabLock;
2771 RALINK_TIMER_STRUCT RECBATimer;
2773 // encryption/decryption KEY tables
2774 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2776 // RX re-assembly buffer for fragmentation
2777 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2780 COUNTER_802_3 Counters8023; // 802.3 counters
2781 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2782 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2783 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2784 PRIVATE_STRUC PrivateInfo; // Private information & counters
2786 // flags, see fRTMP_ADAPTER_xxx flags
2787 ULONG Flags; // Represent current device status
2789 // current TX sequence #
2792 // Control disconnect / connect event generation
2793 //+++Didn't used anymore
2798 //+++Used only for Station
2799 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2802 ULONG ExtraInfo; // Extra information for displaying status
2803 ULONG SystemErrorBitmap; // b0: E2PROM version error
2805 //+++Didn't used anymore
2806 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2809 // ---------------------------
2811 // ---------------------------
2812 RT_802_11_EVENT_TABLE EventTab;
2817 /*****************************************************************************************/
2818 /* Statistic related parameters */
2819 /*****************************************************************************************/
2821 ULONG BulkOutDataOneSecCount;
2822 ULONG BulkInDataOneSecCount;
2823 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2824 ULONG watchDogRxCnt;
2825 ULONG watchDogRxOverFlowCnt;
2826 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2829 BOOLEAN bUpdateBcnCntDone;
2830 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2831 // ----------------------------
2833 // ----------------------------
2834 //ULONG DebugSetting[4];
2835 BOOLEAN bBanAllBaSetup;
2836 BOOLEAN bPromiscuous;
2838 // ----------------------------
2839 // rt2860c emulation-use Parameters
2840 // ----------------------------
2843 ULONG cfendaccu[30];
2844 ULONG bacontent[16];
2845 ULONG rxint[RX_RING_SIZE+1];
2848 BOOLEAN bForcePrintTX;
2849 BOOLEAN bForcePrintRX;
2850 BOOLEAN bDisablescanning; //defined in RT2870 USB
2851 BOOLEAN bStaFifoTest;
2852 BOOLEAN bProtectionTest;
2854 BOOLEAN bGenOneHCCA;
2855 BOOLEAN bBroadComHT;
2856 //+++Following add from RT2870 USB.
2858 ULONG BulkOutComplete;
2859 ULONG BulkOutCompleteOther;
2860 ULONG BulkOutCompleteCancel; // seems not use now?
2862 ULONG BulkInComplete;
2863 ULONG BulkInCompleteFail;
2866 struct wificonf WIFItestbed;
2868 #ifdef DOT11_N_SUPPORT
2869 struct reordering_mpdu_pool mpdu_blk_pool;
2870 #endif // DOT11_N_SUPPORT //
2872 ULONG OneSecondnonBEpackets; // record non BE packets per second
2874 #if WIRELESS_EXT >= 12
2875 struct iw_statistics iw_stats;
2878 struct net_device_stats stats;
2880 ULONG TbttTickCount;
2881 #ifdef PCI_MSI_SUPPORT
2883 #endif // PCI_MSI_SUPPORT //
2888 #define TIME_BASE (1000000/OS_HZ)
2889 #define TIME_ONE_SECOND (1000000/TIME_BASE)
2890 UCHAR flg_be_adjust;
2891 ULONG be_adjust_last_time;
2894 #ifdef IKANOS_VX_1X0
2895 struct IKANOS_TX_INFO IkanosTxInfo;
2896 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2897 #endif // IKANOS_VX_1X0 //
2901 RtmpDiagStruct DiagStruct;
2902 #endif // DBG_DIAGNOSE //
2905 UINT8 PM_FlgSuspend;
2906 } RTMP_ADAPTER, *PRTMP_ADAPTER;
2909 // Cisco IAPP format
2911 typedef struct _CISCO_IAPP_CONTENT_
2913 USHORT Length; //IAPP Length
2914 UCHAR MessageType; //IAPP type
2915 UCHAR FunctionCode; //IAPP function type
2916 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2917 UCHAR SourceMAC[MAC_ADDR_LEN];
2918 USHORT Tag; //Tag(element IE) - Adjacent AP report
2919 USHORT TagLength; //Length of element not including 4 byte header
2920 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2921 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2924 UCHAR Ssid[MAX_LEN_OF_SSID];
2925 USHORT Seconds; //Seconds that the client has been disassociated.
2926 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2928 #define DELAYINTMASK 0x0003fffb
2929 #define INTMASK 0x0003fffb
2930 #define IndMask 0x0003fffc
2931 #define RxINT 0x00000005 // Delayed Rx or indivi rx
2932 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2933 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2934 #define TxCoherent 0x00020000 // tx coherent
2935 #define RxCoherent 0x00010000 // rx coherent
2936 #define McuCommand 0x00000200 // mcu
2937 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2938 #define TBTTInt 0x00000800 // TBTT interrupt
2939 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2940 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2941 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2944 typedef struct _RX_BLK_
2946 // RXD_STRUC RxD; // sample
2947 RT28XX_RXD_STRUC RxD;
2949 PHEADER_802_11 pHeader;
2950 PNDIS_PACKET pRxPacket;
2954 UCHAR UserPriority; // for calculate TKIP MIC using
2958 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2959 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2960 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2963 #define fRX_WDS 0x0001
2964 #define fRX_AMSDU 0x0002
2965 #define fRX_ARALINK 0x0004
2966 #define fRX_HTC 0x0008
2967 #define fRX_PAD 0x0010
2968 #define fRX_AMPDU 0x0020
2969 #define fRX_QOS 0x0040
2970 #define fRX_INFRA 0x0080
2971 #define fRX_EAP 0x0100
2972 #define fRX_MESH 0x0200
2973 #define fRX_APCLI 0x0400
2974 #define fRX_DLS 0x0800
2975 #define fRX_WPI 0x1000
2977 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
2978 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
2979 #define LENGTH_ARALINK_HEADER_FIELD 2
2981 #define TX_UNKOWN_FRAME 0x00
2982 #define TX_MCAST_FRAME 0x01
2983 #define TX_LEGACY_FRAME 0x02
2984 #define TX_AMPDU_FRAME 0x04
2985 #define TX_AMSDU_FRAME 0x08
2986 #define TX_RALINK_FRAME 0x10
2987 #define TX_FRAG_FRAME 0x20
2990 // Currently the sizeof(TX_BLK) is 148 bytes.
2991 typedef struct _TX_BLK_
2994 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2995 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2996 USHORT TotalFragNum; // Total frame fragments required in one batch
2997 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2999 QUEUE_HEADER TxPacketList;
3000 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3001 HTTRANSMIT_SETTING *pTransmit;
3003 // Following structure used for the characteristics of a specific packet.
3004 PNDIS_PACKET pPacket;
3005 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3006 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3007 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3008 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3009 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3010 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3011 UCHAR HdrPadLen; // recording Header Padding Length;
3012 UCHAR apidx; // The interface associated to this packet
3013 UCHAR Wcid; // The MAC entry associated to this packet
3014 UCHAR UserPriority; // priority class of packet
3015 UCHAR FrameGap; // what kind of IFS this packet use
3016 UCHAR MpduReqNum; // number of fragments of this frame
3017 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3018 UCHAR CipherAlg; // cipher alogrithm
3023 USHORT Flags; //See following definitions for detail.
3025 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3026 ULONG Priv; // Hardware specific value saved in here.
3030 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3031 #define fTX_bAckRequired 0x0002 // the packet need ack response
3032 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3033 #define fTX_bHTRate 0x0008 // allow to use HT rate
3034 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3035 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3036 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3037 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3038 #define fTX_bWMM 0x0080 // QOS Data
3040 #define fTX_bClearEAPFrame 0x0100
3043 #ifdef CONFIG_STA_SUPPORT
3044 #endif // CONFIG_STA_SUPPORT //
3048 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3051 (_pTxBlk->Flags |= _flag) \
3053 (_pTxBlk->Flags &= ~(_flag)) \
3056 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3057 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3058 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3064 //------------------------------------------------------------------------------------------
3068 #ifdef RT_BIG_ENDIAN
3069 static inline VOID WriteBackToDescriptor(
3072 IN BOOLEAN DoEncrypt,
3073 IN ULONG DescriptorType)
3077 p1 = ((UINT32 *)Dest);
3078 p2 = ((UINT32 *)Src);
3083 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3087 ========================================================================
3089 Routine Description:
3090 Endian conversion of Tx/Rx descriptor .
3093 pAd Pointer to our adapter
3094 pData Pointer to Tx/Rx descriptor
3095 DescriptorType Direction of the frame
3101 Call this function when read or update descriptor
3102 ========================================================================
3104 static inline VOID RTMPWIEndianChange(
3106 IN ULONG DescriptorType)
3111 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3113 if(DescriptorType == TYPE_TXWI)
3115 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3116 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3120 for(i=0; i < size/4 ; i++)
3121 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3126 ========================================================================
3128 Routine Description:
3129 Endian conversion of Tx/Rx descriptor .
3132 pAd Pointer to our adapter
3133 pData Pointer to Tx/Rx descriptor
3134 DescriptorType Direction of the frame
3140 Call this function when read or update descriptor
3141 ========================================================================
3145 static inline VOID RTMPDescriptorEndianChange(
3147 IN ULONG DescriptorType)
3149 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3153 ========================================================================
3155 Routine Description:
3156 Endian conversion of all kinds of 802.11 frames .
3159 pAd Pointer to our adapter
3160 pData Pointer to the 802.11 frame structure
3161 Dir Direction of the frame
3162 FromRxDoneInt Caller is from RxDone interrupt
3168 Call this function when read or update buffer data
3169 ========================================================================
3171 static inline VOID RTMPFrameEndianChange(
3172 IN PRTMP_ADAPTER pAd,
3175 IN BOOLEAN FromRxDoneInt)
3177 PHEADER_802_11 pFrame;
3180 // swab 16 bit fields - Frame Control field
3183 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3186 pFrame = (PHEADER_802_11) pData;
3187 pMacHdr = (PUCHAR) pFrame;
3189 // swab 16 bit fields - Duration/ID field
3190 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3192 // swab 16 bit fields - Sequence Control field
3193 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3195 if(pFrame->FC.Type == BTYPE_MGMT)
3197 switch(pFrame->FC.SubType)
3199 case SUBTYPE_ASSOC_REQ:
3200 case SUBTYPE_REASSOC_REQ:
3201 // swab 16 bit fields - CapabilityInfo field
3202 pMacHdr += sizeof(HEADER_802_11);
3203 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3205 // swab 16 bit fields - Listen Interval field
3207 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3210 case SUBTYPE_ASSOC_RSP:
3211 case SUBTYPE_REASSOC_RSP:
3212 // swab 16 bit fields - CapabilityInfo field
3213 pMacHdr += sizeof(HEADER_802_11);
3214 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3216 // swab 16 bit fields - Status Code field
3218 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3220 // swab 16 bit fields - AID field
3222 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3226 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3227 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3228 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3232 // swab 16 bit fields - Auth Alg No. field
3233 pMacHdr += sizeof(HEADER_802_11);
3234 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3236 // swab 16 bit fields - Auth Seq No. field
3238 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3240 // swab 16 bit fields - Status Code field
3242 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3246 case SUBTYPE_BEACON:
3247 case SUBTYPE_PROBE_RSP:
3248 // swab 16 bit fields - BeaconInterval field
3249 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3250 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3252 // swab 16 bit fields - CapabilityInfo field
3253 pMacHdr += sizeof(USHORT);
3254 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3257 case SUBTYPE_DEAUTH:
3258 case SUBTYPE_DISASSOC:
3259 // swab 16 bit fields - Reason code field
3260 pMacHdr += sizeof(HEADER_802_11);
3261 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3265 else if( pFrame->FC.Type == BTYPE_DATA )
3268 else if(pFrame->FC.Type == BTYPE_CNTL)
3270 switch(pFrame->FC.SubType)
3272 case SUBTYPE_BLOCK_ACK_REQ:
3274 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3275 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3276 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3279 case SUBTYPE_BLOCK_ACK:
3280 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3281 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3285 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3286 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3292 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3295 // swab 16 bit fields - Frame Control
3296 if(Dir == DIR_WRITE)
3298 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3301 #endif // RT_BIG_ENDIAN //
3304 static inline VOID ConvertMulticastIP2MAC(
3306 IN PUCHAR *ppMacAddr,
3307 IN UINT16 ProtoType)
3309 if (pIpAddr == NULL)
3312 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3318 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3319 *(*ppMacAddr) = 0x33;
3320 *(*ppMacAddr + 1) = 0x33;
3321 *(*ppMacAddr + 2) = pIpAddr[12];
3322 *(*ppMacAddr + 3) = pIpAddr[13];
3323 *(*ppMacAddr + 4) = pIpAddr[14];
3324 *(*ppMacAddr + 5) = pIpAddr[15];
3329 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3330 *(*ppMacAddr) = 0x01;
3331 *(*ppMacAddr + 1) = 0x00;
3332 *(*ppMacAddr + 2) = 0x5e;
3333 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3334 *(*ppMacAddr + 4) = pIpAddr[2];
3335 *(*ppMacAddr + 5) = pIpAddr[3];
3342 BOOLEAN RTMPCheckForHang(
3343 IN NDIS_HANDLE MiniportAdapterContext
3347 IN NDIS_HANDLE MiniportAdapterContext
3351 // Private routines in rtmp_init.c
3353 NDIS_STATUS RTMPAllocAdapterBlock(
3355 OUT PRTMP_ADAPTER *ppAdapter
3358 NDIS_STATUS RTMPAllocTxRxRingMemory(
3359 IN PRTMP_ADAPTER pAd
3362 NDIS_STATUS RTMPFindAdapter(
3363 IN PRTMP_ADAPTER pAd,
3364 IN NDIS_HANDLE WrapperConfigurationContext
3367 NDIS_STATUS RTMPReadParametersHook(
3368 IN PRTMP_ADAPTER pAd
3371 VOID RTMPFreeAdapter(
3372 IN PRTMP_ADAPTER pAd
3375 NDIS_STATUS NICReadRegParameters(
3376 IN PRTMP_ADAPTER pAd,
3377 IN NDIS_HANDLE WrapperConfigurationContext
3381 VOID NICInitRT30xxRFRegisters(
3382 IN PRTMP_ADAPTER pAd);
3385 VOID NICReadEEPROMParameters(
3386 IN PRTMP_ADAPTER pAd,
3387 IN PUCHAR mac_addr);
3389 VOID NICInitAsicFromEEPROM(
3390 IN PRTMP_ADAPTER pAd);
3392 VOID NICInitTxRxRingAndBacklogQueue(
3393 IN PRTMP_ADAPTER pAd);
3395 NDIS_STATUS NICInitializeAdapter(
3396 IN PRTMP_ADAPTER pAd,
3397 IN BOOLEAN bHardReset);
3399 NDIS_STATUS NICInitializeAsic(
3400 IN PRTMP_ADAPTER pAd,
3401 IN BOOLEAN bHardReset);
3404 IN PRTMP_ADAPTER pAd);
3406 VOID RTMPRingCleanUp(
3407 IN PRTMP_ADAPTER pAd,
3411 IN PRTMP_ADAPTER pAd);
3413 NDIS_STATUS DbgSendPacket(
3414 IN PRTMP_ADAPTER pAd,
3415 IN PNDIS_PACKET pPacket);
3418 IN PRTMP_ADAPTER pAd);
3420 VOID NICResetFromError(
3421 IN PRTMP_ADAPTER pAd);
3423 VOID NICEraseFirmware(
3424 IN PRTMP_ADAPTER pAd);
3426 NDIS_STATUS NICLoadFirmware(
3427 IN PRTMP_ADAPTER pAd);
3429 NDIS_STATUS NICLoadRateSwitchingParams(
3430 IN PRTMP_ADAPTER pAd);
3432 BOOLEAN NICCheckForHang(
3433 IN PRTMP_ADAPTER pAd);
3435 VOID NICUpdateFifoStaCounters(
3436 IN PRTMP_ADAPTER pAd);
3438 VOID NICUpdateRawCounters(
3439 IN PRTMP_ADAPTER pAd);
3442 ULONG RTMPEqualMemory(
3448 ULONG RTMPNotAllZero(
3452 VOID RTMPZeroMemory(
3456 ULONG RTMPCompareMemory(
3461 VOID RTMPMoveMemory(
3474 VOID RTMPPatchMacBbpBug(
3475 IN PRTMP_ADAPTER pAd);
3477 VOID RTMPPatchCardBus(
3478 IN PRTMP_ADAPTER pAdapter);
3480 VOID RTMPPatchRalinkCardBus(
3481 IN PRTMP_ADAPTER pAdapter,
3484 ULONG RTMPReadCBConfig(
3490 VOID RTMPWriteCBConfig(
3498 IN PRTMP_ADAPTER pAd,
3499 IN PRALINK_TIMER_STRUCT pTimer,
3500 IN PVOID pTimerFunc,
3505 IN PRALINK_TIMER_STRUCT pTimer,
3510 IN PRALINK_TIMER_STRUCT pTimer,
3513 VOID RTMPCancelTimer(
3514 IN PRALINK_TIMER_STRUCT pTimer,
3515 OUT BOOLEAN *pCancelled);
3518 IN PRTMP_ADAPTER pAd,
3521 VOID RTMPSetSignalLED(
3522 IN PRTMP_ADAPTER pAd,
3523 IN NDIS_802_11_RSSI Dbm);
3525 VOID RTMPEnableRxTx(
3526 IN PRTMP_ADAPTER pAd);
3529 // prototype in action.c
3531 VOID ActionStateMachineInit(
3532 IN PRTMP_ADAPTER pAd,
3533 IN STATE_MACHINE *S,
3534 OUT STATE_MACHINE_FUNC Trans[]);
3536 VOID MlmeADDBAAction(
3537 IN PRTMP_ADAPTER pAd,
3538 IN MLME_QUEUE_ELEM *Elem);
3540 VOID MlmeDELBAAction(
3541 IN PRTMP_ADAPTER pAd,
3542 IN MLME_QUEUE_ELEM *Elem);
3545 IN PRTMP_ADAPTER pAd,
3546 IN MLME_QUEUE_ELEM *Elem);
3548 VOID MlmeInvalidAction(
3549 IN PRTMP_ADAPTER pAd,
3550 IN MLME_QUEUE_ELEM *Elem);
3553 IN PRTMP_ADAPTER pAd,
3554 IN MLME_QUEUE_ELEM *Elem);
3556 #ifdef DOT11_N_SUPPORT
3557 VOID PeerAddBAReqAction(
3558 IN PRTMP_ADAPTER pAd,
3559 IN MLME_QUEUE_ELEM *Elem);
3561 VOID PeerAddBARspAction(
3562 IN PRTMP_ADAPTER pAd,
3563 IN MLME_QUEUE_ELEM *Elem);
3565 VOID PeerDelBAAction(
3566 IN PRTMP_ADAPTER pAd,
3567 IN MLME_QUEUE_ELEM *Elem);
3570 IN PRTMP_ADAPTER pAd,
3571 IN MLME_QUEUE_ELEM *Elem);
3572 #endif // DOT11_N_SUPPORT //
3574 VOID SendPSMPAction(
3575 IN PRTMP_ADAPTER pAd,
3580 #ifdef DOT11N_DRAFT3
3581 VOID SendBSS2040CoexistMgmtAction(
3582 IN PRTMP_ADAPTER pAd,
3587 VOID SendNotifyBWActionFrame(
3588 IN PRTMP_ADAPTER pAd,
3592 BOOLEAN ChannelSwitchSanityCheck(
3593 IN PRTMP_ADAPTER pAd,
3595 IN UCHAR NewChannel,
3596 IN UCHAR Secondary);
3598 VOID ChannelSwitchAction(
3599 IN PRTMP_ADAPTER pAd,
3602 IN UCHAR Secondary);
3604 ULONG BuildIntolerantChannelRep(
3605 IN PRTMP_ADAPTER pAd,
3608 VOID Update2040CoexistFrameAndNotify(
3609 IN PRTMP_ADAPTER pAd,
3611 IN BOOLEAN bAddIntolerantCha);
3613 VOID Send2040CoexistAction(
3614 IN PRTMP_ADAPTER pAd,
3616 IN BOOLEAN bAddIntolerantCha);
3617 #endif // DOT11N_DRAFT3 //
3620 IN PRTMP_ADAPTER pAd,
3621 IN MLME_QUEUE_ELEM *Elem);
3623 VOID PeerPublicAction(
3624 IN PRTMP_ADAPTER pAd,
3625 IN MLME_QUEUE_ELEM *Elem);
3627 #ifdef CONFIG_STA_SUPPORT
3628 VOID StaPublicAction(
3629 IN PRTMP_ADAPTER pAd,
3630 IN UCHAR Bss2040Coexist);
3631 #endif // CONFIG_STA_SUPPORT //
3634 VOID PeerBSSTranAction(
3635 IN PRTMP_ADAPTER pAd,
3636 IN MLME_QUEUE_ELEM *Elem);
3638 #ifdef DOT11_N_SUPPORT
3640 IN PRTMP_ADAPTER pAd,
3641 IN MLME_QUEUE_ELEM *Elem);
3642 #endif // DOT11_N_SUPPORT //
3645 IN PRTMP_ADAPTER pAd,
3646 IN MLME_QUEUE_ELEM *Elem);
3648 #ifdef DOT11_N_SUPPORT
3649 VOID RECBATimerTimeout(
3650 IN PVOID SystemSpecific1,
3651 IN PVOID FunctionContext,
3652 IN PVOID SystemSpecific2,
3653 IN PVOID SystemSpecific3);
3655 VOID ORIBATimerTimeout(
3656 IN PRTMP_ADAPTER pAd);
3658 VOID SendRefreshBAR(
3659 IN PRTMP_ADAPTER pAd,
3660 IN MAC_TABLE_ENTRY *pEntry);
3661 #endif // DOT11_N_SUPPORT //
3664 IN PRTMP_ADAPTER pAd,
3665 IN OUT PHEADER_802_11 pHdr80211,
3671 IN PRTMP_ADAPTER pAd,
3672 IN OUT PFRAME_BAR pCntlBar,
3676 VOID InsertActField(
3677 IN PRTMP_ADAPTER pAd,
3678 OUT PUCHAR pFrameBuf,
3679 OUT PULONG pFrameLen,
3683 BOOLEAN QosBADataParse(
3684 IN PRTMP_ADAPTER pAd,
3686 IN PUCHAR p8023Header,
3690 IN UCHAR DataOffset,
3692 IN UINT CurRxIndex);
3694 #ifdef DOT11_N_SUPPORT
3695 BOOLEAN CntlEnqueueForRecv(
3696 IN PRTMP_ADAPTER pAd,
3699 IN PFRAME_BA_REQ pMsg);
3701 VOID BaAutoManSwitch(
3702 IN PRTMP_ADAPTER pAd);
3703 #endif // DOT11_N_SUPPORT //
3706 IN PRTMP_ADAPTER pAd,
3707 IN UCHAR BatRecIdx);
3710 // Private routines in rtmp_data.c
3712 BOOLEAN RTMPHandleRxDoneInterrupt(
3713 IN PRTMP_ADAPTER pAd);
3715 VOID RTMPHandleTxDoneInterrupt(
3716 IN PRTMP_ADAPTER pAd);
3718 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3719 IN PRTMP_ADAPTER pAd,
3720 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3722 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3723 IN PRTMP_ADAPTER pAd);
3725 VOID RTMPHandleTBTTInterrupt(
3726 IN PRTMP_ADAPTER pAd);
3728 VOID RTMPHandlePreTBTTInterrupt(
3729 IN PRTMP_ADAPTER pAd);
3731 void RTMPHandleTwakeupInterrupt(
3732 IN PRTMP_ADAPTER pAd);
3734 VOID RTMPHandleRxCoherentInterrupt(
3735 IN PRTMP_ADAPTER pAd);
3737 BOOLEAN TxFrameIsAggregatible(
3738 IN PRTMP_ADAPTER pAd,
3739 IN PUCHAR pPrevAddr1,
3740 IN PUCHAR p8023hdr);
3742 BOOLEAN PeerIsAggreOn(
3743 IN PRTMP_ADAPTER pAd,
3745 IN PMAC_TABLE_ENTRY pMacEntry);
3747 #if 0 // It's not be used
3748 HTTRANSMIT_SETTING *GetTxMode(
3749 IN PRTMP_ADAPTER pAd,
3753 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3754 IN PNDIS_BUFFER pFirstBuffer,
3755 IN UCHAR DesiredOffset,
3759 NDIS_STATUS STASendPacket(
3760 IN PRTMP_ADAPTER pAd,
3761 IN PNDIS_PACKET pPacket);
3763 VOID STASendPackets(
3764 IN NDIS_HANDLE MiniportAdapterContext,
3765 IN PPNDIS_PACKET ppPacketArray,
3766 IN UINT NumberOfPackets);
3768 VOID RTMPDeQueuePacket(
3769 IN PRTMP_ADAPTER pAd,
3770 IN BOOLEAN bIntContext,
3772 IN UCHAR Max_Tx_Packets);
3774 NDIS_STATUS RTMPHardTransmit(
3775 IN PRTMP_ADAPTER pAd,
3776 IN PNDIS_PACKET pPacket,
3778 OUT PULONG pFreeTXDLeft);
3780 NDIS_STATUS STAHardTransmit(
3781 IN PRTMP_ADAPTER pAd,
3785 VOID STARxEAPOLFrameIndicate(
3786 IN PRTMP_ADAPTER pAd,
3787 IN MAC_TABLE_ENTRY *pEntry,
3789 IN UCHAR FromWhichBSSID);
3791 NDIS_STATUS RTMPFreeTXDRequest(
3792 IN PRTMP_ADAPTER pAd,
3794 IN UCHAR NumberRequired,
3795 IN PUCHAR FreeNumberIs);
3797 NDIS_STATUS MlmeHardTransmit(
3798 IN PRTMP_ADAPTER pAd,
3800 IN PNDIS_PACKET pPacket);
3802 NDIS_STATUS MlmeHardTransmitMgmtRing(
3803 IN PRTMP_ADAPTER pAd,
3805 IN PNDIS_PACKET pPacket);
3807 NDIS_STATUS MlmeHardTransmitTxRing(
3808 IN PRTMP_ADAPTER pAd,
3810 IN PNDIS_PACKET pPacket);
3812 USHORT RTMPCalcDuration(
3813 IN PRTMP_ADAPTER pAd,
3818 IN PRTMP_ADAPTER pAd,
3819 IN PTXWI_STRUC pTxWI,
3822 IN BOOLEAN InsTimestamp,
3825 IN BOOLEAN NSeq, // HW new a sequence.
3834 IN HTTRANSMIT_SETTING *pTransmit);
3837 VOID RTMPWriteTxWI_Data(
3838 IN PRTMP_ADAPTER pAd,
3839 IN OUT PTXWI_STRUC pTxWI,
3843 VOID RTMPWriteTxWI_Cache(
3844 IN PRTMP_ADAPTER pAd,
3845 IN OUT PTXWI_STRUC pTxWI,
3848 VOID RTMPWriteTxDescriptor(
3849 IN PRTMP_ADAPTER pAd,
3854 VOID RTMPSuspendMsduTransmission(
3855 IN PRTMP_ADAPTER pAd);
3857 VOID RTMPResumeMsduTransmission(
3858 IN PRTMP_ADAPTER pAd);
3860 NDIS_STATUS MiniportMMRequest(
3861 IN PRTMP_ADAPTER pAd,
3866 NDIS_STATUS MiniportDataMMRequest(
3867 IN PRTMP_ADAPTER pAd,
3872 VOID RTMPSendNullFrame(
3873 IN PRTMP_ADAPTER pAd,
3875 IN BOOLEAN bQosNull);
3877 VOID RTMPSendDisassociationFrame(
3878 IN PRTMP_ADAPTER pAd);
3880 VOID RTMPSendRTSFrame(
3881 IN PRTMP_ADAPTER pAd,
3883 IN unsigned int NextMpduSize,
3886 IN USHORT AckDuration,
3891 NDIS_STATUS RTMPApplyPacketFilter(
3892 IN PRTMP_ADAPTER pAd,
3893 IN PRT28XX_RXD_STRUC pRxD,
3894 IN PHEADER_802_11 pHeader);
3896 PQUEUE_HEADER RTMPCheckTxSwQueue(
3897 IN PRTMP_ADAPTER pAd,
3900 #ifdef CONFIG_STA_SUPPORT
3901 VOID RTMPReportMicError(
3902 IN PRTMP_ADAPTER pAd,
3903 IN PCIPHER_KEY pWpaKey);
3905 VOID WpaMicFailureReportFrame(
3906 IN PRTMP_ADAPTER pAd,
3907 IN MLME_QUEUE_ELEM *Elem);
3909 VOID WpaDisassocApAndBlockAssoc(
3910 IN PVOID SystemSpecific1,
3911 IN PVOID FunctionContext,
3912 IN PVOID SystemSpecific2,
3913 IN PVOID SystemSpecific3);
3914 #endif // CONFIG_STA_SUPPORT //
3916 NDIS_STATUS RTMPCloneNdisPacket(
3917 IN PRTMP_ADAPTER pAd,
3918 IN BOOLEAN pInsAMSDUHdr,
3919 IN PNDIS_PACKET pInPacket,
3920 OUT PNDIS_PACKET *ppOutPacket);
3922 NDIS_STATUS RTMPAllocateNdisPacket(
3923 IN PRTMP_ADAPTER pAd,
3924 IN PNDIS_PACKET *pPacket,
3930 VOID RTMPFreeNdisPacket(
3931 IN PRTMP_ADAPTER pAd,
3932 IN PNDIS_PACKET pPacket);
3934 BOOLEAN RTMPFreeTXDUponTxDmaDone(
3935 IN PRTMP_ADAPTER pAd,
3938 BOOLEAN RTMPCheckDHCPFrame(
3939 IN PRTMP_ADAPTER pAd,
3940 IN PNDIS_PACKET pPacket);
3943 BOOLEAN RTMPCheckEtherType(
3944 IN PRTMP_ADAPTER pAd,
3945 IN PNDIS_PACKET pPacket);
3948 VOID RTMPCckBbpTuning(
3949 IN PRTMP_ADAPTER pAd,
3953 // Private routines in rtmp_wep.c
3955 VOID RTMPInitWepEngine(
3956 IN PRTMP_ADAPTER pAd,
3962 VOID RTMPEncryptData(
3963 IN PRTMP_ADAPTER pAd,
3968 BOOLEAN RTMPDecryptData(
3969 IN PRTMP_ADAPTER pAdapter,
3974 BOOLEAN RTMPSoftDecryptWEP(
3975 IN PRTMP_ADAPTER pAd,
3977 IN ULONG DataByteCnt,
3978 IN PCIPHER_KEY pGroupKey);
3981 IN PRTMP_ADAPTER pAd,
3985 IN PARCFOURCONTEXT Ctx,
3990 IN PARCFOURCONTEXT Ctx);
3992 VOID ARCFOUR_DECRYPT(
3993 IN PARCFOURCONTEXT Ctx,
3998 VOID ARCFOUR_ENCRYPT(
3999 IN PARCFOURCONTEXT Ctx,
4004 VOID WPAARCFOUR_ENCRYPT(
4005 IN PARCFOURCONTEXT Ctx,
4010 UINT RTMP_CALC_FCS32(
4019 // Asic/RF/BBP related functions
4021 VOID AsicAdjustTxPower(
4022 IN PRTMP_ADAPTER pAd);
4024 VOID AsicUpdateProtect(
4025 IN PRTMP_ADAPTER pAd,
4026 IN USHORT OperaionMode,
4028 IN BOOLEAN bDisableBGProtect,
4029 IN BOOLEAN bNonGFExist);
4031 VOID AsicSwitchChannel(
4032 IN PRTMP_ADAPTER pAd,
4036 VOID AsicLockChannel(
4037 IN PRTMP_ADAPTER pAd,
4040 VOID AsicAntennaSelect(
4041 IN PRTMP_ADAPTER pAd,
4044 VOID AsicAntennaSetting(
4045 IN PRTMP_ADAPTER pAd,
4046 IN ABGBAND_STATE BandState);
4048 VOID AsicRfTuningExec(
4049 IN PVOID SystemSpecific1,
4050 IN PVOID FunctionContext,
4051 IN PVOID SystemSpecific2,
4052 IN PVOID SystemSpecific3);
4054 #ifdef CONFIG_STA_SUPPORT
4055 VOID AsicSleepThenAutoWakeup(
4056 IN PRTMP_ADAPTER pAd,
4057 IN USHORT TbttNumToNextWakeUp);
4059 VOID AsicForceSleep(
4060 IN PRTMP_ADAPTER pAd);
4062 VOID AsicForceWakeup(
4063 IN PRTMP_ADAPTER pAd,
4064 IN BOOLEAN bFromTx);
4065 #endif // CONFIG_STA_SUPPORT //
4068 IN PRTMP_ADAPTER pAd,
4071 VOID AsicSetMcastWC(
4072 IN PRTMP_ADAPTER pAd);
4074 #if 0 // removed by AlbertY
4075 VOID AsicSetBssidWC(
4076 IN PRTMP_ADAPTER pAd,
4080 VOID AsicDelWcidTab(
4081 IN PRTMP_ADAPTER pAd,
4085 IN PRTMP_ADAPTER pAd);
4087 VOID AsicDisableRDG(
4088 IN PRTMP_ADAPTER pAd);
4090 VOID AsicDisableSync(
4091 IN PRTMP_ADAPTER pAd);
4093 VOID AsicEnableBssSync(
4094 IN PRTMP_ADAPTER pAd);
4096 VOID AsicEnableIbssSync(
4097 IN PRTMP_ADAPTER pAd);
4099 VOID AsicSetEdcaParm(
4100 IN PRTMP_ADAPTER pAd,
4101 IN PEDCA_PARM pEdcaParm);
4103 VOID AsicSetSlotTime(
4104 IN PRTMP_ADAPTER pAd,
4105 IN BOOLEAN bUseShortSlotTime);
4108 VOID AsicAddWcidCipherEntry(
4109 IN PRTMP_ADAPTER pAd,
4115 IN CIPHER_KEY *pCipherKey);
4118 VOID AsicAddSharedKeyEntry(
4119 IN PRTMP_ADAPTER pAd,
4127 VOID AsicRemoveSharedKeyEntry(
4128 IN PRTMP_ADAPTER pAd,
4132 VOID AsicUpdateWCIDAttribute(
4133 IN PRTMP_ADAPTER pAd,
4137 IN BOOLEAN bUsePairewiseKeyTable);
4139 VOID AsicUpdateWCIDIVEIV(
4140 IN PRTMP_ADAPTER pAd,
4145 VOID AsicUpdateRxWCIDTable(
4146 IN PRTMP_ADAPTER pAd,
4150 VOID AsicAddKeyEntry(
4151 IN PRTMP_ADAPTER pAd,
4155 IN PCIPHER_KEY pCipherKey,
4156 IN BOOLEAN bUsePairewiseKeyTable,
4159 VOID AsicAddPairwiseKeyEntry(
4160 IN PRTMP_ADAPTER pAd,
4163 IN CIPHER_KEY *pCipherKey);
4165 VOID AsicRemovePairwiseKeyEntry(
4166 IN PRTMP_ADAPTER pAd,
4170 BOOLEAN AsicSendCommandToMcu(
4171 IN PRTMP_ADAPTER pAd,
4178 VOID MacAddrRandomBssid(
4179 IN PRTMP_ADAPTER pAd,
4182 VOID MgtMacHeaderInit(
4183 IN PRTMP_ADAPTER pAd,
4184 IN OUT PHEADER_802_11 pHdr80211,
4191 IN PRTMP_ADAPTER pAd);
4194 IN PRTMP_ADAPTER pAd);
4200 #ifdef DOT11_N_SUPPORT
4202 IN PRTMP_ADAPTER pAd,
4204 #endif // DOT11_N_SUPPORT //
4206 ULONG BssTableSearch(
4211 ULONG BssSsidTableSearch(
4218 ULONG BssTableSearchWithSSID(
4225 VOID BssTableDeleteEntry(
4226 IN OUT PBSS_TABLE pTab,
4230 #ifdef DOT11_N_SUPPORT
4231 VOID BATableDeleteORIEntry(
4232 IN OUT PRTMP_ADAPTER pAd,
4233 IN BA_ORI_ENTRY *pBAORIEntry);
4235 VOID BATableDeleteRECEntry(
4236 IN OUT PRTMP_ADAPTER pAd,
4237 IN BA_REC_ENTRY *pBARECEntry);
4239 VOID BATableTearORIEntry(
4240 IN OUT PRTMP_ADAPTER pAd,
4243 IN BOOLEAN bForceDelete,
4246 VOID BATableTearRECEntry(
4247 IN OUT PRTMP_ADAPTER pAd,
4251 #endif // DOT11_N_SUPPORT //
4254 IN PRTMP_ADAPTER pAd,
4255 OUT PBSS_ENTRY pBss,
4260 IN USHORT BeaconPeriod,
4263 IN USHORT CapabilityInfo,
4265 IN UCHAR SupRateLen,
4267 IN UCHAR ExtRateLen,
4268 IN HT_CAPABILITY_IE *pHtCapability,
4269 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4270 IN UCHAR HtCapabilityLen,
4271 IN UCHAR AddHtInfoLen,
4272 IN UCHAR NewExtChanOffset,
4275 IN LARGE_INTEGER TimeStamp,
4277 IN PEDCA_PARM pEdcaParm,
4278 IN PQOS_CAPABILITY_PARM pQosCapability,
4279 IN PQBSS_LOAD_PARM pQbssLoad,
4280 IN USHORT LengthVIE,
4281 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4283 ULONG BssTableSetEntry(
4284 IN PRTMP_ADAPTER pAd,
4285 OUT PBSS_TABLE pTab,
4290 IN USHORT BeaconPeriod,
4293 IN USHORT CapabilityInfo,
4295 IN UCHAR SupRateLen,
4297 IN UCHAR ExtRateLen,
4298 IN HT_CAPABILITY_IE *pHtCapability,
4299 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4300 IN UCHAR HtCapabilityLen,
4301 IN UCHAR AddHtInfoLen,
4302 IN UCHAR NewExtChanOffset,
4305 IN LARGE_INTEGER TimeStamp,
4307 IN PEDCA_PARM pEdcaParm,
4308 IN PQOS_CAPABILITY_PARM pQosCapability,
4309 IN PQBSS_LOAD_PARM pQbssLoad,
4310 IN USHORT LengthVIE,
4311 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4313 #ifdef DOT11_N_SUPPORT
4314 VOID BATableInsertEntry(
4315 IN PRTMP_ADAPTER pAd,
4317 IN USHORT TimeOutValue,
4318 IN USHORT StartingSeq,
4321 IN UCHAR OriginatorStatus,
4322 IN BOOLEAN IsRecipient);
4324 #ifdef DOT11N_DRAFT3
4325 VOID Bss2040CoexistTimeOut(
4326 IN PVOID SystemSpecific1,
4327 IN PVOID FunctionContext,
4328 IN PVOID SystemSpecific2,
4329 IN PVOID SystemSpecific3);
4333 IN PRTMP_ADAPTER pAd);
4335 ULONG TriEventTableSetEntry(
4336 IN PRTMP_ADAPTER pAd,
4337 OUT TRIGGER_EVENT_TAB *Tab,
4339 IN HT_CAPABILITY_IE *pHtCapability,
4340 IN UCHAR HtCapabilityLen,
4342 IN UCHAR ChannelNo);
4344 VOID TriEventCounterMaintenance(
4345 IN PRTMP_ADAPTER pAd);
4346 #endif // DOT11N_DRAFT3 //
4347 #endif // DOT11_N_SUPPORT //
4349 VOID BssTableSsidSort(
4350 IN PRTMP_ADAPTER pAd,
4351 OUT BSS_TABLE *OutTab,
4355 VOID BssTableSortByRssi(
4356 IN OUT BSS_TABLE *OutTab);
4358 VOID BssCipherParse(
4359 IN OUT PBSS_ENTRY pBss);
4361 NDIS_STATUS MlmeQueueInit(
4362 IN MLME_QUEUE *Queue);
4364 VOID MlmeQueueDestroy(
4365 IN MLME_QUEUE *Queue);
4367 BOOLEAN MlmeEnqueue(
4368 IN PRTMP_ADAPTER pAd,
4374 BOOLEAN MlmeEnqueueForRecv(
4375 IN PRTMP_ADAPTER pAd,
4377 IN ULONG TimeStampHigh,
4378 IN ULONG TimeStampLow,
4387 BOOLEAN MlmeDequeue(
4388 IN MLME_QUEUE *Queue,
4389 OUT MLME_QUEUE_ELEM **Elem);
4391 VOID MlmeRestartStateMachine(
4392 IN PRTMP_ADAPTER pAd);
4394 BOOLEAN MlmeQueueEmpty(
4395 IN MLME_QUEUE *Queue);
4397 BOOLEAN MlmeQueueFull(
4398 IN MLME_QUEUE *Queue);
4400 BOOLEAN MsgTypeSubst(
4401 IN PRTMP_ADAPTER pAd,
4402 IN PFRAME_802_11 pFrame,
4406 VOID StateMachineInit(
4407 IN STATE_MACHINE *Sm,
4408 IN STATE_MACHINE_FUNC Trans[],
4411 IN STATE_MACHINE_FUNC DefFunc,
4415 VOID StateMachineSetAction(
4416 IN STATE_MACHINE *S,
4419 IN STATE_MACHINE_FUNC F);
4421 VOID StateMachinePerformAction(
4422 IN PRTMP_ADAPTER pAd,
4423 IN STATE_MACHINE *S,
4424 IN MLME_QUEUE_ELEM *Elem);
4427 IN PRTMP_ADAPTER pAd,
4428 IN MLME_QUEUE_ELEM *Elem);
4430 VOID AssocStateMachineInit(
4431 IN PRTMP_ADAPTER pAd,
4432 IN STATE_MACHINE *Sm,
4433 OUT STATE_MACHINE_FUNC Trans[]);
4435 VOID ReassocTimeout(
4436 IN PVOID SystemSpecific1,
4437 IN PVOID FunctionContext,
4438 IN PVOID SystemSpecific2,
4439 IN PVOID SystemSpecific3);
4442 IN PVOID SystemSpecific1,
4443 IN PVOID FunctionContext,
4444 IN PVOID SystemSpecific2,
4445 IN PVOID SystemSpecific3);
4447 VOID DisassocTimeout(
4448 IN PVOID SystemSpecific1,
4449 IN PVOID FunctionContext,
4450 IN PVOID SystemSpecific2,
4451 IN PVOID SystemSpecific3);
4453 //----------------------------------------------
4454 VOID MlmeDisassocReqAction(
4455 IN PRTMP_ADAPTER pAd,
4456 IN MLME_QUEUE_ELEM *Elem);
4458 VOID MlmeAssocReqAction(
4459 IN PRTMP_ADAPTER pAd,
4460 IN MLME_QUEUE_ELEM *Elem);
4462 VOID MlmeReassocReqAction(
4463 IN PRTMP_ADAPTER pAd,
4464 IN MLME_QUEUE_ELEM *Elem);
4466 VOID MlmeDisassocReqAction(
4467 IN PRTMP_ADAPTER pAd,
4468 IN MLME_QUEUE_ELEM *Elem);
4470 VOID PeerAssocRspAction(
4471 IN PRTMP_ADAPTER pAd,
4472 IN MLME_QUEUE_ELEM *Elem);
4474 VOID PeerReassocRspAction(
4475 IN PRTMP_ADAPTER pAd,
4476 IN MLME_QUEUE_ELEM *Elem);
4478 VOID PeerDisassocAction(
4479 IN PRTMP_ADAPTER pAd,
4480 IN MLME_QUEUE_ELEM *Elem);
4482 VOID DisassocTimeoutAction(
4483 IN PRTMP_ADAPTER pAd,
4484 IN MLME_QUEUE_ELEM *Elem);
4486 VOID AssocTimeoutAction(
4487 IN PRTMP_ADAPTER pAd,
4488 IN MLME_QUEUE_ELEM *Elem);
4490 VOID ReassocTimeoutAction(
4491 IN PRTMP_ADAPTER pAd,
4492 IN MLME_QUEUE_ELEM *Elem);
4495 IN PRTMP_ADAPTER pAd,
4498 VOID SwitchBetweenWepAndCkip(
4499 IN PRTMP_ADAPTER pAd);
4501 VOID InvalidStateWhenAssoc(
4502 IN PRTMP_ADAPTER pAd,
4503 IN MLME_QUEUE_ELEM *Elem);
4505 VOID InvalidStateWhenReassoc(
4506 IN PRTMP_ADAPTER pAd,
4507 IN MLME_QUEUE_ELEM *Elem);
4509 VOID InvalidStateWhenDisassociate(
4510 IN PRTMP_ADAPTER pAd,
4511 IN MLME_QUEUE_ELEM *Elem);
4514 VOID MlmeCntlConfirm(
4515 IN PRTMP_ADAPTER pAd,
4521 IN PRTMP_ADAPTER pAd);
4523 VOID ComposeNullFrame(
4524 IN PRTMP_ADAPTER pAd);
4527 IN PRTMP_ADAPTER pAd,
4529 IN USHORT CapabilityInfo,
4532 IN UCHAR SupRateLen,
4534 IN UCHAR ExtRateLen,
4535 IN PEDCA_PARM pEdcaParm,
4536 IN HT_CAPABILITY_IE *pHtCapability,
4537 IN UCHAR HtCapabilityLen,
4538 IN ADD_HT_INFO_IE *pAddHtInfo);
4540 VOID AuthStateMachineInit(
4541 IN PRTMP_ADAPTER pAd,
4542 IN PSTATE_MACHINE sm,
4543 OUT STATE_MACHINE_FUNC Trans[]);
4546 IN PVOID SystemSpecific1,
4547 IN PVOID FunctionContext,
4548 IN PVOID SystemSpecific2,
4549 IN PVOID SystemSpecific3);
4551 VOID MlmeAuthReqAction(
4552 IN PRTMP_ADAPTER pAd,
4553 IN MLME_QUEUE_ELEM *Elem);
4555 VOID PeerAuthRspAtSeq2Action(
4556 IN PRTMP_ADAPTER pAd,
4557 IN MLME_QUEUE_ELEM *Elem);
4559 VOID PeerAuthRspAtSeq4Action(
4560 IN PRTMP_ADAPTER pAd,
4561 IN MLME_QUEUE_ELEM *Elem);
4563 VOID AuthTimeoutAction(
4564 IN PRTMP_ADAPTER pAd,
4565 IN MLME_QUEUE_ELEM *Elem);
4568 IN PRTMP_ADAPTER pAd,
4571 VOID MlmeDeauthReqAction(
4572 IN PRTMP_ADAPTER pAd,
4573 IN MLME_QUEUE_ELEM *Elem);
4575 VOID InvalidStateWhenAuth(
4576 IN PRTMP_ADAPTER pAd,
4577 IN MLME_QUEUE_ELEM *Elem);
4579 //=============================================
4581 VOID AuthRspStateMachineInit(
4582 IN PRTMP_ADAPTER pAd,
4583 IN PSTATE_MACHINE Sm,
4584 IN STATE_MACHINE_FUNC Trans[]);
4586 VOID PeerDeauthAction(
4587 IN PRTMP_ADAPTER pAd,
4588 IN MLME_QUEUE_ELEM *Elem);
4590 VOID PeerAuthSimpleRspGenAndSend(
4591 IN PRTMP_ADAPTER pAd,
4592 IN PHEADER_802_11 pHdr80211,
4599 // Private routines in dls.c
4602 //========================================
4604 VOID SyncStateMachineInit(
4605 IN PRTMP_ADAPTER pAd,
4606 IN STATE_MACHINE *Sm,
4607 OUT STATE_MACHINE_FUNC Trans[]);
4610 IN PVOID SystemSpecific1,
4611 IN PVOID FunctionContext,
4612 IN PVOID SystemSpecific2,
4613 IN PVOID SystemSpecific3);
4616 IN PVOID SystemSpecific1,
4617 IN PVOID FunctionContext,
4618 IN PVOID SystemSpecific2,
4619 IN PVOID SystemSpecific3);
4621 VOID MlmeScanReqAction(
4622 IN PRTMP_ADAPTER pAd,
4623 IN MLME_QUEUE_ELEM *Elem);
4625 VOID InvalidStateWhenScan(
4626 IN PRTMP_ADAPTER pAd,
4627 IN MLME_QUEUE_ELEM *Elem);
4629 VOID InvalidStateWhenJoin(
4630 IN PRTMP_ADAPTER pAd,
4631 IN MLME_QUEUE_ELEM *Elem);
4633 VOID InvalidStateWhenStart(
4634 IN PRTMP_ADAPTER pAd,
4635 IN MLME_QUEUE_ELEM *Elem);
4638 IN PRTMP_ADAPTER pAd,
4639 IN MLME_QUEUE_ELEM *Elem);
4641 VOID EnqueueProbeRequest(
4642 IN PRTMP_ADAPTER pAd);
4644 BOOLEAN ScanRunning(
4645 IN PRTMP_ADAPTER pAd);
4646 //=========================================
4649 IN PRTMP_ADAPTER pAd,
4650 IN STATE_MACHINE *S,
4651 OUT STATE_MACHINE_FUNC Trans[]);
4653 VOID MlmeCntlMachinePerformAction(
4654 IN PRTMP_ADAPTER pAd,
4655 IN STATE_MACHINE *S,
4656 IN MLME_QUEUE_ELEM *Elem);
4659 IN PRTMP_ADAPTER pAd,
4660 IN MLME_QUEUE_ELEM *Elem);
4662 VOID CntlOidScanProc(
4663 IN PRTMP_ADAPTER pAd,
4664 IN MLME_QUEUE_ELEM *Elem);
4666 VOID CntlOidSsidProc(
4667 IN PRTMP_ADAPTER pAd,
4668 IN MLME_QUEUE_ELEM * Elem);
4670 VOID CntlOidRTBssidProc(
4671 IN PRTMP_ADAPTER pAd,
4672 IN MLME_QUEUE_ELEM * Elem);
4674 VOID CntlMlmeRoamingProc(
4675 IN PRTMP_ADAPTER pAd,
4676 IN MLME_QUEUE_ELEM * Elem);
4678 VOID CntlWaitDisassocProc(
4679 IN PRTMP_ADAPTER pAd,
4680 IN MLME_QUEUE_ELEM *Elem);
4682 VOID CntlWaitJoinProc(
4683 IN PRTMP_ADAPTER pAd,
4684 IN MLME_QUEUE_ELEM *Elem);
4686 VOID CntlWaitReassocProc(
4687 IN PRTMP_ADAPTER pAd,
4688 IN MLME_QUEUE_ELEM *Elem);
4690 VOID CntlWaitStartProc(
4691 IN PRTMP_ADAPTER pAd,
4692 IN MLME_QUEUE_ELEM *Elem);
4694 VOID CntlWaitAuthProc(
4695 IN PRTMP_ADAPTER pAd,
4696 IN MLME_QUEUE_ELEM *Elem);
4698 VOID CntlWaitAuthProc2(
4699 IN PRTMP_ADAPTER pAd,
4700 IN MLME_QUEUE_ELEM *Elem);
4702 VOID CntlWaitAssocProc(
4703 IN PRTMP_ADAPTER pAd,
4704 IN MLME_QUEUE_ELEM *Elem);
4707 IN PRTMP_ADAPTER pAd,
4711 IN PRTMP_ADAPTER pAd,
4712 IN BOOLEAN IsReqFromAP);
4714 VOID IterateOnBssTab(
4715 IN PRTMP_ADAPTER pAd);
4717 VOID IterateOnBssTab2(
4718 IN PRTMP_ADAPTER pAd);;
4721 IN PRTMP_ADAPTER pAd,
4722 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4726 IN PRTMP_ADAPTER pAd,
4727 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4729 IN USHORT CapabilityInfo,
4731 IN USHORT ListenIntv);
4734 IN PRTMP_ADAPTER pAd,
4735 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4741 VOID DisassocParmFill(
4742 IN PRTMP_ADAPTER pAd,
4743 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4748 IN PRTMP_ADAPTER pAd,
4749 IN OUT MLME_START_REQ_STRUCT *StartReq,
4754 IN PRTMP_ADAPTER pAd,
4755 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4760 IN PRTMP_ADAPTER pAd);
4762 VOID EnqueueBeaconFrame(
4763 IN PRTMP_ADAPTER pAd);
4765 VOID MlmeJoinReqAction(
4766 IN PRTMP_ADAPTER pAd,
4767 IN MLME_QUEUE_ELEM *Elem);
4769 VOID MlmeScanReqAction(
4770 IN PRTMP_ADAPTER pAd,
4771 IN MLME_QUEUE_ELEM *Elem);
4773 VOID MlmeStartReqAction(
4774 IN PRTMP_ADAPTER pAd,
4775 IN MLME_QUEUE_ELEM *Elem);
4777 VOID ScanTimeoutAction(
4778 IN PRTMP_ADAPTER pAd,
4779 IN MLME_QUEUE_ELEM *Elem);
4781 VOID BeaconTimeoutAtJoinAction(
4782 IN PRTMP_ADAPTER pAd,
4783 IN MLME_QUEUE_ELEM *Elem);
4785 VOID PeerBeaconAtScanAction(
4786 IN PRTMP_ADAPTER pAd,
4787 IN MLME_QUEUE_ELEM *Elem);
4789 VOID PeerBeaconAtJoinAction(
4790 IN PRTMP_ADAPTER pAd,
4791 IN MLME_QUEUE_ELEM *Elem);
4794 IN PRTMP_ADAPTER pAd,
4795 IN MLME_QUEUE_ELEM *Elem);
4797 VOID PeerProbeReqAction(
4798 IN PRTMP_ADAPTER pAd,
4799 IN MLME_QUEUE_ELEM *Elem);
4801 VOID ScanNextChannel(
4802 IN PRTMP_ADAPTER pAd);
4804 ULONG MakeIbssBeacon(
4805 IN PRTMP_ADAPTER pAd);
4807 VOID CCXAdjacentAPReport(
4808 IN PRTMP_ADAPTER pAd);
4810 BOOLEAN MlmeScanReqSanity(
4811 IN PRTMP_ADAPTER pAd,
4817 OUT UCHAR *ScanType);
4819 BOOLEAN PeerBeaconAndProbeRspSanity(
4820 IN PRTMP_ADAPTER pAd,
4823 IN UCHAR MsgChannel,
4827 OUT UCHAR *pSsidLen,
4828 OUT UCHAR *pBssType,
4829 OUT USHORT *pBeaconPeriod,
4830 OUT UCHAR *pChannel,
4831 OUT UCHAR *pNewChannel,
4832 OUT LARGE_INTEGER *pTimestamp,
4833 OUT CF_PARM *pCfParm,
4834 OUT USHORT *pAtimWin,
4835 OUT USHORT *pCapabilityInfo,
4837 OUT UCHAR *pDtimCount,
4838 OUT UCHAR *pDtimPeriod,
4839 OUT UCHAR *pBcastFlag,
4840 OUT UCHAR *pMessageToMe,
4841 OUT UCHAR SupRate[],
4842 OUT UCHAR *pSupRateLen,
4843 OUT UCHAR ExtRate[],
4844 OUT UCHAR *pExtRateLen,
4845 OUT UCHAR *pCkipFlag,
4846 OUT UCHAR *pAironetCellPowerLimit,
4847 OUT PEDCA_PARM pEdcaParm,
4848 OUT PQBSS_LOAD_PARM pQbssLoad,
4849 OUT PQOS_CAPABILITY_PARM pQosCapability,
4850 OUT ULONG *pRalinkIe,
4851 OUT UCHAR *pHtCapabilityLen,
4852 #ifdef CONFIG_STA_SUPPORT
4853 OUT UCHAR *pPreNHtCapabilityLen,
4854 #endif // CONFIG_STA_SUPPORT //
4855 OUT HT_CAPABILITY_IE *pHtCapability,
4856 OUT UCHAR *AddHtInfoLen,
4857 OUT ADD_HT_INFO_IE *AddHtInfo,
4858 OUT UCHAR *NewExtChannel,
4859 OUT USHORT *LengthVIE,
4860 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4862 BOOLEAN PeerAddBAReqActionSanity(
4863 IN PRTMP_ADAPTER pAd,
4868 BOOLEAN PeerAddBARspActionSanity(
4869 IN PRTMP_ADAPTER pAd,
4873 BOOLEAN PeerDelBAActionSanity(
4874 IN PRTMP_ADAPTER pAd,
4879 BOOLEAN MlmeAssocReqSanity(
4880 IN PRTMP_ADAPTER pAd,
4884 OUT USHORT *CapabilityInfo,
4886 OUT USHORT *ListenIntv);
4888 BOOLEAN MlmeAuthReqSanity(
4889 IN PRTMP_ADAPTER pAd,
4896 BOOLEAN MlmeStartReqSanity(
4897 IN PRTMP_ADAPTER pAd,
4901 OUT UCHAR *Ssidlen);
4903 BOOLEAN PeerAuthSanity(
4904 IN PRTMP_ADAPTER pAd,
4911 OUT CHAR ChlgText[]);
4913 BOOLEAN PeerAssocRspSanity(
4914 IN PRTMP_ADAPTER pAd,
4918 OUT USHORT *pCapabilityInfo,
4919 OUT USHORT *pStatus,
4921 OUT UCHAR SupRate[],
4922 OUT UCHAR *pSupRateLen,
4923 OUT UCHAR ExtRate[],
4924 OUT UCHAR *pExtRateLen,
4925 OUT HT_CAPABILITY_IE *pHtCapability,
4926 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4927 OUT UCHAR *pHtCapabilityLen,
4928 OUT UCHAR *pAddHtInfoLen,
4929 OUT UCHAR *pNewExtChannelOffset,
4930 OUT PEDCA_PARM pEdcaParm,
4931 OUT UCHAR *pCkipFlag);
4933 BOOLEAN PeerDisassocSanity(
4934 IN PRTMP_ADAPTER pAd,
4938 OUT USHORT *Reason);
4940 BOOLEAN PeerWpaMessageSanity(
4941 IN PRTMP_ADAPTER pAd,
4942 IN PEAPOL_PACKET pMsg,
4945 IN MAC_TABLE_ENTRY *pEntry);
4947 BOOLEAN PeerDeauthSanity(
4948 IN PRTMP_ADAPTER pAd,
4952 OUT USHORT *Reason);
4954 BOOLEAN PeerProbeReqSanity(
4955 IN PRTMP_ADAPTER pAd,
4960 OUT UCHAR *pSsidLen);
4966 OUT UCHAR *BcastFlag,
4967 OUT UCHAR *DtimCount,
4968 OUT UCHAR *DtimPeriod,
4969 OUT UCHAR *MessageToMe);
4971 UCHAR ChannelSanity(
4972 IN PRTMP_ADAPTER pAd,
4975 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4976 IN PBSS_ENTRY pBss);
4978 #if 0 // It's omitted
4979 NDIS_STATUS RTMPWepKeySanity(
4980 IN PRTMP_ADAPTER pAdapter,
4984 BOOLEAN MlmeDelBAReqSanity(
4985 IN PRTMP_ADAPTER pAd,
4989 BOOLEAN MlmeAddBAReqSanity(
4990 IN PRTMP_ADAPTER pAd,
4995 ULONG MakeOutgoingFrame(
4997 OUT ULONG *Length, ...);
5000 IN PRTMP_ADAPTER pAd,
5004 IN PRTMP_ADAPTER pAd);
5006 VOID AsicUpdateAutoFallBackTable(
5007 IN PRTMP_ADAPTER pAd,
5010 VOID MlmePeriodicExec(
5011 IN PVOID SystemSpecific1,
5012 IN PVOID FunctionContext,
5013 IN PVOID SystemSpecific2,
5014 IN PVOID SystemSpecific3);
5017 IN PVOID SystemSpecific1,
5018 IN PVOID FunctionContext,
5019 IN PVOID SystemSpecific2,
5020 IN PVOID SystemSpecific3);
5023 IN PVOID SystemSpecific1,
5024 IN PVOID FunctionContext,
5025 IN PVOID SystemSpecific2,
5026 IN PVOID SystemSpecific3);
5028 VOID STAMlmePeriodicExec(
5032 IN PRTMP_ADAPTER pAd);
5034 VOID MlmeAutoReconnectLastSSID(
5035 IN PRTMP_ADAPTER pAd);
5037 BOOLEAN MlmeValidateSSID(
5041 VOID MlmeCheckForRoaming(
5042 IN PRTMP_ADAPTER pAd,
5045 VOID MlmeCheckForFastRoaming(
5046 IN PRTMP_ADAPTER pAd,
5049 VOID MlmeDynamicTxRateSwitching(
5050 IN PRTMP_ADAPTER pAd);
5053 IN PRTMP_ADAPTER pAd,
5054 IN PMAC_TABLE_ENTRY pEntry,
5055 IN PRTMP_TX_RATE_SWITCH pTxRate);
5057 VOID MlmeSelectTxRateTable(
5058 IN PRTMP_ADAPTER pAd,
5059 IN PMAC_TABLE_ENTRY pEntry,
5061 IN PUCHAR pTableSize,
5062 IN PUCHAR pInitTxRateIdx);
5064 VOID MlmeCalculateChannelQuality(
5065 IN PRTMP_ADAPTER pAd,
5068 VOID MlmeCheckPsmChange(
5069 IN PRTMP_ADAPTER pAd,
5073 IN PRTMP_ADAPTER pAd,
5076 VOID MlmeSetTxPreamble(
5077 IN PRTMP_ADAPTER pAd,
5078 IN USHORT TxPreamble);
5080 VOID UpdateBasicRateBitmap(
5081 IN PRTMP_ADAPTER pAd);
5083 VOID MlmeUpdateTxRates(
5084 IN PRTMP_ADAPTER pAd,
5088 #ifdef DOT11_N_SUPPORT
5089 VOID MlmeUpdateHtTxRates(
5090 IN PRTMP_ADAPTER pAd,
5092 #endif // DOT11_N_SUPPORT //
5094 VOID RTMPCheckRates(
5095 IN PRTMP_ADAPTER pAd,
5096 IN OUT UCHAR SupRate[],
5097 IN OUT UCHAR *SupRateLen);
5099 #ifdef CONFIG_STA_SUPPORT
5100 BOOLEAN RTMPCheckChannel(
5101 IN PRTMP_ADAPTER pAd,
5102 IN UCHAR CentralChannel,
5104 #endif // CONFIG_STA_SUPPORT //
5106 BOOLEAN RTMPCheckHt(
5107 IN PRTMP_ADAPTER pAd,
5109 IN OUT HT_CAPABILITY_IE *pHtCapability,
5110 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5112 VOID StaQuickResponeForRateUpExec(
5113 IN PVOID SystemSpecific1,
5114 IN PVOID FunctionContext,
5115 IN PVOID SystemSpecific2,
5116 IN PVOID SystemSpecific3);
5118 VOID AsicBbpTuning1(
5119 IN PRTMP_ADAPTER pAd);
5121 VOID AsicBbpTuning2(
5122 IN PRTMP_ADAPTER pAd);
5124 VOID RTMPUpdateMlmeRate(
5125 IN PRTMP_ADAPTER pAd);
5128 IN PRTMP_ADAPTER pAd,
5133 VOID AsicEvaluateRxAnt(
5134 IN PRTMP_ADAPTER pAd);
5136 VOID AsicRxAntEvalTimeout(
5137 IN PVOID SystemSpecific1,
5138 IN PVOID FunctionContext,
5139 IN PVOID SystemSpecific2,
5140 IN PVOID SystemSpecific3);
5142 VOID APSDPeriodicExec(
5143 IN PVOID SystemSpecific1,
5144 IN PVOID FunctionContext,
5145 IN PVOID SystemSpecific2,
5146 IN PVOID SystemSpecific3);
5148 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5149 IN PRTMP_ADAPTER pAd,
5150 IN PMAC_TABLE_ENTRY pEntry);
5152 UCHAR RTMPStaFixedTxMode(
5153 IN PRTMP_ADAPTER pAd,
5154 IN PMAC_TABLE_ENTRY pEntry);
5156 VOID RTMPUpdateLegacyTxSetting(
5157 UCHAR fixed_tx_mode,
5158 PMAC_TABLE_ENTRY pEntry);
5160 BOOLEAN RTMPAutoRateSwitchCheck(
5161 IN PRTMP_ADAPTER pAd);
5163 NDIS_STATUS MlmeInit(
5164 IN PRTMP_ADAPTER pAd);
5167 IN PRTMP_ADAPTER pAd);
5170 IN PRTMP_ADAPTER pAd);
5172 VOID MlmeResetRalinkCounters(
5173 IN PRTMP_ADAPTER pAd);
5175 VOID BuildChannelList(
5176 IN PRTMP_ADAPTER pAd);
5179 IN PRTMP_ADAPTER pAd);
5182 IN PRTMP_ADAPTER pAd,
5185 VOID ChangeToCellPowerLimit(
5186 IN PRTMP_ADAPTER pAd,
5187 IN UCHAR AironetCellPowerLimit);
5190 IN PRTMP_ADAPTER pAd,
5194 IN PRTMP_ADAPTER pAd,
5198 IN PRTMP_ADAPTER pAd);
5201 IN PRTMP_ADAPTER pAd,
5206 IN PRTMP_ADAPTER pAd);
5209 IN PRTMP_ADAPTER pAd);
5212 IN PRTMP_ADAPTER pAd);
5214 USHORT RTMP_EEPROM_READ16(
5215 IN PRTMP_ADAPTER pAd,
5218 VOID RTMP_EEPROM_WRITE16(
5219 IN PRTMP_ADAPTER pAd,
5224 // Prototypes of function definition in rtmp_tkip.c
5226 VOID RTMPInitTkipEngine(
5227 IN PRTMP_ADAPTER pAd,
5236 VOID RTMPInitMICEngine(
5237 IN PRTMP_ADAPTER pAd,
5241 IN UCHAR UserPriority,
5244 BOOLEAN RTMPTkipCompareMICValue(
5245 IN PRTMP_ADAPTER pAd,
5250 IN UCHAR UserPriority,
5253 VOID RTMPCalculateMICValue(
5254 IN PRTMP_ADAPTER pAd,
5255 IN PNDIS_PACKET pPacket,
5257 IN PCIPHER_KEY pKey,
5260 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5261 IN PRTMP_ADAPTER pAd,
5269 VOID RTMPTkipAppendByte(
5270 IN PTKIP_KEY_INFO pTkip,
5273 VOID RTMPTkipAppend(
5274 IN PTKIP_KEY_INFO pTkip,
5278 VOID RTMPTkipGetMIC(
5279 IN PTKIP_KEY_INFO pTkip);
5281 BOOLEAN RTMPSoftDecryptTKIP(
5282 IN PRTMP_ADAPTER pAd,
5284 IN ULONG DataByteCnt,
5285 IN UCHAR UserPriority,
5286 IN PCIPHER_KEY pWpaKey);
5288 BOOLEAN RTMPSoftDecryptAES(
5289 IN PRTMP_ADAPTER pAd,
5291 IN ULONG DataByteCnt,
5292 IN PCIPHER_KEY pWpaKey);
5294 #if 0 // removed by AlbertY
5295 NDIS_STATUS RTMPWPAAddKeyProc(
5296 IN PRTMP_ADAPTER pAd,
5301 // Prototypes of function definition in cmm_info.c
5303 NDIS_STATUS RTMPWPARemoveKeyProc(
5304 IN PRTMP_ADAPTER pAd,
5307 VOID RTMPWPARemoveAllKeys(
5308 IN PRTMP_ADAPTER pAd);
5310 BOOLEAN RTMPCheckStrPrintAble(
5314 VOID RTMPSetPhyMode(
5315 IN PRTMP_ADAPTER pAd,
5318 VOID RTMPUpdateHTIE(
5319 IN RT_HT_CAPABILITY *pRtHt,
5321 OUT HT_CAPABILITY_IE *pHtCapability,
5322 OUT ADD_HT_INFO_IE *pAddHtInfo);
5324 VOID RTMPAddWcidAttributeEntry(
5325 IN PRTMP_ADAPTER pAd,
5329 IN MAC_TABLE_ENTRY *pEntry);
5331 CHAR *GetEncryptType(
5337 VOID RTMPIoctlGetSiteSurvey(
5338 IN PRTMP_ADAPTER pAdapter,
5339 IN struct iwreq *wrq);
5341 VOID RTMPIoctlGetMacTable(
5342 IN PRTMP_ADAPTER pAd,
5343 IN struct iwreq *wrq);
5345 VOID RTMPIndicateWPA2Status(
5346 IN PRTMP_ADAPTER pAdapter);
5348 VOID RTMPOPModeSwitching(
5349 IN PRTMP_ADAPTER pAd);
5351 #ifdef CONFIG_STA_SUPPORT
5352 VOID RTMPAddBSSIDCipher(
5353 IN PRTMP_ADAPTER pAd,
5355 IN PNDIS_802_11_KEY pKey,
5356 IN UCHAR CipherAlg);
5357 #endif // CONFIG_STA_SUPPORT //
5359 #ifdef DOT11_N_SUPPORT
5361 IN PRTMP_ADAPTER pAd,
5362 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5364 VOID RTMPSetIndividualHT(
5365 IN PRTMP_ADAPTER pAd,
5367 #endif // DOT11_N_SUPPORT //
5369 VOID RTMPSendWirelessEvent(
5370 IN PRTMP_ADAPTER pAd,
5371 IN USHORT Event_flag,
5376 VOID NICUpdateCntlCounters(
5377 IN PRTMP_ADAPTER pAd,
5378 IN PHEADER_802_11 pHeader,
5380 IN PRXWI_STRUC pRxWI);
5382 // prototype in wpa.c
5384 BOOLEAN WpaMsgTypeSubst(
5388 VOID WpaPskStateMachineInit(
5389 IN PRTMP_ADAPTER pAd,
5390 IN STATE_MACHINE *S,
5391 OUT STATE_MACHINE_FUNC Trans[]);
5393 VOID WpaEAPOLKeyAction(
5394 IN PRTMP_ADAPTER pAd,
5395 IN MLME_QUEUE_ELEM *Elem);
5397 VOID WpaPairMsg1Action(
5398 IN PRTMP_ADAPTER pAd,
5399 IN MLME_QUEUE_ELEM *Elem);
5401 VOID WpaPairMsg3Action(
5402 IN PRTMP_ADAPTER pAd,
5403 IN MLME_QUEUE_ELEM *Elem);
5405 VOID WpaGroupMsg1Action(
5406 IN PRTMP_ADAPTER pAd,
5407 IN MLME_QUEUE_ELEM *Elem);
5409 VOID WpaMacHeaderInit(
5410 IN PRTMP_ADAPTER pAd,
5411 IN OUT PHEADER_802_11 pHdr80211,
5415 VOID Wpa2PairMsg1Action(
5416 IN PRTMP_ADAPTER pAd,
5417 IN MLME_QUEUE_ELEM *Elem);
5419 VOID Wpa2PairMsg3Action(
5420 IN PRTMP_ADAPTER pAd,
5421 IN MLME_QUEUE_ELEM *Elem);
5423 BOOLEAN ParseKeyData(
5424 IN PRTMP_ADAPTER pAd,
5426 IN UCHAR KeyDataLen,
5427 IN UCHAR bPairewise);
5429 VOID RTMPToWirelessSta(
5430 IN PRTMP_ADAPTER pAd,
5431 IN PUCHAR pHeader802_3,
5435 IN BOOLEAN is4wayFrame);
5463 IN PRTMP_ADAPTER pAd,
5473 IN PRTMP_ADAPTER pAd,
5478 // prototype in aironet.c
5480 VOID AironetStateMachineInit(
5481 IN PRTMP_ADAPTER pAd,
5482 IN STATE_MACHINE *S,
5483 OUT STATE_MACHINE_FUNC Trans[]);
5485 VOID AironetMsgAction(
5486 IN PRTMP_ADAPTER pAd,
5487 IN MLME_QUEUE_ELEM *Elem);
5489 VOID AironetRequestAction(
5490 IN PRTMP_ADAPTER pAd,
5491 IN MLME_QUEUE_ELEM *Elem);
5493 VOID ChannelLoadRequestAction(
5494 IN PRTMP_ADAPTER pAd,
5497 VOID NoiseHistRequestAction(
5498 IN PRTMP_ADAPTER pAd,
5501 VOID BeaconRequestAction(
5502 IN PRTMP_ADAPTER pAd,
5505 VOID AironetReportAction(
5506 IN PRTMP_ADAPTER pAd,
5507 IN MLME_QUEUE_ELEM *Elem);
5509 VOID ChannelLoadReportAction(
5510 IN PRTMP_ADAPTER pAd,
5513 VOID NoiseHistReportAction(
5514 IN PRTMP_ADAPTER pAd,
5517 VOID AironetFinalReportAction(
5518 IN PRTMP_ADAPTER pAd);
5520 VOID BeaconReportAction(
5521 IN PRTMP_ADAPTER pAd,
5524 VOID AironetAddBeaconReport(
5525 IN PRTMP_ADAPTER pAd,
5527 IN PMLME_QUEUE_ELEM pElem);
5529 VOID AironetCreateBeaconReportFromBssTable(
5530 IN PRTMP_ADAPTER pAd);
5532 VOID DBGPRINT_TX_RING(
5533 IN PRTMP_ADAPTER pAd,
5536 VOID DBGPRINT_RX_RING(
5537 IN PRTMP_ADAPTER pAd);
5540 IN PRTMP_ADAPTER pAd,
5542 IN UCHAR RssiNumber);
5545 #ifdef DOT11N_DRAFT3
5546 VOID BuildEffectedChannelList(
5547 IN PRTMP_ADAPTER pAd);
5548 #endif // DOT11N_DRAFT3 //
5551 VOID APAsicEvaluateRxAnt(
5552 IN PRTMP_ADAPTER pAd);
5555 VOID APAsicRxAntEvalTimeout(
5556 IN PRTMP_ADAPTER pAd);
5559 // function prototype in cmm_wpa.c
5561 BOOLEAN RTMPCheckWPAframe(
5562 IN PRTMP_ADAPTER pAd,
5563 IN PMAC_TABLE_ENTRY pEntry,
5565 IN ULONG DataByteCount,
5566 IN UCHAR FromWhichBSSID);
5568 VOID AES_GTK_KEY_UNWRAP(
5570 OUT UCHAR *plaintext,
5572 IN UCHAR *ciphertext);
5574 BOOLEAN RTMPCheckRSNIE(
5575 IN PRTMP_ADAPTER pAd,
5578 IN MAC_TABLE_ENTRY *pEntry,
5581 BOOLEAN RTMPParseEapolKeyData(
5582 IN PRTMP_ADAPTER pAd,
5584 IN UCHAR KeyDataLen,
5585 IN UCHAR GroupKeyIndex,
5588 IN MAC_TABLE_ENTRY *pEntry);
5590 VOID ConstructEapolMsg(
5591 IN PRTMP_ADAPTER pAd,
5592 IN UCHAR PeerAuthMode,
5593 IN UCHAR PeerWepStatus,
5594 IN UCHAR MyGroupKeyWepStatus,
5596 IN UCHAR DefaultKeyIdx,
5597 IN UCHAR *ReplayCounter,
5604 OUT PEAPOL_PACKET pMsg);
5607 IN PRTMP_ADAPTER pAd,
5608 IN UCHAR PeerWepStatus,
5610 OUT PEAPOL_PACKET pMsg);
5612 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5613 IN PRTMP_ADAPTER pAd,
5615 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5616 IN PCIPHER_KEY pShard_key);
5618 VOID ConstructEapolKeyData(
5619 IN PRTMP_ADAPTER pAd,
5620 IN UCHAR PeerAuthMode,
5621 IN UCHAR PeerWepStatus,
5622 IN UCHAR GroupKeyWepStatus,
5624 IN UCHAR DefaultKeyIdx,
5625 IN BOOLEAN bWPA2Capable,
5630 OUT PEAPOL_PACKET pMsg);
5633 IN PRTMP_ADAPTER pAd,
5639 // function prototype in ap_wpa.c
5642 BOOLEAN APWpaMsgTypeSubst(
5646 MAC_TABLE_ENTRY *PACInquiry(
5647 IN PRTMP_ADAPTER pAd,
5650 BOOLEAN RTMPCheckMcast(
5651 IN PRTMP_ADAPTER pAd,
5652 IN PEID_STRUCT eid_ptr,
5653 IN MAC_TABLE_ENTRY *pEntry);
5655 BOOLEAN RTMPCheckUcast(
5656 IN PRTMP_ADAPTER pAd,
5657 IN PEID_STRUCT eid_ptr,
5658 IN MAC_TABLE_ENTRY *pEntry);
5660 BOOLEAN RTMPCheckAUTH(
5661 IN PRTMP_ADAPTER pAd,
5662 IN PEID_STRUCT eid_ptr,
5663 IN MAC_TABLE_ENTRY *pEntry);
5665 VOID WPAStart4WayHS(
5666 IN PRTMP_ADAPTER pAd,
5667 IN MAC_TABLE_ENTRY *pEntry,
5668 IN ULONG TimeInterval);
5670 VOID WPAStart2WayGroupHS(
5671 IN PRTMP_ADAPTER pAd,
5672 IN MAC_TABLE_ENTRY *pEntry);
5674 VOID APWpaEAPPacketAction(
5675 IN PRTMP_ADAPTER pAd,
5676 IN MLME_QUEUE_ELEM *Elem);
5678 VOID APWpaEAPOLStartAction(
5679 IN PRTMP_ADAPTER pAd,
5680 IN MLME_QUEUE_ELEM *Elem);
5682 VOID APWpaEAPOLLogoffAction(
5683 IN PRTMP_ADAPTER pAd,
5684 IN MLME_QUEUE_ELEM *Elem);
5686 VOID APWpaEAPOLKeyAction(
5687 IN PRTMP_ADAPTER pAd,
5688 IN MLME_QUEUE_ELEM *Elem);
5690 VOID APWpaEAPOLASFAlertAction(
5691 IN PRTMP_ADAPTER pAd,
5692 IN MLME_QUEUE_ELEM *Elem);
5694 VOID HandleCounterMeasure(
5695 IN PRTMP_ADAPTER pAd,
5696 IN MAC_TABLE_ENTRY *pEntry);
5698 VOID PeerPairMsg2Action(
5699 IN PRTMP_ADAPTER pAd,
5700 IN MAC_TABLE_ENTRY *pEntry,
5701 IN MLME_QUEUE_ELEM *Elem);
5703 VOID PeerPairMsg4Action(
5704 IN PRTMP_ADAPTER pAd,
5705 IN MAC_TABLE_ENTRY *pEntry,
5706 IN MLME_QUEUE_ELEM *Elem);
5709 IN PVOID SystemSpecific1,
5710 IN PVOID FunctionContext,
5711 IN PVOID SystemSpecific2,
5712 IN PVOID SystemSpecific3);
5715 IN PVOID SystemSpecific1,
5716 IN PVOID FunctionContext,
5717 IN PVOID SystemSpecific2,
5718 IN PVOID SystemSpecific3);
5720 VOID EnqueueStartForPSKExec(
5721 IN PVOID SystemSpecific1,
5722 IN PVOID FunctionContext,
5723 IN PVOID SystemSpecific2,
5724 IN PVOID SystemSpecific3);
5726 VOID RTMPHandleSTAKey(
5727 IN PRTMP_ADAPTER pAdapter,
5728 IN MAC_TABLE_ENTRY *pEntry,
5729 IN MLME_QUEUE_ELEM *Elem);
5731 #if 0 // merge into PeerPairMsg4Action
5732 VOID Wpa1PeerPairMsg4Action(
5733 IN PRTMP_ADAPTER pAd,
5734 IN MAC_TABLE_ENTRY *pEntry,
5735 IN MLME_QUEUE_ELEM *Elem);
5737 VOID Wpa2PeerPairMsg4Action(
5738 IN PRTMP_ADAPTER pAd,
5739 IN PMAC_TABLE_ENTRY pEntry,
5740 IN MLME_QUEUE_ELEM *Elem);
5743 VOID PeerGroupMsg2Action(
5744 IN PRTMP_ADAPTER pAd,
5745 IN PMAC_TABLE_ENTRY pEntry,
5749 #if 0 // replaced by WPAStart2WayGroupHS
5750 NDIS_STATUS APWpaHardTransmit(
5751 IN PRTMP_ADAPTER pAd,
5752 IN PMAC_TABLE_ENTRY pEntry);
5755 VOID PairDisAssocAction(
5756 IN PRTMP_ADAPTER pAd,
5757 IN PMAC_TABLE_ENTRY pEntry,
5760 VOID MlmeDeAuthAction(
5761 IN PRTMP_ADAPTER pAd,
5762 IN PMAC_TABLE_ENTRY pEntry,
5765 VOID GREKEYPeriodicExec(
5766 IN PVOID SystemSpecific1,
5767 IN PVOID FunctionContext,
5768 IN PVOID SystemSpecific2,
5769 IN PVOID SystemSpecific3);
5791 IN PRTMP_ADAPTER pAd,
5794 VOID AES_GTK_KEY_WRAP(
5796 IN UCHAR *plaintext,
5798 OUT UCHAR *ciphertext);
5801 IN PRTMP_ADAPTER pAdapter,
5805 VOID APToWirelessSta(
5806 IN PRTMP_ADAPTER pAd,
5807 IN MAC_TABLE_ENTRY *pEntry,
5808 IN PUCHAR pHeader802_3,
5812 IN BOOLEAN bClearFrame);
5814 VOID RTMPAddPMKIDCache(
5815 IN PRTMP_ADAPTER pAd,
5821 INT RTMPSearchPMKIDCache(
5822 IN PRTMP_ADAPTER pAd,
5826 VOID RTMPDeletePMKIDCache(
5827 IN PRTMP_ADAPTER pAd,
5831 VOID RTMPMaintainPMKIDCache(
5832 IN PRTMP_ADAPTER pAd);
5834 VOID RTMPSendTriggerFrame(
5835 IN PRTMP_ADAPTER pAd,
5839 IN BOOLEAN bQosNull);
5842 //typedef void (*TIMER_FUNCTION)(unsigned long);
5846 VOID RTMP_SetPeriodicTimer(
5847 IN NDIS_MINIPORT_TIMER *pTimer,
5848 IN unsigned long timeout);
5850 VOID RTMP_OS_Init_Timer(
5851 IN PRTMP_ADAPTER pAd,
5852 IN NDIS_MINIPORT_TIMER *pTimer,
5853 IN TIMER_FUNCTION function,
5856 VOID RTMP_OS_Add_Timer(
5857 IN NDIS_MINIPORT_TIMER *pTimer,
5858 IN unsigned long timeout);
5860 VOID RTMP_OS_Mod_Timer(
5861 IN NDIS_MINIPORT_TIMER *pTimer,
5862 IN unsigned long timeout);
5865 VOID RTMP_OS_Del_Timer(
5866 IN NDIS_MINIPORT_TIMER *pTimer,
5867 OUT BOOLEAN *pCancelled);
5870 VOID RTMP_OS_Release_Packet(
5871 IN PRTMP_ADAPTER pAd,
5872 IN PQUEUE_ENTRY pEntry);
5877 NDIS_STATUS os_alloc_mem(
5878 IN PRTMP_ADAPTER pAd,
5882 NDIS_STATUS os_free_mem(
5883 IN PRTMP_ADAPTER pAd,
5887 void RTMP_AllocateSharedMemory(
5888 IN PRTMP_ADAPTER pAd,
5891 OUT PVOID *VirtualAddress,
5892 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5894 VOID RTMPFreeTxRxRingMemory(
5895 IN PRTMP_ADAPTER pAd);
5897 NDIS_STATUS AdapterBlockAllocateMemory(
5901 void RTMP_AllocateTxDescMemory(
5902 IN PRTMP_ADAPTER pAd,
5906 OUT PVOID *VirtualAddress,
5907 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5909 void RTMP_AllocateFirstTxBuffer(
5910 IN PRTMP_ADAPTER pAd,
5914 OUT PVOID *VirtualAddress,
5915 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5917 void RTMP_AllocateMgmtDescMemory(
5918 IN PRTMP_ADAPTER pAd,
5921 OUT PVOID *VirtualAddress,
5922 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5924 void RTMP_AllocateRxDescMemory(
5925 IN PRTMP_ADAPTER pAd,
5928 OUT PVOID *VirtualAddress,
5929 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5931 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5932 IN PRTMP_ADAPTER pAd,
5935 OUT PVOID *VirtualAddress,
5936 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5938 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5939 IN PRTMP_ADAPTER pAd,
5942 OUT PVOID *VirtualAddress);
5944 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5945 IN PRTMP_ADAPTER pAd,
5948 void RTMP_QueryPacketInfo(
5949 IN PNDIS_PACKET pPacket,
5950 OUT PACKET_INFO *pPacketInfo,
5951 OUT PUCHAR *pSrcBufVA,
5952 OUT UINT *pSrcBufLen);
5954 void RTMP_QueryNextPacketInfo(
5955 IN PNDIS_PACKET *ppPacket,
5956 OUT PACKET_INFO *pPacketInfo,
5957 OUT PUCHAR *pSrcBufVA,
5958 OUT UINT *pSrcBufLen);
5961 BOOLEAN RTMP_FillTxBlkInfo(
5962 IN RTMP_ADAPTER *pAd,
5966 PRTMP_SCATTER_GATHER_LIST
5967 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5970 void announce_802_3_packet(
5971 IN PRTMP_ADAPTER pAd,
5972 IN PNDIS_PACKET pPacket);
5975 UINT BA_Reorder_AMSDU_Annnounce(
5976 IN PRTMP_ADAPTER pAd,
5977 IN PNDIS_PACKET pPacket);
5980 UINT Handle_AMSDU_Packet(
5981 IN PRTMP_ADAPTER pAd,
5984 IN UCHAR FromWhichBSSID);
5987 void convert_802_11_to_802_3_packet(
5988 IN PRTMP_ADAPTER pAd,
5989 IN PNDIS_PACKET pPacket,
5993 IN UCHAR FromWhichBSSID);
5996 PNET_DEV get_netdev_from_bssid(
5997 IN PRTMP_ADAPTER pAd,
5998 IN UCHAR FromWhichBSSID);
6001 PNDIS_PACKET duplicate_pkt(
6002 IN PRTMP_ADAPTER pAd,
6003 IN PUCHAR pHeader802_3,
6007 IN UCHAR FromWhichBSSID);
6010 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6011 IN PRTMP_ADAPTER pAd,
6012 IN PNDIS_PACKET pOldPkt);
6014 PNDIS_PACKET duplicate_pkt_with_VLAN(
6015 IN PRTMP_ADAPTER pAd,
6016 IN PUCHAR pHeader802_3,
6020 IN UCHAR FromWhichBSSID);
6022 PNDIS_PACKET duplicate_pkt_with_WPI(
6023 IN PRTMP_ADAPTER pAd,
6024 IN PNDIS_PACKET pPacket,
6025 IN UINT32 ext_head_len,
6026 IN UINT32 ext_tail_len);
6028 UCHAR VLAN_8023_Header_Copy(
6029 IN PRTMP_ADAPTER pAd,
6030 IN PUCHAR pHeader802_3,
6033 IN UCHAR FromWhichBSSID);
6035 #ifdef DOT11_N_SUPPORT
6036 void ba_flush_reordering_timeout_mpdus(
6037 IN PRTMP_ADAPTER pAd,
6038 IN PBA_REC_ENTRY pBAEntry,
6042 VOID BAOriSessionSetUp(
6043 IN PRTMP_ADAPTER pAd,
6044 IN MAC_TABLE_ENTRY *pEntry,
6048 IN BOOLEAN isForced);
6050 VOID BASessionTearDownALL(
6051 IN OUT PRTMP_ADAPTER pAd,
6053 #endif // DOT11_N_SUPPORT //
6055 BOOLEAN OS_Need_Clone_Packet(void);
6058 VOID build_tx_packet(
6059 IN PRTMP_ADAPTER pAd,
6060 IN PNDIS_PACKET pPacket,
6065 VOID BAOriSessionTearDown(
6066 IN OUT PRTMP_ADAPTER pAd,
6069 IN BOOLEAN bPassive,
6070 IN BOOLEAN bForceSend);
6072 VOID BARecSessionTearDown(
6073 IN OUT PRTMP_ADAPTER pAd,
6076 IN BOOLEAN bPassive);
6078 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6079 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6081 ULONG AutoChBssInsertEntry(
6082 IN PRTMP_ADAPTER pAd,
6089 void AutoChBssTableInit(
6090 IN PRTMP_ADAPTER pAd);
6092 void ChannelInfoInit(
6093 IN PRTMP_ADAPTER pAd);
6095 void AutoChBssTableDestroy(
6096 IN PRTMP_ADAPTER pAd);
6098 void ChannelInfoDestroy(
6099 IN PRTMP_ADAPTER pAd);
6101 UCHAR New_ApAutoSelectChannel(
6102 IN PRTMP_ADAPTER pAd);
6104 BOOLEAN rtstrmactohex(
6108 BOOLEAN rtstrcasecmp(
6112 char *rtstrstruncasecmp(
6118 IN const char * s2);
6122 IN const char * ct);
6126 unsigned int *addr);
6128 ////////// common ioctl functions //////////
6129 INT Set_DriverVersion_Proc(
6130 IN PRTMP_ADAPTER pAd,
6133 INT Set_CountryRegion_Proc(
6134 IN PRTMP_ADAPTER pAd,
6137 INT Set_CountryRegionABand_Proc(
6138 IN PRTMP_ADAPTER pAd,
6141 INT Set_WirelessMode_Proc(
6142 IN PRTMP_ADAPTER pAd,
6145 INT Set_Channel_Proc(
6146 IN PRTMP_ADAPTER pAd,
6149 INT Set_ShortSlot_Proc(
6150 IN PRTMP_ADAPTER pAd,
6153 INT Set_TxPower_Proc(
6154 IN PRTMP_ADAPTER pAd,
6157 INT Set_BGProtection_Proc(
6158 IN PRTMP_ADAPTER pAd,
6161 INT Set_TxPreamble_Proc(
6162 IN PRTMP_ADAPTER pAd,
6165 INT Set_RTSThreshold_Proc(
6166 IN PRTMP_ADAPTER pAd,
6169 INT Set_FragThreshold_Proc(
6170 IN PRTMP_ADAPTER pAd,
6173 INT Set_TxBurst_Proc(
6174 IN PRTMP_ADAPTER pAd,
6177 #ifdef AGGREGATION_SUPPORT
6178 INT Set_PktAggregate_Proc(
6179 IN PRTMP_ADAPTER pAd,
6183 INT Set_IEEE80211H_Proc(
6184 IN PRTMP_ADAPTER pAd,
6189 IN PRTMP_ADAPTER pAd,
6193 INT Show_DescInfo_Proc(
6194 IN PRTMP_ADAPTER pAd,
6197 INT Set_ResetStatCounter_Proc(
6198 IN PRTMP_ADAPTER pAd,
6201 #ifdef DOT11_N_SUPPORT
6202 INT Set_BASetup_Proc(
6203 IN PRTMP_ADAPTER pAd,
6206 INT Set_BADecline_Proc(
6207 IN PRTMP_ADAPTER pAd,
6210 INT Set_BAOriTearDown_Proc(
6211 IN PRTMP_ADAPTER pAd,
6214 INT Set_BARecTearDown_Proc(
6215 IN PRTMP_ADAPTER pAd,
6219 IN PRTMP_ADAPTER pAd,
6223 IN PRTMP_ADAPTER pAd,
6227 IN PRTMP_ADAPTER pAd,
6230 INT Set_HtOpMode_Proc(
6231 IN PRTMP_ADAPTER pAd,
6234 INT Set_HtStbc_Proc(
6235 IN PRTMP_ADAPTER pAd,
6239 IN PRTMP_ADAPTER pAd,
6242 INT Set_HtExtcha_Proc(
6243 IN PRTMP_ADAPTER pAd,
6246 INT Set_HtMpduDensity_Proc(
6247 IN PRTMP_ADAPTER pAd,
6250 INT Set_HtBaWinSize_Proc(
6251 IN PRTMP_ADAPTER pAd,
6255 IN PRTMP_ADAPTER pAd,
6258 INT Set_HtLinkAdapt_Proc(
6259 IN PRTMP_ADAPTER pAd,
6262 INT Set_HtAmsdu_Proc(
6263 IN PRTMP_ADAPTER pAd,
6266 INT Set_HtAutoBa_Proc(
6267 IN PRTMP_ADAPTER pAd,
6270 INT Set_HtProtect_Proc(
6271 IN PRTMP_ADAPTER pAd,
6274 INT Set_HtMimoPs_Proc(
6275 IN PRTMP_ADAPTER pAd,
6279 INT Set_ForceShortGI_Proc(
6280 IN PRTMP_ADAPTER pAd,
6283 INT Set_ForceGF_Proc(
6284 IN PRTMP_ADAPTER pAd,
6288 IN PRTMP_ADAPTER pAd);
6290 INT Set_SendPSMPAction_Proc(
6291 IN PRTMP_ADAPTER pAd,
6294 INT Set_HtMIMOPSmode_Proc(
6295 IN PRTMP_ADAPTER pAd,
6299 INT Set_HtTxBASize_Proc(
6300 IN PRTMP_ADAPTER pAd,
6302 #endif // DOT11_N_SUPPORT //
6306 #ifdef CONFIG_STA_SUPPORT
6308 VOID RTMPSendDLSTearDownFrame(
6309 IN PRTMP_ADAPTER pAd,
6312 #ifdef DOT11_N_SUPPORT
6315 IN PRTMP_ADAPTER pAd,
6316 OUT PQUERYBA_TABLE pBAT);
6317 #endif // DOT11_N_SUPPORT //
6319 #ifdef WPA_SUPPLICANT_SUPPORT
6320 INT WpaCheckEapCode(
6321 IN PRTMP_ADAPTER pAd,
6326 VOID WpaSendMicFailureToWpaSupplicant(
6327 IN PRTMP_ADAPTER pAd,
6328 IN BOOLEAN bUnicast);
6330 VOID SendAssocIEsToWpaSupplicant(
6331 IN PRTMP_ADAPTER pAd);
6332 #endif // WPA_SUPPLICANT_SUPPORT //
6334 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6335 int wext_notify_event_assoc(
6336 IN RTMP_ADAPTER *pAd);
6337 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6339 #endif // CONFIG_STA_SUPPORT //
6343 #ifdef DOT11_N_SUPPORT
6344 VOID Handle_BSS_Width_Trigger_Events(
6345 IN PRTMP_ADAPTER pAd);
6347 void build_ext_channel_switch_ie(
6348 IN PRTMP_ADAPTER pAd,
6349 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6350 #endif // DOT11_N_SUPPORT //
6353 BOOLEAN APRxDoneInterruptHandle(
6354 IN PRTMP_ADAPTER pAd);
6356 BOOLEAN STARxDoneInterruptHandle(
6357 IN PRTMP_ADAPTER pAd,
6360 #ifdef DOT11_N_SUPPORT
6361 // AMPDU packet indication
6362 VOID Indicate_AMPDU_Packet(
6363 IN PRTMP_ADAPTER pAd,
6365 IN UCHAR FromWhichBSSID);
6367 // AMSDU packet indication
6368 VOID Indicate_AMSDU_Packet(
6369 IN PRTMP_ADAPTER pAd,
6371 IN UCHAR FromWhichBSSID);
6372 #endif // DOT11_N_SUPPORT //
6374 // Normal legacy Rx packet indication
6375 VOID Indicate_Legacy_Packet(
6376 IN PRTMP_ADAPTER pAd,
6378 IN UCHAR FromWhichBSSID);
6380 VOID Indicate_EAPOL_Packet(
6381 IN PRTMP_ADAPTER pAd,
6383 IN UCHAR FromWhichBSSID);
6385 void update_os_packet_info(
6386 IN PRTMP_ADAPTER pAd,
6388 IN UCHAR FromWhichBSSID);
6390 void wlan_802_11_to_802_3_packet(
6391 IN PRTMP_ADAPTER pAd,
6393 IN PUCHAR pHeader802_3,
6394 IN UCHAR FromWhichBSSID);
6396 UINT deaggregate_AMSDU_announce(
6397 IN PRTMP_ADAPTER pAd,
6398 PNDIS_PACKET pPacket,
6403 #ifdef CONFIG_STA_SUPPORT
6404 // remove LLC and get 802_3 Header
6405 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6407 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6409 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6411 _pDA = _pRxBlk->pHeader->Addr3; \
6412 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6416 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6418 _pDA = _pRxBlk->pHeader->Addr1; \
6419 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6420 _pSA = _pRxBlk->pHeader->Addr2; \
6422 _pSA = _pRxBlk->pHeader->Addr3; \
6426 _pDA = _pRxBlk->pHeader->Addr1; \
6427 _pSA = _pRxBlk->pHeader->Addr2; \
6431 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6432 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6434 #endif // CONFIG_STA_SUPPORT //
6437 BOOLEAN APFowardWirelessStaToWirelessSta(
6438 IN PRTMP_ADAPTER pAd,
6439 IN PNDIS_PACKET pPacket,
6440 IN ULONG FromWhichBSSID);
6442 VOID Announce_or_Forward_802_3_Packet(
6443 IN PRTMP_ADAPTER pAd,
6444 IN PNDIS_PACKET pPacket,
6445 IN UCHAR FromWhichBSSID);
6447 VOID Sta_Announce_or_Forward_802_3_Packet(
6448 IN PRTMP_ADAPTER pAd,
6449 IN PNDIS_PACKET pPacket,
6450 IN UCHAR FromWhichBSSID);
6453 #ifdef CONFIG_STA_SUPPORT
6454 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6455 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6456 //announce_802_3_packet(_pAd, _pPacket);
6457 #endif // CONFIG_STA_SUPPORT //
6460 PNDIS_PACKET DuplicatePacket(
6461 IN PRTMP_ADAPTER pAd,
6462 IN PNDIS_PACKET pPacket,
6463 IN UCHAR FromWhichBSSID);
6466 PNDIS_PACKET ClonePacket(
6467 IN PRTMP_ADAPTER pAd,
6468 IN PNDIS_PACKET pPacket,
6473 // Normal, AMPDU or AMSDU
6474 VOID CmmRxnonRalinkFrameIndicate(
6475 IN PRTMP_ADAPTER pAd,
6477 IN UCHAR FromWhichBSSID);
6479 VOID CmmRxRalinkFrameIndicate(
6480 IN PRTMP_ADAPTER pAd,
6481 IN MAC_TABLE_ENTRY *pEntry,
6483 IN UCHAR FromWhichBSSID);
6485 VOID Update_Rssi_Sample(
6486 IN PRTMP_ADAPTER pAd,
6487 IN RSSI_SAMPLE *pRssi,
6488 IN PRXWI_STRUC pRxWI);
6490 PNDIS_PACKET GetPacketFromRxRing(
6491 IN PRTMP_ADAPTER pAd,
6492 OUT PRT28XX_RXD_STRUC pSaveRxD,
6493 OUT BOOLEAN *pbReschedule,
6494 IN OUT UINT32 *pRxPending);
6496 PNDIS_PACKET RTMPDeFragmentDataFrame(
6497 IN PRTMP_ADAPTER pAd,
6500 ////////////////////////////////////////
6502 #ifdef CONFIG_STA_SUPPORT
6504 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6505 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6506 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6507 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6508 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6509 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6510 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6511 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6512 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6513 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6514 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6517 P80211ENUM_msgitem_status_no_value = 0x00
6520 P80211ENUM_truth_false = 0x00,
6521 P80211ENUM_truth_true = 0x01
6524 /* Definition from madwifi */
6530 } p80211item_uint32_t;
6535 #define WLAN_DEVNAMELEN_MAX 16
6536 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6537 p80211item_uint32_t hosttime;
6538 p80211item_uint32_t mactime;
6539 p80211item_uint32_t channel;
6540 p80211item_uint32_t rssi;
6541 p80211item_uint32_t sq;
6542 p80211item_uint32_t signal;
6543 p80211item_uint32_t noise;
6544 p80211item_uint32_t rate;
6545 p80211item_uint32_t istx;
6546 p80211item_uint32_t frmlen;
6547 } wlan_ng_prism2_header;
6549 /* The radio capture header precedes the 802.11 header. */
6550 typedef struct PACKED _ieee80211_radiotap_header {
6551 UINT8 it_version; /* Version 0. Only increases
6552 * for drastic changes,
6553 * introduction of compatible
6554 * new fields does not count.
6557 UINT16 it_len; /* length of the whole
6558 * header in bytes, including
6559 * it_version, it_pad,
6560 * it_len, and data fields.
6562 UINT32 it_present; /* A bitmap telling which
6563 * fields are present. Set bit 31
6564 * (0x80000000) to extend the
6565 * bitmap by another 32 bits.
6566 * Additional extensions are made
6567 * by setting bit 31.
6569 }ieee80211_radiotap_header ;
6571 enum ieee80211_radiotap_type {
6572 IEEE80211_RADIOTAP_TSFT = 0,
6573 IEEE80211_RADIOTAP_FLAGS = 1,
6574 IEEE80211_RADIOTAP_RATE = 2,
6575 IEEE80211_RADIOTAP_CHANNEL = 3,
6576 IEEE80211_RADIOTAP_FHSS = 4,
6577 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6578 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6579 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6580 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6581 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6582 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6583 IEEE80211_RADIOTAP_ANTENNA = 11,
6584 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6585 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6588 #define WLAN_RADIOTAP_PRESENT ( \
6589 (1 << IEEE80211_RADIOTAP_TSFT) | \
6590 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6591 (1 << IEEE80211_RADIOTAP_RATE) | \
6594 typedef struct _wlan_radiotap_header {
6595 ieee80211_radiotap_header wt_ihdr;
6599 } wlan_radiotap_header;
6600 /* Definition from madwifi */
6602 void send_monitor_packets(
6603 IN PRTMP_ADAPTER pAd,
6606 #if WIRELESS_EXT >= 12
6607 // This function will be called when query /proc
6608 struct iw_statistics *rt28xx_get_wireless_stats(
6609 IN struct net_device *net_dev);
6612 VOID RTMPSetDesiredRates(
6613 IN PRTMP_ADAPTER pAdapter,
6615 #endif // CONFIG_STA_SUPPORT //
6617 INT Set_FixedTxMode_Proc(
6618 IN PRTMP_ADAPTER pAd,
6621 static inline char* GetPhyMode(
6631 #ifdef DOT11_N_SUPPORT
6635 case MODE_HTGREENFIELD:
6637 #endif // DOT11_N_SUPPORT //
6644 static inline char* GetBW(
6654 #ifdef DOT11_N_SUPPORT
6657 #endif // DOT11_N_SUPPORT //
6664 VOID RT28xxThreadTerminate(
6665 IN RTMP_ADAPTER *pAd);
6667 BOOLEAN RT28XXChipsetCheck(
6670 BOOLEAN RT28XXNetDevInit(
6672 IN struct net_device *net_dev,
6673 IN RTMP_ADAPTER *pAd);
6675 BOOLEAN RT28XXProbePostConfig(
6677 IN RTMP_ADAPTER *pAd,
6680 VOID RT28XXDMADisable(
6681 IN RTMP_ADAPTER *pAd);
6683 VOID RT28XXDMAEnable(
6684 IN RTMP_ADAPTER *pAd);
6686 VOID RT28xx_UpdateBeaconToAsic(
6687 IN RTMP_ADAPTER * pAd,
6690 IN ULONG UpdatePos);
6693 IN struct net_device *net_dev,
6694 IN OUT struct ifreq *rq,
6698 #ifdef CONFIG_STA_SUPPORT
6699 INT rt28xx_sta_ioctl(
6700 IN struct net_device *net_dev,
6701 IN OUT struct ifreq *rq,
6703 #endif // CONFIG_STA_SUPPORT //
6705 BOOLEAN RT28XXSecurityKeyAdd(
6706 IN PRTMP_ADAPTER pAd,
6709 IN MAC_TABLE_ENTRY *pEntry);
6711 ////////////////////////////////////////
6712 PNDIS_PACKET GetPacketFromRxRing(
6713 IN PRTMP_ADAPTER pAd,
6714 OUT PRT28XX_RXD_STRUC pSaveRxD,
6715 OUT BOOLEAN *pbReschedule,
6716 IN OUT UINT32 *pRxPending);
6719 void kill_thread_task(PRTMP_ADAPTER pAd);
6721 void tbtt_tasklet(unsigned long data);
6724 VOID AsicTurnOffRFClk(
6725 IN PRTMP_ADAPTER pAd,
6728 VOID AsicTurnOnRFClk(
6729 IN PRTMP_ADAPTER pAd,
6734 // Function Prototype in rtusb_bulk.c
6736 VOID RTUSBInitTxDesc(
6737 IN PRTMP_ADAPTER pAd,
6738 IN PTX_CONTEXT pTxContext,
6739 IN UCHAR BulkOutPipeId,
6740 IN usb_complete_t Func);
6742 VOID RTUSBInitHTTxDesc(
6743 IN PRTMP_ADAPTER pAd,
6744 IN PHT_TX_CONTEXT pTxContext,
6745 IN UCHAR BulkOutPipeId,
6746 IN ULONG BulkOutSize,
6747 IN usb_complete_t Func);
6749 VOID RTUSBInitRxDesc(
6750 IN PRTMP_ADAPTER pAd,
6751 IN PRX_CONTEXT pRxContext);
6753 VOID RTUSBCleanUpDataBulkOutQueue(
6754 IN PRTMP_ADAPTER pAd);
6756 VOID RTUSBCancelPendingBulkOutIRP(
6757 IN PRTMP_ADAPTER pAd);
6759 VOID RTUSBBulkOutDataPacket(
6760 IN PRTMP_ADAPTER pAd,
6761 IN UCHAR BulkOutPipeId,
6764 VOID RTUSBBulkOutNullFrame(
6765 IN PRTMP_ADAPTER pAd);
6767 VOID RTUSBBulkOutRTSFrame(
6768 IN PRTMP_ADAPTER pAd);
6770 VOID RTUSBCancelPendingBulkInIRP(
6771 IN PRTMP_ADAPTER pAd);
6773 VOID RTUSBCancelPendingIRPs(
6774 IN PRTMP_ADAPTER pAd);
6776 VOID RTUSBBulkOutMLMEPacket(
6777 IN PRTMP_ADAPTER pAd,
6780 VOID RTUSBBulkOutPsPoll(
6781 IN PRTMP_ADAPTER pAd);
6783 VOID RTUSBCleanUpMLMEBulkOutQueue(
6784 IN PRTMP_ADAPTER pAd);
6786 VOID RTUSBKickBulkOut(
6787 IN PRTMP_ADAPTER pAd);
6789 VOID RTUSBBulkReceive(
6790 IN PRTMP_ADAPTER pAd);
6793 IN RTMP_ADAPTER *pAd);
6795 VOID RTUSBInitRxDesc(
6796 IN PRTMP_ADAPTER pAd,
6797 IN PRX_CONTEXT pRxContext);
6799 VOID RTUSBBulkRxHandle(
6800 IN unsigned long data);
6803 // Function Prototype in rtusb_io.c
6805 NTSTATUS RTUSBMultiRead(
6806 IN PRTMP_ADAPTER pAd,
6811 NTSTATUS RTUSBMultiWrite(
6812 IN PRTMP_ADAPTER pAd,
6817 NTSTATUS RTUSBMultiWrite_OneByte(
6818 IN PRTMP_ADAPTER pAd,
6822 NTSTATUS RTUSBReadBBPRegister(
6823 IN PRTMP_ADAPTER pAd,
6827 NTSTATUS RTUSBWriteBBPRegister(
6828 IN PRTMP_ADAPTER pAd,
6832 NTSTATUS RTUSBWriteRFRegister(
6833 IN PRTMP_ADAPTER pAd,
6836 NTSTATUS RT30xxWriteRFRegister(
6837 IN PRTMP_ADAPTER pAd,
6841 NTSTATUS RT30xxReadRFRegister(
6842 IN PRTMP_ADAPTER pAd,
6846 NTSTATUS RTUSB_VendorRequest(
6847 IN PRTMP_ADAPTER pAd,
6848 IN UINT32 TransferFlags,
6849 IN UCHAR ReservedBits,
6853 IN PVOID TransferBuffer,
6854 IN UINT32 TransferBufferLength);
6856 NTSTATUS RTUSBReadEEPROM(
6857 IN PRTMP_ADAPTER pAd,
6862 NTSTATUS RTUSBWriteEEPROM(
6863 IN PRTMP_ADAPTER pAd,
6868 VOID RTUSBPutToSleep(
6869 IN PRTMP_ADAPTER pAd);
6871 NTSTATUS RTUSBWakeUp(
6872 IN PRTMP_ADAPTER pAd);
6874 VOID RTUSBInitializeCmdQ(
6877 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
6878 IN PRTMP_ADAPTER pAd,
6880 IN BOOLEAN SetInformation,
6881 IN PVOID pInformationBuffer,
6882 IN UINT32 InformationBufferLength);
6884 NDIS_STATUS RTUSBEnqueueInternalCmd(
6885 IN PRTMP_ADAPTER pAd,
6887 IN PVOID pInformationBuffer,
6888 IN UINT32 InformationBufferLength);
6890 VOID RTUSBDequeueCmd(
6892 OUT PCmdQElmt *pcmdqelmt);
6895 IN OUT PVOID Context);
6898 IN OUT PVOID Context);
6900 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6901 IN RTMP_ADAPTER *pAd,
6902 IN RALINK_TIMER_STRUCT *pTimer);
6904 BOOLEAN RT2870_TimerQ_Remove(
6905 IN RTMP_ADAPTER *pAd,
6906 IN RALINK_TIMER_STRUCT *pTimer);
6908 void RT2870_TimerQ_Exit(
6909 IN RTMP_ADAPTER *pAd);
6911 void RT2870_TimerQ_Init(
6912 IN RTMP_ADAPTER *pAd);
6914 VOID RT2870_BssBeaconExit(
6915 IN RTMP_ADAPTER *pAd);
6917 VOID RT2870_BssBeaconStop(
6918 IN RTMP_ADAPTER *pAd);
6920 VOID RT2870_BssBeaconStart(
6921 IN RTMP_ADAPTER * pAd);
6923 VOID RT2870_BssBeaconInit(
6924 IN RTMP_ADAPTER *pAd);
6926 VOID RT2870_WatchDog(
6927 IN RTMP_ADAPTER *pAd);
6929 NTSTATUS RTUSBWriteMACRegister(
6930 IN PRTMP_ADAPTER pAd,
6934 NTSTATUS RTUSBReadMACRegister(
6935 IN PRTMP_ADAPTER pAd,
6937 OUT PUINT32 pValue);
6939 NTSTATUS RTUSBSingleWrite(
6940 IN RTMP_ADAPTER *pAd,
6944 NTSTATUS RTUSBFirmwareRun(
6945 IN PRTMP_ADAPTER pAd);
6947 NTSTATUS RTUSBFirmwareWrite(
6948 IN PRTMP_ADAPTER pAd,
6952 NTSTATUS RTUSBFirmwareOpmode(
6953 IN PRTMP_ADAPTER pAd,
6954 OUT PUINT32 pValue);
6956 NTSTATUS RTUSBVenderReset(
6957 IN PRTMP_ADAPTER pAd);
6959 NDIS_STATUS RTUSBSetHardWareRegister(
6960 IN PRTMP_ADAPTER pAdapter,
6963 NDIS_STATUS RTUSBQueryHardWareRegister(
6964 IN PRTMP_ADAPTER pAdapter,
6968 IN PRTMP_ADAPTER pAd);
6971 NDIS_STATUS CreateThreads(
6972 IN struct net_device *net_dev );
6975 VOID MacTableInitialize(
6976 IN PRTMP_ADAPTER pAd);
6979 IN PRTMP_ADAPTER pAd,
6982 NDIS_STATUS RTMPWPAAddKeyProc(
6983 IN PRTMP_ADAPTER pAd,
6986 VOID AsicRxAntEvalAction(
6987 IN PRTMP_ADAPTER pAd);
6989 #if 0 // Mark because not used in RT28xx.
6990 NTSTATUS RTUSBRxPacket(
6991 IN PRTMP_ADAPTER pAd,
6992 IN BOOLEAN bBulkReceive);
6994 VOID RTUSBDequeueMLMEPacket(
6995 IN PRTMP_ADAPTER pAd);
6997 VOID RTUSBCleanUpMLMEWaitQueue(
6998 IN PRTMP_ADAPTER pAd);
7002 IN PRTMP_ADAPTER pAd,
7003 IN PUCHAR pHeader802_3,
7007 OUT PNDIS_PACKET *ppPacket);
7009 UINT deaggregate_AMSDU_announce(
7010 IN PRTMP_ADAPTER pAd,
7011 PNDIS_PACKET pPacket,
7015 NDIS_STATUS RTMPCheckRxError(
7016 IN PRTMP_ADAPTER pAd,
7017 IN PHEADER_802_11 pHeader,
7018 IN PRXWI_STRUC pRxWI,
7019 IN PRT28XX_RXD_STRUC pRxINFO);
7022 VOID RTUSBMlmeHardTransmit(
7023 IN PRTMP_ADAPTER pAd,
7024 IN PMGMT_STRUC pMgmt);
7030 VOID RTUSBResumeMsduTransmission(
7031 IN PRTMP_ADAPTER pAd);
7033 VOID RTUSBSuspendMsduTransmission(
7034 IN PRTMP_ADAPTER pAd);
7038 // Function Prototype in rtusb_data.c
7040 NDIS_STATUS RTUSBFreeDescriptorRequest(
7041 IN PRTMP_ADAPTER pAd,
7042 IN UCHAR BulkOutPipeId,
7043 IN UINT32 NumberRequired);
7046 BOOLEAN RTUSBNeedQueueBackForAgg(
7047 IN RTMP_ADAPTER *pAd,
7048 IN UCHAR BulkOutPipeId);
7051 VOID RTMPWriteTxInfo(
7052 IN PRTMP_ADAPTER pAd,
7053 IN PTXINFO_STRUC pTxInfo,
7054 IN USHORT USBDMApktLen,
7061 // Function Prototype in cmm_data_2870.c
7063 USHORT RtmpUSB_WriteSubTxResource(
7064 IN PRTMP_ADAPTER pAd,
7067 OUT USHORT *FreeNumber);
7069 USHORT RtmpUSB_WriteSingleTxResource(
7070 IN PRTMP_ADAPTER pAd,
7073 OUT USHORT *FreeNumber);
7075 USHORT RtmpUSB_WriteFragTxResource(
7076 IN PRTMP_ADAPTER pAd,
7079 OUT USHORT *FreeNumber);
7081 USHORT RtmpUSB_WriteMultiTxResource(
7082 IN PRTMP_ADAPTER pAd,
7085 OUT USHORT *FreeNumber);
7087 VOID RtmpUSB_FinalWriteTxResource(
7088 IN PRTMP_ADAPTER pAd,
7090 IN USHORT totalMPDUSize,
7093 VOID RtmpUSBDataLastTxIdx(
7094 IN PRTMP_ADAPTER pAd,
7098 VOID RtmpUSBDataKickOut(
7099 IN PRTMP_ADAPTER pAd,
7104 int RtmpUSBMgmtKickOut(
7105 IN RTMP_ADAPTER *pAd,
7107 IN PNDIS_PACKET pPacket,
7108 IN PUCHAR pSrcBufVA,
7111 VOID RtmpUSBNullFrameKickOut(
7112 IN RTMP_ADAPTER *pAd,
7114 IN UCHAR *pNullFrame,
7115 IN UINT32 frameLen);
7117 VOID RT28xxUsbStaAsicForceWakeup(
7118 IN PRTMP_ADAPTER pAd,
7119 IN BOOLEAN bFromTx);
7121 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7122 IN PRTMP_ADAPTER pAd,
7123 IN USHORT TbttNumToNextWakeUp);
7125 VOID RT28xxUsbMlmeRadioOn(
7126 IN PRTMP_ADAPTER pAd);
7128 VOID RT28xxUsbMlmeRadioOFF(
7129 IN PRTMP_ADAPTER pAd);
7132 ////////////////////////////////////////
7135 IN RTMP_ADAPTER *pAd);
7137 UINT32 QBSS_LoadElementAppend(
7138 IN RTMP_ADAPTER *pAd,
7141 VOID QBSS_LoadUpdate(
7142 IN RTMP_ADAPTER *pAd);
7144 ///////////////////////////////////////
7145 INT RTMPShowCfgValue(
7146 IN PRTMP_ADAPTER pAd,
7150 PCHAR RTMPGetRalinkAuthModeStr(
7151 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7153 PCHAR RTMPGetRalinkEncryModeStr(
7154 IN USHORT encryMode);
7155 //////////////////////////////////////
7157 #ifdef CONFIG_STA_SUPPORT
7158 VOID AsicStaBbpTuning(
7159 IN PRTMP_ADAPTER pAd);
7161 BOOLEAN StaAddMacTableEntry(
7162 IN PRTMP_ADAPTER pAd,
7163 IN PMAC_TABLE_ENTRY pEntry,
7164 IN UCHAR MaxSupportedRateIn500Kbps,
7165 IN HT_CAPABILITY_IE *pHtCapability,
7166 IN UCHAR HtCapabilityLen,
7167 IN USHORT CapabilityInfo);
7168 #endif // CONFIG_STA_SUPPORT //
7170 void RTMP_IndicateMediaState(
7171 IN PRTMP_ADAPTER pAd);
7173 VOID ReSyncBeaconTime(
7174 IN PRTMP_ADAPTER pAd);
7176 VOID RTMPSetAGCInitValue(
7177 IN PRTMP_ADAPTER pAd,
7178 IN UCHAR BandWidth);
7180 int rt28xx_close(IN PNET_DEV dev);
7181 int rt28xx_open(IN PNET_DEV dev);
7183 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7185 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7186 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7188 if (VIRTUAL_IF_NUM(pAd) == 0)
7190 if (rt28xx_open(pAd->net_dev) != 0)
7196 VIRTUAL_IF_INC(pAd);
7200 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7202 VIRTUAL_IF_DEC(pAd);
7203 if (VIRTUAL_IF_NUM(pAd) == 0)
7204 rt28xx_close(pAd->net_dev);
7209 #endif // __RTMP_H__