hide() can be implemented to prevent creating a PCI device and get device options.
Signed-off-by: Akihiko Odaki <akihiko.od...@daynix.com> --- include/hw/pci/pci_device.h | 2 ++ hw/pci/pci.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/include/hw/pci/pci_device.h b/include/hw/pci/pci_device.h index a7bfb192e8..deae29f070 100644 --- a/include/hw/pci/pci_device.h +++ b/include/hw/pci/pci_device.h @@ -29,6 +29,8 @@ DECLARE_CLASS_CHECKERS(PCIFailoverClass, PCI_FAILOVER, TYPE_PCI_FAILOVER) struct PCIDeviceClass { DeviceClass parent_class; + bool (*hide)(PCIDeviceClass *pc, const QDict *device_opts, bool from_json, + Error **errp); void (*realize)(PCIDevice *dev, Error **errp); PCIUnregisterFunc *exit; PCIConfigReadFunc *config_read; diff --git a/hw/pci/pci.c b/hw/pci/pci.c index 3d07246f8e..67d8ae3f61 100644 --- a/hw/pci/pci.c +++ b/hw/pci/pci.c @@ -2054,11 +2054,19 @@ PCIDevice *pci_find_device(PCIBus *bus, int bus_num, uint8_t devfn) static bool pci_qdev_hide(DeviceClass *dc, const QDict *device_opts, bool from_json, Error **errp) { + PCIDeviceClass *pc = PCI_DEVICE_CLASS(dc); const char *standby_id; DeviceState *dev; ObjectClass *class; ObjectClass *interface; + if (pc->hide) { + bool hide = pc->hide(pc, device_opts, from_json, errp); + if (hide || *errp) { + return hide; + } + } + if (!device_opts) { return false; } -- 2.43.0