Index: uspace/drv/block/isa-ide/isa-ide.c
===================================================================
--- uspace/drv/block/isa-ide/isa-ide.c	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/drv/block/isa-ide/isa-ide.c	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -101,5 +101,5 @@
 	ata_params_t params;
 
-	ddf_msg(LVL_DEBUG, "isa_ide_ctrl_init()");
+	ddf_msg(LVL_DEBUG, "isa_ide_channel_init()");
 
 	memset(&params, 0, sizeof(params));
@@ -135,5 +135,5 @@
 	irq_inited = true;
 
-	ddf_msg(LVL_DEBUG, "isa_ide_ctrl_init(): Initialize IDE channel");
+	ddf_msg(LVL_DEBUG, "isa_ide_channel_init(): Initialize IDE channel");
 
 	params.arg = (void *)chan;
@@ -163,5 +163,5 @@
 		goto error;
 
-	ddf_msg(LVL_DEBUG, "isa_ide_ctrl_init: DONE");
+	ddf_msg(LVL_DEBUG, "isa_ide_channel_init: DONE");
 	return EOK;
 error:
@@ -181,5 +181,5 @@
 	errno_t rc;
 
-	ddf_msg(LVL_DEBUG, ": isa_ide_ctrl_remove()");
+	ddf_msg(LVL_DEBUG, ": isa_ide_channel_fini()");
 
 	fibril_mutex_lock(&chan->lock);
@@ -196,4 +196,14 @@
 
 	return EOK;
+}
+
+/** Quiesce ISA IDE channel. */
+void isa_ide_channel_quiesce(isa_ide_channel_t *chan)
+{
+	ddf_msg(LVL_DEBUG, ": isa_ide_channel_quiesce()");
+
+	fibril_mutex_lock(&chan->lock);
+	ata_channel_quiesce(chan->channel);
+	fibril_mutex_unlock(&chan->lock);
 }
 
Index: uspace/drv/block/isa-ide/isa-ide.h
===================================================================
--- uspace/drv/block/isa-ide/isa-ide.h	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/drv/block/isa-ide/isa-ide.h	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -104,4 +104,5 @@
     unsigned, isa_ide_hwres_t *);
 extern errno_t isa_ide_channel_fini(isa_ide_channel_t *);
+extern void isa_ide_channel_quiesce(isa_ide_channel_t *);
 
 #endif
Index: uspace/drv/block/isa-ide/main.c
===================================================================
--- uspace/drv/block/isa-ide/main.c	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/drv/block/isa-ide/main.c	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -49,4 +49,5 @@
 static errno_t isa_ide_dev_remove(ddf_dev_t *dev);
 static errno_t isa_ide_dev_gone(ddf_dev_t *dev);
+static errno_t isa_ide_dev_quiesce(ddf_dev_t *dev);
 static errno_t isa_ide_fun_online(ddf_fun_t *fun);
 static errno_t isa_ide_fun_offline(ddf_fun_t *fun);
@@ -55,9 +56,10 @@
 
 static driver_ops_t driver_ops = {
-	.dev_add = &isa_ide_dev_add,
-	.dev_remove = &isa_ide_dev_remove,
-	.dev_gone = &isa_ide_dev_gone,
-	.fun_online = &isa_ide_fun_online,
-	.fun_offline = &isa_ide_fun_offline
+	.dev_add = isa_ide_dev_add,
+	.dev_remove = isa_ide_dev_remove,
+	.dev_gone = isa_ide_dev_gone,
+	.dev_quiesce = isa_ide_dev_quiesce,
+	.fun_online = isa_ide_fun_online,
+	.fun_offline = isa_ide_fun_offline
 };
 
@@ -379,4 +381,15 @@
 }
 
+static errno_t isa_ide_dev_quiesce(ddf_dev_t *dev)
+{
+	isa_ide_ctrl_t *ctrl = (isa_ide_ctrl_t *)ddf_dev_data_get(dev);
+
+	ddf_msg(LVL_DEBUG, "isa_ide_dev_quiesce(%p)", dev);
+
+	isa_ide_channel_quiesce(&ctrl->channel[0]);
+	isa_ide_channel_quiesce(&ctrl->channel[1]);
+	return EOK;
+}
+
 static errno_t isa_ide_fun_online(ddf_fun_t *fun)
 {
Index: uspace/drv/block/pc-floppy/main.c
===================================================================
--- uspace/drv/block/pc-floppy/main.c	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/drv/block/pc-floppy/main.c	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -47,13 +47,15 @@
 static errno_t pc_fdc_dev_remove(ddf_dev_t *dev);
 static errno_t pc_fdc_dev_gone(ddf_dev_t *dev);
+static errno_t pc_fdc_dev_quiesce(ddf_dev_t *dev);
 static errno_t pc_fdc_fun_online(ddf_fun_t *fun);
 static errno_t pc_fdc_fun_offline(ddf_fun_t *fun);
 
 static driver_ops_t driver_ops = {
-	.dev_add = &pc_fdc_dev_add,
-	.dev_remove = &pc_fdc_dev_remove,
-	.dev_gone = &pc_fdc_dev_gone,
-	.fun_online = &pc_fdc_fun_online,
-	.fun_offline = &pc_fdc_fun_offline
+	.dev_add = pc_fdc_dev_add,
+	.dev_remove = pc_fdc_dev_remove,
+	.dev_gone = pc_fdc_dev_gone,
+	.dev_quiesce = pc_fdc_dev_quiesce,
+	.fun_online = pc_fdc_fun_online,
+	.fun_offline = pc_fdc_fun_offline
 };
 
@@ -183,4 +185,16 @@
 }
 
+/** Quiesce FDC device.
+ *
+ * @param dev Device
+ * @return EOK on success or an error code
+ */
+static errno_t pc_fdc_dev_quiesce(ddf_dev_t *dev)
+{
+	pc_fdc_t *fdc = (pc_fdc_t *)ddf_dev_data_get(dev);
+	pc_fdc_quiesce(fdc);
+	return EOK;
+}
+
 /** Online FDC function.
  *
Index: uspace/drv/block/pc-floppy/pc-floppy.c
===================================================================
--- uspace/drv/block/pc-floppy/pc-floppy.c	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/drv/block/pc-floppy/pc-floppy.c	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -256,4 +256,13 @@
 }
 
+/** Quiesce floppy controller.
+ *
+ * @param fdc Floppy controller
+ */
+void pc_fdc_quiesce(pc_fdc_t *fdc)
+{
+	(void)pc_fdc_reset(fdc);
+}
+
 /** Enable device I/O.
  *
Index: uspace/drv/block/pc-floppy/pc-floppy.h
===================================================================
--- uspace/drv/block/pc-floppy/pc-floppy.h	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/drv/block/pc-floppy/pc-floppy.h	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -97,4 +97,5 @@
 
 extern errno_t pc_fdc_create(ddf_dev_t *, pc_fdc_hwres_t *, pc_fdc_t **);
+extern void pc_fdc_quiesce(pc_fdc_t *);
 extern errno_t pc_fdc_destroy(pc_fdc_t *);
 
Index: uspace/drv/block/pci-ide/main.c
===================================================================
--- uspace/drv/block/pci-ide/main.c	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/drv/block/pci-ide/main.c	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -49,4 +49,5 @@
 static errno_t pci_ide_dev_remove(ddf_dev_t *dev);
 static errno_t pci_ide_dev_gone(ddf_dev_t *dev);
+static errno_t pci_ide_dev_quiesce(ddf_dev_t *dev);
 static errno_t pci_ide_fun_online(ddf_fun_t *fun);
 static errno_t pci_ide_fun_offline(ddf_fun_t *fun);
@@ -55,9 +56,10 @@
 
 static driver_ops_t driver_ops = {
-	.dev_add = &pci_ide_dev_add,
-	.dev_remove = &pci_ide_dev_remove,
-	.dev_gone = &pci_ide_dev_gone,
-	.fun_online = &pci_ide_fun_online,
-	.fun_offline = &pci_ide_fun_offline
+	.dev_add = pci_ide_dev_add,
+	.dev_remove = pci_ide_dev_remove,
+	.dev_gone = pci_ide_dev_gone,
+	.dev_quiesce = pci_ide_dev_quiesce,
+	.fun_online = pci_ide_fun_online,
+	.fun_offline = pci_ide_fun_offline
 };
 
@@ -367,4 +369,16 @@
 }
 
+static errno_t pci_ide_dev_quiesce(ddf_dev_t *dev)
+{
+	pci_ide_ctrl_t *ctrl = (pci_ide_ctrl_t *)ddf_dev_data_get(dev);
+
+	ddf_msg(LVL_DEBUG, "pci_ide_dev_quiesce(%p)", dev);
+
+	pci_ide_channel_quiesce(&ctrl->channel[0]);
+	pci_ide_channel_quiesce(&ctrl->channel[1]);
+
+	return EOK;
+}
+
 static errno_t pci_ide_fun_online(ddf_fun_t *fun)
 {
Index: uspace/drv/block/pci-ide/pci-ide.c
===================================================================
--- uspace/drv/block/pci-ide/pci-ide.c	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/drv/block/pci-ide/pci-ide.c	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -331,4 +331,14 @@
 }
 
+/** Quiesce PCI IDE channel. */
+void pci_ide_channel_quiesce(pci_ide_channel_t *chan)
+{
+	ddf_msg(LVL_DEBUG, ": pci_ide_channel_quiesce()");
+
+	fibril_mutex_lock(&chan->lock);
+	ata_channel_quiesce(chan->channel);
+	fibril_mutex_unlock(&chan->lock);
+}
+
 /** Enable device I/O. */
 static errno_t pci_ide_init_io(pci_ide_channel_t *chan)
Index: uspace/drv/block/pci-ide/pci-ide.h
===================================================================
--- uspace/drv/block/pci-ide/pci-ide.h	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/drv/block/pci-ide/pci-ide.h	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -129,4 +129,5 @@
     unsigned, pci_ide_hwres_t *);
 extern errno_t pci_ide_channel_fini(pci_ide_channel_t *);
+extern void pci_ide_channel_quiesce(pci_ide_channel_t *);
 
 #endif
Index: uspace/lib/ata/include/ata/ata.h
===================================================================
--- uspace/lib/ata/include/ata/ata.h	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/lib/ata/include/ata/ata.h	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -201,4 +201,5 @@
 extern errno_t ata_channel_initialize(ata_channel_t *);
 extern errno_t ata_channel_destroy(ata_channel_t *);
+extern void ata_channel_quiesce(ata_channel_t *);
 extern void ata_channel_irq(ata_channel_t *, uint8_t);
 extern void ata_connection(ipc_call_t *, ata_device_t *);
Index: uspace/lib/ata/include/ata/ata_hw.h
===================================================================
--- uspace/lib/ata/include/ata/ata_hw.h	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/lib/ata/include/ata/ata_hw.h	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * All rights reserved.
  *
@@ -106,4 +106,5 @@
 #define REG_COMMAND offsetof(ata_cmd_t, command)
 #define REG_FEATURES offsetof(ata_cmd_t, features)
+#define REG_DEVCTL offsetof(ata_ctl_t, device_control)
 
 enum devctl_bits {
Index: uspace/lib/ata/src/ata.c
===================================================================
--- uspace/lib/ata/src/ata.c	(revision a64970e142aa9ab4dbf836d185af3b3c5ec3631c)
+++ uspace/lib/ata/src/ata.c	(revision 070398509ff45fbd1df01be0c80607d51df53f95)
@@ -84,4 +84,5 @@
 static uint8_t ata_read_cmd_8(ata_channel_t *, uint16_t);
 static void ata_write_cmd_8(ata_channel_t *, uint16_t, uint8_t);
+static void ata_write_ctl_8(ata_channel_t *, uint16_t, uint8_t);
 
 static errno_t ata_bd_init_irq(ata_channel_t *);
@@ -279,4 +280,14 @@
 }
 
+/** Quiesce ATA channel. */
+void ata_channel_quiesce(ata_channel_t *chan)
+{
+	ata_msg_debug(chan, ": ata_channel_quiesce()");
+
+	fibril_mutex_lock(&chan->lock);
+	ata_write_ctl_8(chan, REG_DEVCTL, DCR_SRST | DCR_nIEN);
+	fibril_mutex_unlock(&chan->lock);
+}
+
 /** Add ATA device.
  *
@@ -348,4 +359,15 @@
 {
 	return chan->params.write_cmd_8(chan->params.arg, port, value);
+}
+
+/** Write 8 bits to 8-bit control port.
+ *
+ * @param chan ATA channel
+ * @param port Port number
+ * @param value Register value
+ */
+static void ata_write_ctl_8(ata_channel_t *chan, uint16_t port, uint8_t value)
+{
+	return chan->params.write_ctl_8(chan->params.arg, port, value);
 }
 
