diff options
Diffstat (limited to 'cmd/bootflow.c')
| -rw-r--r-- | cmd/bootflow.c | 44 | 
1 files changed, 42 insertions, 2 deletions
| diff --git a/cmd/bootflow.c b/cmd/bootflow.c index 313103d2775..2b6ed26fdcb 100644 --- a/cmd/bootflow.c +++ b/cmd/bootflow.c @@ -337,6 +337,13 @@ static int do_bootflow_info(struct cmd_tbl *cmdtp, int flag, int argc,  	printf("Filename:  %s\n", bflow->fname);  	printf("Buffer:    %lx\n", (ulong)map_to_sysmem(bflow->buf));  	printf("Size:      %x (%d bytes)\n", bflow->size, bflow->size); +	printf("OS:        %s\n", bflow->os_name ? bflow->os_name : "(none)"); +	printf("Logo:      %s\n", bflow->logo ? +	       simple_xtoa((ulong)map_to_sysmem(bflow->logo)) : "(none)"); +	if (bflow->logo) { +		printf("Logo size: %x (%d bytes)\n", bflow->logo_size, +		       bflow->logo_size); +	}  	printf("Error:     %d\n", bflow->err);  	if (dump && bflow->buf) {  		/* Set some sort of maximum on the size */ @@ -382,6 +389,37 @@ static int do_bootflow_boot(struct cmd_tbl *cmdtp, int flag, int argc,  	return 0;  } + +static int do_bootflow_menu(struct cmd_tbl *cmdtp, int flag, int argc, +			    char *const argv[]) +{ +	struct bootstd_priv *std; +	struct bootflow *bflow; +	bool text_mode = false; +	int ret; + +	if (argc > 1 && *argv[1] == '-') +		text_mode = strchr(argv[1], 't'); + +	ret = bootstd_get_priv(&std); +	if (ret) +		return CMD_RET_FAILURE; + +	ret = bootflow_menu_run(std, text_mode, &bflow); +	if (ret) { +		if (ret == -EAGAIN) +			printf("Nothing chosen\n"); +		else +			printf("Menu failed (err=%d)\n", ret); + +		return CMD_RET_FAILURE; +	} + +	printf("Selected: %s\n", bflow->os_name ? bflow->os_name : bflow->name); +	std->cur_bootflow = bflow; + +	return 0; +}  #endif /* CONFIG_CMD_BOOTFLOW_FULL */  #ifdef CONFIG_SYS_LONGHELP @@ -391,7 +429,8 @@ static char bootflow_help_text[] =  	"bootflow list [-e]             - list scanned bootflows (-e errors)\n"  	"bootflow select [<num>|<name>] - select a bootflow\n"  	"bootflow info [-d]             - show info on current bootflow (-d dump bootflow)\n" -	"bootflow boot                  - boot current bootflow (or first available if none selected)"; +	"bootflow boot                  - boot current bootflow (or first available if none selected)\n" +	"bootflow menu [-t]             - show a menu of available bootflows";  #else  	"scan - boot first available bootflow\n";  #endif @@ -403,6 +442,7 @@ U_BOOT_CMD_WITH_SUBCMDS(bootflow, "Boot flows", bootflow_help_text,  	U_BOOT_SUBCMD_MKENT(list, 2, 1, do_bootflow_list),  	U_BOOT_SUBCMD_MKENT(select, 2, 1, do_bootflow_select),  	U_BOOT_SUBCMD_MKENT(info, 2, 1, do_bootflow_info), -	U_BOOT_SUBCMD_MKENT(boot, 1, 1, do_bootflow_boot) +	U_BOOT_SUBCMD_MKENT(boot, 1, 1, do_bootflow_boot), +	U_BOOT_SUBCMD_MKENT(menu, 2, 1, do_bootflow_menu),  #endif  ); | 
