Translate UEFI persistent memory type

Define
* GRUB_EFI_PERSISTENT_MEMORY (UEFI memory map type 14) per UEFI 2.5
* GRUB_MEMORY_PERSISTENT (E820 type 7) per ACPI 3.0
* GRUB_MEMORY_PERSISTENT_LEGACY (E820 unofficial type 12) per ACPI 3.0

and translate GRUB_EFI_PERSISTENT_MEMORY to GRUB_MEMORY_PERSISTENT in
grub_efi_mmap_iterate().

Includes
* adding the E820 names to lsmmap
* handling the E820 types in make_efi_memtype()

Suggested-by: Vladimir 'φ-coder/phcoder' Serbinenko <phcoder@gmail.com>
Suggested-by: Andrei Borzenkov <arvidjaar@gmail.com>
This commit is contained in:
Robert Elliott 2015-12-03 11:38:36 -06:00 committed by Andrei Borzenkov
parent 4803db51ff
commit 76ce1de740
4 changed files with 17 additions and 0 deletions

View file

@ -37,6 +37,8 @@ static const char *names[] =
is required to save accross hibernations. */ is required to save accross hibernations. */
[GRUB_MEMORY_NVS] = N_("ACPI non-volatile storage RAM"), [GRUB_MEMORY_NVS] = N_("ACPI non-volatile storage RAM"),
[GRUB_MEMORY_BADRAM] = N_("faulty RAM (BadRAM)"), [GRUB_MEMORY_BADRAM] = N_("faulty RAM (BadRAM)"),
[GRUB_MEMORY_PERSISTENT] = N_("persistent RAM"),
[GRUB_MEMORY_PERSISTENT_LEGACY] = N_("persistent RAM (legacy)"),
[GRUB_MEMORY_COREBOOT_TABLES] = N_("RAM holding coreboot tables"), [GRUB_MEMORY_COREBOOT_TABLES] = N_("RAM holding coreboot tables"),
[GRUB_MEMORY_CODE] = N_("RAM holding firmware code") [GRUB_MEMORY_CODE] = N_("RAM holding firmware code")
}; };

View file

@ -118,6 +118,11 @@ grub_efi_mmap_iterate (grub_memory_hook_t hook, void *hook_data,
GRUB_MEMORY_NVS, hook_data); GRUB_MEMORY_NVS, hook_data);
break; break;
case GRUB_EFI_PERSISTENT_MEMORY:
hook (desc->physical_start, desc->num_pages * 4096,
GRUB_MEMORY_PERSISTENT, hook_data);
break;
default: default:
grub_printf ("Unknown memory type %d, considering reserved\n", grub_printf ("Unknown memory type %d, considering reserved\n",
desc->type); desc->type);
@ -147,6 +152,13 @@ make_efi_memtype (int type)
/* No way to remove a chunk of memory from EFI mmap. /* No way to remove a chunk of memory from EFI mmap.
So mark it as unusable. */ So mark it as unusable. */
case GRUB_MEMORY_HOLE: case GRUB_MEMORY_HOLE:
/*
* AllocatePages() does not support GRUB_EFI_PERSISTENT_MEMORY,
* so no translation for GRUB_MEMORY_PERSISTENT or
* GRUB_MEMORY_PERSISTENT_LEGACY.
*/
case GRUB_MEMORY_PERSISTENT:
case GRUB_MEMORY_PERSISTENT_LEGACY:
case GRUB_MEMORY_RESERVED: case GRUB_MEMORY_RESERVED:
return GRUB_EFI_UNUSABLE_MEMORY; return GRUB_EFI_UNUSABLE_MEMORY;

View file

@ -476,6 +476,7 @@ enum grub_efi_memory_type
GRUB_EFI_MEMORY_MAPPED_IO, GRUB_EFI_MEMORY_MAPPED_IO,
GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE, GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
GRUB_EFI_PAL_CODE, GRUB_EFI_PAL_CODE,
GRUB_EFI_PERSISTENT_MEMORY,
GRUB_EFI_MAX_MEMORY_TYPE GRUB_EFI_MAX_MEMORY_TYPE
}; };
typedef enum grub_efi_memory_type grub_efi_memory_type_t; typedef enum grub_efi_memory_type grub_efi_memory_type_t;

View file

@ -30,6 +30,8 @@ typedef enum grub_memory_type
GRUB_MEMORY_ACPI = 3, GRUB_MEMORY_ACPI = 3,
GRUB_MEMORY_NVS = 4, GRUB_MEMORY_NVS = 4,
GRUB_MEMORY_BADRAM = 5, GRUB_MEMORY_BADRAM = 5,
GRUB_MEMORY_PERSISTENT = 7,
GRUB_MEMORY_PERSISTENT_LEGACY = 12,
GRUB_MEMORY_COREBOOT_TABLES = 16, GRUB_MEMORY_COREBOOT_TABLES = 16,
GRUB_MEMORY_CODE = 20, GRUB_MEMORY_CODE = 20,
/* This one is special: it's used internally but is never reported /* This one is special: it's used internally but is never reported