struct ia64_fpreg fr[6]; \
efi_time_cap_t *atc = NULL; \
efi_status_t ret; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
\
if (tc) \
atc = adjust_arg(tc); \
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
ret = efi_call_##prefix((efi_get_time_t *) __va(runtime->get_time), adjust_arg(tm), atc); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
return ret; \
}
{ \
struct ia64_fpreg fr[6]; \
efi_status_t ret; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
\
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
ret = efi_call_##prefix((efi_set_time_t *) __va(runtime->set_time), adjust_arg(tm)); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
return ret; \
}
{ \
struct ia64_fpreg fr[6]; \
efi_status_t ret; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
\
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
ret = efi_call_##prefix((efi_get_wakeup_time_t *) __va(runtime->get_wakeup_time), \
adjust_arg(enabled), adjust_arg(pending), adjust_arg(tm)); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
return ret; \
}
struct ia64_fpreg fr[6]; \
efi_time_t *atm = NULL; \
efi_status_t ret; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
\
if (tm) \
atm = adjust_arg(tm); \
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
ret = efi_call_##prefix((efi_set_wakeup_time_t *) __va(runtime->set_wakeup_time), \
enabled, atm); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
return ret; \
}
struct ia64_fpreg fr[6]; \
u32 *aattr = NULL; \
efi_status_t ret; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
\
if (attr) \
aattr = adjust_arg(attr); \
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
ret = efi_call_##prefix((efi_get_variable_t *) __va(runtime->get_variable), \
adjust_arg(name), adjust_arg(vendor), aattr, \
adjust_arg(data_size), adjust_arg(data)); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
return ret; \
}
{ \
struct ia64_fpreg fr[6]; \
efi_status_t ret; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
\
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
ret = efi_call_##prefix((efi_get_next_variable_t *) __va(runtime->get_next_variable), \
adjust_arg(name_size), adjust_arg(name), adjust_arg(vendor)); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
return ret; \
}
{ \
struct ia64_fpreg fr[6]; \
efi_status_t ret; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
\
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
ret = efi_call_##prefix((efi_set_variable_t *) __va(runtime->set_variable), \
adjust_arg(name), adjust_arg(vendor), attr, data_size, \
adjust_arg(data)); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
return ret; \
}
{ \
struct ia64_fpreg fr[6]; \
efi_status_t ret; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
\
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
ret = efi_call_##prefix((efi_get_next_high_mono_count_t *) \
__va(runtime->get_next_high_mono_count), adjust_arg(count)); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
return ret; \
}
{ \
struct ia64_fpreg fr[6]; \
efi_char16_t *adata = NULL; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
\
if (data) \
adata = adjust_arg(data); \
\
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
efi_call_##prefix((efi_reset_system_t *) __va(runtime->reset_system), \
reset_type, status, data_size, adata); \
/* should not return, but just in case... */ \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
}
#include <linux/types.h>
#include <asm/fpu.h>
+#ifdef XEN
+#include <linux/efi.h>
+#endif
/*
* Data types needed to pass information into PAL procedures and
#define PAL_CALL(iprv,a0,a1,a2,a3) do { \
struct ia64_fpreg fr[6]; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
iprv = ia64_pal_call_static(a0, a1, a2, a3); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
} while (0)
#define PAL_CALL_STK(iprv,a0,a1,a2,a3) do { \
struct ia64_fpreg fr[6]; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
iprv = ia64_pal_call_stacked(a0, a1, a2, a3); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
} while (0)
#define PAL_CALL_PHYS(iprv,a0,a1,a2,a3) do { \
struct ia64_fpreg fr[6]; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
iprv = ia64_pal_call_phys_static(a0, a1, a2, a3); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
} while (0)
#define PAL_CALL_PHYS_STK(iprv,a0,a1,a2,a3) do { \
struct ia64_fpreg fr[6]; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
ia64_save_scratch_fpregs(fr); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
iprv = ia64_pal_call_phys_stacked(a0, a1, a2, a3); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
ia64_load_scratch_fpregs(fr); \
} while (0)
# define SAL_CALL(result,args...) do { \
unsigned long __ia64_sc_flags; \
struct ia64_fpreg __ia64_sc_fr[6]; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
ia64_save_scratch_fpregs(__ia64_sc_fr); \
spin_lock_irqsave(&sal_lock, __ia64_sc_flags); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
__SAL_CALL(result, args); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
spin_unlock_irqrestore(&sal_lock, __ia64_sc_flags); \
ia64_load_scratch_fpregs(__ia64_sc_fr); \
} while (0)
# define SAL_CALL_NOLOCK(result,args...) do { \
unsigned long __ia64_scn_flags; \
struct ia64_fpreg __ia64_scn_fr[6]; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
ia64_save_scratch_fpregs(__ia64_scn_fr); \
local_irq_save(__ia64_scn_flags); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
__SAL_CALL(result, args); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
local_irq_restore(__ia64_scn_flags); \
ia64_load_scratch_fpregs(__ia64_scn_fr); \
} while (0)
# define SAL_CALL_REENTRANT(result,args...) do { \
struct ia64_fpreg __ia64_scs_fr[6]; \
+ XEN_EFI_RR_DECLARE(rr6, rr7); \
ia64_save_scratch_fpregs(__ia64_scs_fr); \
preempt_disable(); \
+ XEN_EFI_RR_ENTER(rr6, rr7); \
__SAL_CALL(result, args); \
+ XEN_EFI_RR_LEAVE(rr6, rr7); \
preempt_enable(); \
ia64_load_scratch_fpregs(__ia64_scs_fr); \
} while (0)