xref: /netbsd/sys/dev/pci/if_sipreg.h (revision bf9ec67e)
1 /*	$NetBSD: if_sipreg.h,v 1.10 2002/03/27 21:41:35 briggs Exp $	*/
2 
3 /*-
4  * Copyright (c) 2001 The NetBSD Foundation, Inc.
5  * All rights reserved.
6  *
7  * This code is derived from software contributed to The NetBSD Foundation
8  * by Jason R. Thorpe.
9  *
10  * Redistribution and use in source and binary forms, with or without
11  * modification, are permitted provided that the following conditions
12  * are met:
13  * 1. Redistributions of source code must retain the above copyright
14  *    notice, this list of conditions and the following disclaimer.
15  * 2. Redistributions in binary form must reproduce the above copyright
16  *    notice, this list of conditions and the following disclaimer in the
17  *    documentation and/or other materials provided with the distribution.
18  * 3. All advertising materials mentioning features or use of this software
19  *    must display the following acknowledgement:
20  *	This product includes software developed by the NetBSD
21  *	Foundation, Inc. and its contributors.
22  * 4. Neither the name of The NetBSD Foundation nor the names of its
23  *    contributors may be used to endorse or promote products derived
24  *    from this software without specific prior written permission.
25  *
26  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36  * POSSIBILITY OF SUCH DAMAGE.
37  */
38 
39 /*-
40  * Copyright (c) 1999 Network Computer, Inc.
41  * All rights reserved.
42  *
43  * Redistribution and use in source and binary forms, with or without
44  * modification, are permitted provided that the following conditions
45  * are met:
46  * 1. Redistributions of source code must retain the above copyright
47  *    notice, this list of conditions and the following disclaimer.
48  * 2. Redistributions in binary form must reproduce the above copyright
49  *    notice, this list of conditions and the following disclaimer in the
50  *    documentation and/or other materials provided with the distribution.
51  * 3. Neither the name of Network Computer, Inc. nor the names of its
52  *    contributors may be used to endorse or promote products derived
53  *    from this software without specific prior written permission.
54  *
55  * THIS SOFTWARE IS PROVIDED BY NETWORK COMPUTER, INC. AND CONTRIBUTORS
56  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
57  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
58  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
59  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
60  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
61  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
62  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
63  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
64  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
65  * POSSIBILITY OF SUCH DAMAGE.
66  */
67 
68 #ifndef _DEV_PCI_IF_SIPREG_H_
69 #define	_DEV_PCI_IF_SIPREG_H_
70 
71 /*
72  * Register description for the Silicon Integrated Systems SiS 900,
73  * SiS 7016, National Semiconductor DP83815 10/100, and National
74  * Semiconduction DP83820 10/100/1000 PCI Ethernet controller.
75  *
76  * Written by Jason R. Thorpe for Network Computer, Inc.
77  */
78 
79 /*
80  * Transmit FIFO size.  Used to compute the transmit drain threshold.
81  *
82  * The transmit FIFO is arranged as a 512 32-bit memory array.
83  */
84 #define	SIP_TXFIFO_SIZE	(512 * 4)
85 
86 /*
87  * The SiS900 uses a single descriptor format for both transmit
88  * and receive descriptor chains.
89  *
90  * Note the DP83820 can use 64-bit DMA addresses for link and bufptr.
91  * However, we do not yet support that.
92  *
93  * For transmit, buffers need not be aligned.  For receive, buffers
94  * must be aligned to 4-byte (8-byte on DP83820) boundaries.
95  */
96 struct sip_desc {
97 #ifdef DP83820
98 	u_int32_t	sipd_link;	/* link to next descriptor */
99 	u_int32_t	sipd_bufptr;	/* pointer to DMA segment */
100 	u_int32_t	sipd_cmdsts;	/* command/status word */
101 	u_int32_t	sipd_extsts;	/* extended status */
102 #else
103 	u_int32_t	sipd_link;	/* link to next descriptor */
104 	u_int32_t	sipd_cmdsts;	/* command/status word */
105 	u_int32_t	sipd_bufptr;	/* pointer to DMA segment */
106 #endif /* DP83820 */
107 };
108 
109 /*
110  * CMDSTS bits common to transmit and receive.
111  */
112 #define	CMDSTS_OWN	0x80000000	/* owned by consumer */
113 #define	CMDSTS_MORE	0x40000000	/* more descriptors */
114 #define	CMDSTS_INTR	0x20000000	/* interrupt when ownership changes */
115 #define	CMDSTS_SUPCRC	0x10000000	/* suppress CRC */
116 #define	CMDSTS_OK	0x08000000	/* packet ok */
117 #ifdef DP83820
118 #define	CMDSTS_SIZE_MASK 0x0000ffff	/* packet size */
119 #else
120 #define	CMDSTS_SIZE_MASK 0x000007ff	/* packet size */
121 #endif /* DP83820 */
122 
123 #define	CMDSTS_SIZE(x)	((x) & CMDSTS_SIZE_MASK)
124 
125 /*
126  * CMDSTS bits for transmit.
127  */
128 #define	CMDSTS_Tx_TXA	0x04000000	/* transmit abort */
129 #define	CMDSTS_Tx_TFU	0x02000000	/* transmit FIFO underrun */
130 #define	CMDSTS_Tx_CRS	0x01000000	/* carrier sense lost */
131 #define	CMDSTS_Tx_TD	0x00800000	/* transmit deferred */
132 #define	CMDSTS_Tx_ED	0x00400000	/* excessive deferral */
133 #define	CMDSTS_Tx_OWC	0x00200000	/* out of window collision */
134 #define	CMDSTS_Tx_EC	0x00100000	/* excessive collisions */
135 #define	CMDSTS_Tx_CCNT	0x000f0000	/* collision count */
136 
137 #define	CMDSTS_COLLISIONS(x)	(((x) & CMDSTS_Tx_CCNT) >> 16)
138 
139 /*
140  * CMDSTS bits for receive.
141  */
142 #define	CMDSTS_Rx_RXA	0x04000000	/* receive abort */
143 #define	CMDSTS_Rx_RXO	0x02000000	/* receive overrun */
144 #define	CMDSTS_Rx_DEST	0x01800000	/* destination class */
145 #define	CMDSTS_Rx_LONG	0x00400000	/* packet too long */
146 #define	CMDSTS_Rx_RUNT	0x00200000	/* runt packet */
147 #define	CMDSTS_Rx_ISE	0x00100000	/* invalid symbol error */
148 #define	CMDSTS_Rx_CRCE	0x00080000	/* CRC error */
149 #define	CMDSTS_Rx_FAE	0x00040000	/* frame alignment error */
150 #define	CMDSTS_Rx_LBP	0x00020000	/* loopback packet */
151 #ifdef DP83820
152 #define	CMDSTS_Rx_IRL	0x00010000	/* in-range length error */
153 #else
154 #define	CMDSTS_Rx_COL	0x00010000	/* collision activity */
155 #endif /* DP83820 */
156 
157 #define	CMDSTS_Rx_DEST_REJ 0x00000000	/* packet rejected */
158 #define	CMDSTS_Rx_DEST_STA 0x00800000	/* matched station address */
159 #define	CMDSTS_Rx_DEST_MUL 0x01000000	/* multicast address */
160 #define	CMDSTS_Rx_DEST_BRD 0x01800000	/* broadcast address */
161 
162 #ifdef DP83820
163 /*
164  * EXTSTS bits.
165  */
166 #define	EXTSTS_Rx_UDPERR 0x00400000	/* UDP checksum error */
167 #define	EXTSTS_UDPPKT	 0x00200000	/* perform UDP checksum */
168 #define	EXTSTS_Rx_TCPERR 0x00100000	/* TCP checksum error */
169 #define	EXTSTS_TCPPKT	 0x00080000	/* perform TCP checksum */
170 #define	EXTSTS_Rx_IPERR	 0x00040000	/* IP header checksum error */
171 #define	EXTSTS_IPPKT	 0x00020000	/* perform IP header checksum */
172 #define	EXTSTS_VPKT	 0x00010000	/* insert VLAN tag */
173 #define	EXTSTS_VTCI	 0x0000ffff	/* VLAN tag control information */
174 #endif /* DP83820 */
175 
176 /*
177  * PCI Configuration space registers.
178  */
179 #define	SIP_PCI_CFGIOA	(PCI_MAPREG_START + 0x00)
180 
181 #define	SIP_PCI_CFGMA	(PCI_MAPREG_START + 0x04)
182 
183 #ifdef DP83820
184 #define	SIP_PCI_CFGMA1	(PCI_MAPREG_START + 0x08)
185 #endif /* DP83820 */
186 
187 #define	SIP_PCI_CFGEROMA 0x30		/* expansion ROM address */
188 
189 #define	SIP_PCI_CFGPMC	 0x40		/* power management cap. */
190 
191 #define	SIP_PCI_CFGPMCSR 0x44		/* power management ctl. */
192 
193 /*
194  * MAC Operation Registers
195  */
196 #define	SIP_CR		0x00	/* command register */
197 #ifdef DP83820
198 #define	CR_RXPRI3	0x00010000	/* Rx priority queue select */
199 #define	CR_RXPRI2	0x00008000	/* Rx priority queue select */
200 #define	CR_RXPRI1	0x00004000	/* Rx priority queue select */
201 #define	CR_RXPRI0	0x00002000	/* Rx priority queue select */
202 #define	CR_TXPRI3	0x00001000	/* Tx priority queue select */
203 #define	CR_TXPRI2	0x00000800	/* Tx priority queue select */
204 #define	CR_TXPRI1	0x00000400	/* Tx priority queue select */
205 #define	CR_TXPRI0	0x00000200	/* Tx priority queue select */
206 #endif /* DP83820 */
207 #define	CR_RLD		0x00000400	/* reload from NVRAM */
208 #define	CR_RST		0x00000100	/* software reset */
209 #define	CR_SWI		0x00000080	/* software interrupt */
210 #define	CR_RXR		0x00000020	/* receiver reset */
211 #define	CR_TXR		0x00000010	/* transmit reset */
212 #define	CR_RXD		0x00000008	/* receiver disable */
213 #define	CR_RXE		0x00000004	/* receiver enable */
214 #define	CR_TXD		0x00000002	/* transmit disable */
215 #define	CR_TXE		0x00000001	/* transmit enable */
216 
217 #define	SIP_CFG		0x04	/* configuration register */
218 #define	CFG_LNKSTS	0x80000000	/* link status (83815) */
219 #ifdef DP83820
220 #define	CFG_SPEED1000	0x40000000	/* 1000Mb/s input pin */
221 #define	CFG_SPEED100	0x20000000	/* 100Mb/s input pin */
222 #define	CFG_DUPSTS	0x10000000	/* full-duplex status */
223 #define	CFG_TBI_EN	0x01000000	/* ten-bit interface enable */
224 #define	CFG_MODE_1000	0x00400000	/* 1000Mb/s mode enable */
225 #define	CFG_PINT_DUP	0x00100000	/* interrupt on PHY DUP change */
226 #define	CFG_PINT_LNK	0x00080000	/* interrupt on PHY LNK change */
227 #define	CFG_PINT_SPD	0x00040000	/* interrupt on PHY SPD change */
228 #define	CFG_TMRTEST	0x00020000	/* timer test mode */
229 #define	CFG_MRM_DIS	0x00010000	/* MRM disable */
230 #define	CFG_MWI_DIS	0x00008000	/* MWI disable */
231 #define	CFG_T64ADDR	0x00004000	/* target 64-bit addressing enable */
232 #define	CFG_PCI64_DET	0x00002000	/* 64-bit PCI bus detected */
233 #define	CFG_DATA64_EN	0x00001000	/* 64-bit data enable */
234 #define	CFG_M64ADDR	0x00000800	/* master 64-bit addressing enable */
235 #else
236 #define	CFG_SPEED100	0x40000000	/* 100Mb/s (83815) */
237 #define	CFG_FDUP	0x20000000	/* full duplex (83815) */
238 #define	CFG_POL		0x10000000	/* 10Mb/s polarity (83815) */
239 #define	CFG_ANEG_DN	0x08000000	/* autonegotiation done (83815) */
240 #define	CFG_PHY_CFG	0x00fc0000	/* PHY configuration (83815) */
241 #define	CFG_PINT_ACEN	0x00020000	/* PHY interrupt auto clear (83815) */
242 #define	CFG_PAUSE_ADV	0x00010000	/* pause advertise (83815) */
243 #define	CFG_ANEG_SEL	0x0000e000	/* autonegotiation select (83815) */
244 #endif /* DP83820 */
245 #define	CFG_PHY_RST	0x00000400	/* PHY reset (83815) */
246 #define	CFG_PHY_DIS	0x00000200	/* PHY disable (83815) */
247 #ifdef DP83820
248 #define	CFG_EXTSTS_EN	0x00000100	/* extended status enable */
249 #else
250 #define	CFG_EUPHCOMP	0x00000100	/* 83810 descriptor compat (83815) */
251 #endif /* DP83820 */
252 #define	CFG_EDBMASTEN	0x00002000	/* 635,900B ?? from linux driver */
253 #define	CFG_RNDCNT	0x00000400	/* 635,900B ?? from linux driver */
254 #define	CFG_FAIRBO	0x00000200	/* 635,900B ?? from linux driver */
255 #define	CFG_REQALG	0x00000080	/* PCI bus request alg. */
256 #define	CFG_SB		0x00000040	/* single backoff */
257 #define	CFG_POW		0x00000020	/* program out of window timer */
258 #define	CFG_EXD		0x00000010	/* excessive defferal timer disable */
259 #define	CFG_PESEL	0x00000008	/* parity error detection action */
260 #ifdef DP83820
261 #define	CFG_BROM_DIS	0x00000004	/* boot ROM disable */
262 #define	CFG_EXT_125	0x00000002	/* external 125MHz reference select */
263 #endif /* DP83820 */
264 #define	CFG_BEM		0x00000001	/* big-endian mode */
265 
266 #define	SIP_EROMAR	0x08	/* EEPROM access register */
267 #ifdef DP83820
268 #define	EROMAR_MDC	0x00000040	/* MII clock */
269 #define	EROMAR_MDDIR	0x00000020	/* MII direction (1 == MAC->PHY) */
270 #define	EROMAR_MDIO	0x00000010	/* MII data */
271 #endif /* DP83820 */
272 #define	EROMAR_EECS	0x00000008	/* chip select */
273 #define	EROMAR_EESK	0x00000004	/* clock */
274 #define	EROMAR_EEDO	0x00000002	/* data out */
275 #define	EROMAR_EEDI	0x00000001	/* data in */
276 
277 #define	SIP_PTSCR	0x0c	/* PCI test control register */
278 #ifdef DP83820
279 #define	PTSCR_RBIST_RST	    0x00002000	/* SRAM BIST reset */
280 #define	PTSCR_RBIST_EN	    0x00000400	/* SRAM BIST enable */
281 #define	PTSCR_RBIST_DONE    0x00000200	/* SRAM BIST done */
282 #define	PTSCR_RBIST_RX1FAIL 0x00000100	/* Rx status FIFO BIST fail */
283 #define	PTSCR_RBIST_RX0FAIL 0x00000080	/* Rx data FIFO BIST fail */
284 #define	PTSCR_RBIST_TX0FAIL 0x00000020	/* Tx data FIFO BIST fail */
285 #define	PTSCR_RBIST_HFFAIL  0x00000010	/* hash filter BIST fail */
286 #define	PTSCR_RBIST_RXFAIL  0x00000008	/* Rx filter BIST failed */
287 #define	PTSCR_EELOAD_EN	    0x00000004	/* EEPROM load initiate */
288 #define	PTSCR_EEBIST_EN	    0x00000002	/* EEPROM BIST enable */
289 #define	PTSCR_EEBIST_FAIL   0x00000001	/* EEPROM BIST failed */
290 #else
291 #define	PTSCR_DIS_TEST	0x40000000	/* discard timer test mode */
292 #define	PTSCR_EROM_TACC	0x0f000000	/* boot rom access time */
293 #define	PTSCR_TRRAMADR	0x001ff000	/* TX/RX RAM address */
294 #define	PTSCR_BMTEN	0x00000200	/* bus master test enable */
295 #define	PTSCR_RRTMEN	0x00000080	/* receive RAM test mode enable */
296 #define	PTSCR_TRTMEN	0x00000040	/* transmit RAM test mode enable */
297 #define	PTSCR_SRTMEN	0x00000020	/* status RAM test mode enable */
298 #define	PTSCR_SRAMADR	0x0000001f	/* status RAM address */
299 #endif /* DP83820 */
300 
301 #define	SIP_ISR		0x10	/* interrupt status register */
302 #ifdef DP83820
303 #define	ISR_TXDESC3	0x40000000	/* Tx queue 3 */
304 #define	ISR_TXDESC2	0x20000000	/* Tx queue 2 */
305 #define	ISR_TXDESC1	0x10000000	/* Tx queue 1 */
306 #define	ISR_TXDESC0	0x08000000	/* Tx queue 0 */
307 #define	ISR_RXDESC3	0x04000000	/* Rx queue 3 */
308 #define	ISR_RXDESC2	0x02000000	/* Rx queue 2 */
309 #define	ISR_RXDESC1	0x01000000	/* Rx queue 1 */
310 #define	ISR_RXDESC0	0x00800000	/* Rx queue 0 */
311 #define	ISR_TXRCMP	0x00400000	/* transmit reset complete */
312 #define	ISR_RXRCMP	0x00200000	/* receive reset complete */
313 #define	ISR_DPERR	0x00100000	/* detected parity error */
314 #define	ISR_SSERR	0x00080000	/* signalled system error */
315 #define	ISR_RMABT	0x00040000	/* received master abort */
316 #define	ISR_RTABT	0x00020000	/* received target abort */
317 #else
318 #define	ISR_WAKEEVT	0x10000000	/* wake up event */
319 #define	ISR_PAUSE_END	0x08000000	/* end of transmission pause */
320 #define	ISR_PAUSE_ST	0x04000000	/* start of transmission pause */
321 #define	ISR_TXRCMP	0x02000000	/* transmit reset complete */
322 #define	ISR_RXRCMP	0x01000000	/* receive reset complete */
323 #define	ISR_DPERR	0x00800000	/* detected parity error */
324 #define	ISR_SSERR	0x00400000	/* signalled system error */
325 #define	ISR_RMABT	0x00200000	/* received master abort */
326 #define	ISR_RTABT	0x00100000	/* received target abort */
327 #endif /* DP83820 */
328 #define	ISR_RXSOVR	0x00010000	/* Rx status FIFO overrun */
329 #define	ISR_HIBERR	0x00008000	/* high bits error set */
330 #ifdef DP83820
331 #define	ISR_PHY		0x00004000	/* PHY interrupt */
332 #define	ISR_PME		0x00002000	/* power management event */
333 #endif /* DP83820 */
334 #define	ISR_SWI		0x00001000	/* software interrupt */
335 #ifdef DP83820
336 #define	ISR_MIB		0x00000800	/* MIB service */
337 #endif /* DP83820 */
338 #define	ISR_TXURN	0x00000400	/* Tx underrun */
339 #define	ISR_TXIDLE	0x00000200	/* Tx idle */
340 #define	ISR_TXERR	0x00000100	/* Tx error */
341 #define	ISR_TXDESC	0x00000080	/* Tx descriptor interrupt */
342 #define	ISR_TXOK	0x00000040	/* Tx okay */
343 #define	ISR_RXORN	0x00000020	/* Rx overrun */
344 #define	ISR_RXIDLE	0x00000010	/* Rx idle */
345 #define	ISR_RXEARLY	0x00000008	/* Rx early */
346 #define	ISR_RXERR	0x00000004	/* Rx error */
347 #define	ISR_RXDESC	0x00000002	/* Rx descriptor interrupt */
348 #define	ISR_RXOK	0x00000001	/* Rx okay */
349 
350 #define	SIP_IMR		0x14	/* interrupt mask register */
351 /* See bits in SIP_ISR */
352 
353 #define	SIP_IER		0x18	/* interrupt enable register */
354 #define	IER_IE		0x00000001	/* master interrupt enable */
355 
356 #ifdef DP83820
357 #define	SIP_IHR		0x1c	/* interrupt hold-off register */
358 #define	IHR_IHCTL	0x00000100	/* interrupt hold-off control */
359 #define	IHR_IH		0x000000ff	/* interrupt hold-off timer (100us) */
360 #else
361 #define	SIP_ENPHY	0x1c	/* enhanced PHY access register */
362 #define	ENPHY_PHYDATA	0xffff0000	/* PHY data */
363 #define	ENPHY_DATA_SHIFT 16
364 #define	ENPHY_PHYADDR	0x0000f800	/* PHY number (7016 only) */
365 #define	ENPHY_PHYADDR_SHIFT 11
366 #define	ENPHY_REGADDR	0x000007c0	/* PHY register */
367 #define	ENPHY_REGADDR_SHIFT 6
368 #define	ENPHY_RWCMD	0x00000020	/* 1 == read, 0 == write */
369 #define	ENPHY_ACCESS	0x00000010	/* PHY access enable */
370 #endif /* DP83820 */
371 
372 #define	SIP_TXDP	0x20	/* transmit descriptor pointer reg */
373 
374 #ifdef DP83820
375 #define	SIP_TXDP_HI	0x24	/* transmit descriptor pointer (high) reg */
376 #endif /* DP83820 */
377 
378 #ifdef DP83820
379 #define	SIP_TXCFG	0x28	/* transmit configuration register */
380 #else
381 #define	SIP_TXCFG	0x24	/* transmit configuration register */
382 #endif /* DP83820 */
383 #define	TXCFG_CSI	0x80000000	/* carrier sense ignore */
384 #define	TXCFG_HBI	0x40000000	/* heartbeat ignore */
385 #define	TXCFG_MLB	0x20000000	/* MAC loopback */
386 #define	TXCFG_ATP	0x10000000	/* automatic transmit padding */
387 #ifdef DP83820
388 #define	TXCFG_ECRETRY	0x008000000	/* excessive collision retry enable */
389 #define	TXCFG_MXDMA	 0x00700000	/* max DMA burst size */
390 #define	TXCFG_MXDMA_1024 0x00000000	/*    1024 bytes */
391 #define	TXCFG_MXDMA_8	 0x00100000	/*       8 bytes */
392 #define	TXCFG_MXDMA_16	 0x00200000	/*      16 bytes */
393 #define	TXCFG_MXDMA_32	 0x00300000	/*      32 bytes */
394 #define	TXCFG_MXDMA_64	 0x00400000	/*      64 bytes */
395 #define	TXCFG_MXDMA_128	 0x00500000	/*     128 bytes */
396 #define	TXCFG_MXDMA_256	 0x00600000	/*     256 bytes */
397 #define	TXCFG_MXDMA_512	 0x00700000	/*     512 bytes */
398 #define	TXCFG_BRST_DIS	0x00080000	/* 1000Mb/s burst disable */
399 #define	TXCFG_FLTH	0x0000ff00	/* Fx fill threshold */
400 #define	TXCFG_FLTH_SHIFT 8
401 #define	TXCFG_DRTH	0x000000ff	/* Tx drain threshold */
402 #else
403 #define	TXCFG_MXDMA	0x00700000	/* max DMA burst size */
404 #define	TXCFG_MXDMA_512	0x00000000	/*     512 bytes */
405 #define	TXCFG_MXDMA_4	0x00100000	/*       4 bytes */
406 #define	TXCFG_MXDMA_8	0x00200000	/*       8 bytes */
407 #define	TXCFG_MXDMA_16	0x00300000	/*      16 bytes */
408 #define	TXCFG_MXDMA_32	0x00400000	/*      32 bytes */
409 #define	TXCFG_MXDMA_64	0x00500000	/*      64 bytes */
410 #define	TXCFG_MXDMA_128	0x00600000	/*     128 bytes */
411 #define	TXCFG_MXDMA_256	0x00700000	/*     256 bytes */
412 #define	TXCFG_FLTH	0x00003f00	/* Tx fill threshold */
413 #define	TXCFG_FLTH_SHIFT 8
414 #define	TXCFG_DRTH	0x0000003f	/* Tx drain threshold */
415 #endif /* DP83820 */
416 
417 #ifdef DP83820
418 #define	SIP_GPIOR	0x2c	/* general purpose i/o register */
419 #define	GPIOR_GP5_IN	0x00004000	/* GP 5 in */
420 #define	GPIOR_GP4_IN	0x00002000	/* GP 4 in */
421 #define	GPIOR_GP3_IN	0x00001000	/* GP 3 in */
422 #define	GPIOR_GP2_IN	0x00000800	/* GP 2 in */
423 #define	GPIOR_GP1_IN	0x00000400	/* GP 1 in */
424 #define	GPIOR_GP5_OE	0x00000200	/* GP 5 out enable */
425 #define	GPIOR_GP4_OE	0x00000100	/* GP 4 out enable */
426 #define	GPIOR_GP3_OE	0x00000080	/* GP 3 out enable */
427 #define	GPIOR_GP2_OE	0x00000040	/* GP 2 out enable */
428 #define	GPIOR_GP1_OE	0x00000020	/* GP 1 out enable */
429 #define	GPIOR_GP5_OUT	0x00000010	/* GP 5 out */
430 #define	GPIOR_GP4_OUT	0x00000008	/* GP 4 out */
431 #define	GPIOR_GP3_OUT	0x00000004	/* GP 3 out */
432 #define	GPIOR_GP2_OUT	0x00000002	/* GP 2 out */
433 #define	GPIOR_GP1_OUT	0x00000001	/* GP 1 out */
434 #endif /* DP83820 */
435 
436 #define	SIP_RXDP	0x30	/* receive descriptor pointer reg */
437 
438 #ifdef DP83820
439 #define	SIP_RXDP_HI	0x34	/* receive descriptor pointer (high) reg */
440 #endif /* DP83820 */
441 
442 #ifdef DP83820
443 #define	SIP_RXCFG	0x38	/* receive configuration register */
444 #else
445 #define	SIP_RXCFG	0x34	/* receive configuration register */
446 #endif
447 #define	RXCFG_AEP	0x80000000	/* accept error packets */
448 #define	RXCFG_ARP	0x40000000	/* accept runt packets */
449 #ifdef DP83820
450 #define	RXCFG_STRIPCRC	0x20000000	/* strip CRC */
451 #endif /* DP83820 */
452 #define	RXCFG_ATX	0x10000000	/* accept transmit packets */
453 #define	RXCFG_AJAB	0x08000000	/* accept jabber packets */
454 #ifdef DP83820
455 #define	RXCFG_AIRL	0x04000000	/* accept in-range length err packets */
456 #define	RXCFG_MXDMA	 0x00700000	/* max DMA burst size */
457 #define	RXCFG_MXDMA_1024 0x00000000	/*    1024 bytes */
458 #define	RXCFG_MXDMA_8	 0x00100000	/*       8 bytes */
459 #define	RXCFG_MXDMA_16	 0x00200000	/*      16 bytes */
460 #define	RXCFG_MXDMA_32	 0x00300000	/*      32 bytes */
461 #define	RXCFG_MXDMA_64	 0x00400000	/*      64 bytes */
462 #define	RXCFG_MXDMA_128	 0x00500000	/*     128 bytes */
463 #define	RXCFG_MXDMA_256	 0x00600000	/*     256 bytes */
464 #define	RXCFG_MXDMA_512	 0x00700000	/*     512 bytes */
465 #else
466 #define	RXCFG_MXDMA	0x00700000	/* max DMA burst size */
467 #define	RXCFG_MXDMA_512	0x00000000	/*     512 bytes */
468 #define	RXCFG_MXDMA_4	0x00100000	/*       4 bytes */
469 #define	RXCFG_MXDMA_8	0x00200000	/*       8 bytes */
470 #define	RXCFG_MXDMA_16	0x00300000	/*      16 bytes */
471 #define	RXCFG_MXDMA_32	0x00400000	/*      32 bytes */
472 #define	RXCFG_MXDMA_64	0x00500000	/*      64 bytes */
473 #define	RXCFG_MXDMA_128	0x00600000	/*     128 bytes */
474 #define	RXCFG_MXDMA_256	0x00700000	/*     256 bytes */
475 #endif /* DP83820 */
476 #define	RXCFG_DRTH	0x0000003e
477 #define	RXCFG_DRTH_SHIFT 1
478 
479 #ifdef DP83820
480 #define	SIP_PQCR	0x3c	/* priority queueing control register */
481 #define	PQCR_RXPQ_4	0x0000000c	/* 4 Rx queues */
482 #define	PQCR_RXPQ_3	0x00000008	/* 3 Rx queues */
483 #define	PQCR_RXPQ_2	0x00000004	/* 2 Rx queues */
484 #define	PQCR_TXFAIR	0x00000002	/* Tx fairness enable */
485 #define	PQCR_TXPQEN	0x00000001	/* Tx priority queueing enable */
486 #else
487 #define	SIP_FLOWCTL	0x38	/* flow control register */
488 #define	FLOWCTL_PAUSE	0x00000002	/* PAUSE flag */
489 #define	FLOWCTL_FLOWEN	0x00000001	/* enable flow control */
490 
491 #define	SIP_NS_CCSR	0x3c	/* CLKRUN control/status register (83815) */
492 #define	CCSR_PMESTS	0x00008000	/* PME status */
493 #define	CCSR_PMEEN	0x00000100	/* PME enable */
494 #define	CCSR_CLKRUN_EN	0x00000001	/* clkrun enable */
495 #endif /* DP83820 */
496 
497 #define	SIP_NS_WCSR	0x40	/* WoL control/status register (83815) */
498 
499 #define	SIP_NS_PCR	0x44	/* pause control/status register (83815) */
500 
501 #define	SIP_RFCR	0x48	/* receive filter control register */
502 #define	RFCR_RFEN	0x80000000	/* Rx filter enable */
503 #define	RFCR_AAB	0x40000000	/* accept all broadcast */
504 #define	RFCR_AAM	0x20000000	/* accept all multicast */
505 #define	RFCR_AAP	0x10000000	/* accept all physical */
506 #define	RFCR_APM	0x08000000	/* accept perfect match (83815) */
507 #define	RFCR_APAT	0x07800000	/* accept pattern match (83815) */
508 #define	RFCR_AARP	0x00400000	/* accept ARP (83815) */
509 #define	RFCR_MHEN	0x00200000	/* multicast hash enable (83815) */
510 #define	RFCR_UHEN	0x00100000	/* unicast hash enable (83815) */
511 #define	RFCR_ULM	0x00080000	/* U/L bit mask (83815) */
512 #define	RFCR_NS_RFADDR	0x000003ff	/* Rx filter ext reg address (83815) */
513 #define	RFCR_RFADDR	0x000f0000	/* Rx filter address */
514 #define	RFCR_RFADDR_NODE0 0x00000000	/* node address 1, 0 */
515 #define	RFCR_RFADDR_NODE2 0x00010000	/* node address 3, 2 */
516 #define	RFCR_RFADDR_NODE4 0x00020000	/* node address 5, 4 */
517 #define	RFCR_RFADDR_MC0	  0x00040000	/* multicast hash word 0 */
518 #define	RFCR_RFADDR_MC1	  0x00050000	/* multicast hash word 1 */
519 #define	RFCR_RFADDR_MC2	  0x00060000	/* multicast hash word 2 */
520 #define	RFCR_RFADDR_MC3	  0x00070000	/* multicast hash word 3 */
521 #define	RFCR_RFADDR_MC4	  0x00080000	/* multicast hash word 4 */
522 #define	RFCR_RFADDR_MC5	  0x00090000	/* multicast hash word 5 */
523 #define	RFCR_RFADDR_MC6	  0x000a0000	/* multicast hash word 6 */
524 #define	RFCR_RFADDR_MC7	  0x000b0000	/* multicast hash word 7 */
525 /* For SiS900B and 635/735 only */
526 #define	RFCR_RFADDR_MC8	  0x000c0000	/* multicast hash word 8 */
527 #define	RFCR_RFADDR_MC9	  0x000d0000	/* multicast hash word 9 */
528 #define	RFCR_RFADDR_MC10  0x000e0000	/* multicast hash word 10 */
529 #define	RFCR_RFADDR_MC11  0x000f0000	/* multicast hash word 11 */
530 #define	RFCR_RFADDR_MC12  0x00100000	/* multicast hash word 12 */
531 #define	RFCR_RFADDR_MC13  0x00110000	/* multicast hash word 13 */
532 #define	RFCR_RFADDR_MC14  0x00120000	/* multicast hash word 14 */
533 #define	RFCR_RFADDR_MC15  0x00130000	/* multicast hash word 15 */
534 
535 #define	RFCR_NS_RFADDR_PMATCH0	0x0000	/* perfect match octets 1-0 */
536 #define	RFCR_NS_RFADDR_PMATCH2	0x0002	/* perfect match octets 3-2 */
537 #define	RFCR_NS_RFADDR_PMATCH4	0x0004	/* perfect match octets 5-4 */
538 #define	RFCR_NS_RFADDR_PCOUNT	0x0006	/* pattern count */
539 #ifdef DP83820
540 #define	RFCR_NS_RFADDR_PCOUNT2	0x0008	/* pattern count 2, 3 */
541 #define	RFCR_NS_RFADDR_SOPAS0	0x000a	/* SecureOn 0, 1 */
542 #define	RFCR_NS_RFADDR_SOPAS2	0x000c	/* SecureOn 2, 3 */
543 #define	RFCR_NS_RFADDR_SOPAS4	0x000e	/* SecureOn 4, 5 */
544 #define	RFCR_NS_RFADDR_FILTMEM	0x0100	/* hash memory */
545 #define	RFCR_NS_RFADDR_PATMEM	0x0200	/* pattern memory */
546 #else
547 #define	RFCR_NS_RFADDR_FILTMEM	0x0200	/* filter memory (hash/pattern) */
548 #endif /* DP83820 */
549 
550 #define	SIP_RFDR	0x4c	/* receive filter data register */
551 #define	RFDR_BMASK	0x00030000	/* byte mask (83815) */
552 #define	RFDR_DATA	0x0000ffff	/* data bits */
553 
554 #define	SIP_NS_BRAR	0x50	/* boot rom address (83815) */
555 #define	BRAR_AUTOINC	0x80000000	/* autoincrement */
556 #define	BRAR_ADDR	0x0000ffff	/* address */
557 
558 #define	SIP_NS_BRDR	0x54	/* boot rom data (83815) */
559 
560 #define	SIP_NS_SRR	0x58	/* silicon revision register (83815) */
561 #ifdef DP83820
562 #define	SRR_REV_B	0x00000103
563 #else
564 #define	SRR_REV_A	0x00000101
565 #define	SRR_REV_B_1	0x00000200
566 #define	SRR_REV_B_2	0x00000201
567 #define	SRR_REV_B_3	0x00000203
568 #define	SRR_REV_C_1	0x00000300
569 #define	SRR_REV_C_2	0x00000302
570 #endif /* DP83820 */
571 
572 #define	SIP_NS_MIBC	0x5c	/* mib control register (83815) */
573 #define	MIBC_MIBS	0x00000008	/* mib counter strobe */
574 #define	MIBC_ACLR	0x00000004	/* clear all counters */
575 #define	MIBC_FRZ	0x00000002	/* freeze all counters */
576 #define	MIBC_WRN	0x00000001	/* warning test indicator */
577 
578 #define	SIP_NS_MIB(mibreg)	/* mib data registers (83815) */	\
579 	(0x60 + (mibreg))
580 #define	MIB_RXErroredPkts	0x00
581 #define	MIB_RXFCSErrors		0x04
582 #define	MIB_RXMsdPktErrors	0x08
583 #define	MIB_RXFAErrors		0x0c
584 #define	MIB_RXSymbolErrors	0x10
585 #define	MIB_RXFrameTooLong	0x14
586 #ifdef DP83820
587 #define	MIB_RXIRLErrors		0x18
588 #define	MIB_RXBadOpcodes	0x1c
589 #define	MIB_RXPauseFrames	0x20
590 #define	MIB_TXPauseFrames	0x24
591 #define	MIB_TXSQEErrors		0x28
592 #else
593 #define	MIB_RXTXSQEErrors	0x18
594 #endif /* DP83820 */
595 
596 #ifndef DP83820
597 #define	SIP_NS_PHY(miireg)	/* PHY registers (83815) */		\
598 	(0x80 + ((miireg) << 2))
599 #endif
600 
601 #ifdef DP83820
602 #define	SIP_TXDP1	0xa0	/* transmit descriptor pointer (pri 1) */
603 
604 #define	SIP_TXDP2	0xa4	/* transmit descriptor pointer (pri 2) */
605 
606 #define	SIP_TXDP3	0xa8	/* transmit descriptor pointer (pri 3) */
607 
608 #define	SIP_RXDP1	0xb0	/* receive descriptor pointer (pri 1) */
609 
610 #define	SIP_RXDP2	0xb4	/* receive descriptor pointer (pri 2) */
611 
612 #define	SIP_RXDP3	0xb8	/* receive descriptor pointer (pri 3) */
613 
614 #define	SIP_VRCR	0xbc	/* VLAN/IP receive control register */
615 #define	VRCR_RUDPE	0x00000080	/* reject UDP checksum errors */
616 #define	VRCR_RTCPE	0x00000040	/* reject TCP checksum errors */
617 #define	VRCR_RIPE	0x00000020	/* reject IP checksum errors */
618 #define	VRCR_IPEN	0x00000010	/* IP checksum enable */
619 #define	VRCR_DUTF	0x00000008	/* discard untagged frames */
620 #define	VRCR_DVTF	0x00000004	/* discard VLAN tagged frames */
621 #define	VRCR_VTREN	0x00000002	/* VLAN tag removal enable */
622 #define	VRCR_VTDEN	0x00000001	/* VLAN tag detection enable */
623 
624 #define	SIP_VTCR	0xc0	/* VLAN/IP transmit control register */
625 #define	VTCR_PPCHK	0x00000008	/* per-packet checksum generation */
626 #define	VTCR_GCHK	0x00000004	/* global checksum generation */
627 #define	VTCR_VPPTI	0x00000002	/* VLAN per-packet tag insertion */
628 #define	VTCR_VGTI	0x00000001	/* VLAN global tag insertion */
629 
630 #define	SIP_VDR		0xc4	/* VLAN data register */
631 #define	VDR_VTCI	0xffff0000	/* VLAN tag control information */
632 #define	VDR_VTYPE	0x0000ffff	/* VLAN type field */
633 
634 #define	SIP_NS_CCSR	0xcc	/* CLKRUN control/status register (83815) */
635 #define	CCSR_PMESTS	0x00008000	/* PME status */
636 #define	CCSR_PMEEN	0x00000100	/* PME enable */
637 #define	CCSR_CLKRUN_EN	0x00000001	/* clkrun enable */
638 
639 #define	SIP_TBICR	0xe0	/* TBI control register */
640 #define	TBICR_MR_LOOPBACK   0x00004000	/* TBI PCS loopback enable */
641 #define	TBICR_MR_AN_ENABLE  0x00001000	/* TBI autonegotiation enable */
642 #define	TBICR_MR_RESTART_AN 0x00000200	/* restart TBI autoneogtiation */
643 
644 #define	SIP_TBISR	0xe4	/* TBI status register */
645 #define	TBISR_MR_LINK_STATUS 0x00000020	/* TBI link status */
646 #define	TBISR_MR_AN_COMPLETE 0x00000004	/* TBI autonegotiation complete */
647 
648 #define	SIP_TANAR	0xe8	/* TBI autoneg adv. register */
649 #define	TANAR_NP	0x00008000	/* next page exchange required */
650 #define	TANAR_RF2	0x00002000	/* remote fault 2 */
651 #define	TANAR_RF1	0x00001000	/* remote fault 1 */
652 #define	TANAR_PS2	0x00000100	/* pause encoding 2 */
653 #define	TANAR_PS1	0x00000080	/* pause encoding 1 */
654 #define	TANAR_HALF_DUP	0x00000040	/* adv. half duplex */
655 #define	TANAR_FULL_DUP	0x00000020	/* adv. full duplex */
656 
657 #define	SIP_TANLPAR	0xec	/* TBI autoneg link partner ability register */
658 	/* See TANAR bits */
659 
660 #define	SIP_TANER	0xf0	/* TBI autoneg expansion register */
661 #define	TANER_NPA	0x00000004	/* we support next page function */
662 #define	TANER_PR	0x00000002	/* page received from link partner */
663 
664 #define	SIP_TESR	0xf4	/* TBI extended status register */
665 #define	TESR_1000FDX	0x00008000	/* we support 1000base FDX */
666 #define	TESR_1000HDX	0x00004000	/* we support 1000base HDX */
667 #else
668 #define	SIP_PMCTL	0xb0	/* power management control register */
669 #define	PMCTL_GATECLK	0x80000000	/* gate dual clock enable */
670 #define	PMCTL_WAKEALL	0x40000000	/* wake on all Rx OK */
671 #define	PMCTL_FRM3ACS	0x04000000	/* 3rd wake-up frame access */
672 #define	PMCTL_FRM2ACS	0x02000000	/* 2nd wake-up frame access */
673 #define	PMCTL_FRM1ACS	0x01000000	/* 1st wake-up frame access */
674 #define	PMCTL_FRM3EN	0x00400000	/* 3rd wake-up frame match enable */
675 #define	PMCTL_FRM2EN	0x00200000	/* 2nd wake-up frame match enable */
676 #define	PMCTL_FRM1EN	0x00100000	/* 1st wake-up frame match enable */
677 #define	PMCTL_ALGORITHM	0x00000800	/* Magic Packet match algorithm */
678 #define	PMCTL_MAGICPKT	0x00000400	/* Magic Packet match enable */
679 #define	PMCTL_LINKON	0x00000002	/* link on monitor enable */
680 #define	PMCTL_LINKLOSS	0x00000001	/* link loss monitor enable */
681 
682 #define	SIP_PMEVT	0xb4	/* power management wake-up evnt reg */
683 #define	PMEVT_ALLFRMMAT	0x40000000	/* receive packet ok */
684 #define	PMEVT_FRM3MAT	0x04000000	/* match 3rd wake-up frame */
685 #define	PMEVT_FRM2MAT	0x02000000	/* match 2nd wake-up frame */
686 #define	PMEVT_FRM1MAT	0x01000000	/* match 1st wake-up frame */
687 #define	PMEVT_MAGICPKT	0x00000400	/* Magic Packet */
688 #define	PMEVT_ONEVT	0x00000002	/* link on event */
689 #define	PMEVT_LOSSEVT	0x00000001	/* link loss event */
690 
691 #define	SIP_WAKECRC	0xbc	/* wake-up frame CRC register */
692 
693 #define	SIP_WAKEMASK0	0xc0	/* wake-up frame mask registers */
694 #define	SIP_WAKEMASK1	0xc4
695 #define	SIP_WAKEMASK2	0xc8
696 #define	SIP_WAKEMASK3	0xcc
697 #define	SIP_WAKEMASK4	0xe0
698 #define	SIP_WAKEMASK5	0xe4
699 #define	SIP_WAKEMASK6	0xe8
700 #define	SIP_WAKEMASK7	0xec
701 #endif /* DP83820 */
702 
703 /*
704  * Revision codes for the SiS 630 chipset built-in Ethernet.
705  */
706 #define	SIS_REV_900B	0x03
707 #define	SIS_REV_630E	0x81
708 #define	SIS_REV_630S	0x82
709 #define	SIS_REV_630EA1	0x83
710 #define	SIS_REV_630ET	0x84
711 #define	SIS_REV_635	0x90	/* same for 735 (745?) */
712 
713 /*
714  * Serial EEPROM opcodes, including the start bit.
715  */
716 #define	SIP_EEPROM_OPC_ERASE	0x04
717 #define	SIP_EEPROM_OPC_WRITE	0x05
718 #define	SIP_EEPROM_OPC_READ	0x06
719 
720 /*
721  * Serial EEPROM address map (byte address) for the SiS900.
722  */
723 #define	SIP_EEPROM_SIGNATURE	0x00	/* SiS 900 signature */
724 #define	SIP_EEPROM_MASK		0x02	/* `enable' mask */
725 #define	SIP_EEPROM_VENDOR_ID	0x04	/* PCI vendor ID */
726 #define	SIP_EEPROM_DEVICE_ID	0x06	/* PCI device ID */
727 #define	SIP_EEPROM_SUBVENDOR_ID	0x08	/* PCI subvendor ID */
728 #define	SIP_EEPROM_SUBSYSTEM_ID	0x0a	/* PCI subsystem ID */
729 #define	SIP_EEPROM_PMC		0x0c	/* PCI power management capabilities */
730 #define	SIP_EEPROM_reserved	0x0e	/* reserved */
731 #define	SIP_EEPROM_ETHERNET_ID0	0x10	/* Ethernet address 0, 1 */
732 #define	SIP_EEPROM_ETHERNET_ID1	0x12	/* Ethernet address 2, 3 */
733 #define	SIP_EEPROM_ETHERNET_ID2	0x14	/* Ethernet address 4, 5 */
734 #define	SIP_EEPROM_CHECKSUM	0x16	/* checksum */
735 
736 /*
737  * Serial EEPROM data (byte addresses) for the DP83815.
738  */
739 #define	SIP_DP83815_EEPROM_CHECKSUM	0x16	/* checksum */
740 #define	SIP_DP83815_EEPROM_LENGTH	0x18	/* length of EEPROM data */
741 
742 /*
743  * Serial EEPROM data (byte addresses) for the DP83820.
744  */
745 #define	SIP_DP83820_EEPROM_SUBSYSTEM_ID	0x00	/* PCI subsystem ID */
746 #define	SIP_DP83820_EEPROM_SUBVENDOR_ID	0x02	/* PCI subvendor ID */
747 #define	SIP_DP83820_EEPROM_CFGINT	0x04	/* PCI INT [31:16] */
748 #define	SIP_DP83820_EEPROM_SOPAS0	0x0e	/* SecureOn [47:32] */
749 #define	SIP_DP83820_EEPROM_SOPAS1	0x10	/* SecureOn [31:16] */
750 #define	SIP_DP83820_EEPROM_SOPAS2	0x12	/* SecureOn [15:0] */
751 #define	SIP_DP83820_EEPROM_PMATCH0	0x14	/* MAC [47:32] */
752 #define	SIP_DP83820_EEPROM_PMATCH1	0x16	/* MAC [31:16] */
753 #define	SIP_DP83820_EEPROM_PMATCH2	0x18	/* MAC [15:0] */
754 #define	SIP_DP83820_EEPROM_CHECKSUM	0x1a	/* checksum */
755 #define	SIP_DP83820_EEPROM_LENGTH	0x1c	/* length of EEPROM data */
756 
757 #endif /* _DEV_PCI_IF_SIPREG_H_ */
758