Skip to content

[WIP] Some fixes to ATA DMA driver

Jeremy Soller requested to merge sarahhodne:hh-fixup-ata-dma into master

Created by: sarahhodne

NOTE: This implementation is broken. I'm mainly opening this to get some feedback if this is worth fixing (I know AHCI things are happening, so not sure if the DMA stuff will continue to live?) and also if anyone can see what bugs there are here. The issue I'm seeing is that the first DMA read request seems to work (the ELF header of the first binary looks correct, but then after that the reads look wrong, although I haven't looked too closely at the exact data read).

This is an attempt to get Redox to boot in VirtualBox using the ATA driver in DMA mode. Some reads that were previously failing are now working, but other ones that previously worked are now failing.

The main change here is that we send an ATA command for each PRD in the PRDT, instead of a single command for the entire section to be read.

There is also a change to separate out the EOT u16 part in the Prd from the size (the size can only be u16 anyways), and using the right bytes for HDDEVSEL (the old bytes were for the 28-bit LBAs instead of the 48-bit LBAs that we use.

Merge request reports