]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
Translate UEFI persistent memory type
authorRobert Elliott <elliott@hpe.com>
Thu, 3 Dec 2015 17:38:36 +0000 (11:38 -0600)
committerAndrei Borzenkov <arvidjaar@gmail.com>
Tue, 15 Dec 2015 07:25:34 +0000 (10:25 +0300)
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>
grub-core/commands/lsmmap.c
grub-core/mmap/efi/mmap.c
include/grub/efi/api.h
include/grub/memory.h

index 4b504fd28f8e7428eb7d383b4b3bda15bcb16f39..816ee47d1ed3dcbf388f29a783aa5f057c6c2060 100644 (file)
@@ -37,6 +37,8 @@ static const char *names[] =
        is required to save accross hibernations.  */
     [GRUB_MEMORY_NVS] = N_("ACPI non-volatile storage RAM"),
     [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_CODE] = N_("RAM holding firmware code")
   };
index 900a4d6598c3ba544986d3d58d0d8289444bb6bc..bd495a184811445b56a4937d4c2d2546fd3bf695 100644 (file)
@@ -118,6 +118,11 @@ grub_efi_mmap_iterate (grub_memory_hook_t hook, void *hook_data,
                GRUB_MEMORY_NVS, hook_data);
          break;
 
+       case GRUB_EFI_PERSISTENT_MEMORY:
+         hook (desc->physical_start, desc->num_pages * 4096,
+               GRUB_MEMORY_PERSISTENT, hook_data);
+       break;
+
        default:
          grub_printf ("Unknown memory type %d, considering reserved\n",
                       desc->type);
@@ -147,6 +152,13 @@ make_efi_memtype (int type)
       /* No way to remove a chunk of memory from EFI mmap.
         So mark it as unusable. */
     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:
       return GRUB_EFI_UNUSABLE_MEMORY;
 
index 24a05c5f6bf1d6f00a18deac34b32763b756795d..2bbfe344c4e0c59e2756786aa9d392efe39f1e4b 100644 (file)
@@ -476,6 +476,7 @@ enum grub_efi_memory_type
     GRUB_EFI_MEMORY_MAPPED_IO,
     GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
     GRUB_EFI_PAL_CODE,
+    GRUB_EFI_PERSISTENT_MEMORY,
     GRUB_EFI_MAX_MEMORY_TYPE
   };
 typedef enum grub_efi_memory_type grub_efi_memory_type_t;
index 083cfb6802e84d6db6f0e3b9c219ee31967c6b4f..6da114a1bdc1d16c3d20bad9bbc3ab1134aabb5c 100644 (file)
@@ -30,6 +30,8 @@ typedef enum grub_memory_type
     GRUB_MEMORY_ACPI = 3,
     GRUB_MEMORY_NVS = 4,
     GRUB_MEMORY_BADRAM = 5,
+    GRUB_MEMORY_PERSISTENT = 7,
+    GRUB_MEMORY_PERSISTENT_LEGACY = 12,
     GRUB_MEMORY_COREBOOT_TABLES = 16,
     GRUB_MEMORY_CODE = 20,
     /* This one is special: it's used internally but is never reported