int __wrap_clock_gettime(clockid_t clock_id, struct timespec *tp) { int err; #ifdef XNARCH_HAVE_NONPRIV_TSC if (clock_id == CLOCK_MONOTONIC && __pse51_sysinfo.tickval == 1) { unsigned long long ns; unsigned long rem; ns = xnarch_tsc_to_ns(__xn_rdtsc()); tp->tv_sec = xnarch_divrem_billion(ns, &rem); tp->tv_nsec = rem; return 0; } #endif /* XNARCH_HAVE_NONPRIV_TSC */ err = -XENOMAI_SKINCALL2(__pse51_muxid, __pse51_clock_gettime, clock_id, tp); if (!err) return 0; errno = err; return -1; }
static int timer_read_proc(char *page, char **start, off_t off, int count, int *eof, void *data) { const char *tm_status, *wd_status = ""; int len; if (xnpod_active_p() && xntbase_enabled_p(&nktbase)) { tm_status = "on"; #ifdef CONFIG_XENO_OPT_WATCHDOG wd_status = "+watchdog"; #endif /* CONFIG_XENO_OPT_WATCHDOG */ } else tm_status = "off"; len = sprintf(page, "status=%s%s:setup=%Lu:clock=%Lu:timerdev=%s:clockdev=%s\n", tm_status, wd_status, xnarch_tsc_to_ns(nktimerlat), xntbase_get_rawclock(&nktbase), XNARCH_TIMER_DEVICE, XNARCH_CLOCK_DEVICE); len -= off; if (len <= off + count) *eof = 1; *start = page + off; if (len > count) len = count; if (len < 0) len = 0; return len; }
xnticks_t xntimer_get_timeout_aperiodic(xntimer_t *timer) { xnticks_t tsc = xnarch_get_cpu_tsc(); if (xntimerh_date(&timer->aplink) < tsc) return 1; /* Will elapse shortly. */ return xnarch_tsc_to_ns(xntimerh_date(&timer->aplink) - tsc); }
static int timer_vfile_show(struct xnvfile_regular_iterator *it, void *data) { const char *tm_status, *wd_status = ""; if (xnpod_active_p() && xntbase_enabled_p(&nktbase)) { tm_status = testbits(nktbase.status, XNTBLCK) ? "locked" : "on"; #ifdef CONFIG_XENO_OPT_WATCHDOG wd_status = "+watchdog"; #endif /* CONFIG_XENO_OPT_WATCHDOG */ } else tm_status = "off"; xnvfile_printf(it, "status=%s%s:setup=%Lu:clock=%Lu:timerdev=%s:clockdev=%s\n", tm_status, wd_status, xnarch_tsc_to_ns(nktimerlat), xntbase_get_rawclock(&nktbase), XNARCH_TIMER_DEVICE, XNARCH_CLOCK_DEVICE); return 0; }
xnticks_t xntimer_get_date_aperiodic(xntimer_t *timer) { return xnarch_tsc_to_ns(xntimerh_date(&timer->aplink)); }