1af51229aSJoerg Sonnenberger /* 2af51229aSJoerg Sonnenberger * Copyright (c) 2004 3af51229aSJoerg Sonnenberger * Joerg Sonnenberger <joerg@bec.de>. All rights reserved. 4af51229aSJoerg Sonnenberger * 5af51229aSJoerg Sonnenberger * Copyright (c) 1997, 1998-2003 6af51229aSJoerg Sonnenberger * Bill Paul <wpaul@ctr.columbia.edu>. All rights reserved. 7af51229aSJoerg Sonnenberger * 8af51229aSJoerg Sonnenberger * Redistribution and use in source and binary forms, with or without 9af51229aSJoerg Sonnenberger * modification, are permitted provided that the following conditions 10af51229aSJoerg Sonnenberger * are met: 11af51229aSJoerg Sonnenberger * 1. Redistributions of source code must retain the above copyright 12af51229aSJoerg Sonnenberger * notice, this list of conditions and the following disclaimer. 13af51229aSJoerg Sonnenberger * 2. Redistributions in binary form must reproduce the above copyright 14af51229aSJoerg Sonnenberger * notice, this list of conditions and the following disclaimer in the 15af51229aSJoerg Sonnenberger * documentation and/or other materials provided with the distribution. 16af51229aSJoerg Sonnenberger * 3. All advertising materials mentioning features or use of this software 17af51229aSJoerg Sonnenberger * must display the following acknowledgement: 18af51229aSJoerg Sonnenberger * This product includes software developed by Bill Paul. 19af51229aSJoerg Sonnenberger * 4. Neither the name of the author nor the names of any co-contributors 20af51229aSJoerg Sonnenberger * may be used to endorse or promote products derived from this software 21af51229aSJoerg Sonnenberger * without specific prior written permission. 22af51229aSJoerg Sonnenberger * 23af51229aSJoerg Sonnenberger * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND 24af51229aSJoerg Sonnenberger * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25af51229aSJoerg Sonnenberger * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26af51229aSJoerg Sonnenberger * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD 27af51229aSJoerg Sonnenberger * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 28af51229aSJoerg Sonnenberger * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 29af51229aSJoerg Sonnenberger * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 30af51229aSJoerg Sonnenberger * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 31af51229aSJoerg Sonnenberger * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 32af51229aSJoerg Sonnenberger * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 33af51229aSJoerg Sonnenberger * THE POSSIBILITY OF SUCH DAMAGE. 34af51229aSJoerg Sonnenberger * 35af51229aSJoerg Sonnenberger * $FreeBSD: src/sys/pci/if_rlreg.h,v 1.42 2004/05/24 19:39:23 jhb Exp $ 36af51229aSJoerg Sonnenberger */ 37af51229aSJoerg Sonnenberger 38af51229aSJoerg Sonnenberger #define RE_TXLIST_ADDR_LO 0x0020 /* 64 bits, 256 byte alignment */ 39af51229aSJoerg Sonnenberger #define RE_TXLIST_ADDR_HI 0x0024 /* 64 bits, 256 byte alignment */ 40*e5a5a436SSepherosa Ziehau 41af51229aSJoerg Sonnenberger #define RE_RXLIST_ADDR_LO 0x00E4 /* 64 bits, 256 byte alignment */ 42af51229aSJoerg Sonnenberger #define RE_RXLIST_ADDR_HI 0x00E8 /* 64 bits, 256 byte alignment */ 43af51229aSJoerg Sonnenberger 44*e5a5a436SSepherosa Ziehau #define RE_TIMERINT 0x0058 /* 32 bits */ 45af51229aSJoerg Sonnenberger 46957a8760SSepherosa Ziehau /* 47957a8760SSepherosa Ziehau * Config 2 register bits 48957a8760SSepherosa Ziehau */ 49957a8760SSepherosa Ziehau #define RE_CFG2_PCICLK_MASK 0x07 50957a8760SSepherosa Ziehau #define RE_CFG2_PCICLK_33MHZ 0x00 51957a8760SSepherosa Ziehau #define RE_CFG2_PCICLK_66MHZ 0x01 52957a8760SSepherosa Ziehau #define RE_CFG2_PCI64 0x08 53957a8760SSepherosa Ziehau 54af51229aSJoerg Sonnenberger #define RE_TX_LIST_CNT 4 55af51229aSJoerg Sonnenberger #define RE_MIN_FRAMELEN 60 56af51229aSJoerg Sonnenberger 57d4d77345SSepherosa Ziehau #define RE_IM_MAGIC 0x5050 58d4d77345SSepherosa Ziehau #define RE_IM_RXTIME(t) ((t) & 0xf) 59d4d77345SSepherosa Ziehau #define RE_IM_TXTIME(t) (((t) & 0xf) << 8) 60d4d77345SSepherosa Ziehau 61af51229aSJoerg Sonnenberger /* 62*e5a5a436SSepherosa Ziehau * The 8169/8168 gigE chips support descriptor-based TX and RX. 63*e5a5a436SSepherosa Ziehau * In fact, they even support TCP large send. Descriptors 64af51229aSJoerg Sonnenberger * must be allocated in contiguous blocks that are aligned on a 65*e5a5a436SSepherosa Ziehau * 256-byte boundary. 66af51229aSJoerg Sonnenberger */ 67af51229aSJoerg Sonnenberger 68af51229aSJoerg Sonnenberger /* 69af51229aSJoerg Sonnenberger * RX/TX descriptor definition. When large send mode is enabled, the 70af51229aSJoerg Sonnenberger * lower 11 bits of the TX re_cmd word are used to hold the MSS, and 71af51229aSJoerg Sonnenberger * the checksum offload bits are disabled. The structure layout is 72*e5a5a436SSepherosa Ziehau * the same for RX and TX descriptors. 73af51229aSJoerg Sonnenberger */ 74af51229aSJoerg Sonnenberger 75af51229aSJoerg Sonnenberger struct re_desc { 76af51229aSJoerg Sonnenberger uint32_t re_cmdstat; 77afdeb9daSSepherosa Ziehau uint32_t re_control; 78af51229aSJoerg Sonnenberger uint32_t re_bufaddr_lo; 79af51229aSJoerg Sonnenberger uint32_t re_bufaddr_hi; 80af51229aSJoerg Sonnenberger }; 81af51229aSJoerg Sonnenberger 82af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_FRAGLEN 0x0000FFFF 83af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_TCPCSUM 0x00010000 /* TCP checksum enable */ 84af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_UDPCSUM 0x00020000 /* UDP checksum enable */ 85af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_IPCSUM 0x00040000 /* IP header checksum enable */ 86af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_MSSVAL 0x07FF0000 /* Large send MSS value */ 87af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_LGSEND 0x08000000 /* TCP large send enb */ 88af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_EOF 0x10000000 /* end of frame marker */ 89af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_SOF 0x20000000 /* start of frame marker */ 90af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_EOR 0x40000000 /* end of ring marker */ 91af51229aSJoerg Sonnenberger #define RE_TDESC_CMD_OWN 0x80000000 /* chip owns descriptor */ 92af51229aSJoerg Sonnenberger 93afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_INSTAG 0x00020000 /* Insert VLAN tag */ 94afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_TAGDATA 0x0000FFFF /* TAG data */ 95afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_IPCSUM 0x20000000 /* IP header csum, MAC2 only */ 96afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_TCPCSUM 0x60000000 /* TCP csum, MAC2 only */ 97afdeb9daSSepherosa Ziehau #define RE_TDESC_CTL_UDPCSUM 0xa0000000 /* UDP csum, MAC2 only */ 98af51229aSJoerg Sonnenberger 99af51229aSJoerg Sonnenberger /* 100af51229aSJoerg Sonnenberger * Error bits are valid only on the last descriptor of a frame 101af51229aSJoerg Sonnenberger * (i.e. RE_TDESC_CMD_EOF == 1) 102af51229aSJoerg Sonnenberger */ 103af51229aSJoerg Sonnenberger 104af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_COLCNT 0x000F0000 /* collision count */ 105af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_EXCESSCOL 0x00100000 /* excessive collisions */ 106af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_LINKFAIL 0x00200000 /* link faulure */ 107af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_OWINCOL 0x00400000 /* out-of-window collision */ 108af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_TXERRSUM 0x00800000 /* transmit error summary */ 109af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_UNDERRUN 0x02000000 /* TX underrun occured */ 110af51229aSJoerg Sonnenberger #define RE_TDESC_STAT_OWN 0x80000000 111af51229aSJoerg Sonnenberger 112af51229aSJoerg Sonnenberger /* 113af51229aSJoerg Sonnenberger * RX descriptor cmd/vlan definitions 114af51229aSJoerg Sonnenberger */ 115af51229aSJoerg Sonnenberger 116af51229aSJoerg Sonnenberger #define RE_RDESC_CMD_EOR 0x40000000 117af51229aSJoerg Sonnenberger #define RE_RDESC_CMD_OWN 0x80000000 118af51229aSJoerg Sonnenberger #define RE_RDESC_CMD_BUFLEN 0x00001FFF 119af51229aSJoerg Sonnenberger 120af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_OWN 0x80000000 121af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_EOR 0x40000000 122af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_SOF 0x20000000 123af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_EOF 0x10000000 124af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_FRALIGN 0x08000000 /* frame alignment error */ 125af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_MCAST 0x04000000 /* multicast pkt received */ 126af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_UCAST 0x02000000 /* unicast pkt received */ 127af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_BCAST 0x01000000 /* broadcast pkt received */ 128af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_BUFOFLOW 0x00800000 /* out of buffer space */ 129af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_FIFOOFLOW 0x00400000 /* FIFO overrun */ 130af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_GIANT 0x00200000 /* pkt > 4096 bytes */ 131af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_RXERRSUM 0x00100000 /* RX error summary */ 132af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_RUNT 0x00080000 /* runt packet received */ 133af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_CRCERR 0x00040000 /* CRC error */ 134af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_PROTOID 0x00030000 /* Protocol type */ 135af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_IPSUMBAD 0x00008000 /* IP header checksum bad */ 136af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_UDPSUMBAD 0x00004000 /* UDP checksum bad */ 137af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_TCPSUMBAD 0x00002000 /* TCP checksum bad */ 138af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_FRAGLEN 0x00001FFF /* RX'ed frame/frag len */ 139af51229aSJoerg Sonnenberger #define RE_RDESC_STAT_GFRAGLEN 0x00003FFF /* RX'ed frame/frag len */ 140af51229aSJoerg Sonnenberger 141afdeb9daSSepherosa Ziehau #define RE_RDESC_CTL_HASTAG 0x00010000 /* VLAN tag available 142afdeb9daSSepherosa Ziehau (TAG data valid) */ 143afdeb9daSSepherosa Ziehau #define RE_RDESC_CTL_TAGDATA 0x0000FFFF /* TAG data */ 144afdeb9daSSepherosa Ziehau #define RE_RDESC_CTL_PROTOIP4 0x40000000 /* IPv4 packet, MAC2 only */ 145afdeb9daSSepherosa Ziehau #define RE_RDESC_CTL_PROTOIP6 0x80000000 /* IPv6 packet, MAC2 only */ 146af51229aSJoerg Sonnenberger 147af51229aSJoerg Sonnenberger #define RE_PROTOID_NONIP 0x00000000 148af51229aSJoerg Sonnenberger #define RE_PROTOID_TCPIP 0x00010000 149af51229aSJoerg Sonnenberger #define RE_PROTOID_UDPIP 0x00020000 150af51229aSJoerg Sonnenberger #define RE_PROTOID_IP 0x00030000 151af51229aSJoerg Sonnenberger #define RE_TCPPKT(x) (((x) & RE_RDESC_STAT_PROTOID) == \ 152af51229aSJoerg Sonnenberger RE_PROTOID_TCPIP) 153af51229aSJoerg Sonnenberger #define RE_UDPPKT(x) (((x) & RE_RDESC_STAT_PROTOID) == \ 154af51229aSJoerg Sonnenberger RE_PROTOID_UDPIP) 155af51229aSJoerg Sonnenberger 156af51229aSJoerg Sonnenberger /* 157*e5a5a436SSepherosa Ziehau * Statistics counter structure. 158af51229aSJoerg Sonnenberger */ 159af51229aSJoerg Sonnenberger struct re_stats { 160af51229aSJoerg Sonnenberger uint32_t re_tx_pkts_lo; 161af51229aSJoerg Sonnenberger uint32_t re_tx_pkts_hi; 162af51229aSJoerg Sonnenberger uint32_t re_tx_errs_lo; 163af51229aSJoerg Sonnenberger uint32_t re_tx_errs_hi; 164af51229aSJoerg Sonnenberger uint32_t re_tx_errs; 165af51229aSJoerg Sonnenberger uint16_t re_missed_pkts; 166af51229aSJoerg Sonnenberger uint16_t re_rx_framealign_errs; 167af51229aSJoerg Sonnenberger uint32_t re_tx_onecoll; 168af51229aSJoerg Sonnenberger uint32_t re_tx_multicolls; 169af51229aSJoerg Sonnenberger uint32_t re_rx_ucasts_hi; 170af51229aSJoerg Sonnenberger uint32_t re_rx_ucasts_lo; 171af51229aSJoerg Sonnenberger uint32_t re_rx_bcasts_lo; 172af51229aSJoerg Sonnenberger uint32_t re_rx_bcasts_hi; 173af51229aSJoerg Sonnenberger uint32_t re_rx_mcasts; 174af51229aSJoerg Sonnenberger uint16_t re_tx_aborts; 175af51229aSJoerg Sonnenberger uint16_t re_rx_underruns; 176af51229aSJoerg Sonnenberger }; 177af51229aSJoerg Sonnenberger 178af51229aSJoerg Sonnenberger /* 179af51229aSJoerg Sonnenberger * General constants that are fun to know. 180af51229aSJoerg Sonnenberger * 181af51229aSJoerg Sonnenberger * PCI low memory base and low I/O base register, and 182af51229aSJoerg Sonnenberger * other PCI registers. 183af51229aSJoerg Sonnenberger */ 184af51229aSJoerg Sonnenberger 185af51229aSJoerg Sonnenberger #define RE_PCI_LOMEM 0x14 186ecd80f47SJoerg Sonnenberger #define RE_PCI_LOIO 0x10 1875fdf38d0SSepherosa Ziehau 1885fdf38d0SSepherosa Ziehau #define PCI_SUBDEVICE_LINKSYS_EG1032_REV3 0x0024 189