xref: /openbmc/linux/arch/x86/include/asm/ia32.h (revision d0c44de2d8ffd2e4780d360b34ee6614aa4af080)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
21965aae3SH. Peter Anvin #ifndef _ASM_X86_IA32_H
31965aae3SH. Peter Anvin #define _ASM_X86_IA32_H
4bb898558SAl Viro 
5bb898558SAl Viro 
6bb898558SAl Viro #ifdef CONFIG_IA32_EMULATION
7bb898558SAl Viro 
8bb898558SAl Viro #include <linux/compat.h>
9bb898558SAl Viro 
10bb898558SAl Viro /*
11bb898558SAl Viro  * 32 bit structures for IA32 support.
12bb898558SAl Viro  */
13bb898558SAl Viro 
14decb4c41SIngo Molnar #include <uapi/asm/sigcontext.h>
15bb898558SAl Viro 
16bb898558SAl Viro /* signal.h */
17bb898558SAl Viro 
18bb898558SAl Viro struct ucontext_ia32 {
19bb898558SAl Viro 	unsigned int	  uc_flags;
20bb898558SAl Viro 	unsigned int 	  uc_link;
2190268439SAl Viro 	compat_stack_t	  uc_stack;
228fcb346bSIngo Molnar 	struct sigcontext_32 uc_mcontext;
23bb898558SAl Viro 	compat_sigset_t	  uc_sigmask;	/* mask last for extensibility */
24bb898558SAl Viro };
25bb898558SAl Viro 
26bb898558SAl Viro /* This matches struct stat64 in glibc2.2, hence the absolutely
27bb898558SAl Viro  * insane amounts of padding around dev_t's.
28bb898558SAl Viro  */
29bb898558SAl Viro struct stat64 {
30bb898558SAl Viro 	unsigned long long	st_dev;
31bb898558SAl Viro 	unsigned char		__pad0[4];
32bb898558SAl Viro 
33bb898558SAl Viro #define STAT64_HAS_BROKEN_ST_INO	1
34bb898558SAl Viro 	unsigned int		__st_ino;
35bb898558SAl Viro 
36bb898558SAl Viro 	unsigned int		st_mode;
37bb898558SAl Viro 	unsigned int		st_nlink;
38bb898558SAl Viro 
39bb898558SAl Viro 	unsigned int		st_uid;
40bb898558SAl Viro 	unsigned int		st_gid;
41bb898558SAl Viro 
42bb898558SAl Viro 	unsigned long long	st_rdev;
43bb898558SAl Viro 	unsigned char		__pad3[4];
44bb898558SAl Viro 
45bb898558SAl Viro 	long long		st_size;
46bb898558SAl Viro 	unsigned int		st_blksize;
47bb898558SAl Viro 
48bb898558SAl Viro 	long long		st_blocks;/* Number 512-byte blocks allocated */
49bb898558SAl Viro 
50bb898558SAl Viro 	unsigned 		st_atime;
51bb898558SAl Viro 	unsigned 		st_atime_nsec;
52bb898558SAl Viro 	unsigned 		st_mtime;
53bb898558SAl Viro 	unsigned 		st_mtime_nsec;
54bb898558SAl Viro 	unsigned 		st_ctime;
55bb898558SAl Viro 	unsigned 		st_ctime_nsec;
56bb898558SAl Viro 
57bb898558SAl Viro 	unsigned long long	st_ino;
58bb898558SAl Viro } __attribute__((packed));
59bb898558SAl Viro 
60bb898558SAl Viro #define IA32_STACK_TOP IA32_PAGE_OFFSET
61bb898558SAl Viro 
62bb898558SAl Viro #ifdef __KERNEL__
63bb898558SAl Viro struct linux_binprm;
64bb898558SAl Viro extern int ia32_setup_arg_pages(struct linux_binprm *bprm,
65bb898558SAl Viro 				unsigned long stack_top, int exec_stack);
66bb898558SAl Viro struct mm_struct;
67bb898558SAl Viro extern void ia32_pick_mmap_layout(struct mm_struct *mm);
68bb898558SAl Viro 
69bb898558SAl Viro #endif
70bb898558SAl Viro 
71f259af26SNikolay Borisov extern bool __ia32_enabled;
72f259af26SNikolay Borisov 
ia32_enabled(void)73f259af26SNikolay Borisov static inline bool ia32_enabled(void)
74f259af26SNikolay Borisov {
75f259af26SNikolay Borisov 	return __ia32_enabled;
76f259af26SNikolay Borisov }
77f259af26SNikolay Borisov 
ia32_disable(void)78*34c686e5SKirill A. Shutemov static inline void ia32_disable(void)
79*34c686e5SKirill A. Shutemov {
80*34c686e5SKirill A. Shutemov 	__ia32_enabled = false;
81*34c686e5SKirill A. Shutemov }
82*34c686e5SKirill A. Shutemov 
83f259af26SNikolay Borisov #else /* !CONFIG_IA32_EMULATION */
84f259af26SNikolay Borisov 
ia32_enabled(void)85f259af26SNikolay Borisov static inline bool ia32_enabled(void)
86f259af26SNikolay Borisov {
87f259af26SNikolay Borisov 	return IS_ENABLED(CONFIG_X86_32);
88f259af26SNikolay Borisov }
89f259af26SNikolay Borisov 
ia32_disable(void)90*34c686e5SKirill A. Shutemov static inline void ia32_disable(void) {}
91*34c686e5SKirill A. Shutemov 
92f259af26SNikolay Borisov #endif
93bb898558SAl Viro 
941965aae3SH. Peter Anvin #endif /* _ASM_X86_IA32_H */
95