summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2016-08-16 19:08:45 (GMT)
committerAlexander Graf <agraf@suse.de>2016-10-18 07:08:08 (GMT)
commit80a4800ee1526a4a46cd02b3ea2fd37eebb77504 (patch)
tree556c834bd70cb2a1c35d96e31bfa0be9eb8a8350 /include
parent511d0b97ef709d13da4922fb694d55ef9a5ef641 (diff)
downloadu-boot-80a4800ee1526a4a46cd02b3ea2fd37eebb77504.tar.xz
efi_loader: Allow boards to implement get_time and reset_system
EFI allows an OS to leverage firmware drivers while the OS is running. In the generic code we so far had to stub those implementations out, because we would need board specific knowledge about MMIO setups for it. However, boards can easily implement those themselves. This patch provides the framework so that a board can implement its own versions of get_time and reset_system which would actually do something useful. While at it we also introduce a simple way for code to reserve MMIO pointers as runtime available. Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'include')
-rw-r--r--include/efi_loader.h18
1 files changed, 18 insertions, 0 deletions
diff --git a/include/efi_loader.h b/include/efi_loader.h
index 94397af..1e4eb46 100644
--- a/include/efi_loader.h
+++ b/include/efi_loader.h
@@ -155,11 +155,29 @@ static inline void ascii2unicode(u16 *unicode, const char *ascii)
#define EFI_RUNTIME_DATA __attribute__ ((section ("efi_runtime_data")))
#define EFI_RUNTIME_TEXT __attribute__ ((section ("efi_runtime_text")))
+/* Call this with mmio_ptr as the _pointer_ to a pointer to an MMIO region
+ * to make it available at runtime */
+void efi_add_runtime_mmio(void *mmio_ptr, u64 len);
+
+/* Boards may provide the functions below to implement RTS functionality */
+
+void EFI_RUNTIME_TEXT EFIAPI efi_reset_system(
+ enum efi_reset_type reset_type,
+ efi_status_t reset_status,
+ unsigned long data_size, void *reset_data);
+void efi_reset_system_init(void);
+
+efi_status_t EFI_RUNTIME_TEXT EFIAPI efi_get_time(
+ struct efi_time *time,
+ struct efi_time_cap *capabilities);
+void efi_get_time_init(void);
+
#else /* defined(EFI_LOADER) && !defined(CONFIG_SPL_BUILD) */
/* Without CONFIG_EFI_LOADER we don't have a runtime section, stub it out */
#define EFI_RUNTIME_DATA
#define EFI_RUNTIME_TEXT
+static inline void efi_add_runtime_mmio(void **mmio_ptr, u64 len) { }
/* No loader configured, stub out EFI_ENTRY */
static inline void efi_restore_gd(void) { }