if_xereg.h revision 47133
147133Sobrien/*-
247133Sobrien * Copyright (c) 1998, 1999 Scott Mitchell
347133Sobrien * All rights reserved.
447133Sobrien *
547133Sobrien * Redistribution and use in source and binary forms, with or without
647133Sobrien * modification, are permitted provided that the following conditions
747133Sobrien * are met:
847133Sobrien * 1. Redistributions of source code must retain the above copyright
947133Sobrien *    notice, this list of conditions and the following disclaimer.
1047133Sobrien * 2. Redistributions in binary form must reproduce the above copyright
1147133Sobrien *    notice, this list of conditions and the following disclaimer in the
1247133Sobrien *    documentation and/or other materials provided with the distribution.
1347133Sobrien *
1447133Sobrien * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
1547133Sobrien * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1647133Sobrien * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
1747133Sobrien * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
1847133Sobrien * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
1947133Sobrien * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
2047133Sobrien * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2147133Sobrien * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2247133Sobrien * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2347133Sobrien * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2447133Sobrien * SUCH DAMAGE.
2547133Sobrien *
2647133Sobrien *	$Id: if_xereg.h,v 1.2 1999/01/24 22:15:30 root Exp $
2747133Sobrien */
2847133Sobrien
2947133Sobrien/*
3047133Sobrien * Register definitions for Xircom CreditCard Ethernet adapters.  See if_xe.c
3147133Sobrien * for details of supported hardware.  Adapted from Werner Koch's 'xirc2ps'
3247133Sobrien * driver for Linux.
3347133Sobrien */
3447133Sobrien
3547133Sobrien#include "xe.h"
3647133Sobrien#if NXE > 0
3747133Sobrien
3847133Sobrien
3947133Sobrien/*
4047133Sobrien * Common registers
4147133Sobrien */
4247133Sobrien#define XE_CR  0	/* Command register (write) */
4347133Sobrien#define XE_ESR 0	/* Ethernet status register (read) */
4447133Sobrien#define XE_PSR 1	/* Page select register */
4547133Sobrien#define XE_EDP 4	/* Ethernet data port */
4647133Sobrien#define XE_ISR 6	/* Interrupt status register */
4747133Sobrien
4847133Sobrien/*
4947133Sobrien * Command register values
5047133Sobrien */
5147133Sobrien#define XE_CR_TX_PACKET     0x01
5247133Sobrien#define XE_CR_SOFT_RESET    0x02
5347133Sobrien#define XE_CR_ENABLE_INTR   0x04
5447133Sobrien#define XE_CR_FORCE_INTR    0x08
5547133Sobrien#define XE_CR_CLEAR_FIFO    0x10
5647133Sobrien#define XE_CR_CLEAR_OVERRUN 0x20
5747133Sobrien#define XE_CR_RESTART_TX    0x40
5847133Sobrien
5947133Sobrien/*
6047133Sobrien * Status register values
6147133Sobrien */
6247133Sobrien#define XE_ESR_FULL_PKT_RX  0x01
6347133Sobrien#define XE_ESR_PKT_REJECT   0x04
6447133Sobrien#define XE_ESR_TX_PENDING   0x08
6547133Sobrien#define XE_ESR_BAD_POLARITY 0x10
6647133Sobrien#define XE_ESR_MEDIA_SELECT 0x20
6747133Sobrien
6847133Sobrien/*
6947133Sobrien * Interrupt register values
7047133Sobrien */
7147133Sobrien#define XE_ISR_TX_OVERFLOW 0x01
7247133Sobrien#define XE_ISR_TX_PACKET   0x02
7347133Sobrien#define XE_ISR_MAC_INTR    0x04
7447133Sobrien#define XE_ISR_TX_RES      0x08
7547133Sobrien#define XE_ISR_RX_PACKET   0x20
7647133Sobrien#define XE_ISR_RX_REJECT   0x40
7747133Sobrien#define XE_ISR_FORCE_INTR  0x80
7847133Sobrien
7947133Sobrien
8047133Sobrien/*
8147133Sobrien * Page 0 registers
8247133Sobrien */
8347133Sobrien#define XE_TSO 8	/* Transmit space open */
8447133Sobrien#define XE_TRS 10	/* Transmit reservation size */
8547133Sobrien#define XE_DOR 12	/* Data offset register (write) */
8647133Sobrien#define XE_RSR 12	/* Receive status register (read) */
8747133Sobrien#define XE_PTR 13	/* Packets transmitted register (read) */
8847133Sobrien#define XE_RBC 14	/* Received byte count (read) */
8947133Sobrien
9047133Sobrien/*
9147133Sobrien * RSR values
9247133Sobrien */
9347133Sobrien#define XE_RSR_PHYS_PKT  0x01
9447133Sobrien#define XE_RSR_BCAST_PKT 0x02
9547133Sobrien#define XE_RSR_LONG_PKT  0x04
9647133Sobrien#define XE_RSR_ALIGN_ERR 0x10
9747133Sobrien#define XE_RSR_CRC_ERR   0x20
9847133Sobrien#define XE_RSR_RX_OK     0x80
9947133Sobrien
10047133Sobrien
10147133Sobrien/*
10247133Sobrien * Page 1 registers
10347133Sobrien */
10447133Sobrien#define XE_IMR0 12	/* Interrupt mask register, part 1 */
10547133Sobrien#define XE_IMR1 13	/* Interrupt mask register, part 2 */
10647133Sobrien#define XE_ECR  14	/* Ethernet configuration register */
10747133Sobrien
10847133Sobrien/*
10947133Sobrien * ECR values
11047133Sobrien */
11147133Sobrien#define XE_ECR_FULL_DUPLEX  0x04
11247133Sobrien#define XE_ECR_LONG_TPCABLE 0x08
11347133Sobrien#define XE_ECR_NO_POLCOL    0x10
11447133Sobrien#define XE_ECR_NO_LINKPULSE 0x20
11547133Sobrien#define XE_ECR_NO_AUTOTX    0x40
11647133Sobrien
11747133Sobrien
11847133Sobrien/*
11947133Sobrien * Page 2 registers
12047133Sobrien */
12147133Sobrien#define XE_RBS  8	/* Receive buffer start */
12247133Sobrien#define XE_LED  10	/* LED configuration register */
12347133Sobrien#define XE_MSR  12	/* Mohawk specfic register (Mohawk = CE3) */
12447133Sobrien#define XE_GPR2 13	/* General purpose register 2 */
12547133Sobrien
12647133Sobrien
12747133Sobrien/*
12847133Sobrien * Page 4 registers
12947133Sobrien */
13047133Sobrien#define XE_GPR0 8	/* General purpose register 0 */
13147133Sobrien#define XE_GPR1 9	/* General purpose register 1 */
13247133Sobrien#define XE_BOV  10	/* Bonding version register */
13347133Sobrien#define XE_LMA  12	/* Local memory address */
13447133Sobrien#define XE_LMD  14	/* Local memory data */
13547133Sobrien
13647133Sobrien
13747133Sobrien/*
13847133Sobrien * Page 5 registers
13947133Sobrien */
14047133Sobrien#define XE_RHS 10	/* Receive host start address */
14147133Sobrien
14247133Sobrien
14347133Sobrien/*
14447133Sobrien * Page 0x40 registers
14547133Sobrien */
14647133Sobrien#define XE_OCR  8	/* The Other command register */
14747133Sobrien#define XE_RXS0 9	/* Receive status 0 */
14847133Sobrien#define XE_TXS0 11	/* Transmit status 0 */
14947133Sobrien#define XE_TXS1 12	/* Transmit status 1 */
15047133Sobrien#define XE_RXM0 13	/* Receive mask register 0 */
15147133Sobrien#define XE_TXM0 14      /* Transmit mask register 0 */
15247133Sobrien#define XE_TXM1 15	/* Transmit mask register 1 */
15347133Sobrien
15447133Sobrien/*
15547133Sobrien * OCR values
15647133Sobrien */
15747133Sobrien#define XE_OCR_TX         0x01
15847133Sobrien#define XE_OCR_RX_ENABLE  0x04
15947133Sobrien#define XE_OCR_RX_DISABLE 0x08
16047133Sobrien#define XE_OCR_ABORT      0x10
16147133Sobrien#define XE_OCR_ONLINE     0x20
16247133Sobrien#define XE_OCR_ACK_INTR   0x40
16347133Sobrien#define XE_OCR_OFFLINE    0x80
16447133Sobrien
16547133Sobrien
16647133Sobrien/*
16747133Sobrien * Page 0x42 registers
16847133Sobrien */
16947133Sobrien#define XE_SWC0 8	/* Software configuration register 0 */
17047133Sobrien#define XE_SWC1 9	/* Software configuration register 1 */
17147133Sobrien#define XE_BOC  10	/* Back-off configuration */
17247133Sobrien
17347133Sobrien
17447133Sobrien/*
17547133Sobrien * Page 0x44 registers
17647133Sobrien */
17747133Sobrien#define XE_TDR0 8	/* Time domain reflectometry register 0 */
17847133Sobrien#define XE_TDR1 9	/* Time domain reflectometry register 1 */
17947133Sobrien#define XE_RXC0 10	/* Receive byte count low */
18047133Sobrien#define XE_RXC1 11	/* Receive byte count high */
18147133Sobrien
18247133Sobrien
18347133Sobrien/*
18447133Sobrien * Page 0x45 registers
18547133Sobrien */
18647133Sobrien#define XE_REV  15	/* Revision (read) */
18747133Sobrien
18847133Sobrien
18947133Sobrien/*
19047133Sobrien * Page 0x50 registers
19147133Sobrien */
19247133Sobrien#define XE_IAR  8	/* Individual address register */
19347133Sobrien
19447133Sobrien
19547133Sobrien/*
19647133Sobrien * Pages 0x43, 0x46-0x4f and 0x51-0x5e apparently don't exist.
19747133Sobrien * The remainder of 0x0-0x8 and 0x40-0x5f exist, but I have no
19847133Sobrien * idea what's on most of them.
19947133Sobrien */
20047133Sobrien
20147133Sobrien
20247133Sobrien/*
20347133Sobrien * MII/PHY defines adapted from the xl driver.  These need cleaning up a
20447133Sobrien * little if we end up using them.
20547133Sobrien */
20647133Sobrien#define XE_MII_CLK	0x01
20747133Sobrien#define XE_MII_DIR	0x08
20847133Sobrien#define XE_MII_WRD	0x02
20947133Sobrien#define XE_MII_RDD	0x20
21047133Sobrien#define XE_MII_STARTDELIM	0x01
21147133Sobrien#define XE_MII_READOP		0x02
21247133Sobrien#define XE_MII_WRITEOP		0x01
21347133Sobrien#define XE_MII_TURNAROUND	0x02
21447133Sobrien
21547133Sobrien#define XE_MII_SET(x)	XE_OUTB(XE_GPR2, (XE_INB(XE_GPR2) | 0x04) | (x))
21647133Sobrien#define XE_MII_CLR(x)	XE_OUTB(XE_GPR2, (XE_INB(XE_GPR2) | 0x04) & ~(x))
21747133Sobrien
21847133Sobrien#define XL_PHY_GENCTL		0x00
21947133Sobrien#define XL_PHY_GENSTS		0x01
22047133Sobrien#define XL_PHY_VENID		0x02
22147133Sobrien#define XL_PHY_DEVID		0x03
22247133Sobrien#define XL_PHY_ANAR		0x04
22347133Sobrien#define XL_PHY_LPAR		0x05
22447133Sobrien#define XL_PHY_ANER		0x06
22547133Sobrien
22647133Sobrien#define PHY_ANAR_NEXTPAGE	0x8000
22747133Sobrien#define PHY_ANAR_RSVD0		0x4000
22847133Sobrien#define PHY_ANAR_TLRFLT		0x2000
22947133Sobrien#define PHY_ANAR_RSVD1		0x1000
23047133Sobrien#define PHY_ANAR_RSVD2		0x0800
23147133Sobrien#define PHY_ANAR_RSVD3		0x0400
23247133Sobrien#define PHY_ANAR_100BT4		0x0200
23347133Sobrien#define PHY_ANAR_100BTXFULL	0x0100
23447133Sobrien#define PHY_ANAR_100BTXHALF	0x0080
23547133Sobrien#define PHY_ANAR_10BTFULL	0x0040
23647133Sobrien#define PHY_ANAR_10BTHALF	0x0020
23747133Sobrien#define PHY_ANAR_PROTO4		0x0010
23847133Sobrien#define PHY_ANAR_PROTO3		0x0008
23947133Sobrien#define PHY_ANAR_PROTO2		0x0004
24047133Sobrien#define PHY_ANAR_PROTO1		0x0002
24147133Sobrien#define PHY_ANAR_PROTO0		0x0001
24247133Sobrien
24347133Sobrien/*
24447133Sobrien * PHY BMCR Basic Mode Control Register
24547133Sobrien */
24647133Sobrien#define PHY_BMCR			0x00
24747133Sobrien#define PHY_BMCR_RESET			0x8000
24847133Sobrien#define PHY_BMCR_LOOPBK			0x4000
24947133Sobrien#define PHY_BMCR_SPEEDSEL		0x2000
25047133Sobrien#define PHY_BMCR_AUTONEGENBL		0x1000
25147133Sobrien#define PHY_BMCR_RSVD0			0x0800	/* write as zero */
25247133Sobrien#define PHY_BMCR_ISOLATE		0x0400
25347133Sobrien#define PHY_BMCR_AUTONEGRSTR		0x0200
25447133Sobrien#define PHY_BMCR_DUPLEX			0x0100
25547133Sobrien#define PHY_BMCR_COLLTEST		0x0080
25647133Sobrien#define PHY_BMCR_RSVD1			0x0040	/* write as zero, don't care */
25747133Sobrien#define PHY_BMCR_RSVD2			0x0020	/* write as zero, don't care */
25847133Sobrien#define PHY_BMCR_RSVD3			0x0010	/* write as zero, don't care */
25947133Sobrien#define PHY_BMCR_RSVD4			0x0008	/* write as zero, don't care */
26047133Sobrien#define PHY_BMCR_RSVD5			0x0004	/* write as zero, don't care */
26147133Sobrien#define PHY_BMCR_RSVD6			0x0002	/* write as zero, don't care */
26247133Sobrien#define PHY_BMCR_RSVD7			0x0001	/* write as zero, don't care */
26347133Sobrien
26447133Sobrien/*
26547133Sobrien * PHY, BMSR Basic Mode Status Register
26647133Sobrien */
26747133Sobrien#define PHY_BMSR			0x01
26847133Sobrien#define PHY_BMSR_100BT4			0x8000
26947133Sobrien#define PHY_BMSR_100BTXFULL		0x4000
27047133Sobrien#define PHY_BMSR_100BTXHALF		0x2000
27147133Sobrien#define PHY_BMSR_10BTFULL		0x1000
27247133Sobrien#define PHY_BMSR_10BTHALF		0x0800
27347133Sobrien#define PHY_BMSR_RSVD1			0x0400	/* write as zero, don't care */
27447133Sobrien#define PHY_BMSR_RSVD2			0x0200	/* write as zero, don't care */
27547133Sobrien#define PHY_BMSR_RSVD3			0x0100	/* write as zero, don't care */
27647133Sobrien#define PHY_BMSR_RSVD4			0x0080	/* write as zero, don't care */
27747133Sobrien#define PHY_BMSR_MFPRESUP		0x0040
27847133Sobrien#define PHY_BMSR_AUTONEGCOMP		0x0020
27947133Sobrien#define PHY_BMSR_REMFAULT		0x0010
28047133Sobrien#define PHY_BMSR_CANAUTONEG		0x0008
28147133Sobrien#define PHY_BMSR_LINKSTAT		0x0004
28247133Sobrien#define PHY_BMSR_JABBER			0x0002
28347133Sobrien#define PHY_BMSR_EXTENDED		0x0001
28447133Sobrien
28547133Sobrien
28647133Sobrien#endif /* NXE > 0 */
287