186d7f5d3SJohn Marino /* $OpenBSD: if_nfereg.h,v 1.19 2006/05/28 00:20:21 brad Exp $ */ 286d7f5d3SJohn Marino /* $DragonFly: src/sys/dev/netif/nfe/if_nfereg.h,v 1.13 2008/07/12 11:44:17 sephe Exp $ */ 386d7f5d3SJohn Marino 486d7f5d3SJohn Marino /* 586d7f5d3SJohn Marino * Copyright (c) 2005 Jonathan Gray <jsg@openbsd.org> 686d7f5d3SJohn Marino * 786d7f5d3SJohn Marino * Permission to use, copy, modify, and distribute this software for any 886d7f5d3SJohn Marino * purpose with or without fee is hereby granted, provided that the above 986d7f5d3SJohn Marino * copyright notice and this permission notice appear in all copies. 1086d7f5d3SJohn Marino * 1186d7f5d3SJohn Marino * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 1286d7f5d3SJohn Marino * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 1386d7f5d3SJohn Marino * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 1486d7f5d3SJohn Marino * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 1586d7f5d3SJohn Marino * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 1686d7f5d3SJohn Marino * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 1786d7f5d3SJohn Marino * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 1886d7f5d3SJohn Marino */ 1986d7f5d3SJohn Marino 2086d7f5d3SJohn Marino #define NFE_PCI_BA 0x10 2186d7f5d3SJohn Marino 2286d7f5d3SJohn Marino #define NFE_RX_RING_DEF_COUNT 256 2386d7f5d3SJohn Marino #define NFE_TX_RING_DEF_COUNT 256 2486d7f5d3SJohn Marino 2586d7f5d3SJohn Marino #define NFE_JUMBO_FRAMELEN 9018 2686d7f5d3SJohn Marino #define NFE_JUMBO_MTU (NFE_JUMBO_FRAMELEN - ETHER_HDR_LEN - ETHER_CRC_LEN) 2786d7f5d3SJohn Marino 2886d7f5d3SJohn Marino #define NFE_JBYTES (NFE_JUMBO_FRAMELEN + ETHER_ALIGN) 2986d7f5d3SJohn Marino #define NFE_JPOOL_COUNT(sc) (((sc)->sc_rx_ring_count * 3) / 2) 3086d7f5d3SJohn Marino #define NFE_JPOOL_SIZE(sc) (NFE_JPOOL_COUNT((sc)) * NFE_JBYTES) 3186d7f5d3SJohn Marino 3286d7f5d3SJohn Marino #if (BUS_SPACE_MAXADDR > BUS_SPACE_MAXADDR_32BIT) 3386d7f5d3SJohn Marino #define NFE_BUS_SPACE_MAXADDR 0x7fffffffffULL /* 39 bit */ 3486d7f5d3SJohn Marino #else 3586d7f5d3SJohn Marino #define NFE_BUS_SPACE_MAXADDR BUS_SPACE_MAXADDR 3686d7f5d3SJohn Marino #endif 3786d7f5d3SJohn Marino 3886d7f5d3SJohn Marino #define NFE_MAX_SCATTER 32 3986d7f5d3SJohn Marino #define NFE_NSEG_SPARE_JUMBO 5 4086d7f5d3SJohn Marino #define NFE_NSEG_SPARE 1 4186d7f5d3SJohn Marino #define NFE_NSEG_RSVD 1 4286d7f5d3SJohn Marino 4386d7f5d3SJohn Marino #define NFE_IRQ_STATUS 0x000 4486d7f5d3SJohn Marino #define NFE_IRQ_MASK 0x004 4586d7f5d3SJohn Marino #define NFE_SETUP_R6 0x008 4686d7f5d3SJohn Marino #define NFE_IMTIMER 0x00c 4786d7f5d3SJohn Marino #define NFE_MAC_RESET 0x034 4886d7f5d3SJohn Marino #define NFE_MISC1 0x080 4986d7f5d3SJohn Marino #define NFE_TX_CTL 0x084 5086d7f5d3SJohn Marino #define NFE_TX_STATUS 0x088 5186d7f5d3SJohn Marino #define NFE_RXFILTER 0x08c 5286d7f5d3SJohn Marino #define NFE_RXBUFSZ 0x090 5386d7f5d3SJohn Marino #define NFE_RX_CTL 0x094 5486d7f5d3SJohn Marino #define NFE_RX_STATUS 0x098 5586d7f5d3SJohn Marino #define NFE_RNDSEED 0x09c 5686d7f5d3SJohn Marino #define NFE_SETUP_R1 0x0a0 5786d7f5d3SJohn Marino #define NFE_SETUP_R2 0x0a4 5886d7f5d3SJohn Marino #define NFE_MACADDR_HI 0x0a8 5986d7f5d3SJohn Marino #define NFE_MACADDR_LO 0x0ac 6086d7f5d3SJohn Marino #define NFE_MULTIADDR_HI 0x0b0 6186d7f5d3SJohn Marino #define NFE_MULTIADDR_LO 0x0b4 6286d7f5d3SJohn Marino #define NFE_MULTIMASK_HI 0x0b8 6386d7f5d3SJohn Marino #define NFE_MULTIMASK_LO 0x0bc 6486d7f5d3SJohn Marino #define NFE_PHY_IFACE 0x0c0 6586d7f5d3SJohn Marino #define NFE_TX_RING_ADDR_LO 0x100 6686d7f5d3SJohn Marino #define NFE_RX_RING_ADDR_LO 0x104 6786d7f5d3SJohn Marino #define NFE_RING_SIZE 0x108 6886d7f5d3SJohn Marino #define NFE_TX_POLL 0x10c 6986d7f5d3SJohn Marino #define NFE_LINKSPEED 0x110 7086d7f5d3SJohn Marino #define NFE_SETUP_R5 0x130 7186d7f5d3SJohn Marino #define NFE_SETUP_R3 0x13C 7286d7f5d3SJohn Marino #define NFE_SETUP_R7 0x140 7386d7f5d3SJohn Marino #define NFE_RXTX_CTL 0x144 7486d7f5d3SJohn Marino #define NFE_TX_RING_ADDR_HI 0x148 7586d7f5d3SJohn Marino #define NFE_RX_RING_ADDR_HI 0x14c 7686d7f5d3SJohn Marino #define NFE_PHY_STATUS 0x180 7786d7f5d3SJohn Marino #define NFE_SETUP_R4 0x184 7886d7f5d3SJohn Marino #define NFE_STATUS 0x188 7986d7f5d3SJohn Marino #define NFE_PHY_SPEED 0x18c 8086d7f5d3SJohn Marino #define NFE_PHY_CTL 0x190 8186d7f5d3SJohn Marino #define NFE_PHY_DATA 0x194 8286d7f5d3SJohn Marino #define NFE_WOL_CTL 0x200 8386d7f5d3SJohn Marino #define NFE_PATTERN_CRC 0x204 8486d7f5d3SJohn Marino #define NFE_PATTERN_MASK 0x208 8586d7f5d3SJohn Marino #define NFE_PWR_CAP 0x268 8686d7f5d3SJohn Marino #define NFE_PWR_STATE 0x26c 8786d7f5d3SJohn Marino #define NFE_VTAG_CTL 0x300 8886d7f5d3SJohn Marino #define NFE_PWR_STATE2 0x600 8986d7f5d3SJohn Marino 9086d7f5d3SJohn Marino #define NFE_PHY_ERROR 0x00001 9186d7f5d3SJohn Marino #define NFE_PHY_WRITE 0x00400 9286d7f5d3SJohn Marino #define NFE_PHY_BUSY 0x08000 9386d7f5d3SJohn Marino #define NFE_PHYADD_SHIFT 5 9486d7f5d3SJohn Marino 9586d7f5d3SJohn Marino #define NFE_STATUS_MAGIC 0x140000 9686d7f5d3SJohn Marino 9786d7f5d3SJohn Marino #define NFE_RESET_ASSERT 0xf3 9886d7f5d3SJohn Marino 9986d7f5d3SJohn Marino #define NFE_TX_STATUS_BUSY 0x1 10086d7f5d3SJohn Marino #define NFE_RX_STATUS_BUSY 0x1 10186d7f5d3SJohn Marino 10286d7f5d3SJohn Marino #define NFE_R1_MAGIC 0x16070f 10386d7f5d3SJohn Marino #define NFE_R2_MAGIC 0x16 10486d7f5d3SJohn Marino #define NFE_R4_MAGIC 0x08 10586d7f5d3SJohn Marino #define NFE_R6_MAGIC 0x03 10686d7f5d3SJohn Marino #define NFE_WOL_ENABLE 0x1111 10786d7f5d3SJohn Marino #define NFE_RX_START 0x01 10886d7f5d3SJohn Marino #define NFE_TX_START 0x01 10986d7f5d3SJohn Marino 11086d7f5d3SJohn Marino #define NFE_IRQ_RXERR 0x0001 11186d7f5d3SJohn Marino #define NFE_IRQ_RX 0x0002 11286d7f5d3SJohn Marino #define NFE_IRQ_RX_NOBUF 0x0004 11386d7f5d3SJohn Marino #define NFE_IRQ_TXERR 0x0008 11486d7f5d3SJohn Marino #define NFE_IRQ_TX_DONE 0x0010 11586d7f5d3SJohn Marino #define NFE_IRQ_TIMER 0x0020 11686d7f5d3SJohn Marino #define NFE_IRQ_LINK 0x0040 11786d7f5d3SJohn Marino #define NFE_IRQ_TXERR2 0x0080 11886d7f5d3SJohn Marino #define NFE_IRQ_TX1 0x0100 11986d7f5d3SJohn Marino 12086d7f5d3SJohn Marino #define NFE_IRQ_NOIMTIMER \ 12186d7f5d3SJohn Marino (NFE_IRQ_RXERR | NFE_IRQ_RX_NOBUF | NFE_IRQ_RX | \ 12286d7f5d3SJohn Marino NFE_IRQ_TXERR | NFE_IRQ_TXERR2 | NFE_IRQ_TX_DONE | \ 12386d7f5d3SJohn Marino NFE_IRQ_LINK) 12486d7f5d3SJohn Marino #define NFE_IRQ_IMTIMER (NFE_IRQ_TIMER | NFE_IRQ_LINK) 12586d7f5d3SJohn Marino 12686d7f5d3SJohn Marino #define NFE_RXTX_KICKTX 0x0001 12786d7f5d3SJohn Marino #define NFE_RXTX_BIT1 0x0002 12886d7f5d3SJohn Marino #define NFE_RXTX_BIT2 0x0004 12986d7f5d3SJohn Marino #define NFE_RXTX_RESET 0x0010 13086d7f5d3SJohn Marino #define NFE_RXTX_VTAG_STRIP 0x0040 13186d7f5d3SJohn Marino #define NFE_RXTX_VTAG_INSERT 0x0080 13286d7f5d3SJohn Marino #define NFE_RXTX_RXCSUM 0x0400 13386d7f5d3SJohn Marino #define NFE_RXTX_DESC_V2 0x002100 13486d7f5d3SJohn Marino #define NFE_RXTX_DESC_V3 0xc02200 13586d7f5d3SJohn Marino #define NFE_RXFILTER_MAGIC 0x007f0008 13686d7f5d3SJohn Marino #define NFE_U2M (1 << 5) 13786d7f5d3SJohn Marino #define NFE_PROMISC (1 << 7) 13886d7f5d3SJohn Marino 13986d7f5d3SJohn Marino #define NFE_IMTIME(t) ((((t) * 100) / 1024) & 0xffff) 14086d7f5d3SJohn Marino /* default interrupt moderation timer of 128us */ 14186d7f5d3SJohn Marino #define NFE_IMTIME_DEFAULT NFE_IMTIME(128) 14286d7f5d3SJohn Marino 14386d7f5d3SJohn Marino #define NFE_VTAG_ENABLE (1 << 13) 14486d7f5d3SJohn Marino 14586d7f5d3SJohn Marino #define NFE_PWR_VALID (1 << 8) 14686d7f5d3SJohn Marino #define NFE_PWR_WAKEUP (1 << 15) 14786d7f5d3SJohn Marino 14886d7f5d3SJohn Marino #define NFE_PWRUP_MASK 0x0f11 14986d7f5d3SJohn Marino #define NFE_PWRUP_REV_A3 0x1 15086d7f5d3SJohn Marino 15186d7f5d3SJohn Marino #define NFE_MEDIA_SET 0x10000 15286d7f5d3SJohn Marino #define NFE_MEDIA_1000T 0x00032 15386d7f5d3SJohn Marino #define NFE_MEDIA_100TX 0x00064 15486d7f5d3SJohn Marino #define NFE_MEDIA_10T 0x003e8 15586d7f5d3SJohn Marino 15686d7f5d3SJohn Marino #define NFE_PHY_100TX (1 << 0) 15786d7f5d3SJohn Marino #define NFE_PHY_1000T (1 << 1) 15886d7f5d3SJohn Marino #define NFE_PHY_HDX (1 << 8) 15986d7f5d3SJohn Marino 16086d7f5d3SJohn Marino #define NFE_MISC1_MAGIC 0x003b0f3c 16186d7f5d3SJohn Marino #define NFE_MISC1_HDX (1 << 1) 16286d7f5d3SJohn Marino 16386d7f5d3SJohn Marino #define NFE_SEED_MASK 0x0003ff00 16486d7f5d3SJohn Marino #define NFE_SEED_10T 0x00007f00 16586d7f5d3SJohn Marino #define NFE_SEED_100TX 0x00002d00 16686d7f5d3SJohn Marino #define NFE_SEED_1000T 0x00007400 16786d7f5d3SJohn Marino 16886d7f5d3SJohn Marino /* Rx/Tx descriptor */ 16986d7f5d3SJohn Marino struct nfe_desc32 { 17086d7f5d3SJohn Marino uint32_t physaddr; 17186d7f5d3SJohn Marino uint16_t length; 17286d7f5d3SJohn Marino uint16_t flags; 17386d7f5d3SJohn Marino #define NFE_RX_FIXME_V1 0x6004 17486d7f5d3SJohn Marino #define NFE_RX_VALID_V1 (1 << 0) 17586d7f5d3SJohn Marino #define NFE_TX_ERROR_V1 0x7808 17686d7f5d3SJohn Marino #define NFE_TX_LASTFRAG_V1 (1 << 0) 17786d7f5d3SJohn Marino } __packed; 17886d7f5d3SJohn Marino 17986d7f5d3SJohn Marino #define NFE_V1_TXERR "\020" \ 18086d7f5d3SJohn Marino "\14TXERROR\13UNDERFLOW\12LATECOLLISION\11LOSTCARRIER\10DEFERRED" \ 18186d7f5d3SJohn Marino "\08FORCEDINT\03RETRY\00LASTPACKET" 18286d7f5d3SJohn Marino 18386d7f5d3SJohn Marino /* V2 Rx/Tx descriptor */ 18486d7f5d3SJohn Marino struct nfe_desc64 { 18586d7f5d3SJohn Marino uint32_t physaddr[2]; 18686d7f5d3SJohn Marino uint32_t vtag; 18786d7f5d3SJohn Marino #define NFE_RX_VTAG (1 << 16) 18886d7f5d3SJohn Marino #define NFE_TX_VTAG (1 << 18) 18986d7f5d3SJohn Marino uint16_t length; 19086d7f5d3SJohn Marino uint16_t flags; 19186d7f5d3SJohn Marino #define NFE_RX_FIXME_V2 0x4300 19286d7f5d3SJohn Marino #define NFE_RX_VALID_V2 (1 << 13) 19386d7f5d3SJohn Marino #define NFE_RX_IP_CSUMOK_V2 0x1000 19486d7f5d3SJohn Marino #define NFE_RX_UDP_CSUMOK_V2 0x1400 19586d7f5d3SJohn Marino #define NFE_RX_TCP_CSUMOK_V2 0x1800 19686d7f5d3SJohn Marino #define NFE_TX_ERROR_V2 0x5c04 19786d7f5d3SJohn Marino #define NFE_TX_LASTFRAG_V2 (1 << 13) 19886d7f5d3SJohn Marino } __packed; 19986d7f5d3SJohn Marino 20086d7f5d3SJohn Marino #define NFE_V2_TXERR "\020" \ 20186d7f5d3SJohn Marino "\14FORCEDINT\13LASTPACKET\12UNDERFLOW\10LOSTCARRIER\09DEFERRED\02RETRY" 20286d7f5d3SJohn Marino 20386d7f5d3SJohn Marino /* flags common to V1/V2 descriptors */ 20486d7f5d3SJohn Marino #define NFE_RX_CSUMOK 0x1c00 20586d7f5d3SJohn Marino #define NFE_RX_ERROR (1 << 14) 20686d7f5d3SJohn Marino #define NFE_RX_READY (1 << 15) 20786d7f5d3SJohn Marino #define NFE_TX_TCP_CSUM (1 << 10) 20886d7f5d3SJohn Marino #define NFE_TX_IP_CSUM (1 << 11) 20986d7f5d3SJohn Marino #define NFE_TX_VALID (1 << 15) 21086d7f5d3SJohn Marino 21186d7f5d3SJohn Marino #define NFE_READ(sc, reg) \ 21286d7f5d3SJohn Marino bus_space_read_4((sc)->sc_memt, (sc)->sc_memh, (reg)) 21386d7f5d3SJohn Marino 21486d7f5d3SJohn Marino #define NFE_WRITE(sc, reg, val) \ 21586d7f5d3SJohn Marino bus_space_write_4((sc)->sc_memt, (sc)->sc_memh, (reg), (val)) 216