summaryrefslogtreecommitdiffstats
path: root/include/linux/usb
diff options
context:
space:
mode:
authorSarah Sharp <sarah.a.sharp@linux.intel.com>2012-05-08 07:44:01 -0700
committerSarah Sharp <sarah.a.sharp@linux.intel.com>2012-05-18 15:42:02 -0700
commit6538eafc7cb6b2d718d2539bef3158bfaad57468 (patch)
tree44981a2e18be90cf52ebe3f4ee1a2c98f060c3eb /include/linux/usb
parentdbc33303e457bc9d9179d628951e6b7c7a3f6056 (diff)
downloadlinux-stable-6538eafc7cb6b2d718d2539bef3158bfaad57468.tar.gz
linux-stable-6538eafc7cb6b2d718d2539bef3158bfaad57468.tar.bz2
linux-stable-6538eafc7cb6b2d718d2539bef3158bfaad57468.zip
USB: Add macros for interrupt endpoint types.
The USB 3.0 spec defines a new way of differentiating interrupt endpoints. The idea is that some interrupt endpoints are used for notifications, i.e. they continually NAK the transfer until something changes on the device. Other interrupt endpoints are used as a way to periodically transfer data. The USB 3.0 endpoint descriptor uses bits 5:4 of bmAttributes for interrupt endpoints, to define the endpoint as either a Notification endpoint, or a Periodic endpoint. Introduce macros to dig out that information. Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Diffstat (limited to 'include/linux/usb')
-rw-r--r--include/linux/usb/ch9.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
index 43bce9da7a4d..d1d732c2838d 100644
--- a/include/linux/usb/ch9.h
+++ b/include/linux/usb/ch9.h
@@ -392,6 +392,11 @@ struct usb_endpoint_descriptor {
#define USB_ENDPOINT_XFER_INT 3
#define USB_ENDPOINT_MAX_ADJUSTABLE 0x80
+/* The USB 3.0 spec redefines bits 5:4 of bmAttributes as interrupt ep type. */
+#define USB_ENDPOINT_INTRTYPE 0x30
+#define USB_ENDPOINT_INTR_PERIODIC (0 << 4)
+#define USB_ENDPOINT_INTR_NOTIFICATION (1 << 4)
+
#define USB_ENDPOINT_SYNCTYPE 0x0c
#define USB_ENDPOINT_SYNC_NONE (0 << 2)
#define USB_ENDPOINT_SYNC_ASYNC (1 << 2)
@@ -594,6 +599,12 @@ static inline int usb_endpoint_maxp(const struct usb_endpoint_descriptor *epd)
return __le16_to_cpu(epd->wMaxPacketSize);
}
+static inline int usb_endpoint_interrupt_type(
+ const struct usb_endpoint_descriptor *epd)
+{
+ return epd->bmAttributes & USB_ENDPOINT_INTRTYPE;
+}
+
/*-------------------------------------------------------------------------*/
/* USB_DT_SS_ENDPOINT_COMP: SuperSpeed Endpoint Companion descriptor */