Lines Matching +full:virtio +full:- +full:pci

1 // SPDX-License-Identifier: GPL-2.0
7 #include <linux/pci.h>
15 #include "virt-pci.h"
39 struct um_pci_device *dev = reg->dev;
57 return dev->ops->cfgspace_read(dev, offset, size);
64 struct um_pci_device *dev = reg->dev;
82 dev->ops->cfgspace_write(dev, offset, size, val);
94 struct um_pci_device *dev = container_of(resptr - *resptr,
112 return dev->ops->bar_read(dev, bar, offset, size);
119 struct um_pci_device *dev = container_of(resptr - *resptr,
137 dev->ops->bar_write(dev, bar, offset, size, val);
144 struct um_pci_device *dev = container_of(resptr - *resptr,
149 dev->ops->bar_copy_from(dev, bar, buffer, offset, size);
156 struct um_pci_device *dev = container_of(resptr - *resptr,
161 dev->ops->bar_copy_to(dev, bar, offset, buffer, size);
167 struct um_pci_device *dev = container_of(resptr - *resptr,
172 dev->ops->bar_set(dev, bar, offset, value, size);
187 unsigned int busn = bus->number;
203 return (void __iomem *)((unsigned long)dev->iomem + where);
215 pci_rescan_bus(bridge->bus);
225 for_each_node_by_type(np, "pci") {
229 prop = of_get_property(np, "bus-range", NULL);
233 if (bus->number == bus_min)
241 .name = "PCI config space",
242 .start = 0xf0000000 - MAX_DEVICES * CFG_SPACE_SIZE,
243 .end = 0xf0000000 - 1,
252 return -EINVAL;
261 return -ENOENT;
269 .name = "PCI iomem",
286 struct um_pci_device_reg *reg = &um_pci_devices[pdev->devfn / 8];
290 if (!reg->dev)
293 for (i = 0; i < ARRAY_SIZE(dev->resptr); i++) {
294 struct resource *r = &pdev->resource[i];
296 if ((r->flags & IORESOURCE_TYPE_BITS) != IORESOURCE_MEM)
303 if (data->offset < r->start || data->offset > r->end)
305 if (data->offset + data->size - 1 > r->end)
308 dev = reg->dev;
309 *data->ops = &um_pci_device_bar_ops;
310 dev->resptr[i] = i;
311 *data->priv = &dev->resptr[i];
312 data->ret = data->offset - r->start;
331 .ret = -ENOENT,
334 pci_walk_bus(bridge->bus, um_pci_map_iomem_walk, &data);
346 * in UML, so we can simply map MSI(-X) vectors to there, it cannot be
352 msg->address_hi = 0;
353 msg->address_lo = 0xa0000;
354 msg->data = data->irq;
374 return -ENOSPC;
381 domain->host_data, handle_simple_irq,
394 if (!test_bit(d->hwirq, um_pci_msi_used))
395 pr_err("trying to free unused MSI#%lu\n", d->hwirq);
397 __clear_bit(d->hwirq, um_pci_msi_used);
421 .name = "PCI busn",
429 struct um_pci_device_reg *reg = &um_pci_devices[pdev->devfn / 8];
431 if (WARN_ON(!reg->dev))
432 return -EINVAL;
435 return reg->dev->irq;
448 return -ENOENT;
451 *priv = &um_pci_platform_device->resptr[0];
469 int i, free = -1;
481 err = -ENOSPC;
485 dev->irq = irq_alloc_desc(numa_node_id());
486 if (dev->irq < 0) {
487 err = dev->irq;
509 irq_free_desc(dev->irq);
517 pci_dev = pci_get_slot(bridge->bus, i);
527 return -EBUSY;
557 err = -ENOMEM;
561 um_pci_fwnode = irq_domain_alloc_named_fwnode("um-pci");
563 err = -ENOMEM;
578 err = -ENOMEM;
582 pci_add_resource(&bridge->windows, &virt_iomem_resource);
583 pci_add_resource(&bridge->windows, &busn_resource);
584 bridge->ops = &um_pci_ops;
585 bridge->map_irq = um_pci_map_irq;
593 err = -ENOMEM;
610 pci_free_resource_list(&bridge->windows);
621 pci_free_resource_list(&bridge->windows);