1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2c6557e7fSMartin Schwidefsky #ifndef _ASM_S390X_COMPAT_H 3c6557e7fSMartin Schwidefsky #define _ASM_S390X_COMPAT_H 4c6557e7fSMartin Schwidefsky /* 5c6557e7fSMartin Schwidefsky * Architecture specific compatibility types 6c6557e7fSMartin Schwidefsky */ 7c6557e7fSMartin Schwidefsky #include <linux/types.h> 8c6557e7fSMartin Schwidefsky #include <linux/sched.h> 968db0cf1SIngo Molnar #include <linux/sched/task_stack.h> 107757591aSHeiko Carstens #include <linux/thread_info.h> 1167a9c428SHeiko Carstens #include <asm/ptrace.h> 12c6557e7fSMartin Schwidefsky 131a33b18bSArnd Bergmann #define compat_mode_t compat_mode_t 141a33b18bSArnd Bergmann typedef u16 compat_mode_t; 151a33b18bSArnd Bergmann 1684a0c977SGuo Ren #define __compat_uid_t __compat_uid_t 1784a0c977SGuo Ren typedef u16 __compat_uid_t; 1884a0c977SGuo Ren typedef u16 __compat_gid_t; 1984a0c977SGuo Ren 2084a0c977SGuo Ren #define compat_dev_t compat_dev_t 2184a0c977SGuo Ren typedef u16 compat_dev_t; 2284a0c977SGuo Ren 2384a0c977SGuo Ren #define compat_ipc_pid_t compat_ipc_pid_t 2484a0c977SGuo Ren typedef u16 compat_ipc_pid_t; 2584a0c977SGuo Ren 2684a0c977SGuo Ren #define compat_statfs compat_statfs 2784a0c977SGuo Ren 28fb373975SArnd Bergmann #include <asm-generic/compat.h> 29fb373975SArnd Bergmann 304f59c718SAl Viro #define __TYPE_IS_PTR(t) (!__builtin_types_compatible_p( \ 314f59c718SAl Viro typeof(0?(__force t)0:0ULL), u64)) 329a205286SHeiko Carstens 339a205286SHeiko Carstens #define __SC_DELOUSE(t,v) ({ \ 349a205286SHeiko Carstens BUILD_BUG_ON(sizeof(t) > 4 && !__TYPE_IS_PTR(t)); \ 354f59c718SAl Viro (__force t)(__TYPE_IS_PTR(t) ? ((v) & 0x7fffffff) : (v)); \ 369a205286SHeiko Carstens }) 3746836613SAl Viro 38fa968ee2SMartin Schwidefsky #define PSW32_MASK_USER 0x0000FF00UL 39b50511e4SMartin Schwidefsky 40f26946d7SHeiko Carstens #define PSW32_USER_BITS (PSW32_MASK_DAT | PSW32_MASK_IO | PSW32_MASK_EXT | \ 41f26946d7SHeiko Carstens PSW32_DEFAULT_KEY | PSW32_MASK_BASE | \ 42075dfd82SHeiko Carstens PSW32_MASK_MCHECK | PSW32_MASK_PSTATE | \ 43075dfd82SHeiko Carstens PSW32_ASC_PRIMARY) 44c6557e7fSMartin Schwidefsky 45e28cbf22SChristoph Hellwig #define COMPAT_UTS_MACHINE "s390\0\0\0\0" 46c6557e7fSMartin Schwidefsky 47c6557e7fSMartin Schwidefsky typedef u16 compat_nlink_t; 48c6557e7fSMartin Schwidefsky 49e4371f60SHeiko Carstens typedef struct { 50e4371f60SHeiko Carstens u32 mask; 51e4371f60SHeiko Carstens u32 addr; 52e4371f60SHeiko Carstens } __aligned(8) psw_compat_t; 53e4371f60SHeiko Carstens 54e4371f60SHeiko Carstens typedef struct { 55e4371f60SHeiko Carstens psw_compat_t psw; 56e4371f60SHeiko Carstens u32 gprs[NUM_GPRS]; 57e4371f60SHeiko Carstens u32 acrs[NUM_ACRS]; 58e4371f60SHeiko Carstens u32 orig_gpr2; 59e4371f60SHeiko Carstens } s390_compat_regs; 60e4371f60SHeiko Carstens 61e4371f60SHeiko Carstens typedef struct { 62e4371f60SHeiko Carstens u32 gprs_high[NUM_GPRS]; 63e4371f60SHeiko Carstens } s390_compat_regs_high; 64e4371f60SHeiko Carstens 65c6557e7fSMartin Schwidefsky struct compat_stat { 66c6557e7fSMartin Schwidefsky compat_dev_t st_dev; 67c6557e7fSMartin Schwidefsky u16 __pad1; 68c6557e7fSMartin Schwidefsky compat_ino_t st_ino; 69c6557e7fSMartin Schwidefsky compat_mode_t st_mode; 70c6557e7fSMartin Schwidefsky compat_nlink_t st_nlink; 71c6557e7fSMartin Schwidefsky __compat_uid_t st_uid; 72c6557e7fSMartin Schwidefsky __compat_gid_t st_gid; 73c6557e7fSMartin Schwidefsky compat_dev_t st_rdev; 74c6557e7fSMartin Schwidefsky u16 __pad2; 75c6557e7fSMartin Schwidefsky u32 st_size; 76c6557e7fSMartin Schwidefsky u32 st_blksize; 77c6557e7fSMartin Schwidefsky u32 st_blocks; 78c6557e7fSMartin Schwidefsky u32 st_atime; 79c6557e7fSMartin Schwidefsky u32 st_atime_nsec; 80c6557e7fSMartin Schwidefsky u32 st_mtime; 81c6557e7fSMartin Schwidefsky u32 st_mtime_nsec; 82c6557e7fSMartin Schwidefsky u32 st_ctime; 83c6557e7fSMartin Schwidefsky u32 st_ctime_nsec; 84c6557e7fSMartin Schwidefsky u32 __unused4; 85c6557e7fSMartin Schwidefsky u32 __unused5; 86c6557e7fSMartin Schwidefsky }; 87c6557e7fSMartin Schwidefsky 88c6557e7fSMartin Schwidefsky struct compat_statfs { 89b8668fd0SHeiko Carstens u32 f_type; 90b8668fd0SHeiko Carstens u32 f_bsize; 91b8668fd0SHeiko Carstens u32 f_blocks; 92b8668fd0SHeiko Carstens u32 f_bfree; 93b8668fd0SHeiko Carstens u32 f_bavail; 94b8668fd0SHeiko Carstens u32 f_files; 95b8668fd0SHeiko Carstens u32 f_ffree; 96c6557e7fSMartin Schwidefsky compat_fsid_t f_fsid; 97b8668fd0SHeiko Carstens u32 f_namelen; 98b8668fd0SHeiko Carstens u32 f_frsize; 99b8668fd0SHeiko Carstens u32 f_flags; 100b8668fd0SHeiko Carstens u32 f_spare[4]; 101b8668fd0SHeiko Carstens }; 102b8668fd0SHeiko Carstens 103b8668fd0SHeiko Carstens struct compat_statfs64 { 104b8668fd0SHeiko Carstens u32 f_type; 105b8668fd0SHeiko Carstens u32 f_bsize; 106b8668fd0SHeiko Carstens u64 f_blocks; 107b8668fd0SHeiko Carstens u64 f_bfree; 108b8668fd0SHeiko Carstens u64 f_bavail; 109b8668fd0SHeiko Carstens u64 f_files; 110b8668fd0SHeiko Carstens u64 f_ffree; 111b8668fd0SHeiko Carstens compat_fsid_t f_fsid; 112b8668fd0SHeiko Carstens u32 f_namelen; 113b8668fd0SHeiko Carstens u32 f_frsize; 114b8668fd0SHeiko Carstens u32 f_flags; 115*6d9406f8SIlya Leoshkevich u32 f_spare[5]; 116c6557e7fSMartin Schwidefsky }; 117c6557e7fSMartin Schwidefsky 118c6557e7fSMartin Schwidefsky /* 119c6557e7fSMartin Schwidefsky * A pointer passed in from user mode. This should not 120c6557e7fSMartin Schwidefsky * be used for syscall parameters, just declare them 121c6557e7fSMartin Schwidefsky * as pointers because the syscall entry code will have 122c6557e7fSMartin Schwidefsky * appropriately converted them already. 123c6557e7fSMartin Schwidefsky */ 124c6557e7fSMartin Schwidefsky compat_ptr(compat_uptr_t uptr)125c6557e7fSMartin Schwidefskystatic inline void __user *compat_ptr(compat_uptr_t uptr) 126c6557e7fSMartin Schwidefsky { 127c6557e7fSMartin Schwidefsky return (void __user *)(unsigned long)(uptr & 0x7fffffffUL); 128c6557e7fSMartin Schwidefsky } 129202bf8d7SArnd Bergmann #define compat_ptr(uptr) compat_ptr(uptr) 130c6557e7fSMartin Schwidefsky 1317757591aSHeiko Carstens #ifdef CONFIG_COMPAT 1327757591aSHeiko Carstens is_compat_task(void)1337757591aSHeiko Carstensstatic inline int is_compat_task(void) 1347757591aSHeiko Carstens { 1359eb31be3SHeiko Carstens return test_thread_flag(TIF_31BIT); 1367757591aSHeiko Carstens } 1377757591aSHeiko Carstens 1380f58104cSHeiko Carstens #endif 1390f58104cSHeiko Carstens 140c6557e7fSMartin Schwidefsky #endif /* _ASM_S390X_COMPAT_H */ 141