--- /dev/null
+/** @file\r
+SMM CPU Platform Hook library instance for QEMU.\r
+\r
+Copyright (c) 2020, Red Hat, Inc.\r
+Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
+SPDX-License-Identifier: BSD-2-Clause-Patent\r
+\r
+**/\r
+#include <PiSmm.h>\r
+#include <Library/SmmCpuPlatformHookLib.h>\r
+\r
+/**\r
+ Checks if platform produces a valid SMI.\r
+\r
+ This function checks if platform produces a valid SMI. This function is\r
+ called at SMM entry to detect if this is a spurious SMI. This function\r
+ must be implemented in an MP safe way because it is called by multiple CPU\r
+ threads.\r
+\r
+ @retval TRUE There is a valid SMI\r
+ @retval FALSE There is no valid SMI\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+PlatformValidSmi (\r
+ VOID\r
+ )\r
+{\r
+ return TRUE;\r
+}\r
+\r
+/**\r
+ Clears platform top level SMI status bit.\r
+\r
+ This function clears platform top level SMI status bit.\r
+\r
+ @retval TRUE The platform top level SMI status is cleared.\r
+ @retval FALSE The platform top level SMI status cannot be\r
+ cleared.\r
+\r
+**/\r
+BOOLEAN\r
+EFIAPI\r
+ClearTopLevelSmiStatus (\r
+ VOID\r
+ )\r
+{\r
+ return TRUE;\r
+}\r
+\r
+/**\r
+ Performs platform specific way of SMM BSP election.\r
+\r
+ This function performs platform specific way of SMM BSP election.\r
+\r
+ @param IsBsp Output parameter. TRUE: the CPU this function\r
+ executes on is elected to be the SMM BSP. FALSE:\r
+ the CPU this function executes on is to be SMM AP.\r
+\r
+ @retval EFI_SUCCESS The function executes successfully.\r
+ @retval EFI_NOT_READY The function does not determine whether this CPU\r
+ should be BSP or AP. This may occur if hardware\r
+ init sequence to enable the determination is yet to\r
+ be done, or the function chooses not to do BSP\r
+ election and will let SMM CPU driver to use its\r
+ default BSP election process.\r
+ @retval EFI_DEVICE_ERROR The function cannot determine whether this CPU\r
+ should be BSP or AP due to hardware error.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+PlatformSmmBspElection (\r
+ OUT BOOLEAN *IsBsp\r
+ )\r
+{\r
+ return EFI_NOT_READY;\r
+}\r
+\r
+/**\r
+ Get platform page table attribute.\r
+\r
+ This function gets page table attribute of platform.\r
+\r
+ @param Address Input parameter. Obtain the page table entries\r
+ attribute on this address.\r
+ @param PageSize Output parameter. The size of the page.\r
+ @param NumOfPages Output parameter. Number of page.\r
+ @param PageAttribute Output parameter. Paging Attributes (WB, UC, etc).\r
+\r
+ @retval EFI_SUCCESS The platform page table attribute from the address\r
+ is determined.\r
+ @retval EFI_UNSUPPORTED The platform does not support getting page table\r
+ attribute for the address.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+GetPlatformPageTableAttribute (\r
+ IN UINT64 Address,\r
+ IN OUT SMM_PAGE_SIZE_TYPE *PageSize,\r
+ IN OUT UINTN *NumOfPages,\r
+ IN OUT UINTN *PageAttribute\r
+ )\r
+{\r
+ return EFI_UNSUPPORTED;\r
+}\r
--- /dev/null
+## @file\r
+# SMM CPU Platform Hook library instance for QEMU.\r
+#\r
+# Copyright (c) 2020, Red Hat, Inc.\r
+# Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
+# SPDX-License-Identifier: BSD-2-Clause-Patent\r
+##\r
+\r
+[Defines]\r
+ INF_VERSION = 1.29\r
+ BASE_NAME = SmmCpuPlatformHookLibQemu\r
+ FILE_GUID = 154D6D26-54B8-45BC-BA3A-CBAA20C02A6A\r
+ MODULE_TYPE = DXE_DRIVER\r
+ VERSION_STRING = 1.0\r
+ LIBRARY_CLASS = SmmCpuPlatformHookLib\r
+\r
+#\r
+# The following information is for reference only and not required by the build\r
+# tools.\r
+#\r
+# VALID_ARCHITECTURES = IA32 X64\r
+#\r
+\r
+[Sources]\r
+ SmmCpuPlatformHookLibQemu.c\r
+\r
+[Packages]\r
+ MdePkg/MdePkg.dec\r
+ UefiCpuPkg/UefiCpuPkg.dec\r