File:  [Qemu by Fabrice Bellard] / qemu / osdep.h
Revision 1.1.1.7 (vendor branch): download - view: text, annotated - select for diffs
Tue Apr 24 18:34:01 2018 UTC (3 years, 1 month ago) by root
Branches: qemu, MAIN
CVS tags: qemu0150, qemu0141, qemu0140, HEAD
qemu 0.14.0

    1: #ifndef QEMU_OSDEP_H
    2: #define QEMU_OSDEP_H
    3: 
    4: #include <stdarg.h>
    5: #include <stddef.h>
    6: #ifdef __OpenBSD__
    7: #include <sys/types.h>
    8: #include <sys/signal.h>
    9: #endif
   10: 
   11: #ifndef _WIN32
   12: #include <sys/time.h>
   13: #endif
   14: 
   15: #ifndef glue
   16: #define xglue(x, y) x ## y
   17: #define glue(x, y) xglue(x, y)
   18: #define stringify(s)	tostring(s)
   19: #define tostring(s)	#s
   20: #endif
   21: 
   22: #ifndef likely
   23: #if __GNUC__ < 3
   24: #define __builtin_expect(x, n) (x)
   25: #endif
   26: 
   27: #define likely(x)   __builtin_expect(!!(x), 1)
   28: #define unlikely(x)   __builtin_expect(!!(x), 0)
   29: #endif
   30: 
   31: #ifdef CONFIG_NEED_OFFSETOF
   32: #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER)
   33: #endif
   34: #ifndef container_of
   35: #define container_of(ptr, type, member) ({                      \
   36:         const typeof(((type *) 0)->member) *__mptr = (ptr);     \
   37:         (type *) ((char *) __mptr - offsetof(type, member));})
   38: #endif
   39: 
   40: /* Convert from a base type to a parent type, with compile time checking.  */
   41: #ifdef __GNUC__
   42: #define DO_UPCAST(type, field, dev) ( __extension__ ( { \
   43:     char __attribute__((unused)) offset_must_be_zero[ \
   44:         -offsetof(type, field)]; \
   45:     container_of(dev, type, field);}))
   46: #else
   47: #define DO_UPCAST(type, field, dev) container_of(dev, type, field)
   48: #endif
   49: 
   50: #define typeof_field(type, field) typeof(((type *)0)->field)
   51: #define type_check(t1,t2) ((t1*)0 - (t2*)0)
   52: 
   53: #ifndef MIN
   54: #define MIN(a, b) (((a) < (b)) ? (a) : (b))
   55: #endif
   56: #ifndef MAX
   57: #define MAX(a, b) (((a) > (b)) ? (a) : (b))
   58: #endif
   59: 
   60: #ifndef ARRAY_SIZE
   61: #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
   62: #endif
   63: 
   64: #ifndef always_inline
   65: #if !((__GNUC__ < 3) || defined(__APPLE__))
   66: #ifdef __OPTIMIZE__
   67: #define inline __attribute__ (( always_inline )) __inline__
   68: #endif
   69: #endif
   70: #else
   71: #define inline always_inline
   72: #endif
   73: 
   74: #ifdef __i386__
   75: #define REGPARM __attribute((regparm(3)))
   76: #else
   77: #define REGPARM
   78: #endif
   79: 
   80: #define qemu_printf printf
   81: 
   82: #if defined (__GNUC__) && defined (__GNUC_MINOR__)
   83: # define QEMU_GNUC_PREREQ(maj, min) \
   84:          ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
   85: #else
   86: # define QEMU_GNUC_PREREQ(maj, min) 0
   87: #endif
   88: 
   89: void *qemu_memalign(size_t alignment, size_t size);
   90: void *qemu_vmalloc(size_t size);
   91: void qemu_vfree(void *ptr);
   92: 
   93: #define QEMU_MADV_INVALID -1
   94: 
   95: #if defined(CONFIG_MADVISE)
   96: 
   97: #define QEMU_MADV_WILLNEED  MADV_WILLNEED
   98: #define QEMU_MADV_DONTNEED  MADV_DONTNEED
   99: #ifdef MADV_DONTFORK
  100: #define QEMU_MADV_DONTFORK  MADV_DONTFORK
  101: #else
  102: #define QEMU_MADV_DONTFORK  QEMU_MADV_INVALID
  103: #endif
  104: #ifdef MADV_MERGEABLE
  105: #define QEMU_MADV_MERGEABLE MADV_MERGEABLE
  106: #else
  107: #define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
  108: #endif
  109: 
  110: #elif defined(CONFIG_POSIX_MADVISE)
  111: 
  112: #define QEMU_MADV_WILLNEED  POSIX_MADV_WILLNEED
  113: #define QEMU_MADV_DONTNEED  POSIX_MADV_DONTNEED
  114: #define QEMU_MADV_DONTFORK  QEMU_MADV_INVALID
  115: #define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
  116: 
  117: #else /* no-op */
  118: 
  119: #define QEMU_MADV_WILLNEED  QEMU_MADV_INVALID
  120: #define QEMU_MADV_DONTNEED  QEMU_MADV_INVALID
  121: #define QEMU_MADV_DONTFORK  QEMU_MADV_INVALID
  122: #define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
  123: 
  124: #endif
  125: 
  126: int qemu_madvise(void *addr, size_t len, int advice);
  127: 
  128: int qemu_create_pidfile(const char *filename);
  129: 
  130: #endif

unix.superglobalmegacorp.com