-// XXX - should create e820 memory map in post and just copy it here.
-static void
-handle_15e820(struct bregs *regs)
-{
- if (regs->edx != 0x534D4150) {
- set_code_fail(regs, RET_EUNSUPPORTED);
- return;
- }
-
- u32 extended_memory_size = GET_EBDA(ram_size);
- // greater than EFF00000???
- if (extended_memory_size > 0xf0000000)
- // everything after this is reserved memory until we get to 0x100000000
- extended_memory_size = 0xf0000000;
-
- switch (regs->bx) {
- case 0:
- set_e820_range(regs, 0x0000000L, 0x0009fc00L, E820_RAM, 0);
- break;
- case 1:
- set_e820_range(regs, 0x0009fc00L, 0x000a0000L, E820_RESERVED, 0);
- break;
- case 2:
- set_e820_range(regs, 0x000e8000L, 0x00100000L, E820_RESERVED, 0);
- break;
- case 3:
- set_e820_range(regs, 0x00100000L
- , extended_memory_size - CONFIG_ACPI_DATA_SIZE
- , E820_RAM, 0);
- break;
- case 4:
- set_e820_range(regs,
- extended_memory_size - CONFIG_ACPI_DATA_SIZE,
- extended_memory_size, E820_ACPI, 0);
- break;
- case 5:
- /* 256KB BIOS area at the end of 4 GB */
- set_e820_range(regs, 0xfffc0000L, 0x00000000L, E820_RESERVED, 1);
- break;
- default: /* AX=E820, DX=534D4150, BX unrecognized */
- set_code_fail(regs, RET_EUNSUPPORTED);
- }
-}
-