/* $NetBSD: if_de.c,v 1.86 1999/06/01 19:17:59 thorpej Exp $ */
/* $FreeBSD: src/sys/pci/if_de.c,v 1.123.2.4 2000/08/04 23:25:09 peter Exp $ */
-/* $DragonFly: src/sys/dev/netif/de/if_de.c,v 1.21 2005/02/21 04:44:22 joerg Exp $ */
+/* $DragonFly: src/sys/dev/netif/de/if_de.c,v 1.22 2005/02/21 04:48:57 joerg Exp $ */
/*-
* Copyright (c) 1994-1997 Matt Thomas (matt@3am-software.com)
tulip_softc_t * const sc = arg;
int s = splimp();
- TULIP_PERFSTART(timeout)
-
sc->tulip_flags &= ~TULIP_TIMEOUTPENDING;
sc->tulip_probe_timeout -= 1000 / TULIP_HZ;
(sc->tulip_boardsw->bd_media_poll)(sc, TULIP_MEDIAPOLL_TIMER);
-
- TULIP_PERFEND(timeout);
splx(s);
}
tulip_rx_intr(
tulip_softc_t * const sc)
{
- TULIP_PERFSTART(rxintr)
tulip_ringinfo_t * const ri = &sc->tulip_rxinfo;
struct ifnet * const ifp = &sc->tulip_if;
int fillok = 1;
#endif
for (;;) {
- TULIP_PERFSTART(rxget)
struct ether_header eh;
tulip_desc_t *eop = ri->ri_nextin;
int total_len = 0, last_offset = 0;
sc->tulip_dbg.dbg_rxintrs++;
sc->tulip_dbg.dbg_rxpktsperintr[cnt]++;
#endif
- TULIP_PERFEND(rxget);
- TULIP_PERFEND(rxintr);
return;
}
total_len++;
#if defined(TULIP_DEBUG)
sc->tulip_dbg.dbg_rxlowbufs++;
#endif
- TULIP_PERFEND(rxget);
continue;
}
/*
if (sc->tulip_rxq.ifq_len >= TULIP_RXQ_TARGET)
sc->tulip_flags &= ~TULIP_RXBUFSLOW;
- TULIP_PERFEND(rxget);
}
#if defined(TULIP_DEBUG)
sc->tulip_dbg.dbg_rxintrs++;
sc->tulip_dbg.dbg_rxpktsperintr[cnt]++;
#endif
- TULIP_PERFEND(rxintr);
}
\f
static int
tulip_tx_intr(
tulip_softc_t * const sc)
{
- TULIP_PERFSTART(txintr)
tulip_ringinfo_t * const ri = &sc->tulip_txinfo;
struct mbuf *m;
int xmits = 0;
else if (xmits > 0)
sc->tulip_txtimer = TULIP_TXTIMER;
sc->tulip_if.if_opackets += xmits;
- TULIP_PERFEND(txintr);
return descs;
}
\f
tulip_softc_t * const sc,
int *progress_p)
{
- TULIP_PERFSTART(intr)
u_int32_t csr;
while ((csr = TULIP_CSR_READ(sc, csr_status)) & sc->tulip_intrmask) {
tulip_reset(sc);
tulip_init(sc);
}
- TULIP_PERFEND(intr);
}
static void
tulip_softc_t * const sc,
struct mbuf *m)
{
- TULIP_PERFSTART(txput)
tulip_ringinfo_t * const ri = &sc->tulip_txinfo;
tulip_desc_t *eop, *nextout;
int segcnt, free;
ri->ri_nextout = nextout;
ri->ri_free = free;
- TULIP_PERFEND(txput);
-
if (sc->tulip_flags & TULIP_TXPROBE_ACTIVE) {
TULIP_CSR_WRITE(sc, csr_txpoll, 1);
sc->tulip_if.if_flags |= IFF_OACTIVE;
sc->tulip_if.if_start = tulip_ifstart;
- TULIP_PERFEND(txput);
return NULL;
}
}
}
TULIP_CSR_WRITE(sc, csr_txpoll, 1);
- TULIP_PERFEND(txput);
return m;
}
\f
caddr_t data,
struct ucred * cr)
{
- TULIP_PERFSTART(ifioctl)
tulip_softc_t * const sc = (tulip_softc_t *)ifp->if_softc;
struct ifaddr *ifa = (struct ifaddr *)data;
struct ifreq *ifr = (struct ifreq *) data;
}
splx(s);
- TULIP_PERFEND(ifioctl);
return error;
}
\f
tulip_ifstart(
struct ifnet * const ifp)
{
- TULIP_PERFSTART(ifstart)
tulip_softc_t * const sc = (tulip_softc_t *)ifp->if_softc;
if (sc->tulip_if.if_flags & IFF_RUNNING) {
}
}
}
-
- TULIP_PERFEND(ifstart);
}
\f
static void
tulip_ifwatchdog(
struct ifnet *ifp)
{
- TULIP_PERFSTART(ifwatchdog)
tulip_softc_t * const sc = (tulip_softc_t *)ifp->if_softc;
#if defined(TULIP_DEBUG)
tulip_reset(sc);
tulip_init(sc);
}
-
- TULIP_PERFEND(ifwatchdog);
- TULIP_PERFMERGE(sc, perf_intr_cycles);
- TULIP_PERFMERGE(sc, perf_ifstart_cycles);
- TULIP_PERFMERGE(sc, perf_ifioctl_cycles);
- TULIP_PERFMERGE(sc, perf_ifwatchdog_cycles);
- TULIP_PERFMERGE(sc, perf_timeout_cycles);
- TULIP_PERFMERGE(sc, perf_ifstart_one_cycles);
- TULIP_PERFMERGE(sc, perf_txput_cycles);
- TULIP_PERFMERGE(sc, perf_txintr_cycles);
- TULIP_PERFMERGE(sc, perf_rxintr_cycles);
- TULIP_PERFMERGE(sc, perf_rxget_cycles);
- TULIP_PERFMERGE(sc, perf_intr);
- TULIP_PERFMERGE(sc, perf_ifstart);
- TULIP_PERFMERGE(sc, perf_ifioctl);
- TULIP_PERFMERGE(sc, perf_ifwatchdog);
- TULIP_PERFMERGE(sc, perf_timeout);
- TULIP_PERFMERGE(sc, perf_ifstart_one);
- TULIP_PERFMERGE(sc, perf_txput);
- TULIP_PERFMERGE(sc, perf_txintr);
- TULIP_PERFMERGE(sc, perf_rxintr);
- TULIP_PERFMERGE(sc, perf_rxget);
}
\f
/*
/* $NetBSD: if_devar.h,v 1.32 1999/04/01 14:55:25 tsubai Exp $ */
/* $FreeBSD: src/sys/pci/if_devar.h,v 1.23.2.1 2000/08/04 23:25:10 peter Exp $ */
-/* $DragonFly: src/sys/dev/netif/de/if_devar.h,v 1.8 2005/02/21 04:44:22 joerg Exp $ */
+/* $DragonFly: src/sys/dev/netif/de/if_devar.h,v 1.9 2005/02/21 04:48:57 joerg Exp $ */
/*-
* Copyright (c) 1994-1997 Matt Thomas (matt@3am-software.com)
u_int32_t dbg_events[TULIP_MEDIAPOLL_MAX];
u_int32_t dbg_rxpktsperintr[TULIP_RXDESCS];
} tulip_dbg;
-#endif
-#if defined(TULIP_PERFSTATS)
-#define TULIP_PERF_CURRENT 0
-#define TULIP_PERF_PREVIOUS 1
-#define TULIP_PERF_TOTAL 2
-#define TULIP_PERF_MAX 3
- struct tulip_perfstats {
- u_quad_t perf_intr_cycles;
- u_quad_t perf_ifstart_cycles;
- u_quad_t perf_ifstart_one_cycles;
- u_quad_t perf_ifioctl_cycles;
- u_quad_t perf_ifwatchdog_cycles;
- u_quad_t perf_timeout_cycles;
- u_quad_t perf_txput_cycles;
- u_quad_t perf_txintr_cycles;
- u_quad_t perf_rxintr_cycles;
- u_quad_t perf_rxget_cycles;
- unsigned perf_intr;
- unsigned perf_ifstart;
- unsigned perf_ifstart_one;
- unsigned perf_ifioctl;
- unsigned perf_ifwatchdog;
- unsigned perf_timeout;
- unsigned perf_txput;
- unsigned perf_txintr;
- unsigned perf_rxintr;
- unsigned perf_rxget;
- } tulip_perfstats[TULIP_PERF_MAX];
-#define tulip_curperfstats tulip_perfstats[TULIP_PERF_CURRENT]
#endif
struct ifqueue tulip_txq;
struct ifqueue tulip_rxq;
#define TULIP_KVATOPHYS(sc, va) vtophys(va)
#endif
-#if defined(TULIP_PERFSTATS)
-#define TULIP_PERFMERGE(sc, member) \
- do { (sc)->tulip_perfstats[TULIP_PERF_TOTAL].member \
- += (sc)->tulip_perfstats[TULIP_PERF_CURRENT].member; \
- (sc)->tulip_perfstats[TULIP_PERF_PREVIOUS].member \
- = (sc)->tulip_perfstats[TULIP_PERF_CURRENT].member; \
- (sc)->tulip_perfstats[TULIP_PERF_CURRENT].member = 0; } while (0)
-#define TULIP_PERFSTART(name) const tulip_cycle_t perfstart_ ## name = TULIP_PERFREAD();
-#define TULIP_PERFEND(name) do { \
- (sc)->tulip_curperfstats.perf_ ## name ## _cycles += TULIP_PERFDIFF(perfstart_ ## name, TULIP_PERFREAD()); \
- (sc)->tulip_curperfstats.perf_ ## name ++; \
- } while (0)
-#if defined(__i386__)
-typedef u_quad_t tulip_cycle_t;
-static __inline__ tulip_cycle_t
-TULIP_PERFREAD(
- void)
-{
- tulip_cycle_t x;
- __asm__ volatile (".byte 0x0f, 0x31" : "=A" (x));
- return x;
-}
-#define TULIP_PERFDIFF(s, f) ((f) - (s))
-#endif
-#else
-#define TULIP_PERFSTART(name)
-#define TULIP_PERFEND(name) do { } while (0)
-#define TULIP_PERFMERGE(s,n) do { } while (0)
-#endif /* TULIP_PERFSTATS */
-
#define TULIP_CRC32_POLY 0xEDB88320UL /* CRC-32 Poly -- Little Endian */
#define TULIP_MAX_TXSEG 30