root/arch/powerpc/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

   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _ASM_POWERPC_COMPAT_H
   3 #define _ASM_POWERPC_COMPAT_H
   4 #ifdef __KERNEL__
   5 /*
   6  * Architecture specific compatibility types
   7  */
   8 #include <linux/types.h>
   9 #include <linux/sched.h>
  10 
  11 #include <asm-generic/compat.h>
  12 
  13 #define COMPAT_USER_HZ          100
  14 #ifdef __BIG_ENDIAN__
  15 #define COMPAT_UTS_MACHINE      "ppc\0\0"
  16 #else
  17 #define COMPAT_UTS_MACHINE      "ppcle\0\0"
  18 #endif
  19 
  20 typedef u32             __compat_uid_t;
  21 typedef u32             __compat_gid_t;
  22 typedef u32             __compat_uid32_t;
  23 typedef u32             __compat_gid32_t;
  24 typedef u32             compat_mode_t;
  25 typedef u32             compat_dev_t;
  26 typedef s16             compat_nlink_t;
  27 typedef u16             compat_ipc_pid_t;
  28 typedef u32             compat_caddr_t;
  29 typedef __kernel_fsid_t compat_fsid_t;
  30 typedef s64             compat_s64;
  31 typedef u64             compat_u64;
  32 
  33 struct compat_stat {
  34         compat_dev_t    st_dev;
  35         compat_ino_t    st_ino;
  36         compat_mode_t   st_mode;
  37         compat_nlink_t  st_nlink;
  38         __compat_uid32_t        st_uid;
  39         __compat_gid32_t        st_gid;
  40         compat_dev_t    st_rdev;
  41         compat_off_t    st_size;
  42         compat_off_t    st_blksize;
  43         compat_off_t    st_blocks;
  44         old_time32_t    st_atime;
  45         u32             st_atime_nsec;
  46         old_time32_t    st_mtime;
  47         u32             st_mtime_nsec;
  48         old_time32_t    st_ctime;
  49         u32             st_ctime_nsec;
  50         u32             __unused4[2];
  51 };
  52 
  53 struct compat_flock {
  54         short           l_type;
  55         short           l_whence;
  56         compat_off_t    l_start;
  57         compat_off_t    l_len;
  58         compat_pid_t    l_pid;
  59 };
  60 
  61 #define F_GETLK64       12      /*  using 'struct flock64' */
  62 #define F_SETLK64       13
  63 #define F_SETLKW64      14
  64 
  65 struct compat_flock64 {
  66         short           l_type;
  67         short           l_whence;
  68         compat_loff_t   l_start;
  69         compat_loff_t   l_len;
  70         compat_pid_t    l_pid;
  71 };
  72 
  73 struct compat_statfs {
  74         int             f_type;
  75         int             f_bsize;
  76         int             f_blocks;
  77         int             f_bfree;
  78         int             f_bavail;
  79         int             f_files;
  80         int             f_ffree;
  81         compat_fsid_t   f_fsid;
  82         int             f_namelen;      /* SunOS ignores this field. */
  83         int             f_frsize;
  84         int             f_flags;
  85         int             f_spare[4];
  86 };
  87 
  88 #define COMPAT_RLIM_INFINITY            0xffffffff
  89 
  90 typedef u32             compat_old_sigset_t;
  91 
  92 #define _COMPAT_NSIG            64
  93 #define _COMPAT_NSIG_BPW        32
  94 
  95 typedef u32             compat_sigset_word;
  96 
  97 #define COMPAT_OFF_T_MAX        0x7fffffff
  98 
  99 /*
 100  * A pointer passed in from user mode. This should not
 101  * be used for syscall parameters, just declare them
 102  * as pointers because the syscall entry code will have
 103  * appropriately converted them already.
 104  */
 105 
 106 static inline void __user *compat_ptr(compat_uptr_t uptr)
 107 {
 108         return (void __user *)(unsigned long)uptr;
 109 }
 110 
 111 static inline compat_uptr_t ptr_to_compat(void __user *uptr)
 112 {
 113         return (u32)(unsigned long)uptr;
 114 }
 115 
 116 static inline void __user *arch_compat_alloc_user_space(long len)
 117 {
 118         struct pt_regs *regs = current->thread.regs;
 119         unsigned long usp = regs->gpr[1];
 120 
 121         /*
 122          * We can't access below the stack pointer in the 32bit ABI and
 123          * can access 288 bytes in the 64bit big-endian ABI,
 124          * or 512 bytes with the new ELFv2 little-endian ABI.
 125          */
 126         if (!is_32bit_task())
 127                 usp -= USER_REDZONE_SIZE;
 128 
 129         return (void __user *) (usp - len);
 130 }
 131 
 132 /*
 133  * ipc64_perm is actually 32/64bit clean but since the compat layer refers to
 134  * it we may as well define it.
 135  */
 136 struct compat_ipc64_perm {
 137         compat_key_t key;
 138         __compat_uid_t uid;
 139         __compat_gid_t gid;
 140         __compat_uid_t cuid;
 141         __compat_gid_t cgid;
 142         compat_mode_t mode;
 143         unsigned int seq;
 144         unsigned int __pad2;
 145         unsigned long __unused1;        /* yes they really are 64bit pads */
 146         unsigned long __unused2;
 147 };
 148 
 149 struct compat_semid64_ds {
 150         struct compat_ipc64_perm sem_perm;
 151         unsigned int sem_otime_high;
 152         unsigned int sem_otime;
 153         unsigned int sem_ctime_high;
 154         unsigned int sem_ctime;
 155         compat_ulong_t sem_nsems;
 156         compat_ulong_t __unused3;
 157         compat_ulong_t __unused4;
 158 };
 159 
 160 struct compat_msqid64_ds {
 161         struct compat_ipc64_perm msg_perm;
 162         unsigned int msg_stime_high;
 163         unsigned int msg_stime;
 164         unsigned int msg_rtime_high;
 165         unsigned int msg_rtime;
 166         unsigned int msg_ctime_high;
 167         unsigned int msg_ctime;
 168         compat_ulong_t msg_cbytes;
 169         compat_ulong_t msg_qnum;
 170         compat_ulong_t msg_qbytes;
 171         compat_pid_t msg_lspid;
 172         compat_pid_t msg_lrpid;
 173         compat_ulong_t __unused4;
 174         compat_ulong_t __unused5;
 175 };
 176 
 177 struct compat_shmid64_ds {
 178         struct compat_ipc64_perm shm_perm;
 179         unsigned int shm_atime_high;
 180         unsigned int shm_atime;
 181         unsigned int shm_dtime_high;
 182         unsigned int shm_dtime;
 183         unsigned int shm_ctime_high;
 184         unsigned int shm_ctime;
 185         unsigned int __unused4;
 186         compat_size_t shm_segsz;
 187         compat_pid_t shm_cpid;
 188         compat_pid_t shm_lpid;
 189         compat_ulong_t shm_nattch;
 190         compat_ulong_t __unused5;
 191         compat_ulong_t __unused6;
 192 };
 193 
 194 static inline int is_compat_task(void)
 195 {
 196         return is_32bit_task();
 197 }
 198 
 199 #endif /* __KERNEL__ */
 200 #endif /* _ASM_POWERPC_COMPAT_H */

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