Blame view

include/time.h 3 KB
83d290c56   Tom Rini   SPDX: Convert all...
1
  /* SPDX-License-Identifier: GPL-2.0+ */
a7b817699   Masahiro Yamada   time: move timer ...
2
3
4
  
  #ifndef _TIME_H
  #define _TIME_H
21cdd133c   Masahiro Yamada   time: import time...
5
  #include <linux/typecheck.h>
6a853dbcc   Heinrich Schuchardt   lib: time: export...
6
  #include <linux/types.h>
21cdd133c   Masahiro Yamada   time: import time...
7

049f8d6f4   Simon Glass   common: Move get_...
8
  ulong get_tbclk(void);
a7b817699   Masahiro Yamada   time: move timer ...
9
10
11
12
13
14
15
  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);
80e7e7c2a   Marek Vasut   lib: time: Add mi...
16
  uint64_t get_timer_us(uint64_t base);
a7b817699   Masahiro Yamada   time: move timer ...
17

21cdd133c   Masahiro Yamada   time: import time...
18
  /*
d0a9b82b7   Neil Armstrong   regmap: fix regma...
19
20
21
22
23
24
   * timer_test_add_offset()
   *
   * Allow tests to add to the time reported through lib/time.c functions
   * offset: number of milliseconds to advance the system time
   */
  void timer_test_add_offset(unsigned long offset);
6a853dbcc   Heinrich Schuchardt   lib: time: export...
25
26
27
28
29
30
31
  /**
   * usec_to_tick() - convert microseconds to clock ticks
   *
   * @usec:	duration in microseconds
   * Return:	duration in clock ticks
   */
  uint64_t usec_to_tick(unsigned long usec);
d0a9b82b7   Neil Armstrong   regmap: fix regma...
32
  /*
21cdd133c   Masahiro Yamada   time: import time...
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
   *	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))
6887c5bed   Simon Glass   common: Move some...
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
  /**
   * usec2ticks() - Convert microseconds to internal ticks
   *
   * @usec: Value of microseconds to convert
   * @return Corresponding internal ticks value, calculated using get_tbclk()
   */
  ulong usec2ticks(unsigned long usec);
  
  /**
   * ticks2usec() - Convert internal ticks to microseconds
   *
   * @ticks: Value of ticks to convert
   * @return Corresponding microseconds value, calculated using get_tbclk()
   */
  ulong ticks2usec(unsigned long ticks);
036a017f7   Simon Glass   common: Move wait...
85
86
87
88
89
90
91
92
93
  /**
   * wait_ticks() - waits a given number of ticks
   *
   * This is an internal function typically used to implement udelay() and
   * similar. Normally you should use udelay() or mdelay() instead.
   *
   * @ticks: Number of ticks to wait
   */
  void wait_ticks(unsigned long ticks);
f0143a86a   Simon Glass   common: Move time...
94
95
96
97
98
99
  /**
   * timer_get_us() - Get monotonic microsecond timer
   *
   * @return value of monotonic microsecond timer
   */
  unsigned long timer_get_us(void);
1045315df   Simon Glass   common: Move get_...
100
101
102
103
104
105
106
107
108
  /**
   * get_ticks() - Get the current tick value
   *
   * This is an internal value used by the timer on the system. Ticks increase
   * monotonically at the rate given by get_tbclk().
   *
   * @return current tick value
   */
  uint64_t get_ticks(void);
a7b817699   Masahiro Yamada   time: move timer ...
109
  #endif /* _TIME_H */