iPXE
|
USB Universal Host Controller Interface (UHCI) driver. More...
Go to the source code of this file.
Data Structures | |
struct | uhci_frame_list |
A frame list. More... | |
struct | uhci_transfer_descriptor |
A transfer descriptor. More... | |
struct | uhci_queue_head |
A queue head. More... | |
struct | uhci_transfer |
A single UHCI transfer. More... | |
struct | uhci_ring |
A transfer ring. More... | |
struct | uhci_device |
A UHCI device. More... | |
struct | uhci_endpoint |
A UHCI endpoint. More... | |
Macros | |
#define | UHCI_ALIGN 16 |
Minimum alignment required for data structures. More... | |
#define | UHCI_PORTS 2 |
Number of ports. More... | |
#define | UHCI_MTU 1280 |
Maximum transfer size. More... | |
#define | UHCI_BAR_SIZE 0x14 |
I/O BAR size. More... | |
#define | UHCI_USBCMD 0x00 |
USB command register. More... | |
#define | UHCI_USBCMD_MAX64 0x0080 |
Max packet is 64 bytes. More... | |
#define | UHCI_USBCMD_HCRESET 0x0002 |
Host controller reset. More... | |
#define | UHCI_USBCMD_RUN 0x0001 |
Run/stop. More... | |
#define | UHCI_USBSTS 0x02 |
USB status register. More... | |
#define | UHCI_USBSTS_HCHALTED 0x0020 |
Host controller halted. More... | |
#define | UHCI_USBSTS_USBINT 0x0001 |
USB interrupt. More... | |
#define | UHCI_FLBASEADD 0x08 |
Frame list base address register. More... | |
#define | UHCI_PORTSC(port) ( 0x0e + ( (port) << 1 ) ) |
Port status and control register. More... | |
#define | UHCI_PORTSC_PR 0x0200 |
Port reset. More... | |
#define | UHCI_PORTSC_LS 0x0100 |
Low-speed device attached. More... | |
#define | UHCI_PORTSC_PEC 0x0008 |
Port enabled/disabled change. More... | |
#define | UHCI_PORTSC_PED 0x0004 |
Port enabled. More... | |
#define | UHCI_PORTSC_CSC 0x0002 |
Connect status change. More... | |
#define | UHCI_PORTSC_CCS 0x0001 |
Current connect status. More... | |
#define | UHCI_PORTSC_CHANGE ( UHCI_PORTSC_CSC | UHCI_PORTSC_PEC ) |
Port status change mask. More... | |
#define | UHCI_LINK_DEPTH_FIRST 0x00000004UL |
Depth-first processing. More... | |
#define | UHCI_LINK_TYPE_QH 0x00000002UL |
Queue head type. More... | |
#define | UHCI_LINK_TERMINATE 0x00000001UL |
List terminator. More... | |
#define | UHCI_FRAMES 1024 |
Number of frames in frame list. More... | |
#define | UHCI_LEN_MASK 0x7ff |
Length mask. More... | |
#define | UHCI_ACTUAL_LEN(actual) ( ( (actual) + 1 ) & UHCI_LEN_MASK ) |
Actual length. More... | |
#define | UHCI_STATUS_ACTIVE 0x80 |
Active. More... | |
#define | UHCI_STATUS_STALLED 0x40 |
Stalled. More... | |
#define | UHCI_STATUS_BUFFER 0x20 |
Data buffer error. More... | |
#define | UHCI_STATUS_BABBLE 0x10 |
Babble detected. More... | |
#define | UHCI_STATUS_NAK 0x08 |
NAK received. More... | |
#define | UHCI_STATUS_CRC_TIMEOUT 0x04 |
CRC/timeout error. More... | |
#define | UHCI_STATUS_BITSTUFF 0x02 |
Bitstuff error. More... | |
#define | UHCI_FL_SPD 0x20 |
Short packet detect. More... | |
#define | UHCI_FL_CERR(count) ( (count) << 3 ) |
Error counter. More... | |
#define | UHCI_FL_CERR_MAX UHCI_FL_CERR ( 3 ) |
Error counter maximum value. More... | |
#define | UHCI_FL_LS 0x04 |
Low speed device. More... | |
#define | UHCI_FL_IOC 0x01 |
Interrupt on completion. More... | |
#define | UHCI_CONTROL_PID(pid) ( (pid) << 0 ) |
Packet ID. More... | |
#define | UHCI_CONTROL_PID_MASK UHCI_CONTROL_PID ( 0xff ) |
Packet ID mask. More... | |
#define | UHCI_CONTROL_DEVICE(address) ( (address) << 8 ) |
Device address. More... | |
#define | UHCI_CONTROL_ENDPOINT(address) ( (address) << 15 ) |
Endpoint address. More... | |
#define | UHCI_CONTROL_TOGGLE ( 1 << 19 ) |
Data toggle. More... | |
#define | UHCI_CONTROL_LEN(len) ( ( ( (len) - 1 ) & UHCI_LEN_MASK ) << 21 ) |
Data length. More... | |
#define | UHCI_DATA_PACKET(control) ( ! ( control & 0x04 ) ) |
Check for data packet. More... | |
#define | UHCI_SHORT_PACKET(control, actual) ( ( ( (control) >> 21 ) ^ (actual) ) & UHCI_LEN_MASK ) |
Check for short packet. More... | |
#define | UHCI_USBLEGSUP 0xc0 |
USB legacy support register (in PCI configuration space) More... | |
#define | UHCI_USBLEGSUP_DEFAULT 0x2000 |
USB legacy support default value. More... | |
#define | UHCI_RING_COUNT 16 |
Number of transfer descriptors in a ring. More... | |
#define | UHCI_STOP_MAX_WAIT_MS 100 |
Maximum time to wait for host controller to stop. More... | |
#define | UHCI_RESET_MAX_WAIT_MS 500 |
Maximum time to wait for reset to complete. More... | |
#define | UHCI_PORT_ENABLE_MAX_WAIT_MS 500 |
Maximum time to wait for a port to be enabled. More... | |
Functions | |
FILE_LICENCE (GPL2_OR_LATER_OR_UBDL) | |
static unsigned int | uhci_ring_fill (struct uhci_ring *ring) |
Calculate space used in transfer ring. More... | |
static unsigned int | uhci_ring_remaining (struct uhci_ring *ring) |
Calculate space remaining in transfer ring. More... | |
USB Universal Host Controller Interface (UHCI) driver.
Definition in file uhci.h.
#define UHCI_ALIGN 16 |
#define UHCI_PORTSC | ( | port | ) | ( 0x0e + ( (port) << 1 ) ) |
#define UHCI_PORTSC_CHANGE ( UHCI_PORTSC_CSC | UHCI_PORTSC_PEC ) |
#define UHCI_LINK_DEPTH_FIRST 0x00000004UL |
#define UHCI_ACTUAL_LEN | ( | actual | ) | ( ( (actual) + 1 ) & UHCI_LEN_MASK ) |
#define UHCI_FL_CERR_MAX UHCI_FL_CERR ( 3 ) |
#define UHCI_CONTROL_PID_MASK UHCI_CONTROL_PID ( 0xff ) |
#define UHCI_CONTROL_LEN | ( | len | ) | ( ( ( (len) - 1 ) & UHCI_LEN_MASK ) << 21 ) |
#define UHCI_SHORT_PACKET | ( | control, | |
actual | |||
) | ( ( ( (control) >> 21 ) ^ (actual) ) & UHCI_LEN_MASK ) |
#define UHCI_USBLEGSUP 0xc0 |
#define UHCI_USBLEGSUP_DEFAULT 0x2000 |
#define UHCI_RING_COUNT 16 |
#define UHCI_STOP_MAX_WAIT_MS 100 |
#define UHCI_RESET_MAX_WAIT_MS 500 |
#define UHCI_PORT_ENABLE_MAX_WAIT_MS 500 |
FILE_LICENCE | ( | GPL2_OR_LATER_OR_UBDL | ) |
|
inlinestatic |
Calculate space used in transfer ring.
ring | Transfer ring |
fill | Number of entries used |
Definition at line 267 of file uhci.h.
References assert(), uhci_ring::cons, fill, uhci_ring::prod, and UHCI_RING_COUNT.
Referenced by uhci_dequeue(), uhci_endpoint_close(), uhci_endpoint_poll(), uhci_enqueue(), uhci_restart(), uhci_ring_free(), and uhci_ring_remaining().
|
inlinestatic |
Calculate space remaining in transfer ring.
ring | Transfer ring |
remaining | Number of entries remaining |
Definition at line 282 of file uhci.h.
References fill, UHCI_RING_COUNT, and uhci_ring_fill().
Referenced by uhci_enqueue().