Index: uspace/drv/bus/isa/i8237.c
===================================================================
--- uspace/drv/bus/isa/i8237.c	(revision c762ad5ddae5ea40a56aa04d066fc4ac1787344c)
+++ uspace/drv/bus/isa/i8237.c	(revision 301032a87023b80a020de82584ef102eae4ad415)
@@ -340,5 +340,5 @@
  * @return Error code.
  */
-int dma_channel_setup(unsigned int channel, uint32_t pa, uint16_t size,
+int dma_channel_setup(unsigned int channel, uint32_t pa, uint32_t size,
     uint8_t mode)
 {
Index: uspace/drv/bus/isa/i8237.h
===================================================================
--- uspace/drv/bus/isa/i8237.h	(revision c762ad5ddae5ea40a56aa04d066fc4ac1787344c)
+++ uspace/drv/bus/isa/i8237.h	(revision 301032a87023b80a020de82584ef102eae4ad415)
@@ -38,5 +38,5 @@
 #define DRV_BUS_ISA_I8237_H
 
-extern int dma_channel_setup(unsigned, uint32_t, uint16_t, uint8_t);
+extern int dma_channel_setup(unsigned, uint32_t, uint32_t, uint8_t);
 extern int dma_channel_remain(unsigned, size_t *);
 
Index: uspace/drv/bus/isa/isa.c
===================================================================
--- uspace/drv/bus/isa/isa.c	(revision c762ad5ddae5ea40a56aa04d066fc4ac1787344c)
+++ uspace/drv/bus/isa/isa.c	(revision 301032a87023b80a020de82584ef102eae4ad415)
@@ -154,5 +154,5 @@
 
 static int isa_fun_setup_dma(ddf_fun_t *fnode,
-    unsigned int channel, uint32_t pa, uint16_t size, uint8_t mode)
+    unsigned int channel, uint32_t pa, uint32_t size, uint8_t mode)
 {
 	assert(fnode);
Index: uspace/lib/c/generic/device/hw_res.c
===================================================================
--- uspace/lib/c/generic/device/hw_res.c	(revision c762ad5ddae5ea40a56aa04d066fc4ac1787344c)
+++ uspace/lib/c/generic/device/hw_res.c	(revision 301032a87023b80a020de82584ef102eae4ad415)
@@ -102,12 +102,12 @@
  */
 int hw_res_dma_channel_setup(async_sess_t *sess,
-    unsigned channel, uint32_t pa, uint16_t size, uint8_t mode)
+    unsigned channel, uint32_t pa, uint32_t size, uint8_t mode)
 {
 	async_exch_t *exch = async_exchange_begin(sess);
 	if (exch == NULL)
 		return ENOMEM;
-	const uint32_t packed = size | (mode << 16);
+	const uint32_t packed = (channel & 0xffff) | (mode << 16);
 	const int ret = async_req_4_0(exch, DEV_IFACE_ID(HW_RES_DEV_IFACE),
-	    HW_RES_DMA_CHANNEL_SETUP, channel, pa, packed);
+	    HW_RES_DMA_CHANNEL_SETUP, packed, pa, size);
 	async_exchange_end(exch);
 
Index: uspace/lib/c/include/device/hw_res.h
===================================================================
--- uspace/lib/c/include/device/hw_res.h	(revision c762ad5ddae5ea40a56aa04d066fc4ac1787344c)
+++ uspace/lib/c/include/device/hw_res.h	(revision 301032a87023b80a020de82584ef102eae4ad415)
@@ -116,5 +116,5 @@
 
 extern int hw_res_dma_channel_setup(async_sess_t *, unsigned int, uint32_t,
-    uint16_t, uint8_t);
+    uint32_t, uint8_t);
 extern int hw_res_dma_channel_remain(async_sess_t *, unsigned);
 
Index: uspace/lib/drv/generic/remote_hw_res.c
===================================================================
--- uspace/lib/drv/generic/remote_hw_res.c	(revision c762ad5ddae5ea40a56aa04d066fc4ac1787344c)
+++ uspace/lib/drv/generic/remote_hw_res.c	(revision 301032a87023b80a020de82584ef102eae4ad415)
@@ -110,8 +110,8 @@
 		return;
 	}
-	const unsigned channel = DEV_IPC_GET_ARG1(*call);
+	const unsigned channel = DEV_IPC_GET_ARG1(*call) & 0xffff;
+	const uint8_t  mode = DEV_IPC_GET_ARG1(*call) >> 16;
 	const uint32_t address = DEV_IPC_GET_ARG2(*call);
-	const uint16_t size = DEV_IPC_GET_ARG3(*call) & 0xffff;
-	const uint8_t mode = DEV_IPC_GET_ARG3(*call) >> 16;
+	const uint32_t size = DEV_IPC_GET_ARG3(*call);
 
 	const int ret = hw_res_ops->dma_channel_setup(
Index: uspace/lib/drv/include/ops/hw_res.h
===================================================================
--- uspace/lib/drv/include/ops/hw_res.h	(revision c762ad5ddae5ea40a56aa04d066fc4ac1787344c)
+++ uspace/lib/drv/include/ops/hw_res.h	(revision 301032a87023b80a020de82584ef102eae4ad415)
@@ -44,5 +44,5 @@
 	hw_resource_list_t *(*get_resource_list)(ddf_fun_t *);
 	bool (*enable_interrupt)(ddf_fun_t *);
-	int (*dma_channel_setup)(ddf_fun_t *, unsigned, uint32_t, uint16_t, uint8_t);
+	int (*dma_channel_setup)(ddf_fun_t *, unsigned, uint32_t, uint32_t, uint8_t);
 	int (*dma_channel_remain)(ddf_fun_t *, unsigned, size_t *);
 } hw_res_ops_t;
