Applied, thanks!

Mike Kelly, le dim. 26 oct. 2025 16:26:06 +0000, a ecrit:
> ddekit_pci_irq_enable now translates the PCI interrupt line IRQ into the GSI
> 
> ---
>  libddekit/Makefile |  2 +-
>  libddekit/pci.c    | 40 +++++++++++++++++++++++++++++++++++++++-
>  2 files changed, 40 insertions(+), 2 deletions(-)
> 
> diff --git a/libddekit/Makefile b/libddekit/Makefile
> index c74ec1128..f31733c21 100644
> --- a/libddekit/Makefile
> +++ b/libddekit/Makefile
> @@ -21,7 +21,7 @@ makemode := library
>  libname = libddekit
>  SRCS= condvar.c init.c interrupt.c lock.c malloc.c memory.c  \
>        pci.c pgtab.c printf.c resources.c list.c panic.c \
> -      thread.c timer.c initcall.c
> +      thread.c timer.c initcall.c acpiUser.c
>  installhdrs = ddekit/condvar.h ddekit/lock.h \
>         ddekit/semaphore.h ddekit/debug.h     \
>         ddekit/inline.h ddekit/panic.h        \
> diff --git a/libddekit/pci.c b/libddekit/pci.c
> index ca16b6f9a..6655787e6 100644
> --- a/libddekit/pci.c
> +++ b/libddekit/pci.c
> @@ -8,6 +8,10 @@
>  #include "ddekit/pci.h"
>  #include "config.h"
>  
> +#include <hurd.h>
> +#include <device/device.h>
> +#include "acpi_U.h"
> +
>  #define dbg_this 0
>  
>  /** PCI descriptor */
> @@ -399,7 +403,41 @@ void ddekit_pci_set_master(struct ddekit_pci_dev *dev)
>       //TODO l4io_pci_set_master(dev->l4dev.handle);
>  }
>  
> +static error_t
> +find_gsi_from_acpi(int bus, int slot, int func, int *irq)
> +{
> +  mach_port_t devices, acpi;
> +
> +  error_t err = get_privileged_ports(NULL, &devices);
> +  if (err)
> +    return err;
> +
> +  if (devices == MACH_PORT_NULL)
> +    return ENODEV;
> +
> +  err = device_open(devices, D_READ, "acpi", &acpi);
> +  mach_port_deallocate(mach_task_self(), devices);
> +  if (!err)
> +    {
> +      err = acpi_get_pci_irq(acpi, bus, slot, func, irq);
> +      device_close(acpi);
> +    }
> +
> +  return err;
> +}
> +
>  int ddekit_pci_irq_enable(int bus, int slot, int func, int pin, int *irq)
>  {
> -     return 0;
> +  int gsi = -1;
> +
> +  if (find_gsi_from_acpi(bus, slot, func, &gsi))
> +    {
> +      ddekit_printf("Cannot find gsi for: %d:%d:%d\n", bus, slot, func);
> +    }
> +  else if (gsi >= 0)
> +    {
> +      *irq = gsi;
> +    }
> +
> +  return 0;
>  }
> -- 
> 2.39.5
> 
> 

-- 
Samuel
<y> le y est un animal discret se logeant facilement dans un terminal
*** c has changed the topic on channel #ens-mim to ne pas jeter de cacahuetes 
aux ys, svp
 -+- #ens-mim - n'oubliez pas le guide -+-

Reply via email to