Blame view

include/linux/timekeeping.h 4.29 KB
8b094cd03   Thomas Gleixner   time: Consolidate...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  #ifndef _LINUX_TIMEKEEPING_H
  #define _LINUX_TIMEKEEPING_H
  
  /* Included from linux/ktime.h */
  
  void timekeeping_init(void);
  extern int timekeeping_suspended;
  
  /*
   * Get and set timeofday
   */
  extern void do_gettimeofday(struct timeval *tv);
  extern int do_settimeofday(const struct timespec *tv);
  extern int do_sys_settimeofday(const struct timespec *tv,
  			       const struct timezone *tz);
  
  /*
   * Kernel time accessors
   */
  unsigned long get_seconds(void);
  struct timespec current_kernel_time(void);
  /* does not take xtime_lock */
  struct timespec __current_kernel_time(void);
  
  /*
   * timespec based interfaces
   */
  struct timespec get_monotonic_coarse(void);
  extern void getrawmonotonic(struct timespec *ts);
d6d29896c   Thomas Gleixner   timekeeping: Prov...
30
31
32
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
  extern void ktime_get_ts64(struct timespec64 *ts);
  
  extern int __getnstimeofday64(struct timespec64 *tv);
  extern void getnstimeofday64(struct timespec64 *tv);
  
  #if BITS_PER_LONG == 64
  static inline int __getnstimeofday(struct timespec *ts)
  {
  	return __getnstimeofday64(ts);
  }
  
  static inline void getnstimeofday(struct timespec *ts)
  {
  	getnstimeofday64(ts);
  }
  
  static inline void ktime_get_ts(struct timespec *ts)
  {
  	ktime_get_ts64(ts);
  }
  
  static inline void ktime_get_real_ts(struct timespec *ts)
  {
  	getnstimeofday64(ts);
  }
  
  #else
  static inline int __getnstimeofday(struct timespec *ts)
  {
  	struct timespec64 ts64;
  	int ret = __getnstimeofday64(&ts64);
  
  	*ts = timespec64_to_timespec(ts64);
  	return ret;
  }
  
  static inline void getnstimeofday(struct timespec *ts)
  {
  	struct timespec64 ts64;
  
  	getnstimeofday64(&ts64);
  	*ts = timespec64_to_timespec(ts64);
  }
  
  static inline void ktime_get_ts(struct timespec *ts)
  {
  	struct timespec64 ts64;
  
  	ktime_get_ts64(&ts64);
  	*ts = timespec64_to_timespec(ts64);
  }
  
  static inline void ktime_get_real_ts(struct timespec *ts)
  {
  	struct timespec64 ts64;
  
  	getnstimeofday64(&ts64);
  	*ts = timespec64_to_timespec(ts64);
  }
  #endif
8b094cd03   Thomas Gleixner   time: Consolidate...
90

8b094cd03   Thomas Gleixner   time: Consolidate...
91
92
93
  extern void getboottime(struct timespec *ts);
  
  #define do_posix_clock_monotonic_gettime(ts) ktime_get_ts(ts)
d6d29896c   Thomas Gleixner   timekeeping: Prov...
94
  #define ktime_get_real_ts64(ts)	getnstimeofday64(ts)
8b094cd03   Thomas Gleixner   time: Consolidate...
95
96
97
98
  
  /*
   * ktime_t based interfaces
   */
0077dc60f   Thomas Gleixner   timekeeping: Prov...
99
100
101
102
103
104
105
  
  enum tk_offsets {
  	TK_OFFS_REAL,
  	TK_OFFS_BOOT,
  	TK_OFFS_TAI,
  	TK_OFFS_MAX,
  };
8b094cd03   Thomas Gleixner   time: Consolidate...
106
  extern ktime_t ktime_get(void);
0077dc60f   Thomas Gleixner   timekeeping: Prov...
107
  extern ktime_t ktime_get_with_offset(enum tk_offsets offs);
9a6b51976   Thomas Gleixner   timekeeping: Prov...
108
  extern ktime_t ktime_mono_to_any(ktime_t tmono, enum tk_offsets offs);
f519b1a2e   Thomas Gleixner   timekeeping: Prov...
109
  extern ktime_t ktime_get_raw(void);
8b094cd03   Thomas Gleixner   time: Consolidate...
110

f5264d5d5   Thomas Gleixner   timekeeping: Use ...
111
112
113
114
115
116
117
  /**
   * ktime_get_real - get the real (wall-) time in ktime_t format
   */
  static inline ktime_t ktime_get_real(void)
  {
  	return ktime_get_with_offset(TK_OFFS_REAL);
  }
b82c817e2   Thomas Gleixner   timekeeping; Use ...
118
119
120
121
122
123
124
125
126
127
  /**
   * ktime_get_boottime - Returns monotonic time since boot in ktime_t format
   *
   * This is similar to CLOCK_MONTONIC/ktime_get, but also includes the
   * time spent in suspend.
   */
  static inline ktime_t ktime_get_boottime(void)
  {
  	return ktime_get_with_offset(TK_OFFS_BOOT);
  }
afab07c0e   Thomas Gleixner   timekeeping: Use ...
128
129
130
131
132
133
134
  /**
   * ktime_get_clocktai - Returns the TAI time of day in ktime_t format
   */
  static inline ktime_t ktime_get_clocktai(void)
  {
  	return ktime_get_with_offset(TK_OFFS_TAI);
  }
9a6b51976   Thomas Gleixner   timekeeping: Prov...
135
136
137
138
139
140
141
  /**
   * ktime_mono_to_real - Convert monotonic time to clock realtime
   */
  static inline ktime_t ktime_mono_to_real(ktime_t mono)
  {
  	return ktime_mono_to_any(mono, TK_OFFS_REAL);
  }
897994e32   Thomas Gleixner   timekeeping: Prov...
142
143
144
145
146
147
148
149
150
151
152
153
154
155
  static inline u64 ktime_get_ns(void)
  {
  	return ktime_to_ns(ktime_get());
  }
  
  static inline u64 ktime_get_real_ns(void)
  {
  	return ktime_to_ns(ktime_get_real());
  }
  
  static inline u64 ktime_get_boot_ns(void)
  {
  	return ktime_to_ns(ktime_get_boottime());
  }
f519b1a2e   Thomas Gleixner   timekeeping: Prov...
156
157
158
159
  static inline u64 ktime_get_raw_ns(void)
  {
  	return ktime_to_ns(ktime_get_raw());
  }
4396e058c   Thomas Gleixner   timekeeping: Prov...
160
  extern u64 ktime_get_mono_fast_ns(void);
8b094cd03   Thomas Gleixner   time: Consolidate...
161
  /*
48f18fd6a   Thomas Gleixner   timekeeping: Use ...
162
163
164
165
166
167
   * Timespec interfaces utilizing the ktime based ones
   */
  static inline void get_monotonic_boottime(struct timespec *ts)
  {
  	*ts = ktime_to_timespec(ktime_get_boottime());
  }
61edec81d   Thomas Gleixner   timekeeping: Simp...
168
169
170
171
  static inline void timekeeping_clocktai(struct timespec *ts)
  {
  	*ts = ktime_to_timespec(ktime_get_clocktai());
  }
48f18fd6a   Thomas Gleixner   timekeeping: Use ...
172
  /*
8b094cd03   Thomas Gleixner   time: Consolidate...
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
   * RTC specific
   */
  extern void timekeeping_inject_sleeptime(struct timespec *delta);
  
  /*
   * PPS accessor
   */
  extern void getnstime_raw_and_real(struct timespec *ts_raw,
  				   struct timespec *ts_real);
  
  /*
   * Persistent clock related interfaces
   */
  extern bool persistent_clock_exist;
  extern int persistent_clock_is_local;
  
  static inline bool has_persistent_clock(void)
  {
  	return persistent_clock_exist;
  }
  
  extern void read_persistent_clock(struct timespec *ts);
  extern void read_boot_clock(struct timespec *ts);
  extern int update_persistent_clock(struct timespec now);
  
  
  #endif