129e83d4bSgd78059 /* 229e83d4bSgd78059 * Solaris driver for ethernet cards based on the Macronix 98715 329e83d4bSgd78059 * 429e83d4bSgd78059 * Copyright (c) 2007 by Garrett D'Amore <garrett@damore.org>. 529e83d4bSgd78059 * All rights reserved. 629e83d4bSgd78059 * 729e83d4bSgd78059 * Redistribution and use in source and binary forms, with or without 829e83d4bSgd78059 * modification, are permitted provided that the following conditions 929e83d4bSgd78059 * are met: 1029e83d4bSgd78059 * 1. Redistributions of source code must retain the above copyright 1129e83d4bSgd78059 * notice, this list of conditions and the following disclaimer. 1229e83d4bSgd78059 * 2. Redistributions in binary form must reproduce the above copyright 1329e83d4bSgd78059 * notice, this list of conditions and the following disclaimer in the 1429e83d4bSgd78059 * documentation and/or other materials provided with the distribution. 1529e83d4bSgd78059 * 3. Neither the name of the author nor the names of any co-contributors 1629e83d4bSgd78059 * may be used to endorse or promote products derived from this software 1729e83d4bSgd78059 * without specific prior written permission. 1829e83d4bSgd78059 * 1929e83d4bSgd78059 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS ``AS IS'' 2029e83d4bSgd78059 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2129e83d4bSgd78059 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2229e83d4bSgd78059 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 2329e83d4bSgd78059 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2429e83d4bSgd78059 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2529e83d4bSgd78059 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2629e83d4bSgd78059 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2729e83d4bSgd78059 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2829e83d4bSgd78059 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 2929e83d4bSgd78059 * POSSIBILITY OF SUCH DAMAGE. 3029e83d4bSgd78059 */ 3196fb08b9Sgd78059 /* 3296fb08b9Sgd78059 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 3396fb08b9Sgd78059 * Use is subject to license terms. 3496fb08b9Sgd78059 */ 3529e83d4bSgd78059 3629e83d4bSgd78059 #ifndef _MXFEIMPL_H 3729e83d4bSgd78059 #define _MXFEIMPL_H 3829e83d4bSgd78059 3929e83d4bSgd78059 /* 4029e83d4bSgd78059 * This entire file is private to the MXFE driver. 4129e83d4bSgd78059 */ 4229e83d4bSgd78059 4329e83d4bSgd78059 #ifdef _KERNEL 4429e83d4bSgd78059 45*da14cebeSEric Cheng #include <sys/mac_provider.h> 46*da14cebeSEric Cheng 4729e83d4bSgd78059 /* 4829e83d4bSgd78059 * Compile time tunables. 4929e83d4bSgd78059 */ 5029e83d4bSgd78059 #define MXFE_TXRING 128 /* number of xmt buffers */ 5129e83d4bSgd78059 #define MXFE_RXRING 256 /* number of rcv buffers */ 5229e83d4bSgd78059 #define MXFE_TXRECLAIM 32 /* when to reclaim tx buffers (txavail) */ 5329e83d4bSgd78059 #define MXFE_TXRESCHED 120 /* when to resched (txavail) */ 5429e83d4bSgd78059 #define MXFE_LINKTIMER 5000 /* how often we check link state (msec) */ 5529e83d4bSgd78059 #define MXFE_HEADROOM 34 /* headroom in packet (should be 2 modulo 4) */ 5629e83d4bSgd78059 5729e83d4bSgd78059 /* 5829e83d4bSgd78059 * Constants, do not change. The bufsize is setup to make sure it comes 5929e83d4bSgd78059 * in at a whole number of cache lines, even for 32-long-word aligned 6029e83d4bSgd78059 * caches. 6129e83d4bSgd78059 */ 6229e83d4bSgd78059 #define MXFE_BUFSZ (1664) /* big enough for a vlan frame */ 6329e83d4bSgd78059 #define MXFE_SETUP_LEN 192 /* size of a setup frame */ 6429e83d4bSgd78059 6529e83d4bSgd78059 typedef struct mxfe mxfe_t; 6629e83d4bSgd78059 typedef struct mxfe_card mxfe_card_t; 6729e83d4bSgd78059 typedef struct mxfe_rxbuf mxfe_rxbuf_t; 6829e83d4bSgd78059 typedef struct mxfe_txbuf mxfe_txbuf_t; 6929e83d4bSgd78059 typedef struct mxfe_desc mxfe_desc_t; 7029e83d4bSgd78059 7129e83d4bSgd78059 struct mxfe_card { 7229e83d4bSgd78059 uint16_t card_venid; /* PCI vendor id */ 7329e83d4bSgd78059 uint16_t card_devid; /* PCI device id */ 7429e83d4bSgd78059 uint16_t card_revid; /* PCI revision id */ 7529e83d4bSgd78059 uint16_t card_revmask; 7629e83d4bSgd78059 char *card_cardname; /* Description of the card */ 7729e83d4bSgd78059 unsigned card_model; /* Card specific flags */ 7829e83d4bSgd78059 }; 7929e83d4bSgd78059 8029e83d4bSgd78059 /* 8129e83d4bSgd78059 * Device instance structure, one per PCI card. 8229e83d4bSgd78059 */ 8329e83d4bSgd78059 struct mxfe { 8429e83d4bSgd78059 dev_info_t *mxfe_dip; 8529e83d4bSgd78059 mac_handle_t mxfe_mh; 8629e83d4bSgd78059 mxfe_card_t *mxfe_cardp; 8729e83d4bSgd78059 ushort_t mxfe_cachesize; 8829e83d4bSgd78059 ushort_t mxfe_sromwidth; 8929e83d4bSgd78059 int mxfe_flags; 9029e83d4bSgd78059 kmutex_t mxfe_xmtlock; 9129e83d4bSgd78059 kmutex_t mxfe_intrlock; 9229e83d4bSgd78059 ddi_iblock_cookie_t mxfe_icookie; 9329e83d4bSgd78059 9429e83d4bSgd78059 /* 9529e83d4bSgd78059 * Register access. 9629e83d4bSgd78059 */ 9729e83d4bSgd78059 uint32_t *mxfe_regs; 9829e83d4bSgd78059 ddi_acc_handle_t mxfe_regshandle; 9929e83d4bSgd78059 10029e83d4bSgd78059 /* 10129e83d4bSgd78059 * Receive descriptors. 10229e83d4bSgd78059 */ 10329e83d4bSgd78059 int mxfe_rxhead; 10429e83d4bSgd78059 struct mxfe_desc *mxfe_rxdescp; 10529e83d4bSgd78059 ddi_dma_handle_t mxfe_rxdesc_dmah; 10629e83d4bSgd78059 ddi_acc_handle_t mxfe_rxdesc_acch; 10729e83d4bSgd78059 uint32_t mxfe_rxdesc_paddr; 10829e83d4bSgd78059 struct mxfe_rxbuf **mxfe_rxbufs; 10929e83d4bSgd78059 11029e83d4bSgd78059 /* 11129e83d4bSgd78059 * Transmit descriptors. 11229e83d4bSgd78059 */ 11329e83d4bSgd78059 int mxfe_txreclaim; 11429e83d4bSgd78059 int mxfe_txsend; 11529e83d4bSgd78059 int mxfe_txavail; 11629e83d4bSgd78059 struct mxfe_desc *mxfe_txdescp; 11729e83d4bSgd78059 ddi_dma_handle_t mxfe_txdesc_dmah; 11829e83d4bSgd78059 ddi_acc_handle_t mxfe_txdesc_acch; 11929e83d4bSgd78059 uint32_t mxfe_txdesc_paddr; 12029e83d4bSgd78059 struct mxfe_txbuf **mxfe_txbufs; 12129e83d4bSgd78059 hrtime_t mxfe_txstall_time; 12229e83d4bSgd78059 boolean_t mxfe_wantw; 12329e83d4bSgd78059 12429e83d4bSgd78059 /* 12529e83d4bSgd78059 * Address management. 12629e83d4bSgd78059 */ 12729e83d4bSgd78059 uchar_t mxfe_curraddr[ETHERADDRL]; 12829e83d4bSgd78059 boolean_t mxfe_promisc; 12929e83d4bSgd78059 13029e83d4bSgd78059 /* 13129e83d4bSgd78059 * Link state. 13229e83d4bSgd78059 */ 13396fb08b9Sgd78059 int mxfe_nwaystate; 13496fb08b9Sgd78059 uint64_t mxfe_lastifspeed; 13596fb08b9Sgd78059 link_duplex_t mxfe_lastduplex; 13696fb08b9Sgd78059 link_state_t mxfe_lastlinkup; 13796fb08b9Sgd78059 link_state_t mxfe_linkup; 13896fb08b9Sgd78059 link_duplex_t mxfe_duplex; 13996fb08b9Sgd78059 uint64_t mxfe_ifspeed; 14029e83d4bSgd78059 boolean_t mxfe_resetting; /* no link warning */ 14129e83d4bSgd78059 14229e83d4bSgd78059 /* 14329e83d4bSgd78059 * Transceiver stuff. 14429e83d4bSgd78059 */ 14529e83d4bSgd78059 int mxfe_phyaddr; 14629e83d4bSgd78059 int mxfe_phyid; 14729e83d4bSgd78059 int mxfe_phyinuse; 14896fb08b9Sgd78059 uint8_t mxfe_adv_aneg; 14996fb08b9Sgd78059 uint8_t mxfe_adv_100T4; 15096fb08b9Sgd78059 uint8_t mxfe_adv_100fdx; 15196fb08b9Sgd78059 uint8_t mxfe_adv_100hdx; 15296fb08b9Sgd78059 uint8_t mxfe_adv_10fdx; 15396fb08b9Sgd78059 uint8_t mxfe_adv_10hdx; 15496fb08b9Sgd78059 uint8_t mxfe_cap_aneg; 15596fb08b9Sgd78059 uint8_t mxfe_cap_100T4; 15696fb08b9Sgd78059 uint8_t mxfe_cap_100fdx; 15796fb08b9Sgd78059 uint8_t mxfe_cap_100hdx; 15896fb08b9Sgd78059 uint8_t mxfe_cap_10fdx; 15996fb08b9Sgd78059 uint8_t mxfe_cap_10hdx; 16029e83d4bSgd78059 int mxfe_forcephy; 16196fb08b9Sgd78059 uint16_t mxfe_bmsr; 16296fb08b9Sgd78059 uint16_t mxfe_anlpar; 16396fb08b9Sgd78059 uint16_t mxfe_aner; 16429e83d4bSgd78059 16529e83d4bSgd78059 /* 16629e83d4bSgd78059 * Kstats. 16729e83d4bSgd78059 */ 16829e83d4bSgd78059 kstat_t *mxfe_intrstat; 16929e83d4bSgd78059 uint64_t mxfe_ipackets; 17029e83d4bSgd78059 uint64_t mxfe_opackets; 17129e83d4bSgd78059 uint64_t mxfe_rbytes; 17229e83d4bSgd78059 uint64_t mxfe_obytes; 17329e83d4bSgd78059 uint64_t mxfe_brdcstrcv; 17429e83d4bSgd78059 uint64_t mxfe_multircv; 17529e83d4bSgd78059 uint64_t mxfe_brdcstxmt; 17629e83d4bSgd78059 uint64_t mxfe_multixmt; 17729e83d4bSgd78059 17829e83d4bSgd78059 unsigned mxfe_norcvbuf; 17929e83d4bSgd78059 unsigned mxfe_noxmtbuf; 18029e83d4bSgd78059 unsigned mxfe_errrcv; 18129e83d4bSgd78059 unsigned mxfe_errxmt; 18229e83d4bSgd78059 unsigned mxfe_missed; 18329e83d4bSgd78059 unsigned mxfe_underflow; 18429e83d4bSgd78059 unsigned mxfe_overflow; 18529e83d4bSgd78059 unsigned mxfe_align_errors; 18629e83d4bSgd78059 unsigned mxfe_fcs_errors; 18729e83d4bSgd78059 unsigned mxfe_carrier_errors; 18829e83d4bSgd78059 unsigned mxfe_collisions; 18929e83d4bSgd78059 unsigned mxfe_ex_collisions; 19029e83d4bSgd78059 unsigned mxfe_tx_late_collisions; 19129e83d4bSgd78059 unsigned mxfe_defer_xmts; 19229e83d4bSgd78059 unsigned mxfe_first_collisions; 19329e83d4bSgd78059 unsigned mxfe_multi_collisions; 19429e83d4bSgd78059 unsigned mxfe_sqe_errors; 19529e83d4bSgd78059 unsigned mxfe_macxmt_errors; 19629e83d4bSgd78059 unsigned mxfe_macrcv_errors; 19729e83d4bSgd78059 unsigned mxfe_toolong_errors; 19829e83d4bSgd78059 unsigned mxfe_runt; 19929e83d4bSgd78059 unsigned mxfe_jabber; 20029e83d4bSgd78059 }; 20129e83d4bSgd78059 20229e83d4bSgd78059 struct mxfe_rxbuf { 20329e83d4bSgd78059 caddr_t rxb_buf; 20429e83d4bSgd78059 ddi_dma_handle_t rxb_dmah; 20529e83d4bSgd78059 ddi_acc_handle_t rxb_acch; 20629e83d4bSgd78059 uint32_t rxb_paddr; 20729e83d4bSgd78059 }; 20829e83d4bSgd78059 20929e83d4bSgd78059 struct mxfe_txbuf { 21029e83d4bSgd78059 /* bcopy version of tx */ 21129e83d4bSgd78059 caddr_t txb_buf; 21229e83d4bSgd78059 uint32_t txb_paddr; 21329e83d4bSgd78059 ddi_dma_handle_t txb_dmah; 21429e83d4bSgd78059 ddi_acc_handle_t txb_acch; 21529e83d4bSgd78059 }; 21629e83d4bSgd78059 21729e83d4bSgd78059 /* 21829e83d4bSgd78059 * Descriptor. We use rings rather than chains. 21929e83d4bSgd78059 */ 22029e83d4bSgd78059 struct mxfe_desc { 22129e83d4bSgd78059 unsigned desc_status; 22229e83d4bSgd78059 unsigned desc_control; 22329e83d4bSgd78059 unsigned desc_buffer1; 22429e83d4bSgd78059 unsigned desc_buffer2; 22529e83d4bSgd78059 }; 22629e83d4bSgd78059 22729e83d4bSgd78059 #define PUTTXDESC(mxfep, member, val) \ 22829e83d4bSgd78059 ddi_put32(mxfep->mxfe_txdesc_acch, &member, val) 22929e83d4bSgd78059 23029e83d4bSgd78059 #define PUTRXDESC(mxfep, member, val) \ 23129e83d4bSgd78059 ddi_put32(mxfep->mxfe_rxdesc_acch, &member, val) 23229e83d4bSgd78059 23329e83d4bSgd78059 #define GETTXDESC(mxfep, member) \ 23429e83d4bSgd78059 ddi_get32(mxfep->mxfe_txdesc_acch, &member) 23529e83d4bSgd78059 23629e83d4bSgd78059 #define GETRXDESC(mxfep, member) \ 23729e83d4bSgd78059 ddi_get32(mxfep->mxfe_rxdesc_acch, &member) 23829e83d4bSgd78059 23929e83d4bSgd78059 /* 24029e83d4bSgd78059 * Receive descriptor fields. 24129e83d4bSgd78059 */ 24229e83d4bSgd78059 #define RXSTAT_OWN 0x80000000U /* ownership */ 24329e83d4bSgd78059 #define RXSTAT_RXLEN 0x3FFF0000U /* frame length, incl. crc */ 24429e83d4bSgd78059 #define RXSTAT_RXERR 0x00008000U /* error summary */ 24529e83d4bSgd78059 #define RXSTAT_DESCERR 0x00004000U /* descriptor error */ 24629e83d4bSgd78059 #define RXSTAT_RXTYPE 0x00003000U /* data type */ 24729e83d4bSgd78059 #define RXSTAT_RUNT 0x00000800U /* runt frame */ 24829e83d4bSgd78059 #define RXSTAT_GROUP 0x00000400U /* multicast/brdcast frame */ 24929e83d4bSgd78059 #define RXSTAT_FIRST 0x00000200U /* first descriptor */ 25029e83d4bSgd78059 #define RXSTAT_LAST 0x00000100U /* last descriptor */ 25129e83d4bSgd78059 #define RXSTAT_TOOLONG 0x00000080U /* frame too long */ 25229e83d4bSgd78059 #define RXSTAT_COLLSEEN 0x00000040U /* late collision seen */ 25329e83d4bSgd78059 #define RXSTAT_FRTYPE 0x00000020U /* frame type */ 25429e83d4bSgd78059 #define RXSTAT_WATCHDOG 0x00000010U /* receive watchdog */ 25529e83d4bSgd78059 #define RXSTAT_DRIBBLE 0x00000004U /* dribbling bit */ 25629e83d4bSgd78059 #define RXSTAT_CRCERR 0x00000002U /* crc error */ 25729e83d4bSgd78059 #define RXSTAT_OFLOW 0x00000001U /* fifo overflow */ 25829e83d4bSgd78059 #define RXSTAT_ERRS (RXSTAT_DESCERR | RXSTAT_RUNT | \ 25929e83d4bSgd78059 RXSTAT_COLLSEEN | RXSTAT_DRIBBLE | \ 26029e83d4bSgd78059 RXSTAT_CRCERR | RXSTAT_OFLOW) 26129e83d4bSgd78059 #define RXLENGTH(x) ((x & RXSTAT_RXLEN) >> 16) 26229e83d4bSgd78059 26329e83d4bSgd78059 #define RXCTL_ENDRING 0x02000000U /* end of ring */ 26429e83d4bSgd78059 #define RXCTL_CHAIN 0x01000000U /* chained descriptors */ 26529e83d4bSgd78059 #define RXCTL_BUFLEN2 0x003FF800U /* buffer 2 length */ 26629e83d4bSgd78059 #define RXCTL_BUFLEN1 0x000007FFU /* buffer 1 length */ 26729e83d4bSgd78059 26829e83d4bSgd78059 /* 26929e83d4bSgd78059 * Transmit descriptor fields. 27029e83d4bSgd78059 */ 27129e83d4bSgd78059 #define TXSTAT_OWN 0x80000000U /* ownership */ 27229e83d4bSgd78059 #define TXSTAT_URCNT 0x00C00000U /* underrun count */ 27329e83d4bSgd78059 #define TXSTAT_TXERR 0x00008000U /* error summary */ 27429e83d4bSgd78059 #define TXSTAT_JABBER 0x00004000U /* jabber timeout */ 27529e83d4bSgd78059 #define TXSTAT_CARRLOST 0x00000800U /* lost carrier */ 27629e83d4bSgd78059 #define TXSTAT_NOCARR 0x00000400U /* no carrier */ 27729e83d4bSgd78059 #define TXSTAT_LATECOL 0x00000200U /* late collision */ 27829e83d4bSgd78059 #define TXSTAT_EXCOLL 0x00000100U /* excessive collisions */ 27929e83d4bSgd78059 #define TXSTAT_SQE 0x00000080U /* heartbeat failure */ 28029e83d4bSgd78059 #define TXSTAT_COLLCNT 0x00000078U /* collision count */ 28129e83d4bSgd78059 #define TXSTAT_UFLOW 0x00000002U /* underflow */ 28229e83d4bSgd78059 #define TXSTAT_DEFER 0x00000001U /* deferred */ 28329e83d4bSgd78059 #define TXCOLLCNT(x) ((x & TXSTAT_COLLCNT) >> 3) 28429e83d4bSgd78059 #define TXUFLOWCNT(x) ((x & TXSTAT_URCNT) >> 22) 28529e83d4bSgd78059 28629e83d4bSgd78059 #define TXCTL_INTCMPLTE 0x80000000U /* interrupt completed */ 28729e83d4bSgd78059 #define TXCTL_LAST 0x40000000U /* last descriptor */ 28829e83d4bSgd78059 #define TXCTL_FIRST 0x20000000U /* first descriptor */ 28929e83d4bSgd78059 #define TXCTL_NOCRC 0x04000000U /* disable crc */ 29029e83d4bSgd78059 #define TXCTL_SETUP 0x08000000U /* setup frame */ 29129e83d4bSgd78059 #define TXCTL_ENDRING 0x02000000U /* end of ring */ 29229e83d4bSgd78059 #define TXCTL_CHAIN 0x01000000U /* chained descriptors */ 29329e83d4bSgd78059 #define TXCTL_NOPAD 0x00800000U /* disable padding */ 29429e83d4bSgd78059 #define TXCTL_HASHPERF 0x00400000U /* hash perfect mode */ 29529e83d4bSgd78059 #define TXCTL_BUFLEN2 0x003FF800U /* buffer length 2 */ 29629e83d4bSgd78059 #define TXCTL_BUFLEN1 0x000007FFU /* buffer length 1 */ 29729e83d4bSgd78059 29829e83d4bSgd78059 /* 29929e83d4bSgd78059 * Interface flags. 30029e83d4bSgd78059 */ 30129e83d4bSgd78059 #define MXFE_RUNNING 0x1 /* chip is initialized */ 30229e83d4bSgd78059 #define MXFE_SUSPENDED 0x2 /* interface is suspended */ 30329e83d4bSgd78059 #define MXFE_SYMBOL 0x8 /* use symbol mode */ 30429e83d4bSgd78059 30529e83d4bSgd78059 /* 30629e83d4bSgd78059 * Link flags... 30729e83d4bSgd78059 */ 30829e83d4bSgd78059 #define MXFE_NOLINK 0x0 /* initial link state, no timer */ 30929e83d4bSgd78059 #define MXFE_NWAYCHECK 0x2 /* checking for NWay support */ 31029e83d4bSgd78059 #define MXFE_NWAYRENEG 0x3 /* renegotiating NWay mode */ 31129e83d4bSgd78059 #define MXFE_GOODLINK 0x4 /* detected link is good */ 31229e83d4bSgd78059 31329e83d4bSgd78059 /* 31429e83d4bSgd78059 * Card models. 31529e83d4bSgd78059 */ 31629e83d4bSgd78059 #define MXFE_MODEL(mxfep) ((mxfep)->mxfe_cardp->card_model) 31729e83d4bSgd78059 #define MXFE_98715 0x1 31829e83d4bSgd78059 #define MXFE_98715A 0x2 31929e83d4bSgd78059 #define MXFE_98715AEC 0x3 32029e83d4bSgd78059 #define MXFE_98715B 0x4 32129e83d4bSgd78059 #define MXFE_98725 0x5 32229e83d4bSgd78059 #define MXFE_98713 0x6 32329e83d4bSgd78059 #define MXFE_98713A 0x7 32429e83d4bSgd78059 #define MXFE_PNICII 0x8 32529e83d4bSgd78059 32629e83d4bSgd78059 /* 32729e83d4bSgd78059 * Register definitions located in mxfe.h exported header file. 32829e83d4bSgd78059 */ 32929e83d4bSgd78059 33029e83d4bSgd78059 /* 33129e83d4bSgd78059 * Macros to simplify hardware access. Note that the reg/4 is used to 33229e83d4bSgd78059 * help with pointer arithmetic. 33329e83d4bSgd78059 */ 33429e83d4bSgd78059 #define GETCSR(mxfep, reg) \ 33529e83d4bSgd78059 ddi_get32(mxfep->mxfe_regshandle, mxfep->mxfe_regs + (reg/4)) 33629e83d4bSgd78059 33729e83d4bSgd78059 #define PUTCSR(mxfep, reg, val) \ 33829e83d4bSgd78059 ddi_put32(mxfep->mxfe_regshandle, mxfep->mxfe_regs + (reg/4), val) 33929e83d4bSgd78059 34029e83d4bSgd78059 #define SETBIT(mxfep, reg, val) \ 34129e83d4bSgd78059 PUTCSR(mxfep, reg, GETCSR(mxfep, reg) | (val)) 34229e83d4bSgd78059 34329e83d4bSgd78059 #define CLRBIT(mxfep, reg, val) \ 34429e83d4bSgd78059 PUTCSR(mxfep, reg, GETCSR(mxfep, reg) & ~(val)) 34529e83d4bSgd78059 34629e83d4bSgd78059 #define SYNCTXDESC(mxfep, index, who) \ 34729e83d4bSgd78059 (void) ddi_dma_sync(mxfep->mxfe_txdesc_dmah, \ 34829e83d4bSgd78059 (index * sizeof (mxfe_desc_t)), sizeof (mxfe_desc_t), who) 34929e83d4bSgd78059 35029e83d4bSgd78059 #define SYNCTXBUF(txb, len, who) \ 35129e83d4bSgd78059 (void) (ddi_dma_sync(txb->txb_dmah, 0, len, who)) 35229e83d4bSgd78059 35329e83d4bSgd78059 #define SYNCRXDESC(mxfep, index, who) \ 35429e83d4bSgd78059 (void) ddi_dma_sync(mxfep->mxfe_rxdesc_dmah, \ 35529e83d4bSgd78059 (index * sizeof (mxfe_desc_t)), sizeof (mxfe_desc_t), who) 35629e83d4bSgd78059 35729e83d4bSgd78059 #define SYNCRXBUF(rxb, len, who) \ 35829e83d4bSgd78059 (void) (ddi_dma_sync(rxb->rxb_dmah, 0, len, who)) 35929e83d4bSgd78059 36029e83d4bSgd78059 /* 36129e83d4bSgd78059 * Debugging flags. 36229e83d4bSgd78059 */ 36329e83d4bSgd78059 #define DWARN 0x0001 36429e83d4bSgd78059 #define DINTR 0x0002 36529e83d4bSgd78059 #define DWSRV 0x0004 36629e83d4bSgd78059 #define DMACID 0x0008 36729e83d4bSgd78059 #define DDLPI 0x0010 36829e83d4bSgd78059 #define DPHY 0x0020 36929e83d4bSgd78059 #define DPCI 0x0040 37029e83d4bSgd78059 #define DCHATTY 0x0080 37129e83d4bSgd78059 #define DDMA 0x0100 37229e83d4bSgd78059 #define DLINK 0x0200 37329e83d4bSgd78059 #define DSROM 0x0400 37429e83d4bSgd78059 #define DRECV 0x0800 37529e83d4bSgd78059 #define DXMIT 0x1000 37629e83d4bSgd78059 37729e83d4bSgd78059 #ifdef DEBUG 37829e83d4bSgd78059 #define DBG(lvl, ...) mxfe_dprintf(mxfep, __func__, lvl, __VA_ARGS__); 37929e83d4bSgd78059 #else 38029e83d4bSgd78059 #define DBG(lvl, ...) 38129e83d4bSgd78059 #endif 38229e83d4bSgd78059 38329e83d4bSgd78059 #endif /* _KERNEL */ 38429e83d4bSgd78059 38529e83d4bSgd78059 #endif /* _MXFEIMPL_H */ 386