Index: kernel/arch/arm32/src/mach/gta02/gta02.c
===================================================================
--- kernel/arch/arm32/src/mach/gta02/gta02.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
+++ kernel/arch/arm32/src/mach/gta02/gta02.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
@@ -102,6 +102,8 @@
 	s3c24xx_irqc_regs_t *irqc_regs;
 
-	gta02_timer = (void *) hw_map(S3C24XX_TIMER_ADDRESS, PAGE_SIZE);
-	irqc_regs = (void *) hw_map(S3C24XX_IRQC_ADDRESS, PAGE_SIZE);
+	gta02_timer = (void *) km_map(S3C24XX_TIMER_ADDRESS, PAGE_SIZE,
+	    PAGE_NOT_CACHEABLE);
+	irqc_regs = (void *) km_map(S3C24XX_IRQC_ADDRESS, PAGE_SIZE,
+	    PAGE_NOT_CACHEABLE);
 
 	/* Initialize interrupt controller. */
Index: kernel/arch/arm32/src/mach/integratorcp/integratorcp.c
===================================================================
--- kernel/arch/arm32/src/mach/integratorcp/integratorcp.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
+++ kernel/arch/arm32/src/mach/integratorcp/integratorcp.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
@@ -129,10 +129,12 @@
 void icp_init(void)
 {
-	icp_hw_map.uart = hw_map(ICP_UART, PAGE_SIZE);
-	icp_hw_map.kbd_ctrl = hw_map(ICP_KBD, PAGE_SIZE);
+	icp_hw_map.uart = km_map(ICP_UART, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+	icp_hw_map.kbd_ctrl = km_map(ICP_KBD, PAGE_SIZE, PAGE_NOT_CACHEABLE);
 	icp_hw_map.kbd_stat = icp_hw_map.kbd_ctrl + ICP_KBD_STAT;
 	icp_hw_map.kbd_data = icp_hw_map.kbd_ctrl + ICP_KBD_DATA;
 	icp_hw_map.kbd_intstat = icp_hw_map.kbd_ctrl + ICP_KBD_INTR_STAT;
-	icp_hw_map.rtc = hw_map(ICP_RTC, PAGE_SIZE);
+	icp_hw_map.rtc = km_map(ICP_RTC, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	icp_hw_map.rtc1_load = icp_hw_map.rtc + ICP_RTC1_LOAD_OFFSET;
 	icp_hw_map.rtc1_read = icp_hw_map.rtc + ICP_RTC1_READ_OFFSET;
@@ -142,10 +144,13 @@
 	icp_hw_map.rtc1_intrstat = icp_hw_map.rtc + ICP_RTC1_INTRSTAT_OFFSET;
 
-	icp_hw_map.irqc = hw_map(ICP_IRQC, PAGE_SIZE);
+	icp_hw_map.irqc = km_map(ICP_IRQC, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	icp_hw_map.irqc_mask = icp_hw_map.irqc + ICP_IRQC_MASK_OFFSET;
 	icp_hw_map.irqc_unmask = icp_hw_map.irqc + ICP_IRQC_UNMASK_OFFSET;
-	icp_hw_map.cmcr = hw_map(ICP_CMCR, PAGE_SIZE);
+	icp_hw_map.cmcr = km_map(ICP_CMCR, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	icp_hw_map.sdramcr = icp_hw_map.cmcr + ICP_SDRAMCR_OFFSET;
-	icp_hw_map.vga = hw_map(ICP_VGA, PAGE_SIZE);
+	icp_hw_map.vga = km_map(ICP_VGA, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
 	hw_map_init_called = true;
Index: kernel/arch/arm32/src/mach/testarm/testarm.c
===================================================================
--- kernel/arch/arm32/src/mach/testarm/testarm.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
+++ kernel/arch/arm32/src/mach/testarm/testarm.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
@@ -72,7 +72,10 @@
 void gxemul_init(void)
 {
-	gxemul_kbd = (void *) hw_map(GXEMUL_KBD_ADDRESS, PAGE_SIZE);
-	gxemul_rtc = (void *) hw_map(GXEMUL_RTC_ADDRESS, PAGE_SIZE);
-	gxemul_irqc = (void *) hw_map(GXEMUL_IRQC_ADDRESS, PAGE_SIZE);
+	gxemul_kbd = (void *) km_map(GXEMUL_KBD_ADDRESS, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+	gxemul_rtc = (void *) km_map(GXEMUL_RTC_ADDRESS, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+	gxemul_irqc = (void *) km_map(GXEMUL_IRQC_ADDRESS, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 }
 
Index: kernel/arch/ia32/src/smp/smp.c
===================================================================
--- kernel/arch/ia32/src/smp/smp.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
+++ kernel/arch/ia32/src/smp/smp.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
@@ -73,6 +73,8 @@
 	
 	if (config.cpu_count > 1) {
-		l_apic = (uint32_t *) hw_map((uintptr_t) l_apic, PAGE_SIZE);
-		io_apic = (uint32_t *) hw_map((uintptr_t) io_apic, PAGE_SIZE);
+		l_apic = (uint32_t *) km_map((uintptr_t) l_apic, PAGE_SIZE,
+		    PAGE_WRITE | PAGE_NOT_CACHEABLE);
+		io_apic = (uint32_t *) km_map((uintptr_t) io_apic, PAGE_SIZE,
+		    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	}
 }
Index: kernel/arch/ia64/src/ia64.c
===================================================================
--- kernel/arch/ia64/src/ia64.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
+++ kernel/arch/ia64/src/ia64.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
@@ -89,5 +89,6 @@
 static void iosapic_init(void)
 {
-	uintptr_t IOSAPIC = hw_map(iosapic_base, PAGE_SIZE);
+	uintptr_t IOSAPIC = km_map(iosapic_base, PAGE_SIZE,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	int i;
 	
@@ -117,5 +118,6 @@
 	if (config.cpu_active == 1) {
 		/* Map the page with legacy I/O. */
-		legacyio_virt_base = hw_map(LEGACYIO_PHYS_BASE, LEGACYIO_SIZE);
+		legacyio_virt_base = km_map(LEGACYIO_PHYS_BASE, LEGACYIO_SIZE,
+		    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
 		iosapic_init();
Index: kernel/arch/ppc32/src/drivers/pic.c
===================================================================
--- kernel/arch/ppc32/src/drivers/pic.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
+++ kernel/arch/ppc32/src/drivers/pic.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
@@ -42,5 +42,5 @@
 void pic_init(uintptr_t base, size_t size, cir_t *cir, void **cir_arg)
 {
-	pic = (uint32_t *) hw_map(base, size);
+	pic = (uint32_t *) km_map(base, size, PAGE_WRITE | PAGE_NOT_CACHEABLE);
 	*cir = pic_ack_interrupt;
 	*cir_arg = NULL;
Index: kernel/arch/ppc32/src/ppc32.c
===================================================================
--- kernel/arch/ppc32/src/ppc32.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
+++ kernel/arch/ppc32/src/ppc32.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
@@ -209,6 +209,6 @@
 		size_t size = 2 * PAGE_SIZE;
 		
-		cuda_t *cuda = (cuda_t *)
-		    (hw_map(aligned_addr, offset + size) + offset);
+		cuda_t *cuda = (cuda_t *) (km_map(aligned_addr, offset + size,
+		    PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset);
 		
 		/* Initialize I/O controller */
Index: kernel/arch/sparc64/src/drivers/kbd.c
===================================================================
--- kernel/arch/sparc64/src/drivers/kbd.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
+++ kernel/arch/sparc64/src/drivers/kbd.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
@@ -114,6 +114,6 @@
 	size_t offset = pa - aligned_addr;
 	
-	ns16550_t *ns16550 = (ns16550_t *)
-	   (hw_map(aligned_addr, offset + size) + offset);
+	ns16550_t *ns16550 = (ns16550_t *) (km_map(aligned_addr, offset + size,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE) + offset);
 	
 	ns16550_instance_t *ns16550_instance = ns16550_init(ns16550, inr, cir, cir_arg);
Index: kernel/arch/sparc64/src/drivers/pci.c
===================================================================
--- kernel/arch/sparc64/src/drivers/pci.c	(revision d46732962adcfcbf946c2c3f032af0f7fadb285c)
+++ kernel/arch/sparc64/src/drivers/pci.c	(revision adec5b450420e754be2635ab4e7587f68c0a3287)
@@ -109,5 +109,6 @@
 	pci->model = PCI_SABRE;
 	pci->op = &pci_sabre_ops;
-	pci->reg = (uint64_t *) hw_map(paddr, reg[SABRE_INTERNAL_REG].size);
+	pci->reg = (uint64_t *) km_map(paddr, reg[SABRE_INTERNAL_REG].size,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
 	/*
@@ -156,5 +157,6 @@
 	pci->model = PCI_PSYCHO;
 	pci->op = &pci_psycho_ops;
-	pci->reg = (uint64_t *) hw_map(paddr, reg[PSYCHO_INTERNAL_REG].size);
+	pci->reg = (uint64_t *) km_map(paddr, reg[PSYCHO_INTERNAL_REG].size,
+	    PAGE_WRITE | PAGE_NOT_CACHEABLE);
 
 	/*
