1*f334afcfSToomas Soome /** @file
2*f334afcfSToomas Soome   Include file matches things in PI for multiple module types.
3*f334afcfSToomas Soome 
4*f334afcfSToomas Soome Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
5*f334afcfSToomas Soome SPDX-License-Identifier: BSD-2-Clause-Patent
6*f334afcfSToomas Soome 
7*f334afcfSToomas Soome   @par Revision Reference:
8*f334afcfSToomas Soome   These elements are defined in UEFI Platform Initialization Specification 1.2.
9*f334afcfSToomas Soome 
10*f334afcfSToomas Soome **/
11*f334afcfSToomas Soome 
12*f334afcfSToomas Soome #ifndef __PI_MULTIPHASE_H__
13*f334afcfSToomas Soome #define __PI_MULTIPHASE_H__
14*f334afcfSToomas Soome 
15*f334afcfSToomas Soome #include <Pi/PiFirmwareVolume.h>
16*f334afcfSToomas Soome #include <Pi/PiFirmwareFile.h>
17*f334afcfSToomas Soome #include <Pi/PiBootMode.h>
18*f334afcfSToomas Soome #include <Pi/PiHob.h>
19*f334afcfSToomas Soome #include <Pi/PiDependency.h>
20*f334afcfSToomas Soome #include <Pi/PiStatusCode.h>
21*f334afcfSToomas Soome #include <Pi/PiS3BootScript.h>
22*f334afcfSToomas Soome 
23*f334afcfSToomas Soome /**
24*f334afcfSToomas Soome   Produces an error code in the range reserved for use by the Platform Initialization
25*f334afcfSToomas Soome   Architecture Specification.
26*f334afcfSToomas Soome 
27*f334afcfSToomas Soome   The supported 32-bit range is 0xA0000000-0xBFFFFFFF
28*f334afcfSToomas Soome   The supported 64-bit range is 0xA000000000000000-0xBFFFFFFFFFFFFFFF
29*f334afcfSToomas Soome 
30*f334afcfSToomas Soome   @param  StatusCode    The status code value to convert into a warning code.
31*f334afcfSToomas Soome                         StatusCode must be in the range 0x00000000..0x1FFFFFFF.
32*f334afcfSToomas Soome 
33*f334afcfSToomas Soome   @return The value specified by StatusCode in the PI reserved range.
34*f334afcfSToomas Soome 
35*f334afcfSToomas Soome **/
36*f334afcfSToomas Soome #define DXE_ERROR(StatusCode)  (MAX_BIT | (MAX_BIT >> 2) | StatusCode)
37*f334afcfSToomas Soome 
38*f334afcfSToomas Soome ///
39*f334afcfSToomas Soome /// If this value is returned by an EFI image, then the image should be unloaded.
40*f334afcfSToomas Soome ///
41*f334afcfSToomas Soome #define EFI_REQUEST_UNLOAD_IMAGE  DXE_ERROR (1)
42*f334afcfSToomas Soome 
43*f334afcfSToomas Soome ///
44*f334afcfSToomas Soome /// If this value is returned by an API, it means the capability is not yet
45*f334afcfSToomas Soome /// installed/available/ready to use.
46*f334afcfSToomas Soome ///
47*f334afcfSToomas Soome #define EFI_NOT_AVAILABLE_YET  DXE_ERROR (2)
48*f334afcfSToomas Soome 
49*f334afcfSToomas Soome ///
50*f334afcfSToomas Soome /// Success and warning codes reserved for use by PI.
51*f334afcfSToomas Soome /// Supported 32-bit range is 0x20000000-0x3fffffff.
52*f334afcfSToomas Soome /// Supported 64-bit range is 0x2000000000000000-0x3fffffffffffffff.
53*f334afcfSToomas Soome ///
54*f334afcfSToomas Soome #define PI_ENCODE_WARNING(a)  ((MAX_BIT >> 2) | (a))
55*f334afcfSToomas Soome 
56*f334afcfSToomas Soome ///
57*f334afcfSToomas Soome /// Error codes reserved for use by PI.
58*f334afcfSToomas Soome /// Supported 32-bit range is 0xa0000000-0xbfffffff.
59*f334afcfSToomas Soome /// Supported 64-bit range is 0xa000000000000000-0xbfffffffffffffff.
60*f334afcfSToomas Soome ///
61*f334afcfSToomas Soome #define PI_ENCODE_ERROR(a)  (MAX_BIT | (MAX_BIT >> 2) | (a))
62*f334afcfSToomas Soome 
63*f334afcfSToomas Soome ///
64*f334afcfSToomas Soome /// Return status codes defined in SMM CIS.
65*f334afcfSToomas Soome ///
66*f334afcfSToomas Soome #define EFI_INTERRUPT_PENDING  PI_ENCODE_ERROR (0)
67*f334afcfSToomas Soome 
68*f334afcfSToomas Soome #define EFI_WARN_INTERRUPT_SOURCE_PENDING   PI_ENCODE_WARNING (0)
69*f334afcfSToomas Soome #define EFI_WARN_INTERRUPT_SOURCE_QUIESCED  PI_ENCODE_WARNING (1)
70*f334afcfSToomas Soome 
71*f334afcfSToomas Soome ///
72*f334afcfSToomas Soome /// Bitmask of values for Authentication Status.
73*f334afcfSToomas Soome /// Authentication Status is returned from EFI_GUIDED_SECTION_EXTRACTION_PROTOCOL
74*f334afcfSToomas Soome /// and the EFI_PEI_GUIDED_SECTION_EXTRACTION_PPI
75*f334afcfSToomas Soome ///
76*f334afcfSToomas Soome /// xx00 Image was not signed.
77*f334afcfSToomas Soome /// xxx1 Platform security policy override. Assumes the same meaning as 0010 (the image was signed, the
78*f334afcfSToomas Soome ///      signature was tested, and the signature passed authentication test).
79*f334afcfSToomas Soome /// 0010 Image was signed, the signature was tested, and the signature passed authentication test.
80*f334afcfSToomas Soome /// 0110 Image was signed and the signature was not tested.
81*f334afcfSToomas Soome /// 1010 Image was signed, the signature was tested, and the signature failed the authentication test.
82*f334afcfSToomas Soome ///
83*f334afcfSToomas Soome ///@{
84*f334afcfSToomas Soome #define EFI_AUTH_STATUS_PLATFORM_OVERRIDE  0x01
85*f334afcfSToomas Soome #define EFI_AUTH_STATUS_IMAGE_SIGNED       0x02
86*f334afcfSToomas Soome #define EFI_AUTH_STATUS_NOT_TESTED         0x04
87*f334afcfSToomas Soome #define EFI_AUTH_STATUS_TEST_FAILED        0x08
88*f334afcfSToomas Soome #define EFI_AUTH_STATUS_ALL                0x0f
89*f334afcfSToomas Soome ///@}
90*f334afcfSToomas Soome 
91*f334afcfSToomas Soome ///
92*f334afcfSToomas Soome /// MMRAM states and capabilities
93*f334afcfSToomas Soome ///
94*f334afcfSToomas Soome #define EFI_MMRAM_OPEN                0x00000001
95*f334afcfSToomas Soome #define EFI_MMRAM_CLOSED              0x00000002
96*f334afcfSToomas Soome #define EFI_MMRAM_LOCKED              0x00000004
97*f334afcfSToomas Soome #define EFI_CACHEABLE                 0x00000008
98*f334afcfSToomas Soome #define EFI_ALLOCATED                 0x00000010
99*f334afcfSToomas Soome #define EFI_NEEDS_TESTING             0x00000020
100*f334afcfSToomas Soome #define EFI_NEEDS_ECC_INITIALIZATION  0x00000040
101*f334afcfSToomas Soome 
102*f334afcfSToomas Soome #define EFI_SMRAM_OPEN    EFI_MMRAM_OPEN
103*f334afcfSToomas Soome #define EFI_SMRAM_CLOSED  EFI_MMRAM_CLOSED
104*f334afcfSToomas Soome #define EFI_SMRAM_LOCKED  EFI_MMRAM_LOCKED
105*f334afcfSToomas Soome 
106*f334afcfSToomas Soome ///
107*f334afcfSToomas Soome /// Structure describing a MMRAM region and its accessibility attributes.
108*f334afcfSToomas Soome ///
109*f334afcfSToomas Soome typedef struct {
110*f334afcfSToomas Soome   ///
111*f334afcfSToomas Soome   /// Designates the physical address of the MMRAM in memory. This view of memory is
112*f334afcfSToomas Soome   /// the same as seen by I/O-based agents, for example, but it may not be the address seen
113*f334afcfSToomas Soome   /// by the processors.
114*f334afcfSToomas Soome   ///
115*f334afcfSToomas Soome   EFI_PHYSICAL_ADDRESS    PhysicalStart;
116*f334afcfSToomas Soome   ///
117*f334afcfSToomas Soome   /// Designates the address of the MMRAM, as seen by software executing on the
118*f334afcfSToomas Soome   /// processors. This address may or may not match PhysicalStart.
119*f334afcfSToomas Soome   ///
120*f334afcfSToomas Soome   EFI_PHYSICAL_ADDRESS    CpuStart;
121*f334afcfSToomas Soome   ///
122*f334afcfSToomas Soome   /// Describes the number of bytes in the MMRAM region.
123*f334afcfSToomas Soome   ///
124*f334afcfSToomas Soome   UINT64                  PhysicalSize;
125*f334afcfSToomas Soome   ///
126*f334afcfSToomas Soome   /// Describes the accessibility attributes of the MMRAM.  These attributes include the
127*f334afcfSToomas Soome   /// hardware state (e.g., Open/Closed/Locked), capability (e.g., cacheable), logical
128*f334afcfSToomas Soome   /// allocation (e.g., allocated), and pre-use initialization (e.g., needs testing/ECC
129*f334afcfSToomas Soome   /// initialization).
130*f334afcfSToomas Soome   ///
131*f334afcfSToomas Soome   UINT64                  RegionState;
132*f334afcfSToomas Soome } EFI_MMRAM_DESCRIPTOR;
133*f334afcfSToomas Soome 
134*f334afcfSToomas Soome typedef EFI_MMRAM_DESCRIPTOR EFI_SMRAM_DESCRIPTOR;
135*f334afcfSToomas Soome 
136*f334afcfSToomas Soome ///
137*f334afcfSToomas Soome /// Structure describing a MMRAM region which cannot be used for the MMRAM heap.
138*f334afcfSToomas Soome ///
139*f334afcfSToomas Soome typedef struct _EFI_MM_RESERVED_MMRAM_REGION {
140*f334afcfSToomas Soome   ///
141*f334afcfSToomas Soome   /// Starting address of the reserved MMRAM area, as it appears while MMRAM is open.
142*f334afcfSToomas Soome   /// Ignored if MmramReservedSize is 0.
143*f334afcfSToomas Soome   ///
144*f334afcfSToomas Soome   EFI_PHYSICAL_ADDRESS    MmramReservedStart;
145*f334afcfSToomas Soome   ///
146*f334afcfSToomas Soome   /// Number of bytes occupied by the reserved MMRAM area. A size of zero indicates the
147*f334afcfSToomas Soome   /// last MMRAM area.
148*f334afcfSToomas Soome   ///
149*f334afcfSToomas Soome   UINT64                  MmramReservedSize;
150*f334afcfSToomas Soome } EFI_MM_RESERVED_MMRAM_REGION;
151*f334afcfSToomas Soome 
152*f334afcfSToomas Soome typedef enum {
153*f334afcfSToomas Soome   EFI_PCD_TYPE_8,
154*f334afcfSToomas Soome   EFI_PCD_TYPE_16,
155*f334afcfSToomas Soome   EFI_PCD_TYPE_32,
156*f334afcfSToomas Soome   EFI_PCD_TYPE_64,
157*f334afcfSToomas Soome   EFI_PCD_TYPE_BOOL,
158*f334afcfSToomas Soome   EFI_PCD_TYPE_PTR
159*f334afcfSToomas Soome } EFI_PCD_TYPE;
160*f334afcfSToomas Soome 
161*f334afcfSToomas Soome typedef struct {
162*f334afcfSToomas Soome   ///
163*f334afcfSToomas Soome   /// The returned information associated with the requested TokenNumber. If
164*f334afcfSToomas Soome   /// TokenNumber is 0, then PcdType is set to EFI_PCD_TYPE_8.
165*f334afcfSToomas Soome   ///
166*f334afcfSToomas Soome   EFI_PCD_TYPE    PcdType;
167*f334afcfSToomas Soome   ///
168*f334afcfSToomas Soome   /// The size of the data in bytes associated with the TokenNumber specified. If
169*f334afcfSToomas Soome   /// TokenNumber is 0, then PcdSize is set 0.
170*f334afcfSToomas Soome   ///
171*f334afcfSToomas Soome   UINTN           PcdSize;
172*f334afcfSToomas Soome   ///
173*f334afcfSToomas Soome   /// The null-terminated ASCII string associated with a given token. If the
174*f334afcfSToomas Soome   /// TokenNumber specified was 0, then this field corresponds to the null-terminated
175*f334afcfSToomas Soome   /// ASCII string associated with the token's namespace Guid. If NULL, there is no
176*f334afcfSToomas Soome   /// name associated with this request.
177*f334afcfSToomas Soome   ///
178*f334afcfSToomas Soome   CHAR8           *PcdName;
179*f334afcfSToomas Soome } EFI_PCD_INFO;
180*f334afcfSToomas Soome 
181*f334afcfSToomas Soome /**
182*f334afcfSToomas Soome   The function prototype for invoking a function on an Application Processor.
183*f334afcfSToomas Soome 
184*f334afcfSToomas Soome   This definition is used by the UEFI MP Serices Protocol, and the
185*f334afcfSToomas Soome   PI SMM System Table.
186*f334afcfSToomas Soome 
187*f334afcfSToomas Soome   @param[in,out] Buffer  The pointer to private data buffer.
188*f334afcfSToomas Soome **/
189*f334afcfSToomas Soome typedef
190*f334afcfSToomas Soome VOID
191*f334afcfSToomas Soome (EFIAPI *EFI_AP_PROCEDURE)(
192*f334afcfSToomas Soome   IN OUT VOID  *Buffer
193*f334afcfSToomas Soome   );
194*f334afcfSToomas Soome 
195*f334afcfSToomas Soome /**
196*f334afcfSToomas Soome   The function prototype for invoking a function on an Application Processor.
197*f334afcfSToomas Soome 
198*f334afcfSToomas Soome   This definition is used by the UEFI MM MP Serices Protocol.
199*f334afcfSToomas Soome 
200*f334afcfSToomas Soome   @param[in] ProcedureArgument    The pointer to private data buffer.
201*f334afcfSToomas Soome 
202*f334afcfSToomas Soome   @retval EFI_SUCCESS             Excutive the procedure successfully
203*f334afcfSToomas Soome 
204*f334afcfSToomas Soome **/
205*f334afcfSToomas Soome typedef
206*f334afcfSToomas Soome EFI_STATUS
207*f334afcfSToomas Soome (EFIAPI *EFI_AP_PROCEDURE2)(
208*f334afcfSToomas Soome   IN VOID  *ProcedureArgument
209*f334afcfSToomas Soome   );
210*f334afcfSToomas Soome 
211*f334afcfSToomas Soome #endif
212