summaryrefslogtreecommitdiffhomepage
path: root/dev
diff options
context:
space:
mode:
authorAmlal <amlal.elmahrouss@icloud.com>2025-02-25 08:58:58 +0100
committerAmlal <amlal.elmahrouss@icloud.com>2025-02-25 08:58:58 +0100
commit8f3454cb57f67a05234a0100c1c7f4887c275cf1 (patch)
treefa8f8905f03c3cdbf733ff78b7deb6242bb10be4 /dev
parenta69dc6b982be67156ba4273b37a87c9e03a54b2c (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')
-rw-r--r--dev/Boot/Mod/NetBoot/NetBoot.cc36
-rw-r--r--dev/Boot/Mod/NetBoot/NetBoot.h18
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;