int set_msi_sid(struct irte *irte, struct pci_dev *dev) { struct pci_dev *bridge; if (!irte || !dev) return -1; /* PCIe device or Root Complex integrated PCI device */ if (pci_is_pcie(dev) || !dev->bus->parent) { set_irte_sid(irte, SVT_VERIFY_SID_SQ, SQ_ALL_16, (dev->bus->number << 8) | dev->devfn); return 0; } bridge = pci_find_upstream_pcie_bridge(dev); if (bridge) { if (pci_is_pcie(bridge))/* this is a PCIe-to-PCI/PCIX bridge */ set_irte_sid(irte, SVT_VERIFY_BUS, SQ_ALL_16, (bridge->bus->number << 8) | dev->bus->number); else /* this is a legacy PCI bridge */ set_irte_sid(irte, SVT_VERIFY_SID_SQ, SQ_ALL_16, (bridge->bus->number << 8) | bridge->devfn); } return 0; }
int set_msi_sid(struct irte *irte, struct pci_dev *dev) { struct pci_dev *bridge; if (!irte || !dev) return -1; if (pci_is_pcie(dev) || !dev->bus->parent) { set_irte_sid(irte, SVT_VERIFY_SID_SQ, SQ_ALL_16, (dev->bus->number << 8) | dev->devfn); return 0; } bridge = pci_find_upstream_pcie_bridge(dev); if (bridge) { if (pci_is_pcie(bridge)) set_irte_sid(irte, SVT_VERIFY_BUS, SQ_ALL_16, (bridge->bus->number << 8) | dev->bus->number); else set_irte_sid(irte, SVT_VERIFY_SID_SQ, SQ_ALL_16, (bridge->bus->number << 8) | bridge->devfn); } return 0; }