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.h
Go to the documentation of this file.
1
/*
2
* Things the lguest guest needs to know. Note: like all lguest interfaces,
3
* this is subject to wild and random change between versions.
4
*/
5
#ifndef _LINUX_LGUEST_H
6
#define _LINUX_LGUEST_H
7
8
#ifndef __ASSEMBLY__
9
#include <linux/time.h>
10
#include <asm/irq.h>
11
#include <
asm/lguest_hcall.h
>
12
13
#define LG_CLOCK_MIN_DELTA 100UL
14
#define LG_CLOCK_MAX_DELTA ULONG_MAX
15
16
/*G:031
17
* The second method of communicating with the Host is to via "struct
18
* lguest_data". Once the Guest's initialization hypercall tells the Host where
19
* this is, the Guest and Host both publish information in it.
20
:*/
21
struct
lguest_data
{
22
/*
23
* 512 == enabled (same as eflags in normal hardware). The Guest
24
* changes interrupts so often that a hypercall is too slow.
25
*/
26
unsigned
int
irq_enabled
;
27
/* Fine-grained interrupt disabling by the Guest */
28
DECLARE_BITMAP
(blocked_interrupts,
LGUEST_IRQS
);
29
30
/*
31
* The Host writes the virtual address of the last page fault here,
32
* which saves the Guest a hypercall. CR2 is the native register where
33
* this address would normally be found.
34
*/
35
unsigned
long
cr2
;
36
37
/* Wallclock time set by the Host. */
38
struct
timespec
time
;
39
40
/*
41
* Interrupt pending set by the Host. The Guest should do a hypercall
42
* if it re-enables interrupts and sees this set (to X86_EFLAGS_IF).
43
*/
44
int
irq_pending
;
45
46
/*
47
* Async hypercall ring. Instead of directly making hypercalls, we can
48
* place them in here for processing the next time the Host wants.
49
* This batching can be quite efficient.
50
*/
51
52
/* 0xFF == done (set by Host), 0 == pending (set by Guest). */
53
u8
hcall_status
[
LHCALL_RING_SIZE
];
54
/* The actual registers for the hypercalls. */
55
struct
hcall_args
hcalls
[
LHCALL_RING_SIZE
];
56
57
/* Fields initialized by the Host at boot: */
58
/* Memory not to try to access */
59
unsigned
long
reserve_mem
;
60
/* KHz for the TSC clock. */
61
u32
tsc_khz
;
62
63
/* Fields initialized by the Guest at boot: */
64
/* Instruction range to suppress interrupts even if enabled */
65
unsigned
long
noirq_start
,
noirq_end
;
66
/* Address above which page tables are all identical. */
67
unsigned
long
kernel_address
;
68
/* The vector to try to use for system calls (0x40 or 0x80). */
69
unsigned
int
syscall_vec
;
70
};
71
extern
struct
lguest_data
lguest_data
;
72
#endif
/* __ASSEMBLY__ */
73
#endif
/* _LINUX_LGUEST_H */
Generated on Thu Jan 10 2013 13:20:05 for Linux Kernel by
1.8.2