Index: kernel/arch/mips32/include/mm/frame.h
===================================================================
--- kernel/arch/mips32/include/mm/frame.h	(revision 6cd9aa607e6515e17e369c7e888779416251db4d)
+++ kernel/arch/mips32/include/mm/frame.h	(revision 06da55b579d4404672ea2a8664146ec81c2b9df2)
@@ -36,12 +36,16 @@
 #define KERN_mips32_FRAME_H_
 
-#define FRAME_WIDTH		14	/* 16K */
-#define FRAME_SIZE		(1 << FRAME_WIDTH)
+#define FRAME_WIDTH  14  /* 16K */
+#define FRAME_SIZE   (1 << FRAME_WIDTH)
 
 #ifdef KERNEL
 #ifndef __ASM__
 
+#include <typedefs.h>
+
 extern void frame_arch_init(void);
 extern void physmem_print(void);
+
+extern uintptr_t end_frame;
 
 #endif /* __ASM__ */
Index: kernel/arch/mips32/src/drivers/msim.c
===================================================================
--- kernel/arch/mips32/src/drivers/msim.c	(revision 6cd9aa607e6515e17e369c7e888779416251db4d)
+++ kernel/arch/mips32/src/drivers/msim.c	(revision 06da55b579d4404672ea2a8664146ec81c2b9df2)
@@ -42,5 +42,4 @@
 #include <ddi/ddi.h>
 
-static parea_t msim_parea;
 static chardev_t console;
 static irq_t msim_irq;
@@ -157,10 +156,4 @@
 	sysinfo_set_item_val("kbd.address.virtual", NULL, MSIM_KBD_ADDRESS);
 	
-	msim_parea.pbase = KA2PA(MSIM_VIDEORAM);
-	msim_parea.vbase = MSIM_VIDEORAM;
-	msim_parea.frames = 1;
-	msim_parea.cacheable = false;
-	ddi_parea_register(&msim_parea);
-	
 	sysinfo_set_item_val("fb", NULL, true);
 	sysinfo_set_item_val("fb.kind", NULL, 3);
Index: kernel/arch/mips32/src/mm/frame.c
===================================================================
--- kernel/arch/mips32/src/mm/frame.c	(revision 6cd9aa607e6515e17e369c7e888779416251db4d)
+++ kernel/arch/mips32/src/mm/frame.c	(revision 06da55b579d4404672ea2a8664146ec81c2b9df2)
@@ -65,4 +65,6 @@
 static count_t phys_regions_count = 0;
 static phys_region_t phys_regions[MAX_REGIONS];
+
+uintptr_t end_frame = 0;
 
 
@@ -237,5 +239,7 @@
 	}
 	
-	frame_add_region(start_frame, frame);
+	end_frame = frame;
+	
+	frame_add_region(start_frame, end_frame);
 	
 	/* Blacklist interrupt vector frame */
Index: kernel/arch/mips32/src/mm/page.c
===================================================================
--- kernel/arch/mips32/src/mm/page.c	(revision 6cd9aa607e6515e17e369c7e888779416251db4d)
+++ kernel/arch/mips32/src/mm/page.c	(revision 06da55b579d4404672ea2a8664146ec81c2b9df2)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup mips32mm	
+/** @addtogroup mips32mm
  * @{
  */
@@ -36,4 +36,5 @@
 #include <genarch/mm/page_pt.h>
 #include <mm/page.h>
+#include <mm/frame.h>
 
 void page_arch_init(void)
@@ -51,4 +52,10 @@
 }
 
+void hw_area(uintptr_t *physaddr, pfn_t *frames)
+{
+	*physaddr = end_frame;
+	*frames = ADDR2PFN(0xffffffff - end_frame);
+}
+
 /** @}
  */
