diff options
| author | Amlal <amlalelmahrouss@icloud.com> | 2024-07-28 16:11:46 +0000 |
|---|---|---|
| committer | Amlal <amlalelmahrouss@icloud.com> | 2024-07-28 16:11:46 +0000 |
| commit | c4023005e029ae092dad2689564c490580dd5c28 (patch) | |
| tree | 3080ba07a6b552bf3d7591574cf69b2a3c8fd0fd /Kernel/FirmwareKit | |
| parent | 8c8822fff78f9ff9cd640271da9b3634c4c2f97f (diff) | |
| parent | 4db57a2d646b1538783a0675b38bada7a0f903ae (diff) | |
Merged in MHR-36 (pull request #17)
MHR-36
Diffstat (limited to 'Kernel/FirmwareKit')
| -rw-r--r-- | Kernel/FirmwareKit/EFI.hxx | 2 | ||||
| -rw-r--r-- | Kernel/FirmwareKit/EFI/API.hxx | 42 | ||||
| -rw-r--r-- | Kernel/FirmwareKit/EFI/EFI.hxx | 13 | ||||
| -rw-r--r-- | Kernel/FirmwareKit/EPM.hxx | 90 | ||||
| -rw-r--r-- | Kernel/FirmwareKit/Handover.hxx | 8 |
5 files changed, 75 insertions, 80 deletions
diff --git a/Kernel/FirmwareKit/EFI.hxx b/Kernel/FirmwareKit/EFI.hxx index c83d62fe..ab705038 100644 --- a/Kernel/FirmwareKit/EFI.hxx +++ b/Kernel/FirmwareKit/EFI.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ diff --git a/Kernel/FirmwareKit/EFI/API.hxx b/Kernel/FirmwareKit/EFI/API.hxx index 691c19d7..3bb1fb76 100644 --- a/Kernel/FirmwareKit/EFI/API.hxx +++ b/Kernel/FirmwareKit/EFI/API.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -9,13 +9,15 @@ #include <FirmwareKit/EFI/EFI.hxx> #include <FirmwareKit/Handover.hxx> -#include <KernelKit/MSDOS.hpp> +#include <KernelKit/MSDOS.hxx> #include <KernelKit/PE.hxx> #ifdef __NEWBOOT__ // forward decl. class BTextWriter; +#define cWebsiteMacro "https://zka-mobile.com/help" + #define __BOOTKIT_NO_INCLUDE__ 1 #include <BootKit/BootKit.hxx> @@ -76,7 +78,6 @@ Bascially frees everything we have in the EFI side. inline void ThrowError(const EfiCharType* ErrorCode, const EfiCharType* Reason) noexcept { -#ifdef __DEBUG__ ST->ConOut->OutputString(ST->ConOut, L"\r*** STOP ***\r"); ST->ConOut->OutputString(ST->ConOut, L"*** Error: "); @@ -86,36 +87,29 @@ Bascially frees everything we have in the EFI side. ST->ConOut->OutputString(ST->ConOut, Reason); ST->ConOut->OutputString(ST->ConOut, L" ***\r"); -#endif // ifdef __DEBUG__ #ifdef __NEWBOOT__ - GXInit(); - - GXDrawImg(NewBootFatal, NEWBOOTFATAL_HEIGHT, NEWBOOTFATAL_WIDTH, - (kHandoverHeader->f_GOP.f_Width - NEWBOOTFATAL_WIDTH) / 2, - (kHandoverHeader->f_GOP.f_Height - NEWBOOTFATAL_HEIGHT) / 2); - - GXFini(); + // Show the QR code now. - /// Show the QR code now. + constexpr auto cVer = 4; + const auto cECC = qr::Ecc::H; + const auto cInput = cWebsiteMacro; + const auto cInputLen = StrLen(cWebsiteMacro); - constexpr auto ver = 4; - auto ecc = qr::Ecc::H; - auto str = "https://el-mahrouss-logic.com/"; - auto len = StrLen("https://el-mahrouss-logic.com/"); + qr::Qr<cVer> encoder; + qr::QrDelegate encoderDelegate; - qr::Qr<ver> encoder; - qr::QrDelegate encoderDelegate; + encoder.encode(cInput, cInputLen, cECC, 0); // Manual mask 0 - encoder.encode(str, len, ecc, 0); // Manual mask 0 + const auto cWhereStartX = (kHandoverHeader->f_GOP.f_Width - encoder.side_size()) - 20; + const auto cWhereStartY = (kHandoverHeader->f_GOP.f_Height - encoder.side_size()) / 2; - /// tell delegate to draw encoded QR. - encoderDelegate.draw<ver>(encoder, (kHandoverHeader->f_GOP.f_Width - encoder.side_size()) - 20, - (kHandoverHeader->f_GOP.f_Height - encoder.side_size()) / 2); - -#endif // ifdef __NEWBOOT__ + // tell delegate to draw encoded QR now. + encoderDelegate.draw<cVer>(encoder, cWhereStartX, + cWhereStartY); EFI::Stop(); +#endif // ifdef __NEWBOOT__ } } // namespace EFI diff --git a/Kernel/FirmwareKit/EFI/EFI.hxx b/Kernel/FirmwareKit/EFI/EFI.hxx index 922044d4..573778ea 100644 --- a/Kernel/FirmwareKit/EFI/EFI.hxx +++ b/Kernel/FirmwareKit/EFI/EFI.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -46,7 +46,7 @@ typedef UInt64 EfiStatusType; /// This is like NT's Win32 HANDLE type. typedef struct EfiHandle { -} * EfiHandlePtr; +}* EfiHandlePtr; /* UEFI uses wide characters by default. */ typedef WideChar EfiCharType; @@ -589,11 +589,12 @@ typedef struct EfiSystemTable { EfiGUID VendorGUID; VoidPtr VendorTable; - } * ConfigurationTable; + }* ConfigurationTable; } EfiSystemTable; -#define kEfiOk 0 -#define kEfiFail -1 +#define kEfiOk 0 +#define kEfiFail -1 +#define kBufferTooSmall 5 #define EFI_EXTERN_C extern "C" @@ -721,8 +722,10 @@ typedef struct EfiFileProtocol EfiStatusType(EFI_API* ReadEx)(EfiFileProtocol* This, struct EfiIOToken* Token); + EfiStatusType(EFI_API* WriteEx)(EfiFileProtocol* This, struct EfiIOToken* Token); + EfiStatusType(EFI_API* FlushEx)(EfiFileProtocol* This, struct EfiIOToken* Token); } EfiFileProtocol, *EfiFileProtocolPtr; diff --git a/Kernel/FirmwareKit/EPM.hxx b/Kernel/FirmwareKit/EPM.hxx index 9669e324..2766abf6 100644 --- a/Kernel/FirmwareKit/EPM.hxx +++ b/Kernel/FirmwareKit/EPM.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -17,36 +17,6 @@ #define kEPMFilesystemLength (16) #define kEPMMagicLength (5) -/* The first 0 > 128 addresses of a disk contains these headers. */ - -/// @brief EPM GUID structure. -typedef struct BlockGUID -{ - Kernel::UInt32 Data1; - Kernel::UInt16 Data2; - Kernel::UInt16 Data3; - Kernel::UInt8 Data4[8]; -} BlockGUID; - -/** - * @brief The EPM boot block. - * @note NumBlock and LbaStart are ignored on some platforms. - */ -struct PACKED BootBlock -{ - Kernel::Char Magic[kEPMMagicLength]; - Kernel::Char Name[kEPMNameLength]; - BlockGUID Uuid; - Kernel::Int32 Version; - Kernel::Int64 NumBlocks; - Kernel::Int64 SectorSz; - Kernel::Int64 LbaStart; - Kernel::Int16 Kind; - Kernel::Int32 FsVersion; - Kernel::Char Fs[kEPMFilesystemLength]; /* NewFS, ffs2... */ - Kernel::Char Reserved[409]; // to fill a full sector. -}; - /* @brief AMD64 magic for EPM */ #define kEPMMagic86 "EPMAM" @@ -79,19 +49,6 @@ struct PACKED BootBlock #define kEPMMagicError "EPM??" -///! @brief Version kind enum. -///! @brief Use in boot block version field. - -enum kEPMKind -{ - kEPMMpUx = 0xcf, // Bridge or other embedded OS - kEPMLinux = 0x8f, - kEPMBSD = 0x9f, - kEPMNewOS = 0x1f, // This kernel. -}; - -typedef struct BootBlock BootBlockType; - #ifdef __NEWOS_AMD64__ #define kEPMMagic kEPMMagic86 #else @@ -104,7 +61,7 @@ typedef struct BootBlock BootBlockType; ///! @brief partition must start at this address. ///! Anything below is reserved for Data backup by the Main OS. -#define kEPMStartPartitionBlk (sizeof(BootBlock)) +#define kEPMStartPartitionBlk (sizeof(_BOOT_BLOCK_STRUCT)) ///! @brief Current EPM revision #define kEPMRevision (0xAD) @@ -113,6 +70,47 @@ typedef struct BootBlock BootBlockType; /// !@brief EPM base address #define kEpmBase (0U) -/// END OF SPECS +/* The first 0 > 128 addresses of a disk contains these headers. */ + +/// @brief EPM GUID structure. +typedef struct _BLOCK_GUID_STRUCT +{ + Kernel::UInt32 Data1; + Kernel::UInt16 Data2; + Kernel::UInt16 Data3; + Kernel::UInt8 Data4[8]; +} BLOCK_GUID_STRUCT; + +/** + * @brief The EPM boot block. + * @note NumBlock and LbaStart are ignored on some platforms. + */ +struct PACKED _BOOT_BLOCK_STRUCT +{ + Kernel::Char Magic[kEPMMagicLength]; + Kernel::Char Name[kEPMNameLength]; + BLOCK_GUID_STRUCT Uuid; + Kernel::Int32 Version; + Kernel::Int64 NumBlocks; + Kernel::Int64 SectorSz; + Kernel::Int64 LbaStart; + Kernel::Int16 Kind; + Kernel::Int32 FsVersion; + Kernel::Char Fs[kEPMFilesystemLength]; /* NewFS, ffs2... */ + Kernel::Char Reserved[409]; // to fill a full sector. +}; + +///! @brief Version kind enum. +///! @brief Use in boot block version field. + +enum +{ + kEPMMpUx = 0xcf, // Bridge or other embedded OS + kEPMLinux = 0x8f, + kEPMBSD = 0x9f, + kEPMNewOS = 0x1f, // This kernel. +}; + +typedef struct _BOOT_BLOCK_STRUCT BOOT_BLOCK_STRUCT; #endif // ifndef __FIRMWARE_EPM_HXX__ diff --git a/Kernel/FirmwareKit/Handover.hxx b/Kernel/FirmwareKit/Handover.hxx index 02e5fb21..01f2be2c 100644 --- a/Kernel/FirmwareKit/Handover.hxx +++ b/Kernel/FirmwareKit/Handover.hxx @@ -1,6 +1,6 @@ /* ------------------------------------------- - Copyright Zeta Electronics Corporation + Copyright ZKA Technologies ------------------------------------------- */ @@ -11,7 +11,7 @@ * @version 0.3 * @date 2024-02-23 * - * @copyright Copyright (c) 2024, Zeta Electronics Corporation + * @copyright Copyright (c) 2024, ZKA Technologies * */ @@ -76,7 +76,7 @@ it tells us more about it and IS format independent. struct { VoidPtr f_SmBios; - VoidPtr f_RsdPtr; + VoidPtr f_VendorPtr; } f_HardwareTables; struct @@ -100,7 +100,7 @@ it tells us more about it and IS format independent. }; /// @brief Bootloader main type. - typedef void (*BootMainKind)(Kernel::HEL::HandoverInformationHeader* handoverInfo); + typedef void (*BootMainKind)(HandoverInformationHeader* handoverInfo); /// @brief Alias of bootloader main type. typedef void (*HandoverProc)(HandoverInformationHeader* handoverInfo); |
