5 void uhci_init(struct pci_device *pci, int busid);
7 void uhci_free_pipe(struct usb_pipe *p);
8 struct usb_pipe *uhci_alloc_control_pipe(struct usb_pipe *dummy);
9 int uhci_control(struct usb_pipe *p, int dir, const void *cmd, int cmdsize
10 , void *data, int datasize);
11 struct usb_pipe *uhci_alloc_bulk_pipe(struct usb_pipe *dummy);
12 int uhci_send_bulk(struct usb_pipe *p, int dir, void *data, int datasize);
13 struct usb_pipe *uhci_alloc_intr_pipe(struct usb_pipe *dummy, int frameexp);
14 int uhci_poll_intr(struct usb_pipe *p, void *data);
17 /****************************************************************
18 * uhci structs and flags
19 ****************************************************************/
21 /* USB port status and control registers */
24 #define USBPORTSC_CCS 0x0001 /* Current Connect Status
25 * ("device present") */
26 #define USBPORTSC_CSC 0x0002 /* Connect Status Change */
27 #define USBPORTSC_PE 0x0004 /* Port Enable */
28 #define USBPORTSC_PEC 0x0008 /* Port Enable Change */
29 #define USBPORTSC_DPLUS 0x0010 /* D+ high (line status) */
30 #define USBPORTSC_DMINUS 0x0020 /* D- high (line status) */
31 #define USBPORTSC_RD 0x0040 /* Resume Detect */
32 #define USBPORTSC_RES1 0x0080 /* reserved, always 1 */
33 #define USBPORTSC_LSDA 0x0100 /* Low Speed Device Attached */
34 #define USBPORTSC_PR 0x0200 /* Port Reset */
36 /* Legacy support register */
37 #define USBLEGSUP 0xc0
38 #define USBLEGSUP_RWC 0x8f00 /* the R/WC bits */
40 /* Command register */
42 #define USBCMD_RS 0x0001 /* Run/Stop */
43 #define USBCMD_HCRESET 0x0002 /* Host reset */
44 #define USBCMD_GRESET 0x0004 /* Global reset */
45 #define USBCMD_EGSM 0x0008 /* Global Suspend Mode */
46 #define USBCMD_FGR 0x0010 /* Force Global Resume */
47 #define USBCMD_SWDBG 0x0020 /* SW Debug mode */
48 #define USBCMD_CF 0x0040 /* Config Flag (sw only) */
49 #define USBCMD_MAXP 0x0080 /* Max Packet (0 = 32, 1 = 64) */
53 #define USBSTS_USBINT 0x0001 /* Interrupt due to IOC */
54 #define USBSTS_ERROR 0x0002 /* Interrupt due to error */
55 #define USBSTS_RD 0x0004 /* Resume Detect */
56 #define USBSTS_HSE 0x0008 /* Host System Error: PCI problems */
57 #define USBSTS_HCPE 0x0010 /* Host Controller Process Error:
58 * the schedule is buggy */
59 #define USBSTS_HCH 0x0020 /* HC Halted */
61 /* Interrupt enable register */
63 #define USBINTR_TIMEOUT 0x0001 /* Timeout/CRC error enable */
64 #define USBINTR_RESUME 0x0002 /* Resume interrupt enable */
65 #define USBINTR_IOC 0x0004 /* Interrupt On Complete enable */
66 #define USBINTR_SP 0x0008 /* Short packet interrupt enable */
69 #define USBFLBASEADD 8
71 #define USBSOF_DEFAULT 64 /* Frame length is exactly 1 ms */
73 struct uhci_framelist {
77 #define TD_CTRL_SPD (1 << 29) /* Short Packet Detect */
78 #define TD_CTRL_C_ERR_MASK (3 << 27) /* Error Counter bits */
79 #define TD_CTRL_C_ERR_SHIFT 27
80 #define TD_CTRL_LS (1 << 26) /* Low Speed Device */
81 #define TD_CTRL_IOS (1 << 25) /* Isochronous Select */
82 #define TD_CTRL_IOC (1 << 24) /* Interrupt on Complete */
83 #define TD_CTRL_ACTIVE (1 << 23) /* TD Active */
84 #define TD_CTRL_STALLED (1 << 22) /* TD Stalled */
85 #define TD_CTRL_DBUFERR (1 << 21) /* Data Buffer Error */
86 #define TD_CTRL_BABBLE (1 << 20) /* Babble Detected */
87 #define TD_CTRL_NAK (1 << 19) /* NAK Received */
88 #define TD_CTRL_CRCTIMEO (1 << 18) /* CRC/Time Out Error */
89 #define TD_CTRL_BITSTUFF (1 << 17) /* Bit Stuff Error */
90 #define TD_CTRL_ACTLEN_MASK 0x7FF /* actual length, encoded as n - 1 */
92 #define TD_CTRL_ANY_ERROR (TD_CTRL_STALLED | TD_CTRL_DBUFERR | \
93 TD_CTRL_BABBLE | TD_CTRL_CRCTIMEO | \
95 #define uhci_maxerr(err) ((err) << TD_CTRL_C_ERR_SHIFT)
97 #define TD_TOKEN_DEVADDR_SHIFT 8
98 #define TD_TOKEN_TOGGLE_SHIFT 19
99 #define TD_TOKEN_TOGGLE (1 << 19)
100 #define TD_TOKEN_EXPLEN_SHIFT 21
101 #define TD_TOKEN_EXPLEN_MASK 0x7FF /* expected length, encoded as n-1 */
102 #define TD_TOKEN_PID_MASK 0xFF
104 #define uhci_explen(len) ((((len) - 1) & TD_TOKEN_EXPLEN_MASK) << \
105 TD_TOKEN_EXPLEN_SHIFT)
107 #define uhci_expected_length(token) ((((token) >> TD_TOKEN_EXPLEN_SHIFT) + \
108 1) & TD_TOKEN_EXPLEN_MASK)
122 #define UHCI_PTR_BITS 0x000F
123 #define UHCI_PTR_TERM 0x0001
124 #define UHCI_PTR_QH 0x0002
125 #define UHCI_PTR_DEPTH 0x0004
126 #define UHCI_PTR_BREADTH 0x0000