1 #ifndef _XSEG_SYS_UTIL_H
2 #define _XSEG_SYS_UTIL_H
5 #include <sys/domain.h>
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))
11 typedef uint64_t xpointer;
13 /* type to be used as absolute pointer
14 * this should be the same as xqindex
15 * and must fit into a ptr type
17 typedef uint64_t xptr;
19 #define Noneidx ((xqindex)-1)
20 #define Null ((xpointer)-1)
22 #define __align(x, shift) (((((x) -1) >> (shift)) +1) << (shift))
24 #define XPTR_TYPE(ptrtype) \
30 #define XPTRI(xptraddr) \
31 ( (xpointer)(unsigned long)(xptraddr) + \
34 #define XPTRISET(xptraddr, ptrval) \
35 ((xptraddr)->x = (xpointer)(ptrval) - \
36 (xpointer)(unsigned long)(xptraddr) )
38 #define XPTR(xptraddr) \
39 ( (typeof((xptraddr)->t)) \
41 ( (xpointer)(unsigned long)(xptraddr) + \
44 #define XPTRSET(xptraddr, ptrval) \
45 ((xptraddr)->x = (xpointer)(unsigned long)(ptrval) - \
46 (xpointer)(unsigned long)(xptraddr) )
50 #define XPTR_OFFSET(base, ptr) ((unsigned long)(ptr) - (unsigned long)(base))
52 #define XPTR_MAKE(ptrval, base) ((xptr) XPTR_OFFSET(base, ptrval))
54 #define XPTR_TAKE(xptrval, base) \
55 ( (void *) ( (unsigned long) base + (unsigned long) xptrval))