Index: uspace/lib/ata/include/ata/ata.h
===================================================================
--- uspace/lib/ata/include/ata/ata.h	(revision 59c0f478c5ca79154f904083a83642e63b93af6e)
+++ uspace/lib/ata/include/ata/ata.h	(revision 645d38325f770af3d73b15f6b1c95d0c2f9de91b)
@@ -47,4 +47,12 @@
 struct ata_device;
 
+/** ATA DMA direction */
+typedef enum {
+	/** DMA read */
+	ata_dma_read,
+	/** DMA write */
+	ata_dma_write
+} ata_dma_dir_t;
+
 /** ATA channel creation parameters */
 typedef struct {
@@ -53,4 +61,6 @@
 	/** IRQ is available */
 	bool have_irq;
+	/** Use DMA transfers */
+	bool use_dma;
 	/** Read 16 bits from the data port */
 	void (*write_data_16)(void *, uint16_t *, size_t);
@@ -69,4 +79,8 @@
 	/** Disable interrupts */
 	errno_t (*irq_disable)(void *);
+	/** Set up DMA channel */
+	void (*dma_chan_setup)(void *, void *, size_t, ata_dma_dir_t);
+	/** Set up DMA channel */
+	void (*dma_chan_teardown)(void *);
 	/** Add new device */
 	errno_t (*add_device)(void *, unsigned, void *);
Index: uspace/lib/ata/include/ata/ata_hw.h
===================================================================
--- uspace/lib/ata/include/ata/ata_hw.h	(revision 59c0f478c5ca79154f904083a83642e63b93af6e)
+++ uspace/lib/ata/include/ata/ata_hw.h	(revision 645d38325f770af3d73b15f6b1c95d0c2f9de91b)
@@ -141,8 +141,12 @@
 	CMD_READ_SECTORS	= 0x20,
 	CMD_READ_SECTORS_EXT	= 0x24,
+	CMD_READ_DMA_EXT	= 0x25,
 	CMD_WRITE_SECTORS	= 0x30,
 	CMD_WRITE_SECTORS_EXT	= 0x34,
+	CMD_WRITE_DMA_EXT	= 0x35,
 	CMD_PACKET		= 0xA0,
 	CMD_IDENTIFY_PKT_DEV	= 0xA1,
+	CMD_READ_DMA		= 0xC8,
+	CMD_WRITE_DMA		= 0xCA,
 	CMD_IDENTIFY_DRIVE	= 0xEC,
 	CMD_FLUSH_CACHE		= 0xE7
