Home | History | Annotate | Download | only in include
      1 
      2 /* Common header file that is included by all of QEMU.
      3  *
      4  * This file is supposed to be included only by .c files. No header file should
      5  * depend on qemu-common.h, as this would easily lead to circular header
      6  * dependencies.
      7  *
      8  * If a header file uses a definition from qemu-common.h, that definition
      9  * must be moved to a separate header file, and the header that uses it
     10  * must include that header.
     11  */
     12 #ifndef QEMU_COMMON_H
     13 #define QEMU_COMMON_H
     14 
     15 #include <inttypes.h>
     16 #include <setjmp.h>
     17 
     18 #include "qemu/compiler.h"
     19 #include "config-host.h"
     20 #include "qemu/typedefs.h"
     21 #include "qemu/osdep.h"
     22 #include "qemu/bswap.h"
     23 
     24 
     25 #if defined(__arm__) || defined(__sparc__) || defined(__mips__) || defined(__hppa__) || defined(__ia64__)
     26 #define WORDS_ALIGNED
     27 #endif
     28 
     29 #define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
     30 
     31 /* we put basic includes here to avoid repeating them in device drivers */
     32 #include <stdlib.h>
     33 #include <stdio.h>
     34 #include <stdarg.h>
     35 #include <stdbool.h>
     36 #include <string.h>
     37 #include <strings.h>
     38 #include <inttypes.h>
     39 #include <limits.h>
     40 #include <time.h>
     41 #include <ctype.h>
     42 #include <errno.h>
     43 #include <unistd.h>
     44 #include <fcntl.h>
     45 #include <sys/stat.h>
     46 #include <sys/time.h>
     47 #include <assert.h>
     48 #include <signal.h>
     49 #include <glib.h>
     50 
     51 #ifdef _WIN32
     52 #include "sysemu/os-win32.h"
     53 #endif
     54 
     55 #ifdef CONFIG_POSIX
     56 #include "sysemu/os-posix.h"
     57 #endif
     58 
     59 #ifndef O_LARGEFILE
     60 #define O_LARGEFILE 0
     61 #endif
     62 #ifndef O_BINARY
     63 #define O_BINARY 0
     64 #endif
     65 #ifndef MAP_ANONYMOUS
     66 #define MAP_ANONYMOUS MAP_ANON
     67 #endif
     68 #ifndef ENOMEDIUM
     69 #define ENOMEDIUM ENODEV
     70 #endif
     71 #if !defined(ENOTSUP)
     72 #define ENOTSUP 4096
     73 #endif
     74 #if !defined(ECANCELED)
     75 #define ECANCELED 4097
     76 #endif
     77 #if !defined(EMEDIUMTYPE)
     78 #define EMEDIUMTYPE 4098
     79 #endif
     80 #ifndef TIME_MAX
     81 #define TIME_MAX LONG_MAX
     82 #endif
     83 
     84 /* HOST_LONG_BITS is the size of a native pointer in bits. */
     85 #if UINTPTR_MAX == UINT32_MAX
     86 # define HOST_LONG_BITS 32
     87 #elif UINTPTR_MAX == UINT64_MAX
     88 # define HOST_LONG_BITS 64
     89 #else
     90 # error Unknown pointer size
     91 #endif
     92 
     93 typedef int (*fprintf_function)(FILE *f, const char *fmt, ...)
     94     GCC_FMT_ATTR(2, 3);
     95 
     96 #ifdef _WIN32
     97 #define fsync _commit
     98 #if !defined(lseek)
     99 # define lseek _lseeki64
    100 #endif
    101 int qemu_ftruncate64(int, int64_t);
    102 #if !defined(ftruncate)
    103 # define ftruncate qemu_ftruncate64
    104 #endif
    105 
    106 static inline char *realpath(const char *path, char *resolved_path)
    107 {
    108     _fullpath(resolved_path, path, _MAX_PATH);
    109     return resolved_path;
    110 }
    111 #endif /* _WIN32 */
    112 
    113 /* bottom halves */
    114 typedef void QEMUBHFunc(void *opaque);
    115 
    116 void async_context_push(void);
    117 void async_context_pop(void);
    118 int get_async_context_id(void);
    119 
    120 QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque);
    121 void qemu_bh_schedule(QEMUBH *bh);
    122 /* Bottom halfs that are scheduled from a bottom half handler are instantly
    123  * invoked.  This can create an infinite loop if a bottom half handler
    124  * schedules itself.  qemu_bh_schedule_idle() avoids this infinite loop by
    125  * ensuring that the bottom half isn't executed until the next main loop
    126  * iteration.
    127  */
    128 void qemu_bh_schedule_idle(QEMUBH *bh);
    129 void qemu_bh_cancel(QEMUBH *bh);
    130 void qemu_bh_delete(QEMUBH *bh);
    131 int qemu_bh_poll(void);
    132 void qemu_bh_update_timeout(int *timeout);
    133 
    134 void qemu_get_timedate(struct tm *tm, int offset);
    135 int qemu_timedate_diff(struct tm *tm);
    136 
    137 /**
    138  * is_help_option:
    139  * @s: string to test
    140  *
    141  * Check whether @s is one of the standard strings which indicate
    142  * that the user is asking for a list of the valid values for a
    143  * command option like -cpu or -M. The current accepted strings
    144  * are 'help' and '?'. '?' is deprecated (it is a shell wildcard
    145  * which makes it annoying to use in a reliable way) but provided
    146  * for backwards compatibility.
    147  *
    148  * Returns: true if @s is a request for a list.
    149  */
    150 static inline bool is_help_option(const char *s)
    151 {
    152     return !strcmp(s, "?") || !strcmp(s, "help");
    153 }
    154 
    155 /* cutils.c */
    156 void pstrcpy(char *buf, int buf_size, const char *str);
    157 void strpadcpy(char *buf, int buf_size, const char *str, char pad);
    158 char *pstrcat(char *buf, int buf_size, const char *s);
    159 int strstart(const char *str, const char *val, const char **ptr);
    160 int stristart(const char *str, const char *val, const char **ptr);
    161 int qemu_strnlen(const char *s, int max_len);
    162 char *qemu_strsep(char **input, const char *delim);
    163 time_t mktimegm(struct tm *tm);
    164 int qemu_fls(int i);
    165 int qemu_fdatasync(int fd);
    166 int fcntl_setfl(int fd, int flag);
    167 int qemu_parse_fd(const char *param);
    168 
    169 int parse_uint(const char *s, unsigned long long *value, char **endptr,
    170                int base);
    171 int parse_uint_full(const char *s, unsigned long long *value, int base);
    172 
    173 /*
    174  * strtosz() suffixes used to specify the default treatment of an
    175  * argument passed to strtosz() without an explicit suffix.
    176  * These should be defined using upper case characters in the range
    177  * A-Z, as strtosz() will use qemu_toupper() on the given argument
    178  * prior to comparison.
    179  */
    180 #define STRTOSZ_DEFSUFFIX_EB	'E'
    181 #define STRTOSZ_DEFSUFFIX_PB	'P'
    182 #define STRTOSZ_DEFSUFFIX_TB	'T'
    183 #define STRTOSZ_DEFSUFFIX_GB	'G'
    184 #define STRTOSZ_DEFSUFFIX_MB	'M'
    185 #define STRTOSZ_DEFSUFFIX_KB	'K'
    186 #define STRTOSZ_DEFSUFFIX_B	'B'
    187 int64_t strtosz(const char *nptr, char **end);
    188 int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix);
    189 int64_t strtosz_suffix_unit(const char *nptr, char **end,
    190                             const char default_suffix, int64_t unit);
    191 
    192 /* used to print char* safely */
    193 #define STR_OR_NULL(str) ((str) ? (str) : "null")
    194 
    195 /* path.c */
    196 void init_paths(const char *prefix);
    197 const char *path(const char *pathname);
    198 
    199 #define qemu_isalnum(c)		isalnum((unsigned char)(c))
    200 #define qemu_isalpha(c)		isalpha((unsigned char)(c))
    201 #define qemu_iscntrl(c)		iscntrl((unsigned char)(c))
    202 #define qemu_isdigit(c)		isdigit((unsigned char)(c))
    203 #define qemu_isgraph(c)		isgraph((unsigned char)(c))
    204 #define qemu_islower(c)		islower((unsigned char)(c))
    205 #define qemu_isprint(c)		isprint((unsigned char)(c))
    206 #define qemu_ispunct(c)		ispunct((unsigned char)(c))
    207 #define qemu_isspace(c)		isspace((unsigned char)(c))
    208 #define qemu_isupper(c)		isupper((unsigned char)(c))
    209 #define qemu_isxdigit(c)	isxdigit((unsigned char)(c))
    210 #define qemu_tolower(c)		tolower((unsigned char)(c))
    211 #define qemu_toupper(c)		toupper((unsigned char)(c))
    212 #define qemu_isascii(c)		isascii((unsigned char)(c))
    213 #define qemu_toascii(c)		toascii((unsigned char)(c))
    214 
    215 void qemu_mutex_lock_iothread(void);
    216 void qemu_mutex_unlock_iothread(void);
    217 
    218 int qemu_open(const char *name, int flags, ...);
    219 ssize_t qemu_write_full(int fd, const void *buf, size_t count)
    220     QEMU_WARN_UNUSED_RESULT;
    221 ssize_t qemu_send_full(int fd, const void *buf, size_t count, int flags)
    222     QEMU_WARN_UNUSED_RESULT;
    223 ssize_t qemu_recv_full(int fd, void *buf, size_t count, int flags)
    224     QEMU_WARN_UNUSED_RESULT;
    225 void qemu_set_cloexec(int fd);
    226 
    227 #ifndef _WIN32
    228 int qemu_add_child_watch(pid_t pid);
    229 int qemu_eventfd(int pipefd[2]);
    230 int qemu_pipe(int pipefd[2]);
    231 #endif
    232 
    233 #ifdef CONFIG_ANDROID
    234 int qemu_recv(int sock, void* buf, size_t len, int flags);
    235 
    236 int qemu_getsockopt(int sockfd, int level, int optname,
    237                     void* optval, size_t* optlen);
    238 
    239 int qemu_setsockopt(int sockfd, int level, int optname,
    240                     const void* optval, size_t optlen);
    241 
    242 #else  // !CONFIG_ANDROID
    243 #ifdef _WIN32
    244 /* MinGW needs type casts for the 'buf' and 'optval' arguments. */
    245 #define qemu_getsockopt(sockfd, level, optname, optval, optlen) \
    246     getsockopt(sockfd, level, optname, (void *)optval, optlen)
    247 #define qemu_setsockopt(sockfd, level, optname, optval, optlen) \
    248     setsockopt(sockfd, level, optname, (const void *)optval, optlen)
    249 #define qemu_recv(sockfd, buf, len, flags) recv(sockfd, (void *)buf, len, flags)
    250 #define qemu_sendto(sockfd, buf, len, flags, destaddr, addrlen) \
    251     sendto(sockfd, (const void *)buf, len, flags, destaddr, addrlen)
    252 #else
    253 #define qemu_getsockopt(sockfd, level, optname, optval, optlen) \
    254     getsockopt(sockfd, level, optname, optval, optlen)
    255 #define qemu_setsockopt(sockfd, level, optname, optval, optlen) \
    256     setsockopt(sockfd, level, optname, optval, optlen)
    257 #define qemu_recv(sockfd, buf, len, flags) recv(sockfd, buf, len, flags)
    258 #define qemu_sendto(sockfd, buf, len, flags, destaddr, addrlen) \
    259     sendto(sockfd, buf, len, flags, destaddr, addrlen)
    260 #endif
    261 #endif  // !CONFIG_ANDROID
    262 
    263 void *get_mmap_addr(unsigned long size);
    264 
    265 
    266 /* Error handling.  */
    267 
    268 void QEMU_NORETURN hw_error(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
    269 
    270 /* IO callbacks.  */
    271 typedef void IOReadHandler(void *opaque, const uint8_t *buf, int size);
    272 typedef int IOCanReadHandler(void *opaque);
    273 typedef void IOHandler(void *opaque);
    274 
    275 void qemu_iohandler_fill(int *pnfds, fd_set *readfds, fd_set *writefds, fd_set *xfds);
    276 void qemu_iohandler_poll(fd_set *readfds, fd_set *writefds, fd_set *xfds, int rc);
    277 
    278 struct ParallelIOArg {
    279     void *buffer;
    280     int count;
    281 };
    282 
    283 typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size);
    284 
    285 typedef uint64_t pcibus_t;
    286 
    287 typedef enum {
    288     IF_NONE,
    289     IF_IDE, IF_SCSI, IF_FLOPPY, IF_PFLASH, IF_MTD, IF_SD, IF_VIRTIO, IF_XEN,
    290     IF_COUNT
    291 } BlockInterfaceType;
    292 
    293 typedef enum LostTickPolicy {
    294     LOST_TICK_DISCARD,
    295     LOST_TICK_DELAY,
    296     LOST_TICK_MERGE,
    297     LOST_TICK_SLEW,
    298     LOST_TICK_MAX
    299 } LostTickPolicy;
    300 
    301 typedef struct PCIHostDeviceAddress {
    302     unsigned int domain;
    303     unsigned int bus;
    304     unsigned int slot;
    305     unsigned int function;
    306 } PCIHostDeviceAddress;
    307 
    308 
    309 void cpu_exec_init_all(unsigned long tb_size);
    310 
    311 /* CPU save/load.  */
    312 void cpu_save(QEMUFile *f, void *opaque);
    313 int cpu_load(QEMUFile *f, void *opaque, int version_id);
    314 
    315 /* Force QEMU to process pending events */
    316 void qemu_notify_event(void);
    317 
    318 /* work queue */
    319 struct qemu_work_item {
    320     struct qemu_work_item *next;
    321     void (*func)(void *data);
    322     void *data;
    323     int done;
    324 };
    325 
    326 typedef struct QEMUIOVector {
    327     struct iovec *iov;
    328     int niov;
    329     int nalloc;
    330     size_t size;
    331 } QEMUIOVector;
    332 
    333 void qemu_iovec_init(QEMUIOVector *qiov, int alloc_hint);
    334 void qemu_iovec_init_external(QEMUIOVector *qiov, struct iovec *iov, int niov);
    335 void qemu_iovec_add(QEMUIOVector *qiov, void *base, size_t len);
    336 void qemu_iovec_concat(QEMUIOVector *dst,
    337                        QEMUIOVector *src, size_t soffset, size_t sbytes);
    338 void qemu_iovec_concat_iov(QEMUIOVector *dst,
    339                            struct iovec *src_iov, unsigned int src_cnt,
    340                            size_t soffset, size_t sbytes);
    341 void qemu_iovec_destroy(QEMUIOVector *qiov);
    342 void qemu_iovec_reset(QEMUIOVector *qiov);
    343 size_t qemu_iovec_to_buf(QEMUIOVector *qiov, size_t offset,
    344                          void *buf, size_t bytes);
    345 size_t qemu_iovec_from_buf(QEMUIOVector *qiov, size_t offset,
    346                            const void *buf, size_t bytes);
    347 size_t qemu_iovec_memset(QEMUIOVector *qiov, size_t offset,
    348                          int fillc, size_t bytes);
    349 
    350 bool buffer_is_zero(const void *buf, size_t len);
    351 
    352 #define QEMU_FILE_TYPE_BIOS   0
    353 #define QEMU_FILE_TYPE_KEYMAP 1
    354 char *qemu_find_file(int type, const char *name);
    355 
    356 /* OS specific functions */
    357 void os_setup_early_signal_handling(void);
    358 char *os_find_datadir(const char *argv0);
    359 void os_parse_cmd_args(int index, const char *optarg);
    360 void os_pidfile_error(void);
    361 
    362 /* Convert a byte between binary and BCD.  */
    363 static inline uint8_t to_bcd(uint8_t val)
    364 {
    365     return ((val / 10) << 4) | (val % 10);
    366 }
    367 
    368 static inline uint8_t from_bcd(uint8_t val)
    369 {
    370     return ((val >> 4) * 10) + (val & 0x0f);
    371 }
    372 
    373 /* compute with 96 bit intermediate result: (a*b)/c */
    374 static inline uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
    375 {
    376     union {
    377         uint64_t ll;
    378         struct {
    379 #ifdef HOST_WORDS_BIGENDIAN
    380             uint32_t high, low;
    381 #else
    382             uint32_t low, high;
    383 #endif
    384         } l;
    385     } u, res;
    386     uint64_t rl, rh;
    387 
    388     u.ll = a;
    389     rl = (uint64_t)u.l.low * (uint64_t)b;
    390     rh = (uint64_t)u.l.high * (uint64_t)b;
    391     rh += (rl >> 32);
    392     res.l.high = rh / c;
    393     res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
    394     return res.ll;
    395 }
    396 
    397 /* Round number down to multiple */
    398 #define QEMU_ALIGN_DOWN(n, m) ((n) / (m) * (m))
    399 
    400 /* Round number up to multiple */
    401 #define QEMU_ALIGN_UP(n, m) QEMU_ALIGN_DOWN((n) + (m) - 1, (m))
    402 
    403 static inline bool is_power_of_2(uint64_t value)
    404 {
    405     if (!value) {
    406         return 0;
    407     }
    408 
    409     return !(value & (value - 1));
    410 }
    411 
    412 /* round down to the nearest power of 2*/
    413 int64_t pow2floor(int64_t value);
    414 
    415 #include "qemu/module.h"
    416 
    417 /*
    418  * Implementation of ULEB128 (http://en.wikipedia.org/wiki/LEB128)
    419  * Input is limited to 14-bit numbers
    420  */
    421 
    422 int uleb128_encode_small(uint8_t *out, uint32_t n);
    423 int uleb128_decode_small(const uint8_t *in, uint32_t *n);
    424 
    425 /* unicode.c */
    426 int mod_utf8_codepoint(const char *s, size_t n, char **end);
    427 
    428 /*
    429  * Hexdump a buffer to a file. An optional string prefix is added to every line
    430  */
    431 
    432 void qemu_hexdump(const char *buf, FILE *fp, const char *prefix, size_t size);
    433 
    434 /*
    435  * A fixer for timeout value passed to select() on Mac. The issue is that Mac's
    436  * version of select() will return EINVAL on timeouts larger than 100000000
    437  * seconds, even though it should have just clamped it. So, for Mac we should
    438  * make sure that timeout value is bound to 100000000 seconds before passing it
    439  * to select().
    440  */
    441 #if _DARWIN_C_SOURCE
    442 #define CLAMP_MAC_TIMEOUT(to) do { if (to > 100000000000LL) to = 100000000000LL; } while (0)
    443 #else
    444 #define CLAMP_MAC_TIMEOUT(to) ((void)0)
    445 #endif  // _DARWIN_C_SOURCE
    446 
    447 #if defined(__clang__) || defined(__llvm__)
    448 /* Clang and llvm-gcc don't support global register variable (GRV).
    449    Clang issues compile-time error for GRV.  llvm-gcc accepts GRV (because
    450    its front-end is gcc) but ignores it in the llvm-based back-end.
    451    Undefining GRV decl to allow external/qemu and the rest of Android
    452    to compile.  But emulator built w/o GRV support will not function
    453    correctly.  User will be greeted with an error message (issued
    454    in tcg/tcg.c) when emulator built this way is launched.
    455  */
    456 #define SUPPORT_GLOBAL_REGISTER_VARIABLE 0
    457 #define GLOBAL_REGISTER_VARIABLE_DECL
    458 #else
    459 #define SUPPORT_GLOBAL_REGISTER_VARIABLE 1
    460 #define GLOBAL_REGISTER_VARIABLE_DECL register
    461 #endif /* __clang__ || __llvm__ */
    462 
    463 /* vector definitions */
    464 #ifdef __ALTIVEC__
    465 #include <altivec.h>
    466 /* The altivec.h header says we're allowed to undef these for
    467  * C++ compatibility.  Here we don't care about C++, but we
    468  * undef them anyway to avoid namespace pollution.
    469  */
    470 #undef vector
    471 #undef pixel
    472 #undef bool
    473 #define VECTYPE        __vector unsigned char
    474 #define SPLAT(p)       vec_splat(vec_ld(0, p), 0)
    475 #define ALL_EQ(v1, v2) vec_all_eq(v1, v2)
    476 /* altivec.h may redefine the bool macro as vector type.
    477  * Reset it to POSIX semantics. */
    478 #define bool _Bool
    479 #elif defined __SSE2__
    480 #include <emmintrin.h>
    481 #define VECTYPE        __m128i
    482 #define SPLAT(p)       _mm_set1_epi8(*(p))
    483 #define ALL_EQ(v1, v2) (_mm_movemask_epi8(_mm_cmpeq_epi8(v1, v2)) == 0xFFFF)
    484 #else
    485 #define VECTYPE        unsigned long
    486 #define SPLAT(p)       (*(p) * (~0UL / 255))
    487 #define ALL_EQ(v1, v2) ((v1) == (v2))
    488 #endif
    489 
    490 #define BUFFER_FIND_NONZERO_OFFSET_UNROLL_FACTOR 8
    491 static inline bool
    492 can_use_buffer_find_nonzero_offset(const void *buf, size_t len)
    493 {
    494     return (len % (BUFFER_FIND_NONZERO_OFFSET_UNROLL_FACTOR
    495                    * sizeof(VECTYPE)) == 0
    496             && ((uintptr_t) buf) % sizeof(VECTYPE) == 0);
    497 }
    498 size_t buffer_find_nonzero_offset(const void *buf, size_t len);
    499 
    500 /*
    501  * helper to parse debug environment variables
    502  */
    503 int parse_debug_env(const char *name, int max, int initial);
    504 
    505 extern int use_icount;
    506 
    507 #endif
    508