summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--Private/EFIKit/EFI.hxx21
-rw-r--r--Private/NewBoot/Source/Entrypoint.cxx8
-rw-r--r--Private/NewBoot/Source/FileReader.cxx34
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/AMD64-ATA.cxx3
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;