Merge tag 'io_uring-5.15-2021-09-11' of git://git.kernel.dk/linux-block
[linux-2.6-microblaze.git] / arch / sparc / include / asm / compat.h
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 #include <asm-generic/compat.h>
13
14 #define COMPAT_USER_HZ          100
15 #define COMPAT_UTS_MACHINE      "sparc\0\0"
16
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;
23
24 struct compat_stat {
25         compat_dev_t    st_dev;
26         compat_ino_t    st_ino;
27         compat_mode_t   st_mode;
28         compat_nlink_t  st_nlink;
29         __compat_uid_t  st_uid;
30         __compat_gid_t  st_gid;
31         compat_dev_t    st_rdev;
32         compat_off_t    st_size;
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;
41         u32             __unused4[2];
42 };
43
44 struct compat_stat64 {
45         unsigned long long      st_dev;
46
47         unsigned long long      st_ino;
48
49         unsigned int    st_mode;
50         unsigned int    st_nlink;
51
52         unsigned int    st_uid;
53         unsigned int    st_gid;
54
55         unsigned long long      st_rdev;
56
57         unsigned char   __pad3[8];
58
59         long long       st_size;
60         unsigned int    st_blksize;
61
62         unsigned char   __pad4[8];
63         unsigned int    st_blocks;
64
65         unsigned int    st_atime;
66         unsigned int    st_atime_nsec;
67
68         unsigned int    st_mtime;
69         unsigned int    st_mtime_nsec;
70
71         unsigned int    st_ctime;
72         unsigned int    st_ctime_nsec;
73
74         unsigned int    __unused4;
75         unsigned int    __unused5;
76 };
77
78 struct compat_flock {
79         short           l_type;
80         short           l_whence;
81         compat_off_t    l_start;
82         compat_off_t    l_len;
83         compat_pid_t    l_pid;
84         short           __unused;
85 };
86
87 #define F_GETLK64       12
88 #define F_SETLK64       13
89 #define F_SETLKW64      14
90
91 struct compat_flock64 {
92         short           l_type;
93         short           l_whence;
94         compat_loff_t   l_start;
95         compat_loff_t   l_len;
96         compat_pid_t    l_pid;
97         short           __unused;
98 };
99
100 struct compat_statfs {
101         int             f_type;
102         int             f_bsize;
103         int             f_blocks;
104         int             f_bfree;
105         int             f_bavail;
106         int             f_files;
107         int             f_ffree;
108         compat_fsid_t   f_fsid;
109         int             f_namelen;      /* SunOS ignores this field. */
110         int             f_frsize;
111         int             f_flags;
112         int             f_spare[4];
113 };
114
115 #define COMPAT_RLIM_INFINITY 0x7fffffff
116
117 #define COMPAT_OFF_T_MAX        0x7fffffff
118
119 struct compat_ipc64_perm {
120         compat_key_t key;
121         __compat_uid32_t uid;
122         __compat_gid32_t gid;
123         __compat_uid32_t cuid;
124         __compat_gid32_t cgid;
125         unsigned short __pad1;
126         compat_mode_t mode;
127         unsigned short __pad2;
128         unsigned short seq;
129         unsigned long __unused1;        /* yes they really are 64bit pads */
130         unsigned long __unused2;
131 };
132
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;
139         u32             sem_nsems;
140         u32             __unused1;
141         u32             __unused2;
142 };
143
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;
159 };
160
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;
175 };
176
177 #ifdef CONFIG_COMPAT
178 static inline int is_compat_task(void)
179 {
180         return test_thread_flag(TIF_32BIT);
181 }
182
183 static inline bool in_compat_syscall(void)
184 {
185         /* Vector 0x110 is LINUX_32BIT_SYSCALL_TRAP */
186         return pt_regs_trap_type(current_pt_regs()) == 0x110;
187 }
188 #define in_compat_syscall in_compat_syscall
189 #endif
190
191 #endif /* _ASM_SPARC64_COMPAT_H */