efi: Add efi= parameter parsing to the EFI boot stub
[cascardo/linux.git] / arch / x86 / platform / efi / efi.c
index 87fc96b..a1f745b 100644 (file)
 
 #define EFI_DEBUG
 
-#define EFI_MIN_RESERVE 5120
-
-#define EFI_DUMMY_GUID \
-       EFI_GUID(0x4424ac57, 0xbe4b, 0x47dd, 0x9e, 0x97, 0xed, 0x50, 0xf0, 0x9f, 0x92, 0xa9)
-
-static efi_char16_t efi_dummy_name[6] = { 'D', 'U', 'M', 'M', 'Y', 0 };
-
 struct efi_memory_map memmap;
 
 static struct efi efi_phys __initdata;
@@ -95,139 +88,6 @@ static int __init setup_add_efi_memmap(char *arg)
 }
 early_param("add_efi_memmap", setup_add_efi_memmap);
 
-static bool efi_no_storage_paranoia;
-
-static int __init setup_storage_paranoia(char *arg)
-{
-       efi_no_storage_paranoia = true;
-       return 0;
-}
-early_param("efi_no_storage_paranoia", setup_storage_paranoia);
-
-static efi_status_t virt_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc)
-{
-       unsigned long flags;
-       efi_status_t status;
-
-       spin_lock_irqsave(&rtc_lock, flags);
-       status = efi_call_virt(get_time, tm, tc);
-       spin_unlock_irqrestore(&rtc_lock, flags);
-       return status;
-}
-
-static efi_status_t virt_efi_set_time(efi_time_t *tm)
-{
-       unsigned long flags;
-       efi_status_t status;
-
-       spin_lock_irqsave(&rtc_lock, flags);
-       status = efi_call_virt(set_time, tm);
-       spin_unlock_irqrestore(&rtc_lock, flags);
-       return status;
-}
-
-static efi_status_t virt_efi_get_wakeup_time(efi_bool_t *enabled,
-                                            efi_bool_t *pending,
-                                            efi_time_t *tm)
-{
-       unsigned long flags;
-       efi_status_t status;
-
-       spin_lock_irqsave(&rtc_lock, flags);
-       status = efi_call_virt(get_wakeup_time, enabled, pending, tm);
-       spin_unlock_irqrestore(&rtc_lock, flags);
-       return status;
-}
-
-static efi_status_t virt_efi_set_wakeup_time(efi_bool_t enabled, efi_time_t *tm)
-{
-       unsigned long flags;
-       efi_status_t status;
-
-       spin_lock_irqsave(&rtc_lock, flags);
-       status = efi_call_virt(set_wakeup_time, enabled, tm);
-       spin_unlock_irqrestore(&rtc_lock, flags);
-       return status;
-}
-
-static efi_status_t virt_efi_get_variable(efi_char16_t *name,
-                                         efi_guid_t *vendor,
-                                         u32 *attr,
-                                         unsigned long *data_size,
-                                         void *data)
-{
-       return efi_call_virt(get_variable,
-                            name, vendor, attr,
-                            data_size, data);
-}
-
-static efi_status_t virt_efi_get_next_variable(unsigned long *name_size,
-                                              efi_char16_t *name,
-                                              efi_guid_t *vendor)
-{
-       return efi_call_virt(get_next_variable,
-                            name_size, name, vendor);
-}
-
-static efi_status_t virt_efi_set_variable(efi_char16_t *name,
-                                         efi_guid_t *vendor,
-                                         u32 attr,
-                                         unsigned long data_size,
-                                         void *data)
-{
-       return efi_call_virt(set_variable,
-                            name, vendor, attr,
-                            data_size, data);
-}
-
-static efi_status_t virt_efi_query_variable_info(u32 attr,
-                                                u64 *storage_space,
-                                                u64 *remaining_space,
-                                                u64 *max_variable_size)
-{
-       if (efi.runtime_version < EFI_2_00_SYSTEM_TABLE_REVISION)
-               return EFI_UNSUPPORTED;
-
-       return efi_call_virt(query_variable_info, attr, storage_space,
-                            remaining_space, max_variable_size);
-}
-
-static efi_status_t virt_efi_get_next_high_mono_count(u32 *count)
-{
-       return efi_call_virt(get_next_high_mono_count, count);
-}
-
-static void virt_efi_reset_system(int reset_type,
-                                 efi_status_t status,
-                                 unsigned long data_size,
-                                 efi_char16_t *data)
-{
-       __efi_call_virt(reset_system, reset_type, status,
-                       data_size, data);
-}
-
-static efi_status_t virt_efi_update_capsule(efi_capsule_header_t **capsules,
-                                           unsigned long count,
-                                           unsigned long sg_list)
-{
-       if (efi.runtime_version < EFI_2_00_SYSTEM_TABLE_REVISION)
-               return EFI_UNSUPPORTED;
-
-       return efi_call_virt(update_capsule, capsules, count, sg_list);
-}
-
-static efi_status_t virt_efi_query_capsule_caps(efi_capsule_header_t **capsules,
-                                               unsigned long count,
-                                               u64 *max_size,
-                                               int *reset_type)
-{
-       if (efi.runtime_version < EFI_2_00_SYSTEM_TABLE_REVISION)
-               return EFI_UNSUPPORTED;
-
-       return efi_call_virt(query_capsule_caps, capsules, count, max_size,
-                            reset_type);
-}
-
 static efi_status_t __init phys_efi_set_virtual_address_map(
        unsigned long memory_map_size,
        unsigned long descriptor_size,
@@ -244,42 +104,6 @@ static efi_status_t __init phys_efi_set_virtual_address_map(
        return status;
 }
 
-int efi_set_rtc_mmss(const struct timespec *now)
-{
-       unsigned long nowtime = now->tv_sec;
-       efi_status_t    status;
-       efi_time_t      eft;
-       efi_time_cap_t  cap;
-       struct rtc_time tm;
-
-       status = efi.get_time(&eft, &cap);
-       if (status != EFI_SUCCESS) {
-               pr_err("Oops: efitime: can't read time!\n");
-               return -1;
-       }
-
-       rtc_time_to_tm(nowtime, &tm);
-       if (!rtc_valid_tm(&tm)) {
-               eft.year = tm.tm_year + 1900;
-               eft.month = tm.tm_mon + 1;
-               eft.day = tm.tm_mday;
-               eft.minute = tm.tm_min;
-               eft.second = tm.tm_sec;
-               eft.nanosecond = 0;
-       } else {
-               pr_err("%s: Invalid EFI RTC value: write of %lx to EFI RTC failed\n",
-                      __func__, nowtime);
-               return -1;
-       }
-
-       status = efi.set_time(&eft);
-       if (status != EFI_SUCCESS) {
-               pr_err("Oops: efitime: can't write time!\n");
-               return -1;
-       }
-       return 0;
-}
-
 void efi_get_time(struct timespec *now)
 {
        efi_status_t status;
@@ -350,6 +174,9 @@ int __init efi_memblock_x86_reserve_range(void)
        struct efi_info *e = &boot_params.efi_info;
        unsigned long pmap;
 
+       if (efi_enabled(EFI_PARAVIRT))
+               return 0;
+
 #ifdef CONFIG_X86_32
        /* Can't handle data above 4GB at this time */
        if (e->efi_memmap_hi) {
@@ -392,69 +219,15 @@ static void __init print_efi_memmap(void)
 #endif  /*  EFI_DEBUG  */
 }
 
-void __init efi_reserve_boot_services(void)
-{
-       void *p;
-
-       for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
-               efi_memory_desc_t *md = p;
-               u64 start = md->phys_addr;
-               u64 size = md->num_pages << EFI_PAGE_SHIFT;
-
-               if (md->type != EFI_BOOT_SERVICES_CODE &&
-                   md->type != EFI_BOOT_SERVICES_DATA)
-                       continue;
-               /* Only reserve where possible:
-                * - Not within any already allocated areas
-                * - Not over any memory area (really needed, if above?)
-                * - Not within any part of the kernel
-                * - Not the bios reserved area
-               */
-               if ((start + size > __pa_symbol(_text)
-                               && start <= __pa_symbol(_end)) ||
-                       !e820_all_mapped(start, start+size, E820_RAM) ||
-                       memblock_is_region_reserved(start, size)) {
-                       /* Could not reserve, skip it */
-                       md->num_pages = 0;
-                       memblock_dbg("Could not reserve boot range [0x%010llx-0x%010llx]\n",
-                                    start, start+size-1);
-               } else
-                       memblock_reserve(start, size);
-       }
-}
-
 void __init efi_unmap_memmap(void)
 {
        clear_bit(EFI_MEMMAP, &efi.flags);
        if (memmap.map) {
-               early_iounmap(memmap.map, memmap.nr_map * memmap.desc_size);
+               early_memunmap(memmap.map, memmap.nr_map * memmap.desc_size);
                memmap.map = NULL;
        }
 }
 
-void __init efi_free_boot_services(void)
-{
-       void *p;
-
-       for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
-               efi_memory_desc_t *md = p;
-               unsigned long long start = md->phys_addr;
-               unsigned long long size = md->num_pages << EFI_PAGE_SHIFT;
-
-               if (md->type != EFI_BOOT_SERVICES_CODE &&
-                   md->type != EFI_BOOT_SERVICES_DATA)
-                       continue;
-
-               /* Could not reserve boot area */
-               if (!size)
-                       continue;
-
-               free_bootmem_late(start, size);
-       }
-
-       efi_unmap_memmap();
-}
-
 static int __init efi_systab_init(void *phys)
 {
        if (efi_enabled(EFI_64BIT)) {
@@ -467,12 +240,12 @@ static int __init efi_systab_init(void *phys)
                        if (!data)
                                return -ENOMEM;
                }
-               systab64 = early_ioremap((unsigned long)phys,
+               systab64 = early_memremap((unsigned long)phys,
                                         sizeof(*systab64));
                if (systab64 == NULL) {
                        pr_err("Couldn't map the system table!\n");
                        if (data)
-                               early_iounmap(data, sizeof(*data));
+                               early_memunmap(data, sizeof(*data));
                        return -ENOMEM;
                }
 
@@ -504,9 +277,9 @@ static int __init efi_systab_init(void *phys)
                                           systab64->tables;
                tmp |= data ? data->tables : systab64->tables;
 
-               early_iounmap(systab64, sizeof(*systab64));
+               early_memunmap(systab64, sizeof(*systab64));
                if (data)
-                       early_iounmap(data, sizeof(*data));
+                       early_memunmap(data, sizeof(*data));
 #ifdef CONFIG_X86_32
                if (tmp >> 32) {
                        pr_err("EFI data located above 4GB, disabling EFI.\n");
@@ -516,7 +289,7 @@ static int __init efi_systab_init(void *phys)
        } else {
                efi_system_table_32_t *systab32;
 
-               systab32 = early_ioremap((unsigned long)phys,
+               systab32 = early_memremap((unsigned long)phys,
                                         sizeof(*systab32));
                if (systab32 == NULL) {
                        pr_err("Couldn't map the system table!\n");
@@ -537,7 +310,7 @@ static int __init efi_systab_init(void *phys)
                efi_systab.nr_tables = systab32->nr_tables;
                efi_systab.tables = systab32->tables;
 
-               early_iounmap(systab32, sizeof(*systab32));
+               early_memunmap(systab32, sizeof(*systab32));
        }
 
        efi.systab = &efi_systab;
@@ -563,7 +336,7 @@ static int __init efi_runtime_init32(void)
 {
        efi_runtime_services_32_t *runtime;
 
-       runtime = early_ioremap((unsigned long)efi.systab->runtime,
+       runtime = early_memremap((unsigned long)efi.systab->runtime,
                        sizeof(efi_runtime_services_32_t));
        if (!runtime) {
                pr_err("Could not map the runtime service table!\n");
@@ -578,7 +351,7 @@ static int __init efi_runtime_init32(void)
        efi_phys.set_virtual_address_map =
                        (efi_set_virtual_address_map_t *)
                        (unsigned long)runtime->set_virtual_address_map;
-       early_iounmap(runtime, sizeof(efi_runtime_services_32_t));
+       early_memunmap(runtime, sizeof(efi_runtime_services_32_t));
 
        return 0;
 }
@@ -587,7 +360,7 @@ static int __init efi_runtime_init64(void)
 {
        efi_runtime_services_64_t *runtime;
 
-       runtime = early_ioremap((unsigned long)efi.systab->runtime,
+       runtime = early_memremap((unsigned long)efi.systab->runtime,
                        sizeof(efi_runtime_services_64_t));
        if (!runtime) {
                pr_err("Could not map the runtime service table!\n");
@@ -602,7 +375,7 @@ static int __init efi_runtime_init64(void)
        efi_phys.set_virtual_address_map =
                        (efi_set_virtual_address_map_t *)
                        (unsigned long)runtime->set_virtual_address_map;
-       early_iounmap(runtime, sizeof(efi_runtime_services_64_t));
+       early_memunmap(runtime, sizeof(efi_runtime_services_64_t));
 
        return 0;
 }
@@ -616,14 +389,24 @@ static int __init efi_runtime_init(void)
         * the runtime services table so that we can grab the physical
         * address of several of the EFI runtime functions, needed to
         * set the firmware into virtual mode.
+        *
+        * When EFI_PARAVIRT is in force then we could not map runtime
+        * service memory region because we do not have direct access to it.
+        * However, runtime services are available through proxy functions
+        * (e.g. in case of Xen dom0 EFI implementation they call special
+        * hypercall which executes relevant EFI functions) and that is why
+        * they are always enabled.
         */
-       if (efi_enabled(EFI_64BIT))
-               rv = efi_runtime_init64();
-       else
-               rv = efi_runtime_init32();
 
-       if (rv)
-               return rv;
+       if (!efi_enabled(EFI_PARAVIRT)) {
+               if (efi_enabled(EFI_64BIT))
+                       rv = efi_runtime_init64();
+               else
+                       rv = efi_runtime_init32();
+
+               if (rv)
+                       return rv;
+       }
 
        set_bit(EFI_RUNTIME_SERVICES, &efi.flags);
 
@@ -632,8 +415,11 @@ static int __init efi_runtime_init(void)
 
 static int __init efi_memmap_init(void)
 {
+       if (efi_enabled(EFI_PARAVIRT))
+               return 0;
+
        /* Map the EFI memory map */
-       memmap.map = early_ioremap((unsigned long)memmap.phys_map,
+       memmap.map = early_memremap((unsigned long)memmap.phys_map,
                                   memmap.nr_map * memmap.desc_size);
        if (memmap.map == NULL) {
                pr_err("Could not map the memory map!\n");
@@ -649,62 +435,6 @@ static int __init efi_memmap_init(void)
        return 0;
 }
 
-/*
- * A number of config table entries get remapped to virtual addresses
- * after entering EFI virtual mode. However, the kexec kernel requires
- * their physical addresses therefore we pass them via setup_data and
- * correct those entries to their respective physical addresses here.
- *
- * Currently only handles smbios which is necessary for some firmware
- * implementation.
- */
-static int __init efi_reuse_config(u64 tables, int nr_tables)
-{
-       int i, sz, ret = 0;
-       void *p, *tablep;
-       struct efi_setup_data *data;
-
-       if (!efi_setup)
-               return 0;
-
-       if (!efi_enabled(EFI_64BIT))
-               return 0;
-
-       data = early_memremap(efi_setup, sizeof(*data));
-       if (!data) {
-               ret = -ENOMEM;
-               goto out;
-       }
-
-       if (!data->smbios)
-               goto out_memremap;
-
-       sz = sizeof(efi_config_table_64_t);
-
-       p = tablep = early_memremap(tables, nr_tables * sz);
-       if (!p) {
-               pr_err("Could not map Configuration table!\n");
-               ret = -ENOMEM;
-               goto out_memremap;
-       }
-
-       for (i = 0; i < efi.systab->nr_tables; i++) {
-               efi_guid_t guid;
-
-               guid = ((efi_config_table_64_t *)p)->guid;
-
-               if (!efi_guidcmp(guid, SMBIOS_TABLE_GUID))
-                       ((efi_config_table_64_t *)p)->table = data->smbios;
-               p += sz;
-       }
-       early_iounmap(tablep, nr_tables * sz);
-
-out_memremap:
-       early_iounmap(data, sizeof(*data));
-out:
-       return ret;
-}
-
 void __init efi_init(void)
 {
        efi_char16_t *c16;
@@ -728,8 +458,6 @@ void __init efi_init(void)
        if (efi_systab_init(efi_phys.systab))
                return;
 
-       set_bit(EFI_SYSTEM_TABLES, &efi.flags);
-
        efi.config_table = (unsigned long)efi.systab->tables;
        efi.fw_vendor    = (unsigned long)efi.systab->fw_vendor;
        efi.runtime      = (unsigned long)efi.systab->runtime;
@@ -737,14 +465,14 @@ void __init efi_init(void)
        /*
         * Show what we know for posterity
         */
-       c16 = tmp = early_ioremap(efi.systab->fw_vendor, 2);
+       c16 = tmp = early_memremap(efi.systab->fw_vendor, 2);
        if (c16) {
                for (i = 0; i < sizeof(vendor) - 1 && *c16; ++i)
                        vendor[i] = *c16++;
                vendor[i] = '\0';
        } else
                pr_err("Could not map the firmware vendor!\n");
-       early_iounmap(tmp, 2);
+       early_memunmap(tmp, 2);
 
        pr_info("EFI v%u.%.02u by %s\n",
                efi.systab->hdr.revision >> 16,
@@ -770,8 +498,6 @@ void __init efi_init(void)
        if (efi_memmap_init())
                return;
 
-       set_bit(EFI_MEMMAP, &efi.flags);
-
        print_efi_memmap();
 }
 
@@ -847,22 +573,6 @@ void __init old_map_region(efi_memory_desc_t *md)
                       (unsigned long long)md->phys_addr);
 }
 
-static void native_runtime_setup(void)
-{
-       efi.get_time = virt_efi_get_time;
-       efi.set_time = virt_efi_set_time;
-       efi.get_wakeup_time = virt_efi_get_wakeup_time;
-       efi.set_wakeup_time = virt_efi_set_wakeup_time;
-       efi.get_variable = virt_efi_get_variable;
-       efi.get_next_variable = virt_efi_get_next_variable;
-       efi.set_variable = virt_efi_set_variable;
-       efi.get_next_high_mono_count = virt_efi_get_next_high_mono_count;
-       efi.reset_system = virt_efi_reset_system;
-       efi.query_variable_info = virt_efi_query_variable_info;
-       efi.update_capsule = virt_efi_update_capsule;
-       efi.query_capsule_caps = virt_efi_query_capsule_caps;
-}
-
 /* Merge contiguous regions of the same type and attribute */
 static void __init efi_merge_regions(void)
 {
@@ -1049,7 +759,7 @@ static void __init kexec_enter_virtual_mode(void)
         */
        efi.runtime_version = efi_systab.hdr.revision;
 
-       native_runtime_setup();
+       efi_native_runtime_setup();
 
        efi.set_virtual_address_map = NULL;
 
@@ -1057,11 +767,7 @@ static void __init kexec_enter_virtual_mode(void)
                runtime_code_page_mkexec();
 
        /* clean DUMMY object */
-       efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID,
-                        EFI_VARIABLE_NON_VOLATILE |
-                        EFI_VARIABLE_BOOTSERVICE_ACCESS |
-                        EFI_VARIABLE_RUNTIME_ACCESS,
-                        0, NULL);
+       efi_delete_dummy_variable();
 #endif
 }
 
@@ -1142,7 +848,7 @@ static void __init __efi_enter_virtual_mode(void)
        efi.runtime_version = efi_systab.hdr.revision;
 
        if (efi_is_native())
-               native_runtime_setup();
+               efi_native_runtime_setup();
        else
                efi_thunk_runtime_setup();
 
@@ -1179,15 +885,14 @@ static void __init __efi_enter_virtual_mode(void)
        free_pages((unsigned long)new_memmap, pg_shift);
 
        /* clean DUMMY object */
-       efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID,
-                        EFI_VARIABLE_NON_VOLATILE |
-                        EFI_VARIABLE_BOOTSERVICE_ACCESS |
-                        EFI_VARIABLE_RUNTIME_ACCESS,
-                        0, NULL);
+       efi_delete_dummy_variable();
 }
 
 void __init efi_enter_virtual_mode(void)
 {
+       if (efi_enabled(EFI_PARAVIRT))
+               return;
+
        if (efi_setup)
                kexec_enter_virtual_mode();
        else
@@ -1220,6 +925,9 @@ u64 efi_mem_attributes(unsigned long phys_addr)
        efi_memory_desc_t *md;
        void *p;
 
+       if (!efi_enabled(EFI_MEMMAP))
+               return 0;
+
        for (p = memmap.map; p < memmap.map_end; p += memmap.desc_size) {
                md = p;
                if ((md->phys_addr <= phys_addr) &&
@@ -1230,113 +938,29 @@ u64 efi_mem_attributes(unsigned long phys_addr)
        return 0;
 }
 
-/*
- * Some firmware implementations refuse to boot if there's insufficient space
- * in the variable store. Ensure that we never use more than a safe limit.
- *
- * Return EFI_SUCCESS if it is safe to write 'size' bytes to the variable
- * store.
- */
-efi_status_t efi_query_variable_store(u32 attributes, unsigned long size)
+static int __init parse_efi_cmdline(char *str)
 {
-       efi_status_t status;
-       u64 storage_size, remaining_size, max_size;
-
-       if (!(attributes & EFI_VARIABLE_NON_VOLATILE))
-               return 0;
-
-       status = efi.query_variable_info(attributes, &storage_size,
-                                        &remaining_size, &max_size);
-       if (status != EFI_SUCCESS)
-               return status;
-
-       /*
-        * We account for that by refusing the write if permitting it would
-        * reduce the available space to under 5KB. This figure was provided by
-        * Samsung, so should be safe.
-        */
-       if ((remaining_size - size < EFI_MIN_RESERVE) &&
-               !efi_no_storage_paranoia) {
-
-               /*
-                * Triggering garbage collection may require that the firmware
-                * generate a real EFI_OUT_OF_RESOURCES error. We can force
-                * that by attempting to use more space than is available.
-                */
-               unsigned long dummy_size = remaining_size + 1024;
-               void *dummy = kzalloc(dummy_size, GFP_ATOMIC);
-
-               if (!dummy)
-                       return EFI_OUT_OF_RESOURCES;
-
-               status = efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID,
-                                         EFI_VARIABLE_NON_VOLATILE |
-                                         EFI_VARIABLE_BOOTSERVICE_ACCESS |
-                                         EFI_VARIABLE_RUNTIME_ACCESS,
-                                         dummy_size, dummy);
+       if (*str == '=')
+               str++;
 
-               if (status == EFI_SUCCESS) {
-                       /*
-                        * This should have failed, so if it didn't make sure
-                        * that we delete it...
-                        */
-                       efi.set_variable(efi_dummy_name, &EFI_DUMMY_GUID,
-                                        EFI_VARIABLE_NON_VOLATILE |
-                                        EFI_VARIABLE_BOOTSERVICE_ACCESS |
-                                        EFI_VARIABLE_RUNTIME_ACCESS,
-                                        0, dummy);
+       while (*str) {
+               if (!strncmp(str, "old_map", 7)) {
+                       set_bit(EFI_OLD_MEMMAP, &efi.flags);
+                       str += strlen("old_map");
                }
 
-               kfree(dummy);
-
                /*
-                * The runtime code may now have triggered a garbage collection
-                * run, so check the variable info again
+                * Skip any options we don't understand. Presumably
+                * they apply to the EFI boot stub.
                 */
-               status = efi.query_variable_info(attributes, &storage_size,
-                                                &remaining_size, &max_size);
-
-               if (status != EFI_SUCCESS)
-                       return status;
+               while (*str && *str != ',')
+                       str++;
 
-               /*
-                * There still isn't enough room, so return an error
-                */
-               if (remaining_size - size < EFI_MIN_RESERVE)
-                       return EFI_OUT_OF_RESOURCES;
+               /* If we hit a delimiter, skip it */
+               if (*str == ',')
+                       str++;
        }
 
-       return EFI_SUCCESS;
-}
-EXPORT_SYMBOL_GPL(efi_query_variable_store);
-
-static int __init parse_efi_cmdline(char *str)
-{
-       if (*str == '=')
-               str++;
-
-       if (!strncmp(str, "old_map", 7))
-               set_bit(EFI_OLD_MEMMAP, &efi.flags);
-
        return 0;
 }
 early_param("efi", parse_efi_cmdline);
-
-void __init efi_apply_memmap_quirks(void)
-{
-       /*
-        * Once setup is done earlier, unmap the EFI memory map on mismatched
-        * firmware/kernel architectures since there is no support for runtime
-        * services.
-        */
-       if (!efi_runtime_supported()) {
-               pr_info("efi: Setup done, disabling due to 32/64-bit mismatch\n");
-               efi_unmap_memmap();
-       }
-
-       /*
-        * UV doesn't support the new EFI pagetable mapping yet.
-        */
-       if (is_uv_system())
-               set_bit(EFI_OLD_MEMMAP, &efi.flags);
-}