diff options
author | Hans Petter Selasky <hselasky@FreeBSD.org> | 2010-10-04 23:18:05 +0000 |
---|---|---|
committer | Hans Petter Selasky <hselasky@FreeBSD.org> | 2010-10-04 23:18:05 +0000 |
commit | 963169b4af5d1a347560f060254e1df9541b2350 (patch) | |
tree | c082c15f2b4af936b99eda2cd4c67777fdf391ee /sys/dev/usb/usb_controller.h | |
parent | 2ecb4e919f3df1edf00be35c9a85bd067495be2e (diff) | |
download | src-963169b4af5d1a347560f060254e1df9541b2350.tar.gz src-963169b4af5d1a347560f060254e1df9541b2350.zip |
This commit adds full support for USB 3.0 devices in host and device
mode in the USB core. The patch mostly consists of updating the USB
HUB code to support USB 3.0 HUBs. This patch also add some more USB
controller methods to support more active-alike USB controllers like
the XHCI which needs to be informed about various device state events.
USB 3.0 HUBs are not tested yet, due to lack of hardware, but are
believed to work.
After this update the initial device descriptor is only read twice
when we know that the bMaxPacketSize is too small for a single packet
transfer of this descriptor.
Approved by: thompsa (mentor)
Notes
Notes:
svn path=/head/; revision=213435
Diffstat (limited to 'sys/dev/usb/usb_controller.h')
-rw-r--r-- | sys/dev/usb/usb_controller.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/sys/dev/usb/usb_controller.h b/sys/dev/usb/usb_controller.h index 0f7ffac5d210..6b15dab993d5 100644 --- a/sys/dev/usb/usb_controller.h +++ b/sys/dev/usb/usb_controller.h @@ -97,6 +97,9 @@ struct usb_bus_methods { void (*get_hw_ep_profile) (struct usb_device *udev, const struct usb_hw_ep_profile **ppf, uint8_t ep_addr); void (*set_stall) (struct usb_device *udev, struct usb_xfer *xfer, struct usb_endpoint *ep, uint8_t *did_stall); + + /* USB Device mode mandatory. USB Host mode optional. */ + void (*clear_stall) (struct usb_device *udev, struct usb_endpoint *ep); /* Optional transfer polling support */ @@ -106,6 +109,28 @@ struct usb_bus_methods { /* Optional fixed power mode support */ void (*get_power_mode) (struct usb_device *udev, int8_t *pmode); + + /* Optional endpoint uninit */ + + void (*endpoint_uninit) (struct usb_device *, struct usb_endpoint *); + + /* Optional device init */ + + usb_error_t (*device_init) (struct usb_device *); + + /* Optional device uninit */ + + void (*device_uninit) (struct usb_device *); + + /* Optional for device and host mode */ + + void (*start_dma_delay) (struct usb_xfer *); + + void (*device_state_change) (struct usb_device *); + + /* Optional for host mode */ + + usb_error_t (*set_address) (struct usb_device *, struct mtx *, uint16_t); }; /* |