Add IPMI coldReset command support
* Implement by calling dbus method for coldReset
* Optimize warmReset/coldReset code
* Be implemented with related changes in skeleton repository
Resolves openbmc/openbmc#437
Change-Id: Ia33805c73b5d345419918c467ef7b9cf6fbb246d
Signed-off-by: Nan Li <william.bjlinan@hotmail.com>
diff --git a/globalhandler.cpp b/globalhandler.cpp
index caa94bb..2c3c994 100644
--- a/globalhandler.cpp
+++ b/globalhandler.cpp
@@ -76,7 +76,8 @@
return r;
}
-int dbus_warm_reset()
+
+int dbus_reset(const char *method)
{
sd_bus_error error = SD_BUS_ERROR_NULL;
sd_bus_message *m = NULL;
@@ -100,12 +101,12 @@
* the method.
* Signatures and input arguments are provided by the arguments at the
* end.
- */
+ */
r = sd_bus_call_method(bus,
connection, /* service to contact */
control_object_name, /* object path */
control_intf_name, /* interface name */
- "warmReset", /* method name */
+ method, /* method name */
&error, /* object to return error in */
&m, /* return message on success */
NULL,
@@ -132,7 +133,7 @@
printf("Handling GLOBAL warmReset Netfn:[0x%X], Cmd:[0x%X]\n",netfn, cmd);
// TODO: call the correct dbus method for warmReset.
- dbus_warm_reset();
+ dbus_reset("warmReset");
// Status code.
ipmi_ret_t rc = IPMI_CC_OK;
@@ -140,9 +141,26 @@
return rc;
}
+ipmi_ret_t ipmi_global_cold_reset(ipmi_netfn_t netfn, ipmi_cmd_t cmd,
+ ipmi_request_t request, ipmi_response_t response,
+ ipmi_data_len_t data_len, ipmi_context_t context)
+{
+ printf("Handling GLOBAL coldReset Netfn:[0x%X], Cmd:[0x%X]\n",netfn, cmd);
+
+ // TODO: call the correct dbus method for coldReset.
+ dbus_reset("coldReset");
+
+ // Status code.
+ ipmi_ret_t rc = IPMI_CC_OK;
+ *data_len = 0;
+ return rc;
+}
void register_netfn_global_functions()
{
+ printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",NETFUN_APP, IPMI_CMD_COLD_RESET);
+ ipmi_register_callback(NETFUN_APP, IPMI_CMD_COLD_RESET, NULL, ipmi_global_cold_reset);
+
printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",NETFUN_APP, IPMI_CMD_WARM_RESET);
ipmi_register_callback(NETFUN_APP, IPMI_CMD_WARM_RESET, NULL, ipmi_global_warm_reset);