xref: /openbsd/sys/dev/usb/if_uathreg.h (revision 09467b48)
1 /*	$OpenBSD: if_uathreg.h,v 1.2 2006/09/18 16:34:23 damien Exp $	*/
2 
3 /*-
4  * Copyright (c) 2006
5  *	Damien Bergamini <damien.bergamini@free.fr>
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #define UATH_CONFIG_NO		1
21 #define UATH_IFACE_INDEX	0
22 
23 /* all fields are big endian */
24 struct uath_fwblock {
25 	uint32_t	flags;
26 #define UATH_WRITE_BLOCK	(1 << 4)
27 
28 	uint32_t	len;
29 #define UATH_MAX_FWBLOCK_SIZE	2048
30 
31 	uint32_t	total;
32 	uint32_t	remain;
33 	uint32_t	rxtotal;
34 	uint32_t	pad[123];
35 } __packed;
36 
37 #define UATH_MAX_RXCMDSZ	512
38 #define UATH_MAX_TXCMDSZ	512
39 
40 struct uath_cmd_hdr {
41 	uint32_t	len;
42 	uint32_t	code;
43 #define UATH_CMD_SETUP		0x01
44 #define UATH_CMD_02		0x02
45 #define UATH_CMD_READ_MAC	0x03
46 #define UATH_CMD_WRITE_MAC	0x04
47 #define UATH_CMD_READ_EEPROM	0x05
48 #define UATH_CMD_STATS		0x06
49 #define UATH_CMD_07		0x07
50 #define UATH_CMD_SHUTDOWN	0x08
51 #define UATH_CMD_0B		0x0b
52 #define UATH_CMD_0C		0x0c
53 #define UATH_CMD_0F		0x0f
54 #define UATH_NOTIF_STATS	0x10
55 #define UATH_NOTIF_READY	0x12
56 #define UATH_NOTIF_TX		0x13
57 #define UATH_CMD_15		0x15
58 #define UATH_CMD_SET_LED	0x17
59 #define UATH_CMD_SET_XLED	0x18
60 #define UATH_CMD_1B		0x1b
61 #define UATH_CMD_1E		0x1e
62 #define UATH_CMD_CRYPTO		0x1d
63 #define UATH_CMD_SET_STATE	0x20
64 #define UATH_CMD_SET_BSSID	0x21
65 #define UATH_CMD_24		0x24
66 #define UATH_CMD_SET_RATES	0x26
67 #define UATH_CMD_27		0x27
68 #define UATH_CMD_2E		0x2e
69 #define UATH_CMD_31		0x31
70 #define UATH_CMD_SET_FILTER	0x32
71 #define UATH_CMD_SET_CHAN	0x34
72 #define UATH_CMD_RESET		0x35
73 #define UATH_CMD_SET_QUEUE	0x3a
74 #define UATH_CMD_RESET_QUEUE	0x3b
75 
76 	uint32_t	priv;	/* driver private data */
77 	uint32_t	magic;
78 	uint32_t	reserved2[4];
79 } __packed;
80 
81 struct uath_rx_desc {
82 	uint32_t	len;
83 	uint32_t	reserved1[8];
84 	uint32_t	rssi;
85 	uint32_t	freq;
86 	uint32_t	reserved2[5];
87 } __packed;
88 
89 #define UATH_MAKECTL(qid, len)	htobe32((qid) << 16 | (len))
90 
91 struct uath_tx_desc {
92 	uint32_t	len;
93 	uint32_t	priv;	/* driver private data */
94 	uint32_t	type;
95 #define UATH_TX_DATA	0xe
96 #define UATH_TX_NULL	0xf
97 
98 	uint32_t	magic;
99 	uint32_t	dest;
100 #define UATH_ID_BSS		2
101 #define UATH_ID_BROADCAST	0xffffffff
102 
103 	uint32_t	flags;
104 #define UATH_TX_NOTIFY	(1 << 24)	/* f/w will send a UATH_NOTIF_TX */
105 
106 	uint32_t	paylen;
107 } __packed;
108 
109 /* structure for command UATH_CMD_SETUP */
110 struct uath_cmd_setup {
111 	uint32_t	magic1;
112 	uint32_t	magic2;
113 	uint32_t	magic3;
114 	uint32_t	magic4;
115 } __packed;
116 
117 /* structure for commands UATH_CMD_READ_MAC and UATH_CMD_READ_EEPROM */
118 struct uath_read_mac {
119 	uint32_t	len;
120 	uint8_t		data[32];
121 } __packed;
122 
123 /* structure for command UATH_CMD_WRITE_MAC */
124 struct uath_write_mac {
125 	uint32_t	reg;
126 	uint32_t	len;
127 	uint8_t		data[32];
128 } __packed;
129 
130 /* structure for command UATH_CMD_0B */
131 struct uath_cmd_0b {
132 	uint32_t	code;
133 	uint32_t	reserved;
134 	uint32_t	size;
135 	uint8_t		data[44];
136 } __packed;
137 
138 /* structure for command UATH_CMD_0C */
139 struct uath_cmd_0c {
140 	uint32_t	magic1;
141 	uint32_t	magic2;
142 	uint32_t	magic3;
143 } __packed;
144 
145 /* structure for command UATH_CMD_SET_LED */
146 struct uath_cmd_led {
147 	uint32_t	which;
148 #define UATH_LED_LINK		0
149 #define UATH_LED_ACTIVITY	1
150 
151 	uint32_t	state;
152 #define UATH_LED_OFF	0
153 #define UATH_LED_ON	1
154 } __packed;
155 
156 /* structure for command UATH_CMD_SET_XLED */
157 struct uath_cmd_xled {
158 	uint32_t	which;
159 	uint32_t	rate;
160 	uint32_t	mode;
161 } __packed;
162 
163 /* structure for command UATH_CMD_CRYPTO */
164 struct uath_cmd_crypto {
165 	uint32_t	keyidx;
166 #define UATH_DEFAULT_KEY	6
167 
168 	uint32_t	magic1;
169 	uint32_t	size;
170 	uint32_t	reserved1;
171 	uint32_t	mask;
172 	uint8_t		addr[IEEE80211_ADDR_LEN];
173 	uint16_t	reserved2;
174 	uint32_t	flags;
175 	uint32_t	reserved3[2];
176 	uint8_t		key[68];
177 	uint8_t		magic2[136];
178 	uint8_t		magic3[136];
179 } __packed;
180 
181 /* structure for command UATH_CMD_SET_RATES */
182 struct uath_cmd_rates {
183 	uint32_t	magic1;
184 	uint32_t	reserved;
185 	uint32_t	size;
186 	uint8_t		nrates;
187 #define UATH_MAX_NRATES	30
188 	uint8_t		rates[UATH_MAX_NRATES];
189 } __packed;
190 
191 /* structure for command UATH_CMD_SET_CHAN */
192 struct uath_set_chan {
193 	uint32_t	flags;
194 	uint32_t	freq;
195 	uint32_t	magic1;
196 	uint32_t	magic2;
197 	uint32_t	reserved1;
198 	uint32_t	magic3;
199 	uint32_t	reserved2;
200 } __packed;
201 
202 /* structure for command UATH_CMD_SET_QUEUE */
203 struct uath_qinfo {
204 	uint32_t	qid;
205 #define UATH_AC_TO_QID(ac)	(ac)	/* id function */
206 
207 	uint32_t	size;
208 	uint32_t	ac;
209 	uint32_t	aifsn;
210 	uint32_t	logcwmin;
211 	uint32_t	logcwmax;
212 	uint32_t	txop;
213 	uint32_t	acm;
214 	uint32_t	magic1;
215 	uint32_t	magic2;
216 } __packed;
217 
218 /* structure for command UATH_CMD_31 */
219 struct uath_cmd_31 {
220 	uint32_t	magic1;
221 	uint32_t	magic2;
222 } __packed;
223 
224 /* structure for command UATH_CMD_SET_FILTER */
225 struct uath_cmd_filter {
226 	uint32_t	filter;
227 	uint32_t	flags;
228 } __packed;
229 
230 /* structure for command UATH_CMD_SET_BSSID */
231 struct uath_cmd_bssid {
232 	uint32_t	reserved1;
233 	uint32_t	flags1;
234 	uint32_t	flags2;
235 	uint32_t	reserved2;
236 	uint32_t	len;
237 	uint8_t		bssid[IEEE80211_ADDR_LEN];
238 } __packed;
239 
240 
241 #define UATH_EEPROM_MACADDR	0x0b
242 #define UATH_EEPROM_RXBUFSZ	0x0f
243 
244 #define UATH_MAX_TXBUFSZ	\
245 	(sizeof (uint32_t) + sizeof (struct uath_tx_desc) + IEEE80211_MAX_LEN)
246 
247 #define UATH_MIN_RXBUFSZ						\
248 	(((sizeof (uint32_t) + sizeof (struct ieee80211_frame_min) +	\
249 	   sizeof (struct uath_rx_desc)) + 3) & ~3)
250