Index: uspace/drv/ohci/Makefile
===================================================================
--- uspace/drv/ohci/Makefile	(revision 7786ceaf45f3a567ed0606a2410243ebbf625e6f)
+++ uspace/drv/ohci/Makefile	(revision b854e5642c101b1b85a54dd5f411ebb73e242ad0)
@@ -41,5 +41,6 @@
 	root_hub.c \
 	transfer_list.c \
-	hw_struct/endpoint_descriptor.c
+	hw_struct/endpoint_descriptor.c \
+	hw_struct/transfer_descriptor.c
 
 
Index: uspace/drv/ohci/batch.c
===================================================================
--- uspace/drv/ohci/batch.c	(revision 7786ceaf45f3a567ed0606a2410243ebbf625e6f)
+++ uspace/drv/ohci/batch.c	(revision b854e5642c101b1b85a54dd5f411ebb73e242ad0)
@@ -43,6 +43,4 @@
 #include "hw_struct/transfer_descriptor.h"
 
-#define OHCI_MAX_TRANSFER (8 * 1024) /* OHCI TDs can handle up to 8KB buffers */
-
 typedef struct ohci_batch {
 	ed_t *ed;
@@ -85,6 +83,6 @@
 
 	/* we needs + 1 transfer descriptor as the last one won't be executed */
-	data->td_count =
-	    1 + ((buffer_size + OHCI_MAX_TRANSFER - 1) / OHCI_MAX_TRANSFER);
+	data->td_count = 1 +
+	    ((buffer_size + OHCI_TD_MAX_TRANSFER - 1) / OHCI_TD_MAX_TRANSFER);
 	if (ep->transfer_type == USB_TRANSFER_CONTROL) {
 		data->td_count += 2;
Index: uspace/drv/ohci/hw_struct/transfer_descriptor.h
===================================================================
--- uspace/drv/ohci/hw_struct/transfer_descriptor.h	(revision 7786ceaf45f3a567ed0606a2410243ebbf625e6f)
+++ uspace/drv/ohci/hw_struct/transfer_descriptor.h	(revision b854e5642c101b1b85a54dd5f411ebb73e242ad0)
@@ -39,4 +39,7 @@
 #include "completion_codes.h"
 
+/* OHCI TDs can handle up to 8KB buffers */
+#define OHCI_TD_MAX_TRANSFER (8 * 1024)
+
 typedef struct td {
 	volatile uint32_t status;
@@ -52,4 +55,7 @@
 #define TD_STATUS_T_MASK (0x3)  /* data toggle 1x = use ED toggle carry */
 #define TD_STATUS_T_SHIFT (24)
+#define TD_STATUS_T_0 (0x0)
+#define TD_STATUS_T_1 (0x1)
+#define TD_STATUS_T_USE_EP (0x1)
 #define TD_STATUS_EC_MASK (0x3) /* error count */
 #define TD_STATUS_EC_SHIFT (26)
@@ -64,4 +70,13 @@
 	volatile uint32_t be; /* buffer end, address of the last byte */
 } __attribute__((packed)) td_t;
+
+void td_init(
+    td_t *instance, usb_direction_t dir, void *buffer, size_t size, int toggle);
+
+inline static void td_set_next(td_t *instance, uint32_t next)
+{
+	assert(instance);
+	instance->next = next & TD_NEXT_PTR_MASK;
+}
 #endif
 /**
