Index: kernel/generic/src/mm/page.c
===================================================================
--- kernel/generic/src/mm/page.c	(revision ad12b5ea675f6fa2b88cd868c39d5005c6cd86da)
+++ kernel/generic/src/mm/page.c	(revision 1c01e6cdfeee9466652e3b2b78ee532b3b041b26)
@@ -74,4 +74,5 @@
 #include <syscall/copy.h>
 #include <errno.h>
+#include <align.h>
 
 /** Virtual operations for page subsystem. */
@@ -175,4 +176,21 @@
 	return page_mapping_operations->mapping_find(as, page, nolock);
 }
+
+uintptr_t hw_map(uintptr_t physaddr, size_t size)
+{
+	uintptr_t virtaddr = (uintptr_t) NULL;	// FIXME
+	pfn_t i;
+
+	page_table_lock(AS_KERNEL, true);
+	for (i = 0; i < ADDR2PFN(ALIGN_UP(size, PAGE_SIZE)); i++) {
+		uintptr_t addr = PFN2ADDR(i);
+		page_mapping_insert(AS_KERNEL, virtaddr + addr, physaddr + addr,
+		    PAGE_NOT_CACHEABLE | PAGE_WRITE);
+	}
+	page_table_unlock(AS_KERNEL, true);
+	
+	return virtaddr;
+}
+
 
 /** Syscall wrapper for getting mapping of a virtual page.
