diff options
| author | Amlal <amlal.elmahrouss@icloud.com> | 2025-02-25 08:58:58 +0100 |
|---|---|---|
| committer | Amlal <amlal.elmahrouss@icloud.com> | 2025-02-25 08:58:58 +0100 |
| commit | 8f3454cb57f67a05234a0100c1c7f4887c275cf1 (patch) | |
| tree | fa8f8905f03c3cdbf733ff78b7deb6242bb10be4 /dev/Boot/Mod/NetBoot | |
| parent | a69dc6b982be67156ba4273b37a87c9e03a54b2c (diff) | |
IMPL: Business logic for NetBoot.
TODO: Read NBINet packet from host or localhost.
Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Boot/Mod/NetBoot')
| -rw-r--r-- | dev/Boot/Mod/NetBoot/NetBoot.cc | 36 | ||||
| -rw-r--r-- | dev/Boot/Mod/NetBoot/NetBoot.h | 18 |
2 files changed, 42 insertions, 12 deletions
diff --git a/dev/Boot/Mod/NetBoot/NetBoot.cc b/dev/Boot/Mod/NetBoot/NetBoot.cc index ac87d256..2d924333 100644 --- a/dev/Boot/Mod/NetBoot/NetBoot.cc +++ b/dev/Boot/Mod/NetBoot/NetBoot.cc @@ -9,12 +9,40 @@ #include <Mod/NetBoot/NetBoot.h> #include <BootKit/BootKit.h> +#include <BootKit/BootThread.h> EXTERN_C Int32 ModuleMain(NeOS::HEL::BootInfoHeader* handover) { -#ifdef __NE_AMD64__ + NetBootInternetHeader inet{}; + + /// TODO: Read Packet from localhost + + if (inet.PatchLength < 0) + { + Boot::BTextWriter writer; + writer.Write("NetBootLauncher: No Patch attached to packet.\r"); + + return kEfiFail; + } + else if (inet.Preflight) + { + Boot::BTextWriter writer; + writer.Write("NetBootLauncher: Preflight over preflight response.\r"); + + return kEfiFail; + } + else if (inet.EEPROM) + { + Boot::BTextWriter writer; + writer.Write("NetBootLauncher: EEPROM flash not available for now.\r"); + + return kEfiFail; + } + + Boot::BootThread thread(inet.Data); + + if (thread.IsValid()) + return thread.Start(handover, YES); + return kEfiFail; -#else - return kEfiOk; -#endif } diff --git a/dev/Boot/Mod/NetBoot/NetBoot.h b/dev/Boot/Mod/NetBoot/NetBoot.h index e3a95c5f..ecc92d69 100644 --- a/dev/Boot/Mod/NetBoot/NetBoot.h +++ b/dev/Boot/Mod/NetBoot/NetBoot.h @@ -12,7 +12,9 @@ #include <NewKit/Defines.h> #define kNetBootINetMagic "NETB" -#define kNetBootINetMagicLength 4 +#define kNetBootINetMagicLength (4) + +#define kNetBootNameLen (255) /// @brief the internet header is used to download updates OTA. typedef struct NetBootInternetHeader @@ -22,10 +24,10 @@ typedef struct NetBootInternetHeader NeOS::Char NB3; /// magic char 3 'T' NeOS::Char NB4; /// magic char 4 'B' - NeOS::Char PatchName[255]; /// example: Modjo - NeOS::Int32 PatchLength; /// the patch length. - NeOS::Char PatchTarget[255]; /// the target file. - NeOS::Boolean ImpliesROM; /// does it imply an EEPROM reprogram? - NeOS::Boolean Preflight; /// is it a preflight packet. - NeOS::Char Data[]; /// non preflight packet has a patch blob for a **PatchTarget** -} NetBootInternetHeader; + NeOS::Char PatchName[kNetBootNameLen]; /// example: Modjo + NeOS::Int32 PatchLength; /// the patch length. + NeOS::Char PatchTarget[kNetBootNameLen]; /// the target file. + NeOS::Boolean EEPROM : 1; /// does it imply an EEPROM reprogram? + NeOS::Boolean Preflight : 1; /// is it a preflight packet. + NeOS::Char Data[]; /// non preflight packet has a patch blob for a **PatchTarget** +} ATTRIBUTE(packed) NetBootInternetHeader; |
