--- /dev/null
+/** @file\r
+ Implementation of Ipmi Library for SMM.\r
+\r
+ Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
+ This program and the accompanying materials\r
+ are licensed and made available under the terms and conditions of the BSD License\r
+ which accompanies this distribution. The full text of the license may be found at\r
+ http://opensource.org/licenses/bsd-license.php.\r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+\r
+**/\r
+\r
+#include <PiSmm.h>\r
+#include <Protocol/IpmiProtocol.h>\r
+#include <Library/IpmiLib.h>\r
+#include <Library/SmmServicesTableLib.h>\r
+#include <Library/DebugLib.h>\r
+\r
+IPMI_PROTOCOL *mIpmiProtocol = NULL;\r
+\r
+/**\r
+ This service enables submitting commands via Ipmi.\r
+\r
+ @param[in] NetFunction Net function of the command.\r
+ @param[in] Command IPMI Command.\r
+ @param[in] RequestData Command Request Data.\r
+ @param[in] RequestDataSize Size of Command Request Data.\r
+ @param[out] ResponseData Command Response Data. The completion code is the first byte of response data.\r
+ @param[in, out] ResponseDataSize Size of Command Response Data.\r
+\r
+ @retval EFI_SUCCESS The command byte stream was successfully submit to the device and a response was successfully received.\r
+ @retval EFI_NOT_FOUND The command was not successfully sent to the device or a response was not successfully received from the device.\r
+ @retval EFI_NOT_READY Ipmi Device is not ready for Ipmi command access.\r
+ @retval EFI_DEVICE_ERROR Ipmi Device hardware error.\r
+ @retval EFI_TIMEOUT The command time out.\r
+ @retval EFI_UNSUPPORTED The command was not successfully sent to the device.\r
+ @retval EFI_OUT_OF_RESOURCES The resource allcation is out of resource or data size error.\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+IpmiSubmitCommand (\r
+ IN UINT8 NetFunction,\r
+ IN UINT8 Command,\r
+ IN UINT8 *RequestData,\r
+ IN UINT32 RequestDataSize,\r
+ OUT UINT8 *ResponseData,\r
+ IN OUT UINT32 *ResponseDataSize\r
+ )\r
+{\r
+ EFI_STATUS Status;\r
+\r
+ if (mIpmiProtocol == NULL) {\r
+ Status = gSmst->SmmLocateProtocol (\r
+ &gSmmIpmiProtocolGuid,\r
+ NULL,\r
+ (VOID **) &mIpmiProtocol\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ //\r
+ // Smm Ipmi Protocol is not installed. So, IPMI device is not present.\r
+ //\r
+ DEBUG ((EFI_D_ERROR, "IpmiSubmitCommand for SMM Status - %r\n", Status));\r
+ return EFI_NOT_FOUND;\r
+ }\r
+ }\r
+\r
+ Status = mIpmiProtocol->IpmiSubmitCommand (\r
+ mIpmiProtocol,\r
+ NetFunction,\r
+ Command,\r
+ RequestData,\r
+ RequestDataSize,\r
+ ResponseData,\r
+ ResponseDataSize\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+ return EFI_SUCCESS;\r
+}\r
--- /dev/null
+## @file\r
+# Instance of SMM IPMI Library.\r
+#\r
+# Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
+#\r
+# This program and the accompanying materials\r
+# are licensed and made available under the terms and conditions of the BSD License\r
+# which accompanies this distribution. The full text of the license may be found at\r
+# http://opensource.org/licenses/bsd-license.php.\r
+# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
+#\r
+#\r
+##\r
+\r
+[Defines]\r
+ INF_VERSION = 0x00010005\r
+ BASE_NAME = SmmIpmiLibSmmIpmiProtocol\r
+ FILE_GUID = B422FB70-E835-448D-A921-EBA460E105B6\r
+ MODULE_TYPE = DXE_SMM_DRIVER\r
+ VERSION_STRING = 1.0\r
+ LIBRARY_CLASS = IpmiLib|DXE_SMM_DRIVER SMM_CORE\r
+\r
+#\r
+# VALID_ARCHITECTURES = IA32 X64\r
+#\r
+\r
+[Sources]\r
+ SmmIpmiLibSmmIpmiProtocol.c\r
+\r
+[Packages]\r
+ MdePkg/MdePkg.dec\r
+ MdeModulePkg/MdeModulePkg.dec\r
+\r
+[LibraryClasses]\r
+ DebugLib\r
+ SmmServicesTableLib\r
+\r
+[Protocols]\r
+ gSmmIpmiProtocolGuid ## SOMETIMES_CONSUMES\r