added speer skeletor
[archipelago] / xseg / sys / util.h
index fed0650..f1abc46 100644 (file)
@@ -4,12 +4,35 @@
 #include <_sysutil.h>
 #include <sys/domain.h>
 
+/* log stuff */
+
+
+
 #define FMTARG(fmt, arg, format, ...) fmt format "%s", arg, ## __VA_ARGS__
 #define XSEGLOG(...) (xseg_snprintf(__xseg_errbuf, 4096, FMTARG("%s: ", __func__, ## __VA_ARGS__, "")), \
                     __xseg_errbuf[4095] = 0, __xseg_log(__xseg_errbuf))
 
+#define XSEGLOG2(__ctx, __level, ...)          \
+               do {                            \
+                       if (__level <= ((__ctx)->log_level)) { \
+                               __xseg_log2(__ctx, __level, FMTARG("%s: ", __func__, ## __VA_ARGS__ ,"")); \
+                       }       \
+               } while(0) 
+
+/* general purpose xflags */
+#define X_ALLOC    ((uint32_t) (1 << 0))
+#define X_LOCAL    ((uint32_t) (1 << 1))
+#define X_NONBLOCK ((uint32_t) (1 << 2))
+
+
 typedef uint64_t xpointer;
 
+/* type to be used as absolute pointer
+ * this should be the same as xqindex
+ * and must fit into a pointer type
+ */
+typedef uint64_t xptr; 
+
 #define Noneidx ((xqindex)-1)
 #define Null ((xpointer)-1)
 
@@ -39,4 +62,13 @@ typedef uint64_t xpointer;
        ((xptraddr)->x  =       (xpointer)(unsigned long)(ptrval) -     \
                                (xpointer)(unsigned long)(xptraddr)     )
 
+
+
+#define XPTR_OFFSET(base, ptr) ((unsigned long)(ptr) - (unsigned long)(base))
+
+#define XPTR_MAKE(ptrval, base) ((xptr) XPTR_OFFSET(base, ptrval))
+
+#define XPTR_TAKE(xptrval, base)       \
+       ( (void *) ( (unsigned long) base + (unsigned long) xptrval))
+
 #endif