genodeSources: 20.05 -> 20.08
parent
1f53f25419
commit
c3385aedd0
@ -1,126 +0,0 @@
|
||||
commit d2a28a33f6a2bda7000ce201d52ff99714895640
|
||||
Author: Emery Hemingway <ehmry@posteo.net>
|
||||
Date: Fri May 15 11:28:10 2020 +0530
|
||||
|
||||
vbox: use Nitpicker mode for initial resolution
|
||||
|
||||
diff --git a/repos/ports/src/virtualbox5/frontend/fb.h b/repos/ports/src/virtualbox5/frontend/fb.h
|
||||
index 95a7db8602..bf2d65d7c1 100644
|
||||
--- a/repos/ports/src/virtualbox5/frontend/fb.h
|
||||
+++ b/repos/ports/src/virtualbox5/frontend/fb.h
|
||||
@@ -40,7 +40,7 @@ class Genodefb :
|
||||
Nitpicker::Connection &_nitpicker;
|
||||
Fb_Genode::Session &_fb { *_nitpicker.framebuffer() };
|
||||
View_handle _view;
|
||||
- Fb_Genode::Mode _fb_mode { 1024, 768, Fb_Genode::Mode::RGB565 };
|
||||
+ Fb_Genode::Mode _fb_mode { _nitpicker.mode() };
|
||||
|
||||
/*
|
||||
* The mode currently used by the VM. Can be smaller than the
|
||||
|
||||
commit b6bf91067a4c1c6d5b3508aedd949c8e1a7fe4b3
|
||||
Author: Emery Hemingway <ehmry@posteo.net>
|
||||
Date: Fri May 15 11:20:47 2020 +0530
|
||||
|
||||
vbox: fail on invalid framebuffer dataspace
|
||||
|
||||
VirtualBox can hang during initialization if Nitpicker returns an
|
||||
invalid dataspace due to insufficient server-side resources. Make
|
||||
an invalid dataspace a critical rather than silent error.
|
||||
|
||||
diff --git a/repos/ports/src/virtualbox5/frontend/fb.h b/repos/ports/src/virtualbox5/frontend/fb.h
|
||||
index dce00fe4eb..95a7db8602 100644
|
||||
--- a/repos/ports/src/virtualbox5/frontend/fb.h
|
||||
+++ b/repos/ports/src/virtualbox5/frontend/fb.h
|
||||
@@ -21,6 +21,9 @@
|
||||
#include <os/texture_rgb888.h>
|
||||
#include <os/dither_painter.h>
|
||||
|
||||
+#include <base/attached_dataspace.h>
|
||||
+#include <util/reconstructible.h>
|
||||
+
|
||||
/* VirtualBox includes */
|
||||
|
||||
#include "Global.h"
|
||||
@@ -35,7 +38,7 @@ class Genodefb :
|
||||
|
||||
Genode::Env &_env;
|
||||
Nitpicker::Connection &_nitpicker;
|
||||
- Fb_Genode::Session &_fb;
|
||||
+ Fb_Genode::Session &_fb { *_nitpicker.framebuffer() };
|
||||
View_handle _view;
|
||||
Fb_Genode::Mode _fb_mode { 1024, 768, Fb_Genode::Mode::RGB565 };
|
||||
|
||||
@@ -43,18 +46,18 @@ class Genodefb :
|
||||
* The mode currently used by the VM. Can be smaller than the
|
||||
* framebuffer mode.
|
||||
*/
|
||||
- Fb_Genode::Mode _virtual_fb_mode;
|
||||
+ Fb_Genode::Mode _virtual_fb_mode { _initial_setup() };
|
||||
+
|
||||
+ Genode::Reconstructible<Genode::Attached_dataspace>
|
||||
+ _fb_dataspace { _env.rm(), _fb.dataspace() };
|
||||
|
||||
- void *_fb_base;
|
||||
RTCRITSECT _fb_lock;
|
||||
|
||||
void _clear_screen()
|
||||
{
|
||||
- if (!_fb_base) return;
|
||||
-
|
||||
size_t const max_h = Genode::min(_fb_mode.height(), _virtual_fb_mode.height());
|
||||
size_t const num_pixels = _fb_mode.width() * max_h;
|
||||
- memset(_fb_base, 0, num_pixels * _fb_mode.bytes_per_pixel());
|
||||
+ memset(_fb_dataspace->local_addr<char>(), 0, num_pixels * _fb_mode.bytes_per_pixel());
|
||||
_fb.refresh(0, 0, _virtual_fb_mode.width(), _virtual_fb_mode.height());
|
||||
}
|
||||
|
||||
@@ -91,10 +94,7 @@ class Genodefb :
|
||||
Genodefb (Genode::Env &env, Nitpicker::Connection &nitpicker)
|
||||
:
|
||||
_env(env),
|
||||
- _nitpicker(nitpicker),
|
||||
- _fb(*nitpicker.framebuffer()),
|
||||
- _virtual_fb_mode(_initial_setup()),
|
||||
- _fb_base(env.rm().attach(_fb.dataspace()))
|
||||
+ _nitpicker(nitpicker)
|
||||
{
|
||||
int rc = RTCritSectInit(&_fb_lock);
|
||||
Assert(rc == VINF_SUCCESS);
|
||||
@@ -109,16 +109,11 @@ class Genodefb :
|
||||
|
||||
_fb_mode = mode;
|
||||
|
||||
- if (_fb_base)
|
||||
- _env.rm().detach(_fb_base);
|
||||
+ _fb_dataspace.destruct();
|
||||
|
||||
_adjust_buffer();
|
||||
|
||||
- try {
|
||||
- _fb_base = _env.rm().attach(_fb.dataspace());
|
||||
- } catch (...) {
|
||||
- _fb_base = nullptr;
|
||||
- }
|
||||
+ _fb_dataspace.construct(_env.rm(), _fb.dataspace());
|
||||
|
||||
Unlock();
|
||||
}
|
||||
@@ -201,8 +196,6 @@ class Genodefb :
|
||||
PRUint32 imageSize,
|
||||
PRUint8 *image) override
|
||||
{
|
||||
- if (!_fb_base) return S_OK;
|
||||
-
|
||||
Lock();
|
||||
|
||||
Nitpicker::Area const area_fb = Nitpicker::Area(_fb_mode.width(),
|
||||
@@ -215,7 +208,7 @@ class Genodefb :
|
||||
typedef Pixel_rgb565 Pixel_dst;
|
||||
|
||||
Texture<Pixel_src> texture((Pixel_src *)image, nullptr, area_vm);
|
||||
- Surface<Pixel_dst> surface((Pixel_dst *)_fb_base, area_fb);
|
||||
+ Surface<Pixel_dst> surface(_fb_dataspace->local_addr<Pixel_dst>(), area_fb);
|
||||
|
||||
Dither_painter::paint(surface, texture, Surface_base::Point(o_x, o_y));
|
||||
|
@ -1,153 +0,0 @@
|
||||
|
||||
let Test = ./test.dhall ? env:DHALL_GENODE_TEST
|
||||
|
||||
let drivers = env:drivers ? ../compositions/pc-drivers.dhall
|
||||
|
||||
let Genode = Test.Genode
|
||||
|
||||
let Init = Genode.Init
|
||||
|
||||
let Child = Init.Child
|
||||
|
||||
let Resources = Init.Resources
|
||||
|
||||
let ServiceRoute = Init.ServiceRoute
|
||||
|
||||
let parentRomRoute =
|
||||
λ(from : Text)
|
||||
→ λ(to : Text)
|
||||
→ ServiceRoute.parentLabel "ROM" (Some from) (Some to)
|
||||
|
||||
let childRomRoute =
|
||||
λ(child : Text)
|
||||
→ λ(from : Text)
|
||||
→ ServiceRoute.childLabel "ROM" child (Some from) (None Text)
|
||||
|
||||
let label = λ(_ : Text) → { local = _, route = _ }
|
||||
|
||||
let init =
|
||||
Init::{
|
||||
, verbose = True
|
||||
, routes = [ ServiceRoute.parent "Timer" ]
|
||||
, children = toMap
|
||||
{ drivers =
|
||||
Init.toChild
|
||||
drivers
|
||||
Init.Attributes::{
|
||||
, provides = [ "Block", "Framebuffer", "Input" ]
|
||||
, resources = Init.Resources::{ ram = Genode.units.MiB 4 }
|
||||
, romReports = [ label "block_devices" ]
|
||||
, routes =
|
||||
[ parentRomRoute "managed/input_filter" "input_filter.config"
|
||||
, parentRomRoute " numlock_remap" "numlock_remap.config"
|
||||
, childRomRoute "dynamic_rom" "capslock"
|
||||
, childRomRoute "dynamic_rom" "numlock"
|
||||
, childRomRoute "dynamic_rom" "system"
|
||||
, ServiceRoute.child "Report" "_report_rom"
|
||||
, ServiceRoute.parent "IRQ"
|
||||
, ServiceRoute.parent "IO_MEM"
|
||||
, ServiceRoute.parent "IO_PORT"
|
||||
, ServiceRoute.parent "Timer"
|
||||
]
|
||||
}
|
||||
, dynamic_rom =
|
||||
Child.flat
|
||||
Child.Attributes::{
|
||||
, binary = "dynamic_rom"
|
||||
, resources = Resources::{ ram = Genode.units.MiB 4 }
|
||||
, provides = [ "ROM" ]
|
||||
, config = Genode.Init.Config::{
|
||||
, content =
|
||||
[ Genode.Prelude.XML.text
|
||||
''
|
||||
<rom name="system">
|
||||
<inline>
|
||||
<system state=""/>
|
||||
</inline>
|
||||
<sleep milliseconds="10000"/>
|
||||
</rom>
|
||||
''
|
||||
]
|
||||
}
|
||||
}
|
||||
, test-driver_manager =
|
||||
Child.flat
|
||||
Child.Attributes::{
|
||||
, binary = "test-driver_manager"
|
||||
, config = Init.Config::{
|
||||
, content =
|
||||
[ Genode.Prelude.XML.text
|
||||
''
|
||||
<check_ahci_block_device label="ahci-1" block_count="65536" block_size="512" model="QEMU HARDDISK"/>
|
||||
<check_input/>
|
||||
<check_framebuffer/>
|
||||
''
|
||||
]
|
||||
}
|
||||
, reportRoms = [ label "block_devices" ]
|
||||
, routes =
|
||||
[ ServiceRoute.child "Block" "drivers"
|
||||
, ServiceRoute.child "Framebuffer" "drivers"
|
||||
, ServiceRoute.child "Input" "drivers"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let rom =
|
||||
Genode.Boot.toRomTexts
|
||||
( toMap
|
||||
{ capslock = "<feature_creep/>"
|
||||
, numlock = "<feature_creep/>"
|
||||
, usb_policy = "<usb/>"
|
||||
}
|
||||
# [ { mapKey = "fb_drv.config"
|
||||
, mapValue =
|
||||
''
|
||||
<config width="1024" height="768" buffered="yes"/>
|
||||
<report connectors="yes"/>
|
||||
</config>
|
||||
''
|
||||
}
|
||||
, { mapKey = "input_filter.config"
|
||||
, mapValue =
|
||||
''
|
||||
<config>
|
||||
<input label="ps2"/>
|
||||
<input label="usb"/>
|
||||
<output>
|
||||
<chargen>
|
||||
<remap>
|
||||
<key name="KEY_F11" to="KEY_RESTART"/>
|
||||
<key name="KEY_F12" to="KEY_DASHBOARD"/>
|
||||
<key name="KEY_LEFTMETA" to="KEY_SCREEN"/>
|
||||
<merge>
|
||||
<accelerate max="50" sensitivity_percent="1000" curve="127">
|
||||
<button-scroll>
|
||||
<input name="ps2"/>
|
||||
<vertical button="BTN_MIDDLE" speed_percent="-10"/>
|
||||
<horizontal button="BTN_MIDDLE" speed_percent="-10"/>
|
||||
</button-scroll>
|
||||
</accelerate>
|
||||
<input name="usb"/>
|
||||
</merge>
|
||||
</remap>
|
||||
<mod1>
|
||||
<key name="KEY_LEFTSHIFT"/> <key name="KEY_RIGHTSHIFT"/>
|
||||
</mod1>
|
||||
<mod2>
|
||||
<key name="KEY_LEFTCTRL"/> <key name="KEY_RIGHTCTRL"/>
|
||||
</mod2>
|
||||
<mod3>
|
||||
<key name="KEY_RIGHTALT"/> <!-- AltGr -->
|
||||
</mod3>
|
||||
<repeat delay_ms="230" rate_ms="40"/>
|
||||
</chargen>
|
||||
</output>
|
||||
</config>
|
||||
''
|
||||
}
|
||||
]
|
||||
)
|
||||
|
||||
in Test::{ children = Test.initToChildren init, rom = rom }
|