diff options
| -rw-r--r-- | Private/EFIKit/EFI.hxx | 21 | ||||
| -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 |
4 files changed, 37 insertions, 29 deletions
diff --git a/Private/EFIKit/EFI.hxx b/Private/EFIKit/EFI.hxx index 5937f240..46deaf9b 100644 --- a/Private/EFIKit/EFI.hxx +++ b/Private/EFIKit/EFI.hxx @@ -600,9 +600,6 @@ enum { #define kEFIDirectory 0x10 #define kEFIArchive 0x20 -typedef EfiStatusType(EFI_API *EfiRead)(struct EfiFileProtocol *, UInt64 *, - VoidPtr); - struct EfiFileProtocol final { UInt64 Revision; @@ -611,23 +608,17 @@ struct EfiFileProtocol final { EfiStatusType (*Close)(struct EfiFileProtocol *); - void (*Unused1)(); + EfiStatusType (*Delete)(struct EfiFileProtocol *This); + + EfiStatusType (*Read)(struct EfiFileProtocol *This, UInt32 *BufSize, + VoidPtr BufOut); - EfiRead Read; + EfiStatusType (*GetPosition)(EfiFileProtocol *This, UInt64 *Position); - void (*Unused2)(); - void (*Unused3)(); - void (*Unused4)(); + EfiStatusType (*SetPosition)(EfiFileProtocol *This, UInt64 *Position); EfiStatusType (*GetInfo)(struct EfiFileProtocol *, struct EfiGUID *, UInt32 *, void *); - - void (*Unused6)(); - void (*Unused7)(); - void (*Unused8)(); - void (*Unused9)(); - void (*Unused10)(); - void (*Unused11)(); }; typedef struct EfiTime { 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; |
