Index: kernel/arch/arm32/src/mach/gta02/gta02.c
===================================================================
--- kernel/arch/arm32/src/mach/gta02/gta02.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/arch/arm32/src/mach/gta02/gta02.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -38,4 +38,5 @@
 #include <arch/mm/page.h>
 #include <mm/page.h>
+#include <mm/km.h>
 #include <genarch/fb/fb.h>
 #include <abi/fb/visuals.h>
Index: kernel/arch/arm32/src/mach/integratorcp/integratorcp.c
===================================================================
--- kernel/arch/arm32/src/mach/integratorcp/integratorcp.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/arch/arm32/src/mach/integratorcp/integratorcp.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -45,4 +45,5 @@
 #include <mm/page.h>
 #include <mm/frame.h>
+#include <mm/km.h>
 #include <arch/mm/frame.h>
 #include <arch/mach/integratorcp/integratorcp.h>
Index: kernel/arch/arm32/src/mach/testarm/testarm.c
===================================================================
--- kernel/arch/arm32/src/mach/testarm/testarm.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/arch/arm32/src/mach/testarm/testarm.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -37,4 +37,5 @@
 #include <arch/mach/testarm/testarm.h>
 #include <mm/page.h>
+#include <mm/km.h>
 #include <genarch/fb/fb.h>
 #include <abi/fb/visuals.h>
Index: kernel/arch/ia32/src/smp/smp.c
===================================================================
--- kernel/arch/ia32/src/smp/smp.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/arch/ia32/src/smp/smp.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -47,6 +47,7 @@
 #include <debug.h>
 #include <arch/asm.h>
+#include <mm/page.h>
 #include <mm/frame.h>
-#include <mm/page.h>
+#include <mm/km.h>
 #include <mm/slab.h>
 #include <mm/as.h>
Index: kernel/arch/ia64/src/ia64.c
===================================================================
--- kernel/arch/ia64/src/ia64.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/arch/ia64/src/ia64.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -53,4 +53,5 @@
 #include <genarch/srln/srln.h>
 #include <mm/page.h>
+#include <mm/km.h>
 
 #ifdef MACHINE_ski
Index: kernel/arch/ppc32/src/drivers/pic.c
===================================================================
--- kernel/arch/ppc32/src/drivers/pic.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/arch/ppc32/src/drivers/pic.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -34,5 +34,5 @@
 
 #include <arch/drivers/pic.h>
-#include <mm/page.h>
+#include <mm/km.h>
 #include <byteorder.h>
 #include <bitops.h>
Index: kernel/arch/ppc32/src/ppc32.c
===================================================================
--- kernel/arch/ppc32/src/ppc32.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/arch/ppc32/src/ppc32.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -46,4 +46,5 @@
 #include <userspace.h>
 #include <mm/page.h>
+#include <mm/km.h>
 #include <abi/proc/uarg.h>
 #include <console/console.h>
Index: kernel/arch/sparc64/src/drivers/kbd.c
===================================================================
--- kernel/arch/sparc64/src/drivers/kbd.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/arch/sparc64/src/drivers/kbd.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -40,4 +40,5 @@
 #include <mm/page.h>
 #include <arch/mm/page.h>
+#include <mm/km.h>
 #include <typedefs.h>
 #include <align.h>
Index: kernel/arch/sparc64/src/drivers/pci.c
===================================================================
--- kernel/arch/sparc64/src/drivers/pci.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/arch/sparc64/src/drivers/pci.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -39,5 +39,5 @@
 #include <genarch/ofw/upa.h>
 #include <arch/trap/interrupt.h>
-#include <mm/page.h>
+#include <mm/km.h>
 #include <mm/slab.h>
 #include <typedefs.h>
Index: kernel/genarch/src/drivers/ega/ega.c
===================================================================
--- kernel/genarch/src/drivers/ega/ega.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/genarch/src/drivers/ega/ega.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -37,8 +37,7 @@
 #include <genarch/drivers/ega/ega.h>
 #include <putchar.h>
-#include <mm/page.h>
+#include <mm/km.h>
 #include <mm/as.h>
 #include <mm/slab.h>
-#include <arch/mm/page.h>
 #include <typedefs.h>
 #include <arch/asm.h>
Index: kernel/genarch/src/drivers/s3c24xx_uart/s3c24xx_uart.c
===================================================================
--- kernel/genarch/src/drivers/s3c24xx_uart/s3c24xx_uart.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/genarch/src/drivers/s3c24xx_uart/s3c24xx_uart.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -45,4 +45,5 @@
 #include <mm/slab.h>
 #include <mm/page.h>
+#include <mm/km.h>
 #include <sysinfo/sysinfo.h>
 #include <str.h>
Index: kernel/genarch/src/fb/fb.c
===================================================================
--- kernel/genarch/src/fb/fb.c	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ kernel/genarch/src/fb/fb.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
@@ -40,5 +40,5 @@
 #include <console/console.h>
 #include <sysinfo/sysinfo.h>
-#include <mm/page.h>
+#include <mm/km.h>
 #include <mm/slab.h>
 #include <align.h>
Index: kernel/generic/include/mm/km.h
===================================================================
--- kernel/generic/include/mm/km.h	(revision 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ 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 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ 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 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ 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 4dee0cb265758a5ee4132e646c801b976b22f908)
+++ 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)
 {
