root/arch/sparc/include/asm/compat.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. compat_ptr
  2. ptr_to_compat
  3. arch_compat_alloc_user_space
  4. is_compat_task
  5. in_compat_syscall

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

/* [<][>][^][v][top][bottom][index][help] */