qemu-common.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. /* Common header file that is included by all of QEMU.
  2. *
  3. * This file is supposed to be included only by .c files. No header file should
  4. * depend on qemu-common.h, as this would easily lead to circular header
  5. * dependencies.
  6. *
  7. * If a header file uses a definition from qemu-common.h, that definition
  8. * must be moved to a separate header file, and the header that uses it
  9. * must include that header.
  10. */
  11. #ifndef QEMU_COMMON_H
  12. #define QEMU_COMMON_H
  13. #include "qemu/compiler.h"
  14. #include "config-host.h"
  15. #include "qemu/typedefs.h"
  16. #if defined(__arm__) || defined(__sparc__) || defined(__mips__) || defined(__hppa__) || defined(__ia64__)
  17. #define WORDS_ALIGNED
  18. #endif
  19. #define TFR(expr) do { if ((expr) != -1) break; } while (errno == EINTR)
  20. /* we put basic includes here to avoid repeating them in device drivers */
  21. #include <stdlib.h>
  22. #include <stdio.h>
  23. #include <stdarg.h>
  24. #include <stdbool.h>
  25. #include <string.h>
  26. #include <strings.h>
  27. #include <inttypes.h>
  28. #include <limits.h>
  29. #include <time.h>
  30. #include <ctype.h>
  31. #include <errno.h>
  32. #include <unistd.h>
  33. #include <fcntl.h>
  34. #include <sys/stat.h>
  35. #include <sys/time.h>
  36. #include <assert.h>
  37. #include <signal.h>
  38. #include "glib-compat.h"
  39. #include "qemu/option.h"
  40. #ifdef _WIN32
  41. #include "sysemu/os-win32.h"
  42. #endif
  43. #ifdef CONFIG_POSIX
  44. #include "sysemu/os-posix.h"
  45. #endif
  46. #ifndef O_LARGEFILE
  47. #define O_LARGEFILE 0
  48. #endif
  49. #ifndef O_BINARY
  50. #define O_BINARY 0
  51. #endif
  52. #ifndef MAP_ANONYMOUS
  53. #define MAP_ANONYMOUS MAP_ANON
  54. #endif
  55. #ifndef ENOMEDIUM
  56. #define ENOMEDIUM ENODEV
  57. #endif
  58. #if !defined(ENOTSUP)
  59. #define ENOTSUP 4096
  60. #endif
  61. #if !defined(ECANCELED)
  62. #define ECANCELED 4097
  63. #endif
  64. #if !defined(EMEDIUMTYPE)
  65. #define EMEDIUMTYPE 4098
  66. #endif
  67. #ifndef TIME_MAX
  68. #define TIME_MAX LONG_MAX
  69. #endif
  70. /* HOST_LONG_BITS is the size of a native pointer in bits. */
  71. #if UINTPTR_MAX == UINT32_MAX
  72. # define HOST_LONG_BITS 32
  73. #elif UINTPTR_MAX == UINT64_MAX
  74. # define HOST_LONG_BITS 64
  75. #else
  76. # error Unknown pointer size
  77. #endif
  78. typedef int (*fprintf_function)(FILE *f, const char *fmt, ...)
  79. GCC_FMT_ATTR(2, 3);
  80. #ifdef _WIN32
  81. #define fsync _commit
  82. #if !defined(lseek)
  83. # define lseek _lseeki64
  84. #endif
  85. int qemu_ftruncate64(int, int64_t);
  86. #if !defined(ftruncate)
  87. # define ftruncate qemu_ftruncate64
  88. #endif
  89. static inline char *realpath(const char *path, char *resolved_path)
  90. {
  91. _fullpath(resolved_path, path, _MAX_PATH);
  92. return resolved_path;
  93. }
  94. #endif
  95. void cpu_ticks_init(void);
  96. /* icount */
  97. void configure_icount(QemuOpts *opts, Error **errp);
  98. extern int use_icount;
  99. extern int icount_align_option;
  100. /* drift information for info jit command */
  101. extern int64_t max_delay;
  102. extern int64_t max_advance;
  103. void dump_drift_info(FILE *f, fprintf_function cpu_fprintf);
  104. #include "qemu/osdep.h"
  105. #include "qemu/bswap.h"
  106. /* FIXME: Remove NEED_CPU_H. */
  107. #ifdef NEED_CPU_H
  108. #include "cpu.h"
  109. #endif /* !defined(NEED_CPU_H) */
  110. /* main function, renamed */
  111. #if defined(CONFIG_COCOA)
  112. int qemu_main(int argc, char **argv, char **envp);
  113. #endif
  114. void qemu_get_timedate(struct tm *tm, int offset);
  115. int qemu_timedate_diff(struct tm *tm);
  116. /**
  117. * is_help_option:
  118. * @s: string to test
  119. *
  120. * Check whether @s is one of the standard strings which indicate
  121. * that the user is asking for a list of the valid values for a
  122. * command option like -cpu or -M. The current accepted strings
  123. * are 'help' and '?'. '?' is deprecated (it is a shell wildcard
  124. * which makes it annoying to use in a reliable way) but provided
  125. * for backwards compatibility.
  126. *
  127. * Returns: true if @s is a request for a list.
  128. */
  129. static inline bool is_help_option(const char *s)
  130. {
  131. return !strcmp(s, "?") || !strcmp(s, "help");
  132. }
  133. /* cutils.c */
  134. void pstrcpy(char *buf, int buf_size, const char *str);
  135. void strpadcpy(char *buf, int buf_size, const char *str, char pad);
  136. char *pstrcat(char *buf, int buf_size, const char *s);
  137. int strstart(const char *str, const char *val, const char **ptr);
  138. int stristart(const char *str, const char *val, const char **ptr);
  139. int qemu_strnlen(const char *s, int max_len);
  140. char *qemu_strsep(char **input, const char *delim);
  141. time_t mktimegm(struct tm *tm);
  142. int qemu_fls(int i);
  143. int qemu_fdatasync(int fd);
  144. int fcntl_setfl(int fd, int flag);
  145. int qemu_parse_fd(const char *param);
  146. int parse_uint(const char *s, unsigned long long *value, char **endptr,
  147. int base);
  148. int parse_uint_full(const char *s, unsigned long long *value, int base);
  149. /*
  150. * strtosz() suffixes used to specify the default treatment of an
  151. * argument passed to strtosz() without an explicit suffix.
  152. * These should be defined using upper case characters in the range
  153. * A-Z, as strtosz() will use qemu_toupper() on the given argument
  154. * prior to comparison.
  155. */
  156. #define STRTOSZ_DEFSUFFIX_EB 'E'
  157. #define STRTOSZ_DEFSUFFIX_PB 'P'
  158. #define STRTOSZ_DEFSUFFIX_TB 'T'
  159. #define STRTOSZ_DEFSUFFIX_GB 'G'
  160. #define STRTOSZ_DEFSUFFIX_MB 'M'
  161. #define STRTOSZ_DEFSUFFIX_KB 'K'
  162. #define STRTOSZ_DEFSUFFIX_B 'B'
  163. int64_t strtosz(const char *nptr, char **end);
  164. int64_t strtosz_suffix(const char *nptr, char **end, const char default_suffix);
  165. int64_t strtosz_suffix_unit(const char *nptr, char **end,
  166. const char default_suffix, int64_t unit);
  167. /* used to print char* safely */
  168. #define STR_OR_NULL(str) ((str) ? (str) : "null")
  169. /* id.c */
  170. bool id_wellformed(const char *id);
  171. /* path.c */
  172. void init_paths(const char *prefix);
  173. const char *path(const char *pathname);
  174. #define qemu_isalnum(c) isalnum((unsigned char)(c))
  175. #define qemu_isalpha(c) isalpha((unsigned char)(c))
  176. #define qemu_iscntrl(c) iscntrl((unsigned char)(c))
  177. #define qemu_isdigit(c) isdigit((unsigned char)(c))
  178. #define qemu_isgraph(c) isgraph((unsigned char)(c))
  179. #define qemu_islower(c) islower((unsigned char)(c))
  180. #define qemu_isprint(c) isprint((unsigned char)(c))
  181. #define qemu_ispunct(c) ispunct((unsigned char)(c))
  182. #define qemu_isspace(c) isspace((unsigned char)(c))
  183. #define qemu_isupper(c) isupper((unsigned char)(c))
  184. #define qemu_isxdigit(c) isxdigit((unsigned char)(c))
  185. #define qemu_tolower(c) tolower((unsigned char)(c))
  186. #define qemu_toupper(c) toupper((unsigned char)(c))
  187. #define qemu_isascii(c) isascii((unsigned char)(c))
  188. #define qemu_toascii(c) toascii((unsigned char)(c))
  189. void *qemu_oom_check(void *ptr);
  190. ssize_t qemu_write_full(int fd, const void *buf, size_t count)
  191. QEMU_WARN_UNUSED_RESULT;
  192. ssize_t qemu_send_full(int fd, const void *buf, size_t count, int flags)
  193. QEMU_WARN_UNUSED_RESULT;
  194. ssize_t qemu_recv_full(int fd, void *buf, size_t count, int flags)
  195. QEMU_WARN_UNUSED_RESULT;
  196. #ifndef _WIN32
  197. int qemu_pipe(int pipefd[2]);
  198. /* like openpty() but also makes it raw; return master fd */
  199. int qemu_openpty_raw(int *aslave, char *pty_name);
  200. #endif
  201. #ifdef _WIN32
  202. /* MinGW needs type casts for the 'buf' and 'optval' arguments. */
  203. #define qemu_getsockopt(sockfd, level, optname, optval, optlen) \
  204. getsockopt(sockfd, level, optname, (void *)optval, optlen)
  205. #define qemu_setsockopt(sockfd, level, optname, optval, optlen) \
  206. setsockopt(sockfd, level, optname, (const void *)optval, optlen)
  207. #define qemu_recv(sockfd, buf, len, flags) recv(sockfd, (void *)buf, len, flags)
  208. #define qemu_sendto(sockfd, buf, len, flags, destaddr, addrlen) \
  209. sendto(sockfd, (const void *)buf, len, flags, destaddr, addrlen)
  210. #else
  211. #define qemu_getsockopt(sockfd, level, optname, optval, optlen) \
  212. getsockopt(sockfd, level, optname, optval, optlen)
  213. #define qemu_setsockopt(sockfd, level, optname, optval, optlen) \
  214. setsockopt(sockfd, level, optname, optval, optlen)
  215. #define qemu_recv(sockfd, buf, len, flags) recv(sockfd, buf, len, flags)
  216. #define qemu_sendto(sockfd, buf, len, flags, destaddr, addrlen) \
  217. sendto(sockfd, buf, len, flags, destaddr, addrlen)
  218. #endif
  219. /* Error handling. */
  220. void QEMU_NORETURN hw_error(const char *fmt, ...) GCC_FMT_ATTR(1, 2);
  221. struct ParallelIOArg {
  222. void *buffer;
  223. int count;
  224. };
  225. typedef int (*DMA_transfer_handler) (void *opaque, int nchan, int pos, int size);
  226. typedef uint64_t pcibus_t;
  227. typedef struct PCIHostDeviceAddress {
  228. unsigned int domain;
  229. unsigned int bus;
  230. unsigned int slot;
  231. unsigned int function;
  232. } PCIHostDeviceAddress;
  233. void tcg_exec_init(unsigned long tb_size);
  234. bool tcg_enabled(void);
  235. void cpu_exec_init_all(void);
  236. /* CPU save/load. */
  237. #ifdef CPU_SAVE_VERSION
  238. void cpu_save(QEMUFile *f, void *opaque);
  239. int cpu_load(QEMUFile *f, void *opaque, int version_id);
  240. #endif
  241. /* Unblock cpu */
  242. void qemu_cpu_kick_self(void);
  243. /* work queue */
  244. struct qemu_work_item {
  245. struct qemu_work_item *next;
  246. void (*func)(void *data);
  247. void *data;
  248. int done;
  249. bool free;
  250. };
  251. /**
  252. * Sends a (part of) iovec down a socket, yielding when the socket is full, or
  253. * Receives data into a (part of) iovec from a socket,
  254. * yielding when there is no data in the socket.
  255. * The same interface as qemu_sendv_recvv(), with added yielding.
  256. * XXX should mark these as coroutine_fn
  257. */
  258. ssize_t qemu_co_sendv_recvv(int sockfd, struct iovec *iov, unsigned iov_cnt,
  259. size_t offset, size_t bytes, bool do_send);
  260. #define qemu_co_recvv(sockfd, iov, iov_cnt, offset, bytes) \
  261. qemu_co_sendv_recvv(sockfd, iov, iov_cnt, offset, bytes, false)
  262. #define qemu_co_sendv(sockfd, iov, iov_cnt, offset, bytes) \
  263. qemu_co_sendv_recvv(sockfd, iov, iov_cnt, offset, bytes, true)
  264. /**
  265. * The same as above, but with just a single buffer
  266. */
  267. ssize_t qemu_co_send_recv(int sockfd, void *buf, size_t bytes, bool do_send);
  268. #define qemu_co_recv(sockfd, buf, bytes) \
  269. qemu_co_send_recv(sockfd, buf, bytes, false)
  270. #define qemu_co_send(sockfd, buf, bytes) \
  271. qemu_co_send_recv(sockfd, buf, bytes, true)
  272. typedef struct QEMUIOVector {
  273. struct iovec *iov;
  274. int niov;
  275. int nalloc;
  276. size_t size;
  277. } QEMUIOVector;
  278. void qemu_iovec_init(QEMUIOVector *qiov, int alloc_hint);
  279. void qemu_iovec_init_external(QEMUIOVector *qiov, struct iovec *iov, int niov);
  280. void qemu_iovec_add(QEMUIOVector *qiov, void *base, size_t len);
  281. void qemu_iovec_concat(QEMUIOVector *dst,
  282. QEMUIOVector *src, size_t soffset, size_t sbytes);
  283. size_t qemu_iovec_concat_iov(QEMUIOVector *dst,
  284. struct iovec *src_iov, unsigned int src_cnt,
  285. size_t soffset, size_t sbytes);
  286. bool qemu_iovec_is_zero(QEMUIOVector *qiov);
  287. void qemu_iovec_destroy(QEMUIOVector *qiov);
  288. void qemu_iovec_reset(QEMUIOVector *qiov);
  289. size_t qemu_iovec_to_buf(QEMUIOVector *qiov, size_t offset,
  290. void *buf, size_t bytes);
  291. size_t qemu_iovec_from_buf(QEMUIOVector *qiov, size_t offset,
  292. const void *buf, size_t bytes);
  293. size_t qemu_iovec_memset(QEMUIOVector *qiov, size_t offset,
  294. int fillc, size_t bytes);
  295. ssize_t qemu_iovec_compare(QEMUIOVector *a, QEMUIOVector *b);
  296. void qemu_iovec_clone(QEMUIOVector *dest, const QEMUIOVector *src, void *buf);
  297. void qemu_iovec_discard_back(QEMUIOVector *qiov, size_t bytes);
  298. bool buffer_is_zero(const void *buf, size_t len);
  299. void qemu_progress_init(int enabled, float min_skip);
  300. void qemu_progress_end(void);
  301. void qemu_progress_print(float delta, int max);
  302. const char *qemu_get_vm_name(void);
  303. #define QEMU_FILE_TYPE_BIOS 0
  304. #define QEMU_FILE_TYPE_KEYMAP 1
  305. char *qemu_find_file(int type, const char *name);
  306. /* OS specific functions */
  307. void os_setup_early_signal_handling(void);
  308. char *os_find_datadir(void);
  309. void os_parse_cmd_args(int index, const char *optarg);
  310. /* Convert a byte between binary and BCD. */
  311. static inline uint8_t to_bcd(uint8_t val)
  312. {
  313. return ((val / 10) << 4) | (val % 10);
  314. }
  315. static inline uint8_t from_bcd(uint8_t val)
  316. {
  317. return ((val >> 4) * 10) + (val & 0x0f);
  318. }
  319. /* compute with 96 bit intermediate result: (a*b)/c */
  320. static inline uint64_t muldiv64(uint64_t a, uint32_t b, uint32_t c)
  321. {
  322. union {
  323. uint64_t ll;
  324. struct {
  325. #ifdef HOST_WORDS_BIGENDIAN
  326. uint32_t high, low;
  327. #else
  328. uint32_t low, high;
  329. #endif
  330. } l;
  331. } u, res;
  332. uint64_t rl, rh;
  333. u.ll = a;
  334. rl = (uint64_t)u.l.low * (uint64_t)b;
  335. rh = (uint64_t)u.l.high * (uint64_t)b;
  336. rh += (rl >> 32);
  337. res.l.high = rh / c;
  338. res.l.low = (((rh % c) << 32) + (rl & 0xffffffff)) / c;
  339. return res.ll;
  340. }
  341. /* Round number down to multiple */
  342. #define QEMU_ALIGN_DOWN(n, m) ((n) / (m) * (m))
  343. /* Round number up to multiple */
  344. #define QEMU_ALIGN_UP(n, m) QEMU_ALIGN_DOWN((n) + (m) - 1, (m))
  345. static inline bool is_power_of_2(uint64_t value)
  346. {
  347. if (!value) {
  348. return 0;
  349. }
  350. return !(value & (value - 1));
  351. }
  352. /* round down to the nearest power of 2*/
  353. int64_t pow2floor(int64_t value);
  354. #include "qemu/module.h"
  355. /*
  356. * Implementation of ULEB128 (http://en.wikipedia.org/wiki/LEB128)
  357. * Input is limited to 14-bit numbers
  358. */
  359. int uleb128_encode_small(uint8_t *out, uint32_t n);
  360. int uleb128_decode_small(const uint8_t *in, uint32_t *n);
  361. /* unicode.c */
  362. int mod_utf8_codepoint(const char *s, size_t n, char **end);
  363. /*
  364. * Hexdump a buffer to a file. An optional string prefix is added to every line
  365. */
  366. void qemu_hexdump(const char *buf, FILE *fp, const char *prefix, size_t size);
  367. /* vector definitions */
  368. #ifdef __ALTIVEC__
  369. #include <altivec.h>
  370. /* The altivec.h header says we're allowed to undef these for
  371. * C++ compatibility. Here we don't care about C++, but we
  372. * undef them anyway to avoid namespace pollution.
  373. */
  374. #undef vector
  375. #undef pixel
  376. #undef bool
  377. #define VECTYPE __vector unsigned char
  378. #define SPLAT(p) vec_splat(vec_ld(0, p), 0)
  379. #define ALL_EQ(v1, v2) vec_all_eq(v1, v2)
  380. /* altivec.h may redefine the bool macro as vector type.
  381. * Reset it to POSIX semantics. */
  382. #define bool _Bool
  383. #elif defined __SSE2__
  384. #include <emmintrin.h>
  385. #define VECTYPE __m128i
  386. #define SPLAT(p) _mm_set1_epi8(*(p))
  387. #define ALL_EQ(v1, v2) (_mm_movemask_epi8(_mm_cmpeq_epi8(v1, v2)) == 0xFFFF)
  388. #else
  389. #define VECTYPE unsigned long
  390. #define SPLAT(p) (*(p) * (~0UL / 255))
  391. #define ALL_EQ(v1, v2) ((v1) == (v2))
  392. #endif
  393. #define BUFFER_FIND_NONZERO_OFFSET_UNROLL_FACTOR 8
  394. static inline bool
  395. can_use_buffer_find_nonzero_offset(const void *buf, size_t len)
  396. {
  397. return (len % (BUFFER_FIND_NONZERO_OFFSET_UNROLL_FACTOR
  398. * sizeof(VECTYPE)) == 0
  399. && ((uintptr_t) buf) % sizeof(VECTYPE) == 0);
  400. }
  401. size_t buffer_find_nonzero_offset(const void *buf, size_t len);
  402. /*
  403. * helper to parse debug environment variables
  404. */
  405. int parse_debug_env(const char *name, int max, int initial);
  406. const char *qemu_ether_ntoa(const MACAddr *mac);
  407. #endif