PageRenderTime 34ms CodeModel.GetById 12ms app.highlight 17ms RepoModel.GetById 2ms app.codeStats 0ms

/arch/powerpc/include/asm/compat.h

http://github.com/mirrors/linux
C Header | 183 lines | 148 code | 22 blank | 13 comment | 1 complexity | e197d2f71861d13e0cd308bc05c8ea84 MD5 | raw file
  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#include <asm-generic/compat.h>
 12
 13#define COMPAT_USER_HZ		100
 14#ifdef __BIG_ENDIAN__
 15#define COMPAT_UTS_MACHINE	"ppc\0\0"
 16#else
 17#define COMPAT_UTS_MACHINE	"ppcle\0\0"
 18#endif
 19
 20typedef u32		__compat_uid_t;
 21typedef u32		__compat_gid_t;
 22typedef u32		__compat_uid32_t;
 23typedef u32		__compat_gid32_t;
 24typedef u32		compat_mode_t;
 25typedef u32		compat_dev_t;
 26typedef s16		compat_nlink_t;
 27typedef u16		compat_ipc_pid_t;
 28typedef u32		compat_caddr_t;
 29typedef __kernel_fsid_t	compat_fsid_t;
 30typedef s64		compat_s64;
 31typedef u64		compat_u64;
 32
 33struct compat_stat {
 34	compat_dev_t	st_dev;
 35	compat_ino_t	st_ino;
 36	compat_mode_t	st_mode;
 37	compat_nlink_t	st_nlink;
 38	__compat_uid32_t	st_uid;
 39	__compat_gid32_t	st_gid;
 40	compat_dev_t	st_rdev;
 41	compat_off_t	st_size;
 42	compat_off_t	st_blksize;
 43	compat_off_t	st_blocks;
 44	old_time32_t	st_atime;
 45	u32		st_atime_nsec;
 46	old_time32_t	st_mtime;
 47	u32		st_mtime_nsec;
 48	old_time32_t	st_ctime;
 49	u32		st_ctime_nsec;
 50	u32		__unused4[2];
 51};
 52
 53struct compat_flock {
 54	short		l_type;
 55	short		l_whence;
 56	compat_off_t	l_start;
 57	compat_off_t	l_len;
 58	compat_pid_t	l_pid;
 59};
 60
 61#define F_GETLK64	12	/*  using 'struct flock64' */
 62#define F_SETLK64	13
 63#define F_SETLKW64	14
 64
 65struct compat_flock64 {
 66	short		l_type;
 67	short		l_whence;
 68	compat_loff_t	l_start;
 69	compat_loff_t	l_len;
 70	compat_pid_t	l_pid;
 71};
 72
 73struct compat_statfs {
 74	int		f_type;
 75	int		f_bsize;
 76	int		f_blocks;
 77	int		f_bfree;
 78	int		f_bavail;
 79	int		f_files;
 80	int		f_ffree;
 81	compat_fsid_t	f_fsid;
 82	int		f_namelen;	/* SunOS ignores this field. */
 83	int		f_frsize;
 84	int		f_flags;
 85	int		f_spare[4];
 86};
 87
 88#define COMPAT_RLIM_INFINITY		0xffffffff
 89
 90typedef u32		compat_old_sigset_t;
 91
 92#define _COMPAT_NSIG		64
 93#define _COMPAT_NSIG_BPW	32
 94
 95typedef u32		compat_sigset_word;
 96
 97#define COMPAT_OFF_T_MAX	0x7fffffff
 98
 99static inline void __user *arch_compat_alloc_user_space(long len)
100{
101	struct pt_regs *regs = current->thread.regs;
102	unsigned long usp = regs->gpr[1];
103
104	/*
105	 * We can't access below the stack pointer in the 32bit ABI and
106	 * can access 288 bytes in the 64bit big-endian ABI,
107	 * or 512 bytes with the new ELFv2 little-endian ABI.
108	 */
109	if (!is_32bit_task())
110		usp -= USER_REDZONE_SIZE;
111
112	return (void __user *) (usp - len);
113}
114
115/*
116 * ipc64_perm is actually 32/64bit clean but since the compat layer refers to
117 * it we may as well define it.
118 */
119struct compat_ipc64_perm {
120	compat_key_t key;
121	__compat_uid_t uid;
122	__compat_gid_t gid;
123	__compat_uid_t cuid;
124	__compat_gid_t cgid;
125	compat_mode_t mode;
126	unsigned int seq;
127	unsigned int __pad2;
128	unsigned long __unused1;	/* yes they really are 64bit pads */
129	unsigned long __unused2;
130};
131
132struct compat_semid64_ds {
133	struct compat_ipc64_perm sem_perm;
134	unsigned int sem_otime_high;
135	unsigned int sem_otime;
136	unsigned int sem_ctime_high;
137	unsigned int sem_ctime;
138	compat_ulong_t sem_nsems;
139	compat_ulong_t __unused3;
140	compat_ulong_t __unused4;
141};
142
143struct compat_msqid64_ds {
144	struct compat_ipc64_perm msg_perm;
145	unsigned int msg_stime_high;
146	unsigned int msg_stime;
147	unsigned int msg_rtime_high;
148	unsigned int msg_rtime;
149	unsigned int msg_ctime_high;
150	unsigned int msg_ctime;
151	compat_ulong_t msg_cbytes;
152	compat_ulong_t msg_qnum;
153	compat_ulong_t msg_qbytes;
154	compat_pid_t msg_lspid;
155	compat_pid_t msg_lrpid;
156	compat_ulong_t __unused4;
157	compat_ulong_t __unused5;
158};
159
160struct compat_shmid64_ds {
161	struct compat_ipc64_perm shm_perm;
162	unsigned int shm_atime_high;
163	unsigned int shm_atime;
164	unsigned int shm_dtime_high;
165	unsigned int shm_dtime;
166	unsigned int shm_ctime_high;
167	unsigned int shm_ctime;
168	unsigned int __unused4;
169	compat_size_t shm_segsz;
170	compat_pid_t shm_cpid;
171	compat_pid_t shm_lpid;
172	compat_ulong_t shm_nattch;
173	compat_ulong_t __unused5;
174	compat_ulong_t __unused6;
175};
176
177static inline int is_compat_task(void)
178{
179	return is_32bit_task();
180}
181
182#endif /* __KERNEL__ */
183#endif /* _ASM_POWERPC_COMPAT_H */