Пример #1
0
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;
}
Пример #2
0
int __wrap_clock_gettime(clockid_t clock_id, struct timespec *tp)
{
	int err;
#ifdef CONFIG_XENO_HW_DIRECT_TSC
	if (clock_id == CLOCK_MONOTONIC && sysinfo.tickval == 1) {
		unsigned long long tsc;
		unsigned long rem;

		tsc = __xn_rdtsc();
		tp->tv_sec = xnarch_ulldiv(tsc, sysinfo.cpufreq, &rem);
		/* Next line is 64 bits safe, since rem is less than
		   sysinfo.cpufreq hence fits on 32 bits. */
		tp->tv_nsec = xnarch_imuldiv(rem, 1000000000, sysinfo.cpufreq);
		return 0;
	}
#endif /* CONFIG_XENO_HW_DIRECT_TSC */

	err = -XENOMAI_SKINCALL2(__pse51_muxid,
				 __pse51_clock_gettime,
				 clock_id,
				 tp);

	if (!err)
		return 0;

	errno = err;
	return -1;
}
Пример #3
0
void clockobj_get_time(struct clockobj *clkobj,
		       ticks_t *pticks, ticks_t *ptsc)
{
	unsigned long long ns, tsc;

	tsc = __xn_rdtsc();
	ns = cobalt_ticks_to_ns(tsc);
	if (clockobj_get_resolution(clkobj) > 1)
		ns /= clockobj_get_resolution(clkobj);
	*pticks = ns;

	if (ptsc)
		*ptsc = tsc;
}
Пример #4
0
void clockobj_get_date(struct clockobj *clkobj, ticks_t *pticks)
{
	unsigned long long ns;

	read_lock_nocancel(&clkobj->lock);

	ns = cobalt_ticks_to_ns(__xn_rdtsc());
	/* Add offset to epoch. */
	ns += (unsigned long long)clkobj->offset.tv_sec * 1000000000ULL;
	ns += clkobj->offset.tv_nsec;
	if (clockobj_get_resolution(clkobj) > 1)
		ns /= clockobj_get_resolution(clkobj);
	*pticks = ns;

	read_unlock(&clkobj->lock);
}
Пример #5
0
ticks_t clockobj_get_tsc(void)
{
	/* Guaranteed to be the source of CLOCK_COPPERPLATE. */
	return __xn_rdtsc();
}