Revision: 18834
          http://sourceforge.net/p/edk2/code/18834
Author:   vanjeff
Date:     2015-11-17 04:59:32 +0000 (Tue, 17 Nov 2015)
Log Message:
-----------
UefiCpuPkg: Add SmmCpuPlatformHookLib

Add SmmCpuPlatformHookLib that provides platform specific functions
that are used to initialize SMM and process SMIs.  A Null instance
of this library is provided that should work for most platforms.

(Sync patch r18639 from main trunk.)

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Michael Kinney <[email protected]>
Reviewed-by: Jeff Fan <[email protected]>

Revision Links:
--------------
    http://sourceforge.net/p/edk2/code/18639

Added Paths:
-----------
    branches/UDK2015/UefiCpuPkg/Include/Library/SmmCpuPlatformHookLib.h
    branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/
    
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.c
    
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.inf
    
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.uni

Added: branches/UDK2015/UefiCpuPkg/Include/Library/SmmCpuPlatformHookLib.h
===================================================================
--- branches/UDK2015/UefiCpuPkg/Include/Library/SmmCpuPlatformHookLib.h         
                (rev 0)
+++ branches/UDK2015/UefiCpuPkg/Include/Library/SmmCpuPlatformHookLib.h 
2015-11-17 04:59:32 UTC (rev 18834)
@@ -0,0 +1,109 @@
+/** @file
+  Public include file for the SMM CPU Platform Hook Library.
+
+  Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 
License
+  which accompanies this distribution.  The full text of the license may be 
found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef __SMM_CPU_PLATFORM_HOOK_LIB_H__
+#define __SMM_CPU_PLATFORM_HOOK_LIB_H__
+
+///
+/// SMM Page Size Type
+///
+typedef enum {
+    SmmPageSize4K,
+    SmmPageSize2M,
+    SmmPageSize1G,
+    MaxSmmPageSizeType
+} SMM_PAGE_SIZE_TYPE;
+
+/**
+  Checks if platform produces a valid SMI.
+
+  This function checks if platform produces a valid SMI. This function is
+  called at SMM entry to detect if this is a spurious SMI. This function
+  must be implemented in an MP safe way because it is called by multiple CPU
+  threads.
+
+  @retval TRUE              There is a valid SMI
+  @retval FALSE             There is no valid SMI
+
+**/
+BOOLEAN
+EFIAPI
+PlatformValidSmi (
+  VOID
+  );
+
+/**
+  Clears platform top level SMI status bit.
+
+  This function clears platform top level SMI status bit.
+
+  @retval TRUE              The platform top level SMI status is cleared.
+  @retval FALSE             The platform top level SMI status cannot be 
cleared.
+
+**/
+BOOLEAN
+EFIAPI
+ClearTopLevelSmiStatus (
+  VOID
+  );
+
+/**
+  Performs platform specific way of SMM BSP election.
+
+  This function performs platform specific way of SMM BSP election.
+
+  @param  IsBsp             Output parameter. TRUE: the CPU this function 
executes
+                            on is elected to be the SMM BSP. FALSE: the CPU 
this
+                            function executes on is to be SMM AP.
+
+  @retval EFI_SUCCESS       The function executes successfully.
+  @retval EFI_NOT_READY     The function does not determine whether this CPU 
should be
+                            BSP or AP. This may occur if hardware init 
sequence to
+                            enable the determination is yet to be done, or the 
function
+                            chooses not to do BSP election and will let SMM 
CPU driver to
+                            use its default BSP election process.
+  @retval EFI_DEVICE_ERROR  The function cannot determine whether this CPU 
should be
+                            BSP or AP due to hardware error.
+
+**/
+EFI_STATUS
+EFIAPI
+PlatformSmmBspElection (
+  OUT BOOLEAN     *IsBsp
+  );
+
+/**
+  Get platform page table attribute .
+
+  This function gets page table attribute of platform.
+
+  @param  Address        Input parameter. Obtain the page table entries 
attribute on this address.
+  @param  PageSize       Output parameter. The size of the page.
+  @param  NumOfPages     Output parameter. Number of page.
+  @param  PageAttribute  Output parameter. Paging Attributes (WB, UC, etc).
+
+  @retval EFI_SUCCESS      The platform page table attribute from the address 
is determined.
+  @retval EFI_UNSUPPORTED  The platform does not support getting page table 
attribute for the address.
+
+**/
+EFI_STATUS
+EFIAPI
+GetPlatformPageTableAttribute (
+  IN  UINT64                Address,
+  OUT SMM_PAGE_SIZE_TYPE    *PageSize,
+  OUT UINTN                 *NumOfPages,
+  OUT UINTN                 *PageAttribute
+  );
+
+#endif

Added: 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.c
===================================================================
--- 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.c
                           (rev 0)
+++ 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.c
   2015-11-17 04:59:32 UTC (rev 18834)
@@ -0,0 +1,108 @@
+/** @file
+SMM CPU Platform Hook NULL library instance.
+
+Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
+This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD 
License
+which accompanies this distribution.  The full text of the license may be 
found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+#include <PiSmm.h>
+#include <Library/SmmCpuPlatformHookLib.h>
+
+/**
+  Checks if platform produces a valid SMI.
+
+  This function checks if platform produces a valid SMI. This function is
+  called at SMM entry to detect if this is a spurious SMI. This function
+  must be implemented in an MP safe way because it is called by multiple CPU
+  threads.
+
+  @retval TRUE              There is a valid SMI
+  @retval FALSE             There is no valid SMI
+
+**/
+BOOLEAN
+EFIAPI
+PlatformValidSmi (
+  VOID
+  )
+{
+  return TRUE;
+}
+
+/**
+  Clears platform top level SMI status bit.
+
+  This function clears platform top level SMI status bit.
+
+  @retval TRUE              The platform top level SMI status is cleared.
+  @retval FALSE             The platform top level SMI status cannot be 
cleared.
+
+**/
+BOOLEAN
+EFIAPI
+ClearTopLevelSmiStatus (
+  VOID
+  )
+{
+  return TRUE;
+}
+
+/**
+  Performs platform specific way of SMM BSP election.
+
+  This function performs platform specific way of SMM BSP election.
+
+  @param  IsBsp             Output parameter. TRUE: the CPU this function 
executes
+                            on is elected to be the SMM BSP. FALSE: the CPU 
this
+                            function executes on is to be SMM AP.
+
+  @retval EFI_SUCCESS       The function executes successfully.
+  @retval EFI_NOT_READY     The function does not determine whether this CPU 
should be
+                            BSP or AP. This may occur if hardware init 
sequence to
+                            enable the determination is yet to be done, or the 
function
+                            chooses not to do BSP election and will let SMM 
CPU driver to
+                            use its default BSP election process.
+  @retval EFI_DEVICE_ERROR  The function cannot determine whether this CPU 
should be
+                            BSP or AP due to hardware error.
+
+**/
+EFI_STATUS
+EFIAPI
+PlatformSmmBspElection (
+  OUT BOOLEAN     *IsBsp
+  )
+{
+  return EFI_NOT_READY;
+}
+
+/**
+  Get platform page table attribute.
+
+  This function gets page table attribute of platform.
+
+  @param  Address        Input parameter. Obtain the page table entries 
attribute on this address.
+  @param  PageSize       Output parameter. The size of the page.
+  @param  NumOfPages     Output parameter. Number of page.
+  @param  PageAttribute  Output parameter. Paging Attributes (WB, UC, etc).
+
+  @retval EFI_SUCCESS      The platform page table attribute from the address 
is determined.
+  @retval EFI_UNSUPPORTED  The platform does not support getting page table 
attribute for the address.
+
+**/
+EFI_STATUS
+EFIAPI
+GetPlatformPageTableAttribute (
+  IN  UINT64                Address,
+  IN OUT SMM_PAGE_SIZE_TYPE *PageSize,
+  IN OUT UINTN              *NumOfPages,
+  IN OUT UINTN              *PageAttribute
+  )
+{
+  return EFI_UNSUPPORTED;
+}

Added: 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.inf
===================================================================
--- 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.inf
                         (rev 0)
+++ 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.inf
 2015-11-17 04:59:32 UTC (rev 18834)
@@ -0,0 +1,40 @@
+## @file
+#  SMM CPU Platform Hook NULL library instance.
+#
+#  Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>
+#  This program and the accompanying materials
+#  are licensed and made available under the terms and conditions of the BSD 
License
+#  which accompanies this distribution.  The full text of the license may be 
found at
+#  http://opensource.org/licenses/bsd-license.php
+#
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED.
+#
+##
+
+################################################################################
+#
+# Defines Section - statements that will be processed to create a Makefile.
+#
+################################################################################
+[Defines]
+  INF_VERSION                    = 0x00010005
+  BASE_NAME                      = SmmCpuPlatformHookLibNull
+  MODULE_UNI_FILE                = SmmCpuPlatformHookLibNull.uni
+  FILE_GUID                      = D6494E1B-E06F-4ab5-B64D-48B25AA9EB33
+  MODULE_TYPE                    = DXE_DRIVER
+  VERSION_STRING                 = 1.0
+  LIBRARY_CLASS                  = SmmCpuPlatformHookLib
+
+#
+# The following information is for reference only and not required by the 
build tools.
+#
+#  VALID_ARCHITECTURES           = IA32 X64
+#
+
+[Sources]
+  SmmCpuPlatformHookLibNull.c
+
+[Packages]
+  MdePkg/MdePkg.dec
+  UefiCpuPkg/UefiCpuPkg.dec

Added: 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.uni
===================================================================
--- 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.uni
                         (rev 0)
+++ 
branches/UDK2015/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.uni
 2015-11-17 04:59:32 UTC (rev 18834)
@@ -0,0 +1,37 @@
+\xFF\xFE/++++++++++++++++++\ No newline at end of file


------------------------------------------------------------------------------
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits

Reply via email to