Index: uspace/lib/c/include/device/hw_res.h
===================================================================
--- uspace/lib/c/include/device/hw_res.h	(revision fd6bd6d12960c6582429396112e1f7ba96fd148c)
+++ uspace/lib/c/include/device/hw_res.h	(revision 153cc76acfecd18d9bb208e102fdfe6aa9926b08)
@@ -40,8 +40,17 @@
 #include <bool.h>
 
+#define DMA_MODE_ON_DEMAND  0
+#define DMA_MODE_WRITE      (1 << 2)
+#define DMA_MODE_READ       (1 << 3)
+#define DMA_MODE_AUTO       (1 << 4)
+#define DMA_MODE_DOWN       (1 << 5)
+#define DMA_MODE_SINGLE     (1 << 6)
+#define DMA_MODE_BLOCK      (1 << 7)
+
 /** HW resource provider interface */
 typedef enum {
 	HW_RES_GET_RESOURCE_LIST = 0,
-	HW_RES_ENABLE_INTERRUPT
+	HW_RES_ENABLE_INTERRUPT,
+	HW_RES_DMA_CHANNEL_SETUP,
 } hw_res_method_t;
 
@@ -50,5 +59,7 @@
 	INTERRUPT,
 	IO_RANGE,
-	MEM_RANGE
+	MEM_RANGE,
+	DMA_CHANNEL_8,
+	DMA_CHANNEL_16,
 } hw_res_type_t;
 
@@ -77,4 +88,9 @@
 			int irq;
 		} interrupt;
+		
+		union {
+			unsigned int dma8;
+			unsigned int dma16;
+		} dma_channel;
 	} res;
 } hw_resource_t;
@@ -98,4 +114,7 @@
 extern bool hw_res_enable_interrupt(async_sess_t *);
 
+extern int hw_res_dma_channel_setup(async_sess_t *, unsigned int, uint32_t,
+    uint16_t, uint8_t);
+
 #endif
 
Index: uspace/lib/c/include/device/hw_res_parsed.h
===================================================================
--- uspace/lib/c/include/device/hw_res_parsed.h	(revision fd6bd6d12960c6582429396112e1f7ba96fd148c)
+++ uspace/lib/c/include/device/hw_res_parsed.h	(revision 153cc76acfecd18d9bb208e102fdfe6aa9926b08)
@@ -72,4 +72,13 @@
 } irq_list_t;
 
+/** List of ISA DMA channels */
+typedef struct dma_list {
+	/** Channel count */
+	size_t count;
+
+	/** Array of channels */
+	unsigned int *channels;
+} dma_list_t;
+
 /** List of memory areas */
 typedef struct addr_range_list {
@@ -91,4 +100,7 @@
 	/** List of IRQs */
 	irq_list_t irqs;
+	
+	/** List of DMA channels */
+	dma_list_t dma_channels;
 	
 	/** List of memory areas */
@@ -113,4 +125,5 @@
 	free(list->io_ranges.ranges);
 	free(list->mem_ranges.ranges);
+	free(list->dma_channels.channels);
 	
 	bzero(list, sizeof(hw_res_list_parsed_t));
