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 17typedef s32 __compat_uid_t; 18typedef s32 __compat_gid_t; 19typedef __compat_uid_t __compat_uid32_t; 20typedef __compat_gid_t __compat_gid32_t; 21typedef u32 compat_mode_t; 22typedef u32 compat_dev_t; 23typedef u32 compat_nlink_t; 24typedef s32 compat_ipc_pid_t; 25typedef s32 compat_caddr_t; 26typedef struct { 27 s32 val[2]; 28} compat_fsid_t; 29 30struct 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 53struct 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 67struct 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 75struct 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 92typedef 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 97typedef u32 compat_sigset_word; 98 99#define COMPAT_OFF_T_MAX 0x7fffffff 100 101static 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 109struct 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 122struct 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 131struct 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 163struct 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 */ 179typedef 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 186static inline int is_compat_task(void) 187{ 188 return test_thread_flag(TIF_32BIT_ADDR); 189} 190 191#endif /* _ASM_COMPAT_H */ 192