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"
46 #ifdef CONFIG_STA_SUPPORT
48 #endif // CONFIG_STA_SUPPORT //
52 //#define DBG_DIAGNOSE 1
54 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
55 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
56 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
58 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
59 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
62 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
63 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
64 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
67 ////////////////////////////////////////////////////////////////////////////
68 // The TX_BUFFER structure forms the transmitted USB packet to the device
69 ////////////////////////////////////////////////////////////////////////////
70 typedef struct __TX_BUFFER{
72 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
73 HEADER_802_11 NullFrame;
74 PSPOLL_FRAME PsPollPacket;
77 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
78 } TX_BUFFER, *PTX_BUFFER;
80 typedef struct __HTTX_BUFFER{
82 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
83 HEADER_802_11 NullFrame;
84 PSPOLL_FRAME PsPollPacket;
87 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
88 } HTTX_BUFFER, *PHTTX_BUFFER;
91 // used to track driver-generated write irps
92 typedef struct _TX_CONTEXT
94 PVOID pAd; //Initialized in MiniportInitialize
95 PURB pUrb; //Initialized in MiniportInitialize
96 PIRP pIrp; //used to cancel pending bulk out.
97 //Initialized in MiniportInitialize
98 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
103 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
104 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
107 BOOLEAN bAggregatible;
108 UCHAR Header_802_3[LENGTH_802_3];
112 dma_addr_t data_dma; // urb dma on linux
114 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
117 // used to track driver-generated write irps
118 typedef struct _HT_TX_CONTEXT
120 PVOID pAd; //Initialized in MiniportInitialize
121 PURB pUrb; //Initialized in MiniportInitialize
122 PIRP pIrp; //used to cancel pending bulk out.
123 //Initialized in MiniportInitialize
124 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
125 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
131 BOOLEAN bCopySavePad;
133 UCHAR Header_802_3[LENGTH_802_3];
134 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
135 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
136 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
137 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
139 dma_addr_t data_dma; // urb dma on linux
140 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
144 // Structure to keep track of receive packets and buffers to indicate
145 // receive data to the protocol.
147 typedef struct _RX_CONTEXT
149 PUCHAR TransferBuffer;
151 PIRP pIrp;//used to cancel pending bulk in.
153 //These 2 Boolean shouldn't both be 1 at the same time.
154 ULONG BulkInOffset; // number of packets waiting for reordering .
155 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
156 BOOLEAN bRxHandling; // Notify this packet is being process now.
157 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
158 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
159 BOOLEAN IRPPending; // TODO: To be removed
161 NDIS_SPIN_LOCK RxContextLock;
162 dma_addr_t data_dma; // urb dma on linux
163 } RX_CONTEXT, *PRX_CONTEXT;
168 // NDIS Version definitions
170 #ifdef NDIS50_MINIPORT
171 #define RTMP_NDIS_MAJOR_VERSION 5
172 #define RTMP_NDIS_MINOR_VERSION 0
175 #ifdef NDIS51_MINIPORT
176 #define RTMP_NDIS_MAJOR_VERSION 5
177 #define RTMP_NDIS_MINOR_VERSION 1
180 extern char NIC_VENDOR_DESC[];
181 extern int NIC_VENDOR_DESC_LEN;
183 extern unsigned char SNAP_AIRONET[];
184 extern unsigned char CipherSuiteCiscoCCKM[];
185 extern unsigned char CipherSuiteCiscoCCKMLen;
186 extern unsigned char CipherSuiteCiscoCCKM24[];
187 extern unsigned char CipherSuiteCiscoCCKM24Len;
188 extern unsigned char CipherSuiteCCXTkip[];
189 extern unsigned char CipherSuiteCCXTkipLen;
190 extern unsigned char CISCO_OUI[];
191 extern UCHAR BaSizeArray[4];
193 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
194 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
195 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
196 extern ULONG BIT32[32];
197 extern UCHAR BIT8[8];
198 extern char* CipherName[];
199 extern char* MCSToMbps[];
200 extern UCHAR RxwiMCSToOfdmRate[12];
201 extern UCHAR SNAP_802_1H[6];
202 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
203 extern UCHAR SNAP_AIRONET[8];
204 extern UCHAR CKIP_LLC_SNAP[8];
205 extern UCHAR EAPOL_LLC_SNAP[8];
206 extern UCHAR EAPOL[2];
208 extern UCHAR APPLE_TALK[2];
209 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
210 extern UCHAR OfdmRateToRxwiMCS[];
211 extern UCHAR OfdmSignalToRateId[16] ;
212 extern UCHAR default_cwmin[4];
213 extern UCHAR default_cwmax[4];
214 extern UCHAR default_sta_aifsn[4];
215 extern UCHAR MapUserPriorityToAccessCategory[8];
217 extern USHORT RateUpPER[];
218 extern USHORT RateDownPER[];
219 extern UCHAR Phy11BNextRateDownward[];
220 extern UCHAR Phy11BNextRateUpward[];
221 extern UCHAR Phy11BGNextRateDownward[];
222 extern UCHAR Phy11BGNextRateUpward[];
223 extern UCHAR Phy11ANextRateDownward[];
224 extern UCHAR Phy11ANextRateUpward[];
225 extern CHAR RssiSafeLevelForTxRate[];
226 extern UCHAR RateIdToMbps[];
227 extern USHORT RateIdTo500Kbps[];
229 extern UCHAR CipherSuiteWpaNoneTkip[];
230 extern UCHAR CipherSuiteWpaNoneTkipLen;
232 extern UCHAR CipherSuiteWpaNoneAes[];
233 extern UCHAR CipherSuiteWpaNoneAesLen;
236 extern UCHAR SupRateIe;
237 extern UCHAR ExtRateIe;
239 #ifdef DOT11_N_SUPPORT
240 extern UCHAR HtCapIe;
241 extern UCHAR AddHtInfoIe;
242 extern UCHAR NewExtChanIe;
244 extern UCHAR ExtHtCapIe;
245 #endif // DOT11N_DRAFT3 //
246 #endif // DOT11_N_SUPPORT //
257 extern UCHAR WPA_OUI[];
258 extern UCHAR RSN_OUI[];
259 extern UCHAR WAPI_OUI[];
260 extern UCHAR WME_INFO_ELEM[];
261 extern UCHAR WME_PARM_ELEM[];
262 extern UCHAR Ccx2QosInfo[];
263 extern UCHAR Ccx2IeInfo[];
264 extern UCHAR RALINK_OUI[];
265 extern UCHAR PowerConstraintIE[];
268 extern UCHAR RateSwitchTable[];
269 extern UCHAR RateSwitchTable11B[];
270 extern UCHAR RateSwitchTable11G[];
271 extern UCHAR RateSwitchTable11BG[];
273 #ifdef DOT11_N_SUPPORT
274 extern UCHAR RateSwitchTable11BGN1S[];
275 extern UCHAR RateSwitchTable11BGN2S[];
276 extern UCHAR RateSwitchTable11BGN2SForABand[];
277 extern UCHAR RateSwitchTable11N1S[];
278 extern UCHAR RateSwitchTable11N2S[];
279 extern UCHAR RateSwitchTable11N2SForABand[];
281 #ifdef CONFIG_STA_SUPPORT
282 extern UCHAR PRE_N_HT_OUI[];
283 #endif // CONFIG_STA_SUPPORT //
284 #endif // DOT11_N_SUPPORT //
286 #define MAXSEQ (0xFFF)
289 typedef struct _ATE_INFO {
295 TXWI_STRUC TxWI; // TXWI
297 UCHAR Addr1[MAC_ADDR_LEN];
298 UCHAR Addr2[MAC_ADDR_LEN];
299 UCHAR Addr3[MAC_ADDR_LEN];
303 UINT32 TxDoneCount; // Tx DMA Done
306 BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
307 BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
311 CHAR LastSNR0; // last received SNR
312 CHAR LastSNR1; // last received SNR for 2nd antenna
313 CHAR LastRssi0; // last received RSSI
314 CHAR LastRssi1; // last received RSSI for 2nd antenna
315 CHAR LastRssi2; // last received RSSI for 3rd antenna
316 CHAR AvgRssi0; // last 8 frames' average RSSI
317 CHAR AvgRssi1; // last 8 frames' average RSSI
318 CHAR AvgRssi2; // last 8 frames' average RSSI
319 SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
320 SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
321 SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
323 UINT32 NumOfAvgRssiSample;
325 #ifdef RALINK_28xx_QA
328 /* not used in RT2860 */
329 TXINFO_STRUC TxInfo; // TxInfo
331 USHORT HLen; // Header Length
332 USHORT PLen; // Pattern Length
333 UCHAR Header[32]; // Header buffer
334 UCHAR Pattern[32]; // Pattern buffer
335 USHORT DLen; // Data Length
356 //UINT32 Repeat; // Tx Cpu count
357 UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
358 #endif // RALINK_28xx_QA //
359 } ATE_INFO, *PATE_INFO;
361 #ifdef RALINK_28xx_QA
362 struct ate_racfghdr {
370 } __attribute__((packed));
371 #endif // RALINK_28xx_QA //
372 #endif // RALINK_ATE //
374 #ifdef DOT11_N_SUPPORT
375 struct reordering_mpdu
377 struct reordering_mpdu *next;
378 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
379 int Sequence; /* sequence number of MPDU */
383 struct reordering_list
385 struct reordering_mpdu *next;
389 struct reordering_mpdu_pool
393 struct reordering_list freelist;
395 #endif // DOT11_N_SUPPORT //
397 typedef struct _RSSI_SAMPLE {
398 CHAR LastRssi0; // last received RSSI
399 CHAR LastRssi1; // last received RSSI
400 CHAR LastRssi2; // last received RSSI
410 // Queue structure and macros
412 typedef struct _QUEUE_ENTRY {
413 struct _QUEUE_ENTRY *Next;
414 } QUEUE_ENTRY, *PQUEUE_ENTRY;
417 typedef struct _QUEUE_HEADER {
421 } QUEUE_HEADER, *PQUEUE_HEADER;
423 #define InitializeQueueHeader(QueueHeader) \
425 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
426 (QueueHeader)->Number = 0; \
429 #define RemoveHeadQueue(QueueHeader) \
430 (QueueHeader)->Head; \
432 PQUEUE_ENTRY pNext; \
433 if ((QueueHeader)->Head != NULL) \
435 pNext = (QueueHeader)->Head->Next; \
436 (QueueHeader)->Head = pNext; \
438 (QueueHeader)->Tail = NULL; \
439 (QueueHeader)->Number--; \
443 #define InsertHeadQueue(QueueHeader, QueueEntry) \
445 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
446 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
447 if ((QueueHeader)->Tail == NULL) \
448 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
449 (QueueHeader)->Number++; \
452 #define InsertTailQueue(QueueHeader, QueueEntry) \
454 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
455 if ((QueueHeader)->Tail) \
456 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
458 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
459 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
460 (QueueHeader)->Number++; \
464 // Macros for flag and ref count operations
466 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
467 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
468 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
469 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
470 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
472 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
473 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
474 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
476 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
477 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
478 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
480 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
481 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
482 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
484 #ifdef CONFIG_STA_SUPPORT
485 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
486 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
487 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
488 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
490 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
491 #endif // CONFIG_STA_SUPPORT //
493 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
494 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
497 #define INC_RING_INDEX(_idx, _RingSize) \
499 (_idx) = (_idx+1) % (_RingSize); \
502 // We will have a cost down version which mac version is 0x3090xxxx
503 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
505 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
506 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
507 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
509 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
511 #define RING_PACKET_INIT(_TxRing, _idx) \
513 _TxRing->Cell[_idx].pNdisPacket = NULL; \
514 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
517 #define TXDT_INIT(_TxD) \
519 NdisZeroMemory(_TxD, TXD_SIZE); \
523 //Set last data segment
524 #define RING_SET_LASTDS(_TxD, _IsSD0) \
526 if (_IsSD0) {_TxD->LastSec0 = 1;} \
527 else {_TxD->LastSec1 = 1;} \
530 // Increase TxTsc value for next transmission
532 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
533 // Should send a special event microsoft defined to request re-key
534 #define INC_TX_TSC(_tsc) \
537 while (++_tsc[i] == 0x0) \
545 #ifdef DOT11_N_SUPPORT
546 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
547 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
549 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
550 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
551 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
552 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
553 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
554 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
555 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
556 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
557 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
558 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
559 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
560 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
563 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
565 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
566 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
567 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
569 #endif // DOT11_N_SUPPORT //
572 // MACRO for 32-bit PCI register read / write
574 // Usage : RTMP_IO_READ32(
575 // PRTMP_ADAPTER pAd,
576 // ULONG Register_Offset,
580 // PRTMP_ADAPTER pAd,
581 // ULONG Register_Offset,
586 // BBP & RF are using indirect access. Before write any value into it.
587 // We have to make sure there is no outstanding command pending via checking busy bit.
589 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
593 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
594 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
595 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
597 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
598 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
602 #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
603 #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
606 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
609 case 1: khz = 2412000; break; \
610 case 2: khz = 2417000; break; \
611 case 3: khz = 2422000; break; \
612 case 4: khz = 2427000; break; \
613 case 5: khz = 2432000; break; \
614 case 6: khz = 2437000; break; \
615 case 7: khz = 2442000; break; \
616 case 8: khz = 2447000; break; \
617 case 9: khz = 2452000; break; \
618 case 10: khz = 2457000; break; \
619 case 11: khz = 2462000; break; \
620 case 12: khz = 2467000; break; \
621 case 13: khz = 2472000; break; \
622 case 14: khz = 2484000; break; \
623 case 36: /* UNII */ khz = 5180000; break; \
624 case 40: /* UNII */ khz = 5200000; break; \
625 case 44: /* UNII */ khz = 5220000; break; \
626 case 48: /* UNII */ khz = 5240000; break; \
627 case 52: /* UNII */ khz = 5260000; break; \
628 case 56: /* UNII */ khz = 5280000; break; \
629 case 60: /* UNII */ khz = 5300000; break; \
630 case 64: /* UNII */ khz = 5320000; break; \
631 case 149: /* UNII */ khz = 5745000; break; \
632 case 153: /* UNII */ khz = 5765000; break; \
633 case 157: /* UNII */ khz = 5785000; break; \
634 case 161: /* UNII */ khz = 5805000; break; \
635 case 165: /* UNII */ khz = 5825000; break; \
636 case 100: /* HiperLAN2 */ khz = 5500000; break; \
637 case 104: /* HiperLAN2 */ khz = 5520000; break; \
638 case 108: /* HiperLAN2 */ khz = 5540000; break; \
639 case 112: /* HiperLAN2 */ khz = 5560000; break; \
640 case 116: /* HiperLAN2 */ khz = 5580000; break; \
641 case 120: /* HiperLAN2 */ khz = 5600000; break; \
642 case 124: /* HiperLAN2 */ khz = 5620000; break; \
643 case 128: /* HiperLAN2 */ khz = 5640000; break; \
644 case 132: /* HiperLAN2 */ khz = 5660000; break; \
645 case 136: /* HiperLAN2 */ khz = 5680000; break; \
646 case 140: /* HiperLAN2 */ khz = 5700000; break; \
647 case 34: /* Japan MMAC */ khz = 5170000; break; \
648 case 38: /* Japan MMAC */ khz = 5190000; break; \
649 case 42: /* Japan MMAC */ khz = 5210000; break; \
650 case 46: /* Japan MMAC */ khz = 5230000; break; \
651 case 184: /* Japan */ khz = 4920000; break; \
652 case 188: /* Japan */ khz = 4940000; break; \
653 case 192: /* Japan */ khz = 4960000; break; \
654 case 196: /* Japan */ khz = 4980000; break; \
655 case 208: /* Japan, means J08 */ khz = 5040000; break; \
656 case 212: /* Japan, means J12 */ khz = 5060000; break; \
657 case 216: /* Japan, means J16 */ khz = 5080000; break; \
658 default: khz = 2412000; break; \
662 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
665 case 2412000: ch = 1; break; \
666 case 2417000: ch = 2; break; \
667 case 2422000: ch = 3; break; \
668 case 2427000: ch = 4; break; \
669 case 2432000: ch = 5; break; \
670 case 2437000: ch = 6; break; \
671 case 2442000: ch = 7; break; \
672 case 2447000: ch = 8; break; \
673 case 2452000: ch = 9; break; \
674 case 2457000: ch = 10; break; \
675 case 2462000: ch = 11; break; \
676 case 2467000: ch = 12; break; \
677 case 2472000: ch = 13; break; \
678 case 2484000: ch = 14; break; \
679 case 5180000: ch = 36; /* UNII */ break; \
680 case 5200000: ch = 40; /* UNII */ break; \
681 case 5220000: ch = 44; /* UNII */ break; \
682 case 5240000: ch = 48; /* UNII */ break; \
683 case 5260000: ch = 52; /* UNII */ break; \
684 case 5280000: ch = 56; /* UNII */ break; \
685 case 5300000: ch = 60; /* UNII */ break; \
686 case 5320000: ch = 64; /* UNII */ break; \
687 case 5745000: ch = 149; /* UNII */ break; \
688 case 5765000: ch = 153; /* UNII */ break; \
689 case 5785000: ch = 157; /* UNII */ break; \
690 case 5805000: ch = 161; /* UNII */ break; \
691 case 5825000: ch = 165; /* UNII */ break; \
692 case 5500000: ch = 100; /* HiperLAN2 */ break; \
693 case 5520000: ch = 104; /* HiperLAN2 */ break; \
694 case 5540000: ch = 108; /* HiperLAN2 */ break; \
695 case 5560000: ch = 112; /* HiperLAN2 */ break; \
696 case 5580000: ch = 116; /* HiperLAN2 */ break; \
697 case 5600000: ch = 120; /* HiperLAN2 */ break; \
698 case 5620000: ch = 124; /* HiperLAN2 */ break; \
699 case 5640000: ch = 128; /* HiperLAN2 */ break; \
700 case 5660000: ch = 132; /* HiperLAN2 */ break; \
701 case 5680000: ch = 136; /* HiperLAN2 */ break; \
702 case 5700000: ch = 140; /* HiperLAN2 */ break; \
703 case 5170000: ch = 34; /* Japan MMAC */ break; \
704 case 5190000: ch = 38; /* Japan MMAC */ break; \
705 case 5210000: ch = 42; /* Japan MMAC */ break; \
706 case 5230000: ch = 46; /* Japan MMAC */ break; \
707 case 4920000: ch = 184; /* Japan */ break; \
708 case 4940000: ch = 188; /* Japan */ break; \
709 case 4960000: ch = 192; /* Japan */ break; \
710 case 4980000: ch = 196; /* Japan */ break; \
711 case 5040000: ch = 208; /* Japan, means J08 */ break; \
712 case 5060000: ch = 212; /* Japan, means J12 */ break; \
713 case 5080000: ch = 216; /* Japan, means J16 */ break; \
714 default: ch = 1; break; \
719 // Common fragment list structure - Identical to the scatter gather frag list structure
721 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
722 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
723 #define NIC_MAX_PHYS_BUF_COUNT 8
725 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
729 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
732 typedef struct _RTMP_SCATTER_GATHER_LIST {
733 ULONG NumberOfElements;
735 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
736 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
739 // Some utility macros
742 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
746 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
749 #define GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2))))
751 #define INC_COUNTER64(Val) (Val.QuadPart++)
753 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
754 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
755 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
756 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
758 // Check LEAP & CCKM flags
759 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
760 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
762 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
763 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
765 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
767 _pExtraLlcSnapEncap = SNAP_802_1H; \
768 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
769 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
771 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
776 _pExtraLlcSnapEncap = NULL; \
780 // New Define for new Tx Path.
781 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
783 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
785 _pExtraLlcSnapEncap = SNAP_802_1H; \
786 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
787 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
789 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
794 _pExtraLlcSnapEncap = NULL; \
799 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
801 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
802 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
803 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
806 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
807 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
808 // else remove the LLC/SNAP field from the result Ethernet frame
809 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
811 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
812 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
813 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
817 _pRemovedLLCSNAP = NULL; \
818 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
819 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
821 PUCHAR pProto = _pData + 6; \
823 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
824 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
826 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
827 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
828 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
832 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
833 _pRemovedLLCSNAP = _pData; \
834 _DataSize -= LENGTH_802_1_H; \
835 _pData += LENGTH_802_1_H; \
840 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
841 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
842 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
846 #define SWITCH_AB( _pAA, _pBB) \
854 // Enqueue this frame to MLME engine
855 // We need to enqueue the whole frame because MLME need to pass data type
856 // information from 802.11 header
858 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
860 UINT32 High32TSF=0, Low32TSF=0; \
861 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
866 //Need to collect each ant's rssi concurrently
867 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
868 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
872 if (_pAd->RxAnt.EvaluatePeriod == 0) \
874 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
875 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
877 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
879 AvgRssi = _rssi1 << 3; \
880 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
884 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
885 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
886 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
887 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
890 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
891 AvgRssi = _rssi1 << 3; \
893 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
894 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
900 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
901 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
903 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
904 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
907 // Check if it is Japan W53(ch52,56,60,64) channel.
909 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
911 #ifdef CONFIG_STA_SUPPORT
912 #define STA_PORT_SECURED(_pAd) \
914 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
915 NdisAcquireSpinLock(&_pAd->MacTabLock); \
916 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
917 NdisReleaseSpinLock(&_pAd->MacTabLock); \
919 #endif // CONFIG_STA_SUPPORT //
923 // Register set pair for initialzation register set definition
925 typedef struct _RTMP_REG_PAIR
929 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
931 typedef struct _REG_PAIR
935 } REG_PAIR, *PREG_PAIR;
938 // Register set pair for initialzation register set definition
940 typedef struct _RTMP_RF_REGS
947 } RTMP_RF_REGS, *PRTMP_RF_REGS;
949 typedef struct _FREQUENCY_ITEM {
954 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
957 // Data buffer for DMA operation, the buffer must be contiguous physical memory
958 // Both DMA to / from CPU use the same structure.
960 typedef struct _RTMP_DMABUF
963 PVOID AllocVa; // TxBuf virtual address
964 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
965 } RTMP_DMABUF, *PRTMP_DMABUF;
968 typedef union _HEADER_802_11_SEQ{
981 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
984 // Data buffer for DMA operation, the buffer must be contiguous physical memory
985 // Both DMA to / from CPU use the same structure.
987 typedef struct _RTMP_REORDERBUF
990 PVOID AllocVa; // TxBuf virtual address
991 UCHAR Header802_3[14];
992 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
999 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1002 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1003 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1004 // which won't be released, driver has to wait until upper layer return the packet
1005 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1006 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1007 // which driver should ACK upper layer when the tx is physically done or failed.
1009 typedef struct _RTMP_DMACB
1011 ULONG AllocSize; // Control block size
1012 PVOID AllocVa; // Control block virtual address
1013 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1014 PNDIS_PACKET pNdisPacket;
1015 PNDIS_PACKET pNextNdisPacket;
1017 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1018 } RTMP_DMACB, *PRTMP_DMACB;
1020 typedef struct _RTMP_TX_BUF
1024 ULONG AllocSize; // Control block size
1025 PVOID AllocVa; // Control block virtual address
1026 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1027 } RTMP_TXBUF, *PRTMP_TXBUF;
1029 typedef struct _RTMP_RX_BUF
1033 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1034 } RTMP_RXBUF, *PRTMP_RXBUF;
1035 typedef struct _RTMP_TX_RING
1037 RTMP_DMACB Cell[TX_RING_SIZE];
1040 UINT32 TxSwFreeIdx; // software next free tx index
1041 } RTMP_TX_RING, *PRTMP_TX_RING;
1043 typedef struct _RTMP_RX_RING
1045 RTMP_DMACB Cell[RX_RING_SIZE];
1048 INT32 RxSwReadIdx; // software next read index
1049 } RTMP_RX_RING, *PRTMP_RX_RING;
1051 typedef struct _RTMP_MGMT_RING
1053 RTMP_DMACB Cell[MGMT_RING_SIZE];
1056 UINT32 TxSwFreeIdx; // software next free tx index
1057 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1060 // Statistic counter structure
1062 typedef struct _COUNTER_802_3
1065 ULONG GoodTransmits;
1072 ULONG RcvAlignmentErrors;
1074 ULONG MoreCollisions;
1076 } COUNTER_802_3, *PCOUNTER_802_3;
1078 typedef struct _COUNTER_802_11 {
1080 LARGE_INTEGER LastTransmittedFragmentCount;
1081 LARGE_INTEGER TransmittedFragmentCount;
1082 LARGE_INTEGER MulticastTransmittedFrameCount;
1083 LARGE_INTEGER FailedCount;
1084 LARGE_INTEGER RetryCount;
1085 LARGE_INTEGER MultipleRetryCount;
1086 LARGE_INTEGER RTSSuccessCount;
1087 LARGE_INTEGER RTSFailureCount;
1088 LARGE_INTEGER ACKFailureCount;
1089 LARGE_INTEGER FrameDuplicateCount;
1090 LARGE_INTEGER ReceivedFragmentCount;
1091 LARGE_INTEGER MulticastReceivedFrameCount;
1092 LARGE_INTEGER FCSErrorCount;
1093 } COUNTER_802_11, *PCOUNTER_802_11;
1095 typedef struct _COUNTER_RALINK {
1096 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1097 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1098 ULONG BeenDisassociatedCount;
1099 ULONG BadCQIAutoRecoveryCount;
1100 ULONG PoorCQIRoamingCount;
1101 ULONG MgmtRingFullCount;
1102 ULONG RxCountSinceLastNULL;
1104 ULONG RxRingErrCount;
1106 ULONG TxRingErrCount;
1107 LARGE_INTEGER RealFcsErrCount;
1108 ULONG PendingNdisPacketCount;
1110 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1111 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1112 UINT32 OneSecTxDoneCount;
1113 ULONG OneSecRxCount;
1114 UINT32 OneSecTxAggregationCount;
1115 UINT32 OneSecRxAggregationCount;
1117 UINT32 OneSecFrameDuplicateCount;
1120 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1123 UINT32 OneSecTxNoRetryOkCount;
1124 UINT32 OneSecTxRetryOkCount;
1125 UINT32 OneSecTxFailCount;
1126 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1127 UINT32 OneSecRxOkCnt; // RX without error
1128 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1129 UINT32 OneSecRxFcsErrCnt; // CRC error
1130 UINT32 OneSecBeaconSentCnt;
1131 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1132 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1135 ULONG TxNonAggCount;
1136 ULONG TxAgg1MPDUCount;
1137 ULONG TxAgg2MPDUCount;
1138 ULONG TxAgg3MPDUCount;
1139 ULONG TxAgg4MPDUCount;
1140 ULONG TxAgg5MPDUCount;
1141 ULONG TxAgg6MPDUCount;
1142 ULONG TxAgg7MPDUCount;
1143 ULONG TxAgg8MPDUCount;
1144 ULONG TxAgg9MPDUCount;
1145 ULONG TxAgg10MPDUCount;
1146 ULONG TxAgg11MPDUCount;
1147 ULONG TxAgg12MPDUCount;
1148 ULONG TxAgg13MPDUCount;
1149 ULONG TxAgg14MPDUCount;
1150 ULONG TxAgg15MPDUCount;
1151 ULONG TxAgg16MPDUCount;
1153 LARGE_INTEGER TransmittedOctetsInAMSDU;
1154 LARGE_INTEGER TransmittedAMSDUCount;
1155 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1156 LARGE_INTEGER ReceivedAMSDUCount;
1157 LARGE_INTEGER TransmittedAMPDUCount;
1158 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1159 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1160 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1161 } COUNTER_RALINK, *PCOUNTER_RALINK;
1163 typedef struct _PID_COUNTER {
1164 ULONG TxAckRequiredCount; // CRC error
1166 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1167 ULONG LastSuccessRate;
1168 } PID_COUNTER, *PPID_COUNTER;
1170 typedef struct _COUNTER_DRS {
1171 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1172 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1173 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1174 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1175 ULONG CurrTxRateStableTime; // # of second in current TX rate
1176 BOOLEAN fNoisyEnvironment;
1177 BOOLEAN fLastSecAccordingRSSI;
1178 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1179 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1180 ULONG LastTxOkCount;
1181 } COUNTER_DRS, *PCOUNTER_DRS;
1184 // Arcfour Structure Added by PaulWu
1186 typedef struct _ARCFOUR
1191 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1193 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1194 typedef struct _RECEIVE_SETTING {
1195 #ifdef RT_BIG_ENDIAN
1199 USHORT STBC:2; //SPACE
1201 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1202 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1204 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1205 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1207 USHORT STBC:2; //SPACE
1212 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1214 // Shared key data structure
1215 typedef struct _WEP_KEY {
1216 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1217 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1218 } WEP_KEY, *PWEP_KEY;
1220 typedef struct _CIPHER_KEY {
1221 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1222 UCHAR RxMic[8]; // make alignment
1224 UCHAR TxTsc[6]; // 48bit TSC value
1225 UCHAR RxTsc[6]; // 48bit TSC value
1226 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1228 #ifdef CONFIG_STA_SUPPORT
1230 #endif // CONFIG_STA_SUPPORT //
1231 // Key length for each key, 0: entry is invalid
1232 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1233 } CIPHER_KEY, *PCIPHER_KEY;
1235 typedef struct _BBP_TUNING_STRUCT {
1237 UCHAR FalseCcaCountUpperBound; // 100 per sec
1238 UCHAR FalseCcaCountLowerBound; // 10 per sec
1239 UCHAR R17LowerBound; // specified in E2PROM
1240 UCHAR R17UpperBound; // 0x68 according to David Tung
1241 UCHAR CurrentR17Value;
1242 } BBP_TUNING, *PBBP_TUNING;
1244 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1245 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1246 UCHAR EvaluateStableCnt;
1247 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1248 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1249 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1250 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1251 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1252 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1253 SHORT Pair1LastAvgRssi; //
1254 SHORT Pair2LastAvgRssi; //
1255 ULONG RcvPktNumWhenEvaluate;
1256 BOOLEAN FirstPktArrivedWhenEvaluate;
1257 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1258 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1260 typedef struct _LEAP_AUTH_INFO {
1261 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1262 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1264 UCHAR UserName[256]; //LEAP, User name
1266 UCHAR Password[256]; //LEAP, User Password
1268 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1271 UCHAR Addr[MAC_ADDR_LEN];
1272 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1273 //00 02-Authentication timeout
1274 //00 03-Challenge from AP failed
1275 //00 04-Challenge to AP failed
1277 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1281 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1282 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1288 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1291 // Receive Tuple Cache Format
1293 typedef struct _TUPLE_CACHE {
1295 UCHAR MacAddress[MAC_ADDR_LEN];
1298 } TUPLE_CACHE, *PTUPLE_CACHE;
1301 // Fragment Frame structure
1303 typedef struct _FRAGMENT_FRAME {
1304 PNDIS_PACKET pFragPacket;
1308 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1309 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1313 // Packet information for NdisQueryPacket
1315 typedef struct _PACKET_INFO {
1316 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1317 UINT BufferCount ; // Number of Buffer descriptor chained
1318 UINT TotalPacketLength ; // Self explained
1319 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1320 } PACKET_INFO, *PPACKET_INFO;
1323 // Tkip Key structure which RC4 key & MIC calculation
1325 typedef struct _TKIP_KEY_INFO {
1326 UINT nBytesInM; // # bytes in M for MICKEY
1329 ULONG K0; // for MICKEY Low
1330 ULONG K1; // for MICKEY Hig
1331 ULONG L; // Current state for MICKEY
1332 ULONG R; // Current state for MICKEY
1333 ULONG M; // Message accumulator for MICKEY
1336 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1339 // Private / Misc data, counters for driver internal use
1341 typedef struct __PRIVATE_STRUC {
1342 UINT SystemResetCnt; // System reset counter
1343 UINT TxRingFullCnt; // Tx ring full occurrance number
1344 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1345 // Variables for WEP encryption / decryption in rtmp_wep.c
1347 ARCFOURCONTEXT WEPCONTEXT;
1351 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1353 // structure to tune BBP R66 (BBP TUNING)
1354 typedef struct _BBP_R66_TUNING {
1356 USHORT FalseCcaLowerThreshold; // default 100
1357 USHORT FalseCcaUpperThreshold; // default 512
1359 UCHAR R66CurrentValue;
1360 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1361 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1363 // structure to store channel TX power
1364 typedef struct _CHANNEL_TX_POWER {
1365 USHORT RemainingTimeForUse; //unit: sec
1367 #ifdef DOT11N_DRAFT3
1368 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1369 #endif // DOT11N_DRAFT3 //
1374 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1376 // structure to store 802.11j channel TX power
1377 typedef struct _CHANNEL_11J_TX_POWER {
1379 UCHAR BW; // BW_10 or BW_20
1382 USHORT RemainingTimeForUse; //unit: sec
1383 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1385 typedef enum _ABGBAND_STATE_ {
1391 typedef struct _MLME_STRUCT {
1392 #ifdef CONFIG_STA_SUPPORT
1393 // STA state machines
1394 STATE_MACHINE CntlMachine;
1395 STATE_MACHINE AssocMachine;
1396 STATE_MACHINE AuthMachine;
1397 STATE_MACHINE AuthRspMachine;
1398 STATE_MACHINE SyncMachine;
1399 STATE_MACHINE WpaPskMachine;
1400 STATE_MACHINE LeapMachine;
1401 STATE_MACHINE AironetMachine;
1402 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1403 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1404 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1405 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1406 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1407 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1408 #endif // CONFIG_STA_SUPPORT //
1409 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1411 STATE_MACHINE ActMachine;
1414 #ifdef QOS_DLS_SUPPORT
1415 STATE_MACHINE DlsMachine;
1416 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1417 #endif // QOS_DLS_SUPPORT //
1422 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1423 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1424 ULONG LastSendNULLpsmTime;
1427 NDIS_SPIN_LOCK TaskLock;
1432 RALINK_TIMER_STRUCT PeriodicTimer;
1433 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1434 RALINK_TIMER_STRUCT LinkDownTimer;
1435 RALINK_TIMER_STRUCT LinkUpTimer;
1436 ULONG PeriodicRound;
1437 ULONG OneSecPeriodicRound;
1440 BOOLEAN bLowThroughput;
1441 BOOLEAN bEnableAutoAntennaCheck;
1442 RALINK_TIMER_STRUCT RxAntEvalTimer;
1445 UCHAR CaliBW40RfR24;
1446 UCHAR CaliBW20RfR24;
1449 } MLME_STRUCT, *PMLME_STRUCT;
1451 // structure for radar detection and channel switch
1452 typedef struct _RADAR_DETECT_STRUCT {
1453 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1454 UCHAR CSCount; //Channel switch counter
1455 UCHAR CSPeriod; //Channel switch period (beacon count)
1456 UCHAR RDCount; //Radar detection counter
1457 UCHAR RDMode; //Radar Detection mode
1458 UCHAR RDDurRegion; //Radar detection duration region
1465 ULONG InServiceMonitorCount; // unit: sec
1466 UINT8 DfsSessionTime;
1469 UINT8 LongPulseRadarTh;
1470 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1472 #ifdef CARRIER_DETECTION_SUPPORT
1473 typedef enum CD_STATE_n
1480 typedef struct CARRIER_DETECTION_s
1483 UINT8 CDSessionTime;
1486 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1487 #endif // CARRIER_DETECTION_SUPPORT //
1489 typedef enum _REC_BLOCKACK_STATUS
1493 Recipient_HandleRes,
1495 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1497 typedef enum _ORI_BLOCKACK_STATUS
1503 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1505 #ifdef DOT11_N_SUPPORT
1506 typedef struct _BA_ORI_ENTRY{
1511 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1513 USHORT TimeOutValue;
1514 ORI_BLOCKACK_STATUS ORI_BA_Status;
1515 RALINK_TIMER_STRUCT ORIBATimer;
1517 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1519 typedef struct _BA_REC_ENTRY {
1522 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1524 //UCHAR Curindidx; // the head in the RX reordering buffer
1526 // USHORT LastIndSeqAtTimer;
1527 USHORT TimeOutValue;
1528 RALINK_TIMER_STRUCT RECBATimer;
1529 ULONG LastIndSeqAtTimer;
1532 REC_BLOCKACK_STATUS REC_BA_Status;
1533 // UCHAR RxBufIdxUsed;
1534 // corresponding virtual address for RX reordering packet storage.
1535 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1536 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1537 // struct _BA_REC_ENTRY *pNext;
1539 struct reordering_list list;
1540 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1544 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1545 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1546 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1547 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1548 } BA_TABLE, *PBA_TABLE;
1550 //For QureyBATableOID use;
1551 typedef struct PACKED _OID_BA_REC_ENTRY{
1552 UCHAR MACAddr[MAC_ADDR_LEN];
1553 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1556 REC_BLOCKACK_STATUS REC_BA_Status[8];
1557 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1559 //For QureyBATableOID use;
1560 typedef struct PACKED _OID_BA_ORI_ENTRY{
1561 UCHAR MACAddr[MAC_ADDR_LEN];
1562 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize, read ORI_BA_Status[TID] for status
1565 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1566 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1568 typedef struct _QUERYBA_TABLE{
1569 OID_BA_ORI_ENTRY BAOriEntry[32];
1570 OID_BA_REC_ENTRY BARecEntry[32];
1571 UCHAR OriNum;// Number of below BAOriEntry
1572 UCHAR RecNum;// Number of below BARecEntry
1573 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1575 typedef union _BACAP_STRUC {
1576 #ifdef RT_BIG_ENDIAN
1579 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1580 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1581 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1582 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1583 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1584 UINT32 MpduDensity:3;
1585 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1586 UINT32 AutoBA:1; // automatically BA
1587 UINT32 TxBAWinLimit:8;
1588 UINT32 RxBAWinLimit:8;
1592 UINT32 RxBAWinLimit:8;
1593 UINT32 TxBAWinLimit:8;
1594 UINT32 AutoBA:1; // automatically BA
1595 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1596 UINT32 MpduDensity:3;
1597 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1598 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1599 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1600 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1601 UINT32 b2040CoexistScanSup:1; //As Sta, support do 2040 coexistence scan for AP. As Ap, support monitor trigger event to check if can use BW 40MHz.
1606 } BACAP_STRUC, *PBACAP_STRUC;
1607 #endif // DOT11_N_SUPPORT //
1609 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1610 typedef struct _IOT_STRUC {
1612 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1613 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1614 ULONG OneSecInWindowCount;
1615 ULONG OneSecFrameDuplicateCount;
1616 ULONG OneSecOutWindowCount;
1621 BOOLEAN bRTSLongProtOn;
1622 #ifdef CONFIG_STA_SUPPORT
1623 BOOLEAN bLastAtheros;
1624 BOOLEAN bCurrentAtheros;
1625 BOOLEAN bNowAtherosBurstOn;
1626 BOOLEAN bNextDisableRxBA;
1628 #endif // CONFIG_STA_SUPPORT //
1629 } IOT_STRUC, *PIOT_STRUC;
1631 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1632 typedef union _REG_TRANSMIT_SETTING {
1633 #ifdef RT_BIG_ENDIAN
1639 UINT32 STBC:1; //SPACE
1641 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1642 UINT32 TxBF:1; // 3*3
1644 //UINT32 MCS:7; // MCS
1650 //UINT32 MCS:7; // MCS
1653 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1655 UINT32 STBC:1; //SPACE
1663 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1665 typedef union _DESIRED_TRANSMIT_SETTING {
1666 #ifdef RT_BIG_ENDIAN
1669 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1671 USHORT MCS:7; // MCS
1675 USHORT MCS:7; // MCS
1677 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1682 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1685 BOOLEAN IsRecipient;
1686 UCHAR MACAddr[MAC_ADDR_LEN];
1690 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1691 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1694 // Multiple SSID structure
1696 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1697 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1699 /* clear bcmc TIM bit */
1700 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1701 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1703 /* set bcmc TIM bit */
1704 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1705 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1707 /* clear a station PS TIM bit */
1708 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1709 { UCHAR tim_offset = wcid >> 3; \
1710 UCHAR bit_offset = wcid & 0x7; \
1711 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1713 /* set a station PS TIM bit */
1714 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1715 { UCHAR tim_offset = wcid >> 3; \
1716 UCHAR bit_offset = wcid & 0x7; \
1717 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1720 #define BEACON_BITMAP_MASK 0xff
1721 typedef struct _BEACON_SYNC_STRUCT_
1723 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1724 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1725 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1726 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1727 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1728 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1729 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1730 }BEACON_SYNC_STRUCT;
1733 typedef struct _MULTISSID_STRUCT {
1734 UCHAR Bssid[MAC_ADDR_LEN];
1736 CHAR Ssid[MAX_LEN_OF_SSID];
1737 USHORT CapabilityInfo;
1741 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1742 NDIS_802_11_WEP_STATUS WepStatus;
1743 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1744 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1748 ULONG ReceivedByteCount;
1749 ULONG TransmittedByteCount;
1753 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1754 RT_HT_PHY_INFO DesiredHtPhyInfo;
1755 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1756 BOOLEAN bAutoTxRateSwitch;
1758 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1761 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1762 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1763 UCHAR DesiredRatesIndex;
1764 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1766 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1767 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1768 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1778 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1779 UCHAR BANClass3Data;
1780 ULONG IsolateInterStaTraffic;
1783 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1786 UCHAR TimIELocationInBeacon;
1787 UCHAR CapabilityInfoLocationInBeacon;
1788 // outgoing BEACON frame buffer and corresponding TXWI
1789 // PTXWI_STRUC BeaconTxWI; //
1790 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1793 UINT16 StationKeepAliveTime; // unit: second
1796 USHORT VLAN_Priority;
1798 RT_802_11_ACL AccessControlList;
1801 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1802 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1804 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1806 // For 802.1x daemon setting per BSS
1807 UCHAR radius_srv_num;
1808 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1811 unsigned int mylinkid;
1815 UINT32 RcvdConflictSsidCount;
1816 UINT32 RcvdSpoofedAssocRespCount;
1817 UINT32 RcvdSpoofedReassocRespCount;
1818 UINT32 RcvdSpoofedProbeRespCount;
1819 UINT32 RcvdSpoofedBeaconCount;
1820 UINT32 RcvdSpoofedDisassocCount;
1821 UINT32 RcvdSpoofedAuthCount;
1822 UINT32 RcvdSpoofedDeauthCount;
1823 UINT32 RcvdSpoofedUnknownMgmtCount;
1824 UINT32 RcvdReplayAttackCount;
1826 CHAR RssiOfRcvdConflictSsid;
1827 CHAR RssiOfRcvdSpoofedAssocResp;
1828 CHAR RssiOfRcvdSpoofedReassocResp;
1829 CHAR RssiOfRcvdSpoofedProbeResp;
1830 CHAR RssiOfRcvdSpoofedBeacon;
1831 CHAR RssiOfRcvdSpoofedDisassoc;
1832 CHAR RssiOfRcvdSpoofedAuth;
1833 CHAR RssiOfRcvdSpoofedDeauth;
1834 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1835 CHAR RssiOfRcvdReplayAttack;
1839 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1843 #ifdef DOT11N_DRAFT3
1844 typedef enum _BSS2040COEXIST_FLAG{
1845 BSS_2040_COEXIST_DISABLE = 0,
1846 BSS_2040_COEXIST_TIMER_FIRED = 1,
1847 BSS_2040_COEXIST_INFO_SYNC = 2,
1848 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1849 }BSS2040COEXIST_FLAG;
1850 #endif // DOT11N_DRAFT3 //
1852 // configuration common to OPMODE_AP as well as OPMODE_STA
1853 typedef struct _COMMON_CONFIG {
1855 BOOLEAN bCountryFlag;
1856 UCHAR CountryCode[3];
1858 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1859 UCHAR CountryRegionForABand; // Enum of country region for A band
1860 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1861 USHORT Dsifs; // in units of usec
1862 ULONG PacketFilter; // Packet filter for receiving
1864 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1865 UCHAR SsidLen; // the actual ssid length in used
1866 UCHAR LastSsidLen; // the actual ssid length in used
1867 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1868 UCHAR LastBssid[MAC_ADDR_LEN];
1870 UCHAR Bssid[MAC_ADDR_LEN];
1871 USHORT BeaconPeriod;
1873 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1875 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1877 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1879 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1880 UCHAR MaxDesiredRate;
1881 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1883 ULONG BasicRateBitmap; // backup basic ratebitmap
1885 BOOLEAN bAPSDCapable;
1886 BOOLEAN bInServicePeriod;
1891 BOOLEAN bNeedSendTriggerFrame;
1892 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1893 ULONG TriggerTimerCount;
1895 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1896 // move to MULTISSID_STRUCT for MBSS
1897 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1898 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1899 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1900 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1901 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1902 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1903 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1904 //BOOLEAN bAutoTxRateSwitch;
1905 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1906 UCHAR RtsRate; // RATE_xxx
1907 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1908 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1909 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1911 USHORT RtsThreshold; // in unit of BYTE
1912 USHORT FragmentThreshold; // in unit of BYTE
1914 UCHAR TxPower; // in unit of mW
1915 ULONG TxPowerPercentage; // 0~100 %
1916 ULONG TxPowerDefault; // keep for TxPowerPercentage
1918 #ifdef DOT11_N_SUPPORT
1919 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1920 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1921 #endif // DOT11_N_SUPPORT //
1922 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1923 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1924 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1925 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1926 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1927 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1928 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1929 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1930 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1931 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1933 #ifdef DOT11_N_SUPPORT
1935 #endif // DOT11_N_SUPPORT //
1936 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1937 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1938 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1939 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1940 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1941 #ifdef CONFIG_STA_SUPPORT
1942 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1943 #endif // CONFIG_STA_SUPPORT //
1944 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1945 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1946 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1947 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1948 ULONG OpStatusFlags;
1950 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1951 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1952 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1954 // IEEE802.11H--DFS.
1955 RADAR_DETECT_STRUCT RadarDetect;
1957 #ifdef CARRIER_DETECTION_SUPPORT
1958 CARRIER_DETECTION CarrierDetect;
1959 #endif // CARRIER_DETECTION_SUPPORT //
1961 #ifdef DOT11_N_SUPPORT
1963 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1964 //RT_HT_CAPABILITY SupportedHtPhy;
1965 RT_HT_CAPABILITY DesiredHtPhy;
1966 HT_CAPABILITY_IE HtCapability;
1967 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1968 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1969 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1970 NEW_EXT_CHAN_IE NewExtChanOffset; //7.3.2.20A, 1 if extension channel is above the control channel, 3 if below, 0 if not present
1972 #ifdef DOT11N_DRAFT3
1973 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1974 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1976 //This IE is used for 20/40 BSS Coexistence.
1977 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1978 // ====== 11n D3.0 =======================>
1979 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1980 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1981 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1982 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1983 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1984 USHORT Dot11BssWidthChanTranDelayFactor;
1985 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1987 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1988 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1990 NDIS_SPIN_LOCK TriggerEventTabLock;
1991 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1992 BSS_2040_COEXIST_IE BSSCoexist2040;
1993 TRIGGER_EVENT_TAB TriggerEventTab;
1994 UCHAR ChannelListIdx;
1995 // <====== 11n D3.0 =======================
1996 BOOLEAN bOverlapScanning;
1997 #endif // DOT11N_DRAFT3 //
2000 BOOLEAN bMIMOPSEnable;
2002 BOOLEAN bDisableReordering;
2003 BOOLEAN bForty_Mhz_Intolerant;
2004 BOOLEAN bExtChannelSwitchAnnouncement;
2005 BOOLEAN bRcvBSSWidthTriggerEvents;
2006 ULONG LastRcvBSSWidthTriggerEventsTime;
2009 #endif // DOT11_N_SUPPORT //
2011 // Enable wireless event
2012 BOOLEAN bWirelessEvent;
2013 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
2015 // Tx & Rx Stream number selection
2019 // transmit phy mode, trasmit rate for Multicast.
2020 #ifdef MCAST_RATE_SPECIFIC
2021 UCHAR McastTransmitMcs;
2022 UCHAR McastTransmitPhyMode;
2023 #endif // MCAST_RATE_SPECIFIC //
2025 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2028 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
2029 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
2030 RT_HT_CAPABILITY SupportedHtPhy;
2031 ULONG MaxPktOneTxBulk;
2035 BEACON_SYNC_STRUCT *pBeaconSync;
2036 RALINK_TIMER_STRUCT BeaconUpdateTimer;
2037 UINT32 BeaconAdjust;
2038 UINT32 BeaconFactor;
2039 UINT32 BeaconRemain;
2043 NDIS_SPIN_LOCK MeasureReqTabLock;
2044 PMEASURE_REQ_TAB pMeasureReqTab;
2046 NDIS_SPIN_LOCK TpcReqTabLock;
2047 PTPC_REQ_TAB pTpcReqTab;
2049 // transmit phy mode, trasmit rate for Multicast.
2050 #ifdef MCAST_RATE_SPECIFIC
2051 HTTRANSMIT_SETTING MCastPhyMode;
2052 #endif // MCAST_RATE_SPECIFIC //
2055 UINT16 DefineMaxTxPwr;
2056 #endif // SINGLE_SKU //
2059 } COMMON_CONFIG, *PCOMMON_CONFIG;
2062 #ifdef CONFIG_STA_SUPPORT
2063 /* Modified by Wu Xi-Kun 4/21/2006 */
2064 // STA configuration and status
2065 typedef struct _STA_ADMIN_CONFIG {
2067 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2068 // the user intended configuration, but not necessary fully equal to the final
2069 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2070 // AP or IBSS holder).
2071 // Once initialized, user configuration can only be changed via OID_xxx
2072 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
2073 USHORT AtimWin; // used when starting a new IBSS
2076 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2077 // the user intended configuration, and should be always applied to the final
2078 // settings in ACTIVE BSS without compromising with the BSS holder.
2079 // Once initialized, user configuration can only be changed via OID_xxx
2081 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2082 USHORT DefaultListenCount; // default listen count;
2083 ULONG WindowsPowerMode; // Power mode for AC power
2084 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2085 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2086 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2087 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2089 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2090 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2091 USHORT DisassocReason;
2092 UCHAR DisassocSta[MAC_ADDR_LEN];
2093 USHORT DeauthReason;
2094 UCHAR DeauthSta[MAC_ADDR_LEN];
2095 USHORT AuthFailReason;
2096 UCHAR AuthFailSta[MAC_ADDR_LEN];
2098 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2099 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2100 NDIS_802_11_WEP_STATUS WepStatus;
2101 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2103 // Add to support different cipher suite for WPA2/WPA mode
2104 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2105 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2106 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2107 USHORT RsnCapability;
2109 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2111 UCHAR PMK[32]; // WPA PSK mode PMK
2112 UCHAR PTK[64]; // WPA PSK mode PTK
2113 UCHAR GTK[32]; // GTK from authenticator
2114 BSSID_INFO SavedPMK[PMKID_NO];
2115 UINT SavedPMKNum; // Saved PMKID number
2120 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2123 // For WPA countermeasures
2124 ULONG LastMicErrorTime; // record last MIC error time
2125 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2126 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2127 // For WPA-PSK supplicant state
2128 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2129 UCHAR ReplayCounter[8];
2130 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2131 UCHAR SNonce[32]; // SNonce for WPA-PSK
2133 UCHAR LastSNR0; // last received BEACON's SNR
2134 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2135 RSSI_SAMPLE RssiSample;
2136 ULONG NumOfAvgRssiSample;
2138 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2139 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2140 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2141 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2143 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2144 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2145 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2146 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2147 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2148 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2149 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2151 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2152 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2153 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2155 // New for WPA, windows want us to to keep association information and
2156 // Fixed IEs from last association response
2157 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2158 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2159 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2160 USHORT ResVarIELen; // Length of next VIE include EID & Length
2161 UCHAR ResVarIEs[MAX_VIE_LEN];
2164 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2166 // New variables used for CCX 1.0
2168 BOOLEAN bCkipCmicOn;
2170 UCHAR GIV[3]; //for CCX iv
2175 LEAP_AUTH_INFO LeapAuthInfo;
2177 UCHAR NetworkChallenge[8];
2178 UCHAR NetworkChallengeResponse[24];
2179 UCHAR PeerChallenge[8];
2181 UCHAR PeerChallengeResponse[24];
2182 UCHAR SessionKey[16]; //Network session keys (NSK)
2183 RALINK_TIMER_STRUCT LeapAuthTimer;
2184 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2186 // New control flags for CCX
2187 CCX_CONTROL CCXControl; // Master administration state
2188 BOOLEAN CCXEnable; // Actual CCX state
2189 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2190 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2191 UCHAR CCXReqType; // Current processing CCX request type
2192 BSS_TABLE CCXBssTab; // BSS Table
2193 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2194 USHORT FrameReportLen; // Current Frame report length
2195 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2196 USHORT RPIDensity[8]; // Array for RPI density collection
2197 // Start address of each BSS table within FrameReportBuf
2198 // It's important to update the RxPower of the corresponding Bss
2199 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2200 USHORT BeaconToken; // Token for beacon report
2201 ULONG LastBssIndex; // Most current reported Bss index
2202 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2203 UCHAR RMReqCnt; // Number of measurement request saved.
2204 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2205 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2206 // It must be the same channel with maximum duration
2207 USHORT ParallelDuration; // Maximum duration for parallel measurement
2208 UCHAR ParallelChannel; // Only one channel with parallel measurement
2209 USHORT IAPPToken; // IAPP dialog token
2210 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2211 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2212 // Hack for channel load and noise histogram parameters
2213 UCHAR NHFactor; // Parameter for Noise histogram
2214 UCHAR CLFactor; // Parameter for channel load
2216 UCHAR KRK[16]; //Key Refresh Key.
2217 UCHAR BTK[32]; //Base Transient Key
2218 BOOLEAN CCKMLinkUpFlag;
2219 ULONG CCKMRN; //(Re)Association request number.
2220 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2221 UCHAR AironetCellPowerLimit; //in dBm
2222 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2223 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2224 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2225 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2226 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2227 USHORT CCXAdjacentAPChannel;
2228 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2230 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2231 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2233 UCHAR DtimCount; // 0.. DtimPeriod-1
2234 UCHAR DtimPeriod; // default = 3
2236 #ifdef QOS_DLS_SUPPORT
2237 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2238 UCHAR DlsReplayCounter[8];
2239 #endif // QOS_DLS_SUPPORT //
2240 ////////////////////////////////////////////////////////////////////////////////////////
2241 // This is only for WHQL test.
2243 ////////////////////////////////////////////////////////////////////////////////////////
2245 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2247 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2248 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2250 #ifdef WPA_SUPPLICANT_SUPPORT
2252 BOOLEAN IEEE8021x_required_keys;
2253 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2254 UCHAR DesireSharedKeyId;
2256 // 0: driver ignores wpa_supplicant
2257 // 1: wpa_supplicant initiates scanning and AP selection
2258 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2259 UCHAR WpaSupplicantUP;
2260 UCHAR WpaSupplicantScanCount;
2261 #endif // WPA_SUPPLICANT_SUPPORT //
2266 BOOLEAN bTGnWifiTest;
2267 BOOLEAN bScanReqIsFromWebUI;
2269 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2270 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2271 RT_HT_PHY_INFO DesiredHtPhyInfo;
2272 BOOLEAN bAutoTxRateSwitch;
2275 #ifdef EXT_BUILD_CHANNEL_LIST
2276 UCHAR IEEE80211dClientMode;
2277 UCHAR StaOriCountryCode[3];
2278 UCHAR StaOriGeography;
2279 #endif // EXT_BUILD_CHANNEL_LIST //
2280 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2282 // This data structure keep the current active BSS/IBSS's configuration that this STA
2283 // had agreed upon joining the network. Which means these parameters are usually decided
2284 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2285 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2286 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2287 // the current active settings.
2288 typedef struct _STA_ACTIVE_CONFIG {
2290 USHORT AtimWin; // in kusec; IBSS parameter set element
2291 USHORT CapabilityInfo;
2292 USHORT CfpMaxDuration;
2295 // Copy supported rate from desired AP's beacon. We are trying to match
2296 // AP's supported and extended rate settings.
2297 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2298 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2301 // Copy supported ht from desired AP's beacon. We are trying to match
2302 RT_HT_PHY_INFO SupportedPhyInfo;
2303 RT_HT_CAPABILITY SupportedHtPhy;
2304 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2305 #endif // CONFIG_STA_SUPPORT //
2308 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2309 NDIS_802_11_MAC_ADDRESS MacAddr;
2310 USHORT MacTabMatchWCID; // ASIC
2311 CIPHER_KEY CipherKey;
2312 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2315 // ----------- start of AP --------------------------
2316 // AUTH-RSP State Machine Aux data structure
2317 typedef struct _AP_MLME_AUX {
2318 UCHAR Addr[MAC_ADDR_LEN];
2320 CHAR Challenge[CIPHER_TEXT_LEN];
2321 } AP_MLME_AUX, *PAP_MLME_AUX;
2323 // structure to define WPA Group Key Rekey Interval
2324 typedef struct PACKED _RT_802_11_WPA_REKEY {
2325 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2326 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2327 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2329 typedef struct _MAC_TABLE_ENTRY {
2330 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2331 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2332 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2333 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2334 BOOLEAN ValidAsMesh;
2335 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2337 BOOLEAN bIAmBadAtheros;
2339 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2341 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2342 UCHAR CMTimerRunning;
2343 UCHAR apidx; // MBSS number
2345 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2346 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2347 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2350 RALINK_TIMER_STRUCT RetryTimer;
2351 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2352 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2353 NDIS_802_11_WEP_STATUS WepStatus;
2354 AP_WPA_STATE WpaState;
2357 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2358 CIPHER_KEY PairwiseKey;
2361 UCHAR PMKID[LEN_PMKID];
2364 UCHAR Addr[MAC_ADDR_LEN];
2367 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2368 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2370 USHORT CapabilityInfo;
2372 ULONG NoDataIdleCount;
2373 UINT16 StationKeepAliveCount; // unit: second
2375 QUEUE_HEADER PsQueue;
2377 UINT32 StaConnectTime; // the live time of this station since associated with AP
2380 #ifdef DOT11_N_SUPPORT
2382 USHORT NoBADataCountDown;
2384 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2385 UINT TxBFCount; // 3*3
2386 #endif // DOT11_N_SUPPORT //
2388 UINT DebugFIFOCount;
2393 //====================================================
2394 //WDS entry needs these
2395 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2396 UINT MatchWDSTabIdx;
2397 UCHAR MaxSupportedRate;
2399 UCHAR CurrTxRateIndex;
2400 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2401 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2402 // USHORT OneSecTxOkCount;
2403 UINT32 OneSecTxNoRetryOkCount;
2404 UINT32 OneSecTxRetryOkCount;
2405 UINT32 OneSecTxFailCount;
2406 UINT32 ContinueTxFailCnt;
2407 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2408 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2409 //====================================================
2413 #ifdef CONFIG_STA_SUPPORT
2414 #ifdef QOS_DLS_SUPPORT
2415 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2416 #endif // QOS_DLS_SUPPORT //
2417 #endif // CONFIG_STA_SUPPORT //
2419 BOOLEAN fNoisyEnvironment;
2420 BOOLEAN fLastSecAccordingRSSI;
2421 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2422 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2423 ULONG LastTxOkCount;
2424 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2426 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2427 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2428 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2429 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2430 ULONG ClientStatusFlags;
2432 // TODO: Shall we move that to DOT11_N_SUPPORT???
2433 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2435 #ifdef DOT11_N_SUPPORT
2436 // HT EWC MIMO-N used parameters
2437 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2438 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2439 USHORT TXAutoBAbitmap;
2440 USHORT BADeclineBitmap;
2441 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2442 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2443 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2445 // 802.11n features.
2447 UCHAR MaxRAmpduFactor;
2449 UCHAR MmpsMode; // MIMO power save more.
2451 HT_CAPABILITY_IE HTCapability;
2453 #ifdef DOT11N_DRAFT3
2454 UCHAR BSS2040CoexistenceMgmtSupport;
2455 #endif // DOT11N_DRAFT3 //
2456 #endif // DOT11_N_SUPPORT //
2458 BOOLEAN bAutoTxRateSwitch;
2461 struct _MAC_TABLE_ENTRY *pNext;
2462 USHORT TxSeq[NUM_OF_TID];
2463 USHORT NonQosDataSeq;
2465 RSSI_SAMPLE RssiSample;
2467 UINT32 TXMCSExpected[16];
2468 UINT32 TXMCSSuccessful[16];
2469 UINT32 TXMCSFailed[16];
2470 UINT32 TXMCSAutoFallBack[16][16];
2472 #ifdef CONFIG_STA_SUPPORT
2473 ULONG LastBeaconRxTime;
2474 #endif // CONFIG_STA_SUPPORT //
2475 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2477 typedef struct _MAC_TABLE {
2479 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2480 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2481 QUEUE_HEADER McastPsQueue;
2483 BOOLEAN fAnyStationInPsm;
2484 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2485 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2486 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2487 #ifdef DOT11_N_SUPPORT
2488 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2489 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2490 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2491 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2492 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2493 #endif // DOT11_N_SUPPORT //
2494 } MAC_TABLE, *PMAC_TABLE;
2496 #ifdef DOT11_N_SUPPORT
2497 #define IS_HT_STA(_pMacEntry) \
2498 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2500 #define IS_HT_RATE(_pMacEntry) \
2501 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2503 #define PEER_IS_HT_RATE(_pMacEntry) \
2504 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2505 #endif // DOT11_N_SUPPORT //
2507 typedef struct _WDS_ENTRY {
2509 UCHAR Addr[MAC_ADDR_LEN];
2510 ULONG NoDataIdleCount;
2511 struct _WDS_ENTRY *pNext;
2512 } WDS_ENTRY, *PWDS_ENTRY;
2514 typedef struct _WDS_TABLE_ENTRY {
2516 UCHAR WdsAddr[MAC_ADDR_LEN];
2517 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2518 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2519 UCHAR MaxSupportedRate;
2521 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2522 USHORT OneSecTxOkCount;
2523 USHORT OneSecTxRetryOkCount;
2524 USHORT OneSecTxFailCount;
2525 ULONG CurrTxRateStableTime; // # of second in current TX rate
2526 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2527 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2529 typedef struct _RT_802_11_WDS_ENTRY {
2533 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2534 UCHAR MacTabMatchWCID; // ASIC
2535 NDIS_802_11_WEP_STATUS WepStatus;
2538 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2539 RT_HT_PHY_INFO DesiredHtPhyInfo;
2540 BOOLEAN bAutoTxRateSwitch;
2541 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2542 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2544 typedef struct _WDS_TABLE {
2547 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2548 } WDS_TABLE, *PWDS_TABLE;
2550 typedef struct _APCLI_STRUCT {
2553 unsigned int mylinkid;
2555 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2556 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2557 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2559 CHAR Ssid[MAX_LEN_OF_SSID];
2562 CHAR CfgSsid[MAX_LEN_OF_SSID];
2563 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2564 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2566 ULONG ApCliRcvBeaconTime;
2568 ULONG CtrlCurrState;
2569 ULONG SyncCurrState;
2570 ULONG AuthCurrState;
2571 ULONG AssocCurrState;
2572 ULONG WpaPskCurrState;
2577 ULONG ClientStatusFlags;
2580 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2581 NDIS_802_11_WEP_STATUS WepStatus;
2583 // Add to support different cipher suite for WPA2/WPA mode
2584 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2585 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2586 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2587 USHORT RsnCapability;
2589 UCHAR PSK[100]; // reserve PSK key material
2591 UCHAR PMK[32]; // WPA PSK mode PMK
2592 //UCHAR PTK[64]; // WPA PSK mode PTK
2593 UCHAR GTK[32]; // GTK from authenticator
2595 //CIPHER_KEY PairwiseKey;
2596 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2599 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2600 //UCHAR PortSecured;
2602 // store RSN_IE built by driver
2603 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2606 // For WPA countermeasures
2607 ULONG LastMicErrorTime; // record last MIC error time
2608 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2609 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2611 // For WPA-PSK supplicant state
2612 //WPA_STATE WpaState; // Default is SS_NOTUSE
2613 //UCHAR ReplayCounter[8];
2614 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2615 UCHAR SNonce[32]; // SNonce for WPA-PSK
2616 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2618 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2619 RT_HT_PHY_INFO DesiredHtPhyInfo;
2620 BOOLEAN bAutoTxRateSwitch;
2621 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2622 } APCLI_STRUCT, *PAPCLI_STRUCT;
2624 // ----------- end of AP ----------------------------
2627 typedef struct _BLOCK_QUEUE_ENTRY
2629 BOOLEAN SwTxQueueBlockFlag;
2630 LIST_HEADER NetIfList;
2631 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2632 #endif // BLOCK_NET_IF //
2638 BOOLEAN bGreenField;
2644 typedef struct _INF_PCI_CONFIG
2646 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2649 typedef struct _INF_USB_CONFIG
2651 UINT BulkInEpAddr; // bulk-in endpoint address
2652 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2656 #ifdef IKANOS_VX_1X0
2657 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2659 struct IKANOS_TX_INFO
2661 struct net_device *netdev;
2662 IkanosWlanTxCbFuncP *fp;
2664 #endif // IKANOS_VX_1X0 //
2667 #define DIAGNOSE_TIME 10 // 10 sec
2668 typedef struct _RtmpDiagStrcut_
2669 { // Diagnosis Related element
2670 unsigned char inited;
2672 unsigned char ArrayStartIdx;
2673 unsigned char ArrayCurIdx;
2675 USHORT TxDataCnt[DIAGNOSE_TIME];
2676 USHORT TxFailCnt[DIAGNOSE_TIME];
2677 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2678 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2679 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2680 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2681 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2683 USHORT TxAggCnt[DIAGNOSE_TIME];
2684 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2685 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2686 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2687 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2688 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2691 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2692 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2693 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2694 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2696 #endif // DBG_DIAGNOSE //
2700 // The miniport adapter structure
2702 typedef struct _RTMP_ADAPTER
2704 PVOID OS_Cookie; // save specific structure relative to OS
2710 NDIS_SPIN_LOCK irq_lock;
2714 /*****************************************************************************************/
2715 /* USB related parameters */
2716 /*****************************************************************************************/
2717 struct usb_config_descriptor *config;
2718 UINT BulkInEpAddr; // bulk-in endpoint address
2719 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2722 USHORT BulkOutMaxPacketSize;
2723 USHORT BulkInMaxPacketSize;
2725 //======Control Flags
2726 LONG PendingIoCount;
2728 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2731 //======Timer Thread
2732 RT2870_TIMER_QUEUE TimerQ;
2733 NDIS_SPIN_LOCK TimerQLock;
2738 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2740 BOOLEAN TimerFunc_kill;
2744 //======Semaphores (event)
2745 struct semaphore mlme_semaphore; /* to sleep thread on */
2746 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2747 struct semaphore RTUSBTimer_semaphore;
2748 #ifdef INF_AMAZON_SE
2749 struct semaphore UsbVendorReq_semaphore;
2750 PVOID UsbVendorReqBuf;
2751 #endif // INF_AMAZON_SE //
2752 struct completion TimerQComplete;
2753 struct completion mlmeComplete;
2754 struct completion CmdQComplete;
2755 wait_queue_head_t *wait;
2757 //======Lock for 2870 ATE
2759 NDIS_SPIN_LOCK GenericLock; // ATE Tx/Rx generic spinlock
2760 #endif // RALINK_ATE //
2765 /*****************************************************************************************/
2766 /* Both PCI/USB related parameters */
2767 /*****************************************************************************************/
2770 /*****************************************************************************************/
2771 /* Tx related parameters */
2772 /*****************************************************************************************/
2773 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2774 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2777 // Data related context and AC specified, 4 AC supported
2778 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2779 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2781 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2782 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2784 // 4 sets of Bulk Out index and pending flag
2785 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2787 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2788 UCHAR bulkResetPipeid;
2789 BOOLEAN MgmtBulkPending;
2790 ULONG bulkResetReq[6];
2793 // resource for software backlog queues
2794 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2795 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2797 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2798 RTMP_MGMT_RING MgmtRing;
2799 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2802 /*****************************************************************************************/
2803 /* Rx related parameters */
2804 /*****************************************************************************************/
2808 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2809 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2810 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2811 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2812 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2813 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2814 ULONG TransferBufferLength; // current length of the packet buffer
2815 ULONG ReadPosition; // current read position in a packet buffer
2819 /*****************************************************************************************/
2820 /* ASIC related parameters */
2821 /*****************************************************************************************/
2822 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2824 // ---------------------------
2826 // ---------------------------
2827 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2828 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2829 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2830 BOOLEAN EepromAccess;
2832 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2834 // ---------------------------
2836 // ---------------------------
2837 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2838 UCHAR BbpRssiToDbmDelta;
2839 BBP_R66_TUNING BbpTuning;
2841 // ----------------------------
2843 // ----------------------------
2844 UCHAR RfIcType; // RFIC_xxx
2845 ULONG RfFreqOffset; // Frequency offset for channel switching
2846 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2848 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2849 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2851 // This soft Rx Antenna Diversity mechanism is used only when user set
2852 // RX Antenna = DIVERSITY ON
2853 SOFT_RX_ANT_DIVERSITY RxAnt;
2856 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2857 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2858 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2859 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2861 UCHAR ChannelListNum; // number of channel in ChannelList[]
2864 ULONG Tx20MPwrCfgABand[5];
2865 ULONG Tx20MPwrCfgGBand[5];
2866 ULONG Tx40MPwrCfgABand[5];
2867 ULONG Tx40MPwrCfgGBand[5];
2869 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2870 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2871 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2872 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2873 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2874 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2876 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2877 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2878 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2879 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2880 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2881 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2883 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2884 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2885 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2886 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2889 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2890 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2891 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2892 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2895 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2896 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2897 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2898 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2900 // ----------------------------
2902 // ----------------------------
2903 MCU_LEDCS_STRUC LedCntl;
2904 USHORT Led1; // read from EEPROM 0x3c
2905 USHORT Led2; // EEPROM 0x3e
2906 USHORT Led3; // EEPROM 0x40
2907 UCHAR LedIndicatorStregth;
2908 UCHAR RssiSingalstrengthOffet;
2909 BOOLEAN bLedOnScanning;
2912 /*****************************************************************************************/
2913 /* 802.11 related parameters */
2914 /*****************************************************************************************/
2915 // outgoing BEACON frame buffer and corresponding TXD
2916 TXWI_STRUC BeaconTxWI;
2918 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2920 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2921 PSPOLL_FRAME PsPollFrame;
2922 HEADER_802_11 NullFrame;
2925 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2926 TX_CONTEXT NullContext;
2927 TX_CONTEXT PsPollContext;
2928 TX_CONTEXT RTSContext;
2933 //=========AP===========
2936 //=======STA===========
2937 #ifdef CONFIG_STA_SUPPORT
2938 /* Modified by Wu Xi-Kun 4/21/2006 */
2939 // -----------------------------------------------
2940 // STA specific configuration & operation status
2941 // used only when pAd->OpMode == OPMODE_STA
2942 // -----------------------------------------------
2943 STA_ADMIN_CONFIG StaCfg; // user desired settings
2944 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2945 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2946 NDIS_MEDIA_STATE PreMediaState;
2947 #endif // CONFIG_STA_SUPPORT //
2949 //=======Common===========
2950 // OP mode: either AP or STA
2951 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2953 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2956 // MAT related parameters
2958 // configuration: read from Registry & E2PROM
2959 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2960 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2961 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2963 // ------------------------------------------------------
2964 // common configuration to both OPMODE_STA and OPMODE_AP
2965 // ------------------------------------------------------
2966 COMMON_CONFIG CommonCfg;
2969 // AP needs those vaiables for site survey feature.
2970 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2971 BSS_TABLE ScanTab; // store the latest SCAN result
2973 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2974 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2975 NDIS_SPIN_LOCK MacTabLock;
2977 #ifdef DOT11_N_SUPPORT
2979 #endif // DOT11_N_SUPPORT //
2980 NDIS_SPIN_LOCK BATabLock;
2981 RALINK_TIMER_STRUCT RECBATimer;
2983 // encryption/decryption KEY tables
2984 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2986 // RX re-assembly buffer for fragmentation
2987 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2990 COUNTER_802_3 Counters8023; // 802.3 counters
2991 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2992 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2993 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2994 PRIVATE_STRUC PrivateInfo; // Private information & counters
2996 // flags, see fRTMP_ADAPTER_xxx flags
2997 ULONG Flags; // Represent current device status
2999 // current TX sequence #
3002 // Control disconnect / connect event generation
3003 //+++Didn't used anymore
3008 //+++Used only for Station
3009 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
3012 ULONG ExtraInfo; // Extra information for displaying status
3013 ULONG SystemErrorBitmap; // b0: E2PROM version error
3015 //+++Didn't used anymore
3016 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
3019 // ---------------------------
3021 // ---------------------------
3022 RT_802_11_EVENT_TABLE EventTab;
3027 /*****************************************************************************************/
3028 /* Statistic related parameters */
3029 /*****************************************************************************************/
3031 ULONG BulkOutDataOneSecCount;
3032 ULONG BulkInDataOneSecCount;
3033 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
3034 ULONG watchDogRxCnt;
3035 ULONG watchDogRxOverFlowCnt;
3036 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
3039 BOOLEAN bUpdateBcnCntDone;
3040 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
3041 // ----------------------------
3043 // ----------------------------
3044 //ULONG DebugSetting[4];
3045 BOOLEAN bBanAllBaSetup;
3046 BOOLEAN bPromiscuous;
3048 // ----------------------------
3049 // rt2860c emulation-use Parameters
3050 // ----------------------------
3053 ULONG cfendaccu[30];
3054 ULONG bacontent[16];
3055 ULONG rxint[RX_RING_SIZE+1];
3058 BOOLEAN bForcePrintTX;
3059 BOOLEAN bForcePrintRX;
3060 BOOLEAN bDisablescanning; //defined in RT2870 USB
3061 BOOLEAN bStaFifoTest;
3062 BOOLEAN bProtectionTest;
3064 BOOLEAN bGenOneHCCA;
3065 BOOLEAN bBroadComHT;
3066 //+++Following add from RT2870 USB.
3068 ULONG BulkOutComplete;
3069 ULONG BulkOutCompleteOther;
3070 ULONG BulkOutCompleteCancel; // seems not use now?
3072 ULONG BulkInComplete;
3073 ULONG BulkInCompleteFail;
3076 struct wificonf WIFItestbed;
3081 BOOLEAN ContinBulkOut; //ATE bulk out control
3082 BOOLEAN ContinBulkIn; //ATE bulk in control
3083 atomic_t BulkOutRemained;
3084 atomic_t BulkInRemained;
3086 #endif // RALINK_ATE //
3088 #ifdef DOT11_N_SUPPORT
3089 struct reordering_mpdu_pool mpdu_blk_pool;
3090 #endif // DOT11_N_SUPPORT //
3092 ULONG OneSecondnonBEpackets; // record non BE packets per second
3094 #if WIRELESS_EXT >= 12
3095 struct iw_statistics iw_stats;
3098 struct net_device_stats stats;
3101 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
3102 #endif // BLOCK_NET_IF //
3106 #ifdef MULTIPLE_CARD_SUPPORT
3108 UCHAR MC_FileName[256];
3109 #endif // MULTIPLE_CARD_SUPPORT //
3111 ULONG TbttTickCount;
3112 #ifdef PCI_MSI_SUPPORT
3114 #endif // PCI_MSI_SUPPORT //
3119 #define TIME_BASE (1000000/OS_HZ)
3120 #define TIME_ONE_SECOND (1000000/TIME_BASE)
3121 UCHAR flg_be_adjust;
3122 ULONG be_adjust_last_time;
3124 #ifdef IKANOS_VX_1X0
3125 struct IKANOS_TX_INFO IkanosTxInfo;
3126 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3127 #endif // IKANOS_VX_1X0 //
3131 RtmpDiagStruct DiagStruct;
3132 #endif // DBG_DIAGNOSE //
3135 UINT8 PM_FlgSuspend;
3140 BOOLEAN bEEPROMFile;
3143 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3146 // Cisco IAPP format
3148 typedef struct _CISCO_IAPP_CONTENT_
3150 USHORT Length; //IAPP Length
3151 UCHAR MessageType; //IAPP type
3152 UCHAR FunctionCode; //IAPP function type
3153 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3154 UCHAR SourceMAC[MAC_ADDR_LEN];
3155 USHORT Tag; //Tag(element IE) - Adjacent AP report
3156 USHORT TagLength; //Length of element not including 4 byte header
3157 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3158 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3161 UCHAR Ssid[MAX_LEN_OF_SSID];
3162 USHORT Seconds; //Seconds that the client has been disassociated.
3163 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3165 #define DELAYINTMASK 0x0003fffb
3166 #define INTMASK 0x0003fffb
3167 #define IndMask 0x0003fffc
3168 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3169 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3170 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3171 #define TxCoherent 0x00020000 // tx coherent
3172 #define RxCoherent 0x00010000 // rx coherent
3173 #define McuCommand 0x00000200 // mcu
3174 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3175 #define TBTTInt 0x00000800 // TBTT interrupt
3176 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3177 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3178 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3181 typedef struct _RX_BLK_
3183 // RXD_STRUC RxD; // sample
3184 RT28XX_RXD_STRUC RxD;
3186 PHEADER_802_11 pHeader;
3187 PNDIS_PACKET pRxPacket;
3191 UCHAR UserPriority; // for calculate TKIP MIC using
3195 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3196 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3197 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3200 #define fRX_WDS 0x0001
3201 #define fRX_AMSDU 0x0002
3202 #define fRX_ARALINK 0x0004
3203 #define fRX_HTC 0x0008
3204 #define fRX_PAD 0x0010
3205 #define fRX_AMPDU 0x0020
3206 #define fRX_QOS 0x0040
3207 #define fRX_INFRA 0x0080
3208 #define fRX_EAP 0x0100
3209 #define fRX_MESH 0x0200
3210 #define fRX_APCLI 0x0400
3211 #define fRX_DLS 0x0800
3212 #define fRX_WPI 0x1000
3214 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3215 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3216 #define LENGTH_ARALINK_HEADER_FIELD 2
3218 #define TX_UNKOWN_FRAME 0x00
3219 #define TX_MCAST_FRAME 0x01
3220 #define TX_LEGACY_FRAME 0x02
3221 #define TX_AMPDU_FRAME 0x04
3222 #define TX_AMSDU_FRAME 0x08
3223 #define TX_RALINK_FRAME 0x10
3224 #define TX_FRAG_FRAME 0x20
3227 // Currently the sizeof(TX_BLK) is 148 bytes.
3228 typedef struct _TX_BLK_
3231 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3232 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3233 USHORT TotalFragNum; // Total frame fragments required in one batch
3234 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3236 QUEUE_HEADER TxPacketList;
3237 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3238 HTTRANSMIT_SETTING *pTransmit;
3240 // Following structure used for the characteristics of a specific packet.
3241 PNDIS_PACKET pPacket;
3242 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3243 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3244 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3245 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3246 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3247 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3248 UCHAR HdrPadLen; // recording Header Padding Length;
3249 UCHAR apidx; // The interface associated to this packet
3250 UCHAR Wcid; // The MAC entry associated to this packet
3251 UCHAR UserPriority; // priority class of packet
3252 UCHAR FrameGap; // what kind of IFS this packet use
3253 UCHAR MpduReqNum; // number of fragments of this frame
3254 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3255 UCHAR CipherAlg; // cipher alogrithm
3260 USHORT Flags; //See following definitions for detail.
3262 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3263 ULONG Priv; // Hardware specific value saved in here.
3267 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3268 #define fTX_bAckRequired 0x0002 // the packet need ack response
3269 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3270 #define fTX_bHTRate 0x0008 // allow to use HT rate
3271 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3272 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3273 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3274 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3275 #define fTX_bWMM 0x0080 // QOS Data
3277 #define fTX_bClearEAPFrame 0x0100
3280 #ifdef CONFIG_STA_SUPPORT
3281 #endif // CONFIG_STA_SUPPORT //
3285 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3288 (_pTxBlk->Flags |= _flag) \
3290 (_pTxBlk->Flags &= ~(_flag)) \
3293 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3294 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3295 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3301 //------------------------------------------------------------------------------------------
3305 #ifdef RT_BIG_ENDIAN
3306 static inline VOID WriteBackToDescriptor(
3309 IN BOOLEAN DoEncrypt,
3310 IN ULONG DescriptorType)
3314 p1 = ((UINT32 *)Dest);
3315 p2 = ((UINT32 *)Src);
3320 *(p1+1) = *(p2+1); // Word 1; this must be written back last
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 ========================================================================
3341 static inline VOID RTMPWIEndianChange(
3343 IN ULONG DescriptorType)
3348 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3350 if(DescriptorType == TYPE_TXWI)
3352 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3353 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3357 for(i=0; i < size/4 ; i++)
3358 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3363 ========================================================================
3365 Routine Description:
3366 Endian conversion of Tx/Rx descriptor .
3369 pAd Pointer to our adapter
3370 pData Pointer to Tx/Rx descriptor
3371 DescriptorType Direction of the frame
3377 Call this function when read or update descriptor
3378 ========================================================================
3382 static inline VOID RTMPDescriptorEndianChange(
3384 IN ULONG DescriptorType)
3386 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3390 ========================================================================
3392 Routine Description:
3393 Endian conversion of all kinds of 802.11 frames .
3396 pAd Pointer to our adapter
3397 pData Pointer to the 802.11 frame structure
3398 Dir Direction of the frame
3399 FromRxDoneInt Caller is from RxDone interrupt
3405 Call this function when read or update buffer data
3406 ========================================================================
3408 static inline VOID RTMPFrameEndianChange(
3409 IN PRTMP_ADAPTER pAd,
3412 IN BOOLEAN FromRxDoneInt)
3414 PHEADER_802_11 pFrame;
3417 // swab 16 bit fields - Frame Control field
3420 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3423 pFrame = (PHEADER_802_11) pData;
3424 pMacHdr = (PUCHAR) pFrame;
3426 // swab 16 bit fields - Duration/ID field
3427 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3429 // swab 16 bit fields - Sequence Control field
3430 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3432 if(pFrame->FC.Type == BTYPE_MGMT)
3434 switch(pFrame->FC.SubType)
3436 case SUBTYPE_ASSOC_REQ:
3437 case SUBTYPE_REASSOC_REQ:
3438 // swab 16 bit fields - CapabilityInfo field
3439 pMacHdr += sizeof(HEADER_802_11);
3440 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3442 // swab 16 bit fields - Listen Interval field
3444 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3447 case SUBTYPE_ASSOC_RSP:
3448 case SUBTYPE_REASSOC_RSP:
3449 // swab 16 bit fields - CapabilityInfo field
3450 pMacHdr += sizeof(HEADER_802_11);
3451 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3453 // swab 16 bit fields - Status Code field
3455 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3457 // swab 16 bit fields - AID field
3459 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3463 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3464 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3465 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3469 // swab 16 bit fields - Auth Alg No. field
3470 pMacHdr += sizeof(HEADER_802_11);
3471 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3473 // swab 16 bit fields - Auth Seq No. field
3475 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3477 // swab 16 bit fields - Status Code field
3479 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3483 case SUBTYPE_BEACON:
3484 case SUBTYPE_PROBE_RSP:
3485 // swab 16 bit fields - BeaconInterval field
3486 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3487 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3489 // swab 16 bit fields - CapabilityInfo field
3490 pMacHdr += sizeof(USHORT);
3491 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3494 case SUBTYPE_DEAUTH:
3495 case SUBTYPE_DISASSOC:
3496 // swab 16 bit fields - Reason code field
3497 pMacHdr += sizeof(HEADER_802_11);
3498 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3502 else if( pFrame->FC.Type == BTYPE_DATA )
3505 else if(pFrame->FC.Type == BTYPE_CNTL)
3507 switch(pFrame->FC.SubType)
3509 case SUBTYPE_BLOCK_ACK_REQ:
3511 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3512 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3513 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3516 case SUBTYPE_BLOCK_ACK:
3517 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3518 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3522 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3523 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3529 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3532 // swab 16 bit fields - Frame Control
3533 if(Dir == DIR_WRITE)
3535 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3538 #endif // RT_BIG_ENDIAN //
3541 static inline VOID ConvertMulticastIP2MAC(
3543 IN PUCHAR *ppMacAddr,
3544 IN UINT16 ProtoType)
3546 if (pIpAddr == NULL)
3549 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3555 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3556 *(*ppMacAddr) = 0x33;
3557 *(*ppMacAddr + 1) = 0x33;
3558 *(*ppMacAddr + 2) = pIpAddr[12];
3559 *(*ppMacAddr + 3) = pIpAddr[13];
3560 *(*ppMacAddr + 4) = pIpAddr[14];
3561 *(*ppMacAddr + 5) = pIpAddr[15];
3566 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3567 *(*ppMacAddr) = 0x01;
3568 *(*ppMacAddr + 1) = 0x00;
3569 *(*ppMacAddr + 2) = 0x5e;
3570 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3571 *(*ppMacAddr + 4) = pIpAddr[2];
3572 *(*ppMacAddr + 5) = pIpAddr[3];
3579 BOOLEAN RTMPCheckForHang(
3580 IN NDIS_HANDLE MiniportAdapterContext
3584 IN NDIS_HANDLE MiniportAdapterContext
3588 // Private routines in rtmp_init.c
3590 NDIS_STATUS RTMPAllocAdapterBlock(
3592 OUT PRTMP_ADAPTER *ppAdapter
3595 NDIS_STATUS RTMPAllocTxRxRingMemory(
3596 IN PRTMP_ADAPTER pAd
3599 NDIS_STATUS RTMPFindAdapter(
3600 IN PRTMP_ADAPTER pAd,
3601 IN NDIS_HANDLE WrapperConfigurationContext
3604 NDIS_STATUS RTMPReadParametersHook(
3605 IN PRTMP_ADAPTER pAd
3608 VOID RTMPFreeAdapter(
3609 IN PRTMP_ADAPTER pAd
3612 NDIS_STATUS NICReadRegParameters(
3613 IN PRTMP_ADAPTER pAd,
3614 IN NDIS_HANDLE WrapperConfigurationContext
3618 VOID NICInitRT30xxRFRegisters(
3619 IN PRTMP_ADAPTER pAd);
3622 VOID NICReadEEPROMParameters(
3623 IN PRTMP_ADAPTER pAd,
3624 IN PUCHAR mac_addr);
3626 VOID NICInitAsicFromEEPROM(
3627 IN PRTMP_ADAPTER pAd);
3629 VOID NICInitTxRxRingAndBacklogQueue(
3630 IN PRTMP_ADAPTER pAd);
3632 NDIS_STATUS NICInitializeAdapter(
3633 IN PRTMP_ADAPTER pAd,
3634 IN BOOLEAN bHardReset);
3636 NDIS_STATUS NICInitializeAsic(
3637 IN PRTMP_ADAPTER pAd,
3638 IN BOOLEAN bHardReset);
3641 IN PRTMP_ADAPTER pAd);
3643 VOID RTMPRingCleanUp(
3644 IN PRTMP_ADAPTER pAd,
3648 IN PRTMP_ADAPTER pAd);
3650 NDIS_STATUS DbgSendPacket(
3651 IN PRTMP_ADAPTER pAd,
3652 IN PNDIS_PACKET pPacket);
3655 IN PRTMP_ADAPTER pAd);
3657 VOID NICResetFromError(
3658 IN PRTMP_ADAPTER pAd);
3660 VOID NICEraseFirmware(
3661 IN PRTMP_ADAPTER pAd);
3663 NDIS_STATUS NICLoadFirmware(
3664 IN PRTMP_ADAPTER pAd);
3666 NDIS_STATUS NICLoadRateSwitchingParams(
3667 IN PRTMP_ADAPTER pAd);
3669 BOOLEAN NICCheckForHang(
3670 IN PRTMP_ADAPTER pAd);
3672 VOID NICUpdateFifoStaCounters(
3673 IN PRTMP_ADAPTER pAd);
3675 VOID NICUpdateRawCounters(
3676 IN PRTMP_ADAPTER pAd);
3678 ULONG RTMPNotAllZero(
3682 VOID RTMPZeroMemory(
3686 ULONG RTMPCompareMemory(
3691 VOID RTMPMoveMemory(
3704 VOID RTMPPatchMacBbpBug(
3705 IN PRTMP_ADAPTER pAd);
3707 VOID RTMPPatchCardBus(
3708 IN PRTMP_ADAPTER pAdapter);
3710 VOID RTMPPatchRalinkCardBus(
3711 IN PRTMP_ADAPTER pAdapter,
3714 ULONG RTMPReadCBConfig(
3720 VOID RTMPWriteCBConfig(
3728 IN PRTMP_ADAPTER pAd,
3729 IN PRALINK_TIMER_STRUCT pTimer,
3730 IN PVOID pTimerFunc,
3735 IN PRALINK_TIMER_STRUCT pTimer,
3740 IN PRALINK_TIMER_STRUCT pTimer,
3743 VOID RTMPCancelTimer(
3744 IN PRALINK_TIMER_STRUCT pTimer,
3745 OUT BOOLEAN *pCancelled);
3748 IN PRTMP_ADAPTER pAd,
3751 VOID RTMPSetSignalLED(
3752 IN PRTMP_ADAPTER pAd,
3753 IN NDIS_802_11_RSSI Dbm);
3755 VOID RTMPEnableRxTx(
3756 IN PRTMP_ADAPTER pAd);
3759 // prototype in action.c
3761 VOID ActionStateMachineInit(
3762 IN PRTMP_ADAPTER pAd,
3763 IN STATE_MACHINE *S,
3764 OUT STATE_MACHINE_FUNC Trans[]);
3766 VOID MlmeADDBAAction(
3767 IN PRTMP_ADAPTER pAd,
3768 IN MLME_QUEUE_ELEM *Elem);
3770 VOID MlmeDELBAAction(
3771 IN PRTMP_ADAPTER pAd,
3772 IN MLME_QUEUE_ELEM *Elem);
3775 IN PRTMP_ADAPTER pAd,
3776 IN MLME_QUEUE_ELEM *Elem);
3778 VOID MlmeInvalidAction(
3779 IN PRTMP_ADAPTER pAd,
3780 IN MLME_QUEUE_ELEM *Elem);
3783 IN PRTMP_ADAPTER pAd,
3784 IN MLME_QUEUE_ELEM *Elem);
3786 #ifdef DOT11_N_SUPPORT
3787 VOID PeerAddBAReqAction(
3788 IN PRTMP_ADAPTER pAd,
3789 IN MLME_QUEUE_ELEM *Elem);
3791 VOID PeerAddBARspAction(
3792 IN PRTMP_ADAPTER pAd,
3793 IN MLME_QUEUE_ELEM *Elem);
3795 VOID PeerDelBAAction(
3796 IN PRTMP_ADAPTER pAd,
3797 IN MLME_QUEUE_ELEM *Elem);
3800 IN PRTMP_ADAPTER pAd,
3801 IN MLME_QUEUE_ELEM *Elem);
3802 #endif // DOT11_N_SUPPORT //
3804 VOID SendPSMPAction(
3805 IN PRTMP_ADAPTER pAd,
3810 #ifdef DOT11N_DRAFT3
3811 VOID SendBSS2040CoexistMgmtAction(
3812 IN PRTMP_ADAPTER pAd,
3817 VOID SendNotifyBWActionFrame(
3818 IN PRTMP_ADAPTER pAd,
3822 BOOLEAN ChannelSwitchSanityCheck(
3823 IN PRTMP_ADAPTER pAd,
3825 IN UCHAR NewChannel,
3826 IN UCHAR Secondary);
3828 VOID ChannelSwitchAction(
3829 IN PRTMP_ADAPTER pAd,
3832 IN UCHAR Secondary);
3834 ULONG BuildIntolerantChannelRep(
3835 IN PRTMP_ADAPTER pAd,
3838 VOID Update2040CoexistFrameAndNotify(
3839 IN PRTMP_ADAPTER pAd,
3841 IN BOOLEAN bAddIntolerantCha);
3843 VOID Send2040CoexistAction(
3844 IN PRTMP_ADAPTER pAd,
3846 IN BOOLEAN bAddIntolerantCha);
3847 #endif // DOT11N_DRAFT3 //
3850 IN PRTMP_ADAPTER pAd,
3851 IN MLME_QUEUE_ELEM *Elem);
3853 VOID PeerPublicAction(
3854 IN PRTMP_ADAPTER pAd,
3855 IN MLME_QUEUE_ELEM *Elem);
3857 #ifdef CONFIG_STA_SUPPORT
3858 VOID StaPublicAction(
3859 IN PRTMP_ADAPTER pAd,
3860 IN UCHAR Bss2040Coexist);
3861 #endif // CONFIG_STA_SUPPORT //
3864 VOID PeerBSSTranAction(
3865 IN PRTMP_ADAPTER pAd,
3866 IN MLME_QUEUE_ELEM *Elem);
3868 #ifdef DOT11_N_SUPPORT
3870 IN PRTMP_ADAPTER pAd,
3871 IN MLME_QUEUE_ELEM *Elem);
3872 #endif // DOT11_N_SUPPORT //
3875 IN PRTMP_ADAPTER pAd,
3876 IN MLME_QUEUE_ELEM *Elem);
3878 #ifdef QOS_DLS_SUPPORT
3880 IN PRTMP_ADAPTER pAd,
3881 IN MLME_QUEUE_ELEM *Elem);
3882 #endif // QOS_DLS_SUPPORT //
3884 #ifdef CONFIG_STA_SUPPORT
3885 #ifdef QOS_DLS_SUPPORT
3887 IN PRTMP_ADAPTER pAd,
3888 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3889 IN PRT_802_11_DLS pDls,
3891 #endif // QOS_DLS_SUPPORT //
3892 #endif // CONFIG_STA_SUPPORT //
3894 #ifdef DOT11_N_SUPPORT
3895 VOID RECBATimerTimeout(
3896 IN PVOID SystemSpecific1,
3897 IN PVOID FunctionContext,
3898 IN PVOID SystemSpecific2,
3899 IN PVOID SystemSpecific3);
3901 VOID ORIBATimerTimeout(
3902 IN PRTMP_ADAPTER pAd);
3904 VOID SendRefreshBAR(
3905 IN PRTMP_ADAPTER pAd,
3906 IN MAC_TABLE_ENTRY *pEntry);
3907 #endif // DOT11_N_SUPPORT //
3910 IN PRTMP_ADAPTER pAd,
3911 IN OUT PHEADER_802_11 pHdr80211,
3917 IN PRTMP_ADAPTER pAd,
3918 IN OUT PFRAME_BAR pCntlBar,
3922 VOID InsertActField(
3923 IN PRTMP_ADAPTER pAd,
3924 OUT PUCHAR pFrameBuf,
3925 OUT PULONG pFrameLen,
3929 BOOLEAN QosBADataParse(
3930 IN PRTMP_ADAPTER pAd,
3932 IN PUCHAR p8023Header,
3936 IN UCHAR DataOffset,
3938 IN UINT CurRxIndex);
3940 #ifdef DOT11_N_SUPPORT
3941 BOOLEAN CntlEnqueueForRecv(
3942 IN PRTMP_ADAPTER pAd,
3945 IN PFRAME_BA_REQ pMsg);
3947 VOID BaAutoManSwitch(
3948 IN PRTMP_ADAPTER pAd);
3949 #endif // DOT11_N_SUPPORT //
3952 IN PRTMP_ADAPTER pAd,
3953 IN UCHAR BatRecIdx);
3956 // Private routines in rtmp_data.c
3958 BOOLEAN RTMPHandleRxDoneInterrupt(
3959 IN PRTMP_ADAPTER pAd);
3961 VOID RTMPHandleTxDoneInterrupt(
3962 IN PRTMP_ADAPTER pAd);
3964 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3965 IN PRTMP_ADAPTER pAd,
3966 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3968 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3969 IN PRTMP_ADAPTER pAd);
3971 VOID RTMPHandleTBTTInterrupt(
3972 IN PRTMP_ADAPTER pAd);
3974 VOID RTMPHandlePreTBTTInterrupt(
3975 IN PRTMP_ADAPTER pAd);
3977 void RTMPHandleTwakeupInterrupt(
3978 IN PRTMP_ADAPTER pAd);
3980 VOID RTMPHandleRxCoherentInterrupt(
3981 IN PRTMP_ADAPTER pAd);
3983 BOOLEAN TxFrameIsAggregatible(
3984 IN PRTMP_ADAPTER pAd,
3985 IN PUCHAR pPrevAddr1,
3986 IN PUCHAR p8023hdr);
3988 BOOLEAN PeerIsAggreOn(
3989 IN PRTMP_ADAPTER pAd,
3991 IN PMAC_TABLE_ENTRY pMacEntry);
3993 NDIS_STATUS Sniff2BytesFromNdisBuffer(
3994 IN PNDIS_BUFFER pFirstBuffer,
3995 IN UCHAR DesiredOffset,
3999 NDIS_STATUS STASendPacket(
4000 IN PRTMP_ADAPTER pAd,
4001 IN PNDIS_PACKET pPacket);
4003 VOID STASendPackets(
4004 IN NDIS_HANDLE MiniportAdapterContext,
4005 IN PPNDIS_PACKET ppPacketArray,
4006 IN UINT NumberOfPackets);
4008 VOID RTMPDeQueuePacket(
4009 IN PRTMP_ADAPTER pAd,
4010 IN BOOLEAN bIntContext,
4012 IN UCHAR Max_Tx_Packets);
4014 NDIS_STATUS RTMPHardTransmit(
4015 IN PRTMP_ADAPTER pAd,
4016 IN PNDIS_PACKET pPacket,
4018 OUT PULONG pFreeTXDLeft);
4020 NDIS_STATUS STAHardTransmit(
4021 IN PRTMP_ADAPTER pAd,
4025 VOID STARxEAPOLFrameIndicate(
4026 IN PRTMP_ADAPTER pAd,
4027 IN MAC_TABLE_ENTRY *pEntry,
4029 IN UCHAR FromWhichBSSID);
4031 NDIS_STATUS RTMPFreeTXDRequest(
4032 IN PRTMP_ADAPTER pAd,
4034 IN UCHAR NumberRequired,
4035 IN PUCHAR FreeNumberIs);
4037 NDIS_STATUS MlmeHardTransmit(
4038 IN PRTMP_ADAPTER pAd,
4040 IN PNDIS_PACKET pPacket);
4042 NDIS_STATUS MlmeHardTransmitMgmtRing(
4043 IN PRTMP_ADAPTER pAd,
4045 IN PNDIS_PACKET pPacket);
4047 NDIS_STATUS MlmeHardTransmitTxRing(
4048 IN PRTMP_ADAPTER pAd,
4050 IN PNDIS_PACKET pPacket);
4052 USHORT RTMPCalcDuration(
4053 IN PRTMP_ADAPTER pAd,
4058 IN PRTMP_ADAPTER pAd,
4059 IN PTXWI_STRUC pTxWI,
4062 IN BOOLEAN InsTimestamp,
4065 IN BOOLEAN NSeq, // HW new a sequence.
4074 IN HTTRANSMIT_SETTING *pTransmit);
4077 VOID RTMPWriteTxWI_Data(
4078 IN PRTMP_ADAPTER pAd,
4079 IN OUT PTXWI_STRUC pTxWI,
4083 VOID RTMPWriteTxWI_Cache(
4084 IN PRTMP_ADAPTER pAd,
4085 IN OUT PTXWI_STRUC pTxWI,
4088 VOID RTMPWriteTxDescriptor(
4089 IN PRTMP_ADAPTER pAd,
4094 VOID RTMPSuspendMsduTransmission(
4095 IN PRTMP_ADAPTER pAd);
4097 VOID RTMPResumeMsduTransmission(
4098 IN PRTMP_ADAPTER pAd);
4100 NDIS_STATUS MiniportMMRequest(
4101 IN PRTMP_ADAPTER pAd,
4106 NDIS_STATUS MiniportDataMMRequest(
4107 IN PRTMP_ADAPTER pAd,
4112 VOID RTMPSendNullFrame(
4113 IN PRTMP_ADAPTER pAd,
4115 IN BOOLEAN bQosNull);
4117 VOID RTMPSendDisassociationFrame(
4118 IN PRTMP_ADAPTER pAd);
4120 VOID RTMPSendRTSFrame(
4121 IN PRTMP_ADAPTER pAd,
4123 IN unsigned int NextMpduSize,
4126 IN USHORT AckDuration,
4131 NDIS_STATUS RTMPApplyPacketFilter(
4132 IN PRTMP_ADAPTER pAd,
4133 IN PRT28XX_RXD_STRUC pRxD,
4134 IN PHEADER_802_11 pHeader);
4136 PQUEUE_HEADER RTMPCheckTxSwQueue(
4137 IN PRTMP_ADAPTER pAd,
4140 #ifdef CONFIG_STA_SUPPORT
4141 VOID RTMPReportMicError(
4142 IN PRTMP_ADAPTER pAd,
4143 IN PCIPHER_KEY pWpaKey);
4145 VOID WpaMicFailureReportFrame(
4146 IN PRTMP_ADAPTER pAd,
4147 IN MLME_QUEUE_ELEM *Elem);
4149 VOID WpaDisassocApAndBlockAssoc(
4150 IN PVOID SystemSpecific1,
4151 IN PVOID FunctionContext,
4152 IN PVOID SystemSpecific2,
4153 IN PVOID SystemSpecific3);
4154 #endif // CONFIG_STA_SUPPORT //
4156 NDIS_STATUS RTMPCloneNdisPacket(
4157 IN PRTMP_ADAPTER pAd,
4158 IN BOOLEAN pInsAMSDUHdr,
4159 IN PNDIS_PACKET pInPacket,
4160 OUT PNDIS_PACKET *ppOutPacket);
4162 NDIS_STATUS RTMPAllocateNdisPacket(
4163 IN PRTMP_ADAPTER pAd,
4164 IN PNDIS_PACKET *pPacket,
4170 VOID RTMPFreeNdisPacket(
4171 IN PRTMP_ADAPTER pAd,
4172 IN PNDIS_PACKET pPacket);
4174 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4175 IN PRTMP_ADAPTER pAd,
4178 BOOLEAN RTMPCheckDHCPFrame(
4179 IN PRTMP_ADAPTER pAd,
4180 IN PNDIS_PACKET pPacket);
4183 BOOLEAN RTMPCheckEtherType(
4184 IN PRTMP_ADAPTER pAd,
4185 IN PNDIS_PACKET pPacket);
4188 VOID RTMPCckBbpTuning(
4189 IN PRTMP_ADAPTER pAd,
4193 // Private routines in rtmp_wep.c
4195 VOID RTMPInitWepEngine(
4196 IN PRTMP_ADAPTER pAd,
4202 VOID RTMPEncryptData(
4203 IN PRTMP_ADAPTER pAd,
4208 BOOLEAN RTMPDecryptData(
4209 IN PRTMP_ADAPTER pAdapter,
4214 BOOLEAN RTMPSoftDecryptWEP(
4215 IN PRTMP_ADAPTER pAd,
4217 IN ULONG DataByteCnt,
4218 IN PCIPHER_KEY pGroupKey);
4221 IN PRTMP_ADAPTER pAd,
4225 IN PARCFOURCONTEXT Ctx,
4230 IN PARCFOURCONTEXT Ctx);
4232 VOID ARCFOUR_DECRYPT(
4233 IN PARCFOURCONTEXT Ctx,
4238 VOID ARCFOUR_ENCRYPT(
4239 IN PARCFOURCONTEXT Ctx,
4244 VOID WPAARCFOUR_ENCRYPT(
4245 IN PARCFOURCONTEXT Ctx,
4250 UINT RTMP_CALC_FCS32(
4259 // Asic/RF/BBP related functions
4261 VOID AsicAdjustTxPower(
4262 IN PRTMP_ADAPTER pAd);
4264 VOID AsicUpdateProtect(
4265 IN PRTMP_ADAPTER pAd,
4266 IN USHORT OperaionMode,
4268 IN BOOLEAN bDisableBGProtect,
4269 IN BOOLEAN bNonGFExist);
4271 VOID AsicSwitchChannel(
4272 IN PRTMP_ADAPTER pAd,
4276 VOID AsicLockChannel(
4277 IN PRTMP_ADAPTER pAd,
4280 VOID AsicAntennaSelect(
4281 IN PRTMP_ADAPTER pAd,
4284 VOID AsicAntennaSetting(
4285 IN PRTMP_ADAPTER pAd,
4286 IN ABGBAND_STATE BandState);
4288 VOID AsicRfTuningExec(
4289 IN PVOID SystemSpecific1,
4290 IN PVOID FunctionContext,
4291 IN PVOID SystemSpecific2,
4292 IN PVOID SystemSpecific3);
4294 #ifdef CONFIG_STA_SUPPORT
4295 VOID AsicSleepThenAutoWakeup(
4296 IN PRTMP_ADAPTER pAd,
4297 IN USHORT TbttNumToNextWakeUp);
4299 VOID AsicForceSleep(
4300 IN PRTMP_ADAPTER pAd);
4302 VOID AsicForceWakeup(
4303 IN PRTMP_ADAPTER pAd,
4304 IN BOOLEAN bFromTx);
4305 #endif // CONFIG_STA_SUPPORT //
4308 IN PRTMP_ADAPTER pAd,
4311 VOID AsicSetMcastWC(
4312 IN PRTMP_ADAPTER pAd);
4314 VOID AsicDelWcidTab(
4315 IN PRTMP_ADAPTER pAd,
4319 IN PRTMP_ADAPTER pAd);
4321 VOID AsicDisableRDG(
4322 IN PRTMP_ADAPTER pAd);
4324 VOID AsicDisableSync(
4325 IN PRTMP_ADAPTER pAd);
4327 VOID AsicEnableBssSync(
4328 IN PRTMP_ADAPTER pAd);
4330 VOID AsicEnableIbssSync(
4331 IN PRTMP_ADAPTER pAd);
4333 VOID AsicSetEdcaParm(
4334 IN PRTMP_ADAPTER pAd,
4335 IN PEDCA_PARM pEdcaParm);
4337 VOID AsicSetSlotTime(
4338 IN PRTMP_ADAPTER pAd,
4339 IN BOOLEAN bUseShortSlotTime);
4341 VOID AsicAddSharedKeyEntry(
4342 IN PRTMP_ADAPTER pAd,
4350 VOID AsicRemoveSharedKeyEntry(
4351 IN PRTMP_ADAPTER pAd,
4355 VOID AsicUpdateWCIDAttribute(
4356 IN PRTMP_ADAPTER pAd,
4360 IN BOOLEAN bUsePairewiseKeyTable);
4362 VOID AsicUpdateWCIDIVEIV(
4363 IN PRTMP_ADAPTER pAd,
4368 VOID AsicUpdateRxWCIDTable(
4369 IN PRTMP_ADAPTER pAd,
4373 VOID AsicAddKeyEntry(
4374 IN PRTMP_ADAPTER pAd,
4378 IN PCIPHER_KEY pCipherKey,
4379 IN BOOLEAN bUsePairewiseKeyTable,
4382 VOID AsicAddPairwiseKeyEntry(
4383 IN PRTMP_ADAPTER pAd,
4386 IN CIPHER_KEY *pCipherKey);
4388 VOID AsicRemovePairwiseKeyEntry(
4389 IN PRTMP_ADAPTER pAd,
4393 BOOLEAN AsicSendCommandToMcu(
4394 IN PRTMP_ADAPTER pAd,
4401 VOID MacAddrRandomBssid(
4402 IN PRTMP_ADAPTER pAd,
4405 VOID MgtMacHeaderInit(
4406 IN PRTMP_ADAPTER pAd,
4407 IN OUT PHEADER_802_11 pHdr80211,
4414 IN PRTMP_ADAPTER pAd);
4417 IN PRTMP_ADAPTER pAd);
4423 #ifdef DOT11_N_SUPPORT
4425 IN PRTMP_ADAPTER pAd,
4427 #endif // DOT11_N_SUPPORT //
4429 ULONG BssTableSearch(
4434 ULONG BssSsidTableSearch(
4441 ULONG BssTableSearchWithSSID(
4448 VOID BssTableDeleteEntry(
4449 IN OUT PBSS_TABLE pTab,
4453 #ifdef DOT11_N_SUPPORT
4454 VOID BATableDeleteORIEntry(
4455 IN OUT PRTMP_ADAPTER pAd,
4456 IN BA_ORI_ENTRY *pBAORIEntry);
4458 VOID BATableDeleteRECEntry(
4459 IN OUT PRTMP_ADAPTER pAd,
4460 IN BA_REC_ENTRY *pBARECEntry);
4462 VOID BATableTearORIEntry(
4463 IN OUT PRTMP_ADAPTER pAd,
4466 IN BOOLEAN bForceDelete,
4469 VOID BATableTearRECEntry(
4470 IN OUT PRTMP_ADAPTER pAd,
4474 #endif // DOT11_N_SUPPORT //
4477 IN PRTMP_ADAPTER pAd,
4478 OUT PBSS_ENTRY pBss,
4483 IN USHORT BeaconPeriod,
4486 IN USHORT CapabilityInfo,
4488 IN UCHAR SupRateLen,
4490 IN UCHAR ExtRateLen,
4491 IN HT_CAPABILITY_IE *pHtCapability,
4492 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4493 IN UCHAR HtCapabilityLen,
4494 IN UCHAR AddHtInfoLen,
4495 IN UCHAR NewExtChanOffset,
4498 IN LARGE_INTEGER TimeStamp,
4500 IN PEDCA_PARM pEdcaParm,
4501 IN PQOS_CAPABILITY_PARM pQosCapability,
4502 IN PQBSS_LOAD_PARM pQbssLoad,
4503 IN USHORT LengthVIE,
4504 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4506 ULONG BssTableSetEntry(
4507 IN PRTMP_ADAPTER pAd,
4508 OUT PBSS_TABLE pTab,
4513 IN USHORT BeaconPeriod,
4516 IN USHORT CapabilityInfo,
4518 IN UCHAR SupRateLen,
4520 IN UCHAR ExtRateLen,
4521 IN HT_CAPABILITY_IE *pHtCapability,
4522 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4523 IN UCHAR HtCapabilityLen,
4524 IN UCHAR AddHtInfoLen,
4525 IN UCHAR NewExtChanOffset,
4528 IN LARGE_INTEGER TimeStamp,
4530 IN PEDCA_PARM pEdcaParm,
4531 IN PQOS_CAPABILITY_PARM pQosCapability,
4532 IN PQBSS_LOAD_PARM pQbssLoad,
4533 IN USHORT LengthVIE,
4534 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4536 #ifdef DOT11_N_SUPPORT
4537 VOID BATableInsertEntry(
4538 IN PRTMP_ADAPTER pAd,
4540 IN USHORT TimeOutValue,
4541 IN USHORT StartingSeq,
4544 IN UCHAR OriginatorStatus,
4545 IN BOOLEAN IsRecipient);
4547 #ifdef DOT11N_DRAFT3
4548 VOID Bss2040CoexistTimeOut(
4549 IN PVOID SystemSpecific1,
4550 IN PVOID FunctionContext,
4551 IN PVOID SystemSpecific2,
4552 IN PVOID SystemSpecific3);
4556 IN PRTMP_ADAPTER pAd);
4558 ULONG TriEventTableSetEntry(
4559 IN PRTMP_ADAPTER pAd,
4560 OUT TRIGGER_EVENT_TAB *Tab,
4562 IN HT_CAPABILITY_IE *pHtCapability,
4563 IN UCHAR HtCapabilityLen,
4565 IN UCHAR ChannelNo);
4567 VOID TriEventCounterMaintenance(
4568 IN PRTMP_ADAPTER pAd);
4569 #endif // DOT11N_DRAFT3 //
4570 #endif // DOT11_N_SUPPORT //
4572 VOID BssTableSsidSort(
4573 IN PRTMP_ADAPTER pAd,
4574 OUT BSS_TABLE *OutTab,
4578 VOID BssTableSortByRssi(
4579 IN OUT BSS_TABLE *OutTab);
4581 VOID BssCipherParse(
4582 IN OUT PBSS_ENTRY pBss);
4584 NDIS_STATUS MlmeQueueInit(
4585 IN MLME_QUEUE *Queue);
4587 VOID MlmeQueueDestroy(
4588 IN MLME_QUEUE *Queue);
4590 BOOLEAN MlmeEnqueue(
4591 IN PRTMP_ADAPTER pAd,
4597 BOOLEAN MlmeEnqueueForRecv(
4598 IN PRTMP_ADAPTER pAd,
4600 IN ULONG TimeStampHigh,
4601 IN ULONG TimeStampLow,
4610 BOOLEAN MlmeDequeue(
4611 IN MLME_QUEUE *Queue,
4612 OUT MLME_QUEUE_ELEM **Elem);
4614 VOID MlmeRestartStateMachine(
4615 IN PRTMP_ADAPTER pAd);
4617 BOOLEAN MlmeQueueEmpty(
4618 IN MLME_QUEUE *Queue);
4620 BOOLEAN MlmeQueueFull(
4621 IN MLME_QUEUE *Queue);
4623 BOOLEAN MsgTypeSubst(
4624 IN PRTMP_ADAPTER pAd,
4625 IN PFRAME_802_11 pFrame,
4629 VOID StateMachineInit(
4630 IN STATE_MACHINE *Sm,
4631 IN STATE_MACHINE_FUNC Trans[],
4634 IN STATE_MACHINE_FUNC DefFunc,
4638 VOID StateMachineSetAction(
4639 IN STATE_MACHINE *S,
4642 IN STATE_MACHINE_FUNC F);
4644 VOID StateMachinePerformAction(
4645 IN PRTMP_ADAPTER pAd,
4646 IN STATE_MACHINE *S,
4647 IN MLME_QUEUE_ELEM *Elem);
4650 IN PRTMP_ADAPTER pAd,
4651 IN MLME_QUEUE_ELEM *Elem);
4653 VOID AssocStateMachineInit(
4654 IN PRTMP_ADAPTER pAd,
4655 IN STATE_MACHINE *Sm,
4656 OUT STATE_MACHINE_FUNC Trans[]);
4658 VOID ReassocTimeout(
4659 IN PVOID SystemSpecific1,
4660 IN PVOID FunctionContext,
4661 IN PVOID SystemSpecific2,
4662 IN PVOID SystemSpecific3);
4665 IN PVOID SystemSpecific1,
4666 IN PVOID FunctionContext,
4667 IN PVOID SystemSpecific2,
4668 IN PVOID SystemSpecific3);
4670 VOID DisassocTimeout(
4671 IN PVOID SystemSpecific1,
4672 IN PVOID FunctionContext,
4673 IN PVOID SystemSpecific2,
4674 IN PVOID SystemSpecific3);
4676 //----------------------------------------------
4677 VOID MlmeDisassocReqAction(
4678 IN PRTMP_ADAPTER pAd,
4679 IN MLME_QUEUE_ELEM *Elem);
4681 VOID MlmeAssocReqAction(
4682 IN PRTMP_ADAPTER pAd,
4683 IN MLME_QUEUE_ELEM *Elem);
4685 VOID MlmeReassocReqAction(
4686 IN PRTMP_ADAPTER pAd,
4687 IN MLME_QUEUE_ELEM *Elem);
4689 VOID MlmeDisassocReqAction(
4690 IN PRTMP_ADAPTER pAd,
4691 IN MLME_QUEUE_ELEM *Elem);
4693 VOID PeerAssocRspAction(
4694 IN PRTMP_ADAPTER pAd,
4695 IN MLME_QUEUE_ELEM *Elem);
4697 VOID PeerReassocRspAction(
4698 IN PRTMP_ADAPTER pAd,
4699 IN MLME_QUEUE_ELEM *Elem);
4701 VOID PeerDisassocAction(
4702 IN PRTMP_ADAPTER pAd,
4703 IN MLME_QUEUE_ELEM *Elem);
4705 VOID DisassocTimeoutAction(
4706 IN PRTMP_ADAPTER pAd,
4707 IN MLME_QUEUE_ELEM *Elem);
4709 VOID AssocTimeoutAction(
4710 IN PRTMP_ADAPTER pAd,
4711 IN MLME_QUEUE_ELEM *Elem);
4713 VOID ReassocTimeoutAction(
4714 IN PRTMP_ADAPTER pAd,
4715 IN MLME_QUEUE_ELEM *Elem);
4718 IN PRTMP_ADAPTER pAd,
4721 VOID SwitchBetweenWepAndCkip(
4722 IN PRTMP_ADAPTER pAd);
4724 VOID InvalidStateWhenAssoc(
4725 IN PRTMP_ADAPTER pAd,
4726 IN MLME_QUEUE_ELEM *Elem);
4728 VOID InvalidStateWhenReassoc(
4729 IN PRTMP_ADAPTER pAd,
4730 IN MLME_QUEUE_ELEM *Elem);
4732 VOID InvalidStateWhenDisassociate(
4733 IN PRTMP_ADAPTER pAd,
4734 IN MLME_QUEUE_ELEM *Elem);
4737 VOID MlmeCntlConfirm(
4738 IN PRTMP_ADAPTER pAd,
4744 IN PRTMP_ADAPTER pAd);
4746 VOID ComposeNullFrame(
4747 IN PRTMP_ADAPTER pAd);
4750 IN PRTMP_ADAPTER pAd,
4752 IN USHORT CapabilityInfo,
4755 IN UCHAR SupRateLen,
4757 IN UCHAR ExtRateLen,
4758 IN PEDCA_PARM pEdcaParm,
4759 IN HT_CAPABILITY_IE *pHtCapability,
4760 IN UCHAR HtCapabilityLen,
4761 IN ADD_HT_INFO_IE *pAddHtInfo);
4763 VOID AuthStateMachineInit(
4764 IN PRTMP_ADAPTER pAd,
4765 IN PSTATE_MACHINE sm,
4766 OUT STATE_MACHINE_FUNC Trans[]);
4769 IN PVOID SystemSpecific1,
4770 IN PVOID FunctionContext,
4771 IN PVOID SystemSpecific2,
4772 IN PVOID SystemSpecific3);
4774 VOID MlmeAuthReqAction(
4775 IN PRTMP_ADAPTER pAd,
4776 IN MLME_QUEUE_ELEM *Elem);
4778 VOID PeerAuthRspAtSeq2Action(
4779 IN PRTMP_ADAPTER pAd,
4780 IN MLME_QUEUE_ELEM *Elem);
4782 VOID PeerAuthRspAtSeq4Action(
4783 IN PRTMP_ADAPTER pAd,
4784 IN MLME_QUEUE_ELEM *Elem);
4786 VOID AuthTimeoutAction(
4787 IN PRTMP_ADAPTER pAd,
4788 IN MLME_QUEUE_ELEM *Elem);
4791 IN PRTMP_ADAPTER pAd,
4794 VOID MlmeDeauthReqAction(
4795 IN PRTMP_ADAPTER pAd,
4796 IN MLME_QUEUE_ELEM *Elem);
4798 VOID InvalidStateWhenAuth(
4799 IN PRTMP_ADAPTER pAd,
4800 IN MLME_QUEUE_ELEM *Elem);
4802 //=============================================
4804 VOID AuthRspStateMachineInit(
4805 IN PRTMP_ADAPTER pAd,
4806 IN PSTATE_MACHINE Sm,
4807 IN STATE_MACHINE_FUNC Trans[]);
4809 VOID PeerDeauthAction(
4810 IN PRTMP_ADAPTER pAd,
4811 IN MLME_QUEUE_ELEM *Elem);
4813 VOID PeerAuthSimpleRspGenAndSend(
4814 IN PRTMP_ADAPTER pAd,
4815 IN PHEADER_802_11 pHdr80211,
4822 // Private routines in dls.c
4825 #ifdef CONFIG_STA_SUPPORT
4826 #ifdef QOS_DLS_SUPPORT
4827 void DlsStateMachineInit(
4828 IN PRTMP_ADAPTER pAd,
4829 IN STATE_MACHINE *Sm,
4830 OUT STATE_MACHINE_FUNC Trans[]);
4832 VOID MlmeDlsReqAction(
4833 IN PRTMP_ADAPTER pAd,
4834 IN MLME_QUEUE_ELEM *Elem);
4836 VOID PeerDlsReqAction(
4837 IN PRTMP_ADAPTER pAd,
4838 IN MLME_QUEUE_ELEM *Elem);
4840 VOID PeerDlsRspAction(
4841 IN PRTMP_ADAPTER pAd,
4842 IN MLME_QUEUE_ELEM *Elem);
4844 VOID MlmeDlsTearDownAction(
4845 IN PRTMP_ADAPTER pAd,
4846 IN MLME_QUEUE_ELEM *Elem);
4848 VOID PeerDlsTearDownAction(
4849 IN PRTMP_ADAPTER pAd,
4850 IN MLME_QUEUE_ELEM *Elem);
4852 VOID RTMPCheckDLSTimeOut(
4853 IN PRTMP_ADAPTER pAd);
4855 BOOLEAN RTMPRcvFrameDLSCheck(
4856 IN PRTMP_ADAPTER pAd,
4857 IN PHEADER_802_11 pHeader,
4859 IN PRT28XX_RXD_STRUC pRxD);
4861 INT RTMPCheckDLSFrame(
4862 IN PRTMP_ADAPTER pAd,
4865 VOID RTMPSendDLSTearDownFrame(
4866 IN PRTMP_ADAPTER pAd,
4869 NDIS_STATUS RTMPSendSTAKeyRequest(
4870 IN PRTMP_ADAPTER pAd,
4873 NDIS_STATUS RTMPSendSTAKeyHandShake(
4874 IN PRTMP_ADAPTER pAd,
4877 VOID DlsTimeoutAction(
4878 IN PVOID SystemSpecific1,
4879 IN PVOID FunctionContext,
4880 IN PVOID SystemSpecific2,
4881 IN PVOID SystemSpecific3);
4883 BOOLEAN MlmeDlsReqSanity(
4884 IN PRTMP_ADAPTER pAd,
4887 OUT PRT_802_11_DLS *pDLS,
4888 OUT PUSHORT pReason);
4890 INT Set_DlsEntryInfo_Display_Proc(
4891 IN PRTMP_ADAPTER pAd,
4894 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4895 IN PRTMP_ADAPTER pAd,
4897 IN UINT DlsEntryIdx);
4899 BOOLEAN MacTableDeleteDlsEntry(
4900 IN PRTMP_ADAPTER pAd,
4904 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4905 IN PRTMP_ADAPTER pAd,
4907 IN BOOLEAN bResetIdelCount);
4909 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4910 IN PRTMP_ADAPTER pAd,
4913 IN BOOLEAN bResetIdelCount);
4915 INT Set_DlsAddEntry_Proc(
4916 IN PRTMP_ADAPTER pAd,
4919 INT Set_DlsTearDownEntry_Proc(
4920 IN PRTMP_ADAPTER pAd,
4922 #endif // QOS_DLS_SUPPORT //
4923 #endif // CONFIG_STA_SUPPORT //
4925 #ifdef QOS_DLS_SUPPORT
4926 BOOLEAN PeerDlsReqSanity(
4927 IN PRTMP_ADAPTER pAd,
4932 OUT USHORT *pCapabilityInfo,
4933 OUT USHORT *pDlsTimeout,
4934 OUT UCHAR *pRatesLen,
4936 OUT UCHAR *pHtCapabilityLen,
4937 OUT HT_CAPABILITY_IE *pHtCapability);
4939 BOOLEAN PeerDlsRspSanity(
4940 IN PRTMP_ADAPTER pAd,
4945 OUT USHORT *pCapabilityInfo,
4946 OUT USHORT *pStatus,
4947 OUT UCHAR *pRatesLen,
4949 OUT UCHAR *pHtCapabilityLen,
4950 OUT HT_CAPABILITY_IE *pHtCapability);
4952 BOOLEAN PeerDlsTearDownSanity(
4953 IN PRTMP_ADAPTER pAd,
4958 OUT USHORT *pReason);
4959 #endif // QOS_DLS_SUPPORT //
4961 //========================================
4963 VOID SyncStateMachineInit(
4964 IN PRTMP_ADAPTER pAd,
4965 IN STATE_MACHINE *Sm,
4966 OUT STATE_MACHINE_FUNC Trans[]);
4969 IN PVOID SystemSpecific1,
4970 IN PVOID FunctionContext,
4971 IN PVOID SystemSpecific2,
4972 IN PVOID SystemSpecific3);
4975 IN PVOID SystemSpecific1,
4976 IN PVOID FunctionContext,
4977 IN PVOID SystemSpecific2,
4978 IN PVOID SystemSpecific3);
4980 VOID MlmeScanReqAction(
4981 IN PRTMP_ADAPTER pAd,
4982 IN MLME_QUEUE_ELEM *Elem);
4984 VOID InvalidStateWhenScan(
4985 IN PRTMP_ADAPTER pAd,
4986 IN MLME_QUEUE_ELEM *Elem);
4988 VOID InvalidStateWhenJoin(
4989 IN PRTMP_ADAPTER pAd,
4990 IN MLME_QUEUE_ELEM *Elem);
4992 VOID InvalidStateWhenStart(
4993 IN PRTMP_ADAPTER pAd,
4994 IN MLME_QUEUE_ELEM *Elem);
4997 IN PRTMP_ADAPTER pAd,
4998 IN MLME_QUEUE_ELEM *Elem);
5000 VOID EnqueueProbeRequest(
5001 IN PRTMP_ADAPTER pAd);
5003 BOOLEAN ScanRunning(
5004 IN PRTMP_ADAPTER pAd);
5005 //=========================================
5008 IN PRTMP_ADAPTER pAd,
5009 IN STATE_MACHINE *S,
5010 OUT STATE_MACHINE_FUNC Trans[]);
5012 VOID MlmeCntlMachinePerformAction(
5013 IN PRTMP_ADAPTER pAd,
5014 IN STATE_MACHINE *S,
5015 IN MLME_QUEUE_ELEM *Elem);
5018 IN PRTMP_ADAPTER pAd,
5019 IN MLME_QUEUE_ELEM *Elem);
5021 VOID CntlOidScanProc(
5022 IN PRTMP_ADAPTER pAd,
5023 IN MLME_QUEUE_ELEM *Elem);
5025 VOID CntlOidSsidProc(
5026 IN PRTMP_ADAPTER pAd,
5027 IN MLME_QUEUE_ELEM * Elem);
5029 VOID CntlOidRTBssidProc(
5030 IN PRTMP_ADAPTER pAd,
5031 IN MLME_QUEUE_ELEM * Elem);
5033 VOID CntlMlmeRoamingProc(
5034 IN PRTMP_ADAPTER pAd,
5035 IN MLME_QUEUE_ELEM * Elem);
5037 VOID CntlWaitDisassocProc(
5038 IN PRTMP_ADAPTER pAd,
5039 IN MLME_QUEUE_ELEM *Elem);
5041 VOID CntlWaitJoinProc(
5042 IN PRTMP_ADAPTER pAd,
5043 IN MLME_QUEUE_ELEM *Elem);
5045 VOID CntlWaitReassocProc(
5046 IN PRTMP_ADAPTER pAd,
5047 IN MLME_QUEUE_ELEM *Elem);
5049 VOID CntlWaitStartProc(
5050 IN PRTMP_ADAPTER pAd,
5051 IN MLME_QUEUE_ELEM *Elem);
5053 VOID CntlWaitAuthProc(
5054 IN PRTMP_ADAPTER pAd,
5055 IN MLME_QUEUE_ELEM *Elem);
5057 VOID CntlWaitAuthProc2(
5058 IN PRTMP_ADAPTER pAd,
5059 IN MLME_QUEUE_ELEM *Elem);
5061 VOID CntlWaitAssocProc(
5062 IN PRTMP_ADAPTER pAd,
5063 IN MLME_QUEUE_ELEM *Elem);
5065 #ifdef QOS_DLS_SUPPORT
5066 VOID CntlOidDLSSetupProc(
5067 IN PRTMP_ADAPTER pAd,
5068 IN MLME_QUEUE_ELEM *Elem);
5069 #endif // QOS_DLS_SUPPORT //
5072 IN PRTMP_ADAPTER pAd,
5076 IN PRTMP_ADAPTER pAd,
5077 IN BOOLEAN IsReqFromAP);
5079 VOID IterateOnBssTab(
5080 IN PRTMP_ADAPTER pAd);
5082 VOID IterateOnBssTab2(
5083 IN PRTMP_ADAPTER pAd);;
5086 IN PRTMP_ADAPTER pAd,
5087 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
5091 IN PRTMP_ADAPTER pAd,
5092 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
5094 IN USHORT CapabilityInfo,
5096 IN USHORT ListenIntv);
5099 IN PRTMP_ADAPTER pAd,
5100 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5106 VOID DisassocParmFill(
5107 IN PRTMP_ADAPTER pAd,
5108 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5113 IN PRTMP_ADAPTER pAd,
5114 IN OUT MLME_START_REQ_STRUCT *StartReq,
5119 IN PRTMP_ADAPTER pAd,
5120 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5125 IN PRTMP_ADAPTER pAd);
5127 VOID EnqueueBeaconFrame(
5128 IN PRTMP_ADAPTER pAd);
5130 VOID MlmeJoinReqAction(
5131 IN PRTMP_ADAPTER pAd,
5132 IN MLME_QUEUE_ELEM *Elem);
5134 VOID MlmeScanReqAction(
5135 IN PRTMP_ADAPTER pAd,
5136 IN MLME_QUEUE_ELEM *Elem);
5138 VOID MlmeStartReqAction(
5139 IN PRTMP_ADAPTER pAd,
5140 IN MLME_QUEUE_ELEM *Elem);
5142 VOID ScanTimeoutAction(
5143 IN PRTMP_ADAPTER pAd,
5144 IN MLME_QUEUE_ELEM *Elem);
5146 VOID BeaconTimeoutAtJoinAction(
5147 IN PRTMP_ADAPTER pAd,
5148 IN MLME_QUEUE_ELEM *Elem);
5150 VOID PeerBeaconAtScanAction(
5151 IN PRTMP_ADAPTER pAd,
5152 IN MLME_QUEUE_ELEM *Elem);
5154 VOID PeerBeaconAtJoinAction(
5155 IN PRTMP_ADAPTER pAd,
5156 IN MLME_QUEUE_ELEM *Elem);
5159 IN PRTMP_ADAPTER pAd,
5160 IN MLME_QUEUE_ELEM *Elem);
5162 VOID PeerProbeReqAction(
5163 IN PRTMP_ADAPTER pAd,
5164 IN MLME_QUEUE_ELEM *Elem);
5166 VOID ScanNextChannel(
5167 IN PRTMP_ADAPTER pAd);
5169 ULONG MakeIbssBeacon(
5170 IN PRTMP_ADAPTER pAd);
5172 VOID CCXAdjacentAPReport(
5173 IN PRTMP_ADAPTER pAd);
5175 BOOLEAN MlmeScanReqSanity(
5176 IN PRTMP_ADAPTER pAd,
5182 OUT UCHAR *ScanType);
5184 BOOLEAN PeerBeaconAndProbeRspSanity(
5185 IN PRTMP_ADAPTER pAd,
5188 IN UCHAR MsgChannel,
5192 OUT UCHAR *pSsidLen,
5193 OUT UCHAR *pBssType,
5194 OUT USHORT *pBeaconPeriod,
5195 OUT UCHAR *pChannel,
5196 OUT UCHAR *pNewChannel,
5197 OUT LARGE_INTEGER *pTimestamp,
5198 OUT CF_PARM *pCfParm,
5199 OUT USHORT *pAtimWin,
5200 OUT USHORT *pCapabilityInfo,
5202 OUT UCHAR *pDtimCount,
5203 OUT UCHAR *pDtimPeriod,
5204 OUT UCHAR *pBcastFlag,
5205 OUT UCHAR *pMessageToMe,
5206 OUT UCHAR SupRate[],
5207 OUT UCHAR *pSupRateLen,
5208 OUT UCHAR ExtRate[],
5209 OUT UCHAR *pExtRateLen,
5210 OUT UCHAR *pCkipFlag,
5211 OUT UCHAR *pAironetCellPowerLimit,
5212 OUT PEDCA_PARM pEdcaParm,
5213 OUT PQBSS_LOAD_PARM pQbssLoad,
5214 OUT PQOS_CAPABILITY_PARM pQosCapability,
5215 OUT ULONG *pRalinkIe,
5216 OUT UCHAR *pHtCapabilityLen,
5217 #ifdef CONFIG_STA_SUPPORT
5218 OUT UCHAR *pPreNHtCapabilityLen,
5219 #endif // CONFIG_STA_SUPPORT //
5220 OUT HT_CAPABILITY_IE *pHtCapability,
5221 OUT UCHAR *AddHtInfoLen,
5222 OUT ADD_HT_INFO_IE *AddHtInfo,
5223 OUT UCHAR *NewExtChannel,
5224 OUT USHORT *LengthVIE,
5225 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5227 BOOLEAN PeerAddBAReqActionSanity(
5228 IN PRTMP_ADAPTER pAd,
5233 BOOLEAN PeerAddBARspActionSanity(
5234 IN PRTMP_ADAPTER pAd,
5238 BOOLEAN PeerDelBAActionSanity(
5239 IN PRTMP_ADAPTER pAd,
5244 BOOLEAN MlmeAssocReqSanity(
5245 IN PRTMP_ADAPTER pAd,
5249 OUT USHORT *CapabilityInfo,
5251 OUT USHORT *ListenIntv);
5253 BOOLEAN MlmeAuthReqSanity(
5254 IN PRTMP_ADAPTER pAd,
5261 BOOLEAN MlmeStartReqSanity(
5262 IN PRTMP_ADAPTER pAd,
5266 OUT UCHAR *Ssidlen);
5268 BOOLEAN PeerAuthSanity(
5269 IN PRTMP_ADAPTER pAd,
5276 OUT CHAR ChlgText[]);
5278 BOOLEAN PeerAssocRspSanity(
5279 IN PRTMP_ADAPTER pAd,
5283 OUT USHORT *pCapabilityInfo,
5284 OUT USHORT *pStatus,
5286 OUT UCHAR SupRate[],
5287 OUT UCHAR *pSupRateLen,
5288 OUT UCHAR ExtRate[],
5289 OUT UCHAR *pExtRateLen,
5290 OUT HT_CAPABILITY_IE *pHtCapability,
5291 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5292 OUT UCHAR *pHtCapabilityLen,
5293 OUT UCHAR *pAddHtInfoLen,
5294 OUT UCHAR *pNewExtChannelOffset,
5295 OUT PEDCA_PARM pEdcaParm,
5296 OUT UCHAR *pCkipFlag);
5298 BOOLEAN PeerDisassocSanity(
5299 IN PRTMP_ADAPTER pAd,
5303 OUT USHORT *Reason);
5305 BOOLEAN PeerWpaMessageSanity(
5306 IN PRTMP_ADAPTER pAd,
5307 IN PEAPOL_PACKET pMsg,
5310 IN MAC_TABLE_ENTRY *pEntry);
5312 BOOLEAN PeerDeauthSanity(
5313 IN PRTMP_ADAPTER pAd,
5317 OUT USHORT *Reason);
5319 BOOLEAN PeerProbeReqSanity(
5320 IN PRTMP_ADAPTER pAd,
5325 OUT UCHAR *pSsidLen);
5331 OUT UCHAR *BcastFlag,
5332 OUT UCHAR *DtimCount,
5333 OUT UCHAR *DtimPeriod,
5334 OUT UCHAR *MessageToMe);
5336 UCHAR ChannelSanity(
5337 IN PRTMP_ADAPTER pAd,
5340 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5341 IN PBSS_ENTRY pBss);
5343 BOOLEAN MlmeDelBAReqSanity(
5344 IN PRTMP_ADAPTER pAd,
5348 BOOLEAN MlmeAddBAReqSanity(
5349 IN PRTMP_ADAPTER pAd,
5354 ULONG MakeOutgoingFrame(
5356 OUT ULONG *Length, ...);
5359 IN PRTMP_ADAPTER pAd,
5363 IN PRTMP_ADAPTER pAd);
5365 VOID AsicUpdateAutoFallBackTable(
5366 IN PRTMP_ADAPTER pAd,
5369 VOID MlmePeriodicExec(
5370 IN PVOID SystemSpecific1,
5371 IN PVOID FunctionContext,
5372 IN PVOID SystemSpecific2,
5373 IN PVOID SystemSpecific3);
5376 IN PVOID SystemSpecific1,
5377 IN PVOID FunctionContext,
5378 IN PVOID SystemSpecific2,
5379 IN PVOID SystemSpecific3);
5382 IN PVOID SystemSpecific1,
5383 IN PVOID FunctionContext,
5384 IN PVOID SystemSpecific2,
5385 IN PVOID SystemSpecific3);
5387 VOID STAMlmePeriodicExec(
5391 IN PRTMP_ADAPTER pAd);
5393 VOID MlmeAutoReconnectLastSSID(
5394 IN PRTMP_ADAPTER pAd);
5396 BOOLEAN MlmeValidateSSID(
5400 VOID MlmeCheckForRoaming(
5401 IN PRTMP_ADAPTER pAd,
5404 VOID MlmeCheckForFastRoaming(
5405 IN PRTMP_ADAPTER pAd,
5408 VOID MlmeDynamicTxRateSwitching(
5409 IN PRTMP_ADAPTER pAd);
5412 IN PRTMP_ADAPTER pAd,
5413 IN PMAC_TABLE_ENTRY pEntry,
5414 IN PRTMP_TX_RATE_SWITCH pTxRate);
5416 VOID MlmeSelectTxRateTable(
5417 IN PRTMP_ADAPTER pAd,
5418 IN PMAC_TABLE_ENTRY pEntry,
5420 IN PUCHAR pTableSize,
5421 IN PUCHAR pInitTxRateIdx);
5423 VOID MlmeCalculateChannelQuality(
5424 IN PRTMP_ADAPTER pAd,
5427 VOID MlmeCheckPsmChange(
5428 IN PRTMP_ADAPTER pAd,
5432 IN PRTMP_ADAPTER pAd,
5435 VOID MlmeSetTxPreamble(
5436 IN PRTMP_ADAPTER pAd,
5437 IN USHORT TxPreamble);
5439 VOID UpdateBasicRateBitmap(
5440 IN PRTMP_ADAPTER pAd);
5442 VOID MlmeUpdateTxRates(
5443 IN PRTMP_ADAPTER pAd,
5447 #ifdef DOT11_N_SUPPORT
5448 VOID MlmeUpdateHtTxRates(
5449 IN PRTMP_ADAPTER pAd,
5451 #endif // DOT11_N_SUPPORT //
5453 VOID RTMPCheckRates(
5454 IN PRTMP_ADAPTER pAd,
5455 IN OUT UCHAR SupRate[],
5456 IN OUT UCHAR *SupRateLen);
5458 #ifdef CONFIG_STA_SUPPORT
5459 BOOLEAN RTMPCheckChannel(
5460 IN PRTMP_ADAPTER pAd,
5461 IN UCHAR CentralChannel,
5463 #endif // CONFIG_STA_SUPPORT //
5465 BOOLEAN RTMPCheckHt(
5466 IN PRTMP_ADAPTER pAd,
5468 IN OUT HT_CAPABILITY_IE *pHtCapability,
5469 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5471 VOID StaQuickResponeForRateUpExec(
5472 IN PVOID SystemSpecific1,
5473 IN PVOID FunctionContext,
5474 IN PVOID SystemSpecific2,
5475 IN PVOID SystemSpecific3);
5477 VOID AsicBbpTuning1(
5478 IN PRTMP_ADAPTER pAd);
5480 VOID AsicBbpTuning2(
5481 IN PRTMP_ADAPTER pAd);
5483 VOID RTMPUpdateMlmeRate(
5484 IN PRTMP_ADAPTER pAd);
5487 IN PRTMP_ADAPTER pAd,
5493 IN PRTMP_ADAPTER pAd,
5496 VOID AsicEvaluateRxAnt(
5497 IN PRTMP_ADAPTER pAd);
5499 VOID AsicRxAntEvalTimeout(
5500 IN PVOID SystemSpecific1,
5501 IN PVOID FunctionContext,
5502 IN PVOID SystemSpecific2,
5503 IN PVOID SystemSpecific3);
5505 VOID APSDPeriodicExec(
5506 IN PVOID SystemSpecific1,
5507 IN PVOID FunctionContext,
5508 IN PVOID SystemSpecific2,
5509 IN PVOID SystemSpecific3);
5511 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5512 IN PRTMP_ADAPTER pAd,
5513 IN PMAC_TABLE_ENTRY pEntry);
5515 UCHAR RTMPStaFixedTxMode(
5516 IN PRTMP_ADAPTER pAd,
5517 IN PMAC_TABLE_ENTRY pEntry);
5519 VOID RTMPUpdateLegacyTxSetting(
5520 UCHAR fixed_tx_mode,
5521 PMAC_TABLE_ENTRY pEntry);
5523 BOOLEAN RTMPAutoRateSwitchCheck(
5524 IN PRTMP_ADAPTER pAd);
5526 NDIS_STATUS MlmeInit(
5527 IN PRTMP_ADAPTER pAd);
5530 IN PRTMP_ADAPTER pAd);
5533 IN PRTMP_ADAPTER pAd);
5535 VOID MlmeResetRalinkCounters(
5536 IN PRTMP_ADAPTER pAd);
5538 VOID BuildChannelList(
5539 IN PRTMP_ADAPTER pAd);
5542 IN PRTMP_ADAPTER pAd);
5545 IN PRTMP_ADAPTER pAd,
5548 VOID ChangeToCellPowerLimit(
5549 IN PRTMP_ADAPTER pAd,
5550 IN UCHAR AironetCellPowerLimit);
5553 IN PRTMP_ADAPTER pAd,
5557 IN PRTMP_ADAPTER pAd,
5561 IN PRTMP_ADAPTER pAd);
5564 IN PRTMP_ADAPTER pAd,
5569 IN PRTMP_ADAPTER pAd);
5572 IN PRTMP_ADAPTER pAd);
5575 IN PRTMP_ADAPTER pAd);
5577 USHORT RTMP_EEPROM_READ16(
5578 IN PRTMP_ADAPTER pAd,
5581 VOID RTMP_EEPROM_WRITE16(
5582 IN PRTMP_ADAPTER pAd,
5587 // Prototypes of function definition in rtmp_tkip.c
5589 VOID RTMPInitTkipEngine(
5590 IN PRTMP_ADAPTER pAd,
5599 VOID RTMPInitMICEngine(
5600 IN PRTMP_ADAPTER pAd,
5604 IN UCHAR UserPriority,
5607 BOOLEAN RTMPTkipCompareMICValue(
5608 IN PRTMP_ADAPTER pAd,
5613 IN UCHAR UserPriority,
5616 VOID RTMPCalculateMICValue(
5617 IN PRTMP_ADAPTER pAd,
5618 IN PNDIS_PACKET pPacket,
5620 IN PCIPHER_KEY pKey,
5623 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5624 IN PRTMP_ADAPTER pAd,
5632 VOID RTMPTkipAppendByte(
5633 IN PTKIP_KEY_INFO pTkip,
5636 VOID RTMPTkipAppend(
5637 IN PTKIP_KEY_INFO pTkip,
5641 VOID RTMPTkipGetMIC(
5642 IN PTKIP_KEY_INFO pTkip);
5644 BOOLEAN RTMPSoftDecryptTKIP(
5645 IN PRTMP_ADAPTER pAd,
5647 IN ULONG DataByteCnt,
5648 IN UCHAR UserPriority,
5649 IN PCIPHER_KEY pWpaKey);
5651 BOOLEAN RTMPSoftDecryptAES(
5652 IN PRTMP_ADAPTER pAd,
5654 IN ULONG DataByteCnt,
5655 IN PCIPHER_KEY pWpaKey);
5658 // Prototypes of function definition in cmm_info.c
5660 NDIS_STATUS RTMPWPARemoveKeyProc(
5661 IN PRTMP_ADAPTER pAd,
5664 VOID RTMPWPARemoveAllKeys(
5665 IN PRTMP_ADAPTER pAd);
5667 BOOLEAN RTMPCheckStrPrintAble(
5671 VOID RTMPSetPhyMode(
5672 IN PRTMP_ADAPTER pAd,
5675 VOID RTMPUpdateHTIE(
5676 IN RT_HT_CAPABILITY *pRtHt,
5678 OUT HT_CAPABILITY_IE *pHtCapability,
5679 OUT ADD_HT_INFO_IE *pAddHtInfo);
5681 VOID RTMPAddWcidAttributeEntry(
5682 IN PRTMP_ADAPTER pAd,
5686 IN MAC_TABLE_ENTRY *pEntry);
5688 CHAR *GetEncryptType(
5694 VOID RTMPIoctlGetSiteSurvey(
5695 IN PRTMP_ADAPTER pAdapter,
5696 IN struct iwreq *wrq);
5698 VOID RTMPIoctlGetMacTable(
5699 IN PRTMP_ADAPTER pAd,
5700 IN struct iwreq *wrq);
5702 VOID RTMPIndicateWPA2Status(
5703 IN PRTMP_ADAPTER pAdapter);
5705 VOID RTMPOPModeSwitching(
5706 IN PRTMP_ADAPTER pAd);
5708 #ifdef CONFIG_STA_SUPPORT
5709 VOID RTMPAddBSSIDCipher(
5710 IN PRTMP_ADAPTER pAd,
5712 IN PNDIS_802_11_KEY pKey,
5713 IN UCHAR CipherAlg);
5714 #endif // CONFIG_STA_SUPPORT //
5716 #ifdef DOT11_N_SUPPORT
5718 IN PRTMP_ADAPTER pAd,
5719 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5721 VOID RTMPSetIndividualHT(
5722 IN PRTMP_ADAPTER pAd,
5724 #endif // DOT11_N_SUPPORT //
5726 VOID RTMPSendWirelessEvent(
5727 IN PRTMP_ADAPTER pAd,
5728 IN USHORT Event_flag,
5733 VOID NICUpdateCntlCounters(
5734 IN PRTMP_ADAPTER pAd,
5735 IN PHEADER_802_11 pHeader,
5737 IN PRXWI_STRUC pRxWI);
5739 // prototype in wpa.c
5741 BOOLEAN WpaMsgTypeSubst(
5745 VOID WpaPskStateMachineInit(
5746 IN PRTMP_ADAPTER pAd,
5747 IN STATE_MACHINE *S,
5748 OUT STATE_MACHINE_FUNC Trans[]);
5750 VOID WpaEAPOLKeyAction(
5751 IN PRTMP_ADAPTER pAd,
5752 IN MLME_QUEUE_ELEM *Elem);
5754 VOID WpaPairMsg1Action(
5755 IN PRTMP_ADAPTER pAd,
5756 IN MLME_QUEUE_ELEM *Elem);
5758 VOID WpaPairMsg3Action(
5759 IN PRTMP_ADAPTER pAd,
5760 IN MLME_QUEUE_ELEM *Elem);
5762 VOID WpaGroupMsg1Action(
5763 IN PRTMP_ADAPTER pAd,
5764 IN MLME_QUEUE_ELEM *Elem);
5766 VOID WpaMacHeaderInit(
5767 IN PRTMP_ADAPTER pAd,
5768 IN OUT PHEADER_802_11 pHdr80211,
5772 VOID Wpa2PairMsg1Action(
5773 IN PRTMP_ADAPTER pAd,
5774 IN MLME_QUEUE_ELEM *Elem);
5776 VOID Wpa2PairMsg3Action(
5777 IN PRTMP_ADAPTER pAd,
5778 IN MLME_QUEUE_ELEM *Elem);
5780 BOOLEAN ParseKeyData(
5781 IN PRTMP_ADAPTER pAd,
5783 IN UCHAR KeyDataLen,
5784 IN UCHAR bPairewise);
5786 VOID RTMPToWirelessSta(
5787 IN PRTMP_ADAPTER pAd,
5788 IN PUCHAR pHeader802_3,
5792 IN BOOLEAN is4wayFrame);
5820 IN PRTMP_ADAPTER pAd,
5830 IN PRTMP_ADAPTER pAd,
5835 // prototype in aironet.c
5837 VOID AironetStateMachineInit(
5838 IN PRTMP_ADAPTER pAd,
5839 IN STATE_MACHINE *S,
5840 OUT STATE_MACHINE_FUNC Trans[]);
5842 VOID AironetMsgAction(
5843 IN PRTMP_ADAPTER pAd,
5844 IN MLME_QUEUE_ELEM *Elem);
5846 VOID AironetRequestAction(
5847 IN PRTMP_ADAPTER pAd,
5848 IN MLME_QUEUE_ELEM *Elem);
5850 VOID ChannelLoadRequestAction(
5851 IN PRTMP_ADAPTER pAd,
5854 VOID NoiseHistRequestAction(
5855 IN PRTMP_ADAPTER pAd,
5858 VOID BeaconRequestAction(
5859 IN PRTMP_ADAPTER pAd,
5862 VOID AironetReportAction(
5863 IN PRTMP_ADAPTER pAd,
5864 IN MLME_QUEUE_ELEM *Elem);
5866 VOID ChannelLoadReportAction(
5867 IN PRTMP_ADAPTER pAd,
5870 VOID NoiseHistReportAction(
5871 IN PRTMP_ADAPTER pAd,
5874 VOID AironetFinalReportAction(
5875 IN PRTMP_ADAPTER pAd);
5877 VOID BeaconReportAction(
5878 IN PRTMP_ADAPTER pAd,
5881 VOID AironetAddBeaconReport(
5882 IN PRTMP_ADAPTER pAd,
5884 IN PMLME_QUEUE_ELEM pElem);
5886 VOID AironetCreateBeaconReportFromBssTable(
5887 IN PRTMP_ADAPTER pAd);
5889 VOID DBGPRINT_TX_RING(
5890 IN PRTMP_ADAPTER pAd,
5893 VOID DBGPRINT_RX_RING(
5894 IN PRTMP_ADAPTER pAd);
5897 IN PRTMP_ADAPTER pAd,
5899 IN UCHAR RssiNumber);
5902 #ifdef DOT11N_DRAFT3
5903 VOID BuildEffectedChannelList(
5904 IN PRTMP_ADAPTER pAd);
5905 #endif // DOT11N_DRAFT3 //
5908 VOID APAsicEvaluateRxAnt(
5909 IN PRTMP_ADAPTER pAd);
5912 VOID APAsicRxAntEvalTimeout(
5913 IN PRTMP_ADAPTER pAd);
5916 // function prototype in cmm_wpa.c
5918 BOOLEAN RTMPCheckWPAframe(
5919 IN PRTMP_ADAPTER pAd,
5920 IN PMAC_TABLE_ENTRY pEntry,
5922 IN ULONG DataByteCount,
5923 IN UCHAR FromWhichBSSID);
5925 VOID AES_GTK_KEY_UNWRAP(
5927 OUT UCHAR *plaintext,
5929 IN UCHAR *ciphertext);
5931 BOOLEAN RTMPCheckRSNIE(
5932 IN PRTMP_ADAPTER pAd,
5935 IN MAC_TABLE_ENTRY *pEntry,
5938 BOOLEAN RTMPParseEapolKeyData(
5939 IN PRTMP_ADAPTER pAd,
5941 IN UCHAR KeyDataLen,
5942 IN UCHAR GroupKeyIndex,
5945 IN MAC_TABLE_ENTRY *pEntry);
5947 VOID ConstructEapolMsg(
5948 IN PRTMP_ADAPTER pAd,
5949 IN UCHAR PeerAuthMode,
5950 IN UCHAR PeerWepStatus,
5951 IN UCHAR MyGroupKeyWepStatus,
5953 IN UCHAR DefaultKeyIdx,
5954 IN UCHAR *ReplayCounter,
5961 OUT PEAPOL_PACKET pMsg);
5964 IN PRTMP_ADAPTER pAd,
5965 IN UCHAR PeerWepStatus,
5967 OUT PEAPOL_PACKET pMsg);
5969 NDIS_STATUS RTMPSoftDecryptBroadCastData(
5970 IN PRTMP_ADAPTER pAd,
5972 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5973 IN PCIPHER_KEY pShard_key);
5975 VOID ConstructEapolKeyData(
5976 IN PRTMP_ADAPTER pAd,
5977 IN UCHAR PeerAuthMode,
5978 IN UCHAR PeerWepStatus,
5979 IN UCHAR GroupKeyWepStatus,
5981 IN UCHAR DefaultKeyIdx,
5982 IN BOOLEAN bWPA2Capable,
5987 OUT PEAPOL_PACKET pMsg);
5990 IN PRTMP_ADAPTER pAd,
5996 // function prototype in ap_wpa.c
5999 BOOLEAN APWpaMsgTypeSubst(
6003 MAC_TABLE_ENTRY *PACInquiry(
6004 IN PRTMP_ADAPTER pAd,
6007 BOOLEAN RTMPCheckMcast(
6008 IN PRTMP_ADAPTER pAd,
6009 IN PEID_STRUCT eid_ptr,
6010 IN MAC_TABLE_ENTRY *pEntry);
6012 BOOLEAN RTMPCheckUcast(
6013 IN PRTMP_ADAPTER pAd,
6014 IN PEID_STRUCT eid_ptr,
6015 IN MAC_TABLE_ENTRY *pEntry);
6017 BOOLEAN RTMPCheckAUTH(
6018 IN PRTMP_ADAPTER pAd,
6019 IN PEID_STRUCT eid_ptr,
6020 IN MAC_TABLE_ENTRY *pEntry);
6022 VOID WPAStart4WayHS(
6023 IN PRTMP_ADAPTER pAd,
6024 IN MAC_TABLE_ENTRY *pEntry,
6025 IN ULONG TimeInterval);
6027 VOID WPAStart2WayGroupHS(
6028 IN PRTMP_ADAPTER pAd,
6029 IN MAC_TABLE_ENTRY *pEntry);
6031 VOID APWpaEAPPacketAction(
6032 IN PRTMP_ADAPTER pAd,
6033 IN MLME_QUEUE_ELEM *Elem);
6035 VOID APWpaEAPOLStartAction(
6036 IN PRTMP_ADAPTER pAd,
6037 IN MLME_QUEUE_ELEM *Elem);
6039 VOID APWpaEAPOLLogoffAction(
6040 IN PRTMP_ADAPTER pAd,
6041 IN MLME_QUEUE_ELEM *Elem);
6043 VOID APWpaEAPOLKeyAction(
6044 IN PRTMP_ADAPTER pAd,
6045 IN MLME_QUEUE_ELEM *Elem);
6047 VOID APWpaEAPOLASFAlertAction(
6048 IN PRTMP_ADAPTER pAd,
6049 IN MLME_QUEUE_ELEM *Elem);
6051 VOID HandleCounterMeasure(
6052 IN PRTMP_ADAPTER pAd,
6053 IN MAC_TABLE_ENTRY *pEntry);
6055 VOID PeerPairMsg2Action(
6056 IN PRTMP_ADAPTER pAd,
6057 IN MAC_TABLE_ENTRY *pEntry,
6058 IN MLME_QUEUE_ELEM *Elem);
6060 VOID PeerPairMsg4Action(
6061 IN PRTMP_ADAPTER pAd,
6062 IN MAC_TABLE_ENTRY *pEntry,
6063 IN MLME_QUEUE_ELEM *Elem);
6066 IN PVOID SystemSpecific1,
6067 IN PVOID FunctionContext,
6068 IN PVOID SystemSpecific2,
6069 IN PVOID SystemSpecific3);
6072 IN PVOID SystemSpecific1,
6073 IN PVOID FunctionContext,
6074 IN PVOID SystemSpecific2,
6075 IN PVOID SystemSpecific3);
6077 VOID EnqueueStartForPSKExec(
6078 IN PVOID SystemSpecific1,
6079 IN PVOID FunctionContext,
6080 IN PVOID SystemSpecific2,
6081 IN PVOID SystemSpecific3);
6083 VOID RTMPHandleSTAKey(
6084 IN PRTMP_ADAPTER pAdapter,
6085 IN MAC_TABLE_ENTRY *pEntry,
6086 IN MLME_QUEUE_ELEM *Elem);
6088 VOID PeerGroupMsg2Action(
6089 IN PRTMP_ADAPTER pAd,
6090 IN PMAC_TABLE_ENTRY pEntry,
6094 VOID PairDisAssocAction(
6095 IN PRTMP_ADAPTER pAd,
6096 IN PMAC_TABLE_ENTRY pEntry,
6099 VOID MlmeDeAuthAction(
6100 IN PRTMP_ADAPTER pAd,
6101 IN PMAC_TABLE_ENTRY pEntry,
6104 VOID GREKEYPeriodicExec(
6105 IN PVOID SystemSpecific1,
6106 IN PVOID FunctionContext,
6107 IN PVOID SystemSpecific2,
6108 IN PVOID SystemSpecific3);
6130 IN PRTMP_ADAPTER pAd,
6133 VOID AES_GTK_KEY_WRAP(
6135 IN UCHAR *plaintext,
6137 OUT UCHAR *ciphertext);
6140 IN PRTMP_ADAPTER pAdapter,
6144 VOID APToWirelessSta(
6145 IN PRTMP_ADAPTER pAd,
6146 IN MAC_TABLE_ENTRY *pEntry,
6147 IN PUCHAR pHeader802_3,
6151 IN BOOLEAN bClearFrame);
6153 VOID RTMPAddPMKIDCache(
6154 IN PRTMP_ADAPTER pAd,
6160 INT RTMPSearchPMKIDCache(
6161 IN PRTMP_ADAPTER pAd,
6165 VOID RTMPDeletePMKIDCache(
6166 IN PRTMP_ADAPTER pAd,
6170 VOID RTMPMaintainPMKIDCache(
6171 IN PRTMP_ADAPTER pAd);
6173 VOID RTMPSendTriggerFrame(
6174 IN PRTMP_ADAPTER pAd,
6178 IN BOOLEAN bQosNull);
6181 VOID RTMPFilterCalibration(
6182 IN PRTMP_ADAPTER pAd);
6186 //typedef void (*TIMER_FUNCTION)(unsigned long);
6190 VOID RTMP_SetPeriodicTimer(
6191 IN NDIS_MINIPORT_TIMER *pTimer,
6192 IN unsigned long timeout);
6194 VOID RTMP_OS_Init_Timer(
6195 IN PRTMP_ADAPTER pAd,
6196 IN NDIS_MINIPORT_TIMER *pTimer,
6197 IN TIMER_FUNCTION function,
6200 VOID RTMP_OS_Add_Timer(
6201 IN NDIS_MINIPORT_TIMER *pTimer,
6202 IN unsigned long timeout);
6204 VOID RTMP_OS_Mod_Timer(
6205 IN NDIS_MINIPORT_TIMER *pTimer,
6206 IN unsigned long timeout);
6209 VOID RTMP_OS_Del_Timer(
6210 IN NDIS_MINIPORT_TIMER *pTimer,
6211 OUT BOOLEAN *pCancelled);
6214 VOID RTMP_OS_Release_Packet(
6215 IN PRTMP_ADAPTER pAd,
6216 IN PQUEUE_ENTRY pEntry);
6221 NDIS_STATUS os_alloc_mem(
6222 IN PRTMP_ADAPTER pAd,
6226 NDIS_STATUS os_free_mem(
6227 IN PRTMP_ADAPTER pAd,
6231 void RTMP_AllocateSharedMemory(
6232 IN PRTMP_ADAPTER pAd,
6235 OUT PVOID *VirtualAddress,
6236 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6238 VOID RTMPFreeTxRxRingMemory(
6239 IN PRTMP_ADAPTER pAd);
6241 NDIS_STATUS AdapterBlockAllocateMemory(
6245 void RTMP_AllocateTxDescMemory(
6246 IN PRTMP_ADAPTER pAd,
6250 OUT PVOID *VirtualAddress,
6251 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6253 void RTMP_AllocateFirstTxBuffer(
6254 IN PRTMP_ADAPTER pAd,
6258 OUT PVOID *VirtualAddress,
6259 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6261 void RTMP_AllocateMgmtDescMemory(
6262 IN PRTMP_ADAPTER pAd,
6265 OUT PVOID *VirtualAddress,
6266 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6268 void RTMP_AllocateRxDescMemory(
6269 IN PRTMP_ADAPTER pAd,
6272 OUT PVOID *VirtualAddress,
6273 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6275 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6276 IN PRTMP_ADAPTER pAd,
6279 OUT PVOID *VirtualAddress,
6280 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6282 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6283 IN PRTMP_ADAPTER pAd,
6286 OUT PVOID *VirtualAddress);
6288 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6289 IN PRTMP_ADAPTER pAd,
6292 void RTMP_QueryPacketInfo(
6293 IN PNDIS_PACKET pPacket,
6294 OUT PACKET_INFO *pPacketInfo,
6295 OUT PUCHAR *pSrcBufVA,
6296 OUT UINT *pSrcBufLen);
6298 void RTMP_QueryNextPacketInfo(
6299 IN PNDIS_PACKET *ppPacket,
6300 OUT PACKET_INFO *pPacketInfo,
6301 OUT PUCHAR *pSrcBufVA,
6302 OUT UINT *pSrcBufLen);
6305 BOOLEAN RTMP_FillTxBlkInfo(
6306 IN RTMP_ADAPTER *pAd,
6310 PRTMP_SCATTER_GATHER_LIST
6311 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6314 void announce_802_3_packet(
6315 IN PRTMP_ADAPTER pAd,
6316 IN PNDIS_PACKET pPacket);
6319 UINT BA_Reorder_AMSDU_Annnounce(
6320 IN PRTMP_ADAPTER pAd,
6321 IN PNDIS_PACKET pPacket);
6324 UINT Handle_AMSDU_Packet(
6325 IN PRTMP_ADAPTER pAd,
6328 IN UCHAR FromWhichBSSID);
6331 void convert_802_11_to_802_3_packet(
6332 IN PRTMP_ADAPTER pAd,
6333 IN PNDIS_PACKET pPacket,
6337 IN UCHAR FromWhichBSSID);
6340 PNET_DEV get_netdev_from_bssid(
6341 IN PRTMP_ADAPTER pAd,
6342 IN UCHAR FromWhichBSSID);
6345 PNDIS_PACKET duplicate_pkt(
6346 IN PRTMP_ADAPTER pAd,
6347 IN PUCHAR pHeader802_3,
6351 IN UCHAR FromWhichBSSID);
6354 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6355 IN PRTMP_ADAPTER pAd,
6356 IN PNDIS_PACKET pOldPkt);
6358 PNDIS_PACKET duplicate_pkt_with_VLAN(
6359 IN PRTMP_ADAPTER pAd,
6360 IN PUCHAR pHeader802_3,
6364 IN UCHAR FromWhichBSSID);
6366 PNDIS_PACKET duplicate_pkt_with_WPI(
6367 IN PRTMP_ADAPTER pAd,
6368 IN PNDIS_PACKET pPacket,
6369 IN UINT32 ext_head_len,
6370 IN UINT32 ext_tail_len);
6372 UCHAR VLAN_8023_Header_Copy(
6373 IN PRTMP_ADAPTER pAd,
6374 IN PUCHAR pHeader802_3,
6377 IN UCHAR FromWhichBSSID);
6379 #ifdef DOT11_N_SUPPORT
6380 void ba_flush_reordering_timeout_mpdus(
6381 IN PRTMP_ADAPTER pAd,
6382 IN PBA_REC_ENTRY pBAEntry,
6386 VOID BAOriSessionSetUp(
6387 IN PRTMP_ADAPTER pAd,
6388 IN MAC_TABLE_ENTRY *pEntry,
6392 IN BOOLEAN isForced);
6394 VOID BASessionTearDownALL(
6395 IN OUT PRTMP_ADAPTER pAd,
6397 #endif // DOT11_N_SUPPORT //
6399 BOOLEAN OS_Need_Clone_Packet(void);
6402 VOID build_tx_packet(
6403 IN PRTMP_ADAPTER pAd,
6404 IN PNDIS_PACKET pPacket,
6409 VOID BAOriSessionTearDown(
6410 IN OUT PRTMP_ADAPTER pAd,
6413 IN BOOLEAN bPassive,
6414 IN BOOLEAN bForceSend);
6416 VOID BARecSessionTearDown(
6417 IN OUT PRTMP_ADAPTER pAd,
6420 IN BOOLEAN bPassive);
6422 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6423 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6425 ULONG AutoChBssInsertEntry(
6426 IN PRTMP_ADAPTER pAd,
6433 void AutoChBssTableInit(
6434 IN PRTMP_ADAPTER pAd);
6436 void ChannelInfoInit(
6437 IN PRTMP_ADAPTER pAd);
6439 void AutoChBssTableDestroy(
6440 IN PRTMP_ADAPTER pAd);
6442 void ChannelInfoDestroy(
6443 IN PRTMP_ADAPTER pAd);
6445 UCHAR New_ApAutoSelectChannel(
6446 IN PRTMP_ADAPTER pAd);
6448 BOOLEAN rtstrmactohex(
6452 BOOLEAN rtstrcasecmp(
6456 char *rtstrstruncasecmp(
6462 IN const char * s2);
6466 IN const char * ct);
6470 unsigned int *addr);
6472 ////////// common ioctl functions //////////
6473 INT Set_DriverVersion_Proc(
6474 IN PRTMP_ADAPTER pAd,
6477 INT Set_CountryRegion_Proc(
6478 IN PRTMP_ADAPTER pAd,
6481 INT Set_CountryRegionABand_Proc(
6482 IN PRTMP_ADAPTER pAd,
6485 INT Set_WirelessMode_Proc(
6486 IN PRTMP_ADAPTER pAd,
6489 INT Set_Channel_Proc(
6490 IN PRTMP_ADAPTER pAd,
6493 INT Set_ShortSlot_Proc(
6494 IN PRTMP_ADAPTER pAd,
6497 INT Set_TxPower_Proc(
6498 IN PRTMP_ADAPTER pAd,
6501 INT Set_BGProtection_Proc(
6502 IN PRTMP_ADAPTER pAd,
6505 INT Set_TxPreamble_Proc(
6506 IN PRTMP_ADAPTER pAd,
6509 INT Set_RTSThreshold_Proc(
6510 IN PRTMP_ADAPTER pAd,
6513 INT Set_FragThreshold_Proc(
6514 IN PRTMP_ADAPTER pAd,
6517 INT Set_TxBurst_Proc(
6518 IN PRTMP_ADAPTER pAd,
6521 #ifdef AGGREGATION_SUPPORT
6522 INT Set_PktAggregate_Proc(
6523 IN PRTMP_ADAPTER pAd,
6527 INT Set_IEEE80211H_Proc(
6528 IN PRTMP_ADAPTER pAd,
6533 IN PRTMP_ADAPTER pAd,
6537 INT Show_DescInfo_Proc(
6538 IN PRTMP_ADAPTER pAd,
6541 INT Set_ResetStatCounter_Proc(
6542 IN PRTMP_ADAPTER pAd,
6545 #ifdef DOT11_N_SUPPORT
6546 INT Set_BASetup_Proc(
6547 IN PRTMP_ADAPTER pAd,
6550 INT Set_BADecline_Proc(
6551 IN PRTMP_ADAPTER pAd,
6554 INT Set_BAOriTearDown_Proc(
6555 IN PRTMP_ADAPTER pAd,
6558 INT Set_BARecTearDown_Proc(
6559 IN PRTMP_ADAPTER pAd,
6563 IN PRTMP_ADAPTER pAd,
6567 IN PRTMP_ADAPTER pAd,
6571 IN PRTMP_ADAPTER pAd,
6574 INT Set_HtOpMode_Proc(
6575 IN PRTMP_ADAPTER pAd,
6578 INT Set_HtStbc_Proc(
6579 IN PRTMP_ADAPTER pAd,
6583 IN PRTMP_ADAPTER pAd,
6586 INT Set_HtExtcha_Proc(
6587 IN PRTMP_ADAPTER pAd,
6590 INT Set_HtMpduDensity_Proc(
6591 IN PRTMP_ADAPTER pAd,
6594 INT Set_HtBaWinSize_Proc(
6595 IN PRTMP_ADAPTER pAd,
6599 IN PRTMP_ADAPTER pAd,
6602 INT Set_HtLinkAdapt_Proc(
6603 IN PRTMP_ADAPTER pAd,
6606 INT Set_HtAmsdu_Proc(
6607 IN PRTMP_ADAPTER pAd,
6610 INT Set_HtAutoBa_Proc(
6611 IN PRTMP_ADAPTER pAd,
6614 INT Set_HtProtect_Proc(
6615 IN PRTMP_ADAPTER pAd,
6618 INT Set_HtMimoPs_Proc(
6619 IN PRTMP_ADAPTER pAd,
6623 INT Set_ForceShortGI_Proc(
6624 IN PRTMP_ADAPTER pAd,
6627 INT Set_ForceGF_Proc(
6628 IN PRTMP_ADAPTER pAd,
6632 IN PRTMP_ADAPTER pAd);
6634 INT Set_SendPSMPAction_Proc(
6635 IN PRTMP_ADAPTER pAd,
6638 INT Set_HtMIMOPSmode_Proc(
6639 IN PRTMP_ADAPTER pAd,
6643 INT Set_HtTxBASize_Proc(
6644 IN PRTMP_ADAPTER pAd,
6646 #endif // DOT11_N_SUPPORT //
6650 #ifdef CONFIG_STA_SUPPORT
6652 VOID RTMPSendDLSTearDownFrame(
6653 IN PRTMP_ADAPTER pAd,
6656 #ifdef DOT11_N_SUPPORT
6659 IN PRTMP_ADAPTER pAd,
6660 OUT PQUERYBA_TABLE pBAT);
6661 #endif // DOT11_N_SUPPORT //
6663 #ifdef WPA_SUPPLICANT_SUPPORT
6664 INT WpaCheckEapCode(
6665 IN PRTMP_ADAPTER pAd,
6670 VOID WpaSendMicFailureToWpaSupplicant(
6671 IN PRTMP_ADAPTER pAd,
6672 IN BOOLEAN bUnicast);
6674 VOID SendAssocIEsToWpaSupplicant(
6675 IN PRTMP_ADAPTER pAd);
6676 #endif // WPA_SUPPLICANT_SUPPORT //
6678 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6679 int wext_notify_event_assoc(
6680 IN RTMP_ADAPTER *pAd);
6681 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6683 #endif // CONFIG_STA_SUPPORT //
6687 #ifdef DOT11_N_SUPPORT
6688 VOID Handle_BSS_Width_Trigger_Events(
6689 IN PRTMP_ADAPTER pAd);
6691 void build_ext_channel_switch_ie(
6692 IN PRTMP_ADAPTER pAd,
6693 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6694 #endif // DOT11_N_SUPPORT //
6697 BOOLEAN APRxDoneInterruptHandle(
6698 IN PRTMP_ADAPTER pAd);
6700 BOOLEAN STARxDoneInterruptHandle(
6701 IN PRTMP_ADAPTER pAd,
6704 #ifdef DOT11_N_SUPPORT
6705 // AMPDU packet indication
6706 VOID Indicate_AMPDU_Packet(
6707 IN PRTMP_ADAPTER pAd,
6709 IN UCHAR FromWhichBSSID);
6711 // AMSDU packet indication
6712 VOID Indicate_AMSDU_Packet(
6713 IN PRTMP_ADAPTER pAd,
6715 IN UCHAR FromWhichBSSID);
6716 #endif // DOT11_N_SUPPORT //
6718 // Normal legacy Rx packet indication
6719 VOID Indicate_Legacy_Packet(
6720 IN PRTMP_ADAPTER pAd,
6722 IN UCHAR FromWhichBSSID);
6724 VOID Indicate_EAPOL_Packet(
6725 IN PRTMP_ADAPTER pAd,
6727 IN UCHAR FromWhichBSSID);
6729 void update_os_packet_info(
6730 IN PRTMP_ADAPTER pAd,
6732 IN UCHAR FromWhichBSSID);
6734 void wlan_802_11_to_802_3_packet(
6735 IN PRTMP_ADAPTER pAd,
6737 IN PUCHAR pHeader802_3,
6738 IN UCHAR FromWhichBSSID);
6740 UINT deaggregate_AMSDU_announce(
6741 IN PRTMP_ADAPTER pAd,
6742 PNDIS_PACKET pPacket,
6747 #ifdef CONFIG_STA_SUPPORT
6748 // remove LLC and get 802_3 Header
6749 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6751 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6753 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6755 _pDA = _pRxBlk->pHeader->Addr3; \
6756 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6760 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6762 _pDA = _pRxBlk->pHeader->Addr1; \
6763 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6764 _pSA = _pRxBlk->pHeader->Addr2; \
6766 _pSA = _pRxBlk->pHeader->Addr3; \
6770 _pDA = _pRxBlk->pHeader->Addr1; \
6771 _pSA = _pRxBlk->pHeader->Addr2; \
6775 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6776 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6778 #endif // CONFIG_STA_SUPPORT //
6781 BOOLEAN APFowardWirelessStaToWirelessSta(
6782 IN PRTMP_ADAPTER pAd,
6783 IN PNDIS_PACKET pPacket,
6784 IN ULONG FromWhichBSSID);
6786 VOID Announce_or_Forward_802_3_Packet(
6787 IN PRTMP_ADAPTER pAd,
6788 IN PNDIS_PACKET pPacket,
6789 IN UCHAR FromWhichBSSID);
6791 VOID Sta_Announce_or_Forward_802_3_Packet(
6792 IN PRTMP_ADAPTER pAd,
6793 IN PNDIS_PACKET pPacket,
6794 IN UCHAR FromWhichBSSID);
6797 #ifdef CONFIG_STA_SUPPORT
6798 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6799 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6800 //announce_802_3_packet(_pAd, _pPacket);
6801 #endif // CONFIG_STA_SUPPORT //
6804 PNDIS_PACKET DuplicatePacket(
6805 IN PRTMP_ADAPTER pAd,
6806 IN PNDIS_PACKET pPacket,
6807 IN UCHAR FromWhichBSSID);
6810 PNDIS_PACKET ClonePacket(
6811 IN PRTMP_ADAPTER pAd,
6812 IN PNDIS_PACKET pPacket,
6817 // Normal, AMPDU or AMSDU
6818 VOID CmmRxnonRalinkFrameIndicate(
6819 IN PRTMP_ADAPTER pAd,
6821 IN UCHAR FromWhichBSSID);
6823 VOID CmmRxRalinkFrameIndicate(
6824 IN PRTMP_ADAPTER pAd,
6825 IN MAC_TABLE_ENTRY *pEntry,
6827 IN UCHAR FromWhichBSSID);
6829 VOID Update_Rssi_Sample(
6830 IN PRTMP_ADAPTER pAd,
6831 IN RSSI_SAMPLE *pRssi,
6832 IN PRXWI_STRUC pRxWI);
6834 PNDIS_PACKET GetPacketFromRxRing(
6835 IN PRTMP_ADAPTER pAd,
6836 OUT PRT28XX_RXD_STRUC pSaveRxD,
6837 OUT BOOLEAN *pbReschedule,
6838 IN OUT UINT32 *pRxPending);
6840 PNDIS_PACKET RTMPDeFragmentDataFrame(
6841 IN PRTMP_ADAPTER pAd,
6844 ////////////////////////////////////////
6852 typedef struct _DefaultKeyIdxValue
6856 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6860 #ifdef CONFIG_STA_SUPPORT
6862 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6863 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6864 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6865 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6866 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6867 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6868 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6869 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6870 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6871 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6872 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6875 P80211ENUM_msgitem_status_no_value = 0x00
6878 P80211ENUM_truth_false = 0x00,
6879 P80211ENUM_truth_true = 0x01
6882 /* Definition from madwifi */
6888 } p80211item_uint32_t;
6893 #define WLAN_DEVNAMELEN_MAX 16
6894 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6895 p80211item_uint32_t hosttime;
6896 p80211item_uint32_t mactime;
6897 p80211item_uint32_t channel;
6898 p80211item_uint32_t rssi;
6899 p80211item_uint32_t sq;
6900 p80211item_uint32_t signal;
6901 p80211item_uint32_t noise;
6902 p80211item_uint32_t rate;
6903 p80211item_uint32_t istx;
6904 p80211item_uint32_t frmlen;
6905 } wlan_ng_prism2_header;
6907 /* The radio capture header precedes the 802.11 header. */
6908 typedef struct PACKED _ieee80211_radiotap_header {
6909 UINT8 it_version; /* Version 0. Only increases
6910 * for drastic changes,
6911 * introduction of compatible
6912 * new fields does not count.
6915 UINT16 it_len; /* length of the whole
6916 * header in bytes, including
6917 * it_version, it_pad,
6918 * it_len, and data fields.
6920 UINT32 it_present; /* A bitmap telling which
6921 * fields are present. Set bit 31
6922 * (0x80000000) to extend the
6923 * bitmap by another 32 bits.
6924 * Additional extensions are made
6925 * by setting bit 31.
6927 }ieee80211_radiotap_header ;
6929 enum ieee80211_radiotap_type {
6930 IEEE80211_RADIOTAP_TSFT = 0,
6931 IEEE80211_RADIOTAP_FLAGS = 1,
6932 IEEE80211_RADIOTAP_RATE = 2,
6933 IEEE80211_RADIOTAP_CHANNEL = 3,
6934 IEEE80211_RADIOTAP_FHSS = 4,
6935 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6936 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6937 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6938 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6939 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
6940 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
6941 IEEE80211_RADIOTAP_ANTENNA = 11,
6942 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
6943 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
6946 #define WLAN_RADIOTAP_PRESENT ( \
6947 (1 << IEEE80211_RADIOTAP_TSFT) | \
6948 (1 << IEEE80211_RADIOTAP_FLAGS) | \
6949 (1 << IEEE80211_RADIOTAP_RATE) | \
6952 typedef struct _wlan_radiotap_header {
6953 ieee80211_radiotap_header wt_ihdr;
6957 } wlan_radiotap_header;
6958 /* Definition from madwifi */
6960 void send_monitor_packets(
6961 IN PRTMP_ADAPTER pAd,
6964 #if WIRELESS_EXT >= 12
6965 // This function will be called when query /proc
6966 struct iw_statistics *rt28xx_get_wireless_stats(
6967 IN struct net_device *net_dev);
6970 VOID RTMPSetDesiredRates(
6971 IN PRTMP_ADAPTER pAdapter,
6973 #endif // CONFIG_STA_SUPPORT //
6975 INT Set_FixedTxMode_Proc(
6976 IN PRTMP_ADAPTER pAd,
6979 static inline char* GetPhyMode(
6989 #ifdef DOT11_N_SUPPORT
6993 case MODE_HTGREENFIELD:
6995 #endif // DOT11_N_SUPPORT //
7002 static inline char* GetBW(
7012 #ifdef DOT11_N_SUPPORT
7015 #endif // DOT11_N_SUPPORT //
7022 VOID RT28xxThreadTerminate(
7023 IN RTMP_ADAPTER *pAd);
7025 BOOLEAN RT28XXChipsetCheck(
7028 BOOLEAN RT28XXNetDevInit(
7030 IN struct net_device *net_dev,
7031 IN RTMP_ADAPTER *pAd);
7033 BOOLEAN RT28XXProbePostConfig(
7035 IN RTMP_ADAPTER *pAd,
7038 VOID RT28XXDMADisable(
7039 IN RTMP_ADAPTER *pAd);
7041 VOID RT28XXDMAEnable(
7042 IN RTMP_ADAPTER *pAd);
7044 VOID RT28xx_UpdateBeaconToAsic(
7045 IN RTMP_ADAPTER * pAd,
7048 IN ULONG UpdatePos);
7051 IN struct net_device *net_dev,
7052 IN OUT struct ifreq *rq,
7056 #ifdef CONFIG_STA_SUPPORT
7057 INT rt28xx_sta_ioctl(
7058 IN struct net_device *net_dev,
7059 IN OUT struct ifreq *rq,
7061 #endif // CONFIG_STA_SUPPORT //
7063 BOOLEAN RT28XXSecurityKeyAdd(
7064 IN PRTMP_ADAPTER pAd,
7067 IN MAC_TABLE_ENTRY *pEntry);
7069 ////////////////////////////////////////
7070 PNDIS_PACKET GetPacketFromRxRing(
7071 IN PRTMP_ADAPTER pAd,
7072 OUT PRT28XX_RXD_STRUC pSaveRxD,
7073 OUT BOOLEAN *pbReschedule,
7074 IN OUT UINT32 *pRxPending);
7077 void kill_thread_task(PRTMP_ADAPTER pAd);
7079 void tbtt_tasklet(unsigned long data);
7082 VOID AsicTurnOffRFClk(
7083 IN PRTMP_ADAPTER pAd,
7086 VOID AsicTurnOnRFClk(
7087 IN PRTMP_ADAPTER pAd,
7091 NTSTATUS RT30xxWriteRFRegister(
7092 IN PRTMP_ADAPTER pAd,
7096 NTSTATUS RT30xxReadRFRegister(
7097 IN PRTMP_ADAPTER pAd,
7101 //2008/09/11:KH add to support efuse<--
7102 UCHAR eFuseReadRegisters(
7103 IN PRTMP_ADAPTER pAd,
7108 VOID eFuseReadPhysical(
7109 IN PRTMP_ADAPTER pAd,
7110 IN PUSHORT lpInBuffer,
7111 IN ULONG nInBufferSize,
7112 OUT PUSHORT lpOutBuffer,
7113 IN ULONG nOutBufferSize
7117 IN PRTMP_ADAPTER pAd,
7122 VOID eFusePhysicalWriteRegisters(
7123 IN PRTMP_ADAPTER pAd,
7128 NTSTATUS eFuseWriteRegisters(
7129 IN PRTMP_ADAPTER pAd,
7134 VOID eFuseWritePhysical(
7135 IN PRTMP_ADAPTER pAd,
7137 ULONG nInBufferSize,
7139 ULONG nOutBufferSize
7142 NTSTATUS eFuseWrite(
7143 IN PRTMP_ADAPTER pAd,
7148 INT set_eFuseGetFreeBlockCount_Proc(
7149 IN PRTMP_ADAPTER pAd,
7152 INT set_eFusedump_Proc(
7153 IN PRTMP_ADAPTER pAd,
7156 INT set_eFuseLoadFromBin_Proc(
7157 IN PRTMP_ADAPTER pAd,
7160 NTSTATUS eFuseWriteRegistersFromBin(
7161 IN PRTMP_ADAPTER pAd,
7166 VOID eFusePhysicalReadRegisters(
7167 IN PRTMP_ADAPTER pAd,
7172 NDIS_STATUS NICLoadEEPROM(
7173 IN PRTMP_ADAPTER pAd);
7175 BOOLEAN bNeedLoadEEPROM(
7176 IN PRTMP_ADAPTER pAd);
7177 //2008/09/11:KH add to support efuse-->
7181 // add by johnli, RF power sequence setup
7182 VOID RT30xxLoadRFNormalModeSetup(
7183 IN PRTMP_ADAPTER pAd);
7185 VOID RT30xxLoadRFSleepModeSetup(
7186 IN PRTMP_ADAPTER pAd);
7188 VOID RT30xxReverseRFSleepModeSetup(
7189 IN PRTMP_ADAPTER pAd);
7195 // Function Prototype in rtusb_bulk.c
7197 VOID RTUSBInitTxDesc(
7198 IN PRTMP_ADAPTER pAd,
7199 IN PTX_CONTEXT pTxContext,
7200 IN UCHAR BulkOutPipeId,
7201 IN usb_complete_t Func);
7203 VOID RTUSBInitHTTxDesc(
7204 IN PRTMP_ADAPTER pAd,
7205 IN PHT_TX_CONTEXT pTxContext,
7206 IN UCHAR BulkOutPipeId,
7207 IN ULONG BulkOutSize,
7208 IN usb_complete_t Func);
7210 VOID RTUSBInitRxDesc(
7211 IN PRTMP_ADAPTER pAd,
7212 IN PRX_CONTEXT pRxContext);
7214 VOID RTUSBCleanUpDataBulkOutQueue(
7215 IN PRTMP_ADAPTER pAd);
7217 VOID RTUSBCancelPendingBulkOutIRP(
7218 IN PRTMP_ADAPTER pAd);
7220 VOID RTUSBBulkOutDataPacket(
7221 IN PRTMP_ADAPTER pAd,
7222 IN UCHAR BulkOutPipeId,
7225 VOID RTUSBBulkOutNullFrame(
7226 IN PRTMP_ADAPTER pAd);
7228 VOID RTUSBBulkOutRTSFrame(
7229 IN PRTMP_ADAPTER pAd);
7231 VOID RTUSBCancelPendingBulkInIRP(
7232 IN PRTMP_ADAPTER pAd);
7234 VOID RTUSBCancelPendingIRPs(
7235 IN PRTMP_ADAPTER pAd);
7237 VOID RTUSBBulkOutMLMEPacket(
7238 IN PRTMP_ADAPTER pAd,
7241 VOID RTUSBBulkOutPsPoll(
7242 IN PRTMP_ADAPTER pAd);
7244 VOID RTUSBCleanUpMLMEBulkOutQueue(
7245 IN PRTMP_ADAPTER pAd);
7247 VOID RTUSBKickBulkOut(
7248 IN PRTMP_ADAPTER pAd);
7250 VOID RTUSBBulkReceive(
7251 IN PRTMP_ADAPTER pAd);
7254 IN RTMP_ADAPTER *pAd);
7256 VOID RTUSBInitRxDesc(
7257 IN PRTMP_ADAPTER pAd,
7258 IN PRX_CONTEXT pRxContext);
7260 VOID RTUSBBulkRxHandle(
7261 IN unsigned long data);
7264 // Function Prototype in rtusb_io.c
7266 NTSTATUS RTUSBMultiRead(
7267 IN PRTMP_ADAPTER pAd,
7272 NTSTATUS RTUSBMultiWrite(
7273 IN PRTMP_ADAPTER pAd,
7278 NTSTATUS RTUSBMultiWrite_OneByte(
7279 IN PRTMP_ADAPTER pAd,
7283 NTSTATUS RTUSBReadBBPRegister(
7284 IN PRTMP_ADAPTER pAd,
7288 NTSTATUS RTUSBWriteBBPRegister(
7289 IN PRTMP_ADAPTER pAd,
7293 NTSTATUS RTUSBWriteRFRegister(
7294 IN PRTMP_ADAPTER pAd,
7297 NTSTATUS RTUSB_VendorRequest(
7298 IN PRTMP_ADAPTER pAd,
7299 IN UINT32 TransferFlags,
7300 IN UCHAR ReservedBits,
7304 IN PVOID TransferBuffer,
7305 IN UINT32 TransferBufferLength);
7307 NTSTATUS RTUSBReadEEPROM(
7308 IN PRTMP_ADAPTER pAd,
7313 NTSTATUS RTUSBWriteEEPROM(
7314 IN PRTMP_ADAPTER pAd,
7319 VOID RTUSBPutToSleep(
7320 IN PRTMP_ADAPTER pAd);
7322 NTSTATUS RTUSBWakeUp(
7323 IN PRTMP_ADAPTER pAd);
7325 VOID RTUSBInitializeCmdQ(
7328 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7329 IN PRTMP_ADAPTER pAd,
7331 IN BOOLEAN SetInformation,
7332 IN PVOID pInformationBuffer,
7333 IN UINT32 InformationBufferLength);
7335 NDIS_STATUS RTUSBEnqueueInternalCmd(
7336 IN PRTMP_ADAPTER pAd,
7338 IN PVOID pInformationBuffer,
7339 IN UINT32 InformationBufferLength);
7341 VOID RTUSBDequeueCmd(
7343 OUT PCmdQElmt *pcmdqelmt);
7346 IN OUT PVOID Context);
7349 IN OUT PVOID Context);
7351 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7352 IN RTMP_ADAPTER *pAd,
7353 IN RALINK_TIMER_STRUCT *pTimer);
7355 BOOLEAN RT2870_TimerQ_Remove(
7356 IN RTMP_ADAPTER *pAd,
7357 IN RALINK_TIMER_STRUCT *pTimer);
7359 void RT2870_TimerQ_Exit(
7360 IN RTMP_ADAPTER *pAd);
7362 void RT2870_TimerQ_Init(
7363 IN RTMP_ADAPTER *pAd);
7365 VOID RT2870_BssBeaconExit(
7366 IN RTMP_ADAPTER *pAd);
7368 VOID RT2870_BssBeaconStop(
7369 IN RTMP_ADAPTER *pAd);
7371 VOID RT2870_BssBeaconStart(
7372 IN RTMP_ADAPTER * pAd);
7374 VOID RT2870_BssBeaconInit(
7375 IN RTMP_ADAPTER *pAd);
7377 VOID RT2870_WatchDog(
7378 IN RTMP_ADAPTER *pAd);
7380 NTSTATUS RTUSBWriteMACRegister(
7381 IN PRTMP_ADAPTER pAd,
7385 NTSTATUS RTUSBReadMACRegister(
7386 IN PRTMP_ADAPTER pAd,
7388 OUT PUINT32 pValue);
7390 NTSTATUS RTUSBSingleWrite(
7391 IN RTMP_ADAPTER *pAd,
7395 NTSTATUS RTUSBFirmwareRun(
7396 IN PRTMP_ADAPTER pAd);
7398 NTSTATUS RTUSBFirmwareWrite(
7399 IN PRTMP_ADAPTER pAd,
7403 NTSTATUS RTUSBFirmwareOpmode(
7404 IN PRTMP_ADAPTER pAd,
7405 OUT PUINT32 pValue);
7407 NTSTATUS RTUSBVenderReset(
7408 IN PRTMP_ADAPTER pAd);
7410 NDIS_STATUS RTUSBSetHardWareRegister(
7411 IN PRTMP_ADAPTER pAdapter,
7414 NDIS_STATUS RTUSBQueryHardWareRegister(
7415 IN PRTMP_ADAPTER pAdapter,
7419 IN PRTMP_ADAPTER pAd);
7422 NDIS_STATUS CreateThreads(
7423 IN struct net_device *net_dev );
7426 VOID MacTableInitialize(
7427 IN PRTMP_ADAPTER pAd);
7430 IN PRTMP_ADAPTER pAd,
7433 NDIS_STATUS RTMPWPAAddKeyProc(
7434 IN PRTMP_ADAPTER pAd,
7437 VOID AsicRxAntEvalAction(
7438 IN PRTMP_ADAPTER pAd);
7441 IN PRTMP_ADAPTER pAd,
7442 IN PUCHAR pHeader802_3,
7446 OUT PNDIS_PACKET *ppPacket);
7448 UINT deaggregate_AMSDU_announce(
7449 IN PRTMP_ADAPTER pAd,
7450 PNDIS_PACKET pPacket,
7454 NDIS_STATUS RTMPCheckRxError(
7455 IN PRTMP_ADAPTER pAd,
7456 IN PHEADER_802_11 pHeader,
7457 IN PRXWI_STRUC pRxWI,
7458 IN PRT28XX_RXD_STRUC pRxINFO);
7461 VOID RTUSBMlmeHardTransmit(
7462 IN PRTMP_ADAPTER pAd,
7463 IN PMGMT_STRUC pMgmt);
7469 // Function Prototype in rtusb_data.c
7471 NDIS_STATUS RTUSBFreeDescriptorRequest(
7472 IN PRTMP_ADAPTER pAd,
7473 IN UCHAR BulkOutPipeId,
7474 IN UINT32 NumberRequired);
7477 BOOLEAN RTUSBNeedQueueBackForAgg(
7478 IN RTMP_ADAPTER *pAd,
7479 IN UCHAR BulkOutPipeId);
7482 VOID RTMPWriteTxInfo(
7483 IN PRTMP_ADAPTER pAd,
7484 IN PTXINFO_STRUC pTxInfo,
7485 IN USHORT USBDMApktLen,
7492 // Function Prototype in cmm_data_2870.c
7494 USHORT RtmpUSB_WriteSubTxResource(
7495 IN PRTMP_ADAPTER pAd,
7498 OUT USHORT *FreeNumber);
7500 USHORT RtmpUSB_WriteSingleTxResource(
7501 IN PRTMP_ADAPTER pAd,
7504 OUT USHORT *FreeNumber);
7506 USHORT RtmpUSB_WriteFragTxResource(
7507 IN PRTMP_ADAPTER pAd,
7510 OUT USHORT *FreeNumber);
7512 USHORT RtmpUSB_WriteMultiTxResource(
7513 IN PRTMP_ADAPTER pAd,
7516 OUT USHORT *FreeNumber);
7518 VOID RtmpUSB_FinalWriteTxResource(
7519 IN PRTMP_ADAPTER pAd,
7521 IN USHORT totalMPDUSize,
7524 VOID RtmpUSBDataLastTxIdx(
7525 IN PRTMP_ADAPTER pAd,
7529 VOID RtmpUSBDataKickOut(
7530 IN PRTMP_ADAPTER pAd,
7535 int RtmpUSBMgmtKickOut(
7536 IN RTMP_ADAPTER *pAd,
7538 IN PNDIS_PACKET pPacket,
7539 IN PUCHAR pSrcBufVA,
7542 VOID RtmpUSBNullFrameKickOut(
7543 IN RTMP_ADAPTER *pAd,
7545 IN UCHAR *pNullFrame,
7546 IN UINT32 frameLen);
7548 VOID RT28xxUsbStaAsicForceWakeup(
7549 IN PRTMP_ADAPTER pAd,
7550 IN BOOLEAN bFromTx);
7552 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7553 IN PRTMP_ADAPTER pAd,
7554 IN USHORT TbttNumToNextWakeUp);
7556 VOID RT28xxUsbMlmeRadioOn(
7557 IN PRTMP_ADAPTER pAd);
7559 VOID RT28xxUsbMlmeRadioOFF(
7560 IN PRTMP_ADAPTER pAd);
7563 ////////////////////////////////////////
7566 IN RTMP_ADAPTER *pAd);
7568 UINT32 QBSS_LoadElementAppend(
7569 IN RTMP_ADAPTER *pAd,
7572 VOID QBSS_LoadUpdate(
7573 IN RTMP_ADAPTER *pAd);
7575 ///////////////////////////////////////
7576 INT RTMPShowCfgValue(
7577 IN PRTMP_ADAPTER pAd,
7581 PCHAR RTMPGetRalinkAuthModeStr(
7582 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7584 PCHAR RTMPGetRalinkEncryModeStr(
7585 IN USHORT encryMode);
7586 //////////////////////////////////////
7588 #ifdef CONFIG_STA_SUPPORT
7589 VOID AsicStaBbpTuning(
7590 IN PRTMP_ADAPTER pAd);
7592 BOOLEAN StaAddMacTableEntry(
7593 IN PRTMP_ADAPTER pAd,
7594 IN PMAC_TABLE_ENTRY pEntry,
7595 IN UCHAR MaxSupportedRateIn500Kbps,
7596 IN HT_CAPABILITY_IE *pHtCapability,
7597 IN UCHAR HtCapabilityLen,
7598 IN USHORT CapabilityInfo);
7599 #endif // CONFIG_STA_SUPPORT //
7601 void RTMP_IndicateMediaState(
7602 IN PRTMP_ADAPTER pAd);
7604 VOID ReSyncBeaconTime(
7605 IN PRTMP_ADAPTER pAd);
7607 VOID RTMPSetAGCInitValue(
7608 IN PRTMP_ADAPTER pAd,
7609 IN UCHAR BandWidth);
7611 int rt28xx_close(IN PNET_DEV dev);
7612 int rt28xx_open(IN PNET_DEV dev);
7614 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7616 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7617 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7619 if (VIRTUAL_IF_NUM(pAd) == 0)
7621 if (rt28xx_open(pAd->net_dev) != 0)
7627 VIRTUAL_IF_INC(pAd);
7631 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7633 VIRTUAL_IF_DEC(pAd);
7634 if (VIRTUAL_IF_NUM(pAd) == 0)
7635 rt28xx_close(pAd->net_dev);
7640 #endif // __RTMP_H__