--- /dev/null
+/** @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