mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-21 20:34:38 +00:00
efi_loader: update runtime services table crc32
The crc32 of the runtime services table must be updated after detaching. efi_update_table_header_crc32() must be __efi_runtime. So move it to efi_runtime.c Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
parent
483dbab9f9
commit
a39f39cdd8
3 changed files with 18 additions and 12 deletions
|
@ -417,6 +417,9 @@ static inline int guidcmp(const efi_guid_t *g1, const efi_guid_t *g2)
|
||||||
#define __efi_runtime_data __attribute__ ((section (".data.efi_runtime")))
|
#define __efi_runtime_data __attribute__ ((section (".data.efi_runtime")))
|
||||||
#define __efi_runtime __attribute__ ((section (".text.efi_runtime")))
|
#define __efi_runtime __attribute__ ((section (".text.efi_runtime")))
|
||||||
|
|
||||||
|
/* Update CRC32 in table header */
|
||||||
|
void __efi_runtime efi_update_table_header_crc32(struct efi_table_hdr *table);
|
||||||
|
|
||||||
/* Call this with mmio_ptr as the _pointer_ to a pointer to an MMIO region
|
/* Call this with mmio_ptr as the _pointer_ to a pointer to an MMIO region
|
||||||
* to make it available at runtime */
|
* to make it available at runtime */
|
||||||
efi_status_t efi_add_runtime_mmio(void *mmio_ptr, u64 len);
|
efi_status_t efi_add_runtime_mmio(void *mmio_ptr, u64 len);
|
||||||
|
|
|
@ -153,18 +153,6 @@ const char *__efi_nesting_dec(void)
|
||||||
return indent_string(--nesting_level);
|
return indent_string(--nesting_level);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* efi_update_table_header_crc32() - Update CRC32 in table header
|
|
||||||
*
|
|
||||||
* @table: EFI table
|
|
||||||
*/
|
|
||||||
static void efi_update_table_header_crc32(struct efi_table_hdr *table)
|
|
||||||
{
|
|
||||||
table->crc32 = 0;
|
|
||||||
table->crc32 = crc32(0, (const unsigned char *)table,
|
|
||||||
table->headersize);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* efi_queue_event() - queue an EFI event
|
* efi_queue_event() - queue an EFI event
|
||||||
* @event: event to signal
|
* @event: event to signal
|
||||||
|
|
|
@ -84,6 +84,18 @@ struct elf_rela {
|
||||||
* handle a good number of runtime callbacks
|
* handle a good number of runtime callbacks
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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 = 0;
|
||||||
|
table->crc32 = crc32(0, (const unsigned char *)table,
|
||||||
|
table->headersize);
|
||||||
|
}
|
||||||
|
|
||||||
static void EFIAPI efi_reset_system_boottime(
|
static void EFIAPI efi_reset_system_boottime(
|
||||||
enum efi_reset_type reset_type,
|
enum efi_reset_type reset_type,
|
||||||
efi_status_t reset_status,
|
efi_status_t reset_status,
|
||||||
|
@ -273,6 +285,9 @@ static void efi_runtime_detach(ulong offset)
|
||||||
debug("%s: Setting %p to %lx\n", __func__, p, newaddr);
|
debug("%s: Setting %p to %lx\n", __func__, p, newaddr);
|
||||||
*p = newaddr;
|
*p = newaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Update crc32 */
|
||||||
|
efi_update_table_header_crc32(&efi_runtime_services.hdr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Relocate EFI runtime to uboot_reloc_base = offset */
|
/* Relocate EFI runtime to uboot_reloc_base = offset */
|
||||||
|
|
Loading…
Add table
Reference in a new issue