xref: /dflybsd-src/sys/dev/netif/re/if_revar.h (revision 5d686fbb360ce2d2b693e6a1c832fd1bcd7c3fa8)
1*5d686fbbSSepherosa Ziehau /*
2*5d686fbbSSepherosa Ziehau  * Copyright (c) 2004
3*5d686fbbSSepherosa Ziehau  *	Joerg Sonnenberger <joerg@bec.de>.  All rights reserved.
4*5d686fbbSSepherosa Ziehau  *
5*5d686fbbSSepherosa Ziehau  * Copyright (c) 1997, 1998-2003
6*5d686fbbSSepherosa Ziehau  *	Bill Paul <wpaul@ctr.columbia.edu>.  All rights reserved.
7*5d686fbbSSepherosa Ziehau  *
8*5d686fbbSSepherosa Ziehau  * Redistribution and use in source and binary forms, with or without
9*5d686fbbSSepherosa Ziehau  * modification, are permitted provided that the following conditions
10*5d686fbbSSepherosa Ziehau  * are met:
11*5d686fbbSSepherosa Ziehau  * 1. Redistributions of source code must retain the above copyright
12*5d686fbbSSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer.
13*5d686fbbSSepherosa Ziehau  * 2. Redistributions in binary form must reproduce the above copyright
14*5d686fbbSSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer in the
15*5d686fbbSSepherosa Ziehau  *    documentation and/or other materials provided with the distribution.
16*5d686fbbSSepherosa Ziehau  * 3. All advertising materials mentioning features or use of this software
17*5d686fbbSSepherosa Ziehau  *    must display the following acknowledgement:
18*5d686fbbSSepherosa Ziehau  *	This product includes software developed by Bill Paul.
19*5d686fbbSSepherosa Ziehau  * 4. Neither the name of the author nor the names of any co-contributors
20*5d686fbbSSepherosa Ziehau  *    may be used to endorse or promote products derived from this software
21*5d686fbbSSepherosa Ziehau  *    without specific prior written permission.
22*5d686fbbSSepherosa Ziehau  *
23*5d686fbbSSepherosa Ziehau  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
24*5d686fbbSSepherosa Ziehau  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25*5d686fbbSSepherosa Ziehau  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26*5d686fbbSSepherosa Ziehau  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
27*5d686fbbSSepherosa Ziehau  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28*5d686fbbSSepherosa Ziehau  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29*5d686fbbSSepherosa Ziehau  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30*5d686fbbSSepherosa Ziehau  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31*5d686fbbSSepherosa Ziehau  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32*5d686fbbSSepherosa Ziehau  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
33*5d686fbbSSepherosa Ziehau  * THE POSSIBILITY OF SUCH DAMAGE.
34*5d686fbbSSepherosa Ziehau  *
35*5d686fbbSSepherosa Ziehau  * $FreeBSD: src/sys/pci/if_rlreg.h,v 1.42 2004/05/24 19:39:23 jhb Exp $
36*5d686fbbSSepherosa Ziehau  * $DragonFly: src/sys/dev/netif/re/if_revar.h,v 1.1 2006/11/14 13:35:49 sephe Exp $
37*5d686fbbSSepherosa Ziehau  */
38*5d686fbbSSepherosa Ziehau 
39*5d686fbbSSepherosa Ziehau struct re_chain_data {
40*5d686fbbSSepherosa Ziehau 	uint16_t		cur_rx;
41*5d686fbbSSepherosa Ziehau 	caddr_t			re_rx_buf;
42*5d686fbbSSepherosa Ziehau 	caddr_t			re_rx_buf_ptr;
43*5d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_rx_dmamap;
44*5d686fbbSSepherosa Ziehau 
45*5d686fbbSSepherosa Ziehau 	struct mbuf		*re_tx_chain[RE_TX_LIST_CNT];
46*5d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_tx_dmamap[RE_TX_LIST_CNT];
47*5d686fbbSSepherosa Ziehau 	uint8_t			last_tx;
48*5d686fbbSSepherosa Ziehau 	uint8_t			cur_tx;
49*5d686fbbSSepherosa Ziehau };
50*5d686fbbSSepherosa Ziehau 
51*5d686fbbSSepherosa Ziehau #define RE_INC(x)		(x = (x + 1) % RE_TX_LIST_CNT)
52*5d686fbbSSepherosa Ziehau #define RE_CUR_TXADDR(x)	((x->re_cdata.cur_tx * 4) + RE_TXADDR0)
53*5d686fbbSSepherosa Ziehau #define RE_CUR_TXSTAT(x)	((x->re_cdata.cur_tx * 4) + RE_TXSTAT0)
54*5d686fbbSSepherosa Ziehau #define RE_CUR_TXMBUF(x)	(x->re_cdata.re_tx_chain[x->re_cdata.cur_tx])
55*5d686fbbSSepherosa Ziehau #define RE_CUR_DMAMAP(x)	(x->re_cdata.re_tx_dmamap[x->re_cdata.cur_tx])
56*5d686fbbSSepherosa Ziehau #define RE_LAST_TXADDR(x)	((x->re_cdata.last_tx * 4) + RE_TXADDR0)
57*5d686fbbSSepherosa Ziehau #define RE_LAST_TXSTAT(x)	((x->re_cdata.last_tx * 4) + RE_TXSTAT0)
58*5d686fbbSSepherosa Ziehau #define RE_LAST_TXMBUF(x)	(x->re_cdata.re_tx_chain[x->re_cdata.last_tx])
59*5d686fbbSSepherosa Ziehau #define RE_LAST_DMAMAP(x)	(x->re_cdata.re_tx_dmamap[x->re_cdata.last_tx])
60*5d686fbbSSepherosa Ziehau 
61*5d686fbbSSepherosa Ziehau struct re_type {
62*5d686fbbSSepherosa Ziehau 	uint16_t		re_vid;
63*5d686fbbSSepherosa Ziehau 	uint16_t		re_did;
64*5d686fbbSSepherosa Ziehau 	int			re_basetype;
65*5d686fbbSSepherosa Ziehau 	const char		*re_name;
66*5d686fbbSSepherosa Ziehau };
67*5d686fbbSSepherosa Ziehau 
68*5d686fbbSSepherosa Ziehau struct re_hwrev {
69*5d686fbbSSepherosa Ziehau 	uint32_t		re_rev;
70*5d686fbbSSepherosa Ziehau 	int			re_type;
71*5d686fbbSSepherosa Ziehau 	const char		*re_desc;
72*5d686fbbSSepherosa Ziehau };
73*5d686fbbSSepherosa Ziehau 
74*5d686fbbSSepherosa Ziehau #define RE_8139CPLUS		3
75*5d686fbbSSepherosa Ziehau #define RE_8169			4
76*5d686fbbSSepherosa Ziehau 
77*5d686fbbSSepherosa Ziehau #define RE_ISCPLUS(x)		((x)->re_type == RE_8139CPLUS ||	\
78*5d686fbbSSepherosa Ziehau 				 (x)->re_type == RE_8169)
79*5d686fbbSSepherosa Ziehau 
80*5d686fbbSSepherosa Ziehau struct re_softc;
81*5d686fbbSSepherosa Ziehau 
82*5d686fbbSSepherosa Ziehau struct re_dmaload_arg {
83*5d686fbbSSepherosa Ziehau 	struct re_softc		*sc;
84*5d686fbbSSepherosa Ziehau 	int			re_idx;
85*5d686fbbSSepherosa Ziehau 	int			re_maxsegs;
86*5d686fbbSSepherosa Ziehau 	uint32_t		re_flags;
87*5d686fbbSSepherosa Ziehau 	struct re_desc		*re_ring;
88*5d686fbbSSepherosa Ziehau };
89*5d686fbbSSepherosa Ziehau 
90*5d686fbbSSepherosa Ziehau struct re_list_data {
91*5d686fbbSSepherosa Ziehau 	struct mbuf		*re_tx_mbuf[RE_TX_DESC_CNT];
92*5d686fbbSSepherosa Ziehau 	struct mbuf		*re_rx_mbuf[RE_TX_DESC_CNT];
93*5d686fbbSSepherosa Ziehau 	int			re_tx_prodidx;
94*5d686fbbSSepherosa Ziehau 	int			re_rx_prodidx;
95*5d686fbbSSepherosa Ziehau 	int			re_tx_considx;
96*5d686fbbSSepherosa Ziehau 	int			re_tx_free;
97*5d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_tx_dmamap[RE_TX_DESC_CNT];
98*5d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_rx_dmamap[RE_RX_DESC_CNT];
99*5d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_mtag;	/* mbuf mapping tag */
100*5d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_stag;	/* stats mapping tag */
101*5d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_smap;	/* stats map */
102*5d686fbbSSepherosa Ziehau 	struct re_stats		*re_stats;
103*5d686fbbSSepherosa Ziehau 	bus_addr_t		re_stats_addr;
104*5d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_rx_list_tag;
105*5d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_rx_list_map;
106*5d686fbbSSepherosa Ziehau 	struct re_desc		*re_rx_list;
107*5d686fbbSSepherosa Ziehau 	bus_addr_t		re_rx_list_addr;
108*5d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_tx_list_tag;
109*5d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_tx_list_map;
110*5d686fbbSSepherosa Ziehau 	struct re_desc		*re_tx_list;
111*5d686fbbSSepherosa Ziehau 	bus_addr_t		re_tx_list_addr;
112*5d686fbbSSepherosa Ziehau };
113*5d686fbbSSepherosa Ziehau 
114*5d686fbbSSepherosa Ziehau struct re_softc {
115*5d686fbbSSepherosa Ziehau 	struct arpcom		arpcom;		/* interface info */
116*5d686fbbSSepherosa Ziehau #ifdef RE_DIAG
117*5d686fbbSSepherosa Ziehau 	device_t		re_dev;
118*5d686fbbSSepherosa Ziehau #endif
119*5d686fbbSSepherosa Ziehau 	bus_space_handle_t	re_bhandle;	/* bus space handle */
120*5d686fbbSSepherosa Ziehau 	bus_space_tag_t		re_btag;	/* bus space tag */
121*5d686fbbSSepherosa Ziehau 	struct resource		*re_res;
122*5d686fbbSSepherosa Ziehau 	struct resource		*re_irq;
123*5d686fbbSSepherosa Ziehau 	void			*re_intrhand;
124*5d686fbbSSepherosa Ziehau 	device_t		re_miibus;
125*5d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_parent_tag;
126*5d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_tag;
127*5d686fbbSSepherosa Ziehau 	uint8_t			re_type;
128*5d686fbbSSepherosa Ziehau 	int			re_eecmd_read;
129*5d686fbbSSepherosa Ziehau 	uint8_t			re_stats_no_timeout;
130*5d686fbbSSepherosa Ziehau 	int			re_txthresh;
131*5d686fbbSSepherosa Ziehau 	struct re_chain_data	re_cdata;
132*5d686fbbSSepherosa Ziehau 	struct re_list_data	re_ldata;
133*5d686fbbSSepherosa Ziehau 	struct callout		re_timer;
134*5d686fbbSSepherosa Ziehau 	struct mbuf		*re_head;
135*5d686fbbSSepherosa Ziehau 	struct mbuf		*re_tail;
136*5d686fbbSSepherosa Ziehau 	uint32_t		re_hwrev;
137*5d686fbbSSepherosa Ziehau 	uint32_t		re_rxlenmask;
138*5d686fbbSSepherosa Ziehau 	int			re_txstart;
139*5d686fbbSSepherosa Ziehau 	int			re_testmode;
140*5d686fbbSSepherosa Ziehau 	int			suspended;	/* 0 = normal  1 = suspended */
141*5d686fbbSSepherosa Ziehau 	int			re_link;
142*5d686fbbSSepherosa Ziehau 	int			re_eewidth;
143*5d686fbbSSepherosa Ziehau #ifdef DEVICE_POLLING
144*5d686fbbSSepherosa Ziehau 	int			rxcycles;
145*5d686fbbSSepherosa Ziehau #endif
146*5d686fbbSSepherosa Ziehau 
147*5d686fbbSSepherosa Ziehau 	struct sysctl_ctx_list	re_sysctl_ctx;
148*5d686fbbSSepherosa Ziehau 	struct sysctl_oid	*re_sysctl_tree;
149*5d686fbbSSepherosa Ziehau 	uint16_t		re_intrs;
150*5d686fbbSSepherosa Ziehau 	uint16_t		re_tx_ack;
151*5d686fbbSSepherosa Ziehau 
152*5d686fbbSSepherosa Ziehau #ifndef BURN_BRIDGES
153*5d686fbbSSepherosa Ziehau 	uint32_t		saved_maps[5];	/* pci data */
154*5d686fbbSSepherosa Ziehau 	uint32_t		saved_biosaddr;
155*5d686fbbSSepherosa Ziehau 	uint8_t			saved_intline;
156*5d686fbbSSepherosa Ziehau 	uint8_t			saved_cachelnsz;
157*5d686fbbSSepherosa Ziehau 	uint8_t			saved_lattimer;
158*5d686fbbSSepherosa Ziehau #endif
159*5d686fbbSSepherosa Ziehau };
160*5d686fbbSSepherosa Ziehau 
161*5d686fbbSSepherosa Ziehau #define RE_TX_MODERATION_IS_ENABLED(sc)			\
162*5d686fbbSSepherosa Ziehau 	((sc)->re_tx_ack == RE_ISR_TIMEOUT_EXPIRED)
163*5d686fbbSSepherosa Ziehau 
164*5d686fbbSSepherosa Ziehau #define RE_DISABLE_TX_MODERATION(sc) do {		\
165*5d686fbbSSepherosa Ziehau 	(sc)->re_tx_ack = RE_ISR_TX_OK;			\
166*5d686fbbSSepherosa Ziehau 	(sc)->re_intrs = RE_INTRS | RE_ISR_TX_OK;	\
167*5d686fbbSSepherosa Ziehau } while (0)
168*5d686fbbSSepherosa Ziehau 
169*5d686fbbSSepherosa Ziehau #define RE_ENABLE_TX_MODERATION(sc) do {		\
170*5d686fbbSSepherosa Ziehau 	(sc)->re_tx_ack = RE_ISR_TIMEOUT_EXPIRED;	\
171*5d686fbbSSepherosa Ziehau 	(sc)->re_intrs = RE_INTRS;			\
172*5d686fbbSSepherosa Ziehau } while (0)
173*5d686fbbSSepherosa Ziehau 
174*5d686fbbSSepherosa Ziehau /*
175*5d686fbbSSepherosa Ziehau  * register space access macros
176*5d686fbbSSepherosa Ziehau  */
177*5d686fbbSSepherosa Ziehau #define CSR_WRITE_STREAM_4(sc, reg, val)	\
178*5d686fbbSSepherosa Ziehau 	bus_space_write_stream_4(sc->re_btag, sc->re_bhandle, reg, val)
179*5d686fbbSSepherosa Ziehau #define CSR_WRITE_4(sc, reg, val)	\
180*5d686fbbSSepherosa Ziehau 	bus_space_write_4(sc->re_btag, sc->re_bhandle, reg, val)
181*5d686fbbSSepherosa Ziehau #define CSR_WRITE_2(sc, reg, val)	\
182*5d686fbbSSepherosa Ziehau 	bus_space_write_2(sc->re_btag, sc->re_bhandle, reg, val)
183*5d686fbbSSepherosa Ziehau #define CSR_WRITE_1(sc, reg, val)	\
184*5d686fbbSSepherosa Ziehau 	bus_space_write_1(sc->re_btag, sc->re_bhandle, reg, val)
185*5d686fbbSSepherosa Ziehau 
186*5d686fbbSSepherosa Ziehau #define CSR_READ_4(sc, reg)		\
187*5d686fbbSSepherosa Ziehau 	bus_space_read_4(sc->re_btag, sc->re_bhandle, reg)
188*5d686fbbSSepherosa Ziehau #define CSR_READ_2(sc, reg)		\
189*5d686fbbSSepherosa Ziehau 	bus_space_read_2(sc->re_btag, sc->re_bhandle, reg)
190*5d686fbbSSepherosa Ziehau #define CSR_READ_1(sc, reg)		\
191*5d686fbbSSepherosa Ziehau 	bus_space_read_1(sc->re_btag, sc->re_bhandle, reg)
192*5d686fbbSSepherosa Ziehau 
193*5d686fbbSSepherosa Ziehau #define CSR_SETBIT_1(sc, reg, val)	\
194*5d686fbbSSepherosa Ziehau 	CSR_WRITE_1(sc, reg, CSR_READ_1(sc, reg) | (val))
195*5d686fbbSSepherosa Ziehau #define CSR_CLRBIT_1(sc, reg, val)	\
196*5d686fbbSSepherosa Ziehau 	CSR_WRITE_1(sc, reg, CSR_READ_1(sc, reg) & ~(val))
197