diff --git a/ipmitool/include/ipmitool/ipmi_chassis.h b/ipmitool/include/ipmitool/ipmi_chassis.h index 8f338b4..12fa876 100644 --- a/ipmitool/include/ipmitool/ipmi_chassis.h +++ b/ipmitool/include/ipmitool/ipmi_chassis.h @@ -51,7 +51,8 @@ #define IPMI_CHASSIS_POLICY_PREVIOUS 0x1 #define IPMI_CHASSIS_POLICY_ALWAYS_OFF 0x0 -int ipmi_chassis_main(struct ipmi_intf *, int, char **); int ipmi_chassis_power_status(struct ipmi_intf * intf); +int ipmi_chassis_power_control(struct ipmi_intf * intf, uint8_t ctl); +int ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv); #endif /*IPMI_CHASSIS_H*/ diff --git a/ipmitool/lib/ipmi_chassis.c b/ipmitool/lib/ipmi_chassis.c index 54e0945..4cee265 100644 --- a/ipmitool/lib/ipmi_chassis.c +++ b/ipmitool/lib/ipmi_chassis.c @@ -42,6 +42,7 @@ #include #include #include +#include #include extern int verbose; @@ -84,17 +85,7 @@ ipmi_chassis_print_power_status(struct ipmi_intf * intf) return 0; } -static const struct valstr ipmi_chassis_power_control_vals[] = { - { 0x00, "Down/Off" }, - { 0x01, "Up/On" }, - { 0x02, "Cycle" }, - { 0x03, "Reset" }, - { 0x04, "Pulse" }, - { 0x05, "Soft" }, - { 0x00, NULL }, -}; - -static int +int ipmi_chassis_power_control(struct ipmi_intf * intf, uint8_t ctl) { struct ipmi_rs * rsp; @@ -442,16 +433,11 @@ ipmi_chassis_get_bootparam(struct ipmi_intf * intf, char * arg) } static int -ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg) +ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg, int clearcmos) { uint8_t flags[5]; int rc = 0; - if (arg == NULL) { - lprintf(LOG_ERR, "No argument supplied"); - return -1; - } - memset(flags, 0, 5); flags[0] = 0x01; flags[1] = 0x01; @@ -460,8 +446,12 @@ ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg) return -1; memset(flags, 0, 5); - if (strncmp(arg, "pxe", 3) == 0 || - strncmp(arg, "force_pxe", 9) == 0) + if (arg == NULL) + flags[1] = 0x00; + else if (strncmp(arg, "none", 4) == 0) + flags[1] = 0x00; + else if (strncmp(arg, "pxe", 3) == 0 || + strncmp(arg, "force_pxe", 9) == 0) flags[1] = 0x04; else if (strncmp(arg, "disk", 4) == 0 || strncmp(arg, "force_disk", 10) == 0) @@ -486,6 +476,9 @@ ipmi_chassis_set_bootdev(struct ipmi_intf * intf, char * arg) return -1; } + if (clearcmos) + flags[1] |= 0x80; + /* set flag valid bit */ flags[0] = 0x80; rc = ipmi_chassis_set_bootparam(intf, 5, flags, 5); @@ -650,7 +643,7 @@ ipmi_chassis_main(struct ipmi_intf * intf, int argc, char ** argv) lprintf(LOG_NOTICE, "bootparam set