From 9f9a5186e0a0877eb7be1d0370863f9ab51f5ea0 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Thu, 28 Apr 2022 15:56:02 +0200 Subject: [PATCH] ps2_drv: use generic platform API Ref genodelabs/genode#4578 --- repos/base/board/pc/devices | 13 ++++++++++++ repos/os/run/input.run | 28 ++++++++++++++++++-------- repos/os/src/drivers/ps2/irq_handler.h | 18 ++++++++--------- repos/os/src/drivers/ps2/x86/i8042.h | 13 ++++++------ repos/os/src/drivers/ps2/x86/main.cc | 19 ++++------------- 5 files changed, 52 insertions(+), 39 deletions(-) create mode 100644 repos/base/board/pc/devices diff --git a/repos/base/board/pc/devices b/repos/base/board/pc/devices new file mode 100644 index 0000000000..b5ca5a1261 --- /dev/null +++ b/repos/base/board/pc/devices @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/repos/os/run/input.run b/repos/os/run/input.run index fbd05ac87e..ae2cd0fe8f 100644 --- a/repos/os/run/input.run +++ b/repos/os/run/input.run @@ -6,9 +6,7 @@ assert_spec x86 set build_components { core init timer server/dynamic_rom server/event_dump } -source ${genode_dir}/repos/base/run/platform_drv.inc -append_platform_drv_build_components - +lappend_if [have_board pc] build_components drivers/platform lappend_if [have_board pc] build_components drivers/ps2 lappend_if [have_board linux] build_components drivers/framebuffer/sdl lappend_if [have_board linux] build_components server/nitpicker @@ -50,9 +48,24 @@ append config { } -append_platform_drv_config - append_if [have_board pc] config { + + + + + + + + + + + + + + + + + -#include +#include /* local includes */ #include "input_driver.h" @@ -25,14 +25,14 @@ class Irq_handler { private: - Genode::Irq_session_client _irq; + Platform::Device::Irq _irq; Genode::Signal_handler _handler; Input_driver &_input_driver; Event::Session_client &_event_session; void _handle() { - _irq.ack_irq(); + _irq.ack(); _event_session.with_batch([&] (Event::Session_client::Batch &batch) { while (_input_driver.event_pending()) @@ -42,18 +42,18 @@ class Irq_handler public: - Irq_handler(Genode::Entrypoint &ep, - Input_driver &input_driver, - Event::Session_client &event_session, - Genode::Irq_session_capability irq_cap) + Irq_handler(Genode::Entrypoint &ep, + Input_driver &input_driver, + Event::Session_client &event_session, + Platform::Device &device, + unsigned idx) : - _irq(irq_cap), + _irq(device, {idx}), _handler(ep, *this, &Irq_handler::_handle), _input_driver(input_driver), _event_session(event_session) { _irq.sigh(_handler); - _irq.ack_irq(); } }; diff --git a/repos/os/src/drivers/ps2/x86/i8042.h b/repos/os/src/drivers/ps2/x86/i8042.h index 437004aa25..3105684d7f 100644 --- a/repos/os/src/drivers/ps2/x86/i8042.h +++ b/repos/os/src/drivers/ps2/x86/i8042.h @@ -14,7 +14,7 @@ #ifndef _DRIVERS__INPUT__SPEC__PS2__X86__I8042_H_ #define _DRIVERS__INPUT__SPEC__PS2__X86__I8042_H_ -#include +#include #include #include "serial_interface.h" @@ -179,8 +179,8 @@ class I8042 private: - Genode::Io_port_session_client _data_port; /* data port */ - Genode::Io_port_session_client _stat_port; /* status/command port */ + Platform::Device::Io_port_range _data_port; /* data port */ + Platform::Device::Io_port_range _stat_port; /* status/command port */ bool _kbd_xlate = false; /* translation mode to scan-code set 1 */ @@ -266,11 +266,10 @@ class I8042 /** * Constructor */ - I8042(Genode::Io_port_session_capability cap_data, - Genode::Io_port_session_capability cap_status) + I8042(Platform::Device & device) : - _data_port(cap_data), - _stat_port(cap_status), + _data_port(device, {0}), + _stat_port(device, {1}), _kbd_interface(*this, false), _aux_interface(*this, true) { diff --git a/repos/os/src/drivers/ps2/x86/main.cc b/repos/os/src/drivers/ps2/x86/main.cc index de195f5d9f..ee2160cfa2 100644 --- a/repos/os/src/drivers/ps2/x86/main.cc +++ b/repos/os/src/drivers/ps2/x86/main.cc @@ -18,7 +18,6 @@ /* os includes */ #include -#include #include /* local includes */ @@ -44,21 +43,11 @@ struct Ps2::Main Event::Connection _event { _env }; Platform::Connection _platform { _env }; + Platform::Device _device { _platform }; Timer::Connection _timer { _env }; - Platform::Device_capability _ps2_device_cap() - { - return _platform.with_upgrade([&] () { - return _platform.device("PS2"); }); - } - - Platform::Device_client _device_ps2 { _ps2_device_cap() }; - - enum { REG_IOPORT_DATA = 0, REG_IOPORT_STATUS = 1 }; - - I8042 _i8042 { _device_ps2.io_port(REG_IOPORT_DATA), - _device_ps2.io_port(REG_IOPORT_STATUS) }; + I8042 _i8042 { _device }; Attached_rom_dataspace _config { _env, "config" }; @@ -70,8 +59,8 @@ struct Ps2::Main Mouse _mouse { _i8042.aux_interface(), _timer, *_verbose }; - Irq_handler _keyboard_irq { _env.ep(), _keyboard, _event, _device_ps2.irq(0) }; - Irq_handler _mouse_irq { _env.ep(), _mouse, _event, _device_ps2.irq(1) }; + Irq_handler _keyboard_irq { _env.ep(), _keyboard, _event, _device, 0 }; + Irq_handler _mouse_irq { _env.ep(), _mouse, _event, _device, 1 }; Led_state _capslock { _env, "capslock" }, _numlock { _env, "numlock" },