summaryrefslogtreecommitdiffhomepage
path: root/dev/boot/modules
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-04-16 18:15:13 +0200
committerGitHub <noreply@github.com>2025-04-16 18:15:13 +0200
commit0033ef41f33ce3d39b4e7ed7e1353cec916bdd5d (patch)
treecf298a3b522fed5b829c4b250932ab13ef407838 /dev/boot/modules
parentd3cf45311cf3f6de0bc25bb0ddb5c14a29a72cd6 (diff)
parent58b3d776ab5435de352217b2a3a525aeb9316e99 (diff)
Merge pull request #19 from amlel-el-mahrouss/dev
urgent patches.
Diffstat (limited to 'dev/boot/modules')
-rw-r--r--dev/boot/modules/BootNet/BootNet.cc48
-rw-r--r--dev/boot/modules/BootNet/BootNet.h2
-rw-r--r--dev/boot/modules/BootNet/amd64.json1
-rw-r--r--dev/boot/modules/SysChk/SysChk.cc2
-rw-r--r--dev/boot/modules/SysChk/amd64-ahci.json1
-rw-r--r--dev/boot/modules/SysChk/amd64-pio.json1
-rw-r--r--dev/boot/modules/SysChk/arm64.json2
7 files changed, 40 insertions, 17 deletions
diff --git a/dev/boot/modules/BootNet/BootNet.cc b/dev/boot/modules/BootNet/BootNet.cc
index 8ee08929..050148c4 100644
--- a/dev/boot/modules/BootNet/BootNet.cc
+++ b/dev/boot/modules/BootNet/BootNet.cc
@@ -7,29 +7,41 @@
* ========================================================
*/
+#include <FirmwareKit/EFI/API.h>
#include <modules/BootNet/BootNet.h>
#include <BootKit/BootKit.h>
#include <BootKit/BootThread.h>
-STATIC EfiGUID kEfiIP4ProtoGUID = {};
+STATIC EfiGUID kEfiSimpleProtoGUID = EFI_SIMPLE_NETWORK_PROTOCOL_GUID;
+STATIC EFI_SIMPLE_NETWORK_PROTOCOL* kEfiProtocol = nullptr;
-STATIC Void bootnet_read_udp_packet(BOOTNET_INTERNET_HEADER&);
+STATIC Void bootnet_read_ip_packet(BOOTNET_INTERNET_HEADER);
EXTERN_C Int32 BootNetModuleMain(Kernel::HEL::BootInfoHeader* handover)
{
+ Boot::BootTextWriter writer;
+
+ writer.Write("BootNet: Init EFI...\r");
+
+ fw_init_efi((EfiSystemTable*)handover->f_FirmwareCustomTables[1]);
+
+ if (BS->LocateProtocol(&kEfiSimpleProtoGUID, nullptr, (VoidPtr*)&kEfiProtocol) != kEfiOk)
+ {
+ writer.Write("BootNet: Not supported by firmware.\r");
+ return kEfiFail;
+ }
+
BOOTNET_INTERNET_HEADER inet{};
- memset(&inet, 0, sizeof(BOOTNET_INTERNET_HEADER));
-
- bootnet_read_udp_packet(inet);
+ SetMem(&inet, 0, sizeof(BOOTNET_INTERNET_HEADER));
+
+ writer.Write("BootNet: Downloading kernel...\r");
- /// TODO: Read address from JSON file 'bootnet.json'
+ bootnet_read_ip_packet(inet);
if (inet.Length < 1)
{
- Boot::BootTextWriter writer;
writer.Write("BootNet: No executable attached to the packet, aborting.\r");
-
return kEfiFail;
}
@@ -38,23 +50,35 @@ EXTERN_C Int32 BootNetModuleMain(Kernel::HEL::BootInfoHeader* handover)
Boot::BootThread thread(inet.Data);
if (thread.IsValid())
+ {
+ writer.Write("BootNet: Running kernel...\r");
return thread.Start(handover, YES);
+ }
return kEfiFail;
}
else
{
- Boot::BootTextWriter writer;
- writer.Write("BootNetLauncher: EEPROM flash is not available as of right now.\r");
+ constexpr auto kROMSize = 0x200;
+
+ if (inet.Length != kROMSize)
+ {
+ writer.Write("BootNet: Not within 512K.\r");
+ return kEfiFail;
+ }
+
+ writer.Write("BootNet: Programming the flash is not available as of right now.\r");
/// TODO: Program new firmware to EEPROM (if crc and size matches)
- return kEfiFail; // TODO: Add support for EEPROM firmware update.
+ const UIntPtr kEEPROMAddress = 0;
+ const UInt16 kEEPROMSize = inet.Length;
}
return kEfiFail;
}
-STATIC Void bootnet_read_udp_packet(BOOTNET_INTERNET_HEADER&)
+STATIC Void bootnet_read_ip_packet(BOOTNET_INTERNET_HEADER inet)
{
+ NE_UNUSED(inet);
} \ No newline at end of file
diff --git a/dev/boot/modules/BootNet/BootNet.h b/dev/boot/modules/BootNet/BootNet.h
index aba7924f..b38ed0e9 100644
--- a/dev/boot/modules/BootNet/BootNet.h
+++ b/dev/boot/modules/BootNet/BootNet.h
@@ -29,5 +29,5 @@ typedef struct BOOTNET_INTERNET_HEADER
Kernel::Char Target[kBootNetNameLen]; /// the target file.
Kernel::Boolean ImpliesProgram : 1; /// does it imply an EEPROM reprogram?
Kernel::Boolean Preflight : 1; /// is it a preflight packet.
- Kernel::Char Data[]; /// non preflight packet has a patch blob for a **PatchTarget**
+ Kernel::Char Data[1]; /// non preflight packet has a patch blob for a **PatchTarget**
} ATTRIBUTE(packed) BOOTNET_INTERNET_HEADER;
diff --git a/dev/boot/modules/BootNet/amd64.json b/dev/boot/modules/BootNet/amd64.json
index da4a15f0..912eeb0b 100644
--- a/dev/boot/modules/BootNet/amd64.json
+++ b/dev/boot/modules/BootNet/amd64.json
@@ -7,7 +7,6 @@
"compiler_flags": [
"-nostdlib",
"-std=c++20",
- "-fPIC",
"-fno-rtti",
"-fno-exceptions",
"-Wl,--subsystem=17,--image-base,0x10000000,-e,BootNetModuleMain"
diff --git a/dev/boot/modules/SysChk/SysChk.cc b/dev/boot/modules/SysChk/SysChk.cc
index 3086cdc6..dec4e11a 100644
--- a/dev/boot/modules/SysChk/SysChk.cc
+++ b/dev/boot/modules/SysChk/SysChk.cc
@@ -28,6 +28,8 @@
EXTERN_C Int32 SysChkModuleMain(Kernel::HEL::BootInfoHeader* handover)
{
+ NE_UNUSED(handover);
+
#ifdef __ATA_PIO__
Boot::BDiskFormatFactory<BootDeviceATA> partition_factory;
diff --git a/dev/boot/modules/SysChk/amd64-ahci.json b/dev/boot/modules/SysChk/amd64-ahci.json
index 527e79f9..d13e6c4a 100644
--- a/dev/boot/modules/SysChk/amd64-ahci.json
+++ b/dev/boot/modules/SysChk/amd64-ahci.json
@@ -7,7 +7,6 @@
"compiler_flags": [
"-nostdlib",
"-std=c++20",
- "-fPIC",
"-fno-rtti",
"-fno-exceptions",
"-Wl,--subsystem=17,--image-base,0x10000000,-e,SysChkModuleMain"
diff --git a/dev/boot/modules/SysChk/amd64-pio.json b/dev/boot/modules/SysChk/amd64-pio.json
index de3195ce..f15a8efd 100644
--- a/dev/boot/modules/SysChk/amd64-pio.json
+++ b/dev/boot/modules/SysChk/amd64-pio.json
@@ -7,7 +7,6 @@
"compiler_flags": [
"-nostdlib",
"-std=c++20",
- "-fPIC",
"-fno-rtti",
"-fno-exceptions",
"-Wl,--subsystem=17,--image-base,0x10000000,-e,SysChkModuleMain"
diff --git a/dev/boot/modules/SysChk/arm64.json b/dev/boot/modules/SysChk/arm64.json
index 1f91326e..ad5fde6e 100644
--- a/dev/boot/modules/SysChk/arm64.json
+++ b/dev/boot/modules/SysChk/arm64.json
@@ -11,7 +11,7 @@
"-fno-rtti",
"-fno-exceptions",
"-fuse-ld=lld",
- "-Wl,-subsystem:efi_application,-entry:ModuleMain",
+ "-Wl,-subsystem:efi_application,-entry:BootloaderMain",
"-target aarch64-unknown-windows"
],
"cpp_macros": [