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

Commit 82d736ac authored by Matthew Garrett's avatar Matthew Garrett Committed by Jarkko Sakkinen
Browse files

Abstract out support for locating an EFI config table



We want to grab a pointer to the TPM final events table, so abstract out
the existing code for finding an FDT table and make it generic.

Signed-off-by: default avatarMatthew Garrett <mjg59@google.com>
Reviewed-by: default avatarArd Biesheuvel <ard.biesheuvel@linaro.org>
Reviewed-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Tested-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Signed-off-by: default avatarJarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
parent db4d8cb9
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -926,3 +926,18 @@ efi_status_t efi_exit_boot_services(efi_system_table_t *sys_table_arg,
fail:
	return status;
}

void *get_efi_config_table(efi_system_table_t *sys_table, efi_guid_t guid)
{
	efi_config_table_t *tables = (efi_config_table_t *)sys_table->tables;
	int i;

	for (i = 0; i < sys_table->nr_tables; i++) {
		if (efi_guidcmp(tables[i].guid, guid) != 0)
			continue;

		return (void *)tables[i].table;
	}

	return NULL;
}
+2 −0
Original line number Diff line number Diff line
@@ -65,6 +65,8 @@ efi_status_t check_platform_features(efi_system_table_t *sys_table_arg);

efi_status_t efi_random_get_seed(efi_system_table_t *sys_table_arg);

void *get_efi_config_table(efi_system_table_t *sys_table, efi_guid_t guid);

/* Helper macros for the usual case of using simple C variables: */
#ifndef fdt_setprop_inplace_var
#define fdt_setprop_inplace_var(fdt, node_offset, name, var) \
+9 −18
Original line number Diff line number Diff line
@@ -363,19 +363,13 @@ efi_status_t allocate_new_fdt_and_exit_boot(efi_system_table_t *sys_table,

void *get_fdt(efi_system_table_t *sys_table, unsigned long *fdt_size)
{
	efi_guid_t fdt_guid = DEVICE_TREE_GUID;
	efi_config_table_t *tables;
	int i;

	tables = (efi_config_table_t *)sys_table->tables;

	for (i = 0; i < sys_table->nr_tables; i++) {
	void *fdt;

		if (efi_guidcmp(tables[i].guid, fdt_guid) != 0)
			continue;
	fdt = get_efi_config_table(sys_table, DEVICE_TREE_GUID);

	if (!fdt)
		return NULL;

		fdt = (void *)tables[i].table;
	if (fdt_check_header(fdt) != 0) {
		pr_efi_err(sys_table, "Invalid header detected on UEFI supplied FDT, ignoring ...\n");
		return NULL;
@@ -383,6 +377,3 @@ void *get_fdt(efi_system_table_t *sys_table, unsigned long *fdt_size)
	*fdt_size = fdt_totalsize(fdt);
	return fdt;
}

	return NULL;
}