xref: /dflybsd-src/sys/dev/netif/re/if_revar.h (revision 1bdb2a81dbde9b5055fceaeb9e99237db82ad631)
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 $
36*1bdb2a81SSepherosa Ziehau  * $DragonFly: src/sys/dev/netif/re/if_revar.h,v 1.15 2008/10/07 11:57:18 sephe Exp $
375d686fbbSSepherosa Ziehau  */
385d686fbbSSepherosa Ziehau 
3953d4588aSSepherosa Ziehau #define RE_RX_DESC_CNT_DEF	64
4053d4588aSSepherosa Ziehau #define RE_TX_DESC_CNT_DEF	64
4153d4588aSSepherosa Ziehau #define RE_RX_DESC_CNT_MAX	1024
4253d4588aSSepherosa Ziehau #define RE_TX_DESC_CNT_MAX	1024
4353d4588aSSepherosa Ziehau 
4453d4588aSSepherosa Ziehau #define RE_RX_LIST_SZ(sc)	((sc)->re_rx_desc_cnt * sizeof(struct re_desc))
4553d4588aSSepherosa Ziehau #define RE_TX_LIST_SZ(sc)	((sc)->re_tx_desc_cnt * sizeof(struct re_desc))
46998e7079SSepherosa Ziehau #define RE_RING_ALIGN		256
47998e7079SSepherosa Ziehau #define RE_IFQ_MAXLEN		512
48998e7079SSepherosa Ziehau #define RE_MAXSEGS		16
49998e7079SSepherosa Ziehau #define RE_TXDESC_SPARE		4
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)
54998e7079SSepherosa Ziehau #define RE_RXBYTES(x)		(le32toh((x)->re_cmdstat) & sc->re_rxlenmask)
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 
60998e7079SSepherosa Ziehau #define RE_JUMBO_FRAMELEN	7440
61998e7079SSepherosa Ziehau #define RE_JUMBO_MTU		(RE_JUMBO_FRAMELEN-ETHER_HDR_LEN-ETHER_CRC_LEN)
62998e7079SSepherosa Ziehau #define RE_FRAMELEN_2K		2048
63998e7079SSepherosa Ziehau #define RE_FRAMELEN(mtu)	(mtu + ETHER_HDR_LEN + ETHER_CRC_LEN)
64998e7079SSepherosa Ziehau #define RE_SWCSUM_LIM_8169	2038
65998e7079SSepherosa Ziehau 
66998e7079SSepherosa Ziehau #define	RE_TIMEOUT		1000
67998e7079SSepherosa Ziehau 
685d686fbbSSepherosa Ziehau struct re_type {
695d686fbbSSepherosa Ziehau 	uint16_t		re_vid;
705d686fbbSSepherosa Ziehau 	uint16_t		re_did;
715d686fbbSSepherosa Ziehau 	int			re_basetype;
725d686fbbSSepherosa Ziehau 	const char		*re_name;
735d686fbbSSepherosa Ziehau };
745d686fbbSSepherosa Ziehau 
755d686fbbSSepherosa Ziehau struct re_hwrev {
765d686fbbSSepherosa Ziehau 	uint32_t		re_rev;
777caafb85SSepherosa Ziehau 	int			re_type;	/* RE_{8139CPLUS,8169} */
787caafb85SSepherosa Ziehau 	uint32_t		re_flags;	/* see RE_F_ */
79043ecbf0SSepherosa Ziehau 	int			re_swcsum_lim;
80089dc1b7SSepherosa Ziehau 	int			re_maxmtu;
815d686fbbSSepherosa Ziehau };
825d686fbbSSepherosa Ziehau 
835d686fbbSSepherosa Ziehau #define RE_8139CPLUS		3
845d686fbbSSepherosa Ziehau #define RE_8169			4
855d686fbbSSepherosa Ziehau 
865d686fbbSSepherosa Ziehau struct re_dmaload_arg {
873580fc56SSepherosa Ziehau 	int			re_nsegs;
883580fc56SSepherosa Ziehau 	bus_dma_segment_t	*re_segs;
895d686fbbSSepherosa Ziehau };
905d686fbbSSepherosa Ziehau 
915d686fbbSSepherosa Ziehau struct re_list_data {
9253d4588aSSepherosa Ziehau 	struct mbuf		**re_tx_mbuf;
9353d4588aSSepherosa Ziehau 	struct mbuf		**re_rx_mbuf;
9453d4588aSSepherosa Ziehau 	bus_addr_t		*re_rx_paddr;
955d686fbbSSepherosa Ziehau 	int			re_tx_prodidx;
965d686fbbSSepherosa Ziehau 	int			re_rx_prodidx;
975d686fbbSSepherosa Ziehau 	int			re_tx_considx;
985d686fbbSSepherosa Ziehau 	int			re_tx_free;
9953d4588aSSepherosa Ziehau 	bus_dmamap_t		*re_tx_dmamap;
10053d4588aSSepherosa Ziehau 	bus_dmamap_t		*re_rx_dmamap;
1013580fc56SSepherosa Ziehau 	bus_dmamap_t		re_rx_spare;
1025d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_mtag;	/* mbuf mapping tag */
1035d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_stag;	/* stats mapping tag */
1045d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_smap;	/* stats map */
1055d686fbbSSepherosa Ziehau 	struct re_stats		*re_stats;
1065d686fbbSSepherosa Ziehau 	bus_addr_t		re_stats_addr;
1075d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_rx_list_tag;
1085d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_rx_list_map;
1095d686fbbSSepherosa Ziehau 	struct re_desc		*re_rx_list;
1105d686fbbSSepherosa Ziehau 	bus_addr_t		re_rx_list_addr;
1115d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_tx_list_tag;
1125d686fbbSSepherosa Ziehau 	bus_dmamap_t		re_tx_list_map;
1135d686fbbSSepherosa Ziehau 	struct re_desc		*re_tx_list;
1145d686fbbSSepherosa Ziehau 	bus_addr_t		re_tx_list_addr;
1155d686fbbSSepherosa Ziehau };
1165d686fbbSSepherosa Ziehau 
1175d686fbbSSepherosa Ziehau struct re_softc {
1185d686fbbSSepherosa Ziehau 	struct arpcom		arpcom;		/* interface info */
1195d686fbbSSepherosa Ziehau #ifdef RE_DIAG
1205d686fbbSSepherosa Ziehau 	device_t		re_dev;
1215d686fbbSSepherosa Ziehau #endif
1225d686fbbSSepherosa Ziehau 	bus_space_handle_t	re_bhandle;	/* bus space handle */
1235d686fbbSSepherosa Ziehau 	bus_space_tag_t		re_btag;	/* bus space tag */
1245d686fbbSSepherosa Ziehau 	struct resource		*re_res;
1255d686fbbSSepherosa Ziehau 	struct resource		*re_irq;
1265d686fbbSSepherosa Ziehau 	void			*re_intrhand;
1275d686fbbSSepherosa Ziehau 	device_t		re_miibus;
1285d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_parent_tag;
1295d686fbbSSepherosa Ziehau 	bus_dma_tag_t		re_tag;
1305d686fbbSSepherosa Ziehau 	uint8_t			re_type;
1315d686fbbSSepherosa Ziehau 	int			re_eecmd_read;
1325d686fbbSSepherosa Ziehau 	uint8_t			re_stats_no_timeout;
1335d686fbbSSepherosa Ziehau 	int			re_txthresh;
134089dc1b7SSepherosa Ziehau 	uint32_t		re_hwrev;
1355d686fbbSSepherosa Ziehau 	struct re_list_data	re_ldata;
1365d686fbbSSepherosa Ziehau 	struct callout		re_timer;
1375d686fbbSSepherosa Ziehau 	struct mbuf		*re_head;
1385d686fbbSSepherosa Ziehau 	struct mbuf		*re_tail;
1396070c764SSepherosa Ziehau 	int			re_drop_rxfrag;
1407caafb85SSepherosa Ziehau 	uint32_t		re_flags;	/* see RE_F_ */
1415d686fbbSSepherosa Ziehau 	uint32_t		re_rxlenmask;
1425d686fbbSSepherosa Ziehau 	int			re_txstart;
1435d686fbbSSepherosa Ziehau 	int			re_testmode;
1445d686fbbSSepherosa Ziehau 	int			suspended;	/* 0 = normal  1 = suspended */
1455d686fbbSSepherosa Ziehau 	int			re_link;
1465d686fbbSSepherosa Ziehau 	int			re_eewidth;
147043ecbf0SSepherosa Ziehau 	int			re_swcsum_lim;
148089dc1b7SSepherosa Ziehau 	int			re_maxmtu;
14953d4588aSSepherosa Ziehau 	int			re_rx_desc_cnt;
15053d4588aSSepherosa Ziehau 	int			re_tx_desc_cnt;
151957a8760SSepherosa Ziehau 	int			re_bus_speed;
1525d686fbbSSepherosa Ziehau #ifdef DEVICE_POLLING
1535d686fbbSSepherosa Ziehau 	int			rxcycles;
1545d686fbbSSepherosa Ziehau #endif
1555d686fbbSSepherosa Ziehau 
1565d686fbbSSepherosa Ziehau 	struct sysctl_ctx_list	re_sysctl_ctx;
1575d686fbbSSepherosa Ziehau 	struct sysctl_oid	*re_sysctl_tree;
1585d686fbbSSepherosa Ziehau 	uint16_t		re_intrs;
1595d686fbbSSepherosa Ziehau 	uint16_t		re_tx_ack;
160*1bdb2a81SSepherosa Ziehau 	uint16_t		re_rx_ack;
1615d686fbbSSepherosa Ziehau 
1625d686fbbSSepherosa Ziehau #ifndef BURN_BRIDGES
1635d686fbbSSepherosa Ziehau 	uint32_t		saved_maps[5];	/* pci data */
1645d686fbbSSepherosa Ziehau 	uint32_t		saved_biosaddr;
1655d686fbbSSepherosa Ziehau 	uint8_t			saved_intline;
1665d686fbbSSepherosa Ziehau 	uint8_t			saved_cachelnsz;
1675d686fbbSSepherosa Ziehau 	uint8_t			saved_lattimer;
1685d686fbbSSepherosa Ziehau #endif
1695d686fbbSSepherosa Ziehau };
1705d686fbbSSepherosa Ziehau 
1717caafb85SSepherosa Ziehau #define RE_F_HASMPC		0x1
172610fc460SSepherosa Ziehau #define RE_F_PCIE		0x2
173957a8760SSepherosa Ziehau #define RE_F_PCI64		0x4
174931d6f1fSSepherosa Ziehau #define RE_F_HASIM		0x8
175043ecbf0SSepherosa Ziehau 
1765d686fbbSSepherosa Ziehau /*
1775d686fbbSSepherosa Ziehau  * register space access macros
1785d686fbbSSepherosa Ziehau  */
1795d686fbbSSepherosa Ziehau #define CSR_WRITE_STREAM_4(sc, reg, val)	\
1805d686fbbSSepherosa Ziehau 	bus_space_write_stream_4(sc->re_btag, sc->re_bhandle, reg, val)
1815d686fbbSSepherosa Ziehau #define CSR_WRITE_4(sc, reg, val)	\
1825d686fbbSSepherosa Ziehau 	bus_space_write_4(sc->re_btag, sc->re_bhandle, reg, val)
1835d686fbbSSepherosa Ziehau #define CSR_WRITE_2(sc, reg, val)	\
1845d686fbbSSepherosa Ziehau 	bus_space_write_2(sc->re_btag, sc->re_bhandle, reg, val)
1855d686fbbSSepherosa Ziehau #define CSR_WRITE_1(sc, reg, val)	\
1865d686fbbSSepherosa Ziehau 	bus_space_write_1(sc->re_btag, sc->re_bhandle, reg, val)
1875d686fbbSSepherosa Ziehau 
1885d686fbbSSepherosa Ziehau #define CSR_READ_4(sc, reg)		\
1895d686fbbSSepherosa Ziehau 	bus_space_read_4(sc->re_btag, sc->re_bhandle, reg)
1905d686fbbSSepherosa Ziehau #define CSR_READ_2(sc, reg)		\
1915d686fbbSSepherosa Ziehau 	bus_space_read_2(sc->re_btag, sc->re_bhandle, reg)
1925d686fbbSSepherosa Ziehau #define CSR_READ_1(sc, reg)		\
1935d686fbbSSepherosa Ziehau 	bus_space_read_1(sc->re_btag, sc->re_bhandle, reg)
1945d686fbbSSepherosa Ziehau 
1955d686fbbSSepherosa Ziehau #define CSR_SETBIT_1(sc, reg, val)	\
1965d686fbbSSepherosa Ziehau 	CSR_WRITE_1(sc, reg, CSR_READ_1(sc, reg) | (val))
1975d686fbbSSepherosa Ziehau #define CSR_CLRBIT_1(sc, reg, val)	\
1985d686fbbSSepherosa Ziehau 	CSR_WRITE_1(sc, reg, CSR_READ_1(sc, reg) & ~(val))
199