Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision bfe7867b8b6d864abc1f0ba5490a1a568432d127)
+++ uspace/lib/drv/generic/driver.c	(revision c5be39b48e3de00d342394cb29ba1f563fc45dbd)
@@ -699,4 +699,19 @@
 }
 
+/** Allocate driver-specific device data. */
+extern void *ddf_dev_data_alloc(ddf_dev_t *dev, size_t size)
+{
+	void *data;
+
+	assert(dev->driver_data == NULL);
+
+	data = calloc(1, size);
+	if (data == NULL)
+		return NULL;
+
+	dev->driver_data = data;
+	return data;
+}
+
 /** Create a DDF function node.
  *
@@ -744,4 +759,20 @@
 
 	return fun;
+}
+
+/** Allocate driver-specific function data. */
+extern void *ddf_fun_data_alloc(ddf_fun_t *fun, size_t size)
+{
+	void *data;
+
+	assert(fun->bound == false);
+	assert(fun->driver_data == NULL);
+
+	data = calloc(1, size);
+	if (data == NULL)
+		return NULL;
+
+	fun->driver_data = data;
+	return data;
 }
 
Index: uspace/lib/drv/include/ddf/driver.h
===================================================================
--- uspace/lib/drv/include/ddf/driver.h	(revision bfe7867b8b6d864abc1f0ba5490a1a568432d127)
+++ uspace/lib/drv/include/ddf/driver.h	(revision c5be39b48e3de00d342394cb29ba1f563fc45dbd)
@@ -155,6 +155,8 @@
 extern int ddf_driver_main(driver_t *);
 
+extern void *ddf_dev_data_alloc(ddf_dev_t *, size_t);
 extern ddf_fun_t *ddf_fun_create(ddf_dev_t *, fun_type_t, const char *);
 extern void ddf_fun_destroy(ddf_fun_t *);
+extern void *ddf_fun_data_alloc(ddf_fun_t *, size_t);
 extern int ddf_fun_bind(ddf_fun_t *);
 extern int ddf_fun_unbind(ddf_fun_t *);
