diff --git a/repos/libports/src/drivers/framebuffer/vesa/main.cc b/repos/libports/src/drivers/framebuffer/vesa/main.cc index a07a64357..53d90ecb4 100644 --- a/repos/libports/src/drivers/framebuffer/vesa/main.cc +++ b/repos/libports/src/drivers/framebuffer/vesa/main.cc @@ -25,6 +25,7 @@ #include #include #include +#include /* Local */ #include "framebuffer.h" @@ -94,7 +95,7 @@ namespace Framebuffer { Genode::Dataspace_capability _fb_ds; void *_fb_addr; - Genode::Signal_context_capability _sync_sigh; + Timer::Connection _timer; void _refresh_buffered(int x, int y, int w, int h) { @@ -184,16 +185,14 @@ namespace Framebuffer { void sync_sigh(Genode::Signal_context_capability sigh) override { - _sync_sigh = sigh; + _timer.sigh(sigh); + _timer.trigger_periodic(10*1000); } void refresh(int x, int y, int w, int h) override { if (_buffered) _refresh_buffered(x, y, w, h); - - if (_sync_sigh.valid()) - Signal_transmitter(_sync_sigh).submit(); } }; diff --git a/repos/os/src/drivers/framebuffer/spec/exynos/main.cc b/repos/os/src/drivers/framebuffer/spec/exynos/main.cc index 21d480555..bceaf8002 100644 --- a/repos/os/src/drivers/framebuffer/spec/exynos/main.cc +++ b/repos/os/src/drivers/framebuffer/spec/exynos/main.cc @@ -14,6 +14,7 @@ /* Genode includes */ #include #include +#include #include #include #include @@ -46,7 +47,7 @@ class Framebuffer::Session_component size_t _size; Dataspace_capability _ds; addr_t _phys_base; - Signal_context_capability _sync_sigh; + Timer::Connection _timer; /** * Convert Driver::Format to Framebuffer::Mode::Format @@ -101,14 +102,11 @@ class Framebuffer::Session_component void sync_sigh(Genode::Signal_context_capability sigh) override { - _sync_sigh = sigh; + _timer.sigh(sigh); + _timer.trigger_periodic(10*1000); } - void refresh(int, int, int, int) override - { - if (_sync_sigh.valid()) - Signal_transmitter(_sync_sigh).submit(); - } + void refresh(int, int, int, int) override { } }; diff --git a/repos/os/src/drivers/framebuffer/spec/imx53/main.cc b/repos/os/src/drivers/framebuffer/spec/imx53/main.cc index 18a63d6d6..b85f12805 100644 --- a/repos/os/src/drivers/framebuffer/spec/imx53/main.cc +++ b/repos/os/src/drivers/framebuffer/spec/imx53/main.cc @@ -8,6 +8,7 @@ /* Genode includes */ #include #include +#include #include #include #include @@ -41,7 +42,8 @@ class Framebuffer::Session_component : Genode::Dataspace_capability _fb_ds; void *_fb_addr; - Signal_context_capability _sync_sigh; + Timer::Connection _timer; + Ipu &_ipu; @@ -95,16 +97,14 @@ class Framebuffer::Session_component : void sync_sigh(Genode::Signal_context_capability sigh) override { - _sync_sigh = sigh; + _timer.sigh(sigh); + _timer.trigger_periodic(10*1000); } void refresh(int x, int y, int w, int h) override { if (_buffered) _refresh_buffered(x, y, w, h); - - if (_sync_sigh.valid()) - Signal_transmitter(_sync_sigh).submit(); } void overlay(Genode::addr_t phys_base, int x, int y, int alpha) { diff --git a/repos/os/src/drivers/framebuffer/spec/pl11x/main.cc b/repos/os/src/drivers/framebuffer/spec/pl11x/main.cc index 5cd847f9e..ae30dac74 100644 --- a/repos/os/src/drivers/framebuffer/spec/pl11x/main.cc +++ b/repos/os/src/drivers/framebuffer/spec/pl11x/main.cc @@ -18,6 +18,7 @@ #include #include #include +#include #include #include #include @@ -55,12 +56,11 @@ namespace Framebuffer { 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; - Genode::Signal_context_capability _sync_sigh; + 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; enum { /** @@ -162,13 +162,13 @@ namespace Framebuffer void mode_sigh(Genode::Signal_context_capability) override { } - void sync_sigh(Genode::Signal_context_capability sigh) override { _sync_sigh = sigh; } - - void refresh(int x, int y, int w, int h) override + void sync_sigh(Genode::Signal_context_capability sigh) override { - if (_sync_sigh.valid()) - Genode::Signal_transmitter(_sync_sigh).submit(); + _timer.sigh(sigh); + _timer.trigger_periodic(10*1000); } + + void refresh(int x, int y, int w, int h) override { } }; diff --git a/repos/os/src/drivers/framebuffer/spec/rpi/main.cc b/repos/os/src/drivers/framebuffer/spec/rpi/main.cc index 583b72039..be10df6aa 100644 --- a/repos/os/src/drivers/framebuffer/spec/rpi/main.cc +++ b/repos/os/src/drivers/framebuffer/spec/rpi/main.cc @@ -23,6 +23,7 @@ #include #include #include +#include namespace Framebuffer { using namespace Genode; @@ -38,7 +39,7 @@ class Framebuffer::Session_component : public Genode::Rpc_object _bb_mem; Attached_io_mem_dataspace _fb_mem; - Signal_context_capability _sync_sigh; + Timer::Connection _timer; void _refresh_buffered(int x, int y, int w, int h) { @@ -95,16 +96,14 @@ class Framebuffer::Session_component : public Genode::Rpc_object #include #include +#include /* local includes */ #include @@ -66,7 +67,7 @@ class Framebuffer::Session_component : public Genode::Rpc_object Mode _mode; - Genode::Signal_context_capability _sync_sigh; + Timer::Connection _timer; public: @@ -83,7 +84,8 @@ class Framebuffer::Session_component : public Genode::Rpc_object void sync_sigh(Genode::Signal_context_capability sigh) override { - _sync_sigh = sigh; + _timer.sigh(sigh); + _timer.trigger_periodic(10*1000); } void refresh(int x, int y, int w, int h) override @@ -110,9 +112,6 @@ class Framebuffer::Session_component : public Genode::Rpc_object /* flush pixels in sdl window */ SDL_UpdateRect(screen, x1, y1, x2 - x1 + 1, y2 - y1 + 1); } - - if (_sync_sigh.valid()) - Genode::Signal_transmitter(_sync_sigh).submit(); } };