summaryrefslogtreecommitdiff
path: root/src/host_commands.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/host_commands.c')
-rw-r--r--src/host_commands.c101
1 files changed, 101 insertions, 0 deletions
diff --git a/src/host_commands.c b/src/host_commands.c
new file mode 100644
index 0000000..d832ef8
--- /dev/null
+++ b/src/host_commands.c
@@ -0,0 +1,101 @@
+#include <stdio.h>
+#include <stdbool.h>
+
+#include "host_commands.h"
+
+static const string_quadruple_t boot_override_type_dbus = {
+ "xyz.openbmc_project.Settings",
+ "/xyz/openbmc_project/control/host0/boot",
+ "xyz.openbmc_project.Control.Boot.Type",
+ "BootType"};
+
+static const string_quadruple_t boot_override_mode_dbus = {
+ "xyz.openbmc_project.Settings",
+ "/xyz/openbmc_project/control/host0/boot",
+ "xyz.openbmc_project.Control.Boot.Mode",
+ "BootMode"};
+
+static const string_quadruple_t boot_override_source_dbus = {
+ "xyz.openbmc_project.Settings",
+ "/xyz/openbmc_project/control/host0/boot",
+ "xyz.openbmc_project.Control.Boot.Source",
+ "BootSource"};
+
+static const string_quadruple_t boot_override_enable_dbus = {
+ "xyz.openbmc_project.Settings",
+ "/xyz/openbmc_project/control/host0/boot",
+ "xyz.openbmc_project.Object.Enable",
+ "Enabled"};
+
+static const string_quadruple_t boot_override_once_dbus = {
+ "xyz.openbmc_project.Settings",
+ "/xyz/openbmc_project/control/host0/boot/one_time",
+ "xyz.openbmc_project.Object.Enable",
+ "Enabled"};
+
+typedef enum
+{
+ HOST_UNKNOWN=-1,
+ HOST_CD,
+ HOST_USB,
+ HOST_BOOT_OVERRIDE,
+ HOST_BOOT_NO_OVERRIDE,
+ HOST_BOOT_REGULAR,
+ HOST_BOOT_BIOS,
+ HOST_BOOT_SAFE,
+ HOST_ONE_TIME,
+ HOST_CONTINOUS,
+ HOST_LEGACY,
+ HOST_UEFI
+}host_command_t;
+
+static universal_command_t host_commands[] = {
+ { "cd", HOST_CD, "Boot from virtual CD-ROM"},
+ { "usb", HOST_USB, "Boot from virtual USB drive"},
+ { "override", HOST_BOOT_OVERRIDE, "Override host chosen boot options"},
+ { "no-override", HOST_BOOT_NO_OVERRIDE, "Don't override host chosen boot options"},
+ { "regular", HOST_BOOT_REGULAR, "Regular boot type"},
+ { "bios", HOST_BOOT_BIOS, "Boot into BIOS"},
+ { "safe", HOST_BOOT_SAFE, "Boot in safe mode"},
+ { "override-once", HOST_ONE_TIME, "Override only next boot"},
+ { "override-always", HOST_CONTINOUS, "Override always"},
+ { "legacy", HOST_LEGACY, "Legacy type boot"},
+ { "uefi", HOST_UEFI, "UEFI boot"},
+ { NULL, 0, NULL }
+};
+
+static const command_dbus_path_t host_command_paths[] = {
+ { HOST_CD, &boot_override_source_dbus },
+ { HOST_USB, &boot_override_source_dbus },
+ { HOST_BOOT_OVERRIDE, &boot_override_enable_dbus },
+ { HOST_BOOT_NO_OVERRIDE, &boot_override_enable_dbus },
+ { HOST_BOOT_REGULAR, &boot_override_mode_dbus },
+ { HOST_BOOT_BIOS, &boot_override_mode_dbus },
+ { HOST_BOOT_SAFE, &boot_override_mode_dbus },
+ { HOST_ONE_TIME, &boot_override_once_dbus },
+ { HOST_CONTINOUS, &boot_override_once_dbus },
+ { HOST_LEGACY, &boot_override_type_dbus },
+ { HOST_UEFI, &boot_override_type_dbus },
+ { 0, NULL }
+};
+
+static const command_dbus_member_t host_command_values[] = {
+ { HOST_CD, { .type="s", .string="xyz.openbmc_project.Control.Boot.Source.Sources.ExternalMedia"}},
+ { HOST_USB, { .type="s", .string="xyz.openbmc_project.Control.Boot.Source.Sources.RemovableMedia"}},
+ { HOST_BOOT_OVERRIDE, { .type="b", .boolean=true}},
+ { HOST_BOOT_NO_OVERRIDE, { .type="b", .boolean=false}},
+ { HOST_BOOT_REGULAR, { .type="s", .string="xyz.openbmc_project.Control.Boot.Mode.Modes.Regular"}},
+ { HOST_BOOT_BIOS, { .type="s", .string="xyz.openbmc_project.Control.Boot.Mode.Modes.Setup"}},
+ { HOST_BOOT_SAFE,{ .type="s", .string="xyz.openbmc_project.Control.Boot.Mode.Modes.Safe"}},
+ { HOST_ONE_TIME, { .type="b", .boolean=true}},
+ { HOST_CONTINOUS, { .type="b", .boolean=false}},
+ { HOST_LEGACY, { .type="s", .string="xyz.openbmc_project.Control.Boot.Type.Types.Legacy"} },
+ { HOST_UEFI, { .type="s", .string="xyz.openbmc_project.Control.Boot.Type.Types.EFI"} },
+ { 0, {.type=NULL, .integer=0}}
+};
+
+int com_boot( char *arg )
+{
+ //if(strcmp(arg, "status")==0)return power_status();
+ return com_dbus_property(arg, host_commands, host_command_paths, host_command_values);
+}