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