Make 0xa0000 - 0x10000 a "gap" in the e820 map.
authorKevin O'Connor <kevin@koconnor.net>
Sat, 21 Jun 2008 15:43:32 +0000 (11:43 -0400)
committerKevin O'Connor <kevin@koconnor.net>
Sat, 21 Jun 2008 15:43:32 +0000 (11:43 -0400)
Declaring memory between 0xa0000 - 0x10000 confuses windows, so don't
    do that.
Add capability to remove mappings in the memory mapping code.

src/memmap.c
src/memmap.h
src/post.c

index 66fba097c5dac2a3e0ca5e8636bcae9829b52272..279e6261fb2ebeeada00847a69ed25f158b89abc 100644 (file)
@@ -91,8 +91,10 @@ add_e820(u64 start, u64 size, u32 type)
                 remove_e820(i);
             }
         }
-        insert_e820(i, start, size, type);
-        i++;
+        if (type != E820_HOLE) {
+            insert_e820(i, start, size, type);
+            i++;
+        }
         // Remove all existing items that are completely overlapped.
         while (i<e820_count) {
             e = &e820_list[i];
index c0cdca597ad5755c200c879f443b5bec85d8c378..b5e1d0d19e7771a732d9dc07030523f7cfb02036 100644 (file)
@@ -8,6 +8,7 @@
 #define E820_ACPI         3
 #define E820_NVS          4
 #define E820_UNUSABLE     5
+#define E820_HOLE         ((u32)-1) // Useful for removing entries
 
 struct e820entry {
     u64 start;
index 766e8984e765634a99989fbbd5cec74c914586a2..ca1d2232b874f2dc07904e699112134336ae5e94 100644 (file)
@@ -100,6 +100,9 @@ ram_probe(void)
         add_e820(0xfffc0000, 256*1024, E820_RESERVED);
     }
 
+    // Don't declare any memory between 0xa0000 and 0x100000
+    add_e820(0xa0000, 0x50000, E820_HOLE);
+
     // Mark known areas as reserved.
     add_e820((u32)MAKE_FARPTR(SEG_EBDA, 0), EBDA_SIZE * 1024, E820_RESERVED);
     add_e820((u32)MAKE_FARPTR(SEG_BIOS, 0), 0x10000, E820_RESERVED);