1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _ASM_COMPAT_H 3 #define _ASM_COMPAT_H 4 /* 5 * Architecture specific compatibility types 6 */ 7 #include <linux/thread_info.h> 8 #include <linux/types.h> 9 #include <asm/page.h> 10 #include <asm/ptrace.h> 11 12 #include <asm-generic/compat.h> 13 14 #define COMPAT_USER_HZ 100 15 #define COMPAT_UTS_MACHINE "mips\0\0\0" 16 17 typedef s32 __compat_uid_t; 18 typedef s32 __compat_gid_t; 19 typedef __compat_uid_t __compat_uid32_t; 20 typedef __compat_gid_t __compat_gid32_t; 21 typedef u32 compat_mode_t; 22 typedef u32 compat_dev_t; 23 typedef u32 compat_nlink_t; 24 typedef s32 compat_ipc_pid_t; 25 typedef s32 compat_caddr_t; 26 typedef struct { 27 s32 val[2]; 28 } compat_fsid_t; 29 30 struct compat_stat { 31 compat_dev_t st_dev; 32 s32 st_pad1[3]; 33 compat_ino_t st_ino; 34 compat_mode_t st_mode; 35 compat_nlink_t st_nlink; 36 __compat_uid_t st_uid; 37 __compat_gid_t st_gid; 38 compat_dev_t st_rdev; 39 s32 st_pad2[2]; 40 compat_off_t st_size; 41 s32 st_pad3; 42 old_time32_t st_atime; 43 s32 st_atime_nsec; 44 old_time32_t st_mtime; 45 s32 st_mtime_nsec; 46 old_time32_t st_ctime; 47 s32 st_ctime_nsec; 48 s32 st_blksize; 49 s32 st_blocks; 50 s32 st_pad4[14]; 51 }; 52 53 struct compat_flock { 54 short l_type; 55 short l_whence; 56 compat_off_t l_start; 57 compat_off_t l_len; 58 s32 l_sysid; 59 compat_pid_t l_pid; 60 s32 pad[4]; 61 }; 62 63 #define F_GETLK64 33 64 #define F_SETLK64 34 65 #define F_SETLKW64 35 66 67 struct compat_flock64 { 68 short l_type; 69 short l_whence; 70 compat_loff_t l_start; 71 compat_loff_t l_len; 72 compat_pid_t l_pid; 73 }; 74 75 struct compat_statfs { 76 int f_type; 77 int f_bsize; 78 int f_frsize; 79 int f_blocks; 80 int f_bfree; 81 int f_files; 82 int f_ffree; 83 int f_bavail; 84 compat_fsid_t f_fsid; 85 int f_namelen; 86 int f_flags; 87 int f_spare[5]; 88 }; 89 90 #define COMPAT_RLIM_INFINITY 0x7fffffffUL 91 92 typedef u32 compat_old_sigset_t; /* at least 32 bits */ 93 94 #define _COMPAT_NSIG 128 /* Don't ask !$@#% ... */ 95 #define _COMPAT_NSIG_BPW 32 96 97 typedef u32 compat_sigset_word; 98 99 #define COMPAT_OFF_T_MAX 0x7fffffff 100 101 static inline void __user *arch_compat_alloc_user_space(long len) 102 { 103 struct pt_regs *regs = (struct pt_regs *) 104 ((unsigned long) current_thread_info() + THREAD_SIZE - 32) - 1; 105 106 return (void __user *) (regs->regs[29] - len); 107 } 108 109 struct compat_ipc64_perm { 110 compat_key_t key; 111 __compat_uid32_t uid; 112 __compat_gid32_t gid; 113 __compat_uid32_t cuid; 114 __compat_gid32_t cgid; 115 compat_mode_t mode; 116 unsigned short seq; 117 unsigned short __pad2; 118 compat_ulong_t __unused1; 119 compat_ulong_t __unused2; 120 }; 121 122 struct compat_semid64_ds { 123 struct compat_ipc64_perm sem_perm; 124 compat_ulong_t sem_otime; 125 compat_ulong_t sem_ctime; 126 compat_ulong_t sem_nsems; 127 compat_ulong_t sem_otime_high; 128 compat_ulong_t sem_ctime_high; 129 }; 130 131 struct compat_msqid64_ds { 132 struct compat_ipc64_perm msg_perm; 133 #ifndef CONFIG_CPU_LITTLE_ENDIAN 134 compat_ulong_t msg_stime_high; 135 #endif 136 compat_ulong_t msg_stime; 137 #ifdef CONFIG_CPU_LITTLE_ENDIAN 138 compat_ulong_t msg_stime_high; 139 #endif 140 #ifndef CONFIG_CPU_LITTLE_ENDIAN 141 compat_ulong_t msg_rtime_high; 142 #endif 143 compat_ulong_t msg_rtime; 144 #ifdef CONFIG_CPU_LITTLE_ENDIAN 145 compat_ulong_t msg_rtime_high; 146 #endif 147 #ifndef CONFIG_CPU_LITTLE_ENDIAN 148 compat_ulong_t msg_ctime_high; 149 #endif 150 compat_ulong_t msg_ctime; 151 #ifdef CONFIG_CPU_LITTLE_ENDIAN 152 compat_ulong_t msg_ctime_high; 153 #endif 154 compat_ulong_t msg_cbytes; 155 compat_ulong_t msg_qnum; 156 compat_ulong_t msg_qbytes; 157 compat_pid_t msg_lspid; 158 compat_pid_t msg_lrpid; 159 compat_ulong_t __unused4; 160 compat_ulong_t __unused5; 161 }; 162 163 struct compat_shmid64_ds { 164 struct compat_ipc64_perm shm_perm; 165 compat_size_t shm_segsz; 166 compat_ulong_t shm_atime; 167 compat_ulong_t shm_dtime; 168 compat_ulong_t shm_ctime; 169 compat_pid_t shm_cpid; 170 compat_pid_t shm_lpid; 171 compat_ulong_t shm_nattch; 172 compat_ushort_t shm_atime_high; 173 compat_ushort_t shm_dtime_high; 174 compat_ushort_t shm_ctime_high; 175 compat_ushort_t __unused2; 176 }; 177 178 /* MIPS has unusual order of fields in stack_t */ 179 typedef struct compat_sigaltstack { 180 compat_uptr_t ss_sp; 181 compat_size_t ss_size; 182 int ss_flags; 183 } compat_stack_t; 184 #define compat_sigaltstack compat_sigaltstack 185 186 static inline int is_compat_task(void) 187 { 188 return test_thread_flag(TIF_32BIT_ADDR); 189 } 190 191 #endif /* _ASM_COMPAT_H */ 192