xref: /netbsd/sys/dev/ic/tulipreg.h (revision 98641738)
1 /*	$NetBSD: tulipreg.h,v 1.43 2022/08/01 07:37:18 mlelstv Exp $	*/
2 
3 /*-
4  * Copyright (c) 1999, 2000 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 of the Numerical Aerospace Simulation Facility,
9  * NASA Ames Research Center.
10  *
11  * Redistribution and use in source and binary forms, with or without
12  * modification, are permitted provided that the following conditions
13  * are met:
14  * 1. Redistributions of source code must retain the above copyright
15  *    notice, this list of conditions and the following disclaimer.
16  * 2. Redistributions in binary form must reproduce the above copyright
17  *    notice, this list of conditions and the following disclaimer in the
18  *    documentation and/or other materials provided with the distribution.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30  * POSSIBILITY OF SUCH DAMAGE.
31  */
32 
33 #ifndef _DEV_IC_TULIPREG_H_
34 #define	_DEV_IC_TULIPREG_H_
35 
36 /*
37  * Register description for the Digital Semiconductor ``Tulip'' (21x4x)
38  * Ethernet controller family, and a variety of clone chips, including:
39  *
40  *	- Macronix 98713, 98713A, 98715, 98715A, 98725 (PMAC):
41  *
42  *	  These chips are fairly straight-forward Tulip clones.
43  *	  The 98713 is a very close 21140A clone.  It has GPR
44  *	  and MII media, and a GPIO facility, and uses the ISV
45  *	  SROM format (or, at least, should, because of the GPIO
46  *	  facility).  The 98713A has MII, no GPIO facility, and
47  *	  an internal NWay block.  The 98715, 98715A, and 98725
48  *	  have only GPR media and the NWay block.  The 98715,
49  *	  98715A, and 98725 support power management.
50  *
51  *        The 98715AEC adds 802.3x flow Frame based Flow Control to the
52  *	  98715A.
53  *
54  *	- Lite-On 82C115 (PNIC II):
55  *
56  *	  A clone of the Macronix MX98725, with the following differences:
57  *
58  *		- Wake-On-LAN support
59  *		- 128-bit multicast hash table rather than the
60  *		  standard 512-bit hash table
61  *		- 802.3x flow control
62  *
63  *	- Lite-On 82C168, 82C169 (PNIC):
64  *
65  *	  Pretty close, with only a few minor differences:
66  *
67  *		- EEPROM is accessed completely differently.
68  *		- MII is accessed completely differently.
69  *		- No SIO facility (due to the above two differences).
70  *		- GPIO interface is different than the 21140's.
71  *		- Boards that lack PHYs use the internal NWay block
72  *		  and transceiver.
73  *
74  *	- Winbond 89C840F
75  *
76  *	  Less similar, but still roughly compatible (enough so
77  *	  that the driver can be adapted, at least):
78  *
79  *		- Registers lack the pad word between them.
80  *		- Instead of a setup frame, there are two station
81  *		  address registers and two multicast hash table
82  *		  registers (64-bit multicast hash table).
83  *		- Only supported media interface is MII-over-SIO.
84  *		- Different OPMODE register bits for various things
85  *		  (mostly media related).
86  *
87  *	- ADMtek AL981
88  *
89  *	  Another pretty-close clone:
90  *
91  *		- Wake-On-LAN support
92  *		- Instead of a setup frame, there are two station
93  *		  address registers and two multicast hash table
94  *		  registers (64-bit multicast hash table).
95  *		- 802.3x flow control
96  *		- Only supported media interface is built-in PHY
97  *		  which is accessed through a set of special registers.
98  *		- Not all registers have the pad word between them,
99  *		  but luckily, there are all AL981-specific registers,
100  *		  so this is easy to deal with.
101  *
102  *	- ADMtek AN983 and AN985
103  *
104  *	  Similar to the ADMtek AL981, but with a few differences.
105  *
106  *	- Xircom X3201-3
107  *
108  *	  CardBus 21143 clone, with a few differences:
109  *
110  *		- No MicroWire SROM; Ethernet address must come
111  *		  from CIS.
112  *		- Transmit buffers must also be 32-bit aligned.
113  *		- The BUSMODE_SWR bit is not self-clearing.
114  *		- Must include FS|LS in setup packet descriptor.
115  *		- SIA is not 21143-like, and all media attachments
116  *		  are MII-on-SIO.
117  *
118  *	- Davicom DM9102 and DM9102A
119  *
120  *	  Pretty similar to the 21140A, with a few differences:
121  *
122  *		- Wake-On-LAN support
123  *		- DM9102 has built-in 10/100 PHY on MII interface.
124  *		- DM9102A has built-in 10/100 PHY on MII interface,
125  *		  as well as a HomePNA 1 PHY on an alternate MII
126  *		  interface (selected by clearing OPMODE_PS).
127  *		- The chip has a bug in the transmit DMA logic,
128  *		  requiring that the packet be comprised of only
129  *		  one DMA segment.
130  *		- The bus interface is buggy, and the BUSMODE register
131  *		  must be initialized to 0.
132  *		- There seems to be an interrupt logic bug, requiring
133  *		  that interrupts be disabled on the chip during the
134  *		  interrupt handler.
135  *
136  *	- ASIX AX88140
137  *
138  *	  21143 clone with a few differences:
139  *
140  *	  	- Specific broadcast bit in the OPMODE register.
141  *	  	- Transmit buffer must be 32-bit aligned.
142  *	  	- The BUSMODE_SWR bit is not self-clearing.
143  *	  	- External 10BaseT PHY or 10/100 MII.
144  *
145  * Some of the clone chips have different registers, and some have
146  * different bits in the same registers.  These will be denoted by
147  * PMAC, PNICII, PNIC, DM, WINB, ADM and AX in the register/bit names.
148  */
149 
150 /*
151  * Tulip buffer descriptor.  Must be 4-byte aligned.
152  *
153  * Note for receive descriptors, the byte count fields must
154  * be a multiple of 4.
155  */
156 struct tulip_desc {
157 	volatile uint32_t td_status;	  /* Status */
158 	volatile uint32_t td_ctl;	  /* Control and Byte Counts */
159 	volatile uint32_t td_bufaddr1; /* Buffer Address 1 */
160 	volatile uint32_t td_bufaddr2; /* Buffer Address 2 */
161 } __packed __aligned(4);
162 
163 /*
164  * Descriptor Status bits common to transmit and receive.
165  */
166 #define	TDSTAT_OWN	0x80000000	/* Tulip owns descriptor */
167 #define	TDSTAT_ES	0x00008000	/* Error Summary */
168 
169 /*
170  * Descriptor Status bits for Receive Descriptor.
171  */
172 #define	TDSTAT_Rx_FF	0x40000000	/* Filtering Fail */
173 #define	TDSTAT_WINB_Rx_RCMP 0x40000000	/* Receive Complete */
174 #define	TDSTAT_Rx_FL	0x3fff0000	/* Frame Length including CRC */
175 #define	TDSTAT_Rx_DE	0x00004000	/* Descriptor Error */
176 #define	TDSTAT_Rx_DT	0x00003000	/* Data Type */
177 #define	TDSTAT_Rx_RF	0x00000800	/* Runt Frame */
178 #define	TDSTAT_Rx_MF	0x00000400	/* Multicast Frame */
179 #define	TDSTAT_Rx_FS	0x00000200	/* First Descriptor */
180 #define	TDSTAT_Rx_LS	0x00000100	/* Last Descriptor */
181 #define	TDSTAT_Rx_TL	0x00000080	/* Frame Too Long */
182 #define	TDSTAT_Rx_CS	0x00000040	/* Collision Seen */
183 #define	TDSTAT_Rx_RT	0x00000020	/* Frame Type */
184 #define	TDSTAT_Rx_RW	0x00000010	/* Receive Watchdog */
185 #define	TDSTAT_Rx_RE	0x00000008	/* Report on MII Error */
186 #define	TDSTAT_Rx_DB	0x00000004	/* Dribbling Bit */
187 #define	TDSTAT_Rx_CE	0x00000002	/* CRC Error */
188 #define	TDSTAT_Rx_ZER	0x00000001	/* Zero (always 0) */
189 
190 #define	TDSTAT_Rx_LENGTH(x)	(((x) & TDSTAT_Rx_FL) >> 16)
191 
192 #define	TDSTAT_Rx_DT_SR	0x00000000	/* Serial Received Frame */
193 #define	TDSTAT_Rx_DT_IL	0x00001000	/* Internal Loopback Frame */
194 #define	TDSTAT_Rx_DT_EL	0x00002000	/* External Loopback Frame */
195 #define	TDSTAT_Rx_DT_r	0x00003000	/* Reserved */
196 
197 /*
198  * Descriptor Status bits for Transmit Descriptor.
199  */
200 #define	TDSTAT_WINB_Tx_TE 0x00008000	/* Transmit Error */
201 #define	TDSTAT_Tx_TO	0x00004000	/* Transmit Jabber Timeout */
202 #define	TDSTAT_Tx_LO	0x00000800	/* Loss of Carrier */
203 #define	TDSTAT_Tx_NC	0x00000400	/* No Carrier */
204 #define	TDSTAT_Tx_LC	0x00000200	/* Late Collision */
205 #define	TDSTAT_Tx_EC	0x00000100	/* Excessive Collisions */
206 #define	TDSTAT_Tx_HF	0x00000080	/* Heartbeat Fail */
207 #define	TDSTAT_Tx_CC	0x00000078	/* Collision Count */
208 #define	TDSTAT_Tx_LF	0x00000004	/* Link Fail */
209 #define	TDSTAT_Tx_UF	0x00000002	/* Underflow Error */
210 #define	TDSTAT_Tx_DE	0x00000001	/* Deferred */
211 
212 #define	TDSTAT_Tx_COLLISIONS(x)	(((x) & TDSTAT_Tx_CC) >> 3)
213 
214 /*
215  * Descriptor Control bits common to transmit and receive.
216  */
217 #define	TDCTL_SIZE1	0x000007ff	/* Size of buffer 1 */
218 #define	TDCTL_SIZE1_SHIFT 0
219 
220 #define	TDCTL_SIZE2	0x003ff800	/* Size of buffer 2 */
221 #define	TDCTL_SIZE2_SHIFT 11
222 
223 #define	TDCTL_ER	0x02000000	/* End of Ring */
224 #define	TDCTL_CH	0x01000000	/* Second Address Chained */
225 
226 /*
227  * Descriptor Control bits for Transmit Descriptor.
228  */
229 #define	TDCTL_Tx_IC	0x80000000	/* Interrupt on Completion */
230 #define	TDCTL_Tx_LS	0x40000000	/* Last Segment */
231 #define	TDCTL_Tx_FS	0x20000000	/* First Segment */
232 #define	TDCTL_Tx_FT1	0x10000000	/* Filtering Type 1 */
233 #define	TDCTL_Tx_SET	0x08000000	/* Setup Packet */
234 #define	TDCTL_Tx_AC	0x04000000	/* Add CRC Disable */
235 #define	TDCTL_Tx_DPD	0x00800000	/* Disabled Padding */
236 #define	TDCTL_Tx_FT0	0x00400000	/* Filtering Type 0 */
237 
238 /*
239  * The Tulip filter is programmed by "transmitting" a Setup Packet
240  * (indicated by TDCTL_Tx_SET).  The filtering type is indicated
241  * as follows:
242  *
243  *	FT1	FT0	Description
244  *	---	---	-----------
245  *	0	0	Perfect Filtering: The Tulip interprets the
246  *			descriptor buffer as a table of 16 MAC addresses
247  *			that the Tulip should receive.
248  *
249  *	0	1	Hash Filtering: The Tulip interprets the
250  *			descriptor buffer as a 512-bit hash table
251  *			plus one perfect address.  If the incoming
252  *			address is Multicast, the hash table filters
253  *			the address, else the address is filtered by
254  *			the perfect address.
255  *
256  *	1	0	Inverse Filtering: Like Perfect Filtering, except
257  *			the table is addresses that the Tulip does NOT
258  *			receive.
259  *
260  *	1	1	Hash-only Filtering: Like Hash Filtering, but
261  *			physical addresses are matched by the hash table
262  *			as well, and not by matching a single perfect
263  *			address.
264  *
265  * A Setup Packet must always be 192 bytes long.  The Tulip can store
266  * 16 MAC addresses.  If not all 16 are specified in Perfect Filtering
267  * or Inverse Filtering mode, then unused entries should duplicate
268  * one of the valid entries.
269  */
270 #define	TDCTL_Tx_FT_PERFECT	0
271 #define	TDCTL_Tx_FT_HASH	TDCTL_Tx_FT0
272 #define	TDCTL_Tx_FT_INVERSE	TDCTL_Tx_FT1
273 #define	TDCTL_Tx_FT_HASHONLY	(TDCTL_Tx_FT1|TDCTL_Tx_FT0)
274 
275 #define	TULIP_SETUP_PACKET_LEN	192
276 #define	TULIP_MAXADDRS		16
277 #define	TULIP_MCHASHSIZE	512
278 #define	TULIP_PNICII_HASHSIZE	128
279 
280 /*
281  * Maximum size of a Tulip Ethernet Address ROM or SROM.
282  */
283 #define	TULIP_ROM_SIZE(bits)	(2 << (bits))
284 #define	TULIP_MAX_ROM_SIZE	512
285 
286 /*
287  * Format of the standard Tulip SROM information:
288  *
289  *	Byte offset	Size	Usage
290  *	0		18	reserved
291  *	18		1	SROM Format Version
292  *	19		1	Chip Count
293  *	20		6	IEEE Network Address
294  *	26		1	Chip 0 Device Number
295  *	27		2	Chip 0 Info Leaf Offset
296  *	29		1	Chip 1 Device Number
297  *	30		2	Chip 1 Info Leaf Offset
298  *	32		1	Chip 2 Device Number
299  *	33		2	Chip 2 Info Leaf Offset
300  *	...		1	Chip n Device Number
301  *	...		2	Chip n Info Leaf Offset
302  *	...		...	...
303  *	Chip Info Leaf Information
304  *	...
305  *	...
306  *	...
307  *	126		2	CRC32 checksum
308  */
309 #define	TULIP_ROM_SROM_FORMAT_VERION		18		/* B */
310 #define	TULIP_ROM_CHIP_COUNT			19		/* B */
311 #define	TULIP_ROM_IEEE_NETWORK_ADDRESS		20
312 #define	TULIP_ROM_CHIPn_DEVICE_NUMBER(n)	(26 + ((n) * 3))/* B */
313 #define	TULIP_ROM_CHIPn_INFO_LEAF_OFFSET(n)	(27 + ((n) * 3))/* W */
314 #define	TULIP_ROM_CRC32_CHECKSUM		126		/* W */
315 #define	TULIP_ROM_CRC32_CHECKSUM1		94		/* W */
316 
317 #define	TULIP_ROM_IL_SELECT_CONN_TYPE		0		/* W */
318 #define	TULIP_ROM_IL_MEDIA_COUNT		2		/* B */
319 #define	TULIP_ROM_IL_MEDIAn_BLOCK_BASE		3
320 
321 #define	SELECT_CONN_TYPE_TP		0x0000
322 #define	SELECT_CONN_TYPE_BNC		0x0001
323 #define	SELECT_CONN_TYPE_AUI		0x0002
324 #define	SELECT_CONN_TYPE_100TX		0x0003
325 #define	SELECT_CONN_TYPE_100T4		0x0006
326 #define	SELECT_CONN_TYPE_100FX		0x0007
327 #define	SELECT_CONN_TYPE MII_10T	0x0009
328 #define	SELECT_CONN_TYPE_MII_100TX	0x000d
329 #define	SELECT_CONN_TYPE_MII_100T4	0x000f
330 #define	SELECT_CONN_TYPE_MII_100FX	0x0010
331 #define	SELECT_CONN_TYPE_TP_AUTONEG	0x0100
332 #define	SELECT_CONN_TYPE_TP_FDX		0x0204
333 #define	SELECT_CONN_TYPE_MII_10T_FDX	0x020a
334 #define	SELECT_CONN_TYPE_100TX_FDX	0x020e
335 #define	SELECT_CONN_TYPE_MII_100TX_FDX	0x0211
336 #define	SELECT_CONN_TYPE_TP_NOLINKPASS	0x0400
337 #define	SELECT_CONN_TYPE_ASENSE		0x0800
338 #define	SELECT_CONN_TYPE_ASENSE_POWERUP	0x8800
339 #define	SELECT_CONN_TYPE_ASENSE_AUTONEG	0x0900
340 
341 #define	TULIP_ROM_MB_MEDIA_CODE		0x3f
342 #define	TULIP_ROM_MB_MEDIA_TP		0x00
343 #define	TULIP_ROM_MB_MEDIA_BNC		0x01
344 #define	TULIP_ROM_MB_MEDIA_AUI		0x02
345 #define	TULIP_ROM_MB_MEDIA_100TX	0x03
346 #define	TULIP_ROM_MB_MEDIA_TP_FDX	0x04
347 #define	TULIP_ROM_MB_MEDIA_100TX_FDX	0x05
348 #define	TULIP_ROM_MB_MEDIA_100T4	0x06
349 #define	TULIP_ROM_MB_MEDIA_100FX	0x07
350 #define	TULIP_ROM_MB_MEDIA_100FX_FDX	0x08
351 
352 #define	TULIP_ROM_MB_EXT		0x40
353 
354 #define	TULIP_ROM_MB_CSR13		1			/* W */
355 #define	TULIP_ROM_MB_CSR14		3			/* W */
356 #define	TULIP_ROM_MB_CSR15		5			/* W */
357 
358 #define	TULIP_ROM_MB_SIZE(mc)		(((mc) & TULIP_ROM_MB_EXT) ? 7 : 1)
359 
360 #define	TULIP_ROM_MB_NOINDICATOR	0x8000
361 #define	TULIP_ROM_MB_DEFAULT		0x4000
362 #define	TULIP_ROM_MB_POLARITY		0x0080
363 #define	TULIP_ROM_MB_OPMODE(x)		(((x) & 0x71) << 18)
364 #define	TULIP_ROM_MB_BITPOS(x)		(1 << (((x) & 0x0e) >> 1))
365 
366 #define	TULIP_ROM_MB_21140_GPR		0	/* 21140[A] GPR block */
367 #define	TULIP_ROM_MB_21140_MII		1	/* 21140[A] MII block */
368 #define	TULIP_ROM_MB_21142_SIA		2	/* 2114[23] SIA block */
369 #define	TULIP_ROM_MB_21142_MII		3	/* 2114[23] MII block */
370 #define	TULIP_ROM_MB_21143_SYM		4	/* 21143 SYM block */
371 #define	TULIP_ROM_MB_21143_RESET	5	/* 21143 reset block */
372 
373 #define	TULIP_ROM_GETW(data, off) ((uint32_t)(data)[(off)] |		\
374 				   (uint32_t)((data)[(off) + 1]) << 8)
375 
376 /*
377  * Tulip control registers.
378  */
379 
380 #define	TULIP_CSR0	0x00
381 #define	TULIP_CSR1	0x08
382 #define	TULIP_CSR2	0x10
383 #define	TULIP_CSR3	0x18
384 #define	TULIP_CSR4	0x20
385 #define	TULIP_CSR5	0x28
386 #define	TULIP_CSR6	0x30
387 #define	TULIP_CSR7	0x38
388 #define	TULIP_CSR8	0x40
389 #define	TULIP_CSR9	0x48
390 #define	TULIP_CSR10	0x50
391 #define	TULIP_CSR11	0x58
392 #define	TULIP_CSR12	0x60
393 #define	TULIP_CSR13	0x68
394 #define	TULIP_CSR14	0x70
395 #define	TULIP_CSR15	0x78
396 #define	TULIP_CSR16	0x80
397 #define	TULIP_CSR17	0x88
398 #define	TULIP_CSR18	0x90
399 #define	TULIP_CSR19	0x98
400 #define	TULIP_CSR20	0xa0
401 #define	TULIP_CSR21	0xa8
402 #define	TULIP_CSR22	0xb0
403 #define	TULIP_CSR23	0xb8
404 #define	TULIP_CSR24	0xc0
405 #define	TULIP_CSR25	0xc8
406 #define	TULIP_CSR26	0xd0
407 #define	TULIP_CSR27	0xd8
408 #define	TULIP_CSR28	0xe0
409 #define	TULIP_CSR29	0xe8
410 #define	TULIP_CSR30	0xf0
411 #define	TULIP_CSR31	0xf8
412 
413 #define	TULIP_CSR_INDEX(csr)	((csr) >> 3)
414 
415 /* CSR0 - Bus Mode */
416 #define	CSR_BUSMODE		TULIP_CSR0
417 #define	BUSMODE_SWR		0x00000001	/* software reset */
418 #define	BUSMODE_BAR		0x00000002	/* bus arbitration */
419 #define	BUSMODE_DSL		0x0000007c	/* descriptor skip length */
420 #define	BUSMODE_BLE		0x00000080	/* big endian */
421 						/* programmable burst length */
422 #define	BUSMODE_PBL_DEFAULT	0x00000000	/*     default value */
423 #define	BUSMODE_PBL_1LW		0x00000100	/*     1 longword */
424 #define	BUSMODE_PBL_2LW		0x00000200	/*     2 longwords */
425 #define	BUSMODE_PBL_4LW		0x00000400	/*     4 longwords */
426 #define	BUSMODE_PBL_8LW		0x00000800	/*     8 longwords */
427 #define	BUSMODE_PBL_16LW	0x00001000	/*    16 longwords */
428 #define	BUSMODE_PBL_32LW	0x00002000	/*    32 longwords */
429 						/* cache alignment */
430 #define	BUSMODE_CAL_NONE	0x00000000	/*     no alignment */
431 #define	BUSMODE_CAL_8LW		0x00004000	/*     8 longwords */
432 #define	BUSMODE_CAL_16LW	0x00008000	/*    16 longwords */
433 #define	BUSMODE_CAL_32LW	0x0000c000	/*    32 longwords */
434 #define	BUSMODE_DAS		0x00010000	/* diagnostic address space */
435 						/*   must be zero on most */
436 						/* transmit auto-poll */
437 		/*
438 		 * Transmit auto-polling not supported on:
439 		 *	Winbond 89C040F
440 		 *	Xircom X3201-3
441 		 *	Davicom DM9102 (buggy BUSMODE register)
442 		 *	ASIX AX88140
443 		 */
444 #define	BUSMODE_TAP_NONE	0x00000000	/*     no auto-polling */
445 #define	BUSMODE_TAP_200us	0x00020000	/*   200 uS */
446 #define	BUSMODE_TAP_800us	0x00040000	/*   400 uS */
447 #define	BUSMODE_TAP_1_6ms	0x00060000	/*   1.6 mS */
448 #define	BUSMODE_TAP_12_8us	0x00080000	/*  12.8 uS (21041+) */
449 #define	BUSMODE_TAP_25_6us	0x000a0000	/*  25.6 uS (21041+) */
450 #define	BUSMODE_TAP_51_2us	0x000c0000	/*  51.2 uS (21041+) */
451 #define	BUSMODE_TAP_102_4us	0x000e0000	/* 102.4 uS (21041+) */
452 #define	BUSMODE_DBO		0x00100000	/* desc-only b/e (21041+) */
453 #define	BUSMODE_RME		0x00200000	/* rd/mult enab (21140+) */
454 #define	BUSMODE_WINB_WAIT	0x00200000	/* wait state insertion */
455 #define	BUSMODE_RLE		0x00800000	/* rd/line enab (21140+) */
456 #define	BUSMODE_WLE		0x01000000	/* wt/line enab (21140+) */
457 #define	BUSMODE_PNIC_MBO	0x04000000	/* magic `must be one' bit */
458 						/*    on Lite-On PNIC */
459 
460 
461 /* CSR1 - Transmit Poll Demand */
462 #define	CSR_TXPOLL		TULIP_CSR1
463 #define	TXPOLL_TPD		0x00000001	/* transmit poll demand */
464 
465 
466 /* CSR2 - Receive Poll Demand */
467 #define	CSR_RXPOLL		TULIP_CSR2
468 #define	RXPOLL_RPD		0x00000001	/* receive poll demand */
469 
470 
471 /* CSR3 - Receive List Base Address */
472 #define	CSR_RXLIST		TULIP_CSR3
473 
474 /* CSR4 - Transmit List Base Address */
475 #define	CSR_TXLIST		TULIP_CSR4
476 
477 /* CSR5 - Status */
478 #define	CSR_STATUS		TULIP_CSR5
479 #define	STATUS_TI		0x00000001	/* transmit interrupt */
480 #define	STATUS_TPS		0x00000002	/* transmit process stopped */
481 #define	STATUS_TU		0x00000004	/* transmit buffer unavail */
482 #define	STATUS_TJT		0x00000008	/* transmit jabber timeout */
483 #define	STATUS_WINB_REI		0x00000008	/* receive early interrupt */
484 #define	STATUS_LNPANC		0x00000010	/* link pass (21041) */
485 #define	STATUS_WINB_RERR	0x00000010	/* receive error */
486 #define	STATUS_UNF		0x00000020	/* transmit underflow */
487 #define	STATUS_RI		0x00000040	/* receive interrupt */
488 #define	STATUS_RU		0x00000080	/* receive buffer unavail */
489 #define	STATUS_RPS		0x00000100	/* receive process stopped */
490 #define	STATUS_RWT		0x00000200	/* receive watchdog timeout */
491 #define	STATUS_AT		0x00000400	/* SIA AUI/TP pin changed
492 						   (21040) */
493 #define	STATUS_ETI		0x00000400	/* early transmit interrupt
494 						   (21142/PMAC/Winbond) */
495 #define	STATUS_FD		0x00000800	/* full duplex short frame
496 						   received (21040) */
497 #define	STATUS_TM		0x00000800	/* timer expired (21041) */
498 #define	STATUS_LNF		0x00001000	/* link fail (21040) */
499 #define	STATUS_SE		0x00002000	/* system error */
500 #define	STATUS_ER		0x00004000	/* early receive (21041) */
501 #define	STATUS_AIS		0x00008000	/* abnormal interrupt summary */
502 #define	STATUS_NIS		0x00010000	/* normal interrupt summary */
503 #define	STATUS_RS		0x000e0000	/* receive process state */
504 #define	STATUS_RS_STOPPED	0x00000000	/* Stopped */
505 #define	STATUS_RS_FETCH		0x00020000	/* Running - fetch receive
506 						   descriptor */
507 #define	STATUS_RS_CHECK		0x00040000	/* Running - check for end
508 						   of receive */
509 #define	STATUS_RS_WAIT		0x00060000	/* Running - wait for packet */
510 #define	STATUS_RS_SUSPENDED	0x00080000	/* Suspended */
511 #define	STATUS_RS_CLOSE		0x000a0000	/* Running - close receive
512 						   descriptor */
513 #define	STATUS_RS_FLUSH		0x000c0000	/* Running - flush current
514 						   frame from FIFO */
515 #define	STATUS_RS_QUEUE		0x000e0000	/* Running - queue current
516 						   frame from FIFO into
517 						   buffer */
518 #define	STATUS_DM_RS_STOPPED	0x00000000	/* Stopped */
519 #define	STATUS_DM_RS_FETCH	0x00020000	/* Running - fetch receive
520 						   descriptor */
521 #define	STATUS_DM_RS_WAIT	0x00040000	/* Running - wait for packet */
522 #define	STATUS_DM_RS_QUEUE	0x00060000	/* Running - queue current
523 						   frame from FIFO into
524 						   buffer */
525 #define	STATUS_DM_RS_CLOSE_OWN	0x00080000	/* Running - close receive
526 						   descriptor, clear own */
527 #define	STATUS_DM_RS_CLOSE_ST	0x000a0000	/* Running - close receive
528 						   descriptor, write status */
529 #define	STATUS_DM_RS_SUSPENDED	0x000c0000	/* Suspended */
530 #define	STATUS_DM_RS_FLUSH	0x000e0000	/* Running - flush current
531 						   frame from FIFO */
532 #define	STATUS_TS		0x00700000	/* transmit process state */
533 #define	STATUS_TS_STOPPED	0x00000000	/* Stopped */
534 #define	STATUS_TS_FETCH		0x00100000	/* Running - fetch transmit
535 						   descriptor */
536 #define	STATUS_TS_WAIT		0x00200000	/* Running - wait for end
537 						   of transmission */
538 #define	STATUS_TS_READING	0x00300000	/* Running - read buffer from
539 						   memory and queue into
540 						   FIFO */
541 #define	STATUS_TS_RESERVED	0x00400000	/* RESERVED */
542 #define	STATUS_TS_SETUP		0x00500000	/* Running - Setup packet */
543 #define	STATUS_TS_SUSPENDED	0x00600000	/* Suspended */
544 #define	STATUS_TS_CLOSE		0x00700000	/* Running - close transmit
545 						   descriptor */
546 #define	STATUS_DM_TS_STOPPED	0x00000000	/* Stopped */
547 #define	STATUS_DM_TS_FETCH	0x00100000	/* Running - fetch transmit
548 						   descriptor */
549 #define	STATUS_DM_TS_SETUP	0x00200000	/* Running - Setup packet */
550 #define	STATUS_DM_TS_READING	0x00300000	/* Running - read buffer from
551 						   memory and queue into
552 						   FIFO */
553 #define	STATUS_DM_TS_CLOSE_OWN	0x00400000	/* Running - close transmit
554 						   descriptor, clear own */
555 #define	STATUS_DM_TS_WAIT	0x00500000	/* Running - wait for end
556 						   of transmission */
557 #define	STATUS_DM_TS_CLOSE_ST	0x00600000	/* Running - close transmit
558 						   descriptor, write status */
559 #define	STATUS_DM_TS_SUSPENDED	0x00700000	/* Suspended */
560 #define	STATUS_EB		0x03800000	/* error bits */
561 #define	STATUS_EB_PARITY	0x00000000	/* parity errror */
562 #define	STATUS_EB_MABT		0x00800000	/* master abort */
563 #define	STATUS_EB_TABT		0x01000000	/* target abort */
564 #define	STATUS_GPPI		0x04000000	/* GPIO interrupt (21142) */
565 #define	STATUS_PNIC_TXABORT	0x04000000	/* transmit aborted */
566 #define	STATUS_LC		0x08000000	/* 100baseTX link change
567 						   (21142/PMAC) */
568 #define	STATUS_PMAC_WKUPI	0x10000000	/* wake up event */
569 #define	STATUS_X3201_PMEIS	0x10000000	/* power management event
570 						   interrupt summary */
571 #define	STATUS_X3201_SFIS	0x80000000	/* second function (Modem)
572 						   interrupt status */
573 
574 
575 /* CSR6 - Operation Mode */
576 #define	CSR_OPMODE		TULIP_CSR6
577 #define	OPMODE_HP		0x00000001	/* hash/perfect mode (ro) */
578 #define	OPMODE_SR		0x00000002	/* start receive */
579 #define	OPMODE_HO		0x00000004	/* hash only mode (ro) */
580 #define	OPMODE_PB		0x00000008	/* pass bad frames */
581 #define	OPMODE_WINB_APP		0x00000008	/* accept all physical
582 						   packets */
583 #define	OPMODE_IF		0x00000010	/* inverse filter mode (ro) */
584 #define	OPMODE_WINB_AMP		0x00000010	/* accept multicast packet */
585 #define	OPMODE_SB		0x00000020	/* start backoff counter */
586 #define	OPMODE_WINB_ABP		0x00000020	/* accept broadcast packet */
587 #define	OPMODE_PR		0x00000040	/* promiscuous mode */
588 #define	OPMODE_WINB_ARP		0x00000040	/* accept runt packet */
589 #define	OPMODE_PM		0x00000080	/* pass all multicast */
590 #define	OPMODE_WINB_AEP		0x00000080	/* accept error packet */
591 #define	OPMODE_FKD		0x00000100	/* flaky oscillator disable */
592 #define OPMODE_AX_RB		0x00000100	/* receive broadcast packets */
593 #define	OPMODE_FD		0x00000200	/* full-duplex mode */
594 #define	OPMODE_OM		0x00000c00	/* operating mode */
595 #define	OPMODE_OM_NORMAL	0x00000000	/*     normal mode */
596 #define	OPMODE_OM_INTLOOP	0x00000400	/*     internal loopback */
597 #define	OPMODE_OM_EXTLOOP	0x00000800	/*     external loopback */
598 #define	OPMODE_FC		0x00001000	/* force collision */
599 #define	OPMODE_ST		0x00002000	/* start transmitter */
600 #define	OPMODE_TR		0x0000c000	/* threshold control */
601 #define	OPMODE_TR_72		0x00000000	/*     72 bytes */
602 #define	OPMODE_TR_96		0x00004000	/*     96 bytes */
603 #define	OPMODE_TR_128		0x00008000	/*    128 bytes */
604 #define	OPMODE_TR_160		0x0000c000	/*    160 bytes */
605 #define	OPMODE_WINB_TTH		0x001fc000	/* transmit threshold */
606 #define	OPMODE_WINB_TTH_SHIFT	14
607 #define	OPMODE_BP		0x00010000	/* backpressure enable */
608 #define	OPMODE_CA		0x00020000	/* capture effect enable */
609 #define	OPMODE_PNIC_TBEN	0x00020000	/* Tx backoff offset enable */
610 	/*
611 	 * On Davicom DM9102, OPMODE_PS and OPMODE_HBD must
612 	 * always be set.
613 	 */
614 #define	OPMODE_PS		0x00040000	/* port select:
615 						   1 = MII/SYM, 0 = SRL
616 						   (21140) */
617 #define	OPMODE_HBD		0x00080000	/* heartbeat disable:
618 						   set in MII/SYM 100mbps,
619 						   set according to PHY
620 						   in MII 10mbps mode
621 						   (21140) */
622 #define	OPMODE_PNIC_IT		0x00100000	/* immediate transmit */
623 #define	OPMODE_SF		0x00200000	/* store and forward mode
624 						   (21140) */
625 #define	OPMODE_WINB_REIT	0x1fe00000	/* receive eartly intr thresh */
626 #define	OPMODE_WINB_REIT_SHIFT	21
627 #define	OPMODE_TTM		0x00400000	/* Transmit Threshold Mode:
628 						   1 = 10mbps, 0 = 100mbps
629 						   (21140) */
630 #define	OPMODE_PCS		0x00800000	/* PCS function (21140) */
631 #define	OPMODE_SCR		0x01000000	/* scrambler mode (21140) */
632 #define	OPMODE_MBO		0x02000000	/* must be one (21140,
633 						   DM9102) */
634 #define	OPMODE_IDAMSB		0x04000000	/* ignore dest addr MSB
635 						   (21142) */
636 #define	OPMODE_PNIC_DRC		0x20000000	/* don't include CRC in Rx
637 						   frames (PNIC) */
638 #define	OPMODE_WINB_FES		0x20000000	/* fast ethernet select */
639 #define	OPMODE_RA		0x40000000	/* receive all (21140) */
640 #define	OPMODE_PNIC_EED		0x40000000	/* 1 == ext, 0 == int ENDEC
641 						   (PNIC) */
642 #define	OPMODE_WINB_TEIO	0x40000000	/* transmit early intr on */
643 #define	OPMODE_SC		0x80000000	/* special capture effect
644 						   enable (21041+) */
645 #define	OPMODE_WINB_REIO	0x80000000	/* receive early intr on */
646 
647 /* Shorthand for media-related OPMODE bits */
648 #define	OPMODE_MEDIA_BITS	(OPMODE_FD|OPMODE_PS|OPMODE_TTM|OPMODE_PCS|OPMODE_SCR)
649 
650 /* CSR7 - Interrupt Enable */
651 #define	CSR_INTEN		TULIP_CSR7
652 	/* See bits for CSR5 -- Status */
653 
654 
655 /* CSR8 - Missed Frames */
656 #define	CSR_MISSED		TULIP_CSR8
657 #define	MISSED_MFC		0x0000ffff	/* missed packet count */
658 #define	MISSED_MFO		0x00010000	/* missed packet count
659 						   overflowed */
660 #define	MISSED_FOC		0x0ffe0000	/* fifo overflow counter
661 						   (21140) */
662 #define	MISSED_OCO		0x10000000	/* overflow counter overflowed
663 						   (21140) */
664 
665 #define	MISSED_GETMFC(x)	((x) & MISSED_MFC)
666 #define	MISSED_GETFOC(x)	(((x) & MISSED_FOC) >> 17)
667 
668 
669 /* CSR9 - MII, SROM, Boot ROM, Ethernet Address ROM register. */
670 #define	CSR_MIIROM		TULIP_CSR9
671 #define	MIIROM_DATA		0x000000ff	/* byte of data from
672 						   Ethernet Address ROM
673 						   (21040), byte of data
674 						   to/from Boot ROM (21041+) */
675 #define	MIIROM_SROMCS		0x00000001	/* SROM chip select */
676 #define	MIIROM_SROMSK		0x00000002	/* SROM clock */
677 #define	MIIROM_SROMDI		0x00000004	/* SROM data in (to) */
678 #define	MIIROM_SROMDO		0x00000008	/* SROM data out (from) */
679 #define	MIIROM_REG		0x00000400	/* external register select */
680 #define	MIIROM_SR		0x00000800	/* SROM select */
681 #define	MIIROM_BR		0x00001000	/* boot ROM select */
682 #define	MIIROM_WR		0x00002000	/* write to boot ROM */
683 #define	MIIROM_RD		0x00004000	/* read from boot ROM */
684 #define	MIIROM_MOD		0x00008000	/* mode select (ro) (21041) */
685 #define	MIIROM_MDC		0x00010000	/* MII clock */
686 #define	MIIROM_MDO		0x00020000	/* MII data out */
687 #define	MIIROM_MIIDIR		0x00040000	/* MII direction mode
688 						   1 = PHY in read,
689 						   0 = PHY in write */
690 #define	MIIROM_MDI		0x00080000	/* MII data in */
691 #define	MIIROM_DN		0x80000000	/* data not valid (21040) */
692 
693 #define	MIIROM_PMAC_LED0SEL	0x10000000	/* 0 == LED0 activity (def)
694 						   1 == LED0 speed */
695 #define	MIIROM_PMAC_LED1SEL	0x20000000	/* 0 == LED1 link (def)
696 						   1 == LED1 link/act */
697 #define	MIIROM_PMAC_LED2SEL	0x40000000	/* 0 == LED2 speed (def)
698 						   1 == LED2 collision */
699 #define	MIIROM_PMAC_LED3SEL	0x80000000	/* 0 == LED3 receive (def)
700 						   1 == LED3 full duplex */
701 
702 	/* SROM opcodes */
703 #define	TULIP_SROM_OPC_ERASE	0x04
704 #define	TULIP_SROM_OPC_WRITE	0x05
705 #define	TULIP_SROM_OPC_READ	0x06
706 
707 	/* The Lite-On PNIC does this completely differently */
708 #define	PNIC_MIIROM_DATA	0x0000ffff	/* mask of data bits ??? */
709 #define	PNIC_MIIROM_BUSY	0x80000000	/* EEPROM is busy */
710 
711 
712 /* CSR10 - Boot ROM address register (21041+). */
713 #define	CSR_ROMADDR		TULIP_CSR10
714 #define	ROMADDR_MASK		0x000003ff	/* boot rom address */
715 
716 
717 /* CSR11 - General Purpose Timer (21041+). */
718 #define	CSR_GPT			TULIP_CSR11
719 #define	GPT_VALUE		0x0000ffff	/* timer value */
720 #define	GPT_CON			0x00010000	/* continuous mode */
721 	/* 21143-PD and 21143-TD Interrupt Mitigation bits */
722 #define	GPT_NRX			0x000e0000	/* number of Rx packets */
723 #define	GPT_RXT			0x00f00000	/* Rx timer */
724 #define	GPT_NTX			0x07000000	/* number of Tx packets */
725 #define	GPT_TXT			0x78000000	/* Tx timer */
726 #define	GPT_CYCLE		0x80000000	/* cycle size */
727 
728 
729 /* CSR12 - SIA Status Register. */
730 #define	CSR_SIASTAT		TULIP_CSR12
731 #define	SIASTAT_PAUI		0x00000001	/* pin AUI/TP indication
732 						   (21040) */
733 #define	SIASTAT_MRA		0x00000001	/* MII receive activity
734 						   (21142) */
735 #define	SIASTAT_NCR		0x00000002	/* network connection error */
736 #define	SIASTAT_LS100		0x00000002	/* 100baseT link status
737 						   0 == pass (21142) */
738 #define	SIASTAT_LKF		0x00000004	/* link fail status */
739 #define	SIASTAT_LS10		0x00000004	/* 10baseT link status
740 						   0 == pass (21142) */
741 #define	SIASTAT_APS		0x00000008	/* auto polarity status */
742 #define	SIASTAT_DSD		0x00000010	/* PLL self test done */
743 #define	SIASTAT_DSP		0x00000020	/* PLL self test pass */
744 #define	SIASTAT_DAZ		0x00000040	/* PLL all zero */
745 #define	SIASTAT_DAO		0x00000080	/* PLL all one */
746 #define	SIASTAT_SRA		0x00000100	/* selected port receive
747 						   activity (21041) */
748 #define	SIASTAT_ARA		0x00000100	/* AUI receive activity
749 						   (21142) */
750 #define	SIASTAT_NRA		0x00000200	/* non-selected port
751 						   receive activity (21041) */
752 #define	SIASTAT_TRA		0x00000200	/* 10base-T receive activity
753 						   (21142) */
754 #define	SIASTAT_NSN		0x00000400	/* non-stable NLPs detected
755 						   (21041) */
756 #define	SIASTAT_TRF		0x00000800	/* transmit remote fault
757 						   (21041) */
758 #define	SIASTAT_ANS		0x00007000	/* autonegotiation state
759 						   (21041) */
760 #define	SIASTAT_ANS_DIS		0x00000000	/*     disabled */
761 #define	SIASTAT_ANS_TXDIS	0x00001000	/*     transmit disabled */
762 #define	SIASTAT_ANS_START	0x00001000	/*     (MX98715AEC) */
763 #define	SIASTAT_ANS_ABD		0x00002000	/*     ability detect */
764 #define	SIASTAT_ANS_ACKD	0x00003000	/*     acknowledge detect */
765 #define	SIASTAT_ANS_ACKC	0x00004000	/*     complete acknowledge */
766 #define	SIASTAT_ANS_FLPGOOD	0x00005000	/*     FLP link good */
767 #define	SIASTAT_ANS_LINKCHECK	0x00006000	/*     link check */
768 #define	SIASTAT_LPN		0x00008000	/* link partner negotiable
769 						   (21041) */
770 #define	SIASTAT_LPC		0xffff0000	/* link partner code word */
771 
772 #define	SIASTAT_GETLPC(x)	(((x) & SIASTAT_LPC) >> 16)
773 
774 
775 /* CSR13 - SIA Connectivity Register. */
776 #define	CSR_SIACONN		TULIP_CSR13
777 #define	SIACONN_SRL		0x00000001	/* SIA reset
778 						   (0 == reset) */
779 #define	SIACONN_PS		0x00000002	/* pin AUI/TP selection
780 						   (21040) */
781 #define	SIACONN_CAC		0x00000004	/* CSR autoconfiguration */
782 #define	SIACONN_AUI		0x00000008	/* select AUI (0 = TP) */
783 #define	SIACONN_EDP		0x00000010	/* SIA PLL external input
784 						   enable (21040) */
785 #define	SIACONN_ENI		0x00000020	/* encoder input multiplexer
786 						   (21040) */
787 #define	SIACONN_SIM		0x00000040	/* serial interface input
788 						   multiplexer (21040) */
789 #define	SIACONN_ASE		0x00000080	/* APLL start enable
790 						   (21040) */
791 #define	SIACONN_SEL		0x00000f00	/* external port output
792 						   multiplexer select
793 						   (21040) */
794 #define	SIACONN_IE		0x00001000	/* input enable (21040) */
795 #define	SIACONN_OE1_3		0x00002000	/* output enable 1, 3
796 						   (21040) */
797 #define	SIACONN_OE2_4		0x00004000	/* output enable 2, 4
798 						   (21040) */
799 #define	SIACONN_OE5_6_7		0x00008000	/* output enable 5, 6, 7
800 						   (21040) */
801 #define	SIACONN_SDM		0x0000ef00	/* SIA diagnostic mode;
802 						   always set to this value
803 						   for normal operation
804 						   (21041) */
805 
806 
807 /* CSR14 - SIA Transmit Receive Register. */
808 #define	CSR_SIATXRX		TULIP_CSR14
809 #define	SIATXRX_ECEN		0x00000001	/* encoder enable */
810 #define	SIATXRX_LBK		0x00000002	/* loopback enable */
811 #define	SIATXRX_DREN		0x00000004	/* driver enable */
812 #define	SIATXRX_LSE		0x00000008	/* link pulse send enable */
813 #define	SIATXRX_CPEN		0x00000030	/* compensation enable */
814 #define	SIATXRX_CPEN_DIS0	0x00000000	/*     disabled */
815 #define	SIATXRX_CPEN_DIS1	0x00000010	/*     disabled */
816 #define	SIATXRX_CPEN_HIGHPWR	0x00000020	/*     high power */
817 #define	SIATXRX_CPEN_NORMAL	0x00000030	/*     normal */
818 #define	SIATXRX_MBO		0x00000040	/* must be one (21041 pass 2) */
819 #define	SIATXRX_TH		0x00000040	/* 10baseT HDX enable (21142) */
820 #define	SIATXRX_ANE		0x00000080	/* autonegotiation enable
821 						   (21041/21142) */
822 #define	SIATXRX_RSQ		0x00000100	/* receive squelch enable */
823 #define	SIATXRX_CSQ		0x00000200	/* collision squelch enable */
824 #define	SIATXRX_CLD		0x00000400	/* collision detect enable */
825 #define	SIATXRX_SQE		0x00000800	/* signal quality generation
826 						   enable */
827 #define	SIATXRX_LTE		0x00001000	/* link test enable */
828 #define	SIATXRX_APE		0x00002000	/* auto-polarity enable */
829 #define	SIATXRX_SPP		0x00004000	/* set polarity plus */
830 #define	SIATXRX_TAS		0x00008000	/* 10base-T/AUI autosensing
831 						   enable (21041/21142) */
832 #define	SIATXRX_THX		0x00010000	/* 100baseTX-HDX (21142) */
833 #define	SIATXRX_TXF		0x00020000	/* 100baseTX-FDX (21142) */
834 #define	SIATXRX_T4		0x00040000	/* 100baseT4 (21142) */
835 
836 
837 /* CSR15 - SIA General Register. */
838 #define	CSR_SIAGEN		TULIP_CSR15
839 #define	SIAGEN_JBD		0x00000001	/* jabber disable */
840 #define	SIAGEN_HUJ		0x00000002	/* host unjab */
841 #define	SIAGEN_JCK		0x00000004	/* jabber clock */
842 #define	SIAGEN_ABM		0x00000008	/* BNC select (21041) */
843 #define	SIAGEN_RWD		0x00000010	/* receive watchdog disable */
844 #define	SIAGEN_RWR		0x00000020	/* receive watchdog release */
845 #define	SIAGEN_LE1		0x00000040	/* LED 1 enable (21041) */
846 #define	SIAGEN_LV1		0x00000080	/* LED 1 value (21041) */
847 #define	SIAGEN_TSCK		0x00000100	/* test clock */
848 #define	SIAGEN_FUSQ		0x00000200	/* force unsquelch */
849 #define	SIAGEN_FLF		0x00000400	/* force link fail */
850 #define	SIAGEN_LSD		0x00000800	/* LED stretch disable
851 						   (21041) */
852 #define	SIAGEN_LEE		0x00000800	/* Link extend enable (21142) */
853 #define	SIAGEN_DPST		0x00001000	/* PLL self-test start */
854 #define	SIAGEN_FRL		0x00002000	/* force receiver low */
855 #define	SIAGEN_LE2		0x00004000	/* LED 2 enable (21041) */
856 #define	SIAGEN_RMP		0x00004000	/* received magic packet
857 						   (21143) */
858 #define	SIAGEN_LV2		0x00008000	/* LED 2 value (21041) */
859 #define	SIAGEN_HCKR		0x00008000	/* hacker (21143) */
860 #define	SIAGEN_MD		0x000f0000	/* general purpose mode/data */
861 #define	SIAGEN_LGS0		0x00100000	/* LED/GEP 0 select */
862 #define	SIAGEN_LGS1		0x00200000	/* LED/GEP 1 select */
863 #define	SIAGEN_LGS2		0x00400000	/* LED/GEP 2 select */
864 #define	SIAGEN_LGS3		0x00800000	/* LED/GEP 3 select */
865 #define	SIAGEN_GEI0		0x01000000	/* GEP pin 0 intr enable */
866 #define	SIAGEN_GEI1		0x02000000	/* GEP pin 1 intr enable */
867 #define	SIAGEN_RME		0x04000000	/* receive match enable */
868 #define	SIAGEN_CWE		0x08000000	/* control write enable */
869 #define	SIAGEN_GI0		0x10000000	/* GEP pin 0 interrupt */
870 #define	SIAGEN_GI1		0x20000000	/* GEP pin 1 interrupt */
871 #define	SIAGEN_RMI		0x40000000	/* receive match interrupt */
872 
873 
874 /* CSR12 - General Purpose Port (21140+). */
875 #define	CSR_GPP			TULIP_CSR12
876 #define	GPP_MD			0x000000ff	/* general purpose mode/data */
877 #define	GPP_GPC			0x00000100	/* general purpose control */
878 #define	GPP_PNIC_GPD		0x0000000f	/* general purpose data */
879 #define	GPP_PNIC_GPC		0x000000f0	/* general purpose control */
880 
881 #define	GPP_PNIC_IN(x)		(1 << (x))
882 #define	GPP_PNIC_OUT(x, on)	(((on) << (x)) | (1 << ((x) + 4)))
883 
884 /*
885  * The Lite-On PNIC manual recommends the following for the General Purpose
886  * I/O pins:
887  *
888  *	0	Speed Relay		1 == 100mbps
889  *	1	100mbps loopback	1 == loopback
890  *	2	BNC DC-DC converter	1 == select BNC
891  *	3	Link 100		1 == 100baseTX link status
892  */
893 #define	GPP_PNIC_PIN_SPEED_RLY	0
894 #define	GPP_PNIC_PIN_100M_LPKB	1
895 #define	GPP_PNIC_PIN_BNC_XMER	2
896 #define	GPP_PNIC_PIN_LNK100X	3
897 
898 /*
899  * Definitions used for the SMC 9332DST (21140) board.
900  */
901 #define GPP_SMC9332DST_PINS	0x3f	/* General Purpose Pin directions */
902 #define GPP_SMC9332DST_OK10	0x80	/* 10 Mb/sec Signal Detect gep<7> */
903 #define GPP_SMC9332DST_OK100	0x40	/* 100 Mb/sec Signal Detect gep<6> */
904 #define GPP_SMC9332DST_INIT	0x09	/* No loopback --- point-to-point */
905 
906 /*
907  * Definitions used for the Cogent EM1x0 (21140) board.
908  */
909 #define GPP_COGENT_EM1x0_PINS	0x3f	/* General Purpose Pin directions */
910 #define GPP_COGENT_EM1x0_INIT	0x09	/* No loopback --- point-to-point */
911 
912 /*
913  * Digital EB140 21140 reference design.
914  * MC68832 + ML6671 for 100Mb/s.  LXT901 for 10Mb/s.
915  *
916  * (From document EC-QD2SA-TE, figure 1-3.)
917  */
918 #define	GPP_EB140_OUTPUTS	0x1f	/* these GPP pins are driven */
919 #define	GPP_EB140_MC68832_LB	0x01	/* 100Mb/s loopback disable 1 */
920 #define	GPP_EB140_ML6671_LB	0x02	/* 100Mb/s loopback disable 2 */
921 #define	GPP_EB140_LXT901_ILB	0x04	/* 10Mb/s internal LB enable */
922 #define	GPP_EB140_LXT901_ELB	0x08	/* 10Mb/s external LB disable */
923 #define	GPP_EB140_RESERVED	0x10	/* media switch relay on other boards */
924 #define	GPP_EB140_MC68836_SYNC	0x20	/* synced to 100Mb/s PHY */
925 #define	GPP_EB140_MC68836_LINK	0x40	/* 100Mb/s signal detect */
926 #define	GPP_EB140_LXT901_LINK	0x80	/* 10Mb/s link pass */
927 
928 #define	GPP_EB140_INIT	(GPP_EB140_LXT901_ELB|GPP_EB140_ML6671_LB|GPP_EB140_MC68832_LB)
929 
930 /*
931  * Digital Semiconductor 21040 registers.
932  */
933 
934 /* CSR11 - Full Duplex Register */
935 #define	CSR_21040_FDX		TULIP_CSR11
936 #define	FDX21040_FDXACV		0x0000ffff	/* full duplex
937 						   autoconfiguration value */
938 
939 
940 /* SIA configuration for 10base-T (from the 21040 manual) */
941 #define	SIACONN_21040_10BASET	0x0000ef01
942 #define	SIATXRX_21040_10BASET	0x0000ffff
943 #define	SIAGEN_21040_10BASET	0x00000000
944 
945 
946 /* SIA configuration for 10base-T full-duplex (from the 21040 manual) */
947 #define	SIACONN_21040_10BASET_FDX 0x0000ef01
948 #define	SIATXRX_21040_10BASET_FDX 0x0000fffd
949 #define	SIAGEN_21040_10BASET_FDX  0x00000000
950 
951 
952 /* SIA configuration for 10base-5 (from the 21040 manual) */
953 #define	SIACONN_21040_AUI	0x0000ef09
954 #define	SIATXRX_21040_AUI	0x00000705
955 #define	SIAGEN_21040_AUI	0x00000006
956 
957 
958 /* SIA configuration for External SIA (from the 21040 manual) */
959 #define	SIACONN_21040_EXTSIA	0x00003041
960 #define	SIATXRX_21040_EXTSIA	0x00000000
961 #define	SIAGEN_21040_EXTSIA	0x00000006
962 
963 
964 /*
965  * Digital Semiconductor 21041 registers.
966  */
967 
968 /* SIA configuration for 10base-T (from the 21041 manual) */
969 #define	SIACONN_21041_10BASET	0x0000ef01
970 #define	SIATXRX_21041_10BASET	0x0000ff3f
971 #define	SIAGEN_21041_10BASET	0x00000000
972 
973 #define	SIACONN_21041P2_10BASET	SIACONN_21041_10BASET
974 #define	SIATXRX_21041P2_10BASET	0x0000ffff
975 #define	SIAGEN_21041P2_10BASET	SIAGEN_21041_10BASET
976 
977 
978 /* SIA configuration for 10base-T full-duplex (from the 21041 manual) */
979 #define	SIACONN_21041_10BASET_FDX   0x0000ef01
980 #define	SIATXRX_21041_10BASET_FDX   0x0000ff3d
981 #define	SIAGEN_21041_10BASET_FDX    0x00000000
982 
983 #define	SIACONN_21041P2_10BASET_FDX SIACONN_21041_10BASET_FDX
984 #define	SIATXRX_21041P2_10BASET_FDX 0x0000ffff
985 #define	SIAGEN_21041P2_10BASET_FDX  SIAGEN_21041_10BASET_FDX
986 
987 
988 /* SIA configuration for 10base-5 (from the 21041 manual) */
989 #define	SIACONN_21041_AUI	0x0000ef09
990 #define	SIATXRX_21041_AUI	0x0000f73d
991 #define	SIAGEN_21041_AUI	0x0000000e
992 
993 #define	SIACONN_21041P2_AUI	SIACONN_21041_AUI
994 #define	SIATXRX_21041P2_AUI	0x0000f7fd
995 #define	SIAGEN_21041P2_AUI	SIAGEN_21041_AUI
996 
997 
998 /* SIA configuration for 10base-2 (from the 21041 manual) */
999 #define	SIACONN_21041_BNC	0x0000ef09
1000 #define	SIATXRX_21041_BNC	0x0000f73d
1001 #define	SIAGEN_21041_BNC	0x00000006
1002 
1003 #define	SIACONN_21041P2_BNC	SIACONN_21041_BNC
1004 #define	SIATXRX_21041P2_BNC	0x0000f7fd
1005 #define	SIAGEN_21041P2_BNC	SIAGEN_21041_BNC
1006 
1007 
1008 /*
1009  * Digital Semiconductor 21142/21143 registers.
1010  */
1011 
1012 /* SIA configuration for 10baseT (from the 21143 manual) */
1013 #define	SIACONN_21142_10BASET	0x00000001
1014 #define	SIATXRX_21142_10BASET	0x00007f3f
1015 #define	SIAGEN_21142_10BASET	0x00000008
1016 
1017 
1018 /* SIA configuration for 10baseT full-duplex (from the 21143 manual) */
1019 #define	SIACONN_21142_10BASET_FDX   0x00000001
1020 #define	SIATXRX_21142_10BASET_FDX   0x00007f3d
1021 #define	SIAGEN_21142_10BASET_FDX    0x00000008
1022 
1023 
1024 /* SIA configuration for 10base5 (from the 21143 manual) */
1025 #define	SIACONN_21142_AUI	0x00000009
1026 #define	SIATXRX_21142_AUI	0x00004705
1027 #define	SIAGEN_21142_AUI	0x0000000e
1028 
1029 
1030 /* SIA configuration for 10base2 (from the 21143 manual) */
1031 #define	SIACONN_21142_BNC	0x00000009
1032 #define	SIATXRX_21142_BNC	0x00004705
1033 #define	SIAGEN_21142_BNC	0x00000006
1034 
1035 
1036 /*
1037  * Lite-On 82C168/82C169 registers.
1038  */
1039 
1040 /* ENDEC General Register */
1041 #define	CSR_PNIC_ENDEC		0x78
1042 #define	PNIC_ENDEC_JDIS		0x00000001	/* jabber disable */
1043 
1044 /* SROM Power Register */
1045 #define	CSR_PNIC_SROMPWR	0x90
1046 #define	PNIC_SROMPWR_MRLE	0x00000001	/* Memory-Read-Line enable */
1047 #define	PNIC_SROMPWR_CB		0x00000002	/* cache boundary alignment
1048 						   burst type; 1 == burst to
1049 						   boundary, 0 == single-cycle
1050 						   to boundary */
1051 
1052 /* SROM Control Register */
1053 #define	CSR_PNIC_SROMCTL	0x98
1054 #define	PNIC_SROMCTL_addr	0x0000003f	/* mask of address bits */
1055 /* XXX THESE ARE WRONG ACCORDING TO THE MANUAL! */
1056 #define	PNIC_SROMCTL_READ	0x00000600	/* read command */
1057 
1058 /* MII Access Register */
1059 #define	CSR_PNIC_MII		0xa0
1060 #define	PNIC_MII_DATA		0x0000ffff	/* mask of data bits */
1061 #define	PNIC_MII_REG		0x007c0000	/* register mask */
1062 #define	PNIC_MII_REGSHIFT	18
1063 #define	PNIC_MII_PHY		0x0f800000	/* phy mask */
1064 #define	PNIC_MII_PHYSHIFT	23
1065 #define	PNIC_MII_OPCODE		0x30000000	/* opcode mask */
1066 #define	PNIC_MII_RESERVED	0x00020000	/* must be one/must be zero;
1067 						   2 bits are described here */
1068 #define	PNIC_MII_MBO		0x40000000	/* must be one */
1069 #define	PNIC_MII_BUSY		0x80000000	/* MII is busy */
1070 
1071 #define	PNIC_MII_WRITE		0x10000000	/* write PHY command */
1072 #define	PNIC_MII_READ		0x20000000	/* read PHY command */
1073 
1074 /* NWAY Register */
1075 #define	CSR_PNIC_NWAY		0xb8
1076 #define	PNIC_NWAY_RS		0x00000001	/* reset NWay block */
1077 #define	PNIC_NWAY_PD		0x00000002	/* power down NWay block */
1078 #define	PNIC_NWAY_BX		0x00000004	/* bypass transceiver */
1079 #define	PNIC_NWAY_LC		0x00000008	/* AUI low current mode */
1080 #define	PNIC_NWAY_UV		0x00000010	/* low squelch voltage */
1081 #define	PNIC_NWAY_DX		0x00000020	/* disable TP pol. correction */
1082 #define	PNIC_NWAY_TW		0x00000040	/* select TP (0 == AUI) */
1083 #define	PNIC_NWAY_AF		0x00000080	/* AUI full/half step input
1084 						   voltage */
1085 #define	PNIC_NWAY_FD		0x00000100	/* full duplex mode */
1086 #define	PNIC_NWAY_DL		0x00000200	/* disable link integrity
1087 						   test */
1088 #define	PNIC_NWAY_DM		0x00000400	/* disable AUI/TP autodetect */
1089 #define	PNIC_NWAY_100		0x00000800	/* 1 == 100mbps, 0 == 10mbps */
1090 #define	PNIC_NWAY_NW		0x00001000	/* enable NWay block */
1091 #define	PNIC_NWAY_CAP10T	0x00002000	/* adv. 10baseT */
1092 #define	PNIC_NWAY_CAP10TFDX	0x00004000	/* adv. 10baseT-FDX */
1093 #define	PNIC_NWAY_CAP100TXFDX	0x00008000	/* adv. 100baseTX-FDX */
1094 #define	PNIC_NWAY_CAP100TX	0x00010000	/* adv. 100baseTX */
1095 #define	PNIC_NWAY_CAP100T4	0x00020000	/* adv. 100base-T4 */
1096 #define	PNIC_NWAY_RN		0x02000000	/* re-negotiate enable */
1097 #define	PNIC_NWAY_RF		0x04000000	/* remote fault detected */
1098 #define	PNIC_NWAY_LPAR10T	0x08000000	/* link part. 10baseT */
1099 #define	PNIC_NWAY_LPAR10TFDX	0x10000000	/* link part. 10baseT-FDX */
1100 #define	PNIC_NWAY_LPAR100TXFDX	0x20000000	/* link part. 100baseTX-FDX */
1101 #define	PNIC_NWAY_LPAR100TX	0x40000000	/* link part. 100baseTX */
1102 #define	PNIC_NWAY_LPAR100T4	0x80000000	/* link part. 100base-T4 */
1103 #define	PNIC_NWAY_LPAR_MASK	0xf8000000
1104 
1105 
1106 /*
1107  * Macronix 98713, 98713A, 98715, 98715A, 98715AEC, 98725 and
1108  * Lite-On 82C115 registers.
1109  */
1110 
1111 	/*
1112 	 * Note, the MX98713 is very Tulip-like:
1113 	 *
1114 	 *	CSR12		General Purpose Port (like 21140)
1115 	 *	CSR13		reserved
1116 	 *	CSR14		reserved
1117 	 *	CSR15		Watchdog Timer (like 21140)
1118 	 *
1119 	 * The Macronix CSR12, CSR13, CSR14, and CSR15 exist only
1120 	 * on the MX98713A and higher.
1121 	 */
1122 
1123 /* CSR12 - 10base-T Status Port (similar to SIASTAT) */
1124 	/* See SIASTAT 21142/21143 bits */
1125 #define	CSR_PMAC_10TSTAT	   TULIP_CSR12
1126 #define	PMAC_SIASTAT_MASK	(SIASTAT_LS100|SIASTAT_LS10|		\
1127 				 SIASTAT_APS|SIASTAT_TRF|SIASTAT_ANS|	\
1128 				 SIASTAT_LPN|SIASTAT_LPC)
1129 
1130 
1131 /* CSR13 - NWAY Reset Register */
1132 #define	CSR_PMAC_NWAYRESET	TULIP_CSR13
1133 	/* See SIACONN 21142/21143 bits */
1134 #define	PMAC_SIACONN_MASK	(SIACONN_SRL)
1135 #define	PMAC_NWAYRESET_100TXRESET 0x00000002	/* 100base PMD reset */
1136 
1137 
1138 /* CSR14 - 10base-T Control Port */
1139 #define	CSR_PMAC_10TCTL		TULIP_CSR14
1140 	/* See SIATXRX 21142/21143 bits */
1141 #define	PMAC_SIATXRX_MASK	(SIATXRX_LBK|SIATXRX_DREN|SIATXRX_TH|	\
1142 				 SIATXRX_ANE|SIATXRX_RSQ|SIATXRX_LTE|	\
1143 				 SIATXRX_THX|SIATXRX_TXF|SIATXRX_T4)
1144 
1145 
1146 /* CSR15 - Watchdog Timer Register */
1147 	/* MX98713: see 21140 CSR15 */
1148 	/* others: see SIAGEN 21142/21143 bits */
1149 #define	PMAC_SIAGEN_MASK	(SIAGEN_JBD|SIAGEN_HUJ|SIAGEN_JCK|	\
1150 				 SIAGEN_RWD|SIAGEN_RWR)
1151 
1152 
1153 /* CSR16 - Test Operation Register (a.k.a. Magic Packet Register) */
1154 #define	CSR_PMAC_TOR		TULIP_CSR16
1155 #define	PMAC_TOR_98713		0x0F370000
1156 #define	PMAC_TOR_98715		0x0B3C0000
1157 
1158 
1159 /* CSR20 - NWAY Status */
1160 #define	CSR_PMAC_NWAYSTAT	TULIP_CSR20
1161 	/*
1162 	 * Note: the MX98715A manual claims that EQTEST and PCITEST
1163 	 * must be set to 1 by software for normal operation, but
1164 	 * this does not appear to be necessary.  This is probably
1165 	 * one of the things that frobbing the Test Operation Register
1166 	 * does.
1167 	 *
1168 	 * MX98715AEC uses this register for Auto Compensation.
1169 	 * CSR20<14> and CSR20<9> are called DS130 and DS120
1170 	 */
1171 #define	PMAC_NWAYSTAT_DS120	0x00000200	/* Auto-compensation circ */
1172 #define	PMAC_NWAYSTAT_DS130	0x00004000	/* Auto-compensation circ */
1173 #define	PMAC_NWAYSTAT_EQTEST	0x00001000	/* EQ test */
1174 #define	PMAC_NWAYSTAT_PCITEST	0x00010000	/* PCI test */
1175 #define	PMAC_NWAYSTAT_10TXH	0x08000000	/* 10t accepted */
1176 #define	PMAC_NWAYSTAT_10TXF	0x10000000	/* 10t-fdx accepted */
1177 #define	PMAC_NWAYSTAT_100TXH	0x20000000	/* 100tx accepted */
1178 #define	PMAC_NWAYSTAT_100TXF	0x40000000	/* 100tx-fdx accepted */
1179 #define	PMAC_NWAYSTAT_T4	0x80000000	/* 100t4 accepted */
1180 
1181 
1182 /* CSR21 - Flow Control Register */
1183 #define	CSR_PNICII_FLOWCTL	TULIP_CSR21
1184 #define	PNICII_FLOWCTL_WKFCATEN	0x00000010	/* enable wake-up frame
1185 						   catenation feature */
1186 #define	PNICII_FLOWCTL_NFCE	0x00000020	/* accept flow control result
1187 						   from NWay */
1188 #define	PNICII_FLOWCTL_FCTH0	0x00000040	/* rx flow control thresh 0 */
1189 #define	PNICII_FLOWCTL_FCTH1	0x00000080	/* rx flow control thresh 1 */
1190 #define	PNICII_FLOWCTL_REJECTFC	0x00000100	/* abort rx flow control */
1191 #define	PNICII_FLOWCTL_STOPTX	0x00000200	/* tx flow stopped */
1192 #define	PNICII_FLOWCTL_RUFCEN	0x00000400	/* send flow control when
1193 						   RU interrupt occurs */
1194 #define	PNICII_FLOWCTL_RXFCEN	0x00000800	/* rx flow control enable */
1195 #define	PNICII_FLOWCTL_TXFCEN	0x00001000	/* tx flow control enable */
1196 #define	PNICII_FLOWCTL_RESTOP	0x00002000	/* restop mode */
1197 #define	PNICII_FLOWCTL_RESTART	0x00004000	/* restart mode */
1198 #define	PNICII_FLOWCTL_TEST	0x00008000	/* test flow control timer */
1199 #define	PNICII_FLOWCTL_TMVAL	0xffff0000	/* timer value in flow
1200 						   control frame */
1201 
1202 #define	PNICII_FLOWCTL_TH_512	(PNICII_FLOWCTL_FCTH0|PNICII_FLOWCTL_FCTH1)
1203 #define	PNICII_FLOWCTL_TH_256	(PNICII_FLOWCTL_FCTH1)
1204 #define	PNICII_FLOWCTL_TH_128	(PNICII_FLOWCTL_FCTH0)
1205 #define	PNICII_FLOWCTL_TH_OVFLW	(0)
1206 
1207 
1208 /* CSR22 - MAC ID Byte 3-0 Register */
1209 #define	CSR_PNICII_MACID0	TULIP_CSR22
1210 #define	PNICII_MACID_1		0	/* shift */
1211 #define	PNICII_MACID_0		8	/* shift */
1212 #define	PNICII_MACID_3		16	/* shift */
1213 #define	PNICII_MACID_2		24	/* shift */
1214 
1215 
1216 /* CSR23 - Magic ID Byte 5,4/MACID Byte 5,4 Register */
1217 #define	PNICII_MACID_5		0	/* shift */
1218 #define	PNICII_MACID_4		8	/* shift */
1219 #define	PNICII_MAGID_5		16	/* shift */
1220 #define	PNICII_MAGIC_4		24	/* shift */
1221 
1222 
1223 /* CSR24 - Magic ID Byte 3-0 Register */
1224 #define	PNICII_MAGID_1		0	/* shift */
1225 #define	PNICII_MAGID_0		8	/* shift */
1226 #define	PNICII_MAGID_3		16	/* shift */
1227 #define	PNICII_MAGID_2		24	/* shift */
1228 
1229 
1230 /* CSR25 - CSR28 - Filter Byte Mask Registers */
1231 #define	CSR_PNICII_MASK0	TULIP_CSR25
1232 
1233 #define	CSR_PNICII_MASK1	TULIP_CSR26
1234 
1235 #define	CSR_PNICII_MASK2	TULIP_CSR27
1236 
1237 #define	CSR_PNICII_MASK3	TULIP_CSR28
1238 
1239 
1240 /* CSR29 - Filter Offset Register */
1241 #define	CSR_PNICII_FILOFF	TULIP_CSR29
1242 #define	PNICII_FILOFF_PAT0	0x0000007f	/* pattern 0 offset */
1243 #define	PNICII_FILOFF_EN0	0x00000080	/* enable pattern 0 */
1244 #define	PNICII_FILOFF_PAT1	0x00007f00	/* pattern 1 offset */
1245 #define	PNICII_FILOFF_EN1	0x00008000	/* enable pattern 1 */
1246 #define	PNICII_FILOFF_PAT2	0x007f0000	/* pattern 2 offset */
1247 #define	PNICII_FILOFF_EN2	0x00800000	/* enable pattern 2 */
1248 #define	PNICII_FILOFF_PAT3	0x7f000000	/* pattern 3 offset */
1249 #define	PNICII_FILOFF_EN3	0x80000000	/* enable pattern 3 */
1250 
1251 
1252 /* CSR30 - Filter 1 and 0 CRC-16 Register */
1253 #define	CSR_PNICII_FIL01	TULIP_CSR30
1254 #define	PNICII_FIL01_CRC0	0x0000ffff	/* CRC-16 of pattern 0 */
1255 #define	PNICII_FIL01_CRC1	0xffff0000	/* CRC-16 of pattern 1 */
1256 
1257 
1258 /* CSR31 = Filter 3 and 2 CRC-16 Register */
1259 #define	CSR_PNICII_FIL23	TULIP_CSR31
1260 #define	PNICII_FIL23_CRC2	0x0000ffff	/* CRC-16 of pattern 2 */
1261 #define	PNICII_FIL23_CRC3	0xffff0000	/* CRC-16 of pattern 3 */
1262 
1263 
1264 /*
1265  * Winbond 89C840F registers.
1266  */
1267 
1268 /* CSR12 - Current Receive Descriptor Register */
1269 #define	CSR_WINB_CRDAR		TULIP_CSR12
1270 
1271 
1272 /* CSR13 - Current Receive Buffer Register */
1273 #define	CSR_WINB_CCRBAR		TULIP_CSR13
1274 
1275 
1276 /* CSR14 - Multicast Address Register 0 */
1277 #define	CSR_WINB_CMA0		TULIP_CSR14
1278 
1279 
1280 /* CSR15 - Multicast Address Register 1 */
1281 #define	CSR_WINB_CMA1		TULIP_CSR15
1282 
1283 
1284 /* CSR16 - Physical Address Register 0 */
1285 #define	CSR_WINB_CPA0		TULIP_CSR16
1286 
1287 
1288 /* CSR17 - Physical Address Register 1 */
1289 #define	CSR_WINB_CPA1		TULIP_CSR17
1290 
1291 
1292 /* CSR18 - Boot ROM Size Register */
1293 #define	CSR_WINB_CBRCR		TULIP_CSR18
1294 #define	WINB_CBRCR_NONE		0x00000000	/* no boot rom */
1295 			/*	0x00000001	   also no boot rom */
1296 #define	WINB_CBRCR_8K		0x00000002	/* 8k */
1297 #define	WINB_CBRCR_16K		0x00000003	/* 16k */
1298 #define	WINB_CBRCR_32K		0x00000004	/* 32k */
1299 #define	WINB_CBRCR_64K		0x00000005	/* 64k */
1300 #define	WINB_CBRCR_128K		0x00000006	/* 128k */
1301 #define	WINB_CBRCR_256K		0x00000007
1302 
1303 
1304 /* CSR19 - Current Transmit Descriptor Register */
1305 #define	CSR_WINB_CTDAR		TULIP_CSR19
1306 
1307 
1308 /* CSR20 - Current Transmit Buffer Register */
1309 #define	CSR_WINB_CTBAR		TULIP_CSR20
1310 
1311 
1312 /*
1313  * ADMtek AL981 registers
1314  *
1315  * We define these as strict byte offsets into PCI space, since
1316  * not all of them have consistent access rules.
1317  */
1318 
1319 /* CSR13 - Wake-up Control/Status Register */
1320 #define	CSR_ADM_WCSR		0x68
1321 #define	ADM_WCSR_LSC		0x00000001	/* link status changed */
1322 #define	ADM_WCSR_MPR		0x00000002	/* magic packet received */
1323 #define	ADM_WCSR_WFR		0x00000004	/* wake up frame received */
1324 #define	ADM_WCSR_LSCE		0x00000100	/* link status changed en. */
1325 #define	ADM_WCSR_MPRE		0x00000200	/* magic packet receive en. */
1326 #define	ADM_WCSR_WFRE		0x00000400	/* wake up frame receive en. */
1327 #define	ADM_WCSR_LINKON		0x00010000	/* link-on detect en. */
1328 #define	ADM_WCSR_LINKOFF	0x00020000	/* link-off detect en. */
1329 #define	ADM_WCSR_WP5E		0x02000000	/* wake up pat. 5 en. */
1330 #define	ADM_WCSR_WP4E		0x04000000	/* wake up pat. 4 en. */
1331 #define	ADM_WCSR_WP3E		0x08000000	/* wake up pat. 3 en. */
1332 #define	ADM_WCSR_WP2E		0x10000000	/* wake up pat. 2 en. */
1333 #define	ADM_WCSR_WP1E		0x20000000	/* wake up pat. 1 en. */
1334 #define	ADM_WCSR_CRCT		0x40000000	/* CRC-16 type:
1335 						   0 == 0000 initial
1336 						   1 == ffff initial */
1337 
1338 
1339 /* CSR14 - Wake-up Pattern Data Register */
1340 #define	CSR_ADM_WPDR		0x70
1341 
1342 	/*
1343 	 * 25 consecutive longword writes are issued to WPDR to
1344 	 * program the wake-up pattern filter.  The data written
1345 	 * is as follows:
1346 	 *
1347 	 *	XXX
1348 	 */
1349 
1350 
1351 /* CSR15 - see 21140 CSR15 (Watchdog Timer) */
1352 
1353 
1354 /* CSR16 - Assistant CSR5 (Status Register 2) */
1355 #define	CSR_ADM_ASR		0x80
1356 						/* 0 - 14: same as CSR5 */
1357 #define	ADM_ASR_AAISS		0x00080000	/* added abnormal int. sum. */
1358 #define	ADM_ASR_ANISS		0x00010000	/* added normal int. sum. */
1359 						/* XXX Receive state */
1360 						/* XXX Transmit state */
1361 #define	ADM_ASR_BET		0x03800000	/* bus error type */
1362 #define	ADM_ASR_BET_PERR	0x00000000	/*   parity error */
1363 #define	ADM_ASR_BET_MABT	0x00800000	/*   master abort */
1364 #define	ADM_ASR_BET_TABT	0x01000000	/*   target abort */
1365 #define	ADM_ASR_PFR		0x04000000	/* PAUSE frame received */
1366 #define	ADM_ASR_TDIS		0x10000000	/* transmit def. int. status */
1367 #define	ADM_ASR_XIS		0x20000000	/* xcvr int. status */
1368 #define	ADM_ASR_REIS		0x40000000	/* receive early int. status */
1369 #define	ADM_ASR_TEIS		0x80000000	/* transmit early int. status */
1370 
1371 
1372 /* CSR17 - Assistant CSR7 (Interrupt Enable Register 2) */
1373 #define	CSR_ADM_AIE		0x84
1374 	/* See CSR16 for valid bits */
1375 
1376 
1377 /* CSR18 - Command Register */
1378 #define	CSR_ADM_CR		0x88
1379 #define	ADM_CR_ATUR		0x00000001	/* auto. tx underrun recover */
1380 #define	ADM_CR_SINT		0x00000002	/* software interrupt */
1381 #define	ADM_CR_DRT		0x0000000c	/* drain receive threshold */
1382 #define	ADM_CR_DRT_8LW		0x00000000	/*   8 longwords */
1383 #define	ADM_CR_DRT_16LW		0x00000004	/*   16 longwords */
1384 #define	ADM_CR_DRT_SF		0x00000008	/*   store-and-forward */
1385 #define	ADM_CR_RTE		0x00000010	/* receive threshold enable */
1386 #define	ADM_CR_PAUSE		0x00000020	/* enable PAUSE function */
1387 #define	ADM_CR_RWP		0x00000040	/* reset wake-up pattern
1388 						   data register pointer */
1389 	/* 16 - 31 are automatically recalled from the EEPROM */
1390 #define	ADM_CR_WOL		0x00040000	/* wake-on-lan enable */
1391 #define	ADM_CR_PM		0x00080000	/* power management enable */
1392 #define	ADM_CR_RFS		0x00600000	/* Receive FIFO size */
1393 #define	ADM_CR_RFS_1K		0x00600000	/*   1K FIFO */
1394 #define	ADM_CR_RFS_2K		0x00400000	/*   2K FIFO */
1395 #define	ADM_CR_LEDMODE		0x00800000	/* LED mode */
1396 #define	ADM_CR_AUXCL		0x30000000	/* aux current load */
1397 #define	ADM_CR_D3CS		0x80000000	/* D3 cold wake up enable */
1398 
1399 
1400 /* CSR19 - PCI bus performance counter */
1401 #define	CSR_ADM_PCIC		0x8c
1402 #define	ADM_PCIC_DWCNT		0x000000ff	/* double-word count of
1403 						   last bus-master
1404 						   transaction */
1405 #define	ADM_PCIC_CLKCNT		0xffff0000	/* number of PCI clocks
1406 						   between read request
1407 						   and access completed */
1408 
1409 /* CSR20 - Power Management Control/Status Register */
1410 #define	CSR_ADM_PMCSR		0x90
1411 	/*
1412 	 * This register is also mapped into the PCI configuration
1413 	 * space as the PMCSR.
1414 	 */
1415 
1416 
1417 /* CSR23 - Transmit Burst Count/Time Out Register */
1418 #define	CSR_ADM_TXBR		0x9c
1419 #define	ADM_TXBR_TTO		0x00000fff	/* transmit timeout */
1420 #define	ADM_TXBR_TBCNT		0x001f0000	/* transmit burst count */
1421 
1422 
1423 /* CSR24 - Flash ROM Port Register */
1424 #define	CSR_ADM_FROM		0xa0
1425 #define	ADM_FROM_DATA		0x000000ff	/* data to/from Flash */
1426 #define	ADM_FROM_ADDR		0x01ffff00	/* Flash address */
1427 #define	ADM_FROM_ADDR_SHIFT	8
1428 #define	ADM_FROM_WEN		0x04000000	/* write enable */
1429 #define	ADM_FROM_REN		0x08000000	/* read enable */
1430 #define	ADM_FROM_bra16on	0x80000000	/* pin 87 is brA16, else
1431 						   pin 87 is fd/col LED pin */
1432 
1433 
1434 /* CSR25 - Physical Address Register 0 */
1435 #define	CSR_ADM_PAR0		0xa4
1436 
1437 
1438 /* CSR26 - Physical Address Register 1 */
1439 #define	CSR_ADM_PAR1		0xa8
1440 
1441 
1442 /* CSR27 - Multicast Address Register 0 */
1443 #define	CSR_ADM_MAR0		0xac
1444 
1445 
1446 /* CSR28 - Multicast Address Register 1 */
1447 #define	CSR_ADM_MAR1		0xb0
1448 
1449 
1450 /* Internal PHY registers are mapped here (lower 16 bits valid) */
1451 
1452 #define	CSR_ADM_BMCR		0xb4
1453 #define	CSR_ADM_BMSR		0xb8
1454 #define	CSR_ADM_PHYIDR1		0xbc
1455 #define	CSR_ADM_PHYIDR2		0xc0
1456 #define	CSR_ADM_ANAR		0xc4
1457 #define	CSR_ADM_ANLPAR		0xc8
1458 #define	CSR_ADM_ANER		0xcc
1459 
1460 /* XCVR Mode Control Register */
1461 #define	CSR_ADM_XMC		0xd0
1462 #define	ADM_XMC_LD		0x00000800	/* long distance mode
1463 						   (low squelch enable) */
1464 
1465 
1466 /* XCVR Configuration Information and Interrupt Status Register */
1467 #define	CSR_ADM_XCIIS		0xd4
1468 #define	ADM_XCIIS_REF		0x0001		/* 64 error packets received */
1469 #define	ADM_XCIIS_ANPR		0x0002		/* autoneg page received */
1470 #define	ADM_XCIIS_PDF		0x0004		/* parallel detection fault */
1471 #define	ADM_XCIIS_ANAR		0x0008		/* autoneg ACK */
1472 #define	ADM_XCIIS_LS		0x0010		/* link status (1 == fail) */
1473 #define	ADM_XCIIS_RFD		0x0020		/* remote fault */
1474 #define	ADM_XCIIS_ANC		0x0040		/* autoneg completed */
1475 #define	ADM_XCIIS_PAUSE		0x0080		/* PAUSE enabled */
1476 #define	ADM_XCIIS_DUPLEX	0x0100		/* full duplex */
1477 #define	ADM_XCIIS_SPEED		0x0200		/* 100Mb/s */
1478 
1479 
1480 /* XCVR Interrupt Enable Register */
1481 #define	CSR_ADM_XIE		0xd8
1482 	/* Bits are as for XCIIS */
1483 
1484 
1485 /* XCVR 100baseTX PHY Control/Status Register */
1486 #define	CSR_ADM_100CTR		0xdc
1487 #define	ADM_100CTR_DISCRM	0x0001		/* disable scrambler */
1488 #define	ADM_100CTR_DISMLT	0x0002		/* disable MLT3 ENDEC */
1489 #define	ADM_100CTR_CMODE	0x001c		/* current operating mode */
1490 #define	ADM_100CTR_CMODE_AUTO	0x0000		/*   in autoneg */
1491 #define	ADM_100CTR_CMODE_10	0x0004		/*   10baseT */
1492 #define	ADM_100CTR_CMODE_100	0x0008		/*   100baseTX */
1493 			/*	0x000c		     reserved */
1494 			/*	0x0010		     reserved */
1495 #define	ADM_100CTR_CMODE_10FD	0x0014		/*   10baseT-FDX */
1496 #define	ADM_100CTR_CMODE_100FD	0x0018		/*   100baseTX-FDX */
1497 #define	ADM_100CTR_CMODE_ISO	0x001c		/*   isolated */
1498 #define	ADM_100CTR_ISOTX	0x0020		/* transmit isolation */
1499 #define	ADM_100CTR_ENRZI	0x0080		/* enable NRZ <> NRZI conv. */
1500 #define	ADM_100CTR_ENDCR	0x0100		/* enable DC restoration */
1501 #define	ADM_100CTR_ENRLB	0x0200		/* enable remote loopback */
1502 #define	ADM_100CTR_RXVPP	0x0800		/* peak Rx voltage:
1503 						   0 == 1.0 VPP
1504 						   1 == 1.4 VPP */
1505 #define	ADM_100CTR_ANC		0x1000		/* autoneg completed */
1506 #define	ADM_100CTR_DISRER	0x2000		/* disable Rx error counter */
1507 
1508 /* Operation Mode Register (AN983) */
1509 #define	CSR_ADM983_OPMODE	0xfc
1510 #define	ADM983_OPMODE_SPEED	0x80000000	/* 1 == 100, 0 == 10 */
1511 #define	ADM983_OPMODE_FD	0x40000000	/* 1 == fd, 0 == hd */
1512 #define	ADM983_OPMODE_LINK	0x20000000	/* 1 == link, 0 == no link */
1513 #define	ADM983_OPMODE_EERLOD	0x04000000	/* reload from EEPROM */
1514 #define	ADM983_OPMODE_SingleChip 0x00000007	/* single-chip mode */
1515 #define	ADM983_OPMODE_MacOnly	 0x00000004	/* MAC-only mode */
1516 
1517 /*
1518  * Xircom X3201-3 registers
1519  */
1520 
1521 /* Power Management Register */
1522 #define	CSR_X3201_PMR		TULIP_CSR16
1523 #define	X3201_PMR_EDINT		0x0000000f	/* energy detect interval */
1524 #define	X3201_PMR_EDEN		0x00000100	/* energy detect enable */
1525 #define	X3201_PMR_MPEN		0x00000200	/* magic packet enable */
1526 #define	X3201_PMR_WOLEN		0x00000400	/* Wake On Lan enable */
1527 #define	X3201_PMR_PMGP0EN	0x00001000	/* GP0 change enable */
1528 #define	X3201_PMR_PMLCEN	0x00002000	/* link change enable */
1529 #define	X3201_PMR_WOLTMEN	0x00008000	/* WOL template mem enable */
1530 #define	X3201_PMR_EP		0x00010000	/* energy present */
1531 #define	X3201_PMR_LP		0x00200000	/* link present */
1532 #define	X3201_PMR_EDES		0x01000000	/* ED event status */
1533 #define	X3201_PMR_MPES		0x02000000	/* MP event status */
1534 #define	X3201_PMR_WOLES		0x04000000	/* WOL event status */
1535 #define	X3201_PMR_WOLPS		0x08000000	/* WOL process status */
1536 #define	X3201_PMR_GP0ES		0x10000000	/* GP0 event status */
1537 #define	X3201_PMR_LCES		0x20000000	/* LC event status */
1538 
1539 /*
1540  * Davicom DM9102 registers.
1541  */
1542 
1543 /* PHY Status Register */
1544 #define	CSR_DM_PHYSTAT		TULIP_CSR12
1545 #define	DM_PHYSTAT_10		0x00000001	/* 10Mb/s */
1546 #define	DM_PHYSTAT_100		0x00000002	/* 100Mb/s */
1547 #define	DM_PHYSTAT_FDX		0x00000004	/* full-duplex */
1548 #define	DM_PHYSTAT_LINK		0x00000008	/* link up */
1549 #define	DM_PHYSTAT_RXLOCK	0x00000010	/* RX-lock */
1550 #define	DM_PHYSTAT_SIGNAL	0x00000020	/* signal detection */
1551 #define	DM_PHYSTAT_UTPSIG	0x00000040	/* UTP SIG */
1552 #define	DM_PHYSTAT_GPED		0x00000080	/* general PHY reset control */
1553 #define	DM_PHYSTAT_GEPC		0x00000100	/* GPED bits control */
1554 
1555 
1556 /* Sample Frame Access Register */
1557 #define	CSR_DM_SFAR		TULIP_CSR13
1558 
1559 
1560 /* Sample Frame Data Register */
1561 #define	CSR_DM_SFDR		TULIP_CSR14
1562 	/* See 21143 SIAGEN register */
1563 
1564 /*
1565  * ASIX AX88140A and AX88141 registers.
1566  */
1567 
1568 /* CSR13 - Filtering Index */
1569 #define CSR_AX_FILTIDX		TULIP_CSR13
1570 
1571 /* CSR14 - Filtering data */
1572 #define CSR_AX_FILTDATA		TULIP_CSR14
1573 
1574 /* Filtering Index values */
1575 #define AX_FILTIDX_PAR0		0x00000000
1576 #define AX_FILTIDX_PAR1		0x00000001
1577 #define AX_FILTIDX_MAR0		0x00000002
1578 #define AX_FILTIDX_MAR1		0x00000003
1579 
1580 #endif /* _DEV_IC_TULIPREG_H_ */
1581