diff --git a/ipmitool/lib/ipmi_chassis.c b/ipmitool/lib/ipmi_chassis.c index 9db2477..b1a9e69 100644 --- a/ipmitool/lib/ipmi_chassis.c +++ b/ipmitool/lib/ipmi_chassis.c @@ -504,19 +504,21 @@ ipmi_chassis_get_bootparam(struct ipmi_intf * intf, char * arg) } static int -ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg, int clearcmos) +ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg, uint8_t *iflags) { uint8_t flags[5]; int rc = 0; int use_progress = 1; - /* set set-in-progress flag */ - memset(flags, 0, 5); - flags[0] = 0x01; - rc = ipmi_chassis_set_bootparam(intf, - IPMI_CHASSIS_BOOTPARAM_SET_IN_PROGRESS, flags, 1); - if (rc < 0) - use_progress = 0; + if (use_progress) { + /* set set-in-progress flag */ + memset(flags, 0, 5); + flags[0] = 0x01; + rc = ipmi_chassis_set_bootparam(intf, + IPMI_CHASSIS_BOOTPARAM_SET_IN_PROGRESS, flags, 1); + if (rc < 0) + use_progress = 0; + } memset(flags, 0, 5); flags[0] = 0x01; @@ -535,7 +537,11 @@ ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg, int clearcmos) return -1; } - memset(flags, 0, 5); + if (iflags == NULL) + memset(flags, 0, 5); + else + memcpy(flags, iflags, sizeof (flags)); + if (arg == NULL) flags[1] = 0x00; else if (strncmp(arg, "none", 4) == 0) @@ -573,11 +579,9 @@ ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg, int clearcmos) return -1; } - if (clearcmos) - flags[1] |= 0x80; - /* set flag valid bit */ - flags[0] = 0x80; + flags[0] |= 0x80; + rc = ipmi_chassis_set_bootparam(intf, IPMI_CHASSIS_BOOTPARAM_BOOT_FLAGS, flags, 5); if (rc == 0) { @@ -697,7 +701,7 @@ ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv) int rc = 0; if ((argc == 0) || (strncmp(argv[0], "help", 4) == 0)) { - lprintf(LOG_NOTICE, "Chassis Commands: status, power, identify, policy, restart_cause, poh, bootdev, selftest"); + lprintf(LOG_NOTICE, "Chassis Commands: status, power, identify, policy, restart_cause, poh, bootdev, bootparam, selftest"); } else if (strncmp(argv[0], "status", 6) == 0) { rc = ipmi_chassis_status(intf); @@ -798,7 +802,7 @@ ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv) lprintf(LOG_NOTICE, "bootparam set