From d8f136a76f44e6c4da66edbc82f09fcc5091a906 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 2 Jul 2026 15:02:02 +0300 Subject: [PATCH] Kernel: Remove the weird StorageController base class This wasn't really used for anything and broke nvme controller as it was now doubly ref counted :P --- kernel/include/kernel/PCI.h | 1 - .../kernel/Storage/ATA/AHCI/Controller.h | 5 +++- kernel/include/kernel/Storage/ATA/ATABus.h | 2 -- .../kernel/Storage/ATA/ATAController.h | 7 +++--- .../include/kernel/Storage/NVMe/Controller.h | 6 ++--- .../kernel/Storage/StorageController.h | 15 ------------ kernel/kernel/PCI.cpp | 6 +++-- kernel/kernel/Storage/ATA/AHCI/Controller.cpp | 10 ++++++++ kernel/kernel/Storage/ATA/ATAController.cpp | 23 +++---------------- kernel/kernel/Storage/NVMe/Controller.cpp | 6 ++--- 10 files changed, 29 insertions(+), 52 deletions(-) delete mode 100644 kernel/include/kernel/Storage/StorageController.h diff --git a/kernel/include/kernel/PCI.h b/kernel/include/kernel/PCI.h index 00095f42..3cc4c99f 100644 --- a/kernel/include/kernel/PCI.h +++ b/kernel/include/kernel/PCI.h @@ -4,7 +4,6 @@ #include #include #include -#include #include diff --git a/kernel/include/kernel/Storage/ATA/AHCI/Controller.h b/kernel/include/kernel/Storage/ATA/AHCI/Controller.h index dae314e7..7b28a344 100644 --- a/kernel/include/kernel/Storage/ATA/AHCI/Controller.h +++ b/kernel/include/kernel/Storage/ATA/AHCI/Controller.h @@ -10,12 +10,14 @@ namespace Kernel { - class AHCIController final : public StorageController, public Interruptable + class AHCIController final : public BAN::RefCounted, public Interruptable { BAN_NON_COPYABLE(AHCIController); BAN_NON_MOVABLE(AHCIController); public: + static BAN::ErrorOr> create(PCI::Device&); + ~AHCIController(); virtual void handle_irq() override; @@ -27,6 +29,7 @@ namespace Kernel : m_pci_device(pci_device) { } BAN::ErrorOr initialize(); + BAN::Optional check_port_type(volatile HBAPortMemorySpace&); private: diff --git a/kernel/include/kernel/Storage/ATA/ATABus.h b/kernel/include/kernel/Storage/ATA/ATABus.h index a7249ece..97dc6888 100644 --- a/kernel/include/kernel/Storage/ATA/ATABus.h +++ b/kernel/include/kernel/Storage/ATA/ATABus.h @@ -56,8 +56,6 @@ namespace Kernel // Non-owning pointers BAN::Vector m_devices; - - friend class ATAController; }; } diff --git a/kernel/include/kernel/Storage/ATA/ATAController.h b/kernel/include/kernel/Storage/ATA/ATAController.h index 49a5cc6a..c7c3395a 100644 --- a/kernel/include/kernel/Storage/ATA/ATAController.h +++ b/kernel/include/kernel/Storage/ATA/ATAController.h @@ -2,23 +2,22 @@ #include #include -#include #include #include namespace Kernel { - class ATAController : public StorageController + class ATAController : public BAN::RefCounted { public: - static BAN::ErrorOr> create(PCI::Device&); - virtual BAN::ErrorOr initialize() override; + static BAN::ErrorOr> create(PCI::Device&); private: ATAController(PCI::Device& pci_device) : m_pci_device(pci_device) { } + BAN::ErrorOr initialize(); private: PCI::Device& m_pci_device; diff --git a/kernel/include/kernel/Storage/NVMe/Controller.h b/kernel/include/kernel/Storage/NVMe/Controller.h index b47e8003..1c48255d 100644 --- a/kernel/include/kernel/Storage/NVMe/Controller.h +++ b/kernel/include/kernel/Storage/NVMe/Controller.h @@ -10,13 +10,13 @@ namespace Kernel { - class NVMeController final : public StorageController, public CharacterDevice + class NVMeController final : public CharacterDevice { BAN_NON_COPYABLE(NVMeController); BAN_NON_MOVABLE(NVMeController); public: - static BAN::ErrorOr> create(PCI::Device&); + static BAN::ErrorOr> create(PCI::Device&); NVMeQueue& io_queue() { return *m_io_queue; } @@ -30,7 +30,7 @@ namespace Kernel private: NVMeController(PCI::Device& pci_device); - virtual BAN::ErrorOr initialize() override; + BAN::ErrorOr initialize(); BAN::ErrorOr identify_controller(); BAN::ErrorOr identify_namespaces(); diff --git a/kernel/include/kernel/Storage/StorageController.h b/kernel/include/kernel/Storage/StorageController.h deleted file mode 100644 index 2c1318b1..00000000 --- a/kernel/include/kernel/Storage/StorageController.h +++ /dev/null @@ -1,15 +0,0 @@ -#pragma once - -#include - -namespace Kernel -{ - - class StorageController : public BAN::RefCounted - { - public: - virtual ~StorageController() {} - virtual BAN::ErrorOr initialize() = 0; - }; - -} diff --git a/kernel/kernel/PCI.cpp b/kernel/kernel/PCI.cpp index 3bd0d974..7a549d99 100644 --- a/kernel/kernel/PCI.cpp +++ b/kernel/kernel/PCI.cpp @@ -235,11 +235,13 @@ namespace Kernel::PCI switch (pci_device.subclass()) { case 0x01: - case 0x05: - case 0x06: if (auto res = ATAController::create(pci_device); res.is_error()) dprintln("ATA: {}", res.error()); break; + case 0x06: + if (auto res = AHCIController::create(pci_device); res.is_error()) + dprintln("AHCI: {}", res.error()); + break; case 0x08: if (auto res = NVMeController::create(pci_device); res.is_error()) dprintln("NVMe: {}", res.error()); diff --git a/kernel/kernel/Storage/ATA/AHCI/Controller.cpp b/kernel/kernel/Storage/ATA/AHCI/Controller.cpp index 3cbb822d..a27f3611 100644 --- a/kernel/kernel/Storage/ATA/AHCI/Controller.cpp +++ b/kernel/kernel/Storage/ATA/AHCI/Controller.cpp @@ -7,6 +7,16 @@ namespace Kernel { + BAN::ErrorOr> AHCIController::create(PCI::Device& pci_device) + { + auto* controller_ptr = new AHCIController(pci_device); + if (controller_ptr == nullptr) + return BAN::Error::from_errno(ENOMEM); + auto controller = BAN::RefPtr::adopt(controller_ptr); + TRY(controller->initialize()); + return controller; + } + BAN::ErrorOr AHCIController::initialize() { m_abar = TRY(m_pci_device.allocate_bar_region(5)); diff --git a/kernel/kernel/Storage/ATA/ATAController.cpp b/kernel/kernel/Storage/ATA/ATAController.cpp index 86de85c8..662ad366 100644 --- a/kernel/kernel/Storage/ATA/ATAController.cpp +++ b/kernel/kernel/Storage/ATA/ATAController.cpp @@ -9,29 +9,12 @@ namespace Kernel { - BAN::ErrorOr> ATAController::create(PCI::Device& pci_device) + BAN::ErrorOr> ATAController::create(PCI::Device& pci_device) { - StorageController* controller_ptr = nullptr; - - switch (pci_device.subclass()) - { - case 0x01: - controller_ptr = new ATAController(pci_device); - break; - case 0x05: - dwarnln("unsupported DMA ATA Controller"); - return BAN::Error::from_errno(ENOTSUP); - case 0x06: - controller_ptr = new AHCIController(pci_device); - break; - default: - ASSERT_NOT_REACHED(); - } - + auto* controller_ptr = new ATAController(pci_device); if (controller_ptr == nullptr) return BAN::Error::from_errno(ENOMEM); - - auto controller = BAN::RefPtr::adopt(controller_ptr); + auto controller = BAN::RefPtr::adopt(controller_ptr); TRY(controller->initialize()); return controller; } diff --git a/kernel/kernel/Storage/NVMe/Controller.cpp b/kernel/kernel/Storage/NVMe/Controller.cpp index 22cd8230..9a7ece54 100644 --- a/kernel/kernel/Storage/NVMe/Controller.cpp +++ b/kernel/kernel/Storage/NVMe/Controller.cpp @@ -16,12 +16,12 @@ namespace Kernel return minor++; } - BAN::ErrorOr> NVMeController::create(PCI::Device& pci_device) + BAN::ErrorOr> NVMeController::create(PCI::Device& pci_device) { auto* controller_ptr = new NVMeController(pci_device); if (controller_ptr == nullptr) return BAN::Error::from_errno(ENOMEM); - auto controller = BAN::RefPtr::adopt(controller_ptr); + auto controller = BAN::RefPtr::adopt(controller_ptr); TRY(controller->initialize()); return controller; } @@ -115,8 +115,6 @@ namespace Kernel DevFileSystem::get().add_device(this); - StorageController::ref(); - return {}; }