blob: 08f472f6203cb0b6bb3913b0d9b6c5bb73104f52 [file] [log] [blame]
#pragma once
#ifdef __ros__
#include <parlib/timing.h>
#define pthread_id() (pthread_self()->id)
#else
#include <stdbool.h>
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
#include <sys/param.h> /* MIN/MAX */
#include <unistd.h>
/* not quite, since akaros udelay is a busy wait */
#define udelay(usec) usleep(usec)
#define ndelay(nsec) \
{ \
struct timespec ts = {0, 0}; \
ts.tv_nsec = (nsec); \
nanosleep(&ts, 0); \
}
/* not quite a normal relax, which also pauses, but this works for all archs */
static inline void cpu_relax(void)
{
asm volatile("" : : : "memory");
}
#define pthread_id() (pthread_self())
#define vcore_id() (-1)
#define num_vcores() ((int)sysconf(_SC_NPROCESSORS_ONLN))
#define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
typedef void* atomic_t;
static void uth_disable_notifs(void)
{
}
static void uth_enable_notifs(void)
{
}
static int get_pcoreid(void)
{
return -1;
}
#define printd(args...) {}
#define COUNT_OF(x) (sizeof((x))/sizeof((x)[0]))
#ifdef __x86_64__
#define mb() ({ asm volatile("mfence" ::: "memory"); })
#define cmb() ({ asm volatile("" ::: "memory"); })
#define rmb() cmb()
#define wmb() cmb()
#define wrmb() mb()
#define rwmb() cmb()
#endif /* __x86_64__ */
#endif /* __ros__ */