USB Host Controller
  • HCI(Host Controller Interface)
  • OHCI FireWire drivers
  • supports USB 1.1 (full and low speeds) only
  • If a computer provides non-x86 USB 1.1, or x86 USB 1.1 without an Intel or VIA chipset, it probably uses OHCI (Compaq, Microsoft and National Semiconductor)
  • USB Core/HCD(Host Controller Driver)/URB(USB Request Block)
  • <kernel src>/include/linux/usb.h
    • struct usb_device(kernel's representation of a USB device)
      • struct device dev;
    • struct usb_interface(what usb device drivers talk to)
      • struct device dev; /* interface specific device info */
    • struct usb_class_driver(a USB driver that wants to use the USB major number)
      • const struct file_operations *fops;
    • struct urb
      • int status;
      • unsigned int transfer_flags;
        • URB_NO_TRANSFER_DMA_MAP: urb->transfer_dma are valid on submit
        • URB_NO_SETUP_DMA_MAP: urb->setup_dma are valid on submit
      • int interval; (isochronous and interrupt urbs)
        • Urb polling interval
        • For lowSpeed and fullSpeed devices, the interval unit is frames(ms)
        • For hiSpeed devices, the interval unit is microframes(1/8 ms)
      • usb_complete_t complete
        • Completion handler called when the transfer is complete
    • usb_fill_int_urb
    • usb_fill_bulk_urb
    • usb_fill_control_urb
    • usb_set_intfdata
      • save data private to the driver to struct usb_interface.device.driver_data
    • usb_get_intfdata
    • interface_to_usbdev
      • container_of(intf->dev.parent, struct usb_device, dev)
  • OHCI HCD
  • <kernel src>/drivers/usb/host/ohci.h
    • hcd_to_ohci
    • ohci_to_hcd
    • struct ohci_hcd
      • the hcd_priv of usb_hcd
page_revision: 58, last_edited: 1237800602|%e %b %Y, %H:%M %Z (%O ago)
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License