aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/platform/efi/efi.c18
-rw-r--r--drivers/firmware/efi/efi.c31
2 files changed, 31 insertions, 18 deletions
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index e4308fe6afe8..2f61fcddcddb 100644
--- a/arch/x86/platform/efi/efi.c
+++ b/arch/x86/platform/efi/efi.c
@@ -952,24 +952,6 @@ u32 efi_mem_type(unsigned long phys_addr)
952 return 0; 952 return 0;
953} 953}
954 954
955u64 efi_mem_attributes(unsigned long phys_addr)
956{
957 efi_memory_desc_t *md;
958 void *p;
959
960 if (!efi_enabled(EFI_MEMMAP))
961 return 0;
962
963 for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
964 md = p;
965 if ((md->phys_addr <= phys_addr) &&
966 (phys_addr < (md->phys_addr +
967 (md->num_pages << EFI_PAGE_SHIFT))))
968 return md->attribute;
969 }
970 return 0;
971}
972
973static int __init arch_parse_efi_cmdline(char *str) 955static int __init arch_parse_efi_cmdline(char *str)
974{ 956{
975 if (!str) { 957 if (!str) {
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c
index d7a9160008d3..afee2880e0fd 100644
--- a/drivers/firmware/efi/efi.c
+++ b/drivers/firmware/efi/efi.c
@@ -607,3 +607,34 @@ char * __init efi_md_typeattr_format(char *buf, size_t size,
607 attr & EFI_MEMORY_UC ? "UC" : ""); 607 attr & EFI_MEMORY_UC ? "UC" : "");
608 return buf; 608 return buf;
609} 609}
610
611/*
612 * efi_mem_attributes - lookup memmap attributes for physical address
613 * @phys_addr: the physical address to lookup
614 *
615 * Search in the EFI memory map for the region covering
616 * @phys_addr. Returns the EFI memory attributes if the region
617 * was found in the memory map, 0 otherwise.
618 *
619 * Despite being marked __weak, most architectures should *not*
620 * override this function. It is __weak solely for the benefit
621 * of ia64 which has a funky EFI memory map that doesn't work
622 * the same way as other architectures.
623 */
624u64 __weak efi_mem_attributes(unsigned long phys_addr)
625{
626 efi_memory_desc_t *md;
627 void *p;
628
629 if (!efi_enabled(EFI_MEMMAP))
630 return 0;
631
632 for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
633 md = p;
634 if ((md->phys_addr <= phys_addr) &&
635 (phys_addr < (md->phys_addr +
636 (md->num_pages << EFI_PAGE_SHIFT))))
637 return md->attribute;
638 }
639 return 0;
640}