1/* default linux values for the selectors */ 2#define __USER_CS (0x23) 3#define __USER_DS (0x2B) 4 5struct target_pt_regs { 6 long ebx; 7 long ecx; 8 long edx; 9 long esi; 10 long edi; 11 long ebp; 12 long eax; 13 int xds; 14 int xes; 15 long orig_eax; 16 long eip; 17 int xcs; 18 long eflags; 19 long esp; 20 int xss; 21}; 22 23/* ioctls */ 24 25#define TARGET_LDT_ENTRIES 8192 26#define TARGET_LDT_ENTRY_SIZE 8 27 28#define TARGET_GDT_ENTRIES 9 29#define TARGET_GDT_ENTRY_TLS_ENTRIES 3 30#define TARGET_GDT_ENTRY_TLS_MIN 6 31#define TARGET_GDT_ENTRY_TLS_MAX (TARGET_GDT_ENTRY_TLS_MIN + TARGET_GDT_ENTRY_TLS_ENTRIES - 1) 32 33struct target_modify_ldt_ldt_s { 34 unsigned int entry_number; 35 abi_ulong base_addr; 36 unsigned int limit; 37 unsigned int flags; 38}; 39 40/* vm86 defines */ 41 42#define TARGET_BIOSSEG 0x0f000 43 44#define TARGET_CPU_086 0 45#define TARGET_CPU_186 1 46#define TARGET_CPU_286 2 47#define TARGET_CPU_386 3 48#define TARGET_CPU_486 4 49#define TARGET_CPU_586 5 50 51#define TARGET_VM86_SIGNAL 0 /* return due to signal */ 52#define TARGET_VM86_UNKNOWN 1 /* unhandled GP fault - IO-instruction or similar */ 53#define TARGET_VM86_INTx 2 /* int3/int x instruction (ARG = x) */ 54#define TARGET_VM86_STI 3 /* sti/popf/iret instruction enabled virtual interrupts */ 55 56/* 57 * Additional return values when invoking new vm86() 58 */ 59#define TARGET_VM86_PICRETURN 4 /* return due to pending PIC request */ 60#define TARGET_VM86_TRAP 6 /* return due to DOS-debugger request */ 61 62/* 63 * function codes when invoking new vm86() 64 */ 65#define TARGET_VM86_PLUS_INSTALL_CHECK 0 66#define TARGET_VM86_ENTER 1 67#define TARGET_VM86_ENTER_NO_BYPASS 2 68#define TARGET_VM86_REQUEST_IRQ 3 69#define TARGET_VM86_FREE_IRQ 4 70#define TARGET_VM86_GET_IRQ_BITS 5 71#define TARGET_VM86_GET_AND_RESET_IRQ 6 72 73/* 74 * This is the stack-layout seen by the user space program when we have 75 * done a translation of "SAVE_ALL" from vm86 mode. The real kernel layout 76 * is 'kernel_vm86_regs' (see below). 77 */ 78 79struct target_vm86_regs { 80/* 81 * normal regs, with special meaning for the segment descriptors.. 82 */ 83 abi_long ebx; 84 abi_long ecx; 85 abi_long edx; 86 abi_long esi; 87 abi_long edi; 88 abi_long ebp; 89 abi_long eax; 90 abi_long __null_ds; 91 abi_long __null_es; 92 abi_long __null_fs; 93 abi_long __null_gs; 94 abi_long orig_eax; 95 abi_long eip; 96 unsigned short cs, __csh; 97 abi_long eflags; 98 abi_long esp; 99 unsigned short ss, __ssh; 100/* 101 * these are specific to v86 mode: 102 */ 103 unsigned short es, __esh; 104 unsigned short ds, __dsh; 105 unsigned short fs, __fsh; 106 unsigned short gs, __gsh; 107}; 108 109struct target_revectored_struct { 110 abi_ulong __map[8]; /* 256 bits */ 111}; 112 113struct target_vm86_struct { 114 struct target_vm86_regs regs; 115 abi_ulong flags; 116 abi_ulong screen_bitmap; 117 abi_ulong cpu_type; 118 struct target_revectored_struct int_revectored; 119 struct target_revectored_struct int21_revectored; 120}; 121 122/* 123 * flags masks 124 */ 125#define TARGET_VM86_SCREEN_BITMAP 0x0001 126 127struct target_vm86plus_info_struct { 128 abi_ulong flags; 129#define TARGET_force_return_for_pic (1 << 0) 130#define TARGET_vm86dbg_active (1 << 1) /* for debugger */ 131#define TARGET_vm86dbg_TFpendig (1 << 2) /* for debugger */ 132#define TARGET_is_vm86pus (1 << 31) /* for vm86 internal use */ 133 unsigned char vm86dbg_intxxtab[32]; /* for debugger */ 134}; 135 136struct target_vm86plus_struct { 137 struct target_vm86_regs regs; 138 abi_ulong flags; 139 abi_ulong screen_bitmap; 140 abi_ulong cpu_type; 141 struct target_revectored_struct int_revectored; 142 struct target_revectored_struct int21_revectored; 143 struct target_vm86plus_info_struct vm86plus; 144}; 145 146/* FreeBSD sysarch(2) */ 147#define TARGET_FREEBSD_I386_GET_LDT 0 148#define TARGET_FREEBSD_I386_SET_LDT 1 149 /* I386_IOPL */ 150#define TARGET_FREEBSD_I386_GET_IOPERM 3 151#define TARGET_FREEBSD_I386_SET_IOPERM 4 152 /* xxxxx */ 153#define TARGET_FREEBSD_I386_VM86 6 154#define TARGET_FREEBSD_I386_GET_FSBASE 7 155#define TARGET_FREEBSD_I386_SET_FSBASE 8 156#define TARGET_FREEBSD_I386_GET_GSBASE 9 157#define TARGET_FREEBSD_I386_SET_GSBASE 10 158 159 160#define UNAME_MACHINE "i386" 161 162