linux/arch/sparc/include/asm/compat.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _ASM_SPARC64_COMPAT_H
   3#define _ASM_SPARC64_COMPAT_H
   4/*
   5 * Architecture specific compatibility types
   6 */
   7#include <linux/types.h>
   8
   9#include <asm-generic/compat.h>
  10
  11#define COMPAT_USER_HZ          100
  12#define COMPAT_UTS_MACHINE      "sparc\0\0"
  13
  14typedef u16             __compat_uid_t;
  15typedef u16             __compat_gid_t;
  16typedef u32             __compat_uid32_t;
  17typedef u32             __compat_gid32_t;
  18typedef u16             compat_mode_t;
  19typedef u16             compat_dev_t;
  20typedef s16             compat_nlink_t;
  21typedef u16             compat_ipc_pid_t;
  22typedef u32             compat_caddr_t;
  23typedef __kernel_fsid_t compat_fsid_t;
  24
  25struct compat_stat {
  26        compat_dev_t    st_dev;
  27        compat_ino_t    st_ino;
  28        compat_mode_t   st_mode;
  29        compat_nlink_t  st_nlink;
  30        __compat_uid_t  st_uid;
  31        __compat_gid_t  st_gid;
  32        compat_dev_t    st_rdev;
  33        compat_off_t    st_size;
  34        old_time32_t    st_atime;
  35        compat_ulong_t  st_atime_nsec;
  36        old_time32_t    st_mtime;
  37        compat_ulong_t  st_mtime_nsec;
  38        old_time32_t    st_ctime;
  39        compat_ulong_t  st_ctime_nsec;
  40        compat_off_t    st_blksize;
  41        compat_off_t    st_blocks;
  42        u32             __unused4[2];
  43};
  44
  45struct compat_stat64 {
  46        unsigned long long      st_dev;
  47
  48        unsigned long long      st_ino;
  49
  50        unsigned int    st_mode;
  51        unsigned int    st_nlink;
  52
  53        unsigned int    st_uid;
  54        unsigned int    st_gid;
  55
  56        unsigned long long      st_rdev;
  57
  58        unsigned char   __pad3[8];
  59
  60        long long       st_size;
  61        unsigned int    st_blksize;
  62
  63        unsigned char   __pad4[8];
  64        unsigned int    st_blocks;
  65
  66        unsigned int    st_atime;
  67        unsigned int    st_atime_nsec;
  68
  69        unsigned int    st_mtime;
  70        unsigned int    st_mtime_nsec;
  71
  72        unsigned int    st_ctime;
  73        unsigned int    st_ctime_nsec;
  74
  75        unsigned int    __unused4;
  76        unsigned int    __unused5;
  77};
  78
  79struct compat_flock {
  80        short           l_type;
  81        short           l_whence;
  82        compat_off_t    l_start;
  83        compat_off_t    l_len;
  84        compat_pid_t    l_pid;
  85        short           __unused;
  86};
  87
  88#define F_GETLK64       12
  89#define F_SETLK64       13
  90#define F_SETLKW64      14
  91
  92struct compat_flock64 {
  93        short           l_type;
  94        short           l_whence;
  95        compat_loff_t   l_start;
  96        compat_loff_t   l_len;
  97        compat_pid_t    l_pid;
  98        short           __unused;
  99};
 100
 101struct compat_statfs {
 102        int             f_type;
 103        int             f_bsize;
 104        int             f_blocks;
 105        int             f_bfree;
 106        int             f_bavail;
 107        int             f_files;
 108        int             f_ffree;
 109        compat_fsid_t   f_fsid;
 110        int             f_namelen;      /* SunOS ignores this field. */
 111        int             f_frsize;
 112        int             f_flags;
 113        int             f_spare[4];
 114};
 115
 116#define COMPAT_RLIM_INFINITY 0x7fffffff
 117
 118typedef u32             compat_old_sigset_t;
 119
 120#define _COMPAT_NSIG            64
 121#define _COMPAT_NSIG_BPW        32
 122
 123typedef u32             compat_sigset_word;
 124
 125#define COMPAT_OFF_T_MAX        0x7fffffff
 126
 127#ifdef CONFIG_COMPAT
 128static inline void __user *arch_compat_alloc_user_space(long len)
 129{
 130        struct pt_regs *regs = current_thread_info()->kregs;
 131        unsigned long usp = regs->u_regs[UREG_I6];
 132
 133        if (test_thread_64bit_stack(usp))
 134                usp += STACK_BIAS;
 135
 136        if (test_thread_flag(TIF_32BIT))
 137                usp &= 0xffffffffUL;
 138
 139        usp -= len;
 140        usp &= ~0x7UL;
 141
 142        return (void __user *) usp;
 143}
 144#endif
 145
 146struct compat_ipc64_perm {
 147        compat_key_t key;
 148        __compat_uid32_t uid;
 149        __compat_gid32_t gid;
 150        __compat_uid32_t cuid;
 151        __compat_gid32_t cgid;
 152        unsigned short __pad1;
 153        compat_mode_t mode;
 154        unsigned short __pad2;
 155        unsigned short seq;
 156        unsigned long __unused1;        /* yes they really are 64bit pads */
 157        unsigned long __unused2;
 158};
 159
 160struct compat_semid64_ds {
 161        struct compat_ipc64_perm sem_perm;
 162        unsigned int    sem_otime_high;
 163        unsigned int    sem_otime;
 164        unsigned int    sem_ctime_high;
 165        unsigned int    sem_ctime;
 166        u32             sem_nsems;
 167        u32             __unused1;
 168        u32             __unused2;
 169};
 170
 171struct compat_msqid64_ds {
 172        struct compat_ipc64_perm msg_perm;
 173        unsigned int    msg_stime_high;
 174        unsigned int    msg_stime;
 175        unsigned int    msg_rtime_high;
 176        unsigned int    msg_rtime;
 177        unsigned int    msg_ctime_high;
 178        unsigned int    msg_ctime;
 179        unsigned int    msg_cbytes;
 180        unsigned int    msg_qnum;
 181        unsigned int    msg_qbytes;
 182        compat_pid_t    msg_lspid;
 183        compat_pid_t    msg_lrpid;
 184        unsigned int    __unused1;
 185        unsigned int    __unused2;
 186};
 187
 188struct compat_shmid64_ds {
 189        struct compat_ipc64_perm shm_perm;
 190        unsigned int    shm_atime_high;
 191        unsigned int    shm_atime;
 192        unsigned int    shm_dtime_high;
 193        unsigned int    shm_dtime;
 194        unsigned int    shm_ctime_high;
 195        unsigned int    shm_ctime;
 196        compat_size_t   shm_segsz;
 197        compat_pid_t    shm_cpid;
 198        compat_pid_t    shm_lpid;
 199        unsigned int    shm_nattch;
 200        unsigned int    __unused1;
 201        unsigned int    __unused2;
 202};
 203
 204#ifdef CONFIG_COMPAT
 205static inline int is_compat_task(void)
 206{
 207        return test_thread_flag(TIF_32BIT);
 208}
 209
 210static inline bool in_compat_syscall(void)
 211{
 212        /* Vector 0x110 is LINUX_32BIT_SYSCALL_TRAP */
 213        return pt_regs_trap_type(current_pt_regs()) == 0x110;
 214}
 215#define in_compat_syscall in_compat_syscall
 216#endif
 217
 218#endif /* _ASM_SPARC64_COMPAT_H */
 219