4 Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
5 Copyright (c) 2018, ARM Limited. All rights reserved.<BR>
6 This program and the accompanying materials are licensed and made available under
7 the terms and conditions of the BSD License that accompanies this distribution.
8 The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php.
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #ifndef __MM_CORE_DATA_H__
17 #define __MM_CORE_DATA_H__
19 #define MM_CORE_DATA_HOB_GUID \
20 { 0xa160bf99, 0x2aa4, 0x4d7d, { 0x99, 0x93, 0x89, 0x9c, 0xb1, 0x2d, 0xf3, 0x76 }}
22 extern EFI_GUID gMmCoreDataHobGuid
;
26 // Address pointer to MM_CORE_PRIVATE_DATA
28 EFI_PHYSICAL_ADDRESS Address
;
29 } MM_CORE_DATA_HOB_DATA
;
33 /// Define values for the communications buffer used when gEfiEventDxeDispatchGuid is
34 /// event signaled. This event is signaled by the DXE Core each time the DXE Core
35 /// dispatcher has completed its work. When this event is signaled, the MM Core
36 /// if notified, so the MM Core can dispatch MM drivers. If COMM_BUFFER_MM_DISPATCH_ERROR
37 /// is returned in the communication buffer, then an error occurred dispatching MM
38 /// Drivers. If COMM_BUFFER_MM_DISPATCH_SUCCESS is returned, then the MM Core
39 /// dispatched all the drivers it could. If COMM_BUFFER_MM_DISPATCH_RESTART is
40 /// returned, then the MM Core just dispatched the MM Driver that registered
41 /// the MM Entry Point enabling the use of MM Mode. In this case, the MM Core
42 /// should be notified again to dispatch more MM Drivers using MM Mode.
44 #define COMM_BUFFER_MM_DISPATCH_ERROR 0x00
45 #define COMM_BUFFER_MM_DISPATCH_SUCCESS 0x01
46 #define COMM_BUFFER_MM_DISPATCH_RESTART 0x02
49 /// Signature for the private structure shared between the MM IPL and the MM Core
51 #define MM_CORE_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('m', 'm', 'i', 'c')
54 /// Private structure that is used to share information between the MM IPL and
55 /// the MM Core. This structure is allocated from memory of type EfiRuntimeServicesData.
56 /// Since runtime memory types are converted to available memory when a legacy boot
57 /// is performed, the MM Core must not access any fields of this structure if a legacy
58 /// boot is performed. As a result, the MM IPL must create an event notification
59 /// for the Legacy Boot event and notify the MM Core that a legacy boot is being
60 /// performed. The MM Core can then use this information to filter accesses to
67 /// The number of MMRAM ranges passed from the MM IPL to the MM Core. The MM
68 /// Core uses these ranges of MMRAM to initialize the MM Core memory manager.
70 UINT64 MmramRangeCount
;
73 /// A table of MMRAM ranges passed from the MM IPL to the MM Core. The MM
74 /// Core uses these ranges of MMRAM to initialize the MM Core memory manager.
76 EFI_PHYSICAL_ADDRESS MmramRanges
;
79 /// The MM Foundation Entry Point. The MM Core fills in this field when the
80 /// MM Core is initialized. The MM IPL is responsbile for registering this entry
81 /// point with the MM Configuration Protocol. The MM Configuration Protocol may
82 /// not be available at the time the MM IPL and MM Core are started, so the MM IPL
83 /// sets up a protocol notification on the MM Configuration Protocol and registers
84 /// the MM Foundation Entry Point as soon as the MM Configuration Protocol is
87 EFI_PHYSICAL_ADDRESS MmEntryPoint
;
90 /// Boolean flag set to TRUE while an MMI is being processed by the MM Core.
92 BOOLEAN MmEntryPointRegistered
;
95 /// Boolean flag set to TRUE while an MMI is being processed by the MM Core.
100 /// This field is set by the MM Core then the MM Core is initialized. This field is
101 /// used by the MM Base 2 Protocol and MM Communication Protocol implementations in
104 EFI_PHYSICAL_ADDRESS Mmst
;
107 /// This field is used by the MM Communicatioon Protocol to pass a buffer into
108 /// a software MMI handler and for the software MMI handler to pass a buffer back to
109 /// the caller of the MM Communication Protocol.
111 EFI_PHYSICAL_ADDRESS CommunicationBuffer
;
114 /// This field is used by the MM Communicatioon Protocol to pass the size of a buffer,
115 /// in bytes, into a software MMI handler and for the software MMI handler to pass the
116 /// size, in bytes, of a buffer back to the caller of the MM Communication Protocol.
121 /// This field is used by the MM Communication Protocol to pass the return status from
122 /// a software MMI handler back to the caller of the MM Communication Protocol.
126 EFI_PHYSICAL_ADDRESS MmCoreImageBase
;
127 UINT64 MmCoreImageSize
;
128 EFI_PHYSICAL_ADDRESS MmCoreEntryPoint
;
130 EFI_PHYSICAL_ADDRESS StandaloneBfvAddress
;
131 } MM_CORE_PRIVATE_DATA
;