xref: /qemu/bsd-user/i386/target_syscall.h (revision b3f846c59d8405bb87c551187721fc92ff2f1b92)
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