Merge from vendor branch NTPD:
[dragonfly.git] / sys / netproto / 802_11 / if_wavelan_ieee.h
1 /*
2  * Copyright (c) 1997, 1998, 1999
3  *      Bill Paul <wpaul@ctr.columbia.edu>.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *      This product includes software developed by Bill Paul.
16  * 4. Neither the name of the author nor the names of any co-contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
24  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30  * THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * $FreeBSD: src/sys/dev/wi/if_wavelan_ieee.h,v 1.18 2003/06/27 00:49:04 sam Exp $
33  * $DragonFly: src/sys/netproto/802_11/if_wavelan_ieee.h,v 1.1 2004/07/26 16:30:17 joerg Exp $
34  */
35
36 #ifndef _NETPROTO_802_11_IF_WAVELAN_IEEE_H 
37 #define _NETPROTO_802_11_IF_WAVELAN_IEEE_H 
38
39 /*
40  * This header defines a simple command interface to the FreeBSD
41  * WaveLAN/IEEE driver (wi) driver, which is used to set certain
42  * device-specific parameters which can't be easily managed through
43  * ifconfig(8). No, sysctl(2) is not the answer. I said a _simple_
44  * interface, didn't I.
45  */
46
47 #ifndef SIOCSWAVELAN
48 #define SIOCSWAVELAN    SIOCSIFGENERIC
49 #endif
50
51 #ifndef SIOCGWAVELAN
52 #define SIOCGWAVELAN    SIOCGIFGENERIC
53 #endif
54
55 /*
56  * Technically I don't think there's a limit to a record
57  * length. The largest record is the one that contains the CIS
58  * data, which is 240 words long, so 256 should be a safe
59  * value.
60  */
61 #define WI_MAX_DATALEN  512
62
63 struct wi_req {
64         uint16_t        wi_len;
65         uint16_t        wi_type;
66         uint16_t        wi_val[WI_MAX_DATALEN];
67 };
68
69 /*
70  * Private LTV records (interpreted only by the driver). This is
71  * a minor kludge to allow reading the interface statistics from
72  * the driver.
73  */
74 #define WI_RID_IFACE_STATS      0x0100
75 #define WI_RID_MGMT_XMIT        0x0200
76 #define WI_RID_ZERO_CACHE       0x0300
77 #define WI_RID_READ_CACHE       0x0400
78 #define WI_RID_FWDOWNLOAD       0x0500
79 #define WI_RID_MONITOR_MODE     0x0600
80 #define WI_RID_MIF              0x0700
81 #define WI_RID_SCAN_APS         0x0800
82 #define WI_RID_READ_APS         0x0900
83
84 struct wi_80211_hdr {
85         uint16_t                frame_ctl;
86         uint16_t                dur_id;
87         uint8_t                 addr1[6];
88         uint8_t                 addr2[6];
89         uint8_t                 addr3[6];
90         uint16_t                seq_ctl;
91         uint8_t                 addr4[6];
92 };
93
94 #define WI_FCTL_VERS            0x0002
95 #define WI_FCTL_FTYPE           0x000C
96 #define WI_FCTL_STYPE           0x00F0
97 #define WI_FCTL_TODS            0x0100
98 #define WI_FCTL_FROMDS          0x0200
99 #define WI_FCTL_MOREFRAGS       0x0400
100 #define WI_FCTL_RETRY           0x0800
101 #define WI_FCTL_PM              0x1000
102 #define WI_FCTL_MOREDATA        0x2000
103 #define WI_FCTL_WEP             0x4000
104 #define WI_FCTL_ORDER           0x8000
105
106 #define WI_FTYPE_MGMT           0x0000
107 #define WI_FTYPE_CTL            0x0004
108 #define WI_FTYPE_DATA           0x0008
109
110 #define WI_STYPE_MGMT_ASREQ     0x0000  /* association request */
111 #define WI_STYPE_MGMT_ASRESP    0x0010  /* association response */
112 #define WI_STYPE_MGMT_REASREQ   0x0020  /* reassociation request */
113 #define WI_STYPE_MGMT_REASRESP  0x0030  /* reassociation response */
114 #define WI_STYPE_MGMT_PROBEREQ  0x0040  /* probe request */
115 #define WI_STYPE_MGMT_PROBERESP 0x0050  /* probe response */
116 #define WI_STYPE_MGMT_BEACON    0x0080  /* beacon */
117 #define WI_STYPE_MGMT_ATIM      0x0090  /* announcement traffic ind msg */
118 #define WI_STYPE_MGMT_DISAS     0x00A0  /* disassociation */
119 #define WI_STYPE_MGMT_AUTH      0x00B0  /* authentication */
120 #define WI_STYPE_MGMT_DEAUTH    0x00C0  /* deauthentication */
121
122 #define WI_STYPE_CTL_PSPOLL     0x00A0
123 #define WI_STYPE_CTL_RTS        0x00B0
124 #define WI_STYPE_CTL_CTS        0x00C0
125 #define WI_STYPE_CTL_ACK        0x00D0
126 #define WI_STYPE_CTL_CFEND      0x00E0
127 #define WI_STYPE_CTL_CFENDACK   0x00F0
128
129 struct wi_mgmt_hdr {
130         uint16_t                frame_ctl;
131         uint16_t                duration;
132         uint8_t                 dst_addr[6];
133         uint8_t                 src_addr[6];
134         uint8_t                 bssid[6];
135         uint16_t                seq_ctl;
136 };
137
138 /* 
139  * Lucent/wavelan IEEE signal strength cache
140  *
141  * driver keeps cache of last
142  * MAXWICACHE packets to arrive including signal strength info.
143  * daemons may read this via ioctl
144  *
145  * Each entry in the wi_sigcache has a unique macsrc.
146  */
147 struct wi_sigcache {
148         char    macsrc[6];      /* unique MAC address for entry */
149         int     ipsrc;          /* ip address associated with packet */
150         int     signal;         /* signal strength of the packet */
151         int     noise;          /* noise value */
152         int     quality;        /* quality of the packet */
153 };
154
155 /*
156  * Firmware downloading API.  We support downloading into RAM and into
157  * flash.  We copy the entire .hex file for both the primary and secondary
158  * firmware into the kernel, which is minorly gross, but matches the
159  * format of the compiled in firmware.
160  */
161 struct wi_fwdownload {
162         int     type;           /* What type of download. */
163 #define WI_FW_RAM       1
164 #define WI_FW_FLASH     2
165         size_t  pri_len;        /* Primary firmware length */
166         size_t  sec_len;        /* Secondary firmware length */
167         caddr_t pri_data;       /* Pointer (user) to primary data */
168         caddr_t sec_data;       /* Pointer (user) to secondary data */
169 };
170
171 struct wi_counters {
172         uint32_t                wi_tx_unicast_frames;
173         uint32_t                wi_tx_multicast_frames;
174         uint32_t                wi_tx_fragments;
175         uint32_t                wi_tx_unicast_octets;
176         uint32_t                wi_tx_multicast_octets;
177         uint32_t                wi_tx_deferred_xmits;
178         uint32_t                wi_tx_single_retries;
179         uint32_t                wi_tx_multi_retries;
180         uint32_t                wi_tx_retry_limit;
181         uint32_t                wi_tx_discards;
182         uint32_t                wi_rx_unicast_frames;
183         uint32_t                wi_rx_multicast_frames;
184         uint32_t                wi_rx_fragments;
185         uint32_t                wi_rx_unicast_octets;
186         uint32_t                wi_rx_multicast_octets;
187         uint32_t                wi_rx_fcs_errors;
188         uint32_t                wi_rx_discards_nobuf;
189         uint32_t                wi_tx_discards_wrong_sa;
190         uint32_t                wi_rx_WEP_cant_decrypt;
191         uint32_t                wi_rx_msg_in_msg_frags;
192         uint32_t                wi_rx_msg_in_bad_msg_frags;
193 };
194
195 /*
196  * Network parameters, static configuration entities.
197  */
198 #define WI_RID_PORTTYPE         0xFC00 /* Connection control characteristics */
199 #define WI_RID_MAC_NODE         0xFC01 /* MAC address of this station */
200 #define WI_RID_DESIRED_SSID     0xFC02 /* Service Set ID for connection */
201 #define WI_RID_OWN_CHNL         0xFC03 /* Comm channel for BSS creation */
202 #define WI_RID_OWN_SSID         0xFC04 /* IBSS creation ID */
203 #define WI_RID_OWN_ATIM_WIN     0xFC05 /* ATIM window time for IBSS creation */
204 #define WI_RID_SYSTEM_SCALE     0xFC06 /* scale that specifies AP density */
205 #define WI_RID_MAX_DATALEN      0xFC07 /* Max len of MAC frame body data */
206 #define WI_RID_MAC_WDS          0xFC08 /* MAC addr of corresponding WDS node */
207 #define WI_RID_PM_ENABLED       0xFC09 /* ESS power management enable */
208 #define WI_RID_PM_EPS           0xFC0A /* PM EPS/PS mode */
209 #define WI_RID_MCAST_RX         0xFC0B /* ESS PM mcast reception */
210 #define WI_RID_MAX_SLEEP        0xFC0C /* max sleep time for ESS PM */
211 #define WI_RID_HOLDOVER         0xFC0D /* holdover time for ESS PM */
212 #define WI_RID_NODENAME         0xFC0E /* ID name of this node for diag */
213 #define WI_RID_DTIM_PERIOD      0xFC10 /* beacon interval between DTIMs */
214 #define WI_RID_WDS_ADDR1        0xFC11 /* port 1 MAC of WDS link node */
215 #define WI_RID_WDS_ADDR2        0xFC12 /* port 1 MAC of WDS link node */
216 #define WI_RID_WDS_ADDR3        0xFC13 /* port 1 MAC of WDS link node */
217 #define WI_RID_WDS_ADDR4        0xFC14 /* port 1 MAC of WDS link node */
218 #define WI_RID_WDS_ADDR5        0xFC15 /* port 1 MAC of WDS link node */
219 #define WI_RID_WDS_ADDR6        0xFC16 /* port 1 MAC of WDS link node */
220 #define WI_RID_MCAST_PM_BUF     0xFC17 /* PM buffering of mcast */
221 #define WI_RID_ENCRYPTION       0xFC20 /* enable/disable WEP */
222 #define WI_RID_AUTHTYPE         0xFC21 /* specify authentication type */
223 #define WI_RID_P2_TX_CRYPT_KEY  0xFC23
224 #define WI_RID_P2_CRYPT_KEY0    0xFC24
225 #define WI_RID_P2_CRYPT_KEY1    0xFC25
226 #define WI_RID_MICROWAVE_OVEN   0xFC25
227 #define WI_RID_P2_CRYPT_KEY2    0xFC26
228 #define WI_RID_P2_CRYPT_KEY3    0xFC27
229 #define WI_RID_P2_ENCRYPTION    0xFC28
230 #define         PRIVACY_INVOKED         0x01
231 #define         EXCLUDE_UNENCRYPTED     0x02
232 #define         HOST_ENCRYPT            0x10
233 #define         IV_EVERY_FRAME          0x00    /* IV = Initialization Vector */
234 #define         IV_EVERY10_FRAME        0x20    /* every 10 frame IV reuse */
235 #define         IV_EVERY50_FRAME        0x40    /* every 50 frame IV reuse */
236 #define         IV_EVERY100_FRAME       0x60    /* every 100 frame IV reuse */
237 #define         HOST_DECRYPT            0x80
238 #define WI_RID_WEP_MAPTABLE     0xFC29
239 #define WI_RID_CNFAUTHMODE      0xFC2A
240 #define WI_RID_ROAMING_MODE     0xFC2D
241 #define WI_RID_OWN_BEACON_INT   0xFC33 /* beacon xmit time for BSS creation */
242 #define WI_RID_CNF_DBM_ADJUST   0xFC46
243 #define WI_RID_DBM_ADJUST       0xFC46 /* RSSI - WI_RID_DBM_ADJUST ~ dBm */
244 #define WI_RID_BASIC_RATE       0xFCB3
245 #define WI_RID_SUPPORT_RATE     0xFCB4
246
247 /*
248  * Network parameters, dynamic configuration entities
249  */
250 #define WI_RID_MCAST_LIST       0xFC80 /* list of multicast addrs */
251 #define WI_RID_CREATE_IBSS      0xFC81 /* create IBSS */
252 #define WI_RID_FRAG_THRESH      0xFC82 /* frag len, unicast msg xmit */
253 #define WI_RID_RTS_THRESH       0xFC83 /* frame len for RTS/CTS handshake */
254 #define WI_RID_TX_RATE          0xFC84 /* data rate for message xmit
255                                         * 0 == Fixed 1mbps
256                                         * 1 == Fixed 2mbps
257                                         * 2 == auto fallback
258                                         */
259 #define WI_RID_PROMISC          0xFC85 /* enable promisc mode */
260 #define WI_RID_FRAG_THRESH0     0xFC90
261 #define WI_RID_FRAG_THRESH1     0xFC91
262 #define WI_RID_FRAG_THRESH2     0xFC92
263 #define WI_RID_FRAG_THRESH3     0xFC93
264 #define WI_RID_FRAG_THRESH4     0xFC94
265 #define WI_RID_FRAG_THRESH5     0xFC95
266 #define WI_RID_FRAG_THRESH6     0xFC96
267 #define WI_RID_RTS_THRESH0      0xFC97
268 #define WI_RID_RTS_THRESH1      0xFC98
269 #define WI_RID_RTS_THRESH2      0xFC99
270 #define WI_RID_RTS_THRESH3      0xFC9A
271 #define WI_RID_RTS_THRESH4      0xFC9B
272 #define WI_RID_RTS_THRESH5      0xFC9C
273 #define WI_RID_RTS_THRESH6      0xFC9D
274 #define WI_RID_TX_RATE0         0xFC9E
275 #define WI_RID_TX_RATE1         0xFC9F
276 #define WI_RID_TX_RATE2         0xFCA0
277 #define WI_RID_TX_RATE3         0xFCA1
278 #define WI_RID_TX_RATE4         0xFCA2
279 #define WI_RID_TX_RATE5         0xFCA3
280 #define WI_RID_TX_RATE6         0xFCA4
281 #define WI_RID_DEFLT_CRYPT_KEYS 0xFCB0
282 #define WI_RID_TX_CRYPT_KEY     0xFCB1
283 #define WI_RID_TICK_TIME        0xFCE0
284
285 struct wi_key {
286         uint16_t                wi_keylen;
287         uint8_t                 wi_keydat[14];
288 };
289
290 #define WI_NLTV_KEYS 4
291 struct wi_ltv_keys {
292         uint16_t                wi_len;
293         uint16_t                wi_type;
294         struct wi_key           wi_keys[WI_NLTV_KEYS];
295 };
296
297 /*
298  * NIC information
299  */
300 #define WI_RID_DNLD_BUF         0xFD01
301 #define WI_RID_MEMSZ            0xFD02 /* memory size info (XXX Lucent) */
302                                         /* Looks like on lucnet pri firm too */
303 #define WI_RID_PRI_IDENTITY     0xFD02 /* primary funcs firmware ident (PRISM2) */
304 #define WI_RID_PRI_SUP_RANGE    0xFD03 /* primary supplier compatibility */
305 #define WI_RID_CIF_ACT_RANGE    0xFD04 /* controller sup. compatibility */
306 #define WI_RID_SERIALNO         0xFD0A /* card serial number */
307 #define WI_RID_CARD_ID          0xFD0B /* card identification */
308 #define WI_RID_MFI_SUP_RANGE    0xFD0C /* modem supplier compatibility */
309 #define WI_RID_CFI_SUP_RANGE    0xFD0D /* controller sup. compatibility */
310 #define WI_RID_CHANNEL_LIST     0xFD10 /* allowd comm. frequencies. */
311 #define WI_RID_REG_DOMAINS      0xFD11 /* list of intendted regulatory doms */
312 #define WI_RID_TEMP_TYPE        0xFD12 /* hw temp range code */
313 #define WI_RID_CIS              0xFD13 /* PC card info struct */
314 #define WI_RID_STA_IDENTITY     0xFD20 /* station funcs firmware ident */
315 #define WI_RID_STA_SUP_RANGE    0xFD21 /* station supplier compat */
316 #define WI_RID_MFI_ACT_RANGE    0xFD22
317 #define WI_RID_SYMBOL_IDENTITY  0xFD24
318 #define WI_RID_CFI_ACT_RANGE    0xFD33
319 #define WI_RID_COMMQUAL         0xFD43
320 #define WI_RID_SCALETHRESH      0xFD46
321 #define WI_RID_PCF              0xFD87
322
323 /*
324  * MAC information
325  */
326 #define WI_RID_PORT_STAT        0xFD40 /* actual MAC port con control stat */
327 #define WI_RID_CURRENT_SSID     0xFD41 /* ID of actually connected SS */
328 #define WI_RID_CURRENT_BSSID    0xFD42 /* ID of actually connected BSS */
329 #define WI_RID_COMMS_QUALITY    0xFD43 /* quality of BSS connection */
330 #define WI_RID_CUR_TX_RATE      0xFD44 /* current TX rate */
331 #define WI_RID_CUR_BEACON_INT   0xFD45 /* current beacon interval */
332 #define WI_RID_CUR_SCALE_THRESH 0xFD46 /* actual system scane thresh setting */
333 #define WI_RID_PROT_RESP_TIME   0xFD47 /* time to wait for resp to req msg */
334 #define WI_RID_SHORT_RTR_LIM    0xFD48 /* max tx attempts for short frames */
335 #define WI_RID_LONG_RTS_LIM     0xFD49 /* max tx attempts for long frames */
336 #define WI_RID_MAX_TX_LIFE      0xFD4A /* max tx frame handling duration */
337 #define WI_RID_MAX_RX_LIFE      0xFD4B /* max rx frame handling duration */
338 #define WI_RID_CF_POLL          0xFD4C /* contention free pollable ind */
339 #define WI_RID_AUTH_ALGS        0xFD4D /* auth algorithms available */
340 #define WI_RID_AUTH_TYPE        0xFD4E /* availanle auth types */
341 #define WI_RID_WEP_AVAIL        0xFD4F /* WEP privacy option available */
342 #define WI_RID_DBM_COMMS_QUAL   0xFD51 /* CommQuality normalized to dBm */
343 #define WI_RID_CUR_TX_RATE1     0xFD80
344 #define WI_RID_CUR_TX_RATE2     0xFD81
345 #define WI_RID_CUR_TX_RATE3     0xFD82
346 #define WI_RID_CUR_TX_RATE4     0xFD83
347 #define WI_RID_CUR_TX_RATE5     0xFD84
348 #define WI_RID_CUR_TX_RATE6     0xFD85
349 #define WI_RID_OWN_MAC          0xFD86 /* unique local MAC addr */
350 #define WI_RID_PCI_INFO         0xFD87 /* point coordination func cap */
351
352 /*
353  * Scan Information
354  */
355 #define WI_RID_BCAST_SCAN_REQ   0xFCAB /* Broadcast Scan request (Symbol) */
356 #define         BSCAN_5SEC              0x01
357 #define         BSCAN_ONETIME           0x02
358 #define         BSCAN_PASSIVE           0x40
359 #define         BSCAN_BCAST             0x80
360 #define WI_RID_SCAN_REQ         0xFCE1 /* Scan request (STA only) */
361 #define WI_RID_JOIN_REQ         0xFCE2 /* Join request (STA only) */
362 #define WI_RID_AUTH_STATION     0xFCE3 /* Authenticates Station (AP) */
363 #define WI_RID_CHANNEL_REQ      0xFCE4 /* Channel Information Request (AP) */
364 #define WI_RID_SCAN_RESULTS     0xFD88 /* Scan Results Table */
365
366 struct wi_apinfo {
367         int                     scanreason;     /* ScanReason */
368         char                    bssid[6];       /* BSSID (mac address) */
369         int                     channel;        /* Channel */
370         int                     signal;         /* Signal level */
371         int                     noise;          /* Average Noise Level*/
372         int                     quality;        /* Quality */
373         int                     namelen;        /* Length of SSID string */
374         char                    name[32];       /* SSID string */
375         int                     capinfo;        /* Capability info. */ 
376         int                     interval;       /* BSS Beacon Interval */
377         int                     rate;           /* Data Rate */
378 };
379
380 /*
381  * Modem information
382  */
383 #define WI_RID_PHY_TYPE         0xFDC0 /* phys layer type indication */
384 #define WI_RID_CURRENT_CHAN     0xFDC1 /* current frequency */
385 #define WI_RID_PWR_STATE        0xFDC2 /* pwr consumption status */
386 #define WI_RID_CCA_MODE         0xFDC3 /* clear chan assess mode indication */
387 #define WI_RID_CCA_TIME         0xFDC4 /* clear chan assess time */
388 #define WI_RID_MAC_PROC_DELAY   0xFDC5 /* MAC processing delay time */
389 #define WI_RID_DATA_RATES       0xFDC6 /* supported data rates */
390
391 /*
392  * bsd-airtools v0.2 - source-mods v0.2 [common.h]
393  * by h1kari - (c) Dachb0den Labs 2001
394  */
395
396 /*
397  * Copyright (c) 2001 Dachb0den Labs.
398  *      David Hulton <h1kari@dachb0den.com>.  All rights reserved.
399  *
400  * Redistribution and use in source and binary forms, with or without
401  * modification, are permitted provided that the following conditions
402  * are met:
403  * 1. Redistributions of source code must retain the above copyright
404  *    notice, this list of conditions and the following disclaimer.
405  * 2. Redistributions in binary form must reproduce the above copyright
406  *    notice, this list of conditions and the following disclaimer in the
407  *    documentation and/or other materials provided with the distribution.
408  * 3. All advertising materials mentioning features or use of this software
409  *    must display the following acknowledgement:
410  *      This product includes software developed by David Hulton.
411  * 4. Neither the name of the author nor the names of any co-contributors
412  *    may be used to endorse or promote products derived from this software
413  *    without specific prior written permission.
414  *
415  * THIS SOFTWARE IS PROVIDED BY David Hulton AND CONTRIBUTORS ``AS IS'' AND
416  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
417  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
418  * ARE DISCLAIMED.  IN NO EVENT SHALL David Hulton OR THE VOICES IN HIS HEAD
419  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
420  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
421  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
422  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
423  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
424  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
425  * THE POSSIBILITY OF SUCH DAMAGE.
426  */
427
428 /*
429  * standard hermes recieve frame used by wavelan/prism2 cards
430  */
431 struct wi_rx_frame {
432         /*
433          * hermes prefix header. supplies information on the current status of
434          * the network and various other statistics gathered from the
435          * management/control frames as used internally.
436          */
437         uint16_t        wi_status;
438         uint16_t        wi_ts0;
439         uint16_t        wi_ts1;
440         uint8_t         wi_silence;
441         uint8_t         wi_signal;
442         uint8_t         wi_rate;
443         uint8_t         wi_rx_flow;
444         uint16_t        wi_rsvd0;
445         uint16_t        wi_rsvd1;
446         /*
447          * standard 80211 frame header. all packets have to use this header as
448          * per the AN9900 from intersil, even management/control. for
449          * management packets, they just threw the header into the data field,
450          * but for control packets the headers are lost in translation and
451          * therefore not all control packet info can be displayed.
452          */
453         uint16_t        wi_frame_ctl;
454         uint16_t        wi_id;
455         uint8_t         wi_addr1[6];
456         uint8_t         wi_addr2[6];
457         uint8_t         wi_addr3[6];
458         uint16_t        wi_seq_ctl;
459         uint8_t         wi_addr4[6];
460         uint16_t        wi_dat_len;
461         /*
462          * another wierdity with the drivers. they append a 802.3 header which
463          * is somewhat redundant, since all the same data is provided in the
464          * 802.11 header.
465          */
466         uint8_t         wi_dst_addr[6];
467         uint8_t         wi_src_addr[6];
468         uint16_t        wi_len;
469 };
470 #define WI_DATA_HDRLEN          0x44
471 #define WI_MGMT_HDRLEN          0x3C
472 #define WI_CTL_HDRLEN           0x3C
473
474
475 /*
476  * all data packets have a snap (sub-network access protocol) header that
477  * isn't entirely definied, but added for ethernet compatibility.
478  */
479 struct wi_snap_frame {
480         uint16_t        wi_dat[3];
481         uint16_t        wi_type;
482 };
483
484
485 /*
486  * management frame headers
487  * note: all management frames consist of a static header and variable length
488  * fields.
489  */
490
491 /*
492  * variable length field structure
493  */
494 struct wi_mgmt_var_hdr {
495         uint8_t         wi_code;
496         uint8_t         wi_len;
497         uint8_t         wi_data[256];
498 };
499
500 /*
501  * management beacon frame prefix
502  */
503 struct wi_mgmt_beacon_hdr {
504         uint32_t        wi_ts0;
505         uint32_t        wi_ts1;
506         uint16_t        wi_interval;
507         uint16_t        wi_capinfo;
508 };
509
510 /*
511  * ibss announcement traffic indication message (atim) frame
512  * note: no parameters
513  */
514
515 /*
516  * management disassociation frame
517  */
518 struct wi_mgmt_disas_hdr {
519         uint16_t        wi_reason;
520 };
521
522 /*
523  * management association request frame prefix
524  */
525 struct wi_mgmt_asreq_hdr {
526         uint16_t        wi_capinfo;
527         uint16_t        wi_interval;
528 };
529
530 /*
531  * management association response frame prefix
532  */
533 struct wi_mgmt_asresp_hdr {
534         uint16_t        wi_capinfo;
535         uint16_t        wi_status;
536         uint16_t        wi_aid;
537 };
538
539 /*
540  * management reassociation request frame prefix
541  */
542 struct wi_mgmt_reasreq_hdr {
543         uint16_t        wi_capinfo;
544         uint16_t        wi_interval;
545         uint8_t         wi_currap[6];
546 };
547
548 /*
549  * management reassociation response frame prefix
550  */
551 struct wi_mgmt_reasresp_hdr {
552         uint16_t        wi_capinfo;
553         uint16_t        wi_status;
554         uint16_t        wi_aid;
555 };
556
557 /*
558  * management probe request frame prefix
559  * note: no static parameters, only variable length
560  */
561
562 /*
563  * management probe response frame prefix
564  */
565 struct wi_mgmt_proberesp_hdr {
566         uint32_t        wi_ts0;
567         uint32_t        wi_ts1;
568         uint16_t        wi_interval;
569         uint16_t        wi_capinfo;
570 };
571
572 /*
573  * management authentication frame prefix
574  */
575 struct wi_mgmt_auth_hdr {
576         uint16_t        wi_algo;
577         uint16_t        wi_seq;
578         uint16_t        wi_status;
579 };
580
581 /*
582  * management deauthentication frame
583  */
584 struct wi_mgmt_deauth_hdr {
585         uint16_t        wi_reason;
586 };
587
588
589 /*
590  * rid configuration register definitions
591  */
592 #define WI_RID_SCAN_REQ         0xFCE1 /* scan request information */
593 #define WI_RID_SCAN_RES         0xFD88 /* scan result information */
594
595 #define WI_RID_PROCFRAME        0x3137 /* Return full frame information */
596 #define WI_RID_PRISM2           0x3138 /* tell if we're a prism2 card or not */
597
598
599 /*
600  * 802.11 definitions
601  */
602 #define WI_STAT_BADCRC          0x0001
603 #define WI_STAT_UNDECRYPTABLE   0x0002
604 #define WI_STAT_ERRSTAT         0x0003
605 #define WI_STAT_MAC_PORT        0x0700
606 #define WI_STAT_1042            0x2000
607 #define WI_STAT_TUNNEL          0x4000
608 #define WI_STAT_WMP_MSG         0x6000
609 #define WI_RXSTAT_MSG_TYPE      0xE000
610
611 #define WI_FCTL_OPT_MASK        0xFF00
612 #define WI_AID_SET              0xC000
613 #define WI_AID_MASK             0x3FFF
614 #define WI_SCTL_FRAGNUM_MASK    0x000F
615 #define WI_SCTL_SEQNUM_MASK     0xFFF0
616
617 #define WI_STAT_UNSPEC_FAIL     1
618 #define WI_STAT_CAPINFO_FAIL    10
619 #define WI_STAT_REAS_DENY       11
620 #define WI_STAT_ASSOC_DENY      12
621 #define WI_STAT_ALGO_FAIL       13
622 #define WI_STAT_SEQ_FAIL        14
623 #define WI_STAT_CHAL_FAIL       15
624 #define WI_STAT_TOUT_FAIL       16
625 #define WI_STAT_OVERL_DENY      17
626 #define WI_STAT_RATE_DENY       18
627
628 #define WI_FTYPE_MGMT           0x0000
629 #define WI_FTYPE_CTL            0x0004
630 #define WI_FTYPE_DATA           0x0008
631
632 #define WI_FCTL_VERS            0x0002
633 #define WI_FCTL_FTYPE           0x000C
634 #define WI_FCTL_STYPE           0x00F0
635 #define WI_FCTL_TODS            0x0100
636 #define WI_FCTL_FROMDS          0x0200
637 #define WI_FCTL_MOREFRAGS       0x0400
638 #define WI_FCTL_RETRY           0x0800
639 #define WI_FCTL_PM              0x1000
640 #define WI_FCTL_MOREDATA        0x2000
641 #define WI_FCTL_WEP             0x4000
642 #define WI_FCTL_ORDER           0x8000
643
644 #define WI_FCS_LEN              0x4 /* checksum length */
645
646
647 /*
648  * management definitions
649  */
650 #define WI_STYPE_MGMT_ASREQ     0x0000
651 #define WI_STYPE_MGMT_ASRESP    0x0010
652 #define WI_STYPE_MGMT_REASREQ   0x0020
653 #define WI_STYPE_MGMT_REASRESP  0x0030
654 #define WI_STYPE_MGMT_PROBEREQ  0x0040
655 #define WI_STYPE_MGMT_PROBERESP 0x0050
656 #define WI_STYPE_MGMT_BEACON    0x0080
657 #define WI_STYPE_MGMT_ATIM      0x0090
658 #define WI_STYPE_MGMT_DISAS     0x00A0
659 #define WI_STYPE_MGMT_AUTH      0x00B0
660 #define WI_STYPE_MGMT_DEAUTH    0x00C0
661
662 #define WI_CAPINFO_ESS          0x01
663 #define WI_CAPINFO_IBSS         0x02
664 #define WI_CAPINFO_CFPOLL       0x04
665 #define WI_CAPINFO_CFPOLLREQ    0x08
666 #define WI_CAPINFO_PRIV         0x10
667
668 #define WI_REASON_UNSPEC        1
669 #define WI_REASON_AUTH_INVALID  2
670 #define WI_REASON_DEAUTH_LEAVE  3
671 #define WI_REASON_DISAS_INACT   4
672 #define WI_REASON_DISAS_OVERL   5
673 #define WI_REASON_CLASS2        6
674 #define WI_REASON_CLASS3        7
675 #define WI_REASON_DISAS_LEAVE   8
676 #define WI_REASON_NOAUTH        9
677
678 #define WI_VAR_SSID             0
679 #define WI_VAR_SRATES           1
680 #define WI_VAR_FH               2
681 #define WI_VAR_DS               3
682 #define WI_VAR_CF               4
683 #define WI_VAR_TIM              5
684 #define WI_VAR_IBSS             6
685 #define WI_VAR_CHAL             16
686
687 #define WI_VAR_SRATES_MASK      0x7F
688
689
690 /*
691  * control definitions
692  */
693 #define WI_STYPE_CTL_PSPOLL     0x00A0
694 #define WI_STYPE_CTL_RTS        0x00B0
695 #define WI_STYPE_CTL_CTS        0x00C0
696 #define WI_STYPE_CTL_ACK        0x00D0
697 #define WI_STYPE_CTL_CFEND      0x00E0
698 #define WI_STYPE_CTL_CFENDCFACK 0x00F0
699
700
701 /*
702  * ap scanning structures
703  */
704 struct wi_scan_res {
705         uint16_t        wi_chan;
706         uint16_t        wi_noise;
707         uint16_t        wi_signal;
708         uint8_t         wi_bssid[6];
709         uint16_t        wi_interval;
710         uint16_t        wi_capinfo;
711         uint16_t        wi_ssid_len;
712         uint8_t         wi_ssid[32];
713         uint8_t         wi_srates[10];
714         uint8_t         wi_rate;
715         uint8_t         wi_rsvd;
716 };
717 #define WI_WAVELAN_RES_SIZE     50
718
719 struct wi_scan_p2_hdr {
720         uint16_t        wi_rsvd;
721         uint16_t        wi_reason;
722 };
723 #define WI_PRISM2_RES_SIZE      62
724
725
726 /*
727  * prism2 debug mode definitions
728  */
729 #define SIOCSPRISM2DEBUG        _IOW('i', 137, struct ifreq)
730 #define SIOCGPRISM2DEBUG        _IOWR('i', 138, struct ifreq)
731
732 #define WI_DEBUG_RESET          0x00
733 #define WI_DEBUG_INIT           0x01
734 #define WI_DEBUG_SLEEP          0x02
735 #define WI_DEBUG_WAKE           0x03
736 #define WI_DEBUG_CHAN           0x08
737 #define WI_DEBUG_DELAYSUPP      0x09
738 #define WI_DEBUG_TXSUPP         0x0A
739 #define WI_DEBUG_MONITOR        0x0B
740 #define WI_DEBUG_LEDTEST        0x0C
741 #define WI_DEBUG_CONTTX         0x0E
742 #define WI_DEBUG_STOPTEST       0x0F
743 #define WI_DEBUG_CONTRX         0x10
744 #define WI_DEBUG_SIGSTATE       0x11
745 #define WI_DEBUG_CALENABLE      0x13
746 #define WI_DEBUG_CONFBITS       0x15
747
748 #endif /* _NETPROTO_802_11_IF_WAVELAN_IEEE_H */