Annotation of qemu/tests/libqtest.h, revision 1.1.1.1

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

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.