13fb28ae7STim Collier /* SPDX-License-Identifier: (GPL-2.0 OR MPL-1.1) */
20ae952e3SSergio Paracuellos /*
3*8ffd91d9SAldas Taraškevičius  *
400b3ed16SGreg Kroah-Hartman  *
500b3ed16SGreg Kroah-Hartman  * Macros, constants, types, and funcs for p80211 data types
600b3ed16SGreg Kroah-Hartman  *
700b3ed16SGreg Kroah-Hartman  * Copyright (C) 1999 AbsoluteValue Systems, Inc.  All Rights Reserved.
800b3ed16SGreg Kroah-Hartman  * --------------------------------------------------------------------
900b3ed16SGreg Kroah-Hartman  *
1000b3ed16SGreg Kroah-Hartman  * linux-wlan
1100b3ed16SGreg Kroah-Hartman  *
1200b3ed16SGreg Kroah-Hartman  * --------------------------------------------------------------------
1300b3ed16SGreg Kroah-Hartman  *
1400b3ed16SGreg Kroah-Hartman  * Inquiries regarding the linux-wlan Open Source project can be
1500b3ed16SGreg Kroah-Hartman  * made directly to:
1600b3ed16SGreg Kroah-Hartman  *
1700b3ed16SGreg Kroah-Hartman  * AbsoluteValue Systems Inc.
1800b3ed16SGreg Kroah-Hartman  * info@linux-wlan.com
1900b3ed16SGreg Kroah-Hartman  * http://www.linux-wlan.com
2000b3ed16SGreg Kroah-Hartman  *
2100b3ed16SGreg Kroah-Hartman  * --------------------------------------------------------------------
2200b3ed16SGreg Kroah-Hartman  *
2300b3ed16SGreg Kroah-Hartman  * Portions of the development of this software were funded by
2400b3ed16SGreg Kroah-Hartman  * Intersil Corporation as part of PRISM(R) chipset product development.
2500b3ed16SGreg Kroah-Hartman  *
2600b3ed16SGreg Kroah-Hartman  * --------------------------------------------------------------------
2700b3ed16SGreg Kroah-Hartman  *
2800b3ed16SGreg Kroah-Hartman  * This file declares some of the constants and types used in various
2900b3ed16SGreg Kroah-Hartman  * parts of the linux-wlan system.
3000b3ed16SGreg Kroah-Hartman  *
3100b3ed16SGreg Kroah-Hartman  * Notes:
3200b3ed16SGreg Kroah-Hartman  *   - Constant values are always in HOST byte order.
3300b3ed16SGreg Kroah-Hartman  *
3400b3ed16SGreg Kroah-Hartman  * All functions and statics declared here are implemented in p80211types.c
3500b3ed16SGreg Kroah-Hartman  *   --------------------------------------------------------------------
3600b3ed16SGreg Kroah-Hartman  */
3700b3ed16SGreg Kroah-Hartman 
3800b3ed16SGreg Kroah-Hartman #ifndef _P80211TYPES_H
3900b3ed16SGreg Kroah-Hartman #define _P80211TYPES_H
4000b3ed16SGreg Kroah-Hartman 
4100b3ed16SGreg Kroah-Hartman /*----------------------------------------------------------------*/
4200b3ed16SGreg Kroah-Hartman /* The following constants are indexes into the Mib Category List */
4300b3ed16SGreg Kroah-Hartman /* and the Message Category List */
4400b3ed16SGreg Kroah-Hartman 
4500b3ed16SGreg Kroah-Hartman /* Mib Category List */
4600b3ed16SGreg Kroah-Hartman #define P80211_MIB_CAT_DOT11SMT		1
4700b3ed16SGreg Kroah-Hartman #define P80211_MIB_CAT_DOT11MAC		2
4800b3ed16SGreg Kroah-Hartman #define P80211_MIB_CAT_DOT11PHY		3
4900b3ed16SGreg Kroah-Hartman 
5000b3ed16SGreg Kroah-Hartman #define P80211SEC_DOT11SMT		P80211_MIB_CAT_DOT11SMT
5100b3ed16SGreg Kroah-Hartman #define P80211SEC_DOT11MAC		P80211_MIB_CAT_DOT11MAC
5200b3ed16SGreg Kroah-Hartman #define P80211SEC_DOT11PHY		P80211_MIB_CAT_DOT11PHY
5300b3ed16SGreg Kroah-Hartman 
5400b3ed16SGreg Kroah-Hartman /* Message Category List */
5500b3ed16SGreg Kroah-Hartman #define P80211_MSG_CAT_DOT11REQ		1
5600b3ed16SGreg Kroah-Hartman #define P80211_MSG_CAT_DOT11IND		2
5700b3ed16SGreg Kroah-Hartman 
5800b3ed16SGreg Kroah-Hartman /*----------------------------------------------------------------*/
5900b3ed16SGreg Kroah-Hartman /* p80211 enumeration constants.  The value to text mappings for */
6000b3ed16SGreg Kroah-Hartman /*  these is in p80211types.c.  These defines were generated */
6100b3ed16SGreg Kroah-Hartman /*  from the mappings. */
6200b3ed16SGreg Kroah-Hartman 
6300b3ed16SGreg Kroah-Hartman /* error codes for lookups */
6400b3ed16SGreg Kroah-Hartman 
6500b3ed16SGreg Kroah-Hartman #define P80211ENUM_truth_false			0
6600b3ed16SGreg Kroah-Hartman #define P80211ENUM_truth_true			1
6700b3ed16SGreg Kroah-Hartman #define P80211ENUM_ifstate_disable		0
6800b3ed16SGreg Kroah-Hartman #define P80211ENUM_ifstate_fwload		1
6900b3ed16SGreg Kroah-Hartman #define P80211ENUM_ifstate_enable		2
7000b3ed16SGreg Kroah-Hartman #define P80211ENUM_bsstype_infrastructure	1
7100b3ed16SGreg Kroah-Hartman #define P80211ENUM_bsstype_independent		2
7200b3ed16SGreg Kroah-Hartman #define P80211ENUM_bsstype_any			3
7300b3ed16SGreg Kroah-Hartman #define P80211ENUM_authalg_opensystem		1
7400b3ed16SGreg Kroah-Hartman #define P80211ENUM_authalg_sharedkey		2
7500b3ed16SGreg Kroah-Hartman #define P80211ENUM_scantype_active		1
7600b3ed16SGreg Kroah-Hartman #define P80211ENUM_resultcode_success		1
7700b3ed16SGreg Kroah-Hartman #define P80211ENUM_resultcode_invalid_parameters	2
7800b3ed16SGreg Kroah-Hartman #define P80211ENUM_resultcode_not_supported	3
7900b3ed16SGreg Kroah-Hartman #define P80211ENUM_resultcode_refused		6
8000b3ed16SGreg Kroah-Hartman #define P80211ENUM_resultcode_cant_set_readonly_mib	10
8100b3ed16SGreg Kroah-Hartman #define P80211ENUM_resultcode_implementation_failure	11
8200b3ed16SGreg Kroah-Hartman #define P80211ENUM_resultcode_cant_get_writeonly_mib	12
8300b3ed16SGreg Kroah-Hartman #define P80211ENUM_status_successful		0
8400b3ed16SGreg Kroah-Hartman #define P80211ENUM_status_unspec_failure	1
8500b3ed16SGreg Kroah-Hartman #define P80211ENUM_status_ap_full		17
8600b3ed16SGreg Kroah-Hartman #define P80211ENUM_msgitem_status_data_ok		0
8700b3ed16SGreg Kroah-Hartman #define P80211ENUM_msgitem_status_no_value		1
8800b3ed16SGreg Kroah-Hartman 
8900b3ed16SGreg Kroah-Hartman /*----------------------------------------------------------------*/
9000b3ed16SGreg Kroah-Hartman /* p80211 max length constants for the different pascal strings. */
9100b3ed16SGreg Kroah-Hartman 
9200b3ed16SGreg Kroah-Hartman #define MAXLEN_PSTR6		(6)	/* pascal array of 6 bytes */
9300b3ed16SGreg Kroah-Hartman #define MAXLEN_PSTR14		(14)	/* pascal array of 14 bytes */
9400b3ed16SGreg Kroah-Hartman #define MAXLEN_PSTR32		(32)	/* pascal array of 32 bytes */
9500b3ed16SGreg Kroah-Hartman #define MAXLEN_PSTR255		(255)	/* pascal array of 255 bytes */
9600b3ed16SGreg Kroah-Hartman #define MAXLEN_MIBATTRIBUTE	(392)	/* maximum mibattribute */
9700b3ed16SGreg Kroah-Hartman 					/* where the size of the DATA itself */
9800b3ed16SGreg Kroah-Hartman 					/* is a DID-LEN-DATA triple */
9900b3ed16SGreg Kroah-Hartman 					/* with a max size of 4+4+384 */
10000b3ed16SGreg Kroah-Hartman 
10100b3ed16SGreg Kroah-Hartman /*----------------------------------------------------------------
10200b3ed16SGreg Kroah-Hartman  * The following constants and macros are used to construct and
10300b3ed16SGreg Kroah-Hartman  * deconstruct the Data ID codes.  The coding is as follows:
10400b3ed16SGreg Kroah-Hartman  *
10500b3ed16SGreg Kroah-Hartman  *     ...rwtnnnnnnnniiiiiiggggggssssss      s - Section
10600b3ed16SGreg Kroah-Hartman  *                                           g - Group
10700b3ed16SGreg Kroah-Hartman  *                                           i - Item
10800b3ed16SGreg Kroah-Hartman  *                                           n - Index
10900b3ed16SGreg Kroah-Hartman  *                                           t - Table flag
11000b3ed16SGreg Kroah-Hartman  *                                           w - Write flag
11100b3ed16SGreg Kroah-Hartman  *                                           r - Read flag
11200b3ed16SGreg Kroah-Hartman  *                                           . - Unused
11300b3ed16SGreg Kroah-Hartman  */
11400b3ed16SGreg Kroah-Hartman 
11500b3ed16SGreg Kroah-Hartman #define P80211DID_LSB_SECTION		(0)
11600b3ed16SGreg Kroah-Hartman #define P80211DID_LSB_GROUP		(6)
11700b3ed16SGreg Kroah-Hartman #define P80211DID_LSB_ITEM		(12)
11800b3ed16SGreg Kroah-Hartman #define P80211DID_LSB_INDEX		(18)
11900b3ed16SGreg Kroah-Hartman #define P80211DID_LSB_ISTABLE		(26)
12000b3ed16SGreg Kroah-Hartman #define P80211DID_LSB_ACCESS		(27)
12100b3ed16SGreg Kroah-Hartman 
12200b3ed16SGreg Kroah-Hartman #define P80211DID_MASK_SECTION		(0x0000003fUL)
12300b3ed16SGreg Kroah-Hartman #define P80211DID_MASK_GROUP		(0x0000003fUL)
12400b3ed16SGreg Kroah-Hartman #define P80211DID_MASK_ITEM		(0x0000003fUL)
12500b3ed16SGreg Kroah-Hartman #define P80211DID_MASK_INDEX		(0x000000ffUL)
12600b3ed16SGreg Kroah-Hartman #define P80211DID_MASK_ISTABLE		(0x00000001UL)
12700b3ed16SGreg Kroah-Hartman #define P80211DID_MASK_ACCESS		(0x00000003UL)
12800b3ed16SGreg Kroah-Hartman 
129aaad4303SSolomon Peachy #define P80211DID_MK(a, m, l)	((((u32)(a)) & (m)) << (l))
13000b3ed16SGreg Kroah-Hartman 
13100b3ed16SGreg Kroah-Hartman #define P80211DID_MKSECTION(a)	P80211DID_MK(a, \
13200b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_SECTION, \
13300b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_SECTION)
13400b3ed16SGreg Kroah-Hartman #define P80211DID_MKGROUP(a)	P80211DID_MK(a, \
13500b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_GROUP, \
13600b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_GROUP)
13700b3ed16SGreg Kroah-Hartman #define P80211DID_MKITEM(a)	P80211DID_MK(a, \
13800b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_ITEM, \
13900b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_ITEM)
14000b3ed16SGreg Kroah-Hartman #define P80211DID_MKINDEX(a)	P80211DID_MK(a, \
14100b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_INDEX, \
14200b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_INDEX)
14300b3ed16SGreg Kroah-Hartman #define P80211DID_MKISTABLE(a)	P80211DID_MK(a, \
14400b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_ISTABLE, \
14500b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_ISTABLE)
14600b3ed16SGreg Kroah-Hartman 
14700b3ed16SGreg Kroah-Hartman #define P80211DID_MKID(s, g, i, n, t, a)	(P80211DID_MKSECTION(s) | \
14800b3ed16SGreg Kroah-Hartman 					P80211DID_MKGROUP(g) | \
14900b3ed16SGreg Kroah-Hartman 					P80211DID_MKITEM(i) | \
15000b3ed16SGreg Kroah-Hartman 					P80211DID_MKINDEX(n) | \
15100b3ed16SGreg Kroah-Hartman 					P80211DID_MKISTABLE(t) | \
15200b3ed16SGreg Kroah-Hartman 					(a))
15300b3ed16SGreg Kroah-Hartman 
154aaad4303SSolomon Peachy #define P80211DID_GET(a, m, l)	((((u32)(a)) >> (l)) & (m))
15500b3ed16SGreg Kroah-Hartman 
15600b3ed16SGreg Kroah-Hartman #define P80211DID_SECTION(a)	P80211DID_GET(a, \
15700b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_SECTION, \
15800b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_SECTION)
15900b3ed16SGreg Kroah-Hartman #define P80211DID_GROUP(a)	P80211DID_GET(a, \
16000b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_GROUP, \
16100b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_GROUP)
16200b3ed16SGreg Kroah-Hartman #define P80211DID_ITEM(a)	P80211DID_GET(a, \
16300b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_ITEM, \
16400b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_ITEM)
16500b3ed16SGreg Kroah-Hartman #define P80211DID_INDEX(a)	P80211DID_GET(a, \
16600b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_INDEX, \
16700b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_INDEX)
16800b3ed16SGreg Kroah-Hartman #define P80211DID_ISTABLE(a)	P80211DID_GET(a, \
16900b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_ISTABLE, \
17000b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_ISTABLE)
17100b3ed16SGreg Kroah-Hartman #define P80211DID_ACCESS(a)	P80211DID_GET(a, \
17200b3ed16SGreg Kroah-Hartman 					P80211DID_MASK_ACCESS, \
17300b3ed16SGreg Kroah-Hartman 					P80211DID_LSB_ACCESS)
17400b3ed16SGreg Kroah-Hartman 
17500b3ed16SGreg Kroah-Hartman /*----------------------------------------------------------------*/
17600b3ed16SGreg Kroah-Hartman /* The following structure types are used to store data items in */
17700b3ed16SGreg Kroah-Hartman /*  messages. */
17800b3ed16SGreg Kroah-Hartman 
17900b3ed16SGreg Kroah-Hartman /* Template pascal string */
180c529e31fSSergio Paracuellos struct p80211pstr {
181aaad4303SSolomon Peachy 	u8 len;
182c529e31fSSergio Paracuellos } __packed;
18300b3ed16SGreg Kroah-Hartman 
1843fd1e3fcSSergio Paracuellos struct p80211pstrd {
185aaad4303SSolomon Peachy 	u8 len;
1865979afa2SGustavo A. R. Silva 	u8 data[];
1873fd1e3fcSSergio Paracuellos } __packed;
18800b3ed16SGreg Kroah-Hartman 
18900b3ed16SGreg Kroah-Hartman /* Maximum pascal string */
19094a29147SSergio Paracuellos struct p80211pstr255 {
191aaad4303SSolomon Peachy 	u8 len;
192aaad4303SSolomon Peachy 	u8 data[MAXLEN_PSTR255];
19394a29147SSergio Paracuellos } __packed;
19400b3ed16SGreg Kroah-Hartman 
19500b3ed16SGreg Kroah-Hartman /* pascal string for macaddress and bssid */
1962816c008SSergio Paracuellos struct p80211pstr6 {
197aaad4303SSolomon Peachy 	u8 len;
198aaad4303SSolomon Peachy 	u8 data[MAXLEN_PSTR6];
1992816c008SSergio Paracuellos } __packed;
20000b3ed16SGreg Kroah-Hartman 
20100b3ed16SGreg Kroah-Hartman /* pascal string for channel list */
2025d005584SSergio Paracuellos struct p80211pstr14 {
203aaad4303SSolomon Peachy 	u8 len;
204aaad4303SSolomon Peachy 	u8 data[MAXLEN_PSTR14];
2055d005584SSergio Paracuellos } __packed;
20600b3ed16SGreg Kroah-Hartman 
20700b3ed16SGreg Kroah-Hartman /* pascal string for ssid */
208758f140dSSergio Paracuellos struct p80211pstr32 {
209aaad4303SSolomon Peachy 	u8 len;
210aaad4303SSolomon Peachy 	u8 data[MAXLEN_PSTR32];
211758f140dSSergio Paracuellos } __packed;
21200b3ed16SGreg Kroah-Hartman 
21300b3ed16SGreg Kroah-Hartman /* prototype template */
214cf796937SSergio Paracuellos struct p80211item {
215aaad4303SSolomon Peachy 	u32 did;
216aaad4303SSolomon Peachy 	u16 status;
217aaad4303SSolomon Peachy 	u16 len;
218cf796937SSergio Paracuellos } __packed;
21900b3ed16SGreg Kroah-Hartman 
22000b3ed16SGreg Kroah-Hartman /* prototype template w/ data item */
221ac033ec9SSergio Paracuellos struct p80211itemd {
222aaad4303SSolomon Peachy 	u32 did;
223aaad4303SSolomon Peachy 	u16 status;
224aaad4303SSolomon Peachy 	u16 len;
2255979afa2SGustavo A. R. Silva 	u8 data[];
226ac033ec9SSergio Paracuellos } __packed;
22700b3ed16SGreg Kroah-Hartman 
228aaad4303SSolomon Peachy /* message data item for int, BOUNDEDINT, ENUMINT */
229b26b2325SSergio Paracuellos struct p80211item_uint32 {
230aaad4303SSolomon Peachy 	u32 did;
231aaad4303SSolomon Peachy 	u16 status;
232aaad4303SSolomon Peachy 	u16 len;
233aaad4303SSolomon Peachy 	u32 data;
234b26b2325SSergio Paracuellos } __packed;
23500b3ed16SGreg Kroah-Hartman 
23600b3ed16SGreg Kroah-Hartman /* message data item for OCTETSTR, DISPLAYSTR */
23734aae059SSergio Paracuellos struct p80211item_pstr6 {
238aaad4303SSolomon Peachy 	u32 did;
239aaad4303SSolomon Peachy 	u16 status;
240aaad4303SSolomon Peachy 	u16 len;
2412816c008SSergio Paracuellos 	struct p80211pstr6 data;
24234aae059SSergio Paracuellos } __packed;
24300b3ed16SGreg Kroah-Hartman 
24400b3ed16SGreg Kroah-Hartman /* message data item for OCTETSTR, DISPLAYSTR */
245f055b211SSergio Paracuellos struct p80211item_pstr14 {
246aaad4303SSolomon Peachy 	u32 did;
247aaad4303SSolomon Peachy 	u16 status;
248aaad4303SSolomon Peachy 	u16 len;
2495d005584SSergio Paracuellos 	struct p80211pstr14 data;
250f055b211SSergio Paracuellos } __packed;
25100b3ed16SGreg Kroah-Hartman 
25200b3ed16SGreg Kroah-Hartman /* message data item for OCTETSTR, DISPLAYSTR */
2536a50b5afSSergio Paracuellos struct p80211item_pstr32 {
254aaad4303SSolomon Peachy 	u32 did;
255aaad4303SSolomon Peachy 	u16 status;
256aaad4303SSolomon Peachy 	u16 len;
257758f140dSSergio Paracuellos 	struct p80211pstr32 data;
2586a50b5afSSergio Paracuellos } __packed;
25900b3ed16SGreg Kroah-Hartman 
26000b3ed16SGreg Kroah-Hartman /* message data item for OCTETSTR, DISPLAYSTR */
2613636ab01SSergio Paracuellos struct p80211item_pstr255 {
262aaad4303SSolomon Peachy 	u32 did;
263aaad4303SSolomon Peachy 	u16 status;
264aaad4303SSolomon Peachy 	u16 len;
26594a29147SSergio Paracuellos 	struct p80211pstr255 data;
2663636ab01SSergio Paracuellos } __packed;
26700b3ed16SGreg Kroah-Hartman 
26800b3ed16SGreg Kroah-Hartman /* message data item for UNK 392, namely mib items */
26937e48668SSergio Paracuellos struct p80211item_unk392 {
270aaad4303SSolomon Peachy 	u32 did;
271aaad4303SSolomon Peachy 	u16 status;
272aaad4303SSolomon Peachy 	u16 len;
273aaad4303SSolomon Peachy 	u8 data[MAXLEN_MIBATTRIBUTE];
27437e48668SSergio Paracuellos } __packed;
27500b3ed16SGreg Kroah-Hartman 
27600b3ed16SGreg Kroah-Hartman /* message data item for UNK 1025, namely p2 pdas */
2771ad26f70SSergio Paracuellos struct p80211item_unk1024 {
278aaad4303SSolomon Peachy 	u32 did;
279aaad4303SSolomon Peachy 	u16 status;
280aaad4303SSolomon Peachy 	u16 len;
281aaad4303SSolomon Peachy 	u8 data[1024];
2821ad26f70SSergio Paracuellos } __packed;
28300b3ed16SGreg Kroah-Hartman 
28400b3ed16SGreg Kroah-Hartman /* message data item for UNK 4096, namely p2 download chunks */
285f8b8f64fSSergio Paracuellos struct p80211item_unk4096 {
286aaad4303SSolomon Peachy 	u32 did;
287aaad4303SSolomon Peachy 	u16 status;
288aaad4303SSolomon Peachy 	u16 len;
289aaad4303SSolomon Peachy 	u8 data[4096];
290f8b8f64fSSergio Paracuellos } __packed;
29100b3ed16SGreg Kroah-Hartman 
29200b3ed16SGreg Kroah-Hartman #endif /* _P80211TYPES_H */
293