Index: uspace/drv/block/ahci/ahci.c
===================================================================
--- uspace/drv/block/ahci/ahci.c	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ uspace/drv/block/ahci/ahci.c	(revision 5c55eb7a094000c385bfd4763df91d81b2abe3c8)
@@ -33,4 +33,5 @@
 
 #include <as.h>
+#include <bd_srv.h>
 #include <errno.h>
 #include <stdio.h>
@@ -40,5 +41,4 @@
 #include <device/hw_res_parsed.h>
 #include <pci_dev_iface.h>
-#include <ahci_iface.h>
 #include "ahci.h"
 #include "ahci_hw.h"
@@ -110,9 +110,6 @@
 	}
 
-static errno_t get_sata_device_name(ddf_fun_t *, size_t, char *);
-static errno_t get_num_blocks(ddf_fun_t *, uint64_t *);
-static errno_t get_block_size(ddf_fun_t *, size_t *);
-static errno_t read_blocks(ddf_fun_t *, uint64_t, size_t, void *);
-static errno_t write_blocks(ddf_fun_t *, uint64_t, size_t, void *);
+static errno_t ahci_read_blocks(sata_dev_t *, uint64_t, size_t, void *);
+static errno_t ahci_write_blocks(sata_dev_t *, uint64_t, size_t, void *);
 
 static errno_t ahci_identify_device(sata_dev_t *);
@@ -132,18 +129,20 @@
 static int sata_devices_count = 0;
 
-/*
- * AHCI Interface
- */
-
-static ahci_iface_t ahci_interface = {
-	.get_sata_device_name = &get_sata_device_name,
-	.get_num_blocks = &get_num_blocks,
-	.get_block_size = &get_block_size,
-	.read_blocks = &read_blocks,
-	.write_blocks = &write_blocks
-};
-
-static ddf_dev_ops_t ahci_ops = {
-	.interfaces[AHCI_DEV_IFACE] = &ahci_interface
+static errno_t ahci_bd_open(bd_srvs_t *, bd_srv_t *);
+static errno_t ahci_bd_close(bd_srv_t *);
+static errno_t ahci_bd_read_blocks(bd_srv_t *, aoff64_t, size_t, void *, size_t);
+static errno_t ahci_bd_write_blocks(bd_srv_t *, aoff64_t, size_t, const void *, size_t);
+static errno_t ahci_bd_get_block_size(bd_srv_t *, size_t *);
+static errno_t ahci_bd_get_num_blocks(bd_srv_t *, aoff64_t *);
+
+static void ahci_bd_connection(ipc_call_t *, void *);
+
+static bd_ops_t ahci_bd_ops = {
+	.open = ahci_bd_open,
+	.close = ahci_bd_close,
+	.read_blocks = ahci_bd_read_blocks,
+	.write_blocks = ahci_bd_write_blocks,
+	.get_block_size = ahci_bd_get_block_size,
+	.get_num_blocks = ahci_bd_get_num_blocks
 };
 
@@ -157,72 +156,23 @@
 };
 
-/** Get SATA structure from DDF function. */
-static sata_dev_t *fun_sata_dev(ddf_fun_t *fun)
-{
-	return ddf_fun_data_get(fun);
-}
-
-/** Get SATA device name.
- *
- * @param fun                  Device function handling the call.
- * @param sata_dev_name_length Length of the sata_dev_name buffer.
- * @param sata_dev_name        Buffer for SATA device name.
- *
- * @return EOK.
- *
- */
-static errno_t get_sata_device_name(ddf_fun_t *fun,
-    size_t sata_dev_name_length, char *sata_dev_name)
-{
-	sata_dev_t *sata = fun_sata_dev(fun);
-	str_cpy(sata_dev_name, sata_dev_name_length, sata->model);
-	return EOK;
-}
-
-/** Get Number of blocks in SATA device.
- *
- * @param fun    Device function handling the call.
- * @param blocks Return number of blocks in SATA device.
- *
- * @return EOK.
- *
- */
-static errno_t get_num_blocks(ddf_fun_t *fun, uint64_t *num_blocks)
-{
-	sata_dev_t *sata = fun_sata_dev(fun);
-	*num_blocks = sata->blocks;
-	return EOK;
-}
-
-/** Get SATA device block size.
- *
- * @param fun        Device function handling the call.
- * @param block_size Return block size.
- *
- * @return EOK.
- *
- */
-static errno_t get_block_size(ddf_fun_t *fun, size_t *block_size)
-{
-	sata_dev_t *sata = fun_sata_dev(fun);
-	*block_size = sata->block_size;
-	return EOK;
-}
-
-/** Read data blocks into SATA device.
- *
- * @param fun      Device function handling the call.
+/** Get SATA structure from block device service structure. */
+static sata_dev_t *bd_srv_sata(bd_srv_t *bd)
+{
+	return (sata_dev_t *) bd->srvs->sarg;
+}
+
+/** Read data blocks from SATA device.
+ *
+ * @param sata     SATA device
  * @param blocknum Number of first block.
  * @param count    Number of blocks to read.
  * @param buf      Buffer for data.
  *
- * @return EOK if succeed, error code otherwise
- *
- */
-static errno_t read_blocks(ddf_fun_t *fun, uint64_t blocknum,
+ * @return EOK on success, error code otherwise
+ *
+ */
+static errno_t ahci_read_blocks(sata_dev_t *sata, uint64_t blocknum,
     size_t count, void *buf)
 {
-	sata_dev_t *sata = fun_sata_dev(fun);
-
 	uintptr_t phys;
 	void *ibuf = AS_AREA_ANY;
@@ -253,19 +203,16 @@
 }
 
-/** Write data blocks into SATA device.
- *
- * @param fun      Device function handling the call.
+/** Write data blocks to SATA device.
+ *
+ * @param sata     SATA device
  * @param blocknum Number of first block.
  * @param count    Number of blocks to write.
  * @param buf      Buffer with data.
  *
- * @return EOK if succeed, error code otherwise
- *
- */
-static errno_t write_blocks(ddf_fun_t *fun, uint64_t blocknum,
+ * @return EOK on success, error code otherwise
+ */
+static errno_t ahci_write_blocks(sata_dev_t *sata, uint64_t blocknum,
     size_t count, void *buf)
 {
-	sata_dev_t *sata = fun_sata_dev(fun);
-
 	uintptr_t phys;
 	void *ibuf = AS_AREA_ANY;
@@ -291,4 +238,66 @@
 
 	return rc;
+}
+
+/** Open device. */
+static errno_t ahci_bd_open(bd_srvs_t *bds, bd_srv_t *bd)
+{
+	return EOK;
+}
+
+/** Close device. */
+static errno_t ahci_bd_close(bd_srv_t *bd)
+{
+	return EOK;
+}
+
+/** Read blocks from partition. */
+static errno_t ahci_bd_read_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,
+    void *buf, size_t size)
+{
+	sata_dev_t *sata = bd_srv_sata(bd);
+
+	if (size < cnt * sata->block_size)
+		return EINVAL;
+
+	return ahci_read_blocks(sata, ba, cnt, buf);
+}
+
+/** Write blocks to partition. */
+static errno_t ahci_bd_write_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,
+    const void *buf, size_t size)
+{
+	sata_dev_t *sata = bd_srv_sata(bd);
+
+	if (size < cnt * sata->block_size)
+		return EINVAL;
+
+	return ahci_write_blocks(sata, ba, cnt, (void *)buf);
+}
+
+/** Get device block size. */
+static errno_t ahci_bd_get_block_size(bd_srv_t *bd, size_t *rsize)
+{
+	sata_dev_t *sata = bd_srv_sata(bd);
+
+	*rsize = sata->block_size;
+	return EOK;
+}
+
+/** Get number of blocks on device. */
+static errno_t ahci_bd_get_num_blocks(bd_srv_t *bd, aoff64_t *rnb)
+{
+	sata_dev_t *sata = bd_srv_sata(bd);
+
+	*rnb = sata->blocks;
+	return EOK;
+}
+
+static void ahci_bd_connection(ipc_call_t *icall, void *arg)
+{
+	sata_dev_t *sata;
+
+	sata = (sata_dev_t *) ddf_fun_data_get((ddf_fun_t *)arg);
+	bd_conn(icall, &sata->bds);
 }
 
@@ -416,5 +425,5 @@
  * @param sata SATA device structure.
  *
- * @return EOK if succeed, error code otherwise.
+ * @return EOK on success, error code otherwise.
  *
  */
@@ -597,5 +606,5 @@
  * @param sata SATA device structure.
  *
- * @return EOK if succeed, error code otherwise
+ * @return EOK on success, error code otherwise
  *
  */
@@ -726,5 +735,5 @@
  * @param blocknum Block number to read.
  *
- * @return EOK if succeed, error code otherwise
+ * @return EOK on success, error code otherwise
  *
  */
@@ -755,5 +764,5 @@
  * @param blocknum Block number to write.
  *
- * @return EOK if succeed, error code otherwise
+ * @return EOK on success, error code otherwise
  *
  */
@@ -814,5 +823,5 @@
  * @param blocknum Block number to write.
  *
- * @return EOK if succeed, error code otherwise
+ * @return EOK on success, error code otherwise
  *
  */
@@ -921,5 +930,5 @@
  * @param port AHCI port structure
  *
- * @return SATA device structure if succeed, NULL otherwise.
+ * @return SATA device structure on success, NULL otherwise.
  *
  */
@@ -1029,5 +1038,5 @@
  * @param port_num Number of AHCI port with existing SATA device.
  *
- * @return EOK if succeed, error code otherwise.
+ * @return EOK on success, error code otherwise.
  *
  */
@@ -1036,4 +1045,5 @@
 {
 	ddf_fun_t *fun = NULL;
+	bool bound = false;
 	errno_t rc;
 
@@ -1077,5 +1087,15 @@
 
 	fun = sata->fun;
-	ddf_fun_set_ops(fun, &ahci_ops);
+
+	bd_srvs_init(&sata->bds);
+	sata->bds.ops = &ahci_bd_ops;
+	sata->bds.sarg = (void *)sata;
+
+	/* Set up a connection handler. */
+	ddf_fun_set_conn_handler(fun, ahci_bd_connection);
+
+	ddf_msg(LVL_NOTE, "Device %s - %s, blocks: %" PRIu64
+	    " block_size: %zu\n", sata_dev_name, sata->model, sata->blocks,
+	    sata->block_size);
 
 	rc = ddf_fun_bind(fun);
@@ -1085,7 +1105,18 @@
 	}
 
+	bound = true;
+
+	rc = ddf_fun_add_to_category(fun, "disk");
+	if (rc != EOK) {
+		ddf_msg(LVL_ERROR, "Failed adding function %s to category "
+		    "'disk'.", sata_dev_name);
+		goto error;
+	}
+
 	return EOK;
 
 error:
+	if (bound)
+		ddf_fun_unbind(fun);
 	sata->is_invalid_device = true;
 	if (fun != NULL)
@@ -1124,5 +1155,5 @@
  * @param dev DDF device structure.
  *
- * @return AHCI device structure if succeed, NULL otherwise.
+ * @return AHCI device structure on success, NULL otherwise.
  *
  */
@@ -1248,5 +1279,5 @@
  * @param dev DDF device structure.
  *
- * @return EOK if succeed, error code otherwise.
+ * @return EOK on success, error code otherwise.
  *
  */
Index: uspace/drv/block/ahci/ahci.h
===================================================================
--- uspace/drv/block/ahci/ahci.h	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ uspace/drv/block/ahci/ahci.h	(revision 5c55eb7a094000c385bfd4763df91d81b2abe3c8)
@@ -1,3 +1,4 @@
 /*
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2012 Petr Jerman
  * All rights reserved.
@@ -31,8 +32,9 @@
  */
 
-#ifndef __AHCI_H__
-#define __AHCI_H__
+#ifndef AHCI_H
+#define AHCI_H
 
 #include <async.h>
+#include <bd_srv.h>
 #include <ddf/interrupt.h>
 #include <stdio.h>
@@ -105,4 +107,7 @@
 	/** Highest UDMA mode supported. */
 	uint8_t highest_udma_mode;
+
+	/** Block device service structure */
+	bd_srvs_t bds;
 } sata_dev_t;
 
Index: uspace/drv/block/ahci/ahci_hw.h
===================================================================
--- uspace/drv/block/ahci/ahci_hw.h	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ uspace/drv/block/ahci/ahci_hw.h	(revision 5c55eb7a094000c385bfd4763df91d81b2abe3c8)
@@ -1,3 +1,4 @@
 /*
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2012 Petr Jerman
  * All rights reserved.
@@ -31,6 +32,6 @@
  */
 
-#ifndef __AHCI_HW_H__
-#define __AHCI_HW_H__
+#ifndef AHCI_HW_H
+#define AHCI_HW_H
 
 #include <stdint.h>
Index: uspace/drv/block/ahci/ahci_sata.h
===================================================================
--- uspace/drv/block/ahci/ahci_sata.h	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ uspace/drv/block/ahci/ahci_sata.h	(revision 5c55eb7a094000c385bfd4763df91d81b2abe3c8)
@@ -1,3 +1,4 @@
 /*
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2012 Petr Jerman
  * All rights reserved.
@@ -31,6 +32,6 @@
  */
 
-#ifndef __AHCI_SATA_H__
-#define __AHCI_SATA_H__
+#ifndef AHCI_SATA_H
+#define AHCI_SATA_H
 
 #include <stdint.h>
Index: uspace/lib/drv/generic/dev_iface.c
===================================================================
--- uspace/lib/drv/generic/dev_iface.c	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ uspace/lib/drv/generic/dev_iface.c	(revision 5c55eb7a094000c385bfd4763df91d81b2abe3c8)
@@ -1,3 +1,4 @@
 /*
+ * Copyright (c) 2025 Jiri Svoboda
  * Copyright (c) 2010 Lenka Trochtova
  * All rights reserved.
@@ -53,5 +54,4 @@
 #include "remote_audio_mixer.h"
 #include "remote_audio_pcm.h"
-#include "remote_ahci.h"
 
 static const iface_dipatch_table_t remote_ifaces = {
@@ -71,5 +71,4 @@
 		[LED_DEV_IFACE] = &remote_led_dev_iface,
 		[BATTERY_DEV_IFACE] = &remote_battery_dev_iface,
-		[AHCI_DEV_IFACE] = &remote_ahci_iface,
 	}
 };
Index: pace/lib/drv/generic/remote_ahci.c
===================================================================
--- uspace/lib/drv/generic/remote_ahci.c	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ 	(revision )
@@ -1,360 +1,0 @@
-/*
- * Copyright (c) 2025 Jiri Svoboda
- * Copyright (c) 2012 Petr Jerman
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libdrv
- * @{
- */
-/** @file
- */
-
-#include <as.h>
-#include <async.h>
-#include <devman.h>
-#include <errno.h>
-#include <stdio.h>
-#include <macros.h>
-#include <str.h>
-#include "ahci_iface.h"
-#include "ddf/driver.h"
-
-typedef enum {
-	IPC_M_AHCI_GET_SATA_DEVICE_NAME,
-	IPC_M_AHCI_GET_NUM_BLOCKS,
-	IPC_M_AHCI_GET_BLOCK_SIZE,
-	IPC_M_AHCI_READ_BLOCKS,
-	IPC_M_AHCI_WRITE_BLOCKS
-} ahci_iface_funcs_t;
-
-#define MAX_NAME_LENGTH  1024
-
-#define LO(ptr) \
-	((uint32_t) (((uint64_t) ((uintptr_t) (ptr))) & 0xffffffff))
-
-#define HI(ptr) \
-	((uint32_t) (((uint64_t) ((uintptr_t) (ptr))) >> 32))
-
-async_sess_t *ahci_get_sess(devman_handle_t funh, char **name)
-{
-	// FIXME: Use a better way than substring match
-
-	*name = NULL;
-
-	char devn[MAX_NAME_LENGTH];
-	errno_t rc = devman_fun_get_name(funh, devn, MAX_NAME_LENGTH);
-	if (rc != EOK)
-		return NULL;
-
-	size_t devn_size = str_size(devn);
-
-	if ((devn_size > 5) && (str_lcmp(devn, "ahci_", 5) == 0)) {
-		async_sess_t *sess = devman_device_connect(funh, IPC_FLAG_BLOCKING);
-
-		if (sess) {
-			*name = str_dup(devn);
-			return sess;
-		}
-	}
-
-	return NULL;
-}
-
-errno_t ahci_get_sata_device_name(async_sess_t *sess, size_t sata_dev_name_length,
-    char *sata_dev_name)
-{
-	async_exch_t *exch = async_exchange_begin(sess);
-	if (!exch)
-		return EINVAL;
-
-	aid_t req = async_send_2(exch, DEV_IFACE_ID(AHCI_DEV_IFACE),
-	    IPC_M_AHCI_GET_SATA_DEVICE_NAME, sata_dev_name_length, NULL);
-
-	async_data_read_start(exch, sata_dev_name, sata_dev_name_length);
-
-	errno_t rc;
-	async_wait_for(req, &rc);
-
-	return rc;
-}
-
-errno_t ahci_get_num_blocks(async_sess_t *sess, uint64_t *blocks)
-{
-	async_exch_t *exch = async_exchange_begin(sess);
-	if (!exch)
-		return EINVAL;
-
-	sysarg_t blocks_hi;
-	sysarg_t blocks_lo;
-	errno_t rc = async_req_1_2(exch, DEV_IFACE_ID(AHCI_DEV_IFACE),
-	    IPC_M_AHCI_GET_NUM_BLOCKS, &blocks_hi, &blocks_lo);
-
-	async_exchange_end(exch);
-
-	if (rc == EOK) {
-		*blocks = (((uint64_t) blocks_hi) << 32) |
-		    (((uint64_t) blocks_lo) & 0xffffffff);
-	}
-
-	return rc;
-}
-
-errno_t ahci_get_block_size(async_sess_t *sess, size_t *blocks_size)
-{
-	async_exch_t *exch = async_exchange_begin(sess);
-	if (!exch)
-		return EINVAL;
-
-	sysarg_t bs;
-	errno_t rc = async_req_1_1(exch, DEV_IFACE_ID(AHCI_DEV_IFACE),
-	    IPC_M_AHCI_GET_BLOCK_SIZE, &bs);
-
-	async_exchange_end(exch);
-
-	if (rc == EOK)
-		*blocks_size = (size_t) bs;
-
-	return rc;
-}
-
-errno_t ahci_read_blocks(async_sess_t *sess, uint64_t blocknum, size_t count,
-    void *buf)
-{
-	async_exch_t *exch = async_exchange_begin(sess);
-	if (!exch)
-		return EINVAL;
-
-	aid_t req;
-	req = async_send_4(exch, DEV_IFACE_ID(AHCI_DEV_IFACE),
-	    IPC_M_AHCI_READ_BLOCKS, HI(blocknum),  LO(blocknum), count, NULL);
-
-	errno_t rc = async_data_read_start(exch, buf, count * 512);
-	async_exchange_end(exch);
-	if (rc != EOK) {
-		async_forget(req);
-		return rc;
-	}
-
-	errno_t retval;
-	async_wait_for(req, &retval);
-	return retval;
-}
-
-errno_t ahci_write_blocks(async_sess_t *sess, uint64_t blocknum, size_t count,
-    void *buf)
-{
-	async_exch_t *exch = async_exchange_begin(sess);
-	if (!exch)
-		return EINVAL;
-
-	aid_t req = async_send_4(exch, DEV_IFACE_ID(AHCI_DEV_IFACE),
-	    IPC_M_AHCI_WRITE_BLOCKS, HI(blocknum),  LO(blocknum), count, NULL);
-
-	errno_t rc = async_data_write_start(exch, buf, count * 512);
-	async_exchange_end(exch);
-
-	if (rc != EOK) {
-		async_forget(req);
-		return rc;
-	}
-
-	errno_t retval;
-	async_wait_for(req, &retval);
-	return retval;
-}
-
-static void remote_ahci_get_sata_device_name(ddf_fun_t *, void *, ipc_call_t *);
-static void remote_ahci_get_num_blocks(ddf_fun_t *, void *, ipc_call_t *);
-static void remote_ahci_get_block_size(ddf_fun_t *, void *, ipc_call_t *);
-static void remote_ahci_read_blocks(ddf_fun_t *, void *, ipc_call_t *);
-static void remote_ahci_write_blocks(ddf_fun_t *, void *, ipc_call_t *);
-
-/** Remote AHCI interface operations. */
-static const remote_iface_func_ptr_t remote_ahci_iface_ops [] = {
-	[IPC_M_AHCI_GET_SATA_DEVICE_NAME] = remote_ahci_get_sata_device_name,
-	[IPC_M_AHCI_GET_NUM_BLOCKS] = remote_ahci_get_num_blocks,
-	[IPC_M_AHCI_GET_BLOCK_SIZE] = remote_ahci_get_block_size,
-	[IPC_M_AHCI_READ_BLOCKS] = remote_ahci_read_blocks,
-	[IPC_M_AHCI_WRITE_BLOCKS] = remote_ahci_write_blocks
-};
-
-/** Remote AHCI interface structure.
- */
-const remote_iface_t remote_ahci_iface = {
-	.method_count = ARRAY_SIZE(remote_ahci_iface_ops),
-	.methods = remote_ahci_iface_ops
-};
-
-void remote_ahci_get_sata_device_name(ddf_fun_t *fun, void *iface,
-    ipc_call_t *call)
-{
-	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
-
-	if (ahci_iface->get_sata_device_name == NULL) {
-		async_answer_0(call, ENOTSUP);
-		return;
-	}
-
-	const size_t sata_dev_name_length =
-	    (size_t) DEV_IPC_GET_ARG1(*call);
-
-	char *sata_dev_name = malloc(sata_dev_name_length);
-	if (sata_dev_name == NULL) {
-		async_answer_0(call, ENOMEM);
-		return;
-	}
-
-	const errno_t ret = ahci_iface->get_sata_device_name(fun,
-	    sata_dev_name_length, sata_dev_name);
-
-	ipc_call_t data;
-	size_t real_size;
-	if ((async_data_read_receive(&data, &real_size)) &&
-	    (real_size == sata_dev_name_length))
-		async_data_read_finalize(&data, sata_dev_name,
-		    sata_dev_name_length);
-
-	free(sata_dev_name);
-	async_answer_0(call, ret);
-}
-
-static void remote_ahci_get_num_blocks(ddf_fun_t *fun, void *iface,
-    ipc_call_t *call)
-{
-	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
-
-	if (ahci_iface->get_num_blocks == NULL) {
-		async_answer_0(call, ENOTSUP);
-		return;
-	}
-
-	uint64_t blocks;
-	const errno_t ret = ahci_iface->get_num_blocks(fun, &blocks);
-
-	if (ret != EOK)
-		async_answer_0(call, ret);
-	else
-		async_answer_2(call, EOK, HI(blocks), LO(blocks));
-}
-
-static void remote_ahci_get_block_size(ddf_fun_t *fun, void *iface,
-    ipc_call_t *call)
-{
-	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
-
-	if (ahci_iface->get_block_size == NULL) {
-		async_answer_0(call, ENOTSUP);
-		return;
-	}
-
-	size_t blocks;
-	const errno_t ret = ahci_iface->get_block_size(fun, &blocks);
-
-	if (ret != EOK)
-		async_answer_0(call, ret);
-	else
-		async_answer_1(call, EOK, blocks);
-}
-
-void remote_ahci_read_blocks(ddf_fun_t *fun, void *iface, ipc_call_t *call)
-{
-	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
-
-	if (ahci_iface->read_blocks == NULL) {
-		async_answer_0(call, ENOTSUP);
-		return;
-	}
-
-	ipc_call_t rcall;
-	size_t size;
-	if (!async_data_read_receive(&rcall, &size)) {
-		async_answer_0(&rcall, EINVAL);
-		async_answer_0(call, EINVAL);
-		return;
-	}
-
-	void *buf = malloc(size);
-	if (buf == NULL) {
-		async_answer_0(&rcall, ENOMEM);
-		async_answer_0(call, ENOMEM);
-		return;
-	}
-
-	uint64_t blocknum =
-	    (((uint64_t) (DEV_IPC_GET_ARG1(*call))) << 32) |
-	    (((uint64_t) (DEV_IPC_GET_ARG2(*call))) & 0xffffffff);
-	size_t cnt = (size_t) DEV_IPC_GET_ARG3(*call);
-
-	errno_t rc = ahci_iface->read_blocks(fun, blocknum, cnt, buf);
-	if (rc != EOK) {
-		async_answer_0(&rcall, ENOMEM);
-		async_answer_0(call, ENOMEM);
-		free(buf);
-		return;
-	}
-
-	async_data_read_finalize(&rcall, buf, size);
-
-	free(buf);
-	async_answer_0(call, EOK);
-}
-
-void remote_ahci_write_blocks(ddf_fun_t *fun, void *iface, ipc_call_t *call)
-{
-	const ahci_iface_t *ahci_iface = (ahci_iface_t *) iface;
-
-	if (ahci_iface->write_blocks == NULL) {
-		async_answer_0(call, ENOTSUP);
-		return;
-	}
-
-	void *data;
-	size_t dsize;
-	errno_t rc = async_data_write_accept(&data, false, 0, 0, 0, &dsize);
-	if (rc != EOK) {
-		async_answer_0(call, rc);
-		return;
-	}
-
-	uint64_t blocknum =
-	    (((uint64_t)(DEV_IPC_GET_ARG1(*call))) << 32) |
-	    (((uint64_t)(DEV_IPC_GET_ARG2(*call))) & 0xffffffff);
-	size_t cnt = (size_t) DEV_IPC_GET_ARG3(*call);
-
-	if (dsize != cnt * 512) {
-		async_answer_0(call, EINVAL);
-		return;
-	}
-
-	rc = ahci_iface->write_blocks(fun, blocknum, cnt, data);
-	free(data);
-	async_answer_0(call, rc);
-}
-
-/**
- * @}
- */
Index: pace/lib/drv/include/ahci_iface.h
===================================================================
--- uspace/lib/drv/include/ahci_iface.h	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ 	(revision )
@@ -1,63 +1,0 @@
-/*
- * Copyright (c) 2012 Petr Jerman
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup libdrv
- * @{
- */
-/** @file
- * @brief AHCI interface definition.
- */
-
-#ifndef LIBDRV_AHCI_IFACE_H_
-#define LIBDRV_AHCI_IFACE_H_
-
-#include "ddf/driver.h"
-#include <async.h>
-
-extern async_sess_t *ahci_get_sess(devman_handle_t, char **);
-
-extern errno_t ahci_get_sata_device_name(async_sess_t *, size_t, char *);
-extern errno_t ahci_get_num_blocks(async_sess_t *, uint64_t *);
-extern errno_t ahci_get_block_size(async_sess_t *, size_t *);
-extern errno_t ahci_read_blocks(async_sess_t *, uint64_t, size_t, void *);
-extern errno_t ahci_write_blocks(async_sess_t *, uint64_t, size_t, void *);
-
-/** AHCI device communication interface. */
-typedef struct {
-	errno_t (*get_sata_device_name)(ddf_fun_t *, size_t, char *);
-	errno_t (*get_num_blocks)(ddf_fun_t *, uint64_t *);
-	errno_t (*get_block_size)(ddf_fun_t *, size_t *);
-	errno_t (*read_blocks)(ddf_fun_t *, uint64_t, size_t, void *);
-	errno_t (*write_blocks)(ddf_fun_t *, uint64_t, size_t, void *);
-} ahci_iface_t;
-
-#endif
-
-/**
- * @}
- */
Index: uspace/lib/drv/meson.build
===================================================================
--- uspace/lib/drv/meson.build	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ uspace/lib/drv/meson.build	(revision 5c55eb7a094000c385bfd4763df91d81b2abe3c8)
@@ -1,3 +1,4 @@
 #
+# Copyright (c) 2025 Jiri Svoboda
 # Copyright (c) 2005 Martin Decky
 # Copyright (c) 2007 Jakub Jermar
@@ -50,4 +51,3 @@
 	'generic/remote_led_dev.c',
 	'generic/remote_battery_dev.c',
-	'generic/remote_ahci.c',
 )
Index: pace/srv/bd/sata_bd/doc/doxygroups.h
===================================================================
--- uspace/srv/bd/sata_bd/doc/doxygroups.h	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ 	(revision )
@@ -1,4 +1,0 @@
-/** @addtogroup sata_bd sata_bd
- * @brief SATA disk driver
- * @ingroup drvs
- */
Index: pace/srv/bd/sata_bd/meson.build
===================================================================
--- uspace/srv/bd/sata_bd/meson.build	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ 	(revision )
@@ -1,30 +1,0 @@
-#
-# Copyright (c) 2012 Petr Jerman
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# - Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# - Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in the
-#   documentation and/or other materials provided with the distribution.
-# - The name of the author may not be used to endorse or promote products
-#   derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
-# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
-# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
-# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
-# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
-# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-
-deps = [ 'drv' ]
-src = files('sata_bd.c')
Index: pace/srv/bd/sata_bd/sata_bd.c
===================================================================
--- uspace/srv/bd/sata_bd/sata_bd.c	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ 	(revision )
@@ -1,298 +1,0 @@
-/*
- * Copyright (c) 2023 Jiri Svoboda
- * Copyright (c) 2012 Petr Jerman
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup sata_bd
- * @{
- */
-
-/**
- * @file
- * @brief SATA disk driver
- *
- */
-
-#include <stddef.h>
-#include <bd_srv.h>
-#include <devman.h>
-#include <errno.h>
-#include <str_error.h>
-#include <stdio.h>
-#include <str.h>
-#include <loc.h>
-#include <macros.h>
-#include <task.h>
-
-#include <ahci_iface.h>
-#include "sata_bd.h"
-
-#define NAME       "sata_bd"
-#define NAMESPACE  "bd"
-
-/** Maximum number of disks handled */
-#define MAXDISKS  256
-
-static loc_srv_t *srv;
-static sata_bd_dev_t disk[MAXDISKS];
-static int disk_count;
-
-static errno_t sata_bd_open(bd_srvs_t *, bd_srv_t *);
-static errno_t sata_bd_close(bd_srv_t *);
-static errno_t sata_bd_read_blocks(bd_srv_t *, aoff64_t, size_t, void *, size_t);
-static errno_t sata_bd_write_blocks(bd_srv_t *, aoff64_t, size_t, const void *, size_t);
-static errno_t sata_bd_get_block_size(bd_srv_t *, size_t *);
-static errno_t sata_bd_get_num_blocks(bd_srv_t *, aoff64_t *);
-
-static bd_ops_t sata_bd_ops = {
-	.open = sata_bd_open,
-	.close = sata_bd_close,
-	.read_blocks = sata_bd_read_blocks,
-	.write_blocks = sata_bd_write_blocks,
-	.get_block_size = sata_bd_get_block_size,
-	.get_num_blocks = sata_bd_get_num_blocks
-};
-
-static sata_bd_dev_t *bd_srv_sata(bd_srv_t *bd)
-{
-	return (sata_bd_dev_t *) bd->srvs->sarg;
-}
-
-/** Find SATA devices in device tree.
- *
- *  @param Device manager handle describing container for searching.
- *
- *  @return EOK if succeed, error code otherwise.
- *
- */
-static errno_t scan_device_tree(devman_handle_t funh)
-{
-	devman_handle_t devh;
-	devman_handle_t *cfuns;
-	size_t count, i;
-	errno_t rc;
-
-	/* If device is SATA, add device to the disk array. */
-	disk[disk_count].sess = ahci_get_sess(funh, &disk[disk_count].dev_name);
-	if (disk[disk_count].sess != NULL) {
-
-		ahci_get_sata_device_name(disk[disk_count].sess,
-		    SATA_DEV_NAME_LENGTH, disk[disk_count].sata_dev_name);
-
-		ahci_get_block_size(disk[disk_count].sess,
-		    &disk[disk_count].block_size);
-
-		ahci_get_num_blocks(disk[disk_count].sess, &disk[disk_count].blocks);
-
-		bd_srvs_init(&disk[disk_count].bds);
-		disk[disk_count].bds.ops = &sata_bd_ops;
-		disk[disk_count].bds.sarg = &disk[disk_count];
-
-		printf("Device %s - %s , blocks: %lu, block_size: %lu\n",
-		    disk[disk_count].dev_name, disk[disk_count].sata_dev_name,
-		    (long unsigned int) disk[disk_count].blocks,
-		    (long unsigned int) disk[disk_count].block_size);
-
-		++disk_count;
-	}
-
-	/* search children */
-	rc = devman_fun_get_child(funh, &devh);
-	if (rc == ENOENT)
-		return EOK;
-
-	if (rc != EOK) {
-		printf(NAME ": Failed getting child device for function %s.\n", "xxx");
-		return rc;
-	}
-
-	rc = devman_dev_get_functions(devh, &cfuns, &count);
-	if (rc != EOK) {
-		printf(NAME ": Failed getting list of functions for device %s.\n",
-		    "xxx");
-		return rc;
-	}
-
-	for (i = 0; i < count; i++)
-		scan_device_tree(cfuns[i]);
-
-	free(cfuns);
-	return EOK;
-}
-
-/** Find sata devices in device tree from root.
- *
- *  @return EOK if succeed, error code otherwise.
- *
- */
-static errno_t get_sata_disks(void)
-{
-	devman_handle_t root_fun;
-	errno_t rc;
-
-	disk_count = 0;
-
-	rc = devman_fun_get_handle("/", &root_fun, 0);
-	if (rc != EOK) {
-		printf(NAME ": Error resolving root function.\n");
-		return EIO;
-	}
-
-	scan_device_tree(root_fun);
-
-	return EOK;
-}
-
-/** Block device connection handler. */
-static void sata_bd_connection(ipc_call_t *icall, void *arg)
-{
-	service_id_t dsid;
-	int disk_id, i;
-
-	/* Get the device service ID. */
-	dsid = ipc_get_arg2(icall);
-
-	/* Determine which disk device is the client connecting to. */
-	disk_id = -1;
-	for (i = 0; i < MAXDISKS; i++)
-		if (disk[i].service_id == dsid)
-			disk_id = i;
-
-	if (disk_id < 0) {
-		async_answer_0(icall, EINVAL);
-		return;
-	}
-
-	bd_conn(icall, &disk[disk_id].bds);
-}
-
-/** Open device. */
-static errno_t sata_bd_open(bd_srvs_t *bds, bd_srv_t *bd)
-{
-	return EOK;
-}
-
-/** Close device. */
-static errno_t sata_bd_close(bd_srv_t *bd)
-{
-	return EOK;
-}
-
-/** Read blocks from partition. */
-static errno_t sata_bd_read_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt, void *buf,
-    size_t size)
-{
-	sata_bd_dev_t *sbd = bd_srv_sata(bd);
-
-	if (size < cnt * sbd->block_size)
-		return EINVAL;
-
-	return ahci_read_blocks(sbd->sess, ba, cnt, buf);
-}
-
-/** Write blocks to partition. */
-static errno_t sata_bd_write_blocks(bd_srv_t *bd, aoff64_t ba, size_t cnt,
-    const void *buf, size_t size)
-{
-	sata_bd_dev_t *sbd = bd_srv_sata(bd);
-
-	if (size < cnt * sbd->block_size)
-		return EINVAL;
-
-	return ahci_write_blocks(sbd->sess, ba, cnt, (void *)buf);
-}
-
-/** Get device block size. */
-static errno_t sata_bd_get_block_size(bd_srv_t *bd, size_t *rsize)
-{
-	sata_bd_dev_t *sbd = bd_srv_sata(bd);
-
-	*rsize = sbd->block_size;
-	return EOK;
-}
-
-/** Get number of blocks on device. */
-static errno_t sata_bd_get_num_blocks(bd_srv_t *bd, aoff64_t *rnb)
-{
-	sata_bd_dev_t *sbd = bd_srv_sata(bd);
-
-	*rnb = sbd->blocks;
-	return EOK;
-}
-
-int main(int argc, char **argv)
-{
-	errno_t rc;
-	category_id_t disk_cat;
-
-	async_set_fallback_port_handler(sata_bd_connection, NULL);
-	rc = loc_server_register(NAME, &srv);
-	if (rc != EOK) {
-		printf(NAME ": Unable to register driver: %s.\n", str_error(rc));
-		return rc;
-	}
-
-	rc = get_sata_disks();
-	if (rc != EOK) {
-		// TODO: log the error
-		return rc;
-	}
-
-	rc = loc_category_get_id("disk", &disk_cat, IPC_FLAG_BLOCKING);
-	if (rc != EOK) {
-		printf("%s: Failed resolving category 'disk': %s.\n", NAME, str_error(rc));
-		return rc;
-	}
-
-	for (int i = 0; i < disk_count; i++) {
-		char name[1024];
-		snprintf(name, 1024, "%s/%s", NAMESPACE, disk[i].dev_name);
-		rc = loc_service_register(srv, name, &disk[i].service_id);
-		if (rc != EOK) {
-			printf(NAME ": Unable to register device %s: %s\n", name, str_error(rc));
-			return rc;
-		}
-
-		rc = loc_service_add_to_cat(srv, disk[i].service_id, disk_cat);
-		if (rc != EOK) {
-			printf("%s: Failed adding %s to category: %s.",
-			    NAME, disk[i].dev_name, str_error(rc));
-			return rc;
-		}
-	}
-
-	printf(NAME ": Accepting connections\n");
-	task_retval(0);
-	async_manager();
-
-	/* Not reached */
-	return 0;
-}
-
-/**
- * @}
- */
Index: pace/srv/bd/sata_bd/sata_bd.h
===================================================================
--- uspace/srv/bd/sata_bd/sata_bd.h	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ 	(revision )
@@ -1,67 +1,0 @@
-/*
- * Copyright (c) 2012 Petr Jerman
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * - Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * - Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * - The name of the author may not be used to endorse or promote products
- *   derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/** @addtogroup sata_bd
- * @{
- */
-/** @file SATA block device driver definitions.
- */
-
-#ifndef __SATA_BD_H__
-#define __SATA_BD_H__
-
-#define SATA_DEV_NAME_LENGTH 256
-
-#include <async.h>
-#include <bd_srv.h>
-#include <loc.h>
-#include <stddef.h>
-#include <stdint.h>
-
-/** SATA Block Device. */
-typedef struct {
-	/** Device name in device tree. */
-	char *dev_name;
-	/** SATA Device name. */
-	char sata_dev_name[SATA_DEV_NAME_LENGTH];
-	/** Session to device methods. */
-	async_sess_t *sess;
-	/** Loc service id. */
-	service_id_t service_id;
-	/** Number of blocks. */
-	uint64_t blocks;
-	/** Size of block. */
-	size_t block_size;
-	/** Block device server structure */
-	bd_srvs_t bds;
-} sata_bd_dev_t;
-
-#endif
-
-/** @}
- */
Index: uspace/srv/meson.build
===================================================================
--- uspace/srv/meson.build	(revision 0f5c4e40438b2f925c877ec2fb5a3ab065007e29)
+++ uspace/srv/meson.build	(revision 5c55eb7a094000c385bfd4763df91d81b2abe3c8)
@@ -1,4 +1,4 @@
 #
-# Copyright (c) 2024 Jiri Svoboda
+# Copyright (c) 2025 Jiri Svoboda
 # Copyright (c) 2019 Jiří Zárevúcky
 # All rights reserved.
@@ -32,5 +32,4 @@
 	'bd/file_bd',
 	'bd/rd',
-	'bd/sata_bd',
 	'bd/vbd',
 	'clipboard',
