186d7f5d3SJohn Marino /* 286d7f5d3SJohn Marino * Copyright (c) 2008 The DragonFly Project. All rights reserved. 386d7f5d3SJohn Marino * 486d7f5d3SJohn Marino * Redistribution and use in source and binary forms, with or without 586d7f5d3SJohn Marino * modification, are permitted provided that the following conditions 686d7f5d3SJohn Marino * are met: 786d7f5d3SJohn Marino * 886d7f5d3SJohn Marino * 1. Redistributions of source code must retain the above copyright 986d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer. 1086d7f5d3SJohn Marino * 2. Redistributions in binary form must reproduce the above copyright 1186d7f5d3SJohn Marino * notice, this list of conditions and the following disclaimer in 1286d7f5d3SJohn Marino * the documentation and/or other materials provided with the 1386d7f5d3SJohn Marino * distribution. 1486d7f5d3SJohn Marino * 3. Neither the name of The DragonFly Project nor the names of its 1586d7f5d3SJohn Marino * contributors may be used to endorse or promote products derived 1686d7f5d3SJohn Marino * from this software without specific, prior written permission. 1786d7f5d3SJohn Marino * 1886d7f5d3SJohn Marino * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 1986d7f5d3SJohn Marino * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 2086d7f5d3SJohn Marino * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 2186d7f5d3SJohn Marino * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 2286d7f5d3SJohn Marino * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 2386d7f5d3SJohn Marino * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 2486d7f5d3SJohn Marino * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 2586d7f5d3SJohn Marino * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 2686d7f5d3SJohn Marino * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 2786d7f5d3SJohn Marino * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 2886d7f5d3SJohn Marino * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2986d7f5d3SJohn Marino * SUCH DAMAGE. 3086d7f5d3SJohn Marino * 3186d7f5d3SJohn Marino * $DragonFly: src/sys/dev/netif/sln/if_slnreg.h,v 1.1 2008/02/28 18:39:20 swildner Exp $ 3286d7f5d3SJohn Marino */ 3386d7f5d3SJohn Marino 3486d7f5d3SJohn Marino #ifndef _IF_SLREG_H_ 3586d7f5d3SJohn Marino #define _IF_SLREG_H_ 3686d7f5d3SJohn Marino 3786d7f5d3SJohn Marino /* 3886d7f5d3SJohn Marino * Silan netcard register offsets 3986d7f5d3SJohn Marino */ 4086d7f5d3SJohn Marino 4186d7f5d3SJohn Marino #define SL_CFG0 0x00 /* software reset */ 4286d7f5d3SJohn Marino #define SL_CFG1 0x04 /* select RX buffer size */ 4386d7f5d3SJohn Marino #define SL_RBW_PTR 0x08 /* RX buffer write pointer */ 4486d7f5d3SJohn Marino #define SL_INT_STATUS 0x0C /* interrupt status register */ 4586d7f5d3SJohn Marino #define SL_INT_MASK 0x10 /* interrupt mask register */ 4686d7f5d3SJohn Marino #define SL_RBSA 0x14 /* RX buffer start address */ 4786d7f5d3SJohn Marino #define SL_RBR_PTR 0x18 /* RX buffer read pointer */ 4886d7f5d3SJohn Marino #define SL_TSALD0 0x1C /* TX status of all descriptors */ 4986d7f5d3SJohn Marino #define SL_TSD0 0x20 /* TX status of descriptor 0 */ 5086d7f5d3SJohn Marino #define SL_TSD1 0x24 /* TX status of descriptor 1 */ 5186d7f5d3SJohn Marino #define SL_TSD2 0x28 /* TX status of descriptor 2 */ 5286d7f5d3SJohn Marino #define SL_TSD3 0x2C /* TX status of descriptor 3 */ 5386d7f5d3SJohn Marino #define SL_TSAD0 0x30 /* TX start address of descriptor 0 */ 5486d7f5d3SJohn Marino #define SL_TSAD1 0x34 /* TX start address of descriptor 1 */ 5586d7f5d3SJohn Marino #define SL_TSAD2 0x38 /* TX start address of descriptor 2 */ 5686d7f5d3SJohn Marino #define SL_TSAD3 0x3C /* TX start address of descriptor 3 */ 5786d7f5d3SJohn Marino #define SL_RX_CONFIG 0x40 /* RX configuration register */ 5886d7f5d3SJohn Marino #define SL_MAC_ADDR0 0x44 /* MAC address register 0 [47-16] */ 5986d7f5d3SJohn Marino #define SL_MAC_ADDR1 0x48 /* MAC address register 1 [15-0] */ 6086d7f5d3SJohn Marino #define SL_MULTI_GROUP0 0x4C /* multicast address config regiser 0 [63-32] */ 6186d7f5d3SJohn Marino #define SL_MULTI_GROUP1 0x50 /* multicast address config regiser 1 [31-0] */ 6286d7f5d3SJohn Marino #define SL_RX_STATUS0 0x54 /* RX status register 0 */ 6386d7f5d3SJohn Marino /* 0x58 reserved */ 6486d7f5d3SJohn Marino #define SL_TX_CONFIG 0x5C /* TX configuration register */ 6586d7f5d3SJohn Marino #define SL_PHY_CTRL 0x60 /* Physical control */ 6686d7f5d3SJohn Marino #define SL_FLOW_CTRL 0x64 /* flow control register */ 6786d7f5d3SJohn Marino #define SL_MII_CMD0 0x68 /* MII command register 0 */ 6886d7f5d3SJohn Marino #define SL_MII_CMD1 0x6C /* MII command register 1 */ 6986d7f5d3SJohn Marino #define SL_MII_STATUS 0x70 /* MII status register */ 7086d7f5d3SJohn Marino #define SL_TIMER_CNT 0x74 /* Timer counter register */ 7186d7f5d3SJohn Marino #define SL_TIMER_INTR 0x78 /* TImer interrupt register */ 7286d7f5d3SJohn Marino #define SL_PM_CFG 0x7C /* power managerment configuration register */ 7386d7f5d3SJohn Marino 7486d7f5d3SJohn Marino /* config register 0 */ 7586d7f5d3SJohn Marino #define SL_SOFT_RESET 0x80000000 7686d7f5d3SJohn Marino #define SL_ANAOFF 0x40000000 7786d7f5d3SJohn Marino #define SL_LDPS 0x20000000 7886d7f5d3SJohn Marino 7986d7f5d3SJohn Marino /* config register 1 */ 8086d7f5d3SJohn Marino #define SL_EARLY_RX 0x80000000 8186d7f5d3SJohn Marino #define SL_EARLY_TX 0x40000000 8286d7f5d3SJohn Marino 8386d7f5d3SJohn Marino #define SL_RXFIFO_16BYTES 0x00000000 8486d7f5d3SJohn Marino #define SL_RXFIFO_32BYTES 0x00200000 8586d7f5d3SJohn Marino #define SL_RXFIFO_64BYTES 0x00400000 8686d7f5d3SJohn Marino #define SL_RXFIFO_128BYTES 0x00600000 8786d7f5d3SJohn Marino #define SL_RXFIFO_256BYTES 0x00800000 8886d7f5d3SJohn Marino #define SL_RXFIFO_512BYTES 0x00A00000 8986d7f5d3SJohn Marino #define SL_RXFIFO_1024BYTES 0x00C00000 9086d7f5d3SJohn Marino #define SL_RXFIFO_NOTHRESH 0x00E00000 9186d7f5d3SJohn Marino 9286d7f5d3SJohn Marino #define SL_RXBUF_8 0x00000000 9386d7f5d3SJohn Marino #define SL_RXBUF_16 0x00000001 9486d7f5d3SJohn Marino #define SL_RXBUF_32 0x00000003 9586d7f5d3SJohn Marino #define SL_RXBUF_64 0x00000007 9686d7f5d3SJohn Marino #define SL_RXBUF_128 0x0000000F 9786d7f5d3SJohn Marino 9886d7f5d3SJohn Marino /* interrupt status register bits */ 9986d7f5d3SJohn Marino #define SL_INT_LINKFAIL 0x80000000 10086d7f5d3SJohn Marino #define SL_INT_LINKOK 0x40000000 10186d7f5d3SJohn Marino #define SL_INT_TIMEOUT 0x20000000 10286d7f5d3SJohn Marino #define SL_INT_DMARD_ST 0x00080000 10386d7f5d3SJohn Marino #define SL_INT_DMARD_FIN 0x00040000 10486d7f5d3SJohn Marino #define SL_INT_STB_Pl 0x00020000 10586d7f5d3SJohn Marino #define SL_INT_TXFIN_P 0x00010000 10686d7f5d3SJohn Marino #define SL_INT_RXFIN_P 0x00008000 10786d7f5d3SJohn Marino #define SL_INT_DMAWR_ST 0x00004000 10886d7f5d3SJohn Marino #define SL_INT_DMAWR_FIN 0x00002000 10986d7f5d3SJohn Marino #define SL_INT_RBO 0x00000040 11086d7f5d3SJohn Marino #define SL_INT_ROK 0x00000020 11186d7f5d3SJohn Marino #define SL_INT_TOK 0x00000001 11286d7f5d3SJohn Marino 11386d7f5d3SJohn Marino #define SL_INRTS (SL_INT_LINKFAIL | SL_INT_LINKOK | SL_INT_TIMEOUT | SL_INT_RBO | SL_INT_ROK | SL_INT_TOK) 11486d7f5d3SJohn Marino 11586d7f5d3SJohn Marino /* TX status of silan descriptors */ 11686d7f5d3SJohn Marino #define SL_TXSAD_TOK3 0x00008000 11786d7f5d3SJohn Marino #define SL_TXSAD_TOK2 0x00004000 11886d7f5d3SJohn Marino #define SL_TXSAD_TOK1 0x00002000 11986d7f5d3SJohn Marino #define SL_TXSAD_TOK0 0x00001000 12086d7f5d3SJohn Marino #define SL_TXSAD_TUN3 0x00000800 12186d7f5d3SJohn Marino #define SL_TXSAD_TUN2 0x00000400 12286d7f5d3SJohn Marino #define SL_TXSAD_TUN1 0x00000200 12386d7f5d3SJohn Marino #define SL_TXSAD_TUN0 0x00000100 12486d7f5d3SJohn Marino #define SL_TXSAD_TABT3 0x00000080 12586d7f5d3SJohn Marino #define SL_TXSAD_TABT2 0x00000040 12686d7f5d3SJohn Marino #define SL_TXSAD_TABT1 0x00000020 12786d7f5d3SJohn Marino #define SL_TXSAD_TABT0 0x00000010 12886d7f5d3SJohn Marino #define SL_TXSAD_OWN3 0x00000008 12986d7f5d3SJohn Marino #define SL_TXSAD_OWN2 0x00000004 13086d7f5d3SJohn Marino #define SL_TXSAD_OWN1 0x00000002 13186d7f5d3SJohn Marino #define SL_TXSAD_OWN0 0x00000001 13286d7f5d3SJohn Marino 13386d7f5d3SJohn Marino /* Transmit descriptor status register bits */ 13486d7f5d3SJohn Marino #define SL_TXSD_CRS 0x20000000 13586d7f5d3SJohn Marino #define SL_TXSD_TABT 0x10000000 13686d7f5d3SJohn Marino #define SL_TXSD_OWC 0x08000000 13786d7f5d3SJohn Marino #define SL_TXSD_NCC 0x03C00000 13886d7f5d3SJohn Marino #define SL_TXSD_EARLY_THRESH 0x003F0000 13986d7f5d3SJohn Marino #define SL_TXSD_TOK 0x00008000 14086d7f5d3SJohn Marino #define SL_TXSD_TUN 0x00004000 14186d7f5d3SJohn Marino #define SL_TXSD_OWN 0x00002000 14286d7f5d3SJohn Marino #define SL_TXSD_LENMASK 0x00001FFF 14386d7f5d3SJohn Marino 14486d7f5d3SJohn Marino /* bits in TX configuration register */ 14586d7f5d3SJohn Marino #define SL_TXCFG_FULLDX 0x80000000 14686d7f5d3SJohn Marino #define SL_TXCFG_EN 0x40000000 14786d7f5d3SJohn Marino #define SL_TXCFG_PAD 0x20000000 14886d7f5d3SJohn Marino #define SL_TXCFG_HUGE 0x10000000 14986d7f5d3SJohn Marino #define SL_TXCFG_FCS 0x08000000 15086d7f5d3SJohn Marino #define SL_TXCFG_NOBACKOFF 0x04000000 15186d7f5d3SJohn Marino #define SL_TXCFG_PREMBLE 0x02000000 15286d7f5d3SJohn Marino #define SL_TXCFG_LOSTCRS 0x01000000 15386d7f5d3SJohn Marino #define SL_TXCFG_EXDCOLLNUM 0x00F00000 15486d7f5d3SJohn Marino #define SL_TXCFG_DATARATE 0x00080000 15586d7f5d3SJohn Marino 15686d7f5d3SJohn Marino /* bits in RX configuration register */ 15786d7f5d3SJohn Marino #define SL_RXCFG_FULLDX 0x80000000 15886d7f5d3SJohn Marino #define SL_RXCFG_EN 0x40000000 15986d7f5d3SJohn Marino #define SL_RXCFG_RCV_SMALL 0x20000000 16086d7f5d3SJohn Marino #define SL_RXCFG_RCV_HUGE 0x10000000 16186d7f5d3SJohn Marino #define SL_RXCFG_RCV_ERR 0x08000000 16286d7f5d3SJohn Marino #define SL_RXCFG_RCV_ALL 0x04000000 16386d7f5d3SJohn Marino #define SL_RXCFG_RCV_MULTI 0x02000000 16486d7f5d3SJohn Marino #define SL_RXCFG_RCV_BROAD 0x01000000 16586d7f5d3SJohn Marino #define SL_RXCFG_LP_BCK 0x00C00000 16686d7f5d3SJohn Marino #define SL_RXCFG_LOW_THRESHOLD 0x00040000 16786d7f5d3SJohn Marino #define SL_RXCFG_HIGH_THRESHOLD 0x00000700 16886d7f5d3SJohn Marino 16986d7f5d3SJohn Marino /* Bits in RX status header (in RX'ed packet) */ 17086d7f5d3SJohn Marino #define SL_RXSTAT_LENMASK 0xFFF00000 17186d7f5d3SJohn Marino #define SL_RXSTAT_RXOK 0x00080000 17286d7f5d3SJohn Marino #define SL_RXSTAT_ALIGNERR 0x00040000 17386d7f5d3SJohn Marino #define SL_RXSTAT_HUGEFRM 0x00020000 17486d7f5d3SJohn Marino #define SL_RXSTAT_SMALLFRM 0x00010000 17586d7f5d3SJohn Marino #define SL_RXSTAT_CRCOK 0x00008000 17686d7f5d3SJohn Marino #define SL_RXSTAT_CRLFRM 0x00004000 17786d7f5d3SJohn Marino #define SL_RXSTAT_BROAD 0x00002000 17886d7f5d3SJohn Marino #define SL_RXSTAT_MULTI 0x00001000 17986d7f5d3SJohn Marino #define SL_RXSTAT_MATCH 0x00000800 18086d7f5d3SJohn Marino #define SL_RXSTAT_MIIERR 0x00000400 18186d7f5d3SJohn Marino 18286d7f5d3SJohn Marino /* Physical Control configuration register */ 18386d7f5d3SJohn Marino #define SL_PHYCTL_ANE 0x80000000 18486d7f5d3SJohn Marino #define SL_PHYCTL_SPD100 0x40000000 18586d7f5d3SJohn Marino #define SL_PHYCTL_SPD10 0x20000000 18686d7f5d3SJohn Marino #define SL_PHYCTL_BASEADD 0x1F000000 18786d7f5d3SJohn Marino #define SL_PHYCTL_DUX 0x00800000 18886d7f5d3SJohn Marino #define SL_PHYCTL_RESET 0x00400000 18986d7f5d3SJohn Marino 19086d7f5d3SJohn Marino /* Flow Control configuration register */ 19186d7f5d3SJohn Marino #define SL_FLOWCTL_FULLDX 0x80000000 19286d7f5d3SJohn Marino #define SL_FLOWCTL_EN 0x40000000 19386d7f5d3SJohn Marino #define SL_FLOWCTL_PASSALL 0x20000000 19486d7f5d3SJohn Marino #define SL_FLOWCTL_ENPAUSE 0x10000000 19586d7f5d3SJohn Marino #define SL_FLOWCTL_PAUSEF 0x08000000 19686d7f5d3SJohn Marino #define SL_FLOWCTL_PAUSE0 0x04000000 19786d7f5d3SJohn Marino 19886d7f5d3SJohn Marino /* MII command register 0 */ 19986d7f5d3SJohn Marino #define SL_MII0_DIVEDER 0x20000000 20086d7f5d3SJohn Marino #define SL_MII0_NOPRE 0x00800000 20186d7f5d3SJohn Marino #define SL_MII0_WRITE 0x00400000 20286d7f5d3SJohn Marino #define SL_MII0_READ 0x00200000 20386d7f5d3SJohn Marino #define SL_MII0_SCAN 0x00100000 20486d7f5d3SJohn Marino #define SL_MII0_TXMODE 0x00080000 20586d7f5d3SJohn Marino #define SL_MII0_DRVMOD 0x00040000 20686d7f5d3SJohn Marino #define SL_MII0_MDC 0x00020000 20786d7f5d3SJohn Marino #define SL_MII0_MDOEN 0x00010000 20886d7f5d3SJohn Marino #define SL_MII0_MDO 0x00008000 20986d7f5d3SJohn Marino #define SL_MII0_MDI 0x00004000 21086d7f5d3SJohn Marino 21186d7f5d3SJohn Marino /* MII status register */ 21286d7f5d3SJohn Marino #define SL_MIISTAT_BUSY 0x80000000 21386d7f5d3SJohn Marino 21486d7f5d3SJohn Marino /* register in 80225 */ 21586d7f5d3SJohn Marino #define SL_MII_CTRL 0 21686d7f5d3SJohn Marino #define SL_MII_STAT 1 21786d7f5d3SJohn Marino #define SL_MII_ADV 4 21886d7f5d3SJohn Marino #define SL_MII_JAB 16 21986d7f5d3SJohn Marino #define SL_MII_STAT_OUTPUT 24 22086d7f5d3SJohn Marino 22186d7f5d3SJohn Marino /* bit value for 80225 */ 22286d7f5d3SJohn Marino #define SL_MIICTRL_ANEGEN 0x1000 22386d7f5d3SJohn Marino #define SL_MIICTRL_SPEEDSEL 0x2000 22486d7f5d3SJohn Marino #define SL_MIICTRL_DUPSEL 0x0100 22586d7f5d3SJohn Marino #define SL_MIICTRL_ANEGRSTR 0x0200 22686d7f5d3SJohn Marino #define SL_MIISTAT_LINK 0x0004 22786d7f5d3SJohn Marino #define SL_MIISTAT_ANEGACK 0x0020 22886d7f5d3SJohn Marino #define SL_PHY_16_JAB_ENB 0x1000 22986d7f5d3SJohn Marino #define SL_PHY_16_PORT_ENB 0x1 23086d7f5d3SJohn Marino 23186d7f5d3SJohn Marino /* 23286d7f5d3SJohn Marino * PCI low memory base and low I/O base register, and other PCI registers. 23386d7f5d3SJohn Marino */ 23486d7f5d3SJohn Marino #define SL_PCI_VENDORID 0x00 23586d7f5d3SJohn Marino #define SL_PCI_DEVICEID 0x02 23686d7f5d3SJohn Marino #define SL_PCI_COMMAND 0x04 23786d7f5d3SJohn Marino #define SL_PCI_STATUS 0x06 23886d7f5d3SJohn Marino #define SL_PCI_REVISIONID 0x08 23986d7f5d3SJohn Marino #define SL_PCI_MEMAD 0x10 24086d7f5d3SJohn Marino #define SL_PCI_IOAD 0x14 24186d7f5d3SJohn Marino #define SL_PCI_SUBVENDORID 0x2C 24286d7f5d3SJohn Marino #define SL_PCI_SUBDEVICEID 0x2E 24386d7f5d3SJohn Marino #define RL_PCI_INTLINE 0x3C 24486d7f5d3SJohn Marino 24586d7f5d3SJohn Marino #define SL_CMD_IO 0x0001 24686d7f5d3SJohn Marino #define SL_CMD_MEMORY 0x0002 24786d7f5d3SJohn Marino #define SL_CMD_BUSMASTER 0x0004 24886d7f5d3SJohn Marino 24986d7f5d3SJohn Marino #define SL_TXD_CNT 4 25086d7f5d3SJohn Marino #define SL_RX_BUF_SZ SL_RXBUF_64 25186d7f5d3SJohn Marino #define SL_RX_BUFLEN (1 << (SL_RX_BUF_SZ + 9)) 25286d7f5d3SJohn Marino #define TX_CFG_DEFAULT 0x48800000 25386d7f5d3SJohn Marino 25486d7f5d3SJohn Marino /* register space access macros */ 25586d7f5d3SJohn Marino #define SLN_WRITE_4(adapter, reg, val) bus_space_write_4(adapter->sln_bustag, adapter->sln_bushandle, reg, val) 25686d7f5d3SJohn Marino #define SLN_WRITE_2(adapter, reg, val) bus_space_write_2(adapter->sln_bustag, adapter->sln_bushandle, reg, val) 25786d7f5d3SJohn Marino #define SLN_WRITE_1(adapter, reg, val) bus_space_write_1(adapter->sln_bustag, adapter->sln_bushandle, reg, val) 25886d7f5d3SJohn Marino 25986d7f5d3SJohn Marino #define SLN_READ_4(adapter, reg) bus_space_read_4(adapter->sln_bustag, adapter->sln_bushandle, reg) 26086d7f5d3SJohn Marino #define SLN_READ_2(adapter, reg) bus_space_read_2(adapter->sln_bustag, adapter->sln_bushandle, reg) 26186d7f5d3SJohn Marino #define SLN_READ_1(adapter, reg) bus_space_read_1(adapter->sln_bustag, adapter->sln_bushandle, reg) 26286d7f5d3SJohn Marino 26386d7f5d3SJohn Marino #define SL_DIRTY_TXBUF(x) x->sln_bufdata.sln_tx_buf[x->sln_bufdata.dirty_tx] 26486d7f5d3SJohn Marino #define SL_CUR_TXBUF(x) x->sln_bufdata.sln_tx_buf[x->sln_bufdata.cur_tx] 26586d7f5d3SJohn Marino 26686d7f5d3SJohn Marino #endif /* !_IF_SLREG_H_ */ 267