- uint8_t next_bootdev, default_bootdev;
- bool next_valid, default_valid;
- int rc;
-
- rc = read_bootdev_sysparam("next-boot-device", &next_bootdev);
- next_valid = rc == 0;
-
- rc = read_bootdev_sysparam("default-boot-device", &default_bootdev);
- default_valid = rc == 0;
-
- /* nothing valid? no need to change the config */
- if (!next_valid && !default_valid)
- return;
-
- if (!next_valid)
- next_bootdev = default_bootdev;
-
- switch (next_bootdev) {
- case IPMI_BOOTDEV_NONE:
- return;
- case IPMI_BOOTDEV_DISK:
- set_exclusive_devtype(config, DEVICE_TYPE_DISK);
- break;
- case IPMI_BOOTDEV_NETWORK:
- set_exclusive_devtype(config, DEVICE_TYPE_NETWORK);
- break;
- case IPMI_BOOTDEV_CDROM:
- set_exclusive_devtype(config, DEVICE_TYPE_OPTICAL);
- break;
- case IPMI_BOOTDEV_SETUP:
- config->autoboot_enabled = false;
- break;
- case IPMI_BOOTDEV_SAFE:
- config->autoboot_enabled = false;
- config->safe_mode = true;
- break;
+ struct stat sbuf;
+ char *fsp_prop = NULL;
+
+ config->n_consoles = 2;
+ config->consoles = talloc_array(config, char *, config->n_consoles);
+ if (!config->consoles)
+ goto err;
+
+ config->consoles[0] = talloc_asprintf(config->consoles,
+ "/dev/hvc0 [IPMI / Serial]");
+ config->consoles[1] = talloc_asprintf(config->consoles,
+ "/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->consoles = talloc_realloc(config, config->consoles,
+ char *, config->n_consoles + 1);
+ if (!config->consoles)
+ goto err;
+ config->consoles[config->n_consoles++] = talloc_asprintf(
+ config->consoles,
+ "/dev/hvc1 [Serial]");