rtl819x_HT.h 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. #ifndef _RTL819XU_HTTYPE_H_
  2. #define _RTL819XU_HTTYPE_H_
  3. //------------------------------------------------------------
  4. // The HT Capability element is present in beacons, association request,
  5. // reassociation request and probe response frames
  6. //------------------------------------------------------------
  7. //
  8. // Operation mode value
  9. //
  10. #define HT_OPMODE_NO_PROTECT 0
  11. #define HT_OPMODE_OPTIONAL 1
  12. #define HT_OPMODE_40MHZ_PROTECT 2
  13. #define HT_OPMODE_MIXED 3
  14. //
  15. // MIMO Power Save Settings
  16. //
  17. #define MIMO_PS_STATIC 0
  18. #define MIMO_PS_DYNAMIC 1
  19. #define MIMO_PS_NOLIMIT 3
  20. //
  21. // There should be 128 bits to cover all of the MCS rates. However, since
  22. // 8190 does not support too much rates, one integer is quite enough.
  23. //
  24. #define sHTCLng 4
  25. #define HT_SUPPORTED_MCS_1SS_BITMAP 0x000000ff
  26. #define HT_SUPPORTED_MCS_2SS_BITMAP 0x0000ff00
  27. #define HT_SUPPORTED_MCS_1SS_2SS_BITMAP HT_MCS_1SS_BITMAP|HT_MCS_1SS_2SS_BITMAP
  28. typedef enum _HT_MCS_RATE{
  29. HT_MCS0 = 0x00000001,
  30. HT_MCS1 = 0x00000002,
  31. HT_MCS2 = 0x00000004,
  32. HT_MCS3 = 0x00000008,
  33. HT_MCS4 = 0x00000010,
  34. HT_MCS5 = 0x00000020,
  35. HT_MCS6 = 0x00000040,
  36. HT_MCS7 = 0x00000080,
  37. HT_MCS8 = 0x00000100,
  38. HT_MCS9 = 0x00000200,
  39. HT_MCS10 = 0x00000400,
  40. HT_MCS11 = 0x00000800,
  41. HT_MCS12 = 0x00001000,
  42. HT_MCS13 = 0x00002000,
  43. HT_MCS14 = 0x00004000,
  44. HT_MCS15 = 0x00008000,
  45. // Do not define MCS32 here although 8190 support MCS32
  46. } HT_MCS_RATE, *PHT_MCS_RATE;
  47. //
  48. // Represent Channel Width in HT Capabilities
  49. //
  50. typedef enum _HT_CHANNEL_WIDTH{
  51. HT_CHANNEL_WIDTH_20 = 0,
  52. HT_CHANNEL_WIDTH_20_40 = 1,
  53. }HT_CHANNEL_WIDTH, *PHT_CHANNEL_WIDTH;
  54. //
  55. // Represent Extension Channel Offset in HT Capabilities
  56. // This is available only in 40Mhz mode.
  57. //
  58. typedef enum _HT_EXTCHNL_OFFSET{
  59. HT_EXTCHNL_OFFSET_NO_EXT = 0,
  60. HT_EXTCHNL_OFFSET_UPPER = 1,
  61. HT_EXTCHNL_OFFSET_NO_DEF = 2,
  62. HT_EXTCHNL_OFFSET_LOWER = 3,
  63. }HT_EXTCHNL_OFFSET, *PHT_EXTCHNL_OFFSET;
  64. typedef enum _CHNLOP{
  65. CHNLOP_NONE = 0, // No Action now
  66. CHNLOP_SCAN = 1, // Scan in progress
  67. CHNLOP_SWBW = 2, // Bandwidth switching in progress
  68. CHNLOP_SWCHNL = 3, // Software Channel switching in progress
  69. } CHNLOP, *PCHNLOP;
  70. // Determine if the Channel Operation is in progress
  71. #define CHHLOP_IN_PROGRESS(_pHTInfo) \
  72. ((_pHTInfo)->ChnlOp > CHNLOP_NONE) ? TRUE : FALSE
  73. /*
  74. typedef union _HT_CAPABILITY{
  75. u16 ShortData;
  76. u8 CharData[2];
  77. struct
  78. {
  79. u16 AdvCoding:1;
  80. u16 ChlWidth:1;
  81. u16 MimoPwrSave:2;
  82. u16 GreenField:1;
  83. u16 ShortGI20Mhz:1;
  84. u16 ShortGI40Mhz:1;
  85. u16 STBC:1;
  86. u16 BeamForm:1;
  87. u16 DelayBA:1;
  88. u16 MaxAMSDUSize:1;
  89. u16 DssCCk:1;
  90. u16 PSMP:1;
  91. u16 Rsvd:3;
  92. }Field;
  93. }HT_CAPABILITY, *PHT_CAPABILITY;
  94. typedef union _HT_CAPABILITY_MACPARA{
  95. u8 ShortData;
  96. u8 CharData[1];
  97. struct
  98. {
  99. u8 MaxRxAMPDU:2;
  100. u8 MPDUDensity:2;
  101. u8 Rsvd:4;
  102. }Field;
  103. }HT_CAPABILITY_MACPARA, *PHT_CAPABILITY_MACPARA;
  104. */
  105. typedef enum _HT_ACTION{
  106. ACT_RECOMMAND_WIDTH = 0,
  107. ACT_MIMO_PWR_SAVE = 1,
  108. ACT_PSMP = 2,
  109. ACT_SET_PCO_PHASE = 3,
  110. ACT_MIMO_CHL_MEASURE = 4,
  111. ACT_RECIPROCITY_CORRECT = 5,
  112. ACT_MIMO_CSI_MATRICS = 6,
  113. ACT_MIMO_NOCOMPR_STEER = 7,
  114. ACT_MIMO_COMPR_STEER = 8,
  115. ACT_ANTENNA_SELECT = 9,
  116. } HT_ACTION, *PHT_ACTION;
  117. /* 2007/06/07 MH Define sub-carrier mode for 40MHZ. */
  118. typedef enum _HT_Bandwidth_40MHZ_Sub_Carrier{
  119. SC_MODE_DUPLICATE = 0,
  120. SC_MODE_LOWER = 1,
  121. SC_MODE_UPPER = 2,
  122. SC_MODE_FULL40MHZ = 3,
  123. }HT_BW40_SC_E;
  124. typedef struct _HT_CAPABILITY_ELE{
  125. //HT capability info
  126. u8 AdvCoding:1;
  127. u8 ChlWidth:1;
  128. u8 MimoPwrSave:2;
  129. u8 GreenField:1;
  130. u8 ShortGI20Mhz:1;
  131. u8 ShortGI40Mhz:1;
  132. u8 TxSTBC:1;
  133. u8 RxSTBC:2;
  134. u8 DelayBA:1;
  135. u8 MaxAMSDUSize:1;
  136. u8 DssCCk:1;
  137. u8 PSMP:1;
  138. u8 Rsvd1:1;
  139. u8 LSigTxopProtect:1;
  140. //MAC HT parameters info
  141. u8 MaxRxAMPDUFactor:2;
  142. u8 MPDUDensity:3;
  143. u8 Rsvd2:3;
  144. //Supported MCS set
  145. u8 MCS[16];
  146. //Extended HT Capability Info
  147. u16 ExtHTCapInfo;
  148. //TXBF Capabilities
  149. u8 TxBFCap[4];
  150. //Antenna Selection Capabilities
  151. u8 ASCap;
  152. } __attribute__ ((packed)) HT_CAPABILITY_ELE, *PHT_CAPABILITY_ELE;
  153. //------------------------------------------------------------
  154. // The HT Information element is present in beacons
  155. // Only AP is required to include this element
  156. //------------------------------------------------------------
  157. typedef struct _HT_INFORMATION_ELE{
  158. u8 ControlChl;
  159. u8 ExtChlOffset:2;
  160. u8 RecommemdedTxWidth:1;
  161. u8 RIFS:1;
  162. u8 PSMPAccessOnly:1;
  163. u8 SrvIntGranularity:3;
  164. u8 OptMode:2;
  165. u8 NonGFDevPresent:1;
  166. u8 Revd1:5;
  167. u8 Revd2:8;
  168. u8 Rsvd3:6;
  169. u8 DualBeacon:1;
  170. u8 DualCTSProtect:1;
  171. u8 SecondaryBeacon:1;
  172. u8 LSigTxopProtectFull:1;
  173. u8 PcoActive:1;
  174. u8 PcoPhase:1;
  175. u8 Rsvd4:4;
  176. u8 BasicMSC[16];
  177. } __attribute__ ((packed)) HT_INFORMATION_ELE, *PHT_INFORMATION_ELE;
  178. //
  179. // MIMO Power Save control field.
  180. // This is appear in MIMO Power Save Action Frame
  181. //
  182. typedef struct _MIMOPS_CTRL{
  183. u8 MimoPsEnable:1;
  184. u8 MimoPsMode:1;
  185. u8 Reserved:6;
  186. } MIMOPS_CTRL, *PMIMOPS_CTRL;
  187. typedef enum _HT_SPEC_VER{
  188. HT_SPEC_VER_IEEE = 0,
  189. HT_SPEC_VER_EWC = 1,
  190. }HT_SPEC_VER, *PHT_SPEC_VER;
  191. typedef enum _HT_AGGRE_MODE_E{
  192. HT_AGG_AUTO = 0,
  193. HT_AGG_FORCE_ENABLE = 1,
  194. HT_AGG_FORCE_DISABLE = 2,
  195. }HT_AGGRE_MODE_E, *PHT_AGGRE_MODE_E;
  196. //------------------------------------------------------------
  197. // The Data structure is used to keep HT related variables when card is
  198. // configured as non-AP STA mode. **Note** Current_xxx should be set
  199. // to default value in HTInitializeHTInfo()
  200. //------------------------------------------------------------
  201. typedef struct _RT_HIGH_THROUGHPUT{
  202. u8 bEnableHT;
  203. u8 bCurrentHTSupport;
  204. u8 bRegBW40MHz; // Tx 40MHz channel capability
  205. u8 bCurBW40MHz; // Tx 40MHz channel capability
  206. u8 bRegShortGI40MHz; // Tx Short GI for 40Mhz
  207. u8 bCurShortGI40MHz; // Tx Short GI for 40MHz
  208. u8 bRegShortGI20MHz; // Tx Short GI for 20MHz
  209. u8 bCurShortGI20MHz; // Tx Short GI for 20MHz
  210. u8 bRegSuppCCK; // Tx CCK rate capability
  211. u8 bCurSuppCCK; // Tx CCK rate capability
  212. // 802.11n spec version for "peer"
  213. HT_SPEC_VER ePeerHTSpecVer;
  214. // HT related information for "Self"
  215. HT_CAPABILITY_ELE SelfHTCap; // This is HT cap element sent to peer STA, which also indicate HT Rx capabilities.
  216. HT_INFORMATION_ELE SelfHTInfo; // This is HT info element sent to peer STA, which also indicate HT Rx capabilities.
  217. // HT related information for "Peer"
  218. u8 PeerHTCapBuf[32];
  219. u8 PeerHTInfoBuf[32];
  220. // A-MSDU related
  221. u8 bAMSDU_Support; // This indicates Tx A-MSDU capability
  222. u16 nAMSDU_MaxSize; // This indicates Tx A-MSDU capability
  223. u8 bCurrent_AMSDU_Support; // This indicates Tx A-MSDU capability
  224. u16 nCurrent_AMSDU_MaxSize; // This indicates Tx A-MSDU capability
  225. // AMPDU related <2006.08.10 Emily>
  226. u8 bAMPDUEnable; // This indicate Tx A-MPDU capability
  227. u8 bCurrentAMPDUEnable; // This indicate Tx A-MPDU capability
  228. u8 AMPDU_Factor; // This indicate Tx A-MPDU capability
  229. u8 CurrentAMPDUFactor; // This indicate Tx A-MPDU capability
  230. u8 MPDU_Density; // This indicate Tx A-MPDU capability
  231. u8 CurrentMPDUDensity; // This indicate Tx A-MPDU capability
  232. // Forced A-MPDU enable
  233. HT_AGGRE_MODE_E ForcedAMPDUMode;
  234. u8 ForcedAMPDUFactor;
  235. u8 ForcedMPDUDensity;
  236. // Forced A-MSDU enable
  237. HT_AGGRE_MODE_E ForcedAMSDUMode;
  238. u16 ForcedAMSDUMaxSize;
  239. u8 bForcedShortGI;
  240. u8 CurrentOpMode;
  241. // MIMO PS related
  242. u8 SelfMimoPs;
  243. u8 PeerMimoPs;
  244. // 40MHz Channel Offset settings.
  245. HT_EXTCHNL_OFFSET CurSTAExtChnlOffset;
  246. u8 bCurTxBW40MHz; // If we use 40 MHz to Tx
  247. u8 PeerBandwidth;
  248. // For Bandwidth Switching
  249. u8 bSwBwInProgress;
  250. CHNLOP ChnlOp; // software switching channel in progress. By Bruce, 2008-02-15.
  251. u8 SwBwStep;
  252. //struct timer_list SwBwTimer; //moved to ieee80211_device. as timer_list need include some header file here.
  253. // For Realtek proprietary A-MPDU factor for aggregation
  254. u8 bRegRT2RTAggregation;
  255. u8 bCurrentRT2RTAggregation;
  256. u8 bCurrentRT2RTLongSlotTime;
  257. u8 szRT2RTAggBuffer[10];
  258. // Rx Reorder control
  259. u8 bRegRxReorderEnable;
  260. u8 bCurRxReorderEnable;
  261. u8 RxReorderWinSize;
  262. u8 RxReorderPendingTime;
  263. u16 RxReorderDropCounter;
  264. #ifdef USB_TX_DRIVER_AGGREGATION_ENABLE
  265. u8 UsbTxAggrNum;
  266. #endif
  267. #ifdef USB_RX_AGGREGATION_SUPPORT
  268. u8 UsbRxFwAggrEn;
  269. u8 UsbRxFwAggrPageNum;
  270. u8 UsbRxFwAggrPacketNum;
  271. u8 UsbRxFwAggrTimeout;
  272. #endif
  273. // Add for Broadcom(Linksys) IOT. Joseph
  274. u8 bIsPeerBcm;
  275. // For IOT issue.
  276. u8 IOTPeer;
  277. u32 IOTAction;
  278. } __attribute__ ((packed)) RT_HIGH_THROUGHPUT, *PRT_HIGH_THROUGHPUT;
  279. //------------------------------------------------------------
  280. // The Data structure is used to keep HT related variable for "each Sta"
  281. // when card is configured as "AP mode"
  282. //------------------------------------------------------------
  283. typedef struct _RT_HTINFO_STA_ENTRY{
  284. u8 bEnableHT;
  285. u8 bSupportCck;
  286. u16 AMSDU_MaxSize;
  287. u8 AMPDU_Factor;
  288. u8 MPDU_Density;
  289. u8 HTHighestOperaRate;
  290. u8 bBw40MHz;
  291. u8 MimoPs;
  292. u8 McsRateSet[16];
  293. }RT_HTINFO_STA_ENTRY, *PRT_HTINFO_STA_ENTRY;
  294. //------------------------------------------------------------
  295. // The Data structure is used to keep HT related variable for "each AP"
  296. // when card is configured as "STA mode"
  297. //------------------------------------------------------------
  298. typedef struct _BSS_HT{
  299. u8 bdSupportHT;
  300. // HT related elements
  301. u8 bdHTCapBuf[32];
  302. u16 bdHTCapLen;
  303. u8 bdHTInfoBuf[32];
  304. u16 bdHTInfoLen;
  305. HT_SPEC_VER bdHTSpecVer;
  306. //HT_CAPABILITY_ELE bdHTCapEle;
  307. //HT_INFORMATION_ELE bdHTInfoEle;
  308. u8 bdRT2RTAggregation;
  309. u8 bdRT2RTLongSlotTime;
  310. } __attribute__ ((packed)) BSS_HT, *PBSS_HT;
  311. typedef struct _MIMO_RSSI{
  312. u32 EnableAntenna;
  313. u32 AntennaA;
  314. u32 AntennaB;
  315. u32 AntennaC;
  316. u32 AntennaD;
  317. u32 Average;
  318. }MIMO_RSSI, *PMIMO_RSSI;
  319. typedef struct _MIMO_EVM{
  320. u32 EVM1;
  321. u32 EVM2;
  322. }MIMO_EVM, *PMIMO_EVM;
  323. typedef struct _FALSE_ALARM_STATISTICS{
  324. u32 Cnt_Parity_Fail;
  325. u32 Cnt_Rate_Illegal;
  326. u32 Cnt_Crc8_fail;
  327. u32 Cnt_all;
  328. }FALSE_ALARM_STATISTICS, *PFALSE_ALARM_STATISTICS;
  329. extern u8 MCS_FILTER_ALL[16];
  330. extern u8 MCS_FILTER_1SS[16];
  331. /* 2007/07/11 MH Modify the macro. Becaus STA may link with a N-AP. If we set
  332. STA in A/B/G mode and AP is still in N mode. The macro will be wrong. We have
  333. to add a macro to judge wireless mode. */
  334. #define PICK_RATE(_nLegacyRate, _nMcsRate) \
  335. (_nMcsRate==0)?(_nLegacyRate&0x7f):(_nMcsRate)
  336. /* 2007/07/12 MH We only define legacy and HT wireless mode now. */
  337. #define LEGACY_WIRELESS_MODE IEEE_MODE_MASK
  338. #define CURRENT_RATE(WirelessMode, LegacyRate, HTRate) \
  339. ((WirelessMode & (LEGACY_WIRELESS_MODE))!=0)?\
  340. (LegacyRate):\
  341. (PICK_RATE(LegacyRate, HTRate))
  342. // MCS Bw 40 {1~7, 12~15,32}
  343. #define RATE_ADPT_1SS_MASK 0xFF
  344. #define RATE_ADPT_2SS_MASK 0xF0 //Skip MCS8~11 because mcs7 > mcs6, 9, 10, 11. 2007.01.16 by Emily
  345. #define RATE_ADPT_MCS32_MASK 0x01
  346. #define IS_11N_MCS_RATE(rate) (rate&0x80)
  347. typedef enum _HT_AGGRE_SIZE{
  348. HT_AGG_SIZE_8K = 0,
  349. HT_AGG_SIZE_16K = 1,
  350. HT_AGG_SIZE_32K = 2,
  351. HT_AGG_SIZE_64K = 3,
  352. }HT_AGGRE_SIZE_E, *PHT_AGGRE_SIZE_E;
  353. /* Indicate different AP vendor for IOT issue */
  354. typedef enum _HT_IOT_PEER
  355. {
  356. HT_IOT_PEER_UNKNOWN = 0,
  357. HT_IOT_PEER_REALTEK = 1,
  358. HT_IOT_PEER_BROADCOM = 2,
  359. HT_IOT_PEER_RALINK = 3,
  360. HT_IOT_PEER_ATHEROS = 4,
  361. HT_IOT_PEER_CISCO= 5,
  362. HT_IOT_PEER_MAX = 6
  363. }HT_IOT_PEER_E, *PHTIOT_PEER_E;
  364. //
  365. // IOT Action for different AP
  366. //
  367. typedef enum _HT_IOT_ACTION{
  368. HT_IOT_ACT_TX_USE_AMSDU_4K = 0x00000001,
  369. HT_IOT_ACT_TX_USE_AMSDU_8K = 0x00000002,
  370. HT_IOT_ACT_DISABLE_MCS14 = 0x00000004,
  371. HT_IOT_ACT_DISABLE_MCS15 = 0x00000008,
  372. HT_IOT_ACT_DISABLE_ALL_2SS = 0x00000010,
  373. HT_IOT_ACT_DISABLE_EDCA_TURBO = 0x00000020,
  374. HT_IOT_ACT_MGNT_USE_CCK_6M = 0x00000040,
  375. HT_IOT_ACT_CDD_FSYNC = 0x00000080,
  376. HT_IOT_ACT_PURE_N_MODE = 0x00000100,
  377. HT_IOT_ACT_FORCED_CTS2SELF = 0x00000200,
  378. }HT_IOT_ACTION_E, *PHT_IOT_ACTION_E;
  379. #endif //_RTL819XU_HTTYPE_H_