2007-10-22 10:56:26 +10:00
/* Architecture specific portion of the lguest hypercalls */
2008-10-22 22:26:29 -07:00
# ifndef _ASM_X86_LGUEST_HCALL_H
# define _ASM_X86_LGUEST_HCALL_H
2007-10-22 10:56:26 +10:00
# define LHCALL_FLUSH_ASYNC 0
# define LHCALL_LGUEST_INIT 1
2007-12-28 14:26:24 +05:30
# define LHCALL_SHUTDOWN 2
2007-10-22 10:56:26 +10:00
# define LHCALL_NEW_PGTABLE 4
# define LHCALL_FLUSH_TLB 5
# define LHCALL_LOAD_IDT_ENTRY 6
# define LHCALL_SET_STACK 7
# define LHCALL_TS 8
# define LHCALL_SET_CLOCKEVENT 9
# define LHCALL_HALT 10
2009-06-12 22:27:07 -06:00
# define LHCALL_SET_PMD 13
2007-10-22 10:56:26 +10:00
# define LHCALL_SET_PTE 14
2009-05-30 15:48:08 -03:00
# define LHCALL_SET_PGD 15
2007-10-22 10:56:26 +10:00
# define LHCALL_LOAD_TLS 16
2007-10-22 11:24:10 +10:00
# define LHCALL_NOTIFY 17
2009-04-19 23:14:00 -06:00
# define LHCALL_LOAD_GDT_ENTRY 18
2009-06-12 22:27:02 -06:00
# define LHCALL_SEND_INTERRUPTS 19
2007-10-22 10:56:26 +10:00
2007-10-25 15:02:50 +10:00
# define LGUEST_TRAP_ENTRY 0x1F
2007-12-28 14:26:24 +05:30
/* Argument number 3 to LHCALL_LGUEST_SHUTDOWN */
# define LGUEST_SHUTDOWN_POWEROFF 1
# define LGUEST_SHUTDOWN_RESTART 2
2007-10-25 15:02:50 +10:00
# ifndef __ASSEMBLY__
# include <asm/hw_irq.h>
2009-03-14 13:37:52 -02:00
# include <asm/kvm_para.h>
2007-10-25 15:02:50 +10:00
2009-07-30 16:03:45 -06:00
/*G:030
* But first , how does our Guest contact the Host to ask for privileged
2007-10-22 10:56:26 +10:00
* operations ? There are two ways : the direct way is to make a " hypercall " ,
* to make requests of the Host Itself .
*
2009-07-30 16:03:45 -06:00
* We use the KVM hypercall mechanism , though completely different hypercall
* numbers . Seventeen hypercalls are available : the hypercall number is put in
* the % eax register , and the arguments ( when required ) are placed in % ebx ,
* % ecx , % edx and % esi . If a return value makes sense , it ' s returned in % eax .
2007-10-22 10:56:26 +10:00
*
* Grossly invalid calls result in Sudden Death at the hands of the vengeful
* Host , rather than returning failure . This reflects Winston Churchill ' s
2009-07-30 16:03:45 -06:00
* definition of a gentleman : " someone who is only rude intentionally " .
: */
2007-10-22 10:56:26 +10:00
/* Can't use our min() macro here: needs to be a constant */
# define LGUEST_IRQS (NR_IRQS < 32 ? NR_IRQS: 32)
# define LHCALL_RING_SIZE 64
2008-03-23 01:02:36 -07:00
struct hcall_args {
2009-07-30 16:03:45 -06:00
/* These map directly onto eax/ebx/ecx/edx/esi in struct lguest_regs */
2009-06-12 22:27:07 -06:00
unsigned long arg0 , arg1 , arg2 , arg3 , arg4 ;
2007-10-22 10:56:26 +10:00
} ;
2007-10-22 11:03:36 +10:00
# endif /* !__ASSEMBLY__ */
2008-10-22 22:26:29 -07:00
# endif /* _ASM_X86_LGUEST_HCALL_H */