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) { } };