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