xref: /dflybsd-src/sys/dev/netif/jme/if_jmevar.h (revision 4c3cb79ad5504188a54d8c4de2fca25bb24fecfc)
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