diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-04 12:52:03 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-04 12:52:03 +0100 |
| commit | 46ec13f846a25dffaac0525d45003e7ee2a101ff (patch) | |
| tree | 7810bfd4703b01dc010d626519d5cfee05c63fb7 /Private/NewBoot/Source | |
| parent | e2bbec91d70847cc5a2ff67eb84ca4a3c2d03e85 (diff) | |
Fix: EFI implementation of FileProtocol was buggy, fixed it.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot/Source')
| -rw-r--r-- | Private/NewBoot/Source/Entrypoint.cxx | 8 | ||||
| -rw-r--r-- | Private/NewBoot/Source/FileReader.cxx | 34 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx | 3 |
3 files changed, 31 insertions, 14 deletions
diff --git a/Private/NewBoot/Source/Entrypoint.cxx b/Private/NewBoot/Source/Entrypoint.cxx index 4839ee1f..2b1e5c35 100644 --- a/Private/NewBoot/Source/Entrypoint.cxx +++ b/Private/NewBoot/Source/Entrypoint.cxx @@ -14,7 +14,7 @@ #include <KernelKit/PE.hpp> #include <NewKit/Ref.hpp> -STATIC Void DrawBackground() { +STATIC Void InitGfx() noexcept { EfiGUID gopGuid = EfiGUID(EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID); EfiGraphicsOutputProtocol* gop = nullptr; @@ -32,10 +32,14 @@ STATIC Void DrawBackground() { EFI_EXTERN_C Int EfiMain(EfiHandlePtr ImageHandle, EfiSystemTable* SystemTable) { InitEFI(SystemTable); - DrawBackground(); + InitGfx(); BTextWriter writer; + writer.WriteString(L"HCoreLdr: ") + .WriteString(L"Copyright Mahrouss-Logic Corporation.") + .WriteString(L"\r\n"); + writer.WriteString(L"HCoreLdr: Firmware: ") .WriteString(SystemTable->FirmwareVendor) .WriteString(L"\r\n"); diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx index 3edacb5a..7bcccc10 100644 --- a/Private/NewBoot/Source/FileReader.cxx +++ b/Private/NewBoot/Source/FileReader.cxx @@ -16,6 +16,7 @@ #include <EFIKit/Api.hxx> #include "EFIKit/EFI.hxx" +#include "NewKit/Defines.hpp" //////////////////////////////////////////////////////////////////////////////////////////////////// // @@ -64,17 +65,13 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle) { EfiLoadImageProtocol* img = nullptr; EfiGUID guidImg = EfiGUID(EFI_LOADED_IMAGE_PROTOCOL_GUID); - if (BS->OpenProtocol(ImageHandle, &guidImg, (void**)&img, ImageHandle, - nullptr, - EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL) != kEfiOk) { + if (BS->HandleProtocol(ImageHandle, &guidImg, (void**)&img) != kEfiOk) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Protocol") .WriteString(L"\r\n"); this->mErrorCode = kNotSupported; } - if (BS->OpenProtocol(img->DeviceHandle, &guidEfp, (void**)&efp, ImageHandle, - nullptr, - EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL) != kEfiOk) { + if (BS->HandleProtocol(img->DeviceHandle, &guidEfp, (void**)&efp) != kEfiOk) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Protocol") .WriteString(L"\r\n"); this->mErrorCode = kNotSupported; @@ -122,13 +119,28 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle) { mWriter.WriteString(L"HCoreLdr: Fetch-Info: In-Progress...") .WriteString(L"\r\n"); - UInt8* blob = nullptr; + VoidPtr blob = nullptr; mWriter.WriteString(L"HCoreLdr: Fetch-Info: OK...").WriteString(L"\r\n"); - UInt64 sz = info.FileSize; + UInt32* sz = nullptr; - if (BS->AllocatePool(EfiBootServicesData, sz, (VoidPtr*)&blob) != kEfiOk) { + if (BS->AllocatePool(EfiLoaderData, sizeof(UInt32), (VoidPtr*)&sz) != + kEfiOk) { + mWriter + .WriteString( + L"HCoreLdr: Fetch: Failed to call AllocatePool " + L"correctly!") + .WriteString(L"\r\n"); + + kernelFile->Close(kernelFile); + + return nullptr; + } + + *sz = info.FileSize; + + if (BS->AllocatePool(EfiLoaderData, *sz, (VoidPtr*)&blob) != kEfiOk) { mWriter .WriteString( L"HCoreLdr: Fetch: Failed to call AllocatePool " @@ -140,12 +152,12 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle) { return nullptr; } - BSetMem((CharacterType*)blob, 0, sz); + BSetMem((CharacterType*)blob, 0, *sz); mWriter.WriteString(L"HCoreLdr: Fetch-File: In-Progress...") .WriteString(L"\r\n"); - kernelFile->Read(kernelFile, &sz, blob); + kernelFile->Read(kernelFile, sz, blob); mWriter.WriteString(L"HCoreLdr: Fetch-File: OK").WriteString(L"\r\n"); diff --git a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx index 46bec94c..2ef2189c 100644 --- a/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx @@ -71,7 +71,8 @@ ATAInit_Retry: auto statRdy = In8(IO + ATA_REG_STATUS); if (statRdy & ATA_SR_ERR) { - writer.WriteString(L"HCoreLdr: Probe error.\r\n"); + writer.WriteString( + L"HCoreLdr: ATA: Hard-drive error, not an IDE drive.\r\n"); return false; } if ((statRdy & ATA_SR_BSY)) goto ATAInit_Retry; |
