summaryrefslogtreecommitdiffstats
path: root/src/hci
diff options
context:
space:
mode:
Diffstat (limited to 'src/hci')
-rw-r--r--src/hci/commands/console_cmd.c2
-rw-r--r--src/hci/commands/efimap_cmd.c77
-rw-r--r--src/hci/commands/login_cmd.c13
-rw-r--r--src/hci/commands/menu_cmd.c13
-rw-r--r--src/hci/tui/login_ui.c22
-rw-r--r--src/hci/tui/menu_ui.c13
6 files changed, 129 insertions, 11 deletions
diff --git a/src/hci/commands/console_cmd.c b/src/hci/commands/console_cmd.c
index ba472b9f..bd564726 100644
--- a/src/hci/commands/console_cmd.c
+++ b/src/hci/commands/console_cmd.c
@@ -70,6 +70,8 @@ static struct option_descriptor console_opts[] = {
struct console_options, picture, parse_string ),
OPTION_DESC ( "keep", 'k', no_argument,
struct console_options, keep, parse_flag ),
+ OPTION_DESC ( "update", 'u', no_argument,
+ struct console_options, config.lazy_update, parse_flag ),
};
/** "console" command descriptor */
diff --git a/src/hci/commands/efimap_cmd.c b/src/hci/commands/efimap_cmd.c
new file mode 100644
index 00000000..c183cbc3
--- /dev/null
+++ b/src/hci/commands/efimap_cmd.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright (C) 2019 Oracle. All rights reserved.
+ *
+ * This program 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 2 of the
+ * License, or any later version.
+ *
+ * This program 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 this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ *
+ * You can also choose to distribute this program under the terms of
+ * the Unmodified Binary Distribution Licence (as given in the file
+ * COPYING.UBDL), provided that you have satisfied its requirements.
+ */
+
+
+FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+
+#include <stdio.h>
+#include <errno.h>
+#include <getopt.h>
+#include <string.h>
+#include <ipxe/command.h>
+#include <ipxe/parseopt.h>
+#include <usr/efiboot.h>
+
+/** @file
+ *
+ * EFIMAP command
+ *
+ */
+
+/** "efimap" options */
+struct efimap_options {};
+
+/** "efimap" option list */
+static struct option_descriptor efimap_opts[] = {};
+
+/** "efimap" command descriptor */
+static struct command_descriptor efimap_cmd =
+ COMMAND_DESC ( struct efimap_options, efimap_opts, 0, 0, NULL);
+
+/**
+ * The "efimap" command
+ *
+ * @v argc Argument count
+ * @v argv Argument list
+ * @ret rc Return status code
+ */
+static int efimap_exec ( int argc, char **argv ) {
+ struct efimap_options opts;
+ int rc;
+
+ /* Parse options */
+ if ( ( rc = parse_options ( argc, argv, &efimap_cmd, &opts ) ) != 0 )
+ return rc;
+
+ efi_boot_display_map ();
+
+ return 0;
+}
+
+/** EFIMAP command */
+struct command efimap_commands[] __command = {
+ {
+ .name = "efimap",
+ .exec = efimap_exec,
+ },
+};
diff --git a/src/hci/commands/login_cmd.c b/src/hci/commands/login_cmd.c
index c9e19643..6ed76c6f 100644
--- a/src/hci/commands/login_cmd.c
+++ b/src/hci/commands/login_cmd.c
@@ -23,6 +23,7 @@
#include <string.h>
#include <stdio.h>
+#include <getopt.h>
#include <ipxe/command.h>
#include <ipxe/parseopt.h>
#include <ipxe/login_ui.h>
@@ -36,10 +37,16 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
*/
/** "login" options */
-struct login_options {};
+struct login_options {
+ /** No Username */
+ int nouser;
+};
/** "login" option list */
-static struct option_descriptor login_opts[] = {};
+static struct option_descriptor login_opts[] = {
+ OPTION_DESC ( "nouser", 'n', no_argument,
+ struct login_options, nouser, parse_flag ),
+};
/** "login" command descriptor */
static struct command_descriptor login_cmd =
@@ -61,7 +68,7 @@ static int login_exec ( int argc, char **argv ) {
return rc;
/* Show login UI */
- if ( ( rc = login_ui() ) != 0 ) {
+ if ( ( rc = login_ui( opts.nouser ) ) != 0 ) {
printf ( "Could not set credentials: %s\n",
strerror ( rc ) );
return rc;
diff --git a/src/hci/commands/menu_cmd.c b/src/hci/commands/menu_cmd.c
index 76bce869..c8692f1a 100644
--- a/src/hci/commands/menu_cmd.c
+++ b/src/hci/commands/menu_cmd.c
@@ -118,6 +118,8 @@ struct item_options {
int is_default;
/** Use as a separator */
int is_gap;
+ /** Don't show; hotkey only */
+ int is_hidden;
};
/** "item" option list */
@@ -130,6 +132,8 @@ static struct option_descriptor item_opts[] = {
struct item_options, is_default, parse_flag ),
OPTION_DESC ( "gap", 'g', no_argument,
struct item_options, is_gap, parse_flag ),
+ OPTION_DESC ( "hidden", 'i', no_argument,
+ struct item_options, is_hidden, parse_flag ),
};
/** "item" command descriptor */
@@ -160,6 +164,12 @@ static int item_exec ( int argc, char **argv ) {
if ( ! opts.is_gap )
label = argv[optind++]; /* May be NULL */
+ /* Hidden entry without label and shortcut is pointless */
+ if ( opts.is_hidden && ( ! opts.key || ! label || ! *label ) ) {
+ rc = -EINVAL;
+ goto err_invalid_argument;
+ }
+
/* Parse text, if present */
if ( optind < argc ) {
text = concat_args ( &argv[optind] );
@@ -175,7 +185,7 @@ static int item_exec ( int argc, char **argv ) {
/* Add menu item */
item = add_menu_item ( menu, label, ( text ? text : "" ),
- opts.key, opts.is_default );
+ opts.key, opts.is_default, opts.is_hidden );
if ( ! item ) {
rc = -ENOMEM;
goto err_add_menu_item;
@@ -188,6 +198,7 @@ static int item_exec ( int argc, char **argv ) {
err_parse_menu:
free ( text );
err_parse_text:
+ err_invalid_argument:
err_parse_options:
return rc;
}
diff --git a/src/hci/tui/login_ui.c b/src/hci/tui/login_ui.c
index 3c55325d..56fc2fa9 100644
--- a/src/hci/tui/login_ui.c
+++ b/src/hci/tui/login_ui.c
@@ -48,12 +48,12 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#define EDITBOX_COL ( ( COLS / 2U ) - 10U )
#define EDITBOX_WIDTH 20U
-int login_ui ( void ) {
+int login_ui ( int nouser ) {
char username[64];
char password[64];
struct edit_box username_box;
struct edit_box password_box;
- struct edit_box *current_box = &username_box;
+ struct edit_box *current_box = nouser ? &password_box : &username_box;
int key;
int rc = -EINPROGRESS;
@@ -76,11 +76,15 @@ int login_ui ( void ) {
color_set ( CPAIR_NORMAL, NULL );
erase();
attron ( A_BOLD );
- mvprintw ( USERNAME_LABEL_ROW, LABEL_COL, "Username:" );
+ if ( ! nouser ) {
+ mvprintw ( USERNAME_LABEL_ROW, LABEL_COL, "Username:" );
+ }
mvprintw ( PASSWORD_LABEL_ROW, LABEL_COL, "Password:" );
attroff ( A_BOLD );
color_set ( CPAIR_EDIT, NULL );
- draw_editbox ( &username_box );
+ if ( ! nouser ) {
+ draw_editbox ( &username_box );
+ }
draw_editbox ( &password_box );
/* Main loop */
@@ -94,11 +98,15 @@ int login_ui ( void ) {
current_box = &password_box;
break;
case KEY_UP:
- current_box = &username_box;
+ if ( ! nouser ) {
+ current_box = &username_box;
+ }
break;
case TAB:
- current_box = ( ( current_box == &username_box ) ?
- &password_box : &username_box );
+ if ( ! nouser ) {
+ current_box = ( ( current_box == &username_box ) ?
+ &password_box : &username_box );
+ }
break;
case KEY_ENTER:
if ( current_box == &username_box ) {
diff --git a/src/hci/tui/menu_ui.c b/src/hci/tui/menu_ui.c
index f9dd9d10..cb4edbbc 100644
--- a/src/hci/tui/menu_ui.c
+++ b/src/hci/tui/menu_ui.c
@@ -217,6 +217,8 @@ static int menu_loop ( struct menu_ui *ui, struct menu_item **selected ) {
break;
default:
i = 0;
+
+ /* Check for shortcut. Visible items */
list_for_each_entry ( item, &ui->menu->items,
list ) {
if ( ! ( item->shortcut &&
@@ -231,6 +233,16 @@ static int menu_loop ( struct menu_ui *ui, struct menu_item **selected ) {
move = +1;
}
}
+
+ /* Hidden items */
+ list_for_each_entry ( item, &ui->menu->hidden_items,
+ list ) {
+ if ( item->shortcut &&
+ ( item->shortcut == key ) ) {
+ *selected = item;
+ goto hidden_entry_selected;
+ }
+ }
break;
}
}
@@ -259,6 +271,7 @@ static int menu_loop ( struct menu_ui *ui, struct menu_item **selected ) {
} while ( ( rc == 0 ) && ! chosen );
+ hidden_entry_selected:
return rc;
}