|
@@ -4,6 +4,7 @@
|
|
|
*/
|
|
|
|
|
|
#include <common.h>
|
|
|
+#include <efi_loader.h>
|
|
|
#include <asm/e820.h>
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
@@ -34,3 +35,41 @@ __weak unsigned int install_e820_map(unsigned int max_entries,
|
|
|
|
|
|
return 4;
|
|
|
}
|
|
|
+
|
|
|
+#if defined(CONFIG_EFI_LOADER) && !defined(CONFIG_SPL_BUILD)
|
|
|
+void efi_add_known_memory(void)
|
|
|
+{
|
|
|
+ struct e820_entry e820[E820MAX];
|
|
|
+ unsigned int i, num;
|
|
|
+ u64 start, pages;
|
|
|
+ int type;
|
|
|
+
|
|
|
+ num = install_e820_map(ARRAY_SIZE(e820), e820);
|
|
|
+
|
|
|
+ for (i = 0; i < num; ++i) {
|
|
|
+ start = e820[i].addr;
|
|
|
+ pages = ALIGN(e820[i].size, EFI_PAGE_SIZE) >> EFI_PAGE_SHIFT;
|
|
|
+
|
|
|
+ switch (e820[i].type) {
|
|
|
+ case E820_RAM:
|
|
|
+ type = EFI_CONVENTIONAL_MEMORY;
|
|
|
+ break;
|
|
|
+ case E820_RESERVED:
|
|
|
+ type = EFI_RESERVED_MEMORY_TYPE;
|
|
|
+ break;
|
|
|
+ case E820_ACPI:
|
|
|
+ type = EFI_ACPI_RECLAIM_MEMORY;
|
|
|
+ break;
|
|
|
+ case E820_NVS:
|
|
|
+ type = EFI_ACPI_MEMORY_NVS;
|
|
|
+ break;
|
|
|
+ case E820_UNUSABLE:
|
|
|
+ default:
|
|
|
+ type = EFI_UNUSABLE_MEMORY;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
+ efi_add_memory_map(start, pages, type, false);
|
|
|
+ }
|
|
|
+}
|
|
|
+#endif /* defined(EFI_LOADER) && !defined(CONFIG_SPL_BUILD) */
|