linux/arch/mips/include/asm/compat.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef _ASM_COMPAT_H
   3#define _ASM_COMPAT_H
   4/*
   5 * Architecture specific compatibility types
   6 */
   7#include <linux/thread_info.h>
   8#include <linux/types.h>
   9#include <asm/page.h>
  10#include <asm/ptrace.h>
  11
  12#include <asm-generic/compat.h>
  13
  14#define COMPAT_USER_HZ          100
  15#define COMPAT_UTS_MACHINE      "mips\0\0\0"
  16
  17typedef s32             __compat_uid_t;
  18typedef s32             __compat_gid_t;
  19typedef __compat_uid_t  __compat_uid32_t;
  20typedef __compat_gid_t  __compat_gid32_t;
  21typedef u32             compat_mode_t;
  22typedef u32             compat_dev_t;
  23typedef u32             compat_nlink_t;
  24typedef s32             compat_ipc_pid_t;
  25typedef s32             compat_caddr_t;
  26typedef struct {
  27        s32     val[2];
  28} compat_fsid_t;
  29
  30struct compat_stat {
  31        compat_dev_t    st_dev;
  32        s32             st_pad1[3];
  33        compat_ino_t    st_ino;
  34        compat_mode_t   st_mode;
  35        compat_nlink_t  st_nlink;
  36        __compat_uid_t  st_uid;
  37        __compat_gid_t  st_gid;
  38        compat_dev_t    st_rdev;
  39        s32             st_pad2[2];
  40        compat_off_t    st_size;
  41        s32             st_pad3;
  42        old_time32_t    st_atime;
  43        s32             st_atime_nsec;
  44        old_time32_t    st_mtime;
  45        s32             st_mtime_nsec;
  46        old_time32_t    st_ctime;
  47        s32             st_ctime_nsec;
  48        s32             st_blksize;
  49        s32             st_blocks;
  50        s32             st_pad4[14];
  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        s32             l_sysid;
  59        compat_pid_t    l_pid;
  60        s32             pad[4];
  61};
  62
  63#define F_GETLK64       33
  64#define F_SETLK64       34
  65#define F_SETLKW64      35
  66
  67struct compat_flock64 {
  68        short           l_type;
  69        short           l_whence;
  70        compat_loff_t   l_start;
  71        compat_loff_t   l_len;
  72        compat_pid_t    l_pid;
  73};
  74
  75struct compat_statfs {
  76        int             f_type;
  77        int             f_bsize;
  78        int             f_frsize;
  79        int             f_blocks;
  80        int             f_bfree;
  81        int             f_files;
  82        int             f_ffree;
  83        int             f_bavail;
  84        compat_fsid_t   f_fsid;
  85        int             f_namelen;
  86        int             f_flags;
  87        int             f_spare[5];
  88};
  89
  90#define COMPAT_RLIM_INFINITY    0x7fffffffUL
  91
  92typedef u32             compat_old_sigset_t;    /* at least 32 bits */
  93
  94#define _COMPAT_NSIG            128             /* Don't ask !$@#% ...  */
  95#define _COMPAT_NSIG_BPW        32
  96
  97typedef u32             compat_sigset_word;
  98
  99#define COMPAT_OFF_T_MAX        0x7fffffff
 100
 101static inline void __user *arch_compat_alloc_user_space(long len)
 102{
 103        struct pt_regs *regs = (struct pt_regs *)
 104                ((unsigned long) current_thread_info() + THREAD_SIZE - 32) - 1;
 105
 106        return (void __user *) (regs->regs[29] - len);
 107}
 108
 109struct compat_ipc64_perm {
 110        compat_key_t key;
 111        __compat_uid32_t uid;
 112        __compat_gid32_t gid;
 113        __compat_uid32_t cuid;
 114        __compat_gid32_t cgid;
 115        compat_mode_t mode;
 116        unsigned short seq;
 117        unsigned short __pad2;
 118        compat_ulong_t __unused1;
 119        compat_ulong_t __unused2;
 120};
 121
 122struct compat_semid64_ds {
 123        struct compat_ipc64_perm sem_perm;
 124        compat_ulong_t  sem_otime;
 125        compat_ulong_t  sem_ctime;
 126        compat_ulong_t  sem_nsems;
 127        compat_ulong_t  sem_otime_high;
 128        compat_ulong_t  sem_ctime_high;
 129};
 130
 131struct compat_msqid64_ds {
 132        struct compat_ipc64_perm msg_perm;
 133#ifndef CONFIG_CPU_LITTLE_ENDIAN
 134        compat_ulong_t  msg_stime_high;
 135#endif
 136        compat_ulong_t  msg_stime;
 137#ifdef CONFIG_CPU_LITTLE_ENDIAN
 138        compat_ulong_t  msg_stime_high;
 139#endif
 140#ifndef CONFIG_CPU_LITTLE_ENDIAN
 141        compat_ulong_t  msg_rtime_high;
 142#endif
 143        compat_ulong_t  msg_rtime;
 144#ifdef CONFIG_CPU_LITTLE_ENDIAN
 145        compat_ulong_t  msg_rtime_high;
 146#endif
 147#ifndef CONFIG_CPU_LITTLE_ENDIAN
 148        compat_ulong_t  msg_ctime_high;
 149#endif
 150        compat_ulong_t  msg_ctime;
 151#ifdef CONFIG_CPU_LITTLE_ENDIAN
 152        compat_ulong_t  msg_ctime_high;
 153#endif
 154        compat_ulong_t  msg_cbytes;
 155        compat_ulong_t  msg_qnum;
 156        compat_ulong_t  msg_qbytes;
 157        compat_pid_t    msg_lspid;
 158        compat_pid_t    msg_lrpid;
 159        compat_ulong_t  __unused4;
 160        compat_ulong_t  __unused5;
 161};
 162
 163struct compat_shmid64_ds {
 164        struct compat_ipc64_perm shm_perm;
 165        compat_size_t   shm_segsz;
 166        compat_ulong_t  shm_atime;
 167        compat_ulong_t  shm_dtime;
 168        compat_ulong_t  shm_ctime;
 169        compat_pid_t    shm_cpid;
 170        compat_pid_t    shm_lpid;
 171        compat_ulong_t  shm_nattch;
 172        compat_ushort_t shm_atime_high;
 173        compat_ushort_t shm_dtime_high;
 174        compat_ushort_t shm_ctime_high;
 175        compat_ushort_t __unused2;
 176};
 177
 178/* MIPS has unusual order of fields in stack_t */
 179typedef struct compat_sigaltstack {
 180        compat_uptr_t                   ss_sp;
 181        compat_size_t                   ss_size;
 182        int                             ss_flags;
 183} compat_stack_t;
 184#define compat_sigaltstack compat_sigaltstack
 185
 186static inline int is_compat_task(void)
 187{
 188        return test_thread_flag(TIF_32BIT_ADDR);
 189}
 190
 191#endif /* _ASM_COMPAT_H */
 192