/kern_2.6.32/drivers/staging/rt3090/rtmp.h

http://omnia2droid.googlecode.com/ · C++ Header · 6873 lines · 4998 code · 1315 blank · 560 comment · 96 complexity · 6fd45c494fabd737451d1d3036c7fffa MD5 · raw file

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