1d2155f2fSWarner Losh /*- 2df57947fSPedro F. Giffuni * SPDX-License-Identifier: BSD-4-Clause 3df57947fSPedro F. Giffuni * 4d2155f2fSWarner Losh * Copyright (c) 1997, 1998, 1999 5d2155f2fSWarner Losh * Bill Paul <wpaul@ee.columbia.edu>. All rights reserved. 6d2155f2fSWarner Losh * 7d2155f2fSWarner Losh * Redistribution and use in source and binary forms, with or without 8d2155f2fSWarner Losh * modification, are permitted provided that the following conditions 9d2155f2fSWarner Losh * are met: 10d2155f2fSWarner Losh * 1. Redistributions of source code must retain the above copyright 11d2155f2fSWarner Losh * notice, this list of conditions and the following disclaimer. 12d2155f2fSWarner Losh * 2. Redistributions in binary form must reproduce the above copyright 13d2155f2fSWarner Losh * notice, this list of conditions and the following disclaimer in the 14d2155f2fSWarner Losh * documentation and/or other materials provided with the distribution. 15d2155f2fSWarner Losh * 3. All advertising materials mentioning features or use of this software 16d2155f2fSWarner Losh * must display the following acknowledgement: 17d2155f2fSWarner Losh * This product includes software developed by Bill Paul. 18d2155f2fSWarner Losh * 4. Neither the name of the author nor the names of any co-contributors 19d2155f2fSWarner Losh * may be used to endorse or promote products derived from this software 20d2155f2fSWarner Losh * without specific prior written permission. 21d2155f2fSWarner Losh * 22d2155f2fSWarner Losh * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND 23d2155f2fSWarner Losh * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24d2155f2fSWarner Losh * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25d2155f2fSWarner Losh * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD 26d2155f2fSWarner Losh * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 27d2155f2fSWarner Losh * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 28d2155f2fSWarner Losh * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 29d2155f2fSWarner Losh * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 30d2155f2fSWarner Losh * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 31d2155f2fSWarner Losh * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 32d2155f2fSWarner Losh * THE POSSIBILITY OF SUCH DAMAGE. 33d2155f2fSWarner Losh */ 34d2155f2fSWarner Losh 35d2155f2fSWarner Losh /* 36d2155f2fSWarner Losh * Register definitions for the SiS 900 and SiS 7016 chipsets. The 37d2155f2fSWarner Losh * 7016 is actually an older chip and some of its registers differ 38d2155f2fSWarner Losh * from the 900, however the core operational registers are the same: 39d2155f2fSWarner Losh * the differences lie in the OnNow/Wake on LAN stuff which we don't 40d2155f2fSWarner Losh * use anyway. The 7016 needs an external MII compliant PHY while the 41d2155f2fSWarner Losh * SiS 900 has one built in. All registers are 32-bits wide. 42d2155f2fSWarner Losh */ 43d2155f2fSWarner Losh 44d2155f2fSWarner Losh /* Registers common to SiS 900 and SiS 7016 */ 45d2155f2fSWarner Losh #define SIS_CSR 0x00 46d2155f2fSWarner Losh #define SIS_CFG 0x04 47d2155f2fSWarner Losh #define SIS_EECTL 0x08 48d2155f2fSWarner Losh #define SIS_PCICTL 0x0C 49d2155f2fSWarner Losh #define SIS_ISR 0x10 50d2155f2fSWarner Losh #define SIS_IMR 0x14 51d2155f2fSWarner Losh #define SIS_IER 0x18 52d2155f2fSWarner Losh #define SIS_PHYCTL 0x1C 53d2155f2fSWarner Losh #define SIS_TX_LISTPTR 0x20 54d2155f2fSWarner Losh #define SIS_TX_CFG 0x24 55d2155f2fSWarner Losh #define SIS_RX_LISTPTR 0x30 56d2155f2fSWarner Losh #define SIS_RX_CFG 0x34 57d2155f2fSWarner Losh #define SIS_FLOWCTL 0x38 58d2155f2fSWarner Losh #define SIS_RXFILT_CTL 0x48 59d2155f2fSWarner Losh #define SIS_RXFILT_DATA 0x4C 60d2155f2fSWarner Losh #define SIS_PWRMAN_CTL 0xB0 61d2155f2fSWarner Losh #define SIS_PWERMAN_WKUP_EVENT 0xB4 62d2155f2fSWarner Losh #define SIS_WKUP_FRAME_CRC 0xBC 63d2155f2fSWarner Losh #define SIS_WKUP_FRAME_MASK0 0xC0 64d2155f2fSWarner Losh #define SIS_WKUP_FRAME_MASKXX 0xEC 65d2155f2fSWarner Losh 66d2155f2fSWarner Losh /* SiS 7016 specific registers */ 67d2155f2fSWarner Losh #define SIS_SILICON_REV 0x5C 68d2155f2fSWarner Losh #define SIS_MIB_CTL0 0x60 69d2155f2fSWarner Losh #define SIS_MIB_CTL1 0x64 70d2155f2fSWarner Losh #define SIS_MIB_CTL2 0x68 71d2155f2fSWarner Losh #define SIS_MIB_CTL3 0x6C 72d2155f2fSWarner Losh #define SIS_MIB 0x80 73d2155f2fSWarner Losh #define SIS_LINKSTS 0xA0 74d2155f2fSWarner Losh #define SIS_TIMEUNIT 0xA4 75d2155f2fSWarner Losh #define SIS_GPIO 0xB8 76d2155f2fSWarner Losh 77d2155f2fSWarner Losh /* NS DP83815/6 registers */ 78d2155f2fSWarner Losh #define NS_IHR 0x1C 79d2155f2fSWarner Losh #define NS_CLKRUN 0x3C 800af3989bSPyun YongHyeon #define NS_WCSR 0x40 81d2155f2fSWarner Losh #define NS_SRR 0x58 82d2155f2fSWarner Losh #define NS_BMCR 0x80 83d2155f2fSWarner Losh #define NS_BMSR 0x84 84d2155f2fSWarner Losh #define NS_PHYIDR1 0x88 85d2155f2fSWarner Losh #define NS_PHYIDR2 0x8C 86d2155f2fSWarner Losh #define NS_ANAR 0x90 87d2155f2fSWarner Losh #define NS_ANLPAR 0x94 88d2155f2fSWarner Losh #define NS_ANER 0x98 89d2155f2fSWarner Losh #define NS_ANNPTR 0x9C 90d2155f2fSWarner Losh 91d2155f2fSWarner Losh #define NS_PHY_CR 0xE4 92d2155f2fSWarner Losh #define NS_PHY_10BTSCR 0xE8 93d2155f2fSWarner Losh #define NS_PHY_PAGE 0xCC 94d2155f2fSWarner Losh #define NS_PHY_EXTCFG 0xF0 95d2155f2fSWarner Losh #define NS_PHY_DSPCFG 0xF4 96d2155f2fSWarner Losh #define NS_PHY_SDCFG 0xF8 97d2155f2fSWarner Losh #define NS_PHY_TDATA 0xFC 98d2155f2fSWarner Losh 99d2155f2fSWarner Losh #define NS_CLKRUN_PMESTS 0x00008000 100d2155f2fSWarner Losh #define NS_CLKRUN_PMEENB 0x00000100 101d2155f2fSWarner Losh #define NS_CLNRUN_CLKRUN_ENB 0x00000001 102d2155f2fSWarner Losh 1030af3989bSPyun YongHyeon #define NS_WCSR_WAKE_PHYINTR 0x00000001 1040af3989bSPyun YongHyeon #define NS_WCSR_WAKE_UCAST 0x00000002 1050af3989bSPyun YongHyeon #define NS_WCSR_WAKE_MCAST 0x00000004 1060af3989bSPyun YongHyeon #define NS_WCSR_WAKE_BCAST 0x00000008 1070af3989bSPyun YongHyeon #define NS_WCSR_WAKE_ARP 0x00000010 1080af3989bSPyun YongHyeon #define NS_WCSR_WAKE_PATTERN0 0x00000020 1090af3989bSPyun YongHyeon #define NS_WCSR_WAKE_PATTERN1 0x00000040 1100af3989bSPyun YongHyeon #define NS_WCSR_WAKE_PATTERN2 0x00000080 1110af3989bSPyun YongHyeon #define NS_WCSR_WAKE_PATTERN3 0x00000100 1120af3989bSPyun YongHyeon #define NS_WCSR_WAKE_MAGIC 0x00000200 1130af3989bSPyun YongHyeon #define NS_WCSR_WAKE_MAGIC_SEC 0x00000400 1140af3989bSPyun YongHyeon #define NS_WCSR_DET_MAGIC_SECH 0x00100000 1150af3989bSPyun YongHyeon #define NS_WCSR_DET_PHYINTR 0x00400000 1160af3989bSPyun YongHyeon #define NS_WCSR_DET_UCAST 0x00800000 1170af3989bSPyun YongHyeon #define NS_WCSR_DET_MCAST 0x01000000 1180af3989bSPyun YongHyeon #define NS_WCSR_DET_BCAST 0x02000000 1190af3989bSPyun YongHyeon #define NS_WCSR_DET_ARP 0x04000000 1200af3989bSPyun YongHyeon #define NS_WCSR_DET_PATTERN0 0x08000000 1210af3989bSPyun YongHyeon #define NS_WCSR_DET_PATTERN1 0x10000000 1220af3989bSPyun YongHyeon #define NS_WCSR_DET_PATTERN2 0x20000000 1230af3989bSPyun YongHyeon #define NS_WCSR_DET_PATTERN3 0x40000000 1240af3989bSPyun YongHyeon #define NS_WCSR_DET_MAGIC 0x80000000 1250af3989bSPyun YongHyeon 126d2155f2fSWarner Losh /* NS silicon revisions */ 127d2155f2fSWarner Losh #define NS_SRR_15C 0x302 128d2155f2fSWarner Losh #define NS_SRR_15D 0x403 129d2155f2fSWarner Losh #define NS_SRR_16A 0x505 130d2155f2fSWarner Losh 131d2155f2fSWarner Losh #define SIS_CSR_TX_ENABLE 0x00000001 132d2155f2fSWarner Losh #define SIS_CSR_TX_DISABLE 0x00000002 133d2155f2fSWarner Losh #define SIS_CSR_RX_ENABLE 0x00000004 134d2155f2fSWarner Losh #define SIS_CSR_RX_DISABLE 0x00000008 135d2155f2fSWarner Losh #define SIS_CSR_TX_RESET 0x00000010 136d2155f2fSWarner Losh #define SIS_CSR_RX_RESET 0x00000020 137d2155f2fSWarner Losh #define SIS_CSR_SOFTINTR 0x00000080 138d2155f2fSWarner Losh #define SIS_CSR_RESET 0x00000100 139d2155f2fSWarner Losh #define SIS_CSR_ACCESS_MODE 0x00000200 140d2155f2fSWarner Losh #define SIS_CSR_RELOAD 0x00000400 141d2155f2fSWarner Losh 142d2155f2fSWarner Losh #define SIS_CFG_BIGENDIAN 0x00000001 143d2155f2fSWarner Losh #define SIS_CFG_PERR_DETECT 0x00000008 144d2155f2fSWarner Losh #define SIS_CFG_DEFER_DISABLE 0x00000010 145d2155f2fSWarner Losh #define SIS_CFG_OUTOFWIN_TIMER 0x00000020 146d2155f2fSWarner Losh #define SIS_CFG_SINGLE_BACKOFF 0x00000040 147d2155f2fSWarner Losh #define SIS_CFG_PCIREQ_ALG 0x00000080 148d2155f2fSWarner Losh #define SIS_CFG_FAIR_BACKOFF 0x00000200 /* 635 & 900B Specific */ 149d2155f2fSWarner Losh #define SIS_CFG_RND_CNT 0x00000400 /* 635 & 900B Specific */ 150d2155f2fSWarner Losh #define SIS_CFG_EDB_MASTER_EN 0x00002000 151d2155f2fSWarner Losh 152d2155f2fSWarner Losh #define SIS_EECTL_DIN 0x00000001 153d2155f2fSWarner Losh #define SIS_EECTL_DOUT 0x00000002 154d2155f2fSWarner Losh #define SIS_EECTL_CLK 0x00000004 155d2155f2fSWarner Losh #define SIS_EECTL_CSEL 0x00000008 156d2155f2fSWarner Losh 157d2155f2fSWarner Losh #define SIS_MII_CLK 0x00000040 158d2155f2fSWarner Losh #define SIS_MII_DIR 0x00000020 159d2155f2fSWarner Losh #define SIS_MII_DATA 0x00000010 160d2155f2fSWarner Losh 161d2155f2fSWarner Losh #define SIS_EECMD_WRITE 0x140 162d2155f2fSWarner Losh #define SIS_EECMD_READ 0x180 163d2155f2fSWarner Losh #define SIS_EECMD_ERASE 0x1c0 164d2155f2fSWarner Losh 165d2155f2fSWarner Losh /* 166d2155f2fSWarner Losh * EEPROM Commands for SiS96x 167d2155f2fSWarner Losh * chipsets. 168d2155f2fSWarner Losh */ 169d2155f2fSWarner Losh #define SIS_EECMD_REQ 0x00000400 170d2155f2fSWarner Losh #define SIS_EECMD_DONE 0x00000200 171d2155f2fSWarner Losh #define SIS_EECMD_GNT 0x00000100 172d2155f2fSWarner Losh 173d2155f2fSWarner Losh #define SIS_EE_NODEADDR 0x8 174d2155f2fSWarner Losh #define NS_EE_NODEADDR 0x6 175d2155f2fSWarner Losh 176d2155f2fSWarner Losh #define SIS_PCICTL_SRAMADDR 0x0000001F 177d2155f2fSWarner Losh #define SIS_PCICTL_RAMTSTENB 0x00000020 178d2155f2fSWarner Losh #define SIS_PCICTL_TXTSTENB 0x00000040 179d2155f2fSWarner Losh #define SIS_PCICTL_RXTSTENB 0x00000080 180d2155f2fSWarner Losh #define SIS_PCICTL_BMTSTENB 0x00000200 181d2155f2fSWarner Losh #define SIS_PCICTL_RAMADDR 0x001F0000 182d2155f2fSWarner Losh #define SIS_PCICTL_ROMTIME 0x0F000000 183d2155f2fSWarner Losh #define SIS_PCICTL_DISCTEST 0x40000000 184d2155f2fSWarner Losh 185d2155f2fSWarner Losh #define SIS_ISR_RX_OK 0x00000001 186d2155f2fSWarner Losh #define SIS_ISR_RX_DESC_OK 0x00000002 187d2155f2fSWarner Losh #define SIS_ISR_RX_ERR 0x00000004 188d2155f2fSWarner Losh #define SIS_ISR_RX_EARLY 0x00000008 189d2155f2fSWarner Losh #define SIS_ISR_RX_IDLE 0x00000010 190d2155f2fSWarner Losh #define SIS_ISR_RX_OFLOW 0x00000020 191d2155f2fSWarner Losh #define SIS_ISR_TX_OK 0x00000040 192d2155f2fSWarner Losh #define SIS_ISR_TX_DESC_OK 0x00000080 193d2155f2fSWarner Losh #define SIS_ISR_TX_ERR 0x00000100 194d2155f2fSWarner Losh #define SIS_ISR_TX_IDLE 0x00000200 195d2155f2fSWarner Losh #define SIS_ISR_TX_UFLOW 0x00000400 196d2155f2fSWarner Losh #define SIS_ISR_SOFTINTR 0x00000800 197d2155f2fSWarner Losh #define SIS_ISR_HIBITS 0x00008000 198d2155f2fSWarner Losh #define SIS_ISR_RX_FIFO_OFLOW 0x00010000 199d2155f2fSWarner Losh #define SIS_ISR_TGT_ABRT 0x00100000 200d2155f2fSWarner Losh #define SIS_ISR_BM_ABRT 0x00200000 201d2155f2fSWarner Losh #define SIS_ISR_SYSERR 0x00400000 202d2155f2fSWarner Losh #define SIS_ISR_PARITY_ERR 0x00800000 203d2155f2fSWarner Losh #define SIS_ISR_RX_RESET_DONE 0x01000000 204d2155f2fSWarner Losh #define SIS_ISR_TX_RESET_DONE 0x02000000 205d2155f2fSWarner Losh #define SIS_ISR_TX_PAUSE_START 0x04000000 206d2155f2fSWarner Losh #define SIS_ISR_TX_PAUSE_DONE 0x08000000 207d2155f2fSWarner Losh #define SIS_ISR_WAKE_EVENT 0x10000000 208d2155f2fSWarner Losh 209d2155f2fSWarner Losh #define SIS_IMR_RX_OK 0x00000001 210d2155f2fSWarner Losh #define SIS_IMR_RX_DESC_OK 0x00000002 211d2155f2fSWarner Losh #define SIS_IMR_RX_ERR 0x00000004 212d2155f2fSWarner Losh #define SIS_IMR_RX_EARLY 0x00000008 213d2155f2fSWarner Losh #define SIS_IMR_RX_IDLE 0x00000010 214d2155f2fSWarner Losh #define SIS_IMR_RX_OFLOW 0x00000020 215d2155f2fSWarner Losh #define SIS_IMR_TX_OK 0x00000040 216d2155f2fSWarner Losh #define SIS_IMR_TX_DESC_OK 0x00000080 217d2155f2fSWarner Losh #define SIS_IMR_TX_ERR 0x00000100 218d2155f2fSWarner Losh #define SIS_IMR_TX_IDLE 0x00000200 219d2155f2fSWarner Losh #define SIS_IMR_TX_UFLOW 0x00000400 220d2155f2fSWarner Losh #define SIS_IMR_SOFTINTR 0x00000800 221d2155f2fSWarner Losh #define SIS_IMR_HIBITS 0x00008000 222d2155f2fSWarner Losh #define SIS_IMR_RX_FIFO_OFLOW 0x00010000 223d2155f2fSWarner Losh #define SIS_IMR_TGT_ABRT 0x00100000 224d2155f2fSWarner Losh #define SIS_IMR_BM_ABRT 0x00200000 225d2155f2fSWarner Losh #define SIS_IMR_SYSERR 0x00400000 226d2155f2fSWarner Losh #define SIS_IMR_PARITY_ERR 0x00800000 227d2155f2fSWarner Losh #define SIS_IMR_RX_RESET_DONE 0x01000000 228d2155f2fSWarner Losh #define SIS_IMR_TX_RESET_DONE 0x02000000 229d2155f2fSWarner Losh #define SIS_IMR_TX_PAUSE_START 0x04000000 230d2155f2fSWarner Losh #define SIS_IMR_TX_PAUSE_DONE 0x08000000 231d2155f2fSWarner Losh #define SIS_IMR_WAKE_EVENT 0x10000000 232d2155f2fSWarner Losh 233d2155f2fSWarner Losh #define SIS_INTRS \ 234d2155f2fSWarner Losh (SIS_IMR_RX_OFLOW|SIS_IMR_TX_UFLOW|SIS_IMR_TX_OK|\ 235d2155f2fSWarner Losh SIS_IMR_TX_IDLE|SIS_IMR_RX_OK|SIS_IMR_RX_ERR|\ 236d2155f2fSWarner Losh SIS_IMR_RX_IDLE|\ 237d2155f2fSWarner Losh SIS_IMR_SYSERR) 238d2155f2fSWarner Losh 239d2155f2fSWarner Losh #define SIS_IER_INTRENB 0x00000001 240d2155f2fSWarner Losh 241d2155f2fSWarner Losh #define SIS_PHYCTL_ACCESS 0x00000010 242d2155f2fSWarner Losh #define SIS_PHYCTL_OP 0x00000020 243d2155f2fSWarner Losh #define SIS_PHYCTL_REGADDR 0x000007C0 244d2155f2fSWarner Losh #define SIS_PHYCTL_PHYADDR 0x0000F800 245d2155f2fSWarner Losh #define SIS_PHYCTL_PHYDATA 0xFFFF0000 246d2155f2fSWarner Losh 247d2155f2fSWarner Losh #define SIS_PHYOP_READ 0x00000020 248d2155f2fSWarner Losh #define SIS_PHYOP_WRITE 0x00000000 249d2155f2fSWarner Losh 250d2155f2fSWarner Losh #define SIS_TXCFG_DRAIN_THRESH 0x0000003F /* 32-byte units */ 251d2155f2fSWarner Losh #define SIS_TXCFG_FILL_THRESH 0x00003F00 /* 32-byte units */ 252d2155f2fSWarner Losh #define SIS_TXCFG_DMABURST 0x00700000 253d2155f2fSWarner Losh #define SIS_TXCFG_AUTOPAD 0x10000000 254d2155f2fSWarner Losh #define SIS_TXCFG_LOOPBK 0x20000000 255d2155f2fSWarner Losh #define SIS_TXCFG_IGN_HBEAT 0x40000000 256d2155f2fSWarner Losh #define SIS_TXCFG_IGN_CARR 0x80000000 257d2155f2fSWarner Losh 258d2155f2fSWarner Losh #define SIS_TXCFG_DRAIN(x) (((x) >> 5) & SIS_TXCFG_DRAIN_THRESH) 259d2155f2fSWarner Losh #define SIS_TXCFG_FILL(x) ((((x) >> 5) << 8) & SIS_TXCFG_FILL_THRESH) 260d2155f2fSWarner Losh 261d2155f2fSWarner Losh #define SIS_TXDMA_512BYTES 0x00000000 262d2155f2fSWarner Losh #define SIS_TXDMA_4BYTES 0x00100000 263d2155f2fSWarner Losh #define SIS_TXDMA_8BYTES 0x00200000 264d2155f2fSWarner Losh #define SIS_TXDMA_16BYTES 0x00300000 265d2155f2fSWarner Losh #define SIS_TXDMA_32BYTES 0x00400000 266d2155f2fSWarner Losh #define SIS_TXDMA_64BYTES 0x00500000 267d2155f2fSWarner Losh #define SIS_TXDMA_128BYTES 0x00600000 268d2155f2fSWarner Losh #define SIS_TXDMA_256BYTES 0x00700000 269d2155f2fSWarner Losh 270d2155f2fSWarner Losh #define SIS_TXCFG_100 \ 271d2155f2fSWarner Losh (SIS_TXDMA_64BYTES|SIS_TXCFG_AUTOPAD|\ 272d2155f2fSWarner Losh SIS_TXCFG_FILL(64)|SIS_TXCFG_DRAIN(1536)) 273d2155f2fSWarner Losh 274d2155f2fSWarner Losh #define SIS_TXCFG_10 \ 275d2155f2fSWarner Losh (SIS_TXDMA_32BYTES|SIS_TXCFG_AUTOPAD|\ 276d2155f2fSWarner Losh SIS_TXCFG_FILL(64)|SIS_TXCFG_DRAIN(1536)) 277d2155f2fSWarner Losh 278d2155f2fSWarner Losh #define SIS_RXCFG_DRAIN_THRESH 0x0000003E /* 8-byte units */ 279d2155f2fSWarner Losh #define SIS_TXCFG_MPII03D 0x00040000 /* "Must be 1" */ 280d2155f2fSWarner Losh #define SIS_RXCFG_DMABURST 0x00700000 281d2155f2fSWarner Losh #define SIS_RXCFG_RX_JABBER 0x08000000 282d2155f2fSWarner Losh #define SIS_RXCFG_RX_TXPKTS 0x10000000 283d2155f2fSWarner Losh #define SIS_RXCFG_RX_RUNTS 0x40000000 284d2155f2fSWarner Losh #define SIS_RXCFG_RX_GIANTS 0x80000000 285d2155f2fSWarner Losh 286d2155f2fSWarner Losh #define SIS_RXCFG_DRAIN(x) ((((x) >> 3) << 1) & SIS_RXCFG_DRAIN_THRESH) 287d2155f2fSWarner Losh 288d2155f2fSWarner Losh #define SIS_RXDMA_512BYTES 0x00000000 289d2155f2fSWarner Losh #define SIS_RXDMA_4BYTES 0x00100000 290d2155f2fSWarner Losh #define SIS_RXDMA_8BYTES 0x00200000 291d2155f2fSWarner Losh #define SIS_RXDMA_16BYTES 0x00300000 292d2155f2fSWarner Losh #define SIS_RXDMA_32BYTES 0x00400000 293d2155f2fSWarner Losh #define SIS_RXDMA_64BYTES 0x00500000 294d2155f2fSWarner Losh #define SIS_RXDMA_128BYTES 0x00600000 295d2155f2fSWarner Losh #define SIS_RXDMA_256BYTES 0x00700000 296d2155f2fSWarner Losh 297d2155f2fSWarner Losh #define SIS_RXCFG256 \ 298d2155f2fSWarner Losh (SIS_RXCFG_DRAIN(64)|SIS_RXDMA_256BYTES) 299d2155f2fSWarner Losh #define SIS_RXCFG64 \ 300d2155f2fSWarner Losh (SIS_RXCFG_DRAIN(64)|SIS_RXDMA_64BYTES) 301d2155f2fSWarner Losh 302d2155f2fSWarner Losh #define SIS_RXFILTCTL_ADDR 0x000F0000 303d2155f2fSWarner Losh #define NS_RXFILTCTL_MCHASH 0x00200000 304d2155f2fSWarner Losh #define NS_RXFILTCTL_ARP 0x00400000 305d2155f2fSWarner Losh #define NS_RXFILTCTL_PERFECT 0x08000000 306d2155f2fSWarner Losh #define SIS_RXFILTCTL_ALLPHYS 0x10000000 307d2155f2fSWarner Losh #define SIS_RXFILTCTL_ALLMULTI 0x20000000 308d2155f2fSWarner Losh #define SIS_RXFILTCTL_BROAD 0x40000000 309d2155f2fSWarner Losh #define SIS_RXFILTCTL_ENABLE 0x80000000 310d2155f2fSWarner Losh 311d2155f2fSWarner Losh #define SIS_FILTADDR_PAR0 0x00000000 312d2155f2fSWarner Losh #define SIS_FILTADDR_PAR1 0x00010000 313d2155f2fSWarner Losh #define SIS_FILTADDR_PAR2 0x00020000 314d2155f2fSWarner Losh #define SIS_FILTADDR_MAR0 0x00040000 315d2155f2fSWarner Losh #define SIS_FILTADDR_MAR1 0x00050000 316d2155f2fSWarner Losh #define SIS_FILTADDR_MAR2 0x00060000 317d2155f2fSWarner Losh #define SIS_FILTADDR_MAR3 0x00070000 318d2155f2fSWarner Losh #define SIS_FILTADDR_MAR4 0x00080000 319d2155f2fSWarner Losh #define SIS_FILTADDR_MAR5 0x00090000 320d2155f2fSWarner Losh #define SIS_FILTADDR_MAR6 0x000A0000 321d2155f2fSWarner Losh #define SIS_FILTADDR_MAR7 0x000B0000 322d2155f2fSWarner Losh 323d2155f2fSWarner Losh #define NS_FILTADDR_PAR0 0x00000000 324d2155f2fSWarner Losh #define NS_FILTADDR_PAR1 0x00000002 325d2155f2fSWarner Losh #define NS_FILTADDR_PAR2 0x00000004 326d2155f2fSWarner Losh 327d2155f2fSWarner Losh #define NS_FILTADDR_FMEM_LO 0x00000200 328d2155f2fSWarner Losh #define NS_FILTADDR_FMEM_HI 0x000003FE 329d2155f2fSWarner Losh 3300af3989bSPyun YongHyeon #define SIS_PWRMAN_WOL_LINK_OFF 0x00000001 3310af3989bSPyun YongHyeon #define SIS_PWRMAN_WOL_LINK_ON 0x00000002 3320af3989bSPyun YongHyeon #define SIS_PWRMAN_WOL_MAGIC 0x00000400 3330af3989bSPyun YongHyeon 334d2155f2fSWarner Losh /* 335a629f2b1SPyun YongHyeon * TX/RX DMA descriptor structures. 336d2155f2fSWarner Losh */ 337d2155f2fSWarner Losh struct sis_desc { 338d2155f2fSWarner Losh /* SiS hardware descriptor section */ 33991c265b8SPyun YongHyeon uint32_t sis_next; 3405ed8e782SPyun YongHyeon volatile uint32_t sis_cmdsts; 3415ed8e782SPyun YongHyeon volatile uint32_t sis_ptr; 342d2155f2fSWarner Losh }; 343d2155f2fSWarner Losh 344d2155f2fSWarner Losh #define SIS_CMDSTS_BUFLEN 0x00000FFF 345d2155f2fSWarner Losh #define SIS_CMDSTS_PKT_OK 0x08000000 346d2155f2fSWarner Losh #define SIS_CMDSTS_CRC 0x10000000 347d2155f2fSWarner Losh #define SIS_CMDSTS_INTR 0x20000000 348d2155f2fSWarner Losh #define SIS_CMDSTS_MORE 0x40000000 349d2155f2fSWarner Losh #define SIS_CMDSTS_OWN 0x80000000 350d2155f2fSWarner Losh 351d2155f2fSWarner Losh #define SIS_RXSTAT_COLL 0x00010000 352d2155f2fSWarner Losh #define SIS_RXSTAT_LOOPBK 0x00020000 353d2155f2fSWarner Losh #define SIS_RXSTAT_ALIGNERR 0x00040000 354d2155f2fSWarner Losh #define SIS_RXSTAT_CRCERR 0x00080000 355d2155f2fSWarner Losh #define SIS_RXSTAT_SYMBOLERR 0x00100000 356d2155f2fSWarner Losh #define SIS_RXSTAT_RUNT 0x00200000 357d2155f2fSWarner Losh #define SIS_RXSTAT_GIANT 0x00400000 358d2155f2fSWarner Losh #define SIS_RXSTAT_DSTCLASS 0x01800000 359d2155f2fSWarner Losh #define SIS_RXSTAT_OVERRUN 0x02000000 360d2155f2fSWarner Losh #define SIS_RXSTAT_RX_ABORT 0x04000000 361d2155f2fSWarner Losh 36292483efaSPyun YongHyeon #define SIS_RXSTAT_ERROR(x) \ 36392483efaSPyun YongHyeon ((x) & (SIS_RXSTAT_RX_ABORT | SIS_RXSTAT_OVERRUN | \ 36492483efaSPyun YongHyeon SIS_RXSTAT_GIANT | SIS_RXSTAT_SYMBOLERR | SIS_RXSTAT_RUNT | \ 36592483efaSPyun YongHyeon SIS_RXSTAT_CRCERR | SIS_RXSTAT_ALIGNERR)) 36692483efaSPyun YongHyeon 367d2155f2fSWarner Losh #define SIS_DSTCLASS_REJECT 0x00000000 368d2155f2fSWarner Losh #define SIS_DSTCLASS_UNICAST 0x00800000 369d2155f2fSWarner Losh #define SIS_DSTCLASS_MULTICAST 0x01000000 370d2155f2fSWarner Losh #define SIS_DSTCLASS_BROADCAST 0x02000000 371d2155f2fSWarner Losh 372d2155f2fSWarner Losh #define SIS_TXSTAT_COLLCNT 0x000F0000 373d2155f2fSWarner Losh #define SIS_TXSTAT_EXCESSCOLLS 0x00100000 374d2155f2fSWarner Losh #define SIS_TXSTAT_OUTOFWINCOLL 0x00200000 375d2155f2fSWarner Losh #define SIS_TXSTAT_EXCESS_DEFER 0x00400000 376d2155f2fSWarner Losh #define SIS_TXSTAT_DEFERED 0x00800000 377d2155f2fSWarner Losh #define SIS_TXSTAT_CARR_LOST 0x01000000 378d2155f2fSWarner Losh #define SIS_TXSTAT_UNDERRUN 0x02000000 379d2155f2fSWarner Losh #define SIS_TXSTAT_TX_ABORT 0x04000000 380d2155f2fSWarner Losh 381a629f2b1SPyun YongHyeon #define SIS_DESC_ALIGN 16 382a629f2b1SPyun YongHyeon #define SIS_RX_BUF_ALIGN 4 383a629f2b1SPyun YongHyeon #define SIS_MAXTXSEGS 16 384d2155f2fSWarner Losh #define SIS_RX_LIST_CNT 64 385d2155f2fSWarner Losh #define SIS_TX_LIST_CNT 128 386d2155f2fSWarner Losh 387d2155f2fSWarner Losh #define SIS_RX_LIST_SZ SIS_RX_LIST_CNT * sizeof(struct sis_desc) 388d2155f2fSWarner Losh #define SIS_TX_LIST_SZ SIS_TX_LIST_CNT * sizeof(struct sis_desc) 389d2155f2fSWarner Losh 390a629f2b1SPyun YongHyeon #define SIS_ADDR_LO(x) ((uint64_t) (x) & 0xffffffff) 391a629f2b1SPyun YongHyeon #define SIS_ADDR_HI(x) ((uint64_t) (x) >> 32) 392a629f2b1SPyun YongHyeon 393a629f2b1SPyun YongHyeon #define SIS_RX_RING_ADDR(sc, i) \ 394a629f2b1SPyun YongHyeon ((sc)->sis_rx_paddr + sizeof(struct sis_desc) * (i)) 395a629f2b1SPyun YongHyeon #define SIS_TX_RING_ADDR(sc, i) \ 396a629f2b1SPyun YongHyeon ((sc)->sis_tx_paddr + sizeof(struct sis_desc) * (i)) 397a629f2b1SPyun YongHyeon 398a629f2b1SPyun YongHyeon #define SIS_INC(x, y) (x) = (x + 1) % (y) 399a629f2b1SPyun YongHyeon 400d2155f2fSWarner Losh /* 401d2155f2fSWarner Losh * SiS PCI vendor ID. 402d2155f2fSWarner Losh */ 403d2155f2fSWarner Losh #define SIS_VENDORID 0x1039 404d2155f2fSWarner Losh 405d2155f2fSWarner Losh /* 406d2155f2fSWarner Losh * SiS PCI device IDs 407d2155f2fSWarner Losh */ 408d2155f2fSWarner Losh #define SIS_DEVICEID_900 0x0900 409d2155f2fSWarner Losh #define SIS_DEVICEID_7016 0x7016 410d2155f2fSWarner Losh 411d2155f2fSWarner Losh /* 412d2155f2fSWarner Losh * SiS 900 PCI revision codes. 413d2155f2fSWarner Losh */ 414d2155f2fSWarner Losh #define SIS_REV_900B 0x0003 415d2155f2fSWarner Losh #define SIS_REV_630A 0x0080 416d2155f2fSWarner Losh #define SIS_REV_630E 0x0081 417d2155f2fSWarner Losh #define SIS_REV_630S 0x0082 418d2155f2fSWarner Losh #define SIS_REV_630EA1 0x0083 419d2155f2fSWarner Losh #define SIS_REV_630ET 0x0084 420d2155f2fSWarner Losh #define SIS_REV_635 0x0090 421d2155f2fSWarner Losh #define SIS_REV_96x 0x0091 422d2155f2fSWarner Losh 423d2155f2fSWarner Losh /* 424d2155f2fSWarner Losh * NatSemi vendor ID 425d2155f2fSWarner Losh */ 426d2155f2fSWarner Losh #define NS_VENDORID 0x100B 427d2155f2fSWarner Losh 428d2155f2fSWarner Losh /* 429d2155f2fSWarner Losh * DP83815 device ID 430d2155f2fSWarner Losh */ 431d2155f2fSWarner Losh #define NS_DEVICEID_DP83815 0x0020 432d2155f2fSWarner Losh 433d2155f2fSWarner Losh struct sis_type { 43491c265b8SPyun YongHyeon uint16_t sis_vid; 43591c265b8SPyun YongHyeon uint16_t sis_did; 4368c1093fcSMarius Strobl const char *sis_name; 437d2155f2fSWarner Losh }; 438d2155f2fSWarner Losh 439d2155f2fSWarner Losh #define SIS_TYPE_900 1 440d2155f2fSWarner Losh #define SIS_TYPE_7016 2 441d2155f2fSWarner Losh #define SIS_TYPE_83815 3 442d2155f2fSWarner Losh 443a629f2b1SPyun YongHyeon struct sis_txdesc { 444a629f2b1SPyun YongHyeon struct mbuf *tx_m; 445a629f2b1SPyun YongHyeon bus_dmamap_t tx_dmamap; 446a629f2b1SPyun YongHyeon }; 447a629f2b1SPyun YongHyeon 448a629f2b1SPyun YongHyeon struct sis_rxdesc { 449a629f2b1SPyun YongHyeon struct mbuf *rx_m; 450a629f2b1SPyun YongHyeon bus_dmamap_t rx_dmamap; 451a629f2b1SPyun YongHyeon struct sis_desc *rx_desc; 452a629f2b1SPyun YongHyeon }; 453a629f2b1SPyun YongHyeon 454d2155f2fSWarner Losh struct sis_softc { 455*1125d093SJustin Hibbits if_t sis_ifp; /* interface info */ 456d2155f2fSWarner Losh struct resource *sis_res[2]; 457d2155f2fSWarner Losh void *sis_intrhand; 458d2155f2fSWarner Losh device_t sis_dev; 459d2155f2fSWarner Losh device_t sis_miibus; 46091c265b8SPyun YongHyeon uint8_t sis_type; 46191c265b8SPyun YongHyeon uint8_t sis_rev; 46294222398SPyun YongHyeon uint32_t sis_flags; 46394222398SPyun YongHyeon #define SIS_FLAG_MANUAL_PAD 0x0800 46494222398SPyun YongHyeon #define SIS_FLAG_LINK 0x8000 46594222398SPyun YongHyeon int sis_manual_pad; 46691c265b8SPyun YongHyeon uint32_t sis_srr; 467d2155f2fSWarner Losh struct sis_desc *sis_rx_list; 468d2155f2fSWarner Losh struct sis_desc *sis_tx_list; 469a629f2b1SPyun YongHyeon bus_dma_tag_t sis_rx_list_tag; 470a629f2b1SPyun YongHyeon bus_dmamap_t sis_rx_list_map; 471a629f2b1SPyun YongHyeon bus_dma_tag_t sis_tx_list_tag; 472a629f2b1SPyun YongHyeon bus_dmamap_t sis_tx_list_map; 473d2155f2fSWarner Losh bus_dma_tag_t sis_parent_tag; 474a629f2b1SPyun YongHyeon bus_dma_tag_t sis_rx_tag; 475a629f2b1SPyun YongHyeon bus_dmamap_t sis_rx_sparemap; 476a629f2b1SPyun YongHyeon bus_dma_tag_t sis_tx_tag; 477a629f2b1SPyun YongHyeon struct sis_rxdesc sis_rxdesc[SIS_RX_LIST_CNT]; 478a629f2b1SPyun YongHyeon struct sis_txdesc sis_txdesc[SIS_TX_LIST_CNT]; 479d2155f2fSWarner Losh int sis_tx_prod; 480d2155f2fSWarner Losh int sis_tx_cons; 481d2155f2fSWarner Losh int sis_tx_cnt; 4827df9d5acSKevin Lo int sis_rx_cons; 483a629f2b1SPyun YongHyeon bus_addr_t sis_rx_paddr; 484a629f2b1SPyun YongHyeon bus_addr_t sis_tx_paddr; 485d2155f2fSWarner Losh struct callout sis_stat_ch; 486d2155f2fSWarner Losh int sis_watchdog_timer; 487ae9e8d49SPyun YongHyeon int sis_if_flags; 488d2155f2fSWarner Losh #ifdef DEVICE_POLLING 489d2155f2fSWarner Losh int rxcycles; 490d2155f2fSWarner Losh #endif 491d2155f2fSWarner Losh struct mtx sis_mtx; 492d2155f2fSWarner Losh }; 493d2155f2fSWarner Losh 494d2155f2fSWarner Losh #define SIS_TIMEOUT 1000 495d2155f2fSWarner Losh #define ETHER_ALIGN 2 496d2155f2fSWarner Losh #define SIS_RXLEN 1536 497d2155f2fSWarner Losh #define SIS_MIN_FRAMELEN 60 498d2155f2fSWarner Losh 499d2155f2fSWarner Losh /* 500d2155f2fSWarner Losh * PCI low memory base and low I/O base register, and 501d2155f2fSWarner Losh * other PCI registers. 502d2155f2fSWarner Losh */ 503d2155f2fSWarner Losh 504d2155f2fSWarner Losh #define SIS_PCI_VENDOR_ID 0x00 505d2155f2fSWarner Losh #define SIS_PCI_DEVICE_ID 0x02 506d2155f2fSWarner Losh #define SIS_PCI_COMMAND 0x04 507d2155f2fSWarner Losh #define SIS_PCI_STATUS 0x06 508d2155f2fSWarner Losh #define SIS_PCI_REVID 0x08 509d2155f2fSWarner Losh #define SIS_PCI_CLASSCODE 0x09 510d2155f2fSWarner Losh #define SIS_PCI_CACHELEN 0x0C 511d2155f2fSWarner Losh #define SIS_PCI_LATENCY_TIMER 0x0D 512d2155f2fSWarner Losh #define SIS_PCI_HEADER_TYPE 0x0E 513d2155f2fSWarner Losh #define SIS_PCI_LOIO 0x10 514d2155f2fSWarner Losh #define SIS_PCI_LOMEM 0x14 515d2155f2fSWarner Losh #define SIS_PCI_BIOSROM 0x30 516d2155f2fSWarner Losh #define SIS_PCI_INTLINE 0x3C 517d2155f2fSWarner Losh #define SIS_PCI_INTPIN 0x3D 518d2155f2fSWarner Losh #define SIS_PCI_MINGNT 0x3E 519d2155f2fSWarner Losh #define SIS_PCI_MINLAT 0x0F 520d2155f2fSWarner Losh #define SIS_PCI_RESETOPT 0x48 521d2155f2fSWarner Losh #define SIS_PCI_EEPROM_DATA 0x4C 522d2155f2fSWarner Losh 523d2155f2fSWarner Losh /* power management registers */ 524d2155f2fSWarner Losh #define SIS_PCI_CAPID 0x50 /* 8 bits */ 525d2155f2fSWarner Losh #define SIS_PCI_NEXTPTR 0x51 /* 8 bits */ 526d2155f2fSWarner Losh #define SIS_PCI_PWRMGMTCAP 0x52 /* 16 bits */ 527d2155f2fSWarner Losh #define SIS_PCI_PWRMGMTCTRL 0x54 /* 16 bits */ 528d2155f2fSWarner Losh 529d2155f2fSWarner Losh #define SIS_PSTATE_MASK 0x0003 530d2155f2fSWarner Losh #define SIS_PSTATE_D0 0x0000 531d2155f2fSWarner Losh #define SIS_PSTATE_D1 0x0001 532d2155f2fSWarner Losh #define SIS_PSTATE_D2 0x0002 533d2155f2fSWarner Losh #define SIS_PSTATE_D3 0x0003 534d2155f2fSWarner Losh #define SIS_PME_EN 0x0010 535d2155f2fSWarner Losh #define SIS_PME_STATUS 0x8000 536