rewrite xseg initialize skeleton
[archipelago] / xseg / sys / util.h
1 #ifndef _XSEG_SYS_UTIL_H
2 #define _XSEG_SYS_UTIL_H
3
4 #include <_sysutil.h>
5 #include <sys/domain.h>
6
7 #define FMTARG(fmt, arg, format, ...) fmt format "%s", arg, ## __VA_ARGS__
8 #define XSEGLOG(...) (xseg_snprintf(__xseg_errbuf, 4096, FMTARG("%s: ", __func__, ## __VA_ARGS__, "")), \
9                     __xseg_errbuf[4095] = 0, __xseg_log(__xseg_errbuf))
10
11 typedef uint64_t xpointer;
12
13 /* type to be used as absolute pointer
14  * this should be the same as xqindex
15  * and must fit into a ptr type
16  */
17 typedef uint64_t xptr; 
18
19 #define Noneidx ((xqindex)-1)
20 #define Null ((xpointer)-1)
21
22 #define __align(x, shift) (((((x) -1) >> (shift)) +1) << (shift))
23
24 #define XPTR_TYPE(ptrtype)      \
25         union {                 \
26                 ptrtype *t;     \
27                 xpointer x;     \
28         }
29
30 #define XPTRI(xptraddr)         \
31         (       (xpointer)(unsigned long)(xptraddr) +   \
32                 (xptraddr)->x                           )
33
34 #define XPTRISET(xptraddr, ptrval)      \
35         ((xptraddr)->x  =       (xpointer)(ptrval) -                    \
36                                 (xpointer)(unsigned long)(xptraddr)     )
37
38 #define XPTR(xptraddr)          \
39         (       (typeof((xptraddr)->t))                         \
40                 (unsigned long)                                 \
41                 (       (xpointer)(unsigned long)(xptraddr) +   \
42                         (xptraddr)->x           )               )
43
44 #define XPTRSET(xptraddr, ptrval)       \
45         ((xptraddr)->x  =       (xpointer)(unsigned long)(ptrval) -     \
46                                 (xpointer)(unsigned long)(xptraddr)     )
47
48
49
50 #define XPTR_OFFSET(base, ptr) ((unsigned long)(ptr) - (unsigned long)(base))
51
52 #define XPTR_MAKE(ptrval, base) ((xptr) XPTR_OFFSET(base, ptrval))
53
54 #define XPTR_TAKE(xptrval, base)        \
55         ( (void *) ( (unsigned long) base + (unsigned long) xptrval))
56
57 #endif