xref: /dflybsd-src/sys/dev/netif/sln/if_slnreg.h (revision 86d7f5d305c6adaa56ff4582ece9859d73106103)
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