blob: c50b6d1f61fc661d223df1f6900f0179902a151e [file] [log] [blame]
#include "menu.h"
#include "bios_menu.h" //For boot_seq.
#include "bootselect_menu.h"
#include "creation.h"
int return_value = 0;
int cvar_numeric_load(void *user_data, int param2, int def_val);
void cvar_popup_save(void *user_data, popup_entry_t *entry);
int cvar_popup_load(void *user_data, popup_entry_t *entries);
#define LABEL(x) menu_item_create(ITEMTYPE_LABEL, menu, #x)
#define SPACER menu_item_create(ITEMTYPE_LABEL, menu, " ")
#define BOOT_MENU_NAME "U-Boot Boot Select"
#define EXIT_MENU_NAME "Exit Menu"
#define EXIT_BOOT_CONFIG 0
#define EXIT_BOOT_NOCONFIG 1
#define EXIT_GO_MENU 2
void my_leave_func(item_t *item, void *dummy, int arg)
{
setenv("boot2", "");
setenv("boot3", "");
switch (arg)
{
case EXIT_BOOT_CONFIG:
return_value = 0;
leave_func(item, dummy, EXIT_AND_SAVE);
break;
case EXIT_BOOT_NOCONFIG:
return_value = 0;
leave_func(item, dummy, EXIT_AND_NO_SAVE);
break;
case EXIT_GO_MENU:
return_value = 1;
leave_func(item, dummy, EXIT_AND_NO_SAVE);
break;
}
}
void make_bootselect_menu(form_t *form)
{
item_t *item;
menu_t *menu;
// Boot Select //
menu = new_menu(MENUTYPE_FORM, BOOT_MENU_NAME, form, 0);
item = menu_item_create(ITEMTYPE_POPUP, menu,
"Boot Device", 0, "boot1",
cvar_popup_save, cvar_popup_load, boot_seq); //TEST_ITEM();
menu_item_set_help(item, "Choose which boot device should be attempted first");
SPACER;
item = menu_item_create(ITEMTYPE_STRING_CVAR, menu,
"Boot arguments for AOS", "os4_commandline", "debuglevel=0"); //TEST_ITEM();
menu_item_set_help(item, "Argument string to be passed to AOS");
item = menu_item_create(ITEMTYPE_STRING_CVAR, menu,
"Boot arguments for Linux", "bootargs", "root=/dev/Sda3"); //TEST_ITEM();
menu_item_set_help(item, "Argument string to be passed to Linux");
SPACER;
menu_form_add_menu(form, menu);
// Exit //
menu = new_menu(MENUTYPE_POPUP, EXIT_MENU_NAME, form, 0);
item = menu_item_create(ITEMTYPE_FUNC, menu, "Boot this configuration", my_leave_func, NULL, EXIT_BOOT_CONFIG);
menu_item_set_help(item, "Temporarily boot this configuration");
item = menu_item_create(ITEMTYPE_FUNC, menu, "Go to preferences menu", my_leave_func, NULL, EXIT_GO_MENU);
menu_item_set_help(item, "Abort the changes and go to the preferences menu");
item = menu_item_create(ITEMTYPE_FUNC, menu, "Continue normal boot", my_leave_func, NULL, EXIT_BOOT_NOCONFIG);
menu_item_set_help(item, "Abort the changes and continue booting the normal configuration");
menu_set_position(menu, 6, 6);
menu_form_add_menu(form, menu);
}
void boot_establish(void)
{
char *bootfinal = "";
char *b1 = "boota";
char *mboot = getenv("menuboot_cmd");
char *method = getenv("boot_method");
char *bootcommand = getenv("boot_command");
if (method == NULL) method="boota";
if (mboot && strncmp(mboot, "noboot", 6) == 0)
{
setenv("menuboot_cmd", " ");
return;
}
if (strcmp(method, "boota") == 0)
{
bootfinal = b1;
}
else
{
bootfinal = bootcommand;
}
setenv("menuboot_cmd", bootfinal);
}