xref: /dflybsd-src/sys/dev/netif/re/if_revar.h (revision 80492964331d3ad781e1ff17fe61faef902df333)
15d686fbbSSepherosa Ziehau /*
25d686fbbSSepherosa Ziehau  * Copyright (c) 2004
35d686fbbSSepherosa Ziehau  *	Joerg Sonnenberger <joerg@bec.de>.  All rights reserved.
45d686fbbSSepherosa Ziehau  *
55d686fbbSSepherosa Ziehau  * Copyright (c) 1997, 1998-2003
65d686fbbSSepherosa Ziehau  *	Bill Paul <wpaul@ctr.columbia.edu>.  All rights reserved.
75d686fbbSSepherosa Ziehau  *
85d686fbbSSepherosa Ziehau  * Redistribution and use in source and binary forms, with or without
95d686fbbSSepherosa Ziehau  * modification, are permitted provided that the following conditions
105d686fbbSSepherosa Ziehau  * are met:
115d686fbbSSepherosa Ziehau  * 1. Redistributions of source code must retain the above copyright
125d686fbbSSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer.
135d686fbbSSepherosa Ziehau  * 2. Redistributions in binary form must reproduce the above copyright
145d686fbbSSepherosa Ziehau  *    notice, this list of conditions and the following disclaimer in the
155d686fbbSSepherosa Ziehau  *    documentation and/or other materials provided with the distribution.
165d686fbbSSepherosa Ziehau  * 3. All advertising materials mentioning features or use of this software
175d686fbbSSepherosa Ziehau  *    must display the following acknowledgement:
185d686fbbSSepherosa Ziehau  *	This product includes software developed by Bill Paul.
195d686fbbSSepherosa Ziehau  * 4. Neither the name of the author nor the names of any co-contributors
205d686fbbSSepherosa Ziehau  *    may be used to endorse or promote products derived from this software
215d686fbbSSepherosa Ziehau  *    without specific prior written permission.
225d686fbbSSepherosa Ziehau  *
235d686fbbSSepherosa Ziehau  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
245d686fbbSSepherosa Ziehau  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
255d686fbbSSepherosa Ziehau  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
265d686fbbSSepherosa Ziehau  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
275d686fbbSSepherosa Ziehau  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
285d686fbbSSepherosa Ziehau  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
295d686fbbSSepherosa Ziehau  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
305d686fbbSSepherosa Ziehau  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
315d686fbbSSepherosa Ziehau  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
325d686fbbSSepherosa Ziehau  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
335d686fbbSSepherosa Ziehau  * THE POSSIBILITY OF SUCH DAMAGE.
345d686fbbSSepherosa Ziehau  *
355d686fbbSSepherosa Ziehau  * $FreeBSD: src/sys/pci/if_rlreg.h,v 1.42 2004/05/24 19:39:23 jhb Exp $
365d686fbbSSepherosa Ziehau  */
375d686fbbSSepherosa Ziehau 
3870be79a4SSepherosa Ziehau #define RE_RX_DESC_CNT_DEF	256
3970be79a4SSepherosa Ziehau #define RE_TX_DESC_CNT_DEF	256
4053d4588aSSepherosa Ziehau #define RE_RX_DESC_CNT_MAX	1024
4153d4588aSSepherosa Ziehau #define RE_TX_DESC_CNT_MAX	1024
4253d4588aSSepherosa Ziehau 
4353d4588aSSepherosa Ziehau #define RE_RX_LIST_SZ(sc)	((sc)->re_rx_desc_cnt * sizeof(struct re_desc))
4453d4588aSSepherosa Ziehau #define RE_TX_LIST_SZ(sc)	((sc)->re_tx_desc_cnt * sizeof(struct re_desc))
45998e7079SSepherosa Ziehau #define RE_RING_ALIGN		256
46998e7079SSepherosa Ziehau #define RE_IFQ_MAXLEN		512
47998e7079SSepherosa Ziehau #define RE_MAXSEGS		16
486525b950SSepherosa Ziehau #define RE_TXDESC_SPARE		5
49a7d57e62SSepherosa Ziehau #define RE_JBUF_COUNT(sc)	(((sc)->re_rx_desc_cnt * 3) / 2)
50998e7079SSepherosa Ziehau 
5153d4588aSSepherosa Ziehau #define RE_RXDESC_INC(sc, x)	(x = (x + 1) % (sc)->re_rx_desc_cnt)
5253d4588aSSepherosa Ziehau #define RE_TXDESC_INC(sc, x)	(x = (x + 1) % (sc)->re_tx_desc_cnt)
53998e7079SSepherosa Ziehau #define RE_OWN(x)		(le32toh((x)->re_cmdstat) & RE_RDESC_STAT_OWN)
54e5a5a436SSepherosa Ziehau #define RE_RXBYTES(x)		(le32toh((x)->re_cmdstat) & RE_RDESC_STAT_GFRAGLEN)
55998e7079SSepherosa Ziehau #define RE_PKTSZ(x)		((x)/* >> 3*/)
56998e7079SSepherosa Ziehau 
57998e7079SSepherosa Ziehau #define RE_ADDR_LO(y)		((uint64_t) (y) & 0xFFFFFFFF)
58998e7079SSepherosa Ziehau #define RE_ADDR_HI(y)		((uint64_t) (y) >> 32)
59998e7079SSepherosa Ziehau 
60b0c15aadSSepherosa Ziehau #define RE_MTU_6K		(6 * 1024)
61b0c15aadSSepherosa Ziehau #define RE_MTU_9K		(9 * 1024)
62b0c15aadSSepherosa Ziehau 
63b0c15aadSSepherosa Ziehau #define RE_ETHER_EXTRA		(ETHER_HDR_LEN + ETHER_CRC_LEN + EVL_ENCAPLEN)
64b0c15aadSSepherosa Ziehau #define RE_FRAMELEN(mtu)	((mtu) + RE_ETHER_EXTRA)
65b0c15aadSSepherosa Ziehau 
66b0c15aadSSepherosa Ziehau #define RE_FRAMELEN_6K		RE_FRAMELEN(RE_MTU_6K)
67b0c15aadSSepherosa Ziehau #define RE_FRAMELEN_9K		RE_FRAMELEN(RE_MTU_9K)
68b0c15aadSSepherosa Ziehau #define RE_FRAMELEN_MAX		RE_FRAMELEN_9K
69b0c15aadSSepherosa Ziehau 
70adfa5aa6SSepherosa Ziehau #define RE_RXBUF_ALIGN		8
71adfa5aa6SSepherosa Ziehau #define RE_JBUF_SIZE		roundup2(RE_FRAMELEN_MAX, RE_RXBUF_ALIGN)
72a7d57e62SSepherosa Ziehau 
73a7d57e62SSepherosa Ziehau struct re_softc;
74a7d57e62SSepherosa Ziehau struct re_jbuf {
75a7d57e62SSepherosa Ziehau 	struct re_softc 	*re_sc;
76a7d57e62SSepherosa Ziehau 	int			re_inuse;
77a7d57e62SSepherosa Ziehau 	int			re_slot;
78a7d57e62SSepherosa Ziehau 	caddr_t			re_buf;
79a7d57e62SSepherosa Ziehau 	bus_addr_t		re_paddr;
80a7d57e62SSepherosa Ziehau 	SLIST_ENTRY(re_jbuf)	re_link;
81a7d57e62SSepherosa Ziehau };
82a7d57e62SSepherosa Ziehau 
835d686fbbSSepherosa Ziehau struct re_list_data {
8453d4588aSSepherosa Ziehau 	struct mbuf		**re_tx_mbuf;
8553d4588aSSepherosa Ziehau 	struct mbuf		**re_rx_mbuf;
8653d4588aSSepherosa Ziehau 	bus_addr_t		*re_rx_paddr;
875d686fbbSSepherosa Ziehau 	int			re_tx_prodidx;
885d686fbbSSepherosa Ziehau 	int			re_rx_prodidx;
895d686fbbSSepherosa Ziehau 	int			re_tx_considx;
905d686fbbSSepherosa Ziehau 	int			re_tx_free;
9153d4588aSSepherosa Ziehau 	bus_dmamap_t		*re_tx_dmamap;
9253d4588aSSepherosa Ziehau 	bus_dmamap_t		*re_rx_dmamap;
933580fc56SSepherosa Ziehau 	bus_dmamap_t		re_rx_spare;
948aaa1e58SSepherosa Ziehau 	bus_dma_tag_t		re_rx_mtag;	/* RX mbuf mapping tag */
958aaa1e58SSepherosa Ziehau 	bus_dma_tag_t		re_tx_mtag;	/* TX mbuf mapping tag */
965d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_stag;	/* stats mapping tag */
975d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_smap;	/* stats map */
985d686fbbSSepherosa Ziehau 	struct re_stats		*re_stats;
995d686fbbSSepherosa Ziehau 	bus_addr_t		re_stats_addr;
1005d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_rx_list_tag;
1015d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_rx_list_map;
1025d686fbbSSepherosa Ziehau 	struct re_desc		*re_rx_list;
1035d686fbbSSepherosa Ziehau 	bus_addr_t		re_rx_list_addr;
1045d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_tx_list_tag;
1055d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_tx_list_map;
1065d686fbbSSepherosa Ziehau 	struct re_desc		*re_tx_list;
1075d686fbbSSepherosa Ziehau 	bus_addr_t		re_tx_list_addr;
108a7d57e62SSepherosa Ziehau 
109a7d57e62SSepherosa Ziehau 	bus_dma_tag_t		re_jpool_tag;
110a7d57e62SSepherosa Ziehau 	bus_dmamap_t		re_jpool_map;
111a7d57e62SSepherosa Ziehau 	caddr_t			re_jpool;
112a7d57e62SSepherosa Ziehau 	struct re_jbuf		*re_jbuf;
113a7d57e62SSepherosa Ziehau 	struct lwkt_serialize	re_jbuf_serializer;
114a7d57e62SSepherosa Ziehau 	SLIST_HEAD(, re_jbuf)	re_jbuf_free;
1155d686fbbSSepherosa Ziehau };
1165d686fbbSSepherosa Ziehau 
1175d686fbbSSepherosa Ziehau struct re_softc {
1185d686fbbSSepherosa Ziehau 	struct arpcom		arpcom;		/* interface info */
119e5a5a436SSepherosa Ziehau 	device_t		dev;
1205d686fbbSSepherosa Ziehau 	bus_space_handle_t	re_bhandle;	/* bus space handle */
1215d686fbbSSepherosa Ziehau 	bus_space_tag_t		re_btag;	/* bus space tag */
122d511b4cfSSepherosa Ziehau 	int			re_res_rid;
123d511b4cfSSepherosa Ziehau 	int			re_res_type;
1245d686fbbSSepherosa Ziehau 	struct resource		*re_res;
1255d686fbbSSepherosa Ziehau 	struct resource		*re_irq;
1265d686fbbSSepherosa Ziehau 	void			*re_intrhand;
1275d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_parent_tag;
1285d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_tag;
1297816ba83SSepherosa Ziehau 	struct ifpoll_compat	re_npoll;
1305d686fbbSSepherosa Ziehau 	struct re_list_data	re_ldata;
131*80492964SSepherosa Ziehau 	void			(*re_start_xmit)(struct re_softc *);
1325d686fbbSSepherosa Ziehau 	struct callout		re_timer;
1335d686fbbSSepherosa Ziehau 	struct mbuf		*re_head;
1345d686fbbSSepherosa Ziehau 	struct mbuf		*re_tail;
1355bed1fbdSSepherosa Ziehau 	uint32_t		re_caps;	/* see RE_C_ */
13653d4588aSSepherosa Ziehau 	int			re_rx_desc_cnt;
13753d4588aSSepherosa Ziehau 	int			re_tx_desc_cnt;
138957a8760SSepherosa Ziehau 	int			re_bus_speed;
1395d686fbbSSepherosa Ziehau 	int			rxcycles;
140a7d57e62SSepherosa Ziehau 	int			re_rxbuf_size;
141a7d57e62SSepherosa Ziehau 	int			(*re_newbuf)(struct re_softc *, int, int);
1424dce912aSTim Bisson 	int			re_irq_type;
1434dce912aSTim Bisson 	int			re_irq_rid;
1445d686fbbSSepherosa Ziehau 
145d4d77345SSepherosa Ziehau 	uint32_t		re_flags;	/* see RE_F_ */
146e5a5a436SSepherosa Ziehau 	int			re_saved_ifflags;
147d4d77345SSepherosa Ziehau 
148*80492964SSepherosa Ziehau 	void			(*re_write_imr)(struct re_softc *, uint32_t);
149*80492964SSepherosa Ziehau 	void			(*re_write_isr)(struct re_softc *, uint32_t);
150*80492964SSepherosa Ziehau 	uint32_t		(*re_read_isr)(struct re_softc *);
151*80492964SSepherosa Ziehau 	uint32_t		re_intrs;
1525d686fbbSSepherosa Ziehau 	uint16_t		re_tx_ack;
1531bdb2a81SSepherosa Ziehau 	uint16_t		re_rx_ack;
154d4d77345SSepherosa Ziehau 	int			re_tx_time;
155d4d77345SSepherosa Ziehau 	int			re_rx_time;
156d4d77345SSepherosa Ziehau 	int			re_sim_time;
157d4d77345SSepherosa Ziehau 	int			re_imtype;	/* see RE_IMTYPE_ */
1585d686fbbSSepherosa Ziehau 
1595d686fbbSSepherosa Ziehau 	uint32_t		saved_maps[5];	/* pci data */
1605d686fbbSSepherosa Ziehau 	uint32_t		saved_biosaddr;
1615d686fbbSSepherosa Ziehau 	uint8_t			saved_intline;
1625d686fbbSSepherosa Ziehau 	uint8_t			saved_cachelnsz;
1635d686fbbSSepherosa Ziehau 	uint8_t			saved_lattimer;
164e5a5a436SSepherosa Ziehau 
165e5a5a436SSepherosa Ziehau 	/*
166e5a5a436SSepherosa Ziehau 	 * Used by Realtek re(4) backend.
167e5a5a436SSepherosa Ziehau 	 */
168e5a5a436SSepherosa Ziehau 	int			re_if_flags;
169e5a5a436SSepherosa Ziehau 	uint8_t			re_type;
170e5a5a436SSepherosa Ziehau 	u_int16_t		re_device_id;
171e5a5a436SSepherosa Ziehau 	u_int8_t		re_hw_supp_now_is_oob_ver;
172e5a5a436SSepherosa Ziehau 	int			max_jumbo_frame_size;
173e5a5a436SSepherosa Ziehau 	int			re_rx_mbuf_sz;
174e5a5a436SSepherosa Ziehau 	u_int8_t		RequireAdcBiasPatch;
175e5a5a436SSepherosa Ziehau 	u_int16_t		AdcBiasPatchIoffset;
176e5a5a436SSepherosa Ziehau 	u_int16_t		SwrCnt1msIni;
177e5a5a436SSepherosa Ziehau 	u_int8_t		RequireAdjustUpsTxLinkPulseTiming;
178e5a5a436SSepherosa Ziehau 	u_int8_t		re_hw_enable_msi_msix;
179e5a5a436SSepherosa Ziehau 	u_int8_t		re_coalesce_tx_pkt;
18052bafeb8SSepherosa Ziehau 	u_int8_t		re_pad_runt;
181e5a5a436SSepherosa Ziehau 	u_int8_t		re_8169_MacVersion;
182e5a5a436SSepherosa Ziehau 	u_int8_t		re_8169_PhyVersion;
183e5a5a436SSepherosa Ziehau 	int 			re_tx_cstag;
184e5a5a436SSepherosa Ziehau 	int			re_rx_cstag;
185e5a5a436SSepherosa Ziehau 	struct ifmedia		media;
186e5a5a436SSepherosa Ziehau 	u_int16_t		cur_page;
187e5a5a436SSepherosa Ziehau 	u_int8_t		re_unit;
188e6e07291SSepherosa Ziehau 	u_int8_t		re_efuse_ver;
189e6e07291SSepherosa Ziehau 	u_int16_t		re_sw_ram_code_ver;
190e6e07291SSepherosa Ziehau 	u_int16_t		re_hw_ram_code_ver;
191e6e07291SSepherosa Ziehau 	u_int8_t		RequiredSecLanDonglePatch;
192e6e07291SSepherosa Ziehau 	u_int8_t		HwSuppDashVer;
193e6e07291SSepherosa Ziehau 	u_int8_t		re_dash;
194e6e07291SSepherosa Ziehau 	bus_space_handle_t	re_mapped_cmac_handle;	/* bus space tag */
195e6e07291SSepherosa Ziehau 	bus_space_tag_t		re_mapped_cmac_tag;	/* bus space tag */
196e6e07291SSepherosa Ziehau 	bus_space_handle_t	re_cmac_handle;		/* bus space handle */
197e6e07291SSepherosa Ziehau 	bus_space_tag_t		re_cmac_tag;		/* bus space tag */
198e6e07291SSepherosa Ziehau 	u_int8_t		HwPkgDet;
199*80492964SSepherosa Ziehau 	u_int8_t		hw_hw_supp_serdes_phy_ver;
200*80492964SSepherosa Ziehau 	u_int8_t		RequirePhyMdiSwapPatch;
201*80492964SSepherosa Ziehau 	u_int16_t		phy_reg_anlpar;
2025d686fbbSSepherosa Ziehau };
2035d686fbbSSepherosa Ziehau 
2045bed1fbdSSepherosa Ziehau #define RE_C_HWIM		0x4	/* hardware interrupt moderation */
205a7d57e62SSepherosa Ziehau #define RE_C_CONTIGRX		0x400	/* need contig buf to RX jumbo frames */
206043ecbf0SSepherosa Ziehau 
207d4d77345SSepherosa Ziehau /* Interrupt moderation types */
208d4d77345SSepherosa Ziehau #define RE_IMTYPE_NONE		0
209d4d77345SSepherosa Ziehau #define RE_IMTYPE_SIM		1	/* simulated */
210d4d77345SSepherosa Ziehau #define RE_IMTYPE_HW		2	/* hardware based */
211d4d77345SSepherosa Ziehau 
212d4d77345SSepherosa Ziehau #define RE_F_TIMER_INTR		0x1
213a7d57e62SSepherosa Ziehau #define RE_F_USE_JPOOL		0x2
214ffa3a109SSepherosa Ziehau #define RE_F_DROP_RXFRAG	0x4
215ffa3a109SSepherosa Ziehau #define RE_F_LINKED		0x8
216ffa3a109SSepherosa Ziehau #define RE_F_SUSPENDED		0x10
217d4d77345SSepherosa Ziehau 
2185d686fbbSSepherosa Ziehau /*
2195d686fbbSSepherosa Ziehau  * register space access macros
2205d686fbbSSepherosa Ziehau  */
2215d686fbbSSepherosa Ziehau #define CSR_WRITE_STREAM_4(sc, reg, val)	\
2225d686fbbSSepherosa Ziehau 	bus_space_write_stream_4(sc->re_btag, sc->re_bhandle, reg, val)
2235d686fbbSSepherosa Ziehau #define CSR_WRITE_4(sc, reg, val)	\
2245d686fbbSSepherosa Ziehau 	bus_space_write_4(sc->re_btag, sc->re_bhandle, reg, val)
2255d686fbbSSepherosa Ziehau #define CSR_WRITE_2(sc, reg, val)	\
2265d686fbbSSepherosa Ziehau 	bus_space_write_2(sc->re_btag, sc->re_bhandle, reg, val)
2275d686fbbSSepherosa Ziehau #define CSR_WRITE_1(sc, reg, val)	\
2285d686fbbSSepherosa Ziehau 	bus_space_write_1(sc->re_btag, sc->re_bhandle, reg, val)
2295d686fbbSSepherosa Ziehau 
2305d686fbbSSepherosa Ziehau #define CSR_READ_4(sc, reg)		\
2315d686fbbSSepherosa Ziehau 	bus_space_read_4(sc->re_btag, sc->re_bhandle, reg)
2325d686fbbSSepherosa Ziehau #define CSR_READ_2(sc, reg)		\
2335d686fbbSSepherosa Ziehau 	bus_space_read_2(sc->re_btag, sc->re_bhandle, reg)
2345d686fbbSSepherosa Ziehau #define CSR_READ_1(sc, reg)		\
2355d686fbbSSepherosa Ziehau 	bus_space_read_1(sc->re_btag, sc->re_bhandle, reg)
2365d686fbbSSepherosa Ziehau 
2375d686fbbSSepherosa Ziehau #define CSR_SETBIT_1(sc, reg, val)	\
2385d686fbbSSepherosa Ziehau 	CSR_WRITE_1(sc, reg, CSR_READ_1(sc, reg) | (val))
2395d686fbbSSepherosa Ziehau #define CSR_CLRBIT_1(sc, reg, val)	\
2405d686fbbSSepherosa Ziehau 	CSR_WRITE_1(sc, reg, CSR_READ_1(sc, reg) & ~(val))
241