Lines Matching +full:pci +full:- +full:domain
1 // SPDX-License-Identifier: GPL-2.0-only
8 #include <linux/pci.h>
10 #include <linux/pci-acpi.h>
11 #include <xen/pci.h>
18 #include "../pci/pci.h"
32 struct pci_dev *physfn = pci_dev->physfn; in xen_add_device()
51 .add.seg = pci_domain_nr(pci_dev->bus), in xen_add_device()
52 .add.bus = pci_dev->bus->number, in xen_add_device()
53 .add.devfn = pci_dev->devfn in xen_add_device()
62 if (pci_dev->is_virtfn) { in xen_add_device()
63 add->flags = XEN_PCI_DEV_VIRTFN; in xen_add_device()
64 add->physfn.bus = physfn->bus->number; in xen_add_device()
65 add->physfn.devfn = physfn->devfn; in xen_add_device()
68 if (pci_ari_enabled(pci_dev->bus) && PCI_SLOT(pci_dev->devfn)) in xen_add_device()
69 add->flags = XEN_PCI_DEV_EXTFN; in xen_add_device()
72 handle = ACPI_HANDLE(&pci_dev->dev); in xen_add_device()
74 if (!handle && pci_dev->is_virtfn) in xen_add_device()
75 handle = ACPI_HANDLE(physfn->bus->bridge); in xen_add_device()
80 * all. Try to get acpi handle of parent pci bus. in xen_add_device()
83 for (pbus = pci_dev->bus; pbus; pbus = pbus->parent) { in xen_add_device()
98 add->optarr[0] = pxm; in xen_add_device()
99 add->flags |= XEN_PCI_DEV_PXM; in xen_add_device()
108 if (r != -ENOSYS) in xen_add_device()
113 if (pci_domain_nr(pci_dev->bus)) in xen_add_device()
114 r = -ENOSYS; in xen_add_device()
116 else if (pci_dev->is_virtfn) { in xen_add_device()
118 .bus = pci_dev->bus->number, in xen_add_device()
119 .devfn = pci_dev->devfn, in xen_add_device()
121 .physfn.bus = physfn->bus->number, in xen_add_device()
122 .physfn.devfn = physfn->devfn, in xen_add_device()
129 else if (pci_ari_enabled(pci_dev->bus) && PCI_SLOT(pci_dev->devfn)) { in xen_add_device()
131 .bus = pci_dev->bus->number, in xen_add_device()
132 .devfn = pci_dev->devfn, in xen_add_device()
140 .bus = pci_dev->bus->number, in xen_add_device()
141 .devfn = pci_dev->devfn, in xen_add_device()
158 .seg = pci_domain_nr(pci_dev->bus), in xen_remove_device()
159 .bus = pci_dev->bus->number, in xen_remove_device()
160 .devfn = pci_dev->devfn in xen_remove_device()
165 } else if (pci_domain_nr(pci_dev->bus)) in xen_remove_device()
166 r = -ENOSYS; in xen_remove_device()
169 .bus = pci_dev->bus->number, in xen_remove_device()
170 .devfn = pci_dev->devfn in xen_remove_device()
197 dev_err(dev, "Failed to %s - passthrough or MSI/MSI-X might fail!\n", in xen_pci_notifier()
236 r.address = cfg->address; in xen_mcfg_late()
237 r.segment = cfg->segment; in xen_mcfg_late()
238 r.start_bus = cfg->start_bus; in xen_mcfg_late()
239 r.end_bus = cfg->end_bus; in xen_mcfg_late()
245 case -ENOSYS: in xen_mcfg_late()
252 cfg->name, rc); in xen_mcfg_late()
261 domid_t domain; member
274 if (owner->dev == dev) in find_device()
283 int domain = -ENODEV; in xen_find_device_domain_owner() local
288 domain = owner->domain; in xen_find_device_domain_owner()
290 return domain; in xen_find_device_domain_owner()
294 int xen_register_device_domain_owner(struct pci_dev *dev, uint16_t domain) in xen_register_device_domain_owner() argument
300 return -ENODEV; in xen_register_device_domain_owner()
306 return -EEXIST; in xen_register_device_domain_owner()
308 owner->domain = domain; in xen_register_device_domain_owner()
309 owner->dev = dev; in xen_register_device_domain_owner()
310 list_add_tail(&owner->list, &dev_domain_list); in xen_register_device_domain_owner()
324 return -ENODEV; in xen_unregister_device_domain_owner()
326 list_del(&owner->list); in xen_unregister_device_domain_owner()