From 70acd4b2d5f47103c3c5fcca0bd13f0c19c41aa1 Mon Sep 17 00:00:00 2001 From: Stefan Kalkowski Date: Fri, 22 May 2020 12:19:03 +0200 Subject: [PATCH] os: pl050, pl11x, lan9118 use ARM platform driver Make the framebuffer driver for pl11x chipsets, the ps2 input driver for pl050, and the lan9116 NIC driver independent from the pbxa9 board by using the newly introduced common ARM platform driver API. Ref #3299 --- repos/libports/run/qt5_drivers.inc | 2 +- .../pkg/drivers_interactive-pbxa9/archives | 1 + .../os/recipes/pkg/drivers_nic-pbxa9/archives | 1 + .../drivers_interactive-pbxa9/drivers.config | 83 ++++++++++++++-- .../raw/drivers_nic-pbxa9/drivers.config | 33 ++++++- .../os/recipes/src/lan9118_nic_drv/used_apis | 1 + repos/os/recipes/src/pbxa9_drivers/content.mk | 8 +- repos/os/recipes/src/pbxa9_drivers/used_apis | 1 + .../framebuffer/{spec => }/pl11x/main.cc | 95 +++++++++++-------- .../src/drivers/framebuffer/pl11x/target.mk | 4 + .../framebuffer/spec/pl11x/pbxa9/pl11x_defs.h | 34 ------- .../framebuffer/spec/pl11x/pbxa9/sp810_defs.h | 27 ------ .../framebuffer/spec/pl11x/pbxa9/target.mk | 7 -- .../spec/ps2/{pbxa9 => pl050}/irq_handler.h | 8 +- .../input/spec/ps2/{pbxa9 => pl050}/main.cc | 38 ++++---- .../input/spec/ps2/{pbxa9 => pl050}/pl050.h | 35 +++---- .../input/spec/ps2/{pbxa9 => pl050}/target.mk | 2 +- repos/os/src/drivers/nic/lan9118/lan9118.h | 23 ++--- repos/os/src/drivers/nic/lan9118/main.cc | 36 ++----- 19 files changed, 228 insertions(+), 211 deletions(-) rename repos/os/src/drivers/framebuffer/{spec => }/pl11x/main.cc (65%) create mode 100644 repos/os/src/drivers/framebuffer/pl11x/target.mk delete mode 100644 repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/pl11x_defs.h delete mode 100644 repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/sp810_defs.h delete mode 100644 repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/target.mk rename repos/os/src/drivers/input/spec/ps2/{pbxa9 => pl050}/irq_handler.h (86%) rename repos/os/src/drivers/input/spec/ps2/{pbxa9 => pl050}/main.cc (67%) rename repos/os/src/drivers/input/spec/ps2/{pbxa9 => pl050}/pl050.h (76%) rename repos/os/src/drivers/input/spec/ps2/{pbxa9 => pl050}/target.mk (76%) diff --git a/repos/libports/run/qt5_drivers.inc b/repos/libports/run/qt5_drivers.inc index 708e6922d..5692dbe76 100644 --- a/repos/libports/run/qt5_drivers.inc +++ b/repos/libports/run/qt5_drivers.inc @@ -23,7 +23,7 @@ proc use_fb_drv { feature_arg } { } proc fb_drv_binary { } { - if {[have_spec pbxa9]} { return pbxa9_fb_drv } + if {[have_spec pbxa9]} { return pl11x_fb_drv } if {[have_spec x86]} { return vesa_fb_drv } if {[have_spec imx53]} { return imx53_fb_drv } if {[have_spec rpi]} { return rpi_fb_drv } diff --git a/repos/os/recipes/pkg/drivers_interactive-pbxa9/archives b/repos/os/recipes/pkg/drivers_interactive-pbxa9/archives index d3ceb9b67..cacf1cff6 100644 --- a/repos/os/recipes/pkg/drivers_interactive-pbxa9/archives +++ b/repos/os/recipes/pkg/drivers_interactive-pbxa9/archives @@ -1,3 +1,4 @@ _/src/pbxa9_drivers +_/src/platform_drv _/src/input_filter _/raw/drivers_interactive-pbxa9 diff --git a/repos/os/recipes/pkg/drivers_nic-pbxa9/archives b/repos/os/recipes/pkg/drivers_nic-pbxa9/archives index 562139651..c9527b272 100644 --- a/repos/os/recipes/pkg/drivers_nic-pbxa9/archives +++ b/repos/os/recipes/pkg/drivers_nic-pbxa9/archives @@ -1,2 +1,3 @@ _/src/lan9118_nic_drv +_/src/platform_drv _/raw/drivers_nic-pbxa9 diff --git a/repos/os/recipes/raw/drivers_interactive-pbxa9/drivers.config b/repos/os/recipes/raw/drivers_interactive-pbxa9/drivers.config index a8b1683ca..dda9b9fc4 100644 --- a/repos/os/recipes/raw/drivers_interactive-pbxa9/drivers.config +++ b/repos/os/recipes/raw/drivers_interactive-pbxa9/drivers.config @@ -2,7 +2,6 @@ - @@ -18,26 +17,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + - + - - + + + + + + + + + + + + + - - + + + + + + diff --git a/repos/os/recipes/raw/drivers_nic-pbxa9/drivers.config b/repos/os/recipes/raw/drivers_nic-pbxa9/drivers.config index 6ecea38fa..73de42c61 100644 --- a/repos/os/recipes/raw/drivers_nic-pbxa9/drivers.config +++ b/repos/os/recipes/raw/drivers_nic-pbxa9/drivers.config @@ -15,11 +15,42 @@ + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + diff --git a/repos/os/recipes/src/lan9118_nic_drv/used_apis b/repos/os/recipes/src/lan9118_nic_drv/used_apis index 51485221e..f135ea45d 100644 --- a/repos/os/recipes/src/lan9118_nic_drv/used_apis +++ b/repos/os/recipes/src/lan9118_nic_drv/used_apis @@ -1,3 +1,4 @@ base os +platform_session nic_session diff --git a/repos/os/recipes/src/pbxa9_drivers/content.mk b/repos/os/recipes/src/pbxa9_drivers/content.mk index 2aeef5614..1575cf12a 100644 --- a/repos/os/recipes/src/pbxa9_drivers/content.mk +++ b/repos/os/recipes/src/pbxa9_drivers/content.mk @@ -4,8 +4,6 @@ content: src/drivers src/drivers: mkdir -p $@/framebuffer $@/input/ps2 - cp -r $(REP_DIR)/src/drivers/framebuffer/spec/pl11x/* $@/framebuffer - cp $(REP_DIR)/src/drivers/input/spec/ps2/*.h $@/input/ps2/ - cp -r $(REP_DIR)/src/drivers/input/spec/ps2/pbxa9 $@/input/ps2/ - sed -i "/REQUIRES/s/=.*/= arm/" src/drivers/framebuffer/pbxa9/target.mk - sed -i "/REQUIRES/s/=.*/= arm/" src/drivers/input/ps2/pbxa9/target.mk + cp -r $(REP_DIR)/src/drivers/framebuffer/pl11x/* $@/framebuffer + cp $(REP_DIR)/src/drivers/input/spec/ps2/*.h $@/input/ps2/ + cp -r $(REP_DIR)/src/drivers/input/spec/ps2/pl050 $@/input/ps2/ diff --git a/repos/os/recipes/src/pbxa9_drivers/used_apis b/repos/os/recipes/src/pbxa9_drivers/used_apis index 5a3e77af3..ba05df6f1 100644 --- a/repos/os/recipes/src/pbxa9_drivers/used_apis +++ b/repos/os/recipes/src/pbxa9_drivers/used_apis @@ -2,4 +2,5 @@ base os framebuffer_session input_session +platform_session timer_session diff --git a/repos/os/src/drivers/framebuffer/spec/pl11x/main.cc b/repos/os/src/drivers/framebuffer/pl11x/main.cc similarity index 65% rename from repos/os/src/drivers/framebuffer/spec/pl11x/main.cc rename to repos/os/src/drivers/framebuffer/pl11x/main.cc index a8402c314..19d966308 100644 --- a/repos/os/src/drivers/framebuffer/spec/pl11x/main.cc +++ b/repos/os/src/drivers/framebuffer/pl11x/main.cc @@ -13,22 +13,15 @@ */ /* Genode includes */ -#include +#include #include -#include #include -#include -#include #include -#include #include -#include #include -#include - -/* device configuration */ -#include -#include +#include +#include +#include /*********************************************** @@ -58,15 +51,15 @@ namespace Framebuffer class Main; } -class Framebuffer::Session_component : public Genode::Rpc_object +class Framebuffer::Session_component : + public Genode::Rpc_object { private: - Genode::Dataspace_capability _fb_ds_cap; - Genode::Dataspace_client _fb_ds; - Genode::addr_t _regs_base; - Genode::addr_t _sys_regs_base; - Timer::Connection _timer; + Ram_dataspace_capability _fb_ds_cap; + addr_t _regs_base; + addr_t _sys_regs_base; + Timer::Connection _timer; enum { /** @@ -88,6 +81,22 @@ class Framebuffer::Session_component : public Genode::Rpc_object(), + _sys_mem.local_addr(), + _fb_ds_cap, + _platform.bus_addr_dma_buffer(_fb_ds_cap) }; - /* locally map LCD control registers */ - Io_mem_connection _lcd_io_mem { _env, PL11X_LCD_PHYS, PL11X_LCD_SIZE }; - void * _lcd_base { _env.rm().attach(_lcd_io_mem.dataspace()) }; + Static_root _fb_root { _env.ep().manage(_fb_session) }; - /* locally map system control registers */ - Io_mem_connection _sys_mem { _env, SP810_PHYS, SP810_SIZE }; - void * _sys_base { _env.rm().attach(_sys_mem.dataspace()) }; - - Dataspace_capability _fb_ds_cap { _env.ram().alloc(Framebuffer::FRAMEBUFFER_SIZE) }; - Session_component _fb_session { _env, _lcd_base, _sys_base, _fb_ds_cap }; - Static_root _fb_root { _ep.manage(_fb_session) }; - - Main(Env &env) : _env(env), _ep(_env.ep()) + Main(Env &env) : _env(env) { log("--- pl11x framebuffer driver ---\n"); /* announce service */ - _env.parent().announce(_ep.manage(_fb_root)); + _env.parent().announce(env.ep().manage(_fb_root)); } private: diff --git a/repos/os/src/drivers/framebuffer/pl11x/target.mk b/repos/os/src/drivers/framebuffer/pl11x/target.mk new file mode 100644 index 000000000..7f4e1f99c --- /dev/null +++ b/repos/os/src/drivers/framebuffer/pl11x/target.mk @@ -0,0 +1,4 @@ +TARGET = pl11x_fb_drv +REQUIRES = arm_v7 +SRC_CC = main.cc +LIBS = base diff --git a/repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/pl11x_defs.h b/repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/pl11x_defs.h deleted file mode 100644 index 7ae7c2523..000000000 --- a/repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/pl11x_defs.h +++ /dev/null @@ -1,34 +0,0 @@ -/* - * \brief PL111 display controller definitions for the RealView platform - * \author Norman Feske - * \date 2010-03-23 - */ - -/* - * Copyright (C) 2010-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _INCLUDE__SPEC__PBXA9__PL11X_DEFS_H_ -#define _INCLUDE__SPEC__PBXA9__PL11X_DEFS_H_ - -enum { - PL11X_LCD_PHYS = 0x10020000, - PL11X_LCD_SIZE = 0x1000, - - /** - * Offsets of LCD control register offsets (in 32bit words) - */ - PL11X_REG_TIMING0 = 0, - PL11X_REG_TIMING1 = 1, - PL11X_REG_TIMING2 = 2, - PL11X_REG_TIMING3 = 3, - PL11X_REG_UPBASE = 4, - PL11X_REG_LPBASE = 5, - PL11X_REG_CTRL = 6, - PL11X_REG_IMSC = 7, -}; - -#endif /* _INCLUDE__SPEC__PBXA9__PL11X_DEFS_H_ */ diff --git a/repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/sp810_defs.h b/repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/sp810_defs.h deleted file mode 100644 index 732f09384..000000000 --- a/repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/sp810_defs.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * \brief SP810 System Controller. - * \author Stefan Kalkowski - * \date 2011-11-14 - */ - -/* - * Copyright (C) 2011-2017 Genode Labs GmbH - * - * This file is part of the Genode OS framework, which is distributed - * under the terms of the GNU Affero General Public License version 3. - */ - -#ifndef _INCLUDE__SPEC__PBXA9__SP810_DEFS_H_ -#define _INCLUDE__SPEC__PBXA9__SP810_DEFS_H_ - -enum { - - SP810_PHYS = 0x10001000, - SP810_SIZE = 0x1000, - - SP810_REG_ID = 0x0, - SP810_REG_OSCCLCD = 0x1c, - SP810_REG_LOCK = 0x20, -}; - -#endif /* _INCLUDE__SPEC__PBXA9__SP810_DEFS_H_ */ diff --git a/repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/target.mk b/repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/target.mk deleted file mode 100644 index 0ad73d948..000000000 --- a/repos/os/src/drivers/framebuffer/spec/pl11x/pbxa9/target.mk +++ /dev/null @@ -1,7 +0,0 @@ -TARGET = pbxa9_fb_drv -REQUIRES = arm_v7 -SRC_CC = main.cc -LIBS = base -INC_DIR += $(PRG_DIR) - -vpath %.cc $(PRG_DIR)/.. diff --git a/repos/os/src/drivers/input/spec/ps2/pbxa9/irq_handler.h b/repos/os/src/drivers/input/spec/ps2/pl050/irq_handler.h similarity index 86% rename from repos/os/src/drivers/input/spec/ps2/pbxa9/irq_handler.h rename to repos/os/src/drivers/input/spec/ps2/pl050/irq_handler.h index 9fd33143a..4355ddec9 100644 --- a/repos/os/src/drivers/input/spec/ps2/pbxa9/irq_handler.h +++ b/repos/os/src/drivers/input/spec/ps2/pl050/irq_handler.h @@ -17,7 +17,7 @@ /* Genode includes */ #include #include -#include +#include /* local includes */ #include "input_driver.h" @@ -27,7 +27,7 @@ class Irq_handler { private: - Genode::Irq_connection _irq; + Genode::Irq_session_client _irq; Genode::Signal_handler _dispatcher; Input_driver &_input_driver; @@ -42,10 +42,10 @@ class Irq_handler public: - Irq_handler(Genode::Env &env, int irq_number, + Irq_handler(Genode::Env &env, Genode::Irq_session_capability irq_cap, Serial_interface &, Input_driver &input_driver) : - _irq(env, irq_number), + _irq(irq_cap), _dispatcher(env.ep(), *this, &Irq_handler::_handle), _input_driver(input_driver) { diff --git a/repos/os/src/drivers/input/spec/ps2/pbxa9/main.cc b/repos/os/src/drivers/input/spec/ps2/pl050/main.cc similarity index 67% rename from repos/os/src/drivers/input/spec/ps2/pbxa9/main.cc rename to repos/os/src/drivers/input/spec/ps2/pl050/main.cc index 048042117..d42c1f8a1 100644 --- a/repos/os/src/drivers/input/spec/ps2/pbxa9/main.cc +++ b/repos/os/src/drivers/input/spec/ps2/pl050/main.cc @@ -14,9 +14,9 @@ /* Genode includes */ #include #include -#include #include #include +#include #include /* local includes */ @@ -31,33 +31,30 @@ namespace Ps2 { struct Main; } struct Ps2::Main { - Genode::Env &_env; + using Device = Platform::Device_client; - enum { - PL050_KEYBD_PHYS = 0x10006000, - PL050_KEYBD_SIZE = 0x1000, - PL050_MOUSE_PHYS = 0x10007000, - PL050_MOUSE_SIZE = 0x1000, - PL050_KEYBD_IRQ = Pbxa9::KMI_0_IRQ, - PL050_MOUSE_IRQ = Pbxa9::KMI_1_IRQ, - }; + Genode::Env & _env; + Platform::Connection _platform { _env }; + + Device _device_0 { _platform.device_by_index(0) }; + Device _device_1 { _platform.device_by_index(1) }; + Pl050 _pl050 { _env, _device_0.io_mem_dataspace(), + _device_1.io_mem_dataspace() }; - Pl050 _pl050 { _env, PL050_KEYBD_PHYS, PL050_KEYBD_SIZE, - PL050_MOUSE_PHYS, PL050_MOUSE_SIZE }; Input::Session_component _session { _env, _env.ram() }; - Input::Root_component _root { _env.ep().rpc_ep(), _session }; + Input::Root_component _root { _env.ep().rpc_ep(), _session }; - Timer::Connection _timer { _env }; - - Genode::Attached_rom_dataspace _config { _env, "config" }; - - Genode::Reconstructible _verbose { _config.xml() }; + Timer::Connection _timer { _env }; + Genode::Attached_rom_dataspace _config { _env, "config" }; + Genode::Reconstructible _verbose { _config.xml() }; Mouse _mouse { _pl050.aux_interface(), _session.event_queue(), _timer, *_verbose }; Keyboard _keyboard { _pl050.kbd_interface(), _session.event_queue(), false, *_verbose }; - Irq_handler _mouse_irq { _env, PL050_MOUSE_IRQ, _pl050.aux_interface(), _mouse }; - Irq_handler _keyboard_irq { _env, PL050_KEYBD_IRQ, _pl050.kbd_interface(), _keyboard }; + Irq_handler _mouse_irq { _env, _device_1.irq(), + _pl050.aux_interface(), _mouse }; + Irq_handler _keyboard_irq { _env, _device_0.irq(), + _pl050.kbd_interface(), _keyboard }; Led_state _capslock { _env, "capslock" }, _numlock { _env, "numlock" }, @@ -94,4 +91,3 @@ struct Ps2::Main void Component::construct(Genode::Env &env) { static Ps2::Main main(env); } - diff --git a/repos/os/src/drivers/input/spec/ps2/pbxa9/pl050.h b/repos/os/src/drivers/input/spec/ps2/pl050/pl050.h similarity index 76% rename from repos/os/src/drivers/input/spec/ps2/pbxa9/pl050.h rename to repos/os/src/drivers/input/spec/ps2/pl050/pl050.h index b1f39bd74..efb52ae9b 100644 --- a/repos/os/src/drivers/input/spec/ps2/pbxa9/pl050.h +++ b/repos/os/src/drivers/input/spec/ps2/pl050/pl050.h @@ -16,7 +16,8 @@ /* Genode includes */ #include -#include +#include +#include /* local includes */ #include "serial_interface.h" @@ -66,9 +67,9 @@ class Pl050 _Channel(_Channel const &); _Channel &operator = (_Channel const &); - Genode::Mutex _mutex { }; - Genode::Attached_io_mem_dataspace _io_mem; - volatile Genode::uint32_t *_reg_base; + Genode::Mutex _mutex { }; + Genode::Attached_dataspace _io_mem_ds; + volatile Genode::uint32_t * _reg_base; /** * Return true if input is available @@ -78,17 +79,11 @@ class Pl050 public: - /** - * Constructor - * - * \param phys_base local address of the channel's device - * registers - */ - _Channel(Genode::Env &env, - Genode::addr_t phys_base, Genode::size_t phys_size) + _Channel(Genode::Env & env, + Genode::Io_mem_dataspace_capability cap) : - _io_mem(env, phys_base, phys_size), - _reg_base(_io_mem.local_addr()) + _io_mem_ds(env.rm(), cap), + _reg_base(_io_mem_ds.local_addr()) { } /** @@ -129,13 +124,11 @@ class Pl050 public: - Pl050(Genode::Env &env, - Genode::addr_t keyb_mmio_base, - Genode::size_t keyb_mmio_size, - Genode::addr_t mouse_mmio_base, - Genode::size_t mouse_mmio_size) : - _kbd(env, keyb_mmio_base, keyb_mmio_size), - _aux(env, mouse_mmio_base, mouse_mmio_size) + Pl050(Genode::Env & env, + Genode::Io_mem_dataspace_capability keyb_cap, + Genode::Io_mem_dataspace_capability mouse_cap) : + _kbd(env, keyb_cap), + _aux(env, mouse_cap) { _kbd.enable_irq(); _aux.enable_irq(); diff --git a/repos/os/src/drivers/input/spec/ps2/pbxa9/target.mk b/repos/os/src/drivers/input/spec/ps2/pl050/target.mk similarity index 76% rename from repos/os/src/drivers/input/spec/ps2/pbxa9/target.mk rename to repos/os/src/drivers/input/spec/ps2/pl050/target.mk index d189d5285..e8b5d6842 100644 --- a/repos/os/src/drivers/input/spec/ps2/pbxa9/target.mk +++ b/repos/os/src/drivers/input/spec/ps2/pl050/target.mk @@ -1,4 +1,4 @@ -TARGET = pbxa9_ps2_drv +TARGET = pl050_input_drv REQUIRES = arm_v7 SRC_CC = main.cc LIBS = base diff --git a/repos/os/src/drivers/nic/lan9118/lan9118.h b/repos/os/src/drivers/nic/lan9118/lan9118.h index 485e601d1..636db377e 100644 --- a/repos/os/src/drivers/nic/lan9118/lan9118.h +++ b/repos/os/src/drivers/nic/lan9118/lan9118.h @@ -15,10 +15,10 @@ #ifndef _DRIVERS__NIC__SPEC__LAN9118__LAN9118_H_ #define _DRIVERS__NIC__SPEC__LAN9118__LAN9118_H_ -#include +#include #include #include -#include +#include #include #include @@ -74,11 +74,11 @@ class Lan9118 : public Nic::Session_component MAC_CSR_CMD_WRITE = (0 << 30), }; - Genode::Attached_io_mem_dataspace _mmio; + Genode::Attached_dataspace _mmio; volatile Genode::uint32_t *_reg_base; Timer::Connection _timer; Nic::Mac_address _mac_addr { }; - Genode::Irq_connection _irq; + Genode::Irq_session_client _irq; Genode::Signal_handler _irq_handler; /** @@ -304,17 +304,18 @@ class Lan9118 : public Nic::Session_component * * \throw Device_not_supported */ - Lan9118(Genode::addr_t mmio_base, Genode::size_t mmio_size, int irq, - Genode::size_t const tx_buf_size, - Genode::size_t const rx_buf_size, - Genode::Allocator &rx_block_md_alloc, - Genode::Env &env) + Lan9118(Genode::Io_mem_dataspace_capability ds_cap, + Genode::Irq_session_capability irq_cap, + Genode::size_t const tx_buf_size, + Genode::size_t const rx_buf_size, + Genode::Allocator & rx_block_md_alloc, + Genode::Env & env) : Session_component(tx_buf_size, rx_buf_size, Genode::CACHED, rx_block_md_alloc, env), - _mmio(env, mmio_base, mmio_size), + _mmio(env.rm(), ds_cap), _reg_base(_mmio.local_addr()), _timer(env), - _irq(env, irq), + _irq(irq_cap), _irq_handler(env.ep(), *this, &Lan9118::_handle_irq) { _irq.sigh(_irq_handler); diff --git a/repos/os/src/drivers/nic/lan9118/main.cc b/repos/os/src/drivers/nic/lan9118/main.cc index 91a4d9cec..231c88254 100644 --- a/repos/os/src/drivers/nic/lan9118/main.cc +++ b/repos/os/src/drivers/nic/lan9118/main.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include /* driver code */ @@ -30,28 +31,9 @@ class Root : public Genode::Root_component { private: - enum { - - /** - * If no resource addresses are given, we take these Realview - * platform addresses as default ones. - */ - REALVIEW_MMIO_BASE = 0x4e000000, - REALVIEW_IRQ = 60, - - /** - * Size of MMIO resource - * - * The device spans actually a much larger - * resource. However, only the first page is needed. - */ - LAN9118_MMIO_SIZE = 0x1000, - }; - - Genode::Env &_env; - Genode::Attached_rom_dataspace _config { _env, "config" }; - Genode::addr_t _mmio_base { REALVIEW_MMIO_BASE }; - unsigned _irq { REALVIEW_IRQ }; + Genode::Env & _env; + Platform::Connection _platform { _env }; + Platform::Device_client _device { _platform.device_by_index(0) }; protected: @@ -75,7 +57,7 @@ class Root : public Genode::Root_component } return new (Root::md_alloc()) - Lan9118(_mmio_base, LAN9118_MMIO_SIZE, _irq, + Lan9118(_device.io_mem_dataspace(), _device.irq(), tx_buf_size, rx_buf_size, *md_alloc(), _env); } @@ -84,13 +66,7 @@ class Root : public Genode::Root_component Root(Genode::Env &env, Genode::Allocator &md_alloc) : Genode::Root_component(env.ep(), md_alloc), - _env(env) - { - _mmio_base = - _config.xml().attribute_value("mmio_base", - (Genode::addr_t)REALVIEW_MMIO_BASE); - _irq = _config.xml().attribute_value("irq", REALVIEW_IRQ); - } + _env(env) { } };