1*ea1ab4cfSStacey Son /* 2*ea1ab4cfSStacey Son * i386 system call definitions 3*ea1ab4cfSStacey Son * 4*ea1ab4cfSStacey Son * 5*ea1ab4cfSStacey Son * This program is free software; you can redistribute it and/or modify 6*ea1ab4cfSStacey Son * it under the terms of the GNU General Public License as published by 7*ea1ab4cfSStacey Son * the Free Software Foundation; either version 2 of the License, or 8*ea1ab4cfSStacey Son * (at your option) any later version. 9*ea1ab4cfSStacey Son * 10*ea1ab4cfSStacey Son * This program is distributed in the hope that it will be useful, 11*ea1ab4cfSStacey Son * but WITHOUT ANY WARRANTY; without even the implied warranty of 12*ea1ab4cfSStacey Son * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13*ea1ab4cfSStacey Son * GNU General Public License for more details. 14*ea1ab4cfSStacey Son * 15*ea1ab4cfSStacey Son * You should have received a copy of the GNU General Public License 16*ea1ab4cfSStacey Son * along with this program; if not, see <http://www.gnu.org/licenses/>. 17*ea1ab4cfSStacey Son */ 180c6940d0SLluís Vilanova #ifndef TARGET_SYSCALL_H 190c6940d0SLluís Vilanova #define TARGET_SYSCALL_H 200c6940d0SLluís Vilanova 2131fc12dfSblueswir1 /* default linux values for the selectors */ 2231fc12dfSblueswir1 #define __USER_CS (0x23) 2331fc12dfSblueswir1 #define __USER_DS (0x2B) 2431fc12dfSblueswir1 2531fc12dfSblueswir1 struct target_pt_regs { 2631fc12dfSblueswir1 long ebx; 2731fc12dfSblueswir1 long ecx; 2831fc12dfSblueswir1 long edx; 2931fc12dfSblueswir1 long esi; 3031fc12dfSblueswir1 long edi; 3131fc12dfSblueswir1 long ebp; 3231fc12dfSblueswir1 long eax; 3331fc12dfSblueswir1 int xds; 3431fc12dfSblueswir1 int xes; 3531fc12dfSblueswir1 long orig_eax; 3631fc12dfSblueswir1 long eip; 3731fc12dfSblueswir1 int xcs; 3831fc12dfSblueswir1 long eflags; 3931fc12dfSblueswir1 long esp; 4031fc12dfSblueswir1 int xss; 4131fc12dfSblueswir1 }; 4231fc12dfSblueswir1 4331fc12dfSblueswir1 /* ioctls */ 4431fc12dfSblueswir1 4531fc12dfSblueswir1 #define TARGET_LDT_ENTRIES 8192 4631fc12dfSblueswir1 #define TARGET_LDT_ENTRY_SIZE 8 4731fc12dfSblueswir1 4831fc12dfSblueswir1 #define TARGET_GDT_ENTRIES 9 4931fc12dfSblueswir1 #define TARGET_GDT_ENTRY_TLS_ENTRIES 3 5031fc12dfSblueswir1 #define TARGET_GDT_ENTRY_TLS_MIN 6 5131fc12dfSblueswir1 #define TARGET_GDT_ENTRY_TLS_MAX (TARGET_GDT_ENTRY_TLS_MIN + TARGET_GDT_ENTRY_TLS_ENTRIES - 1) 5231fc12dfSblueswir1 5331fc12dfSblueswir1 struct target_modify_ldt_ldt_s { 5431fc12dfSblueswir1 unsigned int entry_number; 5531fc12dfSblueswir1 abi_ulong base_addr; 5631fc12dfSblueswir1 unsigned int limit; 5731fc12dfSblueswir1 unsigned int flags; 5831fc12dfSblueswir1 }; 5931fc12dfSblueswir1 6031fc12dfSblueswir1 /* vm86 defines */ 6131fc12dfSblueswir1 6231fc12dfSblueswir1 #define TARGET_BIOSSEG 0x0f000 6331fc12dfSblueswir1 6431fc12dfSblueswir1 #define TARGET_CPU_086 0 6531fc12dfSblueswir1 #define TARGET_CPU_186 1 6631fc12dfSblueswir1 #define TARGET_CPU_286 2 6731fc12dfSblueswir1 #define TARGET_CPU_386 3 6831fc12dfSblueswir1 #define TARGET_CPU_486 4 6931fc12dfSblueswir1 #define TARGET_CPU_586 5 7031fc12dfSblueswir1 7131fc12dfSblueswir1 #define TARGET_VM86_SIGNAL 0 /* return due to signal */ 7231fc12dfSblueswir1 #define TARGET_VM86_UNKNOWN 1 /* unhandled GP fault - IO-instruction or similar */ 7331fc12dfSblueswir1 #define TARGET_VM86_INTx 2 /* int3/int x instruction (ARG = x) */ 7431fc12dfSblueswir1 #define TARGET_VM86_STI 3 /* sti/popf/iret instruction enabled virtual interrupts */ 7531fc12dfSblueswir1 7631fc12dfSblueswir1 /* 7731fc12dfSblueswir1 * Additional return values when invoking new vm86() 7831fc12dfSblueswir1 */ 7931fc12dfSblueswir1 #define TARGET_VM86_PICRETURN 4 /* return due to pending PIC request */ 8031fc12dfSblueswir1 #define TARGET_VM86_TRAP 6 /* return due to DOS-debugger request */ 8131fc12dfSblueswir1 8231fc12dfSblueswir1 /* 8331fc12dfSblueswir1 * function codes when invoking new vm86() 8431fc12dfSblueswir1 */ 8531fc12dfSblueswir1 #define TARGET_VM86_PLUS_INSTALL_CHECK 0 8631fc12dfSblueswir1 #define TARGET_VM86_ENTER 1 8731fc12dfSblueswir1 #define TARGET_VM86_ENTER_NO_BYPASS 2 8831fc12dfSblueswir1 #define TARGET_VM86_REQUEST_IRQ 3 8931fc12dfSblueswir1 #define TARGET_VM86_FREE_IRQ 4 9031fc12dfSblueswir1 #define TARGET_VM86_GET_IRQ_BITS 5 9131fc12dfSblueswir1 #define TARGET_VM86_GET_AND_RESET_IRQ 6 9231fc12dfSblueswir1 9331fc12dfSblueswir1 /* 9431fc12dfSblueswir1 * This is the stack-layout seen by the user space program when we have 9531fc12dfSblueswir1 * done a translation of "SAVE_ALL" from vm86 mode. The real kernel layout 9631fc12dfSblueswir1 * is 'kernel_vm86_regs' (see below). 9731fc12dfSblueswir1 */ 9831fc12dfSblueswir1 9931fc12dfSblueswir1 struct target_vm86_regs { 10031fc12dfSblueswir1 /* 10131fc12dfSblueswir1 * normal regs, with special meaning for the segment descriptors.. 10231fc12dfSblueswir1 */ 10331fc12dfSblueswir1 abi_long ebx; 10431fc12dfSblueswir1 abi_long ecx; 10531fc12dfSblueswir1 abi_long edx; 10631fc12dfSblueswir1 abi_long esi; 10731fc12dfSblueswir1 abi_long edi; 10831fc12dfSblueswir1 abi_long ebp; 10931fc12dfSblueswir1 abi_long eax; 11031fc12dfSblueswir1 abi_long __null_ds; 11131fc12dfSblueswir1 abi_long __null_es; 11231fc12dfSblueswir1 abi_long __null_fs; 11331fc12dfSblueswir1 abi_long __null_gs; 11431fc12dfSblueswir1 abi_long orig_eax; 11531fc12dfSblueswir1 abi_long eip; 11631fc12dfSblueswir1 unsigned short cs, __csh; 11731fc12dfSblueswir1 abi_long eflags; 11831fc12dfSblueswir1 abi_long esp; 11931fc12dfSblueswir1 unsigned short ss, __ssh; 12031fc12dfSblueswir1 /* 12131fc12dfSblueswir1 * these are specific to v86 mode: 12231fc12dfSblueswir1 */ 12331fc12dfSblueswir1 unsigned short es, __esh; 12431fc12dfSblueswir1 unsigned short ds, __dsh; 12531fc12dfSblueswir1 unsigned short fs, __fsh; 12631fc12dfSblueswir1 unsigned short gs, __gsh; 12731fc12dfSblueswir1 }; 12831fc12dfSblueswir1 12931fc12dfSblueswir1 struct target_revectored_struct { 13031fc12dfSblueswir1 abi_ulong __map[8]; /* 256 bits */ 13131fc12dfSblueswir1 }; 13231fc12dfSblueswir1 13331fc12dfSblueswir1 struct target_vm86_struct { 13431fc12dfSblueswir1 struct target_vm86_regs regs; 13531fc12dfSblueswir1 abi_ulong flags; 13631fc12dfSblueswir1 abi_ulong screen_bitmap; 13731fc12dfSblueswir1 abi_ulong cpu_type; 13831fc12dfSblueswir1 struct target_revectored_struct int_revectored; 13931fc12dfSblueswir1 struct target_revectored_struct int21_revectored; 14031fc12dfSblueswir1 }; 14131fc12dfSblueswir1 14231fc12dfSblueswir1 /* 14331fc12dfSblueswir1 * flags masks 14431fc12dfSblueswir1 */ 14531fc12dfSblueswir1 #define TARGET_VM86_SCREEN_BITMAP 0x0001 14631fc12dfSblueswir1 14731fc12dfSblueswir1 struct target_vm86plus_info_struct { 14831fc12dfSblueswir1 abi_ulong flags; 14931fc12dfSblueswir1 #define TARGET_force_return_for_pic (1 << 0) 15031fc12dfSblueswir1 #define TARGET_vm86dbg_active (1 << 1) /* for debugger */ 15131fc12dfSblueswir1 #define TARGET_vm86dbg_TFpendig (1 << 2) /* for debugger */ 15231fc12dfSblueswir1 #define TARGET_is_vm86pus (1 << 31) /* for vm86 internal use */ 15331fc12dfSblueswir1 unsigned char vm86dbg_intxxtab[32]; /* for debugger */ 15431fc12dfSblueswir1 }; 15531fc12dfSblueswir1 15631fc12dfSblueswir1 struct target_vm86plus_struct { 15731fc12dfSblueswir1 struct target_vm86_regs regs; 15831fc12dfSblueswir1 abi_ulong flags; 15931fc12dfSblueswir1 abi_ulong screen_bitmap; 16031fc12dfSblueswir1 abi_ulong cpu_type; 16131fc12dfSblueswir1 struct target_revectored_struct int_revectored; 16231fc12dfSblueswir1 struct target_revectored_struct int21_revectored; 16331fc12dfSblueswir1 struct target_vm86plus_info_struct vm86plus; 16431fc12dfSblueswir1 }; 16531fc12dfSblueswir1 16678cfb07fSJuergen Lock /* FreeBSD sysarch(2) */ 16778cfb07fSJuergen Lock #define TARGET_FREEBSD_I386_GET_LDT 0 16878cfb07fSJuergen Lock #define TARGET_FREEBSD_I386_SET_LDT 1 16978cfb07fSJuergen Lock /* I386_IOPL */ 17078cfb07fSJuergen Lock #define TARGET_FREEBSD_I386_GET_IOPERM 3 17178cfb07fSJuergen Lock #define TARGET_FREEBSD_I386_SET_IOPERM 4 17278cfb07fSJuergen Lock /* xxxxx */ 17378cfb07fSJuergen Lock #define TARGET_FREEBSD_I386_VM86 6 17478cfb07fSJuergen Lock #define TARGET_FREEBSD_I386_GET_FSBASE 7 17578cfb07fSJuergen Lock #define TARGET_FREEBSD_I386_SET_FSBASE 8 17678cfb07fSJuergen Lock #define TARGET_FREEBSD_I386_GET_GSBASE 9 17778cfb07fSJuergen Lock #define TARGET_FREEBSD_I386_SET_GSBASE 10 17878cfb07fSJuergen Lock 17978cfb07fSJuergen Lock 18031fc12dfSblueswir1 #define UNAME_MACHINE "i386" 181*ea1ab4cfSStacey Son #define TARGET_HW_MACHINE UNAME_MACHINE 182*ea1ab4cfSStacey Son #define TARGET_HW_MACHINE_ARCH UNAME_MACHINE 18331fc12dfSblueswir1 1840c6940d0SLluís Vilanova #endif /* TARGET_SYSCALL_H */ 185