]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Core/PiSmmCore/PiSmmCorePrivateData.h
Add PI SMM IPL and PI SMM Core
[mirror_edk2.git] / MdeModulePkg / Core / PiSmmCore / PiSmmCorePrivateData.h
diff --git a/MdeModulePkg/Core/PiSmmCore/PiSmmCorePrivateData.h b/MdeModulePkg/Core/PiSmmCore/PiSmmCorePrivateData.h
new file mode 100644 (file)
index 0000000..ce00701
--- /dev/null
@@ -0,0 +1,105 @@
+/** @file\r
+  The internal header file that declared a data structure that is shared\r
+  between the SMM IPL and the SMM Core.\r
+\r
+  Copyright (c) 2009 - 2010, Intel Corporation.  All rights reserved.<BR>\r
+  This program and the accompanying materials are licensed and made available \r
+  under the terms and conditions of the BSD License which accompanies this \r
+  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
+#ifndef _PI_SMM_CORE_PRIVATE_DATA_H_\r
+#define _PI_SMM_CORE_PRIVATE_DATA_H_\r
+\r
+///\r
+/// Signature for the private structure shared between the SMM IPL and the SMM Core\r
+///\r
+#define SMM_CORE_PRIVATE_DATA_SIGNATURE  SIGNATURE_32 ('s', 'm', 'm', 'c')\r
+\r
+///\r
+/// Private structure that is used to share information between the SMM IPL and \r
+/// the SMM Core.  This structure is allocated from memory of type EfiRuntimeServicesData.\r
+/// Since runtime memory types are converted to available memory when a legacy boot \r
+/// is performed, the SMM Core must access any fields of this structure if a legacy \r
+/// boot is performed.  As a result, the SMM IPL must create an event notification \r
+/// for the Legacy Boot event and notify the SMM Core that a legacy boot is being \r
+/// performed.  The SMM Core can then use this information to filter accesses to \r
+/// thos structure.\r
+///\r
+typedef struct {\r
+  UINTN                           Signature;\r
+\r
+  ///\r
+  /// The ImageHandle passed into the entry point of the SMM IPL.  This ImageHandle\r
+  /// is used by the SMM Core to fill in the ParentImageHandle field of the Loaded\r
+  /// Image Protocol for each SMM Driver that is dispatched by the SMM Core.\r
+  ///\r
+  EFI_HANDLE                      SmmIplImageHandle;\r
+\r
+  ///\r
+  /// The number of SMRAM ranges passed from the SMM IPL to the SMM Core.  The SMM\r
+  /// Core uses these ranges of SMRAM to initialize the SMM Core memory manager.\r
+  ///\r
+  UINTN                           SmramRangeCount;\r
+\r
+  ///\r
+  /// A table of SMRAM ranges passed from the SMM IPL to the SMM Core.  The SMM\r
+  /// Core uses these ranges of SMRAM to initialize the SMM Core memory manager.\r
+  ///\r
+  EFI_SMRAM_DESCRIPTOR            *SmramRanges;\r
+\r
+  ///\r
+  /// The SMM Foundation Entry Point.  The SMM Core fills in this field when the \r
+  /// SMM Core is initialized.  The SMM IPL is responsbile for registering this entry \r
+  /// point with the SMM Configuration Protocol.  The SMM Configuration Protocol may \r
+  /// not be available at the time the SMM IPL and SMM Core are started, so the SMM IPL\r
+  /// sets up a protocol notification on the SMM Configuration Protocol and registers \r
+  /// the SMM Foundation Entry Point as soon as the SMM Configuration Protocol is \r
+  /// available.\r
+  ///\r
+  EFI_SMM_ENTRY_POINT             SmmEntryPoint;\r
+  \r
+  ///\r
+  /// Boolean flag set to TRUE while an SMI is being processed by the SMM Core.\r
+  /// \r
+  BOOLEAN                         SmmEntryPointRegistered;\r
+\r
+  ///\r
+  /// Boolean flag set to TRUE while an SMI is being processed by the SMM Core.\r
+  /// \r
+  BOOLEAN                         InSmm;\r
+\r
+  ///\r
+  /// This field is set by the SMM Core then the SMM Core is initialized.  This field is\r
+  /// used by the SMM Base 2 Protocol and SMM Communication Protocol implementations in\r
+  /// the SMM IPL.  \r
+  ///\r
+  EFI_SMM_SYSTEM_TABLE2           *Smst;\r
+\r
+  ///\r
+  /// This field is used by the SMM Communicatioon Protocol to pass a buffer into \r
+  /// a software SMI handler and for the software SMI handler to pass a buffer back to\r
+  /// the caller of the SMM Communication Protocol.  \r
+  ///\r
+  VOID                            *CommunicationBuffer;\r
+\r
+  ///\r
+  /// This field is used by the SMM Communicatioon Protocol to pass the size of a buffer,\r
+  /// in bytes, into a software SMI handler and for the software SMI handler to pass the \r
+  /// size, in bytes, of a buffer back to the caller of the SMM Communication Protocol.\r
+  ///\r
+  UINTN                           *BufferSize;\r
+\r
+  ///\r
+  /// This field is used by the SMM Communication Protocol to pass the return status from\r
+  /// a software SMI handler back to the caller of the SMM Communication Protocol.\r
+  ///\r
+  EFI_STATUS                      ReturnStatus;\r
+} SMM_CORE_PRIVATE_DATA;\r
+\r
+#endif\r