|
@@ -354,3 +354,83 @@ void paravirt_cpu_asm_init(const struct pv_cpu_asm_switch *cpu_asm_switch);
|
|
#define PARAVIRT_DEFINE_CPU_OP0(op, type) \
|
|
#define PARAVIRT_DEFINE_CPU_OP0(op, type) \
|
|
static inline void \
|
|
static inline void \
|
|
paravirt_ ## op (void) \
|
|
paravirt_ ## op (void) \
|
|
|
|
+ { \
|
|
|
|
+ PARAVIRT_BR0(op, type); \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#define PARAVIRT_DEFINE_CPU_OP0_RET(op, type) \
|
|
|
|
+ static inline unsigned long \
|
|
|
|
+ paravirt_ ## op (void) \
|
|
|
|
+ { \
|
|
|
|
+ PARAVIRT_BR0_RET(op, type); \
|
|
|
|
+ return ia64_intri_res; \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#define PARAVIRT_DEFINE_CPU_OP1_VOID(op, type) \
|
|
|
|
+ static inline void \
|
|
|
|
+ paravirt_ ## op (void *arg1) \
|
|
|
|
+ { \
|
|
|
|
+ PARAVIRT_BR1_VOID(op, type, arg1); \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#define PARAVIRT_DEFINE_CPU_OP1(op, type) \
|
|
|
|
+ static inline void \
|
|
|
|
+ paravirt_ ## op (unsigned long arg1) \
|
|
|
|
+ { \
|
|
|
|
+ PARAVIRT_BR1(op, type, arg1); \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#define PARAVIRT_DEFINE_CPU_OP1_RET(op, type) \
|
|
|
|
+ static inline unsigned long \
|
|
|
|
+ paravirt_ ## op (unsigned long arg1) \
|
|
|
|
+ { \
|
|
|
|
+ PARAVIRT_BR1_RET(op, type, arg1); \
|
|
|
|
+ return ia64_intri_res; \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+#define PARAVIRT_DEFINE_CPU_OP2(op, type) \
|
|
|
|
+ static inline void \
|
|
|
|
+ paravirt_ ## op (unsigned long arg1, \
|
|
|
|
+ unsigned long arg2) \
|
|
|
|
+ { \
|
|
|
|
+ PARAVIRT_BR2(op, type, arg1, arg2); \
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP1_VOID(fc, FC);
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP1_RET(thash, THASH)
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP1_RET(get_cpuid, GET_CPUID)
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP1_RET(get_pmd, GET_PMD)
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP2(ptcga, PTCGA)
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP1_RET(get_rr, GET_RR)
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP2(set_rr, SET_RR)
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP0(ssm_i, SSM_I)
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP0(rsm_i, RSM_I)
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP0_RET(get_psr_i, GET_PSR_I)
|
|
|
|
+PARAVIRT_DEFINE_CPU_OP1(intrin_local_irq_restore, INTRIN_LOCAL_IRQ_RESTORE)
|
|
|
|
+
|
|
|
|
+static inline void
|
|
|
|
+paravirt_set_rr0_to_rr4(unsigned long val0, unsigned long val1,
|
|
|
|
+ unsigned long val2, unsigned long val3,
|
|
|
|
+ unsigned long val4)
|
|
|
|
+{
|
|
|
|
+ register unsigned long __val0 asm ("r8") = val0;
|
|
|
|
+ register unsigned long __val1 asm ("r9") = val1;
|
|
|
|
+ register unsigned long __val2 asm ("r10") = val2;
|
|
|
|
+ register unsigned long __val3 asm ("r11") = val3;
|
|
|
|
+ register unsigned long __val4 asm ("r14") = val4;
|
|
|
|
+
|
|
|
|
+ register unsigned long ia64_clobber0 asm ("r8");
|
|
|
|
+ register unsigned long ia64_clobber1 asm ("r9");
|
|
|
|
+ register unsigned long ia64_clobber2 asm ("r10");
|
|
|
|
+ register unsigned long ia64_clobber3 asm ("r11");
|
|
|
|
+ register unsigned long ia64_clobber4 asm ("r14");
|
|
|
|
+
|
|
|
|
+ asm volatile (paravirt_alt_bundle(__PARAVIRT_BR,
|
|
|
|
+ PARAVIRT_TYPE(SET_RR0_TO_RR4))
|
|
|
|
+ : "=r"(ia64_clobber0),
|
|
|
|
+ "=r"(ia64_clobber1),
|
|
|
|
+ "=r"(ia64_clobber2),
|
|
|
|
+ "=r"(ia64_clobber3),
|
|
|
|
+ "=r"(ia64_clobber4)
|
|
|
|
+ : PARAVIRT_OP(set_rr0_to_rr4),
|