diff options
Diffstat (limited to 'Private')
22 files changed, 113 insertions, 85 deletions
diff --git a/Private/Drivers/AHCI/API.hxx b/Private/Drivers/AHCI/API.hxx new file mode 100644 index 00000000..8b137891 --- /dev/null +++ b/Private/Drivers/AHCI/API.hxx @@ -0,0 +1 @@ + diff --git a/Private/EFIKit/.gitkeep b/Private/FirmwareKit/.gitkeep index e69de29b..e69de29b 100644 --- a/Private/EFIKit/.gitkeep +++ b/Private/FirmwareKit/.gitkeep diff --git a/Private/EFIKit/UEFI.hxx b/Private/FirmwareKit/EFI.hxx index de211a4a..3ef28288 100644 --- a/Private/EFIKit/UEFI.hxx +++ b/Private/FirmwareKit/EFI.hxx @@ -7,4 +7,5 @@ * ======================================================== */ -#include <EFIKit/EFI.hxx> +#include <FirmwareKit/EFI/API.hxx> +#include <FirmwareKit/EFI/EFI.hxx> diff --git a/Private/EFIKit/Api.hxx b/Private/FirmwareKit/EFI/API.hxx index d2cb73f8..8856c676 100644 --- a/Private/EFIKit/Api.hxx +++ b/Private/FirmwareKit/EFI/API.hxx @@ -10,7 +10,7 @@ #ifndef __EFI_API__ #define __EFI_API__ -#include <EFIKit/EFI.hxx> +#include <FirmwareKit/EFI.hxx> #include <KernelKit/MSDOS.hpp> #include <KernelKit/PE.hpp> diff --git a/Private/EFIKit/EFI.hxx b/Private/FirmwareKit/EFI/EFI.hxx index aeadfc01..aeadfc01 100644 --- a/Private/EFIKit/EFI.hxx +++ b/Private/FirmwareKit/EFI/EFI.hxx diff --git a/Private/EFIKit/EPM.hxx b/Private/FirmwareKit/EPM.hxx index db6b8b2f..77f9901a 100644 --- a/Private/EFIKit/EPM.hxx +++ b/Private/FirmwareKit/EPM.hxx @@ -14,9 +14,9 @@ #ifndef __PARTITION_MAP__ #define __PARTITION_MAP__ -#define kUUIDLen 37 -#define kNameLen 32 -#define kMagicLen 4 +#define kEPMUUIDLength 37 +#define kEPMNameLength 32 +#define kEPMMagicLength 4 /* the first 512 > x > 1024 bytes of a disk contains this headers. */ @@ -25,9 +25,9 @@ * boot code info */ struct __attribute__((packed)) BootBlock { - char magic[kMagicLen]; - char name[kNameLen]; - char uuid[kUUIDLen]; + char magic[kEPMMagicLength]; + char name[kEPMNameLength]; + char uuid[kEPMUUIDLength]; int version; long long int num_blocks; long long int sector_sz; diff --git a/Private/EFIKit/Handover.hxx b/Private/FirmwareKit/Handover.hxx index c85eaddd..c85eaddd 100644 --- a/Private/EFIKit/Handover.hxx +++ b/Private/FirmwareKit/Handover.hxx diff --git a/Private/KernelKit/DriveManager.hpp b/Private/KernelKit/DriveManager.hpp index 8e6aaefd..d48b8aae 100644 --- a/Private/KernelKit/DriveManager.hpp +++ b/Private/KernelKit/DriveManager.hpp @@ -11,7 +11,9 @@ #define __DRIVE_MANAGER__ #include <CompilerKit/CompilerKit.hpp> +#include <KernelKit/DebugOutput.hpp> #include <KernelKit/DeviceManager.hpp> +#include <KernelKit/HError.hpp> #include <NewKit/Defines.hpp> #include <NewKit/String.hpp> @@ -41,17 +43,15 @@ struct DriveTraits final { DriveID fId; // Drive id. Int32 fFlags; // fReadOnly, fXPMDrive, fXPTDrive - //! disk mount, unmount operations - void (*fMount)(void); - void (*fUnmount)(void); - - bool (*fReady)(void); //! is drive ready? + Handle fDriveHandle; //! for StorageKit. struct DrivePacket final { voidPtr fPacketContent; // packet body. Char fPacketMime[32]; //! identify what we're sending. SizeT fPacketSize; // packet size + UInt32 fPacketCRC32; // sanity crc, in case if good is set to false + Boolean fPacketGood; } fPacket; }; @@ -61,23 +61,44 @@ struct DriveTraits final { #define kPacketZip "file/x-zip" //! drive as a device. -typedef DeviceInterface<DriveTraits> Drive; -typedef Drive *DrivePtr; +typedef DeviceInterface<DriveTraits> DriveDevice; +typedef DriveDevice* DriveDevicePtr; -class DriveSelector final { +class Mountpoint final { public: - explicit DriveSelector(); - ~DriveSelector(); + explicit Mountpoint() = default; + ~Mountpoint() = default; - public: - HCORE_COPY_DEFAULT(DriveSelector); + HCORE_COPY_DEFAULT(Mountpoint); - DriveTraits &GetMounted(); - bool Mount(DriveTraits *drive); - DriveTraits *Unmount(); + public: + DriveDevicePtr A() { return mA; } + DriveDevicePtr B() { return mB; } + DriveDevicePtr C() { return mC; } + DriveDevicePtr D() { return mD; } + + DriveDevicePtr* GetAddressOf(int index) { + switch (index) { + case 0: + return &mA; + case 1: + return &mB; + case 2: + return &mC; + case 3: + return &mD; + default: { + GetLastError() = kErrorNoSuchDisk; + kcout << "Krnl\\Mountpoint: Check HError.\n"; + break; + } + } + + return nullptr; + } private: - DriveTraits *fDrive; + DriveDevicePtr mA, mB, mC, mD; }; } // namespace HCore diff --git a/Private/KernelKit/HError.hpp b/Private/KernelKit/HError.hpp index 247608f9..f050027f 100644 --- a/Private/KernelKit/HError.hpp +++ b/Private/KernelKit/HError.hpp @@ -27,6 +27,7 @@ inline constexpr HError kErrorThreadLocalStorage = 41; inline constexpr HError kErrorMath = 42; inline constexpr HError kErrorNoNetwork = 43; inline constexpr HError kErrorHeapOutOfMemory = 44; +inline constexpr HError kErrorNoSuchDisk = 45; Boolean ke_bug_check(void) noexcept; } // namespace HCore diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx index 5128d02f..81624ce5 100644 --- a/Private/NewBoot/BootKit/BootKit.hxx +++ b/Private/NewBoot/BootKit/BootKit.hxx @@ -19,7 +19,7 @@ class BFileReader; class BFileRunner; #include <BootKit/Arch/ATA.hxx> -#include <EFIKit/EFI.hxx> +#include <FirmwareKit/EFI.hxx> #include <NewKit/Defines.hpp> using namespace HCore; diff --git a/Private/NewBoot/BootKit/Protocol.hxx b/Private/NewBoot/BootKit/Protocol.hxx index 055858a8..d3dc1ab1 100644 --- a/Private/NewBoot/BootKit/Protocol.hxx +++ b/Private/NewBoot/BootKit/Protocol.hxx @@ -9,5 +9,5 @@ #pragma once -#include <EFIKit/EFI.hxx> -#include <EFIKit/Handover.hxx> +#include <FirmwareKit/EFI.hxx> +#include <FirmwareKit/Handover.hxx> diff --git a/Private/NewBoot/NetBoot/EfiModule.cxx b/Private/NewBoot/NetBoot/EfiModule.cxx index a0ce13a5..36a7288c 100644 --- a/Private/NewBoot/NetBoot/EfiModule.cxx +++ b/Private/NewBoot/NetBoot/EfiModule.cxx @@ -7,8 +7,7 @@ * ======================================================== */ -#include <EFIKit/Api.hxx> -#include <EFIKit/EFI.hxx> +#include <FirmwareKit/EFI.hxx> extern "C" Int32 EfiMain(EfiHandlePtr handle, EfiSystemTable* SystemTable) { return kEfiOk; diff --git a/Private/NewBoot/Source/BootMain.cxx b/Private/NewBoot/Source/BootMain.cxx index c2ee87e3..35270b4b 100644 --- a/Private/NewBoot/Source/BootMain.cxx +++ b/Private/NewBoot/Source/BootMain.cxx @@ -10,7 +10,6 @@ #define __BOOTLOADER__ 1 #include <BootKit/BootKit.hxx> -#include <EFIKit/Api.hxx> #include <HALKit/AMD64/ACPI/ACPI.hpp> #include <KernelKit/MSDOS.hpp> #include <KernelKit/PE.hpp> diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx index 6696a1b4..193184c4 100644 --- a/Private/NewBoot/Source/FileReader.cxx +++ b/Private/NewBoot/Source/FileReader.cxx @@ -13,8 +13,7 @@ ------------------------------------------- */ #include <BootKit/BootKit.hxx> -#include <EFIKit/Api.hxx> -#include <EFIKit/Handover.hxx> +#include <FirmwareKit/Handover.hxx> /// BUGS: 0 diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx index 04755dcf..0adf7707 100644 --- a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx @@ -20,7 +20,6 @@ #include <BootKit/Arch/ATA.hxx> #include <BootKit/BootKit.hxx> -#include <EFIKit/Api.hxx> /// bugs: 0 diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx index e6c962b1..ff07b4c7 100644 --- a/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-Platform.cxx @@ -16,7 +16,6 @@ #include <BootKit/BootKit.hxx> #include <BootKit/Platform.hxx> -#include <EFIKit/Api.hxx> #ifndef __BUNDLE_KERNEL__ diff --git a/Private/NewBoot/Source/String.cxx b/Private/NewBoot/Source/String.cxx index c59e2bba..9fbe1a11 100644 --- a/Private/NewBoot/Source/String.cxx +++ b/Private/NewBoot/Source/String.cxx @@ -12,7 +12,6 @@ ------------------------------------------- */ #include <BootKit/BootKit.hxx> -#include <EFIKit/Api.hxx> /// bugs 0 diff --git a/Private/NewBoot/Source/TextWriter.cxx b/Private/NewBoot/Source/TextWriter.cxx index fe058aa4..b35866a5 100644 --- a/Private/NewBoot/Source/TextWriter.cxx +++ b/Private/NewBoot/Source/TextWriter.cxx @@ -12,7 +12,6 @@ ------------------------------------------- */ #include <BootKit/BootKit.hxx> -#include <EFIKit/Api.hxx> /// BUGS: 0 diff --git a/Private/NewBoot/Source/Utils.cxx b/Private/NewBoot/Source/Utils.cxx index 4165af2e..4f7293bc 100644 --- a/Private/NewBoot/Source/Utils.cxx +++ b/Private/NewBoot/Source/Utils.cxx @@ -8,8 +8,7 @@ */ #include <BootKit/BootKit.hxx> -#include <EFIKit/Api.hxx> -#include <EFIKit/EFI.hxx> +#include <FirmwareKit/EFI.hxx> /// BUGS: 0 diff --git a/Private/Source/DriveManager.cxx b/Private/Source/DriveManager.cxx index 371758b1..27f6cc42 100644 --- a/Private/Source/DriveManager.cxx +++ b/Private/Source/DriveManager.cxx @@ -10,47 +10,4 @@ #include <KernelKit/DebugOutput.hpp> #include <KernelKit/DriveManager.hpp> -namespace HCore { -DriveSelector::DriveSelector() : fDrive(nullptr) {} - -DriveSelector::~DriveSelector() { - if (fDrive) { - this->Unmount(); - } -} - -DriveTraits &DriveSelector::GetMounted() { - MUST_PASS(fDrive != nullptr); - return *fDrive; -} - -bool DriveSelector::Mount(DriveTraits *drive) { - if (drive && drive->fReady()) { - if (fDrive != nullptr) { - this->Unmount(); - } - - fDrive = drive; - fDrive->fMount(); - - kcout << "Mount: " << fDrive->fName << "\n"; - - return true; - } - - return false; -} - -DriveTraits *DriveSelector::Unmount() { - if (!fDrive) return nullptr; - - DriveTraits *drivePointer = fDrive; - - fDrive->fUnmount(); - fDrive = nullptr; - - kcout << "Unmount: " << fDrive->fName << "\n"; - - return drivePointer; -} -} // namespace HCore +namespace HCore {} // namespace HCore diff --git a/Private/Source/KernelMain.cxx b/Private/Source/KernelMain.cxx index e641c7e9..1b2698c4 100644 --- a/Private/Source/KernelMain.cxx +++ b/Private/Source/KernelMain.cxx @@ -8,7 +8,7 @@ */ #include <ArchKit/ArchKit.hpp> -#include <EFIKit/Handover.hxx> +#include <FirmwareKit/Handover.hxx> #include <KernelKit/FileManager.hpp> #include <KernelKit/Framebuffer.hpp> #include <KernelKit/PEFCodeManager.hxx> diff --git a/Private/Source/NewFS+IO.cxx b/Private/Source/NewFS+IO.cxx index 681b198a..2e6559c5 100644 --- a/Private/Source/NewFS+IO.cxx +++ b/Private/Source/NewFS+IO.cxx @@ -18,8 +18,63 @@ #ifdef __FSKIT_NEWFS__ -/// @brief This implements NewFS with Device Abstraction in mind. +#include <FirmwareKit/EPM.hxx> -/// BUGS: 0 +/// Useful macros. + +#define NEWFS_WRITE(DRV, TRAITS, MP) (*MP->DRV()) << TRAITS +#define NEWFS_READ(DRV, TRAITS, MP) (*MP->DRV()) >> TRAITS + +using namespace HCore; + +Int32 KeHCFSRead(Mountpoint* Mnt, DriveTraits& DrvTraits, Int32 DrvIndex) { + if (!Mnt) return -1; + + switch (DrvIndex) { + case 0: { + NEWFS_READ(A, DrvTraits, Mnt); + break; + } + case 1: { + NEWFS_READ(B, DrvTraits, Mnt); + break; + } + case 2: { + NEWFS_READ(C, DrvTraits, Mnt); + break; + } + case 3: { + NEWFS_READ(D, DrvTraits, Mnt); + break; + } + } + + return DrvTraits.fPacket.fPacketGood; +} + +Int32 KeHCFSWrite(Mountpoint* Mnt, DriveTraits& DrvTraits, Int32 DrvIndex) { + if (!Mnt) return -1; + + switch (DrvIndex) { + case 0: { + NEWFS_WRITE(A, DrvTraits, Mnt); + break; + } + case 1: { + NEWFS_WRITE(B, DrvTraits, Mnt); + break; + } + case 2: { + NEWFS_WRITE(C, DrvTraits, Mnt); + break; + } + case 3: { + NEWFS_WRITE(D, DrvTraits, Mnt); + break; + } + } + + return DrvTraits.fPacket.fPacketGood; +} #endif // ifdef __FSKIT_NEWFS__ |
