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