diff --git a/repos/os/run/input.run b/repos/os/run/input.run
new file mode 100644
index 0000000000..dcadf3ff9a
--- /dev/null
+++ b/repos/os/run/input.run
@@ -0,0 +1,120 @@
+#
+# Build
+#
+
+set build_components {
+ core init
+ drivers/input
+ drivers/timer
+ drivers/pci
+ test/input
+}
+
+build $build_components
+
+create_boot_directory
+
+#
+# Generate config
+#
+
+append config {
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
+
+install_config $config
+
+#
+# Boot modules
+#
+
+# generic modules
+set boot_modules {
+ core init
+ timer
+ pci_drv
+ ps2_drv
+ test-input
+}
+
+# platform-specific modules
+
+build_boot_image $boot_modules
+
+append qemu_args " -m 256 "
+
+run_genode_until forever
diff --git a/repos/os/src/drivers/input/ps2/irq_handler.h b/repos/os/src/drivers/input/ps2/irq_handler.h
index 4c7b76191a..2cb468c670 100644
--- a/repos/os/src/drivers/input/ps2/irq_handler.h
+++ b/repos/os/src/drivers/input/ps2/irq_handler.h
@@ -26,7 +26,7 @@ class Irq_handler
{
private:
- Genode::Irq_connection _irq;
+ Genode::Irq_session_client _irq;
Genode::Signal_rpc_member _dispatcher;
Input_driver &_input_driver;
@@ -40,17 +40,16 @@ class Irq_handler
public:
- Irq_handler(Server::Entrypoint &ep,
- int irq_number, Input_driver &input_driver)
+ Irq_handler(Server::Entrypoint &ep, Input_driver &input_driver,
+ Genode::Irq_session_capability irq_cap)
:
- _irq(irq_number),
+ _irq(irq_cap),
_dispatcher(ep, *this, &Irq_handler::_handle),
_input_driver(input_driver)
{
_irq.sigh(_dispatcher);
_irq.ack_irq();
}
-
};
#endif /* _IRQ_HANDLER_H_ */
diff --git a/repos/os/src/drivers/input/ps2/x86/main.cc b/repos/os/src/drivers/input/ps2/x86/main.cc
index 5562bca36c..1438e7cf88 100644
--- a/repos/os/src/drivers/input/ps2/x86/main.cc
+++ b/repos/os/src/drivers/input/ps2/x86/main.cc
@@ -11,14 +11,16 @@
* under the terms of the GNU General Public License version 2.
*/
-/* Genode includes */
+/* base includes */
#include
#include
#include
+
+/* os includes */
#include
#include
-#include
#include
+#include
/* local includes */
#include "i8042.h"
@@ -40,16 +42,20 @@ struct Main
Ps2_mouse ps2_mouse;
Ps2_keyboard ps2_keybd;
- Irq_handler ps2_mouse_irq;
+ Pci::Connection platform;
+ Pci::Device_client device_ps2;
+
Irq_handler ps2_keybd_irq;
+ Irq_handler ps2_mouse_irq;
Main(Server::Entrypoint &ep)
: ep(ep), root(ep.rpc_ep(), session),
ps2_mouse(*i8042.aux_interface(), session.event_queue()),
ps2_keybd(*i8042.kbd_interface(), session.event_queue(),
i8042.kbd_xlate()),
- ps2_mouse_irq(ep, 12, ps2_mouse),
- ps2_keybd_irq(ep, 1, ps2_keybd)
+ device_ps2(platform.device("PS2")),
+ ps2_keybd_irq(ep, ps2_keybd, device_ps2.irq(0)),
+ ps2_mouse_irq(ep, ps2_mouse, device_ps2.irq(1))
{
env()->parent()->announce(ep.manage(root));
}