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 @@ free_map:
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 @@ fail:

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;
}