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