Add some common helpers for use in the upcoming EFI boot and runtime services implementation.
Signed-off-by: Ahmad Fatoum <[email protected]> --- efi/Kconfig | 1 + efi/loader/Makefile | 1 + efi/loader/table.c | 31 +++++++++++++++++++++++++++++++ include/efi/loader.h | 8 ++++++++ 4 files changed, 41 insertions(+) create mode 100644 efi/loader/table.c diff --git a/efi/Kconfig b/efi/Kconfig index 766d6b0e3094..590dd7918440 100644 --- a/efi/Kconfig +++ b/efi/Kconfig @@ -32,6 +32,7 @@ config EFI_LOADER select EFI_GUID select EFI_DEVICEPATH select MEMORY_ATTRIBUTES + select CRC32 help Select this option if you want to run UEFI applications (like GNU GRUB or an EFI-stubbed kernel) on top of barebox. diff --git a/efi/loader/Makefile b/efi/loader/Makefile index 1f07cf6005b9..b4294d746b8b 100644 --- a/efi/loader/Makefile +++ b/efi/loader/Makefile @@ -2,3 +2,4 @@ obj-y += memory.o pool_alloc.o obj-y += trace.o +obj-y += table.o diff --git a/efi/loader/table.c b/efi/loader/table.c new file mode 100644 index 000000000000..0c200365b835 --- /dev/null +++ b/efi/loader/table.c @@ -0,0 +1,31 @@ +// SPDX-License-Identifier: GPL-2.0 + +#include <efi/services.h> +#include <efi/loader.h> +#include <efi/error.h> +#include <efi/attributes.h> +#include <crc.h> + +/** + * efi_update_table_header_crc32() - Update crc32 in table header + * + * @table: EFI table + */ +void __efi_runtime efi_update_table_header_crc32(struct efi_table_hdr *table) +{ + table->crc32 = __pi_crc32(0, table, table->headersize); +} + +/** + * efi_unimplemented() - replacement function, returns EFI_UNSUPPORTED + * + * This function is used after SetVirtualAddressMap() is called as replacement + * for services that are not available anymore due to constraints of our + * implementation. + * + * Return: EFI_UNSUPPORTED + */ +efi_status_t __efi_runtime EFIAPI efi_unimplemented(void) +{ + return EFI_UNSUPPORTED; +} diff --git a/include/efi/loader.h b/include/efi/loader.h index 4a5670bcf672..fcca8676479d 100644 --- a/include/efi/loader.h +++ b/include/efi/loader.h @@ -8,6 +8,8 @@ #include <efi/services.h> #include <efi/memory.h> +struct efi_table_hdr; + #define EFI_SPECIFICATION_VERSION (2 << 16 | 80) /* Key identifying current memory map */ @@ -40,4 +42,10 @@ efi_status_t efi_get_memory_map(efi_uintn_t *memory_map_size, efi_uintn_t *descriptor_size, uint32_t *descriptor_version); +/* Update CRC32 in table header */ +void efi_update_table_header_crc32(struct efi_table_hdr *table); + +/* replacement function, returns EFI_UNSUPPORTED */ +efi_status_t __efi_runtime EFIAPI efi_unimplemented(void); + #endif /* _EFI_LOADER_H */ -- 2.47.3
