x86/efi: Delete most of the efi_call* macros
We really only need one phys and one virt function call, and then only one assembly function to make firmware calls. Since we are not using the C type system anyway, we're not really losing much by deleting the macros apart from no longer having a check that we are passing the correct number of parameters. The lack of duplicated code seems like a worthwhile trade-off. Cc: Ricardo Neri <ricardo.neri-calderon@linux.intel.com> Cc: Borislav Petkov <bp@suse.de> Signed-off-by: Matt Fleming <matt.fleming@intel.com>
This commit is contained in:
@@ -27,16 +27,6 @@
|
||||
|
||||
extern unsigned long asmlinkage efi_call_phys(void *, ...);
|
||||
|
||||
#define efi_call_phys0(f) efi_call_phys(f)
|
||||
#define efi_call_phys1(f, a1) efi_call_phys(f, a1)
|
||||
#define efi_call_phys2(f, a1, a2) efi_call_phys(f, a1, a2)
|
||||
#define efi_call_phys3(f, a1, a2, a3) efi_call_phys(f, a1, a2, a3)
|
||||
#define efi_call_phys4(f, a1, a2, a3, a4) \
|
||||
efi_call_phys(f, a1, a2, a3, a4)
|
||||
#define efi_call_phys5(f, a1, a2, a3, a4, a5) \
|
||||
efi_call_phys(f, a1, a2, a3, a4, a5)
|
||||
#define efi_call_phys6(f, a1, a2, a3, a4, a5, a6) \
|
||||
efi_call_phys(f, a1, a2, a3, a4, a5, a6)
|
||||
/*
|
||||
* Wrap all the virtual calls in a way that forces the parameters on the stack.
|
||||
*/
|
||||
@@ -44,75 +34,27 @@ extern unsigned long asmlinkage efi_call_phys(void *, ...);
|
||||
#define efi_call_virt(f, args...) \
|
||||
((efi_##f##_t __attribute__((regparm(0)))*)efi.systab->runtime->f)(args)
|
||||
|
||||
#define efi_call_virt0(f) efi_call_virt(f)
|
||||
#define efi_call_virt1(f, a1) efi_call_virt(f, a1)
|
||||
#define efi_call_virt2(f, a1, a2) efi_call_virt(f, a1, a2)
|
||||
#define efi_call_virt3(f, a1, a2, a3) efi_call_virt(f, a1, a2, a3)
|
||||
#define efi_call_virt4(f, a1, a2, a3, a4) \
|
||||
efi_call_virt(f, a1, a2, a3, a4)
|
||||
#define efi_call_virt5(f, a1, a2, a3, a4, a5) \
|
||||
efi_call_virt(f, a1, a2, a3, a4, a5)
|
||||
#define efi_call_virt6(f, a1, a2, a3, a4, a5, a6) \
|
||||
efi_call_virt(f, a1, a2, a3, a4, a5, a6)
|
||||
|
||||
#define efi_ioremap(addr, size, type, attr) ioremap_cache(addr, size)
|
||||
|
||||
#else /* !CONFIG_X86_32 */
|
||||
|
||||
extern u64 efi_call0(void *fp);
|
||||
extern u64 efi_call1(void *fp, u64 arg1);
|
||||
extern u64 efi_call2(void *fp, u64 arg1, u64 arg2);
|
||||
extern u64 efi_call3(void *fp, u64 arg1, u64 arg2, u64 arg3);
|
||||
extern u64 efi_call4(void *fp, u64 arg1, u64 arg2, u64 arg3, u64 arg4);
|
||||
extern u64 efi_call5(void *fp, u64 arg1, u64 arg2, u64 arg3,
|
||||
u64 arg4, u64 arg5);
|
||||
extern u64 efi_call6(void *fp, u64 arg1, u64 arg2, u64 arg3,
|
||||
u64 arg4, u64 arg5, u64 arg6);
|
||||
#define EFI_LOADER_SIGNATURE "EL64"
|
||||
|
||||
#define efi_call_phys0(f) \
|
||||
efi_call0((f))
|
||||
#define efi_call_phys1(f, a1) \
|
||||
efi_call1((f), (u64)(a1))
|
||||
#define efi_call_phys2(f, a1, a2) \
|
||||
efi_call2((f), (u64)(a1), (u64)(a2))
|
||||
#define efi_call_phys3(f, a1, a2, a3) \
|
||||
efi_call3((f), (u64)(a1), (u64)(a2), (u64)(a3))
|
||||
#define efi_call_phys4(f, a1, a2, a3, a4) \
|
||||
efi_call4((f), (u64)(a1), (u64)(a2), (u64)(a3), \
|
||||
(u64)(a4))
|
||||
#define efi_call_phys5(f, a1, a2, a3, a4, a5) \
|
||||
efi_call5((f), (u64)(a1), (u64)(a2), (u64)(a3), \
|
||||
(u64)(a4), (u64)(a5))
|
||||
#define efi_call_phys6(f, a1, a2, a3, a4, a5, a6) \
|
||||
efi_call6((f), (u64)(a1), (u64)(a2), (u64)(a3), \
|
||||
(u64)(a4), (u64)(a5), (u64)(a6))
|
||||
extern u64 asmlinkage efi_call(void *fp, ...);
|
||||
|
||||
#define _efi_call_virtX(x, f, ...) \
|
||||
#define efi_call_phys(f, args...) efi_call((f), args)
|
||||
|
||||
#define efi_call_virt(f, ...) \
|
||||
({ \
|
||||
efi_status_t __s; \
|
||||
\
|
||||
efi_sync_low_kernel_mappings(); \
|
||||
preempt_disable(); \
|
||||
__s = efi_call##x((void *)efi.systab->runtime->f, __VA_ARGS__); \
|
||||
__s = efi_call((void *)efi.systab->runtime->f, __VA_ARGS__); \
|
||||
preempt_enable(); \
|
||||
__s; \
|
||||
})
|
||||
|
||||
#define efi_call_virt0(f) \
|
||||
_efi_call_virtX(0, f)
|
||||
#define efi_call_virt1(f, a1) \
|
||||
_efi_call_virtX(1, f, (u64)(a1))
|
||||
#define efi_call_virt2(f, a1, a2) \
|
||||
_efi_call_virtX(2, f, (u64)(a1), (u64)(a2))
|
||||
#define efi_call_virt3(f, a1, a2, a3) \
|
||||
_efi_call_virtX(3, f, (u64)(a1), (u64)(a2), (u64)(a3))
|
||||
#define efi_call_virt4(f, a1, a2, a3, a4) \
|
||||
_efi_call_virtX(4, f, (u64)(a1), (u64)(a2), (u64)(a3), (u64)(a4))
|
||||
#define efi_call_virt5(f, a1, a2, a3, a4, a5) \
|
||||
_efi_call_virtX(5, f, (u64)(a1), (u64)(a2), (u64)(a3), (u64)(a4), (u64)(a5))
|
||||
#define efi_call_virt6(f, a1, a2, a3, a4, a5, a6) \
|
||||
_efi_call_virtX(6, f, (u64)(a1), (u64)(a2), (u64)(a3), (u64)(a4), (u64)(a5), (u64)(a6))
|
||||
|
||||
extern void __iomem *efi_ioremap(unsigned long addr, unsigned long size,
|
||||
u32 type, u64 attribute);
|
||||
|
||||
|
Reference in New Issue
Block a user