linux/drivers/staging/rtl8192u/ieee80211/rtl819x_HT.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _RTL819XU_HTTYPE_H_
   3#define _RTL819XU_HTTYPE_H_
   4
   5/*
   6 * The HT Capability element is present in beacons, association request,
   7 * reassociation request and probe response frames
   8 */
   9
  10/*
  11 * MIMO Power Save Settings
  12 */
  13#define MIMO_PS_STATIC                          0
  14
  15/*
  16 * There should be 128 bits to cover all of the MCS rates. However, since
  17 * 8190 does not support too much rates, one integer is quite enough.
  18 */
  19#define HTCLNG  4
  20
  21/*
  22 * Represent Channel Width in HT Capabilities
  23 */
  24enum ht_channel_width {
  25        HT_CHANNEL_WIDTH_20 = 0,
  26        HT_CHANNEL_WIDTH_20_40 = 1,
  27};
  28
  29/*
  30 * Represent Extension Channel Offset in HT Capabilities
  31 * This is available only in 40Mhz mode.
  32 */
  33enum ht_extension_chan_offset {
  34        HT_EXTCHNL_OFFSET_NO_EXT = 0,
  35        HT_EXTCHNL_OFFSET_UPPER = 1,
  36        HT_EXTCHNL_OFFSET_NO_DEF = 2,
  37        HT_EXTCHNL_OFFSET_LOWER = 3,
  38};
  39
  40struct ht_capability_ele {
  41        //HT capability info
  42        u8      AdvCoding:1;
  43        u8      ChlWidth:1;
  44        u8      MimoPwrSave:2;
  45        u8      GreenField:1;
  46        u8      ShortGI20Mhz:1;
  47        u8      ShortGI40Mhz:1;
  48        u8      TxSTBC:1;
  49        u8      RxSTBC:2;
  50        u8      DelayBA:1;
  51        u8      MaxAMSDUSize:1;
  52        u8      DssCCk:1;
  53        u8      PSMP:1;
  54        u8      Rsvd1:1;
  55        u8      LSigTxopProtect:1;
  56
  57        //MAC HT parameters info
  58        u8      MaxRxAMPDUFactor:2;
  59        u8      MPDUDensity:3;
  60        u8      Rsvd2:3;
  61
  62        //Supported MCS set
  63        u8      MCS[16];
  64
  65        //Extended HT Capability Info
  66        u16     ExtHTCapInfo;
  67
  68        //TXBF Capabilities
  69        u8      TxBFCap[4];
  70
  71        //Antenna Selection Capabilities
  72        u8      ASCap;
  73
  74} __packed;
  75
  76/*
  77 * The HT Information element is present in beacons
  78 * Only AP is required to include this element
  79 */
  80typedef struct _HT_INFORMATION_ELE {
  81        u8      ControlChl;
  82
  83        u8      ExtChlOffset:2;
  84        u8      RecommemdedTxWidth:1;
  85        u8      RIFS:1;
  86        u8      PSMPAccessOnly:1;
  87        u8      SrvIntGranularity:3;
  88
  89        u8      OptMode:2;
  90        u8      NonGFDevPresent:1;
  91        u8      Revd1:5;
  92        u8      Revd2:8;
  93
  94        u8      Rsvd3:6;
  95        u8      DualBeacon:1;
  96        u8      DualCTSProtect:1;
  97
  98        u8      SecondaryBeacon:1;
  99        u8      LSigTxopProtectFull:1;
 100        u8      PcoActive:1;
 101        u8      PcoPhase:1;
 102        u8      Rsvd4:4;
 103
 104        u8      BasicMSC[16];
 105} __attribute__ ((packed)) HT_INFORMATION_ELE, *PHT_INFORMATION_ELE;
 106
 107typedef enum _HT_SPEC_VER {
 108        HT_SPEC_VER_IEEE = 0,
 109        HT_SPEC_VER_EWC = 1,
 110} HT_SPEC_VER, *PHT_SPEC_VER;
 111
 112typedef enum _HT_AGGRE_MODE_E {
 113        HT_AGG_AUTO = 0,
 114        HT_AGG_FORCE_ENABLE = 1,
 115        HT_AGG_FORCE_DISABLE = 2,
 116} HT_AGGRE_MODE_E, *PHT_AGGRE_MODE_E;
 117
 118/*
 119 *  The Data structure is used to keep HT related variables when card is
 120 *  configured as non-AP STA mode.  **Note**  Current_xxx should be set
 121 *  to default value in HTInitializeHTInfo()
 122 */
 123typedef struct _RT_HIGH_THROUGHPUT {
 124        u8                              bEnableHT;
 125        u8                              bCurrentHTSupport;
 126
 127        u8                              bRegBW40MHz;                            // Tx 40MHz channel capability
 128        u8                              bCurBW40MHz;                            // Tx 40MHz channel capability
 129
 130        u8                              bRegShortGI40MHz;                       // Tx Short GI for 40Mhz
 131        u8                              bCurShortGI40MHz;                       // Tx Short GI for 40MHz
 132
 133        u8                              bRegShortGI20MHz;                       // Tx Short GI for 20MHz
 134        u8                              bCurShortGI20MHz;                       // Tx Short GI for 20MHz
 135
 136        u8                              bRegSuppCCK;                            // Tx CCK rate capability
 137        u8                              bCurSuppCCK;                            // Tx CCK rate capability
 138
 139        // 802.11n spec version for "peer"
 140        HT_SPEC_VER                     ePeerHTSpecVer;
 141
 142        // HT related information for "Self"
 143        struct ht_capability_ele        SelfHTCap;              // This is HT cap element sent to peer STA, which also indicate HT Rx capabilities.
 144        HT_INFORMATION_ELE      SelfHTInfo;             // This is HT info element sent to peer STA, which also indicate HT Rx capabilities.
 145
 146        // HT related information for "Peer"
 147        u8                              PeerHTCapBuf[32];
 148        u8                              PeerHTInfoBuf[32];
 149
 150        // A-MSDU related
 151        u8                              bAMSDU_Support;                 // This indicates Tx A-MSDU capability
 152        u16                             nAMSDU_MaxSize;                 // This indicates Tx A-MSDU capability
 153        u8                              bCurrent_AMSDU_Support; // This indicates Tx A-MSDU capability
 154        u16                             nCurrent_AMSDU_MaxSize; // This indicates Tx A-MSDU capability
 155
 156        // AMPDU  related <2006.08.10 Emily>
 157        u8                              bAMPDUEnable;                           // This indicate Tx A-MPDU capability
 158        u8                              bCurrentAMPDUEnable;            // This indicate Tx A-MPDU capability
 159        u8                              AMPDU_Factor;                           // This indicate Tx A-MPDU capability
 160        u8                              CurrentAMPDUFactor;             // This indicate Tx A-MPDU capability
 161        u8                              MPDU_Density;                           // This indicate Tx A-MPDU capability
 162        u8                              CurrentMPDUDensity;                     // This indicate Tx A-MPDU capability
 163
 164        // Forced A-MPDU enable
 165        HT_AGGRE_MODE_E ForcedAMPDUMode;
 166        u8                              ForcedAMPDUFactor;
 167        u8                              ForcedMPDUDensity;
 168
 169        // Forced A-MSDU enable
 170        HT_AGGRE_MODE_E ForcedAMSDUMode;
 171        u16                             ForcedAMSDUMaxSize;
 172
 173        u8                              bForcedShortGI;
 174
 175        u8                              CurrentOpMode;
 176
 177        // MIMO PS related
 178        u8                              SelfMimoPs;
 179        u8                              PeerMimoPs;
 180
 181        // 40MHz Channel Offset settings.
 182        enum ht_extension_chan_offset   CurSTAExtChnlOffset;
 183        u8                              bCurTxBW40MHz;  // If we use 40 MHz to Tx
 184        u8                              PeerBandwidth;
 185
 186        // For Bandwidth Switching
 187        u8                              bSwBwInProgress;
 188        u8                              SwBwStep;
 189        //struct timer_list             SwBwTimer;  //moved to ieee80211_device. as timer_list need include some header file here.
 190
 191        // For Realtek proprietary A-MPDU factor for aggregation
 192        u8                              bRegRT2RTAggregation;
 193        u8                              bCurrentRT2RTAggregation;
 194        u8                              bCurrentRT2RTLongSlotTime;
 195        u8                              szRT2RTAggBuffer[10];
 196
 197        // Rx Reorder control
 198        u8                              bRegRxReorderEnable;
 199        u8                              bCurRxReorderEnable;
 200        u8                              RxReorderWinSize;
 201        u8                              RxReorderPendingTime;
 202        u16                             RxReorderDropCounter;
 203
 204#ifdef USB_TX_DRIVER_AGGREGATION_ENABLE
 205        u8                              UsbTxAggrNum;
 206#endif
 207#ifdef USB_RX_AGGREGATION_SUPPORT
 208        u8                              UsbRxFwAggrEn;
 209        u8                              UsbRxFwAggrPageNum;
 210        u8                              UsbRxFwAggrPacketNum;
 211        u8                              UsbRxFwAggrTimeout;
 212#endif
 213
 214        // Add for Broadcom(Linksys) IOT. Joseph
 215        u8                              bIsPeerBcm;
 216
 217        // For IOT issue.
 218        u8                              IOTPeer;
 219        u32                             IOTAction;
 220} __attribute__ ((packed)) RT_HIGH_THROUGHPUT, *PRT_HIGH_THROUGHPUT;
 221
 222/*
 223 * The Data structure is used to keep HT related variable for "each AP"
 224 * when card is configured as "STA mode"
 225 */
 226typedef struct _BSS_HT {
 227        u8                              bdSupportHT;
 228
 229        // HT related elements
 230        u8                                      bdHTCapBuf[32];
 231        u16                                     bdHTCapLen;
 232        u8                                      bdHTInfoBuf[32];
 233        u16                                     bdHTInfoLen;
 234
 235        HT_SPEC_VER                             bdHTSpecVer;
 236        //struct ht_capability_ele              bdHTCapEle;
 237        //HT_INFORMATION_ELE            bdHTInfoEle;
 238
 239        u8                                      bdRT2RTAggregation;
 240        u8                                      bdRT2RTLongSlotTime;
 241} __attribute__ ((packed)) BSS_HT, *PBSS_HT;
 242
 243extern u8 MCS_FILTER_ALL[16];
 244extern u8 MCS_FILTER_1SS[16];
 245
 246/*
 247 * 2007/07/11 MH Modify the macro. Becaus STA may link with a N-AP. If we set
 248 * STA in A/B/G mode and AP is still in N mode. The macro will be wrong. We have
 249 * to add a macro to judge wireless mode.
 250 */
 251#define PICK_RATE(_nLegacyRate, _nMcsRate)      \
 252                (_nMcsRate == 0) ? (_nLegacyRate & 0x7f) : (_nMcsRate)
 253/* 2007/07/12 MH We only define legacy and HT wireless mode now. */
 254#define LEGACY_WIRELESS_MODE    IEEE_MODE_MASK
 255
 256#define CURRENT_RATE(WirelessMode, LegacyRate, HTRate)           \
 257                ((WirelessMode & (LEGACY_WIRELESS_MODE)) != 0) ? \
 258                        (LegacyRate) :                           \
 259                        (PICK_RATE(LegacyRate, HTRate))
 260
 261// MCS Bw 40 {1~7, 12~15,32}
 262#define RATE_ADPT_1SS_MASK              0xFF
 263#define RATE_ADPT_2SS_MASK              0xF0 //Skip MCS8~11 because mcs7 > mcs6, 9, 10, 11. 2007.01.16 by Emily
 264#define RATE_ADPT_MCS32_MASK            0x01
 265
 266#define         IS_11N_MCS_RATE(rate)           (rate & 0x80)
 267
 268typedef enum _HT_AGGRE_SIZE {
 269        HT_AGG_SIZE_8K = 0,
 270        HT_AGG_SIZE_16K = 1,
 271        HT_AGG_SIZE_32K = 2,
 272        HT_AGG_SIZE_64K = 3,
 273} HT_AGGRE_SIZE_E, *PHT_AGGRE_SIZE_E;
 274
 275/* Indicate different AP vendor for IOT issue */
 276typedef enum _HT_IOT_PEER {
 277        HT_IOT_PEER_UNKNOWN = 0,
 278        HT_IOT_PEER_REALTEK = 1,
 279        HT_IOT_PEER_BROADCOM = 2,
 280        HT_IOT_PEER_RALINK = 3,
 281        HT_IOT_PEER_ATHEROS = 4,
 282        HT_IOT_PEER_CISCO = 5,
 283        HT_IOT_PEER_MAX = 6
 284} HT_IOT_PEER_E, *PHTIOT_PEER_E;
 285
 286/*
 287 * IOT Action for different AP
 288 */
 289typedef enum _HT_IOT_ACTION {
 290        HT_IOT_ACT_TX_USE_AMSDU_4K = 0x00000001,
 291        HT_IOT_ACT_TX_USE_AMSDU_8K = 0x00000002,
 292        HT_IOT_ACT_DISABLE_MCS14 = 0x00000004,
 293        HT_IOT_ACT_DISABLE_MCS15 = 0x00000008,
 294        HT_IOT_ACT_DISABLE_ALL_2SS = 0x00000010,
 295        HT_IOT_ACT_DISABLE_EDCA_TURBO = 0x00000020,
 296        HT_IOT_ACT_MGNT_USE_CCK_6M = 0x00000040,
 297        HT_IOT_ACT_CDD_FSYNC = 0x00000080,
 298        HT_IOT_ACT_PURE_N_MODE = 0x00000100,
 299        HT_IOT_ACT_FORCED_CTS2SELF = 0x00000200,
 300} HT_IOT_ACTION_E, *PHT_IOT_ACTION_E;
 301
 302#endif //_RTL819XU_HTTYPE_H_
 303