Index: kernel/arch/ia64/src/mm/frame.c
===================================================================
--- kernel/arch/ia64/src/mm/frame.c	(revision e32e092d6f8bed442ecc81b18af9ef323bc4e650)
+++ kernel/arch/ia64/src/mm/frame.c	(revision 1025d287b38dfbafd8f22c00a259f14af70cbab6)
@@ -43,18 +43,29 @@
  */
 #define MEMORY_SIZE	(64 * 1024 * 1024)
-#define MEMORY_BASE	(64 * 1024 * 1024)
+#define MEMORY_BASE	(0 * 64 * 1024 * 1024)
+
+#define ONE_TO_ONE_MAPPING_SIZE (256*1048576) // Mapped at start
 
 #define ROM_BASE	0xa0000               //For ski
 #define ROM_SIZE	(384 * 1024)          //For ski
 void poke_char(int x,int y,char ch, char c);
+
+uintptr_t last_frame;
+
 void frame_arch_init(void)
 {
-	zone_create(MEMORY_BASE >> FRAME_WIDTH, SIZE2FRAMES(MEMORY_SIZE), (MEMORY_SIZE) >> FRAME_WIDTH, 0);
+
+	if(config.cpu_active==1)
+	{
+		zone_create(MEMORY_BASE >> FRAME_WIDTH, SIZE2FRAMES(MEMORY_SIZE), (MEMORY_SIZE) >> FRAME_WIDTH, 0);
 	
-	/*
-	 * Blacklist ROM regions.
-	 */
-	frame_mark_unavailable(ADDR2PFN(ROM_BASE), SIZE2FRAMES(ROM_SIZE));
-	
+		/*
+		* Blacklist ROM regions.
+		*/
+		//frame_mark_unavailable(ADDR2PFN(ROM_BASE), SIZE2FRAMES(ROM_SIZE));
+
+		frame_mark_unavailable(ADDR2PFN(0), SIZE2FRAMES(1048576));
+		last_frame=SIZE2FRAMES((VRN_KERNEL<<VRN_SHIFT)+ONE_TO_ONE_MAPPING_SIZE);	
+	}	
 }
 
Index: kernel/arch/ia64/src/mm/page.c
===================================================================
--- kernel/arch/ia64/src/mm/page.c	(revision e32e092d6f8bed442ecc81b18af9ef323bc4e650)
+++ kernel/arch/ia64/src/mm/page.c	(revision 1025d287b38dfbafd8f22c00a259f14af70cbab6)
@@ -48,4 +48,5 @@
 #include <arch/barrier.h>
 #include <memstr.h>
+#include <align.h>
 
 static void set_environment(void);
@@ -263,4 +264,26 @@
 }
 
+extern uintptr_t last_frame;
+
+
+uintptr_t hw_map(uintptr_t physaddr, size_t size)
+{
+	if (last_frame + ALIGN_UP(size, PAGE_SIZE) > KA2PA(KERNEL_ADDRESS_SPACE_END_ARCH))
+		panic("Unable to map physical memory %p (%d bytes)", physaddr, size)
+	
+	uintptr_t virtaddr = PA2KA(last_frame);
+	pfn_t i;
+	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);
+	}
+	
+	last_frame = ALIGN_UP(last_frame + size, FRAME_SIZE);
+	
+	return virtaddr;
+}
+
+
+
 /** @}
  */
