From f3d931aa7cfaf96baef8383b59a8938779541ee7 Mon Sep 17 00:00:00 2001 From: Amlal EL Mahrouss Date: Thu, 15 Aug 2024 18:35:34 +0200 Subject: [IMP] Moved source code into dev/ folder. Signed-off-by: Amlal EL Mahrouss --- dev/Kernel/FirmwareKit/Handover.hxx | 101 ++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 dev/Kernel/FirmwareKit/Handover.hxx (limited to 'dev/Kernel/FirmwareKit/Handover.hxx') diff --git a/dev/Kernel/FirmwareKit/Handover.hxx b/dev/Kernel/FirmwareKit/Handover.hxx new file mode 100644 index 00000000..a93ace39 --- /dev/null +++ b/dev/Kernel/FirmwareKit/Handover.hxx @@ -0,0 +1,101 @@ +/* ------------------------------------------- + + Copyright ZKA Technologies. + +------------------------------------------- */ + +/** + * @file Handover.hxx + * @author Amlal El Mahrouss (amlalelmahrouss@icloud.com) + * @brief The handover boot protocol. + * @version 0.3 + * @date 2024-02-23 + * + * @copyright Copyright (c) 2024, ZKA Technologies + * + */ + +#pragma once + +#include + +/* useful macros */ + +#define kHandoverMagic 0xBADCC +#define kHandoverVersion 0x113 + +#define kHandoverMaxCmdLine 8 + +#define kHandoverStructSz sizeof(HEL::HandoverHeader) + +namespace Kernel::HEL +{ + /** + @brief the kind of executable we're loading. +*/ + enum + { + kTypeKernel = 100, + kTypeKernelDriver = 101, + kTypeRsrc = 102, + kTypeCount = 3, + }; + + /** + @brief The executable architecture. +*/ + + enum + { + kArchAmd64 = 122, + kArchCount = 2, + }; + + struct HandoverInformationHeader + { + UInt64 f_Magic; + UInt64 f_Version; + + voidPtr f_VirtualStart; + SizeT f_VirtualSize; + voidPtr f_PhysicalStart; + + WideChar f_FirmwareVendorName[32]; + SizeT f_FirmwareVendorLen; + + struct + { + VoidPtr f_SmBios; + VoidPtr f_VendorPtr; + } f_HardwareTables; + + struct + { + UIntPtr f_The; + SizeT f_Size; + UInt32 f_Width; + UInt32 f_Height; + UInt32 f_PixelFormat; + UInt32 f_PixelPerLine; + } f_GOP; + + UInt64 f_FirmwareSpecific[8]; + Char f_CommandLine[255][kHandoverMaxCmdLine]; + }; + + enum + { + kHandoverSpecificKind, + kHandoverSpecificAttrib, + kHandoverSpecificMemoryEfi, + }; + + /// @brief Bootloader main type. + typedef void (*BootMainKind)(HandoverInformationHeader* handoverInfo); + + /// @brief Alias of bootloader main type. + typedef void (*HandoverProc)(HandoverInformationHeader* handoverInfo); +} // namespace Kernel::HEL + +/// @brief Bootloader global header. +inline Kernel::HEL::HandoverInformationHeader* kHandoverHeader = nullptr; -- cgit v1.2.3