diff options
Diffstat (limited to 'discover/platform-powerpc.c')
-rw-r--r-- | discover/platform-powerpc.c | 43 |
1 files changed, 43 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; } |