iPXE
|
USB Universal Host Controller Interface (UHCI) driver. More...
#include <strings.h>
#include <unistd.h>
#include <errno.h>
#include <byteswap.h>
#include <ipxe/malloc.h>
#include <ipxe/pci.h>
#include <ipxe/usb.h>
#include "ehci.h"
#include "uhci.h"
Go to the source code of this file.
Functions | |
FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
static int | uhci_reachable (void *addr, size_t len) |
Check that address is reachable. More... | |
static void | uhci_run (struct uhci_device *uhci) |
Start UHCI device. More... | |
static int | uhci_stop (struct uhci_device *uhci) |
Stop UHCI device. More... | |
static int | uhci_reset (struct uhci_device *uhci) |
Reset UHCI device. More... | |
static int | uhci_ring_alloc (struct uhci_ring *ring) |
Allocate transfer ring. More... | |
static void | uhci_ring_free (struct uhci_ring *ring) |
Free transfer ring. More... | |
static int | uhci_enqueue (struct uhci_ring *ring, struct io_buffer *iobuf, unsigned int count) |
Enqueue new transfer. More... | |
static void | uhci_describe (struct uhci_ring *ring, void *data, size_t len, uint8_t pid) |
Describe transfer. More... | |
static struct io_buffer * | uhci_dequeue (struct uhci_ring *ring) |
Dequeue transfer. More... | |
static void | uhci_restart (struct uhci_ring *ring, uint32_t toggle) |
Restart ring. More... | |
static uint32_t | uhci_link_qh (struct uhci_queue_head *queue) |
Get link value for a queue head. More... | |
static void | uhci_async_schedule (struct uhci_device *uhci) |
(Re)build asynchronous schedule More... | |
static void | uhci_async_add (struct uhci_endpoint *endpoint) |
Add endpoint to asynchronous schedule. More... | |
static void | uhci_async_del (struct uhci_endpoint *endpoint) |
Remove endpoint from asynchronous schedule. More... | |
static void | uhci_periodic_schedule (struct uhci_device *uhci) |
(Re)build periodic schedule More... | |
static void | uhci_periodic_add (struct uhci_endpoint *endpoint) |
Add endpoint to periodic schedule. More... | |
static void | uhci_periodic_del (struct uhci_endpoint *endpoint) |
Remove endpoint from periodic schedule. More... | |
static void | uhci_schedule_add (struct uhci_endpoint *endpoint) |
Add endpoint to appropriate schedule. More... | |
static void | uhci_schedule_del (struct uhci_endpoint *endpoint) |
Remove endpoint from appropriate schedule. More... | |
static int | uhci_endpoint_open (struct usb_endpoint *ep) |
Open endpoint. More... | |
static void | uhci_endpoint_close (struct usb_endpoint *ep) |
Close endpoint. More... | |
static int | uhci_endpoint_reset (struct usb_endpoint *ep) |
Reset endpoint. More... | |
static int | uhci_endpoint_mtu (struct usb_endpoint *ep) |
Update MTU. More... | |
static int | uhci_endpoint_message (struct usb_endpoint *ep, struct io_buffer *iobuf) |
Enqueue message transfer. More... | |
static int | uhci_endpoint_stream (struct usb_endpoint *ep, struct io_buffer *iobuf, int zlp) |
Enqueue stream transfer. More... | |
static int | uhci_is_message (struct uhci_transfer *xfer) |
Check if transfer is a message transfer. More... | |
static void | uhci_endpoint_poll (struct uhci_endpoint *endpoint) |
Poll for completions. More... | |
static int | uhci_device_open (struct usb_device *usb) |
Open device. More... | |
static void | uhci_device_close (struct usb_device *usb) |
Close device. More... | |
static int | uhci_device_address (struct usb_device *usb) |
Assign device address. More... | |
static int | uhci_hub_open (struct usb_hub *hub __unused) |
Open hub. More... | |
static void | uhci_hub_close (struct usb_hub *hub __unused) |
Close hub. More... | |
static int | uhci_root_open (struct usb_hub *hub __unused) |
Open root hub. More... | |
static void | uhci_root_close (struct usb_hub *hub __unused) |
Close root hub. More... | |
static int | uhci_root_enable (struct usb_hub *hub, struct usb_port *port) |
Enable port. More... | |
static int | uhci_root_disable (struct usb_hub *hub, struct usb_port *port) |
Disable port. More... | |
static int | uhci_root_speed (struct usb_hub *hub, struct usb_port *port) |
Update root hub port speed. More... | |
static int | uhci_root_clear_tt (struct usb_hub *hub, struct usb_port *port, struct usb_endpoint *ep) |
Clear transaction translator buffer. More... | |
static void | uhci_root_poll (struct usb_hub *hub, struct usb_port *port) |
Poll for port status changes. More... | |
static int | uhci_bus_open (struct usb_bus *bus) |
Open USB bus. More... | |
static void | uhci_bus_close (struct usb_bus *bus) |
Close USB bus. More... | |
static void | uhci_bus_poll (struct usb_bus *bus) |
Poll USB bus. More... | |
__weak unsigned int | ehci_companion (struct pci_device *pci __unused) |
Locate EHCI companion controller (when no EHCI support is present) More... | |
static int | uhci_probe (struct pci_device *pci) |
Probe PCI device. More... | |
static void | uhci_remove (struct pci_device *pci) |
Remove PCI device. More... | |
Variables | |
static struct usb_host_operations | uhci_operations |
USB host controller operations. More... | |
static struct pci_device_id | uhci_ids [] |
UHCI PCI device IDs. More... | |
struct pci_driver uhci_driver | __pci_driver |
UHCI PCI driver. More... | |
USB Universal Host Controller Interface (UHCI) driver.
Definition in file uhci.c.
FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
|
inlinestatic |
Check that address is reachable.
addr | Address |
len | Length |
rc | Return status code |
Definition at line 57 of file uhci.c.
References addr, ENOTSUP, len, phys, and virt_to_phys().
Referenced by uhci_bus_open(), uhci_enqueue(), and uhci_ring_alloc().
|
static |
Start UHCI device.
uhci | UHCI device |
Definition at line 83 of file uhci.c.
References inw(), outw, uhci_device::regs, UHCI_USBCMD, UHCI_USBCMD_MAX64, and UHCI_USBCMD_RUN.
Referenced by uhci_bus_open().
|
static |
Stop UHCI device.
uhci | UHCI device |
rc | Return status code |
Definition at line 98 of file uhci.c.
References DBGC, ETIMEDOUT, inw(), mdelay(), uhci_device::name, outw, uhci_device::regs, UHCI_STOP_MAX_WAIT_MS, UHCI_USBCMD, UHCI_USBCMD_RUN, UHCI_USBSTS, and UHCI_USBSTS_HCHALTED.
Referenced by uhci_bus_close(), uhci_bus_open(), and uhci_reset().
|
static |
Reset UHCI device.
uhci | UHCI device |
rc | Return status code |
Definition at line 130 of file uhci.c.
References DBGC, ETIMEDOUT, inw(), mdelay(), uhci_device::name, outw, rc, uhci_device::regs, UHCI_RESET_MAX_WAIT_MS, uhci_stop(), UHCI_USBCMD, and UHCI_USBCMD_HCRESET.
Referenced by uhci_probe(), and uhci_remove().
|
static |
Allocate transfer ring.
ring | Transfer ring |
rc | Return status code |
Definition at line 175 of file uhci.c.
References cpu_to_le32, uhci_queue_head::current, ENOMEM, free_phys(), uhci_ring::head, malloc_phys(), memset(), rc, UHCI_ALIGN, UHCI_LINK_TERMINATE, and uhci_reachable().
Referenced by uhci_endpoint_open().
|
static |
Free transfer ring.
ring | Transfer ring |
Definition at line 207 of file uhci.c.
References assert(), free_phys(), uhci_ring::head, NULL, UHCI_RING_COUNT, uhci_ring_fill(), and uhci_ring::xfer.
Referenced by uhci_endpoint_close(), and uhci_endpoint_open().
|
static |
Enqueue new transfer.
ring | Transfer ring |
iobuf | I/O buffer |
count | Number of descriptors |
rc | Return status code |
Definition at line 227 of file uhci.c.
References assert(), uhci_transfer::cons, count, cpu_to_le32, uhci_queue_head::current, io_buffer::data, desc, uhci_transfer::desc, end, uhci_ring::end, ENOBUFS, ENOMEM, uhci_ring::flags, free, free_phys(), uhci_ring::head, index, iob_len(), uhci_transfer::iobuf, len, uhci_transfer::len, link, malloc(), malloc_phys(), memset(), NULL, uhci_transfer::prod, uhci_ring::prod, rc, UHCI_ALIGN, UHCI_FL_IOC, UHCI_LINK_DEPTH_FIRST, UHCI_LINK_TERMINATE, uhci_reachable(), UHCI_RING_COUNT, uhci_ring_fill(), uhci_ring_remaining(), virt_to_phys(), wmb(), and uhci_ring::xfer.
Referenced by uhci_endpoint_message(), and uhci_endpoint_stream().
Describe transfer.
ring | Transfer ring |
data | Data |
len | Length of data |
pid | Packet ID |
Definition at line 319 of file uhci.c.
References control, uhci_ring::control, cpu_to_le32, data, desc, uhci_transfer::desc, uhci_ring::end, len, uhci_ring::mtu, uhci_transfer::prod, UHCI_CONTROL_LEN, UHCI_CONTROL_PID, UHCI_CONTROL_TOGGLE, UHCI_FL_SPD, UHCI_STATUS_ACTIVE, USB_PID_IN, virt_to_phys(), and wmb().
Referenced by uhci_endpoint_message(), and uhci_endpoint_stream().
Dequeue transfer.
ring | Transfer ring |
iobuf | I/O buffer |
Definition at line 360 of file uhci.c.
References assert(), uhci_ring::cons, uhci_transfer::desc, free, free_phys(), index, uhci_transfer::iobuf, len, NULL, uhci_transfer::prod, UHCI_RING_COUNT, uhci_ring_fill(), and uhci_ring::xfer.
Referenced by uhci_endpoint_close(), and uhci_endpoint_poll().
Restart ring.
ring | Transfer ring |
toggle | Expected data toggle for next descriptor |
Definition at line 394 of file uhci.c.
References assert(), uhci_transfer::cons, uhci_ring::cons, uhci_ring::control, cpu_to_le32, uhci_queue_head::current, desc, uhci_transfer::desc, first, uhci_ring::head, le32_to_cpu, link, NULL, uhci_transfer::prod, uhci_ring::prod, UHCI_CONTROL_TOGGLE, UHCI_LINK_TERMINATE, UHCI_RING_COUNT, uhci_ring_fill(), virt_to_phys(), wmb(), and uhci_ring::xfer.
Referenced by uhci_endpoint_poll(), and uhci_endpoint_reset().
|
inlinestatic |
Get link value for a queue head.
queue | Queue head |
link | Link value |
Definition at line 458 of file uhci.c.
References queue, UHCI_LINK_TYPE_QH, and virt_to_phys().
Referenced by uhci_async_schedule(), and uhci_periodic_schedule().
|
static |
(Re)build asynchronous schedule
uhci | UHCI device |
Definition at line 468 of file uhci.c.
References uhci_device::async, cpu_to_le32, end, uhci_ring::head, uhci_device::head, link, uhci_queue_head::link, list_for_each_entry_reverse, queue, uhci_endpoint::ring, uhci_link_qh(), UHCI_LINK_TERMINATE, and wmb().
Referenced by uhci_async_add(), uhci_async_del(), and uhci_bus_open().
|
static |
Add endpoint to asynchronous schedule.
endpoint | Endpoint |
Definition at line 497 of file uhci.c.
References uhci_device::async, list_add_tail, uhci_endpoint::schedule, uhci_endpoint::uhci, and uhci_async_schedule().
Referenced by uhci_schedule_add().
|
static |
Remove endpoint from asynchronous schedule.
endpoint | Endpoint |
Definition at line 512 of file uhci.c.
References uhci_device::async, list_check_contains_entry, list_del, mdelay(), uhci_endpoint::schedule, uhci_endpoint::uhci, and uhci_async_schedule().
Referenced by uhci_schedule_del().
|
static |
(Re)build periodic schedule
uhci | UHCI device |
Definition at line 531 of file uhci.c.
References cpu_to_le32, DBGCP, end, uhci_endpoint::ep, ffs, uhci_device::frame, uhci_ring::head, uhci_device::head, usb_endpoint::interval, link, uhci_frame_list::link, list_for_each_entry, list_for_each_entry_reverse, uhci_device::name, uhci_device::periodic, queue, uhci_endpoint::ring, UHCI_FRAMES, uhci_link_qh(), and wmb().
Referenced by uhci_bus_open(), uhci_periodic_add(), and uhci_periodic_del().
|
static |
Add endpoint to periodic schedule.
endpoint | Endpoint |
Definition at line 599 of file uhci.c.
References before, uhci_endpoint::ep, usb_endpoint::interval, list_add_tail, list_for_each_entry, uhci_device::periodic, uhci_endpoint::schedule, uhci_endpoint::uhci, and uhci_periodic_schedule().
Referenced by uhci_schedule_add().
|
static |
Remove endpoint from periodic schedule.
endpoint | Endpoint |
Definition at line 620 of file uhci.c.
References list_check_contains_entry, list_del, mdelay(), uhci_device::periodic, uhci_endpoint::schedule, uhci_endpoint::uhci, and uhci_periodic_schedule().
Referenced by uhci_schedule_del().
|
static |
Add endpoint to appropriate schedule.
endpoint | Endpoint |
Definition at line 639 of file uhci.c.
References attr, usb_endpoint::attributes, uhci_endpoint::ep, uhci_async_add(), uhci_periodic_add(), USB_ENDPOINT_ATTR_INTERRUPT, and USB_ENDPOINT_ATTR_TYPE_MASK.
Referenced by uhci_endpoint_open().
|
static |
Remove endpoint from appropriate schedule.
endpoint | Endpoint |
Definition at line 655 of file uhci.c.
References attr, usb_endpoint::attributes, uhci_endpoint::ep, uhci_async_del(), uhci_periodic_del(), USB_ENDPOINT_ATTR_INTERRUPT, and USB_ENDPOINT_ATTR_TYPE_MASK.
Referenced by uhci_endpoint_close().
|
static |
Open endpoint.
ep | USB endpoint |
rc | Return status code |
Definition at line 679 of file uhci.c.
References usb_endpoint::address, usb_device::address, uhci_ring::control, uhci_device::endpoints, ENOMEM, uhci_endpoint::ep, usb_device::ep, uhci_ring::flags, free, uhci_endpoint::list, list_add_tail, uhci_ring::mtu, usb_endpoint::mtu, rc, uhci_endpoint::ring, usb_device::speed, uhci_endpoint::uhci, UHCI_CONTROL_DEVICE, UHCI_CONTROL_ENDPOINT, UHCI_FL_CERR_MAX, UHCI_FL_LS, uhci_ring_alloc(), uhci_ring_free(), uhci_schedule_add(), usb_endpoint::usb, usb_endpoint_set_hostdata(), usb_get_hostdata(), USB_SPEED_FULL, and zalloc().
|
static |
Close endpoint.
ep | USB endpoint |
Definition at line 725 of file uhci.c.
References ECANCELED, uhci_endpoint::ep, free, uhci_endpoint::list, list_del, uhci_endpoint::ring, uhci_dequeue(), uhci_ring_fill(), uhci_ring_free(), uhci_schedule_del(), usb_complete_err(), and usb_endpoint_get_hostdata().
|
static |
Reset endpoint.
ep | USB endpoint |
rc | Return status code |
Definition at line 755 of file uhci.c.
References uhci_endpoint::ep, uhci_endpoint::ring, uhci_restart(), and usb_endpoint_get_hostdata().
|
static |
Update MTU.
ep | USB endpoint |
rc | Return status code |
Definition at line 771 of file uhci.c.
References uhci_endpoint::ep, uhci_ring::mtu, usb_endpoint::mtu, uhci_endpoint::ring, and usb_endpoint_get_hostdata().
|
static |
Enqueue message transfer.
ep | USB endpoint |
iobuf | I/O buffer |
rc | Return status code |
Definition at line 787 of file uhci.c.
References assert(), uhci_ring::control, count, cpu_to_le16, io_buffer::data, uhci_ring::end, uhci_endpoint::ep, iob_len(), iob_pull, len, uhci_ring::mtu, NULL, uhci_transfer::prod, rc, usb_setup_packet::request, uhci_endpoint::ring, UHCI_CONTROL_TOGGLE, uhci_describe(), uhci_enqueue(), USB_DIR_IN, usb_endpoint_get_hostdata(), USB_PID_IN, USB_PID_OUT, and USB_PID_SETUP.
|
static |
Enqueue stream transfer.
ep | USB endpoint |
iobuf | I/O buffer |
zlp | Append a zero-length packet |
rc | Return status code |
Definition at line 841 of file uhci.c.
References usb_endpoint::address, assert(), count, io_buffer::data, uhci_ring::end, uhci_endpoint::ep, iob_len(), len, uhci_ring::mtu, NULL, uhci_transfer::prod, rc, uhci_endpoint::ring, uhci_describe(), uhci_enqueue(), USB_DIR_IN, usb_endpoint_get_hostdata(), USB_PID_IN, and USB_PID_OUT.
|
inlinestatic |
Check if transfer is a message transfer.
xfer | UHCI transfer |
is_message | Transfer is a message transfer |
Definition at line 879 of file uhci.c.
References cpu_to_le32, desc, uhci_transfer::desc, UHCI_CONTROL_PID, UHCI_CONTROL_PID_MASK, and USB_PID_SETUP.
Referenced by uhci_endpoint_poll().
|
static |
Poll for completions.
endpoint | Endpoint |
Definition at line 891 of file uhci.c.
References assert(), uhci_transfer::cons, uhci_ring::cons, control, cpu_to_le32, uhci_queue_head::current, DBGC, desc, uhci_transfer::desc, EIO, uhci_endpoint::ep, usb_device::ep, uhci_ring::head, index, iob_len(), iob_unput, le16_to_cpu, le32_to_cpu, len, uhci_transfer::len, link, usb_device::name, NULL, uhci_transfer::prod, uhci_endpoint::ring, rmb, uhci_endpoint::uhci, UHCI_ACTUAL_LEN, UHCI_ALIGN, UHCI_CONTROL_TOGGLE, UHCI_DATA_PACKET, uhci_dequeue(), UHCI_FL_SPD, uhci_is_message(), UHCI_LINK_TERMINATE, uhci_restart(), UHCI_RING_COUNT, uhci_ring_fill(), UHCI_SHORT_PACKET, UHCI_STATUS_ACTIVE, UHCI_STATUS_STALLED, usb_endpoint::usb, usb_complete(), usb_complete_err(), usb_endpoint_name(), virt_to_phys(), wmb(), and uhci_ring::xfer.
Referenced by uhci_bus_poll().
|
static |
Open device.
usb | USB device |
rc | Return status code |
Definition at line 1021 of file uhci.c.
References usb_hub::bus, usb_port::hub, usb_device::port, usb_bus_get_hostdata(), and usb_set_hostdata().
|
static |
Close device.
usb | USB device |
Definition at line 1033 of file uhci.c.
References usb_device::address, bus, uhci_device::bus, usb_free_address(), and usb_get_hostdata().
|
static |
Assign device address.
usb | USB device |
rc | Return status code |
Definition at line 1048 of file uhci.c.
References address, usb_device::address, assert(), bus, uhci_device::bus, uhci_ring::control, DBGC, usb_device::name, NULL, rc, uhci_endpoint::ring, strerror(), uhci_endpoint::uhci, UHCI_CONTROL_DEVICE, usb_endpoint::usb, usb_alloc_address(), usb_endpoint(), usb_endpoint_get_hostdata(), USB_EP0_ADDRESS, usb_free_address(), usb_get_hostdata(), and usb_set_address().
|
static |
|
static |
|
static |
|
static |
Enable port.
hub | USB hub |
port | USB port |
rc | Return status code |
Definition at line 1150 of file uhci.c.
References DBGC, ETIMEDOUT, inw(), mdelay(), uhci_device::name, outw, port, uhci_device::regs, UHCI_PORT_ENABLE_MAX_WAIT_MS, UHCI_PORTSC, UHCI_PORTSC_PED, UHCI_PORTSC_PR, usb_hub_get_drvdata(), USB_RESET_DELAY_MS, and USB_RESET_RECOVER_DELAY_MS.
Disable port.
hub | USB hub |
port | USB port |
rc | Return status code |
Definition at line 1193 of file uhci.c.
References inw(), outw, port, uhci_device::regs, UHCI_PORTSC, UHCI_PORTSC_PED, and usb_hub_get_drvdata().
Update root hub port speed.
hub | USB hub |
port | USB port |
rc | Return status code |
Definition at line 1212 of file uhci.c.
References BUS_TYPE_PCI, uhci_device::companion, DBGC, find_usb_bus_by_location(), inw(), uhci_device::name, outw, PCI_ARGS, PCI_FMT, pci_init(), port, uhci_device::regs, UHCI_PORTSC, UHCI_PORTSC_CCS, UHCI_PORTSC_CSC, UHCI_PORTSC_LS, usb_hub_get_drvdata(), USB_SPEED_FULL, USB_SPEED_LOW, and USB_SPEED_NONE.
|
static |
Clear transaction translator buffer.
hub | USB hub |
port | USB port |
ep | USB endpoint |
rc | Return status code |
Definition at line 1257 of file uhci.c.
References DBGC, ENOTSUP, uhci_device::name, usb_device::name, port, usb_endpoint::usb, usb_endpoint_name(), and usb_hub_get_drvdata().
Poll for port status changes.
hub | USB hub |
port | USB port |
Definition at line 1274 of file uhci.c.
References inw(), outw, port, uhci_device::regs, UHCI_PORTSC, UHCI_PORTSC_CHANGE, UHCI_PORTSC_CSC, usb_hub_get_drvdata(), and usb_port_changed().
Referenced by uhci_bus_poll().
|
static |
Open USB bus.
bus | USB bus |
rc | Return status code |
Definition at line 1306 of file uhci.c.
References assert(), uhci_device::async, bus, cpu_to_le32, uhci_queue_head::current, ENOMEM, uhci_device::frame, free_phys(), uhci_device::head, list_empty, malloc_phys(), memset(), outl, uhci_device::periodic, rc, uhci_device::regs, UHCI_ALIGN, uhci_async_schedule(), UHCI_FLBASEADD, UHCI_LINK_TERMINATE, uhci_periodic_schedule(), uhci_reachable(), uhci_run(), uhci_stop(), usb_bus_get_hostdata(), and virt_to_phys().
|
static |
Close USB bus.
bus | USB bus |
Definition at line 1359 of file uhci.c.
References assert(), uhci_device::async, bus, uhci_device::frame, free_phys(), uhci_device::head, list_empty, uhci_device::periodic, uhci_stop(), and usb_bus_get_hostdata().
|
static |
Poll USB bus.
bus | USB bus |
Definition at line 1381 of file uhci.c.
References bus, uhci_device::endpoints, uhci_endpoint::list, list_for_each_entry, uhci_endpoint::uhci, uhci_endpoint_poll(), UHCI_PORTS, uhci_root_poll(), and usb_bus_get_hostdata().
__weak unsigned int ehci_companion | ( | struct pci_device *pci | __unused | ) |
Locate EHCI companion controller (when no EHCI support is present)
pci | PCI device |
busdevfn | EHCI companion controller bus:dev.fn (if any) |
Definition at line 1456 of file uhci.c.
Referenced by uhci_probe().
|
static |
Probe PCI device.
pci | PCI device |
rc | Return status code |
Definition at line 1466 of file uhci.c.
References adjust_pci_device(), alloc_usb_bus(), uhci_device::async, uhci_device::bus, uhci_device::companion, pci_device::dev, ehci_companion(), uhci_device::endpoints, ENODEV, ENOMEM, free, free_usb_bus(), usb_bus::hub, INIT_LIST_HEAD, pci_device::ioaddr, device::name, uhci_device::name, pci_set_drvdata(), pci_write_config_word(), uhci_device::periodic, port, rc, register_usb_bus(), uhci_device::regs, UHCI_MTU, uhci_operations, UHCI_PORTS, uhci_reset(), UHCI_USBLEGSUP, UHCI_USBLEGSUP_DEFAULT, unregister_usb_bus(), usb_bus_set_hostdata(), usb_hub_set_drvdata(), usb_port(), USB_PROTO_2_0, and zalloc().
|
static |
Remove PCI device.
pci | PCI device |
Definition at line 1545 of file uhci.c.
References assert(), uhci_device::async, bus, uhci_device::bus, free, free_usb_bus(), list_empty, pci_get_drvdata(), uhci_device::periodic, uhci_reset(), and unregister_usb_bus().
|
static |
|
static |
struct pci_driver uhci_driver __pci_driver |
UHCI PCI driver.