Module Name: src
Committed By: mrg
Date: Thu Aug 22 00:24:07 UTC 2019
Modified Files:
src/sys/dev/usb: if_aue.c usbhist.h
Log Message:
usbhist(9):
- add a USBHIST_CALLARGSN() that only prints the message if debug level is N
aue(4):
- switch from printf() to usbhist for debugging
To generate a diff of this commit:
cvs rdiff -u -r1.156 -r1.157 src/sys/dev/usb/if_aue.c
cvs rdiff -u -r1.5 -r1.6 src/sys/dev/usb/usbhist.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/usb/if_aue.c
diff -u src/sys/dev/usb/if_aue.c:1.156 src/sys/dev/usb/if_aue.c:1.157
--- src/sys/dev/usb/if_aue.c:1.156 Wed Aug 7 06:31:03 2019
+++ src/sys/dev/usb/if_aue.c Thu Aug 22 00:24:07 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: if_aue.c,v 1.156 2019/08/07 06:31:03 msaitoh Exp $ */
+/* $NetBSD: if_aue.c,v 1.157 2019/08/22 00:24:07 mrg Exp $ */
/*
* Copyright (c) 1997, 1998, 1999, 2000
@@ -77,7 +77,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1.156 2019/08/07 06:31:03 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1.157 2019/08/22 00:24:07 mrg Exp $");
#ifdef _KERNEL_OPT
#include "opt_usb.h"
@@ -116,20 +116,57 @@ __KERNEL_RCSID(0, "$NetBSD: if_aue.c,v 1
#include <dev/usb/usbdi.h>
#include <dev/usb/usbdi_util.h>
#include <dev/usb/usbdevs.h>
+#include <dev/usb/usbhist.h>
#include <sys/condvar.h>
#include <sys/kthread.h>
#include <dev/usb/if_auereg.h>
-#ifdef AUE_DEBUG
-#define DPRINTF(x) if (auedebug) printf x
-#define DPRINTFN(n, x) if (auedebug >= (n)) printf x
-int auedebug = 0;
+#ifdef USB_DEBUG
+#ifndef AUE_DEBUG
+#define auedebug 0
#else
-#define DPRINTF(x)
-#define DPRINTFN(n, x)
-#endif
+static int auedebug = 10;
+
+SYSCTL_SETUP(sysctl_hw_aue_setup, "sysctl hw.aue setup")
+{
+ int err;
+ const struct sysctlnode *rnode;
+ const struct sysctlnode *cnode;
+
+ err = sysctl_createv(clog, 0, NULL, &rnode,
+ CTLFLAG_PERMANENT, CTLTYPE_NODE, "aue",
+ SYSCTL_DESCR("aue global controls"),
+ NULL, 0, NULL, 0, CTL_HW, CTL_CREATE, CTL_EOL);
+
+ if (err)
+ goto fail;
+
+ /* control debugging printfs */
+ err = sysctl_createv(clog, 0, &rnode, &cnode,
+ CTLFLAG_PERMANENT | CTLFLAG_READWRITE, CTLTYPE_INT,
+ "debug", SYSCTL_DESCR("Enable debugging output"),
+ NULL, 0, &auedebug, sizeof(auedebug), CTL_CREATE, CTL_EOL);
+ if (err)
+ goto fail;
+
+ return;
+fail:
+ aprint_error("%s: sysctl_createv failed (err = %d)\n", __func__, err);
+}
+
+#endif /* AXE_DEBUG */
+#endif /* USB_DEBUG */
+
+#define DPRINTF(FMT,A,B,C,D) USBHIST_LOGN(auedebug,1,FMT,A,B,C,D)
+#define DPRINTFN(N,FMT,A,B,C,D) USBHIST_LOGN(auedebug,N,FMT,A,B,C,D)
+#define AUEHIST_FUNC() USBHIST_FUNC()
+#define AUEHIST_CALLED(name) USBHIST_CALLED(auedebug)
+#define AUEHIST_CALLARGS(FMT,A,B,C,D) \
+ USBHIST_CALLARGS(auedebug,FMT,A,B,C,D)
+#define AUEHIST_CALLARGSN(N,FMT,A,B,C,D) \
+ USBHIST_CALLARGSN(auedebug,N,FMT,A,B,C,D)
/*
* Various supported device vendors/products.
@@ -279,8 +316,9 @@ aue_csr_read_1(struct aue_softc *sc, int
err = usbd_do_request(sc->aue_udev, &req, &val);
if (err) {
- DPRINTF(("%s: aue_csr_read_1: reg=0x%x err=%s\n",
- device_xname(sc->aue_dev), reg, usbd_errstr(err)));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGS("%d: aue_csr_read_1: reg=%#x err=%#s",
+ device_unit(sc->aue_dev), reg, usbd_errstr(err), 0);
return 0;
}
@@ -306,8 +344,9 @@ aue_csr_read_2(struct aue_softc *sc, int
err = usbd_do_request(sc->aue_udev, &req, &val);
if (err) {
- DPRINTF(("%s: aue_csr_read_2: reg=0x%x err=%s\n",
- device_xname(sc->aue_dev), reg, usbd_errstr(err)));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGS("%d: aue_csr_read_2: reg=%#x err=%s",
+ device_unit(sc->aue_dev), reg, usbd_errstr(err), 0);
return 0;
}
@@ -334,8 +373,9 @@ aue_csr_write_1(struct aue_softc *sc, in
err = usbd_do_request(sc->aue_udev, &req, &val);
if (err) {
- DPRINTF(("%s: aue_csr_write_1: reg=0x%x err=%s\n",
- device_xname(sc->aue_dev), reg, usbd_errstr(err)));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGS("%d: aue_csr_write_1: reg=%#x err=%s",
+ device_unit(sc->aue_dev), reg, usbd_errstr(err), 0);
return -1;
}
@@ -362,8 +402,9 @@ aue_csr_write_2(struct aue_softc *sc, in
err = usbd_do_request(sc->aue_udev, &req, &val);
if (err) {
- DPRINTF(("%s: aue_csr_write_2: reg=0x%x err=%s\n",
- device_xname(sc->aue_dev), reg, usbd_errstr(err)));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGS("%s: aue_csr_write_2: reg=%#x err=%s",
+ device_unit(sc->aue_dev), reg, usbd_errstr(err), 0);
return -1;
}
@@ -377,6 +418,7 @@ Static int
aue_eeprom_getword(struct aue_softc *sc, int addr)
{
int i;
+ AUEHIST_FUNC(); AUEHIST_CALLED();
aue_csr_write_1(sc, AUE_EE_REG, addr);
aue_csr_write_1(sc, AUE_EE_CTL, AUE_EECTL_READ);
@@ -404,7 +446,9 @@ aue_read_mac(struct aue_softc *sc, u_cha
int off = 0;
int word;
- DPRINTFN(5,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGS("%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
for (i = 0; i < 3; i++) {
word = aue_eeprom_getword(sc, off + i);
@@ -435,10 +479,11 @@ aue_miibus_readreg(device_t dev, int phy
struct aue_softc *sc = device_private(dev);
int i, rv = 0;
+ AUEHIST_FUNC();
+
if (sc->aue_dying) {
-#ifdef DIAGNOSTIC
- printf("%s: dying\n", device_xname(sc->aue_dev));
-#endif
+ AUEHIST_CALLARGS("%d: phy=%jx reg=%jx is dying",
+ device_unit(sc->aue_dev), phy, reg, 0);
return -1;
}
@@ -470,15 +515,16 @@ aue_miibus_readreg(device_t dev, int phy
}
if (i == AUE_TIMEOUT) {
- printf("%s: MII read timed out\n", device_xname(sc->aue_dev));
+ AUEHIST_CALLARGS("%d: phy=%jx reg=%jx read timed out",
+ device_unit(sc->aue_dev), phy, reg, 0);
rv = ETIMEDOUT;
goto out;
}
*val = aue_csr_read_2(sc, AUE_PHY_DATA);
- DPRINTFN(11,("%s: %s: phy=%d reg=%d => 0x%04hx\n",
- device_xname(sc->aue_dev), __func__, phy, reg, *val));
+ AUEHIST_CALLARGS("%d: phy=%jx reg=%jx => %#04hx",
+ device_unit(sc->aue_dev), phy, reg, *val);
out:
aue_unlock_mii(sc);
@@ -491,6 +537,10 @@ aue_miibus_writereg(device_t dev, int ph
struct aue_softc *sc = device_private(dev);
int i, rv = 0;
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGS("%d: phy=%d reg=%d data=%#04hx",
+ device_unit(sc->aue_dev), phy, reg, val);
+
#if 0
if (sc->aue_vendor == USB_VENDOR_ADMTEK &&
sc->aue_product == USB_PRODUCT_ADMTEK_PEGASUS) {
@@ -499,9 +549,6 @@ aue_miibus_writereg(device_t dev, int ph
}
#endif
- DPRINTFN(11,("%s: %s: phy=%d reg=%d data=0x%04hx\n",
- device_xname(sc->aue_dev), __func__, phy, reg, val));
-
aue_lock_mii(sc);
aue_csr_write_2(sc, AUE_PHY_DATA, val);
aue_csr_write_1(sc, AUE_PHY_ADDR, phy);
@@ -513,7 +560,8 @@ aue_miibus_writereg(device_t dev, int ph
}
if (i == AUE_TIMEOUT) {
- printf("%s: MII read timed out\n", device_xname(sc->aue_dev));
+ DPRINTF("%d: phy=%jx reg=%jx val=%jx write timed out",
+ device_unit(sc->aue_dev), phy, reg, val);
rv = ETIMEDOUT;
}
aue_unlock_mii(sc);
@@ -527,7 +575,9 @@ aue_miibus_statchg(struct ifnet *ifp)
struct aue_softc *sc = ifp->if_softc;
struct mii_data *mii = GET_MII(sc);
- DPRINTFN(5,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC(); AUEHIST_CALLED();
+ AUEHIST_CALLARGS("%d: ifp=%jx",
+ device_unit(sc->aue_dev), (uintptr_t)ifp, 0, 0);
aue_lock_mii(sc);
AUE_CLRBIT(sc, AUE_CTL0, AUE_CTL0_RX_ENB | AUE_CTL0_TX_ENB);
@@ -556,7 +606,6 @@ aue_miibus_statchg(struct ifnet *ifp)
aue_miibus_readreg(sc->aue_dev, 0, 0x1b, &auxmode);
aue_miibus_writereg(sc->aue_dev, 0, 0x1b, auxmode | 0x04);
}
- DPRINTFN(5,("%s: %s: exit\n", device_xname(sc->aue_dev), __func__));
}
#define AUE_POLY 0xEDB88320
@@ -589,7 +638,9 @@ aue_setmulti(struct aue_softc *sc)
uint32_t h = 0, i;
uint8_t hashtbl[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- DPRINTFN(5,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(5, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
ifp = GET_IFP(sc);
@@ -644,7 +695,9 @@ aue_reset(struct aue_softc *sc)
{
int i;
- DPRINTFN(2,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(2, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
AUE_SETBIT(sc, AUE_CTL1, AUE_CTL1_RESETMAC);
@@ -744,10 +797,12 @@ aue_attach(device_t parent, device_t sel
usb_endpoint_descriptor_t *ed;
int i;
- DPRINTFN(5,(" : aue_attach: sc=%p", sc));
-
sc->aue_dev = self;
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(2, "%d: enter sc=%jx",
+ device_unit(sc->aue_dev), (uintptr_t)sc, 0, 0);
+
aprint_naive("\n");
aprint_normal("\n");
@@ -892,7 +947,9 @@ aue_detach(device_t self, int flags)
struct ifnet *ifp = GET_IFP(sc);
int s;
- DPRINTFN(2,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(2, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
if (!sc->aue_attached) {
/* Detached before attached finished, so just bail out. */
@@ -966,7 +1023,9 @@ aue_activate(device_t self, enum devact
{
struct aue_softc *sc = device_private(self);
- DPRINTFN(2,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(2, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
switch (act) {
case DVACT_DEACTIVATE:
@@ -986,7 +1045,9 @@ aue_newbuf(struct aue_softc *sc, struct
{
struct mbuf *m_new = NULL;
- DPRINTFN(10,("%s: %s: enter\n", device_xname(sc->aue_dev),__func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(10, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
if (m == NULL) {
MGETHDR(m_new, M_DONTWAIT, MT_DATA);
@@ -1023,7 +1084,9 @@ aue_rx_list_init(struct aue_softc *sc)
struct aue_chain *c;
int i;
- DPRINTFN(5,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(5, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
cd = &sc->aue_cdata;
for (i = 0; i < AUE_RX_LIST_CNT; i++) {
@@ -1051,7 +1114,9 @@ aue_tx_list_init(struct aue_softc *sc)
struct aue_chain *c;
int i;
- DPRINTFN(5,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(5, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
cd = &sc->aue_cdata;
for (i = 0; i < AUE_TX_LIST_CNT; i++) {
@@ -1079,7 +1144,9 @@ aue_intr(struct usbd_xfer *xfer, void *p
struct ifnet *ifp = GET_IFP(sc);
struct aue_intrpkt *p = &sc->aue_cdata.aue_ibuf;
- DPRINTFN(15,("%s: %s: enter\n", device_xname(sc->aue_dev),__func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(15, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
if (sc->aue_dying)
return;
@@ -1125,7 +1192,9 @@ aue_rxeof(struct usbd_xfer *xfer, void *
struct aue_rxpkt r;
int s;
- DPRINTFN(10,("%s: %s: enter\n", device_xname(sc->aue_dev),__func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(10, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
if (sc->aue_dying)
return;
@@ -1181,8 +1250,8 @@ aue_rxeof(struct usbd_xfer *xfer, void *
goto done1;
}
- DPRINTFN(10,("%s: %s: deliver %d\n", device_xname(sc->aue_dev),
- __func__, m->m_len));
+ DPRINTFN(10, "%d: deliver %d",
+ device_unit(sc->aue_dev), m->m_len, 0, 0);
if_percpuq_enqueue(ifp->if_percpuq, m);
done1:
splx(s);
@@ -1194,8 +1263,7 @@ aue_rxeof(struct usbd_xfer *xfer, void *
USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT, aue_rxeof);
usbd_transfer(xfer);
- DPRINTFN(10,("%s: %s: start rx\n", device_xname(sc->aue_dev),
- __func__));
+ DPRINTFN(10, "%d: start rx", device_unit(sc->aue_dev), 0, 0, 0);
}
/*
@@ -1217,8 +1285,9 @@ aue_txeof(struct usbd_xfer *xfer, void *
s = splnet();
- DPRINTFN(10,("%s: %s: enter status=%d\n", device_xname(sc->aue_dev),
- __func__, status));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(10, "%d: enter status=%d",
+ device_unit(sc->aue_dev), status, 0, 0);
ifp->if_timer = 0;
ifp->if_flags &= ~IFF_OACTIVE;
@@ -1253,7 +1322,8 @@ aue_tick(void *xsc)
{
struct aue_softc *sc = xsc;
- DPRINTFN(15,("%s: %s: enter\n", device_xname(sc->aue_dev),__func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(15, "%d: enter", device_unit(sc->aue_dev), 0, 0, 0);
if (sc == NULL)
return;
@@ -1273,7 +1343,8 @@ aue_tick_task(void *xsc)
struct mii_data *mii;
int s;
- DPRINTFN(15,("%s: %s: enter\n", device_xname(sc->aue_dev),__func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(15, "%d: enter", device_unit(sc->aue_dev), 0, 0, 0);
if (sc->aue_dying)
return;
@@ -1290,8 +1361,8 @@ aue_tick_task(void *xsc)
mii_pollstat(mii); /* XXX FreeBSD has removed this call */
if (mii->mii_media_status & IFM_ACTIVE &&
IFM_SUBTYPE(mii->mii_media_active) != IFM_NONE) {
- DPRINTFN(2,("%s: %s: got link\n",
- device_xname(sc->aue_dev), __func__));
+ DPRINTFN(2, "%d: got link",
+ device_unit(sc->aue_dev), __func__, 0, 0);
sc->aue_link++;
if (IFQ_IS_EMPTY(&ifp->if_snd) == 0)
aue_start(ifp);
@@ -1310,7 +1381,8 @@ aue_send(struct aue_softc *sc, struct mb
struct aue_chain *c;
usbd_status err;
- DPRINTFN(10,("%s: %s: enter\n", device_xname(sc->aue_dev),__func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(10, "%d: enter", device_unit(sc->aue_dev), 0, 0, 0);
c = &sc->aue_cdata.aue_tx_chain[idx];
@@ -1344,8 +1416,8 @@ aue_send(struct aue_softc *sc, struct mb
USB_TASKQ_DRIVER);
return EIO;
}
- DPRINTFN(5,("%s: %s: send %d bytes\n", device_xname(sc->aue_dev),
- __func__, total_len));
+ DPRINTFN(5, "%d: send %d bytes",
+ device_unit(sc->aue_dev), total_len, 0, 0);
sc->aue_cdata.aue_tx_cnt++;
@@ -1358,8 +1430,9 @@ aue_start(struct ifnet *ifp)
struct aue_softc *sc = ifp->if_softc;
struct mbuf *m_head = NULL;
- DPRINTFN(5,("%s: %s: enter, link=%d\n", device_xname(sc->aue_dev),
- __func__, sc->aue_link));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(5, "%d: enter link=%d",
+ device_unit(sc->aue_dev), sc->aue_link, 0, 0);
if (sc->aue_dying)
return;
@@ -1404,7 +1477,9 @@ aue_init(void *xsc)
int i, s;
const u_char *eaddr;
- DPRINTFN(5,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(5, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
if (sc->aue_dying)
return;
@@ -1456,8 +1531,8 @@ aue_init(void *xsc)
usbd_setup_xfer(c->aue_xfer, c, c->aue_buf, AUE_BUFSZ,
USBD_SHORT_XFER_OK, USBD_NO_TIMEOUT, aue_rxeof);
(void)usbd_transfer(c->aue_xfer); /* XXX */
- DPRINTFN(5,("%s: %s: start read\n", device_xname(sc->aue_dev),
- __func__));
+ DPRINTFN(5, "%d: start read",
+ device_unit(sc->aue_dev), 0, 0, 0);
}
@@ -1520,7 +1595,9 @@ aue_ifmedia_upd(struct ifnet *ifp)
{
struct aue_softc *sc = ifp->if_softc;
- DPRINTFN(5,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(5, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
if (sc->aue_dying)
return 0;
@@ -1606,7 +1683,9 @@ aue_watchdog(struct ifnet *ifp)
usbd_status stat;
int s;
- DPRINTFN(5,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(5, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
ifp->if_oerrors++;
aprint_error_dev(sc->aue_dev, "watchdog timeout\n");
@@ -1632,7 +1711,9 @@ aue_stop(struct aue_softc *sc)
struct ifnet *ifp;
int i;
- DPRINTFN(5,("%s: %s: enter\n", device_xname(sc->aue_dev), __func__));
+ AUEHIST_FUNC();
+ AUEHIST_CALLARGSN(5, "%d: enter",
+ device_unit(sc->aue_dev), 0, 0, 0);
ifp = GET_IFP(sc);
ifp->if_timer = 0;
Index: src/sys/dev/usb/usbhist.h
diff -u src/sys/dev/usb/usbhist.h:1.5 src/sys/dev/usb/usbhist.h:1.6
--- src/sys/dev/usb/usbhist.h:1.5 Mon Aug 19 06:35:14 2019
+++ src/sys/dev/usb/usbhist.h Thu Aug 22 00:24:07 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: usbhist.h,v 1.5 2019/08/19 06:35:14 mrg Exp $ */
+/* $NetBSD: usbhist.h,v 1.6 2019/08/22 00:24:07 mrg Exp $ */
/*
* Copyright (c) 2012 Matthew R. Green
@@ -74,6 +74,11 @@ extern int usbdebug;
KERNHIST_CALLARGS(usbhist,FMT,A,B,C,D); \
} \
} while (0)
+#define USBHIST_CALLARGSN(NAME,N,FMT,A,B,C,D) do { \
+ if ((NAME) >= (N)) { \
+ KERNHIST_CALLARGS(usbhist,FMT,A,B,C,D); \
+ } \
+} while (0)
#define USBHIST_FUNC() KERNHIST_FUNC(__func__)
USBHIST_DECL(usbhist);
@@ -89,6 +94,7 @@ USBHIST_DECL(usbhist);
#define USBHIST_LOGM(N,NAME,FMT,A,B,C,D) do { } while(0)
#define USBHIST_LOG(NAME,FMT,A,B,C,D) do { } while(0)
#define USBHIST_CALLARGS(NAME,FMT,A,B,C,D)
+#define USBHIST_CALLARGSN(NAME,N,FMT,A,B,C,D)
#define USBHIST_CALLED(NAME)
#define USBHIST_FUNC()