From 625efab1cd3d4da4634dfe26df6b4005385397e2 Mon Sep 17 00:00:00 2001 From: Jes Sorensen Date: Mon, 22 Oct 2007 11:03:28 +1000 Subject: Move i386 part of core.c to x86/core.c. Separate i386 architecture specific from core.c and move it to x86/core.c and add x86/lguest.h header file to match. Signed-off-by: Jes Sorensen Signed-off-by: Rusty Russell --- drivers/lguest/lg.h | 63 ++++++++++------------------------------------------- 1 file changed, 11 insertions(+), 52 deletions(-) (limited to 'drivers/lguest/lg.h') diff --git a/drivers/lguest/lg.h b/drivers/lguest/lg.h index c1ca127ddec..203d3100c3b 100644 --- a/drivers/lguest/lg.h +++ b/drivers/lguest/lg.h @@ -1,13 +1,6 @@ #ifndef _LGUEST_H #define _LGUEST_H -#include - -#define GDT_ENTRY_LGUEST_CS 10 -#define GDT_ENTRY_LGUEST_DS 11 -#define LGUEST_CS (GDT_ENTRY_LGUEST_CS * 8) -#define LGUEST_DS (GDT_ENTRY_LGUEST_DS * 8) - #ifndef __ASSEMBLY__ #include #include @@ -18,34 +11,12 @@ #include #include #include -#include "irq_vectors.h" - -#define GUEST_PL 1 -struct lguest_regs -{ - /* Manually saved part. */ - unsigned long ebx, ecx, edx; - unsigned long esi, edi, ebp; - unsigned long gs; - unsigned long eax; - unsigned long fs, ds, es; - unsigned long trapnum, errcode; - /* Trap pushed part */ - unsigned long eip; - unsigned long cs; - unsigned long eflags; - unsigned long esp; - unsigned long ss; -}; +#include void free_pagetables(void); int init_pagetables(struct page **switcher_page, unsigned int pages); -/* Full 4G segment descriptors, suitable for CS and DS. */ -#define FULL_EXEC_SEGMENT ((struct desc_struct){0x0000ffff, 0x00cf9b00}) -#define FULL_SEGMENT ((struct desc_struct){0x0000ffff, 0x00cf9300}) - struct lguest_dma_info { struct list_head list; @@ -98,23 +69,6 @@ struct pgdir spgd_t *pgdir; }; -/* This is a guest-specific page (mapped ro) into the guest. */ -struct lguest_ro_state -{ - /* Host information we need to restore when we switch back. */ - u32 host_cr3; - struct Xgt_desc_struct host_idt_desc; - struct Xgt_desc_struct host_gdt_desc; - u32 host_sp; - - /* Fields which are used when guest is running. */ - struct Xgt_desc_struct guest_idt_desc; - struct Xgt_desc_struct guest_gdt_desc; - struct i386_hw_tss guest_tss; - struct desc_struct guest_idt[IDT_ENTRIES]; - struct desc_struct guest_gdt[GDT_ENTRIES]; -}; - /* We have two pages shared with guests, per cpu. */ struct lguest_pages { @@ -180,11 +134,7 @@ struct lguest /* Dead? */ const char *dead; - /* The GDT entries copied into lguest_ro_state when running. */ - struct desc_struct gdt[GDT_ENTRIES]; - - /* The IDT entries: some copied into lguest_ro_state when running. */ - struct desc_struct idt[IDT_ENTRIES]; + struct lguest_arch arch; /* Virtual clock device */ struct hrtimer hrt; @@ -239,6 +189,15 @@ void map_switcher_in_guest(struct lguest *lg, struct lguest_pages *pages); int demand_page(struct lguest *info, unsigned long cr2, int errcode); void pin_page(struct lguest *lg, unsigned long vaddr); +/* /core.c: */ +void lguest_arch_host_init(void); +void lguest_arch_host_fini(void); +void lguest_arch_run_guest(struct lguest *lg); +void lguest_arch_handle_trap(struct lguest *lg); + +/* /switcher.S: */ +extern char start_switcher_text[], end_switcher_text[], switch_to_guest[]; + /* lguest_user.c: */ int lguest_device_init(void); void lguest_device_remove(void); -- cgit v1.2.3