Statistics
| Branch: | Revision:

root / osdep.h @ 13ef70f6

History | View | Annotate | Download (4.1 kB)

1 ea88812f bellard
#ifndef QEMU_OSDEP_H
2 ea88812f bellard
#define QEMU_OSDEP_H
3 ea88812f bellard
4 ea88812f bellard
#include <stdarg.h>
5 de5071c5 Blue Swirl
#include <stddef.h>
6 0f66998f Paul Moore
#include <stdbool.h>
7 128ab2ff blueswir1
#ifdef __OpenBSD__
8 128ab2ff blueswir1
#include <sys/types.h>
9 128ab2ff blueswir1
#include <sys/signal.h>
10 128ab2ff blueswir1
#endif
11 ea88812f bellard
12 f7b4a940 aliguori
#include <sys/time.h>
13 f7b4a940 aliguori
14 dda3c2ee Andreas Färber
#if defined(CONFIG_SOLARIS) && CONFIG_SOLARIS_VERSION < 10
15 dda3c2ee Andreas Färber
/* [u]int_fast*_t not in <sys/int_types.h> */
16 dda3c2ee Andreas Färber
typedef unsigned char           uint_fast8_t;
17 dda3c2ee Andreas Färber
typedef unsigned int            uint_fast16_t;
18 94a49d86 Andreas Färber
typedef signed int              int_fast16_t;
19 dda3c2ee Andreas Färber
#endif
20 dda3c2ee Andreas Färber
21 df2542c7 j_mayer
#ifndef glue
22 df2542c7 j_mayer
#define xglue(x, y) x ## y
23 df2542c7 j_mayer
#define glue(x, y) xglue(x, y)
24 df2542c7 j_mayer
#define stringify(s)        tostring(s)
25 df2542c7 j_mayer
#define tostring(s)        #s
26 df2542c7 j_mayer
#endif
27 df2542c7 j_mayer
28 df2542c7 j_mayer
#ifndef likely
29 df2542c7 j_mayer
#if __GNUC__ < 3
30 df2542c7 j_mayer
#define __builtin_expect(x, n) (x)
31 df2542c7 j_mayer
#endif
32 df2542c7 j_mayer
33 df2542c7 j_mayer
#define likely(x)   __builtin_expect(!!(x), 1)
34 df2542c7 j_mayer
#define unlikely(x)   __builtin_expect(!!(x), 0)
35 df2542c7 j_mayer
#endif
36 df2542c7 j_mayer
37 ac509d88 balrog
#ifndef container_of
38 62a6e3e1 aliguori
#define container_of(ptr, type, member) ({                      \
39 ac509d88 balrog
        const typeof(((type *) 0)->member) *__mptr = (ptr);     \
40 ac509d88 balrog
        (type *) ((char *) __mptr - offsetof(type, member));})
41 ac509d88 balrog
#endif
42 62a6e3e1 aliguori
43 5096fae3 Mark McLoughlin
/* Convert from a base type to a parent type, with compile time checking.  */
44 5096fae3 Mark McLoughlin
#ifdef __GNUC__
45 5096fae3 Mark McLoughlin
#define DO_UPCAST(type, field, dev) ( __extension__ ( { \
46 5096fae3 Mark McLoughlin
    char __attribute__((unused)) offset_must_be_zero[ \
47 5096fae3 Mark McLoughlin
        -offsetof(type, field)]; \
48 5096fae3 Mark McLoughlin
    container_of(dev, type, field);}))
49 5096fae3 Mark McLoughlin
#else
50 5096fae3 Mark McLoughlin
#define DO_UPCAST(type, field, dev) container_of(dev, type, field)
51 5096fae3 Mark McLoughlin
#endif
52 5096fae3 Mark McLoughlin
53 f0d99ad7 Juan Quintela
#define typeof_field(type, field) typeof(((type *)0)->field)
54 f0d99ad7 Juan Quintela
#define type_check(t1,t2) ((t1*)0 - (t2*)0)
55 f0d99ad7 Juan Quintela
56 df2542c7 j_mayer
#ifndef MIN
57 df2542c7 j_mayer
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
58 df2542c7 j_mayer
#endif
59 df2542c7 j_mayer
#ifndef MAX
60 df2542c7 j_mayer
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
61 df2542c7 j_mayer
#endif
62 df2542c7 j_mayer
63 e0e53b2f Corentin Chary
#ifndef DIV_ROUND_UP
64 e0e53b2f Corentin Chary
#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d))
65 e0e53b2f Corentin Chary
#endif
66 e0e53b2f Corentin Chary
67 0954d0d9 blueswir1
#ifndef ARRAY_SIZE
68 0954d0d9 blueswir1
#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
69 0954d0d9 blueswir1
#endif
70 0954d0d9 blueswir1
71 df2542c7 j_mayer
#ifndef always_inline
72 636aa200 Blue Swirl
#if !((__GNUC__ < 3) || defined(__APPLE__))
73 3dec6ecd pbrook
#ifdef __OPTIMIZE__
74 b595c14a Blue Swirl
#undef inline
75 636aa200 Blue Swirl
#define inline __attribute__ (( always_inline )) __inline__
76 df2542c7 j_mayer
#endif
77 3dec6ecd pbrook
#endif
78 cebdff77 ths
#else
79 b595c14a Blue Swirl
#undef inline
80 df2542c7 j_mayer
#define inline always_inline
81 cebdff77 ths
#endif
82 df2542c7 j_mayer
83 d62ca2bb bellard
#define qemu_printf printf
84 ea88812f bellard
85 f97742d0 Alexandre Raymond
int qemu_daemon(int nochdir, int noclose);
86 33f00271 balrog
void *qemu_memalign(size_t alignment, size_t size);
87 49b470eb bellard
void *qemu_vmalloc(size_t size);
88 49b470eb bellard
void qemu_vfree(void *ptr);
89 ea88812f bellard
90 e78815a5 Andreas Färber
#define QEMU_MADV_INVALID -1
91 e78815a5 Andreas Färber
92 e78815a5 Andreas Färber
#if defined(CONFIG_MADVISE)
93 e78815a5 Andreas Färber
94 e78815a5 Andreas Färber
#define QEMU_MADV_WILLNEED  MADV_WILLNEED
95 e78815a5 Andreas Färber
#define QEMU_MADV_DONTNEED  MADV_DONTNEED
96 e78815a5 Andreas Färber
#ifdef MADV_DONTFORK
97 e78815a5 Andreas Färber
#define QEMU_MADV_DONTFORK  MADV_DONTFORK
98 e78815a5 Andreas Färber
#else
99 e78815a5 Andreas Färber
#define QEMU_MADV_DONTFORK  QEMU_MADV_INVALID
100 e78815a5 Andreas Färber
#endif
101 e78815a5 Andreas Färber
#ifdef MADV_MERGEABLE
102 e78815a5 Andreas Färber
#define QEMU_MADV_MERGEABLE MADV_MERGEABLE
103 e78815a5 Andreas Färber
#else
104 e78815a5 Andreas Färber
#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
105 e78815a5 Andreas Färber
#endif
106 ddb97f1d Jason Baron
#ifdef MADV_DONTDUMP
107 ddb97f1d Jason Baron
#define QEMU_MADV_DONTDUMP MADV_DONTDUMP
108 ddb97f1d Jason Baron
#else
109 ddb97f1d Jason Baron
#define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID
110 ddb97f1d Jason Baron
#endif
111 e78815a5 Andreas Färber
112 e78815a5 Andreas Färber
#elif defined(CONFIG_POSIX_MADVISE)
113 e78815a5 Andreas Färber
114 e78815a5 Andreas Färber
#define QEMU_MADV_WILLNEED  POSIX_MADV_WILLNEED
115 e78815a5 Andreas Färber
#define QEMU_MADV_DONTNEED  POSIX_MADV_DONTNEED
116 e78815a5 Andreas Färber
#define QEMU_MADV_DONTFORK  QEMU_MADV_INVALID
117 e78815a5 Andreas Färber
#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
118 ddb97f1d Jason Baron
#define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID
119 e78815a5 Andreas Färber
120 e78815a5 Andreas Färber
#else /* no-op */
121 e78815a5 Andreas Färber
122 e78815a5 Andreas Färber
#define QEMU_MADV_WILLNEED  QEMU_MADV_INVALID
123 e78815a5 Andreas Färber
#define QEMU_MADV_DONTNEED  QEMU_MADV_INVALID
124 e78815a5 Andreas Färber
#define QEMU_MADV_DONTFORK  QEMU_MADV_INVALID
125 e78815a5 Andreas Färber
#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
126 ddb97f1d Jason Baron
#define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID
127 e78815a5 Andreas Färber
128 e78815a5 Andreas Färber
#endif
129 e78815a5 Andreas Färber
130 e78815a5 Andreas Färber
int qemu_madvise(void *addr, size_t len, int advice);
131 e78815a5 Andreas Färber
132 953ffe0f Andreas Färber
#if defined(__HAIKU__) && defined(__i386__)
133 953ffe0f Andreas Färber
#define FMT_pid "%ld"
134 0e0167ba Stefan Weil
#elif defined(WIN64)
135 0e0167ba Stefan Weil
#define FMT_pid "%" PRId64
136 953ffe0f Andreas Färber
#else
137 953ffe0f Andreas Färber
#define FMT_pid "%d"
138 953ffe0f Andreas Färber
#endif
139 953ffe0f Andreas Färber
140 aa26bb2d ths
int qemu_create_pidfile(const char *filename);
141 dc7a09cf Jan Kiszka
int qemu_get_thread_id(void);
142 aa26bb2d ths
143 ad620c29 Blue Swirl
#ifdef _WIN32
144 ad620c29 Blue Swirl
static inline void qemu_timersub(const struct timeval *val1,
145 ad620c29 Blue Swirl
                                 const struct timeval *val2,
146 ad620c29 Blue Swirl
                                 struct timeval *res)
147 ad620c29 Blue Swirl
{
148 ad620c29 Blue Swirl
    res->tv_sec = val1->tv_sec - val2->tv_sec;
149 ad620c29 Blue Swirl
    if (val1->tv_usec < val2->tv_usec) {
150 ad620c29 Blue Swirl
        res->tv_sec--;
151 ad620c29 Blue Swirl
        res->tv_usec = val1->tv_usec - val2->tv_usec + 1000 * 1000;
152 ad620c29 Blue Swirl
    } else {
153 ad620c29 Blue Swirl
        res->tv_usec = val1->tv_usec - val2->tv_usec;
154 ad620c29 Blue Swirl
    }
155 ad620c29 Blue Swirl
}
156 ad620c29 Blue Swirl
#else
157 ad620c29 Blue Swirl
#define qemu_timersub timersub
158 ad620c29 Blue Swirl
#endif
159 ad620c29 Blue Swirl
160 49ee3590 Anthony Liguori
void qemu_set_cloexec(int fd);
161 49ee3590 Anthony Liguori
162 93bfef4c Crístian Viana
void qemu_set_version(const char *);
163 93bfef4c Crístian Viana
const char *qemu_get_version(void);
164 93bfef4c Crístian Viana
165 0f66998f Paul Moore
void fips_set_state(bool requested);
166 0f66998f Paul Moore
bool fips_get_state(void);
167 0f66998f Paul Moore
168 ea88812f bellard
#endif