176fbb0b9SSepherosa Ziehau /*- 276fbb0b9SSepherosa Ziehau * Copyright (c) 2008, Pyun YongHyeon <yongari@FreeBSD.org> 376fbb0b9SSepherosa Ziehau * All rights reserved. 476fbb0b9SSepherosa Ziehau * 576fbb0b9SSepherosa Ziehau * Redistribution and use in source and binary forms, with or without 676fbb0b9SSepherosa Ziehau * modification, are permitted provided that the following conditions 776fbb0b9SSepherosa Ziehau * are met: 876fbb0b9SSepherosa Ziehau * 1. Redistributions of source code must retain the above copyright 976fbb0b9SSepherosa Ziehau * notice unmodified, this list of conditions, and the following 1076fbb0b9SSepherosa Ziehau * disclaimer. 1176fbb0b9SSepherosa Ziehau * 2. Redistributions in binary form must reproduce the above copyright 1276fbb0b9SSepherosa Ziehau * notice, this list of conditions and the following disclaimer in the 1376fbb0b9SSepherosa Ziehau * documentation and/or other materials provided with the distribution. 1476fbb0b9SSepherosa Ziehau * 1576fbb0b9SSepherosa Ziehau * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1676fbb0b9SSepherosa Ziehau * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1776fbb0b9SSepherosa Ziehau * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1876fbb0b9SSepherosa Ziehau * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1976fbb0b9SSepherosa Ziehau * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2076fbb0b9SSepherosa Ziehau * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2176fbb0b9SSepherosa Ziehau * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2276fbb0b9SSepherosa Ziehau * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2376fbb0b9SSepherosa Ziehau * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2476fbb0b9SSepherosa Ziehau * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2576fbb0b9SSepherosa Ziehau * SUCH DAMAGE. 2676fbb0b9SSepherosa Ziehau * 2776fbb0b9SSepherosa Ziehau * $FreeBSD: src/sys/dev/jme/if_jmereg.h,v 1.1 2008/05/27 01:42:01 yongari Exp $ 28b249905bSSepherosa Ziehau * $DragonFly: src/sys/dev/netif/jme/if_jmereg.h,v 1.6 2008/11/26 11:55:18 sephe Exp $ 2976fbb0b9SSepherosa Ziehau */ 3076fbb0b9SSepherosa Ziehau 3176fbb0b9SSepherosa Ziehau #ifndef _IF_JMEREG_H 3276fbb0b9SSepherosa Ziehau #define _IF_JMEREG_H 3376fbb0b9SSepherosa Ziehau 34b249905bSSepherosa Ziehau /* FM/ECO revision. FM revision is in the upper 4bits. */ 35b249905bSSepherosa Ziehau #define JME_REV1_A1 0x10 36b249905bSSepherosa Ziehau #define JME_REV1_A2 0x11 /* JMC250A2 */ 37b249905bSSepherosa Ziehau #define JME_REV2 0x20 38*352c8444SSepherosa Ziehau #define JME_REV2_2 0x22 39*352c8444SSepherosa Ziehau #define JME_REV3_1 0x31 40*352c8444SSepherosa Ziehau #define JME_REV3_2 0x32 41409fe405SSepherosa Ziehau #define JME_REV5 0x50 42*352c8444SSepherosa Ziehau #define JME_REV5_1 0x51 43*352c8444SSepherosa Ziehau #define JME_REV5_3 0x53 44*352c8444SSepherosa Ziehau #define JME_REV6 0x60 4508c76ecfSSepherosa Ziehau 4676fbb0b9SSepherosa Ziehau /* JMC250 PCI configuration register. */ 4776fbb0b9SSepherosa Ziehau #define JME_PCIR_BAR PCIR_BAR(0) 4876fbb0b9SSepherosa Ziehau 4976fbb0b9SSepherosa Ziehau #define JME_PCI_EROM 0x30 5076fbb0b9SSepherosa Ziehau 5176fbb0b9SSepherosa Ziehau #define JME_PCI_DBG 0x9C 5276fbb0b9SSepherosa Ziehau 5376fbb0b9SSepherosa Ziehau #define JME_PCI_SPI 0xB0 5476fbb0b9SSepherosa Ziehau 5576fbb0b9SSepherosa Ziehau #define SPI_ENB 0x00000010 5676fbb0b9SSepherosa Ziehau #define SPI_SO_STATUS 0x00000008 5776fbb0b9SSepherosa Ziehau #define SPI_SI_CTRL 0x00000004 5876fbb0b9SSepherosa Ziehau #define SPI_SCK_CTRL 0x00000002 5976fbb0b9SSepherosa Ziehau #define SPI_CS_N_CTRL 0x00000001 6076fbb0b9SSepherosa Ziehau 6176fbb0b9SSepherosa Ziehau #define JME_PCI_PHYCFG0 0xC0 6276fbb0b9SSepherosa Ziehau 6376fbb0b9SSepherosa Ziehau #define JME_PCI_PHYCFG1 0xC4 6476fbb0b9SSepherosa Ziehau 6576fbb0b9SSepherosa Ziehau #define JME_PCI_PHYCFG2 0xC8 6676fbb0b9SSepherosa Ziehau 6776fbb0b9SSepherosa Ziehau #define JME_PCI_PHYCFG3 0xCC 6876fbb0b9SSepherosa Ziehau 6976fbb0b9SSepherosa Ziehau #define JME_PCI_PIPECTL1 0xD0 7076fbb0b9SSepherosa Ziehau 7176fbb0b9SSepherosa Ziehau #define JME_PCI_PIPECTL2 0xD4 7276fbb0b9SSepherosa Ziehau 7376fbb0b9SSepherosa Ziehau /* PCIe link error/status. */ 7476fbb0b9SSepherosa Ziehau #define JME_PCI_LES 0xD8 7576fbb0b9SSepherosa Ziehau 7676fbb0b9SSepherosa Ziehau /* propeietary register 0. */ 7776fbb0b9SSepherosa Ziehau #define JME_PCI_PE0 0xE0 7876fbb0b9SSepherosa Ziehau #define PE0_SPI_EXIST 0x00200000 7976fbb0b9SSepherosa Ziehau #define PE0_PME_D0 0x00100000 8076fbb0b9SSepherosa Ziehau #define PE0_PME_D3H 0x00080000 8176fbb0b9SSepherosa Ziehau #define PE0_PME_SPI_PAD 0x00040000 8276fbb0b9SSepherosa Ziehau #define PE0_MASK_ASPM 0x00020000 8376fbb0b9SSepherosa Ziehau #define PE0_EEPROM_RW_DIS 0x00008000 8476fbb0b9SSepherosa Ziehau #define PE0_PCI_INTA 0x00001000 8576fbb0b9SSepherosa Ziehau #define PE0_PCI_INTB 0x00002000 8676fbb0b9SSepherosa Ziehau #define PE0_PCI_INTC 0x00003000 8776fbb0b9SSepherosa Ziehau #define PE0_PCI_INTD 0x00004000 8876fbb0b9SSepherosa Ziehau #define PE0_PCI_SVSSID_WR_ENB 0x00000800 8976fbb0b9SSepherosa Ziehau #define PE0_MSIX_SIZE_8 0x00000700 9076fbb0b9SSepherosa Ziehau #define PE0_MSIX_SIZE_7 0x00000600 9176fbb0b9SSepherosa Ziehau #define PE0_MSIX_SIZE_6 0x00000500 9276fbb0b9SSepherosa Ziehau #define PE0_MSIX_SIZE_5 0x00000400 9376fbb0b9SSepherosa Ziehau #define PE0_MSIX_SIZE_4 0x00000300 9476fbb0b9SSepherosa Ziehau #define PE0_MSIX_SIZE_3 0x00000200 9576fbb0b9SSepherosa Ziehau #define PE0_MSIX_SIZE_2 0x00000100 9676fbb0b9SSepherosa Ziehau #define PE0_MSIX_SIZE_1 0x00000000 9776fbb0b9SSepherosa Ziehau #define PE0_MSIX_SIZE_DEF 0x00000700 9876fbb0b9SSepherosa Ziehau #define PE0_MSIX_CAP_DIS 0x00000080 9976fbb0b9SSepherosa Ziehau #define PE0_MSI_PVMC_ENB 0x00000040 10076fbb0b9SSepherosa Ziehau #define PE0_LCAP_EXIT_LAT_MASK 0x00000038 10176fbb0b9SSepherosa Ziehau #define PE0_LCAP_EXIT_LAT_DEF 0x00000038 10276fbb0b9SSepherosa Ziehau #define PE0_PM_AUXC_MASK 0x00000007 10376fbb0b9SSepherosa Ziehau #define PE0_PM_AUXC_DEF 0x00000007 10476fbb0b9SSepherosa Ziehau 10576fbb0b9SSepherosa Ziehau #define JME_PCI_PE1 0xE4 106*352c8444SSepherosa Ziehau #define PE1_GPREG0_PHYBG 0x0000C000 107*352c8444SSepherosa Ziehau #define PE1_GPREG0_ENBG 0x00000000 108*352c8444SSepherosa Ziehau #define PE1_GPREG0_PDD3COLD 0x00004000 109*352c8444SSepherosa Ziehau 110*352c8444SSepherosa Ziehau #define JME_PCI_SSCTRL 0xF4 111*352c8444SSepherosa Ziehau #define SSCTRL_PHYMASK 0x30 112*352c8444SSepherosa Ziehau #define SSCTRL_PHYEA 0x20 11376fbb0b9SSepherosa Ziehau 11476fbb0b9SSepherosa Ziehau #define JME_PCI_PHYTEST 0xF8 11576fbb0b9SSepherosa Ziehau 11676fbb0b9SSepherosa Ziehau #define JME_PCI_GPR 0xFC 11776fbb0b9SSepherosa Ziehau 11876fbb0b9SSepherosa Ziehau /* 11976fbb0b9SSepherosa Ziehau * JMC Register Map. 12076fbb0b9SSepherosa Ziehau * ----------------------------------------------------------------------- 12176fbb0b9SSepherosa Ziehau * Register Size IO space Memory space 12276fbb0b9SSepherosa Ziehau * ----------------------------------------------------------------------- 12376fbb0b9SSepherosa Ziehau * Tx/Rx MAC registers 128 bytes BAR1 + 0x00 ~ BAR0 + 0x00 ~ 12476fbb0b9SSepherosa Ziehau * BAR1 + 0x7F BAR0 + 0x7F 12576fbb0b9SSepherosa Ziehau * ----------------------------------------------------------------------- 12676fbb0b9SSepherosa Ziehau * PHY registers 128 bytes BAR2 + 0x00 ~ BAR0 + 0x400 ~ 12776fbb0b9SSepherosa Ziehau * BAR2 + 0x7F BAR0 + 0x47F 12876fbb0b9SSepherosa Ziehau * ----------------------------------------------------------------------- 12976fbb0b9SSepherosa Ziehau * Misc registers 128 bytes BAR2 + 0x80 ~ BAR0 + 0x800 ~ 13076fbb0b9SSepherosa Ziehau * BAR2 + 0x7F BAR0 + 0x87F 13176fbb0b9SSepherosa Ziehau * ----------------------------------------------------------------------- 13276fbb0b9SSepherosa Ziehau * To simplify register access fuctions and to get better performance 13376fbb0b9SSepherosa Ziehau * this driver doesn't support IO space access. It could be implemented 13476fbb0b9SSepherosa Ziehau * as a function which selects appropriate BARs to access requested 13576fbb0b9SSepherosa Ziehau * register. 13676fbb0b9SSepherosa Ziehau */ 13776fbb0b9SSepherosa Ziehau 13876fbb0b9SSepherosa Ziehau /* Tx control and status. */ 13976fbb0b9SSepherosa Ziehau #define JME_TXCSR 0x0000 14076fbb0b9SSepherosa Ziehau #define TXCSR_QWEIGHT_MASK 0x0F000000 14176fbb0b9SSepherosa Ziehau #define TXCSR_QWEIGHT_SHIFT 24 14276fbb0b9SSepherosa Ziehau #define TXCSR_TXQ_SEL_MASK 0x00070000 14376fbb0b9SSepherosa Ziehau #define TXCSR_TXQ_SEL_SHIFT 16 14476fbb0b9SSepherosa Ziehau #define TXCSR_TXQ_START 0x00000001 14576fbb0b9SSepherosa Ziehau #define TXCSR_TXQ_START_SHIFT 8 14676fbb0b9SSepherosa Ziehau #define TXCSR_FIFO_THRESH_4QW 0x00000000 14776fbb0b9SSepherosa Ziehau #define TXCSR_FIFO_THRESH_8QW 0x00000040 14876fbb0b9SSepherosa Ziehau #define TXCSR_FIFO_THRESH_12QW 0x00000080 14976fbb0b9SSepherosa Ziehau #define TXCSR_FIFO_THRESH_16QW 0x000000C0 15076fbb0b9SSepherosa Ziehau #define TXCSR_DMA_SIZE_64 0x00000000 15176fbb0b9SSepherosa Ziehau #define TXCSR_DMA_SIZE_128 0x00000010 15276fbb0b9SSepherosa Ziehau #define TXCSR_DMA_SIZE_256 0x00000020 15376fbb0b9SSepherosa Ziehau #define TXCSR_DMA_SIZE_512 0x00000030 15476fbb0b9SSepherosa Ziehau #define TXCSR_DMA_BURST 0x00000004 15576fbb0b9SSepherosa Ziehau #define TXCSR_TX_SUSPEND 0x00000002 15676fbb0b9SSepherosa Ziehau #define TXCSR_TX_ENB 0x00000001 15776fbb0b9SSepherosa Ziehau #define TXCSR_TXQ0 0 15876fbb0b9SSepherosa Ziehau #define TXCSR_TXQ1 1 15976fbb0b9SSepherosa Ziehau #define TXCSR_TXQ2 2 16076fbb0b9SSepherosa Ziehau #define TXCSR_TXQ3 3 16176fbb0b9SSepherosa Ziehau #define TXCSR_TXQ4 4 16276fbb0b9SSepherosa Ziehau #define TXCSR_TXQ5 5 16376fbb0b9SSepherosa Ziehau #define TXCSR_TXQ6 6 16476fbb0b9SSepherosa Ziehau #define TXCSR_TXQ7 7 16576fbb0b9SSepherosa Ziehau #define TXCSR_TXQ_WEIGHT(x) \ 16676fbb0b9SSepherosa Ziehau (((x) << TXCSR_QWEIGHT_SHIFT) & TXCSR_QWEIGHT_MASK) 16776fbb0b9SSepherosa Ziehau #define TXCSR_TXQ_WEIGHT_MIN 0 16876fbb0b9SSepherosa Ziehau #define TXCSR_TXQ_WEIGHT_MAX 15 16976fbb0b9SSepherosa Ziehau #define TXCSR_TXQ_N_SEL(x) \ 17076fbb0b9SSepherosa Ziehau (((x) << TXCSR_TXQ_SEL_SHIFT) & TXCSR_TXQ_SEL_MASK) 17176fbb0b9SSepherosa Ziehau #define TXCSR_TXQ_N_START(x) \ 17276fbb0b9SSepherosa Ziehau (TXCSR_TXQ_START << (TXCSR_TXQ_START_SHIFT + (x))) 17376fbb0b9SSepherosa Ziehau 17476fbb0b9SSepherosa Ziehau /* Tx queue descriptor base address. 16bytes alignment required. */ 17576fbb0b9SSepherosa Ziehau #define JME_TXDBA_LO 0x0004 17676fbb0b9SSepherosa Ziehau #define JME_TXDBA_HI 0x0008 17776fbb0b9SSepherosa Ziehau 17876fbb0b9SSepherosa Ziehau /* Tx queue descriptor count. multiple of 16(max = 1024). */ 17976fbb0b9SSepherosa Ziehau #define JME_TXQDC 0x000C 18076fbb0b9SSepherosa Ziehau #define TXQDC_MASK 0x0000007F0 18176fbb0b9SSepherosa Ziehau 18276fbb0b9SSepherosa Ziehau /* Tx queue next descriptor address. */ 18376fbb0b9SSepherosa Ziehau #define JME_TXNDA 0x0010 18476fbb0b9SSepherosa Ziehau #define TXNDA_ADDR_MASK 0xFFFFFFF0 18576fbb0b9SSepherosa Ziehau #define TXNDA_DESC_EMPTY 0x00000008 18676fbb0b9SSepherosa Ziehau #define TXNDA_DESC_VALID 0x00000004 18776fbb0b9SSepherosa Ziehau #define TXNDA_DESC_WAIT 0x00000002 18876fbb0b9SSepherosa Ziehau #define TXNDA_DESC_FETCH 0x00000001 18976fbb0b9SSepherosa Ziehau 19076fbb0b9SSepherosa Ziehau /* Tx MAC control ans status. */ 19176fbb0b9SSepherosa Ziehau #define JME_TXMAC 0x0014 19276fbb0b9SSepherosa Ziehau #define TXMAC_IFG2_MASK 0xC0000000 19376fbb0b9SSepherosa Ziehau #define TXMAC_IFG2_DEFAULT 0x40000000 19476fbb0b9SSepherosa Ziehau #define TXMAC_IFG1_MASK 0x30000000 19576fbb0b9SSepherosa Ziehau #define TXMAC_IFG1_DEFAULT 0x20000000 19676fbb0b9SSepherosa Ziehau #define TXMAC_THRESH_1_PKT 0x00000300 19776fbb0b9SSepherosa Ziehau #define TXMAC_THRESH_1_2_PKT 0x00000200 19876fbb0b9SSepherosa Ziehau #define TXMAC_THRESH_1_4_PKT 0x00000100 19976fbb0b9SSepherosa Ziehau #define TXMAC_THRESH_1_8_PKT 0x00000000 20076fbb0b9SSepherosa Ziehau #define TXMAC_FRAME_BURST 0x00000080 20176fbb0b9SSepherosa Ziehau #define TXMAC_CARRIER_EXT 0x00000040 20276fbb0b9SSepherosa Ziehau #define TXMAC_IFG_ENB 0x00000020 20376fbb0b9SSepherosa Ziehau #define TXMAC_BACKOFF 0x00000010 20476fbb0b9SSepherosa Ziehau #define TXMAC_CARRIER_SENSE 0x00000008 20576fbb0b9SSepherosa Ziehau #define TXMAC_COLL_ENB 0x00000004 20676fbb0b9SSepherosa Ziehau #define TXMAC_CRC_ENB 0x00000002 20776fbb0b9SSepherosa Ziehau #define TXMAC_PAD_ENB 0x00000001 20876fbb0b9SSepherosa Ziehau 20976fbb0b9SSepherosa Ziehau /* Tx pause frame control. */ 21076fbb0b9SSepherosa Ziehau #define JME_TXPFC 0x0018 21176fbb0b9SSepherosa Ziehau #define TXPFC_VLAN_TAG_MASK 0xFFFF0000 21276fbb0b9SSepherosa Ziehau #define TXPFC_VLAN_TAG_SHIFT 16 21376fbb0b9SSepherosa Ziehau #define TXPFC_VLAN_ENB 0x00008000 21476fbb0b9SSepherosa Ziehau #define TXPFC_PAUSE_ENB 0x00000001 21576fbb0b9SSepherosa Ziehau 21676fbb0b9SSepherosa Ziehau /* Tx timer/retry at half duplex. */ 21776fbb0b9SSepherosa Ziehau #define JME_TXTRHD 0x001C 21876fbb0b9SSepherosa Ziehau #define TXTRHD_RT_PERIOD_ENB 0x80000000 21976fbb0b9SSepherosa Ziehau #define TXTRHD_RT_PERIOD_MASK 0x7FFFFF00 22076fbb0b9SSepherosa Ziehau #define TXTRHD_RT_PERIOD_SHIFT 8 22176fbb0b9SSepherosa Ziehau #define TXTRHD_RT_LIMIT_ENB 0x00000080 22276fbb0b9SSepherosa Ziehau #define TXTRHD_RT_LIMIT_MASK 0x0000007F 22376fbb0b9SSepherosa Ziehau #define TXTRHD_RT_LIMIT_SHIFT 0 22476fbb0b9SSepherosa Ziehau #define TXTRHD_RT_PERIOD_DEFAULT 8192 22576fbb0b9SSepherosa Ziehau #define TXTRHD_RT_LIMIT_DEFAULT 8 22676fbb0b9SSepherosa Ziehau 22776fbb0b9SSepherosa Ziehau /* Rx control & status. */ 22876fbb0b9SSepherosa Ziehau #define JME_RXCSR 0x0020 22976fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_FTHRESH_16T 0x00000000 23076fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_FTHRESH_32T 0x10000000 23176fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_FTHRESH_64T 0x20000000 23276fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_FTHRESH_128T 0x30000000 23376fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_FTHRESH_MASK 0x30000000 23476fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_THRESH_16QW 0x00000000 23576fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_THRESH_32QW 0x04000000 23676fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_THRESH_64QW 0x08000000 23776fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_THRESH_128QW 0x0C000000 23876fbb0b9SSepherosa Ziehau #define RXCSR_FIFO_THRESH_MASK 0x0C000000 23976fbb0b9SSepherosa Ziehau #define RXCSR_DMA_SIZE_16 0x00000000 24076fbb0b9SSepherosa Ziehau #define RXCSR_DMA_SIZE_32 0x01000000 24176fbb0b9SSepherosa Ziehau #define RXCSR_DMA_SIZE_64 0x02000000 24276fbb0b9SSepherosa Ziehau #define RXCSR_DMA_SIZE_128 0x03000000 24376fbb0b9SSepherosa Ziehau #define RXCSR_RXQ_SEL_MASK 0x00030000 24476fbb0b9SSepherosa Ziehau #define RXCSR_RXQ_SEL_SHIFT 16 24576fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_MASK 0x0000F000 24676fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_SHIFT 12 24776fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_256 0x00000000 24876fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_512 0x00001000 24976fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_1024 0x00002000 25076fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_2048 0x00003000 25176fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_4096 0x00004000 25276fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_8192 0x00005000 25376fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_16384 0x00006000 25476fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_GAP_32768 0x00007000 25576fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_CNT_MASK 0x00000F00 25676fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_CNT_SHIFT 8 25776fbb0b9SSepherosa Ziehau #define RXCSR_PASS_WAKEUP_PKT 0x00000040 25876fbb0b9SSepherosa Ziehau #define RXCSR_PASS_MAGIC_PKT 0x00000020 25976fbb0b9SSepherosa Ziehau #define RXCSR_PASS_RUNT_PKT 0x00000010 26076fbb0b9SSepherosa Ziehau #define RXCSR_PASS_BAD_PKT 0x00000008 26176fbb0b9SSepherosa Ziehau #define RXCSR_RXQ_START 0x00000004 26276fbb0b9SSepherosa Ziehau #define RXCSR_RX_SUSPEND 0x00000002 26376fbb0b9SSepherosa Ziehau #define RXCSR_RX_ENB 0x00000001 26476fbb0b9SSepherosa Ziehau 26576fbb0b9SSepherosa Ziehau #define RXCSR_RXQ_N_SEL(x) ((x) << RXCSR_RXQ_SEL_SHIFT) 26676fbb0b9SSepherosa Ziehau #define RXCSR_RXQ0 0 26776fbb0b9SSepherosa Ziehau #define RXCSR_RXQ1 1 26876fbb0b9SSepherosa Ziehau #define RXCSR_RXQ2 2 26976fbb0b9SSepherosa Ziehau #define RXCSR_RXQ3 3 27076fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_CNT(x) \ 27176fbb0b9SSepherosa Ziehau ((((x) / 4) << RXCSR_DESC_RT_CNT_SHIFT) & RXCSR_DESC_RT_CNT_MASK) 27276fbb0b9SSepherosa Ziehau #define RXCSR_DESC_RT_CNT_DEFAULT 32 27376fbb0b9SSepherosa Ziehau 27476fbb0b9SSepherosa Ziehau /* Rx queue descriptor base address. 16bytes alignment needed. */ 27576fbb0b9SSepherosa Ziehau #define JME_RXDBA_LO 0x0024 27676fbb0b9SSepherosa Ziehau #define JME_RXDBA_HI 0x0028 27776fbb0b9SSepherosa Ziehau 27876fbb0b9SSepherosa Ziehau /* Rx queue descriptor count. multiple of 16(max = 1024). */ 27976fbb0b9SSepherosa Ziehau #define JME_RXQDC 0x002C 28076fbb0b9SSepherosa Ziehau #define RXQDC_MASK 0x0000007F0 28176fbb0b9SSepherosa Ziehau 28276fbb0b9SSepherosa Ziehau /* Rx queue next descriptor address. */ 28376fbb0b9SSepherosa Ziehau #define JME_RXNDA 0x0030 28476fbb0b9SSepherosa Ziehau #define RXNDA_ADDR_MASK 0xFFFFFFF0 28576fbb0b9SSepherosa Ziehau #define RXNDA_DESC_EMPTY 0x00000008 28676fbb0b9SSepherosa Ziehau #define RXNDA_DESC_VALID 0x00000004 28776fbb0b9SSepherosa Ziehau #define RXNDA_DESC_WAIT 0x00000002 28876fbb0b9SSepherosa Ziehau #define RXNDA_DESC_FETCH 0x00000001 28976fbb0b9SSepherosa Ziehau 29076fbb0b9SSepherosa Ziehau /* Rx MAC control and status. */ 29176fbb0b9SSepherosa Ziehau #define JME_RXMAC 0x0034 29276fbb0b9SSepherosa Ziehau #define RXMAC_RSS_UNICAST 0x00000000 29376fbb0b9SSepherosa Ziehau #define RXMAC_RSS_UNI_MULTICAST 0x00010000 29476fbb0b9SSepherosa Ziehau #define RXMAC_RSS_UNI_MULTI_BROADCAST 0x00020000 29576fbb0b9SSepherosa Ziehau #define RXMAC_RSS_ALLFRAME 0x00030000 29676fbb0b9SSepherosa Ziehau #define RXMAC_PROMISC 0x00000800 29776fbb0b9SSepherosa Ziehau #define RXMAC_BROADCAST 0x00000400 29876fbb0b9SSepherosa Ziehau #define RXMAC_MULTICAST 0x00000200 29976fbb0b9SSepherosa Ziehau #define RXMAC_UNICAST 0x00000100 30076fbb0b9SSepherosa Ziehau #define RXMAC_ALLMULTI 0x00000080 30176fbb0b9SSepherosa Ziehau #define RXMAC_MULTICAST_FILTER 0x00000040 30276fbb0b9SSepherosa Ziehau #define RXMAC_COLL_DET_ENB 0x00000020 30376fbb0b9SSepherosa Ziehau #define RXMAC_FC_ENB 0x00000008 30476fbb0b9SSepherosa Ziehau #define RXMAC_VLAN_ENB 0x00000004 30576fbb0b9SSepherosa Ziehau #define RXMAC_PAD_10BYTES 0x00000002 30676fbb0b9SSepherosa Ziehau #define RXMAC_CSUM_ENB 0x00000001 30776fbb0b9SSepherosa Ziehau 30876fbb0b9SSepherosa Ziehau /* Rx unicast MAC address. */ 30976fbb0b9SSepherosa Ziehau #define JME_PAR0 0x0038 31076fbb0b9SSepherosa Ziehau #define JME_PAR1 0x003C 31176fbb0b9SSepherosa Ziehau 31276fbb0b9SSepherosa Ziehau /* Rx multicast address hash table. */ 31376fbb0b9SSepherosa Ziehau #define JME_MAR0 0x0040 31476fbb0b9SSepherosa Ziehau #define JME_MAR1 0x0044 31576fbb0b9SSepherosa Ziehau 31676fbb0b9SSepherosa Ziehau /* Wakeup frame output data port. */ 31776fbb0b9SSepherosa Ziehau #define JME_WFODP 0x0048 31876fbb0b9SSepherosa Ziehau 31976fbb0b9SSepherosa Ziehau /* Wakeup frame output interface. */ 32076fbb0b9SSepherosa Ziehau #define JME_WFOI 0x004C 32176fbb0b9SSepherosa Ziehau #define WFOI_MASK_0_31 0x00000000 32276fbb0b9SSepherosa Ziehau #define WFOI_MASK_31_63 0x00000010 32376fbb0b9SSepherosa Ziehau #define WFOI_MASK_64_95 0x00000020 32476fbb0b9SSepherosa Ziehau #define WFOI_MASK_96_127 0x00000030 32576fbb0b9SSepherosa Ziehau #define WFOI_MASK_SEL 0x00000008 32676fbb0b9SSepherosa Ziehau #define WFOI_CRC_SEL 0x00000000 32776fbb0b9SSepherosa Ziehau #define WFOI_WAKEUP_FRAME_MASK 0x00000007 32876fbb0b9SSepherosa Ziehau #define WFOI_WAKEUP_FRAME_SEL(x) ((x) & WFOI_WAKEUP_FRAME_MASK) 32976fbb0b9SSepherosa Ziehau 33076fbb0b9SSepherosa Ziehau /* Station management interface. */ 33176fbb0b9SSepherosa Ziehau #define JME_SMI 0x0050 33276fbb0b9SSepherosa Ziehau #define SMI_DATA_MASK 0xFFFF0000 33376fbb0b9SSepherosa Ziehau #define SMI_DATA_SHIFT 16 33476fbb0b9SSepherosa Ziehau #define SMI_REG_ADDR_MASK 0x0000F800 33576fbb0b9SSepherosa Ziehau #define SMI_REG_ADDR_SHIFT 11 33676fbb0b9SSepherosa Ziehau #define SMI_PHY_ADDR_MASK 0x000007C0 33776fbb0b9SSepherosa Ziehau #define SMI_PHY_ADDR_SHIFT 6 33876fbb0b9SSepherosa Ziehau #define SMI_OP_WRITE 0x00000020 33976fbb0b9SSepherosa Ziehau #define SMI_OP_READ 0x00000000 34076fbb0b9SSepherosa Ziehau #define SMI_OP_EXECUTE 0x00000010 34176fbb0b9SSepherosa Ziehau #define SMI_MDIO 0x00000008 34276fbb0b9SSepherosa Ziehau #define SMI_MDOE 0x00000004 34376fbb0b9SSepherosa Ziehau #define SMI_MDC 0x00000002 34476fbb0b9SSepherosa Ziehau #define SMI_MDEN 0x00000001 34576fbb0b9SSepherosa Ziehau #define SMI_REG_ADDR(x) \ 34676fbb0b9SSepherosa Ziehau (((x) << SMI_REG_ADDR_SHIFT) & SMI_REG_ADDR_MASK) 34776fbb0b9SSepherosa Ziehau #define SMI_PHY_ADDR(x) \ 34876fbb0b9SSepherosa Ziehau (((x) << SMI_PHY_ADDR_SHIFT) & SMI_PHY_ADDR_MASK) 34976fbb0b9SSepherosa Ziehau 35076fbb0b9SSepherosa Ziehau /* Global host control. */ 35176fbb0b9SSepherosa Ziehau #define JME_GHC 0x0054 35276fbb0b9SSepherosa Ziehau #define GHC_LOOPBACK 0x80000000 35376fbb0b9SSepherosa Ziehau #define GHC_RESET 0x40000000 354b249905bSSepherosa Ziehau #define GHC_TXOFL_CLKSRC 0x00800000 355b249905bSSepherosa Ziehau #define GHC_TXOFL_CLKSRC_1000 0x00400000 356b249905bSSepherosa Ziehau #define GHC_TXMAC_CLKSRC 0x00200000 357b249905bSSepherosa Ziehau #define GHC_TXMAC_CLKSRC_1000 0x00100000 35876fbb0b9SSepherosa Ziehau #define GHC_FULL_DUPLEX 0x00000040 35976fbb0b9SSepherosa Ziehau #define GHC_SPEED_UNKNOWN 0x00000000 36076fbb0b9SSepherosa Ziehau #define GHC_SPEED_10 0x00000010 36176fbb0b9SSepherosa Ziehau #define GHC_SPEED_100 0x00000020 36276fbb0b9SSepherosa Ziehau #define GHC_SPEED_1000 0x00000030 36376fbb0b9SSepherosa Ziehau #define GHC_SPEED_MASK 0x00000030 36476fbb0b9SSepherosa Ziehau #define GHC_LINK_OFF 0x00000004 36576fbb0b9SSepherosa Ziehau #define GHC_LINK_ON 0x00000002 36676fbb0b9SSepherosa Ziehau #define GHC_LINK_STAT_POLLING 0x00000001 36776fbb0b9SSepherosa Ziehau 36876fbb0b9SSepherosa Ziehau /* Power management control and status. */ 36976fbb0b9SSepherosa Ziehau #define JME_PMCS 0x0060 37076fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_7 0x80000000 37176fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_6 0x40000000 37276fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_5 0x20000000 37376fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_4 0x10000000 37476fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_3 0x08000000 37576fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_2 0x04000000 37676fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_1 0x02000000 37776fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_0 0x01000000 37876fbb0b9SSepherosa Ziehau #define PMCS_LINK_FAIL 0x00040000 37976fbb0b9SSepherosa Ziehau #define PMCS_LINK_RISING 0x00020000 38076fbb0b9SSepherosa Ziehau #define PMCS_MAGIC_FRAME 0x00010000 38176fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_7_ENB 0x00008000 38276fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_6_ENB 0x00004000 38376fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_5_ENB 0x00002000 38476fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_4_ENB 0x00001000 38576fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_3_ENB 0x00000800 38676fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_2_ENB 0x00000400 38776fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_1_ENB 0x00000200 38876fbb0b9SSepherosa Ziehau #define PMCS_WAKEUP_FRAME_0_ENB 0x00000100 38976fbb0b9SSepherosa Ziehau #define PMCS_LINK_FAIL_ENB 0x00000004 39076fbb0b9SSepherosa Ziehau #define PMCS_LINK_RISING_ENB 0x00000002 39176fbb0b9SSepherosa Ziehau #define PMCS_MAGIC_FRAME_ENB 0x00000001 39276fbb0b9SSepherosa Ziehau #define PMCS_WOL_ENB_MASK 0x0000FFFF 39376fbb0b9SSepherosa Ziehau 39476fbb0b9SSepherosa Ziehau /* Giga PHY & EEPROM registers. */ 39576fbb0b9SSepherosa Ziehau #define JME_PHY_EEPROM_BASE_ADDR 0x0400 39676fbb0b9SSepherosa Ziehau 39776fbb0b9SSepherosa Ziehau #define JME_GIGAR0LO 0x0400 39876fbb0b9SSepherosa Ziehau #define JME_GIGAR0HI 0x0404 39976fbb0b9SSepherosa Ziehau #define JME_GIGARALO 0x0408 40076fbb0b9SSepherosa Ziehau #define JME_GIGARAHI 0x040C 40176fbb0b9SSepherosa Ziehau #define JME_GIGARBLO 0x0410 40276fbb0b9SSepherosa Ziehau #define JME_GIGARBHI 0x0414 40376fbb0b9SSepherosa Ziehau #define JME_GIGARCLO 0x0418 40476fbb0b9SSepherosa Ziehau #define JME_GIGARCHI 0x041C 40576fbb0b9SSepherosa Ziehau #define JME_GIGARDLO 0x0420 40676fbb0b9SSepherosa Ziehau #define JME_GIGARDHI 0x0424 40776fbb0b9SSepherosa Ziehau 408*352c8444SSepherosa Ziehau #define JME_PHYPWR 0x0424 /* XXX same as JME_GIGARDHI */ 409*352c8444SSepherosa Ziehau #define PHYPWR_DOWN1SEL 0x01000000 410*352c8444SSepherosa Ziehau #define PHYPWR_DOWN1SW 0x02000000 411*352c8444SSepherosa Ziehau #define PHYPWR_DOWN2 0x04000000 412*352c8444SSepherosa Ziehau /* 413*352c8444SSepherosa Ziehau * XTL_OUT Clock select 414*352c8444SSepherosa Ziehau * (an internal free-running clock) 415*352c8444SSepherosa Ziehau * 0: xtl_out = A_XTL25_O 416*352c8444SSepherosa Ziehau * 1: xtl_out = PD_OSC 417*352c8444SSepherosa Ziehau */ 418*352c8444SSepherosa Ziehau #define PHYPWR_CLKSEL 0x08000000 419*352c8444SSepherosa Ziehau 420*352c8444SSepherosa Ziehau 42176fbb0b9SSepherosa Ziehau /* BIST status and control. */ 42276fbb0b9SSepherosa Ziehau #define JME_GIGACSR 0x0428 42376fbb0b9SSepherosa Ziehau #define GIGACSR_STATUS 0x40000000 42476fbb0b9SSepherosa Ziehau #define GIGACSR_CTRL_MASK 0x30000000 42576fbb0b9SSepherosa Ziehau #define GIGACSR_CTRL_DEFAULT 0x30000000 42676fbb0b9SSepherosa Ziehau #define GIGACSR_TX_CLK_MASK 0x0F000000 42776fbb0b9SSepherosa Ziehau #define GIGACSR_RX_CLK_MASK 0x00F00000 42876fbb0b9SSepherosa Ziehau #define GIGACSR_TX_CLK_INV 0x00080000 42976fbb0b9SSepherosa Ziehau #define GIGACSR_RX_CLK_INV 0x00040000 43076fbb0b9SSepherosa Ziehau #define GIGACSR_PHY_RST 0x00010000 43176fbb0b9SSepherosa Ziehau #define GIGACSR_IRQ_N_O 0x00001000 43276fbb0b9SSepherosa Ziehau #define GIGACSR_BIST_OK 0x00000200 43376fbb0b9SSepherosa Ziehau #define GIGACSR_BIST_DONE 0x00000100 43476fbb0b9SSepherosa Ziehau #define GIGACSR_BIST_LED_ENB 0x00000010 43576fbb0b9SSepherosa Ziehau #define GIGACSR_BIST_MASK 0x00000003 43676fbb0b9SSepherosa Ziehau 43776fbb0b9SSepherosa Ziehau /* PHY Link Status. */ 43876fbb0b9SSepherosa Ziehau #define JME_LNKSTS 0x0430 43976fbb0b9SSepherosa Ziehau #define LINKSTS_SPEED_10 0x00000000 44076fbb0b9SSepherosa Ziehau #define LINKSTS_SPEED_100 0x00004000 44176fbb0b9SSepherosa Ziehau #define LINKSTS_SPEED_1000 0x00008000 44276fbb0b9SSepherosa Ziehau #define LINKSTS_FULL_DUPLEX 0x00002000 44376fbb0b9SSepherosa Ziehau #define LINKSTS_PAGE_RCVD 0x00001000 44476fbb0b9SSepherosa Ziehau #define LINKSTS_SPDDPX_RESOLVED 0x00000800 44576fbb0b9SSepherosa Ziehau #define LINKSTS_UP 0x00000400 44676fbb0b9SSepherosa Ziehau #define LINKSTS_ANEG_COMP 0x00000200 44776fbb0b9SSepherosa Ziehau #define LINKSTS_MDI_CROSSOVR 0x00000040 44876fbb0b9SSepherosa Ziehau #define LINKSTS_LPAR_PAUSE_ASYM 0x00000002 44976fbb0b9SSepherosa Ziehau #define LINKSTS_LPAR_PAUSE 0x00000001 45076fbb0b9SSepherosa Ziehau 45176fbb0b9SSepherosa Ziehau /* SMB control and status. */ 45276fbb0b9SSepherosa Ziehau #define JME_SMBCSR 0x0440 45376fbb0b9SSepherosa Ziehau #define SMBCSR_SLAVE_ADDR_MASK 0x7F000000 45476fbb0b9SSepherosa Ziehau #define SMBCSR_WR_DATA_NACK 0x00040000 45576fbb0b9SSepherosa Ziehau #define SMBCSR_CMD_NACK 0x00020000 45676fbb0b9SSepherosa Ziehau #define SMBCSR_RELOAD 0x00010000 45776fbb0b9SSepherosa Ziehau #define SMBCSR_CMD_ADDR_MASK 0x0000FF00 45876fbb0b9SSepherosa Ziehau #define SMBCSR_SCL_STAT 0x00000080 45976fbb0b9SSepherosa Ziehau #define SMBCSR_SDA_STAT 0x00000040 46076fbb0b9SSepherosa Ziehau #define SMBCSR_EEPROM_PRESENT 0x00000020 46176fbb0b9SSepherosa Ziehau #define SMBCSR_INIT_LD_DONE 0x00000010 46276fbb0b9SSepherosa Ziehau #define SMBCSR_HW_BUSY_MASK 0x0000000F 46376fbb0b9SSepherosa Ziehau #define SMBCSR_HW_IDLE 0x00000000 46476fbb0b9SSepherosa Ziehau 46576fbb0b9SSepherosa Ziehau /* SMB interface. */ 46676fbb0b9SSepherosa Ziehau #define JME_SMBINTF 0x0444 46776fbb0b9SSepherosa Ziehau #define SMBINTF_RD_DATA_MASK 0xFF000000 46876fbb0b9SSepherosa Ziehau #define SMBINTF_RD_DATA_SHIFT 24 46976fbb0b9SSepherosa Ziehau #define SMBINTF_WR_DATA_MASK 0x00FF0000 47076fbb0b9SSepherosa Ziehau #define SMBINTF_WR_DATA_SHIFT 16 47176fbb0b9SSepherosa Ziehau #define SMBINTF_ADDR_MASK 0x0000FF00 47276fbb0b9SSepherosa Ziehau #define SMBINTF_ADDR_SHIFT 8 47376fbb0b9SSepherosa Ziehau #define SMBINTF_RD 0x00000020 47476fbb0b9SSepherosa Ziehau #define SMBINTF_WR 0x00000000 47576fbb0b9SSepherosa Ziehau #define SMBINTF_CMD_TRIGGER 0x00000010 47676fbb0b9SSepherosa Ziehau #define SMBINTF_BUSY 0x00000010 47776fbb0b9SSepherosa Ziehau #define SMBINTF_FAST_MODE 0x00000008 47876fbb0b9SSepherosa Ziehau #define SMBINTF_GPIO_SCL 0x00000004 47976fbb0b9SSepherosa Ziehau #define SMBINTF_GPIO_SDA 0x00000002 48076fbb0b9SSepherosa Ziehau #define SMBINTF_GPIO_ENB 0x00000001 48176fbb0b9SSepherosa Ziehau 48276fbb0b9SSepherosa Ziehau #define JME_EEPROM_SIG0 0x55 48376fbb0b9SSepherosa Ziehau #define JME_EEPROM_SIG1 0xAA 48476fbb0b9SSepherosa Ziehau #define JME_EEPROM_DESC_BYTES 3 48576fbb0b9SSepherosa Ziehau #define JME_EEPROM_DESC_END 0x80 48676fbb0b9SSepherosa Ziehau #define JME_EEPROM_FUNC_MASK 0x70 48776fbb0b9SSepherosa Ziehau #define JME_EEPROM_FUNC_SHIFT 4 48876fbb0b9SSepherosa Ziehau #define JME_EEPROM_PAGE_MASK 0x0F 48976fbb0b9SSepherosa Ziehau #define JME_EEPROM_PAGE_SHIFT 0 49076fbb0b9SSepherosa Ziehau 49176fbb0b9SSepherosa Ziehau #define JME_EEPROM_FUNC0 0 49276fbb0b9SSepherosa Ziehau /* PCI configuration space. */ 49376fbb0b9SSepherosa Ziehau #define JME_EEPROM_PAGE_BAR0 0 49476fbb0b9SSepherosa Ziehau /* 128 bytes I/O window. */ 49576fbb0b9SSepherosa Ziehau #define JME_EEPROM_PAGE_BAR1 1 49676fbb0b9SSepherosa Ziehau /* 256 bytes I/O window. */ 49776fbb0b9SSepherosa Ziehau #define JME_EEPROM_PAGE_BAR2 2 49876fbb0b9SSepherosa Ziehau 49976fbb0b9SSepherosa Ziehau #define JME_EEPROM_END 0xFF 50076fbb0b9SSepherosa Ziehau 50176fbb0b9SSepherosa Ziehau #define JME_EEPROM_MKDESC(f, p) \ 50276fbb0b9SSepherosa Ziehau ((((f) & JME_EEPROM_FUNC_MASK) << JME_EEPROM_FUNC_SHIFT) | \ 50376fbb0b9SSepherosa Ziehau (((p) & JME_EEPROM_PAGE_MASK) << JME_EEPROM_PAGE_SHIFT)) 50476fbb0b9SSepherosa Ziehau 50576fbb0b9SSepherosa Ziehau /* 3-wire EEPROM interface. Obsolete interface, use SMBCSR. */ 50676fbb0b9SSepherosa Ziehau #define JME_EEPINTF 0x0448 50776fbb0b9SSepherosa Ziehau #define EEPINTF_DATA_MASK 0xFFFF0000 50876fbb0b9SSepherosa Ziehau #define EEPINTF_DATA_SHIFT 16 50976fbb0b9SSepherosa Ziehau #define EEPINTF_ADDR_MASK 0x0000FC00 51076fbb0b9SSepherosa Ziehau #define EEPINTF_ADDR_SHIFT 10 51176fbb0b9SSepherosa Ziehau #define EEPRINTF_OP_MASK 0x00000300 51276fbb0b9SSepherosa Ziehau #define EEPINTF_OP_EXECUTE 0x00000080 51376fbb0b9SSepherosa Ziehau #define EEPINTF_DATA_OUT 0x00000008 51476fbb0b9SSepherosa Ziehau #define EEPINTF_DATA_IN 0x00000004 51576fbb0b9SSepherosa Ziehau #define EEPINTF_CLK 0x00000002 51676fbb0b9SSepherosa Ziehau #define EEPINTF_SEL 0x00000001 51776fbb0b9SSepherosa Ziehau 51876fbb0b9SSepherosa Ziehau /* 3-wire EEPROM control and status. Obsolete interface, use SMBCSR. */ 51976fbb0b9SSepherosa Ziehau #define JME_EEPCSR 0x044C 52076fbb0b9SSepherosa Ziehau #define EEPCSR_EEPROM_RELOAD 0x00000002 52176fbb0b9SSepherosa Ziehau #define EEPCSR_EEPROM_PRESENT 0x00000001 52276fbb0b9SSepherosa Ziehau 52376fbb0b9SSepherosa Ziehau /* Misc registers. */ 52476fbb0b9SSepherosa Ziehau #define JME_MISC_BASE_ADDR 0x800 52576fbb0b9SSepherosa Ziehau 52676fbb0b9SSepherosa Ziehau /* Timer control and status. */ 52776fbb0b9SSepherosa Ziehau #define JME_TMCSR 0x0800 52876fbb0b9SSepherosa Ziehau #define TMCSR_SW_INTR 0x80000000 52976fbb0b9SSepherosa Ziehau #define TMCSR_TIMER_INTR 0x10000000 53076fbb0b9SSepherosa Ziehau #define TMCSR_TIMER_ENB 0x01000000 53176fbb0b9SSepherosa Ziehau #define TMCSR_TIMER_COUNT_MASK 0x00FFFFFF 53276fbb0b9SSepherosa Ziehau 53376fbb0b9SSepherosa Ziehau /* GPIO control and status. */ 53476fbb0b9SSepherosa Ziehau #define JME_GPIO 0x0804 53576fbb0b9SSepherosa Ziehau #define GPIO_4_SPI_IN 0x80000000 53676fbb0b9SSepherosa Ziehau #define GPIO_3_SPI_IN 0x40000000 53776fbb0b9SSepherosa Ziehau #define GPIO_4_SPI_OUT 0x20000000 53876fbb0b9SSepherosa Ziehau #define GPIO_4_SPI_OUT_ENB 0x10000000 53976fbb0b9SSepherosa Ziehau #define GPIO_3_SPI_OUT 0x08000000 54076fbb0b9SSepherosa Ziehau #define GPIO_3_SPI_OUT_ENB 0x04000000 54176fbb0b9SSepherosa Ziehau #define GPIO_3_4_LED 0x00000000 54276fbb0b9SSepherosa Ziehau #define GPIO_3_4_GPIO 0x02000000 54376fbb0b9SSepherosa Ziehau #define GPIO_2_CLKREQN_IN 0x00100000 54476fbb0b9SSepherosa Ziehau #define GPIO_2_CLKREQN_OUT 0x00040000 54576fbb0b9SSepherosa Ziehau #define GPIO_2_CLKREQN_OUT_ENB 0x00020000 54676fbb0b9SSepherosa Ziehau #define GPIO_1_LED42_IN 0x00001000 54776fbb0b9SSepherosa Ziehau #define GPIO_1_LED42_OUT 0x00000400 54876fbb0b9SSepherosa Ziehau #define GPIO_1_LED42_OUT_ENB 0x00000200 54976fbb0b9SSepherosa Ziehau #define GPIO_1_LED42_ENB 0x00000100 55076fbb0b9SSepherosa Ziehau #define GPIO_0_SDA_IN 0x00000010 55176fbb0b9SSepherosa Ziehau #define GPIO_0_SDA_OUT 0x00000004 55276fbb0b9SSepherosa Ziehau #define GPIO_0_SDA_OUT_ENB 0x00000002 55376fbb0b9SSepherosa Ziehau #define GPIO_0_SDA_ENB 0x00000001 55476fbb0b9SSepherosa Ziehau 55576fbb0b9SSepherosa Ziehau /* General purpose register 0. */ 55676fbb0b9SSepherosa Ziehau #define JME_GPREG0 0x0808 55776fbb0b9SSepherosa Ziehau #define GPREG0_SH_POST_DW7_DIS 0x80000000 55876fbb0b9SSepherosa Ziehau #define GPREG0_SH_POST_DW6_DIS 0x40000000 55976fbb0b9SSepherosa Ziehau #define GPREG0_SH_POST_DW5_DIS 0x20000000 56076fbb0b9SSepherosa Ziehau #define GPREG0_SH_POST_DW4_DIS 0x10000000 56176fbb0b9SSepherosa Ziehau #define GPREG0_SH_POST_DW3_DIS 0x08000000 56276fbb0b9SSepherosa Ziehau #define GPREG0_SH_POST_DW2_DIS 0x04000000 56376fbb0b9SSepherosa Ziehau #define GPREG0_SH_POST_DW1_DIS 0x02000000 56476fbb0b9SSepherosa Ziehau #define GPREG0_SH_POST_DW0_DIS 0x01000000 56576fbb0b9SSepherosa Ziehau #define GPREG0_DMA_RD_REQ_8 0x00000000 56676fbb0b9SSepherosa Ziehau #define GPREG0_DMA_RD_REQ_6 0x00100000 56776fbb0b9SSepherosa Ziehau #define GPREG0_DMA_RD_REQ_5 0x00200000 56876fbb0b9SSepherosa Ziehau #define GPREG0_DMA_RD_REQ_4 0x00300000 56976fbb0b9SSepherosa Ziehau #define GPREG0_POST_DW0_ENB 0x00040000 57076fbb0b9SSepherosa Ziehau #define GPREG0_PCC_CLR_DIS 0x00020000 57176fbb0b9SSepherosa Ziehau #define GPREG0_FORCE_SCL_OUT 0x00010000 57276fbb0b9SSepherosa Ziehau #define GPREG0_DL_RSTB_DIS 0x00008000 57376fbb0b9SSepherosa Ziehau #define GPREG0_STICKY_RESET 0x00004000 57476fbb0b9SSepherosa Ziehau #define GPREG0_DL_RSTB_CFG_DIS 0x00002000 57576fbb0b9SSepherosa Ziehau #define GPREG0_LINK_CHG_POLL 0x00001000 57676fbb0b9SSepherosa Ziehau #define GPREG0_LINK_CHG_DIRECT 0x00000000 57776fbb0b9SSepherosa Ziehau #define GPREG0_MSI_GEN_SEL 0x00000800 57876fbb0b9SSepherosa Ziehau #define GPREG0_SMB_PAD_PU_DIS 0x00000400 57976fbb0b9SSepherosa Ziehau #define GPREG0_PCC_UNIT_16US 0x00000000 58076fbb0b9SSepherosa Ziehau #define GPREG0_PCC_UNIT_256US 0x00000100 58176fbb0b9SSepherosa Ziehau #define GPREG0_PCC_UNIT_US 0x00000200 58276fbb0b9SSepherosa Ziehau #define GPREG0_PCC_UNIT_MS 0x00000300 58376fbb0b9SSepherosa Ziehau #define GPREG0_PCC_UNIT_MASK 0x00000300 58476fbb0b9SSepherosa Ziehau #define GPREG0_INTR_EVENT_ENB 0x00000080 58576fbb0b9SSepherosa Ziehau #define GPREG0_PME_ENB 0x00000020 58676fbb0b9SSepherosa Ziehau #define GPREG0_PHY_ADDR_MASK 0x0000001F 58776fbb0b9SSepherosa Ziehau #define GPREG0_PHY_ADDR_SHIFT 0 58876fbb0b9SSepherosa Ziehau #define GPREG0_PHY_ADDR 1 58976fbb0b9SSepherosa Ziehau 5903b3da110SSepherosa Ziehau /* General purpose register 1. */ 59176fbb0b9SSepherosa Ziehau #define JME_GPREG1 0x080C 5923b3da110SSepherosa Ziehau #define GPREG1_WA_HDX 0x00000020 /* 250A2 only, for 10/100 mode */ 5933b3da110SSepherosa Ziehau #define GPREG1_WA_IP6RSS 0x00000040 /* 250A2 only, for 10/100 mode */ 594409fe405SSepherosa Ziehau #define GPREG1_DIS_RXMAC_CLKSRC 0x04000000 59576fbb0b9SSepherosa Ziehau 59676fbb0b9SSepherosa Ziehau /* MSIX entry number of interrupt source. */ 59776fbb0b9SSepherosa Ziehau #define JME_MSINUM_BASE 0x0810 59858880b0dSSepherosa Ziehau #define JME_MSINUM(x) (JME_MSINUM_BASE + (4 * (x))) 59958880b0dSSepherosa Ziehau #define JME_MSINUM_CNT 4 60058880b0dSSepherosa Ziehau #define JME_MSINUM_FACTOR 8 60176fbb0b9SSepherosa Ziehau 60276fbb0b9SSepherosa Ziehau /* Interrupt event status. */ 60376fbb0b9SSepherosa Ziehau #define JME_INTR_STATUS 0x0820 60476fbb0b9SSepherosa Ziehau #define INTR_SW 0x80000000 60576fbb0b9SSepherosa Ziehau #define INTR_TIMER 0x40000000 60676fbb0b9SSepherosa Ziehau #define INTR_LINKCHG 0x20000000 60776fbb0b9SSepherosa Ziehau #define INTR_PAUSE 0x10000000 60876fbb0b9SSepherosa Ziehau #define INTR_MAGIC_PKT 0x08000000 60976fbb0b9SSepherosa Ziehau #define INTR_WAKEUP_PKT 0x04000000 61076fbb0b9SSepherosa Ziehau #define INTR_RXQ0_COAL_TO 0x02000000 61176fbb0b9SSepherosa Ziehau #define INTR_RXQ1_COAL_TO 0x01000000 61276fbb0b9SSepherosa Ziehau #define INTR_RXQ2_COAL_TO 0x00800000 61376fbb0b9SSepherosa Ziehau #define INTR_RXQ3_COAL_TO 0x00400000 61476fbb0b9SSepherosa Ziehau #define INTR_TXQ_COAL_TO 0x00200000 61576fbb0b9SSepherosa Ziehau #define INTR_RXQ0_COAL 0x00100000 61676fbb0b9SSepherosa Ziehau #define INTR_RXQ1_COAL 0x00080000 61776fbb0b9SSepherosa Ziehau #define INTR_RXQ2_COAL 0x00040000 61876fbb0b9SSepherosa Ziehau #define INTR_RXQ3_COAL 0x00020000 61976fbb0b9SSepherosa Ziehau #define INTR_TXQ_COAL 0x00010000 62076fbb0b9SSepherosa Ziehau #define INTR_RXQ3_DESC_EMPTY 0x00008000 62176fbb0b9SSepherosa Ziehau #define INTR_RXQ2_DESC_EMPTY 0x00004000 62276fbb0b9SSepherosa Ziehau #define INTR_RXQ1_DESC_EMPTY 0x00002000 62376fbb0b9SSepherosa Ziehau #define INTR_RXQ0_DESC_EMPTY 0x00001000 62476fbb0b9SSepherosa Ziehau #define INTR_RXQ3_COMP 0x00000800 62576fbb0b9SSepherosa Ziehau #define INTR_RXQ2_COMP 0x00000400 62676fbb0b9SSepherosa Ziehau #define INTR_RXQ1_COMP 0x00000200 62776fbb0b9SSepherosa Ziehau #define INTR_RXQ0_COMP 0x00000100 62876fbb0b9SSepherosa Ziehau #define INTR_TXQ7_COMP 0x00000080 62976fbb0b9SSepherosa Ziehau #define INTR_TXQ6_COMP 0x00000040 63076fbb0b9SSepherosa Ziehau #define INTR_TXQ5_COMP 0x00000020 63176fbb0b9SSepherosa Ziehau #define INTR_TXQ4_COMP 0x00000010 63276fbb0b9SSepherosa Ziehau #define INTR_TXQ3_COMP 0x00000008 63376fbb0b9SSepherosa Ziehau #define INTR_TXQ2_COMP 0x00000004 63476fbb0b9SSepherosa Ziehau #define INTR_TXQ1_COMP 0x00000002 63576fbb0b9SSepherosa Ziehau #define INTR_TXQ0_COMP 0x00000001 63676fbb0b9SSepherosa Ziehau 63758880b0dSSepherosa Ziehau #define JME_INTR_CNT 32 63858880b0dSSepherosa Ziehau 63976fbb0b9SSepherosa Ziehau #define INTR_RXQ_COAL_TO \ 64076fbb0b9SSepherosa Ziehau (INTR_RXQ0_COAL_TO | INTR_RXQ1_COAL_TO | \ 64176fbb0b9SSepherosa Ziehau INTR_RXQ2_COAL_TO | INTR_RXQ3_COAL_TO) 64276fbb0b9SSepherosa Ziehau 64376fbb0b9SSepherosa Ziehau #define INTR_RXQ_COAL \ 64476fbb0b9SSepherosa Ziehau (INTR_RXQ0_COAL | INTR_RXQ1_COAL | INTR_RXQ2_COAL | \ 64576fbb0b9SSepherosa Ziehau INTR_RXQ3_COAL) 64676fbb0b9SSepherosa Ziehau 64776fbb0b9SSepherosa Ziehau #define INTR_RXQ_COMP \ 64876fbb0b9SSepherosa Ziehau (INTR_RXQ0_COMP | INTR_RXQ1_COMP | INTR_RXQ2_COMP | \ 64976fbb0b9SSepherosa Ziehau INTR_RXQ3_COMP) 65076fbb0b9SSepherosa Ziehau 65176fbb0b9SSepherosa Ziehau #define INTR_RXQ_DESC_EMPTY \ 65276fbb0b9SSepherosa Ziehau (INTR_RXQ0_DESC_EMPTY | INTR_RXQ1_DESC_EMPTY | \ 65376fbb0b9SSepherosa Ziehau INTR_RXQ2_DESC_EMPTY | INTR_RXQ3_DESC_EMPTY) 65476fbb0b9SSepherosa Ziehau 65576fbb0b9SSepherosa Ziehau #define INTR_RXQ_COMP \ 65676fbb0b9SSepherosa Ziehau (INTR_RXQ0_COMP | INTR_RXQ1_COMP | INTR_RXQ2_COMP | \ 65776fbb0b9SSepherosa Ziehau INTR_RXQ3_COMP) 65876fbb0b9SSepherosa Ziehau 65976fbb0b9SSepherosa Ziehau #define INTR_TXQ_COMP \ 66076fbb0b9SSepherosa Ziehau (INTR_TXQ0_COMP | INTR_TXQ1_COMP | INTR_TXQ2_COMP | \ 66176fbb0b9SSepherosa Ziehau INTR_TXQ3_COMP | INTR_TXQ4_COMP | INTR_TXQ5_COMP | \ 66276fbb0b9SSepherosa Ziehau INTR_TXQ6_COMP | INTR_TXQ7_COMP) 66376fbb0b9SSepherosa Ziehau 66476fbb0b9SSepherosa Ziehau #define JME_INTRS \ 66576fbb0b9SSepherosa Ziehau (INTR_RXQ_COAL_TO | INTR_TXQ_COAL_TO | INTR_RXQ_COAL | \ 66676fbb0b9SSepherosa Ziehau INTR_TXQ_COAL | INTR_RXQ_DESC_EMPTY) 66776fbb0b9SSepherosa Ziehau 66876fbb0b9SSepherosa Ziehau #define N_INTR_SW 31 66976fbb0b9SSepherosa Ziehau #define N_INTR_TIMER 30 67076fbb0b9SSepherosa Ziehau #define N_INTR_LINKCHG 29 67176fbb0b9SSepherosa Ziehau #define N_INTR_PAUSE 28 67276fbb0b9SSepherosa Ziehau #define N_INTR_MAGIC_PKT 27 67376fbb0b9SSepherosa Ziehau #define N_INTR_WAKEUP_PKT 26 67476fbb0b9SSepherosa Ziehau #define N_INTR_RXQ0_COAL_TO 25 67576fbb0b9SSepherosa Ziehau #define N_INTR_RXQ1_COAL_TO 24 67676fbb0b9SSepherosa Ziehau #define N_INTR_RXQ2_COAL_TO 23 67776fbb0b9SSepherosa Ziehau #define N_INTR_RXQ3_COAL_TO 22 67876fbb0b9SSepherosa Ziehau #define N_INTR_TXQ_COAL_TO 21 67976fbb0b9SSepherosa Ziehau #define N_INTR_RXQ0_COAL 20 68076fbb0b9SSepherosa Ziehau #define N_INTR_RXQ1_COAL 19 68176fbb0b9SSepherosa Ziehau #define N_INTR_RXQ2_COAL 18 68276fbb0b9SSepherosa Ziehau #define N_INTR_RXQ3_COAL 17 68376fbb0b9SSepherosa Ziehau #define N_INTR_TXQ_COAL 16 68476fbb0b9SSepherosa Ziehau #define N_INTR_RXQ3_DESC_EMPTY 15 68576fbb0b9SSepherosa Ziehau #define N_INTR_RXQ2_DESC_EMPTY 14 68676fbb0b9SSepherosa Ziehau #define N_INTR_RXQ1_DESC_EMPTY 13 68776fbb0b9SSepherosa Ziehau #define N_INTR_RXQ0_DESC_EMPTY 12 68876fbb0b9SSepherosa Ziehau #define N_INTR_RXQ3_COMP 11 68976fbb0b9SSepherosa Ziehau #define N_INTR_RXQ2_COMP 10 69076fbb0b9SSepherosa Ziehau #define N_INTR_RXQ1_COMP 9 69176fbb0b9SSepherosa Ziehau #define N_INTR_RXQ0_COMP 8 69276fbb0b9SSepherosa Ziehau #define N_INTR_TXQ7_COMP 7 69376fbb0b9SSepherosa Ziehau #define N_INTR_TXQ6_COMP 6 69476fbb0b9SSepherosa Ziehau #define N_INTR_TXQ5_COMP 5 69576fbb0b9SSepherosa Ziehau #define N_INTR_TXQ4_COMP 4 69676fbb0b9SSepherosa Ziehau #define N_INTR_TXQ3_COMP 3 69776fbb0b9SSepherosa Ziehau #define N_INTR_TXQ2_COMP 2 69876fbb0b9SSepherosa Ziehau #define N_INTR_TXQ1_COMP 1 69976fbb0b9SSepherosa Ziehau #define N_INTR_TXQ0_COMP 0 70076fbb0b9SSepherosa Ziehau 70176fbb0b9SSepherosa Ziehau /* Interrupt request status. */ 70276fbb0b9SSepherosa Ziehau #define JME_INTR_REQ_STATUS 0x0824 70376fbb0b9SSepherosa Ziehau 70476fbb0b9SSepherosa Ziehau /* Interrupt enable - setting port. */ 70576fbb0b9SSepherosa Ziehau #define JME_INTR_MASK_SET 0x0828 70676fbb0b9SSepherosa Ziehau 70776fbb0b9SSepherosa Ziehau /* Interrupt enable - clearing port. */ 70876fbb0b9SSepherosa Ziehau #define JME_INTR_MASK_CLR 0x082C 70976fbb0b9SSepherosa Ziehau 71076fbb0b9SSepherosa Ziehau /* Packet completion coalescing control of Rx queue 0, 1, 2 and 3. */ 7114447c752SSepherosa Ziehau #define JME_PCCRX(r) (0x0830 + ((r) * 4)) 71276fbb0b9SSepherosa Ziehau #define PCCRX_COAL_TO_MASK 0xFFFF0000 71376fbb0b9SSepherosa Ziehau #define PCCRX_COAL_TO_SHIFT 16 71476fbb0b9SSepherosa Ziehau #define PCCRX_COAL_PKT_MASK 0x0000FF00 71576fbb0b9SSepherosa Ziehau #define PCCRX_COAL_PKT_SHIFT 8 71676fbb0b9SSepherosa Ziehau 71776fbb0b9SSepherosa Ziehau #define PCCRX_COAL_TO_MIN 1 7187409c356SSepherosa Ziehau #define PCCRX_COAL_TO_DEFAULT 150 71976fbb0b9SSepherosa Ziehau #define PCCRX_COAL_TO_MAX 65535 72076fbb0b9SSepherosa Ziehau 7214b804818SSepherosa Ziehau #define PCCRX_COAL_PKT_MIN 0 7222870abc4SSepherosa Ziehau #define PCCRX_COAL_PKT_DEFAULT 64 72376fbb0b9SSepherosa Ziehau #define PCCRX_COAL_PKT_MAX 255 72476fbb0b9SSepherosa Ziehau 72576fbb0b9SSepherosa Ziehau /* Packet completion coalescing control of Tx queue. */ 72676fbb0b9SSepherosa Ziehau #define JME_PCCTX 0x0840 72776fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TO_MASK 0xFFFF0000 72876fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TO_SHIFT 16 72976fbb0b9SSepherosa Ziehau #define PCCTX_COAL_PKT_MASK 0x0000FF00 73076fbb0b9SSepherosa Ziehau #define PCCTX_COAL_PKT_SHIFT 8 73176fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TXQ7 0x00000080 73276fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TXQ6 0x00000040 73376fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TXQ5 0x00000020 73476fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TXQ4 0x00000010 73576fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TXQ3 0x00000008 73676fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TXQ2 0x00000004 73776fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TXQ1 0x00000002 73876fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TXQ0 0x00000001 73976fbb0b9SSepherosa Ziehau 74076fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TO_MIN 1 7417409c356SSepherosa Ziehau #define PCCTX_COAL_TO_DEFAULT 250 74276fbb0b9SSepherosa Ziehau #define PCCTX_COAL_TO_MAX 65535 74376fbb0b9SSepherosa Ziehau 7444b804818SSepherosa Ziehau #define PCCTX_COAL_PKT_MIN 0 7457409c356SSepherosa Ziehau #define PCCTX_COAL_PKT_DEFAULT 128 74676fbb0b9SSepherosa Ziehau #define PCCTX_COAL_PKT_MAX 255 74776fbb0b9SSepherosa Ziehau 74876fbb0b9SSepherosa Ziehau /* Chip mode and FPGA version. */ 74976fbb0b9SSepherosa Ziehau #define JME_CHIPMODE 0x0844 75076fbb0b9SSepherosa Ziehau #define CHIPMODE_FPGA_REV_MASK 0xFFFF0000 75176fbb0b9SSepherosa Ziehau #define CHIPMODE_FPGA_REV_SHIFT 16 75276fbb0b9SSepherosa Ziehau #define CHIPMODE_NOT_FPGA 0 753b249905bSSepherosa Ziehau #define CHIPMODE_REVECO_MASK 0x0000F000 754b249905bSSepherosa Ziehau #define CHIPMODE_REVECO_SHIFT 12 755b249905bSSepherosa Ziehau #define CHIPMODE_REVFM_MASK 0x00000F00 756b249905bSSepherosa Ziehau #define CHIPMODE_REVFM_SHIFT 8 75776fbb0b9SSepherosa Ziehau #define CHIPMODE_MODE_48P 0x0000000C 75876fbb0b9SSepherosa Ziehau #define CHIPMODE_MODE_64P 0x00000004 75976fbb0b9SSepherosa Ziehau #define CHIPMODE_MODE_128P_MAC 0x00000003 76076fbb0b9SSepherosa Ziehau #define CHIPMODE_MODE_128P_DBG 0x00000002 76176fbb0b9SSepherosa Ziehau #define CHIPMODE_MODE_128P_PHY 0x00000000 76276fbb0b9SSepherosa Ziehau 76376fbb0b9SSepherosa Ziehau /* Shadow status base address high/low. */ 76476fbb0b9SSepherosa Ziehau #define JME_SHBASE_ADDR_HI 0x0848 76576fbb0b9SSepherosa Ziehau #define JME_SHBASE_ADDR_LO 0x084C 76676fbb0b9SSepherosa Ziehau #define SHBASE_ADDR_LO_MASK 0xFFFFFFE0 76776fbb0b9SSepherosa Ziehau #define SHBASE_POST_FORCE 0x00000002 76876fbb0b9SSepherosa Ziehau #define SHBASE_POST_ENB 0x00000001 76976fbb0b9SSepherosa Ziehau 77076fbb0b9SSepherosa Ziehau /* Timer 1 and 2. */ 77176fbb0b9SSepherosa Ziehau #define JME_TIMER1 0x0870 77276fbb0b9SSepherosa Ziehau #define JME_TIMER2 0x0874 77376fbb0b9SSepherosa Ziehau #define TIMER_ENB 0x01000000 77476fbb0b9SSepherosa Ziehau #define TIMER_CNT_MASK 0x00FFFFFF 77576fbb0b9SSepherosa Ziehau #define TIMER_CNT_SHIFT 0 77676fbb0b9SSepherosa Ziehau #define TIMER_UNIT 1024 /* 1024us */ 77776fbb0b9SSepherosa Ziehau 77876fbb0b9SSepherosa Ziehau /* Aggresive power mode control. */ 77976fbb0b9SSepherosa Ziehau #define JME_APMC 0x087C 78076fbb0b9SSepherosa Ziehau #define APMC_PCIE_SDOWN_STAT 0x80000000 78176fbb0b9SSepherosa Ziehau #define APMC_PCIE_SDOWN_ENB 0x40000000 78276fbb0b9SSepherosa Ziehau #define APMC_PSEUDO_HOT_PLUG 0x20000000 78376fbb0b9SSepherosa Ziehau #define APMC_EXT_PLUGIN_ENB 0x04000000 78476fbb0b9SSepherosa Ziehau #define APMC_EXT_PLUGIN_CTL_MSK 0x03000000 78576fbb0b9SSepherosa Ziehau #define APMC_DIS_SRAM 0x00000004 78676fbb0b9SSepherosa Ziehau #define APMC_DIS_CLKPM 0x00000002 78776fbb0b9SSepherosa Ziehau #define APMC_DIS_CLKTX 0x00000001 78876fbb0b9SSepherosa Ziehau 78976fbb0b9SSepherosa Ziehau /* Packet completion coalesing status of Rx queue 0, 1, 2 and 3. */ 79076fbb0b9SSepherosa Ziehau #define JME_PCCSRX_BASE 0x0880 79176fbb0b9SSepherosa Ziehau #define JME_PCCSRX_END 0x088F 79276fbb0b9SSepherosa Ziehau #define PCCSRX_REG(x) (JME_PCCSRX_BASE + ((x) * 4)) 79376fbb0b9SSepherosa Ziehau #define PCCSRX_TO_MASK 0xFFFF0000 79476fbb0b9SSepherosa Ziehau #define PCCSRX_TO_SHIFT 16 79576fbb0b9SSepherosa Ziehau #define PCCSRX_PKT_CNT_MASK 0x0000FF00 79676fbb0b9SSepherosa Ziehau #define PCCSRX_PKT_CNT_SHIFT 8 79776fbb0b9SSepherosa Ziehau 79876fbb0b9SSepherosa Ziehau /* Packet completion coalesing status of Tx queue. */ 79976fbb0b9SSepherosa Ziehau #define JME_PCCSTX 0x0890 80076fbb0b9SSepherosa Ziehau #define PCCSTX_TO_MASK 0xFFFF0000 80176fbb0b9SSepherosa Ziehau #define PCCSTX_TO_SHIFT 16 80276fbb0b9SSepherosa Ziehau #define PCCSTX_PKT_CNT_MASK 0x0000FF00 80376fbb0b9SSepherosa Ziehau #define PCCSTX_PKT_CNT_SHIFT 8 80476fbb0b9SSepherosa Ziehau 80576fbb0b9SSepherosa Ziehau /* Tx queues empty indicator. */ 80676fbb0b9SSepherosa Ziehau #define JME_TXQEMPTY 0x0894 80776fbb0b9SSepherosa Ziehau #define TXQEMPTY_TXQ7 0x00000080 80876fbb0b9SSepherosa Ziehau #define TXQEMPTY_TXQ6 0x00000040 80976fbb0b9SSepherosa Ziehau #define TXQEMPTY_TXQ5 0x00000020 81076fbb0b9SSepherosa Ziehau #define TXQEMPTY_TXQ4 0x00000010 81176fbb0b9SSepherosa Ziehau #define TXQEMPTY_TXQ3 0x00000008 81276fbb0b9SSepherosa Ziehau #define TXQEMPTY_TXQ2 0x00000004 81376fbb0b9SSepherosa Ziehau #define TXQEMPTY_TXQ1 0x00000002 81476fbb0b9SSepherosa Ziehau #define TXQEMPTY_TXQ0 0x00000001 81576fbb0b9SSepherosa Ziehau #define TXQEMPTY_N_TXQ(x, y) ((x) & (0x01 << (y))) 81676fbb0b9SSepherosa Ziehau 81776fbb0b9SSepherosa Ziehau /* RSS control registers. */ 81876fbb0b9SSepherosa Ziehau #define JME_RSS_BASE 0x0C00 81976fbb0b9SSepherosa Ziehau 82076fbb0b9SSepherosa Ziehau #define JME_RSSC 0x0C00 82176fbb0b9SSepherosa Ziehau #define RSSC_HASH_LEN_MASK 0x0000E000 82276fbb0b9SSepherosa Ziehau #define RSSC_HASH_64_ENTRY 0x0000A000 82376fbb0b9SSepherosa Ziehau #define RSSC_HASH_128_ENTRY 0x0000E000 82476fbb0b9SSepherosa Ziehau #define RSSC_HASH_NONE 0x00001000 82576fbb0b9SSepherosa Ziehau #define RSSC_HASH_IPV6 0x00000800 82676fbb0b9SSepherosa Ziehau #define RSSC_HASH_IPV4 0x00000400 82776fbb0b9SSepherosa Ziehau #define RSSC_HASH_IPV6_TCP 0x00000200 82876fbb0b9SSepherosa Ziehau #define RSSC_HASH_IPV4_TCP 0x00000100 82976fbb0b9SSepherosa Ziehau #define RSSC_NCPU_MASK 0x000000F8 83076fbb0b9SSepherosa Ziehau #define RSSC_NCPU_SHIFT 3 83176fbb0b9SSepherosa Ziehau #define RSSC_DIS_RSS 0x00000000 83276fbb0b9SSepherosa Ziehau #define RSSC_2RXQ_ENB 0x00000001 83376fbb0b9SSepherosa Ziehau #define RSSS_4RXQ_ENB 0x00000002 83476fbb0b9SSepherosa Ziehau 83576fbb0b9SSepherosa Ziehau /* CPU vector. */ 83676fbb0b9SSepherosa Ziehau #define JME_RSSCPU 0x0C04 83776fbb0b9SSepherosa Ziehau #define RSSCPU_N_SEL(x) ((1 << (x)) 83876fbb0b9SSepherosa Ziehau 83976fbb0b9SSepherosa Ziehau /* RSS Hash value. */ 84076fbb0b9SSepherosa Ziehau #define JME_RSSHASH 0x0C10 84176fbb0b9SSepherosa Ziehau 84276fbb0b9SSepherosa Ziehau #define JME_RSSHASH_STAT 0x0C14 84376fbb0b9SSepherosa Ziehau 84476fbb0b9SSepherosa Ziehau #define JME_RSS_RDATA0 0x0C18 84576fbb0b9SSepherosa Ziehau 84676fbb0b9SSepherosa Ziehau #define JME_RSS_RDATA1 0x0C1C 84776fbb0b9SSepherosa Ziehau 84876fbb0b9SSepherosa Ziehau /* RSS secret key. */ 84976fbb0b9SSepherosa Ziehau #define JME_RSSKEY_BASE 0x0C40 850760c056cSSepherosa Ziehau #define RSSKEY_NREGS 10 85124dd1705SSepherosa Ziehau #define RSSKEY_REGSIZE 4 85224dd1705SSepherosa Ziehau #define RSSKEY_REGVAL(k, x) (k[(x) * RSSKEY_REGSIZE] << 24 | \ 85324dd1705SSepherosa Ziehau k[(x) * RSSKEY_REGSIZE + 1] << 16 | \ 85424dd1705SSepherosa Ziehau k[(x) * RSSKEY_REGSIZE + 2] << 8 | \ 85524dd1705SSepherosa Ziehau k[(x) * RSSKEY_REGSIZE + 3]) 85624dd1705SSepherosa Ziehau #define RSSKEY_REG(x) (JME_RSSKEY_BASE + (RSSKEY_REGSIZE * (x))) 85776fbb0b9SSepherosa Ziehau 85876fbb0b9SSepherosa Ziehau /* RSS indirection table entries. */ 85976fbb0b9SSepherosa Ziehau #define JME_RSSTBL_BASE 0x0C80 860760c056cSSepherosa Ziehau #define RSSTBL_NREGS 32 86166f75939SSepherosa Ziehau #define RSSTBL_REGSIZE 4 86266f75939SSepherosa Ziehau #define RSSTBL_REG(x) (JME_RSSTBL_BASE + (RSSTBL_REGSIZE * (x))) 86376fbb0b9SSepherosa Ziehau 86476fbb0b9SSepherosa Ziehau /* MSI-X table. */ 86576fbb0b9SSepherosa Ziehau #define JME_MSIX_BASE_ADDR 0x2000 86676fbb0b9SSepherosa Ziehau 86776fbb0b9SSepherosa Ziehau #define JME_MSIX_BASE 0x2000 86876fbb0b9SSepherosa Ziehau #define JME_MSIX_END 0x207F 86976fbb0b9SSepherosa Ziehau #define JME_MSIX_NENTRY 8 87076fbb0b9SSepherosa Ziehau #define MSIX_REG(x) (JME_MSIX_BASE + ((x) * 0x10)) 87176fbb0b9SSepherosa Ziehau #define MSIX_ADDR_HI_OFF 0x00 87276fbb0b9SSepherosa Ziehau #define MSIX_ADDR_LO_OFF 0x04 87376fbb0b9SSepherosa Ziehau #define MSIX_ADDR_LO_MASK 0xFFFFFFFC 87476fbb0b9SSepherosa Ziehau #define MSIX_DATA_OFF 0x08 87576fbb0b9SSepherosa Ziehau #define MSIX_VECTOR_OFF 0x0C 87676fbb0b9SSepherosa Ziehau #define MSIX_VECTOR_RSVD 0x80000000 87776fbb0b9SSepherosa Ziehau #define MSIX_VECTOR_DIS 0x00000001 87876fbb0b9SSepherosa Ziehau 87976fbb0b9SSepherosa Ziehau /* MSI-X PBA. */ 88076fbb0b9SSepherosa Ziehau #define JME_MSIX_PBA_BASE_ADDR 0x3000 88176fbb0b9SSepherosa Ziehau 88276fbb0b9SSepherosa Ziehau #define JME_MSIX_PBA 0x3000 88376fbb0b9SSepherosa Ziehau #define MSIX_PBA_RSVD_MASK 0xFFFFFF00 88476fbb0b9SSepherosa Ziehau #define MSIX_PBA_RSVD_SHIFT 8 88576fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_MASK 0x000000FF 88676fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_SHIFT 0 88776fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_ENTRY7 0x00000080 88876fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_ENTRY6 0x00000040 88976fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_ENTRY5 0x00000020 89076fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_ENTRY4 0x00000010 89176fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_ENTRY3 0x00000008 89276fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_ENTRY2 0x00000004 89376fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_ENTRY1 0x00000002 89476fbb0b9SSepherosa Ziehau #define MSIX_PBA_PEND_ENTRY0 0x00000001 89576fbb0b9SSepherosa Ziehau 89676fbb0b9SSepherosa Ziehau #define JME_PHY_OUI 0x001B8C 89776fbb0b9SSepherosa Ziehau #define JME_PHY_MODEL 0x21 89876fbb0b9SSepherosa Ziehau #define JME_PHY_REV 0x01 89976fbb0b9SSepherosa Ziehau #define JME_PHY_ADDR 1 90076fbb0b9SSepherosa Ziehau 90176fbb0b9SSepherosa Ziehau /* JMC250 shadow status block. */ 90276fbb0b9SSepherosa Ziehau struct jme_ssb { 90376fbb0b9SSepherosa Ziehau uint32_t dw0; 90476fbb0b9SSepherosa Ziehau uint32_t dw1; 90576fbb0b9SSepherosa Ziehau uint32_t dw2; 90676fbb0b9SSepherosa Ziehau uint32_t dw3; 90776fbb0b9SSepherosa Ziehau uint32_t dw4; 90876fbb0b9SSepherosa Ziehau uint32_t dw5; 90976fbb0b9SSepherosa Ziehau uint32_t dw6; 91076fbb0b9SSepherosa Ziehau uint32_t dw7; 91176fbb0b9SSepherosa Ziehau }; 91276fbb0b9SSepherosa Ziehau 91376fbb0b9SSepherosa Ziehau /* JMC250 descriptor structures. */ 91476fbb0b9SSepherosa Ziehau struct jme_desc { 91576fbb0b9SSepherosa Ziehau uint32_t flags; 91676fbb0b9SSepherosa Ziehau uint32_t buflen; 91776fbb0b9SSepherosa Ziehau uint32_t addr_hi; 91876fbb0b9SSepherosa Ziehau uint32_t addr_lo; 91976fbb0b9SSepherosa Ziehau }; 92076fbb0b9SSepherosa Ziehau 92176fbb0b9SSepherosa Ziehau #define JME_TD_OWN 0x80000000 92276fbb0b9SSepherosa Ziehau #define JME_TD_INTR 0x40000000 92376fbb0b9SSepherosa Ziehau #define JME_TD_64BIT 0x20000000 92476fbb0b9SSepherosa Ziehau #define JME_TD_TCPCSUM 0x10000000 92576fbb0b9SSepherosa Ziehau #define JME_TD_UDPCSUM 0x08000000 92676fbb0b9SSepherosa Ziehau #define JME_TD_IPCSUM 0x04000000 92776fbb0b9SSepherosa Ziehau #define JME_TD_TSO 0x02000000 92876fbb0b9SSepherosa Ziehau #define JME_TD_VLAN_TAG 0x01000000 92976fbb0b9SSepherosa Ziehau #define JME_TD_VLAN_MASK 0x0000FFFF 93076fbb0b9SSepherosa Ziehau 93176fbb0b9SSepherosa Ziehau #define JME_TD_MSS_MASK 0xFFFC0000 93276fbb0b9SSepherosa Ziehau #define JME_TD_MSS_SHIFT 18 93376fbb0b9SSepherosa Ziehau #define JME_TD_BUF_LEN_MASK 0x0000FFFF 93476fbb0b9SSepherosa Ziehau #define JME_TD_BUF_LEN_SHIFT 0 93576fbb0b9SSepherosa Ziehau 93676fbb0b9SSepherosa Ziehau #define JME_TD_FRAME_LEN_MASK 0x0000FFFF 93776fbb0b9SSepherosa Ziehau #define JME_TD_FRAME_LEN_SHIFT 0 93876fbb0b9SSepherosa Ziehau 93976fbb0b9SSepherosa Ziehau /* 94076fbb0b9SSepherosa Ziehau * Only the first Tx descriptor of a packet is updated 94176fbb0b9SSepherosa Ziehau * after packet transmission. 94276fbb0b9SSepherosa Ziehau */ 94376fbb0b9SSepherosa Ziehau #define JME_TD_TMOUT 0x20000000 94476fbb0b9SSepherosa Ziehau #define JME_TD_RETRY_EXP 0x10000000 94576fbb0b9SSepherosa Ziehau #define JME_TD_COLLISION 0x08000000 94676fbb0b9SSepherosa Ziehau #define JME_TD_UNDERRUN 0x04000000 94776fbb0b9SSepherosa Ziehau #define JME_TD_EHDR_SIZE_MASK 0x000000FF 94876fbb0b9SSepherosa Ziehau #define JME_TD_EHDR_SIZE_SHIFT 0 94976fbb0b9SSepherosa Ziehau 95076fbb0b9SSepherosa Ziehau #define JME_TD_SEG_CNT_MASK 0xFFFF0000 95176fbb0b9SSepherosa Ziehau #define JME_TD_SEG_CNT_SHIFT 16 95276fbb0b9SSepherosa Ziehau #define JME_TD_RETRY_CNT_MASK 0x0000FFFF 95376fbb0b9SSepherosa Ziehau #define JME_TD_RETRY_CNT_SHIFT 0 95476fbb0b9SSepherosa Ziehau 95576fbb0b9SSepherosa Ziehau #define JME_RD_OWN 0x80000000 95676fbb0b9SSepherosa Ziehau #define JME_RD_INTR 0x40000000 95776fbb0b9SSepherosa Ziehau #define JME_RD_64BIT 0x20000000 95876fbb0b9SSepherosa Ziehau 95976fbb0b9SSepherosa Ziehau #define JME_RD_BUF_LEN_MASK 0x0000FFFF 96076fbb0b9SSepherosa Ziehau #define JME_RD_BUF_LEN_SHIFT 0 96176fbb0b9SSepherosa Ziehau 96276fbb0b9SSepherosa Ziehau /* 96376fbb0b9SSepherosa Ziehau * Only the first Rx descriptor of a packet is updated 96476fbb0b9SSepherosa Ziehau * after packet reception. 96576fbb0b9SSepherosa Ziehau */ 96676fbb0b9SSepherosa Ziehau #define JME_RD_MORE_FRAG 0x20000000 96776fbb0b9SSepherosa Ziehau #define JME_RD_TCP 0x10000000 96876fbb0b9SSepherosa Ziehau #define JME_RD_UDP 0x08000000 96976fbb0b9SSepherosa Ziehau #define JME_RD_IPCSUM 0x04000000 97076fbb0b9SSepherosa Ziehau #define JME_RD_TCPCSUM 0x02000000 97176fbb0b9SSepherosa Ziehau #define JME_RD_UDPCSUM 0x01000000 97276fbb0b9SSepherosa Ziehau #define JME_RD_VLAN_TAG 0x00800000 97376fbb0b9SSepherosa Ziehau #define JME_RD_IPV4 0x00400000 97476fbb0b9SSepherosa Ziehau #define JME_RD_IPV6 0x00200000 97576fbb0b9SSepherosa Ziehau #define JME_RD_PAUSE 0x00100000 97676fbb0b9SSepherosa Ziehau #define JME_RD_MAGIC 0x00080000 97776fbb0b9SSepherosa Ziehau #define JME_RD_WAKEUP 0x00040000 97876fbb0b9SSepherosa Ziehau #define JME_RD_BCAST 0x00030000 97976fbb0b9SSepherosa Ziehau #define JME_RD_MCAST 0x00020000 98076fbb0b9SSepherosa Ziehau #define JME_RD_UCAST 0x00010000 98176fbb0b9SSepherosa Ziehau #define JME_RD_VLAN_MASK 0x0000FFFF 98276fbb0b9SSepherosa Ziehau #define JME_RD_VLAN_SHIFT 0 98376fbb0b9SSepherosa Ziehau 98476fbb0b9SSepherosa Ziehau #define JME_RD_VALID 0x80000000 98576fbb0b9SSepherosa Ziehau #define JME_RD_CNT_MASK 0x7F000000 98676fbb0b9SSepherosa Ziehau #define JME_RD_CNT_SHIFT 24 98776fbb0b9SSepherosa Ziehau #define JME_RD_GIANT 0x00800000 98876fbb0b9SSepherosa Ziehau #define JME_RD_GMII_ERR 0x00400000 98976fbb0b9SSepherosa Ziehau #define JME_RD_NBL_RCVD 0x00200000 99076fbb0b9SSepherosa Ziehau #define JME_RD_COLL 0x00100000 99176fbb0b9SSepherosa Ziehau #define JME_RD_ABORT 0x00080000 99276fbb0b9SSepherosa Ziehau #define JME_RD_RUNT 0x00040000 99376fbb0b9SSepherosa Ziehau #define JME_RD_FIFO_OVRN 0x00020000 99476fbb0b9SSepherosa Ziehau #define JME_RD_CRC_ERR 0x00010000 99576fbb0b9SSepherosa Ziehau #define JME_RD_FRAME_LEN_MASK 0x0000FFFF 99676fbb0b9SSepherosa Ziehau 99776fbb0b9SSepherosa Ziehau #define JME_RX_ERR_STAT \ 99876fbb0b9SSepherosa Ziehau (JME_RD_GIANT | JME_RD_GMII_ERR | JME_RD_NBL_RCVD | \ 99976fbb0b9SSepherosa Ziehau JME_RD_COLL | JME_RD_ABORT | JME_RD_RUNT | \ 100076fbb0b9SSepherosa Ziehau JME_RD_FIFO_OVRN | JME_RD_CRC_ERR) 100176fbb0b9SSepherosa Ziehau 100276fbb0b9SSepherosa Ziehau #define JME_RD_ERR_MASK 0x00FF0000 100376fbb0b9SSepherosa Ziehau #define JME_RD_ERR_SHIFT 16 100476fbb0b9SSepherosa Ziehau #define JME_RX_ERR(x) (((x) & JME_RD_ERR_MASK) >> JME_RD_ERR_SHIFT) 100576fbb0b9SSepherosa Ziehau #define JME_RX_ERR_BITS "\20" \ 100676fbb0b9SSepherosa Ziehau "\1CRCERR\2FIFOOVRN\3RUNT\4ABORT" \ 100776fbb0b9SSepherosa Ziehau "\5COLL\6NBLRCVD\7GMIIERR\10" 100876fbb0b9SSepherosa Ziehau 100976fbb0b9SSepherosa Ziehau #define JME_RX_NSEGS(x) (((x) & JME_RD_CNT_MASK) >> JME_RD_CNT_SHIFT) 101076fbb0b9SSepherosa Ziehau #define JME_RX_BYTES(x) ((x) & JME_RD_FRAME_LEN_MASK) 101176fbb0b9SSepherosa Ziehau #define JME_RX_PAD_BYTES 10 101276fbb0b9SSepherosa Ziehau 101376fbb0b9SSepherosa Ziehau #define JME_RD_RSS_HASH_VALUE 0xFFFFFFFF 101476fbb0b9SSepherosa Ziehau 101576fbb0b9SSepherosa Ziehau #define JME_RD_RSS_HASH_MASK 0x00003F00 101676fbb0b9SSepherosa Ziehau #define JME_RD_RSS_HASH_SHIFT 8 101776fbb0b9SSepherosa Ziehau #define JME_RD_RSS_HASH_NONE 0x00000000 101876fbb0b9SSepherosa Ziehau #define JME_RD_RSS_HASH_IPV4 0x00000100 101976fbb0b9SSepherosa Ziehau #define JME_RD_RSS_HASH_IPV4TCP 0x00000200 102076fbb0b9SSepherosa Ziehau #define JME_RD_RSS_HASH_IPV6 0x00000400 102176fbb0b9SSepherosa Ziehau #define JME_RD_RSS_HASH_IPV6TCP 0x00001000 1022a6acc6e2SSepherosa Ziehau #define JME_RD_HASH_FN_MASK 0x0000000f 102376fbb0b9SSepherosa Ziehau #define JME_RD_HASH_FN_NONE 0x00000000 102476fbb0b9SSepherosa Ziehau #define JME_RD_HASH_FN_TOEPLITZ 0x00000001 102576fbb0b9SSepherosa Ziehau 1026*352c8444SSepherosa Ziehau /* MII_100T2CR */ 1027*352c8444SSepherosa Ziehau #define GTCR_TEST_1 0x2000 1028*352c8444SSepherosa Ziehau 1029*352c8444SSepherosa Ziehau /* MII register, extended register address */ 1030*352c8444SSepherosa Ziehau #define JME_MII_EXT_ADDR 0x1E 1031*352c8444SSepherosa Ziehau #define JME_MII_EXT_ADDR_RD 0x4000 1032*352c8444SSepherosa Ziehau #define JME_MII_EXT_ADDR_WR 0x8000 1033*352c8444SSepherosa Ziehau #define JME_MII_EXT_COM0 0x0030 1034*352c8444SSepherosa Ziehau #define JME_MII_EXT_COM1 0x0031 1035*352c8444SSepherosa Ziehau #define JME_MII_EXT_COM2 0x0032 1036*352c8444SSepherosa Ziehau 1037*352c8444SSepherosa Ziehau /* MII register, extended register data */ 1038*352c8444SSepherosa Ziehau #define JME_MII_EXT_DATA 0x1F 1039*352c8444SSepherosa Ziehau #define JME_MII_EXT_COM2_CALIB_EN 0x0001 1040*352c8444SSepherosa Ziehau #define JME_MII_EXT_COM2_CALIB_MODE0 0x0002 1041*352c8444SSepherosa Ziehau #define JME_MII_EXT_COM2_CALIB_LATCH 0x0010 1042*352c8444SSepherosa Ziehau 104376fbb0b9SSepherosa Ziehau #endif 1044