]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/dev/usb/wlan/if_uathreg.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / dev / usb / wlan / if_uathreg.h
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))