2 *************************************************************************
4 * 5F., No.36, Taiyuan St., Jhubei City,
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
10 * This program is free software; you can redistribute it and/or modify *
11 * it under the terms of the GNU General Public License as published by *
12 * the Free Software Foundation; either version 2 of the License, or *
13 * (at your option) any later version. *
15 * This program is distributed in the hope that it will be useful, *
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
18 * GNU General Public License for more details. *
20 * You should have received a copy of the GNU General Public License *
21 * along with this program; if not, write to the *
22 * Free Software Foundation, Inc., *
23 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
25 *************************************************************************
31 Miniport generic portion header file
35 -------- ---------- ----------------------------------------------
36 Paul Lin 2002-08-01 created
37 James Tan 2002-09-06 modified (Revise NTCRegTable)
38 John Chang 2004-09-06 modified for RT2600
43 #include "link_list.h"
44 #include "spectrum_def.h"
47 #include "mlme_ex_def.h"
50 #ifdef CONFIG_STA_SUPPORT
52 #endif // CONFIG_STA_SUPPORT //
54 #undef AP_WSC_INCLUDED
55 #undef STA_WSC_INCLUDED
59 #ifdef CONFIG_STA_SUPPORT
60 #endif // CONFIG_STA_SUPPORT //
62 #if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED)
72 //#define DBG_DIAGNOSE 1
74 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
75 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
76 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
78 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
79 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
82 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
83 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
84 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
87 ////////////////////////////////////////////////////////////////////////////
88 // The TX_BUFFER structure forms the transmitted USB packet to the device
89 ////////////////////////////////////////////////////////////////////////////
90 typedef struct __TX_BUFFER{
92 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
93 HEADER_802_11 NullFrame;
94 PSPOLL_FRAME PsPollPacket;
97 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
98 } TX_BUFFER, *PTX_BUFFER;
100 typedef struct __HTTX_BUFFER{
102 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
103 HEADER_802_11 NullFrame;
104 PSPOLL_FRAME PsPollPacket;
107 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
108 } HTTX_BUFFER, *PHTTX_BUFFER;
111 // used to track driver-generated write irps
112 typedef struct _TX_CONTEXT
114 PVOID pAd; //Initialized in MiniportInitialize
115 PURB pUrb; //Initialized in MiniportInitialize
116 PIRP pIrp; //used to cancel pending bulk out.
117 //Initialized in MiniportInitialize
118 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
123 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
124 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
127 BOOLEAN bAggregatible;
128 UCHAR Header_802_3[LENGTH_802_3];
132 dma_addr_t data_dma; // urb dma on linux
134 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
137 // used to track driver-generated write irps
138 typedef struct _HT_TX_CONTEXT
140 PVOID pAd; //Initialized in MiniportInitialize
141 PURB pUrb; //Initialized in MiniportInitialize
142 PIRP pIrp; //used to cancel pending bulk out.
143 //Initialized in MiniportInitialize
144 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
145 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
151 BOOLEAN bCopySavePad;
153 UCHAR Header_802_3[LENGTH_802_3];
154 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
155 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
156 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
157 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
159 dma_addr_t data_dma; // urb dma on linux
160 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
164 // Structure to keep track of receive packets and buffers to indicate
165 // receive data to the protocol.
167 typedef struct _RX_CONTEXT
169 PUCHAR TransferBuffer;
171 PIRP pIrp;//used to cancel pending bulk in.
173 //These 2 Boolean shouldn't both be 1 at the same time.
174 ULONG BulkInOffset; // number of packets waiting for reordering .
175 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
176 BOOLEAN bRxHandling; // Notify this packet is being process now.
177 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
178 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
179 BOOLEAN IRPPending; // TODO: To be removed
181 NDIS_SPIN_LOCK RxContextLock;
182 dma_addr_t data_dma; // urb dma on linux
183 } RX_CONTEXT, *PRX_CONTEXT;
188 // NDIS Version definitions
190 #ifdef NDIS50_MINIPORT
191 #define RTMP_NDIS_MAJOR_VERSION 5
192 #define RTMP_NDIS_MINOR_VERSION 0
195 #ifdef NDIS51_MINIPORT
196 #define RTMP_NDIS_MAJOR_VERSION 5
197 #define RTMP_NDIS_MINOR_VERSION 1
200 extern char NIC_VENDOR_DESC[];
201 extern int NIC_VENDOR_DESC_LEN;
203 extern unsigned char SNAP_AIRONET[];
204 extern unsigned char CipherSuiteCiscoCCKM[];
205 extern unsigned char CipherSuiteCiscoCCKMLen;
206 extern unsigned char CipherSuiteCiscoCCKM24[];
207 extern unsigned char CipherSuiteCiscoCCKM24Len;
208 extern unsigned char CipherSuiteCCXTkip[];
209 extern unsigned char CipherSuiteCCXTkipLen;
210 extern unsigned char CISCO_OUI[];
211 extern UCHAR BaSizeArray[4];
213 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
214 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
215 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
216 extern ULONG BIT32[32];
217 extern UCHAR BIT8[8];
218 extern char* CipherName[];
219 extern char* MCSToMbps[];
220 extern UCHAR RxwiMCSToOfdmRate[12];
221 extern UCHAR SNAP_802_1H[6];
222 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
223 extern UCHAR SNAP_AIRONET[8];
224 extern UCHAR CKIP_LLC_SNAP[8];
225 extern UCHAR EAPOL_LLC_SNAP[8];
226 extern UCHAR EAPOL[2];
228 extern UCHAR APPLE_TALK[2];
229 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
230 extern UCHAR OfdmRateToRxwiMCS[];
231 extern UCHAR OfdmSignalToRateId[16] ;
232 extern UCHAR default_cwmin[4];
233 extern UCHAR default_cwmax[4];
234 extern UCHAR default_sta_aifsn[4];
235 extern UCHAR MapUserPriorityToAccessCategory[8];
237 extern USHORT RateUpPER[];
238 extern USHORT RateDownPER[];
239 extern UCHAR Phy11BNextRateDownward[];
240 extern UCHAR Phy11BNextRateUpward[];
241 extern UCHAR Phy11BGNextRateDownward[];
242 extern UCHAR Phy11BGNextRateUpward[];
243 extern UCHAR Phy11ANextRateDownward[];
244 extern UCHAR Phy11ANextRateUpward[];
245 extern CHAR RssiSafeLevelForTxRate[];
246 extern UCHAR RateIdToMbps[];
247 extern USHORT RateIdTo500Kbps[];
249 extern UCHAR CipherSuiteWpaNoneTkip[];
250 extern UCHAR CipherSuiteWpaNoneTkipLen;
252 extern UCHAR CipherSuiteWpaNoneAes[];
253 extern UCHAR CipherSuiteWpaNoneAesLen;
256 extern UCHAR SupRateIe;
257 extern UCHAR ExtRateIe;
259 #ifdef DOT11_N_SUPPORT
260 extern UCHAR HtCapIe;
261 extern UCHAR AddHtInfoIe;
262 extern UCHAR NewExtChanIe;
264 extern UCHAR ExtHtCapIe;
265 #endif // DOT11N_DRAFT3 //
266 #endif // DOT11_N_SUPPORT //
277 extern UCHAR WPA_OUI[];
278 extern UCHAR RSN_OUI[];
279 extern UCHAR WAPI_OUI[];
280 extern UCHAR WME_INFO_ELEM[];
281 extern UCHAR WME_PARM_ELEM[];
282 extern UCHAR Ccx2QosInfo[];
283 extern UCHAR Ccx2IeInfo[];
284 extern UCHAR RALINK_OUI[];
285 extern UCHAR PowerConstraintIE[];
288 extern UCHAR RateSwitchTable[];
289 extern UCHAR RateSwitchTable11B[];
290 extern UCHAR RateSwitchTable11G[];
291 extern UCHAR RateSwitchTable11BG[];
293 #ifdef DOT11_N_SUPPORT
294 extern UCHAR RateSwitchTable11BGN1S[];
295 extern UCHAR RateSwitchTable11BGN2S[];
296 extern UCHAR RateSwitchTable11BGN2SForABand[];
297 extern UCHAR RateSwitchTable11N1S[];
298 extern UCHAR RateSwitchTable11N2S[];
299 extern UCHAR RateSwitchTable11N2SForABand[];
301 #ifdef CONFIG_STA_SUPPORT
302 extern UCHAR PRE_N_HT_OUI[];
303 #endif // CONFIG_STA_SUPPORT //
304 #endif // DOT11_N_SUPPORT //
306 #define MAXSEQ (0xFFF)
309 typedef struct _ATE_INFO {
315 TXWI_STRUC TxWI; // TXWI
317 UCHAR Addr1[MAC_ADDR_LEN];
318 UCHAR Addr2[MAC_ADDR_LEN];
319 UCHAR Addr3[MAC_ADDR_LEN];
323 UINT32 TxDoneCount; // Tx DMA Done
326 BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
327 BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
331 CHAR LastSNR0; // last received SNR
332 CHAR LastSNR1; // last received SNR for 2nd antenna
333 CHAR LastRssi0; // last received RSSI
334 CHAR LastRssi1; // last received RSSI for 2nd antenna
335 CHAR LastRssi2; // last received RSSI for 3rd antenna
336 CHAR AvgRssi0; // last 8 frames' average RSSI
337 CHAR AvgRssi1; // last 8 frames' average RSSI
338 CHAR AvgRssi2; // last 8 frames' average RSSI
339 SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
340 SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
341 SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
343 UINT32 NumOfAvgRssiSample;
345 #ifdef RALINK_28xx_QA
348 /* not used in RT2860 */
349 TXINFO_STRUC TxInfo; // TxInfo
351 USHORT HLen; // Header Length
352 USHORT PLen; // Pattern Length
353 UCHAR Header[32]; // Header buffer
354 UCHAR Pattern[32]; // Pattern buffer
355 USHORT DLen; // Data Length
376 //UINT32 Repeat; // Tx Cpu count
377 UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
378 #endif // RALINK_28xx_QA //
379 } ATE_INFO, *PATE_INFO;
381 #ifdef RALINK_28xx_QA
382 struct ate_racfghdr {
390 } __attribute__((packed));
391 #endif // RALINK_28xx_QA //
392 #endif // RALINK_ATE //
394 #ifdef DOT11_N_SUPPORT
395 struct reordering_mpdu
397 struct reordering_mpdu *next;
398 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
399 int Sequence; /* sequence number of MPDU */
403 struct reordering_list
405 struct reordering_mpdu *next;
409 struct reordering_mpdu_pool
413 struct reordering_list freelist;
415 #endif // DOT11_N_SUPPORT //
417 typedef struct _RSSI_SAMPLE {
418 CHAR LastRssi0; // last received RSSI
419 CHAR LastRssi1; // last received RSSI
420 CHAR LastRssi2; // last received RSSI
430 // Queue structure and macros
432 typedef struct _QUEUE_ENTRY {
433 struct _QUEUE_ENTRY *Next;
434 } QUEUE_ENTRY, *PQUEUE_ENTRY;
437 typedef struct _QUEUE_HEADER {
441 } QUEUE_HEADER, *PQUEUE_HEADER;
443 #define InitializeQueueHeader(QueueHeader) \
445 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
446 (QueueHeader)->Number = 0; \
449 #define RemoveHeadQueue(QueueHeader) \
450 (QueueHeader)->Head; \
452 PQUEUE_ENTRY pNext; \
453 if ((QueueHeader)->Head != NULL) \
455 pNext = (QueueHeader)->Head->Next; \
456 (QueueHeader)->Head = pNext; \
458 (QueueHeader)->Tail = NULL; \
459 (QueueHeader)->Number--; \
463 #define InsertHeadQueue(QueueHeader, QueueEntry) \
465 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
466 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
467 if ((QueueHeader)->Tail == NULL) \
468 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
469 (QueueHeader)->Number++; \
472 #define InsertTailQueue(QueueHeader, QueueEntry) \
474 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
475 if ((QueueHeader)->Tail) \
476 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
478 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
479 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
480 (QueueHeader)->Number++; \
484 // Macros for flag and ref count operations
486 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
487 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
488 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
489 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
490 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
492 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
493 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
494 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
496 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
497 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
498 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
500 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
501 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
502 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
504 #ifdef CONFIG_STA_SUPPORT
505 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
506 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
507 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
508 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
510 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
511 #endif // CONFIG_STA_SUPPORT //
513 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
514 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
517 #define INC_RING_INDEX(_idx, _RingSize) \
519 (_idx) = (_idx+1) % (_RingSize); \
522 // We will have a cost down version which mac version is 0x3090xxxx
523 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
525 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
526 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
527 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
529 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
531 #define RING_PACKET_INIT(_TxRing, _idx) \
533 _TxRing->Cell[_idx].pNdisPacket = NULL; \
534 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
537 #define TXDT_INIT(_TxD) \
539 NdisZeroMemory(_TxD, TXD_SIZE); \
543 //Set last data segment
544 #define RING_SET_LASTDS(_TxD, _IsSD0) \
546 if (_IsSD0) {_TxD->LastSec0 = 1;} \
547 else {_TxD->LastSec1 = 1;} \
550 // Increase TxTsc value for next transmission
552 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
553 // Should send a special event microsoft defined to request re-key
554 #define INC_TX_TSC(_tsc) \
557 while (++_tsc[i] == 0x0) \
565 #ifdef DOT11_N_SUPPORT
566 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
567 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
569 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
570 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
571 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
572 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
573 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
574 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
575 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
576 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
577 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
578 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
579 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
580 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
583 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
585 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
586 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
587 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
589 #endif // DOT11_N_SUPPORT //
592 // MACRO for 32-bit PCI register read / write
594 // Usage : RTMP_IO_READ32(
595 // PRTMP_ADAPTER pAd,
596 // ULONG Register_Offset,
600 // PRTMP_ADAPTER pAd,
601 // ULONG Register_Offset,
606 // BBP & RF are using indirect access. Before write any value into it.
607 // We have to make sure there is no outstanding command pending via checking busy bit.
609 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
613 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
614 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
615 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
617 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
618 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
622 #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
623 #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
626 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
629 case 1: khz = 2412000; break; \
630 case 2: khz = 2417000; break; \
631 case 3: khz = 2422000; break; \
632 case 4: khz = 2427000; break; \
633 case 5: khz = 2432000; break; \
634 case 6: khz = 2437000; break; \
635 case 7: khz = 2442000; break; \
636 case 8: khz = 2447000; break; \
637 case 9: khz = 2452000; break; \
638 case 10: khz = 2457000; break; \
639 case 11: khz = 2462000; break; \
640 case 12: khz = 2467000; break; \
641 case 13: khz = 2472000; break; \
642 case 14: khz = 2484000; break; \
643 case 36: /* UNII */ khz = 5180000; break; \
644 case 40: /* UNII */ khz = 5200000; break; \
645 case 44: /* UNII */ khz = 5220000; break; \
646 case 48: /* UNII */ khz = 5240000; break; \
647 case 52: /* UNII */ khz = 5260000; break; \
648 case 56: /* UNII */ khz = 5280000; break; \
649 case 60: /* UNII */ khz = 5300000; break; \
650 case 64: /* UNII */ khz = 5320000; break; \
651 case 149: /* UNII */ khz = 5745000; break; \
652 case 153: /* UNII */ khz = 5765000; break; \
653 case 157: /* UNII */ khz = 5785000; break; \
654 case 161: /* UNII */ khz = 5805000; break; \
655 case 165: /* UNII */ khz = 5825000; break; \
656 case 100: /* HiperLAN2 */ khz = 5500000; break; \
657 case 104: /* HiperLAN2 */ khz = 5520000; break; \
658 case 108: /* HiperLAN2 */ khz = 5540000; break; \
659 case 112: /* HiperLAN2 */ khz = 5560000; break; \
660 case 116: /* HiperLAN2 */ khz = 5580000; break; \
661 case 120: /* HiperLAN2 */ khz = 5600000; break; \
662 case 124: /* HiperLAN2 */ khz = 5620000; break; \
663 case 128: /* HiperLAN2 */ khz = 5640000; break; \
664 case 132: /* HiperLAN2 */ khz = 5660000; break; \
665 case 136: /* HiperLAN2 */ khz = 5680000; break; \
666 case 140: /* HiperLAN2 */ khz = 5700000; break; \
667 case 34: /* Japan MMAC */ khz = 5170000; break; \
668 case 38: /* Japan MMAC */ khz = 5190000; break; \
669 case 42: /* Japan MMAC */ khz = 5210000; break; \
670 case 46: /* Japan MMAC */ khz = 5230000; break; \
671 case 184: /* Japan */ khz = 4920000; break; \
672 case 188: /* Japan */ khz = 4940000; break; \
673 case 192: /* Japan */ khz = 4960000; break; \
674 case 196: /* Japan */ khz = 4980000; break; \
675 case 208: /* Japan, means J08 */ khz = 5040000; break; \
676 case 212: /* Japan, means J12 */ khz = 5060000; break; \
677 case 216: /* Japan, means J16 */ khz = 5080000; break; \
678 default: khz = 2412000; break; \
682 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
685 case 2412000: ch = 1; break; \
686 case 2417000: ch = 2; break; \
687 case 2422000: ch = 3; break; \
688 case 2427000: ch = 4; break; \
689 case 2432000: ch = 5; break; \
690 case 2437000: ch = 6; break; \
691 case 2442000: ch = 7; break; \
692 case 2447000: ch = 8; break; \
693 case 2452000: ch = 9; break; \
694 case 2457000: ch = 10; break; \
695 case 2462000: ch = 11; break; \
696 case 2467000: ch = 12; break; \
697 case 2472000: ch = 13; break; \
698 case 2484000: ch = 14; break; \
699 case 5180000: ch = 36; /* UNII */ break; \
700 case 5200000: ch = 40; /* UNII */ break; \
701 case 5220000: ch = 44; /* UNII */ break; \
702 case 5240000: ch = 48; /* UNII */ break; \
703 case 5260000: ch = 52; /* UNII */ break; \
704 case 5280000: ch = 56; /* UNII */ break; \
705 case 5300000: ch = 60; /* UNII */ break; \
706 case 5320000: ch = 64; /* UNII */ break; \
707 case 5745000: ch = 149; /* UNII */ break; \
708 case 5765000: ch = 153; /* UNII */ break; \
709 case 5785000: ch = 157; /* UNII */ break; \
710 case 5805000: ch = 161; /* UNII */ break; \
711 case 5825000: ch = 165; /* UNII */ break; \
712 case 5500000: ch = 100; /* HiperLAN2 */ break; \
713 case 5520000: ch = 104; /* HiperLAN2 */ break; \
714 case 5540000: ch = 108; /* HiperLAN2 */ break; \
715 case 5560000: ch = 112; /* HiperLAN2 */ break; \
716 case 5580000: ch = 116; /* HiperLAN2 */ break; \
717 case 5600000: ch = 120; /* HiperLAN2 */ break; \
718 case 5620000: ch = 124; /* HiperLAN2 */ break; \
719 case 5640000: ch = 128; /* HiperLAN2 */ break; \
720 case 5660000: ch = 132; /* HiperLAN2 */ break; \
721 case 5680000: ch = 136; /* HiperLAN2 */ break; \
722 case 5700000: ch = 140; /* HiperLAN2 */ break; \
723 case 5170000: ch = 34; /* Japan MMAC */ break; \
724 case 5190000: ch = 38; /* Japan MMAC */ break; \
725 case 5210000: ch = 42; /* Japan MMAC */ break; \
726 case 5230000: ch = 46; /* Japan MMAC */ break; \
727 case 4920000: ch = 184; /* Japan */ break; \
728 case 4940000: ch = 188; /* Japan */ break; \
729 case 4960000: ch = 192; /* Japan */ break; \
730 case 4980000: ch = 196; /* Japan */ break; \
731 case 5040000: ch = 208; /* Japan, means J08 */ break; \
732 case 5060000: ch = 212; /* Japan, means J12 */ break; \
733 case 5080000: ch = 216; /* Japan, means J16 */ break; \
734 default: ch = 1; break; \
739 // Common fragment list structure - Identical to the scatter gather frag list structure
741 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
742 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
743 #define NIC_MAX_PHYS_BUF_COUNT 8
745 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
749 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
752 typedef struct _RTMP_SCATTER_GATHER_LIST {
753 ULONG NumberOfElements;
755 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
756 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
759 // Some utility macros
762 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
766 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
769 #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))))
771 #define INC_COUNTER64(Val) (Val.QuadPart++)
773 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
774 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
775 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
776 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
778 // Check LEAP & CCKM flags
779 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
780 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
782 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
783 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
785 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
787 _pExtraLlcSnapEncap = SNAP_802_1H; \
788 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
789 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
791 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
796 _pExtraLlcSnapEncap = NULL; \
800 // New Define for new Tx Path.
801 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
803 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
805 _pExtraLlcSnapEncap = SNAP_802_1H; \
806 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
807 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
809 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
814 _pExtraLlcSnapEncap = NULL; \
819 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
821 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
822 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
823 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
826 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
827 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
828 // else remove the LLC/SNAP field from the result Ethernet frame
829 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
831 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
832 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
833 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
837 _pRemovedLLCSNAP = NULL; \
838 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
839 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
841 PUCHAR pProto = _pData + 6; \
843 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
844 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
846 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
847 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
848 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
852 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
853 _pRemovedLLCSNAP = _pData; \
854 _DataSize -= LENGTH_802_1_H; \
855 _pData += LENGTH_802_1_H; \
860 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
861 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
862 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
866 #define SWITCH_AB( _pAA, _pBB) \
874 // Enqueue this frame to MLME engine
875 // We need to enqueue the whole frame because MLME need to pass data type
876 // information from 802.11 header
878 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
880 UINT32 High32TSF=0, Low32TSF=0; \
881 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
886 //Need to collect each ant's rssi concurrently
887 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
888 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
892 if (_pAd->RxAnt.EvaluatePeriod == 0) \
894 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
895 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
897 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
899 AvgRssi = _rssi1 << 3; \
900 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
904 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
905 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
906 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
907 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
910 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
911 AvgRssi = _rssi1 << 3; \
913 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
914 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
920 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
921 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
923 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
924 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
927 // Check if it is Japan W53(ch52,56,60,64) channel.
929 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
931 #ifdef CONFIG_STA_SUPPORT
932 #define STA_PORT_SECURED(_pAd) \
934 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
935 NdisAcquireSpinLock(&_pAd->MacTabLock); \
936 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
937 NdisReleaseSpinLock(&_pAd->MacTabLock); \
939 #endif // CONFIG_STA_SUPPORT //
943 // Register set pair for initialzation register set definition
945 typedef struct _RTMP_REG_PAIR
949 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
951 typedef struct _REG_PAIR
955 } REG_PAIR, *PREG_PAIR;
958 // Register set pair for initialzation register set definition
960 typedef struct _RTMP_RF_REGS
967 } RTMP_RF_REGS, *PRTMP_RF_REGS;
969 typedef struct _FREQUENCY_ITEM {
974 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
977 // Data buffer for DMA operation, the buffer must be contiguous physical memory
978 // Both DMA to / from CPU use the same structure.
980 typedef struct _RTMP_DMABUF
983 PVOID AllocVa; // TxBuf virtual address
984 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
985 } RTMP_DMABUF, *PRTMP_DMABUF;
988 typedef union _HEADER_802_11_SEQ{
1001 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
1004 // Data buffer for DMA operation, the buffer must be contiguous physical memory
1005 // Both DMA to / from CPU use the same structure.
1007 typedef struct _RTMP_REORDERBUF
1010 PVOID AllocVa; // TxBuf virtual address
1011 UCHAR Header802_3[14];
1012 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
1019 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1022 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1023 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1024 // which won't be released, driver has to wait until upper layer return the packet
1025 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1026 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1027 // which driver should ACK upper layer when the tx is physically done or failed.
1029 typedef struct _RTMP_DMACB
1031 ULONG AllocSize; // Control block size
1032 PVOID AllocVa; // Control block virtual address
1033 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1034 PNDIS_PACKET pNdisPacket;
1035 PNDIS_PACKET pNextNdisPacket;
1037 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1038 } RTMP_DMACB, *PRTMP_DMACB;
1040 typedef struct _RTMP_TX_BUF
1044 ULONG AllocSize; // Control block size
1045 PVOID AllocVa; // Control block virtual address
1046 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1047 } RTMP_TXBUF, *PRTMP_TXBUF;
1049 typedef struct _RTMP_RX_BUF
1053 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1054 } RTMP_RXBUF, *PRTMP_RXBUF;
1055 typedef struct _RTMP_TX_RING
1057 RTMP_DMACB Cell[TX_RING_SIZE];
1060 UINT32 TxSwFreeIdx; // software next free tx index
1061 } RTMP_TX_RING, *PRTMP_TX_RING;
1063 typedef struct _RTMP_RX_RING
1065 RTMP_DMACB Cell[RX_RING_SIZE];
1068 INT32 RxSwReadIdx; // software next read index
1069 } RTMP_RX_RING, *PRTMP_RX_RING;
1071 typedef struct _RTMP_MGMT_RING
1073 RTMP_DMACB Cell[MGMT_RING_SIZE];
1076 UINT32 TxSwFreeIdx; // software next free tx index
1077 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1080 // Statistic counter structure
1082 typedef struct _COUNTER_802_3
1085 ULONG GoodTransmits;
1092 ULONG RcvAlignmentErrors;
1094 ULONG MoreCollisions;
1096 } COUNTER_802_3, *PCOUNTER_802_3;
1098 typedef struct _COUNTER_802_11 {
1100 LARGE_INTEGER LastTransmittedFragmentCount;
1101 LARGE_INTEGER TransmittedFragmentCount;
1102 LARGE_INTEGER MulticastTransmittedFrameCount;
1103 LARGE_INTEGER FailedCount;
1104 LARGE_INTEGER RetryCount;
1105 LARGE_INTEGER MultipleRetryCount;
1106 LARGE_INTEGER RTSSuccessCount;
1107 LARGE_INTEGER RTSFailureCount;
1108 LARGE_INTEGER ACKFailureCount;
1109 LARGE_INTEGER FrameDuplicateCount;
1110 LARGE_INTEGER ReceivedFragmentCount;
1111 LARGE_INTEGER MulticastReceivedFrameCount;
1112 LARGE_INTEGER FCSErrorCount;
1113 } COUNTER_802_11, *PCOUNTER_802_11;
1115 typedef struct _COUNTER_RALINK {
1116 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1117 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1118 ULONG BeenDisassociatedCount;
1119 ULONG BadCQIAutoRecoveryCount;
1120 ULONG PoorCQIRoamingCount;
1121 ULONG MgmtRingFullCount;
1122 ULONG RxCountSinceLastNULL;
1124 ULONG RxRingErrCount;
1126 ULONG TxRingErrCount;
1127 LARGE_INTEGER RealFcsErrCount;
1128 ULONG PendingNdisPacketCount;
1130 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1131 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1132 UINT32 OneSecTxDoneCount;
1133 ULONG OneSecRxCount;
1134 UINT32 OneSecTxAggregationCount;
1135 UINT32 OneSecRxAggregationCount;
1137 UINT32 OneSecFrameDuplicateCount;
1140 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1143 UINT32 OneSecTxNoRetryOkCount;
1144 UINT32 OneSecTxRetryOkCount;
1145 UINT32 OneSecTxFailCount;
1146 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1147 UINT32 OneSecRxOkCnt; // RX without error
1148 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1149 UINT32 OneSecRxFcsErrCnt; // CRC error
1150 UINT32 OneSecBeaconSentCnt;
1151 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1152 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1155 ULONG TxNonAggCount;
1156 ULONG TxAgg1MPDUCount;
1157 ULONG TxAgg2MPDUCount;
1158 ULONG TxAgg3MPDUCount;
1159 ULONG TxAgg4MPDUCount;
1160 ULONG TxAgg5MPDUCount;
1161 ULONG TxAgg6MPDUCount;
1162 ULONG TxAgg7MPDUCount;
1163 ULONG TxAgg8MPDUCount;
1164 ULONG TxAgg9MPDUCount;
1165 ULONG TxAgg10MPDUCount;
1166 ULONG TxAgg11MPDUCount;
1167 ULONG TxAgg12MPDUCount;
1168 ULONG TxAgg13MPDUCount;
1169 ULONG TxAgg14MPDUCount;
1170 ULONG TxAgg15MPDUCount;
1171 ULONG TxAgg16MPDUCount;
1173 LARGE_INTEGER TransmittedOctetsInAMSDU;
1174 LARGE_INTEGER TransmittedAMSDUCount;
1175 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1176 LARGE_INTEGER ReceivedAMSDUCount;
1177 LARGE_INTEGER TransmittedAMPDUCount;
1178 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1179 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1180 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1181 } COUNTER_RALINK, *PCOUNTER_RALINK;
1183 typedef struct _PID_COUNTER {
1184 ULONG TxAckRequiredCount; // CRC error
1186 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1187 ULONG LastSuccessRate;
1188 } PID_COUNTER, *PPID_COUNTER;
1190 typedef struct _COUNTER_DRS {
1191 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1192 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1193 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1194 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1195 ULONG CurrTxRateStableTime; // # of second in current TX rate
1196 BOOLEAN fNoisyEnvironment;
1197 BOOLEAN fLastSecAccordingRSSI;
1198 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1199 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1200 ULONG LastTxOkCount;
1201 } COUNTER_DRS, *PCOUNTER_DRS;
1204 // Arcfour Structure Added by PaulWu
1206 typedef struct _ARCFOUR
1211 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1213 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1214 typedef struct _RECEIVE_SETTING {
1215 #ifdef RT_BIG_ENDIAN
1219 USHORT STBC:2; //SPACE
1221 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1222 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1224 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1225 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1227 USHORT STBC:2; //SPACE
1232 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1234 // Shared key data structure
1235 typedef struct _WEP_KEY {
1236 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1237 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1238 } WEP_KEY, *PWEP_KEY;
1240 typedef struct _CIPHER_KEY {
1241 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1242 UCHAR RxMic[8]; // make alignment
1244 UCHAR TxTsc[6]; // 48bit TSC value
1245 UCHAR RxTsc[6]; // 48bit TSC value
1246 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1248 #ifdef CONFIG_STA_SUPPORT
1250 #endif // CONFIG_STA_SUPPORT //
1251 // Key length for each key, 0: entry is invalid
1252 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1253 } CIPHER_KEY, *PCIPHER_KEY;
1255 typedef struct _BBP_TUNING_STRUCT {
1257 UCHAR FalseCcaCountUpperBound; // 100 per sec
1258 UCHAR FalseCcaCountLowerBound; // 10 per sec
1259 UCHAR R17LowerBound; // specified in E2PROM
1260 UCHAR R17UpperBound; // 0x68 according to David Tung
1261 UCHAR CurrentR17Value;
1262 } BBP_TUNING, *PBBP_TUNING;
1264 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1265 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1266 UCHAR EvaluateStableCnt;
1267 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1268 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1269 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1270 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1271 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1272 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1273 SHORT Pair1LastAvgRssi; //
1274 SHORT Pair2LastAvgRssi; //
1275 ULONG RcvPktNumWhenEvaluate;
1276 BOOLEAN FirstPktArrivedWhenEvaluate;
1277 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1278 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1280 typedef struct _LEAP_AUTH_INFO {
1281 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1282 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1284 UCHAR UserName[256]; //LEAP, User name
1286 UCHAR Password[256]; //LEAP, User Password
1288 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1291 UCHAR Addr[MAC_ADDR_LEN];
1292 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1293 //00 02-Authentication timeout
1294 //00 03-Challenge from AP failed
1295 //00 04-Challenge to AP failed
1297 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1301 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1302 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1308 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1311 // Receive Tuple Cache Format
1313 typedef struct _TUPLE_CACHE {
1315 UCHAR MacAddress[MAC_ADDR_LEN];
1318 } TUPLE_CACHE, *PTUPLE_CACHE;
1321 // Fragment Frame structure
1323 typedef struct _FRAGMENT_FRAME {
1324 PNDIS_PACKET pFragPacket;
1328 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1329 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1333 // Packet information for NdisQueryPacket
1335 typedef struct _PACKET_INFO {
1336 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1337 UINT BufferCount ; // Number of Buffer descriptor chained
1338 UINT TotalPacketLength ; // Self explained
1339 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1340 } PACKET_INFO, *PPACKET_INFO;
1343 // Tkip Key structure which RC4 key & MIC calculation
1345 typedef struct _TKIP_KEY_INFO {
1346 UINT nBytesInM; // # bytes in M for MICKEY
1349 ULONG K0; // for MICKEY Low
1350 ULONG K1; // for MICKEY Hig
1351 ULONG L; // Current state for MICKEY
1352 ULONG R; // Current state for MICKEY
1353 ULONG M; // Message accumulator for MICKEY
1356 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1359 // Private / Misc data, counters for driver internal use
1361 typedef struct __PRIVATE_STRUC {
1362 UINT SystemResetCnt; // System reset counter
1363 UINT TxRingFullCnt; // Tx ring full occurrance number
1364 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1365 // Variables for WEP encryption / decryption in rtmp_wep.c
1367 ARCFOURCONTEXT WEPCONTEXT;
1371 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1373 // structure to tune BBP R66 (BBP TUNING)
1374 typedef struct _BBP_R66_TUNING {
1376 USHORT FalseCcaLowerThreshold; // default 100
1377 USHORT FalseCcaUpperThreshold; // default 512
1379 UCHAR R66CurrentValue;
1380 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1381 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1383 // structure to store channel TX power
1384 typedef struct _CHANNEL_TX_POWER {
1385 USHORT RemainingTimeForUse; //unit: sec
1387 #ifdef DOT11N_DRAFT3
1388 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1389 #endif // DOT11N_DRAFT3 //
1394 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1396 // structure to store 802.11j channel TX power
1397 typedef struct _CHANNEL_11J_TX_POWER {
1399 UCHAR BW; // BW_10 or BW_20
1402 USHORT RemainingTimeForUse; //unit: sec
1403 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1405 typedef enum _ABGBAND_STATE_ {
1411 typedef struct _MLME_STRUCT {
1412 #ifdef CONFIG_STA_SUPPORT
1413 // STA state machines
1414 STATE_MACHINE CntlMachine;
1415 STATE_MACHINE AssocMachine;
1416 STATE_MACHINE AuthMachine;
1417 STATE_MACHINE AuthRspMachine;
1418 STATE_MACHINE SyncMachine;
1419 STATE_MACHINE WpaPskMachine;
1420 STATE_MACHINE LeapMachine;
1421 STATE_MACHINE AironetMachine;
1422 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1423 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1424 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1425 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1426 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1427 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1428 #endif // CONFIG_STA_SUPPORT //
1429 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1431 STATE_MACHINE ActMachine;
1434 #ifdef QOS_DLS_SUPPORT
1435 STATE_MACHINE DlsMachine;
1436 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1437 #endif // QOS_DLS_SUPPORT //
1442 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1443 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1444 ULONG LastSendNULLpsmTime;
1447 NDIS_SPIN_LOCK TaskLock;
1452 RALINK_TIMER_STRUCT PeriodicTimer;
1453 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1454 RALINK_TIMER_STRUCT LinkDownTimer;
1455 RALINK_TIMER_STRUCT LinkUpTimer;
1456 ULONG PeriodicRound;
1457 ULONG OneSecPeriodicRound;
1460 BOOLEAN bLowThroughput;
1461 BOOLEAN bEnableAutoAntennaCheck;
1462 RALINK_TIMER_STRUCT RxAntEvalTimer;
1465 UCHAR CaliBW40RfR24;
1466 UCHAR CaliBW20RfR24;
1469 } MLME_STRUCT, *PMLME_STRUCT;
1471 // structure for radar detection and channel switch
1472 typedef struct _RADAR_DETECT_STRUCT {
1473 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1474 UCHAR CSCount; //Channel switch counter
1475 UCHAR CSPeriod; //Channel switch period (beacon count)
1476 UCHAR RDCount; //Radar detection counter
1477 UCHAR RDMode; //Radar Detection mode
1478 UCHAR RDDurRegion; //Radar detection duration region
1485 ULONG InServiceMonitorCount; // unit: sec
1486 UINT8 DfsSessionTime;
1489 UINT8 LongPulseRadarTh;
1490 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1492 #ifdef CARRIER_DETECTION_SUPPORT
1493 typedef enum CD_STATE_n
1500 typedef struct CARRIER_DETECTION_s
1503 UINT8 CDSessionTime;
1506 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1507 #endif // CARRIER_DETECTION_SUPPORT //
1509 typedef enum _REC_BLOCKACK_STATUS
1513 Recipient_HandleRes,
1515 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1517 typedef enum _ORI_BLOCKACK_STATUS
1523 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1525 #ifdef DOT11_N_SUPPORT
1526 typedef struct _BA_ORI_ENTRY{
1531 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1533 USHORT TimeOutValue;
1534 ORI_BLOCKACK_STATUS ORI_BA_Status;
1535 RALINK_TIMER_STRUCT ORIBATimer;
1537 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1539 typedef struct _BA_REC_ENTRY {
1542 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1544 //UCHAR Curindidx; // the head in the RX reordering buffer
1546 // USHORT LastIndSeqAtTimer;
1547 USHORT TimeOutValue;
1548 RALINK_TIMER_STRUCT RECBATimer;
1549 ULONG LastIndSeqAtTimer;
1552 REC_BLOCKACK_STATUS REC_BA_Status;
1553 // UCHAR RxBufIdxUsed;
1554 // corresponding virtual address for RX reordering packet storage.
1555 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1556 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1557 // struct _BA_REC_ENTRY *pNext;
1559 struct reordering_list list;
1560 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1564 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1565 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1566 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1567 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1568 } BA_TABLE, *PBA_TABLE;
1570 //For QureyBATableOID use;
1571 typedef struct PACKED _OID_BA_REC_ENTRY{
1572 UCHAR MACAddr[MAC_ADDR_LEN];
1573 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1576 REC_BLOCKACK_STATUS REC_BA_Status[8];
1577 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1579 //For QureyBATableOID use;
1580 typedef struct PACKED _OID_BA_ORI_ENTRY{
1581 UCHAR MACAddr[MAC_ADDR_LEN];
1582 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
1585 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1586 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1588 typedef struct _QUERYBA_TABLE{
1589 OID_BA_ORI_ENTRY BAOriEntry[32];
1590 OID_BA_REC_ENTRY BARecEntry[32];
1591 UCHAR OriNum;// Number of below BAOriEntry
1592 UCHAR RecNum;// Number of below BARecEntry
1593 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1595 typedef union _BACAP_STRUC {
1596 #ifdef RT_BIG_ENDIAN
1599 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.
1600 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1601 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1602 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1603 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1604 UINT32 MpduDensity:3;
1605 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1606 UINT32 AutoBA:1; // automatically BA
1607 UINT32 TxBAWinLimit:8;
1608 UINT32 RxBAWinLimit:8;
1612 UINT32 RxBAWinLimit:8;
1613 UINT32 TxBAWinLimit:8;
1614 UINT32 AutoBA:1; // automatically BA
1615 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1616 UINT32 MpduDensity:3;
1617 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1618 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1619 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1620 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1621 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.
1626 } BACAP_STRUC, *PBACAP_STRUC;
1627 #endif // DOT11_N_SUPPORT //
1629 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1630 typedef struct _IOT_STRUC {
1632 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1633 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1634 ULONG OneSecInWindowCount;
1635 ULONG OneSecFrameDuplicateCount;
1636 ULONG OneSecOutWindowCount;
1641 BOOLEAN bRTSLongProtOn;
1642 #ifdef CONFIG_STA_SUPPORT
1643 BOOLEAN bLastAtheros;
1644 BOOLEAN bCurrentAtheros;
1645 BOOLEAN bNowAtherosBurstOn;
1646 BOOLEAN bNextDisableRxBA;
1648 #endif // CONFIG_STA_SUPPORT //
1649 } IOT_STRUC, *PIOT_STRUC;
1651 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1652 typedef union _REG_TRANSMIT_SETTING {
1653 #ifdef RT_BIG_ENDIAN
1659 UINT32 STBC:1; //SPACE
1661 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1662 UINT32 TxBF:1; // 3*3
1664 //UINT32 MCS:7; // MCS
1670 //UINT32 MCS:7; // MCS
1673 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1675 UINT32 STBC:1; //SPACE
1683 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1685 typedef union _DESIRED_TRANSMIT_SETTING {
1686 #ifdef RT_BIG_ENDIAN
1689 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1691 USHORT MCS:7; // MCS
1695 USHORT MCS:7; // MCS
1697 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1702 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1705 BOOLEAN IsRecipient;
1706 UCHAR MACAddr[MAC_ADDR_LEN];
1710 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1711 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1714 // Multiple SSID structure
1716 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1717 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1719 /* clear bcmc TIM bit */
1720 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1721 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1723 /* set bcmc TIM bit */
1724 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1725 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1727 /* clear a station PS TIM bit */
1728 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1729 { UCHAR tim_offset = wcid >> 3; \
1730 UCHAR bit_offset = wcid & 0x7; \
1731 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1733 /* set a station PS TIM bit */
1734 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1735 { UCHAR tim_offset = wcid >> 3; \
1736 UCHAR bit_offset = wcid & 0x7; \
1737 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1740 #define BEACON_BITMAP_MASK 0xff
1741 typedef struct _BEACON_SYNC_STRUCT_
1743 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1744 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1745 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1746 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1747 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1748 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1749 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1750 }BEACON_SYNC_STRUCT;
1753 typedef struct _MULTISSID_STRUCT {
1754 UCHAR Bssid[MAC_ADDR_LEN];
1756 CHAR Ssid[MAX_LEN_OF_SSID];
1757 USHORT CapabilityInfo;
1761 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1762 NDIS_802_11_WEP_STATUS WepStatus;
1763 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1764 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1768 ULONG ReceivedByteCount;
1769 ULONG TransmittedByteCount;
1773 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1774 RT_HT_PHY_INFO DesiredHtPhyInfo;
1775 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1776 BOOLEAN bAutoTxRateSwitch;
1778 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1781 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1782 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1783 UCHAR DesiredRatesIndex;
1784 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1786 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1787 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1788 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1798 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1799 UCHAR BANClass3Data;
1800 ULONG IsolateInterStaTraffic;
1803 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1806 UCHAR TimIELocationInBeacon;
1807 UCHAR CapabilityInfoLocationInBeacon;
1808 // outgoing BEACON frame buffer and corresponding TXWI
1809 // PTXWI_STRUC BeaconTxWI; //
1810 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1813 UINT16 StationKeepAliveTime; // unit: second
1816 USHORT VLAN_Priority;
1818 RT_802_11_ACL AccessControlList;
1821 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1822 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1824 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1826 // For 802.1x daemon setting per BSS
1827 UCHAR radius_srv_num;
1828 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1831 unsigned int mylinkid;
1835 UINT32 RcvdConflictSsidCount;
1836 UINT32 RcvdSpoofedAssocRespCount;
1837 UINT32 RcvdSpoofedReassocRespCount;
1838 UINT32 RcvdSpoofedProbeRespCount;
1839 UINT32 RcvdSpoofedBeaconCount;
1840 UINT32 RcvdSpoofedDisassocCount;
1841 UINT32 RcvdSpoofedAuthCount;
1842 UINT32 RcvdSpoofedDeauthCount;
1843 UINT32 RcvdSpoofedUnknownMgmtCount;
1844 UINT32 RcvdReplayAttackCount;
1846 CHAR RssiOfRcvdConflictSsid;
1847 CHAR RssiOfRcvdSpoofedAssocResp;
1848 CHAR RssiOfRcvdSpoofedReassocResp;
1849 CHAR RssiOfRcvdSpoofedProbeResp;
1850 CHAR RssiOfRcvdSpoofedBeacon;
1851 CHAR RssiOfRcvdSpoofedDisassoc;
1852 CHAR RssiOfRcvdSpoofedAuth;
1853 CHAR RssiOfRcvdSpoofedDeauth;
1854 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1855 CHAR RssiOfRcvdReplayAttack;
1859 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1863 #ifdef DOT11N_DRAFT3
1864 typedef enum _BSS2040COEXIST_FLAG{
1865 BSS_2040_COEXIST_DISABLE = 0,
1866 BSS_2040_COEXIST_TIMER_FIRED = 1,
1867 BSS_2040_COEXIST_INFO_SYNC = 2,
1868 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1869 }BSS2040COEXIST_FLAG;
1870 #endif // DOT11N_DRAFT3 //
1872 // configuration common to OPMODE_AP as well as OPMODE_STA
1873 typedef struct _COMMON_CONFIG {
1875 BOOLEAN bCountryFlag;
1876 UCHAR CountryCode[3];
1878 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1879 UCHAR CountryRegionForABand; // Enum of country region for A band
1880 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1881 USHORT Dsifs; // in units of usec
1882 ULONG PacketFilter; // Packet filter for receiving
1884 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1885 UCHAR SsidLen; // the actual ssid length in used
1886 UCHAR LastSsidLen; // the actual ssid length in used
1887 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1888 UCHAR LastBssid[MAC_ADDR_LEN];
1890 UCHAR Bssid[MAC_ADDR_LEN];
1891 USHORT BeaconPeriod;
1893 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1895 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1897 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1899 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1900 UCHAR MaxDesiredRate;
1901 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1903 ULONG BasicRateBitmap; // backup basic ratebitmap
1905 BOOLEAN bAPSDCapable;
1906 BOOLEAN bInServicePeriod;
1911 BOOLEAN bNeedSendTriggerFrame;
1912 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1913 ULONG TriggerTimerCount;
1915 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1916 // move to MULTISSID_STRUCT for MBSS
1917 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1918 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1919 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1920 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1921 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1922 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1923 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1924 //BOOLEAN bAutoTxRateSwitch;
1925 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1926 UCHAR RtsRate; // RATE_xxx
1927 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1928 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1929 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1931 USHORT RtsThreshold; // in unit of BYTE
1932 USHORT FragmentThreshold; // in unit of BYTE
1934 UCHAR TxPower; // in unit of mW
1935 ULONG TxPowerPercentage; // 0~100 %
1936 ULONG TxPowerDefault; // keep for TxPowerPercentage
1938 #ifdef DOT11_N_SUPPORT
1939 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1940 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1941 #endif // DOT11_N_SUPPORT //
1942 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1943 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1944 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1945 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1946 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1947 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1948 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1949 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1950 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1951 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1953 #ifdef DOT11_N_SUPPORT
1955 #endif // DOT11_N_SUPPORT //
1956 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1957 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1958 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1959 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1960 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1961 #ifdef CONFIG_STA_SUPPORT
1962 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1963 #endif // CONFIG_STA_SUPPORT //
1964 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1965 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1966 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1967 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1968 ULONG OpStatusFlags;
1970 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1971 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1972 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1974 // IEEE802.11H--DFS.
1975 RADAR_DETECT_STRUCT RadarDetect;
1977 #ifdef CARRIER_DETECTION_SUPPORT
1978 CARRIER_DETECTION CarrierDetect;
1979 #endif // CARRIER_DETECTION_SUPPORT //
1981 #ifdef DOT11_N_SUPPORT
1983 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1984 //RT_HT_CAPABILITY SupportedHtPhy;
1985 RT_HT_CAPABILITY DesiredHtPhy;
1986 HT_CAPABILITY_IE HtCapability;
1987 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1988 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1989 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1990 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
1992 #ifdef DOT11N_DRAFT3
1993 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1994 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1996 //This IE is used for 20/40 BSS Coexistence.
1997 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1998 // ====== 11n D3.0 =======================>
1999 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
2000 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
2001 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
2002 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
2003 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
2004 USHORT Dot11BssWidthChanTranDelayFactor;
2005 USHORT Dot11OBssScanActivityThre; // Unit : percentage
2007 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
2008 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
2010 NDIS_SPIN_LOCK TriggerEventTabLock;
2011 BSS_2040_COEXIST_IE LastBSSCoexist2040;
2012 BSS_2040_COEXIST_IE BSSCoexist2040;
2013 TRIGGER_EVENT_TAB TriggerEventTab;
2014 UCHAR ChannelListIdx;
2015 // <====== 11n D3.0 =======================
2016 BOOLEAN bOverlapScanning;
2017 #endif // DOT11N_DRAFT3 //
2020 BOOLEAN bMIMOPSEnable;
2022 BOOLEAN bDisableReordering;
2023 BOOLEAN bForty_Mhz_Intolerant;
2024 BOOLEAN bExtChannelSwitchAnnouncement;
2025 BOOLEAN bRcvBSSWidthTriggerEvents;
2026 ULONG LastRcvBSSWidthTriggerEventsTime;
2029 #endif // DOT11_N_SUPPORT //
2031 // Enable wireless event
2032 BOOLEAN bWirelessEvent;
2033 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
2035 // Tx & Rx Stream number selection
2039 // transmit phy mode, trasmit rate for Multicast.
2040 #ifdef MCAST_RATE_SPECIFIC
2041 UCHAR McastTransmitMcs;
2042 UCHAR McastTransmitPhyMode;
2043 #endif // MCAST_RATE_SPECIFIC //
2045 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2048 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
2049 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
2050 RT_HT_CAPABILITY SupportedHtPhy;
2051 ULONG MaxPktOneTxBulk;
2055 BEACON_SYNC_STRUCT *pBeaconSync;
2056 RALINK_TIMER_STRUCT BeaconUpdateTimer;
2057 UINT32 BeaconAdjust;
2058 UINT32 BeaconFactor;
2059 UINT32 BeaconRemain;
2063 NDIS_SPIN_LOCK MeasureReqTabLock;
2064 PMEASURE_REQ_TAB pMeasureReqTab;
2066 NDIS_SPIN_LOCK TpcReqTabLock;
2067 PTPC_REQ_TAB pTpcReqTab;
2069 // transmit phy mode, trasmit rate for Multicast.
2070 #ifdef MCAST_RATE_SPECIFIC
2071 HTTRANSMIT_SETTING MCastPhyMode;
2072 #endif // MCAST_RATE_SPECIFIC //
2075 UINT16 DefineMaxTxPwr;
2076 #endif // SINGLE_SKU //
2079 } COMMON_CONFIG, *PCOMMON_CONFIG;
2082 #ifdef CONFIG_STA_SUPPORT
2083 /* Modified by Wu Xi-Kun 4/21/2006 */
2084 // STA configuration and status
2085 typedef struct _STA_ADMIN_CONFIG {
2087 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2088 // the user intended configuration, but not necessary fully equal to the final
2089 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2090 // AP or IBSS holder).
2091 // Once initialized, user configuration can only be changed via OID_xxx
2092 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
2093 USHORT AtimWin; // used when starting a new IBSS
2096 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2097 // the user intended configuration, and should be always applied to the final
2098 // settings in ACTIVE BSS without compromising with the BSS holder.
2099 // Once initialized, user configuration can only be changed via OID_xxx
2101 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2102 USHORT DefaultListenCount; // default listen count;
2103 ULONG WindowsPowerMode; // Power mode for AC power
2104 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2105 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2106 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2107 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2109 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2110 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2111 USHORT DisassocReason;
2112 UCHAR DisassocSta[MAC_ADDR_LEN];
2113 USHORT DeauthReason;
2114 UCHAR DeauthSta[MAC_ADDR_LEN];
2115 USHORT AuthFailReason;
2116 UCHAR AuthFailSta[MAC_ADDR_LEN];
2118 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2119 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2120 NDIS_802_11_WEP_STATUS WepStatus;
2121 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2123 // Add to support different cipher suite for WPA2/WPA mode
2124 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2125 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2126 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2127 USHORT RsnCapability;
2129 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2131 UCHAR PMK[32]; // WPA PSK mode PMK
2132 UCHAR PTK[64]; // WPA PSK mode PTK
2133 UCHAR GTK[32]; // GTK from authenticator
2134 BSSID_INFO SavedPMK[PMKID_NO];
2135 UINT SavedPMKNum; // Saved PMKID number
2140 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2143 // For WPA countermeasures
2144 ULONG LastMicErrorTime; // record last MIC error time
2145 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2146 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2147 // For WPA-PSK supplicant state
2148 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2149 UCHAR ReplayCounter[8];
2150 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2151 UCHAR SNonce[32]; // SNonce for WPA-PSK
2153 UCHAR LastSNR0; // last received BEACON's SNR
2154 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2155 RSSI_SAMPLE RssiSample;
2156 ULONG NumOfAvgRssiSample;
2158 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2159 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2160 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2161 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2163 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2164 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2165 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2166 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2167 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2168 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2169 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2171 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2172 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2173 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2175 // New for WPA, windows want us to to keep association information and
2176 // Fixed IEs from last association response
2177 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2178 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2179 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2180 USHORT ResVarIELen; // Length of next VIE include EID & Length
2181 UCHAR ResVarIEs[MAX_VIE_LEN];
2184 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2186 // New variables used for CCX 1.0
2188 BOOLEAN bCkipCmicOn;
2190 UCHAR GIV[3]; //for CCX iv
2195 LEAP_AUTH_INFO LeapAuthInfo;
2197 UCHAR NetworkChallenge[8];
2198 UCHAR NetworkChallengeResponse[24];
2199 UCHAR PeerChallenge[8];
2201 UCHAR PeerChallengeResponse[24];
2202 UCHAR SessionKey[16]; //Network session keys (NSK)
2203 RALINK_TIMER_STRUCT LeapAuthTimer;
2204 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2206 // New control flags for CCX
2207 CCX_CONTROL CCXControl; // Master administration state
2208 BOOLEAN CCXEnable; // Actual CCX state
2209 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2210 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2211 UCHAR CCXReqType; // Current processing CCX request type
2212 BSS_TABLE CCXBssTab; // BSS Table
2213 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2214 USHORT FrameReportLen; // Current Frame report length
2215 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2216 USHORT RPIDensity[8]; // Array for RPI density collection
2217 // Start address of each BSS table within FrameReportBuf
2218 // It's important to update the RxPower of the corresponding Bss
2219 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2220 USHORT BeaconToken; // Token for beacon report
2221 ULONG LastBssIndex; // Most current reported Bss index
2222 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2223 UCHAR RMReqCnt; // Number of measurement request saved.
2224 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2225 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2226 // It must be the same channel with maximum duration
2227 USHORT ParallelDuration; // Maximum duration for parallel measurement
2228 UCHAR ParallelChannel; // Only one channel with parallel measurement
2229 USHORT IAPPToken; // IAPP dialog token
2230 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2231 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2232 // Hack for channel load and noise histogram parameters
2233 UCHAR NHFactor; // Parameter for Noise histogram
2234 UCHAR CLFactor; // Parameter for channel load
2236 UCHAR KRK[16]; //Key Refresh Key.
2237 UCHAR BTK[32]; //Base Transient Key
2238 BOOLEAN CCKMLinkUpFlag;
2239 ULONG CCKMRN; //(Re)Association request number.
2240 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2241 UCHAR AironetCellPowerLimit; //in dBm
2242 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2243 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2244 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2245 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2246 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2247 USHORT CCXAdjacentAPChannel;
2248 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2250 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2251 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2253 UCHAR DtimCount; // 0.. DtimPeriod-1
2254 UCHAR DtimPeriod; // default = 3
2256 #ifdef QOS_DLS_SUPPORT
2257 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2258 UCHAR DlsReplayCounter[8];
2259 #endif // QOS_DLS_SUPPORT //
2260 ////////////////////////////////////////////////////////////////////////////////////////
2261 // This is only for WHQL test.
2263 ////////////////////////////////////////////////////////////////////////////////////////
2265 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2267 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2268 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2270 #ifdef WPA_SUPPLICANT_SUPPORT
2272 BOOLEAN IEEE8021x_required_keys;
2273 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2274 UCHAR DesireSharedKeyId;
2276 // 0: driver ignores wpa_supplicant
2277 // 1: wpa_supplicant initiates scanning and AP selection
2278 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2279 UCHAR WpaSupplicantUP;
2280 UCHAR WpaSupplicantScanCount;
2281 #endif // WPA_SUPPLICANT_SUPPORT //
2286 BOOLEAN bTGnWifiTest;
2287 BOOLEAN bScanReqIsFromWebUI;
2289 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2290 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2291 RT_HT_PHY_INFO DesiredHtPhyInfo;
2292 BOOLEAN bAutoTxRateSwitch;
2295 #ifdef EXT_BUILD_CHANNEL_LIST
2296 UCHAR IEEE80211dClientMode;
2297 UCHAR StaOriCountryCode[3];
2298 UCHAR StaOriGeography;
2299 #endif // EXT_BUILD_CHANNEL_LIST //
2300 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2302 // This data structure keep the current active BSS/IBSS's configuration that this STA
2303 // had agreed upon joining the network. Which means these parameters are usually decided
2304 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2305 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2306 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2307 // the current active settings.
2308 typedef struct _STA_ACTIVE_CONFIG {
2310 USHORT AtimWin; // in kusec; IBSS parameter set element
2311 USHORT CapabilityInfo;
2312 USHORT CfpMaxDuration;
2315 // Copy supported rate from desired AP's beacon. We are trying to match
2316 // AP's supported and extended rate settings.
2317 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2318 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2321 // Copy supported ht from desired AP's beacon. We are trying to match
2322 RT_HT_PHY_INFO SupportedPhyInfo;
2323 RT_HT_CAPABILITY SupportedHtPhy;
2324 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2325 #endif // CONFIG_STA_SUPPORT //
2328 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2329 NDIS_802_11_MAC_ADDRESS MacAddr;
2330 USHORT MacTabMatchWCID; // ASIC
2331 CIPHER_KEY CipherKey;
2332 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2335 // ----------- start of AP --------------------------
2336 // AUTH-RSP State Machine Aux data structure
2337 typedef struct _AP_MLME_AUX {
2338 UCHAR Addr[MAC_ADDR_LEN];
2340 CHAR Challenge[CIPHER_TEXT_LEN];
2341 } AP_MLME_AUX, *PAP_MLME_AUX;
2343 // structure to define WPA Group Key Rekey Interval
2344 typedef struct PACKED _RT_802_11_WPA_REKEY {
2345 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2346 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2347 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2349 typedef struct _MAC_TABLE_ENTRY {
2350 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2351 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2352 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2353 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2354 BOOLEAN ValidAsMesh;
2355 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2357 BOOLEAN bIAmBadAtheros;
2359 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2361 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2362 UCHAR CMTimerRunning;
2363 UCHAR apidx; // MBSS number
2365 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2366 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2367 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2370 RALINK_TIMER_STRUCT RetryTimer;
2371 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2372 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2373 NDIS_802_11_WEP_STATUS WepStatus;
2374 AP_WPA_STATE WpaState;
2377 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2378 CIPHER_KEY PairwiseKey;
2381 UCHAR PMKID[LEN_PMKID];
2384 UCHAR Addr[MAC_ADDR_LEN];
2387 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2388 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2390 USHORT CapabilityInfo;
2392 ULONG NoDataIdleCount;
2393 UINT16 StationKeepAliveCount; // unit: second
2395 QUEUE_HEADER PsQueue;
2397 UINT32 StaConnectTime; // the live time of this station since associated with AP
2400 #ifdef DOT11_N_SUPPORT
2402 USHORT NoBADataCountDown;
2404 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2405 UINT TxBFCount; // 3*3
2406 #endif // DOT11_N_SUPPORT //
2408 UINT DebugFIFOCount;
2413 //====================================================
2414 //WDS entry needs these
2415 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2416 UINT MatchWDSTabIdx;
2417 UCHAR MaxSupportedRate;
2419 UCHAR CurrTxRateIndex;
2420 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2421 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2422 // USHORT OneSecTxOkCount;
2423 UINT32 OneSecTxNoRetryOkCount;
2424 UINT32 OneSecTxRetryOkCount;
2425 UINT32 OneSecTxFailCount;
2426 UINT32 ContinueTxFailCnt;
2427 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2428 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2429 //====================================================
2433 #ifdef CONFIG_STA_SUPPORT
2434 #ifdef QOS_DLS_SUPPORT
2435 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2436 #endif // QOS_DLS_SUPPORT //
2437 #endif // CONFIG_STA_SUPPORT //
2439 BOOLEAN fNoisyEnvironment;
2440 BOOLEAN fLastSecAccordingRSSI;
2441 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2442 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2443 ULONG LastTxOkCount;
2444 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2446 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2447 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2448 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2449 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2450 ULONG ClientStatusFlags;
2452 // TODO: Shall we move that to DOT11_N_SUPPORT???
2453 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2455 #ifdef DOT11_N_SUPPORT
2456 // HT EWC MIMO-N used parameters
2457 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2458 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2459 USHORT TXAutoBAbitmap;
2460 USHORT BADeclineBitmap;
2461 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2462 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2463 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2465 // 802.11n features.
2467 UCHAR MaxRAmpduFactor;
2469 UCHAR MmpsMode; // MIMO power save more.
2471 HT_CAPABILITY_IE HTCapability;
2473 #ifdef DOT11N_DRAFT3
2474 UCHAR BSS2040CoexistenceMgmtSupport;
2475 #endif // DOT11N_DRAFT3 //
2476 #endif // DOT11_N_SUPPORT //
2478 BOOLEAN bAutoTxRateSwitch;
2481 struct _MAC_TABLE_ENTRY *pNext;
2482 USHORT TxSeq[NUM_OF_TID];
2483 USHORT NonQosDataSeq;
2485 RSSI_SAMPLE RssiSample;
2487 UINT32 TXMCSExpected[16];
2488 UINT32 TXMCSSuccessful[16];
2489 UINT32 TXMCSFailed[16];
2490 UINT32 TXMCSAutoFallBack[16][16];
2492 #ifdef CONFIG_STA_SUPPORT
2493 ULONG LastBeaconRxTime;
2494 #endif // CONFIG_STA_SUPPORT //
2495 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2497 typedef struct _MAC_TABLE {
2499 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2500 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2501 QUEUE_HEADER McastPsQueue;
2503 BOOLEAN fAnyStationInPsm;
2504 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2505 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2506 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2507 #ifdef DOT11_N_SUPPORT
2508 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2509 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2510 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2511 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2512 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2513 #endif // DOT11_N_SUPPORT //
2514 } MAC_TABLE, *PMAC_TABLE;
2516 #ifdef DOT11_N_SUPPORT
2517 #define IS_HT_STA(_pMacEntry) \
2518 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2520 #define IS_HT_RATE(_pMacEntry) \
2521 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2523 #define PEER_IS_HT_RATE(_pMacEntry) \
2524 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2525 #endif // DOT11_N_SUPPORT //
2527 typedef struct _WDS_ENTRY {
2529 UCHAR Addr[MAC_ADDR_LEN];
2530 ULONG NoDataIdleCount;
2531 struct _WDS_ENTRY *pNext;
2532 } WDS_ENTRY, *PWDS_ENTRY;
2534 typedef struct _WDS_TABLE_ENTRY {
2536 UCHAR WdsAddr[MAC_ADDR_LEN];
2537 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2538 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2539 UCHAR MaxSupportedRate;
2541 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2542 USHORT OneSecTxOkCount;
2543 USHORT OneSecTxRetryOkCount;
2544 USHORT OneSecTxFailCount;
2545 ULONG CurrTxRateStableTime; // # of second in current TX rate
2546 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2547 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2549 typedef struct _RT_802_11_WDS_ENTRY {
2553 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2554 UCHAR MacTabMatchWCID; // ASIC
2555 NDIS_802_11_WEP_STATUS WepStatus;
2558 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2559 RT_HT_PHY_INFO DesiredHtPhyInfo;
2560 BOOLEAN bAutoTxRateSwitch;
2561 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2562 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2564 typedef struct _WDS_TABLE {
2567 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2568 } WDS_TABLE, *PWDS_TABLE;
2570 typedef struct _APCLI_STRUCT {
2573 unsigned int mylinkid;
2575 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2576 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2577 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2579 CHAR Ssid[MAX_LEN_OF_SSID];
2582 CHAR CfgSsid[MAX_LEN_OF_SSID];
2583 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2584 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2586 ULONG ApCliRcvBeaconTime;
2588 ULONG CtrlCurrState;
2589 ULONG SyncCurrState;
2590 ULONG AuthCurrState;
2591 ULONG AssocCurrState;
2592 ULONG WpaPskCurrState;
2597 ULONG ClientStatusFlags;
2600 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2601 NDIS_802_11_WEP_STATUS WepStatus;
2603 // Add to support different cipher suite for WPA2/WPA mode
2604 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2605 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2606 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2607 USHORT RsnCapability;
2609 UCHAR PSK[100]; // reserve PSK key material
2611 UCHAR PMK[32]; // WPA PSK mode PMK
2612 //UCHAR PTK[64]; // WPA PSK mode PTK
2613 UCHAR GTK[32]; // GTK from authenticator
2615 //CIPHER_KEY PairwiseKey;
2616 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2619 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2620 //UCHAR PortSecured;
2622 // store RSN_IE built by driver
2623 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2626 // For WPA countermeasures
2627 ULONG LastMicErrorTime; // record last MIC error time
2628 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2629 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2631 // For WPA-PSK supplicant state
2632 //WPA_STATE WpaState; // Default is SS_NOTUSE
2633 //UCHAR ReplayCounter[8];
2634 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2635 UCHAR SNonce[32]; // SNonce for WPA-PSK
2636 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2638 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2639 RT_HT_PHY_INFO DesiredHtPhyInfo;
2640 BOOLEAN bAutoTxRateSwitch;
2641 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2642 } APCLI_STRUCT, *PAPCLI_STRUCT;
2644 // ----------- end of AP ----------------------------
2647 typedef struct _BLOCK_QUEUE_ENTRY
2649 BOOLEAN SwTxQueueBlockFlag;
2650 LIST_HEADER NetIfList;
2651 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2652 #endif // BLOCK_NET_IF //
2658 BOOLEAN bGreenField;
2664 typedef struct _INF_PCI_CONFIG
2666 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2669 typedef struct _INF_USB_CONFIG
2671 UINT BulkInEpAddr; // bulk-in endpoint address
2672 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2676 #ifdef IKANOS_VX_1X0
2677 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2679 struct IKANOS_TX_INFO
2681 struct net_device *netdev;
2682 IkanosWlanTxCbFuncP *fp;
2684 #endif // IKANOS_VX_1X0 //
2687 typedef struct _NINDO_CTRL_BLOCK {
2689 RT_NINTENDO_TABLE DS_TABLE;
2692 spinlock_t NINTENDO_TABLE_Lock;
2694 NDIS_SPIN_LOCK NINTENDO_TABLE_Lock;
2695 #endif // CHIP25XX //
2697 UCHAR NINTENDO_UP_BUFFER[512];
2699 CIPHER_KEY Local_SharedKey;
2700 UCHAR Local_bHideSsid;
2701 UCHAR Local_AuthMode;
2702 UCHAR Local_WepStatus;
2703 USHORT Local_CapabilityInfo;
2705 #endif // NINTENDO_AP //
2709 #define DIAGNOSE_TIME 10 // 10 sec
2710 typedef struct _RtmpDiagStrcut_
2711 { // Diagnosis Related element
2712 unsigned char inited;
2714 unsigned char ArrayStartIdx;
2715 unsigned char ArrayCurIdx;
2717 USHORT TxDataCnt[DIAGNOSE_TIME];
2718 USHORT TxFailCnt[DIAGNOSE_TIME];
2719 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2720 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2721 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2722 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2723 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2725 USHORT TxAggCnt[DIAGNOSE_TIME];
2726 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2727 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2728 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2729 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2730 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2733 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2734 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2735 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2736 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2738 #endif // DBG_DIAGNOSE //
2742 // The miniport adapter structure
2744 typedef struct _RTMP_ADAPTER
2746 PVOID OS_Cookie; // save specific structure relative to OS
2752 NDIS_SPIN_LOCK irq_lock;
2756 /*****************************************************************************************/
2757 /* USB related parameters */
2758 /*****************************************************************************************/
2759 struct usb_config_descriptor *config;
2760 UINT BulkInEpAddr; // bulk-in endpoint address
2761 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2764 USHORT BulkOutMaxPacketSize;
2765 USHORT BulkInMaxPacketSize;
2767 //======Control Flags
2768 LONG PendingIoCount;
2770 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2773 //======Timer Thread
2774 RT2870_TIMER_QUEUE TimerQ;
2775 NDIS_SPIN_LOCK TimerQLock;
2780 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2782 BOOLEAN TimerFunc_kill;
2786 //======Semaphores (event)
2787 struct semaphore mlme_semaphore; /* to sleep thread on */
2788 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2789 struct semaphore RTUSBTimer_semaphore;
2790 #ifdef INF_AMAZON_SE
2791 struct semaphore UsbVendorReq_semaphore;
2792 PVOID UsbVendorReqBuf;
2793 #endif // INF_AMAZON_SE //
2794 struct completion TimerQComplete;
2795 struct completion mlmeComplete;
2796 struct completion CmdQComplete;
2797 wait_queue_head_t *wait;
2799 //======Lock for 2870 ATE
2801 NDIS_SPIN_LOCK GenericLock; // ATE Tx/Rx generic spinlock
2802 #endif // RALINK_ATE //
2807 /*****************************************************************************************/
2808 /* Both PCI/USB related parameters */
2809 /*****************************************************************************************/
2812 /*****************************************************************************************/
2813 /* Tx related parameters */
2814 /*****************************************************************************************/
2815 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2816 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2819 // Data related context and AC specified, 4 AC supported
2820 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2821 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2823 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2824 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2826 // 4 sets of Bulk Out index and pending flag
2827 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2829 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2830 UCHAR bulkResetPipeid;
2831 BOOLEAN MgmtBulkPending;
2832 ULONG bulkResetReq[6];
2835 // resource for software backlog queues
2836 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2837 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2839 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2840 RTMP_MGMT_RING MgmtRing;
2841 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2844 /*****************************************************************************************/
2845 /* Rx related parameters */
2846 /*****************************************************************************************/
2850 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2851 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2852 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2853 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2854 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2855 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2856 ULONG TransferBufferLength; // current length of the packet buffer
2857 ULONG ReadPosition; // current read position in a packet buffer
2861 /*****************************************************************************************/
2862 /* ASIC related parameters */
2863 /*****************************************************************************************/
2864 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2866 // ---------------------------
2868 // ---------------------------
2869 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2870 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2871 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2872 BOOLEAN EepromAccess;
2874 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2876 // ---------------------------
2878 // ---------------------------
2879 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2880 UCHAR BbpRssiToDbmDelta;
2881 BBP_R66_TUNING BbpTuning;
2883 // ----------------------------
2885 // ----------------------------
2886 UCHAR RfIcType; // RFIC_xxx
2887 ULONG RfFreqOffset; // Frequency offset for channel switching
2888 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2890 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2891 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2893 // This soft Rx Antenna Diversity mechanism is used only when user set
2894 // RX Antenna = DIVERSITY ON
2895 SOFT_RX_ANT_DIVERSITY RxAnt;
2898 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2899 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2900 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2901 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2903 UCHAR ChannelListNum; // number of channel in ChannelList[]
2906 ULONG Tx20MPwrCfgABand[5];
2907 ULONG Tx20MPwrCfgGBand[5];
2908 ULONG Tx40MPwrCfgABand[5];
2909 ULONG Tx40MPwrCfgGBand[5];
2911 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2912 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2913 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2914 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2915 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2916 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2918 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2919 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2920 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2921 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2922 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2923 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2925 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2926 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2927 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2928 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2931 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2932 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2933 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2934 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2937 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2938 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2939 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2940 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2942 // ----------------------------
2944 // ----------------------------
2945 MCU_LEDCS_STRUC LedCntl;
2946 USHORT Led1; // read from EEPROM 0x3c
2947 USHORT Led2; // EEPROM 0x3e
2948 USHORT Led3; // EEPROM 0x40
2949 UCHAR LedIndicatorStregth;
2950 UCHAR RssiSingalstrengthOffet;
2951 BOOLEAN bLedOnScanning;
2954 /*****************************************************************************************/
2955 /* 802.11 related parameters */
2956 /*****************************************************************************************/
2957 // outgoing BEACON frame buffer and corresponding TXD
2958 TXWI_STRUC BeaconTxWI;
2960 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2962 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2963 PSPOLL_FRAME PsPollFrame;
2964 HEADER_802_11 NullFrame;
2967 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2968 TX_CONTEXT NullContext;
2969 TX_CONTEXT PsPollContext;
2970 TX_CONTEXT RTSContext;
2975 //=========AP===========
2978 //=======STA===========
2979 #ifdef CONFIG_STA_SUPPORT
2980 /* Modified by Wu Xi-Kun 4/21/2006 */
2981 // -----------------------------------------------
2982 // STA specific configuration & operation status
2983 // used only when pAd->OpMode == OPMODE_STA
2984 // -----------------------------------------------
2985 STA_ADMIN_CONFIG StaCfg; // user desired settings
2986 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2987 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2988 NDIS_MEDIA_STATE PreMediaState;
2989 #endif // CONFIG_STA_SUPPORT //
2991 //=======Common===========
2992 // OP mode: either AP or STA
2993 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2995 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2998 // MAT related parameters
3000 // configuration: read from Registry & E2PROM
3001 BOOLEAN bLocalAdminMAC; // Use user changed MAC
3002 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
3003 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
3005 // ------------------------------------------------------
3006 // common configuration to both OPMODE_STA and OPMODE_AP
3007 // ------------------------------------------------------
3008 COMMON_CONFIG CommonCfg;
3011 // AP needs those vaiables for site survey feature.
3012 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
3013 BSS_TABLE ScanTab; // store the latest SCAN result
3015 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
3016 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
3017 NDIS_SPIN_LOCK MacTabLock;
3019 #ifdef DOT11_N_SUPPORT
3021 #endif // DOT11_N_SUPPORT //
3022 NDIS_SPIN_LOCK BATabLock;
3023 RALINK_TIMER_STRUCT RECBATimer;
3025 // encryption/decryption KEY tables
3026 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
3028 // RX re-assembly buffer for fragmentation
3029 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
3032 COUNTER_802_3 Counters8023; // 802.3 counters
3033 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
3034 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
3035 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
3036 PRIVATE_STRUC PrivateInfo; // Private information & counters
3038 // flags, see fRTMP_ADAPTER_xxx flags
3039 ULONG Flags; // Represent current device status
3041 // current TX sequence #
3049 // Control disconnect / connect event generation
3050 //+++Didn't used anymore
3055 //+++Used only for Station
3056 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
3059 ULONG ExtraInfo; // Extra information for displaying status
3060 ULONG SystemErrorBitmap; // b0: E2PROM version error
3062 //+++Didn't used anymore
3063 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
3066 // ---------------------------
3068 // ---------------------------
3069 RT_802_11_EVENT_TABLE EventTab;
3074 /*****************************************************************************************/
3075 /* Statistic related parameters */
3076 /*****************************************************************************************/
3078 ULONG BulkOutDataOneSecCount;
3079 ULONG BulkInDataOneSecCount;
3080 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
3081 ULONG watchDogRxCnt;
3082 ULONG watchDogRxOverFlowCnt;
3083 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
3086 BOOLEAN bUpdateBcnCntDone;
3087 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
3088 // ----------------------------
3090 // ----------------------------
3091 //ULONG DebugSetting[4];
3092 BOOLEAN bBanAllBaSetup;
3093 BOOLEAN bPromiscuous;
3095 // ----------------------------
3096 // rt2860c emulation-use Parameters
3097 // ----------------------------
3100 ULONG cfendaccu[30];
3101 ULONG bacontent[16];
3102 ULONG rxint[RX_RING_SIZE+1];
3105 BOOLEAN bForcePrintTX;
3106 BOOLEAN bForcePrintRX;
3107 BOOLEAN bDisablescanning; //defined in RT2870 USB
3108 BOOLEAN bStaFifoTest;
3109 BOOLEAN bProtectionTest;
3111 BOOLEAN bGenOneHCCA;
3112 BOOLEAN bBroadComHT;
3113 //+++Following add from RT2870 USB.
3115 ULONG BulkOutComplete;
3116 ULONG BulkOutCompleteOther;
3117 ULONG BulkOutCompleteCancel; // seems not use now?
3119 ULONG BulkInComplete;
3120 ULONG BulkInCompleteFail;
3123 struct wificonf WIFItestbed;
3128 BOOLEAN ContinBulkOut; //ATE bulk out control
3129 BOOLEAN ContinBulkIn; //ATE bulk in control
3130 atomic_t BulkOutRemained;
3131 atomic_t BulkInRemained;
3133 #endif // RALINK_ATE //
3135 #ifdef DOT11_N_SUPPORT
3136 struct reordering_mpdu_pool mpdu_blk_pool;
3137 #endif // DOT11_N_SUPPORT //
3139 ULONG OneSecondnonBEpackets; // record non BE packets per second
3141 #if WIRELESS_EXT >= 12
3142 struct iw_statistics iw_stats;
3145 struct net_device_stats stats;
3148 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
3149 #endif // BLOCK_NET_IF //
3153 #ifdef MULTIPLE_CARD_SUPPORT
3155 UCHAR MC_FileName[256];
3156 #endif // MULTIPLE_CARD_SUPPORT //
3158 ULONG TbttTickCount;
3159 #ifdef PCI_MSI_SUPPORT
3161 #endif // PCI_MSI_SUPPORT //
3166 #define TIME_BASE (1000000/OS_HZ)
3167 #define TIME_ONE_SECOND (1000000/TIME_BASE)
3168 UCHAR flg_be_adjust;
3169 ULONG be_adjust_last_time;
3172 NINDO_CTRL_BLOCK nindo_ctrl_block;
3173 #endif // NINTENDO_AP //
3176 #ifdef IKANOS_VX_1X0
3177 struct IKANOS_TX_INFO IkanosTxInfo;
3178 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3179 #endif // IKANOS_VX_1X0 //
3183 RtmpDiagStruct DiagStruct;
3184 #endif // DBG_DIAGNOSE //
3187 UINT8 PM_FlgSuspend;
3192 BOOLEAN bEEPROMFile;
3195 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3198 // Cisco IAPP format
3200 typedef struct _CISCO_IAPP_CONTENT_
3202 USHORT Length; //IAPP Length
3203 UCHAR MessageType; //IAPP type
3204 UCHAR FunctionCode; //IAPP function type
3205 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3206 UCHAR SourceMAC[MAC_ADDR_LEN];
3207 USHORT Tag; //Tag(element IE) - Adjacent AP report
3208 USHORT TagLength; //Length of element not including 4 byte header
3209 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3210 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3213 UCHAR Ssid[MAX_LEN_OF_SSID];
3214 USHORT Seconds; //Seconds that the client has been disassociated.
3215 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3217 #define DELAYINTMASK 0x0003fffb
3218 #define INTMASK 0x0003fffb
3219 #define IndMask 0x0003fffc
3220 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3221 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3222 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3223 #define TxCoherent 0x00020000 // tx coherent
3224 #define RxCoherent 0x00010000 // rx coherent
3225 #define McuCommand 0x00000200 // mcu
3226 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3227 #define TBTTInt 0x00000800 // TBTT interrupt
3228 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3229 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3230 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3233 typedef struct _RX_BLK_
3235 // RXD_STRUC RxD; // sample
3236 RT28XX_RXD_STRUC RxD;
3238 PHEADER_802_11 pHeader;
3239 PNDIS_PACKET pRxPacket;
3243 UCHAR UserPriority; // for calculate TKIP MIC using
3247 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3248 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3249 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3252 #define fRX_WDS 0x0001
3253 #define fRX_AMSDU 0x0002
3254 #define fRX_ARALINK 0x0004
3255 #define fRX_HTC 0x0008
3256 #define fRX_PAD 0x0010
3257 #define fRX_AMPDU 0x0020
3258 #define fRX_QOS 0x0040
3259 #define fRX_INFRA 0x0080
3260 #define fRX_EAP 0x0100
3261 #define fRX_MESH 0x0200
3262 #define fRX_APCLI 0x0400
3263 #define fRX_DLS 0x0800
3264 #define fRX_WPI 0x1000
3266 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3267 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3268 #define LENGTH_ARALINK_HEADER_FIELD 2
3270 #define TX_UNKOWN_FRAME 0x00
3271 #define TX_MCAST_FRAME 0x01
3272 #define TX_LEGACY_FRAME 0x02
3273 #define TX_AMPDU_FRAME 0x04
3274 #define TX_AMSDU_FRAME 0x08
3275 #define TX_RALINK_FRAME 0x10
3276 #define TX_FRAG_FRAME 0x20
3279 // Currently the sizeof(TX_BLK) is 148 bytes.
3280 typedef struct _TX_BLK_
3283 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3284 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3285 USHORT TotalFragNum; // Total frame fragments required in one batch
3286 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3288 QUEUE_HEADER TxPacketList;
3289 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3290 HTTRANSMIT_SETTING *pTransmit;
3292 // Following structure used for the characteristics of a specific packet.
3293 PNDIS_PACKET pPacket;
3294 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3295 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3296 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3297 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3298 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3299 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3300 UCHAR HdrPadLen; // recording Header Padding Length;
3301 UCHAR apidx; // The interface associated to this packet
3302 UCHAR Wcid; // The MAC entry associated to this packet
3303 UCHAR UserPriority; // priority class of packet
3304 UCHAR FrameGap; // what kind of IFS this packet use
3305 UCHAR MpduReqNum; // number of fragments of this frame
3306 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3307 UCHAR CipherAlg; // cipher alogrithm
3312 USHORT Flags; //See following definitions for detail.
3314 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3315 ULONG Priv; // Hardware specific value saved in here.
3319 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3320 #define fTX_bAckRequired 0x0002 // the packet need ack response
3321 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3322 #define fTX_bHTRate 0x0008 // allow to use HT rate
3323 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3324 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3325 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3326 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3327 #define fTX_bWMM 0x0080 // QOS Data
3329 #define fTX_bClearEAPFrame 0x0100
3332 #ifdef CONFIG_STA_SUPPORT
3333 #endif // CONFIG_STA_SUPPORT //
3337 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3340 (_pTxBlk->Flags |= _flag) \
3342 (_pTxBlk->Flags &= ~(_flag)) \
3345 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3346 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3347 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3353 //------------------------------------------------------------------------------------------
3357 #ifdef RT_BIG_ENDIAN
3358 static inline VOID WriteBackToDescriptor(
3361 IN BOOLEAN DoEncrypt,
3362 IN ULONG DescriptorType)
3366 p1 = ((UINT32 *)Dest);
3367 p2 = ((UINT32 *)Src);
3372 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3376 ========================================================================
3378 Routine Description:
3379 Endian conversion of Tx/Rx descriptor .
3382 pAd Pointer to our adapter
3383 pData Pointer to Tx/Rx descriptor
3384 DescriptorType Direction of the frame
3390 Call this function when read or update descriptor
3391 ========================================================================
3393 static inline VOID RTMPWIEndianChange(
3395 IN ULONG DescriptorType)
3400 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3402 if(DescriptorType == TYPE_TXWI)
3404 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3405 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3409 for(i=0; i < size/4 ; i++)
3410 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3415 ========================================================================
3417 Routine Description:
3418 Endian conversion of Tx/Rx descriptor .
3421 pAd Pointer to our adapter
3422 pData Pointer to Tx/Rx descriptor
3423 DescriptorType Direction of the frame
3429 Call this function when read or update descriptor
3430 ========================================================================
3434 static inline VOID RTMPDescriptorEndianChange(
3436 IN ULONG DescriptorType)
3438 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3442 ========================================================================
3444 Routine Description:
3445 Endian conversion of all kinds of 802.11 frames .
3448 pAd Pointer to our adapter
3449 pData Pointer to the 802.11 frame structure
3450 Dir Direction of the frame
3451 FromRxDoneInt Caller is from RxDone interrupt
3457 Call this function when read or update buffer data
3458 ========================================================================
3460 static inline VOID RTMPFrameEndianChange(
3461 IN PRTMP_ADAPTER pAd,
3464 IN BOOLEAN FromRxDoneInt)
3466 PHEADER_802_11 pFrame;
3469 // swab 16 bit fields - Frame Control field
3472 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3475 pFrame = (PHEADER_802_11) pData;
3476 pMacHdr = (PUCHAR) pFrame;
3478 // swab 16 bit fields - Duration/ID field
3479 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3481 // swab 16 bit fields - Sequence Control field
3482 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3484 if(pFrame->FC.Type == BTYPE_MGMT)
3486 switch(pFrame->FC.SubType)
3488 case SUBTYPE_ASSOC_REQ:
3489 case SUBTYPE_REASSOC_REQ:
3490 // swab 16 bit fields - CapabilityInfo field
3491 pMacHdr += sizeof(HEADER_802_11);
3492 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3494 // swab 16 bit fields - Listen Interval field
3496 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3499 case SUBTYPE_ASSOC_RSP:
3500 case SUBTYPE_REASSOC_RSP:
3501 // swab 16 bit fields - CapabilityInfo field
3502 pMacHdr += sizeof(HEADER_802_11);
3503 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3505 // swab 16 bit fields - Status Code field
3507 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3509 // swab 16 bit fields - AID field
3511 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3515 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3516 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3517 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3521 // swab 16 bit fields - Auth Alg No. field
3522 pMacHdr += sizeof(HEADER_802_11);
3523 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3525 // swab 16 bit fields - Auth Seq No. field
3527 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3529 // swab 16 bit fields - Status Code field
3531 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3535 case SUBTYPE_BEACON:
3536 case SUBTYPE_PROBE_RSP:
3537 // swab 16 bit fields - BeaconInterval field
3538 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3539 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3541 // swab 16 bit fields - CapabilityInfo field
3542 pMacHdr += sizeof(USHORT);
3543 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3546 case SUBTYPE_DEAUTH:
3547 case SUBTYPE_DISASSOC:
3548 // swab 16 bit fields - Reason code field
3549 pMacHdr += sizeof(HEADER_802_11);
3550 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3554 else if( pFrame->FC.Type == BTYPE_DATA )
3557 else if(pFrame->FC.Type == BTYPE_CNTL)
3559 switch(pFrame->FC.SubType)
3561 case SUBTYPE_BLOCK_ACK_REQ:
3563 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3564 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3565 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3568 case SUBTYPE_BLOCK_ACK:
3569 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3570 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3574 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3575 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3581 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3584 // swab 16 bit fields - Frame Control
3585 if(Dir == DIR_WRITE)
3587 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3590 #endif // RT_BIG_ENDIAN //
3593 static inline VOID ConvertMulticastIP2MAC(
3595 IN PUCHAR *ppMacAddr,
3596 IN UINT16 ProtoType)
3598 if (pIpAddr == NULL)
3601 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3607 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3608 *(*ppMacAddr) = 0x33;
3609 *(*ppMacAddr + 1) = 0x33;
3610 *(*ppMacAddr + 2) = pIpAddr[12];
3611 *(*ppMacAddr + 3) = pIpAddr[13];
3612 *(*ppMacAddr + 4) = pIpAddr[14];
3613 *(*ppMacAddr + 5) = pIpAddr[15];
3618 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3619 *(*ppMacAddr) = 0x01;
3620 *(*ppMacAddr + 1) = 0x00;
3621 *(*ppMacAddr + 2) = 0x5e;
3622 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3623 *(*ppMacAddr + 4) = pIpAddr[2];
3624 *(*ppMacAddr + 5) = pIpAddr[3];
3631 BOOLEAN RTMPCheckForHang(
3632 IN NDIS_HANDLE MiniportAdapterContext
3636 IN NDIS_HANDLE MiniportAdapterContext
3640 // Private routines in rtmp_init.c
3642 NDIS_STATUS RTMPAllocAdapterBlock(
3644 OUT PRTMP_ADAPTER *ppAdapter
3647 NDIS_STATUS RTMPAllocTxRxRingMemory(
3648 IN PRTMP_ADAPTER pAd
3651 NDIS_STATUS RTMPFindAdapter(
3652 IN PRTMP_ADAPTER pAd,
3653 IN NDIS_HANDLE WrapperConfigurationContext
3656 NDIS_STATUS RTMPReadParametersHook(
3657 IN PRTMP_ADAPTER pAd
3660 VOID RTMPFreeAdapter(
3661 IN PRTMP_ADAPTER pAd
3664 NDIS_STATUS NICReadRegParameters(
3665 IN PRTMP_ADAPTER pAd,
3666 IN NDIS_HANDLE WrapperConfigurationContext
3670 VOID NICInitRT30xxRFRegisters(
3671 IN PRTMP_ADAPTER pAd);
3674 VOID NICReadEEPROMParameters(
3675 IN PRTMP_ADAPTER pAd,
3676 IN PUCHAR mac_addr);
3678 VOID NICInitAsicFromEEPROM(
3679 IN PRTMP_ADAPTER pAd);
3681 VOID NICInitTxRxRingAndBacklogQueue(
3682 IN PRTMP_ADAPTER pAd);
3684 NDIS_STATUS NICInitializeAdapter(
3685 IN PRTMP_ADAPTER pAd,
3686 IN BOOLEAN bHardReset);
3688 NDIS_STATUS NICInitializeAsic(
3689 IN PRTMP_ADAPTER pAd,
3690 IN BOOLEAN bHardReset);
3693 IN PRTMP_ADAPTER pAd);
3695 VOID RTMPRingCleanUp(
3696 IN PRTMP_ADAPTER pAd,
3700 IN PRTMP_ADAPTER pAd);
3702 NDIS_STATUS DbgSendPacket(
3703 IN PRTMP_ADAPTER pAd,
3704 IN PNDIS_PACKET pPacket);
3707 IN PRTMP_ADAPTER pAd);
3709 VOID NICResetFromError(
3710 IN PRTMP_ADAPTER pAd);
3712 VOID NICEraseFirmware(
3713 IN PRTMP_ADAPTER pAd);
3715 NDIS_STATUS NICLoadFirmware(
3716 IN PRTMP_ADAPTER pAd);
3718 NDIS_STATUS NICLoadRateSwitchingParams(
3719 IN PRTMP_ADAPTER pAd);
3721 BOOLEAN NICCheckForHang(
3722 IN PRTMP_ADAPTER pAd);
3724 VOID NICUpdateFifoStaCounters(
3725 IN PRTMP_ADAPTER pAd);
3727 VOID NICUpdateRawCounters(
3728 IN PRTMP_ADAPTER pAd);
3730 ULONG RTMPNotAllZero(
3734 VOID RTMPZeroMemory(
3738 ULONG RTMPCompareMemory(
3743 VOID RTMPMoveMemory(
3756 VOID RTMPPatchMacBbpBug(
3757 IN PRTMP_ADAPTER pAd);
3759 VOID RTMPPatchCardBus(
3760 IN PRTMP_ADAPTER pAdapter);
3762 VOID RTMPPatchRalinkCardBus(
3763 IN PRTMP_ADAPTER pAdapter,
3766 ULONG RTMPReadCBConfig(
3772 VOID RTMPWriteCBConfig(
3780 IN PRTMP_ADAPTER pAd,
3781 IN PRALINK_TIMER_STRUCT pTimer,
3782 IN PVOID pTimerFunc,
3787 IN PRALINK_TIMER_STRUCT pTimer,
3792 IN PRALINK_TIMER_STRUCT pTimer,
3795 VOID RTMPCancelTimer(
3796 IN PRALINK_TIMER_STRUCT pTimer,
3797 OUT BOOLEAN *pCancelled);
3800 IN PRTMP_ADAPTER pAd,
3803 VOID RTMPSetSignalLED(
3804 IN PRTMP_ADAPTER pAd,
3805 IN NDIS_802_11_RSSI Dbm);
3807 VOID RTMPEnableRxTx(
3808 IN PRTMP_ADAPTER pAd);
3811 // prototype in action.c
3813 VOID ActionStateMachineInit(
3814 IN PRTMP_ADAPTER pAd,
3815 IN STATE_MACHINE *S,
3816 OUT STATE_MACHINE_FUNC Trans[]);
3818 VOID MlmeADDBAAction(
3819 IN PRTMP_ADAPTER pAd,
3820 IN MLME_QUEUE_ELEM *Elem);
3822 VOID MlmeDELBAAction(
3823 IN PRTMP_ADAPTER pAd,
3824 IN MLME_QUEUE_ELEM *Elem);
3827 IN PRTMP_ADAPTER pAd,
3828 IN MLME_QUEUE_ELEM *Elem);
3830 VOID MlmeInvalidAction(
3831 IN PRTMP_ADAPTER pAd,
3832 IN MLME_QUEUE_ELEM *Elem);
3835 IN PRTMP_ADAPTER pAd,
3836 IN MLME_QUEUE_ELEM *Elem);
3838 #ifdef DOT11_N_SUPPORT
3839 VOID PeerAddBAReqAction(
3840 IN PRTMP_ADAPTER pAd,
3841 IN MLME_QUEUE_ELEM *Elem);
3843 VOID PeerAddBARspAction(
3844 IN PRTMP_ADAPTER pAd,
3845 IN MLME_QUEUE_ELEM *Elem);
3847 VOID PeerDelBAAction(
3848 IN PRTMP_ADAPTER pAd,
3849 IN MLME_QUEUE_ELEM *Elem);
3852 IN PRTMP_ADAPTER pAd,
3853 IN MLME_QUEUE_ELEM *Elem);
3854 #endif // DOT11_N_SUPPORT //
3856 VOID SendPSMPAction(
3857 IN PRTMP_ADAPTER pAd,
3862 #ifdef DOT11N_DRAFT3
3863 VOID SendBSS2040CoexistMgmtAction(
3864 IN PRTMP_ADAPTER pAd,
3869 VOID SendNotifyBWActionFrame(
3870 IN PRTMP_ADAPTER pAd,
3874 BOOLEAN ChannelSwitchSanityCheck(
3875 IN PRTMP_ADAPTER pAd,
3877 IN UCHAR NewChannel,
3878 IN UCHAR Secondary);
3880 VOID ChannelSwitchAction(
3881 IN PRTMP_ADAPTER pAd,
3884 IN UCHAR Secondary);
3886 ULONG BuildIntolerantChannelRep(
3887 IN PRTMP_ADAPTER pAd,
3890 VOID Update2040CoexistFrameAndNotify(
3891 IN PRTMP_ADAPTER pAd,
3893 IN BOOLEAN bAddIntolerantCha);
3895 VOID Send2040CoexistAction(
3896 IN PRTMP_ADAPTER pAd,
3898 IN BOOLEAN bAddIntolerantCha);
3899 #endif // DOT11N_DRAFT3 //
3902 IN PRTMP_ADAPTER pAd,
3903 IN MLME_QUEUE_ELEM *Elem);
3905 VOID PeerPublicAction(
3906 IN PRTMP_ADAPTER pAd,
3907 IN MLME_QUEUE_ELEM *Elem);
3909 #ifdef CONFIG_STA_SUPPORT
3910 VOID StaPublicAction(
3911 IN PRTMP_ADAPTER pAd,
3912 IN UCHAR Bss2040Coexist);
3913 #endif // CONFIG_STA_SUPPORT //
3916 VOID PeerBSSTranAction(
3917 IN PRTMP_ADAPTER pAd,
3918 IN MLME_QUEUE_ELEM *Elem);
3920 #ifdef DOT11_N_SUPPORT
3922 IN PRTMP_ADAPTER pAd,
3923 IN MLME_QUEUE_ELEM *Elem);
3924 #endif // DOT11_N_SUPPORT //
3927 IN PRTMP_ADAPTER pAd,
3928 IN MLME_QUEUE_ELEM *Elem);
3930 #ifdef QOS_DLS_SUPPORT
3932 IN PRTMP_ADAPTER pAd,
3933 IN MLME_QUEUE_ELEM *Elem);
3934 #endif // QOS_DLS_SUPPORT //
3936 #ifdef CONFIG_STA_SUPPORT
3937 #ifdef QOS_DLS_SUPPORT
3939 IN PRTMP_ADAPTER pAd,
3940 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3941 IN PRT_802_11_DLS pDls,
3943 #endif // QOS_DLS_SUPPORT //
3944 #endif // CONFIG_STA_SUPPORT //
3946 #ifdef DOT11_N_SUPPORT
3947 VOID RECBATimerTimeout(
3948 IN PVOID SystemSpecific1,
3949 IN PVOID FunctionContext,
3950 IN PVOID SystemSpecific2,
3951 IN PVOID SystemSpecific3);
3953 VOID ORIBATimerTimeout(
3954 IN PRTMP_ADAPTER pAd);
3956 VOID SendRefreshBAR(
3957 IN PRTMP_ADAPTER pAd,
3958 IN MAC_TABLE_ENTRY *pEntry);
3959 #endif // DOT11_N_SUPPORT //
3962 IN PRTMP_ADAPTER pAd,
3963 IN OUT PHEADER_802_11 pHdr80211,
3969 IN PRTMP_ADAPTER pAd,
3970 IN OUT PFRAME_BAR pCntlBar,
3974 VOID InsertActField(
3975 IN PRTMP_ADAPTER pAd,
3976 OUT PUCHAR pFrameBuf,
3977 OUT PULONG pFrameLen,
3981 BOOLEAN QosBADataParse(
3982 IN PRTMP_ADAPTER pAd,
3984 IN PUCHAR p8023Header,
3988 IN UCHAR DataOffset,
3990 IN UINT CurRxIndex);
3992 #ifdef DOT11_N_SUPPORT
3993 BOOLEAN CntlEnqueueForRecv(
3994 IN PRTMP_ADAPTER pAd,
3997 IN PFRAME_BA_REQ pMsg);
3999 VOID BaAutoManSwitch(
4000 IN PRTMP_ADAPTER pAd);
4001 #endif // DOT11_N_SUPPORT //
4004 IN PRTMP_ADAPTER pAd,
4005 IN UCHAR BatRecIdx);
4008 // Private routines in rtmp_data.c
4010 BOOLEAN RTMPHandleRxDoneInterrupt(
4011 IN PRTMP_ADAPTER pAd);
4013 VOID RTMPHandleTxDoneInterrupt(
4014 IN PRTMP_ADAPTER pAd);
4016 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
4017 IN PRTMP_ADAPTER pAd,
4018 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
4020 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
4021 IN PRTMP_ADAPTER pAd);
4023 VOID RTMPHandleTBTTInterrupt(
4024 IN PRTMP_ADAPTER pAd);
4026 VOID RTMPHandlePreTBTTInterrupt(
4027 IN PRTMP_ADAPTER pAd);
4029 void RTMPHandleTwakeupInterrupt(
4030 IN PRTMP_ADAPTER pAd);
4032 VOID RTMPHandleRxCoherentInterrupt(
4033 IN PRTMP_ADAPTER pAd);
4035 BOOLEAN TxFrameIsAggregatible(
4036 IN PRTMP_ADAPTER pAd,
4037 IN PUCHAR pPrevAddr1,
4038 IN PUCHAR p8023hdr);
4040 BOOLEAN PeerIsAggreOn(
4041 IN PRTMP_ADAPTER pAd,
4043 IN PMAC_TABLE_ENTRY pMacEntry);
4045 NDIS_STATUS Sniff2BytesFromNdisBuffer(
4046 IN PNDIS_BUFFER pFirstBuffer,
4047 IN UCHAR DesiredOffset,
4051 NDIS_STATUS STASendPacket(
4052 IN PRTMP_ADAPTER pAd,
4053 IN PNDIS_PACKET pPacket);
4055 VOID STASendPackets(
4056 IN NDIS_HANDLE MiniportAdapterContext,
4057 IN PPNDIS_PACKET ppPacketArray,
4058 IN UINT NumberOfPackets);
4060 VOID RTMPDeQueuePacket(
4061 IN PRTMP_ADAPTER pAd,
4062 IN BOOLEAN bIntContext,
4064 IN UCHAR Max_Tx_Packets);
4066 NDIS_STATUS RTMPHardTransmit(
4067 IN PRTMP_ADAPTER pAd,
4068 IN PNDIS_PACKET pPacket,
4070 OUT PULONG pFreeTXDLeft);
4072 NDIS_STATUS STAHardTransmit(
4073 IN PRTMP_ADAPTER pAd,
4077 VOID STARxEAPOLFrameIndicate(
4078 IN PRTMP_ADAPTER pAd,
4079 IN MAC_TABLE_ENTRY *pEntry,
4081 IN UCHAR FromWhichBSSID);
4083 NDIS_STATUS RTMPFreeTXDRequest(
4084 IN PRTMP_ADAPTER pAd,
4086 IN UCHAR NumberRequired,
4087 IN PUCHAR FreeNumberIs);
4089 NDIS_STATUS MlmeHardTransmit(
4090 IN PRTMP_ADAPTER pAd,
4092 IN PNDIS_PACKET pPacket);
4094 NDIS_STATUS MlmeHardTransmitMgmtRing(
4095 IN PRTMP_ADAPTER pAd,
4097 IN PNDIS_PACKET pPacket);
4099 NDIS_STATUS MlmeHardTransmitTxRing(
4100 IN PRTMP_ADAPTER pAd,
4102 IN PNDIS_PACKET pPacket);
4104 USHORT RTMPCalcDuration(
4105 IN PRTMP_ADAPTER pAd,
4110 IN PRTMP_ADAPTER pAd,
4111 IN PTXWI_STRUC pTxWI,
4114 IN BOOLEAN InsTimestamp,
4117 IN BOOLEAN NSeq, // HW new a sequence.
4126 IN HTTRANSMIT_SETTING *pTransmit);
4129 VOID RTMPWriteTxWI_Data(
4130 IN PRTMP_ADAPTER pAd,
4131 IN OUT PTXWI_STRUC pTxWI,
4135 VOID RTMPWriteTxWI_Cache(
4136 IN PRTMP_ADAPTER pAd,
4137 IN OUT PTXWI_STRUC pTxWI,
4140 VOID RTMPWriteTxDescriptor(
4141 IN PRTMP_ADAPTER pAd,
4146 VOID RTMPSuspendMsduTransmission(
4147 IN PRTMP_ADAPTER pAd);
4149 VOID RTMPResumeMsduTransmission(
4150 IN PRTMP_ADAPTER pAd);
4152 NDIS_STATUS MiniportMMRequest(
4153 IN PRTMP_ADAPTER pAd,
4158 NDIS_STATUS MiniportDataMMRequest(
4159 IN PRTMP_ADAPTER pAd,
4164 VOID RTMPSendNullFrame(
4165 IN PRTMP_ADAPTER pAd,
4167 IN BOOLEAN bQosNull);
4169 VOID RTMPSendDisassociationFrame(
4170 IN PRTMP_ADAPTER pAd);
4172 VOID RTMPSendRTSFrame(
4173 IN PRTMP_ADAPTER pAd,
4175 IN unsigned int NextMpduSize,
4178 IN USHORT AckDuration,
4183 NDIS_STATUS RTMPApplyPacketFilter(
4184 IN PRTMP_ADAPTER pAd,
4185 IN PRT28XX_RXD_STRUC pRxD,
4186 IN PHEADER_802_11 pHeader);
4188 PQUEUE_HEADER RTMPCheckTxSwQueue(
4189 IN PRTMP_ADAPTER pAd,
4192 #ifdef CONFIG_STA_SUPPORT
4193 VOID RTMPReportMicError(
4194 IN PRTMP_ADAPTER pAd,
4195 IN PCIPHER_KEY pWpaKey);
4197 VOID WpaMicFailureReportFrame(
4198 IN PRTMP_ADAPTER pAd,
4199 IN MLME_QUEUE_ELEM *Elem);
4201 VOID WpaDisassocApAndBlockAssoc(
4202 IN PVOID SystemSpecific1,
4203 IN PVOID FunctionContext,
4204 IN PVOID SystemSpecific2,
4205 IN PVOID SystemSpecific3);
4206 #endif // CONFIG_STA_SUPPORT //
4208 NDIS_STATUS RTMPCloneNdisPacket(
4209 IN PRTMP_ADAPTER pAd,
4210 IN BOOLEAN pInsAMSDUHdr,
4211 IN PNDIS_PACKET pInPacket,
4212 OUT PNDIS_PACKET *ppOutPacket);
4214 NDIS_STATUS RTMPAllocateNdisPacket(
4215 IN PRTMP_ADAPTER pAd,
4216 IN PNDIS_PACKET *pPacket,
4222 VOID RTMPFreeNdisPacket(
4223 IN PRTMP_ADAPTER pAd,
4224 IN PNDIS_PACKET pPacket);
4226 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4227 IN PRTMP_ADAPTER pAd,
4230 BOOLEAN RTMPCheckDHCPFrame(
4231 IN PRTMP_ADAPTER pAd,
4232 IN PNDIS_PACKET pPacket);
4235 BOOLEAN RTMPCheckEtherType(
4236 IN PRTMP_ADAPTER pAd,
4237 IN PNDIS_PACKET pPacket);
4240 VOID RTMPCckBbpTuning(
4241 IN PRTMP_ADAPTER pAd,
4245 // Private routines in rtmp_wep.c
4247 VOID RTMPInitWepEngine(
4248 IN PRTMP_ADAPTER pAd,
4254 VOID RTMPEncryptData(
4255 IN PRTMP_ADAPTER pAd,
4260 BOOLEAN RTMPDecryptData(
4261 IN PRTMP_ADAPTER pAdapter,
4266 BOOLEAN RTMPSoftDecryptWEP(
4267 IN PRTMP_ADAPTER pAd,
4269 IN ULONG DataByteCnt,
4270 IN PCIPHER_KEY pGroupKey);
4273 IN PRTMP_ADAPTER pAd,
4277 IN PARCFOURCONTEXT Ctx,
4282 IN PARCFOURCONTEXT Ctx);
4284 VOID ARCFOUR_DECRYPT(
4285 IN PARCFOURCONTEXT Ctx,
4290 VOID ARCFOUR_ENCRYPT(
4291 IN PARCFOURCONTEXT Ctx,
4296 VOID WPAARCFOUR_ENCRYPT(
4297 IN PARCFOURCONTEXT Ctx,
4302 UINT RTMP_CALC_FCS32(
4311 // Asic/RF/BBP related functions
4313 VOID AsicAdjustTxPower(
4314 IN PRTMP_ADAPTER pAd);
4316 VOID AsicUpdateProtect(
4317 IN PRTMP_ADAPTER pAd,
4318 IN USHORT OperaionMode,
4320 IN BOOLEAN bDisableBGProtect,
4321 IN BOOLEAN bNonGFExist);
4323 VOID AsicSwitchChannel(
4324 IN PRTMP_ADAPTER pAd,
4328 VOID AsicLockChannel(
4329 IN PRTMP_ADAPTER pAd,
4332 VOID AsicAntennaSelect(
4333 IN PRTMP_ADAPTER pAd,
4336 VOID AsicAntennaSetting(
4337 IN PRTMP_ADAPTER pAd,
4338 IN ABGBAND_STATE BandState);
4340 VOID AsicRfTuningExec(
4341 IN PVOID SystemSpecific1,
4342 IN PVOID FunctionContext,
4343 IN PVOID SystemSpecific2,
4344 IN PVOID SystemSpecific3);
4346 #ifdef CONFIG_STA_SUPPORT
4347 VOID AsicSleepThenAutoWakeup(
4348 IN PRTMP_ADAPTER pAd,
4349 IN USHORT TbttNumToNextWakeUp);
4351 VOID AsicForceSleep(
4352 IN PRTMP_ADAPTER pAd);
4354 VOID AsicForceWakeup(
4355 IN PRTMP_ADAPTER pAd,
4356 IN BOOLEAN bFromTx);
4357 #endif // CONFIG_STA_SUPPORT //
4360 IN PRTMP_ADAPTER pAd,
4363 VOID AsicSetMcastWC(
4364 IN PRTMP_ADAPTER pAd);
4366 VOID AsicDelWcidTab(
4367 IN PRTMP_ADAPTER pAd,
4371 IN PRTMP_ADAPTER pAd);
4373 VOID AsicDisableRDG(
4374 IN PRTMP_ADAPTER pAd);
4376 VOID AsicDisableSync(
4377 IN PRTMP_ADAPTER pAd);
4379 VOID AsicEnableBssSync(
4380 IN PRTMP_ADAPTER pAd);
4382 VOID AsicEnableIbssSync(
4383 IN PRTMP_ADAPTER pAd);
4385 VOID AsicSetEdcaParm(
4386 IN PRTMP_ADAPTER pAd,
4387 IN PEDCA_PARM pEdcaParm);
4389 VOID AsicSetSlotTime(
4390 IN PRTMP_ADAPTER pAd,
4391 IN BOOLEAN bUseShortSlotTime);
4393 VOID AsicAddSharedKeyEntry(
4394 IN PRTMP_ADAPTER pAd,
4402 VOID AsicRemoveSharedKeyEntry(
4403 IN PRTMP_ADAPTER pAd,
4407 VOID AsicUpdateWCIDAttribute(
4408 IN PRTMP_ADAPTER pAd,
4412 IN BOOLEAN bUsePairewiseKeyTable);
4414 VOID AsicUpdateWCIDIVEIV(
4415 IN PRTMP_ADAPTER pAd,
4420 VOID AsicUpdateRxWCIDTable(
4421 IN PRTMP_ADAPTER pAd,
4425 VOID AsicAddKeyEntry(
4426 IN PRTMP_ADAPTER pAd,
4430 IN PCIPHER_KEY pCipherKey,
4431 IN BOOLEAN bUsePairewiseKeyTable,
4434 VOID AsicAddPairwiseKeyEntry(
4435 IN PRTMP_ADAPTER pAd,
4438 IN CIPHER_KEY *pCipherKey);
4440 VOID AsicRemovePairwiseKeyEntry(
4441 IN PRTMP_ADAPTER pAd,
4445 BOOLEAN AsicSendCommandToMcu(
4446 IN PRTMP_ADAPTER pAd,
4453 VOID MacAddrRandomBssid(
4454 IN PRTMP_ADAPTER pAd,
4457 VOID MgtMacHeaderInit(
4458 IN PRTMP_ADAPTER pAd,
4459 IN OUT PHEADER_802_11 pHdr80211,
4466 IN PRTMP_ADAPTER pAd);
4469 IN PRTMP_ADAPTER pAd);
4475 #ifdef DOT11_N_SUPPORT
4477 IN PRTMP_ADAPTER pAd,
4479 #endif // DOT11_N_SUPPORT //
4481 ULONG BssTableSearch(
4486 ULONG BssSsidTableSearch(
4493 ULONG BssTableSearchWithSSID(
4500 VOID BssTableDeleteEntry(
4501 IN OUT PBSS_TABLE pTab,
4505 #ifdef DOT11_N_SUPPORT
4506 VOID BATableDeleteORIEntry(
4507 IN OUT PRTMP_ADAPTER pAd,
4508 IN BA_ORI_ENTRY *pBAORIEntry);
4510 VOID BATableDeleteRECEntry(
4511 IN OUT PRTMP_ADAPTER pAd,
4512 IN BA_REC_ENTRY *pBARECEntry);
4514 VOID BATableTearORIEntry(
4515 IN OUT PRTMP_ADAPTER pAd,
4518 IN BOOLEAN bForceDelete,
4521 VOID BATableTearRECEntry(
4522 IN OUT PRTMP_ADAPTER pAd,
4526 #endif // DOT11_N_SUPPORT //
4529 IN PRTMP_ADAPTER pAd,
4530 OUT PBSS_ENTRY pBss,
4535 IN USHORT BeaconPeriod,
4538 IN USHORT CapabilityInfo,
4540 IN UCHAR SupRateLen,
4542 IN UCHAR ExtRateLen,
4543 IN HT_CAPABILITY_IE *pHtCapability,
4544 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4545 IN UCHAR HtCapabilityLen,
4546 IN UCHAR AddHtInfoLen,
4547 IN UCHAR NewExtChanOffset,
4550 IN LARGE_INTEGER TimeStamp,
4552 IN PEDCA_PARM pEdcaParm,
4553 IN PQOS_CAPABILITY_PARM pQosCapability,
4554 IN PQBSS_LOAD_PARM pQbssLoad,
4555 IN USHORT LengthVIE,
4556 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4558 ULONG BssTableSetEntry(
4559 IN PRTMP_ADAPTER pAd,
4560 OUT PBSS_TABLE pTab,
4565 IN USHORT BeaconPeriod,
4568 IN USHORT CapabilityInfo,
4570 IN UCHAR SupRateLen,
4572 IN UCHAR ExtRateLen,
4573 IN HT_CAPABILITY_IE *pHtCapability,
4574 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4575 IN UCHAR HtCapabilityLen,
4576 IN UCHAR AddHtInfoLen,
4577 IN UCHAR NewExtChanOffset,
4580 IN LARGE_INTEGER TimeStamp,
4582 IN PEDCA_PARM pEdcaParm,
4583 IN PQOS_CAPABILITY_PARM pQosCapability,
4584 IN PQBSS_LOAD_PARM pQbssLoad,
4585 IN USHORT LengthVIE,
4586 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4588 #ifdef DOT11_N_SUPPORT
4589 VOID BATableInsertEntry(
4590 IN PRTMP_ADAPTER pAd,
4592 IN USHORT TimeOutValue,
4593 IN USHORT StartingSeq,
4596 IN UCHAR OriginatorStatus,
4597 IN BOOLEAN IsRecipient);
4599 #ifdef DOT11N_DRAFT3
4600 VOID Bss2040CoexistTimeOut(
4601 IN PVOID SystemSpecific1,
4602 IN PVOID FunctionContext,
4603 IN PVOID SystemSpecific2,
4604 IN PVOID SystemSpecific3);
4608 IN PRTMP_ADAPTER pAd);
4610 ULONG TriEventTableSetEntry(
4611 IN PRTMP_ADAPTER pAd,
4612 OUT TRIGGER_EVENT_TAB *Tab,
4614 IN HT_CAPABILITY_IE *pHtCapability,
4615 IN UCHAR HtCapabilityLen,
4617 IN UCHAR ChannelNo);
4619 VOID TriEventCounterMaintenance(
4620 IN PRTMP_ADAPTER pAd);
4621 #endif // DOT11N_DRAFT3 //
4622 #endif // DOT11_N_SUPPORT //
4624 VOID BssTableSsidSort(
4625 IN PRTMP_ADAPTER pAd,
4626 OUT BSS_TABLE *OutTab,
4630 VOID BssTableSortByRssi(
4631 IN OUT BSS_TABLE *OutTab);
4633 VOID BssCipherParse(
4634 IN OUT PBSS_ENTRY pBss);
4636 NDIS_STATUS MlmeQueueInit(
4637 IN MLME_QUEUE *Queue);
4639 VOID MlmeQueueDestroy(
4640 IN MLME_QUEUE *Queue);
4642 BOOLEAN MlmeEnqueue(
4643 IN PRTMP_ADAPTER pAd,
4649 BOOLEAN MlmeEnqueueForRecv(
4650 IN PRTMP_ADAPTER pAd,
4652 IN ULONG TimeStampHigh,
4653 IN ULONG TimeStampLow,
4662 BOOLEAN MlmeDequeue(
4663 IN MLME_QUEUE *Queue,
4664 OUT MLME_QUEUE_ELEM **Elem);
4666 VOID MlmeRestartStateMachine(
4667 IN PRTMP_ADAPTER pAd);
4669 BOOLEAN MlmeQueueEmpty(
4670 IN MLME_QUEUE *Queue);
4672 BOOLEAN MlmeQueueFull(
4673 IN MLME_QUEUE *Queue);
4675 BOOLEAN MsgTypeSubst(
4676 IN PRTMP_ADAPTER pAd,
4677 IN PFRAME_802_11 pFrame,
4681 VOID StateMachineInit(
4682 IN STATE_MACHINE *Sm,
4683 IN STATE_MACHINE_FUNC Trans[],
4686 IN STATE_MACHINE_FUNC DefFunc,
4690 VOID StateMachineSetAction(
4691 IN STATE_MACHINE *S,
4694 IN STATE_MACHINE_FUNC F);
4696 VOID StateMachinePerformAction(
4697 IN PRTMP_ADAPTER pAd,
4698 IN STATE_MACHINE *S,
4699 IN MLME_QUEUE_ELEM *Elem);
4702 IN PRTMP_ADAPTER pAd,
4703 IN MLME_QUEUE_ELEM *Elem);
4705 VOID AssocStateMachineInit(
4706 IN PRTMP_ADAPTER pAd,
4707 IN STATE_MACHINE *Sm,
4708 OUT STATE_MACHINE_FUNC Trans[]);
4710 VOID ReassocTimeout(
4711 IN PVOID SystemSpecific1,
4712 IN PVOID FunctionContext,
4713 IN PVOID SystemSpecific2,
4714 IN PVOID SystemSpecific3);
4717 IN PVOID SystemSpecific1,
4718 IN PVOID FunctionContext,
4719 IN PVOID SystemSpecific2,
4720 IN PVOID SystemSpecific3);
4722 VOID DisassocTimeout(
4723 IN PVOID SystemSpecific1,
4724 IN PVOID FunctionContext,
4725 IN PVOID SystemSpecific2,
4726 IN PVOID SystemSpecific3);
4728 //----------------------------------------------
4729 VOID MlmeDisassocReqAction(
4730 IN PRTMP_ADAPTER pAd,
4731 IN MLME_QUEUE_ELEM *Elem);
4733 VOID MlmeAssocReqAction(
4734 IN PRTMP_ADAPTER pAd,
4735 IN MLME_QUEUE_ELEM *Elem);
4737 VOID MlmeReassocReqAction(
4738 IN PRTMP_ADAPTER pAd,
4739 IN MLME_QUEUE_ELEM *Elem);
4741 VOID MlmeDisassocReqAction(
4742 IN PRTMP_ADAPTER pAd,
4743 IN MLME_QUEUE_ELEM *Elem);
4745 VOID PeerAssocRspAction(
4746 IN PRTMP_ADAPTER pAd,
4747 IN MLME_QUEUE_ELEM *Elem);
4749 VOID PeerReassocRspAction(
4750 IN PRTMP_ADAPTER pAd,
4751 IN MLME_QUEUE_ELEM *Elem);
4753 VOID PeerDisassocAction(
4754 IN PRTMP_ADAPTER pAd,
4755 IN MLME_QUEUE_ELEM *Elem);
4757 VOID DisassocTimeoutAction(
4758 IN PRTMP_ADAPTER pAd,
4759 IN MLME_QUEUE_ELEM *Elem);
4761 VOID AssocTimeoutAction(
4762 IN PRTMP_ADAPTER pAd,
4763 IN MLME_QUEUE_ELEM *Elem);
4765 VOID ReassocTimeoutAction(
4766 IN PRTMP_ADAPTER pAd,
4767 IN MLME_QUEUE_ELEM *Elem);
4770 IN PRTMP_ADAPTER pAd,
4773 VOID SwitchBetweenWepAndCkip(
4774 IN PRTMP_ADAPTER pAd);
4776 VOID InvalidStateWhenAssoc(
4777 IN PRTMP_ADAPTER pAd,
4778 IN MLME_QUEUE_ELEM *Elem);
4780 VOID InvalidStateWhenReassoc(
4781 IN PRTMP_ADAPTER pAd,
4782 IN MLME_QUEUE_ELEM *Elem);
4784 VOID InvalidStateWhenDisassociate(
4785 IN PRTMP_ADAPTER pAd,
4786 IN MLME_QUEUE_ELEM *Elem);
4789 VOID MlmeCntlConfirm(
4790 IN PRTMP_ADAPTER pAd,
4796 IN PRTMP_ADAPTER pAd);
4798 VOID ComposeNullFrame(
4799 IN PRTMP_ADAPTER pAd);
4802 IN PRTMP_ADAPTER pAd,
4804 IN USHORT CapabilityInfo,
4807 IN UCHAR SupRateLen,
4809 IN UCHAR ExtRateLen,
4810 IN PEDCA_PARM pEdcaParm,
4811 IN HT_CAPABILITY_IE *pHtCapability,
4812 IN UCHAR HtCapabilityLen,
4813 IN ADD_HT_INFO_IE *pAddHtInfo);
4815 VOID AuthStateMachineInit(
4816 IN PRTMP_ADAPTER pAd,
4817 IN PSTATE_MACHINE sm,
4818 OUT STATE_MACHINE_FUNC Trans[]);
4821 IN PVOID SystemSpecific1,
4822 IN PVOID FunctionContext,
4823 IN PVOID SystemSpecific2,
4824 IN PVOID SystemSpecific3);
4826 VOID MlmeAuthReqAction(
4827 IN PRTMP_ADAPTER pAd,
4828 IN MLME_QUEUE_ELEM *Elem);
4830 VOID PeerAuthRspAtSeq2Action(
4831 IN PRTMP_ADAPTER pAd,
4832 IN MLME_QUEUE_ELEM *Elem);
4834 VOID PeerAuthRspAtSeq4Action(
4835 IN PRTMP_ADAPTER pAd,
4836 IN MLME_QUEUE_ELEM *Elem);
4838 VOID AuthTimeoutAction(
4839 IN PRTMP_ADAPTER pAd,
4840 IN MLME_QUEUE_ELEM *Elem);
4843 IN PRTMP_ADAPTER pAd,
4846 VOID MlmeDeauthReqAction(
4847 IN PRTMP_ADAPTER pAd,
4848 IN MLME_QUEUE_ELEM *Elem);
4850 VOID InvalidStateWhenAuth(
4851 IN PRTMP_ADAPTER pAd,
4852 IN MLME_QUEUE_ELEM *Elem);
4854 //=============================================
4856 VOID AuthRspStateMachineInit(
4857 IN PRTMP_ADAPTER pAd,
4858 IN PSTATE_MACHINE Sm,
4859 IN STATE_MACHINE_FUNC Trans[]);
4861 VOID PeerDeauthAction(
4862 IN PRTMP_ADAPTER pAd,
4863 IN MLME_QUEUE_ELEM *Elem);
4865 VOID PeerAuthSimpleRspGenAndSend(
4866 IN PRTMP_ADAPTER pAd,
4867 IN PHEADER_802_11 pHdr80211,
4874 // Private routines in dls.c
4877 #ifdef CONFIG_STA_SUPPORT
4878 #ifdef QOS_DLS_SUPPORT
4879 void DlsStateMachineInit(
4880 IN PRTMP_ADAPTER pAd,
4881 IN STATE_MACHINE *Sm,
4882 OUT STATE_MACHINE_FUNC Trans[]);
4884 VOID MlmeDlsReqAction(
4885 IN PRTMP_ADAPTER pAd,
4886 IN MLME_QUEUE_ELEM *Elem);
4888 VOID PeerDlsReqAction(
4889 IN PRTMP_ADAPTER pAd,
4890 IN MLME_QUEUE_ELEM *Elem);
4892 VOID PeerDlsRspAction(
4893 IN PRTMP_ADAPTER pAd,
4894 IN MLME_QUEUE_ELEM *Elem);
4896 VOID MlmeDlsTearDownAction(
4897 IN PRTMP_ADAPTER pAd,
4898 IN MLME_QUEUE_ELEM *Elem);
4900 VOID PeerDlsTearDownAction(
4901 IN PRTMP_ADAPTER pAd,
4902 IN MLME_QUEUE_ELEM *Elem);
4904 VOID RTMPCheckDLSTimeOut(
4905 IN PRTMP_ADAPTER pAd);
4907 BOOLEAN RTMPRcvFrameDLSCheck(
4908 IN PRTMP_ADAPTER pAd,
4909 IN PHEADER_802_11 pHeader,
4911 IN PRT28XX_RXD_STRUC pRxD);
4913 INT RTMPCheckDLSFrame(
4914 IN PRTMP_ADAPTER pAd,
4917 VOID RTMPSendDLSTearDownFrame(
4918 IN PRTMP_ADAPTER pAd,
4921 NDIS_STATUS RTMPSendSTAKeyRequest(
4922 IN PRTMP_ADAPTER pAd,
4925 NDIS_STATUS RTMPSendSTAKeyHandShake(
4926 IN PRTMP_ADAPTER pAd,
4929 VOID DlsTimeoutAction(
4930 IN PVOID SystemSpecific1,
4931 IN PVOID FunctionContext,
4932 IN PVOID SystemSpecific2,
4933 IN PVOID SystemSpecific3);
4935 BOOLEAN MlmeDlsReqSanity(
4936 IN PRTMP_ADAPTER pAd,
4939 OUT PRT_802_11_DLS *pDLS,
4940 OUT PUSHORT pReason);
4942 INT Set_DlsEntryInfo_Display_Proc(
4943 IN PRTMP_ADAPTER pAd,
4946 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4947 IN PRTMP_ADAPTER pAd,
4949 IN UINT DlsEntryIdx);
4951 BOOLEAN MacTableDeleteDlsEntry(
4952 IN PRTMP_ADAPTER pAd,
4956 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4957 IN PRTMP_ADAPTER pAd,
4959 IN BOOLEAN bResetIdelCount);
4961 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4962 IN PRTMP_ADAPTER pAd,
4965 IN BOOLEAN bResetIdelCount);
4967 INT Set_DlsAddEntry_Proc(
4968 IN PRTMP_ADAPTER pAd,
4971 INT Set_DlsTearDownEntry_Proc(
4972 IN PRTMP_ADAPTER pAd,
4974 #endif // QOS_DLS_SUPPORT //
4975 #endif // CONFIG_STA_SUPPORT //
4977 #ifdef QOS_DLS_SUPPORT
4978 BOOLEAN PeerDlsReqSanity(
4979 IN PRTMP_ADAPTER pAd,
4984 OUT USHORT *pCapabilityInfo,
4985 OUT USHORT *pDlsTimeout,
4986 OUT UCHAR *pRatesLen,
4988 OUT UCHAR *pHtCapabilityLen,
4989 OUT HT_CAPABILITY_IE *pHtCapability);
4991 BOOLEAN PeerDlsRspSanity(
4992 IN PRTMP_ADAPTER pAd,
4997 OUT USHORT *pCapabilityInfo,
4998 OUT USHORT *pStatus,
4999 OUT UCHAR *pRatesLen,
5001 OUT UCHAR *pHtCapabilityLen,
5002 OUT HT_CAPABILITY_IE *pHtCapability);
5004 BOOLEAN PeerDlsTearDownSanity(
5005 IN PRTMP_ADAPTER pAd,
5010 OUT USHORT *pReason);
5011 #endif // QOS_DLS_SUPPORT //
5013 //========================================
5015 VOID SyncStateMachineInit(
5016 IN PRTMP_ADAPTER pAd,
5017 IN STATE_MACHINE *Sm,
5018 OUT STATE_MACHINE_FUNC Trans[]);
5021 IN PVOID SystemSpecific1,
5022 IN PVOID FunctionContext,
5023 IN PVOID SystemSpecific2,
5024 IN PVOID SystemSpecific3);
5027 IN PVOID SystemSpecific1,
5028 IN PVOID FunctionContext,
5029 IN PVOID SystemSpecific2,
5030 IN PVOID SystemSpecific3);
5032 VOID MlmeScanReqAction(
5033 IN PRTMP_ADAPTER pAd,
5034 IN MLME_QUEUE_ELEM *Elem);
5036 VOID InvalidStateWhenScan(
5037 IN PRTMP_ADAPTER pAd,
5038 IN MLME_QUEUE_ELEM *Elem);
5040 VOID InvalidStateWhenJoin(
5041 IN PRTMP_ADAPTER pAd,
5042 IN MLME_QUEUE_ELEM *Elem);
5044 VOID InvalidStateWhenStart(
5045 IN PRTMP_ADAPTER pAd,
5046 IN MLME_QUEUE_ELEM *Elem);
5049 IN PRTMP_ADAPTER pAd,
5050 IN MLME_QUEUE_ELEM *Elem);
5052 VOID EnqueueProbeRequest(
5053 IN PRTMP_ADAPTER pAd);
5055 BOOLEAN ScanRunning(
5056 IN PRTMP_ADAPTER pAd);
5057 //=========================================
5060 IN PRTMP_ADAPTER pAd,
5061 IN STATE_MACHINE *S,
5062 OUT STATE_MACHINE_FUNC Trans[]);
5064 VOID MlmeCntlMachinePerformAction(
5065 IN PRTMP_ADAPTER pAd,
5066 IN STATE_MACHINE *S,
5067 IN MLME_QUEUE_ELEM *Elem);
5070 IN PRTMP_ADAPTER pAd,
5071 IN MLME_QUEUE_ELEM *Elem);
5073 VOID CntlOidScanProc(
5074 IN PRTMP_ADAPTER pAd,
5075 IN MLME_QUEUE_ELEM *Elem);
5077 VOID CntlOidSsidProc(
5078 IN PRTMP_ADAPTER pAd,
5079 IN MLME_QUEUE_ELEM * Elem);
5081 VOID CntlOidRTBssidProc(
5082 IN PRTMP_ADAPTER pAd,
5083 IN MLME_QUEUE_ELEM * Elem);
5085 VOID CntlMlmeRoamingProc(
5086 IN PRTMP_ADAPTER pAd,
5087 IN MLME_QUEUE_ELEM * Elem);
5089 VOID CntlWaitDisassocProc(
5090 IN PRTMP_ADAPTER pAd,
5091 IN MLME_QUEUE_ELEM *Elem);
5093 VOID CntlWaitJoinProc(
5094 IN PRTMP_ADAPTER pAd,
5095 IN MLME_QUEUE_ELEM *Elem);
5097 VOID CntlWaitReassocProc(
5098 IN PRTMP_ADAPTER pAd,
5099 IN MLME_QUEUE_ELEM *Elem);
5101 VOID CntlWaitStartProc(
5102 IN PRTMP_ADAPTER pAd,
5103 IN MLME_QUEUE_ELEM *Elem);
5105 VOID CntlWaitAuthProc(
5106 IN PRTMP_ADAPTER pAd,
5107 IN MLME_QUEUE_ELEM *Elem);
5109 VOID CntlWaitAuthProc2(
5110 IN PRTMP_ADAPTER pAd,
5111 IN MLME_QUEUE_ELEM *Elem);
5113 VOID CntlWaitAssocProc(
5114 IN PRTMP_ADAPTER pAd,
5115 IN MLME_QUEUE_ELEM *Elem);
5117 #ifdef QOS_DLS_SUPPORT
5118 VOID CntlOidDLSSetupProc(
5119 IN PRTMP_ADAPTER pAd,
5120 IN MLME_QUEUE_ELEM *Elem);
5121 #endif // QOS_DLS_SUPPORT //
5124 IN PRTMP_ADAPTER pAd,
5128 IN PRTMP_ADAPTER pAd,
5129 IN BOOLEAN IsReqFromAP);
5131 VOID IterateOnBssTab(
5132 IN PRTMP_ADAPTER pAd);
5134 VOID IterateOnBssTab2(
5135 IN PRTMP_ADAPTER pAd);;
5138 IN PRTMP_ADAPTER pAd,
5139 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
5143 IN PRTMP_ADAPTER pAd,
5144 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
5146 IN USHORT CapabilityInfo,
5148 IN USHORT ListenIntv);
5151 IN PRTMP_ADAPTER pAd,
5152 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5158 VOID DisassocParmFill(
5159 IN PRTMP_ADAPTER pAd,
5160 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5165 IN PRTMP_ADAPTER pAd,
5166 IN OUT MLME_START_REQ_STRUCT *StartReq,
5171 IN PRTMP_ADAPTER pAd,
5172 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5177 IN PRTMP_ADAPTER pAd);
5179 VOID EnqueueBeaconFrame(
5180 IN PRTMP_ADAPTER pAd);
5182 VOID MlmeJoinReqAction(
5183 IN PRTMP_ADAPTER pAd,
5184 IN MLME_QUEUE_ELEM *Elem);
5186 VOID MlmeScanReqAction(
5187 IN PRTMP_ADAPTER pAd,
5188 IN MLME_QUEUE_ELEM *Elem);
5190 VOID MlmeStartReqAction(
5191 IN PRTMP_ADAPTER pAd,
5192 IN MLME_QUEUE_ELEM *Elem);
5194 VOID ScanTimeoutAction(
5195 IN PRTMP_ADAPTER pAd,
5196 IN MLME_QUEUE_ELEM *Elem);
5198 VOID BeaconTimeoutAtJoinAction(
5199 IN PRTMP_ADAPTER pAd,
5200 IN MLME_QUEUE_ELEM *Elem);
5202 VOID PeerBeaconAtScanAction(
5203 IN PRTMP_ADAPTER pAd,
5204 IN MLME_QUEUE_ELEM *Elem);
5206 VOID PeerBeaconAtJoinAction(
5207 IN PRTMP_ADAPTER pAd,
5208 IN MLME_QUEUE_ELEM *Elem);
5211 IN PRTMP_ADAPTER pAd,
5212 IN MLME_QUEUE_ELEM *Elem);
5214 VOID PeerProbeReqAction(
5215 IN PRTMP_ADAPTER pAd,
5216 IN MLME_QUEUE_ELEM *Elem);
5218 VOID ScanNextChannel(
5219 IN PRTMP_ADAPTER pAd);
5221 ULONG MakeIbssBeacon(
5222 IN PRTMP_ADAPTER pAd);
5224 VOID CCXAdjacentAPReport(
5225 IN PRTMP_ADAPTER pAd);
5227 BOOLEAN MlmeScanReqSanity(
5228 IN PRTMP_ADAPTER pAd,
5234 OUT UCHAR *ScanType);
5236 BOOLEAN PeerBeaconAndProbeRspSanity(
5237 IN PRTMP_ADAPTER pAd,
5240 IN UCHAR MsgChannel,
5244 OUT UCHAR *pSsidLen,
5245 OUT UCHAR *pBssType,
5246 OUT USHORT *pBeaconPeriod,
5247 OUT UCHAR *pChannel,
5248 OUT UCHAR *pNewChannel,
5249 OUT LARGE_INTEGER *pTimestamp,
5250 OUT CF_PARM *pCfParm,
5251 OUT USHORT *pAtimWin,
5252 OUT USHORT *pCapabilityInfo,
5254 OUT UCHAR *pDtimCount,
5255 OUT UCHAR *pDtimPeriod,
5256 OUT UCHAR *pBcastFlag,
5257 OUT UCHAR *pMessageToMe,
5258 OUT UCHAR SupRate[],
5259 OUT UCHAR *pSupRateLen,
5260 OUT UCHAR ExtRate[],
5261 OUT UCHAR *pExtRateLen,
5262 OUT UCHAR *pCkipFlag,
5263 OUT UCHAR *pAironetCellPowerLimit,
5264 OUT PEDCA_PARM pEdcaParm,
5265 OUT PQBSS_LOAD_PARM pQbssLoad,
5266 OUT PQOS_CAPABILITY_PARM pQosCapability,
5267 OUT ULONG *pRalinkIe,
5268 OUT UCHAR *pHtCapabilityLen,
5269 #ifdef CONFIG_STA_SUPPORT
5270 OUT UCHAR *pPreNHtCapabilityLen,
5271 #endif // CONFIG_STA_SUPPORT //
5272 OUT HT_CAPABILITY_IE *pHtCapability,
5273 OUT UCHAR *AddHtInfoLen,
5274 OUT ADD_HT_INFO_IE *AddHtInfo,
5275 OUT UCHAR *NewExtChannel,
5276 OUT USHORT *LengthVIE,
5277 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5279 BOOLEAN PeerAddBAReqActionSanity(
5280 IN PRTMP_ADAPTER pAd,
5285 BOOLEAN PeerAddBARspActionSanity(
5286 IN PRTMP_ADAPTER pAd,
5290 BOOLEAN PeerDelBAActionSanity(
5291 IN PRTMP_ADAPTER pAd,
5296 BOOLEAN MlmeAssocReqSanity(
5297 IN PRTMP_ADAPTER pAd,
5301 OUT USHORT *CapabilityInfo,
5303 OUT USHORT *ListenIntv);
5305 BOOLEAN MlmeAuthReqSanity(
5306 IN PRTMP_ADAPTER pAd,
5313 BOOLEAN MlmeStartReqSanity(
5314 IN PRTMP_ADAPTER pAd,
5318 OUT UCHAR *Ssidlen);
5320 BOOLEAN PeerAuthSanity(
5321 IN PRTMP_ADAPTER pAd,
5328 OUT CHAR ChlgText[]);
5330 BOOLEAN PeerAssocRspSanity(
5331 IN PRTMP_ADAPTER pAd,
5335 OUT USHORT *pCapabilityInfo,
5336 OUT USHORT *pStatus,
5338 OUT UCHAR SupRate[],
5339 OUT UCHAR *pSupRateLen,
5340 OUT UCHAR ExtRate[],
5341 OUT UCHAR *pExtRateLen,
5342 OUT HT_CAPABILITY_IE *pHtCapability,
5343 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5344 OUT UCHAR *pHtCapabilityLen,
5345 OUT UCHAR *pAddHtInfoLen,
5346 OUT UCHAR *pNewExtChannelOffset,
5347 OUT PEDCA_PARM pEdcaParm,
5348 OUT UCHAR *pCkipFlag);
5350 BOOLEAN PeerDisassocSanity(
5351 IN PRTMP_ADAPTER pAd,
5355 OUT USHORT *Reason);
5357 BOOLEAN PeerWpaMessageSanity(
5358 IN PRTMP_ADAPTER pAd,
5359 IN PEAPOL_PACKET pMsg,
5362 IN MAC_TABLE_ENTRY *pEntry);
5364 BOOLEAN PeerDeauthSanity(
5365 IN PRTMP_ADAPTER pAd,
5369 OUT USHORT *Reason);
5371 BOOLEAN PeerProbeReqSanity(
5372 IN PRTMP_ADAPTER pAd,
5377 OUT UCHAR *pSsidLen);
5383 OUT UCHAR *BcastFlag,
5384 OUT UCHAR *DtimCount,
5385 OUT UCHAR *DtimPeriod,
5386 OUT UCHAR *MessageToMe);
5388 UCHAR ChannelSanity(
5389 IN PRTMP_ADAPTER pAd,
5392 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5393 IN PBSS_ENTRY pBss);
5395 BOOLEAN MlmeDelBAReqSanity(
5396 IN PRTMP_ADAPTER pAd,
5400 BOOLEAN MlmeAddBAReqSanity(
5401 IN PRTMP_ADAPTER pAd,
5406 ULONG MakeOutgoingFrame(
5408 OUT ULONG *Length, ...);
5411 IN PRTMP_ADAPTER pAd,
5415 IN PRTMP_ADAPTER pAd);
5417 VOID AsicUpdateAutoFallBackTable(
5418 IN PRTMP_ADAPTER pAd,
5421 VOID MlmePeriodicExec(
5422 IN PVOID SystemSpecific1,
5423 IN PVOID FunctionContext,
5424 IN PVOID SystemSpecific2,
5425 IN PVOID SystemSpecific3);
5428 IN PVOID SystemSpecific1,
5429 IN PVOID FunctionContext,
5430 IN PVOID SystemSpecific2,
5431 IN PVOID SystemSpecific3);
5434 IN PVOID SystemSpecific1,
5435 IN PVOID FunctionContext,
5436 IN PVOID SystemSpecific2,
5437 IN PVOID SystemSpecific3);
5439 VOID STAMlmePeriodicExec(
5443 IN PRTMP_ADAPTER pAd);
5445 VOID MlmeAutoReconnectLastSSID(
5446 IN PRTMP_ADAPTER pAd);
5448 BOOLEAN MlmeValidateSSID(
5452 VOID MlmeCheckForRoaming(
5453 IN PRTMP_ADAPTER pAd,
5456 VOID MlmeCheckForFastRoaming(
5457 IN PRTMP_ADAPTER pAd,
5460 VOID MlmeDynamicTxRateSwitching(
5461 IN PRTMP_ADAPTER pAd);
5464 IN PRTMP_ADAPTER pAd,
5465 IN PMAC_TABLE_ENTRY pEntry,
5466 IN PRTMP_TX_RATE_SWITCH pTxRate);
5468 VOID MlmeSelectTxRateTable(
5469 IN PRTMP_ADAPTER pAd,
5470 IN PMAC_TABLE_ENTRY pEntry,
5472 IN PUCHAR pTableSize,
5473 IN PUCHAR pInitTxRateIdx);
5475 VOID MlmeCalculateChannelQuality(
5476 IN PRTMP_ADAPTER pAd,
5479 VOID MlmeCheckPsmChange(
5480 IN PRTMP_ADAPTER pAd,
5484 IN PRTMP_ADAPTER pAd,
5487 VOID MlmeSetTxPreamble(
5488 IN PRTMP_ADAPTER pAd,
5489 IN USHORT TxPreamble);
5491 VOID UpdateBasicRateBitmap(
5492 IN PRTMP_ADAPTER pAd);
5494 VOID MlmeUpdateTxRates(
5495 IN PRTMP_ADAPTER pAd,
5499 #ifdef DOT11_N_SUPPORT
5500 VOID MlmeUpdateHtTxRates(
5501 IN PRTMP_ADAPTER pAd,
5503 #endif // DOT11_N_SUPPORT //
5505 VOID RTMPCheckRates(
5506 IN PRTMP_ADAPTER pAd,
5507 IN OUT UCHAR SupRate[],
5508 IN OUT UCHAR *SupRateLen);
5510 #ifdef CONFIG_STA_SUPPORT
5511 BOOLEAN RTMPCheckChannel(
5512 IN PRTMP_ADAPTER pAd,
5513 IN UCHAR CentralChannel,
5515 #endif // CONFIG_STA_SUPPORT //
5517 BOOLEAN RTMPCheckHt(
5518 IN PRTMP_ADAPTER pAd,
5520 IN OUT HT_CAPABILITY_IE *pHtCapability,
5521 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5523 VOID StaQuickResponeForRateUpExec(
5524 IN PVOID SystemSpecific1,
5525 IN PVOID FunctionContext,
5526 IN PVOID SystemSpecific2,
5527 IN PVOID SystemSpecific3);
5529 VOID AsicBbpTuning1(
5530 IN PRTMP_ADAPTER pAd);
5532 VOID AsicBbpTuning2(
5533 IN PRTMP_ADAPTER pAd);
5535 VOID RTMPUpdateMlmeRate(
5536 IN PRTMP_ADAPTER pAd);
5539 IN PRTMP_ADAPTER pAd,
5545 IN PRTMP_ADAPTER pAd,
5548 VOID AsicEvaluateRxAnt(
5549 IN PRTMP_ADAPTER pAd);
5551 VOID AsicRxAntEvalTimeout(
5552 IN PVOID SystemSpecific1,
5553 IN PVOID FunctionContext,
5554 IN PVOID SystemSpecific2,
5555 IN PVOID SystemSpecific3);
5557 VOID APSDPeriodicExec(
5558 IN PVOID SystemSpecific1,
5559 IN PVOID FunctionContext,
5560 IN PVOID SystemSpecific2,
5561 IN PVOID SystemSpecific3);
5563 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5564 IN PRTMP_ADAPTER pAd,
5565 IN PMAC_TABLE_ENTRY pEntry);
5567 UCHAR RTMPStaFixedTxMode(
5568 IN PRTMP_ADAPTER pAd,
5569 IN PMAC_TABLE_ENTRY pEntry);
5571 VOID RTMPUpdateLegacyTxSetting(
5572 UCHAR fixed_tx_mode,
5573 PMAC_TABLE_ENTRY pEntry);
5575 BOOLEAN RTMPAutoRateSwitchCheck(
5576 IN PRTMP_ADAPTER pAd);
5578 NDIS_STATUS MlmeInit(
5579 IN PRTMP_ADAPTER pAd);
5582 IN PRTMP_ADAPTER pAd);
5585 IN PRTMP_ADAPTER pAd);
5587 VOID MlmeResetRalinkCounters(
5588 IN PRTMP_ADAPTER pAd);
5590 VOID BuildChannelList(
5591 IN PRTMP_ADAPTER pAd);
5594 IN PRTMP_ADAPTER pAd);
5597 IN PRTMP_ADAPTER pAd,
5600 VOID ChangeToCellPowerLimit(
5601 IN PRTMP_ADAPTER pAd,
5602 IN UCHAR AironetCellPowerLimit);
5605 IN PRTMP_ADAPTER pAd,
5609 IN PRTMP_ADAPTER pAd,
5613 IN PRTMP_ADAPTER pAd);
5616 IN PRTMP_ADAPTER pAd,
5621 IN PRTMP_ADAPTER pAd);
5624 IN PRTMP_ADAPTER pAd);
5627 IN PRTMP_ADAPTER pAd);
5629 USHORT RTMP_EEPROM_READ16(
5630 IN PRTMP_ADAPTER pAd,
5633 VOID RTMP_EEPROM_WRITE16(
5634 IN PRTMP_ADAPTER pAd,
5639 // Prototypes of function definition in rtmp_tkip.c
5641 VOID RTMPInitTkipEngine(
5642 IN PRTMP_ADAPTER pAd,
5651 VOID RTMPInitMICEngine(
5652 IN PRTMP_ADAPTER pAd,
5656 IN UCHAR UserPriority,
5659 BOOLEAN RTMPTkipCompareMICValue(
5660 IN PRTMP_ADAPTER pAd,
5665 IN UCHAR UserPriority,
5668 VOID RTMPCalculateMICValue(
5669 IN PRTMP_ADAPTER pAd,
5670 IN PNDIS_PACKET pPacket,
5672 IN PCIPHER_KEY pKey,
5675 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5676 IN PRTMP_ADAPTER pAd,
5684 VOID RTMPTkipAppendByte(
5685 IN PTKIP_KEY_INFO pTkip,
5688 VOID RTMPTkipAppend(
5689 IN PTKIP_KEY_INFO pTkip,
5693 VOID RTMPTkipGetMIC(
5694 IN PTKIP_KEY_INFO pTkip);
5696 BOOLEAN RTMPSoftDecryptTKIP(
5697 IN PRTMP_ADAPTER pAd,
5699 IN ULONG DataByteCnt,
5700 IN UCHAR UserPriority,
5701 IN PCIPHER_KEY pWpaKey);
5703 BOOLEAN RTMPSoftDecryptAES(
5704 IN PRTMP_ADAPTER pAd,
5706 IN ULONG DataByteCnt,
5707 IN PCIPHER_KEY pWpaKey);
5710 // Prototypes of function definition in cmm_info.c
5712 NDIS_STATUS RTMPWPARemoveKeyProc(
5713 IN PRTMP_ADAPTER pAd,
5716 VOID RTMPWPARemoveAllKeys(
5717 IN PRTMP_ADAPTER pAd);
5719 BOOLEAN RTMPCheckStrPrintAble(
5723 VOID RTMPSetPhyMode(
5724 IN PRTMP_ADAPTER pAd,
5727 VOID RTMPUpdateHTIE(
5728 IN RT_HT_CAPABILITY *pRtHt,
5730 OUT HT_CAPABILITY_IE *pHtCapability,
5731 OUT ADD_HT_INFO_IE *pAddHtInfo);
5733 VOID RTMPAddWcidAttributeEntry(
5734 IN PRTMP_ADAPTER pAd,
5738 IN MAC_TABLE_ENTRY *pEntry);
5740 CHAR *GetEncryptType(
5746 VOID RTMPIoctlGetSiteSurvey(
5747 IN PRTMP_ADAPTER pAdapter,
5748 IN struct iwreq *wrq);
5750 VOID RTMPIoctlGetMacTable(
5751 IN PRTMP_ADAPTER pAd,
5752 IN struct iwreq *wrq);
5754 VOID RTMPIndicateWPA2Status(
5755 IN PRTMP_ADAPTER pAdapter);
5757 VOID RTMPOPModeSwitching(
5758 IN PRTMP_ADAPTER pAd);
5760 #ifdef CONFIG_STA_SUPPORT
5761 VOID RTMPAddBSSIDCipher(
5762 IN PRTMP_ADAPTER pAd,
5764 IN PNDIS_802_11_KEY pKey,
5765 IN UCHAR CipherAlg);
5766 #endif // CONFIG_STA_SUPPORT //
5768 #ifdef DOT11_N_SUPPORT
5770 IN PRTMP_ADAPTER pAd,
5771 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5773 VOID RTMPSetIndividualHT(
5774 IN PRTMP_ADAPTER pAd,
5776 #endif // DOT11_N_SUPPORT //
5778 VOID RTMPSendWirelessEvent(
5779 IN PRTMP_ADAPTER pAd,
5780 IN USHORT Event_flag,
5785 VOID NICUpdateCntlCounters(
5786 IN PRTMP_ADAPTER pAd,
5787 IN PHEADER_802_11 pHeader,
5789 IN PRXWI_STRUC pRxWI);
5791 // prototype in wpa.c
5793 BOOLEAN WpaMsgTypeSubst(
5797 VOID WpaPskStateMachineInit(
5798 IN PRTMP_ADAPTER pAd,
5799 IN STATE_MACHINE *S,
5800 OUT STATE_MACHINE_FUNC Trans[]);
5802 VOID WpaEAPOLKeyAction(
5803 IN PRTMP_ADAPTER pAd,
5804 IN MLME_QUEUE_ELEM *Elem);
5806 VOID WpaPairMsg1Action(
5807 IN PRTMP_ADAPTER pAd,
5808 IN MLME_QUEUE_ELEM *Elem);
5810 VOID WpaPairMsg3Action(
5811 IN PRTMP_ADAPTER pAd,
5812 IN MLME_QUEUE_ELEM *Elem);
5814 VOID WpaGroupMsg1Action(
5815 IN PRTMP_ADAPTER pAd,
5816 IN MLME_QUEUE_ELEM *Elem);
5818 VOID WpaMacHeaderInit(
5819 IN PRTMP_ADAPTER pAd,
5820 IN OUT PHEADER_802_11 pHdr80211,
5824 VOID Wpa2PairMsg1Action(
5825 IN PRTMP_ADAPTER pAd,
5826 IN MLME_QUEUE_ELEM *Elem);
5828 VOID Wpa2PairMsg3Action(
5829 IN PRTMP_ADAPTER pAd,
5830 IN MLME_QUEUE_ELEM *Elem);
5832 BOOLEAN ParseKeyData(
5833 IN PRTMP_ADAPTER pAd,
5835 IN UCHAR KeyDataLen,
5836 IN UCHAR bPairewise);
5838 VOID RTMPToWirelessSta(
5839 IN PRTMP_ADAPTER pAd,
5840 IN PUCHAR pHeader802_3,
5844 IN BOOLEAN is4wayFrame);
5872 IN PRTMP_ADAPTER pAd,
5882 IN PRTMP_ADAPTER pAd,
5887 // prototype in aironet.c
5889 VOID AironetStateMachineInit(
5890 IN PRTMP_ADAPTER pAd,
5891 IN STATE_MACHINE *S,
5892 OUT STATE_MACHINE_FUNC Trans[]);
5894 VOID AironetMsgAction(
5895 IN PRTMP_ADAPTER pAd,
5896 IN MLME_QUEUE_ELEM *Elem);
5898 VOID AironetRequestAction(
5899 IN PRTMP_ADAPTER pAd,
5900 IN MLME_QUEUE_ELEM *Elem);
5902 VOID ChannelLoadRequestAction(
5903 IN PRTMP_ADAPTER pAd,
5906 VOID NoiseHistRequestAction(
5907 IN PRTMP_ADAPTER pAd,
5910 VOID BeaconRequestAction(
5911 IN PRTMP_ADAPTER pAd,
5914 VOID AironetReportAction(
5915 IN PRTMP_ADAPTER pAd,
5916 IN MLME_QUEUE_ELEM *Elem);
5918 VOID ChannelLoadReportAction(
5919 IN PRTMP_ADAPTER pAd,
5922 VOID NoiseHistReportAction(
5923 IN PRTMP_ADAPTER pAd,
5926 VOID AironetFinalReportAction(
5927 IN PRTMP_ADAPTER pAd);
5929 VOID BeaconReportAction(
5930 IN PRTMP_ADAPTER pAd,
5933 VOID AironetAddBeaconReport(
5934 IN PRTMP_ADAPTER pAd,
5936 IN PMLME_QUEUE_ELEM pElem);
5938 VOID AironetCreateBeaconReportFromBssTable(
5939 IN PRTMP_ADAPTER pAd);
5941 VOID DBGPRINT_TX_RING(
5942 IN PRTMP_ADAPTER pAd,
5945 VOID DBGPRINT_RX_RING(
5946 IN PRTMP_ADAPTER pAd);
5949 IN PRTMP_ADAPTER pAd,
5951 IN UCHAR RssiNumber);
5954 #ifdef DOT11N_DRAFT3
5955 VOID BuildEffectedChannelList(
5956 IN PRTMP_ADAPTER pAd);
5957 #endif // DOT11N_DRAFT3 //
5960 VOID APAsicEvaluateRxAnt(
5961 IN PRTMP_ADAPTER pAd);
5964 VOID APAsicRxAntEvalTimeout(
5965 IN PRTMP_ADAPTER pAd);
5968 // function prototype in cmm_wpa.c
5970 BOOLEAN RTMPCheckWPAframe(
5971 IN PRTMP_ADAPTER pAd,
5972 IN PMAC_TABLE_ENTRY pEntry,
5974 IN ULONG DataByteCount,
5975 IN UCHAR FromWhichBSSID);
5977 VOID AES_GTK_KEY_UNWRAP(
5979 OUT UCHAR *plaintext,
5981 IN UCHAR *ciphertext);
5983 BOOLEAN RTMPCheckRSNIE(
5984 IN PRTMP_ADAPTER pAd,
5987 IN MAC_TABLE_ENTRY *pEntry,
5990 BOOLEAN RTMPParseEapolKeyData(
5991 IN PRTMP_ADAPTER pAd,
5993 IN UCHAR KeyDataLen,
5994 IN UCHAR GroupKeyIndex,
5997 IN MAC_TABLE_ENTRY *pEntry);
5999 VOID ConstructEapolMsg(
6000 IN PRTMP_ADAPTER pAd,
6001 IN UCHAR PeerAuthMode,
6002 IN UCHAR PeerWepStatus,
6003 IN UCHAR MyGroupKeyWepStatus,
6005 IN UCHAR DefaultKeyIdx,
6006 IN UCHAR *ReplayCounter,
6013 OUT PEAPOL_PACKET pMsg);
6016 IN PRTMP_ADAPTER pAd,
6017 IN UCHAR PeerWepStatus,
6019 OUT PEAPOL_PACKET pMsg);
6021 NDIS_STATUS RTMPSoftDecryptBroadCastData(
6022 IN PRTMP_ADAPTER pAd,
6024 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
6025 IN PCIPHER_KEY pShard_key);
6027 VOID ConstructEapolKeyData(
6028 IN PRTMP_ADAPTER pAd,
6029 IN UCHAR PeerAuthMode,
6030 IN UCHAR PeerWepStatus,
6031 IN UCHAR GroupKeyWepStatus,
6033 IN UCHAR DefaultKeyIdx,
6034 IN BOOLEAN bWPA2Capable,
6039 OUT PEAPOL_PACKET pMsg);
6042 IN PRTMP_ADAPTER pAd,
6048 // function prototype in ap_wpa.c
6051 BOOLEAN APWpaMsgTypeSubst(
6055 MAC_TABLE_ENTRY *PACInquiry(
6056 IN PRTMP_ADAPTER pAd,
6059 BOOLEAN RTMPCheckMcast(
6060 IN PRTMP_ADAPTER pAd,
6061 IN PEID_STRUCT eid_ptr,
6062 IN MAC_TABLE_ENTRY *pEntry);
6064 BOOLEAN RTMPCheckUcast(
6065 IN PRTMP_ADAPTER pAd,
6066 IN PEID_STRUCT eid_ptr,
6067 IN MAC_TABLE_ENTRY *pEntry);
6069 BOOLEAN RTMPCheckAUTH(
6070 IN PRTMP_ADAPTER pAd,
6071 IN PEID_STRUCT eid_ptr,
6072 IN MAC_TABLE_ENTRY *pEntry);
6074 VOID WPAStart4WayHS(
6075 IN PRTMP_ADAPTER pAd,
6076 IN MAC_TABLE_ENTRY *pEntry,
6077 IN ULONG TimeInterval);
6079 VOID WPAStart2WayGroupHS(
6080 IN PRTMP_ADAPTER pAd,
6081 IN MAC_TABLE_ENTRY *pEntry);
6083 VOID APWpaEAPPacketAction(
6084 IN PRTMP_ADAPTER pAd,
6085 IN MLME_QUEUE_ELEM *Elem);
6087 VOID APWpaEAPOLStartAction(
6088 IN PRTMP_ADAPTER pAd,
6089 IN MLME_QUEUE_ELEM *Elem);
6091 VOID APWpaEAPOLLogoffAction(
6092 IN PRTMP_ADAPTER pAd,
6093 IN MLME_QUEUE_ELEM *Elem);
6095 VOID APWpaEAPOLKeyAction(
6096 IN PRTMP_ADAPTER pAd,
6097 IN MLME_QUEUE_ELEM *Elem);
6099 VOID APWpaEAPOLASFAlertAction(
6100 IN PRTMP_ADAPTER pAd,
6101 IN MLME_QUEUE_ELEM *Elem);
6103 VOID HandleCounterMeasure(
6104 IN PRTMP_ADAPTER pAd,
6105 IN MAC_TABLE_ENTRY *pEntry);
6107 VOID PeerPairMsg2Action(
6108 IN PRTMP_ADAPTER pAd,
6109 IN MAC_TABLE_ENTRY *pEntry,
6110 IN MLME_QUEUE_ELEM *Elem);
6112 VOID PeerPairMsg4Action(
6113 IN PRTMP_ADAPTER pAd,
6114 IN MAC_TABLE_ENTRY *pEntry,
6115 IN MLME_QUEUE_ELEM *Elem);
6118 IN PVOID SystemSpecific1,
6119 IN PVOID FunctionContext,
6120 IN PVOID SystemSpecific2,
6121 IN PVOID SystemSpecific3);
6124 IN PVOID SystemSpecific1,
6125 IN PVOID FunctionContext,
6126 IN PVOID SystemSpecific2,
6127 IN PVOID SystemSpecific3);
6129 VOID EnqueueStartForPSKExec(
6130 IN PVOID SystemSpecific1,
6131 IN PVOID FunctionContext,
6132 IN PVOID SystemSpecific2,
6133 IN PVOID SystemSpecific3);
6135 VOID RTMPHandleSTAKey(
6136 IN PRTMP_ADAPTER pAdapter,
6137 IN MAC_TABLE_ENTRY *pEntry,
6138 IN MLME_QUEUE_ELEM *Elem);
6140 VOID PeerGroupMsg2Action(
6141 IN PRTMP_ADAPTER pAd,
6142 IN PMAC_TABLE_ENTRY pEntry,
6146 VOID PairDisAssocAction(
6147 IN PRTMP_ADAPTER pAd,
6148 IN PMAC_TABLE_ENTRY pEntry,
6151 VOID MlmeDeAuthAction(
6152 IN PRTMP_ADAPTER pAd,
6153 IN PMAC_TABLE_ENTRY pEntry,
6156 VOID GREKEYPeriodicExec(
6157 IN PVOID SystemSpecific1,
6158 IN PVOID FunctionContext,
6159 IN PVOID SystemSpecific2,
6160 IN PVOID SystemSpecific3);
6182 IN PRTMP_ADAPTER pAd,
6185 VOID AES_GTK_KEY_WRAP(
6187 IN UCHAR *plaintext,
6189 OUT UCHAR *ciphertext);
6192 IN PRTMP_ADAPTER pAdapter,
6196 VOID APToWirelessSta(
6197 IN PRTMP_ADAPTER pAd,
6198 IN MAC_TABLE_ENTRY *pEntry,
6199 IN PUCHAR pHeader802_3,
6203 IN BOOLEAN bClearFrame);
6205 VOID RTMPAddPMKIDCache(
6206 IN PRTMP_ADAPTER pAd,
6212 INT RTMPSearchPMKIDCache(
6213 IN PRTMP_ADAPTER pAd,
6217 VOID RTMPDeletePMKIDCache(
6218 IN PRTMP_ADAPTER pAd,
6222 VOID RTMPMaintainPMKIDCache(
6223 IN PRTMP_ADAPTER pAd);
6225 VOID RTMPSendTriggerFrame(
6226 IN PRTMP_ADAPTER pAd,
6230 IN BOOLEAN bQosNull);
6233 VOID RTMPFilterCalibration(
6234 IN PRTMP_ADAPTER pAd);
6238 //typedef void (*TIMER_FUNCTION)(unsigned long);
6242 VOID RTMP_SetPeriodicTimer(
6243 IN NDIS_MINIPORT_TIMER *pTimer,
6244 IN unsigned long timeout);
6246 VOID RTMP_OS_Init_Timer(
6247 IN PRTMP_ADAPTER pAd,
6248 IN NDIS_MINIPORT_TIMER *pTimer,
6249 IN TIMER_FUNCTION function,
6252 VOID RTMP_OS_Add_Timer(
6253 IN NDIS_MINIPORT_TIMER *pTimer,
6254 IN unsigned long timeout);
6256 VOID RTMP_OS_Mod_Timer(
6257 IN NDIS_MINIPORT_TIMER *pTimer,
6258 IN unsigned long timeout);
6261 VOID RTMP_OS_Del_Timer(
6262 IN NDIS_MINIPORT_TIMER *pTimer,
6263 OUT BOOLEAN *pCancelled);
6266 VOID RTMP_OS_Release_Packet(
6267 IN PRTMP_ADAPTER pAd,
6268 IN PQUEUE_ENTRY pEntry);
6273 NDIS_STATUS os_alloc_mem(
6274 IN PRTMP_ADAPTER pAd,
6278 NDIS_STATUS os_free_mem(
6279 IN PRTMP_ADAPTER pAd,
6283 void RTMP_AllocateSharedMemory(
6284 IN PRTMP_ADAPTER pAd,
6287 OUT PVOID *VirtualAddress,
6288 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6290 VOID RTMPFreeTxRxRingMemory(
6291 IN PRTMP_ADAPTER pAd);
6293 NDIS_STATUS AdapterBlockAllocateMemory(
6297 void RTMP_AllocateTxDescMemory(
6298 IN PRTMP_ADAPTER pAd,
6302 OUT PVOID *VirtualAddress,
6303 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6305 void RTMP_AllocateFirstTxBuffer(
6306 IN PRTMP_ADAPTER pAd,
6310 OUT PVOID *VirtualAddress,
6311 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6313 void RTMP_AllocateMgmtDescMemory(
6314 IN PRTMP_ADAPTER pAd,
6317 OUT PVOID *VirtualAddress,
6318 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6320 void RTMP_AllocateRxDescMemory(
6321 IN PRTMP_ADAPTER pAd,
6324 OUT PVOID *VirtualAddress,
6325 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6327 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6328 IN PRTMP_ADAPTER pAd,
6331 OUT PVOID *VirtualAddress,
6332 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6334 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6335 IN PRTMP_ADAPTER pAd,
6338 OUT PVOID *VirtualAddress);
6340 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6341 IN PRTMP_ADAPTER pAd,
6344 void RTMP_QueryPacketInfo(
6345 IN PNDIS_PACKET pPacket,
6346 OUT PACKET_INFO *pPacketInfo,
6347 OUT PUCHAR *pSrcBufVA,
6348 OUT UINT *pSrcBufLen);
6350 void RTMP_QueryNextPacketInfo(
6351 IN PNDIS_PACKET *ppPacket,
6352 OUT PACKET_INFO *pPacketInfo,
6353 OUT PUCHAR *pSrcBufVA,
6354 OUT UINT *pSrcBufLen);
6357 BOOLEAN RTMP_FillTxBlkInfo(
6358 IN RTMP_ADAPTER *pAd,
6362 PRTMP_SCATTER_GATHER_LIST
6363 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6366 void announce_802_3_packet(
6367 IN PRTMP_ADAPTER pAd,
6368 IN PNDIS_PACKET pPacket);
6371 UINT BA_Reorder_AMSDU_Annnounce(
6372 IN PRTMP_ADAPTER pAd,
6373 IN PNDIS_PACKET pPacket);
6376 UINT Handle_AMSDU_Packet(
6377 IN PRTMP_ADAPTER pAd,
6380 IN UCHAR FromWhichBSSID);
6383 void convert_802_11_to_802_3_packet(
6384 IN PRTMP_ADAPTER pAd,
6385 IN PNDIS_PACKET pPacket,
6389 IN UCHAR FromWhichBSSID);
6392 PNET_DEV get_netdev_from_bssid(
6393 IN PRTMP_ADAPTER pAd,
6394 IN UCHAR FromWhichBSSID);
6397 PNDIS_PACKET duplicate_pkt(
6398 IN PRTMP_ADAPTER pAd,
6399 IN PUCHAR pHeader802_3,
6403 IN UCHAR FromWhichBSSID);
6406 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6407 IN PRTMP_ADAPTER pAd,
6408 IN PNDIS_PACKET pOldPkt);
6410 PNDIS_PACKET duplicate_pkt_with_VLAN(
6411 IN PRTMP_ADAPTER pAd,
6412 IN PUCHAR pHeader802_3,
6416 IN UCHAR FromWhichBSSID);
6418 PNDIS_PACKET duplicate_pkt_with_WPI(
6419 IN PRTMP_ADAPTER pAd,
6420 IN PNDIS_PACKET pPacket,
6421 IN UINT32 ext_head_len,
6422 IN UINT32 ext_tail_len);
6424 UCHAR VLAN_8023_Header_Copy(
6425 IN PRTMP_ADAPTER pAd,
6426 IN PUCHAR pHeader802_3,
6429 IN UCHAR FromWhichBSSID);
6431 #ifdef DOT11_N_SUPPORT
6432 void ba_flush_reordering_timeout_mpdus(
6433 IN PRTMP_ADAPTER pAd,
6434 IN PBA_REC_ENTRY pBAEntry,
6438 VOID BAOriSessionSetUp(
6439 IN PRTMP_ADAPTER pAd,
6440 IN MAC_TABLE_ENTRY *pEntry,
6444 IN BOOLEAN isForced);
6446 VOID BASessionTearDownALL(
6447 IN OUT PRTMP_ADAPTER pAd,
6449 #endif // DOT11_N_SUPPORT //
6451 BOOLEAN OS_Need_Clone_Packet(void);
6454 VOID build_tx_packet(
6455 IN PRTMP_ADAPTER pAd,
6456 IN PNDIS_PACKET pPacket,
6461 VOID BAOriSessionTearDown(
6462 IN OUT PRTMP_ADAPTER pAd,
6465 IN BOOLEAN bPassive,
6466 IN BOOLEAN bForceSend);
6468 VOID BARecSessionTearDown(
6469 IN OUT PRTMP_ADAPTER pAd,
6472 IN BOOLEAN bPassive);
6474 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6475 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6477 ULONG AutoChBssInsertEntry(
6478 IN PRTMP_ADAPTER pAd,
6485 void AutoChBssTableInit(
6486 IN PRTMP_ADAPTER pAd);
6488 void ChannelInfoInit(
6489 IN PRTMP_ADAPTER pAd);
6491 void AutoChBssTableDestroy(
6492 IN PRTMP_ADAPTER pAd);
6494 void ChannelInfoDestroy(
6495 IN PRTMP_ADAPTER pAd);
6497 UCHAR New_ApAutoSelectChannel(
6498 IN PRTMP_ADAPTER pAd);
6502 VOID InitNINTENDO_TABLE(
6503 IN PRTMP_ADAPTER pAd);
6505 UCHAR CheckNINTENDO_TABLE(
6506 IN PRTMP_ADAPTER pAd,
6511 UCHAR DelNINTENDO_ENTRY(
6512 IN PRTMP_ADAPTER pAd,
6515 VOID RTMPIoctlNintendoCapable(
6516 IN PRTMP_ADAPTER pAd,
6517 IN struct iwreq *wrq);
6519 VOID RTMPIoctlNintendoGetTable(
6520 IN PRTMP_ADAPTER pAd,
6521 IN struct iwreq *wrq);
6523 VOID RTMPIoctlNintendoSetTable(
6524 IN PRTMP_ADAPTER pAd,
6525 IN struct iwreq *wrq);
6527 #endif // NINTENDO_AP //
6529 BOOLEAN rtstrmactohex(
6533 BOOLEAN rtstrcasecmp(
6537 char *rtstrstruncasecmp(
6543 IN const char * s2);
6547 IN const char * ct);
6551 unsigned int *addr);
6553 ////////// common ioctl functions //////////
6554 INT Set_DriverVersion_Proc(
6555 IN PRTMP_ADAPTER pAd,
6558 INT Set_CountryRegion_Proc(
6559 IN PRTMP_ADAPTER pAd,
6562 INT Set_CountryRegionABand_Proc(
6563 IN PRTMP_ADAPTER pAd,
6566 INT Set_WirelessMode_Proc(
6567 IN PRTMP_ADAPTER pAd,
6570 INT Set_Channel_Proc(
6571 IN PRTMP_ADAPTER pAd,
6574 INT Set_ShortSlot_Proc(
6575 IN PRTMP_ADAPTER pAd,
6578 INT Set_TxPower_Proc(
6579 IN PRTMP_ADAPTER pAd,
6582 INT Set_BGProtection_Proc(
6583 IN PRTMP_ADAPTER pAd,
6586 INT Set_TxPreamble_Proc(
6587 IN PRTMP_ADAPTER pAd,
6590 INT Set_RTSThreshold_Proc(
6591 IN PRTMP_ADAPTER pAd,
6594 INT Set_FragThreshold_Proc(
6595 IN PRTMP_ADAPTER pAd,
6598 INT Set_TxBurst_Proc(
6599 IN PRTMP_ADAPTER pAd,
6602 #ifdef AGGREGATION_SUPPORT
6603 INT Set_PktAggregate_Proc(
6604 IN PRTMP_ADAPTER pAd,
6608 INT Set_IEEE80211H_Proc(
6609 IN PRTMP_ADAPTER pAd,
6614 IN PRTMP_ADAPTER pAd,
6618 INT Show_DescInfo_Proc(
6619 IN PRTMP_ADAPTER pAd,
6622 INT Set_ResetStatCounter_Proc(
6623 IN PRTMP_ADAPTER pAd,
6626 #ifdef DOT11_N_SUPPORT
6627 INT Set_BASetup_Proc(
6628 IN PRTMP_ADAPTER pAd,
6631 INT Set_BADecline_Proc(
6632 IN PRTMP_ADAPTER pAd,
6635 INT Set_BAOriTearDown_Proc(
6636 IN PRTMP_ADAPTER pAd,
6639 INT Set_BARecTearDown_Proc(
6640 IN PRTMP_ADAPTER pAd,
6644 IN PRTMP_ADAPTER pAd,
6648 IN PRTMP_ADAPTER pAd,
6652 IN PRTMP_ADAPTER pAd,
6655 INT Set_HtOpMode_Proc(
6656 IN PRTMP_ADAPTER pAd,
6659 INT Set_HtStbc_Proc(
6660 IN PRTMP_ADAPTER pAd,
6664 IN PRTMP_ADAPTER pAd,
6667 INT Set_HtExtcha_Proc(
6668 IN PRTMP_ADAPTER pAd,
6671 INT Set_HtMpduDensity_Proc(
6672 IN PRTMP_ADAPTER pAd,
6675 INT Set_HtBaWinSize_Proc(
6676 IN PRTMP_ADAPTER pAd,
6680 IN PRTMP_ADAPTER pAd,
6683 INT Set_HtLinkAdapt_Proc(
6684 IN PRTMP_ADAPTER pAd,
6687 INT Set_HtAmsdu_Proc(
6688 IN PRTMP_ADAPTER pAd,
6691 INT Set_HtAutoBa_Proc(
6692 IN PRTMP_ADAPTER pAd,
6695 INT Set_HtProtect_Proc(
6696 IN PRTMP_ADAPTER pAd,
6699 INT Set_HtMimoPs_Proc(
6700 IN PRTMP_ADAPTER pAd,
6704 INT Set_ForceShortGI_Proc(
6705 IN PRTMP_ADAPTER pAd,
6708 INT Set_ForceGF_Proc(
6709 IN PRTMP_ADAPTER pAd,
6713 IN PRTMP_ADAPTER pAd);
6715 INT Set_SendPSMPAction_Proc(
6716 IN PRTMP_ADAPTER pAd,
6719 INT Set_HtMIMOPSmode_Proc(
6720 IN PRTMP_ADAPTER pAd,
6724 INT Set_HtTxBASize_Proc(
6725 IN PRTMP_ADAPTER pAd,
6727 #endif // DOT11_N_SUPPORT //
6731 #ifdef CONFIG_STA_SUPPORT
6733 VOID RTMPSendDLSTearDownFrame(
6734 IN PRTMP_ADAPTER pAd,
6737 #ifdef DOT11_N_SUPPORT
6740 IN PRTMP_ADAPTER pAd,
6741 OUT PQUERYBA_TABLE pBAT);
6742 #endif // DOT11_N_SUPPORT //
6744 #ifdef WPA_SUPPLICANT_SUPPORT
6745 INT WpaCheckEapCode(
6746 IN PRTMP_ADAPTER pAd,
6751 VOID WpaSendMicFailureToWpaSupplicant(
6752 IN PRTMP_ADAPTER pAd,
6753 IN BOOLEAN bUnicast);
6755 VOID SendAssocIEsToWpaSupplicant(
6756 IN PRTMP_ADAPTER pAd);
6757 #endif // WPA_SUPPLICANT_SUPPORT //
6759 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6760 int wext_notify_event_assoc(
6761 IN RTMP_ADAPTER *pAd);
6762 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6764 #endif // CONFIG_STA_SUPPORT //
6768 #ifdef DOT11_N_SUPPORT
6769 VOID Handle_BSS_Width_Trigger_Events(
6770 IN PRTMP_ADAPTER pAd);
6772 void build_ext_channel_switch_ie(
6773 IN PRTMP_ADAPTER pAd,
6774 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6775 #endif // DOT11_N_SUPPORT //
6778 BOOLEAN APRxDoneInterruptHandle(
6779 IN PRTMP_ADAPTER pAd);
6781 BOOLEAN STARxDoneInterruptHandle(
6782 IN PRTMP_ADAPTER pAd,
6785 #ifdef DOT11_N_SUPPORT
6786 // AMPDU packet indication
6787 VOID Indicate_AMPDU_Packet(
6788 IN PRTMP_ADAPTER pAd,
6790 IN UCHAR FromWhichBSSID);
6792 // AMSDU packet indication
6793 VOID Indicate_AMSDU_Packet(
6794 IN PRTMP_ADAPTER pAd,
6796 IN UCHAR FromWhichBSSID);
6797 #endif // DOT11_N_SUPPORT //
6799 // Normal legacy Rx packet indication
6800 VOID Indicate_Legacy_Packet(
6801 IN PRTMP_ADAPTER pAd,
6803 IN UCHAR FromWhichBSSID);
6805 VOID Indicate_EAPOL_Packet(
6806 IN PRTMP_ADAPTER pAd,
6808 IN UCHAR FromWhichBSSID);
6810 void update_os_packet_info(
6811 IN PRTMP_ADAPTER pAd,
6813 IN UCHAR FromWhichBSSID);
6815 void wlan_802_11_to_802_3_packet(
6816 IN PRTMP_ADAPTER pAd,
6818 IN PUCHAR pHeader802_3,
6819 IN UCHAR FromWhichBSSID);
6821 UINT deaggregate_AMSDU_announce(
6822 IN PRTMP_ADAPTER pAd,
6823 PNDIS_PACKET pPacket,
6828 #ifdef CONFIG_STA_SUPPORT
6829 // remove LLC and get 802_3 Header
6830 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6832 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6834 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6836 _pDA = _pRxBlk->pHeader->Addr3; \
6837 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6841 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6843 _pDA = _pRxBlk->pHeader->Addr1; \
6844 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6845 _pSA = _pRxBlk->pHeader->Addr2; \
6847 _pSA = _pRxBlk->pHeader->Addr3; \
6851 _pDA = _pRxBlk->pHeader->Addr1; \
6852 _pSA = _pRxBlk->pHeader->Addr2; \
6856 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6857 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6859 #endif // CONFIG_STA_SUPPORT //
6862 BOOLEAN APFowardWirelessStaToWirelessSta(
6863 IN PRTMP_ADAPTER pAd,
6864 IN PNDIS_PACKET pPacket,
6865 IN ULONG FromWhichBSSID);
6867 VOID Announce_or_Forward_802_3_Packet(
6868 IN PRTMP_ADAPTER pAd,
6869 IN PNDIS_PACKET pPacket,
6870 IN UCHAR FromWhichBSSID);
6872 VOID Sta_Announce_or_Forward_802_3_Packet(
6873 IN PRTMP_ADAPTER pAd,
6874 IN PNDIS_PACKET pPacket,
6875 IN UCHAR FromWhichBSSID);
6878 #ifdef CONFIG_STA_SUPPORT
6879 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6880 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6881 //announce_802_3_packet(_pAd, _pPacket);
6882 #endif // CONFIG_STA_SUPPORT //
6885 PNDIS_PACKET DuplicatePacket(
6886 IN PRTMP_ADAPTER pAd,
6887 IN PNDIS_PACKET pPacket,
6888 IN UCHAR FromWhichBSSID);
6891 PNDIS_PACKET ClonePacket(
6892 IN PRTMP_ADAPTER pAd,
6893 IN PNDIS_PACKET pPacket,
6898 // Normal, AMPDU or AMSDU
6899 VOID CmmRxnonRalinkFrameIndicate(
6900 IN PRTMP_ADAPTER pAd,
6902 IN UCHAR FromWhichBSSID);
6904 VOID CmmRxRalinkFrameIndicate(
6905 IN PRTMP_ADAPTER pAd,
6906 IN MAC_TABLE_ENTRY *pEntry,
6908 IN UCHAR FromWhichBSSID);
6910 VOID Update_Rssi_Sample(
6911 IN PRTMP_ADAPTER pAd,
6912 IN RSSI_SAMPLE *pRssi,
6913 IN PRXWI_STRUC pRxWI);
6915 PNDIS_PACKET GetPacketFromRxRing(
6916 IN PRTMP_ADAPTER pAd,
6917 OUT PRT28XX_RXD_STRUC pSaveRxD,
6918 OUT BOOLEAN *pbReschedule,
6919 IN OUT UINT32 *pRxPending);
6921 PNDIS_PACKET RTMPDeFragmentDataFrame(
6922 IN PRTMP_ADAPTER pAd,
6925 ////////////////////////////////////////
6933 typedef struct _DefaultKeyIdxValue
6937 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6941 #ifdef CONFIG_STA_SUPPORT
6943 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6944 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6945 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6946 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6947 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6948 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6949 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6950 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6951 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6952 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6953 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6956 P80211ENUM_msgitem_status_no_value = 0x00
6959 P80211ENUM_truth_false = 0x00,
6960 P80211ENUM_truth_true = 0x01
6963 /* Definition from madwifi */
6969 } p80211item_uint32_t;
6974 #define WLAN_DEVNAMELEN_MAX 16
6975 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6976 p80211item_uint32_t hosttime;
6977 p80211item_uint32_t mactime;
6978 p80211item_uint32_t channel;
6979 p80211item_uint32_t rssi;
6980 p80211item_uint32_t sq;
6981 p80211item_uint32_t signal;
6982 p80211item_uint32_t noise;
6983 p80211item_uint32_t rate;
6984 p80211item_uint32_t istx;
6985 p80211item_uint32_t frmlen;
6986 } wlan_ng_prism2_header;
6988 /* The radio capture header precedes the 802.11 header. */
6989 typedef struct PACKED _ieee80211_radiotap_header {
6990 UINT8 it_version; /* Version 0. Only increases
6991 * for drastic changes,
6992 * introduction of compatible
6993 * new fields does not count.
6996 UINT16 it_len; /* length of the whole
6997 * header in bytes, including
6998 * it_version, it_pad,
6999 * it_len, and data fields.
7001 UINT32 it_present; /* A bitmap telling which
7002 * fields are present. Set bit 31
7003 * (0x80000000) to extend the
7004 * bitmap by another 32 bits.
7005 * Additional extensions are made
7006 * by setting bit 31.
7008 }ieee80211_radiotap_header ;
7010 enum ieee80211_radiotap_type {
7011 IEEE80211_RADIOTAP_TSFT = 0,
7012 IEEE80211_RADIOTAP_FLAGS = 1,
7013 IEEE80211_RADIOTAP_RATE = 2,
7014 IEEE80211_RADIOTAP_CHANNEL = 3,
7015 IEEE80211_RADIOTAP_FHSS = 4,
7016 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
7017 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
7018 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
7019 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
7020 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
7021 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
7022 IEEE80211_RADIOTAP_ANTENNA = 11,
7023 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
7024 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
7027 #define WLAN_RADIOTAP_PRESENT ( \
7028 (1 << IEEE80211_RADIOTAP_TSFT) | \
7029 (1 << IEEE80211_RADIOTAP_FLAGS) | \
7030 (1 << IEEE80211_RADIOTAP_RATE) | \
7033 typedef struct _wlan_radiotap_header {
7034 ieee80211_radiotap_header wt_ihdr;
7038 } wlan_radiotap_header;
7039 /* Definition from madwifi */
7041 void send_monitor_packets(
7042 IN PRTMP_ADAPTER pAd,
7045 #if WIRELESS_EXT >= 12
7046 // This function will be called when query /proc
7047 struct iw_statistics *rt28xx_get_wireless_stats(
7048 IN struct net_device *net_dev);
7051 VOID RTMPSetDesiredRates(
7052 IN PRTMP_ADAPTER pAdapter,
7054 #endif // CONFIG_STA_SUPPORT //
7056 INT Set_FixedTxMode_Proc(
7057 IN PRTMP_ADAPTER pAd,
7060 #ifdef CONFIG_APSTA_MIXED_SUPPORT
7061 INT Set_OpMode_Proc(
7062 IN PRTMP_ADAPTER pAd,
7064 #endif // CONFIG_APSTA_MIXED_SUPPORT //
7066 static inline char* GetPhyMode(
7076 #ifdef DOT11_N_SUPPORT
7080 case MODE_HTGREENFIELD:
7082 #endif // DOT11_N_SUPPORT //
7089 static inline char* GetBW(
7099 #ifdef DOT11_N_SUPPORT
7102 #endif // DOT11_N_SUPPORT //
7109 VOID RT28xxThreadTerminate(
7110 IN RTMP_ADAPTER *pAd);
7112 BOOLEAN RT28XXChipsetCheck(
7115 BOOLEAN RT28XXNetDevInit(
7117 IN struct net_device *net_dev,
7118 IN RTMP_ADAPTER *pAd);
7120 BOOLEAN RT28XXProbePostConfig(
7122 IN RTMP_ADAPTER *pAd,
7125 VOID RT28XXDMADisable(
7126 IN RTMP_ADAPTER *pAd);
7128 VOID RT28XXDMAEnable(
7129 IN RTMP_ADAPTER *pAd);
7131 VOID RT28xx_UpdateBeaconToAsic(
7132 IN RTMP_ADAPTER * pAd,
7135 IN ULONG UpdatePos);
7138 IN struct net_device *net_dev,
7139 IN OUT struct ifreq *rq,
7143 #ifdef CONFIG_STA_SUPPORT
7144 INT rt28xx_sta_ioctl(
7145 IN struct net_device *net_dev,
7146 IN OUT struct ifreq *rq,
7148 #endif // CONFIG_STA_SUPPORT //
7150 BOOLEAN RT28XXSecurityKeyAdd(
7151 IN PRTMP_ADAPTER pAd,
7154 IN MAC_TABLE_ENTRY *pEntry);
7156 ////////////////////////////////////////
7157 PNDIS_PACKET GetPacketFromRxRing(
7158 IN PRTMP_ADAPTER pAd,
7159 OUT PRT28XX_RXD_STRUC pSaveRxD,
7160 OUT BOOLEAN *pbReschedule,
7161 IN OUT UINT32 *pRxPending);
7164 void kill_thread_task(PRTMP_ADAPTER pAd);
7166 void tbtt_tasklet(unsigned long data);
7169 VOID AsicTurnOffRFClk(
7170 IN PRTMP_ADAPTER pAd,
7173 VOID AsicTurnOnRFClk(
7174 IN PRTMP_ADAPTER pAd,
7178 NTSTATUS RT30xxWriteRFRegister(
7179 IN PRTMP_ADAPTER pAd,
7183 NTSTATUS RT30xxReadRFRegister(
7184 IN PRTMP_ADAPTER pAd,
7188 //2008/09/11:KH add to support efuse<--
7189 UCHAR eFuseReadRegisters(
7190 IN PRTMP_ADAPTER pAd,
7195 VOID eFuseReadPhysical(
7196 IN PRTMP_ADAPTER pAd,
7197 IN PUSHORT lpInBuffer,
7198 IN ULONG nInBufferSize,
7199 OUT PUSHORT lpOutBuffer,
7200 IN ULONG nOutBufferSize
7204 IN PRTMP_ADAPTER pAd,
7209 VOID eFusePhysicalWriteRegisters(
7210 IN PRTMP_ADAPTER pAd,
7215 NTSTATUS eFuseWriteRegisters(
7216 IN PRTMP_ADAPTER pAd,
7221 VOID eFuseWritePhysical(
7222 IN PRTMP_ADAPTER pAd,
7224 ULONG nInBufferSize,
7226 ULONG nOutBufferSize
7229 NTSTATUS eFuseWrite(
7230 IN PRTMP_ADAPTER pAd,
7235 INT set_eFuseGetFreeBlockCount_Proc(
7236 IN PRTMP_ADAPTER pAd,
7239 INT set_eFusedump_Proc(
7240 IN PRTMP_ADAPTER pAd,
7243 INT set_eFuseLoadFromBin_Proc(
7244 IN PRTMP_ADAPTER pAd,
7247 NTSTATUS eFuseWriteRegistersFromBin(
7248 IN PRTMP_ADAPTER pAd,
7253 VOID eFusePhysicalReadRegisters(
7254 IN PRTMP_ADAPTER pAd,
7259 NDIS_STATUS NICLoadEEPROM(
7260 IN PRTMP_ADAPTER pAd);
7262 BOOLEAN bNeedLoadEEPROM(
7263 IN PRTMP_ADAPTER pAd);
7264 //2008/09/11:KH add to support efuse-->
7268 // add by johnli, RF power sequence setup
7269 VOID RT30xxLoadRFNormalModeSetup(
7270 IN PRTMP_ADAPTER pAd);
7272 VOID RT30xxLoadRFSleepModeSetup(
7273 IN PRTMP_ADAPTER pAd);
7275 VOID RT30xxReverseRFSleepModeSetup(
7276 IN PRTMP_ADAPTER pAd);
7282 // Function Prototype in rtusb_bulk.c
7284 VOID RTUSBInitTxDesc(
7285 IN PRTMP_ADAPTER pAd,
7286 IN PTX_CONTEXT pTxContext,
7287 IN UCHAR BulkOutPipeId,
7288 IN usb_complete_t Func);
7290 VOID RTUSBInitHTTxDesc(
7291 IN PRTMP_ADAPTER pAd,
7292 IN PHT_TX_CONTEXT pTxContext,
7293 IN UCHAR BulkOutPipeId,
7294 IN ULONG BulkOutSize,
7295 IN usb_complete_t Func);
7297 VOID RTUSBInitRxDesc(
7298 IN PRTMP_ADAPTER pAd,
7299 IN PRX_CONTEXT pRxContext);
7301 VOID RTUSBCleanUpDataBulkOutQueue(
7302 IN PRTMP_ADAPTER pAd);
7304 VOID RTUSBCancelPendingBulkOutIRP(
7305 IN PRTMP_ADAPTER pAd);
7307 VOID RTUSBBulkOutDataPacket(
7308 IN PRTMP_ADAPTER pAd,
7309 IN UCHAR BulkOutPipeId,
7312 VOID RTUSBBulkOutNullFrame(
7313 IN PRTMP_ADAPTER pAd);
7315 VOID RTUSBBulkOutRTSFrame(
7316 IN PRTMP_ADAPTER pAd);
7318 VOID RTUSBCancelPendingBulkInIRP(
7319 IN PRTMP_ADAPTER pAd);
7321 VOID RTUSBCancelPendingIRPs(
7322 IN PRTMP_ADAPTER pAd);
7324 VOID RTUSBBulkOutMLMEPacket(
7325 IN PRTMP_ADAPTER pAd,
7328 VOID RTUSBBulkOutPsPoll(
7329 IN PRTMP_ADAPTER pAd);
7331 VOID RTUSBCleanUpMLMEBulkOutQueue(
7332 IN PRTMP_ADAPTER pAd);
7334 VOID RTUSBKickBulkOut(
7335 IN PRTMP_ADAPTER pAd);
7337 VOID RTUSBBulkReceive(
7338 IN PRTMP_ADAPTER pAd);
7341 IN RTMP_ADAPTER *pAd);
7343 VOID RTUSBInitRxDesc(
7344 IN PRTMP_ADAPTER pAd,
7345 IN PRX_CONTEXT pRxContext);
7347 VOID RTUSBBulkRxHandle(
7348 IN unsigned long data);
7351 // Function Prototype in rtusb_io.c
7353 NTSTATUS RTUSBMultiRead(
7354 IN PRTMP_ADAPTER pAd,
7359 NTSTATUS RTUSBMultiWrite(
7360 IN PRTMP_ADAPTER pAd,
7365 NTSTATUS RTUSBMultiWrite_OneByte(
7366 IN PRTMP_ADAPTER pAd,
7370 NTSTATUS RTUSBReadBBPRegister(
7371 IN PRTMP_ADAPTER pAd,
7375 NTSTATUS RTUSBWriteBBPRegister(
7376 IN PRTMP_ADAPTER pAd,
7380 NTSTATUS RTUSBWriteRFRegister(
7381 IN PRTMP_ADAPTER pAd,
7384 NTSTATUS RTUSB_VendorRequest(
7385 IN PRTMP_ADAPTER pAd,
7386 IN UINT32 TransferFlags,
7387 IN UCHAR ReservedBits,
7391 IN PVOID TransferBuffer,
7392 IN UINT32 TransferBufferLength);
7394 NTSTATUS RTUSBReadEEPROM(
7395 IN PRTMP_ADAPTER pAd,
7400 NTSTATUS RTUSBWriteEEPROM(
7401 IN PRTMP_ADAPTER pAd,
7406 VOID RTUSBPutToSleep(
7407 IN PRTMP_ADAPTER pAd);
7409 NTSTATUS RTUSBWakeUp(
7410 IN PRTMP_ADAPTER pAd);
7412 VOID RTUSBInitializeCmdQ(
7415 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7416 IN PRTMP_ADAPTER pAd,
7418 IN BOOLEAN SetInformation,
7419 IN PVOID pInformationBuffer,
7420 IN UINT32 InformationBufferLength);
7422 NDIS_STATUS RTUSBEnqueueInternalCmd(
7423 IN PRTMP_ADAPTER pAd,
7425 IN PVOID pInformationBuffer,
7426 IN UINT32 InformationBufferLength);
7428 VOID RTUSBDequeueCmd(
7430 OUT PCmdQElmt *pcmdqelmt);
7433 IN OUT PVOID Context);
7436 IN OUT PVOID Context);
7438 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7439 IN RTMP_ADAPTER *pAd,
7440 IN RALINK_TIMER_STRUCT *pTimer);
7442 BOOLEAN RT2870_TimerQ_Remove(
7443 IN RTMP_ADAPTER *pAd,
7444 IN RALINK_TIMER_STRUCT *pTimer);
7446 void RT2870_TimerQ_Exit(
7447 IN RTMP_ADAPTER *pAd);
7449 void RT2870_TimerQ_Init(
7450 IN RTMP_ADAPTER *pAd);
7452 VOID RT2870_BssBeaconExit(
7453 IN RTMP_ADAPTER *pAd);
7455 VOID RT2870_BssBeaconStop(
7456 IN RTMP_ADAPTER *pAd);
7458 VOID RT2870_BssBeaconStart(
7459 IN RTMP_ADAPTER * pAd);
7461 VOID RT2870_BssBeaconInit(
7462 IN RTMP_ADAPTER *pAd);
7464 VOID RT2870_WatchDog(
7465 IN RTMP_ADAPTER *pAd);
7467 NTSTATUS RTUSBWriteMACRegister(
7468 IN PRTMP_ADAPTER pAd,
7472 NTSTATUS RTUSBReadMACRegister(
7473 IN PRTMP_ADAPTER pAd,
7475 OUT PUINT32 pValue);
7477 NTSTATUS RTUSBSingleWrite(
7478 IN RTMP_ADAPTER *pAd,
7482 NTSTATUS RTUSBFirmwareRun(
7483 IN PRTMP_ADAPTER pAd);
7485 NTSTATUS RTUSBFirmwareWrite(
7486 IN PRTMP_ADAPTER pAd,
7490 NTSTATUS RTUSBFirmwareOpmode(
7491 IN PRTMP_ADAPTER pAd,
7492 OUT PUINT32 pValue);
7494 NTSTATUS RTUSBVenderReset(
7495 IN PRTMP_ADAPTER pAd);
7497 NDIS_STATUS RTUSBSetHardWareRegister(
7498 IN PRTMP_ADAPTER pAdapter,
7501 NDIS_STATUS RTUSBQueryHardWareRegister(
7502 IN PRTMP_ADAPTER pAdapter,
7506 IN PRTMP_ADAPTER pAd);
7509 NDIS_STATUS CreateThreads(
7510 IN struct net_device *net_dev );
7513 VOID MacTableInitialize(
7514 IN PRTMP_ADAPTER pAd);
7517 IN PRTMP_ADAPTER pAd,
7520 NDIS_STATUS RTMPWPAAddKeyProc(
7521 IN PRTMP_ADAPTER pAd,
7524 VOID AsicRxAntEvalAction(
7525 IN PRTMP_ADAPTER pAd);
7528 IN PRTMP_ADAPTER pAd,
7529 IN PUCHAR pHeader802_3,
7533 OUT PNDIS_PACKET *ppPacket);
7535 UINT deaggregate_AMSDU_announce(
7536 IN PRTMP_ADAPTER pAd,
7537 PNDIS_PACKET pPacket,
7541 NDIS_STATUS RTMPCheckRxError(
7542 IN PRTMP_ADAPTER pAd,
7543 IN PHEADER_802_11 pHeader,
7544 IN PRXWI_STRUC pRxWI,
7545 IN PRT28XX_RXD_STRUC pRxINFO);
7548 VOID RTUSBMlmeHardTransmit(
7549 IN PRTMP_ADAPTER pAd,
7550 IN PMGMT_STRUC pMgmt);
7556 // Function Prototype in rtusb_data.c
7558 NDIS_STATUS RTUSBFreeDescriptorRequest(
7559 IN PRTMP_ADAPTER pAd,
7560 IN UCHAR BulkOutPipeId,
7561 IN UINT32 NumberRequired);
7564 BOOLEAN RTUSBNeedQueueBackForAgg(
7565 IN RTMP_ADAPTER *pAd,
7566 IN UCHAR BulkOutPipeId);
7569 VOID RTMPWriteTxInfo(
7570 IN PRTMP_ADAPTER pAd,
7571 IN PTXINFO_STRUC pTxInfo,
7572 IN USHORT USBDMApktLen,
7579 // Function Prototype in cmm_data_2870.c
7581 USHORT RtmpUSB_WriteSubTxResource(
7582 IN PRTMP_ADAPTER pAd,
7585 OUT USHORT *FreeNumber);
7587 USHORT RtmpUSB_WriteSingleTxResource(
7588 IN PRTMP_ADAPTER pAd,
7591 OUT USHORT *FreeNumber);
7593 USHORT RtmpUSB_WriteFragTxResource(
7594 IN PRTMP_ADAPTER pAd,
7597 OUT USHORT *FreeNumber);
7599 USHORT RtmpUSB_WriteMultiTxResource(
7600 IN PRTMP_ADAPTER pAd,
7603 OUT USHORT *FreeNumber);
7605 VOID RtmpUSB_FinalWriteTxResource(
7606 IN PRTMP_ADAPTER pAd,
7608 IN USHORT totalMPDUSize,
7611 VOID RtmpUSBDataLastTxIdx(
7612 IN PRTMP_ADAPTER pAd,
7616 VOID RtmpUSBDataKickOut(
7617 IN PRTMP_ADAPTER pAd,
7622 int RtmpUSBMgmtKickOut(
7623 IN RTMP_ADAPTER *pAd,
7625 IN PNDIS_PACKET pPacket,
7626 IN PUCHAR pSrcBufVA,
7629 VOID RtmpUSBNullFrameKickOut(
7630 IN RTMP_ADAPTER *pAd,
7632 IN UCHAR *pNullFrame,
7633 IN UINT32 frameLen);
7635 VOID RT28xxUsbStaAsicForceWakeup(
7636 IN PRTMP_ADAPTER pAd,
7637 IN BOOLEAN bFromTx);
7639 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7640 IN PRTMP_ADAPTER pAd,
7641 IN USHORT TbttNumToNextWakeUp);
7643 VOID RT28xxUsbMlmeRadioOn(
7644 IN PRTMP_ADAPTER pAd);
7646 VOID RT28xxUsbMlmeRadioOFF(
7647 IN PRTMP_ADAPTER pAd);
7650 ////////////////////////////////////////
7653 IN RTMP_ADAPTER *pAd);
7655 UINT32 QBSS_LoadElementAppend(
7656 IN RTMP_ADAPTER *pAd,
7659 VOID QBSS_LoadUpdate(
7660 IN RTMP_ADAPTER *pAd);
7662 ///////////////////////////////////////
7663 INT RTMPShowCfgValue(
7664 IN PRTMP_ADAPTER pAd,
7668 PCHAR RTMPGetRalinkAuthModeStr(
7669 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7671 PCHAR RTMPGetRalinkEncryModeStr(
7672 IN USHORT encryMode);
7673 //////////////////////////////////////
7675 #ifdef CONFIG_STA_SUPPORT
7676 VOID AsicStaBbpTuning(
7677 IN PRTMP_ADAPTER pAd);
7679 BOOLEAN StaAddMacTableEntry(
7680 IN PRTMP_ADAPTER pAd,
7681 IN PMAC_TABLE_ENTRY pEntry,
7682 IN UCHAR MaxSupportedRateIn500Kbps,
7683 IN HT_CAPABILITY_IE *pHtCapability,
7684 IN UCHAR HtCapabilityLen,
7685 IN USHORT CapabilityInfo);
7686 #endif // CONFIG_STA_SUPPORT //
7688 void RTMP_IndicateMediaState(
7689 IN PRTMP_ADAPTER pAd);
7691 VOID ReSyncBeaconTime(
7692 IN PRTMP_ADAPTER pAd);
7694 VOID RTMPSetAGCInitValue(
7695 IN PRTMP_ADAPTER pAd,
7696 IN UCHAR BandWidth);
7698 int rt28xx_close(IN PNET_DEV dev);
7699 int rt28xx_open(IN PNET_DEV dev);
7701 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7703 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7704 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7706 if (VIRTUAL_IF_NUM(pAd) == 0)
7708 if (rt28xx_open(pAd->net_dev) != 0)
7714 VIRTUAL_IF_INC(pAd);
7718 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7720 VIRTUAL_IF_DEC(pAd);
7721 if (VIRTUAL_IF_NUM(pAd) == 0)
7722 rt28xx_close(pAd->net_dev);
7727 #endif // __RTMP_H__