efi/arm64: Preserve FP/SIMD registers on UEFI runtime services calls
[linux-2.6-block.git] / arch / arm64 / include / asm / efi.h
index 5a46c4e7f539c6aa593d178b34948352b79c0659..375ba342dca675a6cd32e82b27fc41537b20f4b2 100644 (file)
@@ -2,6 +2,7 @@
 #define _ASM_EFI_H
 
 #include <asm/io.h>
+#include <asm/neon.h>
 
 #ifdef CONFIG_EFI
 extern void efi_init(void);
@@ -11,4 +12,24 @@ extern void efi_idmap_init(void);
 #define efi_idmap_init()
 #endif
 
+#define efi_call_virt(f, ...)                                          \
+({                                                                     \
+       efi_##f##_t *__f = efi.systab->runtime->f;                      \
+       efi_status_t __s;                                               \
+                                                                       \
+       kernel_neon_begin();                                            \
+       __s = __f(__VA_ARGS__);                                         \
+       kernel_neon_end();                                              \
+       __s;                                                            \
+})
+
+#define __efi_call_virt(f, ...)                                                \
+({                                                                     \
+       efi_##f##_t *__f = efi.systab->runtime->f;                      \
+                                                                       \
+       kernel_neon_begin();                                            \
+       __f(__VA_ARGS__);                                               \
+       kernel_neon_end();                                              \
+})
+
 #endif /* _ASM_EFI_H */