[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/usb/if_upgtvar.h

Version: -  FREEBSD  -  FREEBSD7  -  FREEBSD70  -  FREEBSD6  -  FREEBSD63  -  FREEBSD62  -  FREEBSD61  -  FREEBSD60  -  FREEBSD5  -  FREEBSD55  -  FREEBSD54  -  FREEBSD53  -  FREEBSD52  -  FREEBSD51  -  FREEBSD50  -  FREEBSD4  -  FREEBSD3  -  FREEBSD22  -  linux-2.6  -  linux-2.4.22  -  MK83  -  MK84  -  PLAN9  -  DFBSD  -  NETBSD  -  NETBSD4  -  NETBSD3  -  NETBSD20  -  OPENBSD  -  xnu-517  -  xnu-792  -  xnu-792.6.70  -  xnu-1228  -  OPENSOLARIS  -  minix-3-1-1  -  TRUSTEDBSD-SEBSD  -  FREEBSD-LIBC  -  FREEBSD7-LIBC  -  FREEBSD6-LIBC  -  GLIBC27 
SearchContext: -  none  -  excerpts  -  bigexcerpts 

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

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.