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
This commit is contained in:
parent
cae2b3bd14
commit
4e3831e380
|
|
@ -256,16 +256,16 @@ namespace Kernel
|
||||||
fis_command.fis_type = FIS_TYPE_REGISTER_H2D;
|
fis_command.fis_type = FIS_TYPE_REGISTER_H2D;
|
||||||
fis_command.c = 1;
|
fis_command.c = 1;
|
||||||
|
|
||||||
bool need_extended = lba >= (1 << 28) || sector_count > 0xFF;
|
const bool needs_extended = lba >= (1 << 24) || sector_count > 0xFF;
|
||||||
ASSERT (!need_extended || (m_command_set & ATA_COMMANDSET_LBA48_SUPPORTED));
|
ASSERT (!needs_extended || (m_command_set & ATA_COMMANDSET_LBA48_SUPPORTED));
|
||||||
|
|
||||||
switch (command)
|
switch (command)
|
||||||
{
|
{
|
||||||
case Command::Read:
|
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;
|
break;
|
||||||
case Command::Write:
|
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;
|
break;
|
||||||
default:
|
default:
|
||||||
ASSERT_NOT_REACHED();
|
ASSERT_NOT_REACHED();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue