]> git.proxmox.com Git - mirror_qemu.git/blame - tests/libqtest.h
Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20141021' into staging
[mirror_qemu.git] / tests / libqtest.h
CommitLineData
49ee3590
AL
1/*
2 * QTest
3 *
4 * Copyright IBM, Corp. 2012
5 * Copyright Red Hat, Inc. 2012
872536bf 6 * Copyright SUSE LINUX Products GmbH 2013
49ee3590
AL
7 *
8 * Authors:
9 * Anthony Liguori <aliguori@us.ibm.com>
10 * Paolo Bonzini <pbonzini@redhat.com>
872536bf 11 * Andreas Färber <afaerber@suse.de>
49ee3590
AL
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
1d9358e6 20#include <stddef.h>
49ee3590
AL
21#include <stdint.h>
22#include <stdbool.h>
b73cf9e9 23#include <stdarg.h>
49ee3590 24#include <sys/types.h>
0c460dac 25#include "qapi/qmp/qdict.h"
89b516d8 26#include "glib-compat.h"
49ee3590
AL
27
28typedef struct QTestState QTestState;
29
30extern QTestState *global_qtest;
31
32/**
33 * qtest_init:
34 * @extra_args: other arguments to pass to QEMU.
6acf801d
AF
35 *
36 * Returns: #QTestState instance.
49ee3590
AL
37 */
38QTestState *qtest_init(const char *extra_args);
39
40/**
41 * qtest_quit:
6acf801d 42 * @s: #QTestState instance to operate on.
49ee3590
AL
43 *
44 * Shut down the QEMU process associated to @s.
45 */
46void qtest_quit(QTestState *s);
47
a3ca163c 48/**
0d1aa05e 49 * qtest_qmp_discard_response:
6acf801d 50 * @s: #QTestState instance to operate on.
a3ca163c
KW
51 * @fmt...: QMP message to send to qemu
52 *
0d1aa05e 53 * Sends a QMP message to QEMU and consumes the response.
a3ca163c 54 */
0d1aa05e 55void qtest_qmp_discard_response(QTestState *s, const char *fmt, ...);
a3ca163c 56
0c460dac
SH
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 */
64QDict *qtest_qmp(QTestState *s, const char *fmt, ...);
65
b73cf9e9 66/**
0d1aa05e 67 * qtest_qmpv_discard_response:
b73cf9e9
AF
68 * @s: #QTestState instance to operate on.
69 * @fmt: QMP message to send to QEMU
70 * @ap: QMP message arguments
71 *
0d1aa05e 72 * Sends a QMP message to QEMU and consumes the response.
b73cf9e9 73 */
0d1aa05e 74void qtest_qmpv_discard_response(QTestState *s, const char *fmt, va_list ap);
b73cf9e9 75
0c460dac
SH
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 */
84QDict *qtest_qmpv(QTestState *s, const char *fmt, va_list ap);
85
66e0c7b1
AF
86/**
87 * qtest_receive:
88 * @s: #QTestState instance to operate on.
89 *
90 * Reads a QMP message from QEMU and returns the response.
91 */
92QDict *qtest_qmp_receive(QTestState *s);
93
49ee3590
AL
94/**
95 * qtest_get_irq:
6acf801d 96 * @s: #QTestState instance to operate on.
49ee3590
AL
97 * @num: Interrupt to observe.
98 *
6acf801d 99 * Returns: The level of the @num interrupt.
49ee3590
AL
100 */
101bool qtest_get_irq(QTestState *s, int num);
102
103/**
104 * qtest_irq_intercept_in:
6acf801d 105 * @s: #QTestState instance to operate on.
49ee3590
AL
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 */
111void qtest_irq_intercept_in(QTestState *s, const char *string);
112
113/**
114 * qtest_irq_intercept_out:
6acf801d 115 * @s: #QTestState instance to operate on.
49ee3590
AL
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 */
121void qtest_irq_intercept_out(QTestState *s, const char *string);
122
123/**
124 * qtest_outb:
6acf801d 125 * @s: #QTestState instance to operate on.
49ee3590
AL
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 */
131void qtest_outb(QTestState *s, uint16_t addr, uint8_t value);
132
133/**
134 * qtest_outw:
6acf801d 135 * @s: #QTestState instance to operate on.
49ee3590
AL
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 */
141void qtest_outw(QTestState *s, uint16_t addr, uint16_t value);
142
143/**
144 * qtest_outl:
6acf801d 145 * @s: #QTestState instance to operate on.
49ee3590
AL
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 */
151void qtest_outl(QTestState *s, uint16_t addr, uint32_t value);
152
153/**
154 * qtest_inb:
6acf801d 155 * @s: #QTestState instance to operate on.
49ee3590 156 * @addr: I/O port to read from.
49ee3590
AL
157 *
158 * Returns an 8-bit value from an I/O port.
159 */
160uint8_t qtest_inb(QTestState *s, uint16_t addr);
161
162/**
163 * qtest_inw:
6acf801d 164 * @s: #QTestState instance to operate on.
49ee3590 165 * @addr: I/O port to read from.
49ee3590
AL
166 *
167 * Returns a 16-bit value from an I/O port.
168 */
169uint16_t qtest_inw(QTestState *s, uint16_t addr);
170
171/**
172 * qtest_inl:
6acf801d 173 * @s: #QTestState instance to operate on.
49ee3590 174 * @addr: I/O port to read from.
49ee3590
AL
175 *
176 * Returns a 32-bit value from an I/O port.
177 */
178uint32_t qtest_inl(QTestState *s, uint16_t addr);
179
872536bf
AF
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 */
188void 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 */
198void 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 */
208void 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 */
218void 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 */
229uint8_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 */
240uint16_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 */
251uint32_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 */
262uint64_t qtest_readq(QTestState *s, uint64_t addr);
263
49ee3590
AL
264/**
265 * qtest_memread:
6acf801d 266 * @s: #QTestState instance to operate on.
49ee3590
AL
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 */
273void qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size);
274
275/**
276 * qtest_memwrite:
6acf801d 277 * @s: #QTestState instance to operate on.
49ee3590
AL
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 */
284void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size);
285
86298845
JS
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 */
295void qtest_memset(QTestState *s, uint64_t addr, uint8_t patt, size_t size);
296
49ee3590
AL
297/**
298 * qtest_clock_step_next:
6acf801d
AF
299 * @s: #QTestState instance to operate on.
300 *
bc72ad67 301 * Advance the QEMU_CLOCK_VIRTUAL to the next deadline.
49ee3590 302 *
bc72ad67 303 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
49ee3590
AL
304 */
305int64_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 *
bc72ad67 312 * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds.
6acf801d 313 *
bc72ad67 314 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
49ee3590
AL
315 */
316int64_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 *
bc72ad67 323 * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched.
6acf801d 324 *
bc72ad67 325 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
49ee3590
AL
326 */
327int64_t qtest_clock_set(QTestState *s, int64_t val);
328
329/**
330 * qtest_get_arch:
331 *
6acf801d 332 * Returns: The architecture for the QEMU executable under test.
49ee3590
AL
333 */
334const 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
6acf801d 343 * returned by qtest_get_arch().
49ee3590
AL
344 */
345void qtest_add_func(const char *str, void (*fn));
346
347/**
348 * qtest_start:
349 * @args: other arguments to pass to QEMU
350 *
6acf801d
AF
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.
49ee3590 355 */
6acf801d
AF
356static inline QTestState *qtest_start(const char *args)
357{
96b8ca47
SH
358 global_qtest = qtest_init(args);
359 return global_qtest;
6acf801d 360}
49ee3590 361
1d9358e6
MA
362/**
363 * qtest_end:
364 *
365 * Shut down the QEMU process started by qtest_start().
366 */
367static inline void qtest_end(void)
368{
369 qtest_quit(global_qtest);
96b8ca47 370 global_qtest = NULL;
1d9358e6
MA
371}
372
0c460dac
SH
373/**
374 * qmp:
375 * @fmt...: QMP message to send to qemu
376 *
377 * Sends a QMP message to QEMU and returns the response.
378 */
0100f425 379QDict *qmp(const char *fmt, ...);
0c460dac 380
a3ca163c 381/**
0d1aa05e 382 * qmp_discard_response:
a3ca163c
KW
383 * @fmt...: QMP message to send to qemu
384 *
0d1aa05e 385 * Sends a QMP message to QEMU and consumes the response.
a3ca163c 386 */
0100f425 387void qmp_discard_response(const char *fmt, ...);
a3ca163c 388
66e0c7b1
AF
389/**
390 * qmp_receive:
391 *
392 * Reads a QMP message from QEMU and returns the response.
393 */
394static inline QDict *qmp_receive(void)
395{
396 return qtest_qmp_receive(global_qtest);
397}
398
49ee3590
AL
399/**
400 * get_irq:
401 * @num: Interrupt to observe.
402 *
6acf801d 403 * Returns: The level of the @num interrupt.
49ee3590 404 */
6acf801d
AF
405static inline bool get_irq(int num)
406{
407 return qtest_get_irq(global_qtest, num);
408}
49ee3590
AL
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 */
6acf801d
AF
417static inline void irq_intercept_in(const char *string)
418{
419 qtest_irq_intercept_in(global_qtest, string);
420}
49ee3590
AL
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 */
6acf801d
AF
429static inline void irq_intercept_out(const char *string)
430{
431 qtest_irq_intercept_out(global_qtest, string);
432}
49ee3590
AL
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 */
6acf801d
AF
441static inline void outb(uint16_t addr, uint8_t value)
442{
443 qtest_outb(global_qtest, addr, value);
444}
49ee3590
AL
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 */
6acf801d
AF
453static inline void outw(uint16_t addr, uint16_t value)
454{
455 qtest_outw(global_qtest, addr, value);
456}
49ee3590
AL
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 */
6acf801d
AF
465static inline void outl(uint16_t addr, uint32_t value)
466{
467 qtest_outl(global_qtest, addr, value);
468}
49ee3590
AL
469
470/**
471 * inb:
472 * @addr: I/O port to read from.
49ee3590 473 *
6acf801d
AF
474 * Reads an 8-bit value from an I/O port.
475 *
476 * Returns: Value read.
49ee3590 477 */
6acf801d
AF
478static inline uint8_t inb(uint16_t addr)
479{
480 return qtest_inb(global_qtest, addr);
481}
49ee3590
AL
482
483/**
484 * inw:
485 * @addr: I/O port to read from.
49ee3590 486 *
6acf801d
AF
487 * Reads a 16-bit value from an I/O port.
488 *
489 * Returns: Value read.
49ee3590 490 */
6acf801d
AF
491static inline uint16_t inw(uint16_t addr)
492{
493 return qtest_inw(global_qtest, addr);
494}
49ee3590
AL
495
496/**
497 * inl:
498 * @addr: I/O port to read from.
49ee3590 499 *
6acf801d
AF
500 * Reads a 32-bit value from an I/O port.
501 *
502 * Returns: Value read.
49ee3590 503 */
6acf801d
AF
504static inline uint32_t inl(uint16_t addr)
505{
506 return qtest_inl(global_qtest, addr);
507}
49ee3590 508
872536bf
AF
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 */
516static 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 */
528static 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 */
540static 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 */
552static 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 */
565static 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 */
578static 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 */
591static 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 */
604static inline uint64_t readq(uint64_t addr)
605{
606 return qtest_readq(global_qtest, addr);
607}
608
49ee3590
AL
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 */
6acf801d
AF
617static inline void memread(uint64_t addr, void *data, size_t size)
618{
619 qtest_memread(global_qtest, addr, data, size);
620}
49ee3590
AL
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 */
6acf801d
AF
630static inline void memwrite(uint64_t addr, const void *data, size_t size)
631{
632 qtest_memwrite(global_qtest, addr, data, size);
633}
49ee3590 634
86298845
JS
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 */
643static inline void qmemset(uint64_t addr, uint8_t patt, size_t size)
644{
645 qtest_memset(global_qtest, addr, patt, size);
646}
647
49ee3590
AL
648/**
649 * clock_step_next:
650 *
bc72ad67 651 * Advance the QEMU_CLOCK_VIRTUAL to the next deadline.
6acf801d 652 *
bc72ad67 653 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
49ee3590 654 */
6acf801d
AF
655static inline int64_t clock_step_next(void)
656{
657 return qtest_clock_step_next(global_qtest);
658}
49ee3590
AL
659
660/**
661 * clock_step:
662 * @step: Number of nanoseconds to advance the clock by.
663 *
bc72ad67 664 * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds.
6acf801d 665 *
bc72ad67 666 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
49ee3590 667 */
6acf801d
AF
668static inline int64_t clock_step(int64_t step)
669{
670 return qtest_clock_step(global_qtest, step);
671}
49ee3590
AL
672
673/**
674 * clock_set:
675 * @val: Nanoseconds value to advance the clock to.
676 *
bc72ad67 677 * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched.
6acf801d 678 *
bc72ad67 679 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
49ee3590 680 */
6acf801d
AF
681static inline int64_t clock_set(int64_t val)
682{
683 return qtest_clock_set(global_qtest, val);
684}
49ee3590 685
46e0cf76
MM
686/**
687 * qtest_big_endian:
688 *
689 * Returns: True if the architecture under test has a big endian configuration.
690 */
691bool qtest_big_endian(void);
692
49ee3590 693#endif