diff options
| author | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-04-26 12:23:00 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal.elmahrouss@icloud.com> | 2024-04-26 12:23:00 +0200 |
| commit | fc19214c74c39177f85a4ee0748ac4ec9c1d4f33 (patch) | |
| tree | 9589fc5a88b3ff7d62390289c8fe00f71dfb45e5 | |
| parent | 72b014b98fab4a6f875648a4b7b42347f780067e (diff) | |
MHR-16: Fix bug inside GetDiskSize, use a simple formula instead of
doing stupid sh*t.
Signed-off-by: Amlal El Mahrouss <amlal.elmahrouss@icloud.com>
| -rw-r--r-- | Private/NewBoot/BootKit/BootKit.hxx | 7 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/BootATA.cxx | 23 |
2 files changed, 6 insertions, 24 deletions
diff --git a/Private/NewBoot/BootKit/BootKit.hxx b/Private/NewBoot/BootKit/BootKit.hxx index 2d8b535d..f7f33958 100644 --- a/Private/NewBoot/BootKit/BootKit.hxx +++ b/Private/NewBoot/BootKit/BootKit.hxx @@ -229,6 +229,9 @@ public: return false; } + BTextWriter writer; + writer.Write(L"Device Size: ").Write(this->fDiskDev.GetDiskSize()).Write(L"\r\n"); + if (blockPart->DiskSize != this->fDiskDev.GetDiskSize() || blockPart->DiskSize < 1 || blockPart->SectorSize != BootDev::kSectorSize) { @@ -237,9 +240,7 @@ public: EFI::ThrowError(L"Invalid-Partition-Name", L"Invalid disk partition."); } - BTextWriter writer; - - writer.Write(L"Disk Partition: ").Write(blockPart->PartitionName).Write(L" is healthy.\r\n"); + writer.Write(L"Device Partition: ").Write(blockPart->PartitionName).Write(L" is healthy.\r\n"); return true; } diff --git a/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx b/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx index 4bf7bc96..8ab7dc20 100644 --- a/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx +++ b/Private/NewBoot/Source/HEL/AMD64/BootATA.cxx @@ -229,28 +229,9 @@ BootDeviceATA::ATATrait& BootDeviceATA::Leak() { return mTrait; } @brief Getter, gets the number of sectors inside the drive. */ SizeT BootDeviceATA::GetSectorsCount() noexcept { - return kATAData[60] + kATAData[61]; + return (kATAData[61] << 16)| kATAData[60]; } SizeT BootDeviceATA::GetDiskSize() noexcept { - Out8(this->Leak().mBus + ATA_REG_COMMAND, 0xF8); - - boot_ata_wait_io(this->Leak().mBus); - - UInt64 result = 0; - - 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; - - 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"Device-Size: ").Write(result).Write(L"\r\n"); - - return result; + return this->GetSectorsCount() * BootDeviceATA::kSectorSize; } |
