Index: uspace/lib/drv/generic/driver.c
===================================================================
--- uspace/lib/drv/generic/driver.c	(revision 443695ef37d4e47d223158ab3b07f84e2d5df943)
+++ uspace/lib/drv/generic/driver.c	(revision a7a16a2fd2fee7aed47cced53b3602609b317c8c)
@@ -1,5 +1,5 @@
 /*
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2010 Lenka Trochtova
- * Copyright (c) 2011 Jiri Svoboda
  * All rights reserved.
  *
@@ -971,4 +971,14 @@
 }
 
+/** Wait for function to enter stable state.
+ *
+ * @param fun Function
+ * @return EOK on success or an error code
+ */
+errno_t ddf_fun_wait_stable(ddf_fun_t *fun)
+{
+	return devman_drv_fun_wait_stable(fun->handle);
+}
+
 errno_t ddf_driver_main(const driver_t *drv)
 {
Index: uspace/lib/drv/generic/remote_hw_res.c
===================================================================
--- uspace/lib/drv/generic/remote_hw_res.c	(revision 443695ef37d4e47d223158ab3b07f84e2d5df943)
+++ uspace/lib/drv/generic/remote_hw_res.c	(revision a7a16a2fd2fee7aed47cced53b3602609b317c8c)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2010 Lenka Trochtova
  * Copyright (c) 2011 Jan Vesely
@@ -48,5 +48,6 @@
 static void remote_hw_res_dma_channel_setup(ddf_fun_t *, void *, ipc_call_t *);
 static void remote_hw_res_dma_channel_remain(ddf_fun_t *, void *, ipc_call_t *);
-static void remote_hw_res_get_flags(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_hw_res_query_legacy_io(ddf_fun_t *, void *, ipc_call_t *);
+static void remote_hw_res_claim_legacy_io(ddf_fun_t *, void *, ipc_call_t *);
 
 static const remote_iface_func_ptr_t remote_hw_res_iface_ops [] = {
@@ -57,5 +58,6 @@
 	[HW_RES_DMA_CHANNEL_SETUP] = &remote_hw_res_dma_channel_setup,
 	[HW_RES_DMA_CHANNEL_REMAIN] = &remote_hw_res_dma_channel_remain,
-	[HW_RES_GET_FLAGS] = &remote_hw_res_get_flags
+	[HW_RES_QUERY_LEGACY_IO] = &remote_hw_res_query_legacy_io,
+	[HW_RES_CLAIM_LEGACY_IO] = &remote_hw_res_claim_legacy_io
 };
 
@@ -174,17 +176,34 @@
 }
 
-static void remote_hw_res_get_flags(ddf_fun_t *fun, void *ops,
-    ipc_call_t *call)
-{
-	hw_res_ops_t *hw_res_ops = ops;
-
-	if (hw_res_ops->get_flags == NULL) {
-		async_answer_0(call, ENOTSUP);
-		return;
-	}
-
-	hw_res_flags_t flags = 0;
-	const errno_t ret = hw_res_ops->get_flags(fun, &flags);
-	async_answer_1(call, ret, flags);
+static void remote_hw_res_query_legacy_io(ddf_fun_t *fun, void *ops,
+    ipc_call_t *call)
+{
+	hw_res_ops_t *hw_res_ops = ops;
+
+	if (hw_res_ops->query_legacy_io == NULL) {
+		async_answer_0(call, ENOTSUP);
+		return;
+	}
+
+	hw_res_claims_t claims = 0;
+	const errno_t ret = hw_res_ops->query_legacy_io(fun, &claims);
+	async_answer_1(call, ret, claims);
+}
+
+static void remote_hw_res_claim_legacy_io(ddf_fun_t *fun, void *ops,
+    ipc_call_t *call)
+{
+	hw_res_ops_t *hw_res_ops = ops;
+	hw_res_claims_t claims;
+
+	if (hw_res_ops->claim_legacy_io == NULL) {
+		async_answer_0(call, ENOTSUP);
+		return;
+	}
+
+	claims = DEV_IPC_GET_ARG1(*call);
+
+	const errno_t ret = hw_res_ops->claim_legacy_io(fun, claims);
+	async_answer_0(call, ret);
 }
 
Index: uspace/lib/drv/include/ddf/driver.h
===================================================================
--- uspace/lib/drv/include/ddf/driver.h	(revision 443695ef37d4e47d223158ab3b07f84e2d5df943)
+++ uspace/lib/drv/include/ddf/driver.h	(revision a7a16a2fd2fee7aed47cced53b3602609b317c8c)
@@ -1,5 +1,5 @@
 /*
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2010 Lenka Trochtova
- * Copyright (c) 2011 Jiri Svoboda
  * All rights reserved.
  *
@@ -133,4 +133,5 @@
 extern void ddf_fun_set_conn_handler(ddf_fun_t *, async_port_handler_t);
 extern errno_t ddf_fun_add_to_category(ddf_fun_t *, const char *);
+extern errno_t ddf_fun_wait_stable(ddf_fun_t *);
 
 #endif
Index: uspace/lib/drv/include/ops/hw_res.h
===================================================================
--- uspace/lib/drv/include/ops/hw_res.h	(revision 443695ef37d4e47d223158ab3b07f84e2d5df943)
+++ uspace/lib/drv/include/ops/hw_res.h	(revision a7a16a2fd2fee7aed47cced53b3602609b317c8c)
@@ -1,4 +1,4 @@
 /*
- * Copyright (c) 2024 Jiri Svoboda
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2010 Lenka Trochtova
  * Copyright (c) 2011 Jan Vesely
@@ -50,5 +50,6 @@
 	errno_t (*dma_channel_setup)(ddf_fun_t *, unsigned, uint32_t, uint32_t, uint8_t);
 	errno_t (*dma_channel_remain)(ddf_fun_t *, unsigned, size_t *);
-	errno_t (*get_flags)(ddf_fun_t *, hw_res_flags_t *);
+	errno_t (*query_legacy_io)(ddf_fun_t *, hw_res_claims_t *);
+	errno_t (*claim_legacy_io)(ddf_fun_t *, hw_res_claims_t);
 } hw_res_ops_t;
 
