Esempio n. 1
0
static inline odp_time_t get_time(void)
{
	odp_time_t time;
	time.cycles = __k1_read_dsu_timestamp();
#ifdef DSU_DIVISOR
	time.cycles *= __k1_read_dsu_timestamp_divisor();
#endif
	return time;
}
Esempio n. 2
0
static int my_nanosleep(struct timespec *ts){
	uint64_t freq = __bsp_frequency;
	uint64_t tdiff = (ts->tv_sec * freq) + ((ts->tv_nsec * freq) / 1000000000ULL);

#ifdef MAGIC_SCALL
 	uint64_t divisor = __k1_read_dsu_timestamp_divisor();
	uint64_t dsu_ts = __k1_read_dsu_timestamp();
	uint64_t cc = dsu_ts * divisor;
	uint64_t target = cc + tdiff;;
	return __k1_syscall2(MAGIC_SCALL_SLEEP, target & 0xffffffffULL, target >> 32);
#else
	while(tdiff > INT32_MAX){
		__k1_cpu_backoff(INT32_MAX);
		tdiff -= INT32_MAX;
	}
	__k1_cpu_backoff(tdiff);
	return 0;
#endif
}