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