linux/arch/powerpc/include/asm/compat.h
<<
>>
Prefs
   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
  20typedef u32             __compat_uid_t;
  21typedef u32             __compat_gid_t;
  22typedef u32             __compat_uid32_t;
  23typedef u32             __compat_gid32_t;
  24typedef u32             compat_mode_t;
  25typedef u32             compat_dev_t;
  26typedef s16             compat_nlink_t;
  27typedef u16             compat_ipc_pid_t;
  28typedef u32             compat_caddr_t;
  29typedef __kernel_fsid_t compat_fsid_t;
  30typedef s64             compat_s64;
  31typedef u64             compat_u64;
  32
  33struct 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
  53struct 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
  65struct 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
  73struct 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
  90typedef u32             compat_old_sigset_t;
  91
  92#define _COMPAT_NSIG            64
  93#define _COMPAT_NSIG_BPW        32
  94
  95typedef u32             compat_sigset_word;
  96
  97#define COMPAT_OFF_T_MAX        0x7fffffff
  98
  99static inline void __user *arch_compat_alloc_user_space(long len)
 100{
 101        struct pt_regs *regs = current->thread.regs;
 102        unsigned long usp = regs->gpr[1];
 103
 104        /*
 105         * We can't access below the stack pointer in the 32bit ABI and
 106         * can access 288 bytes in the 64bit big-endian ABI,
 107         * or 512 bytes with the new ELFv2 little-endian ABI.
 108         */
 109        if (!is_32bit_task())
 110                usp -= USER_REDZONE_SIZE;
 111
 112        return (void __user *) (usp - len);
 113}
 114
 115/*
 116 * ipc64_perm is actually 32/64bit clean but since the compat layer refers to
 117 * it we may as well define it.
 118 */
 119struct compat_ipc64_perm {
 120        compat_key_t key;
 121        __compat_uid_t uid;
 122        __compat_gid_t gid;
 123        __compat_uid_t cuid;
 124        __compat_gid_t cgid;
 125        compat_mode_t mode;
 126        unsigned int seq;
 127        unsigned int __pad2;
 128        unsigned long __unused1;        /* yes they really are 64bit pads */
 129        unsigned long __unused2;
 130};
 131
 132struct compat_semid64_ds {
 133        struct compat_ipc64_perm sem_perm;
 134        unsigned int sem_otime_high;
 135        unsigned int sem_otime;
 136        unsigned int sem_ctime_high;
 137        unsigned int sem_ctime;
 138        compat_ulong_t sem_nsems;
 139        compat_ulong_t __unused3;
 140        compat_ulong_t __unused4;
 141};
 142
 143struct compat_msqid64_ds {
 144        struct compat_ipc64_perm msg_perm;
 145        unsigned int msg_stime_high;
 146        unsigned int msg_stime;
 147        unsigned int msg_rtime_high;
 148        unsigned int msg_rtime;
 149        unsigned int msg_ctime_high;
 150        unsigned int msg_ctime;
 151        compat_ulong_t msg_cbytes;
 152        compat_ulong_t msg_qnum;
 153        compat_ulong_t msg_qbytes;
 154        compat_pid_t msg_lspid;
 155        compat_pid_t msg_lrpid;
 156        compat_ulong_t __unused4;
 157        compat_ulong_t __unused5;
 158};
 159
 160struct compat_shmid64_ds {
 161        struct compat_ipc64_perm shm_perm;
 162        unsigned int shm_atime_high;
 163        unsigned int shm_atime;
 164        unsigned int shm_dtime_high;
 165        unsigned int shm_dtime;
 166        unsigned int shm_ctime_high;
 167        unsigned int shm_ctime;
 168        unsigned int __unused4;
 169        compat_size_t shm_segsz;
 170        compat_pid_t shm_cpid;
 171        compat_pid_t shm_lpid;
 172        compat_ulong_t shm_nattch;
 173        compat_ulong_t __unused5;
 174        compat_ulong_t __unused6;
 175};
 176
 177static inline int is_compat_task(void)
 178{
 179        return is_32bit_task();
 180}
 181
 182#endif /* __KERNEL__ */
 183#endif /* _ASM_POWERPC_COMPAT_H */
 184