Index: kernel/generic/include/mm/km.h
===================================================================
--- kernel/generic/include/mm/km.h	(revision 32817cc7228ed0a4db98be9cb5f00757af3d7e2c)
+++ kernel/generic/include/mm/km.h	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -49,4 +49,6 @@
 extern bool km_is_non_identity(uintptr_t);
 
+extern uintptr_t hw_map(uintptr_t, size_t);
+
 extern uintptr_t km_temporary_page_get(uintptr_t *, frame_flags_t);
 extern void km_temporary_page_put(uintptr_t);
Index: kernel/generic/include/mm/page.h
===================================================================
--- kernel/generic/include/mm/page.h	(revision 32817cc7228ed0a4db98be9cb5f00757af3d7e2c)
+++ kernel/generic/include/mm/page.h	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -66,6 +66,4 @@
 extern void map_structure(uintptr_t, size_t);
 
-extern uintptr_t hw_map(uintptr_t, size_t);
-
 extern int page_find_mapping(uintptr_t, void **);
 extern sysarg_t sys_page_find_mapping(uintptr_t, void *);
Index: kernel/generic/src/mm/km.c
===================================================================
--- kernel/generic/src/mm/km.c	(revision 32817cc7228ed0a4db98be9cb5f00757af3d7e2c)
+++ kernel/generic/src/mm/km.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -46,4 +46,7 @@
 #include <debug.h>
 #include <arch.h>
+#include <align.h>
+#include <macros.h>
+#include <bitops.h>
 
 static ra_arena_t *km_ni_arena;
@@ -120,4 +123,27 @@
 	ra_free(km_ni_arena, page, size);
 }
+
+uintptr_t hw_map(uintptr_t physaddr, size_t size)
+{
+	uintptr_t virtaddr;
+	size_t asize;
+	size_t align;
+	pfn_t i;
+
+	asize = ALIGN_UP(size, PAGE_SIZE);
+	align = ispwr2(size) ? size : (1U << (fnzb(size) + 1));
+	virtaddr = km_page_alloc(asize, max(PAGE_SIZE, align));
+
+	page_table_lock(AS_KERNEL, true);
+	for (i = 0; i < ADDR2PFN(asize); 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;
+}
+
 
 /** Unmap kernen non-identity page.
Index: kernel/generic/src/mm/page.c
===================================================================
--- kernel/generic/src/mm/page.c	(revision 32817cc7228ed0a4db98be9cb5f00757af3d7e2c)
+++ kernel/generic/src/mm/page.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -65,5 +65,4 @@
 #include <arch/mm/asid.h>
 #include <mm/as.h>
-#include <mm/km.h>
 #include <mm/frame.h>
 #include <arch/barrier.h>
@@ -76,6 +75,4 @@
 #include <errno.h>
 #include <align.h>
-#include <macros.h>
-#include <bitops.h>
 
 /** Virtual operations for page subsystem. */
@@ -193,26 +190,4 @@
 }
 
-uintptr_t hw_map(uintptr_t physaddr, size_t size)
-{
-	uintptr_t virtaddr;
-	size_t asize;
-	size_t align;
-	pfn_t i;
-
-	asize = ALIGN_UP(size, PAGE_SIZE);
-	align = ispwr2(size) ? size : (1U << (fnzb(size) + 1));
-	virtaddr = km_page_alloc(asize, max(PAGE_SIZE, align));
-
-	page_table_lock(AS_KERNEL, true);
-	for (i = 0; i < ADDR2PFN(asize); 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;
-}
-
 int page_find_mapping(uintptr_t virt, void **phys)
 {
