1159952Sobrien/* $OpenBSD: if_nfevar.h,v 1.11 2006/02/19 13:57:02 damien Exp $ */ 2159952Sobrien 3159952Sobrien/*- 4159952Sobrien * Copyright (c) 2005 Jonathan Gray <jsg@openbsd.org> 5159952Sobrien * 6159952Sobrien * Permission to use, copy, modify, and distribute this software for any 7159952Sobrien * purpose with or without fee is hereby granted, provided that the above 8159952Sobrien * copyright notice and this permission notice appear in all copies. 9159952Sobrien * 10159952Sobrien * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11159952Sobrien * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12159952Sobrien * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13159952Sobrien * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14159952Sobrien * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15159952Sobrien * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16159952Sobrien * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17159967Sobrien * 18159967Sobrien * $FreeBSD$ 19159952Sobrien */ 20159952Sobrien 21159952Sobrienstruct nfe_tx_data { 22159967Sobrien bus_dmamap_t tx_data_map; 23159952Sobrien struct mbuf *m; 24159952Sobrien}; 25159952Sobrien 26159952Sobrienstruct nfe_tx_ring { 27170589Syongari bus_dma_tag_t tx_desc_tag; 28159967Sobrien bus_dmamap_t tx_desc_map; 29159952Sobrien bus_addr_t physaddr; 30159952Sobrien struct nfe_desc32 *desc32; 31159952Sobrien struct nfe_desc64 *desc64; 32170589Syongari bus_dma_tag_t tx_data_tag; 33159952Sobrien struct nfe_tx_data data[NFE_TX_RING_COUNT]; 34159952Sobrien int queued; 35159952Sobrien int cur; 36159952Sobrien int next; 37159952Sobrien}; 38159952Sobrien 39159952Sobrienstruct nfe_rx_data { 40159967Sobrien bus_dmamap_t rx_data_map; 41170589Syongari bus_addr_t paddr; 42159952Sobrien struct mbuf *m; 43159952Sobrien}; 44159952Sobrien 45159952Sobrienstruct nfe_rx_ring { 46170589Syongari bus_dma_tag_t rx_desc_tag; 47159967Sobrien bus_dmamap_t rx_desc_map; 48159952Sobrien bus_addr_t physaddr; 49159952Sobrien struct nfe_desc32 *desc32; 50159952Sobrien struct nfe_desc64 *desc64; 51170589Syongari bus_dma_tag_t rx_data_tag; 52170589Syongari bus_dmamap_t rx_spare_map; 53159952Sobrien struct nfe_rx_data data[NFE_RX_RING_COUNT]; 54159952Sobrien int cur; 55159952Sobrien int next; 56159952Sobrien}; 57159952Sobrien 58170589Syongaristruct nfe_jrx_ring { 59170589Syongari bus_dma_tag_t jrx_desc_tag; 60170589Syongari bus_dmamap_t jrx_desc_map; 61170589Syongari bus_dma_tag_t jrx_jumbo_tag; 62170589Syongari bus_dmamap_t jrx_jumbo_map; 63170589Syongari bus_addr_t jphysaddr; 64170589Syongari struct nfe_desc32 *jdesc32; 65170589Syongari struct nfe_desc64 *jdesc64; 66170589Syongari bus_dma_tag_t jrx_data_tag; 67170589Syongari bus_dmamap_t jrx_spare_map; 68170589Syongari struct nfe_rx_data jdata[NFE_JUMBO_RX_RING_COUNT]; 69170589Syongari int jcur; 70170589Syongari int jnext; 71170589Syongari}; 72170589Syongari 73183561Syongaristruct nfe_hw_stats { 74183561Syongari uint64_t rx_octets; 75183561Syongari uint32_t rx_frame_errors; 76183561Syongari uint32_t rx_extra_bytes; 77183561Syongari uint32_t rx_late_cols; 78183561Syongari uint32_t rx_runts; 79183561Syongari uint32_t rx_jumbos; 80183561Syongari uint32_t rx_fifo_overuns; 81183561Syongari uint32_t rx_crc_errors; 82183561Syongari uint32_t rx_fae; 83183561Syongari uint32_t rx_len_errors; 84183561Syongari uint32_t rx_unicast; 85183561Syongari uint32_t rx_multicast; 86183561Syongari uint32_t rx_broadcast; 87183561Syongari uint32_t rx_pause; 88183561Syongari uint32_t rx_drops; 89183561Syongari uint64_t tx_octets; 90183561Syongari uint32_t tx_zero_rexmits; 91183561Syongari uint32_t tx_one_rexmits; 92183561Syongari uint32_t tx_multi_rexmits; 93183561Syongari uint32_t tx_late_cols; 94183561Syongari uint32_t tx_fifo_underuns; 95183561Syongari uint32_t tx_carrier_losts; 96183561Syongari uint32_t tx_excess_deferals; 97183561Syongari uint32_t tx_retry_errors; 98183561Syongari uint32_t tx_deferals; 99183561Syongari uint32_t tx_frames; 100183561Syongari uint32_t tx_pause; 101183561Syongari uint32_t tx_unicast; 102183561Syongari uint32_t tx_multicast; 103183561Syongari uint32_t tx_broadcast; 104183561Syongari}; 105183561Syongari 106159952Sobrienstruct nfe_softc { 107159967Sobrien struct ifnet *nfe_ifp; 108159967Sobrien device_t nfe_dev; 109170589Syongari uint16_t nfe_devid; 110170589Syongari uint16_t nfe_revid; 111159967Sobrien device_t nfe_miibus; 112159967Sobrien struct mtx nfe_mtx; 113170589Syongari struct resource *nfe_res[1]; 114170589Syongari struct resource *nfe_msix_res; 115170589Syongari struct resource *nfe_msix_pba_res; 116170589Syongari struct resource *nfe_irq[NFE_MSI_MESSAGES]; 117170589Syongari void *nfe_intrhand[NFE_MSI_MESSAGES]; 118159967Sobrien struct callout nfe_stat_ch; 119170589Syongari int nfe_watchdog_timer; 120159952Sobrien 121159967Sobrien bus_dma_tag_t nfe_parent_tag; 122159952Sobrien 123159967Sobrien int nfe_if_flags; 124170589Syongari uint32_t nfe_flags; 125170589Syongari#define NFE_JUMBO_SUP 0x0001 126170589Syongari#define NFE_40BIT_ADDR 0x0002 127170589Syongari#define NFE_HW_CSUM 0x0004 128170589Syongari#define NFE_HW_VLAN 0x0008 129170589Syongari#define NFE_PWR_MGMT 0x0010 130170589Syongari#define NFE_CORRECT_MACADDR 0x0020 131170589Syongari#define NFE_TX_FLOW_CTRL 0x0040 132183561Syongari#define NFE_MIB_V1 0x0080 133183561Syongari#define NFE_MIB_V2 0x0100 134183561Syongari#define NFE_MIB_V3 0x0200 135171559Syongari int nfe_jumbo_disable; 136170589Syongari uint32_t rxtxctl; 137170589Syongari uint8_t mii_phyaddr; 138170589Syongari uint8_t eaddr[ETHER_ADDR_LEN]; 139183561Syongari struct nfe_hw_stats nfe_stats; 140170589Syongari struct taskqueue *nfe_tq; 141170589Syongari struct task nfe_int_task; 142159967Sobrien int nfe_link; 143170589Syongari int nfe_suspended; 144170589Syongari int nfe_framesize; 145170589Syongari int nfe_process_limit; 146170589Syongari int nfe_force_tx; 147170589Syongari uint32_t nfe_irq_status; 148170589Syongari uint32_t nfe_irq_mask; 149170589Syongari uint32_t nfe_intrs; 150170589Syongari uint32_t nfe_nointrs; 151170589Syongari uint32_t nfe_msi; 152170589Syongari uint32_t nfe_msix; 153159952Sobrien 154159952Sobrien struct nfe_tx_ring txq; 155159952Sobrien struct nfe_rx_ring rxq; 156170589Syongari struct nfe_jrx_ring jrxq; 157159952Sobrien}; 158159967Sobrien 159159967Sobrienstruct nfe_type { 160170589Syongari uint16_t vid_id; 161170589Syongari uint16_t dev_id; 162159967Sobrien char *name; 163159967Sobrien}; 164