diff --git a/repos/os/src/drivers/ahci/README b/repos/os/src/drivers/ahci/README
index 01447b37d3..e112014ba8 100644
--- a/repos/os/src/drivers/ahci/README
+++ b/repos/os/src/drivers/ahci/README
@@ -17,7 +17,7 @@ which client can access a certain device:
!
!
!
-!
+!
!
!
!
@@ -27,4 +27,5 @@ which client can access a certain device:
In the example above, a session request labeled with "test-ahci" gains access to
a device with certain model and serial numbers, while "bench" gains access to
-device at port 1.
+device at port 1. ATAPI support is by default disabled and can be enabled by
+setting the config attribute "atapi" to "yes".
diff --git a/repos/os/src/drivers/ahci/ahci.cc b/repos/os/src/drivers/ahci/ahci.cc
index 9feec71d74..9a27dfda82 100644
--- a/repos/os/src/drivers/ahci/ahci.cc
+++ b/repos/os/src/drivers/ahci/ahci.cc
@@ -49,10 +49,12 @@ struct Ahci
Signal_rpc_member irq;
Signal_rpc_member device_ready;
unsigned ready_count = 0;
+ bool enable_atapi;
- Ahci(Ahci_root &root)
+ Ahci(Ahci_root &root, bool support_atapi)
: root(root), irq(root.entrypoint(), *this, &Ahci::handle_irq),
- device_ready(root.entrypoint(), *this, &Ahci::ready)
+ device_ready(root.entrypoint(), *this, &Ahci::ready),
+ enable_atapi(support_atapi)
{
info();
@@ -68,7 +70,7 @@ struct Ahci
bool atapi(unsigned sig)
{
- return sig == ATAPI_SIG_QEMU || sig == ATAPI_SIG;
+ return enable_atapi && (sig == ATAPI_SIG_QEMU || sig == ATAPI_SIG);
}
bool ata(unsigned sig)
@@ -208,9 +210,9 @@ static Ahci *sata_ahci(Ahci *ahci = 0)
}
-void Ahci_driver::init(Ahci_root &root)
+void Ahci_driver::init(Ahci_root &root, bool support_atapi)
{
- static Ahci ahci(root);
+ static Ahci ahci(root, support_atapi);
sata_ahci(&ahci);
}
diff --git a/repos/os/src/drivers/ahci/ahci.h b/repos/os/src/drivers/ahci/ahci.h
index a316a31d11..ff7e152310 100644
--- a/repos/os/src/drivers/ahci/ahci.h
+++ b/repos/os/src/drivers/ahci/ahci.h
@@ -36,7 +36,7 @@ struct Ahci_root
namespace Ahci_driver {
- void init(Ahci_root &ep);
+ void init(Ahci_root &ep, bool support_atapi);
bool avail(long device_num);
long device_number(char const *model_num, char const *serial_num);
diff --git a/repos/os/src/drivers/ahci/main.cc b/repos/os/src/drivers/ahci/main.cc
index c7e2e9b114..455cff9d9a 100644
--- a/repos/os/src/drivers/ahci/main.cc
+++ b/repos/os/src/drivers/ahci/main.cc
@@ -155,7 +155,8 @@ struct Main
: root(ep, Genode::env()->heap())
{
PINF("--- Starting AHCI driver -> done right .-) --\n");
- Ahci_driver::init(root);
+ bool support_atapi = Genode::config()->xml_node().attribute_value("atapi", false);
+ Ahci_driver::init(root, support_atapi);
}
};