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 */
v3.5.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;
 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_flags;
138	int		f_spare[4];
139};
140
141#define COMPAT_RLIM_INFINITY 0x7fffffff
142
143typedef u32		compat_old_sigset_t;
144
145#define _COMPAT_NSIG		64
146#define _COMPAT_NSIG_BPW	32
147
148typedef u32		compat_sigset_word;
149
150#define COMPAT_OFF_T_MAX	0x7fffffff
151#define COMPAT_LOFF_T_MAX	0x7fffffffffffffffL
152
153/*
154 * A pointer passed in from user mode. This should not
155 * be used for syscall parameters, just declare them
156 * as pointers because the syscall entry code will have
157 * appropriately converted them already.
158 */
159typedef	u32		compat_uptr_t;
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_flag(TIF_32BIT)))
177		usp += STACK_BIAS;
178	else
 
179		usp &= 0xffffffffUL;
180
181	usp -= len;
182	usp &= ~0x7UL;
183
184	return (void __user *) usp;
185}
 
186
187struct compat_ipc64_perm {
188	compat_key_t key;
189	__compat_uid32_t uid;
190	__compat_gid32_t gid;
191	__compat_uid32_t cuid;
192	__compat_gid32_t cgid;
193	unsigned short __pad1;
194	compat_mode_t mode;
195	unsigned short __pad2;
196	unsigned short seq;
197	unsigned long __unused1;	/* yes they really are 64bit pads */
198	unsigned long __unused2;
199};
200
201struct compat_semid64_ds {
202	struct compat_ipc64_perm sem_perm;
203	unsigned int	__pad1;
204	compat_time_t	sem_otime;
205	unsigned int	__pad2;
206	compat_time_t	sem_ctime;
207	u32		sem_nsems;
208	u32		__unused1;
209	u32		__unused2;
210};
211
212struct compat_msqid64_ds {
213	struct compat_ipc64_perm msg_perm;
214	unsigned int	__pad1;
215	compat_time_t	msg_stime;
216	unsigned int	__pad2;
217	compat_time_t	msg_rtime;
218	unsigned int	__pad3;
219	compat_time_t	msg_ctime;
220	unsigned int	msg_cbytes;
221	unsigned int	msg_qnum;
222	unsigned int	msg_qbytes;
223	compat_pid_t	msg_lspid;
224	compat_pid_t	msg_lrpid;
225	unsigned int	__unused1;
226	unsigned int	__unused2;
227};
228
229struct compat_shmid64_ds {
230	struct compat_ipc64_perm shm_perm;
231	unsigned int	__pad1;
232	compat_time_t	shm_atime;
233	unsigned int	__pad2;
234	compat_time_t	shm_dtime;
235	unsigned int	__pad3;
236	compat_time_t	shm_ctime;
237	compat_size_t	shm_segsz;
238	compat_pid_t	shm_cpid;
239	compat_pid_t	shm_lpid;
240	unsigned int	shm_nattch;
241	unsigned int	__unused1;
242	unsigned int	__unused2;
243};
244
 
245static inline int is_compat_task(void)
246{
247	return test_thread_flag(TIF_32BIT);
248}
 
 
 
 
 
 
 
 
249
250#endif /* _ASM_SPARC64_COMPAT_H */