if_upgtvar.h revision 1.2 1 1.2 skrll /* $NetBSD: if_upgtvar.h,v 1.2 2016/04/23 10:15:31 skrll Exp $ */
2 1.1 tsutsui /* $OpenBSD: if_upgtvar.h,v 1.15 2009/08/10 20:02:19 deraadt Exp $ */
3 1.1 tsutsui
4 1.1 tsutsui /*
5 1.1 tsutsui * Copyright (c) 2007 Marcus Glocker <mglocker (at) openbsd.org>
6 1.1 tsutsui *
7 1.1 tsutsui * Permission to use, copy, modify, and distribute this software for any
8 1.1 tsutsui * purpose with or without fee is hereby granted, provided that the above
9 1.1 tsutsui * copyright notice and this permission notice appear in all copies.
10 1.1 tsutsui *
11 1.1 tsutsui * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12 1.1 tsutsui * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13 1.1 tsutsui * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14 1.1 tsutsui * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15 1.1 tsutsui * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 1.1 tsutsui * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 1.1 tsutsui * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 1.1 tsutsui */
19 1.1 tsutsui
20 1.1 tsutsui struct upgt_softc;
21 1.1 tsutsui
22 1.1 tsutsui /*
23 1.1 tsutsui * Radio tap.
24 1.1 tsutsui */
25 1.1 tsutsui struct upgt_rx_radiotap_header {
26 1.1 tsutsui struct ieee80211_radiotap_header wr_ihdr;
27 1.1 tsutsui uint8_t wr_flags;
28 1.1 tsutsui uint8_t wr_rate;
29 1.1 tsutsui uint16_t wr_chan_freq;
30 1.1 tsutsui uint16_t wr_chan_flags;
31 1.1 tsutsui uint8_t wr_antsignal;
32 1.1 tsutsui } __packed;
33 1.1 tsutsui
34 1.1 tsutsui #define UPGT_RX_RADIOTAP_PRESENT \
35 1.1 tsutsui ((1 << IEEE80211_RADIOTAP_FLAGS) | \
36 1.1 tsutsui (1 << IEEE80211_RADIOTAP_RATE) | \
37 1.1 tsutsui (1 << IEEE80211_RADIOTAP_CHANNEL) | \
38 1.1 tsutsui (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL))
39 1.1 tsutsui
40 1.1 tsutsui struct upgt_tx_radiotap_header {
41 1.1 tsutsui struct ieee80211_radiotap_header wt_ihdr;
42 1.1 tsutsui uint8_t wt_flags;
43 1.1 tsutsui uint8_t wt_rate;
44 1.1 tsutsui uint16_t wt_chan_freq;
45 1.1 tsutsui uint16_t wt_chan_flags;
46 1.1 tsutsui } __packed;
47 1.1 tsutsui
48 1.1 tsutsui #define UPGT_TX_RADIOTAP_PRESENT \
49 1.1 tsutsui ((1 << IEEE80211_RADIOTAP_FLAGS) | \
50 1.1 tsutsui (1 << IEEE80211_RADIOTAP_RATE) | \
51 1.1 tsutsui (1 << IEEE80211_RADIOTAP_CHANNEL))
52 1.1 tsutsui
53 1.1 tsutsui /*
54 1.1 tsutsui * General values.
55 1.1 tsutsui */
56 1.1 tsutsui #define UPGT_IFACE_INDEX 0
57 1.1 tsutsui #define UPGT_CONFIG_NO 1
58 1.1 tsutsui #define UPGT_USB_TIMEOUT 1000
59 1.1 tsutsui #define UPGT_FIRMWARE_TIMEOUT 10
60 1.1 tsutsui
61 1.1 tsutsui #define UPGT_MEMADDR_FIRMWARE_START 0x00020000 /* 512 bytes large */
62 1.1 tsutsui #define UPGT_MEMSIZE_FRAME_HEAD 0x0070
63 1.1 tsutsui #define UPGT_MEMSIZE_RX 0x3500
64 1.1 tsutsui
65 1.1 tsutsui #define UPGT_TX_COUNT 6
66 1.1 tsutsui
67 1.1 tsutsui /* device flags */
68 1.1 tsutsui #define UPGT_DEVICE_ATTACHED (1 << 0)
69 1.1 tsutsui
70 1.1 tsutsui /* leds */
71 1.1 tsutsui #define UPGT_LED_OFF 0
72 1.1 tsutsui #define UPGT_LED_ON 1
73 1.1 tsutsui #define UPGT_LED_BLINK 2
74 1.1 tsutsui
75 1.1 tsutsui /*
76 1.1 tsutsui * USB xfers.
77 1.1 tsutsui */
78 1.1 tsutsui struct upgt_data {
79 1.1 tsutsui struct upgt_softc *sc;
80 1.2 skrll struct usbd_xfer *xfer;
81 1.1 tsutsui uint8_t *buf;
82 1.1 tsutsui struct ieee80211_node *ni;
83 1.1 tsutsui struct mbuf *m;
84 1.1 tsutsui uint32_t addr;
85 1.1 tsutsui };
86 1.1 tsutsui
87 1.1 tsutsui /*
88 1.1 tsutsui * Firmware.
89 1.1 tsutsui */
90 1.1 tsutsui #define UPGT_FW_BLOCK_SIZE 512
91 1.1 tsutsui
92 1.1 tsutsui #define UPGT_BRA_FWTYPE_SIZE 4
93 1.1 tsutsui #define UPGT_BRA_FWTYPE_LM86 "LM86"
94 1.1 tsutsui #define UPGT_BRA_FWTYPE_LM87 "LM87"
95 1.1 tsutsui #define UPGT_BRA_FWTYPE_FMAC "FMAC"
96 1.1 tsutsui enum upgt_fw_type {
97 1.1 tsutsui UPGT_FWTYPE_LM86,
98 1.1 tsutsui UPGT_FWTYPE_LM87,
99 1.1 tsutsui UPGT_FWTYPE_FMAC
100 1.1 tsutsui };
101 1.1 tsutsui
102 1.1 tsutsui #define UPGT_BRA_TYPE_FW 0x80000001
103 1.1 tsutsui #define UPGT_BRA_TYPE_VERSION 0x80000002
104 1.1 tsutsui #define UPGT_BRA_TYPE_DEPIF 0x80000003
105 1.1 tsutsui #define UPGT_BRA_TYPE_EXPIF 0x80000004
106 1.1 tsutsui #define UPGT_BRA_TYPE_DESCR 0x80000101
107 1.1 tsutsui #define UPGT_BRA_TYPE_END 0xff0000ff
108 1.1 tsutsui struct upgt_fw_bra_option {
109 1.1 tsutsui uint32_t type;
110 1.1 tsutsui uint32_t len;
111 1.1 tsutsui uint8_t data[];
112 1.1 tsutsui } __packed;
113 1.1 tsutsui
114 1.1 tsutsui struct upgt_fw_bra_descr {
115 1.1 tsutsui uint32_t unknown1;
116 1.1 tsutsui uint32_t memaddr_space_start;
117 1.1 tsutsui uint32_t memaddr_space_end;
118 1.1 tsutsui uint32_t unknown2;
119 1.1 tsutsui uint32_t unknown3;
120 1.1 tsutsui uint8_t rates[20];
121 1.1 tsutsui } __packed;
122 1.1 tsutsui
123 1.1 tsutsui #define UPGT_X2_SIGNATURE_SIZE 4
124 1.1 tsutsui #define UPGT_X2_SIGNATURE "x2 "
125 1.1 tsutsui struct upgt_fw_x2_header {
126 1.1 tsutsui uint8_t signature[4];
127 1.1 tsutsui uint32_t startaddr;
128 1.1 tsutsui uint32_t len;
129 1.1 tsutsui uint32_t crc;
130 1.1 tsutsui } __packed;
131 1.1 tsutsui
132 1.1 tsutsui /*
133 1.1 tsutsui * EEPROM.
134 1.1 tsutsui */
135 1.1 tsutsui #define UPGT_EEPROM_SIZE 8192
136 1.1 tsutsui #define UPGT_EEPROM_BLOCK_SIZE 1020
137 1.1 tsutsui
138 1.1 tsutsui struct upgt_eeprom_header {
139 1.1 tsutsui /* 14 bytes */
140 1.1 tsutsui uint32_t magic;
141 1.1 tsutsui uint16_t pad1;
142 1.1 tsutsui uint16_t preamble_len;
143 1.1 tsutsui uint32_t pad2;
144 1.1 tsutsui /* data */
145 1.1 tsutsui } __packed;
146 1.1 tsutsui
147 1.1 tsutsui #define UPGT_EEPROM_TYPE_END 0x0000
148 1.1 tsutsui #define UPGT_EEPROM_TYPE_NAME 0x0001
149 1.1 tsutsui #define UPGT_EEPROM_TYPE_SERIAL 0x0003
150 1.1 tsutsui #define UPGT_EEPROM_TYPE_MAC 0x0101
151 1.1 tsutsui #define UPGT_EEPROM_TYPE_HWRX 0x1001
152 1.1 tsutsui #define UPGT_EEPROM_TYPE_CHIP 0x1002
153 1.1 tsutsui #define UPGT_EEPROM_TYPE_FREQ3 0x1903
154 1.1 tsutsui #define UPGT_EEPROM_TYPE_FREQ4 0x1904
155 1.1 tsutsui #define UPGT_EEPROM_TYPE_FREQ5 0x1905
156 1.1 tsutsui #define UPGT_EEPROM_TYPE_FREQ6 0x1906
157 1.1 tsutsui #define UPGT_EEPROM_TYPE_OFF 0xffff
158 1.1 tsutsui struct upgt_eeprom_option {
159 1.1 tsutsui uint16_t len;
160 1.1 tsutsui uint16_t type;
161 1.1 tsutsui uint8_t data[];
162 1.1 tsutsui /* data */
163 1.1 tsutsui } __packed;
164 1.1 tsutsui
165 1.1 tsutsui #define UPGT_EEPROM_RX_CONST 0x88
166 1.1 tsutsui struct upgt_eeprom_option_hwrx {
167 1.1 tsutsui uint32_t pad1;
168 1.1 tsutsui uint8_t rxfilter;
169 1.1 tsutsui uint8_t pad2[15];
170 1.1 tsutsui } __packed;
171 1.1 tsutsui
172 1.1 tsutsui struct upgt_eeprom_freq3_header {
173 1.1 tsutsui uint8_t flags;
174 1.1 tsutsui uint8_t elements;
175 1.1 tsutsui } __packed;
176 1.1 tsutsui
177 1.1 tsutsui struct upgt_eeprom_freq4_header {
178 1.1 tsutsui uint8_t flags;
179 1.1 tsutsui uint8_t elements;
180 1.1 tsutsui uint8_t settings;
181 1.1 tsutsui uint8_t type;
182 1.1 tsutsui } __packed;
183 1.1 tsutsui
184 1.1 tsutsui struct upgt_eeprom_freq4_1 {
185 1.1 tsutsui uint16_t freq;
186 1.1 tsutsui uint8_t data[50];
187 1.1 tsutsui } __packed;
188 1.1 tsutsui
189 1.1 tsutsui struct upgt_eeprom_freq4_2 {
190 1.1 tsutsui uint16_t head;
191 1.1 tsutsui uint8_t subtails[4];
192 1.1 tsutsui uint8_t tail;
193 1.1 tsutsui } __packed;
194 1.1 tsutsui
195 1.1 tsutsui /*
196 1.1 tsutsui * LMAC protocol.
197 1.1 tsutsui */
198 1.1 tsutsui struct upgt_lmac_mem {
199 1.1 tsutsui uint32_t addr;
200 1.1 tsutsui uint32_t chksum;
201 1.1 tsutsui } __packed;
202 1.1 tsutsui
203 1.1 tsutsui #define UPGT_H1_FLAGS_TX_MGMT 0x00 /* for TX: mgmt frame */
204 1.1 tsutsui #define UPGT_H1_FLAGS_TX_NO_CALLBACK 0x01 /* for TX: no USB callback */
205 1.1 tsutsui #define UPGT_H1_FLAGS_TX_DATA 0x10 /* for TX: data frame */
206 1.1 tsutsui #define UPGT_H1_TYPE_RX_DATA 0x00 /* 802.11 RX data frame */
207 1.1 tsutsui #define UPGT_H1_TYPE_RX_DATA_MGMT 0x04 /* 802.11 RX mgmt frame */
208 1.1 tsutsui #define UPGT_H1_TYPE_TX_DATA 0x40 /* 802.11 TX data frame */
209 1.1 tsutsui #define UPGT_H1_TYPE_CTRL 0x80 /* control frame */
210 1.1 tsutsui struct upgt_lmac_h1 {
211 1.1 tsutsui /* 4 bytes */
212 1.1 tsutsui uint8_t flags;
213 1.1 tsutsui uint8_t type;
214 1.1 tsutsui uint16_t len;
215 1.1 tsutsui } __packed;
216 1.1 tsutsui
217 1.1 tsutsui #define UPGT_H2_TYPE_TX_ACK_NO 0x0000
218 1.1 tsutsui #define UPGT_H2_TYPE_TX_ACK_YES 0x0001
219 1.1 tsutsui #define UPGT_H2_TYPE_MACFILTER 0x0000
220 1.1 tsutsui #define UPGT_H2_TYPE_CHANNEL 0x0001
221 1.1 tsutsui #define UPGT_H2_TYPE_TX_DONE 0x0008
222 1.1 tsutsui #define UPGT_H2_TYPE_STATS 0x000a
223 1.1 tsutsui #define UPGT_H2_TYPE_EEPROM 0x000c
224 1.1 tsutsui #define UPGT_H2_TYPE_LED 0x000d
225 1.1 tsutsui #define UPGT_H2_FLAGS_TX_ACK_NO 0x0101
226 1.1 tsutsui #define UPGT_H2_FLAGS_TX_ACK_YES 0x0707
227 1.1 tsutsui struct upgt_lmac_h2 {
228 1.1 tsutsui /* 8 bytes */
229 1.1 tsutsui uint32_t reqid;
230 1.1 tsutsui uint16_t type;
231 1.1 tsutsui uint16_t flags;
232 1.1 tsutsui } __packed;
233 1.1 tsutsui
234 1.1 tsutsui struct upgt_lmac_header {
235 1.1 tsutsui /* 12 bytes */
236 1.1 tsutsui struct upgt_lmac_h1 header1;
237 1.1 tsutsui struct upgt_lmac_h2 header2;
238 1.1 tsutsui } __packed;
239 1.1 tsutsui
240 1.1 tsutsui struct upgt_lmac_eeprom {
241 1.1 tsutsui /* 16 bytes */
242 1.1 tsutsui struct upgt_lmac_h1 header1;
243 1.1 tsutsui struct upgt_lmac_h2 header2;
244 1.1 tsutsui uint16_t offset;
245 1.1 tsutsui uint16_t len;
246 1.1 tsutsui /* data */
247 1.1 tsutsui } __packed;
248 1.1 tsutsui
249 1.1 tsutsui #define UPGT_FILTER_TYPE_NONE 0x0000
250 1.1 tsutsui #define UPGT_FILTER_TYPE_STA 0x0001
251 1.1 tsutsui #define UPGT_FILTER_TYPE_IBSS 0x0002
252 1.1 tsutsui #define UPGT_FILTER_TYPE_HOSTAP 0x0004
253 1.1 tsutsui #define UPGT_FILTER_TYPE_MONITOR 0x0010
254 1.1 tsutsui #define UPGT_FILTER_TYPE_RESET 0x0020
255 1.1 tsutsui #define UPGT_FILTER_UNKNOWN1 0x0002
256 1.1 tsutsui #define UPGT_FILTER_UNKNOWN2 0x0ca8
257 1.1 tsutsui #define UPGT_FILTER_UNKNOWN3 0xffff
258 1.1 tsutsui struct upgt_lmac_filter {
259 1.1 tsutsui struct upgt_lmac_h1 header1;
260 1.1 tsutsui struct upgt_lmac_h2 header2;
261 1.1 tsutsui /* 32 bytes */
262 1.1 tsutsui uint16_t type;
263 1.1 tsutsui uint8_t dst[IEEE80211_ADDR_LEN];
264 1.1 tsutsui uint8_t src[IEEE80211_ADDR_LEN];
265 1.1 tsutsui uint16_t unknown1;
266 1.1 tsutsui uint32_t rxaddr;
267 1.1 tsutsui uint16_t unknown2;
268 1.1 tsutsui uint32_t rxhw;
269 1.1 tsutsui uint16_t unknown3;
270 1.1 tsutsui uint32_t unknown4;
271 1.1 tsutsui } __packed;
272 1.1 tsutsui
273 1.1 tsutsui /* frequence 3 data */
274 1.1 tsutsui struct upgt_lmac_freq3 {
275 1.1 tsutsui uint16_t freq;
276 1.1 tsutsui uint8_t data[6];
277 1.1 tsutsui } __packed;
278 1.1 tsutsui
279 1.1 tsutsui /* frequence 4 data */
280 1.1 tsutsui struct upgt_lmac_freq4 {
281 1.1 tsutsui struct upgt_eeprom_freq4_2 cmd;
282 1.1 tsutsui uint8_t pad;
283 1.1 tsutsui };
284 1.1 tsutsui
285 1.1 tsutsui /* frequence 6 data */
286 1.1 tsutsui struct upgt_lmac_freq6 {
287 1.1 tsutsui uint16_t freq;
288 1.1 tsutsui uint8_t data[8];
289 1.1 tsutsui } __packed;
290 1.1 tsutsui
291 1.1 tsutsui #define UPGT_CHANNEL_UNKNOWN1 0x0001
292 1.1 tsutsui #define UPGT_CHANNEL_UNKNOWN2 0x0000
293 1.1 tsutsui #define UPGT_CHANNEL_UNKNOWN3 0x48
294 1.1 tsutsui struct upgt_lmac_channel {
295 1.1 tsutsui struct upgt_lmac_h1 header1;
296 1.1 tsutsui struct upgt_lmac_h2 header2;
297 1.1 tsutsui /* 112 bytes */
298 1.1 tsutsui uint16_t unknown1;
299 1.1 tsutsui uint16_t unknown2;
300 1.1 tsutsui uint8_t pad1[20];
301 1.1 tsutsui struct upgt_lmac_freq6 freq6;
302 1.1 tsutsui uint8_t settings;
303 1.1 tsutsui uint8_t unknown3;
304 1.1 tsutsui uint8_t freq3_1[4];
305 1.1 tsutsui struct upgt_lmac_freq4 freq4[8];
306 1.1 tsutsui uint8_t freq3_2[4];
307 1.1 tsutsui uint32_t pad2;
308 1.1 tsutsui } __packed;
309 1.1 tsutsui
310 1.1 tsutsui #define UPGT_LED_MODE_SET 0x0003
311 1.1 tsutsui #define UPGT_LED_ACTION_OFF 0x0002
312 1.1 tsutsui #define UPGT_LED_ACTION_ON 0x0003
313 1.1 tsutsui #define UPGT_LED_ACTION_TMP_DUR 100 /* ms */
314 1.1 tsutsui struct upgt_lmac_led {
315 1.1 tsutsui struct upgt_lmac_h1 header1;
316 1.1 tsutsui struct upgt_lmac_h2 header2;
317 1.1 tsutsui uint16_t mode;
318 1.1 tsutsui uint16_t action_fix;
319 1.1 tsutsui uint16_t action_tmp;
320 1.1 tsutsui uint16_t action_tmp_dur;
321 1.1 tsutsui } __packed;
322 1.1 tsutsui
323 1.1 tsutsui struct upgt_lmac_stats {
324 1.1 tsutsui struct upgt_lmac_h1 header1;
325 1.1 tsutsui struct upgt_lmac_h2 header2;
326 1.1 tsutsui uint8_t data[76];
327 1.1 tsutsui } __packed;
328 1.1 tsutsui
329 1.1 tsutsui struct upgt_lmac_rx_desc {
330 1.1 tsutsui struct upgt_lmac_h1 header1;
331 1.1 tsutsui /* 16 bytes */
332 1.1 tsutsui uint16_t freq;
333 1.1 tsutsui uint8_t unknown1;
334 1.1 tsutsui uint8_t rate;
335 1.1 tsutsui uint8_t rssi;
336 1.1 tsutsui uint8_t pad;
337 1.1 tsutsui uint16_t unknown2;
338 1.1 tsutsui uint32_t timestamp;
339 1.1 tsutsui uint32_t unknown3;
340 1.1 tsutsui uint8_t data[];
341 1.1 tsutsui } __packed;
342 1.1 tsutsui
343 1.1 tsutsui #define UPGT_TX_DESC_KEY_EXISTS 0x01
344 1.1 tsutsui struct upgt_lmac_tx_desc_wep {
345 1.1 tsutsui uint8_t key_exists;
346 1.1 tsutsui uint8_t key_len;
347 1.1 tsutsui uint8_t key_val[16];
348 1.1 tsutsui } __packed;
349 1.1 tsutsui
350 1.1 tsutsui #define UPGT_TX_DESC_TYPE_BEACON 0x00000000
351 1.1 tsutsui #define UPGT_TX_DESC_TYPE_PROBE 0x00000001
352 1.1 tsutsui #define UPGT_TX_DESC_TYPE_MGMT 0x00000002
353 1.1 tsutsui #define UPGT_TX_DESC_TYPE_DATA 0x00000004
354 1.1 tsutsui #define UPGT_TX_DESC_PAD3_SIZE 2
355 1.1 tsutsui struct upgt_lmac_tx_desc {
356 1.1 tsutsui struct upgt_lmac_h1 header1;
357 1.1 tsutsui struct upgt_lmac_h2 header2;
358 1.1 tsutsui uint8_t rates[8];
359 1.1 tsutsui uint16_t pad1;
360 1.1 tsutsui struct upgt_lmac_tx_desc_wep wep_key;
361 1.1 tsutsui uint32_t type;
362 1.1 tsutsui uint32_t pad2;
363 1.1 tsutsui uint32_t unknown1;
364 1.1 tsutsui uint32_t unknown2;
365 1.1 tsutsui uint8_t pad3[2];
366 1.1 tsutsui /* 802.11 frame data */
367 1.1 tsutsui } __packed;
368 1.1 tsutsui
369 1.1 tsutsui #define UPGT_TX_DONE_DESC_STATUS_OK 0x0001
370 1.1 tsutsui struct upgt_lmac_tx_done_desc {
371 1.1 tsutsui struct upgt_lmac_h1 header1;
372 1.1 tsutsui struct upgt_lmac_h2 header2;
373 1.1 tsutsui uint16_t status;
374 1.1 tsutsui uint16_t rssi;
375 1.1 tsutsui uint16_t seq;
376 1.1 tsutsui uint16_t unknown;
377 1.1 tsutsui } __packed;
378 1.1 tsutsui
379 1.1 tsutsui /*
380 1.1 tsutsui * Prism memory.
381 1.1 tsutsui */
382 1.1 tsutsui struct upgt_memory_page {
383 1.1 tsutsui uint8_t used;
384 1.1 tsutsui uint32_t addr;
385 1.1 tsutsui } __packed;
386 1.1 tsutsui
387 1.1 tsutsui #define UPGT_MEMORY_MAX_PAGES 8
388 1.1 tsutsui struct upgt_memory {
389 1.1 tsutsui uint8_t pages;
390 1.1 tsutsui struct upgt_memory_page page[UPGT_MEMORY_MAX_PAGES];
391 1.1 tsutsui } __packed;
392 1.1 tsutsui
393 1.1 tsutsui /*
394 1.1 tsutsui * Softc.
395 1.1 tsutsui */
396 1.1 tsutsui struct upgt_softc {
397 1.1 tsutsui device_t sc_dev;
398 1.1 tsutsui struct ethercom sc_ec;
399 1.1 tsutsui #define sc_if sc_ec.ec_if
400 1.1 tsutsui
401 1.2 skrll struct usbd_device * sc_udev;
402 1.2 skrll struct usbd_interface * sc_iface;
403 1.1 tsutsui int sc_rx_no;
404 1.1 tsutsui int sc_tx_no;
405 1.1 tsutsui struct usb_task sc_task_newstate;
406 1.1 tsutsui struct usb_task sc_task_tx;
407 1.2 skrll struct usbd_pipe * sc_rx_pipeh;
408 1.2 skrll struct usbd_pipe * sc_tx_pipeh;
409 1.1 tsutsui
410 1.1 tsutsui struct upgt_data tx_data[UPGT_TX_COUNT];
411 1.1 tsutsui struct upgt_data rx_data;
412 1.1 tsutsui struct upgt_data cmd_data;
413 1.1 tsutsui int tx_queued;
414 1.1 tsutsui kmutex_t sc_mtx;
415 1.1 tsutsui
416 1.1 tsutsui uint8_t sc_device_type;
417 1.1 tsutsui struct ieee80211com sc_ic;
418 1.1 tsutsui enum ieee80211_state sc_state;
419 1.1 tsutsui int sc_arg;
420 1.1 tsutsui int (*sc_newstate)(struct ieee80211com *,
421 1.1 tsutsui enum ieee80211_state, int);
422 1.1 tsutsui callout_t scan_to;
423 1.1 tsutsui callout_t led_to;
424 1.1 tsutsui int sc_led_blink;
425 1.1 tsutsui uint8_t sc_cur_rateset[8];
426 1.1 tsutsui
427 1.1 tsutsui int sc_flags;
428 1.1 tsutsui uint8_t *sc_fw;
429 1.1 tsutsui size_t sc_fw_size;
430 1.1 tsutsui int sc_fw_type;
431 1.1 tsutsui
432 1.1 tsutsui /* memory addresses on device */
433 1.1 tsutsui uint32_t sc_memaddr_frame_start;
434 1.1 tsutsui uint32_t sc_memaddr_frame_end;
435 1.1 tsutsui uint32_t sc_memaddr_rx_start;
436 1.1 tsutsui struct upgt_memory sc_memory;
437 1.1 tsutsui
438 1.1 tsutsui /* data which we found in the EEPROM */
439 1.1 tsutsui uint8_t sc_eeprom[UPGT_EEPROM_SIZE];
440 1.1 tsutsui uint16_t sc_eeprom_hwrx;
441 1.1 tsutsui struct upgt_lmac_freq3 sc_eeprom_freq3[IEEE80211_CHAN_MAX];
442 1.1 tsutsui struct upgt_lmac_freq4 sc_eeprom_freq4[IEEE80211_CHAN_MAX][8];
443 1.1 tsutsui struct upgt_lmac_freq6 sc_eeprom_freq6[IEEE80211_CHAN_MAX];
444 1.1 tsutsui uint8_t sc_eeprom_freq6_settings;
445 1.1 tsutsui
446 1.1 tsutsui /* radio tap */
447 1.1 tsutsui struct bpf_if *sc_drvbpf;
448 1.1 tsutsui
449 1.1 tsutsui /* RX */
450 1.1 tsutsui union {
451 1.1 tsutsui struct upgt_rx_radiotap_header th;
452 1.1 tsutsui uint8_t pad[64];
453 1.1 tsutsui } sc_rxtapu;
454 1.1 tsutsui #define sc_rxtap sc_rxtapu.th
455 1.1 tsutsui int sc_rxtap_len;
456 1.1 tsutsui
457 1.1 tsutsui /* TX */
458 1.1 tsutsui union {
459 1.1 tsutsui struct upgt_tx_radiotap_header th;
460 1.1 tsutsui uint8_t pad[64];
461 1.1 tsutsui } sc_txtapu;
462 1.1 tsutsui #define sc_txtap sc_txtapu.th
463 1.1 tsutsui int sc_txtap_len;
464 1.1 tsutsui };
465