diff options
| author | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-11-22 14:24:05 +0100 |
|---|---|---|
| committer | Amlal EL Mahrouss <amlalelmahrouss@icloud.com> | 2024-11-22 14:24:05 +0100 |
| commit | ca073c9171b4ac886b1d8560853c210e06745963 (patch) | |
| tree | 7ac550b7d9aa897afd6443fe343c7e5eb15f37f8 /dev | |
| parent | 6dfd055de47c2d5a6b90389338861036f30cd1d6 (diff) | |
AHCI-DMA.cc: Fix PRD DBA assignement (this is a 64-bit machine target)
Signed-off-by: Amlal EL Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'dev')
| -rw-r--r-- | dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc index e3bf1c12..e201f0fb 100644 --- a/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc +++ b/dev/ZKAKit/HALKit/AMD64/Storage/AHCI-DMA.cc @@ -31,6 +31,8 @@ #define HBA_PxCMD_FR 0x4000 #define HBA_PxCMD_CR 0x8000 +#define AHCI_LBA_MODE (1 << 6) + #define kMaxAhciPoll (100000U) #define kCmdOrCtrlCmd 1 @@ -219,13 +221,13 @@ Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::Char* buffer, Kernel::Size for (int i = 0; i < cmd_hdr->Prdtl - 1; i++) { cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)(Kernel::UInt64)buffer; - cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32); + cmd_tbl->PrdtEntries[i].Dbau = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32); cmd_tbl->PrdtEntries[i].Dbc = size_buffer - 1; // 8K bytes (this value should always be set to 1 less than the actual value) cmd_tbl->PrdtEntries[i].InterruptBit = 1; } cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)(Kernel::UInt64)buffer; - cmd_tbl->PrdtEntries[i].Dba = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32); + cmd_tbl->PrdtEntries[i].Dbau = (Kernel::UInt32)((Kernel::UInt64)(buffer) >> 32); cmd_tbl->PrdtEntries[i].Dbc = size_buffer - 1; // 8K bytes (this value should always be set to 1 less than the actual value) cmd_tbl->PrdtEntries[i].InterruptBit = 1; @@ -238,7 +240,7 @@ Kernel::Void drv_std_read(Kernel::UInt64 lba, Kernel::Char* buffer, Kernel::Size cmd_fis->Lba0 = (Kernel::UInt8)(Kernel::UInt32)lba & 0xFF; cmd_fis->Lba1 = (Kernel::UInt8)((Kernel::UInt32)lba >> 8); cmd_fis->Lba2 = (Kernel::UInt8)((Kernel::UInt32)lba >> 16); - cmd_fis->Device = (1 << 6); // LBA mode + cmd_fis->Device = AHCI_LBA_MODE; // LBA mode cmd_fis->Lba3 = (Kernel::UInt8)((Kernel::UInt32)lba >> 24); cmd_fis->Lba4 = (Kernel::UInt8)(lba >> 32); @@ -300,4 +302,4 @@ Kernel::SizeT drv_get_size() return drv_get_sector_count() * kAHCISectorSize; } -#endif // ifdef __AHCI__
\ No newline at end of file +#endif // ifdef __AHCI__ |
