2 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
3 * Use is subject to license terms.
8 * Damien Bergamini <damien.bergamini@free.fr>
9 * Copyright (c) 2006 Sam Leffler, Errno Consulting
11 * Permission to use, copy, modify, and distribute this software for any
12 * purpose with or without fee is hereby granted, provided that the above
13 * copyright notice and this permission notice appear in all copies.
15 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
16 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
18 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
19 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
20 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
21 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
32 /* Location in the endpoint descriptor tree used by the device */
33 #define UATH_CONFIG_NO 1
34 #define UATH_IFACE_INDEX 0
35 #define UATH_ALT_IF_INDEX 0
37 /* all fields are big endian */
41 #define UATH_WRITE_BLOCK (1 << 4)
43 #define UATH_MAX_FWBLOCK_SIZE 2048
51 #define UATH_MAX_CMDSZ 512
54 * Messages are passed in Target Endianness. All fixed-size
55 * fields of a WDS Control Message are treated as 32-bit
56 * values and Control Msgs are guaranteed to be 32-bit aligned.
58 * The format of a WDS Control Message is as follows:
59 * Message Length 32 bits
60 * Message Opcode 32 bits
66 * A variable-length parameter, or a parmeter that is larger than
67 * 32 bits is passed as <length, data> pair, where length is a
68 * 32-bit quantity and data is padded to 32 bits.
72 uint32_t len
; /* msg length including header */
73 uint32_t code
; /* operation code */
74 /* NB: these are defined for rev 1.5 firmware; rev 1.6 is different */
75 /* messages from Host -> Target */
76 #define WDCMSG_HOST_AVAILABLE 0x01
77 #define WDCMSG_BIND 0x02
78 #define WDCMSG_TARGET_RESET 0x03
79 #define WDCMSG_TARGET_GET_CAPABILITY 0x04
80 #define WDCMSG_TARGET_SET_CONFIG 0x05
81 #define WDCMSG_TARGET_GET_STATUS 0x06
82 #define WDCMSG_TARGET_GET_STATS 0x07
83 #define WDCMSG_TARGET_START 0x08
84 #define WDCMSG_TARGET_STOP 0x09
85 #define WDCMSG_TARGET_ENABLE 0x0a
86 #define WDCMSG_TARGET_DISABLE 0x0b
87 #define WDCMSG_CREATE_CONNECTION 0x0c
88 #define WDCMSG_UPDATE_CONNECT_ATTR 0x0d
89 #define WDCMSG_DELETE_CONNECT 0x0e
90 #define WDCMSG_SEND 0x0f
91 #define WDCMSG_FLUSH 0x10
92 /* messages from Target -> Host */
93 #define WDCMSG_STATS_UPDATE 0x11
94 #define WDCMSG_BMISS 0x12
95 #define WDCMSG_DEVICE_AVAIL 0x13
96 #define WDCMSG_SEND_COMPLETE 0x14
97 #define WDCMSG_DATA_AVAIL 0x15
98 #define WDCMSG_SET_PWR_MODE 0x16
99 #define WDCMSG_BMISS_ACK 0x17
100 #define WDCMSG_SET_LED_STEADY 0x18
101 #define WDCMSG_SET_LED_BLINK 0x19
103 #define WDCMSG_SETUP_BEACON_DESC 0x1a
104 #define WDCMSG_BEACON_INIT 0x1b
105 #define WDCMSG_RESET_KEY_CACHE 0x1c
106 #define WDCMSG_RESET_KEY_CACHE_ENTRY 0x1d
107 #define WDCMSG_SET_KEY_CACHE_ENTRY 0x1e
108 #define WDCMSG_SET_DECOMP_MASK 0x1f
109 #define WDCMSG_SET_REGULATORY_DOMAIN 0x20
110 #define WDCMSG_SET_LED_STATE 0x21
111 #define WDCMSG_WRITE_ASSOCID 0x22
112 #define WDCMSG_SET_STA_BEACON_TIMERS 0x23
113 #define WDCMSG_GET_TSF 0x24
114 #define WDCMSG_RESET_TSF 0x25
115 #define WDCMSG_SET_ADHOC_MODE 0x26
116 #define WDCMSG_SET_BASIC_RATE 0x27
117 #define WDCMSG_MIB_CONTROL 0x28
118 #define WDCMSG_GET_CHANNEL_DATA 0x29
119 #define WDCMSG_GET_CUR_RSSI 0x2a
120 #define WDCMSG_SET_ANTENNA_SWITCH 0x2b
121 #define WDCMSG_USE_SHORT_SLOT_TIME 0x2f
122 #define WDCMSG_SET_POWER_MODE 0x30
123 #define WDCMSG_SETUP_PSPOLL_DESC 0x31
124 #define WDCMSG_SET_RX_MULTICAST_FILTER 0x32
125 #define WDCMSG_RX_FILTER 0x33
126 #define WDCMSG_PER_CALIBRATION 0x34
127 #define WDCMSG_RESET 0x35
128 #define WDCMSG_DISABLE 0x36
129 #define WDCMSG_PHY_DISABLE 0x37
130 #define WDCMSG_SET_TX_POWER_LIMIT 0x38
131 #define WDCMSG_SET_TX_QUEUE_PARAMS 0x39
132 #define WDCMSG_SETUP_TX_QUEUE 0x3a
133 #define WDCMSG_RELEASE_TX_QUEUE 0x3b
134 #define WDCMSG_SET_DEFAULT_KEY 0x43
135 uint32_t msgid
; /* msg id (supplied by host) */
136 uint32_t magic
; /* response desired/target status */
137 uint32_t debug
[4]; /* debug data area */
138 /* msg data follows */
142 #define UATH_RX_DUMMYSIZE 4
146 uint8_t seqnum
; /* sequence number for ordering */
148 #define UATH_CFLAGS_FINAL 0x01 /* final chunk of a msg */
149 #define UATH_CFLAGS_RXMSG 0x02 /* chunk contains rx completion */
150 #define UATH_CFLAGS_DEBUG 0x04 /* for debugging */
151 uint16_t length
; /* chunk size in bytes */
152 /* chunk data follows */
157 * Message format for a WDCMSG_DATA_AVAIL message from Target to Host.
160 struct uath_rx_desc
{
161 uint32_t len
; /* msg length including header */
162 uint32_t code
; /* WDCMSG_DATA_AVAIL */
163 uint32_t gennum
; /* generation number */
164 uint32_t status
; /* start of RECEIVE_INFO */
165 #define UATH_STATUS_OK 0
166 #define UATH_STATUS_STOP_IN_PROGRESS 1
167 #define UATH_STATUS_CRC_ERR 2
168 #define UATH_STATUS_PHY_ERR 3
169 #define UATH_STATUS_DECRYPT_CRC_ERR 4
170 #define UATH_STATUS_DECRYPT_MIC_ERR 5
171 #define UATH_STATUS_DECOMP_ERR 6
172 #define UATH_STATUS_KEY_ERR 7
173 #define UATH_STATUS_ERR 8
174 uint32_t tstamp_low
; /* low-order 32-bits of rx timestamp */
175 uint32_t tstamp_high
; /* high-order 32-bits of rx timestamp */
176 uint32_t framelen
; /* frame length */
177 uint32_t rate
; /* rx rate code */
182 uint32_t connix
; /* key table ix for bss traffic */
183 uint32_t decrypterror
;
184 uint32_t keycachemiss
;
185 uint32_t pad
; /* XXX? */
190 struct uath_tx_desc
{
192 uint32_t msgid
; /* msg id (supplied by host) */
193 uint32_t type
; /* opcode: WDMSG_SEND or WDCMSG_FLUSH */
194 uint32_t txqid
; /* tx queue id and flags */
195 #define UATH_TXQID_MASK 0x0f
196 #define UATH_TXQID_MINRATE 0x10 /* use min tx rate */
197 #define UATH_TXQID_FF 0x20 /* content is fast frame */
198 uint32_t connid
; /* tx connection id */
199 #define UATH_ID_INVALID 0xffffffff /* for sending prior to connection */
200 uint32_t flags
; /* non-zero if response desired */
201 #define UATH_TX_NOTIFY (1 << 24) /* f/w will send a UATH_NOTIF_TX */
202 uint32_t buflen
; /* payload length */
207 struct uath_cmd_host_available
{
208 uint32_t sw_ver_major
;
209 uint32_t sw_ver_minor
;
210 uint32_t sw_ver_patch
;
211 uint32_t sw_ver_build
;
215 #define ATH_SW_VER_MAJOR 1
216 #define ATH_SW_VER_MINOR 5
217 #define ATH_SW_VER_PATCH 0
218 #define ATH_SW_VER_BUILD 9999
221 /* structure for command UATH_CMD_WRITE_MAC */
223 struct uath_write_mac
{
231 struct uath_cmd_ledsteady
{ /* WDCMSG_SET_LED_STEADY */
233 #define UATH_LED_LINK 0
234 #define UATH_LED_ACTIVITY 1
236 #define UATH_LED_OFF 0
237 #define UATH_LED_ON 1
242 struct uath_cmd_ledblink
{ /* WDCMSG_SET_LED_BLINK */
250 /* structure for command WDCMSG_RESET */
252 struct uath_cmd_reset
{
253 uint32_t flags
; /* channel flags */
254 #define UATH_CHAN_TURBO 0x0100
255 #define UATH_CHAN_CCK 0x0200
256 #define UATH_CHAN_OFDM 0x0400
257 #define UATH_CHAN_2GHZ 0x1000
258 #define UATH_CHAN_5GHZ 0x2000
259 uint32_t freq
; /* channel frequency */
262 uint32_t twiceantennareduction
;
263 uint32_t channelchange
;
264 uint32_t keeprccontent
;
269 struct uath_cmd_rateset
{
271 #define UATH_MAX_NRATES 32
272 uint8_t set
[UATH_MAX_NRATES
];
277 /* structure for command WDCMSG_SET_BASIC_RATE */
278 struct uath_cmd_rates
{
280 uint32_t keeprccontent
;
282 struct uath_cmd_rateset rateset
;
293 WLAN_MODE_11a_TURBO_PRIME
,
294 WLAN_MODE_11g_TURBO_PRIME
,
300 struct uath_cmd_connection_attr
{
301 uint32_t longpreambleonly
;
302 struct uath_cmd_rateset rateset
;
308 /* structure for command WDCMSG_CREATE_CONNECTION */
309 struct uath_cmd_create_connection
{
313 struct uath_cmd_connection_attr connattr
;
318 struct uath_cmd_txq_attr
{
330 struct uath_cmd_txq_setup
{ /* WDCMSG_SETUP_TX_QUEUE */
333 struct uath_cmd_txq_attr attr
;
338 struct uath_cmd_rx_filter
{ /* WDCMSG_RX_FILTER */
340 #define UATH_FILTER_RX_UCAST 0x00000001
341 #define UATH_FILTER_RX_MCAST 0x00000002
342 #define UATH_FILTER_RX_BCAST 0x00000004
343 #define UATH_FILTER_RX_CONTROL 0x00000008
344 #define UATH_FILTER_RX_BEACON 0x00000010 /* beacon frames */
345 #define UATH_FILTER_RX_PROM 0x00000020 /* promiscuous mode */
346 #define UATH_FILTER_RX_PHY_ERR 0x00000040 /* phy errors */
347 #define UATH_FILTER_RX_PHY_RADAR 0x00000080 /* radar phy errors */
348 #define UATH_FILTER_RX_XR_POOL 0x00000400 /* XR group polls */
349 #define UATH_FILTER_RX_PROBE_REQ 0x00000800
351 #define UATH_FILTER_OP_INIT 0x0
352 #define UATH_FILTER_OP_SET 0x1
353 #define UATH_FILTER_OP_CLEAR 0x2
354 #define UATH_FILTER_OP_TEMP 0x3
355 #define UATH_FILTER_OP_RESTORE 0x4
360 struct uath_cmd_set_associd
{ /* WDCMSG_WRITE_ASSOCID */
361 uint32_t defaultrateix
;
370 CFG_NONE
, /* Sentinal to indicate "no config" */
371 CFG_REG_DOMAIN
, /* Regulatory Domain */
372 CFG_RATE_CONTROL_ENABLE
,
373 CFG_DEF_XMIT_DATA_RATE
, /* NB: if rate control is not enabled */
376 CFG_SLOW_CLOCK_ENABLE
,
378 CFG_USER_RTS_THRESHOLD
,
379 CFG_XR2NORM_RATE_THRESHOLD
,
380 CFG_XRMODE_SWITCH_COUNT
,
382 CFG_BURST_SEQ_THRESHOLD
,
384 CFG_IQ_LOG_COUNT_MAX
,
389 /* MAC Address to use. Overrides EEPROM */
393 /* An ID for use in error & debug messages */
402 CFG_GMODE_PROTECTION
,
403 CFG_GMODE_PROTECT_RATE_INDEX
,
404 CFG_GMODE_NON_ERP_PREAMBLE
,
405 CFG_WDC_TRANSPORT_CHUNK_SIZE
,
409 /* Sentinal to indicate "no capability" */
411 CAP_ALL
, /* ALL capabilities */
417 CAP_ANALOG_5GHz_REVISION
,
418 CAP_ANALOG_2GHz_REVISION
,
419 /* Target supports WDC message debug features */
420 CAP_DEBUG_WDCMSG_SUPPORT
,
427 CAP_CHAN_SPREAD_SUPPORT
,
428 CAP_SLEEP_AFTER_BEACON_BROKEN
,
429 CAP_COMPRESS_SUPPORT
,
431 CAP_FAST_FRAMES_SUPPORT
,
432 CAP_CHAP_TUNING_SUPPORT
,
434 CAP_TURBO_PRIME_SUPPORT
,
439 CAP_CONNECTION_ID_MAX
, /* Should absorb CAP_KEY_CACHE_SIZE */
454 CAP_TWICE_ANTENNAGAIN_5G
,
455 CAP_TWICE_ANTENNAGAIN_2G
,
459 ST_NONE
, /* Sentinal to indicate "no status" */
466 ST_PS_FRAMES_DROPPED
,
468 ST_COUNT_OTHER_RX_ANT
,
469 ST_USE_FAST_DIVERSITY
,
471 ST_RX_GENERATION_NUM
,
474 ST_WDC_TRANSPORT_CHUNK_SIZE
,
481 TARGET_DEVICE_PWRSAVE
,
482 TARGET_DEVICE_SUSPEND
,
483 TARGET_DEVICE_RESUME
,
486 #define UATH_MAX_TXBUFSZ \
487 (sizeof (struct uath_chunk) + sizeof (struct uath_tx_desc) + \
491 * it's not easy to measure how the chunk is passed into the host if the target
492 * passed the multi-chunks so just we check a minimal size we can imagine.
494 #define UATH_MIN_RXBUFSZ (sizeof (struct uath_chunk))
496 #define USB_VENDOR_ACCTON 0x083a /* Accton Technology */
497 #define USB_VENDOR_ATHEROS 0x168c /* Atheros Communications */
498 #define USB_VENDOR_ATHEROS2 0x0cf3 /* Atheros Communications */
499 #define USB_VENDOR_CONCEPTRONIC 0x0d8e /* Conceptronic */
500 #define USB_VENDOR_DLINK 0x2001 /* D-Link */
501 #define USB_VENDOR_GIGASET 0x1690 /* Gigaset */
502 #define USB_VENDOR_GLOBALSUN 0x16ab /* Global Sun Technology */
503 #define USB_VENDOR_IODATA 0x04bb /* I/O Data */
504 #define USB_VENDOR_MELCO 0x0411 /* Melco */
505 #define USB_VENDOR_NETGEAR 0x0846 /* BayNETGEAR */
506 #define USB_VENDOR_NETGEAR3 0x1385 /* Netgear */
507 #define USB_VENDOR_PHILIPS 0x0471 /* Philips */
508 #define USB_VENDOR_UMEDIA 0x157e /* U-MEDIA Communications */
509 #define USB_VENDOR_WISTRONNEWEB 0x1435 /* Wistron NeWeb */
510 #define USB_VENDOR_ZCOM 0x0cde /* Z-Com */
512 #define USB_PRODUCT_ACCTON_SMCWUSBTG2 0x4506 /* SMCWUSBT-G2 */
513 #define USB_PRODUCT_ACCTON_SMCWUSBTG2_NF 0x4507 /* SMCWUSBT-G2 */
514 #define USB_PRODUCT_ATHEROS_AR5523 0x0001 /* AR5523 */
515 #define USB_PRODUCT_ATHEROS_AR5523_NF 0x0002 /* AR5523 */
516 #define USB_PRODUCT_ATHEROS2_AR5523_1 0x0003 /* AR5523 */
517 #define USB_PRODUCT_ATHEROS2_AR5523_1_NF 0x0002 /* AR5523 */
518 #define USB_PRODUCT_ATHEROS2_AR5523_2 0x0005 /* AR5523 */
519 #define USB_PRODUCT_ATHEROS2_AR5523_2_NF 0x0004 /* AR5523 */
520 #define USB_PRODUCT_ATHEROS2_AR5523_3 0x0007 /* AR5523 */
521 #define USB_PRODUCT_ATHEROS2_AR5523_3_NF 0x0006 /* AR5523 */
522 #define USB_PRODUCT_CONCEPTRONIC_AR5523_1 0x7801 /* AR5523 */
523 #define USB_PRODUCT_CONCEPTRONIC_AR5523_1_NF 0x7802 /* AR5523 */
524 #define USB_PRODUCT_CONCEPTRONIC_AR5523_2 0x7811 /* AR5523 */
525 #define USB_PRODUCT_CONCEPTRONIC_AR5523_2_NF 0x7812 /* AR5523 */
526 #define USB_PRODUCT_DLINK_DWLAG122 0x3a04 /* DWL-AG122 */
527 #define USB_PRODUCT_DLINK_DWLAG122_NF 0x3a05 /* DWL-AG122 */
528 #define USB_PRODUCT_DLINK_DWLAG132 0x3a00 /* DWL-AG132 */
529 #define USB_PRODUCT_DLINK_DWLAG132_NF 0x3a01 /* DWL-AG132 */
530 #define USB_PRODUCT_DLINK_DWLG132 0x3a02 /* DWL-G132 */
531 #define USB_PRODUCT_DLINK_DWLG132_NF 0x3a03 /* DWL-G132 */
532 #define USB_PRODUCT_GIGASET_AR5523 0x0712 /* AR5523 */
533 #define USB_PRODUCT_GIGASET_AR5523_NF 0x0713 /* AR5523 */
534 #define USB_PRODUCT_GIGASET_SMCWUSBTG 0x0710 /* SMCWUSBT-G */
535 #define USB_PRODUCT_GIGASET_SMCWUSBTG_NF 0x0711 /* SMCWUSBT-G */
536 #define USB_PRODUCT_GLOBALSUN_AR5523_1 0x7801 /* AR5523 */
537 #define USB_PRODUCT_GLOBALSUN_AR5523_1_NF 0x7802 /* AR5523 */
538 #define USB_PRODUCT_GLOBALSUN_AR5523_2 0x7811 /* AR5523 */
539 #define USB_PRODUCT_GLOBALSUN_AR5523_2_NF 0x7812 /* AR5523 */
540 #define USB_PRODUCT_IODATA_USBWNG54US 0x0928 /* USB WN-G54/US */
541 #define USB_PRODUCT_IODATA_USBWNG54US_NF 0x0929 /* USB WN-G54/US */
542 #define USB_PRODUCT_MELCO_WLIU2KAMG54 0x0091 /* WLI-U2-KAMG54 */
543 #define USB_PRODUCT_MELCO_WLIU2KAMG54_NF 0x0092 /* WLI-U2-KAMG54 */
544 #define USB_PRODUCT_NETGEAR_WG111U 0x4300 /* WG111U */
545 #define USB_PRODUCT_NETGEAR_WG111U_NF 0x4301 /* WG111U */
546 #define USB_PRODUCT_NETGEAR3_WG111T 0x4252 /* WG111T */
547 #define USB_PRODUCT_NETGEAR3_WG111T_NF 0x4251 /* WG111T */
548 #define USB_PRODUCT_NETGEAR3_WPN111 0x5f00 /* WPN111 */
549 #define USB_PRODUCT_NETGEAR3_WPN111_NF 0x5f01 /* WPN111 */
550 #define USB_PRODUCT_PHILIPS_SNU6500 0x1232 /* SNU6500 */
551 #define USB_PRODUCT_PHILIPS_SNU6500_NF 0x1233 /* SNU6500 */
552 #define USB_PRODUCT_UMEDIA_AR5523_2 0x3205 /* AR5523 */
553 #define USB_PRODUCT_UMEDIA_AR5523_2_NF 0x3206 /* AR5523 */
554 #define USB_PRODUCT_UMEDIA_TEW444UBEU 0x3006 /* TEW-444UB EU */
555 #define USB_PRODUCT_UMEDIA_TEW444UBEU_NF 0x3007 /* TEW-444UB EU */
556 #define USB_PRODUCT_WISTRONNEWEB_AR5523_1 0x0826 /* AR5523 */
557 #define USB_PRODUCT_WISTRONNEWEB_AR5523_1_NF 0x0827 /* AR5523 */
558 #define USB_PRODUCT_WISTRONNEWEB_AR5523_2 0x082a /* AR5523 */
559 #define USB_PRODUCT_WISTRONNEWEB_AR5523_2_NF 0x0829 /* AR5523 */
560 #define USB_PRODUCT_ZCOM_AR5523 0x0012 /* AR5523 */
561 #define USB_PRODUCT_ZCOM_AR5523_NF 0x0013 /* AR5523 */
567 #endif /* _UATH_REG_H */