summaryrefslogtreecommitdiffstats
path: root/apphandler.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'apphandler.cpp')
-rw-r--r--apphandler.cpp42
1 files changed, 42 insertions, 0 deletions
diff --git a/apphandler.cpp b/apphandler.cpp
index abf0bd3..9d94b1b 100644
--- a/apphandler.cpp
+++ b/apphandler.cpp
@@ -252,6 +252,45 @@ finish:
return rc;
}
+ipmi_ret_t ipmi_app_get_self_test_results(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)
+{
+ ipmi_ret_t rc = IPMI_CC_OK;
+
+ // Byte 2:
+ // 55h - No error.
+ // 56h - Self Test funciton not implemented in this controller.
+ // 57h - Corrupted or inaccesssible data or devices.
+ // 58h - Fatal hardware error.
+ // FFh - reserved.
+ // all other: Device-specific 'internal failure'.
+ // Byte 3:
+ // For byte 2 = 55h, 56h, FFh: 00h
+ // For byte 2 = 58h, all other: Device-specific
+ // For byte 2 = 57h: self-test error bitfield.
+ // Note: returning 57h does not imply that all test were run.
+ // [7] 1b = Cannot access SEL device.
+ // [6] 1b = Cannot access SDR Repository.
+ // [5] 1b = Cannot access BMC FRU device.
+ // [4] 1b = IPMB signal lines do not respond.
+ // [3] 1b = SDR Repository empty.
+ // [2] 1b = Internal Use Area of BMC FRU corrupted.
+ // [1] 1b = controller update 'boot block' firmware corrupted.
+ // [0] 1b = controller operational firmware corrupted.
+
+ char selftestresults[2] = {0};
+
+ *data_len = 2;
+
+ selftestresults[0] = 0x56;
+ selftestresults[1] = 0;
+
+ memcpy(response, selftestresults, *data_len);
+
+ return rc;
+}
+
ipmi_ret_t ipmi_app_get_device_guid(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)
@@ -585,6 +624,9 @@ void register_netfn_app_functions()
printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",NETFUN_APP, IPMI_CMD_GET_DEVICE_ID);
ipmi_register_callback(NETFUN_APP, IPMI_CMD_GET_DEVICE_ID, NULL, ipmi_app_get_device_id);
+ printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",NETFUN_APP, IPMI_CMD_GET_SELF_TEST_RESULTS);
+ ipmi_register_callback(NETFUN_APP, IPMI_CMD_GET_SELF_TEST_RESULTS, NULL, ipmi_app_get_self_test_results);
+
printf("Registering NetFn:[0x%X], Cmd:[0x%X]\n",NETFUN_APP, IPMI_CMD_GET_DEVICE_GUID);
ipmi_register_callback(NETFUN_APP, IPMI_CMD_GET_DEVICE_GUID, NULL, ipmi_app_get_device_guid);
OpenPOWER on IntegriCloud