Annotation of sys/dev/ic/if_wi_ieee.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: if_wi_ieee.h,v 1.29 2006/06/27 20:55:51 reyk Exp $ */
2:
3: /*
4: * Copyright (c) 1997, 1998, 1999
5: * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: * 3. All advertising materials mentioning features or use of this software
16: * must display the following acknowledgement:
17: * This product includes software developed by Bill Paul.
18: * 4. Neither the name of the author nor the names of any co-contributors
19: * may be used to endorse or promote products derived from this software
20: * without specific prior written permission.
21: *
22: * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
23: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25: * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
26: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32: * THE POSSIBILITY OF SUCH DAMAGE.
33: *
34: * From: if_wavelan_ieee.h,v 1.5.2.1 2001/07/04 00:12:34 brooks Exp $
35: */
36:
37: #ifndef _IF_WI_IEEE_H
38: #define _IF_WI_IEEE_H
39:
40: /*
41: * This header defines a simple command interface to the FreeBSD
42: * WaveLAN/IEEE driver (wi) driver, which is used to set certain
43: * device-specific parameters which can't be easily managed through
44: * ifconfig(8). No, sysctl(2) is not the answer. I said a _simple_
45: * interface, didn't I.
46: */
47:
48: #define SIOCSWAVELAN _IOW('i', 249, struct ifreq) /* wavelan set op */
49: #define SIOCGWAVELAN _IOWR('i', 250, struct ifreq) /* wavelan get op */
50:
51: /*
52: * Technically I don't think there's a limit to a record
53: * length. The largest record is the one that contains the CIS
54: * data, which is 240 words long, so 256 should be a safe
55: * value.
56: */
57: #define WI_MAX_DATALEN 512
58:
59: struct wi_req {
60: u_int16_t wi_len;
61: u_int16_t wi_type;
62: u_int16_t wi_val[WI_MAX_DATALEN];
63: };
64:
65: /*
66: * Private LTV records (interpreted only by the driver). This is
67: * a minor kludge to allow reading the interface statistics from
68: * the driver.
69: */
70: #define WI_RID_IFACE_STATS 0x0100
71: #define WI_RID_MGMT_XMIT 0x0200
72: #define WI_RID_MONITOR_MODE 0x0500
73: #define WI_RID_SCAN_APS 0x0600
74: #define WI_RID_READ_APS 0x0700
75:
76: struct wi_80211_hdr {
77: u_int16_t frame_ctl;
78: u_int16_t dur_id;
79: u_int8_t addr1[6];
80: u_int8_t addr2[6];
81: u_int8_t addr3[6];
82: u_int16_t seq_ctl;
83: u_int8_t addr4[6];
84: };
85:
86: #define WI_FCTL_VERS 0x0002
87: #define WI_FCTL_FTYPE 0x000C
88: #define WI_FCTL_STYPE 0x00F0
89: #define WI_FCTL_TODS 0x0100
90: #define WI_FCTL_FROMDS 0x0200
91: #define WI_FCTL_MOREFRAGS 0x0400
92: #define WI_FCTL_RETRY 0x0800
93: #define WI_FCTL_PM 0x1000
94: #define WI_FCTL_MOREDATA 0x2000
95: #define WI_FCTL_WEP 0x4000
96: #define WI_FCTL_ORDER 0x8000
97:
98: #define WI_FTYPE_MGMT 0x0000
99: #define WI_FTYPE_CTL 0x0004
100: #define WI_FTYPE_DATA 0x0008
101:
102: #define WI_STYPE_MGMT_ASREQ 0x0000 /* association request */
103: #define WI_STYPE_MGMT_ASRESP 0x0010 /* association response */
104: #define WI_STYPE_MGMT_REASREQ 0x0020 /* reassociation request */
105: #define WI_STYPE_MGMT_REASRESP 0x0030 /* reassociation response */
106: #define WI_STYPE_MGMT_PROBEREQ 0x0040 /* probe request */
107: #define WI_STYPE_MGMT_PROBERESP 0x0050 /* probe response */
108: #define WI_STYPE_MGMT_BEACON 0x0080 /* beacon */
109: #define WI_STYPE_MGMT_ATIM 0x0090 /* announcement traffic ind msg */
110: #define WI_STYPE_MGMT_DISAS 0x00A0 /* disassociation */
111: #define WI_STYPE_MGMT_AUTH 0x00B0 /* authentication */
112: #define WI_STYPE_MGMT_DEAUTH 0x00C0 /* deauthentication */
113:
114: #define WI_STYPE_CTL_PSPOLL 0x00A0
115: #define WI_STYPE_CTL_RTS 0x00B0
116: #define WI_STYPE_CTL_CTS 0x00C0
117: #define WI_STYPE_CTL_ACK 0x00D0
118: #define WI_STYPE_CTL_CFEND 0x00E0
119: #define WI_STYPE_CTL_CFENDACK 0x00F0
120: #define WI_STYPE_CTL_CFENDCFACK WI_STYPE_CTL_CFENDACK
121:
122: #define WI_STYPE_DATA 0x0000
123: #define WI_STYPE_DATA_CFACK 0x0010
124: #define WI_STYPE_DATA_CFPOLL 0x0020
125: #define WI_STYPE_DATA_CFACKPOLL 0x0030
126: #define WI_STYPE_NULLFUNC 0x0040
127: #define WI_STYPE_CFACK 0x0050
128: #define WI_STYPE_CFPOLL 0x0060
129: #define WI_STYPE_CFACKPOLL 0x0070
130:
131: struct wi_mgmt_hdr {
132: u_int16_t frame_ctl;
133: u_int16_t duration;
134: u_int8_t dst_addr[6];
135: u_int8_t src_addr[6];
136: u_int8_t bssid[6];
137: u_int16_t seq_ctl;
138: };
139:
140: struct wi_counters {
141: u_int32_t wi_tx_unicast_frames;
142: u_int32_t wi_tx_multicast_frames;
143: u_int32_t wi_tx_fragments;
144: u_int32_t wi_tx_unicast_octets;
145: u_int32_t wi_tx_multicast_octets;
146: u_int32_t wi_tx_deferred_xmits;
147: u_int32_t wi_tx_single_retries;
148: u_int32_t wi_tx_multi_retries;
149: u_int32_t wi_tx_retry_limit;
150: u_int32_t wi_tx_discards;
151: u_int32_t wi_rx_unicast_frames;
152: u_int32_t wi_rx_multicast_frames;
153: u_int32_t wi_rx_fragments;
154: u_int32_t wi_rx_unicast_octets;
155: u_int32_t wi_rx_multicast_octets;
156: u_int32_t wi_rx_fcs_errors;
157: u_int32_t wi_rx_discards_nobuf;
158: u_int32_t wi_tx_discards_wrong_sa;
159: u_int32_t wi_rx_WEP_cant_decrypt;
160: u_int32_t wi_rx_msg_in_msg_frags;
161: u_int32_t wi_rx_msg_in_bad_msg_frags;
162: };
163:
164: /*
165: * These are all the LTV record types that we can read or write
166: * from the WaveLAN. Not all of them are tremendously useful, but I
167: * list as many as I know about here for completeness.
168: */
169:
170: #define WI_RID_DNLD_BUF 0xFD01
171: #define WI_RID_MEMSZ 0xFD02 /* memory size info (Lucent) */
172: #define WI_RID_PRI_IDENTITY 0xFD02 /* primary firmware ident (PRISM2) */
173: #define WI_RID_DOMAINS 0xFD11 /* List of intended regulatory domains */
174: #define WI_RID_CIS 0xFD13 /* CIS info */
175: #define WI_RID_COMMQUAL 0xFD43 /* Communications quality */
176: #define WI_RID_SCALETHRESH 0xFD46 /* Actual system scale thresholds */
177: #define WI_RID_PCF 0xFD87 /* PCF info */
178:
179: /*
180: * Network parameters, static configuration entities.
181: */
182: #define WI_RID_PORTTYPE 0xFC00 /* Connection control characteristics */
183: #define WI_RID_MAC_NODE 0xFC01 /* MAC address of this station */
184: #define WI_RID_DESIRED_SSID 0xFC02 /* Service Set ID for connection */
185: #define WI_RID_OWN_CHNL 0xFC03 /* Comm channel for BSS creation */
186: #define WI_RID_OWN_SSID 0xFC04 /* IBSS creation ID */
187: #define WI_RID_OWN_ATIM_WIN 0xFC05 /* ATIM window time for IBSS creation */
188: #define WI_RID_SYSTEM_SCALE 0xFC06 /* scale that specifies AP density */
189: #define WI_RID_MAX_DATALEN 0xFC07 /* Max len of MAC frame body data */
190: #define WI_RID_MAC_WDS 0xFC08 /* MAC addr of corresponding WDS node */
191: #define WI_RID_PM_ENABLED 0xFC09 /* ESS power management enable */
192: #define WI_RID_PM_EPS 0xFC0A /* PM EPS/PS mode */
193: #define WI_RID_MCAST_RX 0xFC0B /* ESS PM mcast reception */
194: #define WI_RID_MAX_SLEEP 0xFC0C /* max sleep time for ESS PM */
195: #define WI_RID_HOLDOVER 0xFC0D /* holdover time for ESS PM */
196: #define WI_RID_NODENAME 0xFC0E /* ID name of this node for diag */
197: #define WI_RID_DTIM_PERIOD 0xFC10 /* beacon interval between DTIMs */
198: #define WI_RID_WDS_ADDR1 0xFC11 /* port 1 MAC of WDS link node */
199: #define WI_RID_WDS_ADDR2 0xFC12 /* port 1 MAC of WDS link node */
200: #define WI_RID_WDS_ADDR3 0xFC13 /* port 1 MAC of WDS link node */
201: #define WI_RID_WDS_ADDR4 0xFC14 /* port 1 MAC of WDS link node */
202: #define WI_RID_WDS_ADDR5 0xFC15 /* port 1 MAC of WDS link node */
203: #define WI_RID_WDS_ADDR6 0xFC16 /* port 1 MAC of WDS link node */
204: #define WI_RID_MCAST_PM_BUF 0xFC17 /* PM buffering of mcast */
205: #define WI_RID_ENCRYPTION 0xFC20 /* enable/disable WEP */
206: #define WI_RID_AUTHTYPE 0xFC21 /* specify authentication type */
207: #define WI_RID_SYMBOL_MANDATORYBSSID 0xFC21
208: #define WI_RID_P2_TX_CRYPT_KEY 0xFC23
209: #define WI_RID_P2_CRYPT_KEY0 0xFC24
210: #define WI_RID_P2_CRYPT_KEY1 0xFC25
211: #define WI_RID_MICROWAVE_OVEN 0xFC25 /* Microwave oven robustness */
212: #define WI_RID_P2_CRYPT_KEY2 0xFC26
213: #define WI_RID_P2_CRYPT_KEY3 0xFC27
214: #define WI_RID_P2_ENCRYPTION 0xFC28
215: #define PRIVACY_INVOKED 0x01
216: #define EXCLUDE_UNENCRYPTED 0x02
217: #define HOST_ENCRYPT 0x10
218: #define IV_EVERY_FRAME 0x00
219: #define IV_EVERY10_FRAME 0x20
220: #define IV_EVERY50_FRAME 0x40
221: #define IV_EVERY100_FRAME 0x60
222: #define HOST_DECRYPT 0x80
223: #define WI_RID_WEP_MAPTABLE 0xFC29
224: #define WI_RID_CNFAUTHMODE 0xFC2A
225: #define WI_RID_SYMBOL_KEYLENGTH 0xFC2B
226: #define WI_RID_ROAMING_MODE 0xFC2D /* Roaming mode (1:firm,3:disable) */
227: #define WI_RID_CUR_BEACON_INT 0xFC33 /* beacon xmit time for BSS creation */
228: #define WI_RID_ENH_SECURITY 0xFC43 /* hide SSID name (prism fw >= 1.6.3) */
229: #define WI_HIDESSID 0x01
230: #define WI_IGNPROBES 0x02
231: #define WI_HIDESSID_IGNPROBES 0x03
232: #define WI_RID_DBM_ADJUST 0xFC46 /* Get DBM adjustment factor */
233: #define WI_RID_SYMBOL_PREAMBLE 0xFC8C /* Enable/disable short preamble */
234: #define WI_RID_P2_SHORT_PREAMBLE 0xFCB0 /* Short preamble support */
235: #define WI_RID_P2_EXCLUDE_LONG_PREAMBLE 0xFCB1 /* Don't send long preamble */
236: #define WI_RID_BASIC_RATE 0xFCB3
237: #define WI_RID_SUPPORT_RATE 0xFCB4
238: #define WI_RID_SYMBOL_DIVERSITY 0xFC87 /* Symbol antenna diversity */
239: #define WI_RID_SYMBOL_BASIC_RATE 0xFC90
240:
241: /*
242: * Network parameters, dynamic configuration entities
243: */
244: #define WI_RID_MCAST_LIST 0xFC80 /* list of multicast addrs (up to 16) */
245: #define WI_RID_CREATE_IBSS 0xFC81 /* create IBSS */
246: #define WI_RID_FRAG_THRESH 0xFC82 /* frag len, unicast msg xmit */
247: #define WI_RID_RTS_THRESH 0xFC83 /* frame len for RTS/CTS handshake */
248: #define WI_RID_TX_RATE 0xFC84 /* data rate for message xmit */
249: #define WI_RID_PROMISC 0xFC85 /* enable promisc mode */
250: #define WI_RID_FRAG_THRESH0 0xFC90
251: #define WI_RID_FRAG_THRESH1 0xFC91
252: #define WI_RID_FRAG_THRESH2 0xFC92
253: #define WI_RID_FRAG_THRESH3 0xFC93
254: #define WI_RID_FRAG_THRESH4 0xFC94
255: #define WI_RID_FRAG_THRESH5 0xFC95
256: #define WI_RID_FRAG_THRESH6 0xFC96
257: #define WI_RID_RTS_THRESH0 0xFC97
258: #define WI_RID_RTS_THRESH1 0xFC98
259: #define WI_RID_RTS_THRESH2 0xFC99
260: #define WI_RID_RTS_THRESH3 0xFC9A
261: #define WI_RID_RTS_THRESH4 0xFC9B
262: #define WI_RID_RTS_THRESH5 0xFC9C
263: #define WI_RID_RTS_THRESH6 0xFC9D
264: #define WI_RID_TX_RATE0 0xFC9E
265: #define WI_RID_TX_RATE1 0xFC9F
266: #define WI_RID_TX_RATE2 0xFCA0
267: #define WI_RID_TX_RATE3 0xFCA1
268: #define WI_RID_TX_RATE4 0xFCA2
269: #define WI_RID_TX_RATE5 0xFCA3
270: #define WI_RID_TX_RATE6 0xFCA4
271: #define WI_RID_DEFLT_CRYPT_KEYS 0xFCB0
272: #define WI_RID_TX_CRYPT_KEY 0xFCB1
273: #define WI_RID_TICK_TIME 0xFCE0 /* Auxiliary Timer tick interval */
274:
275: struct wi_key {
276: u_int16_t wi_keylen;
277: u_int8_t wi_keydat[13];
278: };
279:
280: #define WI_NLTV_KEYS 4
281: struct wi_ltv_keys {
282: u_int16_t wi_len;
283: u_int16_t wi_type;
284: struct wi_key wi_keys[WI_NLTV_KEYS];
285: };
286:
287: /*
288: * NIC information
289: */
290: #define WI_RID_FIRM_ID 0xFD02 /* Primary func firmware ID. */
291: #define WI_RID_PRI_SUP_RANGE 0xFD03 /* primary supplier compatibility */
292: #define WI_RID_CIF_ACT_RANGE 0xFD04 /* controller sup. compatibility */
293: #define WI_RID_SERIALNO 0xFD0A /* card serial number */
294: #define WI_RID_CARD_ID 0xFD0B /* card identification */
295: #define WI_RID_MFI_SUP_RANGE 0xFD0C /* modem supplier compatibility */
296: #define WI_RID_CFI_SUP_RANGE 0xFD0D /* controller sup. compatibility */
297: #define WI_RID_CHANNEL_LIST 0xFD10 /* allowed comm. frequencies. */
298: #define WI_RID_REG_DOMAINS 0xFD11 /* list of intended regulatory doms */
299: #define WI_RID_TEMP_TYPE 0xFD12 /* hw temp range code */
300: #define WI_RID_CIS 0xFD13 /* PC card info struct */
301: #define WI_RID_STA_IDENTITY 0xFD20 /* station funcs firmware ident */
302: #define WI_RID_STA_SUP_RANGE 0xFD21 /* station supplier compat */
303: #define WI_RID_MFI_ACT_RANGE 0xFD22
304: #define WI_RID_SYMBOL_IDENTITY 0xFD24 /* Symbol station firmware ident */
305: #define WI_RID_CFI_ACT_RANGE 0xFD33
306:
307: /*
308: * MAC information
309: */
310: #define WI_RID_PORT_STAT 0xFD40 /* actual MAC port con control stat */
311: #define WI_RID_CURRENT_SSID 0xFD41 /* ID of actually connected SS */
312: #define WI_RID_CURRENT_BSSID 0xFD42 /* ID of actually connected BSS */
313: #define WI_RID_COMMS_QUALITY 0xFD43 /* quality of BSS connection */
314: #define WI_RID_CUR_TX_RATE 0xFD44 /* current TX rate */
315: #define WI_RID_OWN_BEACON_INT 0xFD45 /* beacon xmit time for BSS creation */
316: #define WI_RID_CUR_SCALE_THRESH 0xFD46 /* actual system scale thresh setting */
317: #define WI_RID_PROT_RESP_TIME 0xFD47 /* time to wait for resp to req msg */
318: #define WI_RID_SHORT_RTR_LIM 0xFD48 /* max tx attempts for short frames */
319: #define WI_RID_LONG_RTS_LIM 0xFD49 /* max tx attempts for long frames */
320: #define WI_RID_MAX_TX_LIFE 0xFD4A /* max tx frame handling duration */
321: #define WI_RID_MAX_RX_LIFE 0xFD4B /* max rx frame handling duration */
322: #define WI_RID_CF_POLL 0xFD4C /* contention free pollable ind */
323: #define WI_RID_AUTH_ALGS 0xFD4D /* auth algorithms available */
324: #define WI_RID_AUTH_TYPE 0xFD4E /* available auth types */
325: #define WI_RID_WEP_AVAIL 0xFD4F /* WEP privacy option available */
326: #define WI_RID_CUR_TX_RATE1 0xFD80
327: #define WI_RID_CUR_TX_RATE2 0xFD81
328: #define WI_RID_CUR_TX_RATE3 0xFD82
329: #define WI_RID_CUR_TX_RATE4 0xFD83
330: #define WI_RID_CUR_TX_RATE5 0xFD84
331: #define WI_RID_CUR_TX_RATE6 0xFD85
332: #define WI_RID_OWN_MAC 0xFD86 /* unique local MAC addr */
333: #define WI_RID_PCI_INFO 0xFD87 /* point coordination func cap */
334:
335: /*
336: * Scan Information
337: */
338: #define WI_RID_BCAST_SCAN_REQ 0xFCAB /* Broadcast Scan request (Symbol) */
339: #define BSCAN_5SEC 0x01
340: #define BSCAN_ONETIME 0x02
341: #define BSCAN_PASSIVE 0x40
342: #define BSCAN_BCAST 0x80
343: #define WI_RID_SCAN_REQ 0xFCE1 /* Scan request (STA only) */
344: #define WI_RID_JOIN_REQ 0xFCE2 /* Join request (STA only) */
345: #define WI_RID_AUTH_STATION 0xFCE3 /* Authenticates Station (AP) */
346: #define WI_RID_CHANNEL_REQ 0xFCE4 /* Channel Information Request (AP) */
347: #define WI_RID_SCAN_RES 0xFD88 /* Scan Results Table */
348:
349: struct wi_apinfo {
350: int scanreason; /* ScanReason */
351: char bssid[6]; /* BSSID (mac address) */
352: int channel; /* Channel */
353: int signal; /* Signal level */
354: int noise; /* Average Noise Level*/
355: int quality; /* Quality */
356: int namelen; /* Length of SSID string */
357: char name[32]; /* SSID string */
358: int capinfo; /* Capability info. */
359: int interval; /* BSS Beacon Interval */
360: int rate; /* Data Rate */
361: };
362:
363: /*
364: * The following do not get passed down to the card, they are used
365: * by wicontrol to modify the behavior of the driver (use WEP in software or
366: * firmware, use alternate cryptographic algorithms, etc.) I'm calling them
367: * "fake record IDs."
368: */
369: #define WI_FRID_CRYPTO_ALG 0xFCE3
370: #define WI_FRID_DEBUGGING 0xFCE4
371:
372: /*
373: * bsd-airtools v0.2 - source-mods v0.2 [common.h]
374: * by h1kari - (c) Dachb0den Labs 2001
375: */
376:
377: /*
378: * Copyright (c) 2001 Dachb0den Labs.
379: * David Hulton <h1kari@dachb0den.com>. All rights reserved.
380: *
381: * Redistribution and use in source and binary forms, with or without
382: * modification, are permitted provided that the following conditions
383: * are met:
384: * 1. Redistributions of source code must retain the above copyright
385: * notice, this list of conditions and the following disclaimer.
386: * 2. Redistributions in binary form must reproduce the above copyright
387: * notice, this list of conditions and the following disclaimer in the
388: * documentation and/or other materials provided with the distribution.
389: * 3. All advertising materials mentioning features or use of this software
390: * must display the following acknowledgement:
391: * This product includes software developed by David Hulton.
392: * 4. Neither the name of the author nor the names of any co-contributors
393: * may be used to endorse or promote products derived from this software
394: * without specific prior written permission.
395: *
396: * THIS SOFTWARE IS PROVIDED BY David Hulton AND CONTRIBUTORS ``AS IS'' AND
397: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
398: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
399: * ARE DISCLAIMED. IN NO EVENT SHALL David Hulton OR THE VOICES IN HIS HEAD
400: * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
401: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
402: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
403: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
404: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
405: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
406: * THE POSSIBILITY OF SUCH DAMAGE.
407: */
408:
409: /*
410: * standard hermes receive frame used by wavelan/prism2 cards
411: */
412: struct wi_rx_frame {
413: /*
414: * hermes prefix header. supplies information on the current status of
415: * the network and various other statistics gathered from the
416: * management/control frames as used internally.
417: */
418: u_int16_t wi_status;
419: u_int16_t wi_ts0;
420: u_int16_t wi_ts1;
421: u_int8_t wi_silence;
422: u_int8_t wi_signal;
423: u_int8_t wi_rate;
424: u_int8_t wi_rx_flow;
425: u_int16_t wi_rsvd0;
426: u_int16_t wi_rsvd1;
427: /*
428: * standard 80211 frame header. all packets have to use this header as
429: * per the AN9900 from intersil, even management/control. for
430: * management packets, they just threw the header into the data field,
431: * but for control packets the headers are lost in translation and
432: * therefore not all control packet info can be displayed.
433: */
434: u_int16_t wi_frame_ctl;
435: u_int16_t wi_id;
436: u_int8_t wi_addr1[6];
437: u_int8_t wi_addr2[6];
438: u_int8_t wi_addr3[6];
439: u_int16_t wi_seq_ctl;
440: u_int8_t wi_addr4[6];
441: u_int16_t wi_dat_len;
442: /*
443: * another wierdity with the drivers. they append a 802.3 header which
444: * is somewhat redundant, since all the same data is provided in the
445: * 802.11 header.
446: */
447: u_int8_t wi_dst_addr[6];
448: u_int8_t wi_src_addr[6];
449: u_int16_t wi_len;
450: };
451: #define WI_DATA_HDRLEN WI_802_11_OFFSET
452: #define WI_MGMT_HDRLEN WI_802_11_OFFSET_RAW
453: #define WI_CTL_HDRLEN WI_802_11_OFFSET_RAW
454:
455:
456: /*
457: * all data packets have a snap (sub-network access protocol) header that
458: * isn't entirely defined, but added for ethernet compatibility.
459: */
460: struct wi_snap_frame {
461: u_int16_t wi_dat[3];
462: u_int16_t wi_type;
463: };
464:
465:
466: /*
467: * management frame headers
468: * note: all management frames consist of a static header and variable length
469: * fields.
470: */
471:
472: /*
473: * variable length field structure
474: */
475: struct wi_mgmt_var_hdr {
476: u_int8_t wi_code;
477: u_int8_t wi_len;
478: u_int8_t wi_data[256];
479: };
480:
481: /*
482: * management beacon frame prefix
483: */
484: struct wi_mgmt_beacon_hdr {
485: u_int32_t wi_ts0;
486: u_int32_t wi_ts1;
487: u_int16_t wi_interval;
488: u_int16_t wi_capinfo;
489: };
490:
491: /*
492: * ibss announcement traffic indication message (atim) frame
493: * note: no parameters
494: */
495:
496: /*
497: * management disassociation frame
498: */
499: struct wi_mgmt_disas_hdr {
500: u_int16_t wi_reason;
501: };
502:
503: /*
504: * management association request frame prefix
505: */
506: struct wi_mgmt_asreq_hdr {
507: u_int16_t wi_capinfo;
508: u_int16_t wi_interval;
509: };
510:
511: /*
512: * management association response frame prefix
513: */
514: struct wi_mgmt_asresp_hdr {
515: u_int16_t wi_capinfo;
516: u_int16_t wi_status;
517: u_int16_t wi_aid;
518: };
519:
520: /*
521: * management reassociation request frame prefix
522: */
523: struct wi_mgmt_reasreq_hdr {
524: u_int16_t wi_capinfo;
525: u_int16_t wi_interval;
526: u_int8_t wi_currap[6];
527: };
528:
529: /*
530: * management reassociation response frame prefix
531: */
532: struct wi_mgmt_reasresp_hdr {
533: u_int16_t wi_capinfo;
534: u_int16_t wi_status;
535: u_int16_t wi_aid;
536: };
537:
538: /*
539: * management probe request frame prefix
540: * note: no static parameters, only variable length
541: */
542:
543: /*
544: * management probe response frame prefix
545: */
546: struct wi_mgmt_proberesp_hdr {
547: u_int32_t wi_ts0;
548: u_int32_t wi_ts1;
549: u_int16_t wi_interval;
550: u_int16_t wi_capinfo;
551: };
552:
553: /*
554: * management authentication frame prefix
555: */
556: struct wi_mgmt_auth_hdr {
557: u_int16_t wi_algo;
558: u_int16_t wi_seq;
559: u_int16_t wi_status;
560: };
561:
562: /*
563: * management deauthentication frame
564: */
565: struct wi_mgmt_deauth_hdr {
566: u_int16_t wi_reason;
567: };
568:
569:
570: /*
571: * rid configuration register definitions
572: */
573: #define WI_RID_PROCFRAME 0x3137 /* Return full frame information */
574: #define WI_RID_PRISM2 0x3138 /* tell if we're a prism2 card or not */
575:
576:
577: /*
578: * 802.11 definitions
579: */
580: #define WI_STAT_BADCRC 0x0001
581: #define WI_STAT_UNDECRYPTABLE 0x0002
582: #define WI_STAT_ERRSTAT 0x0003
583: #define WI_STAT_MAC_PORT 0x0700
584: #define WI_STAT_1042 0x2000
585: #define WI_STAT_TUNNEL 0x4000
586: #define WI_STAT_WMP_MSG 0x6000
587: #define WI_RXSTAT_MSG_TYPE 0xE000
588:
589: #define WI_FCTL_OPT_MASK 0xFF00
590: #define WI_AID_SET 0xC000
591: #define WI_AID_MASK 0x3FFF
592: #define WI_SCTL_FRAGNUM_MASK 0x000F
593: #define WI_SCTL_SEQNUM_MASK 0xFFF0
594:
595: #define WI_STAT_UNSPEC_FAIL 1
596: #define WI_STAT_CAPINFO_FAIL 10
597: #define WI_STAT_REAS_DENY 11
598: #define WI_STAT_ASSOC_DENY 12
599: #define WI_STAT_ALGO_FAIL 13
600: #define WI_STAT_SEQ_FAIL 14
601: #define WI_STAT_CHAL_FAIL 15
602: #define WI_STAT_TOUT_FAIL 16
603: #define WI_STAT_OVERL_DENY 17
604: #define WI_STAT_RATE_DENY 18
605:
606: #define WI_FTYPE_MGMT 0x0000
607: #define WI_FTYPE_CTL 0x0004
608: #define WI_FTYPE_DATA 0x0008
609:
610: #define WI_FCTL_VERS 0x0002
611: #define WI_FCTL_FTYPE 0x000C
612: #define WI_FCTL_STYPE 0x00F0
613: #define WI_FCTL_TODS 0x0100
614: #define WI_FCTL_FROMDS 0x0200
615: #define WI_FCTL_MOREFRAGS 0x0400
616: #define WI_FCTL_RETRY 0x0800
617: #define WI_FCTL_PM 0x1000
618: #define WI_FCTL_MOREDATA 0x2000
619: #define WI_FCTL_WEP 0x4000
620: #define WI_FCTL_ORDER 0x8000
621:
622: #define WI_FCS_LEN 0x4 /* checksum length */
623:
624:
625: /*
626: * management definitions
627: */
628: #define WI_CAPINFO_ESS 0x01
629: #define WI_CAPINFO_IBSS 0x02
630: #define WI_CAPINFO_CFPOLL 0x04
631: #define WI_CAPINFO_CFPOLLREQ 0x08
632: #define WI_CAPINFO_PRIV 0x10
633:
634: #define WI_REASON_UNSPEC 1
635: #define WI_REASON_AUTH_INVALID 2
636: #define WI_REASON_DEAUTH_LEAVE 3
637: #define WI_REASON_DISAS_INACT 4
638: #define WI_REASON_DISAS_OVERL 5
639: #define WI_REASON_CLASS2 6
640: #define WI_REASON_CLASS3 7
641: #define WI_REASON_DISAS_LEAVE 8
642: #define WI_REASON_NOAUTH 9
643:
644: #define WI_VAR_SSID 0
645: #define WI_VAR_SRATES 1
646: #define WI_VAR_FH 2
647: #define WI_VAR_DS 3
648: #define WI_VAR_CF 4
649: #define WI_VAR_TIM 5
650: #define WI_VAR_IBSS 6
651: #define WI_VAR_CHAL 16
652:
653: #define WI_VAR_SRATES_MASK 0x7F
654:
655: /*
656: * ap scanning structures
657: */
658: struct wi_scan_res {
659: u_int16_t wi_chan;
660: u_int16_t wi_noise;
661: u_int16_t wi_signal;
662: u_int8_t wi_bssid[6];
663: u_int16_t wi_interval;
664: u_int16_t wi_capinfo;
665: u_int16_t wi_ssid_len;
666: u_int8_t wi_ssid[32];
667: u_int8_t wi_srates[10];
668: u_int8_t wi_rate;
669: u_int8_t wi_rsvd;
670: };
671: #define WI_WAVELAN_RES_1M 0x0a
672: #define WI_WAVELAN_RES_2M 0x14
673: #define WI_WAVELAN_RES_5M 0x37
674: #define WI_WAVELAN_RES_11M 0x6e
675:
676: #define WI_WAVELAN_RES_SIZE 50
677: #define WI_WAVELAN_RES_TIMEOUT ((hz / 10) * 2) /* 200ms */
678: #define WI_WAVELAN_RES_TRIES 100
679:
680: struct wi_scan_p2_hdr {
681: u_int16_t wi_rsvd;
682: u_int16_t wi_reason;
683: };
684: #define WI_PRISM2_RES_SIZE 62
685:
686: /*
687: * prism2 debug mode definitions
688: */
689: #define SIOCSPRISM2DEBUG _IOW('i', 137, struct ifreq)
690: #define SIOCGPRISM2DEBUG _IOWR('i', 138, struct ifreq)
691:
692: #define WI_CMD_DEBUG 0x0038 /* prism2 debug */
693:
694: #define WI_DEBUG_RESET 0x00
695: #define WI_DEBUG_INIT 0x01
696: #define WI_DEBUG_SLEEP 0x02
697: #define WI_DEBUG_WAKE 0x03
698: #define WI_DEBUG_CHAN 0x08
699: #define WI_DEBUG_DELAYSUPP 0x09
700: #define WI_DEBUG_TXSUPP 0x0A
701: #define WI_DEBUG_MONITOR 0x0B
702: #define WI_DEBUG_LEDTEST 0x0C
703: #define WI_DEBUG_CONTTX 0x0E
704: #define WI_DEBUG_STOPTEST 0x0F
705: #define WI_DEBUG_CONTRX 0x10
706: #define WI_DEBUG_SIGSTATE 0x11
707: #define WI_DEBUG_CALENABLE 0x13
708: #define WI_DEBUG_CONFBITS 0x15
709:
710: /*
711: * Modem information
712: */
713: #define WI_RID_PHY_TYPE 0xFDC0 /* phys layer type indication */
714: #define WI_RID_CURRENT_CHAN 0xFDC1 /* current frequency */
715: #define WI_RID_PWR_STATE 0xFDC2 /* pwr consumption status */
716: #define WI_RID_CCA_MODE 0xFDC3 /* clear chan assess mode indication */
717: #define WI_RID_CCA_TIME 0xFDC4 /* clear chan assess time */
718: #define WI_RID_MAC_PROC_DELAY 0xFDC5 /* MAC processing delay time */
719: #define WI_RID_DATA_RATES 0xFDC6 /* supported data rates */
720:
721: /*
722: * Values for supported crypto algorithms:
723: */
724: #define WI_CRYPTO_FIRMWARE_WEP 0x00 /* default */
725: #define WI_CRYPTO_SOFTWARE_WEP 0x01
726:
727: /* Firmware types */
728: #define WI_NOTYPE 0
729: #define WI_LUCENT 1
730: #define WI_INTERSIL 2
731: #define WI_SYMBOL 3
732:
733: /* Card identities */
734: #define WI_NIC_LUCENT 0x0001
735:
736: #define WI_NIC_SONY 0x0002
737:
738: #define WI_NIC_LUCENT_EMB 0x0005
739:
740: #define WI_NIC_EVB2 0x8000
741:
742: #define WI_NIC_HWB3763 0x8001
743:
744: #define WI_NIC_HWB3163 0x8002
745:
746: #define WI_NIC_HWB3163B 0x8003
747:
748: #define WI_NIC_EVB3 0x8004
749:
750: #define WI_NIC_HWB1153 0x8007
751:
752: #define WI_NIC_P2_SST 0x8008 /* Prism2 with SST flush */
753:
754: #define WI_NIC_EVB2_SST 0x8009
755:
756: #define WI_NIC_3842_EVA 0x800A /* 3842 Evaluation Board */
757:
758: #define WI_NIC_3842_PCMCIA_AMD 0x800B /* Prism2.5 PCMCIA */
759: #define WI_NIC_3842_PCMCIA_SST 0x800C
760: #define WI_NIC_3842_PCMCIA_ATL 0x800D
761: #define WI_NIC_3842_PCMCIA_ATS 0x800E
762:
763: #define WI_NIC_3842_USB_AMD 0x800f /* Prism2.5 USB */
764: #define WI_NIC_3842_USB_SST 0x8010
765: #define WI_NIC_3842_USB_ATL 0x8011
766:
767: #define WI_NIC_3842_MINI_AMD 0x8012 /* Prism2.5 Mini-PCI */
768: #define WI_NIC_3842_MINI_SST 0x8013
769: #define WI_NIC_3842_MINI_ATL 0x8014
770: #define WI_NIC_3842_MINI_ATS 0x8015
771:
772: #define WI_NIC_3842_PCI_AMD 0x8016 /* Prism2.5 PCI-bridge */
773: #define WI_NIC_3842_PCI_SST 0x8017
774: #define WI_NIC_3842_PCI_ATL 0x8018
775: #define WI_NIC_3842_PCI_ATS 0x8019
776:
777: #define WI_NIC_P3_PCMCIA_AMD 0x801A /* Prism3 PCMCIA */
778: #define WI_NIC_P3_PCMCIA_SST 0x801B
779: #define WI_NIC_P3_PCMCIA_ATL 0x801C
780: #define WI_NIC_P3_PCMCIA_ATS 0x801D
781:
782: #define WI_NIC_3842_USB_AMD_2 0x801E /* Prism2.5 USB */
783: #define WI_NIC_3842_USB_SST_2 0x801F
784: #define WI_NIC_3842_USB_ATL_2 0x8020
785:
786: #define WI_NIC_P3_MINI_AMD 0x8021 /* Prism3 Mini-PCI */
787: #define WI_NIC_P3_MINI_SST 0x8022
788: #define WI_NIC_P3_MINI_ATL 0x8023
789: #define WI_NIC_P3_MINI_ATS 0x8024
790:
791: #define WI_NIC_P3_USB 0x8025 /* Prism3 USB */
792: #define WI_NIC_P3_USB_NETGEAR 0x8026
793: #define WI_NIC_P3_USB_2 0x8027
794:
795: struct wi_card_ident {
796: const u_int16_t card_id;
797: const char *card_name;
798: const u_int8_t firm_type;
799: };
800:
801: #define WI_CARD_IDS \
802: { \
803: WI_NIC_LUCENT, \
804: "Lucent WaveLAN/IEEE", \
805: WI_LUCENT \
806: }, { \
807: WI_NIC_SONY, \
808: "Sony WaveLAN/IEEE", \
809: WI_LUCENT \
810: }, { \
811: WI_NIC_LUCENT_EMB, \
812: "Lucent Embedded WaveLAN/IEEE", \
813: WI_LUCENT \
814: }, { \
815: WI_NIC_EVB2, \
816: "PRISM2 HFA3841(EVB2)", \
817: WI_INTERSIL \
818: }, { \
819: WI_NIC_HWB3763, \
820: "PRISM2 HWB3763 rev.B", \
821: WI_INTERSIL \
822: }, { \
823: WI_NIC_HWB3163, \
824: "PRISM2 HWB3163 rev.A", \
825: WI_INTERSIL \
826: }, { \
827: WI_NIC_HWB3163B, \
828: "PRISM2 HWB3163 rev.B", \
829: WI_INTERSIL \
830: }, { \
831: WI_NIC_EVB3, \
832: "PRISM2 HFA3842(EVB3)", \
833: WI_INTERSIL \
834: }, { \
835: WI_NIC_HWB1153, \
836: "PRISM1 HWB1153", \
837: WI_INTERSIL \
838: }, { \
839: WI_NIC_P2_SST, \
840: "PRISM2 HWB3163 SST-flash", \
841: WI_INTERSIL \
842: }, { \
843: WI_NIC_EVB2_SST, \
844: "PRISM2 HWB3163(EVB2) SST-flash", \
845: WI_INTERSIL \
846: }, { \
847: WI_NIC_3842_EVA, \
848: "PRISM2 HFA3842(EVAL)", \
849: WI_INTERSIL \
850: }, { \
851: WI_NIC_3842_PCMCIA_AMD, \
852: "PRISM2.5 ISL3873", \
853: WI_INTERSIL \
854: }, { \
855: WI_NIC_3842_PCMCIA_SST, \
856: "PRISM2.5 ISL3873", \
857: WI_INTERSIL \
858: }, { \
859: WI_NIC_3842_PCMCIA_ATL, \
860: "PRISM2.5 ISL3873", \
861: WI_INTERSIL \
862: }, { \
863: WI_NIC_3842_PCMCIA_ATS, \
864: "PRISM2.5 ISL3873", \
865: WI_INTERSIL \
866: }, { \
867: WI_NIC_3842_USB_AMD, \
868: "PRISM2.5 USB", \
869: WI_INTERSIL \
870: }, { \
871: WI_NIC_3842_USB_SST, \
872: "PRISM2.5 USB", \
873: WI_INTERSIL \
874: }, { \
875: WI_NIC_3842_USB_ATL, \
876: "PRISM2.5 USB", \
877: WI_INTERSIL \
878: }, { \
879: WI_NIC_3842_MINI_AMD, \
880: "PRISM2.5 ISL3874A(Mini-PCI)", \
881: WI_INTERSIL \
882: }, { \
883: WI_NIC_3842_MINI_SST, \
884: "PRISM2.5 ISL3874A(Mini-PCI)", \
885: WI_INTERSIL \
886: }, { \
887: WI_NIC_3842_MINI_ATL, \
888: "PRISM2.5 ISL3874A(Mini-PCI)", \
889: WI_INTERSIL \
890: }, { \
891: WI_NIC_3842_MINI_ATS, \
892: "PRISM2.5 ISL3874A(Mini-PCI)", \
893: WI_INTERSIL \
894: }, { \
895: WI_NIC_3842_PCI_AMD, \
896: "PRISM2.5 ISL3874A(PCI-bridge)", \
897: WI_INTERSIL \
898: }, { \
899: WI_NIC_3842_PCI_SST, \
900: "PRISM2.5 ISL3874A(PCI-bridge)", \
901: WI_INTERSIL \
902: }, { \
903: WI_NIC_3842_PCI_ATS, \
904: "PRISM2.5 ISL3874A(PCI-bridge)", \
905: WI_INTERSIL \
906: }, { \
907: WI_NIC_3842_PCI_ATL, \
908: "PRISM2.5 ISL3874A(PCI-bridge)", \
909: WI_INTERSIL \
910: }, { \
911: WI_NIC_P3_PCMCIA_AMD, \
912: "PRISM3 ISL37300P", \
913: WI_INTERSIL \
914: }, { \
915: WI_NIC_P3_PCMCIA_SST, \
916: "PRISM3 ISL37300P", \
917: WI_INTERSIL \
918: }, { \
919: WI_NIC_P3_PCMCIA_ATL, \
920: "PRISM3 ISL37300P", \
921: WI_INTERSIL \
922: }, { \
923: WI_NIC_P3_PCMCIA_ATS, \
924: "PRISM3 ISL37300P", \
925: WI_INTERSIL \
926: }, { \
927: WI_NIC_3842_USB_AMD_2, \
928: "PRISM2.5 USB", \
929: WI_INTERSIL \
930: }, { \
931: WI_NIC_3842_USB_SST_2, \
932: "PRISM2.5 USB", \
933: WI_INTERSIL \
934: }, { \
935: WI_NIC_3842_USB_ATL_2, \
936: "PRISM2.5 USB", \
937: WI_INTERSIL \
938: }, { \
939: WI_NIC_P3_MINI_AMD, \
940: "PRISM3 ISL37300P(PCI)", \
941: WI_INTERSIL \
942: }, { \
943: WI_NIC_P3_MINI_SST, \
944: "PRISM3 ISL37300P(PCI)", \
945: WI_INTERSIL \
946: }, { \
947: WI_NIC_P3_MINI_ATL, \
948: "PRISM3 ISL37300P(PCI)", \
949: WI_INTERSIL \
950: }, { \
951: WI_NIC_P3_MINI_ATS, \
952: "PRISM3 ISL37300P(PCI)", \
953: WI_INTERSIL \
954: }, { \
955: WI_NIC_P3_USB, \
956: "PRISM3 (USB)", \
957: WI_INTERSIL \
958: }, { \
959: WI_NIC_P3_USB_NETGEAR, \
960: "PRISM3 (USB)", \
961: WI_INTERSIL \
962: }, { \
963: WI_NIC_P3_USB_2, \
964: "PRISM3 (USB)", \
965: WI_INTERSIL \
966: }, { \
967: 0, \
968: NULL, \
969: WI_NOTYPE \
970: }
971:
972: #endif /* _IF_WI_IEEE_H */
CVSweb