seoul: show vga messages during early disc boot

Issue #2715
This commit is contained in:
Alexander Boettcher 2018-03-05 10:28:26 +01:00 committed by Christian Helmuth
parent 2403c32d4f
commit 8e8878f187
5 changed files with 22 additions and 8 deletions

View File

@ -1 +1 @@
02abcfcffb40098c98656bcf8ba3d88d4d709cf5
cb9a134ba7d65887627d14beaaffbf0aa0c6b93b

View File

@ -3,8 +3,8 @@ VERSION := git
DOWNLOADS := seoul.git
URL(seoul) := https://github.com/alex-ab/seoul.git
# branch genode_17_05
REV(seoul) := 878f0ea5593d0bc87bbbad3c5499c26d5f64d472
# branch genode_18_05
REV(seoul) := 253faafcfa7bbcf68732c9962d6a88052194a0d0
DIR(seoul) := src/app/seoul
#

View File

@ -15,7 +15,7 @@ set use_model_ide 0
set use_block_ram 1
set use_block_sata 0
set use_nic_session 0
set use_nic_session 1
set use_nic_bridge 0
set use_usb 0

View File

@ -193,7 +193,7 @@ append_if $use_block_sata config {
append_if $use_block_ram config {
<start name="ram_blk" priority="-1">
<resource name="RAM" quantum="132M" />
<resource name="RAM" quantum="162M" />
<provides><service name="Block"/></provides>
<config file="seoul-disc.raw" block_size="512"/>
</start>}

View File

@ -27,6 +27,7 @@
#include <nitpicker_gfx/text_painter.h>
#include <nul/motherboard.h>
#include <host/screen.h>
/* local includes */
#include "console.h"
@ -39,8 +40,9 @@ static struct {
Genode::uint64_t checksum2 = 0;
unsigned unchanged = 0;
bool cmp_even = 1;
bool active = true;
bool active = false;
bool revoked = false;
bool vga_update= false; /* update indirectly by vbios */
} fb_state;
@ -195,12 +197,24 @@ bool Seoul::Console::receive(MessageConsole &msg)
return true;
}
void Screen::vga_updated()
{
fb_state.vga_update = true;
}
bool Seoul::Console::receive(MessageMemRegion &msg)
{
if (msg.page >= 0xb8 && msg.page <= 0xbf) {
/* we had a fault in the text framebuffer */
bool reactivate = (msg.page >= 0xb8 && msg.page <= 0xbf);
/* we had a fault in the text framebuffer */
/* vga memory got changed indirectly by vbios */
if (fb_state.vga_update) {
fb_state.vga_update = false;
if (!fb_state.active)
reactivate = true;
}
if (reactivate) {
if (!fb_state.active) fb_state.active = true;
Logging::printf("Reactivating text buffer loop.\n");