diff options
| author | Amlal <amlal.elmahrouss@icloud.com> | 2024-10-28 17:06:06 +0100 |
|---|---|---|
| committer | Amlal <amlal.elmahrouss@icloud.com> | 2024-10-28 17:06:06 +0100 |
| commit | 06c4427923d78c1941cb64dba44e6c3d6e8210fe (patch) | |
| tree | 280895b3069bc5d50199fcc13bd9b23c4d80a96f /dev/ZKAKit/src | |
| parent | 6be176de2e92300227cfa826063a5f69e10626a8 (diff) | |
IMP: Detect EPM drives when mouting main drive.
Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/ZKAKit/src')
| -rw-r--r-- | dev/ZKAKit/src/DriveMgr.cc | 36 | ||||
| -rw-r--r-- | dev/ZKAKit/src/FS/NeFS.cc | 2 |
2 files changed, 26 insertions, 12 deletions
diff --git a/dev/ZKAKit/src/DriveMgr.cc b/dev/ZKAKit/src/DriveMgr.cc index f89f29fe..75aac9aa 100644 --- a/dev/ZKAKit/src/DriveMgr.cc +++ b/dev/ZKAKit/src/DriveMgr.cc @@ -7,7 +7,7 @@ #include <KernelKit/DebugOutput.h> #include <KernelKit/DriveMgr.h> #include <NewKit/Utils.h> - +#include <FirmwareKit/EPM.h> #include <Modules/ATA/ATA.h> #include <Modules/AHCI/AHCI.h> #include <Modules/NVME/NVME.h> @@ -112,12 +112,6 @@ namespace Kernel return "Not Loaded"; } #endif -#ifdef __ZKA_ED__ - const Char* io_drv_kind(Void) - { - return "C++ Code Editor"; - } -#endif /// @brief Unimplemented drive function. /// @param pckt the packet to read. @@ -142,17 +136,37 @@ namespace Kernel trait.fInit = io_drv_unimplemented; trait.fDriveKind = io_drv_kind; + kcout << "Construct: " << trait.fName << ".\r"; + return trait; } /// @brief Fetches the main drive. - /// @return the new drive. + /// @return the new drive. (returns kEPMDrive if EPM formatted) DriveTrait io_construct_main_drive() noexcept { DriveTrait trait; - rt_copy_memory((VoidPtr) "\\Mount\\MainDisk:", trait.fName, rt_string_len("\\Mount\\MainDisk:")); - trait.fKind = kMassStorage | kEPMDrive; + rt_copy_memory((VoidPtr) "\\Mount\\OS:", trait.fName, rt_string_len("\\Mount\\OS:")); + + _BOOT_BLOCK_STRUCT block_struct; + + trait.fPacket.fLba = kEPMBaseLba; + trait.fPacket.fPacketSize = sizeof(_BOOT_BLOCK_STRUCT); + trait.fPacket.fPacketContent = &block_struct; + + io_drv_input(&trait.fPacket); + + trait.fKind = kMassStorage; + + if (rt_string_cmp(block_struct.Magic, kEPMMagic, kEPMMagicLength) == 0) + { + trait.fKind |= kEPMDrive; + } + + trait.fPacket.fLba = 0; + trait.fPacket.fPacketSize = 0UL; + trait.fPacket.fPacketContent = nullptr; trait.fVerify = io_drv_unimplemented; trait.fOutput = io_drv_output; @@ -160,7 +174,7 @@ namespace Kernel trait.fInit = io_drv_init; trait.fDriveKind = io_drv_kind; - kcout << "Constructed drive successfully.\r"; + kcout << "Construct: " << trait.fName << ".\r"; return trait; } diff --git a/dev/ZKAKit/src/FS/NeFS.cc b/dev/ZKAKit/src/FS/NeFS.cc index cff84ccd..6f8ffa14 100644 --- a/dev/ZKAKit/src/FS/NeFS.cc +++ b/dev/ZKAKit/src/FS/NeFS.cc @@ -518,7 +518,7 @@ bool NeFSParser::Format(_Input _Output DriveTrait* drive, _Input const Lba endLb rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(cBlockName)), epmBoot->Name, rt_string_len(cBlockName)); rt_copy_memory(reinterpret_cast<VoidPtr>(const_cast<Char*>(kEPMMagic)), epmBoot->Magic, rt_string_len(kEPMMagic)); - Lba outEpmLba = kEpmBase; + Lba outEpmLba = kEPMBaseLba; Char buf[kNeFSSectorSz]; |
