summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>2016-06-08 13:51:28 +1000
committerSamuel Mendoza-Jonas <sam@mendozajonas.com>2016-06-29 14:19:08 +1000
commitce54f866b2b9e48bab73acd73b4c05a057f9ddca (patch)
tree1c96e2ffcea00f5806262aba9e7ec95e6c8bed3f
parentd19b94a83870f7b2a41e55d7462bcf36d2b5ba0b (diff)
downloadpetitboot-ce54f866b2b9e48bab73acd73b4c05a057f9ddca.zip
petitboot-ce54f866b2b9e48bab73acd73b4c05a057f9ddca.tar.gz
discover: Add petitboot,tty and track available consoles
Add the NVRAM parameter petitboot,tty which sets the default console to use when booting a kernel. In load_config() construct a list of available consoles depending on the current platform. A future patch depending on firmware changes will allow this list to be constructed dynamically. Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
-rw-r--r--discover/platform-powerpc.c43
-rw-r--r--discover/platform.c10
2 files changed, 53 insertions, 0 deletions
diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c
index 1f8d27d..eb54c6d 100644
--- a/discover/platform-powerpc.c
+++ b/discover/platform-powerpc.c
@@ -59,6 +59,7 @@ static const char *known_params[] = {
"petitboot,debug?",
"petitboot,write?",
"petitboot,snapshots?",
+ "petitboot,tty",
NULL,
};
@@ -565,6 +566,10 @@ static void populate_config(struct platform_powerpc *platform,
val = get_param(platform, "petitboot,snapshots?");
if (val)
config->disable_snapshots = !strcmp(val, "false");
+
+ val = get_param(platform, "petitboot,tty");
+ if (val)
+ config->boot_tty = talloc_strdup(config, val);
}
static char *iface_config_str(void *ctx, struct interface_config *config)
@@ -732,6 +737,9 @@ static int update_config(struct platform_powerpc *platform,
val = config->allow_writes ? "true" : "false";
update_string_config(platform, "petitboot,write?", val);
+ val = config->boot_tty ?: "";
+ update_string_config(platform, "petitboot,tty", val);
+
update_network_config(platform, config);
update_bootdev_config(platform, config);
@@ -1217,6 +1225,39 @@ static void get_ipmi_network_override(struct platform_powerpc *platform,
}
}
+static void get_active_consoles(struct config *config)
+{
+ struct stat sbuf;
+ char *fsp_prop = NULL;
+
+ config->n_tty = 2;
+ config->tty_list = talloc_array(config, char *, config->n_tty);
+ if (!config->tty_list)
+ goto err;
+
+ config->tty_list[0] = talloc_asprintf(config->tty_list,
+ "/dev/hvc0 [IPMI / Serial]");
+ config->tty_list[1] = talloc_asprintf(config->tty_list,
+ "/dev/tty1 [VGA]");
+
+ fsp_prop = talloc_asprintf(config, "%sfsps", devtree_dir);
+ if (stat(fsp_prop, &sbuf) == 0) {
+ /* FSP based machines also have a separate serial console */
+ config->tty_list = talloc_realloc(config, config->tty_list,
+ char *, config->n_tty + 1);
+ if (!config->tty_list)
+ goto err;
+ config->tty_list[config->n_tty++] = talloc_asprintf(
+ config->tty_list,
+ "/dev/hvc1 [Serial]");
+ }
+
+ return;
+err:
+ config->n_tty = 0;
+ pb_log("Failed to allocate memory for tty_list\n");
+}
+
static int load_config(struct platform *p, struct config *config)
{
struct platform_powerpc *platform = to_platform_powerpc(p);
@@ -1241,6 +1282,8 @@ static int load_config(struct platform *p, struct config *config)
if (platform->ipmi)
get_ipmi_network_override(platform, config);
+ get_active_consoles(config);
+
return 0;
}
diff --git a/discover/platform.c b/discover/platform.c
index fc0930d..254da97 100644
--- a/discover/platform.c
+++ b/discover/platform.c
@@ -79,6 +79,12 @@ static void dump_config(struct config *config)
pb_log(" IPMI boot device 0x%02x%s\n", config->ipmi_bootdev,
config->ipmi_bootdev_persistent ? " (persistent)" : "");
+ pb_log(" Modifications allowed to disks: %s\n",
+ config->allow_writes ? "yes" : "no");
+
+ pb_log(" Default UI to boot on: %s\n",
+ config->boot_tty ?: "none set");
+
pb_log(" language: %s\n", config->lang ?: "");
}
@@ -117,6 +123,10 @@ void config_set_defaults(struct config *config)
config->allow_writes = true;
config->disable_snapshots = false;
+ config->n_tty = 0;
+ config->tty_list = NULL;
+ config->boot_tty = NULL;
+
config->n_autoboot_opts = 2;
config->autoboot_opts = talloc_array(config, struct autoboot_option,
config->n_autoboot_opts);
OpenPOWER on IntegriCloud