|
@@ -240,10 +240,35 @@ static void __init do_add_efi_memmap(void)
|
|
unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
|
|
unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
|
|
int e820_type;
|
|
int e820_type;
|
|
|
|
|
|
- if (md->attribute & EFI_MEMORY_WB)
|
|
|
|
- e820_type = E820_RAM;
|
|
|
|
- else
|
|
|
|
|
|
+ switch (md->type) {
|
|
|
|
+ case EFI_LOADER_CODE:
|
|
|
|
+ case EFI_LOADER_DATA:
|
|
|
|
+ case EFI_BOOT_SERVICES_CODE:
|
|
|
|
+ case EFI_BOOT_SERVICES_DATA:
|
|
|
|
+ case EFI_CONVENTIONAL_MEMORY:
|
|
|
|
+ if (md->attribute & EFI_MEMORY_WB)
|
|
|
|
+ e820_type = E820_RAM;
|
|
|
|
+ else
|
|
|
|
+ e820_type = E820_RESERVED;
|
|
|
|
+ break;
|
|
|
|
+ case EFI_ACPI_RECLAIM_MEMORY:
|
|
|
|
+ e820_type = E820_ACPI;
|
|
|
|
+ break;
|
|
|
|
+ case EFI_ACPI_MEMORY_NVS:
|
|
|
|
+ e820_type = E820_NVS;
|
|
|
|
+ break;
|
|
|
|
+ case EFI_UNUSABLE_MEMORY:
|
|
|
|
+ e820_type = E820_UNUSABLE;
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ /*
|
|
|
|
+ * EFI_RESERVED_TYPE EFI_RUNTIME_SERVICES_CODE
|
|
|
|
+ * EFI_RUNTIME_SERVICES_DATA EFI_MEMORY_MAPPED_IO
|
|
|
|
+ * EFI_MEMORY_MAPPED_IO_PORT_SPACE EFI_PAL_CODE
|
|
|
|
+ */
|
|
e820_type = E820_RESERVED;
|
|
e820_type = E820_RESERVED;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
e820_add_region(start, size, e820_type);
|
|
e820_add_region(start, size, e820_type);
|
|
}
|
|
}
|
|
sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
|
|
sanitize_e820_map(e820.map, ARRAY_SIZE(e820.map), &e820.nr_map);
|