]> CyberLeo.Net >> Repos - FreeBSD/releng/8.0.git/blob - sys/dev/usb/wlan/if_urtwvar.h
Adjust to reflect 8.0-RELEASE.
[FreeBSD/releng/8.0.git] / sys / dev / usb / wlan / if_urtwvar.h
1 /*      $FreeBSD$       */
2
3 /*-
4  * Copyright (c) 2008 Weongyo Jeong <weongyo@FreeBSD.org>
5  *
6  * Permission to use, copy, modify, and distribute this software for any
7  * purpose with or without fee is hereby granted, provided that the above
8  * copyright notice and this permission notice appear in all copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17  */
18
19 enum {
20         URTW_8187B_BULK_RX,
21         URTW_8187B_BULK_TX_BE,
22         URTW_8187B_BULK_TX_BK,
23         URTW_8187B_BULK_TX_VI,
24         URTW_8187B_BULK_TX_VO,
25         URTW_8187B_BULK_TX_EP12,
26         URTW_8187B_N_XFERS = 6
27 };
28
29 enum {
30         URTW_8187L_BULK_RX,
31         URTW_8187L_BULK_TX_LOW,
32         URTW_8187L_BULK_TX_NORMAL,
33         URTW_8187L_N_XFERS = 3
34 };
35
36 /* XXX no definition at net80211?  */
37 #define URTW_MAX_CHANNELS               15
38
39 struct urtw_data {
40         struct urtw_softc       *sc;
41         uint8_t                 *buf;
42         uint16_t                buflen;
43         struct mbuf             *m;
44         struct ieee80211_node   *ni;            /* NB: tx only */
45         STAILQ_ENTRY(urtw_data) next;
46 };
47 typedef STAILQ_HEAD(, urtw_data) urtw_datahead;
48
49 /* XXX not correct..  */
50 #define URTW_MIN_RXBUFSZ                                                \
51         (sizeof(struct ieee80211_frame_min))
52
53 #define URTW_RX_DATA_LIST_COUNT         4
54 #define URTW_TX_DATA_LIST_COUNT         16
55 #define URTW_RX_MAXSIZE                 0x9c4
56 #define URTW_TX_MAXSIZE                 0x9c4
57
58 struct urtw_rx_radiotap_header {
59         struct ieee80211_radiotap_header wr_ihdr;
60         uint8_t         wr_flags;
61         uint16_t        wr_chan_freq;
62         uint16_t        wr_chan_flags;
63         int8_t          wr_dbm_antsignal;
64 } __packed;
65
66 #define URTW_RX_RADIOTAP_PRESENT                                        \
67         ((1 << IEEE80211_RADIOTAP_FLAGS) |                              \
68          (1 << IEEE80211_RADIOTAP_CHANNEL) |                            \
69          (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL))
70
71 struct urtw_tx_radiotap_header {
72         struct ieee80211_radiotap_header wt_ihdr;
73         uint8_t         wt_flags;
74         uint16_t        wt_chan_freq;
75         uint16_t        wt_chan_flags;
76 } __packed;
77
78 #define URTW_TX_RADIOTAP_PRESENT                                        \
79         ((1 << IEEE80211_RADIOTAP_FLAGS) |                              \
80          (1 << IEEE80211_RADIOTAP_CHANNEL))
81
82 struct urtw_vap {
83         struct ieee80211vap             vap;
84         int                             (*newstate)(struct ieee80211vap *,
85                                             enum ieee80211_state, int);
86 };
87 #define URTW_VAP(vap)   ((struct urtw_vap *)(vap))
88
89 struct urtw_softc {
90         struct ifnet                    *sc_ifp;
91         device_t                        sc_dev;
92         struct usb_device               *sc_udev;
93         struct mtx                      sc_mtx;
94
95         int                             sc_debug;
96         int                             sc_if_flags;
97         int                             sc_flags;
98 #define URTW_INIT_ONCE                  (1 << 1)
99 #define URTW_RTL8187B                   (1 << 2)
100 #define URTW_RTL8187B_REV_B             (1 << 3)
101 #define URTW_RTL8187B_REV_D             (1 << 4)
102 #define URTW_RTL8187B_REV_E             (1 << 5)
103         enum ieee80211_state            sc_state;
104
105         int                             sc_epromtype;
106 #define URTW_EEPROM_93C46               0
107 #define URTW_EEPROM_93C56               1
108         uint8_t                         sc_crcmon;
109         uint8_t                         sc_bssid[IEEE80211_ADDR_LEN];
110
111         struct ieee80211_channel        *sc_curchan;
112
113         /* for RF  */
114         usb_error_t                     (*sc_rf_init)(struct urtw_softc *);
115         usb_error_t                     (*sc_rf_set_chan)(struct urtw_softc *,
116                                             int);
117         usb_error_t                     (*sc_rf_set_sens)(struct urtw_softc *,
118                                             int);
119         usb_error_t                     (*sc_rf_stop)(struct urtw_softc *);
120         uint8_t                         sc_rfchip;
121         uint32_t                        sc_max_sens;
122         uint32_t                        sc_sens;
123         /* for LED  */
124         struct usb_callout              sc_led_ch;
125         struct task                     sc_led_task;
126         uint8_t                         sc_psr;
127         uint8_t                         sc_strategy;
128 #define URTW_LED_GPIO                   1
129         uint8_t                         sc_gpio_ledon;
130         uint8_t                         sc_gpio_ledinprogress;
131         uint8_t                         sc_gpio_ledstate;
132         uint8_t                         sc_gpio_ledpin;
133         uint8_t                         sc_gpio_blinktime;
134         uint8_t                         sc_gpio_blinkstate;
135         /* RX/TX */
136         struct usb_xfer         *sc_xfer[URTW_8187B_N_XFERS];
137 #define URTW_PRIORITY_LOW               0
138 #define URTW_PRIORITY_NORMAL            1
139 #define URTW_DATA_TIMEOUT               10000           /* 10 sec  */
140 #define URTW_8187B_TXPIPE_BE            0x6     /* best effort */
141 #define URTW_8187B_TXPIPE_BK            0x7     /* background */
142 #define URTW_8187B_TXPIPE_VI            0x5     /* video */
143 #define URTW_8187B_TXPIPE_VO            0x4     /* voice */
144 #define URTW_8187B_TXPIPE_MAX           4
145         struct urtw_data                sc_rx[URTW_RX_DATA_LIST_COUNT];
146         urtw_datahead                   sc_rx_active;
147         urtw_datahead                   sc_rx_inactive;
148         struct urtw_data                sc_tx[URTW_TX_DATA_LIST_COUNT];
149         urtw_datahead                   sc_tx_active;
150         urtw_datahead                   sc_tx_inactive;
151         urtw_datahead                   sc_tx_pending;
152         uint8_t                         sc_rts_retry;
153         uint8_t                         sc_tx_retry;
154         uint8_t                         sc_preamble_mode;
155 #define URTW_PREAMBLE_MODE_SHORT        1
156 #define URTW_PREAMBLE_MODE_LONG         2
157         struct callout                  sc_watchdog_ch;
158         int                             sc_txtimer;
159         int                             sc_currate;
160         /* TX power  */
161         uint8_t                         sc_txpwr_cck[URTW_MAX_CHANNELS];
162         uint8_t                         sc_txpwr_cck_base;
163         uint8_t                         sc_txpwr_ofdm[URTW_MAX_CHANNELS];
164         uint8_t                         sc_txpwr_ofdm_base;
165
166         struct  urtw_rx_radiotap_header sc_rxtap;
167         int                             sc_rxtap_len;
168         struct  urtw_tx_radiotap_header sc_txtap;
169         int                             sc_txtap_len;
170 };
171
172 #define URTW_LOCK(sc)                   mtx_lock(&(sc)->sc_mtx)
173 #define URTW_UNLOCK(sc)                 mtx_unlock(&(sc)->sc_mtx)
174 #define URTW_ASSERT_LOCKED(sc)          mtx_assert(&(sc)->sc_mtx, MA_OWNED)