Module Name:    src
Committed By:   skrll
Date:           Thu Mar 26 15:53:58 UTC 2015

Modified Files:
        src/sys/dev/usb: uhub.c

Log Message:
Convert to USBHIST. Inspired by patch from Takahiro HAYASHI


To generate a diff of this commit:
cvs rdiff -u -r1.126 -r1.127 src/sys/dev/usb/uhub.c

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/uhub.c
diff -u src/sys/dev/usb/uhub.c:1.126 src/sys/dev/usb/uhub.c:1.127
--- src/sys/dev/usb/uhub.c:1.126	Wed Aug 13 06:26:32 2014
+++ src/sys/dev/usb/uhub.c	Thu Mar 26 15:53:58 2015
@@ -1,4 +1,4 @@
-/*	$NetBSD: uhub.c,v 1.126 2014/08/13 06:26:32 skrll Exp $	*/
+/*	$NetBSD: uhub.c,v 1.127 2015/03/26 15:53:58 skrll Exp $	*/
 /*	$FreeBSD: src/sys/dev/usb/uhub.c,v 1.18 1999/11/17 22:33:43 n_hibma Exp $	*/
 
 /*
@@ -36,14 +36,16 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uhub.c,v 1.126 2014/08/13 06:26:32 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uhub.c,v 1.127 2015/03/26 15:53:58 skrll Exp $");
 
 #include <sys/param.h>
+
 #include <sys/systm.h>
+#include <sys/device.h>
 #include <sys/kernel.h>
 #include <sys/malloc.h>
-#include <sys/device.h>
 #include <sys/proc.h>
+#include <sys/sysctl.h>
 
 #include <sys/bus.h>
 
@@ -51,15 +53,48 @@ __KERNEL_RCSID(0, "$NetBSD: uhub.c,v 1.1
 #include <dev/usb/usbdi.h>
 #include <dev/usb/usbdi_util.h>
 #include <dev/usb/usbdivar.h>
+#include <dev/usb/usbhist.h>
 
-#ifdef UHUB_DEBUG
-#define DPRINTF(x)	if (uhubdebug) printf x
-#define DPRINTFN(n,x)	if (uhubdebug>(n)) printf x
-int	uhubdebug = 0;
+#ifdef USB_DEBUG
+#ifndef UHUB_DEBUG
+#define uhubdebug 0
 #else
-#define DPRINTF(x)
-#define DPRINTFN(n,x)
-#endif
+static int uhubdebug = 0;
+
+SYSCTL_SETUP(sysctl_hw_uhub_setup, "sysctl hw.uhub setup")
+{
+	int err;
+	const struct sysctlnode *rnode;
+	const struct sysctlnode *cnode;
+
+	err = sysctl_createv(clog, 0, NULL, &rnode,
+	    CTLFLAG_PERMANENT, CTLTYPE_NODE, "uhub",
+	    SYSCTL_DESCR("uhub 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, &uhubdebug, sizeof(uhubdebug), CTL_CREATE, CTL_EOL);
+	if (err)
+		goto fail;
+
+	return;
+fail:
+	aprint_error("%s: sysctl_createv failed (err = %d)\n", __func__, err);
+}
+
+#endif /* UHUB_DEBUG */
+#endif /* USB_DEBUG */
+
+#define DPRINTF(FMT,A,B,C,D)	USBHIST_LOGN(uhubdebug,1,FMT,A,B,C,D)
+#define DPRINTFN(N,FMT,A,B,C,D)	USBHIST_LOGN(uhubdebug,N,FMT,A,B,C,D)
+#define UHUBHIST_FUNC() USBHIST_FUNC()
+#define UHUBHIST_CALLED(name) USBHIST_CALLED(uhubdebug)
 
 struct uhub_softc {
 	device_t		sc_dev;		/* base device */
@@ -118,12 +153,14 @@ uhub_match(device_t parent, cfdata_t mat
 	struct usb_attach_arg *uaa = aux;
 	int matchvalue;
 
+	UHUBHIST_FUNC(); UHUBHIST_CALLED();
+
 	if (uhub_ubermatch)
 		matchvalue = UMATCH_HIGHEST+1;
 	else
 		matchvalue = UMATCH_DEVCLASS_DEVSUBCLASS;
 
-	DPRINTFN(5,("uhub_match, uaa=%p\n", uaa));
+	DPRINTFN(5, "uaa=%p", uaa, 0, 0, 0);
 	/*
 	 * The subclass for hubs seems to be 0 for some and 1 for others,
 	 * so we just ignore the subclass.
@@ -151,7 +188,8 @@ uhub_attach(device_t parent, device_t se
 	struct usbd_tt *tts = NULL;
 #endif
 
-	DPRINTFN(1,("uhub_attach\n"));
+	UHUBHIST_FUNC(); UHUBHIST_CALLED();
+
 	sc->sc_dev = self;
 	sc->sc_hub = dev;
 	sc->sc_proto = uaa->proto;
@@ -169,8 +207,7 @@ uhub_attach(device_t parent, device_t se
 
 	err = usbd_set_config_index(dev, 0, 1);
 	if (err) {
-		DPRINTF(("%s: configuration failed, error=%s\n",
-		    device_xname(sc->sc_dev), usbd_errstr(err)));
+		DPRINTF("configuration failed, sc %p error %d", sc, err, 0, 0);
 		return;
 	}
 
@@ -187,7 +224,7 @@ uhub_attach(device_t parent, device_t se
 	USETW2(req.wValue, UDESC_HUB, 0);
 	USETW(req.wIndex, 0);
 	USETW(req.wLength, USB_HUB_DESCRIPTOR_SIZE);
-	DPRINTFN(1,("%s: getting hub descriptor\n", __func__));
+	DPRINTF("getting hub descriptor", 0, 0, 0, 0);
 	err = usbd_do_request(dev, &req, &hubdesc);
 	nports = hubdesc.bNbrPorts;
 	if (!err && nports > 7) {
@@ -195,8 +232,8 @@ uhub_attach(device_t parent, device_t se
 		err = usbd_do_request(dev, &req, &hubdesc);
 	}
 	if (err) {
-		DPRINTF(("%s: getting hub descriptor failed, error=%s\n",
-		    device_xname(sc->sc_dev), usbd_errstr(err)));
+		DPRINTF("getting hub descriptor failed, sc %p error %d", sc,
+		    err, 0, 0);
 		return;
 	}
 
@@ -338,7 +375,7 @@ uhub_attach(device_t parent, device_t se
 		if (err)
 			aprint_error_dev(self, "port %d power on failed, %s\n",
 			    port, usbd_errstr(err));
-		DPRINTF(("usb_init_port: turn on port %d power\n", port));
+		DPRINTF("turn on port %d power", port, 0, 0, 0);
 	}
 
 	/* Wait for stable power if we are not a root hub */
@@ -376,7 +413,9 @@ uhub_explore(usbd_device_handle dev)
 	int port;
 	int change, status, reconnect;
 
-	DPRINTFN(10, ("uhub_explore dev=%p addr=%d\n", dev, dev->address));
+	UHUBHIST_FUNC(); UHUBHIST_CALLED();
+
+	DPRINTFN(10, "sc=%p dev=%p addr=%d", sc, dev, dev->address, 0);
 
 	if (!sc->sc_running)
 		return (USBD_NOT_STARTED);
@@ -390,8 +429,8 @@ uhub_explore(usbd_device_handle dev)
 
 		err = usbd_get_hub_status(dev, &hs);
 		if (err) {
-			DPRINTF(("%s: get hub status failed, err=%d\n",
-				 device_xname(sc->sc_dev), err));
+			DPRINTF("get hub status failed, sc %p err%d", sc,
+			    err, 0, 0);
 		} else {
 			/* just acknowledge */
 			status = UGETW(hs.wHubStatus);
@@ -418,8 +457,8 @@ uhub_explore(usbd_device_handle dev)
 		if (PORTSTAT_ISSET(sc, port) || reconnect) {
 			err = usbd_get_port_status(dev, port, &up->status);
 			if (err) {
-				DPRINTF(("uhub_explore: get port stat failed, "
-					 "error=%s\n", usbd_errstr(err)));
+				DPRINTF("get port stat failed, sc %p err %d",
+				    sc, err, 0, 0);
 				continue;
 			}
 			status = UGETW(up->status.wPortStatus);
@@ -437,7 +476,7 @@ uhub_explore(usbd_device_handle dev)
 		}
 
 		if (change & UPS_C_PORT_ENABLED) {
-			DPRINTF(("uhub_explore: C_PORT_ENABLED\n"));
+			DPRINTF("C_PORT_ENABLED", 0, 0, 0, 0);
 			usbd_clear_port_feature(dev, port, UHF_C_PORT_ENABLE);
 			if (change & UPS_C_CONNECT_STATUS) {
 				/* Ignore the port error if the device
@@ -472,8 +511,8 @@ uhub_explore(usbd_device_handle dev)
 
 		/* We have a connect status change, handle it. */
 
-		DPRINTF(("uhub_explore: status change hub=%d port=%d\n",
-			 dev->address, port));
+		DPRINTF("status change hub=%d port=%d", dev->address, port, 0,
+		    0);
 		usbd_clear_port_feature(dev, port, UHF_C_PORT_CONNECTION);
 		/*
 		 * If there is already a device on the port the change status
@@ -485,16 +524,16 @@ uhub_explore(usbd_device_handle dev)
 	disco:
 		if (up->device != NULL) {
 			/* Disconnected */
-			DPRINTF(("uhub_explore: device addr=%d disappeared "
-				 "on port %d\n", up->device->address, port));
+			DPRINTF("device addr=%d disappeared on port %d",
+			    up->device->address, port, 0, 0);
 			usb_disconnect_port(up, sc->sc_dev, DETACH_FORCE);
 			usbd_clear_port_feature(dev, port,
 						UHF_C_PORT_CONNECTION);
 		}
 		if (!(status & UPS_CURRENT_CONNECT_STATUS)) {
 			/* Nothing connected, just ignore it. */
-			DPRINTFN(3,("uhub_explore: port=%d !CURRENT_CONNECT"
-				    "_STATUS\n", port));
+			DPRINTFN(3, "port=%d !CURRENT_CONNECT_STATUS", port, 0,
+			    0, 0);
 			continue;
 		}
 
@@ -516,8 +555,8 @@ uhub_explore(usbd_device_handle dev)
 		/* Get port status again, it might have changed during reset */
 		err = usbd_get_port_status(dev, port, &up->status);
 		if (err) {
-			DPRINTF(("uhub_explore: get port status failed, "
-				 "error=%s\n", usbd_errstr(err)));
+			DPRINTF("get port status failed, error %d", err, 0, 0,
+			   0);
 			continue;
 		}
 		status = UGETW(up->status.wPortStatus);
@@ -556,8 +595,8 @@ uhub_explore(usbd_device_handle dev)
 			  dev->depth + 1, speed, port, up);
 		/* XXX retry a few times? */
 		if (err) {
-			DPRINTFN(-1,("uhub_explore: usbd_new_device failed, "
-				     "error=%s\n", usbd_errstr(err)));
+			DPRINTF("usbd_new_device failed, error %d", err, 0, 0,
+			    0);
 			/* Avoid addressing problems by disabling. */
 			/* usbd_reset_port(dev, port, &up->status); */
 
@@ -596,7 +635,9 @@ uhub_detach(device_t self, int flags)
 	struct usbd_port *rup;
 	int nports, port, rc;
 
-	DPRINTF(("uhub_detach: sc=%p flags=%d\n", sc, flags));
+	UHUBHIST_FUNC(); UHUBHIST_CALLED();
+
+	DPRINTF("sc=%p flags=%d", sc, flags, 0, 0);
 
 	if (hub == NULL)		/* Must be partially working */
 		return (0);
@@ -703,7 +744,9 @@ uhub_intr(usbd_xfer_handle xfer, usbd_pr
 {
 	struct uhub_softc *sc = addr;
 
-	DPRINTFN(5,("uhub_intr: sc=%p\n", sc));
+	UHUBHIST_FUNC(); UHUBHIST_CALLED();
+
+	DPRINTFN(5, "sc=%p", sc, 0, 0, 0);
 
 	if (status == USBD_STALLED)
 		usbd_clear_endpoint_stall_async(sc->sc_ipipe);

Reply via email to