xref: /onnv-gate/usr/src/uts/common/io/mxfe/mxfeimpl.h (revision 8275:7c223a798022)
14978Sgd78059 /*
24978Sgd78059  * Solaris driver for ethernet cards based on the Macronix 98715
34978Sgd78059  *
44978Sgd78059  * Copyright (c) 2007 by Garrett D'Amore <garrett@damore.org>.
54978Sgd78059  * All rights reserved.
64978Sgd78059  *
74978Sgd78059  * Redistribution and use in source and binary forms, with or without
84978Sgd78059  * modification, are permitted provided that the following conditions
94978Sgd78059  * are met:
104978Sgd78059  * 1. Redistributions of source code must retain the above copyright
114978Sgd78059  *    notice, this list of conditions and the following disclaimer.
124978Sgd78059  * 2. Redistributions in binary form must reproduce the above copyright
134978Sgd78059  *    notice, this list of conditions and the following disclaimer in the
144978Sgd78059  *    documentation and/or other materials provided with the distribution.
154978Sgd78059  * 3. Neither the name of the author nor the names of any co-contributors
164978Sgd78059  *    may be used to endorse or promote products derived from this software
174978Sgd78059  *    without specific prior written permission.
184978Sgd78059  *
194978Sgd78059  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS''
204978Sgd78059  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
214978Sgd78059  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
224978Sgd78059  * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
234978Sgd78059  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
244978Sgd78059  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
254978Sgd78059  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
264978Sgd78059  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
274978Sgd78059  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
284978Sgd78059  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
294978Sgd78059  * POSSIBILITY OF SUCH DAMAGE.
304978Sgd78059  */
316684Sgd78059 /*
326684Sgd78059  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
336684Sgd78059  * Use is subject to license terms.
346684Sgd78059  */
354978Sgd78059 
364978Sgd78059 #ifndef	_MXFEIMPL_H
374978Sgd78059 #define	_MXFEIMPL_H
384978Sgd78059 
394978Sgd78059 /*
404978Sgd78059  * This entire file is private to the MXFE driver.
414978Sgd78059  */
424978Sgd78059 
434978Sgd78059 #ifdef	_KERNEL
444978Sgd78059 
45*8275SEric Cheng #include	<sys/mac_provider.h>
46*8275SEric Cheng 
474978Sgd78059 /*
484978Sgd78059  * Compile time tunables.
494978Sgd78059  */
504978Sgd78059 #define	MXFE_TXRING	128	/* number of xmt buffers */
514978Sgd78059 #define	MXFE_RXRING	256	/* number of rcv buffers */
524978Sgd78059 #define	MXFE_TXRECLAIM	32	/* when to reclaim tx buffers (txavail) */
534978Sgd78059 #define	MXFE_TXRESCHED	120	/* when to resched (txavail) */
544978Sgd78059 #define	MXFE_LINKTIMER	5000	/* how often we check link state (msec) */
554978Sgd78059 #define	MXFE_HEADROOM	34	/* headroom in packet (should be 2 modulo 4) */
564978Sgd78059 
574978Sgd78059 /*
584978Sgd78059  * Constants, do not change.  The bufsize is setup to make sure it comes
594978Sgd78059  * in at a whole number of cache lines, even for 32-long-word aligned
604978Sgd78059  * caches.
614978Sgd78059  */
624978Sgd78059 #define	MXFE_BUFSZ	(1664)		/* big enough for a vlan frame */
634978Sgd78059 #define	MXFE_SETUP_LEN	192		/* size of a setup frame */
644978Sgd78059 
654978Sgd78059 typedef struct mxfe mxfe_t;
664978Sgd78059 typedef struct mxfe_card mxfe_card_t;
674978Sgd78059 typedef struct mxfe_rxbuf mxfe_rxbuf_t;
684978Sgd78059 typedef struct mxfe_txbuf mxfe_txbuf_t;
694978Sgd78059 typedef struct mxfe_desc mxfe_desc_t;
704978Sgd78059 
714978Sgd78059 struct mxfe_card {
724978Sgd78059 	uint16_t	card_venid;	/* PCI vendor id */
734978Sgd78059 	uint16_t	card_devid;	/* PCI device id */
744978Sgd78059 	uint16_t	card_revid;	/* PCI revision id */
754978Sgd78059 	uint16_t	card_revmask;
764978Sgd78059 	char		*card_cardname;	/* Description of the card */
774978Sgd78059 	unsigned	card_model;	/* Card specific flags */
784978Sgd78059 };
794978Sgd78059 
804978Sgd78059 /*
814978Sgd78059  * Device instance structure, one per PCI card.
824978Sgd78059  */
834978Sgd78059 struct mxfe {
844978Sgd78059 	dev_info_t		*mxfe_dip;
854978Sgd78059 	mac_handle_t		mxfe_mh;
864978Sgd78059 	mxfe_card_t		*mxfe_cardp;
874978Sgd78059 	ushort_t		mxfe_cachesize;
884978Sgd78059 	ushort_t		mxfe_sromwidth;
894978Sgd78059 	int			mxfe_flags;
904978Sgd78059 	kmutex_t		mxfe_xmtlock;
914978Sgd78059 	kmutex_t		mxfe_intrlock;
924978Sgd78059 	ddi_iblock_cookie_t	mxfe_icookie;
934978Sgd78059 
944978Sgd78059 	/*
954978Sgd78059 	 * Register access.
964978Sgd78059 	 */
974978Sgd78059 	uint32_t		*mxfe_regs;
984978Sgd78059 	ddi_acc_handle_t	mxfe_regshandle;
994978Sgd78059 
1004978Sgd78059 	/*
1014978Sgd78059 	 * Receive descriptors.
1024978Sgd78059 	 */
1034978Sgd78059 	int			mxfe_rxhead;
1044978Sgd78059 	struct mxfe_desc	*mxfe_rxdescp;
1054978Sgd78059 	ddi_dma_handle_t	mxfe_rxdesc_dmah;
1064978Sgd78059 	ddi_acc_handle_t	mxfe_rxdesc_acch;
1074978Sgd78059 	uint32_t		mxfe_rxdesc_paddr;
1084978Sgd78059 	struct mxfe_rxbuf	**mxfe_rxbufs;
1094978Sgd78059 
1104978Sgd78059 	/*
1114978Sgd78059 	 * Transmit descriptors.
1124978Sgd78059 	 */
1134978Sgd78059 	int			mxfe_txreclaim;
1144978Sgd78059 	int			mxfe_txsend;
1154978Sgd78059 	int			mxfe_txavail;
1164978Sgd78059 	struct mxfe_desc	*mxfe_txdescp;
1174978Sgd78059 	ddi_dma_handle_t	mxfe_txdesc_dmah;
1184978Sgd78059 	ddi_acc_handle_t	mxfe_txdesc_acch;
1194978Sgd78059 	uint32_t		mxfe_txdesc_paddr;
1204978Sgd78059 	struct mxfe_txbuf	**mxfe_txbufs;
1214978Sgd78059 	hrtime_t		mxfe_txstall_time;
1224978Sgd78059 	boolean_t		mxfe_wantw;
1234978Sgd78059 
1244978Sgd78059 	/*
1254978Sgd78059 	 * Address management.
1264978Sgd78059 	 */
1274978Sgd78059 	uchar_t			mxfe_curraddr[ETHERADDRL];
1284978Sgd78059 	boolean_t		mxfe_promisc;
1294978Sgd78059 
1304978Sgd78059 	/*
1314978Sgd78059 	 * Link state.
1324978Sgd78059 	 */
1336684Sgd78059 	int			mxfe_nwaystate;
1346684Sgd78059 	uint64_t		mxfe_lastifspeed;
1356684Sgd78059 	link_duplex_t		mxfe_lastduplex;
1366684Sgd78059 	link_state_t		mxfe_lastlinkup;
1376684Sgd78059 	link_state_t		mxfe_linkup;
1386684Sgd78059 	link_duplex_t		mxfe_duplex;
1396684Sgd78059 	uint64_t		mxfe_ifspeed;
1404978Sgd78059 	boolean_t		mxfe_resetting;	/* no link warning */
1414978Sgd78059 
1424978Sgd78059 	/*
1434978Sgd78059 	 * Transceiver stuff.
1444978Sgd78059 	 */
1454978Sgd78059 	int			mxfe_phyaddr;
1464978Sgd78059 	int			mxfe_phyid;
1474978Sgd78059 	int			mxfe_phyinuse;
1486684Sgd78059 	uint8_t			mxfe_adv_aneg;
1496684Sgd78059 	uint8_t			mxfe_adv_100T4;
1506684Sgd78059 	uint8_t			mxfe_adv_100fdx;
1516684Sgd78059 	uint8_t			mxfe_adv_100hdx;
1526684Sgd78059 	uint8_t			mxfe_adv_10fdx;
1536684Sgd78059 	uint8_t			mxfe_adv_10hdx;
1546684Sgd78059 	uint8_t			mxfe_cap_aneg;
1556684Sgd78059 	uint8_t			mxfe_cap_100T4;
1566684Sgd78059 	uint8_t			mxfe_cap_100fdx;
1576684Sgd78059 	uint8_t			mxfe_cap_100hdx;
1586684Sgd78059 	uint8_t			mxfe_cap_10fdx;
1596684Sgd78059 	uint8_t			mxfe_cap_10hdx;
1604978Sgd78059 	int			mxfe_forcephy;
1616684Sgd78059 	uint16_t		mxfe_bmsr;
1626684Sgd78059 	uint16_t		mxfe_anlpar;
1636684Sgd78059 	uint16_t		mxfe_aner;
1644978Sgd78059 
1654978Sgd78059 	/*
1664978Sgd78059 	 * Kstats.
1674978Sgd78059 	 */
1684978Sgd78059 	kstat_t			*mxfe_intrstat;
1694978Sgd78059 	uint64_t		mxfe_ipackets;
1704978Sgd78059 	uint64_t		mxfe_opackets;
1714978Sgd78059 	uint64_t		mxfe_rbytes;
1724978Sgd78059 	uint64_t		mxfe_obytes;
1734978Sgd78059 	uint64_t		mxfe_brdcstrcv;
1744978Sgd78059 	uint64_t		mxfe_multircv;
1754978Sgd78059 	uint64_t		mxfe_brdcstxmt;
1764978Sgd78059 	uint64_t		mxfe_multixmt;
1774978Sgd78059 
1784978Sgd78059 	unsigned		mxfe_norcvbuf;
1794978Sgd78059 	unsigned		mxfe_noxmtbuf;
1804978Sgd78059 	unsigned		mxfe_errrcv;
1814978Sgd78059 	unsigned		mxfe_errxmt;
1824978Sgd78059 	unsigned		mxfe_missed;
1834978Sgd78059 	unsigned		mxfe_underflow;
1844978Sgd78059 	unsigned		mxfe_overflow;
1854978Sgd78059 	unsigned		mxfe_align_errors;
1864978Sgd78059 	unsigned		mxfe_fcs_errors;
1874978Sgd78059 	unsigned		mxfe_carrier_errors;
1884978Sgd78059 	unsigned		mxfe_collisions;
1894978Sgd78059 	unsigned		mxfe_ex_collisions;
1904978Sgd78059 	unsigned		mxfe_tx_late_collisions;
1914978Sgd78059 	unsigned		mxfe_defer_xmts;
1924978Sgd78059 	unsigned		mxfe_first_collisions;
1934978Sgd78059 	unsigned		mxfe_multi_collisions;
1944978Sgd78059 	unsigned		mxfe_sqe_errors;
1954978Sgd78059 	unsigned		mxfe_macxmt_errors;
1964978Sgd78059 	unsigned		mxfe_macrcv_errors;
1974978Sgd78059 	unsigned		mxfe_toolong_errors;
1984978Sgd78059 	unsigned		mxfe_runt;
1994978Sgd78059 	unsigned		mxfe_jabber;
2004978Sgd78059 };
2014978Sgd78059 
2024978Sgd78059 struct mxfe_rxbuf {
2034978Sgd78059 	caddr_t			rxb_buf;
2044978Sgd78059 	ddi_dma_handle_t	rxb_dmah;
2054978Sgd78059 	ddi_acc_handle_t	rxb_acch;
2064978Sgd78059 	uint32_t		rxb_paddr;
2074978Sgd78059 };
2084978Sgd78059 
2094978Sgd78059 struct mxfe_txbuf {
2104978Sgd78059 	/* bcopy version of tx */
2114978Sgd78059 	caddr_t			txb_buf;
2124978Sgd78059 	uint32_t		txb_paddr;
2134978Sgd78059 	ddi_dma_handle_t	txb_dmah;
2144978Sgd78059 	ddi_acc_handle_t	txb_acch;
2154978Sgd78059 };
2164978Sgd78059 
2174978Sgd78059 /*
2184978Sgd78059  * Descriptor.  We use rings rather than chains.
2194978Sgd78059  */
2204978Sgd78059 struct mxfe_desc {
2214978Sgd78059 	unsigned	desc_status;
2224978Sgd78059 	unsigned	desc_control;
2234978Sgd78059 	unsigned	desc_buffer1;
2244978Sgd78059 	unsigned	desc_buffer2;
2254978Sgd78059 };
2264978Sgd78059 
2274978Sgd78059 #define	PUTTXDESC(mxfep, member, val)	\
2284978Sgd78059 	ddi_put32(mxfep->mxfe_txdesc_acch, &member, val)
2294978Sgd78059 
2304978Sgd78059 #define	PUTRXDESC(mxfep, member, val)	\
2314978Sgd78059 	ddi_put32(mxfep->mxfe_rxdesc_acch, &member, val)
2324978Sgd78059 
2334978Sgd78059 #define	GETTXDESC(mxfep, member)	\
2344978Sgd78059 	ddi_get32(mxfep->mxfe_txdesc_acch, &member)
2354978Sgd78059 
2364978Sgd78059 #define	GETRXDESC(mxfep, member)	\
2374978Sgd78059 	ddi_get32(mxfep->mxfe_rxdesc_acch, &member)
2384978Sgd78059 
2394978Sgd78059 /*
2404978Sgd78059  * Receive descriptor fields.
2414978Sgd78059  */
2424978Sgd78059 #define	RXSTAT_OWN		0x80000000U	/* ownership */
2434978Sgd78059 #define	RXSTAT_RXLEN		0x3FFF0000U	/* frame length, incl. crc */
2444978Sgd78059 #define	RXSTAT_RXERR		0x00008000U	/* error summary */
2454978Sgd78059 #define	RXSTAT_DESCERR		0x00004000U	/* descriptor error */
2464978Sgd78059 #define	RXSTAT_RXTYPE		0x00003000U	/* data type */
2474978Sgd78059 #define	RXSTAT_RUNT		0x00000800U	/* runt frame */
2484978Sgd78059 #define	RXSTAT_GROUP		0x00000400U	/* multicast/brdcast frame */
2494978Sgd78059 #define	RXSTAT_FIRST		0x00000200U	/* first descriptor */
2504978Sgd78059 #define	RXSTAT_LAST		0x00000100U	/* last descriptor */
2514978Sgd78059 #define	RXSTAT_TOOLONG		0x00000080U	/* frame too long */
2524978Sgd78059 #define	RXSTAT_COLLSEEN		0x00000040U	/* late collision seen */
2534978Sgd78059 #define	RXSTAT_FRTYPE		0x00000020U	/* frame type */
2544978Sgd78059 #define	RXSTAT_WATCHDOG		0x00000010U	/* receive watchdog */
2554978Sgd78059 #define	RXSTAT_DRIBBLE		0x00000004U	/* dribbling bit */
2564978Sgd78059 #define	RXSTAT_CRCERR		0x00000002U	/* crc error */
2574978Sgd78059 #define	RXSTAT_OFLOW		0x00000001U	/* fifo overflow */
2584978Sgd78059 #define	RXSTAT_ERRS		(RXSTAT_DESCERR | RXSTAT_RUNT | \
2594978Sgd78059 				RXSTAT_COLLSEEN | RXSTAT_DRIBBLE | \
2604978Sgd78059 				RXSTAT_CRCERR | RXSTAT_OFLOW)
2614978Sgd78059 #define	RXLENGTH(x)		((x & RXSTAT_RXLEN) >> 16)
2624978Sgd78059 
2634978Sgd78059 #define	RXCTL_ENDRING		0x02000000U	/* end of ring */
2644978Sgd78059 #define	RXCTL_CHAIN		0x01000000U	/* chained descriptors */
2654978Sgd78059 #define	RXCTL_BUFLEN2		0x003FF800U	/* buffer 2 length */
2664978Sgd78059 #define	RXCTL_BUFLEN1		0x000007FFU	/* buffer 1 length */
2674978Sgd78059 
2684978Sgd78059 /*
2694978Sgd78059  * Transmit descriptor fields.
2704978Sgd78059  */
2714978Sgd78059 #define	TXSTAT_OWN		0x80000000U	/* ownership */
2724978Sgd78059 #define	TXSTAT_URCNT		0x00C00000U	/* underrun count */
2734978Sgd78059 #define	TXSTAT_TXERR		0x00008000U	/* error summary */
2744978Sgd78059 #define	TXSTAT_JABBER		0x00004000U	/* jabber timeout */
2754978Sgd78059 #define	TXSTAT_CARRLOST		0x00000800U	/* lost carrier */
2764978Sgd78059 #define	TXSTAT_NOCARR		0x00000400U	/* no carrier */
2774978Sgd78059 #define	TXSTAT_LATECOL		0x00000200U	/* late collision */
2784978Sgd78059 #define	TXSTAT_EXCOLL		0x00000100U	/* excessive collisions */
2794978Sgd78059 #define	TXSTAT_SQE		0x00000080U	/* heartbeat failure */
2804978Sgd78059 #define	TXSTAT_COLLCNT		0x00000078U	/* collision count */
2814978Sgd78059 #define	TXSTAT_UFLOW		0x00000002U	/* underflow */
2824978Sgd78059 #define	TXSTAT_DEFER		0x00000001U	/* deferred */
2834978Sgd78059 #define	TXCOLLCNT(x)		((x & TXSTAT_COLLCNT) >> 3)
2844978Sgd78059 #define	TXUFLOWCNT(x)		((x & TXSTAT_URCNT) >> 22)
2854978Sgd78059 
2864978Sgd78059 #define	TXCTL_INTCMPLTE		0x80000000U	/* interrupt completed */
2874978Sgd78059 #define	TXCTL_LAST		0x40000000U	/* last descriptor */
2884978Sgd78059 #define	TXCTL_FIRST		0x20000000U	/* first descriptor */
2894978Sgd78059 #define	TXCTL_NOCRC		0x04000000U	/* disable crc */
2904978Sgd78059 #define	TXCTL_SETUP		0x08000000U	/* setup frame */
2914978Sgd78059 #define	TXCTL_ENDRING		0x02000000U	/* end of ring */
2924978Sgd78059 #define	TXCTL_CHAIN		0x01000000U	/* chained descriptors */
2934978Sgd78059 #define	TXCTL_NOPAD		0x00800000U	/* disable padding */
2944978Sgd78059 #define	TXCTL_HASHPERF		0x00400000U	/* hash perfect mode */
2954978Sgd78059 #define	TXCTL_BUFLEN2		0x003FF800U	/* buffer length 2 */
2964978Sgd78059 #define	TXCTL_BUFLEN1		0x000007FFU	/* buffer length 1 */
2974978Sgd78059 
2984978Sgd78059 /*
2994978Sgd78059  * Interface flags.
3004978Sgd78059  */
3014978Sgd78059 #define	MXFE_RUNNING	0x1	/* chip is initialized */
3024978Sgd78059 #define	MXFE_SUSPENDED	0x2	/* interface is suspended */
3034978Sgd78059 #define	MXFE_SYMBOL	0x8	/* use symbol mode */
3044978Sgd78059 
3054978Sgd78059 /*
3064978Sgd78059  * Link flags...
3074978Sgd78059  */
3084978Sgd78059 #define	MXFE_NOLINK	0x0	/* initial link state, no timer */
3094978Sgd78059 #define	MXFE_NWAYCHECK	0x2	/* checking for NWay support */
3104978Sgd78059 #define	MXFE_NWAYRENEG	0x3	/* renegotiating NWay mode */
3114978Sgd78059 #define	MXFE_GOODLINK	0x4	/* detected link is good */
3124978Sgd78059 
3134978Sgd78059 /*
3144978Sgd78059  * Card models.
3154978Sgd78059  */
3164978Sgd78059 #define	MXFE_MODEL(mxfep)	((mxfep)->mxfe_cardp->card_model)
3174978Sgd78059 #define	MXFE_98715	0x1
3184978Sgd78059 #define	MXFE_98715A	0x2
3194978Sgd78059 #define	MXFE_98715AEC	0x3
3204978Sgd78059 #define	MXFE_98715B	0x4
3214978Sgd78059 #define	MXFE_98725	0x5
3224978Sgd78059 #define	MXFE_98713	0x6
3234978Sgd78059 #define	MXFE_98713A	0x7
3244978Sgd78059 #define	MXFE_PNICII	0x8
3254978Sgd78059 
3264978Sgd78059 /*
3274978Sgd78059  * Register definitions located in mxfe.h exported header file.
3284978Sgd78059  */
3294978Sgd78059 
3304978Sgd78059 /*
3314978Sgd78059  * Macros to simplify hardware access.  Note that the reg/4 is used to
3324978Sgd78059  * help with pointer arithmetic.
3334978Sgd78059  */
3344978Sgd78059 #define	GETCSR(mxfep, reg)	\
3354978Sgd78059 	ddi_get32(mxfep->mxfe_regshandle, mxfep->mxfe_regs + (reg/4))
3364978Sgd78059 
3374978Sgd78059 #define	PUTCSR(mxfep, reg, val)	\
3384978Sgd78059 	ddi_put32(mxfep->mxfe_regshandle, mxfep->mxfe_regs + (reg/4), val)
3394978Sgd78059 
3404978Sgd78059 #define	SETBIT(mxfep, reg, val)	\
3414978Sgd78059 	PUTCSR(mxfep, reg, GETCSR(mxfep, reg) | (val))
3424978Sgd78059 
3434978Sgd78059 #define	CLRBIT(mxfep, reg, val)	\
3444978Sgd78059 	PUTCSR(mxfep, reg, GETCSR(mxfep, reg) & ~(val))
3454978Sgd78059 
3464978Sgd78059 #define	SYNCTXDESC(mxfep, index, who)	\
3474978Sgd78059 	(void) ddi_dma_sync(mxfep->mxfe_txdesc_dmah, \
3484978Sgd78059 	    (index * sizeof (mxfe_desc_t)), sizeof (mxfe_desc_t), who)
3494978Sgd78059 
3504978Sgd78059 #define	SYNCTXBUF(txb, len, who)	\
3514978Sgd78059 	(void) (ddi_dma_sync(txb->txb_dmah, 0, len, who))
3524978Sgd78059 
3534978Sgd78059 #define	SYNCRXDESC(mxfep, index, who)	\
3544978Sgd78059 	(void) ddi_dma_sync(mxfep->mxfe_rxdesc_dmah, \
3554978Sgd78059 	    (index * sizeof (mxfe_desc_t)), sizeof (mxfe_desc_t), who)
3564978Sgd78059 
3574978Sgd78059 #define	SYNCRXBUF(rxb, len, who)	\
3584978Sgd78059 	(void) (ddi_dma_sync(rxb->rxb_dmah, 0, len, who))
3594978Sgd78059 
3604978Sgd78059 /*
3614978Sgd78059  * Debugging flags.
3624978Sgd78059  */
3634978Sgd78059 #define	DWARN	0x0001
3644978Sgd78059 #define	DINTR	0x0002
3654978Sgd78059 #define	DWSRV	0x0004
3664978Sgd78059 #define	DMACID	0x0008
3674978Sgd78059 #define	DDLPI	0x0010
3684978Sgd78059 #define	DPHY	0x0020
3694978Sgd78059 #define	DPCI	0x0040
3704978Sgd78059 #define	DCHATTY	0x0080
3714978Sgd78059 #define	DDMA	0x0100
3724978Sgd78059 #define	DLINK	0x0200
3734978Sgd78059 #define	DSROM	0x0400
3744978Sgd78059 #define	DRECV	0x0800
3754978Sgd78059 #define	DXMIT	0x1000
3764978Sgd78059 
3774978Sgd78059 #ifdef	DEBUG
3784978Sgd78059 #define	DBG(lvl, ...)	mxfe_dprintf(mxfep, __func__, lvl, __VA_ARGS__);
3794978Sgd78059 #else
3804978Sgd78059 #define	DBG(lvl, ...)
3814978Sgd78059 #endif
3824978Sgd78059 
3834978Sgd78059 #endif	/* _KERNEL */
3844978Sgd78059 
3854978Sgd78059 #endif	/* _MXFEIMPL_H */
386