Fix the USB code that was destroying my shell.
[barrelfish] / include / usb / usb.h
1 /**\r
2  * \brief this file contains general declarations for the USB\r
3  */\r
4 \r
5 /* Copyright (c) 2007-2013 ETH Zurich.\r
6  * All rights reserved.\r
7  *\r
8  * This file is distributed under the terms in the attached LICENSE file.\r
9  * If you do not find this file, copies can be found by writing to:\r
10  * ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.\r
11  */\r
12 \r
13 #ifndef LIBUSB_USB_H_\r
14 #define LIBUSB_USB_H_\r
15 \r
16 #include <stdio.h>\r
17 #include <usb/usb_error.h>\r
18 #include <usb/usb_descriptor.h>\r
19 \r
20 /// definition for the USB\r
21 #define USB_MANAGER_SERVICE "usb_manager_service_name"\r
22 \r
23 /**\r
24  * enumeration of the differente USB modes.\r
25  * Currently only the HOST mode is supported\r
26  */\r
27 typedef enum usb_mode  {\r
28     USB_MODE_HOST,\r
29     USB_MODE_DEVICE,\r
30     USB_MODE_DUAL\r
31 } usb_mode_t;\r
32 #define USB_MODE_MAX    (USB_MODE_DUAL+1)\r
33 \r
34 \r
35 /**\r
36  * The USB device speed enumeration describes all possible USB speed\r
37  * settings for a device.\r
38  */\r
39 typedef enum usb_speed {\r
40     USB_SPEED_VARIABLE,\r
41     USB_SPEED_LOW,\r
42     USB_SPEED_FULL,\r
43     USB_SPEED_HIGH,\r
44     USB_SPEED_SUPER,\r
45 } usb_speed_t;\r
46 \r
47 #define USB_SPEED_MAX (USB_SPEED_SUPER+1)\r
48 \r
49 /// typedef for the host controller versions\r
50 typedef enum usb_hc_version {\r
51     USB_UHCI=0x0100,\r
52     USB_OHCI=0x0110,\r
53     USB_EHCI=0x0200,\r
54     USB_XHCI=0x0300\r
55 } usb_hc_version_t;\r
56 \r
57 /// typedef for the different USB revisions\r
58 typedef enum usb_revision {\r
59     USB_REV_UNKNOWN,\r
60     USB_REV_PRE_1_0,\r
61     USB_REV_1_0,\r
62     USB_REV_1_1,\r
63     USB_REV_2_0,\r
64     USB_REV_2_5,\r
65     USB_REV_3_0\r
66 } usb_revision_t;\r
67 \r
68 /// typedef for the different usb transfer / endpoint types\r
69 typedef enum usb_type {\r
70     USB_TYPE_CTRL = 0,\r
71     USB_TYPE_ISOC,\r
72     USB_TYPE_BULK,\r
73     USB_TYPE_INTR\r
74 } usb_type_t;\r
75 \r
76 \r
77 /// typedef for the different power modes of an usb device\r
78 typedef enum usb_power {\r
79     USB_POWER_MODE_OFF = 0,\r
80     USB_POWER_MODE_ON = 1,\r
81     USB_POWER_MODE_SAVE = 2,\r
82     USB_POWER_MODE_SUSPEND = 3,\r
83     USB_POWER_MODE_RESUME = 4\r
84 } usb_power_t;\r
85 \r
86 /// the maximum power consumption in mA\r
87 #define USB_POWER_MAX 500\r
88 \r
89 /// the minimum power requirements in mA\r
90 #define USB_POWER_MIN 100\r
91 \r
92 /// the USB physical address type\r
93 typedef volatile uintptr_t usb_paddr_t;\r
94 \r
95 /// definition for the default configuration value\r
96 #define USB_CONFIGURATION_DEFAULT 1\r
97 \r
98 /// definition if the USB\r
99 #define USB_CONFIGURATION_UNCONFIGURED 0xFF\r
100 \r
101 /// generic usb status\r
102 struct usb_status {\r
103     uint16_t wStatus;\r
104 };\r
105 typedef struct usb_status usb_status_t;\r
106 \r
107 #define USB_STATUS_SELF_POWERED     0x0001;\r
108 #define USB_STATUS_REMOTE_WAKEUP    0x0002;\r
109 #define USB_STATUS_EP_HALT          0x0001;\r
110 \r
111 /*\r
112  * Specific delays\r
113  */\r
114 #define USB_DELAY_PORT_RESET 10\r
115 #define USB_DELAY_PORT_ROOT_RESET 50\r
116 #define USB_DELAY_PORT_RECOVERY 10\r
117 #define USB_DELAY_PORT_POWERUP 100\r
118 #define USB_DELAY_PORT_RESUME 20\r
119 #define USB_DELAY_SET_ADDRESS 2\r
120 #define USB_DELAY_RESUME 100\r
121 #define USB_DELAY_WAIT 10\r
122 #define USB_DELAY_RECOVERY 10\r
123 \r
124 #define USB_WAIT(ms) \\r
125     for (uint32_t wait_i = 0; wait_i < 2*(ms); wait_i++) { printf("%c", 0x20); printf("%c", 0x08); };\r
126 \r
127 \r
128 /*\r
129  * debug message control\r
130  */\r
131 \r
132 #define USB_DEBUG(x...) debug_printf(x)\r
133 //#define USB_DEBUG(x...)\r
134 \r
135 //#define USB_DEBUG_XFER(x...) USB_DEBUG(x)\r
136 #define USB_DEBUG_XFER(x...)\r
137 \r
138 #define USB_DEBUG_HC(x...) USB_DEBUG(x)\r
139 //#define USB_DEBUG_HC(x...)\r
140 \r
141 //#define USB_DEBUG_XFER_HC(x...) USB_DEBUG(x)\r
142 #define USB_DEBUG_XFER_HC(x...)\r
143 \r
144 //#define USB_DEBUG_REQ(x...) USB_DEBUG(x)\r
145 #define USB_DEBUG_REQ(x...)\r
146 \r
147 //#define USB_DEBUG_DEV(x...) USB_DEBUG(x)\r
148 #define USB_DEBUG_DEV(x...)\r
149 \r
150 //#define USB_DEBUG_TR_ENTER USB_DEBUG(">> %s()\n",  __func__)\r
151 #define USB_DEBUG_TR_ENTER\r
152 \r
153 //#define USB_DEBUG_TR_RETURN USB_DEBUG("<< %s() return\n", __func__)\r
154 #define USB_DEBUG_TR_RETURN\r
155 \r
156 #define USB_DEBUG_TR(x...) USB_DEBUG(x)\r
157 \r
158 #define USB_DEBUG_DRIVER(x...) USB_DEBUG(x)\r
159 //#define USB_DEBUG_DRIVER(x...)\r
160 \r
161 //#define USB_DEBUG_MEM(x...) USB_DEBUG(x)\r
162 #define USB_DEBUG_MEM(x...)\r
163 \r
164 #define USB_DEBUG_IDC(x...)\r
165 //#define USB_DEBUG_IDC(x...) USB_DEBUG(x)\r
166 \r
167 //#define USB_DEBUG_HID(x...) debug_printf(x)\r
168 #define USB_DEBUG_HID(x...)\r
169 \r
170 \r
171 usb_error_t usb_lib_init(uint8_t init_config);\r
172 \r
173 #endif\r