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