[PATCH v2 2/3] eficonfig: refactor change boot order implementation
Ilias Apalodimas
ilias.apalodimas at linaro.org
Tue Dec 27 16:05:56 CET 2022
On Sat, Dec 24, 2022 at 07:57:43AM +0900, Masahisa Kojima wrote:
> This commit removes the change boot order specific
> menu implementation. The change boot order implementation
> calls eficonfig_process_common() same as other menus.
>
> The change boot order menu requires own item_data_print
> and item_choice implementation, but display_statusline
> function can be a same function as other menus.
>
> Signed-off-by: Masahisa Kojima <masahisa.kojima at linaro.org>
> ---
> Changes in v2:
> - add comment when the user key press is not valid
> - add const qualifier to eficonfig_change_boot_order_desc
>
> cmd/eficonfig.c | 245 +++++++++++++++++++++++++++++-------------------
> 1 file changed, 150 insertions(+), 95 deletions(-)
>
> diff --git a/cmd/eficonfig.c b/cmd/eficonfig.c
> index 2fc486dac2..13929cb003 100644
> --- a/cmd/eficonfig.c
> +++ b/cmd/eficonfig.c
> @@ -24,6 +24,11 @@ static struct efi_simple_text_input_protocol *cin;
> const char *eficonfig_menu_desc =
> " Press UP/DOWN to move, ENTER to select, ESC/CTRL+C to quit";
>
> +static const char *eficonfig_change_boot_order_desc =
> + " Press UP/DOWN to move, +/- to change orde\n"
> + " Press SPACE to activate or deactivate the entry\n"
> + " Select [Save] to complete, ESC/CTRL+C to quit";
> +
> #define EFICONFIG_DESCRIPTION_MAX 32
> #define EFICONFIG_OPTIONAL_DATA_MAX 64
>
> @@ -105,6 +110,17 @@ struct eficonfig_boot_order_data {
> bool active;
> };
>
> +/**
> + * struct eficonfig_save_boot_order_data - structure to be used to change boot order
> + *
> + * @efi_menu: pointer to efimenu structure
> + * @selected: flag to indicate user selects "Save" entry
> + */
> +struct eficonfig_save_boot_order_data {
> + struct efimenu *efi_menu;
> + bool selected;
> +};
> +
> /**
> * eficonfig_print_msg() - print message
> *
> @@ -173,10 +189,9 @@ void eficonfig_display_statusline(struct menu *m)
> "\n%s\n"
> ANSI_CURSOR_POSITION ANSI_CLEAR_LINE ANSI_CURSOR_POSITION
> "%s"
> - ANSI_CLEAR_LINE_TO_END ANSI_CURSOR_POSITION ANSI_CLEAR_LINE,
> + ANSI_CLEAR_LINE_TO_END,
> 1, 1, entry->efi_menu->menu_header, entry->efi_menu->count + 5, 1,
> - entry->efi_menu->count + 6, 1, entry->efi_menu->menu_desc,
> - entry->efi_menu->count + 7, 1);
> + entry->efi_menu->count + 6, 1, entry->efi_menu->menu_desc);
> }
>
> /**
> @@ -1841,63 +1856,44 @@ out:
> }
>
> /**
> - * eficonfig_display_change_boot_order() - display the BootOrder list
> + * eficonfig_print_change_boot_order_entry() - print the boot option entry
> *
> - * @efi_menu: pointer to the efimenu structure
> - * Return: status code
> + * @data: pointer to the data associated with each menu entry
> */
> -static void eficonfig_display_change_boot_order(struct efimenu *efi_menu)
> +static void eficonfig_print_change_boot_order_entry(void *data)
> {
> - bool reverse;
> - struct list_head *pos, *n;
> - struct eficonfig_entry *entry;
> -
> - printf(ANSI_CLEAR_CONSOLE ANSI_CURSOR_POSITION
> - "\n ** Change Boot Order **\n"
> - ANSI_CURSOR_POSITION
> - " Press UP/DOWN to move, +/- to change order"
> - ANSI_CURSOR_POSITION
> - " Press SPACE to activate or deactivate the entry"
> - ANSI_CURSOR_POSITION
> - " Select [Save] to complete, ESC/CTRL+C to quit"
> - ANSI_CURSOR_POSITION ANSI_CLEAR_LINE,
> - 1, 1, efi_menu->count + 5, 1, efi_menu->count + 6, 1,
> - efi_menu->count + 7, 1, efi_menu->count + 8, 1);
> -
> - /* draw boot option list */
> - list_for_each_safe(pos, n, &efi_menu->list) {
> - entry = list_entry(pos, struct eficonfig_entry, list);
> - reverse = (entry->num == efi_menu->active);
> + struct eficonfig_entry *entry = data;
> + int reverse = (entry->efi_menu->active == entry->num);
Why did we change this from bool?
[...]
> - printf(ANSI_CURSOR_POSITION, entry->num + 4, 7);
> }
>
> /**
> - * eficonfig_choice_change_boot_order() - handle the BootOrder update
> + * eficonfig_choice_change_boot_order() - user key input handler
> *
> - * @efi_menu: pointer to the efimenu structure
> - * Return: status code
> + * @data: pointer to the menu entry
> + * Return: key string to identify the selected entry
> */
> -static efi_status_t eficonfig_choice_change_boot_order(struct efimenu *efi_menu)
> }
>
> +/**
> + * eficonfig_process_save_boot_order() - callback function for "Save" entry
> + *
> + * @data: pointer to the data
> + * Return: status code
> + */
> +static efi_status_t eficonfig_process_save_boot_order(void *data)
> +{
> + u32 count = 0;
> + efi_status_t ret;
> + efi_uintn_t size;
> + struct list_head *pos, *n;
> + u16 *new_bootorder;
> + struct efimenu *efi_menu;
> + struct eficonfig_entry *entry;
> + struct eficonfig_save_boot_order_data *save_data = data;
> +
> + efi_menu = save_data->efi_menu;
> +
> + /*
> + * The change boot order menu always has "Save" and "Quit" entries.
[...]
Acked-by: Ilias Apalodimas <ilias.apalodimas at linaro.org>
More information about the U-Boot
mailing list