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 //
56 //#define DBG_DIAGNOSE 1
58 #if defined(CONFIG_AP_SUPPORT) && defined(CONFIG_STA_SUPPORT)
59 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd) if(_pAd->OpMode == OPMODE_AP)
60 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd) if(_pAd->OpMode == OPMODE_STA)
62 #define IF_DEV_CONFIG_OPMODE_ON_AP(_pAd)
63 #define IF_DEV_CONFIG_OPMODE_ON_STA(_pAd)
66 #define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
67 #define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
68 #define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
71 ////////////////////////////////////////////////////////////////////////////
72 // The TX_BUFFER structure forms the transmitted USB packet to the device
73 ////////////////////////////////////////////////////////////////////////////
74 typedef struct __TX_BUFFER{
76 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
77 HEADER_802_11 NullFrame;
78 PSPOLL_FRAME PsPollPacket;
81 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
82 } TX_BUFFER, *PTX_BUFFER;
84 typedef struct __HTTX_BUFFER{
86 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
87 HEADER_802_11 NullFrame;
88 PSPOLL_FRAME PsPollPacket;
91 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
92 } HTTX_BUFFER, *PHTTX_BUFFER;
95 // used to track driver-generated write irps
96 typedef struct _TX_CONTEXT
98 PVOID pAd; //Initialized in MiniportInitialize
99 PURB pUrb; //Initialized in MiniportInitialize
100 PIRP pIrp; //used to cancel pending bulk out.
101 //Initialized in MiniportInitialize
102 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
107 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
108 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
111 BOOLEAN bAggregatible;
112 UCHAR Header_802_3[LENGTH_802_3];
116 dma_addr_t data_dma; // urb dma on linux
118 } TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
121 // used to track driver-generated write irps
122 typedef struct _HT_TX_CONTEXT
124 PVOID pAd; //Initialized in MiniportInitialize
125 PURB pUrb; //Initialized in MiniportInitialize
126 PIRP pIrp; //used to cancel pending bulk out.
127 //Initialized in MiniportInitialize
128 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
129 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
135 BOOLEAN bCopySavePad;
137 UCHAR Header_802_3[LENGTH_802_3];
138 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
139 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
140 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
141 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
143 dma_addr_t data_dma; // urb dma on linux
144 } HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
148 // Structure to keep track of receive packets and buffers to indicate
149 // receive data to the protocol.
151 typedef struct _RX_CONTEXT
153 PUCHAR TransferBuffer;
155 PIRP pIrp;//used to cancel pending bulk in.
157 //These 2 Boolean shouldn't both be 1 at the same time.
158 ULONG BulkInOffset; // number of packets waiting for reordering .
159 // BOOLEAN ReorderInUse; // At least one packet in this buffer are in reordering buffer and wait for receive indication
160 BOOLEAN bRxHandling; // Notify this packet is being process now.
161 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
162 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
163 BOOLEAN IRPPending; // TODO: To be removed
165 NDIS_SPIN_LOCK RxContextLock;
166 dma_addr_t data_dma; // urb dma on linux
167 } RX_CONTEXT, *PRX_CONTEXT;
172 // NDIS Version definitions
174 #ifdef NDIS50_MINIPORT
175 #define RTMP_NDIS_MAJOR_VERSION 5
176 #define RTMP_NDIS_MINOR_VERSION 0
179 #ifdef NDIS51_MINIPORT
180 #define RTMP_NDIS_MAJOR_VERSION 5
181 #define RTMP_NDIS_MINOR_VERSION 1
184 extern char NIC_VENDOR_DESC[];
185 extern int NIC_VENDOR_DESC_LEN;
187 extern unsigned char SNAP_AIRONET[];
188 extern unsigned char CipherSuiteCiscoCCKM[];
189 extern unsigned char CipherSuiteCiscoCCKMLen;
190 extern unsigned char CipherSuiteCiscoCCKM24[];
191 extern unsigned char CipherSuiteCiscoCCKM24Len;
192 extern unsigned char CipherSuiteCCXTkip[];
193 extern unsigned char CipherSuiteCCXTkipLen;
194 extern unsigned char CISCO_OUI[];
195 extern UCHAR BaSizeArray[4];
197 extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
198 extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
199 extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
200 extern ULONG BIT32[32];
201 extern UCHAR BIT8[8];
202 extern char* CipherName[];
203 extern char* MCSToMbps[];
204 extern UCHAR RxwiMCSToOfdmRate[12];
205 extern UCHAR SNAP_802_1H[6];
206 extern UCHAR SNAP_BRIDGE_TUNNEL[6];
207 extern UCHAR SNAP_AIRONET[8];
208 extern UCHAR CKIP_LLC_SNAP[8];
209 extern UCHAR EAPOL_LLC_SNAP[8];
210 extern UCHAR EAPOL[2];
212 extern UCHAR APPLE_TALK[2];
213 extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
214 extern UCHAR OfdmRateToRxwiMCS[];
215 extern UCHAR OfdmSignalToRateId[16] ;
216 extern UCHAR default_cwmin[4];
217 extern UCHAR default_cwmax[4];
218 extern UCHAR default_sta_aifsn[4];
219 extern UCHAR MapUserPriorityToAccessCategory[8];
221 extern USHORT RateUpPER[];
222 extern USHORT RateDownPER[];
223 extern UCHAR Phy11BNextRateDownward[];
224 extern UCHAR Phy11BNextRateUpward[];
225 extern UCHAR Phy11BGNextRateDownward[];
226 extern UCHAR Phy11BGNextRateUpward[];
227 extern UCHAR Phy11ANextRateDownward[];
228 extern UCHAR Phy11ANextRateUpward[];
229 extern CHAR RssiSafeLevelForTxRate[];
230 extern UCHAR RateIdToMbps[];
231 extern USHORT RateIdTo500Kbps[];
233 extern UCHAR CipherSuiteWpaNoneTkip[];
234 extern UCHAR CipherSuiteWpaNoneTkipLen;
236 extern UCHAR CipherSuiteWpaNoneAes[];
237 extern UCHAR CipherSuiteWpaNoneAesLen;
240 extern UCHAR SupRateIe;
241 extern UCHAR ExtRateIe;
243 #ifdef DOT11_N_SUPPORT
244 extern UCHAR HtCapIe;
245 extern UCHAR AddHtInfoIe;
246 extern UCHAR NewExtChanIe;
248 extern UCHAR ExtHtCapIe;
249 #endif // DOT11N_DRAFT3 //
250 #endif // DOT11_N_SUPPORT //
261 extern UCHAR WPA_OUI[];
262 extern UCHAR RSN_OUI[];
263 extern UCHAR WAPI_OUI[];
264 extern UCHAR WME_INFO_ELEM[];
265 extern UCHAR WME_PARM_ELEM[];
266 extern UCHAR Ccx2QosInfo[];
267 extern UCHAR Ccx2IeInfo[];
268 extern UCHAR RALINK_OUI[];
269 extern UCHAR PowerConstraintIE[];
272 extern UCHAR RateSwitchTable[];
273 extern UCHAR RateSwitchTable11B[];
274 extern UCHAR RateSwitchTable11G[];
275 extern UCHAR RateSwitchTable11BG[];
277 #ifdef DOT11_N_SUPPORT
278 extern UCHAR RateSwitchTable11BGN1S[];
279 extern UCHAR RateSwitchTable11BGN2S[];
280 extern UCHAR RateSwitchTable11BGN2SForABand[];
281 extern UCHAR RateSwitchTable11N1S[];
282 extern UCHAR RateSwitchTable11N2S[];
283 extern UCHAR RateSwitchTable11N2SForABand[];
285 #ifdef CONFIG_STA_SUPPORT
286 extern UCHAR PRE_N_HT_OUI[];
287 #endif // CONFIG_STA_SUPPORT //
288 #endif // DOT11_N_SUPPORT //
290 #define MAXSEQ (0xFFF)
293 typedef struct _ATE_INFO {
299 TXWI_STRUC TxWI; // TXWI
301 UCHAR Addr1[MAC_ADDR_LEN];
302 UCHAR Addr2[MAC_ADDR_LEN];
303 UCHAR Addr3[MAC_ADDR_LEN];
307 UINT32 TxDoneCount; // Tx DMA Done
310 BOOLEAN bQATxStart; // Have compiled QA in and use it to ATE tx.
311 BOOLEAN bQARxStart; // Have compiled QA in and use it to ATE rx.
315 CHAR LastSNR0; // last received SNR
316 CHAR LastSNR1; // last received SNR for 2nd antenna
317 CHAR LastRssi0; // last received RSSI
318 CHAR LastRssi1; // last received RSSI for 2nd antenna
319 CHAR LastRssi2; // last received RSSI for 3rd antenna
320 CHAR AvgRssi0; // last 8 frames' average RSSI
321 CHAR AvgRssi1; // last 8 frames' average RSSI
322 CHAR AvgRssi2; // last 8 frames' average RSSI
323 SHORT AvgRssi0X8; // sum of last 8 frames' RSSI
324 SHORT AvgRssi1X8; // sum of last 8 frames' RSSI
325 SHORT AvgRssi2X8; // sum of last 8 frames' RSSI
327 UINT32 NumOfAvgRssiSample;
329 #ifdef RALINK_28xx_QA
332 /* not used in RT2860 */
333 TXINFO_STRUC TxInfo; // TxInfo
335 USHORT HLen; // Header Length
336 USHORT PLen; // Pattern Length
337 UCHAR Header[32]; // Header buffer
338 UCHAR Pattern[32]; // Pattern buffer
339 USHORT DLen; // Data Length
360 //UINT32 Repeat; // Tx Cpu count
361 UCHAR TxStatus; // task Tx status // 0 --> task is idle, 1 --> task is running
362 #endif // RALINK_28xx_QA //
363 } ATE_INFO, *PATE_INFO;
365 #ifdef RALINK_28xx_QA
366 struct ate_racfghdr {
374 } __attribute__((packed));
375 #endif // RALINK_28xx_QA //
376 #endif // RALINK_ATE //
378 #ifdef DOT11_N_SUPPORT
379 struct reordering_mpdu
381 struct reordering_mpdu *next;
382 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
383 int Sequence; /* sequence number of MPDU */
387 struct reordering_list
389 struct reordering_mpdu *next;
393 struct reordering_mpdu_pool
397 struct reordering_list freelist;
399 #endif // DOT11_N_SUPPORT //
401 typedef struct _RSSI_SAMPLE {
402 CHAR LastRssi0; // last received RSSI
403 CHAR LastRssi1; // last received RSSI
404 CHAR LastRssi2; // last received RSSI
414 // Queue structure and macros
416 typedef struct _QUEUE_ENTRY {
417 struct _QUEUE_ENTRY *Next;
418 } QUEUE_ENTRY, *PQUEUE_ENTRY;
421 typedef struct _QUEUE_HEADER {
425 } QUEUE_HEADER, *PQUEUE_HEADER;
427 #define InitializeQueueHeader(QueueHeader) \
429 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
430 (QueueHeader)->Number = 0; \
433 #define RemoveHeadQueue(QueueHeader) \
434 (QueueHeader)->Head; \
436 PQUEUE_ENTRY pNext; \
437 if ((QueueHeader)->Head != NULL) \
439 pNext = (QueueHeader)->Head->Next; \
440 (QueueHeader)->Head = pNext; \
442 (QueueHeader)->Tail = NULL; \
443 (QueueHeader)->Number--; \
447 #define InsertHeadQueue(QueueHeader, QueueEntry) \
449 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
450 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
451 if ((QueueHeader)->Tail == NULL) \
452 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
453 (QueueHeader)->Number++; \
456 #define InsertTailQueue(QueueHeader, QueueEntry) \
458 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
459 if ((QueueHeader)->Tail) \
460 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
462 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
463 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
464 (QueueHeader)->Number++; \
468 // Macros for flag and ref count operations
470 #define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
471 #define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
472 #define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
473 #define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
474 #define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
476 #define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
477 #define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
478 #define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
480 #define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
481 #define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
482 #define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
484 #define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
485 #define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
486 #define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
488 #ifdef CONFIG_STA_SUPPORT
489 #define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
490 #define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
491 #define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
492 #define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
494 #define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
495 #endif // CONFIG_STA_SUPPORT //
497 #define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
498 #define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
501 #define INC_RING_INDEX(_idx, _RingSize) \
503 (_idx) = (_idx+1) % (_RingSize); \
506 // We will have a cost down version which mac version is 0x3090xxxx
507 #define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
509 #define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
510 #define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
511 #define IS_RT2070(_pAd) (((_pAd)->RfIcType == RFIC_2020) || ((_pAd)->EFuseTag == 0x27))
513 #define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
515 #define RING_PACKET_INIT(_TxRing, _idx) \
517 _TxRing->Cell[_idx].pNdisPacket = NULL; \
518 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
521 #define TXDT_INIT(_TxD) \
523 NdisZeroMemory(_TxD, TXD_SIZE); \
527 //Set last data segment
528 #define RING_SET_LASTDS(_TxD, _IsSD0) \
530 if (_IsSD0) {_TxD->LastSec0 = 1;} \
531 else {_TxD->LastSec1 = 1;} \
534 // Increase TxTsc value for next transmission
536 // When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
537 // Should send a special event microsoft defined to request re-key
538 #define INC_TX_TSC(_tsc) \
541 while (++_tsc[i] == 0x0) \
549 #ifdef DOT11_N_SUPPORT
550 // StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
551 #define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
553 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
554 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
555 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
556 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
557 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
558 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
559 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
560 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
561 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
562 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
563 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
564 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
567 #define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
569 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
570 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
571 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
573 #endif // DOT11_N_SUPPORT //
576 // MACRO for 32-bit PCI register read / write
578 // Usage : RTMP_IO_READ32(
579 // PRTMP_ADAPTER pAd,
580 // ULONG Register_Offset,
584 // PRTMP_ADAPTER pAd,
585 // ULONG Register_Offset,
590 // BBP & RF are using indirect access. Before write any value into it.
591 // We have to make sure there is no outstanding command pending via checking busy bit.
593 #define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
597 #define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
598 #define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
599 #define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
601 #define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
602 #define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
606 #define RTMP_RF_IO_READ8_BY_REG_ID(_A, _I, _pV) RT30xxReadRFRegister(_A, _I, _pV)
607 #define RTMP_RF_IO_WRITE8_BY_REG_ID(_A, _I, _V) RT30xxWriteRFRegister(_A, _I, _V)
610 #define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
613 case 1: khz = 2412000; break; \
614 case 2: khz = 2417000; break; \
615 case 3: khz = 2422000; break; \
616 case 4: khz = 2427000; break; \
617 case 5: khz = 2432000; break; \
618 case 6: khz = 2437000; break; \
619 case 7: khz = 2442000; break; \
620 case 8: khz = 2447000; break; \
621 case 9: khz = 2452000; break; \
622 case 10: khz = 2457000; break; \
623 case 11: khz = 2462000; break; \
624 case 12: khz = 2467000; break; \
625 case 13: khz = 2472000; break; \
626 case 14: khz = 2484000; break; \
627 case 36: /* UNII */ khz = 5180000; break; \
628 case 40: /* UNII */ khz = 5200000; break; \
629 case 44: /* UNII */ khz = 5220000; break; \
630 case 48: /* UNII */ khz = 5240000; break; \
631 case 52: /* UNII */ khz = 5260000; break; \
632 case 56: /* UNII */ khz = 5280000; break; \
633 case 60: /* UNII */ khz = 5300000; break; \
634 case 64: /* UNII */ khz = 5320000; break; \
635 case 149: /* UNII */ khz = 5745000; break; \
636 case 153: /* UNII */ khz = 5765000; break; \
637 case 157: /* UNII */ khz = 5785000; break; \
638 case 161: /* UNII */ khz = 5805000; break; \
639 case 165: /* UNII */ khz = 5825000; break; \
640 case 100: /* HiperLAN2 */ khz = 5500000; break; \
641 case 104: /* HiperLAN2 */ khz = 5520000; break; \
642 case 108: /* HiperLAN2 */ khz = 5540000; break; \
643 case 112: /* HiperLAN2 */ khz = 5560000; break; \
644 case 116: /* HiperLAN2 */ khz = 5580000; break; \
645 case 120: /* HiperLAN2 */ khz = 5600000; break; \
646 case 124: /* HiperLAN2 */ khz = 5620000; break; \
647 case 128: /* HiperLAN2 */ khz = 5640000; break; \
648 case 132: /* HiperLAN2 */ khz = 5660000; break; \
649 case 136: /* HiperLAN2 */ khz = 5680000; break; \
650 case 140: /* HiperLAN2 */ khz = 5700000; break; \
651 case 34: /* Japan MMAC */ khz = 5170000; break; \
652 case 38: /* Japan MMAC */ khz = 5190000; break; \
653 case 42: /* Japan MMAC */ khz = 5210000; break; \
654 case 46: /* Japan MMAC */ khz = 5230000; break; \
655 case 184: /* Japan */ khz = 4920000; break; \
656 case 188: /* Japan */ khz = 4940000; break; \
657 case 192: /* Japan */ khz = 4960000; break; \
658 case 196: /* Japan */ khz = 4980000; break; \
659 case 208: /* Japan, means J08 */ khz = 5040000; break; \
660 case 212: /* Japan, means J12 */ khz = 5060000; break; \
661 case 216: /* Japan, means J16 */ khz = 5080000; break; \
662 default: khz = 2412000; break; \
666 #define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
669 case 2412000: ch = 1; break; \
670 case 2417000: ch = 2; break; \
671 case 2422000: ch = 3; break; \
672 case 2427000: ch = 4; break; \
673 case 2432000: ch = 5; break; \
674 case 2437000: ch = 6; break; \
675 case 2442000: ch = 7; break; \
676 case 2447000: ch = 8; break; \
677 case 2452000: ch = 9; break; \
678 case 2457000: ch = 10; break; \
679 case 2462000: ch = 11; break; \
680 case 2467000: ch = 12; break; \
681 case 2472000: ch = 13; break; \
682 case 2484000: ch = 14; break; \
683 case 5180000: ch = 36; /* UNII */ break; \
684 case 5200000: ch = 40; /* UNII */ break; \
685 case 5220000: ch = 44; /* UNII */ break; \
686 case 5240000: ch = 48; /* UNII */ break; \
687 case 5260000: ch = 52; /* UNII */ break; \
688 case 5280000: ch = 56; /* UNII */ break; \
689 case 5300000: ch = 60; /* UNII */ break; \
690 case 5320000: ch = 64; /* UNII */ break; \
691 case 5745000: ch = 149; /* UNII */ break; \
692 case 5765000: ch = 153; /* UNII */ break; \
693 case 5785000: ch = 157; /* UNII */ break; \
694 case 5805000: ch = 161; /* UNII */ break; \
695 case 5825000: ch = 165; /* UNII */ break; \
696 case 5500000: ch = 100; /* HiperLAN2 */ break; \
697 case 5520000: ch = 104; /* HiperLAN2 */ break; \
698 case 5540000: ch = 108; /* HiperLAN2 */ break; \
699 case 5560000: ch = 112; /* HiperLAN2 */ break; \
700 case 5580000: ch = 116; /* HiperLAN2 */ break; \
701 case 5600000: ch = 120; /* HiperLAN2 */ break; \
702 case 5620000: ch = 124; /* HiperLAN2 */ break; \
703 case 5640000: ch = 128; /* HiperLAN2 */ break; \
704 case 5660000: ch = 132; /* HiperLAN2 */ break; \
705 case 5680000: ch = 136; /* HiperLAN2 */ break; \
706 case 5700000: ch = 140; /* HiperLAN2 */ break; \
707 case 5170000: ch = 34; /* Japan MMAC */ break; \
708 case 5190000: ch = 38; /* Japan MMAC */ break; \
709 case 5210000: ch = 42; /* Japan MMAC */ break; \
710 case 5230000: ch = 46; /* Japan MMAC */ break; \
711 case 4920000: ch = 184; /* Japan */ break; \
712 case 4940000: ch = 188; /* Japan */ break; \
713 case 4960000: ch = 192; /* Japan */ break; \
714 case 4980000: ch = 196; /* Japan */ break; \
715 case 5040000: ch = 208; /* Japan, means J08 */ break; \
716 case 5060000: ch = 212; /* Japan, means J12 */ break; \
717 case 5080000: ch = 216; /* Japan, means J16 */ break; \
718 default: ch = 1; break; \
723 // Common fragment list structure - Identical to the scatter gather frag list structure
725 //#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
726 //#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
727 #define NIC_MAX_PHYS_BUF_COUNT 8
729 typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
733 } RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
736 typedef struct _RTMP_SCATTER_GATHER_LIST {
737 ULONG NumberOfElements;
739 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
740 } RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
743 // Some utility macros
746 #define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
750 #define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
753 #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))))
755 #define INC_COUNTER64(Val) (Val.QuadPart++)
757 #define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
758 #define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
759 #define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
760 #define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
762 // Check LEAP & CCKM flags
763 #define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
764 #define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
766 // if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
767 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
769 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
771 _pExtraLlcSnapEncap = SNAP_802_1H; \
772 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
773 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
775 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
780 _pExtraLlcSnapEncap = NULL; \
784 // New Define for new Tx Path.
785 #define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
787 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
789 _pExtraLlcSnapEncap = SNAP_802_1H; \
790 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
791 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
793 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
798 _pExtraLlcSnapEncap = NULL; \
803 #define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
805 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
806 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
807 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
810 // if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
811 // else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
812 // else remove the LLC/SNAP field from the result Ethernet frame
813 // Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
815 // _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
816 // _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
817 #define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
821 _pRemovedLLCSNAP = NULL; \
822 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
823 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
825 PUCHAR pProto = _pData + 6; \
827 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
828 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
830 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
831 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
832 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
836 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
837 _pRemovedLLCSNAP = _pData; \
838 _DataSize -= LENGTH_802_1_H; \
839 _pData += LENGTH_802_1_H; \
844 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
845 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
846 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
850 #define SWITCH_AB( _pAA, _pBB) \
858 // Enqueue this frame to MLME engine
859 // We need to enqueue the whole frame because MLME need to pass data type
860 // information from 802.11 header
862 #define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
864 UINT32 High32TSF=0, Low32TSF=0; \
865 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
870 //Need to collect each ant's rssi concurrently
871 //rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
872 #define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
876 if (_pAd->RxAnt.EvaluatePeriod == 0) \
878 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
879 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
881 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
883 AvgRssi = _rssi1 << 3; \
884 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
888 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
889 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
890 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
891 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
894 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
895 AvgRssi = _rssi1 << 3; \
897 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
898 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
904 #define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
905 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
907 #define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
908 #define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
911 // Check if it is Japan W53(ch52,56,60,64) channel.
913 #define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
915 #ifdef CONFIG_STA_SUPPORT
916 #define STA_PORT_SECURED(_pAd) \
918 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
919 NdisAcquireSpinLock(&_pAd->MacTabLock); \
920 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
921 NdisReleaseSpinLock(&_pAd->MacTabLock); \
923 #endif // CONFIG_STA_SUPPORT //
927 // Register set pair for initialzation register set definition
929 typedef struct _RTMP_REG_PAIR
933 } RTMP_REG_PAIR, *PRTMP_REG_PAIR;
935 typedef struct _REG_PAIR
939 } REG_PAIR, *PREG_PAIR;
942 // Register set pair for initialzation register set definition
944 typedef struct _RTMP_RF_REGS
951 } RTMP_RF_REGS, *PRTMP_RF_REGS;
953 typedef struct _FREQUENCY_ITEM {
958 } FREQUENCY_ITEM, *PFREQUENCY_ITEM;
961 // Data buffer for DMA operation, the buffer must be contiguous physical memory
962 // Both DMA to / from CPU use the same structure.
964 typedef struct _RTMP_DMABUF
967 PVOID AllocVa; // TxBuf virtual address
968 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
969 } RTMP_DMABUF, *PRTMP_DMABUF;
972 typedef union _HEADER_802_11_SEQ{
985 } HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
988 // Data buffer for DMA operation, the buffer must be contiguous physical memory
989 // Both DMA to / from CPU use the same structure.
991 typedef struct _RTMP_REORDERBUF
994 PVOID AllocVa; // TxBuf virtual address
995 UCHAR Header802_3[14];
996 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
1003 } RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1006 // Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1007 // contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
1008 // which won't be released, driver has to wait until upper layer return the packet
1009 // before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
1010 // to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
1011 // which driver should ACK upper layer when the tx is physically done or failed.
1013 typedef struct _RTMP_DMACB
1015 ULONG AllocSize; // Control block size
1016 PVOID AllocVa; // Control block virtual address
1017 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1018 PNDIS_PACKET pNdisPacket;
1019 PNDIS_PACKET pNextNdisPacket;
1021 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1022 } RTMP_DMACB, *PRTMP_DMACB;
1024 typedef struct _RTMP_TX_BUF
1028 ULONG AllocSize; // Control block size
1029 PVOID AllocVa; // Control block virtual address
1030 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1031 } RTMP_TXBUF, *PRTMP_TXBUF;
1033 typedef struct _RTMP_RX_BUF
1037 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1038 } RTMP_RXBUF, *PRTMP_RXBUF;
1039 typedef struct _RTMP_TX_RING
1041 RTMP_DMACB Cell[TX_RING_SIZE];
1044 UINT32 TxSwFreeIdx; // software next free tx index
1045 } RTMP_TX_RING, *PRTMP_TX_RING;
1047 typedef struct _RTMP_RX_RING
1049 RTMP_DMACB Cell[RX_RING_SIZE];
1052 INT32 RxSwReadIdx; // software next read index
1053 } RTMP_RX_RING, *PRTMP_RX_RING;
1055 typedef struct _RTMP_MGMT_RING
1057 RTMP_DMACB Cell[MGMT_RING_SIZE];
1060 UINT32 TxSwFreeIdx; // software next free tx index
1061 } RTMP_MGMT_RING, *PRTMP_MGMT_RING;
1064 // Statistic counter structure
1066 typedef struct _COUNTER_802_3
1069 ULONG GoodTransmits;
1076 ULONG RcvAlignmentErrors;
1078 ULONG MoreCollisions;
1080 } COUNTER_802_3, *PCOUNTER_802_3;
1082 typedef struct _COUNTER_802_11 {
1084 LARGE_INTEGER LastTransmittedFragmentCount;
1085 LARGE_INTEGER TransmittedFragmentCount;
1086 LARGE_INTEGER MulticastTransmittedFrameCount;
1087 LARGE_INTEGER FailedCount;
1088 LARGE_INTEGER RetryCount;
1089 LARGE_INTEGER MultipleRetryCount;
1090 LARGE_INTEGER RTSSuccessCount;
1091 LARGE_INTEGER RTSFailureCount;
1092 LARGE_INTEGER ACKFailureCount;
1093 LARGE_INTEGER FrameDuplicateCount;
1094 LARGE_INTEGER ReceivedFragmentCount;
1095 LARGE_INTEGER MulticastReceivedFrameCount;
1096 LARGE_INTEGER FCSErrorCount;
1097 } COUNTER_802_11, *PCOUNTER_802_11;
1099 typedef struct _COUNTER_RALINK {
1100 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1101 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1102 ULONG BeenDisassociatedCount;
1103 ULONG BadCQIAutoRecoveryCount;
1104 ULONG PoorCQIRoamingCount;
1105 ULONG MgmtRingFullCount;
1106 ULONG RxCountSinceLastNULL;
1108 ULONG RxRingErrCount;
1110 ULONG TxRingErrCount;
1111 LARGE_INTEGER RealFcsErrCount;
1112 ULONG PendingNdisPacketCount;
1114 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1115 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1116 UINT32 OneSecTxDoneCount;
1117 ULONG OneSecRxCount;
1118 UINT32 OneSecTxAggregationCount;
1119 UINT32 OneSecRxAggregationCount;
1121 UINT32 OneSecFrameDuplicateCount;
1124 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1127 UINT32 OneSecTxNoRetryOkCount;
1128 UINT32 OneSecTxRetryOkCount;
1129 UINT32 OneSecTxFailCount;
1130 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1131 UINT32 OneSecRxOkCnt; // RX without error
1132 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1133 UINT32 OneSecRxFcsErrCnt; // CRC error
1134 UINT32 OneSecBeaconSentCnt;
1135 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1136 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1139 ULONG TxNonAggCount;
1140 ULONG TxAgg1MPDUCount;
1141 ULONG TxAgg2MPDUCount;
1142 ULONG TxAgg3MPDUCount;
1143 ULONG TxAgg4MPDUCount;
1144 ULONG TxAgg5MPDUCount;
1145 ULONG TxAgg6MPDUCount;
1146 ULONG TxAgg7MPDUCount;
1147 ULONG TxAgg8MPDUCount;
1148 ULONG TxAgg9MPDUCount;
1149 ULONG TxAgg10MPDUCount;
1150 ULONG TxAgg11MPDUCount;
1151 ULONG TxAgg12MPDUCount;
1152 ULONG TxAgg13MPDUCount;
1153 ULONG TxAgg14MPDUCount;
1154 ULONG TxAgg15MPDUCount;
1155 ULONG TxAgg16MPDUCount;
1157 LARGE_INTEGER TransmittedOctetsInAMSDU;
1158 LARGE_INTEGER TransmittedAMSDUCount;
1159 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1160 LARGE_INTEGER ReceivedAMSDUCount;
1161 LARGE_INTEGER TransmittedAMPDUCount;
1162 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1163 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1164 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1165 } COUNTER_RALINK, *PCOUNTER_RALINK;
1167 typedef struct _PID_COUNTER {
1168 ULONG TxAckRequiredCount; // CRC error
1170 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1171 ULONG LastSuccessRate;
1172 } PID_COUNTER, *PPID_COUNTER;
1174 typedef struct _COUNTER_DRS {
1175 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1176 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1177 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1178 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1179 ULONG CurrTxRateStableTime; // # of second in current TX rate
1180 BOOLEAN fNoisyEnvironment;
1181 BOOLEAN fLastSecAccordingRSSI;
1182 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1183 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1184 ULONG LastTxOkCount;
1185 } COUNTER_DRS, *PCOUNTER_DRS;
1188 // Arcfour Structure Added by PaulWu
1190 typedef struct _ARCFOUR
1195 } ARCFOURCONTEXT, *PARCFOURCONTEXT;
1197 // MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1198 typedef struct _RECEIVE_SETTING {
1199 #ifdef RT_BIG_ENDIAN
1203 USHORT STBC:2; //SPACE
1205 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1206 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1208 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1209 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1211 USHORT STBC:2; //SPACE
1216 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1218 // Shared key data structure
1219 typedef struct _WEP_KEY {
1220 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1221 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1222 } WEP_KEY, *PWEP_KEY;
1224 typedef struct _CIPHER_KEY {
1225 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1226 UCHAR RxMic[8]; // make alignment
1228 UCHAR TxTsc[6]; // 48bit TSC value
1229 UCHAR RxTsc[6]; // 48bit TSC value
1230 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1232 #ifdef CONFIG_STA_SUPPORT
1234 #endif // CONFIG_STA_SUPPORT //
1235 // Key length for each key, 0: entry is invalid
1236 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1237 } CIPHER_KEY, *PCIPHER_KEY;
1239 typedef struct _BBP_TUNING_STRUCT {
1241 UCHAR FalseCcaCountUpperBound; // 100 per sec
1242 UCHAR FalseCcaCountLowerBound; // 10 per sec
1243 UCHAR R17LowerBound; // specified in E2PROM
1244 UCHAR R17UpperBound; // 0x68 according to David Tung
1245 UCHAR CurrentR17Value;
1246 } BBP_TUNING, *PBBP_TUNING;
1248 typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1249 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1250 UCHAR EvaluateStableCnt;
1251 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1252 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1253 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1254 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1255 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1256 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1257 SHORT Pair1LastAvgRssi; //
1258 SHORT Pair2LastAvgRssi; //
1259 ULONG RcvPktNumWhenEvaluate;
1260 BOOLEAN FirstPktArrivedWhenEvaluate;
1261 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1262 } SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1264 typedef struct _LEAP_AUTH_INFO {
1265 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1266 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1268 UCHAR UserName[256]; //LEAP, User name
1270 UCHAR Password[256]; //LEAP, User Password
1272 } LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1275 UCHAR Addr[MAC_ADDR_LEN];
1276 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1277 //00 02-Authentication timeout
1278 //00 03-Challenge from AP failed
1279 //00 04-Challenge to AP failed
1281 } ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1285 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1286 } ROGUEAP_TABLE, *PROGUEAP_TABLE;
1292 } CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1295 // Receive Tuple Cache Format
1297 typedef struct _TUPLE_CACHE {
1299 UCHAR MacAddress[MAC_ADDR_LEN];
1302 } TUPLE_CACHE, *PTUPLE_CACHE;
1305 // Fragment Frame structure
1307 typedef struct _FRAGMENT_FRAME {
1308 PNDIS_PACKET pFragPacket;
1312 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1313 } FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1317 // Packet information for NdisQueryPacket
1319 typedef struct _PACKET_INFO {
1320 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1321 UINT BufferCount ; // Number of Buffer descriptor chained
1322 UINT TotalPacketLength ; // Self explained
1323 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1324 } PACKET_INFO, *PPACKET_INFO;
1327 // Tkip Key structure which RC4 key & MIC calculation
1329 typedef struct _TKIP_KEY_INFO {
1330 UINT nBytesInM; // # bytes in M for MICKEY
1333 ULONG K0; // for MICKEY Low
1334 ULONG K1; // for MICKEY Hig
1335 ULONG L; // Current state for MICKEY
1336 ULONG R; // Current state for MICKEY
1337 ULONG M; // Message accumulator for MICKEY
1340 } TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1343 // Private / Misc data, counters for driver internal use
1345 typedef struct __PRIVATE_STRUC {
1346 UINT SystemResetCnt; // System reset counter
1347 UINT TxRingFullCnt; // Tx ring full occurrance number
1348 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1349 // Variables for WEP encryption / decryption in rtmp_wep.c
1351 ARCFOURCONTEXT WEPCONTEXT;
1355 } PRIVATE_STRUC, *PPRIVATE_STRUC;
1357 // structure to tune BBP R66 (BBP TUNING)
1358 typedef struct _BBP_R66_TUNING {
1360 USHORT FalseCcaLowerThreshold; // default 100
1361 USHORT FalseCcaUpperThreshold; // default 512
1363 UCHAR R66CurrentValue;
1364 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1365 } BBP_R66_TUNING, *PBBP_R66_TUNING;
1367 // structure to store channel TX power
1368 typedef struct _CHANNEL_TX_POWER {
1369 USHORT RemainingTimeForUse; //unit: sec
1371 #ifdef DOT11N_DRAFT3
1372 BOOLEAN bEffectedChannel; // For BW 40 operating in 2.4GHz , the "effected channel" is the channel that is covered in 40Mhz.
1373 #endif // DOT11N_DRAFT3 //
1378 } CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1380 // structure to store 802.11j channel TX power
1381 typedef struct _CHANNEL_11J_TX_POWER {
1383 UCHAR BW; // BW_10 or BW_20
1386 USHORT RemainingTimeForUse; //unit: sec
1387 } CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1389 typedef enum _ABGBAND_STATE_ {
1395 typedef struct _MLME_STRUCT {
1396 #ifdef CONFIG_STA_SUPPORT
1397 // STA state machines
1398 STATE_MACHINE CntlMachine;
1399 STATE_MACHINE AssocMachine;
1400 STATE_MACHINE AuthMachine;
1401 STATE_MACHINE AuthRspMachine;
1402 STATE_MACHINE SyncMachine;
1403 STATE_MACHINE WpaPskMachine;
1404 STATE_MACHINE LeapMachine;
1405 STATE_MACHINE AironetMachine;
1406 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1407 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1408 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1409 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1410 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1411 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1412 #endif // CONFIG_STA_SUPPORT //
1413 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1415 STATE_MACHINE ActMachine;
1418 #ifdef QOS_DLS_SUPPORT
1419 STATE_MACHINE DlsMachine;
1420 STATE_MACHINE_FUNC DlsFunc[DLS_FUNC_SIZE];
1421 #endif // QOS_DLS_SUPPORT //
1426 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1427 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1428 ULONG LastSendNULLpsmTime;
1431 NDIS_SPIN_LOCK TaskLock;
1436 RALINK_TIMER_STRUCT PeriodicTimer;
1437 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1438 RALINK_TIMER_STRUCT LinkDownTimer;
1439 RALINK_TIMER_STRUCT LinkUpTimer;
1440 ULONG PeriodicRound;
1441 ULONG OneSecPeriodicRound;
1444 BOOLEAN bLowThroughput;
1445 BOOLEAN bEnableAutoAntennaCheck;
1446 RALINK_TIMER_STRUCT RxAntEvalTimer;
1449 UCHAR CaliBW40RfR24;
1450 UCHAR CaliBW20RfR24;
1453 } MLME_STRUCT, *PMLME_STRUCT;
1455 // structure for radar detection and channel switch
1456 typedef struct _RADAR_DETECT_STRUCT {
1457 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
1458 UCHAR CSCount; //Channel switch counter
1459 UCHAR CSPeriod; //Channel switch period (beacon count)
1460 UCHAR RDCount; //Radar detection counter
1461 UCHAR RDMode; //Radar Detection mode
1462 UCHAR RDDurRegion; //Radar detection duration region
1469 ULONG InServiceMonitorCount; // unit: sec
1470 UINT8 DfsSessionTime;
1473 UINT8 LongPulseRadarTh;
1474 } RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1476 #ifdef CARRIER_DETECTION_SUPPORT
1477 typedef enum CD_STATE_n
1484 typedef struct CARRIER_DETECTION_s
1487 UINT8 CDSessionTime;
1490 } CARRIER_DETECTION, *PCARRIER_DETECTION;
1491 #endif // CARRIER_DETECTION_SUPPORT //
1493 typedef enum _REC_BLOCKACK_STATUS
1497 Recipient_HandleRes,
1499 } REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1501 typedef enum _ORI_BLOCKACK_STATUS
1507 } ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1509 #ifdef DOT11_N_SUPPORT
1510 typedef struct _BA_ORI_ENTRY{
1515 // Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1517 USHORT TimeOutValue;
1518 ORI_BLOCKACK_STATUS ORI_BA_Status;
1519 RALINK_TIMER_STRUCT ORIBATimer;
1521 } BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1523 typedef struct _BA_REC_ENTRY {
1526 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1528 //UCHAR Curindidx; // the head in the RX reordering buffer
1530 // USHORT LastIndSeqAtTimer;
1531 USHORT TimeOutValue;
1532 RALINK_TIMER_STRUCT RECBATimer;
1533 ULONG LastIndSeqAtTimer;
1536 REC_BLOCKACK_STATUS REC_BA_Status;
1537 // UCHAR RxBufIdxUsed;
1538 // corresponding virtual address for RX reordering packet storage.
1539 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1540 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1541 // struct _BA_REC_ENTRY *pNext;
1543 struct reordering_list list;
1544 } BA_REC_ENTRY, *PBA_REC_ENTRY;
1548 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1549 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1550 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1551 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1552 } BA_TABLE, *PBA_TABLE;
1554 //For QureyBATableOID use;
1555 typedef struct PACKED _OID_BA_REC_ENTRY{
1556 UCHAR MACAddr[MAC_ADDR_LEN];
1557 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1560 REC_BLOCKACK_STATUS REC_BA_Status[8];
1561 } OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1563 //For QureyBATableOID use;
1564 typedef struct PACKED _OID_BA_ORI_ENTRY{
1565 UCHAR MACAddr[MAC_ADDR_LEN];
1566 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
1569 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1570 } OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1572 typedef struct _QUERYBA_TABLE{
1573 OID_BA_ORI_ENTRY BAOriEntry[32];
1574 OID_BA_REC_ENTRY BARecEntry[32];
1575 UCHAR OriNum;// Number of below BAOriEntry
1576 UCHAR RecNum;// Number of below BARecEntry
1577 } QUERYBA_TABLE, *PQUERYBA_TABLE;
1579 typedef union _BACAP_STRUC {
1580 #ifdef RT_BIG_ENDIAN
1583 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.
1584 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1585 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1586 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1587 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1588 UINT32 MpduDensity:3;
1589 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1590 UINT32 AutoBA:1; // automatically BA
1591 UINT32 TxBAWinLimit:8;
1592 UINT32 RxBAWinLimit:8;
1596 UINT32 RxBAWinLimit:8;
1597 UINT32 TxBAWinLimit:8;
1598 UINT32 AutoBA:1; // automatically BA
1599 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1600 UINT32 MpduDensity:3;
1601 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1602 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1603 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1604 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1605 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.
1610 } BACAP_STRUC, *PBACAP_STRUC;
1611 #endif // DOT11_N_SUPPORT //
1613 //This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1614 typedef struct _IOT_STRUC {
1616 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1617 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1618 ULONG OneSecInWindowCount;
1619 ULONG OneSecFrameDuplicateCount;
1620 ULONG OneSecOutWindowCount;
1625 BOOLEAN bRTSLongProtOn;
1626 #ifdef CONFIG_STA_SUPPORT
1627 BOOLEAN bLastAtheros;
1628 BOOLEAN bCurrentAtheros;
1629 BOOLEAN bNowAtherosBurstOn;
1630 BOOLEAN bNextDisableRxBA;
1632 #endif // CONFIG_STA_SUPPORT //
1633 } IOT_STRUC, *PIOT_STRUC;
1635 // This is the registry setting for 802.11n transmit setting. Used in advanced page.
1636 typedef union _REG_TRANSMIT_SETTING {
1637 #ifdef RT_BIG_ENDIAN
1643 UINT32 STBC:1; //SPACE
1645 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1646 UINT32 TxBF:1; // 3*3
1648 //UINT32 MCS:7; // MCS
1654 //UINT32 MCS:7; // MCS
1657 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1659 UINT32 STBC:1; //SPACE
1667 } REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1669 typedef union _DESIRED_TRANSMIT_SETTING {
1670 #ifdef RT_BIG_ENDIAN
1673 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1675 USHORT MCS:7; // MCS
1679 USHORT MCS:7; // MCS
1681 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1686 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1689 BOOLEAN IsRecipient;
1690 UCHAR MACAddr[MAC_ADDR_LEN];
1694 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1695 } OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1698 // Multiple SSID structure
1700 #define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1701 #define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1703 /* clear bcmc TIM bit */
1704 #define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1705 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1707 /* set bcmc TIM bit */
1708 #define WLAN_MR_TIM_BCMC_SET(apidx) \
1709 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1711 /* clear a station PS TIM bit */
1712 #define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1713 { UCHAR tim_offset = wcid >> 3; \
1714 UCHAR bit_offset = wcid & 0x7; \
1715 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1717 /* set a station PS TIM bit */
1718 #define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1719 { UCHAR tim_offset = wcid >> 3; \
1720 UCHAR bit_offset = wcid & 0x7; \
1721 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1724 #define BEACON_BITMAP_MASK 0xff
1725 typedef struct _BEACON_SYNC_STRUCT_
1727 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1728 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1729 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1730 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1731 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1732 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1733 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1734 }BEACON_SYNC_STRUCT;
1737 typedef struct _MULTISSID_STRUCT {
1738 UCHAR Bssid[MAC_ADDR_LEN];
1740 CHAR Ssid[MAX_LEN_OF_SSID];
1741 USHORT CapabilityInfo;
1745 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1746 NDIS_802_11_WEP_STATUS WepStatus;
1747 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1748 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1752 ULONG ReceivedByteCount;
1753 ULONG TransmittedByteCount;
1757 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1758 RT_HT_PHY_INFO DesiredHtPhyInfo;
1759 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1760 BOOLEAN bAutoTxRateSwitch;
1762 //CIPHER_KEY SharedKey[SHARE_KEY_NUM]; // ref pAd->SharedKey[BSS][4]
1765 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1766 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1767 UCHAR DesiredRatesIndex;
1768 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1770 // ULONG TimBitmap; // bit0 for broadcast, 1 for AID1, 2 for AID2, ...so on
1771 // ULONG TimBitmap2; // b0 for AID32, b1 for AID33, ... and so on
1772 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1782 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1783 UCHAR BANClass3Data;
1784 ULONG IsolateInterStaTraffic;
1787 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1790 UCHAR TimIELocationInBeacon;
1791 UCHAR CapabilityInfoLocationInBeacon;
1792 // outgoing BEACON frame buffer and corresponding TXWI
1793 // PTXWI_STRUC BeaconTxWI; //
1794 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1797 UINT16 StationKeepAliveTime; // unit: second
1800 USHORT VLAN_Priority;
1802 RT_802_11_ACL AccessControlList;
1805 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1806 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1808 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1810 // For 802.1x daemon setting per BSS
1811 UCHAR radius_srv_num;
1812 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1815 unsigned int mylinkid;
1819 UINT32 RcvdConflictSsidCount;
1820 UINT32 RcvdSpoofedAssocRespCount;
1821 UINT32 RcvdSpoofedReassocRespCount;
1822 UINT32 RcvdSpoofedProbeRespCount;
1823 UINT32 RcvdSpoofedBeaconCount;
1824 UINT32 RcvdSpoofedDisassocCount;
1825 UINT32 RcvdSpoofedAuthCount;
1826 UINT32 RcvdSpoofedDeauthCount;
1827 UINT32 RcvdSpoofedUnknownMgmtCount;
1828 UINT32 RcvdReplayAttackCount;
1830 CHAR RssiOfRcvdConflictSsid;
1831 CHAR RssiOfRcvdSpoofedAssocResp;
1832 CHAR RssiOfRcvdSpoofedReassocResp;
1833 CHAR RssiOfRcvdSpoofedProbeResp;
1834 CHAR RssiOfRcvdSpoofedBeacon;
1835 CHAR RssiOfRcvdSpoofedDisassoc;
1836 CHAR RssiOfRcvdSpoofedAuth;
1837 CHAR RssiOfRcvdSpoofedDeauth;
1838 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1839 CHAR RssiOfRcvdReplayAttack;
1843 } MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1847 #ifdef DOT11N_DRAFT3
1848 typedef enum _BSS2040COEXIST_FLAG{
1849 BSS_2040_COEXIST_DISABLE = 0,
1850 BSS_2040_COEXIST_TIMER_FIRED = 1,
1851 BSS_2040_COEXIST_INFO_SYNC = 2,
1852 BSS_2040_COEXIST_INFO_NOTIFY = 4,
1853 }BSS2040COEXIST_FLAG;
1854 #endif // DOT11N_DRAFT3 //
1856 // configuration common to OPMODE_AP as well as OPMODE_STA
1857 typedef struct _COMMON_CONFIG {
1859 BOOLEAN bCountryFlag;
1860 UCHAR CountryCode[3];
1862 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1863 UCHAR CountryRegionForABand; // Enum of country region for A band
1864 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1865 USHORT Dsifs; // in units of usec
1866 ULONG PacketFilter; // Packet filter for receiving
1868 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1869 UCHAR SsidLen; // the actual ssid length in used
1870 UCHAR LastSsidLen; // the actual ssid length in used
1871 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1872 UCHAR LastBssid[MAC_ADDR_LEN];
1874 UCHAR Bssid[MAC_ADDR_LEN];
1875 USHORT BeaconPeriod;
1877 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1879 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1881 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1883 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1884 UCHAR MaxDesiredRate;
1885 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1887 ULONG BasicRateBitmap; // backup basic ratebitmap
1889 BOOLEAN bAPSDCapable;
1890 BOOLEAN bInServicePeriod;
1895 BOOLEAN bNeedSendTriggerFrame;
1896 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1897 ULONG TriggerTimerCount;
1899 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1900 // move to MULTISSID_STRUCT for MBSS
1901 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1902 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1903 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1904 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1905 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1906 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1907 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1908 //BOOLEAN bAutoTxRateSwitch;
1909 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1910 UCHAR RtsRate; // RATE_xxx
1911 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1912 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1913 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1915 USHORT RtsThreshold; // in unit of BYTE
1916 USHORT FragmentThreshold; // in unit of BYTE
1918 UCHAR TxPower; // in unit of mW
1919 ULONG TxPowerPercentage; // 0~100 %
1920 ULONG TxPowerDefault; // keep for TxPowerPercentage
1922 #ifdef DOT11_N_SUPPORT
1923 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1924 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1925 #endif // DOT11_N_SUPPORT //
1926 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1927 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1928 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1929 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1930 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1931 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1932 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1933 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1934 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1935 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1937 #ifdef DOT11_N_SUPPORT
1939 #endif // DOT11_N_SUPPORT //
1940 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1941 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1942 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1943 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1944 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
1945 #ifdef CONFIG_STA_SUPPORT
1946 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1947 #endif // CONFIG_STA_SUPPORT //
1948 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1949 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1950 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1951 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1952 ULONG OpStatusFlags;
1954 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1955 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1956 BOOLEAN bRxAntDiversity; // 0:disable, 1:enable Software Rx Antenna Diversity.
1958 // IEEE802.11H--DFS.
1959 RADAR_DETECT_STRUCT RadarDetect;
1961 #ifdef CARRIER_DETECTION_SUPPORT
1962 CARRIER_DETECTION CarrierDetect;
1963 #endif // CARRIER_DETECTION_SUPPORT //
1965 #ifdef DOT11_N_SUPPORT
1967 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1968 //RT_HT_CAPABILITY SupportedHtPhy;
1969 RT_HT_CAPABILITY DesiredHtPhy;
1970 HT_CAPABILITY_IE HtCapability;
1971 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1972 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1973 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1974 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
1976 #ifdef DOT11N_DRAFT3
1977 UCHAR Bss2040CoexistFlag; // bit 0: bBssCoexistTimerRunning, bit 1: NeedSyncAddHtInfo.
1978 RALINK_TIMER_STRUCT Bss2040CoexistTimer;
1980 //This IE is used for 20/40 BSS Coexistence.
1981 BSS_2040_COEXIST_IE BSS2040CoexistInfo;
1982 // ====== 11n D3.0 =======================>
1983 USHORT Dot11OBssScanPassiveDwell; // Unit : TU. 5~1000
1984 USHORT Dot11OBssScanActiveDwell; // Unit : TU. 10~1000
1985 USHORT Dot11BssWidthTriggerScanInt; // Unit : Second
1986 USHORT Dot11OBssScanPassiveTotalPerChannel; // Unit : TU. 200~10000
1987 USHORT Dot11OBssScanActiveTotalPerChannel; // Unit : TU. 20~10000
1988 USHORT Dot11BssWidthChanTranDelayFactor;
1989 USHORT Dot11OBssScanActivityThre; // Unit : percentage
1991 ULONG Dot11BssWidthChanTranDelay; // multiple of (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1992 ULONG CountDownCtr; // CountDown Counter from (Dot11BssWidthTriggerScanInt * Dot11BssWidthChanTranDelayFactor)
1994 NDIS_SPIN_LOCK TriggerEventTabLock;
1995 BSS_2040_COEXIST_IE LastBSSCoexist2040;
1996 BSS_2040_COEXIST_IE BSSCoexist2040;
1997 TRIGGER_EVENT_TAB TriggerEventTab;
1998 UCHAR ChannelListIdx;
1999 // <====== 11n D3.0 =======================
2000 BOOLEAN bOverlapScanning;
2001 #endif // DOT11N_DRAFT3 //
2004 BOOLEAN bMIMOPSEnable;
2006 BOOLEAN bDisableReordering;
2007 BOOLEAN bForty_Mhz_Intolerant;
2008 BOOLEAN bExtChannelSwitchAnnouncement;
2009 BOOLEAN bRcvBSSWidthTriggerEvents;
2010 ULONG LastRcvBSSWidthTriggerEventsTime;
2013 #endif // DOT11_N_SUPPORT //
2015 // Enable wireless event
2016 BOOLEAN bWirelessEvent;
2017 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
2019 // Tx & Rx Stream number selection
2023 // transmit phy mode, trasmit rate for Multicast.
2024 #ifdef MCAST_RATE_SPECIFIC
2025 UCHAR McastTransmitMcs;
2026 UCHAR McastTransmitPhyMode;
2027 #endif // MCAST_RATE_SPECIFIC //
2029 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2032 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
2033 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
2034 RT_HT_CAPABILITY SupportedHtPhy;
2035 ULONG MaxPktOneTxBulk;
2039 BEACON_SYNC_STRUCT *pBeaconSync;
2040 RALINK_TIMER_STRUCT BeaconUpdateTimer;
2041 UINT32 BeaconAdjust;
2042 UINT32 BeaconFactor;
2043 UINT32 BeaconRemain;
2047 NDIS_SPIN_LOCK MeasureReqTabLock;
2048 PMEASURE_REQ_TAB pMeasureReqTab;
2050 NDIS_SPIN_LOCK TpcReqTabLock;
2051 PTPC_REQ_TAB pTpcReqTab;
2053 // transmit phy mode, trasmit rate for Multicast.
2054 #ifdef MCAST_RATE_SPECIFIC
2055 HTTRANSMIT_SETTING MCastPhyMode;
2056 #endif // MCAST_RATE_SPECIFIC //
2059 UINT16 DefineMaxTxPwr;
2060 #endif // SINGLE_SKU //
2063 } COMMON_CONFIG, *PCOMMON_CONFIG;
2066 #ifdef CONFIG_STA_SUPPORT
2067 /* Modified by Wu Xi-Kun 4/21/2006 */
2068 // STA configuration and status
2069 typedef struct _STA_ADMIN_CONFIG {
2071 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2072 // the user intended configuration, but not necessary fully equal to the final
2073 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
2074 // AP or IBSS holder).
2075 // Once initialized, user configuration can only be changed via OID_xxx
2076 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
2077 USHORT AtimWin; // used when starting a new IBSS
2080 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
2081 // the user intended configuration, and should be always applied to the final
2082 // settings in ACTIVE BSS without compromising with the BSS holder.
2083 // Once initialized, user configuration can only be changed via OID_xxx
2085 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
2086 USHORT DefaultListenCount; // default listen count;
2087 ULONG WindowsPowerMode; // Power mode for AC power
2088 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
2089 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
2090 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
2091 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
2093 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
2094 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
2095 USHORT DisassocReason;
2096 UCHAR DisassocSta[MAC_ADDR_LEN];
2097 USHORT DeauthReason;
2098 UCHAR DeauthSta[MAC_ADDR_LEN];
2099 USHORT AuthFailReason;
2100 UCHAR AuthFailSta[MAC_ADDR_LEN];
2102 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2103 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2104 NDIS_802_11_WEP_STATUS WepStatus;
2105 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
2107 // Add to support different cipher suite for WPA2/WPA mode
2108 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2109 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2110 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2111 USHORT RsnCapability;
2113 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2115 UCHAR PMK[32]; // WPA PSK mode PMK
2116 UCHAR PTK[64]; // WPA PSK mode PTK
2117 UCHAR GTK[32]; // GTK from authenticator
2118 BSSID_INFO SavedPMK[PMKID_NO];
2119 UINT SavedPMKNum; // Saved PMKID number
2124 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2127 // For WPA countermeasures
2128 ULONG LastMicErrorTime; // record last MIC error time
2129 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2130 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2131 // For WPA-PSK supplicant state
2132 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
2133 UCHAR ReplayCounter[8];
2134 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
2135 UCHAR SNonce[32]; // SNonce for WPA-PSK
2137 UCHAR LastSNR0; // last received BEACON's SNR
2138 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
2139 RSSI_SAMPLE RssiSample;
2140 ULONG NumOfAvgRssiSample;
2142 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
2143 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
2144 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
2145 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
2147 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
2148 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
2149 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
2150 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
2151 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2152 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2153 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2155 //BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2156 //BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2157 //BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2159 // New for WPA, windows want us to to keep association information and
2160 // Fixed IEs from last association response
2161 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
2162 USHORT ReqVarIELen; // Length of next VIE include EID & Length
2163 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
2164 USHORT ResVarIELen; // Length of next VIE include EID & Length
2165 UCHAR ResVarIEs[MAX_VIE_LEN];
2168 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2170 // New variables used for CCX 1.0
2172 BOOLEAN bCkipCmicOn;
2174 UCHAR GIV[3]; //for CCX iv
2179 LEAP_AUTH_INFO LeapAuthInfo;
2181 UCHAR NetworkChallenge[8];
2182 UCHAR NetworkChallengeResponse[24];
2183 UCHAR PeerChallenge[8];
2185 UCHAR PeerChallengeResponse[24];
2186 UCHAR SessionKey[16]; //Network session keys (NSK)
2187 RALINK_TIMER_STRUCT LeapAuthTimer;
2188 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2190 // New control flags for CCX
2191 CCX_CONTROL CCXControl; // Master administration state
2192 BOOLEAN CCXEnable; // Actual CCX state
2193 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2194 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2195 UCHAR CCXReqType; // Current processing CCX request type
2196 BSS_TABLE CCXBssTab; // BSS Table
2197 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2198 USHORT FrameReportLen; // Current Frame report length
2199 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2200 USHORT RPIDensity[8]; // Array for RPI density collection
2201 // Start address of each BSS table within FrameReportBuf
2202 // It's important to update the RxPower of the corresponding Bss
2203 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2204 USHORT BeaconToken; // Token for beacon report
2205 ULONG LastBssIndex; // Most current reported Bss index
2206 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2207 UCHAR RMReqCnt; // Number of measurement request saved.
2208 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2209 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
2210 // It must be the same channel with maximum duration
2211 USHORT ParallelDuration; // Maximum duration for parallel measurement
2212 UCHAR ParallelChannel; // Only one channel with parallel measurement
2213 USHORT IAPPToken; // IAPP dialog token
2214 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2215 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2216 // Hack for channel load and noise histogram parameters
2217 UCHAR NHFactor; // Parameter for Noise histogram
2218 UCHAR CLFactor; // Parameter for channel load
2220 UCHAR KRK[16]; //Key Refresh Key.
2221 UCHAR BTK[32]; //Base Transient Key
2222 BOOLEAN CCKMLinkUpFlag;
2223 ULONG CCKMRN; //(Re)Association request number.
2224 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2225 UCHAR AironetCellPowerLimit; //in dBm
2226 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2227 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2228 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2229 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2230 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2231 USHORT CCXAdjacentAPChannel;
2232 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2234 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2235 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2237 UCHAR DtimCount; // 0.. DtimPeriod-1
2238 UCHAR DtimPeriod; // default = 3
2240 #ifdef QOS_DLS_SUPPORT
2241 RT_802_11_DLS DLSEntry[MAX_NUM_OF_DLS_ENTRY];
2242 UCHAR DlsReplayCounter[8];
2243 #endif // QOS_DLS_SUPPORT //
2244 ////////////////////////////////////////////////////////////////////////////////////////
2245 // This is only for WHQL test.
2247 ////////////////////////////////////////////////////////////////////////////////////////
2249 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2251 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
2252 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2254 #ifdef WPA_SUPPLICANT_SUPPORT
2256 BOOLEAN IEEE8021x_required_keys;
2257 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
2258 UCHAR DesireSharedKeyId;
2260 // 0: driver ignores wpa_supplicant
2261 // 1: wpa_supplicant initiates scanning and AP selection
2262 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2263 UCHAR WpaSupplicantUP;
2264 UCHAR WpaSupplicantScanCount;
2265 #endif // WPA_SUPPLICANT_SUPPORT //
2270 BOOLEAN bTGnWifiTest;
2271 BOOLEAN bScanReqIsFromWebUI;
2273 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2274 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
2275 RT_HT_PHY_INFO DesiredHtPhyInfo;
2276 BOOLEAN bAutoTxRateSwitch;
2279 #ifdef EXT_BUILD_CHANNEL_LIST
2280 UCHAR IEEE80211dClientMode;
2281 UCHAR StaOriCountryCode[3];
2282 UCHAR StaOriGeography;
2283 #endif // EXT_BUILD_CHANNEL_LIST //
2284 } STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2286 // This data structure keep the current active BSS/IBSS's configuration that this STA
2287 // had agreed upon joining the network. Which means these parameters are usually decided
2288 // by the BSS/IBSS creator instead of user configuration. Data in this data structurre
2289 // is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
2290 // Normally, after SCAN or failed roaming attempts, we need to recover back to
2291 // the current active settings.
2292 typedef struct _STA_ACTIVE_CONFIG {
2294 USHORT AtimWin; // in kusec; IBSS parameter set element
2295 USHORT CapabilityInfo;
2296 USHORT CfpMaxDuration;
2299 // Copy supported rate from desired AP's beacon. We are trying to match
2300 // AP's supported and extended rate settings.
2301 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
2302 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
2305 // Copy supported ht from desired AP's beacon. We are trying to match
2306 RT_HT_PHY_INFO SupportedPhyInfo;
2307 RT_HT_CAPABILITY SupportedHtPhy;
2308 } STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2309 #endif // CONFIG_STA_SUPPORT //
2312 typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2313 NDIS_802_11_MAC_ADDRESS MacAddr;
2314 USHORT MacTabMatchWCID; // ASIC
2315 CIPHER_KEY CipherKey;
2316 } RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2319 // ----------- start of AP --------------------------
2320 // AUTH-RSP State Machine Aux data structure
2321 typedef struct _AP_MLME_AUX {
2322 UCHAR Addr[MAC_ADDR_LEN];
2324 CHAR Challenge[CIPHER_TEXT_LEN];
2325 } AP_MLME_AUX, *PAP_MLME_AUX;
2327 // structure to define WPA Group Key Rekey Interval
2328 typedef struct PACKED _RT_802_11_WPA_REKEY {
2329 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2330 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2331 } RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2333 typedef struct _MAC_TABLE_ENTRY {
2334 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2335 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2336 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2337 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2338 BOOLEAN ValidAsMesh;
2339 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2341 BOOLEAN bIAmBadAtheros;
2343 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2345 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2346 UCHAR CMTimerRunning;
2347 UCHAR apidx; // MBSS number
2349 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2350 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2351 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2354 RALINK_TIMER_STRUCT RetryTimer;
2355 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2356 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2357 NDIS_802_11_WEP_STATUS WepStatus;
2358 AP_WPA_STATE WpaState;
2361 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2362 CIPHER_KEY PairwiseKey;
2365 UCHAR PMKID[LEN_PMKID];
2368 UCHAR Addr[MAC_ADDR_LEN];
2371 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2372 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2374 USHORT CapabilityInfo;
2376 ULONG NoDataIdleCount;
2377 UINT16 StationKeepAliveCount; // unit: second
2379 QUEUE_HEADER PsQueue;
2381 UINT32 StaConnectTime; // the live time of this station since associated with AP
2384 #ifdef DOT11_N_SUPPORT
2386 USHORT NoBADataCountDown;
2388 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2389 UINT TxBFCount; // 3*3
2390 #endif // DOT11_N_SUPPORT //
2392 UINT DebugFIFOCount;
2397 //====================================================
2398 //WDS entry needs these
2399 // rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2400 UINT MatchWDSTabIdx;
2401 UCHAR MaxSupportedRate;
2403 UCHAR CurrTxRateIndex;
2404 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2405 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2406 // USHORT OneSecTxOkCount;
2407 UINT32 OneSecTxNoRetryOkCount;
2408 UINT32 OneSecTxRetryOkCount;
2409 UINT32 OneSecTxFailCount;
2410 UINT32 ContinueTxFailCnt;
2411 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2412 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2413 //====================================================
2417 #ifdef CONFIG_STA_SUPPORT
2418 #ifdef QOS_DLS_SUPPORT
2419 UINT MatchDlsEntryIdx; // indicate the index in pAd->StaCfg.DLSEntry
2420 #endif // QOS_DLS_SUPPORT //
2421 #endif // CONFIG_STA_SUPPORT //
2423 BOOLEAN fNoisyEnvironment;
2424 BOOLEAN fLastSecAccordingRSSI;
2425 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2426 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2427 ULONG LastTxOkCount;
2428 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2430 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2431 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2432 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2433 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2434 ULONG ClientStatusFlags;
2436 // TODO: Shall we move that to DOT11_N_SUPPORT???
2437 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2439 #ifdef DOT11_N_SUPPORT
2440 // HT EWC MIMO-N used parameters
2441 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2442 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2443 USHORT TXAutoBAbitmap;
2444 USHORT BADeclineBitmap;
2445 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2446 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2447 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2449 // 802.11n features.
2451 UCHAR MaxRAmpduFactor;
2453 UCHAR MmpsMode; // MIMO power save more.
2455 HT_CAPABILITY_IE HTCapability;
2457 #ifdef DOT11N_DRAFT3
2458 UCHAR BSS2040CoexistenceMgmtSupport;
2459 #endif // DOT11N_DRAFT3 //
2460 #endif // DOT11_N_SUPPORT //
2462 BOOLEAN bAutoTxRateSwitch;
2465 struct _MAC_TABLE_ENTRY *pNext;
2466 USHORT TxSeq[NUM_OF_TID];
2467 USHORT NonQosDataSeq;
2469 RSSI_SAMPLE RssiSample;
2471 UINT32 TXMCSExpected[16];
2472 UINT32 TXMCSSuccessful[16];
2473 UINT32 TXMCSFailed[16];
2474 UINT32 TXMCSAutoFallBack[16][16];
2476 #ifdef CONFIG_STA_SUPPORT
2477 ULONG LastBeaconRxTime;
2478 #endif // CONFIG_STA_SUPPORT //
2479 } MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2481 typedef struct _MAC_TABLE {
2483 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2484 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2485 QUEUE_HEADER McastPsQueue;
2487 BOOLEAN fAnyStationInPsm;
2488 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2489 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2490 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2491 #ifdef DOT11_N_SUPPORT
2492 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2493 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2494 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2495 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2496 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
2497 #endif // DOT11_N_SUPPORT //
2498 } MAC_TABLE, *PMAC_TABLE;
2500 #ifdef DOT11_N_SUPPORT
2501 #define IS_HT_STA(_pMacEntry) \
2502 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2504 #define IS_HT_RATE(_pMacEntry) \
2505 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2507 #define PEER_IS_HT_RATE(_pMacEntry) \
2508 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2509 #endif // DOT11_N_SUPPORT //
2511 typedef struct _WDS_ENTRY {
2513 UCHAR Addr[MAC_ADDR_LEN];
2514 ULONG NoDataIdleCount;
2515 struct _WDS_ENTRY *pNext;
2516 } WDS_ENTRY, *PWDS_ENTRY;
2518 typedef struct _WDS_TABLE_ENTRY {
2520 UCHAR WdsAddr[MAC_ADDR_LEN];
2521 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2522 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2523 UCHAR MaxSupportedRate;
2525 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2526 USHORT OneSecTxOkCount;
2527 USHORT OneSecTxRetryOkCount;
2528 USHORT OneSecTxFailCount;
2529 ULONG CurrTxRateStableTime; // # of second in current TX rate
2530 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2531 } WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2533 typedef struct _RT_802_11_WDS_ENTRY {
2537 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2538 UCHAR MacTabMatchWCID; // ASIC
2539 NDIS_802_11_WEP_STATUS WepStatus;
2542 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2543 RT_HT_PHY_INFO DesiredHtPhyInfo;
2544 BOOLEAN bAutoTxRateSwitch;
2545 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2546 } RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2548 typedef struct _WDS_TABLE {
2551 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2552 } WDS_TABLE, *PWDS_TABLE;
2554 typedef struct _APCLI_STRUCT {
2557 unsigned int mylinkid;
2559 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2560 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2561 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2563 CHAR Ssid[MAX_LEN_OF_SSID];
2566 CHAR CfgSsid[MAX_LEN_OF_SSID];
2567 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2568 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2570 ULONG ApCliRcvBeaconTime;
2572 ULONG CtrlCurrState;
2573 ULONG SyncCurrState;
2574 ULONG AuthCurrState;
2575 ULONG AssocCurrState;
2576 ULONG WpaPskCurrState;
2581 ULONG ClientStatusFlags;
2584 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2585 NDIS_802_11_WEP_STATUS WepStatus;
2587 // Add to support different cipher suite for WPA2/WPA mode
2588 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2589 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2590 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2591 USHORT RsnCapability;
2593 UCHAR PSK[100]; // reserve PSK key material
2595 UCHAR PMK[32]; // WPA PSK mode PMK
2596 //UCHAR PTK[64]; // WPA PSK mode PTK
2597 UCHAR GTK[32]; // GTK from authenticator
2599 //CIPHER_KEY PairwiseKey;
2600 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2603 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
2604 //UCHAR PortSecured;
2606 // store RSN_IE built by driver
2607 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2610 // For WPA countermeasures
2611 ULONG LastMicErrorTime; // record last MIC error time
2612 //ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
2613 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2615 // For WPA-PSK supplicant state
2616 //WPA_STATE WpaState; // Default is SS_NOTUSE
2617 //UCHAR ReplayCounter[8];
2618 //UCHAR ANonce[32]; // ANonce for WPA-PSK from authenticator
2619 UCHAR SNonce[32]; // SNonce for WPA-PSK
2620 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2622 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2623 RT_HT_PHY_INFO DesiredHtPhyInfo;
2624 BOOLEAN bAutoTxRateSwitch;
2625 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2626 } APCLI_STRUCT, *PAPCLI_STRUCT;
2628 // ----------- end of AP ----------------------------
2631 typedef struct _BLOCK_QUEUE_ENTRY
2633 BOOLEAN SwTxQueueBlockFlag;
2634 LIST_HEADER NetIfList;
2635 } BLOCK_QUEUE_ENTRY, *PBLOCK_QUEUE_ENTRY;
2636 #endif // BLOCK_NET_IF //
2642 BOOLEAN bGreenField;
2648 typedef struct _INF_PCI_CONFIG
2650 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2653 typedef struct _INF_USB_CONFIG
2655 UINT BulkInEpAddr; // bulk-in endpoint address
2656 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2660 #ifdef IKANOS_VX_1X0
2661 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2663 struct IKANOS_TX_INFO
2665 struct net_device *netdev;
2666 IkanosWlanTxCbFuncP *fp;
2668 #endif // IKANOS_VX_1X0 //
2671 typedef struct _NINDO_CTRL_BLOCK {
2673 RT_NINTENDO_TABLE DS_TABLE;
2676 spinlock_t NINTENDO_TABLE_Lock;
2678 NDIS_SPIN_LOCK NINTENDO_TABLE_Lock;
2679 #endif // CHIP25XX //
2681 UCHAR NINTENDO_UP_BUFFER[512];
2683 CIPHER_KEY Local_SharedKey;
2684 UCHAR Local_bHideSsid;
2685 UCHAR Local_AuthMode;
2686 UCHAR Local_WepStatus;
2687 USHORT Local_CapabilityInfo;
2689 #endif // NINTENDO_AP //
2693 #define DIAGNOSE_TIME 10 // 10 sec
2694 typedef struct _RtmpDiagStrcut_
2695 { // Diagnosis Related element
2696 unsigned char inited;
2698 unsigned char ArrayStartIdx;
2699 unsigned char ArrayCurIdx;
2701 USHORT TxDataCnt[DIAGNOSE_TIME];
2702 USHORT TxFailCnt[DIAGNOSE_TIME];
2703 // USHORT TxDescCnt[DIAGNOSE_TIME][16]; // TxDesc queue length in scale of 0~14, >=15
2704 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2705 // USHORT TxMcsCnt[DIAGNOSE_TIME][16]; // TxDate MCS Count in range from 0 to 15, step in 1.
2706 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2707 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2709 USHORT TxAggCnt[DIAGNOSE_TIME];
2710 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2711 // USHORT TxAMPDUCnt[DIAGNOSE_TIME][16]; // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2712 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2713 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2714 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2717 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2718 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2719 // USHORT RxMcsCnt[DIAGNOSE_TIME][16]; // Rx MCS Count in range from 0 to 15, step in 1.
2720 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2722 #endif // DBG_DIAGNOSE //
2726 // The miniport adapter structure
2728 typedef struct _RTMP_ADAPTER
2730 PVOID OS_Cookie; // save specific structure relative to OS
2736 NDIS_SPIN_LOCK irq_lock;
2740 /*****************************************************************************************/
2741 /* USB related parameters */
2742 /*****************************************************************************************/
2743 struct usb_config_descriptor *config;
2744 UINT BulkInEpAddr; // bulk-in endpoint address
2745 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2748 USHORT BulkOutMaxPacketSize;
2749 USHORT BulkInMaxPacketSize;
2751 //======Control Flags
2752 LONG PendingIoCount;
2754 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2757 //======Timer Thread
2758 RT2870_TIMER_QUEUE TimerQ;
2759 NDIS_SPIN_LOCK TimerQLock;
2764 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2766 BOOLEAN TimerFunc_kill;
2770 //======Semaphores (event)
2771 struct semaphore mlme_semaphore; /* to sleep thread on */
2772 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */
2773 struct semaphore RTUSBTimer_semaphore;
2774 #ifdef INF_AMAZON_SE
2775 struct semaphore UsbVendorReq_semaphore;
2776 PVOID UsbVendorReqBuf;
2777 #endif // INF_AMAZON_SE //
2778 struct completion TimerQComplete;
2779 struct completion mlmeComplete;
2780 struct completion CmdQComplete;
2781 wait_queue_head_t *wait;
2783 //======Lock for 2870 ATE
2785 NDIS_SPIN_LOCK GenericLock; // ATE Tx/Rx generic spinlock
2786 #endif // RALINK_ATE //
2791 /*****************************************************************************************/
2792 /* Both PCI/USB related parameters */
2793 /*****************************************************************************************/
2796 /*****************************************************************************************/
2797 /* Tx related parameters */
2798 /*****************************************************************************************/
2799 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2800 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2803 // Data related context and AC specified, 4 AC supported
2804 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2805 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
2807 HT_TX_CONTEXT TxContext[NUM_OF_TX_RING];
2808 NDIS_SPIN_LOCK TxContextQueueLock[NUM_OF_TX_RING]; // TxContextQueue spinlock
2810 // 4 sets of Bulk Out index and pending flag
2811 UCHAR NextBulkOutIndex[4]; // only used for 4 EDCA bulkout pipe
2813 BOOLEAN BulkOutPending[6]; // used for total 6 bulkout pipe
2814 UCHAR bulkResetPipeid;
2815 BOOLEAN MgmtBulkPending;
2816 ULONG bulkResetReq[6];
2819 // resource for software backlog queues
2820 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2821 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2823 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2824 RTMP_MGMT_RING MgmtRing;
2825 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2828 /*****************************************************************************************/
2829 /* Rx related parameters */
2830 /*****************************************************************************************/
2834 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2835 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2836 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE.
2837 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2838 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2839 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2840 ULONG TransferBufferLength; // current length of the packet buffer
2841 ULONG ReadPosition; // current read position in a packet buffer
2845 /*****************************************************************************************/
2846 /* ASIC related parameters */
2847 /*****************************************************************************************/
2848 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2850 // ---------------------------
2852 // ---------------------------
2853 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2854 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2855 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2856 BOOLEAN EepromAccess;
2858 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2860 // ---------------------------
2862 // ---------------------------
2863 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2864 UCHAR BbpRssiToDbmDelta;
2865 BBP_R66_TUNING BbpTuning;
2867 // ----------------------------
2869 // ----------------------------
2870 UCHAR RfIcType; // RFIC_xxx
2871 ULONG RfFreqOffset; // Frequency offset for channel switching
2872 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2874 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2875 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2877 // This soft Rx Antenna Diversity mechanism is used only when user set
2878 // RX Antenna = DIVERSITY ON
2879 SOFT_RX_ANT_DIVERSITY RxAnt;
2882 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2883 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2884 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2885 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2887 UCHAR ChannelListNum; // number of channel in ChannelList[]
2890 ULONG Tx20MPwrCfgABand[5];
2891 ULONG Tx20MPwrCfgGBand[5];
2892 ULONG Tx40MPwrCfgABand[5];
2893 ULONG Tx40MPwrCfgGBand[5];
2895 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2896 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2897 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2898 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2899 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2900 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2902 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2903 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2904 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2905 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2906 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2907 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2909 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2910 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2911 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2912 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2915 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2916 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2917 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2918 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2921 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2922 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2923 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2924 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2926 // ----------------------------
2928 // ----------------------------
2929 MCU_LEDCS_STRUC LedCntl;
2930 USHORT Led1; // read from EEPROM 0x3c
2931 USHORT Led2; // EEPROM 0x3e
2932 USHORT Led3; // EEPROM 0x40
2933 UCHAR LedIndicatorStregth;
2934 UCHAR RssiSingalstrengthOffet;
2935 BOOLEAN bLedOnScanning;
2938 /*****************************************************************************************/
2939 /* 802.11 related parameters */
2940 /*****************************************************************************************/
2941 // outgoing BEACON frame buffer and corresponding TXD
2942 TXWI_STRUC BeaconTxWI;
2944 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2946 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2947 PSPOLL_FRAME PsPollFrame;
2948 HEADER_802_11 NullFrame;
2951 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2952 TX_CONTEXT NullContext;
2953 TX_CONTEXT PsPollContext;
2954 TX_CONTEXT RTSContext;
2959 //=========AP===========
2962 //=======STA===========
2963 #ifdef CONFIG_STA_SUPPORT
2964 /* Modified by Wu Xi-Kun 4/21/2006 */
2965 // -----------------------------------------------
2966 // STA specific configuration & operation status
2967 // used only when pAd->OpMode == OPMODE_STA
2968 // -----------------------------------------------
2969 STA_ADMIN_CONFIG StaCfg; // user desired settings
2970 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2971 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2972 NDIS_MEDIA_STATE PreMediaState;
2973 #endif // CONFIG_STA_SUPPORT //
2975 //=======Common===========
2976 // OP mode: either AP or STA
2977 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2979 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2982 // MAT related parameters
2984 // configuration: read from Registry & E2PROM
2985 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2986 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2987 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2989 // ------------------------------------------------------
2990 // common configuration to both OPMODE_STA and OPMODE_AP
2991 // ------------------------------------------------------
2992 COMMON_CONFIG CommonCfg;
2995 // AP needs those vaiables for site survey feature.
2996 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2997 BSS_TABLE ScanTab; // store the latest SCAN result
2999 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
3000 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
3001 NDIS_SPIN_LOCK MacTabLock;
3003 #ifdef DOT11_N_SUPPORT
3005 #endif // DOT11_N_SUPPORT //
3006 NDIS_SPIN_LOCK BATabLock;
3007 RALINK_TIMER_STRUCT RECBATimer;
3009 // encryption/decryption KEY tables
3010 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
3012 // RX re-assembly buffer for fragmentation
3013 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
3016 COUNTER_802_3 Counters8023; // 802.3 counters
3017 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
3018 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
3019 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
3020 PRIVATE_STRUC PrivateInfo; // Private information & counters
3022 // flags, see fRTMP_ADAPTER_xxx flags
3023 ULONG Flags; // Represent current device status
3025 // current TX sequence #
3028 // Control disconnect / connect event generation
3029 //+++Didn't used anymore
3034 //+++Used only for Station
3035 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
3038 ULONG ExtraInfo; // Extra information for displaying status
3039 ULONG SystemErrorBitmap; // b0: E2PROM version error
3041 //+++Didn't used anymore
3042 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
3045 // ---------------------------
3047 // ---------------------------
3048 RT_802_11_EVENT_TABLE EventTab;
3053 /*****************************************************************************************/
3054 /* Statistic related parameters */
3055 /*****************************************************************************************/
3057 ULONG BulkOutDataOneSecCount;
3058 ULONG BulkInDataOneSecCount;
3059 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
3060 ULONG watchDogRxCnt;
3061 ULONG watchDogRxOverFlowCnt;
3062 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
3065 BOOLEAN bUpdateBcnCntDone;
3066 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
3067 // ----------------------------
3069 // ----------------------------
3070 //ULONG DebugSetting[4];
3071 BOOLEAN bBanAllBaSetup;
3072 BOOLEAN bPromiscuous;
3074 // ----------------------------
3075 // rt2860c emulation-use Parameters
3076 // ----------------------------
3079 ULONG cfendaccu[30];
3080 ULONG bacontent[16];
3081 ULONG rxint[RX_RING_SIZE+1];
3084 BOOLEAN bForcePrintTX;
3085 BOOLEAN bForcePrintRX;
3086 BOOLEAN bDisablescanning; //defined in RT2870 USB
3087 BOOLEAN bStaFifoTest;
3088 BOOLEAN bProtectionTest;
3090 BOOLEAN bGenOneHCCA;
3091 BOOLEAN bBroadComHT;
3092 //+++Following add from RT2870 USB.
3094 ULONG BulkOutComplete;
3095 ULONG BulkOutCompleteOther;
3096 ULONG BulkOutCompleteCancel; // seems not use now?
3098 ULONG BulkInComplete;
3099 ULONG BulkInCompleteFail;
3102 struct wificonf WIFItestbed;
3107 BOOLEAN ContinBulkOut; //ATE bulk out control
3108 BOOLEAN ContinBulkIn; //ATE bulk in control
3109 atomic_t BulkOutRemained;
3110 atomic_t BulkInRemained;
3112 #endif // RALINK_ATE //
3114 #ifdef DOT11_N_SUPPORT
3115 struct reordering_mpdu_pool mpdu_blk_pool;
3116 #endif // DOT11_N_SUPPORT //
3118 ULONG OneSecondnonBEpackets; // record non BE packets per second
3120 #if WIRELESS_EXT >= 12
3121 struct iw_statistics iw_stats;
3124 struct net_device_stats stats;
3127 BLOCK_QUEUE_ENTRY blockQueueTab[NUM_OF_TX_RING];
3128 #endif // BLOCK_NET_IF //
3132 #ifdef MULTIPLE_CARD_SUPPORT
3134 UCHAR MC_FileName[256];
3135 #endif // MULTIPLE_CARD_SUPPORT //
3137 ULONG TbttTickCount;
3138 #ifdef PCI_MSI_SUPPORT
3140 #endif // PCI_MSI_SUPPORT //
3145 #define TIME_BASE (1000000/OS_HZ)
3146 #define TIME_ONE_SECOND (1000000/TIME_BASE)
3147 UCHAR flg_be_adjust;
3148 ULONG be_adjust_last_time;
3151 NINDO_CTRL_BLOCK nindo_ctrl_block;
3152 #endif // NINTENDO_AP //
3155 #ifdef IKANOS_VX_1X0
3156 struct IKANOS_TX_INFO IkanosTxInfo;
3157 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
3158 #endif // IKANOS_VX_1X0 //
3162 RtmpDiagStruct DiagStruct;
3163 #endif // DBG_DIAGNOSE //
3166 UINT8 PM_FlgSuspend;
3171 BOOLEAN bEEPROMFile;
3174 } RTMP_ADAPTER, *PRTMP_ADAPTER;
3177 // Cisco IAPP format
3179 typedef struct _CISCO_IAPP_CONTENT_
3181 USHORT Length; //IAPP Length
3182 UCHAR MessageType; //IAPP type
3183 UCHAR FunctionCode; //IAPP function type
3184 UCHAR DestinaionMAC[MAC_ADDR_LEN];
3185 UCHAR SourceMAC[MAC_ADDR_LEN];
3186 USHORT Tag; //Tag(element IE) - Adjacent AP report
3187 USHORT TagLength; //Length of element not including 4 byte header
3188 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
3189 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
3192 UCHAR Ssid[MAX_LEN_OF_SSID];
3193 USHORT Seconds; //Seconds that the client has been disassociated.
3194 } CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
3196 #define DELAYINTMASK 0x0003fffb
3197 #define INTMASK 0x0003fffb
3198 #define IndMask 0x0003fffc
3199 #define RxINT 0x00000005 // Delayed Rx or indivi rx
3200 #define TxDataInt 0x000000fa // Delayed Tx or indivi tx
3201 #define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
3202 #define TxCoherent 0x00020000 // tx coherent
3203 #define RxCoherent 0x00010000 // rx coherent
3204 #define McuCommand 0x00000200 // mcu
3205 #define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
3206 #define TBTTInt 0x00000800 // TBTT interrupt
3207 #define GPTimeOutInt 0x00008000 // GPtimeout interrupt
3208 #define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
3209 #define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
3212 typedef struct _RX_BLK_
3214 // RXD_STRUC RxD; // sample
3215 RT28XX_RXD_STRUC RxD;
3217 PHEADER_802_11 pHeader;
3218 PNDIS_PACKET pRxPacket;
3222 UCHAR UserPriority; // for calculate TKIP MIC using
3226 #define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
3227 #define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
3228 #define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
3231 #define fRX_WDS 0x0001
3232 #define fRX_AMSDU 0x0002
3233 #define fRX_ARALINK 0x0004
3234 #define fRX_HTC 0x0008
3235 #define fRX_PAD 0x0010
3236 #define fRX_AMPDU 0x0020
3237 #define fRX_QOS 0x0040
3238 #define fRX_INFRA 0x0080
3239 #define fRX_EAP 0x0100
3240 #define fRX_MESH 0x0200
3241 #define fRX_APCLI 0x0400
3242 #define fRX_DLS 0x0800
3243 #define fRX_WPI 0x1000
3245 #define LENGTH_AMSDU_SUBFRAMEHEAD 14
3246 #define LENGTH_ARALINK_SUBFRAMEHEAD 14
3247 #define LENGTH_ARALINK_HEADER_FIELD 2
3249 #define TX_UNKOWN_FRAME 0x00
3250 #define TX_MCAST_FRAME 0x01
3251 #define TX_LEGACY_FRAME 0x02
3252 #define TX_AMPDU_FRAME 0x04
3253 #define TX_AMSDU_FRAME 0x08
3254 #define TX_RALINK_FRAME 0x10
3255 #define TX_FRAG_FRAME 0x20
3258 // Currently the sizeof(TX_BLK) is 148 bytes.
3259 typedef struct _TX_BLK_
3262 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
3263 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
3264 USHORT TotalFragNum; // Total frame fragments required in one batch
3265 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
3267 QUEUE_HEADER TxPacketList;
3268 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
3269 HTTRANSMIT_SETTING *pTransmit;
3271 // Following structure used for the characteristics of a specific packet.
3272 PNDIS_PACKET pPacket;
3273 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
3274 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3275 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3276 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3277 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
3278 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3279 UCHAR HdrPadLen; // recording Header Padding Length;
3280 UCHAR apidx; // The interface associated to this packet
3281 UCHAR Wcid; // The MAC entry associated to this packet
3282 UCHAR UserPriority; // priority class of packet
3283 UCHAR FrameGap; // what kind of IFS this packet use
3284 UCHAR MpduReqNum; // number of fragments of this frame
3285 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
3286 UCHAR CipherAlg; // cipher alogrithm
3291 USHORT Flags; //See following definitions for detail.
3293 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
3294 ULONG Priv; // Hardware specific value saved in here.
3298 #define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
3299 #define fTX_bAckRequired 0x0002 // the packet need ack response
3300 #define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
3301 #define fTX_bHTRate 0x0008 // allow to use HT rate
3302 //#define fTX_bForceLowRate 0x0010 // force to use Low Rate
3303 #define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
3304 #define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3305 #define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3306 #define fTX_bWMM 0x0080 // QOS Data
3308 #define fTX_bClearEAPFrame 0x0100
3311 #ifdef CONFIG_STA_SUPPORT
3312 #endif // CONFIG_STA_SUPPORT //
3316 #define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3319 (_pTxBlk->Flags |= _flag) \
3321 (_pTxBlk->Flags &= ~(_flag)) \
3324 #define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3325 #define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3326 #define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
3332 //------------------------------------------------------------------------------------------
3336 #ifdef RT_BIG_ENDIAN
3337 static inline VOID WriteBackToDescriptor(
3340 IN BOOLEAN DoEncrypt,
3341 IN ULONG DescriptorType)
3345 p1 = ((UINT32 *)Dest);
3346 p2 = ((UINT32 *)Src);
3351 *(p1+1) = *(p2+1); // Word 1; this must be written back last
3355 ========================================================================
3357 Routine Description:
3358 Endian conversion of Tx/Rx descriptor .
3361 pAd Pointer to our adapter
3362 pData Pointer to Tx/Rx descriptor
3363 DescriptorType Direction of the frame
3369 Call this function when read or update descriptor
3370 ========================================================================
3372 static inline VOID RTMPWIEndianChange(
3374 IN ULONG DescriptorType)
3379 size = ((DescriptorType == TYPE_TXWI) ? TXWI_SIZE : RXWI_SIZE);
3381 if(DescriptorType == TYPE_TXWI)
3383 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData))); // Byte 0~3
3384 *((UINT32 *)(pData + 4)) = SWAP32(*((UINT32 *)(pData+4))); // Byte 4~7
3388 for(i=0; i < size/4 ; i++)
3389 *(((UINT32 *)pData) +i) = SWAP32(*(((UINT32 *)pData)+i));
3394 ========================================================================
3396 Routine Description:
3397 Endian conversion of Tx/Rx descriptor .
3400 pAd Pointer to our adapter
3401 pData Pointer to Tx/Rx descriptor
3402 DescriptorType Direction of the frame
3408 Call this function when read or update descriptor
3409 ========================================================================
3413 static inline VOID RTMPDescriptorEndianChange(
3415 IN ULONG DescriptorType)
3417 *((UINT32 *)(pData)) = SWAP32(*((UINT32 *)(pData)));
3421 ========================================================================
3423 Routine Description:
3424 Endian conversion of all kinds of 802.11 frames .
3427 pAd Pointer to our adapter
3428 pData Pointer to the 802.11 frame structure
3429 Dir Direction of the frame
3430 FromRxDoneInt Caller is from RxDone interrupt
3436 Call this function when read or update buffer data
3437 ========================================================================
3439 static inline VOID RTMPFrameEndianChange(
3440 IN PRTMP_ADAPTER pAd,
3443 IN BOOLEAN FromRxDoneInt)
3445 PHEADER_802_11 pFrame;
3448 // swab 16 bit fields - Frame Control field
3451 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3454 pFrame = (PHEADER_802_11) pData;
3455 pMacHdr = (PUCHAR) pFrame;
3457 // swab 16 bit fields - Duration/ID field
3458 *(USHORT *)(pMacHdr + 2) = SWAP16(*(USHORT *)(pMacHdr + 2));
3460 // swab 16 bit fields - Sequence Control field
3461 *(USHORT *)(pMacHdr + 22) = SWAP16(*(USHORT *)(pMacHdr + 22));
3463 if(pFrame->FC.Type == BTYPE_MGMT)
3465 switch(pFrame->FC.SubType)
3467 case SUBTYPE_ASSOC_REQ:
3468 case SUBTYPE_REASSOC_REQ:
3469 // swab 16 bit fields - CapabilityInfo field
3470 pMacHdr += sizeof(HEADER_802_11);
3471 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3473 // swab 16 bit fields - Listen Interval field
3475 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3478 case SUBTYPE_ASSOC_RSP:
3479 case SUBTYPE_REASSOC_RSP:
3480 // swab 16 bit fields - CapabilityInfo field
3481 pMacHdr += sizeof(HEADER_802_11);
3482 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3484 // swab 16 bit fields - Status Code field
3486 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3488 // swab 16 bit fields - AID field
3490 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3494 // If from APHandleRxDoneInterrupt routine, it is still a encrypt format.
3495 // The convertion is delayed to RTMPHandleDecryptionDoneInterrupt.
3496 if(!FromRxDoneInt && pFrame->FC.Wep == 1)
3500 // swab 16 bit fields - Auth Alg No. field
3501 pMacHdr += sizeof(HEADER_802_11);
3502 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3504 // swab 16 bit fields - Auth Seq No. field
3506 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3508 // swab 16 bit fields - Status Code field
3510 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3514 case SUBTYPE_BEACON:
3515 case SUBTYPE_PROBE_RSP:
3516 // swab 16 bit fields - BeaconInterval field
3517 pMacHdr += (sizeof(HEADER_802_11) + TIMESTAMP_LEN);
3518 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3520 // swab 16 bit fields - CapabilityInfo field
3521 pMacHdr += sizeof(USHORT);
3522 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3525 case SUBTYPE_DEAUTH:
3526 case SUBTYPE_DISASSOC:
3527 // swab 16 bit fields - Reason code field
3528 pMacHdr += sizeof(HEADER_802_11);
3529 *(USHORT *)pMacHdr = SWAP16(*(USHORT *)pMacHdr);
3533 else if( pFrame->FC.Type == BTYPE_DATA )
3536 else if(pFrame->FC.Type == BTYPE_CNTL)
3538 switch(pFrame->FC.SubType)
3540 case SUBTYPE_BLOCK_ACK_REQ:
3542 PFRAME_BA_REQ pBAReq = (PFRAME_BA_REQ)pFrame;
3543 *(USHORT *)(&pBAReq->BARControl) = SWAP16(*(USHORT *)(&pBAReq->BARControl));
3544 pBAReq->BAStartingSeq.word = SWAP16(pBAReq->BAStartingSeq.word);
3547 case SUBTYPE_BLOCK_ACK:
3548 // For Block Ack packet, the HT_CONTROL field is in the same offset with Addr3
3549 *(UINT32 *)(&pFrame->Addr3[0]) = SWAP32(*(UINT32 *)(&pFrame->Addr3[0]));
3553 //For ACK packet, the HT_CONTROL field is in the same offset with Addr2
3554 *(UINT32 *)(&pFrame->Addr2[0])= SWAP32(*(UINT32 *)(&pFrame->Addr2[0]));
3560 DBGPRINT(RT_DEBUG_ERROR,("Invalid Frame Type!!!\n"));
3563 // swab 16 bit fields - Frame Control
3564 if(Dir == DIR_WRITE)
3566 *(USHORT *)pData = SWAP16(*(USHORT *)pData);
3569 #endif // RT_BIG_ENDIAN //
3572 static inline VOID ConvertMulticastIP2MAC(
3574 IN PUCHAR *ppMacAddr,
3575 IN UINT16 ProtoType)
3577 if (pIpAddr == NULL)
3580 if (ppMacAddr == NULL || *ppMacAddr == NULL)
3586 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3587 *(*ppMacAddr) = 0x33;
3588 *(*ppMacAddr + 1) = 0x33;
3589 *(*ppMacAddr + 2) = pIpAddr[12];
3590 *(*ppMacAddr + 3) = pIpAddr[13];
3591 *(*ppMacAddr + 4) = pIpAddr[14];
3592 *(*ppMacAddr + 5) = pIpAddr[15];
3597 // memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
3598 *(*ppMacAddr) = 0x01;
3599 *(*ppMacAddr + 1) = 0x00;
3600 *(*ppMacAddr + 2) = 0x5e;
3601 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
3602 *(*ppMacAddr + 4) = pIpAddr[2];
3603 *(*ppMacAddr + 5) = pIpAddr[3];
3610 BOOLEAN RTMPCheckForHang(
3611 IN NDIS_HANDLE MiniportAdapterContext
3615 IN NDIS_HANDLE MiniportAdapterContext
3619 // Private routines in rtmp_init.c
3621 NDIS_STATUS RTMPAllocAdapterBlock(
3623 OUT PRTMP_ADAPTER *ppAdapter
3626 NDIS_STATUS RTMPAllocTxRxRingMemory(
3627 IN PRTMP_ADAPTER pAd
3630 NDIS_STATUS RTMPFindAdapter(
3631 IN PRTMP_ADAPTER pAd,
3632 IN NDIS_HANDLE WrapperConfigurationContext
3635 NDIS_STATUS RTMPReadParametersHook(
3636 IN PRTMP_ADAPTER pAd
3639 VOID RTMPFreeAdapter(
3640 IN PRTMP_ADAPTER pAd
3643 NDIS_STATUS NICReadRegParameters(
3644 IN PRTMP_ADAPTER pAd,
3645 IN NDIS_HANDLE WrapperConfigurationContext
3649 VOID NICInitRT30xxRFRegisters(
3650 IN PRTMP_ADAPTER pAd);
3653 VOID NICReadEEPROMParameters(
3654 IN PRTMP_ADAPTER pAd,
3655 IN PUCHAR mac_addr);
3657 VOID NICInitAsicFromEEPROM(
3658 IN PRTMP_ADAPTER pAd);
3660 VOID NICInitTxRxRingAndBacklogQueue(
3661 IN PRTMP_ADAPTER pAd);
3663 NDIS_STATUS NICInitializeAdapter(
3664 IN PRTMP_ADAPTER pAd,
3665 IN BOOLEAN bHardReset);
3667 NDIS_STATUS NICInitializeAsic(
3668 IN PRTMP_ADAPTER pAd,
3669 IN BOOLEAN bHardReset);
3672 IN PRTMP_ADAPTER pAd);
3674 VOID RTMPRingCleanUp(
3675 IN PRTMP_ADAPTER pAd,
3679 IN PRTMP_ADAPTER pAd);
3681 NDIS_STATUS DbgSendPacket(
3682 IN PRTMP_ADAPTER pAd,
3683 IN PNDIS_PACKET pPacket);
3686 IN PRTMP_ADAPTER pAd);
3688 VOID NICResetFromError(
3689 IN PRTMP_ADAPTER pAd);
3691 VOID NICEraseFirmware(
3692 IN PRTMP_ADAPTER pAd);
3694 NDIS_STATUS NICLoadFirmware(
3695 IN PRTMP_ADAPTER pAd);
3697 NDIS_STATUS NICLoadRateSwitchingParams(
3698 IN PRTMP_ADAPTER pAd);
3700 BOOLEAN NICCheckForHang(
3701 IN PRTMP_ADAPTER pAd);
3703 VOID NICUpdateFifoStaCounters(
3704 IN PRTMP_ADAPTER pAd);
3706 VOID NICUpdateRawCounters(
3707 IN PRTMP_ADAPTER pAd);
3709 ULONG RTMPNotAllZero(
3713 VOID RTMPZeroMemory(
3717 ULONG RTMPCompareMemory(
3722 VOID RTMPMoveMemory(
3735 VOID RTMPPatchMacBbpBug(
3736 IN PRTMP_ADAPTER pAd);
3738 VOID RTMPPatchCardBus(
3739 IN PRTMP_ADAPTER pAdapter);
3741 VOID RTMPPatchRalinkCardBus(
3742 IN PRTMP_ADAPTER pAdapter,
3745 ULONG RTMPReadCBConfig(
3751 VOID RTMPWriteCBConfig(
3759 IN PRTMP_ADAPTER pAd,
3760 IN PRALINK_TIMER_STRUCT pTimer,
3761 IN PVOID pTimerFunc,
3766 IN PRALINK_TIMER_STRUCT pTimer,
3771 IN PRALINK_TIMER_STRUCT pTimer,
3774 VOID RTMPCancelTimer(
3775 IN PRALINK_TIMER_STRUCT pTimer,
3776 OUT BOOLEAN *pCancelled);
3779 IN PRTMP_ADAPTER pAd,
3782 VOID RTMPSetSignalLED(
3783 IN PRTMP_ADAPTER pAd,
3784 IN NDIS_802_11_RSSI Dbm);
3786 VOID RTMPEnableRxTx(
3787 IN PRTMP_ADAPTER pAd);
3790 // prototype in action.c
3792 VOID ActionStateMachineInit(
3793 IN PRTMP_ADAPTER pAd,
3794 IN STATE_MACHINE *S,
3795 OUT STATE_MACHINE_FUNC Trans[]);
3797 VOID MlmeADDBAAction(
3798 IN PRTMP_ADAPTER pAd,
3799 IN MLME_QUEUE_ELEM *Elem);
3801 VOID MlmeDELBAAction(
3802 IN PRTMP_ADAPTER pAd,
3803 IN MLME_QUEUE_ELEM *Elem);
3806 IN PRTMP_ADAPTER pAd,
3807 IN MLME_QUEUE_ELEM *Elem);
3809 VOID MlmeInvalidAction(
3810 IN PRTMP_ADAPTER pAd,
3811 IN MLME_QUEUE_ELEM *Elem);
3814 IN PRTMP_ADAPTER pAd,
3815 IN MLME_QUEUE_ELEM *Elem);
3817 #ifdef DOT11_N_SUPPORT
3818 VOID PeerAddBAReqAction(
3819 IN PRTMP_ADAPTER pAd,
3820 IN MLME_QUEUE_ELEM *Elem);
3822 VOID PeerAddBARspAction(
3823 IN PRTMP_ADAPTER pAd,
3824 IN MLME_QUEUE_ELEM *Elem);
3826 VOID PeerDelBAAction(
3827 IN PRTMP_ADAPTER pAd,
3828 IN MLME_QUEUE_ELEM *Elem);
3831 IN PRTMP_ADAPTER pAd,
3832 IN MLME_QUEUE_ELEM *Elem);
3833 #endif // DOT11_N_SUPPORT //
3835 VOID SendPSMPAction(
3836 IN PRTMP_ADAPTER pAd,
3841 #ifdef DOT11N_DRAFT3
3842 VOID SendBSS2040CoexistMgmtAction(
3843 IN PRTMP_ADAPTER pAd,
3848 VOID SendNotifyBWActionFrame(
3849 IN PRTMP_ADAPTER pAd,
3853 BOOLEAN ChannelSwitchSanityCheck(
3854 IN PRTMP_ADAPTER pAd,
3856 IN UCHAR NewChannel,
3857 IN UCHAR Secondary);
3859 VOID ChannelSwitchAction(
3860 IN PRTMP_ADAPTER pAd,
3863 IN UCHAR Secondary);
3865 ULONG BuildIntolerantChannelRep(
3866 IN PRTMP_ADAPTER pAd,
3869 VOID Update2040CoexistFrameAndNotify(
3870 IN PRTMP_ADAPTER pAd,
3872 IN BOOLEAN bAddIntolerantCha);
3874 VOID Send2040CoexistAction(
3875 IN PRTMP_ADAPTER pAd,
3877 IN BOOLEAN bAddIntolerantCha);
3878 #endif // DOT11N_DRAFT3 //
3881 IN PRTMP_ADAPTER pAd,
3882 IN MLME_QUEUE_ELEM *Elem);
3884 VOID PeerPublicAction(
3885 IN PRTMP_ADAPTER pAd,
3886 IN MLME_QUEUE_ELEM *Elem);
3888 #ifdef CONFIG_STA_SUPPORT
3889 VOID StaPublicAction(
3890 IN PRTMP_ADAPTER pAd,
3891 IN UCHAR Bss2040Coexist);
3892 #endif // CONFIG_STA_SUPPORT //
3895 VOID PeerBSSTranAction(
3896 IN PRTMP_ADAPTER pAd,
3897 IN MLME_QUEUE_ELEM *Elem);
3899 #ifdef DOT11_N_SUPPORT
3901 IN PRTMP_ADAPTER pAd,
3902 IN MLME_QUEUE_ELEM *Elem);
3903 #endif // DOT11_N_SUPPORT //
3906 IN PRTMP_ADAPTER pAd,
3907 IN MLME_QUEUE_ELEM *Elem);
3909 #ifdef QOS_DLS_SUPPORT
3911 IN PRTMP_ADAPTER pAd,
3912 IN MLME_QUEUE_ELEM *Elem);
3913 #endif // QOS_DLS_SUPPORT //
3915 #ifdef CONFIG_STA_SUPPORT
3916 #ifdef QOS_DLS_SUPPORT
3918 IN PRTMP_ADAPTER pAd,
3919 IN OUT MLME_DLS_REQ_STRUCT *pDlsReq,
3920 IN PRT_802_11_DLS pDls,
3922 #endif // QOS_DLS_SUPPORT //
3923 #endif // CONFIG_STA_SUPPORT //
3925 #ifdef DOT11_N_SUPPORT
3926 VOID RECBATimerTimeout(
3927 IN PVOID SystemSpecific1,
3928 IN PVOID FunctionContext,
3929 IN PVOID SystemSpecific2,
3930 IN PVOID SystemSpecific3);
3932 VOID ORIBATimerTimeout(
3933 IN PRTMP_ADAPTER pAd);
3935 VOID SendRefreshBAR(
3936 IN PRTMP_ADAPTER pAd,
3937 IN MAC_TABLE_ENTRY *pEntry);
3938 #endif // DOT11_N_SUPPORT //
3941 IN PRTMP_ADAPTER pAd,
3942 IN OUT PHEADER_802_11 pHdr80211,
3948 IN PRTMP_ADAPTER pAd,
3949 IN OUT PFRAME_BAR pCntlBar,
3953 VOID InsertActField(
3954 IN PRTMP_ADAPTER pAd,
3955 OUT PUCHAR pFrameBuf,
3956 OUT PULONG pFrameLen,
3960 BOOLEAN QosBADataParse(
3961 IN PRTMP_ADAPTER pAd,
3963 IN PUCHAR p8023Header,
3967 IN UCHAR DataOffset,
3969 IN UINT CurRxIndex);
3971 #ifdef DOT11_N_SUPPORT
3972 BOOLEAN CntlEnqueueForRecv(
3973 IN PRTMP_ADAPTER pAd,
3976 IN PFRAME_BA_REQ pMsg);
3978 VOID BaAutoManSwitch(
3979 IN PRTMP_ADAPTER pAd);
3980 #endif // DOT11_N_SUPPORT //
3983 IN PRTMP_ADAPTER pAd,
3984 IN UCHAR BatRecIdx);
3987 // Private routines in rtmp_data.c
3989 BOOLEAN RTMPHandleRxDoneInterrupt(
3990 IN PRTMP_ADAPTER pAd);
3992 VOID RTMPHandleTxDoneInterrupt(
3993 IN PRTMP_ADAPTER pAd);
3995 BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3996 IN PRTMP_ADAPTER pAd,
3997 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3999 VOID RTMPHandleMgmtRingDmaDoneInterrupt(
4000 IN PRTMP_ADAPTER pAd);
4002 VOID RTMPHandleTBTTInterrupt(
4003 IN PRTMP_ADAPTER pAd);
4005 VOID RTMPHandlePreTBTTInterrupt(
4006 IN PRTMP_ADAPTER pAd);
4008 void RTMPHandleTwakeupInterrupt(
4009 IN PRTMP_ADAPTER pAd);
4011 VOID RTMPHandleRxCoherentInterrupt(
4012 IN PRTMP_ADAPTER pAd);
4014 BOOLEAN TxFrameIsAggregatible(
4015 IN PRTMP_ADAPTER pAd,
4016 IN PUCHAR pPrevAddr1,
4017 IN PUCHAR p8023hdr);
4019 BOOLEAN PeerIsAggreOn(
4020 IN PRTMP_ADAPTER pAd,
4022 IN PMAC_TABLE_ENTRY pMacEntry);
4024 NDIS_STATUS Sniff2BytesFromNdisBuffer(
4025 IN PNDIS_BUFFER pFirstBuffer,
4026 IN UCHAR DesiredOffset,
4030 NDIS_STATUS STASendPacket(
4031 IN PRTMP_ADAPTER pAd,
4032 IN PNDIS_PACKET pPacket);
4034 VOID STASendPackets(
4035 IN NDIS_HANDLE MiniportAdapterContext,
4036 IN PPNDIS_PACKET ppPacketArray,
4037 IN UINT NumberOfPackets);
4039 VOID RTMPDeQueuePacket(
4040 IN PRTMP_ADAPTER pAd,
4041 IN BOOLEAN bIntContext,
4043 IN UCHAR Max_Tx_Packets);
4045 NDIS_STATUS RTMPHardTransmit(
4046 IN PRTMP_ADAPTER pAd,
4047 IN PNDIS_PACKET pPacket,
4049 OUT PULONG pFreeTXDLeft);
4051 NDIS_STATUS STAHardTransmit(
4052 IN PRTMP_ADAPTER pAd,
4056 VOID STARxEAPOLFrameIndicate(
4057 IN PRTMP_ADAPTER pAd,
4058 IN MAC_TABLE_ENTRY *pEntry,
4060 IN UCHAR FromWhichBSSID);
4062 NDIS_STATUS RTMPFreeTXDRequest(
4063 IN PRTMP_ADAPTER pAd,
4065 IN UCHAR NumberRequired,
4066 IN PUCHAR FreeNumberIs);
4068 NDIS_STATUS MlmeHardTransmit(
4069 IN PRTMP_ADAPTER pAd,
4071 IN PNDIS_PACKET pPacket);
4073 NDIS_STATUS MlmeHardTransmitMgmtRing(
4074 IN PRTMP_ADAPTER pAd,
4076 IN PNDIS_PACKET pPacket);
4078 NDIS_STATUS MlmeHardTransmitTxRing(
4079 IN PRTMP_ADAPTER pAd,
4081 IN PNDIS_PACKET pPacket);
4083 USHORT RTMPCalcDuration(
4084 IN PRTMP_ADAPTER pAd,
4089 IN PRTMP_ADAPTER pAd,
4090 IN PTXWI_STRUC pTxWI,
4093 IN BOOLEAN InsTimestamp,
4096 IN BOOLEAN NSeq, // HW new a sequence.
4105 IN HTTRANSMIT_SETTING *pTransmit);
4108 VOID RTMPWriteTxWI_Data(
4109 IN PRTMP_ADAPTER pAd,
4110 IN OUT PTXWI_STRUC pTxWI,
4114 VOID RTMPWriteTxWI_Cache(
4115 IN PRTMP_ADAPTER pAd,
4116 IN OUT PTXWI_STRUC pTxWI,
4119 VOID RTMPWriteTxDescriptor(
4120 IN PRTMP_ADAPTER pAd,
4125 VOID RTMPSuspendMsduTransmission(
4126 IN PRTMP_ADAPTER pAd);
4128 VOID RTMPResumeMsduTransmission(
4129 IN PRTMP_ADAPTER pAd);
4131 NDIS_STATUS MiniportMMRequest(
4132 IN PRTMP_ADAPTER pAd,
4137 NDIS_STATUS MiniportDataMMRequest(
4138 IN PRTMP_ADAPTER pAd,
4143 VOID RTMPSendNullFrame(
4144 IN PRTMP_ADAPTER pAd,
4146 IN BOOLEAN bQosNull);
4148 VOID RTMPSendDisassociationFrame(
4149 IN PRTMP_ADAPTER pAd);
4151 VOID RTMPSendRTSFrame(
4152 IN PRTMP_ADAPTER pAd,
4154 IN unsigned int NextMpduSize,
4157 IN USHORT AckDuration,
4162 NDIS_STATUS RTMPApplyPacketFilter(
4163 IN PRTMP_ADAPTER pAd,
4164 IN PRT28XX_RXD_STRUC pRxD,
4165 IN PHEADER_802_11 pHeader);
4167 PQUEUE_HEADER RTMPCheckTxSwQueue(
4168 IN PRTMP_ADAPTER pAd,
4171 #ifdef CONFIG_STA_SUPPORT
4172 VOID RTMPReportMicError(
4173 IN PRTMP_ADAPTER pAd,
4174 IN PCIPHER_KEY pWpaKey);
4176 VOID WpaMicFailureReportFrame(
4177 IN PRTMP_ADAPTER pAd,
4178 IN MLME_QUEUE_ELEM *Elem);
4180 VOID WpaDisassocApAndBlockAssoc(
4181 IN PVOID SystemSpecific1,
4182 IN PVOID FunctionContext,
4183 IN PVOID SystemSpecific2,
4184 IN PVOID SystemSpecific3);
4185 #endif // CONFIG_STA_SUPPORT //
4187 NDIS_STATUS RTMPCloneNdisPacket(
4188 IN PRTMP_ADAPTER pAd,
4189 IN BOOLEAN pInsAMSDUHdr,
4190 IN PNDIS_PACKET pInPacket,
4191 OUT PNDIS_PACKET *ppOutPacket);
4193 NDIS_STATUS RTMPAllocateNdisPacket(
4194 IN PRTMP_ADAPTER pAd,
4195 IN PNDIS_PACKET *pPacket,
4201 VOID RTMPFreeNdisPacket(
4202 IN PRTMP_ADAPTER pAd,
4203 IN PNDIS_PACKET pPacket);
4205 BOOLEAN RTMPFreeTXDUponTxDmaDone(
4206 IN PRTMP_ADAPTER pAd,
4209 BOOLEAN RTMPCheckDHCPFrame(
4210 IN PRTMP_ADAPTER pAd,
4211 IN PNDIS_PACKET pPacket);
4214 BOOLEAN RTMPCheckEtherType(
4215 IN PRTMP_ADAPTER pAd,
4216 IN PNDIS_PACKET pPacket);
4219 VOID RTMPCckBbpTuning(
4220 IN PRTMP_ADAPTER pAd,
4224 // Private routines in rtmp_wep.c
4226 VOID RTMPInitWepEngine(
4227 IN PRTMP_ADAPTER pAd,
4233 VOID RTMPEncryptData(
4234 IN PRTMP_ADAPTER pAd,
4239 BOOLEAN RTMPDecryptData(
4240 IN PRTMP_ADAPTER pAdapter,
4245 BOOLEAN RTMPSoftDecryptWEP(
4246 IN PRTMP_ADAPTER pAd,
4248 IN ULONG DataByteCnt,
4249 IN PCIPHER_KEY pGroupKey);
4252 IN PRTMP_ADAPTER pAd,
4256 IN PARCFOURCONTEXT Ctx,
4261 IN PARCFOURCONTEXT Ctx);
4263 VOID ARCFOUR_DECRYPT(
4264 IN PARCFOURCONTEXT Ctx,
4269 VOID ARCFOUR_ENCRYPT(
4270 IN PARCFOURCONTEXT Ctx,
4275 VOID WPAARCFOUR_ENCRYPT(
4276 IN PARCFOURCONTEXT Ctx,
4281 UINT RTMP_CALC_FCS32(
4290 // Asic/RF/BBP related functions
4292 VOID AsicAdjustTxPower(
4293 IN PRTMP_ADAPTER pAd);
4295 VOID AsicUpdateProtect(
4296 IN PRTMP_ADAPTER pAd,
4297 IN USHORT OperaionMode,
4299 IN BOOLEAN bDisableBGProtect,
4300 IN BOOLEAN bNonGFExist);
4302 VOID AsicSwitchChannel(
4303 IN PRTMP_ADAPTER pAd,
4307 VOID AsicLockChannel(
4308 IN PRTMP_ADAPTER pAd,
4311 VOID AsicAntennaSelect(
4312 IN PRTMP_ADAPTER pAd,
4315 VOID AsicAntennaSetting(
4316 IN PRTMP_ADAPTER pAd,
4317 IN ABGBAND_STATE BandState);
4319 VOID AsicRfTuningExec(
4320 IN PVOID SystemSpecific1,
4321 IN PVOID FunctionContext,
4322 IN PVOID SystemSpecific2,
4323 IN PVOID SystemSpecific3);
4325 #ifdef CONFIG_STA_SUPPORT
4326 VOID AsicSleepThenAutoWakeup(
4327 IN PRTMP_ADAPTER pAd,
4328 IN USHORT TbttNumToNextWakeUp);
4330 VOID AsicForceSleep(
4331 IN PRTMP_ADAPTER pAd);
4333 VOID AsicForceWakeup(
4334 IN PRTMP_ADAPTER pAd,
4335 IN BOOLEAN bFromTx);
4336 #endif // CONFIG_STA_SUPPORT //
4339 IN PRTMP_ADAPTER pAd,
4342 VOID AsicSetMcastWC(
4343 IN PRTMP_ADAPTER pAd);
4345 VOID AsicDelWcidTab(
4346 IN PRTMP_ADAPTER pAd,
4350 IN PRTMP_ADAPTER pAd);
4352 VOID AsicDisableRDG(
4353 IN PRTMP_ADAPTER pAd);
4355 VOID AsicDisableSync(
4356 IN PRTMP_ADAPTER pAd);
4358 VOID AsicEnableBssSync(
4359 IN PRTMP_ADAPTER pAd);
4361 VOID AsicEnableIbssSync(
4362 IN PRTMP_ADAPTER pAd);
4364 VOID AsicSetEdcaParm(
4365 IN PRTMP_ADAPTER pAd,
4366 IN PEDCA_PARM pEdcaParm);
4368 VOID AsicSetSlotTime(
4369 IN PRTMP_ADAPTER pAd,
4370 IN BOOLEAN bUseShortSlotTime);
4372 VOID AsicAddSharedKeyEntry(
4373 IN PRTMP_ADAPTER pAd,
4381 VOID AsicRemoveSharedKeyEntry(
4382 IN PRTMP_ADAPTER pAd,
4386 VOID AsicUpdateWCIDAttribute(
4387 IN PRTMP_ADAPTER pAd,
4391 IN BOOLEAN bUsePairewiseKeyTable);
4393 VOID AsicUpdateWCIDIVEIV(
4394 IN PRTMP_ADAPTER pAd,
4399 VOID AsicUpdateRxWCIDTable(
4400 IN PRTMP_ADAPTER pAd,
4404 VOID AsicAddKeyEntry(
4405 IN PRTMP_ADAPTER pAd,
4409 IN PCIPHER_KEY pCipherKey,
4410 IN BOOLEAN bUsePairewiseKeyTable,
4413 VOID AsicAddPairwiseKeyEntry(
4414 IN PRTMP_ADAPTER pAd,
4417 IN CIPHER_KEY *pCipherKey);
4419 VOID AsicRemovePairwiseKeyEntry(
4420 IN PRTMP_ADAPTER pAd,
4424 BOOLEAN AsicSendCommandToMcu(
4425 IN PRTMP_ADAPTER pAd,
4432 VOID MacAddrRandomBssid(
4433 IN PRTMP_ADAPTER pAd,
4436 VOID MgtMacHeaderInit(
4437 IN PRTMP_ADAPTER pAd,
4438 IN OUT PHEADER_802_11 pHdr80211,
4445 IN PRTMP_ADAPTER pAd);
4448 IN PRTMP_ADAPTER pAd);
4454 #ifdef DOT11_N_SUPPORT
4456 IN PRTMP_ADAPTER pAd,
4458 #endif // DOT11_N_SUPPORT //
4460 ULONG BssTableSearch(
4465 ULONG BssSsidTableSearch(
4472 ULONG BssTableSearchWithSSID(
4479 VOID BssTableDeleteEntry(
4480 IN OUT PBSS_TABLE pTab,
4484 #ifdef DOT11_N_SUPPORT
4485 VOID BATableDeleteORIEntry(
4486 IN OUT PRTMP_ADAPTER pAd,
4487 IN BA_ORI_ENTRY *pBAORIEntry);
4489 VOID BATableDeleteRECEntry(
4490 IN OUT PRTMP_ADAPTER pAd,
4491 IN BA_REC_ENTRY *pBARECEntry);
4493 VOID BATableTearORIEntry(
4494 IN OUT PRTMP_ADAPTER pAd,
4497 IN BOOLEAN bForceDelete,
4500 VOID BATableTearRECEntry(
4501 IN OUT PRTMP_ADAPTER pAd,
4505 #endif // DOT11_N_SUPPORT //
4508 IN PRTMP_ADAPTER pAd,
4509 OUT PBSS_ENTRY pBss,
4514 IN USHORT BeaconPeriod,
4517 IN USHORT CapabilityInfo,
4519 IN UCHAR SupRateLen,
4521 IN UCHAR ExtRateLen,
4522 IN HT_CAPABILITY_IE *pHtCapability,
4523 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4524 IN UCHAR HtCapabilityLen,
4525 IN UCHAR AddHtInfoLen,
4526 IN UCHAR NewExtChanOffset,
4529 IN LARGE_INTEGER TimeStamp,
4531 IN PEDCA_PARM pEdcaParm,
4532 IN PQOS_CAPABILITY_PARM pQosCapability,
4533 IN PQBSS_LOAD_PARM pQbssLoad,
4534 IN USHORT LengthVIE,
4535 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4537 ULONG BssTableSetEntry(
4538 IN PRTMP_ADAPTER pAd,
4539 OUT PBSS_TABLE pTab,
4544 IN USHORT BeaconPeriod,
4547 IN USHORT CapabilityInfo,
4549 IN UCHAR SupRateLen,
4551 IN UCHAR ExtRateLen,
4552 IN HT_CAPABILITY_IE *pHtCapability,
4553 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4554 IN UCHAR HtCapabilityLen,
4555 IN UCHAR AddHtInfoLen,
4556 IN UCHAR NewExtChanOffset,
4559 IN LARGE_INTEGER TimeStamp,
4561 IN PEDCA_PARM pEdcaParm,
4562 IN PQOS_CAPABILITY_PARM pQosCapability,
4563 IN PQBSS_LOAD_PARM pQbssLoad,
4564 IN USHORT LengthVIE,
4565 IN PNDIS_802_11_VARIABLE_IEs pVIE);
4567 #ifdef DOT11_N_SUPPORT
4568 VOID BATableInsertEntry(
4569 IN PRTMP_ADAPTER pAd,
4571 IN USHORT TimeOutValue,
4572 IN USHORT StartingSeq,
4575 IN UCHAR OriginatorStatus,
4576 IN BOOLEAN IsRecipient);
4578 #ifdef DOT11N_DRAFT3
4579 VOID Bss2040CoexistTimeOut(
4580 IN PVOID SystemSpecific1,
4581 IN PVOID FunctionContext,
4582 IN PVOID SystemSpecific2,
4583 IN PVOID SystemSpecific3);
4587 IN PRTMP_ADAPTER pAd);
4589 ULONG TriEventTableSetEntry(
4590 IN PRTMP_ADAPTER pAd,
4591 OUT TRIGGER_EVENT_TAB *Tab,
4593 IN HT_CAPABILITY_IE *pHtCapability,
4594 IN UCHAR HtCapabilityLen,
4596 IN UCHAR ChannelNo);
4598 VOID TriEventCounterMaintenance(
4599 IN PRTMP_ADAPTER pAd);
4600 #endif // DOT11N_DRAFT3 //
4601 #endif // DOT11_N_SUPPORT //
4603 VOID BssTableSsidSort(
4604 IN PRTMP_ADAPTER pAd,
4605 OUT BSS_TABLE *OutTab,
4609 VOID BssTableSortByRssi(
4610 IN OUT BSS_TABLE *OutTab);
4612 VOID BssCipherParse(
4613 IN OUT PBSS_ENTRY pBss);
4615 NDIS_STATUS MlmeQueueInit(
4616 IN MLME_QUEUE *Queue);
4618 VOID MlmeQueueDestroy(
4619 IN MLME_QUEUE *Queue);
4621 BOOLEAN MlmeEnqueue(
4622 IN PRTMP_ADAPTER pAd,
4628 BOOLEAN MlmeEnqueueForRecv(
4629 IN PRTMP_ADAPTER pAd,
4631 IN ULONG TimeStampHigh,
4632 IN ULONG TimeStampLow,
4641 BOOLEAN MlmeDequeue(
4642 IN MLME_QUEUE *Queue,
4643 OUT MLME_QUEUE_ELEM **Elem);
4645 VOID MlmeRestartStateMachine(
4646 IN PRTMP_ADAPTER pAd);
4648 BOOLEAN MlmeQueueEmpty(
4649 IN MLME_QUEUE *Queue);
4651 BOOLEAN MlmeQueueFull(
4652 IN MLME_QUEUE *Queue);
4654 BOOLEAN MsgTypeSubst(
4655 IN PRTMP_ADAPTER pAd,
4656 IN PFRAME_802_11 pFrame,
4660 VOID StateMachineInit(
4661 IN STATE_MACHINE *Sm,
4662 IN STATE_MACHINE_FUNC Trans[],
4665 IN STATE_MACHINE_FUNC DefFunc,
4669 VOID StateMachineSetAction(
4670 IN STATE_MACHINE *S,
4673 IN STATE_MACHINE_FUNC F);
4675 VOID StateMachinePerformAction(
4676 IN PRTMP_ADAPTER pAd,
4677 IN STATE_MACHINE *S,
4678 IN MLME_QUEUE_ELEM *Elem);
4681 IN PRTMP_ADAPTER pAd,
4682 IN MLME_QUEUE_ELEM *Elem);
4684 VOID AssocStateMachineInit(
4685 IN PRTMP_ADAPTER pAd,
4686 IN STATE_MACHINE *Sm,
4687 OUT STATE_MACHINE_FUNC Trans[]);
4689 VOID ReassocTimeout(
4690 IN PVOID SystemSpecific1,
4691 IN PVOID FunctionContext,
4692 IN PVOID SystemSpecific2,
4693 IN PVOID SystemSpecific3);
4696 IN PVOID SystemSpecific1,
4697 IN PVOID FunctionContext,
4698 IN PVOID SystemSpecific2,
4699 IN PVOID SystemSpecific3);
4701 VOID DisassocTimeout(
4702 IN PVOID SystemSpecific1,
4703 IN PVOID FunctionContext,
4704 IN PVOID SystemSpecific2,
4705 IN PVOID SystemSpecific3);
4707 //----------------------------------------------
4708 VOID MlmeDisassocReqAction(
4709 IN PRTMP_ADAPTER pAd,
4710 IN MLME_QUEUE_ELEM *Elem);
4712 VOID MlmeAssocReqAction(
4713 IN PRTMP_ADAPTER pAd,
4714 IN MLME_QUEUE_ELEM *Elem);
4716 VOID MlmeReassocReqAction(
4717 IN PRTMP_ADAPTER pAd,
4718 IN MLME_QUEUE_ELEM *Elem);
4720 VOID MlmeDisassocReqAction(
4721 IN PRTMP_ADAPTER pAd,
4722 IN MLME_QUEUE_ELEM *Elem);
4724 VOID PeerAssocRspAction(
4725 IN PRTMP_ADAPTER pAd,
4726 IN MLME_QUEUE_ELEM *Elem);
4728 VOID PeerReassocRspAction(
4729 IN PRTMP_ADAPTER pAd,
4730 IN MLME_QUEUE_ELEM *Elem);
4732 VOID PeerDisassocAction(
4733 IN PRTMP_ADAPTER pAd,
4734 IN MLME_QUEUE_ELEM *Elem);
4736 VOID DisassocTimeoutAction(
4737 IN PRTMP_ADAPTER pAd,
4738 IN MLME_QUEUE_ELEM *Elem);
4740 VOID AssocTimeoutAction(
4741 IN PRTMP_ADAPTER pAd,
4742 IN MLME_QUEUE_ELEM *Elem);
4744 VOID ReassocTimeoutAction(
4745 IN PRTMP_ADAPTER pAd,
4746 IN MLME_QUEUE_ELEM *Elem);
4749 IN PRTMP_ADAPTER pAd,
4752 VOID SwitchBetweenWepAndCkip(
4753 IN PRTMP_ADAPTER pAd);
4755 VOID InvalidStateWhenAssoc(
4756 IN PRTMP_ADAPTER pAd,
4757 IN MLME_QUEUE_ELEM *Elem);
4759 VOID InvalidStateWhenReassoc(
4760 IN PRTMP_ADAPTER pAd,
4761 IN MLME_QUEUE_ELEM *Elem);
4763 VOID InvalidStateWhenDisassociate(
4764 IN PRTMP_ADAPTER pAd,
4765 IN MLME_QUEUE_ELEM *Elem);
4768 VOID MlmeCntlConfirm(
4769 IN PRTMP_ADAPTER pAd,
4775 IN PRTMP_ADAPTER pAd);
4777 VOID ComposeNullFrame(
4778 IN PRTMP_ADAPTER pAd);
4781 IN PRTMP_ADAPTER pAd,
4783 IN USHORT CapabilityInfo,
4786 IN UCHAR SupRateLen,
4788 IN UCHAR ExtRateLen,
4789 IN PEDCA_PARM pEdcaParm,
4790 IN HT_CAPABILITY_IE *pHtCapability,
4791 IN UCHAR HtCapabilityLen,
4792 IN ADD_HT_INFO_IE *pAddHtInfo);
4794 VOID AuthStateMachineInit(
4795 IN PRTMP_ADAPTER pAd,
4796 IN PSTATE_MACHINE sm,
4797 OUT STATE_MACHINE_FUNC Trans[]);
4800 IN PVOID SystemSpecific1,
4801 IN PVOID FunctionContext,
4802 IN PVOID SystemSpecific2,
4803 IN PVOID SystemSpecific3);
4805 VOID MlmeAuthReqAction(
4806 IN PRTMP_ADAPTER pAd,
4807 IN MLME_QUEUE_ELEM *Elem);
4809 VOID PeerAuthRspAtSeq2Action(
4810 IN PRTMP_ADAPTER pAd,
4811 IN MLME_QUEUE_ELEM *Elem);
4813 VOID PeerAuthRspAtSeq4Action(
4814 IN PRTMP_ADAPTER pAd,
4815 IN MLME_QUEUE_ELEM *Elem);
4817 VOID AuthTimeoutAction(
4818 IN PRTMP_ADAPTER pAd,
4819 IN MLME_QUEUE_ELEM *Elem);
4822 IN PRTMP_ADAPTER pAd,
4825 VOID MlmeDeauthReqAction(
4826 IN PRTMP_ADAPTER pAd,
4827 IN MLME_QUEUE_ELEM *Elem);
4829 VOID InvalidStateWhenAuth(
4830 IN PRTMP_ADAPTER pAd,
4831 IN MLME_QUEUE_ELEM *Elem);
4833 //=============================================
4835 VOID AuthRspStateMachineInit(
4836 IN PRTMP_ADAPTER pAd,
4837 IN PSTATE_MACHINE Sm,
4838 IN STATE_MACHINE_FUNC Trans[]);
4840 VOID PeerDeauthAction(
4841 IN PRTMP_ADAPTER pAd,
4842 IN MLME_QUEUE_ELEM *Elem);
4844 VOID PeerAuthSimpleRspGenAndSend(
4845 IN PRTMP_ADAPTER pAd,
4846 IN PHEADER_802_11 pHdr80211,
4853 // Private routines in dls.c
4856 #ifdef CONFIG_STA_SUPPORT
4857 #ifdef QOS_DLS_SUPPORT
4858 void DlsStateMachineInit(
4859 IN PRTMP_ADAPTER pAd,
4860 IN STATE_MACHINE *Sm,
4861 OUT STATE_MACHINE_FUNC Trans[]);
4863 VOID MlmeDlsReqAction(
4864 IN PRTMP_ADAPTER pAd,
4865 IN MLME_QUEUE_ELEM *Elem);
4867 VOID PeerDlsReqAction(
4868 IN PRTMP_ADAPTER pAd,
4869 IN MLME_QUEUE_ELEM *Elem);
4871 VOID PeerDlsRspAction(
4872 IN PRTMP_ADAPTER pAd,
4873 IN MLME_QUEUE_ELEM *Elem);
4875 VOID MlmeDlsTearDownAction(
4876 IN PRTMP_ADAPTER pAd,
4877 IN MLME_QUEUE_ELEM *Elem);
4879 VOID PeerDlsTearDownAction(
4880 IN PRTMP_ADAPTER pAd,
4881 IN MLME_QUEUE_ELEM *Elem);
4883 VOID RTMPCheckDLSTimeOut(
4884 IN PRTMP_ADAPTER pAd);
4886 BOOLEAN RTMPRcvFrameDLSCheck(
4887 IN PRTMP_ADAPTER pAd,
4888 IN PHEADER_802_11 pHeader,
4890 IN PRT28XX_RXD_STRUC pRxD);
4892 INT RTMPCheckDLSFrame(
4893 IN PRTMP_ADAPTER pAd,
4896 VOID RTMPSendDLSTearDownFrame(
4897 IN PRTMP_ADAPTER pAd,
4900 NDIS_STATUS RTMPSendSTAKeyRequest(
4901 IN PRTMP_ADAPTER pAd,
4904 NDIS_STATUS RTMPSendSTAKeyHandShake(
4905 IN PRTMP_ADAPTER pAd,
4908 VOID DlsTimeoutAction(
4909 IN PVOID SystemSpecific1,
4910 IN PVOID FunctionContext,
4911 IN PVOID SystemSpecific2,
4912 IN PVOID SystemSpecific3);
4914 BOOLEAN MlmeDlsReqSanity(
4915 IN PRTMP_ADAPTER pAd,
4918 OUT PRT_802_11_DLS *pDLS,
4919 OUT PUSHORT pReason);
4921 INT Set_DlsEntryInfo_Display_Proc(
4922 IN PRTMP_ADAPTER pAd,
4925 MAC_TABLE_ENTRY *MacTableInsertDlsEntry(
4926 IN PRTMP_ADAPTER pAd,
4928 IN UINT DlsEntryIdx);
4930 BOOLEAN MacTableDeleteDlsEntry(
4931 IN PRTMP_ADAPTER pAd,
4935 MAC_TABLE_ENTRY *DlsEntryTableLookup(
4936 IN PRTMP_ADAPTER pAd,
4938 IN BOOLEAN bResetIdelCount);
4940 MAC_TABLE_ENTRY *DlsEntryTableLookupByWcid(
4941 IN PRTMP_ADAPTER pAd,
4944 IN BOOLEAN bResetIdelCount);
4946 INT Set_DlsAddEntry_Proc(
4947 IN PRTMP_ADAPTER pAd,
4950 INT Set_DlsTearDownEntry_Proc(
4951 IN PRTMP_ADAPTER pAd,
4953 #endif // QOS_DLS_SUPPORT //
4954 #endif // CONFIG_STA_SUPPORT //
4956 #ifdef QOS_DLS_SUPPORT
4957 BOOLEAN PeerDlsReqSanity(
4958 IN PRTMP_ADAPTER pAd,
4963 OUT USHORT *pCapabilityInfo,
4964 OUT USHORT *pDlsTimeout,
4965 OUT UCHAR *pRatesLen,
4967 OUT UCHAR *pHtCapabilityLen,
4968 OUT HT_CAPABILITY_IE *pHtCapability);
4970 BOOLEAN PeerDlsRspSanity(
4971 IN PRTMP_ADAPTER pAd,
4976 OUT USHORT *pCapabilityInfo,
4977 OUT USHORT *pStatus,
4978 OUT UCHAR *pRatesLen,
4980 OUT UCHAR *pHtCapabilityLen,
4981 OUT HT_CAPABILITY_IE *pHtCapability);
4983 BOOLEAN PeerDlsTearDownSanity(
4984 IN PRTMP_ADAPTER pAd,
4989 OUT USHORT *pReason);
4990 #endif // QOS_DLS_SUPPORT //
4992 //========================================
4994 VOID SyncStateMachineInit(
4995 IN PRTMP_ADAPTER pAd,
4996 IN STATE_MACHINE *Sm,
4997 OUT STATE_MACHINE_FUNC Trans[]);
5000 IN PVOID SystemSpecific1,
5001 IN PVOID FunctionContext,
5002 IN PVOID SystemSpecific2,
5003 IN PVOID SystemSpecific3);
5006 IN PVOID SystemSpecific1,
5007 IN PVOID FunctionContext,
5008 IN PVOID SystemSpecific2,
5009 IN PVOID SystemSpecific3);
5011 VOID MlmeScanReqAction(
5012 IN PRTMP_ADAPTER pAd,
5013 IN MLME_QUEUE_ELEM *Elem);
5015 VOID InvalidStateWhenScan(
5016 IN PRTMP_ADAPTER pAd,
5017 IN MLME_QUEUE_ELEM *Elem);
5019 VOID InvalidStateWhenJoin(
5020 IN PRTMP_ADAPTER pAd,
5021 IN MLME_QUEUE_ELEM *Elem);
5023 VOID InvalidStateWhenStart(
5024 IN PRTMP_ADAPTER pAd,
5025 IN MLME_QUEUE_ELEM *Elem);
5028 IN PRTMP_ADAPTER pAd,
5029 IN MLME_QUEUE_ELEM *Elem);
5031 VOID EnqueueProbeRequest(
5032 IN PRTMP_ADAPTER pAd);
5034 BOOLEAN ScanRunning(
5035 IN PRTMP_ADAPTER pAd);
5036 //=========================================
5039 IN PRTMP_ADAPTER pAd,
5040 IN STATE_MACHINE *S,
5041 OUT STATE_MACHINE_FUNC Trans[]);
5043 VOID MlmeCntlMachinePerformAction(
5044 IN PRTMP_ADAPTER pAd,
5045 IN STATE_MACHINE *S,
5046 IN MLME_QUEUE_ELEM *Elem);
5049 IN PRTMP_ADAPTER pAd,
5050 IN MLME_QUEUE_ELEM *Elem);
5052 VOID CntlOidScanProc(
5053 IN PRTMP_ADAPTER pAd,
5054 IN MLME_QUEUE_ELEM *Elem);
5056 VOID CntlOidSsidProc(
5057 IN PRTMP_ADAPTER pAd,
5058 IN MLME_QUEUE_ELEM * Elem);
5060 VOID CntlOidRTBssidProc(
5061 IN PRTMP_ADAPTER pAd,
5062 IN MLME_QUEUE_ELEM * Elem);
5064 VOID CntlMlmeRoamingProc(
5065 IN PRTMP_ADAPTER pAd,
5066 IN MLME_QUEUE_ELEM * Elem);
5068 VOID CntlWaitDisassocProc(
5069 IN PRTMP_ADAPTER pAd,
5070 IN MLME_QUEUE_ELEM *Elem);
5072 VOID CntlWaitJoinProc(
5073 IN PRTMP_ADAPTER pAd,
5074 IN MLME_QUEUE_ELEM *Elem);
5076 VOID CntlWaitReassocProc(
5077 IN PRTMP_ADAPTER pAd,
5078 IN MLME_QUEUE_ELEM *Elem);
5080 VOID CntlWaitStartProc(
5081 IN PRTMP_ADAPTER pAd,
5082 IN MLME_QUEUE_ELEM *Elem);
5084 VOID CntlWaitAuthProc(
5085 IN PRTMP_ADAPTER pAd,
5086 IN MLME_QUEUE_ELEM *Elem);
5088 VOID CntlWaitAuthProc2(
5089 IN PRTMP_ADAPTER pAd,
5090 IN MLME_QUEUE_ELEM *Elem);
5092 VOID CntlWaitAssocProc(
5093 IN PRTMP_ADAPTER pAd,
5094 IN MLME_QUEUE_ELEM *Elem);
5096 #ifdef QOS_DLS_SUPPORT
5097 VOID CntlOidDLSSetupProc(
5098 IN PRTMP_ADAPTER pAd,
5099 IN MLME_QUEUE_ELEM *Elem);
5100 #endif // QOS_DLS_SUPPORT //
5103 IN PRTMP_ADAPTER pAd,
5107 IN PRTMP_ADAPTER pAd,
5108 IN BOOLEAN IsReqFromAP);
5110 VOID IterateOnBssTab(
5111 IN PRTMP_ADAPTER pAd);
5113 VOID IterateOnBssTab2(
5114 IN PRTMP_ADAPTER pAd);;
5117 IN PRTMP_ADAPTER pAd,
5118 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
5122 IN PRTMP_ADAPTER pAd,
5123 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
5125 IN USHORT CapabilityInfo,
5127 IN USHORT ListenIntv);
5130 IN PRTMP_ADAPTER pAd,
5131 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
5137 VOID DisassocParmFill(
5138 IN PRTMP_ADAPTER pAd,
5139 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
5144 IN PRTMP_ADAPTER pAd,
5145 IN OUT MLME_START_REQ_STRUCT *StartReq,
5150 IN PRTMP_ADAPTER pAd,
5151 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
5156 IN PRTMP_ADAPTER pAd);
5158 VOID EnqueueBeaconFrame(
5159 IN PRTMP_ADAPTER pAd);
5161 VOID MlmeJoinReqAction(
5162 IN PRTMP_ADAPTER pAd,
5163 IN MLME_QUEUE_ELEM *Elem);
5165 VOID MlmeScanReqAction(
5166 IN PRTMP_ADAPTER pAd,
5167 IN MLME_QUEUE_ELEM *Elem);
5169 VOID MlmeStartReqAction(
5170 IN PRTMP_ADAPTER pAd,
5171 IN MLME_QUEUE_ELEM *Elem);
5173 VOID ScanTimeoutAction(
5174 IN PRTMP_ADAPTER pAd,
5175 IN MLME_QUEUE_ELEM *Elem);
5177 VOID BeaconTimeoutAtJoinAction(
5178 IN PRTMP_ADAPTER pAd,
5179 IN MLME_QUEUE_ELEM *Elem);
5181 VOID PeerBeaconAtScanAction(
5182 IN PRTMP_ADAPTER pAd,
5183 IN MLME_QUEUE_ELEM *Elem);
5185 VOID PeerBeaconAtJoinAction(
5186 IN PRTMP_ADAPTER pAd,
5187 IN MLME_QUEUE_ELEM *Elem);
5190 IN PRTMP_ADAPTER pAd,
5191 IN MLME_QUEUE_ELEM *Elem);
5193 VOID PeerProbeReqAction(
5194 IN PRTMP_ADAPTER pAd,
5195 IN MLME_QUEUE_ELEM *Elem);
5197 VOID ScanNextChannel(
5198 IN PRTMP_ADAPTER pAd);
5200 ULONG MakeIbssBeacon(
5201 IN PRTMP_ADAPTER pAd);
5203 VOID CCXAdjacentAPReport(
5204 IN PRTMP_ADAPTER pAd);
5206 BOOLEAN MlmeScanReqSanity(
5207 IN PRTMP_ADAPTER pAd,
5213 OUT UCHAR *ScanType);
5215 BOOLEAN PeerBeaconAndProbeRspSanity(
5216 IN PRTMP_ADAPTER pAd,
5219 IN UCHAR MsgChannel,
5223 OUT UCHAR *pSsidLen,
5224 OUT UCHAR *pBssType,
5225 OUT USHORT *pBeaconPeriod,
5226 OUT UCHAR *pChannel,
5227 OUT UCHAR *pNewChannel,
5228 OUT LARGE_INTEGER *pTimestamp,
5229 OUT CF_PARM *pCfParm,
5230 OUT USHORT *pAtimWin,
5231 OUT USHORT *pCapabilityInfo,
5233 OUT UCHAR *pDtimCount,
5234 OUT UCHAR *pDtimPeriod,
5235 OUT UCHAR *pBcastFlag,
5236 OUT UCHAR *pMessageToMe,
5237 OUT UCHAR SupRate[],
5238 OUT UCHAR *pSupRateLen,
5239 OUT UCHAR ExtRate[],
5240 OUT UCHAR *pExtRateLen,
5241 OUT UCHAR *pCkipFlag,
5242 OUT UCHAR *pAironetCellPowerLimit,
5243 OUT PEDCA_PARM pEdcaParm,
5244 OUT PQBSS_LOAD_PARM pQbssLoad,
5245 OUT PQOS_CAPABILITY_PARM pQosCapability,
5246 OUT ULONG *pRalinkIe,
5247 OUT UCHAR *pHtCapabilityLen,
5248 #ifdef CONFIG_STA_SUPPORT
5249 OUT UCHAR *pPreNHtCapabilityLen,
5250 #endif // CONFIG_STA_SUPPORT //
5251 OUT HT_CAPABILITY_IE *pHtCapability,
5252 OUT UCHAR *AddHtInfoLen,
5253 OUT ADD_HT_INFO_IE *AddHtInfo,
5254 OUT UCHAR *NewExtChannel,
5255 OUT USHORT *LengthVIE,
5256 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
5258 BOOLEAN PeerAddBAReqActionSanity(
5259 IN PRTMP_ADAPTER pAd,
5264 BOOLEAN PeerAddBARspActionSanity(
5265 IN PRTMP_ADAPTER pAd,
5269 BOOLEAN PeerDelBAActionSanity(
5270 IN PRTMP_ADAPTER pAd,
5275 BOOLEAN MlmeAssocReqSanity(
5276 IN PRTMP_ADAPTER pAd,
5280 OUT USHORT *CapabilityInfo,
5282 OUT USHORT *ListenIntv);
5284 BOOLEAN MlmeAuthReqSanity(
5285 IN PRTMP_ADAPTER pAd,
5292 BOOLEAN MlmeStartReqSanity(
5293 IN PRTMP_ADAPTER pAd,
5297 OUT UCHAR *Ssidlen);
5299 BOOLEAN PeerAuthSanity(
5300 IN PRTMP_ADAPTER pAd,
5307 OUT CHAR ChlgText[]);
5309 BOOLEAN PeerAssocRspSanity(
5310 IN PRTMP_ADAPTER pAd,
5314 OUT USHORT *pCapabilityInfo,
5315 OUT USHORT *pStatus,
5317 OUT UCHAR SupRate[],
5318 OUT UCHAR *pSupRateLen,
5319 OUT UCHAR ExtRate[],
5320 OUT UCHAR *pExtRateLen,
5321 OUT HT_CAPABILITY_IE *pHtCapability,
5322 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
5323 OUT UCHAR *pHtCapabilityLen,
5324 OUT UCHAR *pAddHtInfoLen,
5325 OUT UCHAR *pNewExtChannelOffset,
5326 OUT PEDCA_PARM pEdcaParm,
5327 OUT UCHAR *pCkipFlag);
5329 BOOLEAN PeerDisassocSanity(
5330 IN PRTMP_ADAPTER pAd,
5334 OUT USHORT *Reason);
5336 BOOLEAN PeerWpaMessageSanity(
5337 IN PRTMP_ADAPTER pAd,
5338 IN PEAPOL_PACKET pMsg,
5341 IN MAC_TABLE_ENTRY *pEntry);
5343 BOOLEAN PeerDeauthSanity(
5344 IN PRTMP_ADAPTER pAd,
5348 OUT USHORT *Reason);
5350 BOOLEAN PeerProbeReqSanity(
5351 IN PRTMP_ADAPTER pAd,
5356 OUT UCHAR *pSsidLen);
5362 OUT UCHAR *BcastFlag,
5363 OUT UCHAR *DtimCount,
5364 OUT UCHAR *DtimPeriod,
5365 OUT UCHAR *MessageToMe);
5367 UCHAR ChannelSanity(
5368 IN PRTMP_ADAPTER pAd,
5371 NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
5372 IN PBSS_ENTRY pBss);
5374 BOOLEAN MlmeDelBAReqSanity(
5375 IN PRTMP_ADAPTER pAd,
5379 BOOLEAN MlmeAddBAReqSanity(
5380 IN PRTMP_ADAPTER pAd,
5385 ULONG MakeOutgoingFrame(
5387 OUT ULONG *Length, ...);
5390 IN PRTMP_ADAPTER pAd,
5394 IN PRTMP_ADAPTER pAd);
5396 VOID AsicUpdateAutoFallBackTable(
5397 IN PRTMP_ADAPTER pAd,
5400 VOID MlmePeriodicExec(
5401 IN PVOID SystemSpecific1,
5402 IN PVOID FunctionContext,
5403 IN PVOID SystemSpecific2,
5404 IN PVOID SystemSpecific3);
5407 IN PVOID SystemSpecific1,
5408 IN PVOID FunctionContext,
5409 IN PVOID SystemSpecific2,
5410 IN PVOID SystemSpecific3);
5413 IN PVOID SystemSpecific1,
5414 IN PVOID FunctionContext,
5415 IN PVOID SystemSpecific2,
5416 IN PVOID SystemSpecific3);
5418 VOID STAMlmePeriodicExec(
5422 IN PRTMP_ADAPTER pAd);
5424 VOID MlmeAutoReconnectLastSSID(
5425 IN PRTMP_ADAPTER pAd);
5427 BOOLEAN MlmeValidateSSID(
5431 VOID MlmeCheckForRoaming(
5432 IN PRTMP_ADAPTER pAd,
5435 VOID MlmeCheckForFastRoaming(
5436 IN PRTMP_ADAPTER pAd,
5439 VOID MlmeDynamicTxRateSwitching(
5440 IN PRTMP_ADAPTER pAd);
5443 IN PRTMP_ADAPTER pAd,
5444 IN PMAC_TABLE_ENTRY pEntry,
5445 IN PRTMP_TX_RATE_SWITCH pTxRate);
5447 VOID MlmeSelectTxRateTable(
5448 IN PRTMP_ADAPTER pAd,
5449 IN PMAC_TABLE_ENTRY pEntry,
5451 IN PUCHAR pTableSize,
5452 IN PUCHAR pInitTxRateIdx);
5454 VOID MlmeCalculateChannelQuality(
5455 IN PRTMP_ADAPTER pAd,
5458 VOID MlmeCheckPsmChange(
5459 IN PRTMP_ADAPTER pAd,
5463 IN PRTMP_ADAPTER pAd,
5466 VOID MlmeSetTxPreamble(
5467 IN PRTMP_ADAPTER pAd,
5468 IN USHORT TxPreamble);
5470 VOID UpdateBasicRateBitmap(
5471 IN PRTMP_ADAPTER pAd);
5473 VOID MlmeUpdateTxRates(
5474 IN PRTMP_ADAPTER pAd,
5478 #ifdef DOT11_N_SUPPORT
5479 VOID MlmeUpdateHtTxRates(
5480 IN PRTMP_ADAPTER pAd,
5482 #endif // DOT11_N_SUPPORT //
5484 VOID RTMPCheckRates(
5485 IN PRTMP_ADAPTER pAd,
5486 IN OUT UCHAR SupRate[],
5487 IN OUT UCHAR *SupRateLen);
5489 #ifdef CONFIG_STA_SUPPORT
5490 BOOLEAN RTMPCheckChannel(
5491 IN PRTMP_ADAPTER pAd,
5492 IN UCHAR CentralChannel,
5494 #endif // CONFIG_STA_SUPPORT //
5496 BOOLEAN RTMPCheckHt(
5497 IN PRTMP_ADAPTER pAd,
5499 IN OUT HT_CAPABILITY_IE *pHtCapability,
5500 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
5502 VOID StaQuickResponeForRateUpExec(
5503 IN PVOID SystemSpecific1,
5504 IN PVOID FunctionContext,
5505 IN PVOID SystemSpecific2,
5506 IN PVOID SystemSpecific3);
5508 VOID AsicBbpTuning1(
5509 IN PRTMP_ADAPTER pAd);
5511 VOID AsicBbpTuning2(
5512 IN PRTMP_ADAPTER pAd);
5514 VOID RTMPUpdateMlmeRate(
5515 IN PRTMP_ADAPTER pAd);
5518 IN PRTMP_ADAPTER pAd,
5524 IN PRTMP_ADAPTER pAd,
5527 VOID AsicEvaluateRxAnt(
5528 IN PRTMP_ADAPTER pAd);
5530 VOID AsicRxAntEvalTimeout(
5531 IN PVOID SystemSpecific1,
5532 IN PVOID FunctionContext,
5533 IN PVOID SystemSpecific2,
5534 IN PVOID SystemSpecific3);
5536 VOID APSDPeriodicExec(
5537 IN PVOID SystemSpecific1,
5538 IN PVOID FunctionContext,
5539 IN PVOID SystemSpecific2,
5540 IN PVOID SystemSpecific3);
5542 BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
5543 IN PRTMP_ADAPTER pAd,
5544 IN PMAC_TABLE_ENTRY pEntry);
5546 UCHAR RTMPStaFixedTxMode(
5547 IN PRTMP_ADAPTER pAd,
5548 IN PMAC_TABLE_ENTRY pEntry);
5550 VOID RTMPUpdateLegacyTxSetting(
5551 UCHAR fixed_tx_mode,
5552 PMAC_TABLE_ENTRY pEntry);
5554 BOOLEAN RTMPAutoRateSwitchCheck(
5555 IN PRTMP_ADAPTER pAd);
5557 NDIS_STATUS MlmeInit(
5558 IN PRTMP_ADAPTER pAd);
5561 IN PRTMP_ADAPTER pAd);
5564 IN PRTMP_ADAPTER pAd);
5566 VOID MlmeResetRalinkCounters(
5567 IN PRTMP_ADAPTER pAd);
5569 VOID BuildChannelList(
5570 IN PRTMP_ADAPTER pAd);
5573 IN PRTMP_ADAPTER pAd);
5576 IN PRTMP_ADAPTER pAd,
5579 VOID ChangeToCellPowerLimit(
5580 IN PRTMP_ADAPTER pAd,
5581 IN UCHAR AironetCellPowerLimit);
5584 IN PRTMP_ADAPTER pAd,
5588 IN PRTMP_ADAPTER pAd,
5592 IN PRTMP_ADAPTER pAd);
5595 IN PRTMP_ADAPTER pAd,
5600 IN PRTMP_ADAPTER pAd);
5603 IN PRTMP_ADAPTER pAd);
5606 IN PRTMP_ADAPTER pAd);
5608 USHORT RTMP_EEPROM_READ16(
5609 IN PRTMP_ADAPTER pAd,
5612 VOID RTMP_EEPROM_WRITE16(
5613 IN PRTMP_ADAPTER pAd,
5618 // Prototypes of function definition in rtmp_tkip.c
5620 VOID RTMPInitTkipEngine(
5621 IN PRTMP_ADAPTER pAd,
5630 VOID RTMPInitMICEngine(
5631 IN PRTMP_ADAPTER pAd,
5635 IN UCHAR UserPriority,
5638 BOOLEAN RTMPTkipCompareMICValue(
5639 IN PRTMP_ADAPTER pAd,
5644 IN UCHAR UserPriority,
5647 VOID RTMPCalculateMICValue(
5648 IN PRTMP_ADAPTER pAd,
5649 IN PNDIS_PACKET pPacket,
5651 IN PCIPHER_KEY pKey,
5654 BOOLEAN RTMPTkipCompareMICValueWithLLC(
5655 IN PRTMP_ADAPTER pAd,
5663 VOID RTMPTkipAppendByte(
5664 IN PTKIP_KEY_INFO pTkip,
5667 VOID RTMPTkipAppend(
5668 IN PTKIP_KEY_INFO pTkip,
5672 VOID RTMPTkipGetMIC(
5673 IN PTKIP_KEY_INFO pTkip);
5675 BOOLEAN RTMPSoftDecryptTKIP(
5676 IN PRTMP_ADAPTER pAd,
5678 IN ULONG DataByteCnt,
5679 IN UCHAR UserPriority,
5680 IN PCIPHER_KEY pWpaKey);
5682 BOOLEAN RTMPSoftDecryptAES(
5683 IN PRTMP_ADAPTER pAd,
5685 IN ULONG DataByteCnt,
5686 IN PCIPHER_KEY pWpaKey);
5689 // Prototypes of function definition in cmm_info.c
5691 NDIS_STATUS RTMPWPARemoveKeyProc(
5692 IN PRTMP_ADAPTER pAd,
5695 VOID RTMPWPARemoveAllKeys(
5696 IN PRTMP_ADAPTER pAd);
5698 BOOLEAN RTMPCheckStrPrintAble(
5702 VOID RTMPSetPhyMode(
5703 IN PRTMP_ADAPTER pAd,
5706 VOID RTMPUpdateHTIE(
5707 IN RT_HT_CAPABILITY *pRtHt,
5709 OUT HT_CAPABILITY_IE *pHtCapability,
5710 OUT ADD_HT_INFO_IE *pAddHtInfo);
5712 VOID RTMPAddWcidAttributeEntry(
5713 IN PRTMP_ADAPTER pAd,
5717 IN MAC_TABLE_ENTRY *pEntry);
5719 CHAR *GetEncryptType(
5725 VOID RTMPIoctlGetSiteSurvey(
5726 IN PRTMP_ADAPTER pAdapter,
5727 IN struct iwreq *wrq);
5729 VOID RTMPIoctlGetMacTable(
5730 IN PRTMP_ADAPTER pAd,
5731 IN struct iwreq *wrq);
5733 VOID RTMPIndicateWPA2Status(
5734 IN PRTMP_ADAPTER pAdapter);
5736 VOID RTMPOPModeSwitching(
5737 IN PRTMP_ADAPTER pAd);
5739 #ifdef CONFIG_STA_SUPPORT
5740 VOID RTMPAddBSSIDCipher(
5741 IN PRTMP_ADAPTER pAd,
5743 IN PNDIS_802_11_KEY pKey,
5744 IN UCHAR CipherAlg);
5745 #endif // CONFIG_STA_SUPPORT //
5747 #ifdef DOT11_N_SUPPORT
5749 IN PRTMP_ADAPTER pAd,
5750 IN OID_SET_HT_PHYMODE *pHTPhyMode);
5752 VOID RTMPSetIndividualHT(
5753 IN PRTMP_ADAPTER pAd,
5755 #endif // DOT11_N_SUPPORT //
5757 VOID RTMPSendWirelessEvent(
5758 IN PRTMP_ADAPTER pAd,
5759 IN USHORT Event_flag,
5764 VOID NICUpdateCntlCounters(
5765 IN PRTMP_ADAPTER pAd,
5766 IN PHEADER_802_11 pHeader,
5768 IN PRXWI_STRUC pRxWI);
5770 // prototype in wpa.c
5772 BOOLEAN WpaMsgTypeSubst(
5776 VOID WpaPskStateMachineInit(
5777 IN PRTMP_ADAPTER pAd,
5778 IN STATE_MACHINE *S,
5779 OUT STATE_MACHINE_FUNC Trans[]);
5781 VOID WpaEAPOLKeyAction(
5782 IN PRTMP_ADAPTER pAd,
5783 IN MLME_QUEUE_ELEM *Elem);
5785 VOID WpaPairMsg1Action(
5786 IN PRTMP_ADAPTER pAd,
5787 IN MLME_QUEUE_ELEM *Elem);
5789 VOID WpaPairMsg3Action(
5790 IN PRTMP_ADAPTER pAd,
5791 IN MLME_QUEUE_ELEM *Elem);
5793 VOID WpaGroupMsg1Action(
5794 IN PRTMP_ADAPTER pAd,
5795 IN MLME_QUEUE_ELEM *Elem);
5797 VOID WpaMacHeaderInit(
5798 IN PRTMP_ADAPTER pAd,
5799 IN OUT PHEADER_802_11 pHdr80211,
5803 VOID Wpa2PairMsg1Action(
5804 IN PRTMP_ADAPTER pAd,
5805 IN MLME_QUEUE_ELEM *Elem);
5807 VOID Wpa2PairMsg3Action(
5808 IN PRTMP_ADAPTER pAd,
5809 IN MLME_QUEUE_ELEM *Elem);
5811 BOOLEAN ParseKeyData(
5812 IN PRTMP_ADAPTER pAd,
5814 IN UCHAR KeyDataLen,
5815 IN UCHAR bPairewise);
5817 VOID RTMPToWirelessSta(
5818 IN PRTMP_ADAPTER pAd,
5819 IN PUCHAR pHeader802_3,
5823 IN BOOLEAN is4wayFrame);
5851 IN PRTMP_ADAPTER pAd,
5861 IN PRTMP_ADAPTER pAd,
5866 // prototype in aironet.c
5868 VOID AironetStateMachineInit(
5869 IN PRTMP_ADAPTER pAd,
5870 IN STATE_MACHINE *S,
5871 OUT STATE_MACHINE_FUNC Trans[]);
5873 VOID AironetMsgAction(
5874 IN PRTMP_ADAPTER pAd,
5875 IN MLME_QUEUE_ELEM *Elem);
5877 VOID AironetRequestAction(
5878 IN PRTMP_ADAPTER pAd,
5879 IN MLME_QUEUE_ELEM *Elem);
5881 VOID ChannelLoadRequestAction(
5882 IN PRTMP_ADAPTER pAd,
5885 VOID NoiseHistRequestAction(
5886 IN PRTMP_ADAPTER pAd,
5889 VOID BeaconRequestAction(
5890 IN PRTMP_ADAPTER pAd,
5893 VOID AironetReportAction(
5894 IN PRTMP_ADAPTER pAd,
5895 IN MLME_QUEUE_ELEM *Elem);
5897 VOID ChannelLoadReportAction(
5898 IN PRTMP_ADAPTER pAd,
5901 VOID NoiseHistReportAction(
5902 IN PRTMP_ADAPTER pAd,
5905 VOID AironetFinalReportAction(
5906 IN PRTMP_ADAPTER pAd);
5908 VOID BeaconReportAction(
5909 IN PRTMP_ADAPTER pAd,
5912 VOID AironetAddBeaconReport(
5913 IN PRTMP_ADAPTER pAd,
5915 IN PMLME_QUEUE_ELEM pElem);
5917 VOID AironetCreateBeaconReportFromBssTable(
5918 IN PRTMP_ADAPTER pAd);
5920 VOID DBGPRINT_TX_RING(
5921 IN PRTMP_ADAPTER pAd,
5924 VOID DBGPRINT_RX_RING(
5925 IN PRTMP_ADAPTER pAd);
5928 IN PRTMP_ADAPTER pAd,
5930 IN UCHAR RssiNumber);
5933 #ifdef DOT11N_DRAFT3
5934 VOID BuildEffectedChannelList(
5935 IN PRTMP_ADAPTER pAd);
5936 #endif // DOT11N_DRAFT3 //
5939 VOID APAsicEvaluateRxAnt(
5940 IN PRTMP_ADAPTER pAd);
5943 VOID APAsicRxAntEvalTimeout(
5944 IN PRTMP_ADAPTER pAd);
5947 // function prototype in cmm_wpa.c
5949 BOOLEAN RTMPCheckWPAframe(
5950 IN PRTMP_ADAPTER pAd,
5951 IN PMAC_TABLE_ENTRY pEntry,
5953 IN ULONG DataByteCount,
5954 IN UCHAR FromWhichBSSID);
5956 VOID AES_GTK_KEY_UNWRAP(
5958 OUT UCHAR *plaintext,
5960 IN UCHAR *ciphertext);
5962 BOOLEAN RTMPCheckRSNIE(
5963 IN PRTMP_ADAPTER pAd,
5966 IN MAC_TABLE_ENTRY *pEntry,
5969 BOOLEAN RTMPParseEapolKeyData(
5970 IN PRTMP_ADAPTER pAd,
5972 IN UCHAR KeyDataLen,
5973 IN UCHAR GroupKeyIndex,
5976 IN MAC_TABLE_ENTRY *pEntry);
5978 VOID ConstructEapolMsg(
5979 IN PRTMP_ADAPTER pAd,
5980 IN UCHAR PeerAuthMode,
5981 IN UCHAR PeerWepStatus,
5982 IN UCHAR MyGroupKeyWepStatus,
5984 IN UCHAR DefaultKeyIdx,
5985 IN UCHAR *ReplayCounter,
5992 OUT PEAPOL_PACKET pMsg);
5995 IN PRTMP_ADAPTER pAd,
5996 IN UCHAR PeerWepStatus,
5998 OUT PEAPOL_PACKET pMsg);
6000 NDIS_STATUS RTMPSoftDecryptBroadCastData(
6001 IN PRTMP_ADAPTER pAd,
6003 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
6004 IN PCIPHER_KEY pShard_key);
6006 VOID ConstructEapolKeyData(
6007 IN PRTMP_ADAPTER pAd,
6008 IN UCHAR PeerAuthMode,
6009 IN UCHAR PeerWepStatus,
6010 IN UCHAR GroupKeyWepStatus,
6012 IN UCHAR DefaultKeyIdx,
6013 IN BOOLEAN bWPA2Capable,
6018 OUT PEAPOL_PACKET pMsg);
6021 IN PRTMP_ADAPTER pAd,
6027 // function prototype in ap_wpa.c
6030 BOOLEAN APWpaMsgTypeSubst(
6034 MAC_TABLE_ENTRY *PACInquiry(
6035 IN PRTMP_ADAPTER pAd,
6038 BOOLEAN RTMPCheckMcast(
6039 IN PRTMP_ADAPTER pAd,
6040 IN PEID_STRUCT eid_ptr,
6041 IN MAC_TABLE_ENTRY *pEntry);
6043 BOOLEAN RTMPCheckUcast(
6044 IN PRTMP_ADAPTER pAd,
6045 IN PEID_STRUCT eid_ptr,
6046 IN MAC_TABLE_ENTRY *pEntry);
6048 BOOLEAN RTMPCheckAUTH(
6049 IN PRTMP_ADAPTER pAd,
6050 IN PEID_STRUCT eid_ptr,
6051 IN MAC_TABLE_ENTRY *pEntry);
6053 VOID WPAStart4WayHS(
6054 IN PRTMP_ADAPTER pAd,
6055 IN MAC_TABLE_ENTRY *pEntry,
6056 IN ULONG TimeInterval);
6058 VOID WPAStart2WayGroupHS(
6059 IN PRTMP_ADAPTER pAd,
6060 IN MAC_TABLE_ENTRY *pEntry);
6062 VOID APWpaEAPPacketAction(
6063 IN PRTMP_ADAPTER pAd,
6064 IN MLME_QUEUE_ELEM *Elem);
6066 VOID APWpaEAPOLStartAction(
6067 IN PRTMP_ADAPTER pAd,
6068 IN MLME_QUEUE_ELEM *Elem);
6070 VOID APWpaEAPOLLogoffAction(
6071 IN PRTMP_ADAPTER pAd,
6072 IN MLME_QUEUE_ELEM *Elem);
6074 VOID APWpaEAPOLKeyAction(
6075 IN PRTMP_ADAPTER pAd,
6076 IN MLME_QUEUE_ELEM *Elem);
6078 VOID APWpaEAPOLASFAlertAction(
6079 IN PRTMP_ADAPTER pAd,
6080 IN MLME_QUEUE_ELEM *Elem);
6082 VOID HandleCounterMeasure(
6083 IN PRTMP_ADAPTER pAd,
6084 IN MAC_TABLE_ENTRY *pEntry);
6086 VOID PeerPairMsg2Action(
6087 IN PRTMP_ADAPTER pAd,
6088 IN MAC_TABLE_ENTRY *pEntry,
6089 IN MLME_QUEUE_ELEM *Elem);
6091 VOID PeerPairMsg4Action(
6092 IN PRTMP_ADAPTER pAd,
6093 IN MAC_TABLE_ENTRY *pEntry,
6094 IN MLME_QUEUE_ELEM *Elem);
6097 IN PVOID SystemSpecific1,
6098 IN PVOID FunctionContext,
6099 IN PVOID SystemSpecific2,
6100 IN PVOID SystemSpecific3);
6103 IN PVOID SystemSpecific1,
6104 IN PVOID FunctionContext,
6105 IN PVOID SystemSpecific2,
6106 IN PVOID SystemSpecific3);
6108 VOID EnqueueStartForPSKExec(
6109 IN PVOID SystemSpecific1,
6110 IN PVOID FunctionContext,
6111 IN PVOID SystemSpecific2,
6112 IN PVOID SystemSpecific3);
6114 VOID RTMPHandleSTAKey(
6115 IN PRTMP_ADAPTER pAdapter,
6116 IN MAC_TABLE_ENTRY *pEntry,
6117 IN MLME_QUEUE_ELEM *Elem);
6119 VOID PeerGroupMsg2Action(
6120 IN PRTMP_ADAPTER pAd,
6121 IN PMAC_TABLE_ENTRY pEntry,
6125 VOID PairDisAssocAction(
6126 IN PRTMP_ADAPTER pAd,
6127 IN PMAC_TABLE_ENTRY pEntry,
6130 VOID MlmeDeAuthAction(
6131 IN PRTMP_ADAPTER pAd,
6132 IN PMAC_TABLE_ENTRY pEntry,
6135 VOID GREKEYPeriodicExec(
6136 IN PVOID SystemSpecific1,
6137 IN PVOID FunctionContext,
6138 IN PVOID SystemSpecific2,
6139 IN PVOID SystemSpecific3);
6161 IN PRTMP_ADAPTER pAd,
6164 VOID AES_GTK_KEY_WRAP(
6166 IN UCHAR *plaintext,
6168 OUT UCHAR *ciphertext);
6171 IN PRTMP_ADAPTER pAdapter,
6175 VOID APToWirelessSta(
6176 IN PRTMP_ADAPTER pAd,
6177 IN MAC_TABLE_ENTRY *pEntry,
6178 IN PUCHAR pHeader802_3,
6182 IN BOOLEAN bClearFrame);
6184 VOID RTMPAddPMKIDCache(
6185 IN PRTMP_ADAPTER pAd,
6191 INT RTMPSearchPMKIDCache(
6192 IN PRTMP_ADAPTER pAd,
6196 VOID RTMPDeletePMKIDCache(
6197 IN PRTMP_ADAPTER pAd,
6201 VOID RTMPMaintainPMKIDCache(
6202 IN PRTMP_ADAPTER pAd);
6204 VOID RTMPSendTriggerFrame(
6205 IN PRTMP_ADAPTER pAd,
6209 IN BOOLEAN bQosNull);
6212 VOID RTMPFilterCalibration(
6213 IN PRTMP_ADAPTER pAd);
6217 //typedef void (*TIMER_FUNCTION)(unsigned long);
6221 VOID RTMP_SetPeriodicTimer(
6222 IN NDIS_MINIPORT_TIMER *pTimer,
6223 IN unsigned long timeout);
6225 VOID RTMP_OS_Init_Timer(
6226 IN PRTMP_ADAPTER pAd,
6227 IN NDIS_MINIPORT_TIMER *pTimer,
6228 IN TIMER_FUNCTION function,
6231 VOID RTMP_OS_Add_Timer(
6232 IN NDIS_MINIPORT_TIMER *pTimer,
6233 IN unsigned long timeout);
6235 VOID RTMP_OS_Mod_Timer(
6236 IN NDIS_MINIPORT_TIMER *pTimer,
6237 IN unsigned long timeout);
6240 VOID RTMP_OS_Del_Timer(
6241 IN NDIS_MINIPORT_TIMER *pTimer,
6242 OUT BOOLEAN *pCancelled);
6245 VOID RTMP_OS_Release_Packet(
6246 IN PRTMP_ADAPTER pAd,
6247 IN PQUEUE_ENTRY pEntry);
6252 NDIS_STATUS os_alloc_mem(
6253 IN PRTMP_ADAPTER pAd,
6257 NDIS_STATUS os_free_mem(
6258 IN PRTMP_ADAPTER pAd,
6262 void RTMP_AllocateSharedMemory(
6263 IN PRTMP_ADAPTER pAd,
6266 OUT PVOID *VirtualAddress,
6267 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6269 VOID RTMPFreeTxRxRingMemory(
6270 IN PRTMP_ADAPTER pAd);
6272 NDIS_STATUS AdapterBlockAllocateMemory(
6276 void RTMP_AllocateTxDescMemory(
6277 IN PRTMP_ADAPTER pAd,
6281 OUT PVOID *VirtualAddress,
6282 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6284 void RTMP_AllocateFirstTxBuffer(
6285 IN PRTMP_ADAPTER pAd,
6289 OUT PVOID *VirtualAddress,
6290 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6292 void RTMP_AllocateMgmtDescMemory(
6293 IN PRTMP_ADAPTER pAd,
6296 OUT PVOID *VirtualAddress,
6297 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6299 void RTMP_AllocateRxDescMemory(
6300 IN PRTMP_ADAPTER pAd,
6303 OUT PVOID *VirtualAddress,
6304 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6306 PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
6307 IN PRTMP_ADAPTER pAd,
6310 OUT PVOID *VirtualAddress,
6311 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
6313 PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
6314 IN PRTMP_ADAPTER pAd,
6317 OUT PVOID *VirtualAddress);
6319 PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
6320 IN PRTMP_ADAPTER pAd,
6323 void RTMP_QueryPacketInfo(
6324 IN PNDIS_PACKET pPacket,
6325 OUT PACKET_INFO *pPacketInfo,
6326 OUT PUCHAR *pSrcBufVA,
6327 OUT UINT *pSrcBufLen);
6329 void RTMP_QueryNextPacketInfo(
6330 IN PNDIS_PACKET *ppPacket,
6331 OUT PACKET_INFO *pPacketInfo,
6332 OUT PUCHAR *pSrcBufVA,
6333 OUT UINT *pSrcBufLen);
6336 BOOLEAN RTMP_FillTxBlkInfo(
6337 IN RTMP_ADAPTER *pAd,
6341 PRTMP_SCATTER_GATHER_LIST
6342 rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
6345 void announce_802_3_packet(
6346 IN PRTMP_ADAPTER pAd,
6347 IN PNDIS_PACKET pPacket);
6350 UINT BA_Reorder_AMSDU_Annnounce(
6351 IN PRTMP_ADAPTER pAd,
6352 IN PNDIS_PACKET pPacket);
6355 UINT Handle_AMSDU_Packet(
6356 IN PRTMP_ADAPTER pAd,
6359 IN UCHAR FromWhichBSSID);
6362 void convert_802_11_to_802_3_packet(
6363 IN PRTMP_ADAPTER pAd,
6364 IN PNDIS_PACKET pPacket,
6368 IN UCHAR FromWhichBSSID);
6371 PNET_DEV get_netdev_from_bssid(
6372 IN PRTMP_ADAPTER pAd,
6373 IN UCHAR FromWhichBSSID);
6376 PNDIS_PACKET duplicate_pkt(
6377 IN PRTMP_ADAPTER pAd,
6378 IN PUCHAR pHeader802_3,
6382 IN UCHAR FromWhichBSSID);
6385 PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
6386 IN PRTMP_ADAPTER pAd,
6387 IN PNDIS_PACKET pOldPkt);
6389 PNDIS_PACKET duplicate_pkt_with_VLAN(
6390 IN PRTMP_ADAPTER pAd,
6391 IN PUCHAR pHeader802_3,
6395 IN UCHAR FromWhichBSSID);
6397 PNDIS_PACKET duplicate_pkt_with_WPI(
6398 IN PRTMP_ADAPTER pAd,
6399 IN PNDIS_PACKET pPacket,
6400 IN UINT32 ext_head_len,
6401 IN UINT32 ext_tail_len);
6403 UCHAR VLAN_8023_Header_Copy(
6404 IN PRTMP_ADAPTER pAd,
6405 IN PUCHAR pHeader802_3,
6408 IN UCHAR FromWhichBSSID);
6410 #ifdef DOT11_N_SUPPORT
6411 void ba_flush_reordering_timeout_mpdus(
6412 IN PRTMP_ADAPTER pAd,
6413 IN PBA_REC_ENTRY pBAEntry,
6417 VOID BAOriSessionSetUp(
6418 IN PRTMP_ADAPTER pAd,
6419 IN MAC_TABLE_ENTRY *pEntry,
6423 IN BOOLEAN isForced);
6425 VOID BASessionTearDownALL(
6426 IN OUT PRTMP_ADAPTER pAd,
6428 #endif // DOT11_N_SUPPORT //
6430 BOOLEAN OS_Need_Clone_Packet(void);
6433 VOID build_tx_packet(
6434 IN PRTMP_ADAPTER pAd,
6435 IN PNDIS_PACKET pPacket,
6440 VOID BAOriSessionTearDown(
6441 IN OUT PRTMP_ADAPTER pAd,
6444 IN BOOLEAN bPassive,
6445 IN BOOLEAN bForceSend);
6447 VOID BARecSessionTearDown(
6448 IN OUT PRTMP_ADAPTER pAd,
6451 IN BOOLEAN bPassive);
6453 BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
6454 void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
6456 ULONG AutoChBssInsertEntry(
6457 IN PRTMP_ADAPTER pAd,
6464 void AutoChBssTableInit(
6465 IN PRTMP_ADAPTER pAd);
6467 void ChannelInfoInit(
6468 IN PRTMP_ADAPTER pAd);
6470 void AutoChBssTableDestroy(
6471 IN PRTMP_ADAPTER pAd);
6473 void ChannelInfoDestroy(
6474 IN PRTMP_ADAPTER pAd);
6476 UCHAR New_ApAutoSelectChannel(
6477 IN PRTMP_ADAPTER pAd);
6481 VOID InitNINTENDO_TABLE(
6482 IN PRTMP_ADAPTER pAd);
6484 UCHAR CheckNINTENDO_TABLE(
6485 IN PRTMP_ADAPTER pAd,
6490 UCHAR DelNINTENDO_ENTRY(
6491 IN PRTMP_ADAPTER pAd,
6494 VOID RTMPIoctlNintendoCapable(
6495 IN PRTMP_ADAPTER pAd,
6496 IN struct iwreq *wrq);
6498 VOID RTMPIoctlNintendoGetTable(
6499 IN PRTMP_ADAPTER pAd,
6500 IN struct iwreq *wrq);
6502 VOID RTMPIoctlNintendoSetTable(
6503 IN PRTMP_ADAPTER pAd,
6504 IN struct iwreq *wrq);
6506 #endif // NINTENDO_AP //
6508 BOOLEAN rtstrmactohex(
6512 BOOLEAN rtstrcasecmp(
6516 char *rtstrstruncasecmp(
6522 IN const char * s2);
6526 IN const char * ct);
6530 unsigned int *addr);
6532 ////////// common ioctl functions //////////
6533 INT Set_DriverVersion_Proc(
6534 IN PRTMP_ADAPTER pAd,
6537 INT Set_CountryRegion_Proc(
6538 IN PRTMP_ADAPTER pAd,
6541 INT Set_CountryRegionABand_Proc(
6542 IN PRTMP_ADAPTER pAd,
6545 INT Set_WirelessMode_Proc(
6546 IN PRTMP_ADAPTER pAd,
6549 INT Set_Channel_Proc(
6550 IN PRTMP_ADAPTER pAd,
6553 INT Set_ShortSlot_Proc(
6554 IN PRTMP_ADAPTER pAd,
6557 INT Set_TxPower_Proc(
6558 IN PRTMP_ADAPTER pAd,
6561 INT Set_BGProtection_Proc(
6562 IN PRTMP_ADAPTER pAd,
6565 INT Set_TxPreamble_Proc(
6566 IN PRTMP_ADAPTER pAd,
6569 INT Set_RTSThreshold_Proc(
6570 IN PRTMP_ADAPTER pAd,
6573 INT Set_FragThreshold_Proc(
6574 IN PRTMP_ADAPTER pAd,
6577 INT Set_TxBurst_Proc(
6578 IN PRTMP_ADAPTER pAd,
6581 #ifdef AGGREGATION_SUPPORT
6582 INT Set_PktAggregate_Proc(
6583 IN PRTMP_ADAPTER pAd,
6587 INT Set_IEEE80211H_Proc(
6588 IN PRTMP_ADAPTER pAd,
6593 IN PRTMP_ADAPTER pAd,
6597 INT Show_DescInfo_Proc(
6598 IN PRTMP_ADAPTER pAd,
6601 INT Set_ResetStatCounter_Proc(
6602 IN PRTMP_ADAPTER pAd,
6605 #ifdef DOT11_N_SUPPORT
6606 INT Set_BASetup_Proc(
6607 IN PRTMP_ADAPTER pAd,
6610 INT Set_BADecline_Proc(
6611 IN PRTMP_ADAPTER pAd,
6614 INT Set_BAOriTearDown_Proc(
6615 IN PRTMP_ADAPTER pAd,
6618 INT Set_BARecTearDown_Proc(
6619 IN PRTMP_ADAPTER pAd,
6623 IN PRTMP_ADAPTER pAd,
6627 IN PRTMP_ADAPTER pAd,
6631 IN PRTMP_ADAPTER pAd,
6634 INT Set_HtOpMode_Proc(
6635 IN PRTMP_ADAPTER pAd,
6638 INT Set_HtStbc_Proc(
6639 IN PRTMP_ADAPTER pAd,
6643 IN PRTMP_ADAPTER pAd,
6646 INT Set_HtExtcha_Proc(
6647 IN PRTMP_ADAPTER pAd,
6650 INT Set_HtMpduDensity_Proc(
6651 IN PRTMP_ADAPTER pAd,
6654 INT Set_HtBaWinSize_Proc(
6655 IN PRTMP_ADAPTER pAd,
6659 IN PRTMP_ADAPTER pAd,
6662 INT Set_HtLinkAdapt_Proc(
6663 IN PRTMP_ADAPTER pAd,
6666 INT Set_HtAmsdu_Proc(
6667 IN PRTMP_ADAPTER pAd,
6670 INT Set_HtAutoBa_Proc(
6671 IN PRTMP_ADAPTER pAd,
6674 INT Set_HtProtect_Proc(
6675 IN PRTMP_ADAPTER pAd,
6678 INT Set_HtMimoPs_Proc(
6679 IN PRTMP_ADAPTER pAd,
6683 INT Set_ForceShortGI_Proc(
6684 IN PRTMP_ADAPTER pAd,
6687 INT Set_ForceGF_Proc(
6688 IN PRTMP_ADAPTER pAd,
6692 IN PRTMP_ADAPTER pAd);
6694 INT Set_SendPSMPAction_Proc(
6695 IN PRTMP_ADAPTER pAd,
6698 INT Set_HtMIMOPSmode_Proc(
6699 IN PRTMP_ADAPTER pAd,
6703 INT Set_HtTxBASize_Proc(
6704 IN PRTMP_ADAPTER pAd,
6706 #endif // DOT11_N_SUPPORT //
6710 #ifdef CONFIG_STA_SUPPORT
6712 VOID RTMPSendDLSTearDownFrame(
6713 IN PRTMP_ADAPTER pAd,
6716 #ifdef DOT11_N_SUPPORT
6719 IN PRTMP_ADAPTER pAd,
6720 OUT PQUERYBA_TABLE pBAT);
6721 #endif // DOT11_N_SUPPORT //
6723 #ifdef WPA_SUPPLICANT_SUPPORT
6724 INT WpaCheckEapCode(
6725 IN PRTMP_ADAPTER pAd,
6730 VOID WpaSendMicFailureToWpaSupplicant(
6731 IN PRTMP_ADAPTER pAd,
6732 IN BOOLEAN bUnicast);
6734 VOID SendAssocIEsToWpaSupplicant(
6735 IN PRTMP_ADAPTER pAd);
6736 #endif // WPA_SUPPLICANT_SUPPORT //
6738 #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT
6739 int wext_notify_event_assoc(
6740 IN RTMP_ADAPTER *pAd);
6741 #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //
6743 #endif // CONFIG_STA_SUPPORT //
6747 #ifdef DOT11_N_SUPPORT
6748 VOID Handle_BSS_Width_Trigger_Events(
6749 IN PRTMP_ADAPTER pAd);
6751 void build_ext_channel_switch_ie(
6752 IN PRTMP_ADAPTER pAd,
6753 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
6754 #endif // DOT11_N_SUPPORT //
6757 BOOLEAN APRxDoneInterruptHandle(
6758 IN PRTMP_ADAPTER pAd);
6760 BOOLEAN STARxDoneInterruptHandle(
6761 IN PRTMP_ADAPTER pAd,
6764 #ifdef DOT11_N_SUPPORT
6765 // AMPDU packet indication
6766 VOID Indicate_AMPDU_Packet(
6767 IN PRTMP_ADAPTER pAd,
6769 IN UCHAR FromWhichBSSID);
6771 // AMSDU packet indication
6772 VOID Indicate_AMSDU_Packet(
6773 IN PRTMP_ADAPTER pAd,
6775 IN UCHAR FromWhichBSSID);
6776 #endif // DOT11_N_SUPPORT //
6778 // Normal legacy Rx packet indication
6779 VOID Indicate_Legacy_Packet(
6780 IN PRTMP_ADAPTER pAd,
6782 IN UCHAR FromWhichBSSID);
6784 VOID Indicate_EAPOL_Packet(
6785 IN PRTMP_ADAPTER pAd,
6787 IN UCHAR FromWhichBSSID);
6789 void update_os_packet_info(
6790 IN PRTMP_ADAPTER pAd,
6792 IN UCHAR FromWhichBSSID);
6794 void wlan_802_11_to_802_3_packet(
6795 IN PRTMP_ADAPTER pAd,
6797 IN PUCHAR pHeader802_3,
6798 IN UCHAR FromWhichBSSID);
6800 UINT deaggregate_AMSDU_announce(
6801 IN PRTMP_ADAPTER pAd,
6802 PNDIS_PACKET pPacket,
6807 #ifdef CONFIG_STA_SUPPORT
6808 // remove LLC and get 802_3 Header
6809 #define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
6811 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
6813 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
6815 _pDA = _pRxBlk->pHeader->Addr3; \
6816 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
6820 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
6822 _pDA = _pRxBlk->pHeader->Addr1; \
6823 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
6824 _pSA = _pRxBlk->pHeader->Addr2; \
6826 _pSA = _pRxBlk->pHeader->Addr3; \
6830 _pDA = _pRxBlk->pHeader->Addr1; \
6831 _pSA = _pRxBlk->pHeader->Addr2; \
6835 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
6836 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
6838 #endif // CONFIG_STA_SUPPORT //
6841 BOOLEAN APFowardWirelessStaToWirelessSta(
6842 IN PRTMP_ADAPTER pAd,
6843 IN PNDIS_PACKET pPacket,
6844 IN ULONG FromWhichBSSID);
6846 VOID Announce_or_Forward_802_3_Packet(
6847 IN PRTMP_ADAPTER pAd,
6848 IN PNDIS_PACKET pPacket,
6849 IN UCHAR FromWhichBSSID);
6851 VOID Sta_Announce_or_Forward_802_3_Packet(
6852 IN PRTMP_ADAPTER pAd,
6853 IN PNDIS_PACKET pPacket,
6854 IN UCHAR FromWhichBSSID);
6857 #ifdef CONFIG_STA_SUPPORT
6858 #define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
6859 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
6860 //announce_802_3_packet(_pAd, _pPacket);
6861 #endif // CONFIG_STA_SUPPORT //
6864 PNDIS_PACKET DuplicatePacket(
6865 IN PRTMP_ADAPTER pAd,
6866 IN PNDIS_PACKET pPacket,
6867 IN UCHAR FromWhichBSSID);
6870 PNDIS_PACKET ClonePacket(
6871 IN PRTMP_ADAPTER pAd,
6872 IN PNDIS_PACKET pPacket,
6877 // Normal, AMPDU or AMSDU
6878 VOID CmmRxnonRalinkFrameIndicate(
6879 IN PRTMP_ADAPTER pAd,
6881 IN UCHAR FromWhichBSSID);
6883 VOID CmmRxRalinkFrameIndicate(
6884 IN PRTMP_ADAPTER pAd,
6885 IN MAC_TABLE_ENTRY *pEntry,
6887 IN UCHAR FromWhichBSSID);
6889 VOID Update_Rssi_Sample(
6890 IN PRTMP_ADAPTER pAd,
6891 IN RSSI_SAMPLE *pRssi,
6892 IN PRXWI_STRUC pRxWI);
6894 PNDIS_PACKET GetPacketFromRxRing(
6895 IN PRTMP_ADAPTER pAd,
6896 OUT PRT28XX_RXD_STRUC pSaveRxD,
6897 OUT BOOLEAN *pbReschedule,
6898 IN OUT UINT32 *pRxPending);
6900 PNDIS_PACKET RTMPDeFragmentDataFrame(
6901 IN PRTMP_ADAPTER pAd,
6904 ////////////////////////////////////////
6912 typedef struct _DefaultKeyIdxValue
6916 } DefaultKeyIdxValue, *PDefaultKeyIdxValue;
6920 #ifdef CONFIG_STA_SUPPORT
6922 DIDmsg_lnxind_wlansniffrm = 0x00000044,
6923 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
6924 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
6925 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
6926 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
6927 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
6928 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
6929 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
6930 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
6931 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
6932 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
6935 P80211ENUM_msgitem_status_no_value = 0x00
6938 P80211ENUM_truth_false = 0x00,
6939 P80211ENUM_truth_true = 0x01
6942 /* Definition from madwifi */
6948 } p80211item_uint32_t;
6953 #define WLAN_DEVNAMELEN_MAX 16
6954 UINT8 devname[WLAN_DEVNAMELEN_MAX];
6955 p80211item_uint32_t hosttime;
6956 p80211item_uint32_t mactime;
6957 p80211item_uint32_t channel;
6958 p80211item_uint32_t rssi;
6959 p80211item_uint32_t sq;
6960 p80211item_uint32_t signal;
6961 p80211item_uint32_t noise;
6962 p80211item_uint32_t rate;
6963 p80211item_uint32_t istx;
6964 p80211item_uint32_t frmlen;
6965 } wlan_ng_prism2_header;
6967 /* The radio capture header precedes the 802.11 header. */
6968 typedef struct PACKED _ieee80211_radiotap_header {
6969 UINT8 it_version; /* Version 0. Only increases
6970 * for drastic changes,
6971 * introduction of compatible
6972 * new fields does not count.
6975 UINT16 it_len; /* length of the whole
6976 * header in bytes, including
6977 * it_version, it_pad,
6978 * it_len, and data fields.
6980 UINT32 it_present; /* A bitmap telling which
6981 * fields are present. Set bit 31
6982 * (0x80000000) to extend the
6983 * bitmap by another 32 bits.
6984 * Additional extensions are made
6985 * by setting bit 31.
6987 }ieee80211_radiotap_header ;
6989 enum ieee80211_radiotap_type {
6990 IEEE80211_RADIOTAP_TSFT = 0,
6991 IEEE80211_RADIOTAP_FLAGS = 1,
6992 IEEE80211_RADIOTAP_RATE = 2,
6993 IEEE80211_RADIOTAP_CHANNEL = 3,
6994 IEEE80211_RADIOTAP_FHSS = 4,
6995 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
6996 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
6997 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
6998 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
6999 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
7000 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
7001 IEEE80211_RADIOTAP_ANTENNA = 11,
7002 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
7003 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
7006 #define WLAN_RADIOTAP_PRESENT ( \
7007 (1 << IEEE80211_RADIOTAP_TSFT) | \
7008 (1 << IEEE80211_RADIOTAP_FLAGS) | \
7009 (1 << IEEE80211_RADIOTAP_RATE) | \
7012 typedef struct _wlan_radiotap_header {
7013 ieee80211_radiotap_header wt_ihdr;
7017 } wlan_radiotap_header;
7018 /* Definition from madwifi */
7020 void send_monitor_packets(
7021 IN PRTMP_ADAPTER pAd,
7024 #if WIRELESS_EXT >= 12
7025 // This function will be called when query /proc
7026 struct iw_statistics *rt28xx_get_wireless_stats(
7027 IN struct net_device *net_dev);
7030 VOID RTMPSetDesiredRates(
7031 IN PRTMP_ADAPTER pAdapter,
7033 #endif // CONFIG_STA_SUPPORT //
7035 INT Set_FixedTxMode_Proc(
7036 IN PRTMP_ADAPTER pAd,
7039 #ifdef CONFIG_APSTA_MIXED_SUPPORT
7040 INT Set_OpMode_Proc(
7041 IN PRTMP_ADAPTER pAd,
7043 #endif // CONFIG_APSTA_MIXED_SUPPORT //
7045 static inline char* GetPhyMode(
7055 #ifdef DOT11_N_SUPPORT
7059 case MODE_HTGREENFIELD:
7061 #endif // DOT11_N_SUPPORT //
7068 static inline char* GetBW(
7078 #ifdef DOT11_N_SUPPORT
7081 #endif // DOT11_N_SUPPORT //
7088 VOID RT28xxThreadTerminate(
7089 IN RTMP_ADAPTER *pAd);
7091 BOOLEAN RT28XXChipsetCheck(
7094 BOOLEAN RT28XXNetDevInit(
7096 IN struct net_device *net_dev,
7097 IN RTMP_ADAPTER *pAd);
7099 BOOLEAN RT28XXProbePostConfig(
7101 IN RTMP_ADAPTER *pAd,
7104 VOID RT28XXDMADisable(
7105 IN RTMP_ADAPTER *pAd);
7107 VOID RT28XXDMAEnable(
7108 IN RTMP_ADAPTER *pAd);
7110 VOID RT28xx_UpdateBeaconToAsic(
7111 IN RTMP_ADAPTER * pAd,
7114 IN ULONG UpdatePos);
7117 IN struct net_device *net_dev,
7118 IN OUT struct ifreq *rq,
7122 #ifdef CONFIG_STA_SUPPORT
7123 INT rt28xx_sta_ioctl(
7124 IN struct net_device *net_dev,
7125 IN OUT struct ifreq *rq,
7127 #endif // CONFIG_STA_SUPPORT //
7129 BOOLEAN RT28XXSecurityKeyAdd(
7130 IN PRTMP_ADAPTER pAd,
7133 IN MAC_TABLE_ENTRY *pEntry);
7135 ////////////////////////////////////////
7136 PNDIS_PACKET GetPacketFromRxRing(
7137 IN PRTMP_ADAPTER pAd,
7138 OUT PRT28XX_RXD_STRUC pSaveRxD,
7139 OUT BOOLEAN *pbReschedule,
7140 IN OUT UINT32 *pRxPending);
7143 void kill_thread_task(PRTMP_ADAPTER pAd);
7145 void tbtt_tasklet(unsigned long data);
7148 VOID AsicTurnOffRFClk(
7149 IN PRTMP_ADAPTER pAd,
7152 VOID AsicTurnOnRFClk(
7153 IN PRTMP_ADAPTER pAd,
7157 NTSTATUS RT30xxWriteRFRegister(
7158 IN PRTMP_ADAPTER pAd,
7162 NTSTATUS RT30xxReadRFRegister(
7163 IN PRTMP_ADAPTER pAd,
7167 //2008/09/11:KH add to support efuse<--
7168 UCHAR eFuseReadRegisters(
7169 IN PRTMP_ADAPTER pAd,
7174 VOID eFuseReadPhysical(
7175 IN PRTMP_ADAPTER pAd,
7176 IN PUSHORT lpInBuffer,
7177 IN ULONG nInBufferSize,
7178 OUT PUSHORT lpOutBuffer,
7179 IN ULONG nOutBufferSize
7183 IN PRTMP_ADAPTER pAd,
7188 VOID eFusePhysicalWriteRegisters(
7189 IN PRTMP_ADAPTER pAd,
7194 NTSTATUS eFuseWriteRegisters(
7195 IN PRTMP_ADAPTER pAd,
7200 VOID eFuseWritePhysical(
7201 IN PRTMP_ADAPTER pAd,
7203 ULONG nInBufferSize,
7205 ULONG nOutBufferSize
7208 NTSTATUS eFuseWrite(
7209 IN PRTMP_ADAPTER pAd,
7214 INT set_eFuseGetFreeBlockCount_Proc(
7215 IN PRTMP_ADAPTER pAd,
7218 INT set_eFusedump_Proc(
7219 IN PRTMP_ADAPTER pAd,
7222 INT set_eFuseLoadFromBin_Proc(
7223 IN PRTMP_ADAPTER pAd,
7226 NTSTATUS eFuseWriteRegistersFromBin(
7227 IN PRTMP_ADAPTER pAd,
7232 VOID eFusePhysicalReadRegisters(
7233 IN PRTMP_ADAPTER pAd,
7238 NDIS_STATUS NICLoadEEPROM(
7239 IN PRTMP_ADAPTER pAd);
7241 BOOLEAN bNeedLoadEEPROM(
7242 IN PRTMP_ADAPTER pAd);
7243 //2008/09/11:KH add to support efuse-->
7247 // add by johnli, RF power sequence setup
7248 VOID RT30xxLoadRFNormalModeSetup(
7249 IN PRTMP_ADAPTER pAd);
7251 VOID RT30xxLoadRFSleepModeSetup(
7252 IN PRTMP_ADAPTER pAd);
7254 VOID RT30xxReverseRFSleepModeSetup(
7255 IN PRTMP_ADAPTER pAd);
7261 // Function Prototype in rtusb_bulk.c
7263 VOID RTUSBInitTxDesc(
7264 IN PRTMP_ADAPTER pAd,
7265 IN PTX_CONTEXT pTxContext,
7266 IN UCHAR BulkOutPipeId,
7267 IN usb_complete_t Func);
7269 VOID RTUSBInitHTTxDesc(
7270 IN PRTMP_ADAPTER pAd,
7271 IN PHT_TX_CONTEXT pTxContext,
7272 IN UCHAR BulkOutPipeId,
7273 IN ULONG BulkOutSize,
7274 IN usb_complete_t Func);
7276 VOID RTUSBInitRxDesc(
7277 IN PRTMP_ADAPTER pAd,
7278 IN PRX_CONTEXT pRxContext);
7280 VOID RTUSBCleanUpDataBulkOutQueue(
7281 IN PRTMP_ADAPTER pAd);
7283 VOID RTUSBCancelPendingBulkOutIRP(
7284 IN PRTMP_ADAPTER pAd);
7286 VOID RTUSBBulkOutDataPacket(
7287 IN PRTMP_ADAPTER pAd,
7288 IN UCHAR BulkOutPipeId,
7291 VOID RTUSBBulkOutNullFrame(
7292 IN PRTMP_ADAPTER pAd);
7294 VOID RTUSBBulkOutRTSFrame(
7295 IN PRTMP_ADAPTER pAd);
7297 VOID RTUSBCancelPendingBulkInIRP(
7298 IN PRTMP_ADAPTER pAd);
7300 VOID RTUSBCancelPendingIRPs(
7301 IN PRTMP_ADAPTER pAd);
7303 VOID RTUSBBulkOutMLMEPacket(
7304 IN PRTMP_ADAPTER pAd,
7307 VOID RTUSBBulkOutPsPoll(
7308 IN PRTMP_ADAPTER pAd);
7310 VOID RTUSBCleanUpMLMEBulkOutQueue(
7311 IN PRTMP_ADAPTER pAd);
7313 VOID RTUSBKickBulkOut(
7314 IN PRTMP_ADAPTER pAd);
7316 VOID RTUSBBulkReceive(
7317 IN PRTMP_ADAPTER pAd);
7320 IN RTMP_ADAPTER *pAd);
7322 VOID RTUSBInitRxDesc(
7323 IN PRTMP_ADAPTER pAd,
7324 IN PRX_CONTEXT pRxContext);
7326 VOID RTUSBBulkRxHandle(
7327 IN unsigned long data);
7330 // Function Prototype in rtusb_io.c
7332 NTSTATUS RTUSBMultiRead(
7333 IN PRTMP_ADAPTER pAd,
7338 NTSTATUS RTUSBMultiWrite(
7339 IN PRTMP_ADAPTER pAd,
7344 NTSTATUS RTUSBMultiWrite_OneByte(
7345 IN PRTMP_ADAPTER pAd,
7349 NTSTATUS RTUSBReadBBPRegister(
7350 IN PRTMP_ADAPTER pAd,
7354 NTSTATUS RTUSBWriteBBPRegister(
7355 IN PRTMP_ADAPTER pAd,
7359 NTSTATUS RTUSBWriteRFRegister(
7360 IN PRTMP_ADAPTER pAd,
7363 NTSTATUS RTUSB_VendorRequest(
7364 IN PRTMP_ADAPTER pAd,
7365 IN UINT32 TransferFlags,
7366 IN UCHAR ReservedBits,
7370 IN PVOID TransferBuffer,
7371 IN UINT32 TransferBufferLength);
7373 NTSTATUS RTUSBReadEEPROM(
7374 IN PRTMP_ADAPTER pAd,
7379 NTSTATUS RTUSBWriteEEPROM(
7380 IN PRTMP_ADAPTER pAd,
7385 VOID RTUSBPutToSleep(
7386 IN PRTMP_ADAPTER pAd);
7388 NTSTATUS RTUSBWakeUp(
7389 IN PRTMP_ADAPTER pAd);
7391 VOID RTUSBInitializeCmdQ(
7394 NDIS_STATUS RTUSBEnqueueCmdFromNdis(
7395 IN PRTMP_ADAPTER pAd,
7397 IN BOOLEAN SetInformation,
7398 IN PVOID pInformationBuffer,
7399 IN UINT32 InformationBufferLength);
7401 NDIS_STATUS RTUSBEnqueueInternalCmd(
7402 IN PRTMP_ADAPTER pAd,
7404 IN PVOID pInformationBuffer,
7405 IN UINT32 InformationBufferLength);
7407 VOID RTUSBDequeueCmd(
7409 OUT PCmdQElmt *pcmdqelmt);
7412 IN OUT PVOID Context);
7415 IN OUT PVOID Context);
7417 RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
7418 IN RTMP_ADAPTER *pAd,
7419 IN RALINK_TIMER_STRUCT *pTimer);
7421 BOOLEAN RT2870_TimerQ_Remove(
7422 IN RTMP_ADAPTER *pAd,
7423 IN RALINK_TIMER_STRUCT *pTimer);
7425 void RT2870_TimerQ_Exit(
7426 IN RTMP_ADAPTER *pAd);
7428 void RT2870_TimerQ_Init(
7429 IN RTMP_ADAPTER *pAd);
7431 VOID RT2870_BssBeaconExit(
7432 IN RTMP_ADAPTER *pAd);
7434 VOID RT2870_BssBeaconStop(
7435 IN RTMP_ADAPTER *pAd);
7437 VOID RT2870_BssBeaconStart(
7438 IN RTMP_ADAPTER * pAd);
7440 VOID RT2870_BssBeaconInit(
7441 IN RTMP_ADAPTER *pAd);
7443 VOID RT2870_WatchDog(
7444 IN RTMP_ADAPTER *pAd);
7446 NTSTATUS RTUSBWriteMACRegister(
7447 IN PRTMP_ADAPTER pAd,
7451 NTSTATUS RTUSBReadMACRegister(
7452 IN PRTMP_ADAPTER pAd,
7454 OUT PUINT32 pValue);
7456 NTSTATUS RTUSBSingleWrite(
7457 IN RTMP_ADAPTER *pAd,
7461 NTSTATUS RTUSBFirmwareRun(
7462 IN PRTMP_ADAPTER pAd);
7464 NTSTATUS RTUSBFirmwareWrite(
7465 IN PRTMP_ADAPTER pAd,
7469 NTSTATUS RTUSBFirmwareOpmode(
7470 IN PRTMP_ADAPTER pAd,
7471 OUT PUINT32 pValue);
7473 NTSTATUS RTUSBVenderReset(
7474 IN PRTMP_ADAPTER pAd);
7476 NDIS_STATUS RTUSBSetHardWareRegister(
7477 IN PRTMP_ADAPTER pAdapter,
7480 NDIS_STATUS RTUSBQueryHardWareRegister(
7481 IN PRTMP_ADAPTER pAdapter,
7485 IN PRTMP_ADAPTER pAd);
7488 NDIS_STATUS CreateThreads(
7489 IN struct net_device *net_dev );
7492 VOID MacTableInitialize(
7493 IN PRTMP_ADAPTER pAd);
7496 IN PRTMP_ADAPTER pAd,
7499 NDIS_STATUS RTMPWPAAddKeyProc(
7500 IN PRTMP_ADAPTER pAd,
7503 VOID AsicRxAntEvalAction(
7504 IN PRTMP_ADAPTER pAd);
7507 IN PRTMP_ADAPTER pAd,
7508 IN PUCHAR pHeader802_3,
7512 OUT PNDIS_PACKET *ppPacket);
7514 UINT deaggregate_AMSDU_announce(
7515 IN PRTMP_ADAPTER pAd,
7516 PNDIS_PACKET pPacket,
7520 NDIS_STATUS RTMPCheckRxError(
7521 IN PRTMP_ADAPTER pAd,
7522 IN PHEADER_802_11 pHeader,
7523 IN PRXWI_STRUC pRxWI,
7524 IN PRT28XX_RXD_STRUC pRxINFO);
7527 VOID RTUSBMlmeHardTransmit(
7528 IN PRTMP_ADAPTER pAd,
7529 IN PMGMT_STRUC pMgmt);
7535 // Function Prototype in rtusb_data.c
7537 NDIS_STATUS RTUSBFreeDescriptorRequest(
7538 IN PRTMP_ADAPTER pAd,
7539 IN UCHAR BulkOutPipeId,
7540 IN UINT32 NumberRequired);
7543 BOOLEAN RTUSBNeedQueueBackForAgg(
7544 IN RTMP_ADAPTER *pAd,
7545 IN UCHAR BulkOutPipeId);
7548 VOID RTMPWriteTxInfo(
7549 IN PRTMP_ADAPTER pAd,
7550 IN PTXINFO_STRUC pTxInfo,
7551 IN USHORT USBDMApktLen,
7558 // Function Prototype in cmm_data_2870.c
7560 USHORT RtmpUSB_WriteSubTxResource(
7561 IN PRTMP_ADAPTER pAd,
7564 OUT USHORT *FreeNumber);
7566 USHORT RtmpUSB_WriteSingleTxResource(
7567 IN PRTMP_ADAPTER pAd,
7570 OUT USHORT *FreeNumber);
7572 USHORT RtmpUSB_WriteFragTxResource(
7573 IN PRTMP_ADAPTER pAd,
7576 OUT USHORT *FreeNumber);
7578 USHORT RtmpUSB_WriteMultiTxResource(
7579 IN PRTMP_ADAPTER pAd,
7582 OUT USHORT *FreeNumber);
7584 VOID RtmpUSB_FinalWriteTxResource(
7585 IN PRTMP_ADAPTER pAd,
7587 IN USHORT totalMPDUSize,
7590 VOID RtmpUSBDataLastTxIdx(
7591 IN PRTMP_ADAPTER pAd,
7595 VOID RtmpUSBDataKickOut(
7596 IN PRTMP_ADAPTER pAd,
7601 int RtmpUSBMgmtKickOut(
7602 IN RTMP_ADAPTER *pAd,
7604 IN PNDIS_PACKET pPacket,
7605 IN PUCHAR pSrcBufVA,
7608 VOID RtmpUSBNullFrameKickOut(
7609 IN RTMP_ADAPTER *pAd,
7611 IN UCHAR *pNullFrame,
7612 IN UINT32 frameLen);
7614 VOID RT28xxUsbStaAsicForceWakeup(
7615 IN PRTMP_ADAPTER pAd,
7616 IN BOOLEAN bFromTx);
7618 VOID RT28xxUsbStaAsicSleepThenAutoWakeup(
7619 IN PRTMP_ADAPTER pAd,
7620 IN USHORT TbttNumToNextWakeUp);
7622 VOID RT28xxUsbMlmeRadioOn(
7623 IN PRTMP_ADAPTER pAd);
7625 VOID RT28xxUsbMlmeRadioOFF(
7626 IN PRTMP_ADAPTER pAd);
7629 ////////////////////////////////////////
7632 IN RTMP_ADAPTER *pAd);
7634 UINT32 QBSS_LoadElementAppend(
7635 IN RTMP_ADAPTER *pAd,
7638 VOID QBSS_LoadUpdate(
7639 IN RTMP_ADAPTER *pAd);
7641 ///////////////////////////////////////
7642 INT RTMPShowCfgValue(
7643 IN PRTMP_ADAPTER pAd,
7647 PCHAR RTMPGetRalinkAuthModeStr(
7648 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
7650 PCHAR RTMPGetRalinkEncryModeStr(
7651 IN USHORT encryMode);
7652 //////////////////////////////////////
7654 #ifdef CONFIG_STA_SUPPORT
7655 VOID AsicStaBbpTuning(
7656 IN PRTMP_ADAPTER pAd);
7658 BOOLEAN StaAddMacTableEntry(
7659 IN PRTMP_ADAPTER pAd,
7660 IN PMAC_TABLE_ENTRY pEntry,
7661 IN UCHAR MaxSupportedRateIn500Kbps,
7662 IN HT_CAPABILITY_IE *pHtCapability,
7663 IN UCHAR HtCapabilityLen,
7664 IN USHORT CapabilityInfo);
7665 #endif // CONFIG_STA_SUPPORT //
7667 void RTMP_IndicateMediaState(
7668 IN PRTMP_ADAPTER pAd);
7670 VOID ReSyncBeaconTime(
7671 IN PRTMP_ADAPTER pAd);
7673 VOID RTMPSetAGCInitValue(
7674 IN PRTMP_ADAPTER pAd,
7675 IN UCHAR BandWidth);
7677 int rt28xx_close(IN PNET_DEV dev);
7678 int rt28xx_open(IN PNET_DEV dev);
7680 __inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
7682 extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7683 extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
7685 if (VIRTUAL_IF_NUM(pAd) == 0)
7687 if (rt28xx_open(pAd->net_dev) != 0)
7693 VIRTUAL_IF_INC(pAd);
7697 __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
7699 VIRTUAL_IF_DEC(pAd);
7700 if (VIRTUAL_IF_NUM(pAd) == 0)
7701 rt28xx_close(pAd->net_dev);
7706 #endif // __RTMP_H__