cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

libqtest-single.h (6301B)


      1/*
      2 * QTest - wrappers for test with single QEMU instances
      3 *
      4 * Copyright IBM, Corp. 2012
      5 * Copyright Red Hat, Inc. 2012
      6 * Copyright SUSE LINUX Products GmbH 2013
      7 *
      8 * This work is licensed under the terms of the GNU GPL, version 2 or later.
      9 * See the COPYING file in the top-level directory.
     10 */
     11#ifndef LIBQTEST_SINGLE_H
     12#define LIBQTEST_SINGLE_H
     13
     14#include "libqos/libqtest.h"
     15
     16QTestState *global_qtest __attribute__((common, weak));
     17
     18/**
     19 * qtest_start:
     20 * @args: other arguments to pass to QEMU
     21 *
     22 * Start QEMU and assign the resulting #QTestState to a global variable.
     23 * The global variable is used by "shortcut" functions documented below.
     24 *
     25 * Returns: #QTestState instance.
     26 */
     27static inline QTestState *qtest_start(const char *args)
     28{
     29    global_qtest = qtest_init(args);
     30    return global_qtest;
     31}
     32
     33/**
     34 * qtest_end:
     35 *
     36 * Shut down the QEMU process started by qtest_start().
     37 */
     38static inline void qtest_end(void)
     39{
     40    if (!global_qtest) {
     41        return;
     42    }
     43    qtest_quit(global_qtest);
     44    global_qtest = NULL;
     45}
     46
     47/**
     48 * qmp:
     49 * @fmt...: QMP message to send to qemu, formatted like
     50 * qobject_from_jsonf_nofail().  See parse_interpolation() for what's
     51 * supported after '%'.
     52 *
     53 * Sends a QMP message to QEMU and returns the response.
     54 */
     55GCC_FMT_ATTR(1, 2)
     56static inline QDict *qmp(const char *fmt, ...)
     57{
     58    va_list ap;
     59    QDict *response;
     60
     61    va_start(ap, fmt);
     62    response = qtest_vqmp(global_qtest, fmt, ap);
     63    va_end(ap);
     64    return response;
     65}
     66
     67/**
     68 * qmp_eventwait:
     69 * @s: #event event to wait for.
     70 *
     71 * Continuously polls for QMP responses until it receives the desired event.
     72 */
     73static inline void qmp_eventwait(const char *event)
     74{
     75    return qtest_qmp_eventwait(global_qtest, event);
     76}
     77
     78/**
     79 * get_irq:
     80 * @num: Interrupt to observe.
     81 *
     82 * Returns: The level of the @num interrupt.
     83 */
     84static inline bool get_irq(int num)
     85{
     86    return qtest_get_irq(global_qtest, num);
     87}
     88
     89/**
     90 * outb:
     91 * @addr: I/O port to write to.
     92 * @value: Value being written.
     93 *
     94 * Write an 8-bit value to an I/O port.
     95 */
     96static inline void outb(uint16_t addr, uint8_t value)
     97{
     98    qtest_outb(global_qtest, addr, value);
     99}
    100
    101/**
    102 * outw:
    103 * @addr: I/O port to write to.
    104 * @value: Value being written.
    105 *
    106 * Write a 16-bit value to an I/O port.
    107 */
    108static inline void outw(uint16_t addr, uint16_t value)
    109{
    110    qtest_outw(global_qtest, addr, value);
    111}
    112
    113/**
    114 * outl:
    115 * @addr: I/O port to write to.
    116 * @value: Value being written.
    117 *
    118 * Write a 32-bit value to an I/O port.
    119 */
    120static inline void outl(uint16_t addr, uint32_t value)
    121{
    122    qtest_outl(global_qtest, addr, value);
    123}
    124
    125/**
    126 * inb:
    127 * @addr: I/O port to read from.
    128 *
    129 * Reads an 8-bit value from an I/O port.
    130 *
    131 * Returns: Value read.
    132 */
    133static inline uint8_t inb(uint16_t addr)
    134{
    135    return qtest_inb(global_qtest, addr);
    136}
    137
    138/**
    139 * inw:
    140 * @addr: I/O port to read from.
    141 *
    142 * Reads a 16-bit value from an I/O port.
    143 *
    144 * Returns: Value read.
    145 */
    146static inline uint16_t inw(uint16_t addr)
    147{
    148    return qtest_inw(global_qtest, addr);
    149}
    150
    151/**
    152 * inl:
    153 * @addr: I/O port to read from.
    154 *
    155 * Reads a 32-bit value from an I/O port.
    156 *
    157 * Returns: Value read.
    158 */
    159static inline uint32_t inl(uint16_t addr)
    160{
    161    return qtest_inl(global_qtest, addr);
    162}
    163
    164/**
    165 * writeb:
    166 * @addr: Guest address to write to.
    167 * @value: Value being written.
    168 *
    169 * Writes an 8-bit value to guest memory.
    170 */
    171static inline void writeb(uint64_t addr, uint8_t value)
    172{
    173    qtest_writeb(global_qtest, addr, value);
    174}
    175
    176/**
    177 * writew:
    178 * @addr: Guest address to write to.
    179 * @value: Value being written.
    180 *
    181 * Writes a 16-bit value to guest memory.
    182 */
    183static inline void writew(uint64_t addr, uint16_t value)
    184{
    185    qtest_writew(global_qtest, addr, value);
    186}
    187
    188/**
    189 * writel:
    190 * @addr: Guest address to write to.
    191 * @value: Value being written.
    192 *
    193 * Writes a 32-bit value to guest memory.
    194 */
    195static inline void writel(uint64_t addr, uint32_t value)
    196{
    197    qtest_writel(global_qtest, addr, value);
    198}
    199
    200/**
    201 * writeq:
    202 * @addr: Guest address to write to.
    203 * @value: Value being written.
    204 *
    205 * Writes a 64-bit value to guest memory.
    206 */
    207static inline void writeq(uint64_t addr, uint64_t value)
    208{
    209    qtest_writeq(global_qtest, addr, value);
    210}
    211
    212/**
    213 * readb:
    214 * @addr: Guest address to read from.
    215 *
    216 * Reads an 8-bit value from guest memory.
    217 *
    218 * Returns: Value read.
    219 */
    220static inline uint8_t readb(uint64_t addr)
    221{
    222    return qtest_readb(global_qtest, addr);
    223}
    224
    225/**
    226 * readw:
    227 * @addr: Guest address to read from.
    228 *
    229 * Reads a 16-bit value from guest memory.
    230 *
    231 * Returns: Value read.
    232 */
    233static inline uint16_t readw(uint64_t addr)
    234{
    235    return qtest_readw(global_qtest, addr);
    236}
    237
    238/**
    239 * readl:
    240 * @addr: Guest address to read from.
    241 *
    242 * Reads a 32-bit value from guest memory.
    243 *
    244 * Returns: Value read.
    245 */
    246static inline uint32_t readl(uint64_t addr)
    247{
    248    return qtest_readl(global_qtest, addr);
    249}
    250
    251/**
    252 * readq:
    253 * @addr: Guest address to read from.
    254 *
    255 * Reads a 64-bit value from guest memory.
    256 *
    257 * Returns: Value read.
    258 */
    259static inline uint64_t readq(uint64_t addr)
    260{
    261    return qtest_readq(global_qtest, addr);
    262}
    263
    264/**
    265 * memread:
    266 * @addr: Guest address to read from.
    267 * @data: Pointer to where memory contents will be stored.
    268 * @size: Number of bytes to read.
    269 *
    270 * Read guest memory into a buffer.
    271 */
    272static inline void memread(uint64_t addr, void *data, size_t size)
    273{
    274    qtest_memread(global_qtest, addr, data, size);
    275}
    276
    277/**
    278 * memwrite:
    279 * @addr: Guest address to write to.
    280 * @data: Pointer to the bytes that will be written to guest memory.
    281 * @size: Number of bytes to write.
    282 *
    283 * Write a buffer to guest memory.
    284 */
    285static inline void memwrite(uint64_t addr, const void *data, size_t size)
    286{
    287    qtest_memwrite(global_qtest, addr, data, size);
    288}
    289
    290/**
    291 * clock_step_next:
    292 *
    293 * Advance the QEMU_CLOCK_VIRTUAL to the next deadline.
    294 *
    295 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
    296 */
    297static inline int64_t clock_step_next(void)
    298{
    299    return qtest_clock_step_next(global_qtest);
    300}
    301
    302/**
    303 * clock_step:
    304 * @step: Number of nanoseconds to advance the clock by.
    305 *
    306 * Advance the QEMU_CLOCK_VIRTUAL by @step nanoseconds.
    307 *
    308 * Returns: The current value of the QEMU_CLOCK_VIRTUAL in nanoseconds.
    309 */
    310static inline int64_t clock_step(int64_t step)
    311{
    312    return qtest_clock_step(global_qtest, step);
    313}
    314
    315#endif