19 #ifndef _COBALT_KERNEL_CLOCK_H 20 #define _COBALT_KERNEL_CLOCK_H 22 #include <linux/ipipe.h> 23 #include <cobalt/kernel/list.h> 24 #include <cobalt/kernel/vfile.h> 25 #include <cobalt/uapi/kernel/types.h> 35 struct xnclock_gravity {
43 xnticks_t wallclock_offset;
47 struct xnclock_gravity gravity;
51 #ifdef CONFIG_XENO_OPT_EXTCLOCK 52 xnticks_t (*read_raw)(
struct xnclock *clock);
53 xnticks_t (*read_monotonic)(
struct xnclock *clock);
54 int (*set_time)(
struct xnclock *clock,
55 const struct timespec *ts);
56 xnsticks_t (*ns_to_ticks)(
struct xnclock *clock,
58 xnsticks_t (*ticks_to_ns)(
struct xnclock *clock,
60 xnsticks_t (*ticks_to_ns_rounded)(
struct xnclock *clock,
62 void (*program_local_shot)(
struct xnclock *clock,
64 void (*program_remote_shot)(
struct xnclock *clock,
67 int (*set_gravity)(
struct xnclock *clock,
68 const struct xnclock_gravity *p);
69 void (*reset_gravity)(
struct xnclock *clock);
70 #ifdef CONFIG_XENO_OPT_VFILE 71 void (*print_status)(
struct xnclock *clock,
76 struct xntimerdata *timerdata;
82 #ifdef CONFIG_XENO_OPT_STATS 85 struct list_head timerq;
88 #ifdef CONFIG_XENO_OPT_VFILE 89 struct xnvfile_regular vfile;
93 extern struct xnclock nkclock;
95 extern unsigned long nktimerlat;
97 extern unsigned int nkclock_lock;
100 const cpumask_t *affinity);
109 void xnclock_core_local_shot(
struct xnsched *sched);
111 void xnclock_core_remote_shot(
struct xnsched *sched);
113 xnsticks_t xnclock_core_ns_to_ticks(xnsticks_t ns);
115 xnsticks_t xnclock_core_ticks_to_ns(xnsticks_t ticks);
117 xnsticks_t xnclock_core_ticks_to_ns_rounded(xnsticks_t ticks);
119 xnticks_t xnclock_core_read_monotonic(
void);
121 static inline xnticks_t xnclock_core_read_raw(
void)
123 unsigned long long t;
128 #ifdef CONFIG_XENO_OPT_EXTCLOCK 130 static inline void xnclock_program_shot(
struct xnclock *clock,
133 if (likely(clock == &nkclock))
134 xnclock_core_local_shot(sched);
135 else if (clock->ops.program_local_shot)
136 clock->ops.program_local_shot(clock, sched);
139 static inline void xnclock_remote_shot(
struct xnclock *clock,
143 if (likely(clock == &nkclock))
144 xnclock_core_remote_shot(sched);
145 else if (clock->ops.program_remote_shot)
146 clock->ops.program_remote_shot(clock, sched);
150 static inline xnticks_t xnclock_read_raw(
struct xnclock *clock)
152 if (likely(clock == &nkclock))
153 return xnclock_core_read_raw();
155 return clock->ops.read_raw(clock);
158 static inline xnsticks_t xnclock_ns_to_ticks(
struct xnclock *clock,
161 if (likely(clock == &nkclock))
162 return xnclock_core_ns_to_ticks(ns);
164 return clock->ops.ns_to_ticks(clock, ns);
167 static inline xnsticks_t xnclock_ticks_to_ns(
struct xnclock *clock,
170 if (likely(clock == &nkclock))
171 return xnclock_core_ticks_to_ns(ticks);
173 return clock->ops.ticks_to_ns(clock, ticks);
176 static inline xnsticks_t xnclock_ticks_to_ns_rounded(
struct xnclock *clock,
179 if (likely(clock == &nkclock))
180 return xnclock_core_ticks_to_ns_rounded(ticks);
182 return clock->ops.ticks_to_ns_rounded(clock, ticks);
185 static inline xnticks_t xnclock_read_monotonic(
struct xnclock *clock)
187 if (likely(clock == &nkclock))
188 return xnclock_core_read_monotonic();
190 return clock->ops.read_monotonic(clock);
193 static inline int xnclock_set_time(
struct xnclock *clock,
194 const struct timespec *ts)
196 if (likely(clock == &nkclock))
199 return clock->ops.set_time(clock, ts);
204 static inline void xnclock_program_shot(
struct xnclock *clock,
207 xnclock_core_local_shot(sched);
210 static inline void xnclock_remote_shot(
struct xnclock *clock,
214 xnclock_core_remote_shot(sched);
218 static inline xnticks_t xnclock_read_raw(
struct xnclock *clock)
220 return xnclock_core_read_raw();
223 static inline xnsticks_t xnclock_ns_to_ticks(
struct xnclock *clock,
226 return xnclock_core_ns_to_ticks(ns);
229 static inline xnsticks_t xnclock_ticks_to_ns(
struct xnclock *clock,
232 return xnclock_core_ticks_to_ns(ticks);
235 static inline xnsticks_t xnclock_ticks_to_ns_rounded(
struct xnclock *clock,
238 return xnclock_core_ticks_to_ns_rounded(ticks);
241 static inline xnticks_t xnclock_read_monotonic(
struct xnclock *clock)
243 return xnclock_core_read_monotonic();
246 static inline int xnclock_set_time(
struct xnclock *clock,
247 const struct timespec *ts)
258 int xnclock_get_default_cpu(
struct xnclock *clock,
int cpu);
260 static inline int xnclock_get_default_cpu(
struct xnclock *clock,
int cpu)
266 static inline xnticks_t xnclock_get_offset(
struct xnclock *clock)
268 return clock->wallclock_offset;
271 static inline xnticks_t xnclock_get_resolution(
struct xnclock *clock)
273 return clock->resolution;
276 static inline void xnclock_set_resolution(
struct xnclock *clock,
277 xnticks_t resolution)
279 clock->resolution = resolution;
282 static inline int xnclock_set_gravity(
struct xnclock *clock,
283 const struct xnclock_gravity *gravity)
285 if (clock->ops.set_gravity)
286 return clock->ops.set_gravity(clock, gravity);
291 static inline void xnclock_reset_gravity(
struct xnclock *clock)
293 if (clock->ops.reset_gravity)
294 clock->ops.reset_gravity(clock);
297 #define xnclock_get_gravity(__clock, __type) ((__clock)->gravity.__type) 299 static inline xnticks_t xnclock_read_realtime(
struct xnclock *clock)
305 return xnclock_read_monotonic(clock) + xnclock_get_offset(clock);
308 unsigned long long xnclock_divrem_billion(
unsigned long long value,
311 xnticks_t xnclock_get_host_time(
void);
313 #ifdef CONFIG_XENO_OPT_VFILE 315 void xnclock_init_proc(
void);
317 void xnclock_cleanup_proc(
void);
319 static inline void xnclock_print_status(
struct xnclock *clock,
322 if (clock->ops.print_status)
323 clock->ops.print_status(clock, it);
327 static inline void xnclock_init_proc(
void) { }
328 static inline void xnclock_cleanup_proc(
void) { }
331 void xnclock_update_freq(
unsigned long long freq);
333 int xnclock_init(
unsigned long long freq);
335 void xnclock_cleanup(
void);
Snapshot revision tag.
Definition: vfile.h:482
void xnclock_deregister(struct xnclock *clock)
Deregister a Xenomai clock.
Definition: clock.c:702
Scheduling information structure.
Definition: sched.h:57
Regular vfile iterator.
Definition: vfile.h:269
void xnclock_adjust(struct xnclock *clock, xnsticks_t delta)
Adjust a clock time.
Definition: clock.c:305
void xnclock_tick(struct xnclock *clock)
Process a clock tick.
Definition: clock.c:736
int xnclock_register(struct xnclock *clock, const cpumask_t *affinity)
Register a Xenomai clock.
Definition: clock.c:640
Snapshot vfile descriptor.
Definition: vfile.h:506