dprintf(3, "malloc preinit\n");
// Don't declare any memory between 0xa0000 and 0x100000
- add_e820(BUILD_LOWRAM_END, BUILD_BIOS_ADDR-BUILD_LOWRAM_END, E820_HOLE);
+ e820_remove(BUILD_LOWRAM_END, BUILD_BIOS_ADDR-BUILD_LOWRAM_END);
// Mark known areas as reserved.
add_e820(BUILD_BIOS_ADDR, BUILD_BIOS_SIZE, E820_RESERVED);
case E820_ACPI: return "ACPI";
case E820_NVS: return "NVS";
case E820_UNUSABLE: return "UNUSABLE";
- case E820_HOLE: return "HOLE";
default: return "UNKNOWN";
}
}
}
}
+#define E820_HOLE ((u32)-1) // Used internally to remove entries
+
// Add a new entry to the list. This scans for overlaps and keeps the
// list sorted.
void
//dump_map();
}
+// Remove any definitions in a memory range (make a memory hole).
+void
+e820_remove(u64 start, u64 size)
+{
+ add_e820(start, size, E820_HOLE);
+}
+
// Report on final memory locations.
void
memmap_prepboot(void)
#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;
};
void add_e820(u64 start, u64 size, u32 type);
+void e820_remove(u64 start, u64 size);
void memmap_prepboot(void);
// A typical OS page size