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 */
v6.8
  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
 10typedef u16		compat_mode_t;
 
 
 11
 12#define __compat_uid_t	__compat_uid_t
 13typedef u16		__compat_uid_t;
 14typedef u16		__compat_gid_t;
 15
 16#define compat_dev_t	compat_dev_t
 
 17typedef u16		compat_dev_t;
 18
 19#define compat_ipc_pid_t compat_ipc_pid_t
 20typedef u16		 compat_ipc_pid_t;
 21
 22#define compat_ipc64_perm compat_ipc64_perm
 23
 24#define COMPAT_RLIM_INFINITY 0x7fffffff
 25
 26#include <asm-generic/compat.h>
 27
 28#define COMPAT_UTS_MACHINE	"sparc\0\0"
 29
 30typedef s16		compat_nlink_t;
 31
 
 
 
 
 32struct compat_stat {
 33	compat_dev_t	st_dev;
 34	compat_ino_t	st_ino;
 35	compat_mode_t	st_mode;
 36	compat_nlink_t	st_nlink;
 37	__compat_uid_t	st_uid;
 38	__compat_gid_t	st_gid;
 39	compat_dev_t	st_rdev;
 40	compat_off_t	st_size;
 41	old_time32_t	st_atime;
 42	compat_ulong_t	st_atime_nsec;
 43	old_time32_t	st_mtime;
 44	compat_ulong_t	st_mtime_nsec;
 45	old_time32_t	st_ctime;
 46	compat_ulong_t	st_ctime_nsec;
 47	compat_off_t	st_blksize;
 48	compat_off_t	st_blocks;
 49	u32		__unused4[2];
 50};
 51
 52struct compat_stat64 {
 53	unsigned long long	st_dev;
 54
 55	unsigned long long	st_ino;
 56
 57	unsigned int	st_mode;
 58	unsigned int	st_nlink;
 59
 60	unsigned int	st_uid;
 61	unsigned int	st_gid;
 62
 63	unsigned long long	st_rdev;
 64
 65	unsigned char	__pad3[8];
 66
 67	long long	st_size;
 68	unsigned int	st_blksize;
 69
 70	unsigned char	__pad4[8];
 71	unsigned int	st_blocks;
 72
 73	unsigned int	st_atime;
 74	unsigned int	st_atime_nsec;
 75
 76	unsigned int	st_mtime;
 77	unsigned int	st_mtime_nsec;
 78
 79	unsigned int	st_ctime;
 80	unsigned int	st_ctime_nsec;
 81
 82	unsigned int	__unused4;
 83	unsigned int	__unused5;
 84};
 85
 86#define __ARCH_COMPAT_FLOCK_PAD		short __unused;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 87
 88struct compat_ipc64_perm {
 89	compat_key_t key;
 90	__compat_uid32_t uid;
 91	__compat_gid32_t gid;
 92	__compat_uid32_t cuid;
 93	__compat_gid32_t cgid;
 94	unsigned short __pad1;
 95	compat_mode_t mode;
 96	unsigned short __pad2;
 97	unsigned short seq;
 98	unsigned long __unused1;	/* yes they really are 64bit pads */
 99	unsigned long __unused2;
100};
101
102struct compat_semid64_ds {
103	struct compat_ipc64_perm sem_perm;
104	unsigned int	sem_otime_high;
105	unsigned int	sem_otime;
106	unsigned int	sem_ctime_high;
107	unsigned int	sem_ctime;
108	u32		sem_nsems;
109	u32		__unused1;
110	u32		__unused2;
111};
112
113struct compat_msqid64_ds {
114	struct compat_ipc64_perm msg_perm;
115	unsigned int	msg_stime_high;
116	unsigned int	msg_stime;
117	unsigned int	msg_rtime_high;
118	unsigned int	msg_rtime;
119	unsigned int	msg_ctime_high;
120	unsigned int	msg_ctime;
121	unsigned int	msg_cbytes;
122	unsigned int	msg_qnum;
123	unsigned int	msg_qbytes;
124	compat_pid_t	msg_lspid;
125	compat_pid_t	msg_lrpid;
126	unsigned int	__unused1;
127	unsigned int	__unused2;
128};
129
130struct compat_shmid64_ds {
131	struct compat_ipc64_perm shm_perm;
132	unsigned int	shm_atime_high;
133	unsigned int	shm_atime;
134	unsigned int	shm_dtime_high;
135	unsigned int	shm_dtime;
136	unsigned int	shm_ctime_high;
137	unsigned int	shm_ctime;
138	compat_size_t	shm_segsz;
139	compat_pid_t	shm_cpid;
140	compat_pid_t	shm_lpid;
141	unsigned int	shm_nattch;
142	unsigned int	__unused1;
143	unsigned int	__unused2;
144};
145
146#ifdef CONFIG_COMPAT
147static inline int is_compat_task(void)
148{
149	return test_thread_flag(TIF_32BIT);
150}
151
152static inline bool in_compat_syscall(void)
153{
154	/* Vector 0x110 is LINUX_32BIT_SYSCALL_TRAP */
155	return pt_regs_trap_type(current_pt_regs()) == 0x110;
156}
157#define in_compat_syscall in_compat_syscall
158#endif
159
160#endif /* _ASM_SPARC64_COMPAT_H */