Blame view

include/time.h 1.45 KB
a7b817699   Masahiro Yamada   time: move timer ...
1
2
3
4
5
6
  /*
   * SPDX-License-Identifier:	GPL-2.0+
   */
  
  #ifndef _TIME_H
  #define _TIME_H
21cdd133c   Masahiro Yamada   time: import time...
7
  #include <linux/typecheck.h>
a7b817699   Masahiro Yamada   time: move timer ...
8
9
10
11
12
13
14
  unsigned long get_timer(unsigned long base);
  
  /*
   * Return the current value of a monotonically increasing microsecond timer.
   * Granularity may be larger than 1us if hardware does not support this.
   */
  unsigned long timer_get_us(void);
21cdd133c   Masahiro Yamada   time: import time...
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  /*
   *	These inlines deal with timer wrapping correctly. You are
   *	strongly encouraged to use them
   *	1. Because people otherwise forget
   *	2. Because if the timer wrap changes in future you won't have to
   *	   alter your driver code.
   *
   * time_after(a,b) returns true if the time a is after time b.
   *
   * Do this with "<0" and ">=0" to only test the sign of the result. A
   * good compiler would generate better code (and a really good compiler
   * wouldn't care). Gcc is currently neither.
   */
  #define time_after(a,b)		\
  	(typecheck(unsigned long, a) && \
  	 typecheck(unsigned long, b) && \
  	 ((long)((b) - (a)) < 0))
  #define time_before(a,b)	time_after(b,a)
  
  #define time_after_eq(a,b)	\
  	(typecheck(unsigned long, a) && \
  	 typecheck(unsigned long, b) && \
  	 ((long)((a) - (b)) >= 0))
  #define time_before_eq(a,b)	time_after_eq(b,a)
  
  /*
   * Calculate whether a is in the range of [b, c].
   */
  #define time_in_range(a,b,c) \
  	(time_after_eq(a,b) && \
  	 time_before_eq(a,c))
  
  /*
   * Calculate whether a is in the range of [b, c).
   */
  #define time_in_range_open(a,b,c) \
  	(time_after_eq(a,b) && \
  	 time_before(a,c))
a7b817699   Masahiro Yamada   time: move timer ...
53
  #endif /* _TIME_H */