1*8ec68754Sbrad /* $OpenBSD: if_vgevar.h,v 1.5 2013/03/15 01:33:23 brad Exp $ */ 280c668ffSpvalchev /* $FreeBSD: if_vgevar.h,v 1.1 2004/09/10 20:57:45 wpaul Exp $ */ 380c668ffSpvalchev /* 480c668ffSpvalchev * Copyright (c) 2004 580c668ffSpvalchev * Bill Paul <wpaul@windriver.com>. All rights reserved. 680c668ffSpvalchev * 780c668ffSpvalchev * Redistribution and use in source and binary forms, with or without 880c668ffSpvalchev * modification, are permitted provided that the following conditions 980c668ffSpvalchev * are met: 1080c668ffSpvalchev * 1. Redistributions of source code must retain the above copyright 1180c668ffSpvalchev * notice, this list of conditions and the following disclaimer. 1280c668ffSpvalchev * 2. Redistributions in binary form must reproduce the above copyright 1380c668ffSpvalchev * notice, this list of conditions and the following disclaimer in the 1480c668ffSpvalchev * documentation and/or other materials provided with the distribution. 1580c668ffSpvalchev * 3. All advertising materials mentioning features or use of this software 1680c668ffSpvalchev * must display the following acknowledgement: 1780c668ffSpvalchev * This product includes software developed by Bill Paul. 1880c668ffSpvalchev * 4. Neither the name of the author nor the names of any co-contributors 1980c668ffSpvalchev * may be used to endorse or promote products derived from this software 2080c668ffSpvalchev * without specific prior written permission. 2180c668ffSpvalchev * 2280c668ffSpvalchev * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND 2380c668ffSpvalchev * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2480c668ffSpvalchev * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2580c668ffSpvalchev * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD 2680c668ffSpvalchev * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2780c668ffSpvalchev * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2880c668ffSpvalchev * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2980c668ffSpvalchev * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 3080c668ffSpvalchev * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 3180c668ffSpvalchev * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 3280c668ffSpvalchev * THE POSSIBILITY OF SUCH DAMAGE. 3380c668ffSpvalchev */ 3480c668ffSpvalchev 3505932b4eSbrad #define VGE_JUMBO_MTU 9000 3605932b4eSbrad 3780c668ffSpvalchev #define VGE_IFQ_MAXLEN 64 3880c668ffSpvalchev 3980c668ffSpvalchev #define VGE_TX_DESC_CNT 256 4080c668ffSpvalchev #define VGE_RX_DESC_CNT 256 /* Must be a multiple of 4!! */ 4180c668ffSpvalchev #define VGE_RING_ALIGN 256 4280c668ffSpvalchev #define VGE_RX_LIST_SZ (VGE_RX_DESC_CNT * sizeof(struct vge_rx_desc)) 4380c668ffSpvalchev #define VGE_TX_LIST_SZ (VGE_TX_DESC_CNT * sizeof(struct vge_tx_desc)) 4480c668ffSpvalchev #define VGE_TX_DESC_INC(x) (x = (x + 1) % VGE_TX_DESC_CNT) 4580c668ffSpvalchev #define VGE_RX_DESC_INC(x) (x = (x + 1) % VGE_RX_DESC_CNT) 4680c668ffSpvalchev #define VGE_ADDR_LO(y) ((u_int64_t) (y) & 0xFFFFFFFF) 4780c668ffSpvalchev #define VGE_ADDR_HI(y) ((u_int64_t) (y) >> 32) 4880c668ffSpvalchev #define VGE_BUFLEN(y) ((y) & 0x7FFF) 4980c668ffSpvalchev #define VGE_OWN(x) (letoh32((x)->vge_sts) & VGE_RDSTS_OWN) 5080c668ffSpvalchev #define VGE_RXBYTES(x) ((letoh32((x)->vge_sts) & \ 5180c668ffSpvalchev VGE_RDSTS_BUFSIZ) >> 16) 5280c668ffSpvalchev #define VGE_MIN_FRAMELEN 60 5380c668ffSpvalchev 5480c668ffSpvalchev #define MAX_NUM_MULTICAST_ADDRESSES 128 5580c668ffSpvalchev 5680c668ffSpvalchev struct vge_softc; 5780c668ffSpvalchev 5880c668ffSpvalchev struct vge_list_data { 5980c668ffSpvalchev struct mbuf *vge_tx_mbuf[VGE_TX_DESC_CNT]; 6080c668ffSpvalchev struct mbuf *vge_rx_mbuf[VGE_RX_DESC_CNT]; 6180c668ffSpvalchev int vge_tx_prodidx; 6280c668ffSpvalchev int vge_rx_prodidx; 6380c668ffSpvalchev int vge_tx_considx; 6480c668ffSpvalchev int vge_tx_free; 6580c668ffSpvalchev bus_dmamap_t vge_tx_dmamap[VGE_TX_DESC_CNT]; 6680c668ffSpvalchev bus_dmamap_t vge_rx_dmamap[VGE_RX_DESC_CNT]; 6780c668ffSpvalchev bus_dma_tag_t vge_mtag; /* mbuf mapping tag */ 6880c668ffSpvalchev bus_dma_segment_t vge_rx_listseg; 6980c668ffSpvalchev bus_dmamap_t vge_rx_list_map; 7080c668ffSpvalchev struct vge_rx_desc *vge_rx_list; 7180c668ffSpvalchev bus_dma_segment_t vge_tx_listseg; 7280c668ffSpvalchev bus_dmamap_t vge_tx_list_map; 7380c668ffSpvalchev struct vge_tx_desc *vge_tx_list; 7480c668ffSpvalchev }; 7580c668ffSpvalchev 7680c668ffSpvalchev struct vge_softc { 7780c668ffSpvalchev struct device vge_dev; 7880c668ffSpvalchev struct arpcom arpcom; /* interface info */ 7980c668ffSpvalchev bus_space_handle_t vge_bhandle; /* bus space handle */ 8080c668ffSpvalchev bus_space_tag_t vge_btag; /* bus space tag */ 81d8ad6bb2Skettenis bus_size_t vge_bsize; 8280c668ffSpvalchev void *vge_intrhand; 8380c668ffSpvalchev bus_dma_tag_t sc_dmat; 84d8ad6bb2Skettenis pci_chipset_tag_t sc_pc; 8580c668ffSpvalchev struct mii_data sc_mii; 8680c668ffSpvalchev int vge_rx_consumed; 8780c668ffSpvalchev int vge_link; 8880c668ffSpvalchev int vge_camidx; 8980c668ffSpvalchev struct timeout timer_handle; 9080c668ffSpvalchev struct mbuf *vge_head; 9180c668ffSpvalchev struct mbuf *vge_tail; 9280c668ffSpvalchev 9380c668ffSpvalchev struct vge_list_data vge_ldata; 9480c668ffSpvalchev }; 9580c668ffSpvalchev 9680c668ffSpvalchev /* 9780c668ffSpvalchev * register space access macros 9880c668ffSpvalchev */ 9980c668ffSpvalchev #define CSR_WRITE_4(sc, reg, val) \ 10080c668ffSpvalchev bus_space_write_4(sc->vge_btag, sc->vge_bhandle, reg, val) 10180c668ffSpvalchev #define CSR_WRITE_2(sc, reg, val) \ 10280c668ffSpvalchev bus_space_write_2(sc->vge_btag, sc->vge_bhandle, reg, val) 10380c668ffSpvalchev #define CSR_WRITE_1(sc, reg, val) \ 10480c668ffSpvalchev bus_space_write_1(sc->vge_btag, sc->vge_bhandle, reg, val) 10580c668ffSpvalchev 10680c668ffSpvalchev #define CSR_READ_4(sc, reg) \ 10780c668ffSpvalchev bus_space_read_4(sc->vge_btag, sc->vge_bhandle, reg) 10880c668ffSpvalchev #define CSR_READ_2(sc, reg) \ 10980c668ffSpvalchev bus_space_read_2(sc->vge_btag, sc->vge_bhandle, reg) 11080c668ffSpvalchev #define CSR_READ_1(sc, reg) \ 11180c668ffSpvalchev bus_space_read_1(sc->vge_btag, sc->vge_bhandle, reg) 11280c668ffSpvalchev 11380c668ffSpvalchev #define CSR_SETBIT_1(sc, reg, x) \ 11480c668ffSpvalchev CSR_WRITE_1(sc, reg, CSR_READ_1(sc, reg) | (x)) 11580c668ffSpvalchev #define CSR_SETBIT_2(sc, reg, x) \ 11680c668ffSpvalchev CSR_WRITE_2(sc, reg, CSR_READ_2(sc, reg) | (x)) 11780c668ffSpvalchev #define CSR_SETBIT_4(sc, reg, x) \ 11880c668ffSpvalchev CSR_WRITE_4(sc, reg, CSR_READ_4(sc, reg) | (x)) 11980c668ffSpvalchev 12080c668ffSpvalchev #define CSR_CLRBIT_1(sc, reg, x) \ 12180c668ffSpvalchev CSR_WRITE_1(sc, reg, CSR_READ_1(sc, reg) & ~(x)) 12280c668ffSpvalchev #define CSR_CLRBIT_2(sc, reg, x) \ 12380c668ffSpvalchev CSR_WRITE_2(sc, reg, CSR_READ_2(sc, reg) & ~(x)) 12480c668ffSpvalchev #define CSR_CLRBIT_4(sc, reg, x) \ 12580c668ffSpvalchev CSR_WRITE_4(sc, reg, CSR_READ_4(sc, reg) & ~(x)) 12680c668ffSpvalchev 12780c668ffSpvalchev #define VGE_TIMEOUT 10000 128