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