1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef _ASM_SPARC64_COMPAT_H
3 #define _ASM_SPARC64_COMPAT_H
5 * Architecture specific compatibility types
7 #include <linux/types.h>
9 #define compat_mode_t compat_mode_t
10 typedef u16 compat_mode_t;
12 #include <asm-generic/compat.h>
14 #define COMPAT_USER_HZ 100
15 #define COMPAT_UTS_MACHINE "sparc\0\0"
17 typedef u16 __compat_uid_t;
18 typedef u16 __compat_gid_t;
19 typedef u16 compat_dev_t;
20 typedef s16 compat_nlink_t;
21 typedef u16 compat_ipc_pid_t;
22 typedef __kernel_fsid_t compat_fsid_t;
27 compat_mode_t st_mode;
28 compat_nlink_t st_nlink;
29 __compat_uid_t st_uid;
30 __compat_gid_t st_gid;
33 old_time32_t st_atime;
34 compat_ulong_t st_atime_nsec;
35 old_time32_t st_mtime;
36 compat_ulong_t st_mtime_nsec;
37 old_time32_t st_ctime;
38 compat_ulong_t st_ctime_nsec;
39 compat_off_t st_blksize;
40 compat_off_t st_blocks;
44 struct compat_stat64 {
45 unsigned long long st_dev;
47 unsigned long long st_ino;
50 unsigned int st_nlink;
55 unsigned long long st_rdev;
57 unsigned char __pad3[8];
60 unsigned int st_blksize;
62 unsigned char __pad4[8];
63 unsigned int st_blocks;
65 unsigned int st_atime;
66 unsigned int st_atime_nsec;
68 unsigned int st_mtime;
69 unsigned int st_mtime_nsec;
71 unsigned int st_ctime;
72 unsigned int st_ctime_nsec;
74 unsigned int __unused4;
75 unsigned int __unused5;
91 struct compat_flock64 {
94 compat_loff_t l_start;
100 struct compat_statfs {
108 compat_fsid_t f_fsid;
109 int f_namelen; /* SunOS ignores this field. */
115 #define COMPAT_RLIM_INFINITY 0x7fffffff
117 #define COMPAT_OFF_T_MAX 0x7fffffff
119 struct compat_ipc64_perm {
121 __compat_uid32_t uid;
122 __compat_gid32_t gid;
123 __compat_uid32_t cuid;
124 __compat_gid32_t cgid;
125 unsigned short __pad1;
127 unsigned short __pad2;
129 unsigned long __unused1; /* yes they really are 64bit pads */
130 unsigned long __unused2;
133 struct compat_semid64_ds {
134 struct compat_ipc64_perm sem_perm;
135 unsigned int sem_otime_high;
136 unsigned int sem_otime;
137 unsigned int sem_ctime_high;
138 unsigned int sem_ctime;
144 struct compat_msqid64_ds {
145 struct compat_ipc64_perm msg_perm;
146 unsigned int msg_stime_high;
147 unsigned int msg_stime;
148 unsigned int msg_rtime_high;
149 unsigned int msg_rtime;
150 unsigned int msg_ctime_high;
151 unsigned int msg_ctime;
152 unsigned int msg_cbytes;
153 unsigned int msg_qnum;
154 unsigned int msg_qbytes;
155 compat_pid_t msg_lspid;
156 compat_pid_t msg_lrpid;
157 unsigned int __unused1;
158 unsigned int __unused2;
161 struct compat_shmid64_ds {
162 struct compat_ipc64_perm shm_perm;
163 unsigned int shm_atime_high;
164 unsigned int shm_atime;
165 unsigned int shm_dtime_high;
166 unsigned int shm_dtime;
167 unsigned int shm_ctime_high;
168 unsigned int shm_ctime;
169 compat_size_t shm_segsz;
170 compat_pid_t shm_cpid;
171 compat_pid_t shm_lpid;
172 unsigned int shm_nattch;
173 unsigned int __unused1;
174 unsigned int __unused2;
178 static inline int is_compat_task(void)
180 return test_thread_flag(TIF_32BIT);
183 static inline bool in_compat_syscall(void)
185 /* Vector 0x110 is LINUX_32BIT_SYSCALL_TRAP */
186 return pt_regs_trap_type(current_pt_regs()) == 0x110;
188 #define in_compat_syscall in_compat_syscall
191 #endif /* _ASM_SPARC64_COMPAT_H */