Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


imported SEABIOS source tree
[palacios.git] / bios / seabios / src / usb-uhci.h
1 #ifndef __USB_UHCI_H
2 #define __USB_UHCI_H
3
4 // usb-uhci.c
5 void uhci_init(struct pci_device *pci, int busid);
6 struct usb_pipe;
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);
15
16
17 /****************************************************************
18  * uhci structs and flags
19  ****************************************************************/
20
21 /* USB port status and control registers */
22 #define USBPORTSC1      16
23 #define USBPORTSC2      18
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 */
35
36 /* Legacy support register */
37 #define USBLEGSUP               0xc0
38 #define   USBLEGSUP_RWC         0x8f00  /* the R/WC bits */
39
40 /* Command register */
41 #define USBCMD          0
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) */
50
51 /* Status register */
52 #define USBSTS          2
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 */
60
61 /* Interrupt enable register */
62 #define USBINTR         4
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 */
67
68 #define USBFRNUM        6
69 #define USBFLBASEADD    8
70 #define USBSOF          12
71 #define   USBSOF_DEFAULT        64      /* Frame length is exactly 1 ms */
72
73 struct uhci_framelist {
74     u32 links[1024];
75 } PACKED;
76
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 */
91
92 #define TD_CTRL_ANY_ERROR       (TD_CTRL_STALLED | TD_CTRL_DBUFERR | \
93                                  TD_CTRL_BABBLE | TD_CTRL_CRCTIMEO | \
94                                  TD_CTRL_BITSTUFF)
95 #define uhci_maxerr(err)                ((err) << TD_CTRL_C_ERR_SHIFT)
96
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
103
104 #define uhci_explen(len)        ((((len) - 1) & TD_TOKEN_EXPLEN_MASK) << \
105                                         TD_TOKEN_EXPLEN_SHIFT)
106
107 #define uhci_expected_length(token) ((((token) >> TD_TOKEN_EXPLEN_SHIFT) + \
108                                         1) & TD_TOKEN_EXPLEN_MASK)
109
110 struct uhci_td {
111     u32 link;
112     u32 status;
113     u32 token;
114     void *buffer;
115 } PACKED;
116
117 struct uhci_qh {
118     u32 link;
119     u32 element;
120 } PACKED;
121
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
127
128 #endif // usb-uhci.h