xref: /qemu/linux-user/i386/target_syscall.h (revision 41fb4c14ee500125dc0ce6fb573cf84b8db29ed0)
13622634bSMarkus Armbruster #ifndef I386_TARGET_SYSCALL_H
23622634bSMarkus Armbruster #define I386_TARGET_SYSCALL_H
3460c579fSLluís Vilanova 
42c0262afSbellard /* default linux values for the selectors */
52c0262afSbellard #define __USER_CS	(0x23)
62c0262afSbellard #define __USER_DS	(0x2B)
72c0262afSbellard 
82c0262afSbellard struct target_pt_regs {
92c0262afSbellard 	long ebx;
102c0262afSbellard 	long ecx;
112c0262afSbellard 	long edx;
122c0262afSbellard 	long esi;
132c0262afSbellard 	long edi;
142c0262afSbellard 	long ebp;
152c0262afSbellard 	long eax;
162c0262afSbellard 	int  xds;
172c0262afSbellard 	int  xes;
182c0262afSbellard 	long orig_eax;
192c0262afSbellard 	long eip;
202c0262afSbellard 	int  xcs;
212c0262afSbellard 	long eflags;
222c0262afSbellard 	long esp;
232c0262afSbellard 	int  xss;
242c0262afSbellard };
252c0262afSbellard 
262c0262afSbellard /* ioctls */
272c0262afSbellard 
282c0262afSbellard #define TARGET_LDT_ENTRIES      8192
292c0262afSbellard #define TARGET_LDT_ENTRY_SIZE	8
302c0262afSbellard 
318d18e893Sbellard #define TARGET_GDT_ENTRIES             9
322c0262afSbellard #define TARGET_GDT_ENTRY_TLS_ENTRIES   3
332c0262afSbellard #define TARGET_GDT_ENTRY_TLS_MIN       6
342c0262afSbellard #define TARGET_GDT_ENTRY_TLS_MAX       (TARGET_GDT_ENTRY_TLS_MIN + TARGET_GDT_ENTRY_TLS_ENTRIES - 1)
352c0262afSbellard 
362c0262afSbellard struct target_modify_ldt_ldt_s {
372c0262afSbellard     unsigned int  entry_number;
38992f48a0Sblueswir1     abi_ulong base_addr;
392c0262afSbellard     unsigned int limit;
402c0262afSbellard     unsigned int flags;
412c0262afSbellard };
422c0262afSbellard 
432c0262afSbellard /* vm86 defines */
442c0262afSbellard 
452c0262afSbellard #define TARGET_BIOSSEG		0x0f000
462c0262afSbellard 
472c0262afSbellard #define TARGET_CPU_086		0
482c0262afSbellard #define TARGET_CPU_186		1
492c0262afSbellard #define TARGET_CPU_286		2
502c0262afSbellard #define TARGET_CPU_386		3
512c0262afSbellard #define TARGET_CPU_486		4
522c0262afSbellard #define TARGET_CPU_586		5
532c0262afSbellard 
542c0262afSbellard #define TARGET_VM86_SIGNAL	0	/* return due to signal */
552c0262afSbellard #define TARGET_VM86_UNKNOWN	1	/* unhandled GP fault - IO-instruction or similar */
562c0262afSbellard #define TARGET_VM86_INTx	2	/* int3/int x instruction (ARG = x) */
572c0262afSbellard #define TARGET_VM86_STI	3	/* sti/popf/iret instruction enabled virtual interrupts */
582c0262afSbellard 
592c0262afSbellard /*
602c0262afSbellard  * Additional return values when invoking new vm86()
612c0262afSbellard  */
622c0262afSbellard #define TARGET_VM86_PICRETURN	4	/* return due to pending PIC request */
632c0262afSbellard #define TARGET_VM86_TRAP	6	/* return due to DOS-debugger request */
642c0262afSbellard 
652c0262afSbellard /*
662c0262afSbellard  * function codes when invoking new vm86()
672c0262afSbellard  */
682c0262afSbellard #define TARGET_VM86_PLUS_INSTALL_CHECK	0
692c0262afSbellard #define TARGET_VM86_ENTER		1
702c0262afSbellard #define TARGET_VM86_ENTER_NO_BYPASS	2
712c0262afSbellard #define	TARGET_VM86_REQUEST_IRQ	3
722c0262afSbellard #define TARGET_VM86_FREE_IRQ		4
732c0262afSbellard #define TARGET_VM86_GET_IRQ_BITS	5
742c0262afSbellard #define TARGET_VM86_GET_AND_RESET_IRQ	6
752c0262afSbellard 
762c0262afSbellard /*
772c0262afSbellard  * This is the stack-layout seen by the user space program when we have
782c0262afSbellard  * done a translation of "SAVE_ALL" from vm86 mode. The real kernel layout
792c0262afSbellard  * is 'kernel_vm86_regs' (see below).
802c0262afSbellard  */
812c0262afSbellard 
822c0262afSbellard struct target_vm86_regs {
832c0262afSbellard /*
842c0262afSbellard  * normal regs, with special meaning for the segment descriptors..
852c0262afSbellard  */
86992f48a0Sblueswir1 	abi_long ebx;
87992f48a0Sblueswir1 	abi_long ecx;
88992f48a0Sblueswir1 	abi_long edx;
89992f48a0Sblueswir1 	abi_long esi;
90992f48a0Sblueswir1 	abi_long edi;
91992f48a0Sblueswir1 	abi_long ebp;
92992f48a0Sblueswir1 	abi_long eax;
93992f48a0Sblueswir1 	abi_long __null_ds;
94992f48a0Sblueswir1 	abi_long __null_es;
95992f48a0Sblueswir1 	abi_long __null_fs;
96992f48a0Sblueswir1 	abi_long __null_gs;
97992f48a0Sblueswir1 	abi_long orig_eax;
98992f48a0Sblueswir1 	abi_long eip;
992c0262afSbellard 	unsigned short cs, __csh;
100992f48a0Sblueswir1 	abi_long eflags;
101992f48a0Sblueswir1 	abi_long esp;
1022c0262afSbellard 	unsigned short ss, __ssh;
1032c0262afSbellard /*
1042c0262afSbellard  * these are specific to v86 mode:
1052c0262afSbellard  */
1062c0262afSbellard 	unsigned short es, __esh;
1072c0262afSbellard 	unsigned short ds, __dsh;
1082c0262afSbellard 	unsigned short fs, __fsh;
1092c0262afSbellard 	unsigned short gs, __gsh;
1102c0262afSbellard };
1112c0262afSbellard 
1122c0262afSbellard struct target_revectored_struct {
113992f48a0Sblueswir1 	abi_ulong __map[8];			/* 256 bits */
1142c0262afSbellard };
1152c0262afSbellard 
1162c0262afSbellard struct target_vm86_struct {
1172c0262afSbellard 	struct target_vm86_regs regs;
118992f48a0Sblueswir1 	abi_ulong flags;
119992f48a0Sblueswir1 	abi_ulong screen_bitmap;
120992f48a0Sblueswir1 	abi_ulong cpu_type;
1212c0262afSbellard 	struct target_revectored_struct int_revectored;
1222c0262afSbellard 	struct target_revectored_struct int21_revectored;
1232c0262afSbellard };
1242c0262afSbellard 
1252c0262afSbellard /*
1262c0262afSbellard  * flags masks
1272c0262afSbellard  */
1282c0262afSbellard #define TARGET_VM86_SCREEN_BITMAP	0x0001
1292c0262afSbellard 
1302c0262afSbellard struct target_vm86plus_info_struct {
131992f48a0Sblueswir1         abi_ulong flags;
1322c0262afSbellard #define TARGET_force_return_for_pic (1 << 0)
1332c0262afSbellard #define TARGET_vm86dbg_active       (1 << 1)  /* for debugger */
1342c0262afSbellard #define TARGET_vm86dbg_TFpendig     (1 << 2)  /* for debugger */
1352c0262afSbellard #define TARGET_is_vm86pus           (1 << 31) /* for vm86 internal use */
1362c0262afSbellard 	unsigned char vm86dbg_intxxtab[32];   /* for debugger */
1372c0262afSbellard };
1382c0262afSbellard 
1392c0262afSbellard struct target_vm86plus_struct {
1402c0262afSbellard 	struct target_vm86_regs regs;
141992f48a0Sblueswir1 	abi_ulong flags;
142992f48a0Sblueswir1 	abi_ulong screen_bitmap;
143992f48a0Sblueswir1 	abi_ulong cpu_type;
1442c0262afSbellard 	struct target_revectored_struct int_revectored;
1452c0262afSbellard 	struct target_revectored_struct int21_revectored;
1462c0262afSbellard 	struct target_vm86plus_info_struct vm86plus;
1472c0262afSbellard };
1482c0262afSbellard 
149cf720db3Sbellard #define UNAME_MACHINE "i686"
150cbc14e6fSRiku Voipio #define UNAME_MINIMUM_RELEASE "2.6.32"
1514ce6243dSPeter Maydell 
1524ce6243dSPeter Maydell #define TARGET_CLONE_BACKWARDS
153*02e5d7d7SFilip Bozuta #define TARGET_MCL_CURRENT 1
154*02e5d7d7SFilip Bozuta #define TARGET_MCL_FUTURE  2
155*02e5d7d7SFilip Bozuta #define TARGET_MCL_ONFAULT 4
1565457dc9eSLaurent Vivier #define TARGET_WANT_OLD_SYS_SELECT
157460c579fSLluís Vilanova 
1583622634bSMarkus Armbruster #endif /* I386_TARGET_SYSCALL_H */
159