1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _ASM_SPARC64_COMPAT_H 3 #define _ASM_SPARC64_COMPAT_H 4 /* 5 * Architecture specific compatibility types 6 */ 7 #include <linux/types.h> 8 9 #define compat_mode_t compat_mode_t 10 typedef u16 compat_mode_t; 11 12 #define __compat_uid_t __compat_uid_t 13 typedef u16 __compat_uid_t; 14 typedef u16 __compat_gid_t; 15 16 #define compat_dev_t compat_dev_t 17 typedef u16 compat_dev_t; 18 19 #define compat_ipc_pid_t compat_ipc_pid_t 20 typedef u16 compat_ipc_pid_t; 21 22 #define compat_ipc64_perm compat_ipc64_perm 23 24 #define COMPAT_RLIM_INFINITY 0x7fffffff 25 26 #include <asm-generic/compat.h> 27 28 #define COMPAT_UTS_MACHINE "sparc\0\0" 29 30 typedef s16 compat_nlink_t; 31 32 struct compat_stat { 33 compat_dev_t st_dev; 34 compat_ino_t st_ino; 35 compat_mode_t st_mode; 36 compat_nlink_t st_nlink; 37 __compat_uid_t st_uid; 38 __compat_gid_t st_gid; 39 compat_dev_t st_rdev; 40 compat_off_t st_size; 41 old_time32_t st_atime; 42 compat_ulong_t st_atime_nsec; 43 old_time32_t st_mtime; 44 compat_ulong_t st_mtime_nsec; 45 old_time32_t st_ctime; 46 compat_ulong_t st_ctime_nsec; 47 compat_off_t st_blksize; 48 compat_off_t st_blocks; 49 u32 __unused4[2]; 50 }; 51 52 struct compat_stat64 { 53 unsigned long long st_dev; 54 55 unsigned long long st_ino; 56 57 unsigned int st_mode; 58 unsigned int st_nlink; 59 60 unsigned int st_uid; 61 unsigned int st_gid; 62 63 unsigned long long st_rdev; 64 65 unsigned char __pad3[8]; 66 67 long long st_size; 68 unsigned int st_blksize; 69 70 unsigned char __pad4[8]; 71 unsigned int st_blocks; 72 73 unsigned int st_atime; 74 unsigned int st_atime_nsec; 75 76 unsigned int st_mtime; 77 unsigned int st_mtime_nsec; 78 79 unsigned int st_ctime; 80 unsigned int st_ctime_nsec; 81 82 unsigned int __unused4; 83 unsigned int __unused5; 84 }; 85 86 #define __ARCH_COMPAT_FLOCK_PAD short __unused; 87 88 struct compat_ipc64_perm { 89 compat_key_t key; 90 __compat_uid32_t uid; 91 __compat_gid32_t gid; 92 __compat_uid32_t cuid; 93 __compat_gid32_t cgid; 94 unsigned short __pad1; 95 compat_mode_t mode; 96 unsigned short __pad2; 97 unsigned short seq; 98 unsigned long __unused1; /* yes they really are 64bit pads */ 99 unsigned long __unused2; 100 }; 101 102 struct compat_semid64_ds { 103 struct compat_ipc64_perm sem_perm; 104 unsigned int sem_otime_high; 105 unsigned int sem_otime; 106 unsigned int sem_ctime_high; 107 unsigned int sem_ctime; 108 u32 sem_nsems; 109 u32 __unused1; 110 u32 __unused2; 111 }; 112 113 struct compat_msqid64_ds { 114 struct compat_ipc64_perm msg_perm; 115 unsigned int msg_stime_high; 116 unsigned int msg_stime; 117 unsigned int msg_rtime_high; 118 unsigned int msg_rtime; 119 unsigned int msg_ctime_high; 120 unsigned int msg_ctime; 121 unsigned int msg_cbytes; 122 unsigned int msg_qnum; 123 unsigned int msg_qbytes; 124 compat_pid_t msg_lspid; 125 compat_pid_t msg_lrpid; 126 unsigned int __unused1; 127 unsigned int __unused2; 128 }; 129 130 struct compat_shmid64_ds { 131 struct compat_ipc64_perm shm_perm; 132 unsigned int shm_atime_high; 133 unsigned int shm_atime; 134 unsigned int shm_dtime_high; 135 unsigned int shm_dtime; 136 unsigned int shm_ctime_high; 137 unsigned int shm_ctime; 138 compat_size_t shm_segsz; 139 compat_pid_t shm_cpid; 140 compat_pid_t shm_lpid; 141 unsigned int shm_nattch; 142 unsigned int __unused1; 143 unsigned int __unused2; 144 }; 145 146 #ifdef CONFIG_COMPAT 147 static inline int is_compat_task(void) 148 { 149 return test_thread_flag(TIF_32BIT); 150 } 151 152 static inline bool in_compat_syscall(void) 153 { 154 /* Vector 0x110 is LINUX_32BIT_SYSCALL_TRAP */ 155 return pt_regs_trap_type(current_pt_regs()) == 0x110; 156 } 157 #define in_compat_syscall in_compat_syscall 158 #endif 159 160 #endif /* _ASM_SPARC64_COMPAT_H */ 161