Merge branch 'efi-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull EFI updates from Ingo Molnar: "The biggest change in this cycle were SGI/UV related changes that clean up and fix UV boot quirks and problems. There's also various smaller cleanups and refinements" * 'efi-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: efi: Reorganize the GUID table to make it easier to read x86/efi: Remove the unused efi_get_time() function x86/efi: Update efi_thunk() to use the the arch_efi_call_virt*() macros x86/uv: Update uv_bios_call() to use efi_call_virt_pointer() efi: Convert efi_call_virt() to efi_call_virt_pointer() x86/efi: Remove unused variable 'efi' efi: Document #define FOO_PROTOCOL_GUID layout efibc: Report more information in the error messages
This commit is contained in:
commit
a2303849a6
|
@ -28,10 +28,10 @@ int efi_set_mapping_permissions(struct mm_struct *mm, efi_memory_desc_t *md);
|
|||
#define arch_efi_call_virt_setup() efi_virtmap_load()
|
||||
#define arch_efi_call_virt_teardown() efi_virtmap_unload()
|
||||
|
||||
#define arch_efi_call_virt(f, args...) \
|
||||
#define arch_efi_call_virt(p, f, args...) \
|
||||
({ \
|
||||
efi_##f##_t *__f; \
|
||||
__f = efi.systab->runtime->f; \
|
||||
__f = p->f; \
|
||||
__f(args); \
|
||||
})
|
||||
|
||||
|
|
|
@ -23,10 +23,10 @@ int efi_create_mapping(struct mm_struct *mm, efi_memory_desc_t *md);
|
|||
efi_virtmap_load(); \
|
||||
})
|
||||
|
||||
#define arch_efi_call_virt(f, args...) \
|
||||
#define arch_efi_call_virt(p, f, args...) \
|
||||
({ \
|
||||
efi_##f##_t *__f; \
|
||||
__f = efi.systab->runtime->f; \
|
||||
__f = p->f; \
|
||||
__f(args); \
|
||||
})
|
||||
|
||||
|
|
|
@ -757,7 +757,6 @@ struct boot_params *make_boot_params(struct efi_config *c)
|
|||
struct boot_params *boot_params;
|
||||
struct apm_bios_info *bi;
|
||||
struct setup_header *hdr;
|
||||
struct efi_info *efi;
|
||||
efi_loaded_image_t *image;
|
||||
void *options, *handle;
|
||||
efi_guid_t proto = LOADED_IMAGE_PROTOCOL_GUID;
|
||||
|
@ -800,7 +799,6 @@ struct boot_params *make_boot_params(struct efi_config *c)
|
|||
memset(boot_params, 0x0, 0x4000);
|
||||
|
||||
hdr = &boot_params->hdr;
|
||||
efi = &boot_params->efi_info;
|
||||
bi = &boot_params->apm_bios_info;
|
||||
|
||||
/* Copy the second sector to boot_params */
|
||||
|
|
|
@ -41,10 +41,9 @@ extern unsigned long asmlinkage efi_call_phys(void *, ...);
|
|||
/*
|
||||
* Wrap all the virtual calls in a way that forces the parameters on the stack.
|
||||
*/
|
||||
#define arch_efi_call_virt(f, args...) \
|
||||
#define arch_efi_call_virt(p, f, args...) \
|
||||
({ \
|
||||
((efi_##f##_t __attribute__((regparm(0)))*) \
|
||||
efi.systab->runtime->f)(args); \
|
||||
((efi_##f##_t __attribute__((regparm(0)))*) p->f)(args); \
|
||||
})
|
||||
|
||||
#define efi_ioremap(addr, size, type, attr) ioremap_cache(addr, size)
|
||||
|
@ -81,8 +80,8 @@ struct efi_scratch {
|
|||
} \
|
||||
})
|
||||
|
||||
#define arch_efi_call_virt(f, args...) \
|
||||
efi_call((void *)efi.systab->runtime->f, args) \
|
||||
#define arch_efi_call_virt(p, f, args...) \
|
||||
efi_call((void *)p->f, args) \
|
||||
|
||||
#define arch_efi_call_virt_teardown() \
|
||||
({ \
|
||||
|
|
|
@ -98,21 +98,6 @@ static efi_status_t __init phys_efi_set_virtual_address_map(
|
|||
return status;
|
||||
}
|
||||
|
||||
void efi_get_time(struct timespec *now)
|
||||
{
|
||||
efi_status_t status;
|
||||
efi_time_t eft;
|
||||
efi_time_cap_t cap;
|
||||
|
||||
status = efi.get_time(&eft, &cap);
|
||||
if (status != EFI_SUCCESS)
|
||||
pr_err("Oops: efitime: can't read time!\n");
|
||||
|
||||
now->tv_sec = mktime(eft.year, eft.month, eft.day, eft.hour,
|
||||
eft.minute, eft.second);
|
||||
now->tv_nsec = 0;
|
||||
}
|
||||
|
||||
void __init efi_find_mirror(void)
|
||||
{
|
||||
efi_memory_desc_t *md;
|
||||
|
|
|
@ -466,22 +466,17 @@ extern efi_status_t efi64_thunk(u32, ...);
|
|||
#define efi_thunk(f, ...) \
|
||||
({ \
|
||||
efi_status_t __s; \
|
||||
unsigned long flags; \
|
||||
u32 func; \
|
||||
unsigned long __flags; \
|
||||
u32 __func; \
|
||||
\
|
||||
efi_sync_low_kernel_mappings(); \
|
||||
local_irq_save(flags); \
|
||||
local_irq_save(__flags); \
|
||||
arch_efi_call_virt_setup(); \
|
||||
\
|
||||
efi_scratch.prev_cr3 = read_cr3(); \
|
||||
write_cr3((unsigned long)efi_scratch.efi_pgt); \
|
||||
__flush_tlb_all(); \
|
||||
__func = runtime_service32(f); \
|
||||
__s = efi64_thunk(__func, __VA_ARGS__); \
|
||||
\
|
||||
func = runtime_service32(f); \
|
||||
__s = efi64_thunk(func, __VA_ARGS__); \
|
||||
\
|
||||
write_cr3(efi_scratch.prev_cr3); \
|
||||
__flush_tlb_all(); \
|
||||
local_irq_restore(flags); \
|
||||
arch_efi_call_virt_teardown(); \
|
||||
local_irq_restore(__flags); \
|
||||
\
|
||||
__s; \
|
||||
})
|
||||
|
|
|
@ -40,8 +40,7 @@ s64 uv_bios_call(enum uv_bios_cmd which, u64 a1, u64 a2, u64 a3, u64 a4, u64 a5)
|
|||
*/
|
||||
return BIOS_STATUS_UNIMPLEMENTED;
|
||||
|
||||
ret = efi_call((void *)__va(tab->function), (u64)which,
|
||||
a1, a2, a3, a4, a5);
|
||||
ret = efi_call_virt_pointer(tab, function, (u64)which, a1, a2, a3, a4, a5);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(uv_bios_call);
|
||||
|
|
|
@ -37,13 +37,13 @@ static int efibc_set_variable(const char *name, const char *value)
|
|||
size_t size = (strlen(value) + 1) * sizeof(efi_char16_t);
|
||||
|
||||
if (size > sizeof(entry->var.Data)) {
|
||||
pr_err("value is too large");
|
||||
pr_err("value is too large (%zu bytes) for '%s' EFI variable\n", size, name);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
entry = kmalloc(sizeof(*entry), GFP_KERNEL);
|
||||
if (!entry) {
|
||||
pr_err("failed to allocate efivar entry");
|
||||
pr_err("failed to allocate efivar entry for '%s' EFI variable\n", name);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,7 +22,16 @@
|
|||
#include <linux/stringify.h>
|
||||
#include <asm/efi.h>
|
||||
|
||||
static void efi_call_virt_check_flags(unsigned long flags, const char *call)
|
||||
/*
|
||||
* Wrap around the new efi_call_virt_generic() macros so that the
|
||||
* code doesn't get too cluttered:
|
||||
*/
|
||||
#define efi_call_virt(f, args...) \
|
||||
efi_call_virt_pointer(efi.systab->runtime, f, args)
|
||||
#define __efi_call_virt(f, args...) \
|
||||
__efi_call_virt_pointer(efi.systab->runtime, f, args)
|
||||
|
||||
void efi_call_virt_check_flags(unsigned long flags, const char *call)
|
||||
{
|
||||
unsigned long cur_flags, mismatch;
|
||||
|
||||
|
@ -38,48 +47,6 @@ static void efi_call_virt_check_flags(unsigned long flags, const char *call)
|
|||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
/*
|
||||
* Arch code can implement the following three template macros, avoiding
|
||||
* reptition for the void/non-void return cases of {__,}efi_call_virt:
|
||||
*
|
||||
* * arch_efi_call_virt_setup
|
||||
*
|
||||
* Sets up the environment for the call (e.g. switching page tables,
|
||||
* allowing kernel-mode use of floating point, if required).
|
||||
*
|
||||
* * arch_efi_call_virt
|
||||
*
|
||||
* Performs the call. The last expression in the macro must be the call
|
||||
* itself, allowing the logic to be shared by the void and non-void
|
||||
* cases.
|
||||
*
|
||||
* * arch_efi_call_virt_teardown
|
||||
*
|
||||
* Restores the usual kernel environment once the call has returned.
|
||||
*/
|
||||
|
||||
#define efi_call_virt(f, args...) \
|
||||
({ \
|
||||
efi_status_t __s; \
|
||||
unsigned long flags; \
|
||||
arch_efi_call_virt_setup(); \
|
||||
local_save_flags(flags); \
|
||||
__s = arch_efi_call_virt(f, args); \
|
||||
efi_call_virt_check_flags(flags, __stringify(f)); \
|
||||
arch_efi_call_virt_teardown(); \
|
||||
__s; \
|
||||
})
|
||||
|
||||
#define __efi_call_virt(f, args...) \
|
||||
({ \
|
||||
unsigned long flags; \
|
||||
arch_efi_call_virt_setup(); \
|
||||
local_save_flags(flags); \
|
||||
arch_efi_call_virt(f, args); \
|
||||
efi_call_virt_check_flags(flags, __stringify(f)); \
|
||||
arch_efi_call_virt_teardown(); \
|
||||
})
|
||||
|
||||
/*
|
||||
* According to section 7.1 of the UEFI spec, Runtime Services are not fully
|
||||
* reentrant, and there are particular combinations of calls that need to be
|
||||
|
|
|
@ -536,116 +536,58 @@ typedef efi_status_t efi_query_variable_store_t(u32 attributes,
|
|||
void efi_native_runtime_setup(void);
|
||||
|
||||
/*
|
||||
* EFI Configuration Table and GUID definitions
|
||||
* EFI Configuration Table and GUID definitions
|
||||
*
|
||||
* These are all defined in a single line to make them easier to
|
||||
* grep for and to see them at a glance - while still having a
|
||||
* similar structure to the definitions in the spec.
|
||||
*
|
||||
* Here's how they are structured:
|
||||
*
|
||||
* GUID: 12345678-1234-1234-1234-123456789012
|
||||
* Spec:
|
||||
* #define EFI_SOME_PROTOCOL_GUID \
|
||||
* {0x12345678,0x1234,0x1234,\
|
||||
* {0x12,0x34,0x12,0x34,0x56,0x78,0x90,0x12}}
|
||||
* Here:
|
||||
* #define SOME_PROTOCOL_GUID EFI_GUID(0x12345678, 0x1234, 0x1234, 0x12, 0x34, 0x12, 0x34, 0x56, 0x78, 0x90, 0x12)
|
||||
* ^ tabs ^extra space
|
||||
*
|
||||
* Note that the 'extra space' separates the values at the same place
|
||||
* where the UEFI SPEC breaks the line.
|
||||
*/
|
||||
#define NULL_GUID \
|
||||
EFI_GUID(0x00000000, 0x0000, 0x0000, \
|
||||
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
|
||||
|
||||
#define MPS_TABLE_GUID \
|
||||
EFI_GUID(0xeb9d2d2f, 0x2d88, 0x11d3, \
|
||||
0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
|
||||
#define ACPI_TABLE_GUID \
|
||||
EFI_GUID(0xeb9d2d30, 0x2d88, 0x11d3, \
|
||||
0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
|
||||
#define ACPI_20_TABLE_GUID \
|
||||
EFI_GUID(0x8868e871, 0xe4f1, 0x11d3, \
|
||||
0xbc, 0x22, 0x00, 0x80, 0xc7, 0x3c, 0x88, 0x81)
|
||||
|
||||
#define SMBIOS_TABLE_GUID \
|
||||
EFI_GUID(0xeb9d2d31, 0x2d88, 0x11d3, \
|
||||
0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
|
||||
#define SMBIOS3_TABLE_GUID \
|
||||
EFI_GUID(0xf2fd1544, 0x9794, 0x4a2c, \
|
||||
0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94)
|
||||
|
||||
#define SAL_SYSTEM_TABLE_GUID \
|
||||
EFI_GUID(0xeb9d2d32, 0x2d88, 0x11d3, \
|
||||
0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
|
||||
#define HCDP_TABLE_GUID \
|
||||
EFI_GUID(0xf951938d, 0x620b, 0x42ef, \
|
||||
0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98)
|
||||
|
||||
#define UGA_IO_PROTOCOL_GUID \
|
||||
EFI_GUID(0x61a4d49e, 0x6f68, 0x4f1b, \
|
||||
0xb9, 0x22, 0xa8, 0x6e, 0xed, 0x0b, 0x07, 0xa2)
|
||||
|
||||
#define EFI_GLOBAL_VARIABLE_GUID \
|
||||
EFI_GUID(0x8be4df61, 0x93ca, 0x11d2, \
|
||||
0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c)
|
||||
|
||||
#define UV_SYSTEM_TABLE_GUID \
|
||||
EFI_GUID(0x3b13a7d4, 0x633e, 0x11dd, \
|
||||
0x93, 0xec, 0xda, 0x25, 0x56, 0xd8, 0x95, 0x93)
|
||||
|
||||
#define LINUX_EFI_CRASH_GUID \
|
||||
EFI_GUID(0xcfc8fc79, 0xbe2e, 0x4ddc, \
|
||||
0x97, 0xf0, 0x9f, 0x98, 0xbf, 0xe2, 0x98, 0xa0)
|
||||
|
||||
#define LOADED_IMAGE_PROTOCOL_GUID \
|
||||
EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, \
|
||||
0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
||||
|
||||
#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
|
||||
EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, \
|
||||
0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a)
|
||||
|
||||
#define EFI_UGA_PROTOCOL_GUID \
|
||||
EFI_GUID(0x982c298b, 0xf4fa, 0x41cb, \
|
||||
0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39)
|
||||
|
||||
#define EFI_PCI_IO_PROTOCOL_GUID \
|
||||
EFI_GUID(0x4cf5b200, 0x68b8, 0x4ca5, \
|
||||
0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a)
|
||||
|
||||
#define EFI_FILE_INFO_ID \
|
||||
EFI_GUID(0x9576e92, 0x6d3f, 0x11d2, \
|
||||
0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
||||
|
||||
#define EFI_SYSTEM_RESOURCE_TABLE_GUID \
|
||||
EFI_GUID(0xb122a263, 0x3661, 0x4f68, \
|
||||
0x99, 0x29, 0x78, 0xf8, 0xb0, 0xd6, 0x21, 0x80)
|
||||
|
||||
#define EFI_FILE_SYSTEM_GUID \
|
||||
EFI_GUID(0x964e5b22, 0x6459, 0x11d2, \
|
||||
0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
||||
|
||||
#define DEVICE_TREE_GUID \
|
||||
EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5, \
|
||||
0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0)
|
||||
|
||||
#define EFI_PROPERTIES_TABLE_GUID \
|
||||
EFI_GUID(0x880aaca3, 0x4adc, 0x4a04, \
|
||||
0x90, 0x79, 0xb7, 0x47, 0x34, 0x08, 0x25, 0xe5)
|
||||
|
||||
#define EFI_RNG_PROTOCOL_GUID \
|
||||
EFI_GUID(0x3152bca5, 0xeade, 0x433d, \
|
||||
0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44)
|
||||
|
||||
#define EFI_MEMORY_ATTRIBUTES_TABLE_GUID \
|
||||
EFI_GUID(0xdcfa911d, 0x26eb, 0x469f, \
|
||||
0xa2, 0x20, 0x38, 0xb7, 0xdc, 0x46, 0x12, 0x20)
|
||||
|
||||
#define EFI_CONSOLE_OUT_DEVICE_GUID \
|
||||
EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, \
|
||||
0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
#define NULL_GUID EFI_GUID(0x00000000, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00)
|
||||
#define MPS_TABLE_GUID EFI_GUID(0xeb9d2d2f, 0x2d88, 0x11d3, 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
#define ACPI_TABLE_GUID EFI_GUID(0xeb9d2d30, 0x2d88, 0x11d3, 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
#define ACPI_20_TABLE_GUID EFI_GUID(0x8868e871, 0xe4f1, 0x11d3, 0xbc, 0x22, 0x00, 0x80, 0xc7, 0x3c, 0x88, 0x81)
|
||||
#define SMBIOS_TABLE_GUID EFI_GUID(0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
#define SMBIOS3_TABLE_GUID EFI_GUID(0xf2fd1544, 0x9794, 0x4a2c, 0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94)
|
||||
#define SAL_SYSTEM_TABLE_GUID EFI_GUID(0xeb9d2d32, 0x2d88, 0x11d3, 0x9a, 0x16, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
#define HCDP_TABLE_GUID EFI_GUID(0xf951938d, 0x620b, 0x42ef, 0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98)
|
||||
#define UGA_IO_PROTOCOL_GUID EFI_GUID(0x61a4d49e, 0x6f68, 0x4f1b, 0xb9, 0x22, 0xa8, 0x6e, 0xed, 0x0b, 0x07, 0xa2)
|
||||
#define EFI_GLOBAL_VARIABLE_GUID EFI_GUID(0x8be4df61, 0x93ca, 0x11d2, 0xaa, 0x0d, 0x00, 0xe0, 0x98, 0x03, 0x2b, 0x8c)
|
||||
#define UV_SYSTEM_TABLE_GUID EFI_GUID(0x3b13a7d4, 0x633e, 0x11dd, 0x93, 0xec, 0xda, 0x25, 0x56, 0xd8, 0x95, 0x93)
|
||||
#define LINUX_EFI_CRASH_GUID EFI_GUID(0xcfc8fc79, 0xbe2e, 0x4ddc, 0x97, 0xf0, 0x9f, 0x98, 0xbf, 0xe2, 0x98, 0xa0)
|
||||
#define LOADED_IMAGE_PROTOCOL_GUID EFI_GUID(0x5b1b31a1, 0x9562, 0x11d2, 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
||||
#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID EFI_GUID(0x9042a9de, 0x23dc, 0x4a38, 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a)
|
||||
#define EFI_UGA_PROTOCOL_GUID EFI_GUID(0x982c298b, 0xf4fa, 0x41cb, 0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39)
|
||||
#define EFI_PCI_IO_PROTOCOL_GUID EFI_GUID(0x4cf5b200, 0x68b8, 0x4ca5, 0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a)
|
||||
#define EFI_FILE_INFO_ID EFI_GUID(0x09576e92, 0x6d3f, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
||||
#define EFI_SYSTEM_RESOURCE_TABLE_GUID EFI_GUID(0xb122a263, 0x3661, 0x4f68, 0x99, 0x29, 0x78, 0xf8, 0xb0, 0xd6, 0x21, 0x80)
|
||||
#define EFI_FILE_SYSTEM_GUID EFI_GUID(0x964e5b22, 0x6459, 0x11d2, 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b)
|
||||
#define DEVICE_TREE_GUID EFI_GUID(0xb1b621d5, 0xf19c, 0x41a5, 0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0)
|
||||
#define EFI_PROPERTIES_TABLE_GUID EFI_GUID(0x880aaca3, 0x4adc, 0x4a04, 0x90, 0x79, 0xb7, 0x47, 0x34, 0x08, 0x25, 0xe5)
|
||||
#define EFI_RNG_PROTOCOL_GUID EFI_GUID(0x3152bca5, 0xeade, 0x433d, 0x86, 0x2e, 0xc0, 0x1c, 0xdc, 0x29, 0x1f, 0x44)
|
||||
#define EFI_MEMORY_ATTRIBUTES_TABLE_GUID EFI_GUID(0xdcfa911d, 0x26eb, 0x469f, 0xa2, 0x20, 0x38, 0xb7, 0xdc, 0x46, 0x12, 0x20)
|
||||
#define EFI_CONSOLE_OUT_DEVICE_GUID EFI_GUID(0xd3b36f2c, 0xd551, 0x11d4, 0x9a, 0x46, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d)
|
||||
|
||||
/*
|
||||
* This GUID is used to pass to the kernel proper the struct screen_info
|
||||
* structure that was populated by the stub based on the GOP protocol instance
|
||||
* associated with ConOut
|
||||
*/
|
||||
#define LINUX_EFI_ARM_SCREEN_INFO_TABLE_GUID \
|
||||
EFI_GUID(0xe03fc20a, 0x85dc, 0x406e, \
|
||||
0xb9, 0xe, 0x4a, 0xb5, 0x02, 0x37, 0x1d, 0x95)
|
||||
|
||||
#define LINUX_EFI_LOADER_ENTRY_GUID \
|
||||
EFI_GUID(0x4a67b082, 0x0a4c, 0x41cf, \
|
||||
0xb6, 0xc7, 0x44, 0x0b, 0x29, 0xbb, 0x8c, 0x4f)
|
||||
#define LINUX_EFI_ARM_SCREEN_INFO_TABLE_GUID EFI_GUID(0xe03fc20a, 0x85dc, 0x406e, 0xb9, 0x0e, 0x4a, 0xb5, 0x02, 0x37, 0x1d, 0x95)
|
||||
#define LINUX_EFI_LOADER_ENTRY_GUID EFI_GUID(0x4a67b082, 0x0a4c, 0x41cf, 0xb6, 0xc7, 0x44, 0x0b, 0x29, 0xbb, 0x8c, 0x4f)
|
||||
|
||||
typedef struct {
|
||||
efi_guid_t guid;
|
||||
|
@ -975,7 +917,6 @@ extern u64 efi_mem_desc_end(efi_memory_desc_t *md);
|
|||
extern int efi_mem_desc_lookup(u64 phys_addr, efi_memory_desc_t *out_md);
|
||||
extern void efi_initialize_iomem_resources(struct resource *code_resource,
|
||||
struct resource *data_resource, struct resource *bss_resource);
|
||||
extern void efi_get_time(struct timespec *now);
|
||||
extern void efi_reserve_boot_services(void);
|
||||
extern int efi_get_fdt_params(struct efi_fdt_params *params);
|
||||
extern struct kobject *efi_kobj;
|
||||
|
@ -1465,4 +1406,55 @@ efi_status_t efi_setup_gop(efi_system_table_t *sys_table_arg,
|
|||
unsigned long size);
|
||||
|
||||
bool efi_runtime_disabled(void);
|
||||
extern void efi_call_virt_check_flags(unsigned long flags, const char *call);
|
||||
|
||||
/*
|
||||
* Arch code can implement the following three template macros, avoiding
|
||||
* reptition for the void/non-void return cases of {__,}efi_call_virt():
|
||||
*
|
||||
* * arch_efi_call_virt_setup()
|
||||
*
|
||||
* Sets up the environment for the call (e.g. switching page tables,
|
||||
* allowing kernel-mode use of floating point, if required).
|
||||
*
|
||||
* * arch_efi_call_virt()
|
||||
*
|
||||
* Performs the call. The last expression in the macro must be the call
|
||||
* itself, allowing the logic to be shared by the void and non-void
|
||||
* cases.
|
||||
*
|
||||
* * arch_efi_call_virt_teardown()
|
||||
*
|
||||
* Restores the usual kernel environment once the call has returned.
|
||||
*/
|
||||
|
||||
#define efi_call_virt_pointer(p, f, args...) \
|
||||
({ \
|
||||
efi_status_t __s; \
|
||||
unsigned long __flags; \
|
||||
\
|
||||
arch_efi_call_virt_setup(); \
|
||||
\
|
||||
local_save_flags(__flags); \
|
||||
__s = arch_efi_call_virt(p, f, args); \
|
||||
efi_call_virt_check_flags(__flags, __stringify(f)); \
|
||||
\
|
||||
arch_efi_call_virt_teardown(); \
|
||||
\
|
||||
__s; \
|
||||
})
|
||||
|
||||
#define __efi_call_virt_pointer(p, f, args...) \
|
||||
({ \
|
||||
unsigned long __flags; \
|
||||
\
|
||||
arch_efi_call_virt_setup(); \
|
||||
\
|
||||
local_save_flags(__flags); \
|
||||
arch_efi_call_virt(p, f, args); \
|
||||
efi_call_virt_check_flags(__flags, __stringify(f)); \
|
||||
\
|
||||
arch_efi_call_virt_teardown(); \
|
||||
})
|
||||
|
||||
#endif /* _LINUX_EFI_H */
|
||||
|
|
Loading…
Reference in New Issue