1  /* SPDX-License-Identifier: GPL-2.0 */
2  #ifndef _LINUX_HRTIMER_TYPES_H
3  #define _LINUX_HRTIMER_TYPES_H
4  
5  #include <linux/types.h>
6  #include <linux/timerqueue_types.h>
7  
8  struct hrtimer_clock_base;
9  
10  /*
11   * Return values for the callback function
12   */
13  enum hrtimer_restart {
14  	HRTIMER_NORESTART,	/* Timer is not restarted */
15  	HRTIMER_RESTART,	/* Timer must be restarted */
16  };
17  
18  /**
19   * struct hrtimer - the basic hrtimer structure
20   * @node:	timerqueue node, which also manages node.expires,
21   *		the absolute expiry time in the hrtimers internal
22   *		representation. The time is related to the clock on
23   *		which the timer is based. Is setup by adding
24   *		slack to the _softexpires value. For non range timers
25   *		identical to _softexpires.
26   * @_softexpires: the absolute earliest expiry time of the hrtimer.
27   *		The time which was given as expiry time when the timer
28   *		was armed.
29   * @function:	timer expiry callback function
30   * @base:	pointer to the timer base (per cpu and per clock)
31   * @state:	state information (See bit values above)
32   * @is_rel:	Set if the timer was armed relative
33   * @is_soft:	Set if hrtimer will be expired in soft interrupt context.
34   * @is_hard:	Set if hrtimer will be expired in hard interrupt context
35   *		even on RT.
36   *
37   * The hrtimer structure must be initialized by hrtimer_init()
38   */
39  struct hrtimer {
40  	struct timerqueue_node		node;
41  	ktime_t				_softexpires;
42  	enum hrtimer_restart		(*function)(struct hrtimer *);
43  	struct hrtimer_clock_base	*base;
44  	u8				state;
45  	u8				is_rel;
46  	u8				is_soft;
47  	u8				is_hard;
48  };
49  
50  #endif /* _LINUX_HRTIMER_TYPES_H */
51