USB - Still non working, but fiddling with it
[tpg/acess2.git] / Modules / USB / Core / uhci.h
1 /*
2  * AcessOS Version 1
3  * USB Stack
4  * - Universal Host Controller Interface
5  */
6 #ifndef _UHCI_H_
7 #define _UHCI_H_
8
9 // === TYPES ===
10 typedef struct sUHCI_Controller tUHCI_Controller;
11 typedef struct sUHCI_TD tUHCI_TD;
12 typedef struct sUHCI_QH tUHCI_QH;
13
14 // === STRUCTURES ===
15 struct sUHCI_Controller
16 {
17         /**
18          * \brief PCI Device ID
19          */
20         Uint16  PciId;
21         
22         /**
23          * \brief IO Base Address
24          */
25         Uint16  IOBase;
26         
27         /**
28          * \brief IRQ Number assigned to the device
29          */
30          int    IRQNum;
31         
32         /**
33          * \brief Frame list
34          * 
35          * 31:4 - Frame Pointer
36          * 3:2 - Reserved
37          * 1 - QH/TD Selector
38          * 0 - Terminate (Empty Pointer)
39          */
40         Uint32  *FrameList;
41         
42         /**
43          * \brief Physical Address of the Frame List
44          */
45         tPAddr  PhysFrameList;
46 };
47
48 struct sUHCI_TD
49 {
50         /**
51          * \brief Next Entry in list
52          * 
53          * 31:4 - Address
54          * 3 - Reserved
55          * 2 - Depth/Breadth Select
56          * 1 - QH/TD Select
57          * 0 - Terminate (Last in List)
58          */
59         Uint32  Link;
60         
61         /**
62          * \brief Control and Status Field
63          * 
64          * 31:30 - Reserved
65          * 29 - Short Packet Detect (Input Only)
66          * 28:27 - Number of Errors Allowed
67          * 26 - Low Speed Device (Communicating with a low speed device)
68          * 25 - Isynchonious Select
69          * 24 - Interrupt on Completion (IOC)
70          * 23:16 - Status
71          *     23 - Active
72          *     22 - Stalled
73          *     21 - Data Buffer Error
74          *     20 - Babble Detected
75          *     19 - NAK Detected
76          *     18 - CRC/Timout Error
77          *     17 - Bitstuff Error
78          *     16 - Reserved
79          * 15:11 - Reserved
80          * 10:0 - Actual Length (Number of bytes transfered)
81          */
82         Uint32  Control;
83         
84         /**
85          * \brief Packet Header
86          * 
87          * 31:21 - Maximum Length (0=1, Max 0x4FF, 0x7FF=0)
88          * 20 - Reserved
89          * 19 - Data Toggle
90          * 18:15 - Endpoint
91          * 14:8 - Device Address
92          * 7:0 - PID (Packet Identifcation) - Only 96, E1, 2D allowed
93          */
94         Uint32  Token;
95         
96         /**
97          * \brief Pointer to the data to send
98          */
99         Uint32  BufferPointer;
100 };
101
102 struct sUHCI_QH
103 {
104         /**
105          * \brief Next Entry in list
106          * 
107          * 31:4 - Address
108          * 3:2 - Reserved
109          * 1 - QH/TD Select
110          * 0 - Terminate (Last in List)
111          */
112         Uint32  Next;
113
114         
115         /**
116          * \brief Next Entry in list
117          * 
118          * 31:4 - Address
119          * 3:2 - Reserved
120          * 1 - QH/TD Select
121          * 0 - Terminate (Last in List)
122          */
123         Uint32  Child;
124 };
125
126 // === ENUMERATIONS ===
127 enum eUHCI_IOPorts {
128         /**
129          * \brief USB Command Register
130          * 
131          * 15:8 - Reserved
132          * 7 - Maximum Packet Size selector (1: 64 bytes, 0: 32 bytes)
133          * 6 - Configure Flag (No Hardware Effect)
134          * 5 - Software Debug (Don't think it will be needed)
135          * 4 - Force Global Resume
136          * 3 - Enter Global Suspend Mode
137          * 2 - Global Reset (Resets all devices on the bus)
138          * 1 - Host Controller Reset (Reset just the controller)
139          * 0 - Run/Stop
140          */
141         USBCMD  = 0x00,
142         /**
143          * \brief USB Status Register
144          * 
145          * 15:6 - Reserved
146          * 5 - HC Halted, set to 1 when USBCMD:RS is set to 0
147          * 4 - Host Controller Process Error (Errors related to the bus)
148          * 3 - Host System Error (Errors related to the OS/PCI Bus)
149          * 2 - Resume Detect (Set if a RESUME command is sent to the Controller)
150          * 1 - USB Error Interrupt
151          * 0 - USB Interrupts (Set if a transaction with the IOC bit set is completed)
152          */
153         USBSTS  = 0x02,
154         /**
155          * \brief USB Interrupt Enable Register
156          * 
157          * 15:4 - Reserved
158          * 3 - Short Packet Interrupt Enable
159          * 2 - Interrupt on Complete (IOC) Enable
160          * 1 - Resume Interrupt Enable
161          * 0 - Timout / CRC Error Interrupt Enable
162          */
163         USBINTR = 0x04,
164         /**
165          * \brief Frame Number (Index into the Frame List)
166          * 
167          * 15:11 - Reserved
168          * 10:0 - Index (Incremented each approx 1ms)
169          */
170         FRNUM   = 0x06,
171         /**
172          * \brief Frame List Base Address
173          * 
174          * 31:12 - Pysical Address >> 12
175          * 11:0 - Reserved (Set to Zero)
176          */
177         FLBASEADD = 0x08,       // 32-bit
178         /**
179          * \brief Start-of-frame Modify Register
180          * \note 8-bits only
181          * 
182          * Sets the size of a frame
183          * Frequency = (11936+n)/12000 kHz
184          * 
185          * 7 - Reserved
186          * 6:0 -
187          */
188         SOFMOD = 0x0C,  // 8bit
189         /**
190          * \brief Port Status and Controll Register (Port 1)
191          * 
192          * 15:13 - Reserved
193          * 12 - Suspend
194          * 11:10 - Reserved
195          * 9 - Port Reset
196          * 8 - Low Speed Device Attached
197          * 5:4 - Line Status
198          * 3 - Port Enable/Disable Change - Used for detecting device removal
199          * 2 - Port Enable/Disable
200          * 1 - Connect Status Change
201          * 0 - Current Connect Status
202          */
203         PORTSC1 = 0x10,
204         /**
205          * \brief Port Status and Controll Register (Port 2)
206          * 
207          * See ::PORTSC1
208          */
209         PORTSC2 = 0x12
210 };
211
212 #endif

UCC git Repository :: git.ucc.asn.au