1a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao/** @file 2a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao Intel FSP API definition from Intel Firmware Support Package External 33b17b2458726bf7e2cf640d29ebe14f8af587905Ma, Maurice Architecture Specification v1.1, April 2015, revision 001. 4a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 5d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen Copyright (c) 2014 - 2015, Intel Corporation. All rights reserved.<BR> 6a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao This program and the accompanying materials 7a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao are licensed and made available under the terms and conditions of the BSD License 8a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao which accompanies this distribution. The full text of the license may be found at 9a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao http://opensource.org/licenses/bsd-license.php. 10a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 11a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 14a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao**/ 15a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 16a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao#ifndef _FSP_API_H_ 17a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao#define _FSP_API_H_ 18a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 19d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_STATUS EFI_STATUS 20a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao#define FSPAPI EFIAPI 21a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 22a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao/** 23a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao FSP Init continuation function prototype. 24a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao Control will be returned to this callback function after FspInit API call. 25a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 26a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao @param[in] Status Status of the FSP INIT API. 27a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao @param[in] HobBufferPtr Pointer to the HOB data structure defined in the PI specification. 28a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao**/ 29a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaotypedef 30a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaoVOID 31a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao(* CONTINUATION_PROC) ( 32d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen IN EFI_STATUS Status, 33a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao IN VOID *HobListPtr 34a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao ); 35a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 36a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao#pragma pack(1) 37a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 38a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaotypedef struct { 39a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 40a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Base address of the microcode region. 41a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 42a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao UINT32 MicrocodeRegionBase; 43a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 44a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Length of the microcode region. 45a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 46a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao UINT32 MicrocodeRegionLength; 47a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 48a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Base address of the cacheable flash region. 49a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 50a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao UINT32 CodeRegionBase; 51a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 52a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Length of the cacheable flash region. 53a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 54a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao UINT32 CodeRegionLength; 55a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao} FSP_TEMP_RAM_INIT_PARAMS; 56a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 57a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaotypedef struct { 58a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 59a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Non-volatile storage buffer pointer. 60a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 61a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao VOID *NvsBufferPtr; 62a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 63a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Runtime buffer pointer 64a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 65a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao VOID *RtBufferPtr; 66a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 67a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Continuation function address 68a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 69a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao CONTINUATION_PROC ContinuationFunc; 70a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao} FSP_INIT_PARAMS; 71a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 72a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaotypedef struct { 73a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 74a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Stack top pointer used by the bootloader. 75a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// The new stack frame will be set up at this location after FspInit API call. 76a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 77a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao UINT32 *StackTop; 78a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 79a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Current system boot mode. 80a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 81a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao UINT32 BootMode; 82a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 83a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// User platform configuraiton data region pointer. 84a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 85a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao VOID *UpdDataRgnPtr; 869da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen // 879da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen // Below field is added in FSP EAS v1.1 889da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen // 899da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen /// 909da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen /// The size of memory to be reserved below the top of low usable memory (TOLUM) 919da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen /// for BootLoader usage. This is optional and value can be zero. If non-zero, the 929da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen /// size must be a multiple of 4KB. 939da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen /// 949da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen UINT32 BootLoaderTolumSize; 95a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 96a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Reserved 97a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 989da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen UINT32 Reserved[6]; 99a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao} FSP_INIT_RT_COMMON_BUFFER; 100a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 101a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaotypedef enum { 102a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 103a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Notification code for post PCI enuermation 104a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 105a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao EnumInitPhaseAfterPciEnumeration = 0x20, 106a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 107a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Notification code before transfering control to the payload 108a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 109a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao EnumInitPhaseReadyToBoot = 0x40 110a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao} FSP_INIT_PHASE; 111a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 112a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaotypedef struct { 113a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 114a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// Notification phase used for NotifyPhase API 115a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao /// 116a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao FSP_INIT_PHASE Phase; 117a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao} NOTIFY_PHASE_PARAMS; 118a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 119d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewentypedef struct { 120d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen /// 121d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen /// Non-volatile storage buffer pointer. 122d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen /// 123d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen VOID *NvsBufferPtr; 124d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen /// 125d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen /// Runtime buffer pointer 126d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen /// 127d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen VOID *RtBufferPtr; 128d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen /// 129d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen /// Pointer to the HOB data structure defined in the PI specification 130d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen /// 131d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen VOID **HobListPtr; 132d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen} FSP_MEMORY_INIT_PARAMS; 133d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 134a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao#pragma pack() 135a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 136a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao/** 137a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao This FSP API is called soon after coming out of reset and before memory and stack is 138a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao available. This FSP API will load the microcode update, enable code caching for the 139a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao region specified by the boot loader and also setup a temporary stack to be used until 140a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao main memory is initialized. 141a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 142a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao A hardcoded stack can be set up with the following values, and the "esp" register 143a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao initialized to point to this hardcoded stack. 144a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 1. The return address where the FSP will return control after setting up a temporary 145a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao stack. 146a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 2. A pointer to the input parameter structure 147a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 148a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao However, since the stack is in ROM and not writeable, this FSP API cannot be called 149a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao using the "call" instruction, but needs to be jumped to. 150a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 151a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao @param[in] TempRaminitParamPtr Address pointer to the FSP_TEMP_RAM_INIT_PARAMS structure. 152a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 153d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_SUCCESS Temp RAM was initialized successfully. 154d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_INVALID_PARAMETER Input parameters are invalid.. 155d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_NOT_FOUND No valid microcode was found in the microcode region. 156d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_UNSUPPORTED The FSP calling conditions were not met. 157d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_DEVICE_ERROR Temp RAM initialization failed. 158a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 159a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao If this function is successful, the FSP initializes the ECX and EDX registers to point to 160a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao a temporary but writeable memory range available to the boot loader and returns with 161a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao FSP_SUCCESS in register EAX. Register ECX points to the start of this temporary 162a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao memory range and EDX points to the end of the range. Boot loader is free to use the 163a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao whole range described. Typically the boot loader can reload the ESP register to point 164a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao to the end of this returned range so that it can be used as a standard stack. 165a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao**/ 166a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaotypedef 167d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, JiewenEFI_STATUS 168d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen(EFIAPI *FSP_TEMP_RAM_INIT) ( 169a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao IN FSP_TEMP_RAM_INIT_PARAMS *FspTempRamInitPtr 170a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao ); 171a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 172a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao/** 173a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao This FSP API is called after TempRamInitEntry. This FSP API initializes the memory, 174a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao the CPU and the chipset to enable normal operation of these devices. This FSP API 175a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao accepts a pointer to a data structure that will be platform dependent and defined for 176a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao each FSP binary. This will be documented in the Integration Guide for each FSP 177a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao release. 178a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao The boot loader provides a continuation function as a parameter when calling FspInit. 179a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao After FspInit completes its execution, it does not return to the boot loader from where 180a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao it was called but instead returns control to the boot loader by calling the continuation 181a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao function which is passed to FspInit as an argument. 182a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 183a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao @param[in] FspInitParamPtr Address pointer to the FSP_INIT_PARAMS structure. 184a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 185d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_SUCCESS FSP execution environment was initialized successfully. 186d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_INVALID_PARAMETER Input parameters are invalid. 187d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_UNSUPPORTED The FSP calling conditions were not met. 188d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_DEVICE_ERROR FSP initialization failed. 189a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao**/ 190a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaotypedef 191d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, JiewenEFI_STATUS 192d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen(EFIAPI *FSP_INIT) ( 193a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao IN OUT FSP_INIT_PARAMS *FspInitParamPtr 194a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao ); 195a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 196d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_FSP_INIT FSP_INIT 197d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 198a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao/** 199a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao This FSP API is used to notify the FSP about the different phases in the boot process. 200a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao This allows the FSP to take appropriate actions as needed during different initialization 201a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao phases. The phases will be platform dependent and will be documented with the FSP 202a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao release. The current FSP supports two notify phases: 203a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao Post PCI enumeration 204a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao Ready To Boot 205a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 206a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao @param[in] NotifyPhaseParamPtr Address pointer to the NOTIFY_PHASE_PRAMS 207a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 208d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_SUCCESS The notification was handled successfully. 209d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_UNSUPPORTED The notification was not called in the proper order. 210d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_INVALID_PARAMETER The notification code is invalid. 211a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao**/ 212a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyaotypedef 213d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, JiewenEFI_STATUS 214d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen(EFIAPI *FSP_NOTIFY_PHASE) ( 215a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao IN NOTIFY_PHASE_PARAMS *NotifyPhaseParamPtr 216a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao ); 217a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 218d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen/** 219d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen This FSP API is called after TempRamInit and initializes the memory. 220d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen This FSP API accepts a pointer to a data structure that will be platform dependent 221d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen and defined for each FSP binary. This will be documented in Integration guide with 222d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen each FSP release. 223d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen After FspMemInit completes its execution, it passes the pointer to the HobList and 2249da591867c0bad1abbe17a321dc5b16d95226c6aYao, Jiewen returns to the boot loader from where it was called. BootLoader is responsible to 2256ca9135a654a658c9fbaa698cfa69a76c7719be1Yao, Jiewen migrate it's stack and data to Memory. 226d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen FspMemoryInit, TempRamExit and FspSiliconInit APIs provide an alternate method to 227d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen complete the silicon initialization and provides bootloader an opportunity to get 228d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen control after system memory is available and before the temporary RAM is torn down. 229d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen These APIs are mutually exclusive to the FspInit API. 230d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 231d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @param[in][out] FspMemoryInitParamPtr Address pointer to the FSP_MEMORY_INIT_PARAMS 232d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen structure. 233d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 234d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_SUCCESS FSP execution environment was initialized successfully. 235d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_INVALID_PARAMETER Input parameters are invalid. 236d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_UNSUPPORTED The FSP calling conditions were not met. 237d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_DEVICE_ERROR FSP initialization failed. 238d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen**/ 239d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewentypedef 240d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, JiewenEFI_STATUS 241d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen(EFIAPI *FSP_MEMORY_INIT) ( 242d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen IN OUT FSP_MEMORY_INIT_PARAMS *FspMemoryInitParamPtr 243d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen ); 244d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 245d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 246d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen/** 247d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen This FSP API is called after FspMemoryInit API. This FSP API tears down the temporary 248d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen memory setup by TempRamInit API. This FSP API accepts a pointer to a data structure 249d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen that will be platform dependent and defined for each FSP binary. This will be 250d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen documented in Integration Guide. 251d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen FspMemoryInit, TempRamExit and FspSiliconInit APIs provide an alternate method to 252d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen complete the silicon initialization and provides bootloader an opportunity to get 253d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen control after system memory is available and before the temporary RAM is torn down. 254d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen These APIs are mutually exclusive to the FspInit API. 255d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 256d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @param[in][out] TempRamExitParamPtr Pointer to the Temp Ram Exit parameters structure. 257d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen This structure is normally defined in the Integration Guide. 258d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen And if it is not defined in the Integration Guide, pass NULL. 259d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 260d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_SUCCESS FSP execution environment was initialized successfully. 261d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_INVALID_PARAMETER Input parameters are invalid. 262d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_UNSUPPORTED The FSP calling conditions were not met. 263d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_DEVICE_ERROR FSP initialization failed. 264d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen**/ 265d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewentypedef 266d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, JiewenEFI_STATUS 267d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen(EFIAPI *FSP_TEMP_RAM_EXIT) ( 268d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen IN OUT VOID *TempRamExitParamPtr 269d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen ); 270d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 271d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 272d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen/** 273d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen This FSP API is called after TempRamExit API. 274d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen FspMemoryInit, TempRamExit and FspSiliconInit APIs provide an alternate method to complete the 275d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen silicon initialization. 276d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen These APIs are mutually exclusive to the FspInit API. 277d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 278d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @param[in][out] FspSiliconInitParamPtr Pointer to the Silicon Init parameters structure. 279d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen This structure is normally defined in the Integration Guide. 280d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen And if it is not defined in the Integration Guide, pass NULL. 281d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 282d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_SUCCESS FSP execution environment was initialized successfully. 283d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_INVALID_PARAMETER Input parameters are invalid. 284d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_UNSUPPORTED The FSP calling conditions were not met. 285d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen @retval EFI_DEVICE_ERROR FSP initialization failed. 286d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen**/ 287d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewentypedef 288d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, JiewenEFI_STATUS 289d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen(EFIAPI *FSP_SILICON_INIT) ( 290d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen IN OUT VOID *FspSiliconInitParamPtr 291d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen ); 292d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen 293a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao/// 294d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen/// FSP API Return Status Code for backward compatibility with v1.0 295d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen///@{ 296d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_SUCCESS EFI_SUCCESS 297d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_INVALID_PARAMETER EFI_INVALID_PARAMETER 298d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_UNSUPPORTED EFI_UNSUPPORTED 299d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_NOT_READY EFI_NOT_READY 300d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_DEVICE_ERROR EFI_DEVICE_ERROR 301d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_OUT_OF_RESOURCES EFI_OUT_OF_RESOURCES 302d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_VOLUME_CORRUPTED EFI_VOLUME_CORRUPTED 303d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_NOT_FOUND EFI_NOT_FOUND 304d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_TIMEOUT EFI_TIMEOUT 305d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_ABORTED EFI_ABORTED 306d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_INCOMPATIBLE_VERSION EFI_INCOMPATIBLE_VERSION 307d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_SECURITY_VIOLATION EFI_SECURITY_VIOLATION 308d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen#define FSP_CRC_ERROR EFI_CRC_ERROR 309d5fb1edfb16a2af29486ffbf5aa32a036da9caa4Yao, Jiewen///@} 310a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao 311a33a2f62218e6e49a25d63474b7fe423d8ee4b71jyao#endif 312