| /** @file | |
| Intel FSP API definition from Intel Firmware Support Package External | |
| Architecture Specification v2.0 and above. | |
| Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.<BR> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #ifndef _FSP_API_H_ | |
| #define _FSP_API_H_ | |
| #include <Pi/PiStatusCode.h> | |
| #include <Base.h> | |
| /// | |
| /// FSP Reset Status code | |
| /// These are defined in FSP EAS v2.4 section 13.2.2 - OEM Status Code | |
| /// @{ | |
| #define ENCODE_RESET_REQUEST(ResetType) \ | |
| ((EFI_STATUS)((MAX_BIT >> 1) | (ResetType))) | |
| #define FSP_STATUS_RESET_REQUIRED_COLD ENCODE_RESET_REQUEST(1) | |
| #define FSP_STATUS_RESET_REQUIRED_WARM ENCODE_RESET_REQUEST(2) | |
| #define FSP_STATUS_RESET_REQUIRED_3 ENCODE_RESET_REQUEST(3) | |
| #define FSP_STATUS_RESET_REQUIRED_4 ENCODE_RESET_REQUEST(4) | |
| #define FSP_STATUS_RESET_REQUIRED_5 ENCODE_RESET_REQUEST(5) | |
| #define FSP_STATUS_RESET_REQUIRED_6 ENCODE_RESET_REQUEST(6) | |
| #define FSP_STATUS_RESET_REQUIRED_7 ENCODE_RESET_REQUEST(7) | |
| #define FSP_STATUS_RESET_REQUIRED_8 ENCODE_RESET_REQUEST(8) | |
| #define FSP_STATUS_VARIABLE_REQUEST ENCODE_RESET_REQUEST(10) | |
| /// @} | |
| /// | |
| /// FSP Event related definition. | |
| /// | |
| #define FSP_EVENT_CODE 0xF5000000 | |
| #define FSP_POST_CODE (FSP_EVENT_CODE | 0x00F80000) | |
| /* | |
| FSP may optionally include the capability of generating events messages to aid in the debugging of firmware issues. | |
| These events fall under three catagories: Error, Progress, and Debug. The event reporting mechanism follows the | |
| status code services described in section 6 and 7 of the PI Specification v1.7 Volume 3. | |
| @param[in] Type Indicates the type of event being reported. | |
| See MdePkg/Include/Pi/PiStatusCode.h for the definition of EFI_STATUS_CODE_TYPE. | |
| @param[in] Value Describes the current status of a hardware or software entity. | |
| This includes information about the class and subclass that is used to classify the entity as well as an operation. | |
| For progress events, the operation is the current activity. For error events, it is the exception. | |
| For debug events, it is not defined at this time. | |
| See MdePkg/Include/Pi/PiStatusCode.h for the definition of EFI_STATUS_CODE_VALUE. | |
| @param[in] Instance The enumeration of a hardware or software entity within the system. | |
| A system may contain multiple entities that match a class/subclass pairing. The instance differentiates between them. | |
| An instance of 0 indicates that instance information is unavailable, not meaningful, or not relevant. | |
| Valid instance numbers start with 1. | |
| @param[in] *CallerId This parameter can be used to identify the sub-module within the FSP generating the event. | |
| This parameter may be NULL. | |
| @param[in] *Data This optional parameter may be used to pass additional data. The contents can have event-specific data. | |
| For example, the FSP provides a EFI_STATUS_CODE_STRING_DATA instance to this parameter when sending debug messages. | |
| This parameter is NULL when no additional data is provided. | |
| @retval EFI_SUCCESS The event was handled successfully. | |
| @retval EFI_INVALID_PARAMETER Input parameters are invalid. | |
| @retval EFI_DEVICE_ERROR The event handler failed. | |
| */ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FSP_EVENT_HANDLER)( | |
| IN EFI_STATUS_CODE_TYPE Type, | |
| IN EFI_STATUS_CODE_VALUE Value, | |
| IN UINT32 Instance, | |
| IN OPTIONAL EFI_GUID *CallerId, | |
| IN OPTIONAL EFI_STATUS_CODE_DATA *Data | |
| ); | |
| /* | |
| Handler for FSP-T debug log messages, provided by the bootloader. | |
| @param[in] DebugMessage A pointer to the debug message to be written to the log. | |
| @param[in] MessageLength Number of bytes to written to the debug log. | |
| @retval UINT32 The return value indicates the number of bytes actually written to | |
| the debug log. If the return value is less than MessageLength, | |
| an error occurred. | |
| */ | |
| typedef | |
| UINT32 | |
| (EFIAPI *FSP_DEBUG_HANDLER)( | |
| IN CHAR8 *DebugMessage, | |
| IN UINT32 MessageLength | |
| ); | |
| #pragma pack(1) | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| typedef struct { | |
| /// | |
| /// UPD Region Signature. This signature will be | |
| /// "XXXXXX_T" for FSP-T | |
| /// "XXXXXX_M" for FSP-M | |
| /// "XXXXXX_S" for FSP-S | |
| /// "XXXXXX_I" for FSP-I | |
| /// Where XXXXXX is an unique signature | |
| /// | |
| UINT64 Signature; | |
| /// | |
| /// Revision of the Data structure. | |
| /// For FSP spec 2.0/2.1, this value is 1 and only FSPM_UPD having ARCH_UPD. | |
| /// For FSP spec 2.2 and above, this value is 2 and ARCH_UPD present in all UPD structures. | |
| /// | |
| UINT8 Revision; | |
| UINT8 Reserved[23]; | |
| } FSP_UPD_HEADER; | |
| /// | |
| /// FSPT_ARCH_UPD Configuration. | |
| /// | |
| typedef struct { | |
| /// | |
| /// Revision of the structure is 1 for this version of the specification. | |
| /// | |
| UINT8 Revision; | |
| UINT8 Reserved[3]; | |
| /// | |
| /// Length of the structure in bytes. The current value for this field is 32. | |
| /// | |
| UINT32 Length; | |
| /// | |
| /// FspDebugHandler Optional debug handler for the bootloader to receive debug messages | |
| /// occurring during FSP execution. | |
| /// | |
| FSP_DEBUG_HANDLER FspDebugHandler; | |
| UINT8 Reserved1[20]; | |
| } FSPT_ARCH_UPD; | |
| /// | |
| /// FSPT_ARCH2_UPD Configuration for FSP 2.4 and above. | |
| /// | |
| typedef struct { | |
| /// | |
| /// Revision of the structure is 2 for this version of the specification. | |
| /// | |
| UINT8 Revision; | |
| UINT8 Reserved[3]; | |
| /// | |
| /// Length of the structure in bytes. The current value for this field is 32. | |
| /// | |
| UINT32 Length; | |
| /// | |
| /// FspDebugHandler Optional debug handler for the bootloader to receive debug messages | |
| /// occurring during FSP execution. | |
| /// | |
| EFI_PHYSICAL_ADDRESS FspDebugHandler; | |
| UINT8 Reserved1[16]; | |
| } FSPT_ARCH2_UPD; | |
| /// | |
| /// FSPM_ARCH_UPD Configuration. | |
| /// | |
| typedef struct { | |
| /// | |
| /// Revision of the structure. For FSP v2.0 value is 1. | |
| /// | |
| UINT8 Revision; | |
| UINT8 Reserved[3]; | |
| /// | |
| /// Pointer to the non-volatile storage (NVS) data buffer. | |
| /// If it is NULL it indicates the NVS data is not available. | |
| /// | |
| VOID *NvsBufferPtr; | |
| /// | |
| /// Pointer to the temporary stack base address to be | |
| /// consumed inside FspMemoryInit() API. | |
| /// | |
| VOID *StackBase; | |
| /// | |
| /// Temporary stack size to be consumed inside | |
| /// FspMemoryInit() API. | |
| /// | |
| UINT32 StackSize; | |
| /// | |
| /// Size of memory to be reserved by FSP below "top | |
| /// of low usable memory" for bootloader usage. | |
| /// | |
| UINT32 BootLoaderTolumSize; | |
| /// | |
| /// Current boot mode. | |
| /// | |
| UINT32 BootMode; | |
| /// | |
| /// Optional event handler for the bootloader to be informed of events occurring during FSP execution. | |
| /// This value is only valid if Revision is >= 2. | |
| /// | |
| FSP_EVENT_HANDLER *FspEventHandler; | |
| UINT8 Reserved1[4]; | |
| } FSPM_ARCH_UPD; | |
| /// | |
| /// FSPM_ARCH2_UPD Configuration for FSP 2.4 and above. | |
| /// | |
| typedef struct { | |
| /// | |
| /// Revision of the structure is 3 for this version of the specification. | |
| /// | |
| UINT8 Revision; | |
| UINT8 Reserved[3]; | |
| /// | |
| /// Length of the structure in bytes. The current value for this field is 64. | |
| /// | |
| UINT32 Length; | |
| /// | |
| /// Pointer to the non-volatile storage (NVS) data buffer. | |
| /// If it is NULL it indicates the NVS data is not available. | |
| /// This value is deprecated starting with v2.4 of the FSP specification, | |
| /// and will be removed in an upcoming version of the FSP specification. | |
| /// | |
| EFI_PHYSICAL_ADDRESS NvsBufferPtr; | |
| /// | |
| /// Pointer to the temporary stack base address to be | |
| /// consumed inside FspMemoryInit() API. | |
| /// | |
| EFI_PHYSICAL_ADDRESS StackBase; | |
| /// | |
| /// Temporary stack size to be consumed inside | |
| /// FspMemoryInit() API. | |
| /// | |
| UINT64 StackSize; | |
| /// | |
| /// Size of memory to be reserved by FSP below "top | |
| /// of low usable memory" for bootloader usage. | |
| /// | |
| UINT32 BootLoaderTolumSize; | |
| /// | |
| /// Current boot mode. | |
| /// | |
| UINT32 BootMode; | |
| /// | |
| /// Optional event handler for the bootloader to be informed of events occurring during FSP execution. | |
| /// This value is only valid if Revision is >= 2. | |
| /// | |
| EFI_PHYSICAL_ADDRESS FspEventHandler; | |
| UINT8 Reserved1[16]; | |
| } FSPM_ARCH2_UPD; | |
| /// | |
| /// FSPS_ARCH_UPD Configuration. | |
| /// | |
| typedef struct { | |
| /// | |
| /// Revision of the structure is 1 for this version of the specification. | |
| /// | |
| UINT8 Revision; | |
| UINT8 Reserved[3]; | |
| /// | |
| /// Length of the structure in bytes. The current value for this field is 32. | |
| /// | |
| UINT32 Length; | |
| /// | |
| /// FspEventHandler Optional event handler for the bootloader to be informed of events | |
| /// occurring during FSP execution. | |
| /// | |
| FSP_EVENT_HANDLER FspEventHandler; | |
| /// | |
| /// A FSP binary may optionally implement multi-phase silicon initialization, | |
| /// This is only supported if the FspMultiPhaseSiInitEntryOffset field in FSP_INFO_HEADER | |
| /// is non-zero. | |
| /// To enable multi-phase silicon initialization, the bootloader must set | |
| /// EnableMultiPhaseSiliconInit to a non-zero value. | |
| /// | |
| UINT8 EnableMultiPhaseSiliconInit; | |
| UINT8 Reserved1[19]; | |
| } FSPS_ARCH_UPD; | |
| /// | |
| /// FSPS_ARCH2_UPD Configuration for FSP 2.4 and above. | |
| /// | |
| typedef struct { | |
| /// | |
| /// Revision of the structure is 2 for this version of the specification. | |
| /// | |
| UINT8 Revision; | |
| UINT8 Reserved[3]; | |
| /// | |
| /// Length of the structure in bytes. The current value for this field is 32. | |
| /// | |
| UINT32 Length; | |
| /// | |
| /// FspEventHandler Optional event handler for the bootloader to be informed of events | |
| /// occurring during FSP execution. | |
| /// | |
| EFI_PHYSICAL_ADDRESS FspEventHandler; | |
| UINT8 Reserved1[16]; | |
| } FSPS_ARCH2_UPD; | |
| /// | |
| /// FSPI_ARCH_UPD Configuration. | |
| /// | |
| typedef struct { | |
| /// | |
| /// Revision of the structure is 1 for this version of the specification. | |
| /// | |
| UINT8 Revision; | |
| UINT8 Reserved[3]; | |
| /// | |
| /// Length of the structure in bytes. The current value for this field is 64. | |
| /// | |
| UINT32 Length; | |
| /// | |
| /// The physical memory-mapped base address of the bootloader SMM firmware volume (FV). | |
| /// | |
| EFI_PHYSICAL_ADDRESS BootloaderSmmFvBaseAddress; | |
| /// | |
| /// The length in bytes of the bootloader SMM firmware volume (FV). | |
| /// | |
| UINT64 BootloaderSmmFvLength; | |
| /// | |
| /// The physical memory-mapped base address of the bootloader SMM FV context data. | |
| /// This data is provided to bootloader SMM drivers through a HOB by the FSP MM Foundation. | |
| /// | |
| EFI_PHYSICAL_ADDRESS BootloaderSmmFvContextData; | |
| /// | |
| /// The length in bytes of the bootloader SMM FV context data. | |
| /// This data is provided to bootloader SMM drivers through a HOB by the FSP MM Foundation. | |
| /// | |
| UINT16 BootloaderSmmFvContextDataLength; | |
| UINT8 Reserved1[30]; | |
| } FSPI_ARCH_UPD; | |
| /// | |
| /// FSPT_UPD_COMMON Configuration. | |
| /// | |
| typedef struct { | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| FSP_UPD_HEADER FspUpdHeader; | |
| } FSPT_UPD_COMMON; | |
| /// | |
| /// FSPT_UPD_COMMON Configuration for FSP spec. 2.2 and above. | |
| /// | |
| typedef struct { | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| FSP_UPD_HEADER FspUpdHeader; | |
| /// | |
| /// FSPT_ARCH_UPD Configuration. | |
| /// | |
| FSPT_ARCH_UPD FsptArchUpd; | |
| } FSPT_UPD_COMMON_FSP22; | |
| /// | |
| /// FSPT_UPD_COMMON Configuration for FSP spec. 2.4 and above. | |
| /// | |
| typedef struct { | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| FSP_UPD_HEADER FspUpdHeader; | |
| /// | |
| /// FSPT_ARCH2_UPD Configuration. | |
| /// | |
| FSPT_ARCH2_UPD FsptArchUpd; | |
| } FSPT_UPD_COMMON_FSP24; | |
| /// | |
| /// FSPM_UPD_COMMON Configuration. | |
| /// | |
| typedef struct { | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| FSP_UPD_HEADER FspUpdHeader; | |
| /// | |
| /// FSPM_ARCH_UPD Configuration. | |
| /// | |
| FSPM_ARCH_UPD FspmArchUpd; | |
| } FSPM_UPD_COMMON; | |
| /// | |
| /// FSPM_UPD_COMMON Configuration for FSP spec. 2.4 and above. | |
| /// | |
| typedef struct { | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| FSP_UPD_HEADER FspUpdHeader; | |
| /// | |
| /// FSPM_ARCH2_UPD Configuration. | |
| /// | |
| FSPM_ARCH2_UPD FspmArchUpd; | |
| } FSPM_UPD_COMMON_FSP24; | |
| /// | |
| /// FSPS_UPD_COMMON Configuration. | |
| /// | |
| typedef struct { | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| FSP_UPD_HEADER FspUpdHeader; | |
| } FSPS_UPD_COMMON; | |
| /// | |
| /// FSPS_UPD_COMMON Configuration for FSP spec. 2.2 and above. | |
| /// | |
| typedef struct { | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| FSP_UPD_HEADER FspUpdHeader; | |
| /// | |
| /// FSPS_ARCH_UPD Configuration. | |
| /// | |
| FSPS_ARCH_UPD FspsArchUpd; | |
| } FSPS_UPD_COMMON_FSP22; | |
| /// | |
| /// FSPS_UPD_COMMON Configuration for FSP spec. 2.4 and above. | |
| /// | |
| typedef struct { | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| FSP_UPD_HEADER FspUpdHeader; | |
| /// | |
| /// FSPS_ARCH2_UPD Configuration. | |
| /// | |
| FSPS_ARCH2_UPD FspsArchUpd; | |
| } FSPS_UPD_COMMON_FSP24; | |
| /// | |
| /// FSPI_UPD_COMMON Configuration. | |
| /// | |
| typedef struct { | |
| /// | |
| /// FSP_UPD_HEADER Configuration. | |
| /// | |
| FSP_UPD_HEADER FspUpdHeader; | |
| /// | |
| /// FSPI_ARCH_UPD Configuration. | |
| /// | |
| FSPI_ARCH_UPD FspiArchUpd; | |
| } FSPI_UPD_COMMON; | |
| /// | |
| /// Enumeration of FSP_INIT_PHASE for NOTIFY_PHASE. | |
| /// | |
| typedef enum { | |
| /// | |
| /// This stage is notified when the bootloader completes the | |
| /// PCI enumeration and the resource allocation for the | |
| /// PCI devices is complete. | |
| /// | |
| EnumInitPhaseAfterPciEnumeration = 0x20, | |
| /// | |
| /// This stage is notified just before the bootloader hand-off | |
| /// to the OS loader. | |
| /// | |
| EnumInitPhaseReadyToBoot = 0x40, | |
| /// | |
| /// This stage is notified just before the firmware/Preboot | |
| /// environment transfers management of all system resources | |
| /// to the OS or next level execution environment. | |
| /// | |
| EnumInitPhaseEndOfFirmware = 0xF0 | |
| } FSP_INIT_PHASE; | |
| /// | |
| /// Definition of NOTIFY_PHASE_PARAMS. | |
| /// | |
| typedef struct { | |
| /// | |
| /// Notification phase used for NotifyPhase API | |
| /// | |
| FSP_INIT_PHASE Phase; | |
| } NOTIFY_PHASE_PARAMS; | |
| /// | |
| /// Action definition for FspMultiPhaseSiInit API | |
| /// | |
| typedef enum { | |
| EnumMultiPhaseGetNumberOfPhases = 0x0, | |
| EnumMultiPhaseExecutePhase = 0x1, | |
| EnumMultiPhaseGetVariableRequestInfo = 0x2, | |
| EnumMultiPhaseCompleteVariableRequest = 0x3 | |
| } FSP_MULTI_PHASE_ACTION; | |
| typedef enum { | |
| EnumFspVariableRequestGetVariable = 0x0, | |
| EnumFspVariableRequestGetNextVariableName = 0x1, | |
| EnumFspVariableRequestSetVariable = 0x2, | |
| EnumFspVariableRequestQueryVariableInfo = 0x3 | |
| } FSP_VARIABLE_REQUEST_TYPE; | |
| #pragma pack(16) | |
| typedef struct { | |
| IN FSP_VARIABLE_REQUEST_TYPE VariableRequest; | |
| IN OUT CHAR16 *VariableName; | |
| IN OUT UINT64 *VariableNameSize; | |
| IN OUT EFI_GUID *VariableGuid; | |
| IN OUT UINT32 *Attributes; | |
| IN OUT UINT64 *DataSize; | |
| IN OUT VOID *Data; | |
| OUT UINT64 *MaximumVariableStorageSize; | |
| OUT UINT64 *RemainingVariableStorageSize; | |
| OUT UINT64 *MaximumVariableSize; | |
| } FSP_MULTI_PHASE_VARIABLE_REQUEST_INFO_PARAMS; | |
| typedef struct { | |
| EFI_STATUS VariableRequestStatus; | |
| } FSP_MULTI_PHASE_COMPLETE_VARIABLE_REQUEST_PARAMS; | |
| #pragma pack() | |
| /// | |
| /// Data structure returned by FSP when bootloader calling | |
| /// FspMultiPhaseSiInit API with action 0 (EnumMultiPhaseGetNumberOfPhases) | |
| /// | |
| typedef struct { | |
| UINT32 NumberOfPhases; | |
| UINT32 PhasesExecuted; | |
| } FSP_MULTI_PHASE_GET_NUMBER_OF_PHASES_PARAMS; | |
| /// | |
| /// FspMultiPhaseSiInit function parameter. | |
| /// | |
| /// For action 0 (EnumMultiPhaseGetNumberOfPhases): | |
| /// - PhaseIndex must be 0. | |
| /// - MultiPhaseParamPtr should point to an instance of FSP_MULTI_PHASE_GET_NUMBER_OF_PHASES_PARAMS. | |
| /// | |
| /// For action 1 (EnumMultiPhaseExecutePhase): | |
| /// - PhaseIndex will be the phase that will be executed by FSP. | |
| /// - MultiPhaseParamPtr shall be NULL. | |
| /// | |
| typedef struct { | |
| IN FSP_MULTI_PHASE_ACTION MultiPhaseAction; | |
| IN UINT32 PhaseIndex; | |
| IN OUT VOID *MultiPhaseParamPtr; | |
| } FSP_MULTI_PHASE_PARAMS; | |
| #pragma pack() | |
| /** | |
| This FSP API is called soon after coming out of reset and before memory and stack is | |
| available. This FSP API will load the microcode update, enable code caching for the | |
| region specified by the boot loader and also setup a temporary stack to be used until | |
| main memory is initialized. | |
| A hardcoded stack can be set up with the following values, and the "esp" register | |
| initialized to point to this hardcoded stack. | |
| 1. The return address where the FSP will return control after setting up a temporary | |
| stack. | |
| 2. A pointer to the input parameter structure | |
| However, since the stack is in ROM and not writeable, this FSP API cannot be called | |
| using the "call" instruction, but needs to be jumped to. | |
| @param[in] FsptUpdDataPtr Pointer to the FSPT_UPD data structure. | |
| @retval EFI_SUCCESS Temporary RAM was initialized successfully. | |
| @retval EFI_INVALID_PARAMETER Input parameters are invalid. | |
| @retval EFI_UNSUPPORTED The FSP calling conditions were not met. | |
| @retval EFI_DEVICE_ERROR Temp RAM initialization failed. | |
| If this function is successful, the FSP initializes the ECX and EDX registers to point to | |
| a temporary but writeable memory range available to the boot loader and returns with | |
| FSP_SUCCESS in register EAX. Register ECX points to the start of this temporary | |
| memory range and EDX points to the end of the range. Boot loader is free to use the | |
| whole range described. Typically the boot loader can reload the ESP register to point | |
| to the end of this returned range so that it can be used as a standard stack. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FSP_TEMP_RAM_INIT)( | |
| IN VOID *FsptUpdDataPtr | |
| ); | |
| /** | |
| This FSP API is used to notify the FSP about the different phases in the boot process. | |
| This allows the FSP to take appropriate actions as needed during different initialization | |
| phases. The phases will be platform dependent and will be documented with the FSP | |
| release. The current FSP supports two notify phases: | |
| Post PCI enumeration | |
| Ready To Boot | |
| @param[in] NotifyPhaseParamPtr Address pointer to the NOTIFY_PHASE_PRAMS | |
| @retval EFI_SUCCESS The notification was handled successfully. | |
| @retval EFI_UNSUPPORTED The notification was not called in the proper order. | |
| @retval EFI_INVALID_PARAMETER The notification code is invalid. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FSP_NOTIFY_PHASE)( | |
| IN NOTIFY_PHASE_PARAMS *NotifyPhaseParamPtr | |
| ); | |
| /** | |
| This FSP API is called after TempRamInit and initializes the memory. | |
| This FSP API accepts a pointer to a data structure that will be platform dependent | |
| and defined for each FSP binary. This will be documented in Integration guide with | |
| each FSP release. | |
| After FspMemInit completes its execution, it passes the pointer to the HobList and | |
| returns to the boot loader from where it was called. BootLoader is responsible to | |
| migrate its stack and data to Memory. | |
| FspMemoryInit, TempRamExit and FspSiliconInit APIs provide an alternate method to | |
| complete the silicon initialization and provides bootloader an opportunity to get | |
| control after system memory is available and before the temporary RAM is torn down. | |
| @param[in] FspmUpdDataPtr Pointer to the FSPM_UPD data structure. | |
| @param[out] HobListPtr Pointer to receive the address of the HOB list. | |
| @retval EFI_SUCCESS FSP execution environment was initialized successfully. | |
| @retval EFI_INVALID_PARAMETER Input parameters are invalid. | |
| @retval EFI_UNSUPPORTED The FSP calling conditions were not met. | |
| @retval EFI_DEVICE_ERROR FSP initialization failed. | |
| @retval EFI_OUT_OF_RESOURCES Stack range requested by FSP is not met. | |
| @retval FSP_STATUS_RESET_REQUIREDx A reset is required. These status codes will not be returned during S3. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FSP_MEMORY_INIT)( | |
| IN VOID *FspmUpdDataPtr, | |
| OUT VOID **HobListPtr | |
| ); | |
| /** | |
| This FSP API is called after FspMemoryInit API. This FSP API tears down the temporary | |
| memory setup by TempRamInit API. This FSP API accepts a pointer to a data structure | |
| that will be platform dependent and defined for each FSP binary. This will be | |
| documented in Integration Guide. | |
| FspMemoryInit, TempRamExit and FspSiliconInit APIs provide an alternate method to | |
| complete the silicon initialization and provides bootloader an opportunity to get | |
| control after system memory is available and before the temporary RAM is torn down. | |
| @param[in] TempRamExitParamPtr Pointer to the Temp Ram Exit parameters structure. | |
| This structure is normally defined in the Integration Guide. | |
| And if it is not defined in the Integration Guide, pass NULL. | |
| @retval EFI_SUCCESS FSP execution environment was initialized successfully. | |
| @retval EFI_INVALID_PARAMETER Input parameters are invalid. | |
| @retval EFI_UNSUPPORTED The FSP calling conditions were not met. | |
| @retval EFI_DEVICE_ERROR FSP initialization failed. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FSP_TEMP_RAM_EXIT)( | |
| IN VOID *TempRamExitParamPtr | |
| ); | |
| /** | |
| This FSP API is called after TempRamExit API. | |
| FspMemoryInit, TempRamExit and FspSiliconInit APIs provide an alternate method to complete the | |
| silicon initialization. | |
| @param[in] FspsUpdDataPtr Pointer to the FSPS_UPD data structure. | |
| If NULL, FSP will use the default parameters. | |
| @retval EFI_SUCCESS FSP execution environment was initialized successfully. | |
| @retval EFI_INVALID_PARAMETER Input parameters are invalid. | |
| @retval EFI_UNSUPPORTED The FSP calling conditions were not met. | |
| @retval EFI_DEVICE_ERROR FSP initialization failed. | |
| @retval FSP_STATUS_RESET_REQUIREDx A reset is required. These status codes will not be returned during S3. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FSP_SILICON_INIT)( | |
| IN VOID *FspsUpdDataPtr | |
| ); | |
| /** | |
| This FSP API is expected to be called after FspSiliconInit but before FspNotifyPhase. | |
| This FSP API provides multi-phase silicon initialization; which brings greater modularity | |
| beyond the existing FspSiliconInit() API. Increased modularity is achieved by adding an | |
| extra API to FSP-S. This allows the bootloader to add board specific initialization steps | |
| throughout the SiliconInit flow as needed. | |
| @param[in,out] FSP_MULTI_PHASE_PARAMS For action - EnumMultiPhaseGetNumberOfPhases: | |
| FSP_MULTI_PHASE_PARAMS->MultiPhaseParamPtr will contain | |
| how many phases supported by FSP. | |
| For action - EnumMultiPhaseExecutePhase: | |
| FSP_MULTI_PHASE_PARAMS->MultiPhaseParamPtr shall be NULL. | |
| @retval EFI_SUCCESS FSP execution environment was initialized successfully. | |
| @retval EFI_INVALID_PARAMETER Input parameters are invalid. | |
| @retval EFI_UNSUPPORTED The FSP calling conditions were not met. | |
| @retval EFI_DEVICE_ERROR FSP initialization failed. | |
| @retval FSP_STATUS_RESET_REQUIREDx A reset is required. These status codes will not be returned during S3. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FSP_MULTI_PHASE_SI_INIT)( | |
| IN FSP_MULTI_PHASE_PARAMS *MultiPhaseSiInitParamPtr | |
| ); | |
| /** | |
| This FSP API initializes SMM and provide any OS runtime silicon services, | |
| including Reliability, Availability, and Serviceability (RAS) features implemented by the CPU. | |
| @param[in] FspiUpdDataPtr Pointer to the FSPI_UPD data structure. | |
| If NULL, FSP will use the default parameters. | |
| @retval EFI_SUCCESS FSP execution environment was initialized successfully. | |
| @retval EFI_INVALID_PARAMETER Input parameters are invalid. | |
| @retval EFI_UNSUPPORTED The FSP calling conditions were not met. | |
| @retval EFI_DEVICE_ERROR FSP initialization failed. | |
| @retval FSP_STATUS_RESET_REQUIREDx A reset is required. These status codes will not be returned during S3. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FSP_SMM_INIT)( | |
| IN VOID *FspiUpdDataPtr | |
| ); | |
| /** | |
| This FSP API provides multi-phase memory and silicon initialization, which brings greater modularity to the existing | |
| FspMemoryInit() and FspSiliconInit() API. Increased modularity is achieved by adding an extra API to FSP-M and FSP-S. | |
| This allows the bootloader to add board specific initialization steps throughout the MemoryInit and SiliconInit flows as needed. | |
| The FspMemoryInit() API is always called before FspMultiPhaseMemInit(); it is the first phase of memory initialization. Similarly, | |
| the FspSiliconInit() API is always called before FspMultiPhaseSiInit(); it is the first phase of silicon initialization. | |
| After the first phase, subsequent phases are invoked by calling the FspMultiPhaseMem/SiInit() API. | |
| The FspMultiPhaseMemInit() API may only be called after the FspMemoryInit() API and before the FspSiliconInit() API; | |
| or in the case that FSP-T is being used, before the TempRamExit() API. The FspMultiPhaseSiInit() API may only be called after | |
| the FspSiliconInit() API and before NotifyPhase() API; or in the case that FSP-I is being used, before the FspSmmInit() API. | |
| The multi-phase APIs may not be called at any other time. | |
| @param[in,out] FSP_MULTI_PHASE_PARAMS For action - EnumMultiPhaseGetNumberOfPhases: | |
| FSP_MULTI_PHASE_PARAMS->MultiPhaseParamPtr will contain | |
| how many phases supported by FSP. | |
| For action - EnumMultiPhaseExecutePhase: | |
| FSP_MULTI_PHASE_PARAMS->MultiPhaseParamPtr shall be NULL. | |
| @retval EFI_SUCCESS FSP execution environment was initialized successfully. | |
| @retval EFI_INVALID_PARAMETER Input parameters are invalid. | |
| @retval EFI_UNSUPPORTED The FSP calling conditions were not met. | |
| @retval EFI_DEVICE_ERROR FSP initialization failed. | |
| @retval FSP_STATUS_RESET_REQUIRED_* A reset is required. These status codes will not be returned during S3. | |
| @retval FSP_STATUS_VARIABLE_REQUEST A variable request has been made by FSP that needs boot loader handling. | |
| **/ | |
| typedef | |
| EFI_STATUS | |
| (EFIAPI *FSP_MULTI_PHASE_INIT)( | |
| IN FSP_MULTI_PHASE_PARAMS *MultiPhaseInitParamPtr | |
| ); | |
| #endif |