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 / posix-timers.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  3.9 KB  |  115 lines

  1. #ifndef _linux_POSIX_TIMERS_H
  2. #define _linux_POSIX_TIMERS_H
  3.  
  4. #include <linux/spinlock.h>
  5. #include <linux/list.h>
  6. #include <linux/sched.h>
  7.  
  8. union cpu_time_count {
  9.     cputime_t cpu;
  10.     unsigned long long sched;
  11. };
  12.  
  13. struct cpu_timer_list {
  14.     struct list_head entry;
  15.     union cpu_time_count expires, incr;
  16.     struct task_struct *task;
  17.     int firing;
  18. };
  19.  
  20. #define CPUCLOCK_PID(clock)        ((pid_t) ~((clock) >> 3))
  21. #define CPUCLOCK_PERTHREAD(clock) \
  22.     (((clock) & (clockid_t) CPUCLOCK_PERTHREAD_MASK) != 0)
  23. #define CPUCLOCK_PID_MASK    7
  24. #define CPUCLOCK_PERTHREAD_MASK    4
  25. #define CPUCLOCK_WHICH(clock)    ((clock) & (clockid_t) CPUCLOCK_CLOCK_MASK)
  26. #define CPUCLOCK_CLOCK_MASK    3
  27. #define CPUCLOCK_PROF        0
  28. #define CPUCLOCK_VIRT        1
  29. #define CPUCLOCK_SCHED        2
  30. #define CPUCLOCK_MAX        3
  31.  
  32. #define MAKE_PROCESS_CPUCLOCK(pid, clock) \
  33.     ((~(clockid_t) (pid) << 3) | (clockid_t) (clock))
  34. #define MAKE_THREAD_CPUCLOCK(tid, clock) \
  35.     MAKE_PROCESS_CPUCLOCK((tid), (clock) | CPUCLOCK_PERTHREAD_MASK)
  36.  
  37. /* POSIX.1b interval timer structure. */
  38. struct k_itimer {
  39.     struct list_head list;        /* free/ allocate list */
  40.     spinlock_t it_lock;
  41.     clockid_t it_clock;        /* which timer type */
  42.     timer_t it_id;            /* timer id */
  43.     int it_overrun;            /* overrun on pending signal  */
  44.     int it_overrun_last;        /* overrun on last delivered signal */
  45.     int it_requeue_pending;        /* waiting to requeue this timer */
  46. #define REQUEUE_PENDING 1
  47.     int it_sigev_notify;        /* notify word of sigevent struct */
  48.     int it_sigev_signo;        /* signo word of sigevent struct */
  49.     sigval_t it_sigev_value;    /* value word of sigevent struct */
  50.     struct task_struct *it_process;    /* process to send signal to */
  51.     struct sigqueue *sigq;        /* signal queue entry. */
  52.     union {
  53.         struct {
  54.             struct hrtimer timer;
  55.             ktime_t interval;
  56.         } real;
  57.         struct cpu_timer_list cpu;
  58.         struct {
  59.             unsigned int clock;
  60.             unsigned int node;
  61.             unsigned long incr;
  62.             unsigned long expires;
  63.         } mmtimer;
  64.     } it;
  65. };
  66.  
  67. struct k_clock {
  68.     int res;        /* in nanoseconds */
  69.     int (*clock_getres) (const clockid_t which_clock, struct timespec *tp);
  70.     int (*clock_set) (const clockid_t which_clock, struct timespec * tp);
  71.     int (*clock_get) (const clockid_t which_clock, struct timespec * tp);
  72.     int (*timer_create) (struct k_itimer *timer);
  73.     int (*nsleep) (const clockid_t which_clock, int flags,
  74.                struct timespec *, struct timespec __user *);
  75.     int (*timer_set) (struct k_itimer * timr, int flags,
  76.               struct itimerspec * new_setting,
  77.               struct itimerspec * old_setting);
  78.     int (*timer_del) (struct k_itimer * timr);
  79. #define TIMER_RETRY 1
  80.     void (*timer_get) (struct k_itimer * timr,
  81.                struct itimerspec * cur_setting);
  82. };
  83.  
  84. void register_posix_clock(const clockid_t clock_id, struct k_clock *new_clock);
  85.  
  86. /* error handlers for timer_create, nanosleep and settime */
  87. int do_posix_clock_nonanosleep(const clockid_t, int flags, struct timespec *,
  88.                    struct timespec __user *);
  89. int do_posix_clock_nosettime(const clockid_t, struct timespec *tp);
  90.  
  91. /* function to call to trigger timer event */
  92. int posix_timer_event(struct k_itimer *timr, int si_private);
  93.  
  94. int posix_cpu_clock_getres(const clockid_t which_clock, struct timespec *ts);
  95. int posix_cpu_clock_get(const clockid_t which_clock, struct timespec *ts);
  96. int posix_cpu_clock_set(const clockid_t which_clock, const struct timespec *ts);
  97. int posix_cpu_timer_create(struct k_itimer *timer);
  98. int posix_cpu_nsleep(const clockid_t which_clock, int flags,
  99.              struct timespec *rqtp, struct timespec __user *rmtp);
  100. int posix_cpu_timer_set(struct k_itimer *timer, int flags,
  101.             struct itimerspec *new, struct itimerspec *old);
  102. int posix_cpu_timer_del(struct k_itimer *timer);
  103. void posix_cpu_timer_get(struct k_itimer *timer, struct itimerspec *itp);
  104.  
  105. void posix_cpu_timer_schedule(struct k_itimer *timer);
  106.  
  107. void run_posix_cpu_timers(struct task_struct *task);
  108. void posix_cpu_timers_exit(struct task_struct *task);
  109. void posix_cpu_timers_exit_group(struct task_struct *task);
  110.  
  111. void set_process_cpu_timer(struct task_struct *task, unsigned int clock_idx,
  112.                cputime_t *newval, cputime_t *oldval);
  113.  
  114. #endif
  115.