vbox5: use nitpicker session

Issue #3196
This commit is contained in:
Alexander Boettcher 2019-03-04 13:53:40 +01:00 committed by Norman Feske
parent af97a581e3
commit 3b36542212
12 changed files with 226 additions and 186 deletions

View File

@ -3,11 +3,8 @@ _/src/vbox5-nova
_/src/base-nova
_/src/libc
_/src/init
_/src/nit_fb
_/src/libc
_/src/posix
_/src/zlib
_/src/nit_fb
_/src/libiconv
_/src/stdcxx
_/src/vfs

View File

@ -19,7 +19,6 @@
<rom label="init.config"/>
<rom label="ld.lib.so"/>
<rom label="init"/>
<rom label="nit_fb"/>
<rom label="timer"/>
<rom label="virtualbox5-nova"/>
<rom label="libc.lib.so"/>

View File

@ -30,18 +30,6 @@
</route>
</start>
<start name="nit_fb" priority="0">
<resource name="RAM" quantum="8M" />
<provides>
<service name="Framebuffer" /> <service name="Input" />
</provides>
<config xpos="32" ypos="32" initial_width="-64" initial_height="-64" />
<route>
<service name="Nitpicker"> <parent label=""/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="vbox" priority="-1" caps="1000">
<binary name="virtualbox5-nova" />
<resource name="RAM" quantum="8G"/>
@ -69,7 +57,7 @@
<service name="Report" label="shape"> <parent label="shape"/> </service>
<service name="ROM" label="clipboard"> <parent label="clipboard"/> </service>
<service name="Report" label="clipboard"> <parent label="clipboard"/> </service>
<any-service> <parent/> <child name="nit_fb"/> </any-service>
<any-service> <parent/> </any-service>
</route>
</start>

View File

@ -14,7 +14,6 @@ if { [have_include "power_on/qemu"] || ![have_spec nova] || ![have_spec x86_64]}
}
set build_components {
core init timer
drivers/framebuffer
drivers/input
drivers/usb
@ -37,6 +36,11 @@ build $build_components
create_boot_directory
import_from_depot [depot_user]/src/[base_src] \
[depot_user]/src/init \
[depot_user]/src/nitpicker
set config {
<config prio_levels="4">
<parent-provides>
@ -142,6 +146,39 @@ append config {
<provides><service name="Framebuffer"/></provides>
</start>
<start name="nitpicker" priority="-1">
<resource name="RAM" quantum="12M"/>
<provides><service name="Nitpicker"/></provides>
<route>
<service name="Framebuffer"> <child name="fb_drv" /> </service>
<service name="Report"> <child name="report_rom" /> </service>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<report focus="yes" hover="yes" />
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
<domain name="cpu_load" layer="2" content="client" label="no" />
<domain name="" layer="3" content="client" label="no" focus="click" hover="always" />
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</start>
<start name="pointer" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides> <service name="Report"/> </provides>
<config shapes="yes"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<service name="ROM" label="hover"> <child name="report_rom"/> </service>
<service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="log_terminal" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides>
@ -153,6 +190,8 @@ append config {
<resource name="RAM" quantum="1M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
<config>
<policy label="pointer -> hover" report="nitpicker -> hover"/>
<policy label="pointer -> xray" report="nitpicker -> xray"/>
<policy label="usb_report_filter -> devices" report="usb_drv -> devices"/>
<policy label="usb_report_filter -> usb_drv_config" report="usb_drv -> config"/>
<policy label="virtualbox -> usb_devices" report="usb_report_filter -> usb_devices"/>

View File

@ -196,6 +196,8 @@ set config_of_app {
<resource name="RAM" quantum="1M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
<config>
<policy label="pointer -> hover" report="nitpicker -> hover"/>
<policy label="pointer -> xray" report="nitpicker -> xray"/>
<policy label="usb_report_filter -> devices" report="usb_drv -> devices"/>
<policy label="usb_report_filter -> usb_drv_config" report="usb_drv -> config"/>
<policy label="vbox1 -> usb_devices" report="usb_report_filter -> usb_devices"/>
@ -224,6 +226,40 @@ append config_of_app {
</route>
</start>
<start name="nitpicker" priority="-1">
<resource name="RAM" quantum="12M"/>
<provides><service name="Nitpicker"/></provides>
<route>
<service name="Framebuffer"> <child name="fb_drv" /> </service>
<service name="Input"> <child name="input_merger" /> </service>
<service name="Report"> <child name="report_rom" /> </service>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<report focus="yes" hover="yes" />
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
<domain name="cpu_load" layer="2" content="client" label="no" />
<domain name="" layer="3" content="client" label="no" focus="click" hover="always" />
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</start>
<start name="pointer" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides> <service name="Report"/> </provides>
<config shapes="yes"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<service name="ROM" label="hover"> <child name="report_rom"/> </service>
<service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="vbox1" priority="-2" caps="600">}
append_if [expr $use_vbox5] config_of_app "
<binary name=\"$virtualbox5_binary\" />"

View File

@ -27,9 +27,6 @@ set build_components {
server/input_merger
drivers/nic
drivers/audio
server/nitpicker
app/pointer
server/nit_fb
server/report_rom
server/dynamic_rom
}
@ -38,19 +35,13 @@ set boot_modules {
input_merger
nic_drv
audio_drv
nitpicker
pointer
nit_fb
report_rom
dynamic_rom
}
set virtualbox_binary "virtualbox-rem"
set virtualbox5_binary "virtualbox5-rem"
if {[have_spec muen]} { set virtualbox_binary "virtualbox-muen" }
if {[have_spec nova]} {
set virtualbox_binary "virtualbox-nova"
set virtualbox5_binary "virtualbox5-nova"
}
@ -124,26 +115,17 @@ append config_of_app {
</config>
</start>
<start name="nitpicker" priority="-1">
<start name="nitpicker" priority="-1" caps="150">
<resource name="RAM" quantum="12M"/>
<provides><service name="Nitpicker"/></provides>
<configfile name="nitpicker.config"/>
<route>
<service name="Framebuffer"> <child name="fb_drv" /> </service>
<service name="Input"> <child name="input_merger" /> </service>
<service name="Report"> <child name="report_rom" /> </service>
<service name="ROM" label="nitpicker.config"> <child name="dynamic-config"/> </service>
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
<report focus="yes" hover="yes" xray="yes" />
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
<domain name="cpu_load" layer="2" content="client" label="no" />
<domain name="" layer="3" content="client" focus="click" hover="always" />
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</start>
<start name="pointer" priority="-1">
@ -151,79 +133,33 @@ append config_of_app {
<provides> <service name="Report"/> </provides>
<config shapes="yes"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>}
append config_of_app {
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<service name="ROM" label="hover"> <child name="report_rom"/> </service>
<service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>}
for { set i 1} { $i <= $use_vms } { incr i} {
append config_of_app "
<start name=\"nit_fb${i}\" priority=\"-1\">"
append config_of_app {
<binary name="nit_fb"/>
<resource name="RAM" quantum="8M" />
<provides>
<service name="Framebuffer" />
<service name="Input" />
</provides>}
append config_of_app "
<configfile name=\"nit_fb${i}.config\"/>"
append config_of_app {
<route>}
append config_of_app "
<service name=\"ROM\" label=\"nit_fb${i}.config\"> <child name=\"nit_fb-config\"/> </service>"
if { $use_vms > 1 } {
append config_of_app {
<start name="wm" caps="1000">
<resource name="RAM" quantum="32M"/>
<binary name="init"/>
<provides> <service name="Nitpicker"/> <service name="Report"/> </provides>
<route>
<service name="ROM" label="config"> <parent label="wm.config"/> </service>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<any-service> <parent /> </any-service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>}
}
append config_of_app {
<start name="nit_fb-config" priority="-1">
<start name="dynamic-config" priority="-1">
<binary name="dynamic_rom"/>
<resource name="RAM" quantum="1M"/>
<provides> <service name="ROM"/> </provides>
<config>}
for { set i 1} { $i <= $use_vms } { incr i} {
append config_of_app "
<rom name=\"nit_fb${i}.config\">"
append config_of_app {
<inline description="standard">}
if { $use_vms > 1 } {
append config_of_app "
<config xpos=\"[expr ${i} * 50]\" ypos=\"[expr (${i} - 1) * 5 + 2]\" width=\"1024\" height=\"768\"/>"
} else {
append config_of_app {
<config/>}
}
append config_of_app {
</inline>
<sleep milliseconds="50000" />}
append_if [expr !$use_rumpfs] config_of_app {
<inline description="shutdown">
<config width="0" height="0"/>
</inline>
<sleep milliseconds="500000" />}
append config_of_app {
</rom>}
}
append config_of_app {
<config verbose="yes">
<rom name="capslock">
<inline>
<capslock enabled="yes"/>
@ -234,6 +170,40 @@ append config_of_app {
</inline>
<sleep milliseconds="5000"/>
</rom>
<rom name="nitpicker.config">
<inline description="standard_mode">
<config>
<report focus="yes" hover="yes" />
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
<domain name="cpu_load" layer="2" content="client" label="no" />
<domain name="" layer="3" content="client" label="no" focus="click" hover="always"/>
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</inline>
<sleep milliseconds="50000"/>}
append_if [expr !$use_rumpfs] config_of_app {
<inline description="shutdown">
<config>
<report focus="yes" hover="yes" />
<domain name="pointer" layer="1" content="client" label="no" origin="pointer" />
<domain name="cpu_load" layer="2" content="client" label="no" />
<domain name="" layer="3" content="client" label="no" focus="click" hover="always" width="1" height="1" />
<policy label_prefix="pointer" domain="pointer"/>
<policy label_prefix="cpu_load_display" domain="cpu_load"/>
<default-policy domain=""/>
</config>
</inline>
<sleep milliseconds="500000"/>}
append config_of_app {
</rom>
</config>
<route>
<service name="Timer"> <child name="timer"/> </service>
@ -284,6 +254,9 @@ for { set i 1} { $i <= $use_vms } { incr i} {
</config>
<route>}
append_if [expr ($use_vms > 1)] config_of_app {
<service name="Nitpicker"> <child name="wm"/></service>}
append_if [expr $use_ram_fs] config_of_app {
<service name="File_system" label="from_ram_fs"> <child name="ram_fs"/> </service>}
@ -291,16 +264,11 @@ for { set i 1} { $i <= $use_vms } { incr i} {
<service name="File_system"> <child name="rump_fs"/> </service>}
append_if [expr !$use_rumpfs] config_of_app {
<service name="Block"> <child name="part_block"/> </service>}
append config_of_app "
<service name=\"Framebuffer\"> <child name=\"nit_fb${i}\" /> </service>
<service name=\"Input\"> <child name=\"nit_fb${i}\" /> </service>
<service name=\"Report\" label=\"shape\">
<child name=\"pointer\" label=\"nit_fb${i} -> shape\"/>
</service>"
append config_of_app {
<service name="Report" label="shape"> <child name="pointer"/></service>
<service name="Report"><child name="report_rom" /></service>
<service name="ROM" label="usb_devices"> <child name="report_rom" /> </service>
<service name="ROM" label="capslock"> <child name="nit_fb-config"/> </service>
<service name="ROM" label="capslock"> <child name="dynamic-config"/> </service>
<any-service> <parent/> <any-child /> </any-service>
</route>
</start>}

View File

@ -11,8 +11,8 @@ set use_gui 0
set use_bridge [expr $use_net && $use_gui]
set build_components {
core init timer
drivers/framebuffer
server/report_rom
}
if {$use_vbox5} {
@ -21,6 +21,12 @@ if {$use_vbox5} {
if {[have_spec nova]} { set virtualbox_binary "virtualbox5-nova" }
}
create_boot_directory
import_from_depot [depot_user]/src/[base_src] \
[depot_user]/src/init \
[depot_user]/src/nitpicker
source ${genode_dir}/repos/base/run/platform_drv.inc
# override defaults of platform_drv.inc
proc platform_drv_priority {} { return { priority="-1"} }
@ -33,17 +39,10 @@ lappend_if [have_spec x86] build_components drivers/rtc
lappend_if [expr $use_net] build_components drivers/nic
lappend_if [expr $use_bridge] build_components server/nic_bridge
lappend_if [expr $use_gui] build_components server/report_rom
lappend_if [expr $use_gui] build_components server/nitpicker
lappend_if [expr $use_gui] build_components server/nit_fb
lappend_if [expr $use_gui] build_components app/pointer
append_platform_drv_build_components
build $build_components
create_boot_directory
set config {
<config prio_levels="4">
<parent-provides>
@ -98,6 +97,7 @@ append_if [have_spec framebuffer] config {
<start name="fb_drv" priority="-1" caps="150">
<resource name="RAM" quantum="4M"/>
<provides><service name="Framebuffer"/></provides>
<config width="1280" height="1024" depth="16" buffered="yes"/>
</start>}
append_if [have_spec sdl] config {
@ -145,7 +145,7 @@ append_if [expr $use_bridge] config {
</start>
}
append_if [expr $use_gui] config {
append config {
<start name="report_rom" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides> <service name="Report"/> <service name="ROM"/> </provides>
@ -162,12 +162,12 @@ append_if [expr $use_gui] config {
<service name="Framebuffer"> <child name="fb_drv" /> </service>
<service name="Report"> <child name="report_rom" /> </service>}
append_if [expr ($use_gui && $use_ps2)] config {
append_if [expr $use_ps2] config {
<service name="Input"> <child name="ps2_drv"/> </service>}
append_if [expr ($use_gui && $use_usb)] config {
append_if [expr $use_usb] config {
<service name="Input"> <child name="usb_drv"/> </service>}
append_if [expr $use_gui] config {
append config {
<any-service> <parent/> <any-child /> </any-service>
</route>
<config>
@ -183,6 +183,7 @@ append_if [expr $use_gui] config {
<start name="pointer" priority="-1">
<resource name="RAM" quantum="2M"/>
<provides><service name="Report"/></provides>
<config shapes="yes"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
@ -190,39 +191,11 @@ append_if [expr $use_gui] config {
<service name="ROM" label="xray"> <child name="report_rom"/> </service>
<any-service> <parent/> </any-service>
</route>
</start>
<start name="nit_fb1" priority="-1">
<binary name="nit_fb"/>
<resource name="RAM" quantum="8M" />
<provides>
<service name="Framebuffer" />
<service name="Input" />
</provides>
<config xpos="10" ypos="10" width="1024" height="768"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
<start name="nit_fb2" priority="-1">
<binary name="nit_fb"/>
<resource name="RAM" quantum="8M" />
<provides>
<service name="Framebuffer" />
<service name="Input" />
</provides>
<config xpos="410" ypos="310" width="1024" height="768"/>
<route>
<service name="Nitpicker"> <child name="nitpicker"/> </service>
<any-service> <parent/> <any-child/> </any-service>
</route>
</start>
</start>}
append_if [expr $use_gui] config {
<start name="vbox2" priority="-2" caps="500">}
append_if [expr $use_gui] config "
<binary name=\"$virtualbox_binary\"/>"
append_if [expr $use_gui] config {
@ -269,13 +242,11 @@ append config {
append_if [expr $use_bridge] config {
<service name="Nic"> <child name="nic_bridge"/> </service>}
append_if [expr $use_gui] config {
append config {
<service name="Report" label="shape"> <child name="pointer" label="nit_fb1 -> shape"/> </service>
<service name="Report"> <child name="report_rom"/> </service>
<service name="Framebuffer"> <child name="nit_fb1" /> </service>
<service name="Input"> <child name="nit_fb1" /> </service>}
append config {
<service name="Input"> <child name="nit_fb1" /> </service>
<any-service> <parent /> <any-child /> </any-service>
</route>
</start>
@ -286,7 +257,7 @@ install_config $config
exec cp ${genode_dir}/repos/ports/run/test.vbox bin/.
set boot_modules { core ld.lib.so init timer test.iso test.vbox }
set boot_modules { test.iso test.vbox }
append boot_modules $virtualbox_binary
@ -298,9 +269,6 @@ lappend_if [have_spec linux] boot_modules fb_sdl
lappend_if [have_spec x86] boot_modules rtc_drv
lappend_if [expr $use_gui] boot_modules report_rom
lappend_if [expr $use_gui] boot_modules nitpicker
lappend_if [expr $use_gui] boot_modules nit_fb
lappend_if [expr $use_gui] boot_modules pointer
append boot_modules {
ld.lib.so libc.lib.so vfs.lib.so libm.lib.so libc_pipe.lib.so

View File

@ -27,8 +27,17 @@ if {[have_spec nova]} {
proc kernel_output { } { return "novga logmem" }
}
create_boot_directory
import_from_depot [depot_user]/src/[base_src] \
[depot_user]/src/init \
[depot_user]/src/nitpicker
if {$use_vms > 1} {
import_from_depot [depot_user]/pkg/themed_wm
}
append build_components {
core init timer
server/part_block
server/fs_rom
drivers/ahci
@ -55,8 +64,6 @@ append_platform_drv_build_components
build $build_components
create_boot_directory
set config {
<config verbose="yes" prio_levels="4">}
@ -363,9 +370,8 @@ append config {
install_config $config
append boot_modules {
core init timer
part_block ahci_drv fs_rom
ld.lib.so libc.lib.so vfs.lib.so libm.lib.so
libc.lib.so vfs.lib.so libm.lib.so
libc_pipe.lib.so libc_terminal.lib.so
libiconv.lib.so stdcxx.lib.so
qemu-usb.lib.so

View File

@ -108,7 +108,7 @@ void GenodeConsole::update_video_mode()
if (!fb)
return;
if ((fb->w() == 0) && (fb->h() == 0)) {
if ((fb->w() <= 1) && (fb->h() <= 1)) {
/* interpret a size of 0x0 as indication to quit VirtualBox */
if (PowerButton() != S_OK)
Genode::error("ACPI shutdown failed");
@ -281,7 +281,7 @@ void GenodeConsole::handle_mode_change()
Genodefb *fb = dynamic_cast<Genodefb *>(pFramebuffer);
fb->update_mode();
fb->update_mode(_nitpicker.mode());
update_video_mode();
}
@ -330,8 +330,7 @@ void GenodeConsole::init_backends(IKeyboard * gKeyboard, IMouse * gMouse)
HRESULT rc = i_getDisplay()->QueryFramebuffer(0, &pFramebuffer);
Assert(SUCCEEDED(rc) && pFramebuffer);
Genodefb *fb = dynamic_cast<Genodefb *>(pFramebuffer);
fb->mode_sigh(_mode_change_signal_dispatcher);
_nitpicker.mode_sigh(_mode_change_signal_dispatcher);
handle_mode_change();
}

View File

@ -14,11 +14,14 @@
/* Genode includes */
#include <base/log.h>
#include <base/attached_dataspace.h>
#include <base/attached_rom_dataspace.h>
#include <input/event.h>
#include <input/keycodes.h>
#include <input_session/connection.h>
#include <base/attached_dataspace.h>
#include <base/attached_rom_dataspace.h>
#define Framebuffer Fb_Genode
#include <nitpicker_session/connection.h>
#undef Framebuffer
#include <os/reporter.h>
#include <report_session/connection.h>
#include <timer_session/connection.h>
@ -111,7 +114,8 @@ class GenodeConsole : public Console {
private:
Input::Connection _input;
Nitpicker::Connection _nitpicker;
Input::Session_client &_input;
unsigned _ax, _ay;
bool _last_received_motion_event_was_absolute;
Report::Connection _shape_report_connection;
@ -141,7 +145,8 @@ class GenodeConsole : public Console {
GenodeConsole()
:
Console(),
_input(genode_env()),
_nitpicker(genode_env()),
_input(*_nitpicker.input()),
_ax(0), _ay(0),
_last_received_motion_event_was_absolute(false),
_shape_report_connection(genode_env(), "shape",
@ -172,6 +177,8 @@ class GenodeConsole : public Console {
}
}
Nitpicker::Connection &nitpicker() { return _nitpicker; }
void init_clipboard();
void init_backends(IKeyboard * gKeyboard, IMouse * gMouse);

View File

@ -14,7 +14,7 @@
/* Genode includes */
#define Framebuffer Fb_Genode
#include <framebuffer_session/connection.h>
#include <nitpicker_session/nitpicker_session.h>
#include <nitpicker_session/connection.h>
#undef Framebuffer
#include <os/texture_rgb565.h>
@ -26,20 +26,24 @@
#include "Global.h"
#include "VirtualBoxBase.h"
typedef Nitpicker::Session::View_handle View_handle;
class Genodefb :
VBOX_SCRIPTABLE_IMPL(IFramebuffer)
{
private:
Genode::Env &_env;
Fb_Genode::Connection _fb;
Nitpicker::Connection &_nitpicker;
Fb_Genode::Session &_fb;
View_handle _view;
/* The mode at the time when the mode change signal was received */
Fb_Genode::Mode _next_fb_mode { 1024, 768, Fb_Genode::Mode::RGB565 };
/* The mode matching the currently attached dataspace */
Fb_Genode::Mode _fb_mode;
/* The mode at the time when the mode change signal was received */
Fb_Genode::Mode _next_fb_mode;
/*
* The mode currently used by the VM. Can be smaller than the
* framebuffer mode.
@ -56,14 +60,42 @@ class Genodefb :
_fb.refresh(0, 0, _virtual_fb_mode.width(), _virtual_fb_mode.height());
}
void _adjust_buffer()
{
_nitpicker.buffer(Fb_Genode::Mode(_next_fb_mode.width(), _next_fb_mode.height(),
Fb_Genode::Mode::RGB565), false);
typedef Nitpicker::Session::Command Command;
Nitpicker::Rect rect(Nitpicker::Point(0, 0),
Nitpicker::Area(_next_fb_mode.width(), _next_fb_mode.height()));
_nitpicker.enqueue<Command::Geometry>(_view, rect);
_nitpicker.execute();
}
Fb_Genode::Mode _initial_setup()
{
typedef Nitpicker::Session::Command Command;
_view = _nitpicker.create_view();
_adjust_buffer();
_nitpicker.enqueue<Command::To_front>(_view, View_handle());
_nitpicker.execute();
return _next_fb_mode;
}
public:
Genodefb (Genode::Env &env)
Genodefb (Genode::Env &env, Nitpicker::Connection &nitpicker)
:
_env(env),
_fb(env, Fb_Genode::Mode(0, 0, Fb_Genode::Mode::INVALID)),
_fb_mode(_fb.mode()),
_next_fb_mode(_fb_mode),
_nitpicker(nitpicker),
_fb(*nitpicker.framebuffer()),
_fb_mode(_initial_setup()),
_virtual_fb_mode(_fb_mode),
_fb_base(env.rm().attach(_fb.dataspace()))
{
@ -75,15 +107,10 @@ class Genodefb :
int w() const { return _next_fb_mode.width(); }
int h() const { return _next_fb_mode.height(); }
void mode_sigh(Genode::Signal_context_capability sigh)
{
_fb.mode_sigh(sigh);
}
void update_mode()
void update_mode(Fb_Genode::Mode mode)
{
Lock();
_next_fb_mode = _fb.mode();
_next_fb_mode = mode;
Unlock();
}
@ -111,7 +138,9 @@ class Genodefb :
Genode::log("fb resize : [", screen, "] ",
_virtual_fb_mode.width(), "x",
_virtual_fb_mode.height(), " -> ",
w, "x", h);
w, "x", h,
" (host: ", _next_fb_mode.width(), "x",
_next_fb_mode.height(), ")");
if ((w < (ULONG)_next_fb_mode.width()) ||
(h < (ULONG)_next_fb_mode.height())) {
@ -125,6 +154,8 @@ class Genodefb :
_env.rm().detach(_fb_base);
_adjust_buffer();
_fb_base = _env.rm().attach(_fb.dataspace());
result = S_OK;
@ -133,7 +164,9 @@ class Genodefb :
Genode::log("fb resize : [", screen, "] ",
_virtual_fb_mode.width(), "x",
_virtual_fb_mode.height(), " -> ",
w, "x", h, " ignored");
w, "x", h, " ignored"
" (host: ", _next_fb_mode.width(), "x",
_next_fb_mode.height(), ")");
Unlock();

View File

@ -169,7 +169,7 @@ HRESULT setupmachine(Genode::Env &env)
for (unsigned uScreenId = 0; uScreenId < cMonitors; uScreenId++)
{
Genodefb *fb = new Genodefb(env);
Genodefb *fb = new Genodefb(env, genodeConsole->nitpicker());
HRESULT rc = display->AttachFramebuffer(uScreenId, fb, gaFramebufferId[uScreenId].asOutParam());
if (FAILED(rc))
return rc;