Hi,
On 15.01.2014 13:34, Tom Gundersen wrote:
On Wed, Jan 15, 2014 at 12:08 PM, Joonas Lahtinen
<joonas.lahti...@linux.intel.com> wrote:
Console Control Protocol is a nonstandard UEFI interface and lack of
it shall not be treated as an error.
Ah, great! I was struggling to make the splash work on tianocore for
the longest time, and this fixes it indeed.
Applied and pushed.
Great that it helped. The same goes for other implementations too.
Only minor issue left now is that we need to explicitly clear the
screen before writing in console mode (as can be seen if you boot into
tianocore and press 'P' followed by any other keys to switch between
the modes). Care to take a look at that?
I think it is more by design than a bug, as now the graphics mode switch
function does nothing. There's no telling the UEFI implementation if you
want to draw text or graphics. I've seen multiple implementations in
some Windows bootloader leaves some text on screen behind logo, and
others where only cursor is seen, and in rare case the background is
completely black. It's just not specified by standard (or at least not
implemented widely), if the text output should cause screen to clear.
Fbcon behaves pretty much the same way, the graphics get overwritten by
the text, and the text continues from where it left off, independent of
each other. So it's up to the application to enforce screen clearing if
they want to.
One simple solution to ensure uniform behaviour across implementations
could be to do explicit clear on the screen and home the cursor to upper
left always when a text mode is requested. And vice versa, clear screen
when graphics mode is requested.
Was this the problem you meant?
Regards, Joonas
Cheers,
Tom
src/efi/graphics.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/src/efi/graphics.c b/src/efi/graphics.c
index 062ce27..c85daa3 100644
--- a/src/efi/graphics.c
+++ b/src/efi/graphics.c
@@ -67,8 +67,10 @@ EFI_STATUS graphics_mode(BOOLEAN on) {
EFI_STATUS err;
err = LibLocateProtocol(&ConsoleControlProtocolGuid, (VOID
**)&ConsoleControl);
- if (EFI_ERROR(err))
- return err;
+ if (EFI_ERROR(err)) {
+ /* console control protocol is nonstandard and might not
exist. */
+ return err == EFI_NOT_FOUND ? EFI_SUCCESS : err;
+ }
/* check current mode */
err = uefi_call_wrapper(ConsoleControl->GetMode, 4, ConsoleControl, ¤t,
&uga_exists, &stdin_locked);
--
1.8.1.4
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel