summaryrefslogtreecommitdiffhomepage
path: root/Private/NewBoot/Source/FileReader.cxx
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-04 17:07:33 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-04 17:07:33 +0100
commit9fe3b6e1e2447a11644307e83df2b109b24fe0d1 (patch)
treed6eafa0dee897572554d4519b1a9cd878591254c /Private/NewBoot/Source/FileReader.cxx
parenta3d92ea68a74ef3cc3d3c9a34540754869e4d014 (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.cxx71
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");
}