diff options
| -rw-r--r-- | arch/ia64/kernel/efi.c | 54 | ||||
| -rw-r--r-- | arch/x86/platform/efi/efi.c | 96 | ||||
| -rw-r--r-- | drivers/firmware/efi/efi.c | 108 | ||||
| -rw-r--r-- | include/linux/efi.h | 7 |
4 files changed, 134 insertions, 131 deletions
diff --git a/arch/ia64/kernel/efi.c b/arch/ia64/kernel/efi.c index 51bce594eb83..da5b462e6de6 100644 --- a/arch/ia64/kernel/efi.c +++ b/arch/ia64/kernel/efi.c | |||
| @@ -44,10 +44,15 @@ | |||
| 44 | 44 | ||
| 45 | #define EFI_DEBUG 0 | 45 | #define EFI_DEBUG 0 |
| 46 | 46 | ||
| 47 | static __initdata unsigned long palo_phys; | ||
| 48 | |||
| 49 | static __initdata efi_config_table_type_t arch_tables[] = { | ||
| 50 | {PROCESSOR_ABSTRACTION_LAYER_OVERWRITE_GUID, "PALO", &palo_phys}, | ||
| 51 | {NULL_GUID, NULL, 0}, | ||
| 52 | }; | ||
| 53 | |||
| 47 | extern efi_status_t efi_call_phys (void *, ...); | 54 | extern efi_status_t efi_call_phys (void *, ...); |
| 48 | 55 | ||
| 49 | struct efi efi; | ||
| 50 | EXPORT_SYMBOL(efi); | ||
| 51 | static efi_runtime_services_t *runtime; | 56 | static efi_runtime_services_t *runtime; |
| 52 | static u64 mem_limit = ~0UL, max_addr = ~0UL, min_addr = 0UL; | 57 | static u64 mem_limit = ~0UL, max_addr = ~0UL, min_addr = 0UL; |
| 53 | 58 | ||
| @@ -423,9 +428,9 @@ static u8 __init palo_checksum(u8 *buffer, u32 length) | |||
| 423 | * Parse and handle PALO table which is published at: | 428 | * Parse and handle PALO table which is published at: |
| 424 | * http://www.dig64.org/home/DIG64_PALO_R1_0.pdf | 429 | * http://www.dig64.org/home/DIG64_PALO_R1_0.pdf |
| 425 | */ | 430 | */ |
| 426 | static void __init handle_palo(unsigned long palo_phys) | 431 | static void __init handle_palo(unsigned long phys_addr) |
| 427 | { | 432 | { |
| 428 | struct palo_table *palo = __va(palo_phys); | 433 | struct palo_table *palo = __va(phys_addr); |
| 429 | u8 checksum; | 434 | u8 checksum; |
| 430 | 435 | ||
| 431 | if (strncmp(palo->signature, PALO_SIG, sizeof(PALO_SIG) - 1)) { | 436 | if (strncmp(palo->signature, PALO_SIG, sizeof(PALO_SIG) - 1)) { |
| @@ -467,12 +472,10 @@ void __init | |||
| 467 | efi_init (void) | 472 | efi_init (void) |
| 468 | { | 473 | { |
| 469 | void *efi_map_start, *efi_map_end; | 474 | void *efi_map_start, *efi_map_end; |
| 470 | efi_config_table_t *config_tables; | ||
| 471 | efi_char16_t *c16; | 475 | efi_char16_t *c16; |
| 472 | u64 efi_desc_size; | 476 | u64 efi_desc_size; |
| 473 | char *cp, vendor[100] = "unknown"; | 477 | char *cp, vendor[100] = "unknown"; |
| 474 | int i; | 478 | int i; |
| 475 | unsigned long palo_phys; | ||
| 476 | 479 | ||
| 477 | /* | 480 | /* |
| 478 | * It's too early to be able to use the standard kernel command line | 481 | * It's too early to be able to use the standard kernel command line |
| @@ -514,8 +517,6 @@ efi_init (void) | |||
| 514 | efi.systab->hdr.revision >> 16, | 517 | efi.systab->hdr.revision >> 16, |
| 515 | efi.systab->hdr.revision & 0xffff); | 518 | efi.systab->hdr.revision & 0xffff); |
| 516 | 519 | ||
| 517 | config_tables = __va(efi.systab->tables); | ||
| 518 | |||
| 519 | /* Show what we know for posterity */ | 520 | /* Show what we know for posterity */ |
| 520 | c16 = __va(efi.systab->fw_vendor); | 521 | c16 = __va(efi.systab->fw_vendor); |
| 521 | if (c16) { | 522 | if (c16) { |
| @@ -528,43 +529,10 @@ efi_init (void) | |||
| 528 | efi.systab->hdr.revision >> 16, | 529 | efi.systab->hdr.revision >> 16, |
| 529 | efi.systab->hdr.revision & 0xffff, vendor); | 530 | efi.systab->hdr.revision & 0xffff, vendor); |
| 530 | 531 | ||
| 531 | efi.mps = EFI_INVALID_TABLE_ADDR; | ||
| 532 | efi.acpi = EFI_INVALID_TABLE_ADDR; | ||
| 533 | efi.acpi20 = EFI_INVALID_TABLE_ADDR; | ||
| 534 | efi.smbios = EFI_INVALID_TABLE_ADDR; | ||
| 535 | efi.sal_systab = EFI_INVALID_TABLE_ADDR; | ||
| 536 | efi.boot_info = EFI_INVALID_TABLE_ADDR; | ||
| 537 | efi.hcdp = EFI_INVALID_TABLE_ADDR; | ||
| 538 | efi.uga = EFI_INVALID_TABLE_ADDR; | ||
| 539 | |||
| 540 | palo_phys = EFI_INVALID_TABLE_ADDR; | 532 | palo_phys = EFI_INVALID_TABLE_ADDR; |
| 541 | 533 | ||
| 542 | for (i = 0; i < (int) efi.systab->nr_tables; i++) { | 534 | if (efi_config_init(arch_tables) != 0) |
| 543 | if (efi_guidcmp(config_tables[i].guid, MPS_TABLE_GUID) == 0) { | 535 | return; |
| 544 | efi.mps = config_tables[i].table; | ||
| 545 | printk(" MPS=0x%lx", config_tables[i].table); | ||
| 546 | } else if (efi_guidcmp(config_tables[i].guid, ACPI_20_TABLE_GUID) == 0) { | ||
| 547 | efi.acpi20 = config_tables[i].table; | ||
| 548 | printk(" ACPI 2.0=0x%lx", config_tables[i].table); | ||
| 549 | } else if (efi_guidcmp(config_tables[i].guid, ACPI_TABLE_GUID) == 0) { | ||
| 550 | efi.acpi = config_tables[i].table; | ||
| 551 | printk(" ACPI=0x%lx", config_tables[i].table); | ||
| 552 | } else if (efi_guidcmp(config_tables[i].guid, SMBIOS_TABLE_GUID) == 0) { | ||
| 553 | efi.smbios = config_tables[i].table; | ||
| 554 | printk(" SMBIOS=0x%lx", config_tables[i].table); | ||
| 555 | } else if (efi_guidcmp(config_tables[i].guid, SAL_SYSTEM_TABLE_GUID) == 0) { | ||
| 556 | efi.sal_systab = config_tables[i].table; | ||
| 557 | printk(" SALsystab=0x%lx", config_tables[i].table); | ||
| 558 | } else if (efi_guidcmp(config_tables[i].guid, HCDP_TABLE_GUID) == 0) { | ||
| 559 | efi.hcdp = config_tables[i].table; | ||
| 560 | printk(" HCDP=0x%lx", config_tables[i].table); | ||
| 561 | } else if (efi_guidcmp(config_tables[i].guid, | ||
| 562 | PROCESSOR_ABSTRACTION_LAYER_OVERWRITE_GUID) == 0) { | ||
| 563 | palo_phys = config_tables[i].table; | ||
| 564 | printk(" PALO=0x%lx", config_tables[i].table); | ||
| 565 | } | ||
| 566 | } | ||
| 567 | printk("\n"); | ||
| 568 | 536 | ||
| 569 | if (palo_phys != EFI_INVALID_TABLE_ADDR) | 537 | if (palo_phys != EFI_INVALID_TABLE_ADDR) |
| 570 | handle_palo(palo_phys); | 538 | handle_palo(palo_phys); |
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c index 90f6ed127096..ed2be58ea3f1 100644 --- a/arch/x86/platform/efi/efi.c +++ b/arch/x86/platform/efi/efi.c | |||
| @@ -60,19 +60,6 @@ | |||
| 60 | 60 | ||
| 61 | static efi_char16_t efi_dummy_name[6] = { 'D', 'U', 'M', 'M', 'Y', 0 }; | 61 | static efi_char16_t efi_dummy_name[6] = { 'D', 'U', 'M', 'M', 'Y', 0 }; |
| 62 | 62 | ||
| 63 | struct efi __read_mostly efi = { | ||
| 64 | .mps = EFI_INVALID_TABLE_ADDR, | ||
| 65 | .acpi = EFI_INVALID_TABLE_ADDR, | ||
| 66 | .acpi20 = EFI_INVALID_TABLE_ADDR, | ||
| 67 | .smbios = EFI_INVALID_TABLE_ADDR, | ||
| 68 | .sal_systab = EFI_INVALID_TABLE_ADDR, | ||
| 69 | .boot_info = EFI_INVALID_TABLE_ADDR, | ||
| 70 | .hcdp = EFI_INVALID_TABLE_ADDR, | ||
| 71 | .uga = EFI_INVALID_TABLE_ADDR, | ||
| 72 | .uv_systab = EFI_INVALID_TABLE_ADDR, | ||
| 73 | }; | ||
| 74 | EXPORT_SYMBOL(efi); | ||
| 75 | |||
| 76 | struct efi_memory_map memmap; | 63 | struct efi_memory_map memmap; |
| 77 | 64 | ||
| 78 | static struct efi efi_phys __initdata; | 65 | static struct efi efi_phys __initdata; |
| @@ -80,6 +67,13 @@ static efi_system_table_t efi_systab __initdata; | |||
| 80 | 67 | ||
| 81 | unsigned long x86_efi_facility; | 68 | unsigned long x86_efi_facility; |
| 82 | 69 | ||
| 70 | static __initdata efi_config_table_type_t arch_tables[] = { | ||
| 71 | #ifdef CONFIG_X86_UV | ||
| 72 | {UV_SYSTEM_TABLE_GUID, "UVsystab", &efi.uv_systab}, | ||
| 73 | #endif | ||
| 74 | {NULL_GUID, NULL, 0}, | ||
| 75 | }; | ||
| 76 | |||
| 83 | /* | 77 | /* |
| 84 | * Returns 1 if 'facility' is enabled, 0 otherwise. | 78 | * Returns 1 if 'facility' is enabled, 0 otherwise. |
| 85 | */ | 79 | */ |
| @@ -578,80 +572,6 @@ static int __init efi_systab_init(void *phys) | |||
| 578 | return 0; | 572 | return 0; |
| 579 | } | 573 | } |
| 580 | 574 | ||
| 581 | static int __init efi_config_init(u64 tables, int nr_tables) | ||
| 582 | { | ||
| 583 | void *config_tables, *tablep; | ||
| 584 | int i, sz; | ||
| 585 | |||
| 586 | if (efi_enabled(EFI_64BIT)) | ||
| 587 | sz = sizeof(efi_config_table_64_t); | ||
| 588 | else | ||
| 589 | sz = sizeof(efi_config_table_32_t); | ||
| 590 | |||
| 591 | /* | ||
| 592 | * Let's see what config tables the firmware passed to us. | ||
| 593 | */ | ||
| 594 | config_tables = early_ioremap(tables, nr_tables * sz); | ||
| 595 | if (config_tables == NULL) { | ||
| 596 | pr_err("Could not map Configuration table!\n"); | ||
| 597 | return -ENOMEM; | ||
| 598 | } | ||
| 599 | |||
| 600 | tablep = config_tables; | ||
| 601 | pr_info(""); | ||
| 602 | for (i = 0; i < efi.systab->nr_tables; i++) { | ||
| 603 | efi_guid_t guid; | ||
| 604 | unsigned long table; | ||
| 605 | |||
| 606 | if (efi_enabled(EFI_64BIT)) { | ||
| 607 | u64 table64; | ||
| 608 | guid = ((efi_config_table_64_t *)tablep)->guid; | ||
| 609 | table64 = ((efi_config_table_64_t *)tablep)->table; | ||
| 610 | table = table64; | ||
| 611 | #ifdef CONFIG_X86_32 | ||
| 612 | if (table64 >> 32) { | ||
| 613 | pr_cont("\n"); | ||
| 614 | pr_err("Table located above 4GB, disabling EFI.\n"); | ||
| 615 | early_iounmap(config_tables, | ||
| 616 | efi.systab->nr_tables * sz); | ||
| 617 | return -EINVAL; | ||
| 618 | } | ||
| 619 | #endif | ||
| 620 | } else { | ||
| 621 | guid = ((efi_config_table_32_t *)tablep)->guid; | ||
| 622 | table = ((efi_config_table_32_t *)tablep)->table; | ||
| 623 | } | ||
| 624 | if (!efi_guidcmp(guid, MPS_TABLE_GUID)) { | ||
| 625 | efi.mps = table; | ||
| 626 | pr_cont(" MPS=0x%lx ", table); | ||
| 627 | } else if (!efi_guidcmp(guid, ACPI_20_TABLE_GUID)) { | ||
| 628 | efi.acpi20 = table; | ||
| 629 | pr_cont(" ACPI 2.0=0x%lx ", table); | ||
| 630 | } else if (!efi_guidcmp(guid, ACPI_TABLE_GUID)) { | ||
| 631 | efi.acpi = table; | ||
| 632 | pr_cont(" ACPI=0x%lx ", table); | ||
| 633 | } else if (!efi_guidcmp(guid, SMBIOS_TABLE_GUID)) { | ||
| 634 | efi.smbios = table; | ||
| 635 | pr_cont(" SMBIOS=0x%lx ", table); | ||
| 636 | #ifdef CONFIG_X86_UV | ||
| 637 | } else if (!efi_guidcmp(guid, UV_SYSTEM_TABLE_GUID)) { | ||
| 638 | efi.uv_systab = table; | ||
| 639 | pr_cont(" UVsystab=0x%lx ", table); | ||
| 640 | #endif | ||
| 641 | } else if (!efi_guidcmp(guid, HCDP_TABLE_GUID)) { | ||
| 642 | efi.hcdp = table; | ||
| 643 | pr_cont(" HCDP=0x%lx ", table); | ||
| 644 | } else if (!efi_guidcmp(guid, UGA_IO_PROTOCOL_GUID)) { | ||
| 645 | efi.uga = table; | ||
| 646 | pr_cont(" UGA=0x%lx ", table); | ||
| 647 | } | ||
| 648 | tablep += sz; | ||
| 649 | } | ||
| 650 | pr_cont("\n"); | ||
| 651 | early_iounmap(config_tables, efi.systab->nr_tables * sz); | ||
| 652 | return 0; | ||
| 653 | } | ||
| 654 | |||
| 655 | static int __init efi_runtime_init(void) | 575 | static int __init efi_runtime_init(void) |
| 656 | { | 576 | { |
| 657 | efi_runtime_services_t *runtime; | 577 | efi_runtime_services_t *runtime; |
| @@ -745,7 +665,7 @@ void __init efi_init(void) | |||
| 745 | efi.systab->hdr.revision >> 16, | 665 | efi.systab->hdr.revision >> 16, |
| 746 | efi.systab->hdr.revision & 0xffff, vendor); | 666 | efi.systab->hdr.revision & 0xffff, vendor); |
| 747 | 667 | ||
| 748 | if (efi_config_init(efi.systab->tables, efi.systab->nr_tables)) | 668 | if (efi_config_init(arch_tables)) |
| 749 | return; | 669 | return; |
| 750 | 670 | ||
| 751 | set_bit(EFI_CONFIG_TABLES, &x86_efi_facility); | 671 | set_bit(EFI_CONFIG_TABLES, &x86_efi_facility); |
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index 5145fa344ad5..e1010d450b65 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c | |||
| @@ -13,11 +13,27 @@ | |||
| 13 | * This file is released under the GPLv2. | 13 | * This file is released under the GPLv2. |
| 14 | */ | 14 | */ |
| 15 | 15 | ||
| 16 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
| 17 | |||
| 16 | #include <linux/kobject.h> | 18 | #include <linux/kobject.h> |
| 17 | #include <linux/module.h> | 19 | #include <linux/module.h> |
| 18 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 19 | #include <linux/device.h> | 21 | #include <linux/device.h> |
| 20 | #include <linux/efi.h> | 22 | #include <linux/efi.h> |
| 23 | #include <linux/io.h> | ||
| 24 | |||
| 25 | struct efi __read_mostly efi = { | ||
| 26 | .mps = EFI_INVALID_TABLE_ADDR, | ||
| 27 | .acpi = EFI_INVALID_TABLE_ADDR, | ||
| 28 | .acpi20 = EFI_INVALID_TABLE_ADDR, | ||
| 29 | .smbios = EFI_INVALID_TABLE_ADDR, | ||
| 30 | .sal_systab = EFI_INVALID_TABLE_ADDR, | ||
| 31 | .boot_info = EFI_INVALID_TABLE_ADDR, | ||
| 32 | .hcdp = EFI_INVALID_TABLE_ADDR, | ||
| 33 | .uga = EFI_INVALID_TABLE_ADDR, | ||
| 34 | .uv_systab = EFI_INVALID_TABLE_ADDR, | ||
| 35 | }; | ||
| 36 | EXPORT_SYMBOL(efi); | ||
| 21 | 37 | ||
| 22 | static struct kobject *efi_kobj; | 38 | static struct kobject *efi_kobj; |
| 23 | static struct kobject *efivars_kobj; | 39 | static struct kobject *efivars_kobj; |
| @@ -132,3 +148,95 @@ err_put: | |||
| 132 | } | 148 | } |
| 133 | 149 | ||
| 134 | subsys_initcall(efisubsys_init); | 150 | subsys_initcall(efisubsys_init); |
| 151 | |||
| 152 | |||
| 153 | static __initdata efi_config_table_type_t common_tables[] = { | ||
| 154 | {ACPI_20_TABLE_GUID, "ACPI 2.0", &efi.acpi20}, | ||
| 155 | {ACPI_TABLE_GUID, "ACPI", &efi.acpi}, | ||
| 156 | {HCDP_TABLE_GUID, "HCDP", &efi.hcdp}, | ||
| 157 | {MPS_TABLE_GUID, "MPS", &efi.mps}, | ||
| 158 | {SAL_SYSTEM_TABLE_GUID, "SALsystab", &efi.sal_systab}, | ||
| 159 | {SMBIOS_TABLE_GUID, "SMBIOS", &efi.smbios}, | ||
| 160 | {UGA_IO_PROTOCOL_GUID, "UGA", &efi.uga}, | ||
| 161 | {NULL_GUID, NULL, 0}, | ||
| 162 | }; | ||
| 163 | |||
| 164 | static __init int match_config_table(efi_guid_t *guid, | ||
| 165 | unsigned long table, | ||
| 166 | efi_config_table_type_t *table_types) | ||
| 167 | { | ||
| 168 | u8 str[EFI_VARIABLE_GUID_LEN + 1]; | ||
| 169 | int i; | ||
| 170 | |||
| 171 | if (table_types) { | ||
| 172 | efi_guid_unparse(guid, str); | ||
| 173 | |||
| 174 | for (i = 0; efi_guidcmp(table_types[i].guid, NULL_GUID); i++) { | ||
| 175 | efi_guid_unparse(&table_types[i].guid, str); | ||
| 176 | |||
| 177 | if (!efi_guidcmp(*guid, table_types[i].guid)) { | ||
| 178 | *(table_types[i].ptr) = table; | ||
| 179 | pr_cont(" %s=0x%lx ", | ||
| 180 | table_types[i].name, table); | ||
| 181 | return 1; | ||
| 182 | } | ||
| 183 | } | ||
| 184 | } | ||
| 185 | |||
| 186 | return 0; | ||
| 187 | } | ||
| 188 | |||
| 189 | int __init efi_config_init(efi_config_table_type_t *arch_tables) | ||
| 190 | { | ||
| 191 | void *config_tables, *tablep; | ||
| 192 | int i, sz; | ||
| 193 | |||
| 194 | if (efi_enabled(EFI_64BIT)) | ||
| 195 | sz = sizeof(efi_config_table_64_t); | ||
| 196 | else | ||
| 197 | sz = sizeof(efi_config_table_32_t); | ||
| 198 | |||
| 199 | /* | ||
| 200 | * Let's see what config tables the firmware passed to us. | ||
| 201 | */ | ||
| 202 | config_tables = early_memremap(efi.systab->tables, | ||
| 203 | efi.systab->nr_tables * sz); | ||
| 204 | if (config_tables == NULL) { | ||
| 205 | pr_err("Could not map Configuration table!\n"); | ||
| 206 | return -ENOMEM; | ||
| 207 | } | ||
| 208 | |||
| 209 | tablep = config_tables; | ||
| 210 | pr_info(""); | ||
| 211 | for (i = 0; i < efi.systab->nr_tables; i++) { | ||
| 212 | efi_guid_t guid; | ||
| 213 | unsigned long table; | ||
| 214 | |||
| 215 | if (efi_enabled(EFI_64BIT)) { | ||
| 216 | u64 table64; | ||
| 217 | guid = ((efi_config_table_64_t *)tablep)->guid; | ||
| 218 | table64 = ((efi_config_table_64_t *)tablep)->table; | ||
| 219 | table = table64; | ||
| 220 | #ifndef CONFIG_64BIT | ||
| 221 | if (table64 >> 32) { | ||
| 222 | pr_cont("\n"); | ||
| 223 | pr_err("Table located above 4GB, disabling EFI.\n"); | ||
| 224 | early_iounmap(config_tables, | ||
| 225 | efi.systab->nr_tables * sz); | ||
| 226 | return -EINVAL; | ||
| 227 | } | ||
| 228 | #endif | ||
| 229 | } else { | ||
| 230 | guid = ((efi_config_table_32_t *)tablep)->guid; | ||
| 231 | table = ((efi_config_table_32_t *)tablep)->table; | ||
| 232 | } | ||
| 233 | |||
| 234 | if (!match_config_table(&guid, table, common_tables)) | ||
| 235 | match_config_table(&guid, table, arch_tables); | ||
| 236 | |||
| 237 | tablep += sz; | ||
| 238 | } | ||
| 239 | pr_cont("\n"); | ||
| 240 | early_iounmap(config_tables, efi.systab->nr_tables * sz); | ||
| 241 | return 0; | ||
| 242 | } | ||
diff --git a/include/linux/efi.h b/include/linux/efi.h index 5f8f176154f7..09d9e4212799 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h | |||
| @@ -404,6 +404,12 @@ typedef struct { | |||
| 404 | unsigned long table; | 404 | unsigned long table; |
| 405 | } efi_config_table_t; | 405 | } efi_config_table_t; |
| 406 | 406 | ||
| 407 | typedef struct { | ||
| 408 | efi_guid_t guid; | ||
| 409 | const char *name; | ||
| 410 | unsigned long *ptr; | ||
| 411 | } efi_config_table_type_t; | ||
| 412 | |||
| 407 | #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL) | 413 | #define EFI_SYSTEM_TABLE_SIGNATURE ((u64)0x5453595320494249ULL) |
| 408 | 414 | ||
| 409 | #define EFI_2_30_SYSTEM_TABLE_REVISION ((2 << 16) | (30)) | 415 | #define EFI_2_30_SYSTEM_TABLE_REVISION ((2 << 16) | (30)) |
| @@ -587,6 +593,7 @@ static inline efi_status_t efi_query_variable_store(u32 attributes, unsigned lon | |||
| 587 | } | 593 | } |
| 588 | #endif | 594 | #endif |
| 589 | extern void __iomem *efi_lookup_mapped_addr(u64 phys_addr); | 595 | extern void __iomem *efi_lookup_mapped_addr(u64 phys_addr); |
| 596 | extern int efi_config_init(efi_config_table_type_t *arch_tables); | ||
| 590 | extern u64 efi_get_iobase (void); | 597 | extern u64 efi_get_iobase (void); |
| 591 | extern u32 efi_mem_type (unsigned long phys_addr); | 598 | extern u32 efi_mem_type (unsigned long phys_addr); |
| 592 | extern u64 efi_mem_attributes (unsigned long phys_addr); | 599 | extern u64 efi_mem_attributes (unsigned long phys_addr); |
