From 4e3831e380eb5b5b98f04fa6ce8b194bf01798d3 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Sun, 11 Jan 2026 15:15:58 +0200 Subject: [PATCH] Kernel: ACHI use ext commands for LBAs >=24 bits AFAICS non extended commands are supposed to support 27 bit LBAs but qemu seems to ignore bits 27:24. Maybe I'm just doing something wrong but this seems to fix this. This fixes using big disks :D ATM using using disks >= 8 GiB (with 512 byte LBAs) returned wrong data on reads, failing the boot :D --- kernel/kernel/Storage/ATA/AHCI/Device.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/kernel/Storage/ATA/AHCI/Device.cpp b/kernel/kernel/Storage/ATA/AHCI/Device.cpp index 41b44183..797d4732 100644 --- a/kernel/kernel/Storage/ATA/AHCI/Device.cpp +++ b/kernel/kernel/Storage/ATA/AHCI/Device.cpp @@ -256,16 +256,16 @@ namespace Kernel fis_command.fis_type = FIS_TYPE_REGISTER_H2D; fis_command.c = 1; - bool need_extended = lba >= (1 << 28) || sector_count > 0xFF; - ASSERT (!need_extended || (m_command_set & ATA_COMMANDSET_LBA48_SUPPORTED)); + const bool needs_extended = lba >= (1 << 24) || sector_count > 0xFF; + ASSERT (!needs_extended || (m_command_set & ATA_COMMANDSET_LBA48_SUPPORTED)); switch (command) { case Command::Read: - fis_command.command = need_extended ? ATA_COMMAND_READ_DMA_EXT : ATA_COMMAND_READ_DMA; + fis_command.command = needs_extended ? ATA_COMMAND_READ_DMA_EXT : ATA_COMMAND_READ_DMA; break; case Command::Write: - fis_command.command = need_extended ? ATA_COMMAND_WRITE_DMA_EXT : ATA_COMMAND_WRITE_DMA; + fis_command.command = needs_extended ? ATA_COMMAND_WRITE_DMA_EXT : ATA_COMMAND_WRITE_DMA; break; default: ASSERT_NOT_REACHED();