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);