msi/pci: Pass cpuid to pci_alloc_msi and pcib_alloc_msi methods
authorSepherosa Ziehau <sephe@dragonflybsd.org>
Sat, 24 Dec 2011 12:09:18 +0000 (20:09 +0800)
committerSepherosa Ziehau <sephe@dragonflybsd.org>
Tue, 27 Dec 2011 05:44:41 +0000 (13:44 +0800)
sys/bus/pci/pci.c
sys/bus/pci/pci_if.m
sys/bus/pci/pci_pci.c
sys/bus/pci/pci_private.h
sys/bus/pci/pcib_if.m
sys/bus/pci/pcib_private.h
sys/bus/pci/pcivar.h
sys/bus/pci/x86_64/mptable_pci.c
sys/bus/pci/x86_64/pci_bus.c
sys/dev/acpica5/acpi_pcib_acpi.c

index 754b16c..c906a8b 100644 (file)
@@ -2052,7 +2052,7 @@ pci_msi_blacklisted(void)
  * available to the driver as SYS_RES_IRQ resources starting at a rid 1.
  */
 int
-pci_alloc_msi_method(device_t dev, device_t child, int *count)
+pci_alloc_msi_method(device_t dev, device_t child, int *count, int cpuid)
 {
        struct pci_devinfo *dinfo = device_get_ivars(child);
        pcicfgregs *cfg = &dinfo->cfg;
@@ -2099,7 +2099,7 @@ pci_alloc_msi_method(device_t dev, device_t child, int *count)
        for (;;) {
                /* Try to allocate N messages. */
                error = PCIB_ALLOC_MSI(device_get_parent(dev), child, actual,
-                   cfg->msi.msi_msgnum, irqs);
+                   cfg->msi.msi_msgnum, irqs, cpuid);
                if (error == 0)
                        break;
                if (actual == 1)
@@ -2116,7 +2116,7 @@ pci_alloc_msi_method(device_t dev, device_t child, int *count)
         */
        for (i = 0; i < actual; i++)
                resource_list_add(&dinfo->resources, SYS_RES_IRQ, i + 1,
-                   irqs[i], irqs[i], 1, -1);
+                   irqs[i], irqs[i], 1, cpuid);
 
        if (bootverbose) {
                if (actual == 1)
index 38c3e0f..68fff3c 100644 (file)
@@ -116,6 +116,7 @@ METHOD int alloc_msi {
        device_t        dev;
        device_t        child;
        int             *count;
+       int             cpuid;
 };
 
 METHOD int alloc_msix {
index 8e4edcc..e5f69e0 100644 (file)
@@ -594,7 +594,8 @@ pcib_route_interrupt(device_t pcib, device_t dev, int pin)
 
 /* Pass request to alloc MSI/MSI-X messages up to the parent bridge. */
 int
-pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs)
+pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount,
+    int *irqs, int cpuid)
 {
        struct pcib_softc *sc = device_get_softc(pcib);
        device_t bus;
@@ -603,7 +604,7 @@ pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs)
                return (ENXIO);
        bus = device_get_parent(pcib);
        return (PCIB_ALLOC_MSI(device_get_parent(bus), dev, count, maxcount,
-           irqs));
+           irqs, cpuid));
 }
 
 /* Pass request to release MSI/MSI-X messages up to the parent bridge. */
index d87d899..70dd2b4 100644 (file)
@@ -72,7 +72,7 @@ int           pci_enable_io_method(device_t dev, device_t child, int space);
 int            pci_disable_io_method(device_t dev, device_t child, int space);
 int            pci_find_extcap_method(device_t dev, device_t child,
                    int capability, int *capreg);
-int            pci_alloc_msi_method(device_t dev, device_t child, int *count);
+int            pci_alloc_msi_method(device_t dev, device_t child, int *count, int cpuid);
 int            pci_alloc_msix_method(device_t dev, device_t child, int *count);
 int            pci_remap_msix_method(device_t dev, device_t child,
                    int count, const u_int *vectors);
index 6cb4235..4af4d7d 100644 (file)
@@ -102,6 +102,7 @@ METHOD int alloc_msi {
        int             count;
        int             maxcount;
        int             *irqs;
+       int             cpuid;
 };
 
 #
index 0aed54c..7d37ffa 100644 (file)
@@ -77,7 +77,7 @@ int           pcib_maxslots(device_t dev);
 uint32_t       pcib_read_config(device_t dev, int b, int s, int f, int reg, int width);
 void           pcib_write_config(device_t dev, int b, int s, int f, int reg, uint32_t val, int width);
 int            pcib_route_interrupt(device_t pcib, device_t dev, int pin);
-int            pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs);
+int            pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount, int *irqs, int cpuid);
 int            pcib_release_msi(device_t pcib, device_t dev, int count, int *irqs);
 int            pcib_alloc_msix(device_t pcib, device_t dev, int *irq);
 int            pcib_release_msix(device_t pcib, device_t dev, int irq);
index 2071604..2584e8c 100644 (file)
@@ -465,9 +465,9 @@ pci_is_pcix(device_t dev)
 }
 
 static __inline int
-pci_alloc_msi(device_t dev, int *count)
+pci_alloc_msi(device_t dev, int *count, int cpuid)
 {
-    return (PCI_ALLOC_MSI(device_get_parent(dev), dev, count));
+    return (PCI_ALLOC_MSI(device_get_parent(dev), dev, count, cpuid));
 }
 
 static __inline int
index cae1ba5..c24f8ff 100644 (file)
@@ -104,13 +104,13 @@ mptable_hostb_attach(device_t dev)
 /* Pass MSI requests up to the nexus. */
 static int
 mptable_hostb_alloc_msi(device_t pcib, device_t dev, int count, int maxcount,
-    int *irqs)
+    int *irqs, int cpuid)
 {
        device_t bus;
 
        bus = device_get_parent(pcib);
        return (PCIB_ALLOC_MSI(device_get_parent(bus), dev, count, maxcount,
-           irqs));
+           irqs, cpuid));
 }
 
 static int
index 0ad98ad..88279e3 100644 (file)
@@ -78,13 +78,13 @@ legacy_pcib_write_config(device_t dev, int bus, int slot, int func,
 
 static int
 legacy_pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount,
-    int *irqs)
+    int *irqs, int cpuid)
 {
        device_t bus;
 
        bus = device_get_parent(pcib);
        return (PCIB_ALLOC_MSI(device_get_parent(bus), dev, count, maxcount,
-           irqs));
+           irqs, cpuid));
 }
 
 static int
index bd42e67..f9a1e58 100644 (file)
@@ -74,7 +74,7 @@ static void           acpi_pcib_write_config(device_t dev, int bus, int slot,
 static int             acpi_pcib_acpi_route_interrupt(device_t pcib,
                            device_t dev, int pin);
 static int             acpi_pcib_alloc_msi(device_t pcib, device_t dev,
-                           int count, int maxcount, int *irqs);
+                           int count, int maxcount, int *irqs, int cpuid);
 static int             acpi_pcib_map_msi(device_t pcib, device_t dev,
                            int irq, uint64_t *addr, uint32_t *data);
 static int             acpi_pcib_alloc_msix(device_t pcib, device_t dev,
@@ -329,13 +329,13 @@ acpi_pcib_acpi_route_interrupt(device_t pcib, device_t dev, int pin)
 
 static int
 acpi_pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount,
-    int *irqs)
+    int *irqs, int cpuid)
 {
        device_t bus;
 
        bus = device_get_parent(pcib);
        return (PCIB_ALLOC_MSI(device_get_parent(bus), dev, count, maxcount,
-           irqs));
+           irqs, cpuid));
 }
 
 static int