Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
rtl819x_Qos.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright(c) 2008 - 2010 Realtek Corporation. All rights reserved.
3  *
4  * This program is distributed in the hope that it will be useful, but WITHOUT
5  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
6  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
7  * more details.
8  *
9  * You should have received a copy of the GNU General Public License along with
10  * this program; if not, write to the Free Software Foundation, Inc.,
11  * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
12  *
13  * The full GNU General Public License is included in this distribution in the
14  * file called LICENSE.
15  *
16  * Contact Information:
17  * wlanfae <[email protected]>
18 ******************************************************************************/
19 #ifndef __INC_QOS_TYPE_H
20 #define __INC_QOS_TYPE_H
21 
22 #include "rtllib_endianfree.h"
23 
24 #define BIT0 0x00000001
25 #define BIT1 0x00000002
26 #define BIT2 0x00000004
27 #define BIT3 0x00000008
28 #define BIT4 0x00000010
29 #define BIT5 0x00000020
30 #define BIT6 0x00000040
31 #define BIT7 0x00000080
32 #define BIT8 0x00000100
33 #define BIT9 0x00000200
34 #define BIT10 0x00000400
35 #define BIT11 0x00000800
36 #define BIT12 0x00001000
37 #define BIT13 0x00002000
38 #define BIT14 0x00004000
39 #define BIT15 0x00008000
40 #define BIT16 0x00010000
41 #define BIT17 0x00020000
42 #define BIT18 0x00040000
43 #define BIT19 0x00080000
44 #define BIT20 0x00100000
45 #define BIT21 0x00200000
46 #define BIT22 0x00400000
47 #define BIT23 0x00800000
48 #define BIT24 0x01000000
49 #define BIT25 0x02000000
50 #define BIT26 0x04000000
51 #define BIT27 0x08000000
52 #define BIT28 0x10000000
53 #define BIT29 0x20000000
54 #define BIT30 0x40000000
55 #define BIT31 0x80000000
56 
57 union qos_tsinfo {
59  struct {
65  u8 ucPSB:1;
66  u8 ucUP:3;
70  } field;
71 };
72 
73 union tspec_body {
74  u8 charData[55];
75 
76  struct {
93  } f;
94 };
95 
96 struct wmm_tspec {
97  u8 ID;
99  u8 OUI[3];
104 };
105 
106 struct octet_string {
109 };
110 
111 #define MAX_WMMELE_LENGTH 64
112 
113 #define QOS_MODE u32
114 
115 #define QOS_DISABLE 0
116 #define QOS_WMM 1
117 #define QOS_WMMSA 2
118 #define QOS_EDCA 4
119 #define QOS_HCCA 8
120 #define QOS_WMM_UAPSD 16
121 
122 #define WMM_PARAM_ELE_BODY_LEN 18
123 
124 #define MAX_STA_TS_COUNT 16
125 #define MAX_AP_TS_COUNT 32
126 #define QOS_TSTREAM_KEY_SIZE 13
127 
128 #define WMM_ACTION_CATEGORY_CODE 17
129 #define WMM_PARAM_ELE_BODY_LEN 18
130 
131 #define MAX_TSPEC_TSID 15
132 #define SESSION_REJECT_TSID 0xfe
133 #define DEFAULT_TSID 0xff
134 
135 #define ADDTS_TIME_SLOT 100
136 
137 #define ACM_TIMEOUT 1000
138 #define SESSION_REJECT_TIMEOUT 60000
139 
141  eAckPlc0_ACK = 0x00,
143 };
144 
145 
146 #define SET_WMM_QOS_INFO_FIELD(_pStart, _val) \
147  WriteEF1Byte(_pStart, _val)
148 
149 #define GET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart) \
150  LE_BITS_TO_1BYTE(_pStart, 0, 4)
151 #define SET_WMM_QOS_INFO_FIELD_PARAMETERSET_COUNT(_pStart, _val) \
152  SET_BITS_TO_LE_1BYTE(_pStart, 0, 4, _val)
153 
154 #define GET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart) \
155  LE_BITS_TO_1BYTE(_pStart, 7, 1)
156 #define SET_WMM_QOS_INFO_FIELD_AP_UAPSD(_pStart, _val) \
157  SET_BITS_TO_LE_1BYTE(_pStart, 7, 1, _val)
158 
159 #define GET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart) \
160  LE_BITS_TO_1BYTE(_pStart, 0, 1)
161 #define SET_WMM_QOS_INFO_FIELD_STA_AC_VO_UAPSD(_pStart, _val) \
162  SET_BITS_TO_LE_1BYTE(_pStart, 0, 1, _val)
163 
164 #define GET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart) \
165  LE_BITS_TO_1BYTE(_pStart, 1, 1)
166 #define SET_WMM_QOS_INFO_FIELD_STA_AC_VI_UAPSD(_pStart, _val) \
167  SET_BITS_TO_LE_1BYTE(_pStart, 1, 1, _val)
168 
169 #define GET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart) \
170  LE_BITS_TO_1BYTE(_pStart, 2, 1)
171 #define SET_WMM_QOS_INFO_FIELD_STA_AC_BE_UAPSD(_pStart, _val) \
172  SET_BITS_TO_LE_1BYTE(_pStart, 2, 1, _val)
173 
174 #define GET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart) \
175  LE_BITS_TO_1BYTE(_pStart, 3, 1)
176 #define SET_WMM_QOS_INFO_FIELD_STA_AC_BK_UAPSD(_pStart, _val) \
177  SET_BITS_TO_LE_1BYTE(_pStart, 3, 1, _val)
178 
179 #define GET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart) \
180  LE_BITS_TO_1BYTE(_pStart, 5, 2)
181 #define SET_WMM_QOS_INFO_FIELD_STA_MAX_SP_LEN(_pStart, _val) \
182  SET_BITS_TO_LE_1BYTE(_pStart, 5, 2, _val)
183 
190 };
191 
192 
193 #define AC_CODING u32
194 
195 #define AC0_BE 0
196 #define AC1_BK 1
197 #define AC2_VI 2
198 #define AC3_VO 3
199 #define AC_MAX 4
200 
201 
202 #define AC_PARAM_SIZE 4
203 
204 #define GET_WMM_AC_PARAM_AIFSN(_pStart) \
205  ((u8)LE_BITS_TO_4BYTE(_pStart, 0, 4))
206 #define SET_WMM_AC_PARAM_AIFSN(_pStart, _val) \
207  SET_BITS_TO_LE_4BYTE(_pStart, 0, 4, _val)
208 
209 #define GET_WMM_AC_PARAM_ACM(_pStart) \
210  ((u8)LE_BITS_TO_4BYTE(_pStart, 4, 1))
211 #define SET_WMM_AC_PARAM_ACM(_pStart, _val) \
212  SET_BITS_TO_LE_4BYTE(_pStart, 4, 1, _val)
213 
214 #define GET_WMM_AC_PARAM_ACI(_pStart) \
215  ((u8)LE_BITS_TO_4BYTE(_pStart, 5, 2))
216 #define SET_WMM_AC_PARAM_ACI(_pStart, _val) \
217  SET_BITS_TO_LE_4BYTE(_pStart, 5, 2, _val)
218 
219 #define GET_WMM_AC_PARAM_ACI_AIFSN(_pStart) \
220  ((u8)LE_BITS_TO_4BYTE(_pStart, 0, 8))
221 #define SET_WMM_AC_PARAM_ACI_AIFSN(_pStart, _val) \
222  SET_BITS_TO_LE_4BYTE(_pStart, 0, 8, _val)
223 
224 #define GET_WMM_AC_PARAM_ECWMIN(_pStart) \
225  ((u8)LE_BITS_TO_4BYTE(_pStart, 8, 4))
226 #define SET_WMM_AC_PARAM_ECWMIN(_pStart, _val) \
227  SET_BITS_TO_LE_4BYTE(_pStart, 8, 4, _val)
228 
229 #define GET_WMM_AC_PARAM_ECWMAX(_pStart) \
230  ((u8)LE_BITS_TO_4BYTE(_pStart, 12, 4))
231 #define SET_WMM_AC_PARAM_ECWMAX(_pStart, _val) \
232  SET_BITS_TO_LE_4BYTE(_pStart, 12, 4, _val)
233 
234 #define GET_WMM_AC_PARAM_TXOP_LIMIT(_pStart) \
235  ((u8)LE_BITS_TO_4BYTE(_pStart, 16, 16))
236 #define SET_WMM_AC_PARAM_TXOP_LIMIT(_pStart, _val) \
237  SET_BITS_TO_LE_4BYTE(_pStart, 16, 16, _val)
238 
239 
240 
241 #define WMM_PARAM_ELEMENT_SIZE (8+(4*AC_PARAM_SIZE))
242 
246 };
247 
248 
250  DIR_UP = 0,
251  DIR_DOWN = 1,
254 };
255 
260 };
261 
262 
263 struct acm {
267 };
268 
269 
270 
271 #define AC_UAPSD u8
272 
273 #define GET_VO_UAPSD(_apsd) ((_apsd) & BIT0)
274 #define SET_VO_UAPSD(_apsd) ((_apsd) |= BIT0)
275 
276 #define GET_VI_UAPSD(_apsd) ((_apsd) & BIT1)
277 #define SET_VI_UAPSD(_apsd) ((_apsd) |= BIT1)
278 
279 #define GET_BK_UAPSD(_apsd) ((_apsd) & BIT2)
280 #define SET_BK_UAPSD(_apsd) ((_apsd) |= BIT2)
281 
282 #define GET_BE_UAPSD(_apsd) ((_apsd) & BIT3)
283 #define SET_BE_UAPSD(_apsd) ((_apsd) |= BIT3)
284 
285 union qos_tclas {
286 
287  struct _TYPE_GENERAL {
291  } TYPE_GENERAL;
292 
293  struct _TYPE0_ETH {
300  } TYPE0_ETH;
301 
302  struct _TYPE1_IPV4 {
307  u8 SrcIP[4];
308  u8 DstIP[4];
314  } TYPE1_IPV4;
315 
316  struct _TYPE1_IPV6 {
321  u8 SrcIP[16];
322  u8 DstIP[16];
326  } TYPE1_IPV6;
327 
328  struct _TYPE2_8021Q {
333  } TYPE2_8021Q;
334 };
335 
336 struct qos_tstream {
337 
338  bool bUsed;
343  struct wmm_tspec TSpec;
346 };
347 
348 struct sta_qos {
351 
354 
360 
363 
364  struct acm acm[4];
366 
369  struct wmm_tspec TSpec;
370 
372 
373  bool bNoAck;
374 
376 
377 };
378 
379 #define QBSS_LOAD_SIZE 5
380 #define GET_QBSS_LOAD_STA_COUNT(__pStart) \
381  ReadEF2Byte(__pStart)
382 #define SET_QBSS_LOAD_STA_COUNT(__pStart, __Value) \
383  WriteEF2Byte(__pStart, __Value)
384 #define GET_QBSS_LOAD_CHNL_UTILIZATION(__pStart) \
385  ReadEF1Byte((u8 *)(__pStart) + 2)
386 #define SET_QBSS_LOAD_CHNL_UTILIZATION(__pStart, __Value) \
387  WriteEF1Byte((u8 *)(__pStart) + 2, __Value)
388 #define GET_QBSS_LOAD_AVAILABLE_CAPACITY(__pStart) \
389  ReadEF2Byte((u8 *)(__pStart) + 3)
390 #define SET_QBSS_LOAD_AVAILABLE_CAPACITY(__pStart, __Value) \
391  WriteEF2Byte((u8 *)(__pStart) + 3, __Value)
392 
393 struct bss_qos {
397 
399 
402 
405 };
406 
407 #define sQoSCtlLng 2
408 #define QOS_CTRL_LEN(_QosMode) ((_QosMode > QOS_DISABLE) ? sQoSCtlLng : 0)
409 
410 
411 #define IsACValid(ac) ((ac >= 0 && ac <= 7) ? true : false)
412 
413 
414 union aci_aifsn {
416 
417  struct {
419  u8 acm:1;
420  u8 ACI:2;
422  } f;
423 };
424 
425 union ecw {
427  struct {
430  } f;
431 };
432 
433 union ac_param {
436 
437  struct {
439  union ecw Ecw;
441  } f;
442 };
443 
444 #endif