mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 16:23:55 -06:00
libqos: Track QTestState with QPCIBus
When initializing a QPCIBus, track which QTestState the bus is associated with (so that a later patch can then explicitly use that test state for all communication on the bus, rather than blindly relying on global_qtest). Update the initialization functions to take another parameter, and update all callers to pass in state (for now, most callers get away with passing the current global_qtest as the current state, although this required fixing the order of initialization to ensure qtest_start() is called before qpci_init*() in rtl8139-test, and provided an opportunity to pass in the allocator in e1000e-test). Touch up some allocations to use g_new0() rather than g_malloc() while in the area, and simplify some code (all implementations of QOSOps provide a .init_allocator() that never fails). Signed-off-by: Eric Blake <eblake@redhat.com> Reviewed-by: John Snow <jsnow@redhat.com> Reviewed-by: Thomas Huth <thuth@redhat.com> [thuth: Removed hunk from vhost-user-test.c that is not required anymore, fixed conflict in qtest_vboot() and adjusted qpci_init_pc() in sdhci-test] Signed-off-by: Thomas Huth <thuth@redhat.com>
This commit is contained in:
parent
50990b162c
commit
e5d1730d1e
19 changed files with 33 additions and 33 deletions
|
@ -123,13 +123,13 @@ bool is_atapi(AHCIQState *ahci, uint8_t port)
|
|||
/**
|
||||
* Locate, verify, and return a handle to the AHCI device.
|
||||
*/
|
||||
QPCIDevice *get_ahci_device(uint32_t *fingerprint)
|
||||
QPCIDevice *get_ahci_device(QTestState *qts, uint32_t *fingerprint)
|
||||
{
|
||||
QPCIDevice *ahci;
|
||||
uint32_t ahci_fingerprint;
|
||||
QPCIBus *pcibus;
|
||||
|
||||
pcibus = qpci_init_pc(NULL);
|
||||
pcibus = qpci_init_pc(qts, NULL);
|
||||
|
||||
/* Find the AHCI PCI device and verify it's the right one. */
|
||||
ahci = qpci_device_find(pcibus, QPCI_DEVFN(0x1F, 0x02));
|
||||
|
|
|
@ -571,7 +571,7 @@ void ahci_free(AHCIQState *ahci, uint64_t addr);
|
|||
void ahci_clean_mem(AHCIQState *ahci);
|
||||
|
||||
/* Device management */
|
||||
QPCIDevice *get_ahci_device(uint32_t *fingerprint);
|
||||
QPCIDevice *get_ahci_device(QTestState *qts, uint32_t *fingerprint);
|
||||
void free_ahci_device(QPCIDevice *dev);
|
||||
void ahci_pci_enable(AHCIQState *ahci);
|
||||
void start_ahci_device(AHCIQState *ahci);
|
||||
|
|
|
@ -18,18 +18,14 @@ QOSState *qtest_vboot(QOSOps *ops, const char *cmdline_fmt, va_list ap)
|
|||
{
|
||||
char *cmdline;
|
||||
|
||||
struct QOSState *qs = g_new(QOSState, 1);
|
||||
QOSState *qs = g_new0(QOSState, 1);
|
||||
|
||||
cmdline = g_strdup_vprintf(cmdline_fmt, ap);
|
||||
qs->qts = qtest_start(cmdline);
|
||||
qs->ops = ops;
|
||||
if (ops) {
|
||||
if (ops->init_allocator) {
|
||||
qs->alloc = ops->init_allocator(ALLOC_NO_FLAGS);
|
||||
}
|
||||
if (ops->qpci_init && qs->alloc) {
|
||||
qs->pcibus = ops->qpci_init(qs->alloc);
|
||||
}
|
||||
qs->alloc = ops->init_allocator(ALLOC_NO_FLAGS);
|
||||
qs->pcibus = ops->qpci_init(qs->qts, qs->alloc);
|
||||
}
|
||||
|
||||
g_free(cmdline);
|
||||
|
|
|
@ -10,7 +10,7 @@ typedef struct QOSState QOSState;
|
|||
typedef struct QOSOps {
|
||||
QGuestAllocator *(*init_allocator)(QAllocOpts);
|
||||
void (*uninit_allocator)(QGuestAllocator *);
|
||||
QPCIBus *(*qpci_init)(QGuestAllocator *alloc);
|
||||
QPCIBus *(*qpci_init)(QTestState *qts, QGuestAllocator *alloc);
|
||||
void (*qpci_free)(QPCIBus *bus);
|
||||
void (*shutdown)(QOSState *);
|
||||
} QOSOps;
|
||||
|
|
|
@ -115,11 +115,11 @@ static void qpci_pc_config_writel(QPCIBus *bus, int devfn, uint8_t offset, uint3
|
|||
outl(0xcfc, value);
|
||||
}
|
||||
|
||||
QPCIBus *qpci_init_pc(QGuestAllocator *alloc)
|
||||
QPCIBus *qpci_init_pc(QTestState *qts, QGuestAllocator *alloc)
|
||||
{
|
||||
QPCIBusPC *ret;
|
||||
QPCIBusPC *ret = g_new0(QPCIBusPC, 1);
|
||||
|
||||
ret = g_malloc(sizeof(*ret));
|
||||
assert(qts);
|
||||
|
||||
ret->bus.pio_readb = qpci_pc_pio_readb;
|
||||
ret->bus.pio_readw = qpci_pc_pio_readw;
|
||||
|
@ -142,6 +142,7 @@ QPCIBus *qpci_init_pc(QGuestAllocator *alloc)
|
|||
ret->bus.config_writew = qpci_pc_config_writew;
|
||||
ret->bus.config_writel = qpci_pc_config_writel;
|
||||
|
||||
ret->bus.qts = qts;
|
||||
ret->bus.pio_alloc_ptr = 0xc000;
|
||||
ret->bus.mmio_alloc_ptr = 0xE0000000;
|
||||
ret->bus.mmio_limit = 0x100000000ULL;
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
#include "libqos/pci.h"
|
||||
#include "libqos/malloc.h"
|
||||
|
||||
QPCIBus *qpci_init_pc(QGuestAllocator *alloc);
|
||||
QPCIBus *qpci_init_pc(QTestState *qts, QGuestAllocator *alloc);
|
||||
void qpci_free_pc(QPCIBus *bus);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -154,11 +154,11 @@ static void qpci_spapr_config_writel(QPCIBus *bus, int devfn, uint8_t offset,
|
|||
#define SPAPR_PCI_MMIO32_WIN_SIZE 0x80000000 /* 2 GiB */
|
||||
#define SPAPR_PCI_IO_WIN_SIZE 0x10000
|
||||
|
||||
QPCIBus *qpci_init_spapr(QGuestAllocator *alloc)
|
||||
QPCIBus *qpci_init_spapr(QTestState *qts, QGuestAllocator *alloc)
|
||||
{
|
||||
QPCIBusSPAPR *ret;
|
||||
QPCIBusSPAPR *ret = g_new0(QPCIBusSPAPR, 1);
|
||||
|
||||
ret = g_malloc(sizeof(*ret));
|
||||
assert(qts);
|
||||
|
||||
ret->alloc = alloc;
|
||||
|
||||
|
@ -197,6 +197,7 @@ QPCIBus *qpci_init_spapr(QGuestAllocator *alloc)
|
|||
ret->mmio32.pci_base = SPAPR_PCI_MMIO32_WIN_SIZE;
|
||||
ret->mmio32.size = SPAPR_PCI_MMIO32_WIN_SIZE;
|
||||
|
||||
ret->bus.qts = qts;
|
||||
ret->bus.pio_alloc_ptr = 0xc000;
|
||||
ret->bus.mmio_alloc_ptr = ret->mmio32.pci_base;
|
||||
ret->bus.mmio_limit = ret->mmio32.pci_base + ret->mmio32.size;
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
#include "libqos/malloc.h"
|
||||
#include "libqos/pci.h"
|
||||
|
||||
QPCIBus *qpci_init_spapr(QGuestAllocator *alloc);
|
||||
QPCIBus *qpci_init_spapr(QTestState *qts, QGuestAllocator *alloc);
|
||||
void qpci_free_spapr(QPCIBus *bus);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -48,6 +48,7 @@ struct QPCIBus {
|
|||
void (*config_writel)(QPCIBus *bus, int devfn,
|
||||
uint8_t offset, uint32_t value);
|
||||
|
||||
QTestState *qts;
|
||||
uint16_t pio_alloc_ptr;
|
||||
uint64_t mmio_alloc_ptr, mmio_limit;
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue