<varlistentry>
<term><varname>LoaderConfigTimeout</varname></term>
- <listitem><para>The menu time-out. Read by the boot loader. (Also, modified by it when the
- <keycap>t</keycap>/<keycap>T</keycap> keys are used, see above.)</para></listitem>
+ <term><varname>LoaderConfigTimeoutOneShot</varname></term>
+ <listitem><para>The menu time-out in seconds. Read by the boot loader. <varname>LoaderConfigTimeout</varname>
+ is maintained persistently, while <varname>LoaderConfigTimeoutOneShot</varname> is a one-time override which is
+ read once (in which case it takes precedence over <varname>LoaderConfigTimeout</varname>) and then
+ removed. <varname>LoaderConfigTimeout</varname> may be manipulated with the
+ <keycap>t</keycap>/<keycap>T</keycap> keys, see above.)</para></listitem>
</varlistentry>
<varlistentry>
BOOLEAN editor;
BOOLEAN auto_entries;
BOOLEAN auto_firmware;
+ BOOLEAN force_menu;
UINTN console_mode;
enum console_mode_change_type console_mode_change;
} Config;
config->timeout_sec = sec;
} else
config->timeout_sec_efivar = -1;
+
+ err = efivar_get_int(L"LoaderConfigTimeoutOneShot", &sec);
+ if (!EFI_ERROR(err)) {
+ /* Unset variable now, after all it's "one shot". */
+ (void) efivar_set(L"LoaderConfigTimeoutOneShot", NULL, TRUE);
+
+ config->timeout_sec = sec;
+ config->force_menu = TRUE; /* force the menu when this is set */
+ }
}
static VOID config_load_entries(
}
/* select entry or show menu when key is pressed or timeout is set */
- if (config.timeout_sec == 0) {
+ if (config.force_menu || config.timeout_sec > 0)
+ menu = TRUE;
+ else {
UINT64 key;
err = console_key_read(&key, FALSE);
else
menu = TRUE;
}
- } else
- menu = TRUE;
+ }
for (;;) {
ConfigEntry *entry;