Blame view

include/linux/lguest_launcher.h 2.47 KB
7334492b5   Rusty Russell   lguest: clean up ...
1
2
  #ifndef _LINUX_LGUEST_LAUNCHER
  #define _LINUX_LGUEST_LAUNCHER
d7e28ffe6   Rusty Russell   lguest: the host ...
3
  /* Everything the "lguest" userspace program needs to know. */
b45d8cb05   Rusty Russell   Make lguest_launc...
4
  #include <linux/types.h>
d7e28ffe6   Rusty Russell   lguest: the host ...
5

e2c978432   Rusty Russell   lguest: documenta...
6
7
8
9
10
11
12
  /*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.
   * We could emulate a PCI bus with various devices on it, but that is a fairly
   * complex burden for the Host and suboptimal for the Guest, so we have our own
e1e72965e   Rusty Russell   lguest: documenta...
13
14
15
16
17
   * simple lguest bus and we use "virtio" drivers.  These drivers need a set of
   * routines from us which will actually do the virtual I/O, but they handle all
   * the net/block/console stuff themselves.  This means that if we want to add
   * a new device, we simply need to write a new virtio driver and create support
   * for it in the Launcher: this code won't need to change.
e2c978432   Rusty Russell   lguest: documenta...
18
   *
a6bd8e130   Rusty Russell   lguest: comment d...
19
20
21
22
   * 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!
   *
19f1537b7   Rusty Russell   Lguest support fo...
23
24
25
   * Devices are described by a simplified ID, a status byte, and some "config"
   * bytes which describe this device's configuration.  This is placed by the
   * Launcher just above the top of physical memory:
e2c978432   Rusty Russell   lguest: documenta...
26
   */
d7e28ffe6   Rusty Russell   lguest: the host ...
27
  struct lguest_device_desc {
19f1537b7   Rusty Russell   Lguest support fo...
28
29
  	/* The device type: console, network, disk etc.  Type 0 terminates. */
  	__u8 type;
a586d4f60   Rusty Russell   virtio: simplify ...
30
31
  	/* The number of virtqueues (first in config array) */
  	__u8 num_vq;
2e04ef769   Rusty Russell   lguest: fix comme...
32
33
34
35
  	/*
  	 * The number of bytes of feature bits.  Multiply by 2: one for host
  	 * features and one for Guest acknowledgements.
  	 */
a586d4f60   Rusty Russell   virtio: simplify ...
36
37
  	__u8 feature_len;
  	/* The number of bytes of the config array after virtqueues. */
19f1537b7   Rusty Russell   Lguest support fo...
38
39
40
41
42
  	__u8 config_len;
  	/* A status byte, written by the Guest. */
  	__u8 status;
  	__u8 config[0];
  };
d7e28ffe6   Rusty Russell   lguest: the host ...
43

2e04ef769   Rusty Russell   lguest: fix comme...
44
45
46
47
  /*D:135
   * This is how we expect the device configuration field for a virtqueue
   * to be laid out in config space.
   */
19f1537b7   Rusty Russell   Lguest support fo...
48
49
50
51
52
53
  struct lguest_vqconfig {
  	/* The number of entries in the virtio_ring */
  	__u16 num;
  	/* The interrupt we get when something happens. */
  	__u16 irq;
  	/* The page number of the virtio ring for this device. */
b45d8cb05   Rusty Russell   Make lguest_launc...
54
  	__u32 pfn;
d7e28ffe6   Rusty Russell   lguest: the host ...
55
  };
e2c978432   Rusty Russell   lguest: documenta...
56
  /*:*/
d7e28ffe6   Rusty Russell   lguest: the host ...
57
58
59
60
  
  /* Write command first word is a request. */
  enum lguest_req
  {
58a245664   Matias Zabaljauregui   lguest: move the ...
61
  	LHREQ_INITIALIZE, /* + base, pfnlimit, start */
15045275c   Rusty Russell   Remove old lguest...
62
  	LHREQ_GETDMA, /* No longer used */
d7e28ffe6   Rusty Russell   lguest: the host ...
63
  	LHREQ_IRQ, /* + irq */
5dac051bc   Rusty Russell   lguest: remove ob...
64
  	LHREQ_BREAK, /* No longer used */
df60aeef4   Rusty Russell   lguest: use event...
65
  	LHREQ_EVENTFD, /* + address, fd. */
d7e28ffe6   Rusty Russell   lguest: the host ...
66
  };
2966af73e   Rusty Russell   virtio: use LGUES...
67

2e04ef769   Rusty Russell   lguest: fix comme...
68
69
70
71
  /*
   * The alignment to use between consumer and producer parts of vring.
   * x86 pagesize for historical reasons.
   */
2966af73e   Rusty Russell   virtio: use LGUES...
72
  #define LGUEST_VRING_ALIGN	4096
7334492b5   Rusty Russell   lguest: clean up ...
73
  #endif /* _LINUX_LGUEST_LAUNCHER */