]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg: SmmReportStatusCodeLib: ReportStatusCodeLib in StandaloneMm
authorKun Qin <kun.q@outlook.com>
Thu, 17 Dec 2020 21:38:50 +0000 (13:38 -0800)
committerKun Qin <kun.q@outlook.com>
Mon, 1 Feb 2021 18:01:03 +0000 (10:01 -0800)
This change added support of StandaloneMm for ReportStatusCodeLib. It
adds a new instance of ReportStatusCodeLib for MM_STANDALONE type, and
abstracts the references of gMmst and gSmst functionalities into separate
files in order to link in proper Service Table for SMM core/drivers.

Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Dandan Bi <dandan.bi@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Signed-off-by: Kun Qin <kun.q@outlook.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.c
MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.h [new file with mode: 0644]
MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibStandaloneMm.c [new file with mode: 0644]
MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibTraditional.c [new file with mode: 0644]
MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf
MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf [new file with mode: 0644]
MdeModulePkg/MdeModulePkg.dsc

index 3a1772538cdf911e41c961f6f5c1cfc85ce5083e..fb1769db9223cd08ab13ec31beb3cbc71104a1e0 100644 (file)
@@ -1,5 +1,5 @@
 /** @file\r
-  Report Status Code Library for SMM Phase.\r
+  Report Status Code Library for MM Phase.\r
 \r
   Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
   SPDX-License-Identifier: BSD-2-Clause-Patent\r
@@ -8,7 +8,7 @@
 \r
 #include <Library/ReportStatusCodeLib.h>\r
 #include <Library/DebugLib.h>\r
-#include <Library/SmmServicesTableLib.h>\r
+#include <Library/MmServicesTableLib.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/PcdLib.h>\r
 \r
 #include <Guid/StatusCodeDataTypeId.h>\r
 #include <Guid/StatusCodeDataTypeDebug.h>\r
-#include <Protocol/SmmStatusCode.h>\r
+#include <Protocol/MmStatusCode.h>\r
 \r
-EFI_SMM_REPORT_STATUS_CODE     mReportStatusCode = NULL;\r
-EFI_SMM_STATUS_CODE_PROTOCOL   *mStatusCodeProtocol = NULL;\r
+#include "ReportStatusCodeLib.h"\r
+\r
+EFI_MM_REPORT_STATUS_CODE     mReportStatusCode = NULL;\r
+EFI_MM_STATUS_CODE_PROTOCOL   *mStatusCodeProtocol = NULL;\r
 \r
 \r
 /**\r
@@ -29,14 +31,14 @@ EFI_SMM_STATUS_CODE_PROTOCOL   *mStatusCodeProtocol = NULL;
             NULL is returned if no status code service is available.\r
 \r
 **/\r
-EFI_SMM_REPORT_STATUS_CODE\r
+EFI_MM_REPORT_STATUS_CODE\r
 InternalGetReportStatusCode (\r
   VOID\r
   )\r
 {\r
   EFI_STATUS                    Status;\r
 \r
-  Status = gSmst->SmmLocateProtocol (&gEfiSmmStatusCodeProtocolGuid, NULL, (VOID**)&mStatusCodeProtocol);\r
+  Status = InternalLocateProtocol (&gEfiMmStatusCodeProtocolGuid, NULL, (VOID**)&mStatusCodeProtocol);\r
   if (!EFI_ERROR (Status) && mStatusCodeProtocol != NULL) {\r
     return mStatusCodeProtocol->ReportStatusCode;\r
   }\r
diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.h b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLib.h
new file mode 100644 (file)
index 0000000..2820e40
--- /dev/null
@@ -0,0 +1,36 @@
+/** @file\r
+  Report Status Code Library for MM Phase.\r
+\r
+  Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#ifndef _MM_RSC_LIB_H_\r
+#define _MM_RSC_LIB_H_\r
+\r
+/**\r
+  Returns the first protocol instance that matches the given protocol.\r
+\r
+  @param[in]  Protocol          Provides the protocol to search for.\r
+  @param[in]  Registration      Optional registration key returned from\r
+                                RegisterProtocolNotify().\r
+  @param[out]  Interface        On return, a pointer to the first interface that matches Protocol and\r
+                                Registration.\r
+\r
+  @retval EFI_SUCCESS           A protocol instance matching Protocol was found and returned in\r
+                                Interface.\r
+  @retval EFI_NOT_FOUND         No protocol instances were found that match Protocol and\r
+                                Registration.\r
+  @retval EFI_INVALID_PARAMETER Interface is NULL.\r
+                                Protocol is NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+InternalLocateProtocol (\r
+  IN  EFI_GUID  *Protocol,\r
+  IN  VOID      *Registration, OPTIONAL\r
+  OUT VOID      **Interface\r
+  );\r
+\r
+#endif // _MM_RSC_LIB_H_\r
diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibStandaloneMm.c b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibStandaloneMm.c
new file mode 100644 (file)
index 0000000..a4c428d
--- /dev/null
@@ -0,0 +1,38 @@
+/** @file\r
+  Abstraction layer for MM service table used by MM ReportStatusCodeLib.\r
+\r
+  Copyright (c) Microsoft Corporation.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#include <PiMm.h>\r
+\r
+#include <Library/MmServicesTableLib.h>\r
+\r
+/**\r
+  Returns the first protocol instance that matches the given protocol.\r
+\r
+  @param[in]  Protocol          Provides the protocol to search for.\r
+  @param[in]  Registration      Optional registration key returned from\r
+                                RegisterProtocolNotify().\r
+  @param[out]  Interface        On return, a pointer to the first interface that matches Protocol and\r
+                                Registration.\r
+\r
+  @retval EFI_SUCCESS           A protocol instance matching Protocol was found and returned in\r
+                                Interface.\r
+  @retval EFI_NOT_FOUND         No protocol instances were found that match Protocol and\r
+                                Registration.\r
+  @retval EFI_INVALID_PARAMETER Interface is NULL.\r
+                                Protocol is NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+InternalLocateProtocol (\r
+  IN  EFI_GUID  *Protocol,\r
+  IN  VOID      *Registration, OPTIONAL\r
+  OUT VOID      **Interface\r
+  )\r
+{\r
+  return gMmst->MmLocateProtocol (Protocol, Registration, Interface);\r
+}\r
diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibTraditional.c b/MdeModulePkg/Library/SmmReportStatusCodeLib/ReportStatusCodeLibTraditional.c
new file mode 100644 (file)
index 0000000..603e222
--- /dev/null
@@ -0,0 +1,38 @@
+/** @file\r
+  Abstraction layer for SMM service table used by SMM ReportStatusCodeLib.\r
+\r
+  Copyright (c) Microsoft Corporation.\r
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+\r
+#include <PiMm.h>\r
+\r
+#include <Library/SmmServicesTableLib.h>\r
+\r
+/**\r
+  Returns the first protocol instance that matches the given protocol.\r
+\r
+  @param[in]  Protocol          Provides the protocol to search for.\r
+  @param[in]  Registration      Optional registration key returned from\r
+                                RegisterProtocolNotify().\r
+  @param[out]  Interface        On return, a pointer to the first interface that matches Protocol and\r
+                                Registration.\r
+\r
+  @retval EFI_SUCCESS           A protocol instance matching Protocol was found and returned in\r
+                                Interface.\r
+  @retval EFI_NOT_FOUND         No protocol instances were found that match Protocol and\r
+                                Registration.\r
+  @retval EFI_INVALID_PARAMETER Interface is NULL.\r
+                                Protocol is NULL.\r
+\r
+**/\r
+EFI_STATUS\r
+InternalLocateProtocol (\r
+  IN  EFI_GUID  *Protocol,\r
+  IN  VOID      *Registration, OPTIONAL\r
+  OUT VOID      **Interface\r
+  )\r
+{\r
+  return gSmst->SmmLocateProtocol (Protocol, Registration, Interface);\r
+}\r
index 72496bfababd972e753beb3dbc878948bd8e187f..02dce09a199d1bb456abd1295854f4561a0eb6ba 100644 (file)
@@ -28,6 +28,8 @@
 \r
 [Sources]\r
   ReportStatusCodeLib.c\r
+  ReportStatusCodeLib.h\r
+  ReportStatusCodeLibTraditional.c\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
@@ -45,7 +47,7 @@
   gEfiStatusCodeDataTypeDebugGuid               ## SOMETIMES_CONSUMES   ## UNDEFINED\r
 \r
 [Protocols]\r
-  gEfiSmmStatusCodeProtocolGuid                 ## CONSUMES\r
+  gEfiMmStatusCodeProtocolGuid                  ## CONSUMES\r
 \r
 [Pcd]\r
   gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask  ## CONSUMES\r
diff --git a/MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf b/MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf
new file mode 100644 (file)
index 0000000..866e092
--- /dev/null
@@ -0,0 +1,53 @@
+## @file\r
+#  Standalone MM report status code library.\r
+#\r
+#  Retrieve status code and report status code in MM phase.\r
+#\r
+#  Copyright (c) 2009 - 2014, Intel Corporation. All rights reserved.<BR>\r
+#  Copyright (c) Microsoft Corporation.\r
+#\r
+#  SPDX-License-Identifier: BSD-2-Clause-Patent\r
+#\r
+#\r
+##\r
+\r
+[Defines]\r
+  INF_VERSION                    = 0x00010005\r
+  BASE_NAME                      = StandaloneMmReportStatusCodeLib\r
+  FILE_GUID                      = 17C7FC8C-8C5D-497E-9C0E-C21255B30E04\r
+  MODULE_TYPE                    = MM_STANDALONE\r
+  VERSION_STRING                 = 1.0\r
+  PI_SPECIFICATION_VERSION       = 0x00010032\r
+  LIBRARY_CLASS                  = ReportStatusCodeLib|MM_STANDALONE\r
+\r
+#\r
+# The following information is for reference only and not required by the build tools.\r
+#\r
+#  VALID_ARCHITECTURES           = IA32 X64\r
+#\r
+\r
+[Sources]\r
+  ReportStatusCodeLib.c\r
+  ReportStatusCodeLib.h\r
+  ReportStatusCodeLibStandaloneMm.c\r
+\r
+[Packages]\r
+  MdePkg/MdePkg.dec\r
+  MdeModulePkg/MdeModulePkg.dec\r
+\r
+[LibraryClasses]\r
+  PcdLib\r
+  BaseMemoryLib\r
+  MmServicesTableLib\r
+  DebugLib\r
+  MemoryAllocationLib\r
+\r
+[Guids]\r
+  gEfiStatusCodeSpecificDataGuid                ## SOMETIMES_CONSUMES   ## UNDEFINED\r
+  gEfiStatusCodeDataTypeDebugGuid               ## SOMETIMES_CONSUMES   ## UNDEFINED\r
+\r
+[Protocols]\r
+  gEfiMmStatusCodeProtocolGuid                  ## CONSUMES\r
+\r
+[Pcd]\r
+  gEfiMdePkgTokenSpaceGuid.PcdReportStatusCodePropertyMask  ## CONSUMES\r
index 9afd40eeed4616725f715d2c95be66fc288e9857..200fbcc18a18fc0e7ee89216195d217c89f6414b 100644 (file)
   }\r
   MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf\r
   MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf\r
+  MdeModulePkg/Library/SmmReportStatusCodeLib/StandaloneMmReportStatusCodeLib.inf\r
   MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf\r
   MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf\r
   MdeModulePkg/Universal/LockBox/SmmLockBox/SmmLockBox.inf\r