Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0a9f451 authored by H. Peter Anvin's avatar H. Peter Anvin
Browse files

Merge remote-tracking branch 'efi/urgent' into x86/urgent



Matt Fleming (1):
      x86, efivars: firmware bug workarounds should be in platform
      code

Matthew Garrett (3):
      Move utf16 functions to kernel core and rename
      efi: Pass boot services variable info to runtime code
      efi: Distinguish between "remaining space" and actually used
      space

Richard Weinberger (2):
      x86,efi: Check max_size only if it is non-zero.
      x86,efi: Implement efi_no_storage_paranoia parameter

Sergey Vlasov (2):
      x86/Kconfig: Make EFI select UCS2_STRING
      efi: Export efi_query_variable_store() for efivars.ko

Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
parents 74c3e3fc 8c58bf3e
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -788,6 +788,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
	edd=		[EDD]
			Format: {"off" | "on" | "skip[mbr]"}

	efi_no_storage_paranoia [EFI; X86]
			Using this parameter you can use more than 50% of
			your efi variable storage. Use this parameter only if
			you are really sure that your UEFI does sane gc and
			fulfills the spec otherwise your board may brick.

	eisa_irq_edge=	[PARISC,HW]
			See header of drivers/parisc/eisa.c.

+1 −0
Original line number Diff line number Diff line
@@ -1549,6 +1549,7 @@ config X86_SMAP
config EFI
	bool "EFI runtime service support"
	depends on ACPI
	select UCS2_STRING
	---help---
	  This enables the kernel to use EFI runtime services that are
	  available (such as the EFI variable services).
+47 −0
Original line number Diff line number Diff line
@@ -251,6 +251,51 @@ static void find_bits(unsigned long mask, u8 *pos, u8 *size)
	*size = len;
}

static efi_status_t setup_efi_vars(struct boot_params *params)
{
	struct setup_data *data;
	struct efi_var_bootdata *efidata;
	u64 store_size, remaining_size, var_size;
	efi_status_t status;

	if (!sys_table->runtime->query_variable_info)
		return EFI_UNSUPPORTED;

	data = (struct setup_data *)(unsigned long)params->hdr.setup_data;

	while (data && data->next)
		data = (struct setup_data *)(unsigned long)data->next;

	status = efi_call_phys4(sys_table->runtime->query_variable_info,
				EFI_VARIABLE_NON_VOLATILE |
				EFI_VARIABLE_BOOTSERVICE_ACCESS |
				EFI_VARIABLE_RUNTIME_ACCESS, &store_size,
				&remaining_size, &var_size);

	if (status != EFI_SUCCESS)
		return status;

	status = efi_call_phys3(sys_table->boottime->allocate_pool,
				EFI_LOADER_DATA, sizeof(*efidata), &efidata);

	if (status != EFI_SUCCESS)
		return status;

	efidata->data.type = SETUP_EFI_VARS;
	efidata->data.len = sizeof(struct efi_var_bootdata) -
		sizeof(struct setup_data);
	efidata->data.next = 0;
	efidata->store_size = store_size;
	efidata->remaining_size = remaining_size;
	efidata->max_var_size = var_size;

	if (data)
		data->next = (unsigned long)efidata;
	else
		params->hdr.setup_data = (unsigned long)efidata;

}

static efi_status_t setup_efi_pci(struct boot_params *params)
{
	efi_pci_io_protocol *pci;
@@ -1157,6 +1202,8 @@ struct boot_params *efi_main(void *handle, efi_system_table_t *_table,

	setup_graphics(boot_params);

	setup_efi_vars(boot_params);

	setup_efi_pci(boot_params);

	status = efi_call_phys3(sys_table->boottime->allocate_pool,
+7 −0
Original line number Diff line number Diff line
@@ -102,6 +102,13 @@ extern void efi_call_phys_epilog(void);
extern void efi_unmap_memmap(void);
extern void efi_memory_uc(u64 addr, unsigned long size);

struct efi_var_bootdata {
	struct setup_data data;
	u64 store_size;
	u64 remaining_size;
	u64 max_var_size;
};

#ifdef CONFIG_EFI

static inline bool efi_is_native(void)
+1 −0
Original line number Diff line number Diff line
@@ -6,6 +6,7 @@
#define SETUP_E820_EXT			1
#define SETUP_DTB			2
#define SETUP_PCI			3
#define SETUP_EFI_VARS			4

/* ram_size flags */
#define RAMDISK_IMAGE_START_MASK	0x07FF
Loading