X-Git-Url: https://code.grnet.gr/git/archipelago/blobdiff_plain/6d486cc0e4c54f6224e7da47d84b319de3677542..2ddecabedce388e321dd00e490e266dc28467902:/xseg/sys/util.h diff --git a/xseg/sys/util.h b/xseg/sys/util.h index 8b023b0..2f48e7a 100644 --- a/xseg/sys/util.h +++ b/xseg/sys/util.h @@ -1,29 +1,62 @@ -#ifndef XSEG_UTIL_H -#define XSEG_UTIL_H +#ifndef _XSEG_SYS_UTIL_H +#define _XSEG_SYS_UTIL_H -#ifdef __KERNEL__ +#include <_sysutil.h> +#include -#include -#include -#include +#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)) -#else +/* general purpose xflags */ +#define X_ALLOC ((uint32_t) (1 << 0)) +#define X_LOCAL ((uint32_t) (1 << 1)) -#include -#include -#include -#include -#endif +typedef uint64_t xpointer; -void __xseg_log(const char *msg); -extern char __xseg_errbuf[4096]; -extern int (*xseg_snprintf)(char *str, size_t size, const char *format, ...); -void *xq_malloc(unsigned long size); -void xq_mfree(void *ptr); +/* 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 FMTARG(fmt, arg, format, ...) fmt format "%s", arg, ## __VA_ARGS__ -#define LOGMSG(...) xseg_snprintf(__xseg_errbuf, 4096, FMTARG("%s: ", __func__, ## __VA_ARGS__, "")), \ - __xseg_errbuf[4095] = 0, __xseg_log(__xseg_errbuf) +#define Noneidx ((xqindex)-1) +#define Null ((xpointer)-1) + +#define __align(x, shift) (((((x) -1) >> (shift)) +1) << (shift)) + +#define XPTR_TYPE(ptrtype) \ + union { \ + ptrtype *t; \ + xpointer x; \ + } + +#define XPTRI(xptraddr) \ + ( (xpointer)(unsigned long)(xptraddr) + \ + (xptraddr)->x ) + +#define XPTRISET(xptraddr, ptrval) \ + ((xptraddr)->x = (xpointer)(ptrval) - \ + (xpointer)(unsigned long)(xptraddr) ) + +#define XPTR(xptraddr) \ + ( (typeof((xptraddr)->t)) \ + (unsigned long) \ + ( (xpointer)(unsigned long)(xptraddr) + \ + (xptraddr)->x ) ) + +#define XPTRSET(xptraddr, ptrval) \ + ((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