From 761ca975a9f70f681b52b515f1d4140cd2c17785 Mon Sep 17 00:00:00 2001 From: robertmh Date: Tue, 11 Nov 2008 23:16:54 +0000 Subject: [PATCH] 2008-11-12 Robert Millan Fix a regression introduced by the at_keyboard.mod split. Because some terminals are default on some platforms and non-default on others, the first terminal being registered determines which is going to be default. * kern/term.c (grub_term_register_input): If this is the first terminal being registered, set it as the current one. (grub_term_register_output): Likewise. * term/efi/console.c (grub_console_init): Do not call grub_term_set_current_output() or grub_term_set_current_input(). * term/ieee1275/ofconsole.c (grub_console_init): Likewise. * term/i386/pc/console.c (grub_console_init): Likewise. (grub_console_fini): Do not call grub_term_set_current_input() (but leave grub_term_set_current_output() to restore text mode). --- ChangeLog | 18 ++++++++++++++++++ kern/term.c | 4 ++++ term/efi/console.c | 2 -- term/i386/pc/console.c | 6 +++--- term/ieee1275/ofconsole.c | 2 -- 5 files changed, 25 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 38d4a88eb..33e70ec89 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,21 @@ +2008-11-12 Robert Millan + + Fix a regression introduced by the at_keyboard.mod split. Because + some terminals are default on some platforms and non-default on + others, the first terminal being registered determines which is + going to be default. + + * kern/term.c (grub_term_register_input): If this is the first + terminal being registered, set it as the current one. + (grub_term_register_output): Likewise. + + * term/efi/console.c (grub_console_init): Do not call + grub_term_set_current_output() or grub_term_set_current_input(). + * term/ieee1275/ofconsole.c (grub_console_init): Likewise. + * term/i386/pc/console.c (grub_console_init): Likewise. + (grub_console_fini): Do not call grub_term_set_current_input() + (but leave grub_term_set_current_output() to restore text mode). + 2008-11-10 Robert Millan * util/grub.d/00_header.in: Add backward compatibility check for diff --git a/kern/term.c b/kern/term.c index 24324c203..2acfdae72 100644 --- a/kern/term.c +++ b/kern/term.c @@ -44,6 +44,8 @@ grub_term_register_input (grub_term_input_t term) { term->next = grub_term_list_input; grub_term_list_input = term; + if (! grub_cur_term_input) + grub_term_set_current_input (term); } void @@ -51,6 +53,8 @@ grub_term_register_output (grub_term_output_t term) { term->next = grub_term_list_output; grub_term_list_output = term; + if (! grub_cur_term_output) + grub_term_set_current_output (term); } void diff --git a/term/efi/console.c b/term/efi/console.c index 33d404f26..ff842c0f3 100644 --- a/term/efi/console.c +++ b/term/efi/console.c @@ -368,8 +368,6 @@ grub_console_init (void) grub_term_register_input (&grub_console_term_input); grub_term_register_output (&grub_console_term_output); - grub_term_set_current_output (&grub_console_term_output); - grub_term_set_current_input (&grub_console_term_input); } void diff --git a/term/i386/pc/console.c b/term/i386/pc/console.c index 6105ac7d8..7c1512813 100644 --- a/term/i386/pc/console.c +++ b/term/i386/pc/console.c @@ -156,19 +156,19 @@ void grub_console_init (void) { grub_term_register_output (&grub_console_term_output); - grub_term_set_current_output (&grub_console_term_output); #ifdef GRUB_MACHINE_PCBIOS grub_term_register_input (&grub_console_term_input); - grub_term_set_current_input (&grub_console_term_input); #endif } void grub_console_fini (void) { + /* This is to make sure the console is restored to text mode before + we boot. */ grub_term_set_current_output (&grub_console_term_output); + #ifdef GRUB_MACHINE_PCBIOS - grub_term_set_current_input (&grub_console_term_input); grub_term_unregister_input (&grub_console_term_input); #endif grub_term_unregister_output (&grub_console_term_output); diff --git a/term/ieee1275/ofconsole.c b/term/ieee1275/ofconsole.c index cec227ae4..70fda9ab4 100644 --- a/term/ieee1275/ofconsole.c +++ b/term/ieee1275/ofconsole.c @@ -422,8 +422,6 @@ grub_console_init (void) { grub_term_register_input (&grub_ofconsole_term_input); grub_term_register_output (&grub_ofconsole_term_output); - grub_term_set_current_output (&grub_ofconsole_term_output); - grub_term_set_current_input (&grub_ofconsole_term_input); } void