12a6a4076SMarkus Armbruster #ifndef LIBQOS_H 22a6a4076SMarkus Armbruster #define LIBQOS_H 3dd0029c0SJohn Snow 4907b5105SMarc-André Lureau #include "../libqtest.h" 5a2ce7dbdSPaolo Bonzini #include "pci.h" 6b243c73cSXuzhou Cheng #include "libqos-malloc.h" 7dd0029c0SJohn Snow 861ae5cf3SLaurent Vivier typedef struct QOSState QOSState; 961ae5cf3SLaurent Vivier 1090e5add6SJohn Snow typedef struct QOSOps { 11eb5937baSPaolo Bonzini void (*alloc_init)(QGuestAllocator *, QTestState *, QAllocOpts); 12143e6db6SEmanuele Giuseppe Esposito QPCIBus *(*qpci_new)(QTestState *qts, QGuestAllocator *alloc); 132ecd7e2fSLaurent Vivier void (*qpci_free)(QPCIBus *bus); 1461ae5cf3SLaurent Vivier void (*shutdown)(QOSState *); 1590e5add6SJohn Snow } QOSOps; 1690e5add6SJohn Snow 1761ae5cf3SLaurent Vivier struct QOSState { 18dd0029c0SJohn Snow QTestState *qts; 19eb5937baSPaolo Bonzini QGuestAllocator alloc; 202ecd7e2fSLaurent Vivier QPCIBus *pcibus; 2190e5add6SJohn Snow QOSOps *ops; 2261ae5cf3SLaurent Vivier }; 23dd0029c0SJohn Snow 24*0472b2e5SDaniel P. Berrangé QOSState *qtest_vboot(QOSOps *ops, const char *cmdline_fmt, va_list ap) 25*0472b2e5SDaniel P. Berrangé G_GNUC_PRINTF(2, 0); 26*0472b2e5SDaniel P. Berrangé QOSState *qtest_boot(QOSOps *ops, const char *cmdline_fmt, ...) 27*0472b2e5SDaniel P. Berrangé G_GNUC_PRINTF(2, 3); 2861ae5cf3SLaurent Vivier void qtest_common_shutdown(QOSState *qs); 29dd0029c0SJohn Snow void qtest_shutdown(QOSState *qs); 30cb11e7b2SJohn Snow bool have_qemu_img(void); 31122fdf2dSJohn Snow void mkimg(const char *file, const char *fmt, unsigned size_mb); 32122fdf2dSJohn Snow void mkqcow2(const char *file, unsigned size_mb); 33085248aeSJohn Snow void migrate(QOSState *from, QOSState *to, const char *uri); 3472c85e94SJohn Snow void prepare_blkdebug_script(const char *debug_fn, const char *event); 35ab4f7057SJohn Snow void generate_pattern(void *buffer, size_t len, size_t cycle_len); 36dd0029c0SJohn Snow 37dd0029c0SJohn Snow static inline uint64_t qmalloc(QOSState *q, size_t bytes) 38dd0029c0SJohn Snow { 39eb5937baSPaolo Bonzini return guest_alloc(&q->alloc, bytes); 40dd0029c0SJohn Snow } 41dd0029c0SJohn Snow 42dd0029c0SJohn Snow static inline void qfree(QOSState *q, uint64_t addr) 43dd0029c0SJohn Snow { 44eb5937baSPaolo Bonzini guest_free(&q->alloc, addr); 45dd0029c0SJohn Snow } 46dd0029c0SJohn Snow 47dd0029c0SJohn Snow #endif 48