]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - sys/dev/usb/wlan/if_rumvar.h
Update compiler-rt to 3.9.0 release, and update the build glue for
[FreeBSD/FreeBSD.git] / sys / dev / usb / wlan / if_rumvar.h
1 /*      $FreeBSD$       */
2
3 /*-
4  * Copyright (c) 2005, 2006 Damien Bergamini <damien.bergamini@free.fr>
5  * Copyright (c) 2006 Niall O'Higgins <niallo@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 #define RUM_TX_LIST_COUNT       8
21 #define RUM_TX_MINFREE          2
22
23 struct rum_rx_radiotap_header {
24         struct ieee80211_radiotap_header wr_ihdr;
25         uint64_t        wr_tsf;
26         uint8_t         wr_flags;
27         uint8_t         wr_rate;
28         uint16_t        wr_chan_freq;
29         uint16_t        wr_chan_flags;
30         int8_t          wr_antsignal;
31         int8_t          wr_antnoise;
32         uint8_t         wr_antenna;
33 } __packed __aligned(8);
34
35 #define RT2573_RX_RADIOTAP_PRESENT                                      \
36         ((1 << IEEE80211_RADIOTAP_TSFT) |                               \
37          (1 << IEEE80211_RADIOTAP_FLAGS) |                              \
38          (1 << IEEE80211_RADIOTAP_RATE) |                               \
39          (1 << IEEE80211_RADIOTAP_CHANNEL) |                            \
40          (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |                      \
41          (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) |                       \
42          (1 << IEEE80211_RADIOTAP_ANTENNA) |                            \
43          0)
44
45 struct rum_tx_radiotap_header {
46         struct ieee80211_radiotap_header wt_ihdr;
47         uint64_t        wt_tsf;
48         uint8_t         wt_flags;
49         uint8_t         wt_rate;
50         uint16_t        wt_chan_freq;
51         uint16_t        wt_chan_flags;
52         uint8_t         wt_antenna;
53 } __packed __aligned(8);
54
55 #define RT2573_TX_RADIOTAP_PRESENT                                      \
56         ((1 << IEEE80211_RADIOTAP_TSFT) |                               \
57          (1 << IEEE80211_RADIOTAP_FLAGS) |                              \
58          (1 << IEEE80211_RADIOTAP_RATE) |                               \
59          (1 << IEEE80211_RADIOTAP_CHANNEL) |                            \
60          (1 << IEEE80211_RADIOTAP_ANTENNA))
61
62 struct rum_softc;
63
64 struct rum_tx_data {
65         STAILQ_ENTRY(rum_tx_data)       next;
66         struct rum_softc                *sc;
67         struct rum_tx_desc              desc;
68         struct mbuf                     *m;
69         struct ieee80211_node           *ni;
70         int                             rate;
71 };
72 typedef STAILQ_HEAD(, rum_tx_data) rum_txdhead;
73
74 union sec_param {
75         struct ieee80211_key            key;
76         uint8_t                         macaddr[IEEE80211_ADDR_LEN];
77         struct ieee80211vap             *vap;
78 };
79 #define CMD_FUNC_PROTO                  void (*func)(struct rum_softc *, \
80                                             union sec_param *, uint8_t)
81
82 struct rum_cmdq {
83         union sec_param                 data;
84         uint8_t                         rvp_id;
85
86         CMD_FUNC_PROTO;
87 };
88 #define RUM_CMDQ_SIZE                   16
89
90 struct rum_vap {
91         struct ieee80211vap             vap;
92         struct mbuf                     *bcn_mbuf;
93         struct usb_callout              ratectl_ch;
94         struct task                     ratectl_task;
95         uint8_t                         maxretry;
96
97         int                             (*newstate)(struct ieee80211vap *,
98                                             enum ieee80211_state, int);
99         void                            (*bmiss)(struct ieee80211vap *);
100         void                            (*recv_mgmt)(struct ieee80211_node *,
101                                             struct mbuf *, int,
102                                             const struct ieee80211_rx_stats *,
103                                             int, int);
104 };
105 #define RUM_VAP(vap)    ((struct rum_vap *)(vap))
106
107 enum {
108         RUM_BULK_WR,
109         RUM_BULK_RD,
110         RUM_N_TRANSFER = 2,
111 };
112
113 struct rum_softc {
114         struct ieee80211com             sc_ic;
115         struct mbufq                    sc_snd;
116         device_t                        sc_dev;
117         struct usb_device               *sc_udev;
118
119         struct usb_xfer                 *sc_xfer[RUM_N_TRANSFER];
120
121         uint8_t                         rf_rev;
122         uint8_t                         rffreq;
123
124         struct rum_tx_data              tx_data[RUM_TX_LIST_COUNT];
125         rum_txdhead                     tx_q;
126         rum_txdhead                     tx_free;
127         int                             tx_nfree;
128         struct rum_rx_desc              sc_rx_desc;
129
130         struct mtx                      sc_mtx;
131
132         int                             sc_sleep_end;
133         int                             sc_sleep_time;
134         uint8_t                         last_rx_flags;
135
136         struct rum_cmdq                 cmdq[RUM_CMDQ_SIZE];
137         struct mtx                      cmdq_mtx;
138         struct task                     cmdq_task;
139         uint8_t                         cmdq_first;
140         uint8_t                         cmdq_last;
141
142         uint32_t                        sta[6];
143         uint32_t                        rf_regs[4];
144         uint8_t                         txpow[44];
145         u_int                           sc_detached:1,
146                                         sc_running:1,
147                                         sc_sleeping:1,
148                                         sc_clr_shkeys:1;
149
150         uint8_t                         sc_bssid[IEEE80211_ADDR_LEN];
151         struct wmeParams                wme_params[WME_NUM_AC];
152
153         uint8_t                         vap_key_count[1];
154         uint64_t                        keys_bmap;
155
156         struct {
157                 uint8_t val;
158                 uint8_t reg;
159         } __packed                      bbp_prom[16];
160
161         int                             hw_radio;
162         int                             rx_ant;
163         int                             tx_ant;
164         int                             nb_ant;
165         int                             ext_2ghz_lna;
166         int                             ext_5ghz_lna;
167         int                             rssi_2ghz_corr;
168         int                             rssi_5ghz_corr;
169         uint8_t                         bbp17;
170
171         struct rum_rx_radiotap_header   sc_rxtap;
172         struct rum_tx_radiotap_header   sc_txtap;
173 };
174
175 #define RUM_LOCK_INIT(sc) \
176         mtx_init(&(sc)->sc_mtx, device_get_nameunit((sc)->sc_dev), \
177             MTX_NETWORK_LOCK, MTX_DEF);
178 #define RUM_LOCK(sc)                    mtx_lock(&(sc)->sc_mtx)
179 #define RUM_UNLOCK(sc)                  mtx_unlock(&(sc)->sc_mtx)
180 #define RUM_LOCK_ASSERT(sc)             mtx_assert(&(sc)->sc_mtx, MA_OWNED)
181 #define RUM_LOCK_DESTROY(sc)            mtx_destroy(&(sc)->sc_mtx)
182
183 #define RUM_CMDQ_LOCK_INIT(sc) \
184         mtx_init(&(sc)->cmdq_mtx, "cmdq lock", NULL, MTX_DEF)
185 #define RUM_CMDQ_LOCK(sc)               mtx_lock(&(sc)->cmdq_mtx)
186 #define RUM_CMDQ_UNLOCK(sc)             mtx_unlock(&(sc)->cmdq_mtx)
187 #define RUM_CMDQ_LOCK_DESTROY(sc)       mtx_destroy(&(sc)->cmdq_mtx)