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.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Michael Kinney <[email protected]>
---
 UefiCpuPkg/Include/Library/SmmCpuPlatformHookLib.h | 109 +++++++++++++++++++++
 .../SmmCpuPlatformHookLibNull.c                    | 108 ++++++++++++++++++++
 .../SmmCpuPlatformHookLibNull.inf                  |  40 ++++++++
 .../SmmCpuPlatformHookLibNull.uni                  | Bin 0 -> 1606 bytes
 4 files changed, 257 insertions(+)
 create mode 100644 UefiCpuPkg/Include/Library/SmmCpuPlatformHookLib.h
 create mode 100644 
UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.c
 create mode 100644 
UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.inf
 create mode 100644 
UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.uni

diff --git a/UefiCpuPkg/Include/Library/SmmCpuPlatformHookLib.h 
b/UefiCpuPkg/Include/Library/SmmCpuPlatformHookLib.h
new file mode 100644
index 0000000..4633d77
--- /dev/null
+++ b/UefiCpuPkg/Include/Library/SmmCpuPlatformHookLib.h
@@ -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   
diff --git 
a/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.c 
b/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.c
new file mode 100644
index 0000000..7033c51
--- /dev/null
+++ b/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.c
@@ -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;
+}
diff --git 
a/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.inf 
b/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.inf
new file mode 100644
index 0000000..a04a8f2
--- /dev/null
+++ b/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.inf
@@ -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
diff --git 
a/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.uni 
b/UefiCpuPkg/Library/SmmCpuPlatformHookLibNull/SmmCpuPlatformHookLibNull.uni
new file mode 100644
index 
0000000000000000000000000000000000000000..68710e968cc9994bafb908622763714d0c666317
GIT binary patch
literal 1606
zcmc(fPjAye5XI+=#CKSw7eH+SNN_+1ku(M@N@FFC3Mb_JX=;(im6I0w<$>Q@yWXS<
z2M!2X-ksf@ee>qc*uQ>utYeP%36Hb4c5b;XZEg?k0lPXI*(V-n$ClWbIpI9B4W5OS
zcFE2Mtirxwo#JuA<M7FC!g<Df%R0A}t+|ykPr+|D5kjP6P_FPU@m|;k-p(H3{h0Z=
zJ>_|cbyTmO*$X?wjzQdjxWpDh35G^-%&}I)a@OTs9szspS94g+*}Y+$;rZHnHncZ;
z*rhPa@pj;s;4XX&<*%G(%o{xBem#YCfi_qE?AB+$;N;S?QoI~%30lZrO6j(glS0x<
zoC3aX&*}&_*s4^9%Bq*MYtKU1fr)fcjl}wnrI?9t-sq##f_jE~J*wVkeX_$PaQ*JJ
zm@*1?H`|<;LX;YnUW%pKE9(h7x9j3ex{CifCsmEa`UhV3S?wxQsj1$Y)c1>81994H
zDXUJ}P>WZ-qt#=Ty7Di*)@|}Hsc7e(`fGM3aG%k2yV2XAT<``>f|c?`MDR-Jq=CI>
z?D{V#MpcKdnp1XTdTopqd9BBMJ$>vUK6ePA4l%tQ;W6^a11$Bl#ul@1h1z27`L$Mu
zTkOs_7wW)AbasZ<&@($_KL%A810Q|JO5C-lm?^&UQPj%o9lnbGh4~{VVy<s7s-sj{
zME1GC3Ft9eBy^Ty_V@k=^e^go?$Y$2>75l7(*H=>eFbH}ef@7DR$cP0PP!<S;`gWL
wfJ*9HSWx|pQN5>rI08#7Ta5qWkJtLkjMNJwa#5cojsE+x`d=Bf(MlEi4Mtz}5C8xG

literal 0
HcmV?d00001

-- 
1.9.5.msysgit.1

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to