summaryrefslogtreecommitdiffhomepage
path: root/dev/kernel/FirmwareKit/EPM.h
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-23 19:13:48 +0100
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2025-03-23 19:15:17 +0100
commita13e1c0911c0627184bc38f18c7fdda64447b3ad (patch)
tree073a62c09bf216e85a3f310376640fa1805147f9 /dev/kernel/FirmwareKit/EPM.h
parent149fa096eb306d03686b3b67e813cf1a78e08cd0 (diff)
meta(kernel): Reworked repository's filesystem structure.
Removing useless parts of the project too. Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'dev/kernel/FirmwareKit/EPM.h')
-rw-r--r--dev/kernel/FirmwareKit/EPM.h111
1 files changed, 111 insertions, 0 deletions
diff --git a/dev/kernel/FirmwareKit/EPM.h b/dev/kernel/FirmwareKit/EPM.h
new file mode 100644
index 00000000..4728e2f5
--- /dev/null
+++ b/dev/kernel/FirmwareKit/EPM.h
@@ -0,0 +1,111 @@
+/* -------------------------------------------
+
+ Copyright (C) 2024-2025, 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 __NE_AMD64__
+#define kEPMMagic kEPMMagic86
+#else
+#ifdef __NE_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 (399)
+
+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
+{
+ NeOS::UInt32 Data1;
+ NeOS::UInt16 Data2;
+ NeOS::UInt16 Data3;
+ NeOS::UInt8 Data4[8];
+} PACKED EPM_GUID;
+
+/**
+ * @brief The EPM boot block.
+ * @note NumBlock and LbaStart are ignored on some platforms.
+ */
+struct PACKED EPM_PART_BLOCK
+{
+ NeOS::Char Magic[kEPMMagicLength];
+ NeOS::Char Name[kEPMNameLength];
+ EPM_GUID Guid;
+ NeOS::Int32 Version;
+ NeOS::Int64 NumBlocks;
+ NeOS::Int64 SectorSz;
+ NeOS::Int64 LbaStart; // base offset
+ NeOS::Int64 LbaEnd; // end offset
+ NeOS::Int16 Kind;
+ NeOS::Int16 Flags;
+ NeOS::Int32 FsVersion;
+ NeOS::Char Fs[kEPMFilesystemLength]; /* NeFS, HeFS... */
+ NeOS::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
+ kEPMNeOS = 0x1f, // This OS.
+ kEPMInvalidOS = 0xff,
+};
+
+#endif // ifndef FIRMWAREKIT_EPM_H