186d7f5d3SJohn Marino /* 286d7f5d3SJohn Marino * $OpenBSD: yukonreg.h,v 1.2 2003/08/12 05:23:06 nate Exp $ 386d7f5d3SJohn Marino * $DragonFly: src/sys/dev/netif/sk/yukonreg.h,v 1.2 2006/11/14 12:52:31 sephe Exp $ 486d7f5d3SJohn Marino */ 586d7f5d3SJohn Marino /* 686d7f5d3SJohn Marino * Copyright (c) 2003 Nathan L. Binkert <binkertn@umich.edu> 786d7f5d3SJohn Marino * 886d7f5d3SJohn Marino * Permission to use, copy, modify, and distribute this software for any 986d7f5d3SJohn Marino * purpose with or without fee is hereby granted, provided that the above 1086d7f5d3SJohn Marino * copyright notice and this permission notice appear in all copies. 1186d7f5d3SJohn Marino * 1286d7f5d3SJohn Marino * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1386d7f5d3SJohn Marino * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1486d7f5d3SJohn Marino * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1586d7f5d3SJohn Marino * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1686d7f5d3SJohn Marino * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1786d7f5d3SJohn Marino * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1886d7f5d3SJohn Marino * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1986d7f5d3SJohn Marino * 2086d7f5d3SJohn Marino * $FreeBSD$ 2186d7f5d3SJohn Marino */ 2286d7f5d3SJohn Marino 2386d7f5d3SJohn Marino /* General Purpose Status Register (GPSR) */ 2486d7f5d3SJohn Marino #define YUKON_GPSR 0x0000 2586d7f5d3SJohn Marino 2686d7f5d3SJohn Marino #define YU_GPSR_SPEED 0x8000 /* speed 0 - 10Mbps, 1 - 100Mbps */ 2786d7f5d3SJohn Marino #define YU_GPSR_DUPLEX 0x4000 /* 0 - half duplex, 1 - full duplex */ 2886d7f5d3SJohn Marino #define YU_GPSR_FCTL_TX 0x2000 /* Tx flow control, 1 - disabled */ 2986d7f5d3SJohn Marino #define YU_GPSR_LINK 0x1000 /* link status (down/up) */ 3086d7f5d3SJohn Marino #define YU_GPSR_PAUSE 0x0800 /* flow control enable/disable */ 3186d7f5d3SJohn Marino #define YU_GPSR_TX_IN_PROG 0x0400 /* transmit in progress */ 3286d7f5d3SJohn Marino #define YU_GPSR_EXCESS_COL 0x0200 /* excessive collisions occurred */ 3386d7f5d3SJohn Marino #define YU_GPSR_LATE_COL 0x0100 /* late collision occurred */ 3486d7f5d3SJohn Marino #define YU_GPSR_MII_PHY_STC 0x0020 /* MII PHY status change */ 3586d7f5d3SJohn Marino #define YU_GPSR_GIG_SPEED 0x0010 /* Gigabit Speed (0 - use speed bit) */ 3686d7f5d3SJohn Marino #define YU_GPSR_PARTITION 0x0008 /* partition mode */ 3786d7f5d3SJohn Marino #define YU_GPSR_FCTL_RX 0x0004 /* Rx flow control, 1 - disabled */ 3886d7f5d3SJohn Marino #define YU_GPSR_PROMS_EN 0x0002 /* promiscuous mode, 1 - enabled */ 3986d7f5d3SJohn Marino 4086d7f5d3SJohn Marino /* General Purpose Control Register (GPCR) */ 4186d7f5d3SJohn Marino #define YUKON_GPCR 0x0004 4286d7f5d3SJohn Marino 4386d7f5d3SJohn Marino #define YU_GPCR_FCTL_TX_DIS 0x2000 /* Disable Tx flow control 802.3x */ 4486d7f5d3SJohn Marino #define YU_GPCR_TXEN 0x1000 /* Transmit Enable */ 4586d7f5d3SJohn Marino #define YU_GPCR_RXEN 0x0800 /* Receive Enable */ 4686d7f5d3SJohn Marino #define YU_GPCR_BURSTEN 0x0400 /* Burst Mode Enable */ 4786d7f5d3SJohn Marino #define YU_GPCR_LPBK 0x0200 /* MAC Loopback Enable */ 4886d7f5d3SJohn Marino #define YU_GPCR_PAR 0x0100 /* Partition Enable */ 4986d7f5d3SJohn Marino #define YU_GPCR_GIG 0x0080 /* Gigabit Speed 1000Mbps */ 5086d7f5d3SJohn Marino #define YU_GPCR_FLP 0x0040 /* Force Link Pass */ 5186d7f5d3SJohn Marino #define YU_GPCR_DUPLEX 0x0020 /* Duplex Enable */ 5286d7f5d3SJohn Marino #define YU_GPCR_FCTL_RX_DIS 0x0010 /* Disable Rx flow control 802.3x */ 5386d7f5d3SJohn Marino #define YU_GPCR_SPEED 0x0008 /* Port Speed 100Mbps */ 5486d7f5d3SJohn Marino #define YU_GPCR_DPLX_DIS 0x0004 /* Disable Auto-Update for duplex */ 5586d7f5d3SJohn Marino #define YU_GPCR_FCTL_DIS 0x0002 /* Disable Auto-Update for 802.3x */ 5686d7f5d3SJohn Marino #define YU_GPCR_SPEED_DIS 0x0001 /* Disable Auto-Update for speed */ 5786d7f5d3SJohn Marino 5886d7f5d3SJohn Marino /* Transmit Control Register (TCR) */ 5986d7f5d3SJohn Marino #define YUKON_TCR 0x0008 6086d7f5d3SJohn Marino 6186d7f5d3SJohn Marino #define YU_TCR_FJ 0x8000 /* force jam / flow control */ 6286d7f5d3SJohn Marino #define YU_TCR_CRCD 0x4000 /* insert CRC (0 - enable) */ 6386d7f5d3SJohn Marino #define YU_TCR_PADD 0x2000 /* pad packets to 64b (0 - enable) */ 6486d7f5d3SJohn Marino #define YU_TCR_COLTH 0x1c00 /* collision threshold */ 6586d7f5d3SJohn Marino 6686d7f5d3SJohn Marino /* Receive Control Register (RCR) */ 6786d7f5d3SJohn Marino #define YUKON_RCR 0x000c 6886d7f5d3SJohn Marino 6986d7f5d3SJohn Marino #define YU_RCR_UFLEN 0x8000 /* unicast filter enable */ 7086d7f5d3SJohn Marino #define YU_RCR_MUFLEN 0x4000 /* multicast filter enable */ 7186d7f5d3SJohn Marino #define YU_RCR_CRCR 0x2000 /* remove CRC */ 7286d7f5d3SJohn Marino #define YU_RCR_PASSFC 0x1000 /* pass flow control packets */ 7386d7f5d3SJohn Marino 7486d7f5d3SJohn Marino /* Transmit Flow Control Register (TFCR) */ 7586d7f5d3SJohn Marino #define YUKON_TFCR 0x0010 /* Pause Time */ 7686d7f5d3SJohn Marino 7786d7f5d3SJohn Marino /* Transmit Parameter Register (TPR) */ 7886d7f5d3SJohn Marino #define YUKON_TPR 0x0014 7986d7f5d3SJohn Marino 8086d7f5d3SJohn Marino #define YU_TPR_JAM_LEN(x) (((x) & 0x3) << 14) 8186d7f5d3SJohn Marino #define YU_TPR_JAM_IPG(x) (((x) & 0x1f) << 9) 8286d7f5d3SJohn Marino #define YU_TPR_JAM2DATA_IPG(x) (((x) & 0x1f) << 4) 8386d7f5d3SJohn Marino 8486d7f5d3SJohn Marino /* Serial Mode Register (SMR) */ 8586d7f5d3SJohn Marino #define YUKON_SMR 0x0018 8686d7f5d3SJohn Marino 8786d7f5d3SJohn Marino #define YU_SMR_DATA_BLIND(x) (((x) & 0x1f) << 11) 8886d7f5d3SJohn Marino #define YU_SMR_LIMIT4 0x0400 /* reset after 16 / 4 collisions */ 8986d7f5d3SJohn Marino #define YU_SMR_MFL_JUMBO 0x0100 /* max frame length for jumbo frames */ 9086d7f5d3SJohn Marino #define YU_SMR_MFL_VLAN 0x0200 /* max frame length + vlan tag */ 9186d7f5d3SJohn Marino #define YU_SMR_IPG_DATA(x) ((x) & 0x1f) 9286d7f5d3SJohn Marino 9386d7f5d3SJohn Marino /* Source Address Low #1 (SAL1) */ 9486d7f5d3SJohn Marino #define YUKON_SAL1 0x001c /* SA1[15:0] */ 9586d7f5d3SJohn Marino 9686d7f5d3SJohn Marino /* Source Address Middle #1 (SAM1) */ 9786d7f5d3SJohn Marino #define YUKON_SAM1 0x0020 /* SA1[31:16] */ 9886d7f5d3SJohn Marino 9986d7f5d3SJohn Marino /* Source Address High #1 (SAH1) */ 10086d7f5d3SJohn Marino #define YUKON_SAH1 0x0024 /* SA1[47:32] */ 10186d7f5d3SJohn Marino 10286d7f5d3SJohn Marino /* Source Address Low #2 (SAL2) */ 10386d7f5d3SJohn Marino #define YUKON_SAL2 0x0028 /* SA2[15:0] */ 10486d7f5d3SJohn Marino 10586d7f5d3SJohn Marino /* Source Address Middle #2 (SAM2) */ 10686d7f5d3SJohn Marino #define YUKON_SAM2 0x002c /* SA2[31:16] */ 10786d7f5d3SJohn Marino 10886d7f5d3SJohn Marino /* Source Address High #2 (SAH2) */ 10986d7f5d3SJohn Marino #define YUKON_SAH2 0x0030 /* SA2[47:32] */ 11086d7f5d3SJohn Marino 11186d7f5d3SJohn Marino /* Multicatst Address Hash Register 1 (MCAH1) */ 11286d7f5d3SJohn Marino #define YUKON_MCAH1 0x0034 11386d7f5d3SJohn Marino 11486d7f5d3SJohn Marino /* Multicatst Address Hash Register 2 (MCAH2) */ 11586d7f5d3SJohn Marino #define YUKON_MCAH2 0x0038 11686d7f5d3SJohn Marino 11786d7f5d3SJohn Marino /* Multicatst Address Hash Register 3 (MCAH3) */ 11886d7f5d3SJohn Marino #define YUKON_MCAH3 0x003c 11986d7f5d3SJohn Marino 12086d7f5d3SJohn Marino /* Multicatst Address Hash Register 4 (MCAH4) */ 12186d7f5d3SJohn Marino #define YUKON_MCAH4 0x0040 12286d7f5d3SJohn Marino 12386d7f5d3SJohn Marino /* Transmit Interrupt Register (TIR) */ 12486d7f5d3SJohn Marino #define YUKON_TIR 0x0044 12586d7f5d3SJohn Marino 12686d7f5d3SJohn Marino #define YU_TIR_OUT_UNICAST 0x0001 /* Num Unicast Packets Transmitted */ 12786d7f5d3SJohn Marino #define YU_TIR_OUT_BROADCAST 0x0002 /* Num Broadcast Packets Transmitted */ 12886d7f5d3SJohn Marino #define YU_TIR_OUT_PAUSE 0x0004 /* Num Pause Packets Transmitted */ 12986d7f5d3SJohn Marino #define YU_TIR_OUT_MULTICAST 0x0008 /* Num Multicast Packets Transmitted */ 13086d7f5d3SJohn Marino #define YU_TIR_OUT_OCTETS 0x0030 /* Num Bytes Transmitted */ 13186d7f5d3SJohn Marino #define YU_TIR_OUT_64_OCTETS 0x0000 /* Num Packets Transmitted */ 13286d7f5d3SJohn Marino #define YU_TIR_OUT_127_OCTETS 0x0000 /* Num Packets Transmitted */ 13386d7f5d3SJohn Marino #define YU_TIR_OUT_255_OCTETS 0x0000 /* Num Packets Transmitted */ 13486d7f5d3SJohn Marino #define YU_TIR_OUT_511_OCTETS 0x0000 /* Num Packets Transmitted */ 13586d7f5d3SJohn Marino #define YU_TIR_OUT_1023_OCTETS 0x0000 /* Num Packets Transmitted */ 13686d7f5d3SJohn Marino #define YU_TIR_OUT_1518_OCTETS 0x0000 /* Num Packets Transmitted */ 13786d7f5d3SJohn Marino #define YU_TIR_OUT_MAX_OCTETS 0x0000 /* Num Packets Transmitted */ 13886d7f5d3SJohn Marino #define YU_TIR_OUT_SPARE 0x0000 /* Num Packets Transmitted */ 13986d7f5d3SJohn Marino #define YU_TIR_OUT_COLLISIONS 0x0000 /* Num Packets Transmitted */ 14086d7f5d3SJohn Marino #define YU_TIR_OUT_LATE 0x0000 /* Num Packets Transmitted */ 14186d7f5d3SJohn Marino 14286d7f5d3SJohn Marino /* Receive Interrupt Register (RIR) */ 14386d7f5d3SJohn Marino #define YUKON_RIR 0x0048 14486d7f5d3SJohn Marino 14586d7f5d3SJohn Marino /* Transmit and Receive Interrupt Register (TRIR) */ 14686d7f5d3SJohn Marino #define YUKON_TRIR 0x004c 14786d7f5d3SJohn Marino 14886d7f5d3SJohn Marino /* Transmit Interrupt Mask Register (TIMR) */ 14986d7f5d3SJohn Marino #define YUKON_TIMR 0x0050 15086d7f5d3SJohn Marino 15186d7f5d3SJohn Marino /* Receive Interrupt Mask Register (RIMR) */ 15286d7f5d3SJohn Marino #define YUKON_RIMR 0x0054 15386d7f5d3SJohn Marino 15486d7f5d3SJohn Marino /* Transmit and Receive Interrupt Mask Register (TRIMR) */ 15586d7f5d3SJohn Marino #define YUKON_TRIMR 0x0058 15686d7f5d3SJohn Marino 15786d7f5d3SJohn Marino /* SMI Control Register (SMICR) */ 15886d7f5d3SJohn Marino #define YUKON_SMICR 0x0080 15986d7f5d3SJohn Marino 16086d7f5d3SJohn Marino #define YU_SMICR_PHYAD(x) (((x) & 0x1f) << 11) 16186d7f5d3SJohn Marino #define YU_SMICR_REGAD(x) (((x) & 0x1f) << 6) 16286d7f5d3SJohn Marino #define YU_SMICR_OPCODE 0x0020 /* opcode (0 - write, 1 - read) */ 16386d7f5d3SJohn Marino #define YU_SMICR_OP_READ 0x0020 /* opcode read */ 16486d7f5d3SJohn Marino #define YU_SMICR_OP_WRITE 0x0000 /* opcode write */ 16586d7f5d3SJohn Marino #define YU_SMICR_READ_VALID 0x0010 /* read valid */ 16686d7f5d3SJohn Marino #define YU_SMICR_BUSY 0x0008 /* busy (writing) */ 16786d7f5d3SJohn Marino 16886d7f5d3SJohn Marino /* SMI Data Register (SMIDR) */ 16986d7f5d3SJohn Marino #define YUKON_SMIDR 0x0084 17086d7f5d3SJohn Marino 17186d7f5d3SJohn Marino /* PHY Addres Register (PAR) */ 17286d7f5d3SJohn Marino #define YUKON_PAR 0x0088 17386d7f5d3SJohn Marino 17486d7f5d3SJohn Marino #define YU_PAR_MIB_CLR 0x0020 /* MIB Counters Clear Mode */ 17586d7f5d3SJohn Marino #define YU_PAR_LOAD_TSTCNT 0x0010 /* Load count 0xfffffff0 into cntr */ 17686d7f5d3SJohn Marino 17786d7f5d3SJohn Marino /* Receive status */ 17886d7f5d3SJohn Marino #define YU_RXSTAT_FOFL 0x00000001 /* Rx FIFO overflow */ 17986d7f5d3SJohn Marino #define YU_RXSTAT_CRCERR 0x00000002 /* CRC error */ 18086d7f5d3SJohn Marino #define YU_RXSTAT_FRAGMENT 0x00000008 /* fragment */ 18186d7f5d3SJohn Marino #define YU_RXSTAT_LONGERR 0x00000010 /* too long packet */ 18286d7f5d3SJohn Marino #define YU_RXSTAT_MIIERR 0x00000020 /* MII error */ 18386d7f5d3SJohn Marino #define YU_RXSTAT_BADFC 0x00000040 /* bad flow-control packet */ 18486d7f5d3SJohn Marino #define YU_RXSTAT_GOODFC 0x00000080 /* good flow-control packet */ 18586d7f5d3SJohn Marino #define YU_RXSTAT_RXOK 0x00000100 /* receice OK (Good packet) */ 18686d7f5d3SJohn Marino #define YU_RXSTAT_BROADCAST 0x00000200 /* broadcast packet */ 18786d7f5d3SJohn Marino #define YU_RXSTAT_MULTICAST 0x00000400 /* multicast packet */ 18886d7f5d3SJohn Marino #define YU_RXSTAT_RUNT 0x00000800 /* undersize packet */ 18986d7f5d3SJohn Marino #define YU_RXSTAT_JABBER 0x00001000 /* jabber packet */ 19086d7f5d3SJohn Marino #define YU_RXSTAT_VLAN 0x00002000 /* VLAN packet */ 19186d7f5d3SJohn Marino #define YU_RXSTAT_LENSHIFT 16 19286d7f5d3SJohn Marino 19386d7f5d3SJohn Marino #define YU_RXSTAT_BYTES(x) ((x) >> YU_RXSTAT_LENSHIFT) 194