Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision f2789301293c7a4b55f9cbde30a415bdc4412c5d)
+++ uspace/lib/drv/generic/driver.c	(revision 7e9fce6802914baa1607428747f7318cbdc664c4)
@@ -333,4 +333,34 @@
 }
 
+static void driver_dev_gone(ipc_callid_t iid, ipc_call_t *icall)
+{
+	devman_handle_t devh;
+	ddf_dev_t *dev;
+	int rc;
+	
+	devh = IPC_GET_ARG1(*icall);
+	
+	fibril_mutex_lock(&devices_mutex);
+	dev = driver_get_device(devh);
+	if (dev != NULL)
+		dev_add_ref(dev);
+	fibril_mutex_unlock(&devices_mutex);
+	
+	if (dev == NULL) {
+		async_answer_0(iid, ENOENT);
+		return;
+	}
+	
+	if (driver->driver_ops->dev_gone != NULL)
+		rc = driver->driver_ops->dev_gone(dev);
+	else
+		rc = ENOTSUP;
+	
+	if (rc == EOK)
+		dev_del_ref(dev);
+	
+	async_answer_0(iid, (sysarg_t) rc);
+}
+
 static void driver_fun_online(ipc_callid_t iid, ipc_call_t *icall)
 {
@@ -423,4 +453,7 @@
 		case DRIVER_DEV_REMOVE:
 			driver_dev_remove(callid, &call);
+			break;
+		case DRIVER_DEV_GONE:
+			driver_dev_gone(callid, &call);
 			break;
 		case DRIVER_FUN_ONLINE:
Index: uspace/lib/drv/include/ddf/driver.h
===================================================================
--- uspace/lib/drv/include/ddf/driver.h	(revision f2789301293c7a4b55f9cbde30a415bdc4412c5d)
+++ uspace/lib/drv/include/ddf/driver.h	(revision 7e9fce6802914baa1607428747f7318cbdc664c4)
@@ -139,4 +139,6 @@
 	/** Ask driver to remove a device */
 	int (*dev_remove)(ddf_dev_t *);
+	/** Inform driver a device disappeared */
+	int (*dev_gone)(ddf_dev_t *);
 	/** Ask driver to online a specific function */
 	int (*fun_online)(ddf_fun_t *);
