ReturnInfinity/BareMetal-OS — Issue #7: Implement UDMA or ADMA in the Disk driver
Author: IanSeyler
Created: 2012-02-04 20:01:57+00:00
State: open

Currently all disk calls are done via PIO. For performance this should be replaced with proper DMA calls.

UDMA is supported on all hardware that BareMetal targets. However UDMA transfers are limited to 32-bit memory addresses

ADMA is supported in all SATA chipsets and transfers work with any 64-bit memory address.

UDMA links:
http://wiki.osdev.org/ATA/ATAPI_using_DMA
http://savrus.blogspot.com/2009/10/writing-dma-bootloader.html

ADMA links:
http://wiki.osdev.org/ADMA

ATA links:
http://wiki.osdev.org/Category:ATA

This needs to be completed before the disk block calls. PIO can read/write 128KiB per call and we want something closer to 2MiB.