diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-18 22:09:11 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-11-18 22:09:11 +0100 |
| commit | f29e7e30fde2b994c86024659b41f56b64dce911 (patch) | |
| tree | aea2324ca72b09fe32b29aa280fc43d4984956ef /dev/kernel/src/DriveMgr.cc | |
| parent | ae9267caf5ec8a247206d660109cd377be6bd6cd (diff) | |
fix: kernel: OpenHeFS and NeFS fixes, PCI and DriveMgr fixes.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/src/DriveMgr.cc')
| -rw-r--r-- | dev/kernel/src/DriveMgr.cc | 34 |
1 files changed, 24 insertions, 10 deletions
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 |
