Linux Audio

Check our new training course

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