aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/rt2860/rtmp.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/rt2860/rtmp.h')
-rw-r--r--drivers/staging/rt2860/rtmp.h2876
1 files changed, 1144 insertions, 1732 deletions
diff --git a/drivers/staging/rt2860/rtmp.h b/drivers/staging/rt2860/rtmp.h
index 90fd40f2473..ee047f8fdf7 100644
--- a/drivers/staging/rt2860/rtmp.h
+++ b/drivers/staging/rt2860/rtmp.h
@@ -42,140 +42,45 @@
42 42
43#include "spectrum_def.h" 43#include "spectrum_def.h"
44 44
45#include "aironet.h" 45#include "rtmp_dot11.h"
46 46
47#define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++) 47#undef AP_WSC_INCLUDED
48#define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--) 48#undef STA_WSC_INCLUDED
49#define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt) 49#undef WSC_INCLUDED
50 50
51#ifdef RT2870
52////////////////////////////////////////////////////////////////////////////
53// The TX_BUFFER structure forms the transmitted USB packet to the device
54////////////////////////////////////////////////////////////////////////////
55typedef struct __TX_BUFFER{
56 union {
57 UCHAR WirelessPacket[TX_BUFFER_NORMSIZE];
58 HEADER_802_11 NullFrame;
59 PSPOLL_FRAME PsPollPacket;
60 RTS_FRAME RTSFrame;
61 }field;
62 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
63} TX_BUFFER, *PTX_BUFFER;
64
65typedef struct __HTTX_BUFFER{
66 union {
67 UCHAR WirelessPacket[MAX_TXBULK_SIZE];
68 HEADER_802_11 NullFrame;
69 PSPOLL_FRAME PsPollPacket;
70 RTS_FRAME RTSFrame;
71 }field;
72 UCHAR Aggregation[4]; //Buffer for save Aggregation size.
73} HTTX_BUFFER, *PHTTX_BUFFER;
74
75
76// used to track driver-generated write irps
77typedef struct _TX_CONTEXT
78{
79 PVOID pAd; //Initialized in MiniportInitialize
80 PURB pUrb; //Initialized in MiniportInitialize
81 PIRP pIrp; //used to cancel pending bulk out.
82 //Initialized in MiniportInitialize
83 PTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
84 ULONG BulkOutSize;
85 UCHAR BulkOutPipeId;
86 UCHAR SelfIdx;
87 BOOLEAN InUse;
88 BOOLEAN bWaitingBulkOut; // at least one packet is in this TxContext, ready for making IRP anytime.
89 BOOLEAN bFullForBulkOut; // all tx buffer are full , so waiting for tx bulkout.
90 BOOLEAN IRPPending;
91 BOOLEAN LastOne;
92 BOOLEAN bAggregatible;
93 UCHAR Header_802_3[LENGTH_802_3];
94 UCHAR Rsv[2];
95 ULONG DataOffset;
96 UINT TxRate;
97 dma_addr_t data_dma; // urb dma on linux
98
99} TX_CONTEXT, *PTX_CONTEXT, **PPTX_CONTEXT;
100
101
102// used to track driver-generated write irps
103typedef struct _HT_TX_CONTEXT
104{
105 PVOID pAd; //Initialized in MiniportInitialize
106 PURB pUrb; //Initialized in MiniportInitialize
107 PIRP pIrp; //used to cancel pending bulk out.
108 //Initialized in MiniportInitialize
109 PHTTX_BUFFER TransferBuffer; //Initialized in MiniportInitialize
110 ULONG BulkOutSize; // Indicate the total bulk-out size in bytes in one bulk-transmission
111 UCHAR BulkOutPipeId;
112 BOOLEAN IRPPending;
113 BOOLEAN LastOne;
114 BOOLEAN bCurWriting;
115 BOOLEAN bRingEmpty;
116 BOOLEAN bCopySavePad;
117 UCHAR SavedPad[8];
118 UCHAR Header_802_3[LENGTH_802_3];
119 ULONG CurWritePosition; // Indicate the buffer offset which packet will be inserted start from.
120 ULONG CurWriteRealPos; // Indicate the buffer offset which packet now are writing to.
121 ULONG NextBulkOutPosition; // Indicate the buffer start offset of a bulk-transmission
122 ULONG ENextBulkOutPosition; // Indicate the buffer end offset of a bulk-transmission
123 UINT TxRate;
124 dma_addr_t data_dma; // urb dma on linux
125} HT_TX_CONTEXT, *PHT_TX_CONTEXT, **PPHT_TX_CONTEXT;
126 51
127 52
128// 53#if defined(AP_WSC_INCLUDED) || defined(STA_WSC_INCLUDED)
129// Structure to keep track of receive packets and buffers to indicate 54#define WSC_INCLUDED
130// receive data to the protocol. 55#endif
131//
132typedef struct _RX_CONTEXT
133{
134 PUCHAR TransferBuffer;
135 PVOID pAd;
136 PIRP pIrp;//used to cancel pending bulk in.
137 PURB pUrb;
138 //These 2 Boolean shouldn't both be 1 at the same time.
139 ULONG BulkInOffset; // number of packets waiting for reordering .
140 BOOLEAN bRxHandling; // Notify this packet is being process now.
141 BOOLEAN InUse; // USB Hardware Occupied. Wait for USB HW to put packet.
142 BOOLEAN Readable; // Receive Complete back. OK for driver to indicate receiving packet.
143 BOOLEAN IRPPending; // TODO: To be removed
144 atomic_t IrpLock;
145 NDIS_SPIN_LOCK RxContextLock;
146 dma_addr_t data_dma; // urb dma on linux
147} RX_CONTEXT, *PRX_CONTEXT;
148#endif // RT2870 //
149 56
57#include "rtmp_chip.h"
150 58
151//
152// NDIS Version definitions
153//
154#ifdef NDIS50_MINIPORT
155#define RTMP_NDIS_MAJOR_VERSION 5
156#define RTMP_NDIS_MINOR_VERSION 0
157#endif
158 59
159#ifdef NDIS51_MINIPORT
160#define RTMP_NDIS_MAJOR_VERSION 5
161#define RTMP_NDIS_MINOR_VERSION 1
162#endif
163 60
164extern char NIC_VENDOR_DESC[]; 61typedef struct _RTMP_ADAPTER RTMP_ADAPTER;
165extern int NIC_VENDOR_DESC_LEN; 62typedef struct _RTMP_ADAPTER *PRTMP_ADAPTER;
63
64typedef struct _RTMP_CHIP_OP_ RTMP_CHIP_OP;
65
66
67//#define DBG 1
68
69//#define DBG_DIAGNOSE 1
70
71
72//+++Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function
73#define MAX_DATAMM_RETRY 3
74#define MGMT_USE_QUEUE_FLAG 0x80
75//---Add by shiang for merge MiniportMMRequest() and MiniportDataMMRequest() into one function
76
77#define MAXSEQ (0xFFF)
166 78
167extern unsigned char SNAP_AIRONET[]; 79extern unsigned char SNAP_AIRONET[];
168extern unsigned char CipherSuiteCiscoCCKM[];
169extern unsigned char CipherSuiteCiscoCCKMLen;
170extern unsigned char CipherSuiteCiscoCCKM24[];
171extern unsigned char CipherSuiteCiscoCCKM24Len;
172extern unsigned char CipherSuiteCCXTkip[];
173extern unsigned char CipherSuiteCCXTkipLen;
174extern unsigned char CISCO_OUI[]; 80extern unsigned char CISCO_OUI[];
175extern UCHAR BaSizeArray[4]; 81extern UCHAR BaSizeArray[4];
176 82
177extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN]; 83extern UCHAR BROADCAST_ADDR[MAC_ADDR_LEN];
178extern UCHAR MULTICAST_ADDR[MAC_ADDR_LEN];
179extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN]; 84extern UCHAR ZERO_MAC_ADDR[MAC_ADDR_LEN];
180extern ULONG BIT32[32]; 85extern ULONG BIT32[32];
181extern UCHAR BIT8[8]; 86extern UCHAR BIT8[8];
@@ -231,9 +136,11 @@ extern UCHAR WpaIe;
231extern UCHAR Wpa2Ie; 136extern UCHAR Wpa2Ie;
232extern UCHAR IbssIe; 137extern UCHAR IbssIe;
233extern UCHAR Ccx2Ie; 138extern UCHAR Ccx2Ie;
139extern UCHAR WapiIe;
234 140
235extern UCHAR WPA_OUI[]; 141extern UCHAR WPA_OUI[];
236extern UCHAR RSN_OUI[]; 142extern UCHAR RSN_OUI[];
143extern UCHAR WAPI_OUI[];
237extern UCHAR WME_INFO_ELEM[]; 144extern UCHAR WME_INFO_ELEM[];
238extern UCHAR WME_PARM_ELEM[]; 145extern UCHAR WME_PARM_ELEM[];
239extern UCHAR Ccx2QosInfo[]; 146extern UCHAR Ccx2QosInfo[];
@@ -256,28 +163,8 @@ extern UCHAR RateSwitchTable11N2SForABand[];
256 163
257extern UCHAR PRE_N_HT_OUI[]; 164extern UCHAR PRE_N_HT_OUI[];
258 165
259#define MAXSEQ (0xFFF)
260
261struct reordering_mpdu
262{
263 struct reordering_mpdu *next;
264 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
265 int Sequence; /* sequence number of MPDU */
266 BOOLEAN bAMSDU;
267};
268 166
269struct reordering_list
270{
271 struct reordering_mpdu *next;
272 int qlen;
273};
274 167
275struct reordering_mpdu_pool
276{
277 PVOID mem;
278 NDIS_SPIN_LOCK lock;
279 struct reordering_list freelist;
280};
281 168
282typedef struct _RSSI_SAMPLE { 169typedef struct _RSSI_SAMPLE {
283 CHAR LastRssi0; // last received RSSI 170 CHAR LastRssi0; // last received RSSI
@@ -318,6 +205,7 @@ typedef struct _QUEUE_HEADER {
318 if ((QueueHeader)->Head != NULL) \ 205 if ((QueueHeader)->Head != NULL) \
319 { \ 206 { \
320 pNext = (QueueHeader)->Head->Next; \ 207 pNext = (QueueHeader)->Head->Next; \
208 (QueueHeader)->Head->Next = NULL; \
321 (QueueHeader)->Head = pNext; \ 209 (QueueHeader)->Head = pNext; \
322 if (pNext == NULL) \ 210 if (pNext == NULL) \
323 (QueueHeader)->Tail = NULL; \ 211 (QueueHeader)->Tail = NULL; \
@@ -345,6 +233,19 @@ typedef struct _QUEUE_HEADER {
345 (QueueHeader)->Number++; \ 233 (QueueHeader)->Number++; \
346} 234}
347 235
236#define InsertTailQueueAc(pAd, pEntry, QueueHeader, QueueEntry) \
237{ \
238 ((PQUEUE_ENTRY)QueueEntry)->Next = NULL; \
239 if ((QueueHeader)->Tail) \
240 (QueueHeader)->Tail->Next = (PQUEUE_ENTRY)(QueueEntry); \
241 else \
242 (QueueHeader)->Head = (PQUEUE_ENTRY)(QueueEntry); \
243 (QueueHeader)->Tail = (PQUEUE_ENTRY)(QueueEntry); \
244 (QueueHeader)->Number++; \
245}
246
247
248
348// 249//
349// Macros for flag and ref count operations 250// Macros for flag and ref count operations
350// 251//
@@ -353,15 +254,12 @@ typedef struct _QUEUE_HEADER {
353#define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0) 254#define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
354#define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0) 255#define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
355#define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F)) 256#define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
356
357#ifdef RT2860
358// Macro for power save flag. 257// Macro for power save flag.
359#define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F)) 258#define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
360#define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F)) 259#define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
361#define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0) 260#define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
362#define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0) 261#define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
363#define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F)) 262#define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
364#endif
365 263
366#define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F)) 264#define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
367#define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F)) 265#define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
@@ -391,51 +289,6 @@ typedef struct _QUEUE_HEADER {
391 (_idx) = (_idx+1) % (_RingSize); \ 289 (_idx) = (_idx+1) % (_RingSize); \
392} 290}
393 291
394#ifdef RT2870
395// We will have a cost down version which mac version is 0x3090xxxx
396#define IS_RT3090(_pAd) ((((_pAd)->MACVersion & 0xffff0000) == 0x30710000) || (((_pAd)->MACVersion & 0xffff0000) == 0x30900000))
397#else
398#define IS_RT3090(_pAd) 0
399#endif
400#define IS_RT3070(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30700000)
401#ifdef RT2870
402#define IS_RT3071(_pAd) (((_pAd)->MACVersion & 0xffff0000) == 0x30710000)
403#define IS_RT30xx(_pAd) (((_pAd)->MACVersion & 0xfff00000) == 0x30700000)
404#endif
405
406#define RING_PACKET_INIT(_TxRing, _idx) \
407{ \
408 _TxRing->Cell[_idx].pNdisPacket = NULL; \
409 _TxRing->Cell[_idx].pNextNdisPacket = NULL; \
410}
411
412#define TXDT_INIT(_TxD) \
413{ \
414 NdisZeroMemory(_TxD, TXD_SIZE); \
415 _TxD->DMADONE = 1; \
416}
417
418//Set last data segment
419#define RING_SET_LASTDS(_TxD, _IsSD0) \
420{ \
421 if (_IsSD0) {_TxD->LastSec0 = 1;} \
422 else {_TxD->LastSec1 = 1;} \
423}
424
425// Increase TxTsc value for next transmission
426// TODO:
427// When i==6, means TSC has done one full cycle, do re-keying stuff follow specs
428// Should send a special event microsoft defined to request re-key
429#define INC_TX_TSC(_tsc) \
430{ \
431 int i=0; \
432 while (++_tsc[i] == 0x0) \
433 { \
434 i++; \
435 if (i == 6) \
436 break; \
437 } \
438}
439 292
440// StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here. 293// StaActive.SupportedHtPhy.MCSSet is copied from AP beacon. Don't need to update here.
441#define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \ 294#define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
@@ -475,301 +328,12 @@ typedef struct _QUEUE_HEADER {
475// ULONG Value) 328// ULONG Value)
476// 329//
477 330
478//
479// BBP & RF are using indirect access. Before write any value into it.
480// We have to make sure there is no outstanding command pending via checking busy bit.
481//
482#define MAX_BUSY_COUNT 100 // Number of retry before failing access BBP & RF indirect register
483//
484#ifdef RT2860
485#define RTMP_RF_IO_WRITE32(_A, _V) \
486{ \
487 PHY_CSR4_STRUC Value; \
488 ULONG BusyCnt = 0; \
489 if ((_A)->bPCIclkOff) \
490 { \
491 return; \
492 } \
493 do { \
494 RTMP_IO_READ32(_A, RF_CSR_CFG0, &Value.word); \
495 if (Value.field.Busy == IDLE) \
496 break; \
497 BusyCnt++; \
498 } while (BusyCnt < MAX_BUSY_COUNT); \
499 if (BusyCnt < MAX_BUSY_COUNT) \
500 { \
501 RTMP_IO_WRITE32(_A, RF_CSR_CFG0, _V); \
502 } \
503}
504
505#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
506{ \
507 BBP_CSR_CFG_STRUC BbpCsr; \
508 int i, k; \
509 for (i=0; i<MAX_BUSY_COUNT; i++) \
510 { \
511 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
512 if (BbpCsr.field.Busy == BUSY) \
513 { \
514 continue; \
515 } \
516 BbpCsr.word = 0; \
517 BbpCsr.field.fRead = 1; \
518 BbpCsr.field.BBP_RW_MODE = 1; \
519 BbpCsr.field.Busy = 1; \
520 BbpCsr.field.RegNum = _I; \
521 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
522 for (k=0; k<MAX_BUSY_COUNT; k++) \
523 { \
524 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
525 if (BbpCsr.field.Busy == IDLE) \
526 break; \
527 } \
528 if ((BbpCsr.field.Busy == IDLE) && \
529 (BbpCsr.field.RegNum == _I)) \
530 { \
531 *(_pV) = (UCHAR)BbpCsr.field.Value; \
532 break; \
533 } \
534 } \
535 if (BbpCsr.field.Busy == BUSY) \
536 { \
537 DBGPRINT_ERR(("DFS BBP read R%d fail\n", _I)); \
538 *(_pV) = (_A)->BbpWriteLatch[_I]; \
539 } \
540}
541
542//#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) {}
543// Read BBP register by register's ID. Generate PER to test BA
544#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) \
545{ \
546 BBP_CSR_CFG_STRUC BbpCsr; \
547 int i, k; \
548 if ((_A)->bPCIclkOff == FALSE) \
549 { \
550 for (i=0; i<MAX_BUSY_COUNT; i++) \
551 { \
552 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
553 if (BbpCsr.field.Busy == BUSY) \
554 { \
555 continue; \
556 } \
557 BbpCsr.word = 0; \
558 BbpCsr.field.fRead = 1; \
559 BbpCsr.field.BBP_RW_MODE = 1; \
560 BbpCsr.field.Busy = 1; \
561 BbpCsr.field.RegNum = _I; \
562 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
563 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
564 RTMPusecDelay(1000); \
565 for (k=0; k<MAX_BUSY_COUNT; k++) \
566 { \
567 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
568 if (BbpCsr.field.Busy == IDLE) \
569 break; \
570 } \
571 if ((BbpCsr.field.Busy == IDLE) && \
572 (BbpCsr.field.RegNum == _I)) \
573 { \
574 *(_pV) = (UCHAR)BbpCsr.field.Value; \
575 break; \
576 } \
577 } \
578 if (BbpCsr.field.Busy == BUSY) \
579 { \
580 DBGPRINT_ERR(("BBP read R%d=0x%x fail\n", _I, BbpCsr.word)); \
581 *(_pV) = (_A)->BbpWriteLatch[_I]; \
582 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
583 BbpCsr.field.Busy = 0; \
584 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
585 } \
586 } \
587}
588
589#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
590{ \
591 BBP_CSR_CFG_STRUC BbpCsr; \
592 int BusyCnt; \
593 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
594 { \
595 RTMP_IO_READ32(_A, BBP_CSR_CFG, &BbpCsr.word); \
596 if (BbpCsr.field.Busy == BUSY) \
597 continue; \
598 BbpCsr.word = 0; \
599 BbpCsr.field.fRead = 0; \
600 BbpCsr.field.BBP_RW_MODE = 1; \
601 BbpCsr.field.Busy = 1; \
602 BbpCsr.field.Value = _V; \
603 BbpCsr.field.RegNum = _I; \
604 RTMP_IO_WRITE32(_A, BBP_CSR_CFG, BbpCsr.word); \
605 (_A)->BbpWriteLatch[_I] = _V; \
606 break; \
607 } \
608 if (BusyCnt == MAX_BUSY_COUNT) \
609 { \
610 DBGPRINT_ERR(("BBP write R%d fail\n", _I)); \
611 } \
612}
613
614// Write BBP register by register's ID & value
615#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) \
616{ \
617 BBP_CSR_CFG_STRUC BbpCsr; \
618 int BusyCnt; \
619 if ((_A)->bPCIclkOff == FALSE) \
620 { \
621 for (BusyCnt=0; BusyCnt<MAX_BUSY_COUNT; BusyCnt++) \
622 { \
623 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
624 if (BbpCsr.field.Busy == BUSY) \
625 continue; \
626 BbpCsr.word = 0; \
627 BbpCsr.field.fRead = 0; \
628 BbpCsr.field.BBP_RW_MODE = 1; \
629 BbpCsr.field.Busy = 1; \
630 BbpCsr.field.Value = _V; \
631 BbpCsr.field.RegNum = _I; \
632 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
633 AsicSendCommandToMcu(_A, 0x80, 0xff, 0x0, 0x0); \
634 if (_A->OpMode == OPMODE_AP) \
635 RTMPusecDelay(1000); \
636 (_A)->BbpWriteLatch[_I] = _V; \
637 break; \
638 } \
639 if (BusyCnt == MAX_BUSY_COUNT) \
640 { \
641 DBGPRINT_ERR(("BBP write R%d=0x%x fail\n", _I, BbpCsr.word)); \
642 RTMP_IO_READ32(_A, H2M_BBP_AGENT, &BbpCsr.word); \
643 BbpCsr.field.Busy = 0; \
644 RTMP_IO_WRITE32(_A, H2M_BBP_AGENT, BbpCsr.word); \
645 } \
646 } \
647}
648#endif /* RT2860 */
649#ifdef RT2870
650#define RTMP_RF_IO_WRITE32(_A, _V) RTUSBWriteRFRegister(_A, _V)
651#define RTMP_BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
652#define RTMP_BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
653
654#define BBP_IO_WRITE8_BY_REG_ID(_A, _I, _V) RTUSBWriteBBPRegister(_A, _I, _V)
655#define BBP_IO_READ8_BY_REG_ID(_A, _I, _pV) RTUSBReadBBPRegister(_A, _I, _pV)
656#endif // RT2870 //
657
658#define MAP_CHANNEL_ID_TO_KHZ(ch, khz) { \
659 switch (ch) \
660 { \
661 case 1: khz = 2412000; break; \
662 case 2: khz = 2417000; break; \
663 case 3: khz = 2422000; break; \
664 case 4: khz = 2427000; break; \
665 case 5: khz = 2432000; break; \
666 case 6: khz = 2437000; break; \
667 case 7: khz = 2442000; break; \
668 case 8: khz = 2447000; break; \
669 case 9: khz = 2452000; break; \
670 case 10: khz = 2457000; break; \
671 case 11: khz = 2462000; break; \
672 case 12: khz = 2467000; break; \
673 case 13: khz = 2472000; break; \
674 case 14: khz = 2484000; break; \
675 case 36: /* UNII */ khz = 5180000; break; \
676 case 40: /* UNII */ khz = 5200000; break; \
677 case 44: /* UNII */ khz = 5220000; break; \
678 case 48: /* UNII */ khz = 5240000; break; \
679 case 52: /* UNII */ khz = 5260000; break; \
680 case 56: /* UNII */ khz = 5280000; break; \
681 case 60: /* UNII */ khz = 5300000; break; \
682 case 64: /* UNII */ khz = 5320000; break; \
683 case 149: /* UNII */ khz = 5745000; break; \
684 case 153: /* UNII */ khz = 5765000; break; \
685 case 157: /* UNII */ khz = 5785000; break; \
686 case 161: /* UNII */ khz = 5805000; break; \
687 case 165: /* UNII */ khz = 5825000; break; \
688 case 100: /* HiperLAN2 */ khz = 5500000; break; \
689 case 104: /* HiperLAN2 */ khz = 5520000; break; \
690 case 108: /* HiperLAN2 */ khz = 5540000; break; \
691 case 112: /* HiperLAN2 */ khz = 5560000; break; \
692 case 116: /* HiperLAN2 */ khz = 5580000; break; \
693 case 120: /* HiperLAN2 */ khz = 5600000; break; \
694 case 124: /* HiperLAN2 */ khz = 5620000; break; \
695 case 128: /* HiperLAN2 */ khz = 5640000; break; \
696 case 132: /* HiperLAN2 */ khz = 5660000; break; \
697 case 136: /* HiperLAN2 */ khz = 5680000; break; \
698 case 140: /* HiperLAN2 */ khz = 5700000; break; \
699 case 34: /* Japan MMAC */ khz = 5170000; break; \
700 case 38: /* Japan MMAC */ khz = 5190000; break; \
701 case 42: /* Japan MMAC */ khz = 5210000; break; \
702 case 46: /* Japan MMAC */ khz = 5230000; break; \
703 case 184: /* Japan */ khz = 4920000; break; \
704 case 188: /* Japan */ khz = 4940000; break; \
705 case 192: /* Japan */ khz = 4960000; break; \
706 case 196: /* Japan */ khz = 4980000; break; \
707 case 208: /* Japan, means J08 */ khz = 5040000; break; \
708 case 212: /* Japan, means J12 */ khz = 5060000; break; \
709 case 216: /* Japan, means J16 */ khz = 5080000; break; \
710 default: khz = 2412000; break; \
711 } \
712 }
713
714#define MAP_KHZ_TO_CHANNEL_ID(khz, ch) { \
715 switch (khz) \
716 { \
717 case 2412000: ch = 1; break; \
718 case 2417000: ch = 2; break; \
719 case 2422000: ch = 3; break; \
720 case 2427000: ch = 4; break; \
721 case 2432000: ch = 5; break; \
722 case 2437000: ch = 6; break; \
723 case 2442000: ch = 7; break; \
724 case 2447000: ch = 8; break; \
725 case 2452000: ch = 9; break; \
726 case 2457000: ch = 10; break; \
727 case 2462000: ch = 11; break; \
728 case 2467000: ch = 12; break; \
729 case 2472000: ch = 13; break; \
730 case 2484000: ch = 14; break; \
731 case 5180000: ch = 36; /* UNII */ break; \
732 case 5200000: ch = 40; /* UNII */ break; \
733 case 5220000: ch = 44; /* UNII */ break; \
734 case 5240000: ch = 48; /* UNII */ break; \
735 case 5260000: ch = 52; /* UNII */ break; \
736 case 5280000: ch = 56; /* UNII */ break; \
737 case 5300000: ch = 60; /* UNII */ break; \
738 case 5320000: ch = 64; /* UNII */ break; \
739 case 5745000: ch = 149; /* UNII */ break; \
740 case 5765000: ch = 153; /* UNII */ break; \
741 case 5785000: ch = 157; /* UNII */ break; \
742 case 5805000: ch = 161; /* UNII */ break; \
743 case 5825000: ch = 165; /* UNII */ break; \
744 case 5500000: ch = 100; /* HiperLAN2 */ break; \
745 case 5520000: ch = 104; /* HiperLAN2 */ break; \
746 case 5540000: ch = 108; /* HiperLAN2 */ break; \
747 case 5560000: ch = 112; /* HiperLAN2 */ break; \
748 case 5580000: ch = 116; /* HiperLAN2 */ break; \
749 case 5600000: ch = 120; /* HiperLAN2 */ break; \
750 case 5620000: ch = 124; /* HiperLAN2 */ break; \
751 case 5640000: ch = 128; /* HiperLAN2 */ break; \
752 case 5660000: ch = 132; /* HiperLAN2 */ break; \
753 case 5680000: ch = 136; /* HiperLAN2 */ break; \
754 case 5700000: ch = 140; /* HiperLAN2 */ break; \
755 case 5170000: ch = 34; /* Japan MMAC */ break; \
756 case 5190000: ch = 38; /* Japan MMAC */ break; \
757 case 5210000: ch = 42; /* Japan MMAC */ break; \
758 case 5230000: ch = 46; /* Japan MMAC */ break; \
759 case 4920000: ch = 184; /* Japan */ break; \
760 case 4940000: ch = 188; /* Japan */ break; \
761 case 4960000: ch = 192; /* Japan */ break; \
762 case 4980000: ch = 196; /* Japan */ break; \
763 case 5040000: ch = 208; /* Japan, means J08 */ break; \
764 case 5060000: ch = 212; /* Japan, means J12 */ break; \
765 case 5080000: ch = 216; /* Japan, means J16 */ break; \
766 default: ch = 1; break; \
767 } \
768 }
769 331
770// 332//
771// Common fragment list structure - Identical to the scatter gather frag list structure 333// Common fragment list structure - Identical to the scatter gather frag list structure
772// 334//
335//#define RTMP_SCATTER_GATHER_ELEMENT SCATTER_GATHER_ELEMENT
336//#define PRTMP_SCATTER_GATHER_ELEMENT PSCATTER_GATHER_ELEMENT
773#define NIC_MAX_PHYS_BUF_COUNT 8 337#define NIC_MAX_PHYS_BUF_COUNT 8
774 338
775typedef struct _RTMP_SCATTER_GATHER_ELEMENT { 339typedef struct _RTMP_SCATTER_GATHER_ELEMENT {
@@ -893,18 +457,11 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
893 } \ 457 } \
894} 458}
895 459
896#define SWITCH_AB( _pAA, _pBB) \
897{ \
898 PVOID pCC; \
899 pCC = _pBB; \
900 _pBB = _pAA; \
901 _pAA = pCC; \
902}
903 460
904// Enqueue this frame to MLME engine 461// Enqueue this frame to MLME engine
905// We need to enqueue the whole frame because MLME need to pass data type 462// We need to enqueue the whole frame because MLME need to pass data type
906// information from 802.11 header 463// information from 802.11 header
907#ifdef RT2860 464#ifdef RTMP_MAC_PCI
908#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ 465#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
909{ \ 466{ \
910 UINT32 High32TSF, Low32TSF; \ 467 UINT32 High32TSF, Low32TSF; \
@@ -912,49 +469,14 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
912 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \ 469 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
913 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \ 470 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
914} 471}
915#endif 472#endif // RTMP_MAC_PCI //
916#ifdef RT2870 473#ifdef RTMP_MAC_USB
917#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \ 474#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
918{ \ 475{ \
919 UINT32 High32TSF=0, Low32TSF=0; \ 476 UINT32 High32TSF=0, Low32TSF=0; \
920 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \ 477 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (UCHAR)_Rssi0, (UCHAR)_Rssi1,(UCHAR)_Rssi2,_FrameSize, _pFrame, (UCHAR)_PlcpSignal); \
921} 478}
922#endif // RT2870 // 479#endif // RTMP_MAC_USB //
923
924//Need to collect each ant's rssi concurrently
925//rssi1 is report to pair2 Ant and rss2 is reprot to pair1 Ant when 4 Ant
926#define COLLECT_RX_ANTENNA_AVERAGE_RSSI(_pAd, _rssi1, _rssi2) \
927{ \
928 SHORT AvgRssi; \
929 UCHAR UsedAnt; \
930 if (_pAd->RxAnt.EvaluatePeriod == 0) \
931 { \
932 UsedAnt = _pAd->RxAnt.Pair1PrimaryRxAnt; \
933 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
934 if (AvgRssi < 0) \
935 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
936 else \
937 AvgRssi = _rssi1 << 3; \
938 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
939 } \
940 else \
941 { \
942 UsedAnt = _pAd->RxAnt.Pair1SecondaryRxAnt; \
943 AvgRssi = _pAd->RxAnt.Pair1AvgRssi[UsedAnt]; \
944 if ((AvgRssi < 0) && (_pAd->RxAnt.FirstPktArrivedWhenEvaluate)) \
945 AvgRssi = AvgRssi - (AvgRssi >> 3) + _rssi1; \
946 else \
947 { \
948 _pAd->RxAnt.FirstPktArrivedWhenEvaluate = TRUE; \
949 AvgRssi = _rssi1 << 3; \
950 } \
951 _pAd->RxAnt.Pair1AvgRssi[UsedAnt] = AvgRssi; \
952 _pAd->RxAnt.RcvPktNumWhenEvaluate++; \
953 } \
954}
955
956#define NDIS_QUERY_BUFFER(_NdisBuf, _ppVA, _pBufLen) \
957 NdisQueryBuffer(_NdisBuf, _ppVA, _pBufLen)
958 480
959#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN) 481#define MAC_ADDR_EQUAL(pAddr1,pAddr2) RTMPEqualMemory((PVOID)(pAddr1), (PVOID)(pAddr2), MAC_ADDR_LEN)
960#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1))) 482#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1==len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
@@ -964,59 +486,21 @@ typedef struct _RTMP_SCATTER_GATHER_LIST {
964// 486//
965#define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64)) 487#define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
966 488
967#ifdef RT2860 489#define STA_EXTRA_SETTING(_pAd)
490
968#define STA_PORT_SECURED(_pAd) \ 491#define STA_PORT_SECURED(_pAd) \
969{ \ 492{ \
970 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \ 493 BOOLEAN Cancelled; \
971 RTMP_SET_PSFLAG(_pAd, fRTMP_PS_CAN_GO_SLEEP); \ 494 (_pAd)->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
972 NdisAcquireSpinLock(&(_pAd)->MacTabLock); \ 495 NdisAcquireSpinLock(&((_pAd)->MacTabLock)); \
973 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \ 496 (_pAd)->MacTab.Content[BSSID_WCID].PortSecured = (_pAd)->StaCfg.PortSecured; \
497 (_pAd)->MacTab.Content[BSSID_WCID].PrivacyFilter = Ndis802_11PrivFilterAcceptAll;\
974 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \ 498 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
499 RTMPCancelTimer(&((_pAd)->Mlme.LinkDownTimer), &Cancelled);\
500 STA_EXTRA_SETTING(_pAd); \
975} 501}
976#endif
977#ifdef RT2870
978#define STA_PORT_SECURED(_pAd) \
979{ \
980 _pAd->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
981 NdisAcquireSpinLock(&_pAd->MacTabLock); \
982 _pAd->MacTab.Content[BSSID_WCID].PortSecured = _pAd->StaCfg.PortSecured; \
983 NdisReleaseSpinLock(&_pAd->MacTabLock); \
984}
985#endif
986
987//
988// Register set pair for initialzation register set definition
989//
990typedef struct _RTMP_REG_PAIR
991{
992 ULONG Register;
993 ULONG Value;
994} RTMP_REG_PAIR, *PRTMP_REG_PAIR;
995 502
996typedef struct _REG_PAIR
997{
998 UCHAR Register;
999 UCHAR Value;
1000} REG_PAIR, *PREG_PAIR;
1001 503
1002//
1003// Register set pair for initialzation register set definition
1004//
1005typedef struct _RTMP_RF_REGS
1006{
1007 UCHAR Channel;
1008 ULONG R1;
1009 ULONG R2;
1010 ULONG R3;
1011 ULONG R4;
1012} RTMP_RF_REGS, *PRTMP_RF_REGS;
1013
1014typedef struct _FREQUENCY_ITEM {
1015 UCHAR Channel;
1016 UCHAR N;
1017 UCHAR R;
1018 UCHAR K;
1019} FREQUENCY_ITEM, *PFREQUENCY_ITEM;
1020 504
1021// 505//
1022// Data buffer for DMA operation, the buffer must be contiguous physical memory 506// Data buffer for DMA operation, the buffer must be contiguous physical memory
@@ -1030,35 +514,6 @@ typedef struct _RTMP_DMABUF
1030} RTMP_DMABUF, *PRTMP_DMABUF; 514} RTMP_DMABUF, *PRTMP_DMABUF;
1031 515
1032 516
1033typedef union _HEADER_802_11_SEQ{
1034 struct {
1035 USHORT Frag:4;
1036 USHORT Sequence:12;
1037 } field;
1038 USHORT value;
1039} HEADER_802_11_SEQ, *PHEADER_802_11_SEQ;
1040
1041//
1042// Data buffer for DMA operation, the buffer must be contiguous physical memory
1043// Both DMA to / from CPU use the same structure.
1044//
1045typedef struct _RTMP_REORDERBUF
1046{
1047 BOOLEAN IsFull;
1048 PVOID AllocVa; // TxBuf virtual address
1049 UCHAR Header802_3[14];
1050 HEADER_802_11_SEQ Sequence; //support compressed bitmap BA, so no consider fragment in BA
1051 UCHAR DataOffset;
1052 USHORT Datasize;
1053 ULONG AllocSize;
1054#ifdef RT2860
1055 NDIS_PHYSICAL_ADDRESS AllocPa; // TxBuf physical address
1056#endif
1057#ifdef RT2870
1058 PUCHAR AllocPa;
1059#endif // RT2870 //
1060} RTMP_REORDERBUF, *PRTMP_REORDERBUF;
1061
1062// 517//
1063// Control block (Descriptor) for all ring descriptor DMA operation, buffer must be 518// Control block (Descriptor) for all ring descriptor DMA operation, buffer must be
1064// contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor 519// contiguous physical memory. NDIS_PACKET stored the binding Rx packet descriptor
@@ -1078,21 +533,7 @@ typedef struct _RTMP_DMACB
1078 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure 533 RTMP_DMABUF DmaBuf; // Associated DMA buffer structure
1079} RTMP_DMACB, *PRTMP_DMACB; 534} RTMP_DMACB, *PRTMP_DMACB;
1080 535
1081typedef struct _RTMP_TX_BUF
1082{
1083 PQUEUE_ENTRY Next;
1084 UCHAR Index;
1085 ULONG AllocSize; // Control block size
1086 PVOID AllocVa; // Control block virtual address
1087 NDIS_PHYSICAL_ADDRESS AllocPa; // Control block physical address
1088} RTMP_TXBUF, *PRTMP_TXBUF;
1089 536
1090typedef struct _RTMP_RX_BUF
1091{
1092 BOOLEAN InUse;
1093 ULONG ByBaRecIndex;
1094 RTMP_REORDERBUF MAP_RXBuf[MAX_RX_REORDERBUF];
1095} RTMP_RXBUF, *PRTMP_RXBUF;
1096typedef struct _RTMP_TX_RING 537typedef struct _RTMP_TX_RING
1097{ 538{
1098 RTMP_DMACB Cell[TX_RING_SIZE]; 539 RTMP_DMACB Cell[TX_RING_SIZE];
@@ -1155,9 +596,6 @@ typedef struct _COUNTER_802_11 {
1155 596
1156typedef struct _COUNTER_RALINK { 597typedef struct _COUNTER_RALINK {
1157 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput 598 ULONG TransmittedByteCount; // both successful and failure, used to calculate TX throughput
1158#ifdef RT2860
1159 ULONG LastReceivedByteCount;
1160#endif
1161 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput 599 ULONG ReceivedByteCount; // both CRC okay and CRC error, used to calculate RX throughput
1162 ULONG BeenDisassociatedCount; 600 ULONG BeenDisassociatedCount;
1163 ULONG BadCQIAutoRecoveryCount; 601 ULONG BadCQIAutoRecoveryCount;
@@ -1177,13 +615,10 @@ typedef struct _COUNTER_RALINK {
1177 ULONG OneSecRxCount; 615 ULONG OneSecRxCount;
1178 UINT32 OneSecTxAggregationCount; 616 UINT32 OneSecTxAggregationCount;
1179 UINT32 OneSecRxAggregationCount; 617 UINT32 OneSecRxAggregationCount;
1180 618 UINT32 OneSecReceivedByteCount;
1181 UINT32 OneSecFrameDuplicateCount; 619 UINT32 OneSecFrameDuplicateCount;
1182 620
1183#ifdef RT2870 621 UINT32 OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1184 ULONG OneSecTransmittedByteCount; // both successful and failure, used to calculate TX throughput
1185#endif // RT2870 //
1186
1187 UINT32 OneSecTxNoRetryOkCount; 622 UINT32 OneSecTxNoRetryOkCount;
1188 UINT32 OneSecTxRetryOkCount; 623 UINT32 OneSecTxRetryOkCount;
1189 UINT32 OneSecTxFailCount; 624 UINT32 OneSecTxFailCount;
@@ -1224,12 +659,6 @@ typedef struct _COUNTER_RALINK {
1224 LARGE_INTEGER MPDUInReceivedAMPDUCount; 659 LARGE_INTEGER MPDUInReceivedAMPDUCount;
1225} COUNTER_RALINK, *PCOUNTER_RALINK; 660} COUNTER_RALINK, *PCOUNTER_RALINK;
1226 661
1227typedef struct _PID_COUNTER {
1228 ULONG TxAckRequiredCount; // CRC error
1229 ULONG TxAggreCount;
1230 ULONG TxSuccessCount; // OneSecTxNoRetryOkCount + OneSecTxRetryOkCount + OneSecTxFailCount
1231 ULONG LastSuccessRate;
1232} PID_COUNTER, *PPID_COUNTER;
1233 662
1234typedef struct _COUNTER_DRS { 663typedef struct _COUNTER_DRS {
1235 // to record the each TX rate's quality. 0 is best, the bigger the worse. 664 // to record the each TX rate's quality. 0 is best, the bigger the worse.
@@ -1244,33 +673,12 @@ typedef struct _COUNTER_DRS {
1244 ULONG LastTxOkCount; 673 ULONG LastTxOkCount;
1245} COUNTER_DRS, *PCOUNTER_DRS; 674} COUNTER_DRS, *PCOUNTER_DRS;
1246 675
1247//
1248// Arcfour Structure Added by PaulWu
1249//
1250typedef struct _ARCFOUR
1251{
1252 UINT X;
1253 UINT Y;
1254 UCHAR STATE[256];
1255} ARCFOURCONTEXT, *PARCFOURCONTEXT;
1256 676
1257// MIMO Tx parameter, ShortGI, MCS, STBC, etc. these are fields in TXWI too. just copy to TXWI.
1258typedef struct _RECEIVE_SETTING {
1259 USHORT NumOfRX:2; // MIMO. WE HAVE 3R
1260 USHORT Mode:2; //channel bandwidth 20MHz or 40 MHz
1261 USHORT ShortGI:1;
1262 USHORT STBC:2; //SPACE
1263 USHORT rsv:3;
1264 USHORT OFDM:1;
1265 USHORT MIMO:1;
1266 } RECEIVE_SETTING, *PRECEIVE_SETTING;
1267
1268// Shared key data structure
1269typedef struct _WEP_KEY {
1270 UCHAR KeyLen; // Key length for each key, 0: entry is invalid
1271 UCHAR Key[MAX_LEN_OF_KEY]; // right now we implement 4 keys, 128 bits max
1272} WEP_KEY, *PWEP_KEY;
1273 677
678
679/***************************************************************************
680 * security key related data structure
681 **************************************************************************/
1274typedef struct _CIPHER_KEY { 682typedef struct _CIPHER_KEY {
1275 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max 683 UCHAR Key[16]; // right now we implement 4 keys, 128 bits max
1276 UCHAR RxMic[8]; // make alignment 684 UCHAR RxMic[8]; // make alignment
@@ -1284,42 +692,47 @@ typedef struct _CIPHER_KEY {
1284 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error 692 UCHAR Type; // Indicate Pairwise/Group when reporting MIC error
1285} CIPHER_KEY, *PCIPHER_KEY; 693} CIPHER_KEY, *PCIPHER_KEY;
1286 694
1287typedef struct _BBP_TUNING_STRUCT {
1288 BOOLEAN Enable;
1289 UCHAR FalseCcaCountUpperBound; // 100 per sec
1290 UCHAR FalseCcaCountLowerBound; // 10 per sec
1291 UCHAR R17LowerBound; // specified in E2PROM
1292 UCHAR R17UpperBound; // 0x68 according to David Tung
1293 UCHAR CurrentR17Value;
1294} BBP_TUNING, *PBBP_TUNING;
1295 695
1296typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT { 696// structure to define WPA Group Key Rekey Interval
1297 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status 697typedef struct PACKED _RT_802_11_WPA_REKEY {
1298#ifdef RT2870 698 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
1299 UCHAR EvaluateStableCnt; 699 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
1300#endif 700} RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
1301 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1302 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
1303 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1304 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
1305 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
1306 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
1307 SHORT Pair1LastAvgRssi; //
1308 SHORT Pair2LastAvgRssi; //
1309 ULONG RcvPktNumWhenEvaluate;
1310 BOOLEAN FirstPktArrivedWhenEvaluate;
1311 RALINK_TIMER_STRUCT RxAntDiversityTimer;
1312} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
1313 701
1314typedef struct _LEAP_AUTH_INFO { 702#ifdef RTMP_MAC_USB
1315 BOOLEAN Enabled; //Ture: Enable LEAP Authentication 703/***************************************************************************
1316 BOOLEAN CCKM; //Ture: Use Fast Reauthentication with CCKM 704 * RTUSB I/O related data structure
1317 UCHAR Reserve[2]; 705 **************************************************************************/
1318 UCHAR UserName[256]; //LEAP, User name 706typedef struct _RT_SET_ASIC_WCID {
1319 ULONG UserNameLen; 707 ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
1320 UCHAR Password[256]; //LEAP, User Password 708 ULONG SetTid; // time-based: seconds, packet-based: kilo-packets
1321 ULONG PasswordLen; 709 ULONG DeleteTid; // time-based: seconds, packet-based: kilo-packets
1322} LEAP_AUTH_INFO, *PLEAP_AUTH_INFO; 710 UCHAR Addr[MAC_ADDR_LEN]; // avoid in interrupt when write key
711} RT_SET_ASIC_WCID,*PRT_SET_ASIC_WCID;
712
713typedef struct _RT_SET_ASIC_WCID_ATTRI {
714 ULONG WCID; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
715 ULONG Cipher; // ASIC Cipher definition
716 UCHAR Addr[ETH_LENGTH_OF_ADDRESS];
717} RT_SET_ASIC_WCID_ATTRI,*PRT_SET_ASIC_WCID_ATTRI;
718
719// for USB interface, avoid in interrupt when write key
720typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
721 UCHAR MacAddr[6];
722 USHORT MacTabMatchWCID; // ASIC
723 CIPHER_KEY CipherKey;
724} RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
725
726// Cipher suite type for mixed mode group cipher, P802.11i-2004
727typedef enum _RT_802_11_CIPHER_SUITE_TYPE {
728 Cipher_Type_NONE,
729 Cipher_Type_WEP40,
730 Cipher_Type_TKIP,
731 Cipher_Type_RSVD,
732 Cipher_Type_CCMP,
733 Cipher_Type_WEP104
734} RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE;
735#endif // RTMP_MAC_USB //
1323 736
1324typedef struct { 737typedef struct {
1325 UCHAR Addr[MAC_ADDR_LEN]; 738 UCHAR Addr[MAC_ADDR_LEN];
@@ -1335,25 +748,30 @@ typedef struct {
1335 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE]; 748 ROGUEAP_ENTRY RogueApEntry[MAX_LEN_OF_BSS_TABLE];
1336} ROGUEAP_TABLE, *PROGUEAP_TABLE; 749} ROGUEAP_TABLE, *PROGUEAP_TABLE;
1337 750
1338typedef struct {
1339 BOOLEAN Enable;
1340 UCHAR Delta;
1341 BOOLEAN PlusSign;
1342} CCK_TX_POWER_CALIBRATE, *PCCK_TX_POWER_CALIBRATE;
1343
1344// 751//
1345// Receive Tuple Cache Format 752// Cisco IAPP format
1346// 753//
1347typedef struct _TUPLE_CACHE { 754typedef struct _CISCO_IAPP_CONTENT_
1348 BOOLEAN Valid; 755{
1349 UCHAR MacAddress[MAC_ADDR_LEN]; 756 USHORT Length; //IAPP Length
1350 USHORT Sequence; 757 UCHAR MessageType; //IAPP type
1351 USHORT Frag; 758 UCHAR FunctionCode; //IAPP function type
1352} TUPLE_CACHE, *PTUPLE_CACHE; 759 UCHAR DestinaionMAC[MAC_ADDR_LEN];
760 UCHAR SourceMAC[MAC_ADDR_LEN];
761 USHORT Tag; //Tag(element IE) - Adjacent AP report
762 USHORT TagLength; //Length of element not including 4 byte header
763 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
764 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
765 USHORT Channel;
766 USHORT SsidLen;
767 UCHAR Ssid[MAX_LEN_OF_SSID];
768 USHORT Seconds; //Seconds that the client has been disassociated.
769} CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
1353 770
1354// 771
1355// Fragment Frame structure 772/*
1356// 773 * Fragment Frame structure
774 */
1357typedef struct _FRAGMENT_FRAME { 775typedef struct _FRAGMENT_FRAME {
1358 PNDIS_PACKET pFragPacket; 776 PNDIS_PACKET pFragPacket;
1359 ULONG RxSize; 777 ULONG RxSize;
@@ -1373,6 +791,18 @@ typedef struct _PACKET_INFO {
1373 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor 791 PNDIS_BUFFER pFirstBuffer; // Pointer to first buffer descriptor
1374} PACKET_INFO, *PPACKET_INFO; 792} PACKET_INFO, *PPACKET_INFO;
1375 793
794
795//
796// Arcfour Structure Added by PaulWu
797//
798typedef struct _ARCFOUR
799{
800 UINT X;
801 UINT Y;
802 UCHAR STATE[256];
803} ARCFOURCONTEXT, *PARCFOURCONTEXT;
804
805
1376// 806//
1377// Tkip Key structure which RC4 key & MIC calculation 807// Tkip Key structure which RC4 key & MIC calculation
1378// 808//
@@ -1404,6 +834,10 @@ typedef struct __PRIVATE_STRUC {
1404 TKIP_KEY_INFO Rx; 834 TKIP_KEY_INFO Rx;
1405} PRIVATE_STRUC, *PPRIVATE_STRUC; 835} PRIVATE_STRUC, *PPRIVATE_STRUC;
1406 836
837
838/***************************************************************************
839 * Channel and BBP related data structures
840 **************************************************************************/
1407// structure to tune BBP R66 (BBP TUNING) 841// structure to tune BBP R66 (BBP TUNING)
1408typedef struct _BBP_R66_TUNING { 842typedef struct _BBP_R66_TUNING {
1409 BOOLEAN bEnable; 843 BOOLEAN bEnable;
@@ -1433,12 +867,56 @@ typedef struct _CHANNEL_11J_TX_POWER {
1433 USHORT RemainingTimeForUse; //unit: sec 867 USHORT RemainingTimeForUse; //unit: sec
1434} CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER; 868} CHANNEL_11J_TX_POWER, *PCHANNEL_11J_TX_POWER;
1435 869
870typedef struct _SOFT_RX_ANT_DIVERSITY_STRUCT {
871 UCHAR EvaluatePeriod; // 0:not evalute status, 1: evaluate status, 2: switching status
872 UCHAR EvaluateStableCnt;
873 UCHAR Pair1PrimaryRxAnt; // 0:Ant-E1, 1:Ant-E2
874 UCHAR Pair1SecondaryRxAnt; // 0:Ant-E1, 1:Ant-E2
875 UCHAR Pair2PrimaryRxAnt; // 0:Ant-E3, 1:Ant-E4
876 UCHAR Pair2SecondaryRxAnt; // 0:Ant-E3, 1:Ant-E4
877 SHORT Pair1AvgRssi[2]; // AvgRssi[0]:E1, AvgRssi[1]:E2
878 SHORT Pair2AvgRssi[2]; // AvgRssi[0]:E3, AvgRssi[1]:E4
879 SHORT Pair1LastAvgRssi; //
880 SHORT Pair2LastAvgRssi; //
881 ULONG RcvPktNumWhenEvaluate;
882 BOOLEAN FirstPktArrivedWhenEvaluate;
883 RALINK_TIMER_STRUCT RxAntDiversityTimer;
884} SOFT_RX_ANT_DIVERSITY, *PSOFT_RX_ANT_DIVERSITY;
885
886
887/***************************************************************************
888 * structure for radar detection and channel switch
889 **************************************************************************/
890typedef struct _RADAR_DETECT_STRUCT {
891 //BOOLEAN IEEE80211H; // 0: disable, 1: enable IEEE802.11h
892 UCHAR CSCount; //Channel switch counter
893 UCHAR CSPeriod; //Channel switch period (beacon count)
894 UCHAR RDCount; //Radar detection counter
895 UCHAR RDMode; //Radar Detection mode
896 UCHAR RDDurRegion; //Radar detection duration region
897 UCHAR BBPR16;
898 UCHAR BBPR17;
899 UCHAR BBPR18;
900 UCHAR BBPR21;
901 UCHAR BBPR22;
902 UCHAR BBPR64;
903 ULONG InServiceMonitorCount; // unit: sec
904 UINT8 DfsSessionTime;
905 BOOLEAN bFastDfs;
906 UINT8 ChMovingTime;
907 UINT8 LongPulseRadarTh;
908} RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT;
909
1436typedef enum _ABGBAND_STATE_ { 910typedef enum _ABGBAND_STATE_ {
1437 UNKNOWN_BAND, 911 UNKNOWN_BAND,
1438 BG_BAND, 912 BG_BAND,
1439 A_BAND, 913 A_BAND,
1440} ABGBAND_STATE; 914} ABGBAND_STATE;
1441 915
916
917/***************************************************************************
918 * structure for MLME state machine
919 **************************************************************************/
1442typedef struct _MLME_STRUCT { 920typedef struct _MLME_STRUCT {
1443 // STA state machines 921 // STA state machines
1444 STATE_MACHINE CntlMachine; 922 STATE_MACHINE CntlMachine;
@@ -1448,17 +926,23 @@ typedef struct _MLME_STRUCT {
1448 STATE_MACHINE SyncMachine; 926 STATE_MACHINE SyncMachine;
1449 STATE_MACHINE WpaPskMachine; 927 STATE_MACHINE WpaPskMachine;
1450 STATE_MACHINE LeapMachine; 928 STATE_MACHINE LeapMachine;
1451 STATE_MACHINE AironetMachine;
1452 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE]; 929 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
1453 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE]; 930 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
1454 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE]; 931 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
1455 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE]; 932 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
1456 STATE_MACHINE_FUNC WpaPskFunc[WPA_PSK_FUNC_SIZE];
1457 STATE_MACHINE_FUNC AironetFunc[AIRONET_FUNC_SIZE];
1458 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE]; 933 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
1459 // Action 934 // Action
1460 STATE_MACHINE ActMachine; 935 STATE_MACHINE ActMachine;
1461 936
937
938
939
940 // common WPA state machine
941 STATE_MACHINE WpaMachine;
942 STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE];
943
944
945
1462 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming 946 ULONG ChannelQuality; // 0..100, Channel Quality Indication for Roaming
1463 ULONG Now32; // latch the value of NdisGetSystemUpTime() 947 ULONG Now32; // latch the value of NdisGetSystemUpTime()
1464 ULONG LastSendNULLpsmTime; 948 ULONG LastSendNULLpsmTime;
@@ -1473,11 +957,11 @@ typedef struct _MLME_STRUCT {
1473 RALINK_TIMER_STRUCT APSDPeriodicTimer; 957 RALINK_TIMER_STRUCT APSDPeriodicTimer;
1474 RALINK_TIMER_STRUCT LinkDownTimer; 958 RALINK_TIMER_STRUCT LinkDownTimer;
1475 RALINK_TIMER_STRUCT LinkUpTimer; 959 RALINK_TIMER_STRUCT LinkUpTimer;
1476#ifdef RT2860 960#ifdef RTMP_MAC_PCI
1477 UCHAR bPsPollTimerRunning; 961 UCHAR bPsPollTimerRunning;
1478 RALINK_TIMER_STRUCT PsPollTimer; 962 RALINK_TIMER_STRUCT PsPollTimer;
1479 RALINK_TIMER_STRUCT RadioOnOffTimer; 963 RALINK_TIMER_STRUCT RadioOnOffTimer;
1480#endif 964#endif // RTMP_MAC_PCI //
1481 ULONG PeriodicRound; 965 ULONG PeriodicRound;
1482 ULONG OneSecPeriodicRound; 966 ULONG OneSecPeriodicRound;
1483 967
@@ -1486,31 +970,41 @@ typedef struct _MLME_STRUCT {
1486 BOOLEAN bEnableAutoAntennaCheck; 970 BOOLEAN bEnableAutoAntennaCheck;
1487 RALINK_TIMER_STRUCT RxAntEvalTimer; 971 RALINK_TIMER_STRUCT RxAntEvalTimer;
1488 972
1489#ifdef RT2870 973#ifdef RT30xx
1490 UCHAR CaliBW40RfR24; 974 UCHAR CaliBW40RfR24;
1491 UCHAR CaliBW20RfR24; 975 UCHAR CaliBW20RfR24;
1492#endif // RT2870 // 976#endif // RT30xx //
977
978#ifdef RTMP_MAC_USB
979 RALINK_TIMER_STRUCT AutoWakeupTimer;
980 BOOLEAN AutoWakeupTimerRunning;
981#endif // RTMP_MAC_USB //
1493} MLME_STRUCT, *PMLME_STRUCT; 982} MLME_STRUCT, *PMLME_STRUCT;
1494 983
1495// structure for radar detection and channel switch 984
1496typedef struct _RADAR_DETECT_STRUCT { 985/***************************************************************************
1497 UCHAR CSCount; //Channel switch counter 986 * 802.11 N related data structures
1498 UCHAR CSPeriod; //Channel switch period (beacon count) 987 **************************************************************************/
1499 UCHAR RDCount; //Radar detection counter 988struct reordering_mpdu
1500 UCHAR RDMode; //Radar Detection mode 989{
1501 UCHAR RDDurRegion; //Radar detection duration region 990 struct reordering_mpdu *next;
1502 UCHAR BBPR16; 991 PNDIS_PACKET pPacket; /* coverted to 802.3 frame */
1503 UCHAR BBPR17; 992 int Sequence; /* sequence number of MPDU */
1504 UCHAR BBPR18; 993 BOOLEAN bAMSDU;
1505 UCHAR BBPR21; 994};
1506 UCHAR BBPR22; 995
1507 UCHAR BBPR64; 996struct reordering_list
1508 ULONG InServiceMonitorCount; // unit: sec 997{
1509 UINT8 DfsSessionTime; 998 struct reordering_mpdu *next;
1510 BOOLEAN bFastDfs; 999 int qlen;
1511 UINT8 ChMovingTime; 1000};
1512 UINT8 LongPulseRadarTh; 1001
1513} RADAR_DETECT_STRUCT, *PRADAR_DETECT_STRUCT; 1002struct reordering_mpdu_pool
1003{
1004 PVOID mem;
1005 NDIS_SPIN_LOCK lock;
1006 struct reordering_list freelist;
1007};
1514 1008
1515typedef enum _REC_BLOCKACK_STATUS 1009typedef enum _REC_BLOCKACK_STATUS
1516{ 1010{
@@ -1545,14 +1039,21 @@ typedef struct _BA_REC_ENTRY {
1545 UCHAR Wcid; 1039 UCHAR Wcid;
1546 UCHAR TID; 1040 UCHAR TID;
1547 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU. 1041 UCHAR BAWinSize; // 7.3.1.14. each buffer is capable of holding a max AMSDU or MSDU.
1042 //UCHAR NumOfRxPkt;
1043 //UCHAR Curindidx; // the head in the RX reordering buffer
1548 USHORT LastIndSeq; 1044 USHORT LastIndSeq;
1045// USHORT LastIndSeqAtTimer;
1549 USHORT TimeOutValue; 1046 USHORT TimeOutValue;
1550 RALINK_TIMER_STRUCT RECBATimer; 1047 RALINK_TIMER_STRUCT RECBATimer;
1551 ULONG LastIndSeqAtTimer; 1048 ULONG LastIndSeqAtTimer;
1552 ULONG nDropPacket; 1049 ULONG nDropPacket;
1553 ULONG rcvSeq; 1050 ULONG rcvSeq;
1554 REC_BLOCKACK_STATUS REC_BA_Status; 1051 REC_BLOCKACK_STATUS REC_BA_Status;
1052// UCHAR RxBufIdxUsed;
1053 // corresponding virtual address for RX reordering packet storage.
1054 //RTMP_REORDERDMABUF MAP_RXBuf[MAX_RX_REORDERBUF];
1555 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock 1055 NDIS_SPIN_LOCK RxReRingLock; // Rx Ring spinlock
1056// struct _BA_REC_ENTRY *pNext;
1556 PVOID pAdapter; 1057 PVOID pAdapter;
1557 struct reordering_list list; 1058 struct reordering_list list;
1558} BA_REC_ENTRY, *PBA_REC_ENTRY; 1059} BA_REC_ENTRY, *PBA_REC_ENTRY;
@@ -1561,6 +1062,7 @@ typedef struct _BA_REC_ENTRY {
1561typedef struct { 1062typedef struct {
1562 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[] 1063 ULONG numAsRecipient; // I am recipient of numAsRecipient clients. These client are in the BARecEntry[]
1563 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[] 1064 ULONG numAsOriginator; // I am originator of numAsOriginator clients. These clients are in the BAOriEntry[]
1065 ULONG numDoneOriginator; // count Done Originator sessions
1564 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE]; 1066 BA_ORI_ENTRY BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
1565 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE]; 1067 BA_REC_ENTRY BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1566} BA_TABLE, *PBA_TABLE; 1068} BA_TABLE, *PBA_TABLE;
@@ -1607,6 +1109,29 @@ typedef union _BACAP_STRUC {
1607 UINT32 word; 1109 UINT32 word;
1608} BACAP_STRUC, *PBACAP_STRUC; 1110} BACAP_STRUC, *PBACAP_STRUC;
1609 1111
1112
1113typedef struct {
1114 BOOLEAN IsRecipient;
1115 UCHAR MACAddr[MAC_ADDR_LEN];
1116 UCHAR TID;
1117 UCHAR nMSDU;
1118 USHORT TimeOut;
1119 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr.
1120} OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY;
1121
1122
1123
1124#define IS_HT_STA(_pMacEntry) \
1125 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
1126
1127#define IS_HT_RATE(_pMacEntry) \
1128 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1129
1130#define PEER_IS_HT_RATE(_pMacEntry) \
1131 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1132
1133
1134
1610//This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic) 1135//This structure is for all 802.11n card InterOptibilityTest action. Reset all Num every n second. (Details see MLMEPeriodic)
1611typedef struct _IOT_STRUC { 1136typedef struct _IOT_STRUC {
1612 UCHAR Threshold[2]; 1137 UCHAR Threshold[2];
@@ -1630,6 +1155,8 @@ typedef struct _IOT_STRUC {
1630// This is the registry setting for 802.11n transmit setting. Used in advanced page. 1155// This is the registry setting for 802.11n transmit setting. Used in advanced page.
1631typedef union _REG_TRANSMIT_SETTING { 1156typedef union _REG_TRANSMIT_SETTING {
1632 struct { 1157 struct {
1158 //UINT32 PhyMode:4;
1159 //UINT32 MCS:7; // MCS
1633 UINT32 rsv0:10; 1160 UINT32 rsv0:10;
1634 UINT32 TxBF:1; 1161 UINT32 TxBF:1;
1635 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz 1162 UINT32 BW:1; //channel bandwidth 20MHz or 40 MHz
@@ -1653,18 +1180,26 @@ typedef union _DESIRED_TRANSMIT_SETTING {
1653 USHORT word; 1180 USHORT word;
1654 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING; 1181 } DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1655 1182
1656typedef struct { 1183#ifdef RTMP_MAC_USB
1657 BOOLEAN IsRecipient; 1184/***************************************************************************
1658 UCHAR MACAddr[MAC_ADDR_LEN]; 1185 * USB-based chip Beacon related data structures
1659 UCHAR TID; 1186 **************************************************************************/
1660 UCHAR nMSDU; 1187#define BEACON_BITMAP_MASK 0xff
1661 USHORT TimeOut; 1188typedef struct _BEACON_SYNC_STRUCT_
1662 BOOLEAN bAllTid; // If True, delete all TID for BA sessions with this MACaddr. 1189{
1663} OID_ADD_BA_ENTRY, *POID_ADD_BA_ENTRY; 1190 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1191 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1192 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1193 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1194 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1195 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1196 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1197}BEACON_SYNC_STRUCT;
1198#endif // RTMP_MAC_USB //
1664 1199
1665// 1200/***************************************************************************
1666// Multiple SSID structure 1201 * Multiple SSID related data structures
1667// 1202 **************************************************************************/
1668#define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */ 1203#define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1) /* /8 + 1 */
1669#define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */ 1204#define WLAN_CT_TIM_BCMC_OFFSET 0 /* unit: 32B */
1670 1205
@@ -1688,124 +1223,6 @@ typedef struct {
1688 UCHAR bit_offset = wcid & 0x7; \ 1223 UCHAR bit_offset = wcid & 0x7; \
1689 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; } 1224 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1690 1225
1691#ifdef RT2870
1692#define BEACON_BITMAP_MASK 0xff
1693typedef struct _BEACON_SYNC_STRUCT_
1694{
1695 UCHAR BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1696 UCHAR BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1697 ULONG TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1698 ULONG CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1699 BOOLEAN EnableBeacon; // trigger to enable beacon transmission.
1700 UCHAR BeaconBitMap; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1701 UCHAR DtimBitOn; // NOTE: If the MAX_MBSSID_NUM is larger than 8, this parameter need to change.
1702}BEACON_SYNC_STRUCT;
1703#endif // RT2870 //
1704
1705typedef struct _MULTISSID_STRUCT {
1706 UCHAR Bssid[MAC_ADDR_LEN];
1707 UCHAR SsidLen;
1708 CHAR Ssid[MAX_LEN_OF_SSID];
1709 USHORT CapabilityInfo;
1710
1711 PNET_DEV MSSIDDev;
1712
1713 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1714 NDIS_802_11_WEP_STATUS WepStatus;
1715 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1716 WPA_MIX_PAIR_CIPHER WpaMixPairCipher;
1717
1718 ULONG TxCount;
1719 ULONG RxCount;
1720 ULONG ReceivedByteCount;
1721 ULONG TransmittedByteCount;
1722 ULONG RxErrorCount;
1723 ULONG RxDropCount;
1724
1725 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1726 RT_HT_PHY_INFO DesiredHtPhyInfo;
1727 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting. this is for reading registry setting only. not useful.
1728 BOOLEAN bAutoTxRateSwitch;
1729
1730 UCHAR DefaultKeyId;
1731
1732 UCHAR TxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11, ...
1733 UCHAR DesiredRates[MAX_LEN_OF_SUPPORTED_RATES];// OID_802_11_DESIRED_RATES
1734 UCHAR DesiredRatesIndex;
1735 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1736
1737 UCHAR TimBitmaps[WLAN_MAX_NUM_OF_TIM];
1738
1739 // WPA
1740 UCHAR GMK[32];
1741 UCHAR PMK[32];
1742 UCHAR GTK[32];
1743 BOOLEAN IEEE8021X;
1744 BOOLEAN PreAuth;
1745 UCHAR GNonce[32];
1746 UCHAR PortSecured;
1747 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1748 UCHAR BANClass3Data;
1749 ULONG IsolateInterStaTraffic;
1750
1751 UCHAR RSNIE_Len[2];
1752 UCHAR RSN_IE[2][MAX_LEN_OF_RSNIE];
1753
1754
1755 UCHAR TimIELocationInBeacon;
1756 UCHAR CapabilityInfoLocationInBeacon;
1757 // outgoing BEACON frame buffer and corresponding TXWI
1758 // PTXWI_STRUC BeaconTxWI; //
1759 CHAR BeaconBuf[MAX_BEACON_SIZE]; // NOTE: BeaconBuf should be 4-byte aligned
1760
1761 BOOLEAN bHideSsid;
1762 UINT16 StationKeepAliveTime; // unit: second
1763
1764 USHORT VLAN_VID;
1765 USHORT VLAN_Priority;
1766
1767 RT_802_11_ACL AccessControlList;
1768
1769 // EDCA Qos
1770 BOOLEAN bWmmCapable; // 0:disable WMM, 1:enable WMM
1771 BOOLEAN bDLSCapable; // 0:disable DLS, 1:enable DLS
1772
1773 UCHAR DlsPTK[64]; // Due to windows dirver count on meetinghouse to handle 4-way shake
1774
1775 // For 802.1x daemon setting per BSS
1776 UCHAR radius_srv_num;
1777 RADIUS_SRV_INFO radius_srv_info[MAX_RADIUS_SRV_NUM];
1778
1779#ifdef RTL865X_SOC
1780 unsigned int mylinkid;
1781#endif
1782
1783
1784 UINT32 RcvdConflictSsidCount;
1785 UINT32 RcvdSpoofedAssocRespCount;
1786 UINT32 RcvdSpoofedReassocRespCount;
1787 UINT32 RcvdSpoofedProbeRespCount;
1788 UINT32 RcvdSpoofedBeaconCount;
1789 UINT32 RcvdSpoofedDisassocCount;
1790 UINT32 RcvdSpoofedAuthCount;
1791 UINT32 RcvdSpoofedDeauthCount;
1792 UINT32 RcvdSpoofedUnknownMgmtCount;
1793 UINT32 RcvdReplayAttackCount;
1794
1795 CHAR RssiOfRcvdConflictSsid;
1796 CHAR RssiOfRcvdSpoofedAssocResp;
1797 CHAR RssiOfRcvdSpoofedReassocResp;
1798 CHAR RssiOfRcvdSpoofedProbeResp;
1799 CHAR RssiOfRcvdSpoofedBeacon;
1800 CHAR RssiOfRcvdSpoofedDisassoc;
1801 CHAR RssiOfRcvdSpoofedAuth;
1802 CHAR RssiOfRcvdSpoofedDeauth;
1803 CHAR RssiOfRcvdSpoofedUnknownMgmt;
1804 CHAR RssiOfRcvdReplayAttack;
1805
1806 BOOLEAN bBcnSntReq;
1807 UCHAR BcnBufIdx;
1808} MULTISSID_STRUCT, *PMULTISSID_STRUCT;
1809 1226
1810// configuration common to OPMODE_AP as well as OPMODE_STA 1227// configuration common to OPMODE_AP as well as OPMODE_STA
1811typedef struct _COMMON_CONFIG { 1228typedef struct _COMMON_CONFIG {
@@ -1818,6 +1235,7 @@ typedef struct _COMMON_CONFIG {
1818 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED 1235 UCHAR PhyMode; // PHY_11A, PHY_11B, PHY_11BG_MIXED, PHY_ABG_MIXED
1819 USHORT Dsifs; // in units of usec 1236 USHORT Dsifs; // in units of usec
1820 ULONG PacketFilter; // Packet filter for receiving 1237 ULONG PacketFilter; // Packet filter for receiving
1238 UINT8 RegulatoryClass;
1821 1239
1822 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated 1240 CHAR Ssid[MAX_LEN_OF_SSID]; // NOT NULL-terminated
1823 UCHAR SsidLen; // the actual ssid length in used 1241 UCHAR SsidLen; // the actual ssid length in used
@@ -1846,16 +1264,27 @@ typedef struct _COMMON_CONFIG {
1846 BOOLEAN bAPSDAC_BK; 1264 BOOLEAN bAPSDAC_BK;
1847 BOOLEAN bAPSDAC_VI; 1265 BOOLEAN bAPSDAC_VI;
1848 BOOLEAN bAPSDAC_VO; 1266 BOOLEAN bAPSDAC_VO;
1267
1268 /* because TSPEC can modify the APSD flag, we need to keep the APSD flag
1269 requested in association stage from the station;
1270 we need to recover the APSD flag after the TSPEC is deleted. */
1271 BOOLEAN bACMAPSDBackup[4]; /* for delivery-enabled & trigger-enabled both */
1272 BOOLEAN bACMAPSDTr[4]; /* no use */
1273
1849 BOOLEAN bNeedSendTriggerFrame; 1274 BOOLEAN bNeedSendTriggerFrame;
1850 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT 1275 BOOLEAN bAPSDForcePowerSave; // Force power save mode, should only use in APSD-STAUT
1851 ULONG TriggerTimerCount; 1276 ULONG TriggerTimerCount;
1852 UCHAR MaxSPLength; 1277 UCHAR MaxSPLength;
1853 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40 1278 UCHAR BBPCurrentBW; // BW_10, BW_20, BW_40
1279 // move to MULTISSID_STRUCT for MBSS
1280 //HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;// For transmit phy setting in TXWI.
1854 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful. 1281 REG_TRANSMIT_SETTING RegTransmitSetting; //registry transmit setting. this is for reading registry setting only. not useful.
1282 //UCHAR FixedTxMode; // Fixed Tx Mode (CCK, OFDM), for HT fixed tx mode (GF, MIX) , refer to RegTransmitSetting.field.HTMode
1855 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit 1283 UCHAR TxRate; // Same value to fill in TXD. TxRate is 6-bit
1856 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 1284 UCHAR MaxTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1857 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable 1285 UCHAR TxRateIndex; // Tx rate index in RateSwitchTable
1858 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable 1286 UCHAR TxRateTableSize; // Valid Tx rate table size in RateSwitchTable
1287 //BOOLEAN bAutoTxRateSwitch;
1859 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11 1288 UCHAR MinTxRate; // RATE_1, RATE_2, RATE_5_5, RATE_11
1860 UCHAR RtsRate; // RATE_xxx 1289 UCHAR RtsRate; // RATE_xxx
1861 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate. 1290 HTTRANSMIT_SETTING MlmeTransmit; // MGMT frame PHY rate setting when operatin at Ht rate.
@@ -1868,6 +1297,7 @@ typedef struct _COMMON_CONFIG {
1868 UCHAR TxPower; // in unit of mW 1297 UCHAR TxPower; // in unit of mW
1869 ULONG TxPowerPercentage; // 0~100 % 1298 ULONG TxPowerPercentage; // 0~100 %
1870 ULONG TxPowerDefault; // keep for TxPowerPercentage 1299 ULONG TxPowerDefault; // keep for TxPowerPercentage
1300 UINT8 PwrConstraint;
1871 1301
1872 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 1302 BACAP_STRUC BACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
1873 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0 1303 BACAP_STRUC REGBACapability; // NO USE = 0XFF ; IMMED_BA =1 ; DELAY_BA=0
@@ -1877,7 +1307,7 @@ typedef struct _COMMON_CONFIG {
1877 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable 1307 BOOLEAN bUseZeroToDisableFragment; // Microsoft use 0 as disable
1878 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use 1308 ULONG UseBGProtection; // 0: auto, 1: always use, 2: always not use
1879 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us) 1309 BOOLEAN bUseShortSlotTime; // 0: disable, 1 - use short slot (9us)
1880 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST, 0: disable TX PACKET BURST 1310 BOOLEAN bEnableTxBurst; // 1: enble TX PACKET BURST (when BA is established or AP is not a legacy WMM AP), 0: disable TX PACKET BURST
1881 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it 1311 BOOLEAN bAggregationCapable; // 1: enable TX aggregation when the peer supports it
1882 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version 1312 BOOLEAN bPiggyBackCapable; // 1: enable TX piggy-back according MAC's version
1883 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec. 1313 BOOLEAN bIEEE80211H; // 1: enable IEEE802.11h spec.
@@ -1916,6 +1346,9 @@ typedef struct _COMMON_CONFIG {
1916 BOOLEAN bHTProtect; 1346 BOOLEAN bHTProtect;
1917 BOOLEAN bMIMOPSEnable; 1347 BOOLEAN bMIMOPSEnable;
1918 BOOLEAN bBADecline; 1348 BOOLEAN bBADecline;
1349//2008/11/05: KH add to support Antenna power-saving of AP<--
1350 BOOLEAN bGreenAPEnable;
1351//2008/11/05: KH add to support Antenna power-saving of AP-->
1919 BOOLEAN bDisableReordering; 1352 BOOLEAN bDisableReordering;
1920 BOOLEAN bForty_Mhz_Intolerant; 1353 BOOLEAN bForty_Mhz_Intolerant;
1921 BOOLEAN bExtChannelSwitchAnnouncement; 1354 BOOLEAN bExtChannelSwitchAnnouncement;
@@ -1932,15 +1365,9 @@ typedef struct _COMMON_CONFIG {
1932 UCHAR TxStream; 1365 UCHAR TxStream;
1933 UCHAR RxStream; 1366 UCHAR RxStream;
1934 1367
1935 // transmit phy mode, trasmit rate for Multicast.
1936#ifdef MCAST_RATE_SPECIFIC
1937 UCHAR McastTransmitMcs;
1938 UCHAR McastTransmitPhyMode;
1939#endif // MCAST_RATE_SPECIFIC //
1940
1941 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled 1368 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
1942 1369
1943#ifdef RT2870 1370#ifdef RTMP_MAC_USB
1944 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag 1371 BOOLEAN bMultipleIRP; // Multiple Bulk IN flag
1945 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1 1372 UCHAR NumOfBulkInIRP; // if bMultipleIRP == TRUE, NumOfBulkInIRP will be 4 otherwise be 1
1946 RT_HT_CAPABILITY SupportedHtPhy; 1373 RT_HT_CAPABILITY SupportedHtPhy;
@@ -1948,13 +1375,13 @@ typedef struct _COMMON_CONFIG {
1948 UCHAR TxBulkFactor; 1375 UCHAR TxBulkFactor;
1949 UCHAR RxBulkFactor; 1376 UCHAR RxBulkFactor;
1950 1377
1378 BOOLEAN IsUpdateBeacon;
1951 BEACON_SYNC_STRUCT *pBeaconSync; 1379 BEACON_SYNC_STRUCT *pBeaconSync;
1952 RALINK_TIMER_STRUCT BeaconUpdateTimer; 1380 RALINK_TIMER_STRUCT BeaconUpdateTimer;
1953 UINT32 BeaconAdjust; 1381 UINT32 BeaconAdjust;
1954 UINT32 BeaconFactor; 1382 UINT32 BeaconFactor;
1955 UINT32 BeaconRemain; 1383 UINT32 BeaconRemain;
1956#endif // RT2870 // 1384#endif // RTMP_MAC_USB //
1957
1958 1385
1959 NDIS_SPIN_LOCK MeasureReqTabLock; 1386 NDIS_SPIN_LOCK MeasureReqTabLock;
1960 PMEASURE_REQ_TAB pMeasureReqTab; 1387 PMEASURE_REQ_TAB pMeasureReqTab;
@@ -1962,12 +1389,17 @@ typedef struct _COMMON_CONFIG {
1962 NDIS_SPIN_LOCK TpcReqTabLock; 1389 NDIS_SPIN_LOCK TpcReqTabLock;
1963 PTPC_REQ_TAB pTpcReqTab; 1390 PTPC_REQ_TAB pTpcReqTab;
1964 1391
1965 // transmit phy mode, trasmit rate for Multicast. 1392 BOOLEAN PSPXlink; // 0: Disable. 1: Enable
1966#ifdef MCAST_RATE_SPECIFIC 1393
1967 HTTRANSMIT_SETTING MCastPhyMode; 1394#if defined(RT305x)||defined(RT30xx)
1968#endif // MCAST_RATE_SPECIFIC // 1395 // request by Gary, for High Power issue
1396 UCHAR HighPowerPatchDisabled;
1397#endif
1398
1399 BOOLEAN HT_DisallowTKIP; /* Restrict the encryption type in 11n HT mode */
1969} COMMON_CONFIG, *PCOMMON_CONFIG; 1400} COMMON_CONFIG, *PCOMMON_CONFIG;
1970 1401
1402
1971/* Modified by Wu Xi-Kun 4/21/2006 */ 1403/* Modified by Wu Xi-Kun 4/21/2006 */
1972// STA configuration and status 1404// STA configuration and status
1973typedef struct _STA_ADMIN_CONFIG { 1405typedef struct _STA_ADMIN_CONFIG {
@@ -2016,6 +1448,8 @@ typedef struct _STA_ADMIN_CONFIG {
2016 1448
2017 NDIS_802_11_WEP_STATUS GroupKeyWepStatus; 1449 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2018 1450
1451 UCHAR WpaPassPhrase[64]; // WPA PSK pass phrase
1452 UINT WpaPassPhraseLen; // the length of WPA PSK pass phrase
2019 UCHAR PMK[32]; // WPA PSK mode PMK 1453 UCHAR PMK[32]; // WPA PSK mode PMK
2020 UCHAR PTK[64]; // WPA PSK mode PTK 1454 UCHAR PTK[64]; // WPA PSK mode PTK
2021 UCHAR GTK[32]; // GTK from authenticator 1455 UCHAR GTK[32]; // GTK from authenticator
@@ -2055,11 +1489,7 @@ typedef struct _STA_ADMIN_CONFIG {
2055 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state 1489 BOOLEAN bRadio; // Radio state, And of Sw & Hw radio state
2056 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled 1490 BOOLEAN bHardwareRadio; // Hardware controlled Radio enabled
2057 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation 1491 BOOLEAN bShowHiddenSSID; // Show all known SSID in SSID list get operation
2058#ifdef RT2860 1492
2059 BOOLEAN AdhocBOnlyJoined; // Indicate Adhoc B Join.
2060 BOOLEAN AdhocBGJoined; // Indicate Adhoc B/G Join.
2061 BOOLEAN Adhoc20NJoined; // Indicate Adhoc 20MHz N Join.
2062#endif
2063 // New for WPA, windows want us to keep association information and 1493 // New for WPA, windows want us to keep association information and
2064 // Fixed IEs from last association response 1494 // Fixed IEs from last association response
2065 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo; 1495 NDIS_802_11_ASSOCIATION_INFORMATION AssocInfo;
@@ -2071,43 +1501,9 @@ typedef struct _STA_ADMIN_CONFIG {
2071 UCHAR RSNIE_Len; 1501 UCHAR RSNIE_Len;
2072 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format. 1502 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be little-endian format.
2073 1503
2074 // New variables used for CCX 1.0
2075 BOOLEAN bCkipOn;
2076 BOOLEAN bCkipCmicOn;
2077 UCHAR CkipFlag;
2078 UCHAR GIV[3]; //for CCX iv
2079 UCHAR RxSEQ[4];
2080 UCHAR TxSEQ[4];
2081 UCHAR CKIPMIC[4];
2082 UCHAR LeapAuthMode;
2083 LEAP_AUTH_INFO LeapAuthInfo;
2084 UCHAR HashPwd[16];
2085 UCHAR NetworkChallenge[8];
2086 UCHAR NetworkChallengeResponse[24];
2087 UCHAR PeerChallenge[8];
2088
2089 UCHAR PeerChallengeResponse[24];
2090 UCHAR SessionKey[16]; //Network session keys (NSK)
2091 RALINK_TIMER_STRUCT LeapAuthTimer;
2092 ROGUEAP_TABLE RogueApTab; //Cisco CCX1 Rogue AP Detection
2093
2094 // New control flags for CCX
2095 CCX_CONTROL CCXControl; // Master administration state
2096 BOOLEAN CCXEnable; // Actual CCX state
2097 UCHAR CCXScanChannel; // Selected channel for CCX beacon request
2098 USHORT CCXScanTime; // Time out to wait for beacon and probe response
2099 UCHAR CCXReqType; // Current processing CCX request type
2100 BSS_TABLE CCXBssTab; // BSS Table
2101 UCHAR FrameReportBuf[2048]; // Buffer for creating frame report
2102 USHORT FrameReportLen; // Current Frame report length
2103 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time 1504 ULONG CLBusyBytes; // Save the total bytes received durning channel load scan time
2104 USHORT RPIDensity[8]; // Array for RPI density collection 1505 USHORT RPIDensity[8]; // Array for RPI density collection
2105 // Start address of each BSS table within FrameReportBuf 1506
2106 // It's important to update the RxPower of the corresponding Bss
2107 USHORT BssReportOffset[MAX_LEN_OF_BSS_TABLE];
2108 USHORT BeaconToken; // Token for beacon report
2109 ULONG LastBssIndex; // Most current reported Bss index
2110 RM_REQUEST_ACTION MeasurementRequest[16]; // Saved measurement request
2111 UCHAR RMReqCnt; // Number of measurement request saved. 1507 UCHAR RMReqCnt; // Number of measurement request saved.
2112 UCHAR CurrentRMReqIdx; // Number of measurement request saved. 1508 UCHAR CurrentRMReqIdx; // Number of measurement request saved.
2113 BOOLEAN ParallelReq; // Parallel measurement, only one request performed, 1509 BOOLEAN ParallelReq; // Parallel measurement, only one request performed,
@@ -2115,26 +1511,10 @@ typedef struct _STA_ADMIN_CONFIG {
2115 USHORT ParallelDuration; // Maximum duration for parallel measurement 1511 USHORT ParallelDuration; // Maximum duration for parallel measurement
2116 UCHAR ParallelChannel; // Only one channel with parallel measurement 1512 UCHAR ParallelChannel; // Only one channel with parallel measurement
2117 USHORT IAPPToken; // IAPP dialog token 1513 USHORT IAPPToken; // IAPP dialog token
2118 UCHAR CCXQosECWMin; // Cisco QOS ECWMin for AC 0
2119 UCHAR CCXQosECWMax; // Cisco QOS ECWMax for AC 0
2120 // Hack for channel load and noise histogram parameters 1514 // Hack for channel load and noise histogram parameters
2121 UCHAR NHFactor; // Parameter for Noise histogram 1515 UCHAR NHFactor; // Parameter for Noise histogram
2122 UCHAR CLFactor; // Parameter for channel load 1516 UCHAR CLFactor; // Parameter for channel load
2123 1517
2124 UCHAR KRK[16]; //Key Refresh Key.
2125 UCHAR BTK[32]; //Base Transient Key
2126 BOOLEAN CCKMLinkUpFlag;
2127 ULONG CCKMRN; //(Re)Association request number.
2128 LARGE_INTEGER CCKMBeaconAtJoinTimeStamp; //TSF timer for Re-assocaite to the new AP
2129 UCHAR AironetCellPowerLimit; //in dBm
2130 UCHAR AironetIPAddress[4]; //eg. 192.168.1.1
2131 BOOLEAN CCXAdjacentAPReportFlag; //flag for determining report Assoc Lost time
2132 CHAR CCXAdjacentAPSsid[MAX_LEN_OF_SSID]; //Adjacent AP's SSID report
2133 UCHAR CCXAdjacentAPSsidLen; // the actual ssid length in used
2134 UCHAR CCXAdjacentAPBssid[MAC_ADDR_LEN]; //Adjacent AP's BSSID report
2135 USHORT CCXAdjacentAPChannel;
2136 ULONG CCXAdjacentAPLinkDownTime; //for Spec S32.
2137
2138 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer; 1518 RALINK_TIMER_STRUCT StaQuickResponeForRateUpTimer;
2139 BOOLEAN StaQuickResponeForRateUpTimerRunning; 1519 BOOLEAN StaQuickResponeForRateUpTimerRunning;
2140 1520
@@ -2148,7 +1528,7 @@ typedef struct _STA_ADMIN_CONFIG {
2148 1528
2149 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer; 1529 RALINK_TIMER_STRUCT WpaDisassocAndBlockAssocTimer;
2150 // Fast Roaming 1530 // Fast Roaming
2151 BOOLEAN bFastRoaming; // 0:disable fast roaming, 1:enable fast roaming 1531 BOOLEAN bAutoRoaming; // 0:disable auto roaming by RSSI, 1:enable auto roaming by RSSI
2152 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value. 1532 CHAR dBmToRoam; // the condition to roam when receiving Rssi less than this value. It's negative value.
2153 1533
2154 BOOLEAN IEEE8021X; 1534 BOOLEAN IEEE8021X;
@@ -2161,6 +1541,8 @@ typedef struct _STA_ADMIN_CONFIG {
2161 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters 1541 // 2: driver takes care of scanning, AP selection, and IEEE 802.11 association parameters
2162 UCHAR WpaSupplicantUP; 1542 UCHAR WpaSupplicantUP;
2163 UCHAR WpaSupplicantScanCount; 1543 UCHAR WpaSupplicantScanCount;
1544 BOOLEAN bRSN_IE_FromWpaSupplicant;
1545 BOOLEAN bLostAp;
2164 1546
2165 CHAR dev_name[16]; 1547 CHAR dev_name[16];
2166 USHORT OriDevType; 1548 USHORT OriDevType;
@@ -2173,9 +1555,16 @@ typedef struct _STA_ADMIN_CONFIG {
2173 RT_HT_PHY_INFO DesiredHtPhyInfo; 1555 RT_HT_PHY_INFO DesiredHtPhyInfo;
2174 BOOLEAN bAutoTxRateSwitch; 1556 BOOLEAN bAutoTxRateSwitch;
2175 1557
2176#ifdef RT2860 1558#ifdef RTMP_MAC_PCI
2177 UCHAR BBPR3; 1559 UCHAR BBPR3;
2178#endif 1560#endif // RTMP_MAC_PCI //
1561
1562
1563
1564
1565 BOOLEAN bAutoConnectByBssid;
1566 ULONG BeaconLostTime; // seconds
1567 BOOLEAN bForceTxBurst; // 1: force enble TX PACKET BURST, 0: disable
2179} STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG; 1568} STA_ADMIN_CONFIG, *PSTA_ADMIN_CONFIG;
2180 1569
2181// This data structure keep the current active BSS/IBSS's configuration that this STA 1570// This data structure keep the current active BSS/IBSS's configuration that this STA
@@ -2202,28 +1591,10 @@ typedef struct _STA_ACTIVE_CONFIG {
2202 RT_HT_CAPABILITY SupportedHtPhy; 1591 RT_HT_CAPABILITY SupportedHtPhy;
2203} STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG; 1592} STA_ACTIVE_CONFIG, *PSTA_ACTIVE_CONFIG;
2204 1593
2205#ifdef RT2870
2206// for USB interface, avoid in interrupt when write key
2207typedef struct RT_ADD_PAIRWISE_KEY_ENTRY {
2208 NDIS_802_11_MAC_ADDRESS MacAddr;
2209 USHORT MacTabMatchWCID; // ASIC
2210 CIPHER_KEY CipherKey;
2211} RT_ADD_PAIRWISE_KEY_ENTRY,*PRT_ADD_PAIRWISE_KEY_ENTRY;
2212#endif // RT2870 //
2213 1594
2214// ----------- start of AP --------------------------
2215// AUTH-RSP State Machine Aux data structure
2216typedef struct _AP_MLME_AUX {
2217 UCHAR Addr[MAC_ADDR_LEN];
2218 USHORT Alg;
2219 CHAR Challenge[CIPHER_TEXT_LEN];
2220} AP_MLME_AUX, *PAP_MLME_AUX;
2221 1595
2222// structure to define WPA Group Key Rekey Interval 1596
2223typedef struct PACKED _RT_802_11_WPA_REKEY { 1597
2224 ULONG ReKeyMethod; // mechanism for rekeying: 0:disable, 1: time-based, 2: packet-based
2225 ULONG ReKeyInterval; // time-based: seconds, packet-based: kilo-packets
2226} RT_WPA_REKEY,*PRT_WPA_REKEY, RT_802_11_WPA_REKEY, *PRT_802_11_WPA_REKEY;
2227 1598
2228typedef struct _MAC_TABLE_ENTRY { 1599typedef struct _MAC_TABLE_ENTRY {
2229 //Choose 1 from ValidAsWDS and ValidAsCLI to validize. 1600 //Choose 1 from ValidAsWDS and ValidAsCLI to validize.
@@ -2243,6 +1614,7 @@ typedef struct _MAC_TABLE_ENTRY {
2243 UCHAR RSNIE_Len; 1614 UCHAR RSNIE_Len;
2244 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; 1615 UCHAR RSN_IE[MAX_LEN_OF_RSNIE];
2245 UCHAR ANonce[LEN_KEY_DESC_NONCE]; 1616 UCHAR ANonce[LEN_KEY_DESC_NONCE];
1617 UCHAR SNonce[LEN_KEY_DESC_NONCE];
2246 UCHAR R_Counter[LEN_KEY_DESC_REPLAY]; 1618 UCHAR R_Counter[LEN_KEY_DESC_REPLAY];
2247 UCHAR PTK[64]; 1619 UCHAR PTK[64];
2248 UCHAR ReTryCounter; 1620 UCHAR ReTryCounter;
@@ -2250,6 +1622,7 @@ typedef struct _MAC_TABLE_ENTRY {
2250 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM 1622 RALINK_TIMER_STRUCT EnqueueStartForPSKTimer; // A timer which enqueue EAPoL-Start for triggering PSK SM
2251 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined 1623 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2252 NDIS_802_11_WEP_STATUS WepStatus; 1624 NDIS_802_11_WEP_STATUS WepStatus;
1625 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
2253 AP_WPA_STATE WpaState; 1626 AP_WPA_STATE WpaState;
2254 GTK_STATE GTKState; 1627 GTK_STATE GTKState;
2255 USHORT PortSecured; 1628 USHORT PortSecured;
@@ -2288,13 +1661,14 @@ typedef struct _MAC_TABLE_ENTRY {
2288 1661
2289//==================================================== 1662//====================================================
2290//WDS entry needs these 1663//WDS entry needs these
2291// rt2860 add this. if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab 1664// if ValidAsWDS==TRUE, MatchWDSTabIdx is the index in WdsTab.MacTab
2292 UINT MatchWDSTabIdx; 1665 UINT MatchWDSTabIdx;
2293 UCHAR MaxSupportedRate; 1666 UCHAR MaxSupportedRate;
2294 UCHAR CurrTxRate; 1667 UCHAR CurrTxRate;
2295 UCHAR CurrTxRateIndex; 1668 UCHAR CurrTxRateIndex;
2296 // to record the each TX rate's quality. 0 is best, the bigger the worse. 1669 // to record the each TX rate's quality. 0 is best, the bigger the worse.
2297 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH]; 1670 USHORT TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1671// USHORT OneSecTxOkCount;
2298 UINT32 OneSecTxNoRetryOkCount; 1672 UINT32 OneSecTxNoRetryOkCount;
2299 UINT32 OneSecTxRetryOkCount; 1673 UINT32 OneSecTxRetryOkCount;
2300 UINT32 OneSecTxFailCount; 1674 UINT32 OneSecTxFailCount;
@@ -2348,9 +1722,10 @@ typedef struct _MAC_TABLE_ENTRY {
2348 UINT32 TXMCSSuccessful[16]; 1722 UINT32 TXMCSSuccessful[16];
2349 UINT32 TXMCSFailed[16]; 1723 UINT32 TXMCSFailed[16];
2350 UINT32 TXMCSAutoFallBack[16][16]; 1724 UINT32 TXMCSAutoFallBack[16][16];
2351#ifdef RT2870 1725
2352 ULONG LastBeaconRxTime; 1726 ULONG LastBeaconRxTime;
2353#endif 1727
1728 ULONG AssocDeadLine;
2354} MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY; 1729} MAC_TABLE_ENTRY, *PMAC_TABLE_ENTRY;
2355 1730
2356typedef struct _MAC_TABLE { 1731typedef struct _MAC_TABLE {
@@ -2362,134 +1737,20 @@ typedef struct _MAC_TABLE {
2362 BOOLEAN fAnyStationInPsm; 1737 BOOLEAN fAnyStationInPsm;
2363 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip. 1738 BOOLEAN fAnyStationBadAtheros; // Check if any Station is atheros 802.11n Chip. We need to use RTS/CTS with Atheros 802,.11n chip.
2364 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP 1739 BOOLEAN fAnyTxOPForceDisable; // Check if it is necessary to disable BE TxOP
2365#ifdef RT2870
2366 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset 1740 BOOLEAN fAllStationAsRalink; // Check if all stations are ralink-chipset
2367#endif
2368 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/ 1741 BOOLEAN fAnyStationIsLegacy; // Check if I use legacy rate to transmit to my BSS Station/
2369 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF. 1742 BOOLEAN fAnyStationNonGF; // Check if any Station can't support GF.
2370 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF. 1743 BOOLEAN fAnyStation20Only; // Check if any Station can't support GF.
2371 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic 1744 BOOLEAN fAnyStationMIMOPSDynamic; // Check if any Station is MIMO Dynamic
2372 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS 1745 BOOLEAN fAnyBASession; // Check if there is BA session. Force turn on RTS/CTS
1746//2008/10/28: KH add to support Antenna power-saving of AP<--
1747//2008/10/28: KH add to support Antenna power-saving of AP-->
2373} MAC_TABLE, *PMAC_TABLE; 1748} MAC_TABLE, *PMAC_TABLE;
2374 1749
2375#define IS_HT_STA(_pMacEntry) \
2376 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
2377
2378#define IS_HT_RATE(_pMacEntry) \
2379 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2380
2381#define PEER_IS_HT_RATE(_pMacEntry) \
2382 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
2383
2384typedef struct _WDS_ENTRY {
2385 BOOLEAN Valid;
2386 UCHAR Addr[MAC_ADDR_LEN];
2387 ULONG NoDataIdleCount;
2388 struct _WDS_ENTRY *pNext;
2389} WDS_ENTRY, *PWDS_ENTRY;
2390
2391typedef struct _WDS_TABLE_ENTRY {
2392 USHORT Size;
2393 UCHAR WdsAddr[MAC_ADDR_LEN];
2394 WDS_ENTRY *Hash[HASH_TABLE_SIZE];
2395 WDS_ENTRY Content[MAX_LEN_OF_MAC_TABLE];
2396 UCHAR MaxSupportedRate;
2397 UCHAR CurrTxRate;
2398 USHORT TxQuality[MAX_LEN_OF_SUPPORTED_RATES];
2399 USHORT OneSecTxOkCount;
2400 USHORT OneSecTxRetryOkCount;
2401 USHORT OneSecTxFailCount;
2402 ULONG CurrTxRateStableTime; // # of second in current TX rate
2403 UCHAR TxRateUpPenalty; // extra # of second penalty due to last unstable condition
2404} WDS_TABLE_ENTRY, *PWDS_TABLE_ENTRY;
2405
2406typedef struct _RT_802_11_WDS_ENTRY {
2407 PNET_DEV dev;
2408 UCHAR Valid;
2409 UCHAR PhyMode;
2410 UCHAR PeerWdsAddr[MAC_ADDR_LEN];
2411 UCHAR MacTabMatchWCID; // ASIC
2412 NDIS_802_11_WEP_STATUS WepStatus;
2413 UCHAR KeyIdx;
2414 CIPHER_KEY WdsKey;
2415 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2416 RT_HT_PHY_INFO DesiredHtPhyInfo;
2417 BOOLEAN bAutoTxRateSwitch;
2418 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2419} RT_802_11_WDS_ENTRY, *PRT_802_11_WDS_ENTRY;
2420
2421typedef struct _WDS_TABLE {
2422 UCHAR Mode;
2423 ULONG Size;
2424 RT_802_11_WDS_ENTRY WdsEntry[MAX_WDS_ENTRY];
2425} WDS_TABLE, *PWDS_TABLE;
2426
2427typedef struct _APCLI_STRUCT {
2428 PNET_DEV dev;
2429#ifdef RTL865X_SOC
2430 unsigned int mylinkid;
2431#endif
2432 BOOLEAN Enable; // Set it as 1 if the apcli interface was configured to "1" or by iwpriv cmd "ApCliEnable"
2433 BOOLEAN Valid; // Set it as 1 if the apcli interface associated success to remote AP.
2434 UCHAR MacTabWCID; //WCID value, which point to the entry of ASIC Mac table.
2435 UCHAR SsidLen;
2436 CHAR Ssid[MAX_LEN_OF_SSID];
2437
2438 UCHAR CfgSsidLen;
2439 CHAR CfgSsid[MAX_LEN_OF_SSID];
2440 UCHAR CfgApCliBssid[ETH_LENGTH_OF_ADDRESS];
2441 UCHAR CurrentAddress[ETH_LENGTH_OF_ADDRESS];
2442 1750
2443 ULONG ApCliRcvBeaconTime;
2444 1751
2445 ULONG CtrlCurrState;
2446 ULONG SyncCurrState;
2447 ULONG AuthCurrState;
2448 ULONG AssocCurrState;
2449 ULONG WpaPskCurrState;
2450 1752
2451 USHORT AuthReqCnt;
2452 USHORT AssocReqCnt;
2453
2454 ULONG ClientStatusFlags;
2455 UCHAR MpduDensity;
2456
2457 NDIS_802_11_AUTHENTICATION_MODE AuthMode; // This should match to whatever microsoft defined
2458 NDIS_802_11_WEP_STATUS WepStatus;
2459
2460 // Add to support different cipher suite for WPA2/WPA mode
2461 NDIS_802_11_ENCRYPTION_STATUS GroupCipher; // Multicast cipher suite
2462 NDIS_802_11_ENCRYPTION_STATUS PairCipher; // Unicast cipher suite
2463 BOOLEAN bMixCipher; // Indicate current Pair & Group use different cipher suites
2464 USHORT RsnCapability;
2465
2466 UCHAR PSK[100]; // reserve PSK key material
2467 UCHAR PSKLen;
2468 UCHAR PMK[32]; // WPA PSK mode PMK
2469 UCHAR GTK[32]; // GTK from authenticator
2470 1753
2471 CIPHER_KEY SharedKey[SHARE_KEY_NUM];
2472 UCHAR DefaultKeyId;
2473
2474 // store RSN_IE built by driver
2475 UCHAR RSN_IE[MAX_LEN_OF_RSNIE]; // The content saved here should be convert to little-endian format.
2476 UCHAR RSNIE_Len;
2477
2478 // For WPA countermeasures
2479 ULONG LastMicErrorTime; // record last MIC error time
2480 BOOLEAN bBlockAssoc; // Block associate attempt for 60 seconds after counter measure occurred.
2481
2482 // For WPA-PSK supplicant state
2483 UCHAR SNonce[32]; // SNonce for WPA-PSK
2484 UCHAR GNonce[32]; // GNonce for WPA-PSK from authenticator
2485
2486 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
2487 RT_HT_PHY_INFO DesiredHtPhyInfo;
2488 BOOLEAN bAutoTxRateSwitch;
2489 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting; // Desired transmit setting.
2490} APCLI_STRUCT, *PAPCLI_STRUCT;
2491
2492// ----------- end of AP ----------------------------
2493 1754
2494struct wificonf 1755struct wificonf
2495{ 1756{
@@ -2498,32 +1759,56 @@ struct wificonf
2498}; 1759};
2499 1760
2500 1761
2501 1762typedef struct _RTMP_DEV_INFO_
2502
2503typedef struct _INF_PCI_CONFIG
2504{ 1763{
2505 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use 1764 UCHAR chipName[16];
2506}INF_PCI_CONFIG; 1765 RTMP_INF_TYPE infType;
1766}RTMP_DEV_INFO;
2507 1767
2508typedef struct _INF_USB_CONFIG
2509{
2510 UINT BulkInEpAddr; // bulk-in endpoint address
2511 UINT BulkOutEpAddr[6]; // bulk-out endpoint address
2512 1768
2513}INF_USB_CONFIG;
2514 1769
2515 1770
1771struct _RTMP_CHIP_OP_
1772{
1773 /* Calibration access related callback functions */
1774 int (*eeinit)(RTMP_ADAPTER *pAd); /* int (*eeinit)(RTMP_ADAPTER *pAd); */
1775 int (*eeread)(RTMP_ADAPTER *pAd, USHORT offset, PUSHORT pValue); /* int (*eeread)(RTMP_ADAPTER *pAd, int offset, PUSHORT pValue); */
1776 int (*eewrite)(RTMP_ADAPTER *pAd, USHORT offset, USHORT value);; /* int (*eewrite)(RTMP_ADAPTER *pAd, int offset, USHORT value); */
1777
1778 /* MCU related callback functions */
1779 int (*loadFirmware)(RTMP_ADAPTER *pAd); /* int (*loadFirmware)(RTMP_ADAPTER *pAd); */
1780 int (*eraseFirmware)(RTMP_ADAPTER *pAd); /* int (*eraseFirmware)(RTMP_ADAPTER *pAd); */
1781 int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1);; /* int (*sendCommandToMcu)(RTMP_ADAPTER *pAd, UCHAR cmd, UCHAR token, UCHAR arg0, UCHAR arg1); */
1782
1783 /* RF access related callback functions */
1784 REG_PAIR *pRFRegTable;
1785 void (*AsicRfInit)(RTMP_ADAPTER *pAd);
1786 void (*AsicRfTurnOn)(RTMP_ADAPTER *pAd);
1787 void (*AsicRfTurnOff)(RTMP_ADAPTER *pAd);
1788 void (*AsicReverseRfFromSleepMode)(RTMP_ADAPTER *pAd);
1789 void (*AsicHaltAction)(RTMP_ADAPTER *pAd);
1790};
1791
2516 1792
2517// 1793//
2518// The miniport adapter structure 1794// The miniport adapter structure
2519// 1795//
2520typedef struct _RTMP_ADAPTER 1796struct _RTMP_ADAPTER
2521{ 1797{
2522 PVOID OS_Cookie; // save specific structure relative to OS 1798 PVOID OS_Cookie; // save specific structure relative to OS
2523 PNET_DEV net_dev; 1799 PNET_DEV net_dev;
2524 ULONG VirtualIfCnt; 1800 ULONG VirtualIfCnt;
2525 1801
2526#ifdef RT2860 1802 RTMP_CHIP_OP chipOps;
1803 USHORT ThisTbttNumToNextWakeUp;
1804
1805#ifdef RTMP_MAC_PCI
1806/*****************************************************************************************/
1807/* PCI related parameters */
1808/*****************************************************************************************/
1809 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
1810 unsigned int irq_num;
1811
2527 USHORT LnkCtrlBitMask; 1812 USHORT LnkCtrlBitMask;
2528 USHORT RLnkCtrlConfiguration; 1813 USHORT RLnkCtrlConfiguration;
2529 USHORT RLnkCtrlOffset; 1814 USHORT RLnkCtrlOffset;
@@ -2531,15 +1816,7 @@ typedef struct _RTMP_ADAPTER
2531 USHORT HostLnkCtrlOffset; 1816 USHORT HostLnkCtrlOffset;
2532 USHORT PCIePowerSaveLevel; 1817 USHORT PCIePowerSaveLevel;
2533 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace.. 1818 BOOLEAN bPCIclkOff; // flag that indicate if the PICE power status in Configuration SPace..
2534 ULONG CheckDmaBusyCount; // Check Interrupt Status Register Count. 1819 BOOLEAN bPCIclkOffDisableTx; //
2535 USHORT ThisTbttNumToNextWakeUp;
2536 ULONG SameRxByteCount;
2537
2538
2539/*****************************************************************************************/
2540/* PCI related parameters */
2541/*****************************************************************************************/
2542 PUCHAR CSRBaseAddress; // PCI MMIO Base Address, all access will use
2543 1820
2544 UINT int_enable_reg; 1821 UINT int_enable_reg;
2545 UINT int_disable_mask; 1822 UINT int_disable_mask;
@@ -2550,12 +1827,13 @@ typedef struct _RTMP_ADAPTER
2550 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors 1827 RTMP_DMABUF RxDescRing; // Shared memory for RX descriptors
2551 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors 1828 RTMP_DMABUF TxDescRing[NUM_OF_TX_RING]; // Shared memory for Tx descriptors
2552 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA 1829 RTMP_TX_RING TxRing[NUM_OF_TX_RING]; // AC0~4 + HCCA
2553#endif 1830#endif // RTMP_MAC_PCI //
1831
2554 1832
2555 NDIS_SPIN_LOCK irq_lock; 1833 NDIS_SPIN_LOCK irq_lock;
2556 UCHAR irq_disabled; 1834 UCHAR irq_disabled;
2557 1835
2558#ifdef RT2870 1836#ifdef RTMP_MAC_USB
2559/*****************************************************************************************/ 1837/*****************************************************************************************/
2560/* USB related parameters */ 1838/* USB related parameters */
2561/*****************************************************************************************/ 1839/*****************************************************************************************/
@@ -2572,34 +1850,38 @@ typedef struct _RTMP_ADAPTER
2572 ULONG BulkFlags; 1850 ULONG BulkFlags;
2573 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority 1851 BOOLEAN bUsbTxBulkAggre; // Flags for bulk out data priority
2574 1852
2575
2576 //======Timer Thread
2577 RT2870_TIMER_QUEUE TimerQ;
2578 NDIS_SPIN_LOCK TimerQLock;
2579
2580
2581 //======Cmd Thread 1853 //======Cmd Thread
2582 CmdQ CmdQ; 1854 CmdQ CmdQ;
2583 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock 1855 NDIS_SPIN_LOCK CmdQLock; // CmdQLock spinlock
2584 1856 RTMP_OS_TASK cmdQTask;
2585 BOOLEAN TimerFunc_kill;
2586 BOOLEAN mlme_kill;
2587
2588 1857
2589 //======Semaphores (event) 1858 //======Semaphores (event)
2590 struct semaphore mlme_semaphore; /* to sleep thread on */ 1859 RTMP_OS_SEM UsbVendorReq_semaphore;
2591 struct semaphore RTUSBCmd_semaphore; /* to sleep thread on */ 1860 PVOID UsbVendorReqBuf;
2592 struct semaphore RTUSBTimer_semaphore;
2593 struct completion TimerQComplete;
2594 struct completion mlmeComplete;
2595 struct completion CmdQComplete;
2596 wait_queue_head_t *wait; 1861 wait_queue_head_t *wait;
2597#endif // RT2870 // 1862#endif // RTMP_MAC_USB //
1863
1864/*****************************************************************************************/
1865/* RBUS related parameters */
1866/*****************************************************************************************/
2598 1867
2599 1868
2600/*****************************************************************************************/ 1869/*****************************************************************************************/
2601 /* Both PCI/USB related parameters */ 1870/* Both PCI/USB related parameters */
1871/*****************************************************************************************/
1872 //RTMP_DEV_INFO chipInfo;
1873 RTMP_INF_TYPE infType;
1874
1875/*****************************************************************************************/
1876/* Driver Mgmt related parameters */
2602/*****************************************************************************************/ 1877/*****************************************************************************************/
1878 RTMP_OS_TASK mlmeTask;
1879#ifdef RTMP_TIMER_TASK_SUPPORT
1880 // If you want use timer task to handle the timer related jobs, enable this.
1881 RTMP_TIMER_TASK_QUEUE TimerQ;
1882 NDIS_SPIN_LOCK TimerQLock;
1883 RTMP_OS_TASK timerTask;
1884#endif // RTMP_TIMER_TASK_SUPPORT //
2603 1885
2604 1886
2605/*****************************************************************************************/ 1887/*****************************************************************************************/
@@ -2608,7 +1890,7 @@ typedef struct _RTMP_ADAPTER
2608 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once 1890 BOOLEAN DeQueueRunning[NUM_OF_TX_RING]; // for ensuring RTUSBDeQueuePacket get call once
2609 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING]; 1891 NDIS_SPIN_LOCK DeQueueLock[NUM_OF_TX_RING];
2610 1892
2611#ifdef RT2870 1893#ifdef RTMP_MAC_USB
2612 // Data related context and AC specified, 4 AC supported 1894 // Data related context and AC specified, 4 AC supported
2613 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs 1895 NDIS_SPIN_LOCK BulkOutLock[6]; // BulkOut spinlock for 4 ACs
2614 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock 1896 NDIS_SPIN_LOCK MLMEBulkOutLock; // MLME BulkOut lock
@@ -2623,7 +1905,7 @@ typedef struct _RTMP_ADAPTER
2623 UCHAR bulkResetPipeid; 1905 UCHAR bulkResetPipeid;
2624 BOOLEAN MgmtBulkPending; 1906 BOOLEAN MgmtBulkPending;
2625 ULONG bulkResetReq[6]; 1907 ULONG bulkResetReq[6];
2626#endif // RT2870 // 1908#endif // RTMP_MAC_USB //
2627 1909
2628 // resource for software backlog queues 1910 // resource for software backlog queues
2629 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA 1911 QUEUE_HEADER TxSwQueue[NUM_OF_TX_RING]; // 4 AC + 1 HCCA
@@ -2637,21 +1919,21 @@ typedef struct _RTMP_ADAPTER
2637/*****************************************************************************************/ 1919/*****************************************************************************************/
2638/* Rx related parameters */ 1920/* Rx related parameters */
2639/*****************************************************************************************/ 1921/*****************************************************************************************/
2640#ifdef RT2860 1922
1923#ifdef RTMP_MAC_PCI
2641 RTMP_RX_RING RxRing; 1924 RTMP_RX_RING RxRing;
2642 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock 1925 NDIS_SPIN_LOCK RxRingLock; // Rx Ring spinlock
2643#endif 1926#endif // RTMP_MAC_PCI //
2644#ifdef RT2870 1927#ifdef RTMP_MAC_USB
2645 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in. 1928 RX_CONTEXT RxContext[RX_RING_SIZE]; // 1 for redundant multiple IRP bulk in.
2646 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs 1929 NDIS_SPIN_LOCK BulkInLock; // BulkIn spinlock for 4 ACs
2647 UCHAR PendingRx; // The Maxima pending Rx value should be RX_RING_SIZE. 1930 UCHAR PendingRx; // The Maximum pending Rx value should be RX_RING_SIZE.
2648 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller. 1931 UCHAR NextRxBulkInIndex; // Indicate the current RxContext Index which hold by Host controller.
2649 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it. 1932 UCHAR NextRxBulkInReadIndex; // Indicate the current RxContext Index which driver can read & process it.
2650 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength. 1933 ULONG NextRxBulkInPosition; // Want to contatenate 2 URB buffer while 1st is bulkin failed URB. This Position is 1st URB TransferLength.
2651 ULONG TransferBufferLength; // current length of the packet buffer 1934 ULONG TransferBufferLength; // current length of the packet buffer
2652 ULONG ReadPosition; // current read position in a packet buffer 1935 ULONG ReadPosition; // current read position in a packet buffer
2653#endif // RT2870 // 1936#endif // RTMP_MAC_USB //
2654
2655 1937
2656/*****************************************************************************************/ 1938/*****************************************************************************************/
2657/* ASIC related parameters */ 1939/* ASIC related parameters */
@@ -2662,18 +1944,18 @@ typedef struct _RTMP_ADAPTER
2662 // E2PROM 1944 // E2PROM
2663 // --------------------------- 1945 // ---------------------------
2664 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused 1946 ULONG EepromVersion; // byte 0: version, byte 1: revision, byte 2~3: unused
2665 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8 1947 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused.
2666 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS]; 1948 USHORT EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
2667#ifdef RT2870 1949 UCHAR EEPROMAddressNum; // 93c46=6 93c66=8
2668 BOOLEAN EepromAccess; 1950 BOOLEAN EepromAccess;
2669#endif 1951 UCHAR EFuseTag;
2670 ULONG FirmwareVersion; // byte 0: Minor version, byte 1: Major version, otherwise unused. 1952
2671 1953
2672 // --------------------------- 1954 // ---------------------------
2673 // BBP Control 1955 // BBP Control
2674 // --------------------------- 1956 // ---------------------------
2675 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID 1957 UCHAR BbpWriteLatch[140]; // record last BBP register value written via BBP_IO_WRITE/BBP_IO_WRITE_VY_REG_ID
2676 UCHAR BbpRssiToDbmDelta; 1958 CHAR BbpRssiToDbmDelta; // change from UCHAR to CHAR for high power
2677 BBP_R66_TUNING BbpTuning; 1959 BBP_R66_TUNING BbpTuning;
2678 1960
2679 // ---------------------------- 1961 // ----------------------------
@@ -2718,23 +2000,26 @@ typedef struct _RTMP_ADAPTER
2718 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value 2000 UCHAR TxAgcStepG; // Store Tx TSSI delta increment / decrement value
2719 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1)) 2001 CHAR TxAgcCompensateG; // Store the compensation (TxAgcStep * (idx-1))
2720 2002
2721 //+++For RT2870, the parameteres is start from BGRssiOffset1 ~ BGRssiOffset3
2722 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h 2003 CHAR BGRssiOffset0; // Store B/G RSSI#0 Offset value on EEPROM 0x46h
2723 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value 2004 CHAR BGRssiOffset1; // Store B/G RSSI#1 Offset value
2724 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value 2005 CHAR BGRssiOffset2; // Store B/G RSSI#2 Offset value
2725 //---
2726 2006
2727 //+++For RT2870, the parameteres is start from ARssiOffset1 ~ ARssiOffset3
2728 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah 2007 CHAR ARssiOffset0; // Store A RSSI#0 Offset value on EEPROM 0x4Ah
2729 CHAR ARssiOffset1; // Store A RSSI#1 Offset value 2008 CHAR ARssiOffset1; // Store A RSSI#1 Offset value
2730 CHAR ARssiOffset2; // Store A RSSI#2 Offset value 2009 CHAR ARssiOffset2; // Store A RSSI#2 Offset value
2731 //---
2732 2010
2733 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h 2011 CHAR BLNAGain; // Store B/G external LNA#0 value on EEPROM 0x44h
2734 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64 2012 CHAR ALNAGain0; // Store A external LNA#0 value for ch36~64
2735 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128 2013 CHAR ALNAGain1; // Store A external LNA#1 value for ch100~128
2736 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165 2014 CHAR ALNAGain2; // Store A external LNA#2 value for ch132~165
2737 2015#ifdef RT30xx
2016 // for 3572
2017 UCHAR Bbp25;
2018 UCHAR Bbp26;
2019
2020 UCHAR TxMixerGain24G; // Tx mixer gain value from EEPROM to improve Tx EVM / Tx DAC, 2.4G
2021 UCHAR TxMixerGain5G;
2022#endif // RT30xx //
2738 // ---------------------------- 2023 // ----------------------------
2739 // LED control 2024 // LED control
2740 // ---------------------------- 2025 // ----------------------------
@@ -2742,7 +2027,7 @@ typedef struct _RTMP_ADAPTER
2742 USHORT Led1; // read from EEPROM 0x3c 2027 USHORT Led1; // read from EEPROM 0x3c
2743 USHORT Led2; // EEPROM 0x3e 2028 USHORT Led2; // EEPROM 0x3e
2744 USHORT Led3; // EEPROM 0x40 2029 USHORT Led3; // EEPROM 0x40
2745 UCHAR LedIndicatorStregth; 2030 UCHAR LedIndicatorStrength;
2746 UCHAR RssiSingalstrengthOffet; 2031 UCHAR RssiSingalstrengthOffet;
2747 BOOLEAN bLedOnScanning; 2032 BOOLEAN bLedOnScanning;
2748 UCHAR LedStatus; 2033 UCHAR LedStatus;
@@ -2759,20 +2044,17 @@ typedef struct _RTMP_ADAPTER
2759 PSPOLL_FRAME PsPollFrame; 2044 PSPOLL_FRAME PsPollFrame;
2760 HEADER_802_11 NullFrame; 2045 HEADER_802_11 NullFrame;
2761 2046
2762#ifdef RT2870 2047#ifdef RTMP_MAC_USB
2763 TX_CONTEXT BeaconContext[BEACON_RING_SIZE]; 2048 TX_CONTEXT BeaconContext[BEACON_RING_SIZE];
2764 TX_CONTEXT NullContext; 2049 TX_CONTEXT NullContext;
2765 TX_CONTEXT PsPollContext; 2050 TX_CONTEXT PsPollContext;
2766 TX_CONTEXT RTSContext; 2051 TX_CONTEXT RTSContext;
2767#endif // RT2870 // 2052#endif // RTMP_MAC_USB //
2768
2769
2770 2053
2771//=========AP=========== 2054//=========AP===========
2772 2055
2773 2056
2774//=======STA=========== 2057//=======STA===========
2775/* Modified by Wu Xi-Kun 4/21/2006 */
2776 // ----------------------------------------------- 2058 // -----------------------------------------------
2777 // STA specific configuration & operation status 2059 // STA specific configuration & operation status
2778 // used only when pAd->OpMode == OPMODE_STA 2060 // used only when pAd->OpMode == OPMODE_STA
@@ -2789,6 +2071,8 @@ typedef struct _RTMP_ADAPTER
2789 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected 2071 NDIS_MEDIA_STATE IndicateMediaState; // Base on Indication state, default is NdisMediaStateDisConnected
2790 2072
2791 2073
2074 /* MAT related parameters */
2075
2792 // configuration: read from Registry & E2PROM 2076 // configuration: read from Registry & E2PROM
2793 BOOLEAN bLocalAdminMAC; // Use user changed MAC 2077 BOOLEAN bLocalAdminMAC; // Use user changed MAC
2794 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address 2078 UCHAR PermanentAddress[MAC_ADDR_LEN]; // Factory default MAC address
@@ -2828,9 +2112,7 @@ typedef struct _RTMP_ADAPTER
2828 2112
2829 // flags, see fRTMP_ADAPTER_xxx flags 2113 // flags, see fRTMP_ADAPTER_xxx flags
2830 ULONG Flags; // Represent current device status 2114 ULONG Flags; // Represent current device status
2831#ifdef RT2860
2832 ULONG PSFlags; // Power Save operation flag. 2115 ULONG PSFlags; // Power Save operation flag.
2833#endif
2834 2116
2835 // current TX sequence # 2117 // current TX sequence #
2836 USHORT Sequence; 2118 USHORT Sequence;
@@ -2863,36 +2145,38 @@ typedef struct _RTMP_ADAPTER
2863 /*****************************************************************************************/ 2145 /*****************************************************************************************/
2864 /* Statistic related parameters */ 2146 /* Statistic related parameters */
2865 /*****************************************************************************************/ 2147 /*****************************************************************************************/
2866#ifdef RT2870 2148#ifdef RTMP_MAC_USB
2867 ULONG BulkOutDataOneSecCount; 2149 ULONG BulkOutDataOneSecCount;
2868 ULONG BulkInDataOneSecCount; 2150 ULONG BulkInDataOneSecCount;
2869 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount 2151 ULONG BulkLastOneSecCount; // BulkOutDataOneSecCount + BulkInDataOneSecCount
2870 ULONG watchDogRxCnt; 2152 ULONG watchDogRxCnt;
2871 ULONG watchDogRxOverFlowCnt; 2153 ULONG watchDogRxOverFlowCnt;
2872 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING]; 2154 ULONG watchDogTxPendingCnt[NUM_OF_TX_RING];
2873#endif // RT2870 // 2155 INT TransferedLength[NUM_OF_TX_RING];
2156#endif // RTMP_MAC_USB //
2874 2157
2875 BOOLEAN bUpdateBcnCntDone; 2158 BOOLEAN bUpdateBcnCntDone;
2876 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition 2159 ULONG watchDogMacDeadlock; // prevent MAC/BBP into deadlock condition
2877 // ---------------------------- 2160 // ----------------------------
2878 // DEBUG paramerts 2161 // DEBUG paramerts
2879 // ---------------------------- 2162 // ----------------------------
2163 //ULONG DebugSetting[4];
2880 BOOLEAN bBanAllBaSetup; 2164 BOOLEAN bBanAllBaSetup;
2881 BOOLEAN bPromiscuous; 2165 BOOLEAN bPromiscuous;
2882 2166
2883 // ---------------------------- 2167 // ----------------------------
2884 // rt2860c emulation-use Parameters 2168 // rt2860c emulation-use Parameters
2885 // ---------------------------- 2169 // ----------------------------
2886 ULONG rtsaccu[30]; 2170 //ULONG rtsaccu[30];
2887 ULONG ctsaccu[30]; 2171 //ULONG ctsaccu[30];
2888 ULONG cfendaccu[30]; 2172 //ULONG cfendaccu[30];
2889 ULONG bacontent[16]; 2173 //ULONG bacontent[16];
2890 ULONG rxint[RX_RING_SIZE+1]; 2174 //ULONG rxint[RX_RING_SIZE+1];
2891 UCHAR rcvba[60]; 2175 //UCHAR rcvba[60];
2892 BOOLEAN bLinkAdapt; 2176 BOOLEAN bLinkAdapt;
2893 BOOLEAN bForcePrintTX; 2177 BOOLEAN bForcePrintTX;
2894 BOOLEAN bForcePrintRX; 2178 BOOLEAN bForcePrintRX;
2895 BOOLEAN bDisablescanning; //defined in RT2870 USB 2179 //BOOLEAN bDisablescanning; //defined in RT2870 USB
2896 BOOLEAN bStaFifoTest; 2180 BOOLEAN bStaFifoTest;
2897 BOOLEAN bProtectionTest; 2181 BOOLEAN bProtectionTest;
2898 BOOLEAN bHCCATest; 2182 BOOLEAN bHCCATest;
@@ -2914,9 +2198,15 @@ typedef struct _RTMP_ADAPTER
2914 2198
2915 ULONG OneSecondnonBEpackets; // record non BE packets per second 2199 ULONG OneSecondnonBEpackets; // record non BE packets per second
2916 2200
2201#ifdef LINUX
2917 struct iw_statistics iw_stats; 2202 struct iw_statistics iw_stats;
2918 2203
2919 struct net_device_stats stats; 2204 struct net_device_stats stats;
2205#endif // LINUX //
2206
2207
2208
2209
2920 2210
2921 ULONG TbttTickCount; 2211 ULONG TbttTickCount;
2922#ifdef PCI_MSI_SUPPORT 2212#ifdef PCI_MSI_SUPPORT
@@ -2933,32 +2223,24 @@ typedef struct _RTMP_ADAPTER
2933 2223
2934 2224
2935 2225
2226
2227
2228
2229
2230 UINT8 FlgCtsEnabled;
2936 UINT8 PM_FlgSuspend; 2231 UINT8 PM_FlgSuspend;
2937 2232
2938#ifdef RT2870 2233#ifdef RT30xx
2234#ifdef RTMP_EFUSE_SUPPORT
2939 BOOLEAN bUseEfuse; 2235 BOOLEAN bUseEfuse;
2940#endif 2236 BOOLEAN bEEPROMFile;
2941} RTMP_ADAPTER, *PRTMP_ADAPTER; 2237 BOOLEAN bFroceEEPROMBuffer;
2238 UCHAR EEPROMImage[1024];
2239#endif // RTMP_EFUSE_SUPPORT //
2240#endif // RT30xx //
2241};
2242
2942 2243
2943//
2944// Cisco IAPP format
2945//
2946typedef struct _CISCO_IAPP_CONTENT_
2947{
2948 USHORT Length; //IAPP Length
2949 UCHAR MessageType; //IAPP type
2950 UCHAR FunctionCode; //IAPP function type
2951 UCHAR DestinaionMAC[MAC_ADDR_LEN];
2952 UCHAR SourceMAC[MAC_ADDR_LEN];
2953 USHORT Tag; //Tag(element IE) - Adjacent AP report
2954 USHORT TagLength; //Length of element not including 4 byte header
2955 UCHAR OUI[4]; //0x00, 0x40, 0x96, 0x00
2956 UCHAR PreviousAP[MAC_ADDR_LEN]; //MAC Address of access point
2957 USHORT Channel;
2958 USHORT SsidLen;
2959 UCHAR Ssid[MAX_LEN_OF_SSID];
2960 USHORT Seconds; //Seconds that the client has been disassociated.
2961} CISCO_IAPP_CONTENT, *PCISCO_IAPP_CONTENT;
2962 2244
2963#define DELAYINTMASK 0x0003fffb 2245#define DELAYINTMASK 0x0003fffb
2964#define INTMASK 0x0003fffb 2246#define INTMASK 0x0003fffb
@@ -2976,8 +2258,12 @@ typedef struct _CISCO_IAPP_CONTENT_
2976#define FifoStaFullInt 0x00002000 // fifo statistics full interrupt 2258#define FifoStaFullInt 0x00002000 // fifo statistics full interrupt
2977 2259
2978 2260
2261/***************************************************************************
2262 * Rx Path software control block related data structures
2263 **************************************************************************/
2979typedef struct _RX_BLK_ 2264typedef struct _RX_BLK_
2980{ 2265{
2266// RXD_STRUC RxD; // sample
2981 RT28XX_RXD_STRUC RxD; 2267 RT28XX_RXD_STRUC RxD;
2982 PRXWI_STRUC pRxWI; 2268 PRXWI_STRUC pRxWI;
2983 PHEADER_802_11 pHeader; 2269 PHEADER_802_11 pHeader;
@@ -3012,6 +2298,10 @@ typedef struct _RX_BLK_
3012#define LENGTH_ARALINK_SUBFRAMEHEAD 14 2298#define LENGTH_ARALINK_SUBFRAMEHEAD 14
3013#define LENGTH_ARALINK_HEADER_FIELD 2 2299#define LENGTH_ARALINK_HEADER_FIELD 2
3014 2300
2301
2302/***************************************************************************
2303 * Tx Path software control block related data structures
2304 **************************************************************************/
3015#define TX_UNKOWN_FRAME 0x00 2305#define TX_UNKOWN_FRAME 0x00
3016#define TX_MCAST_FRAME 0x01 2306#define TX_MCAST_FRAME 0x01
3017#define TX_LEGACY_FRAME 0x02 2307#define TX_LEGACY_FRAME 0x02
@@ -3040,7 +2330,9 @@ typedef struct _TX_BLK_
3040 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss 2330 PUCHAR pSrcBufData; // Reference to the sk_buff->data, will changed depends on hanlding progresss
3041 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header 2331 UINT SrcBufLen; // Length of packet payload which not including Layer 2 header
3042 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required 2332 PUCHAR pExtraLlcSnapEncap; // NULL means no extra LLC/SNAP is required
3043 UCHAR HeaderBuf[80]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP 2333 UCHAR HeaderBuf[128]; // TempBuffer for TX_INFO + TX_WI + 802.11 Header + padding + AMSDU SubHeader + LLC/SNAP
2334 //RT2870 2.1.0.0 uses only 80 bytes
2335 //RT3070 2.1.1.0 uses only 96 bytes
3044 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding 2336 UCHAR MpduHeaderLen; // 802.11 header length NOT including the padding
3045 UCHAR HdrPadLen; // recording Header Padding Length; 2337 UCHAR HdrPadLen; // recording Header Padding Length;
3046 UCHAR apidx; // The interface associated to this packet 2338 UCHAR apidx; // The interface associated to this packet
@@ -3069,17 +2361,8 @@ typedef struct _TX_BLK_
3069#define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment 2361#define fTX_bAllowFrag 0x0020 // allow to fragment the packet, A-MPDU, A-MSDU, A-Ralink is not allowed to fragment
3070#define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue 2362#define fTX_bMoreData 0x0040 // there are more data packets in PowerSave Queue
3071#define fTX_bWMM 0x0080 // QOS Data 2363#define fTX_bWMM 0x0080 // QOS Data
3072
3073#define fTX_bClearEAPFrame 0x0100 2364#define fTX_bClearEAPFrame 0x0100
3074 2365
3075#define TX_BLK_ASSIGN_FLAG(_pTxBlk, _flag, value) \
3076 do { \
3077 if (value) \
3078 (_pTxBlk->Flags |= _flag) \
3079 else \
3080 (_pTxBlk->Flags &= ~(_flag)) \
3081 }while(0)
3082
3083#define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag) 2366#define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
3084#define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0) 2367#define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
3085#define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag)) 2368#define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
@@ -3088,42 +2371,10 @@ typedef struct _TX_BLK_
3088 2371
3089 2372
3090 2373
3091//------------------------------------------------------------------------------------------
3092
3093#ifdef RT2860
3094//
3095// Enable & Disable NIC interrupt via writing interrupt mask register
3096// Since it use ADAPTER structure, it have to be put after structure definition.
3097//
3098__inline VOID NICDisableInterrupt(
3099 IN PRTMP_ADAPTER pAd)
3100{
3101 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, 0x0); // 0: disable
3102 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x0); // 0x418 is for firmware . SW doesn't handle here.
3103 RTMP_CLEAR_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3104}
3105
3106__inline VOID NICEnableInterrupt(
3107 IN PRTMP_ADAPTER pAd)
3108{
3109 //
3110 // Flag "fOP_STATUS_DOZE" On, means ASIC put to sleep, else means ASIC WakeUp
3111 // To prevent System hang, we should enalbe the interrupt when
3112 // ASIC is already Wake Up.
3113 //
3114 // RT2661 => when ASIC is sleeping, MAC register cannot be read and written.
3115 // RT2860 => when ASIC is sleeping, MAC register can be read and written.
3116 //if (!OPSTATUS_TEST_FLAG(pAd, fOP_STATUS_DOZE))
3117 {
3118 RTMP_IO_WRITE32(pAd, INT_MASK_CSR, pAd->int_enable_reg /*DELAYINTMASK*/); // 1:enable
3119 }
3120 //else
3121 // DBGPRINT(RT_DEBUG_TRACE, ("fOP_STATUS_DOZE !\n"));
3122
3123 //RTMP_IO_WRITE32(pAd, PBF_INT_ENA, 0x00000030); // 1 : enable
3124 RTMP_SET_FLAG(pAd, fRTMP_ADAPTER_INTERRUPT_ACTIVE);
3125}
3126 2374
2375/***************************************************************************
2376 * Other static inline function definitions
2377 **************************************************************************/
3127static inline VOID ConvertMulticastIP2MAC( 2378static inline VOID ConvertMulticastIP2MAC(
3128 IN PUCHAR pIpAddr, 2379 IN PUCHAR pIpAddr,
3129 IN PUCHAR *ppMacAddr, 2380 IN PUCHAR *ppMacAddr,
@@ -3161,37 +2412,59 @@ static inline VOID ConvertMulticastIP2MAC(
3161 2412
3162 return; 2413 return;
3163} 2414}
3164#endif /* RT2860 */ 2415
2416
2417char *GetPhyMode(int Mode);
2418char* GetBW(int BW);
3165 2419
3166// 2420//
3167// Private routines in rtmp_init.c 2421// Private routines in rtmp_init.c
3168// 2422//
3169NDIS_STATUS RTMPAllocAdapterBlock( 2423NDIS_STATUS RTMPAllocAdapterBlock(
3170 IN PVOID handle, 2424 IN PVOID handle,
3171 OUT PRTMP_ADAPTER *ppAdapter 2425 OUT PRTMP_ADAPTER *ppAdapter);
3172 );
3173 2426
3174NDIS_STATUS RTMPAllocTxRxRingMemory( 2427NDIS_STATUS RTMPAllocTxRxRingMemory(
3175 IN PRTMP_ADAPTER pAd 2428 IN PRTMP_ADAPTER pAd);
3176 );
3177 2429
3178NDIS_STATUS RTMPReadParametersHook( 2430NDIS_STATUS RTMPReadParametersHook(
3179 IN PRTMP_ADAPTER pAd 2431 IN PRTMP_ADAPTER pAd);
3180 ); 2432
2433NDIS_STATUS RTMPSetProfileParameters(
2434 IN RTMP_ADAPTER *pAd,
2435 IN PSTRING pBuffer);
2436
2437INT RTMPGetKeyParameter(
2438 IN PSTRING key,
2439 OUT PSTRING dest,
2440 IN INT destsize,
2441 IN PSTRING buffer,
2442 IN BOOLEAN bTrimSpace);
3181 2443
3182VOID RTMPFreeAdapter( 2444VOID RTMPFreeAdapter(
3183 IN PRTMP_ADAPTER pAd 2445 IN PRTMP_ADAPTER pAd);
3184 );
3185 2446
3186NDIS_STATUS NICReadRegParameters( 2447NDIS_STATUS NICReadRegParameters(
3187 IN PRTMP_ADAPTER pAd, 2448 IN PRTMP_ADAPTER pAd,
3188 IN NDIS_HANDLE WrapperConfigurationContext 2449 IN NDIS_HANDLE WrapperConfigurationContext);
3189 );
3190 2450
3191#ifdef RT2870 2451#ifdef RTMP_RF_RW_SUPPORT
3192VOID NICInitRT30xxRFRegisters( 2452VOID NICInitRFRegisters(
3193 IN PRTMP_ADAPTER pAd); 2453 IN PRTMP_ADAPTER pAd);
3194#endif // RT2870 // 2454
2455VOID RtmpChipOpsRFHook(
2456 IN RTMP_ADAPTER *pAd);
2457
2458NDIS_STATUS RT30xxWriteRFRegister(
2459 IN PRTMP_ADAPTER pAd,
2460 IN UCHAR regID,
2461 IN UCHAR value);
2462
2463NDIS_STATUS RT30xxReadRFRegister(
2464 IN PRTMP_ADAPTER pAd,
2465 IN UCHAR regID,
2466 IN PUCHAR pValue);
2467#endif // RTMP_RF_RW_SUPPORT //
3195 2468
3196VOID NICReadEEPROMParameters( 2469VOID NICReadEEPROMParameters(
3197 IN PRTMP_ADAPTER pAd, 2470 IN PRTMP_ADAPTER pAd,
@@ -3200,8 +2473,6 @@ VOID NICReadEEPROMParameters(
3200VOID NICInitAsicFromEEPROM( 2473VOID NICInitAsicFromEEPROM(
3201 IN PRTMP_ADAPTER pAd); 2474 IN PRTMP_ADAPTER pAd);
3202 2475
3203VOID NICInitTxRxRingAndBacklogQueue(
3204 IN PRTMP_ADAPTER pAd);
3205 2476
3206NDIS_STATUS NICInitializeAdapter( 2477NDIS_STATUS NICInitializeAdapter(
3207 IN PRTMP_ADAPTER pAd, 2478 IN PRTMP_ADAPTER pAd,
@@ -3210,10 +2481,7 @@ NDIS_STATUS NICInitializeAdapter(
3210NDIS_STATUS NICInitializeAsic( 2481NDIS_STATUS NICInitializeAsic(
3211 IN PRTMP_ADAPTER pAd, 2482 IN PRTMP_ADAPTER pAd,
3212 IN BOOLEAN bHardReset); 2483 IN BOOLEAN bHardReset);
3213#ifdef RT2860 2484
3214VOID NICRestoreBBPValue(
3215 IN PRTMP_ADAPTER pAd);
3216#endif
3217VOID NICIssueReset( 2485VOID NICIssueReset(
3218 IN PRTMP_ADAPTER pAd); 2486 IN PRTMP_ADAPTER pAd);
3219 2487
@@ -3227,10 +2495,10 @@ VOID UserCfgInit(
3227VOID NICResetFromError( 2495VOID NICResetFromError(
3228 IN PRTMP_ADAPTER pAd); 2496 IN PRTMP_ADAPTER pAd);
3229 2497
3230VOID NICEraseFirmware( 2498NDIS_STATUS NICLoadFirmware(
3231 IN PRTMP_ADAPTER pAd); 2499 IN PRTMP_ADAPTER pAd);
3232 2500
3233NDIS_STATUS NICLoadFirmware( 2501VOID NICEraseFirmware(
3234 IN PRTMP_ADAPTER pAd); 2502 IN PRTMP_ADAPTER pAd);
3235 2503
3236NDIS_STATUS NICLoadRateSwitchingParams( 2504NDIS_STATUS NICLoadRateSwitchingParams(
@@ -3245,10 +2513,6 @@ VOID NICUpdateFifoStaCounters(
3245VOID NICUpdateRawCounters( 2513VOID NICUpdateRawCounters(
3246 IN PRTMP_ADAPTER pAd); 2514 IN PRTMP_ADAPTER pAd);
3247 2515
3248ULONG RTMPNotAllZero(
3249 IN PVOID pSrc1,
3250 IN ULONG Length);
3251
3252VOID RTMPZeroMemory( 2516VOID RTMPZeroMemory(
3253 IN PVOID pSrc, 2517 IN PVOID pSrc,
3254 IN ULONG Length); 2518 IN ULONG Length);
@@ -3264,8 +2528,8 @@ VOID RTMPMoveMemory(
3264 IN ULONG Length); 2528 IN ULONG Length);
3265 2529
3266VOID AtoH( 2530VOID AtoH(
3267 char *src, 2531 PSTRING src,
3268 UCHAR *dest, 2532 PUCHAR dest,
3269 int destlen); 2533 int destlen);
3270 2534
3271UCHAR BtoH( 2535UCHAR BtoH(
@@ -3383,6 +2647,7 @@ VOID SendRefreshBAR(
3383 IN PRTMP_ADAPTER pAd, 2647 IN PRTMP_ADAPTER pAd,
3384 IN MAC_TABLE_ENTRY *pEntry); 2648 IN MAC_TABLE_ENTRY *pEntry);
3385 2649
2650
3386VOID ActHeaderInit( 2651VOID ActHeaderInit(
3387 IN PRTMP_ADAPTER pAd, 2652 IN PRTMP_ADAPTER pAd,
3388 IN OUT PHEADER_802_11 pHdr80211, 2653 IN OUT PHEADER_802_11 pHdr80211,
@@ -3444,6 +2709,7 @@ BOOLEAN PeerIsAggreOn(
3444 IN ULONG TxRate, 2709 IN ULONG TxRate,
3445 IN PMAC_TABLE_ENTRY pMacEntry); 2710 IN PMAC_TABLE_ENTRY pMacEntry);
3446 2711
2712
3447NDIS_STATUS Sniff2BytesFromNdisBuffer( 2713NDIS_STATUS Sniff2BytesFromNdisBuffer(
3448 IN PNDIS_BUFFER pFirstBuffer, 2714 IN PNDIS_BUFFER pFirstBuffer,
3449 IN UCHAR DesiredOffset, 2715 IN UCHAR DesiredOffset,
@@ -3498,11 +2764,24 @@ NDIS_STATUS MlmeHardTransmitMgmtRing(
3498 IN UCHAR QueIdx, 2764 IN UCHAR QueIdx,
3499 IN PNDIS_PACKET pPacket); 2765 IN PNDIS_PACKET pPacket);
3500 2766
2767#ifdef RTMP_MAC_PCI
3501NDIS_STATUS MlmeHardTransmitTxRing( 2768NDIS_STATUS MlmeHardTransmitTxRing(
3502 IN PRTMP_ADAPTER pAd, 2769 IN PRTMP_ADAPTER pAd,
3503 IN UCHAR QueIdx, 2770 IN UCHAR QueIdx,
3504 IN PNDIS_PACKET pPacket); 2771 IN PNDIS_PACKET pPacket);
3505 2772
2773NDIS_STATUS MlmeDataHardTransmit(
2774 IN PRTMP_ADAPTER pAd,
2775 IN UCHAR QueIdx,
2776 IN PNDIS_PACKET pPacket);
2777
2778VOID RTMPWriteTxDescriptor(
2779 IN PRTMP_ADAPTER pAd,
2780 IN PTXD_STRUC pTxD,
2781 IN BOOLEAN bWIV,
2782 IN UCHAR QSEL);
2783#endif // RTMP_MAC_PCI //
2784
3506USHORT RTMPCalcDuration( 2785USHORT RTMPCalcDuration(
3507 IN PRTMP_ADAPTER pAd, 2786 IN PRTMP_ADAPTER pAd,
3508 IN UCHAR Rate, 2787 IN UCHAR Rate,
@@ -3539,12 +2818,6 @@ VOID RTMPWriteTxWI_Cache(
3539 IN OUT PTXWI_STRUC pTxWI, 2818 IN OUT PTXWI_STRUC pTxWI,
3540 IN TX_BLK *pTxBlk); 2819 IN TX_BLK *pTxBlk);
3541 2820
3542VOID RTMPWriteTxDescriptor(
3543 IN PRTMP_ADAPTER pAd,
3544 IN PTXD_STRUC pTxD,
3545 IN BOOLEAN bWIV,
3546 IN UCHAR QSEL);
3547
3548VOID RTMPSuspendMsduTransmission( 2821VOID RTMPSuspendMsduTransmission(
3549 IN PRTMP_ADAPTER pAd); 2822 IN PRTMP_ADAPTER pAd);
3550 2823
@@ -3557,6 +2830,9 @@ NDIS_STATUS MiniportMMRequest(
3557 IN PUCHAR pData, 2830 IN PUCHAR pData,
3558 IN UINT Length); 2831 IN UINT Length);
3559 2832
2833//+++mark by shiang, now this function merge to MiniportMMRequest()
2834//---mark by shiang, now this function merge to MiniportMMRequest()
2835
3560VOID RTMPSendNullFrame( 2836VOID RTMPSendNullFrame(
3561 IN PRTMP_ADAPTER pAd, 2837 IN PRTMP_ADAPTER pAd,
3562 IN UCHAR TxRate, 2838 IN UCHAR TxRate,
@@ -3593,6 +2869,16 @@ VOID WpaDisassocApAndBlockAssoc(
3593 IN PVOID SystemSpecific2, 2869 IN PVOID SystemSpecific2,
3594 IN PVOID SystemSpecific3); 2870 IN PVOID SystemSpecific3);
3595 2871
2872VOID WpaStaPairwiseKeySetting(
2873 IN PRTMP_ADAPTER pAd);
2874
2875VOID WpaStaGroupKeySetting(
2876 IN PRTMP_ADAPTER pAd);
2877
2878VOID WpaSendEapolStart(
2879 IN PRTMP_ADAPTER pAdapter,
2880 IN PUCHAR pBssid);
2881
3596NDIS_STATUS RTMPCloneNdisPacket( 2882NDIS_STATUS RTMPCloneNdisPacket(
3597 IN PRTMP_ADAPTER pAd, 2883 IN PRTMP_ADAPTER pAd,
3598 IN BOOLEAN pInsAMSDUHdr, 2884 IN BOOLEAN pInsAMSDUHdr,
@@ -3713,6 +2999,9 @@ VOID AsicRfTuningExec(
3713 IN PVOID SystemSpecific2, 2999 IN PVOID SystemSpecific2,
3714 IN PVOID SystemSpecific3); 3000 IN PVOID SystemSpecific3);
3715 3001
3002VOID AsicResetBBPAgent(
3003 IN PRTMP_ADAPTER pAd);
3004
3716VOID AsicSleepThenAutoWakeup( 3005VOID AsicSleepThenAutoWakeup(
3717 IN PRTMP_ADAPTER pAd, 3006 IN PRTMP_ADAPTER pAd,
3718 IN USHORT TbttNumToNextWakeUp); 3007 IN USHORT TbttNumToNextWakeUp);
@@ -3722,12 +3011,7 @@ VOID AsicForceSleep(
3722 3011
3723VOID AsicForceWakeup( 3012VOID AsicForceWakeup(
3724 IN PRTMP_ADAPTER pAd, 3013 IN PRTMP_ADAPTER pAd,
3725#ifdef RT2860
3726 IN UCHAR Level);
3727#endif
3728#ifdef RT2870
3729 IN BOOLEAN bFromTx); 3014 IN BOOLEAN bFromTx);
3730#endif
3731 3015
3732VOID AsicSetBssid( 3016VOID AsicSetBssid(
3733 IN PRTMP_ADAPTER pAd, 3017 IN PRTMP_ADAPTER pAd,
@@ -3821,11 +3105,14 @@ BOOLEAN AsicSendCommandToMcu(
3821 IN UCHAR Token, 3105 IN UCHAR Token,
3822 IN UCHAR Arg0, 3106 IN UCHAR Arg0,
3823 IN UCHAR Arg1); 3107 IN UCHAR Arg1);
3824#ifdef RT2860 3108
3109
3110#ifdef RTMP_MAC_PCI
3825BOOLEAN AsicCheckCommanOk( 3111BOOLEAN AsicCheckCommanOk(
3826 IN PRTMP_ADAPTER pAd, 3112 IN PRTMP_ADAPTER pAd,
3827 IN UCHAR Command); 3113 IN UCHAR Command);
3828#endif 3114#endif // RTMP_MAC_PCI //
3115
3829VOID MacAddrRandomBssid( 3116VOID MacAddrRandomBssid(
3830 IN PRTMP_ADAPTER pAd, 3117 IN PRTMP_ADAPTER pAd,
3831 OUT PUCHAR pAddr); 3118 OUT PUCHAR pAddr);
@@ -3871,6 +3158,11 @@ ULONG BssTableSearchWithSSID(
3871 IN UCHAR SsidLen, 3158 IN UCHAR SsidLen,
3872 IN UCHAR Channel); 3159 IN UCHAR Channel);
3873 3160
3161ULONG BssSsidTableSearchBySSID(
3162 IN BSS_TABLE *Tab,
3163 IN PUCHAR pSsid,
3164 IN UCHAR SsidLen);
3165
3874VOID BssTableDeleteEntry( 3166VOID BssTableDeleteEntry(
3875 IN OUT PBSS_TABLE pTab, 3167 IN OUT PBSS_TABLE pTab,
3876 IN PUCHAR pBssid, 3168 IN PUCHAR pBssid,
@@ -4095,9 +3387,6 @@ VOID Cls3errAction(
4095 IN PRTMP_ADAPTER pAd, 3387 IN PRTMP_ADAPTER pAd,
4096 IN PUCHAR pAddr); 3388 IN PUCHAR pAddr);
4097 3389
4098VOID SwitchBetweenWepAndCkip(
4099 IN PRTMP_ADAPTER pAd);
4100
4101VOID InvalidStateWhenAssoc( 3390VOID InvalidStateWhenAssoc(
4102 IN PRTMP_ADAPTER pAd, 3391 IN PRTMP_ADAPTER pAd,
4103 IN MLME_QUEUE_ELEM *Elem); 3392 IN MLME_QUEUE_ELEM *Elem);
@@ -4110,12 +3399,12 @@ VOID InvalidStateWhenDisassociate(
4110 IN PRTMP_ADAPTER pAd, 3399 IN PRTMP_ADAPTER pAd,
4111 IN MLME_QUEUE_ELEM *Elem); 3400 IN MLME_QUEUE_ELEM *Elem);
4112 3401
4113#ifdef RT2870 3402#ifdef RTMP_MAC_USB
4114VOID MlmeCntlConfirm( 3403VOID MlmeCntlConfirm(
4115 IN PRTMP_ADAPTER pAd, 3404 IN PRTMP_ADAPTER pAd,
4116 IN ULONG MsgType, 3405 IN ULONG MsgType,
4117 IN USHORT Msg); 3406 IN USHORT Msg);
4118#endif // RT2870 // 3407#endif // RTMP_MAC_USB //
4119 3408
4120VOID ComposePsPoll( 3409VOID ComposePsPoll(
4121 IN PRTMP_ADAPTER pAd); 3410 IN PRTMP_ADAPTER pAd);
@@ -4325,7 +3614,7 @@ VOID AssocParmFill(
4325VOID ScanParmFill( 3614VOID ScanParmFill(
4326 IN PRTMP_ADAPTER pAd, 3615 IN PRTMP_ADAPTER pAd,
4327 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq, 3616 IN OUT MLME_SCAN_REQ_STRUCT *ScanReq,
4328 IN CHAR Ssid[], 3617 IN STRING Ssid[],
4329 IN UCHAR SsidLen, 3618 IN UCHAR SsidLen,
4330 IN UCHAR BssType, 3619 IN UCHAR BssType,
4331 IN UCHAR ScanType); 3620 IN UCHAR ScanType);
@@ -4396,7 +3685,7 @@ VOID ScanNextChannel(
4396ULONG MakeIbssBeacon( 3685ULONG MakeIbssBeacon(
4397 IN PRTMP_ADAPTER pAd); 3686 IN PRTMP_ADAPTER pAd);
4398 3687
4399VOID CCXAdjacentAPReport( 3688VOID InitChannelRelatedValue(
4400 IN PRTMP_ADAPTER pAd); 3689 IN PRTMP_ADAPTER pAd);
4401 3690
4402BOOLEAN MlmeScanReqSanity( 3691BOOLEAN MlmeScanReqSanity(
@@ -4527,6 +3816,13 @@ BOOLEAN PeerDisassocSanity(
4527 OUT PUCHAR pAddr2, 3816 OUT PUCHAR pAddr2,
4528 OUT USHORT *Reason); 3817 OUT USHORT *Reason);
4529 3818
3819BOOLEAN PeerWpaMessageSanity(
3820 IN PRTMP_ADAPTER pAd,
3821 IN PEAPOL_PACKET pMsg,
3822 IN ULONG MsgLen,
3823 IN UCHAR MsgType,
3824 IN MAC_TABLE_ENTRY *pEntry);
3825
4530BOOLEAN PeerDeauthSanity( 3826BOOLEAN PeerDeauthSanity(
4531 IN PRTMP_ADAPTER pAd, 3827 IN PRTMP_ADAPTER pAd,
4532 IN VOID *Msg, 3828 IN VOID *Msg,
@@ -4570,7 +3866,7 @@ BOOLEAN MlmeAddBAReqSanity(
4570 OUT PUCHAR pAddr2); 3866 OUT PUCHAR pAddr2);
4571 3867
4572ULONG MakeOutgoingFrame( 3868ULONG MakeOutgoingFrame(
4573 OUT CHAR *Buffer, 3869 OUT UCHAR *Buffer,
4574 OUT ULONG *Length, ...); 3870 OUT ULONG *Length, ...);
4575 3871
4576VOID LfsrInit( 3872VOID LfsrInit(
@@ -4613,9 +3909,8 @@ VOID MlmeCheckForRoaming(
4613 IN PRTMP_ADAPTER pAd, 3909 IN PRTMP_ADAPTER pAd,
4614 IN ULONG Now32); 3910 IN ULONG Now32);
4615 3911
4616VOID MlmeCheckForFastRoaming( 3912BOOLEAN MlmeCheckForFastRoaming(
4617 IN PRTMP_ADAPTER pAd, 3913 IN PRTMP_ADAPTER pAd);
4618 IN ULONG Now);
4619 3914
4620VOID MlmeDynamicTxRateSwitching( 3915VOID MlmeDynamicTxRateSwitching(
4621 IN PRTMP_ADAPTER pAd); 3916 IN PRTMP_ADAPTER pAd);
@@ -4634,6 +3929,7 @@ VOID MlmeSelectTxRateTable(
4634 3929
4635VOID MlmeCalculateChannelQuality( 3930VOID MlmeCalculateChannelQuality(
4636 IN PRTMP_ADAPTER pAd, 3931 IN PRTMP_ADAPTER pAd,
3932 IN PMAC_TABLE_ENTRY pMacEntry,
4637 IN ULONG Now); 3933 IN ULONG Now);
4638 3934
4639VOID MlmeCheckPsmChange( 3935VOID MlmeCheckPsmChange(
@@ -4691,10 +3987,91 @@ CHAR RTMPMaxRssi(
4691 IN CHAR Rssi1, 3987 IN CHAR Rssi1,
4692 IN CHAR Rssi2); 3988 IN CHAR Rssi2);
4693 3989
3990#ifdef RT30xx
4694VOID AsicSetRxAnt( 3991VOID AsicSetRxAnt(
4695 IN PRTMP_ADAPTER pAd, 3992 IN PRTMP_ADAPTER pAd,
4696 IN UCHAR Ant); 3993 IN UCHAR Ant);
4697 3994
3995VOID RTMPFilterCalibration(
3996 IN PRTMP_ADAPTER pAd);
3997
3998#ifdef RTMP_EFUSE_SUPPORT
3999//2008/09/11:KH add to support efuse<--
4000INT set_eFuseGetFreeBlockCount_Proc(
4001 IN PRTMP_ADAPTER pAd,
4002 IN PSTRING arg);
4003
4004INT set_eFusedump_Proc(
4005 IN PRTMP_ADAPTER pAd,
4006 IN PSTRING arg);
4007
4008INT set_eFuseLoadFromBin_Proc(
4009 IN PRTMP_ADAPTER pAd,
4010 IN PSTRING arg);
4011
4012VOID eFusePhysicalReadRegisters(
4013 IN PRTMP_ADAPTER pAd,
4014 IN USHORT Offset,
4015 IN USHORT Length,
4016 OUT USHORT* pData);
4017
4018int RtmpEfuseSupportCheck(
4019 IN RTMP_ADAPTER *pAd);
4020
4021INT set_eFuseBufferModeWriteBack_Proc(
4022 IN PRTMP_ADAPTER pAd,
4023 IN PSTRING arg);
4024
4025INT eFuseLoadEEPROM(
4026 IN PRTMP_ADAPTER pAd);
4027
4028INT eFuseWriteEeeppromBuf(
4029 IN PRTMP_ADAPTER pAd);
4030
4031VOID eFuseGetFreeBlockCount(IN PRTMP_ADAPTER pAd,
4032 PUINT EfuseFreeBlock);
4033
4034INT eFuse_init(
4035 IN PRTMP_ADAPTER pAd);
4036
4037NTSTATUS eFuseRead(
4038 IN PRTMP_ADAPTER pAd,
4039 IN USHORT Offset,
4040 OUT PUCHAR pData,
4041 IN USHORT Length);
4042
4043NTSTATUS eFuseWrite(
4044 IN PRTMP_ADAPTER pAd,
4045 IN USHORT Offset,
4046 IN PUCHAR pData,
4047 IN USHORT length);
4048//2008/09/11:KH add to support efuse-->
4049#endif // RTMP_EFUSE_SUPPORT //
4050
4051// add by johnli, RF power sequence setup
4052VOID RT30xxLoadRFNormalModeSetup(
4053 IN PRTMP_ADAPTER pAd);
4054
4055VOID RT30xxLoadRFSleepModeSetup(
4056 IN PRTMP_ADAPTER pAd);
4057
4058VOID RT30xxReverseRFSleepModeSetup(
4059 IN PRTMP_ADAPTER pAd);
4060// end johnli
4061
4062#ifdef RT3070
4063VOID NICInitRT3070RFRegisters(
4064 IN RTMP_ADAPTER *pAd);
4065#endif // RT3070 //
4066
4067VOID RT30xxHaltAction(
4068 IN PRTMP_ADAPTER pAd);
4069
4070VOID RT30xxSetRxAnt(
4071 IN PRTMP_ADAPTER pAd,
4072 IN UCHAR Ant);
4073#endif // RT30xx //
4074
4698VOID AsicEvaluateRxAnt( 4075VOID AsicEvaluateRxAnt(
4699 IN PRTMP_ADAPTER pAd); 4076 IN PRTMP_ADAPTER pAd);
4700 4077
@@ -4751,15 +4128,6 @@ VOID ChangeToCellPowerLimit(
4751 IN PRTMP_ADAPTER pAd, 4128 IN PRTMP_ADAPTER pAd,
4752 IN UCHAR AironetCellPowerLimit); 4129 IN UCHAR AironetCellPowerLimit);
4753 4130
4754USHORT RTMP_EEPROM_READ16(
4755 IN PRTMP_ADAPTER pAd,
4756 IN USHORT Offset);
4757
4758VOID RTMP_EEPROM_WRITE16(
4759 IN PRTMP_ADAPTER pAd,
4760 IN USHORT Offset,
4761 IN USHORT Data);
4762
4763// 4131//
4764// Prototypes of function definition in rtmp_tkip.c 4132// Prototypes of function definition in rtmp_tkip.c
4765// 4133//
@@ -4797,15 +4165,6 @@ VOID RTMPCalculateMICValue(
4797 IN PCIPHER_KEY pKey, 4165 IN PCIPHER_KEY pKey,
4798 IN UCHAR apidx); 4166 IN UCHAR apidx);
4799 4167
4800BOOLEAN RTMPTkipCompareMICValueWithLLC(
4801 IN PRTMP_ADAPTER pAd,
4802 IN PUCHAR pLLC,
4803 IN PUCHAR pSrc,
4804 IN PUCHAR pDA,
4805 IN PUCHAR pSA,
4806 IN PUCHAR pMICKey,
4807 IN UINT Len);
4808
4809VOID RTMPTkipAppendByte( 4168VOID RTMPTkipAppendByte(
4810 IN PTKIP_KEY_INFO pTkip, 4169 IN PTKIP_KEY_INFO pTkip,
4811 IN UCHAR uChar); 4170 IN UCHAR uChar);
@@ -4831,6 +4190,39 @@ BOOLEAN RTMPSoftDecryptAES(
4831 IN ULONG DataByteCnt, 4190 IN ULONG DataByteCnt,
4832 IN PCIPHER_KEY pWpaKey); 4191 IN PCIPHER_KEY pWpaKey);
4833 4192
4193
4194
4195//
4196// Prototypes of function definition in cmm_info.c
4197//
4198INT RT_CfgSetCountryRegion(
4199 IN PRTMP_ADAPTER pAd,
4200 IN PSTRING arg,
4201 IN INT band);
4202
4203INT RT_CfgSetWirelessMode(
4204 IN PRTMP_ADAPTER pAd,
4205 IN PSTRING arg);
4206
4207INT RT_CfgSetShortSlot(
4208 IN PRTMP_ADAPTER pAd,
4209 IN PSTRING arg);
4210
4211INT RT_CfgSetWepKey(
4212 IN PRTMP_ADAPTER pAd,
4213 IN PSTRING keyString,
4214 IN CIPHER_KEY *pSharedKey,
4215 IN INT keyIdx);
4216
4217INT RT_CfgSetWPAPSKKey(
4218 IN RTMP_ADAPTER *pAd,
4219 IN PSTRING keyString,
4220 IN UCHAR *pHashStr,
4221 IN INT hashStrLen,
4222 OUT PUCHAR pPMKBuf);
4223
4224
4225
4834// 4226//
4835// Prototypes of function definition in cmm_info.c 4227// Prototypes of function definition in cmm_info.c
4836// 4228//
@@ -4862,26 +4254,12 @@ VOID RTMPAddWcidAttributeEntry(
4862 IN UCHAR CipherAlg, 4254 IN UCHAR CipherAlg,
4863 IN MAC_TABLE_ENTRY *pEntry); 4255 IN MAC_TABLE_ENTRY *pEntry);
4864 4256
4865CHAR *GetEncryptType( 4257PSTRING GetEncryptType(
4866 CHAR enc); 4258 CHAR enc);
4867 4259
4868CHAR *GetAuthMode( 4260PSTRING GetAuthMode(
4869 CHAR auth); 4261 CHAR auth);
4870 4262
4871VOID RTMPIoctlGetSiteSurvey(
4872 IN PRTMP_ADAPTER pAdapter,
4873 IN struct iwreq *wrq);
4874
4875VOID RTMPIoctlGetMacTable(
4876 IN PRTMP_ADAPTER pAd,
4877 IN struct iwreq *wrq);
4878
4879VOID RTMPAddBSSIDCipher(
4880 IN PRTMP_ADAPTER pAd,
4881 IN UCHAR Aid,
4882 IN PNDIS_802_11_KEY pKey,
4883 IN UCHAR CipherAlg);
4884
4885VOID RTMPSetHT( 4263VOID RTMPSetHT(
4886 IN PRTMP_ADAPTER pAd, 4264 IN PRTMP_ADAPTER pAd,
4887 IN OID_SET_HT_PHYMODE *pHTPhyMode); 4265 IN OID_SET_HT_PHYMODE *pHTPhyMode);
@@ -4897,88 +4275,24 @@ VOID RTMPSendWirelessEvent(
4897 IN UCHAR BssIdx, 4275 IN UCHAR BssIdx,
4898 IN CHAR Rssi); 4276 IN CHAR Rssi);
4899 4277
4900// 4278CHAR ConvertToRssi(
4901// prototype in wpa.c
4902//
4903BOOLEAN WpaMsgTypeSubst(
4904 IN UCHAR EAPType,
4905 OUT INT *MsgType);
4906
4907VOID WpaPskStateMachineInit(
4908 IN PRTMP_ADAPTER pAd,
4909 IN STATE_MACHINE *S,
4910 OUT STATE_MACHINE_FUNC Trans[]);
4911
4912VOID WpaEAPOLKeyAction(
4913 IN PRTMP_ADAPTER pAd,
4914 IN MLME_QUEUE_ELEM *Elem);
4915
4916VOID WpaPairMsg1Action(
4917 IN PRTMP_ADAPTER pAd,
4918 IN MLME_QUEUE_ELEM *Elem);
4919
4920VOID WpaPairMsg3Action(
4921 IN PRTMP_ADAPTER pAd,
4922 IN MLME_QUEUE_ELEM *Elem);
4923
4924VOID WpaGroupMsg1Action(
4925 IN PRTMP_ADAPTER pAd,
4926 IN MLME_QUEUE_ELEM *Elem);
4927
4928VOID WpaMacHeaderInit(
4929 IN PRTMP_ADAPTER pAd,
4930 IN OUT PHEADER_802_11 pHdr80211,
4931 IN UCHAR wep,
4932 IN PUCHAR pAddr1);
4933
4934VOID Wpa2PairMsg1Action(
4935 IN PRTMP_ADAPTER pAd,
4936 IN MLME_QUEUE_ELEM *Elem);
4937
4938VOID Wpa2PairMsg3Action(
4939 IN PRTMP_ADAPTER pAd,
4940 IN MLME_QUEUE_ELEM *Elem);
4941
4942BOOLEAN ParseKeyData(
4943 IN PRTMP_ADAPTER pAd, 4279 IN PRTMP_ADAPTER pAd,
4944 IN PUCHAR pKeyData, 4280 IN CHAR Rssi,
4945 IN UCHAR KeyDataLen, 4281 IN UCHAR RssiNumber);
4946 IN UCHAR bPairewise);
4947 4282
4283/*===================================
4284 Function prototype in cmm_wpa.c
4285 =================================== */
4948VOID RTMPToWirelessSta( 4286VOID RTMPToWirelessSta(
4949 IN PRTMP_ADAPTER pAd, 4287 IN PRTMP_ADAPTER pAd,
4288 IN PMAC_TABLE_ENTRY pEntry,
4950 IN PUCHAR pHeader802_3, 4289 IN PUCHAR pHeader802_3,
4951 IN UINT HdrLen, 4290 IN UINT HdrLen,
4952 IN PUCHAR pData, 4291 IN PUCHAR pData,
4953 IN UINT DataLen, 4292 IN UINT DataLen,
4954 IN BOOLEAN is4wayFrame); 4293 IN BOOLEAN bClearFrame);
4955
4956VOID HMAC_SHA1(
4957 IN UCHAR *text,
4958 IN UINT text_len,
4959 IN UCHAR *key,
4960 IN UINT key_len,
4961 IN UCHAR *digest);
4962 4294
4963VOID PRF( 4295VOID WpaDerivePTK(
4964 IN UCHAR *key,
4965 IN INT key_len,
4966 IN UCHAR *prefix,
4967 IN INT prefix_len,
4968 IN UCHAR *data,
4969 IN INT data_len,
4970 OUT UCHAR *output,
4971 IN INT len);
4972
4973VOID CCKMPRF(
4974 IN UCHAR *key,
4975 IN INT key_len,
4976 IN UCHAR *data,
4977 IN INT data_len,
4978 OUT UCHAR *output,
4979 IN INT len);
4980
4981VOID WpaCountPTK(
4982 IN PRTMP_ADAPTER pAd, 4296 IN PRTMP_ADAPTER pAd,
4983 IN UCHAR *PMK, 4297 IN UCHAR *PMK,
4984 IN UCHAR *ANonce, 4298 IN UCHAR *ANonce,
@@ -4993,95 +4307,129 @@ VOID GenRandom(
4993 IN UCHAR *macAddr, 4307 IN UCHAR *macAddr,
4994 OUT UCHAR *random); 4308 OUT UCHAR *random);
4995 4309
4996// 4310BOOLEAN RTMPCheckWPAframe(
4997// prototype in aironet.c
4998//
4999VOID AironetStateMachineInit(
5000 IN PRTMP_ADAPTER pAd, 4311 IN PRTMP_ADAPTER pAd,
5001 IN STATE_MACHINE *S, 4312 IN PMAC_TABLE_ENTRY pEntry,
5002 OUT STATE_MACHINE_FUNC Trans[]); 4313 IN PUCHAR pData,
4314 IN ULONG DataByteCount,
4315 IN UCHAR FromWhichBSSID);
5003 4316
5004VOID AironetMsgAction( 4317VOID AES_GTK_KEY_UNWRAP(
5005 IN PRTMP_ADAPTER pAd, 4318 IN UCHAR *key,
5006 IN MLME_QUEUE_ELEM *Elem); 4319 OUT UCHAR *plaintext,
4320 IN UINT32 c_len,
4321 IN UCHAR *ciphertext);
5007 4322
5008VOID AironetRequestAction( 4323BOOLEAN RTMPParseEapolKeyData(
5009 IN PRTMP_ADAPTER pAd, 4324 IN PRTMP_ADAPTER pAd,
5010 IN MLME_QUEUE_ELEM *Elem); 4325 IN PUCHAR pKeyData,
4326 IN UCHAR KeyDataLen,
4327 IN UCHAR GroupKeyIndex,
4328 IN UCHAR MsgType,
4329 IN BOOLEAN bWPA2,
4330 IN MAC_TABLE_ENTRY *pEntry);
4331
4332VOID ConstructEapolMsg(
4333 IN PMAC_TABLE_ENTRY pEntry,
4334 IN UCHAR GroupKeyWepStatus,
4335 IN UCHAR MsgType,
4336 IN UCHAR DefaultKeyIdx,
4337 IN UCHAR *KeyNonce,
4338 IN UCHAR *TxRSC,
4339 IN UCHAR *GTK,
4340 IN UCHAR *RSNIE,
4341 IN UCHAR RSNIE_Len,
4342 OUT PEAPOL_PACKET pMsg);
4343
4344NDIS_STATUS RTMPSoftDecryptBroadCastData(
4345 IN PRTMP_ADAPTER pAd,
4346 IN RX_BLK *pRxBlk,
4347 IN NDIS_802_11_ENCRYPTION_STATUS GroupCipher,
4348 IN PCIPHER_KEY pShard_key);
5011 4349
5012VOID ChannelLoadRequestAction( 4350VOID RTMPMakeRSNIE(
5013 IN PRTMP_ADAPTER pAd, 4351 IN PRTMP_ADAPTER pAd,
5014 IN UCHAR Index); 4352 IN UINT AuthMode,
4353 IN UINT WepStatus,
4354 IN UCHAR apidx);
5015 4355
5016VOID NoiseHistRequestAction( 4356//
4357// function prototype in ap_wpa.c
4358//
4359VOID RTMPGetTxTscFromAsic(
5017 IN PRTMP_ADAPTER pAd, 4360 IN PRTMP_ADAPTER pAd,
5018 IN UCHAR Index); 4361 IN UCHAR apidx,
4362 OUT PUCHAR pTxTsc);
5019 4363
5020VOID BeaconRequestAction( 4364VOID APInstallPairwiseKey(
4365 PRTMP_ADAPTER pAd,
4366 PMAC_TABLE_ENTRY pEntry);
4367
4368UINT APValidateRSNIE(
5021 IN PRTMP_ADAPTER pAd, 4369 IN PRTMP_ADAPTER pAd,
5022 IN UCHAR Index); 4370 IN PMAC_TABLE_ENTRY pEntry,
4371 IN PUCHAR pRsnIe,
4372 IN UCHAR rsnie_len);
5023 4373
5024VOID AironetReportAction( 4374VOID HandleCounterMeasure(
5025 IN PRTMP_ADAPTER pAd, 4375 IN PRTMP_ADAPTER pAd,
5026 IN MLME_QUEUE_ELEM *Elem); 4376 IN MAC_TABLE_ENTRY *pEntry);
5027 4377
5028VOID ChannelLoadReportAction( 4378VOID WPAStart4WayHS(
5029 IN PRTMP_ADAPTER pAd, 4379 IN PRTMP_ADAPTER pAd,
5030 IN UCHAR Index); 4380 IN MAC_TABLE_ENTRY *pEntry,
4381 IN ULONG TimeInterval);
5031 4382
5032VOID NoiseHistReportAction( 4383VOID WPAStart2WayGroupHS(
5033 IN PRTMP_ADAPTER pAd, 4384 IN PRTMP_ADAPTER pAd,
5034 IN UCHAR Index); 4385 IN MAC_TABLE_ENTRY *pEntry);
5035 4386
5036VOID AironetFinalReportAction( 4387VOID PeerPairMsg1Action(
5037 IN PRTMP_ADAPTER pAd); 4388 IN PRTMP_ADAPTER pAd,
4389 IN MAC_TABLE_ENTRY *pEntry,
4390 IN MLME_QUEUE_ELEM *Elem);
5038 4391
5039VOID BeaconReportAction( 4392VOID PeerPairMsg2Action(
5040 IN PRTMP_ADAPTER pAd, 4393 IN PRTMP_ADAPTER pAd,
5041 IN UCHAR Index); 4394 IN MAC_TABLE_ENTRY *pEntry,
4395 IN MLME_QUEUE_ELEM *Elem);
5042 4396
5043VOID AironetAddBeaconReport( 4397VOID PeerPairMsg3Action(
5044 IN PRTMP_ADAPTER pAd, 4398 IN PRTMP_ADAPTER pAd,
5045 IN ULONG Index, 4399 IN MAC_TABLE_ENTRY *pEntry,
5046 IN PMLME_QUEUE_ELEM pElem); 4400 IN MLME_QUEUE_ELEM *Elem);
5047 4401
5048VOID AironetCreateBeaconReportFromBssTable( 4402VOID PeerPairMsg4Action(
5049 IN PRTMP_ADAPTER pAd); 4403 IN PRTMP_ADAPTER pAd,
4404 IN MAC_TABLE_ENTRY *pEntry,
4405 IN MLME_QUEUE_ELEM *Elem);
5050 4406
5051CHAR ConvertToRssi( 4407VOID PeerGroupMsg1Action(
5052 IN PRTMP_ADAPTER pAd, 4408 IN PRTMP_ADAPTER pAd,
5053 IN CHAR Rssi, 4409 IN PMAC_TABLE_ENTRY pEntry,
5054 IN UCHAR RssiNumber); 4410 IN MLME_QUEUE_ELEM *Elem);
5055 4411
5056// 4412VOID PeerGroupMsg2Action(
5057// function prototype in cmm_wpa.c
5058//
5059BOOLEAN RTMPCheckWPAframe(
5060 IN PRTMP_ADAPTER pAd, 4413 IN PRTMP_ADAPTER pAd,
5061 IN PMAC_TABLE_ENTRY pEntry, 4414 IN PMAC_TABLE_ENTRY pEntry,
5062 IN PUCHAR pData, 4415 IN VOID *Msg,
5063 IN ULONG DataByteCount, 4416 IN UINT MsgLen);
5064 IN UCHAR FromWhichBSSID);
5065 4417
5066VOID AES_GTK_KEY_UNWRAP( 4418VOID WpaDeriveGTK(
5067 IN UCHAR *key, 4419 IN UCHAR *PMK,
5068 OUT UCHAR *plaintext, 4420 IN UCHAR *GNonce,
5069 IN UCHAR c_len, 4421 IN UCHAR *AA,
5070 IN UCHAR *ciphertext); 4422 OUT UCHAR *output,
4423 IN UINT len);
5071 4424
5072VOID RTMPMakeRSNIE( 4425VOID AES_GTK_KEY_WRAP(
5073 IN PRTMP_ADAPTER pAd, 4426 IN UCHAR *key,
5074 IN UINT AuthMode, 4427 IN UCHAR *plaintext,
5075 IN UINT WepStatus, 4428 IN UINT32 p_len,
5076 IN UCHAR apidx); 4429 OUT UCHAR *ciphertext);
5077 4430
5078// 4431//typedef void (*TIMER_FUNCTION)(unsigned long);
5079// function prototype in ap_wpa.c
5080//
5081 4432
5082VOID HandleCounterMeasure(
5083 IN PRTMP_ADAPTER pAd,
5084 IN MAC_TABLE_ENTRY *pEntry);
5085 4433
5086/* timeout -- ms */ 4434/* timeout -- ms */
5087VOID RTMP_SetPeriodicTimer( 4435VOID RTMP_SetPeriodicTimer(
@@ -5116,13 +4464,13 @@ VOID RTMPusecDelay(
5116 IN ULONG usec); 4464 IN ULONG usec);
5117 4465
5118NDIS_STATUS os_alloc_mem( 4466NDIS_STATUS os_alloc_mem(
5119 IN PRTMP_ADAPTER pAd, 4467 IN RTMP_ADAPTER *pAd,
5120 OUT PUCHAR *mem, 4468 OUT UCHAR **mem,
5121 IN ULONG size); 4469 IN ULONG size);
5122 4470
5123NDIS_STATUS os_free_mem( 4471NDIS_STATUS os_free_mem(
5124 IN PRTMP_ADAPTER pAd, 4472 IN PRTMP_ADAPTER pAd,
5125 IN PUCHAR mem); 4473 IN PVOID mem);
5126 4474
5127 4475
5128void RTMP_AllocateSharedMemory( 4476void RTMP_AllocateSharedMemory(
@@ -5155,6 +4503,13 @@ void RTMP_AllocateFirstTxBuffer(
5155 OUT PVOID *VirtualAddress, 4503 OUT PVOID *VirtualAddress,
5156 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); 4504 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5157 4505
4506void RTMP_FreeFirstTxBuffer(
4507 IN PRTMP_ADAPTER pAd,
4508 IN ULONG Length,
4509 IN BOOLEAN Cached,
4510 IN PVOID VirtualAddress,
4511 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4512
5158void RTMP_AllocateMgmtDescMemory( 4513void RTMP_AllocateMgmtDescMemory(
5159 IN PRTMP_ADAPTER pAd, 4514 IN PRTMP_ADAPTER pAd,
5160 IN ULONG Length, 4515 IN ULONG Length,
@@ -5169,6 +4524,16 @@ void RTMP_AllocateRxDescMemory(
5169 OUT PVOID *VirtualAddress, 4524 OUT PVOID *VirtualAddress,
5170 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress); 4525 OUT PNDIS_PHYSICAL_ADDRESS PhysicalAddress);
5171 4526
4527void RTMP_FreeDescMemory(
4528 IN PRTMP_ADAPTER pAd,
4529 IN ULONG Length,
4530 IN PVOID VirtualAddress,
4531 IN NDIS_PHYSICAL_ADDRESS PhysicalAddress);
4532
4533PNDIS_PACKET RtmpOSNetPktAlloc(
4534 IN RTMP_ADAPTER *pAd,
4535 IN int size);
4536
5172PNDIS_PACKET RTMP_AllocateRxPacketBuffer( 4537PNDIS_PACKET RTMP_AllocateRxPacketBuffer(
5173 IN PRTMP_ADAPTER pAd, 4538 IN PRTMP_ADAPTER pAd,
5174 IN ULONG Length, 4539 IN ULONG Length,
@@ -5279,203 +4644,210 @@ VOID BARecSessionTearDown(
5279BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num); 4644BOOLEAN ba_reordering_resource_init(PRTMP_ADAPTER pAd, int num);
5280void ba_reordering_resource_release(PRTMP_ADAPTER pAd); 4645void ba_reordering_resource_release(PRTMP_ADAPTER pAd);
5281 4646
4647
4648
4649
5282BOOLEAN rtstrmactohex( 4650BOOLEAN rtstrmactohex(
5283 IN char *s1, 4651 IN PSTRING s1,
5284 IN char *s2); 4652 IN PSTRING s2);
5285 4653
5286BOOLEAN rtstrcasecmp( 4654BOOLEAN rtstrcasecmp(
5287 IN char *s1, 4655 IN PSTRING s1,
5288 IN char *s2); 4656 IN PSTRING s2);
5289 4657
5290char *rtstrstruncasecmp( 4658PSTRING rtstrstruncasecmp(
5291 IN char *s1, 4659 IN PSTRING s1,
5292 IN char *s2); 4660 IN PSTRING s2);
5293 4661
5294char *rtstrstr( 4662PSTRING rtstrstr(
5295 IN const char * s1, 4663 IN const PSTRING s1,
5296 IN const char * s2); 4664 IN const PSTRING s2);
5297 4665
5298char *rstrtok( 4666PSTRING rstrtok(
5299 IN char * s, 4667 IN PSTRING s,
5300 IN const char * ct); 4668 IN const PSTRING ct);
5301 4669
5302int rtinet_aton( 4670int rtinet_aton(
5303 const char *cp, 4671 const PSTRING cp,
5304 unsigned int *addr); 4672 unsigned int *addr);
5305 4673
5306////////// common ioctl functions ////////// 4674////////// common ioctl functions //////////
5307INT Set_DriverVersion_Proc( 4675INT Set_DriverVersion_Proc(
5308 IN PRTMP_ADAPTER pAd, 4676 IN PRTMP_ADAPTER pAd,
5309 IN PUCHAR arg); 4677 IN PSTRING arg);
5310 4678
5311INT Set_CountryRegion_Proc( 4679INT Set_CountryRegion_Proc(
5312 IN PRTMP_ADAPTER pAd, 4680 IN PRTMP_ADAPTER pAd,
5313 IN PUCHAR arg); 4681 IN PSTRING arg);
5314 4682
5315INT Set_CountryRegionABand_Proc( 4683INT Set_CountryRegionABand_Proc(
5316 IN PRTMP_ADAPTER pAd, 4684 IN PRTMP_ADAPTER pAd,
5317 IN PUCHAR arg); 4685 IN PSTRING arg);
5318 4686
5319INT Set_WirelessMode_Proc( 4687INT Set_WirelessMode_Proc(
5320 IN PRTMP_ADAPTER pAd, 4688 IN PRTMP_ADAPTER pAd,
5321 IN PUCHAR arg); 4689 IN PSTRING arg);
5322 4690
5323INT Set_Channel_Proc( 4691INT Set_Channel_Proc(
5324 IN PRTMP_ADAPTER pAd, 4692 IN PRTMP_ADAPTER pAd,
5325 IN PUCHAR arg); 4693 IN PSTRING arg);
5326 4694
5327INT Set_ShortSlot_Proc( 4695INT Set_ShortSlot_Proc(
5328 IN PRTMP_ADAPTER pAd, 4696 IN PRTMP_ADAPTER pAd,
5329 IN PUCHAR arg); 4697 IN PSTRING arg);
5330 4698
5331INT Set_TxPower_Proc( 4699INT Set_TxPower_Proc(
5332 IN PRTMP_ADAPTER pAd, 4700 IN PRTMP_ADAPTER pAd,
5333 IN PUCHAR arg); 4701 IN PSTRING arg);
5334 4702
5335INT Set_BGProtection_Proc( 4703INT Set_BGProtection_Proc(
5336 IN PRTMP_ADAPTER pAd, 4704 IN PRTMP_ADAPTER pAd,
5337 IN PUCHAR arg); 4705 IN PSTRING arg);
5338 4706
5339INT Set_TxPreamble_Proc( 4707INT Set_TxPreamble_Proc(
5340 IN PRTMP_ADAPTER pAd, 4708 IN PRTMP_ADAPTER pAd,
5341 IN PUCHAR arg); 4709 IN PSTRING arg);
5342 4710
5343INT Set_RTSThreshold_Proc( 4711INT Set_RTSThreshold_Proc(
5344 IN PRTMP_ADAPTER pAd, 4712 IN PRTMP_ADAPTER pAd,
5345 IN PUCHAR arg); 4713 IN PSTRING arg);
5346 4714
5347INT Set_FragThreshold_Proc( 4715INT Set_FragThreshold_Proc(
5348 IN PRTMP_ADAPTER pAd, 4716 IN PRTMP_ADAPTER pAd,
5349 IN PUCHAR arg); 4717 IN PSTRING arg);
5350 4718
5351INT Set_TxBurst_Proc( 4719INT Set_TxBurst_Proc(
5352 IN PRTMP_ADAPTER pAd, 4720 IN PRTMP_ADAPTER pAd,
5353 IN PUCHAR arg); 4721 IN PSTRING arg);
5354 4722
5355#ifdef AGGREGATION_SUPPORT 4723#ifdef AGGREGATION_SUPPORT
5356INT Set_PktAggregate_Proc( 4724INT Set_PktAggregate_Proc(
5357 IN PRTMP_ADAPTER pAd, 4725 IN PRTMP_ADAPTER pAd,
5358 IN PUCHAR arg); 4726 IN PSTRING arg);
5359#endif 4727#endif // AGGREGATION_SUPPORT //
5360 4728
5361INT Set_IEEE80211H_Proc( 4729INT Set_IEEE80211H_Proc(
5362 IN PRTMP_ADAPTER pAd, 4730 IN PRTMP_ADAPTER pAd,
5363 IN PUCHAR arg); 4731 IN PSTRING arg);
5364 4732
5365#ifdef DBG 4733#ifdef DBG
5366INT Set_Debug_Proc( 4734INT Set_Debug_Proc(
5367 IN PRTMP_ADAPTER pAd, 4735 IN PRTMP_ADAPTER pAd,
5368 IN PUCHAR arg); 4736 IN PSTRING arg);
5369#endif 4737#endif
5370 4738
5371INT Show_DescInfo_Proc( 4739INT Show_DescInfo_Proc(
5372 IN PRTMP_ADAPTER pAd, 4740 IN PRTMP_ADAPTER pAd,
5373 IN PUCHAR arg); 4741 IN PSTRING arg);
5374 4742
5375INT Set_ResetStatCounter_Proc( 4743INT Set_ResetStatCounter_Proc(
5376 IN PRTMP_ADAPTER pAd, 4744 IN PRTMP_ADAPTER pAd,
5377 IN PUCHAR arg); 4745 IN PSTRING arg);
5378 4746
5379INT Set_BASetup_Proc( 4747INT Set_BASetup_Proc(
5380 IN PRTMP_ADAPTER pAd, 4748 IN PRTMP_ADAPTER pAd,
5381 IN PUCHAR arg); 4749 IN PSTRING arg);
5382 4750
5383INT Set_BADecline_Proc( 4751INT Set_BADecline_Proc(
5384 IN PRTMP_ADAPTER pAd, 4752 IN PRTMP_ADAPTER pAd,
5385 IN PUCHAR arg); 4753 IN PSTRING arg);
5386 4754
5387INT Set_BAOriTearDown_Proc( 4755INT Set_BAOriTearDown_Proc(
5388 IN PRTMP_ADAPTER pAd, 4756 IN PRTMP_ADAPTER pAd,
5389 IN PUCHAR arg); 4757 IN PSTRING arg);
5390 4758
5391INT Set_BARecTearDown_Proc( 4759INT Set_BARecTearDown_Proc(
5392 IN PRTMP_ADAPTER pAd, 4760 IN PRTMP_ADAPTER pAd,
5393 IN PUCHAR arg); 4761 IN PSTRING arg);
5394 4762
5395INT Set_HtBw_Proc( 4763INT Set_HtBw_Proc(
5396 IN PRTMP_ADAPTER pAd, 4764 IN PRTMP_ADAPTER pAd,
5397 IN PUCHAR arg); 4765 IN PSTRING arg);
5398 4766
5399INT Set_HtMcs_Proc( 4767INT Set_HtMcs_Proc(
5400 IN PRTMP_ADAPTER pAd, 4768 IN PRTMP_ADAPTER pAd,
5401 IN PUCHAR arg); 4769 IN PSTRING arg);
5402 4770
5403INT Set_HtGi_Proc( 4771INT Set_HtGi_Proc(
5404 IN PRTMP_ADAPTER pAd, 4772 IN PRTMP_ADAPTER pAd,
5405 IN PUCHAR arg); 4773 IN PSTRING arg);
5406 4774
5407INT Set_HtOpMode_Proc( 4775INT Set_HtOpMode_Proc(
5408 IN PRTMP_ADAPTER pAd, 4776 IN PRTMP_ADAPTER pAd,
5409 IN PUCHAR arg); 4777 IN PSTRING arg);
5410 4778
5411INT Set_HtStbc_Proc( 4779INT Set_HtStbc_Proc(
5412 IN PRTMP_ADAPTER pAd, 4780 IN PRTMP_ADAPTER pAd,
5413 IN PUCHAR arg); 4781 IN PSTRING arg);
5414 4782
5415INT Set_HtHtc_Proc( 4783INT Set_HtHtc_Proc(
5416 IN PRTMP_ADAPTER pAd, 4784 IN PRTMP_ADAPTER pAd,
5417 IN PUCHAR arg); 4785 IN PSTRING arg);
5418 4786
5419INT Set_HtExtcha_Proc( 4787INT Set_HtExtcha_Proc(
5420 IN PRTMP_ADAPTER pAd, 4788 IN PRTMP_ADAPTER pAd,
5421 IN PUCHAR arg); 4789 IN PSTRING arg);
5422 4790
5423INT Set_HtMpduDensity_Proc( 4791INT Set_HtMpduDensity_Proc(
5424 IN PRTMP_ADAPTER pAd, 4792 IN PRTMP_ADAPTER pAd,
5425 IN PUCHAR arg); 4793 IN PSTRING arg);
5426 4794
5427INT Set_HtBaWinSize_Proc( 4795INT Set_HtBaWinSize_Proc(
5428 IN PRTMP_ADAPTER pAd, 4796 IN PRTMP_ADAPTER pAd,
5429 IN PUCHAR arg); 4797 IN PSTRING arg);
5430 4798
5431INT Set_HtRdg_Proc( 4799INT Set_HtRdg_Proc(
5432 IN PRTMP_ADAPTER pAd, 4800 IN PRTMP_ADAPTER pAd,
5433 IN PUCHAR arg); 4801 IN PSTRING arg);
5434 4802
5435INT Set_HtLinkAdapt_Proc( 4803INT Set_HtLinkAdapt_Proc(
5436 IN PRTMP_ADAPTER pAd, 4804 IN PRTMP_ADAPTER pAd,
5437 IN PUCHAR arg); 4805 IN PSTRING arg);
5438 4806
5439INT Set_HtAmsdu_Proc( 4807INT Set_HtAmsdu_Proc(
5440 IN PRTMP_ADAPTER pAd, 4808 IN PRTMP_ADAPTER pAd,
5441 IN PUCHAR arg); 4809 IN PSTRING arg);
5442 4810
5443INT Set_HtAutoBa_Proc( 4811INT Set_HtAutoBa_Proc(
5444 IN PRTMP_ADAPTER pAd, 4812 IN PRTMP_ADAPTER pAd,
5445 IN PUCHAR arg); 4813 IN PSTRING arg);
5446 4814
5447INT Set_HtProtect_Proc( 4815INT Set_HtProtect_Proc(
5448 IN PRTMP_ADAPTER pAd, 4816 IN PRTMP_ADAPTER pAd,
5449 IN PUCHAR arg); 4817 IN PSTRING arg);
5450 4818
5451INT Set_HtMimoPs_Proc( 4819INT Set_HtMimoPs_Proc(
5452 IN PRTMP_ADAPTER pAd, 4820 IN PRTMP_ADAPTER pAd,
5453 IN PUCHAR arg); 4821 IN PSTRING arg);
5454 4822
5455 4823
5456INT Set_ForceShortGI_Proc( 4824INT Set_ForceShortGI_Proc(
5457 IN PRTMP_ADAPTER pAd, 4825 IN PRTMP_ADAPTER pAd,
5458 IN PUCHAR arg); 4826 IN PSTRING arg);
5459 4827
5460INT Set_ForceGF_Proc( 4828INT Set_ForceGF_Proc(
5461 IN PRTMP_ADAPTER pAd, 4829 IN PRTMP_ADAPTER pAd,
5462 IN PUCHAR arg); 4830 IN PSTRING arg);
5463 4831
5464INT SetCommonHT( 4832INT SetCommonHT(
5465 IN PRTMP_ADAPTER pAd); 4833 IN PRTMP_ADAPTER pAd);
5466 4834
5467INT Set_SendPSMPAction_Proc( 4835INT Set_SendPSMPAction_Proc(
5468 IN PRTMP_ADAPTER pAd, 4836 IN PRTMP_ADAPTER pAd,
5469 IN PUCHAR arg); 4837 IN PSTRING arg);
5470 4838
5471INT Set_HtMIMOPSmode_Proc( 4839INT Set_HtMIMOPSmode_Proc(
5472 IN PRTMP_ADAPTER pAd, 4840 IN PRTMP_ADAPTER pAd,
5473 IN PUCHAR arg); 4841 IN PSTRING arg);
5474 4842
5475 4843
5476INT Set_HtTxBASize_Proc( 4844INT Set_HtTxBASize_Proc(
5477 IN PRTMP_ADAPTER pAd, 4845 IN PRTMP_ADAPTER pAd,
5478 IN PUCHAR arg); 4846 IN PSTRING arg);
4847
4848INT Set_HtDisallowTKIP_Proc(
4849 IN PRTMP_ADAPTER pAd,
4850 IN PSTRING arg);
5479 4851
5480INT WpaCheckEapCode( 4852INT WpaCheckEapCode(
5481 IN PRTMP_ADAPTER pAd, 4853 IN PRTMP_ADAPTER pAd,
@@ -5528,12 +4900,6 @@ void wlan_802_11_to_802_3_packet(
5528 IN PUCHAR pHeader802_3, 4900 IN PUCHAR pHeader802_3,
5529 IN UCHAR FromWhichBSSID); 4901 IN UCHAR FromWhichBSSID);
5530 4902
5531UINT deaggregate_AMSDU_announce(
5532 IN PRTMP_ADAPTER pAd,
5533 PNDIS_PACKET pPacket,
5534 IN PUCHAR pData,
5535 IN ULONG DataSize);
5536
5537// remove LLC and get 802_3 Header 4903// remove LLC and get 802_3 Header
5538#define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \ 4904#define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
5539{ \ 4905{ \
@@ -5604,11 +4970,28 @@ VOID Update_Rssi_Sample(
5604 IN RSSI_SAMPLE *pRssi, 4970 IN RSSI_SAMPLE *pRssi,
5605 IN PRXWI_STRUC pRxWI); 4971 IN PRXWI_STRUC pRxWI);
5606 4972
4973PNDIS_PACKET GetPacketFromRxRing(
4974 IN PRTMP_ADAPTER pAd,
4975 OUT PRT28XX_RXD_STRUC pSaveRxD,
4976 OUT BOOLEAN *pbReschedule,
4977 IN OUT UINT32 *pRxPending);
4978
5607PNDIS_PACKET RTMPDeFragmentDataFrame( 4979PNDIS_PACKET RTMPDeFragmentDataFrame(
5608 IN PRTMP_ADAPTER pAd, 4980 IN PRTMP_ADAPTER pAd,
5609 IN RX_BLK *pRxBlk); 4981 IN RX_BLK *pRxBlk);
5610 4982
5611//////////////////////////////////////// 4983////////////////////////////////////////
4984
4985VOID RTMPIoctlGetSiteSurvey(
4986 IN PRTMP_ADAPTER pAdapter,
4987 IN struct iwreq *wrq);
4988
4989
4990
4991
4992
4993
4994
5612enum { 4995enum {
5613 DIDmsg_lnxind_wlansniffrm = 0x00000044, 4996 DIDmsg_lnxind_wlansniffrm = 0x00000044,
5614 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044, 4997 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
@@ -5712,9 +5095,6 @@ void send_monitor_packets(
5712 IN PRTMP_ADAPTER pAd, 5095 IN PRTMP_ADAPTER pAd,
5713 IN RX_BLK *pRxBlk); 5096 IN RX_BLK *pRxBlk);
5714 5097
5715// This function will be called when query /proc
5716struct iw_statistics *rt28xx_get_wireless_stats(
5717 IN struct net_device *net_dev);
5718 5098
5719VOID RTMPSetDesiredRates( 5099VOID RTMPSetDesiredRates(
5720 IN PRTMP_ADAPTER pAdapter, 5100 IN PRTMP_ADAPTER pAdapter,
@@ -5722,62 +5102,20 @@ VOID RTMPSetDesiredRates(
5722 5102
5723INT Set_FixedTxMode_Proc( 5103INT Set_FixedTxMode_Proc(
5724 IN PRTMP_ADAPTER pAd, 5104 IN PRTMP_ADAPTER pAd,
5725 IN PUCHAR arg); 5105 IN PSTRING arg);
5726
5727static inline char* GetPhyMode(
5728 int Mode)
5729{
5730 switch(Mode)
5731 {
5732 case MODE_CCK:
5733 return "CCK";
5734 5106
5735 case MODE_OFDM:
5736 return "OFDM";
5737 case MODE_HTMIX:
5738 return "HTMIX";
5739
5740 case MODE_HTGREENFIELD:
5741 return "GREEN";
5742 default:
5743 return "N/A";
5744 }
5745}
5746
5747
5748static inline char* GetBW(
5749 int BW)
5750{
5751 switch(BW)
5752 {
5753 case BW_10:
5754 return "10M";
5755
5756 case BW_20:
5757 return "20M";
5758 case BW_40:
5759 return "40M";
5760 default:
5761 return "N/A";
5762 }
5763}
5764 5107
5108INT Set_LongRetryLimit_Proc(
5109 IN PRTMP_ADAPTER pAdapter,
5110 IN PSTRING arg);
5765 5111
5766VOID RT28xxThreadTerminate( 5112INT Set_ShortRetryLimit_Proc(
5767 IN RTMP_ADAPTER *pAd); 5113 IN PRTMP_ADAPTER pAdapter,
5114 IN PSTRING arg);
5768 5115
5769BOOLEAN RT28XXChipsetCheck( 5116BOOLEAN RT28XXChipsetCheck(
5770 IN void *_dev_p); 5117 IN void *_dev_p);
5771 5118
5772BOOLEAN RT28XXNetDevInit(
5773 IN void *_dev_p,
5774 IN struct net_device *net_dev,
5775 IN RTMP_ADAPTER *pAd);
5776
5777BOOLEAN RT28XXProbePostConfig(
5778 IN void *_dev_p,
5779 IN RTMP_ADAPTER *pAd,
5780 IN INT32 argc);
5781 5119
5782VOID RT28XXDMADisable( 5120VOID RT28XXDMADisable(
5783 IN RTMP_ADAPTER *pAd); 5121 IN RTMP_ADAPTER *pAd);
@@ -5791,26 +5129,45 @@ VOID RT28xx_UpdateBeaconToAsic(
5791 IN ULONG BeaconLen, 5129 IN ULONG BeaconLen,
5792 IN ULONG UpdatePos); 5130 IN ULONG UpdatePos);
5793 5131
5794INT rt28xx_sta_ioctl( 5132int rt28xx_init(
5795 IN struct net_device *net_dev,
5796 IN OUT struct ifreq *rq,
5797 IN INT cmd);
5798
5799////////////////////////////////////////
5800PNDIS_PACKET GetPacketFromRxRing(
5801 IN PRTMP_ADAPTER pAd, 5133 IN PRTMP_ADAPTER pAd,
5802 OUT PRT28XX_RXD_STRUC pSaveRxD, 5134 IN PSTRING pDefaultMac,
5803 OUT BOOLEAN *pbReschedule, 5135 IN PSTRING pHostName);
5804 IN OUT UINT32 *pRxPending); 5136
5137NDIS_STATUS RtmpNetTaskInit(
5138 IN RTMP_ADAPTER *pAd);
5805 5139
5140VOID RtmpNetTaskExit(
5141 IN PRTMP_ADAPTER pAd);
5142
5143NDIS_STATUS RtmpMgmtTaskInit(
5144 IN RTMP_ADAPTER *pAd);
5806 5145
5807void kill_thread_task(PRTMP_ADAPTER pAd); 5146VOID RtmpMgmtTaskExit(
5147 IN RTMP_ADAPTER *pAd);
5808 5148
5809void tbtt_tasklet(unsigned long data); 5149void tbtt_tasklet(unsigned long data);
5810 5150
5811#ifdef RT2860 5151
5152PNET_DEV RtmpPhyNetDevInit(
5153 IN RTMP_ADAPTER *pAd,
5154 IN RTMP_OS_NETDEV_OP_HOOK *pNetHook);
5155
5156BOOLEAN RtmpPhyNetDevExit(
5157 IN RTMP_ADAPTER *pAd,
5158 IN PNET_DEV net_dev);
5159
5160INT RtmpRaDevCtrlInit(
5161 IN RTMP_ADAPTER *pAd,
5162 IN RTMP_INF_TYPE infType);
5163
5164BOOLEAN RtmpRaDevCtrlExit(
5165 IN RTMP_ADAPTER *pAd);
5166
5167
5168#ifdef RTMP_MAC_PCI
5812// 5169//
5813// Function Prototype in cmm_data_2860.c 5170// Function Prototype in cmm_data_pci.c
5814// 5171//
5815USHORT RtmpPCI_WriteTxResource( 5172USHORT RtmpPCI_WriteTxResource(
5816 IN PRTMP_ADAPTER pAd, 5173 IN PRTMP_ADAPTER pAd,
@@ -5873,6 +5230,16 @@ NDIS_STATUS RTMPCheckRxError(
5873 IN PRXWI_STRUC pRxWI, 5230 IN PRXWI_STRUC pRxWI,
5874 IN PRT28XX_RXD_STRUC pRxD); 5231 IN PRT28XX_RXD_STRUC pRxD);
5875 5232
5233BOOLEAN RT28xxPciAsicRadioOff(
5234 IN PRTMP_ADAPTER pAd,
5235 IN UCHAR Level,
5236 IN USHORT TbttNumToNextWakeUp);
5237
5238BOOLEAN RT28xxPciAsicRadioOn(
5239 IN PRTMP_ADAPTER pAd,
5240 IN UCHAR Level);
5241
5242#ifdef RTMP_PCI_SUPPORT
5876VOID RTMPInitPCIeLinkCtrlValue( 5243VOID RTMPInitPCIeLinkCtrlValue(
5877 IN PRTMP_ADAPTER pAd); 5244 IN PRTMP_ADAPTER pAd);
5878 5245
@@ -5887,23 +5254,6 @@ VOID RTMPPCIeLinkCtrlSetting(
5887 IN PRTMP_ADAPTER pAd, 5254 IN PRTMP_ADAPTER pAd,
5888 IN USHORT Max); 5255 IN USHORT Max);
5889 5256
5890VOID RT28xxPciAsicRadioOff(
5891 IN PRTMP_ADAPTER pAd,
5892 IN UCHAR Level,
5893 IN USHORT TbttNumToNextWakeUp);
5894
5895BOOLEAN RT28xxPciAsicRadioOn(
5896 IN PRTMP_ADAPTER pAd,
5897 IN UCHAR Level);
5898
5899VOID RT28xxPciStaAsicForceWakeup(
5900 IN PRTMP_ADAPTER pAd,
5901 IN UCHAR Level);
5902
5903VOID RT28xxPciStaAsicSleepThenAutoWakeup(
5904 IN PRTMP_ADAPTER pAd,
5905 IN USHORT TbttNumToNextWakeUp);
5906
5907VOID PsPollWakeExec( 5257VOID PsPollWakeExec(
5908 IN PVOID SystemSpecific1, 5258 IN PVOID SystemSpecific1,
5909 IN PVOID FunctionContext, 5259 IN PVOID FunctionContext,
@@ -5915,112 +5265,25 @@ VOID RadioOnExec(
5915 IN PVOID FunctionContext, 5265 IN PVOID FunctionContext,
5916 IN PVOID SystemSpecific2, 5266 IN PVOID SystemSpecific2,
5917 IN PVOID SystemSpecific3); 5267 IN PVOID SystemSpecific3);
5268#endif // RTMP_PCI_SUPPORT //
5918 5269
5919VOID RT28xxPciMlmeRadioOn( 5270VOID RT28xxPciStaAsicForceWakeup(
5920 IN PRTMP_ADAPTER pAd);
5921
5922VOID RT28xxPciMlmeRadioOFF(
5923 IN PRTMP_ADAPTER pAd);
5924#endif /* RT2860 */
5925
5926VOID AsicTurnOffRFClk(
5927 IN PRTMP_ADAPTER pAd,
5928 IN UCHAR Channel);
5929
5930VOID AsicTurnOnRFClk(
5931 IN PRTMP_ADAPTER pAd,
5932 IN UCHAR Channel);
5933
5934NTSTATUS RT30xxWriteRFRegister(
5935 IN PRTMP_ADAPTER pAd,
5936 IN UCHAR RegID,
5937 IN UCHAR Value);
5938
5939NTSTATUS RT30xxReadRFRegister(
5940 IN PRTMP_ADAPTER pAd,
5941 IN UCHAR RegID,
5942 IN PUCHAR pValue);
5943
5944UCHAR eFuseReadRegisters(
5945 IN PRTMP_ADAPTER pAd,
5946 IN USHORT Offset,
5947 IN USHORT Length,
5948 OUT USHORT* pData);
5949
5950VOID eFuseReadPhysical(
5951 IN PRTMP_ADAPTER pAd,
5952 IN PUSHORT lpInBuffer,
5953 IN ULONG nInBufferSize,
5954 OUT PUSHORT lpOutBuffer,
5955 IN ULONG nOutBufferSize
5956);
5957
5958NTSTATUS eFuseRead(
5959 IN PRTMP_ADAPTER pAd,
5960 IN USHORT Offset,
5961 OUT PUCHAR pData,
5962 IN USHORT Length);
5963
5964VOID eFusePhysicalWriteRegisters(
5965 IN PRTMP_ADAPTER pAd,
5966 IN USHORT Offset,
5967 IN USHORT Length,
5968 OUT USHORT* pData);
5969
5970NTSTATUS eFuseWriteRegisters(
5971 IN PRTMP_ADAPTER pAd,
5972 IN USHORT Offset,
5973 IN USHORT Length,
5974 IN USHORT* pData);
5975
5976VOID eFuseWritePhysical(
5977 IN PRTMP_ADAPTER pAd,
5978 PUSHORT lpInBuffer,
5979 ULONG nInBufferSize,
5980 PUCHAR lpOutBuffer,
5981 ULONG nOutBufferSize
5982);
5983
5984NTSTATUS eFuseWrite(
5985 IN PRTMP_ADAPTER pAd,
5986 IN USHORT Offset,
5987 IN PUCHAR pData,
5988 IN USHORT length);
5989
5990INT set_eFuseGetFreeBlockCount_Proc(
5991 IN PRTMP_ADAPTER pAd,
5992 IN PUCHAR arg);
5993
5994INT set_eFusedump_Proc(
5995 IN PRTMP_ADAPTER pAd,
5996 IN PUCHAR arg);
5997
5998INT set_eFuseLoadFromBin_Proc(
5999 IN PRTMP_ADAPTER pAd,
6000 IN PUCHAR arg);
6001
6002NTSTATUS eFuseWriteRegistersFromBin(
6003 IN PRTMP_ADAPTER pAd, 5271 IN PRTMP_ADAPTER pAd,
6004 IN USHORT Offset, 5272 IN BOOLEAN bFromTx);
6005 IN USHORT Length,
6006 IN USHORT* pData);
6007 5273
6008VOID eFusePhysicalReadRegisters( 5274VOID RT28xxPciStaAsicSleepThenAutoWakeup(
6009 IN PRTMP_ADAPTER pAd, 5275 IN PRTMP_ADAPTER pAd,
6010 IN USHORT Offset, 5276 IN USHORT TbttNumToNextWakeUp);
6011 IN USHORT Length,
6012 OUT USHORT* pData);
6013 5277
6014VOID RT30xxLoadRFNormalModeSetup(
6015 IN PRTMP_ADAPTER pAd);
6016 5278
6017VOID RT30xxLoadRFSleepModeSetup( 5279VOID RT28xxPciMlmeRadioOn(
6018 IN PRTMP_ADAPTER pAd); 5280 IN PRTMP_ADAPTER pAd);
6019 5281
6020VOID RT30xxReverseRFSleepModeSetup( 5282VOID RT28xxPciMlmeRadioOFF(
6021 IN PRTMP_ADAPTER pAd); 5283 IN PRTMP_ADAPTER pAd);
5284#endif // RTMP_MAC_PCI //
6022 5285
6023#ifdef RT2870 5286#ifdef RTMP_MAC_USB
6024// 5287//
6025// Function Prototype in rtusb_bulk.c 5288// Function Prototype in rtusb_bulk.c
6026// 5289//
@@ -6037,6 +5300,10 @@ VOID RTUSBInitHTTxDesc(
6037 IN ULONG BulkOutSize, 5300 IN ULONG BulkOutSize,
6038 IN usb_complete_t Func); 5301 IN usb_complete_t Func);
6039 5302
5303VOID RTUSBInitRxDesc(
5304 IN PRTMP_ADAPTER pAd,
5305 IN PRX_CONTEXT pRxContext);
5306
6040VOID RTUSBCleanUpDataBulkOutQueue( 5307VOID RTUSBCleanUpDataBulkOutQueue(
6041 IN PRTMP_ADAPTER pAd); 5308 IN PRTMP_ADAPTER pAd);
6042 5309
@@ -6083,6 +5350,9 @@ VOID RTUSBInitRxDesc(
6083 IN PRTMP_ADAPTER pAd, 5350 IN PRTMP_ADAPTER pAd,
6084 IN PRX_CONTEXT pRxContext); 5351 IN PRX_CONTEXT pRxContext);
6085 5352
5353VOID RTUSBBulkRxHandle(
5354 IN unsigned long data);
5355
6086// 5356//
6087// Function Prototype in rtusb_io.c 5357// Function Prototype in rtusb_io.c
6088// 5358//
@@ -6168,36 +5438,19 @@ VOID RTUSBDequeueCmd(
6168INT RTUSBCmdThread( 5438INT RTUSBCmdThread(
6169 IN OUT PVOID Context); 5439 IN OUT PVOID Context);
6170 5440
6171INT TimerQThread( 5441VOID RTUSBBssBeaconExit(
6172 IN OUT PVOID Context);
6173
6174RT2870_TIMER_ENTRY *RT2870_TimerQ_Insert(
6175 IN RTMP_ADAPTER *pAd,
6176 IN RALINK_TIMER_STRUCT *pTimer);
6177
6178BOOLEAN RT2870_TimerQ_Remove(
6179 IN RTMP_ADAPTER *pAd,
6180 IN RALINK_TIMER_STRUCT *pTimer);
6181
6182void RT2870_TimerQ_Exit(
6183 IN RTMP_ADAPTER *pAd); 5442 IN RTMP_ADAPTER *pAd);
6184 5443
6185void RT2870_TimerQ_Init( 5444VOID RTUSBBssBeaconStop(
6186 IN RTMP_ADAPTER *pAd); 5445 IN RTMP_ADAPTER *pAd);
6187 5446
6188VOID RT2870_BssBeaconExit( 5447VOID RTUSBBssBeaconStart(
6189 IN RTMP_ADAPTER *pAd);
6190
6191VOID RT2870_BssBeaconStop(
6192 IN RTMP_ADAPTER *pAd);
6193
6194VOID RT2870_BssBeaconStart(
6195 IN RTMP_ADAPTER * pAd); 5448 IN RTMP_ADAPTER * pAd);
6196 5449
6197VOID RT2870_BssBeaconInit( 5450VOID RTUSBBssBeaconInit(
6198 IN RTMP_ADAPTER *pAd); 5451 IN RTMP_ADAPTER *pAd);
6199 5452
6200VOID RT2870_WatchDog( 5453VOID RTUSBWatchDog(
6201 IN RTMP_ADAPTER *pAd); 5454 IN RTMP_ADAPTER *pAd);
6202 5455
6203NTSTATUS RTUSBWriteMACRegister( 5456NTSTATUS RTUSBWriteMACRegister(
@@ -6215,28 +5468,27 @@ NTSTATUS RTUSBSingleWrite(
6215 IN USHORT Offset, 5468 IN USHORT Offset,
6216 IN USHORT Value); 5469 IN USHORT Value);
6217 5470
6218NTSTATUS RTUSBFirmwareRun(
6219 IN PRTMP_ADAPTER pAd);
6220
6221NTSTATUS RTUSBFirmwareWrite( 5471NTSTATUS RTUSBFirmwareWrite(
6222 IN PRTMP_ADAPTER pAd, 5472 IN PRTMP_ADAPTER pAd,
6223 IN PUCHAR pFwImage, 5473 IN PUCHAR pFwImage,
6224 IN ULONG FwLen); 5474 IN ULONG FwLen);
6225 5475
6226NTSTATUS RTUSBFirmwareOpmode(
6227 IN PRTMP_ADAPTER pAd,
6228 OUT PUINT32 pValue);
6229
6230NTSTATUS RTUSBVenderReset( 5476NTSTATUS RTUSBVenderReset(
6231 IN PRTMP_ADAPTER pAd); 5477 IN PRTMP_ADAPTER pAd);
6232 5478
6233VOID CMDHandler( 5479NDIS_STATUS RTUSBSetHardWareRegister(
6234 IN PRTMP_ADAPTER pAd); 5480 IN PRTMP_ADAPTER pAdapter,
5481 IN PVOID pBuf);
6235 5482
5483NDIS_STATUS RTUSBQueryHardWareRegister(
5484 IN PRTMP_ADAPTER pAdapter,
5485 IN PVOID pBuf);
6236 5486
6237NDIS_STATUS CreateThreads( 5487VOID CMDHandler(
6238 IN struct net_device *net_dev ); 5488 IN PRTMP_ADAPTER pAd);
6239 5489
5490NDIS_STATUS RTUSBWriteHWMACAddress(
5491 IN PRTMP_ADAPTER pAdapter);
6240 5492
6241VOID MacTableInitialize( 5493VOID MacTableInitialize(
6242 IN PRTMP_ADAPTER pAd); 5494 IN PRTMP_ADAPTER pAd);
@@ -6252,12 +5504,30 @@ NDIS_STATUS RTMPWPAAddKeyProc(
6252VOID AsicRxAntEvalAction( 5504VOID AsicRxAntEvalAction(
6253 IN PRTMP_ADAPTER pAd); 5505 IN PRTMP_ADAPTER pAd);
6254 5506
5507void append_pkt(
5508 IN PRTMP_ADAPTER pAd,
5509 IN PUCHAR pHeader802_3,
5510 IN UINT HdrLen,
5511 IN PUCHAR pData,
5512 IN ULONG DataSize,
5513 OUT PNDIS_PACKET *ppPacket);
5514
5515UINT deaggregate_AMSDU_announce(
5516 IN PRTMP_ADAPTER pAd,
5517 PNDIS_PACKET pPacket,
5518 IN PUCHAR pData,
5519 IN ULONG DataSize);
5520
6255NDIS_STATUS RTMPCheckRxError( 5521NDIS_STATUS RTMPCheckRxError(
6256 IN PRTMP_ADAPTER pAd, 5522 IN PRTMP_ADAPTER pAd,
6257 IN PHEADER_802_11 pHeader, 5523 IN PHEADER_802_11 pHeader,
6258 IN PRXWI_STRUC pRxWI, 5524 IN PRXWI_STRUC pRxWI,
6259 IN PRT28XX_RXD_STRUC pRxINFO); 5525 IN PRT28XX_RXD_STRUC pRxINFO);
6260 5526
5527VOID RTUSBMlmeHardTransmit(
5528 IN PRTMP_ADAPTER pAd,
5529 IN PMGMT_STRUC pMgmt);
5530
6261INT MlmeThread( 5531INT MlmeThread(
6262 IN PVOID Context); 5532 IN PVOID Context);
6263 5533
@@ -6285,7 +5555,7 @@ VOID RTMPWriteTxInfo(
6285 IN UCHAR TxBurst); 5555 IN UCHAR TxBurst);
6286 5556
6287// 5557//
6288// Function Prototype in cmm_data_2870.c 5558// Function Prototype in cmm_data_usb.c
6289// 5559//
6290USHORT RtmpUSB_WriteSubTxResource( 5560USHORT RtmpUSB_WriteSubTxResource(
6291 IN PRTMP_ADAPTER pAd, 5561 IN PRTMP_ADAPTER pAd,
@@ -6315,9 +5585,6 @@ VOID RtmpUSB_FinalWriteTxResource(
6315 IN PRTMP_ADAPTER pAd, 5585 IN PRTMP_ADAPTER pAd,
6316 IN TX_BLK *pTxBlk, 5586 IN TX_BLK *pTxBlk,
6317 IN USHORT totalMPDUSize, 5587 IN USHORT totalMPDUSize,
6318#ifdef RT2860
6319 IN USHORT FirstTxIdx);
6320#endif
6321 IN USHORT TxIdx); 5588 IN USHORT TxIdx);
6322 5589
6323VOID RtmpUSBDataLastTxIdx( 5590VOID RtmpUSBDataLastTxIdx(
@@ -6344,6 +5611,12 @@ VOID RtmpUSBNullFrameKickOut(
6344 IN UCHAR *pNullFrame, 5611 IN UCHAR *pNullFrame,
6345 IN UINT32 frameLen); 5612 IN UINT32 frameLen);
6346 5613
5614VOID RtmpUsbStaAsicForceWakeupTimeout(
5615 IN PVOID SystemSpecific1,
5616 IN PVOID FunctionContext,
5617 IN PVOID SystemSpecific2,
5618 IN PVOID SystemSpecific3);
5619
6347VOID RT28xxUsbStaAsicForceWakeup( 5620VOID RT28xxUsbStaAsicForceWakeup(
6348 IN PRTMP_ADAPTER pAd, 5621 IN PRTMP_ADAPTER pAd,
6349 IN BOOLEAN bFromTx); 5622 IN BOOLEAN bFromTx);
@@ -6357,44 +5630,72 @@ VOID RT28xxUsbMlmeRadioOn(
6357 5630
6358VOID RT28xxUsbMlmeRadioOFF( 5631VOID RT28xxUsbMlmeRadioOFF(
6359 IN PRTMP_ADAPTER pAd); 5632 IN PRTMP_ADAPTER pAd);
6360#endif // RT2870 // 5633#endif // RTMP_MAC_USB //
5634
5635VOID AsicTurnOffRFClk(
5636 IN PRTMP_ADAPTER pAd,
5637 IN UCHAR Channel);
6361 5638
5639VOID AsicTurnOnRFClk(
5640 IN PRTMP_ADAPTER pAd,
5641 IN UCHAR Channel);
5642
5643
5644
5645#ifdef RTMP_TIMER_TASK_SUPPORT
5646INT RtmpTimerQThread(
5647 IN OUT PVOID Context);
5648
5649RTMP_TIMER_TASK_ENTRY *RtmpTimerQInsert(
5650 IN RTMP_ADAPTER *pAd,
5651 IN RALINK_TIMER_STRUCT *pTimer);
5652
5653BOOLEAN RtmpTimerQRemove(
5654 IN RTMP_ADAPTER *pAd,
5655 IN RALINK_TIMER_STRUCT *pTimer);
5656
5657void RtmpTimerQExit(
5658 IN RTMP_ADAPTER *pAd);
5659
5660void RtmpTimerQInit(
5661 IN RTMP_ADAPTER *pAd);
5662#endif // RTMP_TIMER_TASK_SUPPORT //
5663
5664///////////////////////////////////////
6362INT RTMPShowCfgValue( 5665INT RTMPShowCfgValue(
6363 IN PRTMP_ADAPTER pAd, 5666 IN PRTMP_ADAPTER pAd,
6364 IN PUCHAR pName, 5667 IN PSTRING pName,
6365 IN PUCHAR pBuf); 5668 IN PSTRING pBuf);
6366 5669
6367PCHAR RTMPGetRalinkAuthModeStr( 5670PSTRING RTMPGetRalinkAuthModeStr(
6368 IN NDIS_802_11_AUTHENTICATION_MODE authMode); 5671 IN NDIS_802_11_AUTHENTICATION_MODE authMode);
6369 5672
6370PCHAR RTMPGetRalinkEncryModeStr( 5673PSTRING RTMPGetRalinkEncryModeStr(
6371 IN USHORT encryMode); 5674 IN USHORT encryMode);
5675//////////////////////////////////////
6372 5676
6373VOID AsicStaBbpTuning( 5677VOID AsicStaBbpTuning(
6374 IN PRTMP_ADAPTER pAd); 5678 IN PRTMP_ADAPTER pAd);
6375 5679
6376#ifdef RT2860
6377VOID AsicResetFromDMABusy(
6378 IN PRTMP_ADAPTER pAd);
6379
6380VOID AsicResetBBP(
6381 IN PRTMP_ADAPTER pAd);
6382
6383VOID AsicResetMAC(
6384 IN PRTMP_ADAPTER pAd);
6385
6386VOID AsicResetPBF(
6387 IN PRTMP_ADAPTER pAd);
6388#endif
6389#ifdef RT2870
6390BOOLEAN StaAddMacTableEntry( 5680BOOLEAN StaAddMacTableEntry(
6391 IN PRTMP_ADAPTER pAd, 5681 IN PRTMP_ADAPTER pAd,
6392 IN PMAC_TABLE_ENTRY pEntry, 5682 IN PMAC_TABLE_ENTRY pEntry,
6393 IN UCHAR MaxSupportedRateIn500Kbps, 5683 IN UCHAR MaxSupportedRateIn500Kbps,
6394 IN HT_CAPABILITY_IE *pHtCapability, 5684 IN HT_CAPABILITY_IE *pHtCapability,
6395 IN UCHAR HtCapabilityLen, 5685 IN UCHAR HtCapabilityLen,
5686 IN ADD_HT_INFO_IE *pAddHtInfo,
5687 IN UCHAR AddHtInfoLen,
6396 IN USHORT CapabilityInfo); 5688 IN USHORT CapabilityInfo);
6397#endif 5689
5690
5691BOOLEAN AUTH_ReqSend(
5692 IN PRTMP_ADAPTER pAd,
5693 IN PMLME_QUEUE_ELEM pElem,
5694 IN PRALINK_TIMER_STRUCT pAuthTimer,
5695 IN PSTRING pSMName,
5696 IN USHORT SeqNo,
5697 IN PUCHAR pNewElement,
5698 IN ULONG ElementLen);
6398 5699
6399void RTMP_IndicateMediaState( 5700void RTMP_IndicateMediaState(
6400 IN PRTMP_ADAPTER pAd); 5701 IN PRTMP_ADAPTER pAd);
@@ -6409,13 +5710,23 @@ VOID RTMPSetAGCInitValue(
6409int rt28xx_close(IN PNET_DEV dev); 5710int rt28xx_close(IN PNET_DEV dev);
6410int rt28xx_open(IN PNET_DEV dev); 5711int rt28xx_open(IN PNET_DEV dev);
6411 5712
5713
5714#define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
5715#define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
5716#define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
5717
5718
5719#ifdef LINUX
6412__inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd) 5720__inline INT VIRTUAL_IF_UP(PRTMP_ADAPTER pAd)
6413{ 5721{
6414 if (VIRTUAL_IF_NUM(pAd) == 0) 5722 if (VIRTUAL_IF_NUM(pAd) == 0)
6415 { 5723 {
6416 if (rt28xx_open(pAd->net_dev) != 0) 5724 if (rt28xx_open(pAd->net_dev) != 0)
5725 {
5726 DBGPRINT(RT_DEBUG_TRACE, ("rt28xx_open return fail!\n"));
6417 return -1; 5727 return -1;
6418 } 5728 }
5729 }
6419 else 5730 else
6420 { 5731 {
6421 } 5732 }
@@ -6430,6 +5741,107 @@ __inline VOID VIRTUAL_IF_DOWN(PRTMP_ADAPTER pAd)
6430 rt28xx_close(pAd->net_dev); 5741 rt28xx_close(pAd->net_dev);
6431 return; 5742 return;
6432} 5743}
5744#endif // LINUX //
5745
5746
5747/*
5748 OS Related funciton prototype definitions.
5749 TODO: Maybe we need to move these function prototypes to other proper place.
5750*/
5751int RtmpOSWrielessEventSend(
5752 IN RTMP_ADAPTER *pAd,
5753 IN UINT32 eventType,
5754 IN INT flags,
5755 IN PUCHAR pSrcMac,
5756 IN PUCHAR pData,
5757 IN UINT32 dataLen);
5758
5759int RtmpOSNetDevAddrSet(
5760 IN PNET_DEV pNetDev,
5761 IN PUCHAR pMacAddr);
5762
5763int RtmpOSNetDevAttach(
5764 IN PNET_DEV pNetDev,
5765 IN RTMP_OS_NETDEV_OP_HOOK *pDevOpHook);
5766
5767void RtmpOSNetDevClose(
5768 IN PNET_DEV pNetDev);
5769
5770void RtmpOSNetDevDetach(
5771 IN PNET_DEV pNetDev);
5772
5773INT RtmpOSNetDevAlloc(
5774 IN PNET_DEV *pNewNetDev,
5775 IN UINT32 privDataSize);
5776
5777void RtmpOSNetDevFree(
5778 IN PNET_DEV pNetDev);
5779
5780PNET_DEV RtmpOSNetDevGetByName(
5781 IN PNET_DEV pNetDev,
5782 IN PSTRING pDevName);
5783
5784void RtmpOSNetDeviceRefPut(
5785 IN PNET_DEV pNetDev);
5786
5787PNET_DEV RtmpOSNetDevCreate(
5788 IN RTMP_ADAPTER *pAd,
5789 IN INT devType,
5790 IN INT devNum,
5791 IN INT privMemSize,
5792 IN PSTRING pNamePrefix);
5793
5794/*
5795 Task operation related function prototypes
5796*/
5797void RtmpOSTaskCustomize(
5798 IN RTMP_OS_TASK *pTask);
5799
5800INT RtmpOSTaskNotifyToExit(
5801 IN RTMP_OS_TASK *pTask);
5802
5803NDIS_STATUS RtmpOSTaskKill(
5804 IN RTMP_OS_TASK *pTask);
5805
5806NDIS_STATUS RtmpOSTaskInit(
5807 IN RTMP_OS_TASK *pTask,
5808 PSTRING pTaskName,
5809 VOID *pPriv);
5810
5811NDIS_STATUS RtmpOSTaskAttach(
5812 IN RTMP_OS_TASK *pTask,
5813 IN int (*fn)(void *),
5814 IN void *arg);
5815
5816
5817/*
5818 File operation related function prototypes
5819*/
5820RTMP_OS_FD RtmpOSFileOpen(
5821 IN char *pPath,
5822 IN int flag,
5823 IN int mode);
5824
5825int RtmpOSFileClose(
5826 IN RTMP_OS_FD osfd);
5827
5828void RtmpOSFileSeek(
5829 IN RTMP_OS_FD osfd,
5830 IN int offset);
5831
5832int RtmpOSFileRead(
5833 IN RTMP_OS_FD osfd,
5834 IN char *pDataPtr,
5835 IN int readLen);
5836
5837int RtmpOSFileWrite(
5838 IN RTMP_OS_FD osfd,
5839 IN char *pDataPtr,
5840 IN int writeLen);
5841
5842void RtmpOSFSInfoChange(
5843 IN RTMP_OS_FS_INFO *pOSFSInfo,
5844 IN BOOLEAN bSet);
6433 5845
6434 5846
6435#endif // __RTMP_H__ 5847#endif // __RTMP_H__