1 | /** @file
|
---|
2 |
|
---|
3 | Copyright (c) 2024, Arm Limited. All rights reserved.<BR>
|
---|
4 | Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.<BR>
|
---|
5 | Copyright (c) 2024 Advanced Micro Devices, Inc. All rights reserved.
|
---|
6 |
|
---|
7 | SPDX-License-Identifier: BSD-2-Clause-Patent
|
---|
8 |
|
---|
9 | @par Glossary:
|
---|
10 | - Cm or CM - Configuration Manager
|
---|
11 | - Obj or OBJ - Object
|
---|
12 | - Std or STD - Standard
|
---|
13 | **/
|
---|
14 |
|
---|
15 | #ifndef ARCH_COMMON_NAMESPACE_OBJECTS_H_
|
---|
16 | #define ARCH_COMMON_NAMESPACE_OBJECTS_H_
|
---|
17 |
|
---|
18 | #include <AcpiObjects.h>
|
---|
19 | #include <StandardNameSpaceObjects.h>
|
---|
20 |
|
---|
21 | #include <IndustryStandard/Tpm2Acpi.h>
|
---|
22 |
|
---|
23 | /** The EARCH_COMMON_OBJECT_ID enum describes the Object IDs
|
---|
24 | in the Arch Common Namespace
|
---|
25 | */
|
---|
26 | typedef enum ArchCommonObjectID {
|
---|
27 | EArchCommonObjReserved, ///< 0 - Reserved
|
---|
28 | EArchCommonObjPowerManagementProfileInfo, ///< 1 - Power Management Profile Info
|
---|
29 | EArchCommonObjSerialPortInfo, ///< 2 - Generic Serial Port Info
|
---|
30 | EArchCommonObjConsolePortInfo, ///< 3 - Serial Console Port Info
|
---|
31 | EArchCommonObjSerialDebugPortInfo, ///< 4 - Serial Debug Port Info
|
---|
32 | EArchCommonObjHypervisorVendorIdentity, ///< 5 - Hypervisor Vendor Id
|
---|
33 | EArchCommonObjFixedFeatureFlags, ///< 6 - Fixed feature flags for FADT
|
---|
34 | EArchCommonObjCmRef, ///< 7 - CM Object Reference
|
---|
35 | EArchCommonObjPciConfigSpaceInfo, ///< 8 - PCI Configuration Space Info
|
---|
36 | EArchCommonObjPciAddressMapInfo, ///< 9 - Pci Address Map Info
|
---|
37 | EArchCommonObjPciInterruptMapInfo, ///< 10 - Pci Interrupt Map Info
|
---|
38 | EArchCommonObjMemoryAffinityInfo, ///< 11 - Memory Affinity Info
|
---|
39 | EArchCommonObjDeviceHandleAcpi, ///< 12 - Device Handle Acpi
|
---|
40 | EArchCommonObjDeviceHandlePci, ///< 13 - Device Handle Pci
|
---|
41 | EArchCommonObjGenericInitiatorAffinityInfo, ///< 14 - Generic Initiator Affinity
|
---|
42 | EArchCommonObjLpiInfo, ///< 15 - Lpi Info
|
---|
43 | EArchCommonObjProcHierarchyInfo, ///< 16 - Processor Hierarchy Info
|
---|
44 | EArchCommonObjCacheInfo, ///< 17 - Cache Info
|
---|
45 | EArchCommonObjCpcInfo, ///< 18 - Continuous Performance Control Info
|
---|
46 | EArchCommonObjPccSubspaceType0Info, ///< 19 - Pcc Subspace Type 0 Info
|
---|
47 | EArchCommonObjPccSubspaceType1Info, ///< 20 - Pcc Subspace Type 1 Info
|
---|
48 | EArchCommonObjPccSubspaceType2Info, ///< 21 - Pcc Subspace Type 2 Info
|
---|
49 | EArchCommonObjPccSubspaceType3Info, ///< 22 - Pcc Subspace Type 3 Info
|
---|
50 | EArchCommonObjPccSubspaceType4Info, ///< 23 - Pcc Subspace Type 4 Info
|
---|
51 | EArchCommonObjPccSubspaceType5Info, ///< 24 - Pcc Subspace Type 5 Info
|
---|
52 | EArchCommonObjPsdInfo, ///< 25 - P-State Dependency (PSD) Info
|
---|
53 | EArchCommonObjTpm2InterfaceInfo, ///< 26 - TPM Interface Info
|
---|
54 | EArchCommonObjSpmiInterfaceInfo, ///< 27 - SPMI Interface Info
|
---|
55 | EArchCommonObjSpmiInterruptDeviceInfo, ///< 28 - SPMI Interrupt and Device Info
|
---|
56 | EArchCommonObjMax
|
---|
57 | } EARCH_COMMON_OBJECT_ID;
|
---|
58 |
|
---|
59 | #pragma pack(1)
|
---|
60 |
|
---|
61 | /** A structure that describes the
|
---|
62 | Power Management Profile Information for the Platform.
|
---|
63 |
|
---|
64 | ID: EArchCommonObjPowerManagementProfileInfo
|
---|
65 | */
|
---|
66 | typedef struct CmArchCommonPowerManagementProfileInfo {
|
---|
67 | /** This is the Preferred_PM_Profile field of the FADT Table
|
---|
68 | described in the ACPI Specification
|
---|
69 | */
|
---|
70 | UINT8 PowerManagementProfile;
|
---|
71 | } CM_ARCH_COMMON_POWER_MANAGEMENT_PROFILE_INFO;
|
---|
72 |
|
---|
73 | /** A structure that describes the
|
---|
74 | Serial Port information for the Platform.
|
---|
75 |
|
---|
76 | ID: EArchCommonObjConsolePortInfo or
|
---|
77 | EArchCommonObjSerialDebugPortInfo or
|
---|
78 | EArchCommonObjSerialPortInfo
|
---|
79 | */
|
---|
80 | typedef struct EArchCommonSerialPortInfo {
|
---|
81 | /// The physical base address for the serial port
|
---|
82 | UINT64 BaseAddress;
|
---|
83 |
|
---|
84 | /** The serial port interrupt.
|
---|
85 | 0 indicates that the serial port does not
|
---|
86 | have an interrupt wired.
|
---|
87 | */
|
---|
88 | UINT32 Interrupt;
|
---|
89 |
|
---|
90 | /// The serial port baud rate
|
---|
91 | UINT64 BaudRate;
|
---|
92 |
|
---|
93 | /// The serial port clock
|
---|
94 | UINT32 Clock;
|
---|
95 |
|
---|
96 | /// Serial Port subtype
|
---|
97 | UINT16 PortSubtype;
|
---|
98 |
|
---|
99 | /// The Base address length
|
---|
100 | UINT64 BaseAddressLength;
|
---|
101 |
|
---|
102 | /// The access size
|
---|
103 | UINT8 AccessSize;
|
---|
104 | } CM_ARCH_COMMON_SERIAL_PORT_INFO;
|
---|
105 |
|
---|
106 | /** A structure that describes the
|
---|
107 | Hypervisor Vendor ID information for the Platform.
|
---|
108 |
|
---|
109 | ID: EArchCommonObjHypervisorVendorIdentity
|
---|
110 | */
|
---|
111 | typedef struct CmArchCommonHypervisorVendorIdentity {
|
---|
112 | /// The hypervisor Vendor ID
|
---|
113 | UINT64 HypervisorVendorId;
|
---|
114 | } CM_ARCH_COMMON_HYPERVISOR_VENDOR_ID;
|
---|
115 |
|
---|
116 | /** A structure that describes the
|
---|
117 | Fixed feature flags for the Platform.
|
---|
118 |
|
---|
119 | ID: EArchCommonObjFixedFeatureFlags
|
---|
120 | */
|
---|
121 | typedef struct CmArchCommonFixedFeatureFlags {
|
---|
122 | /// The Fixed feature flags
|
---|
123 | UINT32 Flags;
|
---|
124 | } CM_ARCH_COMMON_FIXED_FEATURE_FLAGS;
|
---|
125 |
|
---|
126 | /** A structure that describes a reference to another Configuration Manager
|
---|
127 | object.
|
---|
128 |
|
---|
129 | This is useful for creating an array of reference tokens. The framework
|
---|
130 | can then query the configuration manager for these arrays using the
|
---|
131 | object ID EArchCommonObjCmRef.
|
---|
132 |
|
---|
133 | This can be used is to represent one-to-many relationships between objects.
|
---|
134 |
|
---|
135 | ID: EArchCommonObjCmRef
|
---|
136 | */
|
---|
137 | typedef struct CmArchCommonObjRef {
|
---|
138 | /// Token of the CM object being referenced
|
---|
139 | CM_OBJECT_TOKEN ReferenceToken;
|
---|
140 | } CM_ARCH_COMMON_OBJ_REF;
|
---|
141 |
|
---|
142 | /** A structure that describes the
|
---|
143 | PCI Configuration Space information for the Platform.
|
---|
144 |
|
---|
145 | ID: EArchCommonObjPciConfigSpaceInfo
|
---|
146 | */
|
---|
147 | typedef struct CmArchCommonPciConfigSpaceInfo {
|
---|
148 | /// The physical base address for the PCI segment
|
---|
149 | UINT64 BaseAddress;
|
---|
150 |
|
---|
151 | /// The PCI segment group number
|
---|
152 | UINT16 PciSegmentGroupNumber;
|
---|
153 |
|
---|
154 | /// The start bus number
|
---|
155 | UINT8 StartBusNumber;
|
---|
156 |
|
---|
157 | /// The end bus number
|
---|
158 | UINT8 EndBusNumber;
|
---|
159 |
|
---|
160 | /// Optional field: Reference Token for address mapping.
|
---|
161 | /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure.
|
---|
162 | CM_OBJECT_TOKEN AddressMapToken;
|
---|
163 |
|
---|
164 | /// Optional field: Reference Token for interrupt mapping.
|
---|
165 | /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure.
|
---|
166 | CM_OBJECT_TOKEN InterruptMapToken;
|
---|
167 | } CM_ARCH_COMMON_PCI_CONFIG_SPACE_INFO;
|
---|
168 |
|
---|
169 | /** A structure that describes a PCI Address Map.
|
---|
170 |
|
---|
171 | The memory-ranges used by the PCI bus are described by this object.
|
---|
172 |
|
---|
173 | ID: EArchCommonObjPciAddressMapInfo
|
---|
174 | */
|
---|
175 | typedef struct CmArchCommonPciAddressMapInfo {
|
---|
176 | /** Pci address space code
|
---|
177 |
|
---|
178 | Available values are:
|
---|
179 | - 0: Configuration Space
|
---|
180 | - 1: I/O Space
|
---|
181 | - 2: 32-bit-address Memory Space
|
---|
182 | - 3: 64-bit-address Memory Space
|
---|
183 | */
|
---|
184 | UINT8 SpaceCode;
|
---|
185 |
|
---|
186 | /// PCI address
|
---|
187 | UINT64 PciAddress;
|
---|
188 |
|
---|
189 | /// Cpu address
|
---|
190 | UINT64 CpuAddress;
|
---|
191 |
|
---|
192 | /// Address size
|
---|
193 | UINT64 AddressSize;
|
---|
194 | } CM_ARCH_COMMON_PCI_ADDRESS_MAP_INFO;
|
---|
195 |
|
---|
196 | /** A structure that describes the
|
---|
197 | Generic Interrupts.
|
---|
198 | */
|
---|
199 | typedef struct CmArchCommonGenericInterrupt {
|
---|
200 | /// Interrupt number
|
---|
201 | UINT32 Interrupt;
|
---|
202 |
|
---|
203 | /// Flags
|
---|
204 | /// BIT0: 0: Interrupt is Level triggered
|
---|
205 | /// 1: Interrupt is Edge triggered
|
---|
206 | /// BIT1: 0: Interrupt is Active high
|
---|
207 | /// 1: Interrupt is Active low
|
---|
208 | UINT32 Flags;
|
---|
209 | } CM_ARCH_COMMON_GENERIC_INTERRUPT;
|
---|
210 |
|
---|
211 | /** A structure that describes a PCI Interrupt Map.
|
---|
212 |
|
---|
213 | The legacy PCI interrupts used by PCI devices are described by this object.
|
---|
214 |
|
---|
215 | Cf Devicetree Specification - Release v0.3
|
---|
216 | s2.4.3 "Interrupt Nexus Properties"
|
---|
217 |
|
---|
218 | ID: EArchCommonObjPciInterruptMapInfo
|
---|
219 | */
|
---|
220 | typedef struct CmArchCommonPciInterruptMapInfo {
|
---|
221 | /// Pci Bus.
|
---|
222 | /// Value on 8 bits (max 255).
|
---|
223 | UINT8 PciBus;
|
---|
224 |
|
---|
225 | /// Pci Device.
|
---|
226 | /// Value on 5 bits (max 31).
|
---|
227 | UINT8 PciDevice;
|
---|
228 |
|
---|
229 | /** PCI interrupt
|
---|
230 |
|
---|
231 | ACPI bindings are used:
|
---|
232 | Cf. ACPI 6.4, s6.2.13 _PRT (PCI Routing Table):
|
---|
233 | "0-INTA, 1-INTB, 2-INTC, 3-INTD"
|
---|
234 |
|
---|
235 | Device-tree bindings are shifted by 1:
|
---|
236 | "INTA=1, INTB=2, INTC=3, INTD=4"
|
---|
237 | */
|
---|
238 | UINT8 PciInterrupt;
|
---|
239 |
|
---|
240 | /** Interrupt controller interrupt.
|
---|
241 |
|
---|
242 | Cf Devicetree Specification - Release v0.3
|
---|
243 | s2.4.3 "Interrupt Nexus Properties": "parent interrupt specifier"
|
---|
244 | */
|
---|
245 | CM_ARCH_COMMON_GENERIC_INTERRUPT IntcInterrupt;
|
---|
246 | } CM_ARCH_COMMON_PCI_INTERRUPT_MAP_INFO;
|
---|
247 |
|
---|
248 | /** A structure that describes the Memory Affinity Structure (Type 1) in SRAT
|
---|
249 |
|
---|
250 | ID: EArchCommonObjMemoryAffinityInfo
|
---|
251 | */
|
---|
252 | typedef struct CmArchCommonMemoryAffinityInfo {
|
---|
253 | /// The proximity domain to which the "range of memory" belongs.
|
---|
254 | UINT32 ProximityDomain;
|
---|
255 |
|
---|
256 | /// Base Address
|
---|
257 | UINT64 BaseAddress;
|
---|
258 |
|
---|
259 | /// Length
|
---|
260 | UINT64 Length;
|
---|
261 |
|
---|
262 | /// Flags
|
---|
263 | UINT32 Flags;
|
---|
264 | } CM_ARCH_COMMON_MEMORY_AFFINITY_INFO;
|
---|
265 |
|
---|
266 | /** A structure that describes the ACPI Device Handle (Type 0) in the
|
---|
267 | Generic Initiator Affinity structure in SRAT
|
---|
268 |
|
---|
269 | ID: EArchCommonObjDeviceHandleAcpi
|
---|
270 | */
|
---|
271 | typedef struct CmArchCommonDeviceHandleAcpi {
|
---|
272 | /// Hardware ID
|
---|
273 | UINT64 Hid;
|
---|
274 |
|
---|
275 | /// Unique Id
|
---|
276 | UINT32 Uid;
|
---|
277 | } CM_ARCH_COMMON_DEVICE_HANDLE_ACPI;
|
---|
278 |
|
---|
279 | /** A structure that describes the PCI Device Handle (Type 1) in the
|
---|
280 | Generic Initiator Affinity structure in SRAT
|
---|
281 |
|
---|
282 | ID: EArchCommonObjDeviceHandlePci
|
---|
283 | */
|
---|
284 | typedef struct CmArchCommonDeviceHandlePci {
|
---|
285 | /// PCI Segment Number
|
---|
286 | UINT16 SegmentNumber;
|
---|
287 |
|
---|
288 | /// PCI Bus Number - Max 256 busses (Bits 15:8 of BDF)
|
---|
289 | UINT8 BusNumber;
|
---|
290 |
|
---|
291 | /// PCI Device Number - Max 32 devices (Bits 7:3 of BDF)
|
---|
292 | UINT8 DeviceNumber;
|
---|
293 |
|
---|
294 | /// PCI Function Number - Max 8 functions (Bits 2:0 of BDF)
|
---|
295 | UINT8 FunctionNumber;
|
---|
296 | } CM_ARCH_COMMON_DEVICE_HANDLE_PCI;
|
---|
297 |
|
---|
298 | /** A structure that describes the Generic Initiator Affinity structure in SRAT
|
---|
299 |
|
---|
300 | ID: EArchCommonObjGenericInitiatorAffinityInfo
|
---|
301 | */
|
---|
302 | typedef struct CmArchCommonGenericInitiatorAffinityInfo {
|
---|
303 | /// The proximity domain to which the generic initiator belongs.
|
---|
304 | UINT32 ProximityDomain;
|
---|
305 |
|
---|
306 | /// Flags
|
---|
307 | UINT32 Flags;
|
---|
308 |
|
---|
309 | /// Device Handle Type
|
---|
310 | UINT8 DeviceHandleType;
|
---|
311 |
|
---|
312 | /// Reference Token for the Device Handle
|
---|
313 | CM_OBJECT_TOKEN DeviceHandleToken;
|
---|
314 | } CM_ARCH_COMMON_GENERIC_INITIATOR_AFFINITY_INFO;
|
---|
315 |
|
---|
316 | /** A structure that describes the Lpi information.
|
---|
317 |
|
---|
318 | The Low Power Idle states are described in DSDT/SSDT and associated
|
---|
319 | to cpus/clusters in the cpu topology.
|
---|
320 |
|
---|
321 | ID: EArchCommonObjLpiInfo
|
---|
322 | */
|
---|
323 | typedef struct CmArchCommonLpiInfo {
|
---|
324 | /** Minimum Residency. Time in microseconds after which a
|
---|
325 | state becomes more energy efficient than any shallower state.
|
---|
326 | */
|
---|
327 | UINT32 MinResidency;
|
---|
328 |
|
---|
329 | /** Worst case time in microseconds from a wake interrupt
|
---|
330 | being asserted to the return to a running state
|
---|
331 | */
|
---|
332 | UINT32 WorstCaseWakeLatency;
|
---|
333 |
|
---|
334 | /** Flags.
|
---|
335 | */
|
---|
336 | UINT32 Flags;
|
---|
337 |
|
---|
338 | /** Architecture specific context loss flags.
|
---|
339 | */
|
---|
340 | UINT32 ArchFlags;
|
---|
341 |
|
---|
342 | /** Residency counter frequency in cycles-per-second (Hz).
|
---|
343 | */
|
---|
344 | UINT32 ResCntFreq;
|
---|
345 |
|
---|
346 | /** Every shallower power state in the parent is also enabled.
|
---|
347 | */
|
---|
348 | UINT32 EnableParentState;
|
---|
349 |
|
---|
350 | /** The EntryMethod _LPI field can be described as an integer
|
---|
351 | or in a Register resource data descriptor.
|
---|
352 |
|
---|
353 | If IsInteger is TRUE, the IntegerEntryMethod field is used.
|
---|
354 | If IsInteger is FALSE, the RegisterEntryMethod field is used.
|
---|
355 | */
|
---|
356 | BOOLEAN IsInteger;
|
---|
357 |
|
---|
358 | /** EntryMethod described as an Integer.
|
---|
359 | */
|
---|
360 | UINT64 IntegerEntryMethod;
|
---|
361 |
|
---|
362 | /** EntryMethod described as a EFI_ACPI_GENERIC_REGISTER_DESCRIPTOR.
|
---|
363 | */
|
---|
364 | EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE RegisterEntryMethod;
|
---|
365 |
|
---|
366 | /** Residency counter register.
|
---|
367 | */
|
---|
368 | EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE ResidencyCounterRegister;
|
---|
369 |
|
---|
370 | /** Usage counter register.
|
---|
371 | */
|
---|
372 | EFI_ACPI_6_3_GENERIC_ADDRESS_STRUCTURE UsageCounterRegister;
|
---|
373 |
|
---|
374 | /** String representing the Lpi state
|
---|
375 | */
|
---|
376 | CHAR8 StateName[16];
|
---|
377 | } CM_ARCH_COMMON_LPI_INFO;
|
---|
378 |
|
---|
379 | /** A structure that describes the Processor Hierarchy Node (Type 0) in PPTT
|
---|
380 |
|
---|
381 | ID: EArchCommonObjProcHierarchyInfo
|
---|
382 | */
|
---|
383 | typedef struct CmArchCommonProcHierarchyInfo {
|
---|
384 | /// A unique token used to identify this object
|
---|
385 | CM_OBJECT_TOKEN Token;
|
---|
386 | /// Processor structure flags (ACPI 6.3 - January 2019, PPTT, Table 5-155)
|
---|
387 | UINT32 Flags;
|
---|
388 | /// Token for the parent CM_ARCH_COMMON_PROC_HIERARCHY_INFO object in the processor
|
---|
389 | /// topology. A value of CM_NULL_TOKEN means this node has no parent.
|
---|
390 | CM_OBJECT_TOKEN ParentToken;
|
---|
391 | /// Token of the associated object which has the corresponding ACPI Processor
|
---|
392 | /// ID, e.g. for Arm systems this is a reference to CM_ARM_GICC_INFO object.
|
---|
393 | /// A value of CM_NULL_TOKEN means this node represents a group of associated
|
---|
394 | /// processors and it does not have an associated CPU interface.
|
---|
395 | CM_OBJECT_TOKEN AcpiIdObjectToken;
|
---|
396 | /// Number of resources private to this Node
|
---|
397 | UINT32 NoOfPrivateResources;
|
---|
398 | /// Token of the array which contains references to the resources private to
|
---|
399 | /// this CM_ARCH_COMMON_PROC_HIERARCHY_INFO instance. This field is ignored if
|
---|
400 | /// the NoOfPrivateResources is 0, in which case it is recommended to set
|
---|
401 | /// this field to CM_NULL_TOKEN.
|
---|
402 | CM_OBJECT_TOKEN PrivateResourcesArrayToken;
|
---|
403 | /// Optional field: Reference Token for the Lpi state of this processor.
|
---|
404 | /// Token identifying a CM_ARCH_COMMON_OBJ_REF structure, itself referencing
|
---|
405 | /// CM_ARCH_COMMON_LPI_INFO objects.
|
---|
406 | CM_OBJECT_TOKEN LpiToken;
|
---|
407 | /// Set to TRUE if UID should override index for name and _UID
|
---|
408 | /// for processor container nodes and name of processors.
|
---|
409 | /// This should be consistently set for containers or processors to avoid
|
---|
410 | /// duplicate values
|
---|
411 | BOOLEAN OverrideNameUidEnabled;
|
---|
412 | /// If OverrideNameUidEnabled is TRUE then this value will be used for name of
|
---|
413 | /// processors and processor containers.
|
---|
414 | UINT16 OverrideName;
|
---|
415 | /// If OverrideNameUidEnabled is TRUE then this value will be used for
|
---|
416 | /// the UID of processor containers.
|
---|
417 | UINT32 OverrideUid;
|
---|
418 | } CM_ARCH_COMMON_PROC_HIERARCHY_INFO;
|
---|
419 |
|
---|
420 | /** A structure that describes the Cache Type Structure (Type 1) in PPTT
|
---|
421 |
|
---|
422 | ID: EArchCommonObjCacheInfo
|
---|
423 | */
|
---|
424 | typedef struct CmArchCommonCacheInfo {
|
---|
425 | /// A unique token used to identify this object
|
---|
426 | CM_OBJECT_TOKEN Token;
|
---|
427 | /// Reference token for the next level of cache that is private to the same
|
---|
428 | /// CM_ARCH_COMMON_PROC_HIERARCHY_INFO instance. A value of CM_NULL_TOKEN
|
---|
429 | /// means this entry represents the last cache level appropriate to the
|
---|
430 | /// processor hierarchy node structures using this entry.
|
---|
431 | CM_OBJECT_TOKEN NextLevelOfCacheToken;
|
---|
432 | /// Size of the cache in bytes
|
---|
433 | UINT32 Size;
|
---|
434 | /// Number of sets in the cache
|
---|
435 | UINT32 NumberOfSets;
|
---|
436 | /// Integer number of ways. The maximum associativity supported by
|
---|
437 | /// ACPI Cache type structure is limited to MAX_UINT8. However,
|
---|
438 | /// the maximum number of ways supported by the architecture is
|
---|
439 | /// PPTT_ARM_CCIDX_CACHE_ASSOCIATIVITY_MAX. Therfore this field
|
---|
440 | /// is 32-bit wide.
|
---|
441 | UINT32 Associativity;
|
---|
442 | /// Cache attributes (ACPI 6.4 - January 2021, PPTT, Table 5.140)
|
---|
443 | UINT8 Attributes;
|
---|
444 | /// Line size in bytes
|
---|
445 | UINT16 LineSize;
|
---|
446 | /// Unique ID for the cache
|
---|
447 | UINT32 CacheId;
|
---|
448 | } CM_ARCH_COMMON_CACHE_INFO;
|
---|
449 |
|
---|
450 | /** A structure that describes the Cpc information.
|
---|
451 |
|
---|
452 | Continuous Performance Control is described in DSDT/SSDT and associated
|
---|
453 | to cpus/clusters in the cpu topology.
|
---|
454 |
|
---|
455 | Unsupported Optional registers should be encoded with NULL resource
|
---|
456 | Register {(SystemMemory, 0, 0, 0, 0)}
|
---|
457 |
|
---|
458 | For values that support Integer or Buffer, integer will be used
|
---|
459 | if buffer is NULL resource.
|
---|
460 | If resource is not NULL then Integer must be 0
|
---|
461 |
|
---|
462 | Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control)
|
---|
463 |
|
---|
464 | ID: EArchCommonObjCpcInfo
|
---|
465 | */
|
---|
466 | typedef AML_CPC_INFO CM_ARCH_COMMON_CPC_INFO;
|
---|
467 |
|
---|
468 | /** A structure that describes a
|
---|
469 | PCC Mailbox Register.
|
---|
470 | */
|
---|
471 | typedef struct PccMailboxRegisterInfo {
|
---|
472 | /// GAS describing the Register.
|
---|
473 | EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE Register;
|
---|
474 |
|
---|
475 | /** Mask of bits to preserve when writing.
|
---|
476 |
|
---|
477 | This mask is also used for registers. The Register is only read
|
---|
478 | and there is no write mask required. E.g.:
|
---|
479 | - Error Status mask (Cf. PCC Subspace types 3/4/5).
|
---|
480 | - Command Complete Check mask (Cf. PCC Subspace types 3/4/5).
|
---|
481 | */
|
---|
482 | UINT64 PreserveMask;
|
---|
483 |
|
---|
484 | /// Mask of bits to set when writing.
|
---|
485 | UINT64 WriteMask;
|
---|
486 | } PCC_MAILBOX_REGISTER_INFO;
|
---|
487 |
|
---|
488 | /** A structure that describes the
|
---|
489 | PCC Subspace CHannel Timings.
|
---|
490 | */
|
---|
491 | typedef struct PccSubspaceChannelTimingInfo {
|
---|
492 | /// Expected latency to process a command, in microseconds.
|
---|
493 | UINT32 NominalLatency;
|
---|
494 |
|
---|
495 | /** Maximum number of periodic requests that the subspace channel can
|
---|
496 | support, reported in commands per minute. 0 indicates no limitation.
|
---|
497 |
|
---|
498 | This field is ignored for the PCC Subspace type 5 (HW Registers based).
|
---|
499 | */
|
---|
500 | UINT32 MaxPeriodicAccessRate;
|
---|
501 |
|
---|
502 | /** Minimum amount of time that OSPM must wait after the completion
|
---|
503 | of a command before issuing the next command, in microseconds.
|
---|
504 | */
|
---|
505 | UINT16 MinRequestTurnaroundTime;
|
---|
506 | } PCC_SUBSPACE_CHANNEL_TIMING_INFO;
|
---|
507 |
|
---|
508 | /** A structure that describes a
|
---|
509 | Generic PCC Subspace (Type 0).
|
---|
510 | */
|
---|
511 | typedef struct PccSubspaceGenericInfo {
|
---|
512 | /** Subspace Id.
|
---|
513 |
|
---|
514 | Cf. ACPI 6.4, s14.7 Referencing the PCC address space
|
---|
515 | Cf. s14.1.2 Platform Communications Channel Subspace Structures
|
---|
516 | The subspace ID of a PCC subspace is its index in the array of
|
---|
517 | subspace structures, starting with subspace 0.
|
---|
518 |
|
---|
519 | At most 256 subspaces are supported.
|
---|
520 | */
|
---|
521 | UINT8 SubspaceId;
|
---|
522 |
|
---|
523 | /// Table type (or subspace).
|
---|
524 | UINT8 Type;
|
---|
525 |
|
---|
526 | /// Base address of the shared memory range.
|
---|
527 | /// This field is ignored for the PCC Subspace type 5 (HW Registers based).
|
---|
528 | UINT64 BaseAddress;
|
---|
529 |
|
---|
530 | /// Address length.
|
---|
531 | UINT64 AddressLength;
|
---|
532 |
|
---|
533 | /// Doorbell Register.
|
---|
534 | PCC_MAILBOX_REGISTER_INFO DoorbellReg;
|
---|
535 |
|
---|
536 | /// Mailbox Timings.
|
---|
537 | PCC_SUBSPACE_CHANNEL_TIMING_INFO ChannelTiming;
|
---|
538 | } PCC_SUBSPACE_GENERIC_INFO;
|
---|
539 |
|
---|
540 | /** A structure that describes a
|
---|
541 | PCC Subspace of type 0 (Generic).
|
---|
542 |
|
---|
543 | ID: EArchCommonObjPccSubspaceType0Info
|
---|
544 | */
|
---|
545 | typedef PCC_SUBSPACE_GENERIC_INFO CM_ARCH_COMMON_PCC_SUBSPACE_TYPE0_INFO;
|
---|
546 |
|
---|
547 | /** A structure that describes a
|
---|
548 | PCC Subspace of type 1 (HW-Reduced).
|
---|
549 |
|
---|
550 | ID: EArchCommonObjPccSubspaceType1Info
|
---|
551 | */
|
---|
552 | typedef struct CmArchCommonPccSubspaceType1Info {
|
---|
553 | /** Generic Pcc information.
|
---|
554 |
|
---|
555 | The Subspace of Type0 contains information that can be re-used
|
---|
556 | in other Subspace types.
|
---|
557 | */
|
---|
558 | PCC_SUBSPACE_GENERIC_INFO GenericPccInfo;
|
---|
559 |
|
---|
560 | /// Platform Interrupt.
|
---|
561 | CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq;
|
---|
562 | } CM_ARCH_COMMON_PCC_SUBSPACE_TYPE1_INFO;
|
---|
563 |
|
---|
564 | /** A structure that describes a
|
---|
565 | PCC Subspace of type 2 (HW-Reduced).
|
---|
566 |
|
---|
567 | ID: EArchCommonObjPccSubspaceType2Info
|
---|
568 | */
|
---|
569 | typedef struct CmArchCommonPccSubspaceType2Info {
|
---|
570 | /** Generic Pcc information.
|
---|
571 |
|
---|
572 | The Subspace of Type0 contains information that can be re-used
|
---|
573 | in other Subspace types.
|
---|
574 | */
|
---|
575 | PCC_SUBSPACE_GENERIC_INFO GenericPccInfo;
|
---|
576 |
|
---|
577 | /// Platform Interrupt.
|
---|
578 | CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq;
|
---|
579 |
|
---|
580 | /// Platform Interrupt Register.
|
---|
581 | PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg;
|
---|
582 | } CM_ARCH_COMMON_PCC_SUBSPACE_TYPE2_INFO;
|
---|
583 |
|
---|
584 | /** A structure that describes a
|
---|
585 | PCC Subspace of type 3 (Extended)
|
---|
586 |
|
---|
587 | ID: EArchCommonObjPccSubspaceType3Info
|
---|
588 | */
|
---|
589 | typedef struct CmArchCommonPccSubspaceType3Info {
|
---|
590 | /** Generic Pcc information.
|
---|
591 |
|
---|
592 | The Subspace of Type0 contains information that can be re-used
|
---|
593 | in other Subspace types.
|
---|
594 | */
|
---|
595 | PCC_SUBSPACE_GENERIC_INFO GenericPccInfo;
|
---|
596 |
|
---|
597 | /// Platform Interrupt.
|
---|
598 | CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq;
|
---|
599 |
|
---|
600 | /// Platform Interrupt Register.
|
---|
601 | PCC_MAILBOX_REGISTER_INFO PlatIrqAckReg;
|
---|
602 |
|
---|
603 | /// Command Complete Check Register.
|
---|
604 | /// The WriteMask field is not used.
|
---|
605 | PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg;
|
---|
606 |
|
---|
607 | /// Command Complete Update Register.
|
---|
608 | PCC_MAILBOX_REGISTER_INFO CmdCompleteUpdateReg;
|
---|
609 |
|
---|
610 | /// Error Status Register.
|
---|
611 | /// The WriteMask field is not used.
|
---|
612 | PCC_MAILBOX_REGISTER_INFO ErrorStatusReg;
|
---|
613 | } CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO;
|
---|
614 |
|
---|
615 | /** A structure that describes a
|
---|
616 | PCC Subspace of type 4 (Extended)
|
---|
617 |
|
---|
618 | ID: EArchCommonObjPccSubspaceType4Info
|
---|
619 | */
|
---|
620 | typedef CM_ARCH_COMMON_PCC_SUBSPACE_TYPE3_INFO CM_ARCH_COMMON_PCC_SUBSPACE_TYPE4_INFO;
|
---|
621 |
|
---|
622 | /** A structure that describes a
|
---|
623 | PCC Subspace of type 5 (HW-Registers).
|
---|
624 |
|
---|
625 | ID: EArchCommonObjPccSubspaceType5Info
|
---|
626 | */
|
---|
627 | typedef struct CmArchCommonPccSubspaceType5Info {
|
---|
628 | /** Generic Pcc information.
|
---|
629 |
|
---|
630 | The Subspace of Type0 contains information that can be re-used
|
---|
631 | in other Subspace types.
|
---|
632 |
|
---|
633 | MaximumPeriodicAccessRate doesn't need to be populated for
|
---|
634 | this structure.
|
---|
635 | */
|
---|
636 | PCC_SUBSPACE_GENERIC_INFO GenericPccInfo;
|
---|
637 |
|
---|
638 | /// Version.
|
---|
639 | UINT16 Version;
|
---|
640 |
|
---|
641 | /// Platform Interrupt.
|
---|
642 | CM_ARCH_COMMON_GENERIC_INTERRUPT PlatIrq;
|
---|
643 |
|
---|
644 | /// Command Complete Check Register.
|
---|
645 | /// The WriteMask field is not used.
|
---|
646 | PCC_MAILBOX_REGISTER_INFO CmdCompleteCheckReg;
|
---|
647 |
|
---|
648 | /// Error Status Register.
|
---|
649 | /// The WriteMask field is not used.
|
---|
650 | PCC_MAILBOX_REGISTER_INFO ErrorStatusReg;
|
---|
651 | } CM_ARCH_COMMON_PCC_SUBSPACE_TYPE5_INFO;
|
---|
652 |
|
---|
653 | /** A structure that describes a
|
---|
654 | P-State Dependency (PSD) Info.
|
---|
655 |
|
---|
656 | Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency).
|
---|
657 |
|
---|
658 | ID: EArchCommonObjPsdInfo
|
---|
659 | */
|
---|
660 | typedef AML_PSD_INFO CM_ARCH_COMMON_PSD_INFO;
|
---|
661 |
|
---|
662 | /** A structure that describes TPM interface and access method.
|
---|
663 |
|
---|
664 | TCG ACPI Specification 2.0
|
---|
665 |
|
---|
666 | ID: EArchCommonObjTpm2InterfaceInfo
|
---|
667 | */
|
---|
668 | typedef struct CmArchCommonTpm2InterfaceInfo {
|
---|
669 | /** Platform Class
|
---|
670 | 0: Client platform
|
---|
671 | 1: Server platform
|
---|
672 | */
|
---|
673 | UINT16 PlatformClass;
|
---|
674 |
|
---|
675 | /** Physical address of the Control Area */
|
---|
676 | UINT64 AddressOfControlArea;
|
---|
677 |
|
---|
678 | /** The Start Method selector determines which mechanism the
|
---|
679 | device driver uses to notify the TPM 2.0 device that a
|
---|
680 | command is available for processing.
|
---|
681 | */
|
---|
682 | UINT32 StartMethod;
|
---|
683 |
|
---|
684 | /** The number of bytes stored in StartMethodParameters[] */
|
---|
685 | UINT8 StartMethodParametersSize;
|
---|
686 |
|
---|
687 | /** Start method specific parameters */
|
---|
688 | UINT8 StartMethodParameters[EFI_TPM2_ACPI_TABLE_START_METHOD_SPECIFIC_PARAMETERS_MAX_SIZE];
|
---|
689 |
|
---|
690 | /** Log Area Minimum Length */
|
---|
691 | UINT32 Laml;
|
---|
692 |
|
---|
693 | /** Log Area Start Address */
|
---|
694 | UINT64 Lasa;
|
---|
695 | } CM_ARCH_COMMON_TPM2_INTERFACE_INFO;
|
---|
696 |
|
---|
697 | /** A structure that describes the
|
---|
698 | SPMI (Service Processor Management Interface) Info.
|
---|
699 |
|
---|
700 | ID: EArchCommonObjSpmiInterfaceInfo
|
---|
701 | */
|
---|
702 | typedef struct CmArchCommonObjSpmiInterfaceInfo {
|
---|
703 | /** Interface type */
|
---|
704 | UINT8 InterfaceType;
|
---|
705 |
|
---|
706 | /** Base address */
|
---|
707 | EFI_ACPI_6_5_GENERIC_ADDRESS_STRUCTURE BaseAddress;
|
---|
708 | } CM_ARCH_COMMON_SPMI_INTERFACE_INFO;
|
---|
709 |
|
---|
710 | /** A structure that describes the
|
---|
711 | SPMI (Service Processor Management Interface) Interrupt and Device Info.
|
---|
712 |
|
---|
713 | ID: EArchCommonObjSpmiInterruptDeviceInfo
|
---|
714 | */
|
---|
715 | typedef struct CmArchCommonObjSpmiInterruptDeviceInfo {
|
---|
716 | /** Interrupt type */
|
---|
717 | UINT8 InterruptType;
|
---|
718 |
|
---|
719 | /** GPE number */
|
---|
720 | UINT8 Gpe;
|
---|
721 |
|
---|
722 | /** PCI device flag */
|
---|
723 | UINT8 PciDeviceFlag;
|
---|
724 |
|
---|
725 | /** GSI number */
|
---|
726 | UINT32 GlobalSystemInterrupt;
|
---|
727 |
|
---|
728 | /** Uid of the device */
|
---|
729 | UINT32 DeviceId;
|
---|
730 | } CM_ARCH_COMMON_SPMI_INTERRUPT_DEVICE_INFO;
|
---|
731 | #pragma pack()
|
---|
732 |
|
---|
733 | #endif // ARCH_COMMON_NAMESPACE_OBJECTS_H_
|
---|