hc
2024-03-25 edb30157bad0c0001c32b854271ace01d3b9a16a
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
/** @file
  Definition of the global NVS area protocol.  This protocol
  publishes the address and format of a global ACPI NVS buffer used as a communications
  buffer between SMM code and ASL code.
  Note:  Data structures defined in this protocol are not naturally aligned.
 
  @copyright
  Copyright 2004 - 2021 Intel Corporation. <BR>
 
  SPDX-License-Identifier: BSD-2-Clause-Patent
**/
 
#ifndef _EFI_GLOBAL_NVS_AREA_H_
#define _EFI_GLOBAL_NVS_AREA_H_
 
//
// Global NVS Area Protocol GUID
//
#define EFI_GLOBAL_NVS_AREA_PROTOCOL_GUID { 0x74e1e48, 0x8132, 0x47a1, 0x8c, 0x2c, 0x3f, 0x14, 0xad, 0x9a, 0x66, 0xdc }
//
// Because of ASL constrains cannot use MAX_SOCKET and MAX_LOGIC_IIO_STACK to configure ACPI objects. The symbols
// below are the largest values of MAX_SOCKET or MAX_LOGIC_IIO_STACK currently supported in BiosParameterRegion.asi.
//
#define NVS_MAX_SOCKETS          8
#define NVS_MAX_LOGIC_IIO_STACKS 14
 
#if NVS_MAX_SOCKETS < MAX_SOCKET
#error "Must update NVS_MAX_SOCKETS and BiosParameterRegion.asi to handle so many sockets"
#endif
#if NVS_MAX_LOGIC_IIO_STACKS < MAX_LOGIC_IIO_STACK
#error "Must update NVS_MAX_LOGIC_IIO_STACKS and BiosParameterRegion.asi to handle so many stacks"
#endif
 
//
// Extern the GUID for protocol users.
//
extern EFI_GUID gEfiGlobalNvsAreaProtocolGuid;
 
//
// Global NVS Area definition
// BIOS parameters region provided by POST code to ASL, defined as PSYS in BiosParametersRegion.asi
//
#pragma pack (1)
 
typedef struct {
  // IOAPIC Start
  UINT32  PlatformId;
  UINT64  IoApicEnable;
  UINT8   ApicIdOverrided     :1;
  UINT8   PchIoApic_24_119    :1;
  UINT8   Cpx4Detect          :1;
  UINT8   Reserved0           :5;
  // IOAPIC End
 
  // Power Management Start
  UINT8   TpmEnable           :1;
  UINT8   CStateEnable        :1;
  UINT8   C3Enable            :1;
  UINT8   C6Enable            :1;
  UINT8   C7Enable            :1;
  UINT8   MonitorMwaitEnable  :1;
  UINT8   PStateEnable        :1;
  UINT8   EmcaEn              :1;
  UINT8   HWAllEnable         :2;
  UINT8   KBPresent           :1;
  UINT8   MousePresent        :1;
  UINT8   TStateEnable        :1;
  UINT8   TStateFineGrained   :1;
  UINT8   OSCX                :1;
  UINT8   Reserved1           :1;
  // Power Management End
 
  // RAS Start
  UINT8   CpuChangeMask;
  UINT8   IioChangeMask;
  UINT16  IioPresentBitMask[NVS_MAX_SOCKETS];
  UINT32  SocketBitMask;                       // make sure this is at 4byte boundary
  UINT8   CpuCoreThreadsCount;
  UINT32  ProcessorApicIdBase[NVS_MAX_SOCKETS];
  UINT64  ProcessorBitMask[NVS_MAX_SOCKETS];   // cores 0-63 for each socket
  UINT64  ProcessorBitMaskHi[NVS_MAX_SOCKETS]; // cores 64-127 for each socket
  UINT32  MmCfg;
  UINT32  TsegSize;
  UINT32  SmiRequestParam[4];
  UINT32  SciRequestParam[4];
  UINT64  MigrationActionRegionAddress;
  UINT8   Cpu0Uuid[16];
  UINT8   Cpu1Uuid[16];
  UINT8   Cpu2Uuid[16];
  UINT8   Cpu3Uuid[16];
  UINT8   Cpu4Uuid[16];
  UINT8   Cpu5Uuid[16];
  UINT8   Cpu6Uuid[16];
  UINT8   Cpu7Uuid[16];
  UINT8   CpuSpareMask;
  UINT8   Mem0Uuid[16];
  UINT8   Mem1Uuid[16];
  UINT8   Mem2Uuid[16];
  UINT8   Mem3Uuid[16];
  UINT8   Mem4Uuid[16];
  UINT8   Mem5Uuid[16];
  UINT8   Mem6Uuid[16];
  UINT8   Mem7Uuid[16];
  UINT8   Mem8Uuid[16];
  UINT8   Mem9Uuid[16];
  UINT8   Mem10Uuid[16];
  UINT8   Mem11Uuid[16];
  UINT8   Mem12Uuid[16];
  UINT8   Mem13Uuid[16];
  UINT8   Mem14Uuid[16];
  UINT8   Mem15Uuid[16];
  UINT64  EmcaL1DirAddr;
  UINT32  ProcessorId;
  UINT8   PcieAcpiHotPlugEnable;
  UINT8   WheaEnabled;
  UINT8   WheaSci;
  UINT8   PropagateSerrOption;
  UINT8   PropagatePerrOption;
  // RAS End
 
  // VTD Start
  UINT64  DrhdAddr[3];
  UINT64  AtsrAddr[3];
  UINT64  RhsaAddr[3];
  // VTD End
 
  // SR-IOV WA Start
  UINT8   WmaaSICaseValue;
  UINT16  WmaaSISeg;
  UINT8   WmaaSIBus;
  UINT8   WmaaSIDevice;
  UINT8   WmaaSIFunction;
  UINT8   WmaaSISts;
  UINT8   WheaSupportEn;
  // SR-IOV End
 
  // BIOS Guard Start
  UINT64  BiosGuardMemAddress;
  UINT8   BiosGuardMemSize;
  UINT16  BiosGuardIoTrapAddress;
  UINT8   CpuSkuNumOfBitShift;
  // BIOS Guard End
 
  // USB3 Start
  UINT8   XhciMode;
  UINT8   HostAlertVector1;
  UINT8   HostAlertVector2;
  // USB3 End
 
  // HWPM Start
  UINT8   HWPMEnable          :2; // HWPM
  UINT8   Reserved3           :1; // reserved bit
  UINT8   HwpInterrupt        :1; // HWP Interrupt
  UINT8   Reserved2           :4; // reserved bits
  // HWPM End
 
  // SGX Start
  UINT8  SgxStatus;
  UINT64 EpcLength[8];            // MAX_IMC * MAX_SOCKET
  UINT64 EpcBaseAddress[8];       // MAX_IMC * MAX_SOCKET
  // SGX End
 
  // PCIe Multi-Seg Start
  UINT8   BusBase[NVS_MAX_SOCKETS][NVS_MAX_LOGIC_IIO_STACKS]; // PCI bus base number for each stack
  UINT8   PcieMultiSegSupport;    // Enable /Disable switch
  UINT8   PcieSegNum[NVS_MAX_SOCKETS]; // PCI segment number array for each socket
  // PCIe Multi-seg end
 
  UINT8   SncAnd2Cluster;         // 0 - SNC disabled, 2 - SNC enabled (2 clusters), 4 - SNC enabled (4 clusters)
 
  // XTU Start
  UINT32  XTUBaseAddress;         // 193 XTU Base Address
  UINT32  XTUSize;                // 197 XTU Entries Size
  UINT32  XMPBaseAddress;         // 201 XTU Base Address
  UINT8   DDRReferenceFreq;       // 205 DDR Reference Frequency
  UINT8   Rtd3Support;            // 206 Runtime D3 support.
  UINT8   Rtd3P0dl;               // 207 User selctable Delay for Device D0 transition.
  UINT8   Rtd3P3dl;               // 208 User selctable Delay for Device D0 transition.
  // XTU End
 
  // FPGA Root Port Bus
  UINT8   FpgaBusBase[8];
  UINT8   FpgaBusLimit[8];
 
  // FPGA present bit
  UINT8   FpgaPresent[8];
 
  // FPGA Resource Allocation
  UINT32  VFPBMemBase[8];
  UINT32  VFPBMemLimit[8];
 
  // FPGA KTI present bitmap
  UINT32  FpgaKtiPresent;
  // FPGA Bus for KTI
  UINT8   FpgaKtiBase[8];
 
  UINT16  PmBase;                  // ACPI IO Base Address
  UINT8   DebugModeIndicator;      // Debug Mode Indicator
  UINT8   IioPcieRpCapOffset;      // IIO PCIe root port PCIe Capability offset
  UINT8   ArtTscLinkFlag;          // Flag to indicate if TSC is linked to ART
} BIOS_ACPI_PARAM;
 
#pragma pack ()
 
//
// Global NVS Area Protocol
//
typedef struct _EFI_GLOBAL_NVS_AREA_PROTOCOL {
  BIOS_ACPI_PARAM     *Area;
} EFI_GLOBAL_NVS_AREA_PROTOCOL;
 
#endif