summaryrefslogtreecommitdiffhomepage
path: root/Private/NewBoot/BootKit
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-04-04 19:46:31 +0200
committerAmlal El Mahrouss <amlal@el-mahrouss-logic.com>2024-04-04 19:46:31 +0200
commita45872967f07906297782cd04223706cfc326219 (patch)
treef48d43749e4a1536d34e6c7dbb5b25defb8656fa /Private/NewBoot/BootKit
parentc33efb3e8a31435b37ed2c55375eec80c9b23155 (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.hxx27
-rw-r--r--Private/NewBoot/BootKit/Device.hxx34
-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