15330213cSSepherosa Ziehau /* 25330213cSSepherosa Ziehau * Copyright (c) 2001-2008, Intel Corporation 35330213cSSepherosa Ziehau * All rights reserved. 45330213cSSepherosa Ziehau * 55330213cSSepherosa Ziehau * Redistribution and use in source and binary forms, with or without 65330213cSSepherosa Ziehau * modification, are permitted provided that the following conditions are met: 75330213cSSepherosa Ziehau * 85330213cSSepherosa Ziehau * 1. Redistributions of source code must retain the above copyright notice, 95330213cSSepherosa Ziehau * this list of conditions and the following disclaimer. 105330213cSSepherosa Ziehau * 115330213cSSepherosa Ziehau * 2. Redistributions in binary form must reproduce the above copyright 125330213cSSepherosa Ziehau * notice, this list of conditions and the following disclaimer in the 135330213cSSepherosa Ziehau * documentation and/or other materials provided with the distribution. 145330213cSSepherosa Ziehau * 155330213cSSepherosa Ziehau * 3. Neither the name of the Intel Corporation nor the names of its 165330213cSSepherosa Ziehau * contributors may be used to endorse or promote products derived from 175330213cSSepherosa Ziehau * this software without specific prior written permission. 185330213cSSepherosa Ziehau * 195330213cSSepherosa Ziehau * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 205330213cSSepherosa Ziehau * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 215330213cSSepherosa Ziehau * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 225330213cSSepherosa Ziehau * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 235330213cSSepherosa Ziehau * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 245330213cSSepherosa Ziehau * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 255330213cSSepherosa Ziehau * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 265330213cSSepherosa Ziehau * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 275330213cSSepherosa Ziehau * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 285330213cSSepherosa Ziehau * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 295330213cSSepherosa Ziehau * POSSIBILITY OF SUCH DAMAGE. 305330213cSSepherosa Ziehau */ 315330213cSSepherosa Ziehau 325330213cSSepherosa Ziehau #ifndef _IF_EMX_H_ 335330213cSSepherosa Ziehau #define _IF_EMX_H_ 345330213cSSepherosa Ziehau 355330213cSSepherosa Ziehau /* Tunables */ 365330213cSSepherosa Ziehau 375330213cSSepherosa Ziehau /* 385330213cSSepherosa Ziehau * EMX_TXD: Maximum number of Transmit Descriptors 395330213cSSepherosa Ziehau * Valid Range: 256-4096 for others 405330213cSSepherosa Ziehau * Default Value: 512 415330213cSSepherosa Ziehau * This value is the number of transmit descriptors allocated by the driver. 425330213cSSepherosa Ziehau * Increasing this value allows the driver to queue more transmits. Each 435330213cSSepherosa Ziehau * descriptor is 16 bytes. 445330213cSSepherosa Ziehau * Since TDLEN should be multiple of 128bytes, the number of transmit 455330213cSSepherosa Ziehau * desscriptors should meet the following condition. 465330213cSSepherosa Ziehau * (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0 475330213cSSepherosa Ziehau */ 485330213cSSepherosa Ziehau #define EMX_MIN_TXD 256 495330213cSSepherosa Ziehau #define EMX_MAX_TXD 4096 505330213cSSepherosa Ziehau #define EMX_DEFAULT_TXD 512 515330213cSSepherosa Ziehau 525330213cSSepherosa Ziehau /* 535330213cSSepherosa Ziehau * EMX_RXD - Maximum number of receive Descriptors 545330213cSSepherosa Ziehau * Valid Range: 256-4096 for others 555330213cSSepherosa Ziehau * Default Value: 512 565330213cSSepherosa Ziehau * This value is the number of receive descriptors allocated by the driver. 575330213cSSepherosa Ziehau * Increasing this value allows the driver to buffer more incoming packets. 585330213cSSepherosa Ziehau * Each descriptor is 16 bytes. A receive buffer is also allocated for each 595330213cSSepherosa Ziehau * descriptor. The maximum MTU size is 16110. 605330213cSSepherosa Ziehau * Since TDLEN should be multiple of 128bytes, the number of transmit 615330213cSSepherosa Ziehau * desscriptors should meet the following condition. 625330213cSSepherosa Ziehau * (num_tx_desc * sizeof(struct e1000_tx_desc)) % 128 == 0 635330213cSSepherosa Ziehau */ 645330213cSSepherosa Ziehau #define EMX_MIN_RXD 256 655330213cSSepherosa Ziehau #define EMX_MAX_RXD 4096 665330213cSSepherosa Ziehau #define EMX_DEFAULT_RXD 512 675330213cSSepherosa Ziehau 685330213cSSepherosa Ziehau /* 695330213cSSepherosa Ziehau * Receive Interrupt Delay Timer (Packet Timer) 705330213cSSepherosa Ziehau * 715330213cSSepherosa Ziehau * NOTE: 725330213cSSepherosa Ziehau * RDTR and RADV are deprecated; use ITR instead. They are only used to 735330213cSSepherosa Ziehau * workaround hardware bug on certain 82573 based NICs. 745330213cSSepherosa Ziehau */ 755330213cSSepherosa Ziehau #define EMX_RDTR_82573 32 765330213cSSepherosa Ziehau 775330213cSSepherosa Ziehau /* 785330213cSSepherosa Ziehau * Receive Interrupt Absolute Delay Timer (Not valid for 82542/82543/82544) 795330213cSSepherosa Ziehau * 805330213cSSepherosa Ziehau * NOTE: 815330213cSSepherosa Ziehau * RDTR and RADV are deprecated; use ITR instead. They are only used to 825330213cSSepherosa Ziehau * workaround hardware bug on certain 82573 based NICs. 835330213cSSepherosa Ziehau */ 845330213cSSepherosa Ziehau #define EMX_RADV_82573 64 855330213cSSepherosa Ziehau 865330213cSSepherosa Ziehau /* 875330213cSSepherosa Ziehau * This parameter controls the duration of transmit watchdog timer. 885330213cSSepherosa Ziehau */ 895330213cSSepherosa Ziehau #define EMX_TX_TIMEOUT 5 905330213cSSepherosa Ziehau 91*dc07210eSSepherosa Ziehau /* One for TX csum offloading desc, the other 2 are reserved */ 92*dc07210eSSepherosa Ziehau #define EMX_TX_RESERVED 3 935330213cSSepherosa Ziehau 945330213cSSepherosa Ziehau /* Large enough for 16K jumbo frame */ 955330213cSSepherosa Ziehau #define EMX_TX_SPARE 8 965330213cSSepherosa Ziehau 975330213cSSepherosa Ziehau #define EMX_TX_OACTIVE_MAX 64 985330213cSSepherosa Ziehau 995330213cSSepherosa Ziehau /* Interrupt throttle rate */ 1005330213cSSepherosa Ziehau #define EMX_DEFAULT_ITR 10000 1015330213cSSepherosa Ziehau 1025330213cSSepherosa Ziehau /* 1035330213cSSepherosa Ziehau * This parameter controls whether or not autonegotation is enabled. 1045330213cSSepherosa Ziehau * 0 - Disable autonegotiation 1055330213cSSepherosa Ziehau * 1 - Enable autonegotiation 1065330213cSSepherosa Ziehau */ 1075330213cSSepherosa Ziehau #define EMX_DO_AUTO_NEG 1 1085330213cSSepherosa Ziehau 1095330213cSSepherosa Ziehau /* Tunables -- End */ 1105330213cSSepherosa Ziehau 1115330213cSSepherosa Ziehau #define EMX_AUTONEG_ADV_DEFAULT (ADVERTISE_10_HALF | \ 1125330213cSSepherosa Ziehau ADVERTISE_10_FULL | \ 1135330213cSSepherosa Ziehau ADVERTISE_100_HALF | \ 1145330213cSSepherosa Ziehau ADVERTISE_100_FULL | \ 1155330213cSSepherosa Ziehau ADVERTISE_1000_FULL) 1165330213cSSepherosa Ziehau 1175330213cSSepherosa Ziehau #define EMX_AUTO_ALL_MODES 0 1185330213cSSepherosa Ziehau 1195330213cSSepherosa Ziehau /* PHY master/slave setting */ 1205330213cSSepherosa Ziehau #define EMX_MASTER_SLAVE e1000_ms_hw_default 1215330213cSSepherosa Ziehau 1225330213cSSepherosa Ziehau /* 1235330213cSSepherosa Ziehau * Micellaneous constants 1245330213cSSepherosa Ziehau */ 1255330213cSSepherosa Ziehau #define EMX_VENDOR_ID 0x8086 1265330213cSSepherosa Ziehau 1275330213cSSepherosa Ziehau #define EMX_BAR_MEM PCIR_BAR(0) 1285330213cSSepherosa Ziehau 1295330213cSSepherosa Ziehau #define EMX_JUMBO_PBA 0x00000028 1305330213cSSepherosa Ziehau #define EMX_DEFAULT_PBA 0x00000030 1315330213cSSepherosa Ziehau #define EMX_SMARTSPEED_DOWNSHIFT 3 1325330213cSSepherosa Ziehau #define EMX_SMARTSPEED_MAX 15 1335330213cSSepherosa Ziehau #define EMX_MAX_INTR 10 1345330213cSSepherosa Ziehau 1355330213cSSepherosa Ziehau #define EMX_MCAST_ADDR_MAX 128 1365330213cSSepherosa Ziehau #define EMX_FC_PAUSE_TIME 1000 1375330213cSSepherosa Ziehau #define EMX_EEPROM_APME 0x400; 1385330213cSSepherosa Ziehau 1395330213cSSepherosa Ziehau /* 1405330213cSSepherosa Ziehau * TDBA/RDBA should be aligned on 16 byte boundary. But TDLEN/RDLEN should be 1415330213cSSepherosa Ziehau * multiple of 128 bytes. So we align TDBA/RDBA on 128 byte boundary. This will 1425330213cSSepherosa Ziehau * also optimize cache line size effect. H/W supports up to cache line size 128. 1435330213cSSepherosa Ziehau */ 1445330213cSSepherosa Ziehau #define EMX_DBA_ALIGN 128 1455330213cSSepherosa Ziehau 1465330213cSSepherosa Ziehau /* 1475330213cSSepherosa Ziehau * Speed mode bit in TARC0/TARC1. 1485330213cSSepherosa Ziehau * 82571EB/82572EI only, used to improve small packet transmit performance. 1495330213cSSepherosa Ziehau */ 1505330213cSSepherosa Ziehau #define EMX_TARC_SPEED_MODE (1 << 21) 1515330213cSSepherosa Ziehau 1525330213cSSepherosa Ziehau #define EMX_MAX_SCATTER 64 1535330213cSSepherosa Ziehau #define EMX_TSO_SIZE (65535 + \ 1545330213cSSepherosa Ziehau sizeof(struct ether_vlan_header)) 1555330213cSSepherosa Ziehau #define EMX_MAX_SEGSIZE 4096 1565330213cSSepherosa Ziehau #define EMX_MSIX_MASK 0x01F00000 /* For 82574 use */ 1575330213cSSepherosa Ziehau 1585330213cSSepherosa Ziehau #define EMX_CSUM_FEATURES (CSUM_IP | CSUM_TCP | CSUM_UDP) 1595330213cSSepherosa Ziehau #define EMX_IPVHL_SIZE 1 /* sizeof(ip.ip_vhl) */ 1605330213cSSepherosa Ziehau #define EMX_TXCSUM_MINHL (ETHER_HDR_LEN + EVL_ENCAPLEN + \ 1615330213cSSepherosa Ziehau EMX_IPVHL_SIZE) 1625330213cSSepherosa Ziehau 1635330213cSSepherosa Ziehau /* 1645330213cSSepherosa Ziehau * 82574 has a nonstandard address for EIAC 1655330213cSSepherosa Ziehau * and since its only used in MSIX, and in 1665330213cSSepherosa Ziehau * the em driver only 82574 uses MSIX we can 1675330213cSSepherosa Ziehau * solve it just using this define. 1685330213cSSepherosa Ziehau */ 1695330213cSSepherosa Ziehau #define EMX_EIAC 0x000DC 1705330213cSSepherosa Ziehau 1713f939c23SSepherosa Ziehau #define EMX_NRSSRK 10 17289d8e73dSSepherosa Ziehau #define EMX_RSSRK_SIZE 4 17389d8e73dSSepherosa Ziehau #define EMX_RSSRK_VAL(key, i) (key[(i) * EMX_RSSRK_SIZE] | \ 17489d8e73dSSepherosa Ziehau key[(i) * EMX_RSSRK_SIZE + 1] << 8 | \ 17589d8e73dSSepherosa Ziehau key[(i) * EMX_RSSRK_SIZE + 2] << 16 | \ 17689d8e73dSSepherosa Ziehau key[(i) * EMX_RSSRK_SIZE + 3] << 24) 17789d8e73dSSepherosa Ziehau 1783f939c23SSepherosa Ziehau #define EMX_NRETA 32 17989d8e73dSSepherosa Ziehau #define EMX_RETA_SIZE 4 18089d8e73dSSepherosa Ziehau #define EMX_RETA_RINGIDX_SHIFT 7 1813f939c23SSepherosa Ziehau 182c39e3a1fSSepherosa Ziehau #define EMX_NRX_RING 2 1836d435846SSepherosa Ziehau #define EMX_NSERIALIZE 4 184c39e3a1fSSepherosa Ziehau 185235b9d30SSepherosa Ziehau typedef union e1000_rx_desc_extended emx_rxdesc_t; 186235b9d30SSepherosa Ziehau 187235b9d30SSepherosa Ziehau #define rxd_bufaddr read.buffer_addr /* 64bits */ 188235b9d30SSepherosa Ziehau #define rxd_length wb.upper.length /* 16bits */ 189235b9d30SSepherosa Ziehau #define rxd_vlan wb.upper.vlan /* 16bits */ 190235b9d30SSepherosa Ziehau #define rxd_staterr wb.upper.status_error /* 32bits */ 1913f939c23SSepherosa Ziehau #define rxd_mrq wb.lower.mrq /* 32bits */ 1923f939c23SSepherosa Ziehau #define rxd_rss wb.lower.hi_dword.rss /* 32bits */ 193235b9d30SSepherosa Ziehau 1949cc86e17SSepherosa Ziehau #define EMX_RXDMRQ_RSSTYPE_MASK 0xf 1959cc86e17SSepherosa Ziehau #define EMX_RXDMRQ_NO_HASH 0 1969cc86e17SSepherosa Ziehau #define EMX_RXDMRQ_IPV4_TCP 1 1979cc86e17SSepherosa Ziehau #define EMX_RXDMRQ_IPV4 2 1989cc86e17SSepherosa Ziehau #define EMX_RXDMRQ_IPV6_TCP 3 1999cc86e17SSepherosa Ziehau #define EMX_RXDMRQ_IPV6 5 2009cc86e17SSepherosa Ziehau 201c39e3a1fSSepherosa Ziehau struct emx_rxdata { 2026d435846SSepherosa Ziehau struct lwkt_serialize rx_serialize; 2036d435846SSepherosa Ziehau 204c39e3a1fSSepherosa Ziehau /* 205c39e3a1fSSepherosa Ziehau * Receive definitions 206c39e3a1fSSepherosa Ziehau * 207c39e3a1fSSepherosa Ziehau * we have an array of num_rx_desc rx_desc (handled by the 208c39e3a1fSSepherosa Ziehau * controller), and paired with an array of rx_buffers 209c39e3a1fSSepherosa Ziehau * (at rx_buffer_area). 210c39e3a1fSSepherosa Ziehau * The next pair to check on receive is at offset next_rx_desc_to_check 211c39e3a1fSSepherosa Ziehau */ 212235b9d30SSepherosa Ziehau emx_rxdesc_t *rx_desc; 213c39e3a1fSSepherosa Ziehau uint32_t next_rx_desc_to_check; 214c39e3a1fSSepherosa Ziehau int num_rx_desc; 215323e5ecdSSepherosa Ziehau struct emx_rxbuf *rx_buf; 216c39e3a1fSSepherosa Ziehau bus_dma_tag_t rxtag; 217c39e3a1fSSepherosa Ziehau bus_dmamap_t rx_sparemap; 218c39e3a1fSSepherosa Ziehau 219c39e3a1fSSepherosa Ziehau /* 220c39e3a1fSSepherosa Ziehau * First/last mbuf pointers, for 221c39e3a1fSSepherosa Ziehau * collecting multisegment RX packets. 222c39e3a1fSSepherosa Ziehau */ 223c39e3a1fSSepherosa Ziehau struct mbuf *fmp; 224c39e3a1fSSepherosa Ziehau struct mbuf *lmp; 225c39e3a1fSSepherosa Ziehau 226c39e3a1fSSepherosa Ziehau /* RX statistics */ 2273f939c23SSepherosa Ziehau unsigned long rx_pkts; 228c39e3a1fSSepherosa Ziehau unsigned long mbuf_cluster_failed; 229c39e3a1fSSepherosa Ziehau 230c39e3a1fSSepherosa Ziehau bus_dma_tag_t rx_desc_dtag; 231c39e3a1fSSepherosa Ziehau bus_dmamap_t rx_desc_dmap; 232c39e3a1fSSepherosa Ziehau bus_addr_t rx_desc_paddr; 233d721525cSSepherosa Ziehau } __cachealign; 234c39e3a1fSSepherosa Ziehau 2355330213cSSepherosa Ziehau struct emx_softc { 2365330213cSSepherosa Ziehau struct arpcom arpcom; 2375330213cSSepherosa Ziehau struct e1000_hw hw; 2385330213cSSepherosa Ziehau 2395330213cSSepherosa Ziehau /* DragonFly operating-system-specific structures. */ 2405330213cSSepherosa Ziehau struct e1000_osdep osdep; 2415330213cSSepherosa Ziehau device_t dev; 2425330213cSSepherosa Ziehau 2435330213cSSepherosa Ziehau bus_dma_tag_t parent_dtag; 244a596084cSSepherosa Ziehau 245a596084cSSepherosa Ziehau bus_dma_tag_t tx_desc_dtag; 246a596084cSSepherosa Ziehau bus_dmamap_t tx_desc_dmap; 247a596084cSSepherosa Ziehau bus_addr_t tx_desc_paddr; 2485330213cSSepherosa Ziehau 2495330213cSSepherosa Ziehau struct resource *memory; 2505330213cSSepherosa Ziehau int memory_rid; 2515330213cSSepherosa Ziehau 2525330213cSSepherosa Ziehau struct resource *intr_res; 2535330213cSSepherosa Ziehau void *intr_tag; 2545330213cSSepherosa Ziehau int intr_rid; 2555330213cSSepherosa Ziehau 2565330213cSSepherosa Ziehau struct ifmedia media; 2575330213cSSepherosa Ziehau struct callout timer; 2585330213cSSepherosa Ziehau int if_flags; 2595330213cSSepherosa Ziehau int max_frame_size; 2605330213cSSepherosa Ziehau int min_frame_size; 2615330213cSSepherosa Ziehau 2625330213cSSepherosa Ziehau /* Management and WOL features */ 2635330213cSSepherosa Ziehau int wol; 2645330213cSSepherosa Ziehau int has_manage; 2655330213cSSepherosa Ziehau 2665330213cSSepherosa Ziehau /* Info about the board itself */ 2675330213cSSepherosa Ziehau uint8_t link_active; 2685330213cSSepherosa Ziehau uint16_t link_speed; 2695330213cSSepherosa Ziehau uint16_t link_duplex; 2705330213cSSepherosa Ziehau uint32_t smartspeed; 2715330213cSSepherosa Ziehau int int_throttle_ceil; 2725330213cSSepherosa Ziehau 2736d435846SSepherosa Ziehau struct lwkt_serialize main_serialize; 2746d435846SSepherosa Ziehau struct lwkt_serialize tx_serialize; 2756d435846SSepherosa Ziehau struct lwkt_serialize *serializes[EMX_NSERIALIZE]; 2766d435846SSepherosa Ziehau 2775330213cSSepherosa Ziehau /* 2785330213cSSepherosa Ziehau * Transmit definitions 2795330213cSSepherosa Ziehau * 2805330213cSSepherosa Ziehau * We have an array of num_tx_desc descriptors (handled 2815330213cSSepherosa Ziehau * by the controller) paired with an array of tx_buffers 2825330213cSSepherosa Ziehau * (at tx_buffer_area). 2835330213cSSepherosa Ziehau * The index of the next available descriptor is next_avail_tx_desc. 2845330213cSSepherosa Ziehau * The number of remaining tx_desc is num_tx_desc_avail. 2855330213cSSepherosa Ziehau */ 2865330213cSSepherosa Ziehau struct e1000_tx_desc *tx_desc_base; 287323e5ecdSSepherosa Ziehau struct emx_txbuf *tx_buf; 2885330213cSSepherosa Ziehau uint32_t next_avail_tx_desc; 2895330213cSSepherosa Ziehau uint32_t next_tx_to_clean; 2905330213cSSepherosa Ziehau int num_tx_desc_avail; 2915330213cSSepherosa Ziehau int num_tx_desc; 2925330213cSSepherosa Ziehau bus_dma_tag_t txtag; /* dma tag for tx */ 2935330213cSSepherosa Ziehau int spare_tx_desc; 2945330213cSSepherosa Ziehau int oact_tx_desc; 2955330213cSSepherosa Ziehau 2965330213cSSepherosa Ziehau /* Saved csum offloading context information */ 2975330213cSSepherosa Ziehau int csum_flags; 2985330213cSSepherosa Ziehau int csum_ehlen; 2995330213cSSepherosa Ziehau int csum_iphlen; 3005330213cSSepherosa Ziehau uint32_t csum_txd_upper; 3015330213cSSepherosa Ziehau uint32_t csum_txd_lower; 3025330213cSSepherosa Ziehau 3035330213cSSepherosa Ziehau /* 3045330213cSSepherosa Ziehau * Variables used to reduce TX interrupt rate and 3055330213cSSepherosa Ziehau * number of device's TX ring write requests. 3065330213cSSepherosa Ziehau * 3075330213cSSepherosa Ziehau * tx_nsegs: 3085330213cSSepherosa Ziehau * Number of TX descriptors setup so far. 3095330213cSSepherosa Ziehau * 3105330213cSSepherosa Ziehau * tx_int_nsegs: 3115330213cSSepherosa Ziehau * Once tx_nsegs > tx_int_nsegs, RS bit will be set 3125330213cSSepherosa Ziehau * in the last TX descriptor of the packet, and 3135330213cSSepherosa Ziehau * tx_nsegs will be reset to 0. So TX interrupt and 3145330213cSSepherosa Ziehau * TX ring write request should be generated roughly 3155330213cSSepherosa Ziehau * every tx_int_nsegs TX descriptors. 3165330213cSSepherosa Ziehau * 3175330213cSSepherosa Ziehau * tx_dd[]: 3185330213cSSepherosa Ziehau * Index of the TX descriptors which have RS bit set, 3195330213cSSepherosa Ziehau * i.e. DD bit will be set on this TX descriptor after 3205330213cSSepherosa Ziehau * the data of the TX descriptor are transfered to 3215330213cSSepherosa Ziehau * hardware's internal packet buffer. Only the TX 3225330213cSSepherosa Ziehau * descriptors listed in tx_dd[] will be checked upon 3235330213cSSepherosa Ziehau * TX interrupt. This array is used as circular ring. 3245330213cSSepherosa Ziehau * 3255330213cSSepherosa Ziehau * tx_dd_tail, tx_dd_head: 3265330213cSSepherosa Ziehau * Tail and head index of valid elements in tx_dd[]. 3275330213cSSepherosa Ziehau * tx_dd_tail == tx_dd_head means there is no valid 3285330213cSSepherosa Ziehau * elements in tx_dd[]. tx_dd_tail points to the position 3295330213cSSepherosa Ziehau * which is one beyond the last valid element in tx_dd[]. 3305330213cSSepherosa Ziehau * tx_dd_head points to the first valid element in 3315330213cSSepherosa Ziehau * tx_dd[]. 3325330213cSSepherosa Ziehau */ 3335330213cSSepherosa Ziehau int tx_int_nsegs; 3345330213cSSepherosa Ziehau int tx_nsegs; 3355330213cSSepherosa Ziehau int tx_dd_tail; 3365330213cSSepherosa Ziehau int tx_dd_head; 3375330213cSSepherosa Ziehau #define EMX_TXDD_MAX 64 3385330213cSSepherosa Ziehau #define EMX_TXDD_SAFE 48 /* 48 <= val < EMX_TXDD_MAX */ 3395330213cSSepherosa Ziehau int tx_dd[EMX_TXDD_MAX]; 3405330213cSSepherosa Ziehau 3418434a83bSSepherosa Ziehau int rx_ring_inuse; 342c39e3a1fSSepherosa Ziehau struct emx_rxdata rx_data[EMX_NRX_RING]; 3435330213cSSepherosa Ziehau 3445330213cSSepherosa Ziehau /* Misc stats maintained by the driver */ 3455330213cSSepherosa Ziehau unsigned long dropped_pkts; 3465330213cSSepherosa Ziehau unsigned long mbuf_alloc_failed; 3475330213cSSepherosa Ziehau unsigned long no_tx_desc_avail1; 3485330213cSSepherosa Ziehau unsigned long no_tx_desc_avail2; 3495330213cSSepherosa Ziehau unsigned long no_tx_map_avail; 3505330213cSSepherosa Ziehau unsigned long no_tx_dma_setup; 3515330213cSSepherosa Ziehau unsigned long watchdog_events; 3525330213cSSepherosa Ziehau unsigned long rx_overruns; 3535330213cSSepherosa Ziehau unsigned long rx_irq; 3545330213cSSepherosa Ziehau unsigned long tx_irq; 3555330213cSSepherosa Ziehau unsigned long link_irq; 3565330213cSSepherosa Ziehau unsigned long tx_csum_try_pullup; 3575330213cSSepherosa Ziehau unsigned long tx_csum_pullup1; 3585330213cSSepherosa Ziehau unsigned long tx_csum_pullup1_failed; 3595330213cSSepherosa Ziehau unsigned long tx_csum_pullup2; 3605330213cSSepherosa Ziehau unsigned long tx_csum_pullup2_failed; 3615330213cSSepherosa Ziehau unsigned long tx_csum_drop1; 3625330213cSSepherosa Ziehau unsigned long tx_csum_drop2; 3635330213cSSepherosa Ziehau 3645330213cSSepherosa Ziehau /* sysctl tree glue */ 3655330213cSSepherosa Ziehau struct sysctl_ctx_list sysctl_ctx; 3665330213cSSepherosa Ziehau struct sysctl_oid *sysctl_tree; 3675330213cSSepherosa Ziehau 3688434a83bSSepherosa Ziehau int rx_ring_cnt; 3693f939c23SSepherosa Ziehau int rss_debug; 3703f939c23SSepherosa Ziehau 3715330213cSSepherosa Ziehau struct e1000_hw_stats stats; 3725330213cSSepherosa Ziehau }; 3735330213cSSepherosa Ziehau 374323e5ecdSSepherosa Ziehau struct emx_txbuf { 3755330213cSSepherosa Ziehau struct mbuf *m_head; 3765330213cSSepherosa Ziehau bus_dmamap_t map; 3775330213cSSepherosa Ziehau }; 3785330213cSSepherosa Ziehau 379323e5ecdSSepherosa Ziehau struct emx_rxbuf { 380323e5ecdSSepherosa Ziehau struct mbuf *m_head; 381323e5ecdSSepherosa Ziehau bus_dmamap_t map; 382323e5ecdSSepherosa Ziehau bus_addr_t paddr; 383323e5ecdSSepherosa Ziehau }; 384323e5ecdSSepherosa Ziehau 3855330213cSSepherosa Ziehau #define EMX_IS_OACTIVE(sc) ((sc)->num_tx_desc_avail <= (sc)->oact_tx_desc) 3865330213cSSepherosa Ziehau 3875330213cSSepherosa Ziehau #define EMX_INC_TXDD_IDX(idx) \ 3885330213cSSepherosa Ziehau do { \ 3895330213cSSepherosa Ziehau if (++(idx) == EMX_TXDD_MAX) \ 3905330213cSSepherosa Ziehau (idx) = 0; \ 3915330213cSSepherosa Ziehau } while (0) 3925330213cSSepherosa Ziehau 3935330213cSSepherosa Ziehau #endif /* !_IF_EMX_H_ */ 394