Linux Audio

Check our new training course

Loading...
v4.17
  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_USER_HZ		100
 10#define COMPAT_UTS_MACHINE	"sparc\0\0"
 11
 12typedef u32		compat_size_t;
 13typedef s32		compat_ssize_t;
 14typedef s32		compat_time_t;
 15typedef s32		compat_clock_t;
 16typedef s32		compat_pid_t;
 17typedef u16		__compat_uid_t;
 18typedef u16		__compat_gid_t;
 19typedef u32		__compat_uid32_t;
 20typedef u32		__compat_gid32_t;
 21typedef u16		compat_mode_t;
 22typedef u32		compat_ino_t;
 23typedef u16		compat_dev_t;
 24typedef s32		compat_off_t;
 25typedef s64		compat_loff_t;
 26typedef s16		compat_nlink_t;
 27typedef u16		compat_ipc_pid_t;
 28typedef s32		compat_daddr_t;
 29typedef u32		compat_caddr_t;
 30typedef __kernel_fsid_t	compat_fsid_t;
 31typedef s32		compat_key_t;
 32typedef s32		compat_timer_t;
 33
 34typedef s32		compat_int_t;
 35typedef s32		compat_long_t;
 36typedef s64		compat_s64;
 37typedef u32		compat_uint_t;
 38typedef u32		compat_ulong_t;
 39typedef u64		compat_u64;
 40typedef u32		compat_uptr_t;
 41
 42struct compat_timespec {
 43	compat_time_t	tv_sec;
 44	s32		tv_nsec;
 45};
 46
 47struct compat_timeval {
 48	compat_time_t	tv_sec;
 49	s32		tv_usec;
 50};
 51
 52struct compat_stat {
 53	compat_dev_t	st_dev;
 54	compat_ino_t	st_ino;
 55	compat_mode_t	st_mode;
 56	compat_nlink_t	st_nlink;
 57	__compat_uid_t	st_uid;
 58	__compat_gid_t	st_gid;
 59	compat_dev_t	st_rdev;
 60	compat_off_t	st_size;
 61	compat_time_t	st_atime;
 62	compat_ulong_t	st_atime_nsec;
 63	compat_time_t	st_mtime;
 64	compat_ulong_t	st_mtime_nsec;
 65	compat_time_t	st_ctime;
 66	compat_ulong_t	st_ctime_nsec;
 67	compat_off_t	st_blksize;
 68	compat_off_t	st_blocks;
 69	u32		__unused4[2];
 70};
 71
 72struct compat_stat64 {
 73	unsigned long long	st_dev;
 74
 75	unsigned long long	st_ino;
 76
 77	unsigned int	st_mode;
 78	unsigned int	st_nlink;
 79
 80	unsigned int	st_uid;
 81	unsigned int	st_gid;
 82
 83	unsigned long long	st_rdev;
 84
 85	unsigned char	__pad3[8];
 86
 87	long long	st_size;
 88	unsigned int	st_blksize;
 89
 90	unsigned char	__pad4[8];
 91	unsigned int	st_blocks;
 92
 93	unsigned int	st_atime;
 94	unsigned int	st_atime_nsec;
 95
 96	unsigned int	st_mtime;
 97	unsigned int	st_mtime_nsec;
 98
 99	unsigned int	st_ctime;
100	unsigned int	st_ctime_nsec;
101
102	unsigned int	__unused4;
103	unsigned int	__unused5;
104};
105
106struct compat_flock {
107	short		l_type;
108	short		l_whence;
109	compat_off_t	l_start;
110	compat_off_t	l_len;
111	compat_pid_t	l_pid;
112	short		__unused;
113};
114
115#define F_GETLK64	12
116#define F_SETLK64	13
117#define F_SETLKW64	14
118
119struct compat_flock64 {
120	short		l_type;
121	short		l_whence;
122	compat_loff_t	l_start;
123	compat_loff_t	l_len;
124	compat_pid_t	l_pid;
125	short		__unused;
126};
127
128struct compat_statfs {
129	int		f_type;
130	int		f_bsize;
131	int		f_blocks;
132	int		f_bfree;
133	int		f_bavail;
134	int		f_files;
135	int		f_ffree;
136	compat_fsid_t	f_fsid;
137	int		f_namelen;	/* SunOS ignores this field. */
138	int		f_frsize;
139	int		f_flags;
140	int		f_spare[4];
141};
142
143#define COMPAT_RLIM_INFINITY 0x7fffffff
144
145typedef u32		compat_old_sigset_t;
146
147#define _COMPAT_NSIG		64
148#define _COMPAT_NSIG_BPW	32
149
150typedef u32		compat_sigset_word;
151
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
152#define COMPAT_OFF_T_MAX	0x7fffffff
 
153
154/*
155 * A pointer passed in from user mode. This should not
156 * be used for syscall parameters, just declare them
157 * as pointers because the syscall entry code will have
158 * appropriately converted them already.
159 */
160
161static inline void __user *compat_ptr(compat_uptr_t uptr)
162{
163	return (void __user *)(unsigned long)uptr;
164}
165
166static inline compat_uptr_t ptr_to_compat(void __user *uptr)
167{
168	return (u32)(unsigned long)uptr;
169}
170
171static inline void __user *arch_compat_alloc_user_space(long len)
172{
173	struct pt_regs *regs = current_thread_info()->kregs;
174	unsigned long usp = regs->u_regs[UREG_I6];
175
176	if (test_thread_64bit_stack(usp))
177		usp += STACK_BIAS;
178
179	if (test_thread_flag(TIF_32BIT))
180		usp &= 0xffffffffUL;
181
182	usp -= len;
183	usp &= ~0x7UL;
184
185	return (void __user *) usp;
186}
187
188struct compat_ipc64_perm {
189	compat_key_t key;
190	__compat_uid32_t uid;
191	__compat_gid32_t gid;
192	__compat_uid32_t cuid;
193	__compat_gid32_t cgid;
194	unsigned short __pad1;
195	compat_mode_t mode;
196	unsigned short __pad2;
197	unsigned short seq;
198	unsigned long __unused1;	/* yes they really are 64bit pads */
199	unsigned long __unused2;
200};
201
202struct compat_semid64_ds {
203	struct compat_ipc64_perm sem_perm;
204	unsigned int	__pad1;
205	compat_time_t	sem_otime;
206	unsigned int	__pad2;
207	compat_time_t	sem_ctime;
208	u32		sem_nsems;
209	u32		__unused1;
210	u32		__unused2;
211};
212
213struct compat_msqid64_ds {
214	struct compat_ipc64_perm msg_perm;
215	unsigned int	__pad1;
216	compat_time_t	msg_stime;
217	unsigned int	__pad2;
218	compat_time_t	msg_rtime;
219	unsigned int	__pad3;
220	compat_time_t	msg_ctime;
221	unsigned int	msg_cbytes;
222	unsigned int	msg_qnum;
223	unsigned int	msg_qbytes;
224	compat_pid_t	msg_lspid;
225	compat_pid_t	msg_lrpid;
226	unsigned int	__unused1;
227	unsigned int	__unused2;
228};
229
230struct compat_shmid64_ds {
231	struct compat_ipc64_perm shm_perm;
232	unsigned int	__pad1;
233	compat_time_t	shm_atime;
234	unsigned int	__pad2;
235	compat_time_t	shm_dtime;
236	unsigned int	__pad3;
237	compat_time_t	shm_ctime;
238	compat_size_t	shm_segsz;
239	compat_pid_t	shm_cpid;
240	compat_pid_t	shm_lpid;
241	unsigned int	shm_nattch;
242	unsigned int	__unused1;
243	unsigned int	__unused2;
244};
245
246static inline int is_compat_task(void)
247{
248	return test_thread_flag(TIF_32BIT);
249}
250
251static inline bool in_compat_syscall(void)
252{
253	/* Vector 0x110 is LINUX_32BIT_SYSCALL_TRAP */
254	return pt_regs_trap_type(current_pt_regs()) == 0x110;
255}
256#define in_compat_syscall in_compat_syscall
257
258#endif /* _ASM_SPARC64_COMPAT_H */
v4.10.11
 
  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 */