diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-02 09:00:37 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-02 09:00:37 +0100 |
| commit | e619d59744bec279dc49570be278a7845a4f7b8c (patch) | |
| tree | 6fceb40478de18ec9537592d7b786ffbdc6dc938 | |
| parent | 95a887d120b7955bb02f582339d0536696a4cc79 (diff) | |
Bootloader: Fix ATA driver.
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
| -rw-r--r-- | Private/NewBoot/BootKit/Arch/ATA.hxx | 12 | ||||
| -rw-r--r-- | Private/NewBoot/Source/HEL/AMD64/ATA.cxx | 15 |
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; |
