19 #ifndef _COPPERPLATE_CLOCKOBJ_H 20 #define _COPPERPLATE_CLOCKOBJ_H 23 #include <xeno_config.h> 24 #include <boilerplate/time.h> 25 #include <boilerplate/list.h> 26 #include <boilerplate/lock.h> 27 #include <boilerplate/limits.h> 41 #ifdef CONFIG_XENO_COPPERPLATE_CLOCK_RESTRICTED 42 #define CLOCK_COPPERPLATE CLOCK_REALTIME 44 #define CLOCK_COPPERPLATE CLOCK_MONOTONIC 49 struct timespec epoch;
50 struct timespec offset;
51 #ifndef CONFIG_XENO_LORES_CLOCK_DISABLED 52 unsigned int resolution;
53 unsigned int frequency;
57 #define zero_time ((struct timespec){ .tv_sec = 0, .tv_nsec = 0 }) 63 void clockobj_set_date(
struct clockobj *clkobj, ticks_t ticks);
65 void clockobj_get_date(
struct clockobj *clkobj, ticks_t *pticks);
67 ticks_t clockobj_get_time(
struct clockobj *clkobj);
69 void clockobj_get_distance(
struct clockobj *clkobj,
70 const struct itimerspec *itm,
71 struct timespec *delta);
73 ticks_t clockobj_get_tsc(
void);
75 void clockobj_caltime_to_timeout(
struct clockobj *clkobj,
const struct tm *tm,
76 unsigned long rticks,
struct timespec *ts);
78 void clockobj_caltime_to_ticks(
struct clockobj *clkobj,
const struct tm *tm,
79 unsigned long rticks, ticks_t *pticks);
81 void clockobj_ticks_to_caltime(
struct clockobj *clkobj,
84 unsigned long *rticks);
86 void clockobj_convert_clocks(
struct clockobj *clkobj,
87 const struct timespec *in,
89 struct timespec *out);
91 int clockobj_set_resolution(
struct clockobj *clkobj,
92 unsigned int resolution_ns);
94 int clockobj_init(
struct clockobj *clkobj,
95 unsigned int resolution_ns);
97 int clockobj_destroy(
struct clockobj *clkobj);
99 #ifndef CONFIG_XENO_LORES_CLOCK_DISABLED 101 void __clockobj_ticks_to_timeout(
struct clockobj *clkobj, clockid_t clk_id,
102 ticks_t ticks,
struct timespec *ts);
104 void __clockobj_ticks_to_timespec(
struct clockobj *clkobj,
105 ticks_t ticks,
struct timespec *ts);
112 #ifdef CONFIG_XENO_COBALT 114 #include <cobalt/ticks.h> 124 static inline sticks_t clockobj_ns_to_tsc(sticks_t ns)
126 return cobalt_ns_to_ticks(ns);
129 static inline sticks_t clockobj_tsc_to_ns(sticks_t tsc)
131 return cobalt_ticks_to_ns(tsc);
135 void clockobj_ns_to_timespec(ticks_t ns,
struct timespec *ts)
139 ts->tv_sec = (time_t)cobalt_divrem_billion(ns, &rem);
145 static inline sticks_t clockobj_ns_to_tsc(sticks_t ns)
150 static inline sticks_t clockobj_tsc_to_ns(sticks_t tsc)
156 void clockobj_ns_to_timespec(ticks_t ns,
struct timespec *ts)
158 ts->tv_sec = ns / 1000000000ULL;
159 ts->tv_nsec = ns - (ts->tv_sec * 1000000000ULL);
164 #ifdef CONFIG_XENO_LORES_CLOCK_DISABLED 167 void __clockobj_ticks_to_timeout(
struct clockobj *clkobj,
169 ticks_t ticks,
struct timespec *ts)
171 struct timespec now, delta;
174 clockobj_ns_to_timespec(ticks, &delta);
175 timespec_add(ts, &now, &delta);
179 void __clockobj_ticks_to_timespec(
struct clockobj *clkobj,
180 ticks_t ticks,
struct timespec *ts)
182 clockobj_ns_to_timespec(ticks, ts);
186 void clockobj_ticks_to_timespec(
struct clockobj *clkobj,
187 ticks_t ticks,
struct timespec *ts)
189 __clockobj_ticks_to_timespec(clkobj, ticks, ts);
193 unsigned int clockobj_get_resolution(
struct clockobj *clkobj)
199 unsigned int clockobj_get_frequency(
struct clockobj *clkobj)
204 static inline sticks_t clockobj_ns_to_ticks(
struct clockobj *clkobj,
210 static inline sticks_t clockobj_ticks_to_ns(
struct clockobj *clkobj,
219 void clockobj_ticks_to_timespec(
struct clockobj *clkobj,
220 ticks_t ticks,
struct timespec *ts)
222 __clockobj_ticks_to_timespec(clkobj, ticks, ts);
226 unsigned int clockobj_get_resolution(
struct clockobj *clkobj)
228 return clkobj->resolution;
232 unsigned int clockobj_get_frequency(
struct clockobj *clkobj)
234 return clkobj->frequency;
237 sticks_t clockobj_ns_to_ticks(
struct clockobj *clkobj,
240 static inline sticks_t clockobj_ticks_to_ns(
struct clockobj *clkobj,
243 return ticks * clkobj->resolution;
249 void clockobj_ticks_to_timeout(
struct clockobj *clkobj,
250 ticks_t ticks,
struct timespec *ts)
252 __clockobj_ticks_to_timeout(clkobj, CLOCK_COPPERPLATE, ticks, ts);
int clock_gettime(clockid_t clock_id, struct timespec *tp)
Read the specified clock.
Definition: clock.c:183