rt2560var.h revision 1.2.2.2 1 1.2.2.2 kardel /* $NetBSD: rt2560var.h,v 1.2.2.2 2006/06/07 15:51:09 kardel Exp $ */
2 1.2.2.2 kardel /* $OpenBSD: rt2560var.h,v 1.2 2006/01/14 12:43:27 damien Exp $ */
3 1.2.2.2 kardel
4 1.2.2.2 kardel /*-
5 1.2.2.2 kardel * Copyright (c) 2005, 2006
6 1.2.2.2 kardel * Damien Bergamini <damien.bergamini (at) free.fr>
7 1.2.2.2 kardel *
8 1.2.2.2 kardel * Permission to use, copy, modify, and distribute this software for any
9 1.2.2.2 kardel * purpose with or without fee is hereby granted, provided that the above
10 1.2.2.2 kardel * copyright notice and this permission notice appear in all copies.
11 1.2.2.2 kardel *
12 1.2.2.2 kardel * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
13 1.2.2.2 kardel * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
14 1.2.2.2 kardel * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
15 1.2.2.2 kardel * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
16 1.2.2.2 kardel * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 1.2.2.2 kardel * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 1.2.2.2 kardel * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 1.2.2.2 kardel */
20 1.2.2.2 kardel
21 1.2.2.2 kardel struct rt2560_rx_radiotap_header {
22 1.2.2.2 kardel struct ieee80211_radiotap_header wr_ihdr;
23 1.2.2.2 kardel uint64_t wr_tsf;
24 1.2.2.2 kardel uint8_t wr_flags;
25 1.2.2.2 kardel uint8_t _pad;
26 1.2.2.2 kardel uint8_t wr_rate;
27 1.2.2.2 kardel uint16_t wr_chan_freq;
28 1.2.2.2 kardel uint16_t wr_chan_flags;
29 1.2.2.2 kardel uint8_t wr_antenna;
30 1.2.2.2 kardel uint8_t wr_antsignal;
31 1.2.2.2 kardel } __packed;
32 1.2.2.2 kardel
33 1.2.2.2 kardel #define RT2560_RX_RADIOTAP_PRESENT \
34 1.2.2.2 kardel ((1 << IEEE80211_RADIOTAP_TSFT) | \
35 1.2.2.2 kardel (1 << IEEE80211_RADIOTAP_FLAGS) | \
36 1.2.2.2 kardel (1 << IEEE80211_RADIOTAP_RATE) | \
37 1.2.2.2 kardel (1 << IEEE80211_RADIOTAP_CHANNEL) | \
38 1.2.2.2 kardel (1 << IEEE80211_RADIOTAP_ANTENNA) | \
39 1.2.2.2 kardel (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL))
40 1.2.2.2 kardel
41 1.2.2.2 kardel struct rt2560_tx_radiotap_header {
42 1.2.2.2 kardel struct ieee80211_radiotap_header wt_ihdr;
43 1.2.2.2 kardel uint8_t wt_flags;
44 1.2.2.2 kardel uint8_t wt_rate;
45 1.2.2.2 kardel uint16_t wt_chan_freq;
46 1.2.2.2 kardel uint16_t wt_chan_flags;
47 1.2.2.2 kardel uint8_t wt_antenna;
48 1.2.2.2 kardel } __packed;
49 1.2.2.2 kardel
50 1.2.2.2 kardel #define RT2560_TX_RADIOTAP_PRESENT \
51 1.2.2.2 kardel ((1 << IEEE80211_RADIOTAP_FLAGS) | \
52 1.2.2.2 kardel (1 << IEEE80211_RADIOTAP_RATE) | \
53 1.2.2.2 kardel (1 << IEEE80211_RADIOTAP_CHANNEL) | \
54 1.2.2.2 kardel (1 << IEEE80211_RADIOTAP_ANTENNA))
55 1.2.2.2 kardel
56 1.2.2.2 kardel struct rt2560_tx_data {
57 1.2.2.2 kardel bus_dmamap_t map;
58 1.2.2.2 kardel struct mbuf *m;
59 1.2.2.2 kardel struct ieee80211_node *ni;
60 1.2.2.2 kardel struct ieee80211_rssdesc id;
61 1.2.2.2 kardel };
62 1.2.2.2 kardel
63 1.2.2.2 kardel struct rt2560_tx_ring {
64 1.2.2.2 kardel bus_dmamap_t map;
65 1.2.2.2 kardel bus_dma_segment_t seg;
66 1.2.2.2 kardel bus_addr_t physaddr;
67 1.2.2.2 kardel struct rt2560_tx_desc *desc;
68 1.2.2.2 kardel struct rt2560_tx_data *data;
69 1.2.2.2 kardel int count;
70 1.2.2.2 kardel int queued;
71 1.2.2.2 kardel int cur;
72 1.2.2.2 kardel int next;
73 1.2.2.2 kardel int cur_encrypt;
74 1.2.2.2 kardel int next_encrypt;
75 1.2.2.2 kardel };
76 1.2.2.2 kardel
77 1.2.2.2 kardel struct rt2560_rx_data {
78 1.2.2.2 kardel bus_dmamap_t map;
79 1.2.2.2 kardel struct mbuf *m;
80 1.2.2.2 kardel int drop;
81 1.2.2.2 kardel };
82 1.2.2.2 kardel
83 1.2.2.2 kardel struct rt2560_rx_ring {
84 1.2.2.2 kardel bus_dmamap_t map;
85 1.2.2.2 kardel bus_dma_segment_t seg;
86 1.2.2.2 kardel bus_addr_t physaddr;
87 1.2.2.2 kardel struct rt2560_rx_desc *desc;
88 1.2.2.2 kardel struct rt2560_rx_data *data;
89 1.2.2.2 kardel int count;
90 1.2.2.2 kardel int cur;
91 1.2.2.2 kardel int next;
92 1.2.2.2 kardel int cur_decrypt;
93 1.2.2.2 kardel };
94 1.2.2.2 kardel
95 1.2.2.2 kardel struct rt2560_node {
96 1.2.2.2 kardel struct ieee80211_node ni;
97 1.2.2.2 kardel struct ieee80211_rssadapt rssadapt;
98 1.2.2.2 kardel };
99 1.2.2.2 kardel
100 1.2.2.2 kardel struct rt2560_softc {
101 1.2.2.2 kardel struct device sc_dev;
102 1.2.2.2 kardel
103 1.2.2.2 kardel struct ieee80211com sc_ic;
104 1.2.2.2 kardel int (*sc_newstate)(struct ieee80211com *,
105 1.2.2.2 kardel enum ieee80211_state, int);
106 1.2.2.2 kardel
107 1.2.2.2 kardel int (*sc_enable)(struct rt2560_softc *);
108 1.2.2.2 kardel void (*sc_disable)(struct rt2560_softc *);
109 1.2.2.2 kardel void (*sc_power)(struct rt2560_softc *, int);
110 1.2.2.2 kardel
111 1.2.2.2 kardel bus_dma_tag_t sc_dmat;
112 1.2.2.2 kardel bus_space_tag_t sc_st;
113 1.2.2.2 kardel bus_space_handle_t sc_sh;
114 1.2.2.2 kardel
115 1.2.2.2 kardel struct sysctllog *sc_sysctllog;
116 1.2.2.2 kardel
117 1.2.2.2 kardel struct ethercom sc_ec;
118 1.2.2.2 kardel
119 1.2.2.2 kardel struct callout scan_ch;
120 1.2.2.2 kardel struct callout rssadapt_ch;
121 1.2.2.2 kardel
122 1.2.2.2 kardel int sc_flags;
123 1.2.2.2 kardel #define RT2560_ENABLED (1 << 0)
124 1.2.2.2 kardel
125 1.2.2.2 kardel int sc_tx_timer;
126 1.2.2.2 kardel
127 1.2.2.2 kardel uint32_t asic_rev;
128 1.2.2.2 kardel uint8_t rf_rev;
129 1.2.2.2 kardel
130 1.2.2.2 kardel struct rt2560_tx_ring txq;
131 1.2.2.2 kardel struct rt2560_tx_ring prioq;
132 1.2.2.2 kardel struct rt2560_tx_ring atimq;
133 1.2.2.2 kardel struct rt2560_tx_ring bcnq;
134 1.2.2.2 kardel struct rt2560_rx_ring rxq;
135 1.2.2.2 kardel
136 1.2.2.2 kardel struct ieee80211_beacon_offsets sc_bo;
137 1.2.2.2 kardel
138 1.2.2.2 kardel uint32_t rf_regs[4];
139 1.2.2.2 kardel uint8_t txpow[14];
140 1.2.2.2 kardel
141 1.2.2.2 kardel struct {
142 1.2.2.2 kardel uint8_t reg;
143 1.2.2.2 kardel uint8_t val;
144 1.2.2.2 kardel } bbp_prom[16];
145 1.2.2.2 kardel
146 1.2.2.2 kardel int led_mode;
147 1.2.2.2 kardel int hw_radio;
148 1.2.2.2 kardel int rx_ant;
149 1.2.2.2 kardel int tx_ant;
150 1.2.2.2 kardel int nb_ant;
151 1.2.2.2 kardel
152 1.2.2.2 kardel int dwelltime;
153 1.2.2.2 kardel
154 1.2.2.2 kardel #if NBPFILTER > 0
155 1.2.2.2 kardel caddr_t sc_drvbpf;
156 1.2.2.2 kardel
157 1.2.2.2 kardel union {
158 1.2.2.2 kardel struct rt2560_rx_radiotap_header th;
159 1.2.2.2 kardel uint8_t pad[64];
160 1.2.2.2 kardel } sc_rxtapu;
161 1.2.2.2 kardel #define sc_rxtap sc_rxtapu.th
162 1.2.2.2 kardel int sc_rxtap_len;
163 1.2.2.2 kardel
164 1.2.2.2 kardel union {
165 1.2.2.2 kardel struct rt2560_tx_radiotap_header th;
166 1.2.2.2 kardel uint8_t pad[64];
167 1.2.2.2 kardel } sc_txtapu;
168 1.2.2.2 kardel #define sc_txtap sc_txtapu.th
169 1.2.2.2 kardel int sc_txtap_len;
170 1.2.2.2 kardel #endif
171 1.2.2.2 kardel };
172 1.2.2.2 kardel
173 1.2.2.2 kardel #define sc_if sc_ec.ec_if
174 1.2.2.2 kardel
175 1.2.2.2 kardel int rt2560_attach(void *, int);
176 1.2.2.2 kardel int rt2560_detach(void *);
177 1.2.2.2 kardel int rt2560_intr(void *);
178