Linux Audio

Check our new training course

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