summaryrefslogtreecommitdiffstats
path: root/sys/dev/acpica/acpi_pcib_acpi.c
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2006-12-12 19:27:01 +0000
committerjhb <jhb@FreeBSD.org>2006-12-12 19:27:01 +0000
commitdfb2d953f134b786c0e5d0cd60880ef72844818e (patch)
tree8280306c3d817ae71cc7f8f42700414804b1538d /sys/dev/acpica/acpi_pcib_acpi.c
parentf74d404e39ca043e02da454696983060b9f8bcd6 (diff)
downloadFreeBSD-src-dfb2d953f134b786c0e5d0cd60880ef72844818e.zip
FreeBSD-src-dfb2d953f134b786c0e5d0cd60880ef72844818e.tar.gz
Give Host-PCI bridge drivers their own pcib_alloc_msi() and
pcib_alloc_msix() methods instead of using the method from the generic PCI-PCI bridge driver as the PCI-PCI methods will be gaining some PCI-PCI specific logic soon.
Diffstat (limited to 'sys/dev/acpica/acpi_pcib_acpi.c')
-rw-r--r--sys/dev/acpica/acpi_pcib_acpi.c28
1 files changed, 26 insertions, 2 deletions
diff --git a/sys/dev/acpica/acpi_pcib_acpi.c b/sys/dev/acpica/acpi_pcib_acpi.c
index 25c3a48..5fe703f 100644
--- a/sys/dev/acpica/acpi_pcib_acpi.c
+++ b/sys/dev/acpica/acpi_pcib_acpi.c
@@ -74,6 +74,10 @@ static void acpi_pcib_write_config(device_t dev, int bus, int slot,
int func, int reg, uint32_t data, int bytes);
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);
+static int acpi_pcib_alloc_msix(device_t pcib, device_t dev,
+ int index, int *irq);
static struct resource *acpi_pcib_acpi_alloc_resource(device_t dev,
device_t child, int type, int *rid,
u_long start, u_long end, u_long count,
@@ -103,9 +107,9 @@ static device_method_t acpi_pcib_acpi_methods[] = {
DEVMETHOD(pcib_read_config, acpi_pcib_read_config),
DEVMETHOD(pcib_write_config, acpi_pcib_write_config),
DEVMETHOD(pcib_route_interrupt, acpi_pcib_acpi_route_interrupt),
- DEVMETHOD(pcib_alloc_msi, pcib_alloc_msi),
+ DEVMETHOD(pcib_alloc_msi, acpi_pcib_alloc_msi),
DEVMETHOD(pcib_release_msi, pcib_release_msi),
- DEVMETHOD(pcib_alloc_msix, pcib_alloc_msix),
+ DEVMETHOD(pcib_alloc_msix, acpi_pcib_alloc_msix),
DEVMETHOD(pcib_release_msix, pcib_release_msix),
{0, 0}
@@ -306,6 +310,26 @@ acpi_pcib_acpi_route_interrupt(device_t pcib, device_t dev, int pin)
return (acpi_pcib_route_interrupt(pcib, dev, pin, &sc->ap_prt));
}
+static int
+acpi_pcib_alloc_msi(device_t pcib, device_t dev, int count, int maxcount,
+ int *irqs)
+{
+ device_t bus;
+
+ bus = device_get_parent(pcib);
+ return (PCIB_ALLOC_MSI(device_get_parent(bus), dev, count, maxcount,
+ irqs));
+}
+
+static int
+acpi_pcib_alloc_msix(device_t pcib, device_t dev, int index, int *irq)
+{
+ device_t bus;
+
+ bus = device_get_parent(pcib);
+ return (PCIB_ALLOC_MSIX(device_get_parent(bus), dev, index, irq));
+}
+
static u_long acpi_host_mem_start = 0x80000000;
TUNABLE_ULONG("hw.acpi.host_mem_start", &acpi_host_mem_start);
OpenPOWER on IntegriCloud