linux/arch/s390/include/asm/compat.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _ASM_S390X_COMPAT_H
   3#define _ASM_S390X_COMPAT_H
   4/*
   5 * Architecture specific compatibility types
   6 */
   7#include <linux/types.h>
   8#include <linux/sched.h>
   9#include <linux/sched/task_stack.h>
  10#include <linux/thread_info.h>
  11#include <asm/ptrace.h>
  12
  13#define compat_mode_t   compat_mode_t
  14typedef u16             compat_mode_t;
  15
  16#define __compat_uid_t  __compat_uid_t
  17typedef u16             __compat_uid_t;
  18typedef u16             __compat_gid_t;
  19
  20#define compat_dev_t    compat_dev_t
  21typedef u16             compat_dev_t;
  22
  23#define compat_ipc_pid_t compat_ipc_pid_t
  24typedef u16              compat_ipc_pid_t;
  25
  26#define compat_statfs   compat_statfs
  27
  28#include <asm-generic/compat.h>
  29
  30#define __TYPE_IS_PTR(t) (!__builtin_types_compatible_p( \
  31                                typeof(0?(__force t)0:0ULL), u64))
  32
  33#define __SC_DELOUSE(t,v) ({ \
  34        BUILD_BUG_ON(sizeof(t) > 4 && !__TYPE_IS_PTR(t)); \
  35        (__force t)(__TYPE_IS_PTR(t) ? ((v) & 0x7fffffff) : (v)); \
  36})
  37
  38#define PSW32_MASK_USER         0x0000FF00UL
  39
  40#define PSW32_USER_BITS (PSW32_MASK_DAT | PSW32_MASK_IO | PSW32_MASK_EXT | \
  41                         PSW32_DEFAULT_KEY | PSW32_MASK_BASE | \
  42                         PSW32_MASK_MCHECK | PSW32_MASK_PSTATE | \
  43                         PSW32_ASC_PRIMARY)
  44
  45#define COMPAT_UTS_MACHINE      "s390\0\0\0\0"
  46
  47typedef u16             compat_nlink_t;
  48
  49typedef struct {
  50        u32 mask;
  51        u32 addr;
  52} __aligned(8) psw_compat_t;
  53
  54typedef struct {
  55        psw_compat_t psw;
  56        u32 gprs[NUM_GPRS];
  57        u32 acrs[NUM_ACRS];
  58        u32 orig_gpr2;
  59} s390_compat_regs;
  60
  61typedef struct {
  62        u32 gprs_high[NUM_GPRS];
  63} s390_compat_regs_high;
  64
  65struct compat_stat {
  66        compat_dev_t    st_dev;
  67        u16             __pad1;
  68        compat_ino_t    st_ino;
  69        compat_mode_t   st_mode;
  70        compat_nlink_t  st_nlink;
  71        __compat_uid_t  st_uid;
  72        __compat_gid_t  st_gid;
  73        compat_dev_t    st_rdev;
  74        u16             __pad2;
  75        u32             st_size;
  76        u32             st_blksize;
  77        u32             st_blocks;
  78        u32             st_atime;
  79        u32             st_atime_nsec;
  80        u32             st_mtime;
  81        u32             st_mtime_nsec;
  82        u32             st_ctime;
  83        u32             st_ctime_nsec;
  84        u32             __unused4;
  85        u32             __unused5;
  86};
  87
  88struct compat_statfs {
  89        u32             f_type;
  90        u32             f_bsize;
  91        u32             f_blocks;
  92        u32             f_bfree;
  93        u32             f_bavail;
  94        u32             f_files;
  95        u32             f_ffree;
  96        compat_fsid_t   f_fsid;
  97        u32             f_namelen;
  98        u32             f_frsize;
  99        u32             f_flags;
 100        u32             f_spare[4];
 101};
 102
 103struct compat_statfs64 {
 104        u32             f_type;
 105        u32             f_bsize;
 106        u64             f_blocks;
 107        u64             f_bfree;
 108        u64             f_bavail;
 109        u64             f_files;
 110        u64             f_ffree;
 111        compat_fsid_t   f_fsid;
 112        u32             f_namelen;
 113        u32             f_frsize;
 114        u32             f_flags;
 115        u32             f_spare[4];
 116};
 117
 118/*
 119 * A pointer passed in from user mode. This should not
 120 * be used for syscall parameters, just declare them
 121 * as pointers because the syscall entry code will have
 122 * appropriately converted them already.
 123 */
 124
 125static inline void __user *compat_ptr(compat_uptr_t uptr)
 126{
 127        return (void __user *)(unsigned long)(uptr & 0x7fffffffUL);
 128}
 129#define compat_ptr(uptr) compat_ptr(uptr)
 130
 131#ifdef CONFIG_COMPAT
 132
 133static inline int is_compat_task(void)
 134{
 135        return test_thread_flag(TIF_31BIT);
 136}
 137
 138#endif
 139
 140#endif /* _ASM_S390X_COMPAT_H */
 141