From 7cc050b1659545d0c87108c17f0bf78561efcf9a Mon Sep 17 00:00:00 2001 From: Blue Swirl Date: Sat, 5 Feb 2011 14:34:32 +0000 Subject: pci: add creation functions that may fail Signed-off-by: Blue Swirl --- hw/pci.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'hw/pci.c') diff --git a/hw/pci.c b/hw/pci.c index d5bbba975b..5e6e216487 100644 --- a/hw/pci.c +++ b/hw/pci.c @@ -1708,6 +1708,21 @@ PCIDevice *pci_create_multifunction(PCIBus *bus, int devfn, bool multifunction, return DO_UPCAST(PCIDevice, qdev, dev); } +PCIDevice *pci_try_create_multifunction(PCIBus *bus, int devfn, + bool multifunction, + const char *name) +{ + DeviceState *dev; + + dev = qdev_try_create(&bus->qbus, name); + if (!dev) { + return NULL; + } + qdev_prop_set_uint32(dev, "addr", devfn); + qdev_prop_set_bit(dev, "multifunction", multifunction); + return DO_UPCAST(PCIDevice, qdev, dev); +} + PCIDevice *pci_create_simple_multifunction(PCIBus *bus, int devfn, bool multifunction, const char *name) @@ -1727,6 +1742,11 @@ PCIDevice *pci_create_simple(PCIBus *bus, int devfn, const char *name) return pci_create_simple_multifunction(bus, devfn, false, name); } +PCIDevice *pci_try_create(PCIBus *bus, int devfn, const char *name) +{ + return pci_try_create_multifunction(bus, devfn, false, name); +} + static int pci_find_space(PCIDevice *pdev, uint8_t size) { int config_size = pci_config_size(pdev); -- cgit v1.2.3