summaryrefslogtreecommitdiffstats
path: root/sys/dev/usb/usb_subr.c
diff options
context:
space:
mode:
authorn_hibma <n_hibma@FreeBSD.org>1998-12-13 22:27:42 +0000
committern_hibma <n_hibma@FreeBSD.org>1998-12-13 22:27:42 +0000
commit7a761ba5faf0354eee1c638a4fed831e3a2790bd (patch)
treee3458a58061364be8398090570e67313d8bf8e37 /sys/dev/usb/usb_subr.c
parentc07885f31ed390400039a68097f52ac394855c28 (diff)
downloadFreeBSD-src-7a761ba5faf0354eee1c638a4fed831e3a2790bd.zip
FreeBSD-src-7a761ba5faf0354eee1c638a4fed831e3a2790bd.tar.gz
Updated USB kernel sources to NetBSD sources of 1998-12-09.
1 bug fix and several textual changes. Preparing to feed back changes for port into NetBSD to create one source base.
Diffstat (limited to 'sys/dev/usb/usb_subr.c')
-rw-r--r--sys/dev/usb/usb_subr.c50
1 files changed, 21 insertions, 29 deletions
diff --git a/sys/dev/usb/usb_subr.c b/sys/dev/usb/usb_subr.c
index c589153..d0da226 100644
--- a/sys/dev/usb/usb_subr.c
+++ b/sys/dev/usb/usb_subr.c
@@ -122,21 +122,19 @@ usbd_get_string(dev, si, buf)
int lang; /* NWH */
if (si == 0)
- return 0;
+ return (0);
+ if (dev->quirks->uq_flags & UQ_NO_STRINGS)
+ return (0);
- /* NWH added fetching of language
- * See 9.6.5 (spec v1.0)
- */
- req.bmRequestType = UT_READ_DEVICE;
+ req.bmRequestType = UT_READ_DEVICE; /* fetch default language */
req.bRequest = UR_GET_DESCRIPTOR;
USETW2(req.wValue, UDESC_STRING, 0);
USETW(req.wIndex, 0);
- USETW(req.wLength, 4); /* only first word in bString */
+ USETW(req.wLength, 1); /* only first word in bString */
r = usbd_do_request(dev, &req, &us);
if (r != USBD_NORMAL_COMPLETION)
return 0;
lang = UGETW(us.bString[0]);
- /* NWH end */
req.bmRequestType = UT_READ_DEVICE;
req.bRequest = UR_GET_DESCRIPTOR;
@@ -177,19 +175,6 @@ usbd_devinfo_vp(dev, v, p)
struct usb_knowndev *kdp;
#endif
- if (!dev) {
- DPRINTF(("usbd_devinfo_vp: dev not set\n"));
- return;
- }
- if (!v) {
- DPRINTF(("usbd_devinfo_vp: v not set\n"));
- return;
- }
- if (!p) {
- DPRINTF(("usbd_devinfo_vp: p not set\n"));
- return;
- }
-
vendor = usbd_get_string(dev, udd->iManufacturer, v);
product = usbd_get_string(dev, udd->iProduct, p);
#ifdef USBVERBOSE
@@ -241,8 +226,7 @@ usbd_devinfo(dev, showclass, cp)
int bcdDevice, bcdUSB;
usbd_devinfo_vp(dev, vendor, product);
- cp += sprintf(cp, "%s", vendor);
- cp += sprintf(cp, " %s", product);
+ cp += sprintf(cp, "%s %s", vendor, product);
if (showclass)
cp += sprintf(cp, " (class %d/%d)",
udd->bDeviceClass, udd->bDeviceSubClass);
@@ -253,7 +237,7 @@ usbd_devinfo(dev, showclass, cp)
*cp++ = '/';
cp += usbd_printBCD(cp, bcdDevice);
*cp++ = ')';
- cp += sprintf(cp, " (addr %d)", dev->address);
+ cp += sprintf(cp, " addr %d", dev->address);
}
/* Delay for a certain number of ms */
@@ -547,8 +531,6 @@ usbd_setup_pipe(dev, iface, ep, pipe)
usbd_pipe_handle p;
usbd_status r;
- *pipe = NULL;
-
DPRINTFN(1,("usbd_setup_pipe: dev=%p iface=%p ep=%p pipe=%p\n",
dev, iface, ep, pipe));
p = malloc(dev->bus->pipe_size, M_USB, M_NOWAIT);
@@ -849,10 +831,14 @@ usbd_print(aux, pnp)
if (!uaa->usegeneric)
return (QUIET);
usbd_devinfo(uaa->device, 1, devinfo);
- printf("%s at %s", devinfo, pnp);
+ printf("%s, %s", devinfo, pnp);
}
if (uaa->port != 0)
printf(" port %d", uaa->port);
+ if (uaa->configno != UHUB_UNK_CONFIGURATION)
+ printf(" configuration %d", uaa->configno);
+ if (uaa->ifaceno != UHUB_UNK_INTERFACE)
+ printf(" interface %d", uaa->ifaceno);
return (UNCONF);
}
@@ -864,9 +850,15 @@ usbd_submatch(parent, cf, aux)
{
struct usb_attach_arg *uaa = aux;
- if (uaa->port != 0 &&
- cf->uhubcf_port != UHUB_UNK_PORT &&
- cf->uhubcf_port != uaa->port)
+ if ((uaa->port != 0 &&
+ cf->uhubcf_port != UHUB_UNK_PORT &&
+ cf->uhubcf_port != uaa->port) ||
+ (uaa->configno != UHUB_UNK_CONFIGURATION &&
+ cf->uhubcf_configuration != UHUB_UNK_CONFIGURATION &&
+ cf->uhubcf_configuration != uaa->configno) ||
+ (uaa->ifaceno != UHUB_UNK_INTERFACE &&
+ cf->uhubcf_interface != UHUB_UNK_INTERFACE &&
+ cf->uhubcf_interface != uaa->ifaceno))
return 0;
return ((*cf->cf_attach->ca_match)(parent, cf, aux));
}
OpenPOWER on IntegriCloud