1 /* 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 */ 57 58 #ifndef _P80211TYPES_H 59 #define _P80211TYPES_H 60 61 /*----------------------------------------------------------------*/ 62 /* 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 77 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 */ 84 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 108 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 121 /*----------------------------------------------------------------*/ 122 /* The following macro creates a name for an enum */ 123 124 #define MKENUMNAME(name) p80211enum_ ## name 125 126 /*---------------------------------------------------------------- 127 * 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 */ 139 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) 146 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) 153 154 #define P80211DID_MK(a, m, l) ((((u32)(a)) & (m)) << (l)) 155 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, \ 161 P80211DID_LSB_GROUP) 162 #define P80211DID_MKITEM(a) P80211DID_MK(a, \ 163 P80211DID_MASK_ITEM, \ 164 P80211DID_LSB_ITEM) 165 #define P80211DID_MKINDEX(a) P80211DID_MK(a, \ 166 P80211DID_MASK_INDEX, \ 167 P80211DID_LSB_INDEX) 168 #define P80211DID_MKISTABLE(a) P80211DID_MK(a, \ 169 P80211DID_MASK_ISTABLE, \ 170 P80211DID_LSB_ISTABLE) 171 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) | \ 177 (a)) 178 179 #define P80211DID_GET(a, m, l) ((((u32)(a)) >> (l)) & (m)) 180 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 200 /*----------------------------------------------------------------*/ 201 /* The following structure types are used for the representation */ 202 /* of ENUMint type metadata. */ 203 204 struct p80211enumpair { 205 u32 val; 206 char *name; 207 }; 208 209 struct p80211enum { 210 int nitems; 211 struct p80211enumpair *list; 212 }; 213 214 /*----------------------------------------------------------------*/ 215 /* The following structure types are used to store data items in */ 216 /* messages. */ 217 218 /* Template pascal string */ 219 struct p80211pstr { 220 u8 len; 221 } __packed; 222 223 struct p80211pstrd { 224 u8 len; 225 u8 data[0]; 226 } __packed; 227 228 /* Maximum pascal string */ 229 struct p80211pstr255 { 230 u8 len; 231 u8 data[MAXLEN_PSTR255]; 232 } __packed; 233 234 /* pascal string for macaddress and bssid */ 235 struct p80211pstr6 { 236 u8 len; 237 u8 data[MAXLEN_PSTR6]; 238 } __packed; 239 240 /* pascal string for channel list */ 241 struct p80211pstr14 { 242 u8 len; 243 u8 data[MAXLEN_PSTR14]; 244 } __packed; 245 246 /* pascal string for ssid */ 247 struct p80211pstr32 { 248 u8 len; 249 u8 data[MAXLEN_PSTR32]; 250 } __packed; 251 252 /* MAC address array */ 253 struct p80211macarray { 254 u32 cnt; 255 u8 data[1][MAXLEN_PSTR6]; 256 } __packed; 257 258 /* prototype template */ 259 struct p80211item { 260 u32 did; 261 u16 status; 262 u16 len; 263 } __packed; 264 265 /* prototype template w/ data item */ 266 struct p80211itemd { 267 u32 did; 268 u16 status; 269 u16 len; 270 u8 data[0]; 271 } __packed; 272 273 /* message data item for int, BOUNDEDINT, ENUMINT */ 274 struct p80211item_uint32 { 275 u32 did; 276 u16 status; 277 u16 len; 278 u32 data; 279 } __packed; 280 281 /* message data item for OCTETSTR, DISPLAYSTR */ 282 struct p80211item_pstr6 { 283 u32 did; 284 u16 status; 285 u16 len; 286 struct p80211pstr6 data; 287 } __packed; 288 289 /* message data item for OCTETSTR, DISPLAYSTR */ 290 struct p80211item_pstr14 { 291 u32 did; 292 u16 status; 293 u16 len; 294 struct p80211pstr14 data; 295 } __packed; 296 297 /* message data item for OCTETSTR, DISPLAYSTR */ 298 struct p80211item_pstr32 { 299 u32 did; 300 u16 status; 301 u16 len; 302 struct p80211pstr32 data; 303 } __packed; 304 305 /* message data item for OCTETSTR, DISPLAYSTR */ 306 struct p80211item_pstr255 { 307 u32 did; 308 u16 status; 309 u16 len; 310 struct p80211pstr255 data; 311 } __packed; 312 313 /* message data item for UNK 392, namely mib items */ 314 struct p80211item_unk392 { 315 u32 did; 316 u16 status; 317 u16 len; 318 u8 data[MAXLEN_MIBATTRIBUTE]; 319 } __packed; 320 321 /* message data item for UNK 1025, namely p2 pdas */ 322 struct p80211item_unk1024 { 323 u32 did; 324 u16 status; 325 u16 len; 326 u8 data[1024]; 327 } __packed; 328 329 /* message data item for UNK 4096, namely p2 download chunks */ 330 struct p80211item_unk4096 { 331 u32 did; 332 u16 status; 333 u16 len; 334 u8 data[4096]; 335 } __packed; 336 337 struct 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 344 typedef void (*p80211_totext_t) (struct catlistitem *, u32 did, u8 *itembuf, 345 char *textbuf); 346 typedef void (*p80211_fromtext_t) (struct catlistitem *, u32 did, u8 *itembuf, 347 char *textbuf); 348 typedef u32(*p80211_valid_t) (struct catlistitem *, u32 did, u8 *itembuf); 349 350 /*----------------------------------------------------------------*/ 351 /* Enumeration Lists */ 352 /* The following are the external declarations */ 353 /* for all enumerations */ 354 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); 371 372 extern struct p80211enum MKENUMNAME(lnxroam_reason); 373 374 extern struct p80211enum MKENUMNAME(p2preamble); 375 376 #endif /* _P80211TYPES_H */ 377