1*4bf8ce03SAdrian Chadd /*- 2*4bf8ce03SAdrian Chadd * SPDX-License-Identifier: BSD-2-Clause 3*4bf8ce03SAdrian Chadd * 4*4bf8ce03SAdrian Chadd * Copyright (c) 2019, 2020, 2025 Kevin Lo <kevlo@openbsd.org> 5*4bf8ce03SAdrian Chadd * 6*4bf8ce03SAdrian Chadd * Permission to use, copy, modify, and distribute this software for any 7*4bf8ce03SAdrian Chadd * purpose with or without fee is hereby granted, provided that the above 8*4bf8ce03SAdrian Chadd * copyright notice and this permission notice appear in all copies. 9*4bf8ce03SAdrian Chadd * 10*4bf8ce03SAdrian Chadd * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11*4bf8ce03SAdrian Chadd * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12*4bf8ce03SAdrian Chadd * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13*4bf8ce03SAdrian Chadd * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14*4bf8ce03SAdrian Chadd * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15*4bf8ce03SAdrian Chadd * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16*4bf8ce03SAdrian Chadd * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17*4bf8ce03SAdrian Chadd */ 18*4bf8ce03SAdrian Chadd 19*4bf8ce03SAdrian Chadd /* $OpenBSD: if_rgereg.h,v 1.15 2025/09/19 00:41:14 kevlo Exp $ */ 20*4bf8ce03SAdrian Chadd 21*4bf8ce03SAdrian Chadd #ifndef __IF_RGEREG_H__ 22*4bf8ce03SAdrian Chadd #define __IF_RGEREG_H__ 23*4bf8ce03SAdrian Chadd 24*4bf8ce03SAdrian Chadd #define RGE_PCI_BAR0 PCI_MAPREG_START 25*4bf8ce03SAdrian Chadd #define RGE_PCI_BAR1 (PCI_MAPREG_START + 4) 26*4bf8ce03SAdrian Chadd #define RGE_PCI_BAR2 (PCI_MAPREG_START + 8) 27*4bf8ce03SAdrian Chadd 28*4bf8ce03SAdrian Chadd /* For now, a single MSI message, no multi-RX/TX ring support */ 29*4bf8ce03SAdrian Chadd #define RGE_MSI_MESSAGES 1 30*4bf8ce03SAdrian Chadd 31*4bf8ce03SAdrian Chadd #define RGE_MAC0 0x0000 32*4bf8ce03SAdrian Chadd #define RGE_MAC4 0x0004 33*4bf8ce03SAdrian Chadd #define RGE_MAR0 0x0008 34*4bf8ce03SAdrian Chadd #define RGE_MAR4 0x000c 35*4bf8ce03SAdrian Chadd #define RGE_DTCCR_LO 0x0010 36*4bf8ce03SAdrian Chadd #define RGE_DTCCR_CMD (1U << 3) 37*4bf8ce03SAdrian Chadd #define RGE_DTCCR_HI 0x0014 38*4bf8ce03SAdrian Chadd #define RGE_TXDESC_ADDR_LO 0x0020 39*4bf8ce03SAdrian Chadd #define RGE_TXDESC_ADDR_HI 0x0024 40*4bf8ce03SAdrian Chadd #define RGE_INT_CFG0 0x0034 41*4bf8ce03SAdrian Chadd #define RGE_CMD 0x0037 42*4bf8ce03SAdrian Chadd #define RGE_IMR 0x0038 43*4bf8ce03SAdrian Chadd #define RGE_ISR 0x003c 44*4bf8ce03SAdrian Chadd #define RGE_TXCFG 0x0040 45*4bf8ce03SAdrian Chadd #define RGE_RXCFG 0x0044 46*4bf8ce03SAdrian Chadd #define RGE_TIMERCNT 0x0048 47*4bf8ce03SAdrian Chadd #define RGE_EECMD 0x0050 48*4bf8ce03SAdrian Chadd #define RGE_CFG0 0x0051 49*4bf8ce03SAdrian Chadd #define RGE_CFG1 0x0052 50*4bf8ce03SAdrian Chadd #define RGE_CFG2 0x0053 51*4bf8ce03SAdrian Chadd #define RGE_CFG3 0x0054 52*4bf8ce03SAdrian Chadd #define RGE_CFG4 0x0055 53*4bf8ce03SAdrian Chadd #define RGE_CFG5 0x0056 54*4bf8ce03SAdrian Chadd #define RGE_TDFNR 0x0057 55*4bf8ce03SAdrian Chadd #define RGE_TIMERINT0 0x0058 56*4bf8ce03SAdrian Chadd #define RGE_TIMERINT1 0x005c 57*4bf8ce03SAdrian Chadd #define RGE_CSIDR 0x0064 58*4bf8ce03SAdrian Chadd #define RGE_CSIAR 0x0068 59*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT 0x006c 60*4bf8ce03SAdrian Chadd #define RGE_PMCH 0x006f 61*4bf8ce03SAdrian Chadd #define RGE_INT_CFG1 0x007a 62*4bf8ce03SAdrian Chadd #define RGE_EPHYAR 0x0080 63*4bf8ce03SAdrian Chadd #define RGE_TIMERINT2 0x008c 64*4bf8ce03SAdrian Chadd #define RGE_TXSTART 0x0090 65*4bf8ce03SAdrian Chadd #define RGE_MACOCP 0x00b0 66*4bf8ce03SAdrian Chadd #define RGE_PHYOCP 0x00b8 67*4bf8ce03SAdrian Chadd #define RGE_DLLPR 0x00d0 68*4bf8ce03SAdrian Chadd #define RGE_TWICMD 0x00d2 69*4bf8ce03SAdrian Chadd #define RGE_MCUCMD 0x00d3 70*4bf8ce03SAdrian Chadd #define RGE_RXMAXSIZE 0x00da 71*4bf8ce03SAdrian Chadd #define RGE_CPLUSCMD 0x00e0 72*4bf8ce03SAdrian Chadd #define RGE_IM 0x00e2 73*4bf8ce03SAdrian Chadd #define RGE_RXDESC_ADDR_LO 0x00e4 74*4bf8ce03SAdrian Chadd #define RGE_RXDESC_ADDR_HI 0x00e8 75*4bf8ce03SAdrian Chadd #define RGE_PPSW 0x00f2 76*4bf8ce03SAdrian Chadd #define RGE_TIMERINT3 0x00f4 77*4bf8ce03SAdrian Chadd #define RGE_RADMFIFO_PROTECT 0x0402 78*4bf8ce03SAdrian Chadd #define RGE_INTMITI(i) (0x0a00 + (i) * 4) 79*4bf8ce03SAdrian Chadd #define RGE_PHYBASE 0x0a40 80*4bf8ce03SAdrian Chadd #define RGE_EPHYAR_EXT_ADDR 0x0ffe 81*4bf8ce03SAdrian Chadd #define RGE_ADDR0 0x19e0 82*4bf8ce03SAdrian Chadd #define RGE_ADDR1 0x19e4 83*4bf8ce03SAdrian Chadd #define RGE_RSS_CTRL 0x4500 84*4bf8ce03SAdrian Chadd #define RGE_RXQUEUE_CTRL 0x4800 85*4bf8ce03SAdrian Chadd #define RGE_EEE_TXIDLE_TIMER 0x6048 86*4bf8ce03SAdrian Chadd 87*4bf8ce03SAdrian Chadd /* Flags for register RGE_INT_CFG0 */ 88*4bf8ce03SAdrian Chadd #define RGE_INT_CFG0_EN 0x01 89*4bf8ce03SAdrian Chadd #define RGE_INT_CFG0_TIMEOUT_BYPASS 0x02 90*4bf8ce03SAdrian Chadd #define RGE_INT_CFG0_MITIGATION_BYPASS 0x04 91*4bf8ce03SAdrian Chadd #define RGE_INT_CFG0_RDU_BYPASS_8126 0x10 92*4bf8ce03SAdrian Chadd #define RGE_INT_CFG0_AVOID_MISS_INTR 0x40 93*4bf8ce03SAdrian Chadd 94*4bf8ce03SAdrian Chadd /* Flags for register RGE_CMD */ 95*4bf8ce03SAdrian Chadd #define RGE_CMD_RXBUF_EMPTY 0x01 96*4bf8ce03SAdrian Chadd #define RGE_CMD_TXENB 0x04 97*4bf8ce03SAdrian Chadd #define RGE_CMD_RXENB 0x08 98*4bf8ce03SAdrian Chadd #define RGE_CMD_RESET 0x10 99*4bf8ce03SAdrian Chadd #define RGE_CMD_STOPREQ 0x80 100*4bf8ce03SAdrian Chadd 101*4bf8ce03SAdrian Chadd /* Flags for register RGE_ISR */ 102*4bf8ce03SAdrian Chadd #define RGE_ISR_RX_OK 0x00000001 103*4bf8ce03SAdrian Chadd #define RGE_ISR_RX_ERR 0x00000002 104*4bf8ce03SAdrian Chadd #define RGE_ISR_TX_OK 0x00000004 105*4bf8ce03SAdrian Chadd #define RGE_ISR_TX_ERR 0x00000008 106*4bf8ce03SAdrian Chadd #define RGE_ISR_RX_DESC_UNAVAIL 0x00000010 107*4bf8ce03SAdrian Chadd #define RGE_ISR_LINKCHG 0x00000020 108*4bf8ce03SAdrian Chadd #define RGE_ISR_RX_FIFO_OFLOW 0x00000040 109*4bf8ce03SAdrian Chadd #define RGE_ISR_TX_DESC_UNAVAIL 0x00000080 110*4bf8ce03SAdrian Chadd #define RGE_ISR_SWI 0x00000100 111*4bf8ce03SAdrian Chadd #define RGE_ISR_PCS_TIMEOUT 0x00004000 112*4bf8ce03SAdrian Chadd #define RGE_ISR_SYSTEM_ERR 0x00008000 113*4bf8ce03SAdrian Chadd 114*4bf8ce03SAdrian Chadd #define RGE_INTRS \ 115*4bf8ce03SAdrian Chadd (RGE_ISR_RX_OK | RGE_ISR_RX_ERR | RGE_ISR_TX_OK | \ 116*4bf8ce03SAdrian Chadd RGE_ISR_TX_ERR | RGE_ISR_LINKCHG | RGE_ISR_TX_DESC_UNAVAIL | \ 117*4bf8ce03SAdrian Chadd RGE_ISR_PCS_TIMEOUT | RGE_ISR_SYSTEM_ERR) 118*4bf8ce03SAdrian Chadd 119*4bf8ce03SAdrian Chadd #define RGE_INTRS_TIMER \ 120*4bf8ce03SAdrian Chadd (RGE_ISR_RX_ERR | RGE_ISR_TX_ERR | RGE_ISR_PCS_TIMEOUT | \ 121*4bf8ce03SAdrian Chadd RGE_ISR_SYSTEM_ERR) 122*4bf8ce03SAdrian Chadd 123*4bf8ce03SAdrian Chadd /* Flags for register RGE_TXCFG */ 124*4bf8ce03SAdrian Chadd #define RGE_TXCFG_HWREV 0x7cf00000 125*4bf8ce03SAdrian Chadd 126*4bf8ce03SAdrian Chadd /* Flags for register RGE_RXCFG */ 127*4bf8ce03SAdrian Chadd #define RGE_RXCFG_ALLPHYS 0x00000001 128*4bf8ce03SAdrian Chadd #define RGE_RXCFG_INDIV 0x00000002 129*4bf8ce03SAdrian Chadd #define RGE_RXCFG_MULTI 0x00000004 130*4bf8ce03SAdrian Chadd #define RGE_RXCFG_BROAD 0x00000008 131*4bf8ce03SAdrian Chadd #define RGE_RXCFG_RUNT 0x00000010 132*4bf8ce03SAdrian Chadd #define RGE_RXCFG_ERRPKT 0x00000020 133*4bf8ce03SAdrian Chadd #define RGE_RXCFG_VLANSTRIP 0x00c00000 134*4bf8ce03SAdrian Chadd 135*4bf8ce03SAdrian Chadd /* Flags for register RGE_EECMD */ 136*4bf8ce03SAdrian Chadd #define RGE_EECMD_WRITECFG 0xc0 137*4bf8ce03SAdrian Chadd 138*4bf8ce03SAdrian Chadd /* Flags for register RGE_CFG1 */ 139*4bf8ce03SAdrian Chadd #define RGE_CFG1_PM_EN 0x01 140*4bf8ce03SAdrian Chadd #define RGE_CFG1_SPEED_DOWN 0x10 141*4bf8ce03SAdrian Chadd 142*4bf8ce03SAdrian Chadd /* Flags for register RGE_CFG2 */ 143*4bf8ce03SAdrian Chadd #define RGE_CFG2_PMSTS_EN 0x20 144*4bf8ce03SAdrian Chadd #define RGE_CFG2_CLKREQ_EN 0x80 145*4bf8ce03SAdrian Chadd 146*4bf8ce03SAdrian Chadd /* Flags for register RGE_CFG3 */ 147*4bf8ce03SAdrian Chadd #define RGE_CFG3_RDY_TO_L23 0x02 148*4bf8ce03SAdrian Chadd #define RGE_CFG3_WOL_LINK 0x10 149*4bf8ce03SAdrian Chadd #define RGE_CFG3_WOL_MAGIC 0x20 150*4bf8ce03SAdrian Chadd 151*4bf8ce03SAdrian Chadd /* Flags for register RGE_CFG5 */ 152*4bf8ce03SAdrian Chadd #define RGE_CFG5_PME_STS 0x01 153*4bf8ce03SAdrian Chadd #define RGE_CFG5_WOL_LANWAKE 0x02 154*4bf8ce03SAdrian Chadd #define RGE_CFG5_WOL_UCAST 0x10 155*4bf8ce03SAdrian Chadd #define RGE_CFG5_WOL_MCAST 0x20 156*4bf8ce03SAdrian Chadd #define RGE_CFG5_WOL_BCAST 0x40 157*4bf8ce03SAdrian Chadd 158*4bf8ce03SAdrian Chadd /* Flags for register RGE_CSIAR */ 159*4bf8ce03SAdrian Chadd #define RGE_CSIAR_BYTE_EN 0x0000000f 160*4bf8ce03SAdrian Chadd #define RGE_CSIAR_BYTE_EN_SHIFT 12 161*4bf8ce03SAdrian Chadd #define RGE_CSIAR_ADDR_MASK 0x00000fff 162*4bf8ce03SAdrian Chadd #define RGE_CSIAR_BUSY 0x80000000 163*4bf8ce03SAdrian Chadd 164*4bf8ce03SAdrian Chadd /* Flags for register RGE_PHYSTAT */ 165*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_FDX 0x0001 166*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_LINK 0x0002 167*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_10MBPS 0x0004 168*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_100MBPS 0x0008 169*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_1000MBPS 0x0010 170*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_RXFLOW 0x0020 171*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_TXFLOW 0x0040 172*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_2500MBPS 0x0400 173*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_5000MBPS 0x1000 174*4bf8ce03SAdrian Chadd #define RGE_PHYSTAT_10000MBPS 0x4000 175*4bf8ce03SAdrian Chadd 176*4bf8ce03SAdrian Chadd /* Flags for register RGE_EPHYAR */ 177*4bf8ce03SAdrian Chadd #define RGE_EPHYAR_DATA_MASK 0x0000ffff 178*4bf8ce03SAdrian Chadd #define RGE_EPHYAR_BUSY 0x80000000 179*4bf8ce03SAdrian Chadd #define RGE_EPHYAR_ADDR_MASK 0x0000007f 180*4bf8ce03SAdrian Chadd #define RGE_EPHYAR_ADDR_SHIFT 16 181*4bf8ce03SAdrian Chadd 182*4bf8ce03SAdrian Chadd /* Flags for register RGE_TXSTART */ 183*4bf8ce03SAdrian Chadd #define RGE_TXSTART_START 0x0001 184*4bf8ce03SAdrian Chadd 185*4bf8ce03SAdrian Chadd /* Flags for register RGE_MACOCP */ 186*4bf8ce03SAdrian Chadd #define RGE_MACOCP_DATA_MASK 0x0000ffff 187*4bf8ce03SAdrian Chadd #define RGE_MACOCP_BUSY 0x80000000 188*4bf8ce03SAdrian Chadd #define RGE_MACOCP_ADDR_SHIFT 16 189*4bf8ce03SAdrian Chadd 190*4bf8ce03SAdrian Chadd /* Flags for register RGE_PHYOCP */ 191*4bf8ce03SAdrian Chadd #define RGE_PHYOCP_DATA_MASK 0x0000ffff 192*4bf8ce03SAdrian Chadd #define RGE_PHYOCP_BUSY 0x80000000 193*4bf8ce03SAdrian Chadd #define RGE_PHYOCP_ADDR_SHIFT 16 194*4bf8ce03SAdrian Chadd 195*4bf8ce03SAdrian Chadd /* Flags for register RGE_DLLPR. */ 196*4bf8ce03SAdrian Chadd #define RGE_DLLPR_PFM_EN 0x40 197*4bf8ce03SAdrian Chadd #define RGE_DLLPR_TX_10M_PS_EN 0x80 198*4bf8ce03SAdrian Chadd 199*4bf8ce03SAdrian Chadd /* Flags for register RGE_MCUCMD */ 200*4bf8ce03SAdrian Chadd #define RGE_MCUCMD_RXFIFO_EMPTY 0x10 201*4bf8ce03SAdrian Chadd #define RGE_MCUCMD_TXFIFO_EMPTY 0x20 202*4bf8ce03SAdrian Chadd #define RGE_MCUCMD_IS_OOB 0x80 203*4bf8ce03SAdrian Chadd 204*4bf8ce03SAdrian Chadd /* Flags for register RGE_CPLUSCMD */ 205*4bf8ce03SAdrian Chadd #define RGE_CPLUSCMD_RXCSUM 0x0020 206*4bf8ce03SAdrian Chadd 207*4bf8ce03SAdrian Chadd #define RGE_TX_NSEGS 32 208*4bf8ce03SAdrian Chadd 209*4bf8ce03SAdrian Chadd #define RGE_TX_LIST_CNT 1024 210*4bf8ce03SAdrian Chadd #define RGE_RX_LIST_CNT 1024 211*4bf8ce03SAdrian Chadd 212*4bf8ce03SAdrian Chadd #define RGE_ALIGN 256 213*4bf8ce03SAdrian Chadd #define RGE_TX_LIST_SZ (sizeof(struct rge_tx_desc) * RGE_TX_LIST_CNT) 214*4bf8ce03SAdrian Chadd #define RGE_RX_LIST_SZ (sizeof(struct rge_rx_desc) * RGE_RX_LIST_CNT) 215*4bf8ce03SAdrian Chadd #define RGE_NEXT_TX_DESC(x) (((x) + 1) % RGE_TX_LIST_CNT) 216*4bf8ce03SAdrian Chadd #define RGE_NEXT_RX_DESC(x) (((x) + 1) % RGE_RX_LIST_CNT) 217*4bf8ce03SAdrian Chadd #define RGE_ADDR_LO(y) ((uint64_t) (y) & 0xffffffff) 218*4bf8ce03SAdrian Chadd #define RGE_ADDR_HI(y) ((uint64_t) (y) >> 32) 219*4bf8ce03SAdrian Chadd 220*4bf8ce03SAdrian Chadd #define RGE_ADV_2500TFDX 0x0080 221*4bf8ce03SAdrian Chadd #define RGE_ADV_5000TFDX 0x0100 222*4bf8ce03SAdrian Chadd #define RGE_ADV_10000TFDX 0x1000 223*4bf8ce03SAdrian Chadd 224*4bf8ce03SAdrian Chadd /* Tx descriptor */ 225*4bf8ce03SAdrian Chadd struct rge_tx_desc { 226*4bf8ce03SAdrian Chadd uint32_t rge_cmdsts; 227*4bf8ce03SAdrian Chadd uint32_t rge_extsts; 228*4bf8ce03SAdrian Chadd uint64_t rge_addr; 229*4bf8ce03SAdrian Chadd uint32_t reserved[4]; 230*4bf8ce03SAdrian Chadd } __packed __aligned(16); 231*4bf8ce03SAdrian Chadd 232*4bf8ce03SAdrian Chadd #define RGE_TDCMDSTS_COLL 0x000f0000 233*4bf8ce03SAdrian Chadd #define RGE_TDCMDSTS_EXCESSCOLL 0x00100000 234*4bf8ce03SAdrian Chadd #define RGE_TDCMDSTS_TXERR 0x00800000 235*4bf8ce03SAdrian Chadd #define RGE_TDCMDSTS_EOF 0x10000000 236*4bf8ce03SAdrian Chadd #define RGE_TDCMDSTS_SOF 0x20000000 237*4bf8ce03SAdrian Chadd #define RGE_TDCMDSTS_EOR 0x40000000 238*4bf8ce03SAdrian Chadd #define RGE_TDCMDSTS_OWN 0x80000000 239*4bf8ce03SAdrian Chadd 240*4bf8ce03SAdrian Chadd #define RGE_TDEXTSTS_VTAG 0x00020000 241*4bf8ce03SAdrian Chadd #define RGE_TDEXTSTS_IPCSUM 0x20000000 242*4bf8ce03SAdrian Chadd #define RGE_TDEXTSTS_TCPCSUM 0x40000000 243*4bf8ce03SAdrian Chadd #define RGE_TDEXTSTS_UDPCSUM 0x80000000 244*4bf8ce03SAdrian Chadd 245*4bf8ce03SAdrian Chadd /* Rx descriptor */ 246*4bf8ce03SAdrian Chadd struct rge_rx_desc { 247*4bf8ce03SAdrian Chadd union { 248*4bf8ce03SAdrian Chadd struct { 249*4bf8ce03SAdrian Chadd uint32_t rsvd0; 250*4bf8ce03SAdrian Chadd uint32_t rsvd1; 251*4bf8ce03SAdrian Chadd } rx_qword0; 252*4bf8ce03SAdrian Chadd } lo_qword0; 253*4bf8ce03SAdrian Chadd 254*4bf8ce03SAdrian Chadd union { 255*4bf8ce03SAdrian Chadd struct { 256*4bf8ce03SAdrian Chadd uint32_t rss; 257*4bf8ce03SAdrian Chadd uint16_t length; 258*4bf8ce03SAdrian Chadd uint16_t hdr_info; 259*4bf8ce03SAdrian Chadd } rx_qword1; 260*4bf8ce03SAdrian Chadd 261*4bf8ce03SAdrian Chadd struct { 262*4bf8ce03SAdrian Chadd uint32_t rsvd2; 263*4bf8ce03SAdrian Chadd uint32_t rsvd3; 264*4bf8ce03SAdrian Chadd } rx_qword2; 265*4bf8ce03SAdrian Chadd } lo_qword1; 266*4bf8ce03SAdrian Chadd 267*4bf8ce03SAdrian Chadd union { 268*4bf8ce03SAdrian Chadd uint64_t rge_addr; 269*4bf8ce03SAdrian Chadd 270*4bf8ce03SAdrian Chadd struct { 271*4bf8ce03SAdrian Chadd uint64_t timestamp; 272*4bf8ce03SAdrian Chadd } rx_timestamp; 273*4bf8ce03SAdrian Chadd 274*4bf8ce03SAdrian Chadd struct { 275*4bf8ce03SAdrian Chadd uint32_t rsvd4; 276*4bf8ce03SAdrian Chadd uint32_t rsvd5; 277*4bf8ce03SAdrian Chadd } rx_qword3; 278*4bf8ce03SAdrian Chadd } hi_qword0; 279*4bf8ce03SAdrian Chadd 280*4bf8ce03SAdrian Chadd union { 281*4bf8ce03SAdrian Chadd struct { 282*4bf8ce03SAdrian Chadd uint32_t rge_extsts; 283*4bf8ce03SAdrian Chadd uint32_t rge_cmdsts; 284*4bf8ce03SAdrian Chadd } rx_qword4; 285*4bf8ce03SAdrian Chadd 286*4bf8ce03SAdrian Chadd struct { 287*4bf8ce03SAdrian Chadd uint16_t rsvd6; 288*4bf8ce03SAdrian Chadd uint16_t rsvd7; 289*4bf8ce03SAdrian Chadd uint32_t rsvd8; 290*4bf8ce03SAdrian Chadd } rx_ptp; 291*4bf8ce03SAdrian Chadd } hi_qword1; 292*4bf8ce03SAdrian Chadd } __packed __aligned(16); 293*4bf8ce03SAdrian Chadd 294*4bf8ce03SAdrian Chadd #define RGE_RDCMDSTS_RXERRSUM 0x00100000 295*4bf8ce03SAdrian Chadd #define RGE_RDCMDSTS_EOF 0x01000000 296*4bf8ce03SAdrian Chadd #define RGE_RDCMDSTS_SOF 0x02000000 297*4bf8ce03SAdrian Chadd #define RGE_RDCMDSTS_EOR 0x40000000 298*4bf8ce03SAdrian Chadd #define RGE_RDCMDSTS_OWN 0x80000000 299*4bf8ce03SAdrian Chadd #define RGE_RDCMDSTS_FRAGLEN 0x00003fff 300*4bf8ce03SAdrian Chadd 301*4bf8ce03SAdrian Chadd #define RGE_RDEXTSTS_VTAG 0x00010000 302*4bf8ce03SAdrian Chadd #define RGE_RDEXTSTS_VLAN_MASK 0x0000ffff 303*4bf8ce03SAdrian Chadd #define RGE_RDEXTSTS_TCPCSUMERR 0x01000000 304*4bf8ce03SAdrian Chadd #define RGE_RDEXTSTS_UDPCSUMERR 0x02000000 305*4bf8ce03SAdrian Chadd #define RGE_RDEXTSTS_IPCSUMERR 0x04000000 306*4bf8ce03SAdrian Chadd #define RGE_RDEXTSTS_TCPPKT 0x10000000 307*4bf8ce03SAdrian Chadd #define RGE_RDEXTSTS_UDPPKT 0x20000000 308*4bf8ce03SAdrian Chadd #define RGE_RDEXTSTS_IPV4 0x40000000 309*4bf8ce03SAdrian Chadd #define RGE_RDEXTSTS_IPV6 0x80000000 310*4bf8ce03SAdrian Chadd 311*4bf8ce03SAdrian Chadd /* 312*4bf8ce03SAdrian Chadd * @brief Statistics counter structure 313*4bf8ce03SAdrian Chadd * 314*4bf8ce03SAdrian Chadd * This is the layout of the hardware structure that 315*4bf8ce03SAdrian Chadd * is populated by the hardware when RGE_DTCCR_* is 316*4bf8ce03SAdrian Chadd * appropriately poked. 317*4bf8ce03SAdrian Chadd */ 318*4bf8ce03SAdrian Chadd struct rge_hw_mac_stats { 319*4bf8ce03SAdrian Chadd uint64_t rge_tx_ok; 320*4bf8ce03SAdrian Chadd uint64_t rge_rx_ok; 321*4bf8ce03SAdrian Chadd uint64_t rge_tx_er; 322*4bf8ce03SAdrian Chadd uint32_t rge_rx_er; 323*4bf8ce03SAdrian Chadd uint16_t rge_miss_pkt; 324*4bf8ce03SAdrian Chadd uint16_t rge_fae; /* frame align errors */ 325*4bf8ce03SAdrian Chadd uint32_t rge_tx_1col; /* one collision */ 326*4bf8ce03SAdrian Chadd uint32_t rge_tx_mcol; /* multple collisions */ 327*4bf8ce03SAdrian Chadd uint64_t rge_rx_ok_phy; /* unicast */ 328*4bf8ce03SAdrian Chadd uint64_t rge_rx_ok_brd; /* broadcasts */ 329*4bf8ce03SAdrian Chadd uint32_t rge_rx_ok_mul; /* multicasts */ 330*4bf8ce03SAdrian Chadd uint16_t rge_tx_abt; 331*4bf8ce03SAdrian Chadd uint16_t rge_tx_undrn; 332*4bf8ce03SAdrian Chadd 333*4bf8ce03SAdrian Chadd /* extended */ 334*4bf8ce03SAdrian Chadd uint64_t re_tx_octets; 335*4bf8ce03SAdrian Chadd uint64_t re_rx_octets; 336*4bf8ce03SAdrian Chadd uint64_t re_rx_multicast64; 337*4bf8ce03SAdrian Chadd uint64_t re_tx_unicast64; 338*4bf8ce03SAdrian Chadd uint64_t re_tx_broadcast64; 339*4bf8ce03SAdrian Chadd uint64_t re_tx_multicast64; 340*4bf8ce03SAdrian Chadd uint32_t re_tx_pause_on; 341*4bf8ce03SAdrian Chadd uint32_t re_tx_pause_off; 342*4bf8ce03SAdrian Chadd uint32_t re_tx_pause_all; 343*4bf8ce03SAdrian Chadd uint32_t re_tx_deferred; 344*4bf8ce03SAdrian Chadd uint32_t re_tx_late_collision; 345*4bf8ce03SAdrian Chadd uint32_t re_tx_all_collision; 346*4bf8ce03SAdrian Chadd uint32_t re_tx_aborted32; 347*4bf8ce03SAdrian Chadd uint32_t re_align_errors32; 348*4bf8ce03SAdrian Chadd uint32_t re_rx_frame_too_long; 349*4bf8ce03SAdrian Chadd uint32_t re_rx_runt; 350*4bf8ce03SAdrian Chadd uint32_t re_rx_pause_on; 351*4bf8ce03SAdrian Chadd uint32_t re_rx_pause_off; 352*4bf8ce03SAdrian Chadd uint32_t re_rx_pause_all; 353*4bf8ce03SAdrian Chadd uint32_t re_rx_unknown_opcode; 354*4bf8ce03SAdrian Chadd uint32_t re_rx_mac_error; 355*4bf8ce03SAdrian Chadd uint32_t re_tx_underrun32; 356*4bf8ce03SAdrian Chadd uint32_t re_rx_mac_missed; 357*4bf8ce03SAdrian Chadd uint32_t re_rx_tcam_dropped; 358*4bf8ce03SAdrian Chadd uint32_t re_tdu; 359*4bf8ce03SAdrian Chadd uint32_t re_rdu; 360*4bf8ce03SAdrian Chadd 361*4bf8ce03SAdrian Chadd } __packed __aligned(sizeof(uint64_t)); 362*4bf8ce03SAdrian Chadd 363*4bf8ce03SAdrian Chadd #define RGE_STATS_BUF_SIZE sizeof(struct rge_hw_mac_stats) 364*4bf8ce03SAdrian Chadd 365*4bf8ce03SAdrian Chadd #define RGE_STATS_ALIGNMENT 64 366*4bf8ce03SAdrian Chadd 367*4bf8ce03SAdrian Chadd /* Ram version */ 368*4bf8ce03SAdrian Chadd #define RGE_MAC_R25D_RCODE_VER 0x0027 369*4bf8ce03SAdrian Chadd #define RGE_MAC_R26_RCODE_VER 0x0033 370*4bf8ce03SAdrian Chadd #define RGE_MAC_R27_RCODE_VER 0x0036 371*4bf8ce03SAdrian Chadd #define RGE_MAC_R25_RCODE_VER 0x0b33 372*4bf8ce03SAdrian Chadd #define RGE_MAC_R25B_RCODE_VER 0x0b99 373*4bf8ce03SAdrian Chadd 374*4bf8ce03SAdrian Chadd #define RGE_TIMEOUT 100 375*4bf8ce03SAdrian Chadd 376*4bf8ce03SAdrian Chadd #define RGE_JUMBO_FRAMELEN 9216 377*4bf8ce03SAdrian Chadd #define RGE_JUMBO_MTU \ 378*4bf8ce03SAdrian Chadd (RGE_JUMBO_FRAMELEN - ETHER_HDR_LEN - ETHER_CRC_LEN - \ 379*4bf8ce03SAdrian Chadd ETHER_VLAN_ENCAP_LEN) 380*4bf8ce03SAdrian Chadd 381*4bf8ce03SAdrian Chadd #define RGE_TXCFG_CONFIG 0x03000700 382*4bf8ce03SAdrian Chadd #define RGE_RXCFG_CONFIG 0x41000700 383*4bf8ce03SAdrian Chadd #define RGE_RXCFG_CONFIG_8125B 0x41000c00 384*4bf8ce03SAdrian Chadd #define RGE_RXCFG_CONFIG_8125D 0x41200c00 385*4bf8ce03SAdrian Chadd #define RGE_RXCFG_CONFIG_8126 0x41200d00 386*4bf8ce03SAdrian Chadd 387*4bf8ce03SAdrian Chadd #endif /* __IF_RGEREG_H__ */ 388