Index: uspace/drv/ohci/batch.c
===================================================================
--- uspace/drv/ohci/batch.c	(revision 2bf8f8cc6fdeecb4df0a8b3d10633221f2ae058e)
+++ uspace/drv/ohci/batch.c	(revision d3281724b7c70e46001122d5b81f81a473283d0b)
@@ -40,4 +40,7 @@
 #include "batch.h"
 #include "utils/malloc32.h"
+
+static void batch_call_in_and_dispose(batch_t *instance);
+static void batch_call_out_and_dispose(batch_t *instance);
 
 #define DEFAULT_ERROR_COUNT 3
@@ -94,4 +97,7 @@
 {
 	assert(instance);
+	free32(instance->transport_buffer);
+	free32(instance->setup_buffer);
+	free(instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -99,4 +105,10 @@
 {
 	assert(instance);
+	/* We are data out, we are supposed to provide data */
+	memcpy(instance->transport_buffer, instance->buffer,
+	    instance->buffer_size);
+	instance->next_step = batch_call_out_and_dispose;
+	/* TODO: implement */
+	usb_log_debug("Batch(%p) CONTROL WRITE initialized.\n", instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -104,4 +116,7 @@
 {
 	assert(instance);
+	instance->next_step = batch_call_in_and_dispose;
+	/* TODO: implement */
+	usb_log_debug("Batch(%p) CONTROL WRITE initialized.\n", instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -109,4 +124,8 @@
 {
 	assert(instance);
+	instance->direction = USB_DIRECTION_IN;
+	instance->next_step = batch_call_in_and_dispose;
+	/* TODO: implement */
+	usb_log_debug("Batch(%p) INTERRUPT IN initialized.\n", instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -114,4 +133,11 @@
 {
 	assert(instance);
+	instance->direction = USB_DIRECTION_OUT;
+	/* We are data out, we are supposed to provide data */
+	memcpy(instance->transport_buffer, instance->buffer,
+	    instance->buffer_size);
+	instance->next_step = batch_call_out_and_dispose;
+	/* TODO: implement */
+	usb_log_debug("Batch(%p) INTERRUPT OUT initialized.\n", instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -119,4 +145,8 @@
 {
 	assert(instance);
+	instance->direction = USB_DIRECTION_IN;
+	instance->next_step = batch_call_in_and_dispose;
+	/* TODO: implement */
+	usb_log_debug("Batch(%p) BULK IN initialized.\n", instance);
 }
 /*----------------------------------------------------------------------------*/
@@ -124,4 +154,30 @@
 {
 	assert(instance);
+	instance->direction = USB_DIRECTION_IN;
+	instance->next_step = batch_call_in_and_dispose;
+	/* TODO: implement */
+	usb_log_debug("Batch(%p) BULK IN initialized.\n", instance);
+}
+/*----------------------------------------------------------------------------*/
+/** Helper function calls callback and correctly disposes of batch structure.
+ *
+ * @param[in] instance Batch structure to use.
+ */
+void batch_call_in_and_dispose(batch_t *instance)
+{
+	assert(instance);
+	batch_call_in(instance);
+	batch_dispose(instance);
+}
+/*----------------------------------------------------------------------------*/
+/** Helper function calls callback and correctly disposes of batch structure.
+ *
+ * @param[in] instance Batch structure to use.
+ */
+void batch_call_out_and_dispose(batch_t *instance)
+{
+	assert(instance);
+	batch_call_out(instance);
+	batch_dispose(instance);
 }
 /**
Index: uspace/drv/ohci/root_hub.c
===================================================================
--- uspace/drv/ohci/root_hub.c	(revision 2bf8f8cc6fdeecb4df0a8b3d10633221f2ae058e)
+++ uspace/drv/ohci/root_hub.c	(revision d3281724b7c70e46001122d5b81f81a473283d0b)
@@ -58,7 +58,14 @@
 int rh_request(rh_t *instance, batch_t *request)
 {
+	assert(instance);
+	assert(request);
 	/* TODO: implement */
+	if (request->setup_buffer) {
+		usb_log_info("Root hub got SETUP packet: %s.\n",
+		    usb_debug_str_buffer((const uint8_t *)request->setup_buffer, 8, 8));
+	}
 	usb_log_error("Root hub request processing not implemented.\n");
-	return ENOTSUP;
+	batch_finish(request, ENOTSUP);
+	return EOK;
 }
 /*----------------------------------------------------------------------------*/
