Staging: rt{28,30}70: merge rt{28,30}70/sta/*.[ch]
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / drivers / staging / rt2860 / rtmp.h
CommitLineData
91980990
GKH
1/*
2 *************************************************************************
3 * Ralink Tech Inc.
4 * 5F., No.36, Taiyuan St., Jhubei City,
5 * Hsinchu County 302,
6 * Taiwan, R.O.C.
7 *
8 * (c) Copyright 2002-2007, Ralink Technology, Inc.
9 *
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. *
14 * *
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. *
19 * *
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. *
24 * *
25 *************************************************************************
26
27 Module Name:
28 rtmp.h
29
30 Abstract:
31 Miniport generic portion header file
32
33 Revision History:
34 Who When What
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
39*/
40#ifndef __RTMP_H__
41#define __RTMP_H__
42
43#include "link_list.h"
44#include "spectrum_def.h"
45
91980990 46#include "aironet.h"
91980990
GKH
47
48//#define DBG_DIAGNOSE 1
49
91980990
GKH
50#define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
51#define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
52#define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
53
54
55
56//
57// NDIS Version definitions
58//
59#ifdef NDIS50_MINIPORT
60#define RTMP_NDIS_MAJOR_VERSION 5
61#define RTMP_NDIS_MINOR_VERSION 0
62#endif
63
64#ifdef NDIS51_MINIPORT
65#define RTMP_NDIS_MAJOR_VERSION 5
66#define RTMP_NDIS_MINOR_VERSION 1
67#endif
68
69extern char NIC_VENDOR_DESC[];
70extern int NIC_VENDOR_DESC_LEN;
71
72extern unsigned char SNAP_AIRONET[];
73extern unsigned char CipherSuiteCiscoCCKM[];
74extern unsigned char CipherSuiteCiscoCCKMLen;
75extern unsigned char CipherSuiteCiscoCCKM24[];
76extern unsigned char CipherSuiteCiscoCCKM24Len;
77extern unsigned char CipherSuiteCCXTkip[];
78extern unsigned char CipherSuiteCCXTkipLen;
79extern unsigned char CISCO_OUI[];
80extern UCHAR BaSizeArray[4];
81
82extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
83extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
84extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
85extern ULONG BIT32[32];
86extern UCHAR BIT8[8];
87extern char* CipherName[];
88extern char* MCSToMbps[];
89extern UCHAR RxwiMCSToOfdmRate[12];
90extern UCHAR SNAP_802_1H[6];
91extern UCHAR SNAP_BRIDGE_TUNNEL[6];
92extern UCHAR SNAP_AIRONET[8];
93extern UCHAR CKIP_LLC_SNAP[8];
94extern UCHAR EAPOL_LLC_SNAP[8];
95extern UCHAR EAPOL[2];
96extern UCHAR IPX[2];
97extern UCHAR APPLE_TALK[2];
98extern UCHAR RateIdToPlcpSignal[12]; // see IEEE802.11a-1999 p.14
99extern UCHAR OfdmRateToRxwiMCS[];
100extern UCHAR OfdmSignalToRateId[16] ;
101extern UCHAR default_cwmin[4];
102extern UCHAR default_cwmax[4];
103extern UCHAR default_sta_aifsn[4];
104extern UCHAR MapUserPriorityToAccessCategory[8];
105
106extern USHORT RateUpPER[];
107extern USHORT RateDownPER[];
108extern UCHAR Phy11BNextRateDownward[];
109extern UCHAR Phy11BNextRateUpward[];
110extern UCHAR Phy11BGNextRateDownward[];
111extern UCHAR Phy11BGNextRateUpward[];
112extern UCHAR Phy11ANextRateDownward[];
113extern UCHAR Phy11ANextRateUpward[];
114extern CHAR RssiSafeLevelForTxRate[];
115extern UCHAR RateIdToMbps[];
116extern USHORT RateIdTo500Kbps[];
117
118extern UCHAR CipherSuiteWpaNoneTkip[];
119extern UCHAR CipherSuiteWpaNoneTkipLen;
120
121extern UCHAR CipherSuiteWpaNoneAes[];
122extern UCHAR CipherSuiteWpaNoneAesLen;
123
124extern UCHAR SsidIe;
125extern UCHAR SupRateIe;
126extern UCHAR ExtRateIe;
127
91980990
GKH
128extern UCHAR HtCapIe;
129extern UCHAR AddHtInfoIe;
130extern UCHAR NewExtChanIe;
91980990
GKH
131
132extern UCHAR ErpIe;
133extern UCHAR DsIe;
134extern UCHAR TimIe;
135extern UCHAR WpaIe;
136extern UCHAR Wpa2Ie;
137extern UCHAR IbssIe;
138extern UCHAR Ccx2Ie;
139
140extern UCHAR WPA_OUI[];
141extern UCHAR RSN_OUI[];
142extern UCHAR WME_INFO_ELEM[];
143extern UCHAR WME_PARM_ELEM[];
144extern UCHAR Ccx2QosInfo[];
145extern UCHAR Ccx2IeInfo[];
146extern UCHAR RALINK_OUI[];
147extern UCHAR PowerConstraintIE[];
148
149
150extern UCHAR RateSwitchTable[];
151extern UCHAR RateSwitchTable11B[];
152extern UCHAR RateSwitchTable11G[];
153extern UCHAR RateSwitchTable11BG[];
154
91980990
GKH
155extern UCHAR RateSwitchTable11BGN1S[];
156extern UCHAR RateSwitchTable11BGN2S[];
157extern UCHAR RateSwitchTable11BGN2SForABand[];
158extern UCHAR RateSwitchTable11N1S[];
159extern UCHAR RateSwitchTable11N2S[];
160extern UCHAR RateSwitchTable11N2SForABand[];
161
91980990 162extern UCHAR PRE_N_HT_OUI[];
91980990
GKH
163
164#define MAXSEQ (0xFFF)
165
91980990
GKH
166struct reordering_mpdu
167{
168 struct reordering_mpdu *next;
169 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
170 int Sequence; /* sequence number of MPDU */
171 BOOLEAN bAMSDU;
172};
173
174struct reordering_list
175{
176 struct reordering_mpdu *next;
177 int qlen;
178};
179
180struct reordering_mpdu_pool
181{
182 PVOID mem;
183 NDIS_SPIN_LOCK lock;
184 struct reordering_list freelist;
185};
91980990
GKH
186
187typedef struct _RSSI_SAMPLE {
188 CHAR LastRssi0; // last received RSSI
189 CHAR LastRssi1; // last received RSSI
190 CHAR LastRssi2; // last received RSSI
191 CHAR AvgRssi0;
192 CHAR AvgRssi1;
193 CHAR AvgRssi2;
194 SHORT AvgRssi0X8;
195 SHORT AvgRssi1X8;
196 SHORT AvgRssi2X8;
197} RSSI_SAMPLE;
198
199//
200// Queue structure and macros
201//
202typedef struct _QUEUE_ENTRY {
203 struct _QUEUE_ENTRY *Next;
204} QUEUE_ENTRY, *PQUEUE_ENTRY;
205
206// Queue structure
207typedef struct _QUEUE_HEADER {
208 PQUEUE_ENTRY Head;
209 PQUEUE_ENTRY Tail;
210 ULONG Number;
211} QUEUE_HEADER, *PQUEUE_HEADER;
212
213#define InitializeQueueHeader(QueueHeader) \
214{ \
215 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
216 (QueueHeader)->Number = 0; \
217}
218
219#define RemoveHeadQueue(QueueHeader) \
220(QueueHeader)->Head; \
221{ \
222 PQUEUE_ENTRY pNext; \
223 if ((QueueHeader)->Head != NULL) \
224 { \
225 pNext = (QueueHeader)->Head->Next; \
226 (QueueHeader)->Head = pNext; \
227 if (pNext == NULL) \
228 (QueueHeader)->Tail = NULL; \
229 (QueueHeader)->Number--; \
230 } \
231}
232
233#define InsertHeadQueue(QueueHeader, QueueEntry) \
234{ \
235 ((PQUEUE_ENTRY)QueueEntry)->Next = (QueueHeader)->Head; \
236 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
237 if ((QueueHeader)->Tail == NULL) \
238 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
239 (QueueHeader)->Number++; \
240}
241
242#define InsertTailQueue(QueueHeader, QueueEntry) \
243{ \
244 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
245 if ((QueueHeader)->Tail) \
246 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
247 else \
248 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
249 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
250 (QueueHeader)->Number++; \
251}
252
253//
254// Macros for flag and ref count operations
255//
256#define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
257#define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
258#define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
259#define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
260#define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
261
ed291e80
AM
262// Macro for power save flag.
263#define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
264#define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
265#define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
266#define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
267#define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
268
91980990
GKH
269#define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
270#define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
271#define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
272
273#define CLIENT_STATUS_SET_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags |= (_F))
274#define CLIENT_STATUS_CLEAR_FLAG(_pEntry,_F) ((_pEntry)->ClientStatusFlags &= ~(_F))
275#define CLIENT_STATUS_TEST_FLAG(_pEntry,_F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
276
277#define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
278#define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
279#define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
280
91980990
GKH
281#define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
282#define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
283#define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
284#define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
285
286#define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
91980990
GKH
287
288#define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
289#define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
290
291
292#define INC_RING_INDEX(_idx, _RingSize) \
293{ \
294 (_idx) = (_idx+1) % (_RingSize); \
295}
296
297#define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
298
299#define RING_PACKET_INIT(_TxRing, _idx) \
300{ \
301 _TxRing->Cell[_idx].pNdisPacket = NULL; \
302 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
303}
304
305#define TXDT_INIT(_TxD) \
306{ \
307 NdisZeroMemory(_TxD, TXD_SIZE); \
308 _TxD->DMADONE = 1; \
309}
310
311//Set last data segment
312#define RING_SET_LASTDS(_TxD, _IsSD0) \
313{ \
314 if (_IsSD0) {_TxD->LastSec0 = 1;} \
315 else {_TxD->LastSec1 = 1;} \
316}
317
318// Increase TxTsc value for next transmission
319// TODO:
320// When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
321// Should send a special event microsoft defined to request re-key
322#define INC_TX_TSC(_tsc) \
323{ \
324 int i=0; \
325 while (++_tsc[i] == 0x0) \
326 { \
327 i++; \
328 if (i == 6) \
329 break; \
330 } \
331}
332
91980990
GKH
333// StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
334#define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
335{ \
336 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
337 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
338 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
339 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
340 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
341 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
342 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
343 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
344 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
345 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
346 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
347 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(UCHAR) * 16);\
348}
349
350#define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
351{ \
352 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (UCHAR)(_pHtCapability->HtCapInfo.AMsduSize); \
353 _pAd->MacTab.Content[BSSID_WCID].MmpsMode= (UCHAR)(_pHtCapability->HtCapInfo.MimoPs); \
354 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (UCHAR)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
355}
91980990
GKH
356
357//
358// MACRO for 32-bit PCI register read / write
359//
360// Usage : RTMP_IO_READ32(
361// PRTMP_ADAPTER pAd,
362// ULONG Register_Offset,
363// PULONG pValue)
364//
365// RTMP_IO_WRITE32(
366// PRTMP_ADAPTER pAd,
367// ULONG Register_Offset,
368// ULONG Value)
369//
370
371//
372// BBP & RF are using indirect access. Before write any value into it.
373// We have to make sure there is no outstanding command pending via checking busy bit.
374//
375#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
376//
91980990
GKH
377#define RTMP_RF_IO_WRITE32(_A, _V) \
378{ \
379 PHY_CSR4_STRUC Value; \
380 ULONG BusyCnt = 0; \
381 if ((_A)->bPCIclkOff) \
382 { \
383 return; \
384 } \
385 do { \
386 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
387 if (Value.field.Busy == IDLE) \
388 break; \
389 BusyCnt++; \
390 } while (BusyCnt < MAX_BUSY_COUNT); \
391 if (BusyCnt < MAX_BUSY_COUNT) \
392 { \
393 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
394 } \
395}
396
397#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
398{ \
399 BBP_CSR_CFG_STRUC BbpCsr; \
400 int i, k; \
401 for (i=0; i<MAX_BUSY_COUNT; i++) \
402 { \
403 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
404 if (BbpCsr.field.Busy == BUSY) \
405 { \
406 continue; \
407 } \
408 BbpCsr.word = 0; \
409 BbpCsr.field.fRead = 1; \
410 BbpCsr.field.BBP_RW_MODE = 1; \
411 BbpCsr.field.Busy = 1; \
412 BbpCsr.field.RegNum = _I; \
413 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
414 for (k=0; k<MAX_BUSY_COUNT; k++) \
415 { \
416 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
417 if (BbpCsr.field.Busy == IDLE) \
418 break; \
419 } \
420 if ((BbpCsr.field.Busy == IDLE) && \
421 (BbpCsr.field.RegNum == _I)) \
422 { \
423 *(_pV) = (UCHAR)BbpCsr.field.Value; \
424 break; \
425 } \
426 } \
427 if (BbpCsr.field.Busy == BUSY) \
428 { \
429 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
430 *(_pV) = (_A)->BbpWriteLatch[_I]; \
431 } \
432}
433
434//#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
435// Read BBP register by register's ID. Generate PER to test BA
436#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
437{ \
438 BBP_CSR_CFG_STRUC BbpCsr; \
439 int i, k; \
440 if ((_A)->bPCIclkOff == FALSE) \
441 { \
442 for (i=0; i<MAX_BUSY_COUNT; i++) \
443 { \
444 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
445 if (BbpCsr.field.Busy == BUSY) \
446 { \
447 continue; \
448 } \
449 BbpCsr.word = 0; \
450 BbpCsr.field.fRead = 1; \
451 BbpCsr.field.BBP_RW_MODE = 1; \
452 BbpCsr.field.Busy = 1; \
453 BbpCsr.field.RegNum = _I; \
454 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
455 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
456 RTMPusecDelay(1000); \
457 for (k=0; k<MAX_BUSY_COUNT; k++) \
458 { \
459 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
460 if (BbpCsr.field.Busy == IDLE) \
461 break; \
462 } \
463 if ((BbpCsr.field.Busy == IDLE) && \
464 (BbpCsr.field.RegNum == _I)) \
465 { \
466 *(_pV) = (UCHAR)BbpCsr.field.Value; \
467 break; \
468 } \
469 } \
470 if (BbpCsr.field.Busy == BUSY) \
471 { \
472 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
473 *(_pV) = (_A)->BbpWriteLatch[_I]; \
474 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
475 BbpCsr.field.Busy = 0; \
476 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
477 } \
478 } \
479}
480
481#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
482{ \
483 BBP_CSR_CFG_STRUC BbpCsr; \
484 int BusyCnt; \
485 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
486 { \
487 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
488 if (BbpCsr.field.Busy == BUSY) \
489 continue; \
490 BbpCsr.word = 0; \
491 BbpCsr.field.fRead = 0; \
492 BbpCsr.field.BBP_RW_MODE = 1; \
493 BbpCsr.field.Busy = 1; \
494 BbpCsr.field.Value = _V; \
495 BbpCsr.field.RegNum = _I; \
496 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
497 (_A)->BbpWriteLatch[_I] = _V; \
498 break; \
499 } \
500 if (BusyCnt == MAX_BUSY_COUNT) \
501 { \
502 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
503 } \
504}
505
506// Write BBP register by register's ID & value
507#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
508{ \
509 BBP_CSR_CFG_STRUC BbpCsr; \
510 int BusyCnt; \
511 if ((_A)->bPCIclkOff == FALSE) \
512 { \
513 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
514 { \
515 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
516 if (BbpCsr.field.Busy == BUSY) \
517 continue; \
518 BbpCsr.word = 0; \
519 BbpCsr.field.fRead = 0; \
520 BbpCsr.field.BBP_RW_MODE = 1; \
521 BbpCsr.field.Busy = 1; \
522 BbpCsr.field.Value = _V; \
523 BbpCsr.field.RegNum = _I; \
524 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
525 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
526 if (_A->OpMode == OPMODE_AP) \
527 RTMPusecDelay(1000); \
528 (_A)->BbpWriteLatch[_I] = _V; \
529 break; \
530 } \
531 if (BusyCnt == MAX_BUSY_COUNT) \
532 { \
533 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
534 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
535 BbpCsr.field.Busy = 0; \
536 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
537 } \
538 } \
539}
91980990
GKH
540
541
542#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
543 switch (ch) \
544 { \
545 case 1: khz = 2412000; break; \
546 case 2: khz = 2417000; break; \
547 case 3: khz = 2422000; break; \
548 case 4: khz = 2427000; break; \
549 case 5: khz = 2432000; break; \
550 case 6: khz = 2437000; break; \
551 case 7: khz = 2442000; break; \
552 case 8: khz = 2447000; break; \
553 case 9: khz = 2452000; break; \
554 case 10: khz = 2457000; break; \
555 case 11: khz = 2462000; break; \
556 case 12: khz = 2467000; break; \
557 case 13: khz = 2472000; break; \
558 case 14: khz = 2484000; break; \
559 case 36: /* UNII */ khz = 5180000; break; \
560 case 40: /* UNII */ khz = 5200000; break; \
561 case 44: /* UNII */ khz = 5220000; break; \
562 case 48: /* UNII */ khz = 5240000; break; \
563 case 52: /* UNII */ khz = 5260000; break; \
564 case 56: /* UNII */ khz = 5280000; break; \
565 case 60: /* UNII */ khz = 5300000; break; \
566 case 64: /* UNII */ khz = 5320000; break; \
567 case 149: /* UNII */ khz = 5745000; break; \
568 case 153: /* UNII */ khz = 5765000; break; \
569 case 157: /* UNII */ khz = 5785000; break; \
570 case 161: /* UNII */ khz = 5805000; break; \
571 case 165: /* UNII */ khz = 5825000; break; \
572 case 100: /* HiperLAN2 */ khz = 5500000; break; \
573 case 104: /* HiperLAN2 */ khz = 5520000; break; \
574 case 108: /* HiperLAN2 */ khz = 5540000; break; \
575 case 112: /* HiperLAN2 */ khz = 5560000; break; \
576 case 116: /* HiperLAN2 */ khz = 5580000; break; \
577 case 120: /* HiperLAN2 */ khz = 5600000; break; \
578 case 124: /* HiperLAN2 */ khz = 5620000; break; \
579 case 128: /* HiperLAN2 */ khz = 5640000; break; \
580 case 132: /* HiperLAN2 */ khz = 5660000; break; \
581 case 136: /* HiperLAN2 */ khz = 5680000; break; \
582 case 140: /* HiperLAN2 */ khz = 5700000; break; \
583 case 34: /* Japan MMAC */ khz = 5170000; break; \
584 case 38: /* Japan MMAC */ khz = 5190000; break; \
585 case 42: /* Japan MMAC */ khz = 5210000; break; \
586 case 46: /* Japan MMAC */ khz = 5230000; break; \
587 case 184: /* Japan */ khz = 4920000; break; \
588 case 188: /* Japan */ khz = 4940000; break; \
589 case 192: /* Japan */ khz = 4960000; break; \
590 case 196: /* Japan */ khz = 4980000; break; \
591 case 208: /* Japan, means J08 */ khz = 5040000; break; \
592 case 212: /* Japan, means J12 */ khz = 5060000; break; \
593 case 216: /* Japan, means J16 */ khz = 5080000; break; \
594 default: khz = 2412000; break; \
595 } \
596 }
597
598#define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
599 switch (khz) \
600 { \
601 case 2412000: ch = 1; break; \
602 case 2417000: ch = 2; break; \
603 case 2422000: ch = 3; break; \
604 case 2427000: ch = 4; break; \
605 case 2432000: ch = 5; break; \
606 case 2437000: ch = 6; break; \
607 case 2442000: ch = 7; break; \
608 case 2447000: ch = 8; break; \
609 case 2452000: ch = 9; break; \
610 case 2457000: ch = 10; break; \
611 case 2462000: ch = 11; break; \
612 case 2467000: ch = 12; break; \
613 case 2472000: ch = 13; break; \
614 case 2484000: ch = 14; break; \
615 case 5180000: ch = 36; /* UNII */ break; \
616 case 5200000: ch = 40; /* UNII */ break; \
617 case 5220000: ch = 44; /* UNII */ break; \
618 case 5240000: ch = 48; /* UNII */ break; \
619 case 5260000: ch = 52; /* UNII */ break; \
620 case 5280000: ch = 56; /* UNII */ break; \
621 case 5300000: ch = 60; /* UNII */ break; \
622 case 5320000: ch = 64; /* UNII */ break; \
623 case 5745000: ch = 149; /* UNII */ break; \
624 case 5765000: ch = 153; /* UNII */ break; \
625 case 5785000: ch = 157; /* UNII */ break; \
626 case 5805000: ch = 161; /* UNII */ break; \
627 case 5825000: ch = 165; /* UNII */ break; \
628 case 5500000: ch = 100; /* HiperLAN2 */ break; \
629 case 5520000: ch = 104; /* HiperLAN2 */ break; \
630 case 5540000: ch = 108; /* HiperLAN2 */ break; \
631 case 5560000: ch = 112; /* HiperLAN2 */ break; \
632 case 5580000: ch = 116; /* HiperLAN2 */ break; \
633 case 5600000: ch = 120; /* HiperLAN2 */ break; \
634 case 5620000: ch = 124; /* HiperLAN2 */ break; \
635 case 5640000: ch = 128; /* HiperLAN2 */ break; \
636 case 5660000: ch = 132; /* HiperLAN2 */ break; \
637 case 5680000: ch = 136; /* HiperLAN2 */ break; \
638 case 5700000: ch = 140; /* HiperLAN2 */ break; \
639 case 5170000: ch = 34; /* Japan MMAC */ break; \
640 case 5190000: ch = 38; /* Japan MMAC */ break; \
641 case 5210000: ch = 42; /* Japan MMAC */ break; \
642 case 5230000: ch = 46; /* Japan MMAC */ break; \
643 case 4920000: ch = 184; /* Japan */ break; \
644 case 4940000: ch = 188; /* Japan */ break; \
645 case 4960000: ch = 192; /* Japan */ break; \
646 case 4980000: ch = 196; /* Japan */ break; \
647 case 5040000: ch = 208; /* Japan, means J08 */ break; \
648 case 5060000: ch = 212; /* Japan, means J12 */ break; \
649 case 5080000: ch = 216; /* Japan, means J16 */ break; \
650 default: ch = 1; break; \
651 } \
652 }
653
654//
655// Common fragment list structure - Identical to the scatter gather frag list structure
656//
657#define NIC_MAX_PHYS_BUF_COUNT 8
658
659typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
660 PVOID Address;
661 ULONG Length;
662 PULONG Reserved;
663} RTMP_SCATTER_GATHER_ELEMENT, *PRTMP_SCATTER_GATHER_ELEMENT;
664
665
666typedef struct _RTMP_SCATTER_GATHER_LIST {
667 ULONG NumberOfElements;
668 PULONG Reserved;
669 RTMP_SCATTER_GATHER_ELEMENT Elements[NIC_MAX_PHYS_BUF_COUNT];
670} RTMP_SCATTER_GATHER_LIST, *PRTMP_SCATTER_GATHER_LIST;
671
672//
673// Some utility macros
674//
675#ifndef min
676#define min(_a, _b) (((_a) < (_b)) ? (_a) : (_b))
677#endif
678
679#ifndef max
680#define max(_a, _b) (((_a) > (_b)) ? (_a) : (_b))
681#endif
682
683#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))))
684
685#define INC_COUNTER64(Val) (Val.QuadPart++)
686
687#define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
688#define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
689#define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
690#define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
691
692// Check LEAP & CCKM flags
693#define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
694#define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
695
696// if orginal Ethernet frame contains no LLC/SNAP, then an extra LLC/SNAP encap is required
697#define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
698{ \
699 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) \
700 { \
701 _pExtraLlcSnapEncap = SNAP_802_1H; \
702 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
703 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) \
704 { \
705 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
706 } \
707 } \
708 else \
709 { \
710 _pExtraLlcSnapEncap = NULL; \
711 } \
712}
713
714// New Define for new Tx Path.
715#define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
716{ \
717 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) \
718 { \
719 _pExtraLlcSnapEncap = SNAP_802_1H; \
720 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
721 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) \
722 { \
723 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
724 } \
725 } \
726 else \
727 { \
728 _pExtraLlcSnapEncap = NULL; \
729 } \
730}
731
732
733#define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
734{ \
735 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
736 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
737 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
738}
739
740// if pData has no LLC/SNAP (neither RFC1042 nor Bridge tunnel), keep it that way.
741// else if the received frame is LLC/SNAP-encaped IPX or APPLETALK, preserve the LLC/SNAP field
742// else remove the LLC/SNAP field from the result Ethernet frame
743// Patch for WHQL only, which did not turn on Netbios but use IPX within its payload
744// Note:
745// _pData & _DataSize may be altered (remove 8-byte LLC/SNAP) by this MACRO
746// _pRemovedLLCSNAP: pointer to removed LLC/SNAP; NULL is not removed
747#define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
748{ \
749 char LLC_Len[2]; \
750 \
751 _pRemovedLLCSNAP = NULL; \
752 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
753 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) \
754 { \
755 PUCHAR pProto = _pData + 6; \
756 \
757 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
758 NdisEqualMemory(SNAP_802_1H, _pData, 6)) \
759 { \
760 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
761 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
762 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
763 } \
764 else \
765 { \
766 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
767 _pRemovedLLCSNAP = _pData; \
768 _DataSize -= LENGTH_802_1_H; \
769 _pData += LENGTH_802_1_H; \
770 } \
771 } \
772 else \
773 { \
774 LLC_Len[0] = (UCHAR)(_DataSize / 256); \
775 LLC_Len[1] = (UCHAR)(_DataSize % 256); \
776 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
777 } \
778}
779
780#define SWITCH_AB( _pAA, _pBB) \
781{ \
782 PVOID pCC; \
783 pCC = _pBB; \
784 _pBB = _pAA; \
785 _pAA = pCC; \
786}
787
788// Enqueue this frame to MLME engine
789// We need to enqueue the whole frame because MLME need to pass data type
790// information from 802.11 header
91980990
GKH
791#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
792{ \
793 UINT32 High32TSF, Low32TSF; \
794 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
795 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
796 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
797}
91980990
GKH
798
799#define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
800 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
801
802#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
803#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
804
805//
806// Check if it is Japan W53(ch52,56,60,64) channel.
807//
808#define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
809
91980990
GKH
810#define STA_PORT_SECURED(_pAd) \
811{ \
812 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
ed291e80
AM
813 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \
814 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \
91980990 815 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
ed291e80 816 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
91980990 817}
91980990
GKH
818
819//
820// Register set pair for initialzation register set definition
821//
822typedef struct _RTMP_REG_PAIR
823{
824 ULONG Register;
825 ULONG Value;
826} RTMP_REG_PAIR, *PRTMP_REG_PAIR;
827
828typedef struct _REG_PAIR
829{
830 UCHAR Register;
831 UCHAR Value;
832} REG_PAIR, *PREG_PAIR;
833
834//
835// Register set pair for initialzation register set definition
836//
837typedef struct _RTMP_RF_REGS
838{
839 UCHAR Channel;
840 ULONG R1;
841 ULONG R2;
842 ULONG R3;
843 ULONG R4;
844} RTMP_RF_REGS, *PRTMP_RF_REGS;
845
846typedef struct _FREQUENCY_ITEM {
847 UCHAR Channel;
848 UCHAR N;
849 UCHAR R;
850 UCHAR K;
851} FREQUENCY_ITEM, *PFREQUENCY_ITEM;
852
853//
854// Data buffer for DMA operation, the buffer must be contiguous physical memory
855// Both DMA to / from CPU use the same structure.
856//
857typedef struct _RTMP_DMABUF
858{
859 ULONG AllocSize;
860 PVOID AllocVa; // TxBuf virtual address
861 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
862} RTMP_DMABUF, *PRTMP_DMABUF;
863
864
865typedef union _HEADER_802_11_SEQ{
91980990
GKH
866 struct {
867 USHORT Frag:4;
868 USHORT Sequence:12;
869 } field;
91980990
GKH
870 USHORT value;
871} HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
872
873//
874// Data buffer for DMA operation, the buffer must be contiguous physical memory
875// Both DMA to / from CPU use the same structure.
876//
877typedef struct _RTMP_REORDERBUF
878{
879 BOOLEAN IsFull;
880 PVOID AllocVa; // TxBuf virtual address
881 UCHAR Header802_3[14];
882 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
883 UCHAR DataOffset;
884 USHORT Datasize;
885 ULONG AllocSize;
91980990 886 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
91980990
GKH
887} RTMP_REORDERBUF, *PRTMP_REORDERBUF;
888
889//
890// Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
891// contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
892// which won't be released, driver has to wait until upper layer return the packet
893// before giveing up this rx ring descriptor to ASIC. NDIS_BUFFER is assocaited pair
894// to describe the packet buffer. For Tx, NDIS_PACKET stored the tx packet descriptor
895// which driver should ACK upper layer when the tx is physically done or failed.
896//
897typedef struct _RTMP_DMACB
898{
899 ULONG AllocSize; // Control block size
900 PVOID AllocVa; // Control block virtual address
901 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
902 PNDIS_PACKET pNdisPacket;
903 PNDIS_PACKET pNextNdisPacket;
904
905 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
906} RTMP_DMACB, *PRTMP_DMACB;
907
908typedef struct _RTMP_TX_BUF
909{
910 PQUEUE_ENTRY Next;
911 UCHAR Index;
912 ULONG AllocSize; // Control block size
913 PVOID AllocVa; // Control block virtual address
914 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
915} RTMP_TXBUF, *PRTMP_TXBUF;
916
917typedef struct _RTMP_RX_BUF
918{
919 BOOLEAN InUse;
920 ULONG ByBaRecIndex;
921 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
922} RTMP_RXBUF, *PRTMP_RXBUF;
923typedef struct _RTMP_TX_RING
924{
925 RTMP_DMACB Cell[TX_RING_SIZE];
926 UINT32 TxCpuIdx;
927 UINT32 TxDmaIdx;
928 UINT32 TxSwFreeIdx; // software next free tx index
929} RTMP_TX_RING, *PRTMP_TX_RING;
930
931typedef struct _RTMP_RX_RING
932{
933 RTMP_DMACB Cell[RX_RING_SIZE];
934 UINT32 RxCpuIdx;
935 UINT32 RxDmaIdx;
936 INT32 RxSwReadIdx; // software next read index
937} RTMP_RX_RING, *PRTMP_RX_RING;
938
939typedef struct _RTMP_MGMT_RING
940{
941 RTMP_DMACB Cell[MGMT_RING_SIZE];
942 UINT32 TxCpuIdx;
943 UINT32 TxDmaIdx;
944 UINT32 TxSwFreeIdx; // software next free tx index
945} RTMP_MGMT_RING, *PRTMP_MGMT_RING;
946
947//
948// Statistic counter structure
949//
950typedef struct _COUNTER_802_3
951{
952 // General Stats
953 ULONG GoodTransmits;
954 ULONG GoodReceives;
955 ULONG TxErrors;
956 ULONG RxErrors;
957 ULONG RxNoBuffer;
958
959 // Ethernet Stats
960 ULONG RcvAlignmentErrors;
961 ULONG OneCollision;
962 ULONG MoreCollisions;
963
964} COUNTER_802_3, *PCOUNTER_802_3;
965
966typedef struct _COUNTER_802_11 {
967 ULONG Length;
968 LARGE_INTEGER LastTransmittedFragmentCount;
969 LARGE_INTEGER TransmittedFragmentCount;
970 LARGE_INTEGER MulticastTransmittedFrameCount;
971 LARGE_INTEGER FailedCount;
972 LARGE_INTEGER RetryCount;
973 LARGE_INTEGER MultipleRetryCount;
974 LARGE_INTEGER RTSSuccessCount;
975 LARGE_INTEGER RTSFailureCount;
976 LARGE_INTEGER ACKFailureCount;
977 LARGE_INTEGER FrameDuplicateCount;
978 LARGE_INTEGER ReceivedFragmentCount;
979 LARGE_INTEGER MulticastReceivedFrameCount;
980 LARGE_INTEGER FCSErrorCount;
981} COUNTER_802_11, *PCOUNTER_802_11;
982
983typedef struct _COUNTER_RALINK {
984 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
ed291e80 985 ULONG LastReceivedByteCount;
91980990
GKH
986 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
987 ULONG BeenDisassociatedCount;
988 ULONG BadCQIAutoRecoveryCount;
989 ULONG PoorCQIRoamingCount;
990 ULONG MgmtRingFullCount;
991 ULONG RxCountSinceLastNULL;
992 ULONG RxCount;
993 ULONG RxRingErrCount;
994 ULONG KickTxCount;
995 ULONG TxRingErrCount;
996 LARGE_INTEGER RealFcsErrCount;
997 ULONG PendingNdisPacketCount;
998
999 ULONG OneSecOsTxCount[NUM_OF_TX_RING];
1000 ULONG OneSecDmaDoneCount[NUM_OF_TX_RING];
1001 UINT32 OneSecTxDoneCount;
1002 ULONG OneSecRxCount;
1003 UINT32 OneSecTxAggregationCount;
1004 UINT32 OneSecRxAggregationCount;
1005
1006 UINT32 OneSecFrameDuplicateCount;
1007
1008
1009 UINT32 OneSecTxNoRetryOkCount;
1010 UINT32 OneSecTxRetryOkCount;
1011 UINT32 OneSecTxFailCount;
1012 UINT32 OneSecFalseCCACnt; // CCA error count, for debug purpose, might move to global counter
1013 UINT32 OneSecRxOkCnt; // RX without error
1014 UINT32 OneSecRxOkDataCnt; // unicast-to-me DATA frame count
1015 UINT32 OneSecRxFcsErrCnt; // CRC error
1016 UINT32 OneSecBeaconSentCnt;
1017 UINT32 LastOneSecTotalTxCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1018 UINT32 LastOneSecRxOkDataCnt; // OneSecRxOkDataCnt
1019 ULONG DuplicateRcv;
1020 ULONG TxAggCount;
1021 ULONG TxNonAggCount;
1022 ULONG TxAgg1MPDUCount;
1023 ULONG TxAgg2MPDUCount;
1024 ULONG TxAgg3MPDUCount;
1025 ULONG TxAgg4MPDUCount;
1026 ULONG TxAgg5MPDUCount;
1027 ULONG TxAgg6MPDUCount;
1028 ULONG TxAgg7MPDUCount;
1029 ULONG TxAgg8MPDUCount;
1030 ULONG TxAgg9MPDUCount;
1031 ULONG TxAgg10MPDUCount;
1032 ULONG TxAgg11MPDUCount;
1033 ULONG TxAgg12MPDUCount;
1034 ULONG TxAgg13MPDUCount;
1035 ULONG TxAgg14MPDUCount;
1036 ULONG TxAgg15MPDUCount;
1037 ULONG TxAgg16MPDUCount;
1038
1039 LARGE_INTEGER TransmittedOctetsInAMSDU;
1040 LARGE_INTEGER TransmittedAMSDUCount;
1041 LARGE_INTEGER ReceivedOctesInAMSDUCount;
1042 LARGE_INTEGER ReceivedAMSDUCount;
1043 LARGE_INTEGER TransmittedAMPDUCount;
1044 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
1045 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
1046 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1047} COUNTER_RALINK, *PCOUNTER_RALINK;
1048
1049typedef struct _PID_COUNTER {
1050 ULONG TxAckRequiredCount; // CRC error
1051 ULONG TxAggreCount;
1052 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1053 ULONG LastSuccessRate;
1054} PID_COUNTER, *PPID_COUNTER;
1055
1056typedef struct _COUNTER_DRS {
1057 // to record the each TX rate's quality. 0 is best, the bigger the worse.
1058 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1059 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
1060 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
1061 ULONG CurrTxRateStableTime; // # of second in current TX rate
1062 BOOLEAN fNoisyEnvironment;
1063 BOOLEAN fLastSecAccordingRSSI;
1064 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
1065 UCHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
1066 ULONG LastTxOkCount;
1067} COUNTER_DRS, *PCOUNTER_DRS;
1068
1069//
1070// Arcfour Structure Added by PaulWu
1071//
1072typedef struct _ARCFOUR
1073{
1074 UINT X;
1075 UINT Y;
1076 UCHAR STATE[256];
1077} ARCFOURCONTEXT, *PARCFOURCONTEXT;
1078
1079// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1080typedef struct _RECEIVE_SETTING {
91980990
GKH
1081 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1082 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1083 USHORT ShortGI:1;
1084 USHORT STBC:2; //SPACE
1085 USHORT rsv:3;
1086 USHORT OFDM:1;
1087 USHORT MIMO:1;
91980990
GKH
1088 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1089
1090// Shared key data structure
1091typedef struct _WEP_KEY {
1092 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1093 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1094} WEP_KEY, *PWEP_KEY;
1095
1096typedef struct _CIPHER_KEY {
1097 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1098 UCHAR RxMic[8]; // make alignment
1099 UCHAR TxMic[8];
1100 UCHAR TxTsc[6]; // 48bit TSC value
1101 UCHAR RxTsc[6]; // 48bit TSC value
1102 UCHAR CipherAlg; // 0-none, 1:WEP64, 2:WEP128, 3:TKIP, 4:AES, 5:CKIP64, 6:CKIP128
1103 UCHAR KeyLen;
91980990 1104 UCHAR BssId[6];
91980990
GKH
1105 // Key length for each key, 0: entry is invalid
1106 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1107} CIPHER_KEY, *PCIPHER_KEY;
1108
1109typedef struct _BBP_TUNING_STRUCT {
1110 BOOLEAN Enable;
1111 UCHAR FalseCcaCountUpperBound; // 100 per sec
1112 UCHAR FalseCcaCountLowerBound; // 10 per sec
1113 UCHAR R17LowerBound; // specified in E2PROM
1114 UCHAR R17UpperBound; // 0x68 according to David Tung
1115 UCHAR CurrentR17Value;
1116} BBP_TUNING, *PBBP_TUNING;
1117
1118typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
1119 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
1120 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1121 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1122 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1123 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1124 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1125 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1126 SHORT Pair1LastAvgRssi; //
1127 SHORT Pair2LastAvgRssi; //
1128 ULONG RcvPktNumWhenEvaluate;
1129 BOOLEAN FirstPktArrivedWhenEvaluate;
1130 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1131} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1132
1133typedef struct _LEAP_AUTH_INFO {
1134 BOOLEAN Enabled; //Ture: Enable LEAP Authentication
1135 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM
1136 UCHAR Reserve[2];
1137 UCHAR UserName[256]; //LEAP, User name
1138 ULONG UserNameLen;
1139 UCHAR Password[256]; //LEAP, User Password
1140 ULONG PasswordLen;
1141} LEAP_AUTH_INFO, *PLEAP_AUTH_INFO;
1142
1143typedef struct {
1144 UCHAR Addr[MAC_ADDR_LEN];
1145 UCHAR ErrorCode[2]; //00 01-Invalid authentication type
1146 //00 02-Authentication timeout
1147 //00 03-Challenge from AP failed
1148 //00 04-Challenge to AP failed
1149 BOOLEAN Reported;
1150} ROGUEAP_ENTRY, *PROGUEAP_ENTRY;
1151
1152typedef struct {
1153 UCHAR RogueApNr;
1154 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1155} ROGUEAP_TABLE, *PROGUEAP_TABLE;
1156
1157typedef struct {
1158 BOOLEAN Enable;
1159 UCHAR Delta;
1160 BOOLEAN PlusSign;
1161} CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1162
1163//
1164// Receive Tuple Cache Format
1165//
1166typedef struct _TUPLE_CACHE {
1167 BOOLEAN Valid;
1168 UCHAR MacAddress[MAC_ADDR_LEN];
1169 USHORT Sequence;
1170 USHORT Frag;
1171} TUPLE_CACHE, *PTUPLE_CACHE;
1172
1173//
1174// Fragment Frame structure
1175//
1176typedef struct _FRAGMENT_FRAME {
1177 PNDIS_PACKET pFragPacket;
1178 ULONG RxSize;
1179 USHORT Sequence;
1180 USHORT LastFrag;
1181 ULONG Flags; // Some extra frame information. bit 0: LLC presented
1182} FRAGMENT_FRAME, *PFRAGMENT_FRAME;
1183
1184
1185//
1186// Packet information for NdisQueryPacket
1187//
1188typedef struct _PACKET_INFO {
1189 UINT PhysicalBufferCount; // Physical breaks of buffer descripor chained
1190 UINT BufferCount ; // Number of Buffer descriptor chained
1191 UINT TotalPacketLength ; // Self explained
1192 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1193} PACKET_INFO, *PPACKET_INFO;
1194
1195//
1196// Tkip Key structure which RC4 key & MIC calculation
1197//
1198typedef struct _TKIP_KEY_INFO {
1199 UINT nBytesInM; // # bytes in M for MICKEY
1200 ULONG IV16;
1201 ULONG IV32;
1202 ULONG K0; // for MICKEY Low
1203 ULONG K1; // for MICKEY Hig
1204 ULONG L; // Current state for MICKEY
1205 ULONG R; // Current state for MICKEY
1206 ULONG M; // Message accumulator for MICKEY
1207 UCHAR RC4KEY[16];
1208 UCHAR MIC[8];
1209} TKIP_KEY_INFO, *PTKIP_KEY_INFO;
1210
1211//
1212// Private / Misc data, counters for driver internal use
1213//
1214typedef struct __PRIVATE_STRUC {
1215 UINT SystemResetCnt; // System reset counter
1216 UINT TxRingFullCnt; // Tx ring full occurrance number
1217 UINT PhyRxErrCnt; // PHY Rx error count, for debug purpose, might move to global counter
1218 // Variables for WEP encryption / decryption in rtmp_wep.c
1219 UINT FCSCRC32;
1220 ARCFOURCONTEXT WEPCONTEXT;
1221 // Tkip stuff
1222 TKIP_KEY_INFO Tx;
1223 TKIP_KEY_INFO Rx;
1224} PRIVATE_STRUC, *PPRIVATE_STRUC;
1225
1226// structure to tune BBP R66 (BBP TUNING)
1227typedef struct _BBP_R66_TUNING {
1228 BOOLEAN bEnable;
1229 USHORT FalseCcaLowerThreshold; // default 100
1230 USHORT FalseCcaUpperThreshold; // default 512
1231 UCHAR R66Delta;
1232 UCHAR R66CurrentValue;
1233 BOOLEAN R66LowerUpperSelect; //Before LinkUp, Used LowerBound or UpperBound as R66 value.
1234} BBP_R66_TUNING, *PBBP_R66_TUNING;
1235
1236// structure to store channel TX power
1237typedef struct _CHANNEL_TX_POWER {
1238 USHORT RemainingTimeForUse; //unit: sec
1239 UCHAR Channel;
91980990
GKH
1240 CHAR Power;
1241 CHAR Power2;
1242 UCHAR MaxTxPwr;
1243 UCHAR DfsReq;
1244} CHANNEL_TX_POWER, *PCHANNEL_TX_POWER;
1245
1246// structure to store 802.11j channel TX power
1247typedef struct _CHANNEL_11J_TX_POWER {
1248 UCHAR Channel;
1249 UCHAR BW; // BW_10 or BW_20
1250 CHAR Power;
1251 CHAR Power2;
1252 USHORT RemainingTimeForUse; //unit: sec
1253} CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1254
1255typedef enum _ABGBAND_STATE_ {
1256 UNKNOWN_BAND,
1257 BG_BAND,
1258 A_BAND,
1259} ABGBAND_STATE;
1260
1261typedef struct _MLME_STRUCT {
91980990
GKH
1262 // STA state machines
1263 STATE_MACHINE CntlMachine;
1264 STATE_MACHINE AssocMachine;
1265 STATE_MACHINE AuthMachine;
1266 STATE_MACHINE AuthRspMachine;
1267 STATE_MACHINE SyncMachine;
1268 STATE_MACHINE WpaPskMachine;
1269 STATE_MACHINE LeapMachine;
1270 STATE_MACHINE AironetMachine;
1271 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1272 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1273 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1274 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1275 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1276 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
91980990
GKH
1277 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1278 // Action
1279 STATE_MACHINE ActMachine;
1280
91980990
GKH
1281 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1282 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1283 ULONG LastSendNULLpsmTime;
1284
1285 BOOLEAN bRunning;
1286 NDIS_SPIN_LOCK TaskLock;
1287 MLME_QUEUE Queue;
1288
1289 UINT ShiftReg;
1290
1291 RALINK_TIMER_STRUCT PeriodicTimer;
1292 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1293 RALINK_TIMER_STRUCT LinkDownTimer;
1294 RALINK_TIMER_STRUCT LinkUpTimer;
91980990
GKH
1295 UCHAR bPsPollTimerRunning;
1296 RALINK_TIMER_STRUCT PsPollTimer;
1297 RALINK_TIMER_STRUCT RadioOnOffTimer;
91980990
GKH
1298 ULONG PeriodicRound;
1299 ULONG OneSecPeriodicRound;
1300
1301 UCHAR RealRxPath;
1302 BOOLEAN bLowThroughput;
1303 BOOLEAN bEnableAutoAntennaCheck;
1304 RALINK_TIMER_STRUCT RxAntEvalTimer;
1305
1306
1307} MLME_STRUCT, *PMLME_STRUCT;
1308
1309// structure for radar detection and channel switch
1310typedef struct _RADAR_DETECT_STRUCT {
1311 UCHAR CSCount; //Channel switch counter
1312 UCHAR CSPeriod; //Channel switch period (beacon count)
1313 UCHAR RDCount; //Radar detection counter
1314 UCHAR RDMode; //Radar Detection mode
1315 UCHAR RDDurRegion; //Radar detection duration region
1316 UCHAR BBPR16;
1317 UCHAR BBPR17;
1318 UCHAR BBPR18;
1319 UCHAR BBPR21;
1320 UCHAR BBPR22;
1321 UCHAR BBPR64;
1322 ULONG InServiceMonitorCount; // unit: sec
1323 UINT8 DfsSessionTime;
1324 BOOLEAN bFastDfs;
1325 UINT8 ChMovingTime;
1326 UINT8 LongPulseRadarTh;
1327} RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
1328
91980990
GKH
1329typedef enum _REC_BLOCKACK_STATUS
1330{
1331 Recipient_NONE=0,
1332 Recipient_USED,
1333 Recipient_HandleRes,
1334 Recipient_Accept
1335} REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
1336
1337typedef enum _ORI_BLOCKACK_STATUS
1338{
1339 Originator_NONE=0,
1340 Originator_USED,
1341 Originator_WaitRes,
1342 Originator_Done
1343} ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
1344
91980990
GKH
1345typedef struct _BA_ORI_ENTRY{
1346 UCHAR Wcid;
1347 UCHAR TID;
1348 UCHAR BAWinSize;
1349 UCHAR Token;
1350// Sequence is to fill every outgoing QoS DATA frame's sequence field in 802.11 header.
1351 USHORT Sequence;
1352 USHORT TimeOutValue;
1353 ORI_BLOCKACK_STATUS ORI_BA_Status;
1354 RALINK_TIMER_STRUCT ORIBATimer;
1355 PVOID pAdapter;
1356} BA_ORI_ENTRY, *PBA_ORI_ENTRY;
1357
1358typedef struct _BA_REC_ENTRY {
1359 UCHAR Wcid;
1360 UCHAR TID;
1361 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1362 USHORT LastIndSeq;
1363 USHORT TimeOutValue;
1364 RALINK_TIMER_STRUCT RECBATimer;
1365 ULONG LastIndSeqAtTimer;
1366 ULONG nDropPacket;
1367 ULONG rcvSeq;
1368 REC_BLOCKACK_STATUS REC_BA_Status;
1369 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1370 PVOID pAdapter;
1371 struct reordering_list list;
1372} BA_REC_ENTRY, *PBA_REC_ENTRY;
1373
1374
1375typedef struct {
1376 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1377 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1378 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1379 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1380} BA_TABLE, *PBA_TABLE;
1381
1382//For QureyBATableOID use;
1383typedef struct PACKED _OID_BA_REC_ENTRY{
1384 UCHAR MACAddr[MAC_ADDR_LEN];
1385 UCHAR BaBitmap; // if (BaBitmap&(1<<TID)), this session with{MACAddr, TID}exists, so read BufSize[TID] for BufferSize
1386 UCHAR rsv;
1387 UCHAR BufSize[8];
1388 REC_BLOCKACK_STATUS REC_BA_Status[8];
1389} OID_BA_REC_ENTRY, *POID_BA_REC_ENTRY;
1390
1391//For QureyBATableOID use;
1392typedef struct PACKED _OID_BA_ORI_ENTRY{
1393 UCHAR MACAddr[MAC_ADDR_LEN];
1394 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
1395 UCHAR rsv;
1396 UCHAR BufSize[8];
1397 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1398} OID_BA_ORI_ENTRY, *POID_BA_ORI_ENTRY;
1399
1400typedef struct _QUERYBA_TABLE{
1401 OID_BA_ORI_ENTRY BAOriEntry[32];
1402 OID_BA_REC_ENTRY BARecEntry[32];
1403 UCHAR OriNum;// Number of below BAOriEntry
1404 UCHAR RecNum;// Number of below BARecEntry
1405} QUERYBA_TABLE, *PQUERYBA_TABLE;
1406
1407typedef union _BACAP_STRUC {
91980990
GKH
1408 struct {
1409 UINT32 RxBAWinLimit:8;
1410 UINT32 TxBAWinLimit:8;
1411 UINT32 AutoBA:1; // automatically BA
1412 UINT32 Policy:2; // 0: DELAY_BA 1:IMMED_BA (//BA Policy subfiled value in ADDBA frame) 2:BA-not use
1413 UINT32 MpduDensity:3;
1414 UINT32 AmsduEnable:1; //Enable AMSDU transmisstion
1415 UINT32 AmsduSize:1; // 0:3839, 1:7935 bytes. UINT MSDUSizeToBytes[] = { 3839, 7935};
1416 UINT32 MMPSmode:2; // MIMO power save more, 0:static, 1:dynamic, 2:rsv, 3:mimo enable
1417 UINT32 bHtAdhoc:1; // adhoc can use ht rate.
1418 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.
1419 UINT32 :4;
1420 } field;
91980990
GKH
1421 UINT32 word;
1422} BACAP_STRUC, *PBACAP_STRUC;
91980990
GKH
1423
1424//This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1425typedef struct _IOT_STRUC {
1426 UCHAR Threshold[2];
1427 UCHAR ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[0]
1428 UCHAR RefreshNum[MAX_LEN_OF_BA_REC_TABLE]; // compare with threshold[1]
1429 ULONG OneSecInWindowCount;
1430 ULONG OneSecFrameDuplicateCount;
1431 ULONG OneSecOutWindowCount;
1432 UCHAR DelOriAct;
1433 UCHAR DelRecAct;
1434 UCHAR RTSShortProt;
1435 UCHAR RTSLongProt;
1436 BOOLEAN bRTSLongProtOn;
91980990
GKH
1437 BOOLEAN bLastAtheros;
1438 BOOLEAN bCurrentAtheros;
1439 BOOLEAN bNowAtherosBurstOn;
1440 BOOLEAN bNextDisableRxBA;
1441 BOOLEAN bToggle;
91980990
GKH
1442} IOT_STRUC, *PIOT_STRUC;
1443
1444// This is the registry setting for 802.11n transmit setting. Used in advanced page.
1445typedef union _REG_TRANSMIT_SETTING {
91980990
GKH
1446 struct {
1447 UINT32 rsv0:10;
1448 UINT32 TxBF:1;
1449 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
1450 UINT32 ShortGI:1;
1451 UINT32 STBC:1; //SPACE
1452 UINT32 TRANSNO:2;
1453 UINT32 HTMODE:1;
1454 UINT32 EXTCHA:2;
1455 UINT32 rsv:13;
1456 } field;
91980990
GKH
1457 UINT32 word;
1458} REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1459
1460typedef union _DESIRED_TRANSMIT_SETTING {
91980990
GKH
1461 struct {
1462 USHORT MCS:7; // MCS
1463 USHORT PhyMode:4;
1464 USHORT FixedTxMode:2; // If MCS isn't AUTO, fix rate in CCK, OFDM or HT mode.
1465 USHORT rsv:3;
1466 } field;
91980990
GKH
1467 USHORT word;
1468 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1469
1470typedef struct {
1471 BOOLEAN IsRecipient;
1472 UCHAR MACAddr[MAC_ADDR_LEN];
1473 UCHAR TID;
1474 UCHAR nMSDU;
1475 USHORT TimeOut;
1476 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1477} OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1478
1479//
1480// Multiple SSID structure
1481//
1482#define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1483#define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1484
1485/* clear bcmc TIM bit */
1486#define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1487 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1488
1489/* set bcmc TIM bit */
1490#define WLAN_MR_TIM_BCMC_SET(apidx) \
1491 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1492
1493/* clear a station PS TIM bit */
1494#define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1495 { UCHAR tim_offset = wcid >> 3; \
1496 UCHAR bit_offset = wcid & 0x7; \
1497 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1498
1499/* set a station PS TIM bit */
1500#define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1501 { UCHAR tim_offset = wcid >> 3; \
1502 UCHAR bit_offset = wcid & 0x7; \
1503 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1504
1505
1506typedef struct _MULTISSID_STRUCT {
1507 UCHAR Bssid[MAC_ADDR_LEN];
1508 UCHAR SsidLen;
1509 CHAR Ssid[MAX_LEN_OF_SSID];
1510 USHORT CapabilityInfo;
1511
1512 PNET_DEV MSSIDDev;
1513
1514 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1515 NDIS_802_11_WEP_STATUS WepStatus;
1516 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1517 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1518
1519 ULONG TxCount;
1520 ULONG RxCount;
1521 ULONG ReceivedByteCount;
1522 ULONG TransmittedByteCount;
1523 ULONG RxErrorCount;
1524 ULONG RxDropCount;
1525
1526 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1527 RT_HT_PHY_INFO DesiredHtPhyInfo;
1528 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1529 BOOLEAN bAutoTxRateSwitch;
1530
1531 UCHAR DefaultKeyId;
1532
1533 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1534 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1535 UCHAR DesiredRatesIndex;
1536 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1537
1538 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1539
1540 // WPA
1541 UCHAR GMK[32];
1542 UCHAR PMK[32];
1543 UCHAR GTK[32];
1544 BOOLEAN IEEE8021X;
1545 BOOLEAN PreAuth;
1546 UCHAR GNonce[32];
1547 UCHAR PortSecured;
1548 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1549 UCHAR BANClass3Data;
1550 ULONG IsolateInterStaTraffic;
1551
1552 UCHAR RSNIE_Len[2];
1553 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1554
1555
1556 UCHAR TimIELocationInBeacon;
1557 UCHAR CapabilityInfoLocationInBeacon;
1558 // outgoing BEACON frame buffer and corresponding TXWI
1559 // PTXWI_STRUC BeaconTxWI; //
1560 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1561
1562 BOOLEAN bHideSsid;
1563 UINT16 StationKeepAliveTime; // unit: second
1564
1565 USHORT VLAN_VID;
1566 USHORT VLAN_Priority;
1567
1568 RT_802_11_ACL AccessControlList;
1569
1570 // EDCA Qos
1571 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1572 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1573
1574 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1575
1576 // For 802.1x daemon setting per BSS
1577 UCHAR radius_srv_num;
1578 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1579
1580#ifdef RTL865X_SOC
1581 unsigned int mylinkid;
1582#endif
1583
1584
1585 UINT32 RcvdConflictSsidCount;
1586 UINT32 RcvdSpoofedAssocRespCount;
1587 UINT32 RcvdSpoofedReassocRespCount;
1588 UINT32 RcvdSpoofedProbeRespCount;
1589 UINT32 RcvdSpoofedBeaconCount;
1590 UINT32 RcvdSpoofedDisassocCount;
1591 UINT32 RcvdSpoofedAuthCount;
1592 UINT32 RcvdSpoofedDeauthCount;
1593 UINT32 RcvdSpoofedUnknownMgmtCount;
1594 UINT32 RcvdReplayAttackCount;
1595
1596 CHAR RssiOfRcvdConflictSsid;
1597 CHAR RssiOfRcvdSpoofedAssocResp;
1598 CHAR RssiOfRcvdSpoofedReassocResp;
1599 CHAR RssiOfRcvdSpoofedProbeResp;
1600 CHAR RssiOfRcvdSpoofedBeacon;
1601 CHAR RssiOfRcvdSpoofedDisassoc;
1602 CHAR RssiOfRcvdSpoofedAuth;
1603 CHAR RssiOfRcvdSpoofedDeauth;
1604 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1605 CHAR RssiOfRcvdReplayAttack;
1606
1607 BOOLEAN bBcnSntReq;
1608 UCHAR BcnBufIdx;
1609} MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1610
91980990
GKH
1611// configuration common to OPMODE_AP as well as OPMODE_STA
1612typedef struct _COMMON_CONFIG {
1613
1614 BOOLEAN bCountryFlag;
1615 UCHAR CountryCode[3];
1616 UCHAR Geography;
1617 UCHAR CountryRegion; // Enum of country region, 0:FCC, 1:IC, 2:ETSI, 3:SPAIN, 4:France, 5:MKK, 6:MKK1, 7:Israel
1618 UCHAR CountryRegionForABand; // Enum of country region for A band
1619 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1620 USHORT Dsifs; // in units of usec
1621 ULONG PacketFilter; // Packet filter for receiving
1622
1623 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1624 UCHAR SsidLen; // the actual ssid length in used
1625 UCHAR LastSsidLen; // the actual ssid length in used
1626 CHAR LastSsid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1627 UCHAR LastBssid[MAC_ADDR_LEN];
1628
1629 UCHAR Bssid[MAC_ADDR_LEN];
1630 USHORT BeaconPeriod;
1631 UCHAR Channel;
1632 UCHAR CentralChannel; // Central Channel when using 40MHz is indicating. not real channel.
1633
1634 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1635 UCHAR SupRateLen;
1636 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1637 UCHAR ExtRateLen;
1638 UCHAR DesireRate[MAX_LEN_OF_SUPPORTED_RATES]; // OID_802_11_DESIRED_RATES
1639 UCHAR MaxDesiredRate;
1640 UCHAR ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1641
1642 ULONG BasicRateBitmap; // backup basic ratebitmap
1643
1644 BOOLEAN bAPSDCapable;
1645 BOOLEAN bInServicePeriod;
1646 BOOLEAN bAPSDAC_BE;
1647 BOOLEAN bAPSDAC_BK;
1648 BOOLEAN bAPSDAC_VI;
1649 BOOLEAN bAPSDAC_VO;
1650 BOOLEAN bNeedSendTriggerFrame;
1651 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1652 ULONG TriggerTimerCount;
1653 UCHAR MaxSPLength;
1654 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1655 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1656 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1657 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1658 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1659 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1660 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1661 UCHAR RtsRate; // RATE_xxx
1662 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
1663 UCHAR MlmeRate; // RATE_xxx, used to send MLME frames
1664 UCHAR BasicMlmeRate; // Default Rate for sending MLME frames
1665
1666 USHORT RtsThreshold; // in unit of BYTE
1667 USHORT FragmentThreshold; // in unit of BYTE
1668
1669 UCHAR TxPower; // in unit of mW
1670 ULONG TxPowerPercentage; // 0~100 %
1671 ULONG TxPowerDefault; // keep for TxPowerPercentage
1672
91980990
GKH
1673 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1674 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1623267a 1675
91980990
GKH
1676 IOT_STRUC IOTestParm; // 802.11n InterOpbility Test Parameter;
1677 ULONG TxPreamble; // Rt802_11PreambleLong, Rt802_11PreambleShort, Rt802_11PreambleAuto
1678 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1679 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1680 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1681 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST
1682 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1683 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1684 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
1685 ULONG DisableOLBCDetect; // 0: enable OLBC detect; 1 disable OLBC detect
1686
91980990 1687 BOOLEAN bRdg;
1623267a 1688
91980990
GKH
1689 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1690 QOS_CAPABILITY_PARM APQosCapability; // QOS capability of the current associated AP
1691 EDCA_PARM APEdcaParm; // EDCA parameters of the current associated AP
1692 QBSS_LOAD_PARM APQbssLoad; // QBSS load of the current associated AP
1693 UCHAR AckPolicy[4]; // ACK policy of the specified AC. see ACK_xxx
91980990 1694 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
91980990
GKH
1695 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
1696 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
1697 // OPSTATUS_TEST_FLAG(), OPSTATUS_SET_FLAG(), OP_STATUS_CLEAR_FLAG() macros.
1698 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition
1699 ULONG OpStatusFlags;
1700
1701 BOOLEAN NdisRadioStateOff; //For HCT 12.0, set this flag to TRUE instead of called MlmeRadioOff.
1702 ABGBAND_STATE BandState; // For setting BBP used on B/G or A mode.
1703
1704 // IEEE802.11H--DFS.
1705 RADAR_DETECT_STRUCT RadarDetect;
1706
91980990
GKH
1707 // HT
1708 UCHAR BASize; // USer desired BAWindowSize. Should not exceed our max capability
1709 //RT_HT_CAPABILITY SupportedHtPhy;
1710 RT_HT_CAPABILITY DesiredHtPhy;
1711 HT_CAPABILITY_IE HtCapability;
1712 ADD_HT_INFO_IE AddHTInfo; // Useful as AP.
1713 //This IE is used with channel switch announcement element when changing to a new 40MHz.
1714 //This IE is included in channel switch ammouncement frames 7.4.1.5, beacons, probe Rsp.
1715 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
1716
91980990
GKH
1717 BOOLEAN bHTProtect;
1718 BOOLEAN bMIMOPSEnable;
1719 BOOLEAN bBADecline;
1720 BOOLEAN bDisableReordering;
1721 BOOLEAN bForty_Mhz_Intolerant;
1722 BOOLEAN bExtChannelSwitchAnnouncement;
1723 BOOLEAN bRcvBSSWidthTriggerEvents;
1724 ULONG LastRcvBSSWidthTriggerEventsTime;
1725
1726 UCHAR TxBASize;
91980990
GKH
1727
1728 // Enable wireless event
1729 BOOLEAN bWirelessEvent;
1730 BOOLEAN bWiFiTest; // Enable this parameter for WiFi test
1731
1732 // Tx & Rx Stream number selection
1733 UCHAR TxStream;
1734 UCHAR RxStream;
1735
1736 // transmit phy mode, trasmit rate for Multicast.
1737#ifdef MCAST_RATE_SPECIFIC
1738 UCHAR McastTransmitMcs;
1739 UCHAR McastTransmitPhyMode;
1740#endif // MCAST_RATE_SPECIFIC //
1741
1742 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1743
1744
1745
1746 NDIS_SPIN_LOCK MeasureReqTabLock;
1747 PMEASURE_REQ_TAB pMeasureReqTab;
1748
1749 NDIS_SPIN_LOCK TpcReqTabLock;
1750 PTPC_REQ_TAB pTpcReqTab;
1751
1752 // transmit phy mode, trasmit rate for Multicast.
1753#ifdef MCAST_RATE_SPECIFIC
1754 HTTRANSMIT_SETTING MCastPhyMode;
1755#endif // MCAST_RATE_SPECIFIC //
91980990
GKH
1756} COMMON_CONFIG, *PCOMMON_CONFIG;
1757
91980990
GKH
1758/* Modified by Wu Xi-Kun 4/21/2006 */
1759// STA configuration and status
1760typedef struct _STA_ADMIN_CONFIG {
1761 // GROUP 1 -
1762 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1763 // the user intended configuration, but not necessary fully equal to the final
1764 // settings in ACTIVE BSS after negotiation/compromize with the BSS holder (either
1765 // AP or IBSS holder).
1766 // Once initialized, user configuration can only be changed via OID_xxx
1767 UCHAR BssType; // BSS_INFRA or BSS_ADHOC
1768 USHORT AtimWin; // used when starting a new IBSS
1769
1770 // GROUP 2 -
1771 // User configuration loaded from Registry, E2PROM or OID_xxx. These settings describe
1772 // the user intended configuration, and should be always applied to the final
1773 // settings in ACTIVE BSS without compromising with the BSS holder.
1774 // Once initialized, user configuration can only be changed via OID_xxx
1775 UCHAR RssiTrigger;
1776 UCHAR RssiTriggerMode; // RSSI_TRIGGERED_UPON_BELOW_THRESHOLD or RSSI_TRIGGERED_UPON_EXCCEED_THRESHOLD
1777 USHORT DefaultListenCount; // default listen count;
1778 ULONG WindowsPowerMode; // Power mode for AC power
1779 ULONG WindowsBatteryPowerMode; // Power mode for battery if exists
1780 BOOLEAN bWindowsACCAMEnable; // Enable CAM power mode when AC on
1781 BOOLEAN bAutoReconnect; // Set to TRUE when setting OID_802_11_SSID with no matching BSSID
1782 ULONG WindowsPowerProfile; // Windows power profile, for NDIS5.1 PnP
1783
1784 // MIB:ieee802dot11.dot11smt(1).dot11StationConfigTable(1)
1785 USHORT Psm; // power management mode (PWR_ACTIVE|PWR_SAVE)
1786 USHORT DisassocReason;
1787 UCHAR DisassocSta[MAC_ADDR_LEN];
1788 USHORT DeauthReason;
1789 UCHAR DeauthSta[MAC_ADDR_LEN];
1790 USHORT AuthFailReason;
1791 UCHAR AuthFailSta[MAC_ADDR_LEN];
1792
1793 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
1794 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
1795 NDIS_802_11_WEP_STATUS WepStatus;
1796 NDIS_802_11_WEP_STATUS OrigWepStatus; // Original wep status set from OID
1797
1798 // Add to support different cipher suite for WPA2/WPA mode
1799 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
1800 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
1801 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
1802 USHORT RsnCapability;
1803
1804 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1805
1806 UCHAR PMK[32]; // WPA PSK mode PMK
1807 UCHAR PTK[64]; // WPA PSK mode PTK
1808 UCHAR GTK[32]; // GTK from authenticator
1809 BSSID_INFO SavedPMK[PMKID_NO];
1810 UINT SavedPMKNum; // Saved PMKID number
1811
1812 UCHAR DefaultKeyId;
1813
1814
1815 // WPA 802.1x port control, WPA_802_1X_PORT_SECURED, WPA_802_1X_PORT_NOT_SECURED
1816 UCHAR PortSecured;
1817
1818 // For WPA countermeasures
1819 ULONG LastMicErrorTime; // record last MIC error time
1820 ULONG MicErrCnt; // Should be 0, 1, 2, then reset to zero (after disassoiciation).
1821 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
1822 // For WPA-PSK supplicant state
1823 WPA_STATE WpaState; // Default is SS_NOTUSE and handled by microsoft 802.1x
1824 UCHAR ReplayCounter[8];
1825 UCHAR ANonce[32]; // ANonce for WPA-PSK from aurhenticator
1826 UCHAR SNonce[32]; // SNonce for WPA-PSK
1827
1828 UCHAR LastSNR0; // last received BEACON's SNR
1829 UCHAR LastSNR1; // last received BEACON's SNR for 2nd antenna
1830 RSSI_SAMPLE RssiSample;
1831 ULONG NumOfAvgRssiSample;
1832
1833 ULONG LastBeaconRxTime; // OS's timestamp of the last BEACON RX time
1834 ULONG Last11bBeaconRxTime; // OS's timestamp of the last 11B BEACON RX time
1835 ULONG Last11gBeaconRxTime; // OS's timestamp of the last 11G BEACON RX time
1836 ULONG Last20NBeaconRxTime; // OS's timestamp of the last 20MHz N BEACON RX time
1837
1838 ULONG LastScanTime; // Record last scan time for issue BSSID_SCAN_LIST
1839 ULONG ScanCnt; // Scan counts since most recent SSID, BSSID, SCAN OID request
1840 BOOLEAN bSwRadio; // Software controlled Radio On/Off, TRUE: On
1841 BOOLEAN bHwRadio; // Hardware controlled Radio On/Off, TRUE: On
1842 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
1843 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1844 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
1845
1846 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
1847 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
1848 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
1849
1850 // New for WPA, windows want us to to keep association information and
1851 // Fixed IEs from last association response
1852 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
1853 USHORT ReqVarIELen; // Length of next VIE include EID & Length
1854 UCHAR ReqVarIEs[MAX_VIE_LEN]; // The content saved here should be little-endian format.
1855 USHORT ResVarIELen; // Length of next VIE include EID & Length
1856 UCHAR ResVarIEs[MAX_VIE_LEN];
1857
1858 UCHAR RSNIE_Len;
1859 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
1860
1861 // New variables used for CCX 1.0
1862 BOOLEAN bCkipOn;
1863 BOOLEAN bCkipCmicOn;
1864 UCHAR CkipFlag;
1865 UCHAR GIV[3]; //for CCX iv
1866 UCHAR RxSEQ[4];
1867 UCHAR TxSEQ[4];
1868 UCHAR CKIPMIC[4];
1869 UCHAR LeapAuthMode;
1870 LEAP_AUTH_INFO LeapAuthInfo;
1871 UCHAR HashPwd[16];
1872 UCHAR NetworkChallenge[8];
1873 UCHAR NetworkChallengeResponse[24];
1874 UCHAR PeerChallenge[8];
1875
1876 UCHAR PeerChallengeResponse[24];
1877 UCHAR SessionKey[16]; //Network session keys (NSK)
1878 RALINK_TIMER_STRUCT LeapAuthTimer;
1879 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
1880
1881 // New control flags for CCX
1882 CCX_CONTROL CCXControl; // Master administration state
1883 BOOLEAN CCXEnable; // Actual CCX state
1884 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
1885 USHORT CCXScanTime; // Time out to wait for beacon and probe response
1886 UCHAR CCXReqType; // Current processing CCX request type
1887 BSS_TABLE CCXBssTab; // BSS Table
1888 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
1889 USHORT FrameReportLen; // Current Frame report length
1890 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
1891 USHORT RPIDensity[8]; // Array for RPI density collection
1892 // Start address of each BSS table within FrameReportBuf
1893 // It's important to update the RxPower of the corresponding Bss
1894 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
1895 USHORT BeaconToken; // Token for beacon report
1896 ULONG LastBssIndex; // Most current reported Bss index
1897 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
1898 UCHAR RMReqCnt; // Number of measurement request saved.
1899 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
1900 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
1901 // It must be the same channel with maximum duration
1902 USHORT ParallelDuration; // Maximum duration for parallel measurement
1903 UCHAR ParallelChannel; // Only one channel with parallel measurement
1904 USHORT IAPPToken; // IAPP dialog token
1905 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
1906 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
1907 // Hack for channel load and noise histogram parameters
1908 UCHAR NHFactor; // Parameter for Noise histogram
1909 UCHAR CLFactor; // Parameter for channel load
1910
1911 UCHAR KRK[16]; //Key Refresh Key.
1912 UCHAR BTK[32]; //Base Transient Key
1913 BOOLEAN CCKMLinkUpFlag;
1914 ULONG CCKMRN; //(Re)Association request number.
1915 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
1916 UCHAR AironetCellPowerLimit; //in dBm
1917 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
1918 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
1919 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
1920 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
1921 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
1922 USHORT CCXAdjacentAPChannel;
1923 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
1924
1925 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
1926 BOOLEAN StaQuickResponeForRateUpTimerRunning;
1927
1928 UCHAR DtimCount; // 0.. DtimPeriod-1
1929 UCHAR DtimPeriod; // default = 3
1930
91980990
GKH
1931 ////////////////////////////////////////////////////////////////////////////////////////
1932 // This is only for WHQL test.
1933 BOOLEAN WhqlTest;
1934 ////////////////////////////////////////////////////////////////////////////////////////
1935
1936 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
1937 // Fast Roaming
1938 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming
1939 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
1940
91980990
GKH
1941 BOOLEAN IEEE8021X;
1942 BOOLEAN IEEE8021x_required_keys;
1943 CIPHER_KEY DesireSharedKey[4]; // Record user desired WEP keys
1944 UCHAR DesireSharedKeyId;
1945
1946 // 0: driver ignores wpa_supplicant
1947 // 1: wpa_supplicant initiates scanning and AP selection
1948 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
1949 UCHAR WpaSupplicantUP;
1950 UCHAR WpaSupplicantScanCount;
91980990
GKH
1951
1952 CHAR dev_name[16];
1953 USHORT OriDevType;
1954
1955 BOOLEAN bTGnWifiTest;
1956 BOOLEAN bScanReqIsFromWebUI;
1957
1958 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1959 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
1960 RT_HT_PHY_INFO DesiredHtPhyInfo;
1961 BOOLEAN bAutoTxRateSwitch;
1962
91980990 1963 UCHAR BBPR3;
91980990
GKH
1964} STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
1965
1966// This data structure keep the current active BSS/IBSS's configuration that this STA
1967// had agreed upon joining the network. Which means these parameters are usually decided
1968// by the BSS/IBSS creator instead of user configuration. Data in this data structurre
1969// is valid only when either ADHOC_ON(pAd) or INFRA_ON(pAd) is TRUE.
1970// Normally, after SCAN or failed roaming attempts, we need to recover back to
1971// the current active settings.
1972typedef struct _STA_ACTIVE_CONFIG {
1973 USHORT Aid;
1974 USHORT AtimWin; // in kusec; IBSS parameter set element
1975 USHORT CapabilityInfo;
1976 USHORT CfpMaxDuration;
1977 USHORT CfpPeriod;
1978
1979 // Copy supported rate from desired AP's beacon. We are trying to match
1980 // AP's supported and extended rate settings.
1981 UCHAR SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1982 UCHAR ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1983 UCHAR SupRateLen;
1984 UCHAR ExtRateLen;
1985 // Copy supported ht from desired AP's beacon. We are trying to match
1986 RT_HT_PHY_INFO SupportedPhyInfo;
1987 RT_HT_CAPABILITY SupportedHtPhy;
1988} STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
91980990
GKH
1989
1990// ----------- start of AP --------------------------
1991// AUTH-RSP State Machine Aux data structure
1992typedef struct _AP_MLME_AUX {
1993 UCHAR Addr[MAC_ADDR_LEN];
1994 USHORT Alg;
1995 CHAR Challenge[CIPHER_TEXT_LEN];
1996} AP_MLME_AUX, *PAP_MLME_AUX;
1997
1998// structure to define WPA Group Key Rekey Interval
1999typedef struct PACKED _RT_802_11_WPA_REKEY {
2000 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2001 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2002} RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2003
2004typedef struct _MAC_TABLE_ENTRY {
2005 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
2006 BOOLEAN ValidAsCLI; // Sta mode, set this TRUE after Linkup,too.
2007 BOOLEAN ValidAsWDS; // This is WDS Entry. only for AP mode.
2008 BOOLEAN ValidAsApCli; //This is a AP-Client entry, only for AP mode which enable AP-Client functions.
2009 BOOLEAN ValidAsMesh;
2010 BOOLEAN ValidAsDls; // This is DLS Entry. only for STA mode.
2011 BOOLEAN isCached;
2012 BOOLEAN bIAmBadAtheros; // Flag if this is Atheros chip that has IOT problem. We need to turn on RTS/CTS protection.
2013
2014 UCHAR EnqueueEapolStartTimerRunning; // Enqueue EAPoL-Start for triggering EAP SM
2015 //jan for wpa
2016 // record which entry revoke MIC Failure , if it leaves the BSS itself, AP won't update aMICFailTime MIB
2017 UCHAR CMTimerRunning;
2018 UCHAR apidx; // MBSS number
2019 UCHAR RSNIE_Len;
2020 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2021 UCHAR ANonce[LEN_KEY_DESC_NONCE];
2022 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2023 UCHAR PTK[64];
2024 UCHAR ReTryCounter;
2025 RALINK_TIMER_STRUCT RetryTimer;
2026 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2027 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2028 NDIS_802_11_WEP_STATUS WepStatus;
2029 AP_WPA_STATE WpaState;
2030 GTK_STATE GTKState;
2031 USHORT PortSecured;
2032 NDIS_802_11_PRIVACY_FILTER PrivacyFilter; // PrivacyFilter enum for 802.1X
2033 CIPHER_KEY PairwiseKey;
2034 PVOID pAd;
2035 INT PMKID_CacheIdx;
2036 UCHAR PMKID[LEN_PMKID];
2037
2038
2039 UCHAR Addr[MAC_ADDR_LEN];
2040 UCHAR PsMode;
2041 SST Sst;
2042 AUTH_STATE AuthState; // for SHARED KEY authentication state machine used only
2043 BOOLEAN IsReassocSta; // Indicate whether this is a reassociation procedure
2044 USHORT Aid;
2045 USHORT CapabilityInfo;
2046 UCHAR LastRssi;
2047 ULONG NoDataIdleCount;
2048 UINT16 StationKeepAliveCount; // unit: second
2049 ULONG PsQIdleCount;
2050 QUEUE_HEADER PsQueue;
2051
2052 UINT32 StaConnectTime; // the live time of this station since associated with AP
2053
91980990
GKH
2054 BOOLEAN bSendBAR;
2055 USHORT NoBADataCountDown;
2056
2057 UINT32 CachedBuf[16]; // UINT (4 bytes) for alignment
2058 UINT TxBFCount; // 3*3
91980990
GKH
2059 UINT FIFOCount;
2060 UINT DebugFIFOCount;
2061 UINT DebugTxCount;
2062 BOOLEAN bDlsInit;
2063
2064
2065//====================================================
2066//WDS entry needs these
2067// rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2068 UINT MatchWDSTabIdx;
2069 UCHAR MaxSupportedRate;
2070 UCHAR CurrTxRate;
2071 UCHAR CurrTxRateIndex;
2072 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2073 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
2074 UINT32 OneSecTxNoRetryOkCount;
2075 UINT32 OneSecTxRetryOkCount;
2076 UINT32 OneSecTxFailCount;
2077 UINT32 ContinueTxFailCnt;
2078 UINT32 CurrTxRateStableTime; // # of second in current TX rate
2079 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2080//====================================================
2081
91980990
GKH
2082 BOOLEAN fNoisyEnvironment;
2083 BOOLEAN fLastSecAccordingRSSI;
2084 UCHAR LastSecTxRateChangeAction; // 0: no change, 1:rate UP, 2:rate down
2085 CHAR LastTimeTxRateChangeAction; //Keep last time value of LastSecTxRateChangeAction
2086 ULONG LastTxOkCount;
2087 UCHAR PER[MAX_STEP_OF_TX_RATE_SWITCH];
2088
2089 // a bitmap of BOOLEAN flags. each bit represent an operation status of a particular
2090 // BOOLEAN control, either ON or OFF. These flags should always be accessed via
2091 // CLIENT_STATUS_TEST_FLAG(), CLIENT_STATUS_SET_FLAG(), CLIENT_STATUS_CLEAR_FLAG() macros.
2092 // see fOP_STATUS_xxx in RTMP_DEF.C for detail bit definition. fCLIENT_STATUS_AMSDU_INUSED
2093 ULONG ClientStatusFlags;
2094
91980990
GKH
2095 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
2096
91980990
GKH
2097 // HT EWC MIMO-N used parameters
2098 USHORT RXBAbitmap; // fill to on-chip RXWI_BA_BITMASK in 8.1.3RX attribute entry format
2099 USHORT TXBAbitmap; // This bitmap as originator, only keep in software used to mark AMPDU bit in TXWI
2100 USHORT TXAutoBAbitmap;
2101 USHORT BADeclineBitmap;
2102 USHORT BARecWcidArray[NUM_OF_TID]; // The mapping wcid of recipient session. if RXBAbitmap bit is masked
2103 USHORT BAOriWcidArray[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2104 USHORT BAOriSequence[NUM_OF_TID]; // The mapping wcid of originator session. if TXBAbitmap bit is masked
2105
2106 // 802.11n features.
2107 UCHAR MpduDensity;
2108 UCHAR MaxRAmpduFactor;
2109 UCHAR AMsduSize;
2110 UCHAR MmpsMode; // MIMO power save more.
2111
2112 HT_CAPABILITY_IE HTCapability;
91980990
GKH
2113
2114 BOOLEAN bAutoTxRateSwitch;
2115
2116 UCHAR RateLen;
2117 struct _MAC_TABLE_ENTRY *pNext;
2118 USHORT TxSeq[NUM_OF_TID];
2119 USHORT NonQosDataSeq;
2120
2121 RSSI_SAMPLE RssiSample;
2122
2123 UINT32 TXMCSExpected[16];
2124 UINT32 TXMCSSuccessful[16];
2125 UINT32 TXMCSFailed[16];
2126 UINT32 TXMCSAutoFallBack[16][16];
2127} MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2128
2129typedef struct _MAC_TABLE {
2130 USHORT Size;
2131 MAC_TABLE_ENTRY *Hash[HASH_TABLE_SIZE];
2132 MAC_TABLE_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2133 QUEUE_HEADER McastPsQueue;
2134 ULONG PsQIdleCount;
2135 BOOLEAN fAnyStationInPsm;
2136 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2137 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
91980990
GKH
2138 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2139 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2140 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2141 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2142 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
91980990
GKH
2143} MAC_TABLE, *PMAC_TABLE;
2144
91980990
GKH
2145#define IS_HT_STA(_pMacEntry) \
2146 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2147
2148#define IS_HT_RATE(_pMacEntry) \
2149 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2150
2151#define PEER_IS_HT_RATE(_pMacEntry) \
2152 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
91980990
GKH
2153
2154typedef struct _WDS_ENTRY {
2155 BOOLEAN Valid;
2156 UCHAR Addr[MAC_ADDR_LEN];
2157 ULONG NoDataIdleCount;
2158 struct _WDS_ENTRY *pNext;
2159} WDS_ENTRY, *PWDS_ENTRY;
2160
2161typedef struct _WDS_TABLE_ENTRY {
2162 USHORT Size;
2163 UCHAR WdsAddr[MAC_ADDR_LEN];
2164 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2165 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2166 UCHAR MaxSupportedRate;
2167 UCHAR CurrTxRate;
2168 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2169 USHORT OneSecTxOkCount;
2170 USHORT OneSecTxRetryOkCount;
2171 USHORT OneSecTxFailCount;
2172 ULONG CurrTxRateStableTime; // # of second in current TX rate
2173 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2174} WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2175
2176typedef struct _RT_802_11_WDS_ENTRY {
2177 PNET_DEV dev;
2178 UCHAR Valid;
2179 UCHAR PhyMode;
2180 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2181 UCHAR MacTabMatchWCID; // ASIC
2182 NDIS_802_11_WEP_STATUS WepStatus;
2183 UCHAR KeyIdx;
2184 CIPHER_KEY WdsKey;
2185 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2186 RT_HT_PHY_INFO DesiredHtPhyInfo;
2187 BOOLEAN bAutoTxRateSwitch;
2188 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2189} RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2190
2191typedef struct _WDS_TABLE {
2192 UCHAR Mode;
2193 ULONG Size;
2194 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2195} WDS_TABLE, *PWDS_TABLE;
2196
2197typedef struct _APCLI_STRUCT {
2198 PNET_DEV dev;
2199#ifdef RTL865X_SOC
2200 unsigned int mylinkid;
2201#endif
2202 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2203 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2204 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2205 UCHAR SsidLen;
2206 CHAR Ssid[MAX_LEN_OF_SSID];
2207
2208 UCHAR CfgSsidLen;
2209 CHAR CfgSsid[MAX_LEN_OF_SSID];
2210 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2211 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2212
2213 ULONG ApCliRcvBeaconTime;
2214
2215 ULONG CtrlCurrState;
2216 ULONG SyncCurrState;
2217 ULONG AuthCurrState;
2218 ULONG AssocCurrState;
2219 ULONG WpaPskCurrState;
2220
2221 USHORT AuthReqCnt;
2222 USHORT AssocReqCnt;
2223
2224 ULONG ClientStatusFlags;
2225 UCHAR MpduDensity;
2226
2227 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2228 NDIS_802_11_WEP_STATUS WepStatus;
2229
2230 // Add to support different cipher suite for WPA2/WPA mode
2231 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2232 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2233 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2234 USHORT RsnCapability;
2235
2236 UCHAR PSK[100]; // reserve PSK key material
2237 UCHAR PSKLen;
2238 UCHAR PMK[32]; // WPA PSK mode PMK
2239 UCHAR GTK[32]; // GTK from authenticator
2240
2241 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2242 UCHAR DefaultKeyId;
2243
2244 // store RSN_IE built by driver
2245 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2246 UCHAR RSNIE_Len;
2247
2248 // For WPA countermeasures
2249 ULONG LastMicErrorTime; // record last MIC error time
2250 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2251
2252 // For WPA-PSK supplicant state
2253 UCHAR SNonce[32]; // SNonce for WPA-PSK
2254 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2255
91980990
GKH
2256 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2257 RT_HT_PHY_INFO DesiredHtPhyInfo;
2258 BOOLEAN bAutoTxRateSwitch;
2259 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2260} APCLI_STRUCT, *PAPCLI_STRUCT;
2261
2262// ----------- end of AP ----------------------------
2263
91980990
GKH
2264struct wificonf
2265{
2266 BOOLEAN bShortGI;
2267 BOOLEAN bGreenField;
2268};
2269
2270
2271
2272
2273typedef struct _INF_PCI_CONFIG
2274{
2275 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2276}INF_PCI_CONFIG;
2277
2278typedef struct _INF_USB_CONFIG
2279{
2280 UINT BulkInEpAddr; // bulk-in endpoint address
2281 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2282
2283}INF_USB_CONFIG;
2284
2285#ifdef IKANOS_VX_1X0
2286 typedef void (*IkanosWlanTxCbFuncP)(void *, void *);
2287
2288 struct IKANOS_TX_INFO
2289 {
2290 struct net_device *netdev;
2291 IkanosWlanTxCbFuncP *fp;
2292 };
2293#endif // IKANOS_VX_1X0 //
2294
91980990
GKH
2295#ifdef DBG_DIAGNOSE
2296#define DIAGNOSE_TIME 10 // 10 sec
2297typedef struct _RtmpDiagStrcut_
2298{ // Diagnosis Related element
2299 unsigned char inited;
2300 unsigned char qIdx;
2301 unsigned char ArrayStartIdx;
2302 unsigned char ArrayCurIdx;
2303 // Tx Related Count
2304 USHORT TxDataCnt[DIAGNOSE_TIME];
2305 USHORT TxFailCnt[DIAGNOSE_TIME];
2306 USHORT TxDescCnt[DIAGNOSE_TIME][24]; // 3*3 // TxDesc queue length in scale of 0~14, >=15
2307 USHORT TxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2308 USHORT TxSWQueCnt[DIAGNOSE_TIME][9]; // TxSwQueue length in scale of 0, 1, 2, 3, 4, 5, 6, 7, >=8
2309
2310 USHORT TxAggCnt[DIAGNOSE_TIME];
2311 USHORT TxNonAggCnt[DIAGNOSE_TIME];
2312 USHORT TxAMPDUCnt[DIAGNOSE_TIME][24]; // 3*3 // 10 sec, TxDMA APMDU Aggregation count in range from 0 to 15, in setp of 1.
2313 USHORT TxRalinkCnt[DIAGNOSE_TIME]; // TxRalink Aggregation Count in 1 sec scale.
2314 USHORT TxAMSDUCnt[DIAGNOSE_TIME]; // TxAMSUD Aggregation Count in 1 sec scale.
2315
2316 // Rx Related Count
2317 USHORT RxDataCnt[DIAGNOSE_TIME]; // Rx Total Data count.
2318 USHORT RxCrcErrCnt[DIAGNOSE_TIME];
2319 USHORT RxMcsCnt[DIAGNOSE_TIME][24]; // 3*3
2320}RtmpDiagStruct;
2321#endif // DBG_DIAGNOSE //
2322
2323
2324//
2325// The miniport adapter structure
2326//
2327typedef struct _RTMP_ADAPTER
2328{
2329 PVOID OS_Cookie; // save specific structure relative to OS
2330 PNET_DEV net_dev;
2331 ULONG VirtualIfCnt;
2332
91980990
GKH
2333 USHORT LnkCtrlBitMask;
2334 USHORT RLnkCtrlConfiguration;
2335 USHORT RLnkCtrlOffset;
2336 USHORT HostLnkCtrlConfiguration;
2337 USHORT HostLnkCtrlOffset;
2338 USHORT PCIePowerSaveLevel;
2339 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
ed291e80
AM
2340 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count.
2341 USHORT ThisTbttNumToNextWakeUp;
2342 ULONG SameRxByteCount;
91980990
GKH
2343
2344
2345/*****************************************************************************************/
2346/* PCI related parameters */
2347/*****************************************************************************************/
2348 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2349
2350 UINT int_enable_reg;
2351 UINT int_disable_mask;
2352 UINT int_pending;
2353
2354
2355 RTMP_DMABUF TxBufSpace[NUM_OF_TX_RING]; // Shared memory of all 1st pre-allocated TxBuf associated with each TXD
2356 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2357 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2358 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
91980990
GKH
2359
2360
2361 NDIS_SPIN_LOCK irq_lock;
2362 UCHAR irq_disabled;
2363
2364
2365
2366/*****************************************************************************************/
2367 /* Both PCI/USB related parameters */
2368/*****************************************************************************************/
2369
2370
2371/*****************************************************************************************/
2372/* Tx related parameters */
2373/*****************************************************************************************/
2374 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2375 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2376
2377
2378 // resource for software backlog queues
2379 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
2380 NDIS_SPIN_LOCK TxSwQueueLock[NUM_OF_TX_RING]; // TxSwQueue spinlock
2381
2382 RTMP_DMABUF MgmtDescRing; // Shared memory for MGMT descriptors
2383 RTMP_MGMT_RING MgmtRing;
2384 NDIS_SPIN_LOCK MgmtRingLock; // Prio Ring spinlock
2385
2386
2387/*****************************************************************************************/
2388/* Rx related parameters */
2389/*****************************************************************************************/
2390
91980990
GKH
2391 RTMP_RX_RING RxRing;
2392 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
91980990
GKH
2393
2394
2395
2396/*****************************************************************************************/
2397/* ASIC related parameters */
2398/*****************************************************************************************/
2399 UINT32 MACVersion; // MAC version. Record rt2860C(0x28600100) or rt2860D (0x28600101)..
2400
2401 // ---------------------------
2402 // E2PROM
2403 // ---------------------------
2404 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2405 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2406 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2407 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2408
2409 // ---------------------------
2410 // BBP Control
2411 // ---------------------------
2412 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2413 UCHAR BbpRssiToDbmDelta;
2414 BBP_R66_TUNING BbpTuning;
2415
2416 // ----------------------------
2417 // RFIC control
2418 // ----------------------------
2419 UCHAR RfIcType; // RFIC_xxx
2420 ULONG RfFreqOffset; // Frequency offset for channel switching
2421 RTMP_RF_REGS LatchRfRegs; // latch th latest RF programming value since RF IC doesn't support READ
2422
2423 EEPROM_ANTENNA_STRUC Antenna; // Since ANtenna definition is different for a & g. We need to save it for future reference.
2424 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
2425
2426 // This soft Rx Antenna Diversity mechanism is used only when user set
2427 // RX Antenna = DIVERSITY ON
2428 SOFT_RX_ANT_DIVERSITY RxAnt;
2429
2430 UCHAR RFProgSeq;
2431 CHANNEL_TX_POWER TxPower[MAX_NUM_OF_CHANNELS]; // Store Tx power value for all channels.
2432 CHANNEL_TX_POWER ChannelList[MAX_NUM_OF_CHANNELS]; // list all supported channels for site survey
2433 CHANNEL_11J_TX_POWER TxPower11J[MAX_NUM_OF_11JCHANNELS]; // 802.11j channel and bw
2434 CHANNEL_11J_TX_POWER ChannelList11J[MAX_NUM_OF_11JCHANNELS]; // list all supported channels for site survey
2435
2436 UCHAR ChannelListNum; // number of channel in ChannelList[]
2437 UCHAR Bbp94;
2438 BOOLEAN BbpForCCK;
2439 ULONG Tx20MPwrCfgABand[5];
2440 ULONG Tx20MPwrCfgGBand[5];
2441 ULONG Tx40MPwrCfgABand[5];
2442 ULONG Tx40MPwrCfgGBand[5];
2443
2444 BOOLEAN bAutoTxAgcA; // Enable driver auto Tx Agc control
2445 UCHAR TssiRefA; // Store Tssi reference value as 25 temperature.
2446 UCHAR TssiPlusBoundaryA[5]; // Tssi boundary for increase Tx power to compensate.
2447 UCHAR TssiMinusBoundaryA[5]; // Tssi boundary for decrease Tx power to compensate.
2448 UCHAR TxAgcStepA; // Store Tx TSSI delta increment / decrement value
2449 CHAR TxAgcCompensateA; // Store the compensation (TxAgcStep * (idx-1))
2450
2451 BOOLEAN bAutoTxAgcG; // Enable driver auto Tx Agc control
2452 UCHAR TssiRefG; // Store Tssi reference value as 25 temperature.
2453 UCHAR TssiPlusBoundaryG[5]; // Tssi boundary for increase Tx power to compensate.
2454 UCHAR TssiMinusBoundaryG[5]; // Tssi boundary for decrease Tx power to compensate.
2455 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2456 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2457
2458 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2459 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2460 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2461 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2462 //---
2463
2464 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2465 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2466 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2467 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2468 //---
2469
2470 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2471 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2472 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2473 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2474
2475 // ----------------------------
2476 // LED control
2477 // ----------------------------
2478 MCU_LEDCS_STRUC LedCntl;
2479 USHORT Led1; // read from EEPROM 0x3c
2480 USHORT Led2; // EEPROM 0x3e
2481 USHORT Led3; // EEPROM 0x40
2482 UCHAR LedIndicatorStregth;
2483 UCHAR RssiSingalstrengthOffet;
2484 BOOLEAN bLedOnScanning;
2485 UCHAR LedStatus;
2486
2487/*****************************************************************************************/
2488/* 802.11 related parameters */
2489/*****************************************************************************************/
2490 // outgoing BEACON frame buffer and corresponding TXD
2491 TXWI_STRUC BeaconTxWI;
2492 PUCHAR BeaconBuf;
2493 USHORT BeaconOffset[HW_BEACON_MAX_COUNT];
2494
2495 // pre-build PS-POLL and NULL frame upon link up. for efficiency purpose.
2496 PSPOLL_FRAME PsPollFrame;
2497 HEADER_802_11 NullFrame;
2498
2499//=========AP===========
2500
2501
2502//=======STA===========
91980990
GKH
2503/* Modified by Wu Xi-Kun 4/21/2006 */
2504 // -----------------------------------------------
2505 // STA specific configuration & operation status
2506 // used only when pAd->OpMode == OPMODE_STA
2507 // -----------------------------------------------
2508 STA_ADMIN_CONFIG StaCfg; // user desired settings
2509 STA_ACTIVE_CONFIG StaActive; // valid only when ADHOC_ON(pAd) || INFRA_ON(pAd)
2510 CHAR nickname[IW_ESSID_MAX_SIZE+1]; // nickname, only used in the iwconfig i/f
2511 NDIS_MEDIA_STATE PreMediaState;
91980990
GKH
2512
2513//=======Common===========
2514 // OP mode: either AP or STA
2515 UCHAR OpMode; // OPMODE_STA, OPMODE_AP
2516
2517 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2518
91980990
GKH
2519
2520 // configuration: read from Registry & E2PROM
2521 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2522 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
2523 UCHAR CurrentAddress[MAC_ADDR_LEN]; // User changed MAC address
2524
2525 // ------------------------------------------------------
2526 // common configuration to both OPMODE_STA and OPMODE_AP
2527 // ------------------------------------------------------
2528 COMMON_CONFIG CommonCfg;
2529 MLME_STRUCT Mlme;
2530
2531 // AP needs those vaiables for site survey feature.
2532 MLME_AUX MlmeAux; // temporary settings used during MLME state machine
2533 BSS_TABLE ScanTab; // store the latest SCAN result
2534
2535 //About MacTab, the sta driver will use #0 and #1 for multicast and AP.
2536 MAC_TABLE MacTab; // ASIC on-chip WCID entry table. At TX, ASIC always use key according to this on-chip table.
2537 NDIS_SPIN_LOCK MacTabLock;
2538
91980990 2539 BA_TABLE BATable;
1623267a 2540
91980990
GKH
2541 NDIS_SPIN_LOCK BATabLock;
2542 RALINK_TIMER_STRUCT RECBATimer;
2543
2544 // encryption/decryption KEY tables
2545 CIPHER_KEY SharedKey[MAX_MBSSID_NUM][4]; // STA always use SharedKey[BSS0][0..3]
2546
2547 // RX re-assembly buffer for fragmentation
2548 FRAGMENT_FRAME FragFrame; // Frame storage for fragment frame
2549
2550 // various Counters
2551 COUNTER_802_3 Counters8023; // 802.3 counters
2552 COUNTER_802_11 WlanCounters; // 802.11 MIB counters
2553 COUNTER_RALINK RalinkCounters; // Ralink propriety counters
2554 COUNTER_DRS DrsCounters; // counters for Dynamic TX Rate Switching
2555 PRIVATE_STRUC PrivateInfo; // Private information & counters
2556
2557 // flags, see fRTMP_ADAPTER_xxx flags
2558 ULONG Flags; // Represent current device status
ed291e80 2559 ULONG PSFlags; // Power Save operation flag.
91980990
GKH
2560
2561 // current TX sequence #
2562 USHORT Sequence;
2563
91980990
GKH
2564 // Control disconnect / connect event generation
2565 //+++Didn't used anymore
2566 ULONG LinkDownTime;
2567 //---
2568 ULONG LastRxRate;
2569 ULONG LastTxRate;
2570 //+++Used only for Station
2571 BOOLEAN bConfigChanged; // Config Change flag for the same SSID setting
2572 //---
2573
2574 ULONG ExtraInfo; // Extra information for displaying status
2575 ULONG SystemErrorBitmap; // b0: E2PROM version error
2576
2577 //+++Didn't used anymore
2578 ULONG MacIcVersion; // MAC/BBP serial interface issue solved after ver.D
2579 //---
2580
2581 // ---------------------------
2582 // System event log
2583 // ---------------------------
2584 RT_802_11_EVENT_TABLE EventTab;
2585
2586
2587 BOOLEAN HTCEnable;
2588
2589 /*****************************************************************************************/
2590 /* Statistic related parameters */
2591 /*****************************************************************************************/
2592
2593 BOOLEAN bUpdateBcnCntDone;
2594 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2595 // ----------------------------
2596 // DEBUG paramerts
2597 // ----------------------------
2598 BOOLEAN bBanAllBaSetup;
2599 BOOLEAN bPromiscuous;
2600
2601 // ----------------------------
2602 // rt2860c emulation-use Parameters
2603 // ----------------------------
2604 ULONG rtsaccu[30];
2605 ULONG ctsaccu[30];
2606 ULONG cfendaccu[30];
2607 ULONG bacontent[16];
2608 ULONG rxint[RX_RING_SIZE+1];
2609 UCHAR rcvba[60];
2610 BOOLEAN bLinkAdapt;
2611 BOOLEAN bForcePrintTX;
2612 BOOLEAN bForcePrintRX;
2613 BOOLEAN bDisablescanning; //defined in RT2870 USB
2614 BOOLEAN bStaFifoTest;
2615 BOOLEAN bProtectionTest;
2616 BOOLEAN bHCCATest;
2617 BOOLEAN bGenOneHCCA;
2618 BOOLEAN bBroadComHT;
2619 //+++Following add from RT2870 USB.
2620 ULONG BulkOutReq;
2621 ULONG BulkOutComplete;
2622 ULONG BulkOutCompleteOther;
2623 ULONG BulkOutCompleteCancel; // seems not use now?
2624 ULONG BulkInReq;
2625 ULONG BulkInComplete;
2626 ULONG BulkInCompleteFail;
2627 //---
2628
2629 struct wificonf WIFItestbed;
2630
91980990 2631 struct reordering_mpdu_pool mpdu_blk_pool;
91980990
GKH
2632
2633 ULONG OneSecondnonBEpackets; // record non BE packets per second
2634
2635#if WIRELESS_EXT >= 12
2636 struct iw_statistics iw_stats;
2637#endif
2638
2639 struct net_device_stats stats;
2640
91980990
GKH
2641 ULONG TbttTickCount;
2642#ifdef PCI_MSI_SUPPORT
2643 BOOLEAN HaveMsi;
2644#endif // PCI_MSI_SUPPORT //
2645
2646
2647 UCHAR is_on;
2648
2649#define TIME_BASE (1000000/OS_HZ)
2650#define TIME_ONE_SECOND (1000000/TIME_BASE)
2651 UCHAR flg_be_adjust;
2652 ULONG be_adjust_last_time;
2653
91980990
GKH
2654#ifdef IKANOS_VX_1X0
2655 struct IKANOS_TX_INFO IkanosTxInfo;
2656 struct IKANOS_TX_INFO IkanosRxInfo[MAX_MBSSID_NUM + MAX_WDS_ENTRY + MAX_APCLI_NUM + MAX_MESH_NUM];
2657#endif // IKANOS_VX_1X0 //
2658
2659
2660#ifdef DBG_DIAGNOSE
2661 RtmpDiagStruct DiagStruct;
2662#endif // DBG_DIAGNOSE //
2663
2664
2665 UINT8 PM_FlgSuspend;
2666} RTMP_ADAPTER, *PRTMP_ADAPTER;
2667
2668//
2669// Cisco IAPP format
2670//
2671typedef struct _CISCO_IAPP_CONTENT_
2672{
2673 USHORT Length; //IAPP Length
2674 UCHAR MessageType; //IAPP type
2675 UCHAR FunctionCode; //IAPP function type
2676 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2677 UCHAR SourceMAC[MAC_ADDR_LEN];
2678 USHORT Tag; //Tag(element IE) - Adjacent AP report
2679 USHORT TagLength; //Length of element not including 4 byte header
2680 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2681 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2682 USHORT Channel;
2683 USHORT SsidLen;
2684 UCHAR Ssid[MAX_LEN_OF_SSID];
2685 USHORT Seconds; //Seconds that the client has been disassociated.
2686} CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2687
2688#define DELAYINTMASK 0x0003fffb
2689#define INTMASK 0x0003fffb
2690#define IndMask 0x0003fffc
2691#define RxINT 0x00000005 // Delayed Rx or indivi rx
2692#define TxDataInt 0x000000fa // Delayed Tx or indivi tx
2693#define TxMgmtInt 0x00000102 // Delayed Tx or indivi tx
2694#define TxCoherent 0x00020000 // tx coherent
2695#define RxCoherent 0x00010000 // rx coherent
2696#define McuCommand 0x00000200 // mcu
2697#define PreTBTTInt 0x00001000 // Pre-TBTT interrupt
2698#define TBTTInt 0x00000800 // TBTT interrupt
2699#define GPTimeOutInt 0x00008000 // GPtimeout interrupt
2700#define AutoWakeupInt 0x00004000 // AutoWakeupInt interrupt
2701#define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2702
2703
2704typedef struct _RX_BLK_
2705{
2706 RT28XX_RXD_STRUC RxD;
2707 PRXWI_STRUC pRxWI;
2708 PHEADER_802_11 pHeader;
2709 PNDIS_PACKET pRxPacket;
2710 UCHAR *pData;
2711 USHORT DataSize;
2712 USHORT Flags;
2713 UCHAR UserPriority; // for calculate TKIP MIC using
2714} RX_BLK;
2715
2716
2717#define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2718#define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2719#define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2720
2721
2722#define fRX_WDS 0x0001
2723#define fRX_AMSDU 0x0002
2724#define fRX_ARALINK 0x0004
2725#define fRX_HTC 0x0008
2726#define fRX_PAD 0x0010
2727#define fRX_AMPDU 0x0020
2728#define fRX_QOS 0x0040
2729#define fRX_INFRA 0x0080
2730#define fRX_EAP 0x0100
2731#define fRX_MESH 0x0200
2732#define fRX_APCLI 0x0400
2733#define fRX_DLS 0x0800
2734#define fRX_WPI 0x1000
2735
2736#define LENGTH_AMSDU_SUBFRAMEHEAD 14
2737#define LENGTH_ARALINK_SUBFRAMEHEAD 14
2738#define LENGTH_ARALINK_HEADER_FIELD 2
2739
2740#define TX_UNKOWN_FRAME 0x00
2741#define TX_MCAST_FRAME 0x01
2742#define TX_LEGACY_FRAME 0x02
2743#define TX_AMPDU_FRAME 0x04
2744#define TX_AMSDU_FRAME 0x08
2745#define TX_RALINK_FRAME 0x10
2746#define TX_FRAG_FRAME 0x20
2747
2748
2749// Currently the sizeof(TX_BLK) is 148 bytes.
2750typedef struct _TX_BLK_
2751{
2752 UCHAR QueIdx;
2753 UCHAR TxFrameType; // Indicate the Transmission type of the all frames in one batch
2754 UCHAR TotalFrameNum; // Total frame number want to send-out in one batch
2755 USHORT TotalFragNum; // Total frame fragments required in one batch
2756 USHORT TotalFrameLen; // Total length of all frames want to send-out in one batch
2757
2758 QUEUE_HEADER TxPacketList;
2759 MAC_TABLE_ENTRY *pMacEntry; // NULL: packet with 802.11 RA field is multicast/broadcast address
2760 HTTRANSMIT_SETTING *pTransmit;
2761
2762 // Following structure used for the characteristics of a specific packet.
2763 PNDIS_PACKET pPacket;
2764 PUCHAR pSrcBufHeader; // Reference to the head of sk_buff->data
2765 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
2766 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
2767 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
2768 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2769 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
2770 UCHAR HdrPadLen; // recording Header Padding Length;
2771 UCHAR apidx; // The interface associated to this packet
2772 UCHAR Wcid; // The MAC entry associated to this packet
2773 UCHAR UserPriority; // priority class of packet
2774 UCHAR FrameGap; // what kind of IFS this packet use
2775 UCHAR MpduReqNum; // number of fragments of this frame
2776 UCHAR TxRate; // TODO: Obsoleted? Should change to MCS?
2777 UCHAR CipherAlg; // cipher alogrithm
2778 PCIPHER_KEY pKey;
2779
2780
2781
2782 USHORT Flags; //See following definitions for detail.
2783
2784 //YOU SHOULD NOT TOUCH IT! Following parameters are used for hardware-depended layer.
2785 ULONG Priv; // Hardware specific value saved in here.
2786} TX_BLK, *PTX_BLK;
2787
2788
2789#define fTX_bRtsRequired 0x0001 // Indicate if need send RTS frame for protection. Not used in RT2860/RT2870.
2790#define fTX_bAckRequired 0x0002 // the packet need ack response
2791#define fTX_bPiggyBack 0x0004 // Legacy device use Piggback or not
2792#define fTX_bHTRate 0x0008 // allow to use HT rate
2793#define fTX_bForceNonQoS 0x0010 // force to transmit frame without WMM-QoS in HT mode
2794#define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
2795#define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
2796#define fTX_bWMM 0x0080 // QOS Data
2797
2798#define fTX_bClearEAPFrame 0x0100
2799
2800#define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
2801 do { \
2802 if (value) \
2803 (_pTxBlk->Flags |= _flag) \
2804 else \
2805 (_pTxBlk->Flags &= ~(_flag)) \
2806 }while(0)
2807
2808#define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2809#define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2810#define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2811
2812
2813
2814
2815
2816//------------------------------------------------------------------------------------------
2817
2818
91980990
GKH
2819//
2820// Enable & Disable NIC interrupt via writing interrupt mask register
2821// Since it use ADAPTER structure, it have to be put after structure definition.
2822//
2823__inline VOID NICDisableInterrupt(
2824 IN PRTMP_ADAPTER pAd)
2825{
2826 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
2827 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
2828 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
2829}
2830
2831__inline VOID NICEnableInterrupt(
2832 IN PRTMP_ADAPTER pAd)
2833{
2834 //
2835 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
2836 // To prevent System hang, we should enalbe the interrupt when
2837 // ASIC is already Wake Up.
2838 //
2839 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
2840 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
2841 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
2842 {
2843 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
2844 }
2845 //else
2846 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
2847
2848 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
2849 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
2850}
91980990 2851
91980990
GKH
2852static inline VOID ConvertMulticastIP2MAC(
2853 IN PUCHAR pIpAddr,
2854 IN PUCHAR *ppMacAddr,
2855 IN UINT16 ProtoType)
2856{
2857 if (pIpAddr == NULL)
2858 return;
2859
2860 if (ppMacAddr == NULL || *ppMacAddr == NULL)
2861 return;
2862
2863 switch (ProtoType)
2864 {
2865 case ETH_P_IPV6:
2866// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2867 *(*ppMacAddr) = 0x33;
2868 *(*ppMacAddr + 1) = 0x33;
2869 *(*ppMacAddr + 2) = pIpAddr[12];
2870 *(*ppMacAddr + 3) = pIpAddr[13];
2871 *(*ppMacAddr + 4) = pIpAddr[14];
2872 *(*ppMacAddr + 5) = pIpAddr[15];
2873 break;
2874
2875 case ETH_P_IP:
2876 default:
2877// memset(*ppMacAddr, 0, ETH_LENGTH_OF_ADDRESS);
2878 *(*ppMacAddr) = 0x01;
2879 *(*ppMacAddr + 1) = 0x00;
2880 *(*ppMacAddr + 2) = 0x5e;
2881 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
2882 *(*ppMacAddr + 4) = pIpAddr[2];
2883 *(*ppMacAddr + 5) = pIpAddr[3];
2884 break;
2885 }
2886
2887 return;
2888}
2889
2890BOOLEAN RTMPCheckForHang(
2891 IN NDIS_HANDLE MiniportAdapterContext
2892 );
2893
2894VOID RTMPHalt(
2895 IN NDIS_HANDLE MiniportAdapterContext
2896 );
2897
2898//
2899// Private routines in rtmp_init.c
2900//
2901NDIS_STATUS RTMPAllocAdapterBlock(
2902 IN PVOID handle,
2903 OUT PRTMP_ADAPTER *ppAdapter
2904 );
2905
2906NDIS_STATUS RTMPAllocTxRxRingMemory(
2907 IN PRTMP_ADAPTER pAd
2908 );
2909
2910NDIS_STATUS RTMPFindAdapter(
2911 IN PRTMP_ADAPTER pAd,
2912 IN NDIS_HANDLE WrapperConfigurationContext
2913 );
2914
2915NDIS_STATUS RTMPReadParametersHook(
2916 IN PRTMP_ADAPTER pAd
2917 );
2918
2919VOID RTMPFreeAdapter(
2920 IN PRTMP_ADAPTER pAd
2921 );
2922
2923NDIS_STATUS NICReadRegParameters(
2924 IN PRTMP_ADAPTER pAd,
2925 IN NDIS_HANDLE WrapperConfigurationContext
2926 );
2927
2928
2929VOID NICReadEEPROMParameters(
2930 IN PRTMP_ADAPTER pAd,
2931 IN PUCHAR mac_addr);
2932
2933VOID NICInitAsicFromEEPROM(
2934 IN PRTMP_ADAPTER pAd);
2935
2936VOID NICInitTxRxRingAndBacklogQueue(
2937 IN PRTMP_ADAPTER pAd);
2938
2939NDIS_STATUS NICInitializeAdapter(
2940 IN PRTMP_ADAPTER pAd,
2941 IN BOOLEAN bHardReset);
2942
2943NDIS_STATUS NICInitializeAsic(
2944 IN PRTMP_ADAPTER pAd,
2945 IN BOOLEAN bHardReset);
2946
ed291e80
AM
2947VOID NICRestoreBBPValue(
2948 IN PRTMP_ADAPTER pAd);
2949
91980990
GKH
2950VOID NICIssueReset(
2951 IN PRTMP_ADAPTER pAd);
2952
2953VOID RTMPRingCleanUp(
2954 IN PRTMP_ADAPTER pAd,
2955 IN UCHAR RingType);
2956
2957VOID RxTest(
2958 IN PRTMP_ADAPTER pAd);
2959
2960NDIS_STATUS DbgSendPacket(
2961 IN PRTMP_ADAPTER pAd,
2962 IN PNDIS_PACKET pPacket);
2963
2964VOID UserCfgInit(
2965 IN PRTMP_ADAPTER pAd);
2966
2967VOID NICResetFromError(
2968 IN PRTMP_ADAPTER pAd);
2969
2970VOID NICEraseFirmware(
2971 IN PRTMP_ADAPTER pAd);
2972
2973NDIS_STATUS NICLoadFirmware(
2974 IN PRTMP_ADAPTER pAd);
2975
2976NDIS_STATUS NICLoadRateSwitchingParams(
2977 IN PRTMP_ADAPTER pAd);
2978
2979BOOLEAN NICCheckForHang(
2980 IN PRTMP_ADAPTER pAd);
2981
2982VOID NICUpdateFifoStaCounters(
2983 IN PRTMP_ADAPTER pAd);
2984
2985VOID NICUpdateRawCounters(
2986 IN PRTMP_ADAPTER pAd);
2987
2988ULONG RTMPNotAllZero(
2989 IN PVOID pSrc1,
2990 IN ULONG Length);
2991
2992VOID RTMPZeroMemory(
2993 IN PVOID pSrc,
2994 IN ULONG Length);
2995
2996ULONG RTMPCompareMemory(
2997 IN PVOID pSrc1,
2998 IN PVOID pSrc2,
2999 IN ULONG Length);
3000
3001VOID RTMPMoveMemory(
3002 OUT PVOID pDest,
3003 IN PVOID pSrc,
3004 IN ULONG Length);
3005
3006VOID AtoH(
3007 char *src,
3008 UCHAR *dest,
3009 int destlen);
3010
3011UCHAR BtoH(
3012 char ch);
3013
3014VOID RTMPPatchMacBbpBug(
3015 IN PRTMP_ADAPTER pAd);
3016
3017VOID RTMPPatchCardBus(
3018 IN PRTMP_ADAPTER pAdapter);
3019
3020VOID RTMPPatchRalinkCardBus(
3021 IN PRTMP_ADAPTER pAdapter,
3022 IN ULONG Bus);
3023
3024ULONG RTMPReadCBConfig(
3025 IN ULONG Bus,
3026 IN ULONG Slot,
3027 IN ULONG Func,
3028 IN ULONG Offset);
3029
3030VOID RTMPWriteCBConfig(
3031 IN ULONG Bus,
3032 IN ULONG Slot,
3033 IN ULONG Func,
3034 IN ULONG Offset,
3035 IN ULONG Value);
3036
3037VOID RTMPInitTimer(
3038 IN PRTMP_ADAPTER pAd,
3039 IN PRALINK_TIMER_STRUCT pTimer,
3040 IN PVOID pTimerFunc,
3041 IN PVOID pData,
3042 IN BOOLEAN Repeat);
3043
3044VOID RTMPSetTimer(
3045 IN PRALINK_TIMER_STRUCT pTimer,
3046 IN ULONG Value);
3047
3048
3049VOID RTMPModTimer(
3050 IN PRALINK_TIMER_STRUCT pTimer,
3051 IN ULONG Value);
3052
3053VOID RTMPCancelTimer(
3054 IN PRALINK_TIMER_STRUCT pTimer,
3055 OUT BOOLEAN *pCancelled);
3056
3057VOID RTMPSetLED(
3058 IN PRTMP_ADAPTER pAd,
3059 IN UCHAR Status);
3060
3061VOID RTMPSetSignalLED(
3062 IN PRTMP_ADAPTER pAd,
3063 IN NDIS_802_11_RSSI Dbm);
3064
3065VOID RTMPEnableRxTx(
3066 IN PRTMP_ADAPTER pAd);
3067
3068//
3069// prototype in action.c
3070//
3071VOID ActionStateMachineInit(
3072 IN PRTMP_ADAPTER pAd,
3073 IN STATE_MACHINE *S,
3074 OUT STATE_MACHINE_FUNC Trans[]);
3075
3076VOID MlmeADDBAAction(
3077 IN PRTMP_ADAPTER pAd,
3078 IN MLME_QUEUE_ELEM *Elem);
3079
3080VOID MlmeDELBAAction(
3081 IN PRTMP_ADAPTER pAd,
3082 IN MLME_QUEUE_ELEM *Elem);
3083
3084VOID MlmeDLSAction(
3085 IN PRTMP_ADAPTER pAd,
3086 IN MLME_QUEUE_ELEM *Elem);
3087
3088VOID MlmeInvalidAction(
3089 IN PRTMP_ADAPTER pAd,
3090 IN MLME_QUEUE_ELEM *Elem);
3091
3092VOID MlmeQOSAction(
3093 IN PRTMP_ADAPTER pAd,
3094 IN MLME_QUEUE_ELEM *Elem);
3095
91980990
GKH
3096VOID PeerAddBAReqAction(
3097 IN PRTMP_ADAPTER pAd,
3098 IN MLME_QUEUE_ELEM *Elem);
3099
3100VOID PeerAddBARspAction(
3101 IN PRTMP_ADAPTER pAd,
3102 IN MLME_QUEUE_ELEM *Elem);
3103
3104VOID PeerDelBAAction(
3105 IN PRTMP_ADAPTER pAd,
3106 IN MLME_QUEUE_ELEM *Elem);
3107
3108VOID PeerBAAction(
3109 IN PRTMP_ADAPTER pAd,
3110 IN MLME_QUEUE_ELEM *Elem);
91980990
GKH
3111
3112VOID SendPSMPAction(
3113 IN PRTMP_ADAPTER pAd,
3114 IN UCHAR Wcid,
3115 IN UCHAR Psmp);
3116
91980990
GKH
3117VOID PeerRMAction(
3118 IN PRTMP_ADAPTER pAd,
3119 IN MLME_QUEUE_ELEM *Elem);
3120
3121VOID PeerPublicAction(
3122 IN PRTMP_ADAPTER pAd,
3123 IN MLME_QUEUE_ELEM *Elem);
3124
91980990
GKH
3125VOID StaPublicAction(
3126 IN PRTMP_ADAPTER pAd,
3127 IN UCHAR Bss2040Coexist);
91980990
GKH
3128
3129VOID PeerBSSTranAction(
3130 IN PRTMP_ADAPTER pAd,
3131 IN MLME_QUEUE_ELEM *Elem);
3132
91980990
GKH
3133VOID PeerHTAction(
3134 IN PRTMP_ADAPTER pAd,
3135 IN MLME_QUEUE_ELEM *Elem);
91980990
GKH
3136
3137VOID PeerQOSAction(
3138 IN PRTMP_ADAPTER pAd,
3139 IN MLME_QUEUE_ELEM *Elem);
3140
91980990
GKH
3141VOID RECBATimerTimeout(
3142 IN PVOID SystemSpecific1,
3143 IN PVOID FunctionContext,
3144 IN PVOID SystemSpecific2,
3145 IN PVOID SystemSpecific3);
3146
3147VOID ORIBATimerTimeout(
3148 IN PRTMP_ADAPTER pAd);
3149
3150VOID SendRefreshBAR(
3151 IN PRTMP_ADAPTER pAd,
3152 IN MAC_TABLE_ENTRY *pEntry);
91980990
GKH
3153
3154VOID ActHeaderInit(
3155 IN PRTMP_ADAPTER pAd,
3156 IN OUT PHEADER_802_11 pHdr80211,
3157 IN PUCHAR Addr1,
3158 IN PUCHAR Addr2,
3159 IN PUCHAR Addr3);
3160
3161VOID BarHeaderInit(
3162 IN PRTMP_ADAPTER pAd,
3163 IN OUT PFRAME_BAR pCntlBar,
3164 IN PUCHAR pDA,
3165 IN PUCHAR pSA);
3166
3167VOID InsertActField(
3168 IN PRTMP_ADAPTER pAd,
3169 OUT PUCHAR pFrameBuf,
3170 OUT PULONG pFrameLen,
3171 IN UINT8 Category,
3172 IN UINT8 ActCode);
3173
3174BOOLEAN QosBADataParse(
3175 IN PRTMP_ADAPTER pAd,
3176 IN BOOLEAN bAMSDU,
3177 IN PUCHAR p8023Header,
3178 IN UCHAR WCID,
3179 IN UCHAR TID,
3180 IN USHORT Sequence,
3181 IN UCHAR DataOffset,
3182 IN USHORT Datasize,
3183 IN UINT CurRxIndex);
3184
91980990
GKH
3185BOOLEAN CntlEnqueueForRecv(
3186 IN PRTMP_ADAPTER pAd,
3187 IN ULONG Wcid,
3188 IN ULONG MsgLen,
3189 IN PFRAME_BA_REQ pMsg);
3190
3191VOID BaAutoManSwitch(
3192 IN PRTMP_ADAPTER pAd);
91980990
GKH
3193
3194VOID HTIOTCheck(
3195 IN PRTMP_ADAPTER pAd,
3196 IN UCHAR BatRecIdx);
3197
3198//
3199// Private routines in rtmp_data.c
3200//
3201BOOLEAN RTMPHandleRxDoneInterrupt(
3202 IN PRTMP_ADAPTER pAd);
3203
3204VOID RTMPHandleTxDoneInterrupt(
3205 IN PRTMP_ADAPTER pAd);
3206
3207BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(
3208 IN PRTMP_ADAPTER pAd,
3209 IN INT_SOURCE_CSR_STRUC TxRingBitmap);
3210
3211VOID RTMPHandleMgmtRingDmaDoneInterrupt(
3212 IN PRTMP_ADAPTER pAd);
3213
3214VOID RTMPHandleTBTTInterrupt(
3215 IN PRTMP_ADAPTER pAd);
3216
3217VOID RTMPHandlePreTBTTInterrupt(
3218 IN PRTMP_ADAPTER pAd);
3219
3220void RTMPHandleTwakeupInterrupt(
3221 IN PRTMP_ADAPTER pAd);
3222
3223VOID RTMPHandleRxCoherentInterrupt(
3224 IN PRTMP_ADAPTER pAd);
3225
3226BOOLEAN TxFrameIsAggregatible(
3227 IN PRTMP_ADAPTER pAd,
3228 IN PUCHAR pPrevAddr1,
3229 IN PUCHAR p8023hdr);
3230
3231BOOLEAN PeerIsAggreOn(
3232 IN PRTMP_ADAPTER pAd,
3233 IN ULONG TxRate,
3234 IN PMAC_TABLE_ENTRY pMacEntry);
3235
3236NDIS_STATUS Sniff2BytesFromNdisBuffer(
3237 IN PNDIS_BUFFER pFirstBuffer,
3238 IN UCHAR DesiredOffset,
3239 OUT PUCHAR pByte0,
3240 OUT PUCHAR pByte1);
3241
3242NDIS_STATUS STASendPacket(
3243 IN PRTMP_ADAPTER pAd,
3244 IN PNDIS_PACKET pPacket);
3245
3246VOID STASendPackets(
3247 IN NDIS_HANDLE MiniportAdapterContext,
3248 IN PPNDIS_PACKET ppPacketArray,
3249 IN UINT NumberOfPackets);
3250
3251VOID RTMPDeQueuePacket(
3252 IN PRTMP_ADAPTER pAd,
3253 IN BOOLEAN bIntContext,
3254 IN UCHAR QueIdx,
3255 IN UCHAR Max_Tx_Packets);
3256
3257NDIS_STATUS RTMPHardTransmit(
3258 IN PRTMP_ADAPTER pAd,
3259 IN PNDIS_PACKET pPacket,
3260 IN UCHAR QueIdx,
3261 OUT PULONG pFreeTXDLeft);
3262
3263NDIS_STATUS STAHardTransmit(
3264 IN PRTMP_ADAPTER pAd,
3265 IN TX_BLK *pTxBlk,
3266 IN UCHAR QueIdx);
3267
3268VOID STARxEAPOLFrameIndicate(
3269 IN PRTMP_ADAPTER pAd,
3270 IN MAC_TABLE_ENTRY *pEntry,
3271 IN RX_BLK *pRxBlk,
3272 IN UCHAR FromWhichBSSID);
3273
3274NDIS_STATUS RTMPFreeTXDRequest(
3275 IN PRTMP_ADAPTER pAd,
3276 IN UCHAR RingType,
3277 IN UCHAR NumberRequired,
3278 IN PUCHAR FreeNumberIs);
3279
3280NDIS_STATUS MlmeHardTransmit(
3281 IN PRTMP_ADAPTER pAd,
3282 IN UCHAR QueIdx,
3283 IN PNDIS_PACKET pPacket);
3284
3285NDIS_STATUS MlmeHardTransmitMgmtRing(
3286 IN PRTMP_ADAPTER pAd,
3287 IN UCHAR QueIdx,
3288 IN PNDIS_PACKET pPacket);
3289
3290NDIS_STATUS MlmeHardTransmitTxRing(
3291 IN PRTMP_ADAPTER pAd,
3292 IN UCHAR QueIdx,
3293 IN PNDIS_PACKET pPacket);
3294
3295USHORT RTMPCalcDuration(
3296 IN PRTMP_ADAPTER pAd,
3297 IN UCHAR Rate,
3298 IN ULONG Size);
3299
3300VOID RTMPWriteTxWI(
3301 IN PRTMP_ADAPTER pAd,
3302 IN PTXWI_STRUC pTxWI,
3303 IN BOOLEAN FRAG,
3304 IN BOOLEAN CFACK,
3305 IN BOOLEAN InsTimestamp,
3306 IN BOOLEAN AMPDU,
3307 IN BOOLEAN Ack,
3308 IN BOOLEAN NSeq, // HW new a sequence.
3309 IN UCHAR BASize,
3310 IN UCHAR WCID,
3311 IN ULONG Length,
3312 IN UCHAR PID,
3313 IN UCHAR TID,
3314 IN UCHAR TxRate,
3315 IN UCHAR Txopmode,
3316 IN BOOLEAN CfAck,
3317 IN HTTRANSMIT_SETTING *pTransmit);
3318
3319
3320VOID RTMPWriteTxWI_Data(
3321 IN PRTMP_ADAPTER pAd,
3322 IN OUT PTXWI_STRUC pTxWI,
3323 IN TX_BLK *pTxBlk);
3324
3325
3326VOID RTMPWriteTxWI_Cache(
3327 IN PRTMP_ADAPTER pAd,
3328 IN OUT PTXWI_STRUC pTxWI,
3329 IN TX_BLK *pTxBlk);
3330
3331VOID RTMPWriteTxDescriptor(
3332 IN PRTMP_ADAPTER pAd,
3333 IN PTXD_STRUC pTxD,
3334 IN BOOLEAN bWIV,
3335 IN UCHAR QSEL);
3336
3337VOID RTMPSuspendMsduTransmission(
3338 IN PRTMP_ADAPTER pAd);
3339
3340VOID RTMPResumeMsduTransmission(
3341 IN PRTMP_ADAPTER pAd);
3342
3343NDIS_STATUS MiniportMMRequest(
3344 IN PRTMP_ADAPTER pAd,
3345 IN UCHAR QueIdx,
3346 IN PUCHAR pData,
3347 IN UINT Length);
3348
3349VOID RTMPSendNullFrame(
3350 IN PRTMP_ADAPTER pAd,
3351 IN UCHAR TxRate,
3352 IN BOOLEAN bQosNull);
3353
3354VOID RTMPSendDisassociationFrame(
3355 IN PRTMP_ADAPTER pAd);
3356
3357VOID RTMPSendRTSFrame(
3358 IN PRTMP_ADAPTER pAd,
3359 IN PUCHAR pDA,
3360 IN unsigned int NextMpduSize,
3361 IN UCHAR TxRate,
3362 IN UCHAR RTSRate,
3363 IN USHORT AckDuration,
3364 IN UCHAR QueIdx,
3365 IN UCHAR FrameGap);
3366
3367
3368NDIS_STATUS RTMPApplyPacketFilter(
3369 IN PRTMP_ADAPTER pAd,
3370 IN PRT28XX_RXD_STRUC pRxD,
3371 IN PHEADER_802_11 pHeader);
3372
3373PQUEUE_HEADER RTMPCheckTxSwQueue(
3374 IN PRTMP_ADAPTER pAd,
3375 OUT UCHAR *QueIdx);
3376
91980990
GKH
3377VOID RTMPReportMicError(
3378 IN PRTMP_ADAPTER pAd,
3379 IN PCIPHER_KEY pWpaKey);
3380
3381VOID WpaMicFailureReportFrame(
3382 IN PRTMP_ADAPTER pAd,
3383 IN MLME_QUEUE_ELEM *Elem);
3384
3385VOID WpaDisassocApAndBlockAssoc(
3386 IN PVOID SystemSpecific1,
3387 IN PVOID FunctionContext,
3388 IN PVOID SystemSpecific2,
3389 IN PVOID SystemSpecific3);
91980990
GKH
3390
3391NDIS_STATUS RTMPCloneNdisPacket(
3392 IN PRTMP_ADAPTER pAd,
3393 IN BOOLEAN pInsAMSDUHdr,
3394 IN PNDIS_PACKET pInPacket,
3395 OUT PNDIS_PACKET *ppOutPacket);
3396
3397NDIS_STATUS RTMPAllocateNdisPacket(
3398 IN PRTMP_ADAPTER pAd,
3399 IN PNDIS_PACKET *pPacket,
3400 IN PUCHAR pHeader,
3401 IN UINT HeaderLen,
3402 IN PUCHAR pData,
3403 IN UINT DataLen);
3404
3405VOID RTMPFreeNdisPacket(
3406 IN PRTMP_ADAPTER pAd,
3407 IN PNDIS_PACKET pPacket);
3408
3409BOOLEAN RTMPFreeTXDUponTxDmaDone(
3410 IN PRTMP_ADAPTER pAd,
3411 IN UCHAR QueIdx);
3412
3413BOOLEAN RTMPCheckDHCPFrame(
3414 IN PRTMP_ADAPTER pAd,
3415 IN PNDIS_PACKET pPacket);
3416
3417
3418BOOLEAN RTMPCheckEtherType(
3419 IN PRTMP_ADAPTER pAd,
3420 IN PNDIS_PACKET pPacket);
3421
3422
3423VOID RTMPCckBbpTuning(
3424 IN PRTMP_ADAPTER pAd,
3425 IN UINT TxRate);
3426
3427//
3428// Private routines in rtmp_wep.c
3429//
3430VOID RTMPInitWepEngine(
3431 IN PRTMP_ADAPTER pAd,
3432 IN PUCHAR pKey,
3433 IN UCHAR KeyId,
3434 IN UCHAR KeyLen,
3435 IN PUCHAR pDest);
3436
3437VOID RTMPEncryptData(
3438 IN PRTMP_ADAPTER pAd,
3439 IN PUCHAR pSrc,
3440 IN PUCHAR pDest,
3441 IN UINT Len);
3442
3443BOOLEAN RTMPDecryptData(
3444 IN PRTMP_ADAPTER pAdapter,
3445 IN PUCHAR pSrc,
3446 IN UINT Len,
3447 IN UINT idx);
3448
3449BOOLEAN RTMPSoftDecryptWEP(
3450 IN PRTMP_ADAPTER pAd,
3451 IN PUCHAR pData,
3452 IN ULONG DataByteCnt,
3453 IN PCIPHER_KEY pGroupKey);
3454
3455VOID RTMPSetICV(
3456 IN PRTMP_ADAPTER pAd,
3457 IN PUCHAR pDest);
3458
3459VOID ARCFOUR_INIT(
3460 IN PARCFOURCONTEXT Ctx,
3461 IN PUCHAR pKey,
3462 IN UINT KeyLen);
3463
3464UCHAR ARCFOUR_BYTE(
3465 IN PARCFOURCONTEXT Ctx);
3466
3467VOID ARCFOUR_DECRYPT(
3468 IN PARCFOURCONTEXT Ctx,
3469 IN PUCHAR pDest,
3470 IN PUCHAR pSrc,
3471 IN UINT Len);
3472
3473VOID ARCFOUR_ENCRYPT(
3474 IN PARCFOURCONTEXT Ctx,
3475 IN PUCHAR pDest,
3476 IN PUCHAR pSrc,
3477 IN UINT Len);
3478
3479VOID WPAARCFOUR_ENCRYPT(
3480 IN PARCFOURCONTEXT Ctx,
3481 IN PUCHAR pDest,
3482 IN PUCHAR pSrc,
3483 IN UINT Len);
3484
3485UINT RTMP_CALC_FCS32(
3486 IN UINT Fcs,
3487 IN PUCHAR Cp,
3488 IN INT Len);
3489
3490//
3491// MLME routines
3492//
3493
3494// Asic/RF/BBP related functions
3495
3496VOID AsicAdjustTxPower(
3497 IN PRTMP_ADAPTER pAd);
3498
3499VOID AsicUpdateProtect(
3500 IN PRTMP_ADAPTER pAd,
3501 IN USHORT OperaionMode,
3502 IN UCHAR SetMask,
3503 IN BOOLEAN bDisableBGProtect,
3504 IN BOOLEAN bNonGFExist);
3505
3506VOID AsicSwitchChannel(
3507 IN PRTMP_ADAPTER pAd,
3508 IN UCHAR Channel,
3509 IN BOOLEAN bScan);
3510
3511VOID AsicLockChannel(
3512 IN PRTMP_ADAPTER pAd,
3513 IN UCHAR Channel) ;
3514
3515VOID AsicAntennaSelect(
3516 IN PRTMP_ADAPTER pAd,
3517 IN UCHAR Channel);
3518
3519VOID AsicAntennaSetting(
3520 IN PRTMP_ADAPTER pAd,
3521 IN ABGBAND_STATE BandState);
3522
3523VOID AsicRfTuningExec(
3524 IN PVOID SystemSpecific1,
3525 IN PVOID FunctionContext,
3526 IN PVOID SystemSpecific2,
3527 IN PVOID SystemSpecific3);
3528
91980990
GKH
3529VOID AsicSleepThenAutoWakeup(
3530 IN PRTMP_ADAPTER pAd,
3531 IN USHORT TbttNumToNextWakeUp);
3532
3533VOID AsicForceSleep(
3534 IN PRTMP_ADAPTER pAd);
3535
3536VOID AsicForceWakeup(
3537 IN PRTMP_ADAPTER pAd,
ed291e80 3538 IN UCHAR Level);
91980990
GKH
3539
3540VOID AsicSetBssid(
3541 IN PRTMP_ADAPTER pAd,
3542 IN PUCHAR pBssid);
3543
3544VOID AsicSetMcastWC(
3545 IN PRTMP_ADAPTER pAd);
3546
3547VOID AsicDelWcidTab(
3548 IN PRTMP_ADAPTER pAd,
3549 IN UCHAR Wcid);
3550
3551VOID AsicEnableRDG(
3552 IN PRTMP_ADAPTER pAd);
3553
3554VOID AsicDisableRDG(
3555 IN PRTMP_ADAPTER pAd);
3556
3557VOID AsicDisableSync(
3558 IN PRTMP_ADAPTER pAd);
3559
3560VOID AsicEnableBssSync(
3561 IN PRTMP_ADAPTER pAd);
3562
3563VOID AsicEnableIbssSync(
3564 IN PRTMP_ADAPTER pAd);
3565
3566VOID AsicSetEdcaParm(
3567 IN PRTMP_ADAPTER pAd,
3568 IN PEDCA_PARM pEdcaParm);
3569
3570VOID AsicSetSlotTime(
3571 IN PRTMP_ADAPTER pAd,
3572 IN BOOLEAN bUseShortSlotTime);
3573
3574VOID AsicAddSharedKeyEntry(
3575 IN PRTMP_ADAPTER pAd,
3576 IN UCHAR BssIndex,
3577 IN UCHAR KeyIdx,
3578 IN UCHAR CipherAlg,
3579 IN PUCHAR pKey,
3580 IN PUCHAR pTxMic,
3581 IN PUCHAR pRxMic);
3582
3583VOID AsicRemoveSharedKeyEntry(
3584 IN PRTMP_ADAPTER pAd,
3585 IN UCHAR BssIndex,
3586 IN UCHAR KeyIdx);
3587
3588VOID AsicUpdateWCIDAttribute(
3589 IN PRTMP_ADAPTER pAd,
3590 IN USHORT WCID,
3591 IN UCHAR BssIndex,
3592 IN UCHAR CipherAlg,
3593 IN BOOLEAN bUsePairewiseKeyTable);
3594
3595VOID AsicUpdateWCIDIVEIV(
3596 IN PRTMP_ADAPTER pAd,
3597 IN USHORT WCID,
3598 IN ULONG uIV,
3599 IN ULONG uEIV);
3600
3601VOID AsicUpdateRxWCIDTable(
3602 IN PRTMP_ADAPTER pAd,
3603 IN USHORT WCID,
3604 IN PUCHAR pAddr);
3605
3606VOID AsicAddKeyEntry(
3607 IN PRTMP_ADAPTER pAd,
3608 IN USHORT WCID,
3609 IN UCHAR BssIndex,
3610 IN UCHAR KeyIdx,
3611 IN PCIPHER_KEY pCipherKey,
3612 IN BOOLEAN bUsePairewiseKeyTable,
3613 IN BOOLEAN bTxKey);
3614
3615VOID AsicAddPairwiseKeyEntry(
3616 IN PRTMP_ADAPTER pAd,
3617 IN PUCHAR pAddr,
3618 IN UCHAR WCID,
3619 IN CIPHER_KEY *pCipherKey);
3620
3621VOID AsicRemovePairwiseKeyEntry(
3622 IN PRTMP_ADAPTER pAd,
3623 IN UCHAR BssIdx,
3624 IN UCHAR Wcid);
3625
3626BOOLEAN AsicSendCommandToMcu(
3627 IN PRTMP_ADAPTER pAd,
3628 IN UCHAR Command,
3629 IN UCHAR Token,
3630 IN UCHAR Arg0,
3631 IN UCHAR Arg1);
3632
91980990
GKH
3633BOOLEAN AsicCheckCommanOk(
3634 IN PRTMP_ADAPTER pAd,
3635 IN UCHAR Command);
91980990
GKH
3636
3637VOID MacAddrRandomBssid(
3638 IN PRTMP_ADAPTER pAd,
3639 OUT PUCHAR pAddr);
3640
3641VOID MgtMacHeaderInit(
3642 IN PRTMP_ADAPTER pAd,
3643 IN OUT PHEADER_802_11 pHdr80211,
3644 IN UCHAR SubType,
3645 IN UCHAR ToDs,
3646 IN PUCHAR pDA,
3647 IN PUCHAR pBssid);
3648
3649VOID MlmeRadioOff(
3650 IN PRTMP_ADAPTER pAd);
3651
3652VOID MlmeRadioOn(
3653 IN PRTMP_ADAPTER pAd);
3654
3655
3656VOID BssTableInit(
3657 IN BSS_TABLE *Tab);
3658
91980990
GKH
3659VOID BATableInit(
3660 IN PRTMP_ADAPTER pAd,
3661 IN BA_TABLE *Tab);
91980990
GKH
3662
3663ULONG BssTableSearch(
3664 IN BSS_TABLE *Tab,
3665 IN PUCHAR pBssid,
3666 IN UCHAR Channel);
3667
3668ULONG BssSsidTableSearch(
3669 IN BSS_TABLE *Tab,
3670 IN PUCHAR pBssid,
3671 IN PUCHAR pSsid,
3672 IN UCHAR SsidLen,
3673 IN UCHAR Channel);
3674
3675ULONG BssTableSearchWithSSID(
3676 IN BSS_TABLE *Tab,
3677 IN PUCHAR Bssid,
3678 IN PUCHAR pSsid,
3679 IN UCHAR SsidLen,
3680 IN UCHAR Channel);
3681
3682VOID BssTableDeleteEntry(
3683 IN OUT PBSS_TABLE pTab,
3684 IN PUCHAR pBssid,
3685 IN UCHAR Channel);
3686
91980990
GKH
3687VOID BATableDeleteORIEntry(
3688 IN OUT PRTMP_ADAPTER pAd,
3689 IN BA_ORI_ENTRY *pBAORIEntry);
3690
3691VOID BATableDeleteRECEntry(
3692 IN OUT PRTMP_ADAPTER pAd,
3693 IN BA_REC_ENTRY *pBARECEntry);
3694
3695VOID BATableTearORIEntry(
3696 IN OUT PRTMP_ADAPTER pAd,
3697 IN UCHAR TID,
3698 IN UCHAR Wcid,
3699 IN BOOLEAN bForceDelete,
3700 IN BOOLEAN ALL);
3701
3702VOID BATableTearRECEntry(
3703 IN OUT PRTMP_ADAPTER pAd,
3704 IN UCHAR TID,
3705 IN UCHAR WCID,
3706 IN BOOLEAN ALL);
91980990
GKH
3707
3708VOID BssEntrySet(
3709 IN PRTMP_ADAPTER pAd,
3710 OUT PBSS_ENTRY pBss,
3711 IN PUCHAR pBssid,
3712 IN CHAR Ssid[],
3713 IN UCHAR SsidLen,
3714 IN UCHAR BssType,
3715 IN USHORT BeaconPeriod,
3716 IN PCF_PARM CfParm,
3717 IN USHORT AtimWin,
3718 IN USHORT CapabilityInfo,
3719 IN UCHAR SupRate[],
3720 IN UCHAR SupRateLen,
3721 IN UCHAR ExtRate[],
3722 IN UCHAR ExtRateLen,
3723 IN HT_CAPABILITY_IE *pHtCapability,
3724 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3725 IN UCHAR HtCapabilityLen,
3726 IN UCHAR AddHtInfoLen,
3727 IN UCHAR NewExtChanOffset,
3728 IN UCHAR Channel,
3729 IN CHAR Rssi,
3730 IN LARGE_INTEGER TimeStamp,
3731 IN UCHAR CkipFlag,
3732 IN PEDCA_PARM pEdcaParm,
3733 IN PQOS_CAPABILITY_PARM pQosCapability,
3734 IN PQBSS_LOAD_PARM pQbssLoad,
3735 IN USHORT LengthVIE,
3736 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3737
3738ULONG BssTableSetEntry(
3739 IN PRTMP_ADAPTER pAd,
3740 OUT PBSS_TABLE pTab,
3741 IN PUCHAR pBssid,
3742 IN CHAR Ssid[],
3743 IN UCHAR SsidLen,
3744 IN UCHAR BssType,
3745 IN USHORT BeaconPeriod,
3746 IN CF_PARM *CfParm,
3747 IN USHORT AtimWin,
3748 IN USHORT CapabilityInfo,
3749 IN UCHAR SupRate[],
3750 IN UCHAR SupRateLen,
3751 IN UCHAR ExtRate[],
3752 IN UCHAR ExtRateLen,
3753 IN HT_CAPABILITY_IE *pHtCapability,
3754 IN ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
3755 IN UCHAR HtCapabilityLen,
3756 IN UCHAR AddHtInfoLen,
3757 IN UCHAR NewExtChanOffset,
3758 IN UCHAR Channel,
3759 IN CHAR Rssi,
3760 IN LARGE_INTEGER TimeStamp,
3761 IN UCHAR CkipFlag,
3762 IN PEDCA_PARM pEdcaParm,
3763 IN PQOS_CAPABILITY_PARM pQosCapability,
3764 IN PQBSS_LOAD_PARM pQbssLoad,
3765 IN USHORT LengthVIE,
3766 IN PNDIS_802_11_VARIABLE_IEs pVIE);
3767
91980990
GKH
3768VOID BATableInsertEntry(
3769 IN PRTMP_ADAPTER pAd,
3770 IN USHORT Aid,
3771 IN USHORT TimeOutValue,
3772 IN USHORT StartingSeq,
3773 IN UCHAR TID,
3774 IN UCHAR BAWinSize,
3775 IN UCHAR OriginatorStatus,
3776 IN BOOLEAN IsRecipient);
91980990
GKH
3777
3778VOID BssTableSsidSort(
3779 IN PRTMP_ADAPTER pAd,
3780 OUT BSS_TABLE *OutTab,
3781 IN CHAR Ssid[],
3782 IN UCHAR SsidLen);
3783
3784VOID BssTableSortByRssi(
3785 IN OUT BSS_TABLE *OutTab);
3786
3787VOID BssCipherParse(
3788 IN OUT PBSS_ENTRY pBss);
3789
3790NDIS_STATUS MlmeQueueInit(
3791 IN MLME_QUEUE *Queue);
3792
3793VOID MlmeQueueDestroy(
3794 IN MLME_QUEUE *Queue);
3795
3796BOOLEAN MlmeEnqueue(
3797 IN PRTMP_ADAPTER pAd,
3798 IN ULONG Machine,
3799 IN ULONG MsgType,
3800 IN ULONG MsgLen,
3801 IN VOID *Msg);
3802
3803BOOLEAN MlmeEnqueueForRecv(
3804 IN PRTMP_ADAPTER pAd,
3805 IN ULONG Wcid,
3806 IN ULONG TimeStampHigh,
3807 IN ULONG TimeStampLow,
3808 IN UCHAR Rssi0,
3809 IN UCHAR Rssi1,
3810 IN UCHAR Rssi2,
3811 IN ULONG MsgLen,
3812 IN PVOID Msg,
3813 IN UCHAR Signal);
3814
3815
3816BOOLEAN MlmeDequeue(
3817 IN MLME_QUEUE *Queue,
3818 OUT MLME_QUEUE_ELEM **Elem);
3819
3820VOID MlmeRestartStateMachine(
3821 IN PRTMP_ADAPTER pAd);
3822
3823BOOLEAN MlmeQueueEmpty(
3824 IN MLME_QUEUE *Queue);
3825
3826BOOLEAN MlmeQueueFull(
3827 IN MLME_QUEUE *Queue);
3828
3829BOOLEAN MsgTypeSubst(
3830 IN PRTMP_ADAPTER pAd,
3831 IN PFRAME_802_11 pFrame,
3832 OUT INT *Machine,
3833 OUT INT *MsgType);
3834
3835VOID StateMachineInit(
3836 IN STATE_MACHINE *Sm,
3837 IN STATE_MACHINE_FUNC Trans[],
3838 IN ULONG StNr,
3839 IN ULONG MsgNr,
3840 IN STATE_MACHINE_FUNC DefFunc,
3841 IN ULONG InitState,
3842 IN ULONG Base);
3843
3844VOID StateMachineSetAction(
3845 IN STATE_MACHINE *S,
3846 IN ULONG St,
3847 ULONG Msg,
3848 IN STATE_MACHINE_FUNC F);
3849
3850VOID StateMachinePerformAction(
3851 IN PRTMP_ADAPTER pAd,
3852 IN STATE_MACHINE *S,
3853 IN MLME_QUEUE_ELEM *Elem);
3854
3855VOID Drop(
3856 IN PRTMP_ADAPTER pAd,
3857 IN MLME_QUEUE_ELEM *Elem);
3858
3859VOID AssocStateMachineInit(
3860 IN PRTMP_ADAPTER pAd,
3861 IN STATE_MACHINE *Sm,
3862 OUT STATE_MACHINE_FUNC Trans[]);
3863
3864VOID ReassocTimeout(
3865 IN PVOID SystemSpecific1,
3866 IN PVOID FunctionContext,
3867 IN PVOID SystemSpecific2,
3868 IN PVOID SystemSpecific3);
3869
3870VOID AssocTimeout(
3871 IN PVOID SystemSpecific1,
3872 IN PVOID FunctionContext,
3873 IN PVOID SystemSpecific2,
3874 IN PVOID SystemSpecific3);
3875
3876VOID DisassocTimeout(
3877 IN PVOID SystemSpecific1,
3878 IN PVOID FunctionContext,
3879 IN PVOID SystemSpecific2,
3880 IN PVOID SystemSpecific3);
3881
3882//----------------------------------------------
3883VOID MlmeDisassocReqAction(
3884 IN PRTMP_ADAPTER pAd,
3885 IN MLME_QUEUE_ELEM *Elem);
3886
3887VOID MlmeAssocReqAction(
3888 IN PRTMP_ADAPTER pAd,
3889 IN MLME_QUEUE_ELEM *Elem);
3890
3891VOID MlmeReassocReqAction(
3892 IN PRTMP_ADAPTER pAd,
3893 IN MLME_QUEUE_ELEM *Elem);
3894
3895VOID MlmeDisassocReqAction(
3896 IN PRTMP_ADAPTER pAd,
3897 IN MLME_QUEUE_ELEM *Elem);
3898
3899VOID PeerAssocRspAction(
3900 IN PRTMP_ADAPTER pAd,
3901 IN MLME_QUEUE_ELEM *Elem);
3902
3903VOID PeerReassocRspAction(
3904 IN PRTMP_ADAPTER pAd,
3905 IN MLME_QUEUE_ELEM *Elem);
3906
3907VOID PeerDisassocAction(
3908 IN PRTMP_ADAPTER pAd,
3909 IN MLME_QUEUE_ELEM *Elem);
3910
3911VOID DisassocTimeoutAction(
3912 IN PRTMP_ADAPTER pAd,
3913 IN MLME_QUEUE_ELEM *Elem);
3914
3915VOID AssocTimeoutAction(
3916 IN PRTMP_ADAPTER pAd,
3917 IN MLME_QUEUE_ELEM *Elem);
3918
3919VOID ReassocTimeoutAction(
3920 IN PRTMP_ADAPTER pAd,
3921 IN MLME_QUEUE_ELEM *Elem);
3922
3923VOID Cls3errAction(
3924 IN PRTMP_ADAPTER pAd,
3925 IN PUCHAR pAddr);
3926
3927VOID SwitchBetweenWepAndCkip(
3928 IN PRTMP_ADAPTER pAd);
3929
3930VOID InvalidStateWhenAssoc(
3931 IN PRTMP_ADAPTER pAd,
3932 IN MLME_QUEUE_ELEM *Elem);
3933
3934VOID InvalidStateWhenReassoc(
3935 IN PRTMP_ADAPTER pAd,
3936 IN MLME_QUEUE_ELEM *Elem);
3937
3938VOID InvalidStateWhenDisassociate(
3939 IN PRTMP_ADAPTER pAd,
3940 IN MLME_QUEUE_ELEM *Elem);
3941
3942
3943VOID ComposePsPoll(
3944 IN PRTMP_ADAPTER pAd);
3945
3946VOID ComposeNullFrame(
3947 IN PRTMP_ADAPTER pAd);
3948
3949VOID AssocPostProc(
3950 IN PRTMP_ADAPTER pAd,
3951 IN PUCHAR pAddr2,
3952 IN USHORT CapabilityInfo,
3953 IN USHORT Aid,
3954 IN UCHAR SupRate[],
3955 IN UCHAR SupRateLen,
3956 IN UCHAR ExtRate[],
3957 IN UCHAR ExtRateLen,
3958 IN PEDCA_PARM pEdcaParm,
3959 IN HT_CAPABILITY_IE *pHtCapability,
3960 IN UCHAR HtCapabilityLen,
3961 IN ADD_HT_INFO_IE *pAddHtInfo);
3962
3963VOID AuthStateMachineInit(
3964 IN PRTMP_ADAPTER pAd,
3965 IN PSTATE_MACHINE sm,
3966 OUT STATE_MACHINE_FUNC Trans[]);
3967
3968VOID AuthTimeout(
3969 IN PVOID SystemSpecific1,
3970 IN PVOID FunctionContext,
3971 IN PVOID SystemSpecific2,
3972 IN PVOID SystemSpecific3);
3973
3974VOID MlmeAuthReqAction(
3975 IN PRTMP_ADAPTER pAd,
3976 IN MLME_QUEUE_ELEM *Elem);
3977
3978VOID PeerAuthRspAtSeq2Action(
3979 IN PRTMP_ADAPTER pAd,
3980 IN MLME_QUEUE_ELEM *Elem);
3981
3982VOID PeerAuthRspAtSeq4Action(
3983 IN PRTMP_ADAPTER pAd,
3984 IN MLME_QUEUE_ELEM *Elem);
3985
3986VOID AuthTimeoutAction(
3987 IN PRTMP_ADAPTER pAd,
3988 IN MLME_QUEUE_ELEM *Elem);
3989
3990VOID Cls2errAction(
3991 IN PRTMP_ADAPTER pAd,
3992 IN PUCHAR pAddr);
3993
3994VOID MlmeDeauthReqAction(
3995 IN PRTMP_ADAPTER pAd,
3996 IN MLME_QUEUE_ELEM *Elem);
3997
3998VOID InvalidStateWhenAuth(
3999 IN PRTMP_ADAPTER pAd,
4000 IN MLME_QUEUE_ELEM *Elem);
4001
4002//=============================================
4003
4004VOID AuthRspStateMachineInit(
4005 IN PRTMP_ADAPTER pAd,
4006 IN PSTATE_MACHINE Sm,
4007 IN STATE_MACHINE_FUNC Trans[]);
4008
4009VOID PeerDeauthAction(
4010 IN PRTMP_ADAPTER pAd,
4011 IN MLME_QUEUE_ELEM *Elem);
4012
4013VOID PeerAuthSimpleRspGenAndSend(
4014 IN PRTMP_ADAPTER pAd,
4015 IN PHEADER_802_11 pHdr80211,
4016 IN USHORT Alg,
4017 IN USHORT Seq,
4018 IN USHORT Reason,
4019 IN USHORT Status);
4020
4021//
4022// Private routines in dls.c
4023//
4024
91980990
GKH
4025//========================================
4026
4027VOID SyncStateMachineInit(
4028 IN PRTMP_ADAPTER pAd,
4029 IN STATE_MACHINE *Sm,
4030 OUT STATE_MACHINE_FUNC Trans[]);
4031
4032VOID BeaconTimeout(
4033 IN PVOID SystemSpecific1,
4034 IN PVOID FunctionContext,
4035 IN PVOID SystemSpecific2,
4036 IN PVOID SystemSpecific3);
4037
4038VOID ScanTimeout(
4039 IN PVOID SystemSpecific1,
4040 IN PVOID FunctionContext,
4041 IN PVOID SystemSpecific2,
4042 IN PVOID SystemSpecific3);
4043
4044VOID MlmeScanReqAction(
4045 IN PRTMP_ADAPTER pAd,
4046 IN MLME_QUEUE_ELEM *Elem);
4047
4048VOID InvalidStateWhenScan(
4049 IN PRTMP_ADAPTER pAd,
4050 IN MLME_QUEUE_ELEM *Elem);
4051
4052VOID InvalidStateWhenJoin(
4053 IN PRTMP_ADAPTER pAd,
4054 IN MLME_QUEUE_ELEM *Elem);
4055
4056VOID InvalidStateWhenStart(
4057 IN PRTMP_ADAPTER pAd,
4058 IN MLME_QUEUE_ELEM *Elem);
4059
4060VOID PeerBeacon(
4061 IN PRTMP_ADAPTER pAd,
4062 IN MLME_QUEUE_ELEM *Elem);
4063
4064VOID EnqueueProbeRequest(
4065 IN PRTMP_ADAPTER pAd);
4066
4067BOOLEAN ScanRunning(
4068 IN PRTMP_ADAPTER pAd);
4069//=========================================
4070
4071VOID MlmeCntlInit(
4072 IN PRTMP_ADAPTER pAd,
4073 IN STATE_MACHINE *S,
4074 OUT STATE_MACHINE_FUNC Trans[]);
4075
4076VOID MlmeCntlMachinePerformAction(
4077 IN PRTMP_ADAPTER pAd,
4078 IN STATE_MACHINE *S,
4079 IN MLME_QUEUE_ELEM *Elem);
4080
4081VOID CntlIdleProc(
4082 IN PRTMP_ADAPTER pAd,
4083 IN MLME_QUEUE_ELEM *Elem);
4084
4085VOID CntlOidScanProc(
4086 IN PRTMP_ADAPTER pAd,
4087 IN MLME_QUEUE_ELEM *Elem);
4088
4089VOID CntlOidSsidProc(
4090 IN PRTMP_ADAPTER pAd,
4091 IN MLME_QUEUE_ELEM * Elem);
4092
4093VOID CntlOidRTBssidProc(
4094 IN PRTMP_ADAPTER pAd,
4095 IN MLME_QUEUE_ELEM * Elem);
4096
4097VOID CntlMlmeRoamingProc(
4098 IN PRTMP_ADAPTER pAd,
4099 IN MLME_QUEUE_ELEM * Elem);
4100
4101VOID CntlWaitDisassocProc(
4102 IN PRTMP_ADAPTER pAd,
4103 IN MLME_QUEUE_ELEM *Elem);
4104
4105VOID CntlWaitJoinProc(
4106 IN PRTMP_ADAPTER pAd,
4107 IN MLME_QUEUE_ELEM *Elem);
4108
4109VOID CntlWaitReassocProc(
4110 IN PRTMP_ADAPTER pAd,
4111 IN MLME_QUEUE_ELEM *Elem);
4112
4113VOID CntlWaitStartProc(
4114 IN PRTMP_ADAPTER pAd,
4115 IN MLME_QUEUE_ELEM *Elem);
4116
4117VOID CntlWaitAuthProc(
4118 IN PRTMP_ADAPTER pAd,
4119 IN MLME_QUEUE_ELEM *Elem);
4120
4121VOID CntlWaitAuthProc2(
4122 IN PRTMP_ADAPTER pAd,
4123 IN MLME_QUEUE_ELEM *Elem);
4124
4125VOID CntlWaitAssocProc(
4126 IN PRTMP_ADAPTER pAd,
4127 IN MLME_QUEUE_ELEM *Elem);
4128
91980990
GKH
4129VOID LinkUp(
4130 IN PRTMP_ADAPTER pAd,
4131 IN UCHAR BssType);
4132
4133VOID LinkDown(
4134 IN PRTMP_ADAPTER pAd,
4135 IN BOOLEAN IsReqFromAP);
4136
4137VOID IterateOnBssTab(
4138 IN PRTMP_ADAPTER pAd);
4139
4140VOID IterateOnBssTab2(
4141 IN PRTMP_ADAPTER pAd);;
4142
4143VOID JoinParmFill(
4144 IN PRTMP_ADAPTER pAd,
4145 IN OUT MLME_JOIN_REQ_STRUCT *JoinReq,
4146 IN ULONG BssIdx);
4147
4148VOID AssocParmFill(
4149 IN PRTMP_ADAPTER pAd,
4150 IN OUT MLME_ASSOC_REQ_STRUCT *AssocReq,
4151 IN PUCHAR pAddr,
4152 IN USHORT CapabilityInfo,
4153 IN ULONG Timeout,
4154 IN USHORT ListenIntv);
4155
4156VOID ScanParmFill(
4157 IN PRTMP_ADAPTER pAd,
4158 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4159 IN CHAR Ssid[],
4160 IN UCHAR SsidLen,
4161 IN UCHAR BssType,
4162 IN UCHAR ScanType);
4163
4164VOID DisassocParmFill(
4165 IN PRTMP_ADAPTER pAd,
4166 IN OUT MLME_DISASSOC_REQ_STRUCT *DisassocReq,
4167 IN PUCHAR pAddr,
4168 IN USHORT Reason);
4169
4170VOID StartParmFill(
4171 IN PRTMP_ADAPTER pAd,
4172 IN OUT MLME_START_REQ_STRUCT *StartReq,
4173 IN CHAR Ssid[],
4174 IN UCHAR SsidLen);
4175
4176VOID AuthParmFill(
4177 IN PRTMP_ADAPTER pAd,
4178 IN OUT MLME_AUTH_REQ_STRUCT *AuthReq,
4179 IN PUCHAR pAddr,
4180 IN USHORT Alg);
4181
4182VOID EnqueuePsPoll(
4183 IN PRTMP_ADAPTER pAd);
4184
4185VOID EnqueueBeaconFrame(
4186 IN PRTMP_ADAPTER pAd);
4187
4188VOID MlmeJoinReqAction(
4189 IN PRTMP_ADAPTER pAd,
4190 IN MLME_QUEUE_ELEM *Elem);
4191
4192VOID MlmeScanReqAction(
4193 IN PRTMP_ADAPTER pAd,
4194 IN MLME_QUEUE_ELEM *Elem);
4195
4196VOID MlmeStartReqAction(
4197 IN PRTMP_ADAPTER pAd,
4198 IN MLME_QUEUE_ELEM *Elem);
4199
4200VOID ScanTimeoutAction(
4201 IN PRTMP_ADAPTER pAd,
4202 IN MLME_QUEUE_ELEM *Elem);
4203
4204VOID BeaconTimeoutAtJoinAction(
4205 IN PRTMP_ADAPTER pAd,
4206 IN MLME_QUEUE_ELEM *Elem);
4207
4208VOID PeerBeaconAtScanAction(
4209 IN PRTMP_ADAPTER pAd,
4210 IN MLME_QUEUE_ELEM *Elem);
4211
4212VOID PeerBeaconAtJoinAction(
4213 IN PRTMP_ADAPTER pAd,
4214 IN MLME_QUEUE_ELEM *Elem);
4215
4216VOID PeerBeacon(
4217 IN PRTMP_ADAPTER pAd,
4218 IN MLME_QUEUE_ELEM *Elem);
4219
4220VOID PeerProbeReqAction(
4221 IN PRTMP_ADAPTER pAd,
4222 IN MLME_QUEUE_ELEM *Elem);
4223
4224VOID ScanNextChannel(
4225 IN PRTMP_ADAPTER pAd);
4226
4227ULONG MakeIbssBeacon(
4228 IN PRTMP_ADAPTER pAd);
4229
4230VOID CCXAdjacentAPReport(
4231 IN PRTMP_ADAPTER pAd);
4232
4233BOOLEAN MlmeScanReqSanity(
4234 IN PRTMP_ADAPTER pAd,
4235 IN VOID *Msg,
4236 IN ULONG MsgLen,
4237 OUT UCHAR *BssType,
4238 OUT CHAR ssid[],
4239 OUT UCHAR *SsidLen,
4240 OUT UCHAR *ScanType);
4241
4242BOOLEAN PeerBeaconAndProbeRspSanity(
4243 IN PRTMP_ADAPTER pAd,
4244 IN VOID *Msg,
4245 IN ULONG MsgLen,
4246 IN UCHAR MsgChannel,
4247 OUT PUCHAR pAddr2,
4248 OUT PUCHAR pBssid,
4249 OUT CHAR Ssid[],
4250 OUT UCHAR *pSsidLen,
4251 OUT UCHAR *pBssType,
4252 OUT USHORT *pBeaconPeriod,
4253 OUT UCHAR *pChannel,
4254 OUT UCHAR *pNewChannel,
4255 OUT LARGE_INTEGER *pTimestamp,
4256 OUT CF_PARM *pCfParm,
4257 OUT USHORT *pAtimWin,
4258 OUT USHORT *pCapabilityInfo,
4259 OUT UCHAR *pErp,
4260 OUT UCHAR *pDtimCount,
4261 OUT UCHAR *pDtimPeriod,
4262 OUT UCHAR *pBcastFlag,
4263 OUT UCHAR *pMessageToMe,
4264 OUT UCHAR SupRate[],
4265 OUT UCHAR *pSupRateLen,
4266 OUT UCHAR ExtRate[],
4267 OUT UCHAR *pExtRateLen,
4268 OUT UCHAR *pCkipFlag,
4269 OUT UCHAR *pAironetCellPowerLimit,
4270 OUT PEDCA_PARM pEdcaParm,
4271 OUT PQBSS_LOAD_PARM pQbssLoad,
4272 OUT PQOS_CAPABILITY_PARM pQosCapability,
4273 OUT ULONG *pRalinkIe,
4274 OUT UCHAR *pHtCapabilityLen,
91980990 4275 OUT UCHAR *pPreNHtCapabilityLen,
91980990
GKH
4276 OUT HT_CAPABILITY_IE *pHtCapability,
4277 OUT UCHAR *AddHtInfoLen,
4278 OUT ADD_HT_INFO_IE *AddHtInfo,
4279 OUT UCHAR *NewExtChannel,
4280 OUT USHORT *LengthVIE,
4281 OUT PNDIS_802_11_VARIABLE_IEs pVIE);
4282
4283BOOLEAN PeerAddBAReqActionSanity(
4284 IN PRTMP_ADAPTER pAd,
4285 IN VOID *pMsg,
4286 IN ULONG MsgLen,
4287 OUT PUCHAR pAddr2);
4288
4289BOOLEAN PeerAddBARspActionSanity(
4290 IN PRTMP_ADAPTER pAd,
4291 IN VOID *pMsg,
4292 IN ULONG MsgLen);
4293
4294BOOLEAN PeerDelBAActionSanity(
4295 IN PRTMP_ADAPTER pAd,
4296 IN UCHAR Wcid,
4297 IN VOID *pMsg,
4298 IN ULONG MsgLen);
4299
4300BOOLEAN MlmeAssocReqSanity(
4301 IN PRTMP_ADAPTER pAd,
4302 IN VOID *Msg,
4303 IN ULONG MsgLen,
4304 OUT PUCHAR pApAddr,
4305 OUT USHORT *CapabilityInfo,
4306 OUT ULONG *Timeout,
4307 OUT USHORT *ListenIntv);
4308
4309BOOLEAN MlmeAuthReqSanity(
4310 IN PRTMP_ADAPTER pAd,
4311 IN VOID *Msg,
4312 IN ULONG MsgLen,
4313 OUT PUCHAR pAddr,
4314 OUT ULONG *Timeout,
4315 OUT USHORT *Alg);
4316
4317BOOLEAN MlmeStartReqSanity(
4318 IN PRTMP_ADAPTER pAd,
4319 IN VOID *Msg,
4320 IN ULONG MsgLen,
4321 OUT CHAR Ssid[],
4322 OUT UCHAR *Ssidlen);
4323
4324BOOLEAN PeerAuthSanity(
4325 IN PRTMP_ADAPTER pAd,
4326 IN VOID *Msg,
4327 IN ULONG MsgLen,
4328 OUT PUCHAR pAddr,
4329 OUT USHORT *Alg,
4330 OUT USHORT *Seq,
4331 OUT USHORT *Status,
4332 OUT CHAR ChlgText[]);
4333
4334BOOLEAN PeerAssocRspSanity(
4335 IN PRTMP_ADAPTER pAd,
4336 IN VOID *pMsg,
4337 IN ULONG MsgLen,
4338 OUT PUCHAR pAddr2,
4339 OUT USHORT *pCapabilityInfo,
4340 OUT USHORT *pStatus,
4341 OUT USHORT *pAid,
4342 OUT UCHAR SupRate[],
4343 OUT UCHAR *pSupRateLen,
4344 OUT UCHAR ExtRate[],
4345 OUT UCHAR *pExtRateLen,
4346 OUT HT_CAPABILITY_IE *pHtCapability,
4347 OUT ADD_HT_INFO_IE *pAddHtInfo, // AP might use this additional ht info IE
4348 OUT UCHAR *pHtCapabilityLen,
4349 OUT UCHAR *pAddHtInfoLen,
4350 OUT UCHAR *pNewExtChannelOffset,
4351 OUT PEDCA_PARM pEdcaParm,
4352 OUT UCHAR *pCkipFlag);
4353
4354BOOLEAN PeerDisassocSanity(
4355 IN PRTMP_ADAPTER pAd,
4356 IN VOID *Msg,
4357 IN ULONG MsgLen,
4358 OUT PUCHAR pAddr2,
4359 OUT USHORT *Reason);
4360
4361BOOLEAN PeerWpaMessageSanity(
4362 IN PRTMP_ADAPTER pAd,
4363 IN PEAPOL_PACKET pMsg,
4364 IN ULONG MsgLen,
4365 IN UCHAR MsgType,
4366 IN MAC_TABLE_ENTRY *pEntry);
4367
4368BOOLEAN PeerDeauthSanity(
4369 IN PRTMP_ADAPTER pAd,
4370 IN VOID *Msg,
4371 IN ULONG MsgLen,
4372 OUT PUCHAR pAddr2,
4373 OUT USHORT *Reason);
4374
4375BOOLEAN PeerProbeReqSanity(
4376 IN PRTMP_ADAPTER pAd,
4377 IN VOID *Msg,
4378 IN ULONG MsgLen,
4379 OUT PUCHAR pAddr2,
4380 OUT CHAR Ssid[],
4381 OUT UCHAR *pSsidLen);
4382
4383BOOLEAN GetTimBit(
4384 IN CHAR *Ptr,
4385 IN USHORT Aid,
4386 OUT UCHAR *TimLen,
4387 OUT UCHAR *BcastFlag,
4388 OUT UCHAR *DtimCount,
4389 OUT UCHAR *DtimPeriod,
4390 OUT UCHAR *MessageToMe);
4391
4392UCHAR ChannelSanity(
4393 IN PRTMP_ADAPTER pAd,
4394 IN UCHAR channel);
4395
4396NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(
4397 IN PBSS_ENTRY pBss);
4398
4399BOOLEAN MlmeDelBAReqSanity(
4400 IN PRTMP_ADAPTER pAd,
4401 IN VOID *Msg,
4402 IN ULONG MsgLen);
4403
4404BOOLEAN MlmeAddBAReqSanity(
4405 IN PRTMP_ADAPTER pAd,
4406 IN VOID *Msg,
4407 IN ULONG MsgLen,
4408 OUT PUCHAR pAddr2);
4409
4410ULONG MakeOutgoingFrame(
4411 OUT CHAR *Buffer,
4412 OUT ULONG *Length, ...);
4413
4414VOID LfsrInit(
4415 IN PRTMP_ADAPTER pAd,
4416 IN ULONG Seed);
4417
4418UCHAR RandomByte(
4419 IN PRTMP_ADAPTER pAd);
4420
4421VOID AsicUpdateAutoFallBackTable(
4422 IN PRTMP_ADAPTER pAd,
4423 IN PUCHAR pTxRate);
4424
4425VOID MlmePeriodicExec(
4426 IN PVOID SystemSpecific1,
4427 IN PVOID FunctionContext,
4428 IN PVOID SystemSpecific2,
4429 IN PVOID SystemSpecific3);
4430
4431VOID LinkDownExec(
4432 IN PVOID SystemSpecific1,
4433 IN PVOID FunctionContext,
4434 IN PVOID SystemSpecific2,
4435 IN PVOID SystemSpecific3);
4436
4437VOID LinkUpExec(
4438 IN PVOID SystemSpecific1,
4439 IN PVOID FunctionContext,
4440 IN PVOID SystemSpecific2,
4441 IN PVOID SystemSpecific3);
4442
4443VOID STAMlmePeriodicExec(
4444 PRTMP_ADAPTER pAd);
4445
4446VOID MlmeAutoScan(
4447 IN PRTMP_ADAPTER pAd);
4448
4449VOID MlmeAutoReconnectLastSSID(
4450 IN PRTMP_ADAPTER pAd);
4451
4452BOOLEAN MlmeValidateSSID(
4453 IN PUCHAR pSsid,
4454 IN UCHAR SsidLen);
4455
4456VOID MlmeCheckForRoaming(
4457 IN PRTMP_ADAPTER pAd,
4458 IN ULONG Now32);
4459
4460VOID MlmeCheckForFastRoaming(
4461 IN PRTMP_ADAPTER pAd,
4462 IN ULONG Now);
4463
4464VOID MlmeDynamicTxRateSwitching(
4465 IN PRTMP_ADAPTER pAd);
4466
4467VOID MlmeSetTxRate(
4468 IN PRTMP_ADAPTER pAd,
4469 IN PMAC_TABLE_ENTRY pEntry,
4470 IN PRTMP_TX_RATE_SWITCH pTxRate);
4471
4472VOID MlmeSelectTxRateTable(
4473 IN PRTMP_ADAPTER pAd,
4474 IN PMAC_TABLE_ENTRY pEntry,
4475 IN PUCHAR *ppTable,
4476 IN PUCHAR pTableSize,
4477 IN PUCHAR pInitTxRateIdx);
4478
4479VOID MlmeCalculateChannelQuality(
4480 IN PRTMP_ADAPTER pAd,
4481 IN ULONG Now);
4482
4483VOID MlmeCheckPsmChange(
4484 IN PRTMP_ADAPTER pAd,
4485 IN ULONG Now32);
4486
4487VOID MlmeSetPsmBit(
4488 IN PRTMP_ADAPTER pAd,
4489 IN USHORT psm);
4490
4491VOID MlmeSetTxPreamble(
4492 IN PRTMP_ADAPTER pAd,
4493 IN USHORT TxPreamble);
4494
4495VOID UpdateBasicRateBitmap(
4496 IN PRTMP_ADAPTER pAd);
4497
4498VOID MlmeUpdateTxRates(
4499 IN PRTMP_ADAPTER pAd,
4500 IN BOOLEAN bLinkUp,
4501 IN UCHAR apidx);
4502
91980990
GKH
4503VOID MlmeUpdateHtTxRates(
4504 IN PRTMP_ADAPTER pAd,
4505 IN UCHAR apidx);
91980990
GKH
4506
4507VOID RTMPCheckRates(
4508 IN PRTMP_ADAPTER pAd,
4509 IN OUT UCHAR SupRate[],
4510 IN OUT UCHAR *SupRateLen);
4511
91980990
GKH
4512BOOLEAN RTMPCheckChannel(
4513 IN PRTMP_ADAPTER pAd,
4514 IN UCHAR CentralChannel,
4515 IN UCHAR Channel);
91980990
GKH
4516
4517BOOLEAN RTMPCheckHt(
4518 IN PRTMP_ADAPTER pAd,
4519 IN UCHAR Wcid,
4520 IN OUT HT_CAPABILITY_IE *pHtCapability,
4521 IN OUT ADD_HT_INFO_IE *pAddHtInfo);
4522
4523VOID StaQuickResponeForRateUpExec(
4524 IN PVOID SystemSpecific1,
4525 IN PVOID FunctionContext,
4526 IN PVOID SystemSpecific2,
4527 IN PVOID SystemSpecific3);
4528
4529VOID AsicBbpTuning1(
4530 IN PRTMP_ADAPTER pAd);
4531
4532VOID AsicBbpTuning2(
4533 IN PRTMP_ADAPTER pAd);
4534
4535VOID RTMPUpdateMlmeRate(
4536 IN PRTMP_ADAPTER pAd);
4537
4538CHAR RTMPMaxRssi(
4539 IN PRTMP_ADAPTER pAd,
4540 IN CHAR Rssi0,
4541 IN CHAR Rssi1,
4542 IN CHAR Rssi2);
4543
4544VOID AsicEvaluateRxAnt(
4545 IN PRTMP_ADAPTER pAd);
4546
4547VOID AsicRxAntEvalTimeout(
4548 IN PVOID SystemSpecific1,
4549 IN PVOID FunctionContext,
4550 IN PVOID SystemSpecific2,
4551 IN PVOID SystemSpecific3);
4552
4553VOID APSDPeriodicExec(
4554 IN PVOID SystemSpecific1,
4555 IN PVOID FunctionContext,
4556 IN PVOID SystemSpecific2,
4557 IN PVOID SystemSpecific3);
4558
4559BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(
4560 IN PRTMP_ADAPTER pAd,
4561 IN PMAC_TABLE_ENTRY pEntry);
4562
4563UCHAR RTMPStaFixedTxMode(
4564 IN PRTMP_ADAPTER pAd,
4565 IN PMAC_TABLE_ENTRY pEntry);
4566
4567VOID RTMPUpdateLegacyTxSetting(
4568 UCHAR fixed_tx_mode,
4569 PMAC_TABLE_ENTRY pEntry);
4570
4571BOOLEAN RTMPAutoRateSwitchCheck(
4572 IN PRTMP_ADAPTER pAd);
4573
4574NDIS_STATUS MlmeInit(
4575 IN PRTMP_ADAPTER pAd);
4576
4577VOID MlmeHandler(
4578 IN PRTMP_ADAPTER pAd);
4579
4580VOID MlmeHalt(
4581 IN PRTMP_ADAPTER pAd);
4582
4583VOID MlmeResetRalinkCounters(
4584 IN PRTMP_ADAPTER pAd);
4585
4586VOID BuildChannelList(
4587 IN PRTMP_ADAPTER pAd);
4588
4589UCHAR FirstChannel(
4590 IN PRTMP_ADAPTER pAd);
4591
4592UCHAR NextChannel(
4593 IN PRTMP_ADAPTER pAd,
4594 IN UCHAR channel);
4595
4596VOID ChangeToCellPowerLimit(
4597 IN PRTMP_ADAPTER pAd,
4598 IN UCHAR AironetCellPowerLimit);
4599
4600VOID RaiseClock(
4601 IN PRTMP_ADAPTER pAd,
4602 IN UINT32 *x);
4603
4604VOID LowerClock(
4605 IN PRTMP_ADAPTER pAd,
4606 IN UINT32 *x);
4607
4608USHORT ShiftInBits(
4609 IN PRTMP_ADAPTER pAd);
4610
4611VOID ShiftOutBits(
4612 IN PRTMP_ADAPTER pAd,
4613 IN USHORT data,
4614 IN USHORT count);
4615
4616VOID EEpromCleanup(
4617 IN PRTMP_ADAPTER pAd);
4618
4619VOID EWDS(
4620 IN PRTMP_ADAPTER pAd);
4621
4622VOID EWEN(
4623 IN PRTMP_ADAPTER pAd);
4624
4625USHORT RTMP_EEPROM_READ16(
4626 IN PRTMP_ADAPTER pAd,
4627 IN USHORT Offset);
4628
4629VOID RTMP_EEPROM_WRITE16(
4630 IN PRTMP_ADAPTER pAd,
4631 IN USHORT Offset,
4632 IN USHORT Data);
4633
4634//
4635// Prototypes of function definition in rtmp_tkip.c
4636//
4637VOID RTMPInitTkipEngine(
4638 IN PRTMP_ADAPTER pAd,
4639 IN PUCHAR pTKey,
4640 IN UCHAR KeyId,
4641 IN PUCHAR pTA,
4642 IN PUCHAR pMICKey,
4643 IN PUCHAR pTSC,
4644 OUT PULONG pIV16,
4645 OUT PULONG pIV32);
4646
4647VOID RTMPInitMICEngine(
4648 IN PRTMP_ADAPTER pAd,
4649 IN PUCHAR pKey,
4650 IN PUCHAR pDA,
4651 IN PUCHAR pSA,
4652 IN UCHAR UserPriority,
4653 IN PUCHAR pMICKey);
4654
4655BOOLEAN RTMPTkipCompareMICValue(
4656 IN PRTMP_ADAPTER pAd,
4657 IN PUCHAR pSrc,
4658 IN PUCHAR pDA,
4659 IN PUCHAR pSA,
4660 IN PUCHAR pMICKey,
4661 IN UCHAR UserPriority,
4662 IN UINT Len);
4663
4664VOID RTMPCalculateMICValue(
4665 IN PRTMP_ADAPTER pAd,
4666 IN PNDIS_PACKET pPacket,
4667 IN PUCHAR pEncap,
4668 IN PCIPHER_KEY pKey,
4669 IN UCHAR apidx);
4670
4671BOOLEAN RTMPTkipCompareMICValueWithLLC(
4672 IN PRTMP_ADAPTER pAd,
4673 IN PUCHAR pLLC,
4674 IN PUCHAR pSrc,
4675 IN PUCHAR pDA,
4676 IN PUCHAR pSA,
4677 IN PUCHAR pMICKey,
4678 IN UINT Len);
4679
4680VOID RTMPTkipAppendByte(
4681 IN PTKIP_KEY_INFO pTkip,
4682 IN UCHAR uChar);
4683
4684VOID RTMPTkipAppend(
4685 IN PTKIP_KEY_INFO pTkip,
4686 IN PUCHAR pSrc,
4687 IN UINT nBytes);
4688
4689VOID RTMPTkipGetMIC(
4690 IN PTKIP_KEY_INFO pTkip);
4691
4692BOOLEAN RTMPSoftDecryptTKIP(
4693 IN PRTMP_ADAPTER pAd,
4694 IN PUCHAR pData,
4695 IN ULONG DataByteCnt,
4696 IN UCHAR UserPriority,
4697 IN PCIPHER_KEY pWpaKey);
4698
4699BOOLEAN RTMPSoftDecryptAES(
4700 IN PRTMP_ADAPTER pAd,
4701 IN PUCHAR pData,
4702 IN ULONG DataByteCnt,
4703 IN PCIPHER_KEY pWpaKey);
4704
4705//
4706// Prototypes of function definition in cmm_info.c
4707//
4708NDIS_STATUS RTMPWPARemoveKeyProc(
4709 IN PRTMP_ADAPTER pAd,
4710 IN PVOID pBuf);
4711
4712VOID RTMPWPARemoveAllKeys(
4713 IN PRTMP_ADAPTER pAd);
4714
4715BOOLEAN RTMPCheckStrPrintAble(
4716 IN CHAR *pInPutStr,
4717 IN UCHAR strLen);
4718
4719VOID RTMPSetPhyMode(
4720 IN PRTMP_ADAPTER pAd,
4721 IN ULONG phymode);
4722
4723VOID RTMPUpdateHTIE(
4724 IN RT_HT_CAPABILITY *pRtHt,
4725 IN UCHAR *pMcsSet,
4726 OUT HT_CAPABILITY_IE *pHtCapability,
4727 OUT ADD_HT_INFO_IE *pAddHtInfo);
4728
4729VOID RTMPAddWcidAttributeEntry(
4730 IN PRTMP_ADAPTER pAd,
4731 IN UCHAR BssIdx,
4732 IN UCHAR KeyIdx,
4733 IN UCHAR CipherAlg,
4734 IN MAC_TABLE_ENTRY *pEntry);
4735
4736CHAR *GetEncryptType(
4737 CHAR enc);
4738
4739CHAR *GetAuthMode(
4740 CHAR auth);
4741
4742VOID RTMPIoctlGetSiteSurvey(
4743 IN PRTMP_ADAPTER pAdapter,
4744 IN struct iwreq *wrq);
4745
4746VOID RTMPIoctlGetMacTable(
4747 IN PRTMP_ADAPTER pAd,
4748 IN struct iwreq *wrq);
4749
4750VOID RTMPIndicateWPA2Status(
4751 IN PRTMP_ADAPTER pAdapter);
4752
4753VOID RTMPOPModeSwitching(
4754 IN PRTMP_ADAPTER pAd);
4755
91980990
GKH
4756VOID RTMPAddBSSIDCipher(
4757 IN PRTMP_ADAPTER pAd,
4758 IN UCHAR Aid,
4759 IN PNDIS_802_11_KEY pKey,
4760 IN UCHAR CipherAlg);
91980990 4761
91980990
GKH
4762VOID RTMPSetHT(
4763 IN PRTMP_ADAPTER pAd,
4764 IN OID_SET_HT_PHYMODE *pHTPhyMode);
4765
4766VOID RTMPSetIndividualHT(
4767 IN PRTMP_ADAPTER pAd,
4768 IN UCHAR apidx);
91980990
GKH
4769
4770VOID RTMPSendWirelessEvent(
4771 IN PRTMP_ADAPTER pAd,
4772 IN USHORT Event_flag,
4773 IN PUCHAR pAddr,
4774 IN UCHAR BssIdx,
4775 IN CHAR Rssi);
4776
4777VOID NICUpdateCntlCounters(
4778 IN PRTMP_ADAPTER pAd,
4779 IN PHEADER_802_11 pHeader,
4780 IN UCHAR SubType,
4781 IN PRXWI_STRUC pRxWI);
4782//
4783// prototype in wpa.c
4784//
4785BOOLEAN WpaMsgTypeSubst(
4786 IN UCHAR EAPType,
4787 OUT INT *MsgType);
4788
4789VOID WpaPskStateMachineInit(
4790 IN PRTMP_ADAPTER pAd,
4791 IN STATE_MACHINE *S,
4792 OUT STATE_MACHINE_FUNC Trans[]);
4793
4794VOID WpaEAPOLKeyAction(
4795 IN PRTMP_ADAPTER pAd,
4796 IN MLME_QUEUE_ELEM *Elem);
4797
4798VOID WpaPairMsg1Action(
4799 IN PRTMP_ADAPTER pAd,
4800 IN MLME_QUEUE_ELEM *Elem);
4801
4802VOID WpaPairMsg3Action(
4803 IN PRTMP_ADAPTER pAd,
4804 IN MLME_QUEUE_ELEM *Elem);
4805
4806VOID WpaGroupMsg1Action(
4807 IN PRTMP_ADAPTER pAd,
4808 IN MLME_QUEUE_ELEM *Elem);
4809
4810VOID WpaMacHeaderInit(
4811 IN PRTMP_ADAPTER pAd,
4812 IN OUT PHEADER_802_11 pHdr80211,
4813 IN UCHAR wep,
4814 IN PUCHAR pAddr1);
4815
4816VOID Wpa2PairMsg1Action(
4817 IN PRTMP_ADAPTER pAd,
4818 IN MLME_QUEUE_ELEM *Elem);
4819
4820VOID Wpa2PairMsg3Action(
4821 IN PRTMP_ADAPTER pAd,
4822 IN MLME_QUEUE_ELEM *Elem);
4823
4824BOOLEAN ParseKeyData(
4825 IN PRTMP_ADAPTER pAd,
4826 IN PUCHAR pKeyData,
4827 IN UCHAR KeyDataLen,
4828 IN UCHAR bPairewise);
4829
4830VOID RTMPToWirelessSta(
4831 IN PRTMP_ADAPTER pAd,
4832 IN PUCHAR pHeader802_3,
4833 IN UINT HdrLen,
4834 IN PUCHAR pData,
4835 IN UINT DataLen,
4836 IN BOOLEAN is4wayFrame);
4837
4838VOID HMAC_SHA1(
4839 IN UCHAR *text,
4840 IN UINT text_len,
4841 IN UCHAR *key,
4842 IN UINT key_len,
4843 IN UCHAR *digest);
4844
4845VOID PRF(
4846 IN UCHAR *key,
4847 IN INT key_len,
4848 IN UCHAR *prefix,
4849 IN INT prefix_len,
4850 IN UCHAR *data,
4851 IN INT data_len,
4852 OUT UCHAR *output,
4853 IN INT len);
4854
4855VOID CCKMPRF(
4856 IN UCHAR *key,
4857 IN INT key_len,
4858 IN UCHAR *data,
4859 IN INT data_len,
4860 OUT UCHAR *output,
4861 IN INT len);
4862
4863VOID WpaCountPTK(
4864 IN PRTMP_ADAPTER pAd,
4865 IN UCHAR *PMK,
4866 IN UCHAR *ANonce,
4867 IN UCHAR *AA,
4868 IN UCHAR *SNonce,
4869 IN UCHAR *SA,
4870 OUT UCHAR *output,
4871 IN UINT len);
4872
4873VOID GenRandom(
4874 IN PRTMP_ADAPTER pAd,
4875 IN UCHAR *macAddr,
4876 OUT UCHAR *random);
4877
4878//
4879// prototype in aironet.c
4880//
4881VOID AironetStateMachineInit(
4882 IN PRTMP_ADAPTER pAd,
4883 IN STATE_MACHINE *S,
4884 OUT STATE_MACHINE_FUNC Trans[]);
4885
4886VOID AironetMsgAction(
4887 IN PRTMP_ADAPTER pAd,
4888 IN MLME_QUEUE_ELEM *Elem);
4889
4890VOID AironetRequestAction(
4891 IN PRTMP_ADAPTER pAd,
4892 IN MLME_QUEUE_ELEM *Elem);
4893
4894VOID ChannelLoadRequestAction(
4895 IN PRTMP_ADAPTER pAd,
4896 IN UCHAR Index);
4897
4898VOID NoiseHistRequestAction(
4899 IN PRTMP_ADAPTER pAd,
4900 IN UCHAR Index);
4901
4902VOID BeaconRequestAction(
4903 IN PRTMP_ADAPTER pAd,
4904 IN UCHAR Index);
4905
4906VOID AironetReportAction(
4907 IN PRTMP_ADAPTER pAd,
4908 IN MLME_QUEUE_ELEM *Elem);
4909
4910VOID ChannelLoadReportAction(
4911 IN PRTMP_ADAPTER pAd,
4912 IN UCHAR Index);
4913
4914VOID NoiseHistReportAction(
4915 IN PRTMP_ADAPTER pAd,
4916 IN UCHAR Index);
4917
4918VOID AironetFinalReportAction(
4919 IN PRTMP_ADAPTER pAd);
4920
4921VOID BeaconReportAction(
4922 IN PRTMP_ADAPTER pAd,
4923 IN UCHAR Index);
4924
4925VOID AironetAddBeaconReport(
4926 IN PRTMP_ADAPTER pAd,
4927 IN ULONG Index,
4928 IN PMLME_QUEUE_ELEM pElem);
4929
4930VOID AironetCreateBeaconReportFromBssTable(
4931 IN PRTMP_ADAPTER pAd);
4932
4933VOID DBGPRINT_TX_RING(
4934 IN PRTMP_ADAPTER pAd,
4935 IN UCHAR QueIdx);
4936
4937VOID DBGPRINT_RX_RING(
4938 IN PRTMP_ADAPTER pAd);
4939
4940CHAR ConvertToRssi(
4941 IN PRTMP_ADAPTER pAd,
4942 IN CHAR Rssi,
4943 IN UCHAR RssiNumber);
4944
91980990
GKH
4945VOID APAsicEvaluateRxAnt(
4946 IN PRTMP_ADAPTER pAd);
4947
4948
4949VOID APAsicRxAntEvalTimeout(
4950 IN PRTMP_ADAPTER pAd);
4951
4952//
4953// function prototype in cmm_wpa.c
4954//
4955BOOLEAN RTMPCheckWPAframe(
4956 IN PRTMP_ADAPTER pAd,
4957 IN PMAC_TABLE_ENTRY pEntry,
4958 IN PUCHAR pData,
4959 IN ULONG DataByteCount,
4960 IN UCHAR FromWhichBSSID);
4961
4962VOID AES_GTK_KEY_UNWRAP(
4963 IN UCHAR *key,
4964 OUT UCHAR *plaintext,
4965 IN UCHAR c_len,
4966 IN UCHAR *ciphertext);
4967
4968BOOLEAN RTMPCheckRSNIE(
4969 IN PRTMP_ADAPTER pAd,
4970 IN PUCHAR pData,
4971 IN UCHAR DataLen,
4972 IN MAC_TABLE_ENTRY *pEntry,
4973 OUT UCHAR *Offset);
4974
4975BOOLEAN RTMPParseEapolKeyData(
4976 IN PRTMP_ADAPTER pAd,
4977 IN PUCHAR pKeyData,
4978 IN UCHAR KeyDataLen,
4979 IN UCHAR GroupKeyIndex,
4980 IN UCHAR MsgType,
4981 IN BOOLEAN bWPA2,
4982 IN MAC_TABLE_ENTRY *pEntry);
4983
4984VOID ConstructEapolMsg(
4985 IN PRTMP_ADAPTER pAd,
4986 IN UCHAR PeerAuthMode,
4987 IN UCHAR PeerWepStatus,
4988 IN UCHAR MyGroupKeyWepStatus,
4989 IN UCHAR MsgType,
4990 IN UCHAR DefaultKeyIdx,
4991 IN UCHAR *ReplayCounter,
4992 IN UCHAR *KeyNonce,
4993 IN UCHAR *TxRSC,
4994 IN UCHAR *PTK,
4995 IN UCHAR *GTK,
4996 IN UCHAR *RSNIE,
4997 IN UCHAR RSNIE_Len,
4998 OUT PEAPOL_PACKET pMsg);
4999
5000VOID CalculateMIC(
5001 IN PRTMP_ADAPTER pAd,
5002 IN UCHAR PeerWepStatus,
5003 IN UCHAR *PTK,
5004 OUT PEAPOL_PACKET pMsg);
5005
5006NDIS_STATUS RTMPSoftDecryptBroadCastData(
5007 IN PRTMP_ADAPTER pAd,
5008 IN RX_BLK *pRxBlk,
5009 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
5010 IN PCIPHER_KEY pShard_key);
5011
5012VOID ConstructEapolKeyData(
5013 IN PRTMP_ADAPTER pAd,
5014 IN UCHAR PeerAuthMode,
5015 IN UCHAR PeerWepStatus,
5016 IN UCHAR GroupKeyWepStatus,
5017 IN UCHAR MsgType,
5018 IN UCHAR DefaultKeyIdx,
5019 IN BOOLEAN bWPA2Capable,
5020 IN UCHAR *PTK,
5021 IN UCHAR *GTK,
5022 IN UCHAR *RSNIE,
5023 IN UCHAR RSNIE_LEN,
5024 OUT PEAPOL_PACKET pMsg);
5025
5026VOID RTMPMakeRSNIE(
5027 IN PRTMP_ADAPTER pAd,
5028 IN UINT AuthMode,
5029 IN UINT WepStatus,
5030 IN UCHAR apidx);
5031
5032//
5033// function prototype in ap_wpa.c
5034//
5035
5036BOOLEAN APWpaMsgTypeSubst(
5037 IN UCHAR EAPType,
5038 OUT INT *MsgType) ;
5039
5040MAC_TABLE_ENTRY *PACInquiry(
5041 IN PRTMP_ADAPTER pAd,
5042 IN ULONG Wcid);
5043
5044BOOLEAN RTMPCheckMcast(
5045 IN PRTMP_ADAPTER pAd,
5046 IN PEID_STRUCT eid_ptr,
5047 IN MAC_TABLE_ENTRY *pEntry);
5048
5049BOOLEAN RTMPCheckUcast(
5050 IN PRTMP_ADAPTER pAd,
5051 IN PEID_STRUCT eid_ptr,
5052 IN MAC_TABLE_ENTRY *pEntry);
5053
5054BOOLEAN RTMPCheckAUTH(
5055 IN PRTMP_ADAPTER pAd,
5056 IN PEID_STRUCT eid_ptr,
5057 IN MAC_TABLE_ENTRY *pEntry);
5058
5059VOID WPAStart4WayHS(
5060 IN PRTMP_ADAPTER pAd,
5061 IN MAC_TABLE_ENTRY *pEntry,
5062 IN ULONG TimeInterval);
5063
5064VOID WPAStart2WayGroupHS(
5065 IN PRTMP_ADAPTER pAd,
5066 IN MAC_TABLE_ENTRY *pEntry);
5067
5068VOID APWpaEAPPacketAction(
5069 IN PRTMP_ADAPTER pAd,
5070 IN MLME_QUEUE_ELEM *Elem);
5071
5072VOID APWpaEAPOLStartAction(
5073 IN PRTMP_ADAPTER pAd,
5074 IN MLME_QUEUE_ELEM *Elem);
5075
5076VOID APWpaEAPOLLogoffAction(
5077 IN PRTMP_ADAPTER pAd,
5078 IN MLME_QUEUE_ELEM *Elem);
5079
5080VOID APWpaEAPOLKeyAction(
5081 IN PRTMP_ADAPTER pAd,
5082 IN MLME_QUEUE_ELEM *Elem);
5083
5084VOID APWpaEAPOLASFAlertAction(
5085 IN PRTMP_ADAPTER pAd,
5086 IN MLME_QUEUE_ELEM *Elem);
5087
5088VOID HandleCounterMeasure(
5089 IN PRTMP_ADAPTER pAd,
5090 IN MAC_TABLE_ENTRY *pEntry);
5091
5092VOID PeerPairMsg2Action(
5093 IN PRTMP_ADAPTER pAd,
5094 IN MAC_TABLE_ENTRY *pEntry,
5095 IN MLME_QUEUE_ELEM *Elem);
5096
5097VOID PeerPairMsg4Action(
5098 IN PRTMP_ADAPTER pAd,
5099 IN MAC_TABLE_ENTRY *pEntry,
5100 IN MLME_QUEUE_ELEM *Elem);
5101
5102VOID CMTimerExec(
5103 IN PVOID SystemSpecific1,
5104 IN PVOID FunctionContext,
5105 IN PVOID SystemSpecific2,
5106 IN PVOID SystemSpecific3);
5107
5108VOID WPARetryExec(
5109 IN PVOID SystemSpecific1,
5110 IN PVOID FunctionContext,
5111 IN PVOID SystemSpecific2,
5112 IN PVOID SystemSpecific3);
5113
5114VOID EnqueueStartForPSKExec(
5115 IN PVOID SystemSpecific1,
5116 IN PVOID FunctionContext,
5117 IN PVOID SystemSpecific2,
5118 IN PVOID SystemSpecific3);
5119
5120VOID RTMPHandleSTAKey(
5121 IN PRTMP_ADAPTER pAdapter,
5122 IN MAC_TABLE_ENTRY *pEntry,
5123 IN MLME_QUEUE_ELEM *Elem);
5124
5125VOID PeerGroupMsg2Action(
5126 IN PRTMP_ADAPTER pAd,
5127 IN PMAC_TABLE_ENTRY pEntry,
5128 IN VOID *Msg,
5129 IN UINT MsgLen);
5130
5131VOID PairDisAssocAction(
5132 IN PRTMP_ADAPTER pAd,
5133 IN PMAC_TABLE_ENTRY pEntry,
5134 IN USHORT Reason);
5135
5136VOID MlmeDeAuthAction(
5137 IN PRTMP_ADAPTER pAd,
5138 IN PMAC_TABLE_ENTRY pEntry,
5139 IN USHORT Reason);
5140
5141VOID GREKEYPeriodicExec(
5142 IN PVOID SystemSpecific1,
5143 IN PVOID FunctionContext,
5144 IN PVOID SystemSpecific2,
5145 IN PVOID SystemSpecific3);
5146
5147VOID CountGTK(
5148 IN UCHAR *PMK,
5149 IN UCHAR *GNonce,
5150 IN UCHAR *AA,
5151 OUT UCHAR *output,
5152 IN UINT len);
5153
5154VOID GetSmall(
5155 IN PVOID pSrc1,
5156 IN PVOID pSrc2,
5157 OUT PUCHAR out,
5158 IN ULONG Length);
5159
5160VOID GetLarge(
5161 IN PVOID pSrc1,
5162 IN PVOID pSrc2,
5163 OUT PUCHAR out,
5164 IN ULONG Length);
5165
5166VOID APGenRandom(
5167 IN PRTMP_ADAPTER pAd,
5168 OUT UCHAR *random);
5169
5170VOID AES_GTK_KEY_WRAP(
5171 IN UCHAR *key,
5172 IN UCHAR *plaintext,
5173 IN UCHAR p_len,
5174 OUT UCHAR *ciphertext);
5175
5176VOID WpaSend(
5177 IN PRTMP_ADAPTER pAdapter,
5178 IN PUCHAR pPacket,
5179 IN ULONG Len);
5180
5181VOID APToWirelessSta(
5182 IN PRTMP_ADAPTER pAd,
5183 IN MAC_TABLE_ENTRY *pEntry,
5184 IN PUCHAR pHeader802_3,
5185 IN UINT HdrLen,
5186 IN PUCHAR pData,
5187 IN UINT DataLen,
5188 IN BOOLEAN bClearFrame);
5189
5190VOID RTMPAddPMKIDCache(
5191 IN PRTMP_ADAPTER pAd,
5192 IN INT apidx,
5193 IN PUCHAR pAddr,
5194 IN UCHAR *PMKID,
5195 IN UCHAR *PMK);
5196
5197INT RTMPSearchPMKIDCache(
5198 IN PRTMP_ADAPTER pAd,
5199 IN INT apidx,
5200 IN PUCHAR pAddr);
5201
5202VOID RTMPDeletePMKIDCache(
5203 IN PRTMP_ADAPTER pAd,
5204 IN INT apidx,
5205 IN INT idx);
5206
5207VOID RTMPMaintainPMKIDCache(
5208 IN PRTMP_ADAPTER pAd);
5209
5210VOID RTMPSendTriggerFrame(
5211 IN PRTMP_ADAPTER pAd,
5212 IN PVOID pBuffer,
5213 IN ULONG Length,
5214 IN UCHAR TxRate,
5215 IN BOOLEAN bQosNull);
5216
5217
5218/* timeout -- ms */
5219VOID RTMP_SetPeriodicTimer(
5220 IN NDIS_MINIPORT_TIMER *pTimer,
5221 IN unsigned long timeout);
5222
5223VOID RTMP_OS_Init_Timer(
5224 IN PRTMP_ADAPTER pAd,
5225 IN NDIS_MINIPORT_TIMER *pTimer,
5226 IN TIMER_FUNCTION function,
5227 IN PVOID data);
5228
5229VOID RTMP_OS_Add_Timer(
5230 IN NDIS_MINIPORT_TIMER *pTimer,
5231 IN unsigned long timeout);
5232
5233VOID RTMP_OS_Mod_Timer(
5234 IN NDIS_MINIPORT_TIMER *pTimer,
5235 IN unsigned long timeout);
5236
5237
5238VOID RTMP_OS_Del_Timer(
5239 IN NDIS_MINIPORT_TIMER *pTimer,
5240 OUT BOOLEAN *pCancelled);
5241
5242
5243VOID RTMP_OS_Release_Packet(
5244 IN PRTMP_ADAPTER pAd,
5245 IN PQUEUE_ENTRY pEntry);
5246
5247VOID RTMPusecDelay(
5248 IN ULONG usec);
5249
5250NDIS_STATUS os_alloc_mem(
5251 IN PRTMP_ADAPTER pAd,
5252 OUT PUCHAR *mem,
5253 IN ULONG size);
5254
5255NDIS_STATUS os_free_mem(
5256 IN PRTMP_ADAPTER pAd,
5257 IN PUCHAR mem);
5258
5259
5260void RTMP_AllocateSharedMemory(
5261 IN PRTMP_ADAPTER pAd,
5262 IN ULONG Length,
5263 IN BOOLEAN Cached,
5264 OUT PVOID *VirtualAddress,
5265 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5266
5267VOID RTMPFreeTxRxRingMemory(
5268 IN PRTMP_ADAPTER pAd);
5269
5270NDIS_STATUS AdapterBlockAllocateMemory(
5271 IN PVOID handle,
5272 OUT PVOID *ppAd);
5273
5274void RTMP_AllocateTxDescMemory(
5275 IN PRTMP_ADAPTER pAd,
5276 IN UINT Index,
5277 IN ULONG Length,
5278 IN BOOLEAN Cached,
5279 OUT PVOID *VirtualAddress,
5280 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5281
5282void RTMP_AllocateFirstTxBuffer(
5283 IN PRTMP_ADAPTER pAd,
5284 IN UINT Index,
5285 IN ULONG Length,
5286 IN BOOLEAN Cached,
5287 OUT PVOID *VirtualAddress,
5288 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5289
5290void RTMP_AllocateMgmtDescMemory(
5291 IN PRTMP_ADAPTER pAd,
5292 IN ULONG Length,
5293 IN BOOLEAN Cached,
5294 OUT PVOID *VirtualAddress,
5295 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5296
5297void RTMP_AllocateRxDescMemory(
5298 IN PRTMP_ADAPTER pAd,
5299 IN ULONG Length,
5300 IN BOOLEAN Cached,
5301 OUT PVOID *VirtualAddress,
5302 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5303
5304PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5305 IN PRTMP_ADAPTER pAd,
5306 IN ULONG Length,
5307 IN BOOLEAN Cached,
5308 OUT PVOID *VirtualAddress,
5309 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5310
5311PNDIS_PACKET RTMP_AllocateTxPacketBuffer(
5312 IN PRTMP_ADAPTER pAd,
5313 IN ULONG Length,
5314 IN BOOLEAN Cached,
5315 OUT PVOID *VirtualAddress);
5316
5317PNDIS_PACKET RTMP_AllocateFragPacketBuffer(
5318 IN PRTMP_ADAPTER pAd,
5319 IN ULONG Length);
5320
5321void RTMP_QueryPacketInfo(
5322 IN PNDIS_PACKET pPacket,
5323 OUT PACKET_INFO *pPacketInfo,
5324 OUT PUCHAR *pSrcBufVA,
5325 OUT UINT *pSrcBufLen);
5326
5327void RTMP_QueryNextPacketInfo(
5328 IN PNDIS_PACKET *ppPacket,
5329 OUT PACKET_INFO *pPacketInfo,
5330 OUT PUCHAR *pSrcBufVA,
5331 OUT UINT *pSrcBufLen);
5332
5333
5334BOOLEAN RTMP_FillTxBlkInfo(
5335 IN RTMP_ADAPTER *pAd,
5336 IN TX_BLK *pTxBlk);
5337
5338
5339PRTMP_SCATTER_GATHER_LIST
5340rt_get_sg_list_from_packet(PNDIS_PACKET pPacket, RTMP_SCATTER_GATHER_LIST *sg);
5341
5342
5343 void announce_802_3_packet(
5344 IN PRTMP_ADAPTER pAd,
5345 IN PNDIS_PACKET pPacket);
5346
5347
5348UINT BA_Reorder_AMSDU_Annnounce(
5349 IN PRTMP_ADAPTER pAd,
5350 IN PNDIS_PACKET pPacket);
5351
5352
5353UINT Handle_AMSDU_Packet(
5354 IN PRTMP_ADAPTER pAd,
5355 IN PUCHAR pData,
5356 IN ULONG DataSize,
5357 IN UCHAR FromWhichBSSID);
5358
5359
5360void convert_802_11_to_802_3_packet(
5361 IN PRTMP_ADAPTER pAd,
5362 IN PNDIS_PACKET pPacket,
5363 IN PUCHAR p8023hdr,
5364 IN PUCHAR pData,
5365 IN ULONG DataSize,
5366 IN UCHAR FromWhichBSSID);
5367
5368
5369PNET_DEV get_netdev_from_bssid(
5370 IN PRTMP_ADAPTER pAd,
5371 IN UCHAR FromWhichBSSID);
5372
5373
5374PNDIS_PACKET duplicate_pkt(
5375 IN PRTMP_ADAPTER pAd,
5376 IN PUCHAR pHeader802_3,
5377 IN UINT HdrLen,
5378 IN PUCHAR pData,
5379 IN ULONG DataSize,
5380 IN UCHAR FromWhichBSSID);
5381
5382
5383PNDIS_PACKET duplicate_pkt_with_TKIP_MIC(
5384 IN PRTMP_ADAPTER pAd,
5385 IN PNDIS_PACKET pOldPkt);
5386
5387PNDIS_PACKET duplicate_pkt_with_VLAN(
5388 IN PRTMP_ADAPTER pAd,
5389 IN PUCHAR pHeader802_3,
5390 IN UINT HdrLen,
5391 IN PUCHAR pData,
5392 IN ULONG DataSize,
5393 IN UCHAR FromWhichBSSID);
5394
5395PNDIS_PACKET duplicate_pkt_with_WPI(
5396 IN PRTMP_ADAPTER pAd,
5397 IN PNDIS_PACKET pPacket,
5398 IN UINT32 ext_head_len,
5399 IN UINT32 ext_tail_len);
5400
5401UCHAR VLAN_8023_Header_Copy(
5402 IN PRTMP_ADAPTER pAd,
5403 IN PUCHAR pHeader802_3,
5404 IN UINT HdrLen,
5405 OUT PUCHAR pData,
5406 IN UCHAR FromWhichBSSID);
5407
91980990
GKH
5408void ba_flush_reordering_timeout_mpdus(
5409 IN PRTMP_ADAPTER pAd,
5410 IN PBA_REC_ENTRY pBAEntry,
5411 IN ULONG Now32);
5412
5413
5414VOID BAOriSessionSetUp(
5415 IN PRTMP_ADAPTER pAd,
5416 IN MAC_TABLE_ENTRY *pEntry,
5417 IN UCHAR TID,
5418 IN USHORT TimeOut,
5419 IN ULONG DelayTime,
5420 IN BOOLEAN isForced);
5421
5422VOID BASessionTearDownALL(
5423 IN OUT PRTMP_ADAPTER pAd,
5424 IN UCHAR Wcid);
91980990
GKH
5425
5426BOOLEAN OS_Need_Clone_Packet(void);
5427
5428
5429VOID build_tx_packet(
5430 IN PRTMP_ADAPTER pAd,
5431 IN PNDIS_PACKET pPacket,
5432 IN PUCHAR pFrame,
5433 IN ULONG FrameLen);
5434
5435
5436VOID BAOriSessionTearDown(
5437 IN OUT PRTMP_ADAPTER pAd,
5438 IN UCHAR Wcid,
5439 IN UCHAR TID,
5440 IN BOOLEAN bPassive,
5441 IN BOOLEAN bForceSend);
5442
5443VOID BARecSessionTearDown(
5444 IN OUT PRTMP_ADAPTER pAd,
5445 IN UCHAR Wcid,
5446 IN UCHAR TID,
5447 IN BOOLEAN bPassive);
5448
5449BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5450void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5451
5452ULONG AutoChBssInsertEntry(
5453 IN PRTMP_ADAPTER pAd,
5454 IN PUCHAR pBssid,
5455 IN CHAR Ssid[],
5456 IN UCHAR SsidLen,
5457 IN UCHAR ChannelNo,
5458 IN CHAR Rssi);
5459
5460void AutoChBssTableInit(
5461 IN PRTMP_ADAPTER pAd);
5462
5463void ChannelInfoInit(
5464 IN PRTMP_ADAPTER pAd);
5465
5466void AutoChBssTableDestroy(
5467 IN PRTMP_ADAPTER pAd);
5468
5469void ChannelInfoDestroy(
5470 IN PRTMP_ADAPTER pAd);
5471
5472UCHAR New_ApAutoSelectChannel(
5473 IN PRTMP_ADAPTER pAd);
5474
5475BOOLEAN rtstrmactohex(
5476 IN char *s1,
5477 IN char *s2);
5478
5479BOOLEAN rtstrcasecmp(
5480 IN char *s1,
5481 IN char *s2);
5482
5483char *rtstrstruncasecmp(
5484 IN char *s1,
5485 IN char *s2);
5486
5487char *rtstrstr(
5488 IN const char * s1,
5489 IN const char * s2);
5490
5491char *rstrtok(
5492 IN char * s,
5493 IN const char * ct);
5494
5495int rtinet_aton(
5496 const char *cp,
5497 unsigned int *addr);
5498
5499////////// common ioctl functions //////////
5500INT Set_DriverVersion_Proc(
5501 IN PRTMP_ADAPTER pAd,
5502 IN PUCHAR arg);
5503
5504INT Set_CountryRegion_Proc(
5505 IN PRTMP_ADAPTER pAd,
5506 IN PUCHAR arg);
5507
5508INT Set_CountryRegionABand_Proc(
5509 IN PRTMP_ADAPTER pAd,
5510 IN PUCHAR arg);
5511
5512INT Set_WirelessMode_Proc(
5513 IN PRTMP_ADAPTER pAd,
5514 IN PUCHAR arg);
5515
5516INT Set_Channel_Proc(
5517 IN PRTMP_ADAPTER pAd,
5518 IN PUCHAR arg);
5519
5520INT Set_ShortSlot_Proc(
5521 IN PRTMP_ADAPTER pAd,
5522 IN PUCHAR arg);
5523
5524INT Set_TxPower_Proc(
5525 IN PRTMP_ADAPTER pAd,
5526 IN PUCHAR arg);
5527
5528INT Set_BGProtection_Proc(
5529 IN PRTMP_ADAPTER pAd,
5530 IN PUCHAR arg);
5531
5532INT Set_TxPreamble_Proc(
5533 IN PRTMP_ADAPTER pAd,
5534 IN PUCHAR arg);
5535
5536INT Set_RTSThreshold_Proc(
5537 IN PRTMP_ADAPTER pAd,
5538 IN PUCHAR arg);
5539
5540INT Set_FragThreshold_Proc(
5541 IN PRTMP_ADAPTER pAd,
5542 IN PUCHAR arg);
5543
5544INT Set_TxBurst_Proc(
5545 IN PRTMP_ADAPTER pAd,
5546 IN PUCHAR arg);
5547
5548#ifdef AGGREGATION_SUPPORT
5549INT Set_PktAggregate_Proc(
5550 IN PRTMP_ADAPTER pAd,
5551 IN PUCHAR arg);
5552#endif
5553
5554INT Set_IEEE80211H_Proc(
5555 IN PRTMP_ADAPTER pAd,
5556 IN PUCHAR arg);
5557
5558#ifdef DBG
5559INT Set_Debug_Proc(
5560 IN PRTMP_ADAPTER pAd,
5561 IN PUCHAR arg);
5562#endif
5563
5564INT Show_DescInfo_Proc(
5565 IN PRTMP_ADAPTER pAd,
5566 IN PUCHAR arg);
5567
5568INT Set_ResetStatCounter_Proc(
5569 IN PRTMP_ADAPTER pAd,
5570 IN PUCHAR arg);
5571
91980990
GKH
5572INT Set_BASetup_Proc(
5573 IN PRTMP_ADAPTER pAd,
5574 IN PUCHAR arg);
5575
5576INT Set_BADecline_Proc(
5577 IN PRTMP_ADAPTER pAd,
5578 IN PUCHAR arg);
5579
5580INT Set_BAOriTearDown_Proc(
5581 IN PRTMP_ADAPTER pAd,
5582 IN PUCHAR arg);
5583
5584INT Set_BARecTearDown_Proc(
5585 IN PRTMP_ADAPTER pAd,
5586 IN PUCHAR arg);
5587
5588INT Set_HtBw_Proc(
5589 IN PRTMP_ADAPTER pAd,
5590 IN PUCHAR arg);
5591
5592INT Set_HtMcs_Proc(
5593 IN PRTMP_ADAPTER pAd,
5594 IN PUCHAR arg);
5595
5596INT Set_HtGi_Proc(
5597 IN PRTMP_ADAPTER pAd,
5598 IN PUCHAR arg);
5599
5600INT Set_HtOpMode_Proc(
5601 IN PRTMP_ADAPTER pAd,
5602 IN PUCHAR arg);
5603
5604INT Set_HtStbc_Proc(
5605 IN PRTMP_ADAPTER pAd,
5606 IN PUCHAR arg);
5607
5608INT Set_HtHtc_Proc(
5609 IN PRTMP_ADAPTER pAd,
5610 IN PUCHAR arg);
5611
5612INT Set_HtExtcha_Proc(
5613 IN PRTMP_ADAPTER pAd,
5614 IN PUCHAR arg);
5615
5616INT Set_HtMpduDensity_Proc(
5617 IN PRTMP_ADAPTER pAd,
5618 IN PUCHAR arg);
5619
5620INT Set_HtBaWinSize_Proc(
5621 IN PRTMP_ADAPTER pAd,
5622 IN PUCHAR arg);
5623
5624INT Set_HtRdg_Proc(
5625 IN PRTMP_ADAPTER pAd,
5626 IN PUCHAR arg);
5627
5628INT Set_HtLinkAdapt_Proc(
5629 IN PRTMP_ADAPTER pAd,
5630 IN PUCHAR arg);
5631
5632INT Set_HtAmsdu_Proc(
5633 IN PRTMP_ADAPTER pAd,
5634 IN PUCHAR arg);
5635
5636INT Set_HtAutoBa_Proc(
5637 IN PRTMP_ADAPTER pAd,
5638 IN PUCHAR arg);
5639
5640INT Set_HtProtect_Proc(
5641 IN PRTMP_ADAPTER pAd,
5642 IN PUCHAR arg);
5643
5644INT Set_HtMimoPs_Proc(
5645 IN PRTMP_ADAPTER pAd,
5646 IN PUCHAR arg);
5647
5648
5649INT Set_ForceShortGI_Proc(
5650 IN PRTMP_ADAPTER pAd,
5651 IN PUCHAR arg);
5652
5653INT Set_ForceGF_Proc(
5654 IN PRTMP_ADAPTER pAd,
5655 IN PUCHAR arg);
5656
5657INT SetCommonHT(
5658 IN PRTMP_ADAPTER pAd);
5659
5660INT Set_SendPSMPAction_Proc(
5661 IN PRTMP_ADAPTER pAd,
5662 IN PUCHAR arg);
5663
5664INT Set_HtMIMOPSmode_Proc(
5665 IN PRTMP_ADAPTER pAd,
5666 IN PUCHAR arg);
5667
5668
5669INT Set_HtTxBASize_Proc(
5670 IN PRTMP_ADAPTER pAd,
5671 IN PUCHAR arg);
91980990 5672
91980990
GKH
5673//Dls , kathy
5674VOID RTMPSendDLSTearDownFrame(
5675 IN PRTMP_ADAPTER pAd,
5676 IN PUCHAR pDA);
5677
91980990
GKH
5678//Block ACK
5679VOID QueryBATABLE(
5680 IN PRTMP_ADAPTER pAd,
5681 OUT PQUERYBA_TABLE pBAT);
91980990 5682
91980990
GKH
5683INT WpaCheckEapCode(
5684 IN PRTMP_ADAPTER pAd,
5685 IN PUCHAR pFrame,
5686 IN USHORT FrameLen,
5687 IN USHORT OffSet);
5688
5689VOID WpaSendMicFailureToWpaSupplicant(
5690 IN PRTMP_ADAPTER pAd,
5691 IN BOOLEAN bUnicast);
5692
5693VOID SendAssocIEsToWpaSupplicant(
5694 IN PRTMP_ADAPTER pAd);
91980990 5695
91980990
GKH
5696int wext_notify_event_assoc(
5697 IN RTMP_ADAPTER *pAd);
91980990 5698
91980990
GKH
5699VOID Handle_BSS_Width_Trigger_Events(
5700 IN PRTMP_ADAPTER pAd);
5701
5702void build_ext_channel_switch_ie(
5703 IN PRTMP_ADAPTER pAd,
5704 IN HT_EXT_CHANNEL_SWITCH_ANNOUNCEMENT_IE *pIE);
91980990
GKH
5705
5706BOOLEAN APRxDoneInterruptHandle(
5707 IN PRTMP_ADAPTER pAd);
5708
5709BOOLEAN STARxDoneInterruptHandle(
5710 IN PRTMP_ADAPTER pAd,
5711 IN BOOLEAN argc);
5712
91980990
GKH
5713// AMPDU packet indication
5714VOID Indicate_AMPDU_Packet(
5715 IN PRTMP_ADAPTER pAd,
5716 IN RX_BLK *pRxBlk,
5717 IN UCHAR FromWhichBSSID);
5718
5719// AMSDU packet indication
5720VOID Indicate_AMSDU_Packet(
5721 IN PRTMP_ADAPTER pAd,
5722 IN RX_BLK *pRxBlk,
5723 IN UCHAR FromWhichBSSID);
91980990
GKH
5724
5725// Normal legacy Rx packet indication
5726VOID Indicate_Legacy_Packet(
5727 IN PRTMP_ADAPTER pAd,
5728 IN RX_BLK *pRxBlk,
5729 IN UCHAR FromWhichBSSID);
5730
5731VOID Indicate_EAPOL_Packet(
5732 IN PRTMP_ADAPTER pAd,
5733 IN RX_BLK *pRxBlk,
5734 IN UCHAR FromWhichBSSID);
5735
5736void update_os_packet_info(
5737 IN PRTMP_ADAPTER pAd,
5738 IN RX_BLK *pRxBlk,
5739 IN UCHAR FromWhichBSSID);
5740
5741void wlan_802_11_to_802_3_packet(
5742 IN PRTMP_ADAPTER pAd,
5743 IN RX_BLK *pRxBlk,
5744 IN PUCHAR pHeader802_3,
5745 IN UCHAR FromWhichBSSID);
5746
5747UINT deaggregate_AMSDU_announce(
5748 IN PRTMP_ADAPTER pAd,
5749 PNDIS_PACKET pPacket,
5750 IN PUCHAR pData,
5751 IN ULONG DataSize);
5752
91980990
GKH
5753// remove LLC and get 802_3 Header
5754#define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
5755{ \
5756 PUCHAR _pRemovedLLCSNAP = NULL, _pDA, _pSA; \
5757 \
5758 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) \
5759 { \
5760 _pDA = _pRxBlk->pHeader->Addr3; \
5761 _pSA = (PUCHAR)_pRxBlk->pHeader + sizeof(HEADER_802_11); \
5762 } \
5763 else \
5764 { \
5765 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) \
5766 { \
5767 _pDA = _pRxBlk->pHeader->Addr1; \
5768 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
5769 _pSA = _pRxBlk->pHeader->Addr2; \
5770 else \
5771 _pSA = _pRxBlk->pHeader->Addr3; \
5772 } \
5773 else \
5774 { \
5775 _pDA = _pRxBlk->pHeader->Addr1; \
5776 _pSA = _pRxBlk->pHeader->Addr2; \
5777 } \
5778 } \
5779 \
5780 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
5781 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
5782}
91980990
GKH
5783
5784BOOLEAN APFowardWirelessStaToWirelessSta(
5785 IN PRTMP_ADAPTER pAd,
5786 IN PNDIS_PACKET pPacket,
5787 IN ULONG FromWhichBSSID);
5788
5789VOID Announce_or_Forward_802_3_Packet(
5790 IN PRTMP_ADAPTER pAd,
5791 IN PNDIS_PACKET pPacket,
5792 IN UCHAR FromWhichBSSID);
5793
5794VOID Sta_Announce_or_Forward_802_3_Packet(
5795 IN PRTMP_ADAPTER pAd,
5796 IN PNDIS_PACKET pPacket,
5797 IN UCHAR FromWhichBSSID);
5798
91980990
GKH
5799#define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
5800 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
5801 //announce_802_3_packet(_pAd, _pPacket);
91980990
GKH
5802
5803PNDIS_PACKET DuplicatePacket(
5804 IN PRTMP_ADAPTER pAd,
5805 IN PNDIS_PACKET pPacket,
5806 IN UCHAR FromWhichBSSID);
5807
5808
5809PNDIS_PACKET ClonePacket(
5810 IN PRTMP_ADAPTER pAd,
5811 IN PNDIS_PACKET pPacket,
5812 IN PUCHAR pData,
5813 IN ULONG DataSize);
5814
5815
5816// Normal, AMPDU or AMSDU
5817VOID CmmRxnonRalinkFrameIndicate(
5818 IN PRTMP_ADAPTER pAd,
5819 IN RX_BLK *pRxBlk,
5820 IN UCHAR FromWhichBSSID);
5821
5822VOID CmmRxRalinkFrameIndicate(
5823 IN PRTMP_ADAPTER pAd,
5824 IN MAC_TABLE_ENTRY *pEntry,
5825 IN RX_BLK *pRxBlk,
5826 IN UCHAR FromWhichBSSID);
5827
5828VOID Update_Rssi_Sample(
5829 IN PRTMP_ADAPTER pAd,
5830 IN RSSI_SAMPLE *pRssi,
5831 IN PRXWI_STRUC pRxWI);
5832
5833PNDIS_PACKET GetPacketFromRxRing(
5834 IN PRTMP_ADAPTER pAd,
5835 OUT PRT28XX_RXD_STRUC pSaveRxD,
5836 OUT BOOLEAN *pbReschedule,
5837 IN OUT UINT32 *pRxPending);
5838
5839PNDIS_PACKET RTMPDeFragmentDataFrame(
5840 IN PRTMP_ADAPTER pAd,
5841 IN RX_BLK *pRxBlk);
5842
5843////////////////////////////////////////
91980990
GKH
5844enum {
5845 DIDmsg_lnxind_wlansniffrm = 0x00000044,
5846 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
5847 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
5848 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
5849 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
5850 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
5851 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
5852 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
5853 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
5854 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
5855 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
5856};
5857enum {
5858 P80211ENUM_msgitem_status_no_value = 0x00
5859};
5860enum {
5861 P80211ENUM_truth_false = 0x00,
5862 P80211ENUM_truth_true = 0x01
5863};
5864
5865/* Definition from madwifi */
5866typedef struct {
5867 UINT32 did;
5868 UINT16 status;
5869 UINT16 len;
5870 UINT32 data;
5871} p80211item_uint32_t;
5872
5873typedef struct {
5874 UINT32 msgcode;
5875 UINT32 msglen;
5876#define WLAN_DEVNAMELEN_MAX 16
5877 UINT8 devname[WLAN_DEVNAMELEN_MAX];
5878 p80211item_uint32_t hosttime;
5879 p80211item_uint32_t mactime;
5880 p80211item_uint32_t channel;
5881 p80211item_uint32_t rssi;
5882 p80211item_uint32_t sq;
5883 p80211item_uint32_t signal;
5884 p80211item_uint32_t noise;
5885 p80211item_uint32_t rate;
5886 p80211item_uint32_t istx;
5887 p80211item_uint32_t frmlen;
5888} wlan_ng_prism2_header;
5889
5890/* The radio capture header precedes the 802.11 header. */
5891typedef struct PACKED _ieee80211_radiotap_header {
5892 UINT8 it_version; /* Version 0. Only increases
5893 * for drastic changes,
5894 * introduction of compatible
5895 * new fields does not count.
5896 */
5897 UINT8 it_pad;
5898 UINT16 it_len; /* length of the whole
5899 * header in bytes, including
5900 * it_version, it_pad,
5901 * it_len, and data fields.
5902 */
5903 UINT32 it_present; /* A bitmap telling which
5904 * fields are present. Set bit 31
5905 * (0x80000000) to extend the
5906 * bitmap by another 32 bits.
5907 * Additional extensions are made
5908 * by setting bit 31.
5909 */
5910}ieee80211_radiotap_header ;
5911
5912enum ieee80211_radiotap_type {
5913 IEEE80211_RADIOTAP_TSFT = 0,
5914 IEEE80211_RADIOTAP_FLAGS = 1,
5915 IEEE80211_RADIOTAP_RATE = 2,
5916 IEEE80211_RADIOTAP_CHANNEL = 3,
5917 IEEE80211_RADIOTAP_FHSS = 4,
5918 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
5919 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
5920 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
5921 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
5922 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
5923 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
5924 IEEE80211_RADIOTAP_ANTENNA = 11,
5925 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
5926 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
5927};
5928
5929#define WLAN_RADIOTAP_PRESENT ( \
5930 (1 << IEEE80211_RADIOTAP_TSFT) | \
5931 (1 << IEEE80211_RADIOTAP_FLAGS) | \
5932 (1 << IEEE80211_RADIOTAP_RATE) | \
5933 0)
5934
5935typedef struct _wlan_radiotap_header {
5936 ieee80211_radiotap_header wt_ihdr;
5937 INT64 wt_tsft;
5938 UINT8 wt_flags;
5939 UINT8 wt_rate;
5940} wlan_radiotap_header;
5941/* Definition from madwifi */
5942
5943void send_monitor_packets(
5944 IN PRTMP_ADAPTER pAd,
5945 IN RX_BLK *pRxBlk);
5946
5947#if WIRELESS_EXT >= 12
5948// This function will be called when query /proc
5949struct iw_statistics *rt28xx_get_wireless_stats(
5950 IN struct net_device *net_dev);
5951#endif
5952
5953VOID RTMPSetDesiredRates(
5954 IN PRTMP_ADAPTER pAdapter,
5955 IN LONG Rates);
91980990
GKH
5956
5957INT Set_FixedTxMode_Proc(
5958 IN PRTMP_ADAPTER pAd,
5959 IN PUCHAR arg);
5960
91980990
GKH
5961static inline char* GetPhyMode(
5962 int Mode)
5963{
5964 switch(Mode)
5965 {
5966 case MODE_CCK:
5967 return "CCK";
5968
5969 case MODE_OFDM:
5970 return "OFDM";
91980990
GKH
5971 case MODE_HTMIX:
5972 return "HTMIX";
5973
5974 case MODE_HTGREENFIELD:
5975 return "GREEN";
91980990
GKH
5976 default:
5977 return "N/A";
5978 }
5979}
5980
5981
5982static inline char* GetBW(
5983 int BW)
5984{
5985 switch(BW)
5986 {
5987 case BW_10:
5988 return "10M";
5989
5990 case BW_20:
5991 return "20M";
91980990
GKH
5992 case BW_40:
5993 return "40M";
91980990
GKH
5994 default:
5995 return "N/A";
5996 }
5997}
5998
5999
6000VOID RT28xxThreadTerminate(
6001 IN RTMP_ADAPTER *pAd);
6002
6003BOOLEAN RT28XXChipsetCheck(
6004 IN void *_dev_p);
6005
6006BOOLEAN RT28XXNetDevInit(
6007 IN void *_dev_p,
6008 IN struct net_device *net_dev,
6009 IN RTMP_ADAPTER *pAd);
6010
6011BOOLEAN RT28XXProbePostConfig(
6012 IN void *_dev_p,
6013 IN RTMP_ADAPTER *pAd,
6014 IN INT32 argc);
6015
6016VOID RT28XXDMADisable(
6017 IN RTMP_ADAPTER *pAd);
6018
6019VOID RT28XXDMAEnable(
6020 IN RTMP_ADAPTER *pAd);
6021
6022VOID RT28xx_UpdateBeaconToAsic(
6023 IN RTMP_ADAPTER * pAd,
6024 IN INT apidx,
6025 IN ULONG BeaconLen,
6026 IN ULONG UpdatePos);
6027
6028INT rt28xx_ioctl(
6029 IN struct net_device *net_dev,
6030 IN OUT struct ifreq *rq,
6031 IN INT cmd);
6032
91980990
GKH
6033INT rt28xx_sta_ioctl(
6034 IN struct net_device *net_dev,
6035 IN OUT struct ifreq *rq,
6036 IN INT cmd);
91980990
GKH
6037
6038BOOLEAN RT28XXSecurityKeyAdd(
6039 IN PRTMP_ADAPTER pAd,
6040 IN ULONG apidx,
6041 IN ULONG KeyIdx,
6042 IN MAC_TABLE_ENTRY *pEntry);
6043
6044////////////////////////////////////////
6045PNDIS_PACKET GetPacketFromRxRing(
6046 IN PRTMP_ADAPTER pAd,
6047 OUT PRT28XX_RXD_STRUC pSaveRxD,
6048 OUT BOOLEAN *pbReschedule,
6049 IN OUT UINT32 *pRxPending);
6050
6051
6052void kill_thread_task(PRTMP_ADAPTER pAd);
6053
6054void tbtt_tasklet(unsigned long data);
6055
91980990
GKH
6056//
6057// Function Prototype in cmm_data_2860.c
6058//
6059USHORT RtmpPCI_WriteTxResource(
6060 IN PRTMP_ADAPTER pAd,
6061 IN TX_BLK *pTxBlk,
6062 IN BOOLEAN bIsLast,
6063 OUT USHORT *FreeNumber);
6064
6065USHORT RtmpPCI_WriteSingleTxResource(
6066 IN PRTMP_ADAPTER pAd,
6067 IN TX_BLK *pTxBlk,
6068 IN BOOLEAN bIsLast,
6069 OUT USHORT *FreeNumber);
6070
6071USHORT RtmpPCI_WriteMultiTxResource(
6072 IN PRTMP_ADAPTER pAd,
6073 IN TX_BLK *pTxBlk,
6074 IN UCHAR frameNum,
6075 OUT USHORT *FreeNumber);
6076
6077USHORT RtmpPCI_WriteFragTxResource(
6078 IN PRTMP_ADAPTER pAd,
6079 IN TX_BLK *pTxBlk,
6080 IN UCHAR fragNum,
6081 OUT USHORT *FreeNumber);
6082
6083USHORT RtmpPCI_WriteSubTxResource(
6084 IN PRTMP_ADAPTER pAd,
6085 IN TX_BLK *pTxBlk,
6086 IN BOOLEAN bIsLast,
6087 OUT USHORT *FreeNumber);
6088
6089VOID RtmpPCI_FinalWriteTxResource(
6090 IN PRTMP_ADAPTER pAd,
6091 IN TX_BLK *pTxBlk,
6092 IN USHORT totalMPDUSize,
6093 IN USHORT FirstTxIdx);
6094
6095VOID RtmpPCIDataLastTxIdx(
6096 IN PRTMP_ADAPTER pAd,
6097 IN UCHAR QueIdx,
6098 IN USHORT LastTxIdx);
6099
6100VOID RtmpPCIDataKickOut(
6101 IN PRTMP_ADAPTER pAd,
6102 IN TX_BLK *pTxBlk,
6103 IN UCHAR QueIdx);
6104
6105
6106int RtmpPCIMgmtKickOut(
6107 IN RTMP_ADAPTER *pAd,
6108 IN UCHAR QueIdx,
6109 IN PNDIS_PACKET pPacket,
6110 IN PUCHAR pSrcBufVA,
6111 IN UINT SrcBufLen);
6112
6113
6114NDIS_STATUS RTMPCheckRxError(
6115 IN PRTMP_ADAPTER pAd,
6116 IN PHEADER_802_11 pHeader,
6117 IN PRXWI_STRUC pRxWI,
6118 IN PRT28XX_RXD_STRUC pRxD);
6119
91980990
GKH
6120VOID RTMPInitPCIeLinkCtrlValue(
6121 IN PRTMP_ADAPTER pAd);
6122
6123VOID RTMPFindHostPCIDev(
6124 IN PRTMP_ADAPTER pAd);
6125
6126VOID RTMPPCIeLinkCtrlValueRestore(
6127 IN PRTMP_ADAPTER pAd,
6128 IN UCHAR Level);
6129
6130VOID RTMPPCIeLinkCtrlSetting(
6131 IN PRTMP_ADAPTER pAd,
6132 IN USHORT Max);
6133
6134VOID RT28xxPciAsicRadioOff(
6135 IN PRTMP_ADAPTER pAd,
6136 IN UCHAR Level,
6137 IN USHORT TbttNumToNextWakeUp);
6138
6139BOOLEAN RT28xxPciAsicRadioOn(
6140 IN PRTMP_ADAPTER pAd,
6141 IN UCHAR Level);
6142
6143VOID RT28xxPciStaAsicForceWakeup(
6144 IN PRTMP_ADAPTER pAd,
ed291e80 6145 IN UCHAR Level);
91980990
GKH
6146
6147VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6148 IN PRTMP_ADAPTER pAd,
6149 IN USHORT TbttNumToNextWakeUp);
6150
6151VOID PsPollWakeExec(
6152 IN PVOID SystemSpecific1,
6153 IN PVOID FunctionContext,
6154 IN PVOID SystemSpecific2,
6155 IN PVOID SystemSpecific3);
6156
6157VOID RadioOnExec(
6158 IN PVOID SystemSpecific1,
6159 IN PVOID FunctionContext,
6160 IN PVOID SystemSpecific2,
6161 IN PVOID SystemSpecific3);
91980990
GKH
6162
6163VOID RT28xxPciMlmeRadioOn(
6164 IN PRTMP_ADAPTER pAd);
6165
6166VOID RT28xxPciMlmeRadioOFF(
6167 IN PRTMP_ADAPTER pAd);
91980990
GKH
6168
6169VOID AsicTurnOffRFClk(
6170 IN PRTMP_ADAPTER pAd,
6171 IN UCHAR Channel);
6172
6173VOID AsicTurnOnRFClk(
6174 IN PRTMP_ADAPTER pAd,
6175 IN UCHAR Channel);
6176
6177
6178////////////////////////////////////////
6179
6180VOID QBSS_LoadInit(
6181 IN RTMP_ADAPTER *pAd);
6182
6183UINT32 QBSS_LoadElementAppend(
6184 IN RTMP_ADAPTER *pAd,
6185 OUT UINT8 *buf_p);
6186
6187VOID QBSS_LoadUpdate(
6188 IN RTMP_ADAPTER *pAd);
6189
6190///////////////////////////////////////
6191INT RTMPShowCfgValue(
6192 IN PRTMP_ADAPTER pAd,
6193 IN PUCHAR pName,
6194 IN PUCHAR pBuf);
6195
6196PCHAR RTMPGetRalinkAuthModeStr(
6197 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6198
6199PCHAR RTMPGetRalinkEncryModeStr(
6200 IN USHORT encryMode);
6201//////////////////////////////////////
6202
91980990
GKH
6203VOID AsicStaBbpTuning(
6204 IN PRTMP_ADAPTER pAd);
ed291e80
AM
6205
6206VOID AsicResetFromDMABusy(
6207 IN PRTMP_ADAPTER pAd);
6208
6209VOID AsicResetBBP(
6210 IN PRTMP_ADAPTER pAd);
6211
6212VOID AsicResetMAC(
6213 IN PRTMP_ADAPTER pAd);
6214
6215VOID AsicResetPBF(
6216 IN PRTMP_ADAPTER pAd);
91980990
GKH
6217
6218void RTMP_IndicateMediaState(
6219 IN PRTMP_ADAPTER pAd);
6220
6221VOID ReSyncBeaconTime(
6222 IN PRTMP_ADAPTER pAd);
6223
6224VOID RTMPSetAGCInitValue(
6225 IN PRTMP_ADAPTER pAd,
6226 IN UCHAR BandWidth);
6227
6228int rt28xx_close(IN PNET_DEV dev);
6229int rt28xx_open(IN PNET_DEV dev);
6230
6231__inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6232{
6233extern VOID MeshMakeBeacon(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6234extern VOID MeshUpdateBeaconFrame(IN PRTMP_ADAPTER pAd, IN UCHAR idx);
6235
6236 if (VIRTUAL_IF_NUM(pAd) == 0)
6237 {
6238 if (rt28xx_open(pAd->net_dev) != 0)
6239 return -1;
6240 }
6241 else
6242 {
6243 }
6244 VIRTUAL_IF_INC(pAd);
6245 return 0;
6246}
6247
6248__inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6249{
6250 VIRTUAL_IF_DEC(pAd);
6251 if (VIRTUAL_IF_NUM(pAd) == 0)
6252 rt28xx_close(pAd->net_dev);
6253 return;
6254}
6255
6256
6257#endif // __RTMP_H__
6258