%USB %Thadeu Cascardo # Universal Serial Bus * USB 1.0 and 1.1, 1.5Mbps and 12Mbps * USB 2.0 - up to 480Mbps * USB 3.0 - up to 5Gbps * Wireless USB - over Ultra Wideband # USB - Cont. * A master/slave bus: the master asks the slave to send data * Auto-configurable and hotplugable * Standards specifications, allowing device classes, with no specific driver * HCDs, USB devices and Gadget devices and their respective drivers # USB Basics * Configurations * Interfaces * Settings * Endpoints * URBs # Endpoints and URBs * IN and OUT Endpoints * Control Endpoints * Interrupt Endpoints * Bulk Endpoints * Isochronous Endpoints # USB IDs * struct usb\\_device\\_id * USB\\_DEVICE * Others # USB Driver * struct usb\\_driver - name - id\\_table - probe - disconnect # USB Interface * struct usb\\_interface - struct usb\\_host\\_interface cur\\_altsetting * desc.bNumEndpoints * struct usb\\_endpoint\\_descriptor endpoint[].desc * usb\\_get\\_intf * usb\\_put\\_intf # Endpoints * struct usb\\_endpoint\\_descriptor * usb\\_endpoint\\_is\\_isoc\\_in * usb\\_endpoint\\_num # URBs * struct urb - status - transfer\\_buffer - actual\\_length * usb\\_alloc\\_urb * usb\\_free\\_usb * usb\\_submit\\_urb * usb\\_kill\\_urb * usb\\_fill\\_control\\_urb * usb\\_fill\\_bulk\\_urb * usb\\_control\\_msg # URBs * Callbacks execute in interrupt context * May resubmit an URB, but must use GFP\\_ATOMIC