* 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;
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)
*/
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)
device_t dev;
device_t child;
int *count;
+ int cpuid;
};
METHOD int alloc_msix {
/* 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;
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. */
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);
int count;
int maxcount;
int *irqs;
+ int cpuid;
};
#
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);
}
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
/* 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
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
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,
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