diff options
Diffstat (limited to 'core/ipmi.c')
-rw-r--r-- | core/ipmi.c | 26 |
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) |