summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--dev/boot/src/BootThread.cc21
-rw-r--r--dev/boot/src/HEL/AMD64/BootEFI.cc7
-rw-r--r--dev/kernel/FirmwareKit/GPT.h4
-rw-r--r--dev/kernel/FirmwareKit/Handover.h7
-rw-r--r--dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc2
-rw-r--r--dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc2
-rw-r--r--dev/kernel/HALKit/AMD64/HalKernelMain.cc14
-rw-r--r--dev/kernel/HALKit/AMD64/Processor.h2
8 files changed, 38 insertions, 21 deletions
diff --git a/dev/boot/src/BootThread.cc b/dev/boot/src/BootThread.cc
index f1866a76..484c242d 100644
--- a/dev/boot/src/BootThread.cc
+++ b/dev/boot/src/BootThread.cc
@@ -80,6 +80,12 @@ namespace Boot
fStack = new UInt8[mib_cast(16)];
+ if (!fStack)
+ {
+ writer.Write("BootZ: Unable to allocate stack.\r");
+ return;
+ }
+
LDR_SECTION_HEADER_PTR sectPtr = (LDR_SECTION_HEADER_PTR)(((Char*)opt_header_ptr) + header_ptr->SizeOfOptionalHeader);
constexpr auto sectionForCode = ".text";
@@ -168,6 +174,21 @@ namespace Boot
{
fHandover = handover;
+ if (!fStartAddress)
+ {
+ return kEfiFail;
+ }
+
+ if (!fHandover)
+ {
+ return kEfiFail;
+ }
+
+ BootTextWriter writer;
+
+ writer.Write("BootZ: Starting: ").Write(fBlobName).Write("\r");
+ writer.Write("BootZ: Handover address: ").Write((UIntPtr)fHandover).Write("\r");
+
if (own_stack)
{
return rt_jump_to_address(fStartAddress, fHandover, &fStack[mib_cast(16) - 1]);
diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc
index 2ee662f3..58f04491 100644
--- a/dev/boot/src/HEL/AMD64/BootEFI.cc
+++ b/dev/boot/src/HEL/AMD64/BootEFI.cc
@@ -226,8 +226,8 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle,
handover_hdr->f_Magic = kHandoverMagic;
handover_hdr->f_Version = kHandoverVersion;
- handover_hdr->f_EFIImageKey = map_key;
- handover_hdr->f_EFIImage = image_handle;
+ handover_hdr->f_HardwareTables.f_ImageKey = map_key;
+ handover_hdr->f_HardwareTables.f_ImageHandle = image_handle;
// Provide fimware vendor name.
@@ -245,6 +245,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle,
/// access attributes (in order)
/// EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS
UInt32 attr = 0x00000001 | 0x00000002 | 0x00000004;
+
ST->RuntimeServices->SetVariable(L"/props/boot_path", kEfiGlobalNamespaceVarGUID, &attr, &kernel_path_sz, kernel_path);
}
@@ -281,7 +282,7 @@ EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle,
auto kernel_thread = Boot::BootThread(reader_kernel.Blob());
- kernel_thread.SetName("BootZ: Kernel");
+ kernel_thread.SetName("BootZ: NeKernel");
handover_hdr->f_KernelImage = reader_kernel.Blob();
handover_hdr->f_KernelSz = reader_kernel.Size();
diff --git a/dev/kernel/FirmwareKit/GPT.h b/dev/kernel/FirmwareKit/GPT.h
index 9a6cffc6..0515af8a 100644
--- a/dev/kernel/FirmwareKit/GPT.h
+++ b/dev/kernel/FirmwareKit/GPT.h
@@ -9,7 +9,7 @@
#include <NewKit/Defines.h>
#include <FirmwareKit/EFI/EFI.h>
-#define kSectorAlignGPT_Part (420U)
+#define kSectorAlignGPT_PartTbl (420U)
#define kSectorAlignGPT_PartEntry (72U)
#define kPartNameGPT (8U)
@@ -44,7 +44,7 @@ namespace Kernel
UInt32 NumPartitionEntries;
UInt32 SizeOfEntries;
UInt32 CRC32PartEntry;
- UInt8 Reserved2[kSectorAlignGPT_Part];
+ UInt8 Reserved2[kSectorAlignGPT_PartTbl];
};
struct PACKED GPT_PARTITION_ENTRY
diff --git a/dev/kernel/FirmwareKit/Handover.h b/dev/kernel/FirmwareKit/Handover.h
index dd529a9e..4ff04e6d 100644
--- a/dev/kernel/FirmwareKit/Handover.h
+++ b/dev/kernel/FirmwareKit/Handover.h
@@ -71,11 +71,6 @@ namespace Kernel::HEL
WideChar f_FirmwareVendorName[32];
SizeT f_FirmwareVendorLen;
-#ifdef __NE_AMD64__
- UInt32 f_EFIImageKey;
- EfiHandlePtr f_EFIImage;
-#endif
-
VoidPtr f_FirmwareCustomTables[2]; // On EFI 0: BS 1: ST
struct
@@ -84,6 +79,8 @@ namespace Kernel::HEL
VoidPtr f_VendorPtr;
VoidPtr f_MpPtr;
Bool f_MultiProcessingEnabled;
+ UInt32 f_ImageKey;
+ EfiHandlePtr f_ImageHandle;
} f_HardwareTables;
struct
diff --git a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
index 94c1ae73..3b98e9e8 100644
--- a/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
+++ b/dev/kernel/HALKit/AMD64/HalApplicationProcessor.cc
@@ -191,7 +191,7 @@ namespace Kernel::HAL
/// @brief Fetch and enable SMP scheduler.
/// @param vendor_ptr SMP containing structure.
/***********************************************************************************/
- Void mp_get_cores(VoidPtr vendor_ptr) noexcept
+ Void mp_init_cores(VoidPtr vendor_ptr) noexcept
{
if (!vendor_ptr)
return;
diff --git a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc
index ddfc49b6..c0c7dfcf 100644
--- a/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc
+++ b/dev/kernel/HALKit/AMD64/HalDescriptorLoader.cc
@@ -109,8 +109,6 @@ namespace Kernel::HAL
hal_load_idt(idt);
- NeFS::fs_init_nefs();
-
Detail::hal_enable_pit(kPITTickForScheduler);
rt_sti();
diff --git a/dev/kernel/HALKit/AMD64/HalKernelMain.cc b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
index 60df6a12..b716279d 100644
--- a/dev/kernel/HALKit/AMD64/HalKernelMain.cc
+++ b/dev/kernel/HALKit/AMD64/HalKernelMain.cc
@@ -43,14 +43,14 @@ EXTERN_C Int32 hal_init_platform(
return kEfiFail;
}
+ kHandoverHeader = handover_hdr;
+
FB::fb_clear_video();
(Void)(Kernel::kout << "Welcome to NeKernel.\r");
fw_init_efi((EfiSystemTable*)handover_hdr->f_FirmwareCustomTables[1]);
- Boot::ExitBootServices(handover_hdr->f_EFIImageKey, handover_hdr->f_EFIImage);
-
- kHandoverHeader = handover_hdr;
+ Boot::ExitBootServices(handover_hdr->f_HardwareTables.f_ImageKey, handover_hdr->f_HardwareTables.f_ImageHandle);
hal_init_scheduler_team();
@@ -83,10 +83,6 @@ EXTERN_C Int32 hal_init_platform(
gdt_reg.Base = reinterpret_cast<Kernel::UIntPtr>(kGDTArray);
gdt_reg.Limit = (sizeof(Kernel::HAL::Detail::NE_GDT_ENTRY) * kGDTEntriesCount) - 1;
- Kernel::NeFS::fs_init_nefs();
-
- Kernel::HAL::mp_get_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
-
//! GDT will load hal_read_init after it successfully loads the segments.
Kernel::HAL::GDTLoader gdt_loader;
gdt_loader.Load(gdt_reg);
@@ -96,6 +92,10 @@ EXTERN_C Int32 hal_init_platform(
EXTERN_C Kernel::Void hal_real_init(Kernel::Void) noexcept
{
+ Kernel::NeFS::fs_init_nefs();
+
+ Kernel::HAL::mp_init_cores(kHandoverHeader->f_HardwareTables.f_VendorPtr);
+
Kernel::HAL::Register64 idt_reg;
idt_reg.Base = (Kernel::UIntPtr)kInterruptVectorTable;
diff --git a/dev/kernel/HALKit/AMD64/Processor.h b/dev/kernel/HALKit/AMD64/Processor.h
index a5bc82c7..b813e1d9 100644
--- a/dev/kernel/HALKit/AMD64/Processor.h
+++ b/dev/kernel/HALKit/AMD64/Processor.h
@@ -181,7 +181,7 @@ namespace Kernel::HAL
/// @brief Fetch and enable SMP scheduler.
/// @param vendor_ptr SMP containing structure.
/***********************************************************************************/
- Void mp_get_cores(VoidPtr vendor_ptr) noexcept;
+ Void mp_init_cores(VoidPtr vendor_ptr) noexcept;
/***********************************************************************************/
/// @brief Do a cpuid to check if MSR exists on CPU.