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 #define __compat_uid_t __compat_uid_t 13 typedef s32 __compat_uid_t; 14 typedef s32 __compat_gid_t; 15 16 typedef __compat_uid_t __compat_uid32_t; 17 typedef __compat_gid_t __compat_gid32_t; 18 #define __compat_uid32_t __compat_uid32_t 19 20 #define compat_statfs compat_statfs 21 #define compat_ipc64_perm compat_ipc64_perm 22 23 #define _COMPAT_NSIG 128 /* Don't ask !$@#% ... */ 24 #define _COMPAT_NSIG_BPW 32 25 typedef u32 compat_sigset_word; 26 27 #define COMPAT_RLIM_INFINITY 0x7fffffffUL 28 29 #include <asm-generic/compat.h> 30 31 #define COMPAT_UTS_MACHINE "mips\0\0\0" 32 33 typedef u32 compat_nlink_t; 34 35 struct compat_stat { 36 compat_dev_t st_dev; 37 s32 st_pad1[3]; 38 compat_ino_t st_ino; 39 compat_mode_t st_mode; 40 compat_nlink_t st_nlink; 41 __compat_uid_t st_uid; 42 __compat_gid_t st_gid; 43 compat_dev_t st_rdev; 44 s32 st_pad2[2]; 45 compat_off_t st_size; 46 s32 st_pad3; 47 old_time32_t st_atime; 48 s32 st_atime_nsec; 49 old_time32_t st_mtime; 50 s32 st_mtime_nsec; 51 old_time32_t st_ctime; 52 s32 st_ctime_nsec; 53 s32 st_blksize; 54 s32 st_blocks; 55 s32 st_pad4[14]; 56 }; 57 58 #define __ARCH_COMPAT_FLOCK_EXTRA_SYSID s32 l_sysid; 59 #define __ARCH_COMPAT_FLOCK_PAD s32 pad[4]; 60 61 struct compat_statfs { 62 int f_type; 63 int f_bsize; 64 int f_frsize; 65 int f_blocks; 66 int f_bfree; 67 int f_files; 68 int f_ffree; 69 int f_bavail; 70 compat_fsid_t f_fsid; 71 int f_namelen; 72 int f_flags; 73 int f_spare[5]; 74 }; 75 76 struct compat_ipc64_perm { 77 compat_key_t key; 78 __compat_uid32_t uid; 79 __compat_gid32_t gid; 80 __compat_uid32_t cuid; 81 __compat_gid32_t cgid; 82 compat_mode_t mode; 83 unsigned short seq; 84 unsigned short __pad2; 85 compat_ulong_t __unused1; 86 compat_ulong_t __unused2; 87 }; 88 89 struct compat_semid64_ds { 90 struct compat_ipc64_perm sem_perm; 91 compat_ulong_t sem_otime; 92 compat_ulong_t sem_ctime; 93 compat_ulong_t sem_nsems; 94 compat_ulong_t sem_otime_high; 95 compat_ulong_t sem_ctime_high; 96 }; 97 98 struct compat_msqid64_ds { 99 struct compat_ipc64_perm msg_perm; 100 #ifndef CONFIG_CPU_LITTLE_ENDIAN 101 compat_ulong_t msg_stime_high; 102 #endif 103 compat_ulong_t msg_stime; 104 #ifdef CONFIG_CPU_LITTLE_ENDIAN 105 compat_ulong_t msg_stime_high; 106 #endif 107 #ifndef CONFIG_CPU_LITTLE_ENDIAN 108 compat_ulong_t msg_rtime_high; 109 #endif 110 compat_ulong_t msg_rtime; 111 #ifdef CONFIG_CPU_LITTLE_ENDIAN 112 compat_ulong_t msg_rtime_high; 113 #endif 114 #ifndef CONFIG_CPU_LITTLE_ENDIAN 115 compat_ulong_t msg_ctime_high; 116 #endif 117 compat_ulong_t msg_ctime; 118 #ifdef CONFIG_CPU_LITTLE_ENDIAN 119 compat_ulong_t msg_ctime_high; 120 #endif 121 compat_ulong_t msg_cbytes; 122 compat_ulong_t msg_qnum; 123 compat_ulong_t msg_qbytes; 124 compat_pid_t msg_lspid; 125 compat_pid_t msg_lrpid; 126 compat_ulong_t __unused4; 127 compat_ulong_t __unused5; 128 }; 129 130 struct compat_shmid64_ds { 131 struct compat_ipc64_perm shm_perm; 132 compat_size_t shm_segsz; 133 compat_ulong_t shm_atime; 134 compat_ulong_t shm_dtime; 135 compat_ulong_t shm_ctime; 136 compat_pid_t shm_cpid; 137 compat_pid_t shm_lpid; 138 compat_ulong_t shm_nattch; 139 compat_ushort_t shm_atime_high; 140 compat_ushort_t shm_dtime_high; 141 compat_ushort_t shm_ctime_high; 142 compat_ushort_t __unused2; 143 }; 144 145 /* MIPS has unusual order of fields in stack_t */ 146 typedef struct compat_sigaltstack { 147 compat_uptr_t ss_sp; 148 compat_size_t ss_size; 149 int ss_flags; 150 } compat_stack_t; 151 #define compat_sigaltstack compat_sigaltstack 152 153 static inline int is_compat_task(void) 154 { 155 return test_thread_flag(TIF_32BIT_ADDR); 156 } 157 158 #endif /* _ASM_COMPAT_H */ 159