11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef _ASM_S390X_COMPAT_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _ASM_S390X_COMPAT_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Architecture specific compatibility types
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/types.h>
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/sched.h>
87757591ab4a36314a258e181dbf0994415c288c2Heiko Carstens#include <linux/thread_info.h>
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
10468366138850f20543f1d4878028900672b23daeAl Viro#define __TYPE_IS_PTR(t) (!__builtin_types_compatible_p(typeof(0?(t)0:0ULL), u64))
119a205286bcca84b38d3ab1689f16236d1935af2dHeiko Carstens
129a205286bcca84b38d3ab1689f16236d1935af2dHeiko Carstens#define __SC_DELOUSE(t,v) ({ \
139a205286bcca84b38d3ab1689f16236d1935af2dHeiko Carstens	BUILD_BUG_ON(sizeof(t) > 4 && !__TYPE_IS_PTR(t)); \
149a205286bcca84b38d3ab1689f16236d1935af2dHeiko Carstens	(t)(__TYPE_IS_PTR(t) ? ((v) & 0x7fffffff) : (v)); \
159a205286bcca84b38d3ab1689f16236d1935af2dHeiko Carstens})
16468366138850f20543f1d4878028900672b23daeAl Viro
17c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_PER		0x40000000UL
18c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_DAT		0x04000000UL
19c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_IO		0x02000000UL
20c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_EXT		0x01000000UL
21c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_KEY		0x00F00000UL
22b50511e41aa51a89b4176784a670582424bc7db6Martin Schwidefsky#define PSW32_MASK_BASE		0x00080000UL	/* Always one */
23c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_MCHECK	0x00040000UL
24c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_WAIT		0x00020000UL
25c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_PSTATE	0x00010000UL
26c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_ASC		0x0000C000UL
27c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_CC		0x00003000UL
28c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_MASK_PM		0x00000f00UL
295ebf250dabbae83ad875f0dda5a108503cf78f3bHeiko Carstens#define PSW32_MASK_RI		0x00000080UL
30c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer
31fa968ee215c0ca91e4a9c3a69ac2405aae6e5d2fMartin Schwidefsky#define PSW32_MASK_USER		0x0000FF00UL
32b50511e41aa51a89b4176784a670582424bc7db6Martin Schwidefsky
33b50511e41aa51a89b4176784a670582424bc7db6Martin Schwidefsky#define PSW32_ADDR_AMODE	0x80000000UL
34c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_ADDR_INSN		0x7FFFFFFFUL
35c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer
36b50511e41aa51a89b4176784a670582424bc7db6Martin Schwidefsky#define PSW32_DEFAULT_KEY	(((u32) PAGE_DEFAULT_ACC) << 20)
37c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer
38c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_ASC_PRIMARY	0x00000000UL
39c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_ASC_ACCREG	0x00004000UL
40c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_ASC_SECONDARY	0x00008000UL
41c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer#define PSW32_ASC_HOME		0x0000C000UL
42c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer
43f26946d7ecad0afdd85e6ae56663d0fe26676b34Heiko Carstens#define PSW32_USER_BITS (PSW32_MASK_DAT | PSW32_MASK_IO | PSW32_MASK_EXT | \
44f26946d7ecad0afdd85e6ae56663d0fe26676b34Heiko Carstens			 PSW32_DEFAULT_KEY | PSW32_MASK_BASE | \
45075dfd82102d2048e43e1cbf48d558d915c50072Heiko Carstens			 PSW32_MASK_MCHECK | PSW32_MASK_PSTATE | \
46075dfd82102d2048e43e1cbf48d558d915c50072Heiko Carstens			 PSW32_ASC_PRIMARY)
47c1821c2e9711adc3cd298a16b7237c92a2cee78dGerald Schaefer
48e28cbf22933d0c0ccaf3c4c27a1a263b41f73859Christoph Hellwig#define COMPAT_USER_HZ		100
49e28cbf22933d0c0ccaf3c4c27a1a263b41f73859Christoph Hellwig#define COMPAT_UTS_MACHINE	"s390\0\0\0\0"
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u32		compat_size_t;
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_ssize_t;
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_time_t;
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_clock_t;
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_pid_t;
56202e5979af4d91c7ca05892641131dee22653259Stephen Rothwelltypedef u16		__compat_uid_t;
57202e5979af4d91c7ca05892641131dee22653259Stephen Rothwelltypedef u16		__compat_gid_t;
58202e5979af4d91c7ca05892641131dee22653259Stephen Rothwelltypedef u32		__compat_uid32_t;
59202e5979af4d91c7ca05892641131dee22653259Stephen Rothwelltypedef u32		__compat_gid32_t;
601da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u16		compat_mode_t;
611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u32		compat_ino_t;
621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u16		compat_dev_t;
631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_off_t;
641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s64		compat_loff_t;
651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u16		compat_nlink_t;
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u16		compat_ipc_pid_t;
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_daddr_t;
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u32		compat_caddr_t;
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef __kernel_fsid_t	compat_fsid_t;
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_key_t;
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_timer_t;
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_int_t;
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef s32		compat_long_t;
754b7775870b69129e640ed583c9b362d5cd66159dArnd Bergmanntypedef s64		compat_s64;
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u32		compat_uint_t;
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u32		compat_ulong_t;
784b7775870b69129e640ed583c9b362d5cd66159dArnd Bergmanntypedef u64		compat_u64;
79751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenkotypedef u32		compat_uptr_t;
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
81e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstenstypedef struct {
82e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens	u32 mask;
83e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens	u32 addr;
84e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens} __aligned(8) psw_compat_t;
85e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens
86e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstenstypedef struct {
87e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens	psw_compat_t psw;
88e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens	u32 gprs[NUM_GPRS];
89e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens	u32 acrs[NUM_ACRS];
90e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens	u32 orig_gpr2;
91e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens} s390_compat_regs;
92e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens
93e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstenstypedef struct {
94e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens	u32 gprs_high[NUM_GPRS];
95e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens} s390_compat_regs_high;
96e4371f602e2fce650cb3f7d1ca5c7cd6fca78ddaHeiko Carstens
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_timespec {
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t	tv_sec;
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	s32		tv_nsec;
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_timeval {
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t	tv_sec;
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	s32		tv_usec;
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_stat {
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_dev_t	st_dev;
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16		__pad1;
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ino_t	st_ino;
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_mode_t	st_mode;
1121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_nlink_t	st_nlink;
113202e5979af4d91c7ca05892641131dee22653259Stephen Rothwell	__compat_uid_t	st_uid;
114202e5979af4d91c7ca05892641131dee22653259Stephen Rothwell	__compat_gid_t	st_gid;
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_dev_t	st_rdev;
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u16		__pad2;
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		st_size;
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		st_blksize;
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		st_blocks;
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		st_atime;
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		st_atime_nsec;
1221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		st_mtime;
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		st_mtime_nsec;
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		st_ctime;
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		st_ctime_nsec;
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		__unused4;
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	u32		__unused5;
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_flock {
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	short		l_type;
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	short		l_whence;
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_off_t	l_start;
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_off_t	l_len;
1351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_pid_t	l_pid;
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define F_GETLK64       12
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define F_SETLK64       13
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define F_SETLKW64      14
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_flock64 {
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	short		l_type;
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	short		l_whence;
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_loff_t	l_start;
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_loff_t	l_len;
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_pid_t	l_pid;
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_statfs {
151b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_type;
152b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_bsize;
153b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_blocks;
154b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_bfree;
155b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_bavail;
156b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_files;
157b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_ffree;
1581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_fsid_t	f_fsid;
159b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_namelen;
160b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_frsize;
161b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_flags;
162b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_spare[4];
163b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens};
164b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens
165b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstensstruct compat_statfs64 {
166b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_type;
167b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_bsize;
168b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u64		f_blocks;
169b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u64		f_bfree;
170b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u64		f_bavail;
171b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u64		f_files;
172b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u64		f_ffree;
173b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	compat_fsid_t	f_fsid;
174b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_namelen;
175b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_frsize;
176b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_flags;
177b8668fd0a7e1b59ff4fd33b65e7f6d46b2d3cf1cHeiko Carstens	u32		f_spare[4];
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COMPAT_RLIM_OLD_INFINITY	0x7fffffff
1811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COMPAT_RLIM_INFINITY		0xffffffff
1821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u32		compat_old_sigset_t;	/* at least 32 bits */
1841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _COMPAT_NSIG		64
1861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define _COMPAT_NSIG_BPW	32
1871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldstypedef u32		compat_sigset_word;
1891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
190751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenkotypedef union compat_sigval {
191751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko	compat_int_t	sival_int;
192751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko	compat_uptr_t	sival_ptr;
193751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko} compat_sigval_t;
194751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
195751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenkotypedef struct compat_siginfo {
196751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko	int	si_signo;
197751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko	int	si_errno;
198751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko	int	si_code;
199751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
200751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko	union {
201751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		int _pad[128/sizeof(int) - 3];
202751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
203751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		/* kill() */
204751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		struct {
205751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			pid_t	_pid;	/* sender's pid */
206751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			uid_t	_uid;	/* sender's uid */
207751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		} _kill;
208751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
209751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		/* POSIX.1b timers */
210751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		struct {
211751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			compat_timer_t _tid;		/* timer id */
212751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			int _overrun;			/* overrun count */
213751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			compat_sigval_t _sigval;	/* same as below */
214751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			int _sys_private;	/* not to be passed to user */
215751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		} _timer;
216751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
217751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		/* POSIX.1b signals */
218751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		struct {
219751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			pid_t			_pid;	/* sender's pid */
220751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			uid_t			_uid;	/* sender's uid */
221751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			compat_sigval_t		_sigval;
222751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		} _rt;
223751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
224751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		/* SIGCHLD */
225751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		struct {
226751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			pid_t			_pid;	/* which child */
227751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			uid_t			_uid;	/* sender's uid */
228751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			int			_status;/* exit code */
229751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			compat_clock_t		_utime;
230751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			compat_clock_t		_stime;
231751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		} _sigchld;
232751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
233751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */
234751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		struct {
235751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			__u32	_addr;	/* faulting insn/memory ref. - pointer */
236751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		} _sigfault;
237751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
238751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		/* SIGPOLL */
239751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		struct {
240751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			int	_band;	/* POLL_IN, POLL_OUT, POLL_MSG */
241751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko			int	_fd;
242751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko		} _sigpoll;
243751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko	} _sifields;
244751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko} compat_siginfo_t;
245751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
246751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko/*
247751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko * How these fields are to be accessed.
248751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko */
249751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_pid		_sifields._kill._pid
250751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_uid		_sifields._kill._uid
251751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_status	_sifields._sigchld._status
252751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_utime	_sifields._sigchld._utime
253751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_stime	_sifields._sigchld._stime
254751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_value	_sifields._rt._sigval
255751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_int		_sifields._rt._sigval.sival_int
256751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_ptr		_sifields._rt._sigval.sival_ptr
257751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_addr		_sifields._sigfault._addr
258751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_band		_sifields._sigpoll._band
259751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_fd		_sifields._sigpoll._fd
260751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_tid		_sifields._timer._tid
261751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko#define si_overrun	_sifields._timer._overrun
262751f409db6216ebd134a94f6dcd97779933a5106Denys Vlasenko
2631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COMPAT_OFF_T_MAX	0x7fffffff
2641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define COMPAT_LOFF_T_MAX	0x7fffffffffffffffL
2651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
2671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * A pointer passed in from user mode. This should not
2681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * be used for syscall parameters, just declare them
2691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * as pointers because the syscall entry code will have
2708b3de0df4eefc47ca2aa459b72dd8b2711f3640cMarcin Ślusarz * appropriately converted them already.
2711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
2721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic inline void __user *compat_ptr(compat_uptr_t uptr)
2741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return (void __user *)(unsigned long)(uptr & 0x7fffffffUL);
2761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
278f267fa9f5b377b5cecdb2baf332fec08bb71246dIngo Molnarstatic inline compat_uptr_t ptr_to_compat(void __user *uptr)
279f267fa9f5b377b5cecdb2baf332fec08bb71246dIngo Molnar{
280f267fa9f5b377b5cecdb2baf332fec08bb71246dIngo Molnar	return (u32)(unsigned long)uptr;
281f267fa9f5b377b5cecdb2baf332fec08bb71246dIngo Molnar}
282f267fa9f5b377b5cecdb2baf332fec08bb71246dIngo Molnar
2837757591ab4a36314a258e181dbf0994415c288c2Heiko Carstens#ifdef CONFIG_COMPAT
2847757591ab4a36314a258e181dbf0994415c288c2Heiko Carstens
2857757591ab4a36314a258e181dbf0994415c288c2Heiko Carstensstatic inline int is_compat_task(void)
2867757591ab4a36314a258e181dbf0994415c288c2Heiko Carstens{
287a05c90f1948baacedd0c3e7e3250225be4cae727Heiko Carstens	return is_32bit_task();
2887757591ab4a36314a258e181dbf0994415c288c2Heiko Carstens}
2897757591ab4a36314a258e181dbf0994415c288c2Heiko Carstens
290c41d68a513c71e35a14f66d71782d27a79a81ea6H. Peter Anvinstatic inline void __user *arch_compat_alloc_user_space(long len)
2911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
2921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned long stack;
2931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
2941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	stack = KSTK_ESP(current);
2957757591ab4a36314a258e181dbf0994415c288c2Heiko Carstens	if (is_compat_task())
2961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		stack &= 0x7fffffffUL;
2971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	return (void __user *) (stack - len);
2981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
2991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3000f58104c8c62e40c8734477b6a9308c77b5d9355Heiko Carstens#endif
3010f58104c8c62e40c8734477b6a9308c77b5d9355Heiko Carstens
3021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_ipc64_perm {
3031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_key_t key;
304202e5979af4d91c7ca05892641131dee22653259Stephen Rothwell	__compat_uid32_t uid;
305202e5979af4d91c7ca05892641131dee22653259Stephen Rothwell	__compat_gid32_t gid;
306202e5979af4d91c7ca05892641131dee22653259Stephen Rothwell	__compat_uid32_t cuid;
307202e5979af4d91c7ca05892641131dee22653259Stephen Rothwell	__compat_gid32_t cgid;
3081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_mode_t mode;
3091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short __pad1;
3101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short seq;
3111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned short __pad2;
3121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int __unused1;
3131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int __unused2;
3141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_semid64_ds {
3171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct compat_ipc64_perm sem_perm;
3181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t  sem_otime;
3191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __pad1;
3201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t  sem_ctime;
3211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __pad2;
3221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t sem_nsems;
3231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __unused1;
3241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __unused2;
3251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_msqid64_ds {
3281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct compat_ipc64_perm msg_perm;
3291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t   msg_stime;
3301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __pad1;
3311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t   msg_rtime;
3321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __pad2;
3331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t   msg_ctime;
3341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __pad3;
3351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t msg_cbytes;
3361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t msg_qnum;
3371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t msg_qbytes;
3381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_pid_t   msg_lspid;
3391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_pid_t   msg_lrpid;
3401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __unused1;
3411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __unused2;
3421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
3441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct compat_shmid64_ds {
3451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	struct compat_ipc64_perm shm_perm;
3461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_size_t  shm_segsz;
3471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t  shm_atime;
3481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __pad1;
3491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t  shm_dtime;
3501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __pad2;
3511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_time_t  shm_ctime;
3521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __pad3;
3531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_pid_t   shm_cpid;
3541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_pid_t   shm_lpid;
3551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t shm_nattch;
3561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __unused1;
3571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	compat_ulong_t __unused2;
3581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
3591da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* _ASM_S390X_COMPAT_H */
360