Skip to content

Commit

Permalink
efi: Move facility flags to struct efi
Browse files Browse the repository at this point in the history
As we grow support for more EFI architectures they're going to want the
ability to query which EFI features are available on the running system.
Instead of storing this information in an architecture-specific place,
stick it in the global 'struct efi', which is already the central
location for EFI state.

While we're at it, let's change the return value of efi_enabled() to be
bool and replace all references to 'facility' with 'feature', which is
the usual word used to describe the attributes of the running system.

Signed-off-by: Matt Fleming <matt.fleming@intel.com>
  • Loading branch information
Matt Fleming committed Mar 4, 2014
1 parent 6d0abec commit 3e90959
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 25 deletions.
1 change: 0 additions & 1 deletion arch/x86/include/asm/efi.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ extern void __iomem *efi_ioremap(unsigned long addr, unsigned long size,
#endif /* CONFIG_X86_32 */

extern int add_efi_memmap;
extern unsigned long x86_efi_facility;
extern struct efi_scratch efi_scratch;
extern void efi_set_executable(efi_memory_desc_t *md, bool executable);
extern int efi_memblock_x86_reserve_range(void);
Expand Down
6 changes: 3 additions & 3 deletions arch/x86/kernel/setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -926,11 +926,11 @@ void __init setup_arch(char **cmdline_p)
#ifdef CONFIG_EFI
if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature,
"EL32", 4)) {
set_bit(EFI_BOOT, &x86_efi_facility);
set_bit(EFI_BOOT, &efi.flags);
} else if (!strncmp((char *)&boot_params.efi_info.efi_loader_signature,
"EL64", 4)) {
set_bit(EFI_BOOT, &x86_efi_facility);
set_bit(EFI_64BIT, &x86_efi_facility);
set_bit(EFI_BOOT, &efi.flags);
set_bit(EFI_64BIT, &efi.flags);
}

if (efi_enabled(EFI_BOOT))
Expand Down
21 changes: 5 additions & 16 deletions arch/x86/platform/efi/efi.c
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,6 @@ struct efi_memory_map memmap;
static struct efi efi_phys __initdata;
static efi_system_table_t efi_systab __initdata;

unsigned long x86_efi_facility;

static __initdata efi_config_table_type_t arch_tables[] = {
#ifdef CONFIG_X86_UV
{UV_SYSTEM_TABLE_GUID, "UVsystab", &efi.uv_systab},
Expand All @@ -78,15 +76,6 @@ static __initdata efi_config_table_type_t arch_tables[] = {

u64 efi_setup; /* efi setup_data physical address */

/*
* Returns 1 if 'facility' is enabled, 0 otherwise.
*/
int efi_enabled(int facility)
{
return test_bit(facility, &x86_efi_facility) != 0;
}
EXPORT_SYMBOL(efi_enabled);

static bool __initdata disable_runtime = false;
static int __init setup_noefi(char *arg)
{
Expand Down Expand Up @@ -455,7 +444,7 @@ void __init efi_reserve_boot_services(void)

void __init efi_unmap_memmap(void)
{
clear_bit(EFI_MEMMAP, &x86_efi_facility);
clear_bit(EFI_MEMMAP, &efi.flags);
if (memmap.map) {
early_iounmap(memmap.map, memmap.nr_map * memmap.desc_size);
memmap.map = NULL;
Expand Down Expand Up @@ -722,7 +711,7 @@ void __init efi_init(void)
if (efi_systab_init(efi_phys.systab))
return;

set_bit(EFI_SYSTEM_TABLES, &x86_efi_facility);
set_bit(EFI_SYSTEM_TABLES, &efi.flags);

efi.config_table = (unsigned long)efi.systab->tables;
efi.fw_vendor = (unsigned long)efi.systab->fw_vendor;
Expand Down Expand Up @@ -750,7 +739,7 @@ void __init efi_init(void)
if (efi_config_init(arch_tables))
return;

set_bit(EFI_CONFIG_TABLES, &x86_efi_facility);
set_bit(EFI_CONFIG_TABLES, &efi.flags);

/*
* Note: We currently don't support runtime services on an EFI
Expand All @@ -762,12 +751,12 @@ void __init efi_init(void)
else {
if (disable_runtime || efi_runtime_init())
return;
set_bit(EFI_RUNTIME_SERVICES, &x86_efi_facility);
set_bit(EFI_RUNTIME_SERVICES, &efi.flags);
}
if (efi_memmap_init())
return;

set_bit(EFI_MEMMAP, &x86_efi_facility);
set_bit(EFI_MEMMAP, &efi.flags);

print_efi_memmap();
}
Expand Down
18 changes: 13 additions & 5 deletions include/linux/efi.h
Original file line number Diff line number Diff line change
Expand Up @@ -573,6 +573,7 @@ extern struct efi {
efi_reset_system_t *reset_system;
efi_set_virtual_address_map_t *set_virtual_address_map;
struct efi_memory_map *memmap;
unsigned long flags;
} efi;

static inline int
Expand Down Expand Up @@ -660,17 +661,24 @@ extern int __init efi_setup_pcdp_console(char *);

#ifdef CONFIG_EFI
# ifdef CONFIG_X86
extern int efi_enabled(int facility);

/*
* Test whether the above EFI_* bits are enabled.
*/
static inline bool efi_enabled(int feature)
{
return test_bit(feature, &efi.flags) != 0;
}
# else
static inline int efi_enabled(int facility)
static inline bool efi_enabled(int feature)
{
return 1;
return true;
}
# endif
#else
static inline int efi_enabled(int facility)
static inline bool efi_enabled(int feature)
{
return 0;
return false;
}
#endif

Expand Down

0 comments on commit 3e90959

Please sign in to comment.