FreeBSD/Linux Kernel Cross Reference
sys/dev/ic/rt2661var.h
1 /* $OpenBSD: rt2661var.h,v 1.18 2013/12/06 21:03:03 deraadt 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 struct rt2661_rx_radiotap_header {
21 struct ieee80211_radiotap_header wr_ihdr;
22 uint64_t wr_tsf;
23 uint8_t wr_flags;
24 uint8_t wr_rate;
25 uint16_t wr_chan_freq;
26 uint16_t wr_chan_flags;
27 uint8_t wr_antsignal;
28 } __packed;
29
30 #define RT2661_RX_RADIOTAP_PRESENT \
31 ((1 << IEEE80211_RADIOTAP_TSFT) | \
32 (1 << IEEE80211_RADIOTAP_FLAGS) | \
33 (1 << IEEE80211_RADIOTAP_RATE) | \
34 (1 << IEEE80211_RADIOTAP_CHANNEL) | \
35 (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL))
36
37 struct rt2661_tx_radiotap_header {
38 struct ieee80211_radiotap_header wt_ihdr;
39 uint8_t wt_flags;
40 uint8_t wt_rate;
41 uint16_t wt_chan_freq;
42 uint16_t wt_chan_flags;
43 } __packed;
44
45 #define RT2661_TX_RADIOTAP_PRESENT \
46 ((1 << IEEE80211_RADIOTAP_FLAGS) | \
47 (1 << IEEE80211_RADIOTAP_RATE) | \
48 (1 << IEEE80211_RADIOTAP_CHANNEL))
49
50 struct rt2661_tx_data {
51 bus_dmamap_t map;
52 struct mbuf *m;
53 struct ieee80211_node *ni;
54 };
55
56 struct rt2661_tx_ring {
57 bus_dmamap_t map;
58 bus_dma_segment_t seg;
59 bus_addr_t physaddr;
60 struct rt2661_tx_desc *desc;
61 struct rt2661_tx_data *data;
62 int count;
63 int queued;
64 int cur;
65 int next;
66 int stat;
67 };
68
69 struct rt2661_rx_data {
70 bus_dmamap_t map;
71 struct mbuf *m;
72 };
73
74 struct rt2661_rx_ring {
75 bus_dmamap_t map;
76 bus_dma_segment_t seg;
77 bus_addr_t physaddr;
78 struct rt2661_rx_desc *desc;
79 struct rt2661_rx_data *data;
80 int count;
81 int cur;
82 int next;
83 };
84
85 #define RT2661_AMRR_NODES_MAX 100 /* based on IEEE80211_CACHE_SIZE */
86 #define RT2661_AMRR_INVALID_ID (RT2661_AMRR_NODES_MAX + 1)
87
88 struct rt2661_amrr_node {
89 struct ieee80211_amrr_node amn;
90 struct rt2661_node *rn;
91 u_int8_t id;
92 TAILQ_ENTRY(rt2661_amrr_node) entry;
93 };
94
95 struct rt2661_node {
96 struct ieee80211_node ni;
97 struct rt2661_amrr_node *amn;
98 };
99
100 struct rt2661_softc {
101 struct device sc_dev;
102
103 struct ieee80211com sc_ic;
104 int (*sc_newstate)(struct ieee80211com *,
105 enum ieee80211_state, int);
106 struct ieee80211_amrr amrr;
107
108 int (*sc_enable)(struct rt2661_softc *);
109 void (*sc_disable)(struct rt2661_softc *);
110
111 bus_dma_tag_t sc_dmat;
112 bus_space_tag_t sc_st;
113 bus_space_handle_t sc_sh;
114
115 struct timeout scan_to;
116 struct timeout amrr_to;
117
118 int sc_id;
119 int sc_flags;
120 #define RT2661_ENABLED (1 << 0)
121 #define RT2661_UPDATE_SLOT (1 << 1)
122 #define RT2661_SET_SLOTTIME (1 << 2)
123 #define RT2661_FWLOADED (1 << 3)
124 #define RT2661_MGT_OACTIVE (1 << 4)
125 #define RT2661_DATA_OACTIVE (1 << 5)
126
127 int sc_tx_timer;
128
129 struct ieee80211_channel *sc_curchan;
130
131 u_char *ucode;
132 size_t ucsize;
133
134 uint8_t rf_rev;
135
136 uint8_t rfprog;
137 uint8_t rffreq;
138
139 struct rt2661_tx_ring txq[5];
140 struct rt2661_tx_ring mgtq;
141 struct rt2661_rx_ring rxq;
142
143 uint32_t rf_regs[4];
144 int8_t txpow[38];
145
146 struct {
147 uint8_t reg;
148 uint8_t val;
149 } bbp_prom[16];
150
151 int hw_radio;
152 int rx_ant;
153 int tx_ant;
154 int nb_ant;
155 int ext_2ghz_lna;
156 int ext_5ghz_lna;
157 int rssi_2ghz_corr;
158 int rssi_5ghz_corr;
159
160 int ncalls;
161 int avg_rssi;
162 int sifs;
163
164 uint32_t erp_csr;
165
166 uint8_t bbp18;
167 uint8_t bbp21;
168 uint8_t bbp22;
169 uint8_t bbp16;
170 uint8_t bbp17;
171 uint8_t bbp64;
172
173 #if NBPFILTER > 0
174 caddr_t sc_drvbpf;
175
176 union {
177 struct rt2661_rx_radiotap_header th;
178 uint8_t pad[64];
179 } sc_rxtapu;
180 #define sc_rxtap sc_rxtapu.th
181 int sc_rxtap_len;
182
183 union {
184 struct rt2661_tx_radiotap_header th;
185 uint8_t pad[64];
186 } sc_txtapu;
187 #define sc_txtap sc_txtapu.th
188 int sc_txtap_len;
189 #endif
190 void (*sc_node_free)(struct ieee80211com *,
191 struct ieee80211_node *);
192 TAILQ_HEAD(, rt2661_amrr_node) amn;
193 u_int8_t amn_count;
194 };
195
196 int rt2661_attach(void *, int);
197 int rt2661_detach(void *);
198 void rt2661_suspend(void *);
199 void rt2661_wakeup(void *);
200 int rt2661_intr(void *);
Cache object: 8ce2a84318ed06bb3e58414a743e7132
|