diff options
author | Damien Zammit <damien@zamaudio.com> | 2023-01-18 07:36:18 +0000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2023-06-24 00:00:13 +1000 |
commit | ea7cb944b438bff08607d11a2bbfa7d0e3aff350 (patch) | |
tree | 32d34bcdb43c2485040d06ce4069b29382b75293 | |
parent | 471ebf0a2643abee4a508d154214747149be1edc (diff) |
pci-userspace: Add acpi lookup of irqs with fallback
Message-Id: <20230118073559.149163-1-damien@zamaudio.com>
-rw-r--r-- | debian/changelog | 8 | ||||
-rw-r--r-- | debian/patches/acpi.diff | 78 | ||||
-rw-r--r-- | debian/patches/series | 1 |
3 files changed, 87 insertions, 0 deletions
diff --git a/debian/changelog b/debian/changelog index e572e279..d158eaea 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +rumpkernel (0~20211031-3) UNRELEASED; urgency=medium + + [ Damien Zammit ] + * debian/patches/acpi.diff: pci-userspace: Add acpi lookup of irqs with + fallback. + + -- Samuel Thibault <sthibault@debian.org> Thu, 19 Jan 2023 00:53:29 +0100 + rumpkernel (0~20211031-2) unreleased; urgency=medium [ Samuel Thibault ] diff --git a/debian/patches/acpi.diff b/debian/patches/acpi.diff new file mode 100644 index 00000000..8015a6e6 --- /dev/null +++ b/debian/patches/acpi.diff @@ -0,0 +1,78 @@ +--- a/pci-userspace/src-gnu/Makefile.inc ++++ b/pci-userspace/src-gnu/Makefile.inc +@@ -3,7 +3,7 @@ + PCIDIR:= ${.PARSEDIR} + .PATH: ${PCIDIR} + +-RUMPCOMP_USER_SRCS= pci_user-gnu.c mach_debugUser.c ++RUMPCOMP_USER_SRCS= pci_user-gnu.c mach_debugUser.c acpiUser.c + RUMPCOMP_USER_CPPFLAGS+=-I${PCIDIR} -I${DESTDIR}/usr/include + RUMPCOMP_CPPFLAGS+= -I${PCIDIR} -I${DESTDIR}/usr/include + CPPFLAGS+= -I${PCIDIR} +@@ -16,3 +16,11 @@ + -user mach_debugUser.c \ + -server /dev/null \ + -header mach_debug_U.h ++ ++acpiUser.c: ++ echo '#include <hurd/acpi.defs>' \ ++ | ${CC} -E -x c - -o - \ ++ | mig -cc cat - /dev/null -subrprefix __ \ ++ -user acpiUser.c \ ++ -server /dev/null \ ++ -header acpi_U.h +--- a/pci-userspace/src-gnu/pci_user-gnu.c ++++ b/pci-userspace/src-gnu/pci_user-gnu.c +@@ -67,6 +67,7 @@ + #include <device/device.h> + #include <mach/gnumach.h> + #include "mach_debug_U.h" ++#include "acpi_U.h" + #include <mach/vm_param.h> + #include <mach.h> + +@@ -90,6 +91,7 @@ + static mach_port_t master_host; + static mach_port_t master_device; + static device_t irq_dev; ++static device_t acpi_dev; + + #define PCI_CFG1_START 0xcf8 + #define PCI_CFG1_END 0xcff +@@ -130,6 +132,12 @@ + if (device_open (master_device, D_READ, "irq", &irq_dev)) + err(2, "device_open irq"); + ++ /* Optional */ ++ if (device_open (master_device, D_READ, "acpi", &acpi_dev)) { ++ MACH_PRINT("device_open acpi failed... continue\n"); ++ acpi_dev = MACH_PORT_NULL; ++ } ++ + pci_system_init (); + struct pci_device_iterator *dev_iter; + struct pci_device *pci_dev; +@@ -363,6 +371,7 @@ + rumpcomp_pci_irq_map(unsigned bus, unsigned dev, unsigned fun, + int intrline, unsigned cookie) + { ++ int ret; + struct irq *irq; + irq = malloc(sizeof(*irq)); + if (irq == NULL) +@@ -374,6 +383,15 @@ + irq->fun = fun; + irq->intrline = intrline; + ++ /* We can do better by reading irq from acpi device, but with fallback */ ++ if (acpi_dev != MACH_PORT_NULL) { ++ ret = acpi_get_pci_irq (acpi_dev, bus, dev, fun, &irq->intrline); ++ if (ret) { ++ MACH_PRINT("acpi_get_pci_irq failed, continue with intrline\n"); ++ irq->intrline = intrline; ++ } ++ } ++ + pthread_mutex_lock(&genericmtx); + LIST_INSERT_HEAD(&irqs, irq, entries); + pthread_mutex_unlock(&genericmtx); diff --git a/debian/patches/series b/debian/patches/series index 5654d354..adbc5acb 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -14,3 +14,4 @@ pci-userspace-rump.diff rumpuser-evcnt.diff ps-comm.diff idtype_t.diff +acpi.diff |