if_rtwnreg.h revision 1.4.16.1 1 1.4.16.1 christos /* $NetBSD: if_rtwnreg.h,v 1.4.16.1 2019/06/10 22:07:16 christos Exp $ */
2 1.1 nonaka /* $OpenBSD: if_rtwnreg.h,v 1.3 2015/06/14 08:02:47 stsp Exp $ */
3 1.1 nonaka
4 1.1 nonaka /*-
5 1.1 nonaka * Copyright (c) 2010 Damien Bergamini <damien.bergamini (at) free.fr>
6 1.1 nonaka * Copyright (c) 2015 Stefan Sperling <stsp (at) openbsd.org>
7 1.1 nonaka *
8 1.1 nonaka * Permission to use, copy, modify, and distribute this software for any
9 1.1 nonaka * purpose with or without fee is hereby granted, provided that the above
10 1.1 nonaka * copyright notice and this permission notice appear in all copies.
11 1.1 nonaka *
12 1.1 nonaka * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 1.1 nonaka * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 1.1 nonaka * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 1.1 nonaka * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 1.1 nonaka * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 1.1 nonaka * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 1.1 nonaka * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 1.1 nonaka */
20 1.1 nonaka
21 1.4.16.1 christos #ifndef _DEV_PCI_RTWNREG_H_
22 1.4.16.1 christos #define _DEV_PCI_RTWNREG_H_
23 1.1 nonaka
24 1.1 nonaka /* Maximum number of output pipes is 3. */
25 1.1 nonaka #define R92C_MAX_EPOUT 3
26 1.1 nonaka
27 1.1 nonaka #define R92C_PUBQ_NPAGES 176
28 1.1 nonaka #define R92C_HPQ_NPAGES 41
29 1.1 nonaka #define R92C_LPQ_NPAGES 28
30 1.1 nonaka #define R92C_TXPKTBUF_COUNT 256
31 1.1 nonaka #define R92C_TX_PAGE_COUNT \
32 1.1 nonaka (R92C_PUBQ_NPAGES + R92C_HPQ_NPAGES + R92C_LPQ_NPAGES)
33 1.1 nonaka #define R92C_TX_PAGE_BOUNDARY (R92C_TX_PAGE_COUNT + 1)
34 1.1 nonaka
35 1.1 nonaka /* USB Requests. */
36 1.1 nonaka #define R92C_REQ_REGS 0x05
37 1.1 nonaka
38 1.1 nonaka /*
39 1.1 nonaka * Driver definitions.
40 1.1 nonaka */
41 1.1 nonaka #define RTWN_NTXQUEUES 9
42 1.1 nonaka #define RTWN_RX_LIST_COUNT 256
43 1.1 nonaka #define RTWN_TX_LIST_COUNT 256
44 1.3 nonaka #define RTWN_TX_LIST_LOMARK 192
45 1.3 nonaka #define RTWN_TX_LIST_HIMARK 255
46 1.1 nonaka #define RTWN_HOST_CMD_RING_COUNT 32
47 1.1 nonaka
48 1.1 nonaka /* TX queue indices. */
49 1.1 nonaka #define RTWN_BK_QUEUE 0
50 1.1 nonaka #define RTWN_BE_QUEUE 1
51 1.1 nonaka #define RTWN_VI_QUEUE 2
52 1.1 nonaka #define RTWN_VO_QUEUE 3
53 1.1 nonaka #define RTWN_BEACON_QUEUE 4
54 1.1 nonaka #define RTWN_TXCMD_QUEUE 5
55 1.1 nonaka #define RTWN_MGNT_QUEUE 6
56 1.1 nonaka #define RTWN_HIGH_QUEUE 7
57 1.1 nonaka #define RTWN_HCCA_QUEUE 8
58 1.1 nonaka
59 1.1 nonaka /* RX queue indices. */
60 1.1 nonaka #define RTWN_RX_QUEUE 0
61 1.1 nonaka
62 1.1 nonaka #define RTWN_RXBUFSZ (16 * 1024)
63 1.1 nonaka #define RTWN_TXBUFSZ (sizeof(struct r92c_tx_desc) + IEEE80211_MAX_LEN)
64 1.1 nonaka
65 1.1 nonaka #define RTWN_RIDX_COUNT 28
66 1.1 nonaka
67 1.1 nonaka #define RTWN_TX_TIMEOUT 5000 /* ms */
68 1.1 nonaka
69 1.1 nonaka #define RTWN_LED_LINK 0
70 1.1 nonaka #define RTWN_LED_DATA 1
71 1.1 nonaka
72 1.1 nonaka struct rtwn_rx_radiotap_header {
73 1.1 nonaka struct ieee80211_radiotap_header wr_ihdr;
74 1.1 nonaka uint8_t wr_flags;
75 1.1 nonaka uint8_t wr_rate;
76 1.1 nonaka uint16_t wr_chan_freq;
77 1.1 nonaka uint16_t wr_chan_flags;
78 1.1 nonaka uint8_t wr_dbm_antsignal;
79 1.1 nonaka } __packed;
80 1.1 nonaka
81 1.1 nonaka #define RTWN_RX_RADIOTAP_PRESENT \
82 1.1 nonaka (1 << IEEE80211_RADIOTAP_FLAGS | \
83 1.1 nonaka 1 << IEEE80211_RADIOTAP_RATE | \
84 1.1 nonaka 1 << IEEE80211_RADIOTAP_CHANNEL | \
85 1.1 nonaka 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL)
86 1.1 nonaka
87 1.1 nonaka struct rtwn_tx_radiotap_header {
88 1.1 nonaka struct ieee80211_radiotap_header wt_ihdr;
89 1.1 nonaka uint8_t wt_flags;
90 1.1 nonaka uint16_t wt_chan_freq;
91 1.1 nonaka uint16_t wt_chan_flags;
92 1.1 nonaka } __packed;
93 1.1 nonaka
94 1.1 nonaka #define RTWN_TX_RADIOTAP_PRESENT \
95 1.1 nonaka (1 << IEEE80211_RADIOTAP_FLAGS | \
96 1.1 nonaka 1 << IEEE80211_RADIOTAP_CHANNEL)
97 1.1 nonaka
98 1.1 nonaka struct rtwn_softc;
99 1.1 nonaka
100 1.1 nonaka struct rtwn_rx_data {
101 1.1 nonaka bus_dmamap_t map;
102 1.1 nonaka struct mbuf *m;
103 1.1 nonaka };
104 1.1 nonaka
105 1.1 nonaka struct rtwn_rx_ring {
106 1.4.16.1 christos struct r92c_rx_desc_pci *desc;
107 1.1 nonaka bus_dmamap_t map;
108 1.1 nonaka bus_dma_segment_t seg;
109 1.1 nonaka int nsegs;
110 1.1 nonaka struct rtwn_rx_data rx_data[RTWN_RX_LIST_COUNT];
111 1.1 nonaka
112 1.1 nonaka };
113 1.1 nonaka struct rtwn_tx_data {
114 1.1 nonaka bus_dmamap_t map;
115 1.1 nonaka struct mbuf *m;
116 1.1 nonaka struct ieee80211_node *ni;
117 1.1 nonaka };
118 1.1 nonaka
119 1.1 nonaka struct rtwn_tx_ring {
120 1.1 nonaka bus_dmamap_t map;
121 1.1 nonaka bus_dma_segment_t seg;
122 1.1 nonaka int nsegs;
123 1.4.16.1 christos struct r92c_tx_desc_pci *desc;
124 1.1 nonaka struct rtwn_tx_data tx_data[RTWN_TX_LIST_COUNT];
125 1.1 nonaka int queued;
126 1.1 nonaka int cur;
127 1.1 nonaka };
128 1.1 nonaka
129 1.1 nonaka struct rtwn_host_cmd {
130 1.1 nonaka void (*cb)(struct rtwn_softc *, void *);
131 1.1 nonaka uint8_t data[256];
132 1.1 nonaka };
133 1.1 nonaka
134 1.1 nonaka struct rtwn_cmd_key {
135 1.1 nonaka struct ieee80211_key key;
136 1.1 nonaka uint16_t associd;
137 1.1 nonaka };
138 1.1 nonaka
139 1.1 nonaka struct rtwn_host_cmd_ring {
140 1.1 nonaka struct rtwn_host_cmd cmd[RTWN_HOST_CMD_RING_COUNT];
141 1.1 nonaka int cur;
142 1.1 nonaka int next;
143 1.1 nonaka int queued;
144 1.1 nonaka };
145 1.1 nonaka
146 1.1 nonaka struct rtwn_softc {
147 1.1 nonaka device_t sc_dev;
148 1.1 nonaka struct ethercom sc_ec;
149 1.1 nonaka struct ieee80211com sc_ic;
150 1.1 nonaka int (*sc_newstate)(struct ieee80211com *,
151 1.1 nonaka enum ieee80211_state, int);
152 1.1 nonaka
153 1.1 nonaka /* PCI specific goo. */
154 1.1 nonaka bus_dma_tag_t sc_dmat;
155 1.1 nonaka pci_chipset_tag_t sc_pc;
156 1.1 nonaka pcitag_t sc_tag;
157 1.1 nonaka void *sc_ih;
158 1.1 nonaka pci_intr_handle_t *sc_pihp;
159 1.1 nonaka bus_space_tag_t sc_st;
160 1.1 nonaka bus_space_handle_t sc_sh;
161 1.1 nonaka bus_size_t sc_mapsize;
162 1.1 nonaka int sc_cap_off;
163 1.4 nonaka void *sc_soft_ih;
164 1.1 nonaka
165 1.1 nonaka struct callout scan_to;
166 1.1 nonaka struct callout calib_to;
167 1.1 nonaka void *init_task;
168 1.1 nonaka int ac2idx[WME_NUM_AC];
169 1.1 nonaka uint32_t sc_flags;
170 1.1 nonaka #define RTWN_FLAG_FW_LOADED __BIT(0)
171 1.1 nonaka #define RTWN_FLAG_CCK_HIPWR __BIT(1)
172 1.1 nonaka
173 1.1 nonaka uint32_t chip;
174 1.1 nonaka #define RTWN_CHIP_88C __BIT(0)
175 1.1 nonaka #define RTWN_CHIP_92C __BIT(1)
176 1.1 nonaka #define RTWN_CHIP_92C_1T2R __BIT(2)
177 1.1 nonaka #define RTWN_CHIP_UMC __BIT(3)
178 1.1 nonaka #define RTWN_CHIP_UMC_A_CUT __BIT(4)
179 1.1 nonaka #define RTWN_CHIP_UMC_B_CUT __BIT(5)
180 1.1 nonaka
181 1.1 nonaka uint8_t board_type;
182 1.1 nonaka uint8_t regulatory;
183 1.1 nonaka uint8_t pa_setting;
184 1.1 nonaka int avg_pwdb;
185 1.1 nonaka int thcal_state;
186 1.1 nonaka int thcal_lctemp;
187 1.1 nonaka int ntxchains;
188 1.1 nonaka int nrxchains;
189 1.1 nonaka int ledlink;
190 1.1 nonaka
191 1.1 nonaka int sc_tx_timer;
192 1.1 nonaka int fwcur;
193 1.1 nonaka struct rtwn_rx_ring rx_ring;
194 1.1 nonaka struct rtwn_tx_ring tx_ring[RTWN_NTXQUEUES];
195 1.1 nonaka uint32_t qfullmsk;
196 1.1 nonaka struct r92c_rom rom;
197 1.1 nonaka
198 1.1 nonaka uint32_t rf_chnlbw[R92C_MAX_CHAINS];
199 1.1 nonaka struct bpf_if *sc_drvbpf;
200 1.1 nonaka
201 1.1 nonaka union {
202 1.1 nonaka struct rtwn_rx_radiotap_header th;
203 1.1 nonaka uint8_t pad[64];
204 1.1 nonaka } sc_rxtapu;
205 1.1 nonaka #define sc_rxtap sc_rxtapu.th
206 1.1 nonaka int sc_rxtap_len;
207 1.1 nonaka
208 1.1 nonaka union {
209 1.1 nonaka struct rtwn_tx_radiotap_header th;
210 1.1 nonaka uint8_t pad[64];
211 1.1 nonaka } sc_txtapu;
212 1.1 nonaka #define sc_txtap sc_txtapu.th
213 1.1 nonaka int sc_txtap_len;
214 1.1 nonaka };
215 1.1 nonaka
216 1.1 nonaka #define sc_if sc_ec.ec_if
217 1.1 nonaka #define GET_IFP(sc) (&(sc)->sc_if)
218 1.1 nonaka #define IC2IFP(ic) ((ic)->ic_ifp)
219 1.1 nonaka
220 1.4.16.1 christos #endif /* _DEV_PCI_RTWNREG_H_ */
221