aboutsummaryrefslogtreecommitdiff
path: root/core/ipmi.c
diff options
context:
space:
mode:
Diffstat (limited to 'core/ipmi.c')
-rw-r--r--core/ipmi.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/core/ipmi.c b/core/ipmi.c
index b21a0f3..6cf435d 100644
--- a/core/ipmi.c
+++ b/core/ipmi.c
@@ -17,17 +17,43 @@
#include <stdio.h>
#include <bt.h>
#include <ipmi.h>
+#include <opal.h>
static void ipmi_cmd_done(struct ipmi_msg *msg)
{
if (msg->cc != IPMI_CC_NO_ERROR) {
prerror("IPMI: Got error response 0x%02x\n", msg->cc);
+ goto out;
}
switch (msg->netfn) {
+ case IPMI_NETFN_CHASSIS_RESPONSE:
+ break;
default:
prerror("IPMI: Invalid IPMI function code in response\n");
}
+
+out:
+ free(msg);
+}
+
+int64_t ipmi_opal_chassis_request(uint64_t request)
+{
+ struct ipmi_msg *msg = zalloc(sizeof(struct ipmi_msg));
+
+ if (!msg)
+ return OPAL_HARDWARE;
+
+ msg->cmd = request;
+ msg->netfn = IPMI_NETFN_CHASSIS_REQUEST;
+ msg->req_data = NULL;
+ msg->req_data_len = 0;
+ msg->resp_data = NULL;
+ msg->resp_data_len = 0;
+
+ prlog(PR_INFO, "IPMI: sending chassis request %llu\n", request);
+
+ return bt_add_ipmi_msg_wait(msg);
}
void ipmi_init(void)