| /* |
| * Copyright (c) 2004-2005 The Regents of The University of Michigan |
| * All rights reserved. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are |
| * met: redistributions of source code must retain the above copyright |
| * notice, this list of conditions and the following disclaimer; |
| * redistributions in binary form must reproduce the above copyright |
| * notice, this list of conditions and the following disclaimer in the |
| * documentation and/or other materials provided with the distribution; |
| * neither the name of the copyright holders nor the names of its |
| * contributors may be used to endorse or promote products derived from |
| * this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| * |
| * Authors: Lisa Hsu |
| */ |
| |
| /** @file |
| * Ethernet device register definitions for the National |
| * Semiconductor DP83820 Ethernet controller |
| */ |
| |
| #ifndef __DEV_NS_GIGE_REG_H__ |
| #define __DEV_NS_GIGE_REG_H__ |
| |
| /* Device Register Address Map */ |
| enum DeviceRegisterAddress { |
| CR = 0x00, |
| CFGR = 0x04, |
| MEAR = 0x08, |
| PTSCR = 0x0c, |
| ISR = 0x10, |
| IMR = 0x14, |
| IER = 0x18, |
| IHR = 0x1c, |
| TXDP = 0x20, |
| TXDP_HI = 0x24, |
| TX_CFG = 0x28, |
| GPIOR = 0x2c, |
| RXDP = 0x30, |
| RXDP_HI = 0x34, |
| RX_CFG = 0x38, |
| PQCR = 0x3c, |
| WCSR = 0x40, |
| PCR = 0x44, |
| RFCR = 0x48, |
| RFDR = 0x4c, |
| BRAR = 0x50, |
| BRDR = 0x54, |
| SRR = 0x58, |
| MIBC = 0x5c, |
| MIB_START = 0x60, |
| MIB_END = 0x88, |
| VRCR = 0xbc, |
| VTCR = 0xc0, |
| VDR = 0xc4, |
| CCSR = 0xcc, |
| TBICR = 0xe0, |
| TBISR = 0xe4, |
| TANAR = 0xe8, |
| TANLPAR = 0xec, |
| TANER = 0xf0, |
| TESR = 0xf4, |
| M5REG = 0xf8, |
| LAST = 0xf8, |
| RESERVED = 0xfc |
| }; |
| |
| /* Chip Command Register */ |
| enum ChipCommandRegister { |
| CR_TXE = 0x00000001, |
| CR_TXD = 0x00000002, |
| CR_RXE = 0x00000004, |
| CR_RXD = 0x00000008, |
| CR_TXR = 0x00000010, |
| CR_RXR = 0x00000020, |
| CR_SWI = 0x00000080, |
| CR_RST = 0x00000100 |
| }; |
| |
| /* configuration register */ |
| enum ConfigurationRegisters { |
| CFGR_ZERO = 0x00000000, |
| CFGR_LNKSTS = 0x80000000, |
| CFGR_SPDSTS = 0x60000000, |
| CFGR_SPDSTS1 = 0x40000000, |
| CFGR_SPDSTS0 = 0x20000000, |
| CFGR_DUPSTS = 0x10000000, |
| CFGR_TBI_EN = 0x01000000, |
| CFGR_RESERVED = 0x0e000000, |
| CFGR_MODE_1000 = 0x00400000, |
| CFGR_AUTO_1000 = 0x00200000, |
| CFGR_PINT_CTL = 0x001c0000, |
| CFGR_PINT_DUPSTS = 0x00100000, |
| CFGR_PINT_LNKSTS = 0x00080000, |
| CFGR_PINT_SPDSTS = 0x00040000, |
| CFGR_TMRTEST = 0x00020000, |
| CFGR_MRM_DIS = 0x00010000, |
| CFGR_MWI_DIS = 0x00008000, |
| CFGR_T64ADDR = 0x00004000, |
| CFGR_PCI64_DET = 0x00002000, |
| CFGR_DATA64_EN = 0x00001000, |
| CFGR_M64ADDR = 0x00000800, |
| CFGR_PHY_RST = 0x00000400, |
| CFGR_PHY_DIS = 0x00000200, |
| CFGR_EXTSTS_EN = 0x00000100, |
| CFGR_REQALG = 0x00000080, |
| CFGR_SB = 0x00000040, |
| CFGR_POW = 0x00000020, |
| CFGR_EXD = 0x00000010, |
| CFGR_PESEL = 0x00000008, |
| CFGR_BROM_DIS = 0x00000004, |
| CFGR_EXT_125 = 0x00000002, |
| CFGR_BEM = 0x00000001 |
| }; |
| |
| /* EEPROM access register */ |
| enum EEPROMAccessRegister { |
| MEAR_EEDI = 0x00000001, |
| MEAR_EEDO = 0x00000002, |
| MEAR_EECLK = 0x00000004, |
| MEAR_EESEL = 0x00000008, |
| MEAR_MDIO = 0x00000010, |
| MEAR_MDDIR = 0x00000020, |
| MEAR_MDC = 0x00000040, |
| }; |
| |
| /* PCI test control register */ |
| enum PCITestControlRegister { |
| PTSCR_EEBIST_FAIL = 0x00000001, |
| PTSCR_EEBIST_EN = 0x00000002, |
| PTSCR_EELOAD_EN = 0x00000004, |
| PTSCR_RBIST_FAIL = 0x000001b8, |
| PTSCR_RBIST_DONE = 0x00000200, |
| PTSCR_RBIST_EN = 0x00000400, |
| PTSCR_RBIST_RST = 0x00002000, |
| PTSCR_RBIST_RDONLY = 0x000003f9 |
| }; |
| |
| /* interrupt status register */ |
| enum InterruptStatusRegister { |
| ISR_RESERVE = 0x80000000, |
| ISR_TXDESC3 = 0x40000000, |
| ISR_TXDESC2 = 0x20000000, |
| ISR_TXDESC1 = 0x10000000, |
| ISR_TXDESC0 = 0x08000000, |
| ISR_RXDESC3 = 0x04000000, |
| ISR_RXDESC2 = 0x02000000, |
| ISR_RXDESC1 = 0x01000000, |
| ISR_RXDESC0 = 0x00800000, |
| ISR_TXRCMP = 0x00400000, |
| ISR_RXRCMP = 0x00200000, |
| ISR_DPERR = 0x00100000, |
| ISR_SSERR = 0x00080000, |
| ISR_RMABT = 0x00040000, |
| ISR_RTAB = 0x00020000, |
| ISR_RXSOVR = 0x00010000, |
| ISR_HIBINT = 0x00008000, |
| ISR_PHY = 0x00004000, |
| ISR_PME = 0x00002000, |
| ISR_SWI = 0x00001000, |
| ISR_MIB = 0x00000800, |
| ISR_TXURN = 0x00000400, |
| ISR_TXIDLE = 0x00000200, |
| ISR_TXERR = 0x00000100, |
| ISR_TXDESC = 0x00000080, |
| ISR_TXOK = 0x00000040, |
| ISR_RXORN = 0x00000020, |
| ISR_RXIDLE = 0x00000010, |
| ISR_RXEARLY = 0x00000008, |
| ISR_RXERR = 0x00000004, |
| ISR_RXDESC = 0x00000002, |
| ISR_RXOK = 0x00000001, |
| ISR_ALL = 0x7FFFFFFF, |
| ISR_DELAY = (ISR_TXIDLE|ISR_TXDESC|ISR_TXOK| |
| ISR_RXIDLE|ISR_RXDESC|ISR_RXOK), |
| ISR_NODELAY = (ISR_ALL & ~ISR_DELAY), |
| ISR_IMPL = (ISR_SWI|ISR_TXIDLE|ISR_TXDESC|ISR_TXOK|ISR_RXORN| |
| ISR_RXIDLE|ISR_RXDESC|ISR_RXOK), |
| ISR_NOIMPL = (ISR_ALL & ~ISR_IMPL) |
| }; |
| |
| /* transmit configuration register */ |
| enum TransmitConfigurationRegister { |
| TX_CFG_CSI = 0x80000000, |
| TX_CFG_HBI = 0x40000000, |
| TX_CFG_MLB = 0x20000000, |
| TX_CFG_ATP = 0x10000000, |
| TX_CFG_ECRETRY = 0x00800000, |
| TX_CFG_BRST_DIS = 0x00080000, |
| TX_CFG_MXDMA1024 = 0x00000000, |
| TX_CFG_MXDMA512 = 0x00700000, |
| TX_CFG_MXDMA256 = 0x00600000, |
| TX_CFG_MXDMA128 = 0x00500000, |
| TX_CFG_MXDMA64 = 0x00400000, |
| TX_CFG_MXDMA32 = 0x00300000, |
| TX_CFG_MXDMA16 = 0x00200000, |
| TX_CFG_MXDMA8 = 0x00100000, |
| TX_CFG_MXDMA = 0x00700000, |
| |
| TX_CFG_FLTH_MASK = 0x0000ff00, |
| TX_CFG_DRTH_MASK = 0x000000ff |
| }; |
| |
| /*general purpose I/O control register */ |
| enum GeneralPurposeIOControlRegister { |
| GPIOR_UNUSED = 0xffff8000, |
| GPIOR_GP5_IN = 0x00004000, |
| GPIOR_GP4_IN = 0x00002000, |
| GPIOR_GP3_IN = 0x00001000, |
| GPIOR_GP2_IN = 0x00000800, |
| GPIOR_GP1_IN = 0x00000400, |
| GPIOR_GP5_OE = 0x00000200, |
| GPIOR_GP4_OE = 0x00000100, |
| GPIOR_GP3_OE = 0x00000080, |
| GPIOR_GP2_OE = 0x00000040, |
| GPIOR_GP1_OE = 0x00000020, |
| GPIOR_GP5_OUT = 0x00000010, |
| GPIOR_GP4_OUT = 0x00000008, |
| GPIOR_GP3_OUT = 0x00000004, |
| GPIOR_GP2_OUT = 0x00000002, |
| GPIOR_GP1_OUT = 0x00000001 |
| }; |
| |
| /* receive configuration register */ |
| enum ReceiveConfigurationRegister { |
| RX_CFG_AEP = 0x80000000, |
| RX_CFG_ARP = 0x40000000, |
| RX_CFG_STRIPCRC = 0x20000000, |
| RX_CFG_RX_FD = 0x10000000, |
| RX_CFG_ALP = 0x08000000, |
| RX_CFG_AIRL = 0x04000000, |
| RX_CFG_MXDMA512 = 0x00700000, |
| RX_CFG_MXDMA = 0x00700000, |
| RX_CFG_DRTH = 0x0000003e, |
| RX_CFG_DRTH0 = 0x00000002 |
| }; |
| |
| /* pause control status register */ |
| enum PauseControlStatusRegister { |
| PCR_PSEN = (1 << 31), |
| PCR_PS_MCAST = (1 << 30), |
| PCR_PS_DA = (1 << 29), |
| PCR_STHI_8 = (3 << 23), |
| PCR_STLO_4 = (1 << 23), |
| PCR_FFHI_8K = (3 << 21), |
| PCR_FFLO_4K = (1 << 21), |
| PCR_PAUSE_CNT = 0xFFFE |
| }; |
| |
| /*receive filter/match control register */ |
| enum ReceiveFilterMatchControlRegister { |
| RFCR_RFEN = 0x80000000, |
| RFCR_AAB = 0x40000000, |
| RFCR_AAM = 0x20000000, |
| RFCR_AAU = 0x10000000, |
| RFCR_APM = 0x08000000, |
| RFCR_APAT = 0x07800000, |
| RFCR_APAT3 = 0x04000000, |
| RFCR_APAT2 = 0x02000000, |
| RFCR_APAT1 = 0x01000000, |
| RFCR_APAT0 = 0x00800000, |
| RFCR_AARP = 0x00400000, |
| RFCR_MHEN = 0x00200000, |
| RFCR_UHEN = 0x00100000, |
| RFCR_ULM = 0x00080000, |
| RFCR_RFADDR = 0x000003ff |
| }; |
| |
| /* receive filter/match data register */ |
| enum ReceiveFilterMatchDataRegister { |
| RFDR_BMASK = 0x00030000, |
| RFDR_RFDATA0 = 0x000000ff, |
| RFDR_RFDATA1 = 0x0000ff00 |
| }; |
| |
| /* management information base control register */ |
| enum ManagementInformationBaseControlRegister { |
| MIBC_MIBS = 0x00000008, |
| MIBC_ACLR = 0x00000004, |
| MIBC_FRZ = 0x00000002, |
| MIBC_WRN = 0x00000001 |
| }; |
| |
| /* VLAN/IP receive control register */ |
| enum VLANIPReceiveControlRegister { |
| VRCR_RUDPE = 0x00000080, |
| VRCR_RTCPE = 0x00000040, |
| VRCR_RIPE = 0x00000020, |
| VRCR_IPEN = 0x00000010, |
| VRCR_DUTF = 0x00000008, |
| VRCR_DVTF = 0x00000004, |
| VRCR_VTREN = 0x00000002, |
| VRCR_VTDEN = 0x00000001 |
| }; |
| |
| /* VLAN/IP transmit control register */ |
| enum VLANIPTransmitControlRegister { |
| VTCR_PPCHK = 0x00000008, |
| VTCR_GCHK = 0x00000004, |
| VTCR_VPPTI = 0x00000002, |
| VTCR_VGTI = 0x00000001 |
| }; |
| |
| /* Clockrun Control/Status Register */ |
| enum ClockrunControlStatusRegister { |
| CCSR_CLKRUN_EN = 0x00000001 |
| }; |
| |
| /* TBI control register */ |
| enum TBIControlRegister { |
| TBICR_MR_LOOPBACK = 0x00004000, |
| TBICR_MR_AN_ENABLE = 0x00001000, |
| TBICR_MR_RESTART_AN = 0x00000200 |
| }; |
| |
| /* TBI status register */ |
| enum TBIStatusRegister { |
| TBISR_MR_LINK_STATUS = 0x00000020, |
| TBISR_MR_AN_COMPLETE = 0x00000004 |
| }; |
| |
| /* TBI auto-negotiation advertisement register */ |
| enum TBIAutoNegotiationAdvertisementRegister { |
| TANAR_NP = 0x00008000, |
| TANAR_RF2 = 0x00002000, |
| TANAR_RF1 = 0x00001000, |
| TANAR_PS2 = 0x00000100, |
| TANAR_PS1 = 0x00000080, |
| TANAR_HALF_DUP = 0x00000040, |
| TANAR_FULL_DUP = 0x00000020, |
| TANAR_UNUSED = 0x00000E1F |
| }; |
| |
| /* M5 control register */ |
| enum M5ControlRegister { |
| M5REG_RESERVED = 0xfffffffc, |
| M5REG_RSS = 0x00000004, |
| M5REG_RX_THREAD = 0x00000002, |
| M5REG_TX_THREAD = 0x00000001 |
| }; |
| |
| struct ns_desc32 { |
| uint32_t link; /* link field to next descriptor in linked list */ |
| uint32_t bufptr; /* pointer to the first fragment or buffer */ |
| uint32_t cmdsts; /* command/status field */ |
| uint32_t extsts; /* extended status field for VLAN and IP info */ |
| }; |
| |
| struct ns_desc64 { |
| uint64_t link; /* link field to next descriptor in linked list */ |
| uint64_t bufptr; /* pointer to the first fragment or buffer */ |
| uint32_t cmdsts; /* command/status field */ |
| uint32_t extsts; /* extended status field for VLAN and IP info */ |
| }; |
| |
| /* cmdsts flags for descriptors */ |
| enum CMDSTSFlatsForDescriptors { |
| CMDSTS_OWN = 0x80000000, |
| CMDSTS_MORE = 0x40000000, |
| CMDSTS_INTR = 0x20000000, |
| CMDSTS_ERR = 0x10000000, |
| CMDSTS_OK = 0x08000000, |
| CMDSTS_LEN_MASK = 0x0000ffff, |
| |
| CMDSTS_DEST_MASK = 0x01800000, |
| CMDSTS_DEST_SELF = 0x00800000, |
| CMDSTS_DEST_MULTI = 0x01000000 |
| }; |
| |
| /* extended flags for descriptors */ |
| enum ExtendedFlagsForDescriptors { |
| EXTSTS_UDPERR = 0x00400000, |
| EXTSTS_UDPPKT = 0x00200000, |
| EXTSTS_TCPERR = 0x00100000, |
| EXTSTS_TCPPKT = 0x00080000, |
| EXTSTS_IPERR = 0x00040000, |
| EXTSTS_IPPKT = 0x00020000 |
| }; |
| |
| /* speed status */ |
| static inline int |
| SPDSTS_POLARITY(int lnksts) |
| { |
| return (CFGR_SPDSTS1 | CFGR_SPDSTS0 | CFGR_DUPSTS | |
| (lnksts ? CFGR_LNKSTS : CFGR_ZERO)); |
| } |
| |
| #endif /* __DEV_NS_GIGE_REG_H__ */ |