summaryrefslogtreecommitdiffstats
path: root/IntelFsp2Pkg/Include/FspGlobalData.h
blob: 32c6d460e472aebf1c465e23010a3d93fa704517 (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
/** @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;
  VOID               *SmmInitUpdPtr;
  ///
  /// 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              Reserved2;
  UINT32             NumberOfPhases;
  UINT32             PhasesExecuted;
  UINT32             Reserved3[8];
  ///
  /// IA32: Offset 0x40; X64: Offset 0x48
  /// Start of UINTN and pointer section
  /// All UINTN and pointer members are put in this section
  /// for maintaining natural alignment for both IA32 and X64 builds.
  ///
  FSP_PLAT_DATA      PlatformData;
  VOID               *TempRamInitUpdPtr;
  VOID               *MemoryInitUpdPtr;
  VOID               *SiliconInitUpdPtr;
  ///
  /// IA32: Offset 0x64; X64: Offset 0x90
  /// To store function parameters pointer
  /// so it can be retrieved after stack switched.
  ///
  VOID               *FunctionParameterPtr;
  FSP_INFO_HEADER    *FspInfoHeader;
  VOID               *UpdDataPtr;
  ///
  /// End of UINTN and pointer section
  /// At this point, next field offset must be either *0h or *8h to
  /// meet natural alignment requirement.
  ///
  UINT8              Reserved4[16];
  UINT32             PerfSig;
  UINT16             PerfLen;
  UINT16             Reserved5;
  UINT32             PerfIdx;
  UINT32             Reserved6;
  UINT64             PerfData[32];
} FSP_GLOBAL_DATA;

#pragma pack()

#endif