xref: /freebsd/sys/dev/et/if_etvar.h (revision 2ff63af9b88c7413b7d71715b5532625752a248e)
14d52a575SXin LI /*-
27282444bSPedro F. Giffuni  * SPDX-License-Identifier: BSD-3-Clause
37282444bSPedro F. Giffuni  *
4e5fdd9deSXin LI  * Copyright (c) 2007 Sepherosa Ziehau.  All rights reserved.
54d52a575SXin LI  *
64d52a575SXin LI  * This code is derived from software contributed to The DragonFly Project
74d52a575SXin LI  * by Sepherosa Ziehau <sepherosa@gmail.com>
84d52a575SXin LI  *
94d52a575SXin LI  * Redistribution and use in source and binary forms, with or without
104d52a575SXin LI  * modification, are permitted provided that the following conditions
114d52a575SXin LI  * are met:
124d52a575SXin LI  *
134d52a575SXin LI  * 1. Redistributions of source code must retain the above copyright
144d52a575SXin LI  *    notice, this list of conditions and the following disclaimer.
154d52a575SXin LI  * 2. Redistributions in binary form must reproduce the above copyright
164d52a575SXin LI  *    notice, this list of conditions and the following disclaimer in
174d52a575SXin LI  *    the documentation and/or other materials provided with the
184d52a575SXin LI  *    distribution.
194d52a575SXin LI  * 3. Neither the name of The DragonFly Project nor the names of its
204d52a575SXin LI  *    contributors may be used to endorse or promote products derived
214d52a575SXin LI  *    from this software without specific, prior written permission.
224d52a575SXin LI  *
234d52a575SXin LI  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
244d52a575SXin LI  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
254d52a575SXin LI  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
264d52a575SXin LI  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
274d52a575SXin LI  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
284d52a575SXin LI  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
294d52a575SXin LI  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
304d52a575SXin LI  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
314d52a575SXin LI  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
324d52a575SXin LI  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
334d52a575SXin LI  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
344d52a575SXin LI  * SUCH DAMAGE.
354d52a575SXin LI  *
364d52a575SXin LI  * $DragonFly: src/sys/dev/netif/et/if_etvar.h,v 1.4 2007/10/23 14:28:42 sephe Exp $
374d52a575SXin LI  */
384d52a575SXin LI 
394d52a575SXin LI #ifndef _IF_ETVAR_H
404d52a575SXin LI #define _IF_ETVAR_H
414d52a575SXin LI 
4205884511SPyun YongHyeon #define	ET_RING_ALIGN		4096
4305884511SPyun YongHyeon #define	ET_STATUS_ALIGN		8
444d52a575SXin LI #define	ET_NSEG_MAX		32	/* XXX no limit actually */
45244fd28bSPyun YongHyeon #define	ET_NSEG_SPARE		4
464d52a575SXin LI 
474d52a575SXin LI #define	ET_TX_NDESC		512
484d52a575SXin LI #define	ET_RX_NDESC		512
494d52a575SXin LI #define	ET_RX_NRING		2
504d52a575SXin LI #define	ET_RX_NSTAT		(ET_RX_NRING * ET_RX_NDESC)
514d52a575SXin LI 
524d52a575SXin LI #define	ET_TX_RING_SIZE		(ET_TX_NDESC * sizeof(struct et_txdesc))
534d52a575SXin LI #define	ET_RX_RING_SIZE		(ET_RX_NDESC * sizeof(struct et_rxdesc))
544d52a575SXin LI #define	ET_RXSTAT_RING_SIZE	(ET_RX_NSTAT * sizeof(struct et_rxstat))
554d52a575SXin LI 
564d52a575SXin LI #define	ET_JUMBO_FRAMELEN	(ET_MEM_SIZE - ET_MEM_RXSIZE_MIN -	\
574d52a575SXin LI 				 ET_MEM_TXSIZE_EX)
584d52a575SXin LI #define	ET_JUMBO_MTU		(ET_JUMBO_FRAMELEN - ETHER_HDR_LEN -	\
594d52a575SXin LI 				 EVL_ENCAPLEN - ETHER_CRC_LEN)
604d52a575SXin LI 
6105884511SPyun YongHyeon #define	ET_FRAMELEN(mtu)	(ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN +	\
6205884511SPyun YongHyeon 				 (mtu) + ETHER_CRC_LEN)
634d52a575SXin LI 
644d52a575SXin LI #define	ET_JSLOTS		(ET_RX_NDESC + 128)
654d52a575SXin LI #define	ET_JLEN			(ET_JUMBO_FRAMELEN + ETHER_ALIGN)
664d52a575SXin LI #define	ET_JUMBO_MEM_SIZE	(ET_JSLOTS * ET_JLEN)
674d52a575SXin LI 
684d52a575SXin LI #define	CSR_WRITE_4(sc, reg, val)	\
69d95121b4SPyun YongHyeon 	bus_write_4((sc)->sc_mem_res, (reg), (val))
704d52a575SXin LI #define	CSR_READ_4(sc, reg)		\
71d95121b4SPyun YongHyeon 	bus_read_4((sc)->sc_mem_res, (reg))
724d52a575SXin LI 
734d52a575SXin LI #define	ET_ADDR_HI(addr)	((uint64_t) (addr) >> 32)
744d52a575SXin LI #define	ET_ADDR_LO(addr)	((uint64_t) (addr) & 0xffffffff)
754d52a575SXin LI 
764d52a575SXin LI struct et_txdesc {
774d52a575SXin LI 	uint32_t	td_addr_hi;
784d52a575SXin LI 	uint32_t	td_addr_lo;
794d52a575SXin LI 	uint32_t	td_ctrl1;	/* ET_TDCTRL1_ */
804d52a575SXin LI 	uint32_t	td_ctrl2;	/* ET_TDCTRL2_ */
81bbd5260fSPyun YongHyeon };
824d52a575SXin LI 
8323263665SPyun YongHyeon #define	ET_TDCTRL1_LEN_MASK	0x0000FFFF
844d52a575SXin LI 
8523263665SPyun YongHyeon #define	ET_TDCTRL2_LAST_FRAG	0x00000001
8623263665SPyun YongHyeon #define	ET_TDCTRL2_FIRST_FRAG	0x00000002
8723263665SPyun YongHyeon #define	ET_TDCTRL2_INTR		0x00000004
889955274cSPyun YongHyeon #define	ET_TDCTRL2_CTRL_WORD	0x00000008
899955274cSPyun YongHyeon #define	ET_TDCTRL2_HDX_BACKP	0x00000010
909955274cSPyun YongHyeon #define	ET_TDCTRL2_XMIT_PAUSE	0x00000020
919955274cSPyun YongHyeon #define	ET_TDCTRL2_FRAME_ERR	0x00000040
929955274cSPyun YongHyeon #define	ET_TDCTRL2_NO_CRC	0x00000080
939955274cSPyun YongHyeon #define	ET_TDCTRL2_MAC_OVRRD	0x00000100
949955274cSPyun YongHyeon #define	ET_TDCTRL2_PAD_PACKET	0x00000200
959955274cSPyun YongHyeon #define	ET_TDCTRL2_JUMBO_PACKET	0x00000400
969955274cSPyun YongHyeon #define	ET_TDCTRL2_INS_VLAN	0x00000800
979955274cSPyun YongHyeon #define	ET_TDCTRL2_CSUM_IP	0x00001000
989955274cSPyun YongHyeon #define	ET_TDCTRL2_CSUM_TCP	0x00002000
999955274cSPyun YongHyeon #define	ET_TDCTRL2_CSUM_UDP	0x00004000
1004d52a575SXin LI 
1014d52a575SXin LI struct et_rxdesc {
1024d52a575SXin LI 	uint32_t	rd_addr_lo;
1034d52a575SXin LI 	uint32_t	rd_addr_hi;
1044d52a575SXin LI 	uint32_t	rd_ctrl;	/* ET_RDCTRL_ */
105bbd5260fSPyun YongHyeon };
1064d52a575SXin LI 
10723263665SPyun YongHyeon #define	ET_RDCTRL_BUFIDX_MASK	0x000003FF
1084d52a575SXin LI 
1094d52a575SXin LI struct et_rxstat {
1104d52a575SXin LI 	uint32_t	rxst_info1;
1114d52a575SXin LI 	uint32_t	rxst_info2;	/* ET_RXST_INFO2_ */
112bbd5260fSPyun YongHyeon };
1134d52a575SXin LI 
11405884511SPyun YongHyeon #define	ET_RXST_INFO1_HASH_PASS		0x00000001
11505884511SPyun YongHyeon #define	ET_RXST_INFO1_IPCSUM		0x00000002
11605884511SPyun YongHyeon #define	ET_RXST_INFO1_IPCSUM_OK		0x00000004
11705884511SPyun YongHyeon #define	ET_RXST_INFO1_TCPCSUM		0x00000008
11805884511SPyun YongHyeon #define	ET_RXST_INFO1_TCPCSUM_OK	0x00000010
11905884511SPyun YongHyeon #define	ET_RXST_INFO1_WOL		0x00000020
12005884511SPyun YongHyeon #define	ET_RXST_INFO1_RXMAC_ERR		0x00000040
12105884511SPyun YongHyeon #define	ET_RXST_INFO1_DROP		0x00000080
12205884511SPyun YongHyeon #define	ET_RXST_INFO1_FRAME_TRUNC	0x00000100
12305884511SPyun YongHyeon #define	ET_RXST_INFO1_JUMBO		0x00000200
12405884511SPyun YongHyeon #define	ET_RXST_INFO1_VLAN		0x00000400
12505884511SPyun YongHyeon #define	ET_RXST_INFO1_PREV_FRMAE_DROP	0x00010000
12605884511SPyun YongHyeon #define	ET_RXST_INFO1_SHORT		0x00020000
12705884511SPyun YongHyeon #define	ET_RXST_INFO1_BAD_CARRIER	0x00040000
12805884511SPyun YongHyeon #define	ET_RXST_INFO1_CODE_ERR		0x00080000
12905884511SPyun YongHyeon #define	ET_RXST_INFO1_CRC_ERR		0x00100000
13005884511SPyun YongHyeon #define	ET_RXST_INFO1_LEN_MISMATCH	0x00200000
13105884511SPyun YongHyeon #define	ET_RXST_INFO1_TOO_LONG		0x00400000
13205884511SPyun YongHyeon #define	ET_RXST_INFO1_OK		0x00800000
13305884511SPyun YongHyeon #define	ET_RXST_INFO1_MULTICAST		0x01000000
13405884511SPyun YongHyeon #define	ET_RXST_INFO1_BROADCAST		0x02000000
13505884511SPyun YongHyeon #define	ET_RXST_INFO1_DRIBBLE		0x04000000
13605884511SPyun YongHyeon #define	ET_RXST_INFO1_CTL_FRAME		0x08000000
13705884511SPyun YongHyeon #define	ET_RXST_INFO1_PAUSE_FRAME	0x10000000
13805884511SPyun YongHyeon #define	ET_RXST_INFO1_UNKWN_CTL_FRAME	0x20000000
13905884511SPyun YongHyeon #define	ET_RXST_INFO1_VLAN_TAG		0x40000000
14005884511SPyun YongHyeon #define	ET_RXST_INFO1_LONG_EVENT	0x80000000
14105884511SPyun YongHyeon 
14223263665SPyun YongHyeon #define	ET_RXST_INFO2_LEN_MASK		0x0000FFFF
14323263665SPyun YongHyeon #define	ET_RXST_INFO2_LEN_SHIFT		0
14423263665SPyun YongHyeon #define	ET_RXST_INFO2_BUFIDX_MASK	0x03FF0000
14523263665SPyun YongHyeon #define	ET_RXST_INFO2_BUFIDX_SHIFT	16
14623263665SPyun YongHyeon #define	ET_RXST_INFO2_RINGIDX_MASK	0x0C000000
14723263665SPyun YongHyeon #define	ET_RXST_INFO2_RINGIDX_SHIFT	26
1484d52a575SXin LI 
1494d52a575SXin LI struct et_rxstatus {
1504d52a575SXin LI 	uint32_t	rxs_ring;
1514d52a575SXin LI 	uint32_t	rxs_stat_ring;	/* ET_RXS_STATRING_ */
152bbd5260fSPyun YongHyeon };
1534d52a575SXin LI 
15423263665SPyun YongHyeon #define	ET_RXS_STATRING_INDEX_MASK	0x0FFF0000
15523263665SPyun YongHyeon #define	ET_RXS_STATRING_INDEX_SHIFT	16
15623263665SPyun YongHyeon #define	ET_RXS_STATRING_WRAP		0x10000000
1574d52a575SXin LI 
1584d52a575SXin LI struct et_txbuf {
1594d52a575SXin LI 	struct mbuf		*tb_mbuf;
1604d52a575SXin LI 	bus_dmamap_t		tb_dmap;
1614d52a575SXin LI };
1624d52a575SXin LI 
1634d52a575SXin LI struct et_rxbuf {
1644d52a575SXin LI 	struct mbuf		*rb_mbuf;
1654d52a575SXin LI 	bus_dmamap_t		rb_dmap;
1664d52a575SXin LI };
1674d52a575SXin LI 
1684d52a575SXin LI struct et_txstatus_data {
1694d52a575SXin LI 	uint32_t		*txsd_status;
1704d52a575SXin LI 	bus_addr_t		txsd_paddr;
1714d52a575SXin LI 	bus_dma_tag_t		txsd_dtag;
1724d52a575SXin LI 	bus_dmamap_t		txsd_dmap;
1734d52a575SXin LI };
1744d52a575SXin LI 
1754d52a575SXin LI struct et_rxstatus_data {
1764d52a575SXin LI 	struct et_rxstatus	*rxsd_status;
1774d52a575SXin LI 	bus_addr_t		rxsd_paddr;
1784d52a575SXin LI 	bus_dma_tag_t		rxsd_dtag;
1794d52a575SXin LI 	bus_dmamap_t		rxsd_dmap;
1804d52a575SXin LI };
1814d52a575SXin LI 
1824d52a575SXin LI struct et_rxstat_ring {
1834d52a575SXin LI 	struct et_rxstat	*rsr_stat;
1844d52a575SXin LI 	bus_addr_t		rsr_paddr;
1854d52a575SXin LI 	bus_dma_tag_t		rsr_dtag;
1864d52a575SXin LI 	bus_dmamap_t		rsr_dmap;
1874d52a575SXin LI 
1884d52a575SXin LI 	int			rsr_index;
1894d52a575SXin LI 	int			rsr_wrap;
1904d52a575SXin LI };
1914d52a575SXin LI 
1924d52a575SXin LI struct et_txdesc_ring {
1934d52a575SXin LI 	struct et_txdesc	*tr_desc;
1944d52a575SXin LI 	bus_addr_t		tr_paddr;
1954d52a575SXin LI 	bus_dma_tag_t		tr_dtag;
1964d52a575SXin LI 	bus_dmamap_t		tr_dmap;
1974d52a575SXin LI 
1984d52a575SXin LI 	int			tr_ready_index;
1994d52a575SXin LI 	int			tr_ready_wrap;
2004d52a575SXin LI };
2014d52a575SXin LI 
2024d52a575SXin LI struct et_rxdesc_ring {
2034d52a575SXin LI 	struct et_rxdesc	*rr_desc;
2044d52a575SXin LI 	bus_addr_t		rr_paddr;
2054d52a575SXin LI 	bus_dma_tag_t		rr_dtag;
2064d52a575SXin LI 	bus_dmamap_t		rr_dmap;
2074d52a575SXin LI 
2084d52a575SXin LI 	uint32_t		rr_posreg;
2094d52a575SXin LI 	int			rr_index;
2104d52a575SXin LI 	int			rr_wrap;
2114d52a575SXin LI };
2124d52a575SXin LI 
2134d52a575SXin LI struct et_txbuf_data {
2144d52a575SXin LI 	struct et_txbuf		tbd_buf[ET_TX_NDESC];
2154d52a575SXin LI 
2164d52a575SXin LI 	int			tbd_start_index;
2174d52a575SXin LI 	int			tbd_start_wrap;
2184d52a575SXin LI 	int			tbd_used;
2194d52a575SXin LI };
2204d52a575SXin LI 
2214d52a575SXin LI struct et_softc;
2224d52a575SXin LI struct et_rxbuf_data;
2234d52a575SXin LI 
2244d52a575SXin LI struct et_rxbuf_data {
2254d52a575SXin LI 	struct et_rxbuf		rbd_buf[ET_RX_NDESC];
2264d52a575SXin LI 
2274d52a575SXin LI 	struct et_softc		*rbd_softc;
2284d52a575SXin LI 	struct et_rxdesc_ring	*rbd_ring;
2294d52a575SXin LI 
2304d52a575SXin LI 	int			rbd_bufsize;
23105884511SPyun YongHyeon 	int			(*rbd_newbuf)(struct et_rxbuf_data *, int);
23205884511SPyun YongHyeon 	void			(*rbd_discard)(struct et_rxbuf_data *, int);
2334d52a575SXin LI };
2344d52a575SXin LI 
235e0b5ac02SPyun YongHyeon struct et_hw_stats {
236e0b5ac02SPyun YongHyeon 	/* RX/TX stats. */
237e0b5ac02SPyun YongHyeon 	uint64_t		pkts_64;
238e0b5ac02SPyun YongHyeon 	uint64_t		pkts_65;
239e0b5ac02SPyun YongHyeon 	uint64_t		pkts_128;
240e0b5ac02SPyun YongHyeon 	uint64_t		pkts_256;
241e0b5ac02SPyun YongHyeon 	uint64_t		pkts_512;
242e0b5ac02SPyun YongHyeon 	uint64_t		pkts_1024;
243e0b5ac02SPyun YongHyeon 	uint64_t		pkts_1519;
244e0b5ac02SPyun YongHyeon 	/* RX stats. */
245e0b5ac02SPyun YongHyeon 	uint64_t		rx_bytes;
246e0b5ac02SPyun YongHyeon 	uint64_t		rx_frames;
247e0b5ac02SPyun YongHyeon 	uint32_t		rx_crcerrs;
248e0b5ac02SPyun YongHyeon 	uint64_t		rx_mcast;
249e0b5ac02SPyun YongHyeon 	uint64_t		rx_bcast;
250e0b5ac02SPyun YongHyeon 	uint32_t		rx_control;
251e0b5ac02SPyun YongHyeon 	uint32_t		rx_pause;
252e0b5ac02SPyun YongHyeon 	uint32_t		rx_unknown_control;
253e0b5ac02SPyun YongHyeon 	uint32_t		rx_alignerrs;
254e0b5ac02SPyun YongHyeon 	uint32_t		rx_lenerrs;
255e0b5ac02SPyun YongHyeon 	uint32_t		rx_codeerrs;
256e0b5ac02SPyun YongHyeon 	uint32_t		rx_cserrs;
257e0b5ac02SPyun YongHyeon 	uint32_t		rx_runts;
258e0b5ac02SPyun YongHyeon 	uint64_t		rx_oversize;
259e0b5ac02SPyun YongHyeon 	uint32_t		rx_fragments;
260e0b5ac02SPyun YongHyeon 	uint32_t		rx_jabbers;
261e0b5ac02SPyun YongHyeon 	uint32_t		rx_drop;
262e0b5ac02SPyun YongHyeon 	/* TX stats. */
263e0b5ac02SPyun YongHyeon 	uint64_t		tx_bytes;
264e0b5ac02SPyun YongHyeon 	uint64_t		tx_frames;
265e0b5ac02SPyun YongHyeon 	uint64_t		tx_mcast;
266e0b5ac02SPyun YongHyeon 	uint64_t		tx_bcast;
267e0b5ac02SPyun YongHyeon 	uint32_t		tx_pause;
268e0b5ac02SPyun YongHyeon 	uint32_t		tx_deferred;
269e0b5ac02SPyun YongHyeon 	uint32_t		tx_excess_deferred;
270e0b5ac02SPyun YongHyeon 	uint32_t		tx_single_colls;
271e0b5ac02SPyun YongHyeon 	uint32_t		tx_multi_colls;
272e0b5ac02SPyun YongHyeon 	uint32_t		tx_late_colls;
273e0b5ac02SPyun YongHyeon 	uint32_t		tx_excess_colls;
274e0b5ac02SPyun YongHyeon 	uint32_t		tx_total_colls;
275e0b5ac02SPyun YongHyeon 	uint32_t		tx_pause_honored;
276e0b5ac02SPyun YongHyeon 	uint32_t		tx_drop;
277e0b5ac02SPyun YongHyeon 	uint32_t		tx_jabbers;
278e0b5ac02SPyun YongHyeon 	uint32_t		tx_crcerrs;
279e0b5ac02SPyun YongHyeon 	uint32_t		tx_control;
280e0b5ac02SPyun YongHyeon 	uint64_t		tx_oversize;
281e0b5ac02SPyun YongHyeon 	uint32_t		tx_undersize;
282e0b5ac02SPyun YongHyeon 	uint32_t		tx_fragments;
283e0b5ac02SPyun YongHyeon };
284e0b5ac02SPyun YongHyeon 
2854d52a575SXin LI struct et_softc {
286*7c509be1SJustin Hibbits 	if_t			ifp;
2874d52a575SXin LI 	device_t		dev;
2884d52a575SXin LI 	struct mtx		sc_mtx;
2894d52a575SXin LI 	device_t		sc_miibus;
2904d52a575SXin LI 	void			*sc_irq_handle;
2914d52a575SXin LI 	struct resource		*sc_irq_res;
2924d52a575SXin LI 	struct resource		*sc_mem_res;
2934d52a575SXin LI 
2944d52a575SXin LI 	int			sc_if_flags;
2954d52a575SXin LI 	uint32_t		sc_flags;	/* ET_FLAG_ */
296cc3c3b4eSPyun YongHyeon 	int			sc_expcap;
2974d52a575SXin LI 
2984d52a575SXin LI 	int			sc_mem_rid;
2994d52a575SXin LI 
3004d52a575SXin LI 	int			sc_irq_rid;
3014d52a575SXin LI 
3024d52a575SXin LI 	struct callout		sc_tick;
3034d52a575SXin LI 
3044d52a575SXin LI 	int			watchdog_timer;
3054d52a575SXin LI 
3064d52a575SXin LI 	bus_dma_tag_t		sc_dtag;
3074d52a575SXin LI 
3084d52a575SXin LI 	struct et_rxdesc_ring	sc_rx_ring[ET_RX_NRING];
3094d52a575SXin LI 	struct et_rxstat_ring	sc_rxstat_ring;
3104d52a575SXin LI 	struct et_rxstatus_data	sc_rx_status;
3114d52a575SXin LI 
3124d52a575SXin LI 	struct et_txdesc_ring	sc_tx_ring;
3134d52a575SXin LI 	struct et_txstatus_data	sc_tx_status;
3144d52a575SXin LI 
3154d52a575SXin LI 	bus_dma_tag_t		sc_mbuf_dtag;
31605884511SPyun YongHyeon 	bus_dma_tag_t		sc_rx_mini_tag;
31705884511SPyun YongHyeon 	bus_dmamap_t		sc_rx_mini_sparemap;
31805884511SPyun YongHyeon 	bus_dma_tag_t		sc_rx_tag;
31905884511SPyun YongHyeon 	bus_dmamap_t		sc_rx_sparemap;
32005884511SPyun YongHyeon 	bus_dma_tag_t		sc_tx_tag;
3214d52a575SXin LI 	struct et_rxbuf_data	sc_rx_data[ET_RX_NRING];
3224d52a575SXin LI 	struct et_txbuf_data	sc_tx_data;
3234d52a575SXin LI 
324e0b5ac02SPyun YongHyeon 	struct et_hw_stats	sc_stats;
3254d52a575SXin LI 	uint32_t		sc_tx;
3264d52a575SXin LI 	uint32_t		sc_tx_intr;
3274d52a575SXin LI 
3284d52a575SXin LI 	/*
3294d52a575SXin LI 	 * Sysctl variables
3304d52a575SXin LI 	 */
3314d52a575SXin LI 	int			sc_rx_intr_npkts;
3324d52a575SXin LI 	int			sc_rx_intr_delay;
3334d52a575SXin LI 	int			sc_tx_intr_nsegs;
3344d52a575SXin LI 	uint32_t		sc_timer;
3354d52a575SXin LI };
3364d52a575SXin LI 
3374d52a575SXin LI #define	ET_LOCK(_sc)		mtx_lock(&(_sc)->sc_mtx)
3384d52a575SXin LI #define	ET_UNLOCK(_sc)		mtx_unlock(&(_sc)->sc_mtx)
3394d52a575SXin LI #define	ET_LOCK_ASSERT(_sc)	mtx_assert(&(_sc)->sc_mtx, MA_OWNED)
3404d52a575SXin LI 
341cc3c3b4eSPyun YongHyeon #define	ET_FLAG_PCIE		0x0001
342cc3c3b4eSPyun YongHyeon #define	ET_FLAG_MSI		0x0002
3431f009e2fSPyun YongHyeon #define	ET_FLAG_FASTETHER	0x0004
344cc3c3b4eSPyun YongHyeon #define	ET_FLAG_TXRX_ENABLED	0x0100
345cc3c3b4eSPyun YongHyeon #define	ET_FLAG_JUMBO		0x0200
3461f009e2fSPyun YongHyeon #define	ET_FLAG_LINK		0x8000
3474d52a575SXin LI 
3484d52a575SXin LI #endif	/* !_IF_ETVAR_H */
349