StandaloneMmPkg/MemoryAllocationLib: Add MM memory allocation library.
[mirror_edk2.git] / StandaloneMmPkg / Include / Guid / MmCoreData.h
1 /** @file
2 MM Core data.
3
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.
10
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.
13
14 **/
15
16 #ifndef __MM_CORE_DATA_H__
17 #define __MM_CORE_DATA_H__
18
19 #define MM_CORE_DATA_HOB_GUID \
20 { 0xa160bf99, 0x2aa4, 0x4d7d, { 0x99, 0x93, 0x89, 0x9c, 0xb1, 0x2d, 0xf3, 0x76 }}
21
22 extern EFI_GUID gMmCoreDataHobGuid;
23
24 typedef struct {
25 //
26 // Address pointer to MM_CORE_PRIVATE_DATA
27 //
28 EFI_PHYSICAL_ADDRESS Address;
29 } MM_CORE_DATA_HOB_DATA;
30
31
32 ///
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.
43 ///
44 #define COMM_BUFFER_MM_DISPATCH_ERROR 0x00
45 #define COMM_BUFFER_MM_DISPATCH_SUCCESS 0x01
46 #define COMM_BUFFER_MM_DISPATCH_RESTART 0x02
47
48 ///
49 /// Signature for the private structure shared between the MM IPL and the MM Core
50 ///
51 #define MM_CORE_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('m', 'm', 'i', 'c')
52
53 ///
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
61 /// thos structure.
62 ///
63 typedef struct {
64 UINT64 Signature;
65
66 ///
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.
69 ///
70 UINT64 MmramRangeCount;
71
72 ///
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.
75 ///
76 EFI_PHYSICAL_ADDRESS MmramRanges;
77
78 ///
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
85 /// available.
86 ///
87 EFI_PHYSICAL_ADDRESS MmEntryPoint;
88
89 ///
90 /// Boolean flag set to TRUE while an MMI is being processed by the MM Core.
91 ///
92 BOOLEAN MmEntryPointRegistered;
93
94 ///
95 /// Boolean flag set to TRUE while an MMI is being processed by the MM Core.
96 ///
97 BOOLEAN InMm;
98
99 ///
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
102 /// the MM IPL.
103 ///
104 EFI_PHYSICAL_ADDRESS Mmst;
105
106 ///
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.
110 ///
111 EFI_PHYSICAL_ADDRESS CommunicationBuffer;
112
113 ///
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.
117 ///
118 UINT64 BufferSize;
119
120 ///
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.
123 ///
124 UINT64 ReturnStatus;
125
126 EFI_PHYSICAL_ADDRESS MmCoreImageBase;
127 UINT64 MmCoreImageSize;
128 EFI_PHYSICAL_ADDRESS MmCoreEntryPoint;
129
130 EFI_PHYSICAL_ADDRESS StandaloneBfvAddress;
131 } MM_CORE_PRIVATE_DATA;
132
133 #endif