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)
288 typedef struct _ATE_INFO {
294 TXWI_STRUC TxWI; // TXWI
296 UCHAR Addr1[MAC_ADDR_LEN];
297 UCHAR Addr2[MAC_ADDR_LEN];
298 UCHAR Addr3[MAC_ADDR_LEN];
302 UINT32 TxDoneCount; // Tx DMA Done
305 BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
306 BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
310 CHAR LastSNR0; // last received SNR
311 CHAR LastSNR1; // last received SNR for 2nd antenna
312 CHAR LastRssi0; // last received RSSI
313 CHAR LastRssi1; // last received RSSI for 2nd antenna
314 CHAR LastRssi2; // last received RSSI for 3rd antenna
315 CHAR AvgRssi0; // last 8 frames' average RSSI
316 CHAR AvgRssi1; // last 8 frames' average RSSI
317 CHAR AvgRssi2; // last 8 frames' average RSSI
318 SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
319 SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
320 SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
322 UINT32 NumOfAvgRssiSample;
324 #ifdef RALINK_28xx_QA
327 /* not used in RT2860 */
328 TXINFO_STRUC TxInfo; // TxInfo
330 USHORT HLen; // Header Length
331 USHORT PLen; // Pattern Length
332 UCHAR Header[32]; // Header buffer
333 UCHAR Pattern[32]; // Pattern buffer
334 USHORT DLen; // Data Length
355 //UINT32 Repeat; // Tx Cpu count
356 UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
357 #endif // RALINK_28xx_QA //
358 } ATE_INFO, *PATE_INFO;
360 #ifdef RALINK_28xx_QA
361 struct ate_racfghdr {
369 } __attribute__((packed));
370 #endif // RALINK_28xx_QA //
371 #endif // RALINK_ATE //
373 #ifdef DOT11_N_SUPPORT
374 struct reordering_mpdu
376 struct reordering_mpdu *next;
377 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
378 int Sequence; /* sequence number of MPDU */
382 struct reordering_list
384 struct reordering_mpdu *next;
388 struct reordering_mpdu_pool
392 struct reordering_list freelist;
394 #endif // DOT11_N_SUPPORT //
396 typedef struct _RSSI_SAMPLE {
397 CHAR LastRssi0; // last received RSSI
398 CHAR LastRssi1; // last received RSSI
399 CHAR LastRssi2; // last received RSSI
409 // Queue structure and macros
411 typedef struct _QUEUE_ENTRY {
412 struct _QUEUE_ENTRY *Next;
413 } QUEUE_ENTRY, *PQUEUE_ENTRY;
416 typedef struct _QUEUE_HEADER {
420 } QUEUE_HEADER, *PQUEUE_HEADER;
422 #define InitializeQueueHeader(QueueHeader) \
424 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
425 (QueueHeader)->Number = 0; \
428 #define RemoveHeadQueue(QueueHeader) \
429 (QueueHeader)->Head; \
431 PQUEUE_ENTRY pNext; \
432 if ((QueueHeader)->Head != NULL) \
434 pNext = (QueueHeader)->Head->Next; \
435 (QueueHeader)->Head = pNext; \
437 (QueueHeader)->Tail = NULL; \
438 (QueueHeader)->Number--; \
442 #define InsertHeadQueue(QueueHeader, QueueEntry) \
444 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
445 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
446 if ((QueueHeader)->Tail == NULL) \
447 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
448 (QueueHeader)->Number++; \
451 #define InsertTailQueue(QueueHeader, QueueEntry) \
453 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
454 if ((QueueHeader)->Tail) \
455 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
457 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
458 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
459 (QueueHeader)->Number++; \
463 // Macros for flag and ref count operations
465 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
466 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
467 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
468 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
469 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
471 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
472 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
473 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
475 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
476 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
477 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
479 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
480 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
481 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
483 #ifdef CONFIG_STA_SUPPORT
484 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
485 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
486 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
487 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
489 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
490 #endif // CONFIG_STA_SUPPORT //
492 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
493 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
496 #define INC_RING_INDEX(_idx, _RingSize) \
498 (_idx) = (_idx+1) % (_RingSize); \
501 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
503 #define RING_PACKET_INIT(_TxRing, _idx) \
505 _TxRing->Cell[_idx].pNdisPacket = NULL; \
506 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
509 #define TXDT_INIT(_TxD) \
511 NdisZeroMemory(_TxD, TXD_SIZE); \
515 //Set last data segment
516 #define RING_SET_LASTDS(_TxD, _IsSD0) \
518 if (_IsSD0) {_TxD->LastSec0 = 1;} \
519 else {_TxD->LastSec1 = 1;} \
522 // Increase TxTsc value for next transmission
524 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
525 // Should send a special event microsoft defined to request re-key
526 #define INC_TX_TSC(_tsc) \
529 while (++_tsc[i] == 0x0) \
537 #ifdef DOT11_N_SUPPORT
538 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
539 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
541 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
542 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
543 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
544 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
545 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
546 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
547 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
548 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
549 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
550 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
551 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
552 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
555 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
557 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
558 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
559 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
561 #endif // DOT11_N_SUPPORT //
564 // BBP & RF are using indirect access. Before write any value into it.
565 // We have to make sure there is no outstanding command pending via checking busy bit.
567 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
571 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
572 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
573 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
575 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
576 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
579 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
582 case 1: khz = 2412000; break; \
583 case 2: khz = 2417000; break; \
584 case 3: khz = 2422000; break; \
585 case 4: khz = 2427000; break; \
586 case 5: khz = 2432000; break; \
587 case 6: khz = 2437000; break; \
588 case 7: khz = 2442000; break; \
589 case 8: khz = 2447000; break; \
590 case 9: khz = 2452000; break; \
591 case 10: khz = 2457000; break; \
592 case 11: khz = 2462000; break; \
593 case 12: khz = 2467000; break; \
594 case 13: khz = 2472000; break; \
595 case 14: khz = 2484000; break; \
596 case 36: /* UNII */ khz = 5180000; break; \
597 case 40: /* UNII */ khz = 5200000; break; \
598 case 44: /* UNII */ khz = 5220000; break; \
599 case 48: /* UNII */ khz = 5240000; break; \
600 case 52: /* UNII */ khz = 5260000; break; \
601 case 56: /* UNII */ khz = 5280000; break; \
602 case 60: /* UNII */ khz = 5300000; break; \
603 case 64: /* UNII */ khz = 5320000; break; \
604 case 149: /* UNII */ khz = 5745000; break; \
605 case 153: /* UNII */ khz = 5765000; break; \
606 case 157: /* UNII */ khz = 5785000; break; \
607 case 161: /* UNII */ khz = 5805000; break; \
608 case 165: /* UNII */ khz = 5825000; break; \
609 case 100: /* HiperLAN2 */ khz = 5500000; break; \
610 case 104: /* HiperLAN2 */ khz = 5520000; break; \
611 case 108: /* HiperLAN2 */ khz = 5540000; break; \
612 case 112: /* HiperLAN2 */ khz = 5560000; break; \
613 case 116: /* HiperLAN2 */ khz = 5580000; break; \
614 case 120: /* HiperLAN2 */ khz = 5600000; break; \
615 case 124: /* HiperLAN2 */ khz = 5620000; break; \
616 case 128: /* HiperLAN2 */ khz = 5640000; break; \
617 case 132: /* HiperLAN2 */ khz = 5660000; break; \
618 case 136: /* HiperLAN2 */ khz = 5680000; break; \
619 case 140: /* HiperLAN2 */ khz = 5700000; break; \
620 case 34: /* Japan MMAC */ khz = 5170000; break; \
621 case 38: /* Japan MMAC */ khz = 5190000; break; \
622 case 42: /* Japan MMAC */ khz = 5210000; break; \
623 case 46: /* Japan MMAC */ khz = 5230000; break; \
624 case 184: /* Japan */ khz = 4920000; break; \
625 case 188: /* Japan */ khz = 4940000; break; \
626 case 192: /* Japan */ khz = 4960000; break; \
627 case 196: /* Japan */ khz = 4980000; break; \
628 case 208: /* Japan, means J08 */ khz = 5040000; break; \
629 case 212: /* Japan, means J12 */ khz = 5060000; break; \
630 case 216: /* Japan, means J16 */ khz = 5080000; break; \
631 default: khz = 2412000; break; \
635 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
638 case 2412000: ch = 1; break; \
639 case 2417000: ch = 2; break; \
640 case 2422000: ch = 3; break; \
641 case 2427000: ch = 4; break; \
642 case 2432000: ch = 5; break; \
643 case 2437000: ch = 6; break; \
644 case 2442000: ch = 7; break; \
645 case 2447000: ch = 8; break; \
646 case 2452000: ch = 9; break; \
647 case 2457000: ch = 10; break; \
648 case 2462000: ch = 11; break; \
649 case 2467000: ch = 12; break; \
650 case 2472000: ch = 13; break; \
651 case 2484000: ch = 14; break; \
652 case 5180000: ch = 36; /* UNII */ break; \
653 case 5200000: ch = 40; /* UNII */ break; \
654 case 5220000: ch = 44; /* UNII */ break; \
655 case 5240000: ch = 48; /* UNII */ break; \
656 case 5260000: ch = 52; /* UNII */ break; \
657 case 5280000: ch = 56; /* UNII */ break; \
658 case 5300000: ch = 60; /* UNII */ break; \
659 case 5320000: ch = 64; /* UNII */ break; \
660 case 5745000: ch = 149; /* UNII */ break; \
661 case 5765000: ch = 153; /* UNII */ break; \
662 case 5785000: ch = 157; /* UNII */ break; \
663 case 5805000: ch = 161; /* UNII */ break; \
664 case 5825000: ch = 165; /* UNII */ break; \
665 case 5500000: ch = 100; /* HiperLAN2 */ break; \
666 case 5520000: ch = 104; /* HiperLAN2 */ break; \
667 case 5540000: ch = 108; /* HiperLAN2 */ break; \
668 case 5560000: ch = 112; /* HiperLAN2 */ break; \
669 case 5580000: ch = 116; /* HiperLAN2 */ break; \
670 case 5600000: ch = 120; /* HiperLAN2 */ break; \
671 case 5620000: ch = 124; /* HiperLAN2 */ break; \
672 case 5640000: ch = 128; /* HiperLAN2 */ break; \
673 case 5660000: ch = 132; /* HiperLAN2 */ break; \
674 case 5680000: ch = 136; /* HiperLAN2 */ break; \
675 case 5700000: ch = 140; /* HiperLAN2 */ break; \
676 case 5170000: ch = 34; /* Japan MMAC */ break; \
677 case 5190000: ch = 38; /* Japan MMAC */ break; \
678 case 5210000: ch = 42; /* Japan MMAC */ break; \
679 case 5230000: ch = 46; /* Japan MMAC */ break; \
680 case 4920000: ch = 184; /* Japan */ break; \
681 case 4940000: ch = 188; /* Japan */ break; \
682 case 4960000: ch = 192; /* Japan */ break; \
683 case 4980000: ch = 196; /* Japan */ break; \
684 case 5040000: ch = 208; /* Japan, means J08 */ break; \
685 case 5060000: ch = 212; /* Japan, means J12 */ break; \
686 case 5080000: ch = 216; /* Japan, means J16 */ break; \
687 default: ch = 1; break; \
692 // Common fragment list structure - Identical to the scatter gather frag list structure
694 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
695 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
696 #define NIC_MAX_PHYS_BUF_COUNT 8
698 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
702 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
705 typedef struct _RTMP_SCATTER_GATHER_LIST {
706 ULONG NumberOfElements;
708 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
709 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
712 // Some utility macros
715 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
719 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
722 #define GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2))))
724 #define INC_COUNTER64(Val) (Val.QuadPart++)
726 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
727 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
728 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
729 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
731 // Check LEAP & CCKM flags
732 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
733 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
735 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
736 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
738 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
740 _pExtraLlcSnapEncap = SNAP_802_1H; \
741 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
742 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
744 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
749 _pExtraLlcSnapEncap = NULL; \
753 // New Define for new Tx Path.
754 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
756 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
758 _pExtraLlcSnapEncap = SNAP_802_1H; \
759 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
760 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
762 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
767 _pExtraLlcSnapEncap = NULL; \
772 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
774 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
775 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
776 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
779 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
780 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
781 // else remove the LLC/SNAP field from the result Ethernet frame
782 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
784 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
785 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
786 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
790 _pRemovedLLCSNAP = NULL; \
791 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
792 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
794 PUCHAR pProto = _pData + 6; \
796 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
797 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
799 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
800 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
801 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
805 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
806 _pRemovedLLCSNAP = _pData; \
807 _DataSize -= LENGTH_802_1_H; \
808 _pData += LENGTH_802_1_H; \
813 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
814 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
815 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
819 #define SWITCH_AB( _pAA, _pBB) \
827 // Enqueue this frame to MLME engine
828 // We need to enqueue the whole frame because MLME need to pass data type
829 // information from 802.11 header
831 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
833 UINT32 High32TSF=0, Low32TSF=0; \
834 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
838 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
839 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
841 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
842 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
845 // Check if it is Japan W53(ch52,56,60,64) channel.
847 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
849 #ifdef CONFIG_STA_SUPPORT
850 #define STA_PORT_SECURED(_pAd) \
852 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
853 NdisAcquireSpinLock(&_pAd->MacTabLock); \
854 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
855 NdisReleaseSpinLock(&_pAd->MacTabLock); \
857 #endif // CONFIG_STA_SUPPORT //
861 // Register set pair for initialzation register set definition
863 typedef struct _RTMP_REG_PAIR
867 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
869 typedef struct _REG_PAIR
873 } REG_PAIR, *PREG_PAIR;
876 // Register set pair for initialzation register set definition
878 typedef struct _RTMP_RF_REGS
885 } RTMP_RF_REGS, *PRTMP_RF_REGS;
887 typedef struct _FREQUENCY_ITEM {
892 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
895 // Data buffer for DMA operation, the buffer must be contiguous physical memory
896 // Both DMA to / from CPU use the same structure.
898 typedef struct _RTMP_DMABUF
901 PVOID AllocVa; // TxBuf virtual address
902 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
903 } RTMP_DMABUF, *PRTMP_DMABUF;
906 typedef union _HEADER_802_11_SEQ{
919 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
922 // Data buffer for DMA operation, the buffer must be contiguous physical memory
923 // Both DMA to / from CPU use the same structure.
925 typedef struct _RTMP_REORDERBUF
928 PVOID AllocVa; // TxBuf virtual address
929 UCHAR Header802_3[14];
930 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
937 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
940 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
941 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
942 // which won't be released, driver has to wait until upper layer return the packet
943 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
944 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
945 // which driver should ACK upper layer when the tx is physically done or failed.
947 typedef struct _RTMP_DMACB
949 ULONG AllocSize; // Control block size
950 PVOID AllocVa; // Control block virtual address
951 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
952 PNDIS_PACKET pNdisPacket;
953 PNDIS_PACKET pNextNdisPacket;
955 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
956 } RTMP_DMACB, *PRTMP_DMACB;
958 typedef struct _RTMP_TX_BUF
962 ULONG AllocSize; // Control block size
963 PVOID AllocVa; // Control block virtual address
964 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
965 } RTMP_TXBUF, *PRTMP_TXBUF;
967 typedef struct _RTMP_RX_BUF
971 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
972 } RTMP_RXBUF, *PRTMP_RXBUF;
973 typedef struct _RTMP_TX_RING
975 RTMP_DMACB Cell[TX_RING_SIZE];
978 UINT32 TxSwFreeIdx; // software next free tx index
979 } RTMP_TX_RING, *PRTMP_TX_RING;
981 typedef struct _RTMP_RX_RING
983 RTMP_DMACB Cell[RX_RING_SIZE];
986 INT32 RxSwReadIdx; // software next read index
987 } RTMP_RX_RING, *PRTMP_RX_RING;
989 typedef struct _RTMP_MGMT_RING
991 RTMP_DMACB Cell[MGMT_RING_SIZE];
994 UINT32 TxSwFreeIdx; // software next free tx index
995 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
998 // Statistic counter structure
1000 typedef struct _COUNTER_802_3
1003 ULONG GoodTransmits;
1010 ULONG RcvAlignmentErrors;
1012 ULONG MoreCollisions;
1014 } COUNTER_802_3, *PCOUNTER_802_3;
1016 typedef struct _COUNTER_802_11 {
1018 LARGE_INTEGER LastTransmittedFragmentCount;
1019 LARGE_INTEGER TransmittedFragmentCount;
1020 LARGE_INTEGER MulticastTransmittedFrameCount;
1021 LARGE_INTEGER FailedCount;
1022 LARGE_INTEGER RetryCount;
1023 LARGE_INTEGER MultipleRetryCount;
1024 LARGE_INTEGER RTSSuccessCount;
1025 LARGE_INTEGER RTSFailureCount;
1026 LARGE_INTEGER ACKFailureCount;
1027 LARGE_INTEGER FrameDuplicateCount;
1028 LARGE_INTEGER ReceivedFragmentCount;
1029 LARGE_INTEGER MulticastReceivedFrameCount;
1030 LARGE_INTEGER FCSErrorCount;
1031 } COUNTER_802_11, *PCOUNTER_802_11;
1033 typedef struct _COUNTER_RALINK {
1034 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1035 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1036 ULONG BeenDisassociatedCount;
1037 ULONG BadCQIAutoRecoveryCount;
1038 ULONG PoorCQIRoamingCount;
1039 ULONG MgmtRingFullCount;
1040 ULONG RxCountSinceLastNULL;
1042 ULONG RxRingErrCount;
1044 ULONG TxRingErrCount;
1045 LARGE_INTEGER RealFcsErrCount;
1046 ULONG PendingNdisPacketCount;
1048 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1049 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1050 UINT32 OneSecTxDoneCount;
1051 ULONG OneSecRxCount;
1052 UINT32 OneSecTxAggregationCount;
1053 UINT32 OneSecRxAggregationCount;
1055 UINT32 OneSecFrameDuplicateCount;
1058 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1061 UINT32 OneSecTxNoRetryOkCount;
1062 UINT32 OneSecTxRetryOkCount;
1063 UINT32 OneSecTxFailCount;
1064 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1065 UINT32 OneSecRxOkCnt; // RX without error
1066 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1067 UINT32 OneSecRxFcsErrCnt; // CRC error
1068 UINT32 OneSecBeaconSentCnt;
1069 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1070 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1073 ULONG TxNonAggCount;
1074 ULONG TxAgg1MPDUCount;
1075 ULONG TxAgg2MPDUCount;
1076 ULONG TxAgg3MPDUCount;
1077 ULONG TxAgg4MPDUCount;
1078 ULONG TxAgg5MPDUCount;
1079 ULONG TxAgg6MPDUCount;
1080 ULONG TxAgg7MPDUCount;
1081 ULONG TxAgg8MPDUCount;
1082 ULONG TxAgg9MPDUCount;
1083 ULONG TxAgg10MPDUCount;
1084 ULONG TxAgg11MPDUCount;
1085 ULONG TxAgg12MPDUCount;
1086 ULONG TxAgg13MPDUCount;
1087 ULONG TxAgg14MPDUCount;
1088 ULONG TxAgg15MPDUCount;
1089 ULONG TxAgg16MPDUCount;
1091 LARGE_INTEGER TransmittedOctetsInAMSDU;
1092 LARGE_INTEGER TransmittedAMSDUCount;
1093 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1094 LARGE_INTEGER ReceivedAMSDUCount;
1095 LARGE_INTEGER TransmittedAMPDUCount;
1096 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1097 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1098 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1099 } COUNTER_RALINK, *PCOUNTER_RALINK;
1101 typedef struct _PID_COUNTER {
1102 ULONG TxAckRequiredCount; // CRC error
1104 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1105 ULONG LastSuccessRate;
1106 } PID_COUNTER, *PPID_COUNTER;
1108 typedef struct _COUNTER_DRS {
1109 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1110 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1111 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1112 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1113 ULONG CurrTxRateStableTime; // # of second in current TX rate
1114 BOOLEAN fNoisyEnvironment;
1115 BOOLEAN fLastSecAccordingRSSI;
1116 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1117 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1118 ULONG LastTxOkCount;
1119 } COUNTER_DRS, *PCOUNTER_DRS;
1122 // Arcfour Structure Added by PaulWu
1124 typedef struct _ARCFOUR
1129 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1131 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1132 typedef struct _RECEIVE_SETTING {
1133 #ifdef RT_BIG_ENDIAN
1137 USHORT STBC:2; //SPACE
1139 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1140 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1142 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1143 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1145 USHORT STBC:2; //SPACE
1150 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1152 // Shared key data structure
1153 typedef struct _WEP_KEY {
1154 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1155 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1156 } WEP_KEY, *PWEP_KEY;
1158 typedef struct _CIPHER_KEY {
1159 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1160 UCHAR RxMic[8]; // make alignment
1162 UCHAR TxTsc[6]; // 48bit TSC value
1163 UCHAR RxTsc[6]; // 48bit TSC value
1164 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1166 #ifdef CONFIG_STA_SUPPORT
1168 #endif // CONFIG_STA_SUPPORT //
1169 // Key length for each key, 0: entry is invalid
1170 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1171 } CIPHER_KEY, *PCIPHER_KEY;
1173 typedef struct _BBP_TUNING_STRUCT {
1175 UCHAR FalseCcaCountUpperBound; // 100 per sec
1176 UCHAR FalseCcaCountLowerBound; // 10 per sec
1177 UCHAR R17LowerBound; // specified in E2PROM
1178 UCHAR R17UpperBound; // 0x68 according to David Tung
1179 UCHAR CurrentR17Value;
1180 } BBP_TUNING, *PBBP_TUNING;
1182 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1183 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1184 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1185 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1186 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1187 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1188 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1189 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1190 SHORT Pair1LastAvgRssi; //
1191 SHORT Pair2LastAvgRssi; //
1192 ULONG RcvPktNumWhenEvaluate;
1193 BOOLEAN FirstPktArrivedWhenEvaluate;
1194 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1195 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1197 typedef struct _LEAP_AUTH_INFO {
1198 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1199 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1201 UCHAR UserName[256]; //LEAP, User name
1203 UCHAR Password[256]; //LEAP, User Password
1205 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1208 UCHAR Addr[MAC_ADDR_LEN];
1209 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1210 //00 02-Authentication timeout
1211 //00 03-Challenge from AP failed
1212 //00 04-Challenge to AP failed
1214 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1218 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1219 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1225 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1228 // Receive Tuple Cache Format
1230 typedef struct _TUPLE_CACHE {
1232 UCHAR MacAddress[MAC_ADDR_LEN];
1235 } TUPLE_CACHE, *PTUPLE_CACHE;
1238 // Fragment Frame structure
1240 typedef struct _FRAGMENT_FRAME {
1241 PNDIS_PACKET pFragPacket;
1245 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1246 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1250 // Packet information for NdisQueryPacket
1252 typedef struct _PACKET_INFO {
1253 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1254 UINT BufferCount ; // Number of Buffer descriptor chained
1255 UINT TotalPacketLength ; // Self explained
1256 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1257 } PACKET_INFO, *PPACKET_INFO;
1260 // Tkip Key structure which RC4 key & MIC calculation
1262 typedef struct _TKIP_KEY_INFO {
1263 UINT nBytesInM; // # bytes in M for MICKEY
1266 ULONG K0; // for MICKEY Low
1267 ULONG K1; // for MICKEY Hig
1268 ULONG L; // Current state for MICKEY
1269 ULONG R; // Current state for MICKEY
1270 ULONG M; // Message accumulator for MICKEY
1273 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1276 // Private / Misc data, counters for driver internal use
1278 typedef struct __PRIVATE_STRUC {
1279 UINT SystemResetCnt; // System reset counter
1280 UINT TxRingFullCnt; // Tx ring full occurrance number
1281 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1282 // Variables for WEP encryption / decryption in rtmp_wep.c
1284 ARCFOURCONTEXT WEPCONTEXT;
1288 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1290 // structure to tune BBP R66 (BBP TUNING)
1291 typedef struct _BBP_R66_TUNING {
1293 USHORT FalseCcaLowerThreshold; // default 100
1294 USHORT FalseCcaUpperThreshold; // default 512
1296 UCHAR R66CurrentValue;
1297 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1298 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1300 // structure to store channel TX power
1301 typedef struct _CHANNEL_TX_POWER {
1302 USHORT RemainingTimeForUse; //unit: sec
1304 #ifdef DOT11N_DRAFT3
1305 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1306 #endif // DOT11N_DRAFT3 //
1311 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1313 // structure to store 802.11j channel TX power
1314 typedef struct _CHANNEL_11J_TX_POWER {
1316 UCHAR BW; // BW_10 or BW_20
1319 USHORT RemainingTimeForUse; //unit: sec
1320 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1322 typedef enum _ABGBAND_STATE_ {
1328 typedef struct _MLME_STRUCT {
1329 #ifdef CONFIG_STA_SUPPORT
1330 // STA state machines
1331 STATE_MACHINE CntlMachine;
1332 STATE_MACHINE AssocMachine;
1333 STATE_MACHINE AuthMachine;
1334 STATE_MACHINE AuthRspMachine;
1335 STATE_MACHINE SyncMachine;
1336 STATE_MACHINE WpaPskMachine;
1337 STATE_MACHINE LeapMachine;
1338 STATE_MACHINE AironetMachine;
1339 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1340 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1341 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1342 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1343 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1344 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1345 #endif // CONFIG_STA_SUPPORT //
1346 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1348 STATE_MACHINE ActMachine;
1351 #ifdef QOS_DLS_SUPPORT
1352 STATE_MACHINE DlsMachine;
1353 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1354 #endif // QOS_DLS_SUPPORT //
1359 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1360 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1361 ULONG LastSendNULLpsmTime;
1364 NDIS_SPIN_LOCK TaskLock;
1369 RALINK_TIMER_STRUCT PeriodicTimer;
1370 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1371 RALINK_TIMER_STRUCT LinkDownTimer;
1372 RALINK_TIMER_STRUCT LinkUpTimer;
1373 ULONG PeriodicRound;
1374 ULONG OneSecPeriodicRound;
1377 BOOLEAN bLowThroughput;
1378 BOOLEAN bEnableAutoAntennaCheck;
1379 RALINK_TIMER_STRUCT RxAntEvalTimer;
1382 UCHAR CaliBW40RfR24;
1383 UCHAR CaliBW20RfR24;
1386 } MLME_STRUCT, *PMLME_STRUCT;
1388 // structure for radar detection and channel switch
1389 typedef struct _RADAR_DETECT_STRUCT {
1390 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1391 UCHAR CSCount; //Channel switch counter
1392 UCHAR CSPeriod; //Channel switch period (beacon count)
1393 UCHAR RDCount; //Radar detection counter
1394 UCHAR RDMode; //Radar Detection mode
1395 UCHAR RDDurRegion; //Radar detection duration region
1402 ULONG InServiceMonitorCount; // unit: sec
1403 UINT8 DfsSessionTime;
1406 UINT8 LongPulseRadarTh;
1407 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1409 #ifdef CARRIER_DETECTION_SUPPORT
1410 typedef enum CD_STATE_n
1417 typedef struct CARRIER_DETECTION_s
1420 UINT8 CDSessionTime;
1423 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1424 #endif // CARRIER_DETECTION_SUPPORT //
1426 typedef enum _REC_BLOCKACK_STATUS
1430 Recipient_HandleRes,
1432 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1434 typedef enum _ORI_BLOCKACK_STATUS
1440 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1442 #ifdef DOT11_N_SUPPORT
1443 typedef struct _BA_ORI_ENTRY{
1448 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1450 USHORT TimeOutValue;
1451 ORI_BLOCKACK_STATUS ORI_BA_Status;
1452 RALINK_TIMER_STRUCT ORIBATimer;
1454 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1456 typedef struct _BA_REC_ENTRY {
1459 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1461 //UCHAR Curindidx; // the head in the RX reordering buffer
1463 // USHORT LastIndSeqAtTimer;
1464 USHORT TimeOutValue;
1465 RALINK_TIMER_STRUCT RECBATimer;
1466 ULONG LastIndSeqAtTimer;
1469 REC_BLOCKACK_STATUS REC_BA_Status;
1470 // UCHAR RxBufIdxUsed;
1471 // corresponding virtual address for RX reordering packet storage.
1472 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1473 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1474 // struct _BA_REC_ENTRY *pNext;
1476 struct reordering_list list;
1477 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1481 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1482 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1483 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1484 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1485 } BA_TABLE, *PBA_TABLE;
1487 //For QureyBATableOID use;
1488 typedef struct PACKED _OID_BA_REC_ENTRY{
1489 UCHAR MACAddr[MAC_ADDR_LEN];
1490 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1493 REC_BLOCKACK_STATUS REC_BA_Status[8];
1494 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1496 //For QureyBATableOID use;
1497 typedef struct PACKED _OID_BA_ORI_ENTRY{
1498 UCHAR MACAddr[MAC_ADDR_LEN];
1499 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
1502 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1503 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1505 typedef struct _QUERYBA_TABLE{
1506 OID_BA_ORI_ENTRY BAOriEntry[32];
1507 OID_BA_REC_ENTRY BARecEntry[32];
1508 UCHAR OriNum;// Number of below BAOriEntry
1509 UCHAR RecNum;// Number of below BARecEntry
1510 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1512 typedef union _BACAP_STRUC {
1513 #ifdef RT_BIG_ENDIAN
1516 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1517 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1518 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1519 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1520 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1521 UINT32 MpduDensity:3;
1522 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1523 UINT32 AutoBA:1; // automatically BA
1524 UINT32 TxBAWinLimit:8;
1525 UINT32 RxBAWinLimit:8;
1529 UINT32 RxBAWinLimit:8;
1530 UINT32 TxBAWinLimit:8;
1531 UINT32 AutoBA:1; // automatically BA
1532 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1533 UINT32 MpduDensity:3;
1534 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1535 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1536 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1537 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1538 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1543 } BACAP_STRUC, *PBACAP_STRUC;
1544 #endif // DOT11_N_SUPPORT //
1546 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1547 typedef struct _IOT_STRUC {
1549 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1550 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1551 ULONG OneSecInWindowCount;
1552 ULONG OneSecFrameDuplicateCount;
1553 ULONG OneSecOutWindowCount;
1558 BOOLEAN bRTSLongProtOn;
1559 #ifdef CONFIG_STA_SUPPORT
1560 BOOLEAN bLastAtheros;
1561 BOOLEAN bCurrentAtheros;
1562 BOOLEAN bNowAtherosBurstOn;
1563 BOOLEAN bNextDisableRxBA;
1565 #endif // CONFIG_STA_SUPPORT //
1566 } IOT_STRUC, *PIOT_STRUC;
1568 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1569 typedef union _REG_TRANSMIT_SETTING {
1570 #ifdef RT_BIG_ENDIAN
1576 UINT32 STBC:1; //SPACE
1578 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1579 UINT32 TxBF:1; // 3*3
1581 //UINT32 MCS:7; // MCS
1587 //UINT32 MCS:7; // MCS
1590 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1592 UINT32 STBC:1; //SPACE
1600 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1602 typedef union _DESIRED_TRANSMIT_SETTING {
1603 #ifdef RT_BIG_ENDIAN
1606 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1608 USHORT MCS:7; // MCS
1612 USHORT MCS:7; // MCS
1614 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1619 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1622 BOOLEAN IsRecipient;
1623 UCHAR MACAddr[MAC_ADDR_LEN];
1627 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1628 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1631 // Multiple SSID structure
1633 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1634 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1636 /* clear bcmc TIM bit */
1637 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1638 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1640 /* set bcmc TIM bit */
1641 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1642 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1644 /* clear a station PS TIM bit */
1645 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1646 { UCHAR tim_offset = wcid >> 3; \
1647 UCHAR bit_offset = wcid & 0x7; \
1648 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1650 /* set a station PS TIM bit */
1651 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1652 { UCHAR tim_offset = wcid >> 3; \
1653 UCHAR bit_offset = wcid & 0x7; \
1654 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1657 #define BEACON_BITMAP_MASK 0xff
1658 typedef struct _BEACON_SYNC_STRUCT_
1660 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1661 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1662 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1663 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1664 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1665 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1666 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1667 }BEACON_SYNC_STRUCT;
1670 typedef struct _MULTISSID_STRUCT {
1671 UCHAR Bssid[MAC_ADDR_LEN];
1673 CHAR Ssid[MAX_LEN_OF_SSID];
1674 USHORT CapabilityInfo;
1678 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1679 NDIS_802_11_WEP_STATUS WepStatus;
1680 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1681 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1685 ULONG ReceivedByteCount;
1686 ULONG TransmittedByteCount;
1690 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1691 RT_HT_PHY_INFO DesiredHtPhyInfo;
1692 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1693 BOOLEAN bAutoTxRateSwitch;
1695 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1698 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1699 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1700 UCHAR DesiredRatesIndex;
1701 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1703 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1704 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1705 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1715 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1716 UCHAR BANClass3Data;
1717 ULONG IsolateInterStaTraffic;
1720 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1723 UCHAR TimIELocationInBeacon;
1724 UCHAR CapabilityInfoLocationInBeacon;
1725 // outgoing BEACON frame buffer and corresponding TXWI
1726 // PTXWI_STRUC BeaconTxWI; //
1727 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1730 UINT16 StationKeepAliveTime; // unit: second
1733 USHORT VLAN_Priority;
1735 RT_802_11_ACL AccessControlList;
1738 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1739 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1741 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1743 // For 802.1x daemon setting per BSS
1744 UCHAR radius_srv_num;
1745 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1748 unsigned int mylinkid;
1752 UINT32 RcvdConflictSsidCount;
1753 UINT32 RcvdSpoofedAssocRespCount;
1754 UINT32 RcvdSpoofedReassocRespCount;
1755 UINT32 RcvdSpoofedProbeRespCount;
1756 UINT32 RcvdSpoofedBeaconCount;
1757 UINT32 RcvdSpoofedDisassocCount;
1758 UINT32 RcvdSpoofedAuthCount;
1759 UINT32 RcvdSpoofedDeauthCount;
1760 UINT32 RcvdSpoofedUnknownMgmtCount;
1761 UINT32 RcvdReplayAttackCount;
1763 CHAR RssiOfRcvdConflictSsid;
1764 CHAR RssiOfRcvdSpoofedAssocResp;
1765 CHAR RssiOfRcvdSpoofedReassocResp;
1766 CHAR RssiOfRcvdSpoofedProbeResp;
1767 CHAR RssiOfRcvdSpoofedBeacon;
1768 CHAR RssiOfRcvdSpoofedDisassoc;
1769 CHAR RssiOfRcvdSpoofedAuth;
1770 CHAR RssiOfRcvdSpoofedDeauth;
1771 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1772 CHAR RssiOfRcvdReplayAttack;
1776 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1780 #ifdef DOT11N_DRAFT3
1781 typedef enum _BSS2040COEXIST_FLAG{
1782 BSS_2040_COEXIST_DISABLE = 0,
1783 BSS_2040_COEXIST_TIMER_FIRED = 1,
1784 BSS_2040_COEXIST_INFO_SYNC = 2,
1785 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1786 }BSS2040COEXIST_FLAG;
1787 #endif // DOT11N_DRAFT3 //
1789 // configuration common to OPMODE_AP as well as OPMODE_STA
1790 typedef struct _COMMON_CONFIG {
1792 BOOLEAN bCountryFlag;
1793 UCHAR CountryCode[3];
1795 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1796 UCHAR CountryRegionForABand; // Enum of country region for A band
1797 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1798 USHORT Dsifs; // in units of usec
1799 ULONG PacketFilter; // Packet filter for receiving
1801 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1802 UCHAR SsidLen; // the actual ssid length in used
1803 UCHAR LastSsidLen; // the actual ssid length in used
1804 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1805 UCHAR LastBssid[MAC_ADDR_LEN];
1807 UCHAR Bssid[MAC_ADDR_LEN];
1808 USHORT BeaconPeriod;
1810 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1812 #if 0 // move to STA_ADMIN_CONFIG
1815 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1816 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1817 NDIS_802_11_WEP_STATUS WepStatus;
1818 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1820 // Add to support different cipher suite for WPA2/WPA mode
1821 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1822 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1823 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1824 USHORT RsnCapability;
1826 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1829 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1831 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1833 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1834 UCHAR MaxDesiredRate;
1835 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1837 ULONG BasicRateBitmap; // backup basic ratebitmap
1839 BOOLEAN bAPSDCapable;
1840 BOOLEAN bInServicePeriod;
1845 BOOLEAN bNeedSendTriggerFrame;
1846 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1847 ULONG TriggerTimerCount;
1849 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1850 // move to MULTISSID_STRUCT for MBSS
1851 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1852 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1853 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1854 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1855 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1856 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1857 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1858 //BOOLEAN bAutoTxRateSwitch;
1859 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1860 UCHAR RtsRate; // RATE_xxx
1861 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1862 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1863 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1865 USHORT RtsThreshold; // in unit of BYTE
1866 USHORT FragmentThreshold; // in unit of BYTE
1868 UCHAR TxPower; // in unit of mW
1869 ULONG TxPowerPercentage; // 0~100 %
1870 ULONG TxPowerDefault; // keep for TxPowerPercentage
1872 #ifdef DOT11_N_SUPPORT
1873 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1874 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1875 #endif // DOT11_N_SUPPORT //
1876 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1877 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1878 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1879 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1880 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1881 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1882 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1883 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1884 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1885 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1887 #ifdef DOT11_N_SUPPORT
1889 #endif // DOT11_N_SUPPORT //
1890 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1891 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1892 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1893 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1894 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1895 #ifdef CONFIG_STA_SUPPORT
1896 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1897 #endif // CONFIG_STA_SUPPORT //
1898 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1899 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1900 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1901 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1902 ULONG OpStatusFlags;
1904 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1905 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1907 // IEEE802.11H--DFS.
1908 RADAR_DETECT_STRUCT RadarDetect;
1910 #ifdef CARRIER_DETECTION_SUPPORT
1911 CARRIER_DETECTION CarrierDetect;
1912 #endif // CARRIER_DETECTION_SUPPORT //
1914 #ifdef DOT11_N_SUPPORT
1916 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1917 //RT_HT_CAPABILITY SupportedHtPhy;
1918 RT_HT_CAPABILITY DesiredHtPhy;
1919 HT_CAPABILITY_IE HtCapability;
1920 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1921 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1922 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1923 NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present
1925 #ifdef DOT11N_DRAFT3
1926 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1927 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1929 //This IE is used for 20/40 BSS Coexistence.
1930 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1931 // ====== 11n D3.0 =======================>
1932 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1933 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1934 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1935 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1936 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1937 USHORT Dot11BssWidthChanTranDelayFactor;
1938 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1940 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1941 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1943 NDIS_SPIN_LOCK TriggerEventTabLock;
1944 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1945 BSS_2040_COEXIST_IE BSSCoexist2040;
1946 TRIGGER_EVENT_TAB TriggerEventTab;
1947 UCHAR ChannelListIdx;
1948 // <====== 11n D3.0 =======================
1949 BOOLEAN bOverlapScanning;
1950 #endif // DOT11N_DRAFT3 //
1953 BOOLEAN bMIMOPSEnable;
1955 BOOLEAN bDisableReordering;
1956 BOOLEAN bForty_Mhz_Intolerant;
1957 BOOLEAN bExtChannelSwitchAnnouncement;
1958 BOOLEAN bRcvBSSWidthTriggerEvents;
1959 ULONG LastRcvBSSWidthTriggerEventsTime;
1962 #endif // DOT11_N_SUPPORT //
1964 // Enable wireless event
1965 BOOLEAN bWirelessEvent;
1966 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1968 // Tx & Rx Stream number selection
1972 // transmit phy mode, trasmit rate for Multicast.
1973 #ifdef MCAST_RATE_SPECIFIC
1974 UCHAR McastTransmitMcs;
1975 UCHAR McastTransmitPhyMode;
1976 #endif // MCAST_RATE_SPECIFIC //
1978 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1981 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1982 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1983 RT_HT_CAPABILITY SupportedHtPhy;
1984 ULONG MaxPktOneTxBulk;
1988 BEACON_SYNC_STRUCT *pBeaconSync;
1989 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1990 UINT32 BeaconAdjust;
1991 UINT32 BeaconFactor;
1992 UINT32 BeaconRemain;
1996 NDIS_SPIN_LOCK MeasureReqTabLock;
1997 PMEASURE_REQ_TAB pMeasureReqTab;
1999 NDIS_SPIN_LOCK TpcReqTabLock;
2000 PTPC_REQ_TAB pTpcReqTab;
2002 // transmit phy mode, trasmit rate for Multicast.
2003 #ifdef MCAST_RATE_SPECIFIC
2004 HTTRANSMIT_SETTING MCastPhyMode;
2005 #endif // MCAST_RATE_SPECIFIC //
2008 UINT16 DefineMaxTxPwr;
2009 #endif // SINGLE_SKU //
2012 } COMMON_CONFIG, *PCOMMON_CONFIG;
2015 #ifdef CONFIG_STA_SUPPORT
2016 /* Modified by Wu Xi-Kun 4/21/2006 */
2017 // STA configuration and status
2018 typedef struct _STA_ADMIN_CONFIG {
2020 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2021 // the user intended configuration, but not necessary fully equal to the final
2022 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2023 // AP or IBSS holder).
2024 // Once initialized, user configuration can only be changed via OID_xxx
2025 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
2026 USHORT AtimWin; // used when starting a new IBSS
2029 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2030 // the user intended configuration, and should be always applied to the final
2031 // settings in ACTIVE BSS without compromising with the BSS holder.
2032 // Once initialized, user configuration can only be changed via OID_xxx
2034 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2035 USHORT DefaultListenCount; // default listen count;
2036 ULONG WindowsPowerMode; // Power mode for AC power
2037 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2038 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2039 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2040 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2042 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2043 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2044 USHORT DisassocReason;
2045 UCHAR DisassocSta[MAC_ADDR_LEN];
2046 USHORT DeauthReason;
2047 UCHAR DeauthSta[MAC_ADDR_LEN];
2048 USHORT AuthFailReason;
2049 UCHAR AuthFailSta[MAC_ADDR_LEN];
2051 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2052 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2053 NDIS_802_11_WEP_STATUS WepStatus;
2054 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2056 // Add to support different cipher suite for WPA2/WPA mode
2057 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2058 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2059 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2060 USHORT RsnCapability;
2062 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2064 UCHAR PMK[32]; // WPA PSK mode PMK
2065 UCHAR PTK[64]; // WPA PSK mode PTK
2066 UCHAR GTK[32]; // GTK from authenticator
2067 BSSID_INFO SavedPMK[PMKID_NO];
2068 UINT SavedPMKNum; // Saved PMKID number
2073 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2076 // For WPA countermeasures
2077 ULONG LastMicErrorTime; // record last MIC error time
2078 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2079 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2080 // For WPA-PSK supplicant state
2081 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2082 UCHAR ReplayCounter[8];
2083 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2084 UCHAR SNonce[32]; // SNonce for WPA-PSK
2086 UCHAR LastSNR0; // last received BEACON's SNR
2087 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2088 RSSI_SAMPLE RssiSample;
2089 ULONG NumOfAvgRssiSample;
2091 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2092 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2093 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2094 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2096 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2097 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2098 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2099 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2100 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2101 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2102 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2105 // New for WPA, windows want us to to keep association information and
2106 // Fixed IEs from last association response
2107 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2108 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2109 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2110 USHORT ResVarIELen; // Length of next VIE include EID & Length
2111 UCHAR ResVarIEs[MAX_VIE_LEN];
2114 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2116 // New variables used for CCX 1.0
2118 BOOLEAN bCkipCmicOn;
2120 UCHAR GIV[3]; //for CCX iv
2125 LEAP_AUTH_INFO LeapAuthInfo;
2127 UCHAR NetworkChallenge[8];
2128 UCHAR NetworkChallengeResponse[24];
2129 UCHAR PeerChallenge[8];
2131 UCHAR PeerChallengeResponse[24];
2132 UCHAR SessionKey[16]; //Network session keys (NSK)
2133 RALINK_TIMER_STRUCT LeapAuthTimer;
2134 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2136 // New control flags for CCX
2137 CCX_CONTROL CCXControl; // Master administration state
2138 BOOLEAN CCXEnable; // Actual CCX state
2139 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2140 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2141 UCHAR CCXReqType; // Current processing CCX request type
2142 BSS_TABLE CCXBssTab; // BSS Table
2143 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2144 USHORT FrameReportLen; // Current Frame report length
2145 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2146 USHORT RPIDensity[8]; // Array for RPI density collection
2147 // Start address of each BSS table within FrameReportBuf
2148 // It's important to update the RxPower of the corresponding Bss
2149 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2150 USHORT BeaconToken; // Token for beacon report
2151 ULONG LastBssIndex; // Most current reported Bss index
2152 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2153 UCHAR RMReqCnt; // Number of measurement request saved.
2154 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2155 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2156 // It must be the same channel with maximum duration
2157 USHORT ParallelDuration; // Maximum duration for parallel measurement
2158 UCHAR ParallelChannel; // Only one channel with parallel measurement
2159 USHORT IAPPToken; // IAPP dialog token
2160 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2161 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2162 // Hack for channel load and noise histogram parameters
2163 UCHAR NHFactor; // Parameter for Noise histogram
2164 UCHAR CLFactor; // Parameter for channel load
2166 UCHAR KRK[16]; //Key Refresh Key.
2167 UCHAR BTK[32]; //Base Transient Key
2168 BOOLEAN CCKMLinkUpFlag;
2169 ULONG CCKMRN; //(Re)Association request number.
2170 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2171 UCHAR AironetCellPowerLimit; //in dBm
2172 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2173 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2174 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2175 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2176 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2177 USHORT CCXAdjacentAPChannel;
2178 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2180 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2181 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2183 UCHAR DtimCount; // 0.. DtimPeriod-1
2184 UCHAR DtimPeriod; // default = 3
2186 #ifdef QOS_DLS_SUPPORT
2187 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2188 UCHAR DlsReplayCounter[8];
2189 #endif // QOS_DLS_SUPPORT //
2190 ////////////////////////////////////////////////////////////////////////////////////////
2191 // This is only for WHQL test.
2193 ////////////////////////////////////////////////////////////////////////////////////////
2195 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2197 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2198 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2200 #ifdef WPA_SUPPLICANT_SUPPORT
2202 BOOLEAN IEEE8021x_required_keys;
2203 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2204 UCHAR DesireSharedKeyId;
2206 // 0: driver ignores wpa_supplicant
2207 // 1: wpa_supplicant initiates scanning and AP selection
2208 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2209 UCHAR WpaSupplicantUP;
2210 UCHAR WpaSupplicantScanCount;
2211 #endif // WPA_SUPPLICANT_SUPPORT //
2216 BOOLEAN bTGnWifiTest;
2217 BOOLEAN bScanReqIsFromWebUI;
2219 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2220 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2221 RT_HT_PHY_INFO DesiredHtPhyInfo;
2222 BOOLEAN bAutoTxRateSwitch;
2225 #ifdef EXT_BUILD_CHANNEL_LIST
2226 UCHAR IEEE80211dClientMode;
2227 UCHAR StaOriCountryCode[3];
2228 UCHAR StaOriGeography;
2229 #endif // EXT_BUILD_CHANNEL_LIST //
2230 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2232 // This data structure keep the current active BSS/IBSS's configuration that this STA
2233 // had agreed upon joining the network. Which means these parameters are usually decided
2234 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2235 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2236 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2237 // the current active settings.
2238 typedef struct _STA_ACTIVE_CONFIG {
2240 USHORT AtimWin; // in kusec; IBSS parameter set element
2241 USHORT CapabilityInfo;
2242 USHORT CfpMaxDuration;
2245 // Copy supported rate from desired AP's beacon. We are trying to match
2246 // AP's supported and extended rate settings.
2247 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2248 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2251 // Copy supported ht from desired AP's beacon. We are trying to match
2252 RT_HT_PHY_INFO SupportedPhyInfo;
2253 RT_HT_CAPABILITY SupportedHtPhy;
2254 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2257 // for USB interface, avoid in interrupt when write key
2258 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2259 NDIS_802_11_MAC_ADDRESS MacAddr;
2260 USHORT MacTabMatchWCID; // ASIC
2261 CIPHER_KEY CipherKey;
2262 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2264 #endif // CONFIG_STA_SUPPORT //
2266 // ----------- start of AP --------------------------
2267 // AUTH-RSP State Machine Aux data structure
2268 typedef struct _AP_MLME_AUX {
2269 UCHAR Addr[MAC_ADDR_LEN];
2271 CHAR Challenge[CIPHER_TEXT_LEN];
2272 } AP_MLME_AUX, *PAP_MLME_AUX;
2274 // structure to define WPA Group Key Rekey Interval
2275 typedef struct PACKED _RT_802_11_WPA_REKEY {
2276 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2277 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2278 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2280 typedef struct _MAC_TABLE_ENTRY {
2281 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2282 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2283 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2284 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2285 BOOLEAN ValidAsMesh;
2286 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2288 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2290 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2292 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2293 UCHAR CMTimerRunning;
2294 UCHAR apidx; // MBSS number
2296 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2297 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2298 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2301 RALINK_TIMER_STRUCT RetryTimer;
2302 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2303 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2304 NDIS_802_11_WEP_STATUS WepStatus;
2305 AP_WPA_STATE WpaState;
2308 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2309 CIPHER_KEY PairwiseKey;
2312 UCHAR PMKID[LEN_PMKID];
2315 UCHAR Addr[MAC_ADDR_LEN];
2318 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2319 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2321 USHORT CapabilityInfo;
2323 ULONG NoDataIdleCount;
2324 UINT16 StationKeepAliveCount; // unit: second
2326 QUEUE_HEADER PsQueue;
2328 UINT32 StaConnectTime; // the live time of this station since associated with AP
2331 #ifdef DOT11_N_SUPPORT
2333 USHORT NoBADataCountDown;
2335 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2336 UINT TxBFCount; // 3*3
2337 #endif // DOT11_N_SUPPORT //
2339 UINT DebugFIFOCount;
2344 //====================================================
2345 //WDS entry needs these
2346 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2347 UINT MatchWDSTabIdx;
2348 UCHAR MaxSupportedRate;
2350 UCHAR CurrTxRateIndex;
2351 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2352 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2353 // USHORT OneSecTxOkCount;
2354 UINT32 OneSecTxNoRetryOkCount;
2355 UINT32 OneSecTxRetryOkCount;
2356 UINT32 OneSecTxFailCount;
2357 UINT32 ContinueTxFailCnt;
2358 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2359 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2360 //====================================================
2364 #ifdef CONFIG_STA_SUPPORT
2365 #ifdef QOS_DLS_SUPPORT
2366 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2367 #endif // QOS_DLS_SUPPORT //
2368 #endif // CONFIG_STA_SUPPORT //
2370 BOOLEAN fNoisyEnvironment;
2371 BOOLEAN fLastSecAccordingRSSI;
2372 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2373 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2374 ULONG LastTxOkCount;
2375 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2377 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2378 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2379 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2380 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2381 ULONG ClientStatusFlags;
2383 // TODO: Shall we move that to DOT11_N_SUPPORT???
2384 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2386 #ifdef DOT11_N_SUPPORT
2387 // HT EWC MIMO-N used parameters
2388 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2389 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2390 USHORT TXAutoBAbitmap;
2391 USHORT BADeclineBitmap;
2392 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2393 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2394 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2396 // 802.11n features.
2398 UCHAR MaxRAmpduFactor;
2400 UCHAR MmpsMode; // MIMO power save more.
2402 HT_CAPABILITY_IE HTCapability;
2404 #ifdef DOT11N_DRAFT3
2405 UCHAR BSS2040CoexistenceMgmtSupport;
2406 #endif // DOT11N_DRAFT3 //
2407 #endif // DOT11_N_SUPPORT //
2409 BOOLEAN bAutoTxRateSwitch;
2412 struct _MAC_TABLE_ENTRY *pNext;
2413 USHORT TxSeq[NUM_OF_TID];
2414 USHORT NonQosDataSeq;
2416 RSSI_SAMPLE RssiSample;
2418 UINT32 TXMCSExpected[16];
2419 UINT32 TXMCSSuccessful[16];
2420 UINT32 TXMCSFailed[16];
2421 UINT32 TXMCSAutoFallBack[16][16];
2423 #ifdef CONFIG_STA_SUPPORT
2424 ULONG LastBeaconRxTime;
2425 #endif // CONFIG_STA_SUPPORT //
2426 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2428 typedef struct _MAC_TABLE {
2430 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2431 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2432 QUEUE_HEADER McastPsQueue;
2434 BOOLEAN fAnyStationInPsm;
2435 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2436 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2437 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2438 #ifdef DOT11_N_SUPPORT
2439 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2440 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2441 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2442 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2443 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2444 #endif // DOT11_N_SUPPORT //
2445 } MAC_TABLE, *PMAC_TABLE;
2447 #ifdef DOT11_N_SUPPORT
2448 #define IS_HT_STA(_pMacEntry) \
2449 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2451 #define IS_HT_RATE(_pMacEntry) \
2452 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2454 #define PEER_IS_HT_RATE(_pMacEntry) \
2455 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2456 #endif // DOT11_N_SUPPORT //
2458 typedef struct _WDS_ENTRY {
2460 UCHAR Addr[MAC_ADDR_LEN];
2461 ULONG NoDataIdleCount;
2462 struct _WDS_ENTRY *pNext;
2463 } WDS_ENTRY, *PWDS_ENTRY;
2465 typedef struct _WDS_TABLE_ENTRY {
2467 UCHAR WdsAddr[MAC_ADDR_LEN];
2468 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2469 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2470 UCHAR MaxSupportedRate;
2472 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2473 USHORT OneSecTxOkCount;
2474 USHORT OneSecTxRetryOkCount;
2475 USHORT OneSecTxFailCount;
2476 ULONG CurrTxRateStableTime; // # of second in current TX rate
2477 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2478 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2480 typedef struct _RT_802_11_WDS_ENTRY {
2484 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2485 UCHAR MacTabMatchWCID; // ASIC
2486 NDIS_802_11_WEP_STATUS WepStatus;
2489 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2490 RT_HT_PHY_INFO DesiredHtPhyInfo;
2491 BOOLEAN bAutoTxRateSwitch;
2492 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2493 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2495 typedef struct _WDS_TABLE {
2498 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2499 } WDS_TABLE, *PWDS_TABLE;
2501 typedef struct _APCLI_STRUCT {
2504 unsigned int mylinkid;
2506 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2507 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2508 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2510 CHAR Ssid[MAX_LEN_OF_SSID];
2513 CHAR CfgSsid[MAX_LEN_OF_SSID];
2514 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2515 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2517 ULONG ApCliRcvBeaconTime;
2519 ULONG CtrlCurrState;
2520 ULONG SyncCurrState;
2521 ULONG AuthCurrState;
2522 ULONG AssocCurrState;
2523 ULONG WpaPskCurrState;
2528 ULONG ClientStatusFlags;
2531 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2532 NDIS_802_11_WEP_STATUS WepStatus;
2534 // Add to support different cipher suite for WPA2/WPA mode
2535 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2536 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2537 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2538 USHORT RsnCapability;
2540 UCHAR PSK[100]; // reserve PSK key material
2542 UCHAR PMK[32]; // WPA PSK mode PMK
2543 //UCHAR PTK[64]; // WPA PSK mode PTK
2544 UCHAR GTK[32]; // GTK from authenticator
2546 //CIPHER_KEY PairwiseKey;
2547 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2550 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2551 //UCHAR PortSecured;
2553 // store RSN_IE built by driver
2554 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2557 // For WPA countermeasures
2558 ULONG LastMicErrorTime; // record last MIC error time
2559 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2560 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2562 // For WPA-PSK supplicant state
2563 //WPA_STATE WpaState; // Default is SS_NOTUSE
2564 //UCHAR ReplayCounter[8];
2565 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2566 UCHAR SNonce[32]; // SNonce for WPA-PSK
2567 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2569 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2570 RT_HT_PHY_INFO DesiredHtPhyInfo;
2571 BOOLEAN bAutoTxRateSwitch;
2572 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2573 } APCLI_STRUCT, *PAPCLI_STRUCT;
2575 // ----------- end of AP ----------------------------
2578 typedef struct _BLOCK_QUEUE_ENTRY
2580 BOOLEAN SwTxQueueBlockFlag;
2581 LIST_HEADER NetIfList;
2582 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2583 #endif // BLOCK_NET_IF //
2588 BOOLEAN bGreenField;
2593 typedef struct _INF_PCI_CONFIG
2595 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2598 typedef struct _INF_USB_CONFIG
2600 UINT BulkInEpAddr; // bulk-in endpoint address
2601 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2605 #ifdef IKANOS_VX_1X0
2606 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2608 struct IKANOS_TX_INFO
2610 struct net_device *netdev;
2611 IkanosWlanTxCbFuncP *fp;
2613 #endif // IKANOS_VX_1X0 //
2616 typedef struct _NINDO_CTRL_BLOCK {
2618 RT_NINTENDO_TABLE DS_TABLE;
2621 spinlock_t NINTENDO_TABLE_Lock;
2623 NDIS_SPIN_LOCK NINTENDO_TABLE_Lock;
2624 #endif // CHIP25XX //
2626 UCHAR NINTENDO_UP_BUFFER[512];
2628 CIPHER_KEY Local_SharedKey;
2629 UCHAR Local_bHideSsid;
2630 UCHAR Local_AuthMode;
2631 UCHAR Local_WepStatus;
2632 USHORT Local_CapabilityInfo;
2634 #endif // NINTENDO_AP //
2638 #define DIAGNOSE_TIME 10 // 10 sec
2639 typedef struct _RtmpDiagStrcut_
2640 { // Diagnosis Related element
2641 unsigned char inited;
2643 unsigned char ArrayStartIdx;
2644 unsigned char ArrayCurIdx;
2646 USHORT TxDataCnt[DIAGNOSE_TIME];
2647 USHORT TxFailCnt[DIAGNOSE_TIME];
2648 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2649 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2650 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2651 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2652 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2654 USHORT TxAggCnt[DIAGNOSE_TIME];
2655 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2656 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2657 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2658 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2659 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2662 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2663 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2664 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2665 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2667 #endif // DBG_DIAGNOSE //
2671 // The miniport adapter structure
2673 typedef struct _RTMP_ADAPTER
2675 PVOID OS_Cookie; // save specific structure relative to OS
2681 NDIS_SPIN_LOCK irq_lock;
2685 /*****************************************************************************************/
2686 /* USB related parameters */
2687 /*****************************************************************************************/
2688 struct usb_config_descriptor *config;
2689 UINT BulkInEpAddr; // bulk-in endpoint address
2690 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2693 USHORT BulkOutMaxPacketSize;
2694 USHORT BulkInMaxPacketSize;
2696 //======Control Flags
2697 LONG PendingIoCount;
2699 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2702 //======Timer Thread
2703 RT2870_TIMER_QUEUE TimerQ;
2704 NDIS_SPIN_LOCK TimerQLock;
2709 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2711 BOOLEAN TimerFunc_kill;
2715 //======Semaphores (event)
2716 struct semaphore mlme_semaphore; /* to sleep thread on */
2717 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2718 struct semaphore RTUSBTimer_semaphore;
2719 #ifdef INF_AMAZON_SE
2720 struct semaphore UsbVendorReq_semaphore;
2721 PVOID UsbVendorReqBuf;
2722 #endif // INF_AMAZON_SE //
2723 struct completion TimerQComplete;
2724 struct completion mlmeComplete;
2725 struct completion CmdQComplete;
2726 wait_queue_head_t *wait;
2728 //======Lock for 2870 ATE
2730 NDIS_SPIN_LOCK GenericLock; // ATE Tx/Rx generic spinlock
2731 #endif // RALINK_ATE //
2736 /*****************************************************************************************/
2737 /* Both PCI/USB related parameters */
2738 /*****************************************************************************************/
2741 /*****************************************************************************************/
2742 /* Tx related parameters */
2743 /*****************************************************************************************/
2744 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2745 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2748 // Data related context and AC specified, 4 AC supported
2749 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2750 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2752 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2753 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2755 // 4 sets of Bulk Out index and pending flag
2756 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2758 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2759 UCHAR bulkResetPipeid;
2760 BOOLEAN MgmtBulkPending;
2761 ULONG bulkResetReq[6];
2764 // resource for software backlog queues
2765 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2766 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2768 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2769 RTMP_MGMT_RING MgmtRing;
2770 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2773 /*****************************************************************************************/
2774 /* Rx related parameters */
2775 /*****************************************************************************************/
2779 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2780 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2781 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2782 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2783 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2784 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2785 ULONG TransferBufferLength; // current length of the packet buffer
2786 ULONG ReadPosition; // current read position in a packet buffer
2790 /*****************************************************************************************/
2791 /* ASIC related parameters */
2792 /*****************************************************************************************/
2793 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2795 // ---------------------------
2797 // ---------------------------
2798 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2799 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2800 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2801 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2803 // ---------------------------
2805 // ---------------------------
2806 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2807 UCHAR BbpRssiToDbmDelta;
2808 BBP_R66_TUNING BbpTuning;
2810 // ----------------------------
2812 // ----------------------------
2813 UCHAR RfIcType; // RFIC_xxx
2814 ULONG RfFreqOffset; // Frequency offset for channel switching
2815 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2817 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2818 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2820 // This soft Rx Antenna Diversity mechanism is used only when user set
2821 // RX Antenna = DIVERSITY ON
2822 SOFT_RX_ANT_DIVERSITY RxAnt;
2825 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2826 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2827 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2828 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2830 UCHAR ChannelListNum; // number of channel in ChannelList[]
2833 ULONG Tx20MPwrCfgABand[5];
2834 ULONG Tx20MPwrCfgGBand[5];
2835 ULONG Tx40MPwrCfgABand[5];
2836 ULONG Tx40MPwrCfgGBand[5];
2838 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2839 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2840 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2841 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2842 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2843 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2845 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2846 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2847 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2848 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2849 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2850 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2852 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2853 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2854 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2855 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2858 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2859 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2860 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2861 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2864 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2865 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2866 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2867 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2869 // ----------------------------
2871 // ----------------------------
2872 MCU_LEDCS_STRUC LedCntl;
2873 USHORT Led1; // read from EEPROM 0x3c
2874 USHORT Led2; // EEPROM 0x3e
2875 USHORT Led3; // EEPROM 0x40
2876 UCHAR LedIndicatorStregth;
2877 UCHAR RssiSingalstrengthOffet;
2878 BOOLEAN bLedOnScanning;
2881 /*****************************************************************************************/
2882 /* 802.11 related parameters */
2883 /*****************************************************************************************/
2884 // outgoing BEACON frame buffer and corresponding TXD
2885 TXWI_STRUC BeaconTxWI;
2887 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2889 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2890 PSPOLL_FRAME PsPollFrame;
2891 HEADER_802_11 NullFrame;
2894 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2895 TX_CONTEXT NullContext;
2896 TX_CONTEXT PsPollContext;
2897 TX_CONTEXT RTSContext;
2902 //=========AP===========
2905 //=======STA===========
2906 #ifdef CONFIG_STA_SUPPORT
2907 /* Modified by Wu Xi-Kun 4/21/2006 */
2908 // -----------------------------------------------
2909 // STA specific configuration & operation status
2910 // used only when pAd->OpMode == OPMODE_STA
2911 // -----------------------------------------------
2912 STA_ADMIN_CONFIG StaCfg; // user desired settings
2913 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2914 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2915 NDIS_MEDIA_STATE PreMediaState;
2916 #endif // CONFIG_STA_SUPPORT //
2918 //=======Common===========
2919 // OP mode: either AP or STA
2920 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2922 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2925 // configuration: read from Registry & E2PROM
2926 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2927 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2928 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2930 // ------------------------------------------------------
2931 // common configuration to both OPMODE_STA and OPMODE_AP
2932 // ------------------------------------------------------
2933 COMMON_CONFIG CommonCfg;
2936 // AP needs those vaiables for site survey feature.
2937 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2938 BSS_TABLE ScanTab; // store the latest SCAN result
2940 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2941 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2942 NDIS_SPIN_LOCK MacTabLock;
2944 #ifdef DOT11_N_SUPPORT
2946 #endif // DOT11_N_SUPPORT //
2947 NDIS_SPIN_LOCK BATabLock;
2948 RALINK_TIMER_STRUCT RECBATimer;
2950 // encryption/decryption KEY tables
2951 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2953 // RX re-assembly buffer for fragmentation
2954 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2957 COUNTER_802_3 Counters8023; // 802.3 counters
2958 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2959 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2960 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2961 PRIVATE_STRUC PrivateInfo; // Private information & counters
2963 // flags, see fRTMP_ADAPTER_xxx flags
2964 ULONG Flags; // Represent current device status
2966 // current TX sequence #
2969 // Control disconnect / connect event generation
2970 //+++Didn't used anymore
2975 //+++Used only for Station
2976 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2979 ULONG ExtraInfo; // Extra information for displaying status
2980 ULONG SystemErrorBitmap; // b0: E2PROM version error
2982 //+++Didn't used anymore
2983 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2986 // ---------------------------
2988 // ---------------------------
2989 RT_802_11_EVENT_TABLE EventTab;
2994 /*****************************************************************************************/
2995 /* Statistic related parameters */
2996 /*****************************************************************************************/
2998 ULONG BulkOutDataOneSecCount;
2999 ULONG BulkInDataOneSecCount;
3000 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
3001 ULONG watchDogRxCnt;
3002 ULONG watchDogRxOverFlowCnt;
3003 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
3006 BOOLEAN bUpdateBcnCntDone;
3007 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
3008 // ----------------------------
3010 // ----------------------------
3011 //ULONG DebugSetting[4];
3012 BOOLEAN bBanAllBaSetup;
3013 BOOLEAN bPromiscuous;
3015 // ----------------------------
3016 // rt2860c emulation-use Parameters
3017 // ----------------------------
3020 ULONG cfendaccu[30];
3021 ULONG bacontent[16];
3022 ULONG rxint[RX_RING_SIZE+1];
3025 BOOLEAN bForcePrintTX;
3026 BOOLEAN bForcePrintRX;
3027 BOOLEAN bDisablescanning; //defined in RT2870 USB
3028 BOOLEAN bStaFifoTest;
3029 BOOLEAN bProtectionTest;
3031 BOOLEAN bGenOneHCCA;
3032 BOOLEAN bBroadComHT;
3033 //+++Following add from RT2870 USB.
3035 ULONG BulkOutComplete;
3036 ULONG BulkOutCompleteOther;
3037 ULONG BulkOutCompleteCancel; // seems not use now?
3039 ULONG BulkInComplete;
3040 ULONG BulkInCompleteFail;
3043 struct wificonf WIFItestbed;
3048 BOOLEAN ContinBulkOut; //ATE bulk out control
3049 BOOLEAN ContinBulkIn; //ATE bulk in control
3050 atomic_t BulkOutRemained;
3051 atomic_t BulkInRemained;
3053 #endif // RALINK_ATE //
3055 #ifdef DOT11_N_SUPPORT
3056 struct reordering_mpdu_pool mpdu_blk_pool;
3057 #endif // DOT11_N_SUPPORT //
3059 ULONG OneSecondnonBEpackets; // record non BE packets per second
3061 #if WIRELESS_EXT >= 12
3062 struct iw_statistics iw_stats;
3065 struct net_device_stats stats;
3068 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
3069 #endif // BLOCK_NET_IF //
3073 #ifdef MULTIPLE_CARD_SUPPORT
3075 UCHAR MC_FileName[256];
3076 #endif // MULTIPLE_CARD_SUPPORT //
3078 ULONG TbttTickCount;
3079 #ifdef PCI_MSI_SUPPORT
3081 #endif // PCI_MSI_SUPPORT //
3086 #define TIME_BASE (1000000/OS_HZ)
3087 #define TIME_ONE_SECOND (1000000/TIME_BASE)
3088 UCHAR flg_be_adjust;
3089 ULONG be_adjust_last_time;
3092 #ifdef IKANOS_VX_1X0
3093 struct IKANOS_TX_INFO IkanosTxInfo;
3094 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3095 #endif // IKANOS_VX_1X0 //
3099 RtmpDiagStruct DiagStruct;
3100 #endif // DBG_DIAGNOSE //
3103 UINT8 PM_FlgSuspend;
3104 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3107 // Cisco IAPP format
3109 typedef struct _CISCO_IAPP_CONTENT_
3111 USHORT Length; //IAPP Length
3112 UCHAR MessageType; //IAPP type
3113 UCHAR FunctionCode; //IAPP function type
3114 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3115 UCHAR SourceMAC[MAC_ADDR_LEN];
3116 USHORT Tag; //Tag(element IE) - Adjacent AP report
3117 USHORT TagLength; //Length of element not including 4 byte header
3118 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3119 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3122 UCHAR Ssid[MAX_LEN_OF_SSID];
3123 USHORT Seconds; //Seconds that the client has been disassociated.
3124 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3126 #define DELAYINTMASK 0x0003fffb
3127 #define INTMASK 0x0003fffb
3128 #define IndMask 0x0003fffc
3129 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3130 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3131 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3132 #define TxCoherent 0x00020000 // tx coherent
3133 #define RxCoherent 0x00010000 // rx coherent
3134 #define McuCommand 0x00000200 // mcu
3135 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3136 #define TBTTInt 0x00000800 // TBTT interrupt
3137 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3138 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3139 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3142 typedef struct _RX_BLK_
3144 // RXD_STRUC RxD; // sample
3145 RT28XX_RXD_STRUC RxD;
3147 PHEADER_802_11 pHeader;
3148 PNDIS_PACKET pRxPacket;
3152 UCHAR UserPriority; // for calculate TKIP MIC using
3156 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3157 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3158 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3161 #define fRX_WDS 0x0001
3162 #define fRX_AMSDU 0x0002
3163 #define fRX_ARALINK 0x0004
3164 #define fRX_HTC 0x0008
3165 #define fRX_PAD 0x0010
3166 #define fRX_AMPDU 0x0020
3167 #define fRX_QOS 0x0040
3168 #define fRX_INFRA 0x0080
3169 #define fRX_EAP 0x0100
3170 #define fRX_MESH 0x0200
3171 #define fRX_APCLI 0x0400
3172 #define fRX_DLS 0x0800
3173 #define fRX_WPI 0x1000
3175 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3176 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3177 #define LENGTH_ARALINK_HEADER_FIELD 2
3179 #define TX_UNKOWN_FRAME 0x00
3180 #define TX_MCAST_FRAME 0x01
3181 #define TX_LEGACY_FRAME 0x02
3182 #define TX_AMPDU_FRAME 0x04
3183 #define TX_AMSDU_FRAME 0x08
3184 #define TX_RALINK_FRAME 0x10
3185 #define TX_FRAG_FRAME 0x20
3188 // Currently the sizeof(TX_BLK) is 148 bytes.
3189 typedef struct _TX_BLK_
3192 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3193 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3194 USHORT TotalFragNum; // Total frame fragments required in one batch
3195 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3197 QUEUE_HEADER TxPacketList;
3198 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3199 HTTRANSMIT_SETTING *pTransmit;
3201 // Following structure used for the characteristics of a specific packet.
3202 PNDIS_PACKET pPacket;
3203 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3204 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3205 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3206 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3207 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3208 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3209 UCHAR HdrPadLen; // recording Header Padding Length;
3210 UCHAR apidx; // The interface associated to this packet
3211 UCHAR Wcid; // The MAC entry associated to this packet
3212 UCHAR UserPriority; // priority class of packet
3213 UCHAR FrameGap; // what kind of IFS this packet use
3214 UCHAR MpduReqNum; // number of fragments of this frame
3215 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3216 UCHAR CipherAlg; // cipher alogrithm
3221 USHORT Flags; //See following definitions for detail.
3223 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3224 ULONG Priv; // Hardware specific value saved in here.
3228 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3229 #define fTX_bAckRequired 0x0002 // the packet need ack response
3230 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3231 #define fTX_bHTRate 0x0008 // allow to use HT rate
3232 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3233 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3234 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3235 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3236 #define fTX_bWMM 0x0080 // QOS Data
3238 #define fTX_bClearEAPFrame 0x0100
3241 #ifdef CONFIG_STA_SUPPORT
3242 #endif // CONFIG_STA_SUPPORT //
3246 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3249 (_pTxBlk->Flags |= _flag) \
3251 (_pTxBlk->Flags &= ~(_flag)) \
3254 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3255 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3256 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3262 //------------------------------------------------------------------------------------------
3266 #ifdef RT_BIG_ENDIAN
3267 static inline VOID WriteBackToDescriptor(
3270 IN BOOLEAN DoEncrypt,
3271 IN ULONG DescriptorType)
3275 p1 = ((UINT32 *)Dest);
3276 p2 = ((UINT32 *)Src);
3281 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3285 ========================================================================
3287 Routine Description:
3288 Endian conversion of Tx/Rx descriptor .
3291 pAd Pointer to our adapter
3292 pData Pointer to Tx/Rx descriptor
3293 DescriptorType Direction of the frame
3299 Call this function when read or update descriptor
3300 ========================================================================
3302 static inline VOID RTMPWIEndianChange(
3304 IN ULONG DescriptorType)
3309 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3311 if(DescriptorType == TYPE_TXWI)
3313 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3314 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3318 for(i=0; i < size/4 ; i++)
3319 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3324 ========================================================================
3326 Routine Description:
3327 Endian conversion of Tx/Rx descriptor .
3330 pAd Pointer to our adapter
3331 pData Pointer to Tx/Rx descriptor
3332 DescriptorType Direction of the frame
3338 Call this function when read or update descriptor
3339 ========================================================================
3343 static inline VOID RTMPDescriptorEndianChange(
3345 IN ULONG DescriptorType)
3347 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3351 ========================================================================
3353 Routine Description:
3354 Endian conversion of all kinds of 802.11 frames .
3357 pAd Pointer to our adapter
3358 pData Pointer to the 802.11 frame structure
3359 Dir Direction of the frame
3360 FromRxDoneInt Caller is from RxDone interrupt
3366 Call this function when read or update buffer data
3367 ========================================================================
3369 static inline VOID RTMPFrameEndianChange(
3370 IN PRTMP_ADAPTER pAd,
3373 IN BOOLEAN FromRxDoneInt)
3375 PHEADER_802_11 pFrame;
3378 // swab 16 bit fields - Frame Control field
3381 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3384 pFrame = (PHEADER_802_11) pData;
3385 pMacHdr = (PUCHAR) pFrame;
3387 // swab 16 bit fields - Duration/ID field
3388 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3390 // swab 16 bit fields - Sequence Control field
3391 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3393 if(pFrame->FC.Type == BTYPE_MGMT)
3395 switch(pFrame->FC.SubType)
3397 case SUBTYPE_ASSOC_REQ:
3398 case SUBTYPE_REASSOC_REQ:
3399 // swab 16 bit fields - CapabilityInfo field
3400 pMacHdr += sizeof(HEADER_802_11);
3401 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3403 // swab 16 bit fields - Listen Interval field
3405 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3408 case SUBTYPE_ASSOC_RSP:
3409 case SUBTYPE_REASSOC_RSP:
3410 // swab 16 bit fields - CapabilityInfo field
3411 pMacHdr += sizeof(HEADER_802_11);
3412 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3414 // swab 16 bit fields - Status Code field
3416 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3418 // swab 16 bit fields - AID field
3420 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3424 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3425 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3426 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3430 // swab 16 bit fields - Auth Alg No. field
3431 pMacHdr += sizeof(HEADER_802_11);
3432 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3434 // swab 16 bit fields - Auth Seq No. field
3436 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3438 // swab 16 bit fields - Status Code field
3440 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3444 case SUBTYPE_BEACON:
3445 case SUBTYPE_PROBE_RSP:
3446 // swab 16 bit fields - BeaconInterval field
3447 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3448 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3450 // swab 16 bit fields - CapabilityInfo field
3451 pMacHdr += sizeof(USHORT);
3452 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3455 case SUBTYPE_DEAUTH:
3456 case SUBTYPE_DISASSOC:
3457 // swab 16 bit fields - Reason code field
3458 pMacHdr += sizeof(HEADER_802_11);
3459 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3463 else if( pFrame->FC.Type == BTYPE_DATA )
3466 else if(pFrame->FC.Type == BTYPE_CNTL)
3468 switch(pFrame->FC.SubType)
3470 case SUBTYPE_BLOCK_ACK_REQ:
3472 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3473 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3474 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3477 case SUBTYPE_BLOCK_ACK:
3478 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3479 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3483 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3484 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3490 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3493 // swab 16 bit fields - Frame Control
3494 if(Dir == DIR_WRITE)
3496 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3499 #endif // RT_BIG_ENDIAN //
3502 static inline VOID ConvertMulticastIP2MAC(
3504 IN PUCHAR *ppMacAddr,
3505 IN UINT16 ProtoType)
3507 if (pIpAddr == NULL)
3510 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3516 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3517 *(*ppMacAddr) = 0x33;
3518 *(*ppMacAddr + 1) = 0x33;
3519 *(*ppMacAddr + 2) = pIpAddr[12];
3520 *(*ppMacAddr + 3) = pIpAddr[13];
3521 *(*ppMacAddr + 4) = pIpAddr[14];
3522 *(*ppMacAddr + 5) = pIpAddr[15];
3527 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3528 *(*ppMacAddr) = 0x01;
3529 *(*ppMacAddr + 1) = 0x00;
3530 *(*ppMacAddr + 2) = 0x5e;
3531 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3532 *(*ppMacAddr + 4) = pIpAddr[2];
3533 *(*ppMacAddr + 5) = pIpAddr[3];
3540 BOOLEAN RTMPCheckForHang(
3541 IN NDIS_HANDLE MiniportAdapterContext
3545 IN NDIS_HANDLE MiniportAdapterContext
3549 // Private routines in rtmp_init.c
3551 NDIS_STATUS RTMPAllocAdapterBlock(
3553 OUT PRTMP_ADAPTER *ppAdapter
3556 NDIS_STATUS RTMPAllocTxRxRingMemory(
3557 IN PRTMP_ADAPTER pAd
3560 NDIS_STATUS RTMPFindAdapter(
3561 IN PRTMP_ADAPTER pAd,
3562 IN NDIS_HANDLE WrapperConfigurationContext
3565 NDIS_STATUS RTMPReadParametersHook(
3566 IN PRTMP_ADAPTER pAd
3569 VOID RTMPFreeAdapter(
3570 IN PRTMP_ADAPTER pAd
3573 NDIS_STATUS NICReadRegParameters(
3574 IN PRTMP_ADAPTER pAd,
3575 IN NDIS_HANDLE WrapperConfigurationContext
3579 VOID NICInitRT30xxRFRegisters(
3580 IN PRTMP_ADAPTER pAd);
3583 VOID NICReadEEPROMParameters(
3584 IN PRTMP_ADAPTER pAd,
3585 IN PUCHAR mac_addr);
3587 VOID NICInitAsicFromEEPROM(
3588 IN PRTMP_ADAPTER pAd);
3590 VOID NICInitTxRxRingAndBacklogQueue(
3591 IN PRTMP_ADAPTER pAd);
3593 NDIS_STATUS NICInitializeAdapter(
3594 IN PRTMP_ADAPTER pAd,
3595 IN BOOLEAN bHardReset);
3597 NDIS_STATUS NICInitializeAsic(
3598 IN PRTMP_ADAPTER pAd,
3599 IN BOOLEAN bHardReset);
3602 IN PRTMP_ADAPTER pAd);
3604 VOID RTMPRingCleanUp(
3605 IN PRTMP_ADAPTER pAd,
3609 IN PRTMP_ADAPTER pAd);
3611 NDIS_STATUS DbgSendPacket(
3612 IN PRTMP_ADAPTER pAd,
3613 IN PNDIS_PACKET pPacket);
3616 IN PRTMP_ADAPTER pAd);
3618 VOID NICResetFromError(
3619 IN PRTMP_ADAPTER pAd);
3621 VOID NICEraseFirmware(
3622 IN PRTMP_ADAPTER pAd);
3624 NDIS_STATUS NICLoadFirmware(
3625 IN PRTMP_ADAPTER pAd);
3627 NDIS_STATUS NICLoadRateSwitchingParams(
3628 IN PRTMP_ADAPTER pAd);
3630 BOOLEAN NICCheckForHang(
3631 IN PRTMP_ADAPTER pAd);
3633 VOID NICUpdateFifoStaCounters(
3634 IN PRTMP_ADAPTER pAd);
3636 VOID NICUpdateRawCounters(
3637 IN PRTMP_ADAPTER pAd);
3640 ULONG RTMPEqualMemory(
3646 ULONG RTMPNotAllZero(
3650 VOID RTMPZeroMemory(
3654 ULONG RTMPCompareMemory(
3659 VOID RTMPMoveMemory(
3672 VOID RTMPPatchMacBbpBug(
3673 IN PRTMP_ADAPTER pAd);
3675 VOID RTMPPatchCardBus(
3676 IN PRTMP_ADAPTER pAdapter);
3678 VOID RTMPPatchRalinkCardBus(
3679 IN PRTMP_ADAPTER pAdapter,
3682 ULONG RTMPReadCBConfig(
3688 VOID RTMPWriteCBConfig(
3696 IN PRTMP_ADAPTER pAd,
3697 IN PRALINK_TIMER_STRUCT pTimer,
3698 IN PVOID pTimerFunc,
3703 IN PRALINK_TIMER_STRUCT pTimer,
3708 IN PRALINK_TIMER_STRUCT pTimer,
3711 VOID RTMPCancelTimer(
3712 IN PRALINK_TIMER_STRUCT pTimer,
3713 OUT BOOLEAN *pCancelled);
3716 IN PRTMP_ADAPTER pAd,
3719 VOID RTMPSetSignalLED(
3720 IN PRTMP_ADAPTER pAd,
3721 IN NDIS_802_11_RSSI Dbm);
3723 VOID RTMPEnableRxTx(
3724 IN PRTMP_ADAPTER pAd);
3727 // prototype in action.c
3729 VOID ActionStateMachineInit(
3730 IN PRTMP_ADAPTER pAd,
3731 IN STATE_MACHINE *S,
3732 OUT STATE_MACHINE_FUNC Trans[]);
3734 VOID MlmeADDBAAction(
3735 IN PRTMP_ADAPTER pAd,
3736 IN MLME_QUEUE_ELEM *Elem);
3738 VOID MlmeDELBAAction(
3739 IN PRTMP_ADAPTER pAd,
3740 IN MLME_QUEUE_ELEM *Elem);
3743 IN PRTMP_ADAPTER pAd,
3744 IN MLME_QUEUE_ELEM *Elem);
3746 VOID MlmeInvalidAction(
3747 IN PRTMP_ADAPTER pAd,
3748 IN MLME_QUEUE_ELEM *Elem);
3751 IN PRTMP_ADAPTER pAd,
3752 IN MLME_QUEUE_ELEM *Elem);
3754 #ifdef DOT11_N_SUPPORT
3755 VOID PeerAddBAReqAction(
3756 IN PRTMP_ADAPTER pAd,
3757 IN MLME_QUEUE_ELEM *Elem);
3759 VOID PeerAddBARspAction(
3760 IN PRTMP_ADAPTER pAd,
3761 IN MLME_QUEUE_ELEM *Elem);
3763 VOID PeerDelBAAction(
3764 IN PRTMP_ADAPTER pAd,
3765 IN MLME_QUEUE_ELEM *Elem);
3768 IN PRTMP_ADAPTER pAd,
3769 IN MLME_QUEUE_ELEM *Elem);
3770 #endif // DOT11_N_SUPPORT //
3772 VOID SendPSMPAction(
3773 IN PRTMP_ADAPTER pAd,
3778 #ifdef DOT11N_DRAFT3
3779 VOID SendBSS2040CoexistMgmtAction(
3780 IN PRTMP_ADAPTER pAd,
3785 VOID SendNotifyBWActionFrame(
3786 IN PRTMP_ADAPTER pAd,
3790 BOOLEAN ChannelSwitchSanityCheck(
3791 IN PRTMP_ADAPTER pAd,
3793 IN UCHAR NewChannel,
3794 IN UCHAR Secondary);
3796 VOID ChannelSwitchAction(
3797 IN PRTMP_ADAPTER pAd,
3800 IN UCHAR Secondary);
3802 ULONG BuildIntolerantChannelRep(
3803 IN PRTMP_ADAPTER pAd,
3806 VOID Update2040CoexistFrameAndNotify(
3807 IN PRTMP_ADAPTER pAd,
3809 IN BOOLEAN bAddIntolerantCha);
3811 VOID Send2040CoexistAction(
3812 IN PRTMP_ADAPTER pAd,
3814 IN BOOLEAN bAddIntolerantCha);
3815 #endif // DOT11N_DRAFT3 //
3818 IN PRTMP_ADAPTER pAd,
3819 IN MLME_QUEUE_ELEM *Elem);
3821 VOID PeerPublicAction(
3822 IN PRTMP_ADAPTER pAd,
3823 IN MLME_QUEUE_ELEM *Elem);
3825 #ifdef CONFIG_STA_SUPPORT
3826 VOID StaPublicAction(
3827 IN PRTMP_ADAPTER pAd,
3828 IN UCHAR Bss2040Coexist);
3829 #endif // CONFIG_STA_SUPPORT //
3832 VOID PeerBSSTranAction(
3833 IN PRTMP_ADAPTER pAd,
3834 IN MLME_QUEUE_ELEM *Elem);
3836 #ifdef DOT11_N_SUPPORT
3838 IN PRTMP_ADAPTER pAd,
3839 IN MLME_QUEUE_ELEM *Elem);
3840 #endif // DOT11_N_SUPPORT //
3843 IN PRTMP_ADAPTER pAd,
3844 IN MLME_QUEUE_ELEM *Elem);
3846 #ifdef QOS_DLS_SUPPORT
3848 IN PRTMP_ADAPTER pAd,
3849 IN MLME_QUEUE_ELEM *Elem);
3850 #endif // QOS_DLS_SUPPORT //
3852 #ifdef CONFIG_STA_SUPPORT
3853 #ifdef QOS_DLS_SUPPORT
3855 IN PRTMP_ADAPTER pAd,
3856 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3857 IN PRT_802_11_DLS pDls,
3859 #endif // QOS_DLS_SUPPORT //
3860 #endif // CONFIG_STA_SUPPORT //
3862 #ifdef DOT11_N_SUPPORT
3863 VOID RECBATimerTimeout(
3864 IN PVOID SystemSpecific1,
3865 IN PVOID FunctionContext,
3866 IN PVOID SystemSpecific2,
3867 IN PVOID SystemSpecific3);
3869 VOID ORIBATimerTimeout(
3870 IN PRTMP_ADAPTER pAd);
3872 VOID SendRefreshBAR(
3873 IN PRTMP_ADAPTER pAd,
3874 IN MAC_TABLE_ENTRY *pEntry);
3875 #endif // DOT11_N_SUPPORT //
3878 IN PRTMP_ADAPTER pAd,
3879 IN OUT PHEADER_802_11 pHdr80211,
3885 IN PRTMP_ADAPTER pAd,
3886 IN OUT PFRAME_BAR pCntlBar,
3890 VOID InsertActField(
3891 IN PRTMP_ADAPTER pAd,
3892 OUT PUCHAR pFrameBuf,
3893 OUT PULONG pFrameLen,
3897 BOOLEAN QosBADataParse(
3898 IN PRTMP_ADAPTER pAd,
3900 IN PUCHAR p8023Header,
3904 IN UCHAR DataOffset,
3906 IN UINT CurRxIndex);
3908 #ifdef DOT11_N_SUPPORT
3909 BOOLEAN CntlEnqueueForRecv(
3910 IN PRTMP_ADAPTER pAd,
3913 IN PFRAME_BA_REQ pMsg);
3915 VOID BaAutoManSwitch(
3916 IN PRTMP_ADAPTER pAd);
3917 #endif // DOT11_N_SUPPORT //
3920 IN PRTMP_ADAPTER pAd,
3921 IN UCHAR BatRecIdx);
3924 // Private routines in rtmp_data.c
3926 BOOLEAN RTMPHandleRxDoneInterrupt(
3927 IN PRTMP_ADAPTER pAd);
3929 VOID RTMPHandleTxDoneInterrupt(
3930 IN PRTMP_ADAPTER pAd);
3932 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3933 IN PRTMP_ADAPTER pAd,
3934 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3936 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3937 IN PRTMP_ADAPTER pAd);
3939 VOID RTMPHandleTBTTInterrupt(
3940 IN PRTMP_ADAPTER pAd);
3942 VOID RTMPHandlePreTBTTInterrupt(
3943 IN PRTMP_ADAPTER pAd);
3945 void RTMPHandleTwakeupInterrupt(
3946 IN PRTMP_ADAPTER pAd);
3948 VOID RTMPHandleRxCoherentInterrupt(
3949 IN PRTMP_ADAPTER pAd);
3951 BOOLEAN TxFrameIsAggregatible(
3952 IN PRTMP_ADAPTER pAd,
3953 IN PUCHAR pPrevAddr1,
3954 IN PUCHAR p8023hdr);
3956 BOOLEAN PeerIsAggreOn(
3957 IN PRTMP_ADAPTER pAd,
3959 IN PMAC_TABLE_ENTRY pMacEntry);
3961 #if 0 // It's not be used
3962 HTTRANSMIT_SETTING *GetTxMode(
3963 IN PRTMP_ADAPTER pAd,
3967 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3968 IN PNDIS_BUFFER pFirstBuffer,
3969 IN UCHAR DesiredOffset,
3973 NDIS_STATUS STASendPacket(
3974 IN PRTMP_ADAPTER pAd,
3975 IN PNDIS_PACKET pPacket);
3977 VOID STASendPackets(
3978 IN NDIS_HANDLE MiniportAdapterContext,
3979 IN PPNDIS_PACKET ppPacketArray,
3980 IN UINT NumberOfPackets);
3982 VOID RTMPDeQueuePacket(
3983 IN PRTMP_ADAPTER pAd,
3984 IN BOOLEAN bIntContext,
3986 IN UCHAR Max_Tx_Packets);
3988 NDIS_STATUS RTMPHardTransmit(
3989 IN PRTMP_ADAPTER pAd,
3990 IN PNDIS_PACKET pPacket,
3992 OUT PULONG pFreeTXDLeft);
3994 NDIS_STATUS STAHardTransmit(
3995 IN PRTMP_ADAPTER pAd,
3999 VOID STARxEAPOLFrameIndicate(
4000 IN PRTMP_ADAPTER pAd,
4001 IN MAC_TABLE_ENTRY *pEntry,
4003 IN UCHAR FromWhichBSSID);
4005 NDIS_STATUS RTMPFreeTXDRequest(
4006 IN PRTMP_ADAPTER pAd,
4008 IN UCHAR NumberRequired,
4009 IN PUCHAR FreeNumberIs);
4011 NDIS_STATUS MlmeHardTransmit(
4012 IN PRTMP_ADAPTER pAd,
4014 IN PNDIS_PACKET pPacket);
4016 NDIS_STATUS MlmeHardTransmitMgmtRing(
4017 IN PRTMP_ADAPTER pAd,
4019 IN PNDIS_PACKET pPacket);
4021 NDIS_STATUS MlmeHardTransmitTxRing(
4022 IN PRTMP_ADAPTER pAd,
4024 IN PNDIS_PACKET pPacket);
4026 USHORT RTMPCalcDuration(
4027 IN PRTMP_ADAPTER pAd,
4032 IN PRTMP_ADAPTER pAd,
4033 IN PTXWI_STRUC pTxWI,
4036 IN BOOLEAN InsTimestamp,
4039 IN BOOLEAN NSeq, // HW new a sequence.
4048 IN HTTRANSMIT_SETTING *pTransmit);
4051 VOID RTMPWriteTxWI_Data(
4052 IN PRTMP_ADAPTER pAd,
4053 IN OUT PTXWI_STRUC pTxWI,
4057 VOID RTMPWriteTxWI_Cache(
4058 IN PRTMP_ADAPTER pAd,
4059 IN OUT PTXWI_STRUC pTxWI,
4062 VOID RTMPWriteTxDescriptor(
4063 IN PRTMP_ADAPTER pAd,
4068 VOID RTMPSuspendMsduTransmission(
4069 IN PRTMP_ADAPTER pAd);
4071 VOID RTMPResumeMsduTransmission(
4072 IN PRTMP_ADAPTER pAd);
4074 NDIS_STATUS MiniportMMRequest(
4075 IN PRTMP_ADAPTER pAd,
4080 NDIS_STATUS MiniportDataMMRequest(
4081 IN PRTMP_ADAPTER pAd,
4086 VOID RTMPSendNullFrame(
4087 IN PRTMP_ADAPTER pAd,
4089 IN BOOLEAN bQosNull);
4091 VOID RTMPSendDisassociationFrame(
4092 IN PRTMP_ADAPTER pAd);
4094 VOID RTMPSendRTSFrame(
4095 IN PRTMP_ADAPTER pAd,
4097 IN unsigned int NextMpduSize,
4100 IN USHORT AckDuration,
4105 NDIS_STATUS RTMPApplyPacketFilter(
4106 IN PRTMP_ADAPTER pAd,
4107 IN PRT28XX_RXD_STRUC pRxD,
4108 IN PHEADER_802_11 pHeader);
4110 PQUEUE_HEADER RTMPCheckTxSwQueue(
4111 IN PRTMP_ADAPTER pAd,
4114 #ifdef CONFIG_STA_SUPPORT
4115 VOID RTMPReportMicError(
4116 IN PRTMP_ADAPTER pAd,
4117 IN PCIPHER_KEY pWpaKey);
4119 VOID WpaMicFailureReportFrame(
4120 IN PRTMP_ADAPTER pAd,
4121 IN MLME_QUEUE_ELEM *Elem);
4123 VOID WpaDisassocApAndBlockAssoc(
4124 IN PVOID SystemSpecific1,
4125 IN PVOID FunctionContext,
4126 IN PVOID SystemSpecific2,
4127 IN PVOID SystemSpecific3);
4128 #endif // CONFIG_STA_SUPPORT //
4130 NDIS_STATUS RTMPCloneNdisPacket(
4131 IN PRTMP_ADAPTER pAd,
4132 IN BOOLEAN pInsAMSDUHdr,
4133 IN PNDIS_PACKET pInPacket,
4134 OUT PNDIS_PACKET *ppOutPacket);
4136 NDIS_STATUS RTMPAllocateNdisPacket(
4137 IN PRTMP_ADAPTER pAd,
4138 IN PNDIS_PACKET *pPacket,
4144 VOID RTMPFreeNdisPacket(
4145 IN PRTMP_ADAPTER pAd,
4146 IN PNDIS_PACKET pPacket);
4148 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4149 IN PRTMP_ADAPTER pAd,
4152 BOOLEAN RTMPCheckDHCPFrame(
4153 IN PRTMP_ADAPTER pAd,
4154 IN PNDIS_PACKET pPacket);
4157 BOOLEAN RTMPCheckEtherType(
4158 IN PRTMP_ADAPTER pAd,
4159 IN PNDIS_PACKET pPacket);
4162 VOID RTMPCckBbpTuning(
4163 IN PRTMP_ADAPTER pAd,
4167 // Private routines in rtmp_wep.c
4169 VOID RTMPInitWepEngine(
4170 IN PRTMP_ADAPTER pAd,
4176 VOID RTMPEncryptData(
4177 IN PRTMP_ADAPTER pAd,
4182 BOOLEAN RTMPDecryptData(
4183 IN PRTMP_ADAPTER pAdapter,
4188 BOOLEAN RTMPSoftDecryptWEP(
4189 IN PRTMP_ADAPTER pAd,
4191 IN ULONG DataByteCnt,
4192 IN PCIPHER_KEY pGroupKey);
4195 IN PRTMP_ADAPTER pAd,
4199 IN PARCFOURCONTEXT Ctx,
4204 IN PARCFOURCONTEXT Ctx);
4206 VOID ARCFOUR_DECRYPT(
4207 IN PARCFOURCONTEXT Ctx,
4212 VOID ARCFOUR_ENCRYPT(
4213 IN PARCFOURCONTEXT Ctx,
4218 VOID WPAARCFOUR_ENCRYPT(
4219 IN PARCFOURCONTEXT Ctx,
4224 UINT RTMP_CALC_FCS32(
4233 // Asic/RF/BBP related functions
4235 VOID AsicAdjustTxPower(
4236 IN PRTMP_ADAPTER pAd);
4238 VOID AsicUpdateProtect(
4239 IN PRTMP_ADAPTER pAd,
4240 IN USHORT OperaionMode,
4242 IN BOOLEAN bDisableBGProtect,
4243 IN BOOLEAN bNonGFExist);
4245 VOID AsicSwitchChannel(
4246 IN PRTMP_ADAPTER pAd,
4250 VOID AsicLockChannel(
4251 IN PRTMP_ADAPTER pAd,
4254 VOID AsicAntennaSelect(
4255 IN PRTMP_ADAPTER pAd,
4258 VOID AsicAntennaSetting(
4259 IN PRTMP_ADAPTER pAd,
4260 IN ABGBAND_STATE BandState);
4262 VOID AsicRfTuningExec(
4263 IN PVOID SystemSpecific1,
4264 IN PVOID FunctionContext,
4265 IN PVOID SystemSpecific2,
4266 IN PVOID SystemSpecific3);
4268 #ifdef CONFIG_STA_SUPPORT
4269 VOID AsicSleepThenAutoWakeup(
4270 IN PRTMP_ADAPTER pAd,
4271 IN USHORT TbttNumToNextWakeUp);
4273 VOID AsicForceSleep(
4274 IN PRTMP_ADAPTER pAd);
4276 VOID AsicForceWakeup(
4277 IN PRTMP_ADAPTER pAd,
4278 IN BOOLEAN bFromTx);
4279 #endif // CONFIG_STA_SUPPORT //
4282 IN PRTMP_ADAPTER pAd,
4285 VOID AsicSetMcastWC(
4286 IN PRTMP_ADAPTER pAd);
4288 #if 0 // removed by AlbertY
4289 VOID AsicSetBssidWC(
4290 IN PRTMP_ADAPTER pAd,
4294 VOID AsicDelWcidTab(
4295 IN PRTMP_ADAPTER pAd,
4299 IN PRTMP_ADAPTER pAd);
4301 VOID AsicDisableRDG(
4302 IN PRTMP_ADAPTER pAd);
4304 VOID AsicDisableSync(
4305 IN PRTMP_ADAPTER pAd);
4307 VOID AsicEnableBssSync(
4308 IN PRTMP_ADAPTER pAd);
4310 VOID AsicEnableIbssSync(
4311 IN PRTMP_ADAPTER pAd);
4313 VOID AsicSetEdcaParm(
4314 IN PRTMP_ADAPTER pAd,
4315 IN PEDCA_PARM pEdcaParm);
4317 VOID AsicSetSlotTime(
4318 IN PRTMP_ADAPTER pAd,
4319 IN BOOLEAN bUseShortSlotTime);
4322 VOID AsicAddWcidCipherEntry(
4323 IN PRTMP_ADAPTER pAd,
4329 IN CIPHER_KEY *pCipherKey);
4332 VOID AsicAddSharedKeyEntry(
4333 IN PRTMP_ADAPTER pAd,
4341 VOID AsicRemoveSharedKeyEntry(
4342 IN PRTMP_ADAPTER pAd,
4346 VOID AsicUpdateWCIDAttribute(
4347 IN PRTMP_ADAPTER pAd,
4351 IN BOOLEAN bUsePairewiseKeyTable);
4353 VOID AsicUpdateWCIDIVEIV(
4354 IN PRTMP_ADAPTER pAd,
4359 VOID AsicUpdateRxWCIDTable(
4360 IN PRTMP_ADAPTER pAd,
4364 VOID AsicAddKeyEntry(
4365 IN PRTMP_ADAPTER pAd,
4369 IN PCIPHER_KEY pCipherKey,
4370 IN BOOLEAN bUsePairewiseKeyTable,
4373 VOID AsicAddPairwiseKeyEntry(
4374 IN PRTMP_ADAPTER pAd,
4377 IN CIPHER_KEY *pCipherKey);
4379 VOID AsicRemovePairwiseKeyEntry(
4380 IN PRTMP_ADAPTER pAd,
4384 BOOLEAN AsicSendCommandToMcu(
4385 IN PRTMP_ADAPTER pAd,
4392 VOID MacAddrRandomBssid(
4393 IN PRTMP_ADAPTER pAd,
4396 VOID MgtMacHeaderInit(
4397 IN PRTMP_ADAPTER pAd,
4398 IN OUT PHEADER_802_11 pHdr80211,
4405 IN PRTMP_ADAPTER pAd);
4408 IN PRTMP_ADAPTER pAd);
4414 #ifdef DOT11_N_SUPPORT
4416 IN PRTMP_ADAPTER pAd,
4418 #endif // DOT11_N_SUPPORT //
4420 ULONG BssTableSearch(
4425 ULONG BssSsidTableSearch(
4432 ULONG BssTableSearchWithSSID(
4439 VOID BssTableDeleteEntry(
4440 IN OUT PBSS_TABLE pTab,
4444 #ifdef DOT11_N_SUPPORT
4445 VOID BATableDeleteORIEntry(
4446 IN OUT PRTMP_ADAPTER pAd,
4447 IN BA_ORI_ENTRY *pBAORIEntry);
4449 VOID BATableDeleteRECEntry(
4450 IN OUT PRTMP_ADAPTER pAd,
4451 IN BA_REC_ENTRY *pBARECEntry);
4453 VOID BATableTearORIEntry(
4454 IN OUT PRTMP_ADAPTER pAd,
4457 IN BOOLEAN bForceDelete,
4460 VOID BATableTearRECEntry(
4461 IN OUT PRTMP_ADAPTER pAd,
4465 #endif // DOT11_N_SUPPORT //
4468 IN PRTMP_ADAPTER pAd,
4469 OUT PBSS_ENTRY pBss,
4474 IN USHORT BeaconPeriod,
4477 IN USHORT CapabilityInfo,
4479 IN UCHAR SupRateLen,
4481 IN UCHAR ExtRateLen,
4482 IN HT_CAPABILITY_IE *pHtCapability,
4483 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4484 IN UCHAR HtCapabilityLen,
4485 IN UCHAR AddHtInfoLen,
4486 IN UCHAR NewExtChanOffset,
4489 IN LARGE_INTEGER TimeStamp,
4491 IN PEDCA_PARM pEdcaParm,
4492 IN PQOS_CAPABILITY_PARM pQosCapability,
4493 IN PQBSS_LOAD_PARM pQbssLoad,
4494 IN USHORT LengthVIE,
4495 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4497 ULONG BssTableSetEntry(
4498 IN PRTMP_ADAPTER pAd,
4499 OUT PBSS_TABLE pTab,
4504 IN USHORT BeaconPeriod,
4507 IN USHORT CapabilityInfo,
4509 IN UCHAR SupRateLen,
4511 IN UCHAR ExtRateLen,
4512 IN HT_CAPABILITY_IE *pHtCapability,
4513 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4514 IN UCHAR HtCapabilityLen,
4515 IN UCHAR AddHtInfoLen,
4516 IN UCHAR NewExtChanOffset,
4519 IN LARGE_INTEGER TimeStamp,
4521 IN PEDCA_PARM pEdcaParm,
4522 IN PQOS_CAPABILITY_PARM pQosCapability,
4523 IN PQBSS_LOAD_PARM pQbssLoad,
4524 IN USHORT LengthVIE,
4525 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4527 #ifdef DOT11_N_SUPPORT
4528 VOID BATableInsertEntry(
4529 IN PRTMP_ADAPTER pAd,
4531 IN USHORT TimeOutValue,
4532 IN USHORT StartingSeq,
4535 IN UCHAR OriginatorStatus,
4536 IN BOOLEAN IsRecipient);
4538 #ifdef DOT11N_DRAFT3
4539 VOID Bss2040CoexistTimeOut(
4540 IN PVOID SystemSpecific1,
4541 IN PVOID FunctionContext,
4542 IN PVOID SystemSpecific2,
4543 IN PVOID SystemSpecific3);
4547 IN PRTMP_ADAPTER pAd);
4549 ULONG TriEventTableSetEntry(
4550 IN PRTMP_ADAPTER pAd,
4551 OUT TRIGGER_EVENT_TAB *Tab,
4553 IN HT_CAPABILITY_IE *pHtCapability,
4554 IN UCHAR HtCapabilityLen,
4556 IN UCHAR ChannelNo);
4558 VOID TriEventCounterMaintenance(
4559 IN PRTMP_ADAPTER pAd);
4560 #endif // DOT11N_DRAFT3 //
4561 #endif // DOT11_N_SUPPORT //
4563 VOID BssTableSsidSort(
4564 IN PRTMP_ADAPTER pAd,
4565 OUT BSS_TABLE *OutTab,
4569 VOID BssTableSortByRssi(
4570 IN OUT BSS_TABLE *OutTab);
4572 VOID BssCipherParse(
4573 IN OUT PBSS_ENTRY pBss);
4575 NDIS_STATUS MlmeQueueInit(
4576 IN MLME_QUEUE *Queue);
4578 VOID MlmeQueueDestroy(
4579 IN MLME_QUEUE *Queue);
4581 BOOLEAN MlmeEnqueue(
4582 IN PRTMP_ADAPTER pAd,
4588 BOOLEAN MlmeEnqueueForRecv(
4589 IN PRTMP_ADAPTER pAd,
4591 IN ULONG TimeStampHigh,
4592 IN ULONG TimeStampLow,
4601 BOOLEAN MlmeDequeue(
4602 IN MLME_QUEUE *Queue,
4603 OUT MLME_QUEUE_ELEM **Elem);
4605 VOID MlmeRestartStateMachine(
4606 IN PRTMP_ADAPTER pAd);
4608 BOOLEAN MlmeQueueEmpty(
4609 IN MLME_QUEUE *Queue);
4611 BOOLEAN MlmeQueueFull(
4612 IN MLME_QUEUE *Queue);
4614 BOOLEAN MsgTypeSubst(
4615 IN PRTMP_ADAPTER pAd,
4616 IN PFRAME_802_11 pFrame,
4620 VOID StateMachineInit(
4621 IN STATE_MACHINE *Sm,
4622 IN STATE_MACHINE_FUNC Trans[],
4625 IN STATE_MACHINE_FUNC DefFunc,
4629 VOID StateMachineSetAction(
4630 IN STATE_MACHINE *S,
4633 IN STATE_MACHINE_FUNC F);
4635 VOID StateMachinePerformAction(
4636 IN PRTMP_ADAPTER pAd,
4637 IN STATE_MACHINE *S,
4638 IN MLME_QUEUE_ELEM *Elem);
4641 IN PRTMP_ADAPTER pAd,
4642 IN MLME_QUEUE_ELEM *Elem);
4644 VOID AssocStateMachineInit(
4645 IN PRTMP_ADAPTER pAd,
4646 IN STATE_MACHINE *Sm,
4647 OUT STATE_MACHINE_FUNC Trans[]);
4649 VOID ReassocTimeout(
4650 IN PVOID SystemSpecific1,
4651 IN PVOID FunctionContext,
4652 IN PVOID SystemSpecific2,
4653 IN PVOID SystemSpecific3);
4656 IN PVOID SystemSpecific1,
4657 IN PVOID FunctionContext,
4658 IN PVOID SystemSpecific2,
4659 IN PVOID SystemSpecific3);
4661 VOID DisassocTimeout(
4662 IN PVOID SystemSpecific1,
4663 IN PVOID FunctionContext,
4664 IN PVOID SystemSpecific2,
4665 IN PVOID SystemSpecific3);
4667 //----------------------------------------------
4668 VOID MlmeDisassocReqAction(
4669 IN PRTMP_ADAPTER pAd,
4670 IN MLME_QUEUE_ELEM *Elem);
4672 VOID MlmeAssocReqAction(
4673 IN PRTMP_ADAPTER pAd,
4674 IN MLME_QUEUE_ELEM *Elem);
4676 VOID MlmeReassocReqAction(
4677 IN PRTMP_ADAPTER pAd,
4678 IN MLME_QUEUE_ELEM *Elem);
4680 VOID MlmeDisassocReqAction(
4681 IN PRTMP_ADAPTER pAd,
4682 IN MLME_QUEUE_ELEM *Elem);
4684 VOID PeerAssocRspAction(
4685 IN PRTMP_ADAPTER pAd,
4686 IN MLME_QUEUE_ELEM *Elem);
4688 VOID PeerReassocRspAction(
4689 IN PRTMP_ADAPTER pAd,
4690 IN MLME_QUEUE_ELEM *Elem);
4692 VOID PeerDisassocAction(
4693 IN PRTMP_ADAPTER pAd,
4694 IN MLME_QUEUE_ELEM *Elem);
4696 VOID DisassocTimeoutAction(
4697 IN PRTMP_ADAPTER pAd,
4698 IN MLME_QUEUE_ELEM *Elem);
4700 VOID AssocTimeoutAction(
4701 IN PRTMP_ADAPTER pAd,
4702 IN MLME_QUEUE_ELEM *Elem);
4704 VOID ReassocTimeoutAction(
4705 IN PRTMP_ADAPTER pAd,
4706 IN MLME_QUEUE_ELEM *Elem);
4709 IN PRTMP_ADAPTER pAd,
4712 VOID SwitchBetweenWepAndCkip(
4713 IN PRTMP_ADAPTER pAd);
4715 VOID InvalidStateWhenAssoc(
4716 IN PRTMP_ADAPTER pAd,
4717 IN MLME_QUEUE_ELEM *Elem);
4719 VOID InvalidStateWhenReassoc(
4720 IN PRTMP_ADAPTER pAd,
4721 IN MLME_QUEUE_ELEM *Elem);
4723 VOID InvalidStateWhenDisassociate(
4724 IN PRTMP_ADAPTER pAd,
4725 IN MLME_QUEUE_ELEM *Elem);
4728 VOID MlmeCntlConfirm(
4729 IN PRTMP_ADAPTER pAd,
4735 IN PRTMP_ADAPTER pAd);
4737 VOID ComposeNullFrame(
4738 IN PRTMP_ADAPTER pAd);
4741 IN PRTMP_ADAPTER pAd,
4743 IN USHORT CapabilityInfo,
4746 IN UCHAR SupRateLen,
4748 IN UCHAR ExtRateLen,
4749 IN PEDCA_PARM pEdcaParm,
4750 IN HT_CAPABILITY_IE *pHtCapability,
4751 IN UCHAR HtCapabilityLen,
4752 IN ADD_HT_INFO_IE *pAddHtInfo);
4754 VOID AuthStateMachineInit(
4755 IN PRTMP_ADAPTER pAd,
4756 IN PSTATE_MACHINE sm,
4757 OUT STATE_MACHINE_FUNC Trans[]);
4760 IN PVOID SystemSpecific1,
4761 IN PVOID FunctionContext,
4762 IN PVOID SystemSpecific2,
4763 IN PVOID SystemSpecific3);
4765 VOID MlmeAuthReqAction(
4766 IN PRTMP_ADAPTER pAd,
4767 IN MLME_QUEUE_ELEM *Elem);
4769 VOID PeerAuthRspAtSeq2Action(
4770 IN PRTMP_ADAPTER pAd,
4771 IN MLME_QUEUE_ELEM *Elem);
4773 VOID PeerAuthRspAtSeq4Action(
4774 IN PRTMP_ADAPTER pAd,
4775 IN MLME_QUEUE_ELEM *Elem);
4777 VOID AuthTimeoutAction(
4778 IN PRTMP_ADAPTER pAd,
4779 IN MLME_QUEUE_ELEM *Elem);
4782 IN PRTMP_ADAPTER pAd,
4785 VOID MlmeDeauthReqAction(
4786 IN PRTMP_ADAPTER pAd,
4787 IN MLME_QUEUE_ELEM *Elem);
4789 VOID InvalidStateWhenAuth(
4790 IN PRTMP_ADAPTER pAd,
4791 IN MLME_QUEUE_ELEM *Elem);
4793 //=============================================
4795 VOID AuthRspStateMachineInit(
4796 IN PRTMP_ADAPTER pAd,
4797 IN PSTATE_MACHINE Sm,
4798 IN STATE_MACHINE_FUNC Trans[]);
4800 VOID PeerDeauthAction(
4801 IN PRTMP_ADAPTER pAd,
4802 IN MLME_QUEUE_ELEM *Elem);
4804 VOID PeerAuthSimpleRspGenAndSend(
4805 IN PRTMP_ADAPTER pAd,
4806 IN PHEADER_802_11 pHdr80211,
4813 // Private routines in dls.c
4816 #ifdef CONFIG_STA_SUPPORT
4817 #ifdef QOS_DLS_SUPPORT
4818 void DlsStateMachineInit(
4819 IN PRTMP_ADAPTER pAd,
4820 IN STATE_MACHINE *Sm,
4821 OUT STATE_MACHINE_FUNC Trans[]);
4823 VOID MlmeDlsReqAction(
4824 IN PRTMP_ADAPTER pAd,
4825 IN MLME_QUEUE_ELEM *Elem);
4827 VOID PeerDlsReqAction(
4828 IN PRTMP_ADAPTER pAd,
4829 IN MLME_QUEUE_ELEM *Elem);
4831 VOID PeerDlsRspAction(
4832 IN PRTMP_ADAPTER pAd,
4833 IN MLME_QUEUE_ELEM *Elem);
4835 VOID MlmeDlsTearDownAction(
4836 IN PRTMP_ADAPTER pAd,
4837 IN MLME_QUEUE_ELEM *Elem);
4839 VOID PeerDlsTearDownAction(
4840 IN PRTMP_ADAPTER pAd,
4841 IN MLME_QUEUE_ELEM *Elem);
4843 VOID RTMPCheckDLSTimeOut(
4844 IN PRTMP_ADAPTER pAd);
4846 BOOLEAN RTMPRcvFrameDLSCheck(
4847 IN PRTMP_ADAPTER pAd,
4848 IN PHEADER_802_11 pHeader,
4850 IN PRT28XX_RXD_STRUC pRxD);
4852 INT RTMPCheckDLSFrame(
4853 IN PRTMP_ADAPTER pAd,
4856 VOID RTMPSendDLSTearDownFrame(
4857 IN PRTMP_ADAPTER pAd,
4860 NDIS_STATUS RTMPSendSTAKeyRequest(
4861 IN PRTMP_ADAPTER pAd,
4864 NDIS_STATUS RTMPSendSTAKeyHandShake(
4865 IN PRTMP_ADAPTER pAd,
4868 VOID DlsTimeoutAction(
4869 IN PVOID SystemSpecific1,
4870 IN PVOID FunctionContext,
4871 IN PVOID SystemSpecific2,
4872 IN PVOID SystemSpecific3);
4874 BOOLEAN MlmeDlsReqSanity(
4875 IN PRTMP_ADAPTER pAd,
4878 OUT PRT_802_11_DLS *pDLS,
4879 OUT PUSHORT pReason);
4881 INT Set_DlsEntryInfo_Display_Proc(
4882 IN PRTMP_ADAPTER pAd,
4885 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4886 IN PRTMP_ADAPTER pAd,
4888 IN UINT DlsEntryIdx);
4890 BOOLEAN MacTableDeleteDlsEntry(
4891 IN PRTMP_ADAPTER pAd,
4895 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4896 IN PRTMP_ADAPTER pAd,
4898 IN BOOLEAN bResetIdelCount);
4900 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4901 IN PRTMP_ADAPTER pAd,
4904 IN BOOLEAN bResetIdelCount);
4906 INT Set_DlsAddEntry_Proc(
4907 IN PRTMP_ADAPTER pAd,
4910 INT Set_DlsTearDownEntry_Proc(
4911 IN PRTMP_ADAPTER pAd,
4913 #endif // QOS_DLS_SUPPORT //
4914 #endif // CONFIG_STA_SUPPORT //
4916 #ifdef QOS_DLS_SUPPORT
4917 BOOLEAN PeerDlsReqSanity(
4918 IN PRTMP_ADAPTER pAd,
4923 OUT USHORT *pCapabilityInfo,
4924 OUT USHORT *pDlsTimeout,
4925 OUT UCHAR *pRatesLen,
4927 OUT UCHAR *pHtCapabilityLen,
4928 OUT HT_CAPABILITY_IE *pHtCapability);
4930 BOOLEAN PeerDlsRspSanity(
4931 IN PRTMP_ADAPTER pAd,
4936 OUT USHORT *pCapabilityInfo,
4937 OUT USHORT *pStatus,
4938 OUT UCHAR *pRatesLen,
4940 OUT UCHAR *pHtCapabilityLen,
4941 OUT HT_CAPABILITY_IE *pHtCapability);
4943 BOOLEAN PeerDlsTearDownSanity(
4944 IN PRTMP_ADAPTER pAd,
4949 OUT USHORT *pReason);
4950 #endif // QOS_DLS_SUPPORT //
4952 //========================================
4954 VOID SyncStateMachineInit(
4955 IN PRTMP_ADAPTER pAd,
4956 IN STATE_MACHINE *Sm,
4957 OUT STATE_MACHINE_FUNC Trans[]);
4960 IN PVOID SystemSpecific1,
4961 IN PVOID FunctionContext,
4962 IN PVOID SystemSpecific2,
4963 IN PVOID SystemSpecific3);
4966 IN PVOID SystemSpecific1,
4967 IN PVOID FunctionContext,
4968 IN PVOID SystemSpecific2,
4969 IN PVOID SystemSpecific3);
4971 VOID MlmeScanReqAction(
4972 IN PRTMP_ADAPTER pAd,
4973 IN MLME_QUEUE_ELEM *Elem);
4975 VOID InvalidStateWhenScan(
4976 IN PRTMP_ADAPTER pAd,
4977 IN MLME_QUEUE_ELEM *Elem);
4979 VOID InvalidStateWhenJoin(
4980 IN PRTMP_ADAPTER pAd,
4981 IN MLME_QUEUE_ELEM *Elem);
4983 VOID InvalidStateWhenStart(
4984 IN PRTMP_ADAPTER pAd,
4985 IN MLME_QUEUE_ELEM *Elem);
4988 IN PRTMP_ADAPTER pAd,
4989 IN MLME_QUEUE_ELEM *Elem);
4991 VOID EnqueueProbeRequest(
4992 IN PRTMP_ADAPTER pAd);
4994 BOOLEAN ScanRunning(
4995 IN PRTMP_ADAPTER pAd);
4996 //=========================================
4999 IN PRTMP_ADAPTER pAd,
5000 IN STATE_MACHINE *S,
5001 OUT STATE_MACHINE_FUNC Trans[]);
5003 VOID MlmeCntlMachinePerformAction(
5004 IN PRTMP_ADAPTER pAd,
5005 IN STATE_MACHINE *S,
5006 IN MLME_QUEUE_ELEM *Elem);
5009 IN PRTMP_ADAPTER pAd,
5010 IN MLME_QUEUE_ELEM *Elem);
5012 VOID CntlOidScanProc(
5013 IN PRTMP_ADAPTER pAd,
5014 IN MLME_QUEUE_ELEM *Elem);
5016 VOID CntlOidSsidProc(
5017 IN PRTMP_ADAPTER pAd,
5018 IN MLME_QUEUE_ELEM * Elem);
5020 VOID CntlOidRTBssidProc(
5021 IN PRTMP_ADAPTER pAd,
5022 IN MLME_QUEUE_ELEM * Elem);
5024 VOID CntlMlmeRoamingProc(
5025 IN PRTMP_ADAPTER pAd,
5026 IN MLME_QUEUE_ELEM * Elem);
5028 VOID CntlWaitDisassocProc(
5029 IN PRTMP_ADAPTER pAd,
5030 IN MLME_QUEUE_ELEM *Elem);
5032 VOID CntlWaitJoinProc(
5033 IN PRTMP_ADAPTER pAd,
5034 IN MLME_QUEUE_ELEM *Elem);
5036 VOID CntlWaitReassocProc(
5037 IN PRTMP_ADAPTER pAd,
5038 IN MLME_QUEUE_ELEM *Elem);
5040 VOID CntlWaitStartProc(
5041 IN PRTMP_ADAPTER pAd,
5042 IN MLME_QUEUE_ELEM *Elem);
5044 VOID CntlWaitAuthProc(
5045 IN PRTMP_ADAPTER pAd,
5046 IN MLME_QUEUE_ELEM *Elem);
5048 VOID CntlWaitAuthProc2(
5049 IN PRTMP_ADAPTER pAd,
5050 IN MLME_QUEUE_ELEM *Elem);
5052 VOID CntlWaitAssocProc(
5053 IN PRTMP_ADAPTER pAd,
5054 IN MLME_QUEUE_ELEM *Elem);
5056 #ifdef QOS_DLS_SUPPORT
5057 VOID CntlOidDLSSetupProc(
5058 IN PRTMP_ADAPTER pAd,
5059 IN MLME_QUEUE_ELEM *Elem);
5060 #endif // QOS_DLS_SUPPORT //
5063 IN PRTMP_ADAPTER pAd,
5067 IN PRTMP_ADAPTER pAd,
5068 IN BOOLEAN IsReqFromAP);
5070 VOID IterateOnBssTab(
5071 IN PRTMP_ADAPTER pAd);
5073 VOID IterateOnBssTab2(
5074 IN PRTMP_ADAPTER pAd);;
5077 IN PRTMP_ADAPTER pAd,
5078 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
5082 IN PRTMP_ADAPTER pAd,
5083 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
5085 IN USHORT CapabilityInfo,
5087 IN USHORT ListenIntv);
5090 IN PRTMP_ADAPTER pAd,
5091 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5097 VOID DisassocParmFill(
5098 IN PRTMP_ADAPTER pAd,
5099 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5104 IN PRTMP_ADAPTER pAd,
5105 IN OUT MLME_START_REQ_STRUCT *StartReq,
5110 IN PRTMP_ADAPTER pAd,
5111 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5116 IN PRTMP_ADAPTER pAd);
5118 VOID EnqueueBeaconFrame(
5119 IN PRTMP_ADAPTER pAd);
5121 VOID MlmeJoinReqAction(
5122 IN PRTMP_ADAPTER pAd,
5123 IN MLME_QUEUE_ELEM *Elem);
5125 VOID MlmeScanReqAction(
5126 IN PRTMP_ADAPTER pAd,
5127 IN MLME_QUEUE_ELEM *Elem);
5129 VOID MlmeStartReqAction(
5130 IN PRTMP_ADAPTER pAd,
5131 IN MLME_QUEUE_ELEM *Elem);
5133 VOID ScanTimeoutAction(
5134 IN PRTMP_ADAPTER pAd,
5135 IN MLME_QUEUE_ELEM *Elem);
5137 VOID BeaconTimeoutAtJoinAction(
5138 IN PRTMP_ADAPTER pAd,
5139 IN MLME_QUEUE_ELEM *Elem);
5141 VOID PeerBeaconAtScanAction(
5142 IN PRTMP_ADAPTER pAd,
5143 IN MLME_QUEUE_ELEM *Elem);
5145 VOID PeerBeaconAtJoinAction(
5146 IN PRTMP_ADAPTER pAd,
5147 IN MLME_QUEUE_ELEM *Elem);
5150 IN PRTMP_ADAPTER pAd,
5151 IN MLME_QUEUE_ELEM *Elem);
5153 VOID PeerProbeReqAction(
5154 IN PRTMP_ADAPTER pAd,
5155 IN MLME_QUEUE_ELEM *Elem);
5157 VOID ScanNextChannel(
5158 IN PRTMP_ADAPTER pAd);
5160 ULONG MakeIbssBeacon(
5161 IN PRTMP_ADAPTER pAd);
5163 VOID CCXAdjacentAPReport(
5164 IN PRTMP_ADAPTER pAd);
5166 BOOLEAN MlmeScanReqSanity(
5167 IN PRTMP_ADAPTER pAd,
5173 OUT UCHAR *ScanType);
5175 BOOLEAN PeerBeaconAndProbeRspSanity(
5176 IN PRTMP_ADAPTER pAd,
5179 IN UCHAR MsgChannel,
5183 OUT UCHAR *pSsidLen,
5184 OUT UCHAR *pBssType,
5185 OUT USHORT *pBeaconPeriod,
5186 OUT UCHAR *pChannel,
5187 OUT UCHAR *pNewChannel,
5188 OUT LARGE_INTEGER *pTimestamp,
5189 OUT CF_PARM *pCfParm,
5190 OUT USHORT *pAtimWin,
5191 OUT USHORT *pCapabilityInfo,
5193 OUT UCHAR *pDtimCount,
5194 OUT UCHAR *pDtimPeriod,
5195 OUT UCHAR *pBcastFlag,
5196 OUT UCHAR *pMessageToMe,
5197 OUT UCHAR SupRate[],
5198 OUT UCHAR *pSupRateLen,
5199 OUT UCHAR ExtRate[],
5200 OUT UCHAR *pExtRateLen,
5201 OUT UCHAR *pCkipFlag,
5202 OUT UCHAR *pAironetCellPowerLimit,
5203 OUT PEDCA_PARM pEdcaParm,
5204 OUT PQBSS_LOAD_PARM pQbssLoad,
5205 OUT PQOS_CAPABILITY_PARM pQosCapability,
5206 OUT ULONG *pRalinkIe,
5207 OUT UCHAR *pHtCapabilityLen,
5208 #ifdef CONFIG_STA_SUPPORT
5209 OUT UCHAR *pPreNHtCapabilityLen,
5210 #endif // CONFIG_STA_SUPPORT //
5211 OUT HT_CAPABILITY_IE *pHtCapability,
5212 OUT UCHAR *AddHtInfoLen,
5213 OUT ADD_HT_INFO_IE *AddHtInfo,
5214 OUT UCHAR *NewExtChannel,
5215 OUT USHORT *LengthVIE,
5216 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5218 BOOLEAN PeerAddBAReqActionSanity(
5219 IN PRTMP_ADAPTER pAd,
5224 BOOLEAN PeerAddBARspActionSanity(
5225 IN PRTMP_ADAPTER pAd,
5229 BOOLEAN PeerDelBAActionSanity(
5230 IN PRTMP_ADAPTER pAd,
5235 BOOLEAN MlmeAssocReqSanity(
5236 IN PRTMP_ADAPTER pAd,
5240 OUT USHORT *CapabilityInfo,
5242 OUT USHORT *ListenIntv);
5244 BOOLEAN MlmeAuthReqSanity(
5245 IN PRTMP_ADAPTER pAd,
5252 BOOLEAN MlmeStartReqSanity(
5253 IN PRTMP_ADAPTER pAd,
5257 OUT UCHAR *Ssidlen);
5259 BOOLEAN PeerAuthSanity(
5260 IN PRTMP_ADAPTER pAd,
5267 OUT CHAR ChlgText[]);
5269 BOOLEAN PeerAssocRspSanity(
5270 IN PRTMP_ADAPTER pAd,
5274 OUT USHORT *pCapabilityInfo,
5275 OUT USHORT *pStatus,
5277 OUT UCHAR SupRate[],
5278 OUT UCHAR *pSupRateLen,
5279 OUT UCHAR ExtRate[],
5280 OUT UCHAR *pExtRateLen,
5281 OUT HT_CAPABILITY_IE *pHtCapability,
5282 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5283 OUT UCHAR *pHtCapabilityLen,
5284 OUT UCHAR *pAddHtInfoLen,
5285 OUT UCHAR *pNewExtChannelOffset,
5286 OUT PEDCA_PARM pEdcaParm,
5287 OUT UCHAR *pCkipFlag);
5289 BOOLEAN PeerDisassocSanity(
5290 IN PRTMP_ADAPTER pAd,
5294 OUT USHORT *Reason);
5296 BOOLEAN PeerWpaMessageSanity(
5297 IN PRTMP_ADAPTER pAd,
5298 IN PEAPOL_PACKET pMsg,
5301 IN MAC_TABLE_ENTRY *pEntry);
5303 BOOLEAN PeerDeauthSanity(
5304 IN PRTMP_ADAPTER pAd,
5308 OUT USHORT *Reason);
5310 BOOLEAN PeerProbeReqSanity(
5311 IN PRTMP_ADAPTER pAd,
5316 OUT UCHAR *pSsidLen);
5322 OUT UCHAR *BcastFlag,
5323 OUT UCHAR *DtimCount,
5324 OUT UCHAR *DtimPeriod,
5325 OUT UCHAR *MessageToMe);
5327 UCHAR ChannelSanity(
5328 IN PRTMP_ADAPTER pAd,
5331 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5332 IN PBSS_ENTRY pBss);
5334 #if 0 // It's omitted
5335 NDIS_STATUS RTMPWepKeySanity(
5336 IN PRTMP_ADAPTER pAdapter,
5340 BOOLEAN MlmeDelBAReqSanity(
5341 IN PRTMP_ADAPTER pAd,
5345 BOOLEAN MlmeAddBAReqSanity(
5346 IN PRTMP_ADAPTER pAd,
5351 ULONG MakeOutgoingFrame(
5353 OUT ULONG *Length, ...);
5356 IN PRTMP_ADAPTER pAd,
5360 IN PRTMP_ADAPTER pAd);
5362 VOID AsicUpdateAutoFallBackTable(
5363 IN PRTMP_ADAPTER pAd,
5366 VOID MlmePeriodicExec(
5367 IN PVOID SystemSpecific1,
5368 IN PVOID FunctionContext,
5369 IN PVOID SystemSpecific2,
5370 IN PVOID SystemSpecific3);
5373 IN PVOID SystemSpecific1,
5374 IN PVOID FunctionContext,
5375 IN PVOID SystemSpecific2,
5376 IN PVOID SystemSpecific3);
5379 IN PVOID SystemSpecific1,
5380 IN PVOID FunctionContext,
5381 IN PVOID SystemSpecific2,
5382 IN PVOID SystemSpecific3);
5384 VOID STAMlmePeriodicExec(
5388 IN PRTMP_ADAPTER pAd);
5390 VOID MlmeAutoReconnectLastSSID(
5391 IN PRTMP_ADAPTER pAd);
5393 BOOLEAN MlmeValidateSSID(
5397 VOID MlmeCheckForRoaming(
5398 IN PRTMP_ADAPTER pAd,
5401 VOID MlmeCheckForFastRoaming(
5402 IN PRTMP_ADAPTER pAd,
5405 VOID MlmeDynamicTxRateSwitching(
5406 IN PRTMP_ADAPTER pAd);
5409 IN PRTMP_ADAPTER pAd,
5410 IN PMAC_TABLE_ENTRY pEntry,
5411 IN PRTMP_TX_RATE_SWITCH pTxRate);
5413 VOID MlmeSelectTxRateTable(
5414 IN PRTMP_ADAPTER pAd,
5415 IN PMAC_TABLE_ENTRY pEntry,
5417 IN PUCHAR pTableSize,
5418 IN PUCHAR pInitTxRateIdx);
5420 VOID MlmeCalculateChannelQuality(
5421 IN PRTMP_ADAPTER pAd,
5424 VOID MlmeCheckPsmChange(
5425 IN PRTMP_ADAPTER pAd,
5429 IN PRTMP_ADAPTER pAd,
5432 VOID MlmeSetTxPreamble(
5433 IN PRTMP_ADAPTER pAd,
5434 IN USHORT TxPreamble);
5436 VOID UpdateBasicRateBitmap(
5437 IN PRTMP_ADAPTER pAd);
5439 VOID MlmeUpdateTxRates(
5440 IN PRTMP_ADAPTER pAd,
5444 #ifdef DOT11_N_SUPPORT
5445 VOID MlmeUpdateHtTxRates(
5446 IN PRTMP_ADAPTER pAd,
5448 #endif // DOT11_N_SUPPORT //
5450 VOID RTMPCheckRates(
5451 IN PRTMP_ADAPTER pAd,
5452 IN OUT UCHAR SupRate[],
5453 IN OUT UCHAR *SupRateLen);
5455 #ifdef CONFIG_STA_SUPPORT
5456 BOOLEAN RTMPCheckChannel(
5457 IN PRTMP_ADAPTER pAd,
5458 IN UCHAR CentralChannel,
5460 #endif // CONFIG_STA_SUPPORT //
5462 BOOLEAN RTMPCheckHt(
5463 IN PRTMP_ADAPTER pAd,
5465 IN OUT HT_CAPABILITY_IE *pHtCapability,
5466 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5468 VOID StaQuickResponeForRateUpExec(
5469 IN PVOID SystemSpecific1,
5470 IN PVOID FunctionContext,
5471 IN PVOID SystemSpecific2,
5472 IN PVOID SystemSpecific3);
5474 VOID AsicBbpTuning1(
5475 IN PRTMP_ADAPTER pAd);
5477 VOID AsicBbpTuning2(
5478 IN PRTMP_ADAPTER pAd);
5480 VOID RTMPUpdateMlmeRate(
5481 IN PRTMP_ADAPTER pAd);
5484 IN PRTMP_ADAPTER pAd,
5489 VOID AsicEvaluateRxAnt(
5490 IN PRTMP_ADAPTER pAd);
5492 VOID AsicRxAntEvalTimeout(
5493 IN PVOID SystemSpecific1,
5494 IN PVOID FunctionContext,
5495 IN PVOID SystemSpecific2,
5496 IN PVOID SystemSpecific3);
5498 VOID APSDPeriodicExec(
5499 IN PVOID SystemSpecific1,
5500 IN PVOID FunctionContext,
5501 IN PVOID SystemSpecific2,
5502 IN PVOID SystemSpecific3);
5504 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5505 IN PRTMP_ADAPTER pAd,
5506 IN PMAC_TABLE_ENTRY pEntry);
5508 UCHAR RTMPStaFixedTxMode(
5509 IN PRTMP_ADAPTER pAd,
5510 IN PMAC_TABLE_ENTRY pEntry);
5512 VOID RTMPUpdateLegacyTxSetting(
5513 UCHAR fixed_tx_mode,
5514 PMAC_TABLE_ENTRY pEntry);
5516 BOOLEAN RTMPAutoRateSwitchCheck(
5517 IN PRTMP_ADAPTER pAd);
5519 NDIS_STATUS MlmeInit(
5520 IN PRTMP_ADAPTER pAd);
5523 IN PRTMP_ADAPTER pAd);
5526 IN PRTMP_ADAPTER pAd);
5528 VOID MlmeResetRalinkCounters(
5529 IN PRTMP_ADAPTER pAd);
5531 VOID BuildChannelList(
5532 IN PRTMP_ADAPTER pAd);
5535 IN PRTMP_ADAPTER pAd);
5538 IN PRTMP_ADAPTER pAd,
5541 VOID ChangeToCellPowerLimit(
5542 IN PRTMP_ADAPTER pAd,
5543 IN UCHAR AironetCellPowerLimit);
5546 IN PRTMP_ADAPTER pAd,
5550 IN PRTMP_ADAPTER pAd,
5554 IN PRTMP_ADAPTER pAd);
5557 IN PRTMP_ADAPTER pAd,
5562 IN PRTMP_ADAPTER pAd);
5565 IN PRTMP_ADAPTER pAd);
5568 IN PRTMP_ADAPTER pAd);
5570 USHORT RTMP_EEPROM_READ16(
5571 IN PRTMP_ADAPTER pAd,
5574 VOID RTMP_EEPROM_WRITE16(
5575 IN PRTMP_ADAPTER pAd,
5580 // Prototypes of function definition in rtmp_tkip.c
5582 VOID RTMPInitTkipEngine(
5583 IN PRTMP_ADAPTER pAd,
5592 VOID RTMPInitMICEngine(
5593 IN PRTMP_ADAPTER pAd,
5597 IN UCHAR UserPriority,
5600 BOOLEAN RTMPTkipCompareMICValue(
5601 IN PRTMP_ADAPTER pAd,
5606 IN UCHAR UserPriority,
5609 VOID RTMPCalculateMICValue(
5610 IN PRTMP_ADAPTER pAd,
5611 IN PNDIS_PACKET pPacket,
5613 IN PCIPHER_KEY pKey,
5616 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5617 IN PRTMP_ADAPTER pAd,
5625 VOID RTMPTkipAppendByte(
5626 IN PTKIP_KEY_INFO pTkip,
5629 VOID RTMPTkipAppend(
5630 IN PTKIP_KEY_INFO pTkip,
5634 VOID RTMPTkipGetMIC(
5635 IN PTKIP_KEY_INFO pTkip);
5637 BOOLEAN RTMPSoftDecryptTKIP(
5638 IN PRTMP_ADAPTER pAd,
5640 IN ULONG DataByteCnt,
5641 IN UCHAR UserPriority,
5642 IN PCIPHER_KEY pWpaKey);
5644 BOOLEAN RTMPSoftDecryptAES(
5645 IN PRTMP_ADAPTER pAd,
5647 IN ULONG DataByteCnt,
5648 IN PCIPHER_KEY pWpaKey);
5650 #if 0 // removed by AlbertY
5651 NDIS_STATUS RTMPWPAAddKeyProc(
5652 IN PRTMP_ADAPTER pAd,
5657 // Prototypes of function definition in cmm_info.c
5659 NDIS_STATUS RTMPWPARemoveKeyProc(
5660 IN PRTMP_ADAPTER pAd,
5663 VOID RTMPWPARemoveAllKeys(
5664 IN PRTMP_ADAPTER pAd);
5666 BOOLEAN RTMPCheckStrPrintAble(
5670 VOID RTMPSetPhyMode(
5671 IN PRTMP_ADAPTER pAd,
5674 VOID RTMPUpdateHTIE(
5675 IN RT_HT_CAPABILITY *pRtHt,
5677 OUT HT_CAPABILITY_IE *pHtCapability,
5678 OUT ADD_HT_INFO_IE *pAddHtInfo);
5680 VOID RTMPAddWcidAttributeEntry(
5681 IN PRTMP_ADAPTER pAd,
5685 IN MAC_TABLE_ENTRY *pEntry);
5687 CHAR *GetEncryptType(
5693 VOID RTMPIoctlGetSiteSurvey(
5694 IN PRTMP_ADAPTER pAdapter,
5695 IN struct iwreq *wrq);
5697 VOID RTMPIoctlGetMacTable(
5698 IN PRTMP_ADAPTER pAd,
5699 IN struct iwreq *wrq);
5701 VOID RTMPIndicateWPA2Status(
5702 IN PRTMP_ADAPTER pAdapter);
5704 VOID RTMPOPModeSwitching(
5705 IN PRTMP_ADAPTER pAd);
5707 #ifdef CONFIG_STA_SUPPORT
5708 VOID RTMPAddBSSIDCipher(
5709 IN PRTMP_ADAPTER pAd,
5711 IN PNDIS_802_11_KEY pKey,
5712 IN UCHAR CipherAlg);
5713 #endif // CONFIG_STA_SUPPORT //
5715 #ifdef DOT11_N_SUPPORT
5717 IN PRTMP_ADAPTER pAd,
5718 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5720 VOID RTMPSetIndividualHT(
5721 IN PRTMP_ADAPTER pAd,
5723 #endif // DOT11_N_SUPPORT //
5725 VOID RTMPSendWirelessEvent(
5726 IN PRTMP_ADAPTER pAd,
5727 IN USHORT Event_flag,
5732 VOID NICUpdateCntlCounters(
5733 IN PRTMP_ADAPTER pAd,
5734 IN PHEADER_802_11 pHeader,
5736 IN PRXWI_STRUC pRxWI);
5738 // prototype in wpa.c
5740 BOOLEAN WpaMsgTypeSubst(
5744 VOID WpaPskStateMachineInit(
5745 IN PRTMP_ADAPTER pAd,
5746 IN STATE_MACHINE *S,
5747 OUT STATE_MACHINE_FUNC Trans[]);
5749 VOID WpaEAPOLKeyAction(
5750 IN PRTMP_ADAPTER pAd,
5751 IN MLME_QUEUE_ELEM *Elem);
5753 VOID WpaPairMsg1Action(
5754 IN PRTMP_ADAPTER pAd,
5755 IN MLME_QUEUE_ELEM *Elem);
5757 VOID WpaPairMsg3Action(
5758 IN PRTMP_ADAPTER pAd,
5759 IN MLME_QUEUE_ELEM *Elem);
5761 VOID WpaGroupMsg1Action(
5762 IN PRTMP_ADAPTER pAd,
5763 IN MLME_QUEUE_ELEM *Elem);
5765 VOID WpaMacHeaderInit(
5766 IN PRTMP_ADAPTER pAd,
5767 IN OUT PHEADER_802_11 pHdr80211,
5771 VOID Wpa2PairMsg1Action(
5772 IN PRTMP_ADAPTER pAd,
5773 IN MLME_QUEUE_ELEM *Elem);
5775 VOID Wpa2PairMsg3Action(
5776 IN PRTMP_ADAPTER pAd,
5777 IN MLME_QUEUE_ELEM *Elem);
5779 BOOLEAN ParseKeyData(
5780 IN PRTMP_ADAPTER pAd,
5782 IN UCHAR KeyDataLen,
5783 IN UCHAR bPairewise);
5785 VOID RTMPToWirelessSta(
5786 IN PRTMP_ADAPTER pAd,
5787 IN PUCHAR pHeader802_3,
5791 IN BOOLEAN is4wayFrame);
5819 IN PRTMP_ADAPTER pAd,
5829 IN PRTMP_ADAPTER pAd,
5834 // prototype in aironet.c
5836 VOID AironetStateMachineInit(
5837 IN PRTMP_ADAPTER pAd,
5838 IN STATE_MACHINE *S,
5839 OUT STATE_MACHINE_FUNC Trans[]);
5841 VOID AironetMsgAction(
5842 IN PRTMP_ADAPTER pAd,
5843 IN MLME_QUEUE_ELEM *Elem);
5845 VOID AironetRequestAction(
5846 IN PRTMP_ADAPTER pAd,
5847 IN MLME_QUEUE_ELEM *Elem);
5849 VOID ChannelLoadRequestAction(
5850 IN PRTMP_ADAPTER pAd,
5853 VOID NoiseHistRequestAction(
5854 IN PRTMP_ADAPTER pAd,
5857 VOID BeaconRequestAction(
5858 IN PRTMP_ADAPTER pAd,
5861 VOID AironetReportAction(
5862 IN PRTMP_ADAPTER pAd,
5863 IN MLME_QUEUE_ELEM *Elem);
5865 VOID ChannelLoadReportAction(
5866 IN PRTMP_ADAPTER pAd,
5869 VOID NoiseHistReportAction(
5870 IN PRTMP_ADAPTER pAd,
5873 VOID AironetFinalReportAction(
5874 IN PRTMP_ADAPTER pAd);
5876 VOID BeaconReportAction(
5877 IN PRTMP_ADAPTER pAd,
5880 VOID AironetAddBeaconReport(
5881 IN PRTMP_ADAPTER pAd,
5883 IN PMLME_QUEUE_ELEM pElem);
5885 VOID AironetCreateBeaconReportFromBssTable(
5886 IN PRTMP_ADAPTER pAd);
5888 VOID DBGPRINT_TX_RING(
5889 IN PRTMP_ADAPTER pAd,
5892 VOID DBGPRINT_RX_RING(
5893 IN PRTMP_ADAPTER pAd);
5896 IN PRTMP_ADAPTER pAd,
5898 IN UCHAR RssiNumber);
5901 #ifdef DOT11N_DRAFT3
5902 VOID BuildEffectedChannelList(
5903 IN PRTMP_ADAPTER pAd);
5904 #endif // DOT11N_DRAFT3 //
5907 VOID APAsicEvaluateRxAnt(
5908 IN PRTMP_ADAPTER pAd);
5911 VOID APAsicRxAntEvalTimeout(
5912 IN PRTMP_ADAPTER pAd);
5915 // function prototype in cmm_wpa.c
5917 BOOLEAN RTMPCheckWPAframe(
5918 IN PRTMP_ADAPTER pAd,
5919 IN PMAC_TABLE_ENTRY pEntry,
5921 IN ULONG DataByteCount,
5922 IN UCHAR FromWhichBSSID);
5924 VOID AES_GTK_KEY_UNWRAP(
5926 OUT UCHAR *plaintext,
5928 IN UCHAR *ciphertext);
5930 BOOLEAN RTMPCheckRSNIE(
5931 IN PRTMP_ADAPTER pAd,
5934 IN MAC_TABLE_ENTRY *pEntry,
5937 BOOLEAN RTMPParseEapolKeyData(
5938 IN PRTMP_ADAPTER pAd,
5940 IN UCHAR KeyDataLen,
5941 IN UCHAR GroupKeyIndex,
5944 IN MAC_TABLE_ENTRY *pEntry);
5946 VOID ConstructEapolMsg(
5947 IN PRTMP_ADAPTER pAd,
5948 IN UCHAR PeerAuthMode,
5949 IN UCHAR PeerWepStatus,
5950 IN UCHAR MyGroupKeyWepStatus,
5952 IN UCHAR DefaultKeyIdx,
5953 IN UCHAR *ReplayCounter,
5960 OUT PEAPOL_PACKET pMsg);
5963 IN PRTMP_ADAPTER pAd,
5964 IN UCHAR PeerWepStatus,
5966 OUT PEAPOL_PACKET pMsg);
5968 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5969 IN PRTMP_ADAPTER pAd,
5971 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5972 IN PCIPHER_KEY pShard_key);
5974 VOID ConstructEapolKeyData(
5975 IN PRTMP_ADAPTER pAd,
5976 IN UCHAR PeerAuthMode,
5977 IN UCHAR PeerWepStatus,
5978 IN UCHAR GroupKeyWepStatus,
5980 IN UCHAR DefaultKeyIdx,
5981 IN BOOLEAN bWPA2Capable,
5986 OUT PEAPOL_PACKET pMsg);
5989 IN PRTMP_ADAPTER pAd,
5995 // function prototype in ap_wpa.c
5998 BOOLEAN APWpaMsgTypeSubst(
6002 MAC_TABLE_ENTRY *PACInquiry(
6003 IN PRTMP_ADAPTER pAd,
6006 BOOLEAN RTMPCheckMcast(
6007 IN PRTMP_ADAPTER pAd,
6008 IN PEID_STRUCT eid_ptr,
6009 IN MAC_TABLE_ENTRY *pEntry);
6011 BOOLEAN RTMPCheckUcast(
6012 IN PRTMP_ADAPTER pAd,
6013 IN PEID_STRUCT eid_ptr,
6014 IN MAC_TABLE_ENTRY *pEntry);
6016 BOOLEAN RTMPCheckAUTH(
6017 IN PRTMP_ADAPTER pAd,
6018 IN PEID_STRUCT eid_ptr,
6019 IN MAC_TABLE_ENTRY *pEntry);
6021 VOID WPAStart4WayHS(
6022 IN PRTMP_ADAPTER pAd,
6023 IN MAC_TABLE_ENTRY *pEntry,
6024 IN ULONG TimeInterval);
6026 VOID WPAStart2WayGroupHS(
6027 IN PRTMP_ADAPTER pAd,
6028 IN MAC_TABLE_ENTRY *pEntry);
6030 VOID APWpaEAPPacketAction(
6031 IN PRTMP_ADAPTER pAd,
6032 IN MLME_QUEUE_ELEM *Elem);
6034 VOID APWpaEAPOLStartAction(
6035 IN PRTMP_ADAPTER pAd,
6036 IN MLME_QUEUE_ELEM *Elem);
6038 VOID APWpaEAPOLLogoffAction(
6039 IN PRTMP_ADAPTER pAd,
6040 IN MLME_QUEUE_ELEM *Elem);
6042 VOID APWpaEAPOLKeyAction(
6043 IN PRTMP_ADAPTER pAd,
6044 IN MLME_QUEUE_ELEM *Elem);
6046 VOID APWpaEAPOLASFAlertAction(
6047 IN PRTMP_ADAPTER pAd,
6048 IN MLME_QUEUE_ELEM *Elem);
6050 VOID HandleCounterMeasure(
6051 IN PRTMP_ADAPTER pAd,
6052 IN MAC_TABLE_ENTRY *pEntry);
6054 VOID PeerPairMsg2Action(
6055 IN PRTMP_ADAPTER pAd,
6056 IN MAC_TABLE_ENTRY *pEntry,
6057 IN MLME_QUEUE_ELEM *Elem);
6059 VOID PeerPairMsg4Action(
6060 IN PRTMP_ADAPTER pAd,
6061 IN MAC_TABLE_ENTRY *pEntry,
6062 IN MLME_QUEUE_ELEM *Elem);
6065 IN PVOID SystemSpecific1,
6066 IN PVOID FunctionContext,
6067 IN PVOID SystemSpecific2,
6068 IN PVOID SystemSpecific3);
6071 IN PVOID SystemSpecific1,
6072 IN PVOID FunctionContext,
6073 IN PVOID SystemSpecific2,
6074 IN PVOID SystemSpecific3);
6076 VOID EnqueueStartForPSKExec(
6077 IN PVOID SystemSpecific1,
6078 IN PVOID FunctionContext,
6079 IN PVOID SystemSpecific2,
6080 IN PVOID SystemSpecific3);
6082 VOID RTMPHandleSTAKey(
6083 IN PRTMP_ADAPTER pAdapter,
6084 IN MAC_TABLE_ENTRY *pEntry,
6085 IN MLME_QUEUE_ELEM *Elem);
6087 #if 0 // merge into PeerPairMsg4Action
6088 VOID Wpa1PeerPairMsg4Action(
6089 IN PRTMP_ADAPTER pAd,
6090 IN MAC_TABLE_ENTRY *pEntry,
6091 IN MLME_QUEUE_ELEM *Elem);
6093 VOID Wpa2PeerPairMsg4Action(
6094 IN PRTMP_ADAPTER pAd,
6095 IN PMAC_TABLE_ENTRY pEntry,
6096 IN MLME_QUEUE_ELEM *Elem);
6099 VOID PeerGroupMsg2Action(
6100 IN PRTMP_ADAPTER pAd,
6101 IN PMAC_TABLE_ENTRY pEntry,
6105 #if 0 // replaced by WPAStart2WayGroupHS
6106 NDIS_STATUS APWpaHardTransmit(
6107 IN PRTMP_ADAPTER pAd,
6108 IN PMAC_TABLE_ENTRY pEntry);
6111 VOID PairDisAssocAction(
6112 IN PRTMP_ADAPTER pAd,
6113 IN PMAC_TABLE_ENTRY pEntry,
6116 VOID MlmeDeAuthAction(
6117 IN PRTMP_ADAPTER pAd,
6118 IN PMAC_TABLE_ENTRY pEntry,
6121 VOID GREKEYPeriodicExec(
6122 IN PVOID SystemSpecific1,
6123 IN PVOID FunctionContext,
6124 IN PVOID SystemSpecific2,
6125 IN PVOID SystemSpecific3);
6147 IN PRTMP_ADAPTER pAd,
6150 VOID AES_GTK_KEY_WRAP(
6152 IN UCHAR *plaintext,
6154 OUT UCHAR *ciphertext);
6157 IN PRTMP_ADAPTER pAdapter,
6161 VOID APToWirelessSta(
6162 IN PRTMP_ADAPTER pAd,
6163 IN MAC_TABLE_ENTRY *pEntry,
6164 IN PUCHAR pHeader802_3,
6168 IN BOOLEAN bClearFrame);
6170 VOID RTMPAddPMKIDCache(
6171 IN PRTMP_ADAPTER pAd,
6177 INT RTMPSearchPMKIDCache(
6178 IN PRTMP_ADAPTER pAd,
6182 VOID RTMPDeletePMKIDCache(
6183 IN PRTMP_ADAPTER pAd,
6187 VOID RTMPMaintainPMKIDCache(
6188 IN PRTMP_ADAPTER pAd);
6190 VOID RTMPSendTriggerFrame(
6191 IN PRTMP_ADAPTER pAd,
6195 IN BOOLEAN bQosNull);
6198 //typedef void (*TIMER_FUNCTION)(unsigned long);
6202 VOID RTMP_SetPeriodicTimer(
6203 IN NDIS_MINIPORT_TIMER *pTimer,
6204 IN unsigned long timeout);
6206 VOID RTMP_OS_Init_Timer(
6207 IN PRTMP_ADAPTER pAd,
6208 IN NDIS_MINIPORT_TIMER *pTimer,
6209 IN TIMER_FUNCTION function,
6212 VOID RTMP_OS_Add_Timer(
6213 IN NDIS_MINIPORT_TIMER *pTimer,
6214 IN unsigned long timeout);
6216 VOID RTMP_OS_Mod_Timer(
6217 IN NDIS_MINIPORT_TIMER *pTimer,
6218 IN unsigned long timeout);
6221 VOID RTMP_OS_Del_Timer(
6222 IN NDIS_MINIPORT_TIMER *pTimer,
6223 OUT BOOLEAN *pCancelled);
6226 VOID RTMP_OS_Release_Packet(
6227 IN PRTMP_ADAPTER pAd,
6228 IN PQUEUE_ENTRY pEntry);
6233 NDIS_STATUS os_alloc_mem(
6234 IN PRTMP_ADAPTER pAd,
6238 NDIS_STATUS os_free_mem(
6239 IN PRTMP_ADAPTER pAd,
6243 void RTMP_AllocateSharedMemory(
6244 IN PRTMP_ADAPTER pAd,
6247 OUT PVOID *VirtualAddress,
6248 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6250 VOID RTMPFreeTxRxRingMemory(
6251 IN PRTMP_ADAPTER pAd);
6253 NDIS_STATUS AdapterBlockAllocateMemory(
6257 void RTMP_AllocateTxDescMemory(
6258 IN PRTMP_ADAPTER pAd,
6262 OUT PVOID *VirtualAddress,
6263 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6265 void RTMP_AllocateFirstTxBuffer(
6266 IN PRTMP_ADAPTER pAd,
6270 OUT PVOID *VirtualAddress,
6271 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6273 void RTMP_AllocateMgmtDescMemory(
6274 IN PRTMP_ADAPTER pAd,
6277 OUT PVOID *VirtualAddress,
6278 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6280 void RTMP_AllocateRxDescMemory(
6281 IN PRTMP_ADAPTER pAd,
6284 OUT PVOID *VirtualAddress,
6285 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6287 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6288 IN PRTMP_ADAPTER pAd,
6291 OUT PVOID *VirtualAddress,
6292 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6294 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6295 IN PRTMP_ADAPTER pAd,
6298 OUT PVOID *VirtualAddress);
6300 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6301 IN PRTMP_ADAPTER pAd,
6304 void RTMP_QueryPacketInfo(
6305 IN PNDIS_PACKET pPacket,
6306 OUT PACKET_INFO *pPacketInfo,
6307 OUT PUCHAR *pSrcBufVA,
6308 OUT UINT *pSrcBufLen);
6310 void RTMP_QueryNextPacketInfo(
6311 IN PNDIS_PACKET *ppPacket,
6312 OUT PACKET_INFO *pPacketInfo,
6313 OUT PUCHAR *pSrcBufVA,
6314 OUT UINT *pSrcBufLen);
6317 BOOLEAN RTMP_FillTxBlkInfo(
6318 IN RTMP_ADAPTER *pAd,
6322 PRTMP_SCATTER_GATHER_LIST
6323 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6326 void announce_802_3_packet(
6327 IN PRTMP_ADAPTER pAd,
6328 IN PNDIS_PACKET pPacket);
6331 UINT BA_Reorder_AMSDU_Annnounce(
6332 IN PRTMP_ADAPTER pAd,
6333 IN PNDIS_PACKET pPacket);
6336 UINT Handle_AMSDU_Packet(
6337 IN PRTMP_ADAPTER pAd,
6340 IN UCHAR FromWhichBSSID);
6343 void convert_802_11_to_802_3_packet(
6344 IN PRTMP_ADAPTER pAd,
6345 IN PNDIS_PACKET pPacket,
6349 IN UCHAR FromWhichBSSID);
6352 PNET_DEV get_netdev_from_bssid(
6353 IN PRTMP_ADAPTER pAd,
6354 IN UCHAR FromWhichBSSID);
6357 PNDIS_PACKET duplicate_pkt(
6358 IN PRTMP_ADAPTER pAd,
6359 IN PUCHAR pHeader802_3,
6363 IN UCHAR FromWhichBSSID);
6366 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6367 IN PRTMP_ADAPTER pAd,
6368 IN PNDIS_PACKET pOldPkt);
6370 PNDIS_PACKET duplicate_pkt_with_VLAN(
6371 IN PRTMP_ADAPTER pAd,
6372 IN PUCHAR pHeader802_3,
6376 IN UCHAR FromWhichBSSID);
6378 PNDIS_PACKET duplicate_pkt_with_WPI(
6379 IN PRTMP_ADAPTER pAd,
6380 IN PNDIS_PACKET pPacket,
6381 IN UINT32 ext_head_len,
6382 IN UINT32 ext_tail_len);
6384 UCHAR VLAN_8023_Header_Copy(
6385 IN PRTMP_ADAPTER pAd,
6386 IN PUCHAR pHeader802_3,
6389 IN UCHAR FromWhichBSSID);
6391 #ifdef DOT11_N_SUPPORT
6392 void ba_flush_reordering_timeout_mpdus(
6393 IN PRTMP_ADAPTER pAd,
6394 IN PBA_REC_ENTRY pBAEntry,
6398 VOID BAOriSessionSetUp(
6399 IN PRTMP_ADAPTER pAd,
6400 IN MAC_TABLE_ENTRY *pEntry,
6404 IN BOOLEAN isForced);
6406 VOID BASessionTearDownALL(
6407 IN OUT PRTMP_ADAPTER pAd,
6409 #endif // DOT11_N_SUPPORT //
6411 BOOLEAN OS_Need_Clone_Packet(void);
6414 VOID build_tx_packet(
6415 IN PRTMP_ADAPTER pAd,
6416 IN PNDIS_PACKET pPacket,
6421 VOID BAOriSessionTearDown(
6422 IN OUT PRTMP_ADAPTER pAd,
6425 IN BOOLEAN bPassive,
6426 IN BOOLEAN bForceSend);
6428 VOID BARecSessionTearDown(
6429 IN OUT PRTMP_ADAPTER pAd,
6432 IN BOOLEAN bPassive);
6434 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6435 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6437 ULONG AutoChBssInsertEntry(
6438 IN PRTMP_ADAPTER pAd,
6445 void AutoChBssTableInit(
6446 IN PRTMP_ADAPTER pAd);
6448 void ChannelInfoInit(
6449 IN PRTMP_ADAPTER pAd);
6451 void AutoChBssTableDestroy(
6452 IN PRTMP_ADAPTER pAd);
6454 void ChannelInfoDestroy(
6455 IN PRTMP_ADAPTER pAd);
6457 UCHAR New_ApAutoSelectChannel(
6458 IN PRTMP_ADAPTER pAd);
6460 BOOLEAN rtstrmactohex(
6464 BOOLEAN rtstrcasecmp(
6468 char *rtstrstruncasecmp(
6474 IN const char * s2);
6478 IN const char * ct);
6482 unsigned int *addr);
6484 ////////// common ioctl functions //////////
6485 INT Set_DriverVersion_Proc(
6486 IN PRTMP_ADAPTER pAd,
6489 INT Set_CountryRegion_Proc(
6490 IN PRTMP_ADAPTER pAd,
6493 INT Set_CountryRegionABand_Proc(
6494 IN PRTMP_ADAPTER pAd,
6497 INT Set_WirelessMode_Proc(
6498 IN PRTMP_ADAPTER pAd,
6501 INT Set_Channel_Proc(
6502 IN PRTMP_ADAPTER pAd,
6505 INT Set_ShortSlot_Proc(
6506 IN PRTMP_ADAPTER pAd,
6509 INT Set_TxPower_Proc(
6510 IN PRTMP_ADAPTER pAd,
6513 INT Set_BGProtection_Proc(
6514 IN PRTMP_ADAPTER pAd,
6517 INT Set_TxPreamble_Proc(
6518 IN PRTMP_ADAPTER pAd,
6521 INT Set_RTSThreshold_Proc(
6522 IN PRTMP_ADAPTER pAd,
6525 INT Set_FragThreshold_Proc(
6526 IN PRTMP_ADAPTER pAd,
6529 INT Set_TxBurst_Proc(
6530 IN PRTMP_ADAPTER pAd,
6533 #ifdef AGGREGATION_SUPPORT
6534 INT Set_PktAggregate_Proc(
6535 IN PRTMP_ADAPTER pAd,
6539 INT Set_IEEE80211H_Proc(
6540 IN PRTMP_ADAPTER pAd,
6545 IN PRTMP_ADAPTER pAd,
6549 INT Show_DescInfo_Proc(
6550 IN PRTMP_ADAPTER pAd,
6553 INT Set_ResetStatCounter_Proc(
6554 IN PRTMP_ADAPTER pAd,
6557 #ifdef DOT11_N_SUPPORT
6558 INT Set_BASetup_Proc(
6559 IN PRTMP_ADAPTER pAd,
6562 INT Set_BADecline_Proc(
6563 IN PRTMP_ADAPTER pAd,
6566 INT Set_BAOriTearDown_Proc(
6567 IN PRTMP_ADAPTER pAd,
6570 INT Set_BARecTearDown_Proc(
6571 IN PRTMP_ADAPTER pAd,
6575 IN PRTMP_ADAPTER pAd,
6579 IN PRTMP_ADAPTER pAd,
6583 IN PRTMP_ADAPTER pAd,
6586 INT Set_HtOpMode_Proc(
6587 IN PRTMP_ADAPTER pAd,
6590 INT Set_HtStbc_Proc(
6591 IN PRTMP_ADAPTER pAd,
6595 IN PRTMP_ADAPTER pAd,
6598 INT Set_HtExtcha_Proc(
6599 IN PRTMP_ADAPTER pAd,
6602 INT Set_HtMpduDensity_Proc(
6603 IN PRTMP_ADAPTER pAd,
6606 INT Set_HtBaWinSize_Proc(
6607 IN PRTMP_ADAPTER pAd,
6611 IN PRTMP_ADAPTER pAd,
6614 INT Set_HtLinkAdapt_Proc(
6615 IN PRTMP_ADAPTER pAd,
6618 INT Set_HtAmsdu_Proc(
6619 IN PRTMP_ADAPTER pAd,
6622 INT Set_HtAutoBa_Proc(
6623 IN PRTMP_ADAPTER pAd,
6626 INT Set_HtProtect_Proc(
6627 IN PRTMP_ADAPTER pAd,
6630 INT Set_HtMimoPs_Proc(
6631 IN PRTMP_ADAPTER pAd,
6635 INT Set_ForceShortGI_Proc(
6636 IN PRTMP_ADAPTER pAd,
6639 INT Set_ForceGF_Proc(
6640 IN PRTMP_ADAPTER pAd,
6644 IN PRTMP_ADAPTER pAd);
6646 INT Set_SendPSMPAction_Proc(
6647 IN PRTMP_ADAPTER pAd,
6650 INT Set_HtMIMOPSmode_Proc(
6651 IN PRTMP_ADAPTER pAd,
6655 INT Set_HtTxBASize_Proc(
6656 IN PRTMP_ADAPTER pAd,
6658 #endif // DOT11_N_SUPPORT //
6662 #ifdef CONFIG_STA_SUPPORT
6664 VOID RTMPSendDLSTearDownFrame(
6665 IN PRTMP_ADAPTER pAd,
6668 #ifdef DOT11_N_SUPPORT
6671 IN PRTMP_ADAPTER pAd,
6672 OUT PQUERYBA_TABLE pBAT);
6673 #endif // DOT11_N_SUPPORT //
6675 #ifdef WPA_SUPPLICANT_SUPPORT
6676 INT WpaCheckEapCode(
6677 IN PRTMP_ADAPTER pAd,
6682 VOID WpaSendMicFailureToWpaSupplicant(
6683 IN PRTMP_ADAPTER pAd,
6684 IN BOOLEAN bUnicast);
6686 VOID SendAssocIEsToWpaSupplicant(
6687 IN PRTMP_ADAPTER pAd);
6688 #endif // WPA_SUPPLICANT_SUPPORT //
6690 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6691 int wext_notify_event_assoc(
6692 IN RTMP_ADAPTER *pAd);
6693 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6695 #endif // CONFIG_STA_SUPPORT //
6699 #ifdef DOT11_N_SUPPORT
6700 VOID Handle_BSS_Width_Trigger_Events(
6701 IN PRTMP_ADAPTER pAd);
6703 void build_ext_channel_switch_ie(
6704 IN PRTMP_ADAPTER pAd,
6705 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6706 #endif // DOT11_N_SUPPORT //
6709 BOOLEAN APRxDoneInterruptHandle(
6710 IN PRTMP_ADAPTER pAd);
6712 BOOLEAN STARxDoneInterruptHandle(
6713 IN PRTMP_ADAPTER pAd,
6716 #ifdef DOT11_N_SUPPORT
6717 // AMPDU packet indication
6718 VOID Indicate_AMPDU_Packet(
6719 IN PRTMP_ADAPTER pAd,
6721 IN UCHAR FromWhichBSSID);
6723 // AMSDU packet indication
6724 VOID Indicate_AMSDU_Packet(
6725 IN PRTMP_ADAPTER pAd,
6727 IN UCHAR FromWhichBSSID);
6728 #endif // DOT11_N_SUPPORT //
6730 // Normal legacy Rx packet indication
6731 VOID Indicate_Legacy_Packet(
6732 IN PRTMP_ADAPTER pAd,
6734 IN UCHAR FromWhichBSSID);
6736 VOID Indicate_EAPOL_Packet(
6737 IN PRTMP_ADAPTER pAd,
6739 IN UCHAR FromWhichBSSID);
6741 void update_os_packet_info(
6742 IN PRTMP_ADAPTER pAd,
6744 IN UCHAR FromWhichBSSID);
6746 void wlan_802_11_to_802_3_packet(
6747 IN PRTMP_ADAPTER pAd,
6749 IN PUCHAR pHeader802_3,
6750 IN UCHAR FromWhichBSSID);
6752 UINT deaggregate_AMSDU_announce(
6753 IN PRTMP_ADAPTER pAd,
6754 PNDIS_PACKET pPacket,
6759 #ifdef CONFIG_STA_SUPPORT
6760 // remove LLC and get 802_3 Header
6761 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6763 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6765 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6767 _pDA = _pRxBlk->pHeader->Addr3; \
6768 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6772 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6774 _pDA = _pRxBlk->pHeader->Addr1; \
6775 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6776 _pSA = _pRxBlk->pHeader->Addr2; \
6778 _pSA = _pRxBlk->pHeader->Addr3; \
6782 _pDA = _pRxBlk->pHeader->Addr1; \
6783 _pSA = _pRxBlk->pHeader->Addr2; \
6787 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6788 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6790 #endif // CONFIG_STA_SUPPORT //
6793 BOOLEAN APFowardWirelessStaToWirelessSta(
6794 IN PRTMP_ADAPTER pAd,
6795 IN PNDIS_PACKET pPacket,
6796 IN ULONG FromWhichBSSID);
6798 VOID Announce_or_Forward_802_3_Packet(
6799 IN PRTMP_ADAPTER pAd,
6800 IN PNDIS_PACKET pPacket,
6801 IN UCHAR FromWhichBSSID);
6803 VOID Sta_Announce_or_Forward_802_3_Packet(
6804 IN PRTMP_ADAPTER pAd,
6805 IN PNDIS_PACKET pPacket,
6806 IN UCHAR FromWhichBSSID);
6809 #ifdef CONFIG_STA_SUPPORT
6810 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6811 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6812 //announce_802_3_packet(_pAd, _pPacket);
6813 #endif // CONFIG_STA_SUPPORT //
6816 PNDIS_PACKET DuplicatePacket(
6817 IN PRTMP_ADAPTER pAd,
6818 IN PNDIS_PACKET pPacket,
6819 IN UCHAR FromWhichBSSID);
6822 PNDIS_PACKET ClonePacket(
6823 IN PRTMP_ADAPTER pAd,
6824 IN PNDIS_PACKET pPacket,
6829 // Normal, AMPDU or AMSDU
6830 VOID CmmRxnonRalinkFrameIndicate(
6831 IN PRTMP_ADAPTER pAd,
6833 IN UCHAR FromWhichBSSID);
6835 VOID CmmRxRalinkFrameIndicate(
6836 IN PRTMP_ADAPTER pAd,
6837 IN MAC_TABLE_ENTRY *pEntry,
6839 IN UCHAR FromWhichBSSID);
6841 VOID Update_Rssi_Sample(
6842 IN PRTMP_ADAPTER pAd,
6843 IN RSSI_SAMPLE *pRssi,
6844 IN PRXWI_STRUC pRxWI);
6846 PNDIS_PACKET GetPacketFromRxRing(
6847 IN PRTMP_ADAPTER pAd,
6848 OUT PRT28XX_RXD_STRUC pSaveRxD,
6849 OUT BOOLEAN *pbReschedule,
6850 IN OUT UINT32 *pRxPending);
6852 PNDIS_PACKET RTMPDeFragmentDataFrame(
6853 IN PRTMP_ADAPTER pAd,
6856 ////////////////////////////////////////
6864 typedef struct _DefaultKeyIdxValue
6868 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6872 #ifdef CONFIG_STA_SUPPORT
6874 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6875 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6876 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6877 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6878 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6879 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6880 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6881 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6882 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6883 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6884 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6887 P80211ENUM_msgitem_status_no_value = 0x00
6890 P80211ENUM_truth_false = 0x00,
6891 P80211ENUM_truth_true = 0x01
6894 /* Definition from madwifi */
6900 } p80211item_uint32_t;
6905 #define WLAN_DEVNAMELEN_MAX 16
6906 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6907 p80211item_uint32_t hosttime;
6908 p80211item_uint32_t mactime;
6909 p80211item_uint32_t channel;
6910 p80211item_uint32_t rssi;
6911 p80211item_uint32_t sq;
6912 p80211item_uint32_t signal;
6913 p80211item_uint32_t noise;
6914 p80211item_uint32_t rate;
6915 p80211item_uint32_t istx;
6916 p80211item_uint32_t frmlen;
6917 } wlan_ng_prism2_header;
6919 /* The radio capture header precedes the 802.11 header. */
6920 typedef struct PACKED _ieee80211_radiotap_header {
6921 UINT8 it_version; /* Version 0. Only increases
6922 * for drastic changes,
6923 * introduction of compatible
6924 * new fields does not count.
6927 UINT16 it_len; /* length of the whole
6928 * header in bytes, including
6929 * it_version, it_pad,
6930 * it_len, and data fields.
6932 UINT32 it_present; /* A bitmap telling which
6933 * fields are present. Set bit 31
6934 * (0x80000000) to extend the
6935 * bitmap by another 32 bits.
6936 * Additional extensions are made
6937 * by setting bit 31.
6939 }ieee80211_radiotap_header ;
6941 enum ieee80211_radiotap_type {
6942 IEEE80211_RADIOTAP_TSFT = 0,
6943 IEEE80211_RADIOTAP_FLAGS = 1,
6944 IEEE80211_RADIOTAP_RATE = 2,
6945 IEEE80211_RADIOTAP_CHANNEL = 3,
6946 IEEE80211_RADIOTAP_FHSS = 4,
6947 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6948 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6949 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6950 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6951 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6952 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6953 IEEE80211_RADIOTAP_ANTENNA = 11,
6954 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6955 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6958 #define WLAN_RADIOTAP_PRESENT ( \
6959 (1 << IEEE80211_RADIOTAP_TSFT) | \
6960 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6961 (1 << IEEE80211_RADIOTAP_RATE) | \
6964 typedef struct _wlan_radiotap_header {
6965 ieee80211_radiotap_header wt_ihdr;
6969 } wlan_radiotap_header;
6970 /* Definition from madwifi */
6972 void send_monitor_packets(
6973 IN PRTMP_ADAPTER pAd,
6976 #if WIRELESS_EXT >= 12
6977 // This function will be called when query /proc
6978 struct iw_statistics *rt28xx_get_wireless_stats(
6979 IN struct net_device *net_dev);
6982 VOID RTMPSetDesiredRates(
6983 IN PRTMP_ADAPTER pAdapter,
6985 #endif // CONFIG_STA_SUPPORT //
6987 INT Set_FixedTxMode_Proc(
6988 IN PRTMP_ADAPTER pAd,
6991 #ifdef CONFIG_APSTA_MIXED_SUPPORT
6992 INT Set_OpMode_Proc(
6993 IN PRTMP_ADAPTER pAd,
6995 #endif // CONFIG_APSTA_MIXED_SUPPORT //
6997 static inline char* GetPhyMode(
7007 #ifdef DOT11_N_SUPPORT
7011 case MODE_HTGREENFIELD:
7013 #endif // DOT11_N_SUPPORT //
7020 static inline char* GetBW(
7030 #ifdef DOT11_N_SUPPORT
7033 #endif // DOT11_N_SUPPORT //
7040 VOID RT28xxThreadTerminate(
7041 IN RTMP_ADAPTER *pAd);
7043 BOOLEAN RT28XXChipsetCheck(
7046 BOOLEAN RT28XXNetDevInit(
7048 IN struct net_device *net_dev,
7049 IN RTMP_ADAPTER *pAd);
7051 BOOLEAN RT28XXProbePostConfig(
7053 IN RTMP_ADAPTER *pAd,
7056 VOID RT28XXDMADisable(
7057 IN RTMP_ADAPTER *pAd);
7059 VOID RT28XXDMAEnable(
7060 IN RTMP_ADAPTER *pAd);
7062 VOID RT28xx_UpdateBeaconToAsic(
7063 IN RTMP_ADAPTER * pAd,
7066 IN ULONG UpdatePos);
7069 IN struct net_device *net_dev,
7070 IN OUT struct ifreq *rq,
7074 #ifdef CONFIG_STA_SUPPORT
7075 INT rt28xx_sta_ioctl(
7076 IN struct net_device *net_dev,
7077 IN OUT struct ifreq *rq,
7079 #endif // CONFIG_STA_SUPPORT //
7081 BOOLEAN RT28XXSecurityKeyAdd(
7082 IN PRTMP_ADAPTER pAd,
7085 IN MAC_TABLE_ENTRY *pEntry);
7087 ////////////////////////////////////////
7088 PNDIS_PACKET GetPacketFromRxRing(
7089 IN PRTMP_ADAPTER pAd,
7090 OUT PRT28XX_RXD_STRUC pSaveRxD,
7091 OUT BOOLEAN *pbReschedule,
7092 IN OUT UINT32 *pRxPending);
7095 void kill_thread_task(PRTMP_ADAPTER pAd);
7097 void tbtt_tasklet(unsigned long data);
7100 VOID AsicTurnOffRFClk(
7101 IN PRTMP_ADAPTER pAd,
7104 VOID AsicTurnOnRFClk(
7105 IN PRTMP_ADAPTER pAd,
7110 // Function Prototype in rtusb_bulk.c
7112 VOID RTUSBInitTxDesc(
7113 IN PRTMP_ADAPTER pAd,
7114 IN PTX_CONTEXT pTxContext,
7115 IN UCHAR BulkOutPipeId,
7116 IN usb_complete_t Func);
7118 VOID RTUSBInitHTTxDesc(
7119 IN PRTMP_ADAPTER pAd,
7120 IN PHT_TX_CONTEXT pTxContext,
7121 IN UCHAR BulkOutPipeId,
7122 IN ULONG BulkOutSize,
7123 IN usb_complete_t Func);
7125 VOID RTUSBInitRxDesc(
7126 IN PRTMP_ADAPTER pAd,
7127 IN PRX_CONTEXT pRxContext);
7129 VOID RTUSBCleanUpDataBulkOutQueue(
7130 IN PRTMP_ADAPTER pAd);
7132 VOID RTUSBCancelPendingBulkOutIRP(
7133 IN PRTMP_ADAPTER pAd);
7135 VOID RTUSBBulkOutDataPacket(
7136 IN PRTMP_ADAPTER pAd,
7137 IN UCHAR BulkOutPipeId,
7140 VOID RTUSBBulkOutNullFrame(
7141 IN PRTMP_ADAPTER pAd);
7143 VOID RTUSBBulkOutRTSFrame(
7144 IN PRTMP_ADAPTER pAd);
7146 VOID RTUSBCancelPendingBulkInIRP(
7147 IN PRTMP_ADAPTER pAd);
7149 VOID RTUSBCancelPendingIRPs(
7150 IN PRTMP_ADAPTER pAd);
7152 VOID RTUSBBulkOutMLMEPacket(
7153 IN PRTMP_ADAPTER pAd,
7156 VOID RTUSBBulkOutPsPoll(
7157 IN PRTMP_ADAPTER pAd);
7159 VOID RTUSBCleanUpMLMEBulkOutQueue(
7160 IN PRTMP_ADAPTER pAd);
7162 VOID RTUSBKickBulkOut(
7163 IN PRTMP_ADAPTER pAd);
7165 VOID RTUSBBulkReceive(
7166 IN PRTMP_ADAPTER pAd);
7169 IN RTMP_ADAPTER *pAd);
7171 VOID RTUSBInitRxDesc(
7172 IN PRTMP_ADAPTER pAd,
7173 IN PRX_CONTEXT pRxContext);
7175 VOID RTUSBBulkRxHandle(
7176 IN unsigned long data);
7179 // Function Prototype in rtusb_io.c
7181 NTSTATUS RTUSBMultiRead(
7182 IN PRTMP_ADAPTER pAd,
7187 NTSTATUS RTUSBMultiWrite(
7188 IN PRTMP_ADAPTER pAd,
7193 NTSTATUS RTUSBMultiWrite_OneByte(
7194 IN PRTMP_ADAPTER pAd,
7198 NTSTATUS RTUSBReadBBPRegister(
7199 IN PRTMP_ADAPTER pAd,
7203 NTSTATUS RTUSBWriteBBPRegister(
7204 IN PRTMP_ADAPTER pAd,
7208 NTSTATUS RTUSBWriteRFRegister(
7209 IN PRTMP_ADAPTER pAd,
7212 NTSTATUS RT30xxWriteRFRegister(
7213 IN PRTMP_ADAPTER pAd,
7217 NTSTATUS RT30xxReadRFRegister(
7218 IN PRTMP_ADAPTER pAd,
7222 NTSTATUS RTUSB_VendorRequest(
7223 IN PRTMP_ADAPTER pAd,
7224 IN UINT32 TransferFlags,
7225 IN UCHAR ReservedBits,
7229 IN PVOID TransferBuffer,
7230 IN UINT32 TransferBufferLength);
7232 NTSTATUS RTUSBReadEEPROM(
7233 IN PRTMP_ADAPTER pAd,
7238 NTSTATUS RTUSBWriteEEPROM(
7239 IN PRTMP_ADAPTER pAd,
7244 VOID RTUSBPutToSleep(
7245 IN PRTMP_ADAPTER pAd);
7247 NTSTATUS RTUSBWakeUp(
7248 IN PRTMP_ADAPTER pAd);
7250 VOID RTUSBInitializeCmdQ(
7253 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7254 IN PRTMP_ADAPTER pAd,
7256 IN BOOLEAN SetInformation,
7257 IN PVOID pInformationBuffer,
7258 IN UINT32 InformationBufferLength);
7260 NDIS_STATUS RTUSBEnqueueInternalCmd(
7261 IN PRTMP_ADAPTER pAd,
7263 IN PVOID pInformationBuffer,
7264 IN UINT32 InformationBufferLength);
7266 VOID RTUSBDequeueCmd(
7268 OUT PCmdQElmt *pcmdqelmt);
7271 IN OUT PVOID Context);
7274 IN OUT PVOID Context);
7276 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7277 IN RTMP_ADAPTER *pAd,
7278 IN RALINK_TIMER_STRUCT *pTimer);
7280 BOOLEAN RT2870_TimerQ_Remove(
7281 IN RTMP_ADAPTER *pAd,
7282 IN RALINK_TIMER_STRUCT *pTimer);
7284 void RT2870_TimerQ_Exit(
7285 IN RTMP_ADAPTER *pAd);
7287 void RT2870_TimerQ_Init(
7288 IN RTMP_ADAPTER *pAd);
7290 VOID RT2870_BssBeaconExit(
7291 IN RTMP_ADAPTER *pAd);
7293 VOID RT2870_BssBeaconStop(
7294 IN RTMP_ADAPTER *pAd);
7296 VOID RT2870_BssBeaconStart(
7297 IN RTMP_ADAPTER * pAd);
7299 VOID RT2870_BssBeaconInit(
7300 IN RTMP_ADAPTER *pAd);
7302 VOID RT2870_WatchDog(
7303 IN RTMP_ADAPTER *pAd);
7305 NTSTATUS RTUSBWriteMACRegister(
7306 IN PRTMP_ADAPTER pAd,
7310 NTSTATUS RTUSBReadMACRegister(
7311 IN PRTMP_ADAPTER pAd,
7313 OUT PUINT32 pValue);
7315 NTSTATUS RTUSBSingleWrite(
7316 IN RTMP_ADAPTER *pAd,
7320 NTSTATUS RTUSBFirmwareRun(
7321 IN PRTMP_ADAPTER pAd);
7323 NTSTATUS RTUSBFirmwareWrite(
7324 IN PRTMP_ADAPTER pAd,
7328 NTSTATUS RTUSBFirmwareOpmode(
7329 IN PRTMP_ADAPTER pAd,
7330 OUT PUINT32 pValue);
7332 NTSTATUS RTUSBVenderReset(
7333 IN PRTMP_ADAPTER pAd);
7335 NDIS_STATUS RTUSBSetHardWareRegister(
7336 IN PRTMP_ADAPTER pAdapter,
7339 NDIS_STATUS RTUSBQueryHardWareRegister(
7340 IN PRTMP_ADAPTER pAdapter,
7344 IN PRTMP_ADAPTER pAd);
7347 NDIS_STATUS CreateThreads(
7348 IN struct net_device *net_dev );
7351 VOID MacTableInitialize(
7352 IN PRTMP_ADAPTER pAd);
7355 IN PRTMP_ADAPTER pAd,
7358 NDIS_STATUS RTMPWPAAddKeyProc(
7359 IN PRTMP_ADAPTER pAd,
7362 VOID AsicRxAntEvalAction(
7363 IN PRTMP_ADAPTER pAd);
7365 #if 0 // Mark because not used in RT28xx.
7366 NTSTATUS RTUSBRxPacket(
7367 IN PRTMP_ADAPTER pAd,
7368 IN BOOLEAN bBulkReceive);
7370 VOID RTUSBDequeueMLMEPacket(
7371 IN PRTMP_ADAPTER pAd);
7373 VOID RTUSBCleanUpMLMEWaitQueue(
7374 IN PRTMP_ADAPTER pAd);
7378 IN PRTMP_ADAPTER pAd,
7379 IN PUCHAR pHeader802_3,
7383 OUT PNDIS_PACKET *ppPacket);
7385 UINT deaggregate_AMSDU_announce(
7386 IN PRTMP_ADAPTER pAd,
7387 PNDIS_PACKET pPacket,
7391 NDIS_STATUS RTMPCheckRxError(
7392 IN PRTMP_ADAPTER pAd,
7393 IN PHEADER_802_11 pHeader,
7394 IN PRXWI_STRUC pRxWI,
7395 IN PRT28XX_RXD_STRUC pRxINFO);
7398 VOID RTUSBMlmeHardTransmit(
7399 IN PRTMP_ADAPTER pAd,
7400 IN PMGMT_STRUC pMgmt);
7406 VOID RTUSBResumeMsduTransmission(
7407 IN PRTMP_ADAPTER pAd);
7409 VOID RTUSBSuspendMsduTransmission(
7410 IN PRTMP_ADAPTER pAd);
7414 // Function Prototype in rtusb_data.c
7416 NDIS_STATUS RTUSBFreeDescriptorRequest(
7417 IN PRTMP_ADAPTER pAd,
7418 IN UCHAR BulkOutPipeId,
7419 IN UINT32 NumberRequired);
7422 BOOLEAN RTUSBNeedQueueBackForAgg(
7423 IN RTMP_ADAPTER *pAd,
7424 IN UCHAR BulkOutPipeId);
7427 VOID RTMPWriteTxInfo(
7428 IN PRTMP_ADAPTER pAd,
7429 IN PTXINFO_STRUC pTxInfo,
7430 IN USHORT USBDMApktLen,
7437 // Function Prototype in cmm_data_2870.c
7439 USHORT RtmpUSB_WriteSubTxResource(
7440 IN PRTMP_ADAPTER pAd,
7443 OUT USHORT *FreeNumber);
7445 USHORT RtmpUSB_WriteSingleTxResource(
7446 IN PRTMP_ADAPTER pAd,
7449 OUT USHORT *FreeNumber);
7451 USHORT RtmpUSB_WriteFragTxResource(
7452 IN PRTMP_ADAPTER pAd,
7455 OUT USHORT *FreeNumber);
7457 USHORT RtmpUSB_WriteMultiTxResource(
7458 IN PRTMP_ADAPTER pAd,
7461 OUT USHORT *FreeNumber);
7463 VOID RtmpUSB_FinalWriteTxResource(
7464 IN PRTMP_ADAPTER pAd,
7466 IN USHORT totalMPDUSize,
7469 VOID RtmpUSBDataLastTxIdx(
7470 IN PRTMP_ADAPTER pAd,
7474 VOID RtmpUSBDataKickOut(
7475 IN PRTMP_ADAPTER pAd,
7480 int RtmpUSBMgmtKickOut(
7481 IN RTMP_ADAPTER *pAd,
7483 IN PNDIS_PACKET pPacket,
7484 IN PUCHAR pSrcBufVA,
7487 VOID RtmpUSBNullFrameKickOut(
7488 IN RTMP_ADAPTER *pAd,
7490 IN UCHAR *pNullFrame,
7491 IN UINT32 frameLen);
7493 VOID RT28xxUsbStaAsicForceWakeup(
7494 IN PRTMP_ADAPTER pAd,
7495 IN BOOLEAN bFromTx);
7497 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7498 IN PRTMP_ADAPTER pAd,
7499 IN USHORT TbttNumToNextWakeUp);
7501 VOID RT28xxUsbMlmeRadioOn(
7502 IN PRTMP_ADAPTER pAd);
7504 VOID RT28xxUsbMlmeRadioOFF(
7505 IN PRTMP_ADAPTER pAd);
7508 ////////////////////////////////////////
7511 IN RTMP_ADAPTER *pAd);
7513 UINT32 QBSS_LoadElementAppend(
7514 IN RTMP_ADAPTER *pAd,
7517 VOID QBSS_LoadUpdate(
7518 IN RTMP_ADAPTER *pAd);
7520 ///////////////////////////////////////
7521 INT RTMPShowCfgValue(
7522 IN PRTMP_ADAPTER pAd,
7526 PCHAR RTMPGetRalinkAuthModeStr(
7527 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7529 PCHAR RTMPGetRalinkEncryModeStr(
7530 IN USHORT encryMode);
7531 //////////////////////////////////////
7533 #ifdef CONFIG_STA_SUPPORT
7534 VOID AsicStaBbpTuning(
7535 IN PRTMP_ADAPTER pAd);
7537 BOOLEAN StaAddMacTableEntry(
7538 IN PRTMP_ADAPTER pAd,
7539 IN PMAC_TABLE_ENTRY pEntry,
7540 IN UCHAR MaxSupportedRateIn500Kbps,
7541 IN HT_CAPABILITY_IE *pHtCapability,
7542 IN UCHAR HtCapabilityLen,
7543 IN USHORT CapabilityInfo);
7544 #endif // CONFIG_STA_SUPPORT //
7546 void RTMP_IndicateMediaState(
7547 IN PRTMP_ADAPTER pAd);
7549 VOID ReSyncBeaconTime(
7550 IN PRTMP_ADAPTER pAd);
7552 VOID RTMPSetAGCInitValue(
7553 IN PRTMP_ADAPTER pAd,
7554 IN UCHAR BandWidth);
7556 int rt28xx_close(IN PNET_DEV dev);
7557 int rt28xx_open(IN PNET_DEV dev);
7559 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7561 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7562 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7564 if (VIRTUAL_IF_NUM(pAd) == 0)
7566 if (rt28xx_open(pAd->net_dev) != 0)
7572 VIRTUAL_IF_INC(pAd);
7576 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7578 VIRTUAL_IF_DEC(pAd);
7579 if (VIRTUAL_IF_NUM(pAd) == 0)
7580 rt28xx_close(pAd->net_dev);
7585 #endif // __RTMP_H__