diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-04-26 10:44:18 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-04-26 10:44:18 +0200 |
| commit | e9b93cb61f130c2b07bdc031a2487e27ca5333f1 (patch) | |
| tree | a00502a8685ee3236a4a79ed51f3633a5a1f49eb /Private/NewBoot/Source | |
| parent | ba80f513dd5cd82feae0b8f794b3367caf9ce8bb (diff) | |
MHR-16: NewBoot - BDiskFormatter and QR.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
Diffstat (limited to 'Private/NewBoot/Source')
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/BootATA.cxx | 13 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/BootFileReader.cxx | 2 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/BootMain.cxx | 4 |
3 files changed, 13 insertions, 6 deletions
diff --git a/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx b/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx index 41ea04ac..4bf7bc96 100644 --- a/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx @@ -237,15 +237,20 @@ SizeT BootDeviceATA::GetDiskSize() noexcept { boot_ata_wait_io(this->Leak().mBus); - SizeT result = 0; + UInt64 result = 0; - result += In8(this->Leak().mBus + ATA_CYL_LOW); + result = In8(this->Leak().mBus + ATA_CYL_LOW); result += In8(this->Leak().mBus + ATA_CYL_MID) << 8; result += In8(this->Leak().mBus + ATA_CYL_HIGH) << 16; - result += In8(this->Leak().mBus + ATA_CYL_HIGH) << 24; + + Out8(this->Leak().mBus + ATA_REG_CONTROL, 0x80); + + result += In8(this->Leak().mBus + ATA_CYL_LOW) << 24; + result += In8(this->Leak().mBus + ATA_CYL_MID) << 32; + result += In8(this->Leak().mBus + ATA_CYL_HIGH) << 40; BTextWriter writer; - writer.Write(L"Disk-Size: ").Write(result).Write(L"\r\n"); + writer.Write(L"Device-Size: ").Write(result).Write(L"\r\n"); return result; } diff --git a/Private/NewBoot/Source/HEL/AMD64/BootFileReader.cxx b/Private/NewBoot/Source/HEL/AMD64/BootFileReader.cxx index 0e126ada..b2d728ae 100644 --- a/Private/NewBoot/Source/HEL/AMD64/BootFileReader.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/BootFileReader.cxx @@ -110,7 +110,7 @@ Void BFileReader::ReadAll(SizeT until, SizeT chunk) { if (auto err = BS->AllocatePool(EfiLoaderCode, until, (VoidPtr*)&mBlob) != kEfiOk) { mWriter.Write(L"*** EFI-Code: ").Write(err).Write(L" ***\r\n"); - EFI::ThrowError(L"NewBoot_PageError", L"Allocation error."); + EFI::ThrowError(L"OutOfMemory", L"Allocation error."); } } diff --git a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx index a928a41a..1c969b28 100644 --- a/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/BootMain.cxx @@ -181,9 +181,11 @@ EFI_EXTERN_C EFI_API Int Main(EfiHandlePtr ImageHandle, /// format the disk. // + constexpr auto binarySize = KIB(512); + /// need this as well, to invoke BExecutableLoader. BFileReader readerKernel(L"NewKernel.exe", ImageHandle); - readerKernel.ReadAll(MIB(1), 4096); + readerKernel.ReadAll(binarySize, BootDeviceATA::kSectorSize); BDiskFormatFactory<BootDeviceATA> diskFormatter; |
