vmrunkernel: allow -M for setting memory start
[akaros.git] / tests / misc-compat.h
1 #pragma once
2
3 #ifdef __ros__
4
5 #include <parlib/timing.h>
6
7 #define pthread_id() (pthread_self()->id)
8
9 #else
10
11 #include <stdbool.h>
12 #ifndef TRUE
13 #define TRUE    1
14 #endif
15
16 #ifndef FALSE
17 #define FALSE   0
18 #endif
19
20 #include <sys/param.h> /* MIN/MAX */
21
22 /* not quite, since akaros udelay is a busy wait */
23 #define udelay(usec) usleep(usec)
24 #define ndelay(nsec)                                                           \
25 {                                                                              \
26         struct timespec ts = {0, 0};                                               \
27         ts.tv_nsec = (nsec);                                                       \
28         nanosleep(&ts, 0);                                                         \
29 }
30
31 /* not quite a normal relax, which also pauses, but this works for all archs */
32 static inline void cpu_relax(void)
33 {
34         asm volatile("" : : : "memory");
35 }
36
37 #define pthread_id() (pthread_self())
38
39 #define vcore_id() (-1)
40
41 #define num_vcores() ((int)sysconf(_SC_NPROCESSORS_ONLN))
42
43 #define ACCESS_ONCE(x) (*(volatile typeof(x) *)&(x))
44
45 typedef void* atomic_t;
46
47 static void uth_disable_notifs(void)
48 {
49 }
50
51 static void uth_enable_notifs(void)
52 {
53 }
54
55 #define printd(args...) {}
56
57 #ifdef __x86_64__
58
59 #define mb() ({ asm volatile("mfence" ::: "memory"); })
60 #define cmb() ({ asm volatile("" ::: "memory"); })
61 #define rmb() cmb()
62 #define wmb() cmb()
63 #define wrmb() mb()
64 #define rwmb() cmb()
65
66 #endif /* __x86_64__ */
67
68 #endif /* __ros__ */