From 3c5fb420ca3cf62e489736b19c02c070ebf04603 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 10 Apr 2015 13:47:43 +0200 Subject: [PATCH] dde_ipxe: use irq via device interface Issue #1471 --- repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc | 11 ++++++----- repos/dde_ipxe/src/lib/dde_ipxe/include/dde_support.h | 2 +- repos/dde_ipxe/src/lib/dde_ipxe/nic.c | 2 +- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc b/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc index adc4d6711f..672810b6c5 100644 --- a/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc +++ b/repos/dde_ipxe/src/lib/dde_ipxe/dde_support.cc @@ -262,7 +262,7 @@ extern "C" void dde_pci_writel(int pos, dde_uint32_t val) { struct Irq_handler { Server::Entrypoint &ep; - Genode::Irq_connection irq; + Genode::Irq_session_client irq; Genode::Signal_rpc_member dispatcher; typedef void (*irq_handler)(void*); @@ -276,10 +276,10 @@ struct Irq_handler irq.ack_irq(); } - Irq_handler(Server::Entrypoint &ep, int irqnr, + Irq_handler(Server::Entrypoint &ep, Genode::Irq_session_capability cap, irq_handler handler, void *priv) : - ep(ep), irq(irqnr), dispatcher(ep, *this, &Irq_handler::handle), + ep(ep), irq(cap), dispatcher(ep, *this, &Irq_handler::handle), handler(handler), priv(priv) { irq.sigh(dispatcher); @@ -291,7 +291,7 @@ struct Irq_handler static Irq_handler *_irq_handler; -extern "C" int dde_interrupt_attach(int irq, void(*handler)(void *), void *priv) +extern "C" int dde_interrupt_attach(void(*handler)(void *), void *priv) { if (_irq_handler) { PERR("Irq_handler already registered"); @@ -299,8 +299,9 @@ extern "C" int dde_interrupt_attach(int irq, void(*handler)(void *), void *priv) } try { + Pci::Device_client device(pci_drv()._cap); _irq_handler = new (Genode::env()->heap()) - Irq_handler(*_ep, irq, handler, priv); + Irq_handler(*_ep, device.irq(0), handler, priv); } catch (...) { return -1; } return 0; diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/include/dde_support.h b/repos/dde_ipxe/src/lib/dde_ipxe/include/dde_support.h index 7ad98fa13a..86f5619c3a 100644 --- a/repos/dde_ipxe/src/lib/dde_ipxe/include/dde_support.h +++ b/repos/dde_ipxe/src/lib/dde_ipxe/include/dde_support.h @@ -73,7 +73,7 @@ void dde_lock_leave(void); ** Interrupt handling ** ************************/ -int dde_interrupt_attach(int irq, void (*handler)(void *), void *priv); +int dde_interrupt_attach(void (*handler)(void *), void *priv); /****************** diff --git a/repos/dde_ipxe/src/lib/dde_ipxe/nic.c b/repos/dde_ipxe/src/lib/dde_ipxe/nic.c index 965d6111fe..c6aae4c5db 100644 --- a/repos/dde_ipxe/src/lib/dde_ipxe/nic.c +++ b/repos/dde_ipxe/src/lib/dde_ipxe/nic.c @@ -308,7 +308,7 @@ int dde_ipxe_nic_init(void *ep) } /* initialize IRQ handler */ - int err = dde_interrupt_attach(net_dev->dev->desc.irq, irq_handler, 0); + int err = dde_interrupt_attach(irq_handler, 0); if (err) { LOG("attaching to IRQ %02x failed", net_dev->dev->desc.irq); return 0;