aboutsummaryrefslogtreecommitdiffstats
path: root/xen/arch/ia64/hypercall.c
diff options
context:
space:
mode:
Diffstat (limited to 'xen/arch/ia64/hypercall.c')
-rw-r--r--xen/arch/ia64/hypercall.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/xen/arch/ia64/hypercall.c b/xen/arch/ia64/hypercall.c
index 0fcc6f7cf8..64947ac59c 100644
--- a/xen/arch/ia64/hypercall.c
+++ b/xen/arch/ia64/hypercall.c
@@ -19,8 +19,6 @@ extern unsigned long translate_domain_mpaddr(unsigned long);
extern struct ia64_sal_retval pal_emulator_static(UINT64);
extern struct ia64_sal_retval sal_emulator(UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64,UINT64);
-void fooefi(void) {}
-
int
ia64_hypercall (struct pt_regs *regs)
{
@@ -122,6 +120,28 @@ ia64_hypercall (struct pt_regs *regs)
case 0xfffb: // test dummy hypercall
regs->r8 = domU_staging_read_8(vcpu_get_gr(v,32));
break;
+
+ case __HYPERVISOR_dom0_op:
+ regs->r8 = do_dom0_op(regs->r14);
+ break;
+
+ case __HYPERVISOR_dom_mem_op:
+ /* regs->r8 = do_dom_mem_op(regs->r14, regs->r15, regs->r16, regs->r17, regs->r18); */
+ /* we don't handle reservations; just return success */
+ regs->r8 = regs->r16;
+ break;
+
+ case __HYPERVISOR_event_channel_op:
+ regs->r8 = do_event_channel_op(regs->r14);
+ break;
+
+ case __HYPERVISOR_console_io:
+ regs->r8 = do_console_io(regs->r14, regs->r15, regs->r16);
+ break;
+
+ default:
+ printf("unknown hypercall %x\n", regs->r2);
+ regs->r8 = (unsigned long)-1;
}
return 1;
}