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 Original line Diff line number Diff line
@@ -788,6 +788,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
	edd=		[EDD]
	edd=		[EDD]
			Format: {"off" | "on" | "skip[mbr]"}
			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]
	eisa_irq_edge=	[PARISC,HW]
			See header of drivers/parisc/eisa.c.
			See header of drivers/parisc/eisa.c.


+1 −0
Original line number Original line Diff line number Diff line
@@ -1549,6 +1549,7 @@ config X86_SMAP
config EFI
config EFI
	bool "EFI runtime service support"
	bool "EFI runtime service support"
	depends on ACPI
	depends on ACPI
	select UCS2_STRING
	---help---
	---help---
	  This enables the kernel to use EFI runtime services that are
	  This enables the kernel to use EFI runtime services that are
	  available (such as the EFI variable services).
	  available (such as the EFI variable services).
+47 −0
Original line number Original line Diff line number Diff line
@@ -251,6 +251,51 @@ static void find_bits(unsigned long mask, u8 *pos, u8 *size)
	*size = len;
	*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)
static efi_status_t setup_efi_pci(struct boot_params *params)
{
{
	efi_pci_io_protocol *pci;
	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_graphics(boot_params);


	setup_efi_vars(boot_params);

	setup_efi_pci(boot_params);
	setup_efi_pci(boot_params);


	status = efi_call_phys3(sys_table->boottime->allocate_pool,
	status = efi_call_phys3(sys_table->boottime->allocate_pool,
+7 −0
Original line number Original line 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_unmap_memmap(void);
extern void efi_memory_uc(u64 addr, unsigned long size);
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
#ifdef CONFIG_EFI


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


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