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