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