diff options
Diffstat (limited to 'include/linux/efi.h')
| -rw-r--r-- | include/linux/efi.h | 48 | 
1 files changed, 27 insertions, 21 deletions
diff --git a/include/linux/efi.h b/include/linux/efi.h index 45ff763fba76..ae96ea145ae3 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -48,7 +48,20 @@ typedef u16 efi_char16_t;		/* UNICODE character */  typedef u64 efi_physical_addr_t;  typedef void *efi_handle_t; -typedef guid_t efi_guid_t; +/* + * The UEFI spec and EDK2 reference implementation both define EFI_GUID as + * struct { u32 a; u16; b; u16 c; u8 d[8]; }; and so the implied alignment + * is 32 bits not 8 bits like our guid_t. In some cases (i.e., on 32-bit ARM), + * this means that firmware services invoked by the kernel may assume that + * efi_guid_t* arguments are 32-bit aligned, and use memory accessors that + * do not tolerate misalignment. So let's set the minimum alignment to 32 bits. + * + * Note that the UEFI spec as well as some comments in the EDK2 code base + * suggest that EFI_GUID should be 64-bit aligned, but this appears to be + * a mistake, given that no code seems to exist that actually enforces that + * or relies on it. + */ +typedef guid_t efi_guid_t __aligned(__alignof__(u32));  #define EFI_GUID(a,b,c,d0,d1,d2,d3,d4,d5,d6,d7) \  	GUID_INIT(a, b, c, d0, d1, d2, d3, d4, d5, d6, d7) @@ -1198,8 +1211,6 @@ static inline bool efi_enabled(int feature)  extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused);  extern bool efi_is_table_address(unsigned long phys_addr); - -extern int efi_apply_persistent_mem_reservations(void);  #else  static inline bool efi_enabled(int feature)  { @@ -1218,11 +1229,6 @@ static inline bool efi_is_table_address(unsigned long phys_addr)  {  	return false;  } - -static inline int efi_apply_persistent_mem_reservations(void) -{ -	return 0; -}  #endif  extern int efi_status_to_err(efi_status_t status); @@ -1706,19 +1712,19 @@ extern int efi_tpm_eventlog_init(void);   * fault happened while executing an efi runtime service.   */  enum efi_rts_ids { -	NONE, -	GET_TIME, -	SET_TIME, -	GET_WAKEUP_TIME, -	SET_WAKEUP_TIME, -	GET_VARIABLE, -	GET_NEXT_VARIABLE, -	SET_VARIABLE, -	QUERY_VARIABLE_INFO, -	GET_NEXT_HIGH_MONO_COUNT, -	RESET_SYSTEM, -	UPDATE_CAPSULE, -	QUERY_CAPSULE_CAPS, +	EFI_NONE, +	EFI_GET_TIME, +	EFI_SET_TIME, +	EFI_GET_WAKEUP_TIME, +	EFI_SET_WAKEUP_TIME, +	EFI_GET_VARIABLE, +	EFI_GET_NEXT_VARIABLE, +	EFI_SET_VARIABLE, +	EFI_QUERY_VARIABLE_INFO, +	EFI_GET_NEXT_HIGH_MONO_COUNT, +	EFI_RESET_SYSTEM, +	EFI_UPDATE_CAPSULE, +	EFI_QUERY_CAPSULE_CAPS,  };  /*  |