xref: /onnv-gate/usr/src/uts/common/io/rwd/rt2661_var.h (revision 9983:660985e98e06)
1*9983SFei.Feng@Sun.COM /*
2*9983SFei.Feng@Sun.COM  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
3*9983SFei.Feng@Sun.COM  * Use is subject to license terms.
4*9983SFei.Feng@Sun.COM  */
5*9983SFei.Feng@Sun.COM 
6*9983SFei.Feng@Sun.COM /*
7*9983SFei.Feng@Sun.COM  * Copyright (c) 2006
8*9983SFei.Feng@Sun.COM  *	Damien Bergamini <damien.bergamini@free.fr>
9*9983SFei.Feng@Sun.COM  *
10*9983SFei.Feng@Sun.COM  * Permission to use, copy, modify, and distribute this software for any
11*9983SFei.Feng@Sun.COM  * purpose with or without fee is hereby granted, provided that the above
12*9983SFei.Feng@Sun.COM  * copyright notice and this permission notice appear in all copies.
13*9983SFei.Feng@Sun.COM  *
14*9983SFei.Feng@Sun.COM  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
15*9983SFei.Feng@Sun.COM  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
16*9983SFei.Feng@Sun.COM  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
17*9983SFei.Feng@Sun.COM  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
18*9983SFei.Feng@Sun.COM  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
19*9983SFei.Feng@Sun.COM  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
20*9983SFei.Feng@Sun.COM  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21*9983SFei.Feng@Sun.COM  */
22*9983SFei.Feng@Sun.COM 
23*9983SFei.Feng@Sun.COM #ifndef	_RT2661_VAR_H
24*9983SFei.Feng@Sun.COM #define	_RT2661_VAR_H
25*9983SFei.Feng@Sun.COM 
26*9983SFei.Feng@Sun.COM #ifdef __cplusplus
27*9983SFei.Feng@Sun.COM extern "C" {
28*9983SFei.Feng@Sun.COM #endif
29*9983SFei.Feng@Sun.COM 
30*9983SFei.Feng@Sun.COM struct dma_area {
31*9983SFei.Feng@Sun.COM 	ddi_acc_handle_t	acc_hdl;	/* handle for memory */
32*9983SFei.Feng@Sun.COM 	caddr_t			mem_va;		/* CPU VA of memory */
33*9983SFei.Feng@Sun.COM 	uint32_t		nslots;		/* number of slots */
34*9983SFei.Feng@Sun.COM 	uint32_t		size;		/* size per slot */
35*9983SFei.Feng@Sun.COM 	size_t			alength;	/* allocated size */
36*9983SFei.Feng@Sun.COM 
37*9983SFei.Feng@Sun.COM 	ddi_dma_handle_t	dma_hdl;	/* DMA handle */
38*9983SFei.Feng@Sun.COM 	offset_t		offset;		/* relative to handle */
39*9983SFei.Feng@Sun.COM 	ddi_dma_cookie_t	cookie;		/* associated cookie */
40*9983SFei.Feng@Sun.COM 	uint32_t		ncookies;	/* must be 1 */
41*9983SFei.Feng@Sun.COM 	uint32_t		token;		/* arbitrary identifier */
42*9983SFei.Feng@Sun.COM };
43*9983SFei.Feng@Sun.COM 
44*9983SFei.Feng@Sun.COM struct rt2661_tx_data {
45*9983SFei.Feng@Sun.COM 	struct dma_area		txdata_dma;
46*9983SFei.Feng@Sun.COM 	caddr_t			buf;
47*9983SFei.Feng@Sun.COM 	uint32_t		paddr;
48*9983SFei.Feng@Sun.COM 	struct ieee80211_node	*ni;
49*9983SFei.Feng@Sun.COM };
50*9983SFei.Feng@Sun.COM 
51*9983SFei.Feng@Sun.COM struct rt2661_tx_ring {
52*9983SFei.Feng@Sun.COM 	struct dma_area		txdesc_dma;
53*9983SFei.Feng@Sun.COM 	uint32_t		paddr;
54*9983SFei.Feng@Sun.COM 	struct rt2661_tx_desc	*desc;
55*9983SFei.Feng@Sun.COM 	struct rt2661_tx_data	*data;
56*9983SFei.Feng@Sun.COM 	int			count;
57*9983SFei.Feng@Sun.COM 	int			queued;
58*9983SFei.Feng@Sun.COM 	int			cur;
59*9983SFei.Feng@Sun.COM 	int			next;
60*9983SFei.Feng@Sun.COM 	int			stat;
61*9983SFei.Feng@Sun.COM };
62*9983SFei.Feng@Sun.COM 
63*9983SFei.Feng@Sun.COM struct rt2661_rx_data {
64*9983SFei.Feng@Sun.COM 	struct dma_area	rxdata_dma;
65*9983SFei.Feng@Sun.COM 	caddr_t		buf;
66*9983SFei.Feng@Sun.COM 	uint32_t	paddr;
67*9983SFei.Feng@Sun.COM };
68*9983SFei.Feng@Sun.COM 
69*9983SFei.Feng@Sun.COM struct rt2661_rx_ring {
70*9983SFei.Feng@Sun.COM 	struct dma_area		rxdesc_dma;
71*9983SFei.Feng@Sun.COM 	uint32_t		paddr;
72*9983SFei.Feng@Sun.COM 	struct rt2661_rx_desc	*desc;
73*9983SFei.Feng@Sun.COM 	struct rt2661_rx_data	*data;
74*9983SFei.Feng@Sun.COM 	int			count;
75*9983SFei.Feng@Sun.COM 	int			cur;
76*9983SFei.Feng@Sun.COM 	int			next;
77*9983SFei.Feng@Sun.COM };
78*9983SFei.Feng@Sun.COM 
79*9983SFei.Feng@Sun.COM struct rt2661_amrr {
80*9983SFei.Feng@Sun.COM 	uint_t	amrr_min_success_threshold;
81*9983SFei.Feng@Sun.COM 	uint_t	amrr_max_success_threshold;
82*9983SFei.Feng@Sun.COM };
83*9983SFei.Feng@Sun.COM 
84*9983SFei.Feng@Sun.COM struct rt2661_amrr_node {
85*9983SFei.Feng@Sun.COM 	int	amn_success;
86*9983SFei.Feng@Sun.COM 	int	amn_recovery;
87*9983SFei.Feng@Sun.COM 	int	amn_success_threshold;
88*9983SFei.Feng@Sun.COM 	int	amn_txcnt;
89*9983SFei.Feng@Sun.COM 	int	amn_retrycnt;
90*9983SFei.Feng@Sun.COM };
91*9983SFei.Feng@Sun.COM 
92*9983SFei.Feng@Sun.COM struct rt2661_node {
93*9983SFei.Feng@Sun.COM 	struct ieee80211_node		ni;
94*9983SFei.Feng@Sun.COM 	struct rt2661_amrr_node		amn;
95*9983SFei.Feng@Sun.COM };
96*9983SFei.Feng@Sun.COM 
97*9983SFei.Feng@Sun.COM struct rt2661_softc {
98*9983SFei.Feng@Sun.COM 	struct ieee80211com	sc_ic;
99*9983SFei.Feng@Sun.COM 	dev_info_t		*sc_dev;
100*9983SFei.Feng@Sun.COM 
101*9983SFei.Feng@Sun.COM 	/* ddi reg handler */
102*9983SFei.Feng@Sun.COM 	ddi_acc_handle_t	sc_cfg_handle;
103*9983SFei.Feng@Sun.COM 	caddr_t			sc_cfg_base;
104*9983SFei.Feng@Sun.COM 
105*9983SFei.Feng@Sun.COM 	/* ddi i/o handler */
106*9983SFei.Feng@Sun.COM 	ddi_acc_handle_t	sc_io_handle;
107*9983SFei.Feng@Sun.COM 	caddr_t			sc_io_base;
108*9983SFei.Feng@Sun.COM 
109*9983SFei.Feng@Sun.COM 	uint16_t		sc_cachelsz;
110*9983SFei.Feng@Sun.COM 	uint32_t		sc_dmabuf_size;
111*9983SFei.Feng@Sun.COM 
112*9983SFei.Feng@Sun.COM 	struct rt2661_amrr	amrr;
113*9983SFei.Feng@Sun.COM 
114*9983SFei.Feng@Sun.COM 	struct rt2661_tx_ring	txq[4];
115*9983SFei.Feng@Sun.COM 	struct rt2661_tx_ring	mgtq;
116*9983SFei.Feng@Sun.COM 	struct rt2661_rx_ring	rxq;
117*9983SFei.Feng@Sun.COM 
118*9983SFei.Feng@Sun.COM 	/* interrupt */
119*9983SFei.Feng@Sun.COM 	ddi_iblock_cookie_t	sc_iblock;
120*9983SFei.Feng@Sun.COM 	ddi_softint_handle_t	sc_softintr_hdl;
121*9983SFei.Feng@Sun.COM 	ddi_intr_handle_t	*sc_intr_htable;
122*9983SFei.Feng@Sun.COM 	uint_t			sc_intr_pri;
123*9983SFei.Feng@Sun.COM 
124*9983SFei.Feng@Sun.COM 	kmutex_t		sc_genlock;
125*9983SFei.Feng@Sun.COM 	kmutex_t		sc_txlock;
126*9983SFei.Feng@Sun.COM 	kmutex_t		sc_rxlock;
127*9983SFei.Feng@Sun.COM 
128*9983SFei.Feng@Sun.COM 	int			sc_tx_timer;
129*9983SFei.Feng@Sun.COM 	uint32_t		sc_rx_pend;
130*9983SFei.Feng@Sun.COM 	timeout_id_t		sc_scan_id;
131*9983SFei.Feng@Sun.COM 	timeout_id_t		sc_rssadapt_id;
132*9983SFei.Feng@Sun.COM 	timeout_id_t		sc_stat_id;
133*9983SFei.Feng@Sun.COM 	enum ieee80211_state	sc_ostate;
134*9983SFei.Feng@Sun.COM 
135*9983SFei.Feng@Sun.COM 	struct ieee80211_channel *sc_curchan;
136*9983SFei.Feng@Sun.COM 
137*9983SFei.Feng@Sun.COM 	uint8_t			rf_rev;
138*9983SFei.Feng@Sun.COM 	uint8_t			rfprog;
139*9983SFei.Feng@Sun.COM 	uint8_t			rffreq;
140*9983SFei.Feng@Sun.COM 
141*9983SFei.Feng@Sun.COM 	uint32_t		rf_regs[4];
142*9983SFei.Feng@Sun.COM 	int8_t			txpow[38];
143*9983SFei.Feng@Sun.COM 
144*9983SFei.Feng@Sun.COM 	struct {
145*9983SFei.Feng@Sun.COM 		uint8_t	reg;
146*9983SFei.Feng@Sun.COM 		uint8_t	val;
147*9983SFei.Feng@Sun.COM 	}			bbp_prom[16];
148*9983SFei.Feng@Sun.COM 
149*9983SFei.Feng@Sun.COM 
150*9983SFei.Feng@Sun.COM 	int			hw_radio;
151*9983SFei.Feng@Sun.COM 	int			rx_ant;
152*9983SFei.Feng@Sun.COM 	int			tx_ant;
153*9983SFei.Feng@Sun.COM 	int			nb_ant;
154*9983SFei.Feng@Sun.COM 	int			ext_2ghz_lna;
155*9983SFei.Feng@Sun.COM 	int			ext_5ghz_lna;
156*9983SFei.Feng@Sun.COM 	int			rssi_2ghz_corr;
157*9983SFei.Feng@Sun.COM 	int			rssi_5ghz_corr;
158*9983SFei.Feng@Sun.COM 
159*9983SFei.Feng@Sun.COM 	int			ncalls;
160*9983SFei.Feng@Sun.COM 	int			avg_rssi;
161*9983SFei.Feng@Sun.COM 	int			sifs;
162*9983SFei.Feng@Sun.COM 	uint8_t			bbp18;
163*9983SFei.Feng@Sun.COM 	uint8_t			bbp21;
164*9983SFei.Feng@Sun.COM 	uint8_t			bbp22;
165*9983SFei.Feng@Sun.COM 	uint8_t			bbp16;
166*9983SFei.Feng@Sun.COM 	uint8_t			bbp17;
167*9983SFei.Feng@Sun.COM 	uint8_t			bbp64;
168*9983SFei.Feng@Sun.COM 
169*9983SFei.Feng@Sun.COM 	/* kstats */
170*9983SFei.Feng@Sun.COM 	uint32_t		sc_tx_nobuf;
171*9983SFei.Feng@Sun.COM 	uint32_t		sc_rx_nobuf;
172*9983SFei.Feng@Sun.COM 	uint32_t		sc_tx_err;
173*9983SFei.Feng@Sun.COM 	uint32_t		sc_rx_err;
174*9983SFei.Feng@Sun.COM 	uint32_t		sc_tx_retries;
175*9983SFei.Feng@Sun.COM 
176*9983SFei.Feng@Sun.COM 	uint32_t		sc_need_sched;
177*9983SFei.Feng@Sun.COM 	uint32_t		sc_flags;
178*9983SFei.Feng@Sun.COM 	uint32_t		sc_rcr;
179*9983SFei.Feng@Sun.COM 	int			(*sc_newstate)(struct ieee80211com *,
180*9983SFei.Feng@Sun.COM 				    enum ieee80211_state, int);
181*9983SFei.Feng@Sun.COM };
182*9983SFei.Feng@Sun.COM 
183*9983SFei.Feng@Sun.COM #define	RT2661_GLOCK(_sc)		mutex_enter(&(_sc)->sc_genlock)
184*9983SFei.Feng@Sun.COM #define	RT2661_GUNLOCK(_sc)		mutex_exit(&(_sc)->sc_genlock)
185*9983SFei.Feng@Sun.COM 
186*9983SFei.Feng@Sun.COM #define	RT2661_INPUT_RUNNING	(1 << 0)
187*9983SFei.Feng@Sun.COM #define	RT2661_F_RUNNING	(1 << 1)
188*9983SFei.Feng@Sun.COM #define	RT2661_F_SUSPEND	(1 << 2)
189*9983SFei.Feng@Sun.COM #define	RT2661_F_FWLOADED	(1 << 3)
190*9983SFei.Feng@Sun.COM #define	RT2661_F_QUIESCE	(1 << 4)
191*9983SFei.Feng@Sun.COM 
192*9983SFei.Feng@Sun.COM #define	RT2661_RCR_PROMISC	(1 << 0)
193*9983SFei.Feng@Sun.COM #define	RT2661_RCR_MULTI	(1 << 1)
194*9983SFei.Feng@Sun.COM 
195*9983SFei.Feng@Sun.COM #define	RT2661_IS_RUNNING(_sc)		(((_sc)->sc_flags & RT2661_F_RUNNING))
196*9983SFei.Feng@Sun.COM #define	RT2661_IS_SUSPEND(_sc)		(((_sc)->sc_flags & RT2661_F_SUSPEND))
197*9983SFei.Feng@Sun.COM #define	RT2661_IS_FWLOADED(_sc)		(((_sc)->sc_flags & RT2661_F_FWLOADED))
198*9983SFei.Feng@Sun.COM #define	RT2661_IS_FASTREBOOT(_sc)	(((_sc)->sc_flags & RT2661_F_QUIESCE))
199*9983SFei.Feng@Sun.COM 
200*9983SFei.Feng@Sun.COM #define	RT2661_DMA_SYNC(area, flag) ((void) ddi_dma_sync((area).dma_hdl,\
201*9983SFei.Feng@Sun.COM 	(area).offset, (area).alength, (flag)))
202*9983SFei.Feng@Sun.COM 
203*9983SFei.Feng@Sun.COM #define	RT2661_SUCCESS		0
204*9983SFei.Feng@Sun.COM #define	RT2661_FAILURE		-1
205*9983SFei.Feng@Sun.COM 
206*9983SFei.Feng@Sun.COM #ifdef __cplusplus
207*9983SFei.Feng@Sun.COM }
208*9983SFei.Feng@Sun.COM #endif
209*9983SFei.Feng@Sun.COM 
210*9983SFei.Feng@Sun.COM #endif /* _RT2661_VAR_H */
211