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