1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41#ifndef __RTMP_H__
42#define __RTMP_H__
43
44#include "spectrum_def.h"
45#include "rtmp_dot11.h"
46#include "rtmp_chip.h"
47
48struct rt_rtmp_adapter;
49
50
51
52
53
54
55#define MAX_DATAMM_RETRY 3
56#define MGMT_USE_QUEUE_FLAG 0x80
57
58
59#define MAXSEQ (0xFFF)
60
61extern unsigned char SNAP_AIRONET[];
62extern unsigned char CISCO_OUI[];
63extern u8 BaSizeArray[4];
64
65extern u8 BROADCAST_ADDR[MAC_ADDR_LEN];
66extern u8 ZERO_MAC_ADDR[MAC_ADDR_LEN];
67extern unsigned long BIT32[32];
68extern u8 BIT8[8];
69extern char *CipherName[];
70extern char *MCSToMbps[];
71extern u8 RxwiMCSToOfdmRate[12];
72extern u8 SNAP_802_1H[6];
73extern u8 SNAP_BRIDGE_TUNNEL[6];
74extern u8 SNAP_AIRONET[8];
75extern u8 CKIP_LLC_SNAP[8];
76extern u8 EAPOL_LLC_SNAP[8];
77extern u8 EAPOL[2];
78extern u8 IPX[2];
79extern u8 APPLE_TALK[2];
80extern u8 RateIdToPlcpSignal[12];
81extern u8 OfdmRateToRxwiMCS[];
82extern u8 OfdmSignalToRateId[16];
83extern u8 default_cwmin[4];
84extern u8 default_cwmax[4];
85extern u8 default_sta_aifsn[4];
86extern u8 MapUserPriorityToAccessCategory[8];
87
88extern u16 RateUpPER[];
89extern u16 RateDownPER[];
90extern u8 Phy11BNextRateDownward[];
91extern u8 Phy11BNextRateUpward[];
92extern u8 Phy11BGNextRateDownward[];
93extern u8 Phy11BGNextRateUpward[];
94extern u8 Phy11ANextRateDownward[];
95extern u8 Phy11ANextRateUpward[];
96extern char RssiSafeLevelForTxRate[];
97extern u8 RateIdToMbps[];
98extern u16 RateIdTo500Kbps[];
99
100extern u8 CipherSuiteWpaNoneTkip[];
101extern u8 CipherSuiteWpaNoneTkipLen;
102
103extern u8 CipherSuiteWpaNoneAes[];
104extern u8 CipherSuiteWpaNoneAesLen;
105
106extern u8 SsidIe;
107extern u8 SupRateIe;
108extern u8 ExtRateIe;
109
110extern u8 HtCapIe;
111extern u8 AddHtInfoIe;
112extern u8 NewExtChanIe;
113
114extern u8 ErpIe;
115extern u8 DsIe;
116extern u8 TimIe;
117extern u8 WpaIe;
118extern u8 Wpa2Ie;
119extern u8 IbssIe;
120extern u8 Ccx2Ie;
121extern u8 WapiIe;
122
123extern u8 WPA_OUI[];
124extern u8 RSN_OUI[];
125extern u8 WAPI_OUI[];
126extern u8 WME_INFO_ELEM[];
127extern u8 WME_PARM_ELEM[];
128extern u8 Ccx2QosInfo[];
129extern u8 Ccx2IeInfo[];
130extern u8 RALINK_OUI[];
131extern u8 PowerConstraintIE[];
132
133extern u8 RateSwitchTable[];
134extern u8 RateSwitchTable11B[];
135extern u8 RateSwitchTable11G[];
136extern u8 RateSwitchTable11BG[];
137
138extern u8 RateSwitchTable11BGN1S[];
139extern u8 RateSwitchTable11BGN2S[];
140extern u8 RateSwitchTable11BGN2SForABand[];
141extern u8 RateSwitchTable11N1S[];
142extern u8 RateSwitchTable11N2S[];
143extern u8 RateSwitchTable11N2SForABand[];
144
145extern u8 PRE_N_HT_OUI[];
146
147struct rt_rssi_sample {
148 char LastRssi0;
149 char LastRssi1;
150 char LastRssi2;
151 char AvgRssi0;
152 char AvgRssi1;
153 char AvgRssi2;
154 short AvgRssi0X8;
155 short AvgRssi1X8;
156 short AvgRssi2X8;
157};
158
159
160
161
162struct rt_queue_entry;
163
164struct rt_queue_entry {
165 struct rt_queue_entry *Next;
166};
167
168
169struct rt_queue_header {
170 struct rt_queue_entry *Head;
171 struct rt_queue_entry *Tail;
172 unsigned long Number;
173};
174
175#define InitializeQueueHeader(QueueHeader) \
176{ \
177 (QueueHeader)->Head = (QueueHeader)->Tail = NULL; \
178 (QueueHeader)->Number = 0; \
179}
180
181#define RemoveHeadQueue(QueueHeader) \
182(QueueHeader)->Head; \
183{ \
184 struct rt_queue_entry *pNext; \
185 if ((QueueHeader)->Head != NULL) { \
186 pNext = (QueueHeader)->Head->Next; \
187 (QueueHeader)->Head->Next = NULL; \
188 (QueueHeader)->Head = pNext; \
189 if (pNext == NULL) \
190 (QueueHeader)->Tail = NULL; \
191 (QueueHeader)->Number--; \
192 } \
193}
194
195#define InsertHeadQueue(QueueHeader, QueueEntry) \
196{ \
197 ((struct rt_queue_entry *)QueueEntry)->Next = (QueueHeader)->Head; \
198 (QueueHeader)->Head = (struct rt_queue_entry *)(QueueEntry); \
199 if ((QueueHeader)->Tail == NULL) \
200 (QueueHeader)->Tail = (struct rt_queue_entry *)(QueueEntry); \
201 (QueueHeader)->Number++; \
202}
203
204#define InsertTailQueue(QueueHeader, QueueEntry) \
205{ \
206 ((struct rt_queue_entry *)QueueEntry)->Next = NULL; \
207 if ((QueueHeader)->Tail) \
208 (QueueHeader)->Tail->Next = (struct rt_queue_entry *)(QueueEntry); \
209 else \
210 (QueueHeader)->Head = (struct rt_queue_entry *)(QueueEntry); \
211 (QueueHeader)->Tail = (struct rt_queue_entry *)(QueueEntry); \
212 (QueueHeader)->Number++; \
213}
214
215#define InsertTailQueueAc(pAd, pEntry, QueueHeader, QueueEntry) \
216{ \
217 ((struct rt_queue_entry *)QueueEntry)->Next = NULL; \
218 if ((QueueHeader)->Tail) \
219 (QueueHeader)->Tail->Next = (struct rt_queue_entry *)(QueueEntry); \
220 else \
221 (QueueHeader)->Head = (struct rt_queue_entry *)(QueueEntry); \
222 (QueueHeader)->Tail = (struct rt_queue_entry *)(QueueEntry); \
223 (QueueHeader)->Number++; \
224}
225
226
227
228
229#define RTMP_SET_FLAG(_M, _F) ((_M)->Flags |= (_F))
230#define RTMP_CLEAR_FLAG(_M, _F) ((_M)->Flags &= ~(_F))
231#define RTMP_CLEAR_FLAGS(_M) ((_M)->Flags = 0)
232#define RTMP_TEST_FLAG(_M, _F) (((_M)->Flags & (_F)) != 0)
233#define RTMP_TEST_FLAGS(_M, _F) (((_M)->Flags & (_F)) == (_F))
234
235#define RTMP_SET_PSFLAG(_M, _F) ((_M)->PSFlags |= (_F))
236#define RTMP_CLEAR_PSFLAG(_M, _F) ((_M)->PSFlags &= ~(_F))
237#define RTMP_CLEAR_PSFLAGS(_M) ((_M)->PSFlags = 0)
238#define RTMP_TEST_PSFLAG(_M, _F) (((_M)->PSFlags & (_F)) != 0)
239#define RTMP_TEST_PSFLAGS(_M, _F) (((_M)->PSFlags & (_F)) == (_F))
240
241#define OPSTATUS_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags |= (_F))
242#define OPSTATUS_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.OpStatusFlags &= ~(_F))
243#define OPSTATUS_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.OpStatusFlags & (_F)) != 0)
244
245#define CLIENT_STATUS_SET_FLAG(_pEntry, _F) ((_pEntry)->ClientStatusFlags |= (_F))
246#define CLIENT_STATUS_CLEAR_FLAG(_pEntry, _F) ((_pEntry)->ClientStatusFlags &= ~(_F))
247#define CLIENT_STATUS_TEST_FLAG(_pEntry, _F) (((_pEntry)->ClientStatusFlags & (_F)) != 0)
248
249#define RX_FILTER_SET_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter |= (_F))
250#define RX_FILTER_CLEAR_FLAG(_pAd, _F) ((_pAd)->CommonCfg.PacketFilter &= ~(_F))
251#define RX_FILTER_TEST_FLAG(_pAd, _F) (((_pAd)->CommonCfg.PacketFilter & (_F)) != 0)
252
253#define STA_NO_SECURITY_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11EncryptionDisabled)
254#define STA_WEP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption1Enabled)
255#define STA_TKIP_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption2Enabled)
256#define STA_AES_ON(_p) (_p->StaCfg.WepStatus == Ndis802_11Encryption3Enabled)
257
258#define STA_TGN_WIFI_ON(_p) (_p->StaCfg.bTGnWifiTest == TRUE)
259
260#define CKIP_KP_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x10) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
261#define CKIP_CMIC_ON(_p) ((((_p)->StaCfg.CkipFlag) & 0x08) && ((_p)->StaCfg.bCkipCmicOn == TRUE))
262
263#define INC_RING_INDEX(_idx, _RingSize) \
264{ \
265 (_idx) = (_idx+1) % (_RingSize); \
266}
267
268
269#define COPY_HTSETTINGS_FROM_MLME_AUX_TO_ACTIVE_CFG(_pAd) \
270{ \
271 _pAd->StaActive.SupportedHtPhy.ChannelWidth = _pAd->MlmeAux.HtCapability.HtCapInfo.ChannelWidth; \
272 _pAd->StaActive.SupportedHtPhy.MimoPs = _pAd->MlmeAux.HtCapability.HtCapInfo.MimoPs; \
273 _pAd->StaActive.SupportedHtPhy.GF = _pAd->MlmeAux.HtCapability.HtCapInfo.GF; \
274 _pAd->StaActive.SupportedHtPhy.ShortGIfor20 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor20; \
275 _pAd->StaActive.SupportedHtPhy.ShortGIfor40 = _pAd->MlmeAux.HtCapability.HtCapInfo.ShortGIfor40; \
276 _pAd->StaActive.SupportedHtPhy.TxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.TxSTBC; \
277 _pAd->StaActive.SupportedHtPhy.RxSTBC = _pAd->MlmeAux.HtCapability.HtCapInfo.RxSTBC; \
278 _pAd->StaActive.SupportedHtPhy.ExtChanOffset = _pAd->MlmeAux.AddHtInfo.AddHtInfo.ExtChanOffset; \
279 _pAd->StaActive.SupportedHtPhy.RecomWidth = _pAd->MlmeAux.AddHtInfo.AddHtInfo.RecomWidth; \
280 _pAd->StaActive.SupportedHtPhy.OperaionMode = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.OperaionMode; \
281 _pAd->StaActive.SupportedHtPhy.NonGfPresent = _pAd->MlmeAux.AddHtInfo.AddHtInfo2.NonGfPresent; \
282 NdisMoveMemory((_pAd)->MacTab.Content[BSSID_WCID].HTCapability.MCSSet, (_pAd)->StaActive.SupportedPhyInfo.MCSSet, sizeof(u8) * 16);\
283}
284
285#define COPY_AP_HTSETTINGS_FROM_BEACON(_pAd, _pHtCapability) \
286{ \
287 _pAd->MacTab.Content[BSSID_WCID].AMsduSize = (u8)(_pHtCapability->HtCapInfo.AMsduSize); \
288 _pAd->MacTab.Content[BSSID_WCID].MmpsMode = (u8)(_pHtCapability->HtCapInfo.MimoPs); \
289 _pAd->MacTab.Content[BSSID_WCID].MaxRAmpduFactor = (u8)(_pHtCapability->HtCapParm.MaxRAmpduFactor); \
290}
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311#define NIC_MAX_PHYS_BUF_COUNT 8
312
313struct rt_rtmp_sg_element {
314 void *Address;
315 unsigned long Length;
316 unsigned long *Reserved;
317};
318
319struct rt_rtmp_sg_list {
320 unsigned long NumberOfElements;
321 unsigned long *Reserved;
322 struct rt_rtmp_sg_element Elements[NIC_MAX_PHYS_BUF_COUNT];
323};
324
325
326
327
328#define GET_LNA_GAIN(_pAd) ((_pAd->LatchRfRegs.Channel <= 14) ? (_pAd->BLNAGain) : ((_pAd->LatchRfRegs.Channel <= 64) ? (_pAd->ALNAGain0) : ((_pAd->LatchRfRegs.Channel <= 128) ? (_pAd->ALNAGain1) : (_pAd->ALNAGain2))))
329
330#define INC_COUNTER64(Val) (Val.QuadPart++)
331
332#define INFRA_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_INFRA_ON))
333#define ADHOC_ON(_p) (OPSTATUS_TEST_FLAG(_p, fOP_STATUS_ADHOC_ON))
334#define MONITOR_ON(_p) (((_p)->StaCfg.BssType) == BSS_MONITOR)
335#define IDLE_ON(_p) (!INFRA_ON(_p) && !ADHOC_ON(_p))
336
337
338#define LEAP_ON(_p) (((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP)
339#define LEAP_CCKM_ON(_p) ((((_p)->StaCfg.LeapAuthMode) == CISCO_AuthModeLEAP) && ((_p)->StaCfg.LeapAuthInfo.CCKM == TRUE))
340
341
342#define EXTRA_LLCSNAP_ENCAP_FROM_PKT_START(_pBufVA, _pExtraLlcSnapEncap) \
343{ \
344 if (((*(_pBufVA + 12) << 8) + *(_pBufVA + 13)) > 1500) { \
345 _pExtraLlcSnapEncap = SNAP_802_1H; \
346 if (NdisEqualMemory(IPX, _pBufVA + 12, 2) || \
347 NdisEqualMemory(APPLE_TALK, _pBufVA + 12, 2)) { \
348 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
349 } \
350 } \
351 else { \
352 _pExtraLlcSnapEncap = NULL; \
353 } \
354}
355
356
357#define EXTRA_LLCSNAP_ENCAP_FROM_PKT_OFFSET(_pBufVA, _pExtraLlcSnapEncap) \
358{ \
359 if (((*(_pBufVA) << 8) + *(_pBufVA + 1)) > 1500) { \
360 _pExtraLlcSnapEncap = SNAP_802_1H; \
361 if (NdisEqualMemory(IPX, _pBufVA, 2) || \
362 NdisEqualMemory(APPLE_TALK, _pBufVA, 2)) { \
363 _pExtraLlcSnapEncap = SNAP_BRIDGE_TUNNEL; \
364 } \
365 } \
366 else { \
367 _pExtraLlcSnapEncap = NULL; \
368 } \
369}
370
371#define MAKE_802_3_HEADER(_p, _pMac1, _pMac2, _pType) \
372{ \
373 NdisMoveMemory(_p, _pMac1, MAC_ADDR_LEN); \
374 NdisMoveMemory((_p + MAC_ADDR_LEN), _pMac2, MAC_ADDR_LEN); \
375 NdisMoveMemory((_p + MAC_ADDR_LEN * 2), _pType, LENGTH_802_3_TYPE); \
376}
377
378
379
380
381
382
383
384
385#define CONVERT_TO_802_3(_p8023hdr, _pDA, _pSA, _pData, _DataSize, _pRemovedLLCSNAP) \
386{ \
387 char LLC_Len[2]; \
388 \
389 _pRemovedLLCSNAP = NULL; \
390 if (NdisEqualMemory(SNAP_802_1H, _pData, 6) || \
391 NdisEqualMemory(SNAP_BRIDGE_TUNNEL, _pData, 6)) { \
392 u8 *pProto = _pData + 6; \
393 \
394 if ((NdisEqualMemory(IPX, pProto, 2) || NdisEqualMemory(APPLE_TALK, pProto, 2)) && \
395 NdisEqualMemory(SNAP_802_1H, _pData, 6)) { \
396 LLC_Len[0] = (u8)(_DataSize / 256); \
397 LLC_Len[1] = (u8)(_DataSize % 256); \
398 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
399 } \
400 else { \
401 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, pProto); \
402 _pRemovedLLCSNAP = _pData; \
403 _DataSize -= LENGTH_802_1_H; \
404 _pData += LENGTH_802_1_H; \
405 } \
406 } \
407 else { \
408 LLC_Len[0] = (u8)(_DataSize / 256); \
409 LLC_Len[1] = (u8)(_DataSize % 256); \
410 MAKE_802_3_HEADER(_p8023hdr, _pDA, _pSA, LLC_Len); \
411 } \
412}
413
414
415
416
417#ifdef RTMP_MAC_PCI
418#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
419{ \
420 u32 High32TSF, Low32TSF; \
421 RTMP_IO_READ32(_pAd, TSF_TIMER_DW1, &High32TSF); \
422 RTMP_IO_READ32(_pAd, TSF_TIMER_DW0, &Low32TSF); \
423 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (u8)_Rssi0, (u8)_Rssi1, (u8)_Rssi2, _FrameSize, _pFrame, (u8)_PlcpSignal); \
424}
425#endif
426#ifdef RTMP_MAC_USB
427#define REPORT_MGMT_FRAME_TO_MLME(_pAd, Wcid, _pFrame, _FrameSize, _Rssi0, _Rssi1, _Rssi2, _PlcpSignal) \
428{ \
429 u32 High32TSF = 0, Low32TSF = 0; \
430 MlmeEnqueueForRecv(_pAd, Wcid, High32TSF, Low32TSF, (u8)_Rssi0, (u8)_Rssi1, (u8)_Rssi2, _FrameSize, _pFrame, (u8)_PlcpSignal); \
431}
432#endif
433
434#define MAC_ADDR_EQUAL(pAddr1, pAddr2) RTMPEqualMemory((void *)(pAddr1), (void *)(pAddr2), MAC_ADDR_LEN)
435#define SSID_EQUAL(ssid1, len1, ssid2, len2) ((len1 == len2) && (RTMPEqualMemory(ssid1, ssid2, len1)))
436
437
438
439
440#define JapanChannelCheck(channel) ((channel == 52) || (channel == 56) || (channel == 60) || (channel == 64))
441
442#define STA_EXTRA_SETTING(_pAd)
443
444#define STA_PORT_SECURED(_pAd) \
445{ \
446 BOOLEAN Cancelled; \
447 (_pAd)->StaCfg.PortSecured = WPA_802_1X_PORT_SECURED; \
448 NdisAcquireSpinLock(&((_pAd)->MacTabLock)); \
449 (_pAd)->MacTab.Content[BSSID_WCID].PortSecured = (_pAd)->StaCfg.PortSecured; \
450 (_pAd)->MacTab.Content[BSSID_WCID].PrivacyFilter = Ndis802_11PrivFilterAcceptAll;\
451 NdisReleaseSpinLock(&(_pAd)->MacTabLock); \
452 RTMPCancelTimer(&((_pAd)->Mlme.LinkDownTimer), &Cancelled);\
453 STA_EXTRA_SETTING(_pAd); \
454}
455
456
457
458
459
460struct rt_rtmp_dmabuf {
461 unsigned long AllocSize;
462 void *AllocVa;
463 dma_addr_t AllocPa;
464};
465
466
467
468
469
470
471
472
473
474struct rt_rtmp_dmacb {
475 unsigned long AllocSize;
476 void *AllocVa;
477 dma_addr_t AllocPa;
478 void *pNdisPacket;
479 void *pNextNdisPacket;
480
481 struct rt_rtmp_dmabuf DmaBuf;
482};
483
484struct rt_rtmp_tx_ring {
485 struct rt_rtmp_dmacb Cell[TX_RING_SIZE];
486 u32 TxCpuIdx;
487 u32 TxDmaIdx;
488 u32 TxSwFreeIdx;
489};
490
491struct rt_rtmp_rx_ring {
492 struct rt_rtmp_dmacb Cell[RX_RING_SIZE];
493 u32 RxCpuIdx;
494 u32 RxDmaIdx;
495 int RxSwReadIdx;
496};
497
498struct rt_rtmp_mgmt_ring {
499 struct rt_rtmp_dmacb Cell[MGMT_RING_SIZE];
500 u32 TxCpuIdx;
501 u32 TxDmaIdx;
502 u32 TxSwFreeIdx;
503};
504
505
506
507
508struct rt_counter_802_3 {
509
510 unsigned long GoodTransmits;
511 unsigned long GoodReceives;
512 unsigned long TxErrors;
513 unsigned long RxErrors;
514 unsigned long RxNoBuffer;
515
516
517 unsigned long RcvAlignmentErrors;
518 unsigned long OneCollision;
519 unsigned long MoreCollisions;
520
521};
522
523struct rt_counter_802_11 {
524 unsigned long Length;
525 LARGE_INTEGER LastTransmittedFragmentCount;
526 LARGE_INTEGER TransmittedFragmentCount;
527 LARGE_INTEGER MulticastTransmittedFrameCount;
528 LARGE_INTEGER FailedCount;
529 LARGE_INTEGER RetryCount;
530 LARGE_INTEGER MultipleRetryCount;
531 LARGE_INTEGER RTSSuccessCount;
532 LARGE_INTEGER RTSFailureCount;
533 LARGE_INTEGER ACKFailureCount;
534 LARGE_INTEGER FrameDuplicateCount;
535 LARGE_INTEGER ReceivedFragmentCount;
536 LARGE_INTEGER MulticastReceivedFrameCount;
537 LARGE_INTEGER FCSErrorCount;
538};
539
540struct rt_counter_ralink {
541 unsigned long TransmittedByteCount;
542 unsigned long ReceivedByteCount;
543 unsigned long BeenDisassociatedCount;
544 unsigned long BadCQIAutoRecoveryCount;
545 unsigned long PoorCQIRoamingCount;
546 unsigned long MgmtRingFullCount;
547 unsigned long RxCountSinceLastNULL;
548 unsigned long RxCount;
549 unsigned long RxRingErrCount;
550 unsigned long KickTxCount;
551 unsigned long TxRingErrCount;
552 LARGE_INTEGER RealFcsErrCount;
553 unsigned long PendingNdisPacketCount;
554
555 unsigned long OneSecOsTxCount[NUM_OF_TX_RING];
556 unsigned long OneSecDmaDoneCount[NUM_OF_TX_RING];
557 u32 OneSecTxDoneCount;
558 unsigned long OneSecRxCount;
559 u32 OneSecTxAggregationCount;
560 u32 OneSecRxAggregationCount;
561 u32 OneSecReceivedByteCount;
562 u32 OneSecFrameDuplicateCount;
563
564 u32 OneSecTransmittedByteCount;
565 u32 OneSecTxNoRetryOkCount;
566 u32 OneSecTxRetryOkCount;
567 u32 OneSecTxFailCount;
568 u32 OneSecFalseCCACnt;
569 u32 OneSecRxOkCnt;
570 u32 OneSecRxOkDataCnt;
571 u32 OneSecRxFcsErrCnt;
572 u32 OneSecBeaconSentCnt;
573 u32 LastOneSecTotalTxCount;
574 u32 LastOneSecRxOkDataCnt;
575 unsigned long DuplicateRcv;
576 unsigned long TxAggCount;
577 unsigned long TxNonAggCount;
578 unsigned long TxAgg1MPDUCount;
579 unsigned long TxAgg2MPDUCount;
580 unsigned long TxAgg3MPDUCount;
581 unsigned long TxAgg4MPDUCount;
582 unsigned long TxAgg5MPDUCount;
583 unsigned long TxAgg6MPDUCount;
584 unsigned long TxAgg7MPDUCount;
585 unsigned long TxAgg8MPDUCount;
586 unsigned long TxAgg9MPDUCount;
587 unsigned long TxAgg10MPDUCount;
588 unsigned long TxAgg11MPDUCount;
589 unsigned long TxAgg12MPDUCount;
590 unsigned long TxAgg13MPDUCount;
591 unsigned long TxAgg14MPDUCount;
592 unsigned long TxAgg15MPDUCount;
593 unsigned long TxAgg16MPDUCount;
594
595 LARGE_INTEGER TransmittedOctetsInAMSDU;
596 LARGE_INTEGER TransmittedAMSDUCount;
597 LARGE_INTEGER ReceivedOctesInAMSDUCount;
598 LARGE_INTEGER ReceivedAMSDUCount;
599 LARGE_INTEGER TransmittedAMPDUCount;
600 LARGE_INTEGER TransmittedMPDUsInAMPDUCount;
601 LARGE_INTEGER TransmittedOctetsInAMPDUCount;
602 LARGE_INTEGER MPDUInReceivedAMPDUCount;
603};
604
605struct rt_counter_drs {
606
607 u16 TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
608 u8 PER[MAX_STEP_OF_TX_RATE_SWITCH];
609 u8 TxRateUpPenalty;
610 unsigned long CurrTxRateStableTime;
611 BOOLEAN fNoisyEnvironment;
612 BOOLEAN fLastSecAccordingRSSI;
613 u8 LastSecTxRateChangeAction;
614 u8 LastTimeTxRateChangeAction;
615 unsigned long LastTxOkCount;
616};
617
618
619
620
621struct rt_cipher_key {
622 u8 Key[16];
623 u8 RxMic[8];
624 u8 TxMic[8];
625 u8 TxTsc[6];
626 u8 RxTsc[6];
627 u8 CipherAlg;
628 u8 KeyLen;
629 u8 BssId[6];
630
631 u8 Type;
632};
633
634
635struct PACKED rt_802_11_wpa_rekey {
636 unsigned long ReKeyMethod;
637 unsigned long ReKeyInterval;
638};
639
640#ifdef RTMP_MAC_USB
641
642
643
644struct rt_set_asic_wcid {
645 unsigned long WCID;
646 unsigned long SetTid;
647 unsigned long DeleteTid;
648 u8 Addr[MAC_ADDR_LEN];
649};
650
651struct rt_set_asic_wcid_attri {
652 unsigned long WCID;
653 unsigned long Cipher;
654 u8 Addr[ETH_LENGTH_OF_ADDRESS];
655};
656
657
658struct rt_add_pairwise_key_entry {
659 u8 MacAddr[6];
660 u16 MacTabMatchWCID;
661 struct rt_cipher_key CipherKey;
662};
663
664
665typedef enum _RT_802_11_CIPHER_SUITE_TYPE {
666 Cipher_Type_NONE,
667 Cipher_Type_WEP40,
668 Cipher_Type_TKIP,
669 Cipher_Type_RSVD,
670 Cipher_Type_CCMP,
671 Cipher_Type_WEP104
672} RT_802_11_CIPHER_SUITE_TYPE, *PRT_802_11_CIPHER_SUITE_TYPE;
673#endif
674
675struct rt_rogueap_entry {
676 u8 Addr[MAC_ADDR_LEN];
677 u8 ErrorCode[2];
678
679
680
681 BOOLEAN Reported;
682};
683
684struct rt_rogueap_table {
685 u8 RogueApNr;
686 struct rt_rogueap_entry RogueApEntry[MAX_LEN_OF_BSS_TABLE];
687};
688
689
690
691
692struct rt_cisco_iapp_content {
693 u16 Length;
694 u8 MessageType;
695 u8 FunctionCode;
696 u8 DestinaionMAC[MAC_ADDR_LEN];
697 u8 SourceMAC[MAC_ADDR_LEN];
698 u16 Tag;
699 u16 TagLength;
700 u8 OUI[4];
701 u8 PreviousAP[MAC_ADDR_LEN];
702 u16 Channel;
703 u16 SsidLen;
704 u8 Ssid[MAX_LEN_OF_SSID];
705 u16 Seconds;
706};
707
708
709
710
711struct rt_fragment_frame {
712 void *pFragPacket;
713 unsigned long RxSize;
714 u16 Sequence;
715 u16 LastFrag;
716 unsigned long Flags;
717};
718
719
720
721
722struct rt_packet_info {
723 u32 PhysicalBufferCount;
724 u32 BufferCount;
725 u32 TotalPacketLength;
726 char *pFirstBuffer;
727};
728
729
730
731
732struct rt_arcfourcontext {
733 u32 X;
734 u32 Y;
735 u8 STATE[256];
736};
737
738
739
740
741struct rt_tkip_key_info {
742 u32 nBytesInM;
743 unsigned long IV16;
744 unsigned long IV32;
745 unsigned long K0;
746 unsigned long K1;
747 unsigned long L;
748 unsigned long R;
749 unsigned long M;
750 u8 RC4KEY[16];
751 u8 MIC[8];
752};
753
754
755
756
757struct rt_private {
758 u32 SystemResetCnt;
759 u32 TxRingFullCnt;
760 u32 PhyRxErrCnt;
761
762 u32 FCSCRC32;
763 struct rt_arcfourcontext WEPCONTEXT;
764
765 struct rt_tkip_key_info Tx;
766 struct rt_tkip_key_info Rx;
767};
768
769
770
771
772
773struct rt_bbp_r66_tuning {
774 BOOLEAN bEnable;
775 u16 FalseCcaLowerThreshold;
776 u16 FalseCcaUpperThreshold;
777 u8 R66Delta;
778 u8 R66CurrentValue;
779 BOOLEAN R66LowerUpperSelect;
780};
781
782
783struct rt_channel_tx_power {
784 u16 RemainingTimeForUse;
785 u8 Channel;
786 char Power;
787 char Power2;
788 u8 MaxTxPwr;
789 u8 DfsReq;
790};
791
792
793struct rt_channel_11j_tx_power {
794 u8 Channel;
795 u8 BW;
796 char Power;
797 char Power2;
798 u16 RemainingTimeForUse;
799};
800
801struct rt_soft_rx_ant_diversity {
802 u8 EvaluatePeriod;
803 u8 EvaluateStableCnt;
804 u8 Pair1PrimaryRxAnt;
805 u8 Pair1SecondaryRxAnt;
806 u8 Pair2PrimaryRxAnt;
807 u8 Pair2SecondaryRxAnt;
808 short Pair1AvgRssi[2];
809 short Pair2AvgRssi[2];
810 short Pair1LastAvgRssi;
811 short Pair2LastAvgRssi;
812 unsigned long RcvPktNumWhenEvaluate;
813 BOOLEAN FirstPktArrivedWhenEvaluate;
814 struct rt_ralink_timer RxAntDiversityTimer;
815};
816
817
818
819
820struct rt_radar_detect {
821
822 u8 CSCount;
823 u8 CSPeriod;
824 u8 RDCount;
825 u8 RDMode;
826 u8 RDDurRegion;
827 u8 BBPR16;
828 u8 BBPR17;
829 u8 BBPR18;
830 u8 BBPR21;
831 u8 BBPR22;
832 u8 BBPR64;
833 unsigned long InServiceMonitorCount;
834 u8 DfsSessionTime;
835 BOOLEAN bFastDfs;
836 u8 ChMovingTime;
837 u8 LongPulseRadarTh;
838};
839
840typedef enum _ABGBAND_STATE_ {
841 UNKNOWN_BAND,
842 BG_BAND,
843 A_BAND,
844} ABGBAND_STATE;
845
846#ifdef RTMP_MAC_PCI
847
848typedef union _PS_CONTROL {
849 struct {
850 unsigned long EnablePSinIdle:1;
851 unsigned long EnableNewPS:1;
852 unsigned long rt30xxPowerMode:2;
853 unsigned long rt30xxFollowHostASPM:1;
854 unsigned long rt30xxForceASPMTest:1;
855 unsigned long rsv:26;
856 } field;
857 unsigned long word;
858} PS_CONTROL, *PPS_CONTROL;
859#endif
860
861
862
863
864struct rt_mlme {
865
866 struct rt_state_machine CntlMachine;
867 struct rt_state_machine AssocMachine;
868 struct rt_state_machine AuthMachine;
869 struct rt_state_machine AuthRspMachine;
870 struct rt_state_machine SyncMachine;
871 struct rt_state_machine WpaPskMachine;
872 struct rt_state_machine LeapMachine;
873 STATE_MACHINE_FUNC AssocFunc[ASSOC_FUNC_SIZE];
874 STATE_MACHINE_FUNC AuthFunc[AUTH_FUNC_SIZE];
875 STATE_MACHINE_FUNC AuthRspFunc[AUTH_RSP_FUNC_SIZE];
876 STATE_MACHINE_FUNC SyncFunc[SYNC_FUNC_SIZE];
877 STATE_MACHINE_FUNC ActFunc[ACT_FUNC_SIZE];
878
879 struct rt_state_machine ActMachine;
880
881
882 struct rt_state_machine WpaMachine;
883 STATE_MACHINE_FUNC WpaFunc[WPA_FUNC_SIZE];
884
885 unsigned long ChannelQuality;
886 unsigned long Now32;
887 unsigned long LastSendNULLpsmTime;
888
889 BOOLEAN bRunning;
890 spinlock_t TaskLock;
891 struct rt_mlme_queue Queue;
892
893 u32 ShiftReg;
894
895 struct rt_ralink_timer PeriodicTimer;
896 struct rt_ralink_timer APSDPeriodicTimer;
897 struct rt_ralink_timer LinkDownTimer;
898 struct rt_ralink_timer LinkUpTimer;
899#ifdef RTMP_MAC_PCI
900 u8 bPsPollTimerRunning;
901 struct rt_ralink_timer PsPollTimer;
902 struct rt_ralink_timer RadioOnOffTimer;
903#endif
904 unsigned long PeriodicRound;
905 unsigned long OneSecPeriodicRound;
906
907 u8 RealRxPath;
908 BOOLEAN bLowThroughput;
909 BOOLEAN bEnableAutoAntennaCheck;
910 struct rt_ralink_timer RxAntEvalTimer;
911
912#ifdef RT30xx
913 u8 CaliBW40RfR24;
914 u8 CaliBW20RfR24;
915#endif
916
917#ifdef RTMP_MAC_USB
918 struct rt_ralink_timer AutoWakeupTimer;
919 BOOLEAN AutoWakeupTimerRunning;
920#endif
921};
922
923
924
925
926struct reordering_mpdu {
927 struct reordering_mpdu *next;
928 void *pPacket;
929 int Sequence;
930 BOOLEAN bAMSDU;
931};
932
933struct reordering_list {
934 struct reordering_mpdu *next;
935 int qlen;
936};
937
938struct reordering_mpdu_pool {
939 void *mem;
940 spinlock_t lock;
941 struct reordering_list freelist;
942};
943
944typedef enum _REC_BLOCKACK_STATUS {
945 Recipient_NONE = 0,
946 Recipient_USED,
947 Recipient_HandleRes,
948 Recipient_Accept
949} REC_BLOCKACK_STATUS, *PREC_BLOCKACK_STATUS;
950
951typedef enum _ORI_BLOCKACK_STATUS {
952 Originator_NONE = 0,
953 Originator_USED,
954 Originator_WaitRes,
955 Originator_Done
956} ORI_BLOCKACK_STATUS, *PORI_BLOCKACK_STATUS;
957
958struct rt_ba_ori_entry {
959 u8 Wcid;
960 u8 TID;
961 u8 BAWinSize;
962 u8 Token;
963
964 u16 Sequence;
965 u16 TimeOutValue;
966 ORI_BLOCKACK_STATUS ORI_BA_Status;
967 struct rt_ralink_timer ORIBATimer;
968 void *pAdapter;
969};
970
971struct rt_ba_rec_entry {
972 u8 Wcid;
973 u8 TID;
974 u8 BAWinSize;
975
976
977 u16 LastIndSeq;
978
979 u16 TimeOutValue;
980 struct rt_ralink_timer RECBATimer;
981 unsigned long LastIndSeqAtTimer;
982 unsigned long nDropPacket;
983 unsigned long rcvSeq;
984 REC_BLOCKACK_STATUS REC_BA_Status;
985
986
987
988 spinlock_t RxReRingLock;
989
990 void *pAdapter;
991 struct reordering_list list;
992};
993
994struct rt_ba_table {
995 unsigned long numAsRecipient;
996 unsigned long numAsOriginator;
997 unsigned long numDoneOriginator;
998 struct rt_ba_ori_entry BAOriEntry[MAX_LEN_OF_BA_ORI_TABLE];
999 struct rt_ba_rec_entry BARecEntry[MAX_LEN_OF_BA_REC_TABLE];
1000};
1001
1002
1003struct PACKED rt_oid_ba_rec_entry {
1004 u8 MACAddr[MAC_ADDR_LEN];
1005 u8 BaBitmap;
1006 u8 rsv;
1007 u8 BufSize[8];
1008 REC_BLOCKACK_STATUS REC_BA_Status[8];
1009};
1010
1011
1012struct PACKED rt_oid_ba_ori_entry {
1013 u8 MACAddr[MAC_ADDR_LEN];
1014 u8 BaBitmap;
1015 u8 rsv;
1016 u8 BufSize[8];
1017 ORI_BLOCKACK_STATUS ORI_BA_Status[8];
1018};
1019
1020struct rt_queryba_table {
1021 struct rt_oid_ba_ori_entry BAOriEntry[32];
1022 struct rt_oid_ba_rec_entry BARecEntry[32];
1023 u8 OriNum;
1024 u8 RecNum;
1025};
1026
1027typedef union _BACAP_STRUC {
1028 struct {
1029 u32 RxBAWinLimit:8;
1030 u32 TxBAWinLimit:8;
1031 u32 AutoBA:1;
1032 u32 Policy:2;
1033 u32 MpduDensity:3;
1034 u32 AmsduEnable:1;
1035 u32 AmsduSize:1;
1036 u32 MMPSmode:2;
1037 u32 bHtAdhoc:1;
1038 u32 b2040CoexistScanSup:1;
1039 u32: 4;
1040 } field;
1041 u32 word;
1042} BACAP_STRUC, *PBACAP_STRUC;
1043
1044struct rt_oid_add_ba_entry {
1045 BOOLEAN IsRecipient;
1046 u8 MACAddr[MAC_ADDR_LEN];
1047 u8 TID;
1048 u8 nMSDU;
1049 u16 TimeOut;
1050 BOOLEAN bAllTid;
1051};
1052
1053#define IS_HT_STA(_pMacEntry) \
1054 (_pMacEntry->MaxHTPhyMode.field.MODE >= MODE_HTMIX)
1055
1056#define IS_HT_RATE(_pMacEntry) \
1057 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1058
1059#define PEER_IS_HT_RATE(_pMacEntry) \
1060 (_pMacEntry->HTPhyMode.field.MODE >= MODE_HTMIX)
1061
1062
1063struct rt_iot {
1064 u8 Threshold[2];
1065 u8 ReorderTimeOutNum[MAX_LEN_OF_BA_REC_TABLE];
1066 u8 RefreshNum[MAX_LEN_OF_BA_REC_TABLE];
1067 unsigned long OneSecInWindowCount;
1068 unsigned long OneSecFrameDuplicateCount;
1069 unsigned long OneSecOutWindowCount;
1070 u8 DelOriAct;
1071 u8 DelRecAct;
1072 u8 RTSShortProt;
1073 u8 RTSLongProt;
1074 BOOLEAN bRTSLongProtOn;
1075 BOOLEAN bLastAtheros;
1076 BOOLEAN bCurrentAtheros;
1077 BOOLEAN bNowAtherosBurstOn;
1078 BOOLEAN bNextDisableRxBA;
1079 BOOLEAN bToggle;
1080};
1081
1082
1083typedef union _REG_TRANSMIT_SETTING {
1084 struct {
1085
1086
1087 u32 rsv0:10;
1088 u32 TxBF:1;
1089 u32 BW:1;
1090 u32 ShortGI:1;
1091 u32 STBC:1;
1092 u32 TRANSNO:2;
1093 u32 HTMODE:1;
1094 u32 EXTCHA:2;
1095 u32 rsv:13;
1096 } field;
1097 u32 word;
1098} REG_TRANSMIT_SETTING, *PREG_TRANSMIT_SETTING;
1099
1100typedef union _DESIRED_TRANSMIT_SETTING {
1101 struct {
1102 u16 MCS:7;
1103 u16 PhyMode:4;
1104 u16 FixedTxMode:2;
1105 u16 rsv:3;
1106 } field;
1107 u16 word;
1108} DESIRED_TRANSMIT_SETTING, *PDESIRED_TRANSMIT_SETTING;
1109
1110#ifdef RTMP_MAC_USB
1111
1112
1113
1114#define BEACON_BITMAP_MASK 0xff
1115struct rt_beacon_sync {
1116 u8 BeaconBuf[HW_BEACON_MAX_COUNT][HW_BEACON_OFFSET];
1117 u8 BeaconTxWI[HW_BEACON_MAX_COUNT][TXWI_SIZE];
1118 unsigned long TimIELocationInBeacon[HW_BEACON_MAX_COUNT];
1119 unsigned long CapabilityInfoLocationInBeacon[HW_BEACON_MAX_COUNT];
1120 BOOLEAN EnableBeacon;
1121 u8 BeaconBitMap;
1122 u8 DtimBitOn;
1123};
1124#endif
1125
1126
1127
1128
1129#define WLAN_MAX_NUM_OF_TIM ((MAX_LEN_OF_MAC_TABLE >> 3) + 1)
1130#define WLAN_CT_TIM_BCMC_OFFSET 0
1131
1132
1133#define WLAN_MR_TIM_BCMC_CLEAR(apidx) \
1134 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] &= ~BIT8[0];
1135
1136
1137#define WLAN_MR_TIM_BCMC_SET(apidx) \
1138 pAd->ApCfg.MBSSID[apidx].TimBitmaps[WLAN_CT_TIM_BCMC_OFFSET] |= BIT8[0];
1139
1140
1141#define WLAN_MR_TIM_BIT_CLEAR(ad_p, apidx, wcid) \
1142 { u8 tim_offset = wcid >> 3; \
1143 u8 bit_offset = wcid & 0x7; \
1144 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] &= (~BIT8[bit_offset]); }
1145
1146
1147#define WLAN_MR_TIM_BIT_SET(ad_p, apidx, wcid) \
1148 { u8 tim_offset = wcid >> 3; \
1149 u8 bit_offset = wcid & 0x7; \
1150 ad_p->ApCfg.MBSSID[apidx].TimBitmaps[tim_offset] |= BIT8[bit_offset]; }
1151
1152
1153struct rt_common_config {
1154
1155 BOOLEAN bCountryFlag;
1156 u8 CountryCode[3];
1157 u8 Geography;
1158 u8 CountryRegion;
1159 u8 CountryRegionForABand;
1160 u8 PhyMode;
1161 u16 Dsifs;
1162 unsigned long PacketFilter;
1163 u8 RegulatoryClass;
1164
1165 char Ssid[MAX_LEN_OF_SSID];
1166 u8 SsidLen;
1167 u8 LastSsidLen;
1168 char LastSsid[MAX_LEN_OF_SSID];
1169 u8 LastBssid[MAC_ADDR_LEN];
1170
1171 u8 Bssid[MAC_ADDR_LEN];
1172 u16 BeaconPeriod;
1173 u8 Channel;
1174 u8 CentralChannel;
1175
1176 u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1177 u8 SupRateLen;
1178 u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1179 u8 ExtRateLen;
1180 u8 DesireRate[MAX_LEN_OF_SUPPORTED_RATES];
1181 u8 MaxDesiredRate;
1182 u8 ExpectedACKRate[MAX_LEN_OF_SUPPORTED_RATES];
1183
1184 unsigned long BasicRateBitmap;
1185
1186 BOOLEAN bAPSDCapable;
1187 BOOLEAN bInServicePeriod;
1188 BOOLEAN bAPSDAC_BE;
1189 BOOLEAN bAPSDAC_BK;
1190 BOOLEAN bAPSDAC_VI;
1191 BOOLEAN bAPSDAC_VO;
1192
1193
1194
1195
1196 BOOLEAN bACMAPSDBackup[4];
1197 BOOLEAN bACMAPSDTr[4];
1198
1199 BOOLEAN bNeedSendTriggerFrame;
1200 BOOLEAN bAPSDForcePowerSave;
1201 unsigned long TriggerTimerCount;
1202 u8 MaxSPLength;
1203 u8 BBPCurrentBW;
1204
1205
1206 REG_TRANSMIT_SETTING RegTransmitSetting;
1207
1208 u8 TxRate;
1209 u8 MaxTxRate;
1210 u8 TxRateIndex;
1211 u8 TxRateTableSize;
1212
1213 u8 MinTxRate;
1214 u8 RtsRate;
1215 HTTRANSMIT_SETTING MlmeTransmit;
1216 u8 MlmeRate;
1217 u8 BasicMlmeRate;
1218
1219 u16 RtsThreshold;
1220 u16 FragmentThreshold;
1221
1222 u8 TxPower;
1223 unsigned long TxPowerPercentage;
1224 unsigned long TxPowerDefault;
1225 u8 PwrConstraint;
1226
1227 BACAP_STRUC BACapability;
1228 BACAP_STRUC REGBACapability;
1229
1230 struct rt_iot IOTestParm;
1231 unsigned long TxPreamble;
1232 BOOLEAN bUseZeroToDisableFragment;
1233 unsigned long UseBGProtection;
1234 BOOLEAN bUseShortSlotTime;
1235 BOOLEAN bEnableTxBurst;
1236 BOOLEAN bAggregationCapable;
1237 BOOLEAN bPiggyBackCapable;
1238 BOOLEAN bIEEE80211H;
1239 unsigned long DisableOLBCDetect;
1240
1241 BOOLEAN bRdg;
1242
1243 BOOLEAN bWmmCapable;
1244 struct rt_qos_capability_parm APQosCapability;
1245 struct rt_edca_parm APEdcaParm;
1246 struct rt_qbss_load_parm APQbssLoad;
1247 u8 AckPolicy[4];
1248 BOOLEAN bDLSCapable;
1249
1250
1251
1252
1253 unsigned long OpStatusFlags;
1254
1255 BOOLEAN NdisRadioStateOff;
1256 ABGBAND_STATE BandState;
1257
1258
1259 struct rt_radar_detect RadarDetect;
1260
1261
1262 u8 BASize;
1263
1264 struct rt_ht_capability DesiredHtPhy;
1265 struct rt_ht_capability_ie HtCapability;
1266 struct rt_add_ht_info_ie AddHTInfo;
1267
1268
1269 struct rt_new_ext_chan_ie NewExtChanOffset;
1270
1271 BOOLEAN bHTProtect;
1272 BOOLEAN bMIMOPSEnable;
1273 BOOLEAN bBADecline;
1274
1275 BOOLEAN bGreenAPEnable;
1276
1277 BOOLEAN bDisableReordering;
1278 BOOLEAN bForty_Mhz_Intolerant;
1279 BOOLEAN bExtChannelSwitchAnnouncement;
1280 BOOLEAN bRcvBSSWidthTriggerEvents;
1281 unsigned long LastRcvBSSWidthTriggerEventsTime;
1282
1283 u8 TxBASize;
1284
1285
1286 BOOLEAN bWirelessEvent;
1287 BOOLEAN bWiFiTest;
1288
1289
1290 u8 TxStream;
1291 u8 RxStream;
1292
1293 BOOLEAN bHardwareRadio;
1294
1295#ifdef RTMP_MAC_USB
1296 BOOLEAN bMultipleIRP;
1297 u8 NumOfBulkInIRP;
1298 struct rt_ht_capability SupportedHtPhy;
1299 unsigned long MaxPktOneTxBulk;
1300 u8 TxBulkFactor;
1301 u8 RxBulkFactor;
1302
1303 BOOLEAN IsUpdateBeacon;
1304 struct rt_beacon_sync *pBeaconSync;
1305 struct rt_ralink_timer BeaconUpdateTimer;
1306 u32 BeaconAdjust;
1307 u32 BeaconFactor;
1308 u32 BeaconRemain;
1309#endif
1310
1311 spinlock_t MeasureReqTabLock;
1312 struct rt_measure_req_tab *pMeasureReqTab;
1313
1314 spinlock_t TpcReqTabLock;
1315 struct rt_tpc_req_tab *pTpcReqTab;
1316
1317 BOOLEAN PSPXlink;
1318
1319#if defined(RT305x) || defined(RT30xx)
1320
1321 u8 HighPowerPatchDisabled;
1322#endif
1323
1324 BOOLEAN HT_DisallowTKIP;
1325};
1326
1327
1328
1329struct rt_sta_admin_config {
1330
1331
1332
1333
1334
1335
1336 u8 BssType;
1337 u16 AtimWin;
1338
1339
1340
1341
1342
1343
1344 u8 RssiTrigger;
1345 u8 RssiTriggerMode;
1346 u16 DefaultListenCount;
1347 unsigned long WindowsPowerMode;
1348 unsigned long WindowsBatteryPowerMode;
1349 BOOLEAN bWindowsACCAMEnable;
1350 BOOLEAN bAutoReconnect;
1351 unsigned long WindowsPowerProfile;
1352
1353
1354 u16 Psm;
1355 u16 DisassocReason;
1356 u8 DisassocSta[MAC_ADDR_LEN];
1357 u16 DeauthReason;
1358 u8 DeauthSta[MAC_ADDR_LEN];
1359 u16 AuthFailReason;
1360 u8 AuthFailSta[MAC_ADDR_LEN];
1361
1362 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1363 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1364 NDIS_802_11_WEP_STATUS WepStatus;
1365 NDIS_802_11_WEP_STATUS OrigWepStatus;
1366
1367
1368 NDIS_802_11_ENCRYPTION_STATUS GroupCipher;
1369 NDIS_802_11_ENCRYPTION_STATUS PairCipher;
1370 BOOLEAN bMixCipher;
1371 u16 RsnCapability;
1372
1373 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1374
1375 u8 WpaPassPhrase[64];
1376 u32 WpaPassPhraseLen;
1377 u8 PMK[32];
1378 u8 PTK[64];
1379 u8 GTK[32];
1380 struct rt_bssid_info SavedPMK[PMKID_NO];
1381 u32 SavedPMKNum;
1382
1383 u8 DefaultKeyId;
1384
1385
1386 u8 PortSecured;
1387
1388
1389 unsigned long LastMicErrorTime;
1390 unsigned long MicErrCnt;
1391 BOOLEAN bBlockAssoc;
1392
1393 WPA_STATE WpaState;
1394 u8 ReplayCounter[8];
1395 u8 ANonce[32];
1396 u8 SNonce[32];
1397
1398 u8 LastSNR0;
1399 u8 LastSNR1;
1400 struct rt_rssi_sample RssiSample;
1401 unsigned long NumOfAvgRssiSample;
1402
1403 unsigned long LastBeaconRxTime;
1404 unsigned long Last11bBeaconRxTime;
1405 unsigned long Last11gBeaconRxTime;
1406 unsigned long Last20NBeaconRxTime;
1407
1408 unsigned long LastScanTime;
1409 unsigned long ScanCnt;
1410 BOOLEAN bSwRadio;
1411 BOOLEAN bHwRadio;
1412 BOOLEAN bRadio;
1413 BOOLEAN bHardwareRadio;
1414 BOOLEAN bShowHiddenSSID;
1415
1416
1417
1418 struct rt_ndis_802_11_association_information AssocInfo;
1419 u16 ReqVarIELen;
1420 u8 ReqVarIEs[MAX_VIE_LEN];
1421 u16 ResVarIELen;
1422 u8 ResVarIEs[MAX_VIE_LEN];
1423
1424 u8 RSNIE_Len;
1425 u8 RSN_IE[MAX_LEN_OF_RSNIE];
1426
1427 unsigned long CLBusyBytes;
1428 u16 RPIDensity[8];
1429
1430 u8 RMReqCnt;
1431 u8 CurrentRMReqIdx;
1432 BOOLEAN ParallelReq;
1433
1434 u16 ParallelDuration;
1435 u8 ParallelChannel;
1436 u16 IAPPToken;
1437
1438 u8 NHFactor;
1439 u8 CLFactor;
1440
1441 struct rt_ralink_timer StaQuickResponeForRateUpTimer;
1442 BOOLEAN StaQuickResponeForRateUpTimerRunning;
1443
1444 u8 DtimCount;
1445 u8 DtimPeriod;
1446
1447
1448
1449 BOOLEAN WhqlTest;
1450
1451
1452 struct rt_ralink_timer WpaDisassocAndBlockAssocTimer;
1453
1454 BOOLEAN bAutoRoaming;
1455 char dBmToRoam;
1456
1457 BOOLEAN IEEE8021X;
1458 BOOLEAN IEEE8021x_required_keys;
1459 struct rt_cipher_key DesireSharedKey[4];
1460 u8 DesireSharedKeyId;
1461
1462
1463
1464
1465 u8 WpaSupplicantUP;
1466 u8 WpaSupplicantScanCount;
1467 BOOLEAN bRSN_IE_FromWpaSupplicant;
1468
1469 char dev_name[16];
1470 u16 OriDevType;
1471
1472 BOOLEAN bTGnWifiTest;
1473 BOOLEAN bScanReqIsFromWebUI;
1474
1475 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
1476 DESIRED_TRANSMIT_SETTING DesiredTransmitSetting;
1477 struct rt_ht_phy_info DesiredHtPhyInfo;
1478 BOOLEAN bAutoTxRateSwitch;
1479
1480#ifdef RTMP_MAC_PCI
1481 u8 BBPR3;
1482
1483
1484
1485 PS_CONTROL PSControl;
1486#endif
1487
1488 BOOLEAN bAutoConnectByBssid;
1489 unsigned long BeaconLostTime;
1490 BOOLEAN bForceTxBurst;
1491};
1492
1493
1494
1495
1496
1497
1498
1499struct rt_sta_active_config {
1500 u16 Aid;
1501 u16 AtimWin;
1502 u16 CapabilityInfo;
1503 u16 CfpMaxDuration;
1504 u16 CfpPeriod;
1505
1506
1507
1508 u8 SupRate[MAX_LEN_OF_SUPPORTED_RATES];
1509 u8 ExtRate[MAX_LEN_OF_SUPPORTED_RATES];
1510 u8 SupRateLen;
1511 u8 ExtRateLen;
1512
1513 struct rt_ht_phy_info SupportedPhyInfo;
1514 struct rt_ht_capability SupportedHtPhy;
1515};
1516
1517struct rt_mac_table_entry;
1518
1519struct rt_mac_table_entry {
1520
1521 BOOLEAN ValidAsCLI;
1522 BOOLEAN ValidAsWDS;
1523 BOOLEAN ValidAsApCli;
1524 BOOLEAN ValidAsMesh;
1525 BOOLEAN ValidAsDls;
1526 BOOLEAN isCached;
1527 BOOLEAN bIAmBadAtheros;
1528
1529 u8 EnqueueEapolStartTimerRunning;
1530
1531
1532 u8 CMTimerRunning;
1533 u8 apidx;
1534 u8 RSNIE_Len;
1535 u8 RSN_IE[MAX_LEN_OF_RSNIE];
1536 u8 ANonce[LEN_KEY_DESC_NONCE];
1537 u8 SNonce[LEN_KEY_DESC_NONCE];
1538 u8 R_Counter[LEN_KEY_DESC_REPLAY];
1539 u8 PTK[64];
1540 u8 ReTryCounter;
1541 struct rt_ralink_timer RetryTimer;
1542 struct rt_ralink_timer EnqueueStartForPSKTimer;
1543 NDIS_802_11_AUTHENTICATION_MODE AuthMode;
1544 NDIS_802_11_WEP_STATUS WepStatus;
1545 NDIS_802_11_WEP_STATUS GroupKeyWepStatus;
1546 AP_WPA_STATE WpaState;
1547 GTK_STATE GTKState;
1548 u16 PortSecured;
1549 NDIS_802_11_PRIVACY_FILTER PrivacyFilter;
1550 struct rt_cipher_key PairwiseKey;
1551 void *pAd;
1552 int PMKID_CacheIdx;
1553 u8 PMKID[LEN_PMKID];
1554
1555 u8 Addr[MAC_ADDR_LEN];
1556 u8 PsMode;
1557 SST Sst;
1558 AUTH_STATE AuthState;
1559 BOOLEAN IsReassocSta;
1560 u16 Aid;
1561 u16 CapabilityInfo;
1562 u8 LastRssi;
1563 unsigned long NoDataIdleCount;
1564 u16 StationKeepAliveCount;
1565 unsigned long PsQIdleCount;
1566 struct rt_queue_header PsQueue;
1567
1568 u32 StaConnectTime;
1569
1570 BOOLEAN bSendBAR;
1571 u16 NoBADataCountDown;
1572
1573 u32 CachedBuf[16];
1574 u32 TxBFCount;
1575 u32 FIFOCount;
1576 u32 DebugFIFOCount;
1577 u32 DebugTxCount;
1578 BOOLEAN bDlsInit;
1579
1580
1581
1582
1583 u32 MatchWDSTabIdx;
1584 u8 MaxSupportedRate;
1585 u8 CurrTxRate;
1586 u8 CurrTxRateIndex;
1587
1588 u16 TxQuality[MAX_STEP_OF_TX_RATE_SWITCH];
1589
1590 u32 OneSecTxNoRetryOkCount;
1591 u32 OneSecTxRetryOkCount;
1592 u32 OneSecTxFailCount;
1593 u32 ContinueTxFailCnt;
1594 u32 CurrTxRateStableTime;
1595 u8 TxRateUpPenalty;
1596
1597
1598 BOOLEAN fNoisyEnvironment;
1599 BOOLEAN fLastSecAccordingRSSI;
1600 u8 LastSecTxRateChangeAction;
1601 char LastTimeTxRateChangeAction;
1602 unsigned long LastTxOkCount;
1603 u8 PER[MAX_STEP_OF_TX_RATE_SWITCH];
1604
1605
1606
1607
1608
1609 unsigned long ClientStatusFlags;
1610
1611 HTTRANSMIT_SETTING HTPhyMode, MaxHTPhyMode, MinHTPhyMode;
1612
1613
1614 u16 RXBAbitmap;
1615 u16 TXBAbitmap;
1616 u16 TXAutoBAbitmap;
1617 u16 BADeclineBitmap;
1618 u16 BARecWcidArray[NUM_OF_TID];
1619 u16 BAOriWcidArray[NUM_OF_TID];
1620 u16 BAOriSequence[NUM_OF_TID];
1621
1622
1623 u8 MpduDensity;
1624 u8 MaxRAmpduFactor;
1625 u8 AMsduSize;
1626 u8 MmpsMode;
1627
1628 struct rt_ht_capability_ie HTCapability;
1629
1630 BOOLEAN bAutoTxRateSwitch;
1631
1632 u8 RateLen;
1633 struct rt_mac_table_entry *pNext;
1634 u16 TxSeq[NUM_OF_TID];
1635 u16 NonQosDataSeq;
1636
1637 struct rt_rssi_sample RssiSample;
1638
1639 u32 TXMCSExpected[16];
1640 u32 TXMCSSuccessful[16];
1641 u32 TXMCSFailed[16];
1642 u32 TXMCSAutoFallBack[16][16];
1643
1644 unsigned long LastBeaconRxTime;
1645
1646 unsigned long AssocDeadLine;
1647};
1648
1649struct rt_mac_table {
1650 u16 Size;
1651 struct rt_mac_table_entry *Hash[HASH_TABLE_SIZE];
1652 struct rt_mac_table_entry Content[MAX_LEN_OF_MAC_TABLE];
1653 struct rt_queue_header McastPsQueue;
1654 unsigned long PsQIdleCount;
1655 BOOLEAN fAnyStationInPsm;
1656 BOOLEAN fAnyStationBadAtheros;
1657 BOOLEAN fAnyTxOPForceDisable;
1658 BOOLEAN fAllStationAsRalink;
1659 BOOLEAN fAnyStationIsLegacy;
1660 BOOLEAN fAnyStationNonGF;
1661 BOOLEAN fAnyStation20Only;
1662 BOOLEAN fAnyStationMIMOPSDynamic;
1663 BOOLEAN fAnyBASession;
1664
1665
1666};
1667
1668struct wificonf {
1669 BOOLEAN bShortGI;
1670 BOOLEAN bGreenField;
1671};
1672
1673struct rt_rtmp_dev_info {
1674 u8 chipName[16];
1675 RTMP_INF_TYPE infType;
1676};
1677
1678struct rt_rtmp_chip_op {
1679
1680 int (*eeinit) (struct rt_rtmp_adapter *pAd);
1681 int (*eeread) (struct rt_rtmp_adapter *pAd, u16 offset, u16 *pValue);
1682
1683
1684 int (*loadFirmware) (struct rt_rtmp_adapter *pAd);
1685 int (*eraseFirmware) (struct rt_rtmp_adapter *pAd);
1686 int (*sendCommandToMcu) (struct rt_rtmp_adapter *pAd, u8 cmd, u8 token, u8 arg0, u8 arg1);;
1687
1688
1689 struct rt_reg_pair *pRFRegTable;
1690 void (*AsicRfInit) (struct rt_rtmp_adapter *pAd);
1691 void (*AsicRfTurnOn) (struct rt_rtmp_adapter *pAd);
1692 void (*AsicRfTurnOff) (struct rt_rtmp_adapter *pAd);
1693 void (*AsicReverseRfFromSleepMode) (struct rt_rtmp_adapter *pAd);
1694 void (*AsicHaltAction) (struct rt_rtmp_adapter *pAd);
1695};
1696
1697
1698
1699
1700struct rt_rtmp_adapter {
1701 void *OS_Cookie;
1702 struct net_device *net_dev;
1703 unsigned long VirtualIfCnt;
1704 const struct firmware *firmware;
1705
1706 struct rt_rtmp_chip_op chipOps;
1707 u16 ThisTbttNumToNextWakeUp;
1708
1709#ifdef RTMP_MAC_PCI
1710
1711
1712
1713 u8 *CSRBaseAddress;
1714 unsigned int irq_num;
1715
1716 u16 LnkCtrlBitMask;
1717 u16 RLnkCtrlConfiguration;
1718 u16 RLnkCtrlOffset;
1719 u16 HostLnkCtrlConfiguration;
1720 u16 HostLnkCtrlOffset;
1721 u16 PCIePowerSaveLevel;
1722 unsigned long Rt3xxHostLinkCtrl;
1723 unsigned long Rt3xxRalinkLinkCtrl;
1724 u16 DeviceID;
1725 unsigned long AccessBBPFailCount;
1726 BOOLEAN bPCIclkOff;
1727 BOOLEAN bPCIclkOffDisableTx;
1728
1729 BOOLEAN brt30xxBanMcuCmd;
1730 BOOLEAN b3090ESpecialChip;
1731 unsigned long CheckDmaBusyCount;
1732
1733 u32 int_enable_reg;
1734 u32 int_disable_mask;
1735 u32 int_pending;
1736
1737 struct rt_rtmp_dmabuf TxBufSpace[NUM_OF_TX_RING];
1738 struct rt_rtmp_dmabuf RxDescRing;
1739 struct rt_rtmp_dmabuf TxDescRing[NUM_OF_TX_RING];
1740 struct rt_rtmp_tx_ring TxRing[NUM_OF_TX_RING];
1741#endif
1742
1743 spinlock_t irq_lock;
1744 u8 irq_disabled;
1745
1746#ifdef RTMP_MAC_USB
1747
1748
1749
1750 struct usb_config_descriptor *config;
1751 u32 BulkInEpAddr;
1752 u32 BulkOutEpAddr[6];
1753
1754 u32 NumberOfPipes;
1755 u16 BulkOutMaxPacketSize;
1756 u16 BulkInMaxPacketSize;
1757
1758
1759 long PendingIoCount;
1760 unsigned long BulkFlags;
1761 BOOLEAN bUsbTxBulkAggre;
1762
1763
1764 struct rt_cmdq CmdQ;
1765 spinlock_t CmdQLock;
1766 struct rt_rtmp_os_task cmdQTask;
1767
1768
1769 struct semaphore UsbVendorReq_semaphore;
1770 void *UsbVendorReqBuf;
1771 wait_queue_head_t *wait;
1772#endif
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782 RTMP_INF_TYPE infType;
1783
1784
1785
1786
1787 struct rt_rtmp_os_task mlmeTask;
1788#ifdef RTMP_TIMER_TASK_SUPPORT
1789
1790 struct rt_rtmp_timer_task_queue TimerQ;
1791 spinlock_t TimerQLock;
1792 struct rt_rtmp_os_task timerTask;
1793#endif
1794
1795
1796
1797
1798 BOOLEAN DeQueueRunning[NUM_OF_TX_RING];
1799 spinlock_t DeQueueLock[NUM_OF_TX_RING];
1800
1801#ifdef RTMP_MAC_USB
1802
1803 spinlock_t BulkOutLock[6];
1804 spinlock_t MLMEBulkOutLock;
1805
1806 struct rt_ht_tx_context TxContext[NUM_OF_TX_RING];
1807 spinlock_t TxContextQueueLock[NUM_OF_TX_RING];
1808
1809
1810 u8 NextBulkOutIndex[4];
1811
1812 BOOLEAN BulkOutPending[6];
1813 u8 bulkResetPipeid;
1814 BOOLEAN MgmtBulkPending;
1815 unsigned long bulkResetReq[6];
1816#endif
1817
1818
1819 struct rt_queue_header TxSwQueue[NUM_OF_TX_RING];
1820 spinlock_t TxSwQueueLock[NUM_OF_TX_RING];
1821
1822 struct rt_rtmp_dmabuf MgmtDescRing;
1823 struct rt_rtmp_mgmt_ring MgmtRing;
1824 spinlock_t MgmtRingLock;
1825
1826
1827
1828
1829
1830#ifdef RTMP_MAC_PCI
1831 struct rt_rtmp_rx_ring RxRing;
1832 spinlock_t RxRingLock;
1833#ifdef RT3090
1834 spinlock_t McuCmdLock;
1835#endif
1836#endif
1837#ifdef RTMP_MAC_USB
1838 struct rt_rx_context RxContext[RX_RING_SIZE];
1839 spinlock_t BulkInLock;
1840 u8 PendingRx;
1841 u8 NextRxBulkInIndex;
1842 u8 NextRxBulkInReadIndex;
1843 unsigned long NextRxBulkInPosition;
1844 unsigned long TransferBufferLength;
1845 unsigned long ReadPosition;
1846#endif
1847
1848
1849
1850
1851 u32 MACVersion;
1852
1853
1854
1855
1856 unsigned long EepromVersion;
1857 unsigned long FirmwareVersion;
1858 u16 EEPROMDefaultValue[NUM_EEPROM_BBP_PARMS];
1859 u8 EEPROMAddressNum;
1860 BOOLEAN EepromAccess;
1861 u8 EFuseTag;
1862
1863
1864
1865
1866 u8 BbpWriteLatch[140];
1867 char BbpRssiToDbmDelta;
1868 struct rt_bbp_r66_tuning BbpTuning;
1869
1870
1871
1872
1873 u8 RfIcType;
1874 unsigned long RfFreqOffset;
1875 struct rt_rtmp_rf_regs LatchRfRegs;
1876
1877 EEPROM_ANTENNA_STRUC Antenna;
1878 EEPROM_NIC_CONFIG2_STRUC NicConfig2;
1879
1880
1881
1882 struct rt_soft_rx_ant_diversity RxAnt;
1883
1884 u8 RFProgSeq;
1885 struct rt_channel_tx_power TxPower[MAX_NUM_OF_CHANNELS];
1886 struct rt_channel_tx_power ChannelList[MAX_NUM_OF_CHANNELS];
1887 struct rt_channel_11j_tx_power TxPower11J[MAX_NUM_OF_11JCHANNELS];
1888 struct rt_channel_11j_tx_power ChannelList11J[MAX_NUM_OF_11JCHANNELS];
1889
1890 u8 ChannelListNum;
1891 u8 Bbp94;
1892 BOOLEAN BbpForCCK;
1893 unsigned long Tx20MPwrCfgABand[5];
1894 unsigned long Tx20MPwrCfgGBand[5];
1895 unsigned long Tx40MPwrCfgABand[5];
1896 unsigned long Tx40MPwrCfgGBand[5];
1897
1898 BOOLEAN bAutoTxAgcA;
1899 u8 TssiRefA;
1900 u8 TssiPlusBoundaryA[5];
1901 u8 TssiMinusBoundaryA[5];
1902 u8 TxAgcStepA;
1903 char TxAgcCompensateA;
1904
1905 BOOLEAN bAutoTxAgcG;
1906 u8 TssiRefG;
1907 u8 TssiPlusBoundaryG[5];
1908 u8 TssiMinusBoundaryG[5];
1909 u8 TxAgcStepG;
1910 char TxAgcCompensateG;
1911
1912 char BGRssiOffset0;
1913 char BGRssiOffset1;
1914 char BGRssiOffset2;
1915
1916 char ARssiOffset0;
1917 char ARssiOffset1;
1918 char ARssiOffset2;
1919
1920 char BLNAGain;
1921 char ALNAGain0;
1922 char ALNAGain1;
1923 char ALNAGain2;
1924#ifdef RT30xx
1925
1926 u8 Bbp25;
1927 u8 Bbp26;
1928
1929 u8 TxMixerGain24G;
1930 u8 TxMixerGain5G;
1931#endif
1932
1933
1934
1935 MCU_LEDCS_STRUC LedCntl;
1936 u16 Led1;
1937 u16 Led2;
1938 u16 Led3;
1939 u8 LedIndicatorStrength;
1940 u8 RssiSingalstrengthOffet;
1941 BOOLEAN bLedOnScanning;
1942 u8 LedStatus;
1943
1944
1945
1946
1947
1948 struct rt_txwi BeaconTxWI;
1949 u8 *BeaconBuf;
1950 u16 BeaconOffset[HW_BEACON_MAX_COUNT];
1951
1952
1953 struct rt_pspoll_frame PsPollFrame;
1954 struct rt_header_802_11 NullFrame;
1955
1956#ifdef RTMP_MAC_USB
1957 struct rt_tx_context BeaconContext[BEACON_RING_SIZE];
1958 struct rt_tx_context NullContext;
1959 struct rt_tx_context PsPollContext;
1960 struct rt_tx_context RTSContext;
1961#endif
1962
1963
1964
1965
1966
1967
1968
1969
1970 struct rt_sta_admin_config StaCfg;
1971 struct rt_sta_active_config StaActive;
1972 char nickname[IW_ESSID_MAX_SIZE + 1];
1973 int PreMediaState;
1974
1975
1976
1977 u8 OpMode;
1978
1979 int IndicateMediaState;
1980
1981
1982
1983
1984 BOOLEAN bLocalAdminMAC;
1985 u8 PermanentAddress[MAC_ADDR_LEN];
1986 u8 CurrentAddress[MAC_ADDR_LEN];
1987
1988
1989
1990
1991 struct rt_common_config CommonCfg;
1992 struct rt_mlme Mlme;
1993
1994
1995 struct rt_mlme_aux MlmeAux;
1996 struct rt_bss_table ScanTab;
1997
1998
1999 struct rt_mac_table MacTab;
2000 spinlock_t MacTabLock;
2001
2002 struct rt_ba_table BATable;
2003
2004 spinlock_t BATabLock;
2005 struct rt_ralink_timer RECBATimer;
2006
2007
2008 struct rt_cipher_key SharedKey[MAX_MBSSID_NUM][4];
2009
2010
2011 struct rt_fragment_frame FragFrame;
2012
2013
2014 struct rt_counter_802_3 Counters8023;
2015 struct rt_counter_802_11 WlanCounters;
2016 struct rt_counter_ralink RalinkCounters;
2017 struct rt_counter_drs DrsCounters;
2018 struct rt_private PrivateInfo;
2019
2020
2021 unsigned long Flags;
2022 unsigned long PSFlags;
2023
2024
2025 u16 Sequence;
2026
2027
2028
2029 unsigned long LinkDownTime;
2030
2031 unsigned long LastRxRate;
2032 unsigned long LastTxRate;
2033
2034 BOOLEAN bConfigChanged;
2035
2036
2037 unsigned long ExtraInfo;
2038 unsigned long SystemErrorBitmap;
2039
2040
2041 unsigned long MacIcVersion;
2042
2043
2044
2045
2046
2047 struct rt_802_11_event_table EventTab;
2048
2049 BOOLEAN HTCEnable;
2050
2051
2052
2053
2054#ifdef RTMP_MAC_USB
2055 unsigned long BulkOutDataOneSecCount;
2056 unsigned long BulkInDataOneSecCount;
2057 unsigned long BulkLastOneSecCount;
2058 unsigned long watchDogRxCnt;
2059 unsigned long watchDogRxOverFlowCnt;
2060 unsigned long watchDogTxPendingCnt[NUM_OF_TX_RING];
2061 int TransferedLength[NUM_OF_TX_RING];
2062#endif
2063
2064 BOOLEAN bUpdateBcnCntDone;
2065 unsigned long watchDogMacDeadlock;
2066
2067
2068
2069
2070 BOOLEAN bBanAllBaSetup;
2071 BOOLEAN bPromiscuous;
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082 BOOLEAN bLinkAdapt;
2083 BOOLEAN bForcePrintTX;
2084 BOOLEAN bForcePrintRX;
2085
2086 BOOLEAN bStaFifoTest;
2087 BOOLEAN bProtectionTest;
2088 BOOLEAN bBroadComHT;
2089
2090 unsigned long BulkOutReq;
2091 unsigned long BulkOutComplete;
2092 unsigned long BulkOutCompleteOther;
2093 unsigned long BulkOutCompleteCancel;
2094 unsigned long BulkInReq;
2095 unsigned long BulkInComplete;
2096 unsigned long BulkInCompleteFail;
2097
2098
2099 struct wificonf WIFItestbed;
2100
2101 struct reordering_mpdu_pool mpdu_blk_pool;
2102
2103 unsigned long OneSecondnonBEpackets;
2104
2105#ifdef LINUX
2106 struct iw_statistics iw_stats;
2107
2108 struct net_device_stats stats;
2109#endif
2110
2111 unsigned long TbttTickCount;
2112#ifdef PCI_MSI_SUPPORT
2113 BOOLEAN HaveMsi;
2114#endif
2115
2116 u8 is_on;
2117
2118#define TIME_BASE (1000000/OS_HZ)
2119#define TIME_ONE_SECOND (1000000/TIME_BASE)
2120 u8 flg_be_adjust;
2121 unsigned long be_adjust_last_time;
2122
2123 u8 FlgCtsEnabled;
2124 u8 PM_FlgSuspend;
2125
2126#ifdef RT30xx
2127#ifdef RTMP_EFUSE_SUPPORT
2128 BOOLEAN bUseEfuse;
2129 u8 EEPROMImage[1024];
2130#endif
2131#endif
2132};
2133
2134#define DELAYINTMASK 0x0003fffb
2135#define INTMASK 0x0003fffb
2136#define IndMask 0x0003fffc
2137#define RxINT 0x00000005
2138#define TxDataInt 0x000000fa
2139#define TxMgmtInt 0x00000102
2140#define TxCoherent 0x00020000
2141#define RxCoherent 0x00010000
2142#define McuCommand 0x00000200
2143#define PreTBTTInt 0x00001000
2144#define TBTTInt 0x00000800
2145#define GPTimeOutInt 0x00008000
2146#define AutoWakeupInt 0x00004000
2147#define FifoStaFullInt 0x00002000
2148
2149
2150
2151
2152struct rt_rx_blk {
2153 RT28XX_RXD_STRUC RxD;
2154 struct rt_rxwi *pRxWI;
2155 struct rt_header_802_11 *pHeader;
2156 void *pRxPacket;
2157 u8 *pData;
2158 u16 DataSize;
2159 u16 Flags;
2160 u8 UserPriority;
2161};
2162
2163#define RX_BLK_SET_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags |= _flag)
2164#define RX_BLK_TEST_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags & _flag)
2165#define RX_BLK_CLEAR_FLAG(_pRxBlk, _flag) (_pRxBlk->Flags &= ~(_flag))
2166
2167#define fRX_WDS 0x0001
2168#define fRX_AMSDU 0x0002
2169#define fRX_ARALINK 0x0004
2170#define fRX_HTC 0x0008
2171#define fRX_PAD 0x0010
2172#define fRX_AMPDU 0x0020
2173#define fRX_QOS 0x0040
2174#define fRX_INFRA 0x0080
2175#define fRX_EAP 0x0100
2176#define fRX_MESH 0x0200
2177#define fRX_APCLI 0x0400
2178#define fRX_DLS 0x0800
2179#define fRX_WPI 0x1000
2180
2181#define LENGTH_AMSDU_SUBFRAMEHEAD 14
2182#define LENGTH_ARALINK_SUBFRAMEHEAD 14
2183#define LENGTH_ARALINK_HEADER_FIELD 2
2184
2185
2186
2187
2188#define TX_UNKOWN_FRAME 0x00
2189#define TX_MCAST_FRAME 0x01
2190#define TX_LEGACY_FRAME 0x02
2191#define TX_AMPDU_FRAME 0x04
2192#define TX_AMSDU_FRAME 0x08
2193#define TX_RALINK_FRAME 0x10
2194#define TX_FRAG_FRAME 0x20
2195
2196
2197struct rt_tx_blk {
2198 u8 QueIdx;
2199 u8 TxFrameType;
2200 u8 TotalFrameNum;
2201 u16 TotalFragNum;
2202 u16 TotalFrameLen;
2203
2204 struct rt_queue_header TxPacketList;
2205 struct rt_mac_table_entry *pMacEntry;
2206 HTTRANSMIT_SETTING *pTransmit;
2207
2208
2209 void *pPacket;
2210 u8 *pSrcBufHeader;
2211 u8 *pSrcBufData;
2212 u32 SrcBufLen;
2213 u8 *pExtraLlcSnapEncap;
2214 u8 HeaderBuf[128];
2215
2216
2217
2218 u8 MpduHeaderLen;
2219 u8 HdrPadLen;
2220 u8 apidx;
2221 u8 Wcid;
2222 u8 UserPriority;
2223 u8 FrameGap;
2224 u8 MpduReqNum;
2225 u8 TxRate;
2226 u8 CipherAlg;
2227 struct rt_cipher_key *pKey;
2228
2229 u16 Flags;
2230
2231
2232 unsigned long Priv;
2233};
2234
2235#define fTX_bRtsRequired 0x0001
2236#define fTX_bAckRequired 0x0002
2237#define fTX_bPiggyBack 0x0004
2238#define fTX_bHTRate 0x0008
2239#define fTX_bForceNonQoS 0x0010
2240#define fTX_bAllowFrag 0x0020
2241#define fTX_bMoreData 0x0040
2242#define fTX_bWMM 0x0080
2243#define fTX_bClearEAPFrame 0x0100
2244
2245#define TX_BLK_SET_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags |= _flag)
2246#define TX_BLK_TEST_FLAG(_pTxBlk, _flag) (((_pTxBlk->Flags & _flag) == _flag) ? 1 : 0)
2247#define TX_BLK_CLEAR_FLAG(_pTxBlk, _flag) (_pTxBlk->Flags &= ~(_flag))
2248
2249
2250
2251
2252static inline void ConvertMulticastIP2MAC(u8 *pIpAddr,
2253 u8 **ppMacAddr,
2254 u16 ProtoType)
2255{
2256 if (pIpAddr == NULL)
2257 return;
2258
2259 if (ppMacAddr == NULL || *ppMacAddr == NULL)
2260 return;
2261
2262 switch (ProtoType) {
2263 case ETH_P_IPV6:
2264
2265 *(*ppMacAddr) = 0x33;
2266 *(*ppMacAddr + 1) = 0x33;
2267 *(*ppMacAddr + 2) = pIpAddr[12];
2268 *(*ppMacAddr + 3) = pIpAddr[13];
2269 *(*ppMacAddr + 4) = pIpAddr[14];
2270 *(*ppMacAddr + 5) = pIpAddr[15];
2271 break;
2272
2273 case ETH_P_IP:
2274 default:
2275
2276 *(*ppMacAddr) = 0x01;
2277 *(*ppMacAddr + 1) = 0x00;
2278 *(*ppMacAddr + 2) = 0x5e;
2279 *(*ppMacAddr + 3) = pIpAddr[1] & 0x7f;
2280 *(*ppMacAddr + 4) = pIpAddr[2];
2281 *(*ppMacAddr + 5) = pIpAddr[3];
2282 break;
2283 }
2284
2285 return;
2286}
2287
2288char *GetPhyMode(int Mode);
2289char *GetBW(int BW);
2290
2291
2292
2293
2294int RTMPAllocAdapterBlock(void *handle,
2295 struct rt_rtmp_adapter **ppAdapter);
2296
2297int RTMPAllocTxRxRingMemory(struct rt_rtmp_adapter *pAd);
2298
2299void RTMPFreeAdapter(struct rt_rtmp_adapter *pAd);
2300
2301int NICReadRegParameters(struct rt_rtmp_adapter *pAd,
2302 void *WrapperConfigurationContext);
2303
2304#ifdef RTMP_RF_RW_SUPPORT
2305void NICInitRFRegisters(struct rt_rtmp_adapter *pAd);
2306
2307void RtmpChipOpsRFHook(struct rt_rtmp_adapter *pAd);
2308
2309int RT30xxWriteRFRegister(struct rt_rtmp_adapter *pAd,
2310 u8 regID, u8 value);
2311
2312int RT30xxReadRFRegister(struct rt_rtmp_adapter *pAd,
2313 u8 regID, u8 *pValue);
2314#endif
2315
2316void NICReadEEPROMParameters(struct rt_rtmp_adapter *pAd, u8 *mac_addr);
2317
2318void NICInitAsicFromEEPROM(struct rt_rtmp_adapter *pAd);
2319
2320int NICInitializeAdapter(struct rt_rtmp_adapter *pAd, IN BOOLEAN bHardReset);
2321
2322int NICInitializeAsic(struct rt_rtmp_adapter *pAd, IN BOOLEAN bHardReset);
2323
2324void NICIssueReset(struct rt_rtmp_adapter *pAd);
2325
2326void RTMPRingCleanUp(struct rt_rtmp_adapter *pAd, u8 RingType);
2327
2328void UserCfgInit(struct rt_rtmp_adapter *pAd);
2329
2330void NICResetFromError(struct rt_rtmp_adapter *pAd);
2331
2332int NICLoadFirmware(struct rt_rtmp_adapter *pAd);
2333
2334void NICEraseFirmware(struct rt_rtmp_adapter *pAd);
2335
2336int NICLoadRateSwitchingParams(struct rt_rtmp_adapter *pAd);
2337
2338BOOLEAN NICCheckForHang(struct rt_rtmp_adapter *pAd);
2339
2340void NICUpdateFifoStaCounters(struct rt_rtmp_adapter *pAd);
2341
2342void NICUpdateRawCounters(struct rt_rtmp_adapter *pAd);
2343
2344void RTMPZeroMemory(void *pSrc, unsigned long Length);
2345
2346unsigned long RTMPCompareMemory(void *pSrc1, void *pSrc2, unsigned long Length);
2347
2348void RTMPMoveMemory(void *pDest, void *pSrc, unsigned long Length);
2349
2350void AtoH(char *src, u8 *dest, int destlen);
2351
2352void RTMPPatchMacBbpBug(struct rt_rtmp_adapter *pAd);
2353
2354void RTMPInitTimer(struct rt_rtmp_adapter *pAd,
2355 struct rt_ralink_timer *pTimer,
2356 void *pTimerFunc, void *pData, IN BOOLEAN Repeat);
2357
2358void RTMPSetTimer(struct rt_ralink_timer *pTimer, unsigned long Value);
2359
2360void RTMPModTimer(struct rt_ralink_timer *pTimer, unsigned long Value);
2361
2362void RTMPCancelTimer(struct rt_ralink_timer *pTimer, OUT BOOLEAN * pCancelled);
2363
2364void RTMPSetLED(struct rt_rtmp_adapter *pAd, u8 Status);
2365
2366void RTMPSetSignalLED(struct rt_rtmp_adapter *pAd, IN NDIS_802_11_RSSI Dbm);
2367
2368void RTMPEnableRxTx(struct rt_rtmp_adapter *pAd);
2369
2370
2371
2372
2373void ActionStateMachineInit(struct rt_rtmp_adapter *pAd,
2374 struct rt_state_machine *S,
2375 OUT STATE_MACHINE_FUNC Trans[]);
2376
2377void MlmeADDBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2378
2379void MlmeDELBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2380
2381void MlmeDLSAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2382
2383void MlmeInvalidAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2384
2385void MlmeQOSAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2386
2387void PeerAddBAReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2388
2389void PeerAddBARspAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2390
2391void PeerDelBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2392
2393void PeerBAAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2394
2395void SendPSMPAction(struct rt_rtmp_adapter *pAd, u8 Wcid, u8 Psmp);
2396
2397void PeerRMAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2398
2399void PeerPublicAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2400
2401void PeerHTAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2402
2403void PeerQOSAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2404
2405void RECBATimerTimeout(void *SystemSpecific1,
2406 void *FunctionContext,
2407 void *SystemSpecific2, void *SystemSpecific3);
2408
2409void ORIBATimerTimeout(struct rt_rtmp_adapter *pAd);
2410
2411void SendRefreshBAR(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry);
2412
2413void ActHeaderInit(struct rt_rtmp_adapter *pAd,
2414 struct rt_header_802_11 *pHdr80211,
2415 u8 *Addr1, u8 *Addr2, u8 *Addr3);
2416
2417void BarHeaderInit(struct rt_rtmp_adapter *pAd,
2418 struct rt_frame_bar *pCntlBar, u8 *pDA, u8 *pSA);
2419
2420void InsertActField(struct rt_rtmp_adapter *pAd,
2421 u8 *pFrameBuf,
2422 unsigned long *pFrameLen, u8 Category, u8 ActCode);
2423
2424BOOLEAN CntlEnqueueForRecv(struct rt_rtmp_adapter *pAd,
2425 unsigned long Wcid,
2426 unsigned long MsgLen, struct rt_frame_ba_req *pMsg);
2427
2428
2429
2430
2431BOOLEAN RTMPHandleRxDoneInterrupt(struct rt_rtmp_adapter *pAd);
2432
2433BOOLEAN RTMPHandleTxRingDmaDoneInterrupt(struct rt_rtmp_adapter *pAd,
2434 INT_SOURCE_CSR_STRUC TxRingBitmap);
2435
2436void RTMPHandleMgmtRingDmaDoneInterrupt(struct rt_rtmp_adapter *pAd);
2437
2438void RTMPHandleTBTTInterrupt(struct rt_rtmp_adapter *pAd);
2439
2440void RTMPHandlePreTBTTInterrupt(struct rt_rtmp_adapter *pAd);
2441
2442void RTMPHandleTwakeupInterrupt(struct rt_rtmp_adapter *pAd);
2443
2444void RTMPHandleRxCoherentInterrupt(struct rt_rtmp_adapter *pAd);
2445
2446BOOLEAN TxFrameIsAggregatible(struct rt_rtmp_adapter *pAd,
2447 u8 *pPrevAddr1, u8 *p8023hdr);
2448
2449BOOLEAN PeerIsAggreOn(struct rt_rtmp_adapter *pAd,
2450 unsigned long TxRate, struct rt_mac_table_entry *pMacEntry);
2451
2452int Sniff2BytesFromNdisBuffer(char *pFirstBuffer,
2453 u8 DesiredOffset,
2454 u8 *pByte0, u8 *pByte1);
2455
2456int STASendPacket(struct rt_rtmp_adapter *pAd, void *pPacket);
2457
2458void STASendPackets(void *MiniportAdapterContext,
2459 void **ppPacketArray, u32 NumberOfPackets);
2460
2461void RTMPDeQueuePacket(struct rt_rtmp_adapter *pAd,
2462 IN BOOLEAN bIntContext,
2463 u8 QueIdx, u8 Max_Tx_Packets);
2464
2465int RTMPHardTransmit(struct rt_rtmp_adapter *pAd,
2466 void *pPacket,
2467 u8 QueIdx, unsigned long *pFreeTXDLeft);
2468
2469int STAHardTransmit(struct rt_rtmp_adapter *pAd,
2470 struct rt_tx_blk *pTxBlk, u8 QueIdx);
2471
2472void STARxEAPOLFrameIndicate(struct rt_rtmp_adapter *pAd,
2473 struct rt_mac_table_entry *pEntry,
2474 struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID);
2475
2476int RTMPFreeTXDRequest(struct rt_rtmp_adapter *pAd,
2477 u8 RingType,
2478 u8 NumberRequired, u8 *FreeNumberIs);
2479
2480int MlmeHardTransmit(struct rt_rtmp_adapter *pAd,
2481 u8 QueIdx, void *pPacket);
2482
2483int MlmeHardTransmitMgmtRing(struct rt_rtmp_adapter *pAd,
2484 u8 QueIdx, void *pPacket);
2485
2486#ifdef RTMP_MAC_PCI
2487int MlmeHardTransmitTxRing(struct rt_rtmp_adapter *pAd,
2488 u8 QueIdx, void *pPacket);
2489
2490int MlmeDataHardTransmit(struct rt_rtmp_adapter *pAd,
2491 u8 QueIdx, void *pPacket);
2492
2493void RTMPWriteTxDescriptor(struct rt_rtmp_adapter *pAd,
2494 struct rt_txd *pTxD, IN BOOLEAN bWIV, u8 QSEL);
2495#endif
2496
2497u16 RTMPCalcDuration(struct rt_rtmp_adapter *pAd, u8 Rate, unsigned long Size);
2498
2499void RTMPWriteTxWI(struct rt_rtmp_adapter *pAd, struct rt_txwi * pTxWI, IN BOOLEAN FRAG, IN BOOLEAN CFACK, IN BOOLEAN InsTimestamp, IN BOOLEAN AMPDU, IN BOOLEAN Ack, IN BOOLEAN NSeq,
2500 u8 BASize,
2501 u8 WCID,
2502 unsigned long Length,
2503 u8 PID,
2504 u8 TID,
2505 u8 TxRate,
2506 u8 Txopmode,
2507 IN BOOLEAN CfAck, IN HTTRANSMIT_SETTING *pTransmit);
2508
2509void RTMPWriteTxWI_Data(struct rt_rtmp_adapter *pAd,
2510 struct rt_txwi *pTxWI, struct rt_tx_blk *pTxBlk);
2511
2512void RTMPWriteTxWI_Cache(struct rt_rtmp_adapter *pAd,
2513 struct rt_txwi *pTxWI, struct rt_tx_blk *pTxBlk);
2514
2515void RTMPSuspendMsduTransmission(struct rt_rtmp_adapter *pAd);
2516
2517void RTMPResumeMsduTransmission(struct rt_rtmp_adapter *pAd);
2518
2519int MiniportMMRequest(struct rt_rtmp_adapter *pAd,
2520 u8 QueIdx, u8 *pData, u32 Length);
2521
2522
2523
2524
2525void RTMPSendNullFrame(struct rt_rtmp_adapter *pAd,
2526 u8 TxRate, IN BOOLEAN bQosNull);
2527
2528void RTMPSendDisassociationFrame(struct rt_rtmp_adapter *pAd);
2529
2530void RTMPSendRTSFrame(struct rt_rtmp_adapter *pAd,
2531 u8 *pDA,
2532 IN unsigned int NextMpduSize,
2533 u8 TxRate,
2534 u8 RTSRate,
2535 u16 AckDuration,
2536 u8 QueIdx, u8 FrameGap);
2537
2538struct rt_queue_header *RTMPCheckTxSwQueue(struct rt_rtmp_adapter *pAd, u8 * QueIdx);
2539
2540void RTMPReportMicError(struct rt_rtmp_adapter *pAd, struct rt_cipher_key *pWpaKey);
2541
2542void WpaMicFailureReportFrame(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2543
2544void WpaDisassocApAndBlockAssoc(void *SystemSpecific1,
2545 void *FunctionContext,
2546 void *SystemSpecific2,
2547 void *SystemSpecific3);
2548
2549void WpaStaPairwiseKeySetting(struct rt_rtmp_adapter *pAd);
2550
2551void WpaStaGroupKeySetting(struct rt_rtmp_adapter *pAd);
2552
2553int RTMPCloneNdisPacket(struct rt_rtmp_adapter *pAd,
2554 IN BOOLEAN pInsAMSDUHdr,
2555 void *pInPacket,
2556 void **ppOutPacket);
2557
2558int RTMPAllocateNdisPacket(struct rt_rtmp_adapter *pAd,
2559 void **pPacket,
2560 u8 *pHeader,
2561 u32 HeaderLen,
2562 u8 *pData, u32 DataLen);
2563
2564void RTMPFreeNdisPacket(struct rt_rtmp_adapter *pAd, void *pPacket);
2565
2566BOOLEAN RTMPFreeTXDUponTxDmaDone(struct rt_rtmp_adapter *pAd, u8 QueIdx);
2567
2568BOOLEAN RTMPCheckDHCPFrame(struct rt_rtmp_adapter *pAd, void *pPacket);
2569
2570BOOLEAN RTMPCheckEtherType(struct rt_rtmp_adapter *pAd, void *pPacket);
2571
2572
2573
2574
2575void RTMPInitWepEngine(struct rt_rtmp_adapter *pAd,
2576 u8 *pKey,
2577 u8 KeyId, u8 KeyLen, u8 *pDest);
2578
2579void RTMPEncryptData(struct rt_rtmp_adapter *pAd,
2580 u8 *pSrc, u8 *pDest, u32 Len);
2581
2582BOOLEAN RTMPSoftDecryptWEP(struct rt_rtmp_adapter *pAd,
2583 u8 *pData,
2584 unsigned long DataByteCnt, struct rt_cipher_key *pGroupKey);
2585
2586void RTMPSetICV(struct rt_rtmp_adapter *pAd, u8 *pDest);
2587
2588void ARCFOUR_INIT(struct rt_arcfourcontext *Ctx, u8 *pKey, u32 KeyLen);
2589
2590u8 ARCFOUR_BYTE(struct rt_arcfourcontext *Ctx);
2591
2592void ARCFOUR_DECRYPT(struct rt_arcfourcontext *Ctx,
2593 u8 *pDest, u8 *pSrc, u32 Len);
2594
2595void ARCFOUR_ENCRYPT(struct rt_arcfourcontext *Ctx,
2596 u8 *pDest, u8 *pSrc, u32 Len);
2597
2598void WPAARCFOUR_ENCRYPT(struct rt_arcfourcontext *Ctx,
2599 u8 *pDest, u8 *pSrc, u32 Len);
2600
2601u32 RTMP_CALC_FCS32(u32 Fcs, u8 *Cp, int Len);
2602
2603
2604
2605
2606
2607
2608
2609void AsicAdjustTxPower(struct rt_rtmp_adapter *pAd);
2610
2611void AsicUpdateProtect(struct rt_rtmp_adapter *pAd,
2612 u16 OperaionMode,
2613 u8 SetMask,
2614 IN BOOLEAN bDisableBGProtect, IN BOOLEAN bNonGFExist);
2615
2616void AsicSwitchChannel(struct rt_rtmp_adapter *pAd,
2617 u8 Channel, IN BOOLEAN bScan);
2618
2619void AsicLockChannel(struct rt_rtmp_adapter *pAd, u8 Channel);
2620
2621void AsicRfTuningExec(void *SystemSpecific1,
2622 void *FunctionContext,
2623 void *SystemSpecific2, void *SystemSpecific3);
2624
2625void AsicResetBBPAgent(struct rt_rtmp_adapter *pAd);
2626
2627void AsicSleepThenAutoWakeup(struct rt_rtmp_adapter *pAd,
2628 u16 TbttNumToNextWakeUp);
2629
2630void AsicForceSleep(struct rt_rtmp_adapter *pAd);
2631
2632void AsicForceWakeup(struct rt_rtmp_adapter *pAd, IN BOOLEAN bFromTx);
2633
2634void AsicSetBssid(struct rt_rtmp_adapter *pAd, u8 *pBssid);
2635
2636void AsicSetMcastWC(struct rt_rtmp_adapter *pAd);
2637
2638void AsicDelWcidTab(struct rt_rtmp_adapter *pAd, u8 Wcid);
2639
2640void AsicEnableRDG(struct rt_rtmp_adapter *pAd);
2641
2642void AsicDisableRDG(struct rt_rtmp_adapter *pAd);
2643
2644void AsicDisableSync(struct rt_rtmp_adapter *pAd);
2645
2646void AsicEnableBssSync(struct rt_rtmp_adapter *pAd);
2647
2648void AsicEnableIbssSync(struct rt_rtmp_adapter *pAd);
2649
2650void AsicSetEdcaParm(struct rt_rtmp_adapter *pAd, struct rt_edca_parm *pEdcaParm);
2651
2652void AsicSetSlotTime(struct rt_rtmp_adapter *pAd, IN BOOLEAN bUseShortSlotTime);
2653
2654void AsicAddSharedKeyEntry(struct rt_rtmp_adapter *pAd,
2655 u8 BssIndex,
2656 u8 KeyIdx,
2657 u8 CipherAlg,
2658 u8 *pKey, u8 *pTxMic, u8 *pRxMic);
2659
2660void AsicRemoveSharedKeyEntry(struct rt_rtmp_adapter *pAd,
2661 u8 BssIndex, u8 KeyIdx);
2662
2663void AsicUpdateWCIDAttribute(struct rt_rtmp_adapter *pAd,
2664 u16 WCID,
2665 u8 BssIndex,
2666 u8 CipherAlg,
2667 IN BOOLEAN bUsePairewiseKeyTable);
2668
2669void AsicUpdateWCIDIVEIV(struct rt_rtmp_adapter *pAd,
2670 u16 WCID, unsigned long uIV, unsigned long uEIV);
2671
2672void AsicUpdateRxWCIDTable(struct rt_rtmp_adapter *pAd,
2673 u16 WCID, u8 *pAddr);
2674
2675void AsicAddKeyEntry(struct rt_rtmp_adapter *pAd,
2676 u16 WCID,
2677 u8 BssIndex,
2678 u8 KeyIdx,
2679 struct rt_cipher_key *pCipherKey,
2680 IN BOOLEAN bUsePairewiseKeyTable, IN BOOLEAN bTxKey);
2681
2682void AsicAddPairwiseKeyEntry(struct rt_rtmp_adapter *pAd,
2683 u8 *pAddr,
2684 u8 WCID, struct rt_cipher_key *pCipherKey);
2685
2686void AsicRemovePairwiseKeyEntry(struct rt_rtmp_adapter *pAd,
2687 u8 BssIdx, u8 Wcid);
2688
2689BOOLEAN AsicSendCommandToMcu(struct rt_rtmp_adapter *pAd,
2690 u8 Command,
2691 u8 Token, u8 Arg0, u8 Arg1);
2692
2693#ifdef RTMP_MAC_PCI
2694BOOLEAN AsicCheckCommanOk(struct rt_rtmp_adapter *pAd, u8 Command);
2695#endif
2696
2697void MacAddrRandomBssid(struct rt_rtmp_adapter *pAd, u8 *pAddr);
2698
2699void MgtMacHeaderInit(struct rt_rtmp_adapter *pAd,
2700 struct rt_header_802_11 *pHdr80211,
2701 u8 SubType,
2702 u8 ToDs, u8 *pDA, u8 *pBssid);
2703
2704void MlmeRadioOff(struct rt_rtmp_adapter *pAd);
2705
2706void MlmeRadioOn(struct rt_rtmp_adapter *pAd);
2707
2708void BssTableInit(struct rt_bss_table *Tab);
2709
2710void BATableInit(struct rt_rtmp_adapter *pAd, struct rt_ba_table *Tab);
2711
2712unsigned long BssTableSearch(struct rt_bss_table *Tab, u8 *pBssid, u8 Channel);
2713
2714unsigned long BssSsidTableSearch(struct rt_bss_table *Tab,
2715 u8 *pBssid,
2716 u8 *pSsid, u8 SsidLen, u8 Channel);
2717
2718unsigned long BssTableSearchWithSSID(struct rt_bss_table *Tab,
2719 u8 *Bssid,
2720 u8 *pSsid,
2721 u8 SsidLen, u8 Channel);
2722
2723unsigned long BssSsidTableSearchBySSID(struct rt_bss_table *Tab,
2724 u8 *pSsid, u8 SsidLen);
2725
2726void BssTableDeleteEntry(struct rt_bss_table *pTab,
2727 u8 *pBssid, u8 Channel);
2728
2729void BATableDeleteORIEntry(struct rt_rtmp_adapter *pAd,
2730 struct rt_ba_ori_entry *pBAORIEntry);
2731
2732void BssEntrySet(struct rt_rtmp_adapter *pAd, struct rt_bss_entry *pBss, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, struct rt_cf_parm * CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, struct rt_ht_capability_ie * pHtCapability, struct rt_add_ht_info_ie * pAddHtInfo,
2733 u8 HtCapabilityLen,
2734 u8 AddHtInfoLen,
2735 u8 NewExtChanOffset,
2736 u8 Channel,
2737 char Rssi,
2738 IN LARGE_INTEGER TimeStamp,
2739 u8 CkipFlag,
2740 struct rt_edca_parm *pEdcaParm,
2741 struct rt_qos_capability_parm *pQosCapability,
2742 struct rt_qbss_load_parm *pQbssLoad,
2743 u16 LengthVIE, struct rt_ndis_802_11_variable_ies *pVIE);
2744
2745unsigned long BssTableSetEntry(struct rt_rtmp_adapter *pAd, struct rt_bss_table *pTab, u8 *pBssid, char Ssid[], u8 SsidLen, u8 BssType, u16 BeaconPeriod, struct rt_cf_parm * CfParm, u16 AtimWin, u16 CapabilityInfo, u8 SupRate[], u8 SupRateLen, u8 ExtRate[], u8 ExtRateLen, struct rt_ht_capability_ie * pHtCapability, struct rt_add_ht_info_ie * pAddHtInfo,
2746 u8 HtCapabilityLen,
2747 u8 AddHtInfoLen,
2748 u8 NewExtChanOffset,
2749 u8 Channel,
2750 char Rssi,
2751 IN LARGE_INTEGER TimeStamp,
2752 u8 CkipFlag,
2753 struct rt_edca_parm *pEdcaParm,
2754 struct rt_qos_capability_parm *pQosCapability,
2755 struct rt_qbss_load_parm *pQbssLoad,
2756 u16 LengthVIE, struct rt_ndis_802_11_variable_ies *pVIE);
2757
2758void BATableInsertEntry(struct rt_rtmp_adapter *pAd,
2759 u16 Aid,
2760 u16 TimeOutValue,
2761 u16 StartingSeq,
2762 u8 TID,
2763 u8 BAWinSize,
2764 u8 OriginatorStatus, IN BOOLEAN IsRecipient);
2765
2766void BssTableSsidSort(struct rt_rtmp_adapter *pAd,
2767 struct rt_bss_table *OutTab, char Ssid[], u8 SsidLen);
2768
2769void BssTableSortByRssi(struct rt_bss_table *OutTab);
2770
2771void BssCipherParse(struct rt_bss_entry *pBss);
2772
2773int MlmeQueueInit(struct rt_mlme_queue *Queue);
2774
2775void MlmeQueueDestroy(struct rt_mlme_queue *Queue);
2776
2777BOOLEAN MlmeEnqueue(struct rt_rtmp_adapter *pAd,
2778 unsigned long Machine,
2779 unsigned long MsgType, unsigned long MsgLen, void *Msg);
2780
2781BOOLEAN MlmeEnqueueForRecv(struct rt_rtmp_adapter *pAd,
2782 unsigned long Wcid,
2783 unsigned long TimeStampHigh,
2784 unsigned long TimeStampLow,
2785 u8 Rssi0,
2786 u8 Rssi1,
2787 u8 Rssi2,
2788 unsigned long MsgLen, void *Msg, u8 Signal);
2789
2790BOOLEAN MlmeDequeue(struct rt_mlme_queue *Queue, struct rt_mlme_queue_elem **Elem);
2791
2792void MlmeRestartStateMachine(struct rt_rtmp_adapter *pAd);
2793
2794BOOLEAN MlmeQueueEmpty(struct rt_mlme_queue *Queue);
2795
2796BOOLEAN MlmeQueueFull(struct rt_mlme_queue *Queue);
2797
2798BOOLEAN MsgTypeSubst(struct rt_rtmp_adapter *pAd,
2799 struct rt_frame_802_11 *pFrame,
2800 int *Machine, int *MsgType);
2801
2802void StateMachineInit(struct rt_state_machine *Sm,
2803 IN STATE_MACHINE_FUNC Trans[],
2804 unsigned long StNr,
2805 unsigned long MsgNr,
2806 IN STATE_MACHINE_FUNC DefFunc,
2807 unsigned long InitState, unsigned long Base);
2808
2809void StateMachineSetAction(struct rt_state_machine *S,
2810 unsigned long St, unsigned long Msg, IN STATE_MACHINE_FUNC F);
2811
2812void StateMachinePerformAction(struct rt_rtmp_adapter *pAd,
2813 struct rt_state_machine *S, struct rt_mlme_queue_elem *Elem);
2814
2815void Drop(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2816
2817void AssocStateMachineInit(struct rt_rtmp_adapter *pAd,
2818 struct rt_state_machine *Sm,
2819 OUT STATE_MACHINE_FUNC Trans[]);
2820
2821void ReassocTimeout(void *SystemSpecific1,
2822 void *FunctionContext,
2823 void *SystemSpecific2, void *SystemSpecific3);
2824
2825void AssocTimeout(void *SystemSpecific1,
2826 void *FunctionContext,
2827 void *SystemSpecific2, void *SystemSpecific3);
2828
2829void DisassocTimeout(void *SystemSpecific1,
2830 void *FunctionContext,
2831 void *SystemSpecific2, void *SystemSpecific3);
2832
2833
2834void MlmeAssocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2835
2836void MlmeReassocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2837
2838void MlmeDisassocReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2839
2840void PeerAssocRspAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2841
2842void PeerReassocRspAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2843
2844void PeerDisassocAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2845
2846void DisassocTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2847
2848void AssocTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2849
2850void ReassocTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2851
2852void Cls3errAction(struct rt_rtmp_adapter *pAd, u8 *pAddr);
2853
2854void InvalidStateWhenAssoc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2855
2856void InvalidStateWhenReassoc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2857
2858void InvalidStateWhenDisassociate(struct rt_rtmp_adapter *pAd,
2859 struct rt_mlme_queue_elem *Elem);
2860
2861#ifdef RTMP_MAC_USB
2862void MlmeCntlConfirm(struct rt_rtmp_adapter *pAd, unsigned long MsgType, u16 Msg);
2863#endif
2864
2865void ComposePsPoll(struct rt_rtmp_adapter *pAd);
2866
2867void ComposeNullFrame(struct rt_rtmp_adapter *pAd);
2868
2869void AssocPostProc(struct rt_rtmp_adapter *pAd,
2870 u8 *pAddr2,
2871 u16 CapabilityInfo,
2872 u16 Aid,
2873 u8 SupRate[],
2874 u8 SupRateLen,
2875 u8 ExtRate[],
2876 u8 ExtRateLen,
2877 struct rt_edca_parm *pEdcaParm,
2878 struct rt_ht_capability_ie *pHtCapability,
2879 u8 HtCapabilityLen, struct rt_add_ht_info_ie *pAddHtInfo);
2880
2881void AuthStateMachineInit(struct rt_rtmp_adapter *pAd,
2882 struct rt_state_machine *sm, OUT STATE_MACHINE_FUNC Trans[]);
2883
2884void AuthTimeout(void *SystemSpecific1,
2885 void *FunctionContext,
2886 void *SystemSpecific2, void *SystemSpecific3);
2887
2888void MlmeAuthReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2889
2890void PeerAuthRspAtSeq2Action(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2891
2892void PeerAuthRspAtSeq4Action(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2893
2894void AuthTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2895
2896void Cls2errAction(struct rt_rtmp_adapter *pAd, u8 *pAddr);
2897
2898void MlmeDeauthReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2899
2900void InvalidStateWhenAuth(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2901
2902
2903
2904void AuthRspStateMachineInit(struct rt_rtmp_adapter *pAd,
2905 struct rt_state_machine *Sm,
2906 IN STATE_MACHINE_FUNC Trans[]);
2907
2908void PeerDeauthAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2909
2910void PeerAuthSimpleRspGenAndSend(struct rt_rtmp_adapter *pAd,
2911 struct rt_header_802_11 *pHdr80211,
2912 u16 Alg,
2913 u16 Seq,
2914 u16 Reason, u16 Status);
2915
2916
2917
2918
2919
2920
2921
2922void SyncStateMachineInit(struct rt_rtmp_adapter *pAd,
2923 struct rt_state_machine *Sm,
2924 OUT STATE_MACHINE_FUNC Trans[]);
2925
2926void BeaconTimeout(void *SystemSpecific1,
2927 void *FunctionContext,
2928 void *SystemSpecific2, void *SystemSpecific3);
2929
2930void ScanTimeout(void *SystemSpecific1,
2931 void *FunctionContext,
2932 void *SystemSpecific2, void *SystemSpecific3);
2933
2934void InvalidStateWhenScan(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2935
2936void InvalidStateWhenJoin(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2937
2938void InvalidStateWhenStart(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2939
2940void EnqueueProbeRequest(struct rt_rtmp_adapter *pAd);
2941
2942BOOLEAN ScanRunning(struct rt_rtmp_adapter *pAd);
2943
2944
2945void MlmeCntlInit(struct rt_rtmp_adapter *pAd,
2946 struct rt_state_machine *S, OUT STATE_MACHINE_FUNC Trans[]);
2947
2948void MlmeCntlMachinePerformAction(struct rt_rtmp_adapter *pAd,
2949 struct rt_state_machine *S,
2950 struct rt_mlme_queue_elem *Elem);
2951
2952void CntlIdleProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2953
2954void CntlOidScanProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2955
2956void CntlOidSsidProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2957
2958void CntlOidRTBssidProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2959
2960void CntlMlmeRoamingProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2961
2962void CntlWaitDisassocProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2963
2964void CntlWaitJoinProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2965
2966void CntlWaitReassocProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2967
2968void CntlWaitStartProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2969
2970void CntlWaitAuthProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2971
2972void CntlWaitAuthProc2(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2973
2974void CntlWaitAssocProc(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
2975
2976void LinkUp(struct rt_rtmp_adapter *pAd, u8 BssType);
2977
2978void LinkDown(struct rt_rtmp_adapter *pAd, IN BOOLEAN IsReqFromAP);
2979
2980void IterateOnBssTab(struct rt_rtmp_adapter *pAd);
2981
2982void IterateOnBssTab2(struct rt_rtmp_adapter *pAd);
2983
2984void JoinParmFill(struct rt_rtmp_adapter *pAd,
2985 struct rt_mlme_join_req *JoinReq, unsigned long BssIdx);
2986
2987void AssocParmFill(struct rt_rtmp_adapter *pAd,
2988 struct rt_mlme_assoc_req *AssocReq,
2989 u8 *pAddr,
2990 u16 CapabilityInfo,
2991 unsigned long Timeout, u16 ListenIntv);
2992
2993void ScanParmFill(struct rt_rtmp_adapter *pAd,
2994 struct rt_mlme_scan_req *ScanReq,
2995 char Ssid[],
2996 u8 SsidLen, u8 BssType, u8 ScanType);
2997
2998void DisassocParmFill(struct rt_rtmp_adapter *pAd,
2999 struct rt_mlme_disassoc_req *DisassocReq,
3000 u8 *pAddr, u16 Reason);
3001
3002void StartParmFill(struct rt_rtmp_adapter *pAd,
3003 struct rt_mlme_start_req *StartReq,
3004 char Ssid[], u8 SsidLen);
3005
3006void AuthParmFill(struct rt_rtmp_adapter *pAd,
3007 struct rt_mlme_auth_req *AuthReq,
3008 u8 *pAddr, u16 Alg);
3009
3010void EnqueuePsPoll(struct rt_rtmp_adapter *pAd);
3011
3012void EnqueueBeaconFrame(struct rt_rtmp_adapter *pAd);
3013
3014void MlmeJoinReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
3015
3016void MlmeScanReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
3017
3018void MlmeStartReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
3019
3020void ScanTimeoutAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
3021
3022void BeaconTimeoutAtJoinAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
3023
3024void PeerBeaconAtScanAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
3025
3026void PeerBeaconAtJoinAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
3027
3028void PeerBeacon(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
3029
3030void PeerProbeReqAction(struct rt_rtmp_adapter *pAd, struct rt_mlme_queue_elem *Elem);
3031
3032void ScanNextChannel(struct rt_rtmp_adapter *pAd);
3033
3034unsigned long MakeIbssBeacon(struct rt_rtmp_adapter *pAd);
3035
3036BOOLEAN MlmeScanReqSanity(struct rt_rtmp_adapter *pAd,
3037 void *Msg,
3038 unsigned long MsgLen,
3039 u8 *BssType,
3040 char ssid[],
3041 u8 *SsidLen, u8 *ScanType);
3042
3043BOOLEAN PeerBeaconAndProbeRspSanity(struct rt_rtmp_adapter *pAd,
3044 void *Msg,
3045 unsigned long MsgLen,
3046 u8 MsgChannel,
3047 u8 *pAddr2,
3048 u8 *pBssid,
3049 char Ssid[],
3050 u8 *pSsidLen,
3051 u8 *pBssType,
3052 u16 *pBeaconPeriod,
3053 u8 *pChannel,
3054 u8 *pNewChannel,
3055 OUT LARGE_INTEGER *pTimestamp,
3056 struct rt_cf_parm *pCfParm,
3057 u16 *pAtimWin,
3058 u16 *pCapabilityInfo,
3059 u8 *pErp,
3060 u8 *pDtimCount,
3061 u8 *pDtimPeriod,
3062 u8 *pBcastFlag,
3063 u8 *pMessageToMe,
3064 u8 SupRate[],
3065 u8 *pSupRateLen,
3066 u8 ExtRate[],
3067 u8 *pExtRateLen,
3068 u8 *pCkipFlag,
3069 u8 *pAironetCellPowerLimit,
3070 struct rt_edca_parm *pEdcaParm,
3071 struct rt_qbss_load_parm *pQbssLoad,
3072 struct rt_qos_capability_parm *pQosCapability,
3073 unsigned long *pRalinkIe,
3074 u8 *pHtCapabilityLen,
3075 u8 *pPreNHtCapabilityLen,
3076 struct rt_ht_capability_ie *pHtCapability,
3077 u8 *AddHtInfoLen,
3078 struct rt_add_ht_info_ie *AddHtInfo,
3079 u8 *NewExtChannel,
3080 u16 *LengthVIE,
3081 struct rt_ndis_802_11_variable_ies *pVIE);
3082
3083BOOLEAN PeerAddBAReqActionSanity(struct rt_rtmp_adapter *pAd,
3084 void *pMsg,
3085 unsigned long MsgLen, u8 *pAddr2);
3086
3087BOOLEAN PeerAddBARspActionSanity(struct rt_rtmp_adapter *pAd,
3088 void *pMsg, unsigned long MsgLen);
3089
3090BOOLEAN PeerDelBAActionSanity(struct rt_rtmp_adapter *pAd,
3091 u8 Wcid, void *pMsg, unsigned long MsgLen);
3092
3093BOOLEAN MlmeAssocReqSanity(struct rt_rtmp_adapter *pAd,
3094 void *Msg,
3095 unsigned long MsgLen,
3096 u8 *pApAddr,
3097 u16 *CapabilityInfo,
3098 unsigned long *Timeout, u16 *ListenIntv);
3099
3100BOOLEAN MlmeAuthReqSanity(struct rt_rtmp_adapter *pAd,
3101 void *Msg,
3102 unsigned long MsgLen,
3103 u8 *pAddr,
3104 unsigned long *Timeout, u16 *Alg);
3105
3106BOOLEAN MlmeStartReqSanity(struct rt_rtmp_adapter *pAd,
3107 void *Msg,
3108 unsigned long MsgLen,
3109 char Ssid[], u8 *Ssidlen);
3110
3111BOOLEAN PeerAuthSanity(struct rt_rtmp_adapter *pAd,
3112 void *Msg,
3113 unsigned long MsgLen,
3114 u8 *pAddr,
3115 u16 *Alg,
3116 u16 *Seq,
3117 u16 *Status, char ChlgText[]);
3118
3119BOOLEAN PeerAssocRspSanity(struct rt_rtmp_adapter *pAd, void *pMsg, unsigned long MsgLen, u8 *pAddr2, u16 *pCapabilityInfo, u16 *pStatus, u16 *pAid, u8 SupRate[], u8 *pSupRateLen, u8 ExtRate[], u8 *pExtRateLen, struct rt_ht_capability_ie *pHtCapability, struct rt_add_ht_info_ie *pAddHtInfo,
3120 u8 *pHtCapabilityLen,
3121 u8 *pAddHtInfoLen,
3122 u8 *pNewExtChannelOffset,
3123 struct rt_edca_parm *pEdcaParm, u8 *pCkipFlag);
3124
3125BOOLEAN PeerDisassocSanity(struct rt_rtmp_adapter *pAd,
3126 void *Msg,
3127 unsigned long MsgLen,
3128 u8 *pAddr2, u16 *Reason);
3129
3130BOOLEAN PeerWpaMessageSanity(struct rt_rtmp_adapter *pAd,
3131 struct rt_eapol_packet *pMsg,
3132 unsigned long MsgLen,
3133 u8 MsgType, struct rt_mac_table_entry *pEntry);
3134
3135BOOLEAN PeerDeauthSanity(struct rt_rtmp_adapter *pAd,
3136 void *Msg,
3137 unsigned long MsgLen,
3138 u8 *pAddr2, u16 *Reason);
3139
3140BOOLEAN PeerProbeReqSanity(struct rt_rtmp_adapter *pAd,
3141 void *Msg,
3142 unsigned long MsgLen,
3143 u8 *pAddr2,
3144 char Ssid[], u8 *pSsidLen);
3145
3146BOOLEAN GetTimBit(char *Ptr,
3147 u16 Aid,
3148 u8 *TimLen,
3149 u8 *BcastFlag,
3150 u8 *DtimCount,
3151 u8 *DtimPeriod, u8 *MessageToMe);
3152
3153u8 ChannelSanity(struct rt_rtmp_adapter *pAd, u8 channel);
3154
3155NDIS_802_11_NETWORK_TYPE NetworkTypeInUseSanity(struct rt_bss_entry *pBss);
3156
3157BOOLEAN MlmeDelBAReqSanity(struct rt_rtmp_adapter *pAd,
3158 void *Msg, unsigned long MsgLen);
3159
3160BOOLEAN MlmeAddBAReqSanity(struct rt_rtmp_adapter *pAd,
3161 void *Msg, unsigned long MsgLen, u8 *pAddr2);
3162
3163unsigned long MakeOutgoingFrame(u8 *Buffer, unsigned long *Length, ...);
3164
3165void LfsrInit(struct rt_rtmp_adapter *pAd, unsigned long Seed);
3166
3167u8 RandomByte(struct rt_rtmp_adapter *pAd);
3168
3169void AsicUpdateAutoFallBackTable(struct rt_rtmp_adapter *pAd, u8 *pTxRate);
3170
3171void MlmePeriodicExec(void *SystemSpecific1,
3172 void *FunctionContext,
3173 void *SystemSpecific2, void *SystemSpecific3);
3174
3175void LinkDownExec(void *SystemSpecific1,
3176 void *FunctionContext,
3177 void *SystemSpecific2, void *SystemSpecific3);
3178
3179void STAMlmePeriodicExec(struct rt_rtmp_adapter *pAd);
3180
3181void MlmeAutoScan(struct rt_rtmp_adapter *pAd);
3182
3183void MlmeAutoReconnectLastSSID(struct rt_rtmp_adapter *pAd);
3184
3185BOOLEAN MlmeValidateSSID(u8 *pSsid, u8 SsidLen);
3186
3187void MlmeCheckForRoaming(struct rt_rtmp_adapter *pAd, unsigned long Now32);
3188
3189BOOLEAN MlmeCheckForFastRoaming(struct rt_rtmp_adapter *pAd);
3190
3191void MlmeDynamicTxRateSwitching(struct rt_rtmp_adapter *pAd);
3192
3193void MlmeSetTxRate(struct rt_rtmp_adapter *pAd,
3194 struct rt_mac_table_entry *pEntry, struct rt_rtmp_tx_rate_switch * pTxRate);
3195
3196void MlmeSelectTxRateTable(struct rt_rtmp_adapter *pAd,
3197 struct rt_mac_table_entry *pEntry,
3198 u8 **ppTable,
3199 u8 *pTableSize, u8 *pInitTxRateIdx);
3200
3201void MlmeCalculateChannelQuality(struct rt_rtmp_adapter *pAd,
3202 struct rt_mac_table_entry *pMacEntry, unsigned long Now);
3203
3204void MlmeCheckPsmChange(struct rt_rtmp_adapter *pAd, unsigned long Now32);
3205
3206void MlmeSetPsmBit(struct rt_rtmp_adapter *pAd, u16 psm);
3207
3208void MlmeSetTxPreamble(struct rt_rtmp_adapter *pAd, u16 TxPreamble);
3209
3210void UpdateBasicRateBitmap(struct rt_rtmp_adapter *pAd);
3211
3212void MlmeUpdateTxRates(struct rt_rtmp_adapter *pAd,
3213 IN BOOLEAN bLinkUp, u8 apidx);
3214
3215void MlmeUpdateHtTxRates(struct rt_rtmp_adapter *pAd, u8 apidx);
3216
3217void RTMPCheckRates(struct rt_rtmp_adapter *pAd,
3218 IN u8 SupRate[], IN u8 *SupRateLen);
3219
3220BOOLEAN RTMPCheckChannel(struct rt_rtmp_adapter *pAd,
3221 u8 CentralChannel, u8 Channel);
3222
3223BOOLEAN RTMPCheckHt(struct rt_rtmp_adapter *pAd,
3224 u8 Wcid,
3225 struct rt_ht_capability_ie *pHtCapability,
3226 struct rt_add_ht_info_ie *pAddHtInfo);
3227
3228void StaQuickResponeForRateUpExec(void *SystemSpecific1,
3229 void *FunctionContext,
3230 void *SystemSpecific2,
3231 void *SystemSpecific3);
3232
3233void RTMPUpdateMlmeRate(struct rt_rtmp_adapter *pAd);
3234
3235char RTMPMaxRssi(struct rt_rtmp_adapter *pAd,
3236 char Rssi0, char Rssi1, char Rssi2);
3237
3238#ifdef RT30xx
3239void AsicSetRxAnt(struct rt_rtmp_adapter *pAd, u8 Ant);
3240
3241void RTMPFilterCalibration(struct rt_rtmp_adapter *pAd);
3242
3243#ifdef RTMP_EFUSE_SUPPORT
3244
3245int set_eFuseGetFreeBlockCount_Proc(struct rt_rtmp_adapter *pAd, char *arg);
3246
3247int set_eFusedump_Proc(struct rt_rtmp_adapter *pAd, char *arg);
3248
3249void eFusePhysicalReadRegisters(struct rt_rtmp_adapter *pAd,
3250 u16 Offset,
3251 u16 Length, u16 *pData);
3252
3253int RtmpEfuseSupportCheck(struct rt_rtmp_adapter *pAd);
3254
3255void eFuseGetFreeBlockCount(struct rt_rtmp_adapter *pAd, u32 *EfuseFreeBlock);
3256
3257int eFuse_init(struct rt_rtmp_adapter *pAd);
3258
3259#endif
3260
3261
3262void RT30xxLoadRFNormalModeSetup(struct rt_rtmp_adapter *pAd);
3263
3264void RT30xxLoadRFSleepModeSetup(struct rt_rtmp_adapter *pAd);
3265
3266void RT30xxReverseRFSleepModeSetup(struct rt_rtmp_adapter *pAd);
3267
3268
3269#ifdef RT3070
3270void NICInitRT3070RFRegisters(struct rt_rtmp_adapter *pAd);
3271#endif
3272#ifdef RT3090
3273void NICInitRT3090RFRegisters(struct rt_rtmp_adapter *pAd);
3274#endif
3275
3276void RT30xxHaltAction(struct rt_rtmp_adapter *pAd);
3277
3278void RT30xxSetRxAnt(struct rt_rtmp_adapter *pAd, u8 Ant);
3279#endif
3280
3281void AsicEvaluateRxAnt(struct rt_rtmp_adapter *pAd);
3282
3283void AsicRxAntEvalTimeout(void *SystemSpecific1,
3284 void *FunctionContext,
3285 void *SystemSpecific2, void *SystemSpecific3);
3286
3287void APSDPeriodicExec(void *SystemSpecific1,
3288 void *FunctionContext,
3289 void *SystemSpecific2, void *SystemSpecific3);
3290
3291BOOLEAN RTMPCheckEntryEnableAutoRateSwitch(struct rt_rtmp_adapter *pAd,
3292 struct rt_mac_table_entry *pEntry);
3293
3294u8 RTMPStaFixedTxMode(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry);
3295
3296void RTMPUpdateLegacyTxSetting(u8 fixed_tx_mode, struct rt_mac_table_entry *pEntry);
3297
3298BOOLEAN RTMPAutoRateSwitchCheck(struct rt_rtmp_adapter *pAd);
3299
3300int MlmeInit(struct rt_rtmp_adapter *pAd);
3301
3302void MlmeHandler(struct rt_rtmp_adapter *pAd);
3303
3304void MlmeHalt(struct rt_rtmp_adapter *pAd);
3305
3306void MlmeResetRalinkCounters(struct rt_rtmp_adapter *pAd);
3307
3308void BuildChannelList(struct rt_rtmp_adapter *pAd);
3309
3310u8 FirstChannel(struct rt_rtmp_adapter *pAd);
3311
3312u8 NextChannel(struct rt_rtmp_adapter *pAd, u8 channel);
3313
3314void ChangeToCellPowerLimit(struct rt_rtmp_adapter *pAd,
3315 u8 AironetCellPowerLimit);
3316
3317
3318
3319
3320void RTMPInitTkipEngine(struct rt_rtmp_adapter *pAd,
3321 u8 *pTKey,
3322 u8 KeyId,
3323 u8 *pTA,
3324 u8 *pMICKey,
3325 u8 *pTSC, unsigned long *pIV16, unsigned long *pIV32);
3326
3327void RTMPInitMICEngine(struct rt_rtmp_adapter *pAd,
3328 u8 *pKey,
3329 u8 *pDA,
3330 u8 *pSA, u8 UserPriority, u8 *pMICKey);
3331
3332BOOLEAN RTMPTkipCompareMICValue(struct rt_rtmp_adapter *pAd,
3333 u8 *pSrc,
3334 u8 *pDA,
3335 u8 *pSA,
3336 u8 *pMICKey,
3337 u8 UserPriority, u32 Len);
3338
3339void RTMPCalculateMICValue(struct rt_rtmp_adapter *pAd,
3340 void *pPacket,
3341 u8 *pEncap,
3342 struct rt_cipher_key *pKey, u8 apidx);
3343
3344void RTMPTkipAppendByte(struct rt_tkip_key_info *pTkip, u8 uChar);
3345
3346void RTMPTkipAppend(struct rt_tkip_key_info *pTkip, u8 *pSrc, u32 nBytes);
3347
3348void RTMPTkipGetMIC(struct rt_tkip_key_info *pTkip);
3349
3350BOOLEAN RTMPSoftDecryptTKIP(struct rt_rtmp_adapter *pAd,
3351 u8 *pData,
3352 unsigned long DataByteCnt,
3353 u8 UserPriority, struct rt_cipher_key *pWpaKey);
3354
3355BOOLEAN RTMPSoftDecryptAES(struct rt_rtmp_adapter *pAd,
3356 u8 *pData,
3357 unsigned long DataByteCnt, struct rt_cipher_key *pWpaKey);
3358
3359
3360
3361
3362int RT_CfgSetCountryRegion(struct rt_rtmp_adapter *pAd, char *arg, int band);
3363
3364int RT_CfgSetWirelessMode(struct rt_rtmp_adapter *pAd, char *arg);
3365
3366int RT_CfgSetShortSlot(struct rt_rtmp_adapter *pAd, char *arg);
3367
3368int RT_CfgSetWepKey(struct rt_rtmp_adapter *pAd,
3369 char *keyString,
3370 struct rt_cipher_key *pSharedKey, int keyIdx);
3371
3372int RT_CfgSetWPAPSKKey(struct rt_rtmp_adapter *pAd,
3373 char *keyString,
3374 u8 *pHashStr,
3375 int hashStrLen, u8 *pPMKBuf);
3376
3377
3378
3379
3380void RTMPWPARemoveAllKeys(struct rt_rtmp_adapter *pAd);
3381
3382void RTMPSetPhyMode(struct rt_rtmp_adapter *pAd, unsigned long phymode);
3383
3384void RTMPUpdateHTIE(struct rt_ht_capability *pRtHt,
3385 u8 *pMcsSet,
3386 struct rt_ht_capability_ie *pHtCapability,
3387 struct rt_add_ht_info_ie *pAddHtInfo);
3388
3389void RTMPAddWcidAttributeEntry(struct rt_rtmp_adapter *pAd,
3390 u8 BssIdx,
3391 u8 KeyIdx,
3392 u8 CipherAlg, struct rt_mac_table_entry *pEntry);
3393
3394char *GetEncryptType(char enc);
3395
3396char *GetAuthMode(char auth);
3397
3398void RTMPSetHT(struct rt_rtmp_adapter *pAd, struct rt_oid_set_ht_phymode *pHTPhyMode);
3399
3400void RTMPSetIndividualHT(struct rt_rtmp_adapter *pAd, u8 apidx);
3401
3402void RTMPSendWirelessEvent(struct rt_rtmp_adapter *pAd,
3403 u16 Event_flag,
3404 u8 *pAddr, u8 BssIdx, char Rssi);
3405
3406char ConvertToRssi(struct rt_rtmp_adapter *pAd, char Rssi, u8 RssiNumber);
3407
3408
3409
3410
3411void RTMPToWirelessSta(struct rt_rtmp_adapter *pAd,
3412 struct rt_mac_table_entry *pEntry,
3413 u8 *pHeader802_3,
3414 u32 HdrLen,
3415 u8 *pData,
3416 u32 DataLen, IN BOOLEAN bClearFrame);
3417
3418void WpaDerivePTK(struct rt_rtmp_adapter *pAd,
3419 u8 *PMK,
3420 u8 *ANonce,
3421 u8 *AA,
3422 u8 *SNonce,
3423 u8 *SA, u8 *output, u32 len);
3424
3425void GenRandom(struct rt_rtmp_adapter *pAd, u8 *macAddr, u8 *random);
3426
3427BOOLEAN RTMPCheckWPAframe(struct rt_rtmp_adapter *pAd,
3428 struct rt_mac_table_entry *pEntry,
3429 u8 *pData,
3430 unsigned long DataByteCount, u8 FromWhichBSSID);
3431
3432void AES_GTK_KEY_UNWRAP(u8 *key,
3433 u8 *plaintext,
3434 u32 c_len, u8 *ciphertext);
3435
3436BOOLEAN RTMPParseEapolKeyData(struct rt_rtmp_adapter *pAd,
3437 u8 *pKeyData,
3438 u8 KeyDataLen,
3439 u8 GroupKeyIndex,
3440 u8 MsgType,
3441 IN BOOLEAN bWPA2, struct rt_mac_table_entry *pEntry);
3442
3443void ConstructEapolMsg(struct rt_mac_table_entry *pEntry,
3444 u8 GroupKeyWepStatus,
3445 u8 MsgType,
3446 u8 DefaultKeyIdx,
3447 u8 *KeyNonce,
3448 u8 *TxRSC,
3449 u8 *GTK,
3450 u8 *RSNIE,
3451 u8 RSNIE_Len, struct rt_eapol_packet *pMsg);
3452
3453int RTMPSoftDecryptBroadCastData(struct rt_rtmp_adapter *pAd,
3454 struct rt_rx_blk *pRxBlk,
3455 IN NDIS_802_11_ENCRYPTION_STATUS
3456 GroupCipher,
3457 struct rt_cipher_key *pShard_key);
3458
3459void RTMPMakeRSNIE(struct rt_rtmp_adapter *pAd,
3460 u32 AuthMode, u32 WepStatus, u8 apidx);
3461
3462
3463
3464
3465void RTMPGetTxTscFromAsic(struct rt_rtmp_adapter *pAd,
3466 u8 apidx, u8 *pTxTsc);
3467
3468void APInstallPairwiseKey(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry);
3469
3470u32 APValidateRSNIE(struct rt_rtmp_adapter *pAd,
3471 struct rt_mac_table_entry *pEntry,
3472 u8 *pRsnIe, u8 rsnie_len);
3473
3474void HandleCounterMeasure(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry);
3475
3476void WPAStart4WayHS(struct rt_rtmp_adapter *pAd,
3477 struct rt_mac_table_entry *pEntry, unsigned long TimeInterval);
3478
3479void WPAStart2WayGroupHS(struct rt_rtmp_adapter *pAd, struct rt_mac_table_entry *pEntry);
3480
3481void PeerPairMsg1Action(struct rt_rtmp_adapter *pAd,
3482 struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem);
3483
3484void PeerPairMsg2Action(struct rt_rtmp_adapter *pAd,
3485 struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem);
3486
3487void PeerPairMsg3Action(struct rt_rtmp_adapter *pAd,
3488 struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem);
3489
3490void PeerPairMsg4Action(struct rt_rtmp_adapter *pAd,
3491 struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem);
3492
3493void PeerGroupMsg1Action(struct rt_rtmp_adapter *pAd,
3494 struct rt_mac_table_entry *pEntry, struct rt_mlme_queue_elem *Elem);
3495
3496void PeerGroupMsg2Action(struct rt_rtmp_adapter *pAd,
3497 struct rt_mac_table_entry *pEntry,
3498 void *Msg, u32 MsgLen);
3499
3500void WpaDeriveGTK(u8 *PMK,
3501 u8 *GNonce,
3502 u8 *AA, u8 *output, u32 len);
3503
3504void AES_GTK_KEY_WRAP(u8 *key,
3505 u8 *plaintext,
3506 u32 p_len, u8 *ciphertext);
3507
3508
3509
3510
3511void RTMP_SetPeriodicTimer(struct timer_list *pTimer,
3512 IN unsigned long timeout);
3513
3514void RTMP_OS_Init_Timer(struct rt_rtmp_adapter *pAd,
3515 struct timer_list *pTimer,
3516 IN TIMER_FUNCTION function, void *data);
3517
3518void RTMP_OS_Add_Timer(struct timer_list *pTimer,
3519 IN unsigned long timeout);
3520
3521void RTMP_OS_Mod_Timer(struct timer_list *pTimer,
3522 IN unsigned long timeout);
3523
3524void RTMP_OS_Del_Timer(struct timer_list *pTimer,
3525 OUT BOOLEAN *pCancelled);
3526
3527void RTMP_OS_Release_Packet(struct rt_rtmp_adapter *pAd, struct rt_queue_entry *pEntry);
3528
3529void RTMPusecDelay(unsigned long usec);
3530
3531int os_alloc_mem(struct rt_rtmp_adapter *pAd,
3532 u8 **mem, unsigned long size);
3533
3534int os_free_mem(struct rt_rtmp_adapter *pAd, void *mem);
3535
3536void RTMP_AllocateSharedMemory(struct rt_rtmp_adapter *pAd,
3537 unsigned long Length,
3538 IN BOOLEAN Cached,
3539 void **VirtualAddress,
3540 dma_addr_t *PhysicalAddress);
3541
3542void RTMPFreeTxRxRingMemory(struct rt_rtmp_adapter *pAd);
3543
3544int AdapterBlockAllocateMemory(void *handle, void **ppAd);
3545
3546void RTMP_AllocateTxDescMemory(struct rt_rtmp_adapter *pAd,
3547 u32 Index,
3548 unsigned long Length,
3549 IN BOOLEAN Cached,
3550 void **VirtualAddress,
3551 dma_addr_t *PhysicalAddress);
3552
3553void RTMP_AllocateFirstTxBuffer(struct rt_rtmp_adapter *pAd,
3554 u32 Index,
3555 unsigned long Length,
3556 IN BOOLEAN Cached,
3557 void **VirtualAddress,
3558 dma_addr_t *PhysicalAddress);
3559
3560void RTMP_FreeFirstTxBuffer(struct rt_rtmp_adapter *pAd,
3561 unsigned long Length,
3562 IN BOOLEAN Cached,
3563 void *VirtualAddress,
3564 dma_addr_t PhysicalAddress);
3565
3566void RTMP_AllocateMgmtDescMemory(struct rt_rtmp_adapter *pAd,
3567 unsigned long Length,
3568 IN BOOLEAN Cached,
3569 void **VirtualAddress,
3570 dma_addr_t *PhysicalAddress);
3571
3572void RTMP_AllocateRxDescMemory(struct rt_rtmp_adapter *pAd,
3573 unsigned long Length,
3574 IN BOOLEAN Cached,
3575 void **VirtualAddress,
3576 dma_addr_t *PhysicalAddress);
3577
3578void RTMP_FreeDescMemory(struct rt_rtmp_adapter *pAd,
3579 unsigned long Length,
3580 void *VirtualAddress,
3581 dma_addr_t PhysicalAddress);
3582
3583void *RtmpOSNetPktAlloc(struct rt_rtmp_adapter *pAd, IN int size);
3584
3585void *RTMP_AllocateRxPacketBuffer(struct rt_rtmp_adapter *pAd,
3586 unsigned long Length,
3587 IN BOOLEAN Cached,
3588 void **VirtualAddress,
3589 OUT dma_addr_t *PhysicalAddress);
3590
3591void *RTMP_AllocateTxPacketBuffer(struct rt_rtmp_adapter *pAd,
3592 unsigned long Length,
3593 IN BOOLEAN Cached,
3594 void **VirtualAddress);
3595
3596void *RTMP_AllocateFragPacketBuffer(struct rt_rtmp_adapter *pAd,
3597 unsigned long Length);
3598
3599void RTMP_QueryPacketInfo(void *pPacket,
3600 struct rt_packet_info *pPacketInfo,
3601 u8 **pSrcBufVA, u32 *pSrcBufLen);
3602
3603void RTMP_QueryNextPacketInfo(void **ppPacket,
3604 struct rt_packet_info *pPacketInfo,
3605 u8 **pSrcBufVA, u32 *pSrcBufLen);
3606
3607BOOLEAN RTMP_FillTxBlkInfo(struct rt_rtmp_adapter *pAd, struct rt_tx_blk *pTxBlk);
3608
3609struct rt_rtmp_sg_list *rt_get_sg_list_from_packet(void *pPacket,
3610 struct rt_rtmp_sg_list *sg);
3611
3612void announce_802_3_packet(struct rt_rtmp_adapter *pAd, void *pPacket);
3613
3614u32 BA_Reorder_AMSDU_Annnounce(struct rt_rtmp_adapter *pAd, void *pPacket);
3615
3616struct net_device *get_netdev_from_bssid(struct rt_rtmp_adapter *pAd, u8 FromWhichBSSID);
3617
3618void *duplicate_pkt(struct rt_rtmp_adapter *pAd,
3619 u8 *pHeader802_3,
3620 u32 HdrLen,
3621 u8 *pData,
3622 unsigned long DataSize, u8 FromWhichBSSID);
3623
3624void *duplicate_pkt_with_TKIP_MIC(struct rt_rtmp_adapter *pAd,
3625 void *pOldPkt);
3626
3627void ba_flush_reordering_timeout_mpdus(struct rt_rtmp_adapter *pAd,
3628 struct rt_ba_rec_entry *pBAEntry,
3629 unsigned long Now32);
3630
3631void BAOriSessionSetUp(struct rt_rtmp_adapter *pAd,
3632 struct rt_mac_table_entry *pEntry,
3633 u8 TID,
3634 u16 TimeOut,
3635 unsigned long DelayTime, IN BOOLEAN isForced);
3636
3637void BASessionTearDownALL(struct rt_rtmp_adapter *pAd, u8 Wcid);
3638
3639BOOLEAN OS_Need_Clone_Packet(void);
3640
3641void build_tx_packet(struct rt_rtmp_adapter *pAd,
3642 void *pPacket,
3643 u8 *pFrame, unsigned long FrameLen);
3644
3645void BAOriSessionTearDown(struct rt_rtmp_adapter *pAd,
3646 u8 Wcid,
3647 u8 TID,
3648 IN BOOLEAN bPassive, IN BOOLEAN bForceSend);
3649
3650void BARecSessionTearDown(struct rt_rtmp_adapter *pAd,
3651 u8 Wcid, u8 TID, IN BOOLEAN bPassive);
3652
3653BOOLEAN ba_reordering_resource_init(struct rt_rtmp_adapter *pAd, int num);
3654void ba_reordering_resource_release(struct rt_rtmp_adapter *pAd);
3655
3656char *rstrtok(char *s, IN const char *ct);
3657
3658
3659int SetCommonHT(struct rt_rtmp_adapter *pAd);
3660
3661int WpaCheckEapCode(struct rt_rtmp_adapter *pAd,
3662 u8 *pFrame, u16 FrameLen, u16 OffSet);
3663
3664void WpaSendMicFailureToWpaSupplicant(struct rt_rtmp_adapter *pAd,
3665 IN BOOLEAN bUnicast);
3666
3667int wext_notify_event_assoc(struct rt_rtmp_adapter *pAd);
3668
3669BOOLEAN STARxDoneInterruptHandle(struct rt_rtmp_adapter *pAd, IN BOOLEAN argc);
3670
3671
3672void Indicate_AMPDU_Packet(struct rt_rtmp_adapter *pAd,
3673 struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID);
3674
3675
3676void Indicate_AMSDU_Packet(struct rt_rtmp_adapter *pAd,
3677 struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID);
3678
3679
3680void Indicate_Legacy_Packet(struct rt_rtmp_adapter *pAd,
3681 struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID);
3682
3683void Indicate_EAPOL_Packet(struct rt_rtmp_adapter *pAd,
3684 struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID);
3685
3686void update_os_packet_info(struct rt_rtmp_adapter *pAd,
3687 struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID);
3688
3689void wlan_802_11_to_802_3_packet(struct rt_rtmp_adapter *pAd,
3690 struct rt_rx_blk *pRxBlk,
3691 u8 *pHeader802_3,
3692 u8 FromWhichBSSID);
3693
3694
3695#define RTMP_802_11_REMOVE_LLC_AND_CONVERT_TO_802_3(_pRxBlk, _pHeader802_3) \
3696{ \
3697 u8 *_pRemovedLLCSNAP = NULL, *_pDA, *_pSA; \
3698 \
3699 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_MESH)) { \
3700 _pDA = _pRxBlk->pHeader->Addr3; \
3701 _pSA = (u8 *)_pRxBlk->pHeader + sizeof(struct rt_header_802_11); \
3702 } \
3703 else {\
3704 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_INFRA)) {\
3705 _pDA = _pRxBlk->pHeader->Addr1; \
3706 if (RX_BLK_TEST_FLAG(_pRxBlk, fRX_DLS)) \
3707 _pSA = _pRxBlk->pHeader->Addr2; \
3708 else \
3709 _pSA = _pRxBlk->pHeader->Addr3; \
3710 } \
3711 else { \
3712 _pDA = _pRxBlk->pHeader->Addr1; \
3713 _pSA = _pRxBlk->pHeader->Addr2; \
3714 } \
3715 } \
3716 \
3717 CONVERT_TO_802_3(_pHeader802_3, _pDA, _pSA, _pRxBlk->pData, \
3718 _pRxBlk->DataSize, _pRemovedLLCSNAP); \
3719}
3720
3721void Sta_Announce_or_Forward_802_3_Packet(struct rt_rtmp_adapter *pAd,
3722 void *pPacket,
3723 u8 FromWhichBSSID);
3724
3725#define ANNOUNCE_OR_FORWARD_802_3_PACKET(_pAd, _pPacket, _FromWhichBSS)\
3726 Sta_Announce_or_Forward_802_3_Packet(_pAd, _pPacket, _FromWhichBSS);
3727
3728
3729void *DuplicatePacket(struct rt_rtmp_adapter *pAd,
3730 void *pPacket, u8 FromWhichBSSID);
3731
3732void *ClonePacket(struct rt_rtmp_adapter *pAd,
3733 void *pPacket,
3734 u8 *pData, unsigned long DataSize);
3735
3736
3737void CmmRxnonRalinkFrameIndicate(struct rt_rtmp_adapter *pAd,
3738 struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID);
3739
3740void CmmRxRalinkFrameIndicate(struct rt_rtmp_adapter *pAd,
3741 struct rt_mac_table_entry *pEntry,
3742 struct rt_rx_blk *pRxBlk, u8 FromWhichBSSID);
3743
3744void Update_Rssi_Sample(struct rt_rtmp_adapter *pAd,
3745 struct rt_rssi_sample *pRssi, struct rt_rxwi * pRxWI);
3746
3747void *GetPacketFromRxRing(struct rt_rtmp_adapter *pAd,
3748 OUT PRT28XX_RXD_STRUC pSaveRxD,
3749 OUT BOOLEAN *pbReschedule,
3750 IN u32 *pRxPending);
3751
3752void *RTMPDeFragmentDataFrame(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk);
3753
3754enum {
3755 DIDmsg_lnxind_wlansniffrm = 0x00000044,
3756 DIDmsg_lnxind_wlansniffrm_hosttime = 0x00010044,
3757 DIDmsg_lnxind_wlansniffrm_mactime = 0x00020044,
3758 DIDmsg_lnxind_wlansniffrm_channel = 0x00030044,
3759 DIDmsg_lnxind_wlansniffrm_rssi = 0x00040044,
3760 DIDmsg_lnxind_wlansniffrm_sq = 0x00050044,
3761 DIDmsg_lnxind_wlansniffrm_signal = 0x00060044,
3762 DIDmsg_lnxind_wlansniffrm_noise = 0x00070044,
3763 DIDmsg_lnxind_wlansniffrm_rate = 0x00080044,
3764 DIDmsg_lnxind_wlansniffrm_istx = 0x00090044,
3765 DIDmsg_lnxind_wlansniffrm_frmlen = 0x000A0044
3766};
3767enum {
3768 P80211ENUM_msgitem_status_no_value = 0x00
3769};
3770enum {
3771 P80211ENUM_truth_false = 0x00,
3772 P80211ENUM_truth_true = 0x01
3773};
3774
3775
3776struct rt_p80211item_uint32 {
3777 u32 did;
3778 u16 status;
3779 u16 len;
3780 u32 data;
3781};
3782
3783struct rt_wlan_ng_prism2_header {
3784 u32 msgcode;
3785 u32 msglen;
3786#define WLAN_DEVNAMELEN_MAX 16
3787 u8 devname[WLAN_DEVNAMELEN_MAX];
3788 struct rt_p80211item_uint32 hosttime;
3789 struct rt_p80211item_uint32 mactime;
3790 struct rt_p80211item_uint32 channel;
3791 struct rt_p80211item_uint32 rssi;
3792 struct rt_p80211item_uint32 sq;
3793 struct rt_p80211item_uint32 signal;
3794 struct rt_p80211item_uint32 noise;
3795 struct rt_p80211item_uint32 rate;
3796 struct rt_p80211item_uint32 istx;
3797 struct rt_p80211item_uint32 frmlen;
3798};
3799
3800
3801struct PACKED rt_ieee80211_radiotap_header {
3802 u8 it_version;
3803
3804
3805
3806
3807 u8 it_pad;
3808 u16 it_len;
3809
3810
3811
3812
3813 u32 it_present;
3814
3815
3816
3817
3818
3819
3820};
3821
3822enum ieee80211_radiotap_type {
3823 IEEE80211_RADIOTAP_TSFT = 0,
3824 IEEE80211_RADIOTAP_FLAGS = 1,
3825 IEEE80211_RADIOTAP_RATE = 2,
3826 IEEE80211_RADIOTAP_CHANNEL = 3,
3827 IEEE80211_RADIOTAP_FHSS = 4,
3828 IEEE80211_RADIOTAP_DBM_ANTSIGNAL = 5,
3829 IEEE80211_RADIOTAP_DBM_ANTNOISE = 6,
3830 IEEE80211_RADIOTAP_LOCK_QUALITY = 7,
3831 IEEE80211_RADIOTAP_TX_ATTENUATION = 8,
3832 IEEE80211_RADIOTAP_DB_TX_ATTENUATION = 9,
3833 IEEE80211_RADIOTAP_DBM_TX_POWER = 10,
3834 IEEE80211_RADIOTAP_ANTENNA = 11,
3835 IEEE80211_RADIOTAP_DB_ANTSIGNAL = 12,
3836 IEEE80211_RADIOTAP_DB_ANTNOISE = 13
3837};
3838
3839#define WLAN_RADIOTAP_PRESENT ( \
3840 (1 << IEEE80211_RADIOTAP_TSFT) | \
3841 (1 << IEEE80211_RADIOTAP_FLAGS) | \
3842 (1 << IEEE80211_RADIOTAP_RATE) | \
3843 0)
3844
3845struct rt_wlan_radiotap_header {
3846 struct rt_ieee80211_radiotap_header wt_ihdr;
3847 long long wt_tsft;
3848 u8 wt_flags;
3849 u8 wt_rate;
3850};
3851
3852
3853void send_monitor_packets(struct rt_rtmp_adapter *pAd, struct rt_rx_blk *pRxBlk);
3854
3855void RTMPSetDesiredRates(struct rt_rtmp_adapter *pAdapter, long Rates);
3856
3857int Set_FixedTxMode_Proc(struct rt_rtmp_adapter *pAd, char *arg);
3858
3859BOOLEAN RT28XXChipsetCheck(IN void *_dev_p);
3860
3861void RT28XXDMADisable(struct rt_rtmp_adapter *pAd);
3862
3863void RT28XXDMAEnable(struct rt_rtmp_adapter *pAd);
3864
3865void RT28xx_UpdateBeaconToAsic(struct rt_rtmp_adapter *pAd,
3866 int apidx,
3867 unsigned long BeaconLen, unsigned long UpdatePos);
3868
3869int rt28xx_init(struct rt_rtmp_adapter *pAd,
3870 char *pDefaultMac, char *pHostName);
3871
3872int RtmpNetTaskInit(struct rt_rtmp_adapter *pAd);
3873
3874void RtmpNetTaskExit(struct rt_rtmp_adapter *pAd);
3875
3876int RtmpMgmtTaskInit(struct rt_rtmp_adapter *pAd);
3877
3878void RtmpMgmtTaskExit(struct rt_rtmp_adapter *pAd);
3879
3880void tbtt_tasklet(unsigned long data);
3881
3882struct net_device *RtmpPhyNetDevInit(struct rt_rtmp_adapter *pAd,
3883 struct rt_rtmp_os_netdev_op_hook *pNetHook);
3884
3885BOOLEAN RtmpPhyNetDevExit(struct rt_rtmp_adapter *pAd, struct net_device *net_dev);
3886
3887int RtmpRaDevCtrlInit(struct rt_rtmp_adapter *pAd, IN RTMP_INF_TYPE infType);
3888
3889BOOLEAN RtmpRaDevCtrlExit(struct rt_rtmp_adapter *pAd);
3890
3891#ifdef RTMP_MAC_PCI
3892
3893
3894
3895u16 RtmpPCI_WriteTxResource(struct rt_rtmp_adapter *pAd,
3896 struct rt_tx_blk *pTxBlk,
3897 IN BOOLEAN bIsLast, u16 *FreeNumber);
3898
3899u16 RtmpPCI_WriteSingleTxResource(struct rt_rtmp_adapter *pAd,
3900 struct rt_tx_blk *pTxBlk,
3901 IN BOOLEAN bIsLast,
3902 u16 *FreeNumber);
3903
3904u16 RtmpPCI_WriteMultiTxResource(struct rt_rtmp_adapter *pAd,
3905 struct rt_tx_blk *pTxBlk,
3906 u8 frameNum, u16 *FreeNumber);
3907
3908u16 RtmpPCI_WriteFragTxResource(struct rt_rtmp_adapter *pAd,
3909 struct rt_tx_blk *pTxBlk,
3910 u8 fragNum, u16 *FreeNumber);
3911
3912u16 RtmpPCI_WriteSubTxResource(struct rt_rtmp_adapter *pAd,
3913 struct rt_tx_blk *pTxBlk,
3914 IN BOOLEAN bIsLast, u16 *FreeNumber);
3915
3916void RtmpPCI_FinalWriteTxResource(struct rt_rtmp_adapter *pAd,
3917 struct rt_tx_blk *pTxBlk,
3918 u16 totalMPDUSize,
3919 u16 FirstTxIdx);
3920
3921void RtmpPCIDataLastTxIdx(struct rt_rtmp_adapter *pAd,
3922 u8 QueIdx, u16 LastTxIdx);
3923
3924void RtmpPCIDataKickOut(struct rt_rtmp_adapter *pAd,
3925 struct rt_tx_blk *pTxBlk, u8 QueIdx);
3926
3927int RtmpPCIMgmtKickOut(struct rt_rtmp_adapter *pAd,
3928 u8 QueIdx,
3929 void *pPacket,
3930 u8 *pSrcBufVA, u32 SrcBufLen);
3931
3932int RTMPCheckRxError(struct rt_rtmp_adapter *pAd,
3933 struct rt_header_802_11 *pHeader,
3934 struct rt_rxwi *pRxWI, IN PRT28XX_RXD_STRUC pRxD);
3935
3936BOOLEAN RT28xxPciAsicRadioOff(struct rt_rtmp_adapter *pAd,
3937 u8 Level, u16 TbttNumToNextWakeUp);
3938
3939BOOLEAN RT28xxPciAsicRadioOn(struct rt_rtmp_adapter *pAd, u8 Level);
3940
3941void RTMPInitPCIeLinkCtrlValue(struct rt_rtmp_adapter *pAd);
3942
3943void RTMPFindHostPCIDev(struct rt_rtmp_adapter *pAd);
3944
3945void RTMPPCIeLinkCtrlValueRestore(struct rt_rtmp_adapter *pAd, u8 Level);
3946
3947void RTMPPCIeLinkCtrlSetting(struct rt_rtmp_adapter *pAd, u16 Max);
3948
3949void RTMPrt3xSetPCIePowerLinkCtrl(struct rt_rtmp_adapter *pAd);
3950
3951void PsPollWakeExec(void *SystemSpecific1,
3952 void *FunctionContext,
3953 void *SystemSpecific2, void *SystemSpecific3);
3954
3955void RadioOnExec(void *SystemSpecific1,
3956 void *FunctionContext,
3957 void *SystemSpecific2, void *SystemSpecific3);
3958
3959void RT28xxPciStaAsicForceWakeup(struct rt_rtmp_adapter *pAd, IN BOOLEAN bFromTx);
3960
3961void RT28xxPciStaAsicSleepThenAutoWakeup(struct rt_rtmp_adapter *pAd,
3962 u16 TbttNumToNextWakeUp);
3963
3964void RT28xxPciMlmeRadioOn(struct rt_rtmp_adapter *pAd);
3965
3966void RT28xxPciMlmeRadioOFF(struct rt_rtmp_adapter *pAd);
3967#endif
3968
3969#ifdef RTMP_MAC_USB
3970
3971
3972
3973void RTUSBInitTxDesc(struct rt_rtmp_adapter *pAd,
3974 struct rt_tx_context *pTxContext,
3975 u8 BulkOutPipeId, IN usb_complete_t Func);
3976
3977void RTUSBInitHTTxDesc(struct rt_rtmp_adapter *pAd,
3978 struct rt_ht_tx_context *pTxContext,
3979 u8 BulkOutPipeId,
3980 unsigned long BulkOutSize, IN usb_complete_t Func);
3981
3982void RTUSBInitRxDesc(struct rt_rtmp_adapter *pAd, struct rt_rx_context *pRxContext);
3983
3984void RTUSBCleanUpDataBulkOutQueue(struct rt_rtmp_adapter *pAd);
3985
3986void RTUSBCancelPendingBulkOutIRP(struct rt_rtmp_adapter *pAd);
3987
3988void RTUSBBulkOutDataPacket(struct rt_rtmp_adapter *pAd,
3989 u8 BulkOutPipeId, u8 Index);
3990
3991void RTUSBBulkOutNullFrame(struct rt_rtmp_adapter *pAd);
3992
3993void RTUSBBulkOutRTSFrame(struct rt_rtmp_adapter *pAd);
3994
3995void RTUSBCancelPendingBulkInIRP(struct rt_rtmp_adapter *pAd);
3996
3997void RTUSBCancelPendingIRPs(struct rt_rtmp_adapter *pAd);
3998
3999void RTUSBBulkOutMLMEPacket(struct rt_rtmp_adapter *pAd, u8 Index);
4000
4001void RTUSBBulkOutPsPoll(struct rt_rtmp_adapter *pAd);
4002
4003void RTUSBCleanUpMLMEBulkOutQueue(struct rt_rtmp_adapter *pAd);
4004
4005void RTUSBKickBulkOut(struct rt_rtmp_adapter *pAd);
4006
4007void RTUSBBulkReceive(struct rt_rtmp_adapter *pAd);
4008
4009void DoBulkIn(struct rt_rtmp_adapter *pAd);
4010
4011void RTUSBInitRxDesc(struct rt_rtmp_adapter *pAd, struct rt_rx_context *pRxContext);
4012
4013void RTUSBBulkRxHandle(IN unsigned long data);
4014
4015
4016
4017
4018int RTUSBMultiRead(struct rt_rtmp_adapter *pAd,
4019 u16 Offset, u8 *pData, u16 length);
4020
4021int RTUSBMultiWrite(struct rt_rtmp_adapter *pAd,
4022 u16 Offset, const u8 *pData, u16 length);
4023
4024int RTUSBMultiWrite_OneByte(struct rt_rtmp_adapter *pAd,
4025 u16 Offset, const u8 *pData);
4026
4027int RTUSBReadBBPRegister(struct rt_rtmp_adapter *pAd,
4028 u8 Id, u8 *pValue);
4029
4030int RTUSBWriteBBPRegister(struct rt_rtmp_adapter *pAd,
4031 u8 Id, u8 Value);
4032
4033int RTUSBWriteRFRegister(struct rt_rtmp_adapter *pAd, u32 Value);
4034
4035int RTUSB_VendorRequest(struct rt_rtmp_adapter *pAd,
4036 u32 TransferFlags,
4037 u8 ReservedBits,
4038 u8 Request,
4039 u16 Value,
4040 u16 Index,
4041 void *TransferBuffer,
4042 u32 TransferBufferLength);
4043
4044int RTUSBReadEEPROM(struct rt_rtmp_adapter *pAd,
4045 u16 Offset, u8 *pData, u16 length);
4046
4047int RTUSBWriteEEPROM(struct rt_rtmp_adapter *pAd,
4048 u16 Offset, u8 *pData, u16 length);
4049
4050void RTUSBPutToSleep(struct rt_rtmp_adapter *pAd);
4051
4052int RTUSBWakeUp(struct rt_rtmp_adapter *pAd);
4053
4054void RTUSBInitializeCmdQ(struct rt_cmdq *cmdq);
4055
4056int RTUSBEnqueueCmdFromNdis(struct rt_rtmp_adapter *pAd,
4057 IN NDIS_OID Oid,
4058 IN BOOLEAN SetInformation,
4059 void *pInformationBuffer,
4060 u32 InformationBufferLength);
4061
4062int RTUSBEnqueueInternalCmd(struct rt_rtmp_adapter *pAd,
4063 IN NDIS_OID Oid,
4064 void *pInformationBuffer,
4065 u32 InformationBufferLength);
4066
4067void RTUSBDequeueCmd(struct rt_cmdq *cmdq, struct rt_cmdqelmt * * pcmdqelmt);
4068
4069int RTUSBCmdThread(IN void *Context);
4070
4071void RTUSBBssBeaconExit(struct rt_rtmp_adapter *pAd);
4072
4073void RTUSBBssBeaconStop(struct rt_rtmp_adapter *pAd);
4074
4075void RTUSBBssBeaconStart(struct rt_rtmp_adapter *pAd);
4076
4077void RTUSBBssBeaconInit(struct rt_rtmp_adapter *pAd);
4078
4079void RTUSBWatchDog(struct rt_rtmp_adapter *pAd);
4080
4081int RTUSBWriteMACRegister(struct rt_rtmp_adapter *pAd,
4082 u16 Offset, u32 Value);
4083
4084int RTUSBReadMACRegister(struct rt_rtmp_adapter *pAd,
4085 u16 Offset, u32 *pValue);
4086
4087int RTUSBSingleWrite(struct rt_rtmp_adapter *pAd,
4088 u16 Offset, u16 Value);
4089
4090int RTUSBFirmwareWrite(struct rt_rtmp_adapter *pAd,
4091 const u8 *pFwImage, unsigned long FwLen);
4092
4093int RTUSBVenderReset(struct rt_rtmp_adapter *pAd);
4094
4095int RTUSBSetHardWareRegister(struct rt_rtmp_adapter *pAdapter, void *pBuf);
4096
4097int RTUSBQueryHardWareRegister(struct rt_rtmp_adapter *pAdapter,
4098 void *pBuf);
4099
4100void CMDHandler(struct rt_rtmp_adapter *pAd);
4101
4102int RTUSBWriteHWMACAddress(struct rt_rtmp_adapter *pAdapter);
4103
4104void MacTableInitialize(struct rt_rtmp_adapter *pAd);
4105
4106void MlmeSetPsm(struct rt_rtmp_adapter *pAd, u16 psm);
4107
4108int RTMPWPAAddKeyProc(struct rt_rtmp_adapter *pAd, void *pBuf);
4109
4110void AsicRxAntEvalAction(struct rt_rtmp_adapter *pAd);
4111
4112void append_pkt(struct rt_rtmp_adapter *pAd,
4113 u8 *pHeader802_3,
4114 u32 HdrLen,
4115 u8 *pData,
4116 unsigned long DataSize, void **ppPacket);
4117
4118u32 deaggregate_AMSDU_announce(struct rt_rtmp_adapter *pAd,
4119 void *pPacket,
4120 u8 *pData, unsigned long DataSize);
4121
4122int RTMPCheckRxError(struct rt_rtmp_adapter *pAd,
4123 struct rt_header_802_11 *pHeader,
4124 struct rt_rxwi *pRxWI,
4125 IN PRT28XX_RXD_STRUC pRxINFO);
4126
4127void RTUSBMlmeHardTransmit(struct rt_rtmp_adapter *pAd, struct rt_mgmt *pMgmt);
4128
4129int MlmeThread(void *Context);
4130
4131
4132
4133
4134int RTUSBFreeDescriptorRequest(struct rt_rtmp_adapter *pAd,
4135 u8 BulkOutPipeId,
4136 u32 NumberRequired);
4137
4138BOOLEAN RTUSBNeedQueueBackForAgg(struct rt_rtmp_adapter *pAd, u8 BulkOutPipeId);
4139
4140void RTMPWriteTxInfo(struct rt_rtmp_adapter *pAd,
4141 struct rt_txinfo *pTxInfo,
4142 u16 USBDMApktLen,
4143 IN BOOLEAN bWiv,
4144 u8 QueueSel, u8 NextValid, u8 TxBurst);
4145
4146
4147
4148
4149u16 RtmpUSB_WriteSubTxResource(struct rt_rtmp_adapter *pAd,
4150 struct rt_tx_blk *pTxBlk,
4151 IN BOOLEAN bIsLast, u16 *FreeNumber);
4152
4153u16 RtmpUSB_WriteSingleTxResource(struct rt_rtmp_adapter *pAd,
4154 struct rt_tx_blk *pTxBlk,
4155 IN BOOLEAN bIsLast,
4156 u16 *FreeNumber);
4157
4158u16 RtmpUSB_WriteFragTxResource(struct rt_rtmp_adapter *pAd,
4159 struct rt_tx_blk *pTxBlk,
4160 u8 fragNum, u16 *FreeNumber);
4161
4162u16 RtmpUSB_WriteMultiTxResource(struct rt_rtmp_adapter *pAd,
4163 struct rt_tx_blk *pTxBlk,
4164 u8 frameNum, u16 *FreeNumber);
4165
4166void RtmpUSB_FinalWriteTxResource(struct rt_rtmp_adapter *pAd,
4167 struct rt_tx_blk *pTxBlk,
4168 u16 totalMPDUSize, u16 TxIdx);
4169
4170void RtmpUSBDataLastTxIdx(struct rt_rtmp_adapter *pAd,
4171 u8 QueIdx, u16 TxIdx);
4172
4173void RtmpUSBDataKickOut(struct rt_rtmp_adapter *pAd,
4174 struct rt_tx_blk *pTxBlk, u8 QueIdx);
4175
4176int RtmpUSBMgmtKickOut(struct rt_rtmp_adapter *pAd,
4177 u8 QueIdx,
4178 void *pPacket,
4179 u8 *pSrcBufVA, u32 SrcBufLen);
4180
4181void RtmpUSBNullFrameKickOut(struct rt_rtmp_adapter *pAd,
4182 u8 QueIdx,
4183 u8 *pNullFrame, u32 frameLen);
4184
4185void RtmpUsbStaAsicForceWakeupTimeout(void *SystemSpecific1,
4186 void *FunctionContext,
4187 void *SystemSpecific2,
4188 void *SystemSpecific3);
4189
4190void RT28xxUsbStaAsicForceWakeup(struct rt_rtmp_adapter *pAd, IN BOOLEAN bFromTx);
4191
4192void RT28xxUsbStaAsicSleepThenAutoWakeup(struct rt_rtmp_adapter *pAd,
4193 u16 TbttNumToNextWakeUp);
4194
4195void RT28xxUsbMlmeRadioOn(struct rt_rtmp_adapter *pAd);
4196
4197void RT28xxUsbMlmeRadioOFF(struct rt_rtmp_adapter *pAd);
4198#endif
4199
4200void AsicTurnOffRFClk(struct rt_rtmp_adapter *pAd, u8 Channel);
4201
4202void AsicTurnOnRFClk(struct rt_rtmp_adapter *pAd, u8 Channel);
4203
4204#ifdef RTMP_TIMER_TASK_SUPPORT
4205int RtmpTimerQThread(IN void *Context);
4206
4207struct rt_rtmp_timer_task_entry *RtmpTimerQInsert(struct rt_rtmp_adapter *pAd,
4208 struct rt_ralink_timer *pTimer);
4209
4210BOOLEAN RtmpTimerQRemove(struct rt_rtmp_adapter *pAd,
4211 struct rt_ralink_timer *pTimer);
4212
4213void RtmpTimerQExit(struct rt_rtmp_adapter *pAd);
4214
4215void RtmpTimerQInit(struct rt_rtmp_adapter *pAd);
4216#endif
4217
4218void AsicStaBbpTuning(struct rt_rtmp_adapter *pAd);
4219
4220BOOLEAN StaAddMacTableEntry(struct rt_rtmp_adapter *pAd,
4221 struct rt_mac_table_entry *pEntry,
4222 u8 MaxSupportedRateIn500Kbps,
4223 struct rt_ht_capability_ie *pHtCapability,
4224 u8 HtCapabilityLen,
4225 struct rt_add_ht_info_ie *pAddHtInfo,
4226 u8 AddHtInfoLen, u16 CapabilityInfo);
4227
4228BOOLEAN AUTH_ReqSend(struct rt_rtmp_adapter *pAd,
4229 struct rt_mlme_queue_elem *pElem,
4230 struct rt_ralink_timer *pAuthTimer,
4231 char *pSMName,
4232 u16 SeqNo,
4233 u8 *pNewElement, unsigned long ElementLen);
4234
4235void RTMP_IndicateMediaState(struct rt_rtmp_adapter *pAd);
4236
4237void ReSyncBeaconTime(struct rt_rtmp_adapter *pAd);
4238
4239void RTMPSetAGCInitValue(struct rt_rtmp_adapter *pAd, u8 BandWidth);
4240
4241int rt28xx_close(struct net_device *dev);
4242int rt28xx_open(struct net_device *dev);
4243
4244#define VIRTUAL_IF_INC(__pAd) ((__pAd)->VirtualIfCnt++)
4245#define VIRTUAL_IF_DEC(__pAd) ((__pAd)->VirtualIfCnt--)
4246#define VIRTUAL_IF_NUM(__pAd) ((__pAd)->VirtualIfCnt)
4247
4248#ifdef LINUX
4249__inline int VIRTUAL_IF_UP(struct rt_rtmp_adapter *pAd)
4250{
4251 if (VIRTUAL_IF_NUM(pAd) == 0) {
4252 if (rt28xx_open(pAd->net_dev) != 0) {
4253 DBGPRINT(RT_DEBUG_TRACE,
4254 ("rt28xx_open return fail!\n"));
4255 return -1;
4256 }
4257 } else {
4258 }
4259 VIRTUAL_IF_INC(pAd);
4260 return 0;
4261}
4262
4263__inline void VIRTUAL_IF_DOWN(struct rt_rtmp_adapter *pAd)
4264{
4265 VIRTUAL_IF_DEC(pAd);
4266 if (VIRTUAL_IF_NUM(pAd) == 0)
4267 rt28xx_close(pAd->net_dev);
4268 return;
4269}
4270#endif
4271
4272
4273
4274
4275
4276int RtmpOSWrielessEventSend(struct rt_rtmp_adapter *pAd,
4277 u32 eventType,
4278 int flags,
4279 u8 *pSrcMac,
4280 u8 *pData, u32 dataLen);
4281
4282int RtmpOSNetDevAddrSet(struct net_device *pNetDev, u8 *pMacAddr);
4283
4284int RtmpOSNetDevAttach(struct net_device *pNetDev,
4285 struct rt_rtmp_os_netdev_op_hook *pDevOpHook);
4286
4287void RtmpOSNetDevClose(struct net_device *pNetDev);
4288
4289void RtmpOSNetDevDetach(struct net_device *pNetDev);
4290
4291int RtmpOSNetDevAlloc(struct net_device **pNewNetDev, u32 privDataSize);
4292
4293void RtmpOSNetDevFree(struct net_device *pNetDev);
4294
4295struct net_device *RtmpOSNetDevGetByName(struct net_device *pNetDev, char *pDevName);
4296
4297void RtmpOSNetDeviceRefPut(struct net_device *pNetDev);
4298
4299struct net_device *RtmpOSNetDevCreate(struct rt_rtmp_adapter *pAd,
4300 int devType,
4301 int devNum,
4302 int privMemSize, char *pNamePrefix);
4303
4304
4305
4306
4307void RtmpOSTaskCustomize(struct rt_rtmp_os_task *pTask);
4308
4309int RtmpOSTaskNotifyToExit(struct rt_rtmp_os_task *pTask);
4310
4311int RtmpOSTaskKill(struct rt_rtmp_os_task *pTask);
4312
4313int RtmpOSTaskInit(struct rt_rtmp_os_task *pTask,
4314 char *pTaskName, void * pPriv);
4315
4316int RtmpOSTaskAttach(struct rt_rtmp_os_task *pTask,
4317 IN int (*fn) (void *), IN void *arg);
4318
4319
4320
4321
4322struct file *RtmpOSFileOpen(IN char *pPath, IN int flag, IN int mode);
4323
4324int RtmpOSFileClose(struct file *osfd);
4325
4326void RtmpOSFileSeek(struct file *osfd, IN int offset);
4327
4328int RtmpOSFileRead(struct file *osfd, IN char *pDataPtr, IN int readLen);
4329
4330int RtmpOSFileWrite(struct file *osfd, IN char *pDataPtr, IN int writeLen);
4331
4332#endif
4333