From f29e7e30fde2b994c86024659b41f56b64dce911 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 18 Nov 2025 22:09:11 +0100 Subject: fix: kernel: OpenHeFS and NeFS fixes, PCI and DriveMgr fixes. Signed-off-by: Amlal El Mahrouss --- dev/kernel/src/DriveMgr.cc | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) (limited to 'dev/kernel/src/DriveMgr.cc') diff --git a/dev/kernel/src/DriveMgr.cc b/dev/kernel/src/DriveMgr.cc index a0f7bb77..cf31928c 100644 --- a/dev/kernel/src/DriveMgr.cc +++ b/dev/kernel/src/DriveMgr.cc @@ -72,8 +72,6 @@ Void io_drv_output(DriveTrait::DrivePacket& pckt) { /// @param pckt the packet to read. /// @return Void io_drv_init(DriveTrait::DrivePacket& pckt) { - NE_UNUSED(pckt); - #if defined(__ATA_PIO__) || defined(__ATA_DMA__) kATAMaster = 0; kATAIO = 0; @@ -97,10 +95,9 @@ Void io_drv_init(DriveTrait::DrivePacket& pckt) { pckt.fPacketGood = YES; #elif defined(__AHCI__) kAHCIPortsImplemented = 0; + drv_std_init(kAHCIPortsImplemented); - if (drv_std_init(kAHCIPortsImplemented)) { - pckt.fPacketGood = YES; - } + pckt.fPacketGood = kAHCIPortsImplemented > 0; #endif // if defined(__ATA_PIO__) || defined (__ATA_DMA__) } @@ -154,6 +151,8 @@ DriveTrait io_construct_blank_drive() noexcept { namespace Probe { Void io_detect_drive(DriveTrait& trait) { + trait.fInit(trait.fPacket); + EPM_PART_BLOCK block_struct; trait.fPacket.fPacketLba = kEPMBootBlockLba; @@ -163,8 +162,6 @@ namespace Probe { rt_copy_memory((VoidPtr) "fs/detect-packet", trait.fPacket.fPacketMime, rt_string_len("fs/detect-packet")); - trait.fInit(trait.fPacket); - trait.fInput(trait.fPacket); if (rt_string_cmp(block_struct.Magic, kEPMMagic, kEPMMagicLength) == 0) { @@ -215,14 +212,14 @@ namespace Probe { trait.fPacket.fPacketSize = 0UL; trait.fPacket.fPacketContent = nullptr; } -} // namespace Detail +} // namespace Probe /// @brief Fetches the main drive. /// @return the new drive. (returns kEPMDrive if EPM formatted) DriveTrait io_construct_main_drive() noexcept { constexpr auto kMainDrive = "/media/main/"; - DriveTrait trait{}; + DriveTrait trait; rt_copy_memory((VoidPtr) kMainDrive, trait.fName, rt_string_len(kMainDrive)); MUST_PASS(trait.fName[0] != 0); @@ -232,9 +229,26 @@ DriveTrait io_construct_main_drive() noexcept { trait.fInput = io_drv_input; trait.fInit = io_drv_init; trait.fProtocol = io_drv_kind; - + Probe::io_detect_drive(trait); return trait; } + +/// @brief Replacement for io_construct_main_drive that works with IMountpoint. +/// @return the new drive. (returns kEPMDrive if EPM formatted) +Void io_construct_main_drive(DriveTrait& trait) noexcept { + constexpr auto kMainDrive = "/media/main/"; + + rt_copy_memory((VoidPtr) kMainDrive, trait.fName, rt_string_len(kMainDrive)); + MUST_PASS(trait.fName[0] != 0); + + trait.fVerify = io_drv_unimplemented; + trait.fOutput = io_drv_output; + trait.fInput = io_drv_input; + trait.fInit = io_drv_init; + trait.fProtocol = io_drv_kind; + + Probe::io_detect_drive(trait); +} } // namespace Kernel -- cgit v1.2.3