1*4978Sgd78059 /* 2*4978Sgd78059 * Solaris driver for ethernet cards based on the Macronix 98715 3*4978Sgd78059 * 4*4978Sgd78059 * Copyright (c) 2007 by Garrett D'Amore <garrett@damore.org>. 5*4978Sgd78059 * All rights reserved. 6*4978Sgd78059 * 7*4978Sgd78059 * Redistribution and use in source and binary forms, with or without 8*4978Sgd78059 * modification, are permitted provided that the following conditions 9*4978Sgd78059 * are met: 10*4978Sgd78059 * 1. Redistributions of source code must retain the above copyright 11*4978Sgd78059 * notice, this list of conditions and the following disclaimer. 12*4978Sgd78059 * 2. Redistributions in binary form must reproduce the above copyright 13*4978Sgd78059 * notice, this list of conditions and the following disclaimer in the 14*4978Sgd78059 * documentation and/or other materials provided with the distribution. 15*4978Sgd78059 * 3. Neither the name of the author nor the names of any co-contributors 16*4978Sgd78059 * may be used to endorse or promote products derived from this software 17*4978Sgd78059 * without specific prior written permission. 18*4978Sgd78059 * 19*4978Sgd78059 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' 20*4978Sgd78059 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 21*4978Sgd78059 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 22*4978Sgd78059 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 23*4978Sgd78059 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24*4978Sgd78059 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25*4978Sgd78059 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26*4978Sgd78059 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27*4978Sgd78059 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28*4978Sgd78059 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29*4978Sgd78059 * POSSIBILITY OF SUCH DAMAGE. 30*4978Sgd78059 */ 31*4978Sgd78059 32*4978Sgd78059 #ifndef _MXFEIMPL_H 33*4978Sgd78059 #define _MXFEIMPL_H 34*4978Sgd78059 35*4978Sgd78059 #pragma ident "%Z%%M% %I% %E% SMI" 36*4978Sgd78059 37*4978Sgd78059 /* 38*4978Sgd78059 * This entire file is private to the MXFE driver. 39*4978Sgd78059 */ 40*4978Sgd78059 41*4978Sgd78059 #ifdef _KERNEL 42*4978Sgd78059 43*4978Sgd78059 /* 44*4978Sgd78059 * Compile time tunables. 45*4978Sgd78059 */ 46*4978Sgd78059 #define MXFE_TXRING 128 /* number of xmt buffers */ 47*4978Sgd78059 #define MXFE_RXRING 256 /* number of rcv buffers */ 48*4978Sgd78059 #define MXFE_TXRECLAIM 32 /* when to reclaim tx buffers (txavail) */ 49*4978Sgd78059 #define MXFE_TXRESCHED 120 /* when to resched (txavail) */ 50*4978Sgd78059 #define MXFE_LINKTIMER 5000 /* how often we check link state (msec) */ 51*4978Sgd78059 #define MXFE_HEADROOM 34 /* headroom in packet (should be 2 modulo 4) */ 52*4978Sgd78059 53*4978Sgd78059 /* 54*4978Sgd78059 * Constants, do not change. The bufsize is setup to make sure it comes 55*4978Sgd78059 * in at a whole number of cache lines, even for 32-long-word aligned 56*4978Sgd78059 * caches. 57*4978Sgd78059 */ 58*4978Sgd78059 #define MXFE_BUFSZ (1664) /* big enough for a vlan frame */ 59*4978Sgd78059 #define MXFE_SETUP_LEN 192 /* size of a setup frame */ 60*4978Sgd78059 61*4978Sgd78059 typedef struct mxfe mxfe_t; 62*4978Sgd78059 typedef struct mxfe_card mxfe_card_t; 63*4978Sgd78059 typedef struct mxfe_nd mxfe_nd_t; 64*4978Sgd78059 typedef struct mxfe_rxbuf mxfe_rxbuf_t; 65*4978Sgd78059 typedef struct mxfe_txbuf mxfe_txbuf_t; 66*4978Sgd78059 typedef struct mxfe_desc mxfe_desc_t; 67*4978Sgd78059 typedef int (*mxfe_nd_pf_t)(mxfe_t *, mblk_t *, mxfe_nd_t *); 68*4978Sgd78059 69*4978Sgd78059 struct mxfe_card { 70*4978Sgd78059 uint16_t card_venid; /* PCI vendor id */ 71*4978Sgd78059 uint16_t card_devid; /* PCI device id */ 72*4978Sgd78059 uint16_t card_revid; /* PCI revision id */ 73*4978Sgd78059 uint16_t card_revmask; 74*4978Sgd78059 char *card_cardname; /* Description of the card */ 75*4978Sgd78059 unsigned card_model; /* Card specific flags */ 76*4978Sgd78059 }; 77*4978Sgd78059 78*4978Sgd78059 struct mxfe_nd { 79*4978Sgd78059 mxfe_nd_t *nd_next; 80*4978Sgd78059 char *nd_name; 81*4978Sgd78059 mxfe_nd_pf_t nd_get; 82*4978Sgd78059 mxfe_nd_pf_t nd_set; 83*4978Sgd78059 intptr_t nd_arg1; 84*4978Sgd78059 intptr_t nd_arg2; 85*4978Sgd78059 }; 86*4978Sgd78059 87*4978Sgd78059 /* 88*4978Sgd78059 * Device instance structure, one per PCI card. 89*4978Sgd78059 */ 90*4978Sgd78059 struct mxfe { 91*4978Sgd78059 dev_info_t *mxfe_dip; 92*4978Sgd78059 mac_handle_t mxfe_mh; 93*4978Sgd78059 mxfe_card_t *mxfe_cardp; 94*4978Sgd78059 ushort_t mxfe_cachesize; 95*4978Sgd78059 ushort_t mxfe_sromwidth; 96*4978Sgd78059 int mxfe_flags; 97*4978Sgd78059 kmutex_t mxfe_xmtlock; 98*4978Sgd78059 kmutex_t mxfe_intrlock; 99*4978Sgd78059 ddi_iblock_cookie_t mxfe_icookie; 100*4978Sgd78059 101*4978Sgd78059 /* 102*4978Sgd78059 * Register access. 103*4978Sgd78059 */ 104*4978Sgd78059 uint32_t *mxfe_regs; 105*4978Sgd78059 ddi_acc_handle_t mxfe_regshandle; 106*4978Sgd78059 107*4978Sgd78059 /* 108*4978Sgd78059 * Receive descriptors. 109*4978Sgd78059 */ 110*4978Sgd78059 int mxfe_rxhead; 111*4978Sgd78059 struct mxfe_desc *mxfe_rxdescp; 112*4978Sgd78059 ddi_dma_handle_t mxfe_rxdesc_dmah; 113*4978Sgd78059 ddi_acc_handle_t mxfe_rxdesc_acch; 114*4978Sgd78059 uint32_t mxfe_rxdesc_paddr; 115*4978Sgd78059 struct mxfe_rxbuf **mxfe_rxbufs; 116*4978Sgd78059 117*4978Sgd78059 /* 118*4978Sgd78059 * Transmit descriptors. 119*4978Sgd78059 */ 120*4978Sgd78059 int mxfe_txreclaim; 121*4978Sgd78059 int mxfe_txsend; 122*4978Sgd78059 int mxfe_txavail; 123*4978Sgd78059 struct mxfe_desc *mxfe_txdescp; 124*4978Sgd78059 ddi_dma_handle_t mxfe_txdesc_dmah; 125*4978Sgd78059 ddi_acc_handle_t mxfe_txdesc_acch; 126*4978Sgd78059 uint32_t mxfe_txdesc_paddr; 127*4978Sgd78059 struct mxfe_txbuf **mxfe_txbufs; 128*4978Sgd78059 hrtime_t mxfe_txstall_time; 129*4978Sgd78059 boolean_t mxfe_wantw; 130*4978Sgd78059 131*4978Sgd78059 /* 132*4978Sgd78059 * Address management. 133*4978Sgd78059 */ 134*4978Sgd78059 uchar_t mxfe_curraddr[ETHERADDRL]; 135*4978Sgd78059 boolean_t mxfe_promisc; 136*4978Sgd78059 137*4978Sgd78059 /* 138*4978Sgd78059 * Link state. 139*4978Sgd78059 */ 140*4978Sgd78059 int mxfe_linkstate; 141*4978Sgd78059 int mxfe_lastifspeed; 142*4978Sgd78059 int mxfe_lastduplex; 143*4978Sgd78059 int mxfe_lastlinkup; 144*4978Sgd78059 int mxfe_linkup; 145*4978Sgd78059 int mxfe_duplex; 146*4978Sgd78059 int mxfe_ifspeed; 147*4978Sgd78059 boolean_t mxfe_resetting; /* no link warning */ 148*4978Sgd78059 149*4978Sgd78059 /* 150*4978Sgd78059 * NDD related support. 151*4978Sgd78059 */ 152*4978Sgd78059 mxfe_nd_t *mxfe_ndp; 153*4978Sgd78059 154*4978Sgd78059 /* 155*4978Sgd78059 * Transceiver stuff. 156*4978Sgd78059 */ 157*4978Sgd78059 int mxfe_phyaddr; 158*4978Sgd78059 int mxfe_phyid; 159*4978Sgd78059 int mxfe_phyinuse; 160*4978Sgd78059 int mxfe_adv_aneg; 161*4978Sgd78059 int mxfe_adv_100T4; 162*4978Sgd78059 int mxfe_adv_100fdx; 163*4978Sgd78059 int mxfe_adv_100hdx; 164*4978Sgd78059 int mxfe_adv_10fdx; 165*4978Sgd78059 int mxfe_adv_10hdx; 166*4978Sgd78059 int mxfe_forcephy; 167*4978Sgd78059 int mxfe_bmsr; 168*4978Sgd78059 int mxfe_anlpar; 169*4978Sgd78059 int mxfe_aner; 170*4978Sgd78059 171*4978Sgd78059 /* 172*4978Sgd78059 * Kstats. 173*4978Sgd78059 */ 174*4978Sgd78059 kstat_t *mxfe_intrstat; 175*4978Sgd78059 uint64_t mxfe_ipackets; 176*4978Sgd78059 uint64_t mxfe_opackets; 177*4978Sgd78059 uint64_t mxfe_rbytes; 178*4978Sgd78059 uint64_t mxfe_obytes; 179*4978Sgd78059 uint64_t mxfe_brdcstrcv; 180*4978Sgd78059 uint64_t mxfe_multircv; 181*4978Sgd78059 uint64_t mxfe_brdcstxmt; 182*4978Sgd78059 uint64_t mxfe_multixmt; 183*4978Sgd78059 184*4978Sgd78059 unsigned mxfe_norcvbuf; 185*4978Sgd78059 unsigned mxfe_noxmtbuf; 186*4978Sgd78059 unsigned mxfe_errrcv; 187*4978Sgd78059 unsigned mxfe_errxmt; 188*4978Sgd78059 unsigned mxfe_missed; 189*4978Sgd78059 unsigned mxfe_underflow; 190*4978Sgd78059 unsigned mxfe_overflow; 191*4978Sgd78059 unsigned mxfe_align_errors; 192*4978Sgd78059 unsigned mxfe_fcs_errors; 193*4978Sgd78059 unsigned mxfe_carrier_errors; 194*4978Sgd78059 unsigned mxfe_collisions; 195*4978Sgd78059 unsigned mxfe_ex_collisions; 196*4978Sgd78059 unsigned mxfe_tx_late_collisions; 197*4978Sgd78059 unsigned mxfe_defer_xmts; 198*4978Sgd78059 unsigned mxfe_first_collisions; 199*4978Sgd78059 unsigned mxfe_multi_collisions; 200*4978Sgd78059 unsigned mxfe_sqe_errors; 201*4978Sgd78059 unsigned mxfe_macxmt_errors; 202*4978Sgd78059 unsigned mxfe_macrcv_errors; 203*4978Sgd78059 unsigned mxfe_toolong_errors; 204*4978Sgd78059 unsigned mxfe_runt; 205*4978Sgd78059 unsigned mxfe_jabber; 206*4978Sgd78059 }; 207*4978Sgd78059 208*4978Sgd78059 struct mxfe_rxbuf { 209*4978Sgd78059 caddr_t rxb_buf; 210*4978Sgd78059 ddi_dma_handle_t rxb_dmah; 211*4978Sgd78059 ddi_acc_handle_t rxb_acch; 212*4978Sgd78059 uint32_t rxb_paddr; 213*4978Sgd78059 }; 214*4978Sgd78059 215*4978Sgd78059 struct mxfe_txbuf { 216*4978Sgd78059 /* bcopy version of tx */ 217*4978Sgd78059 caddr_t txb_buf; 218*4978Sgd78059 uint32_t txb_paddr; 219*4978Sgd78059 ddi_dma_handle_t txb_dmah; 220*4978Sgd78059 ddi_acc_handle_t txb_acch; 221*4978Sgd78059 }; 222*4978Sgd78059 223*4978Sgd78059 /* 224*4978Sgd78059 * Descriptor. We use rings rather than chains. 225*4978Sgd78059 */ 226*4978Sgd78059 struct mxfe_desc { 227*4978Sgd78059 unsigned desc_status; 228*4978Sgd78059 unsigned desc_control; 229*4978Sgd78059 unsigned desc_buffer1; 230*4978Sgd78059 unsigned desc_buffer2; 231*4978Sgd78059 }; 232*4978Sgd78059 233*4978Sgd78059 #define PUTTXDESC(mxfep, member, val) \ 234*4978Sgd78059 ddi_put32(mxfep->mxfe_txdesc_acch, &member, val) 235*4978Sgd78059 236*4978Sgd78059 #define PUTRXDESC(mxfep, member, val) \ 237*4978Sgd78059 ddi_put32(mxfep->mxfe_rxdesc_acch, &member, val) 238*4978Sgd78059 239*4978Sgd78059 #define GETTXDESC(mxfep, member) \ 240*4978Sgd78059 ddi_get32(mxfep->mxfe_txdesc_acch, &member) 241*4978Sgd78059 242*4978Sgd78059 #define GETRXDESC(mxfep, member) \ 243*4978Sgd78059 ddi_get32(mxfep->mxfe_rxdesc_acch, &member) 244*4978Sgd78059 245*4978Sgd78059 /* 246*4978Sgd78059 * Receive descriptor fields. 247*4978Sgd78059 */ 248*4978Sgd78059 #define RXSTAT_OWN 0x80000000U /* ownership */ 249*4978Sgd78059 #define RXSTAT_RXLEN 0x3FFF0000U /* frame length, incl. crc */ 250*4978Sgd78059 #define RXSTAT_RXERR 0x00008000U /* error summary */ 251*4978Sgd78059 #define RXSTAT_DESCERR 0x00004000U /* descriptor error */ 252*4978Sgd78059 #define RXSTAT_RXTYPE 0x00003000U /* data type */ 253*4978Sgd78059 #define RXSTAT_RUNT 0x00000800U /* runt frame */ 254*4978Sgd78059 #define RXSTAT_GROUP 0x00000400U /* multicast/brdcast frame */ 255*4978Sgd78059 #define RXSTAT_FIRST 0x00000200U /* first descriptor */ 256*4978Sgd78059 #define RXSTAT_LAST 0x00000100U /* last descriptor */ 257*4978Sgd78059 #define RXSTAT_TOOLONG 0x00000080U /* frame too long */ 258*4978Sgd78059 #define RXSTAT_COLLSEEN 0x00000040U /* late collision seen */ 259*4978Sgd78059 #define RXSTAT_FRTYPE 0x00000020U /* frame type */ 260*4978Sgd78059 #define RXSTAT_WATCHDOG 0x00000010U /* receive watchdog */ 261*4978Sgd78059 #define RXSTAT_DRIBBLE 0x00000004U /* dribbling bit */ 262*4978Sgd78059 #define RXSTAT_CRCERR 0x00000002U /* crc error */ 263*4978Sgd78059 #define RXSTAT_OFLOW 0x00000001U /* fifo overflow */ 264*4978Sgd78059 #define RXSTAT_ERRS (RXSTAT_DESCERR | RXSTAT_RUNT | \ 265*4978Sgd78059 RXSTAT_COLLSEEN | RXSTAT_DRIBBLE | \ 266*4978Sgd78059 RXSTAT_CRCERR | RXSTAT_OFLOW) 267*4978Sgd78059 #define RXLENGTH(x) ((x & RXSTAT_RXLEN) >> 16) 268*4978Sgd78059 269*4978Sgd78059 #define RXCTL_ENDRING 0x02000000U /* end of ring */ 270*4978Sgd78059 #define RXCTL_CHAIN 0x01000000U /* chained descriptors */ 271*4978Sgd78059 #define RXCTL_BUFLEN2 0x003FF800U /* buffer 2 length */ 272*4978Sgd78059 #define RXCTL_BUFLEN1 0x000007FFU /* buffer 1 length */ 273*4978Sgd78059 274*4978Sgd78059 /* 275*4978Sgd78059 * Transmit descriptor fields. 276*4978Sgd78059 */ 277*4978Sgd78059 #define TXSTAT_OWN 0x80000000U /* ownership */ 278*4978Sgd78059 #define TXSTAT_URCNT 0x00C00000U /* underrun count */ 279*4978Sgd78059 #define TXSTAT_TXERR 0x00008000U /* error summary */ 280*4978Sgd78059 #define TXSTAT_JABBER 0x00004000U /* jabber timeout */ 281*4978Sgd78059 #define TXSTAT_CARRLOST 0x00000800U /* lost carrier */ 282*4978Sgd78059 #define TXSTAT_NOCARR 0x00000400U /* no carrier */ 283*4978Sgd78059 #define TXSTAT_LATECOL 0x00000200U /* late collision */ 284*4978Sgd78059 #define TXSTAT_EXCOLL 0x00000100U /* excessive collisions */ 285*4978Sgd78059 #define TXSTAT_SQE 0x00000080U /* heartbeat failure */ 286*4978Sgd78059 #define TXSTAT_COLLCNT 0x00000078U /* collision count */ 287*4978Sgd78059 #define TXSTAT_UFLOW 0x00000002U /* underflow */ 288*4978Sgd78059 #define TXSTAT_DEFER 0x00000001U /* deferred */ 289*4978Sgd78059 #define TXCOLLCNT(x) ((x & TXSTAT_COLLCNT) >> 3) 290*4978Sgd78059 #define TXUFLOWCNT(x) ((x & TXSTAT_URCNT) >> 22) 291*4978Sgd78059 292*4978Sgd78059 #define TXCTL_INTCMPLTE 0x80000000U /* interrupt completed */ 293*4978Sgd78059 #define TXCTL_LAST 0x40000000U /* last descriptor */ 294*4978Sgd78059 #define TXCTL_FIRST 0x20000000U /* first descriptor */ 295*4978Sgd78059 #define TXCTL_NOCRC 0x04000000U /* disable crc */ 296*4978Sgd78059 #define TXCTL_SETUP 0x08000000U /* setup frame */ 297*4978Sgd78059 #define TXCTL_ENDRING 0x02000000U /* end of ring */ 298*4978Sgd78059 #define TXCTL_CHAIN 0x01000000U /* chained descriptors */ 299*4978Sgd78059 #define TXCTL_NOPAD 0x00800000U /* disable padding */ 300*4978Sgd78059 #define TXCTL_HASHPERF 0x00400000U /* hash perfect mode */ 301*4978Sgd78059 #define TXCTL_BUFLEN2 0x003FF800U /* buffer length 2 */ 302*4978Sgd78059 #define TXCTL_BUFLEN1 0x000007FFU /* buffer length 1 */ 303*4978Sgd78059 304*4978Sgd78059 /* 305*4978Sgd78059 * Interface flags. 306*4978Sgd78059 */ 307*4978Sgd78059 #define MXFE_RUNNING 0x1 /* chip is initialized */ 308*4978Sgd78059 #define MXFE_SUSPENDED 0x2 /* interface is suspended */ 309*4978Sgd78059 #define MXFE_SYMBOL 0x8 /* use symbol mode */ 310*4978Sgd78059 311*4978Sgd78059 /* 312*4978Sgd78059 * Link flags... 313*4978Sgd78059 */ 314*4978Sgd78059 #define MXFE_NOLINK 0x0 /* initial link state, no timer */ 315*4978Sgd78059 #define MXFE_NWAYCHECK 0x2 /* checking for NWay support */ 316*4978Sgd78059 #define MXFE_NWAYRENEG 0x3 /* renegotiating NWay mode */ 317*4978Sgd78059 #define MXFE_GOODLINK 0x4 /* detected link is good */ 318*4978Sgd78059 319*4978Sgd78059 /* 320*4978Sgd78059 * Card models. 321*4978Sgd78059 */ 322*4978Sgd78059 #define MXFE_MODEL(mxfep) ((mxfep)->mxfe_cardp->card_model) 323*4978Sgd78059 #define MXFE_98715 0x1 324*4978Sgd78059 #define MXFE_98715A 0x2 325*4978Sgd78059 #define MXFE_98715AEC 0x3 326*4978Sgd78059 #define MXFE_98715B 0x4 327*4978Sgd78059 #define MXFE_98725 0x5 328*4978Sgd78059 #define MXFE_98713 0x6 329*4978Sgd78059 #define MXFE_98713A 0x7 330*4978Sgd78059 #define MXFE_PNICII 0x8 331*4978Sgd78059 332*4978Sgd78059 /* 333*4978Sgd78059 * Register definitions located in mxfe.h exported header file. 334*4978Sgd78059 */ 335*4978Sgd78059 336*4978Sgd78059 /* 337*4978Sgd78059 * Macros to simplify hardware access. Note that the reg/4 is used to 338*4978Sgd78059 * help with pointer arithmetic. 339*4978Sgd78059 */ 340*4978Sgd78059 #define GETCSR(mxfep, reg) \ 341*4978Sgd78059 ddi_get32(mxfep->mxfe_regshandle, mxfep->mxfe_regs + (reg/4)) 342*4978Sgd78059 343*4978Sgd78059 #define PUTCSR(mxfep, reg, val) \ 344*4978Sgd78059 ddi_put32(mxfep->mxfe_regshandle, mxfep->mxfe_regs + (reg/4), val) 345*4978Sgd78059 346*4978Sgd78059 #define SETBIT(mxfep, reg, val) \ 347*4978Sgd78059 PUTCSR(mxfep, reg, GETCSR(mxfep, reg) | (val)) 348*4978Sgd78059 349*4978Sgd78059 #define CLRBIT(mxfep, reg, val) \ 350*4978Sgd78059 PUTCSR(mxfep, reg, GETCSR(mxfep, reg) & ~(val)) 351*4978Sgd78059 352*4978Sgd78059 #define SYNCTXDESC(mxfep, index, who) \ 353*4978Sgd78059 (void) ddi_dma_sync(mxfep->mxfe_txdesc_dmah, \ 354*4978Sgd78059 (index * sizeof (mxfe_desc_t)), sizeof (mxfe_desc_t), who) 355*4978Sgd78059 356*4978Sgd78059 #define SYNCTXBUF(txb, len, who) \ 357*4978Sgd78059 (void) (ddi_dma_sync(txb->txb_dmah, 0, len, who)) 358*4978Sgd78059 359*4978Sgd78059 #define SYNCRXDESC(mxfep, index, who) \ 360*4978Sgd78059 (void) ddi_dma_sync(mxfep->mxfe_rxdesc_dmah, \ 361*4978Sgd78059 (index * sizeof (mxfe_desc_t)), sizeof (mxfe_desc_t), who) 362*4978Sgd78059 363*4978Sgd78059 #define SYNCRXBUF(rxb, len, who) \ 364*4978Sgd78059 (void) (ddi_dma_sync(rxb->rxb_dmah, 0, len, who)) 365*4978Sgd78059 366*4978Sgd78059 /* 367*4978Sgd78059 * Debugging flags. 368*4978Sgd78059 */ 369*4978Sgd78059 #define DWARN 0x0001 370*4978Sgd78059 #define DINTR 0x0002 371*4978Sgd78059 #define DWSRV 0x0004 372*4978Sgd78059 #define DMACID 0x0008 373*4978Sgd78059 #define DDLPI 0x0010 374*4978Sgd78059 #define DPHY 0x0020 375*4978Sgd78059 #define DPCI 0x0040 376*4978Sgd78059 #define DCHATTY 0x0080 377*4978Sgd78059 #define DDMA 0x0100 378*4978Sgd78059 #define DLINK 0x0200 379*4978Sgd78059 #define DSROM 0x0400 380*4978Sgd78059 #define DRECV 0x0800 381*4978Sgd78059 #define DXMIT 0x1000 382*4978Sgd78059 383*4978Sgd78059 #ifdef DEBUG 384*4978Sgd78059 #define DBG(lvl, ...) mxfe_dprintf(mxfep, __func__, lvl, __VA_ARGS__); 385*4978Sgd78059 #else 386*4978Sgd78059 #define DBG(lvl, ...) 387*4978Sgd78059 #endif 388*4978Sgd78059 389*4978Sgd78059 #endif /* _KERNEL */ 390*4978Sgd78059 391*4978Sgd78059 #endif /* _MXFEIMPL_H */ 392