diff --git a/ports/run/seoul-auto.run b/ports/run/seoul-auto.run index 708d387ce2..a356089833 100644 --- a/ports/run/seoul-auto.run +++ b/ports/run/seoul-auto.run @@ -19,6 +19,7 @@ set use_nic_bridge 0 set use_usb 0 +set use_framebuffer 1 set use_fancy_stuff 0 set memory_vmm_vm "128M" diff --git a/ports/run/seoul-disc.run b/ports/run/seoul-disc.run index e26001afff..52aabd5095 100644 --- a/ports/run/seoul-disc.run +++ b/ports/run/seoul-disc.run @@ -17,6 +17,7 @@ set use_nic_bridge 0 set use_usb 0 +set use_framebuffer 1 set use_fancy_stuff 0 set memory_vmm_vm "128M" diff --git a/ports/run/seoul-fancy.run b/ports/run/seoul-fancy.run index 94fca97841..571762877b 100644 --- a/ports/run/seoul-fancy.run +++ b/ports/run/seoul-fancy.run @@ -20,6 +20,7 @@ set use_nic_bridge 1 set use_usb 0 +set use_framebuffer 1 set use_fancy_stuff 1 set memory_init "288M" diff --git a/ports/run/seoul-kernelbuild.run b/ports/run/seoul-kernelbuild.run index 86582b969e..a63fc28bd5 100644 --- a/ports/run/seoul-kernelbuild.run +++ b/ports/run/seoul-kernelbuild.run @@ -24,6 +24,7 @@ set use_nic_bridge 0 set use_usb 0 +set use_framebuffer 0 set use_fancy_stuff 0 set memory_vmm_vm "950M" diff --git a/ports/run/seoul-net.run b/ports/run/seoul-net.run index 1dba369e3e..b8b6b3838b 100644 --- a/ports/run/seoul-net.run +++ b/ports/run/seoul-net.run @@ -17,6 +17,7 @@ set use_nic_bridge 0 set use_usb 0 +set use_framebuffer 1 set use_fancy_stuff 0 set memory_vmm_vm "128M" diff --git a/ports/run/seoul.inc b/ports/run/seoul.inc index 27002c5696..9d4d6b8d42 100644 --- a/ports/run/seoul.inc +++ b/ports/run/seoul.inc @@ -21,9 +21,10 @@ set build_components { vancouver drivers/pci drivers/input - drivers/framebuffer } +if {$use_fancy_stuff} { set use_framebuffer 1 } + lappend_if [have_spec acpi] build_components drivers/acpi lappend_if [have_spec pci] build_components drivers/pci/device_pd lappend_if $use_usb build_components drivers/usb @@ -31,6 +32,7 @@ lappend_if $use_block_ide build_components drivers/atapi lappend_if $use_block_sata build_components drivers/ahci lappend_if $use_nic_session build_components drivers/nic lappend_if $use_nic_bridge build_components server/nic_bridge +lappend_if $use_framebuffer build_components drivers/framebuffer lappend_if $use_fancy_stuff build_components server/nitpicker lappend_if $use_fancy_stuff build_components server/liquid_framebuffer lappend_if $use_fancy_stuff build_components app/launchpad @@ -207,7 +209,7 @@ append_if [expr $use_nic_session && $use_nic_bridge] config { } -append config { +append_if $use_framebuffer config { @@ -232,8 +234,9 @@ append_if [expr $use_nic_session && $use_nic_bridge] config { } append_if [expr $use_nic_session && !$use_nic_bridge] config { } +append_if $use_framebuffer config { + } append config { - @@ -343,7 +346,6 @@ install_config $config set boot_modules { core init pci_drv - fb_drv timer rtc_drv vancouver @@ -358,6 +360,7 @@ lappend_if $use_block_ide boot_modules atapi_drv lappend_if $use_block_sata boot_modules ahci lappend_if $use_nic_session boot_modules nic_drv lappend_if $use_nic_bridge boot_modules nic_bridge +lappend_if $use_framebuffer boot_modules fb_drv lappend_if $use_fancy_stuff boot_modules nitpicker lappend_if $use_fancy_stuff boot_modules liquid_fb lappend_if $use_fancy_stuff boot_modules launchpad diff --git a/ports/src/vancouver/console.cc b/ports/src/vancouver/console.cc index dc6744bba9..4db7f55b35 100644 --- a/ports/src/vancouver/console.cc +++ b/ports/src/vancouver/console.cc @@ -187,25 +187,32 @@ bool Vancouver_console::receive(MessageMemRegion &msg) void Vancouver_console::entry() { - Logging::printf("Hello, this is VancouverConsole.\n"); - /* * Init sessions to the required external services */ enum { CONFIG_ALPHA = false }; - static Framebuffer::Connection framebuffer; - static Input::Connection input; - static Timer::Connection timer; + + static Input::Connection input; + static Timer::Connection timer; + Framebuffer::Connection *framebuffer = 0; + + try { + framebuffer = new (env()->heap()) Framebuffer::Connection(); + } catch (...) { + PERR("Headless mode - no framebuffer session available"); + _startup_lock.unlock(); + return; + } Genode::Dataspace_capability ev_ds_cap = input.dataspace(); Input::Event *ev_buf = static_cast (env()->rm_session()->attach(ev_ds_cap)); - _fb_size = Dataspace_client(framebuffer.dataspace()).size(); - _fb_mode = framebuffer.mode(); + _fb_size = Dataspace_client(framebuffer->dataspace()).size(); + _fb_mode = framebuffer->mode(); - _pixels = env()->rm_session()->attach(framebuffer.dataspace()); + _pixels = env()->rm_session()->attach(framebuffer->dataspace()); Chunky_canvas canvas((Pixel_rgb565 *) _pixels, Area(_fb_mode.width(), @@ -273,7 +280,7 @@ void Vancouver_console::entry() } } else { unchanged = 0; - framebuffer.refresh(0, 0, _fb_mode.width(), _fb_mode.height()); + framebuffer->refresh(0, 0, _fb_mode.width(), _fb_mode.height()); } cmp_even = !cmp_even; @@ -284,7 +291,7 @@ void Vancouver_console::entry() Genode::Lock::Guard guard(_console_lock); env()->rm_session()->detach((void *)_guest_fb); - env()->rm_session()->attach_at(framebuffer.dataspace(), + env()->rm_session()->attach_at(framebuffer->dataspace(), (Genode::addr_t)_guest_fb); /* if the VGA model expects a larger FB, pad to that size. */ @@ -298,7 +305,7 @@ void Vancouver_console::entry() revoked = true; } - framebuffer.refresh(0, 0, _fb_mode.width(), _fb_mode.height()); + framebuffer->refresh(0, 0, _fb_mode.width(), _fb_mode.height()); } timer.msleep(10);