summaryrefslogtreecommitdiff
path: root/IntelFsp2Pkg/Include/FspGlobalData.h
blob: cf94f7b6a549d2710ecbfb61de13366e5d56be5a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/** @file

  Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _FSP_GLOBAL_DATA_H_
#define _FSP_GLOBAL_DATA_H_

#include <FspEas.h>

#define FSP_IN_API_MODE          0
#define FSP_IN_DISPATCH_MODE     1
#define FSP_GLOBAL_DATA_VERSION  0x2

#pragma pack(1)

typedef enum {
  TempRamInitApiIndex,
  FspInitApiIndex,
  NotifyPhaseApiIndex,
  FspMemoryInitApiIndex,
  TempRamExitApiIndex,
  FspSiliconInitApiIndex,
  FspMultiPhaseSiInitApiIndex,
  FspSmmInitApiIndex,
  FspApiIndexMax
} FSP_API_INDEX;

typedef struct  {
  VOID     *DataPtr;
  UINTN    MicrocodeRegionBase;
  UINTN    MicrocodeRegionSize;
  UINTN    CodeRegionBase;
  UINTN    CodeRegionSize;
  UINTN    Reserved;
} FSP_PLAT_DATA;

#define FSP_GLOBAL_DATA_SIGNATURE        SIGNATURE_32 ('F', 'S', 'P', 'D')
#define FSP_PERFORMANCE_DATA_SIGNATURE   SIGNATURE_32 ('P', 'E', 'R', 'F')
#define FSP_PERFORMANCE_DATA_TIMER_MASK  0xFFFFFFFFFFFFFF

typedef struct  {
  UINT32    Signature;
  UINT8     Version;
  UINT8     Reserved1[3];
  ///
  /// Offset 0x08
  ///
  UINTN     CoreStack;
  UINTN     Reserved2;
  ///
  /// IA32: Offset 0x10; X64: Offset 0x18
  ///
  UINT32    StatusCode;
  UINT8     ApiIdx;
  ///
  /// 0: FSP in API mode; 1: FSP in DISPATCH mode
  ///
  UINT8     FspMode;
  UINT8     OnSeparateStack;
  UINT8     Reserved3;
  UINT32    NumberOfPhases;
  UINT32    PhasesExecuted;
  UINT32    Reserved4[8];
  ///
  /// IA32: Offset 0x40; X64: Offset 0x48
  /// Start of UINTN and pointer section
  /// All UINTN and pointer members must be put in this section
  /// except CoreStack and Reserved2. In addition, the number of
  /// UINTN and pointer members must be even for natural alignment
  /// in both IA32 and X64.
  ///
  FSP_PLAT_DATA      PlatformData;
  VOID               *TempRamInitUpdPtr;
  VOID               *MemoryInitUpdPtr;
  VOID               *SiliconInitUpdPtr;
  VOID               *SmmInitUpdPtr;
  ///
  /// IA32: Offset 0x68; X64: Offset 0x98
  /// To store function parameters pointer
  /// so it can be retrieved after stack switched.
  ///
  VOID               *FunctionParameterPtr;
  FSP_INFO_HEADER    *FspInfoHeader;
  VOID               *UpdDataPtr;
  UINTN              Reserved5;
  ///
  /// End of UINTN and pointer section
  ///
  UINT8              Reserved6[16];
  UINT32             PerfSig;
  UINT16             PerfLen;
  UINT16             Reserved7;
  UINT32             PerfIdx;
  UINT64             PerfData[32];
} FSP_GLOBAL_DATA;

#pragma pack()

#endif