From 195c5e92a40580b9c05ec77df4da80520ba0b7ba Mon Sep 17 00:00:00 2001 From: Bananymous Date: Mon, 22 Apr 2024 13:45:35 +0300 Subject: [PATCH] Kernel: Add floating bus detection for ATA Bus --- kernel/kernel/Storage/ATA/ATABus.cpp | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/kernel/kernel/Storage/ATA/ATABus.cpp b/kernel/kernel/Storage/ATA/ATABus.cpp index 7ff38820..d2d2a0c1 100644 --- a/kernel/kernel/Storage/ATA/ATABus.cpp +++ b/kernel/kernel/Storage/ATA/ATABus.cpp @@ -19,6 +19,11 @@ namespace Kernel if (bus_ptr == nullptr) return BAN::Error::from_errno(ENOMEM); auto bus = BAN::RefPtr::adopt(bus_ptr); + if (bus->io_read(ATA_PORT_STATUS) == 0x00) + { + dprintln("Floating ATA bus on IO port 0x{H}", base); + return BAN::Error::from_errno(ENODEV); + } bus->set_irq(irq); TRY(bus->initialize()); return bus; @@ -73,15 +78,6 @@ namespace Kernel select_delay(); } - static bool identify_all_same(BAN::Span identify_data) - { - uint16_t value = identify_data[0]; - for (size_t i = 1; i < 256; i++) - if (identify_data[i] != value) - return false; - return true; - } - BAN::ErrorOr ATABus::identify(bool secondary, BAN::Span buffer) { // Try to detect whether port contains device @@ -145,10 +141,6 @@ namespace Kernel ASSERT(buffer.size() >= 256); read_buffer(ATA_PORT_DATA, buffer.data(), 256); - - if (identify_all_same(buffer)) - return BAN::Error::from_errno(ENODEV); - return type; }