--- qemu/qemu-common.h 2018/04/24 17:20:43 1.1.1.3 +++ qemu/qemu-common.h 2018/04/24 17:34:20 1.1.1.4 @@ -3,6 +3,11 @@ #define QEMU_COMMON_H #define QEMU_NORETURN __attribute__ ((__noreturn__)) +#ifdef CONFIG_GCC_ATTRIBUTE_WARN_UNUSED_RESULT +#define QEMU_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) +#else +#define QEMU_WARN_UNUSED_RESULT +#endif /* Hack around the mess dyngen-exec.h causes: We need QEMU_NORETURN in files that cannot include the following headers without conflicts. This condition has @@ -32,13 +37,18 @@ #ifndef O_BINARY #define O_BINARY 0 #endif - +#ifndef MAP_ANONYMOUS +#define MAP_ANONYMOUS MAP_ANON +#endif #ifndef ENOMEDIUM #define ENOMEDIUM ENODEV #endif +#if !defined(ENOTSUP) +#define ENOTSUP 4096 +#endif -#ifndef HAVE_IOVEC -#define HAVE_IOVEC +#ifndef CONFIG_IOVEC +#define CONFIG_IOVEC struct iovec { void *iov_base; size_t iov_len; @@ -50,11 +60,9 @@ struct iovec { #ifdef _WIN32 #define fsync _commit #define lseek _lseeki64 -#define ENOTSUP 4096 extern int qemu_ftruncate64(int, int64_t); #define ftruncate qemu_ftruncate64 - static inline char *realpath(const char *path, char *resolved_path) { _fullpath(resolved_path, path, _MAX_PATH); @@ -85,6 +93,10 @@ typedef struct QEMUBH QEMUBH; typedef void QEMUBHFunc(void *opaque); +void async_context_push(void); +void async_context_pop(void); +int get_async_context_id(void); + QEMUBH *qemu_bh_new(QEMUBHFunc *cb, void *opaque); void qemu_bh_schedule(QEMUBH *bh); /* Bottom halfs that are scheduled from a bottom half handler are instantly @@ -97,6 +109,7 @@ void qemu_bh_schedule_idle(QEMUBH *bh); void qemu_bh_cancel(QEMUBH *bh); void qemu_bh_delete(QEMUBH *bh); int qemu_bh_poll(void); +void qemu_bh_update_timeout(int *timeout); uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c); @@ -111,6 +124,11 @@ int stristart(const char *str, const cha int qemu_strnlen(const char *s, int max_len); time_t mktimegm(struct tm *tm); int qemu_fls(int i); +int qemu_fdatasync(int fd); + +/* path.c */ +void init_paths(const char *prefix); +const char *path(const char *pathname); #define qemu_isalnum(c) isalnum((unsigned char)(c)) #define qemu_isalpha(c) isalpha((unsigned char)(c)) @@ -138,6 +156,16 @@ char *qemu_strndup(const char *str, size void *get_mmap_addr(unsigned long size); +void qemu_mutex_lock_iothread(void); +void qemu_mutex_unlock_iothread(void); + +int qemu_open(const char *name, int flags, ...); +void qemu_set_cloexec(int fd); + +#ifndef _WIN32 +int qemu_pipe(int pipefd[2]); +#endif + /* Error handling. */ void QEMU_NORETURN hw_error(const char *fmt, ...) @@ -169,12 +197,16 @@ typedef struct PixelFormat PixelFormat; typedef struct TextConsole TextConsole; typedef TextConsole QEMUConsole; typedef struct CharDriverState CharDriverState; +typedef struct MACAddr MACAddr; typedef struct VLANState VLANState; +typedef struct VLANClientState VLANClientState; typedef struct QEMUFile QEMUFile; typedef struct i2c_bus i2c_bus; typedef struct i2c_slave i2c_slave; typedef struct SMBusDevice SMBusDevice; typedef struct QEMUTimer QEMUTimer; +typedef struct PCIHostState PCIHostState; +typedef struct PCIExpressHost PCIExpressHost; typedef struct PCIBus PCIBus; typedef struct PCIDevice PCIDevice; typedef struct SerialState SerialState; @@ -216,6 +248,7 @@ typedef struct QEMUIOVector { void qemu_iovec_init(QEMUIOVector *qiov, int alloc_hint); void qemu_iovec_init_external(QEMUIOVector *qiov, struct iovec *iov, int niov); void qemu_iovec_add(QEMUIOVector *qiov, void *base, size_t len); +void qemu_iovec_concat(QEMUIOVector *dst, QEMUIOVector *src, size_t size); void qemu_iovec_destroy(QEMUIOVector *qiov); void qemu_iovec_reset(QEMUIOVector *qiov); void qemu_iovec_to_buffer(QEMUIOVector *qiov, void *buf); @@ -224,6 +257,17 @@ void qemu_iovec_from_buffer(QEMUIOVector struct Monitor; typedef struct Monitor Monitor; +/* Convert a byte between binary and BCD. */ +static inline uint8_t to_bcd(uint8_t val) +{ + return ((val / 10) << 4) | (val % 10); +} + +static inline uint8_t from_bcd(uint8_t val) +{ + return ((val >> 4) * 10) + (val & 0x0f); +} + #include "module.h" #endif /* dyngen-exec.h hack */