176fbb0b9SSepherosa Ziehau /*- 276fbb0b9SSepherosa Ziehau * Copyright (c) 2008, Pyun YongHyeon <yongari@FreeBSD.org> 376fbb0b9SSepherosa Ziehau * All rights reserved. 476fbb0b9SSepherosa Ziehau * 576fbb0b9SSepherosa Ziehau * Redistribution and use in source and binary forms, with or without 676fbb0b9SSepherosa Ziehau * modification, are permitted provided that the following conditions 776fbb0b9SSepherosa Ziehau * are met: 876fbb0b9SSepherosa Ziehau * 1. Redistributions of source code must retain the above copyright 976fbb0b9SSepherosa Ziehau * notice unmodified, this list of conditions, and the following 1076fbb0b9SSepherosa Ziehau * disclaimer. 1176fbb0b9SSepherosa Ziehau * 2. Redistributions in binary form must reproduce the above copyright 1276fbb0b9SSepherosa Ziehau * notice, this list of conditions and the following disclaimer in the 1376fbb0b9SSepherosa Ziehau * documentation and/or other materials provided with the distribution. 1476fbb0b9SSepherosa Ziehau * 1576fbb0b9SSepherosa Ziehau * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1676fbb0b9SSepherosa Ziehau * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1776fbb0b9SSepherosa Ziehau * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1876fbb0b9SSepherosa Ziehau * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 1976fbb0b9SSepherosa Ziehau * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2076fbb0b9SSepherosa Ziehau * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2176fbb0b9SSepherosa Ziehau * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2276fbb0b9SSepherosa Ziehau * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2376fbb0b9SSepherosa Ziehau * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2476fbb0b9SSepherosa Ziehau * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2576fbb0b9SSepherosa Ziehau * SUCH DAMAGE. 2676fbb0b9SSepherosa Ziehau * 2776fbb0b9SSepherosa Ziehau * $FreeBSD: src/sys/dev/jme/if_jmevar.h,v 1.1 2008/05/27 01:42:01 yongari Exp $ 2876fbb0b9SSepherosa Ziehau */ 2976fbb0b9SSepherosa Ziehau 3076fbb0b9SSepherosa Ziehau #ifndef _IF_JMEVAR_H 3176fbb0b9SSepherosa Ziehau #define _IF_JMEVAR_H 3276fbb0b9SSepherosa Ziehau 3376fbb0b9SSepherosa Ziehau #include <sys/queue.h> 3476fbb0b9SSepherosa Ziehau #include <sys/callout.h> 3576fbb0b9SSepherosa Ziehau #include <sys/taskqueue.h> 3676fbb0b9SSepherosa Ziehau 3776fbb0b9SSepherosa Ziehau /* 387405bec3SSepherosa Ziehau * JMC250 supports upto JME_NDESC_MAX descriptors and the number of 3983b03786SSepherosa Ziehau * descriptors should be multiple of JME_NDESC_ALIGN. 4076fbb0b9SSepherosa Ziehau */ 41ff7f3632SSepherosa Ziehau #define JME_TX_DESC_CNT_DEF 512 42ff7f3632SSepherosa Ziehau #define JME_RX_DESC_CNT_DEF 512 4369325526SSepherosa Ziehau 4483b03786SSepherosa Ziehau #define JME_NDESC_ALIGN 16 4569325526SSepherosa Ziehau #define JME_NDESC_MAX 1024 4683b03786SSepherosa Ziehau 47760c056cSSepherosa Ziehau #define JME_NRXRING_1 1 48760c056cSSepherosa Ziehau #define JME_NRXRING_2 2 49760c056cSSepherosa Ziehau #define JME_NRXRING_4 4 50760c056cSSepherosa Ziehau 51760c056cSSepherosa Ziehau #define JME_NRXRING_MIN JME_NRXRING_1 52760c056cSSepherosa Ziehau #define JME_NRXRING_MAX JME_NRXRING_4 534447c752SSepherosa Ziehau 54e0009afbSSepherosa Ziehau /* RX rings + TX ring + status */ 55e0009afbSSepherosa Ziehau #define JME_NSERIALIZE (JME_NRXRING_MAX + 1 + 1) 5631f0d5a2SSepherosa Ziehau 57e0009afbSSepherosa Ziehau /* RX rings + TX ring + status */ 58e0009afbSSepherosa Ziehau #define JME_MSIXCNT(nrx) ((nrx) + 1 + 1) 59e0009afbSSepherosa Ziehau #define JME_NMSIX JME_MSIXCNT(JME_NRXRING_MAX) 6058880b0dSSepherosa Ziehau 6176fbb0b9SSepherosa Ziehau /* 6276fbb0b9SSepherosa Ziehau * Tx/Rx descriptor queue base should be 16bytes aligned and 6376fbb0b9SSepherosa Ziehau * should not cross 4G bytes boundary on the 64bits address 6476fbb0b9SSepherosa Ziehau * mode. 6576fbb0b9SSepherosa Ziehau */ 66ff7f3632SSepherosa Ziehau #define JME_TX_RING_ALIGN __VM_CACHELINE_SIZE 67ff7f3632SSepherosa Ziehau #define JME_RX_RING_ALIGN __VM_CACHELINE_SIZE 689d424ceeSSepherosa Ziehau #define JME_MAXSEGSIZE 4096 691bedd927SSepherosa Ziehau #define JME_TSO_MAXSIZE (IP_MAXPACKET + sizeof(struct ether_vlan_header)) 701bedd927SSepherosa Ziehau #define JME_MAXTXSEGS 40 7176fbb0b9SSepherosa Ziehau #define JME_RX_BUF_ALIGN sizeof(uint64_t) 72ff7f3632SSepherosa Ziehau #define JME_SSB_ALIGN __VM_CACHELINE_SIZE 7376fbb0b9SSepherosa Ziehau 74a7547dadSSepherosa Ziehau #if (BUS_SPACE_MAXADDR != BUS_SPACE_MAXADDR_32BIT) 75a7547dadSSepherosa Ziehau #define JME_RING_BOUNDARY 0x100000000ULL 76a7547dadSSepherosa Ziehau #else 77a7547dadSSepherosa Ziehau #define JME_RING_BOUNDARY 0 78a7547dadSSepherosa Ziehau #endif 79a7547dadSSepherosa Ziehau 8076fbb0b9SSepherosa Ziehau #define JME_ADDR_LO(x) ((uint64_t) (x) & 0xFFFFFFFF) 8176fbb0b9SSepherosa Ziehau #define JME_ADDR_HI(x) ((uint64_t) (x) >> 32) 8276fbb0b9SSepherosa Ziehau 8376fbb0b9SSepherosa Ziehau /* Water mark to kick reclaiming Tx buffers. */ 849b99c84fSSepherosa Ziehau #define JME_TX_DESC_HIWAT(tdata) \ 859b99c84fSSepherosa Ziehau ((tdata)->jme_tx_desc_cnt - (((tdata)->jme_tx_desc_cnt * 3) / 10)) 8676fbb0b9SSepherosa Ziehau 8776fbb0b9SSepherosa Ziehau /* 8876fbb0b9SSepherosa Ziehau * JMC250 can send 9K jumbo frame on Tx path and can receive 8976fbb0b9SSepherosa Ziehau * 65535 bytes. 9076fbb0b9SSepherosa Ziehau */ 9176fbb0b9SSepherosa Ziehau #define JME_JUMBO_FRAMELEN 9216 9276fbb0b9SSepherosa Ziehau #define JME_JUMBO_MTU \ 9376fbb0b9SSepherosa Ziehau (JME_JUMBO_FRAMELEN - sizeof(struct ether_vlan_header) - \ 9476fbb0b9SSepherosa Ziehau ETHER_HDR_LEN - ETHER_CRC_LEN) 9576fbb0b9SSepherosa Ziehau #define JME_MAX_MTU \ 9676fbb0b9SSepherosa Ziehau (ETHER_MAX_LEN + sizeof(struct ether_vlan_header) - \ 9776fbb0b9SSepherosa Ziehau ETHER_HDR_LEN - ETHER_CRC_LEN) 9876fbb0b9SSepherosa Ziehau /* 9976fbb0b9SSepherosa Ziehau * JMC250 can't handle Tx checksum offload/TSO if frame length 10076fbb0b9SSepherosa Ziehau * is larger than its FIFO size(2K). It's also good idea to not 10176fbb0b9SSepherosa Ziehau * use jumbo frame if hardware is running at half-duplex media. 10276fbb0b9SSepherosa Ziehau * Because the jumbo frame may not fit into the Tx FIFO, 10376fbb0b9SSepherosa Ziehau * collisions make hardware fetch frame from host memory with 10476fbb0b9SSepherosa Ziehau * DMA again which in turn slows down Tx performance 10576fbb0b9SSepherosa Ziehau * significantly. 10676fbb0b9SSepherosa Ziehau */ 10776fbb0b9SSepherosa Ziehau #define JME_TX_FIFO_SIZE 2000 10876fbb0b9SSepherosa Ziehau /* 10976fbb0b9SSepherosa Ziehau * JMC250 has just 4K Rx FIFO. To support jumbo frame that is 11076fbb0b9SSepherosa Ziehau * larger than 4K bytes in length, Rx FIFO threshold should be 11176fbb0b9SSepherosa Ziehau * adjusted to minimize Rx FIFO overrun. 11276fbb0b9SSepherosa Ziehau */ 11376fbb0b9SSepherosa Ziehau #define JME_RX_FIFO_SIZE 4000 11476fbb0b9SSepherosa Ziehau 11576fbb0b9SSepherosa Ziehau #define JME_DESC_INC(x, y) ((x) = ((x) + 1) % (y)) 1166960d7d2SSepherosa Ziehau #define JME_DESC_ADD(x, d, y) ((x) = ((x) + (d)) % (y)) 11776fbb0b9SSepherosa Ziehau 11876fbb0b9SSepherosa Ziehau struct jme_txdesc { 11976fbb0b9SSepherosa Ziehau struct mbuf *tx_m; 12076fbb0b9SSepherosa Ziehau bus_dmamap_t tx_dmamap; 12176fbb0b9SSepherosa Ziehau int tx_ndesc; 12276fbb0b9SSepherosa Ziehau struct jme_desc *tx_desc; 12376fbb0b9SSepherosa Ziehau }; 12476fbb0b9SSepherosa Ziehau 12576fbb0b9SSepherosa Ziehau struct jme_rxdesc { 12676fbb0b9SSepherosa Ziehau struct mbuf *rx_m; 127fd2a6d2cSSepherosa Ziehau bus_addr_t rx_paddr; 12876fbb0b9SSepherosa Ziehau bus_dmamap_t rx_dmamap; 12976fbb0b9SSepherosa Ziehau struct jme_desc *rx_desc; 13076fbb0b9SSepherosa Ziehau }; 13176fbb0b9SSepherosa Ziehau 13258880b0dSSepherosa Ziehau struct jme_softc; 13358880b0dSSepherosa Ziehau 1344447c752SSepherosa Ziehau /* 1354447c752SSepherosa Ziehau * RX ring/descs 1364447c752SSepherosa Ziehau */ 1374447c752SSepherosa Ziehau struct jme_rxdata { 13831f0d5a2SSepherosa Ziehau struct lwkt_serialize jme_rx_serialize; 13958880b0dSSepherosa Ziehau struct jme_softc *jme_sc; 1407b040092SSepherosa Ziehau 14158880b0dSSepherosa Ziehau uint32_t jme_rx_coal; 14258880b0dSSepherosa Ziehau uint32_t jme_rx_comp; 14358880b0dSSepherosa Ziehau uint32_t jme_rx_empty; 14458880b0dSSepherosa Ziehau int jme_rx_idx; 1457b040092SSepherosa Ziehau 1464447c752SSepherosa Ziehau bus_dma_tag_t jme_rx_tag; /* RX mbuf tag */ 1474447c752SSepherosa Ziehau bus_dmamap_t jme_rx_sparemap; 1484447c752SSepherosa Ziehau struct jme_rxdesc *jme_rxdesc; 1494447c752SSepherosa Ziehau 1504447c752SSepherosa Ziehau struct jme_desc *jme_rx_ring; 1514447c752SSepherosa Ziehau int jme_rx_cons; 1527b040092SSepherosa Ziehau int jme_rx_desc_cnt; 1534447c752SSepherosa Ziehau 1544447c752SSepherosa Ziehau int jme_rxlen; 1554447c752SSepherosa Ziehau struct mbuf *jme_rxhead; 1564447c752SSepherosa Ziehau struct mbuf *jme_rxtail; 1577b040092SSepherosa Ziehau 1587b040092SSepherosa Ziehau u_long jme_rx_pkt; 159955f266eSSepherosa Ziehau u_long jme_rx_emp; 16064aaaeb2SSepherosa Ziehau 16164aaaeb2SSepherosa Ziehau bus_addr_t jme_rx_ring_paddr; 16264aaaeb2SSepherosa Ziehau bus_dma_tag_t jme_rx_ring_tag; 16364aaaeb2SSepherosa Ziehau bus_dmamap_t jme_rx_ring_map; 164594bec47SSepherosa Ziehau } __cachealign; 1654447c752SSepherosa Ziehau 1669b99c84fSSepherosa Ziehau struct jme_txdata { 16764aaaeb2SSepherosa Ziehau struct lwkt_serialize jme_tx_serialize; 16864aaaeb2SSepherosa Ziehau struct jme_softc *jme_sc; 1699b99c84fSSepherosa Ziehau 17064aaaeb2SSepherosa Ziehau bus_dma_tag_t jme_tx_tag; /* TX mbuf tag */ 17164aaaeb2SSepherosa Ziehau struct jme_txdesc *jme_txdesc; 17264aaaeb2SSepherosa Ziehau 17364aaaeb2SSepherosa Ziehau struct jme_desc *jme_tx_ring; 17464aaaeb2SSepherosa Ziehau 1753a65efa6SSepherosa Ziehau int jme_tx_wreg; 17664aaaeb2SSepherosa Ziehau int jme_tx_prod; 17764aaaeb2SSepherosa Ziehau int jme_tx_cons; 17864aaaeb2SSepherosa Ziehau int jme_tx_cnt; 17964aaaeb2SSepherosa Ziehau int jme_tx_desc_cnt; 18064aaaeb2SSepherosa Ziehau 18164aaaeb2SSepherosa Ziehau bus_addr_t jme_tx_ring_paddr; 18264aaaeb2SSepherosa Ziehau bus_dma_tag_t jme_tx_ring_tag; 18364aaaeb2SSepherosa Ziehau bus_dmamap_t jme_tx_ring_map; 1849b99c84fSSepherosa Ziehau } __cachealign; 18564aaaeb2SSepherosa Ziehau 1869b99c84fSSepherosa Ziehau struct jme_chain_data { 1879b99c84fSSepherosa Ziehau /* 1889b99c84fSSepherosa Ziehau * TX ring 1899b99c84fSSepherosa Ziehau */ 1909b99c84fSSepherosa Ziehau struct jme_txdata jme_tx_data; 1919b99c84fSSepherosa Ziehau 1929b99c84fSSepherosa Ziehau /* 1939b99c84fSSepherosa Ziehau * RX rings 1949b99c84fSSepherosa Ziehau */ 19564aaaeb2SSepherosa Ziehau int jme_rx_ring_cnt; 19664aaaeb2SSepherosa Ziehau struct jme_rxdata jme_rx_data[JME_NRXRING_MAX]; 19764aaaeb2SSepherosa Ziehau 19864aaaeb2SSepherosa Ziehau /* 199560616bfSSepherosa Ziehau * Top level tags 200560616bfSSepherosa Ziehau */ 201560616bfSSepherosa Ziehau bus_dma_tag_t jme_ring_tag; /* parent ring tag */ 202560616bfSSepherosa Ziehau bus_dma_tag_t jme_buffer_tag; /* parent mbuf/ssb tag */ 203560616bfSSepherosa Ziehau 204560616bfSSepherosa Ziehau /* 2059b99c84fSSepherosa Ziehau * Shadow status block (unused) 206560616bfSSepherosa Ziehau */ 207560616bfSSepherosa Ziehau struct jme_ssb *jme_ssb_block; 208560616bfSSepherosa Ziehau bus_addr_t jme_ssb_block_paddr; 20976fbb0b9SSepherosa Ziehau bus_dma_tag_t jme_ssb_tag; 21076fbb0b9SSepherosa Ziehau bus_dmamap_t jme_ssb_map; 211594bec47SSepherosa Ziehau } __cachealign; 21276fbb0b9SSepherosa Ziehau 21358880b0dSSepherosa Ziehau struct jme_msix_data { 21458880b0dSSepherosa Ziehau int jme_msix_rid; 21558880b0dSSepherosa Ziehau int jme_msix_cpuid; 21658880b0dSSepherosa Ziehau u_int jme_msix_vector; 21758880b0dSSepherosa Ziehau uint32_t jme_msix_intrs; 21858880b0dSSepherosa Ziehau struct resource *jme_msix_res; 21958880b0dSSepherosa Ziehau void *jme_msix_handle; 22058880b0dSSepherosa Ziehau struct lwkt_serialize *jme_msix_serialize; 22158880b0dSSepherosa Ziehau char jme_msix_desc[64]; 22258880b0dSSepherosa Ziehau 22358880b0dSSepherosa Ziehau driver_intr_t *jme_msix_func; 22458880b0dSSepherosa Ziehau void *jme_msix_arg; 22558880b0dSSepherosa Ziehau }; 22658880b0dSSepherosa Ziehau 2279b99c84fSSepherosa Ziehau #define JME_TX_RING_SIZE(tdata) \ 2289b99c84fSSepherosa Ziehau (sizeof(struct jme_desc) * (tdata)->jme_tx_desc_cnt) 2297b040092SSepherosa Ziehau #define JME_RX_RING_SIZE(rdata) \ 2307b040092SSepherosa Ziehau (sizeof(struct jme_desc) * (rdata)->jme_rx_desc_cnt) 23176fbb0b9SSepherosa Ziehau #define JME_SSB_SIZE sizeof(struct jme_ssb) 23276fbb0b9SSepherosa Ziehau 233*4c3cb79aSSepherosa Ziehau #define JME_RDRTABLE_SIZE (RSSTBL_REGSIZE * RSSTBL_NREGS) 234*4c3cb79aSSepherosa Ziehau 23576fbb0b9SSepherosa Ziehau /* 23676fbb0b9SSepherosa Ziehau * Software state per device. 23776fbb0b9SSepherosa Ziehau */ 23876fbb0b9SSepherosa Ziehau struct jme_softc { 23976fbb0b9SSepherosa Ziehau struct arpcom arpcom; 24076fbb0b9SSepherosa Ziehau device_t jme_dev; 24176fbb0b9SSepherosa Ziehau 24276fbb0b9SSepherosa Ziehau int jme_mem_rid; 24376fbb0b9SSepherosa Ziehau struct resource *jme_mem_res; 24476fbb0b9SSepherosa Ziehau bus_space_tag_t jme_mem_bt; 24576fbb0b9SSepherosa Ziehau bus_space_handle_t jme_mem_bh; 24676fbb0b9SSepherosa Ziehau 2473eba890aSSepherosa Ziehau int jme_irq_type; 24876fbb0b9SSepherosa Ziehau int jme_irq_rid; 24976fbb0b9SSepherosa Ziehau struct resource *jme_irq_res; 25076fbb0b9SSepherosa Ziehau void *jme_irq_handle; 25158880b0dSSepherosa Ziehau struct jme_msix_data jme_msix[JME_NMSIX]; 25258880b0dSSepherosa Ziehau int jme_msix_cnt; 25358880b0dSSepherosa Ziehau uint32_t jme_msinum[JME_MSINUM_CNT]; 25487aa452bSSepherosa Ziehau int jme_tx_cpuid; 255*4c3cb79aSSepherosa Ziehau struct if_ringmap *jme_rx_rmap; 256*4c3cb79aSSepherosa Ziehau struct if_ringmap *jme_tx_rmap; 25776fbb0b9SSepherosa Ziehau 2588a0620e4SSepherosa Ziehau 25976fbb0b9SSepherosa Ziehau device_t jme_miibus; 26076fbb0b9SSepherosa Ziehau int jme_phyaddr; 261b249905bSSepherosa Ziehau bus_addr_t jme_lowaddr; 26276fbb0b9SSepherosa Ziehau 263b249905bSSepherosa Ziehau uint32_t jme_clksrc; 264b249905bSSepherosa Ziehau uint32_t jme_clksrc_1000; 265352c8444SSepherosa Ziehau uint16_t jme_phycom0; 266352c8444SSepherosa Ziehau uint16_t jme_phycom1; 26776fbb0b9SSepherosa Ziehau uint32_t jme_tx_dma_size; 26876fbb0b9SSepherosa Ziehau uint32_t jme_rx_dma_size; 269ec7e787bSSepherosa Ziehau 270ec7e787bSSepherosa Ziehau uint32_t jme_caps; 271ec7e787bSSepherosa Ziehau #define JME_CAP_FPGA 0x0001 272ec7e787bSSepherosa Ziehau #define JME_CAP_PCIE 0x0002 273ec7e787bSSepherosa Ziehau #define JME_CAP_PMCAP 0x0004 274ec7e787bSSepherosa Ziehau #define JME_CAP_FASTETH 0x0008 2753a5f3f36SSepherosa Ziehau #define JME_CAP_JUMBO 0x0010 276352c8444SSepherosa Ziehau #define JME_CAP_PHYPWR 0x0020 277ad22907fSSepherosa Ziehau 278ad22907fSSepherosa Ziehau uint32_t jme_workaround; 279ad22907fSSepherosa Ziehau #define JME_WA_EXTFIFO 0x0001 2803b3da110SSepherosa Ziehau #define JME_WA_HDX 0x0002 281ec7e787bSSepherosa Ziehau 282cccc3955SSepherosa Ziehau boolean_t jme_has_link; 283cccc3955SSepherosa Ziehau boolean_t jme_in_tick; 28476fbb0b9SSepherosa Ziehau 28531f0d5a2SSepherosa Ziehau struct lwkt_serialize jme_serialize; 28631f0d5a2SSepherosa Ziehau struct lwkt_serialize *jme_serialize_arr[JME_NSERIALIZE]; 28731f0d5a2SSepherosa Ziehau int jme_serialize_cnt; 28831f0d5a2SSepherosa Ziehau 28976fbb0b9SSepherosa Ziehau struct callout jme_tick_ch; 29076fbb0b9SSepherosa Ziehau struct jme_chain_data jme_cdata; 29176fbb0b9SSepherosa Ziehau int jme_if_flags; 29276fbb0b9SSepherosa Ziehau uint32_t jme_txcsr; 29376fbb0b9SSepherosa Ziehau uint32_t jme_rxcsr; 29476fbb0b9SSepherosa Ziehau 295*4c3cb79aSSepherosa Ziehau int jme_rdrtable[JME_RDRTABLE_SIZE]; 296*4c3cb79aSSepherosa Ziehau 29776fbb0b9SSepherosa Ziehau /* 29876fbb0b9SSepherosa Ziehau * Sysctl variables 29976fbb0b9SSepherosa Ziehau */ 30076fbb0b9SSepherosa Ziehau int jme_tx_coal_to; 30176fbb0b9SSepherosa Ziehau int jme_tx_coal_pkt; 30276fbb0b9SSepherosa Ziehau int jme_rx_coal_to; 30376fbb0b9SSepherosa Ziehau int jme_rx_coal_pkt; 304760c056cSSepherosa Ziehau int jme_rss_debug; 30576fbb0b9SSepherosa Ziehau }; 30676fbb0b9SSepherosa Ziehau 30776fbb0b9SSepherosa Ziehau /* Register access macros. */ 30876fbb0b9SSepherosa Ziehau #define CSR_WRITE_4(_sc, reg, val) \ 30976fbb0b9SSepherosa Ziehau bus_space_write_4((_sc)->jme_mem_bt, (_sc)->jme_mem_bh, (reg), (val)) 31076fbb0b9SSepherosa Ziehau #define CSR_READ_4(_sc, reg) \ 31176fbb0b9SSepherosa Ziehau bus_space_read_4((_sc)->jme_mem_bt, (_sc)->jme_mem_bh, (reg)) 31276fbb0b9SSepherosa Ziehau 31376fbb0b9SSepherosa Ziehau #define JME_MAXERR 5 31476fbb0b9SSepherosa Ziehau 315dea2452aSSepherosa Ziehau #define JME_RXCHAIN_RESET(rdata) \ 31676fbb0b9SSepherosa Ziehau do { \ 317dea2452aSSepherosa Ziehau (rdata)->jme_rxhead = NULL; \ 318dea2452aSSepherosa Ziehau (rdata)->jme_rxtail = NULL; \ 319dea2452aSSepherosa Ziehau (rdata)->jme_rxlen = 0; \ 32076fbb0b9SSepherosa Ziehau } while (0) 32176fbb0b9SSepherosa Ziehau 32276fbb0b9SSepherosa Ziehau #define JME_TX_TIMEOUT 5 32376fbb0b9SSepherosa Ziehau #define JME_TIMEOUT 1000 32476fbb0b9SSepherosa Ziehau #define JME_PHY_TIMEOUT 1000 32576fbb0b9SSepherosa Ziehau #define JME_EEPROM_TIMEOUT 1000 32676fbb0b9SSepherosa Ziehau 32776fbb0b9SSepherosa Ziehau #define JME_TXD_RSVD 1 3281bedd927SSepherosa Ziehau /* Large enough to cooperate 64K TSO segment and one spare TX descriptor */ 3291bedd927SSepherosa Ziehau #define JME_TXD_SPARE 34 33076fbb0b9SSepherosa Ziehau 331f4cd1fa1SSepherosa Ziehau #define JME_TXWREG_NSEGS 16 332f4cd1fa1SSepherosa Ziehau 3336afef6abSSepherosa Ziehau #define JME_ENABLE_HWRSS(sc) \ 3346afef6abSSepherosa Ziehau ((sc)->jme_cdata.jme_rx_ring_cnt > JME_NRXRING_MIN) 3356afef6abSSepherosa Ziehau 33676fbb0b9SSepherosa Ziehau #endif 337