home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / include / linux / compat.h < prev    next >
Encoding:
C/C++ Source or Header  |  2009-09-09  |  8.8 KB  |  298 lines

  1. #ifndef _LINUX_COMPAT_H
  2. #define _LINUX_COMPAT_H
  3. /*
  4.  * These are the type definitions for the architecture specific
  5.  * syscall compatibility layer.
  6.  */
  7.  
  8. #ifdef CONFIG_COMPAT
  9.  
  10. #include <linux/stat.h>
  11. #include <linux/param.h>    /* for HZ */
  12. #include <linux/sem.h>
  13.  
  14. #include <asm/compat.h>
  15. #include <asm/siginfo.h>
  16. #include <asm/signal.h>
  17.  
  18. #define compat_jiffies_to_clock_t(x)    \
  19.         (((unsigned long)(x) * COMPAT_USER_HZ) / HZ)
  20.  
  21. typedef __compat_uid32_t    compat_uid_t;
  22. typedef __compat_gid32_t    compat_gid_t;
  23.  
  24. struct rusage;
  25.  
  26. struct compat_itimerspec { 
  27.     struct compat_timespec it_interval;
  28.     struct compat_timespec it_value;
  29. };
  30.  
  31. struct compat_utimbuf {
  32.     compat_time_t        actime;
  33.     compat_time_t        modtime;
  34. };
  35.  
  36. struct compat_itimerval {
  37.     struct compat_timeval    it_interval;
  38.     struct compat_timeval    it_value;
  39. };
  40.  
  41. struct compat_tms {
  42.     compat_clock_t        tms_utime;
  43.     compat_clock_t        tms_stime;
  44.     compat_clock_t        tms_cutime;
  45.     compat_clock_t        tms_cstime;
  46. };
  47.  
  48. struct compat_timex {
  49.     compat_uint_t modes;
  50.     compat_long_t offset;
  51.     compat_long_t freq;
  52.     compat_long_t maxerror;
  53.     compat_long_t esterror;
  54.     compat_int_t status;
  55.     compat_long_t constant;
  56.     compat_long_t precision;
  57.     compat_long_t tolerance;
  58.     struct compat_timeval time;
  59.     compat_long_t tick;
  60.     compat_long_t ppsfreq;
  61.     compat_long_t jitter;
  62.     compat_int_t shift;
  63.     compat_long_t stabil;
  64.     compat_long_t jitcnt;
  65.     compat_long_t calcnt;
  66.     compat_long_t errcnt;
  67.     compat_long_t stbcnt;
  68.     compat_int_t tai;
  69.  
  70.     compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32;
  71.     compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32;
  72.     compat_int_t :32; compat_int_t :32; compat_int_t :32;
  73. };
  74.  
  75. #define _COMPAT_NSIG_WORDS    (_COMPAT_NSIG / _COMPAT_NSIG_BPW)
  76.  
  77. typedef struct {
  78.     compat_sigset_word    sig[_COMPAT_NSIG_WORDS];
  79. } compat_sigset_t;
  80.  
  81. extern int get_compat_timespec(struct timespec *, const struct compat_timespec __user *);
  82. extern int put_compat_timespec(const struct timespec *, struct compat_timespec __user *);
  83.  
  84. struct compat_iovec {
  85.     compat_uptr_t    iov_base;
  86.     compat_size_t    iov_len;
  87. };
  88.  
  89. struct compat_rlimit {
  90.     compat_ulong_t    rlim_cur;
  91.     compat_ulong_t    rlim_max;
  92. };
  93.  
  94. struct compat_rusage {
  95.     struct compat_timeval ru_utime;
  96.     struct compat_timeval ru_stime;
  97.     compat_long_t    ru_maxrss;
  98.     compat_long_t    ru_ixrss;
  99.     compat_long_t    ru_idrss;
  100.     compat_long_t    ru_isrss;
  101.     compat_long_t    ru_minflt;
  102.     compat_long_t    ru_majflt;
  103.     compat_long_t    ru_nswap;
  104.     compat_long_t    ru_inblock;
  105.     compat_long_t    ru_oublock;
  106.     compat_long_t    ru_msgsnd;
  107.     compat_long_t    ru_msgrcv;
  108.     compat_long_t    ru_nsignals;
  109.     compat_long_t    ru_nvcsw;
  110.     compat_long_t    ru_nivcsw;
  111. };
  112.  
  113. extern int put_compat_rusage(const struct rusage *, struct compat_rusage __user *);
  114.  
  115. struct compat_siginfo;
  116.  
  117. extern asmlinkage long compat_sys_waitid(int, compat_pid_t,
  118.         struct compat_siginfo __user *, int,
  119.         struct compat_rusage __user *);
  120.  
  121. struct compat_dirent {
  122.     u32        d_ino;
  123.     compat_off_t    d_off;
  124.     u16        d_reclen;
  125.     char        d_name[256];
  126. };
  127.  
  128. typedef union compat_sigval {
  129.     compat_int_t    sival_int;
  130.     compat_uptr_t    sival_ptr;
  131. } compat_sigval_t;
  132.  
  133. #define COMPAT_SIGEV_PAD_SIZE    ((SIGEV_MAX_SIZE/sizeof(int)) - 3)
  134.  
  135. typedef struct compat_sigevent {
  136.     compat_sigval_t sigev_value;
  137.     compat_int_t sigev_signo;
  138.     compat_int_t sigev_notify;
  139.     union {
  140.         compat_int_t _pad[COMPAT_SIGEV_PAD_SIZE];
  141.         compat_int_t _tid;
  142.  
  143.         struct {
  144.             compat_uptr_t _function;
  145.             compat_uptr_t _attribute;
  146.         } _sigev_thread;
  147.     } _sigev_un;
  148. } compat_sigevent_t;
  149.  
  150. struct compat_robust_list {
  151.     compat_uptr_t            next;
  152. };
  153.  
  154. struct compat_robust_list_head {
  155.     struct compat_robust_list    list;
  156.     compat_long_t            futex_offset;
  157.     compat_uptr_t            list_op_pending;
  158. };
  159.  
  160. extern void compat_exit_robust_list(struct task_struct *curr);
  161.  
  162. asmlinkage long
  163. compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
  164.                compat_size_t len);
  165. asmlinkage long
  166. compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
  167.                compat_size_t __user *len_ptr);
  168.  
  169. long compat_sys_semctl(int first, int second, int third, void __user *uptr);
  170. long compat_sys_msgsnd(int first, int second, int third, void __user *uptr);
  171. long compat_sys_msgrcv(int first, int second, int msgtyp, int third,
  172.         int version, void __user *uptr);
  173. long compat_sys_msgctl(int first, int second, void __user *uptr);
  174. long compat_sys_shmat(int first, int second, compat_uptr_t third, int version,
  175.         void __user *uptr);
  176. long compat_sys_shmctl(int first, int second, void __user *uptr);
  177. long compat_sys_semtimedop(int semid, struct sembuf __user *tsems,
  178.         unsigned nsems, const struct compat_timespec __user *timeout);
  179. asmlinkage long compat_sys_keyctl(u32 option,
  180.                   u32 arg2, u32 arg3, u32 arg4, u32 arg5);
  181.  
  182. asmlinkage ssize_t compat_sys_readv(unsigned long fd,
  183.         const struct compat_iovec __user *vec, unsigned long vlen);
  184. asmlinkage ssize_t compat_sys_writev(unsigned long fd,
  185.         const struct compat_iovec __user *vec, unsigned long vlen);
  186.  
  187. int compat_do_execve(char * filename, compat_uptr_t __user *argv,
  188.             compat_uptr_t __user *envp, struct pt_regs * regs);
  189.  
  190. asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
  191.         compat_ulong_t __user *outp, compat_ulong_t __user *exp,
  192.         struct compat_timeval __user *tvp);
  193.  
  194. asmlinkage long compat_sys_wait4(compat_pid_t pid,
  195.                  compat_uint_t __user *stat_addr, int options,
  196.                  struct compat_rusage __user *ru);
  197.  
  198. #define BITS_PER_COMPAT_LONG    (8*sizeof(compat_long_t))
  199.  
  200. #define BITS_TO_COMPAT_LONGS(bits) \
  201.     (((bits)+BITS_PER_COMPAT_LONG-1)/BITS_PER_COMPAT_LONG)
  202.  
  203. long compat_get_bitmap(unsigned long *mask, const compat_ulong_t __user *umask,
  204.                unsigned long bitmap_size);
  205. long compat_put_bitmap(compat_ulong_t __user *umask, unsigned long *mask,
  206.                unsigned long bitmap_size);
  207. int copy_siginfo_from_user32(siginfo_t *to, struct compat_siginfo __user *from);
  208. int copy_siginfo_to_user32(struct compat_siginfo __user *to, siginfo_t *from);
  209. int get_compat_sigevent(struct sigevent *event,
  210.         const struct compat_sigevent __user *u_event);
  211.  
  212. static inline int compat_timeval_compare(struct compat_timeval *lhs,
  213.                     struct compat_timeval *rhs)
  214. {
  215.     if (lhs->tv_sec < rhs->tv_sec)
  216.         return -1;
  217.     if (lhs->tv_sec > rhs->tv_sec)
  218.         return 1;
  219.     return lhs->tv_usec - rhs->tv_usec;
  220. }
  221.  
  222. static inline int compat_timespec_compare(struct compat_timespec *lhs,
  223.                     struct compat_timespec *rhs)
  224. {
  225.     if (lhs->tv_sec < rhs->tv_sec)
  226.         return -1;
  227.     if (lhs->tv_sec > rhs->tv_sec)
  228.         return 1;
  229.     return lhs->tv_nsec - rhs->tv_nsec;
  230. }
  231.  
  232. extern int get_compat_itimerspec(struct itimerspec *dst,
  233.                  const struct compat_itimerspec __user *src);
  234. extern int put_compat_itimerspec(struct compat_itimerspec __user *dst,
  235.                  const struct itimerspec *src);
  236.  
  237. asmlinkage long compat_sys_gettimeofday(struct compat_timeval __user *tv,
  238.         struct timezone __user *tz);
  239. asmlinkage long compat_sys_settimeofday(struct compat_timeval __user *tv,
  240.         struct timezone __user *tz);
  241.  
  242. asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp);
  243.  
  244. extern int compat_printk(const char *fmt, ...);
  245. extern void sigset_from_compat(sigset_t *set, compat_sigset_t *compat);
  246.  
  247. asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,
  248.         compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes,
  249.         const compat_ulong_t __user *new_nodes);
  250.  
  251. extern int compat_ptrace_request(struct task_struct *child,
  252.                  compat_long_t request,
  253.                  compat_ulong_t addr, compat_ulong_t data);
  254.  
  255. extern long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
  256.                    compat_ulong_t addr, compat_ulong_t data);
  257. asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
  258.                   compat_long_t addr, compat_long_t data);
  259.  
  260. /*
  261.  * epoll (fs/eventpoll.c) compat bits follow ...
  262.  */
  263. struct epoll_event;
  264. #define compat_epoll_event    epoll_event
  265. asmlinkage long compat_sys_epoll_pwait(int epfd,
  266.             struct compat_epoll_event __user *events,
  267.             int maxevents, int timeout,
  268.             const compat_sigset_t __user *sigmask,
  269.             compat_size_t sigsetsize);
  270.  
  271. asmlinkage long compat_sys_utimensat(unsigned int dfd, char __user *filename,
  272.                 struct compat_timespec __user *t, int flags);
  273.  
  274. asmlinkage long compat_sys_signalfd(int ufd,
  275.                 const compat_sigset_t __user *sigmask,
  276.                                 compat_size_t sigsetsize);
  277. asmlinkage long compat_sys_timerfd_settime(int ufd, int flags,
  278.                    const struct compat_itimerspec __user *utmr,
  279.                    struct compat_itimerspec __user *otmr);
  280. asmlinkage long compat_sys_timerfd_gettime(int ufd,
  281.                    struct compat_itimerspec __user *otmr);
  282.  
  283. asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page,
  284.                       __u32 __user *pages,
  285.                       const int __user *nodes,
  286.                       int __user *status,
  287.                       int flags);
  288. asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename,
  289.                      struct compat_timeval __user *t);
  290. asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename,
  291.                       struct compat_stat __user *statbuf,
  292.                       int flag);
  293. asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename,
  294.                   int flags, int mode);
  295.  
  296. #endif /* CONFIG_COMPAT */
  297. #endif /* _LINUX_COMPAT_H */
  298.