4 * Macros, constants, types, and funcs for p80211 data types
6 * Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
7 * --------------------------------------------------------------------
11 * The contents of this file are subject to the Mozilla Public
12 * License Version 1.1 (the "License"); you may not use this file
13 * except in compliance with the License. You may obtain a copy of
14 * the License at http://www.mozilla.org/MPL/
16 * Software distributed under the License is distributed on an "AS
17 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
18 * implied. See the License for the specific language governing
19 * rights and limitations under the License.
21 * Alternatively, the contents of this file may be used under the
22 * terms of the GNU Public License version 2 (the "GPL"), in which
23 * case the provisions of the GPL are applicable instead of the
24 * above. If you wish to allow the use of your version of this file
25 * only under the terms of the GPL and not to allow others to use
26 * your version of this file under the MPL, indicate your decision
27 * by deleting the provisions above and replace them with the notice
28 * and other provisions required by the GPL. If you do not delete
29 * the provisions above, a recipient may use your version of this
30 * file under either the MPL or the GPL.
32 * --------------------------------------------------------------------
34 * Inquiries regarding the linux-wlan Open Source project can be
37 * AbsoluteValue Systems Inc.
39 * http://www.linux-wlan.com
41 * --------------------------------------------------------------------
43 * Portions of the development of this software were funded by
44 * Intersil Corporation as part of PRISM(R) chipset product development.
46 * --------------------------------------------------------------------
48 * This file declares some of the constants and types used in various
49 * parts of the linux-wlan system.
52 * - Constant values are always in HOST byte order.
54 * All functions and statics declared here are implemented in p80211types.c
55 * --------------------------------------------------------------------
58 #ifndef _P80211TYPES_H
59 #define _P80211TYPES_H
61 /*----------------------------------------------------------------*/
62 /* The following constants are indexes into the Mib Category List */
63 /* and the Message Category List */
65 /* Mib Category List */
66 #define P80211_MIB_CAT_DOT11SMT 1
67 #define P80211_MIB_CAT_DOT11MAC 2
68 #define P80211_MIB_CAT_DOT11PHY 3
70 #define P80211SEC_DOT11SMT P80211_MIB_CAT_DOT11SMT
71 #define P80211SEC_DOT11MAC P80211_MIB_CAT_DOT11MAC
72 #define P80211SEC_DOT11PHY P80211_MIB_CAT_DOT11PHY
74 /* Message Category List */
75 #define P80211_MSG_CAT_DOT11REQ 1
76 #define P80211_MSG_CAT_DOT11IND 2
78 /*----------------------------------------------------------------*/
79 /* p80211 enumeration constants. The value to text mappings for */
80 /* these is in p80211types.c. These defines were generated */
81 /* from the mappings. */
83 /* error codes for lookups */
85 #define P80211ENUM_truth_false 0
86 #define P80211ENUM_truth_true 1
87 #define P80211ENUM_ifstate_disable 0
88 #define P80211ENUM_ifstate_fwload 1
89 #define P80211ENUM_ifstate_enable 2
90 #define P80211ENUM_bsstype_infrastructure 1
91 #define P80211ENUM_bsstype_independent 2
92 #define P80211ENUM_bsstype_any 3
93 #define P80211ENUM_authalg_opensystem 1
94 #define P80211ENUM_authalg_sharedkey 2
95 #define P80211ENUM_scantype_active 1
96 #define P80211ENUM_resultcode_success 1
97 #define P80211ENUM_resultcode_invalid_parameters 2
98 #define P80211ENUM_resultcode_not_supported 3
99 #define P80211ENUM_resultcode_refused 6
100 #define P80211ENUM_resultcode_cant_set_readonly_mib 10
101 #define P80211ENUM_resultcode_implementation_failure 11
102 #define P80211ENUM_resultcode_cant_get_writeonly_mib 12
103 #define P80211ENUM_status_successful 0
104 #define P80211ENUM_status_unspec_failure 1
105 #define P80211ENUM_status_ap_full 17
106 #define P80211ENUM_msgitem_status_data_ok 0
107 #define P80211ENUM_msgitem_status_no_value 1
109 /*----------------------------------------------------------------*/
110 /* p80211 max length constants for the different pascal strings. */
112 #define MAXLEN_PSTR6 (6) /* pascal array of 6 bytes */
113 #define MAXLEN_PSTR14 (14) /* pascal array of 14 bytes */
114 #define MAXLEN_PSTR32 (32) /* pascal array of 32 bytes */
115 #define MAXLEN_PSTR255 (255) /* pascal array of 255 bytes */
116 #define MAXLEN_MIBATTRIBUTE (392) /* maximum mibattribute */
117 /* where the size of the DATA itself */
118 /* is a DID-LEN-DATA triple */
119 /* with a max size of 4+4+384 */
121 /*----------------------------------------------------------------*/
122 /* The following macro creates a name for an enum */
124 #define MKENUMNAME(name) p80211enum_ ## name
126 /*----------------------------------------------------------------
127 * The following constants and macros are used to construct and
128 * deconstruct the Data ID codes. The coding is as follows:
130 * ...rwtnnnnnnnniiiiiiggggggssssss s - Section
140 #define P80211DID_LSB_SECTION (0)
141 #define P80211DID_LSB_GROUP (6)
142 #define P80211DID_LSB_ITEM (12)
143 #define P80211DID_LSB_INDEX (18)
144 #define P80211DID_LSB_ISTABLE (26)
145 #define P80211DID_LSB_ACCESS (27)
147 #define P80211DID_MASK_SECTION (0x0000003fUL)
148 #define P80211DID_MASK_GROUP (0x0000003fUL)
149 #define P80211DID_MASK_ITEM (0x0000003fUL)
150 #define P80211DID_MASK_INDEX (0x000000ffUL)
151 #define P80211DID_MASK_ISTABLE (0x00000001UL)
152 #define P80211DID_MASK_ACCESS (0x00000003UL)
154 #define P80211DID_MK(a, m, l) ((((u32)(a)) & (m)) << (l))
156 #define P80211DID_MKSECTION(a) P80211DID_MK(a, \
157 P80211DID_MASK_SECTION, \
158 P80211DID_LSB_SECTION)
159 #define P80211DID_MKGROUP(a) P80211DID_MK(a, \
160 P80211DID_MASK_GROUP, \
162 #define P80211DID_MKITEM(a) P80211DID_MK(a, \
163 P80211DID_MASK_ITEM, \
165 #define P80211DID_MKINDEX(a) P80211DID_MK(a, \
166 P80211DID_MASK_INDEX, \
168 #define P80211DID_MKISTABLE(a) P80211DID_MK(a, \
169 P80211DID_MASK_ISTABLE, \
170 P80211DID_LSB_ISTABLE)
172 #define P80211DID_MKID(s, g, i, n, t, a) (P80211DID_MKSECTION(s) | \
173 P80211DID_MKGROUP(g) | \
174 P80211DID_MKITEM(i) | \
175 P80211DID_MKINDEX(n) | \
176 P80211DID_MKISTABLE(t) | \
179 #define P80211DID_GET(a, m, l) ((((u32)(a)) >> (l)) & (m))
181 #define P80211DID_SECTION(a) P80211DID_GET(a, \
182 P80211DID_MASK_SECTION, \
183 P80211DID_LSB_SECTION)
184 #define P80211DID_GROUP(a) P80211DID_GET(a, \
185 P80211DID_MASK_GROUP, \
187 #define P80211DID_ITEM(a) P80211DID_GET(a, \
188 P80211DID_MASK_ITEM, \
190 #define P80211DID_INDEX(a) P80211DID_GET(a, \
191 P80211DID_MASK_INDEX, \
193 #define P80211DID_ISTABLE(a) P80211DID_GET(a, \
194 P80211DID_MASK_ISTABLE, \
195 P80211DID_LSB_ISTABLE)
196 #define P80211DID_ACCESS(a) P80211DID_GET(a, \
197 P80211DID_MASK_ACCESS, \
198 P80211DID_LSB_ACCESS)
200 /*----------------------------------------------------------------*/
201 /* The following structure types are used for the representation */
202 /* of ENUMint type metadata. */
204 struct p80211enumpair {
211 struct p80211enumpair *list;
214 /*----------------------------------------------------------------*/
215 /* The following structure types are used to store data items in */
218 /* Template pascal string */
228 /* Maximum pascal string */
229 struct p80211pstr255 {
231 u8 data[MAXLEN_PSTR255];
234 /* pascal string for macaddress and bssid */
237 u8 data[MAXLEN_PSTR6];
240 /* pascal string for channel list */
241 struct p80211pstr14 {
243 u8 data[MAXLEN_PSTR14];
246 /* pascal string for ssid */
247 struct p80211pstr32 {
249 u8 data[MAXLEN_PSTR32];
252 /* MAC address array */
253 struct p80211macarray {
255 u8 data[1][MAXLEN_PSTR6];
258 /* prototype template */
265 /* prototype template w/ data item */
273 /* message data item for int, BOUNDEDINT, ENUMINT */
274 struct p80211item_uint32 {
281 /* message data item for OCTETSTR, DISPLAYSTR */
282 struct p80211item_pstr6 {
286 struct p80211pstr6 data;
289 /* message data item for OCTETSTR, DISPLAYSTR */
290 struct p80211item_pstr14 {
294 struct p80211pstr14 data;
297 /* message data item for OCTETSTR, DISPLAYSTR */
298 struct p80211item_pstr32 {
302 struct p80211pstr32 data;
305 /* message data item for OCTETSTR, DISPLAYSTR */
306 struct p80211item_pstr255 {
310 struct p80211pstr255 data;
313 /* message data item for UNK 392, namely mib items */
314 struct p80211item_unk392 {
318 u8 data[MAXLEN_MIBATTRIBUTE];
321 /* message data item for UNK 1025, namely p2 pdas */
322 struct p80211item_unk1024 {
329 /* message data item for UNK 4096, namely p2 download chunks */
330 struct p80211item_unk4096 {
339 /*----------------------------------------------------------------*/
340 /* The following structure type is used to represent all of the */
341 /* metadata items. Some components may choose to use more, */
342 /* less or different metadata items. */
344 typedef void (*p80211_totext_t) (struct catlistitem *, u32 did, u8 *itembuf,
346 typedef void (*p80211_fromtext_t) (struct catlistitem *, u32 did, u8 *itembuf,
348 typedef u32(*p80211_valid_t) (struct catlistitem *, u32 did, u8 *itembuf);
350 /*----------------------------------------------------------------*/
351 /* Enumeration Lists */
352 /* The following are the external declarations */
353 /* for all enumerations */
355 extern struct p80211enum MKENUMNAME(truth);
356 extern struct p80211enum MKENUMNAME(ifstate);
357 extern struct p80211enum MKENUMNAME(powermgmt);
358 extern struct p80211enum MKENUMNAME(bsstype);
359 extern struct p80211enum MKENUMNAME(authalg);
360 extern struct p80211enum MKENUMNAME(phytype);
361 extern struct p80211enum MKENUMNAME(temptype);
362 extern struct p80211enum MKENUMNAME(regdomain);
363 extern struct p80211enum MKENUMNAME(ccamode);
364 extern struct p80211enum MKENUMNAME(diversity);
365 extern struct p80211enum MKENUMNAME(scantype);
366 extern struct p80211enum MKENUMNAME(resultcode);
367 extern struct p80211enum MKENUMNAME(reason);
368 extern struct p80211enum MKENUMNAME(status);
369 extern struct p80211enum MKENUMNAME(msgcode);
370 extern struct p80211enum MKENUMNAME(msgitem_status);
372 extern struct p80211enum MKENUMNAME(lnxroam_reason);
374 extern struct p80211enum MKENUMNAME(p2preamble);
376 #endif /* _P80211TYPES_H */