diff options
-rw-r--r-- | sys/dev/usb/ugen.c | 49 | ||||
-rw-r--r-- | sys/dev/usb/usb_subr.c | 36 | ||||
-rw-r--r-- | sys/dev/usb/usbdi.h | 3 |
3 files changed, 43 insertions, 45 deletions
diff --git a/sys/dev/usb/ugen.c b/sys/dev/usb/ugen.c index 83f579d1d67..513805594b3 100644 --- a/sys/dev/usb/ugen.c +++ b/sys/dev/usb/ugen.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ugen.c,v 1.69 2013/03/28 03:58:03 tedu Exp $ */ +/* $OpenBSD: ugen.c,v 1.70 2013/04/01 19:49:53 mglocker Exp $ */ /* $NetBSD: ugen.c,v 1.63 2002/11/26 18:49:48 christos Exp $ */ /* $FreeBSD: src/sys/dev/usb/ugen.c,v 1.26 1999/11/17 22:33:41 n_hibma Exp $ */ @@ -114,8 +114,6 @@ int ugen_do_write(struct ugen_softc *, int, struct uio *, int); int ugen_do_ioctl(struct ugen_softc *, int, u_long, caddr_t, int, struct proc *); int ugen_set_config(struct ugen_softc *sc, int configno); -usb_config_descriptor_t *ugen_get_cdesc(struct ugen_softc *sc, - int index, int *lenp); usbd_status ugen_set_interface(struct ugen_softc *, int, int); int ugen_get_alt_index(struct ugen_softc *sc, int ifaceidx); @@ -945,41 +943,6 @@ out: return (err); } -/* Retrieve a complete descriptor for a certain device and index. */ -usb_config_descriptor_t * -ugen_get_cdesc(struct ugen_softc *sc, int index, int *lenp) -{ - usb_config_descriptor_t *cdesc, *tdesc, cdescr; - int len; - usbd_status err; - - if (index == USB_CURRENT_CONFIG_INDEX) { - tdesc = usbd_get_config_descriptor(sc->sc_udev); - len = UGETW(tdesc->wTotalLength); - if (lenp) - *lenp = len; - cdesc = malloc(len, M_TEMP, M_WAITOK); - memcpy(cdesc, tdesc, len); - DPRINTFN(5,("ugen_get_cdesc: current, len=%d\n", len)); - } else { - err = usbd_get_config_desc(sc->sc_udev, index, &cdescr); - if (err) - return (0); - len = UGETW(cdescr.wTotalLength); - DPRINTFN(5,("ugen_get_cdesc: index=%d, len=%d\n", index, len)); - if (lenp) - *lenp = len; - cdesc = malloc(len, M_TEMP, M_WAITOK); - err = usbd_get_config_desc_full(sc->sc_udev, index, cdesc, - len); - if (err) { - free(cdesc, M_TEMP); - return (0); - } - } - return (cdesc); -} - int ugen_get_alt_index(struct ugen_softc *sc, int ifaceidx) { @@ -1097,7 +1060,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int endpt, u_long cmd, break; case USB_GET_NO_ALT: ai = (struct usb_alt_interface *)addr; - cdesc = ugen_get_cdesc(sc, ai->uai_config_index, 0); + cdesc = usbd_get_cdesc(sc->sc_udev, ai->uai_config_index, 0); if (cdesc == NULL) return (EINVAL); idesc = usbd_find_idesc(cdesc, ai->uai_interface_index, 0); @@ -1115,7 +1078,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int endpt, u_long cmd, break; case USB_GET_CONFIG_DESC: cd = (struct usb_config_desc *)addr; - cdesc = ugen_get_cdesc(sc, cd->ucd_config_index, 0); + cdesc = usbd_get_cdesc(sc->sc_udev, cd->ucd_config_index, 0); if (cdesc == NULL) return (EINVAL); cd->ucd_desc = *cdesc; @@ -1123,7 +1086,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int endpt, u_long cmd, break; case USB_GET_INTERFACE_DESC: id = (struct usb_interface_desc *)addr; - cdesc = ugen_get_cdesc(sc, id->uid_config_index, 0); + cdesc = usbd_get_cdesc(sc->sc_udev, id->uid_config_index, 0); if (cdesc == NULL) return (EINVAL); if (id->uid_config_index == USB_CURRENT_CONFIG_INDEX && @@ -1141,7 +1104,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int endpt, u_long cmd, break; case USB_GET_ENDPOINT_DESC: ed = (struct usb_endpoint_desc *)addr; - cdesc = ugen_get_cdesc(sc, ed->ued_config_index, 0); + cdesc = usbd_get_cdesc(sc->sc_udev, ed->ued_config_index, 0); if (cdesc == NULL) return (EINVAL); if (ed->ued_config_index == USB_CURRENT_CONFIG_INDEX && @@ -1166,7 +1129,7 @@ ugen_do_ioctl(struct ugen_softc *sc, int endpt, u_long cmd, struct usb_full_desc *fd = (struct usb_full_desc *)addr; int error; - cdesc = ugen_get_cdesc(sc, fd->ufd_config_index, &len); + cdesc = usbd_get_cdesc(sc->sc_udev, fd->ufd_config_index, &len); if (cdesc == NULL) return (EINVAL); if (len > fd->ufd_size) diff --git a/sys/dev/usb/usb_subr.c b/sys/dev/usb/usb_subr.c index 8c51584dd3a..976353cb574 100644 --- a/sys/dev/usb/usb_subr.c +++ b/sys/dev/usb/usb_subr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: usb_subr.c,v 1.84 2013/03/28 03:58:03 tedu Exp $ */ +/* $OpenBSD: usb_subr.c,v 1.85 2013/04/01 19:49:53 mglocker Exp $ */ /* $NetBSD: usb_subr.c,v 1.103 2003/01/10 11:19:13 augustss Exp $ */ /* $FreeBSD: src/sys/dev/usb/usb_subr.c,v 1.18 1999/11/17 22:33:47 n_hibma Exp $ */ @@ -1399,6 +1399,40 @@ usbd_fill_deviceinfo(usbd_device_handle dev, struct usb_device_info *di, sizeof(di->udi_serial)); } +/* Retrieve a complete descriptor for a certain device and index. */ +usb_config_descriptor_t * +usbd_get_cdesc(usbd_device_handle dev, int index, int *lenp) +{ + usb_config_descriptor_t *cdesc, *tdesc, cdescr; + int len; + usbd_status err; + + if (index == USB_CURRENT_CONFIG_INDEX) { + tdesc = usbd_get_config_descriptor(dev); + len = UGETW(tdesc->wTotalLength); + if (lenp) + *lenp = len; + cdesc = malloc(len, M_TEMP, M_WAITOK); + memcpy(cdesc, tdesc, len); + DPRINTFN(5,("usbd_get_cdesc: current, len=%d\n", len)); + } else { + err = usbd_get_config_desc(dev, index, &cdescr); + if (err) + return (0); + len = UGETW(cdescr.wTotalLength); + DPRINTFN(5,("usbd_get_cdesc: index=%d, len=%d\n", index, len)); + if (lenp) + *lenp = len; + cdesc = malloc(len, M_TEMP, M_WAITOK); + err = usbd_get_config_desc_full(dev, index, cdesc, len); + if (err) { + free(cdesc, M_TEMP); + return (0); + } + } + return (cdesc); +} + void usb_free_device(usbd_device_handle dev, struct usbd_port *up) { diff --git a/sys/dev/usb/usbdi.h b/sys/dev/usb/usbdi.h index fddeb194c1a..0440d55370d 100644 --- a/sys/dev/usb/usbdi.h +++ b/sys/dev/usb/usbdi.h @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdi.h,v 1.42 2011/02/09 20:24:39 jakemsr Exp $ */ +/* $OpenBSD: usbdi.h,v 1.43 2013/04/01 19:49:53 mglocker Exp $ */ /* $NetBSD: usbdi.h,v 1.62 2002/07/11 21:14:35 augustss Exp $ */ /* $FreeBSD: src/sys/dev/usb/usbdi.h,v 1.18 1999/11/17 22:33:49 n_hibma Exp $ */ @@ -140,6 +140,7 @@ int usbd_get_no_alts(usb_config_descriptor_t *, int); usbd_status usbd_get_interface(usbd_interface_handle iface, u_int8_t *aiface); void usbd_fill_deviceinfo(usbd_device_handle, struct usb_device_info *, int); void usbd_fill_di_task(void *); +usb_config_descriptor_t *usbd_get_cdesc(usbd_device_handle, int, int *); int usbd_get_interface_altindex(usbd_interface_handle iface); usb_interface_descriptor_t *usbd_find_idesc(usb_config_descriptor_t *cd, |