Index: uspace/drv/bus/usb/ohci/hc.c
===================================================================
--- uspace/drv/bus/usb/ohci/hc.c	(revision 3f03199e0835b11c26a46cd190aeef79835d08f4)
+++ uspace/drv/bus/usb/ohci/hc.c	(revision 93488625b5baeeeee9e1065454fa8734da4f68d8)
@@ -296,5 +296,5 @@
 {
 	assert(hcd);
-	hc_t *instance = hcd->private_data;
+	hc_t *instance = hcd->driver.data;
 	assert(instance);
 
Index: uspace/drv/bus/usb/ohci/ohci.c
===================================================================
--- uspace/drv/bus/usb/ohci/ohci.c	(revision 3f03199e0835b11c26a46cd190aeef79835d08f4)
+++ uspace/drv/bus/usb/ohci/ohci.c	(revision 93488625b5baeeeee9e1065454fa8734da4f68d8)
@@ -58,5 +58,5 @@
 	assert(dev);
 	hcd_t *hcd = dev_to_hcd(dev);
-	if (!hcd || !hcd->private_data) {
+	if (!hcd || !hcd->driver.data) {
 		usb_log_warning("Interrupt on device that is not ready.\n");
 		return;
@@ -64,5 +64,5 @@
 
 	const uint16_t status = IPC_GET_ARG1(*call);
-	hc_interrupt(hcd->private_data, status);
+	hc_interrupt(hcd->driver.data, status);
 }
 
Index: uspace/drv/bus/usb/ohci/ohci_endpoint.c
===================================================================
--- uspace/drv/bus/usb/ohci/ohci_endpoint.c	(revision 3f03199e0835b11c26a46cd190aeef79835d08f4)
+++ uspace/drv/bus/usb/ohci/ohci_endpoint.c	(revision 93488625b5baeeeee9e1065454fa8734da4f68d8)
@@ -90,5 +90,5 @@
 	endpoint_set_hc_data(
 	    ep, ohci_ep, ohci_ep_toggle_get, ohci_ep_toggle_set);
-	hc_enqueue_endpoint(hcd->private_data, ep);
+	hc_enqueue_endpoint(hcd->driver.data, ep);
 	return EOK;
 }
@@ -104,5 +104,5 @@
 	assert(ep);
 	ohci_endpoint_t *instance = ohci_endpoint_get(ep);
-	hc_dequeue_endpoint(hcd->private_data, ep);
+	hc_dequeue_endpoint(hcd->driver.data, ep);
 	if (instance) {
 		free32(instance->ed);
Index: uspace/drv/bus/usb/uhci/hc.c
===================================================================
--- uspace/drv/bus/usb/uhci/hc.c	(revision 3f03199e0835b11c26a46cd190aeef79835d08f4)
+++ uspace/drv/bus/usb/uhci/hc.c	(revision 93488625b5baeeeee9e1065454fa8734da4f68d8)
@@ -444,5 +444,5 @@
 {
 	assert(hcd);
-	hc_t *instance = hcd->private_data;
+	hc_t *instance = hcd->driver.data;
 	assert(instance);
 	assert(batch);
Index: uspace/drv/bus/usb/uhci/uhci.c
===================================================================
--- uspace/drv/bus/usb/uhci/uhci.c	(revision 3f03199e0835b11c26a46cd190aeef79835d08f4)
+++ uspace/drv/bus/usb/uhci/uhci.c	(revision 93488625b5baeeeee9e1065454fa8734da4f68d8)
@@ -57,10 +57,10 @@
 	assert(dev);
 	hcd_t *hcd = dev_to_hcd(dev);
-	if (!hcd || !hcd->private_data) {
+	if (!hcd || !hcd->driver.data) {
 		usb_log_error("Interrupt on not yet initialized device.\n");
 		return;
 	}
 	const uint16_t status = IPC_GET_ARG1(*call);
-	hc_interrupt(hcd->private_data, status);
+	hc_interrupt(hcd->driver.data, status);
 }
 
Index: uspace/drv/bus/usb/vhc/transfer.c
===================================================================
--- uspace/drv/bus/usb/vhc/transfer.c	(revision 3f03199e0835b11c26a46cd190aeef79835d08f4)
+++ uspace/drv/bus/usb/vhc/transfer.c	(revision 93488625b5baeeeee9e1065454fa8734da4f68d8)
@@ -167,5 +167,5 @@
 	assert(hcd);
 	assert(batch);
-	vhc_data_t *vhc = hcd->private_data;
+	vhc_data_t *vhc = hcd->driver.data;
 	assert(vhc);
 
Index: uspace/lib/usbhost/include/usb/host/hcd.h
===================================================================
--- uspace/lib/usbhost/include/usb/host/hcd.h	(revision 3f03199e0835b11c26a46cd190aeef79835d08f4)
+++ uspace/lib/usbhost/include/usb/host/hcd.h	(revision 93488625b5baeeeee9e1065454fa8734da4f68d8)
@@ -50,11 +50,7 @@
 typedef void (*ep_remove_hook_t)(hcd_t *, endpoint_t *);
 
-/** Generic host controller driver structure. */
-struct hcd {
-	/** Endpoint manager. */
-	usb_endpoint_manager_t ep_manager;
-
+typedef struct {
 	/** Device specific driver data. */
-	void *private_data;
+	void *data;
 	/** Transfer scheduling, implement in device driver. */
 	schedule_hook_t schedule;
@@ -63,4 +59,13 @@
 	/** Hook called upon removing of an endpoint. */
 	ep_remove_hook_t ep_remove_hook;
+} hc_driver_t;
+
+/** Generic host controller driver structure. */
+struct hcd {
+	/** Endpoint manager. */
+	usb_endpoint_manager_t ep_manager;
+
+	/** Driver implementation */
+	hc_driver_t driver;
 };
 
@@ -72,8 +77,8 @@
 {
 	assert(hcd);
-	hcd->private_data = data;
-	hcd->schedule = schedule;
-	hcd->ep_add_hook = add_hook;
-	hcd->ep_remove_hook = rem_hook;
+	hcd->driver.data = data;
+	hcd->driver.schedule = schedule;
+	hcd->driver.ep_add_hook = add_hook;
+	hcd->driver.ep_remove_hook = rem_hook;
 }
 
Index: uspace/lib/usbhost/src/hcd.c
===================================================================
--- uspace/lib/usbhost/src/hcd.c	(revision 3f03199e0835b11c26a46cd190aeef79835d08f4)
+++ uspace/lib/usbhost/src/hcd.c	(revision 93488625b5baeeeee9e1065454fa8734da4f68d8)
@@ -52,6 +52,6 @@
 	assert(ep);
 	assert(hcd);
-	if (hcd->ep_add_hook)
-		return hcd->ep_add_hook(hcd, ep);
+	if (hcd->driver.ep_add_hook)
+		return hcd->driver.ep_add_hook(hcd, ep);
 	return EOK;
 }
@@ -66,6 +66,6 @@
 	assert(ep);
 	assert(hcd);
-	if (hcd->ep_remove_hook)
-		hcd->ep_remove_hook(hcd, ep);
+	if (hcd->driver.ep_remove_hook)
+		hcd->driver.ep_remove_hook(hcd, ep);
 }
 
@@ -97,8 +97,8 @@
 	usb_endpoint_manager_init(&hcd->ep_manager, bandwidth, bw_count, max_speed);
 
-	hcd->private_data = NULL;
-	hcd->schedule = NULL;
-	hcd->ep_add_hook = NULL;
-	hcd->ep_remove_hook = NULL;
+	hcd->driver.data = NULL;
+	hcd->driver.schedule = NULL;
+	hcd->driver.ep_add_hook = NULL;
+	hcd->driver.ep_remove_hook = NULL;
 }
 
@@ -207,5 +207,5 @@
 		return ENOSPC;
 	}
-	if (!hcd->schedule) {
+	if (!hcd->driver.schedule) {
 		usb_log_error("HCD does not implement scheduler.\n");
 		return ENOTSUP;
@@ -239,5 +239,5 @@
 	}
 
-	const int ret = hcd->schedule(hcd, batch);
+	const int ret = hcd->driver.schedule(hcd, batch);
 	if (ret != EOK)
 		usb_transfer_batch_destroy(batch);
