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