summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
Diffstat (limited to 'dev')
-rw-r--r--dev/ZKAKit/KernelKit/DriveMgr.h1
-rw-r--r--dev/ZKAKit/src/DriveMgr.cc48
2 files changed, 31 insertions, 18 deletions
diff --git a/dev/ZKAKit/KernelKit/DriveMgr.h b/dev/ZKAKit/KernelKit/DriveMgr.h
index db857a3c..95c0cda4 100644
--- a/dev/ZKAKit/KernelKit/DriveMgr.h
+++ b/dev/ZKAKit/KernelKit/DriveMgr.h
@@ -39,6 +39,7 @@ namespace Kernel
kEPTDrive = 0x12, // ESP w/ EPM partition.
kMBRDrive = 0x13, // PC classic partition scheme
kGPTDrive = 0x14, // PC new partition scheme
+ kUnformattedDrive = 0x15,
kStorageCount = 9,
};
diff --git a/dev/ZKAKit/src/DriveMgr.cc b/dev/ZKAKit/src/DriveMgr.cc
index 75aac9aa..8a85780a 100644
--- a/dev/ZKAKit/src/DriveMgr.cc
+++ b/dev/ZKAKit/src/DriveMgr.cc
@@ -141,32 +141,44 @@ namespace Kernel
return trait;
}
- /// @brief Fetches the main drive.
- /// @return the new drive. (returns kEPMDrive if EPM formatted)
- DriveTrait io_construct_main_drive() noexcept
+ namespace Detail
{
- DriveTrait trait;
-
- rt_copy_memory((VoidPtr) "\\Mount\\OS:", trait.fName, rt_string_len("\\Mount\\OS:"));
+ Void ioi_detect_drive(DriveTrait& trait)
+ {
+ _BOOT_BLOCK_STRUCT block_struct;
- _BOOT_BLOCK_STRUCT block_struct;
+ trait.fPacket.fLba = kEPMBaseLba;
+ trait.fPacket.fPacketSize = sizeof(_BOOT_BLOCK_STRUCT);
+ trait.fPacket.fPacketContent = &block_struct;
- trait.fPacket.fLba = kEPMBaseLba;
- trait.fPacket.fPacketSize = sizeof(_BOOT_BLOCK_STRUCT);
- trait.fPacket.fPacketContent = &block_struct;
+ io_drv_input(&trait.fPacket);
- io_drv_input(&trait.fPacket);
+ trait.fKind = kMassStorage;
- trait.fKind = kMassStorage;
+ if (rt_string_cmp(block_struct.Magic, kEPMMagic, kEPMMagicLength) == 0)
+ {
+ trait.fKind |= kEPMDrive;
+ }
+ else
+ {
+ trait.fKind |= kUnformattedDrive;
+ }
- 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;
}
+ }
+
+ /// @brief Fetches the main drive.
+ /// @return the new drive. (returns kEPMDrive if EPM formatted)
+ DriveTrait io_construct_main_drive() noexcept
+ {
+ DriveTrait trait;
+
+ rt_copy_memory((VoidPtr) "\\Mount\\OS:", trait.fName, rt_string_len("\\Mount\\OS:"));
- trait.fPacket.fLba = 0;
- trait.fPacket.fPacketSize = 0UL;
- trait.fPacket.fPacketContent = nullptr;
+ Detail::ioi_detect_drive(trait);
trait.fVerify = io_drv_unimplemented;
trait.fOutput = io_drv_output;