summaryrefslogtreecommitdiffhomepage
path: root/dev/Kernel/FirmwareKit
diff options
context:
space:
mode:
authorAmlal <amlal.elmahrouss@icloud.com>2025-01-24 21:18:46 +0100
committerAmlal <amlal.elmahrouss@icloud.com>2025-01-24 21:18:46 +0100
commit105c5a085c9cacf5774511506ebe4ada8f325457 (patch)
tree9c603e70918154f73e16c7a29a70ffba34a5270f /dev/Kernel/FirmwareKit
parent7ec22ed2ec82a72d691795bf12c158e1d58b09f7 (diff)
ADD: Missing components from private repository.
Signed-off-by: Amlal <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/Kernel/FirmwareKit')
-rw-r--r--dev/Kernel/FirmwareKit/CoreBoot/CoreBoot.h31
-rw-r--r--dev/Kernel/FirmwareKit/CoreBoot/NS.h10
-rw-r--r--dev/Kernel/FirmwareKit/CoreBoot/NetBoot.h25
-rw-r--r--dev/Kernel/FirmwareKit/EPM.h112
4 files changed, 178 insertions, 0 deletions
diff --git a/dev/Kernel/FirmwareKit/CoreBoot/CoreBoot.h b/dev/Kernel/FirmwareKit/CoreBoot/CoreBoot.h
new file mode 100644
index 00000000..b30511f6
--- /dev/null
+++ b/dev/Kernel/FirmwareKit/CoreBoot/CoreBoot.h
@@ -0,0 +1,31 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <NewKit/Defines.h>
+
+namespace Firmware::Detail::CoreBoot
+{
+ using namespace Kernel;
+
+ struct LEHeader;
+
+ /// @brief Linear Executable Header
+ /// @author Amlal EL Mahrouss
+ struct ATTRIBUTE(aligned(4)) LEHeader
+ {
+ const Char fMagic[2]; // magic number
+ const Char fName[10]; // operating system name
+ const UInt32 fRevision; // firmware revision
+ const UInt32 fStartAddress; // start address (master/slave(s) thread)
+
+#ifdef ZKA_IS_EXTENDED_COREBOOT
+ const UIntPtr fMasterStructure; // master structure for MP/PM and device tree and such (ARM)
+ const UIntPtr fMasterStructureVersion; // master structure version.
+#endif
+ };
+} // namespace Firmware::Detail::CoreBoot
diff --git a/dev/Kernel/FirmwareKit/CoreBoot/NS.h b/dev/Kernel/FirmwareKit/CoreBoot/NS.h
new file mode 100644
index 00000000..efe7fa19
--- /dev/null
+++ b/dev/Kernel/FirmwareKit/CoreBoot/NS.h
@@ -0,0 +1,10 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <FirmwareKit/CoreBoot/CoreBoot.h>
+#include <FirmwareKit/CoreBoot/NetBoot.h> \ No newline at end of file
diff --git a/dev/Kernel/FirmwareKit/CoreBoot/NetBoot.h b/dev/Kernel/FirmwareKit/CoreBoot/NetBoot.h
new file mode 100644
index 00000000..a6f10809
--- /dev/null
+++ b/dev/Kernel/FirmwareKit/CoreBoot/NetBoot.h
@@ -0,0 +1,25 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+#pragma once
+
+#include <NewKit/Defines.h>
+
+/// @brief the internet header is used to download updates OTA.
+typedef struct NetBootInternetHeader
+{
+ Kernel::Char NB1; /// magic char 1 'N'
+ Kernel::Char NB2; /// magic char 2 'E'
+ Kernel::Char NB3; /// magic char 3 'T'
+ Kernel::Char NB4; /// magic char 4 'B'
+
+ Kernel::Char PatchName[255]; /// example: ColdChoco
+ Kernel::Int32 PatchLength; /// the patch length.
+ Kernel::Char PatchTarget[255]; /// the target file.
+ Kernel::Boolean ImpliesROM; /// does it imply an EEPROM reprogram?
+ Kernel::Boolean Preflight; /// is it a preflight packet.
+ Kernel::Char Patch[]; /// non preflight packet has a patch blob for a **PatchTarget**
+} NetBootInternetHeader;
diff --git a/dev/Kernel/FirmwareKit/EPM.h b/dev/Kernel/FirmwareKit/EPM.h
new file mode 100644
index 00000000..244a44b8
--- /dev/null
+++ b/dev/Kernel/FirmwareKit/EPM.h
@@ -0,0 +1,112 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024, Amlal EL Mahrouss, all rights reserved.
+
+------------------------------------------- */
+
+/**
+ @brief The Explicit Partition Map scheme.
+*/
+
+#ifndef FIRMWAREKIT_EPM_H
+#define FIRMWAREKIT_EPM_H
+
+#include <NewKit/Defines.h>
+
+#define kEPMNameLength (32)
+#define kEPMFilesystemLength (16)
+#define kEPMMagicLength (5)
+
+/* @brief AMD64 magic for EPM */
+#define kEPMMagic86 "EPMAM"
+
+/* @brief RISC-V magic for EPM */
+#define kEPMMagicRISCV "EPMRV"
+
+/* @brief ARM magic for EPM */
+#define kEPMMagicARM "EPMAR"
+
+/* @brief 64x0 magic for EPM */
+#define kEPMMagic64k "EPM64"
+
+/* @brief 32x0 magic for EPM */
+#define kEPMMagic32k "EPM32"
+
+/* @brief POWER magic for EPM */
+#define kEPMMagicPPC "EPMPC"
+
+/* @brief Invalid magic for EPM */
+#define kEPMMagicError "EPM??"
+
+#ifdef __ZKA_AMD64__
+#define kEPMMagic kEPMMagic86
+#else
+#ifdef __ZKA_ARM64__
+#define kEPMMagic kEPMMagicARM
+#else
+#define kEPMMagic kEPMMagicError
+#endif
+#endif
+
+///! @brief partition must start at this address.
+///! Anything below is reserved for Data backup by the Main OS.
+#define kEPMPartBlockLba (sizeof(EPM_PART_BLOCK))
+
+///! @brief Current EPM revision.
+#define kEPMRevisionBcd (0x0100)
+
+/// !@brief EPM boot block address.
+#define kEPMBootBlockLba (0U)
+
+#define kEPMReserveLen (401)
+
+struct EPM_GUID;
+struct EPM_PART_BLOCK;
+
+/* The first 0 > 128 addresses of a disk contains these headers. */
+
+/// @brief EPM GUID structure.
+typedef struct EPM_GUID
+{
+ Kernel::UInt32 Data1;
+ Kernel::UInt16 Data2;
+ Kernel::UInt16 Data3;
+ Kernel::UInt8 Data4[8];
+} EPM_GUID;
+
+/**
+ * @brief The EPM boot block.
+ * @note NumBlock and LbaStart are ignored on some platforms.
+ */
+struct PACKED EPM_PART_BLOCK
+{
+ Kernel::Char Magic[kEPMMagicLength];
+ Kernel::Char Name[kEPMNameLength];
+ EPM_GUID Guid;
+ Kernel::Int32 Version;
+ Kernel::Int64 NumBlocks;
+ Kernel::Int64 SectorSz;
+ Kernel::Int64 LbaStart; // base offset
+ Kernel::Int64 LbaEnd; // addition of lba_start to get the end of partition.
+ Kernel::Int16 Kind;
+ Kernel::Int32 FsVersion;
+ Kernel::Char Fs[kEPMFilesystemLength]; /* NeFS, ffs2... */
+ Kernel::Char Reserved[kEPMReserveLen]; // to fill a full sector.
+};
+
+///! @brief Version kind enum.
+///! @brief Use in boot block version field.
+
+enum
+{
+ kEPMInvalid = 0x00,
+ kEPMGenericOS = 0xcf, // Generic OS
+ kEPMLinux = 0x8f, // Linux on EPM
+ kEPMBSD = 0x9f, // Berkeley Soft. Distribution
+ kEPMZkaOS = 0x1f, // This OS.
+ kEPMInvalidOS = 0xff,
+};
+
+typedef struct EPM_PART_BLOCK BOOT_BLOCK_STRUCT;
+
+#endif // ifndef FIRMWAREKIT_EPM_H