1  /*
   2   * \brief  Timers and tick
   3   * \author Christian Helmuth
   4   * \date   2008-10-22
   5   *
   6   * DDE kit provides a generic timer implementation that enables users to
   7   * execute a callback function after a certain period of time. Therefore, DDE
   8   * kit starts a timer thread that executes callbacks and keeps track of the
   9   * currently running timers.
  10   */

  11  
  12  /*
  13   * Copyright (C) 2008-2013 Genode Labs GmbH
  14   *
  15   * This file is part of the Genode OS framework, which is distributed
  16   * under the terms of the GNU General Public License version 2.
  17   */

  18  
  19  #ifndef _INCLUDE__DDE_KIT__TIMER_H_
  20  #define _INCLUDE__DDE_KIT__TIMER_H_
  21  
  22  #include <dde_kit/thread.h>
  23  
  24  
  25  /**********
  26   ** Tick **
  27   **********/

  28  
  29  /** Timer tick (global symbol) */
  30  extern volatile unsigned long dde_kit_timer_ticks;
  31  extern volatile unsigned long jiffies;
  32  
  33  /** Timer tick rate */

  34  enum { DDE_KIT_HZ = 100 };
  35  
  36  
  37  /***********
  38   ** Timer **
  39   ***********/

  40  
  41  struct dde_kit_timer;
  42  
  43  /**
  44   * Add timer event handler
  45   *
  46   * \param fn       function to call on timeout
  47   * \param priv     private handler token
  48   * \param timeout  absolute timeout (in DDE kit ticks)
  49   *
  50   * \return timer reference on success; 0 otherwise 
  51   *
  52   * After the absolute timeout has expired, function fn is called with args as
  53   * arguments.
  54   */

  55  struct dde_kit_timer *dde_kit_timer_add(void (*fn)(void *), void *priv,
  56                                          unsigned long timeout)
;

  57  
  58  /**
  59   * Delete timer
  60   *
  61   * \param timer  timer reference
  62   */

  63  void dde_kit_timer_del(struct dde_kit_timer *timer);

  64  
  65  
  66  /**
  67   * Schedule absolute timeout
  68   *
  69   * \param timer    timer reference
  70   * \param timeout  absolute timeout (in DDE kit ticks)
  71   */

  72  void dde_kit_timer_schedule_absolute(struct dde_kit_timer *timer, unsigned long timeout);

  73  
  74  
  75  /**
  76   * Check whether a timer is pending
  77   *
  78   * \param timer  timer reference
  79   */

  80  int dde_kit_timer_pending(struct dde_kit_timer *timer);

  81  
  82  /** Init timers and ticks */
  83  void dde_kit_timer_init(void(*thread_init)(void *), void *priv);
  84  
  85  #endif /* _INCLUDE__DDE_KIT__TIMER_H_ */