Home | History | Annotate | Line # | Download | only in ic
tulipreg.h revision 1.8
      1 /*	$NetBSD: tulipreg.h,v 1.8 1999/09/27 19:02:50 thorpej Exp $	*/
      2 
      3 /*-
      4  * Copyright (c) 1999 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  * 3. All advertising materials mentioning features or use of this software
     20  *    must display the following acknowledgement:
     21  *	This product includes software developed by the NetBSD
     22  *	Foundation, Inc. and its contributors.
     23  * 4. Neither the name of The NetBSD Foundation nor the names of its
     24  *    contributors may be used to endorse or promote products derived
     25  *    from this software without specific prior written permission.
     26  *
     27  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     28  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     29  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     30  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     31  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     32  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     33  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     34  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     35  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     36  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     37  * POSSIBILITY OF SUCH DAMAGE.
     38  */
     39 
     40 #ifndef _DEV_IC_TULIPREG_H_
     41 #define	_DEV_IC_TULIPREG_H_
     42 
     43 /*
     44  * Register description for the Digital Semiconductor ``Tulip'' (21x4x)
     45  * Ethernet controller family, and a variety of clone chips, including:
     46  *
     47  *	- Macronix 98713, 98713A, 98715, 98715A, 98725 (PMAC):
     48  *
     49  *	  These chips are fairly straight-forward Tulip clones.
     50  *	  The 98713 and 98713A have an MII.  All have an internal
     51  *	  transciever capable of NWAY.  The 98713A, 98715A, and
     52  *	  98725 support power management.
     53  *
     54  *	- Lite-On 82C168, 82C169 (PNIC):
     55  *
     56  *	  These are Tulip clones with a few small differences; the
     57  *	  EEPROM is accessed totally differently, as is the MII.
     58  *	  The PNIC also has a built-in NWAY transciever.
     59  *
     60  *	- Winbond 89C840F
     61  *
     62  *	  Fairly straight-forward Tulip clone, with the exception
     63  *	  that registers don't have a pad longword between them,
     64  *	  and the receive filter is set up differently: instead of
     65  *	  a setup packet, we have 2 32-bit multicast hash table
     66  *	  registers, and 2 station address registers.
     67  *
     68  * Some of the clone chips have different registers, and some have
     69  * different bits in the same registers.  These will be denoted by
     70  * PMAC, PNIC, and WINB in the register/bit names.
     71  */
     72 
     73 /*
     74  * Tulip buffer descriptor.  Must be 4-byte aligned.
     75  *
     76  * Note for receive descriptors, the byte count fields must
     77  * be a multiple of 4.
     78  */
     79 struct tulip_desc {
     80 	__volatile u_int32_t td_status;	  /* Status */
     81 	__volatile u_int32_t td_ctl;	  /* Control and Byte Counts */
     82 	__volatile u_int32_t td_bufaddr1; /* Buffer Address 1 */
     83 	__volatile u_int32_t td_bufaddr2; /* Buffer Address 2 */
     84 };
     85 
     86 /*
     87  * Descriptor Status bits common to transmit and receive.
     88  */
     89 #define	TDSTAT_OWN	0x80000000	/* Tulip owns descriptor */
     90 #define	TDSTAT_ES	0x00008000	/* Error Summary */
     91 
     92 /*
     93  * Descriptor Status bits for Receive Descriptor.
     94  */
     95 #define	TDSTAT_Rx_FF	0x40000000	/* Filtering Fail */
     96 #define	TDSTAT_WINB_Rx_RCMP 0x40000000	/* Receive Complete */
     97 #define	TDSTAT_Rx_FL	0x3fff0000	/* Frame Length including CRC */
     98 #define	TDSTAT_Rx_DE	0x00004000	/* Descriptor Error */
     99 #define	TDSTAT_Rx_DT	0x00003000	/* Data Type */
    100 #define	TDSTAT_Rx_RF	0x00000800	/* Runt Frame */
    101 #define	TDSTAT_Rx_MF	0x00000400	/* Multicast Frame */
    102 #define	TDSTAT_Rx_FS	0x00000200	/* First Descriptor */
    103 #define	TDSTAT_Rx_LS	0x00000100	/* Last Descriptor */
    104 #define	TDSTAT_Rx_TL	0x00000080	/* Frame Too Long */
    105 #define	TDSTAT_Rx_CS	0x00000040	/* Collision Seen */
    106 #define	TDSTAT_Rx_RT	0x00000020	/* Frame Type */
    107 #define	TDSTAT_Rx_RW	0x00000010	/* Receive Watchdog */
    108 #define	TDSTAT_Rx_RE	0x00000008	/* Report on MII Error */
    109 #define	TDSTAT_Rx_DB	0x00000004	/* Dribbling Bit */
    110 #define	TDSTAT_Rx_CE	0x00000002	/* CRC Error */
    111 #define	TDSTAT_Rx_ZER	0x00000001	/* Zero (always 0) */
    112 
    113 #define	TDSTAT_Rx_LENGTH(x)	(((x) & TDSTAT_Rx_FL) >> 16)
    114 
    115 #define	TDSTAT_Rx_DT_SR	0x00000000	/* Serial Received Frame */
    116 #define	TDSTAT_Rx_DT_IL	0x00001000	/* Internal Loopback Frame */
    117 #define	TDSTAT_Rx_DT_EL	0x00002000	/* External Loopback Frame */
    118 #define	TDSTAT_Rx_DT_r	0x00003000	/* Reserved */
    119 
    120 /*
    121  * Descriptor Status bits for Transmit Descriptor.
    122  */
    123 #define	TDSTAT_WINB_Tx_TE 0x00008000	/* Transmit Error */
    124 #define	TDSTAT_Tx_TO	0x00004000	/* Transmit Jabber Timeout */
    125 #define	TDSTAT_Tx_LO	0x00000800	/* Loss of Carrier */
    126 #define	TDSTAT_Tx_NC	0x00000400	/* No Carrier */
    127 #define	TDSTAT_Tx_LC	0x00000200	/* Late Collision */
    128 #define	TDSTAT_Tx_EC	0x00000100	/* Excessive Collisions */
    129 #define	TDSTAT_Tx_HF	0x00000080	/* Heartbeat Fail */
    130 #define	TDSTAT_Tx_CC	0x00000078	/* Collision Count */
    131 #define	TDSTAT_Tx_LF	0x00000004	/* Link Fail */
    132 #define	TDSTAT_Tx_UF	0x00000002	/* Underflow Error */
    133 #define	TDSTAT_Tx_DE	0x00000001	/* Deferred */
    134 
    135 #define	TDSTAT_Tx_COLLISIONS(x)	(((x) & TDSTAT_Tx_CC) >> 3)
    136 
    137 /*
    138  * Descriptor Control bits common to transmit and receive.
    139  */
    140 #define	TDCTL_SIZE1	0x000007ff	/* Size of buffer 1 */
    141 #define	TDCTL_SIZE1_SHIFT 0
    142 
    143 #define	TDCTL_SIZE2	0x003ff800	/* Size of buffer 2 */
    144 #define	TDCTL_SIZE2_SHIFT 11
    145 
    146 #define	TDCTL_ER	0x02000000	/* End of Ring */
    147 #define	TDCTL_CH	0x01000000	/* Second Address Chained */
    148 
    149 /*
    150  * Descriptor Control bits for Transmit Descriptor.
    151  */
    152 #define	TDCTL_Tx_IC	0x80000000	/* Interrupt on Completion */
    153 #define	TDCTL_Tx_LS	0x40000000	/* Last Segment */
    154 #define	TDCTL_Tx_FS	0x20000000	/* First Segment */
    155 #define	TDCTL_Tx_FT1	0x10000000	/* Filtering Type 1 */
    156 #define	TDCTL_Tx_SET	0x08000000	/* Setup Packet */
    157 #define	TDCTL_Tx_AC	0x04000000	/* Add CRC Disable */
    158 #define	TDCTL_Tx_DPD	0x00800000	/* Disabled Padding */
    159 #define	TDCTL_Tx_FT0	0x00400000	/* Filtering Type 0 */
    160 
    161 /*
    162  * The Tulip filter is programmed by "transmitting" a Setup Packet
    163  * (indicated by TDCTL_Tx_SET).  The filtering type is indicated
    164  * as follows:
    165  *
    166  *	FT1	FT0	Description
    167  *	---	---	-----------
    168  *	0	0	Perfect Filtering: The Tulip interprets the
    169  *			descriptor buffer as a table of 16 MAC addresses
    170  *			that the Tulip should receive.
    171  *
    172  *	0	1	Hash Filtering: The Tulip interprets the
    173  *			descriptor buffer as a 512-bit hash table
    174  *			plus one perfect address.  If the incoming
    175  *			address is Multicast, the hash table filters
    176  *			the address, else the address is filtered by
    177  *			the perfect address.
    178  *
    179  *	1	0	Inverse Filtering: Like Perfect Filtering, except
    180  *			the table is addresses that the Tulip does NOT
    181  *			receive.
    182  *
    183  *	1	1	Hash-only Filtering: Like Hash Filtering, but
    184  *			physical addresses are matched by the hash table
    185  *			as well, and not by matching a single perfect
    186  *			address.
    187  *
    188  * A Setup Packet must always be 192 bytes long.  The Tulip can store
    189  * 16 MAC addresses.  If not all 16 are specified in Perfect Filtering
    190  * or Inverse Filtering mode, then unused entries should duplicate
    191  * one of the valid entries.
    192  */
    193 #define	TDCTL_Tx_FT_PERFECT	0
    194 #define	TDCTL_Tx_FT_HASH	TDCTL_Tx_FT0
    195 #define	TDCTL_Tx_FT_INVERSE	TDCTL_Tx_FT1
    196 #define	TDCTL_Tx_FT_HASHONLY	(TDCTL_Tx_FT1|TDCTL_Tx_FT0)
    197 
    198 #define	TULIP_SETUP_PACKET_LEN	192
    199 #define	TULIP_MAXADDRS		16
    200 #define	TULIP_MCHASHSIZE	512
    201 
    202 /*
    203  * Maximum size of a Tulip Ethernet Address ROM or SROM.
    204  */
    205 #define	TULIP_MAX_ROM_SIZE	128
    206 
    207 /*
    208  * Format of the standard Tulip SROM information:
    209  *
    210  *	Byte offset	Size	Usage
    211  *	0		18	reserved
    212  *	18		1	SROM Format Version
    213  *	19		1	Chip Count
    214  *	20		6	IEEE Network Address
    215  *	26		1	Chip 0 Device Number
    216  *	27		2	Chip 0 Info Leaf Offset
    217  *	29		1	Chip 1 Device Number
    218  *	30		2	Chip 1 Info Leaf Offset
    219  *	32		1	Chip 2 Device Number
    220  *	33		2	Chip 2 Info Leaf Offset
    221  *	...		1	Chip n Device Number
    222  *	...		2	Chip n Info Leaf Offset
    223  *	...		...	...
    224  *	Chip Info Leaf Information
    225  *	...
    226  *	...
    227  *	...
    228  *	126		2	CRC32 checksum
    229  */
    230 #define	TULIP_ROM_SROM_FORMAT_VERION		18		/* B */
    231 #define	TULIP_ROM_CHIP_COUNT			19		/* B */
    232 #define	TULIP_ROM_IEEE_NETWORK_ADDRESS		20
    233 #define	TULIP_ROM_CHIPn_DEVICE_NUMBER(n)	(26 + ((n) * 3))/* B */
    234 #define	TULIP_ROM_CHIPn_INFO_LEAF_OFFSET(n)	(27 + ((n) * 3))/* W */
    235 #define	TULIP_ROM_CRC32_CHECKSUM		126		/* W */
    236 
    237 #define	TULIP_ROM_IL_SELECT_CONN_TYPE		0		/* W */
    238 #define	TULIP_ROM_IL_MEDIA_COUNT		2		/* B */
    239 #define	TULIP_ROM_IL_MEDIAn_BLOCK_BASE		3
    240 
    241 #define	SELECT_CONN_TYPE_TP		0x0000
    242 #define	SELECT_CONN_TYPE_BNC		0x0001
    243 #define	SELECT_CONN_TYPE_AUI		0x0002
    244 #define	SELECT_CONN_TYPE_100TX		0x0003
    245 #define	SELECT_CONN_TYPE_100T4		0x0006
    246 #define	SELECT_CONN_TYPE_100FX		0x0007
    247 #define	SELECT_CONN_TYPE MII_10T	0x0009
    248 #define	SELECT_CONN_TYPE_MII_100TX	0x000d
    249 #define	SELECT_CONN_TYPE_MII_100T4	0x000f
    250 #define	SELECT_CONN_TYPE_MII_100FX	0x0010
    251 #define	SELECT_CONN_TYPE_TP_AUTONEG	0x0100
    252 #define	SELECT_CONN_TYPE_TP_FDX		0x0204
    253 #define	SELECT_CONN_TYPE_MII_10T_FDX	0x020a
    254 #define	SELECT_CONN_TYPE_100TX_FDX	0x020e
    255 #define	SELECT_CONN_TYPE_MII_100TX_FDX	0x0211
    256 #define	SELECT_CONN_TYPE_TP_NOLINKPASS	0x0400
    257 #define	SELECT_CONN_TYPE_ASENSE		0x0800
    258 #define	SELECT_CONN_TYPE_ASENSE_POWERUP	0x8800
    259 #define	SELECT_CONN_TYPE_ASENSE_AUTONEG	0x0900
    260 
    261 #define	TULIP_ROM_MB_MEDIA_CODE		0x3f
    262 #define	TULIP_ROM_MB_MEDIA_TP		0x00
    263 #define	TULIP_ROM_MB_MEDIA_BNC		0x01
    264 #define	TULIP_ROM_MB_MEDIA_AUI		0x02
    265 #define	TULIP_ROM_MB_MEDIA_100TX	0x03
    266 #define	TULIP_ROM_MB_MEDIA_TP_FDX	0x04
    267 #define	TULIP_ROM_MB_MEDIA_100TX_FDX	0x05
    268 #define	TULIP_ROM_MB_MEDIA_100T4	0x06
    269 #define	TULIP_ROM_MB_MEDIA_100FX	0x07
    270 #define	TULIP_ROM_MB_MEDIA_100FX_FDX	0x08
    271 
    272 #define	TULIP_ROM_MB_EXT		0x40
    273 
    274 #define	TULIP_ROM_MB_CSR13		1			/* W */
    275 #define	TULIP_ROM_MB_CSR14		3			/* W */
    276 #define	TULIP_ROM_MB_CSR15		5			/* W */
    277 
    278 #define	TULIP_ROM_MB_SIZE(mc)		(((mc) & TULIP_ROM_MB_EXT) ? 7 : 1)
    279 
    280 #define	TULIP_ROM_MB_NOINDICATOR	0x8000
    281 #define	TULIP_ROM_MB_DEFAULT		0x4000
    282 #define	TULIP_ROM_MB_POLARITY		0x0080
    283 #define	TULIP_ROM_MB_OPMODE(x)		(((x) & 0x71) << 18)
    284 #define	TULIP_ROM_MB_BITPOS(x)		(1 << (((x) & 0x0e) >> 1))
    285 
    286 #define	TULIP_ROM_MB_21140_GPR		0	/* 21140[A] GPR block */
    287 #define	TULIP_ROM_MB_21140_MII		1	/* 21140[A] MII block */
    288 #define	TULIP_ROM_MB_21142_SIA		2	/* 2114[23] SIA block */
    289 #define	TULIP_ROM_MB_21142_MII		3	/* 2114[23] MII block */
    290 #define	TULIP_ROM_MB_21143_SYM		4	/* 21143 SYM block */
    291 #define	TULIP_ROM_MB_21143_RESET	5	/* 21143 reset block */
    292 
    293 #define	TULIP_ROM_GETW(data, off) ((data)[(off)] | ((data)[(off) + 1]) << 8)
    294 
    295 /*
    296  * Tulip control registers.
    297  */
    298 
    299 #define	TULIP_CSR0	0x00
    300 #define	TULIP_CSR1	0x08
    301 #define	TULIP_CSR2	0x10
    302 #define	TULIP_CSR3	0x18
    303 #define	TULIP_CSR4	0x20
    304 #define	TULIP_CSR5	0x28
    305 #define	TULIP_CSR6	0x30
    306 #define	TULIP_CSR7	0x38
    307 #define	TULIP_CSR8	0x40
    308 #define	TULIP_CSR9	0x48
    309 #define	TULIP_CSR10	0x50
    310 #define	TULIP_CSR11	0x58
    311 #define	TULIP_CSR12	0x60
    312 #define	TULIP_CSR13	0x68
    313 #define	TULIP_CSR14	0x70
    314 #define	TULIP_CSR15	0x78
    315 #define	TULIP_CSR16	0x80
    316 #define	TULIP_CSR17	0x88
    317 #define	TULIP_CSR18	0x90
    318 #define	TULIP_CSR19	0x98
    319 #define	TULIP_CSR20	0xa0
    320 
    321 #define	TULIP_CSR_INDEX(csr)	((csr) >> 3)
    322 
    323 /* CSR0 - Bus Mode */
    324 #define	CSR_BUSMODE		TULIP_CSR0
    325 #define	BUSMODE_SWR		0x00000001	/* software reset */
    326 #define	BUSMODE_BAR		0x00000002	/* bus arbitration */
    327 #define	BUSMODE_DSL		0x0000007c	/* descriptor skip length */
    328 #define	BUSMODE_BLE		0x00000080	/* big endian */
    329 						/* programmable burst length */
    330 #define	BUSMODE_PBL_DEFAULT	0x00000000	/*     default value */
    331 #define	BUSMODE_PBL_1LW		0x00000100	/*     1 longword */
    332 #define	BUSMODE_PBL_2LW		0x00000200	/*     2 longwords */
    333 #define	BUSMODE_PBL_4LW		0x00000400	/*     4 longwords */
    334 #define	BUSMODE_PBL_8LW		0x00000800	/*     8 longwords */
    335 #define	BUSMODE_PBL_16LW	0x00001000	/*    16 longwords */
    336 #define	BUSMODE_PBL_32LW	0x00002000	/*    32 longwords */
    337 						/* cache alignment */
    338 #define	BUSMODE_CAL_NONE	0x00000000	/*     no alignment */
    339 #define	BUSMODE_CAL_8LW		0x00004000	/*     8 longwords */
    340 #define	BUSMODE_CAL_16LW	0x00008000	/*    16 longwords */
    341 #define	BUSMODE_CAL_32LW	0x0000c000	/*    32 longwords */
    342 #define	BUSMODE_DAS		0x00010000	/* diagnostic address space */
    343 						/*   must be zero on most */
    344 						/* transmit auto-poll */
    345 		/*
    346 		 * Transmit auto-polling not supported on:
    347 		 *	Winbond 89C040F
    348 		 */
    349 #define	BUSMODE_TAP_NONE	0x00000000	/*     no auto-polling */
    350 #define	BUSMODE_TAP_200us	0x00020000	/*   200 uS */
    351 #define	BUSMODE_TAP_800us	0x00040000	/*   400 uS */
    352 #define	BUSMODE_TAP_1_6ms	0x00060000	/*   1.6 mS */
    353 #define	BUSMODE_TAP_12_8us	0x00080000	/*  12.8 uS (21041+) */
    354 #define	BUSMODE_TAP_25_6us	0x000a0000	/*  25.6 uS (21041+) */
    355 #define	BUSMODE_TAP_51_2us	0x000c0000	/*  51.2 uS (21041+) */
    356 #define	BUSMODE_TAP_102_4us	0x000e0000	/* 102.4 uS (21041+) */
    357 #define	BUSMODE_DBO		0x00100000	/* desc-only b/e (21041+) */
    358 #define	BUSMODE_RME		0x00200000	/* rd/mult enab (21140+) */
    359 #define	BUSMODE_WINB_WAIT	0x00200000	/* wait state insertion */
    360 #define	BUSMODE_RLE		0x00800000	/* rd/line enab (21140+) */
    361 #define	BUSMODE_WLE		0x01000000	/* wt/line enab (21140+) */
    362 #define	BUSMODE_PNIC_MBO	0x04000000	/* magic `must be one' bit */
    363 						/*    on Lite-On PNIC */
    364 
    365 
    366 /* CSR1 - Transmit Poll Demand */
    367 #define	CSR_TXPOLL		TULIP_CSR1
    368 #define	TXPOLL_TPD		0x00000001	/* transmit poll demand */
    369 
    370 
    371 /* CSR2 - Receive Poll Demand */
    372 #define	CSR_RXPOLL		TULIP_CSR2
    373 #define	RXPOLL_RPD		0x00000001	/* receive poll demand */
    374 
    375 
    376 /* CSR3 - Receive List Base Address */
    377 #define	CSR_RXLIST		TULIP_CSR3
    378 
    379 /* CSR4 - Transmit List Base Address */
    380 #define	CSR_TXLIST		TULIP_CSR4
    381 
    382 /* CSR5 - Status */
    383 #define	CSR_STATUS		TULIP_CSR5
    384 #define	STATUS_TI		0x00000001	/* transmit interrupt */
    385 #define	STATUS_TPS		0x00000002	/* transmit process stopped */
    386 #define	STATUS_TU		0x00000004	/* transmit buffer unavail */
    387 #define	STATUS_TJT		0x00000008	/* transmit jabber timeout */
    388 #define	STATUS_WINB_REI		0x00000008	/* receive early interrupt */
    389 #define	STATUS_LNPANC		0x00000010	/* link pass (21041) */
    390 #define	STATUS_WINB_RERR	0x00000010	/* receive error */
    391 #define	STATUS_UNF		0x00000020	/* transmit underflow */
    392 #define	STATUS_RI		0x00000040	/* receive interrupt */
    393 #define	STATUS_RU		0x00000080	/* receive buffer unavail */
    394 #define	STATUS_RPS		0x00000100	/* receive process stopped */
    395 #define	STATUS_RWT		0x00000200	/* receive watchdog timeout */
    396 #define	STATUS_AT		0x00000400	/* SIA AUI/TP pin changed
    397 						   (21040) */
    398 #define	STATUS_WINB_TEI		0x00000400	/* transmit early interrupt */
    399 #define	STATUS_FD		0x00000800	/* full duplex short frame
    400 						   received (21040) */
    401 #define	STATUS_TM		0x00000800	/* timer expired (21041) */
    402 #define	STATUS_LNF		0x00001000	/* link fail (21040) */
    403 #define	STATUS_SE		0x00002000	/* system error */
    404 #define	STATUS_ER		0x00004000	/* early receive (21041) */
    405 #define	STATUS_AIS		0x00008000	/* abnormal interrupt summary */
    406 #define	STATUS_NIS		0x00010000	/* normal interrupt summary */
    407 #define	STATUS_RS		0x000e0000	/* receive process state */
    408 #define	STATUS_RS_STOPPED	0x00000000	/* Stopped */
    409 #define	STATUS_RS_FETCH		0x00020000	/* Running - fetch receive
    410 						   descriptor */
    411 #define	STATUS_RS_CHECK		0x00040000	/* Running - check for end
    412 						   of receive */
    413 #define	STATUS_RS_WAIT		0x00060000	/* Running - wait for packet */
    414 #define	STATUS_RS_SUSPENDED	0x00080000	/* Suspended */
    415 #define	STATUS_RS_CLOSE		0x000a0000	/* Running - close receive
    416 						   descriptor */
    417 #define	STATUS_RS_FLUSH		0x000c0000	/* Running - flush current
    418 						   frame from FIFO */
    419 #define	STATUS_RS_QUEUE		0x000e0000	/* Running - queue current
    420 						   frame from FIFO into
    421 						   buffer */
    422 #define	STATUS_TS		0x00700000	/* transmit process state */
    423 #define	STATUS_TS_STOPPED	0x00000000	/* Stopped */
    424 #define	STATUS_TS_FETCH		0x00100000	/* Running - fetch transmit
    425 						   descriptor */
    426 #define	STATUS_TS_WAIT		0x00200000	/* Running - wait for end
    427 						   of transmission */
    428 #define	STATUS_TS_READING	0x00300000	/* Running - read buffer from
    429 						   memory and queue into
    430 						   FIFO */
    431 #define	STATUS_TS_RESERVED	0x00400000	/* RESERVED */
    432 #define	STATUS_TS_SETUP		0x00500000	/* Running - Setup packet */
    433 #define	STATUS_TS_SUSPENDED	0x00600000	/* Suspended */
    434 #define	STATUS_TS_CLOSE		0x00700000	/* Running - close transmit
    435 						   descriptor */
    436 #define	STATUS_EB		0x03800000	/* error bits */
    437 #define	STATUS_EB_PARITY	0x00000000	/* parity errror */
    438 #define	STATUS_EB_MABT		0x00800000	/* master abort */
    439 #define	STATUS_EB_TABT		0x01000000	/* target abort */
    440 #define	STATUS_PNIC_TXABORT	0x04000000	/* transmit aborted */
    441 
    442 
    443 /* CSR6 - Operation Mode */
    444 #define	CSR_OPMODE		TULIP_CSR6
    445 #define	OPMODE_HP		0x00000001	/* hash/perfect mode (ro) */
    446 #define	OPMODE_SR		0x00000002	/* start receive */
    447 #define	OPMODE_HO		0x00000004	/* hash only mode (ro) */
    448 #define	OPMODE_PB		0x00000008	/* pass bad frames */
    449 #define	OPMODE_WINB_APP		0x00000008	/* accept all physcal packet */
    450 #define	OPMODE_IF		0x00000010	/* inverse filter mode (ro) */
    451 #define	OPMODE_WINB_AMP		0x00000010	/* accept multicast packet */
    452 #define	OPMODE_SB		0x00000020	/* start backoff counter */
    453 #define	OPMODE_WINB_ABP		0x00000020	/* accept broadcast packet */
    454 #define	OPMODE_PR		0x00000040	/* promiscuous mode */
    455 #define	OPMODE_WINB_ARP		0x00000040	/* accept runt packet */
    456 #define	OPMODE_PM		0x00000080	/* pass all multicast */
    457 #define	OPMODE_WINB_AEP		0x00000080	/* accept error packet */
    458 #define	OPMODE_FKD		0x00000100	/* flaky oscillator disable */
    459 #define	OPMODE_FD		0x00000200	/* full-duplex mode */
    460 #define	OPMODE_OM		0x00000c00	/* operating mode */
    461 #define	OPMODE_OM_NORMAL	0x00000000	/*     normal mode */
    462 #define	OPMODE_OM_INTLOOP	0x00000400	/*     internal loopback */
    463 #define	OPMODE_OM_EXTLOOP	0x00000800	/*     external loopback */
    464 #define	OPMODE_FC		0x00001000	/* force collision */
    465 #define	OPMODE_ST		0x00002000	/* start transmitter */
    466 #define	OPMODE_TR		0x0000c000	/* threshold control */
    467 #define	OPMODE_TR_72		0x00000000	/*     72 bytes */
    468 #define	OPMODE_TR_96		0x00004000	/*     96 bytes */
    469 #define	OPMODE_TR_128		0x00008000	/*    128 bytes */
    470 #define	OPMODE_TR_160		0x0000c000	/*    160 bytes */
    471 #define	OPMODE_WINB_TTH		0x001fc000	/* transmit threshold */
    472 #define	OPMODE_WINB_TTH_SHIFT	14
    473 #define	OPMODE_BP		0x00010000	/* backpressure enable */
    474 #define	OPMODE_CA		0x00020000	/* capture effect enable */
    475 #define	OPMODE_PNIC_TBEN	0x00020000	/* Tx backoff offset enable */
    476 #define	OPMODE_PS		0x00040000	/* port select:
    477 						   1 = MII/SYM, 0 = SRL
    478 						   (21140) */
    479 #define	OPMODE_HBD		0x00080000	/* heartbeat disable:
    480 						   set in MII/SYM 100mbps,
    481 						   set according to PHY
    482 						   in MII 10mbps mode
    483 						   (21140) */
    484 #define	OPMODE_PNIC_IT		0x00100000	/* immediate transmit */
    485 #define	OPMODE_SF		0x00200000	/* store and forward mode
    486 						   (21140) */
    487 #define	OPMODE_WINB_REIT	0x1fe00000	/* receive eartly intr thresh */
    488 #define	OPMODE_WINB_REIT_SHIFT	21
    489 #define	OPMODE_TTM		0x00400000	/* Transmit Threshold Mode:
    490 						   1 = 10mbps, 0 = 100mbps
    491 						   (21140) */
    492 #define	OPMODE_PCS		0x00800000	/* PCS function (21140) */
    493 #define	OPMODE_SCR		0x01000000	/* scrambler mode (21140) */
    494 #define	OPMODE_MBO		0x02000000	/* must be one (21140) */
    495 #define	OPMODE_PNIC_DRC		0x20000000	/* don't include CRC in Rx
    496 						   frames (PNIC) */
    497 #define	OPMODE_WINB_FES		0x20000000	/* fast ethernet select */
    498 #define	OPMODE_RA		0x40000000	/* receive all (21140) */
    499 #define	OPMODE_PNIC_EED		0x40000000	/* 1 == ext, 0 == int ENDEC
    500 						   (PNIC) */
    501 #define	OPMODE_WINB_TEIO	0x40000000	/* transmit early intr on */
    502 #define	OPMODE_SC		0x80000000	/* special capture effect
    503 						   enable (21041+) */
    504 #define	OPMODE_WINB_REIO	0x80000000	/* receive early intr on */
    505 
    506 /* Shorthand for media-related OPMODE bits */
    507 #define	OPMODE_MEDIA_BITS	(OPMODE_PS|OPMODE_PCS|OPMODE_SCR)
    508 
    509 /* CSR7 - Interrupt Enable */
    510 #define	CSR_INTEN		TULIP_CSR7
    511 	/* See bits for CSR5 -- Status */
    512 
    513 
    514 /* CSR8 - Missed Frames */
    515 #define	CSR_MISSED		TULIP_CSR8
    516 #define	MISSED_MFC		0x0000ffff	/* missed packet count */
    517 #define	MISSED_MFO		0x00010000	/* missed packet count
    518 						   overflowed */
    519 #define	MISSED_FOC		0x0ffe0000	/* fifo overflow counter
    520 						   (21140) */
    521 #define	MISSED_OCO		0x10000000	/* overflow counter overflowed
    522 						   (21140) */
    523 
    524 #define	MISSED_GETMFC(x)	((x) & MISSED_MFC)
    525 #define	MISSED_GETFOC(x)	(((x) & MISSED_FOC) >> 17)
    526 
    527 
    528 /* CSR9 - MII, SROM, Boot ROM, Ethernet Address ROM register. */
    529 #define	CSR_MIIROM		TULIP_CSR9
    530 #define	MIIROM_DATA		0x000000ff	/* byte of data from
    531 						   Ethernet Address ROM
    532 						   (21040), byte of data
    533 						   to/from Boot ROM (21041+) */
    534 #define	MIIROM_SROMCS		0x00000001	/* SROM chip select */
    535 #define	MIIROM_SROMSK		0x00000002	/* SROM clock */
    536 #define	MIIROM_SROMDI		0x00000004	/* SROM data in (to) */
    537 #define	MIIROM_SROMDO		0x00000008	/* SROM data out (from) */
    538 #define	MIIROM_REG		0x00000400	/* external register select */
    539 #define	MIIROM_SR		0x00000800	/* SROM select */
    540 #define	MIIROM_BR		0x00001000	/* boot ROM select */
    541 #define	MIIROM_WR		0x00002000	/* write to boot ROM */
    542 #define	MIIROM_RD		0x00004000	/* read from boot ROM */
    543 #define	MIIROM_MOD		0x00008000	/* mode select (ro) (21041) */
    544 #define	MIIROM_MDC		0x00010000	/* MII clock */
    545 #define	MIIROM_MDO		0x00020000	/* MII data out */
    546 #define	MIIROM_MIIDIR		0x00040000	/* MII direction mode
    547 						   1 = PHY in read,
    548 						   0 = PHY in write */
    549 #define	MIIROM_MDI		0x00080000	/* MII data in */
    550 #define	MIIROM_DN		0x80000000	/* data not valid (21040) */
    551 
    552 	/* SROM opcodes */
    553 #define	TULIP_SROM_OPC_ERASE	0x04
    554 #define	TULIP_SROM_OPC_WRITE	0x05
    555 #define	TULIP_SROM_OPC_READ	0x06
    556 
    557 	/* The Lite-On PNIC does this completely differently */
    558 #define	PNIC_MIIROM_DATA	0x0000ffff	/* mask of data bits ??? */
    559 #define	PNIC_MIIROM_BUSY	0x80000000	/* EEPROM is busy */
    560 
    561 
    562 /* CSR10 - Boot ROM address register (21041+). */
    563 #define	CSR_ROMADDR		TULIP_CSR10
    564 #define	ROMADDR_MASK		0x000003ff	/* boot rom address */
    565 
    566 
    567 /* CSR11 - General Purpose Timer (21041+). */
    568 #define	CSR_GPT			TULIP_CSR11
    569 #define	GPT_VALUE		0x0000ffff	/* timer value */
    570 #define	GPT_CON			0x00010000	/* continuous mode */
    571 
    572 
    573 /* CSR12 - SIA Status Register (21040, 21041). */
    574 #define	CSR_SIASTAT		TULIP_CSR12
    575 #define	SIASTAT_PAUI		0x00000001	/* pin AUI/TP indication
    576 						   (21040) */
    577 #define	SIASTAT_NCR		0x00000002	/* network connection error */
    578 #define	SIASTAT_LKF		0x00000004	/* link fail status */
    579 #define	SIASTAT_APS		0x00000008	/* auto polarity status */
    580 #define	SIASTAT_DSD		0x00000010	/* PLL self test done */
    581 #define	SIASTAT_DSP		0x00000020	/* PLL self test pass */
    582 #define	SIASTAT_DAZ		0x00000040	/* PLL all zero */
    583 #define	SIASTAT_DAO		0x00000080	/* PLL all one */
    584 #define	SIASTAT_SRA		0x00000100	/* selected port receive
    585 						   activity (21041) */
    586 #define	SIASTAT_NRA		0x00000200	/* non-selected port
    587 						   receive activity (21041) */
    588 #define	SIASTAT_NSN		0x00000400	/* non-stable NLPs detected
    589 						   (21041) */
    590 #define	SIASTAT_TRF		0x00000800	/* transmit remote fault
    591 						   (21041) */
    592 #define	SIASTAT_ANS		0x00007000	/* autonegotiation state
    593 						   (21041) */
    594 #define	SIASTAT_ANS_DIS		0x00000000	/*     disabled */
    595 #define	SIASTAT_ANS_TXDIS	0x00001000	/*     transmit disabled */
    596 #define	SIASTAT_ANS_ABD		0x00002000	/*     ability detect */
    597 #define	SIASTAT_ANS_ACKD	0x00003000	/*     acknowledge detect */
    598 #define	SIASTAT_ANS_ACKC	0x00004000	/*     complete acknowledge */
    599 #define	SIASTAT_ANS_FPLGOOD	0x00005000	/*     FLP link good */
    600 #define	SIASTAT_ANS_LINKCHECK	0x00006000	/*     link check */
    601 #define	SIASTAT_LPN		0x00008000	/* link partner negotiable
    602 						   (21041) */
    603 #define	SIASTAT_LPC		0xffff0000	/* link partner code word */
    604 
    605 #define	SIASTAT_GETLPC(x)	(((x) & SIASTAT_LPC) >> 16)
    606 
    607 
    608 /* CSR13 - SIA Connectivity Register (21040, 21041). */
    609 #define	CSR_SIACONN		TULIP_CSR13
    610 #define	SIACONN_SRL		0x00000001	/* SIA reset */
    611 #define	SIACONN_PS		0x00000002	/* pin AUI/TP selection
    612 						   (21040) */
    613 #define	SIACONN_CAC		0x00000004	/* CSR autoconfiguration */
    614 #define	SIACONN_AUI		0x00000008	/* select AUI (0 = TP) */
    615 #define	SIACONN_EDP		0x00000010	/* SIA PLL external input
    616 						   enable (21040) */
    617 #define	SIACONN_ENI		0x00000020	/* encoder input multiplexer
    618 						   (21040) */
    619 #define	SIACONN_SIM		0x00000040	/* serial interface input
    620 						   multiplexer (21040) */
    621 #define	SIACONN_ASE		0x00000080	/* APLL start enable
    622 						   (21040) */
    623 #define	SIACONN_SEL		0x00000f00	/* external port output
    624 						   multiplexer select
    625 						   (21040) */
    626 #define	SIACONN_IE		0x00001000	/* input enable (21040) */
    627 #define	SIACONN_OE1_3		0x00002000	/* output enable 1, 3
    628 						   (21040) */
    629 #define	SIACONN_OE2_4		0x00004000	/* output enable 2, 4
    630 						   (21040) */
    631 #define	SIACONN_OE5_6_7		0x00008000	/* output enable 5, 6, 7
    632 						   (21040) */
    633 #define	SIACONN_SDM		0x0000ef00	/* SIA diagnostic mode;
    634 						   always set to this value
    635 						   for normal operation
    636 						   (21041) */
    637 
    638 
    639 /* CSR14 - SIA Transmit Receive Register (21040, 21041). */
    640 #define	CSR_SIATXRX		TULIP_CSR14
    641 #define	SIATXRX_ECEN		0x00000001	/* encoder enable */
    642 #define	SIATXRX_LBK		0x00000002	/* loopback enable */
    643 #define	SIATXRX_DREN		0x00000004	/* driver enable */
    644 #define	SIATXRX_LSE		0x00000008	/* link pulse send enable */
    645 #define	SIATXRX_CPEN		0x00000030	/* compensation enable */
    646 #define	SIATXRX_CPEN_DIS0	0x00000000	/*     disabled */
    647 #define	SIATXRX_CPEN_DIS1	0x00000010	/*     disabled */
    648 #define	SIATXRX_CPEN_HIGHPWR	0x00000020	/*     high power */
    649 #define	SIATXRX_CPEN_NORMAL	0x00000030	/*     normal */
    650 #define	SIATXRX_MBO		0x00000040	/* must be one (21041 pass 2) */
    651 #define	SIATXRX_ANE		0x00000080	/* autonegotiation enable
    652 						   (21041) */
    653 #define	SIATXRX_RSQ		0x00000100	/* receive squelch enable */
    654 #define	SIATXRX_CSQ		0x00000200	/* collision squelch enable */
    655 #define	SIATXRX_CLD		0x00000400	/* collision detect enable */
    656 #define	SIATXRX_SQE		0x00000800	/* signal quality generation
    657 						   enable */
    658 #define	SIATXRX_LTE		0x00001000	/* link test enable */
    659 #define	SIATXRX_APE		0x00002000	/* auto-polarity enable */
    660 #define	SIATXRX_SPP		0x00004000	/* set plarity plus */
    661 #define	SIATXRX_TAS		0x00008000	/* 10base-T/AUI autosensing
    662 						   enable (21041) */
    663 
    664 
    665 /* CSR15 - SIA General Register (21040, 21041). */
    666 #define	CSR_SIAGEN		TULIP_CSR15
    667 #define	SIAGEN_JBD		0x00000001	/* jabber disable */
    668 #define	SIAGEN_HUJ		0x00000002	/* host unjab */
    669 #define	SIAGEN_JCK		0x00000004	/* jabber clock */
    670 #define	SIAGEN_ABM		0x00000008	/* BNC select (21041) */
    671 #define	SIAGEN_RWD		0x00000010	/* receive watchdog disable */
    672 #define	SIAGEN_RWR		0x00000020	/* receive watchdog release */
    673 #define	SIAGEN_LE1		0x00000040	/* LED 1 enable (21041) */
    674 #define	SIAGEN_LV1		0x00000080	/* LED 1 value (21041) */
    675 #define	SIAGEN_TSCK		0x00000100	/* test clock */
    676 #define	SIAGEN_FUSQ		0x00000200	/* force unsquelch */
    677 #define	SIAGEN_FLF		0x00000400	/* force link fail */
    678 #define	SIAGEN_LSD		0x00000800	/* LED stretch disable
    679 						   (21041) */
    680 #define	SIAGEN_DPST		0x00001000	/* PLL self-test start */
    681 #define	SIAGEN_FRL		0x00002000	/* force receiver low */
    682 #define	SIAGEN_LE2		0x00004000	/* LED 2 enable (21041) */
    683 #define	SIAGEN_LV2		0x00008000	/* LED 2 value (21041) */
    684 
    685 
    686 /* CSR12 - General Purpose Port (21140+). */
    687 #define	CSR_GPP			TULIP_CSR12
    688 #define	GPP_MD			0x000000ff	/* general purpose mode/data */
    689 #define	GPP_GPC			0x00000100	/* general purpose control */
    690 #define	GPP_PNIC_GPD		0x0000000f	/* general purpose data */
    691 #define	GPP_PNIC_GPC		0x000000f0	/* general purpose control */
    692 
    693 #define	GPP_PNIC_IN(x)		(1 << (x))
    694 #define	GPP_PNIC_OUT(x, on)	(((on) << (x)) | (1 << ((x) + 4)))
    695 
    696 /*
    697  * The Lite-On PNIC manual recommends the following for the General Purpose
    698  * I/O pins:
    699  *
    700  *	0	Speed Relay		1 == 100mbps
    701  *	1	100mbps loopback	1 == loopback
    702  *	2	BNC DC-DC converter	1 == select BNC
    703  *	3	Link 100		1 == 100baseTX link status
    704  */
    705 #define	GPP_PNIC_PIN_SPEED_RLY	0
    706 #define	GPP_PNIC_PIN_100M_LPKB	1
    707 #define	GPP_PNIC_PIN_BNC_XMER	2
    708 #define	GPP_PNIC_PIN_LNK100X	3
    709 
    710 
    711 /* CSR15 - Watchdog timer (21140+). */
    712 #define	CSR_WATCHDOG		TULIP_CSR15
    713 #define	WATCHDOG_JBD		0x00000001	/* jabber disable */
    714 #define	WATCHDOG_HUJ		0x00000002	/* host unjab */
    715 #define	WATCHDOG_JCK		0x00000004	/* jabber clock */
    716 #define	WATCHDOG_RWD		0x00000010	/* receive watchdog disable */
    717 #define	WATCHDOG_RWR		0x00000020	/* receive watchdog release */
    718 
    719 
    720 /*
    721  * Digital Semiconductor 21040 registers.
    722  */
    723 
    724 /* CSR11 - Full Duplex Register */
    725 #define	CSR_21040_FDX		TULIP_CSR11
    726 #define	FDX21040_FDXACV		0x0000ffff	/* full duplex
    727 						   autoconfiguration value */
    728 
    729 
    730 /* SIA configuration for 10base-T (from the 21040 manual) */
    731 #define	SIACONN_21040_10BASET	0x0000ef01
    732 #define	SIATXRX_21040_10BASET	0x0000ffff
    733 #define	SIAGEN_21040_10BASET	0x00000000
    734 
    735 
    736 /* SIA configuration for 10base-T full-duplex (from the 21040 manual) */
    737 #define SIACONN_21040_10BASET_FDX 0x0000ef01
    738 #define	SIATXRX_21040_10BASET_FDX 0x0000fffd
    739 #define	SIAGEN_21040_10BASET_FDX  0x00000000
    740 
    741 
    742 /* SIA configuration for 10base-5 (from the 21040 manual) */
    743 #define	SIACONN_21040_AUI	0x0000ef09
    744 #define	SIATXRX_21040_AUI	0x00000705
    745 #define	SIAGEN_21040_AUI	0x00000006
    746 
    747 
    748 /* SIA configuration for External SIA (from the 21040 manual) */
    749 #define	SIACONN_21040_EXTSIA	0x00003041
    750 #define	SIATXRX_21040_EXTSIA	0x00000000
    751 #define	SIAGEN_21040_EXTSIA	0x00000006
    752 
    753 
    754 /*
    755  * Digital Semiconductor 21041 registers.
    756  */
    757 
    758 /* SIA configuration for 10base-T (from the 21041 manual) */
    759 #define	SIACONN_21041_10BASET	0x0000ef01
    760 #define	SIATXRX_21041_10BASET	0x0000ff3f
    761 #define	SIAGEN_21041_10BASET	0x00000000
    762 
    763 #define	SIACONN_21041P2_10BASET	SIACONN_21041_10BASET
    764 #define	SIATXRX_21041P2_10BASET	0x0000ffff
    765 #define	SIAGEN_21041P2_10BASET	SIAGEN_21041_10BASET
    766 
    767 
    768 /* SIA configuration for 10base-T full-duplex (from the 21041 manual) */
    769 #define	SIACONN_21041_10BASET_FDX   0x0000ef01
    770 #define	SIATXRX_21041_10BASET_FDX   0x0000ff3d
    771 #define	SIAGEN_21041_10BASET_FDX    0x00000000
    772 
    773 #define	SIACONN_21041P2_10BASET_FDX SIACONN_21041_10BASET_FDX
    774 #define	SIATXRX_21041P2_10BASET_FDX 0x0000ffff
    775 #define	SIAGEN_21041P2_10BASET_FDX  SIAGEN_21041_10BASET_FDX
    776 
    777 
    778 /* SIA configuration for 10base-5 (from the 21041 manual) */
    779 #define	SIACONN_21041_AUI	0x0000ef09
    780 #define	SIATXRX_21041_AUI	0x0000f73d
    781 #define	SIAGEN_21041_AUI	0x0000000e
    782 
    783 #define	SIACONN_21041P2_AUI	SIACONN_21041_AUI
    784 #define	SIATXRX_21041P2_AUI	0x0000f7fd
    785 #define	SIAGEN_21041P2_AUI	SIAGEN_21041_AUI
    786 
    787 
    788 /* SIA configuration for 10base-2 (from the 21041 manual) */
    789 #define	SIACONN_21041_BNC	0x0000ef09
    790 #define	SIATXRX_21041_BNC	0x0000f73d
    791 #define	SIAGEN_21041_BNC	0x00000006
    792 
    793 #define	SIACONN_21041P2_BNC	SIACONN_21041_BNC
    794 #define	SIATXRX_21041P2_BNC	0x0000f7fd
    795 #define	SIAGEN_21041P2_BNC	SIAGEN_21041_BNC
    796 
    797 
    798 /*
    799  * Digital Semiconductor 21142/21143 registers.
    800  */
    801 
    802 /* XXX */
    803 
    804 /*
    805  * Lite-On 82C168/82C169 registers.
    806  */
    807 
    808 /* ENDEC General Register */
    809 #define	CSR_PNIC_ENDEC		0x78
    810 #define	PNIC_ENDEC_JDIS		0x00000001	/* jabber disable */
    811 
    812 /* SROM Power Register */
    813 #define	CSR_PNIC_SROMPWR	0x90
    814 #define	PNIC_SROMPWR_MRLE	0x00000001	/* Memory-Read-Line enable */
    815 #define	PNIC_SROMPWR_CB		0x00000002	/* cache boundary alignment
    816 						   burst type; 1 == burst to
    817 						   boundary, 0 == single-cycle
    818 						   to boundary */
    819 
    820 /* SROM Control Register */
    821 #define	CSR_PNIC_SROMCTL	0x98
    822 #define	PNIC_SROMCTL_addr	0x0000003f	/* mask of address bits */
    823 /* XXX THESE ARE WRONG ACCORDING TO THE MANUAL! */
    824 #define	PNIC_SROMCTL_READ	0x00000600	/* read command */
    825 
    826 /* MII Access Register */
    827 #define	CSR_PNIC_MII		0xa0
    828 #define	PNIC_MII_DATA		0x0000ffff	/* mask of data bits */
    829 #define	PNIC_MII_REG		0x007c0000	/* register mask */
    830 #define	PNIC_MII_REGSHIFT	18
    831 #define	PNIC_MII_PHY		0x0f800000	/* phy mask */
    832 #define	PNIC_MII_PHYSHIFT	23
    833 #define	PNIC_MII_OPCODE		0x30000000	/* opcode mask */
    834 #define	PNIC_MII_RESERVED	0x00020000	/* must be one/must be zero;
    835 						   2 bits are described here */
    836 #define	PNIC_MII_MBO		0x40000000	/* must be one */
    837 #define	PNIC_MII_BUSY		0x80000000	/* MII is busy */
    838 
    839 #define	PNIC_MII_WRITE		0x10000000	/* write PHY command */
    840 #define	PNIC_MII_READ		0x20000000	/* read PHY command */
    841 
    842 /* NWAY Register */
    843 #define	CSR_PNIC_NWAY		0xb8
    844 #define	PNIC_NWAY_RS		0x00000001	/* reset NWay block */
    845 #define	PNIC_NWAY_PD		0x00000002	/* power down NWay block */
    846 #define	PNIC_NWAY_BX		0x00000004	/* bypass transciever */
    847 #define	PNIC_NWAY_LC		0x00000008	/* AUI low current mode */
    848 #define	PNIC_NWAY_UV		0x00000010	/* low squelch voltage */
    849 #define	PNIC_NWAY_DX		0x00000020	/* disable TP pol. correction */
    850 #define	PNIC_NWAY_TW		0x00000040	/* select TP (0 == AUI) */
    851 #define	PNIC_NWAY_AF		0x00000080	/* AUI full/half step input
    852 						   voltage */
    853 #define	PNIC_NWAY_FD		0x00000100	/* full duplex mode */
    854 #define	PNIC_NWAY_DL		0x00000200	/* disable link integrity
    855 						   test */
    856 #define	PNIC_NWAY_DM		0x00000400	/* disable AUI/TP autodetect */
    857 #define	PNIC_NWAY_100		0x00000800	/* 1 == 100mbps, 0 == 10mbps */
    858 #define	PNIC_NWAY_NW		0x00001000	/* enable NWay block */
    859 #define	PNIC_NWAY_CAP10T	0x00002000	/* adv. 10baseT */
    860 #define	PNIC_NWAY_CAP10TFDX	0x00004000	/* adv. 10baseT-FDX */
    861 #define	PNIC_NWAY_CAP100TXFDX	0x00008000	/* adv. 100baseTX-FDX */
    862 #define	PNIC_NWAY_CAP100TX	0x00010000	/* adv. 100baseTX */
    863 #define	PNIC_NWAY_CAP100T4	0x00020000	/* adv. 100base-T4 */
    864 #define	PNIC_NWAY_RN		0x02000000	/* re-negotiate enable */
    865 #define	PNIC_NWAY_RF		0x04000000	/* remote fault detected */
    866 #define	PNIC_NWAY_LPAR10T	0x08000000	/* link part. 10baseT */
    867 #define	PNIC_NWAY_LPAR10TFDX	0x10000000	/* link part. 10baseT-FDX */
    868 #define	PNIC_NWAY_LPAR100TXFDX	0x20000000	/* link part. 100baseTX-FDX */
    869 #define	PNIC_NWAY_LPAR100TX	0x40000000	/* link part. 100baseTX */
    870 #define	PNIC_NWAY_LPAR100T4	0x80000000	/* link part. 100base-T4 */
    871 #define	PNIC_NWAY_LPAR_MASK	0xf8000000
    872 
    873 
    874 /*
    875  * Macronix 98713, 98713A, 98715, 98715A, 98725 registers.
    876  */
    877 
    878 /* CSR12 - 10base-T Status Port (similar to SIASTAT) */
    879 #define	CSR_PMAC_10TSTAT	   TULIP_CSR12
    880 #define	PMAC_10TSTAT_LS100	   0x00000002	/* link status 100TX
    881 						   0 = link up */
    882 #define	PMAC_10TSTAT_LS10	   0x00000004	/* link status 10T
    883 						   0 = link up */
    884 #define	PMAC_10TSTAT_APS	   0x00000008	/* auto polarity status */
    885 #define	PMAC_10TSTAT_TRF	   0x00000800	/* transmit remote fault
    886 						   (21041) */
    887 #define	PMAC_10TSTAT_ANS	   0x00007000	/* autonegotiation state
    888 						   (21041) */
    889 #define	PMAC_10TSTAT_ANS_DIS	   0x00000000	/*     disabled */
    890 #define	PMAC_10TSTAT_ANS_TXDIS	   0x00001000	/*     transmit disabled */
    891 #define	PMAC_10TSTAT_ANS_ABD	   0x00002000	/*     ability detect */
    892 #define	PMAC_10TSTAT_ANS_ACKD	   0x00003000	/*     acknowledge detect */
    893 #define	PMAC_10TSTAT_ANS_ACKC	   0x00004000	/*     complete acknowledge */
    894 #define	PMAC_10TSTAT_ANS_FPLGOOD   0x00005000	/*     FLP link good */
    895 #define	PMAC_10TSTAT_ANS_LINKCHECK 0x00006000	/*     link check */
    896 #define	PMAC_10TSTAT_LPN	   0x00008000	/* link partner negotiable
    897 						   (21041) */
    898 #define	PMAC_10TSTAT_LPC	   0xffff0000	/* link partner code word */
    899 
    900 #define	PMAC_10TSTAT_GETLPC(x)	   (((x) & SIASTAT_LPC) >> 16)
    901 
    902 
    903 /* CSR13 - NWAY Reset Register */
    904 #define	CSR_PMAC_NWAYRESET	TULIP_CSR13
    905 #define	PMAC_NWAYRESET_RESET	0x00000000	/* NWAY reset */
    906 
    907 
    908 /* CSR14 - 10base-T Control Port */
    909 #define	CSR_PMAC_10TCTL		TULIP_CSR14
    910 #define	PMAC_10TCTL_LBK		0x00000002	/* loopback */
    911 #define	PMAC_10TCTL_PWD10	0x00000004	/* power down 10base-T */
    912 #define	PMAC_10TCTL_HDE		0x00000040	/* half-duplex enable */
    913 #define	PMAC_10TCTL_ANE		0x00000080	/* autonegotiation enable */
    914 #define	PMAC_10TCTL_RSQ		0x00000100	/* receive squelch enable */
    915 #define	PMAC_10TCTL_LTE		0x00001000	/* link test enable */
    916 #define	PMAC_10TCTL_TXH		0x00010000	/* adv. 100tx */
    917 #define	PMAC_10TCTL_TXF		0x00020000	/* adv. 100tx-fdx */
    918 #define	PMAC_10TCTL_T4		0x00040000	/* adv. 100t4 */
    919 
    920 
    921 /* CSR16 - Test Operation Register (a.k.a. Magic Packet Register) */
    922 #define	CSR_PMAC_TOR		TULIP_CSR16
    923 #define	PMAC_TOR_98713		0x0F370000
    924 #define	PMAC_TOR_98715		0x0B3C0000
    925 
    926 
    927 /* CSR20 - NWAY Status */
    928 #define	CSR_PMAC_NWAYSTAT	TULIP_CSR20
    929 #define	PMAC_NWAYSTAT_10TXH	0x08000000	/* 10t accepted */
    930 #define	PMAC_NWAYSTAT_10TXF	0x10000000	/* 10t-fdx accepted */
    931 #define	PMAC_NWAYSTAT_100TXH	0x20000000	/* 100tx accepted */
    932 #define	PMAC_NWAYSTAT_100TXF	0x40000000	/* 100tx-fdx accepted */
    933 #define	PMAC_NWAYSTAT_T4	0x80000000	/* 100t4 accepted */
    934 
    935 
    936 /*
    937  * Winbond 89C840F registers.
    938  */
    939 
    940 /* CSR12 - Current Receive Descriptor Register */
    941 #define	CSR_WINB_CRDAR		TULIP_CSR12
    942 
    943 
    944 /* CSR13 - Current Receive Buffer Register */
    945 #define	CSR_WINB_CCRBAR		TULIP_CSR13
    946 
    947 
    948 /* CSR14 - Multicast Address Register 0 */
    949 #define	CSR_WINB_CMA0		TULIP_CSR14
    950 
    951 
    952 /* CSR15 - Multicast Address Register 1 */
    953 #define	CSR_WINB_CMA1		TULIP_CSR15
    954 
    955 
    956 /* CSR16 - Physical Address Register 0 */
    957 #define	CSR_WINB_CPA0		TULIP_CSR16
    958 
    959 
    960 /* CSR17 - Physical Address Register 1 */
    961 #define	CSR_WINB_CPA1		TULIP_CSR17
    962 
    963 
    964 /* CSR18 - Boot ROM Size Register */
    965 #define	CSR_WINB_CBRCR		TULIP_CSR18
    966 #define	WINB_CBRCR_NONE		0x00000000	/* no boot rom */
    967 			/*	0x00000001	   also no boot rom */
    968 #define	WINB_CBRCR_8K		0x00000002	/* 8k */
    969 #define	WINB_CBRCR_16K		0x00000003	/* 16k */
    970 #define	WINB_CBRCR_32K		0x00000004	/* 32k */
    971 #define	WINB_CBRCR_64K		0x00000005	/* 64k */
    972 #define	WINB_CBRCR_128K		0x00000006	/* 128k */
    973 #define	WINB_CBRCR_256K		0x00000007
    974 
    975 
    976 /* CSR19 - Current Transmit Descriptor Register */
    977 #define	CSR_WINB_CTDAR		TULIP_CSR19
    978 
    979 
    980 /* CSR20 - Current Transmit Buffer Register */
    981 #define	CSR_WINB_CTBAR		TULIP_CSR20
    982 
    983 #endif /* _DEV_IC_TULIPREG_H_ */
    984