diff options
| author | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-04-04 19:46:31 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@el-mahrouss-logic.com> | 2024-04-04 19:46:31 +0200 |
| commit | a45872967f07906297782cd04223706cfc326219 (patch) | |
| tree | f48d43749e4a1536d34e6c7dbb5b25defb8656fa /Private/NewBoot/BootKit | |
| parent | c33efb3e8a31435b37ed2c55375eec80c9b23155 (diff) | |
NewBoot: Major bootloader improvements, use __EFI_x86_64__ on EFI platforms, add common device class.
Meta: Upate specs and kernel-design.
Signed-off-by: Amlal El Mahrouss <amlal@el-mahrouss-logic.com>
Diffstat (limited to 'Private/NewBoot/BootKit')
| -rw-r--r-- | Private/NewBoot/BootKit/BootKit.hxx | 27 | ||||
| -rw-r--r-- | Private/NewBoot/BootKit/Device.hxx | 34 | ||||
| -rw-r--r-- | Private/NewBoot/BootKit/HW/ATA.hxx (renamed from Private/NewBoot/BootKit/Arch/ATA.hxx) | 16 | ||||
| -rw-r--r-- | Private/NewBoot/BootKit/HW/SATA.hxx (renamed from Private/NewBoot/BootKit/Arch/SATA.hxx) | 0 |
4 files changed, 61 insertions, 16 deletions
diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx index be46f64c..66a9aa67 100644 --- a/Private/NewBoot/BootKit/BootKit.hxx +++ b/Private/NewBoot/BootKit/BootKit.hxx @@ -16,11 +16,13 @@ class BFileReader; class BFileRunner; class BVersionString; -#include <BootKit/Arch/ATA.hxx> +#include <BootKit/HW/ATA.hxx> #include <CompilerKit/Version.hxx> +#ifdef __EFI_x86_64__ #include <FirmwareKit/EFI.hxx> -#include <NewKit/Defines.hpp> +#endif // ifdef __EFI_x86_64__ #include <FirmwareKit/EPM.hxx> +#include <NewKit/Defines.hpp> using namespace NewOS; @@ -42,6 +44,7 @@ typedef Char CharacterTypeUTF8; */ class BTextWriter final { BTextWriter &_Write(const Long &num); + public: BTextWriter &Write(const Long &num); BTextWriter &Write(const UChar *str); @@ -76,7 +79,8 @@ NewOS::SizeT BSetMem(CharacterTypeUTF16 *src, const CharacterTypeUTF16 byte, */ class BFileReader final { public: - explicit BFileReader(const CharacterTypeUTF16 *path, EfiHandlePtr ImageHandle); + explicit BFileReader(const CharacterTypeUTF16 *path, + EfiHandlePtr ImageHandle); ~BFileReader(); Void ReadAll(); @@ -163,9 +167,7 @@ inline UInt32 In32(UInt16 port) { return value; } -inline Void rt_hlt() { - asm volatile("hlt"); -} +inline Void rt_hlt() { asm volatile("hlt"); } #endif // __EFI_x86_64__ @@ -181,7 +183,8 @@ const UInt32 kRgbBlue = 0x00FF0000; const UInt32 kRgbBlack = 0x00000000; const UInt32 kRgbWhite = 0x00FFFFFF; -/** QT GOP and related. */ +#ifdef __EFI_x86_64__ +/** GOP and related. */ inline EfiGraphicsOutputProtocol *kGop; inline UInt16 kStride; inline EfiGUID kGopGuid; @@ -199,10 +202,18 @@ inline Void InitGOP() noexcept { kStride = 4; } +#endif // __EFI_x86_64__ class BVersionString final { public: static const CharacterTypeUTF16 *Shared() { return BOOTLOADER_VERSION; } }; -EXTERN_C Boolean boot_write_epm_partition(const Char* namePart, SizeT namePartLength, BootDeviceATA* ataInterface); +/// @brief Writes an EPM partition on the main disk. +/// @param namePart the partition's name +/// @param namePartLength the partition name's length +/// @param bootDev the disk interface. +/// @return +EXTERN_C Boolean boot_write_epm_partition(const Char *namePart, + SizeT namePartLength, + BootDevice *bootDev); diff --git a/Private/NewBoot/BootKit/Device.hxx b/Private/NewBoot/BootKit/Device.hxx new file mode 100644 index 00000000..bc50a576 --- /dev/null +++ b/Private/NewBoot/BootKit/Device.hxx @@ -0,0 +1,34 @@ +/* ------------------------------------------- + + Copyright Mahrouss Logic + +------------------------------------------- */ + +#pragma once + +#include <Builtins/ATA/Defines.hxx> + +using namespace NewOS; + +/// @brief Device type. +class Device { + public: + Device() = default; + virtual ~Device() = default; + + HCORE_MOVE_DEFAULT(Device); + + struct Trait { + SizeT mBase{1024}; + SizeT mSize{1024}; +}; + + virtual Trait& Leak() = 0; + + virtual Device& Read(Char* Buf, const SizeT& SecCount) = 0; + virtual Device& Write(Char* Buf, const SizeT& SecCount) = 0; +}; + +typedef Device BootDevice; +typedef Device NetworkDevice; +typedef Device DiskDevice; diff --git a/Private/NewBoot/BootKit/Arch/ATA.hxx b/Private/NewBoot/BootKit/HW/ATA.hxx index 5501f947..40402a86 100644 --- a/Private/NewBoot/BootKit/Arch/ATA.hxx +++ b/Private/NewBoot/BootKit/HW/ATA.hxx @@ -7,10 +7,11 @@ #pragma once #include <Builtins/ATA/Defines.hxx> +#include <BootKit/Device.hxx> using namespace NewOS; -class BootDeviceATA final { +class BootDeviceATA final : public Device { public: enum { kPrimary = ATA_PRIMARY_IO, @@ -22,9 +23,7 @@ class BootDeviceATA final { HCORE_COPY_DEFAULT(BootDeviceATA); - struct ATATrait final { - SizeT mBase{1024}; - SizeT mSize{1024}; + struct ATATrait final : public Device::Trait { UInt16 mBus{kPrimary}; UInt8 mMaster{0}; Boolean mErr{false}; @@ -32,13 +31,14 @@ class BootDeviceATA final { operator bool() { return !mErr; } }; + public: operator bool(); - BootDeviceATA& Read(Char* Buf, const SizeT& SecCount); - BootDeviceATA& Write(Char* Buf, const SizeT& SecCount); + BootDeviceATA& Read(Char* Buf, const SizeT& SecCount) override; + BootDeviceATA& Write(Char* Buf, const SizeT& SecCount) override; - ATATrait& Leak(); + ATATrait& Leak() override; private: ATATrait mTrait; -}; +};
\ No newline at end of file diff --git a/Private/NewBoot/BootKit/Arch/SATA.hxx b/Private/NewBoot/BootKit/HW/SATA.hxx index cbaeb404..cbaeb404 100644 --- a/Private/NewBoot/BootKit/Arch/SATA.hxx +++ b/Private/NewBoot/BootKit/HW/SATA.hxx |
