diff options
author | Martin Pieuchot <mpi@cvs.openbsd.org> | 2014-08-08 14:20:06 +0000 |
---|---|---|
committer | Martin Pieuchot <mpi@cvs.openbsd.org> | 2014-08-08 14:20:06 +0000 |
commit | 3c6d2496b55a0ec92eb4e479e74ea9a77cd2a420 (patch) | |
tree | 11084eab77a0a73c14137e2e9c5ebe39b369e6ae /sys/dev/usb | |
parent | 6c5c76cf789aeda60c2d61998e42e83b7d9e7a60 (diff) |
Super Speed hub descriptor definition and routine, required for upcoming
external USB 3.0 hub support.
Diffstat (limited to 'sys/dev/usb')
-rw-r--r-- | sys/dev/usb/usb.h | 18 | ||||
-rw-r--r-- | sys/dev/usb/usbdi_util.c | 17 | ||||
-rw-r--r-- | sys/dev/usb/usbdi_util.h | 4 |
3 files changed, 34 insertions, 5 deletions
diff --git a/sys/dev/usb/usb.h b/sys/dev/usb/usb.h index eb4bbe06a10..98c71b0284d 100644 --- a/sys/dev/usb/usb.h +++ b/sys/dev/usb/usb.h @@ -1,4 +1,4 @@ -/* $OpenBSD: usb.h,v 1.46 2014/03/08 11:47:26 mpi Exp $ */ +/* $OpenBSD: usb.h,v 1.47 2014/08/08 14:20:05 mpi Exp $ */ /* $NetBSD: usb.h,v 1.69 2002/09/22 23:20:50 augustss Exp $ */ /* $FreeBSD: src/sys/dev/usb/usb.h,v 1.14 1999/11/17 22:33:46 n_hibma Exp $ */ @@ -328,9 +328,21 @@ typedef struct { uByte DeviceRemovable[32]; /* max 255 ports */ #define UHD_NOT_REMOV(desc, i) \ (((desc)->DeviceRemovable[(i)/8] >> ((i) % 8)) & 1) - /* deprecated */ uByte PortPowerCtrlMask[1]; } __packed usb_hub_descriptor_t; -#define USB_HUB_DESCRIPTOR_SIZE 9 /* includes deprecated PortPowerCtrlMask */ +#define USB_HUB_DESCRIPTOR_SIZE 8 + +typedef struct { + uByte bDescLength; + uByte bDescriptorType; + uByte bNbrPorts; + uWord wHubCharacteristics; + uByte bPwrOn2PwrGood; /* delay in 2 ms units */ + uByte bHubContrCurrent; + uByte bHubHdrDecLat; + uWord wHubDelay; + uByte DeviceRemovable[32]; /* max 255 ports */ +} __packed usb_hub_ss_descriptor_t; +#define USB_HUB_SS_DESCRIPTOR_SIZE 11 typedef struct { uByte bLength; diff --git a/sys/dev/usb/usbdi_util.c b/sys/dev/usb/usbdi_util.c index 50629ab82c3..ba5d8e5bad2 100644 --- a/sys/dev/usb/usbdi_util.c +++ b/sys/dev/usb/usbdi_util.c @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdi_util.c,v 1.37 2014/07/09 15:47:54 mpi Exp $ */ +/* $OpenBSD: usbdi_util.c,v 1.38 2014/08/08 14:20:05 mpi Exp $ */ /* $NetBSD: usbdi_util.c,v 1.40 2002/07/11 21:14:36 augustss Exp $ */ /* $FreeBSD: src/sys/dev/usb/usbdi_util.c,v 1.14 1999/11/17 22:33:50 n_hibma Exp $ */ @@ -114,6 +114,21 @@ usbd_get_hub_descriptor(struct usbd_device *dev, usb_hub_descriptor_t *hd, } usbd_status +usbd_get_hub_ss_descriptor(struct usbd_device *dev, usb_hub_ss_descriptor_t *hd, + uint8_t nports) +{ + usb_device_request_t req; + uint16_t len = USB_HUB_SS_DESCRIPTOR_SIZE + (nports + 1) / 8; + + req.bmRequestType = UT_READ_CLASS_DEVICE; + req.bRequest = UR_GET_DESCRIPTOR; + USETW2(req.wValue, UDESC_SS_HUB, 0); + USETW(req.wIndex, 0); + USETW(req.wLength, len); + return (usbd_do_request(dev, &req, hd)); +} + +usbd_status usbd_get_port_status(struct usbd_device *dev, int port, usb_port_status_t *ps) { usb_device_request_t req; diff --git a/sys/dev/usb/usbdi_util.h b/sys/dev/usb/usbdi_util.h index b79622a6a90..85d8d884045 100644 --- a/sys/dev/usb/usbdi_util.h +++ b/sys/dev/usb/usbdi_util.h @@ -1,4 +1,4 @@ -/* $OpenBSD: usbdi_util.h,v 1.26 2014/07/09 15:47:54 mpi Exp $ */ +/* $OpenBSD: usbdi_util.h,v 1.27 2014/08/08 14:20:05 mpi Exp $ */ /* $NetBSD: usbdi_util.h,v 1.28 2002/07/11 21:14:36 augustss Exp $ */ /* $FreeBSD: src/sys/dev/usb/usbdi_util.h,v 1.9 1999/11/17 22:33:50 n_hibma Exp $ */ @@ -44,6 +44,8 @@ usbd_status usbd_get_device_status(struct usbd_device *, usb_status_t *); usbd_status usbd_get_hub_status(struct usbd_device *, usb_hub_status_t *); usbd_status usbd_get_hub_descriptor(struct usbd_device *, usb_hub_descriptor_t *, uint8_t); +usbd_status usbd_get_hub_ss_descriptor(struct usbd_device *, + usb_hub_ss_descriptor_t *, uint8_t); struct usb_hid_descriptor *usbd_get_hid_descriptor(struct usbd_device *, usb_interface_descriptor_t *); usbd_status usbd_get_report(struct usbd_device *, int, int, int, void *, |