commit-grub
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[1895] 2008-11-07 Robert Millan <address@hidden>


From: Robert Millan
Subject: [1895] 2008-11-07 Robert Millan <address@hidden>
Date: Fri, 07 Nov 2008 19:11:40 +0000

Revision: 1895
          http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=1895
Author:   robertmh
Date:     2008-11-07 19:11:39 +0000 (Fri, 07 Nov 2008)

Log Message:
-----------
2008-11-07  Robert Millan  <address@hidden>

            Modularize at_keyboard.mod:

            * conf/i386.rmk (pkglib_MODULES): Add `at_keyboard.mod'.
            (at_keyboard_mod_SOURCES, at_keyboard_mod_CFLAGS)
            (at_keyboard_mod_LDFLAGS): New variables.

            Actual terminal split:

            * include/grub/term.h (struct grub_term): Split in ...
            (struct grub_term_input): ... this, and ...
            (struct grub_term_output): ... this.  Update all users.
            (grub_term_set_current): Split in ...
            (grub_term_set_current_input): ... this, and ...
            (grub_term_set_current_output): ... this.
            (grub_term_get_current): Split in ...
            (grub_term_get_current_input): ... this, and ...
            (grub_term_get_current_output): ... this.
            (grub_term_register): Split in ...
            (grub_term_register_input): ... this, and ...
            (grub_term_register_output): ... this.
            (grub_term_unregister): Split in ...
            (grub_term_unregister_input): ... this, and ...
            (grub_term_unregister_output): ... this.
            (grub_term_iterate): Split in ...
            (grub_term_iterate_input): ... this, and ...
            (grub_term_iterate_output): ... this.

            * kern/term.c (grub_term_list): Split in ...
            (grub_term_list_input): ... this, and ...
            (grub_term_list_output): ... this.  Update all users.
            (grub_cur_term): Split in ...
            (grub_cur_term_input): ... this, and ...
            (grub_cur_term_output): ... this.  Update all users.
            (grub_term_set_current): Split in ...
            (grub_term_set_current_input): ... this, and ...
            (grub_term_set_current_output): ... this.
            (grub_term_get_current): Split in ...
            (grub_term_get_current_input): ... this, and ...
            (grub_term_get_current_output): ... this.
            (grub_term_register): Split in ...
            (grub_term_register_input): ... this, and ...
            (grub_term_register_output): ... this.
            (grub_term_unregister): Split in ...
            (grub_term_unregister_input): ... this, and ...
            (grub_term_unregister_output): ... this.
            (grub_term_iterate): Split in ...
            (grub_term_iterate_input): ... this, and ...
            (grub_term_iterate_output): ... this.

            * kern/misc.c (grub_abort): Split use of grub_term_get_current() 
into
            a check for input and one for output (and only attempt to get keys
            from user when input works).

            * util/grub-probe.c (grub_term_get_current): Split in ...
            (grub_term_get_current_input): ... this, and ...
            (grub_term_get_current_output): ... this.
            * util/grub-fstest.c: Likewise.
            * util/i386/pc/grub-setup.c: Likewise.
            * util/grub-editenv.c: Likewise.

            Portability adjustments:

            * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Remove
            `term/i386/pc/at_keyboard.c'.
            * kern/ieee1275/init.c [__i386__] (grub_machine_init): Remove call 
to
            grub_keyboard_controller_init() (now handled by terminal .init).
            * kern/i386/coreboot/init.c (grub_machine_init): Add call to
            grub_at_keyboard_init().
            * include/grub/i386/ieee1275/console.h 
(grub_keyboard_controller_init)
            (grub_console_checkkey, grub_console_getkey): Remove (now provided 
by
            at_keyboard.mod via input terminal interface).
            * include/grub/i386/coreboot/console.h: Convert into a stub for
            `<grub/i386/pc/console.h>'.

            Migrate full terminals to new API:

            * term/efi/console.c (grub_console_term): Split into ...
            (grub_console_term_input): ... this, and ...
            (grub_console_term_output): ... this.  Update all users.
            * term/ieee1275/ofconsole.c: Remove __i386__ hack.
            (grub_ofconsole_init): Split into ...
            (grub_ofconsole_init_input): ... this, and ...
            (grub_ofconsole_init_output): ... this.
            (grub_ofconsole_term): Split into ...
            (grub_ofconsole_term_input): ... this, and ...
            (grub_ofconsole_term_output): ... this.  Update all users.
            * term/i386/pc/serial.c (grub_serial_term): Split into ...
            (grub_serial_term_input): ... this, and ...
            (grub_serial_term_output): ... this.  Update all users.
            * term/i386/pc/console.c (grub_console_term): Split into ...
            (grub_console_term_input): ... this, and ...
            (grub_console_term_output): ... this.  Update all users.
            (grub_console_term_input): Only enable it on PC/BIOS platform.
            (grub_console_init): Remove grub_keyboard_controller_init() call.

            Migrate input terminals to new API:

            * term/i386/pc/at_keyboard.c: Replace `cpu' and `machine' with
            `i386' and `i386/pc' to enable build on x86_64 (this driver is
            i386-specific anyway).
            (grub_console_checkkey): Rename to ...
            (grub_at_keyboard_checkkey): ... this.  Static-ize.  Update all
            users.
            (grub_keyboard_controller_orig): New variable.
            (grub_console_getkey): Rename to ...
            (grub_at_keyboard_getkey): ... this.  Static-ize.  Update all
            users.
            (grub_keyboard_controller_init): Static-ize.  Save original
            controller value so that it can be restored ...
            (grub_keyboard_controller_fini): ... here (new function).
            (grub_at_keyboard_term): New structure.
            (GRUB_MOD_INIT(at_keyboard), GRUB_MOD_FINI(at_keyboard)): New
            functions.

            Migrate output terminals to new API:

            * term/i386/pc/vga.c (grub_vga_term): Change type to
            `struct  grub_term_output'.  Remove `.checkkey' and `.getkey'
            members.  Update all users.
            * term/gfxterm.c (grub_video_term): Change type to
            `struct  grub_term_output'.  Remove `.checkkey' and `.getkey'
            members.  Update all users.
            * include/grub/i386/pc/console.h (grub_console_checkkey)
            (grub_console_getkey): Do not export (no longer needed by gfxterm,
            etc).

            Migrate `terminal' command and userland tools to new API:

            * commands/terminal.c (grub_cmd_terminal): Split into ...
            (grub_cmd_terminal_input): ... this, and ...
            (grub_cmd_terminal_output): ... this.
            (GRUB_MOD_INIT(terminal)): Split `terminal' command in two commands:
            `terminal_input' and `terminal_output'.
            * util/grub.d/00_header.in: Adjust `terminal' calls to new
            `terminal_input' / `terminal_output' API.
            * util/grub-mkconfig.in: Export ${GRUB_TERMINAL_INPUT} and
            ${GRUB_TERMINAL_OUTPUT} instead of ${GRUB_TERMINAL} (and if user
            provided ${GRUB_TERMINAL}, convert it).

Modified Paths:
--------------
    trunk/grub2/ChangeLog
    trunk/grub2/commands/terminal.c
    trunk/grub2/conf/i386-ieee1275.rmk
    trunk/grub2/conf/i386.rmk
    trunk/grub2/include/grub/i386/coreboot/console.h
    trunk/grub2/include/grub/i386/ieee1275/console.h
    trunk/grub2/include/grub/i386/pc/console.h
    trunk/grub2/include/grub/term.h
    trunk/grub2/kern/i386/coreboot/init.c
    trunk/grub2/kern/ieee1275/init.c
    trunk/grub2/kern/misc.c
    trunk/grub2/kern/term.c
    trunk/grub2/term/efi/console.c
    trunk/grub2/term/gfxterm.c
    trunk/grub2/term/i386/pc/at_keyboard.c
    trunk/grub2/term/i386/pc/console.c
    trunk/grub2/term/i386/pc/serial.c
    trunk/grub2/term/i386/pc/vga.c
    trunk/grub2/term/ieee1275/ofconsole.c
    trunk/grub2/util/console.c
    trunk/grub2/util/grub-editenv.c
    trunk/grub2/util/grub-fstest.c
    trunk/grub2/util/grub-mkconfig.in
    trunk/grub2/util/grub-probe.c
    trunk/grub2/util/grub.d/00_header.in
    trunk/grub2/util/i386/pc/grub-setup.c

Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog       2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/ChangeLog       2008-11-07 19:11:39 UTC (rev 1895)
@@ -1,3 +1,144 @@
+2008-11-07  Robert Millan  <address@hidden>
+
+       Modularize at_keyboard.mod:
+
+       * conf/i386.rmk (pkglib_MODULES): Add `at_keyboard.mod'.
+       (at_keyboard_mod_SOURCES, at_keyboard_mod_CFLAGS)
+       (at_keyboard_mod_LDFLAGS): New variables.
+
+       Actual terminal split:
+
+       * include/grub/term.h (struct grub_term): Split in ...
+       (struct grub_term_input): ... this, and ...
+       (struct grub_term_output): ... this.  Update all users.
+       (grub_term_set_current): Split in ...
+       (grub_term_set_current_input): ... this, and ...
+       (grub_term_set_current_output): ... this.
+       (grub_term_get_current): Split in ...
+       (grub_term_get_current_input): ... this, and ...
+       (grub_term_get_current_output): ... this.
+       (grub_term_register): Split in ...
+       (grub_term_register_input): ... this, and ...
+       (grub_term_register_output): ... this.
+       (grub_term_unregister): Split in ...
+       (grub_term_unregister_input): ... this, and ...
+       (grub_term_unregister_output): ... this.
+       (grub_term_iterate): Split in ...
+       (grub_term_iterate_input): ... this, and ...
+       (grub_term_iterate_output): ... this.
+
+       * kern/term.c (grub_term_list): Split in ...
+       (grub_term_list_input): ... this, and ...
+       (grub_term_list_output): ... this.  Update all users.
+       (grub_cur_term): Split in ...
+       (grub_cur_term_input): ... this, and ...
+       (grub_cur_term_output): ... this.  Update all users.
+       (grub_term_set_current): Split in ...
+       (grub_term_set_current_input): ... this, and ...
+       (grub_term_set_current_output): ... this.
+       (grub_term_get_current): Split in ...
+       (grub_term_get_current_input): ... this, and ...
+       (grub_term_get_current_output): ... this.
+       (grub_term_register): Split in ...
+       (grub_term_register_input): ... this, and ...
+       (grub_term_register_output): ... this.
+       (grub_term_unregister): Split in ...
+       (grub_term_unregister_input): ... this, and ...
+       (grub_term_unregister_output): ... this.
+       (grub_term_iterate): Split in ...
+       (grub_term_iterate_input): ... this, and ...
+       (grub_term_iterate_output): ... this.
+
+       * kern/misc.c (grub_abort): Split use of grub_term_get_current() into
+       a check for input and one for output (and only attempt to get keys
+       from user when input works).
+
+       * util/grub-probe.c (grub_term_get_current): Split in ...
+       (grub_term_get_current_input): ... this, and ...
+       (grub_term_get_current_output): ... this.
+       * util/grub-fstest.c: Likewise.
+       * util/i386/pc/grub-setup.c: Likewise.
+       * util/grub-editenv.c: Likewise.
+
+       Portability adjustments:
+
+       * conf/i386-ieee1275.rmk (kernel_elf_SOURCES): Remove
+       `term/i386/pc/at_keyboard.c'.
+       * kern/ieee1275/init.c [__i386__] (grub_machine_init): Remove call to
+       grub_keyboard_controller_init() (now handled by terminal .init).
+       * kern/i386/coreboot/init.c (grub_machine_init): Add call to
+       grub_at_keyboard_init().
+       * include/grub/i386/ieee1275/console.h (grub_keyboard_controller_init)
+       (grub_console_checkkey, grub_console_getkey): Remove (now provided by
+       at_keyboard.mod via input terminal interface).
+       * include/grub/i386/coreboot/console.h: Convert into a stub for
+       `<grub/i386/pc/console.h>'.
+
+       Migrate full terminals to new API:
+
+       * term/efi/console.c (grub_console_term): Split into ...
+       (grub_console_term_input): ... this, and ...
+       (grub_console_term_output): ... this.  Update all users.
+       * term/ieee1275/ofconsole.c: Remove __i386__ hack.
+       (grub_ofconsole_init): Split into ...
+       (grub_ofconsole_init_input): ... this, and ...
+       (grub_ofconsole_init_output): ... this.
+       (grub_ofconsole_term): Split into ...
+       (grub_ofconsole_term_input): ... this, and ...
+       (grub_ofconsole_term_output): ... this.  Update all users.
+       * term/i386/pc/serial.c (grub_serial_term): Split into ...
+       (grub_serial_term_input): ... this, and ...
+       (grub_serial_term_output): ... this.  Update all users.
+       * term/i386/pc/console.c (grub_console_term): Split into ...
+       (grub_console_term_input): ... this, and ...
+       (grub_console_term_output): ... this.  Update all users.
+       (grub_console_term_input): Only enable it on PC/BIOS platform.
+       (grub_console_init): Remove grub_keyboard_controller_init() call.
+
+       Migrate input terminals to new API:
+
+       * term/i386/pc/at_keyboard.c: Replace `cpu' and `machine' with
+       `i386' and `i386/pc' to enable build on x86_64 (this driver is
+       i386-specific anyway).
+       (grub_console_checkkey): Rename to ...
+       (grub_at_keyboard_checkkey): ... this.  Static-ize.  Update all
+       users.
+       (grub_keyboard_controller_orig): New variable.
+       (grub_console_getkey): Rename to ...
+       (grub_at_keyboard_getkey): ... this.  Static-ize.  Update all
+       users.
+       (grub_keyboard_controller_init): Static-ize.  Save original
+       controller value so that it can be restored ...
+       (grub_keyboard_controller_fini): ... here (new function).
+       (grub_at_keyboard_term): New structure.
+       (GRUB_MOD_INIT(at_keyboard), GRUB_MOD_FINI(at_keyboard)): New
+       functions.
+
+       Migrate output terminals to new API:
+
+       * term/i386/pc/vga.c (grub_vga_term): Change type to
+       `struct  grub_term_output'.  Remove `.checkkey' and `.getkey'
+       members.  Update all users.
+       * term/gfxterm.c (grub_video_term): Change type to
+       `struct  grub_term_output'.  Remove `.checkkey' and `.getkey'
+       members.  Update all users.
+       * include/grub/i386/pc/console.h (grub_console_checkkey)
+       (grub_console_getkey): Do not export (no longer needed by gfxterm,
+       etc).
+
+       Migrate `terminal' command and userland tools to new API:
+
+       * commands/terminal.c (grub_cmd_terminal): Split into ...
+       (grub_cmd_terminal_input): ... this, and ...
+       (grub_cmd_terminal_output): ... this.
+       (GRUB_MOD_INIT(terminal)): Split `terminal' command in two commands:
+       `terminal_input' and `terminal_output'.
+       * util/grub.d/00_header.in: Adjust `terminal' calls to new
+       `terminal_input' / `terminal_output' API.
+       * util/grub-mkconfig.in: Export ${GRUB_TERMINAL_INPUT} and
+       ${GRUB_TERMINAL_OUTPUT} instead of ${GRUB_TERMINAL} (and if user
+       provided ${GRUB_TERMINAL}, convert it).
+
 2008-11-04  Robert Millan  <address@hidden>
 
        * util/grub.d/10_freebsd.in: New file.  Generate grub configuration

Modified: trunk/grub2/commands/terminal.c
===================================================================
--- trunk/grub2/commands/terminal.c     2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/commands/terminal.c     2008-11-07 19:11:39 UTC (rev 1895)
@@ -24,21 +24,21 @@
 #include <grub/term.h>
 
 static grub_err_t
-grub_cmd_terminal (struct grub_arg_list *state __attribute__ ((unused)),
-                  int argc, char **args)
+grub_cmd_terminal_input (struct grub_arg_list *state __attribute__ ((unused)),
+                        int argc, char **args)
 {
-  grub_term_t term = 0;
+  grub_term_input_t term = 0;
   
-  auto int print_terminal (grub_term_t);
-  auto int find_terminal (grub_term_t);
+  auto int print_terminal (grub_term_input_t);
+  auto int find_terminal (grub_term_input_t);
   
-  int print_terminal (grub_term_t t)
+  int print_terminal (grub_term_input_t t)
     {
       grub_printf (" %s", t->name);
       return 0;
     }
 
-  int find_terminal (grub_term_t t)
+  int find_terminal (grub_term_input_t t)
     {
       if (grub_strcmp (t->name, args[0]) == 0)
        {
@@ -51,30 +51,78 @@
   
   if (argc == 0)
     {
-      grub_printf ("Available terminal(s):");
-      grub_term_iterate (print_terminal);
+      grub_printf ("Available input terminal(s):");
+      grub_term_iterate_input (print_terminal);
       grub_putchar ('\n');
       
-      grub_printf ("Current terminal: %s\n", grub_term_get_current ()->name);
+      grub_printf ("Current input terminal: %s\n", grub_term_get_current_input 
()->name);
     }
   else
     {
-      grub_term_iterate (find_terminal);
+      grub_term_iterate_input (find_terminal);
       if (! term)
-       return grub_error (GRUB_ERR_BAD_ARGUMENT, "no such terminal");
+       return grub_error (GRUB_ERR_BAD_ARGUMENT, "no such input terminal");
 
-      grub_term_set_current (term);
+      grub_term_set_current_input (term);
     }
 
   return GRUB_ERR_NONE;
 }
 
+static grub_err_t
+grub_cmd_terminal_output (struct grub_arg_list *state __attribute__ ((unused)),
+                         int argc, char **args)
+{
+  grub_term_output_t term = 0;
+  
+  auto int print_terminal (grub_term_output_t);
+  auto int find_terminal (grub_term_output_t);
+  
+  int print_terminal (grub_term_output_t t)
+    {
+      grub_printf (" %s", t->name);
+      return 0;
+    }
+
+  int find_terminal (grub_term_output_t t)
+    {
+      if (grub_strcmp (t->name, args[0]) == 0)
+       {
+         term = t;
+         return 1;
+       }
+
+      return 0;
+    }
+  
+  if (argc == 0)
+    {
+      grub_printf ("Available output terminal(s):");
+      grub_term_iterate_output (print_terminal);
+      grub_putchar ('\n');
+      
+      grub_printf ("Current output terminal: %s\n", 
grub_term_get_current_output ()->name);
+    }
+  else
+    {
+      grub_term_iterate_output (find_terminal);
+      if (! term)
+       return grub_error (GRUB_ERR_BAD_ARGUMENT, "no such output terminal");
+
+      grub_term_set_current_output (term);
+    }
+
+  return GRUB_ERR_NONE;
+}
+
 
 GRUB_MOD_INIT(terminal)
 {
   (void)mod;                   /* To stop warning. */
-  grub_register_command ("terminal", grub_cmd_terminal, GRUB_COMMAND_FLAG_BOTH,
-                        "terminal [TERM...]", "Select a terminal.", 0);
+  grub_register_command ("terminal_input", grub_cmd_terminal_input, 
GRUB_COMMAND_FLAG_BOTH,
+                        "terminal_input [TERM...]", "Select an input 
terminal.", 0);
+  grub_register_command ("terminal_output", grub_cmd_terminal_output, 
GRUB_COMMAND_FLAG_BOTH,
+                        "terminal_output [TERM...]", "Select an output 
terminal.", 0);
 }
 
 GRUB_MOD_FINI(terminal)

Modified: trunk/grub2/conf/i386-ieee1275.rmk
===================================================================
--- trunk/grub2/conf/i386-ieee1275.rmk  2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/conf/i386-ieee1275.rmk  2008-11-07 19:11:39 UTC (rev 1895)
@@ -22,7 +22,7 @@
        kern/time.c \
        kern/generic/millisleep.c \
        kern/ieee1275/ieee1275.c \
-       term/ieee1275/ofconsole.c term/i386/pc/at_keyboard.c \
+       term/ieee1275/ofconsole.c \
        disk/ieee1275/ofdisk.c \
        symlist.c
 kernel_elf_HEADERS = arg.h cache.h device.h disk.h dl.h elf.h elfload.h \

Modified: trunk/grub2/conf/i386.rmk
===================================================================
--- trunk/grub2/conf/i386.rmk   2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/conf/i386.rmk   2008-11-07 19:11:39 UTC (rev 1895)
@@ -1,8 +1,11 @@
 # -*- makefile -*-
 
 pkglib_MODULES += cpuid.mod
-
-# For cpuid.mod.
 cpuid_mod_SOURCES = commands/i386/cpuid.c
 cpuid_mod_CFLAGS = $(COMMON_CFLAGS)
 cpuid_mod_LDFLAGS = $(COMMON_LDFLAGS)
+
+pkglib_MODULES += at_keyboard.mod
+at_keyboard_mod_SOURCES = term/i386/pc/at_keyboard.c
+at_keyboard_mod_CFLAGS = $(COMMON_CFLAGS)
+at_keyboard_mod_LDFLAGS = $(COMMON_LDFLAGS)

Modified: trunk/grub2/include/grub/i386/coreboot/console.h
===================================================================
--- trunk/grub2/include/grub/i386/coreboot/console.h    2008-11-07 19:09:01 UTC 
(rev 1894)
+++ trunk/grub2/include/grub/i386/coreboot/console.h    2008-11-07 19:11:39 UTC 
(rev 1895)
@@ -1,25 +1 @@
-/*
- *  GRUB  --  GRand Unified Bootloader
- *  Copyright (C) 2008  Free Software Foundation, Inc.
- *
- *  GRUB is free software: you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation, either version 3 of the License, or
- *  (at your option) any later version.
- *
- *  GRUB is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef _GRUB_CONSOLE_MACHINE_LB_HEADER
-#define _GRUB_CONSOLE_MACHINE_LB_HEADER 1
 #include <grub/i386/pc/console.h>
-
-void grub_keyboard_controller_init (void);
-
-#endif /* ! _GRUB_CONSOLE_MACHINE_LB_HEADER */

Modified: trunk/grub2/include/grub/i386/ieee1275/console.h
===================================================================
--- trunk/grub2/include/grub/i386/ieee1275/console.h    2008-11-07 19:09:01 UTC 
(rev 1894)
+++ trunk/grub2/include/grub/i386/ieee1275/console.h    2008-11-07 19:11:39 UTC 
(rev 1895)
@@ -21,10 +21,6 @@
 
 #include <grub/symbol.h>
 
-void EXPORT_FUNC(grub_keyboard_controller_init) (void);
-int EXPORT_FUNC(grub_console_checkkey) (void);
-int EXPORT_FUNC(grub_console_getkey) (void);
-
 /* Initialize the console system.  */
 void grub_console_init (void);
 

Modified: trunk/grub2/include/grub/i386/pc/console.h
===================================================================
--- trunk/grub2/include/grub/i386/pc/console.h  2008-11-07 19:09:01 UTC (rev 
1894)
+++ trunk/grub2/include/grub/i386/pc/console.h  2008-11-07 19:11:39 UTC (rev 
1895)
@@ -40,8 +40,8 @@
 /* These are global to share code between C and asm.  */
 extern grub_uint8_t grub_console_cur_color;
 void grub_console_real_putchar (int c);
-int EXPORT_FUNC(grub_console_checkkey) (void);
-int EXPORT_FUNC(grub_console_getkey) (void);
+int grub_console_checkkey (void);
+int grub_console_getkey (void);
 grub_uint16_t grub_console_getxy (void);
 void grub_console_gotoxy (grub_uint8_t x, grub_uint8_t y);
 void grub_console_cls (void);

Modified: trunk/grub2/include/grub/term.h
===================================================================
--- trunk/grub2/include/grub/term.h     2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/include/grub/term.h     2008-11-07 19:11:39 UTC (rev 1895)
@@ -137,7 +137,7 @@
                                  - 1)
 
 
-struct grub_term
+struct grub_term_input
 {
   /* The terminal name.  */
   const char *name;
@@ -148,6 +148,28 @@
   /* Clean up the terminal.  */
   grub_err_t (*fini) (void);
   
+  /* Check if any input character is available.  */
+  int (*checkkey) (void);
+  
+  /* Get a character.  */
+  int (*getkey) (void);
+
+  /* The next terminal.  */
+  struct grub_term_input *next;
+};
+typedef struct grub_term_input *grub_term_input_t;
+
+struct grub_term_output
+{
+  /* The terminal name.  */
+  const char *name;
+
+  /* Initialize the terminal.  */
+  grub_err_t (*init) (void);
+
+  /* Clean up the terminal.  */
+  grub_err_t (*fini) (void);
+  
   /* Put a character. C is encoded in Unicode.  */
   void (*putchar) (grub_uint32_t c);
 
@@ -155,12 +177,6 @@
      encoded in Unicode.  */
   grub_ssize_t (*getcharwidth) (grub_uint32_t c);
   
-  /* Check if any input character is available.  */
-  int (*checkkey) (void);
-  
-  /* Get a character.  */
-  int (*getkey) (void);
-  
   /* Get the screen size. The return value is ((Width << 8) | Height).  */
   grub_uint16_t (*getwh) (void);
 
@@ -194,16 +210,21 @@
   grub_uint32_t flags;
   
   /* The next terminal.  */
-  struct grub_term *next;
+  struct grub_term_output *next;
 };
-typedef struct grub_term *grub_term_t;
+typedef struct grub_term_output *grub_term_output_t;
 
-void EXPORT_FUNC(grub_term_register) (grub_term_t term);
-void EXPORT_FUNC(grub_term_unregister) (grub_term_t term);
-void EXPORT_FUNC(grub_term_iterate) (int (*hook) (grub_term_t term));
+void EXPORT_FUNC(grub_term_register_input) (grub_term_input_t term);
+void EXPORT_FUNC(grub_term_register_output) (grub_term_output_t term);
+void EXPORT_FUNC(grub_term_unregister_input) (grub_term_input_t term);
+void EXPORT_FUNC(grub_term_unregister_output) (grub_term_output_t term);
+void EXPORT_FUNC(grub_term_iterate_input) (int (*hook) (grub_term_input_t 
term));
+void EXPORT_FUNC(grub_term_iterate_output) (int (*hook) (grub_term_output_t 
term));
 
-grub_err_t EXPORT_FUNC(grub_term_set_current) (grub_term_t term);
-grub_term_t EXPORT_FUNC(grub_term_get_current) (void);
+grub_err_t EXPORT_FUNC(grub_term_set_current_input) (grub_term_input_t term);
+grub_err_t EXPORT_FUNC(grub_term_set_current_output) (grub_term_output_t term);
+grub_term_input_t EXPORT_FUNC(grub_term_get_current_input) (void);
+grub_term_output_t EXPORT_FUNC(grub_term_get_current_output) (void);
 
 void EXPORT_FUNC(grub_putchar) (int c);
 void EXPORT_FUNC(grub_putcode) (grub_uint32_t code);

Modified: trunk/grub2/kern/i386/coreboot/init.c
===================================================================
--- trunk/grub2/kern/i386/coreboot/init.c       2008-11-07 19:09:01 UTC (rev 
1894)
+++ trunk/grub2/kern/i386/coreboot/init.c       2008-11-07 19:11:39 UTC (rev 
1895)
@@ -138,6 +138,7 @@
   grub_upper_mem -= GRUB_MEMORY_MACHINE_UPPER_START;
 
   grub_tsc_init ();
+  grub_at_keyboard_init ();
 }
 
 void

Modified: trunk/grub2/kern/ieee1275/init.c
===================================================================
--- trunk/grub2/kern/ieee1275/init.c    2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/kern/ieee1275/init.c    2008-11-07 19:11:39 UTC (rev 1895)
@@ -217,7 +217,6 @@
   grub_console_init ();
 #ifdef __i386__
   grub_get_extended_memory ();
-  grub_keyboard_controller_init ();
 #endif
   grub_claim_heap ();
   grub_ofdisk_init ();

Modified: trunk/grub2/kern/misc.c
===================================================================
--- trunk/grub2/kern/misc.c     2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/kern/misc.c     2008-11-07 19:11:39 UTC (rev 1895)
@@ -1026,10 +1026,15 @@
 void
 grub_abort (void)
 {
-  if (grub_term_get_current ())
+  if (grub_term_get_current_output ())
     {
-      grub_printf ("\nAborted. Press any key to exit.");
-      grub_getkey ();
+      grub_printf ("\nAborted.");
+
+      if (grub_term_get_current_input ())
+       {
+         grub_printf (" Press any key to exit.");
+         grub_getkey ();
+       }
     }
 
   grub_exit ();

Modified: trunk/grub2/kern/term.c
===================================================================
--- trunk/grub2/kern/term.c     2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/kern/term.c     2008-11-07 19:11:39 UTC (rev 1895)
@@ -23,10 +23,12 @@
 #include <grub/env.h>
 
 /* The list of terminals.  */
-static grub_term_t grub_term_list;
+static grub_term_input_t grub_term_list_input;
+static grub_term_output_t grub_term_list_output;
 
 /* The current terminal.  */
-static grub_term_t grub_cur_term;
+static grub_term_input_t grub_cur_term_input;
+static grub_term_output_t grub_cur_term_output;
 
 /* The amount of lines counted by the pager.  */
 static int grub_more_lines;
@@ -38,18 +40,25 @@
 static int cursor_state = 1;
 
 void
-grub_term_register (grub_term_t term)
+grub_term_register_input (grub_term_input_t term)
 {
-  term->next = grub_term_list;
-  grub_term_list = term;
+  term->next = grub_term_list_input;
+  grub_term_list_input = term;
 }
 
 void
-grub_term_unregister (grub_term_t term)
+grub_term_register_output (grub_term_output_t term)
 {
-  grub_term_t *p, q;
+  term->next = grub_term_list_output;
+  grub_term_list_output = term;
+}
+
+void
+grub_term_unregister_input (grub_term_input_t term)
+{
+  grub_term_input_t *p, q;
   
-  for (p = &grub_term_list, q = *p; q; p = &(q->next), q = q->next)
+  for (p = &grub_term_list_input, q = *p; q; p = &(q->next), q = q->next)
     if (q == term)
       {
         *p = q->next;
@@ -58,45 +67,87 @@
 }
 
 void
-grub_term_iterate (int (*hook) (grub_term_t term))
+grub_term_unregister_output (grub_term_output_t term)
 {
-  grub_term_t p;
+  grub_term_output_t *p, q;
   
-  for (p = grub_term_list; p; p = p->next)
+  for (p = &grub_term_list_output, q = *p; q; p = &(q->next), q = q->next)
+    if (q == term)
+      {
+        *p = q->next;
+       break;
+      }
+}
+
+void
+grub_term_iterate_input (int (*hook) (grub_term_input_t term))
+{
+  grub_term_input_t p;
+  
+  for (p = grub_term_list_input; p; p = p->next)
     if (hook (p))
       break;
 }
 
+void
+grub_term_iterate_output (int (*hook) (grub_term_output_t term))
+{
+  grub_term_output_t p;
+  
+  for (p = grub_term_list_output; p; p = p->next)
+    if (hook (p))
+      break;
+}
+
 grub_err_t
-grub_term_set_current (grub_term_t term)
+grub_term_set_current_input (grub_term_input_t term)
 {
-  if (grub_cur_term && grub_cur_term->fini)
-    if ((grub_cur_term->fini) () != GRUB_ERR_NONE)
+  if (grub_cur_term_input && grub_cur_term_input->fini)
+    if ((grub_cur_term_input->fini) () != GRUB_ERR_NONE)
       return grub_errno;
 
   if (term->init)
     if ((term->init) () != GRUB_ERR_NONE)
       return grub_errno;
   
-  grub_cur_term = term;
-  grub_cls ();
-  grub_setcursor (grub_getcursor ());
+  grub_cur_term_input = term;
   return GRUB_ERR_NONE;
 }
 
-grub_term_t
-grub_term_get_current (void)
+grub_err_t
+grub_term_set_current_output (grub_term_output_t term)
 {
-  return grub_cur_term;
+  if (grub_cur_term_output && grub_cur_term_output->fini)
+    if ((grub_cur_term_output->fini) () != GRUB_ERR_NONE)
+      return grub_errno;
+
+  if (term->init)
+    if ((term->init) () != GRUB_ERR_NONE)
+      return grub_errno;
+  
+  grub_cur_term_output = term;
+  return GRUB_ERR_NONE;
 }
 
+grub_term_input_t
+grub_term_get_current_input (void)
+{
+  return grub_cur_term_input;
+}
+
+grub_term_output_t
+grub_term_get_current_output (void)
+{
+  return grub_cur_term_output;
+}
+
 /* Put a Unicode character.  */
 void
 grub_putcode (grub_uint32_t code)
 {
   int height = grub_getwh () & 255;
 
-  if (code == '\t' && grub_cur_term->getxy)
+  if (code == '\t' && grub_cur_term_output->getxy)
     {
       int n;
       
@@ -107,7 +158,7 @@
       return;
     }
   
-  (grub_cur_term->putchar) (code);
+  (grub_cur_term_output->putchar) (code);
   
   if (code == '\n')
     {
@@ -171,70 +222,70 @@
 grub_ssize_t
 grub_getcharwidth (grub_uint32_t code)
 {
-  return (grub_cur_term->getcharwidth) (code);
+  return (grub_cur_term_output->getcharwidth) (code);
 }
 
 int
 grub_getkey (void)
 {
-  return (grub_cur_term->getkey) ();
+  return (grub_cur_term_input->getkey) ();
 }
 
 int
 grub_checkkey (void)
 {
-  return (grub_cur_term->checkkey) ();
+  return (grub_cur_term_input->checkkey) ();
 }
 
 grub_uint16_t
 grub_getxy (void)
 {
-  return (grub_cur_term->getxy) ();
+  return (grub_cur_term_output->getxy) ();
 }
 
 grub_uint16_t
 grub_getwh (void)
 {
-  return (grub_cur_term->getwh) ();
+  return (grub_cur_term_output->getwh) ();
 }
 
 void
 grub_gotoxy (grub_uint8_t x, grub_uint8_t y)
 {
-  (grub_cur_term->gotoxy) (x, y);
+  (grub_cur_term_output->gotoxy) (x, y);
 }
 
 void
 grub_cls (void)
 {
-  if ((grub_cur_term->flags & GRUB_TERM_DUMB) || (grub_env_get ("debug")))
+  if ((grub_cur_term_output->flags & GRUB_TERM_DUMB) || (grub_env_get 
("debug")))
     {
       grub_putchar ('\n');
       grub_refresh ();
     }
   else
-    (grub_cur_term->cls) ();
+    (grub_cur_term_output->cls) ();
 }
 
 void
 grub_setcolorstate (grub_term_color_state state)
 {
-  if (grub_cur_term->setcolorstate)
-    (grub_cur_term->setcolorstate) (state);
+  if (grub_cur_term_output->setcolorstate)
+    (grub_cur_term_output->setcolorstate) (state);
 }
 
 void
 grub_setcolor (grub_uint8_t normal_color, grub_uint8_t highlight_color)
 {
-  if (grub_cur_term->setcolor)
-    (grub_cur_term->setcolor) (normal_color, highlight_color);
+  if (grub_cur_term_output->setcolor)
+    (grub_cur_term_output->setcolor) (normal_color, highlight_color);
 }
 
 void
 grub_getcolor (grub_uint8_t *normal_color, grub_uint8_t *highlight_color)
 {
-  if (grub_cur_term->getcolor)
-    (grub_cur_term->getcolor) (normal_color, highlight_color);
+  if (grub_cur_term_output->getcolor)
+    (grub_cur_term_output->getcolor) (normal_color, highlight_color);
 }
 
 int
@@ -242,9 +293,9 @@
 {
   int ret = cursor_state;
 
-  if (grub_cur_term->setcursor)
+  if (grub_cur_term_output->setcursor)
     {
-      (grub_cur_term->setcursor) (on);
+      (grub_cur_term_output->setcursor) (on);
       cursor_state = on;
     }
   
@@ -260,8 +311,8 @@
 void
 grub_refresh (void)
 {
-  if (grub_cur_term->refresh)
-    (grub_cur_term->refresh) ();
+  if (grub_cur_term_output->refresh)
+    (grub_cur_term_output->refresh) ();
 }
 
 void

Modified: trunk/grub2/term/efi/console.c
===================================================================
--- trunk/grub2/term/efi/console.c      2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/term/efi/console.c      2008-11-07 19:11:39 UTC (rev 1895)
@@ -332,15 +332,18 @@
   efi_call_2 (o->enable_cursor, o, on);
 }
 
-static struct grub_term grub_console_term =
+static struct grub_term_input grub_console_term_input =
   {
     .name = "console",
-    .init = 0,
-    .fini = 0,
+    .checkkey = grub_console_checkkey,
+    .getkey = grub_console_getkey,
+  };
+
+static struct grub_term_output grub_console_term_output =
+  {
+    .name = "console",
     .putchar = grub_console_putchar,
     .getcharwidth = grub_console_getcharwidth,
-    .checkkey = grub_console_checkkey,
-    .getkey = grub_console_getkey,
     .getwh = grub_console_getwh,
     .getxy = grub_console_getxy,
     .gotoxy = grub_console_gotoxy,
@@ -350,7 +353,6 @@
     .getcolor = grub_console_getcolor,
     .setcursor = grub_console_setcursor,
     .flags = 0,
-    .next = 0
   };
 
 void
@@ -364,12 +366,15 @@
       return;
     }
 
-  grub_term_register (&grub_console_term);
-  grub_term_set_current (&grub_console_term);
+  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
 grub_console_fini (void)
 {
-  grub_term_unregister (&grub_console_term);
+  grub_term_unregister_input (&grub_console_term_input);
+  grub_term_unregister_output (&grub_console_term_output);
 }

Modified: trunk/grub2/term/gfxterm.c
===================================================================
--- trunk/grub2/term/gfxterm.c  2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/term/gfxterm.c  2008-11-07 19:11:39 UTC (rev 1895)
@@ -1056,15 +1056,13 @@
   return grub_errno;
 }
 
-static struct grub_term grub_video_term =
+static struct grub_term_output grub_video_term =
   {
     .name = "gfxterm",
     .init = grub_gfxterm_init,
     .fini = grub_gfxterm_fini,
     .putchar = grub_gfxterm_putchar,
     .getcharwidth = grub_gfxterm_getcharwidth,
-    .checkkey = grub_console_checkkey,
-    .getkey = grub_console_getkey,
     .getwh = grub_virtual_screen_getwh,
     .getxy = grub_virtual_screen_getxy,
     .gotoxy = grub_gfxterm_gotoxy,
@@ -1081,7 +1079,7 @@
 GRUB_MOD_INIT(term_gfxterm)
 {
   my_mod = mod;
-  grub_term_register (&grub_video_term);
+  grub_term_register_output (&grub_video_term);
 
   grub_register_command ("background_image",
                          grub_gfxterm_background_image_cmd,
@@ -1094,5 +1092,5 @@
 GRUB_MOD_FINI(term_gfxterm)
 {
   grub_unregister_command ("bgimage");
-  grub_term_unregister (&grub_video_term);
+  grub_term_unregister_output (&grub_video_term);
 }

Modified: trunk/grub2/term/i386/pc/at_keyboard.c
===================================================================
--- trunk/grub2/term/i386/pc/at_keyboard.c      2008-11-07 19:09:01 UTC (rev 
1894)
+++ trunk/grub2/term/i386/pc/at_keyboard.c      2008-11-07 19:11:39 UTC (rev 
1895)
@@ -16,9 +16,10 @@
  *  along with GRUB.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include <grub/machine/console.h>
-#include <grub/cpu/at_keyboard.h>
-#include <grub/cpu/io.h>
+#include <grub/dl.h>
+#include <grub/i386/pc/console.h>
+#include <grub/i386/at_keyboard.h>
+#include <grub/i386/io.h>
 #include <grub/misc.h>
 #include <grub/term.h>
 
@@ -61,6 +62,8 @@
   'B', 'N', 'M', '<', '>', '?'
 };
 
+static grub_uint8_t grub_keyboard_controller_orig;
+
 static void
 grub_keyboard_controller_write (grub_uint8_t c)
 {
@@ -77,12 +80,6 @@
   return grub_inb (KEYBOARD_REG_DATA);
 }
 
-void
-grub_keyboard_controller_init (void)
-{
-  grub_keyboard_controller_write (grub_keyboard_controller_read () | 
KEYBOARD_SCANCODE_SET1);
-}
-
 /* FIXME: This should become an interrupt service routine.  For now
    it's just used to catch events from control keys.  */
 static void
@@ -148,8 +145,8 @@
 }
 
 /* If there is a character pending, return it; otherwise return -1.  */
-int
-grub_console_checkkey (void)
+static int
+grub_at_keyboard_checkkey (void)
 {
   int code, key;
   code = grub_keyboard_getkey ();
@@ -192,13 +189,47 @@
   return (int) key;
 }
 
-int
-grub_console_getkey (void)
+static int
+grub_at_keyboard_getkey (void)
 {
   int key;
   do
     {
-      key = grub_console_checkkey ();
+      key = grub_at_keyboard_checkkey ();
     } while (key == -1);
   return key;
 }
+
+static grub_err_t
+grub_keyboard_controller_init (void)
+{
+  grub_keyboard_controller_orig = grub_keyboard_controller_read ();
+  grub_keyboard_controller_write (grub_keyboard_controller_orig | 
KEYBOARD_SCANCODE_SET1);
+  return GRUB_ERR_NONE;
+}
+
+static grub_err_t
+grub_keyboard_controller_fini (void)
+{
+  grub_keyboard_controller_write (grub_keyboard_controller_orig);
+  return GRUB_ERR_NONE;
+}
+
+static struct grub_term_input grub_at_keyboard_term =
+  {
+    .name = "at_keyboard",
+    .init = grub_keyboard_controller_init,
+    .fini = grub_keyboard_controller_fini,
+    .checkkey = grub_at_keyboard_checkkey,
+    .getkey = grub_at_keyboard_getkey,
+  };
+
+GRUB_MOD_INIT(at_keyboard)
+{
+  grub_term_register_input (&grub_at_keyboard_term);
+}
+
+GRUB_MOD_FINI(at_keyboard)
+{
+  grub_term_unregister_output (&grub_at_keyboard_term);
+}

Modified: trunk/grub2/term/i386/pc/console.c
===================================================================
--- trunk/grub2/term/i386/pc/console.c  2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/term/i386/pc/console.c  2008-11-07 19:11:39 UTC (rev 1895)
@@ -125,15 +125,22 @@
   *highlight_color = grub_console_highlight_color;
 }
 
-static struct grub_term grub_console_term =
+/* On non-BIOS platforms, console.c is used in combination with vga_text.c
+   (only to handle output).  */
+#ifdef GRUB_MACHINE_PCBIOS
+static struct grub_term_input grub_console_term_input =
   {
     .name = "console",
-    .init = 0,
-    .fini = 0,
+    .checkkey = grub_console_checkkey,
+    .getkey = grub_console_getkey,
+  };
+#endif
+
+static struct grub_term_output grub_console_term_output =
+  {
+    .name = "console",
     .putchar = grub_console_putchar,
     .getcharwidth = grub_console_getcharwidth,
-    .checkkey = grub_console_checkkey,
-    .getkey = grub_console_getkey,
     .getwh = grub_console_getwh,
     .getxy = grub_console_getxy,
     .gotoxy = grub_console_gotoxy,
@@ -143,23 +150,26 @@
     .getcolor = grub_console_getcolor,
     .setcursor = grub_console_setcursor,
     .flags = 0,
-    .next = 0
   };
 
 void
 grub_console_init (void)
 {
-  grub_term_register (&grub_console_term);
-  grub_term_set_current (&grub_console_term);
-
-#ifdef GRUB_MACHINE_LINUXBIOS
-  grub_keyboard_controller_init ();
+  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)
 {
-  grub_term_set_current (&grub_console_term);
-  grub_term_unregister (&grub_console_term);
+  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);
 }

Modified: trunk/grub2/term/i386/pc/serial.c
===================================================================
--- trunk/grub2/term/i386/pc/serial.c   2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/term/i386/pc/serial.c   2008-11-07 19:11:39 UTC (rev 1895)
@@ -467,15 +467,18 @@
     grub_terminfo_cursor_off ();
 }
 
-static struct grub_term grub_serial_term =
+static struct grub_term_input grub_serial_term_input =
 {
   .name = "serial",
-  .init = 0,
-  .fini = 0,
+  .checkkey = grub_serial_checkkey,
+  .getkey = grub_serial_getkey,
+};
+
+static struct grub_term_output grub_serial_term_output =
+{
+  .name = "serial",
   .putchar = grub_serial_putchar,
   .getcharwidth = grub_serial_getcharwidth,
-  .checkkey = grub_serial_checkkey,
-  .getkey = grub_serial_getkey,
   .getwh = grub_serial_getwh,
   .getxy = grub_serial_getxy,
   .gotoxy = grub_serial_gotoxy,
@@ -483,7 +486,6 @@
   .setcolorstate = grub_serial_setcolorstate,
   .setcursor = grub_serial_setcursor,
   .flags = 0,
-  .next = 0
 };
 
 
@@ -575,7 +577,8 @@
       /* Register terminal if not yet registered.  */
       if (registered == 0)
        {
-         grub_term_register (&grub_serial_term);
+         grub_term_register_input (&grub_serial_term_input);
+         grub_term_register_output (&grub_serial_term_output);
          registered = 1;
        }
     }
@@ -590,7 +593,8 @@
          if (serial_hw_init () != GRUB_ERR_NONE)
            {
              /* If unable to restore settings, unregister terminal.  */
-             grub_term_unregister (&grub_serial_term);
+             grub_term_unregister_input (&grub_serial_term_input);
+             grub_term_unregister_output (&grub_serial_term_output);
              registered = 0;
            }
        }
@@ -616,5 +620,8 @@
 {
   grub_unregister_command ("serial");
   if (registered == 1)         /* Unregister terminal only if registered. */
-    grub_term_unregister (&grub_serial_term);
+    {
+      grub_term_unregister_input (&grub_serial_term_input);
+      grub_term_unregister_output (&grub_serial_term_output);
+    }
 }

Modified: trunk/grub2/term/i386/pc/vga.c
===================================================================
--- trunk/grub2/term/i386/pc/vga.c      2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/term/i386/pc/vga.c      2008-11-07 19:11:39 UTC (rev 1895)
@@ -473,15 +473,13 @@
     }
 }
 
-static struct grub_term grub_vga_term =
+static struct grub_term_output grub_vga_term =
   {
     .name = "vga",
     .init = grub_vga_mod_init,
     .fini = grub_vga_mod_fini,
     .putchar = grub_vga_putchar,
     .getcharwidth = grub_vga_getcharwidth,
-    .checkkey = grub_console_checkkey,
-    .getkey = grub_console_getkey,
     .getwh = grub_vga_getwh,
     .getxy = grub_vga_getxy,
     .gotoxy = grub_vga_gotoxy,
@@ -489,7 +487,6 @@
     .setcolorstate = grub_vga_setcolorstate,
     .setcursor = grub_vga_setcursor,
     .flags = 0,
-    .next = 0
   };
 
 GRUB_MOD_INIT(vga)
@@ -497,10 +494,10 @@
 #ifndef GRUB_UTIL
   my_mod = mod;
 #endif
-  grub_term_register (&grub_vga_term);
+  grub_term_register_output (&grub_vga_term);
 }
 
 GRUB_MOD_FINI(vga)
 {
-  grub_term_unregister (&grub_vga_term);
+  grub_term_unregister_output (&grub_vga_term);
 }

Modified: trunk/grub2/term/ieee1275/ofconsole.c
===================================================================
--- trunk/grub2/term/ieee1275/ofconsole.c       2008-11-07 19:09:01 UTC (rev 
1894)
+++ trunk/grub2/term/ieee1275/ofconsole.c       2008-11-07 19:11:39 UTC (rev 
1895)
@@ -33,10 +33,8 @@
 static int grub_curr_x;
 static int grub_curr_y;
 
-#ifndef __i386__
 static int grub_keybuf;
 static int grub_buflen;
-#endif
 
 struct color
 {
@@ -144,7 +142,6 @@
   *highlight_color = grub_ofconsole_highlight_color;
 }
 
-#ifndef __i386__
 static int
 grub_ofconsole_readkey (int *key)
 {
@@ -342,9 +339,22 @@
 }
 
 static grub_err_t
-grub_ofconsole_init (void)
+grub_ofconsole_init_input (void)
 {
   grub_ssize_t actual;
+
+  if (grub_ieee1275_get_integer_property (grub_ieee1275_chosen, "stdin", 
&stdin_ihandle,
+                                         sizeof stdin_ihandle, &actual)
+      || actual != sizeof stdin_ihandle)
+    return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Cannot find stdin");
+
+  return 0;
+}
+
+static grub_err_t
+grub_ofconsole_init_output (void)
+{
+  grub_ssize_t actual;
   int col;
 
   /* The latest PowerMacs don't actually initialize the screen for us, so we
@@ -358,11 +368,6 @@
       || actual != sizeof stdout_ihandle)
     return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Cannot find stdout");
 
-  if (grub_ieee1275_get_integer_property (grub_ieee1275_chosen, "stdin", 
&stdin_ihandle,
-                                         sizeof stdin_ihandle, &actual)
-      || actual != sizeof stdin_ihandle)
-    return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "Cannot find stdin");
-
   /* Initialize colors.  */
   if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_CANNOT_SET_COLORS))
     {
@@ -385,20 +390,22 @@
 
 
 
-static struct grub_term grub_ofconsole_term =
+static struct grub_term_input grub_ofconsole_term_input =
   {
     .name = "ofconsole",
-    .init = grub_ofconsole_init,
+    .init = grub_ofconsole_init_input,
     .fini = grub_ofconsole_fini,
+    .checkkey = grub_ofconsole_checkkey,
+    .getkey = grub_ofconsole_getkey,
+  };
+
+static struct grub_term_output grub_ofconsole_term_output =
+  {
+    .name = "ofconsole",
+    .init = grub_ofconsole_init_output,
+    .fini = grub_ofconsole_fini,
     .putchar = grub_ofconsole_putchar,
     .getcharwidth = grub_ofconsole_getcharwidth,
-#ifdef __i386__
-    .checkkey = grub_console_checkkey,
-    .getkey = grub_console_getkey,
-#else
-    .checkkey = grub_ofconsole_checkkey,
-    .getkey = grub_ofconsole_getkey,
-#endif
     .getxy = grub_ofconsole_getxy,
     .getwh = grub_ofconsole_getwh,
     .gotoxy = grub_ofconsole_gotoxy,
@@ -409,18 +416,20 @@
     .setcursor = grub_ofconsole_setcursor,
     .refresh = grub_ofconsole_refresh,
     .flags = 0,
-    .next = 0
   };
 
 void
 grub_console_init (void)
 {
-  grub_term_register (&grub_ofconsole_term);
-  grub_term_set_current (&grub_ofconsole_term);
+  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
 grub_console_fini (void)
 {
-  grub_term_unregister (&grub_ofconsole_term);
+  grub_term_unregister_input (&grub_ofconsole_term_input);
+  grub_term_unregister_output (&grub_ofconsole_term_output);
 }

Modified: trunk/grub2/util/console.c
===================================================================
--- trunk/grub2/util/console.c  2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/util/console.c  2008-11-07 19:11:39 UTC (rev 1895)
@@ -371,7 +371,8 @@
 grub_console_init (void)
 {
   grub_term_register (&grub_ncurses_term);
-  grub_term_set_current (&grub_ncurses_term);
+  grub_term_set_current_input (&grub_ncurses_term);
+  grub_term_set_current_output (&grub_ncurses_term);
 }
 
 void

Modified: trunk/grub2/util/grub-editenv.c
===================================================================
--- trunk/grub2/util/grub-editenv.c     2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/util/grub-editenv.c     2008-11-07 19:11:39 UTC (rev 1895)
@@ -41,11 +41,17 @@
 }
 
 void *
-grub_term_get_current (void)
+grub_term_get_current_input (void)
 {
   return 0;
 }
 
+void *
+grub_term_get_current_output (void)
+{
+  return 0;
+}
+
 int
 grub_getkey (void)
 {

Modified: trunk/grub2/util/grub-fstest.c
===================================================================
--- trunk/grub2/util/grub-fstest.c      2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/util/grub-fstest.c      2008-11-07 19:11:39 UTC (rev 1895)
@@ -54,11 +54,17 @@
 }
 
 grub_term_t
-grub_term_get_current (void)
+grub_term_get_current_input (void)
 {
   return 0;
 }
 
+grub_term_t
+grub_term_get_current_output (void)
+{
+  return 0;
+}
+
 void
 grub_refresh (void)
 {

Modified: trunk/grub2/util/grub-mkconfig.in
===================================================================
--- trunk/grub2/util/grub-mkconfig.in   2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/util/grub-mkconfig.in   2008-11-07 19:11:39 UTC (rev 1895)
@@ -130,31 +130,37 @@
   . ${sysconfdir}/default/grub
 fi
 
-case x${GRUB_TERMINAL} in
+# XXX: should this be deprecated at some point?
+if [ "x${GRUB_TERMINAL}" != "x" ] ; then
+  GRUB_TERMINAL_INPUT="${GRUB_TERMINAL}"
+  GRUB_TERMINAL_OUTPUT="${GRUB_TERMINAL}"
+fi
+
+case x${GRUB_TERMINAL_OUTPUT} in
   x)
     # If this platform supports gfxterm, try to use it.
     if test -e ${grub_prefix}/gfxterm.mod ; then
-      GRUB_TERMINAL=gfxterm
+      GRUB_TERMINAL_OUTPUT=gfxterm
     fi
   ;;
   xconsole | xserial | xofconsole | xgfxterm) ;;
-  *) echo "Invalid terminal \"${GRUB_TERMINAL}\"" >&2 ; exit 1 ;;
+  *) echo "Invalid output terminal \"${GRUB_TERMINAL_OUTPUT}\"" >&2 ; exit 1 ;;
 esac
 
 # check for terminals that require fonts
-case ${GRUB_TERMINAL} in
+case ${GRUB_TERMINAL_OUTPUT} in
   gfxterm)
     if path=`font_path` ; then
       GRUB_FONT_PATH="${path}"
     else
       # fallback to the native terminal for this platform
-      unset GRUB_TERMINAL
+      unset GRUB_TERMINAL_OUTPUT
     fi
   ;;
 esac
 
 # does our terminal support utf-8 ?
-case ${GRUB_TERMINAL} in
+case ${GRUB_TERMINAL_OUTPUT} in
   gfxterm) ;;
   *)
     # make sure all our children behave in conformance with ascii..
@@ -167,7 +173,7 @@
 export GRUB_DEVICE GRUB_DEVICE_UUID GRUB_DEVICE_BOOT GRUB_DEVICE_BOOT_UUID 
GRUB_FS GRUB_FONT_PATH GRUB_PRELOAD_MODULES
 
 # These are optional, user-defined variables.
-export GRUB_DEFAULT GRUB_TIMEOUT GRUB_DISTRIBUTOR GRUB_CMDLINE_LINUX 
GRUB_CMDLINE_LINUX_DEFAULT GRUB_TERMINAL GRUB_SERIAL_COMMAND 
GRUB_DISABLE_LINUX_UUID GRUB_GFXMODE
+export GRUB_DEFAULT GRUB_TIMEOUT GRUB_DISTRIBUTOR GRUB_CMDLINE_LINUX 
GRUB_CMDLINE_LINUX_DEFAULT GRUB_TERMINAL_OUTPUT GRUB_SERIAL_COMMAND 
GRUB_DISABLE_LINUX_UUID GRUB_GFXMODE
 
 if test "x${grub_cfg}" != "x"; then
   rm -f ${grub_cfg}.new

Modified: trunk/grub2/util/grub-probe.c
===================================================================
--- trunk/grub2/util/grub-probe.c       2008-11-07 19:09:01 UTC (rev 1894)
+++ trunk/grub2/util/grub-probe.c       2008-11-07 19:11:39 UTC (rev 1895)
@@ -66,12 +66,18 @@
   return -1;
 }
 
-grub_term_t
-grub_term_get_current (void)
+grub_term_input_t
+grub_term_get_current_input (void)
 {
   return 0;
 }
 
+grub_term_output_t
+grub_term_get_current_output (void)
+{
+  return 0;
+}
+
 void
 grub_refresh (void)
 {

Modified: trunk/grub2/util/grub.d/00_header.in
===================================================================
--- trunk/grub2/util/grub.d/00_header.in        2008-11-07 19:09:01 UTC (rev 
1894)
+++ trunk/grub2/util/grub.d/00_header.in        2008-11-07 19:11:39 UTC (rev 
1895)
@@ -40,8 +40,31 @@
 set timeout=${GRUB_TIMEOUT}
 EOF
 
-case x${GRUB_TERMINAL} in
-  xgfxterm)
+case ${GRUB_TERMINAL_INPUT}:${GRUB_TERMINAL_OUTPUT} in
+  serial:* | *: serial)
+    if ! test -e ${grub_prefix}/serial.mod ; then
+      echo "Serial terminal not available on this platform." >&2 ; exit 1
+    fi
+
+    if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then
+      echo "Warning, requested serial terminal but GRUB_SERIAL_COMMAND is 
unspecified. Default parameters will be used." >&2
+      GRUB_SERIAL_COMMAND=serial
+    fi
+    echo "${GRUB_SERIAL_COMMAND}"
+  ;;
+esac
+
+case x${GRUB_TERMINAL_INPUT} in
+  x)
+    # Just use the native terminal
+  ;;
+  x*)
+    echo "terminal_input ${GRUB_TERMINAL_INPUT}"
+  ;;
+esac
+
+case x${GRUB_TERMINAL_OUTPUT} in
+ xgfxterm)
     # Make the font accessible
     prepare_grub_to_access_device `${grub_probe} --target=device 
${GRUB_FONT_PATH}`
 
@@ -62,26 +85,14 @@
   set gfxmode=${GRUB_GFXMODE}
   insmod gfxterm
   insmod ${video_backend}
-  terminal gfxterm
+  terminal_output gfxterm
 fi
 EOF
   ;;
-  xserial)
-    if ! test -e ${grub_prefix}/serial.mod ; then
-      echo "Serial terminal not available on this platform." >&2 ; exit 1
-    fi
-
-    if [ "x${GRUB_SERIAL_COMMAND}" = "x" ] ; then
-      echo "Warning, requested serial terminal but GRUB_SERIAL_COMMAND is 
unspecified. Default parameters will be used." >&2
-      GRUB_SERIAL_COMMAND=serial
-    fi
-    echo "${GRUB_SERIAL_COMMAND}"
-    echo "terminal serial"
-  ;;
   x)
     # Just use the native terminal
   ;;
   x*)
-    echo "terminal ${GRUB_TERMINAL}"
+    echo "terminal_output ${GRUB_TERMINAL_OUTPUT}"
   ;;
 esac

Modified: trunk/grub2/util/i386/pc/grub-setup.c
===================================================================
--- trunk/grub2/util/i386/pc/grub-setup.c       2008-11-07 19:09:01 UTC (rev 
1894)
+++ trunk/grub2/util/i386/pc/grub-setup.c       2008-11-07 19:11:39 UTC (rev 
1895)
@@ -74,12 +74,18 @@
   return -1;
 }
 
-grub_term_t
-grub_term_get_current (void)
+grub_term_input_t
+grub_term_get_current_input (void)
 {
   return 0;
 }
 
+grub_term_output_t
+grub_term_get_current_output (void)
+{
+  return 0;
+}
+
 void
 grub_refresh (void)
 {






reply via email to

[Prev in Thread] Current Thread [Next in Thread]