xref: /dflybsd-src/sys/dev/netif/jme/if_jmevar.h (revision 8a0620e4fb37b67e0243c240ec84cf464a77e9d1)
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 $
28b249905bSSepherosa Ziehau  * $DragonFly: src/sys/dev/netif/jme/if_jmevar.h,v 1.8 2008/11/26 11:55:18 sephe Exp $
2976fbb0b9SSepherosa Ziehau  */
3076fbb0b9SSepherosa Ziehau 
3176fbb0b9SSepherosa Ziehau #ifndef	_IF_JMEVAR_H
3276fbb0b9SSepherosa Ziehau #define	_IF_JMEVAR_H
3376fbb0b9SSepherosa Ziehau 
3476fbb0b9SSepherosa Ziehau #include <sys/queue.h>
3576fbb0b9SSepherosa Ziehau #include <sys/callout.h>
3676fbb0b9SSepherosa Ziehau #include <sys/taskqueue.h>
3776fbb0b9SSepherosa Ziehau 
3876fbb0b9SSepherosa Ziehau /*
397405bec3SSepherosa Ziehau  * JMC250 supports upto JME_NDESC_MAX descriptors and the number of
4083b03786SSepherosa Ziehau  * descriptors should be multiple of JME_NDESC_ALIGN.
4176fbb0b9SSepherosa Ziehau  */
42ff7f3632SSepherosa Ziehau #define	JME_TX_DESC_CNT_DEF	512
43ff7f3632SSepherosa Ziehau #define	JME_RX_DESC_CNT_DEF	512
4469325526SSepherosa Ziehau 
4583b03786SSepherosa Ziehau #define JME_NDESC_ALIGN		16
4669325526SSepherosa Ziehau #define JME_NDESC_MAX		1024
4783b03786SSepherosa Ziehau 
48760c056cSSepherosa Ziehau #define JME_NRXRING_1		1
49760c056cSSepherosa Ziehau #define JME_NRXRING_2		2
50760c056cSSepherosa Ziehau #define JME_NRXRING_4		4
51760c056cSSepherosa Ziehau 
52760c056cSSepherosa Ziehau #define JME_NRXRING_MIN		JME_NRXRING_1
53760c056cSSepherosa Ziehau #define JME_NRXRING_MAX		JME_NRXRING_4
544447c752SSepherosa Ziehau 
5531f0d5a2SSepherosa Ziehau #define JME_NSERIALIZE		(JME_NRXRING_MAX + 2)
5631f0d5a2SSepherosa Ziehau 
5758880b0dSSepherosa Ziehau #define JME_NMSIX		(JME_NRXRING_MAX + 1)
5858880b0dSSepherosa Ziehau 
5976fbb0b9SSepherosa Ziehau /*
6076fbb0b9SSepherosa Ziehau  * Tx/Rx descriptor queue base should be 16bytes aligned and
6176fbb0b9SSepherosa Ziehau  * should not cross 4G bytes boundary on the 64bits address
6276fbb0b9SSepherosa Ziehau  * mode.
6376fbb0b9SSepherosa Ziehau  */
64ff7f3632SSepherosa Ziehau #define	JME_TX_RING_ALIGN	__VM_CACHELINE_SIZE
65ff7f3632SSepherosa Ziehau #define	JME_RX_RING_ALIGN	__VM_CACHELINE_SIZE
669d424ceeSSepherosa Ziehau #define	JME_MAXSEGSIZE		4096
671bedd927SSepherosa Ziehau #define	JME_TSO_MAXSIZE		(IP_MAXPACKET + sizeof(struct ether_vlan_header))
681bedd927SSepherosa Ziehau #define	JME_MAXTXSEGS		40
6976fbb0b9SSepherosa Ziehau #define	JME_RX_BUF_ALIGN	sizeof(uint64_t)
70ff7f3632SSepherosa Ziehau #define	JME_SSB_ALIGN		__VM_CACHELINE_SIZE
7176fbb0b9SSepherosa Ziehau 
72a7547dadSSepherosa Ziehau #if (BUS_SPACE_MAXADDR != BUS_SPACE_MAXADDR_32BIT)
73a7547dadSSepherosa Ziehau #define JME_RING_BOUNDARY	0x100000000ULL
74a7547dadSSepherosa Ziehau #else
75a7547dadSSepherosa Ziehau #define JME_RING_BOUNDARY	0
76a7547dadSSepherosa Ziehau #endif
77a7547dadSSepherosa Ziehau 
7876fbb0b9SSepherosa Ziehau #define	JME_ADDR_LO(x)		((uint64_t) (x) & 0xFFFFFFFF)
7976fbb0b9SSepherosa Ziehau #define	JME_ADDR_HI(x)		((uint64_t) (x) >> 32)
8076fbb0b9SSepherosa Ziehau 
8176fbb0b9SSepherosa Ziehau #define	JME_MSI_MESSAGES	8
8276fbb0b9SSepherosa Ziehau #define	JME_MSIX_MESSAGES	8
8376fbb0b9SSepherosa Ziehau 
8476fbb0b9SSepherosa Ziehau /* Water mark to kick reclaiming Tx buffers. */
8583b03786SSepherosa Ziehau #define	JME_TX_DESC_HIWAT(sc)	\
86b020bb10SSepherosa Ziehau 	((sc)->jme_cdata.jme_tx_desc_cnt - \
87b020bb10SSepherosa Ziehau 	 (((sc)->jme_cdata.jme_tx_desc_cnt * 3) / 10))
8876fbb0b9SSepherosa Ziehau 
8976fbb0b9SSepherosa Ziehau /*
9076fbb0b9SSepherosa Ziehau  * JMC250 can send 9K jumbo frame on Tx path and can receive
9176fbb0b9SSepherosa Ziehau  * 65535 bytes.
9276fbb0b9SSepherosa Ziehau  */
9376fbb0b9SSepherosa Ziehau #define JME_JUMBO_FRAMELEN	9216
9476fbb0b9SSepherosa Ziehau #define JME_JUMBO_MTU							\
9576fbb0b9SSepherosa Ziehau 	(JME_JUMBO_FRAMELEN - sizeof(struct ether_vlan_header) -	\
9676fbb0b9SSepherosa Ziehau 	 ETHER_HDR_LEN - ETHER_CRC_LEN)
9776fbb0b9SSepherosa Ziehau #define	JME_MAX_MTU							\
9876fbb0b9SSepherosa Ziehau 	(ETHER_MAX_LEN + sizeof(struct ether_vlan_header) -		\
9976fbb0b9SSepherosa Ziehau 	 ETHER_HDR_LEN - ETHER_CRC_LEN)
10076fbb0b9SSepherosa Ziehau /*
10176fbb0b9SSepherosa Ziehau  * JMC250 can't handle Tx checksum offload/TSO if frame length
10276fbb0b9SSepherosa Ziehau  * is larger than its FIFO size(2K). It's also good idea to not
10376fbb0b9SSepherosa Ziehau  * use jumbo frame if hardware is running at half-duplex media.
10476fbb0b9SSepherosa Ziehau  * Because the jumbo frame may not fit into the Tx FIFO,
10576fbb0b9SSepherosa Ziehau  * collisions make hardware fetch frame from host memory with
10676fbb0b9SSepherosa Ziehau  * DMA again which in turn slows down Tx performance
10776fbb0b9SSepherosa Ziehau  * significantly.
10876fbb0b9SSepherosa Ziehau  */
10976fbb0b9SSepherosa Ziehau #define	JME_TX_FIFO_SIZE	2000
11076fbb0b9SSepherosa Ziehau /*
11176fbb0b9SSepherosa Ziehau  * JMC250 has just 4K Rx FIFO. To support jumbo frame that is
11276fbb0b9SSepherosa Ziehau  * larger than 4K bytes in length, Rx FIFO threshold should be
11376fbb0b9SSepherosa Ziehau  * adjusted to minimize Rx FIFO overrun.
11476fbb0b9SSepherosa Ziehau  */
11576fbb0b9SSepherosa Ziehau #define	JME_RX_FIFO_SIZE	4000
11676fbb0b9SSepherosa Ziehau 
11776fbb0b9SSepherosa Ziehau #define	JME_DESC_INC(x, y)	((x) = ((x) + 1) % (y))
1186960d7d2SSepherosa Ziehau #define JME_DESC_ADD(x, d, y)	((x) = ((x) + (d)) % (y))
11976fbb0b9SSepherosa Ziehau 
12076fbb0b9SSepherosa Ziehau struct jme_txdesc {
12176fbb0b9SSepherosa Ziehau 	struct mbuf		*tx_m;
12276fbb0b9SSepherosa Ziehau 	bus_dmamap_t		tx_dmamap;
12376fbb0b9SSepherosa Ziehau 	int			tx_ndesc;
12476fbb0b9SSepherosa Ziehau 	struct jme_desc		*tx_desc;
12576fbb0b9SSepherosa Ziehau };
12676fbb0b9SSepherosa Ziehau 
12776fbb0b9SSepherosa Ziehau struct jme_rxdesc {
12876fbb0b9SSepherosa Ziehau 	struct mbuf 		*rx_m;
129fd2a6d2cSSepherosa Ziehau 	bus_addr_t		rx_paddr;
13076fbb0b9SSepherosa Ziehau 	bus_dmamap_t		rx_dmamap;
13176fbb0b9SSepherosa Ziehau 	struct jme_desc		*rx_desc;
13276fbb0b9SSepherosa Ziehau };
13376fbb0b9SSepherosa Ziehau 
13458880b0dSSepherosa Ziehau struct jme_softc;
13558880b0dSSepherosa Ziehau 
1364447c752SSepherosa Ziehau /*
1374447c752SSepherosa Ziehau  * RX ring/descs
1384447c752SSepherosa Ziehau  */
1394447c752SSepherosa Ziehau struct jme_rxdata {
14031f0d5a2SSepherosa Ziehau 	struct lwkt_serialize	jme_rx_serialize;
14158880b0dSSepherosa Ziehau 	struct jme_softc	*jme_sc;
1427b040092SSepherosa Ziehau 
14358880b0dSSepherosa Ziehau 	uint32_t		jme_rx_coal;
14458880b0dSSepherosa Ziehau 	uint32_t		jme_rx_comp;
14558880b0dSSepherosa Ziehau 	uint32_t		jme_rx_empty;
14658880b0dSSepherosa Ziehau 	int			jme_rx_idx;
1477b040092SSepherosa Ziehau 
1484447c752SSepherosa Ziehau 	bus_dma_tag_t		jme_rx_tag;	/* RX mbuf tag */
1494447c752SSepherosa Ziehau 	bus_dmamap_t		jme_rx_sparemap;
1504447c752SSepherosa Ziehau 	struct jme_rxdesc	*jme_rxdesc;
1514447c752SSepherosa Ziehau 
1524447c752SSepherosa Ziehau 	struct jme_desc		*jme_rx_ring;
1534447c752SSepherosa Ziehau 	bus_addr_t		jme_rx_ring_paddr;
1544447c752SSepherosa Ziehau 	bus_dma_tag_t		jme_rx_ring_tag;
1554447c752SSepherosa Ziehau 	bus_dmamap_t		jme_rx_ring_map;
1564447c752SSepherosa Ziehau 
1574447c752SSepherosa Ziehau 	int			jme_rx_cons;
1587b040092SSepherosa Ziehau 	int			jme_rx_desc_cnt;
1594447c752SSepherosa Ziehau 
1604447c752SSepherosa Ziehau 	int			jme_rxlen;
1614447c752SSepherosa Ziehau 	struct mbuf		*jme_rxhead;
1624447c752SSepherosa Ziehau 	struct mbuf		*jme_rxtail;
1637b040092SSepherosa Ziehau 
1647b040092SSepherosa Ziehau 	u_long			jme_rx_pkt;
165955f266eSSepherosa Ziehau 	u_long			jme_rx_emp;
166594bec47SSepherosa Ziehau } __cachealign;
1674447c752SSepherosa Ziehau 
16876fbb0b9SSepherosa Ziehau struct jme_chain_data {
169560616bfSSepherosa Ziehau 	/*
170560616bfSSepherosa Ziehau 	 * Top level tags
171560616bfSSepherosa Ziehau 	 */
172560616bfSSepherosa Ziehau 	bus_dma_tag_t		jme_ring_tag;	/* parent ring tag */
173560616bfSSepherosa Ziehau 	bus_dma_tag_t		jme_buffer_tag;	/* parent mbuf/ssb tag */
174560616bfSSepherosa Ziehau 
175560616bfSSepherosa Ziehau 	/*
176560616bfSSepherosa Ziehau 	 * Shadow status block
177560616bfSSepherosa Ziehau 	 */
178560616bfSSepherosa Ziehau 	struct jme_ssb		*jme_ssb_block;
179560616bfSSepherosa Ziehau 	bus_addr_t		jme_ssb_block_paddr;
18076fbb0b9SSepherosa Ziehau 	bus_dma_tag_t		jme_ssb_tag;
18176fbb0b9SSepherosa Ziehau 	bus_dmamap_t		jme_ssb_map;
182560616bfSSepherosa Ziehau 
183560616bfSSepherosa Ziehau 	/*
184560616bfSSepherosa Ziehau 	 * TX ring/descs
185560616bfSSepherosa Ziehau 	 */
18631f0d5a2SSepherosa Ziehau 	struct lwkt_serialize	jme_tx_serialize;
18758880b0dSSepherosa Ziehau 	struct jme_softc	*jme_sc;
188560616bfSSepherosa Ziehau 	bus_dma_tag_t		jme_tx_tag;	/* TX mbuf tag */
18983b03786SSepherosa Ziehau 	struct jme_txdesc	*jme_txdesc;
190560616bfSSepherosa Ziehau 
191560616bfSSepherosa Ziehau 	struct jme_desc		*jme_tx_ring;
192560616bfSSepherosa Ziehau 	bus_addr_t		jme_tx_ring_paddr;
19376fbb0b9SSepherosa Ziehau 	bus_dma_tag_t		jme_tx_ring_tag;
19476fbb0b9SSepherosa Ziehau 	bus_dmamap_t		jme_tx_ring_map;
19576fbb0b9SSepherosa Ziehau 
19676fbb0b9SSepherosa Ziehau 	int			jme_tx_prod;
19776fbb0b9SSepherosa Ziehau 	int			jme_tx_cons;
19876fbb0b9SSepherosa Ziehau 	int			jme_tx_cnt;
199b020bb10SSepherosa Ziehau 	int			jme_tx_desc_cnt;
20076fbb0b9SSepherosa Ziehau 
2017b040092SSepherosa Ziehau 	int			jme_rx_ring_cnt;
2024447c752SSepherosa Ziehau 	struct jme_rxdata	jme_rx_data[JME_NRXRING_MAX];
203594bec47SSepherosa Ziehau } __cachealign;
20476fbb0b9SSepherosa Ziehau 
20558880b0dSSepherosa Ziehau struct jme_msix_data {
20658880b0dSSepherosa Ziehau 	int			jme_msix_rid;
20758880b0dSSepherosa Ziehau 	int			jme_msix_cpuid;
20858880b0dSSepherosa Ziehau 	u_int			jme_msix_vector;
20958880b0dSSepherosa Ziehau 	uint32_t		jme_msix_intrs;
21058880b0dSSepherosa Ziehau 	struct resource		*jme_msix_res;
21158880b0dSSepherosa Ziehau 	void			*jme_msix_handle;
21258880b0dSSepherosa Ziehau 	struct lwkt_serialize	*jme_msix_serialize;
21358880b0dSSepherosa Ziehau 	char			jme_msix_desc[64];
21458880b0dSSepherosa Ziehau 
21558880b0dSSepherosa Ziehau 	driver_intr_t		*jme_msix_func;
21658880b0dSSepherosa Ziehau 	void			*jme_msix_arg;
21758880b0dSSepherosa Ziehau };
21858880b0dSSepherosa Ziehau 
21983b03786SSepherosa Ziehau #define JME_TX_RING_SIZE(sc)	\
220b020bb10SSepherosa Ziehau     (sizeof(struct jme_desc) * (sc)->jme_cdata.jme_tx_desc_cnt)
2217b040092SSepherosa Ziehau #define JME_RX_RING_SIZE(rdata)	\
2227b040092SSepherosa Ziehau     (sizeof(struct jme_desc) * (rdata)->jme_rx_desc_cnt)
22376fbb0b9SSepherosa Ziehau #define	JME_SSB_SIZE		sizeof(struct jme_ssb)
22476fbb0b9SSepherosa Ziehau 
22576fbb0b9SSepherosa Ziehau /*
22676fbb0b9SSepherosa Ziehau  * Software state per device.
22776fbb0b9SSepherosa Ziehau  */
22876fbb0b9SSepherosa Ziehau struct jme_softc {
22976fbb0b9SSepherosa Ziehau 	struct arpcom		arpcom;
23076fbb0b9SSepherosa Ziehau 	device_t		jme_dev;
23176fbb0b9SSepherosa Ziehau 
23276fbb0b9SSepherosa Ziehau 	int			jme_mem_rid;
23376fbb0b9SSepherosa Ziehau 	struct resource		*jme_mem_res;
23476fbb0b9SSepherosa Ziehau 	bus_space_tag_t		jme_mem_bt;
23576fbb0b9SSepherosa Ziehau 	bus_space_handle_t	jme_mem_bh;
23676fbb0b9SSepherosa Ziehau 
2373eba890aSSepherosa Ziehau 	int			jme_irq_type;
23876fbb0b9SSepherosa Ziehau 	int			jme_irq_rid;
23976fbb0b9SSepherosa Ziehau 	struct resource		*jme_irq_res;
24076fbb0b9SSepherosa Ziehau 	void			*jme_irq_handle;
24158880b0dSSepherosa Ziehau 	struct jme_msix_data	jme_msix[JME_NMSIX];
24258880b0dSSepherosa Ziehau 	int			jme_msix_cnt;
24358880b0dSSepherosa Ziehau 	uint32_t		jme_msinum[JME_MSINUM_CNT];
24487aa452bSSepherosa Ziehau 	int			jme_tx_cpuid;
24576fbb0b9SSepherosa Ziehau 
246*8a0620e4SSepherosa Ziehau 	int			jme_npoll_rxoff;
247*8a0620e4SSepherosa Ziehau 	int			jme_npoll_txoff;
248*8a0620e4SSepherosa Ziehau 
24976fbb0b9SSepherosa Ziehau 	device_t		jme_miibus;
25076fbb0b9SSepherosa Ziehau 	int			jme_phyaddr;
251b249905bSSepherosa Ziehau 	bus_addr_t		jme_lowaddr;
25276fbb0b9SSepherosa Ziehau 
253b249905bSSepherosa Ziehau 	uint32_t		jme_clksrc;
254b249905bSSepherosa Ziehau 	uint32_t		jme_clksrc_1000;
25576fbb0b9SSepherosa Ziehau 	uint32_t		jme_tx_dma_size;
25676fbb0b9SSepherosa Ziehau 	uint32_t		jme_rx_dma_size;
257ec7e787bSSepherosa Ziehau 
258ec7e787bSSepherosa Ziehau 	uint32_t		jme_caps;
259ec7e787bSSepherosa Ziehau #define	JME_CAP_FPGA		0x0001
260ec7e787bSSepherosa Ziehau #define	JME_CAP_PCIE		0x0002
261ec7e787bSSepherosa Ziehau #define	JME_CAP_PMCAP		0x0004
262ec7e787bSSepherosa Ziehau #define	JME_CAP_FASTETH		0x0008
2633a5f3f36SSepherosa Ziehau #define	JME_CAP_JUMBO		0x0010
264ad22907fSSepherosa Ziehau 
265ad22907fSSepherosa Ziehau 	uint32_t		jme_workaround;
266ad22907fSSepherosa Ziehau #define JME_WA_EXTFIFO		0x0001
2673b3da110SSepherosa Ziehau #define JME_WA_HDX		0x0002
268ec7e787bSSepherosa Ziehau 
269cccc3955SSepherosa Ziehau 	boolean_t		jme_has_link;
270cccc3955SSepherosa Ziehau 	boolean_t		jme_in_tick;
27176fbb0b9SSepherosa Ziehau 
27231f0d5a2SSepherosa Ziehau 	struct lwkt_serialize	jme_serialize;
27331f0d5a2SSepherosa Ziehau 	struct lwkt_serialize	*jme_serialize_arr[JME_NSERIALIZE];
27431f0d5a2SSepherosa Ziehau 	int			jme_serialize_cnt;
27531f0d5a2SSepherosa Ziehau 
27676fbb0b9SSepherosa Ziehau 	struct callout		jme_tick_ch;
27776fbb0b9SSepherosa Ziehau 	struct jme_chain_data	jme_cdata;
27876fbb0b9SSepherosa Ziehau 	int			jme_if_flags;
27976fbb0b9SSepherosa Ziehau 	uint32_t		jme_txcsr;
28076fbb0b9SSepherosa Ziehau 	uint32_t		jme_rxcsr;
28176fbb0b9SSepherosa Ziehau 
28276fbb0b9SSepherosa Ziehau 	struct sysctl_ctx_list	jme_sysctl_ctx;
28376fbb0b9SSepherosa Ziehau 	struct sysctl_oid	*jme_sysctl_tree;
28476fbb0b9SSepherosa Ziehau 
28576fbb0b9SSepherosa Ziehau 	/*
28676fbb0b9SSepherosa Ziehau 	 * Sysctl variables
28776fbb0b9SSepherosa Ziehau 	 */
28876fbb0b9SSepherosa Ziehau 	int			jme_tx_coal_to;
28976fbb0b9SSepherosa Ziehau 	int			jme_tx_coal_pkt;
29076fbb0b9SSepherosa Ziehau 	int			jme_rx_coal_to;
29176fbb0b9SSepherosa Ziehau 	int			jme_rx_coal_pkt;
292760c056cSSepherosa Ziehau 	int			jme_rss_debug;
29376fbb0b9SSepherosa Ziehau };
29476fbb0b9SSepherosa Ziehau 
29576fbb0b9SSepherosa Ziehau /* Register access macros. */
29676fbb0b9SSepherosa Ziehau #define CSR_WRITE_4(_sc, reg, val)	\
29776fbb0b9SSepherosa Ziehau 	bus_space_write_4((_sc)->jme_mem_bt, (_sc)->jme_mem_bh, (reg), (val))
29876fbb0b9SSepherosa Ziehau #define CSR_READ_4(_sc, reg)		\
29976fbb0b9SSepherosa Ziehau 	bus_space_read_4((_sc)->jme_mem_bt, (_sc)->jme_mem_bh, (reg))
30076fbb0b9SSepherosa Ziehau 
30176fbb0b9SSepherosa Ziehau #define	JME_MAXERR	5
30276fbb0b9SSepherosa Ziehau 
303dea2452aSSepherosa Ziehau #define	JME_RXCHAIN_RESET(rdata)	\
30476fbb0b9SSepherosa Ziehau do {					\
305dea2452aSSepherosa Ziehau 	(rdata)->jme_rxhead = NULL;	\
306dea2452aSSepherosa Ziehau 	(rdata)->jme_rxtail = NULL;	\
307dea2452aSSepherosa Ziehau 	(rdata)->jme_rxlen = 0;		\
30876fbb0b9SSepherosa Ziehau } while (0)
30976fbb0b9SSepherosa Ziehau 
31076fbb0b9SSepherosa Ziehau #define	JME_TX_TIMEOUT		5
31176fbb0b9SSepherosa Ziehau #define JME_TIMEOUT		1000
31276fbb0b9SSepherosa Ziehau #define JME_PHY_TIMEOUT		1000
31376fbb0b9SSepherosa Ziehau #define JME_EEPROM_TIMEOUT	1000
31476fbb0b9SSepherosa Ziehau 
31576fbb0b9SSepherosa Ziehau #define JME_TXD_RSVD		1
3161bedd927SSepherosa Ziehau /* Large enough to cooperate 64K TSO segment and one spare TX descriptor */
3171bedd927SSepherosa Ziehau #define JME_TXD_SPARE		34
31876fbb0b9SSepherosa Ziehau 
3196afef6abSSepherosa Ziehau #define JME_ENABLE_HWRSS(sc)	\
3206afef6abSSepherosa Ziehau 	((sc)->jme_cdata.jme_rx_ring_cnt > JME_NRXRING_MIN)
3216afef6abSSepherosa Ziehau 
32276fbb0b9SSepherosa Ziehau #endif
323