summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-04-26 12:23:00 +0200
committerAmlal El Mahrouss <amlal.elmahrouss@icloud.com>2024-04-26 12:23:00 +0200
commitfc19214c74c39177f85a4ee0748ac4ec9c1d4f33 (patch)
tree9589fc5a88b3ff7d62390289c8fe00f71dfb45e5
parent72b014b98fab4a6f875648a4b7b42347f780067e (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.hxx7
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/BootATA.cxx23
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;
}