1 /* p80211types.h 2 * 3 * Macros, constants, types, and funcs for p80211 data types 4 * 5 * Copyright (C) 1999 AbsoluteValue Systems, Inc. All Rights Reserved. 6 * -------------------------------------------------------------------- 7 * 8 * linux-wlan 9 * 10 * The contents of this file are subject to the Mozilla Public 11 * License Version 1.1 (the "License"); you may not use this file 12 * except in compliance with the License. You may obtain a copy of 13 * the License at http://www.mozilla.org/MPL/ 14 * 15 * Software distributed under the License is distributed on an "AS 16 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or 17 * implied. See the License for the specific language governing 18 * rights and limitations under the License. 19 * 20 * Alternatively, the contents of this file may be used under the 21 * terms of the GNU Public License version 2 (the "GPL"), in which 22 * case the provisions of the GPL are applicable instead of the 23 * above. If you wish to allow the use of your version of this file 24 * only under the terms of the GPL and not to allow others to use 25 * your version of this file under the MPL, indicate your decision 26 * by deleting the provisions above and replace them with the notice 27 * and other provisions required by the GPL. If you do not delete 28 * the provisions above, a recipient may use your version of this 29 * file under either the MPL or the GPL. 30 * 31 * -------------------------------------------------------------------- 32 * 33 * Inquiries regarding the linux-wlan Open Source project can be 34 * made directly to: 35 * 36 * AbsoluteValue Systems Inc. 37 * info@linux-wlan.com 38 * http://www.linux-wlan.com 39 * 40 * -------------------------------------------------------------------- 41 * 42 * Portions of the development of this software were funded by 43 * Intersil Corporation as part of PRISM(R) chipset product development. 44 * 45 * -------------------------------------------------------------------- 46 * 47 * This file declares some of the constants and types used in various 48 * parts of the linux-wlan system. 49 * 50 * Notes: 51 * - Constant values are always in HOST byte order. 52 * 53 * All functions and statics declared here are implemented in p80211types.c 54 * -------------------------------------------------------------------- 55 */ 56 57 #ifndef _P80211TYPES_H 58 #define _P80211TYPES_H 59 60 /*----------------------------------------------------------------*/ 61 /* The following constants are indexes into the Mib Category List */ 62 /* and the Message Category List */ 63 64 /* Mib Category List */ 65 #define P80211_MIB_CAT_DOT11SMT 1 66 #define P80211_MIB_CAT_DOT11MAC 2 67 #define P80211_MIB_CAT_DOT11PHY 3 68 69 #define P80211SEC_DOT11SMT P80211_MIB_CAT_DOT11SMT 70 #define P80211SEC_DOT11MAC P80211_MIB_CAT_DOT11MAC 71 #define P80211SEC_DOT11PHY P80211_MIB_CAT_DOT11PHY 72 73 /* Message Category List */ 74 #define P80211_MSG_CAT_DOT11REQ 1 75 #define P80211_MSG_CAT_DOT11IND 2 76 77 /*----------------------------------------------------------------*/ 78 /* p80211 enumeration constants. The value to text mappings for */ 79 /* these is in p80211types.c. These defines were generated */ 80 /* from the mappings. */ 81 82 /* error codes for lookups */ 83 84 #define P80211ENUM_truth_false 0 85 #define P80211ENUM_truth_true 1 86 #define P80211ENUM_ifstate_disable 0 87 #define P80211ENUM_ifstate_fwload 1 88 #define P80211ENUM_ifstate_enable 2 89 #define P80211ENUM_bsstype_infrastructure 1 90 #define P80211ENUM_bsstype_independent 2 91 #define P80211ENUM_bsstype_any 3 92 #define P80211ENUM_authalg_opensystem 1 93 #define P80211ENUM_authalg_sharedkey 2 94 #define P80211ENUM_scantype_active 1 95 #define P80211ENUM_resultcode_success 1 96 #define P80211ENUM_resultcode_invalid_parameters 2 97 #define P80211ENUM_resultcode_not_supported 3 98 #define P80211ENUM_resultcode_refused 6 99 #define P80211ENUM_resultcode_cant_set_readonly_mib 10 100 #define P80211ENUM_resultcode_implementation_failure 11 101 #define P80211ENUM_resultcode_cant_get_writeonly_mib 12 102 #define P80211ENUM_status_successful 0 103 #define P80211ENUM_status_unspec_failure 1 104 #define P80211ENUM_status_ap_full 17 105 #define P80211ENUM_msgitem_status_data_ok 0 106 #define P80211ENUM_msgitem_status_no_value 1 107 108 /*----------------------------------------------------------------*/ 109 /* p80211 max length constants for the different pascal strings. */ 110 111 #define MAXLEN_PSTR6 (6) /* pascal array of 6 bytes */ 112 #define MAXLEN_PSTR14 (14) /* pascal array of 14 bytes */ 113 #define MAXLEN_PSTR32 (32) /* pascal array of 32 bytes */ 114 #define MAXLEN_PSTR255 (255) /* pascal array of 255 bytes */ 115 #define MAXLEN_MIBATTRIBUTE (392) /* maximum mibattribute */ 116 /* where the size of the DATA itself */ 117 /* is a DID-LEN-DATA triple */ 118 /* with a max size of 4+4+384 */ 119 120 /*----------------------------------------------------------------*/ 121 /* The following macro creates a name for an enum */ 122 123 #define MKENUMNAME(name) p80211enum_ ## name 124 125 /*---------------------------------------------------------------- 126 * The following constants and macros are used to construct and 127 * deconstruct the Data ID codes. The coding is as follows: 128 * 129 * ...rwtnnnnnnnniiiiiiggggggssssss s - Section 130 * g - Group 131 * i - Item 132 * n - Index 133 * t - Table flag 134 * w - Write flag 135 * r - Read flag 136 * . - Unused 137 */ 138 139 #define P80211DID_LSB_SECTION (0) 140 #define P80211DID_LSB_GROUP (6) 141 #define P80211DID_LSB_ITEM (12) 142 #define P80211DID_LSB_INDEX (18) 143 #define P80211DID_LSB_ISTABLE (26) 144 #define P80211DID_LSB_ACCESS (27) 145 146 #define P80211DID_MASK_SECTION (0x0000003fUL) 147 #define P80211DID_MASK_GROUP (0x0000003fUL) 148 #define P80211DID_MASK_ITEM (0x0000003fUL) 149 #define P80211DID_MASK_INDEX (0x000000ffUL) 150 #define P80211DID_MASK_ISTABLE (0x00000001UL) 151 #define P80211DID_MASK_ACCESS (0x00000003UL) 152 153 #define P80211DID_MK(a, m, l) ((((u32)(a)) & (m)) << (l)) 154 155 #define P80211DID_MKSECTION(a) P80211DID_MK(a, \ 156 P80211DID_MASK_SECTION, \ 157 P80211DID_LSB_SECTION) 158 #define P80211DID_MKGROUP(a) P80211DID_MK(a, \ 159 P80211DID_MASK_GROUP, \ 160 P80211DID_LSB_GROUP) 161 #define P80211DID_MKITEM(a) P80211DID_MK(a, \ 162 P80211DID_MASK_ITEM, \ 163 P80211DID_LSB_ITEM) 164 #define P80211DID_MKINDEX(a) P80211DID_MK(a, \ 165 P80211DID_MASK_INDEX, \ 166 P80211DID_LSB_INDEX) 167 #define P80211DID_MKISTABLE(a) P80211DID_MK(a, \ 168 P80211DID_MASK_ISTABLE, \ 169 P80211DID_LSB_ISTABLE) 170 171 #define P80211DID_MKID(s, g, i, n, t, a) (P80211DID_MKSECTION(s) | \ 172 P80211DID_MKGROUP(g) | \ 173 P80211DID_MKITEM(i) | \ 174 P80211DID_MKINDEX(n) | \ 175 P80211DID_MKISTABLE(t) | \ 176 (a)) 177 178 #define P80211DID_GET(a, m, l) ((((u32)(a)) >> (l)) & (m)) 179 180 #define P80211DID_SECTION(a) P80211DID_GET(a, \ 181 P80211DID_MASK_SECTION, \ 182 P80211DID_LSB_SECTION) 183 #define P80211DID_GROUP(a) P80211DID_GET(a, \ 184 P80211DID_MASK_GROUP, \ 185 P80211DID_LSB_GROUP) 186 #define P80211DID_ITEM(a) P80211DID_GET(a, \ 187 P80211DID_MASK_ITEM, \ 188 P80211DID_LSB_ITEM) 189 #define P80211DID_INDEX(a) P80211DID_GET(a, \ 190 P80211DID_MASK_INDEX, \ 191 P80211DID_LSB_INDEX) 192 #define P80211DID_ISTABLE(a) P80211DID_GET(a, \ 193 P80211DID_MASK_ISTABLE, \ 194 P80211DID_LSB_ISTABLE) 195 #define P80211DID_ACCESS(a) P80211DID_GET(a, \ 196 P80211DID_MASK_ACCESS, \ 197 P80211DID_LSB_ACCESS) 198 199 /*----------------------------------------------------------------*/ 200 /* The following structure types are used for the represenation */ 201 /* of ENUMint type metadata. */ 202 203 typedef struct p80211enumpair { 204 u32 val; 205 char *name; 206 } p80211enumpair_t; 207 208 typedef struct p80211enum { 209 int nitems; 210 p80211enumpair_t *list; 211 } p80211enum_t; 212 213 /*----------------------------------------------------------------*/ 214 /* The following structure types are used to store data items in */ 215 /* messages. */ 216 217 /* Template pascal string */ 218 typedef struct p80211pstr { 219 u8 len; 220 } __packed p80211pstr_t; 221 222 typedef struct p80211pstrd { 223 u8 len; 224 u8 data[0]; 225 } __packed p80211pstrd_t; 226 227 /* Maximum pascal string */ 228 typedef struct p80211pstr255 { 229 u8 len; 230 u8 data[MAXLEN_PSTR255]; 231 } __packed p80211pstr255_t; 232 233 /* pascal string for macaddress and bssid */ 234 typedef struct p80211pstr6 { 235 u8 len; 236 u8 data[MAXLEN_PSTR6]; 237 } __packed p80211pstr6_t; 238 239 /* pascal string for channel list */ 240 typedef struct p80211pstr14 { 241 u8 len; 242 u8 data[MAXLEN_PSTR14]; 243 } __packed p80211pstr14_t; 244 245 /* pascal string for ssid */ 246 typedef struct p80211pstr32 { 247 u8 len; 248 u8 data[MAXLEN_PSTR32]; 249 } __packed p80211pstr32_t; 250 251 /* MAC address array */ 252 typedef struct p80211macarray { 253 u32 cnt; 254 u8 data[1][MAXLEN_PSTR6]; 255 } __packed p80211macarray_t; 256 257 /* prototype template */ 258 typedef struct p80211item { 259 u32 did; 260 u16 status; 261 u16 len; 262 } __packed p80211item_t; 263 264 /* prototype template w/ data item */ 265 typedef struct p80211itemd { 266 u32 did; 267 u16 status; 268 u16 len; 269 u8 data[0]; 270 } __packed p80211itemd_t; 271 272 /* message data item for int, BOUNDEDINT, ENUMINT */ 273 typedef struct p80211item_uint32 { 274 u32 did; 275 u16 status; 276 u16 len; 277 u32 data; 278 } __packed p80211item_uint32_t; 279 280 /* message data item for OCTETSTR, DISPLAYSTR */ 281 typedef struct p80211item_pstr6 { 282 u32 did; 283 u16 status; 284 u16 len; 285 p80211pstr6_t data; 286 } __packed p80211item_pstr6_t; 287 288 /* message data item for OCTETSTR, DISPLAYSTR */ 289 typedef struct p80211item_pstr14 { 290 u32 did; 291 u16 status; 292 u16 len; 293 p80211pstr14_t data; 294 } __packed p80211item_pstr14_t; 295 296 /* message data item for OCTETSTR, DISPLAYSTR */ 297 typedef struct p80211item_pstr32 { 298 u32 did; 299 u16 status; 300 u16 len; 301 p80211pstr32_t data; 302 } __packed p80211item_pstr32_t; 303 304 /* message data item for OCTETSTR, DISPLAYSTR */ 305 typedef struct p80211item_pstr255 { 306 u32 did; 307 u16 status; 308 u16 len; 309 p80211pstr255_t data; 310 } __packed p80211item_pstr255_t; 311 312 /* message data item for UNK 392, namely mib items */ 313 typedef struct p80211item_unk392 { 314 u32 did; 315 u16 status; 316 u16 len; 317 u8 data[MAXLEN_MIBATTRIBUTE]; 318 } __packed p80211item_unk392_t; 319 320 /* message data item for UNK 1025, namely p2 pdas */ 321 typedef struct p80211item_unk1024 { 322 u32 did; 323 u16 status; 324 u16 len; 325 u8 data[1024]; 326 } __packed p80211item_unk1024_t; 327 328 /* message data item for UNK 4096, namely p2 download chunks */ 329 typedef struct p80211item_unk4096 { 330 u32 did; 331 u16 status; 332 u16 len; 333 u8 data[4096]; 334 } __packed p80211item_unk4096_t; 335 336 struct catlistitem; 337 338 /*----------------------------------------------------------------*/ 339 /* The following structure type is used to represent all of the */ 340 /* metadata items. Some components may choose to use more, */ 341 /* less or different metadata items. */ 342 343 typedef void (*p80211_totext_t) (struct catlistitem *, u32 did, u8 *itembuf, 344 char *textbuf); 345 typedef void (*p80211_fromtext_t) (struct catlistitem *, u32 did, u8 *itembuf, 346 char *textbuf); 347 typedef u32(*p80211_valid_t) (struct catlistitem *, u32 did, u8 *itembuf); 348 349 /*----------------------------------------------------------------*/ 350 /* Enumeration Lists */ 351 /* The following are the external declarations */ 352 /* for all enumerations */ 353 354 extern p80211enum_t MKENUMNAME(truth); 355 extern p80211enum_t MKENUMNAME(ifstate); 356 extern p80211enum_t MKENUMNAME(powermgmt); 357 extern p80211enum_t MKENUMNAME(bsstype); 358 extern p80211enum_t MKENUMNAME(authalg); 359 extern p80211enum_t MKENUMNAME(phytype); 360 extern p80211enum_t MKENUMNAME(temptype); 361 extern p80211enum_t MKENUMNAME(regdomain); 362 extern p80211enum_t MKENUMNAME(ccamode); 363 extern p80211enum_t MKENUMNAME(diversity); 364 extern p80211enum_t MKENUMNAME(scantype); 365 extern p80211enum_t MKENUMNAME(resultcode); 366 extern p80211enum_t MKENUMNAME(reason); 367 extern p80211enum_t MKENUMNAME(status); 368 extern p80211enum_t MKENUMNAME(msgcode); 369 extern p80211enum_t MKENUMNAME(msgitem_status); 370 371 extern p80211enum_t MKENUMNAME(lnxroam_reason); 372 373 extern p80211enum_t MKENUMNAME(p2preamble); 374 375 #endif /* _P80211TYPES_H */ 376