summaryrefslogtreecommitdiffhomepage
path: root/dev/BootLoader/src
diff options
context:
space:
mode:
Diffstat (limited to 'dev/BootLoader/src')
-rw-r--r--dev/BootLoader/src/BootThread.cc22
-rw-r--r--dev/BootLoader/src/HEL/AMD64/BootMain.cc65
2 files changed, 43 insertions, 44 deletions
diff --git a/dev/BootLoader/src/BootThread.cc b/dev/BootLoader/src/BootThread.cc
index 6d78d0d1..ae494a15 100644
--- a/dev/BootLoader/src/BootThread.cc
+++ b/dev/BootLoader/src/BootThread.cc
@@ -122,7 +122,7 @@ namespace Boot
#ifdef __ZKA_AMD64__
if (handover_struc->HandoverArch != HEL::kArchAMD64)
{
- fb_render_string("BootZ: NOT AN HANDOVER IMAGE, BAD ARCHITECTURE...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
+ fb_render_string("BootZ: Not an handover header, bad CPU...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
::EFI::Stop();
}
#endif
@@ -130,11 +130,11 @@ namespace Boot
#ifdef __ZKA_ARM64__
if (handover_struc->HandoverArch != HEL::kArchARM64)
{
- fb_render_string("BootZ: NOT AN HANDOVER IMAGE, BAD ARCHITECTURE...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
+ fb_render_string("BootZ: Not an handover header, bad CPU...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
::EFI::Stop();
}
#endif
- fb_render_string("BootZ: NOT AN HANDOVER IMAGE...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
+ fb_render_string("BootZ: Not an handover header...", 40, 10, RGB(0xFF, 0xFF, 0xFF));
::EFI::Stop();
}
@@ -160,18 +160,20 @@ namespace Boot
}
else
{
- writer.Write("BootZ: INVALID EXECUTABLE.\r");
+ writer.Write("BootZ: Invalid Executable.\r");
}
fStack = new UInt8[mib_cast(8)];
}
/// @note handover header has to be valid!
- Void BThread::Start(HEL::BootInfoHeader* handover, Bool own_stack)
+ Int32 BThread::Start(HEL::BootInfoHeader* handover, Bool own_stack)
{
- HEL::HandoverProc err_fn = [](HEL::BootInfoHeader* rcx) -> void {
- fb_render_string("BootZ: INVALID IMAGE! ABORTING...", 50, 10, RGB(0xFF, 0xFF, 0xFF));
+ HEL::HandoverProc err_fn = [](HEL::BootInfoHeader* rcx) -> Int32 {
+ fb_render_string("BootZ: Invalid Boot Image...", 50, 10, RGB(0xFF, 0xFF, 0xFF));
::EFI::Stop();
+
+ return NO;
};
if (!fStartAddress)
@@ -182,12 +184,16 @@ namespace Boot
fHandover = handover;
if (own_stack)
+ {
rt_jump_to_address(fStartAddress, fHandover, &fStack[mib_cast(8) - 1]);
+ }
else
{
delete[] fStack;
- reinterpret_cast<HEL::HandoverProc>(fStartAddress)(fHandover);
+ return reinterpret_cast<HEL::HandoverProc>(fStartAddress)(fHandover);
}
+
+ return NO;
}
const Char* BThread::GetName()
diff --git a/dev/BootLoader/src/HEL/AMD64/BootMain.cc b/dev/BootLoader/src/HEL/AMD64/BootMain.cc
index dd7528d8..023976ae 100644
--- a/dev/BootLoader/src/HEL/AMD64/BootMain.cc
+++ b/dev/BootLoader/src/HEL/AMD64/BootMain.cc
@@ -157,40 +157,12 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
handover_hdr->f_HardwareTables.f_MultiProcessingEnabled = cnt_enabled > 1;
// Fill handover header now.
- Boot::BDiskFormatFactory<BootDeviceATA> partition_factory;
-
// ---------------------------------------------------- //
// The following checks for an exisiting partition
// inside the disk, if it doesn't have one,
// format the disk.
// ---------------------------------------------------- //
-#ifdef ZKA_AUTO_FORMAT
- if (!partition_factory.IsPartitionValid())
- {
- UI::ui_draw_background();
-
- FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2);
-
- fb_fini();
-
- Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root{};
-
- root.fFileName[0] = kNeFSRoot[0];
- root.fFileName[1] = 0;
-
- root.fKind = kNeFSCatalogKindDir;
-
- partition_factory.Format("FileSystem (A:)\0", &root, 1);
-
- UI::ui_draw_background();
-
- FBDrawBitMapInRegion(zka_has_disk, ZKA_HAS_DISK_HEIGHT, ZKA_HAS_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_HAS_DISK_HEIGHT) / 2);
-
- fb_fini();
- }
-#endif // ZKA_AUTO_FORMAT
-
BS->GetMemoryMap(&size_struct_ptr, struct_ptr, &map_key, &sz_desc, &rev_desc);
struct_ptr = new EfiMemoryDescriptor[sz_desc];
@@ -243,10 +215,31 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
if (reader_syschk.Blob())
{
syschk_thread = new Boot::BThread(reader_syschk.Blob());
- syschk_thread->SetName("BootZ: System Check");
+ syschk_thread->SetName("BootZ: System Recovery Check");
}
- syschk_thread->Start(handover_hdr, NO);
+ Boot::BDiskFormatFactory<BootDeviceATA> partition_factory;
+
+ if (partition_factory.IsPartitionValid() == false &&
+ syschk_thread->Start(handover_hdr, NO) == kEfiOk)
+ {
+ fb_init();
+
+ Boot::BDiskFormatFactory<BootDeviceATA>::BFileDescriptor root{};
+
+ root.fFileName[0] = kNeFSRoot[0];
+ root.fFileName[1] = 0;
+
+ root.fKind = kNeFSCatalogKindDir;
+
+ partition_factory.Format("FileSystem (A:) <System_Build\"" __DATE__ "\">", &root, 1);
+
+ UI::ui_draw_background();
+
+ FBDrawBitMapInRegion(zka_has_disk, ZKA_HAS_DISK_HEIGHT, ZKA_HAS_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_HAS_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_HAS_DISK_HEIGHT) / 2);
+
+ fb_fini();
+ }
// ------------------------------------------ //
// null these fields, to avoid being reused later.
@@ -289,7 +282,7 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
else
{
fb_init();
- FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2);
+ FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2);
EFI::Stop();
}
@@ -300,16 +293,16 @@ EFI_EXTERN_C EFI_API Int32 Main(EfiHandlePtr ImageHandle,
if (ttf_font.Blob())
{
- handover_hdr->f_KernelImage = reader_kernel.Blob();
- handover_hdr->f_KernelSz = reader_kernel.Size();
- handover_hdr->f_FontImage = ttf_font.Blob();
- handover_hdr->f_FontSz = ttf_font.Size();
+ handover_hdr->f_KernelImage = reader_kernel.Blob();
+ handover_hdr->f_KernelSz = reader_kernel.Size();
+ handover_hdr->f_FontImage = ttf_font.Blob();
+ handover_hdr->f_FontSz = ttf_font.Size();
}
else
{
fb_init();
FBDrawBitMapInRegion(zka_no_disk, ZKA_NO_DISK_HEIGHT, ZKA_NO_DISK_WIDTH, (kHandoverHeader->f_GOP.f_Width - ZKA_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - ZKA_NO_DISK_HEIGHT) / 2);
-
+
EFI::Stop();
}