Index: uspace/lib/c/generic/as.c
===================================================================
--- uspace/lib/c/generic/as.c	(revision fd6bd6d12960c6582429396112e1f7ba96fd148c)
+++ uspace/lib/c/generic/as.c	(revision 792807f9edc6d96f0d0f3eb079d9d8b6ea0d2898)
@@ -117,26 +117,15 @@
 /** Find mapping to physical address.
  *
- * @param address Virtual address in question (virtual).
- * @param[out] frame Frame address (physical).
- * @return Error code.
- * @retval EOK No error, @p frame holds the translation.
- * @retval ENOENT Mapping not found.
+ * @param      virt Virtual address to find mapping for.
+ * @param[out] phys Physical adress.
+ *
+ * @return EOK on no error.
+ * @retval ENOENT if no mapping was found.
+ *
  */
-int as_get_physical_mapping(const void *address, uintptr_t *frame)
+int as_get_physical_mapping(const void *virt, uintptr_t *phys)
 {
-	uintptr_t tmp_frame;
-	uintptr_t virt = (uintptr_t) address;
-	
-	int rc = (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING,
-	    (sysarg_t) virt, (sysarg_t) &tmp_frame);
-	if (rc != EOK) {
-		return rc;
-	}
-	
-	if (frame != NULL) {
-		*frame = tmp_frame;
-	}
-	
-	return EOK;
+	return (int) __SYSCALL2(SYS_PAGE_FIND_MAPPING, (sysarg_t) virt,
+	    (sysarg_t) phys);
 }
 
Index: uspace/lib/c/generic/ddi.c
===================================================================
--- uspace/lib/c/generic/ddi.c	(revision fd6bd6d12960c6582429396112e1f7ba96fd148c)
+++ uspace/lib/c/generic/ddi.c	(revision 792807f9edc6d96f0d0f3eb079d9d8b6ea0d2898)
@@ -33,4 +33,7 @@
  */
 
+#include <assert.h>
+#include <unistd.h>
+#include <errno.h>
 #include <sys/types.h>
 #include <abi/ddi/arg.h>
@@ -57,6 +60,6 @@
  * Caller of this function must have the CAP_MEM_MANAGER capability.
  *
- * @param pf    Physical address of the starting frame.
- * @param vp    Virtual address of the starting page.
+ * @param phys  Physical address of the starting frame.
+ * @param virt  Virtual address of the starting page.
  * @param pages Number of pages to map.
  * @param flags Flags for the new address space area.
@@ -69,33 +72,39 @@
  *
  */
-int physmem_map(void *pf, void *vp, size_t pages, unsigned int flags)
+int physmem_map(void *phys, void *virt, size_t pages, unsigned int flags)
 {
-	return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) pf, (sysarg_t) vp,
-	    pages, flags);
+	return __SYSCALL4(SYS_PHYSMEM_MAP, (sysarg_t) phys,
+	    (sysarg_t) virt, pages, flags);
 }
 
-int dmamem_map(dmamem_t *dmamem, size_t pages, unsigned int map_flags,
-    unsigned int dma_flags)
+int dmamem_map(void *virt, size_t size, unsigned int map_flags,
+    unsigned int flags, void **phys)
 {
-	// FIXME TODO
-	return -1;
+	return (int) __SYSCALL5(SYS_DMAMEM_MAP, (sysarg_t) virt,
+	    (sysarg_t) size, (sysarg_t) map_flags, (sysarg_t) flags,
+	    (sysarg_t) phys);
 }
 
-int dmamem_unmap(dmamem_t *dmamem)
+int dmamem_map_anonymous(size_t size, unsigned int map_flags,
+    unsigned int flags, void **phys, void **virt)
 {
-	// FIXME TODO
-	return -1;
+	*virt = as_get_mappable_page(size);
+	if (*virt == NULL)
+		return ENOMEM;
+	
+	return dmamem_map(*virt, size, map_flags,
+	    flags | DMAMEM_FLAGS_ANONYMOUS, phys);
 }
 
-int dmamem_lock(void *virt, void **phys, size_t pages)
+int dmamem_unmap(void *virt, size_t size, unsigned int flags)
 {
-	// FIXME TODO
-	return -1;
+	return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, (sysarg_t) size,
+	    (sysarg_t) flags);
 }
 
-int dmamem_unlock(void *virt, size_t pages)
+int dmamem_unmap_anonymous(void *virt)
 {
-	// FIXME TODO
-	return -1;
+	return __SYSCALL3(SYS_DMAMEM_UNMAP, (sysarg_t) virt, 0,
+	    DMAMEM_FLAGS_ANONYMOUS);
 }
 
Index: uspace/lib/c/include/ddi.h
===================================================================
--- uspace/lib/c/include/ddi.h	(revision fd6bd6d12960c6582429396112e1f7ba96fd148c)
+++ uspace/lib/c/include/ddi.h	(revision 792807f9edc6d96f0d0f3eb079d9d8b6ea0d2898)
@@ -40,26 +40,17 @@
 #include <task.h>
 
-typedef struct {
-	/** Physical memory */
-	void *phys;
-	
-	/** Virtual memory */
-	void *virt;
-	
-	/** Size in pages */
-	size_t size;
-	
-	/** Mapping flags */
-	unsigned int flags;
-} dmamem_t;
+extern int device_assign_devno(void);
 
-extern int device_assign_devno(void);
 extern int physmem_map(void *, void *, size_t, unsigned int);
-extern int dmamem_map(dmamem_t *, size_t, unsigned int, unsigned int);
-extern int dmamem_unmap(dmamem_t *);
-extern int dmamem_lock(void *, void **, size_t);
-extern int dmamem_unlock(void *, size_t);
+
+extern int dmamem_map(void *, size_t, unsigned int, unsigned int, void **);
+extern int dmamem_map_anonymous(size_t, unsigned int, unsigned int, void **,
+    void **);
+extern int dmamem_unmap(void *, size_t, unsigned int);
+extern int dmamem_unmap_anonymous(void *);
+
 extern int iospace_enable(task_id_t, void *, unsigned long);
 extern int pio_enable(void *, size_t, void **);
+
 extern int register_irq(int, int, int, irq_code_t *);
 extern int unregister_irq(int, int);
