1*86d7f5d3SJohn Marino /* $OpenBSD: if_nfereg.h,v 1.19 2006/05/28 00:20:21 brad Exp $ */ 2*86d7f5d3SJohn Marino /* $DragonFly: src/sys/dev/netif/nfe/if_nfereg.h,v 1.13 2008/07/12 11:44:17 sephe Exp $ */ 3*86d7f5d3SJohn Marino 4*86d7f5d3SJohn Marino /* 5*86d7f5d3SJohn Marino * Copyright (c) 2005 Jonathan Gray <jsg@openbsd.org> 6*86d7f5d3SJohn Marino * 7*86d7f5d3SJohn Marino * Permission to use, copy, modify, and distribute this software for any 8*86d7f5d3SJohn Marino * purpose with or without fee is hereby granted, provided that the above 9*86d7f5d3SJohn Marino * copyright notice and this permission notice appear in all copies. 10*86d7f5d3SJohn Marino * 11*86d7f5d3SJohn Marino * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12*86d7f5d3SJohn Marino * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13*86d7f5d3SJohn Marino * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14*86d7f5d3SJohn Marino * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15*86d7f5d3SJohn Marino * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16*86d7f5d3SJohn Marino * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17*86d7f5d3SJohn Marino * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18*86d7f5d3SJohn Marino */ 19*86d7f5d3SJohn Marino 20*86d7f5d3SJohn Marino #define NFE_PCI_BA 0x10 21*86d7f5d3SJohn Marino 22*86d7f5d3SJohn Marino #define NFE_RX_RING_DEF_COUNT 256 23*86d7f5d3SJohn Marino #define NFE_TX_RING_DEF_COUNT 256 24*86d7f5d3SJohn Marino 25*86d7f5d3SJohn Marino #define NFE_JUMBO_FRAMELEN 9018 26*86d7f5d3SJohn Marino #define NFE_JUMBO_MTU (NFE_JUMBO_FRAMELEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 27*86d7f5d3SJohn Marino 28*86d7f5d3SJohn Marino #define NFE_JBYTES (NFE_JUMBO_FRAMELEN + ETHER_ALIGN) 29*86d7f5d3SJohn Marino #define NFE_JPOOL_COUNT(sc) (((sc)->sc_rx_ring_count * 3) / 2) 30*86d7f5d3SJohn Marino #define NFE_JPOOL_SIZE(sc) (NFE_JPOOL_COUNT((sc)) * NFE_JBYTES) 31*86d7f5d3SJohn Marino 32*86d7f5d3SJohn Marino #if (BUS_SPACE_MAXADDR > BUS_SPACE_MAXADDR_32BIT) 33*86d7f5d3SJohn Marino #define NFE_BUS_SPACE_MAXADDR 0x7fffffffffULL /* 39 bit */ 34*86d7f5d3SJohn Marino #else 35*86d7f5d3SJohn Marino #define NFE_BUS_SPACE_MAXADDR BUS_SPACE_MAXADDR 36*86d7f5d3SJohn Marino #endif 37*86d7f5d3SJohn Marino 38*86d7f5d3SJohn Marino #define NFE_MAX_SCATTER 32 39*86d7f5d3SJohn Marino #define NFE_NSEG_SPARE_JUMBO 5 40*86d7f5d3SJohn Marino #define NFE_NSEG_SPARE 1 41*86d7f5d3SJohn Marino #define NFE_NSEG_RSVD 1 42*86d7f5d3SJohn Marino 43*86d7f5d3SJohn Marino #define NFE_IRQ_STATUS 0x000 44*86d7f5d3SJohn Marino #define NFE_IRQ_MASK 0x004 45*86d7f5d3SJohn Marino #define NFE_SETUP_R6 0x008 46*86d7f5d3SJohn Marino #define NFE_IMTIMER 0x00c 47*86d7f5d3SJohn Marino #define NFE_MAC_RESET 0x034 48*86d7f5d3SJohn Marino #define NFE_MISC1 0x080 49*86d7f5d3SJohn Marino #define NFE_TX_CTL 0x084 50*86d7f5d3SJohn Marino #define NFE_TX_STATUS 0x088 51*86d7f5d3SJohn Marino #define NFE_RXFILTER 0x08c 52*86d7f5d3SJohn Marino #define NFE_RXBUFSZ 0x090 53*86d7f5d3SJohn Marino #define NFE_RX_CTL 0x094 54*86d7f5d3SJohn Marino #define NFE_RX_STATUS 0x098 55*86d7f5d3SJohn Marino #define NFE_RNDSEED 0x09c 56*86d7f5d3SJohn Marino #define NFE_SETUP_R1 0x0a0 57*86d7f5d3SJohn Marino #define NFE_SETUP_R2 0x0a4 58*86d7f5d3SJohn Marino #define NFE_MACADDR_HI 0x0a8 59*86d7f5d3SJohn Marino #define NFE_MACADDR_LO 0x0ac 60*86d7f5d3SJohn Marino #define NFE_MULTIADDR_HI 0x0b0 61*86d7f5d3SJohn Marino #define NFE_MULTIADDR_LO 0x0b4 62*86d7f5d3SJohn Marino #define NFE_MULTIMASK_HI 0x0b8 63*86d7f5d3SJohn Marino #define NFE_MULTIMASK_LO 0x0bc 64*86d7f5d3SJohn Marino #define NFE_PHY_IFACE 0x0c0 65*86d7f5d3SJohn Marino #define NFE_TX_RING_ADDR_LO 0x100 66*86d7f5d3SJohn Marino #define NFE_RX_RING_ADDR_LO 0x104 67*86d7f5d3SJohn Marino #define NFE_RING_SIZE 0x108 68*86d7f5d3SJohn Marino #define NFE_TX_POLL 0x10c 69*86d7f5d3SJohn Marino #define NFE_LINKSPEED 0x110 70*86d7f5d3SJohn Marino #define NFE_SETUP_R5 0x130 71*86d7f5d3SJohn Marino #define NFE_SETUP_R3 0x13C 72*86d7f5d3SJohn Marino #define NFE_SETUP_R7 0x140 73*86d7f5d3SJohn Marino #define NFE_RXTX_CTL 0x144 74*86d7f5d3SJohn Marino #define NFE_TX_RING_ADDR_HI 0x148 75*86d7f5d3SJohn Marino #define NFE_RX_RING_ADDR_HI 0x14c 76*86d7f5d3SJohn Marino #define NFE_PHY_STATUS 0x180 77*86d7f5d3SJohn Marino #define NFE_SETUP_R4 0x184 78*86d7f5d3SJohn Marino #define NFE_STATUS 0x188 79*86d7f5d3SJohn Marino #define NFE_PHY_SPEED 0x18c 80*86d7f5d3SJohn Marino #define NFE_PHY_CTL 0x190 81*86d7f5d3SJohn Marino #define NFE_PHY_DATA 0x194 82*86d7f5d3SJohn Marino #define NFE_WOL_CTL 0x200 83*86d7f5d3SJohn Marino #define NFE_PATTERN_CRC 0x204 84*86d7f5d3SJohn Marino #define NFE_PATTERN_MASK 0x208 85*86d7f5d3SJohn Marino #define NFE_PWR_CAP 0x268 86*86d7f5d3SJohn Marino #define NFE_PWR_STATE 0x26c 87*86d7f5d3SJohn Marino #define NFE_VTAG_CTL 0x300 88*86d7f5d3SJohn Marino #define NFE_PWR_STATE2 0x600 89*86d7f5d3SJohn Marino 90*86d7f5d3SJohn Marino #define NFE_PHY_ERROR 0x00001 91*86d7f5d3SJohn Marino #define NFE_PHY_WRITE 0x00400 92*86d7f5d3SJohn Marino #define NFE_PHY_BUSY 0x08000 93*86d7f5d3SJohn Marino #define NFE_PHYADD_SHIFT 5 94*86d7f5d3SJohn Marino 95*86d7f5d3SJohn Marino #define NFE_STATUS_MAGIC 0x140000 96*86d7f5d3SJohn Marino 97*86d7f5d3SJohn Marino #define NFE_RESET_ASSERT 0xf3 98*86d7f5d3SJohn Marino 99*86d7f5d3SJohn Marino #define NFE_TX_STATUS_BUSY 0x1 100*86d7f5d3SJohn Marino #define NFE_RX_STATUS_BUSY 0x1 101*86d7f5d3SJohn Marino 102*86d7f5d3SJohn Marino #define NFE_R1_MAGIC 0x16070f 103*86d7f5d3SJohn Marino #define NFE_R2_MAGIC 0x16 104*86d7f5d3SJohn Marino #define NFE_R4_MAGIC 0x08 105*86d7f5d3SJohn Marino #define NFE_R6_MAGIC 0x03 106*86d7f5d3SJohn Marino #define NFE_WOL_ENABLE 0x1111 107*86d7f5d3SJohn Marino #define NFE_RX_START 0x01 108*86d7f5d3SJohn Marino #define NFE_TX_START 0x01 109*86d7f5d3SJohn Marino 110*86d7f5d3SJohn Marino #define NFE_IRQ_RXERR 0x0001 111*86d7f5d3SJohn Marino #define NFE_IRQ_RX 0x0002 112*86d7f5d3SJohn Marino #define NFE_IRQ_RX_NOBUF 0x0004 113*86d7f5d3SJohn Marino #define NFE_IRQ_TXERR 0x0008 114*86d7f5d3SJohn Marino #define NFE_IRQ_TX_DONE 0x0010 115*86d7f5d3SJohn Marino #define NFE_IRQ_TIMER 0x0020 116*86d7f5d3SJohn Marino #define NFE_IRQ_LINK 0x0040 117*86d7f5d3SJohn Marino #define NFE_IRQ_TXERR2 0x0080 118*86d7f5d3SJohn Marino #define NFE_IRQ_TX1 0x0100 119*86d7f5d3SJohn Marino 120*86d7f5d3SJohn Marino #define NFE_IRQ_NOIMTIMER \ 121*86d7f5d3SJohn Marino (NFE_IRQ_RXERR | NFE_IRQ_RX_NOBUF | NFE_IRQ_RX | \ 122*86d7f5d3SJohn Marino NFE_IRQ_TXERR | NFE_IRQ_TXERR2 | NFE_IRQ_TX_DONE | \ 123*86d7f5d3SJohn Marino NFE_IRQ_LINK) 124*86d7f5d3SJohn Marino #define NFE_IRQ_IMTIMER (NFE_IRQ_TIMER | NFE_IRQ_LINK) 125*86d7f5d3SJohn Marino 126*86d7f5d3SJohn Marino #define NFE_RXTX_KICKTX 0x0001 127*86d7f5d3SJohn Marino #define NFE_RXTX_BIT1 0x0002 128*86d7f5d3SJohn Marino #define NFE_RXTX_BIT2 0x0004 129*86d7f5d3SJohn Marino #define NFE_RXTX_RESET 0x0010 130*86d7f5d3SJohn Marino #define NFE_RXTX_VTAG_STRIP 0x0040 131*86d7f5d3SJohn Marino #define NFE_RXTX_VTAG_INSERT 0x0080 132*86d7f5d3SJohn Marino #define NFE_RXTX_RXCSUM 0x0400 133*86d7f5d3SJohn Marino #define NFE_RXTX_DESC_V2 0x002100 134*86d7f5d3SJohn Marino #define NFE_RXTX_DESC_V3 0xc02200 135*86d7f5d3SJohn Marino #define NFE_RXFILTER_MAGIC 0x007f0008 136*86d7f5d3SJohn Marino #define NFE_U2M (1 << 5) 137*86d7f5d3SJohn Marino #define NFE_PROMISC (1 << 7) 138*86d7f5d3SJohn Marino 139*86d7f5d3SJohn Marino #define NFE_IMTIME(t) ((((t) * 100) / 1024) & 0xffff) 140*86d7f5d3SJohn Marino /* default interrupt moderation timer of 128us */ 141*86d7f5d3SJohn Marino #define NFE_IMTIME_DEFAULT NFE_IMTIME(128) 142*86d7f5d3SJohn Marino 143*86d7f5d3SJohn Marino #define NFE_VTAG_ENABLE (1 << 13) 144*86d7f5d3SJohn Marino 145*86d7f5d3SJohn Marino #define NFE_PWR_VALID (1 << 8) 146*86d7f5d3SJohn Marino #define NFE_PWR_WAKEUP (1 << 15) 147*86d7f5d3SJohn Marino 148*86d7f5d3SJohn Marino #define NFE_PWRUP_MASK 0x0f11 149*86d7f5d3SJohn Marino #define NFE_PWRUP_REV_A3 0x1 150*86d7f5d3SJohn Marino 151*86d7f5d3SJohn Marino #define NFE_MEDIA_SET 0x10000 152*86d7f5d3SJohn Marino #define NFE_MEDIA_1000T 0x00032 153*86d7f5d3SJohn Marino #define NFE_MEDIA_100TX 0x00064 154*86d7f5d3SJohn Marino #define NFE_MEDIA_10T 0x003e8 155*86d7f5d3SJohn Marino 156*86d7f5d3SJohn Marino #define NFE_PHY_100TX (1 << 0) 157*86d7f5d3SJohn Marino #define NFE_PHY_1000T (1 << 1) 158*86d7f5d3SJohn Marino #define NFE_PHY_HDX (1 << 8) 159*86d7f5d3SJohn Marino 160*86d7f5d3SJohn Marino #define NFE_MISC1_MAGIC 0x003b0f3c 161*86d7f5d3SJohn Marino #define NFE_MISC1_HDX (1 << 1) 162*86d7f5d3SJohn Marino 163*86d7f5d3SJohn Marino #define NFE_SEED_MASK 0x0003ff00 164*86d7f5d3SJohn Marino #define NFE_SEED_10T 0x00007f00 165*86d7f5d3SJohn Marino #define NFE_SEED_100TX 0x00002d00 166*86d7f5d3SJohn Marino #define NFE_SEED_1000T 0x00007400 167*86d7f5d3SJohn Marino 168*86d7f5d3SJohn Marino /* Rx/Tx descriptor */ 169*86d7f5d3SJohn Marino struct nfe_desc32 { 170*86d7f5d3SJohn Marino uint32_t physaddr; 171*86d7f5d3SJohn Marino uint16_t length; 172*86d7f5d3SJohn Marino uint16_t flags; 173*86d7f5d3SJohn Marino #define NFE_RX_FIXME_V1 0x6004 174*86d7f5d3SJohn Marino #define NFE_RX_VALID_V1 (1 << 0) 175*86d7f5d3SJohn Marino #define NFE_TX_ERROR_V1 0x7808 176*86d7f5d3SJohn Marino #define NFE_TX_LASTFRAG_V1 (1 << 0) 177*86d7f5d3SJohn Marino } __packed; 178*86d7f5d3SJohn Marino 179*86d7f5d3SJohn Marino #define NFE_V1_TXERR "\020" \ 180*86d7f5d3SJohn Marino "\14TXERROR\13UNDERFLOW\12LATECOLLISION\11LOSTCARRIER\10DEFERRED" \ 181*86d7f5d3SJohn Marino "\08FORCEDINT\03RETRY\00LASTPACKET" 182*86d7f5d3SJohn Marino 183*86d7f5d3SJohn Marino /* V2 Rx/Tx descriptor */ 184*86d7f5d3SJohn Marino struct nfe_desc64 { 185*86d7f5d3SJohn Marino uint32_t physaddr[2]; 186*86d7f5d3SJohn Marino uint32_t vtag; 187*86d7f5d3SJohn Marino #define NFE_RX_VTAG (1 << 16) 188*86d7f5d3SJohn Marino #define NFE_TX_VTAG (1 << 18) 189*86d7f5d3SJohn Marino uint16_t length; 190*86d7f5d3SJohn Marino uint16_t flags; 191*86d7f5d3SJohn Marino #define NFE_RX_FIXME_V2 0x4300 192*86d7f5d3SJohn Marino #define NFE_RX_VALID_V2 (1 << 13) 193*86d7f5d3SJohn Marino #define NFE_RX_IP_CSUMOK_V2 0x1000 194*86d7f5d3SJohn Marino #define NFE_RX_UDP_CSUMOK_V2 0x1400 195*86d7f5d3SJohn Marino #define NFE_RX_TCP_CSUMOK_V2 0x1800 196*86d7f5d3SJohn Marino #define NFE_TX_ERROR_V2 0x5c04 197*86d7f5d3SJohn Marino #define NFE_TX_LASTFRAG_V2 (1 << 13) 198*86d7f5d3SJohn Marino } __packed; 199*86d7f5d3SJohn Marino 200*86d7f5d3SJohn Marino #define NFE_V2_TXERR "\020" \ 201*86d7f5d3SJohn Marino "\14FORCEDINT\13LASTPACKET\12UNDERFLOW\10LOSTCARRIER\09DEFERRED\02RETRY" 202*86d7f5d3SJohn Marino 203*86d7f5d3SJohn Marino /* flags common to V1/V2 descriptors */ 204*86d7f5d3SJohn Marino #define NFE_RX_CSUMOK 0x1c00 205*86d7f5d3SJohn Marino #define NFE_RX_ERROR (1 << 14) 206*86d7f5d3SJohn Marino #define NFE_RX_READY (1 << 15) 207*86d7f5d3SJohn Marino #define NFE_TX_TCP_CSUM (1 << 10) 208*86d7f5d3SJohn Marino #define NFE_TX_IP_CSUM (1 << 11) 209*86d7f5d3SJohn Marino #define NFE_TX_VALID (1 << 15) 210*86d7f5d3SJohn Marino 211*86d7f5d3SJohn Marino #define NFE_READ(sc, reg) \ 212*86d7f5d3SJohn Marino bus_space_read_4((sc)->sc_memt, (sc)->sc_memh, (reg)) 213*86d7f5d3SJohn Marino 214*86d7f5d3SJohn Marino #define NFE_WRITE(sc, reg, val) \ 215*86d7f5d3SJohn Marino bus_space_write_4((sc)->sc_memt, (sc)->sc_memh, (reg), (val)) 216