summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-02 09:00:37 +0100
committerAmlal El Mahrouss <amlalelmahrouss@icloud.com>2024-02-02 09:00:37 +0100
commite619d59744bec279dc49570be278a7845a4f7b8c (patch)
tree6fceb40478de18ec9537592d7b786ffbdc6dc938
parent95a887d120b7955bb02f582339d0536696a4cc79 (diff)
Bootloader: Fix ATA driver.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
-rw-r--r--Private/NewBoot/BootKit/Arch/ATA.hxx12
-rw-r--r--Private/NewBoot/Source/HEL/AMD64/ATA.cxx15
2 files changed, 14 insertions, 13 deletions
diff --git a/Private/NewBoot/BootKit/Arch/ATA.hxx b/Private/NewBoot/BootKit/Arch/ATA.hxx
index db92e290..5c42237a 100644
--- a/Private/NewBoot/BootKit/Arch/ATA.hxx
+++ b/Private/NewBoot/BootKit/Arch/ATA.hxx
@@ -115,15 +115,15 @@ Boolean ATAInitDriver(UInt8 Bus, UInt8 Drv);
Void ATAWait(UInt16 IO);
Void ATAReadLba(UInt32 Lba, UInt8 Bus, Boolean Master, wchar_t* Buf,
SizeT Offset);
-Void ATAWriteLba(UInt16 Byte, UInt32 Lba, UInt8 Bus, Boolean Master,
- wchar_t* Buf, SizeT Offset);
+Void ATAWriteLba(UInt32 Lba, UInt8 Bus, Boolean Master, wchar_t* Buf,
+ SizeT Offset);
Boolean ATAIsDetected(Void);
class BATADevice final {
public:
enum {
- kPrimary = ATA_PRIMARY,
- kSecondary = ATA_SECONDARY,
+ kPrimary = ATA_PRIMARY_IO,
+ kSecondary = ATA_SECONDARY_IO,
};
explicit BATADevice() noexcept;
@@ -138,8 +138,8 @@ class BATADevice final {
operator bool() { return ATAIsDetected(); }
- BATADevice& Read(WideChar*, const SizeT&);
- BATADevice& Write(WideChar*, const SizeT&);
+ BATADevice& Read(WideChar* Buf, const SizeT& SecCount);
+ BATADevice& Write(WideChar* Buf, const SizeT& SecCount);
ATATraits& Leak();
diff --git a/Private/NewBoot/Source/HEL/AMD64/ATA.cxx b/Private/NewBoot/Source/HEL/AMD64/ATA.cxx
index fb11f409..80dffa02 100644
--- a/Private/NewBoot/Source/HEL/AMD64/ATA.cxx
+++ b/Private/NewBoot/Source/HEL/AMD64/ATA.cxx
@@ -121,8 +121,8 @@ Void ATAReadLba(UInt32 Lba, UInt8 Bus, Boolean Master, CharacterType* Buf,
ATAWait(IO);
}
-Void ATAWriteLba(UInt16 Byte, UInt32 Lba, UInt8 Bus, Boolean Master,
- wchar_t* Buf, SizeT Offset) {
+Void ATAWriteLba(UInt32 Lba, UInt8 Bus, Boolean Master, wchar_t* Buf,
+ SizeT Offset) {
UInt16 IO = Bus;
ATASelect(IO + ATA_REG_HDDEVSEL,
@@ -186,10 +186,11 @@ BATADevice& BATADevice::Read(CharacterType* Buf, const SizeT& Sz) {
SizeT Off = 0;
- for (SizeT i = 0UL; i < (Sz / 512); ++i) {
+ for (SizeT i = 0UL; i < Sz; ++i) {
ATAReadLba(this->Leak().mBase + i, this->Leak().mBus, this->Leak().mMaster,
Buf, Off);
- Off += 256;
+
+ Off += 512;
}
return *this;
@@ -203,10 +204,10 @@ BATADevice& BATADevice::Write(CharacterType* Buf, const SizeT& Sz) {
SizeT Off = 0UL;
for (SizeT i = 0UL; i < Sz; ++i) {
- ATAWriteLba(Buf[i], this->Leak().mBase + i, this->Leak().mBus,
- this->Leak().mMaster, Buf, Off);
+ ATAWriteLba(this->Leak().mBase + i, this->Leak().mBus, this->Leak().mMaster,
+ Buf, Off);
- Off += 256;
+ Off += 512;
}
return *this;