|
@@ -482,6 +482,138 @@ int usb_get_current_frame_number(struct usb_device *dev)
|
|
|
return dev->bus->op->get_frame_number (dev);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * usb_endpoint_dir_in - check if the endpoint has IN direction
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint is of type IN, otherwise it returns false.
|
|
|
+ */
|
|
|
+int usb_endpoint_dir_in(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_dir_out - check if the endpoint has OUT direction
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint is of type OUT, otherwise it returns false.
|
|
|
+ */
|
|
|
+int usb_endpoint_dir_out(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return ((epd->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_xfer_bulk - check if the endpoint has bulk transfer type
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint is of type bulk, otherwise it returns false.
|
|
|
+ */
|
|
|
+int usb_endpoint_xfer_bulk(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
|
|
+ USB_ENDPOINT_XFER_BULK);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_xfer_int - check if the endpoint has interrupt transfer type
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint is of type interrupt, otherwise it returns
|
|
|
+ * false.
|
|
|
+ */
|
|
|
+int usb_endpoint_xfer_int(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
|
|
+ USB_ENDPOINT_XFER_INT);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_xfer_isoc - check if the endpoint has isochronous transfer type
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint is of type isochronous, otherwise it returns
|
|
|
+ * false.
|
|
|
+ */
|
|
|
+int usb_endpoint_xfer_isoc(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return ((epd->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) ==
|
|
|
+ USB_ENDPOINT_XFER_ISOC);
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_is_bulk_in - check if the endpoint is bulk IN
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint has bulk transfer type and IN direction,
|
|
|
+ * otherwise it returns false.
|
|
|
+ */
|
|
|
+int usb_endpoint_is_bulk_in(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_in(epd));
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_is_bulk_out - check if the endpoint is bulk OUT
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint has bulk transfer type and OUT direction,
|
|
|
+ * otherwise it returns false.
|
|
|
+ */
|
|
|
+int usb_endpoint_is_bulk_out(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return (usb_endpoint_xfer_bulk(epd) && usb_endpoint_dir_out(epd));
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_is_int_in - check if the endpoint is interrupt IN
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint has interrupt transfer type and IN direction,
|
|
|
+ * otherwise it returns false.
|
|
|
+ */
|
|
|
+int usb_endpoint_is_int_in(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_in(epd));
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_is_int_out - check if the endpoint is interrupt OUT
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint has interrupt transfer type and OUT direction,
|
|
|
+ * otherwise it returns false.
|
|
|
+ */
|
|
|
+int usb_endpoint_is_int_out(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return (usb_endpoint_xfer_int(epd) && usb_endpoint_dir_out(epd));
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_is_isoc_in - check if the endpoint is isochronous IN
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint has isochronous transfer type and IN direction,
|
|
|
+ * otherwise it returns false.
|
|
|
+ */
|
|
|
+int usb_endpoint_is_isoc_in(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_in(epd));
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * usb_endpoint_is_isoc_out - check if the endpoint is isochronous OUT
|
|
|
+ * @epd: endpoint to be checked
|
|
|
+ *
|
|
|
+ * Returns true if the endpoint has isochronous transfer type and OUT direction,
|
|
|
+ * otherwise it returns false.
|
|
|
+ */
|
|
|
+int usb_endpoint_is_isoc_out(const struct usb_endpoint_descriptor *epd)
|
|
|
+{
|
|
|
+ return (usb_endpoint_xfer_isoc(epd) && usb_endpoint_dir_out(epd));
|
|
|
+}
|
|
|
+
|
|
|
/*-------------------------------------------------------------------*/
|
|
|
/*
|
|
|
* __usb_get_extra_descriptor() finds a descriptor of specific type in the
|
|
@@ -909,6 +1041,18 @@ EXPORT_SYMBOL(__usb_get_extra_descriptor);
|
|
|
EXPORT_SYMBOL(usb_find_device);
|
|
|
EXPORT_SYMBOL(usb_get_current_frame_number);
|
|
|
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_dir_in);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_dir_out);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_xfer_bulk);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_xfer_int);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_xfer_isoc);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_is_bulk_in);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_is_bulk_out);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_is_int_in);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_is_int_out);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_is_isoc_in);
|
|
|
+EXPORT_SYMBOL_GPL(usb_endpoint_is_isoc_out);
|
|
|
+
|
|
|
EXPORT_SYMBOL (usb_buffer_alloc);
|
|
|
EXPORT_SYMBOL (usb_buffer_free);
|
|
|
|