]> git.proxmox.com Git - mirror_qemu.git/blob - tests/libqtest.h
valgrind/i386: avoid false positives on KVM_SET_CLOCK ioctl
[mirror_qemu.git] / tests / libqtest.h
1 /*
2 * QTest
3 *
4 * Copyright IBM, Corp. 2012
5 * Copyright Red Hat, Inc. 2012
6 * Copyright SUSE LINUX Products GmbH 2013
7 *
8 * Authors:
9 * Anthony Liguori <aliguori@us.ibm.com>
10 * Paolo Bonzini <pbonzini@redhat.com>
11 * Andreas Färber <afaerber@suse.de>
12 *
13 * This work is licensed under the terms of the GNU GPL, version 2 or later.
14 * See the COPYING file in the top-level directory.
15 *
16 */
17 #ifndef LIBQTEST_H
18 #define LIBQTEST_H
19
20 #include <stddef.h>
21 #include <stdint.h>
22 #include <stdbool.h>
23 #include <stdarg.h>
24 #include <sys/types.h>
25 #include "qapi/qmp/qdict.h"
26 #include "glib-compat.h"
27
28 typedef struct QTestState QTestState;
29
30 extern QTestState *global_qtest;
31
32 /**
33 * qtest_init:
34 * @extra_args: other arguments to pass to QEMU.
35 *
36 * Returns: #QTestState instance.
37 */
38 QTestState *qtest_init(const char *extra_args);
39
40 /**
41 * qtest_quit:
42 * @s: #QTestState instance to operate on.
43 *
44 * Shut down the QEMU process associated to @s.
45 */
46 void qtest_quit(QTestState *s);
47
48 /**
49 * qtest_qmp_discard_response:
50 * @s: #QTestState instance to operate on.
51 * @fmt...: QMP message to send to qemu
52 *
53 * Sends a QMP message to QEMU and consumes the response.
54 */
55 void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...);
56
57 /**
58 * qtest_qmp:
59 * @s: #QTestState instance to operate on.
60 * @fmt...: QMP message to send to qemu
61 *
62 * Sends a QMP message to QEMU and returns the response.
63 */
64 QDict *qtest_qmp(QTestState *s, const char *fmt, ...);
65
66 /**
67 * qtest_qmpv_discard_response:
68 * @s: #QTestState instance to operate on.
69 * @fmt: QMP message to send to QEMU
70 * @ap: QMP message arguments
71 *
72 * Sends a QMP message to QEMU and consumes the response.
73 */
74 void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap);
75
76 /**
77 * qtest_qmpv:
78 * @s: #QTestState instance to operate on.
79 * @fmt: QMP message to send to QEMU
80 * @ap: QMP message arguments
81 *
82 * Sends a QMP message to QEMU and returns the response.
83 */
84 QDict *qtest_qmpv(QTestState *s, const char *fmt, va_list ap);
85
86 /**
87 * qtest_receive:
88 * @s: #QTestState instance to operate on.
89 *
90 * Reads a QMP message from QEMU and returns the response.
91 */
92 QDict *qtest_qmp_receive(QTestState *s);
93
94 /**
95 * qtest_get_irq:
96 * @s: #QTestState instance to operate on.
97 * @num: Interrupt to observe.
98 *
99 * Returns: The level of the @num interrupt.
100 */
101 bool qtest_get_irq(QTestState *s, int num);
102
103 /**
104 * qtest_irq_intercept_in:
105 * @s: #QTestState instance to operate on.
106 * @string: QOM path of a device.
107 *
108 * Associate qtest irqs with the GPIO-in pins of the device
109 * whose path is specified by @string.
110 */
111 void qtest_irq_intercept_in(QTestState *s, const char *string);
112
113 /**
114 * qtest_irq_intercept_out:
115 * @s: #QTestState instance to operate on.
116 * @string: QOM path of a device.
117 *
118 * Associate qtest irqs with the GPIO-out pins of the device
119 * whose path is specified by @string.
120 */
121 void qtest_irq_intercept_out(QTestState *s, const char *string);
122
123 /**
124 * qtest_outb:
125 * @s: #QTestState instance to operate on.
126 * @addr: I/O port to write to.
127 * @value: Value being written.
128 *
129 * Write an 8-bit value to an I/O port.
130 */
131 void qtest_outb(QTestState *s, uint16_t addr, uint8_t value);
132
133 /**
134 * qtest_outw:
135 * @s: #QTestState instance to operate on.
136 * @addr: I/O port to write to.
137 * @value: Value being written.
138 *
139 * Write a 16-bit value to an I/O port.
140 */
141 void qtest_outw(QTestState *s, uint16_t addr, uint16_t value);
142
143 /**
144 * qtest_outl:
145 * @s: #QTestState instance to operate on.
146 * @addr: I/O port to write to.
147 * @value: Value being written.
148 *
149 * Write a 32-bit value to an I/O port.
150 */
151 void qtest_outl(QTestState *s, uint16_t addr, uint32_t value);
152
153 /**
154 * qtest_inb:
155 * @s: #QTestState instance to operate on.
156 * @addr: I/O port to read from.
157 *
158 * Returns an 8-bit value from an I/O port.
159 */
160 uint8_t qtest_inb(QTestState *s, uint16_t addr);
161
162 /**
163 * qtest_inw:
164 * @s: #QTestState instance to operate on.
165 * @addr: I/O port to read from.
166 *
167 * Returns a 16-bit value from an I/O port.
168 */
169 uint16_t qtest_inw(QTestState *s, uint16_t addr);
170
171 /**
172 * qtest_inl:
173 * @s: #QTestState instance to operate on.
174 * @addr: I/O port to read from.
175 *
176 * Returns a 32-bit value from an I/O port.
177 */
178 uint32_t qtest_inl(QTestState *s, uint16_t addr);
179
180 /**
181 * qtest_writeb:
182 * @s: #QTestState instance to operate on.
183 * @addr: Guest address to write to.
184 * @value: Value being written.
185 *
186 * Writes an 8-bit value to memory.
187 */
188 void qtest_writeb(QTestState *s, uint64_t addr, uint8_t value);
189
190 /**
191 * qtest_writew:
192 * @s: #QTestState instance to operate on.
193 * @addr: Guest address to write to.
194 * @value: Value being written.
195 *
196 * Writes a 16-bit value to memory.
197 */
198 void qtest_writew(QTestState *s, uint64_t addr, uint16_t value);
199
200 /**
201 * qtest_writel:
202 * @s: #QTestState instance to operate on.
203 * @addr: Guest address to write to.
204 * @value: Value being written.
205 *
206 * Writes a 32-bit value to memory.
207 */
208 void qtest_writel(QTestState *s, uint64_t addr, uint32_t value);
209
210 /**
211 * qtest_writeq:
212 * @s: #QTestState instance to operate on.
213 * @addr: Guest address to write to.
214 * @value: Value being written.
215 *
216 * Writes a 64-bit value to memory.
217 */
218 void qtest_writeq(QTestState *s, uint64_t addr, uint64_t value);
219
220 /**
221 * qtest_readb:
222 * @s: #QTestState instance to operate on.
223 * @addr: Guest address to read from.
224 *
225 * Reads an 8-bit value from memory.
226 *
227 * Returns: Value read.
228 */
229 uint8_t qtest_readb(QTestState *s, uint64_t addr);
230
231 /**
232 * qtest_readw:
233 * @s: #QTestState instance to operate on.
234 * @addr: Guest address to read from.
235 *
236 * Reads a 16-bit value from memory.
237 *
238 * Returns: Value read.
239 */
240 uint16_t qtest_readw(QTestState *s, uint64_t addr);
241
242 /**
243 * qtest_readl:
244 * @s: #QTestState instance to operate on.
245 * @addr: Guest address to read from.
246 *
247 * Reads a 32-bit value from memory.
248 *
249 * Returns: Value read.
250 */
251 uint32_t qtest_readl(QTestState *s, uint64_t addr);
252
253 /**
254 * qtest_readq:
255 * @s: #QTestState instance to operate on.
256 * @addr: Guest address to read from.
257 *
258 * Reads a 64-bit value from memory.
259 *
260 * Returns: Value read.
261 */
262 uint64_t qtest_readq(QTestState *s, uint64_t addr);
263
264 /**
265 * qtest_memread:
266 * @s: #QTestState instance to operate on.
267 * @addr: Guest address to read from.
268 * @data: Pointer to where memory contents will be stored.
269 * @size: Number of bytes to read.
270 *
271 * Read guest memory into a buffer.
272 */
273 void qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size);
274
275 /**
276 * qtest_memwrite:
277 * @s: #QTestState instance to operate on.
278 * @addr: Guest address to write to.
279 * @data: Pointer to the bytes that will be written to guest memory.
280 * @size: Number of bytes to write.
281 *
282 * Write a buffer to guest memory.
283 */
284 void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size);
285
286 /**
287 * qtest_memset:
288 * @s: #QTestState instance to operate on.
289 * @addr: Guest address to write to.
290 * @patt: Byte pattern to fill the guest memory region with.
291 * @size: Number of bytes to write.
292 *
293 * Write a pattern to guest memory.
294 */
295 void qtest_memset(QTestState *s, uint64_t addr, uint8_t patt, size_t size);
296
297 /**
298 * qtest_clock_step_next:
299 * @s: #QTestState instance to operate on.
300 *
301 * Advance the QEMU_CLOCK_VIRTUAL to the next deadline.
302 *
303 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
304 */
305 int64_t qtest_clock_step_next(QTestState *s);
306
307 /**
308 * qtest_clock_step:
309 * @s: QTestState instance to operate on.
310 * @step: Number of nanoseconds to advance the clock by.
311 *
312 * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds.
313 *
314 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
315 */
316 int64_t qtest_clock_step(QTestState *s, int64_t step);
317
318 /**
319 * qtest_clock_set:
320 * @s: QTestState instance to operate on.
321 * @val: Nanoseconds value to advance the clock to.
322 *
323 * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched.
324 *
325 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
326 */
327 int64_t qtest_clock_set(QTestState *s, int64_t val);
328
329 /**
330 * qtest_get_arch:
331 *
332 * Returns: The architecture for the QEMU executable under test.
333 */
334 const char *qtest_get_arch(void);
335
336 /**
337 * qtest_add_func:
338 * @str: Test case path.
339 * @fn: Test case function
340 *
341 * Add a GTester testcase with the given name and function.
342 * The path is prefixed with the architecture under test, as
343 * returned by qtest_get_arch().
344 */
345 void qtest_add_func(const char *str, void (*fn));
346
347 /**
348 * qtest_start:
349 * @args: other arguments to pass to QEMU
350 *
351 * Start QEMU and assign the resulting #QTestState to a global variable.
352 * The global variable is used by "shortcut" functions documented below.
353 *
354 * Returns: #QTestState instance.
355 */
356 static inline QTestState *qtest_start(const char *args)
357 {
358 global_qtest = qtest_init(args);
359 return global_qtest;
360 }
361
362 /**
363 * qtest_end:
364 *
365 * Shut down the QEMU process started by qtest_start().
366 */
367 static inline void qtest_end(void)
368 {
369 qtest_quit(global_qtest);
370 global_qtest = NULL;
371 }
372
373 /**
374 * qmp:
375 * @fmt...: QMP message to send to qemu
376 *
377 * Sends a QMP message to QEMU and returns the response.
378 */
379 QDict *qmp(const char *fmt, ...);
380
381 /**
382 * qmp_discard_response:
383 * @fmt...: QMP message to send to qemu
384 *
385 * Sends a QMP message to QEMU and consumes the response.
386 */
387 void qmp_discard_response(const char *fmt, ...);
388
389 /**
390 * qmp_receive:
391 *
392 * Reads a QMP message from QEMU and returns the response.
393 */
394 static inline QDict *qmp_receive(void)
395 {
396 return qtest_qmp_receive(global_qtest);
397 }
398
399 /**
400 * get_irq:
401 * @num: Interrupt to observe.
402 *
403 * Returns: The level of the @num interrupt.
404 */
405 static inline bool get_irq(int num)
406 {
407 return qtest_get_irq(global_qtest, num);
408 }
409
410 /**
411 * irq_intercept_in:
412 * @string: QOM path of a device.
413 *
414 * Associate qtest irqs with the GPIO-in pins of the device
415 * whose path is specified by @string.
416 */
417 static inline void irq_intercept_in(const char *string)
418 {
419 qtest_irq_intercept_in(global_qtest, string);
420 }
421
422 /**
423 * qtest_irq_intercept_out:
424 * @string: QOM path of a device.
425 *
426 * Associate qtest irqs with the GPIO-out pins of the device
427 * whose path is specified by @string.
428 */
429 static inline void irq_intercept_out(const char *string)
430 {
431 qtest_irq_intercept_out(global_qtest, string);
432 }
433
434 /**
435 * outb:
436 * @addr: I/O port to write to.
437 * @value: Value being written.
438 *
439 * Write an 8-bit value to an I/O port.
440 */
441 static inline void outb(uint16_t addr, uint8_t value)
442 {
443 qtest_outb(global_qtest, addr, value);
444 }
445
446 /**
447 * outw:
448 * @addr: I/O port to write to.
449 * @value: Value being written.
450 *
451 * Write a 16-bit value to an I/O port.
452 */
453 static inline void outw(uint16_t addr, uint16_t value)
454 {
455 qtest_outw(global_qtest, addr, value);
456 }
457
458 /**
459 * outl:
460 * @addr: I/O port to write to.
461 * @value: Value being written.
462 *
463 * Write a 32-bit value to an I/O port.
464 */
465 static inline void outl(uint16_t addr, uint32_t value)
466 {
467 qtest_outl(global_qtest, addr, value);
468 }
469
470 /**
471 * inb:
472 * @addr: I/O port to read from.
473 *
474 * Reads an 8-bit value from an I/O port.
475 *
476 * Returns: Value read.
477 */
478 static inline uint8_t inb(uint16_t addr)
479 {
480 return qtest_inb(global_qtest, addr);
481 }
482
483 /**
484 * inw:
485 * @addr: I/O port to read from.
486 *
487 * Reads a 16-bit value from an I/O port.
488 *
489 * Returns: Value read.
490 */
491 static inline uint16_t inw(uint16_t addr)
492 {
493 return qtest_inw(global_qtest, addr);
494 }
495
496 /**
497 * inl:
498 * @addr: I/O port to read from.
499 *
500 * Reads a 32-bit value from an I/O port.
501 *
502 * Returns: Value read.
503 */
504 static inline uint32_t inl(uint16_t addr)
505 {
506 return qtest_inl(global_qtest, addr);
507 }
508
509 /**
510 * writeb:
511 * @addr: Guest address to write to.
512 * @value: Value being written.
513 *
514 * Writes an 8-bit value to guest memory.
515 */
516 static inline void writeb(uint64_t addr, uint8_t value)
517 {
518 qtest_writeb(global_qtest, addr, value);
519 }
520
521 /**
522 * writew:
523 * @addr: Guest address to write to.
524 * @value: Value being written.
525 *
526 * Writes a 16-bit value to guest memory.
527 */
528 static inline void writew(uint64_t addr, uint16_t value)
529 {
530 qtest_writew(global_qtest, addr, value);
531 }
532
533 /**
534 * writel:
535 * @addr: Guest address to write to.
536 * @value: Value being written.
537 *
538 * Writes a 32-bit value to guest memory.
539 */
540 static inline void writel(uint64_t addr, uint32_t value)
541 {
542 qtest_writel(global_qtest, addr, value);
543 }
544
545 /**
546 * writeq:
547 * @addr: Guest address to write to.
548 * @value: Value being written.
549 *
550 * Writes a 64-bit value to guest memory.
551 */
552 static inline void writeq(uint64_t addr, uint64_t value)
553 {
554 qtest_writeq(global_qtest, addr, value);
555 }
556
557 /**
558 * readb:
559 * @addr: Guest address to read from.
560 *
561 * Reads an 8-bit value from guest memory.
562 *
563 * Returns: Value read.
564 */
565 static inline uint8_t readb(uint64_t addr)
566 {
567 return qtest_readb(global_qtest, addr);
568 }
569
570 /**
571 * readw:
572 * @addr: Guest address to read from.
573 *
574 * Reads a 16-bit value from guest memory.
575 *
576 * Returns: Value read.
577 */
578 static inline uint16_t readw(uint64_t addr)
579 {
580 return qtest_readw(global_qtest, addr);
581 }
582
583 /**
584 * readl:
585 * @addr: Guest address to read from.
586 *
587 * Reads a 32-bit value from guest memory.
588 *
589 * Returns: Value read.
590 */
591 static inline uint32_t readl(uint64_t addr)
592 {
593 return qtest_readl(global_qtest, addr);
594 }
595
596 /**
597 * readq:
598 * @addr: Guest address to read from.
599 *
600 * Reads a 64-bit value from guest memory.
601 *
602 * Returns: Value read.
603 */
604 static inline uint64_t readq(uint64_t addr)
605 {
606 return qtest_readq(global_qtest, addr);
607 }
608
609 /**
610 * memread:
611 * @addr: Guest address to read from.
612 * @data: Pointer to where memory contents will be stored.
613 * @size: Number of bytes to read.
614 *
615 * Read guest memory into a buffer.
616 */
617 static inline void memread(uint64_t addr, void *data, size_t size)
618 {
619 qtest_memread(global_qtest, addr, data, size);
620 }
621
622 /**
623 * memwrite:
624 * @addr: Guest address to write to.
625 * @data: Pointer to the bytes that will be written to guest memory.
626 * @size: Number of bytes to write.
627 *
628 * Write a buffer to guest memory.
629 */
630 static inline void memwrite(uint64_t addr, const void *data, size_t size)
631 {
632 qtest_memwrite(global_qtest, addr, data, size);
633 }
634
635 /**
636 * qmemset:
637 * @addr: Guest address to write to.
638 * @patt: Byte pattern to fill the guest memory region with.
639 * @size: Number of bytes to write.
640 *
641 * Write a pattern to guest memory.
642 */
643 static inline void qmemset(uint64_t addr, uint8_t patt, size_t size)
644 {
645 qtest_memset(global_qtest, addr, patt, size);
646 }
647
648 /**
649 * clock_step_next:
650 *
651 * Advance the QEMU_CLOCK_VIRTUAL to the next deadline.
652 *
653 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
654 */
655 static inline int64_t clock_step_next(void)
656 {
657 return qtest_clock_step_next(global_qtest);
658 }
659
660 /**
661 * clock_step:
662 * @step: Number of nanoseconds to advance the clock by.
663 *
664 * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds.
665 *
666 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
667 */
668 static inline int64_t clock_step(int64_t step)
669 {
670 return qtest_clock_step(global_qtest, step);
671 }
672
673 /**
674 * clock_set:
675 * @val: Nanoseconds value to advance the clock to.
676 *
677 * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched.
678 *
679 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
680 */
681 static inline int64_t clock_set(int64_t val)
682 {
683 return qtest_clock_set(global_qtest, val);
684 }
685
686 /**
687 * qtest_big_endian:
688 *
689 * Returns: True if the architecture under test has a big endian configuration.
690 */
691 bool qtest_big_endian(void);
692
693 #endif