diff --git a/repos/os/run/input.run b/repos/os/run/input.run new file mode 100644 index 000000000..dcadf3ff9 --- /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 4c7b76191..2cb468c67 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 5562bca36..1438e7cf8 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)); }