[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