2007-10-25 12:12:20 +08:00
|
|
|
#ifndef _LINUX_LGUEST_LAUNCHER
|
|
|
|
#define _LINUX_LGUEST_LAUNCHER
|
2007-07-19 16:49:23 +08:00
|
|
|
/* Everything the "lguest" userspace program needs to know. */
|
2007-10-22 08:56:24 +08:00
|
|
|
#include <linux/types.h>
|
2007-07-19 16:49:23 +08:00
|
|
|
|
2007-07-27 01:41:03 +08:00
|
|
|
/*D:010
|
|
|
|
* Drivers
|
|
|
|
*
|
|
|
|
* The Guest needs devices to do anything useful. Since we don't let it touch
|
|
|
|
* real devices (think of the damage it could do!) we provide virtual devices.
|
2015-02-11 12:52:01 +08:00
|
|
|
* We emulate a PCI bus with virtio devices on it; we used to have our own
|
|
|
|
* lguest bus which was far simpler, but this tests the virtio 1.0 standard.
|
2007-07-27 01:41:03 +08:00
|
|
|
*
|
2008-03-29 00:05:53 +08:00
|
|
|
* Virtio devices are also used by kvm, so we can simply reuse their optimized
|
|
|
|
* device drivers. And one day when everyone uses virtio, my plan will be
|
|
|
|
* complete. Bwahahahah!
|
2009-07-31 06:03:45 +08:00
|
|
|
*/
|
2007-07-19 16:49:23 +08:00
|
|
|
|
|
|
|
/* Write command first word is a request. */
|
|
|
|
enum lguest_req
|
|
|
|
{
|
2008-09-29 12:40:07 +08:00
|
|
|
LHREQ_INITIALIZE, /* + base, pfnlimit, start */
|
2007-10-22 09:24:10 +08:00
|
|
|
LHREQ_GETDMA, /* No longer used */
|
2007-07-19 16:49:23 +08:00
|
|
|
LHREQ_IRQ, /* + irq */
|
2009-06-13 12:27:10 +08:00
|
|
|
LHREQ_BREAK, /* No longer used */
|
2009-06-13 12:27:09 +08:00
|
|
|
LHREQ_EVENTFD, /* + address, fd. */
|
2015-02-11 12:45:09 +08:00
|
|
|
LHREQ_GETREG, /* + offset within struct pt_regs (then read value). */
|
|
|
|
LHREQ_SETREG, /* + offset within struct pt_regs, value. */
|
2015-02-11 12:45:09 +08:00
|
|
|
LHREQ_TRAP, /* + trap number to deliver to guest. */
|
2007-07-19 16:49:23 +08:00
|
|
|
};
|
2008-12-30 23:25:58 +08:00
|
|
|
|
2015-02-11 12:45:09 +08:00
|
|
|
/*
|
|
|
|
* This is what read() of the lguest fd populates. trap ==
|
|
|
|
* LGUEST_TRAP_ENTRY for an LHCALL_NOTIFY (addr is the
|
|
|
|
* argument), 14 for a page fault in the MMIO region (addr is
|
|
|
|
* the trap address, insn is the instruction), or 13 for a GPF
|
|
|
|
* (insn is the instruction).
|
|
|
|
*/
|
|
|
|
struct lguest_pending {
|
|
|
|
__u8 trap;
|
|
|
|
__u8 insn[7];
|
|
|
|
__u32 addr;
|
|
|
|
};
|
2007-10-25 12:12:20 +08:00
|
|
|
#endif /* _LINUX_LGUEST_LAUNCHER */
|