4 #define KQEMU_MAJOR 250
6 #define KQEMU_VERSION 0x010000
8 struct kqemu_segment_cache {
15 struct kqemu_cpu_state {
20 uint32_t dummy0, dummy1, dumm2, dummy3, dummy4;
22 struct kqemu_segment_cache segs[6]; /* selector values */
23 struct kqemu_segment_cache ldt;
24 struct kqemu_segment_cache tr;
25 struct kqemu_segment_cache gdt; /* only base and limit are used */
26 struct kqemu_segment_cache idt; /* only base and limit are used */
42 int cpl; /* currently only 3 */
44 uint32_t error_code; /* error_code when exiting with an exception */
45 uint32_t next_eip; /* next eip value when exiting with an interrupt */
46 unsigned int nb_pages_to_flush; /* number of pages to flush,
47 KQEMU_FLUSH_ALL means full flush */
48 #define KQEMU_MAX_PAGES_TO_FLUSH 512
49 #define KQEMU_FLUSH_ALL (KQEMU_MAX_PAGES_TO_FLUSH + 1)
53 uint8_t *ram_base; /* must be page aligned */
54 unsigned long ram_size; /* must be multiple of 4 KB */
55 uint8_t *ram_dirty; /* must be page aligned */
56 uint32_t **phys_to_ram_map; /* must be page aligned */
57 unsigned long *pages_to_flush; /* must be page aligned */
60 #define KQEMU_RET_ABORT (-1)
61 #define KQEMU_RET_EXCEPTION 0x0000 /* 8 low order bit are the exception */
62 #define KQEMU_RET_INT 0x0100 /* 8 low order bit are the interrupt */
63 #define KQEMU_RET_SOFTMMU 0x0200 /* emulation needed (I/O or
65 #define KQEMU_RET_INTR 0x0201 /* interrupted by a signal */
67 #define KQEMU_EXEC _IOWR('q', 1, struct kqemu_cpu_state)
68 #define KQEMU_INIT _IOW('q', 2, struct kqemu_init)
69 #define KQEMU_GET_VERSION _IOR('q', 3, int)
74 #define CDECL __attribute__((regparm(0)))
76 struct kqemu_state * CDECL kqemu_init(struct kqemu_init *d, int max_locked_pages);
77 struct kqemu_cpu_state * CDECL kqemu_get_cpu_state(struct kqemu_state *s);
78 long CDECL kqemu_exec(struct kqemu_state *s);
79 void CDECL kqemu_delete(struct kqemu_state *s);
82 unsigned long CDECL kqemu_lock_user_page(unsigned long user_addr);
83 void CDECL kqemu_unlock_user_page(unsigned long page_index);
85 unsigned long CDECL kqemu_alloc_zeroed_page(void);
86 void CDECL kqemu_free_page(unsigned long page_index);
87 void * CDECL kqemu_page_kaddr(unsigned long page_index);
89 void * CDECL kqemu_vmalloc(unsigned int size);
90 void CDECL kqemu_vfree(void *ptr);
91 unsigned long CDECL kqemu_vmalloc_to_phys(const void *vaddr);
93 int CDECL kqemu_schedule(void);
95 void CDECL kqemu_log(const char *fmt, ...);