[Skiboot] [PATCH 4/5] ipmi: Message Linux to perform graceful shutdown
Joel Stanley
joel at jms.id.au
Fri Jan 30 11:31:50 AEDT 2015
This sends the previously unused OPAL_MSG_SHUTDOWN using opal_queue_msg
to initiate a graceful shutdown.
The message provides a single parameter indicating weather the shutdown
is will result in a power-off, or a reboot.
Signed-off-by: Joel Stanley <joel at jms.id.au>
---
hw/ipmi/ipmi-sel.c | 22 ++++++++++++++++++++++
include/opal.h | 2 +-
2 files changed, 23 insertions(+), 1 deletion(-)
diff --git a/hw/ipmi/ipmi-sel.c b/hw/ipmi/ipmi-sel.c
index 301e559..291f279 100644
--- a/hw/ipmi/ipmi-sel.c
+++ b/hw/ipmi/ipmi-sel.c
@@ -21,6 +21,7 @@
#include <lock.h>
#include <errorlog.h>
#include <pel.h>
+#include <opal-msg.h>
/* OEM SEL fields */
#define SEL_OEM_ID_0 0x55
@@ -37,6 +38,9 @@
#define CMD_AMI_POWER 0x04
#define CMD_AMI_PNOR_ACCESS 0x07
+#define SOFT_OFF 0x00
+#define SOFT_REBOOT 0x01
+
struct oem_sel {
/* SEL header */
uint8_t id[2];
@@ -176,6 +180,23 @@ int ipmi_elog_commit(struct errorlog *elog_buf)
return 0;
}
+static void sel_power(uint8_t power)
+{
+ switch (power) {
+ case SOFT_OFF:
+ prlog(PR_NOTICE, "IPMI: soft shutdown requested\n");
+ opal_queue_msg(OPAL_MSG_SHUTDOWN, NULL, NULL, SOFT_OFF);
+ break;
+ case SOFT_REBOOT:
+ prlog(PR_NOTICE, "IPMI: soft reboot rqeuested\n");
+ opal_queue_msg(OPAL_MSG_SHUTDOWN, NULL, NULL, SOFT_REBOOT);
+ break;
+ default:
+ prlog(PR_WARNING, "IPMI: requested bad power state: %02x\n",
+ power);
+ }
+}
+
static void dump_sel(struct oem_sel *sel)
{
const int level = PR_DEBUG;
@@ -224,6 +245,7 @@ void ipmi_parse_sel(struct ipmi_msg *msg)
switch (sel.cmd) {
case CMD_AMI_POWER:
+ sel_power(sel.data[0]);
break;
case CMD_AMI_PNOR_ACCESS:
break;
diff --git a/include/opal.h b/include/opal.h
index 6c9b13a..679a0d9 100644
--- a/include/opal.h
+++ b/include/opal.h
@@ -395,7 +395,7 @@ enum OpalMessageType {
*/
OPAL_MSG_MEM_ERR,
OPAL_MSG_EPOW,
- OPAL_MSG_SHUTDOWN,
+ OPAL_MSG_SHUTDOWN, /* params[0] = 1 reboot, 0 shutdown */
OPAL_MSG_HMI_EVT,
OPAL_MSG_DPO,
OPAL_MSG_TYPE_MAX,
--
2.1.4
More information about the Skiboot
mailing list