xref: /openbsd-src/sys/dev/usb/if_uathreg.h (revision 0d8d0da2c4a96aee67b6d27a493bc807fa52399a)
1*0d8d0da2Sdamien /*	$OpenBSD: if_uathreg.h,v 1.2 2006/09/18 16:34:23 damien Exp $	*/
217849d02Sdamien 
317849d02Sdamien /*-
417849d02Sdamien  * Copyright (c) 2006
517849d02Sdamien  *	Damien Bergamini <damien.bergamini@free.fr>
617849d02Sdamien  *
717849d02Sdamien  * Permission to use, copy, modify, and distribute this software for any
817849d02Sdamien  * purpose with or without fee is hereby granted, provided that the above
917849d02Sdamien  * copyright notice and this permission notice appear in all copies.
1017849d02Sdamien  *
1117849d02Sdamien  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
1217849d02Sdamien  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
1317849d02Sdamien  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
1417849d02Sdamien  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
1517849d02Sdamien  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
1617849d02Sdamien  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1717849d02Sdamien  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
1817849d02Sdamien  */
1917849d02Sdamien 
2017849d02Sdamien #define UATH_CONFIG_NO		1
2117849d02Sdamien #define UATH_IFACE_INDEX	0
2217849d02Sdamien 
2317849d02Sdamien /* all fields are big endian */
2417849d02Sdamien struct uath_fwblock {
2517849d02Sdamien 	uint32_t	flags;
2617849d02Sdamien #define UATH_WRITE_BLOCK	(1 << 4)
2717849d02Sdamien 
2817849d02Sdamien 	uint32_t	len;
2917849d02Sdamien #define UATH_MAX_FWBLOCK_SIZE	2048
3017849d02Sdamien 
3117849d02Sdamien 	uint32_t	total;
3217849d02Sdamien 	uint32_t	remain;
3317849d02Sdamien 	uint32_t	rxtotal;
3417849d02Sdamien 	uint32_t	pad[123];
3517849d02Sdamien } __packed;
3617849d02Sdamien 
3717849d02Sdamien #define UATH_MAX_RXCMDSZ	512
3817849d02Sdamien #define UATH_MAX_TXCMDSZ	512
3917849d02Sdamien 
4017849d02Sdamien struct uath_cmd_hdr {
4117849d02Sdamien 	uint32_t	len;
4217849d02Sdamien 	uint32_t	code;
4317849d02Sdamien #define UATH_CMD_SETUP		0x01
4417849d02Sdamien #define UATH_CMD_02		0x02
4517849d02Sdamien #define UATH_CMD_READ_MAC	0x03
4617849d02Sdamien #define UATH_CMD_WRITE_MAC	0x04
4717849d02Sdamien #define UATH_CMD_READ_EEPROM	0x05
4817849d02Sdamien #define UATH_CMD_STATS		0x06
4917849d02Sdamien #define UATH_CMD_07		0x07
5017849d02Sdamien #define UATH_CMD_SHUTDOWN	0x08
5117849d02Sdamien #define UATH_CMD_0B		0x0b
5217849d02Sdamien #define UATH_CMD_0C		0x0c
5317849d02Sdamien #define UATH_CMD_0F		0x0f
5417849d02Sdamien #define UATH_NOTIF_STATS	0x10
5517849d02Sdamien #define UATH_NOTIF_READY	0x12
5617849d02Sdamien #define UATH_NOTIF_TX		0x13
5717849d02Sdamien #define UATH_CMD_15		0x15
5817849d02Sdamien #define UATH_CMD_SET_LED	0x17
5917849d02Sdamien #define UATH_CMD_SET_XLED	0x18
6017849d02Sdamien #define UATH_CMD_1B		0x1b
6117849d02Sdamien #define UATH_CMD_1E		0x1e
6217849d02Sdamien #define UATH_CMD_CRYPTO		0x1d
6317849d02Sdamien #define UATH_CMD_SET_STATE	0x20
6417849d02Sdamien #define UATH_CMD_SET_BSSID	0x21
6517849d02Sdamien #define UATH_CMD_24		0x24
6617849d02Sdamien #define UATH_CMD_SET_RATES	0x26
6717849d02Sdamien #define UATH_CMD_27		0x27
6817849d02Sdamien #define UATH_CMD_2E		0x2e
6917849d02Sdamien #define UATH_CMD_31		0x31
7017849d02Sdamien #define UATH_CMD_SET_FILTER	0x32
7117849d02Sdamien #define UATH_CMD_SET_CHAN	0x34
7217849d02Sdamien #define UATH_CMD_RESET		0x35
7317849d02Sdamien #define UATH_CMD_SET_QUEUE	0x3a
7417849d02Sdamien #define UATH_CMD_RESET_QUEUE	0x3b
7517849d02Sdamien 
7617849d02Sdamien 	uint32_t	priv;	/* driver private data */
7717849d02Sdamien 	uint32_t	magic;
7817849d02Sdamien 	uint32_t	reserved2[4];
7917849d02Sdamien } __packed;
8017849d02Sdamien 
8117849d02Sdamien struct uath_rx_desc {
8217849d02Sdamien 	uint32_t	len;
8317849d02Sdamien 	uint32_t	reserved1[8];
8417849d02Sdamien 	uint32_t	rssi;
8517849d02Sdamien 	uint32_t	freq;
8617849d02Sdamien 	uint32_t	reserved2[5];
8717849d02Sdamien } __packed;
8817849d02Sdamien 
8917849d02Sdamien #define UATH_MAKECTL(qid, len)	htobe32((qid) << 16 | (len))
9017849d02Sdamien 
9117849d02Sdamien struct uath_tx_desc {
9217849d02Sdamien 	uint32_t	len;
9317849d02Sdamien 	uint32_t	priv;	/* driver private data */
9417849d02Sdamien 	uint32_t	type;
9517849d02Sdamien #define UATH_TX_DATA	0xe
9617849d02Sdamien #define UATH_TX_NULL	0xf
9717849d02Sdamien 
9817849d02Sdamien 	uint32_t	magic;
9917849d02Sdamien 	uint32_t	dest;
10017849d02Sdamien #define UATH_ID_BSS		2
10117849d02Sdamien #define UATH_ID_BROADCAST	0xffffffff
10217849d02Sdamien 
10317849d02Sdamien 	uint32_t	flags;
10417849d02Sdamien #define UATH_TX_NOTIFY	(1 << 24)	/* f/w will send a UATH_NOTIF_TX */
10517849d02Sdamien 
10617849d02Sdamien 	uint32_t	paylen;
10717849d02Sdamien } __packed;
10817849d02Sdamien 
10917849d02Sdamien /* structure for command UATH_CMD_SETUP */
11017849d02Sdamien struct uath_cmd_setup {
11117849d02Sdamien 	uint32_t	magic1;
11217849d02Sdamien 	uint32_t	magic2;
11317849d02Sdamien 	uint32_t	magic3;
11417849d02Sdamien 	uint32_t	magic4;
11517849d02Sdamien } __packed;
11617849d02Sdamien 
11717849d02Sdamien /* structure for commands UATH_CMD_READ_MAC and UATH_CMD_READ_EEPROM */
11817849d02Sdamien struct uath_read_mac {
11917849d02Sdamien 	uint32_t	len;
12017849d02Sdamien 	uint8_t		data[32];
12117849d02Sdamien } __packed;
12217849d02Sdamien 
12317849d02Sdamien /* structure for command UATH_CMD_WRITE_MAC */
12417849d02Sdamien struct uath_write_mac {
12517849d02Sdamien 	uint32_t	reg;
12617849d02Sdamien 	uint32_t	len;
12717849d02Sdamien 	uint8_t		data[32];
12817849d02Sdamien } __packed;
12917849d02Sdamien 
13017849d02Sdamien /* structure for command UATH_CMD_0B */
13117849d02Sdamien struct uath_cmd_0b {
13217849d02Sdamien 	uint32_t	code;
13317849d02Sdamien 	uint32_t	reserved;
13417849d02Sdamien 	uint32_t	size;
13517849d02Sdamien 	uint8_t		data[44];
13617849d02Sdamien } __packed;
13717849d02Sdamien 
13817849d02Sdamien /* structure for command UATH_CMD_0C */
13917849d02Sdamien struct uath_cmd_0c {
14017849d02Sdamien 	uint32_t	magic1;
14117849d02Sdamien 	uint32_t	magic2;
14217849d02Sdamien 	uint32_t	magic3;
14317849d02Sdamien } __packed;
14417849d02Sdamien 
14517849d02Sdamien /* structure for command UATH_CMD_SET_LED */
14617849d02Sdamien struct uath_cmd_led {
14717849d02Sdamien 	uint32_t	which;
14817849d02Sdamien #define UATH_LED_LINK		0
14917849d02Sdamien #define UATH_LED_ACTIVITY	1
15017849d02Sdamien 
15117849d02Sdamien 	uint32_t	state;
15217849d02Sdamien #define UATH_LED_OFF	0
15317849d02Sdamien #define UATH_LED_ON	1
15417849d02Sdamien } __packed;
15517849d02Sdamien 
15617849d02Sdamien /* structure for command UATH_CMD_SET_XLED */
15717849d02Sdamien struct uath_cmd_xled {
15817849d02Sdamien 	uint32_t	which;
15917849d02Sdamien 	uint32_t	rate;
16017849d02Sdamien 	uint32_t	mode;
16117849d02Sdamien } __packed;
16217849d02Sdamien 
16317849d02Sdamien /* structure for command UATH_CMD_CRYPTO */
16417849d02Sdamien struct uath_cmd_crypto {
16517849d02Sdamien 	uint32_t	keyidx;
16617849d02Sdamien #define UATH_DEFAULT_KEY	6
16717849d02Sdamien 
16817849d02Sdamien 	uint32_t	magic1;
16917849d02Sdamien 	uint32_t	size;
17017849d02Sdamien 	uint32_t	reserved1;
17117849d02Sdamien 	uint32_t	mask;
17217849d02Sdamien 	uint8_t		addr[IEEE80211_ADDR_LEN];
17317849d02Sdamien 	uint16_t	reserved2;
17417849d02Sdamien 	uint32_t	flags;
17517849d02Sdamien 	uint32_t	reserved3[2];
17617849d02Sdamien 	uint8_t		key[68];
17717849d02Sdamien 	uint8_t		magic2[136];
17817849d02Sdamien 	uint8_t		magic3[136];
17917849d02Sdamien } __packed;
18017849d02Sdamien 
18117849d02Sdamien /* structure for command UATH_CMD_SET_RATES */
18217849d02Sdamien struct uath_cmd_rates {
18317849d02Sdamien 	uint32_t	magic1;
18417849d02Sdamien 	uint32_t	reserved;
185*0d8d0da2Sdamien 	uint32_t	size;
18617849d02Sdamien 	uint8_t		nrates;
187*0d8d0da2Sdamien #define UATH_MAX_NRATES	30
188*0d8d0da2Sdamien 	uint8_t		rates[UATH_MAX_NRATES];
18917849d02Sdamien } __packed;
19017849d02Sdamien 
19117849d02Sdamien /* structure for command UATH_CMD_SET_CHAN */
19217849d02Sdamien struct uath_set_chan {
19317849d02Sdamien 	uint32_t	flags;
19417849d02Sdamien 	uint32_t	freq;
19517849d02Sdamien 	uint32_t	magic1;
19617849d02Sdamien 	uint32_t	magic2;
19717849d02Sdamien 	uint32_t	reserved1;
19817849d02Sdamien 	uint32_t	magic3;
19917849d02Sdamien 	uint32_t	reserved2;
20017849d02Sdamien } __packed;
20117849d02Sdamien 
20217849d02Sdamien /* structure for command UATH_CMD_SET_QUEUE */
20317849d02Sdamien struct uath_qinfo {
20417849d02Sdamien 	uint32_t	qid;
20517849d02Sdamien #define UATH_AC_TO_QID(ac)	(ac)	/* id function */
20617849d02Sdamien 
20717849d02Sdamien 	uint32_t	size;
20817849d02Sdamien 	uint32_t	ac;
20917849d02Sdamien 	uint32_t	aifsn;
21017849d02Sdamien 	uint32_t	logcwmin;
21117849d02Sdamien 	uint32_t	logcwmax;
21217849d02Sdamien 	uint32_t	txop;
21317849d02Sdamien 	uint32_t	acm;
21417849d02Sdamien 	uint32_t	magic1;
21517849d02Sdamien 	uint32_t	magic2;
21617849d02Sdamien } __packed;
21717849d02Sdamien 
21817849d02Sdamien /* structure for command UATH_CMD_31 */
21917849d02Sdamien struct uath_cmd_31 {
22017849d02Sdamien 	uint32_t	magic1;
22117849d02Sdamien 	uint32_t	magic2;
22217849d02Sdamien } __packed;
22317849d02Sdamien 
22417849d02Sdamien /* structure for command UATH_CMD_SET_FILTER */
22517849d02Sdamien struct uath_cmd_filter {
22617849d02Sdamien 	uint32_t	filter;
22717849d02Sdamien 	uint32_t	flags;
22817849d02Sdamien } __packed;
22917849d02Sdamien 
23017849d02Sdamien /* structure for command UATH_CMD_SET_BSSID */
23117849d02Sdamien struct uath_cmd_bssid {
23217849d02Sdamien 	uint32_t	reserved1;
23317849d02Sdamien 	uint32_t	flags1;
23417849d02Sdamien 	uint32_t	flags2;
23517849d02Sdamien 	uint32_t	reserved2;
23617849d02Sdamien 	uint32_t	len;
23717849d02Sdamien 	uint8_t		bssid[IEEE80211_ADDR_LEN];
23817849d02Sdamien } __packed;
23917849d02Sdamien 
24017849d02Sdamien 
24117849d02Sdamien #define UATH_EEPROM_MACADDR	0x0b
24217849d02Sdamien #define UATH_EEPROM_RXBUFSZ	0x0f
24317849d02Sdamien 
24417849d02Sdamien #define UATH_MAX_TXBUFSZ	\
24517849d02Sdamien 	(sizeof (uint32_t) + sizeof (struct uath_tx_desc) + IEEE80211_MAX_LEN)
24617849d02Sdamien 
24717849d02Sdamien #define UATH_MIN_RXBUFSZ						\
24817849d02Sdamien 	(((sizeof (uint32_t) + sizeof (struct ieee80211_frame_min) +	\
24917849d02Sdamien 	   sizeof (struct uath_rx_desc)) + 3) & ~3)
250