blob: 263ef2ddb19775276c807791b282a19c434ea2f9 [file] [log] [blame]
Sergio Paracuellos0ae952e2016-09-25 15:35:08 +02001/*
2 * p80211types.h
3 *
4 * Macros, constants, types, and funcs for p80211 data types
5 *
6 * Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved.
7 * --------------------------------------------------------------------
8 *
9 * linux-wlan
10 *
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/
15 *
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.
20 *
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.
31 *
32 * --------------------------------------------------------------------
33 *
34 * Inquiries regarding the linux-wlan Open Source project can be
35 * made directly to:
36 *
37 * AbsoluteValue Systems Inc.
38 * info@linux-wlan.com
39 * http://www.linux-wlan.com
40 *
41 * --------------------------------------------------------------------
42 *
43 * Portions of the development of this software were funded by
44 * Intersil Corporation as part of PRISM(R) chipset product development.
45 *
46 * --------------------------------------------------------------------
47 *
48 * This file declares some of the constants and types used in various
49 * parts of the linux-wlan system.
50 *
51 * Notes:
52 * - Constant values are always in HOST byte order.
53 *
54 * All functions and statics declared here are implemented in p80211types.c
55 * --------------------------------------------------------------------
56 */
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -070057
58#ifndef _P80211TYPES_H
59#define _P80211TYPES_H
60
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -070061/*----------------------------------------------------------------*/
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -070062/* The following constants are indexes into the Mib Category List */
63/* and the Message Category List */
64
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
69
70#define P80211SEC_DOT11SMT P80211_MIB_CAT_DOT11SMT
71#define P80211SEC_DOT11MAC P80211_MIB_CAT_DOT11MAC
72#define P80211SEC_DOT11PHY P80211_MIB_CAT_DOT11PHY
73
74/* Message Category List */
75#define P80211_MSG_CAT_DOT11REQ 1
76#define P80211_MSG_CAT_DOT11IND 2
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -070077
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. */
82
83/* error codes for lookups */
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -070084
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
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -070090#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
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -070095#define P80211ENUM_scantype_active 1
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -070096#define P80211ENUM_resultcode_success 1
97#define P80211ENUM_resultcode_invalid_parameters 2
98#define P80211ENUM_resultcode_not_supported 3
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -070099#define P80211ENUM_resultcode_refused 6
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700100#define P80211ENUM_resultcode_cant_set_readonly_mib 10
101#define P80211ENUM_resultcode_implementation_failure 11
102#define P80211ENUM_resultcode_cant_get_writeonly_mib 12
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700103#define P80211ENUM_status_successful 0
104#define P80211ENUM_status_unspec_failure 1
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700105#define P80211ENUM_status_ap_full 17
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700106#define P80211ENUM_msgitem_status_data_ok 0
107#define P80211ENUM_msgitem_status_no_value 1
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700108
109/*----------------------------------------------------------------*/
110/* p80211 max length constants for the different pascal strings. */
111
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 */
120
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700121/*----------------------------------------------------------------*/
122/* The following macro creates a name for an enum */
123
124#define MKENUMNAME(name) p80211enum_ ## name
125
126/*----------------------------------------------------------------
Sergio Paracuellos0ae952e2016-09-25 15:35:08 +0200127 * The following constants and macros are used to construct and
128 * deconstruct the Data ID codes. The coding is as follows:
129 *
130 * ...rwtnnnnnnnniiiiiiggggggssssss s - Section
131 * g - Group
132 * i - Item
133 * n - Index
134 * t - Table flag
135 * w - Write flag
136 * r - Read flag
137 * . - Unused
138 */
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700139
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700140#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)
Johan Meiringc5de2152010-11-06 18:23:09 +0200145#define P80211DID_LSB_ACCESS (27)
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700146
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)
Johan Meiringc5de2152010-11-06 18:23:09 +0200152#define P80211DID_MASK_ACCESS (0x00000003UL)
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700153
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100154#define P80211DID_MK(a, m, l) ((((u32)(a)) & (m)) << (l))
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700155
156#define P80211DID_MKSECTION(a) P80211DID_MK(a, \
157 P80211DID_MASK_SECTION, \
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100158 P80211DID_LSB_SECTION)
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700159#define P80211DID_MKGROUP(a) P80211DID_MK(a, \
160 P80211DID_MASK_GROUP, \
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100161 P80211DID_LSB_GROUP)
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700162#define P80211DID_MKITEM(a) P80211DID_MK(a, \
163 P80211DID_MASK_ITEM, \
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100164 P80211DID_LSB_ITEM)
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700165#define P80211DID_MKINDEX(a) P80211DID_MK(a, \
166 P80211DID_MASK_INDEX, \
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100167 P80211DID_LSB_INDEX)
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700168#define P80211DID_MKISTABLE(a) P80211DID_MK(a, \
169 P80211DID_MASK_ISTABLE, \
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100170 P80211DID_LSB_ISTABLE)
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700171
Svenne Krap5dd8acc2010-02-14 18:59:00 +0100172#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) | \
177 (a))
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700178
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100179#define P80211DID_GET(a, m, l) ((((u32)(a)) >> (l)) & (m))
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700180
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, \
186 P80211DID_LSB_GROUP)
187#define P80211DID_ITEM(a) P80211DID_GET(a, \
188 P80211DID_MASK_ITEM, \
189 P80211DID_LSB_ITEM)
190#define P80211DID_INDEX(a) P80211DID_GET(a, \
191 P80211DID_MASK_INDEX, \
192 P80211DID_LSB_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)
199
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700200/*----------------------------------------------------------------*/
Justin P. Mattockd34602d2012-09-24 09:16:57 -0700201/* The following structure types are used for the representation */
Solomon Peachyaaad4302008-10-29 10:42:53 -0400202/* of ENUMint type metadata. */
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700203
Sergio Paracuellosc4917862016-09-23 15:45:17 +0200204struct p80211enumpair {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100205 u32 val;
206 char *name;
Sergio Paracuellosc4917862016-09-23 15:45:17 +0200207};
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700208
Sergio Paracuellosaa97dc12016-09-23 15:45:19 +0200209struct p80211enum {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100210 int nitems;
Sergio Paracuellosc4917862016-09-23 15:45:17 +0200211 struct p80211enumpair *list;
Sergio Paracuellosaa97dc12016-09-23 15:45:19 +0200212};
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700213
214/*----------------------------------------------------------------*/
215/* The following structure types are used to store data items in */
216/* messages. */
217
218/* Template pascal string */
Sergio Paracuellosc529e312016-09-23 15:45:20 +0200219struct p80211pstr {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100220 u8 len;
Sergio Paracuellosc529e312016-09-23 15:45:20 +0200221} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700222
Sergio Paracuellos3fd1e3f2016-09-25 15:34:52 +0200223struct p80211pstrd {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100224 u8 len;
225 u8 data[0];
Sergio Paracuellos3fd1e3f2016-09-25 15:34:52 +0200226} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700227
228/* Maximum pascal string */
Sergio Paracuellos94a29142016-09-25 15:34:53 +0200229struct p80211pstr255 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100230 u8 len;
231 u8 data[MAXLEN_PSTR255];
Sergio Paracuellos94a29142016-09-25 15:34:53 +0200232} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700233
234/* pascal string for macaddress and bssid */
Sergio Paracuellos2816c002016-09-25 15:34:54 +0200235struct p80211pstr6 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100236 u8 len;
237 u8 data[MAXLEN_PSTR6];
Sergio Paracuellos2816c002016-09-25 15:34:54 +0200238} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700239
240/* pascal string for channel list */
Sergio Paracuellos5d005582016-09-25 15:34:55 +0200241struct p80211pstr14 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100242 u8 len;
243 u8 data[MAXLEN_PSTR14];
Sergio Paracuellos5d005582016-09-25 15:34:55 +0200244} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700245
246/* pascal string for ssid */
Sergio Paracuellos758f140d2016-09-25 15:34:56 +0200247struct p80211pstr32 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100248 u8 len;
249 u8 data[MAXLEN_PSTR32];
Sergio Paracuellos758f140d2016-09-25 15:34:56 +0200250} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700251
252/* MAC address array */
Sergio Paracuellos46c226d2016-09-25 15:34:57 +0200253struct p80211macarray {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100254 u32 cnt;
255 u8 data[1][MAXLEN_PSTR6];
Sergio Paracuellos46c226d2016-09-25 15:34:57 +0200256} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700257
258/* prototype template */
Sergio Paracuelloscf796932016-09-25 15:34:58 +0200259struct p80211item {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100260 u32 did;
261 u16 status;
262 u16 len;
Sergio Paracuelloscf796932016-09-25 15:34:58 +0200263} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700264
265/* prototype template w/ data item */
Sergio Paracuellosac033ec2016-09-25 15:34:59 +0200266struct p80211itemd {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100267 u32 did;
268 u16 status;
269 u16 len;
270 u8 data[0];
Sergio Paracuellosac033ec2016-09-25 15:34:59 +0200271} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700272
Solomon Peachyaaad4302008-10-29 10:42:53 -0400273/* message data item for int, BOUNDEDINT, ENUMINT */
Sergio Paracuellosb26b2322016-09-25 15:35:00 +0200274struct p80211item_uint32 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100275 u32 did;
276 u16 status;
277 u16 len;
278 u32 data;
Sergio Paracuellosb26b2322016-09-25 15:35:00 +0200279} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700280
281/* message data item for OCTETSTR, DISPLAYSTR */
Sergio Paracuellos34aae052016-09-25 15:35:01 +0200282struct p80211item_pstr6 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100283 u32 did;
284 u16 status;
285 u16 len;
Sergio Paracuellos2816c002016-09-25 15:34:54 +0200286 struct p80211pstr6 data;
Sergio Paracuellos34aae052016-09-25 15:35:01 +0200287} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700288
289/* message data item for OCTETSTR, DISPLAYSTR */
Sergio Paracuellosf055b212016-09-25 15:35:02 +0200290struct p80211item_pstr14 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100291 u32 did;
292 u16 status;
293 u16 len;
Sergio Paracuellos5d005582016-09-25 15:34:55 +0200294 struct p80211pstr14 data;
Sergio Paracuellosf055b212016-09-25 15:35:02 +0200295} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700296
297/* message data item for OCTETSTR, DISPLAYSTR */
Sergio Paracuellos6a50b5a2016-09-25 15:35:03 +0200298struct p80211item_pstr32 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100299 u32 did;
300 u16 status;
301 u16 len;
Sergio Paracuellos758f140d2016-09-25 15:34:56 +0200302 struct p80211pstr32 data;
Sergio Paracuellos6a50b5a2016-09-25 15:35:03 +0200303} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700304
305/* message data item for OCTETSTR, DISPLAYSTR */
Sergio Paracuellos3636ab02016-09-25 15:35:04 +0200306struct p80211item_pstr255 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100307 u32 did;
308 u16 status;
309 u16 len;
Sergio Paracuellos94a29142016-09-25 15:34:53 +0200310 struct p80211pstr255 data;
Sergio Paracuellos3636ab02016-09-25 15:35:04 +0200311} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700312
313/* message data item for UNK 392, namely mib items */
Sergio Paracuellos37e48662016-09-25 15:35:05 +0200314struct p80211item_unk392 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100315 u32 did;
316 u16 status;
317 u16 len;
318 u8 data[MAXLEN_MIBATTRIBUTE];
Sergio Paracuellos37e48662016-09-25 15:35:05 +0200319} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700320
321/* message data item for UNK 1025, namely p2 pdas */
Sergio Paracuellos1ad26f72016-09-25 15:35:06 +0200322struct p80211item_unk1024 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100323 u32 did;
324 u16 status;
325 u16 len;
326 u8 data[1024];
Sergio Paracuellos1ad26f72016-09-25 15:35:06 +0200327} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700328
329/* message data item for UNK 4096, namely p2 download chunks */
Sergio Paracuellosf8b8f642016-09-25 15:35:07 +0200330struct p80211item_unk4096 {
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100331 u32 did;
332 u16 status;
333 u16 len;
334 u8 data[4096];
Sergio Paracuellosf8b8f642016-09-25 15:35:07 +0200335} __packed;
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700336
337struct catlistitem;
338
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. */
343
Svenne Krap5dd8acc2010-02-14 18:59:00 +0100344typedef void (*p80211_totext_t) (struct catlistitem *, u32 did, u8 *itembuf,
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100345 char *textbuf);
Svenne Krap5dd8acc2010-02-14 18:59:00 +0100346typedef void (*p80211_fromtext_t) (struct catlistitem *, u32 did, u8 *itembuf,
Moritz Muehlenhoff356925c2009-02-08 02:20:57 +0100347 char *textbuf);
Svenne Krap5dd8acc2010-02-14 18:59:00 +0100348typedef u32(*p80211_valid_t) (struct catlistitem *, u32 did, u8 *itembuf);
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700349
350/*----------------------------------------------------------------*/
351/* Enumeration Lists */
352/* The following are the external declarations */
353/* for all enumerations */
354
Sergio Paracuellosaa97dc12016-09-23 15:45:19 +0200355extern struct p80211enum MKENUMNAME(truth);
356extern struct p80211enum MKENUMNAME(ifstate);
357extern struct p80211enum MKENUMNAME(powermgmt);
358extern struct p80211enum MKENUMNAME(bsstype);
359extern struct p80211enum MKENUMNAME(authalg);
360extern struct p80211enum MKENUMNAME(phytype);
361extern struct p80211enum MKENUMNAME(temptype);
362extern struct p80211enum MKENUMNAME(regdomain);
363extern struct p80211enum MKENUMNAME(ccamode);
364extern struct p80211enum MKENUMNAME(diversity);
365extern struct p80211enum MKENUMNAME(scantype);
366extern struct p80211enum MKENUMNAME(resultcode);
367extern struct p80211enum MKENUMNAME(reason);
368extern struct p80211enum MKENUMNAME(status);
369extern struct p80211enum MKENUMNAME(msgcode);
370extern struct p80211enum MKENUMNAME(msgitem_status);
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700371
Sergio Paracuellosaa97dc12016-09-23 15:45:19 +0200372extern struct p80211enum MKENUMNAME(lnxroam_reason);
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700373
Sergio Paracuellosaa97dc12016-09-23 15:45:19 +0200374extern struct p80211enum MKENUMNAME(p2preamble);
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700375
Greg Kroah-Hartman00b3ed12008-10-02 11:29:28 -0700376#endif /* _P80211TYPES_H */