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 203typedef struct p80211enumpair { 204 u32 val; 205 char *name; 206} p80211enumpair_t; 207 208typedef 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 */ 218typedef struct p80211pstr { 219 u8 len; 220} __attribute__ ((packed)) p80211pstr_t; 221 222typedef struct p80211pstrd { 223 u8 len; 224 u8 data[0]; 225} __attribute__ ((packed)) p80211pstrd_t; 226 227/* Maximum pascal string */ 228typedef struct p80211pstr255 { 229 u8 len; 230 u8 data[MAXLEN_PSTR255]; 231} __attribute__ ((packed)) p80211pstr255_t; 232 233/* pascal string for macaddress and bssid */ 234typedef struct p80211pstr6 { 235 u8 len; 236 u8 data[MAXLEN_PSTR6]; 237} __attribute__ ((packed)) p80211pstr6_t; 238 239/* pascal string for channel list */ 240typedef struct p80211pstr14 { 241 u8 len; 242 u8 data[MAXLEN_PSTR14]; 243} __attribute__ ((packed)) p80211pstr14_t; 244 245/* pascal string for ssid */ 246typedef struct p80211pstr32 { 247 u8 len; 248 u8 data[MAXLEN_PSTR32]; 249} __attribute__ ((packed)) p80211pstr32_t; 250 251/* MAC address array */ 252typedef struct p80211macarray { 253 u32 cnt; 254 u8 data[1][MAXLEN_PSTR6]; 255} __attribute__ ((packed)) p80211macarray_t; 256 257/* prototype template */ 258typedef struct p80211item { 259 u32 did; 260 u16 status; 261 u16 len; 262} __attribute__ ((packed)) p80211item_t; 263 264/* prototype template w/ data item */ 265typedef struct p80211itemd { 266 u32 did; 267 u16 status; 268 u16 len; 269 u8 data[0]; 270} __attribute__ ((packed)) p80211itemd_t; 271 272/* message data item for int, BOUNDEDINT, ENUMINT */ 273typedef struct p80211item_uint32 { 274 u32 did; 275 u16 status; 276 u16 len; 277 u32 data; 278} __attribute__ ((packed)) p80211item_uint32_t; 279 280/* message data item for OCTETSTR, DISPLAYSTR */ 281typedef struct p80211item_pstr6 { 282 u32 did; 283 u16 status; 284 u16 len; 285 p80211pstr6_t data; 286} __attribute__ ((packed)) p80211item_pstr6_t; 287 288/* message data item for OCTETSTR, DISPLAYSTR */ 289typedef struct p80211item_pstr14 { 290 u32 did; 291 u16 status; 292 u16 len; 293 p80211pstr14_t data; 294} __attribute__ ((packed)) p80211item_pstr14_t; 295 296/* message data item for OCTETSTR, DISPLAYSTR */ 297typedef struct p80211item_pstr32 { 298 u32 did; 299 u16 status; 300 u16 len; 301 p80211pstr32_t data; 302} __attribute__ ((packed)) p80211item_pstr32_t; 303 304/* message data item for OCTETSTR, DISPLAYSTR */ 305typedef struct p80211item_pstr255 { 306 u32 did; 307 u16 status; 308 u16 len; 309 p80211pstr255_t data; 310} __attribute__ ((packed)) p80211item_pstr255_t; 311 312/* message data item for UNK 392, namely mib items */ 313typedef struct p80211item_unk392 { 314 u32 did; 315 u16 status; 316 u16 len; 317 u8 data[MAXLEN_MIBATTRIBUTE]; 318} __attribute__ ((packed)) p80211item_unk392_t; 319 320/* message data item for UNK 1025, namely p2 pdas */ 321typedef struct p80211item_unk1024 { 322 u32 did; 323 u16 status; 324 u16 len; 325 u8 data[1024]; 326} __attribute__ ((packed)) p80211item_unk1024_t; 327 328/* message data item for UNK 4096, namely p2 download chunks */ 329typedef struct p80211item_unk4096 { 330 u32 did; 331 u16 status; 332 u16 len; 333 u8 data[4096]; 334} __attribute__ ((packed)) p80211item_unk4096_t; 335 336struct 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 343typedef void (*p80211_totext_t) (struct catlistitem *, u32 did, u8 *itembuf, 344 char *textbuf); 345typedef void (*p80211_fromtext_t) (struct catlistitem *, u32 did, u8 *itembuf, 346 char *textbuf); 347typedef 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 354extern p80211enum_t MKENUMNAME(truth); 355extern p80211enum_t MKENUMNAME(ifstate); 356extern p80211enum_t MKENUMNAME(powermgmt); 357extern p80211enum_t MKENUMNAME(bsstype); 358extern p80211enum_t MKENUMNAME(authalg); 359extern p80211enum_t MKENUMNAME(phytype); 360extern p80211enum_t MKENUMNAME(temptype); 361extern p80211enum_t MKENUMNAME(regdomain); 362extern p80211enum_t MKENUMNAME(ccamode); 363extern p80211enum_t MKENUMNAME(diversity); 364extern p80211enum_t MKENUMNAME(scantype); 365extern p80211enum_t MKENUMNAME(resultcode); 366extern p80211enum_t MKENUMNAME(reason); 367extern p80211enum_t MKENUMNAME(status); 368extern p80211enum_t MKENUMNAME(msgcode); 369extern p80211enum_t MKENUMNAME(msgitem_status); 370 371extern p80211enum_t MKENUMNAME(lnxroam_reason); 372 373extern p80211enum_t MKENUMNAME(p2preamble); 374 375#endif /* _P80211TYPES_H */ 376