Change USB code to use barrelfish_usleep provided by lib_usb_wait instead of USB_WAIT...
authorMoritz Hoffmann <moritzho@inf.ethz.ch>
Mon, 15 Dec 2014 15:59:49 +0000 (16:59 +0100)
committerMoritz Hoffmann <moritzho@inf.ethz.ch>
Mon, 15 Dec 2014 15:59:49 +0000 (16:59 +0100)
include/barrelfish/deferred.h
include/usb/usb.h
usr/drivers/usb/usb_manager/controller/ehci/usb_ehci.c
usr/drivers/usb/usb_manager/controller/ehci/usb_ehci_root_hub.c
usr/drivers/usb/usb_manager/hub/usb_hub.c
usr/drivers/usb/usb_manager/hub/usb_hub_request.c
usr/drivers/usb/usb_manager/usb_device.c
usr/drivers/usb/usb_manager/usb_request.c

index ffa4e21..2b74c05 100644 (file)
@@ -18,6 +18,8 @@
 #include <sys/cdefs.h>
 #include <barrelfish/waitset.h>
 
+#include <barrelfish_kpi/dispatcher_handle.h>
+
 __BEGIN_DECLS
 
 struct deferred_event {
index 9406350..fd8d205 100644 (file)
@@ -17,6 +17,8 @@
 #include <usb/usb_error.h>\r
 #include <usb/usb_descriptor.h>\r
 \r
+#include <barrelfish/deferred.h>\r
+\r
 /// definition for the USB\r
 #define USB_MANAGER_SERVICE "usb_manager_service_name"\r
 \r
@@ -121,10 +123,6 @@ typedef struct usb_status usb_status_t;
 #define USB_DELAY_WAIT 10\r
 #define USB_DELAY_RECOVERY 10\r
 \r
-#define USB_WAIT(ms) \\r
-    for (uint32_t wait_i = 0; wait_i < 2*(ms); wait_i++) { printf("%c", 0x20); printf("%c", 0x08); };\r
-\r
-\r
 /*\r
  * debug message control\r
  */\r
@@ -167,6 +165,16 @@ typedef struct usb_status usb_status_t;
 //#define USB_DEBUG_HID(x...) debug_printf(x)\r
 #define USB_DEBUG_HID(x...)\r
 \r
+/*\r
+ * Wait a specific amount of milliseconds. This is a replacement for the USB_WAIT macro.\r
+ *\r
+ * \param ms Milliseconds to wait\r
+ *\r
+ * \return the error value from barrelfish_usleep\r
+ */\r
+static inline errval_t lib_usb_wait(uint32_t ms) {\r
+    return barrelfish_usleep(1000 * ms);\r
+}\r
 \r
 usb_error_t usb_lib_init(uint8_t init_config);\r
 \r
index 1cf80b6..741d808 100644 (file)
@@ -39,7 +39,7 @@ usb_error_t usb_ehci_hc_reset(usb_ehci_hc_t *hc)
     ehci_usbcmd_hcr_wrf(&hc->ehci_base, 1);\r
 \r
     /* wait some time to let rest complete */\r
-    USB_WAIT(200);\r
+    lib_usb_wait(200);\r
 \r
     for (uint8_t i = 0; i < 10; i++) {\r
         if (ehci_usbcmd_hcr_rdf(&hc->ehci_base)) {\r
@@ -47,7 +47,7 @@ usb_error_t usb_ehci_hc_reset(usb_ehci_hc_t *hc)
              * the host controller sets this bit to 0 if the rest is complete\r
              * therefore we have to wait some more time\r
              */\r
-            USB_WAIT(200);\r
+            lib_usb_wait(200);\r
             continue;\r
         }\r
     }\r
@@ -110,7 +110,7 @@ static usb_error_t usb_ehci_hc_halt(usb_ehci_hc_t *hc)
     /*\r
      * Wait some time before start checking\r
      */\r
-    USB_WAIT(200);\r
+    lib_usb_wait(200);\r
 \r
     /* wait until the reset is done */\r
     for (uint8_t i = 0; i < 10; i++) {\r
@@ -118,7 +118,7 @@ static usb_error_t usb_ehci_hc_halt(usb_ehci_hc_t *hc)
             /* all activity halted, return */\r
             return (USB_ERR_OK);\r
         }\r
-        USB_WAIT(200);\r
+        lib_usb_wait(200);\r
     }\r
 \r
     /* check if halted */\r
@@ -173,12 +173,12 @@ usb_error_t usb_ehci_initialize_controller(usb_ehci_hc_t *hc)
     ehci_configflag_cf_wrf(&hc->ehci_base, 1);\r
 \r
     /* wait till the HC is up and running */\r
-    USB_WAIT(200);\r
+    lib_usb_wait(200);\r
     for (uint32_t i = 0; i < 10; i++) {\r
         if (!ehci_usbsts_hch_rdf(&hc->ehci_base)) {\r
             break;\r
         }\r
-        USB_WAIT(200);\r
+        lib_usb_wait(200);\r
     }\r
 \r
 \r
index b59d85b..39cd64d 100644 (file)
@@ -341,12 +341,12 @@ usb_error_t usb_ehci_roothub_exec(struct usb_device *device,
                             && (!ehci_portsc_fpr_rdf(&hc->ehci_base, req->wIndex))) {
                         ehci_portsc_fpr_wrf(&hc->ehci_base, req->wIndex, 1);
                     }
-                    USB_WAIT(20);
+                    lib_usb_wait(20);
 
                     ehci_portsc_sus_wrf(&hc->ehci_base, req->wIndex, 0);
                     ehci_portsc_fpr_wrf(&hc->ehci_base, req->wIndex, 0);
                     ehci_portsc_ls_wrf(&hc->ehci_base, req->wIndex, 0x3);
-                    USB_WAIT(4);
+                    lib_usb_wait(4);
                     break;
                 case USB_HUB_FEATURE_PORT_POWER:
                     ehci_portsc_pp_wrf(&hc->ehci_base, req->wIndex, 0);
@@ -451,11 +451,11 @@ usb_error_t usb_ehci_roothub_exec(struct usb_device *device,
                     }
                     /* initiate reset sequence */
                     ehci_portsc_pr_wrf(&hc->ehci_base, req->wIndex, 1);
-                    USB_WAIT(200);
+                    lib_usb_wait(200);
 
                     /* clear the reset */
                     ehci_portsc_pr_wrf(&hc->ehci_base, req->wIndex, 0);
-                    USB_WAIT(200);
+                    lib_usb_wait(200);
 
                     if (ehci_portsc_pr_rdf(&hc->ehci_base, req->wIndex)) {
                         debug_printf("exec: timeout while resetting port\n");
index f0a3945..200a696 100644 (file)
@@ -154,7 +154,7 @@ static usb_error_t usb_hub_reattach_port(struct usb_hub *hub, uint8_t portno)
                 USB_DEBUG("Port %u is suspended. Wake up.\n", portno);\r
                 err = usb_hub_clear_port_feature(hub->device,\r
                         USB_HUB_FEATURE_PORT_SUSPEND, portno);\r
-                USB_WAIT(USB_DELAY_PORT_POWERUP);\r
+                lib_usb_wait(USB_DELAY_PORT_POWERUP);\r
             }\r
 \r
             err = usb_hub_reset_port(hub->device, portno);\r
@@ -402,7 +402,7 @@ usb_error_t usb_hub_init(struct usb_device *hub_device)
         return (err);\r
     }\r
 \r
-    USB_WAIT(USB_DELAY_PORT_POWERUP);\r
+    lib_usb_wait(USB_DELAY_PORT_POWERUP);\r
 \r
     uint8_t portno = 0;\r
     uint8_t removable = 0;\r
@@ -446,7 +446,7 @@ usb_error_t usb_hub_init(struct usb_device *hub_device)
         }\r
 \r
         /* wait for powerdelay ms till the power power is good  */\r
-        USB_WAIT(powerdelay);\r
+        lib_usb_wait(powerdelay);\r
     }\r
 \r
     /* start the interrupt transfer */\r
index e93dd15..f7c23ef 100644 (file)
@@ -239,7 +239,7 @@ usb_error_t usb_hub_reset_port(struct usb_device *hub, uint8_t port)
 
     /* wait till the reset sequence is over */
     while (1) {
-        USB_WAIT(USB_DELAY_PORT_RESET);
+        lib_usb_wait(USB_DELAY_PORT_RESET);
 
         timeout += USB_DELAY_PORT_RESET;
 
@@ -291,7 +291,7 @@ usb_error_t usb_hub_reset_port(struct usb_device *hub, uint8_t port)
     }
 
     /* give the device time to recover from reset */
-    USB_WAIT(USB_DELAY_PORT_RECOVERY);
+    lib_usb_wait(USB_DELAY_PORT_RECOVERY);
 
     USB_DEBUG_TR_RETURN;
     return (err);
index 54f58f3..55905ea 100644 (file)
@@ -550,7 +550,7 @@ struct usb_device *usb_device_alloc(struct usb_host_controller *hc,
     }\r
 \r
     /* wait till the address has settled */\r
-    USB_WAIT(USB_DELAY_SET_ADDRESS*5);\r
+    lib_usb_wait(USB_DELAY_SET_ADDRESS);\r
 \r
     /*\r
      * this check has to be done, since there may be a controller specific\r
@@ -712,7 +712,7 @@ void usb_device_free(struct usb_device * device, uint8_t flag)
 \r
     uint8_t timeout = 0;\r
     while (!usb_device_detached) {\r
-        USB_WAIT(10);\r
+        lib_usb_wait(10);\r
         if (timeout > 5) {\r
             break;\r
         }\r
index 99391b8..e5a62fe 100644 (file)
@@ -222,7 +222,7 @@ usb_error_t usb_handle_request(struct usb_device *device, uint16_t flags,
 
         /* wait till completed... */
         while (!usb_transfer_completed(xfer)) {
-            USB_WAIT(10);
+            lib_usb_wait(10);
             //thread_yield();
         }