diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-14 09:42:28 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-04-14 09:42:28 +0200 |
| commit | a01ba7acb4786a6354349408b3bcc4c2d007b274 (patch) | |
| tree | 7b1e4e4a95910391242b3c3a50b853db6e433aaa /dev/boot/src/HEL/AMD64 | |
| parent | 2eb25a0e70bdd0be91f1f03033fc64ccbb91b54a (diff) | |
bootloader, netboot: integrate EFI_SIMPLE_NETWORK_PROTOCOL for HTTP-based kernel fetching
- Added BootNet module to support network boot using EFI_SIMPLE_NETWORK_PROTOCOL
- Replaced ModuleMain with BootloaderMain as unified entry point
- Implemented EFI protocol discovery, startup, and logging for netboot
- Updated linker scripts, GDB configs, and build targets accordingly
- Laid groundwork for full HTTP/TCP/IP bootloader logic
- Improved kernel handoff logic and memory allocation fallback handling
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/boot/src/HEL/AMD64')
| -rw-r--r-- | dev/boot/src/HEL/AMD64/BootEFI.cc | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/dev/boot/src/HEL/AMD64/BootEFI.cc b/dev/boot/src/HEL/AMD64/BootEFI.cc index 4220c6cb..a818fcd6 100644 --- a/dev/boot/src/HEL/AMD64/BootEFI.cc +++ b/dev/boot/src/HEL/AMD64/BootEFI.cc @@ -73,19 +73,19 @@ STATIC Bool boot_init_fb() noexcept EfiGUID kEfiGlobalNamespaceVarGUID = { 0x8BE4DF61, 0x93CA, 0x11D2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C}}; -/// @brief ModuleMain EFI entrypoint. +/// @brief BootloaderMain EFI entrypoint. /// @param image_handle Handle of this image. /// @param sys_table The system table of it. /// @return nothing, never returns. -EFI_EXTERN_C EFI_API Int32 ModuleMain(EfiHandlePtr image_handle, - EfiSystemTable* sys_table) +EFI_EXTERN_C EFI_API Int32 BootloaderMain(EfiHandlePtr image_handle, + EfiSystemTable* sys_table) { - InitEFI(sys_table); ///! Init the EFI library. + fw_init_efi(sys_table); ///! Init the EFI library. HEL::BootInfoHeader* handover_hdr = new HEL::BootInfoHeader(); - UInt32 map_key = 0; + UInt32 map_key = 0; #ifdef ZBA_USE_FB if (!boot_init_fb()) @@ -163,12 +163,10 @@ EFI_EXTERN_C EFI_API Int32 ModuleMain(EfiHandlePtr image_handle, Boot::BootTextWriter writer; - //-------------------------------------------------------------// - // Update handover file specific table and phyiscal start field. - //-------------------------------------------------------------// + handover_hdr->f_BitMapStart = nullptr; /* Start of bitmap. */ + handover_hdr->f_BitMapSize = kHandoverBitMapSz; /* Size of bitmap in bytes. */ - handover_hdr->f_BitMapSize = gib_cast(4); /* Size of bitmap in bytes. */ - Int32 trials = 5 * 10000000; + Int32 trials = 5 * 10000000; while (BS->AllocatePool(EfiLoaderData, handover_hdr->f_BitMapSize, &handover_hdr->f_BitMapStart) != kEfiOk) { @@ -180,7 +178,7 @@ EFI_EXTERN_C EFI_API Int32 ModuleMain(EfiHandlePtr image_handle, trials = 3 * 10000000; - handover_hdr->f_BitMapSize = gib_cast(2); /* Size of bitmap in bytes. */ + handover_hdr->f_BitMapSize = kHandoverBitMapSz / 2; /* Size of bitmap in bytes. */ while (BS->AllocatePool(EfiLoaderData, handover_hdr->f_BitMapSize, &handover_hdr->f_BitMapStart) != kEfiOk) { @@ -221,8 +219,6 @@ EFI_EXTERN_C EFI_API Int32 ModuleMain(EfiHandlePtr image_handle, FBDrawBitMapInRegion(zka_no_disk, NE_NO_DISK_WIDTH, NE_NO_DISK_HEIGHT, (kHandoverHeader->f_GOP.f_Width - NE_NO_DISK_WIDTH) / 2, (kHandoverHeader->f_GOP.f_Height - NE_NO_DISK_HEIGHT) / 2); fb_clear(); - - Boot::Stop(); } } @@ -288,6 +284,7 @@ EFI_EXTERN_C EFI_API Int32 ModuleMain(EfiHandlePtr image_handle, kernel_thread->SetName("BootZ: Kernel"); handover_hdr->f_KernelImage = reader_kernel.Blob(); + handover_hdr->f_KernelSz = reader_kernel.Size(); } else { @@ -297,6 +294,8 @@ EFI_EXTERN_C EFI_API Int32 ModuleMain(EfiHandlePtr image_handle, Boot::Stop(); } + // Fallback to bootnet, if not PXE. + Boot::BootFileReader reader_netboot(L"net.efi", image_handle); reader_netboot.ReadAll(0); |
