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
+ Copyright (c) 2009 - 2018, Intel Corporation. All rights reserved.<BR>\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
\r
**/\r
\r
#ifndef _PI_SMM_CORE_PRIVATE_DATA_H_\r
#define _PI_SMM_CORE_PRIVATE_DATA_H_\r
\r
+///\r
+/// Define values for the communications buffer used when gEfiEventDxeDispatchGuid is\r
+/// event signaled. This event is signaled by the DXE Core each time the DXE Core\r
+/// dispatcher has completed its work. When this event is signaled, the SMM Core\r
+/// if notified, so the SMM Core can dispatch SMM drivers. If COMM_BUFFER_SMM_DISPATCH_ERROR\r
+/// is returned in the communication buffer, then an error occurred dispatching SMM\r
+/// Drivers. If COMM_BUFFER_SMM_DISPATCH_SUCCESS is returned, then the SMM Core\r
+/// dispatched all the drivers it could. If COMM_BUFFER_SMM_DISPATCH_RESTART is\r
+/// returned, then the SMM Core just dispatched the SMM Driver that registered\r
+/// the SMM Entry Point enabling the use of SMM Mode. In this case, the SMM Core\r
+/// should be notified again to dispatch more SMM Drivers using SMM Mode.\r
+///\r
+#define COMM_BUFFER_SMM_DISPATCH_ERROR 0x00\r
+#define COMM_BUFFER_SMM_DISPATCH_SUCCESS 0x01\r
+#define COMM_BUFFER_SMM_DISPATCH_RESTART 0x02\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
+/// 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
+/// Since runtime memory types are converted to available memory when a legacy boot\r
+/// is performed, the SMM Core must not 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
+ 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
+ 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
+ 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
+ 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
+ /// The SMM Foundation Entry Point. The SMM Core fills in this field when the\r
+ /// SMM Core is initialized. The SMM IPL is responsible 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
+ /// 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
+ 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
+ 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
+ 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
+ /// the SMM IPL.\r
///\r
- EFI_SMM_SYSTEM_TABLE2 *Smst;\r
+ EFI_SMM_SYSTEM_TABLE2 *Smst;\r
\r
///\r
- /// This field is used by the SMM Communicatioon Protocol to pass a buffer into \r
+ /// This field is used by the SMM Communication 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
+ /// the caller of the SMM Communication Protocol.\r
///\r
- VOID *CommunicationBuffer;\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
+ /// This field is used by the SMM Communication 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
+ 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
+ EFI_STATUS ReturnStatus;\r
+\r
+ EFI_PHYSICAL_ADDRESS PiSmmCoreImageBase;\r
+ UINT64 PiSmmCoreImageSize;\r
+ EFI_PHYSICAL_ADDRESS PiSmmCoreEntryPoint;\r
} SMM_CORE_PRIVATE_DATA;\r
\r
#endif\r