xref: /freebsd/sys/dev/usb/wlan/if_uathreg.h (revision 0957b409)
1 /*	$OpenBSD: if_uathreg.h,v 1.2 2006/09/18 16:34:23 damien Exp $	*/
2 /*	$FreeBSD$	*/
3 
4 /*-
5  * Copyright (c) 2006
6  *	Damien Bergamini <damien.bergamini@free.fr>
7  * Copyright (c) 2006 Sam Leffler, Errno Consulting
8  *
9  * Permission to use, copy, modify, and distribute this software for any
10  * purpose with or without fee is hereby granted, provided that the above
11  * copyright notice and this permission notice appear in all copies.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
16  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20  */
21 
22 #define UATH_CONFIG_INDEX	0
23 #define UATH_IFACE_INDEX	0
24 
25 /* all fields are big endian */
26 struct uath_fwblock {
27 	uint32_t	flags;
28 #define UATH_WRITE_BLOCK	(1 << 4)
29 
30 	uint32_t	len;
31 #define UATH_MAX_FWBLOCK_SIZE	2048
32 
33 	uint32_t	total;
34 	uint32_t	remain;
35 	uint32_t	rxtotal;
36 	uint32_t	pad[123];
37 } __packed;
38 
39 #define UATH_MAX_CMDSZ		512
40 
41 /*
42  * Messages are passed in Target Endianness.  All fixed-size
43  * fields of a WDS Control Message are treated as 32-bit
44  * values and Control Msgs are guaranteed to be 32-bit aligned.
45  *
46  * The format of a WDS Control Message is as follows:
47  *    Message Length	32 bits
48  *    Message Opcode	32 bits
49  *    Message ID	32 bits
50  *    parameter 1
51  *    parameter 2
52  *       ...
53  *
54  * A variable-length parameter, or a parmeter that is larger than
55  * 32 bits is passed as <length, data> pair, where length is a
56  * 32-bit quantity and data is padded to 32 bits.
57  */
58 struct uath_cmd_hdr {
59 	uint32_t	len;		/* msg length including header */
60 	uint32_t	code;		/* operation code */
61 /* NB: these are defined for rev 1.5 firmware; rev 1.6 is different */
62 /* messages from Host -> Target */
63 #define	WDCMSG_HOST_AVAILABLE		0x01
64 #define WDCMSG_BIND			0x02
65 #define WDCMSG_TARGET_RESET		0x03
66 #define WDCMSG_TARGET_GET_CAPABILITY	0x04
67 #define WDCMSG_TARGET_SET_CONFIG	0x05
68 #define WDCMSG_TARGET_GET_STATUS	0x06
69 #define WDCMSG_TARGET_GET_STATS		0x07
70 #define WDCMSG_TARGET_START		0x08
71 #define WDCMSG_TARGET_STOP		0x09
72 #define WDCMSG_TARGET_ENABLE		0x0a
73 #define WDCMSG_TARGET_DISABLE		0x0b
74 #define	WDCMSG_CREATE_CONNECTION	0x0c
75 #define WDCMSG_UPDATE_CONNECT_ATTR	0x0d
76 #define	WDCMSG_DELETE_CONNECT		0x0e
77 #define	WDCMSG_SEND			0x0f
78 #define WDCMSG_FLUSH			0x10
79 /* messages from Target -> Host */
80 #define	WDCMSG_STATS_UPDATE		0x11
81 #define	WDCMSG_BMISS			0x12
82 #define	WDCMSG_DEVICE_AVAIL		0x13
83 #define	WDCMSG_SEND_COMPLETE		0x14
84 #define	WDCMSG_DATA_AVAIL		0x15
85 #define	WDCMSG_SET_PWR_MODE		0x16
86 #define	WDCMSG_BMISS_ACK		0x17
87 #define	WDCMSG_SET_LED_STEADY		0x18
88 #define	WDCMSG_SET_LED_BLINK		0x19
89 /* more messages */
90 #define	WDCMSG_SETUP_BEACON_DESC	0x1a
91 #define	WDCMSG_BEACON_INIT		0x1b
92 #define	WDCMSG_RESET_KEY_CACHE		0x1c
93 #define	WDCMSG_RESET_KEY_CACHE_ENTRY	0x1d
94 #define	WDCMSG_SET_KEY_CACHE_ENTRY	0x1e
95 #define	WDCMSG_SET_DECOMP_MASK		0x1f
96 #define	WDCMSG_SET_REGULATORY_DOMAIN	0x20
97 #define	WDCMSG_SET_LED_STATE		0x21
98 #define	WDCMSG_WRITE_ASSOCID		0x22
99 #define	WDCMSG_SET_STA_BEACON_TIMERS	0x23
100 #define	WDCMSG_GET_TSF			0x24
101 #define	WDCMSG_RESET_TSF		0x25
102 #define	WDCMSG_SET_ADHOC_MODE		0x26
103 #define	WDCMSG_SET_BASIC_RATE		0x27
104 #define	WDCMSG_MIB_CONTROL		0x28
105 #define	WDCMSG_GET_CHANNEL_DATA		0x29
106 #define	WDCMSG_GET_CUR_RSSI		0x2a
107 #define	WDCMSG_SET_ANTENNA_SWITCH	0x2b
108 #define	WDCMSG_USE_SHORT_SLOT_TIME	0x2f
109 #define	WDCMSG_SET_POWER_MODE		0x30
110 #define	WDCMSG_SETUP_PSPOLL_DESC	0x31
111 #define	WDCMSG_SET_RX_MULTICAST_FILTER	0x32
112 #define	WDCMSG_RX_FILTER		0x33
113 #define	WDCMSG_PER_CALIBRATION		0x34
114 #define	WDCMSG_RESET			0x35
115 #define	WDCMSG_DISABLE			0x36
116 #define	WDCMSG_PHY_DISABLE		0x37
117 #define	WDCMSG_SET_TX_POWER_LIMIT	0x38
118 #define	WDCMSG_SET_TX_QUEUE_PARAMS	0x39
119 #define	WDCMSG_SETUP_TX_QUEUE		0x3a
120 #define	WDCMSG_RELEASE_TX_QUEUE		0x3b
121 #define	WDCMSG_SET_DEFAULT_KEY		0x43
122 	uint32_t	msgid;		/* msg id (supplied by host) */
123 	uint32_t	magic;		/* response desired/target status */
124 	uint32_t	debug[4];	/* debug data area */
125 	/* msg data follows */
126 } __packed;
127 
128 struct uath_chunk {
129 	uint8_t		seqnum;		/* sequence number for ordering */
130 	uint8_t		flags;
131 #define	UATH_CFLAGS_FINAL	0x01	/* final chunk of a msg */
132 #define	UATH_CFLAGS_RXMSG	0x02	/* chunk contains rx completion */
133 #define	UATH_CFLAGS_DEBUG	0x04	/* for debugging */
134 	uint16_t	length;		/* chunk size in bytes */
135 	/* chunk data follows */
136 } __packed;
137 
138 #define	UATH_RX_DUMMYSIZE		4
139 
140 /*
141  * Message format for a WDCMSG_DATA_AVAIL message from Target to Host.
142  */
143 struct uath_rx_desc {
144 	uint32_t	len;		/* msg length including header */
145 	uint32_t	code;		/* WDCMSG_DATA_AVAIL */
146 	uint32_t	gennum;		/* generation number */
147 	uint32_t	status;		/* start of RECEIVE_INFO */
148 #define	UATH_STATUS_OK			0
149 #define	UATH_STATUS_STOP_IN_PROGRESS	1
150 #define	UATH_STATUS_CRC_ERR		2
151 #define	UATH_STATUS_PHY_ERR		3
152 #define	UATH_STATUS_DECRYPT_CRC_ERR	4
153 #define	UATH_STATUS_DECRYPT_MIC_ERR	5
154 #define	UATH_STATUS_DECOMP_ERR		6
155 #define	UATH_STATUS_KEY_ERR		7
156 #define	UATH_STATUS_ERR			8
157 	uint32_t	tstamp_low;	/* low-order 32-bits of rx timestamp */
158 	uint32_t	tstamp_high;	/* high-order 32-bits of rx timestamp */
159 	uint32_t	framelen;	/* frame length */
160 	uint32_t	rate;		/* rx rate code */
161 	uint32_t	antenna;
162 	int32_t		rssi;
163 	uint32_t	channel;
164 	uint32_t	phyerror;
165 	uint32_t	connix;		/* key table ix for bss traffic */
166 	uint32_t	decrypterror;
167 	uint32_t	keycachemiss;
168 	uint32_t	pad;		/* XXX? */
169 } __packed;
170 
171 struct uath_tx_desc {
172 	uint32_t	msglen;
173 	uint32_t	msgid;		/* msg id (supplied by host) */
174 	uint32_t	type;		/* opcode: WDMSG_SEND or WDCMSG_FLUSH */
175 	uint32_t	txqid;		/* tx queue id and flags */
176 #define	UATH_TXQID_MASK		0x0f
177 #define	UATH_TXQID_MINRATE	0x10	/* use min tx rate */
178 #define	UATH_TXQID_FF		0x20	/* content is fast frame */
179 	uint32_t	connid;		/* tx connection id */
180 #define UATH_ID_INVALID	0xffffffff	/* for sending prior to connection */
181 	uint32_t	flags;		/* non-zero if response desired */
182 #define UATH_TX_NOTIFY	(1 << 24)	/* f/w will send a UATH_NOTIF_TX */
183 	uint32_t	buflen;		/* payload length */
184 } __packed;
185 
186 struct uath_cmd_host_available {
187 	uint32_t	sw_ver_major;
188 	uint32_t	sw_ver_minor;
189 	uint32_t	sw_ver_patch;
190 	uint32_t	sw_ver_build;
191 } __packed;
192 #define	ATH_SW_VER_MAJOR	1
193 #define	ATH_SW_VER_MINOR	5
194 #define	ATH_SW_VER_PATCH	0
195 #define	ATH_SW_VER_BUILD	9999
196 
197 struct uath_cmd_bind {
198 	uint32_t	targethandle;
199 	uint32_t	hostapiversion;
200 } __packed;
201 
202 /* structure for command WDCMSG_RESET */
203 struct uath_cmd_reset {
204 	uint32_t	flags;		/* channel flags */
205 #define	UATH_CHAN_TURBO	0x0100
206 #define	UATH_CHAN_CCK	0x0200
207 #define	UATH_CHAN_OFDM	0x0400
208 #define	UATH_CHAN_2GHZ	0x1000
209 #define	UATH_CHAN_5GHZ	0x2000
210 	uint32_t	freq;		/* channel frequency */
211 	uint32_t	maxrdpower;
212 	uint32_t	cfgctl;
213 	uint32_t	twiceantennareduction;
214 	uint32_t	channelchange;
215 	uint32_t	keeprccontent;
216 } __packed;
217 
218 /* structure for commands UATH_CMD_READ_MAC and UATH_CMD_READ_EEPROM */
219 struct uath_read_mac {
220 	uint32_t	len;
221 	uint8_t		data[32];
222 } __packed;
223 
224 /* structure for command UATH_CMD_WRITE_MAC */
225 struct uath_write_mac {
226 	uint32_t	reg;
227 	uint32_t	len;
228 	uint8_t		data[32];
229 } __packed;
230 
231 /* structure for command UATH_CMD_STA_JOIN */
232 struct uath_cmd_join_bss {
233 	uint32_t	bssid;		/* NB: use zero */
234 	uint32_t	bssmac[2];	/* bssid mac address */
235 	uint32_t	bsstype;
236 	uint32_t	wlanmode;
237 	uint32_t	beaconinterval;
238 	uint32_t	dtiminterval;
239 	uint32_t	cfpinterval;
240 	uint32_t	atimwindow;
241 	uint32_t	defaultrateix;
242 	uint32_t	shortslottime11g;
243 	uint32_t	sleepduration;
244 	uint32_t	bmissthreshold;
245 	uint32_t	tcppowerlimit;
246 	uint32_t	quietduration;
247 	uint32_t	quietoffset;
248 	uint32_t	quietackctsallow;
249 	uint32_t	bssdefaultkey;	/* XXX? */
250 } __packed;
251 
252 struct uath_cmd_assoc_bss {
253 	uint32_t	bssid;
254 	uint32_t	associd;
255 } __packed;
256 
257 struct uath_cmd_start_bss {
258 	uint32_t	bssid;
259 } __packed;
260 
261 /* structure for command UATH_CMD_0C */
262 struct uath_cmd_0c {
263 	uint32_t	magic1;
264 	uint32_t	magic2;
265 	uint32_t	magic3;
266 } __packed;
267 
268 struct uath_cmd_ledsteady {		/* WDCMSG_SET_LED_STEADY */
269 	uint32_t	lednum;
270 #define UATH_LED_LINK		0
271 #define UATH_LED_ACTIVITY	1
272 	uint32_t	ledmode;
273 #define UATH_LED_OFF	0
274 #define UATH_LED_ON	1
275 } __packed;
276 
277 struct uath_cmd_ledblink {		/* WDCMSG_SET_LED_BLINK */
278 	uint32_t	lednum;
279 	uint32_t	ledmode;
280 	uint32_t	blinkrate;
281 	uint32_t	slowmode;
282 } __packed;
283 
284 struct uath_cmd_ledstate {		/* WDCMSG_SET_LED_STATE */
285 	uint32_t	connected;
286 } __packed;
287 
288 struct uath_connkey_rec {
289 	uint8_t		bssid[IEEE80211_ADDR_LEN];
290 	uint32_t	keyiv;
291 	uint32_t	extkeyiv;
292 	uint16_t	keyflags;
293 	uint16_t	keylen;
294 	uint16_t	keytype;	/* WEP, TKIP or AES */
295 	/* As far as I know, MIPS 4Kp is 32-bit processor  */
296 	uint32_t	priv;
297 	uint8_t		keyval[32];
298 	uint16_t	aes_keylen;
299 	uint8_t		aes_keyval[16];
300 	uint8_t		mic_txkeyval[8];
301 	uint8_t		mic_rxkeyval[8];
302 	int64_t		keyrsc[17];
303 	int32_t		keytsc[17];
304 	int32_t		keyexttsc[17];
305 } __packed;
306 
307 /* structure for command UATH_CMD_CRYPTO */
308 struct uath_cmd_crypto {
309 	uint32_t		keyidx;
310 #define UATH_DEFAULT_KEY	6
311 	uint32_t		xorkey;
312 	uint32_t		size;
313 	struct uath_connkey_rec	rec;
314 } __packed;
315 
316 struct uath_cmd_rateset {
317 	uint8_t		length;
318 #define UATH_MAX_NRATES	32
319 	uint8_t		set[UATH_MAX_NRATES];
320 };
321 
322 /* structure for command WDCMSG_SET_BASIC_RATE */
323 struct uath_cmd_rates {
324 	uint32_t	connid;
325 	uint32_t	keeprccontent;
326 	uint32_t	size;
327 	struct uath_cmd_rateset rateset;
328 } __packed;
329 
330 enum {
331 	WLAN_MODE_NONE = 0,
332 	WLAN_MODE_11b,
333 	WLAN_MODE_11a,
334 	WLAN_MODE_11g,
335 	WLAN_MODE_11a_TURBO,
336 	WLAN_MODE_11g_TURBO,
337 	WLAN_MODE_11a_TURBO_PRIME,
338 	WLAN_MODE_11g_TURBO_PRIME,
339 	WLAN_MODE_11a_XR,
340 	WLAN_MODE_11g_XR,
341 };
342 
343 struct uath_cmd_connection_attr {
344 	uint32_t	longpreambleonly;
345 	struct uath_cmd_rateset	rateset;
346 	uint32_t	wlanmode;
347 } __packed;
348 
349 /* structure for command WDCMSG_CREATE_CONNECTION */
350 struct uath_cmd_create_connection {
351 	uint32_t	connid;
352 	uint32_t	bssid;
353 	uint32_t	size;
354 	struct uath_cmd_connection_attr	connattr;
355 } __packed;
356 
357 struct uath_cmd_txq_setparams {		/* WDCMSG_SET_TX_QUEUE_PARAMS */
358 	uint32_t	qnum;
359 	uint32_t	aifs;
360 	uint32_t	logcwmin;
361 	uint32_t	logcwmax;
362 	uint32_t	bursttime;
363 	uint32_t	qflags;
364 } __packed;
365 
366 struct uath_cmd_txq_attr {
367 	uint32_t	priority;
368 	uint32_t	aifs;
369 	uint32_t	logcwmin;
370 	uint32_t	logcwmax;
371 	uint32_t	bursttime;
372 	uint32_t	mode;
373 	uint32_t	qflags;
374 } __packed;
375 
376 struct uath_cmd_txq_setup {		/* WDCMSG_SETUP_TX_QUEUE */
377 	uint32_t	qid;
378 	uint32_t	len;
379 	struct uath_cmd_txq_attr attr;
380 } __packed;
381 
382 struct uath_cmd_stoptxdma {		/* WDCMSG_STOP_TX_DMA */
383 	uint32_t	qnum;
384 	uint32_t	msec;
385 } __packed;
386 
387 /* structure for command UATH_CMD_31 */
388 struct uath_cmd_31 {
389 	uint32_t	magic1;
390 	uint32_t	magic2;
391 } __packed;
392 
393 struct uath_cmd_rx_filter {		/* WDCMSG_RX_FILTER */
394 	uint32_t	bits;
395 #define UATH_FILTER_RX_UCAST		0x00000001
396 #define UATH_FILTER_RX_MCAST		0x00000002
397 #define UATH_FILTER_RX_BCAST		0x00000004
398 #define UATH_FILTER_RX_CONTROL		0x00000008
399 #define UATH_FILTER_RX_BEACON		0x00000010	/* beacon frames */
400 #define UATH_FILTER_RX_PROM		0x00000020	/* promiscuous mode */
401 #define UATH_FILTER_RX_PHY_ERR		0x00000040	/* phy errors */
402 #define UATH_FILTER_RX_PHY_RADAR	0x00000080	/* radar phy errors */
403 #define UATH_FILTER_RX_XR_POOL		0x00000400	/* XR group polls */
404 #define UATH_FILTER_RX_PROBE_REQ	0x00000800
405 	uint32_t	op;
406 #define UATH_FILTER_OP_INIT		0x0
407 #define UATH_FILTER_OP_SET		0x1
408 #define UATH_FILTER_OP_CLEAR		0x2
409 #define UATH_FILTER_OP_TEMP		0x3
410 #define UATH_FILTER_OP_RESTORE		0x4
411 } __packed;
412 
413 struct uath_cmd_rx_mcast_filter {	/* WDCMSG_SET_RX_MCAST_FILTER */
414 	uint32_t	filter0;
415 	uint32_t	filter1;
416 } __packed;
417 
418 struct uath_cmd_set_associd {		/* WDCMSG_WRITE_ASSOCID */
419 	uint32_t	defaultrateix;
420 	uint32_t	associd;
421 	uint32_t	timoffset;
422 	uint32_t	turboprime;
423 	uint32_t	bssid[2];
424 } __packed;
425 
426 struct uath_cmd_set_stabeacon_timers {	/* WDCMSG_SET_STA_BEACON_TIMERS */
427 	uint32_t	nexttbtt;
428 	uint32_t	nextdtim;
429 	uint32_t	nextcfp;
430 	uint32_t	beaconperiod;
431 	uint32_t	dtimperiod;
432 	uint32_t	cfpperiod;
433 	uint32_t	cfpduration;
434 	uint32_t	sleepduration;
435 	uint32_t	bsmissthreshold;
436 } __packed;
437 
438 enum {
439 	CFG_NONE,			/* Sentinal to indicate "no config" */
440 	CFG_REG_DOMAIN,			/* Regulatory Domain */
441 	CFG_RATE_CONTROL_ENABLE,
442 	CFG_DEF_XMIT_DATA_RATE,		/* NB: if rate control is not enabled */
443 	CFG_HW_TX_RETRIES,
444 	CFG_SW_TX_RETRIES,
445 	CFG_SLOW_CLOCK_ENABLE,
446 	CFG_COMP_PROC,
447 	CFG_USER_RTS_THRESHOLD,
448 	CFG_XR2NORM_RATE_THRESHOLD,
449 	CFG_XRMODE_SWITCH_COUNT,
450 	CFG_PROTECTION_TYPE,
451 	CFG_BURST_SEQ_THRESHOLD,
452 	CFG_ABOLT,
453 	CFG_IQ_LOG_COUNT_MAX,
454 	CFG_MODE_CTS,
455 	CFG_WME_ENABLED,
456 	CFG_GPRS_CBR_PERIOD,
457 	CFG_SERVICE_TYPE,
458 	/* MAC Address to use.  Overrides EEPROM */
459 	CFG_MAC_ADDR,
460 	CFG_DEBUG_EAR,
461 	CFG_INIT_REGS,
462 	/* An ID for use in error & debug messages */
463 	CFG_DEBUG_ID,
464 	CFG_COMP_WIN_SZ,
465 	CFG_DIVERSITY_CTL,
466 	CFG_TP_SCALE,
467 	CFG_TPC_HALF_DBM5,
468 	CFG_TPC_HALF_DBM2,
469 	CFG_OVERRD_TX_POWER,
470 	CFG_USE_32KHZ_CLOCK,
471 	CFG_GMODE_PROTECTION,
472 	CFG_GMODE_PROTECT_RATE_INDEX,
473 	CFG_GMODE_NON_ERP_PREAMBLE,
474 	CFG_WDC_TRANSPORT_CHUNK_SIZE,
475 };
476 
477 enum {
478 	/* Sentinal to indicate "no capability" */
479 	CAP_NONE,
480 	CAP_ALL,			/* ALL capabilities */
481 	CAP_TARGET_VERSION,
482 	CAP_TARGET_REVISION,
483 	CAP_MAC_VERSION,
484 	CAP_MAC_REVISION,
485 	CAP_PHY_REVISION,
486 	CAP_ANALOG_5GHz_REVISION,
487 	CAP_ANALOG_2GHz_REVISION,
488 	/* Target supports WDC message debug features */
489 	CAP_DEBUG_WDCMSG_SUPPORT,
490 
491 	CAP_REG_DOMAIN,
492 	CAP_COUNTRY_CODE,
493 	CAP_REG_CAP_BITS,
494 
495 	CAP_WIRELESS_MODES,
496 	CAP_CHAN_SPREAD_SUPPORT,
497 	CAP_SLEEP_AFTER_BEACON_BROKEN,
498 	CAP_COMPRESS_SUPPORT,
499 	CAP_BURST_SUPPORT,
500 	CAP_FAST_FRAMES_SUPPORT,
501 	CAP_CHAP_TUNING_SUPPORT,
502 	CAP_TURBOG_SUPPORT,
503 	CAP_TURBO_PRIME_SUPPORT,
504 	CAP_DEVICE_TYPE,
505 	CAP_XR_SUPPORT,
506 	CAP_WME_SUPPORT,
507 	CAP_TOTAL_QUEUES,
508 	CAP_CONNECTION_ID_MAX,		/* Should absorb CAP_KEY_CACHE_SIZE */
509 
510 	CAP_LOW_5GHZ_CHAN,
511 	CAP_HIGH_5GHZ_CHAN,
512 	CAP_LOW_2GHZ_CHAN,
513 	CAP_HIGH_2GHZ_CHAN,
514 
515 	CAP_MIC_AES_CCM,
516 	CAP_MIC_CKIP,
517 	CAP_MIC_TKIP,
518 	CAP_MIC_TKIP_WME,
519 	CAP_CIPHER_AES_CCM,
520 	CAP_CIPHER_CKIP,
521 	CAP_CIPHER_TKIP,
522 
523 	CAP_TWICE_ANTENNAGAIN_5G,
524 	CAP_TWICE_ANTENNAGAIN_2G,
525 };
526 
527 enum {
528 	ST_NONE,                    /* Sentinal to indicate "no status" */
529 	ST_ALL,
530 	ST_SERVICE_TYPE,
531 	ST_WLAN_MODE,
532 	ST_FREQ,
533 	ST_BAND,
534 	ST_LAST_RSSI,
535 	ST_PS_FRAMES_DROPPED,
536 	ST_CACHED_DEF_ANT,
537 	ST_COUNT_OTHER_RX_ANT,
538 	ST_USE_FAST_DIVERSITY,
539 	ST_MAC_ADDR,
540 	ST_RX_GENERATION_NUM,
541 	ST_TX_QUEUE_DEPTH,
542 	ST_SERIAL_NUMBER,
543 	ST_WDC_TRANSPORT_CHUNK_SIZE,
544 };
545 
546 enum {
547 	BSS_ATTR_BEACON_INTERVAL,
548 	BSS_ATTR_DTIM_INTERVAL,
549 	BSS_ATTR_CFP_INTERVAL,
550 	BSS_ATTR_CFP_MAX_DURATION,
551 	BSS_ATTR_ATIM_WINDOW,
552 	BSS_ATTR_DEFAULT_RATE_INDEX,
553 	BSS_ATTR_SHORT_SLOT_TIME_11g,
554 	BSS_ATTR_SLEEP_DURATION,
555 	BSS_ATTR_BMISS_THRESHOLD,
556 	BSS_ATTR_TPC_POWER_LIMIT,
557 	BSS_ATTR_BSS_KEY_UPDATE,
558 };
559 
560 struct uath_cmd_update_bss_attribute {
561 	uint32_t	bssid;
562 	uint32_t	attribute;	/* BSS_ATTR_BEACON_INTERVAL, et al. */
563 	uint32_t	cfgsize;	/* should be zero 0 */
564 	uint32_t	cfgdata;
565 };
566 
567 struct uath_cmd_update_bss_attribute_key {
568 	uint32_t	bssid;
569 	uint32_t	attribute;	/* BSS_ATTR_BSS_KEY_UPDATE */
570 	uint32_t	cfgsize;	/* size of remaining data */
571 	uint32_t	bsskeyix;
572 	uint32_t	isdefaultkey;
573 	uint32_t	keyiv;		/* IV generation control */
574 	uint32_t	extkeyiv;	/* extended IV for TKIP & CCM */
575 	uint32_t	keyflags;
576 	uint32_t	keytype;
577 	uint32_t	initvalue;	/* XXX */
578 	uint32_t	keyval[4];
579 	uint32_t	mictxkeyval[2];
580 	uint32_t	micrxkeyval[2];
581 	uint32_t	keyrsc[2];
582 };
583 
584 enum {
585 	TARGET_DEVICE_AWAKE,
586 	TARGET_DEVICE_SLEEP,
587 	TARGET_DEVICE_PWRDN,
588 	TARGET_DEVICE_PWRSAVE,
589 	TARGET_DEVICE_SUSPEND,
590 	TARGET_DEVICE_RESUME,
591 };
592 
593 #define UATH_MAX_TXBUFSZ						\
594 	(sizeof(struct uath_chunk) + sizeof(struct uath_tx_desc) +	\
595 	IEEE80211_MAX_LEN)
596 
597 /*
598  * it's not easy to measure how the chunk is passed into the host if the target
599  * passed the multi-chunks so just we check a minimal size we can imagine.
600  */
601 #define UATH_MIN_RXBUFSZ	(sizeof(struct uath_chunk))
602