/* $OpenBSD: dwqereg.h,v 1.10 2024/06/05 10:19:55 stsp Exp $ */ /* * Copyright (c) 2008, 2019 Mark Kettenis * Copyright (c) 2017, 2022 Patrick Wildt * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #define GMAC_MAC_CONF 0x0000 #define GMAC_MAC_CONF_IPC (1 << 27) #define GMAC_MAC_CONF_CST (1 << 21) #define GMAC_MAC_CONF_ACS (1 << 20) #define GMAC_MAC_CONF_BE (1 << 18) #define GMAC_MAC_CONF_JD (1 << 17) #define GMAC_MAC_CONF_JE (1 << 16) #define GMAC_MAC_CONF_PS (1 << 15) #define GMAC_MAC_CONF_FES (1 << 14) #define GMAC_MAC_CONF_DM (1 << 13) #define GMAC_MAC_CONF_DCRS (1 << 9) #define GMAC_MAC_CONF_TE (1 << 1) #define GMAC_MAC_CONF_RE (1 << 0) #define GMAC_MAC_PACKET_FILTER 0x0008 #define GMAC_MAC_PACKET_FILTER_HPF (1 << 10) #define GMAC_MAC_PACKET_FILTER_PCF_MASK (3 << 6) #define GMAC_MAC_PACKET_FILTER_PCF_ALL (2 << 6) #define GMAC_MAC_PACKET_FILTER_DBF (1 << 5) #define GMAC_MAC_PACKET_FILTER_PM (1 << 4) #define GMAC_MAC_PACKET_FILTER_HMC (1 << 2) #define GMAC_MAC_PACKET_FILTER_HUC (1 << 1) #define GMAC_MAC_PACKET_FILTER_PR (1 << 0) #define GMAC_MAC_HASH_TAB_REG0 0x0010 #define GMAC_MAC_HASH_TAB_REG1 0x0014 #define GMAC_INT_MASK 0x003c #define GMAC_INT_MASK_LPIIM (1 << 10) #define GMAC_INT_MASK_PIM (1 << 3) #define GMAC_INT_MASK_RIM (1 << 0) #define GMAC_VLAN_TAG_CTRL 0x0050 #define GMAC_VLAN_TAG_CTRL_EVLRXS (1 << 24) #define GMAC_VLAN_TAG_CTRL_STRIP_ALWAYS ((1 << 21) | (1 << 22)) #define GMAC_VLAN_TAG_DATA 0x0054 #define GMAC_VLAN_TAG_INCL 0x0060 #define GMAC_VLAN_TAG_INCL_VLTI (1 << 20) #define GMAC_VLAN_TAG_INCL_CSVL (1 << 19) #define GMAC_VLAN_TAG_INCL_DELETE 0x10000 #define GMAC_VLAN_TAG_INCL_INSERT 0x20000 #define GMAC_VLAN_TAG_INCL_REPLACE 0x30000 #define GMAC_VLAN_TAG_INCL_VLT 0x0ffff #define GMAC_VLAN_TAG_INCL_RDWR (1U << 30) #define GMAC_VLAN_TAG_INCL_BUSY (1U << 31) #define GMAC_QX_TX_FLOW_CTRL(x) (0x0070 + (x) * 4) #define GMAC_QX_TX_FLOW_CTRL_PT_SHIFT 16 #define GMAC_QX_TX_FLOW_CTRL_TFE (1 << 0) #define GMAC_RX_FLOW_CTRL 0x0090 #define GMAC_RX_FLOW_CTRL_RFE (1 << 0) #define GMAC_RXQ_CTRL0 0x00a0 #define GMAC_RXQ_CTRL0_QUEUE_CLR(x) (0x3 << ((x) * 2) #define GMAC_RXQ_CTRL0_AVB_QUEUE_EN(x) (1 << ((x) * 2)) #define GMAC_RXQ_CTRL0_DCB_QUEUE_EN(x) (2 << ((x) * 2)) #define GMAC_RXQ_CTRL1 0x00a4 #define GMAC_RXQ_CTRL2 0x00a8 #define GMAC_RXQ_CTRL3 0x00ac #define GMAC_INT_STATUS 0x00b0 #define GMAC_INT_EN 0x00b4 #define GMAC_MAC_1US_TIC_CTR 0x00dc #define GMAC_VERSION 0x0110 #define GMAC_VERSION_SNPS_MASK 0xff #define GMAC_MAC_HW_FEATURE(x) (0x011c + (x) * 0x4) #define GMAC_MAC_HW_FEATURE0_TXCOESEL (1 << 14) #define GMAC_MAC_HW_FEATURE0_RXCOESEL (1 << 16) #define GMAC_MAC_HW_FEATURE0_SAVLANINS (1 << 27) #define GMAC_MAC_HW_FEATURE1_TXFIFOSIZE(x) (((x) >> 6) & 0x1f) #define GMAC_MAC_HW_FEATURE1_RXFIFOSIZE(x) (((x) >> 0) & 0x1f) #define GMAC_MAC_MDIO_ADDR 0x0200 #define GMAC_MAC_MDIO_ADDR_PA_SHIFT 21 #define GMAC_MAC_MDIO_ADDR_RDA_SHIFT 16 #define GMAC_MAC_MDIO_ADDR_CR_SHIFT 8 #define GMAC_MAC_MDIO_ADDR_CR_60_100 0 #define GMAC_MAC_MDIO_ADDR_CR_100_150 1 #define GMAC_MAC_MDIO_ADDR_CR_20_35 2 #define GMAC_MAC_MDIO_ADDR_CR_35_60 3 #define GMAC_MAC_MDIO_ADDR_CR_150_250 4 #define GMAC_MAC_MDIO_ADDR_CR_250_300 5 #define GMAC_MAC_MDIO_ADDR_CR_300_500 6 #define GMAC_MAC_MDIO_ADDR_CR_500_800 7 #define GMAC_MAC_MDIO_ADDR_SKAP (1 << 4) #define GMAC_MAC_MDIO_ADDR_GOC_READ (3 << 2) #define GMAC_MAC_MDIO_ADDR_GOC_WRITE (1 << 2) #define GMAC_MAC_MDIO_ADDR_C45E (1 << 1) #define GMAC_MAC_MDIO_ADDR_GB (1 << 0) #define GMAC_MAC_MDIO_DATA 0x0204 #define GMAC_MAC_ADDR0_HI 0x0300 #define GMAC_MAC_ADDR0_LO 0x0304 #define GMAC_MMC_RX_INT_MASK 0x070c #define GMAC_MMC_TX_INT_MASK 0x0710 #define GMAC_MTL_OPERATION_MODE 0x0c00 #define GMAC_MTL_FRPE (1 << 15) #define GMAC_MTL_OPERATION_SCHALG_MASK (0x3 << 5) #define GMAC_MTL_OPERATION_SCHALG_WRR (0x0 << 5) #define GMAC_MTL_OPERATION_SCHALG_WFQ (0x1 << 5) #define GMAC_MTL_OPERATION_SCHALG_DWRR (0x2 << 5) #define GMAC_MTL_OPERATION_SCHALG_SP (0x3 << 5) #define GMAC_MTL_OPERATION_RAA_MASK (0x1 << 2) #define GMAC_MTL_OPERATION_RAA_SP (0x0 << 2) #define GMAC_MTL_OPERATION_RAA_WSP (0x1 << 2) #define GMAC_MTL_CHAN_BASE_ADDR(x) (0x0d00 + (x) * 0x40) #define GMAC_MTL_CHAN_TX_OP_MODE(x) (GMAC_MTL_CHAN_BASE_ADDR(x) + 0x0) #define GMAC_MTL_CHAN_TX_OP_MODE_TQS_MASK (0x1ffU << 16) #define GMAC_MTL_CHAN_TX_OP_MODE_TQS_SHIFT 16 #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_MASK (0x7 << 4) #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_SHIFT 4 #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_32 0 #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_64 (1 << 4) #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_96 (2 << 4) #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_128 (3 << 4) #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_192 (4 << 4) #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_256 (5 << 4) #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_384 (6 << 4) #define GMAC_MTL_CHAN_TX_OP_MODE_TTC_512 (7 << 4) #define GMAC_MTL_CHAN_TX_OP_MODE_TXQEN_MASK (0x3 << 2) #define GMAC_MTL_CHAN_TX_OP_MODE_TXQEN_AV (1 << 2) #define GMAC_MTL_CHAN_TX_OP_MODE_TXQEN (2 << 2) #define GMAC_MTL_CHAN_TX_OP_MODE_TSF (1 << 1) #define GMAC_MTL_CHAN_TX_OP_MODE_FTQ (1 << 0) #define GMAC_MTL_CHAN_TX_DEBUG(x) (GMAC_MTL_CHAN_BASE_ADDR(x) + 0x8) #define GMAC_MTL_CHAN_INT_CTRL(x) (GMAC_MTL_CHAN_BASE_ADDR(x) + 0x2c) #define GMAC_MTL_CHAN_RX_OP_MODE(x) (GMAC_MTL_CHAN_BASE_ADDR(x) + 0x30) #define GMAC_MTL_CHAN_RX_OP_MODE_RQS_MASK (0x3ffU << 20) #define GMAC_MTL_CHAN_RX_OP_MODE_RQS_SHIFT 20 #define GMAC_MTL_CHAN_RX_OP_MODE_RFD_MASK (0x3fU << 14) #define GMAC_MTL_CHAN_RX_OP_MODE_RFD_SHIFT 14 #define GMAC_MTL_CHAN_RX_OP_MODE_RFA_MASK (0x3fU << 8) #define GMAC_MTL_CHAN_RX_OP_MODE_RFA_SHIFT 8 #define GMAC_MTL_CHAN_RX_OP_MODE_EHFC (1 << 7) #define GMAC_MTL_CHAN_RX_OP_MODE_RSF (1 << 5) #define GMAC_MTL_CHAN_RX_OP_MODE_RTC_MASK (0x3 << 3) #define GMAC_MTL_CHAN_RX_OP_MODE_RTC_SHIFT 3 #define GMAC_MTL_CHAN_RX_OP_MODE_RTC_32 (1 << 3) #define GMAC_MTL_CHAN_RX_OP_MODE_RTC_64 (0 << 3) #define GMAC_MTL_CHAN_RX_OP_MODE_RTC_96 (2 << 3) #define GMAC_MTL_CHAN_RX_OP_MODE_RTC_128 (3 << 3) #define GMAC_MTL_CHAN_RX_DEBUG(x) (GMAC_MTL_CHAN_BASE_ADDR(x) + 0x38) #define GMAC_BUS_MODE 0x1000 #define GMAC_BUS_MODE_DCHE (1 << 19) #define GMAC_BUS_MODE_SWR (1 << 0) #define GMAC_SYS_BUS_MODE 0x1004 #define GMAC_SYS_BUS_MODE_EN_LPI (1U << 31) #define GMAC_SYS_BUS_MODE_LPI_XIT_FRM (1 << 30) #define GMAC_SYS_BUS_MODE_WR_OSR_LMT_MASK (0xf << 24) #define GMAC_SYS_BUS_MODE_WR_OSR_LMT_SHIFT 24 #define GMAC_SYS_BUS_MODE_RD_OSR_LMT_MASK (0xf << 16) #define GMAC_SYS_BUS_MODE_RD_OSR_LMT_SHIFT 16 #define GMAC_SYS_BUS_MODE_MB (1 << 14) #define GMAC_SYS_BUS_MODE_AAL (1 << 12) #define GMAC_SYS_BUS_MODE_EAME (1 << 11) #define GMAC_SYS_BUS_MODE_BLEN_256 (1 << 7) #define GMAC_SYS_BUS_MODE_BLEN_128 (1 << 6) #define GMAC_SYS_BUS_MODE_BLEN_64 (1 << 5) #define GMAC_SYS_BUS_MODE_BLEN_32 (1 << 4) #define GMAC_SYS_BUS_MODE_BLEN_16 (1 << 3) #define GMAC_SYS_BUS_MODE_BLEN_8 (1 << 2) #define GMAC_SYS_BUS_MODE_BLEN_4 (1 << 1) #define GMAC_SYS_BUS_MODE_FB (1 << 0) #define GMAC_CHAN_BASE_ADDR(x) (0x1100 + (x) * 0x80) #define GMAC_CHAN_CONTROL(x) (GMAC_CHAN_BASE_ADDR(x) + 0x0) #define GMAC_CHAN_CONTROL_8XPBL (1 << 16) #define GMAC_CHAN_TX_CONTROL(x) (GMAC_CHAN_BASE_ADDR(x) + 0x4) #define GMAC_CHAN_TX_CONTROL_PBL_MASK (0x3f << 16) #define GMAC_CHAN_TX_CONTROL_PBL_SHIFT 16 #define GMAC_CHAN_TX_CONTROL_OSP (1 << 4) #define GMAC_CHAN_TX_CONTROL_ST (1 << 0) #define GMAC_CHAN_RX_CONTROL(x) (GMAC_CHAN_BASE_ADDR(x) + 0x8) #define GMAC_CHAN_RX_CONTROL_RPBL_MASK (0x3f << 16) #define GMAC_CHAN_RX_CONTROL_RPBL_SHIFT 16 #define GMAC_CHAN_RX_CONTROL_SR (1 << 0) #define GMAC_CHAN_TX_BASE_ADDR_HI(x) (GMAC_CHAN_BASE_ADDR(x) + 0x10) #define GMAC_CHAN_TX_BASE_ADDR(x) (GMAC_CHAN_BASE_ADDR(x) + 0x14) #define GMAC_CHAN_RX_BASE_ADDR_HI(x) (GMAC_CHAN_BASE_ADDR(x) + 0x18) #define GMAC_CHAN_RX_BASE_ADDR(x) (GMAC_CHAN_BASE_ADDR(x) + 0x1c) #define GMAC_CHAN_TX_END_ADDR(x) (GMAC_CHAN_BASE_ADDR(x) + 0x20) #define GMAC_CHAN_RX_END_ADDR(x) (GMAC_CHAN_BASE_ADDR(x) + 0x28) #define GMAC_CHAN_TX_RING_LEN(x) (GMAC_CHAN_BASE_ADDR(x) + 0x2c) #define GMAC_CHAN_RX_RING_LEN(x) (GMAC_CHAN_BASE_ADDR(x) + 0x30) #define GMAC_CHAN_INTR_ENA(x) (GMAC_CHAN_BASE_ADDR(x) + 0x34) #define GMAC_CHAN_INTR_ENA_NIE (1 << 15) #define GMAC_CHAN_INTR_ENA_AIE (1 << 14) #define GMAC_CHAN_INTR_ENA_CDE (1 << 13) #define GMAC_CHAN_INTR_ENA_FBE (1 << 12) #define GMAC_CHAN_INTR_ENA_ERE (1 << 11) #define GMAC_CHAN_INTR_ENA_ETE (1 << 10) #define GMAC_CHAN_INTR_ENA_RWE (1 << 9) #define GMAC_CHAN_INTR_ENA_RSE (1 << 8) #define GMAC_CHAN_INTR_ENA_RBUE (1 << 7) #define GMAC_CHAN_INTR_ENA_RIE (1 << 6) #define GMAC_CHAN_INTR_ENA_TBUE (1 << 2) #define GMAC_CHAN_INTR_ENA_TSE (1 << 1) #define GMAC_CHAN_INTR_ENA_TIE (1 << 0) #define GMAC_CHAN_RX_WATCHDOG(x) (GMAC_CHAN_CONTROL(x) + 0x38) #define GMAC_CHAN_SLOT_CTRL_STATUS(x) (GMAC_CHAN_CONTROL(x) + 0x3c) #define GMAC_CHAN_CUR_TX_DESC(x) (GMAC_CHAN_CONTROL(x) + 0x44) #define GMAC_CHAN_CUR_RX_DESC(x) (GMAC_CHAN_CONTROL(x) + 0x4c) #define GMAC_CHAN_CUR_TX_BUF_ADDR(x) (GMAC_CHAN_CONTROL(x) + 0x54) #define GMAC_CHAN_CUR_RX_BUF_ADDR(x) (GMAC_CHAN_CONTROL(x) + 0x5c) #define GMAC_CHAN_STATUS(x) (GMAC_CHAN_CONTROL(x) + 0x60) #define GMAC_CHAN_STATUS_REB_MASK 0x7 #define GMAC_CHAN_STATUS_REB_SHIFT 19 #define GMAC_CHAN_STATUS_TEB_MASK 0x7 #define GMAC_CHAN_STATUS_TEB_SHIFT 16 #define GMAC_CHAN_STATUS_NIS (1 << 15) #define GMAC_CHAN_STATUS_AIS (1 << 14) #define GMAC_CHAN_STATUS_CDE (1 << 13) #define GMAC_CHAN_STATUS_FBE (1 << 12) #define GMAC_CHAN_STATUS_ERI (1 << 11) #define GMAC_CHAN_STATUS_ETI (1 << 10) #define GMAC_CHAN_STATUS_RWT (1 << 9) #define GMAC_CHAN_STATUS_RPS (1 << 8) #define GMAC_CHAN_STATUS_RBU (1 << 7) #define GMAC_CHAN_STATUS_RI (1 << 6) #define GMAC_CHAN_STATUS_TBU (1 << 2) #define GMAC_CHAN_STATUS_TPS (1 << 1) #define GMAC_CHAN_STATUS_TI (1 << 0) /* * DWQE descriptors. */ struct dwqe_desc { uint32_t sd_tdes0; uint32_t sd_tdes1; uint32_t sd_tdes2; uint32_t sd_tdes3; }; /* Tx context descriptor bits (host to device); precedes regular descriptor */ #define TDES3_CTXT (1 << 30) #define TDES3_VLAN_TAG_VALID (1 << 16) #define TDES3_VLAN_TAG 0xffff /* Bit 31 is the OWN bit, as in regular Tx descriptor. */ /* Tx bits (read format; host to device) */ #define TDES2_HDR_LEN 0x000003ff /* if TSO is enabled */ #define TDES2_BUF1_LEN 0x00003fff /* if TSO is disabled */ #define TDES2_VLAN_TIR 0x0000c000 #define TDES2_NO_VLAN_TAGGING (0x0 << 14) #define TDES2_VLAN_TAG_STRIP (0x1 << 14) #define TDES2_VLAN_TAG_INSERT (0x2 << 14) #define TDES2_VLAN_TAG_REPLACE (0x3 << 14) #define TDES2_BUF2_LEN 0x3fff0000 #define TDES2_TX_TIMESTAMP_EN (1 << 30) /* if TSO is disabled */ #define TDES2_TSO_EXTMEM_DIS (1 << 30) /* if TSO is enabled */ #define TDES2_IC (1U << 31) #define TDES3_TCP_PAYLOAD_LEN 0x0003ffff /* if TSO is enabled */ #define TDES3_FRAME_LEN 0x00007fff /* if TSO is disabled */ #define TDES3_CIC 0x00030000 /* if TSO is disabled */ #define TDES3_CSUM_DISABLE (0x0 << 16) #define TDES3_CSUM_IPHDR (0x1 << 16) #define TDES3_CSUM_IPHDR_PAYLOAD (0x2 << 16) #define TDES3_CSUM_IPHDR_PAYLOAD_PSEUDOHDR (0x3 << 16) #define TDES3_TSO_EN (1 << 18) #define TDES3_CPC ((1 << 26) | (1 << 27)) /* if TSO is disabled */ #define TDES3_CPC_CRC_AND_PAD (0x0 << 26) #define TDES3_CPC_CRC_NO_PAD (0x1 << 26) #define TDES3_CPC_DISABLE (0x2 << 26) #define TDES3_CPC_CRC_REPLACE (0x3 << 26) #define TDES3_LS (1 << 28) #define TDES3_FS (1 << 29) #define TDES3_OWN (1U << 31) /* Tx bits (writeback format; device to host) */ #define TDES3_ES (1 << 15) #define TDES3_DE (1 << 23) /* Bit 28 is the LS bit, as in "read" format. */ /* Bit 29 is the FS bit, as in "read" format. */ /* Bit 31 is the OWN bit, as in "read" format. */ /* Rx bits (read format; host to device) */ #define RDES3_BUF1V (1 << 24) #define RDES3_BUF2V (1 << 25) #define RDES3_IC (1 << 30) #define RDES3_OWN (1U << 31) /* Rx bits (writeback format; device to host) */ #define RDES0_IVT 0xffff0000 #define RDES0_OVT 0x0000ffff #define RDES1_IP_PAYLOAD_TYPE 0x7 #define RDES1_IP_PAYLOAD_UNKNOWN 0x0 #define RDES1_IP_PAYLOAD_UDP 0x1 #define RDES1_IP_PAYLOAD_TCP 0x2 #define RDES1_IP_PAYLOAD_ICMP 0x3 #define RDES1_IP_HDR_ERROR (1 << 3) #define RDES1_IPV4_HDR (1 << 4) #define RDES1_IPV6_HDR (1 << 5) #define RDES1_IP_CSUM_BYPASS (1 << 6) #define RDES1_IP_PAYLOAD_ERROR (1 << 7) #define RDES3_LENGTH (0x7fff << 0) #define RDES3_ES (1 << 15) #define RDES3_LENTYPE 0x70000 #define RDES3_LENTYPE_LENGTH (0x0 << 16) #define RDES3_LENTYPE_TYPE (0x1 << 16) /* 0x2 is reserved */ #define RDES3_LENTYPE_ARP (0x3 << 16) #define RDES3_LENTYPE_VLAN (0x4 << 16) #define RDES3_LENTYPE_2VLAN (0x5 << 16) #define RDES3_LENTYPE_MACCTL (0x6 << 16) #define RDES3_LENTYPE_OAM (0x7 << 16) #define RDES3_DE (1 << 19) #define RDES3_RE (1 << 20) #define RDES3_OE (1 << 21) #define RDES3_RWT (1 << 22) #define RDES3_GP (1 << 23) #define RDES3_CE (1 << 24) #define RDES3_RDES0_VALID (1 << 25) #define RDES3_RDES1_VALID (1 << 26) #define RDES3_RDES2_VALID (1 << 27) #define RDES3_LD (1 << 28) #define RDES3_FD (1 << 29) #define RDES3_CTXT (1 << 30) /* Bit 31 is the OWN bit, as in "read" format. */