1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _LINUX_COMPAT_H 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _LINUX_COMPAT_H 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * These are the type definitions for the architecture specific 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru * syscall compatibility layer. 6c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru */ 7c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 8c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifdef CONFIG_COMPAT 9c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 10c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/stat.h> 11c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/param.h> /* for HZ */ 12c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/sem.h> 13c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 14c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <asm/compat.h> 15c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <asm/siginfo.h> 16c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 17c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define compat_jiffies_to_clock_t(x) \ 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru (((unsigned long)(x) * COMPAT_USER_HZ) / HZ) 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef __compat_uid32_t compat_uid_t; 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef __compat_gid32_t compat_gid_t; 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct rusage; 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_itimerspec { 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timespec it_interval; 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timespec it_value; 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_utimbuf { 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_time_t actime; 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_time_t modtime; 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_itimerval { 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timeval it_interval; 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timeval it_value; 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 40c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_tms { 41c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_clock_t tms_utime; 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_clock_t tms_stime; 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_clock_t tms_cutime; 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_clock_t tms_cstime; 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_timex { 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_uint_t modes; 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t offset; 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t freq; 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t maxerror; 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t esterror; 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t status; 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t constant; 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t precision; 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t tolerance; 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timeval time; 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t tick; 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ppsfreq; 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t jitter; 61c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t shift; 62c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t stabil; 63c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t jitcnt; 64c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t calcnt; 65c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t errcnt; 66c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t stbcnt; 67c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 68c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32; 69c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32; 70c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32; 71c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 72c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 73c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _COMPAT_NSIG_WORDS (_COMPAT_NSIG / _COMPAT_NSIG_BPW) 74c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 75c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct { 76c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_sigset_word sig[_COMPAT_NSIG_WORDS]; 77c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} compat_sigset_t; 78c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 79c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int cp_compat_stat(struct kstat *, struct compat_stat __user *); 80c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int get_compat_timespec(struct timespec *, const struct compat_timespec __user *); 81c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int put_compat_timespec(const struct timespec *, struct compat_timespec __user *); 82c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 83c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_iovec { 84c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_uptr_t iov_base; 85c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_size_t iov_len; 86c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_rlimit { 89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_ulong_t rlim_cur; 90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_ulong_t rlim_max; 91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_rusage { 94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timeval ru_utime; 95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timeval ru_stime; 96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_maxrss; 97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_ixrss; 98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_idrss; 99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_isrss; 100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_minflt; 101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_majflt; 102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_nswap; 103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_inblock; 104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_oublock; 105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_msgsnd; 106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_msgrcv; 107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_nsignals; 108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_nvcsw; 109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t ru_nivcsw; 110c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 111c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 112c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int put_compat_rusage(const struct rusage *, struct compat_rusage __user *); 113c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 114c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_siginfo; 115c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 116c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern asmlinkage long compat_sys_waitid(int, compat_pid_t, 117c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_siginfo __user *, int, 118c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_rusage __user *); 119c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 120c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_dirent { 121c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru u32 d_ino; 122c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_off_t d_off; 123c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru u16 d_reclen; 124c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru char d_name[256]; 125c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 126c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 127c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef union compat_sigval { 128c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t sival_int; 129c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_uptr_t sival_ptr; 130c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} compat_sigval_t; 131c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define COMPAT_SIGEV_PAD_SIZE ((SIGEV_MAX_SIZE/sizeof(int)) - 3) 133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querutypedef struct compat_sigevent { 135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_sigval_t sigev_value; 136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t sigev_signo; 137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t sigev_notify; 138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru union { 139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t _pad[COMPAT_SIGEV_PAD_SIZE]; 140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_int_t _tid; 141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct { 143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_uptr_t _function; 144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_uptr_t _attribute; 145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru } _sigev_thread; 146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru } _sigev_un; 147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} compat_sigevent_t; 148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_robust_list { 150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_uptr_t next; 151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct compat_robust_list_head { 154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_robust_list list; 155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_long_t futex_offset; 156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_uptr_t list_op_pending; 157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern void compat_exit_robust_list(struct task_struct *curr); 160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruasmlinkage long 162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querucompat_sys_set_robust_list(struct compat_robust_list_head __user *head, 163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_size_t len); 164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruasmlinkage long 165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querucompat_sys_get_robust_list(int pid, compat_uptr_t *head_ptr, 166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_size_t __user *len_ptr); 167c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 168c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querulong compat_sys_semctl(int first, int second, int third, void __user *uptr); 169c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querulong compat_sys_msgsnd(int first, int second, int third, void __user *uptr); 170c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querulong compat_sys_msgrcv(int first, int second, int msgtyp, int third, 171c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru int version, void __user *uptr); 172c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querulong compat_sys_msgctl(int first, int second, void __user *uptr); 173c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querulong compat_sys_shmat(int first, int second, compat_uptr_t third, int version, 174c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru void __user *uptr); 175c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querulong compat_sys_shmctl(int first, int second, void __user *uptr); 176c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querulong compat_sys_semtimedop(int semid, struct sembuf __user *tsems, 177c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned nsems, const struct compat_timespec __user *timeout); 178c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruasmlinkage long compat_sys_keyctl(u32 option, 179c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru u32 arg2, u32 arg3, u32 arg4, u32 arg5); 180c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 181c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruasmlinkage ssize_t compat_sys_readv(unsigned long fd, 182c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru const struct compat_iovec __user *vec, unsigned long vlen); 183c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruasmlinkage ssize_t compat_sys_writev(unsigned long fd, 184c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru const struct compat_iovec __user *vec, unsigned long vlen); 185c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 186c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruint compat_do_execve(char * filename, compat_uptr_t __user *argv, 187c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_uptr_t __user *envp, struct pt_regs * regs); 188c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 189c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruasmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp, 190c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru compat_ulong_t __user *outp, compat_ulong_t __user *exp, 191c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timeval __user *tvp); 192c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 193c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define BITS_PER_COMPAT_LONG (8*sizeof(compat_long_t)) 194c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 195c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define BITS_TO_COMPAT_LONGS(bits) \ 196c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru (((bits)+BITS_PER_COMPAT_LONG-1)/BITS_PER_COMPAT_LONG) 197c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 198c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querulong compat_get_bitmap(unsigned long *mask, compat_ulong_t __user *umask, 199c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long bitmap_size); 200c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querulong compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask, 201c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru unsigned long bitmap_size); 202c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruint copy_siginfo_from_user32(siginfo_t *to, struct compat_siginfo __user *from); 203c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruint copy_siginfo_to_user32(struct compat_siginfo __user *to, siginfo_t *from); 204c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruint get_compat_sigevent(struct sigevent *event, 205c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru const struct compat_sigevent __user *u_event); 206c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 207c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline int compat_timeval_compare(struct compat_timeval *lhs, 208c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timeval *rhs) 209c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 210c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru if (lhs->tv_sec < rhs->tv_sec) 211c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return -1; 212c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru if (lhs->tv_sec > rhs->tv_sec) 213c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return 1; 214c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return lhs->tv_usec - rhs->tv_usec; 215c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 216c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 217c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustatic inline int compat_timespec_compare(struct compat_timespec *lhs, 218c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru struct compat_timespec *rhs) 219c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru{ 220c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru if (lhs->tv_sec < rhs->tv_sec) 221c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return -1; 222c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru if (lhs->tv_sec > rhs->tv_sec) 223c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return 1; 224c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru return lhs->tv_nsec - rhs->tv_nsec; 225c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru} 226c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 227c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruasmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp); 228c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 229c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queruextern int compat_printk(const char *fmt, ...); 230c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 231c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* CONFIG_COMPAT */ 232c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* _LINUX_COMPAT_H */ 233