From 5c1504fd8feca788d64f09f1c50322af8f7bee85 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 14 Apr 2015 11:29:40 +0200 Subject: [PATCH] wifi: use irq via device interface Issue #1471 --- repos/dde_linux/src/lib/wifi/irq.cc | 26 +++++++++++++--------- repos/dde_linux/src/lib/wifi/pci_driver.cc | 2 +- 2 files changed, 16 insertions(+), 12 deletions(-) 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;