summaryrefslogtreecommitdiffhomepage
path: root/dev/boot/src
diff options
context:
space:
mode:
Diffstat (limited to 'dev/boot/src')
-rw-r--r--dev/boot/src/BootSupport.cc2
-rw-r--r--dev/boot/src/HEL/AMD64/BootEFI.cc63
-rw-r--r--dev/boot/src/HEL/AMD64/BootPlatform.cc4
-rw-r--r--dev/boot/src/HEL/ARM64/BootPlatform.cc4
-rw-r--r--dev/boot/src/New+Delete.cc4
5 files changed, 46 insertions, 31 deletions
diff --git a/dev/boot/src/BootSupport.cc b/dev/boot/src/BootSupport.cc
index 4d808ddc..efe6602a 100644
--- a/dev/boot/src/BootSupport.cc
+++ b/dev/boot/src/BootSupport.cc
@@ -12,7 +12,7 @@
#include <KernelKit/MSDOS.h>
#include <KernelKit/PE.h>
-#ifdef __BOOTLDR_STANDALONE__
+#ifdef __BOOTZ_STANDALONE__
/// @brief memset definition in C++.
/// @param dst destination pointer.
diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc
index 0840bc31..4744892f 100644
--- a/dev/boot/src/HEL/AMD64/BootEFI.cc
+++ b/dev/boot/src/HEL/AMD64/BootEFI.cc
@@ -202,47 +202,46 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
handover_hdr->f_FirmwareCustomTables[0] = (VoidPtr)BS;
handover_hdr->f_FirmwareCustomTables[1] = (VoidPtr)ST;
+ // ------------------------------------------ //
+ // If we succeed in reading the blob, then execute it.
+ // ------------------------------------------ //
+
+#if defined(__ATA_PIO__)
Boot::BootFileReader reader_syschk(L"syschk.sys", image_handle);
reader_syschk.ReadAll(0);
Boot::BootThread* syschk_thread = nullptr;
- // ------------------------------------------ //
- // If we succeed in reading the blob, then execute it.
- // ------------------------------------------ //
-
if (reader_syschk.Blob())
{
syschk_thread = new Boot::BootThread(reader_syschk.Blob());
- syschk_thread->SetName("BootZ: System Recovery Check");
- syschk_thread->Start(handover_hdr, NO);
- }
+ syschk_thread->SetName("BootZ: System Check");
-#if defined(__ATA_PIO__)
- Boot::BDiskFormatFactory<BootDeviceATA> partition_factory;
+ Boot::BDiskFormatFactory<BootDeviceATA> partition_factory;
- if (syschk_thread->Start(handover_hdr, NO) != kEfiOk)
- {
- if (partition_factory.IsPartitionValid() == NO)
+ if (syschk_thread->Start(handover_hdr, NO) != kEfiOk)
{
- Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root{};
+ if (partition_factory.IsPartitionValid() == NO)
+ {
+ Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root{};
- root.fFileName[0] = kNeFSRoot[0];
- root.fFileName[1] = 0;
+ root.fFileName[0] = kNeFSRoot[0];
+ root.fFileName[1] = 0;
- root.fKind = kNeFSCatalogKindDir;
+ root.fKind = kNeFSCatalogKindDir;
- const auto kFSName = "SSD";
+ const auto kFSName = "SSD";
- partition_factory.Format(kFSName, &root, 1);
+ partition_factory.Format(kFSName, &root, 1);
- fb_init();
+ fb_init();
- FB::fb_clear_video();
+ FB::fb_clear_video();
- FBDrawBitMapInRegion(zka_has_disk, NE_HAS_DISK_WIDTH, NE_HAS_DISK_HEIGHT, (kHandoverHeader->f_GOP.f_Width - NE_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - NE_HAS_DISK_HEIGHT) / 2);
+ FBDrawBitMapInRegion(zka_has_disk, NE_HAS_DISK_WIDTH, NE_HAS_DISK_HEIGHT, (kHandoverHeader->f_GOP.f_Width - NE_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - NE_HAS_DISK_HEIGHT) / 2);
- fb_clear();
+ fb_clear();
+ }
}
}
#endif
@@ -265,7 +264,6 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
handover_hdr->f_FirmwareVendorLen);
handover_hdr->f_FirmwareVendorLen = Boot::BStrLen(sys_table->FirmwareVendor);
-
// Assign to global 'kHandoverHeader'.
WideChar kernel_path[256U] = L"neoskrnl.exe";
@@ -318,7 +316,24 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr image_handle,
// Finally load the OS kernel.
// ---------------------------------------------------- //
- kernel_thread->Start(handover_hdr, YES);
+ if (kernel_thread->Start(handover_hdr, YES) != kEfiOk)
+ {
+ Boot::BootFileReader reader_netboot(L"netboot.sys", image_handle);
+ reader_netboot.ReadAll(0);
+
+ Boot::BootThread* netboot_thread = nullptr;
+ // ------------------------------------------ //
+ // If we succeed in reading the blob, then execute it. (That is NetBoot)
+ // ------------------------------------------ //
+
+ if (reader_netboot.Blob())
+ {
+ netboot_thread = new Boot::BootThread(reader_netboot.Blob());
+ netboot_thread->SetName("BootZ: NetBoot");
+ netboot_thread->Start(handover_hdr, YES);
+ }
+ }
+
CANT_REACH();
}
diff --git a/dev/boot/src/HEL/AMD64/BootPlatform.cc b/dev/boot/src/HEL/AMD64/BootPlatform.cc
index c7ae4085..aab1c6b4 100644
--- a/dev/boot/src/HEL/AMD64/BootPlatform.cc
+++ b/dev/boot/src/HEL/AMD64/BootPlatform.cc
@@ -9,7 +9,7 @@
#include <BootKit/Protocol.h>
#include <BootKit/BootKit.h>
-#ifdef __BOOTLDR_STANDALONE__
+#ifdef __BOOTZ_STANDALONE__
using namespace Boot;
@@ -103,4 +103,4 @@ void rt_hlt()
NeOS::HAL::rt_halt();
}
-#endif // __BOOTLDR_STANDALONE__
+#endif // __BOOTZ_STANDALONE__
diff --git a/dev/boot/src/HEL/ARM64/BootPlatform.cc b/dev/boot/src/HEL/ARM64/BootPlatform.cc
index 9713b80d..ebb9f9b0 100644
--- a/dev/boot/src/HEL/ARM64/BootPlatform.cc
+++ b/dev/boot/src/HEL/ARM64/BootPlatform.cc
@@ -8,7 +8,7 @@
#include <BootKit/Protocol.h>
#include <BootKit/BootKit.h>
-#ifdef __BOOTLDR_STANDALONE__
+#ifdef __BOOTZ_STANDALONE__
using namespace Boot;
@@ -34,4 +34,4 @@ EXTERN_C void rt_std()
{
}
-#endif // __BOOTLDR_STANDALONE__
+#endif // __BOOTZ_STANDALONE__
diff --git a/dev/boot/src/New+Delete.cc b/dev/boot/src/New+Delete.cc
index 03a1bb68..fa6bc146 100644
--- a/dev/boot/src/New+Delete.cc
+++ b/dev/boot/src/New+Delete.cc
@@ -8,7 +8,7 @@
#include <BootKit/Protocol.h>
#include <BootKit/BootKit.h>
-#ifdef __BOOTLDR_STANDALONE__
+#ifdef __BOOTZ_STANDALONE__
EXTERN EfiBootServices* BS;
/// @brief Allocates a new object.
@@ -57,4 +57,4 @@ void operator delete(void* buf, size_t size)
BS->FreePool(buf);
}
-#endif // __BOOTLDR_STANDALONE__
+#endif // __BOOTZ_STANDALONE__