target_syscall.h (4845B)
1/* 2 * i386 system call definitions 3 * 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, see <http://www.gnu.org/licenses/>. 17 */ 18#ifndef TARGET_SYSCALL_H 19#define TARGET_SYSCALL_H 20 21/* default linux values for the selectors */ 22#define __USER_CS (0x23) 23#define __USER_DS (0x2B) 24 25struct target_pt_regs { 26 long ebx; 27 long ecx; 28 long edx; 29 long esi; 30 long edi; 31 long ebp; 32 long eax; 33 int xds; 34 int xes; 35 long orig_eax; 36 long eip; 37 int xcs; 38 long eflags; 39 long esp; 40 int xss; 41}; 42 43/* ioctls */ 44 45#define TARGET_LDT_ENTRIES 8192 46#define TARGET_LDT_ENTRY_SIZE 8 47 48#define TARGET_GDT_ENTRIES 9 49#define TARGET_GDT_ENTRY_TLS_ENTRIES 3 50#define TARGET_GDT_ENTRY_TLS_MIN 6 51#define TARGET_GDT_ENTRY_TLS_MAX (TARGET_GDT_ENTRY_TLS_MIN + TARGET_GDT_ENTRY_TLS_ENTRIES - 1) 52 53struct target_modify_ldt_ldt_s { 54 unsigned int entry_number; 55 abi_ulong base_addr; 56 unsigned int limit; 57 unsigned int flags; 58}; 59 60/* vm86 defines */ 61 62#define TARGET_BIOSSEG 0x0f000 63 64#define TARGET_CPU_086 0 65#define TARGET_CPU_186 1 66#define TARGET_CPU_286 2 67#define TARGET_CPU_386 3 68#define TARGET_CPU_486 4 69#define TARGET_CPU_586 5 70 71#define TARGET_VM86_SIGNAL 0 /* return due to signal */ 72#define TARGET_VM86_UNKNOWN 1 /* unhandled GP fault - IO-instruction or similar */ 73#define TARGET_VM86_INTx 2 /* int3/int x instruction (ARG = x) */ 74#define TARGET_VM86_STI 3 /* sti/popf/iret instruction enabled virtual interrupts */ 75 76/* 77 * Additional return values when invoking new vm86() 78 */ 79#define TARGET_VM86_PICRETURN 4 /* return due to pending PIC request */ 80#define TARGET_VM86_TRAP 6 /* return due to DOS-debugger request */ 81 82/* 83 * function codes when invoking new vm86() 84 */ 85#define TARGET_VM86_PLUS_INSTALL_CHECK 0 86#define TARGET_VM86_ENTER 1 87#define TARGET_VM86_ENTER_NO_BYPASS 2 88#define TARGET_VM86_REQUEST_IRQ 3 89#define TARGET_VM86_FREE_IRQ 4 90#define TARGET_VM86_GET_IRQ_BITS 5 91#define TARGET_VM86_GET_AND_RESET_IRQ 6 92 93/* 94 * This is the stack-layout seen by the user space program when we have 95 * done a translation of "SAVE_ALL" from vm86 mode. The real kernel layout 96 * is 'kernel_vm86_regs' (see below). 97 */ 98 99struct target_vm86_regs { 100/* 101 * normal regs, with special meaning for the segment descriptors.. 102 */ 103 abi_long ebx; 104 abi_long ecx; 105 abi_long edx; 106 abi_long esi; 107 abi_long edi; 108 abi_long ebp; 109 abi_long eax; 110 abi_long __null_ds; 111 abi_long __null_es; 112 abi_long __null_fs; 113 abi_long __null_gs; 114 abi_long orig_eax; 115 abi_long eip; 116 unsigned short cs, __csh; 117 abi_long eflags; 118 abi_long esp; 119 unsigned short ss, __ssh; 120/* 121 * these are specific to v86 mode: 122 */ 123 unsigned short es, __esh; 124 unsigned short ds, __dsh; 125 unsigned short fs, __fsh; 126 unsigned short gs, __gsh; 127}; 128 129struct target_revectored_struct { 130 abi_ulong __map[8]; /* 256 bits */ 131}; 132 133struct target_vm86_struct { 134 struct target_vm86_regs regs; 135 abi_ulong flags; 136 abi_ulong screen_bitmap; 137 abi_ulong cpu_type; 138 struct target_revectored_struct int_revectored; 139 struct target_revectored_struct int21_revectored; 140}; 141 142/* 143 * flags masks 144 */ 145#define TARGET_VM86_SCREEN_BITMAP 0x0001 146 147struct target_vm86plus_info_struct { 148 abi_ulong flags; 149#define TARGET_force_return_for_pic (1 << 0) 150#define TARGET_vm86dbg_active (1 << 1) /* for debugger */ 151#define TARGET_vm86dbg_TFpendig (1 << 2) /* for debugger */ 152#define TARGET_is_vm86pus (1 << 31) /* for vm86 internal use */ 153 unsigned char vm86dbg_intxxtab[32]; /* for debugger */ 154}; 155 156struct target_vm86plus_struct { 157 struct target_vm86_regs regs; 158 abi_ulong flags; 159 abi_ulong screen_bitmap; 160 abi_ulong cpu_type; 161 struct target_revectored_struct int_revectored; 162 struct target_revectored_struct int21_revectored; 163 struct target_vm86plus_info_struct vm86plus; 164}; 165 166/* FreeBSD sysarch(2) */ 167#define TARGET_FREEBSD_I386_GET_LDT 0 168#define TARGET_FREEBSD_I386_SET_LDT 1 169 /* I386_IOPL */ 170#define TARGET_FREEBSD_I386_GET_IOPERM 3 171#define TARGET_FREEBSD_I386_SET_IOPERM 4 172 /* xxxxx */ 173#define TARGET_FREEBSD_I386_VM86 6 174#define TARGET_FREEBSD_I386_GET_FSBASE 7 175#define TARGET_FREEBSD_I386_SET_FSBASE 8 176#define TARGET_FREEBSD_I386_GET_GSBASE 9 177#define TARGET_FREEBSD_I386_SET_GSBASE 10 178 179 180#define UNAME_MACHINE "i386" 181#define TARGET_HW_MACHINE UNAME_MACHINE 182#define TARGET_HW_MACHINE_ARCH UNAME_MACHINE 183 184#endif /* TARGET_SYSCALL_H */