diff --git a/repos/dde_linux/src/lib/wifi/irq.cc b/repos/dde_linux/src/lib/wifi/irq.cc
index 834a626416..ee8cfa050f 100644
--- a/repos/dde_linux/src/lib/wifi/irq.cc
+++ b/repos/dde_linux/src/lib/wifi/irq.cc
@@ -17,6 +17,7 @@
#include
#include
#include
+#include
/* local includes */
#include
@@ -80,6 +81,8 @@ namespace Lx {
static void run_irq(void *args);
+extern "C" Pci::Device_capability pci_device_cap;
+
/**
* Lx::Irq
*/
@@ -94,12 +97,12 @@ class Lx::Irq
{
private:
- Name_composer _name;
+ Name_composer _name;
- unsigned int _irq; /* IRQ number */
- Genode::Irq_connection _irq_conn;
- Lx::List _handler; /* List of registered handlers */
- Irq_task _task;
+ unsigned int _irq; /* IRQ number */
+ Genode::Irq_session_client _irq_sess;
+ Lx::List _handler; /* List of registered handlers */
+ Irq_task _task;
Genode::Signal_transmitter _sender;
Genode::Signal_rpc_member _dispatcher;
@@ -143,18 +146,19 @@ class Lx::Irq
/**
* Constructor
*/
- Context(Server::Entrypoint &ep, unsigned irq)
+ Context(Server::Entrypoint &ep, unsigned irq,
+ Pci::Device_capability pci_dev)
:
_name(irq),
_irq(irq),
- _irq_conn(irq),
+ _irq_sess(Pci::Device_client(pci_dev).irq(0)),
_task(run_irq, this, _name.name),
_dispatcher(ep, *this, &Context::_handle)
{
- _irq_conn.sigh(_dispatcher);
+ _irq_sess.sigh(_dispatcher);
/* initial ack to receive further IRQ signals */
- _irq_conn.ack_irq();
+ _irq_sess.ack_irq();
}
/**
@@ -175,7 +179,7 @@ class Lx::Irq
break;
}
- _irq_conn.ack_irq();
+ _irq_sess.ack_irq();
}
/**
@@ -228,7 +232,7 @@ class Lx::Irq
/* if this IRQ is not registered */
if (!ctx)
- ctx = new (&_context_alloc) Context(_ep, irq);
+ ctx = new (&_context_alloc) Context(_ep, irq, pci_device_cap);
/* register Linux handler */
Lx_irq_handler *h = new (&_handler_alloc)
diff --git a/repos/dde_linux/src/lib/wifi/pci_driver.cc b/repos/dde_linux/src/lib/wifi/pci_driver.cc
index 8ff12ba954..5c9fd95137 100644
--- a/repos/dde_linux/src/lib/wifi/pci_driver.cc
+++ b/repos/dde_linux/src/lib/wifi/pci_driver.cc
@@ -251,7 +251,7 @@ struct Dma_object : Memory_object_base
** Linux interface **
*********************/
-static Pci::Device_capability pci_device_cap;
+extern "C" { Pci::Device_capability pci_device_cap; }
static Pci::Connection *pci()
{
static Pci::Connection _pci;