Statistics
| Branch: | Revision:

root / tests / libqtest.h @ 94befa45

History | View | Annotate | Download (8.3 kB)

1 49ee3590 Anthony Liguori
/*
2 49ee3590 Anthony Liguori
 * QTest
3 49ee3590 Anthony Liguori
 *
4 49ee3590 Anthony Liguori
 * Copyright IBM, Corp. 2012
5 49ee3590 Anthony Liguori
 * Copyright Red Hat, Inc. 2012
6 49ee3590 Anthony Liguori
 *
7 49ee3590 Anthony Liguori
 * Authors:
8 49ee3590 Anthony Liguori
 *  Anthony Liguori   <aliguori@us.ibm.com>
9 49ee3590 Anthony Liguori
 *  Paolo Bonzini     <pbonzini@redhat.com>
10 49ee3590 Anthony Liguori
 *
11 49ee3590 Anthony Liguori
 * This work is licensed under the terms of the GNU GPL, version 2 or later.
12 49ee3590 Anthony Liguori
 * See the COPYING file in the top-level directory.
13 49ee3590 Anthony Liguori
 *
14 49ee3590 Anthony Liguori
 */
15 49ee3590 Anthony Liguori
#ifndef LIBQTEST_H
16 49ee3590 Anthony Liguori
#define LIBQTEST_H
17 49ee3590 Anthony Liguori
18 49ee3590 Anthony Liguori
#include <stdint.h>
19 49ee3590 Anthony Liguori
#include <stdbool.h>
20 49ee3590 Anthony Liguori
#include <sys/types.h>
21 49ee3590 Anthony Liguori
22 49ee3590 Anthony Liguori
typedef struct QTestState QTestState;
23 49ee3590 Anthony Liguori
24 49ee3590 Anthony Liguori
extern QTestState *global_qtest;
25 49ee3590 Anthony Liguori
26 49ee3590 Anthony Liguori
/**
27 49ee3590 Anthony Liguori
 * qtest_init:
28 49ee3590 Anthony Liguori
 * @extra_args: other arguments to pass to QEMU.
29 49ee3590 Anthony Liguori
 */
30 49ee3590 Anthony Liguori
QTestState *qtest_init(const char *extra_args);
31 49ee3590 Anthony Liguori
32 49ee3590 Anthony Liguori
/**
33 49ee3590 Anthony Liguori
 * qtest_quit:
34 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
35 49ee3590 Anthony Liguori
 *
36 49ee3590 Anthony Liguori
 * Shut down the QEMU process associated to @s.
37 49ee3590 Anthony Liguori
 */
38 49ee3590 Anthony Liguori
void qtest_quit(QTestState *s);
39 49ee3590 Anthony Liguori
40 49ee3590 Anthony Liguori
/**
41 a3ca163c Kevin Wolf
 * qtest_qmp:
42 a3ca163c Kevin Wolf
 * @s: QTestState instance to operate on.
43 a3ca163c Kevin Wolf
 * @fmt...: QMP message to send to qemu
44 a3ca163c Kevin Wolf
 *
45 a3ca163c Kevin Wolf
 * Sends a QMP message to QEMU
46 a3ca163c Kevin Wolf
 */
47 a3ca163c Kevin Wolf
void qtest_qmp(QTestState *s, const char *fmt, ...);
48 a3ca163c Kevin Wolf
49 a3ca163c Kevin Wolf
/**
50 49ee3590 Anthony Liguori
 * qtest_get_irq:
51 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
52 49ee3590 Anthony Liguori
 * @num: Interrupt to observe.
53 49ee3590 Anthony Liguori
 *
54 49ee3590 Anthony Liguori
 * Return the level of the @num interrupt.
55 49ee3590 Anthony Liguori
 */
56 49ee3590 Anthony Liguori
bool qtest_get_irq(QTestState *s, int num);
57 49ee3590 Anthony Liguori
58 49ee3590 Anthony Liguori
/**
59 49ee3590 Anthony Liguori
 * qtest_irq_intercept_in:
60 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
61 49ee3590 Anthony Liguori
 * @string: QOM path of a device.
62 49ee3590 Anthony Liguori
 *
63 49ee3590 Anthony Liguori
 * Associate qtest irqs with the GPIO-in pins of the device
64 49ee3590 Anthony Liguori
 * whose path is specified by @string.
65 49ee3590 Anthony Liguori
 */
66 49ee3590 Anthony Liguori
void qtest_irq_intercept_in(QTestState *s, const char *string);
67 49ee3590 Anthony Liguori
68 49ee3590 Anthony Liguori
/**
69 49ee3590 Anthony Liguori
 * qtest_irq_intercept_out:
70 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
71 49ee3590 Anthony Liguori
 * @string: QOM path of a device.
72 49ee3590 Anthony Liguori
 *
73 49ee3590 Anthony Liguori
 * Associate qtest irqs with the GPIO-out pins of the device
74 49ee3590 Anthony Liguori
 * whose path is specified by @string.
75 49ee3590 Anthony Liguori
 */
76 49ee3590 Anthony Liguori
void qtest_irq_intercept_out(QTestState *s, const char *string);
77 49ee3590 Anthony Liguori
78 49ee3590 Anthony Liguori
/**
79 49ee3590 Anthony Liguori
 * qtest_outb:
80 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
81 49ee3590 Anthony Liguori
 * @addr: I/O port to write to.
82 49ee3590 Anthony Liguori
 * @value: Value being written.
83 49ee3590 Anthony Liguori
 *
84 49ee3590 Anthony Liguori
 * Write an 8-bit value to an I/O port.
85 49ee3590 Anthony Liguori
 */
86 49ee3590 Anthony Liguori
void qtest_outb(QTestState *s, uint16_t addr, uint8_t value);
87 49ee3590 Anthony Liguori
88 49ee3590 Anthony Liguori
/**
89 49ee3590 Anthony Liguori
 * qtest_outw:
90 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
91 49ee3590 Anthony Liguori
 * @addr: I/O port to write to.
92 49ee3590 Anthony Liguori
 * @value: Value being written.
93 49ee3590 Anthony Liguori
 *
94 49ee3590 Anthony Liguori
 * Write a 16-bit value to an I/O port.
95 49ee3590 Anthony Liguori
 */
96 49ee3590 Anthony Liguori
void qtest_outw(QTestState *s, uint16_t addr, uint16_t value);
97 49ee3590 Anthony Liguori
98 49ee3590 Anthony Liguori
/**
99 49ee3590 Anthony Liguori
 * qtest_outl:
100 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
101 49ee3590 Anthony Liguori
 * @addr: I/O port to write to.
102 49ee3590 Anthony Liguori
 * @value: Value being written.
103 49ee3590 Anthony Liguori
 *
104 49ee3590 Anthony Liguori
 * Write a 32-bit value to an I/O port.
105 49ee3590 Anthony Liguori
 */
106 49ee3590 Anthony Liguori
void qtest_outl(QTestState *s, uint16_t addr, uint32_t value);
107 49ee3590 Anthony Liguori
108 49ee3590 Anthony Liguori
/**
109 49ee3590 Anthony Liguori
 * qtest_inb:
110 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
111 49ee3590 Anthony Liguori
 * @addr: I/O port to read from.
112 49ee3590 Anthony Liguori
 * @value: Value being written.
113 49ee3590 Anthony Liguori
 *
114 49ee3590 Anthony Liguori
 * Returns an 8-bit value from an I/O port.
115 49ee3590 Anthony Liguori
 */
116 49ee3590 Anthony Liguori
uint8_t qtest_inb(QTestState *s, uint16_t addr);
117 49ee3590 Anthony Liguori
118 49ee3590 Anthony Liguori
/**
119 49ee3590 Anthony Liguori
 * qtest_inw:
120 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
121 49ee3590 Anthony Liguori
 * @addr: I/O port to read from.
122 49ee3590 Anthony Liguori
 * @value: Value being written.
123 49ee3590 Anthony Liguori
 *
124 49ee3590 Anthony Liguori
 * Returns a 16-bit value from an I/O port.
125 49ee3590 Anthony Liguori
 */
126 49ee3590 Anthony Liguori
uint16_t qtest_inw(QTestState *s, uint16_t addr);
127 49ee3590 Anthony Liguori
128 49ee3590 Anthony Liguori
/**
129 49ee3590 Anthony Liguori
 * qtest_inl:
130 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
131 49ee3590 Anthony Liguori
 * @addr: I/O port to read from.
132 49ee3590 Anthony Liguori
 * @value: Value being written.
133 49ee3590 Anthony Liguori
 *
134 49ee3590 Anthony Liguori
 * Returns a 32-bit value from an I/O port.
135 49ee3590 Anthony Liguori
 */
136 49ee3590 Anthony Liguori
uint32_t qtest_inl(QTestState *s, uint16_t addr);
137 49ee3590 Anthony Liguori
138 49ee3590 Anthony Liguori
/**
139 49ee3590 Anthony Liguori
 * qtest_memread:
140 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
141 49ee3590 Anthony Liguori
 * @addr: Guest address to read from.
142 49ee3590 Anthony Liguori
 * @data: Pointer to where memory contents will be stored.
143 49ee3590 Anthony Liguori
 * @size: Number of bytes to read.
144 49ee3590 Anthony Liguori
 *
145 49ee3590 Anthony Liguori
 * Read guest memory into a buffer.
146 49ee3590 Anthony Liguori
 */
147 49ee3590 Anthony Liguori
void qtest_memread(QTestState *s, uint64_t addr, void *data, size_t size);
148 49ee3590 Anthony Liguori
149 49ee3590 Anthony Liguori
/**
150 49ee3590 Anthony Liguori
 * qtest_memwrite:
151 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
152 49ee3590 Anthony Liguori
 * @addr: Guest address to write to.
153 49ee3590 Anthony Liguori
 * @data: Pointer to the bytes that will be written to guest memory.
154 49ee3590 Anthony Liguori
 * @size: Number of bytes to write.
155 49ee3590 Anthony Liguori
 *
156 49ee3590 Anthony Liguori
 * Write a buffer to guest memory.
157 49ee3590 Anthony Liguori
 */
158 49ee3590 Anthony Liguori
void qtest_memwrite(QTestState *s, uint64_t addr, const void *data, size_t size);
159 49ee3590 Anthony Liguori
160 49ee3590 Anthony Liguori
/**
161 49ee3590 Anthony Liguori
 * qtest_clock_step_next:
162 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
163 49ee3590 Anthony Liguori
 *
164 49ee3590 Anthony Liguori
 * Advance the vm_clock to the next deadline.  Return the current
165 49ee3590 Anthony Liguori
 * value of the vm_clock in nanoseconds.
166 49ee3590 Anthony Liguori
 */
167 49ee3590 Anthony Liguori
int64_t qtest_clock_step_next(QTestState *s);
168 49ee3590 Anthony Liguori
169 49ee3590 Anthony Liguori
/**
170 49ee3590 Anthony Liguori
 * qtest_clock_step:
171 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
172 49ee3590 Anthony Liguori
 * @step: Number of nanoseconds to advance the clock by.
173 49ee3590 Anthony Liguori
 *
174 49ee3590 Anthony Liguori
 * Advance the vm_clock by @step nanoseconds.  Return the current
175 49ee3590 Anthony Liguori
 * value of the vm_clock in nanoseconds.
176 49ee3590 Anthony Liguori
 */
177 49ee3590 Anthony Liguori
int64_t qtest_clock_step(QTestState *s, int64_t step);
178 49ee3590 Anthony Liguori
179 49ee3590 Anthony Liguori
/**
180 49ee3590 Anthony Liguori
 * qtest_clock_set:
181 49ee3590 Anthony Liguori
 * @s: QTestState instance to operate on.
182 49ee3590 Anthony Liguori
 * @val: Nanoseconds value to advance the clock to.
183 49ee3590 Anthony Liguori
 *
184 49ee3590 Anthony Liguori
 * Advance the vm_clock to @val nanoseconds since the VM was launched.
185 49ee3590 Anthony Liguori
 * Return the current value of the vm_clock in nanoseconds.
186 49ee3590 Anthony Liguori
 */
187 49ee3590 Anthony Liguori
int64_t qtest_clock_set(QTestState *s, int64_t val);
188 49ee3590 Anthony Liguori
189 49ee3590 Anthony Liguori
/**
190 49ee3590 Anthony Liguori
 * qtest_get_arch:
191 49ee3590 Anthony Liguori
 *
192 49ee3590 Anthony Liguori
 * Returns the architecture for the QEMU executable under test.
193 49ee3590 Anthony Liguori
 */
194 49ee3590 Anthony Liguori
const char *qtest_get_arch(void);
195 49ee3590 Anthony Liguori
196 49ee3590 Anthony Liguori
/**
197 49ee3590 Anthony Liguori
 * qtest_add_func:
198 49ee3590 Anthony Liguori
 * @str: Test case path.
199 49ee3590 Anthony Liguori
 * @fn: Test case function
200 49ee3590 Anthony Liguori
 *
201 49ee3590 Anthony Liguori
 * Add a GTester testcase with the given name and function.
202 49ee3590 Anthony Liguori
 * The path is prefixed with the architecture under test, as
203 49ee3590 Anthony Liguori
 * returned by qtest_get_arch.
204 49ee3590 Anthony Liguori
 */
205 49ee3590 Anthony Liguori
void qtest_add_func(const char *str, void (*fn));
206 49ee3590 Anthony Liguori
207 49ee3590 Anthony Liguori
/**
208 49ee3590 Anthony Liguori
 * qtest_start:
209 49ee3590 Anthony Liguori
 * @args: other arguments to pass to QEMU
210 49ee3590 Anthony Liguori
 *
211 49ee3590 Anthony Liguori
 * Start QEMU and assign the resulting QTestState to a global variable.
212 49ee3590 Anthony Liguori
 * The global variable is used by "shortcut" macros documented below.
213 49ee3590 Anthony Liguori
 */
214 49ee3590 Anthony Liguori
#define qtest_start(args) (            \
215 49ee3590 Anthony Liguori
    global_qtest = qtest_init((args)) \
216 49ee3590 Anthony Liguori
        )
217 49ee3590 Anthony Liguori
218 49ee3590 Anthony Liguori
/**
219 a3ca163c Kevin Wolf
 * qmp:
220 a3ca163c Kevin Wolf
 * @fmt...: QMP message to send to qemu
221 a3ca163c Kevin Wolf
 *
222 a3ca163c Kevin Wolf
 * Sends a QMP message to QEMU
223 a3ca163c Kevin Wolf
 */
224 a3ca163c Kevin Wolf
#define qmp(fmt, ...) qtest_qmp(global_qtest, fmt, ## __VA_ARGS__)
225 a3ca163c Kevin Wolf
226 a3ca163c Kevin Wolf
/**
227 49ee3590 Anthony Liguori
 * get_irq:
228 49ee3590 Anthony Liguori
 * @num: Interrupt to observe.
229 49ee3590 Anthony Liguori
 *
230 49ee3590 Anthony Liguori
 * Return the level of the @num interrupt.
231 49ee3590 Anthony Liguori
 */
232 49ee3590 Anthony Liguori
#define get_irq(num) qtest_get_irq(global_qtest, num)
233 49ee3590 Anthony Liguori
234 49ee3590 Anthony Liguori
/**
235 49ee3590 Anthony Liguori
 * irq_intercept_in:
236 49ee3590 Anthony Liguori
 * @string: QOM path of a device.
237 49ee3590 Anthony Liguori
 *
238 49ee3590 Anthony Liguori
 * Associate qtest irqs with the GPIO-in pins of the device
239 49ee3590 Anthony Liguori
 * whose path is specified by @string.
240 49ee3590 Anthony Liguori
 */
241 49ee3590 Anthony Liguori
#define irq_intercept_in(string) qtest_irq_intercept_in(global_qtest, string)
242 49ee3590 Anthony Liguori
243 49ee3590 Anthony Liguori
/**
244 49ee3590 Anthony Liguori
 * qtest_irq_intercept_out:
245 49ee3590 Anthony Liguori
 * @string: QOM path of a device.
246 49ee3590 Anthony Liguori
 *
247 49ee3590 Anthony Liguori
 * Associate qtest irqs with the GPIO-out pins of the device
248 49ee3590 Anthony Liguori
 * whose path is specified by @string.
249 49ee3590 Anthony Liguori
 */
250 49ee3590 Anthony Liguori
#define irq_intercept_out(string) qtest_irq_intercept_out(global_qtest, string)
251 49ee3590 Anthony Liguori
252 49ee3590 Anthony Liguori
/**
253 49ee3590 Anthony Liguori
 * outb:
254 49ee3590 Anthony Liguori
 * @addr: I/O port to write to.
255 49ee3590 Anthony Liguori
 * @value: Value being written.
256 49ee3590 Anthony Liguori
 *
257 49ee3590 Anthony Liguori
 * Write an 8-bit value to an I/O port.
258 49ee3590 Anthony Liguori
 */
259 49ee3590 Anthony Liguori
#define outb(addr, val) qtest_outb(global_qtest, addr, val)
260 49ee3590 Anthony Liguori
261 49ee3590 Anthony Liguori
/**
262 49ee3590 Anthony Liguori
 * outw:
263 49ee3590 Anthony Liguori
 * @addr: I/O port to write to.
264 49ee3590 Anthony Liguori
 * @value: Value being written.
265 49ee3590 Anthony Liguori
 *
266 49ee3590 Anthony Liguori
 * Write a 16-bit value to an I/O port.
267 49ee3590 Anthony Liguori
 */
268 49ee3590 Anthony Liguori
#define outw(addr, val) qtest_outw(global_qtest, addr, val)
269 49ee3590 Anthony Liguori
270 49ee3590 Anthony Liguori
/**
271 49ee3590 Anthony Liguori
 * outl:
272 49ee3590 Anthony Liguori
 * @addr: I/O port to write to.
273 49ee3590 Anthony Liguori
 * @value: Value being written.
274 49ee3590 Anthony Liguori
 *
275 49ee3590 Anthony Liguori
 * Write a 32-bit value to an I/O port.
276 49ee3590 Anthony Liguori
 */
277 49ee3590 Anthony Liguori
#define outl(addr, val) qtest_outl(global_qtest, addr, val)
278 49ee3590 Anthony Liguori
279 49ee3590 Anthony Liguori
/**
280 49ee3590 Anthony Liguori
 * inb:
281 49ee3590 Anthony Liguori
 * @addr: I/O port to read from.
282 49ee3590 Anthony Liguori
 * @value: Value being written.
283 49ee3590 Anthony Liguori
 *
284 49ee3590 Anthony Liguori
 * Returns an 8-bit value from an I/O port.
285 49ee3590 Anthony Liguori
 */
286 49ee3590 Anthony Liguori
#define inb(addr) qtest_inb(global_qtest, addr)
287 49ee3590 Anthony Liguori
288 49ee3590 Anthony Liguori
/**
289 49ee3590 Anthony Liguori
 * inw:
290 49ee3590 Anthony Liguori
 * @addr: I/O port to read from.
291 49ee3590 Anthony Liguori
 * @value: Value being written.
292 49ee3590 Anthony Liguori
 *
293 49ee3590 Anthony Liguori
 * Returns a 16-bit value from an I/O port.
294 49ee3590 Anthony Liguori
 */
295 49ee3590 Anthony Liguori
#define inw(addr) qtest_inw(global_qtest, addr)
296 49ee3590 Anthony Liguori
297 49ee3590 Anthony Liguori
/**
298 49ee3590 Anthony Liguori
 * inl:
299 49ee3590 Anthony Liguori
 * @addr: I/O port to read from.
300 49ee3590 Anthony Liguori
 * @value: Value being written.
301 49ee3590 Anthony Liguori
 *
302 49ee3590 Anthony Liguori
 * Returns a 32-bit value from an I/O port.
303 49ee3590 Anthony Liguori
 */
304 49ee3590 Anthony Liguori
#define inl(addr) qtest_inl(global_qtest, addr)
305 49ee3590 Anthony Liguori
306 49ee3590 Anthony Liguori
/**
307 49ee3590 Anthony Liguori
 * memread:
308 49ee3590 Anthony Liguori
 * @addr: Guest address to read from.
309 49ee3590 Anthony Liguori
 * @data: Pointer to where memory contents will be stored.
310 49ee3590 Anthony Liguori
 * @size: Number of bytes to read.
311 49ee3590 Anthony Liguori
 *
312 49ee3590 Anthony Liguori
 * Read guest memory into a buffer.
313 49ee3590 Anthony Liguori
 */
314 49ee3590 Anthony Liguori
#define memread(addr, data, size) qtest_memread(global_qtest, addr, data, size)
315 49ee3590 Anthony Liguori
316 49ee3590 Anthony Liguori
/**
317 49ee3590 Anthony Liguori
 * memwrite:
318 49ee3590 Anthony Liguori
 * @addr: Guest address to write to.
319 49ee3590 Anthony Liguori
 * @data: Pointer to the bytes that will be written to guest memory.
320 49ee3590 Anthony Liguori
 * @size: Number of bytes to write.
321 49ee3590 Anthony Liguori
 *
322 49ee3590 Anthony Liguori
 * Write a buffer to guest memory.
323 49ee3590 Anthony Liguori
 */
324 49ee3590 Anthony Liguori
#define memwrite(addr, data, size) qtest_memwrite(global_qtest, addr, data, size)
325 49ee3590 Anthony Liguori
326 49ee3590 Anthony Liguori
/**
327 49ee3590 Anthony Liguori
 * clock_step_next:
328 49ee3590 Anthony Liguori
 *
329 49ee3590 Anthony Liguori
 * Advance the vm_clock to the next deadline.  Return the current
330 49ee3590 Anthony Liguori
 * value of the vm_clock in nanoseconds.
331 49ee3590 Anthony Liguori
 */
332 49ee3590 Anthony Liguori
#define clock_step_next() qtest_clock_step_next(global_qtest)
333 49ee3590 Anthony Liguori
334 49ee3590 Anthony Liguori
/**
335 49ee3590 Anthony Liguori
 * clock_step:
336 49ee3590 Anthony Liguori
 * @step: Number of nanoseconds to advance the clock by.
337 49ee3590 Anthony Liguori
 *
338 49ee3590 Anthony Liguori
 * Advance the vm_clock by @step nanoseconds.  Return the current
339 49ee3590 Anthony Liguori
 * value of the vm_clock in nanoseconds.
340 49ee3590 Anthony Liguori
 */
341 49ee3590 Anthony Liguori
#define clock_step(step) qtest_clock_step(global_qtest, step)
342 49ee3590 Anthony Liguori
343 49ee3590 Anthony Liguori
/**
344 49ee3590 Anthony Liguori
 * clock_set:
345 49ee3590 Anthony Liguori
 * @val: Nanoseconds value to advance the clock to.
346 49ee3590 Anthony Liguori
 *
347 49ee3590 Anthony Liguori
 * Advance the vm_clock to @val nanoseconds since the VM was launched.
348 49ee3590 Anthony Liguori
 * Return the current value of the vm_clock in nanoseconds.
349 49ee3590 Anthony Liguori
 */
350 49ee3590 Anthony Liguori
#define clock_set(val) qtest_clock_set(global_qtest, val)
351 49ee3590 Anthony Liguori
352 49ee3590 Anthony Liguori
#endif