Index: uspace/srv/devman/client_conn.c
===================================================================
--- uspace/srv/devman/client_conn.c	(revision e5556e4a11175054df13aab078fc6d3c831cc8c2)
+++ uspace/srv/devman/client_conn.c	(revision cd3b3802ee73ed2b2467458eb3b06bd7d0bf0879)
@@ -450,4 +450,27 @@
 }
 
+/** Find driver by name. */
+static void devman_driver_get_handle(ipc_callid_t iid, ipc_call_t *icall)
+{
+	char *drvname;
+	
+	int rc = async_data_write_accept((void **) &drvname, true, 0, 0, 0, 0);
+	if (rc != EOK) {
+		async_answer_0(iid, rc);
+		return;
+	}
+	
+	driver_t *driver = driver_find_by_name(&drivers_list, drvname);
+	
+	free(drvname);
+	
+	if (driver == NULL) {
+		async_answer_0(iid, ENOENT);
+		return;
+	}
+	
+	async_answer_1(iid, EOK, driver->handle);
+}
+
 /** Get driver name. */
 static void devman_driver_get_name(ipc_callid_t iid, ipc_call_t *icall)
@@ -502,4 +525,23 @@
 	
 	async_answer_1(iid, EOK, (sysarg_t) drv->state);
+}
+
+/** Forcibly load a driver. */
+static void devman_driver_load(ipc_callid_t iid, ipc_call_t *icall)
+{
+	driver_t *drv;
+	int rc;
+	
+	drv = driver_find(&drivers_list, IPC_GET_ARG1(*icall));
+	if (drv == NULL) {
+		async_answer_0(iid, ENOENT);
+		return;
+	}
+	
+	fibril_mutex_lock(&drv->driver_mutex);
+	rc = start_driver(drv) ? EOK : EIO;
+	fibril_mutex_unlock(&drv->driver_mutex);
+
+	async_answer_0(iid, rc);
 }
 
@@ -548,4 +590,7 @@
 			devman_get_drivers(callid, &call);
 			break;
+		case DEVMAN_DRIVER_GET_HANDLE:
+			devman_driver_get_handle(callid, &call);
+			break;
 		case DEVMAN_DRIVER_GET_NAME:
 			devman_driver_get_name(callid, &call);
@@ -553,4 +598,7 @@
 		case DEVMAN_DRIVER_GET_STATE:
 			devman_driver_get_state(callid, &call);
+			break;
+		case DEVMAN_DRIVER_LOAD:
+			devman_driver_load(callid, &call);
 			break;
 		default:
