1 /* SPDX-License-Identifier: (GPL-2.0 OR MPL-1.1) */ 2 /* 3 * 4 * 5 * Macros, constants, types, and funcs for p80211 data types 6 * 7 * Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. 8 * -------------------------------------------------------------------- 9 * 10 * linux-wlan 11 * 12 * -------------------------------------------------------------------- 13 * 14 * Inquiries regarding the linux-wlan Open Source project can be 15 * made directly to: 16 * 17 * AbsoluteValue Systems Inc. 18 * info@linux-wlan.com 19 * http://www.linux-wlan.com 20 * 21 * -------------------------------------------------------------------- 22 * 23 * Portions of the development of this software were funded by 24 * Intersil Corporation as part of PRISM(R) chipset product development. 25 * 26 * -------------------------------------------------------------------- 27 * 28 * This file declares some of the constants and types used in various 29 * parts of the linux-wlan system. 30 * 31 * Notes: 32 * - Constant values are always in HOST byte order. 33 * 34 * All functions and statics declared here are implemented in p80211types.c 35 * -------------------------------------------------------------------- 36 */ 37 38 #ifndef _P80211TYPES_H 39 #define _P80211TYPES_H 40 41 /*----------------------------------------------------------------*/ 42 /* The following constants are indexes into the Mib Category List */ 43 /* and the Message Category List */ 44 45 /* Mib Category List */ 46 #define P80211_MIB_CAT_DOT11SMT 1 47 #define P80211_MIB_CAT_DOT11MAC 2 48 #define P80211_MIB_CAT_DOT11PHY 3 49 50 #define P80211SEC_DOT11SMT P80211_MIB_CAT_DOT11SMT 51 #define P80211SEC_DOT11MAC P80211_MIB_CAT_DOT11MAC 52 #define P80211SEC_DOT11PHY P80211_MIB_CAT_DOT11PHY 53 54 /* Message Category List */ 55 #define P80211_MSG_CAT_DOT11REQ 1 56 #define P80211_MSG_CAT_DOT11IND 2 57 58 /*----------------------------------------------------------------*/ 59 /* p80211 enumeration constants. The value to text mappings for */ 60 /* these is in p80211types.c. These defines were generated */ 61 /* from the mappings. */ 62 63 /* error codes for lookups */ 64 65 #define P80211ENUM_truth_false 0 66 #define P80211ENUM_truth_true 1 67 #define P80211ENUM_ifstate_disable 0 68 #define P80211ENUM_ifstate_fwload 1 69 #define P80211ENUM_ifstate_enable 2 70 #define P80211ENUM_bsstype_infrastructure 1 71 #define P80211ENUM_bsstype_independent 2 72 #define P80211ENUM_bsstype_any 3 73 #define P80211ENUM_authalg_opensystem 1 74 #define P80211ENUM_authalg_sharedkey 2 75 #define P80211ENUM_scantype_active 1 76 #define P80211ENUM_resultcode_success 1 77 #define P80211ENUM_resultcode_invalid_parameters 2 78 #define P80211ENUM_resultcode_not_supported 3 79 #define P80211ENUM_resultcode_refused 6 80 #define P80211ENUM_resultcode_cant_set_readonly_mib 10 81 #define P80211ENUM_resultcode_implementation_failure 11 82 #define P80211ENUM_resultcode_cant_get_writeonly_mib 12 83 #define P80211ENUM_status_successful 0 84 #define P80211ENUM_status_unspec_failure 1 85 #define P80211ENUM_status_ap_full 17 86 #define P80211ENUM_msgitem_status_data_ok 0 87 #define P80211ENUM_msgitem_status_no_value 1 88 89 /*----------------------------------------------------------------*/ 90 /* p80211 max length constants for the different pascal strings. */ 91 92 #define MAXLEN_PSTR6 (6) /* pascal array of 6 bytes */ 93 #define MAXLEN_PSTR14 (14) /* pascal array of 14 bytes */ 94 #define MAXLEN_PSTR32 (32) /* pascal array of 32 bytes */ 95 #define MAXLEN_PSTR255 (255) /* pascal array of 255 bytes */ 96 #define MAXLEN_MIBATTRIBUTE (392) /* maximum mibattribute */ 97 /* where the size of the DATA itself */ 98 /* is a DID-LEN-DATA triple */ 99 /* with a max size of 4+4+384 */ 100 101 /*---------------------------------------------------------------- 102 * The following constants and macros are used to construct and 103 * deconstruct the Data ID codes. The coding is as follows: 104 * 105 * ...rwtnnnnnnnniiiiiiggggggssssss s - Section 106 * g - Group 107 * i - Item 108 * n - Index 109 * t - Table flag 110 * w - Write flag 111 * r - Read flag 112 * . - Unused 113 */ 114 115 #define P80211DID_LSB_SECTION (0) 116 #define P80211DID_LSB_GROUP (6) 117 #define P80211DID_LSB_ITEM (12) 118 #define P80211DID_LSB_INDEX (18) 119 #define P80211DID_LSB_ISTABLE (26) 120 #define P80211DID_LSB_ACCESS (27) 121 122 #define P80211DID_MASK_SECTION (0x0000003fUL) 123 #define P80211DID_MASK_GROUP (0x0000003fUL) 124 #define P80211DID_MASK_ITEM (0x0000003fUL) 125 #define P80211DID_MASK_INDEX (0x000000ffUL) 126 #define P80211DID_MASK_ISTABLE (0x00000001UL) 127 #define P80211DID_MASK_ACCESS (0x00000003UL) 128 129 #define P80211DID_MK(a, m, l) ((((u32)(a)) & (m)) << (l)) 130 131 #define P80211DID_MKSECTION(a) P80211DID_MK(a, \ 132 P80211DID_MASK_SECTION, \ 133 P80211DID_LSB_SECTION) 134 #define P80211DID_MKGROUP(a) P80211DID_MK(a, \ 135 P80211DID_MASK_GROUP, \ 136 P80211DID_LSB_GROUP) 137 #define P80211DID_MKITEM(a) P80211DID_MK(a, \ 138 P80211DID_MASK_ITEM, \ 139 P80211DID_LSB_ITEM) 140 #define P80211DID_MKINDEX(a) P80211DID_MK(a, \ 141 P80211DID_MASK_INDEX, \ 142 P80211DID_LSB_INDEX) 143 #define P80211DID_MKISTABLE(a) P80211DID_MK(a, \ 144 P80211DID_MASK_ISTABLE, \ 145 P80211DID_LSB_ISTABLE) 146 147 #define P80211DID_MKID(s, g, i, n, t, a) (P80211DID_MKSECTION(s) | \ 148 P80211DID_MKGROUP(g) | \ 149 P80211DID_MKITEM(i) | \ 150 P80211DID_MKINDEX(n) | \ 151 P80211DID_MKISTABLE(t) | \ 152 (a)) 153 154 #define P80211DID_GET(a, m, l) ((((u32)(a)) >> (l)) & (m)) 155 156 #define P80211DID_SECTION(a) P80211DID_GET(a, \ 157 P80211DID_MASK_SECTION, \ 158 P80211DID_LSB_SECTION) 159 #define P80211DID_GROUP(a) P80211DID_GET(a, \ 160 P80211DID_MASK_GROUP, \ 161 P80211DID_LSB_GROUP) 162 #define P80211DID_ITEM(a) P80211DID_GET(a, \ 163 P80211DID_MASK_ITEM, \ 164 P80211DID_LSB_ITEM) 165 #define P80211DID_INDEX(a) P80211DID_GET(a, \ 166 P80211DID_MASK_INDEX, \ 167 P80211DID_LSB_INDEX) 168 #define P80211DID_ISTABLE(a) P80211DID_GET(a, \ 169 P80211DID_MASK_ISTABLE, \ 170 P80211DID_LSB_ISTABLE) 171 #define P80211DID_ACCESS(a) P80211DID_GET(a, \ 172 P80211DID_MASK_ACCESS, \ 173 P80211DID_LSB_ACCESS) 174 175 /*----------------------------------------------------------------*/ 176 /* The following structure types are used to store data items in */ 177 /* messages. */ 178 179 /* Template pascal string */ 180 struct p80211pstr { 181 u8 len; 182 } __packed; 183 184 struct p80211pstrd { 185 u8 len; 186 u8 data[]; 187 } __packed; 188 189 /* Maximum pascal string */ 190 struct p80211pstr255 { 191 u8 len; 192 u8 data[MAXLEN_PSTR255]; 193 } __packed; 194 195 /* pascal string for macaddress and bssid */ 196 struct p80211pstr6 { 197 u8 len; 198 u8 data[MAXLEN_PSTR6]; 199 } __packed; 200 201 /* pascal string for channel list */ 202 struct p80211pstr14 { 203 u8 len; 204 u8 data[MAXLEN_PSTR14]; 205 } __packed; 206 207 /* pascal string for ssid */ 208 struct p80211pstr32 { 209 u8 len; 210 u8 data[MAXLEN_PSTR32]; 211 } __packed; 212 213 /* prototype template */ 214 struct p80211item { 215 u32 did; 216 u16 status; 217 u16 len; 218 } __packed; 219 220 /* prototype template w/ data item */ 221 struct p80211itemd { 222 u32 did; 223 u16 status; 224 u16 len; 225 u8 data[]; 226 } __packed; 227 228 /* message data item for int, BOUNDEDINT, ENUMINT */ 229 struct p80211item_uint32 { 230 u32 did; 231 u16 status; 232 u16 len; 233 u32 data; 234 } __packed; 235 236 /* message data item for OCTETSTR, DISPLAYSTR */ 237 struct p80211item_pstr6 { 238 u32 did; 239 u16 status; 240 u16 len; 241 struct p80211pstr6 data; 242 } __packed; 243 244 /* message data item for OCTETSTR, DISPLAYSTR */ 245 struct p80211item_pstr14 { 246 u32 did; 247 u16 status; 248 u16 len; 249 struct p80211pstr14 data; 250 } __packed; 251 252 /* message data item for OCTETSTR, DISPLAYSTR */ 253 struct p80211item_pstr32 { 254 u32 did; 255 u16 status; 256 u16 len; 257 struct p80211pstr32 data; 258 } __packed; 259 260 /* message data item for OCTETSTR, DISPLAYSTR */ 261 struct p80211item_pstr255 { 262 u32 did; 263 u16 status; 264 u16 len; 265 struct p80211pstr255 data; 266 } __packed; 267 268 /* message data item for UNK 392, namely mib items */ 269 struct p80211item_unk392 { 270 u32 did; 271 u16 status; 272 u16 len; 273 u8 data[MAXLEN_MIBATTRIBUTE]; 274 } __packed; 275 276 /* message data item for UNK 1025, namely p2 pdas */ 277 struct p80211item_unk1024 { 278 u32 did; 279 u16 status; 280 u16 len; 281 u8 data[1024]; 282 } __packed; 283 284 /* message data item for UNK 4096, namely p2 download chunks */ 285 struct p80211item_unk4096 { 286 u32 did; 287 u16 status; 288 u16 len; 289 u8 data[4096]; 290 } __packed; 291 292 #endif /* _P80211TYPES_H */ 293