| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * QTest | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright IBM, Corp. 2012 | 
					
						
							|  |  |  |  * Copyright Red Hat, Inc. 2012 | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:03 +01:00
										 |  |  |  * Copyright SUSE LINUX Products GmbH 2013 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Authors: | 
					
						
							|  |  |  |  *  Anthony Liguori   <aliguori@us.ibm.com> | 
					
						
							|  |  |  |  *  Paolo Bonzini     <pbonzini@redhat.com> | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:03 +01:00
										 |  |  |  *  Andreas Färber    <afaerber@suse.de> | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * This work is licensed under the terms of the GNU GPL, version 2 or later. | 
					
						
							|  |  |  |  * See the COPYING file in the top-level directory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #ifndef LIBQTEST_H
 | 
					
						
							|  |  |  | #define LIBQTEST_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct QTestState QTestState; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | extern QTestState *global_qtest; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-18 16:20:27 +02:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:43 +02:00
										 |  |  |  * qtest_initf: | 
					
						
							| 
									
										
										
										
											2017-10-18 16:20:27 +02:00
										 |  |  |  * @fmt...: Format for creating other arguments to pass to QEMU, formatted | 
					
						
							|  |  |  |  * like sprintf(). | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:43 +02:00
										 |  |  |  * Convenience wrapper around qtest_start(). | 
					
						
							| 
									
										
										
										
											2017-10-18 16:20:27 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Returns: #QTestState instance. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:43 +02:00
										 |  |  | QTestState *qtest_initf(const char *fmt, ...) GCC_FMT_ATTR(1, 2); | 
					
						
							| 
									
										
										
										
											2017-10-18 16:20:27 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:43 +02:00
										 |  |  |  * qtest_vinitf: | 
					
						
							| 
									
										
										
										
											2017-10-18 16:20:27 +02:00
										 |  |  |  * @fmt: Format for creating other arguments to pass to QEMU, formatted | 
					
						
							|  |  |  |  * like vsprintf(). | 
					
						
							|  |  |  |  * @ap: Format arguments. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:43 +02:00
										 |  |  |  * Convenience wrapper around qtest_start(). | 
					
						
							| 
									
										
										
										
											2017-10-18 16:20:27 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Returns: #QTestState instance. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:43 +02:00
										 |  |  | QTestState *qtest_vinitf(const char *fmt, va_list ap) GCC_FMT_ATTR(1, 0); | 
					
						
							| 
									
										
										
										
											2017-10-18 16:20:27 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_init: | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:43 +02:00
										 |  |  |  * @extra_args: other arguments to pass to QEMU.  CAUTION: these | 
					
						
							|  |  |  |  * arguments are subject to word splitting and shell evaluation. | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Returns: #QTestState instance. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | QTestState *qtest_init(const char *extra_args); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-03 13:32:23 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_init_without_qmp_handshake: | 
					
						
							| 
									
										
										
										
											2018-03-26 20:36:19 -05:00
										 |  |  |  * @extra_args: other arguments to pass to QEMU.  CAUTION: these | 
					
						
							|  |  |  |  * arguments are subject to word splitting and shell evaluation. | 
					
						
							| 
									
										
										
										
											2017-03-03 13:32:23 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Returns: #QTestState instance. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-10-09 14:27:16 +08:00
										 |  |  | QTestState *qtest_init_without_qmp_handshake(const char *extra_args); | 
					
						
							| 
									
										
										
										
											2017-03-03 13:32:23 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_quit: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Shut down the QEMU process associated to @s. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_quit(QTestState *s); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 14:54:33 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_qmp: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:26 +02:00
										 |  |  |  * @fmt...: QMP message to send to qemu, formatted like | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:27 +02:00
										 |  |  |  * qobject_from_jsonf_nofail().  See parse_escape() for what's | 
					
						
							|  |  |  |  * supported after '%'. | 
					
						
							| 
									
										
										
										
											2013-10-30 14:54:33 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Sends a QMP message to QEMU and returns the response. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:42 +02:00
										 |  |  | QDict *qtest_qmp(QTestState *s, const char *fmt, ...) | 
					
						
							|  |  |  |     GCC_FMT_ATTR(2, 3); | 
					
						
							| 
									
										
										
										
											2013-10-30 14:54:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:22 +02:00
										 |  |  |  * qtest_qmp_send: | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:26 +02:00
										 |  |  |  * @fmt...: QMP message to send to qemu, formatted like | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:27 +02:00
										 |  |  |  * qobject_from_jsonf_nofail().  See parse_escape() for what's | 
					
						
							|  |  |  |  * supported after '%'. | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Sends a QMP message to QEMU and leaves the response in the stream. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:42 +02:00
										 |  |  | void qtest_qmp_send(QTestState *s, const char *fmt, ...) | 
					
						
							|  |  |  |     GCC_FMT_ATTR(2, 3); | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 18:39:33 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_qmp_send_raw: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @fmt...: text to send, formatted like sprintf() | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Sends text to the QMP monitor verbatim.  Need not be valid JSON; | 
					
						
							|  |  |  |  * this is useful for negative tests. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_qmp_send_raw(QTestState *s, const char *fmt, ...) | 
					
						
							|  |  |  |     GCC_FMT_ATTR(2, 3); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 14:54:33 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_qmpv: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:26 +02:00
										 |  |  |  * @fmt: QMP message to send to QEMU, formatted like | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:27 +02:00
										 |  |  |  * qobject_from_jsonf_nofail().  See parse_escape() for what's | 
					
						
							|  |  |  |  * supported after '%'. | 
					
						
							| 
									
										
										
										
											2013-10-30 14:54:33 +01:00
										 |  |  |  * @ap: QMP message arguments | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Sends a QMP message to QEMU and returns the response. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:44 +02:00
										 |  |  | QDict *qtest_vqmp(QTestState *s, const char *fmt, va_list ap) | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:42 +02:00
										 |  |  |     GCC_FMT_ATTR(2, 0); | 
					
						
							| 
									
										
										
										
											2013-10-30 14:54:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:22 +02:00
										 |  |  |  * qtest_qmp_vsend: | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:26 +02:00
										 |  |  |  * @fmt: QMP message to send to QEMU, formatted like | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:27 +02:00
										 |  |  |  * qobject_from_jsonf_nofail().  See parse_escape() for what's | 
					
						
							|  |  |  |  * supported after '%'. | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  |  * @ap: QMP message arguments | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Sends a QMP message to QEMU and leaves the response in the stream. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:42 +02:00
										 |  |  | void qtest_qmp_vsend(QTestState *s, const char *fmt, va_list ap) | 
					
						
							|  |  |  |     GCC_FMT_ATTR(2, 0); | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-21 20:55:30 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_receive: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads a QMP message from QEMU and returns the response. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | QDict *qtest_qmp_receive(QTestState *s); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_qmp_eventwait: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @s: #event event to wait for. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2017-08-02 20:08:33 -05:00
										 |  |  |  * Continuously polls for QMP responses until it receives the desired event. | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | void qtest_qmp_eventwait(QTestState *s, const char *event); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-14 11:15:54 -05:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_qmp_eventwait_ref: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @s: #event event to wait for. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2017-08-02 20:08:33 -05:00
										 |  |  |  * Continuously polls for QMP responses until it receives the desired event. | 
					
						
							| 
									
										
										
										
											2016-11-14 11:15:54 -05:00
										 |  |  |  * Returns a copy of the event for further investigation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | QDict *qtest_qmp_eventwait_ref(QTestState *s, const char *event); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:37 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_qmp_receive_success: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on | 
					
						
							|  |  |  |  * @event_cb: Event callback | 
					
						
							|  |  |  |  * @opaque: Argument for @event_cb | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Poll QMP messages until a command success response is received. | 
					
						
							|  |  |  |  * If @event_cb, call it for each event received, passing @opaque, | 
					
						
							|  |  |  |  * the event's name and data. | 
					
						
							|  |  |  |  * Return the success response's "return" member. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | QDict *qtest_qmp_receive_success(QTestState *s, | 
					
						
							|  |  |  |                                  void (*event_cb)(void *opaque, | 
					
						
							|  |  |  |                                                   const char *name, | 
					
						
							|  |  |  |                                                   QDict *data), | 
					
						
							|  |  |  |                                  void *opaque); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2017-03-30 09:50:05 +02:00
										 |  |  |  * qtest_hmp: | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2017-09-11 12:20:14 -05:00
										 |  |  |  * @fmt...: HMP command to send to QEMU, formats arguments like sprintf(). | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Send HMP command to QEMU via QMP's human-monitor-command. | 
					
						
							| 
									
										
										
										
											2017-03-30 09:50:05 +02:00
										 |  |  |  * QMP events are discarded. | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Returns: the command's output.  The caller should g_free() it. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-09-11 12:20:14 -05:00
										 |  |  | char *qtest_hmp(QTestState *s, const char *fmt, ...) GCC_FMT_ATTR(2, 3); | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_hmpv: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:26 +02:00
										 |  |  |  * @fmt: HMP command to send to QEMU, formats arguments like vsprintf(). | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  |  * @ap: HMP command arguments | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Send HMP command to QEMU via QMP's human-monitor-command. | 
					
						
							| 
									
										
										
										
											2017-03-30 09:50:05 +02:00
										 |  |  |  * QMP events are discarded. | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Returns: the command's output.  The caller should g_free() it. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:44 +02:00
										 |  |  | char *qtest_vhmp(QTestState *s, const char *fmt, va_list ap) | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:26 +02:00
										 |  |  |     GCC_FMT_ATTR(2, 0); | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_get_irq: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @num: Interrupt to observe. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * Returns: The level of the @num interrupt. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | bool qtest_get_irq(QTestState *s, int num); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_irq_intercept_in: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @string: QOM path of a device. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Associate qtest irqs with the GPIO-in pins of the device | 
					
						
							|  |  |  |  * whose path is specified by @string. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_irq_intercept_in(QTestState *s, const char *string); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_irq_intercept_out: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @string: QOM path of a device. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Associate qtest irqs with the GPIO-out pins of the device | 
					
						
							|  |  |  |  * whose path is specified by @string. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_irq_intercept_out(QTestState *s, const char *string); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_outb: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @addr: I/O port to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write an 8-bit value to an I/O port. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_outb(QTestState *s, uint16_t addr, uint8_t value); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_outw: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @addr: I/O port to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a 16-bit value to an I/O port. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_outw(QTestState *s, uint16_t addr, uint16_t value); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_outl: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @addr: I/O port to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a 32-bit value to an I/O port. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_outl(QTestState *s, uint16_t addr, uint32_t value); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_inb: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @addr: I/O port to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns an 8-bit value from an I/O port. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | uint8_t qtest_inb(QTestState *s, uint16_t addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_inw: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @addr: I/O port to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns a 16-bit value from an I/O port. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | uint16_t qtest_inw(QTestState *s, uint16_t addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_inl: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @addr: I/O port to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns a 32-bit value from an I/O port. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | uint32_t qtest_inl(QTestState *s, uint16_t addr); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:03 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_writeb: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Writes an 8-bit value to memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_writeb(QTestState *s, uint64_t addr, uint8_t value); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_writew: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Writes a 16-bit value to memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_writew(QTestState *s, uint64_t addr, uint16_t value); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_writel: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Writes a 32-bit value to memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_writel(QTestState *s, uint64_t addr, uint32_t value); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_writeq: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Writes a 64-bit value to memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_writeq(QTestState *s, uint64_t addr, uint64_t value); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_readb: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads an 8-bit value from memory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | uint8_t qtest_readb(QTestState *s, uint64_t addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_readw: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads a 16-bit value from memory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | uint16_t qtest_readw(QTestState *s, uint64_t addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_readl: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads a 32-bit value from memory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | uint32_t qtest_readl(QTestState *s, uint64_t addr); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_readq: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads a 64-bit value from memory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | uint64_t qtest_readq(QTestState *s, uint64_t addr); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_memread: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * @data: Pointer to where memory contents will be stored. | 
					
						
							|  |  |  |  * @size: Number of bytes to read. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Read guest memory into a buffer. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-13 14:52:45 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_rtas_call: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @name: name of the command to call. | 
					
						
							|  |  |  |  * @nargs: Number of args. | 
					
						
							|  |  |  |  * @args: Guest address to read args from. | 
					
						
							|  |  |  |  * @nret: Number of return value. | 
					
						
							|  |  |  |  * @ret: Guest address to write return values to. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Call an RTAS function | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | uint64_t qtest_rtas_call(QTestState *s, const char *name, | 
					
						
							|  |  |  |                          uint32_t nargs, uint64_t args, | 
					
						
							|  |  |  |                          uint32_t nret, uint64_t ret); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-22 14:13:44 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_bufread: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * @data: Pointer to where memory contents will be stored. | 
					
						
							|  |  |  |  * @size: Number of bytes to read. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Read guest memory into a buffer and receive using a base64 encoding. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_bufread(QTestState *s, uint64_t addr, void *data, size_t size); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_memwrite: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @data: Pointer to the bytes that will be written to guest memory. | 
					
						
							|  |  |  |  * @size: Number of bytes to write. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a buffer to guest memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-22 14:13:44 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_bufwrite: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @data: Pointer to the bytes that will be written to guest memory. | 
					
						
							|  |  |  |  * @size: Number of bytes to write. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a buffer to guest memory and transmit using a base64 encoding. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_bufwrite(QTestState *s, uint64_t addr, | 
					
						
							|  |  |  |                     const void *data, size_t size); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-04 17:11:20 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_memset: | 
					
						
							|  |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @patt: Byte pattern to fill the guest memory region with. | 
					
						
							|  |  |  |  * @size: Number of bytes to write. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a pattern to guest memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_memset(QTestState *s, uint64_t addr, uint8_t patt, size_t size); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_clock_step_next: | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * @s: #QTestState instance to operate on. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Advance the QEMU_CLOCK_VIRTUAL to the next deadline. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | int64_t qtest_clock_step_next(QTestState *s); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_clock_step: | 
					
						
							|  |  |  |  * @s: QTestState instance to operate on. | 
					
						
							|  |  |  |  * @step: Number of nanoseconds to advance the clock by. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds. | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | int64_t qtest_clock_step(QTestState *s, int64_t step); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_clock_set: | 
					
						
							|  |  |  |  * @s: QTestState instance to operate on. | 
					
						
							|  |  |  |  * @val: Nanoseconds value to advance the clock to. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched. | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | int64_t qtest_clock_set(QTestState *s, int64_t val); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-07 12:14:27 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_big_endian: | 
					
						
							|  |  |  |  * @s: QTestState instance to operate on. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: True if the architecture under test has a big endian configuration. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | bool qtest_big_endian(QTestState *s); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_get_arch: | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * Returns: The architecture for the QEMU executable under test. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | const char *qtest_get_arch(void); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_add_func: | 
					
						
							|  |  |  |  * @str: Test case path. | 
					
						
							|  |  |  |  * @fn: Test case function | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Add a GTester testcase with the given name and function. | 
					
						
							|  |  |  |  * The path is prefixed with the architecture under test, as | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * returned by qtest_get_arch(). | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2015-12-02 21:20:33 +01:00
										 |  |  | void qtest_add_func(const char *str, void (*fn)(void)); | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-24 19:33:34 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_add_data_func: | 
					
						
							|  |  |  |  * @str: Test case path. | 
					
						
							|  |  |  |  * @data: Test case data | 
					
						
							|  |  |  |  * @fn: Test case function | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Add a GTester testcase with the given name, data and function. | 
					
						
							|  |  |  |  * The path is prefixed with the architecture under test, as | 
					
						
							|  |  |  |  * returned by qtest_get_arch(). | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2015-12-02 21:20:33 +01:00
										 |  |  | void qtest_add_data_func(const char *str, const void *data, | 
					
						
							|  |  |  |                          void (*fn)(const void *)); | 
					
						
							| 
									
										
										
										
											2015-03-24 19:33:34 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-07-19 15:42:01 +04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_add_data_func_full: | 
					
						
							|  |  |  |  * @str: Test case path. | 
					
						
							|  |  |  |  * @data: Test case data | 
					
						
							|  |  |  |  * @fn: Test case function | 
					
						
							|  |  |  |  * @data_free_func: GDestroyNotify for data | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Add a GTester testcase with the given name, data and function. | 
					
						
							|  |  |  |  * The path is prefixed with the architecture under test, as | 
					
						
							|  |  |  |  * returned by qtest_get_arch(). | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @data is passed to @data_free_func() on test completion. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_add_data_func_full(const char *str, void *data, | 
					
						
							|  |  |  |                               void (*fn)(const void *), | 
					
						
							|  |  |  |                               GDestroyNotify data_free_func); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-25 16:52:45 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_add: | 
					
						
							|  |  |  |  * @testpath: Test case path | 
					
						
							|  |  |  |  * @Fixture: Fixture type | 
					
						
							|  |  |  |  * @tdata: Test case data | 
					
						
							|  |  |  |  * @fsetup: Test case setup function | 
					
						
							|  |  |  |  * @ftest: Test case function | 
					
						
							|  |  |  |  * @fteardown: Test case teardown function | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Add a GTester testcase with the given name, data and functions. | 
					
						
							|  |  |  |  * The path is prefixed with the architecture under test, as | 
					
						
							|  |  |  |  * returned by qtest_get_arch(). | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | #define qtest_add(testpath, Fixture, tdata, fsetup, ftest, fteardown) \
 | 
					
						
							|  |  |  |     do { \ | 
					
						
							|  |  |  |         char *path = g_strdup_printf("/%s/%s", qtest_get_arch(), testpath); \ | 
					
						
							|  |  |  |         g_test_add(path, Fixture, tdata, fsetup, ftest, fteardown); \ | 
					
						
							|  |  |  |         g_free(path); \ | 
					
						
							|  |  |  |     } while (0) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-12-02 21:20:33 +01:00
										 |  |  | void qtest_add_abrt_handler(GHookFunc fn, const void *data); | 
					
						
							| 
									
										
										
										
											2015-06-19 18:45:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_start: | 
					
						
							|  |  |  |  * @args: other arguments to pass to QEMU | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * Start QEMU and assign the resulting #QTestState to a global variable. | 
					
						
							|  |  |  |  * The global variable is used by "shortcut" functions documented below. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: #QTestState instance. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline QTestState *qtest_start(const char *args) | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2014-03-27 15:09:49 +01:00
										 |  |  |     global_qtest = qtest_init(args); | 
					
						
							|  |  |  |     return global_qtest; | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-06-20 08:55:29 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_end: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Shut down the QEMU process started by qtest_start(). | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline void qtest_end(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_quit(global_qtest); | 
					
						
							| 
									
										
										
										
											2014-03-27 15:09:49 +01:00
										 |  |  |     global_qtest = NULL; | 
					
						
							| 
									
										
										
										
											2013-06-20 08:55:29 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-10-30 14:54:33 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qmp: | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:26 +02:00
										 |  |  |  * @fmt...: QMP message to send to qemu, formatted like | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:27 +02:00
										 |  |  |  * qobject_from_jsonf_nofail().  See parse_escape() for what's | 
					
						
							|  |  |  |  * supported after '%'. | 
					
						
							| 
									
										
										
										
											2013-10-30 14:54:33 +01:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Sends a QMP message to QEMU and returns the response. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:42 +02:00
										 |  |  | QDict *qmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2); | 
					
						
							| 
									
										
										
										
											2013-10-30 14:54:33 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  | /**
 | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:22 +02:00
										 |  |  |  * qmp_send: | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:26 +02:00
										 |  |  |  * @fmt...: QMP message to send to qemu, formatted like | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:27 +02:00
										 |  |  |  * qobject_from_jsonf_nofail().  See parse_escape() for what's | 
					
						
							|  |  |  |  * supported after '%'. | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Sends a QMP message to QEMU and leaves the response in the stream. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:42 +02:00
										 |  |  | void qmp_send(const char *fmt, ...) GCC_FMT_ATTR(1, 2); | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-21 20:55:30 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qmp_receive: | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads a QMP message from QEMU and returns the response. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline QDict *qmp_receive(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_qmp_receive(global_qtest); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qmp_eventwait: | 
					
						
							|  |  |  |  * @s: #event event to wait for. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2017-08-02 20:08:33 -05:00
										 |  |  |  * Continuously polls for QMP responses until it receives the desired event. | 
					
						
							| 
									
										
										
										
											2015-04-28 15:27:51 -04:00
										 |  |  |  */ | 
					
						
							|  |  |  | static inline void qmp_eventwait(const char *event) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_qmp_eventwait(global_qtest, event); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-14 11:15:54 -05:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qmp_eventwait_ref: | 
					
						
							|  |  |  |  * @s: #event event to wait for. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2017-08-02 20:08:33 -05:00
										 |  |  |  * Continuously polls for QMP responses until it receives the desired event. | 
					
						
							| 
									
										
										
										
											2016-11-14 11:15:54 -05:00
										 |  |  |  * Returns a copy of the event for further investigation. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline QDict *qmp_eventwait_ref(const char *event) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_qmp_eventwait_ref(global_qtest, event); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * hmp: | 
					
						
							| 
									
										
										
										
											2017-09-11 12:20:14 -05:00
										 |  |  |  * @fmt...: HMP command to send to QEMU, formats arguments like sprintf(). | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Send HMP command to QEMU via QMP's human-monitor-command. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: the command's output.  The caller should g_free() it. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2017-09-11 12:20:14 -05:00
										 |  |  | char *hmp(const char *fmt, ...) GCC_FMT_ATTR(1, 2); | 
					
						
							| 
									
										
										
										
											2015-10-01 10:59:55 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * get_irq: | 
					
						
							|  |  |  |  * @num: Interrupt to observe. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * Returns: The level of the @num interrupt. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline bool get_irq(int num) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_get_irq(global_qtest, num); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * irq_intercept_in: | 
					
						
							|  |  |  |  * @string: QOM path of a device. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Associate qtest irqs with the GPIO-in pins of the device | 
					
						
							|  |  |  |  * whose path is specified by @string. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline void irq_intercept_in(const char *string) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_irq_intercept_in(global_qtest, string); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_irq_intercept_out: | 
					
						
							|  |  |  |  * @string: QOM path of a device. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Associate qtest irqs with the GPIO-out pins of the device | 
					
						
							|  |  |  |  * whose path is specified by @string. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline void irq_intercept_out(const char *string) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_irq_intercept_out(global_qtest, string); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * outb: | 
					
						
							|  |  |  |  * @addr: I/O port to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write an 8-bit value to an I/O port. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline void outb(uint16_t addr, uint8_t value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_outb(global_qtest, addr, value); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * outw: | 
					
						
							|  |  |  |  * @addr: I/O port to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a 16-bit value to an I/O port. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline void outw(uint16_t addr, uint16_t value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_outw(global_qtest, addr, value); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * outl: | 
					
						
							|  |  |  |  * @addr: I/O port to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a 32-bit value to an I/O port. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline void outl(uint16_t addr, uint32_t value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_outl(global_qtest, addr, value); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * inb: | 
					
						
							|  |  |  |  * @addr: I/O port to read from. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * Reads an 8-bit value from an I/O port. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline uint8_t inb(uint16_t addr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_inb(global_qtest, addr); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * inw: | 
					
						
							|  |  |  |  * @addr: I/O port to read from. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * Reads a 16-bit value from an I/O port. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline uint16_t inw(uint16_t addr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_inw(global_qtest, addr); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * inl: | 
					
						
							|  |  |  |  * @addr: I/O port to read from. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * Reads a 32-bit value from an I/O port. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline uint32_t inl(uint16_t addr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_inl(global_qtest, addr); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:03 +01:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * writeb: | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Writes an 8-bit value to guest memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline void writeb(uint64_t addr, uint8_t value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_writeb(global_qtest, addr, value); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * writew: | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Writes a 16-bit value to guest memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline void writew(uint64_t addr, uint16_t value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_writew(global_qtest, addr, value); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * writel: | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Writes a 32-bit value to guest memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline void writel(uint64_t addr, uint32_t value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_writel(global_qtest, addr, value); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * writeq: | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @value: Value being written. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Writes a 64-bit value to guest memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline void writeq(uint64_t addr, uint64_t value) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_writeq(global_qtest, addr, value); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * readb: | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads an 8-bit value from guest memory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline uint8_t readb(uint64_t addr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_readb(global_qtest, addr); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * readw: | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads a 16-bit value from guest memory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline uint16_t readw(uint64_t addr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_readw(global_qtest, addr); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * readl: | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads a 32-bit value from guest memory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline uint32_t readl(uint64_t addr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_readl(global_qtest, addr); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * readq: | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Reads a 64-bit value from guest memory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: Value read. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline uint64_t readq(uint64_t addr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_readq(global_qtest, addr); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * memread: | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * @data: Pointer to where memory contents will be stored. | 
					
						
							|  |  |  |  * @size: Number of bytes to read. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Read guest memory into a buffer. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline void memread(uint64_t addr, void *data, size_t size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_memread(global_qtest, addr, data, size); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-22 14:13:44 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * bufread: | 
					
						
							|  |  |  |  * @addr: Guest address to read from. | 
					
						
							|  |  |  |  * @data: Pointer to where memory contents will be stored. | 
					
						
							|  |  |  |  * @size: Number of bytes to read. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Read guest memory into a buffer, receive using a base64 encoding. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline void bufread(uint64_t addr, void *data, size_t size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_bufread(global_qtest, addr, data, size); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * memwrite: | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @data: Pointer to the bytes that will be written to guest memory. | 
					
						
							|  |  |  |  * @size: Number of bytes to write. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a buffer to guest memory. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline void memwrite(uint64_t addr, const void *data, size_t size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_memwrite(global_qtest, addr, data, size); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-22 14:13:44 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * bufwrite: | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @data: Pointer to the bytes that will be written to guest memory. | 
					
						
							|  |  |  |  * @size: Number of bytes to write. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a buffer to guest memory, transmit using a base64 encoding. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline void bufwrite(uint64_t addr, const void *data, size_t size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_bufwrite(global_qtest, addr, data, size); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-08-04 17:11:20 -04:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qmemset: | 
					
						
							|  |  |  |  * @addr: Guest address to write to. | 
					
						
							|  |  |  |  * @patt: Byte pattern to fill the guest memory region with. | 
					
						
							|  |  |  |  * @size: Number of bytes to write. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Write a pattern to guest memory. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | static inline void qmemset(uint64_t addr, uint8_t patt, size_t size) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     qtest_memset(global_qtest, addr, patt, size); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * clock_step_next: | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Advance the QEMU_CLOCK_VIRTUAL to the next deadline. | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline int64_t clock_step_next(void) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_clock_step_next(global_qtest); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * clock_step: | 
					
						
							|  |  |  |  * @step: Number of nanoseconds to advance the clock by. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds. | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline int64_t clock_step(int64_t step) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_clock_step(global_qtest, step); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * clock_set: | 
					
						
							|  |  |  |  * @val: Nanoseconds value to advance the clock to. | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Advance the QEMU_CLOCK_VIRTUAL to @val nanoseconds since the VM was launched. | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2013-08-21 16:03:08 +01:00
										 |  |  |  * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds. | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-02-16 22:44:01 +01:00
										 |  |  | static inline int64_t clock_set(int64_t val) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     return qtest_clock_set(global_qtest, val); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-10-02 14:58:16 +02:00
										 |  |  | QDict *qmp_fd_receive(int fd); | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:42 +02:00
										 |  |  | void qmp_fd_vsend(int fd, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0); | 
					
						
							|  |  |  | void qmp_fd_send(int fd, const char *fmt, ...) GCC_FMT_ATTR(2, 3); | 
					
						
							| 
									
										
										
										
											2018-08-23 18:39:34 +02:00
										 |  |  | void qmp_fd_send_raw(int fd, const char *fmt, ...) GCC_FMT_ATTR(2, 3); | 
					
						
							|  |  |  | void qmp_fd_vsend_raw(int fd, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0); | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:42 +02:00
										 |  |  | QDict *qmp_fdv(int fd, const char *fmt, va_list ap) GCC_FMT_ATTR(2, 0); | 
					
						
							|  |  |  | QDict *qmp_fd(int fd, const char *fmt, ...) GCC_FMT_ATTR(2, 3); | 
					
						
							| 
									
										
										
										
											2015-10-02 14:58:16 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-30 09:50:06 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_cb_for_every_machine: | 
					
						
							|  |  |  |  * @cb: Pointer to the callback function | 
					
						
							| 
									
										
										
										
											2018-08-16 13:35:55 +02:00
										 |  |  |  * @skip_old_versioned: true if versioned old machine types should be skipped | 
					
						
							| 
									
										
										
										
											2017-03-30 09:50:06 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  *  Call a callback function for every name of all available machines. | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2018-08-16 13:35:55 +02:00
										 |  |  | void qtest_cb_for_every_machine(void (*cb)(const char *machine), | 
					
						
							|  |  |  |                                 bool skip_old_versioned); | 
					
						
							| 
									
										
										
										
											2017-03-30 09:50:06 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-15 08:58:54 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_qmp_device_add: | 
					
						
							|  |  |  |  * @driver: Name of the device that should be added | 
					
						
							|  |  |  |  * @id: Identification string | 
					
						
							| 
									
										
										
										
											2018-08-06 08:53:35 +02:00
										 |  |  |  * @fmt...: QMP message to send to qemu, formatted like | 
					
						
							|  |  |  |  * qobject_from_jsonf_nofail().  See parse_escape() for what's | 
					
						
							|  |  |  |  * supported after '%'. | 
					
						
							| 
									
										
										
										
											2017-08-15 08:58:54 +02:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Generic hot-plugging test via the device_add QMP command. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_qmp_device_add(const char *driver, const char *id, const char *fmt, | 
					
						
							|  |  |  |                           ...) GCC_FMT_ATTR(3, 4); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_qmp_device_del: | 
					
						
							|  |  |  |  * @id: Identification string | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Generic hot-unplugging test via the device_del QMP command. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qtest_qmp_device_del(const char *id); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-05-17 13:30:07 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qmp_rsp_is_err: | 
					
						
							|  |  |  |  * @rsp: QMP response to check for error | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Test @rsp for error and discard @rsp. | 
					
						
							|  |  |  |  * Returns 'true' if there is error in @rsp and 'false' otherwise. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | bool qmp_rsp_is_err(QDict *rsp); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-30 17:58:07 +02:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qmp_assert_error_class: | 
					
						
							|  |  |  |  * @rsp: QMP response to check for error | 
					
						
							|  |  |  |  * @class: an error class | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Assert the response has the given error class and discard @rsp. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | void qmp_assert_error_class(QDict *rsp, const char *class); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-16 19:58:16 -08:00
										 |  |  | /**
 | 
					
						
							|  |  |  |  * qtest_probe_child: | 
					
						
							|  |  |  |  * @s: QTestState instance to operate on. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Returns: true if the child is still alive. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | bool qtest_probe_child(QTestState *s); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2012-03-28 15:42:05 +02:00
										 |  |  | #endif
 |