Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
lguest_launcher.h
Go to the documentation of this file.
1
#ifndef _LINUX_LGUEST_LAUNCHER
2
#define _LINUX_LGUEST_LAUNCHER
3
/* Everything the "lguest" userspace program needs to know. */
4
#include <linux/types.h>
5
6
/*D:010
7
* Drivers
8
*
9
* The Guest needs devices to do anything useful. Since we don't let it touch
10
* real devices (think of the damage it could do!) we provide virtual devices.
11
* We could emulate a PCI bus with various devices on it, but that is a fairly
12
* complex burden for the Host and suboptimal for the Guest, so we have our own
13
* simple lguest bus and we use "virtio" drivers. These drivers need a set of
14
* routines from us which will actually do the virtual I/O, but they handle all
15
* the net/block/console stuff themselves. This means that if we want to add
16
* a new device, we simply need to write a new virtio driver and create support
17
* for it in the Launcher: this code won't need to change.
18
*
19
* Virtio devices are also used by kvm, so we can simply reuse their optimized
20
* device drivers. And one day when everyone uses virtio, my plan will be
21
* complete. Bwahahahah!
22
*
23
* Devices are described by a simplified ID, a status byte, and some "config"
24
* bytes which describe this device's configuration. This is placed by the
25
* Launcher just above the top of physical memory:
26
*/
27
struct
lguest_device_desc
{
28
/* The device type: console, network, disk etc. Type 0 terminates. */
29
__u8
type
;
30
/* The number of virtqueues (first in config array) */
31
__u8
num_vq
;
32
/*
33
* The number of bytes of feature bits. Multiply by 2: one for host
34
* features and one for Guest acknowledgements.
35
*/
36
__u8
feature_len
;
37
/* The number of bytes of the config array after virtqueues. */
38
__u8
config_len
;
39
/* A status byte, written by the Guest. */
40
__u8
status
;
41
__u8
config
[0];
42
};
43
44
/*D:135
45
* This is how we expect the device configuration field for a virtqueue
46
* to be laid out in config space.
47
*/
48
struct
lguest_vqconfig
{
49
/* The number of entries in the virtio_ring */
50
__u16
num
;
51
/* The interrupt we get when something happens. */
52
__u16
irq
;
53
/* The page number of the virtio ring for this device. */
54
__u32
pfn
;
55
};
56
/*:*/
57
58
/* Write command first word is a request. */
59
enum
lguest_req
60
{
61
LHREQ_INITIALIZE
,
/* + base, pfnlimit, start */
62
LHREQ_GETDMA
,
/* No longer used */
63
LHREQ_IRQ
,
/* + irq */
64
LHREQ_BREAK
,
/* No longer used */
65
LHREQ_EVENTFD
,
/* + address, fd. */
66
};
67
68
/*
69
* The alignment to use between consumer and producer parts of vring.
70
* x86 pagesize for historical reasons.
71
*/
72
#define LGUEST_VRING_ALIGN 4096
73
#endif
/* _LINUX_LGUEST_LAUNCHER */
Generated on Thu Jan 10 2013 14:51:47 for Linux Kernel by
1.8.2