xref: /dflybsd-src/sys/dev/netif/ral/rt2661var.h (revision 5fdff524d882ea3e13a0833c8d6600d61ba05d89)
1*5fdff524SSepherosa Ziehau /*
2*5fdff524SSepherosa Ziehau  * Copyright (c) 2005
3*5fdff524SSepherosa Ziehau  *	Damien Bergamini <damien.bergamini@free.fr>
4*5fdff524SSepherosa Ziehau  *
5*5fdff524SSepherosa Ziehau  * Permission to use, copy, modify, and distribute this software for any
6*5fdff524SSepherosa Ziehau  * purpose with or without fee is hereby granted, provided that the above
7*5fdff524SSepherosa Ziehau  * copyright notice and this permission notice appear in all copies.
8*5fdff524SSepherosa Ziehau  *
9*5fdff524SSepherosa Ziehau  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10*5fdff524SSepherosa Ziehau  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11*5fdff524SSepherosa Ziehau  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12*5fdff524SSepherosa Ziehau  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13*5fdff524SSepherosa Ziehau  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14*5fdff524SSepherosa Ziehau  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15*5fdff524SSepherosa Ziehau  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16*5fdff524SSepherosa Ziehau  *
17*5fdff524SSepherosa Ziehau  * $FreeBSD: src/sys/dev/ral/rt2661var.h,v 1.1 2006/03/05 20:36:56 damien Exp $
18*5fdff524SSepherosa Ziehau  * $DragonFly: src/sys/dev/netif/ral/rt2661var.h,v 1.1 2006/05/20 09:13:09 sephe Exp $
19*5fdff524SSepherosa Ziehau  */
20*5fdff524SSepherosa Ziehau 
21*5fdff524SSepherosa Ziehau struct rt2661_rx_radiotap_header {
22*5fdff524SSepherosa Ziehau 	struct ieee80211_radiotap_header wr_ihdr;
23*5fdff524SSepherosa Ziehau 	uint64_t	wr_tsf;
24*5fdff524SSepherosa Ziehau 	uint8_t		wr_flags;
25*5fdff524SSepherosa Ziehau 	uint8_t		wr_rate;
26*5fdff524SSepherosa Ziehau 	uint16_t	wr_chan_freq;
27*5fdff524SSepherosa Ziehau 	uint16_t	wr_chan_flags;
28*5fdff524SSepherosa Ziehau 	uint8_t		wr_antsignal;
29*5fdff524SSepherosa Ziehau } __packed;
30*5fdff524SSepherosa Ziehau 
31*5fdff524SSepherosa Ziehau #define RT2661_RX_RADIOTAP_PRESENT					\
32*5fdff524SSepherosa Ziehau 	((1 << IEEE80211_RADIOTAP_TSFT) |				\
33*5fdff524SSepherosa Ziehau 	 (1 << IEEE80211_RADIOTAP_FLAGS) |				\
34*5fdff524SSepherosa Ziehau 	 (1 << IEEE80211_RADIOTAP_RATE) |				\
35*5fdff524SSepherosa Ziehau 	 (1 << IEEE80211_RADIOTAP_CHANNEL) |				\
36*5fdff524SSepherosa Ziehau 	 (1 << IEEE80211_RADIOTAP_DB_ANTSIGNAL))
37*5fdff524SSepherosa Ziehau 
38*5fdff524SSepherosa Ziehau struct rt2661_tx_radiotap_header {
39*5fdff524SSepherosa Ziehau 	struct ieee80211_radiotap_header wt_ihdr;
40*5fdff524SSepherosa Ziehau 	uint8_t		wt_flags;
41*5fdff524SSepherosa Ziehau 	uint8_t		wt_rate;
42*5fdff524SSepherosa Ziehau 	uint16_t	wt_chan_freq;
43*5fdff524SSepherosa Ziehau 	uint16_t	wt_chan_flags;
44*5fdff524SSepherosa Ziehau } __packed;
45*5fdff524SSepherosa Ziehau 
46*5fdff524SSepherosa Ziehau #define RT2661_TX_RADIOTAP_PRESENT					\
47*5fdff524SSepherosa Ziehau 	((1 << IEEE80211_RADIOTAP_FLAGS) |				\
48*5fdff524SSepherosa Ziehau 	 (1 << IEEE80211_RADIOTAP_RATE) |				\
49*5fdff524SSepherosa Ziehau 	 (1 << IEEE80211_RADIOTAP_CHANNEL))
50*5fdff524SSepherosa Ziehau 
51*5fdff524SSepherosa Ziehau struct rt2661_tx_data {
52*5fdff524SSepherosa Ziehau 	bus_dmamap_t		map;
53*5fdff524SSepherosa Ziehau 	struct mbuf		*m;
54*5fdff524SSepherosa Ziehau 	struct ieee80211_node	*ni;
55*5fdff524SSepherosa Ziehau 	struct ral_rssdesc	id;
56*5fdff524SSepherosa Ziehau };
57*5fdff524SSepherosa Ziehau 
58*5fdff524SSepherosa Ziehau struct rt2661_tx_ring {
59*5fdff524SSepherosa Ziehau 	bus_dma_tag_t		desc_dmat;
60*5fdff524SSepherosa Ziehau 	bus_dma_tag_t		data_dmat;
61*5fdff524SSepherosa Ziehau 	bus_dmamap_t		desc_map;
62*5fdff524SSepherosa Ziehau 	bus_addr_t		physaddr;
63*5fdff524SSepherosa Ziehau 	struct rt2661_tx_desc	*desc;
64*5fdff524SSepherosa Ziehau 	struct rt2661_tx_data	*data;
65*5fdff524SSepherosa Ziehau 	int			count;
66*5fdff524SSepherosa Ziehau 	int			queued;
67*5fdff524SSepherosa Ziehau 	int			cur;
68*5fdff524SSepherosa Ziehau 	int			next;
69*5fdff524SSepherosa Ziehau 	int			stat;
70*5fdff524SSepherosa Ziehau };
71*5fdff524SSepherosa Ziehau 
72*5fdff524SSepherosa Ziehau struct rt2661_rx_data {
73*5fdff524SSepherosa Ziehau 	bus_dmamap_t	map;
74*5fdff524SSepherosa Ziehau 	struct mbuf	*m;
75*5fdff524SSepherosa Ziehau };
76*5fdff524SSepherosa Ziehau 
77*5fdff524SSepherosa Ziehau struct rt2661_rx_ring {
78*5fdff524SSepherosa Ziehau 	bus_dma_tag_t		desc_dmat;
79*5fdff524SSepherosa Ziehau 	bus_dma_tag_t		data_dmat;
80*5fdff524SSepherosa Ziehau 	bus_dmamap_t		desc_map;
81*5fdff524SSepherosa Ziehau 	bus_addr_t		physaddr;
82*5fdff524SSepherosa Ziehau 	struct rt2661_rx_desc	*desc;
83*5fdff524SSepherosa Ziehau 	struct rt2661_rx_data	*data;
84*5fdff524SSepherosa Ziehau 	int			count;
85*5fdff524SSepherosa Ziehau 	int			cur;
86*5fdff524SSepherosa Ziehau 	int			next;
87*5fdff524SSepherosa Ziehau };
88*5fdff524SSepherosa Ziehau 
89*5fdff524SSepherosa Ziehau struct rt2661_node {
90*5fdff524SSepherosa Ziehau 	struct ieee80211_node	ni;
91*5fdff524SSepherosa Ziehau 	struct ral_rssadapt	rssadapt;
92*5fdff524SSepherosa Ziehau };
93*5fdff524SSepherosa Ziehau 
94*5fdff524SSepherosa Ziehau struct rt2661_softc {
95*5fdff524SSepherosa Ziehau 	struct ieee80211com		sc_ic;
96*5fdff524SSepherosa Ziehau 	bus_space_tag_t			sc_st;
97*5fdff524SSepherosa Ziehau 	bus_space_handle_t		sc_sh;
98*5fdff524SSepherosa Ziehau 	device_t			sc_dev;
99*5fdff524SSepherosa Ziehau 
100*5fdff524SSepherosa Ziehau 	int				sc_irq_rid;
101*5fdff524SSepherosa Ziehau 	struct resource			*sc_irq;
102*5fdff524SSepherosa Ziehau 	void				*sc_ih;
103*5fdff524SSepherosa Ziehau 
104*5fdff524SSepherosa Ziehau 	int				(*sc_newstate)(struct ieee80211com *,
105*5fdff524SSepherosa Ziehau 					    enum ieee80211_state, int);
106*5fdff524SSepherosa Ziehau 
107*5fdff524SSepherosa Ziehau 	struct callout			scan_ch;
108*5fdff524SSepherosa Ziehau 	struct callout			rssadapt_ch;
109*5fdff524SSepherosa Ziehau 
110*5fdff524SSepherosa Ziehau 	int				sc_tx_timer;
111*5fdff524SSepherosa Ziehau 
112*5fdff524SSepherosa Ziehau 	struct ieee80211_channel	*sc_curchan;
113*5fdff524SSepherosa Ziehau 
114*5fdff524SSepherosa Ziehau 	uint8_t				rf_rev;
115*5fdff524SSepherosa Ziehau 
116*5fdff524SSepherosa Ziehau 	uint8_t				rfprog;
117*5fdff524SSepherosa Ziehau 	uint8_t				rffreq;
118*5fdff524SSepherosa Ziehau 
119*5fdff524SSepherosa Ziehau 	struct rt2661_tx_ring		txq[4];
120*5fdff524SSepherosa Ziehau 	struct rt2661_tx_ring		mgtq;
121*5fdff524SSepherosa Ziehau 	struct rt2661_rx_ring		rxq;
122*5fdff524SSepherosa Ziehau 
123*5fdff524SSepherosa Ziehau 	uint32_t			rf_regs[4];
124*5fdff524SSepherosa Ziehau 	int8_t				txpow[38];
125*5fdff524SSepherosa Ziehau 
126*5fdff524SSepherosa Ziehau 	struct {
127*5fdff524SSepherosa Ziehau 		uint8_t	reg;
128*5fdff524SSepherosa Ziehau 		uint8_t	val;
129*5fdff524SSepherosa Ziehau 	}				bbp_prom[16];
130*5fdff524SSepherosa Ziehau 
131*5fdff524SSepherosa Ziehau 	int				hw_radio;
132*5fdff524SSepherosa Ziehau 	int				rx_ant;
133*5fdff524SSepherosa Ziehau 	int				tx_ant;
134*5fdff524SSepherosa Ziehau 	int				nb_ant;
135*5fdff524SSepherosa Ziehau 	int				ext_2ghz_lna;
136*5fdff524SSepherosa Ziehau 	int				ext_5ghz_lna;
137*5fdff524SSepherosa Ziehau 	int				rssi_2ghz_corr;
138*5fdff524SSepherosa Ziehau 	int				rssi_5ghz_corr;
139*5fdff524SSepherosa Ziehau 
140*5fdff524SSepherosa Ziehau 	uint8_t				bbp18;
141*5fdff524SSepherosa Ziehau 	uint8_t				bbp21;
142*5fdff524SSepherosa Ziehau 	uint8_t				bbp22;
143*5fdff524SSepherosa Ziehau 	uint8_t				bbp16;
144*5fdff524SSepherosa Ziehau 	uint8_t				bbp17;
145*5fdff524SSepherosa Ziehau 	uint8_t				bbp64;
146*5fdff524SSepherosa Ziehau 
147*5fdff524SSepherosa Ziehau 	int				dwelltime;
148*5fdff524SSepherosa Ziehau 
149*5fdff524SSepherosa Ziehau 	struct bpf_if			*sc_drvbpf;
150*5fdff524SSepherosa Ziehau 
151*5fdff524SSepherosa Ziehau 	union {
152*5fdff524SSepherosa Ziehau 		struct rt2661_rx_radiotap_header th;
153*5fdff524SSepherosa Ziehau 		uint8_t	pad[64];
154*5fdff524SSepherosa Ziehau 	}				sc_rxtapu;
155*5fdff524SSepherosa Ziehau #define sc_rxtap	sc_rxtapu.th
156*5fdff524SSepherosa Ziehau 	int				sc_rxtap_len;
157*5fdff524SSepherosa Ziehau 
158*5fdff524SSepherosa Ziehau 	union {
159*5fdff524SSepherosa Ziehau 		struct rt2661_tx_radiotap_header th;
160*5fdff524SSepherosa Ziehau 		uint8_t	pad[64];
161*5fdff524SSepherosa Ziehau 	}				sc_txtapu;
162*5fdff524SSepherosa Ziehau #define sc_txtap	sc_txtapu.th
163*5fdff524SSepherosa Ziehau 	int				sc_txtap_len;
164*5fdff524SSepherosa Ziehau 
165*5fdff524SSepherosa Ziehau 	struct sysctl_ctx_list		sysctl_ctx;
166*5fdff524SSepherosa Ziehau 	struct sysctl_oid		*sysctl_tree;
167*5fdff524SSepherosa Ziehau };
168*5fdff524SSepherosa Ziehau 
169*5fdff524SSepherosa Ziehau int	rt2661_attach(device_t, int);
170*5fdff524SSepherosa Ziehau int	rt2661_detach(void *);
171*5fdff524SSepherosa Ziehau void	rt2661_shutdown(void *);
172*5fdff524SSepherosa Ziehau void	rt2661_suspend(void *);
173*5fdff524SSepherosa Ziehau void	rt2661_resume(void *);
174