Index: uspace/lib/c/generic/devman.c
===================================================================
--- uspace/lib/c/generic/devman.c	(revision 36082362a46bde6604dea1993953352a0edc3639)
+++ uspace/lib/c/generic/devman.c	(revision df0bbe18ba3d0d11ecf1ad6f12faaf9c83a48082)
@@ -374,4 +374,54 @@
 }
 
+int devman_get_device_path(devman_handle_t handle, char *path, size_t path_size)
+{
+	int phone = devman_get_phone(DEVMAN_CLIENT, 0);
+
+	if (phone < 0)
+		return phone;
+
+	async_serialize_start();
+
+	ipc_call_t answer;
+	aid_t req = async_send_1(phone, DEVMAN_DEVICE_GET_DEVICE_PATH,
+	    handle, &answer);
+
+	ipc_call_t data_request_call;
+	aid_t data_request = async_data_read(phone, path, path_size,
+	    &data_request_call);
+	if (data_request == 0) {
+		async_wait_for(req, NULL);
+		async_serialize_end();
+		return ENOMEM;
+	}
+
+	sysarg_t data_request_rc;
+	sysarg_t opening_request_rc;
+	async_wait_for(data_request, &data_request_rc);
+	async_wait_for(req, &opening_request_rc);
+
+	async_serialize_end();
+
+	if (data_request_rc != EOK) {
+		/* Prefer the return code of the opening request. */
+		if (opening_request_rc != EOK) {
+			return (int) opening_request_rc;
+		} else {
+			return (int) data_request_rc;
+		}
+	}
+	if (opening_request_rc != EOK) {
+		return (int) opening_request_rc;
+	}
+
+	path[path_size - 1] = 0;
+
+	if (IPC_GET_ARG2(data_request_call) >= path_size) {
+		return ELIMIT;
+	}
+
+	return EOK;
+}
+
 
 /** @}
Index: uspace/lib/c/include/devman.h
===================================================================
--- uspace/lib/c/include/devman.h	(revision 36082362a46bde6604dea1993953352a0edc3639)
+++ uspace/lib/c/include/devman.h	(revision df0bbe18ba3d0d11ecf1ad6f12faaf9c83a48082)
@@ -55,4 +55,5 @@
 extern int devman_device_get_handle_by_class(const char *, const char *,
     devman_handle_t *, unsigned int);
+extern int devman_get_device_path(devman_handle_t, char *, size_t);
 
 extern int devman_add_device_to_class(devman_handle_t, const char *);
Index: uspace/lib/c/include/ipc/devman.h
===================================================================
--- uspace/lib/c/include/ipc/devman.h	(revision 36082362a46bde6604dea1993953352a0edc3639)
+++ uspace/lib/c/include/ipc/devman.h	(revision df0bbe18ba3d0d11ecf1ad6f12faaf9c83a48082)
@@ -149,5 +149,6 @@
 typedef enum {
 	DEVMAN_DEVICE_GET_HANDLE = IPC_FIRST_USER_METHOD,
-	DEVMAN_DEVICE_GET_HANDLE_BY_CLASS
+	DEVMAN_DEVICE_GET_HANDLE_BY_CLASS,
+	DEVMAN_DEVICE_GET_DEVICE_PATH
 } client_to_devman_t;
 
