]>
Commit | Line | Data |
---|---|---|
d7e28ffe RR |
1 | #ifndef _ASM_LGUEST_USER |
2 | #define _ASM_LGUEST_USER | |
3 | /* Everything the "lguest" userspace program needs to know. */ | |
b45d8cb0 | 4 | #include <linux/types.h> |
d7e28ffe RR |
5 | /* They can register up to 32 arrays of lguest_dma. */ |
6 | #define LGUEST_MAX_DMA 32 | |
7 | /* At most we can dma 16 lguest_dma in one op. */ | |
8 | #define LGUEST_MAX_DMA_SECTIONS 16 | |
9 | ||
10 | /* How many devices? Assume each one wants up to two dma arrays per device. */ | |
11 | #define LGUEST_MAX_DEVICES (LGUEST_MAX_DMA/2) | |
12 | ||
d7e28ffe RR |
13 | /* Where the Host expects the Guest to SEND_DMA console output to. */ |
14 | #define LGUEST_CONSOLE_DMA_KEY 0 | |
15 | ||
e2c97843 RR |
16 | /*D:010 |
17 | * Drivers | |
18 | * | |
19 | * The Guest needs devices to do anything useful. Since we don't let it touch | |
20 | * real devices (think of the damage it could do!) we provide virtual devices. | |
21 | * We could emulate a PCI bus with various devices on it, but that is a fairly | |
22 | * complex burden for the Host and suboptimal for the Guest, so we have our own | |
23 | * "lguest" bus and simple drivers. | |
24 | * | |
19f1537b RR |
25 | * Devices are described by a simplified ID, a status byte, and some "config" |
26 | * bytes which describe this device's configuration. This is placed by the | |
27 | * Launcher just above the top of physical memory: | |
e2c97843 | 28 | */ |
d7e28ffe | 29 | struct lguest_device_desc { |
19f1537b RR |
30 | /* The device type: console, network, disk etc. Type 0 terminates. */ |
31 | __u8 type; | |
32 | /* The number of bytes of the config array. */ | |
33 | __u8 config_len; | |
34 | /* A status byte, written by the Guest. */ | |
35 | __u8 status; | |
36 | __u8 config[0]; | |
37 | }; | |
d7e28ffe | 38 | |
19f1537b RR |
39 | /*D:135 This is how we expect the device configuration field for a virtqueue |
40 | * (type VIRTIO_CONFIG_F_VIRTQUEUE) to be laid out: */ | |
41 | struct lguest_vqconfig { | |
42 | /* The number of entries in the virtio_ring */ | |
43 | __u16 num; | |
44 | /* The interrupt we get when something happens. */ | |
45 | __u16 irq; | |
46 | /* The page number of the virtio ring for this device. */ | |
b45d8cb0 | 47 | __u32 pfn; |
d7e28ffe | 48 | }; |
e2c97843 | 49 | /*:*/ |
d7e28ffe RR |
50 | |
51 | /* Write command first word is a request. */ | |
52 | enum lguest_req | |
53 | { | |
54 | LHREQ_INITIALIZE, /* + pfnlimit, pgdir, start, pageoffset */ | |
15045275 | 55 | LHREQ_GETDMA, /* No longer used */ |
d7e28ffe RR |
56 | LHREQ_IRQ, /* + irq */ |
57 | LHREQ_BREAK, /* + on/off flag (on blocks until someone does off) */ | |
58 | }; | |
59 | #endif /* _ASM_LGUEST_USER */ |