mirror of https://gitee.com/openkylin/qemu.git
libqos: Add qpci_plug_device_test() and qpci_unplug_acpi_device_test()
Functions will be used for testing hot(un)plug of PCI devices. Signed-off-by: Igor Mammedov <imammedo@redhat.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Andreas Färber <afaerber@suse.de>
This commit is contained in:
parent
823a9987c9
commit
2f8b276720
|
@ -20,6 +20,9 @@
|
|||
|
||||
#include <glib.h>
|
||||
|
||||
#define ACPI_PCIHP_ADDR 0xae00
|
||||
#define PCI_EJ_BASE 0x0008
|
||||
|
||||
typedef struct QPCIBusPC
|
||||
{
|
||||
QPCIBus bus;
|
||||
|
@ -247,3 +250,49 @@ void qpci_free_pc(QPCIBus *bus)
|
|||
|
||||
g_free(s);
|
||||
}
|
||||
|
||||
void qpci_plug_device_test(const char *driver, const char *id,
|
||||
uint8_t slot, const char *opts)
|
||||
{
|
||||
QDict *response;
|
||||
char *cmd;
|
||||
|
||||
cmd = g_strdup_printf("{'execute': 'device_add',"
|
||||
" 'arguments': {"
|
||||
" 'driver': '%s',"
|
||||
" 'addr': '%d',"
|
||||
" %s%s"
|
||||
" 'id': '%s'"
|
||||
"}}", driver, slot,
|
||||
opts ? opts : "", opts ? "," : "",
|
||||
id);
|
||||
response = qmp(cmd);
|
||||
g_free(cmd);
|
||||
g_assert(response);
|
||||
g_assert(!qdict_haskey(response, "error"));
|
||||
QDECREF(response);
|
||||
}
|
||||
|
||||
void qpci_unplug_acpi_device_test(const char *id, uint8_t slot)
|
||||
{
|
||||
QDict *response;
|
||||
char *cmd;
|
||||
|
||||
cmd = g_strdup_printf("{'execute': 'device_del',"
|
||||
" 'arguments': {"
|
||||
" 'id': '%s'"
|
||||
"}}", id);
|
||||
response = qmp(cmd);
|
||||
g_free(cmd);
|
||||
g_assert(response);
|
||||
g_assert(!qdict_haskey(response, "error"));
|
||||
QDECREF(response);
|
||||
|
||||
outb(ACPI_PCIHP_ADDR + PCI_EJ_BASE, 1 << slot);
|
||||
|
||||
response = qmp("");
|
||||
g_assert(response);
|
||||
g_assert(qdict_haskey(response, "event"));
|
||||
g_assert(!strcmp(qdict_get_str(response, "event"), "DEVICE_DELETED"));
|
||||
QDECREF(response);
|
||||
}
|
||||
|
|
|
@ -87,4 +87,7 @@ void qpci_io_writel(QPCIDevice *dev, void *data, uint32_t value);
|
|||
void *qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr);
|
||||
void qpci_iounmap(QPCIDevice *dev, void *data);
|
||||
|
||||
void qpci_plug_device_test(const char *driver, const char *id,
|
||||
uint8_t slot, const char *opts);
|
||||
void qpci_unplug_acpi_device_test(const char *id, uint8_t slot);
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue