Linux Audio

Check our new training course

Loading...
v5.4
  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#include <asm-generic/compat.h>
 10
 11#define COMPAT_USER_HZ		100
 12#define COMPAT_UTS_MACHINE	"sparc\0\0"
 13
 
 
 
 
 
 14typedef u16		__compat_uid_t;
 15typedef u16		__compat_gid_t;
 16typedef u32		__compat_uid32_t;
 17typedef u32		__compat_gid32_t;
 18typedef u16		compat_mode_t;
 
 19typedef u16		compat_dev_t;
 
 
 20typedef s16		compat_nlink_t;
 21typedef u16		compat_ipc_pid_t;
 
 22typedef u32		compat_caddr_t;
 23typedef __kernel_fsid_t	compat_fsid_t;
 
 
 
 
 
 24typedef s64		compat_s64;
 
 
 25typedef u64		compat_u64;
 
 
 
 
 
 
 
 
 
 
 
 
 26struct compat_stat {
 27	compat_dev_t	st_dev;
 28	compat_ino_t	st_ino;
 29	compat_mode_t	st_mode;
 30	compat_nlink_t	st_nlink;
 31	__compat_uid_t	st_uid;
 32	__compat_gid_t	st_gid;
 33	compat_dev_t	st_rdev;
 34	compat_off_t	st_size;
 35	old_time32_t	st_atime;
 36	compat_ulong_t	st_atime_nsec;
 37	old_time32_t	st_mtime;
 38	compat_ulong_t	st_mtime_nsec;
 39	old_time32_t	st_ctime;
 40	compat_ulong_t	st_ctime_nsec;
 41	compat_off_t	st_blksize;
 42	compat_off_t	st_blocks;
 43	u32		__unused4[2];
 44};
 45
 46struct compat_stat64 {
 47	unsigned long long	st_dev;
 48
 49	unsigned long long	st_ino;
 50
 51	unsigned int	st_mode;
 52	unsigned int	st_nlink;
 53
 54	unsigned int	st_uid;
 55	unsigned int	st_gid;
 56
 57	unsigned long long	st_rdev;
 58
 59	unsigned char	__pad3[8];
 60
 61	long long	st_size;
 62	unsigned int	st_blksize;
 63
 64	unsigned char	__pad4[8];
 65	unsigned int	st_blocks;
 66
 67	unsigned int	st_atime;
 68	unsigned int	st_atime_nsec;
 69
 70	unsigned int	st_mtime;
 71	unsigned int	st_mtime_nsec;
 72
 73	unsigned int	st_ctime;
 74	unsigned int	st_ctime_nsec;
 75
 76	unsigned int	__unused4;
 77	unsigned int	__unused5;
 78};
 79
 80struct compat_flock {
 81	short		l_type;
 82	short		l_whence;
 83	compat_off_t	l_start;
 84	compat_off_t	l_len;
 85	compat_pid_t	l_pid;
 86	short		__unused;
 87};
 88
 89#define F_GETLK64	12
 90#define F_SETLK64	13
 91#define F_SETLKW64	14
 92
 93struct compat_flock64 {
 94	short		l_type;
 95	short		l_whence;
 96	compat_loff_t	l_start;
 97	compat_loff_t	l_len;
 98	compat_pid_t	l_pid;
 99	short		__unused;
100};
101
102struct compat_statfs {
103	int		f_type;
104	int		f_bsize;
105	int		f_blocks;
106	int		f_bfree;
107	int		f_bavail;
108	int		f_files;
109	int		f_ffree;
110	compat_fsid_t	f_fsid;
111	int		f_namelen;	/* SunOS ignores this field. */
112	int		f_frsize;
113	int		f_flags;
114	int		f_spare[4];
115};
116
117#define COMPAT_RLIM_INFINITY 0x7fffffff
118
119typedef u32		compat_old_sigset_t;
120
121#define _COMPAT_NSIG		64
122#define _COMPAT_NSIG_BPW	32
123
124typedef u32		compat_sigset_word;
125
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126#define COMPAT_OFF_T_MAX	0x7fffffff
 
127
128/*
129 * A pointer passed in from user mode. This should not
130 * be used for syscall parameters, just declare them
131 * as pointers because the syscall entry code will have
132 * appropriately converted them already.
133 */
134
135static inline void __user *compat_ptr(compat_uptr_t uptr)
136{
137	return (void __user *)(unsigned long)uptr;
138}
139
140static inline compat_uptr_t ptr_to_compat(void __user *uptr)
141{
142	return (u32)(unsigned long)uptr;
143}
144
145#ifdef CONFIG_COMPAT
146static inline void __user *arch_compat_alloc_user_space(long len)
147{
148	struct pt_regs *regs = current_thread_info()->kregs;
149	unsigned long usp = regs->u_regs[UREG_I6];
150
151	if (test_thread_64bit_stack(usp))
152		usp += STACK_BIAS;
153
154	if (test_thread_flag(TIF_32BIT))
155		usp &= 0xffffffffUL;
156
157	usp -= len;
158	usp &= ~0x7UL;
159
160	return (void __user *) usp;
161}
162#endif
163
164struct compat_ipc64_perm {
165	compat_key_t key;
166	__compat_uid32_t uid;
167	__compat_gid32_t gid;
168	__compat_uid32_t cuid;
169	__compat_gid32_t cgid;
170	unsigned short __pad1;
171	compat_mode_t mode;
172	unsigned short __pad2;
173	unsigned short seq;
174	unsigned long __unused1;	/* yes they really are 64bit pads */
175	unsigned long __unused2;
176};
177
178struct compat_semid64_ds {
179	struct compat_ipc64_perm sem_perm;
180	unsigned int	sem_otime_high;
181	unsigned int	sem_otime;
182	unsigned int	sem_ctime_high;
183	unsigned int	sem_ctime;
184	u32		sem_nsems;
185	u32		__unused1;
186	u32		__unused2;
187};
188
189struct compat_msqid64_ds {
190	struct compat_ipc64_perm msg_perm;
191	unsigned int	msg_stime_high;
192	unsigned int	msg_stime;
193	unsigned int	msg_rtime_high;
194	unsigned int	msg_rtime;
195	unsigned int	msg_ctime_high;
196	unsigned int	msg_ctime;
197	unsigned int	msg_cbytes;
198	unsigned int	msg_qnum;
199	unsigned int	msg_qbytes;
200	compat_pid_t	msg_lspid;
201	compat_pid_t	msg_lrpid;
202	unsigned int	__unused1;
203	unsigned int	__unused2;
204};
205
206struct compat_shmid64_ds {
207	struct compat_ipc64_perm shm_perm;
208	unsigned int	shm_atime_high;
209	unsigned int	shm_atime;
210	unsigned int	shm_dtime_high;
211	unsigned int	shm_dtime;
212	unsigned int	shm_ctime_high;
213	unsigned int	shm_ctime;
214	compat_size_t	shm_segsz;
215	compat_pid_t	shm_cpid;
216	compat_pid_t	shm_lpid;
217	unsigned int	shm_nattch;
218	unsigned int	__unused1;
219	unsigned int	__unused2;
220};
221
222#ifdef CONFIG_COMPAT
223static inline int is_compat_task(void)
224{
225	return test_thread_flag(TIF_32BIT);
226}
227
228static inline bool in_compat_syscall(void)
229{
230	/* Vector 0x110 is LINUX_32BIT_SYSCALL_TRAP */
231	return pt_regs_trap_type(current_pt_regs()) == 0x110;
232}
233#define in_compat_syscall in_compat_syscall
234#endif
235
236#endif /* _ASM_SPARC64_COMPAT_H */
v4.6
 
  1#ifndef _ASM_SPARC64_COMPAT_H
  2#define _ASM_SPARC64_COMPAT_H
  3/*
  4 * Architecture specific compatibility types
  5 */
  6#include <linux/types.h>
  7
 
 
  8#define COMPAT_USER_HZ		100
  9#define COMPAT_UTS_MACHINE	"sparc\0\0"
 10
 11typedef u32		compat_size_t;
 12typedef s32		compat_ssize_t;
 13typedef s32		compat_time_t;
 14typedef s32		compat_clock_t;
 15typedef s32		compat_pid_t;
 16typedef u16		__compat_uid_t;
 17typedef u16		__compat_gid_t;
 18typedef u32		__compat_uid32_t;
 19typedef u32		__compat_gid32_t;
 20typedef u16		compat_mode_t;
 21typedef u32		compat_ino_t;
 22typedef u16		compat_dev_t;
 23typedef s32		compat_off_t;
 24typedef s64		compat_loff_t;
 25typedef s16		compat_nlink_t;
 26typedef u16		compat_ipc_pid_t;
 27typedef s32		compat_daddr_t;
 28typedef u32		compat_caddr_t;
 29typedef __kernel_fsid_t	compat_fsid_t;
 30typedef s32		compat_key_t;
 31typedef s32		compat_timer_t;
 32
 33typedef s32		compat_int_t;
 34typedef s32		compat_long_t;
 35typedef s64		compat_s64;
 36typedef u32		compat_uint_t;
 37typedef u32		compat_ulong_t;
 38typedef u64		compat_u64;
 39typedef u32		compat_uptr_t;
 40
 41struct compat_timespec {
 42	compat_time_t	tv_sec;
 43	s32		tv_nsec;
 44};
 45
 46struct compat_timeval {
 47	compat_time_t	tv_sec;
 48	s32		tv_usec;
 49};
 50
 51struct compat_stat {
 52	compat_dev_t	st_dev;
 53	compat_ino_t	st_ino;
 54	compat_mode_t	st_mode;
 55	compat_nlink_t	st_nlink;
 56	__compat_uid_t	st_uid;
 57	__compat_gid_t	st_gid;
 58	compat_dev_t	st_rdev;
 59	compat_off_t	st_size;
 60	compat_time_t	st_atime;
 61	compat_ulong_t	st_atime_nsec;
 62	compat_time_t	st_mtime;
 63	compat_ulong_t	st_mtime_nsec;
 64	compat_time_t	st_ctime;
 65	compat_ulong_t	st_ctime_nsec;
 66	compat_off_t	st_blksize;
 67	compat_off_t	st_blocks;
 68	u32		__unused4[2];
 69};
 70
 71struct compat_stat64 {
 72	unsigned long long	st_dev;
 73
 74	unsigned long long	st_ino;
 75
 76	unsigned int	st_mode;
 77	unsigned int	st_nlink;
 78
 79	unsigned int	st_uid;
 80	unsigned int	st_gid;
 81
 82	unsigned long long	st_rdev;
 83
 84	unsigned char	__pad3[8];
 85
 86	long long	st_size;
 87	unsigned int	st_blksize;
 88
 89	unsigned char	__pad4[8];
 90	unsigned int	st_blocks;
 91
 92	unsigned int	st_atime;
 93	unsigned int	st_atime_nsec;
 94
 95	unsigned int	st_mtime;
 96	unsigned int	st_mtime_nsec;
 97
 98	unsigned int	st_ctime;
 99	unsigned int	st_ctime_nsec;
100
101	unsigned int	__unused4;
102	unsigned int	__unused5;
103};
104
105struct compat_flock {
106	short		l_type;
107	short		l_whence;
108	compat_off_t	l_start;
109	compat_off_t	l_len;
110	compat_pid_t	l_pid;
111	short		__unused;
112};
113
114#define F_GETLK64	12
115#define F_SETLK64	13
116#define F_SETLKW64	14
117
118struct compat_flock64 {
119	short		l_type;
120	short		l_whence;
121	compat_loff_t	l_start;
122	compat_loff_t	l_len;
123	compat_pid_t	l_pid;
124	short		__unused;
125};
126
127struct compat_statfs {
128	int		f_type;
129	int		f_bsize;
130	int		f_blocks;
131	int		f_bfree;
132	int		f_bavail;
133	int		f_files;
134	int		f_ffree;
135	compat_fsid_t	f_fsid;
136	int		f_namelen;	/* SunOS ignores this field. */
137	int		f_frsize;
138	int		f_flags;
139	int		f_spare[4];
140};
141
142#define COMPAT_RLIM_INFINITY 0x7fffffff
143
144typedef u32		compat_old_sigset_t;
145
146#define _COMPAT_NSIG		64
147#define _COMPAT_NSIG_BPW	32
148
149typedef u32		compat_sigset_word;
150
151typedef union compat_sigval {
152	compat_int_t	sival_int;
153	compat_uptr_t	sival_ptr;
154} compat_sigval_t;
155
156#define SI_PAD_SIZE32	(128/sizeof(int) - 3)
157
158typedef struct compat_siginfo {
159	int si_signo;
160	int si_errno;
161	int si_code;
162
163	union {
164		int _pad[SI_PAD_SIZE32];
165
166		/* kill() */
167		struct {
168			compat_pid_t _pid;		/* sender's pid */
169			unsigned int _uid;		/* sender's uid */
170		} _kill;
171
172		/* POSIX.1b timers */
173		struct {
174			compat_timer_t _tid;		/* timer id */
175			int _overrun;			/* overrun count */
176			compat_sigval_t _sigval;	/* same as below */
177			int _sys_private;	/* not to be passed to user */
178		} _timer;
179
180		/* POSIX.1b signals */
181		struct {
182			compat_pid_t _pid;		/* sender's pid */
183			unsigned int _uid;		/* sender's uid */
184			compat_sigval_t _sigval;
185		} _rt;
186
187		/* SIGCHLD */
188		struct {
189			compat_pid_t _pid;		/* which child */
190			unsigned int _uid;		/* sender's uid */
191			int _status;			/* exit code */
192			compat_clock_t _utime;
193			compat_clock_t _stime;
194		} _sigchld;
195
196		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS, SIGEMT */
197		struct {
198			u32 _addr; /* faulting insn/memory ref. */
199			int _trapno;
200		} _sigfault;
201
202		/* SIGPOLL */
203		struct {
204			int _band;	/* POLL_IN, POLL_OUT, POLL_MSG */
205			int _fd;
206		} _sigpoll;
207	} _sifields;
208} compat_siginfo_t;
209
210#define COMPAT_OFF_T_MAX	0x7fffffff
211#define COMPAT_LOFF_T_MAX	0x7fffffffffffffffL
212
213/*
214 * A pointer passed in from user mode. This should not
215 * be used for syscall parameters, just declare them
216 * as pointers because the syscall entry code will have
217 * appropriately converted them already.
218 */
219
220static inline void __user *compat_ptr(compat_uptr_t uptr)
221{
222	return (void __user *)(unsigned long)uptr;
223}
224
225static inline compat_uptr_t ptr_to_compat(void __user *uptr)
226{
227	return (u32)(unsigned long)uptr;
228}
229
 
230static inline void __user *arch_compat_alloc_user_space(long len)
231{
232	struct pt_regs *regs = current_thread_info()->kregs;
233	unsigned long usp = regs->u_regs[UREG_I6];
234
235	if (test_thread_64bit_stack(usp))
236		usp += STACK_BIAS;
237
238	if (test_thread_flag(TIF_32BIT))
239		usp &= 0xffffffffUL;
240
241	usp -= len;
242	usp &= ~0x7UL;
243
244	return (void __user *) usp;
245}
 
246
247struct compat_ipc64_perm {
248	compat_key_t key;
249	__compat_uid32_t uid;
250	__compat_gid32_t gid;
251	__compat_uid32_t cuid;
252	__compat_gid32_t cgid;
253	unsigned short __pad1;
254	compat_mode_t mode;
255	unsigned short __pad2;
256	unsigned short seq;
257	unsigned long __unused1;	/* yes they really are 64bit pads */
258	unsigned long __unused2;
259};
260
261struct compat_semid64_ds {
262	struct compat_ipc64_perm sem_perm;
263	unsigned int	__pad1;
264	compat_time_t	sem_otime;
265	unsigned int	__pad2;
266	compat_time_t	sem_ctime;
267	u32		sem_nsems;
268	u32		__unused1;
269	u32		__unused2;
270};
271
272struct compat_msqid64_ds {
273	struct compat_ipc64_perm msg_perm;
274	unsigned int	__pad1;
275	compat_time_t	msg_stime;
276	unsigned int	__pad2;
277	compat_time_t	msg_rtime;
278	unsigned int	__pad3;
279	compat_time_t	msg_ctime;
280	unsigned int	msg_cbytes;
281	unsigned int	msg_qnum;
282	unsigned int	msg_qbytes;
283	compat_pid_t	msg_lspid;
284	compat_pid_t	msg_lrpid;
285	unsigned int	__unused1;
286	unsigned int	__unused2;
287};
288
289struct compat_shmid64_ds {
290	struct compat_ipc64_perm shm_perm;
291	unsigned int	__pad1;
292	compat_time_t	shm_atime;
293	unsigned int	__pad2;
294	compat_time_t	shm_dtime;
295	unsigned int	__pad3;
296	compat_time_t	shm_ctime;
297	compat_size_t	shm_segsz;
298	compat_pid_t	shm_cpid;
299	compat_pid_t	shm_lpid;
300	unsigned int	shm_nattch;
301	unsigned int	__unused1;
302	unsigned int	__unused2;
303};
304
 
305static inline int is_compat_task(void)
306{
307	return test_thread_flag(TIF_32BIT);
308}
309
310static inline bool in_compat_syscall(void)
311{
312	/* Vector 0x110 is LINUX_32BIT_SYSCALL_TRAP */
313	return pt_regs_trap_type(current_pt_regs()) == 0x110;
314}
315#define in_compat_syscall in_compat_syscall
 
316
317#endif /* _ASM_SPARC64_COMPAT_H */