diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-04 17:07:33 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-04 17:07:33 +0100 |
| commit | 9fe3b6e1e2447a11644307e83df2b109b24fe0d1 (patch) | |
| tree | d6eafa0dee897572554d4519b1a9cd878591254c /Private/NewBoot/Source/FileReader.cxx | |
| parent | a3d92ea68a74ef3cc3d3c9a34540754869e4d014 (diff) | |
HCR-11: Support for EFI GOP and SFP.
- SFP stands for Simple Filesystem Protocol, it's always reading through
the ESP.
- Add GOP for UI code.
- Did also patch kernel Virtual Memory code.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot/Source/FileReader.cxx')
| -rw-r--r-- | Private/NewBoot/Source/FileReader.cxx | 71 |
1 files changed, 18 insertions, 53 deletions
diff --git a/Private/NewBoot/Source/FileReader.cxx b/Private/NewBoot/Source/FileReader.cxx index 8602114f..a66f2c71 100644 --- a/Private/NewBoot/Source/FileReader.cxx +++ b/Private/NewBoot/Source/FileReader.cxx @@ -14,9 +14,7 @@ #include <BootKit/BootKit.hxx> #include <EFIKit/Api.hxx> - -#include "EFIKit/EFI.hxx" -#include "NewKit/Defines.hpp" +#include <EFIKit/Handover.hxx> //////////////////////////////////////////////////////////////////////////////////////////////////// // @@ -50,7 +48,7 @@ BFileReader::~BFileReader() { @brief this reads all of the buffer. @param ImageHandle used internally. */ -HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle, SizeT& imageSz) { +Void BFileReader::Fetch(EfiHandlePtr ImageHandle) { mWriter.WriteString(L"HCoreLdr: Fetch-File: ") .WriteString(mPath) .WriteString(L"\r\n"); @@ -75,7 +73,7 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle, SizeT& imageSz) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Protocol") .WriteString(L"\r\n"); this->mErrorCode = kNotSupported; - return nullptr; + return; } /// Start doing disk I/O @@ -84,7 +82,7 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle, SizeT& imageSz) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: No-Such-Volume") .WriteString(L"\r\n"); this->mErrorCode = kNotSupported; - return nullptr; + return; } /// Open kernel. @@ -97,14 +95,14 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle, SizeT& imageSz) { .WriteString(mPath) .WriteString(L"\r\n"); this->mErrorCode = kNotSupported; - return nullptr; + return; } if (kernelFile->Revision < EFI_FILE_PROTOCOL_REVISION2) { mWriter.WriteString(L"HCoreLdr: Fetch-Protocol: Invalid-Revision: ") .WriteString(mPath) .WriteString(L"\r\n"); - return nullptr; + return; } /// File FAT info. @@ -120,64 +118,31 @@ HCore::VoidPtr BFileReader::Fetch(EfiHandlePtr ImageHandle, SizeT& imageSz) { .WriteString(mPath) .WriteString(L"\r\n"); this->mErrorCode = kNotSupported; - return nullptr; + return; } mWriter.WriteString(L"HCoreLdr: Fetch-Info: In-Progress...") .WriteString(L"\r\n"); - VoidPtr blob = nullptr; + VoidPtr blob = (VoidPtr)kHandoverStartKernel; mWriter.WriteString(L"HCoreLdr: Fetch-Info: OK...").WriteString(L"\r\n"); - UInt32* sz = nullptr; - - 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; - imageSz = *sz; + UInt32 sz = info.FileSize; - if (BS->AllocatePool(EfiLoaderData, *sz, (VoidPtr*)&blob) != kEfiOk) { - mWriter - .WriteString( - L"HCoreLdr: Fetch: Failed to call AllocatePool " - L"correctly!") - .WriteString(L"\r\n"); - - kernelFile->Close(kernelFile); - - return nullptr; - } + BSetMem((CharacterType*)blob, 0, sz); - BSetMem((CharacterType*)blob, 0, *sz); - - mWriter.WriteString(L"HCoreLdr: Fetch-File: In-Progress...") - .WriteString(info.FileName) - .WriteString(L"\r\n"); - - auto resultEfiRead = kernelFile->Read(kernelFile, sz, blob); + auto resultEfiRead = kernelFile->Read(kernelFile, &sz, blob); kernelFile->Close(kernelFile); - if (resultEfiRead == kEfiOk) - mWriter.WriteString(L"HCoreLdr: Fetch-File: OK").WriteString(L"\r\n"); - else - return nullptr; + if (resultEfiRead != kEfiOk) return; + + mCached = true; + mErrorCode = kOperationOkay; - this->mCached = true; - this->mErrorCode = kOperationOkay; + mBlob = blob; - this->mBlob = blob; + // We are done! - return blob; + mWriter.WriteString(L"HCoreLdr: Fetch: OK.").WriteString(L"\r\n"); } |
