2005-09-03 16:54:27 +00:00
|
|
|
|
/*
|
|
|
|
|
* GRUB -- GRand Unified Bootloader
|
2010-07-17 23:37:19 +00:00
|
|
|
|
* Copyright (C) 2000,2001,2002,2003,2004,2005,2007,2008,2009,2010 Free Software Foundation, Inc.
|
2005-09-03 16:54:27 +00:00
|
|
|
|
*
|
2007-07-21 23:32:33 +00:00
|
|
|
|
* GRUB is free software: you can redistribute it and/or modify
|
2005-09-03 16:54:27 +00:00
|
|
|
|
* it under the terms of the GNU General Public License as published by
|
2007-07-21 23:32:33 +00:00
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or
|
2005-09-03 16:54:27 +00:00
|
|
|
|
* (at your option) any later version.
|
|
|
|
|
*
|
2007-07-21 23:32:33 +00:00
|
|
|
|
* GRUB is distributed in the hope that it will be useful,
|
2005-09-03 16:54:27 +00:00
|
|
|
|
* 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
|
2007-07-21 23:32:33 +00:00
|
|
|
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
2005-09-03 16:54:27 +00:00
|
|
|
|
*/
|
|
|
|
|
|
2009-10-11 00:07:52 +00:00
|
|
|
|
#include <grub/serial.h>
|
2005-09-03 16:54:27 +00:00
|
|
|
|
#include <grub/term.h>
|
|
|
|
|
#include <grub/types.h>
|
|
|
|
|
#include <grub/dl.h>
|
|
|
|
|
#include <grub/misc.h>
|
|
|
|
|
#include <grub/terminfo.h>
|
2012-02-26 16:08:11 +00:00
|
|
|
|
#if !defined (GRUB_MACHINE_EMU) && (defined(__mips__) || defined (__i386__) || defined (__x86_64__))
|
2007-10-03 20:13:21 +00:00
|
|
|
|
#include <grub/cpu/io.h>
|
2012-02-26 16:08:11 +00:00
|
|
|
|
#endif
|
2009-03-21 Bean <bean123ch@gmail.com>
* commands/blocklist.c: Add include file <grub/command.h>, remove
<grub/normal.h> and <grub/arg.h>.
(grub_cmd_blocklist): Use the new command interface.
(GRUB_MOD_INIT): Likewise.
(GRUB_MOD_FINI): Likewise.
* commands/boot.c: Likewise.
* commands/cat.c: Likewise.
* commands/cmp.c: Likewise.
* commands/configfile.c: Likewise.
* commands/crc.c: Likewise.
* commands/echo.c: Likewise.
* commands/halt.c: Likewise.
* commands/handler.c: Likewise.
* commands/hdparm.c: Likewise.
* commands/help.c: Likewise.
* commands/hexdump.c: Likewise.
* commands/loadenv.c: Likewise.
* commands/ls.c: Likewise.
* commands/lsmmap.c: Likewise.
* commands/lspci.c: Likewise.
* commands/loadenv.c: Likewise.
* commands/read.c: Likewise.
* commands/reboot.c: Likewise.
* commands/search.c: Likewise.
* commands/sleep.c: Likewise.
* commands/test.c: Likewise.
* commands/usbtest.c: Likewise.
* commands/videotest.c: Likewise.
* commands/i386/cpuid.c: Likewise.
* commands/i386/pc/halt.c: Likewise.
* commands/i386/pc/play.c: Likewise.
* commands/i386/pc/pxecmd.c: Likewise.
* commands/i386/pc/vbeinfo.c: Likewise.
* commands/i386/pc/vbetest.c: Likewise.
* commands/ieee1275/suspend.c: Likewise.
* disk/loopback.c: Likewise.
* font/font_cmd.c: Likewise.
* hello/hello.c: Likewise.
* loader/efi/appleloader.c: Likewise.
* loader/efi/chainloader.c: Likewise.
* loader/i386/bsd.c: Likewise.
* loader/i386/efi/linux.c: Likewise.
* loader/i386/ieee1275/linux.c: Likewise.
* loader/i386/linux.c: Likewise.
* loader/i386/pc/chainloader.c: Likewise.
* loader/i386/pc/linux.c: Likewise.
* loader/powerpc/ieee1275/linux.c: Likewise.
* loader/multiboot_loader.c: Likewise.
* term/gfxterm.c: Likewise.
* term/i386/pc/serial.c: Likewise.
* term/terminfo.c: Likewise.
* term/i386/pc/vesafb.c: Removed <grub/arg.h>.
* term/i386/pc/vga.c: Likewise.
* video/readers/jpeg.c: Likewise.
* video/readers/png.c: Likewise.
* video/readers/tga.c: Likewise.
* util/grub-fstest (cmd_loopback): Removed.
(cmd_blocklist): Likewise.
(cmd_ls): Likewise.
(grub_register_command): Likewise.
(grub_unregister_command): Likewise.
(execute_command): Use grub_command_find to locate command and execute
it.
* include/grub/efi/chainloader.h: Removed.
* loader/efi/chainloader_normal.c: Likewise.
* loader/i386/bsd_normal.c: Likewise.
* loader/i386/pc/chainloader_normal.c: Likewise.
* loader/i386/pc/multiboot_normal.c: Likewise.
* loader/linux_normal.c: Likewise.
* loader/multiboot_loader_normal.c: Likewise.
* loader/powerpc/ieee1275/linux_normal.c: Likewise.
* gencmdlist.sh: Scan new registration command grub_register_extcmd
and grub_register_command_p1.
* conf/common.rmk (grub_fstest_SOURCES): Add kern/list.c,
kern/command.c, lib/arg.c and commands/extcmd.c.
(pkglib_MODULES): Remove boot.mod, and minicmd.mod and extcmd.mod.
(minicmd_mod_SOURCES): New variable.
(minicmd_mod_CFLAGS): Likewise.
(minicmd_mod_LDFLAGS): Likewise.
(extcmd_mod_SOURCES): Likewise.
(extcmd_mod_CFLAGS): Likewise.
(extcmd_mod_LDFLAGS): Likewise.
(boot_mod_SOURCES): Removed.
(boot_mod_CFLAGS): Likewise.
(boot_mod_LDFLAGS): Likewise.
* conf/i386-pc.rmk (kernel_img_SOURCES): Add kern/command.c and
kern/corecmd.c.
(kernel_img_HEADERS): Add command.h.
(grub_emu_SOURCES): Remove commands/boot.c and normal/arg.c, add
commands/minicmd.c, kern/command.c, kern/corecmd.c, commands/extcmd.c
and lib/arg.c.
(pkglib_MODULES): Change _linux.mod, _chain.mod, _bsd.mod and
_multiboot.mod as linux.mod, chain.mod, bsd.mod and multiboot.mod,
remove the corresponding normal mode command.
(normal_mod_SOURCES): Remove normal/arg.c.
* conf/i386-coreboot.rmk: Likewise.
* conf/i386-efi.rmk: Likewise.
* conf/i386-ieee1275.rmk: Likewise.
* conf/powerpc-ieee1275.rmk: Likewise.
* conf/x86_64-efi.rmk: Likewise.
* include/grub/arg.h: Move from here ...
* include/grub/lib/arg.h: ... to here.
* normal/arg.c: Move from here ...
* lib/arg.c: ... to here.
* commands/extcmd.c: New file.
* commands/minicmd.c: Likewise.
* include/grub/command.h: Likewise.
* include/grub/extcmd.h: Likewise.
* kern/command.c: Likewise.
* kern/corecmd.c: Likewise.
* kern/list.c (grub_list_iterate): Return int instead of void.
(grub_list_insert): New function.
(grub_prio_list_insert): Likewise.
* kern/rescue.c (grub_rescue_command): Removed.
(grub_rescue_command_list): Likewise.
(grub_rescue_register_command): Likewise.
(grub_rescue_unregister_command): Likewise.
(grub_rescue_cmd_boot): Move to minicmd.c
(grub_rescue_cmd_help): Likewise.
(grub_rescue_cmd_info): Likewise.
(grub_rescue_cmd_boot): Likewise.
(grub_rescue_cmd_testload): Likewise.
(grub_rescue_cmd_dump): Likewise.
(grub_rescue_cmd_rmmod): Likewise.
(grub_rescue_cmd_lsmod): Likewise.
(grub_rescue_cmd_exit): Likewise.
(grub_rescue_print_devices): Moved to corecmd.c.
(grub_rescue_print_files): Likewise.
(grub_rescue_cmd_ls): Likewise.
(grub_rescue_cmd_insmod): Likewise.
(grub_rescue_cmd_set): Likewise.
(grub_rescue_cmd_unset): Likewise.
(attemp_normal_mode): Use grub_command_find to get normal module.
(grub_enter_rescue_mode): Use grub_register_core_commands to register
commands, remove grub_rescue_regiter_command calls.
* normal/command.c (grub_regiser_command): Removed.
(grub_unregister_command): Likewise.
(grub_command_find): Likewise.
(grub_iterate_commands): Likewise.
(rescue_command): Likewise.
(export_command): Moved to corecmd.c.
(set_command): Removed.
(unset_command): Likewise.
(insmod_command): Likewise.
(rmmod_command): Likewise.
(lsmod_command): Likewise.
(grub_command_init): Likewise.
* normal/completion.c (iterate_command): Use cmd->prio to check for
active command.
(complete_arguments): Use grub_extcmd_t structure to find options.
(grub_normal_do_completion): Change function grub_iterate_commands to
grub_command_iterate.
* normal/execute.c (grub_script_execute_cmd): No need to parse
argument here.
* normal/main.c (grub_dyncmd_dispatcher): New function.
(read_command_list): Register unload commands as dyncmd.
(grub_cmd_normal): Use new command interface, register rescue,
unregister normal at entry, register normal, unregister rescue at exit.
* include/grub/list.h (grub_list_test_t): New type.
(grub_list_iterate): Return int instead of void.
(grub_list_insert): New function.
(GRUB_AS_NAMED_LIST_P): New macro.
(GRUB_AS_PRIO_LIST): Likewise.
(GRUB_AS_PRIO_LIST_P): Likewise.
(GRUB_PRIO_LIST_PRIO_MASK): New constant.
(GRUB_PRIO_LIST_FLAG_ACTIVE): Likewise.
(grub_prio_list): New structure.
(grub_prio_list_insert): New function.
(grub_prio_list_remove): New inline function.
* include/grub/normal.h: Remove <grub/arg.h>, add <grub/command.h>.
(GRUB_COMMAND_FLAG_CMDLINE): Moved to command.h.
(GRUB_COMMAND_FLAG_MENU): Likewise.
(GRUB_COMMAND_FLAG_BOTH): Likewise.
(GRUB_COMMAND_FLAG_TITLE): Likewise.
(GRUB_COMMAND_FLAG_NO_ECHO): Likewise.
(GRUB_COMMAND_FLAG_NO_ARG_PARSE): Removed.
(GRUB_COMMAND_FLAG_NOT_LOADED): Likewise.
(grub_command): Likewise.
(grub_register_command): Likewise.
(grub_command_find): Likewise.
(grub_iterate_commands): Likewise.
(grub_command_init): Likewise.
(grub_arg_parse): Likewise.
(grub_arg_show_help): Likewise.
* include/grub/rescue.h (grub_rescue_register_command): Removed.
(grub_rescue_unregister_command): Likewise.
* include/grub/i386/bsd.h: Remove grub_rescue_cmd_freebsd,
grub_rescue_cmd_openbsd, grub_rescue_cmd_netbsd,
grub_rescue_cmd_freebsd_loadenv and grub_rescue_cmd_freebsd_module.
* include/grub/i386/efi/loader.h: Remove grub_rescue_cmd_linux and
grub_rescue_cmd_initrd.
* include/grub/i386/loader.h: Likewise.
* include/grub/x86_64/loader.h: Likewise.
* include/grub/i386/pc/chainloader.h: Remove grub_chainloader_cmd.
2009-03-21 08:39:59 +00:00
|
|
|
|
#include <grub/extcmd.h>
|
2010-01-03 18:24:22 +00:00
|
|
|
|
#include <grub/i18n.h>
|
2010-07-17 23:37:19 +00:00
|
|
|
|
#include <grub/list.h>
|
2011-02-19 12:18:05 +00:00
|
|
|
|
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
2011-01-18 14:28:44 +00:00
|
|
|
|
#include <grub/machine/kernel.h>
|
|
|
|
|
#endif
|
2013-04-14 15:01:31 +00:00
|
|
|
|
#ifdef GRUB_MACHINE_IEEE1275
|
|
|
|
|
#include <grub/ieee1275/console.h>
|
|
|
|
|
#endif
|
2005-09-03 16:54:27 +00:00
|
|
|
|
|
2011-04-11 21:01:51 +00:00
|
|
|
|
GRUB_MOD_LICENSE ("GPLv3+");
|
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
#define FOR_SERIAL_PORTS(var) FOR_LIST_ELEMENTS((var), (grub_serial_ports))
|
2005-09-03 16:54:27 +00:00
|
|
|
|
|
|
|
|
|
/* Argument options. */
|
|
|
|
|
static const struct grub_arg_option options[] =
|
|
|
|
|
{
|
2010-01-03 18:50:51 +00:00
|
|
|
|
{"unit", 'u', 0, N_("Set the serial unit."), 0, ARG_TYPE_INT},
|
|
|
|
|
{"port", 'p', 0, N_("Set the serial port address."), 0, ARG_TYPE_STRING},
|
|
|
|
|
{"speed", 's', 0, N_("Set the serial port speed."), 0, ARG_TYPE_INT},
|
|
|
|
|
{"word", 'w', 0, N_("Set the serial port word length."), 0, ARG_TYPE_INT},
|
|
|
|
|
{"parity", 'r', 0, N_("Set the serial port parity."), 0, ARG_TYPE_STRING},
|
|
|
|
|
{"stop", 't', 0, N_("Set the serial port stop bits."), 0, ARG_TYPE_INT},
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{0, 0, 0, 0, 0, 0}
|
|
|
|
|
};
|
|
|
|
|
|
2011-03-23 11:05:13 +00:00
|
|
|
|
static struct grub_serial_port *grub_serial_ports;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
struct grub_serial_output_state
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
struct grub_terminfo_output_state tinfo;
|
|
|
|
|
struct grub_serial_port *port;
|
|
|
|
|
};
|
2005-09-03 16:54:27 +00:00
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
struct grub_serial_input_state
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
struct grub_terminfo_input_state tinfo;
|
|
|
|
|
struct grub_serial_port *port;
|
|
|
|
|
};
|
2005-09-03 16:54:27 +00:00
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
static void
|
|
|
|
|
serial_put (grub_term_output_t term, const int c)
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
struct grub_serial_output_state *data = term->data;
|
|
|
|
|
data->port->driver->put (data->port, c);
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
static int
|
|
|
|
|
serial_fetch (grub_term_input_t term)
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
struct grub_serial_input_state *data = term->data;
|
|
|
|
|
return data->port->driver->fetch (data->port);
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
2011-03-23 11:05:13 +00:00
|
|
|
|
static const struct grub_serial_input_state grub_serial_terminfo_input_template =
|
2010-05-07 13:44:43 +00:00
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
.tinfo =
|
|
|
|
|
{
|
|
|
|
|
.readkey = serial_fetch
|
|
|
|
|
}
|
2010-05-07 13:44:43 +00:00
|
|
|
|
};
|
2005-09-03 16:54:27 +00:00
|
|
|
|
|
2011-03-23 11:05:13 +00:00
|
|
|
|
static const struct grub_serial_output_state grub_serial_terminfo_output_template =
|
2010-05-07 13:44:43 +00:00
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
.tinfo =
|
|
|
|
|
{
|
2010-09-20 14:27:33 +00:00
|
|
|
|
.put = serial_put,
|
2013-10-19 21:59:32 +00:00
|
|
|
|
.size = { 80, 24 }
|
2010-07-17 23:37:19 +00:00
|
|
|
|
}
|
2010-05-07 13:44:43 +00:00
|
|
|
|
};
|
2005-09-03 16:54:27 +00:00
|
|
|
|
|
2011-03-23 11:05:13 +00:00
|
|
|
|
static struct grub_serial_input_state grub_serial_terminfo_input;
|
2010-11-06 19:40:08 +00:00
|
|
|
|
|
2011-03-23 11:05:13 +00:00
|
|
|
|
static struct grub_serial_output_state grub_serial_terminfo_output;
|
2010-11-06 19:40:08 +00:00
|
|
|
|
|
2011-03-23 11:05:13 +00:00
|
|
|
|
static int registered = 0;
|
2010-07-17 23:37:19 +00:00
|
|
|
|
|
2008-11-07 Robert Millan <rmh@aybabtu.com>
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-07 19:11:39 +00:00
|
|
|
|
static struct grub_term_input grub_serial_term_input =
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
|
|
|
|
.name = "serial",
|
2010-05-07 13:44:43 +00:00
|
|
|
|
.init = grub_terminfo_input_init,
|
|
|
|
|
.getkey = grub_terminfo_getkey,
|
|
|
|
|
.data = &grub_serial_terminfo_input
|
2008-11-07 Robert Millan <rmh@aybabtu.com>
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-07 19:11:39 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
static struct grub_term_output grub_serial_term_output =
|
|
|
|
|
{
|
|
|
|
|
.name = "serial",
|
2011-01-05 11:23:06 +00:00
|
|
|
|
.init = grub_terminfo_output_init,
|
2010-05-07 13:44:43 +00:00
|
|
|
|
.putchar = grub_terminfo_putchar,
|
2010-09-20 14:27:33 +00:00
|
|
|
|
.getwh = grub_terminfo_getwh,
|
2010-05-07 13:44:43 +00:00
|
|
|
|
.getxy = grub_terminfo_getxy,
|
|
|
|
|
.gotoxy = grub_terminfo_gotoxy,
|
|
|
|
|
.cls = grub_terminfo_cls,
|
|
|
|
|
.setcolorstate = grub_terminfo_setcolorstate,
|
|
|
|
|
.setcursor = grub_terminfo_setcursor,
|
2010-03-16 18:16:15 +00:00
|
|
|
|
.flags = GRUB_TERM_CODE_TYPE_ASCII,
|
2010-05-07 23:06:22 +00:00
|
|
|
|
.data = &grub_serial_terminfo_output,
|
2013-10-22 18:42:20 +00:00
|
|
|
|
.progress_update_divisor = GRUB_PROGRESS_SLOW
|
2005-09-03 16:54:27 +00:00
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2011-11-10 08:41:07 +00:00
|
|
|
|
struct grub_serial_port *
|
2011-11-30 15:20:13 +00:00
|
|
|
|
grub_serial_find (const char *name)
|
2010-07-17 23:37:19 +00:00
|
|
|
|
{
|
|
|
|
|
struct grub_serial_port *port;
|
|
|
|
|
|
|
|
|
|
FOR_SERIAL_PORTS (port)
|
|
|
|
|
if (grub_strcmp (port->name, name) == 0)
|
|
|
|
|
break;
|
|
|
|
|
|
2013-04-25 20:40:03 +00:00
|
|
|
|
#if (defined(__mips__) || defined (__i386__) || defined (__x86_64__)) && !defined(GRUB_MACHINE_EMU) && !defined(GRUB_MACHINE_ARC)
|
2010-07-17 23:37:19 +00:00
|
|
|
|
if (!port && grub_memcmp (name, "port", sizeof ("port") - 1) == 0
|
2011-10-14 17:16:37 +00:00
|
|
|
|
&& grub_isxdigit (name [sizeof ("port") - 1]))
|
2010-07-17 23:37:19 +00:00
|
|
|
|
{
|
|
|
|
|
name = grub_serial_ns8250_add_port (grub_strtoul (&name[sizeof ("port") - 1],
|
|
|
|
|
0, 16));
|
|
|
|
|
if (!name)
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
FOR_SERIAL_PORTS (port)
|
|
|
|
|
if (grub_strcmp (port->name, name) == 0)
|
|
|
|
|
break;
|
|
|
|
|
}
|
2010-07-18 17:09:54 +00:00
|
|
|
|
#endif
|
2010-07-17 23:37:19 +00:00
|
|
|
|
|
2013-04-14 15:01:31 +00:00
|
|
|
|
#ifdef GRUB_MACHINE_IEEE1275
|
|
|
|
|
if (!port && grub_memcmp (name, "ieee1275/", sizeof ("ieee1275/") - 1) == 0)
|
|
|
|
|
{
|
|
|
|
|
name = grub_ofserial_add_port (&name[sizeof ("ieee1275/") - 1]);
|
|
|
|
|
if (!name)
|
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
|
|
FOR_SERIAL_PORTS (port)
|
|
|
|
|
if (grub_strcmp (port->name, name) == 0)
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
return port;
|
|
|
|
|
}
|
|
|
|
|
|
2005-09-03 16:54:27 +00:00
|
|
|
|
static grub_err_t
|
2010-08-26 04:00:11 +00:00
|
|
|
|
grub_cmd_serial (grub_extcmd_context_t ctxt, int argc, char **args)
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
2010-08-26 04:00:11 +00:00
|
|
|
|
struct grub_arg_list *state = ctxt->state;
|
2010-07-17 23:37:19 +00:00
|
|
|
|
char pname[40];
|
2011-11-30 15:20:13 +00:00
|
|
|
|
const char *name = NULL;
|
2010-07-17 23:37:19 +00:00
|
|
|
|
struct grub_serial_port *port;
|
2010-07-18 11:40:48 +00:00
|
|
|
|
struct grub_serial_config config;
|
2010-07-17 23:37:19 +00:00
|
|
|
|
grub_err_t err;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
|
|
|
|
|
if (state[0].set)
|
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
grub_snprintf (pname, sizeof (pname), "com%ld",
|
|
|
|
|
grub_strtoul (state[0].arg, 0, 0));
|
|
|
|
|
name = pname;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
2009-06-10 21:04:23 +00:00
|
|
|
|
|
2005-09-03 16:54:27 +00:00
|
|
|
|
if (state[1].set)
|
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
grub_snprintf (pname, sizeof (pname), "port%lx",
|
|
|
|
|
grub_strtoul (state[1].arg, 0, 0));
|
|
|
|
|
name = pname;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
2009-06-10 21:04:23 +00:00
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
if (argc >= 1)
|
|
|
|
|
name = args[0];
|
|
|
|
|
|
|
|
|
|
if (!name)
|
|
|
|
|
name = "com0";
|
|
|
|
|
|
|
|
|
|
port = grub_serial_find (name);
|
|
|
|
|
if (!port)
|
2012-02-12 14:25:25 +00:00
|
|
|
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
|
|
|
N_("serial port `%s' isn't found"),
|
|
|
|
|
name);
|
2010-07-17 23:37:19 +00:00
|
|
|
|
|
2010-07-18 11:40:48 +00:00
|
|
|
|
config = port->config;
|
2010-07-17 23:37:19 +00:00
|
|
|
|
|
|
|
|
|
if (state[2].set)
|
2010-07-18 11:40:48 +00:00
|
|
|
|
config.speed = grub_strtoul (state[2].arg, 0, 0);
|
2010-07-17 23:37:19 +00:00
|
|
|
|
|
2005-09-03 16:54:27 +00:00
|
|
|
|
if (state[3].set)
|
2010-07-18 13:07:59 +00:00
|
|
|
|
config.word_len = grub_strtoul (state[3].arg, 0, 0);
|
2009-06-10 21:04:23 +00:00
|
|
|
|
|
2005-09-03 16:54:27 +00:00
|
|
|
|
if (state[4].set)
|
|
|
|
|
{
|
|
|
|
|
if (! grub_strcmp (state[4].arg, "no"))
|
2010-07-18 12:43:23 +00:00
|
|
|
|
config.parity = GRUB_SERIAL_PARITY_NONE;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
else if (! grub_strcmp (state[4].arg, "odd"))
|
2010-07-18 12:43:23 +00:00
|
|
|
|
config.parity = GRUB_SERIAL_PARITY_ODD;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
else if (! grub_strcmp (state[4].arg, "even"))
|
2010-07-18 12:43:23 +00:00
|
|
|
|
config.parity = GRUB_SERIAL_PARITY_EVEN;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
else
|
2012-02-12 14:25:25 +00:00
|
|
|
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
|
|
|
N_("unsupported serial port parity"));
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
2009-06-10 21:04:23 +00:00
|
|
|
|
|
2005-09-03 16:54:27 +00:00
|
|
|
|
if (state[5].set)
|
|
|
|
|
{
|
|
|
|
|
if (! grub_strcmp (state[5].arg, "1"))
|
2010-07-18 12:43:23 +00:00
|
|
|
|
config.stop_bits = GRUB_SERIAL_STOP_BITS_1;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
else if (! grub_strcmp (state[5].arg, "2"))
|
2010-07-18 12:43:23 +00:00
|
|
|
|
config.stop_bits = GRUB_SERIAL_STOP_BITS_2;
|
2012-06-08 17:32:57 +00:00
|
|
|
|
else if (! grub_strcmp (state[5].arg, "1.5"))
|
|
|
|
|
config.stop_bits = GRUB_SERIAL_STOP_BITS_1_5;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
else
|
2012-02-12 14:25:25 +00:00
|
|
|
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
|
|
|
N_("unsupported serial port stop bits number"));
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/* Initialize with new settings. */
|
2010-07-18 11:40:48 +00:00
|
|
|
|
err = port->driver->configure (port, &config);
|
2010-07-17 23:37:19 +00:00
|
|
|
|
if (err)
|
|
|
|
|
return err;
|
2013-04-25 20:40:03 +00:00
|
|
|
|
#if !defined (GRUB_MACHINE_EMU) && !defined(GRUB_MACHINE_ARC) && (defined(__mips__) || defined (__i386__) || defined (__x86_64__))
|
2012-02-26 16:08:11 +00:00
|
|
|
|
|
2010-07-18 15:40:42 +00:00
|
|
|
|
/* Compatibility kludge. */
|
|
|
|
|
if (port->driver == &grub_ns8250_driver)
|
2010-07-17 23:37:19 +00:00
|
|
|
|
{
|
2010-07-18 15:40:42 +00:00
|
|
|
|
if (!registered)
|
|
|
|
|
{
|
2010-11-06 19:40:08 +00:00
|
|
|
|
grub_terminfo_output_register (&grub_serial_term_output, "vt100");
|
|
|
|
|
|
2010-07-18 15:40:42 +00:00
|
|
|
|
grub_term_register_input ("serial", &grub_serial_term_input);
|
|
|
|
|
grub_term_register_output ("serial", &grub_serial_term_output);
|
|
|
|
|
}
|
|
|
|
|
grub_serial_terminfo_output.port = port;
|
|
|
|
|
grub_serial_terminfo_input.port = port;
|
|
|
|
|
registered = 1;
|
2010-07-17 23:37:19 +00:00
|
|
|
|
}
|
2010-07-18 17:09:54 +00:00
|
|
|
|
#endif
|
2010-07-17 23:37:19 +00:00
|
|
|
|
return GRUB_ERR_NONE;
|
|
|
|
|
}
|
|
|
|
|
|
2011-08-19 20:46:11 +00:00
|
|
|
|
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
|
|
|
|
const char loongson_defserial[][6] =
|
|
|
|
|
{
|
|
|
|
|
[GRUB_ARCH_MACHINE_YEELOONG] = "com0",
|
|
|
|
|
[GRUB_ARCH_MACHINE_FULOONG2F] = "com2",
|
|
|
|
|
[GRUB_ARCH_MACHINE_FULOONG2E] = "com1"
|
|
|
|
|
};
|
|
|
|
|
#endif
|
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
grub_err_t
|
|
|
|
|
grub_serial_register (struct grub_serial_port *port)
|
|
|
|
|
{
|
|
|
|
|
struct grub_term_input *in;
|
|
|
|
|
struct grub_term_output *out;
|
|
|
|
|
struct grub_serial_input_state *indata;
|
|
|
|
|
struct grub_serial_output_state *outdata;
|
2009-06-10 21:04:23 +00:00
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
in = grub_malloc (sizeof (*in));
|
|
|
|
|
if (!in)
|
|
|
|
|
return grub_errno;
|
|
|
|
|
|
|
|
|
|
indata = grub_malloc (sizeof (*indata));
|
|
|
|
|
if (!indata)
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
grub_free (in);
|
|
|
|
|
return grub_errno;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
2010-07-17 23:37:19 +00:00
|
|
|
|
|
|
|
|
|
grub_memcpy (in, &grub_serial_term_input, sizeof (*in));
|
|
|
|
|
in->data = indata;
|
|
|
|
|
in->name = grub_xasprintf ("serial_%s", port->name);
|
|
|
|
|
grub_memcpy (indata, &grub_serial_terminfo_input, sizeof (*indata));
|
|
|
|
|
|
|
|
|
|
if (!in->name)
|
|
|
|
|
{
|
|
|
|
|
grub_free (in);
|
|
|
|
|
grub_free (indata);
|
|
|
|
|
return grub_errno;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
out = grub_malloc (sizeof (*out));
|
|
|
|
|
if (!out)
|
|
|
|
|
{
|
|
|
|
|
grub_free (in);
|
|
|
|
|
grub_free (indata);
|
|
|
|
|
grub_free ((char *) in->name);
|
|
|
|
|
return grub_errno;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
outdata = grub_malloc (sizeof (*outdata));
|
|
|
|
|
if (!outdata)
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
grub_free (in);
|
|
|
|
|
grub_free (indata);
|
|
|
|
|
grub_free ((char *) in->name);
|
|
|
|
|
grub_free (out);
|
|
|
|
|
return grub_errno;
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
2009-06-10 21:04:23 +00:00
|
|
|
|
|
2010-07-17 23:37:19 +00:00
|
|
|
|
grub_memcpy (out, &grub_serial_term_output, sizeof (*out));
|
|
|
|
|
out->data = outdata;
|
|
|
|
|
out->name = in->name;
|
|
|
|
|
grub_memcpy (outdata, &grub_serial_terminfo_output, sizeof (*outdata));
|
|
|
|
|
|
|
|
|
|
grub_list_push (GRUB_AS_LIST_P (&grub_serial_ports), GRUB_AS_LIST (port));
|
|
|
|
|
((struct grub_serial_input_state *) in->data)->port = port;
|
|
|
|
|
((struct grub_serial_output_state *) out->data)->port = port;
|
2010-07-18 15:40:42 +00:00
|
|
|
|
port->term_in = in;
|
|
|
|
|
port->term_out = out;
|
2010-07-17 23:37:19 +00:00
|
|
|
|
grub_terminfo_output_register (out, "vt100");
|
2011-02-19 12:18:05 +00:00
|
|
|
|
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
2011-08-19 20:46:11 +00:00
|
|
|
|
if (grub_strcmp (port->name, loongson_defserial[grub_arch_machine]) == 0)
|
2010-07-18 15:40:42 +00:00
|
|
|
|
{
|
|
|
|
|
grub_term_register_input_active ("serial_*", in);
|
|
|
|
|
grub_term_register_output_active ("serial_*", out);
|
|
|
|
|
}
|
2011-07-05 19:00:01 +00:00
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
grub_term_register_input_inactive ("serial_*", in);
|
|
|
|
|
grub_term_register_output_inactive ("serial_*", out);
|
|
|
|
|
}
|
2011-01-18 14:28:44 +00:00
|
|
|
|
#else
|
|
|
|
|
grub_term_register_input ("serial_*", in);
|
|
|
|
|
grub_term_register_output ("serial_*", out);
|
|
|
|
|
#endif
|
2010-07-17 23:37:19 +00:00
|
|
|
|
|
|
|
|
|
return GRUB_ERR_NONE;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
grub_serial_unregister (struct grub_serial_port *port)
|
|
|
|
|
{
|
2010-07-18 15:40:42 +00:00
|
|
|
|
if (port->driver->fini)
|
|
|
|
|
port->driver->fini (port);
|
|
|
|
|
|
|
|
|
|
if (port->term_in)
|
|
|
|
|
grub_term_unregister_input (port->term_in);
|
|
|
|
|
if (port->term_out)
|
|
|
|
|
grub_term_unregister_output (port->term_out);
|
|
|
|
|
|
2012-01-24 12:31:12 +00:00
|
|
|
|
grub_list_remove (GRUB_AS_LIST (port));
|
2010-07-18 15:40:42 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
grub_serial_unregister_driver (struct grub_serial_driver *driver)
|
|
|
|
|
{
|
|
|
|
|
struct grub_serial_port *port, *next;
|
|
|
|
|
for (port = grub_serial_ports; port; port = next)
|
|
|
|
|
{
|
|
|
|
|
next = port->next;
|
|
|
|
|
if (port->driver == driver)
|
|
|
|
|
grub_serial_unregister (port);
|
|
|
|
|
}
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
2009-03-21 Bean <bean123ch@gmail.com>
* commands/blocklist.c: Add include file <grub/command.h>, remove
<grub/normal.h> and <grub/arg.h>.
(grub_cmd_blocklist): Use the new command interface.
(GRUB_MOD_INIT): Likewise.
(GRUB_MOD_FINI): Likewise.
* commands/boot.c: Likewise.
* commands/cat.c: Likewise.
* commands/cmp.c: Likewise.
* commands/configfile.c: Likewise.
* commands/crc.c: Likewise.
* commands/echo.c: Likewise.
* commands/halt.c: Likewise.
* commands/handler.c: Likewise.
* commands/hdparm.c: Likewise.
* commands/help.c: Likewise.
* commands/hexdump.c: Likewise.
* commands/loadenv.c: Likewise.
* commands/ls.c: Likewise.
* commands/lsmmap.c: Likewise.
* commands/lspci.c: Likewise.
* commands/loadenv.c: Likewise.
* commands/read.c: Likewise.
* commands/reboot.c: Likewise.
* commands/search.c: Likewise.
* commands/sleep.c: Likewise.
* commands/test.c: Likewise.
* commands/usbtest.c: Likewise.
* commands/videotest.c: Likewise.
* commands/i386/cpuid.c: Likewise.
* commands/i386/pc/halt.c: Likewise.
* commands/i386/pc/play.c: Likewise.
* commands/i386/pc/pxecmd.c: Likewise.
* commands/i386/pc/vbeinfo.c: Likewise.
* commands/i386/pc/vbetest.c: Likewise.
* commands/ieee1275/suspend.c: Likewise.
* disk/loopback.c: Likewise.
* font/font_cmd.c: Likewise.
* hello/hello.c: Likewise.
* loader/efi/appleloader.c: Likewise.
* loader/efi/chainloader.c: Likewise.
* loader/i386/bsd.c: Likewise.
* loader/i386/efi/linux.c: Likewise.
* loader/i386/ieee1275/linux.c: Likewise.
* loader/i386/linux.c: Likewise.
* loader/i386/pc/chainloader.c: Likewise.
* loader/i386/pc/linux.c: Likewise.
* loader/powerpc/ieee1275/linux.c: Likewise.
* loader/multiboot_loader.c: Likewise.
* term/gfxterm.c: Likewise.
* term/i386/pc/serial.c: Likewise.
* term/terminfo.c: Likewise.
* term/i386/pc/vesafb.c: Removed <grub/arg.h>.
* term/i386/pc/vga.c: Likewise.
* video/readers/jpeg.c: Likewise.
* video/readers/png.c: Likewise.
* video/readers/tga.c: Likewise.
* util/grub-fstest (cmd_loopback): Removed.
(cmd_blocklist): Likewise.
(cmd_ls): Likewise.
(grub_register_command): Likewise.
(grub_unregister_command): Likewise.
(execute_command): Use grub_command_find to locate command and execute
it.
* include/grub/efi/chainloader.h: Removed.
* loader/efi/chainloader_normal.c: Likewise.
* loader/i386/bsd_normal.c: Likewise.
* loader/i386/pc/chainloader_normal.c: Likewise.
* loader/i386/pc/multiboot_normal.c: Likewise.
* loader/linux_normal.c: Likewise.
* loader/multiboot_loader_normal.c: Likewise.
* loader/powerpc/ieee1275/linux_normal.c: Likewise.
* gencmdlist.sh: Scan new registration command grub_register_extcmd
and grub_register_command_p1.
* conf/common.rmk (grub_fstest_SOURCES): Add kern/list.c,
kern/command.c, lib/arg.c and commands/extcmd.c.
(pkglib_MODULES): Remove boot.mod, and minicmd.mod and extcmd.mod.
(minicmd_mod_SOURCES): New variable.
(minicmd_mod_CFLAGS): Likewise.
(minicmd_mod_LDFLAGS): Likewise.
(extcmd_mod_SOURCES): Likewise.
(extcmd_mod_CFLAGS): Likewise.
(extcmd_mod_LDFLAGS): Likewise.
(boot_mod_SOURCES): Removed.
(boot_mod_CFLAGS): Likewise.
(boot_mod_LDFLAGS): Likewise.
* conf/i386-pc.rmk (kernel_img_SOURCES): Add kern/command.c and
kern/corecmd.c.
(kernel_img_HEADERS): Add command.h.
(grub_emu_SOURCES): Remove commands/boot.c and normal/arg.c, add
commands/minicmd.c, kern/command.c, kern/corecmd.c, commands/extcmd.c
and lib/arg.c.
(pkglib_MODULES): Change _linux.mod, _chain.mod, _bsd.mod and
_multiboot.mod as linux.mod, chain.mod, bsd.mod and multiboot.mod,
remove the corresponding normal mode command.
(normal_mod_SOURCES): Remove normal/arg.c.
* conf/i386-coreboot.rmk: Likewise.
* conf/i386-efi.rmk: Likewise.
* conf/i386-ieee1275.rmk: Likewise.
* conf/powerpc-ieee1275.rmk: Likewise.
* conf/x86_64-efi.rmk: Likewise.
* include/grub/arg.h: Move from here ...
* include/grub/lib/arg.h: ... to here.
* normal/arg.c: Move from here ...
* lib/arg.c: ... to here.
* commands/extcmd.c: New file.
* commands/minicmd.c: Likewise.
* include/grub/command.h: Likewise.
* include/grub/extcmd.h: Likewise.
* kern/command.c: Likewise.
* kern/corecmd.c: Likewise.
* kern/list.c (grub_list_iterate): Return int instead of void.
(grub_list_insert): New function.
(grub_prio_list_insert): Likewise.
* kern/rescue.c (grub_rescue_command): Removed.
(grub_rescue_command_list): Likewise.
(grub_rescue_register_command): Likewise.
(grub_rescue_unregister_command): Likewise.
(grub_rescue_cmd_boot): Move to minicmd.c
(grub_rescue_cmd_help): Likewise.
(grub_rescue_cmd_info): Likewise.
(grub_rescue_cmd_boot): Likewise.
(grub_rescue_cmd_testload): Likewise.
(grub_rescue_cmd_dump): Likewise.
(grub_rescue_cmd_rmmod): Likewise.
(grub_rescue_cmd_lsmod): Likewise.
(grub_rescue_cmd_exit): Likewise.
(grub_rescue_print_devices): Moved to corecmd.c.
(grub_rescue_print_files): Likewise.
(grub_rescue_cmd_ls): Likewise.
(grub_rescue_cmd_insmod): Likewise.
(grub_rescue_cmd_set): Likewise.
(grub_rescue_cmd_unset): Likewise.
(attemp_normal_mode): Use grub_command_find to get normal module.
(grub_enter_rescue_mode): Use grub_register_core_commands to register
commands, remove grub_rescue_regiter_command calls.
* normal/command.c (grub_regiser_command): Removed.
(grub_unregister_command): Likewise.
(grub_command_find): Likewise.
(grub_iterate_commands): Likewise.
(rescue_command): Likewise.
(export_command): Moved to corecmd.c.
(set_command): Removed.
(unset_command): Likewise.
(insmod_command): Likewise.
(rmmod_command): Likewise.
(lsmod_command): Likewise.
(grub_command_init): Likewise.
* normal/completion.c (iterate_command): Use cmd->prio to check for
active command.
(complete_arguments): Use grub_extcmd_t structure to find options.
(grub_normal_do_completion): Change function grub_iterate_commands to
grub_command_iterate.
* normal/execute.c (grub_script_execute_cmd): No need to parse
argument here.
* normal/main.c (grub_dyncmd_dispatcher): New function.
(read_command_list): Register unload commands as dyncmd.
(grub_cmd_normal): Use new command interface, register rescue,
unregister normal at entry, register normal, unregister rescue at exit.
* include/grub/list.h (grub_list_test_t): New type.
(grub_list_iterate): Return int instead of void.
(grub_list_insert): New function.
(GRUB_AS_NAMED_LIST_P): New macro.
(GRUB_AS_PRIO_LIST): Likewise.
(GRUB_AS_PRIO_LIST_P): Likewise.
(GRUB_PRIO_LIST_PRIO_MASK): New constant.
(GRUB_PRIO_LIST_FLAG_ACTIVE): Likewise.
(grub_prio_list): New structure.
(grub_prio_list_insert): New function.
(grub_prio_list_remove): New inline function.
* include/grub/normal.h: Remove <grub/arg.h>, add <grub/command.h>.
(GRUB_COMMAND_FLAG_CMDLINE): Moved to command.h.
(GRUB_COMMAND_FLAG_MENU): Likewise.
(GRUB_COMMAND_FLAG_BOTH): Likewise.
(GRUB_COMMAND_FLAG_TITLE): Likewise.
(GRUB_COMMAND_FLAG_NO_ECHO): Likewise.
(GRUB_COMMAND_FLAG_NO_ARG_PARSE): Removed.
(GRUB_COMMAND_FLAG_NOT_LOADED): Likewise.
(grub_command): Likewise.
(grub_register_command): Likewise.
(grub_command_find): Likewise.
(grub_iterate_commands): Likewise.
(grub_command_init): Likewise.
(grub_arg_parse): Likewise.
(grub_arg_show_help): Likewise.
* include/grub/rescue.h (grub_rescue_register_command): Removed.
(grub_rescue_unregister_command): Likewise.
* include/grub/i386/bsd.h: Remove grub_rescue_cmd_freebsd,
grub_rescue_cmd_openbsd, grub_rescue_cmd_netbsd,
grub_rescue_cmd_freebsd_loadenv and grub_rescue_cmd_freebsd_module.
* include/grub/i386/efi/loader.h: Remove grub_rescue_cmd_linux and
grub_rescue_cmd_initrd.
* include/grub/i386/loader.h: Likewise.
* include/grub/x86_64/loader.h: Likewise.
* include/grub/i386/pc/chainloader.h: Remove grub_chainloader_cmd.
2009-03-21 08:39:59 +00:00
|
|
|
|
static grub_extcmd_t cmd;
|
|
|
|
|
|
2012-02-26 23:28:45 +00:00
|
|
|
|
#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS)
|
|
|
|
|
void grub_serial_init (void)
|
|
|
|
|
#else
|
2005-11-13 Marco Gerards <mgerards@xs4all.nl>
* geninit.sh: New file.
* geninitheader.sh: Likewise.
* commands/boot.c (grub_boot_init, grub_boot_fini): Removed.
* commands/cat.c (grub_cat_init, grub_cat_fini): Likewise.
* commands/cmp.c (grub_cmp_init, grub_cmp_fini): Likewise.
* commands/configfile.c (grub_configfile_init)
(grub_configfile_fini): Likewise.
* commands/default.c (grub_default_init, grub_default_fini):
Likewise.
* commands/help.c (grub_help_init, grub_help_fini): Likewise.
* commands/ls.c (grub_ls_init, grub_ls_fini): Likewise.
* commands/search.c (grub_search_init, grub_search_fini): Likewise.
* commands/terminal.c (grub_terminal_init, grub_terminal_fini):
Likewise.
* commands/test.c (grub_test_init, grub_test_fini): Likewise.
* commands/timeout.c (grub_timeout_init, grub_timeout_fini):
Likewise.
* commands/i386/pc/halt.c (grub_halt_init, grub_halt_fini): Likewise.
* commands/iee1275/halt.c (grub_halt_init, grub_halt_fini):
Likewise.
* commands/i386/pc/reboot.c (grub_reboot_init, grub_reboot_fini):
Likewise.
* commands/iee1275/reboot.c (grub_reboot_init, grub_reboot_fini):
Likewise.
* disk/loopback.c (grub_loop_init, grub_loop_fini): Likewise.
* fs/affs.c (grub_affs_init, grub_affs_fini): Likewise.
* fs/ext2.c (grub_ext2_init, grub_ext2_fini): Likewise.
* fs/fat.c (grub_fat_init, grub_fat_fini): Likewise.
* fs/hfs.c (grub_hfs_init, grub_hfs_fini): Likewise.
* fs/iso9660.c (grub_iso9660_init, grub_iso9660_fini): Likewise.
* fs/jfs.c (grub_jfs_init, grub_jfs_fini): Likewise.
* fs/minix.c (grub_minix_init, grub_minix_fini): Likewise.
* fs/sfs.c (grub_sfs_init, grub_sfs_fini): Likewise.
* fs/ufs.c (grub_ufs_init, grub_ufs_fini): Likewise.
* fs/xfs.c (grub_xfs_init, grub_xfs_fini): Likewise.
* normal/main.c (grub_normal_init, grub_normal_fini): Likewise.
* partmap/amiga.c (grub_amiga_partition_map_init)
(grub_amiga_partition_map_fini): Likewise.
* partmap/apple.c (grub_apple_partition_map_init)
(grub_apple_partition_map_fini): Likewise.
* partmap/pc.c (grub_pc_partition_map_init)
(grub_pc_partition_map_fini): Likewise.
* partmap/sun.c (grub_sun_partition_map_init,
grub_sun_partition_map_fini): Likewise.
* term/terminfo.c (grub_terminal_init, grub_terminal_fini):
Likewise.
* util/grub-emu.c: Include <grub_modules_init.h>.
(main): Don't initialize and de-initialize any modules directly,
use `grub_init_all' and `grub_fini_all' instead.
* term/i386/pc/vesafb.c (grub_vesafb_init): Renamed to
`grub_vesafb_mod_init'.
(grub_vesafb_fini): Renamed to `grub_vesafb_mod_fini'. Updated
all users.
* term/i386/pc/vga.c (grub_vga_init): Renamed to
`grub_vga_mod_init'. Updated all users.
(grub_vga_fini): Renamed to `grub_vga_mod_fini'.
* conf/i386-pc.rmk (grub_emu_SOURCES): Add `grub_emu_init.c'.
(grub_modules_init.lst, grub_modules_init.h, grub_emu_init.c): New
rules.
* include/grub/dl.h (GRUB_MOD_INIT): Add argument `name'.
Generate a function to initialize the module in utilities.
Updated all callers.
(GRUB_MOD_FINI): Add argument `name'. Generate a function to
initialize the module in utilities. Updated all callers.
2005-11-13 15:47:09 +00:00
|
|
|
|
GRUB_MOD_INIT(serial)
|
2012-02-26 23:28:45 +00:00
|
|
|
|
#endif
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
2010-09-14 21:06:01 +00:00
|
|
|
|
cmd = grub_register_extcmd ("serial", grub_cmd_serial, 0,
|
2010-05-01 18:28:07 +00:00
|
|
|
|
N_("[OPTIONS...]"),
|
|
|
|
|
N_("Configure serial port."), options);
|
2010-11-06 19:40:08 +00:00
|
|
|
|
grub_memcpy (&grub_serial_terminfo_output,
|
|
|
|
|
&grub_serial_terminfo_output_template,
|
|
|
|
|
sizeof (grub_serial_terminfo_output));
|
|
|
|
|
|
|
|
|
|
grub_memcpy (&grub_serial_terminfo_input,
|
|
|
|
|
&grub_serial_terminfo_input_template,
|
|
|
|
|
sizeof (grub_serial_terminfo_input));
|
2012-02-26 16:08:11 +00:00
|
|
|
|
|
2013-04-25 20:40:03 +00:00
|
|
|
|
#if !defined (GRUB_MACHINE_EMU) && !defined(GRUB_MACHINE_ARC) && (defined(__mips__) || defined (__i386__) || defined (__x86_64__))
|
2010-07-17 23:37:19 +00:00
|
|
|
|
grub_ns8250_init ();
|
2010-07-18 17:09:54 +00:00
|
|
|
|
#endif
|
2012-02-26 16:08:11 +00:00
|
|
|
|
#ifdef GRUB_MACHINE_IEEE1275
|
|
|
|
|
grub_ofserial_init ();
|
|
|
|
|
#endif
|
|
|
|
|
#ifdef GRUB_MACHINE_EFI
|
|
|
|
|
grub_efiserial_init ();
|
|
|
|
|
#endif
|
2013-04-25 20:40:03 +00:00
|
|
|
|
#ifdef GRUB_MACHINE_ARC
|
|
|
|
|
grub_arcserial_init ();
|
|
|
|
|
#endif
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|
|
|
|
|
|
2012-02-26 23:28:45 +00:00
|
|
|
|
#if defined (GRUB_MACHINE_MIPS_LOONGSON) || defined (GRUB_MACHINE_MIPS_QEMU_MIPS)
|
|
|
|
|
void grub_serial_fini (void)
|
|
|
|
|
#else
|
2005-11-13 Marco Gerards <mgerards@xs4all.nl>
* geninit.sh: New file.
* geninitheader.sh: Likewise.
* commands/boot.c (grub_boot_init, grub_boot_fini): Removed.
* commands/cat.c (grub_cat_init, grub_cat_fini): Likewise.
* commands/cmp.c (grub_cmp_init, grub_cmp_fini): Likewise.
* commands/configfile.c (grub_configfile_init)
(grub_configfile_fini): Likewise.
* commands/default.c (grub_default_init, grub_default_fini):
Likewise.
* commands/help.c (grub_help_init, grub_help_fini): Likewise.
* commands/ls.c (grub_ls_init, grub_ls_fini): Likewise.
* commands/search.c (grub_search_init, grub_search_fini): Likewise.
* commands/terminal.c (grub_terminal_init, grub_terminal_fini):
Likewise.
* commands/test.c (grub_test_init, grub_test_fini): Likewise.
* commands/timeout.c (grub_timeout_init, grub_timeout_fini):
Likewise.
* commands/i386/pc/halt.c (grub_halt_init, grub_halt_fini): Likewise.
* commands/iee1275/halt.c (grub_halt_init, grub_halt_fini):
Likewise.
* commands/i386/pc/reboot.c (grub_reboot_init, grub_reboot_fini):
Likewise.
* commands/iee1275/reboot.c (grub_reboot_init, grub_reboot_fini):
Likewise.
* disk/loopback.c (grub_loop_init, grub_loop_fini): Likewise.
* fs/affs.c (grub_affs_init, grub_affs_fini): Likewise.
* fs/ext2.c (grub_ext2_init, grub_ext2_fini): Likewise.
* fs/fat.c (grub_fat_init, grub_fat_fini): Likewise.
* fs/hfs.c (grub_hfs_init, grub_hfs_fini): Likewise.
* fs/iso9660.c (grub_iso9660_init, grub_iso9660_fini): Likewise.
* fs/jfs.c (grub_jfs_init, grub_jfs_fini): Likewise.
* fs/minix.c (grub_minix_init, grub_minix_fini): Likewise.
* fs/sfs.c (grub_sfs_init, grub_sfs_fini): Likewise.
* fs/ufs.c (grub_ufs_init, grub_ufs_fini): Likewise.
* fs/xfs.c (grub_xfs_init, grub_xfs_fini): Likewise.
* normal/main.c (grub_normal_init, grub_normal_fini): Likewise.
* partmap/amiga.c (grub_amiga_partition_map_init)
(grub_amiga_partition_map_fini): Likewise.
* partmap/apple.c (grub_apple_partition_map_init)
(grub_apple_partition_map_fini): Likewise.
* partmap/pc.c (grub_pc_partition_map_init)
(grub_pc_partition_map_fini): Likewise.
* partmap/sun.c (grub_sun_partition_map_init,
grub_sun_partition_map_fini): Likewise.
* term/terminfo.c (grub_terminal_init, grub_terminal_fini):
Likewise.
* util/grub-emu.c: Include <grub_modules_init.h>.
(main): Don't initialize and de-initialize any modules directly,
use `grub_init_all' and `grub_fini_all' instead.
* term/i386/pc/vesafb.c (grub_vesafb_init): Renamed to
`grub_vesafb_mod_init'.
(grub_vesafb_fini): Renamed to `grub_vesafb_mod_fini'. Updated
all users.
* term/i386/pc/vga.c (grub_vga_init): Renamed to
`grub_vga_mod_init'. Updated all users.
(grub_vga_fini): Renamed to `grub_vga_mod_fini'.
* conf/i386-pc.rmk (grub_emu_SOURCES): Add `grub_emu_init.c'.
(grub_modules_init.lst, grub_modules_init.h, grub_emu_init.c): New
rules.
* include/grub/dl.h (GRUB_MOD_INIT): Add argument `name'.
Generate a function to initialize the module in utilities.
Updated all callers.
(GRUB_MOD_FINI): Add argument `name'. Generate a function to
initialize the module in utilities. Updated all callers.
2005-11-13 15:47:09 +00:00
|
|
|
|
GRUB_MOD_FINI(serial)
|
2012-02-26 23:28:45 +00:00
|
|
|
|
#endif
|
2005-09-03 16:54:27 +00:00
|
|
|
|
{
|
2010-07-17 23:37:19 +00:00
|
|
|
|
while (grub_serial_ports)
|
|
|
|
|
grub_serial_unregister (grub_serial_ports);
|
2010-07-18 15:40:42 +00:00
|
|
|
|
if (registered)
|
|
|
|
|
{
|
|
|
|
|
grub_term_unregister_input (&grub_serial_term_input);
|
|
|
|
|
grub_term_unregister_output (&grub_serial_term_output);
|
|
|
|
|
}
|
2009-03-21 Bean <bean123ch@gmail.com>
* commands/blocklist.c: Add include file <grub/command.h>, remove
<grub/normal.h> and <grub/arg.h>.
(grub_cmd_blocklist): Use the new command interface.
(GRUB_MOD_INIT): Likewise.
(GRUB_MOD_FINI): Likewise.
* commands/boot.c: Likewise.
* commands/cat.c: Likewise.
* commands/cmp.c: Likewise.
* commands/configfile.c: Likewise.
* commands/crc.c: Likewise.
* commands/echo.c: Likewise.
* commands/halt.c: Likewise.
* commands/handler.c: Likewise.
* commands/hdparm.c: Likewise.
* commands/help.c: Likewise.
* commands/hexdump.c: Likewise.
* commands/loadenv.c: Likewise.
* commands/ls.c: Likewise.
* commands/lsmmap.c: Likewise.
* commands/lspci.c: Likewise.
* commands/loadenv.c: Likewise.
* commands/read.c: Likewise.
* commands/reboot.c: Likewise.
* commands/search.c: Likewise.
* commands/sleep.c: Likewise.
* commands/test.c: Likewise.
* commands/usbtest.c: Likewise.
* commands/videotest.c: Likewise.
* commands/i386/cpuid.c: Likewise.
* commands/i386/pc/halt.c: Likewise.
* commands/i386/pc/play.c: Likewise.
* commands/i386/pc/pxecmd.c: Likewise.
* commands/i386/pc/vbeinfo.c: Likewise.
* commands/i386/pc/vbetest.c: Likewise.
* commands/ieee1275/suspend.c: Likewise.
* disk/loopback.c: Likewise.
* font/font_cmd.c: Likewise.
* hello/hello.c: Likewise.
* loader/efi/appleloader.c: Likewise.
* loader/efi/chainloader.c: Likewise.
* loader/i386/bsd.c: Likewise.
* loader/i386/efi/linux.c: Likewise.
* loader/i386/ieee1275/linux.c: Likewise.
* loader/i386/linux.c: Likewise.
* loader/i386/pc/chainloader.c: Likewise.
* loader/i386/pc/linux.c: Likewise.
* loader/powerpc/ieee1275/linux.c: Likewise.
* loader/multiboot_loader.c: Likewise.
* term/gfxterm.c: Likewise.
* term/i386/pc/serial.c: Likewise.
* term/terminfo.c: Likewise.
* term/i386/pc/vesafb.c: Removed <grub/arg.h>.
* term/i386/pc/vga.c: Likewise.
* video/readers/jpeg.c: Likewise.
* video/readers/png.c: Likewise.
* video/readers/tga.c: Likewise.
* util/grub-fstest (cmd_loopback): Removed.
(cmd_blocklist): Likewise.
(cmd_ls): Likewise.
(grub_register_command): Likewise.
(grub_unregister_command): Likewise.
(execute_command): Use grub_command_find to locate command and execute
it.
* include/grub/efi/chainloader.h: Removed.
* loader/efi/chainloader_normal.c: Likewise.
* loader/i386/bsd_normal.c: Likewise.
* loader/i386/pc/chainloader_normal.c: Likewise.
* loader/i386/pc/multiboot_normal.c: Likewise.
* loader/linux_normal.c: Likewise.
* loader/multiboot_loader_normal.c: Likewise.
* loader/powerpc/ieee1275/linux_normal.c: Likewise.
* gencmdlist.sh: Scan new registration command grub_register_extcmd
and grub_register_command_p1.
* conf/common.rmk (grub_fstest_SOURCES): Add kern/list.c,
kern/command.c, lib/arg.c and commands/extcmd.c.
(pkglib_MODULES): Remove boot.mod, and minicmd.mod and extcmd.mod.
(minicmd_mod_SOURCES): New variable.
(minicmd_mod_CFLAGS): Likewise.
(minicmd_mod_LDFLAGS): Likewise.
(extcmd_mod_SOURCES): Likewise.
(extcmd_mod_CFLAGS): Likewise.
(extcmd_mod_LDFLAGS): Likewise.
(boot_mod_SOURCES): Removed.
(boot_mod_CFLAGS): Likewise.
(boot_mod_LDFLAGS): Likewise.
* conf/i386-pc.rmk (kernel_img_SOURCES): Add kern/command.c and
kern/corecmd.c.
(kernel_img_HEADERS): Add command.h.
(grub_emu_SOURCES): Remove commands/boot.c and normal/arg.c, add
commands/minicmd.c, kern/command.c, kern/corecmd.c, commands/extcmd.c
and lib/arg.c.
(pkglib_MODULES): Change _linux.mod, _chain.mod, _bsd.mod and
_multiboot.mod as linux.mod, chain.mod, bsd.mod and multiboot.mod,
remove the corresponding normal mode command.
(normal_mod_SOURCES): Remove normal/arg.c.
* conf/i386-coreboot.rmk: Likewise.
* conf/i386-efi.rmk: Likewise.
* conf/i386-ieee1275.rmk: Likewise.
* conf/powerpc-ieee1275.rmk: Likewise.
* conf/x86_64-efi.rmk: Likewise.
* include/grub/arg.h: Move from here ...
* include/grub/lib/arg.h: ... to here.
* normal/arg.c: Move from here ...
* lib/arg.c: ... to here.
* commands/extcmd.c: New file.
* commands/minicmd.c: Likewise.
* include/grub/command.h: Likewise.
* include/grub/extcmd.h: Likewise.
* kern/command.c: Likewise.
* kern/corecmd.c: Likewise.
* kern/list.c (grub_list_iterate): Return int instead of void.
(grub_list_insert): New function.
(grub_prio_list_insert): Likewise.
* kern/rescue.c (grub_rescue_command): Removed.
(grub_rescue_command_list): Likewise.
(grub_rescue_register_command): Likewise.
(grub_rescue_unregister_command): Likewise.
(grub_rescue_cmd_boot): Move to minicmd.c
(grub_rescue_cmd_help): Likewise.
(grub_rescue_cmd_info): Likewise.
(grub_rescue_cmd_boot): Likewise.
(grub_rescue_cmd_testload): Likewise.
(grub_rescue_cmd_dump): Likewise.
(grub_rescue_cmd_rmmod): Likewise.
(grub_rescue_cmd_lsmod): Likewise.
(grub_rescue_cmd_exit): Likewise.
(grub_rescue_print_devices): Moved to corecmd.c.
(grub_rescue_print_files): Likewise.
(grub_rescue_cmd_ls): Likewise.
(grub_rescue_cmd_insmod): Likewise.
(grub_rescue_cmd_set): Likewise.
(grub_rescue_cmd_unset): Likewise.
(attemp_normal_mode): Use grub_command_find to get normal module.
(grub_enter_rescue_mode): Use grub_register_core_commands to register
commands, remove grub_rescue_regiter_command calls.
* normal/command.c (grub_regiser_command): Removed.
(grub_unregister_command): Likewise.
(grub_command_find): Likewise.
(grub_iterate_commands): Likewise.
(rescue_command): Likewise.
(export_command): Moved to corecmd.c.
(set_command): Removed.
(unset_command): Likewise.
(insmod_command): Likewise.
(rmmod_command): Likewise.
(lsmod_command): Likewise.
(grub_command_init): Likewise.
* normal/completion.c (iterate_command): Use cmd->prio to check for
active command.
(complete_arguments): Use grub_extcmd_t structure to find options.
(grub_normal_do_completion): Change function grub_iterate_commands to
grub_command_iterate.
* normal/execute.c (grub_script_execute_cmd): No need to parse
argument here.
* normal/main.c (grub_dyncmd_dispatcher): New function.
(read_command_list): Register unload commands as dyncmd.
(grub_cmd_normal): Use new command interface, register rescue,
unregister normal at entry, register normal, unregister rescue at exit.
* include/grub/list.h (grub_list_test_t): New type.
(grub_list_iterate): Return int instead of void.
(grub_list_insert): New function.
(GRUB_AS_NAMED_LIST_P): New macro.
(GRUB_AS_PRIO_LIST): Likewise.
(GRUB_AS_PRIO_LIST_P): Likewise.
(GRUB_PRIO_LIST_PRIO_MASK): New constant.
(GRUB_PRIO_LIST_FLAG_ACTIVE): Likewise.
(grub_prio_list): New structure.
(grub_prio_list_insert): New function.
(grub_prio_list_remove): New inline function.
* include/grub/normal.h: Remove <grub/arg.h>, add <grub/command.h>.
(GRUB_COMMAND_FLAG_CMDLINE): Moved to command.h.
(GRUB_COMMAND_FLAG_MENU): Likewise.
(GRUB_COMMAND_FLAG_BOTH): Likewise.
(GRUB_COMMAND_FLAG_TITLE): Likewise.
(GRUB_COMMAND_FLAG_NO_ECHO): Likewise.
(GRUB_COMMAND_FLAG_NO_ARG_PARSE): Removed.
(GRUB_COMMAND_FLAG_NOT_LOADED): Likewise.
(grub_command): Likewise.
(grub_register_command): Likewise.
(grub_command_find): Likewise.
(grub_iterate_commands): Likewise.
(grub_command_init): Likewise.
(grub_arg_parse): Likewise.
(grub_arg_show_help): Likewise.
* include/grub/rescue.h (grub_rescue_register_command): Removed.
(grub_rescue_unregister_command): Likewise.
* include/grub/i386/bsd.h: Remove grub_rescue_cmd_freebsd,
grub_rescue_cmd_openbsd, grub_rescue_cmd_netbsd,
grub_rescue_cmd_freebsd_loadenv and grub_rescue_cmd_freebsd_module.
* include/grub/i386/efi/loader.h: Remove grub_rescue_cmd_linux and
grub_rescue_cmd_initrd.
* include/grub/i386/loader.h: Likewise.
* include/grub/x86_64/loader.h: Likewise.
* include/grub/i386/pc/chainloader.h: Remove grub_chainloader_cmd.
2009-03-21 08:39:59 +00:00
|
|
|
|
grub_unregister_extcmd (cmd);
|
2005-09-03 16:54:27 +00:00
|
|
|
|
}
|