1 #ifndef _ASM_X86_EFI_H 2 #define _ASM_X86_EFI_H 3 4 #ifdef CONFIG_X86_32 5 6 extern unsigned long asmlinkage efi_call_phys(void *, ...); 7 8 #define efi_call_phys0(f) efi_call_phys(f) 9 #define efi_call_phys1(f, a1) efi_call_phys(f, a1) 10 #define efi_call_phys2(f, a1, a2) efi_call_phys(f, a1, a2) 11 #define efi_call_phys3(f, a1, a2, a3) efi_call_phys(f, a1, a2, a3) 12 #define efi_call_phys4(f, a1, a2, a3, a4) \ 13 efi_call_phys(f, a1, a2, a3, a4) 14 #define efi_call_phys5(f, a1, a2, a3, a4, a5) \ 15 efi_call_phys(f, a1, a2, a3, a4, a5) 16 #define efi_call_phys6(f, a1, a2, a3, a4, a5, a6) \ 17 efi_call_phys(f, a1, a2, a3, a4, a5, a6) 18 /* 19 * Wrap all the virtual calls in a way that forces the parameters on the stack. 20 */ 21 22 #define efi_call_virt(f, args...) \ 23 ((efi_##f##_t __attribute__((regparm(0)))*)efi.systab->runtime->f)(args) 24 25 #define efi_call_virt0(f) efi_call_virt(f) 26 #define efi_call_virt1(f, a1) efi_call_virt(f, a1) 27 #define efi_call_virt2(f, a1, a2) efi_call_virt(f, a1, a2) 28 #define efi_call_virt3(f, a1, a2, a3) efi_call_virt(f, a1, a2, a3) 29 #define efi_call_virt4(f, a1, a2, a3, a4) \ 30 efi_call_virt(f, a1, a2, a3, a4) 31 #define efi_call_virt5(f, a1, a2, a3, a4, a5) \ 32 efi_call_virt(f, a1, a2, a3, a4, a5) 33 #define efi_call_virt6(f, a1, a2, a3, a4, a5, a6) \ 34 efi_call_virt(f, a1, a2, a3, a4, a5, a6) 35 36 #define efi_ioremap(addr, size) ioremap_cache(addr, size) 37 38 #else /* !CONFIG_X86_32 */ 39 40 extern u64 efi_call0(void *fp); 41 extern u64 efi_call1(void *fp, u64 arg1); 42 extern u64 efi_call2(void *fp, u64 arg1, u64 arg2); 43 extern u64 efi_call3(void *fp, u64 arg1, u64 arg2, u64 arg3); 44 extern u64 efi_call4(void *fp, u64 arg1, u64 arg2, u64 arg3, u64 arg4); 45 extern u64 efi_call5(void *fp, u64 arg1, u64 arg2, u64 arg3, 46 u64 arg4, u64 arg5); 47 extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3, 48 u64 arg4, u64 arg5, u64 arg6); 49 50 #define efi_call_phys0(f) \ 51 efi_call0((void *)(f)) 52 #define efi_call_phys1(f, a1) \ 53 efi_call1((void *)(f), (u64)(a1)) 54 #define efi_call_phys2(f, a1, a2) \ 55 efi_call2((void *)(f), (u64)(a1), (u64)(a2)) 56 #define efi_call_phys3(f, a1, a2, a3) \ 57 efi_call3((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3)) 58 #define efi_call_phys4(f, a1, a2, a3, a4) \ 59 efi_call4((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3), \ 60 (u64)(a4)) 61 #define efi_call_phys5(f, a1, a2, a3, a4, a5) \ 62 efi_call5((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3), \ 63 (u64)(a4), (u64)(a5)) 64 #define efi_call_phys6(f, a1, a2, a3, a4, a5, a6) \ 65 efi_call6((void *)(f), (u64)(a1), (u64)(a2), (u64)(a3), \ 66 (u64)(a4), (u64)(a5), (u64)(a6)) 67 68 #define efi_call_virt0(f) \ 69 efi_call0((void *)(efi.systab->runtime->f)) 70 #define efi_call_virt1(f, a1) \ 71 efi_call1((void *)(efi.systab->runtime->f), (u64)(a1)) 72 #define efi_call_virt2(f, a1, a2) \ 73 efi_call2((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2)) 74 #define efi_call_virt3(f, a1, a2, a3) \ 75 efi_call3((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \ 76 (u64)(a3)) 77 #define efi_call_virt4(f, a1, a2, a3, a4) \ 78 efi_call4((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \ 79 (u64)(a3), (u64)(a4)) 80 #define efi_call_virt5(f, a1, a2, a3, a4, a5) \ 81 efi_call5((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \ 82 (u64)(a3), (u64)(a4), (u64)(a5)) 83 #define efi_call_virt6(f, a1, a2, a3, a4, a5, a6) \ 84 efi_call6((void *)(efi.systab->runtime->f), (u64)(a1), (u64)(a2), \ 85 (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6)) 86 87 extern void __iomem *efi_ioremap(unsigned long addr, unsigned long size); 88 89 #endif /* CONFIG_X86_32 */ 90 91 extern int add_efi_memmap; 92 extern void efi_reserve_early(void); 93 extern void efi_call_phys_prelog(void); 94 extern void efi_call_phys_epilog(void); 95 96 #ifndef CONFIG_EFI 97 /* 98 * IF EFI is not configured, have the EFI calls return -ENOSYS. 99 */ 100 #define efi_call0(_f) (-ENOSYS) 101 #define efi_call1(_f, _a1) (-ENOSYS) 102 #define efi_call2(_f, _a1, _a2) (-ENOSYS) 103 #define efi_call3(_f, _a1, _a2, _a3) (-ENOSYS) 104 #define efi_call4(_f, _a1, _a2, _a3, _a4) (-ENOSYS) 105 #define efi_call5(_f, _a1, _a2, _a3, _a4, _a5) (-ENOSYS) 106 #define efi_call6(_f, _a1, _a2, _a3, _a4, _a5, _a6) (-ENOSYS) 107 #endif /* CONFIG_EFI */ 108 109 #endif /* _ASM_X86_EFI_H */ 110