Index: uspace/drv/uhci/iface.c
===================================================================
--- uspace/drv/uhci/iface.c	(revision de0e6b3b72cdfc7d29d8455f440dcfb4fc2a9f1d)
+++ uspace/drv/uhci/iface.c	(revision d93ff502de7b748ddb03959bc2f8c02a8be151d7)
@@ -31,44 +31,4 @@
 #include "iface.h"
 #include "uhci.h"
-/*
-static int enqueue_transfer_out(device_t *dev,
-    usb_target_t target, usb_transfer_type_t transfer_type,
-    void *buffer, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-	printf(NAME ": transfer OUT [%d.%d (%s); %zu]\n",
-	    target.address, target.endpoint,
-	    usb_str_transfer_type(transfer_type),
-	    size);
-
-	return ENOTSUP;
-}
-
-static int enqueue_transfer_setup(device_t *dev,
-    usb_target_t target, usb_transfer_type_t transfer_type,
-    void *buffer, size_t size,
-    usbhc_iface_transfer_out_callback_t callback, void *arg)
-{
-	printf(NAME ": transfer SETUP [%d.%d (%s); %zu]\n",
-	    target.address, target.endpoint,
-	    usb_str_transfer_type(transfer_type),
-	    size);
-
-	return ENOTSUP;
-}
-
-static int enqueue_transfer_in(device_t *dev,
-    usb_target_t target, usb_transfer_type_t transfer_type,
-    void *buffer, size_t size,
-    usbhc_iface_transfer_in_callback_t callback, void *arg)
-{
-	printf(NAME ": transfer IN [%d.%d (%s); %zu]\n",
-	    target.address, target.endpoint,
-	    usb_str_transfer_type(transfer_type),
-	    size);
-
-	return ENOTSUP;
-}
-*/
 
 static int get_address(device_t *dev, devman_handle_t handle,
@@ -82,6 +42,6 @@
     usbhc_iface_transfer_out_callback_t callback, void *arg)
 {
-	return uhci_out(dev, target, USB_TRANSFER_INTERRUPT,
-	    data, size, callback, arg);
+	return uhci_transfer(dev, target, USB_TRANSFER_INTERRUPT, 0, USB_PID_OUT,
+		data, size, callback, NULL, arg);
 }
 /*----------------------------------------------------------------------------*/
@@ -90,6 +50,6 @@
     usbhc_iface_transfer_in_callback_t callback, void *arg)
 {
-	return uhci_in(dev, target, USB_TRANSFER_INTERRUPT,
-	    data, size, callback, arg);
+	return uhci_transfer(dev, target, USB_TRANSFER_INTERRUPT, 0, USB_PID_IN,
+		data, size, NULL, callback, arg);
 }
 /*----------------------------------------------------------------------------*/
@@ -98,6 +58,6 @@
     usbhc_iface_transfer_out_callback_t callback, void *arg)
 {
-	return uhci_setup(dev, target, USB_TRANSFER_CONTROL,
-	    data, size, callback, arg);
+	return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 0, USB_PID_SETUP,
+		data, size, callback, NULL, arg);
 }
 /*----------------------------------------------------------------------------*/
@@ -106,6 +66,6 @@
     usbhc_iface_transfer_out_callback_t callback, void *arg)
 {
-	return uhci_out(dev, target, USB_TRANSFER_CONTROL,
-	    data, size, callback, arg);
+	return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 1, USB_PID_OUT,
+		data, size, callback, NULL, arg);
 }
 /*----------------------------------------------------------------------------*/
@@ -113,6 +73,6 @@
     usbhc_iface_transfer_in_callback_t callback, void *arg)
 {
-	return uhci_in(dev, target, USB_TRANSFER_CONTROL,
-	    NULL, 0, callback, arg);
+	return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 0, USB_PID_IN,
+		NULL, 0, NULL, callback, arg);
 }
 /*----------------------------------------------------------------------------*/
@@ -121,6 +81,6 @@
     usbhc_iface_transfer_out_callback_t callback, void *arg)
 {
-	return uhci_setup(dev, target, USB_TRANSFER_CONTROL,
-	    data, size, callback, arg);
+	return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 0, USB_PID_SETUP,
+		data, size, callback, NULL, arg);
 }
 /*----------------------------------------------------------------------------*/
@@ -129,6 +89,6 @@
     usbhc_iface_transfer_in_callback_t callback, void *arg)
 {
-	return uhci_in(dev, target, USB_TRANSFER_CONTROL,
-	    data, size, callback, arg);
+	return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 1, USB_PID_IN,
+		data, size, NULL, callback, arg);
 }
 /*----------------------------------------------------------------------------*/
@@ -136,6 +96,6 @@
     usbhc_iface_transfer_out_callback_t callback, void *arg)
 {
-	return uhci_out(dev, target, USB_TRANSFER_CONTROL,
-	    NULL, 0, callback, arg);
+	return uhci_transfer(dev, target, USB_TRANSFER_CONTROL, 0, USB_PID_OUT,
+		NULL, 0, callback, NULL, arg);
 }
 
Index: uspace/drv/uhci/uhci.c
===================================================================
--- uspace/drv/uhci/uhci.c	(revision de0e6b3b72cdfc7d29d8455f440dcfb4fc2a9f1d)
+++ uspace/drv/uhci/uhci.c	(revision d93ff502de7b748ddb03959bc2f8c02a8be151d7)
@@ -11,13 +11,4 @@
 static int uhci_init_transfer_lists(transfer_list_t list[]);
 static int uhci_clean_finished(void *arg);
-static inline int uhci_add_transfer(
-  device_t *dev,
-  usb_target_t target,
-  usb_transfer_type_t transfer_type,
-  usb_packet_id pid,
-  void *buffer, size_t size,
-  usbhc_iface_transfer_out_callback_t callback_out,
-  usbhc_iface_transfer_in_callback_t callback_in,
-  void *arg );
 
 int uhci_init(device_t *device, void *regs)
@@ -36,5 +27,5 @@
 
 	/* create instance */
-	uhci_t *instance = malloc( sizeof(uhci_t) );
+	uhci_t *instance = malloc(sizeof(uhci_t));
 	int ret = instance ? EOK : ENOMEM;
 	CHECK_RET_FREE_INSTANCE("Failed to allocate uhci driver instance.\n");
@@ -44,4 +35,5 @@
 	/* init address keeper(libusb) */
 	usb_address_keeping_init(&instance->address_manager, USB11_ADDRESS_MAX);
+	uhci_print_verbose("Initialized address manager.\n");
 
 	/* allow access to hc control registers */
@@ -50,8 +42,10 @@
 	CHECK_RET_FREE_INSTANCE("Failed to gain access to registers at %p.\n", io);
 	instance->registers = io;
+	uhci_print_verbose("Device registers accessible.\n");
 
 	/* init transfer lists */
 	ret = uhci_init_transfer_lists(instance->transfers);
 	CHECK_RET_FREE_INSTANCE("Failed to initialize transfer lists.\n");
+	uhci_print_verbose("Transfer lists initialized.\n");
 
 	/* init root hub */
@@ -60,6 +54,7 @@
 	CHECK_RET_FREE_INSTANCE("Failed to initialize root hub driver.\n");
 
+	uhci_print_verbose("Initializing frame list.\n");
 	instance->frame_list =
-	  malloc32(sizeof(link_pointer_t) * UHCI_FRAME_LIST_COUNT);
+	  memallign32(sizeof(link_pointer_t) * UHCI_FRAME_LIST_COUNT, 4096);
 	if (instance->frame_list == NULL) {
 		uhci_print_error("Failed to allocate frame list pointer.\n");
@@ -87,55 +82,4 @@
 	device->driver_data = instance;
 	return EOK;
-}
-/*----------------------------------------------------------------------------*/
-int uhci_in(
-  device_t *dev,
-	usb_target_t target,
-	usb_transfer_type_t transfer_type,
-	void *buffer, size_t size,
-	usbhc_iface_transfer_in_callback_t callback, void *arg
-	)
-{
-	uhci_print_info( "transfer IN [%d.%d (%s); %zu]\n",
-	    target.address, target.endpoint,
-	    usb_str_transfer_type(transfer_type),
-	    size);
-	return uhci_add_transfer(
-	  dev, target, transfer_type, USB_PID_IN, buffer, size, NULL, callback, arg);
-}
-/*----------------------------------------------------------------------------*/
-int uhci_out(
-  device_t *dev,
-  usb_target_t target,
-  usb_transfer_type_t transfer_type,
-  void *buffer, size_t size,
-	usbhc_iface_transfer_out_callback_t callback, void *arg
-  )
-{
-	uhci_print_info( "transfer OUT [%d.%d (%s); %zu]\n",
-	    target.address, target.endpoint,
-	    usb_str_transfer_type(transfer_type),
-	    size);
-	return uhci_add_transfer(
-	  dev, target, transfer_type, USB_PID_OUT, buffer, size, callback, NULL, arg);
-}
-/*----------------------------------------------------------------------------*/
-int uhci_setup(
-  device_t *dev,
-  usb_target_t target,
-  usb_transfer_type_t transfer_type,
-  void *buffer, size_t size,
-  usbhc_iface_transfer_out_callback_t callback, void *arg
-  )
-{
-	uhci_print_info( "transfer SETUP [%d.%d (%s); %zu]\n",
-	    target.address, target.endpoint,
-	    usb_str_transfer_type(transfer_type),
-	    size);
-	uhci_print_info("Setup packet content: %x %x.\n", ((uint8_t*)buffer)[0],
-	  ((uint8_t*)buffer)[1]);
-	return uhci_add_transfer( dev,
-	  target, transfer_type, USB_PID_SETUP, buffer, size, callback, NULL, arg);
-
 }
 /*----------------------------------------------------------------------------*/
@@ -173,8 +117,9 @@
 }
 /*----------------------------------------------------------------------------*/
-static inline int uhci_add_transfer(
+int uhci_transfer(
   device_t *dev,
   usb_target_t target,
   usb_transfer_type_t transfer_type,
+	bool toggle,
   usb_packet_id pid,
   void *buffer, size_t size,
@@ -248,5 +193,4 @@
 				instance->transfers[i].last = instance->transfers[i].first;
 		}
-
 		async_usleep(1000000);
 	}
Index: uspace/drv/uhci/uhci.h
===================================================================
--- uspace/drv/uhci/uhci.h	(revision de0e6b3b72cdfc7d29d8455f440dcfb4fc2a9f1d)
+++ uspace/drv/uhci/uhci.h	(revision d93ff502de7b748ddb03959bc2f8c02a8be151d7)
@@ -46,4 +46,5 @@
 typedef struct uhci_regs {
 	uint16_t usbcmd;
+#define USB_CMD_
 	uint16_t usbsts;
 	uint16_t usbintr;
@@ -72,27 +73,14 @@
 int uhci_destroy( device_t *device );
 
-int uhci_in(
-  device_t *dev,
-	usb_target_t target,
-	usb_transfer_type_t transfer_type,
-	void *buffer, size_t size,
-	usbhc_iface_transfer_in_callback_t callback, void *arg
-	);
-
-int uhci_out(
-  device_t *dev,
-	usb_target_t target,
-  usb_transfer_type_t transfer_type,
-  void *buffer, size_t size,
-	usbhc_iface_transfer_out_callback_t callback, void *arg
-  );
-
-int uhci_setup(
+int uhci_transfer(
   device_t *dev,
   usb_target_t target,
   usb_transfer_type_t transfer_type,
+	bool toggle,
+  usb_packet_id pid,
   void *buffer, size_t size,
-  usbhc_iface_transfer_out_callback_t callback, void *arg
-  );
+  usbhc_iface_transfer_out_callback_t callback_out,
+  usbhc_iface_transfer_in_callback_t callback_in,
+  void *arg );
 
 #endif
