xref: /dflybsd-src/sys/dev/netif/re/if_rereg.h (revision e5a5a436e60ab4219abf38434ce1022d4f7c2ad7)
1af51229aSJoerg Sonnenberger /*
2af51229aSJoerg Sonnenberger  * Copyright (c) 2004
3af51229aSJoerg Sonnenberger  *	Joerg Sonnenberger <joerg@bec.de>.  All rights reserved.
4af51229aSJoerg Sonnenberger  *
5af51229aSJoerg Sonnenberger  * Copyright (c) 1997, 1998-2003
6af51229aSJoerg Sonnenberger  *	Bill Paul <wpaul@ctr.columbia.edu>.  All rights reserved.
7af51229aSJoerg Sonnenberger  *
8af51229aSJoerg Sonnenberger  * Redistribution and use in source and binary forms, with or without
9af51229aSJoerg Sonnenberger  * modification, are permitted provided that the following conditions
10af51229aSJoerg Sonnenberger  * are met:
11af51229aSJoerg Sonnenberger  * 1. Redistributions of source code must retain the above copyright
12af51229aSJoerg Sonnenberger  *    notice, this list of conditions and the following disclaimer.
13af51229aSJoerg Sonnenberger  * 2. Redistributions in binary form must reproduce the above copyright
14af51229aSJoerg Sonnenberger  *    notice, this list of conditions and the following disclaimer in the
15af51229aSJoerg Sonnenberger  *    documentation and/or other materials provided with the distribution.
16af51229aSJoerg Sonnenberger  * 3. All advertising materials mentioning features or use of this software
17af51229aSJoerg Sonnenberger  *    must display the following acknowledgement:
18af51229aSJoerg Sonnenberger  *	This product includes software developed by Bill Paul.
19af51229aSJoerg Sonnenberger  * 4. Neither the name of the author nor the names of any co-contributors
20af51229aSJoerg Sonnenberger  *    may be used to endorse or promote products derived from this software
21af51229aSJoerg Sonnenberger  *    without specific prior written permission.
22af51229aSJoerg Sonnenberger  *
23af51229aSJoerg Sonnenberger  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
24af51229aSJoerg Sonnenberger  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25af51229aSJoerg Sonnenberger  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26af51229aSJoerg Sonnenberger  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
27af51229aSJoerg Sonnenberger  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
28af51229aSJoerg Sonnenberger  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
29af51229aSJoerg Sonnenberger  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
30af51229aSJoerg Sonnenberger  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
31af51229aSJoerg Sonnenberger  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32af51229aSJoerg Sonnenberger  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
33af51229aSJoerg Sonnenberger  * THE POSSIBILITY OF SUCH DAMAGE.
34af51229aSJoerg Sonnenberger  *
35af51229aSJoerg Sonnenberger  * $FreeBSD: src/sys/pci/if_rlreg.h,v 1.42 2004/05/24 19:39:23 jhb Exp $
36af51229aSJoerg Sonnenberger  */
37af51229aSJoerg Sonnenberger 
38af51229aSJoerg Sonnenberger #define RE_TXLIST_ADDR_LO	0x0020	/* 64 bits, 256 byte alignment */
39af51229aSJoerg Sonnenberger #define RE_TXLIST_ADDR_HI	0x0024	/* 64 bits, 256 byte alignment */
40*e5a5a436SSepherosa Ziehau 
41af51229aSJoerg Sonnenberger #define RE_RXLIST_ADDR_LO	0x00E4	/* 64 bits, 256 byte alignment */
42af51229aSJoerg Sonnenberger #define RE_RXLIST_ADDR_HI	0x00E8	/* 64 bits, 256 byte alignment */
43af51229aSJoerg Sonnenberger 
44*e5a5a436SSepherosa Ziehau #define RE_TIMERINT		0x0058	/* 32 bits */
45af51229aSJoerg Sonnenberger 
46957a8760SSepherosa Ziehau /*
47957a8760SSepherosa Ziehau  * Config 2 register bits
48957a8760SSepherosa Ziehau  */
49957a8760SSepherosa Ziehau #define RE_CFG2_PCICLK_MASK	0x07
50957a8760SSepherosa Ziehau #define RE_CFG2_PCICLK_33MHZ	0x00
51957a8760SSepherosa Ziehau #define RE_CFG2_PCICLK_66MHZ	0x01
52957a8760SSepherosa Ziehau #define RE_CFG2_PCI64		0x08
53957a8760SSepherosa Ziehau 
54af51229aSJoerg Sonnenberger #define RE_TX_LIST_CNT		4
55af51229aSJoerg Sonnenberger #define RE_MIN_FRAMELEN		60
56af51229aSJoerg Sonnenberger 
57d4d77345SSepherosa Ziehau #define RE_IM_MAGIC		0x5050
58d4d77345SSepherosa Ziehau #define RE_IM_RXTIME(t)		((t) & 0xf)
59d4d77345SSepherosa Ziehau #define RE_IM_TXTIME(t)		(((t) & 0xf) << 8)
60d4d77345SSepherosa Ziehau 
61af51229aSJoerg Sonnenberger /*
62*e5a5a436SSepherosa Ziehau  * The 8169/8168 gigE chips support descriptor-based TX and RX.
63*e5a5a436SSepherosa Ziehau  * In fact, they even support TCP large send.  Descriptors
64af51229aSJoerg Sonnenberger  * must be allocated in contiguous blocks that are aligned on a
65*e5a5a436SSepherosa Ziehau  * 256-byte boundary.
66af51229aSJoerg Sonnenberger  */
67af51229aSJoerg Sonnenberger 
68af51229aSJoerg Sonnenberger /*
69af51229aSJoerg Sonnenberger  * RX/TX descriptor definition.  When large send mode is enabled, the
70af51229aSJoerg Sonnenberger  * lower 11 bits of the TX re_cmd word are used to hold the MSS, and
71af51229aSJoerg Sonnenberger  * the checksum offload bits are disabled.  The structure layout is
72*e5a5a436SSepherosa Ziehau  * the same for RX and TX descriptors.
73af51229aSJoerg Sonnenberger  */
74af51229aSJoerg Sonnenberger 
75af51229aSJoerg Sonnenberger struct re_desc {
76af51229aSJoerg Sonnenberger 	uint32_t		re_cmdstat;
77afdeb9daSSepherosa Ziehau 	uint32_t		re_control;
78af51229aSJoerg Sonnenberger 	uint32_t		re_bufaddr_lo;
79af51229aSJoerg Sonnenberger 	uint32_t		re_bufaddr_hi;
80af51229aSJoerg Sonnenberger };
81af51229aSJoerg Sonnenberger 
82af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_FRAGLEN	0x0000FFFF
83af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_TCPCSUM	0x00010000	/* TCP checksum enable */
84af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_UDPCSUM	0x00020000	/* UDP checksum enable */
85af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_IPCSUM	0x00040000	/* IP header checksum enable */
86af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_MSSVAL	0x07FF0000	/* Large send MSS value */
87af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_LGSEND	0x08000000	/* TCP large send enb */
88af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_EOF	0x10000000	/* end of frame marker */
89af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_SOF	0x20000000	/* start of frame marker */
90af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_EOR	0x40000000	/* end of ring marker */
91af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_OWN	0x80000000	/* chip owns descriptor */
92af51229aSJoerg Sonnenberger 
93afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_INSTAG	0x00020000	/* Insert VLAN tag */
94afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_TAGDATA	0x0000FFFF	/* TAG data */
95afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_IPCSUM	0x20000000	/* IP header csum, MAC2 only */
96afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_TCPCSUM	0x60000000	/* TCP csum, MAC2 only */
97afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_UDPCSUM	0xa0000000	/* UDP csum, MAC2 only */
98af51229aSJoerg Sonnenberger 
99af51229aSJoerg Sonnenberger /*
100af51229aSJoerg Sonnenberger  * Error bits are valid only on the last descriptor of a frame
101af51229aSJoerg Sonnenberger  * (i.e. RE_TDESC_CMD_EOF == 1)
102af51229aSJoerg Sonnenberger  */
103af51229aSJoerg Sonnenberger 
104af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_COLCNT	0x000F0000	/* collision count */
105af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_EXCESSCOL	0x00100000	/* excessive collisions */
106af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_LINKFAIL	0x00200000	/* link faulure */
107af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_OWINCOL	0x00400000	/* out-of-window collision */
108af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_TXERRSUM	0x00800000	/* transmit error summary */
109af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_UNDERRUN	0x02000000	/* TX underrun occured */
110af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_OWN	0x80000000
111af51229aSJoerg Sonnenberger 
112af51229aSJoerg Sonnenberger /*
113af51229aSJoerg Sonnenberger  * RX descriptor cmd/vlan definitions
114af51229aSJoerg Sonnenberger  */
115af51229aSJoerg Sonnenberger 
116af51229aSJoerg Sonnenberger #define RE_RDESC_CMD_EOR	0x40000000
117af51229aSJoerg Sonnenberger #define RE_RDESC_CMD_OWN	0x80000000
118af51229aSJoerg Sonnenberger #define RE_RDESC_CMD_BUFLEN	0x00001FFF
119af51229aSJoerg Sonnenberger 
120af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_OWN	0x80000000
121af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_EOR	0x40000000
122af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_SOF	0x20000000
123af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_EOF	0x10000000
124af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_FRALIGN	0x08000000	/* frame alignment error */
125af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_MCAST	0x04000000	/* multicast pkt received */
126af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_UCAST	0x02000000	/* unicast pkt received */
127af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_BCAST	0x01000000	/* broadcast pkt received */
128af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_BUFOFLOW	0x00800000	/* out of buffer space */
129af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_FIFOOFLOW	0x00400000	/* FIFO overrun */
130af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_GIANT	0x00200000	/* pkt > 4096 bytes */
131af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_RXERRSUM	0x00100000	/* RX error summary */
132af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_RUNT	0x00080000	/* runt packet received */
133af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_CRCERR	0x00040000	/* CRC error */
134af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_PROTOID	0x00030000	/* Protocol type */
135af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_IPSUMBAD	0x00008000	/* IP header checksum bad */
136af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_UDPSUMBAD	0x00004000	/* UDP checksum bad */
137af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_TCPSUMBAD	0x00002000	/* TCP checksum bad */
138af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_FRAGLEN	0x00001FFF	/* RX'ed frame/frag len */
139af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_GFRAGLEN	0x00003FFF	/* RX'ed frame/frag len */
140af51229aSJoerg Sonnenberger 
141afdeb9daSSepherosa Ziehau #define RE_RDESC_CTL_HASTAG	0x00010000	/* VLAN tag available
142afdeb9daSSepherosa Ziehau 						   (TAG data valid) */
143afdeb9daSSepherosa Ziehau #define RE_RDESC_CTL_TAGDATA	0x0000FFFF	/* TAG data */
144afdeb9daSSepherosa Ziehau #define RE_RDESC_CTL_PROTOIP4	0x40000000	/* IPv4 packet, MAC2 only */
145afdeb9daSSepherosa Ziehau #define RE_RDESC_CTL_PROTOIP6	0x80000000	/* IPv6 packet, MAC2 only */
146af51229aSJoerg Sonnenberger 
147af51229aSJoerg Sonnenberger #define RE_PROTOID_NONIP	0x00000000
148af51229aSJoerg Sonnenberger #define RE_PROTOID_TCPIP	0x00010000
149af51229aSJoerg Sonnenberger #define RE_PROTOID_UDPIP	0x00020000
150af51229aSJoerg Sonnenberger #define RE_PROTOID_IP		0x00030000
151af51229aSJoerg Sonnenberger #define RE_TCPPKT(x)		(((x) & RE_RDESC_STAT_PROTOID) == \
152af51229aSJoerg Sonnenberger 				 RE_PROTOID_TCPIP)
153af51229aSJoerg Sonnenberger #define RE_UDPPKT(x)		(((x) & RE_RDESC_STAT_PROTOID) == \
154af51229aSJoerg Sonnenberger 				 RE_PROTOID_UDPIP)
155af51229aSJoerg Sonnenberger 
156af51229aSJoerg Sonnenberger /*
157*e5a5a436SSepherosa Ziehau  * Statistics counter structure.
158af51229aSJoerg Sonnenberger  */
159af51229aSJoerg Sonnenberger struct re_stats {
160af51229aSJoerg Sonnenberger 	uint32_t		re_tx_pkts_lo;
161af51229aSJoerg Sonnenberger 	uint32_t		re_tx_pkts_hi;
162af51229aSJoerg Sonnenberger 	uint32_t		re_tx_errs_lo;
163af51229aSJoerg Sonnenberger 	uint32_t		re_tx_errs_hi;
164af51229aSJoerg Sonnenberger 	uint32_t		re_tx_errs;
165af51229aSJoerg Sonnenberger 	uint16_t		re_missed_pkts;
166af51229aSJoerg Sonnenberger 	uint16_t		re_rx_framealign_errs;
167af51229aSJoerg Sonnenberger 	uint32_t		re_tx_onecoll;
168af51229aSJoerg Sonnenberger 	uint32_t		re_tx_multicolls;
169af51229aSJoerg Sonnenberger 	uint32_t		re_rx_ucasts_hi;
170af51229aSJoerg Sonnenberger 	uint32_t		re_rx_ucasts_lo;
171af51229aSJoerg Sonnenberger 	uint32_t		re_rx_bcasts_lo;
172af51229aSJoerg Sonnenberger 	uint32_t		re_rx_bcasts_hi;
173af51229aSJoerg Sonnenberger 	uint32_t		re_rx_mcasts;
174af51229aSJoerg Sonnenberger 	uint16_t		re_tx_aborts;
175af51229aSJoerg Sonnenberger 	uint16_t		re_rx_underruns;
176af51229aSJoerg Sonnenberger };
177af51229aSJoerg Sonnenberger 
178af51229aSJoerg Sonnenberger /*
179af51229aSJoerg Sonnenberger  * General constants that are fun to know.
180af51229aSJoerg Sonnenberger  *
181af51229aSJoerg Sonnenberger  * PCI low memory base and low I/O base register, and
182af51229aSJoerg Sonnenberger  * other PCI registers.
183af51229aSJoerg Sonnenberger  */
184af51229aSJoerg Sonnenberger 
185af51229aSJoerg Sonnenberger #define RE_PCI_LOMEM		0x14
186ecd80f47SJoerg Sonnenberger #define RE_PCI_LOIO		0x10
1875fdf38d0SSepherosa Ziehau 
1885fdf38d0SSepherosa Ziehau #define PCI_SUBDEVICE_LINKSYS_EG1032_REV3	0x0024
189