| #pragma once |
| |
| /* All of these should be in other Akaros headers */ |
| #ifndef __akaros__ |
| |
| #include <stdbool.h> |
| #ifndef TRUE |
| #define TRUE 1 |
| #endif |
| |
| #ifndef FALSE |
| #define FALSE 0 |
| #endif |
| |
| #include <sys/param.h> /* MIN/MAX */ |
| #include <unistd.h> |
| #include "../../user/parlib/include/parlib/tsc-compat.h" |
| |
| /* arch-specific... */ |
| static inline void cpu_relax(void) |
| { |
| asm volatile("pause" : : : "memory"); |
| } |
| |
| static inline uint64_t ndelay(uint64_t nsec) |
| { |
| uint64_t start, end, now; |
| |
| start = read_tsc(); |
| end = start + (get_tsc_freq() * nsec) / 1000000000; |
| do { |
| cpu_relax(); |
| now = read_tsc(); |
| } while (now < end || (now > start && end < start)); |
| return tsc2nsec(now); |
| } |
| |
| #define udelay(usec) ndelay(usec * 1000) |
| |
| #define pthread_id() (pthread_self()) |
| |
| #define vcore_id() (-1) |
| |
| /* This isn't num_vcores, but it's all Linux has */ |
| #define num_vcores() ((int)sysconf(_SC_NPROCESSORS_ONLN)) |
| |
| #define max_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__ */ |