This depends on having <hurd/acpi.defs> installed. It will now fail to run if acpi translator is not running as it needs the actual pci irq.
--- debian/patches/acpi.diff | 74 ++++++++++++++++++++++++++++++++++++++++ debian/patches/series | 1 + 2 files changed, 75 insertions(+) create mode 100644 debian/patches/acpi.diff diff --git a/debian/patches/acpi.diff b/debian/patches/acpi.diff new file mode 100644 index 000000000..2f2dc84d1 --- /dev/null +++ b/debian/patches/acpi.diff @@ -0,0 +1,74 @@ +--- 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,9 @@ + if (device_open (master_device, D_READ, "irq", &irq_dev)) + err(2, "device_open irq"); + ++ if (device_open (master_device, D_READ, "acpi", &acpi_dev)) ++ err(2, "device_open acpi"); ++ + pci_system_init (); + struct pci_device_iterator *dev_iter; + struct pci_device *pci_dev; +@@ -363,6 +368,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) +@@ -372,7 +378,13 @@ + irq->bus = bus; + irq->dev = dev; + irq->fun = fun; +- irq->intrline = intrline; ++ ++ /* Ignore intrline, it could be wrong ++ if it reads it from the pci config space. ++ We can do better by reading it from acpi device */ ++ ret = acpi_get_pci_irq (acpi_dev, bus, dev, fun, &irq->intrline); ++ if (ret) ++ err(ret, "acpi_get_pci_irq"); + + pthread_mutex_lock(&genericmtx); + LIST_INSERT_HEAD(&irqs, irq, entries); diff --git a/debian/patches/series b/debian/patches/series index f3725e1e7..456b9a5bd 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -13,3 +13,4 @@ no-virtio-rump.diff pci-userspace-rump.diff rumpuser-evcnt.diff ps-comm.diff +acpi.diff -- 2.34.1