blob: a47b32a5cbdeb165d8554295dec980abd82cbcaa [file] [log] [blame]
Erik Schmauss95857632018-03-14 16:13:07 -07001/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
Bob Moorea8357b02010-01-22 19:07:36 +08002/******************************************************************************
3 *
Bob Moore5cf4d732011-03-18 09:49:41 +08004 * Name: actbl2.h - ACPI Table Definitions (tables not in ACPI spec)
Bob Moorea8357b02010-01-22 19:07:36 +08005 *
Bob Moore4441e552021-01-15 10:48:25 -08006 * Copyright (C) 2000 - 2021, Intel Corp.
Bob Moorea8357b02010-01-22 19:07:36 +08007 *
Erik Schmauss95857632018-03-14 16:13:07 -07008 *****************************************************************************/
Bob Moorea8357b02010-01-22 19:07:36 +08009
Bob Mooreb24aad42009-07-24 13:30:17 +080010#ifndef __ACTBL2_H__
11#define __ACTBL2_H__
12
13/*******************************************************************************
14 *
15 * Additional ACPI Tables (2)
16 *
17 * These tables are not consumed directly by the ACPICA subsystem, but are
18 * included here to support device drivers and the AML disassembler.
19 *
Bob Mooreb24aad42009-07-24 13:30:17 +080020 ******************************************************************************/
21
22/*
Bob Moore6e2d5eb2009-07-27 10:53:00 +080023 * Values for description table header signatures for tables defined in this
24 * file. Useful because they make it more difficult to inadvertently type in
25 * the wrong signature.
Bob Mooreb24aad42009-07-24 13:30:17 +080026 */
Bob Moore9401eaf2021-06-04 14:26:03 -070027#define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */
Lv Zheng874f6a72015-05-21 10:31:30 +080028#define ACPI_SIG_IORT "IORT" /* IO Remapping Table */
Bob Moore6e2d5eb2009-07-27 10:53:00 +080029#define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */
Bob Moored36d4e32014-04-30 10:04:06 +080030#define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080031#define ACPI_SIG_MADT "APIC" /* Multiple APIC Description Table */
Bob Mooreb24aad42009-07-24 13:30:17 +080032#define ACPI_SIG_MCFG "MCFG" /* PCI Memory Mapped Configuration table */
Bob Moore0e264f02010-03-03 16:30:35 +080033#define ACPI_SIG_MCHI "MCHI" /* Management Controller Host Interface table */
Erik Schmausse62f8222018-02-15 13:09:26 -080034#define ACPI_SIG_MPST "MPST" /* Memory Power State Table */
35#define ACPI_SIG_MSCT "MSCT" /* Maximum System Characteristics Table */
Bob Moore5132f2f2015-04-13 11:51:08 +080036#define ACPI_SIG_MSDM "MSDM" /* Microsoft Data Management Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080037#define ACPI_SIG_NFIT "NFIT" /* NVDIMM Firmware Interface Table */
38#define ACPI_SIG_PCCT "PCCT" /* Platform Communications Channel Table */
39#define ACPI_SIG_PDTT "PDTT" /* Platform Debug Trigger Table */
Erik Kaneda9f400332021-04-06 14:30:23 -070040#define ACPI_SIG_PHAT "PHAT" /* Platform Health Assessment Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080041#define ACPI_SIG_PMTT "PMTT" /* Platform Memory Topology Table */
42#define ACPI_SIG_PPTT "PPTT" /* Processor Properties Topology Table */
Erik Kanedad71df852021-06-04 14:26:06 -070043#define ACPI_SIG_PRMT "PRMT" /* Platform Runtime Mechanism Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080044#define ACPI_SIG_RASF "RASF" /* RAS Feature table */
Bob Moore536e35c2021-06-04 14:26:00 -070045#define ACPI_SIG_RGRT "RGRT" /* Regulatory Graphics Resource Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080046#define ACPI_SIG_SBST "SBST" /* Smart Battery Specification Table */
James Morse3bd38462017-08-03 14:26:25 +080047#define ACPI_SIG_SDEI "SDEI" /* Software Delegated Exception Interface Table */
Erik Schmausse62f8222018-02-15 13:09:26 -080048#define ACPI_SIG_SDEV "SDEV" /* Secure Devices table */
Cezary Rojewski88055d82020-03-27 15:21:08 -070049#define ACPI_SIG_NHLT "NHLT" /* Non-HDAudio Link Table */
Kuppuswamy Sathyanarayanan8288f692021-06-04 14:25:56 -070050#define ACPI_SIG_SVKL "SVKL" /* Storage Volume Key Location Table */
Bob Moore4461cf52010-05-31 09:22:12 +080051
Bob Mooreb24aad42009-07-24 13:30:17 +080052/*
53 * All tables must be byte-packed to match the ACPI specification, since
54 * the tables are provided by the system BIOS.
55 */
56#pragma pack(1)
57
58/*
Bob Moorebe030a52012-08-17 13:07:54 +080059 * Note: C bitfields are not used for this reason:
60 *
61 * "Bitfields are great and easy to read, but unfortunately the C language
62 * does not specify the layout of bitfields in memory, which means they are
63 * essentially useless for dealing with packed data in on-disk formats or
64 * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
65 * this decision was a design error in C. Ritchie could have picked an order
66 * and stuck with it." Norman Ramsey.
67 * See http://stackoverflow.com/a/1053662/41661
Bob Mooreb24aad42009-07-24 13:30:17 +080068 */
69
70/*******************************************************************************
71 *
Bob Mooree692fa12021-08-03 20:07:53 +020072 * AEST - Arm Error Source Table
73 *
74 * Conforms to: ACPI for the Armv8 RAS Extensions 1.1 Platform Design Document
75 * September 2020.
76 *
77 ******************************************************************************/
78
79struct acpi_table_aest {
80 struct acpi_table_header header;
81 void *node_array[];
82};
83
84/* Common Subtable header - one per Node Structure (Subtable) */
85
86struct acpi_aest_hdr {
87 u8 type;
88 u16 length;
89 u8 reserved;
90 u32 node_specific_offset;
91 u32 node_interface_offset;
92 u32 node_interrupt_offset;
93 u32 node_interrupt_count;
94 u64 timestamp_rate;
95 u64 reserved1;
96 u64 error_injection_rate;
97};
98
99/* Values for Type above */
100
101#define ACPI_AEST_PROCESSOR_ERROR_NODE 0
102#define ACPI_AEST_MEMORY_ERROR_NODE 1
103#define ACPI_AEST_SMMU_ERROR_NODE 2
104#define ACPI_AEST_VENDOR_ERROR_NODE 3
105#define ACPI_AEST_GIC_ERROR_NODE 4
106#define ACPI_AEST_NODE_TYPE_RESERVED 5 /* 5 and above are reserved */
107
108/*
109 * AEST subtables (Error nodes)
110 */
111
112/* 0: Processor Error */
113
114typedef struct acpi_aest_processor {
115 u32 processor_id;
116 u8 resource_type;
117 u8 reserved;
118 u8 flags;
119 u8 revision;
120 u64 processor_affinity;
121
122} acpi_aest_processor;
123
124/* Values for resource_type above, related structs below */
125
126#define ACPI_AEST_CACHE_RESOURCE 0
127#define ACPI_AEST_TLB_RESOURCE 1
128#define ACPI_AEST_GENERIC_RESOURCE 2
129#define ACPI_AEST_RESOURCE_RESERVED 3 /* 3 and above are reserved */
130
131/* 0R: Processor Cache Resource Substructure */
132
133typedef struct acpi_aest_processor_cache {
134 u32 cache_reference;
135 u32 reserved;
136
137} acpi_aest_processor_cache;
138
139/* Values for cache_type above */
140
141#define ACPI_AEST_CACHE_DATA 0
142#define ACPI_AEST_CACHE_INSTRUCTION 1
143#define ACPI_AEST_CACHE_UNIFIED 2
144#define ACPI_AEST_CACHE_RESERVED 3 /* 3 and above are reserved */
145
146/* 1R: Processor TLB Resource Substructure */
147
148typedef struct acpi_aest_processor_tlb {
149 u32 tlb_level;
150 u32 reserved;
151
152} acpi_aest_processor_tlb;
153
154/* 2R: Processor Generic Resource Substructure */
155
156typedef struct acpi_aest_processor_generic {
157 u8 *resource;
158
159} acpi_aest_processor_generic;
160
161/* 1: Memory Error */
162
163typedef struct acpi_aest_memory {
164 u32 srat_proximity_domain;
165
166} acpi_aest_memory;
167
168/* 2: Smmu Error */
169
170typedef struct acpi_aest_smmu {
171 u32 iort_node_reference;
172 u32 subcomponent_reference;
173
174} acpi_aest_smmu;
175
176/* 3: Vendor Defined */
177
178typedef struct acpi_aest_vendor {
179 u32 acpi_hid;
180 u32 acpi_uid;
181 u8 vendor_specific_data[16];
182
183} acpi_aest_vendor;
184
185/* 4: Gic Error */
186
187typedef struct acpi_aest_gic {
188 u32 interface_type;
189 u32 instance_id;
190
191} acpi_aest_gic;
192
193/* Values for interface_type above */
194
195#define ACPI_AEST_GIC_CPU 0
196#define ACPI_AEST_GIC_DISTRIBUTOR 1
197#define ACPI_AEST_GIC_REDISTRIBUTOR 2
198#define ACPI_AEST_GIC_ITS 3
199#define ACPI_AEST_GIC_RESERVED 4 /* 4 and above are reserved */
200
201/* Node Interface Structure */
202
203typedef struct acpi_aest_node_interface {
204 u8 type;
205 u8 reserved[3];
206 u32 flags;
207 u64 address;
208 u32 error_record_index;
209 u32 error_record_count;
210 u64 error_record_implemented;
211 u64 error_status_reporting;
212 u64 addressing_mode;
213
214} acpi_aest_node_interface;
215
216/* Values for Type field above */
217
218#define ACPI_AEST_NODE_SYSTEM_REGISTER 0
219#define ACPI_AEST_NODE_MEMORY_MAPPED 1
220#define ACPI_AEST_XFACE_RESERVED 2 /* 2 and above are reserved */
221
222/* Node Interrupt Structure */
223
224typedef struct acpi_aest_node_interrupt {
225 u8 type;
226 u8 reserved[2];
227 u8 flags;
228 u32 gsiv;
229 u8 iort_id;
230 u8 reserved1[3];
231
232} acpi_aest_node_interrupt;
233
234/* Values for Type field above */
235
236#define ACPI_AEST_NODE_FAULT_HANDLING 0
237#define ACPI_AEST_NODE_ERROR_RECOVERY 1
238#define ACPI_AEST_XRUPT_RESERVED 2 /* 2 and above are reserved */
239
240/*******************************************************************************
241 *
Bob Moore9401eaf2021-06-04 14:26:03 -0700242 * BDAT - BIOS Data ACPI Table
243 *
244 * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5
245 * Nov 2020
246 *
247 ******************************************************************************/
248
249struct acpi_table_bdat {
250 struct acpi_table_header header;
251 struct acpi_generic_address gas;
252};
253
254/*******************************************************************************
255 *
Lv Zheng874f6a72015-05-21 10:31:30 +0800256 * IORT - IO Remapping Table
257 *
258 * Conforms to "IO Remapping Table System Software on ARM Platforms",
Shameer Kolothum8e1fdd72021-04-06 14:30:27 -0700259 * Document number: ARM DEN 0049E.b, Feb 2021
Lv Zheng874f6a72015-05-21 10:31:30 +0800260 *
261 ******************************************************************************/
262
263struct acpi_table_iort {
264 struct acpi_table_header header;
265 u32 node_count;
266 u32 node_offset;
267 u32 reserved;
268};
269
270/*
271 * IORT subtables
272 */
273struct acpi_iort_node {
274 u8 type;
275 u16 length;
276 u8 revision;
Shameer Kolothum8e1fdd72021-04-06 14:30:27 -0700277 u32 identifier;
Lv Zheng874f6a72015-05-21 10:31:30 +0800278 u32 mapping_count;
279 u32 mapping_offset;
280 char node_data[1];
281};
282
283/* Values for subtable Type above */
284
285enum acpi_iort_node_type {
286 ACPI_IORT_NODE_ITS_GROUP = 0x00,
287 ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
288 ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
Al Stone4ac78ba2016-03-24 09:39:07 +0800289 ACPI_IORT_NODE_SMMU = 0x03,
Robin Murphya53eaef2018-06-01 12:06:39 -0700290 ACPI_IORT_NODE_SMMU_V3 = 0x04,
Shameer Kolothum8e1fdd72021-04-06 14:30:27 -0700291 ACPI_IORT_NODE_PMCG = 0x05,
292 ACPI_IORT_NODE_RMR = 0x06,
Lv Zheng874f6a72015-05-21 10:31:30 +0800293};
294
295struct acpi_iort_id_mapping {
296 u32 input_base; /* Lowest value in input range */
297 u32 id_count; /* Number of IDs */
298 u32 output_base; /* Lowest value in output range */
299 u32 output_reference; /* A reference to the output node */
300 u32 flags;
301};
302
303/* Masks for Flags field above for IORT subtable */
304
305#define ACPI_IORT_ID_SINGLE_MAPPING (1)
306
307struct acpi_iort_memory_access {
308 u32 cache_coherency;
309 u8 hints;
310 u16 reserved;
311 u8 memory_flags;
312};
313
314/* Values for cache_coherency field above */
315
316#define ACPI_IORT_NODE_COHERENT 0x00000001 /* The device node is fully coherent */
317#define ACPI_IORT_NODE_NOT_COHERENT 0x00000000 /* The device node is not coherent */
318
319/* Masks for Hints field above */
320
321#define ACPI_IORT_HT_TRANSIENT (1)
322#define ACPI_IORT_HT_WRITE (1<<1)
323#define ACPI_IORT_HT_READ (1<<2)
324#define ACPI_IORT_HT_OVERRIDE (1<<3)
325
326/* Masks for memory_flags field above */
327
328#define ACPI_IORT_MF_COHERENCY (1)
329#define ACPI_IORT_MF_ATTRIBUTES (1<<1)
330
331/*
332 * IORT node specific subtables
333 */
334struct acpi_iort_its_group {
335 u32 its_count;
Erik Schmaussc163f90c2019-02-15 13:36:19 -0800336 u32 identifiers[1]; /* GIC ITS identifier array */
Lv Zheng874f6a72015-05-21 10:31:30 +0800337};
338
339struct acpi_iort_named_component {
340 u32 node_flags;
341 u64 memory_properties; /* Memory access properties */
342 u8 memory_address_limit; /* Memory address size limit */
343 char device_name[1]; /* Path of namespace object */
344};
345
Robin Murphyd87be042018-06-01 12:06:38 -0700346/* Masks for Flags field above */
347
348#define ACPI_IORT_NC_STALL_SUPPORTED (1)
349#define ACPI_IORT_NC_PASID_BITS (31<<1)
350
Lv Zheng874f6a72015-05-21 10:31:30 +0800351struct acpi_iort_root_complex {
352 u64 memory_properties; /* Memory access properties */
353 u32 ats_attribute;
354 u32 pci_segment_number;
Robin Murphyd87be042018-06-01 12:06:38 -0700355 u8 memory_address_limit; /* Memory address size limit */
356 u8 reserved[3]; /* Reserved, must be zero */
Lv Zheng874f6a72015-05-21 10:31:30 +0800357};
358
Shameer Kolothum8e1fdd72021-04-06 14:30:27 -0700359/* Masks for ats_attribute field above */
Lv Zheng874f6a72015-05-21 10:31:30 +0800360
Shameer Kolothum8e1fdd72021-04-06 14:30:27 -0700361#define ACPI_IORT_ATS_SUPPORTED (1) /* The root complex ATS support */
362#define ACPI_IORT_PRI_SUPPORTED (1<<1) /* The root complex PRI support */
363#define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2) /* The root complex PASID forward support */
Lv Zheng874f6a72015-05-21 10:31:30 +0800364
365struct acpi_iort_smmu {
366 u64 base_address; /* SMMU base address */
367 u64 span; /* Length of memory range */
368 u32 model;
369 u32 flags;
370 u32 global_interrupt_offset;
371 u32 context_interrupt_count;
372 u32 context_interrupt_offset;
373 u32 pmu_interrupt_count;
374 u32 pmu_interrupt_offset;
375 u64 interrupts[1]; /* Interrupt array */
376};
377
378/* Values for Model field above */
379
380#define ACPI_IORT_SMMU_V1 0x00000000 /* Generic SMMUv1 */
381#define ACPI_IORT_SMMU_V2 0x00000001 /* Generic SMMUv2 */
382#define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002 /* ARM Corelink MMU-400 */
383#define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003 /* ARM Corelink MMU-500 */
Robin Murphy0c2021c2017-07-10 15:22:51 +0800384#define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004 /* ARM Corelink MMU-401 */
385#define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005 /* Cavium thunder_x SMMUv2 */
Lv Zheng874f6a72015-05-21 10:31:30 +0800386
387/* Masks for Flags field above */
388
389#define ACPI_IORT_SMMU_DVM_SUPPORTED (1)
390#define ACPI_IORT_SMMU_COHERENT_WALK (1<<1)
391
Lv Zhengbb1e23e2017-04-26 16:18:49 +0800392/* Global interrupt format */
393
394struct acpi_iort_smmu_gsi {
395 u32 nsg_irpt;
396 u32 nsg_irpt_flags;
397 u32 nsg_cfg_irpt;
398 u32 nsg_cfg_irpt_flags;
399};
400
Al Stone4ac78ba2016-03-24 09:39:07 +0800401struct acpi_iort_smmu_v3 {
402 u64 base_address; /* SMMUv3 base address */
403 u32 flags;
404 u32 reserved;
405 u64 vatos_address;
Robin Murphy0c2021c2017-07-10 15:22:51 +0800406 u32 model;
Al Stone4ac78ba2016-03-24 09:39:07 +0800407 u32 event_gsiv;
408 u32 pri_gsiv;
409 u32 gerr_gsiv;
410 u32 sync_gsiv;
Robin Murphyd87be042018-06-01 12:06:38 -0700411 u32 pxm;
Hanjun Guo4c106aa2017-11-17 15:42:19 -0800412 u32 id_mapping_index;
Al Stone4ac78ba2016-03-24 09:39:07 +0800413};
414
Robin Murphy0c2021c2017-07-10 15:22:51 +0800415/* Values for Model field above */
416
417#define ACPI_IORT_SMMU_V3_GENERIC 0x00000000 /* Generic SMMUv3 */
418#define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001 /* hi_silicon Hi161x SMMUv3 */
419#define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002 /* Cavium CN99xx SMMUv3 */
420
Al Stone4ac78ba2016-03-24 09:39:07 +0800421/* Masks for Flags field above */
422
423#define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1)
Robin Murphyd87be042018-06-01 12:06:38 -0700424#define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1)
Ganapatrao Kulkarnic9442302017-07-10 15:24:15 +0800425#define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3)
Al Stone4ac78ba2016-03-24 09:39:07 +0800426
Robin Murphya53eaef2018-06-01 12:06:39 -0700427struct acpi_iort_pmcg {
428 u64 page0_base_address;
429 u32 overflow_gsiv;
430 u32 node_reference;
431 u64 page1_base_address;
432};
433
Shameer Kolothum8e1fdd72021-04-06 14:30:27 -0700434struct acpi_iort_rmr {
435 u32 flags;
436 u32 rmr_count;
437 u32 rmr_offset;
438};
439
440struct acpi_iort_rmr_desc {
441 u64 base_address;
442 u64 length;
443 u32 reserved;
444};
445
Lv Zheng874f6a72015-05-21 10:31:30 +0800446/*******************************************************************************
447 *
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800448 * IVRS - I/O Virtualization Reporting Structure
449 * Version 1
450 *
451 * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
452 * Revision 1.26, February 2009.
453 *
454 ******************************************************************************/
455
456struct acpi_table_ivrs {
457 struct acpi_table_header header; /* Common ACPI table header */
458 u32 info; /* Common virtualization info */
459 u64 reserved;
460};
461
462/* Values for Info field above */
463
464#define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00 /* 7 bits, physical address size */
465#define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000 /* 7 bits, virtual address size */
466#define ACPI_IVRS_ATS_RESERVED 0x00400000 /* ATS address translation range reserved */
467
468/* IVRS subtable header */
469
470struct acpi_ivrs_header {
471 u8 type; /* Subtable type */
472 u8 flags;
473 u16 length; /* Subtable length */
474 u16 device_id; /* ID of IOMMU */
475};
476
477/* Values for subtable Type above */
478
479enum acpi_ivrs_type {
Michał Żygowski1f6239c2020-03-27 15:21:02 -0700480 ACPI_IVRS_TYPE_HARDWARE1 = 0x10,
481 ACPI_IVRS_TYPE_HARDWARE2 = 0x11,
Alexander Monakov7ce7a442021-04-06 14:30:07 -0700482 ACPI_IVRS_TYPE_HARDWARE3 = 0x40,
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800483 ACPI_IVRS_TYPE_MEMORY1 = 0x20,
484 ACPI_IVRS_TYPE_MEMORY2 = 0x21,
485 ACPI_IVRS_TYPE_MEMORY3 = 0x22
486};
487
488/* Masks for Flags field above for IVHD subtable */
489
490#define ACPI_IVHD_TT_ENABLE (1)
491#define ACPI_IVHD_PASS_PW (1<<1)
492#define ACPI_IVHD_RES_PASS_PW (1<<2)
493#define ACPI_IVHD_ISOC (1<<3)
494#define ACPI_IVHD_IOTLB (1<<4)
495
496/* Masks for Flags field above for IVMD subtable */
497
498#define ACPI_IVMD_UNITY (1)
499#define ACPI_IVMD_READ (1<<1)
500#define ACPI_IVMD_WRITE (1<<2)
501#define ACPI_IVMD_EXCLUSION_RANGE (1<<3)
502
503/*
504 * IVRS subtables, correspond to Type in struct acpi_ivrs_header
505 */
506
507/* 0x10: I/O Virtualization Hardware Definition Block (IVHD) */
508
Michał Żygowski1f6239c2020-03-27 15:21:02 -0700509struct acpi_ivrs_hardware_10 {
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800510 struct acpi_ivrs_header header;
511 u16 capability_offset; /* Offset for IOMMU control fields */
512 u64 base_address; /* IOMMU control registers */
513 u16 pci_segment_group;
514 u16 info; /* MSI number and unit ID */
Michał Żygowski0dc7e792020-03-27 15:21:03 -0700515 u32 feature_reporting;
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800516};
517
Michał Żygowski1f6239c2020-03-27 15:21:02 -0700518/* 0x11: I/O Virtualization Hardware Definition Block (IVHD) */
519
520struct acpi_ivrs_hardware_11 {
521 struct acpi_ivrs_header header;
522 u16 capability_offset; /* Offset for IOMMU control fields */
523 u64 base_address; /* IOMMU control registers */
524 u16 pci_segment_group;
525 u16 info; /* MSI number and unit ID */
526 u32 attributes;
527 u64 efr_register_image;
528 u64 reserved;
529};
530
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800531/* Masks for Info field above */
532
533#define ACPI_IVHD_MSI_NUMBER_MASK 0x001F /* 5 bits, MSI message number */
Bob Mooreba494be2012-07-12 09:40:10 +0800534#define ACPI_IVHD_UNIT_ID_MASK 0x1F00 /* 5 bits, unit_ID */
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800535
536/*
537 * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.
538 * Upper two bits of the Type field are the (encoded) length of the structure.
539 * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
540 * are reserved for future use but not defined.
541 */
542struct acpi_ivrs_de_header {
543 u8 type;
544 u16 id;
545 u8 data_setting;
546};
547
548/* Length of device entry is in the top two bits of Type field above */
549
550#define ACPI_IVHD_ENTRY_LENGTH 0xC0
551
552/* Values for device entry Type field above */
553
554enum acpi_ivrs_device_entry_type {
555 /* 4-byte device entries, all use struct acpi_ivrs_device4 */
556
557 ACPI_IVRS_TYPE_PAD4 = 0,
558 ACPI_IVRS_TYPE_ALL = 1,
559 ACPI_IVRS_TYPE_SELECT = 2,
560 ACPI_IVRS_TYPE_START = 3,
561 ACPI_IVRS_TYPE_END = 4,
562
563 /* 8-byte device entries */
564
565 ACPI_IVRS_TYPE_PAD8 = 64,
566 ACPI_IVRS_TYPE_NOT_USED = 65,
567 ACPI_IVRS_TYPE_ALIAS_SELECT = 66, /* Uses struct acpi_ivrs_device8a */
568 ACPI_IVRS_TYPE_ALIAS_START = 67, /* Uses struct acpi_ivrs_device8a */
569 ACPI_IVRS_TYPE_EXT_SELECT = 70, /* Uses struct acpi_ivrs_device8b */
570 ACPI_IVRS_TYPE_EXT_START = 71, /* Uses struct acpi_ivrs_device8b */
Alexander Monakov7ce7a442021-04-06 14:30:07 -0700571 ACPI_IVRS_TYPE_SPECIAL = 72, /* Uses struct acpi_ivrs_device8c */
572
573 /* Variable-length device entries */
574
575 ACPI_IVRS_TYPE_HID = 240 /* Uses ACPI_IVRS_DEVICE_HID */
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800576};
577
578/* Values for Data field above */
579
580#define ACPI_IVHD_INIT_PASS (1)
581#define ACPI_IVHD_EINT_PASS (1<<1)
582#define ACPI_IVHD_NMI_PASS (1<<2)
583#define ACPI_IVHD_SYSTEM_MGMT (3<<4)
584#define ACPI_IVHD_LINT0_PASS (1<<6)
585#define ACPI_IVHD_LINT1_PASS (1<<7)
586
587/* Types 0-4: 4-byte device entry */
588
589struct acpi_ivrs_device4 {
590 struct acpi_ivrs_de_header header;
591};
592
593/* Types 66-67: 8-byte device entry */
594
595struct acpi_ivrs_device8a {
596 struct acpi_ivrs_de_header header;
597 u8 reserved1;
598 u16 used_id;
599 u8 reserved2;
600};
601
602/* Types 70-71: 8-byte device entry */
603
604struct acpi_ivrs_device8b {
605 struct acpi_ivrs_de_header header;
606 u32 extended_data;
607};
608
609/* Values for extended_data above */
610
611#define ACPI_IVHD_ATS_DISABLED (1<<31)
612
613/* Type 72: 8-byte device entry */
614
615struct acpi_ivrs_device8c {
616 struct acpi_ivrs_de_header header;
617 u8 handle;
618 u16 used_id;
619 u8 variety;
620};
621
622/* Values for Variety field above */
623
624#define ACPI_IVHD_IOAPIC 1
625#define ACPI_IVHD_HPET 2
626
Alexander Monakov7ce7a442021-04-06 14:30:07 -0700627/* Type 240: variable-length device entry */
628
629struct acpi_ivrs_device_hid {
630 struct acpi_ivrs_de_header header;
631 u64 acpi_hid;
632 u64 acpi_cid;
633 u8 uid_type;
634 u8 uid_length;
635};
636
Bob Moorec160b7d22021-06-04 14:25:58 -0700637/* Values for uid_type above */
638
639#define ACPI_IVRS_UID_NOT_PRESENT 0
640#define ACPI_IVRS_UID_IS_INTEGER 1
641#define ACPI_IVRS_UID_IS_STRING 2
642
Bob Moore6e2d5eb2009-07-27 10:53:00 +0800643/* 0x20, 0x21, 0x22: I/O Virtualization Memory Definition Block (IVMD) */
644
645struct acpi_ivrs_memory {
646 struct acpi_ivrs_header header;
647 u16 aux_data;
648 u64 reserved;
649 u64 start_address;
650 u64 memory_length;
651};
652
653/*******************************************************************************
654 *
Bob Moored36d4e32014-04-30 10:04:06 +0800655 * LPIT - Low Power Idle Table
656 *
Bob Moore9ab8cf12015-05-21 10:30:59 +0800657 * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
Bob Moored36d4e32014-04-30 10:04:06 +0800658 *
659 ******************************************************************************/
660
661struct acpi_table_lpit {
662 struct acpi_table_header header; /* Common ACPI table header */
663};
664
665/* LPIT subtable header */
666
667struct acpi_lpit_header {
668 u32 type; /* Subtable type */
669 u32 length; /* Subtable length */
670 u16 unique_id;
671 u16 reserved;
672 u32 flags;
673};
674
675/* Values for subtable Type above */
676
677enum acpi_lpit_type {
678 ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,
Bob Moore9ab8cf12015-05-21 10:30:59 +0800679 ACPI_LPIT_TYPE_RESERVED = 0x01 /* 1 and above are reserved */
Bob Moored36d4e32014-04-30 10:04:06 +0800680};
681
682/* Masks for Flags field above */
683
684#define ACPI_LPIT_STATE_DISABLED (1)
685#define ACPI_LPIT_NO_COUNTER (1<<1)
686
687/*
688 * LPIT subtables, correspond to Type in struct acpi_lpit_header
689 */
690
691/* 0x00: Native C-state instruction based LPI structure */
692
693struct acpi_lpit_native {
694 struct acpi_lpit_header header;
695 struct acpi_generic_address entry_trigger;
696 u32 residency;
697 u32 latency;
698 struct acpi_generic_address residency_counter;
699 u64 counter_frequency;
700};
701
Bob Moored36d4e32014-04-30 10:04:06 +0800702/*******************************************************************************
703 *
Erik Schmausse62f8222018-02-15 13:09:26 -0800704 * MADT - Multiple APIC Description Table
705 * Version 3
706 *
707 ******************************************************************************/
708
709struct acpi_table_madt {
710 struct acpi_table_header header; /* Common ACPI table header */
711 u32 address; /* Physical address of local APIC */
712 u32 flags;
713};
714
715/* Masks for Flags field above */
716
717#define ACPI_MADT_PCAT_COMPAT (1) /* 00: System also has dual 8259s */
718
719/* Values for PCATCompat flag */
720
721#define ACPI_MADT_DUAL_PIC 1
722#define ACPI_MADT_MULTIPLE_APIC 0
723
724/* Values for MADT subtable type in struct acpi_subtable_header */
725
726enum acpi_madt_type {
727 ACPI_MADT_TYPE_LOCAL_APIC = 0,
728 ACPI_MADT_TYPE_IO_APIC = 1,
729 ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
730 ACPI_MADT_TYPE_NMI_SOURCE = 3,
731 ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
732 ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
733 ACPI_MADT_TYPE_IO_SAPIC = 6,
734 ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
735 ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
736 ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
737 ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
738 ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
739 ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
740 ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
741 ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
742 ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
Erik Kaneda9557cb82021-04-06 14:30:11 -0700743 ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,
744 ACPI_MADT_TYPE_RESERVED = 17 /* 17 and greater are reserved */
Erik Schmausse62f8222018-02-15 13:09:26 -0800745};
746
747/*
748 * MADT Subtables, correspond to Type in struct acpi_subtable_header
749 */
750
751/* 0: Processor Local APIC */
752
753struct acpi_madt_local_apic {
754 struct acpi_subtable_header header;
755 u8 processor_id; /* ACPI processor id */
756 u8 id; /* Processor's local APIC id */
757 u32 lapic_flags;
758};
759
760/* 1: IO APIC */
761
762struct acpi_madt_io_apic {
763 struct acpi_subtable_header header;
764 u8 id; /* I/O APIC ID */
765 u8 reserved; /* reserved - must be zero */
766 u32 address; /* APIC physical address */
767 u32 global_irq_base; /* Global system interrupt where INTI lines start */
768};
769
770/* 2: Interrupt Override */
771
772struct acpi_madt_interrupt_override {
773 struct acpi_subtable_header header;
774 u8 bus; /* 0 - ISA */
775 u8 source_irq; /* Interrupt source (IRQ) */
776 u32 global_irq; /* Global system interrupt */
777 u16 inti_flags;
778};
779
780/* 3: NMI Source */
781
782struct acpi_madt_nmi_source {
783 struct acpi_subtable_header header;
784 u16 inti_flags;
785 u32 global_irq; /* Global system interrupt */
786};
787
788/* 4: Local APIC NMI */
789
790struct acpi_madt_local_apic_nmi {
791 struct acpi_subtable_header header;
792 u8 processor_id; /* ACPI processor id */
793 u16 inti_flags;
794 u8 lint; /* LINTn to which NMI is connected */
795};
796
797/* 5: Address Override */
798
799struct acpi_madt_local_apic_override {
800 struct acpi_subtable_header header;
801 u16 reserved; /* Reserved, must be zero */
802 u64 address; /* APIC physical address */
803};
804
805/* 6: I/O Sapic */
806
807struct acpi_madt_io_sapic {
808 struct acpi_subtable_header header;
809 u8 id; /* I/O SAPIC ID */
810 u8 reserved; /* Reserved, must be zero */
811 u32 global_irq_base; /* Global interrupt for SAPIC start */
812 u64 address; /* SAPIC physical address */
813};
814
815/* 7: Local Sapic */
816
817struct acpi_madt_local_sapic {
818 struct acpi_subtable_header header;
819 u8 processor_id; /* ACPI processor id */
820 u8 id; /* SAPIC ID */
821 u8 eid; /* SAPIC EID */
822 u8 reserved[3]; /* Reserved, must be zero */
823 u32 lapic_flags;
824 u32 uid; /* Numeric UID - ACPI 3.0 */
825 char uid_string[1]; /* String UID - ACPI 3.0 */
826};
827
828/* 8: Platform Interrupt Source */
829
830struct acpi_madt_interrupt_source {
831 struct acpi_subtable_header header;
832 u16 inti_flags;
833 u8 type; /* 1=PMI, 2=INIT, 3=corrected */
834 u8 id; /* Processor ID */
835 u8 eid; /* Processor EID */
836 u8 io_sapic_vector; /* Vector value for PMI interrupts */
837 u32 global_irq; /* Global system interrupt */
838 u32 flags; /* Interrupt Source Flags */
839};
840
841/* Masks for Flags field above */
842
843#define ACPI_MADT_CPEI_OVERRIDE (1)
844
845/* 9: Processor Local X2APIC (ACPI 4.0) */
846
847struct acpi_madt_local_x2apic {
848 struct acpi_subtable_header header;
849 u16 reserved; /* reserved - must be zero */
850 u32 local_apic_id; /* Processor x2APIC ID */
851 u32 lapic_flags;
852 u32 uid; /* ACPI processor UID */
853};
854
855/* 10: Local X2APIC NMI (ACPI 4.0) */
856
857struct acpi_madt_local_x2apic_nmi {
858 struct acpi_subtable_header header;
859 u16 inti_flags;
860 u32 uid; /* ACPI processor UID */
861 u8 lint; /* LINTn to which NMI is connected */
862 u8 reserved[3]; /* reserved - must be zero */
863};
864
Erik Schmausse646e0a2019-02-15 13:36:14 -0800865/* 11: Generic interrupt - GICC (ACPI 5.0 + ACPI 6.0 + ACPI 6.3 changes) */
Erik Schmausse62f8222018-02-15 13:09:26 -0800866
867struct acpi_madt_generic_interrupt {
868 struct acpi_subtable_header header;
869 u16 reserved; /* reserved - must be zero */
870 u32 cpu_interface_number;
871 u32 uid;
872 u32 flags;
873 u32 parking_version;
874 u32 performance_interrupt;
875 u64 parked_address;
876 u64 base_address;
877 u64 gicv_base_address;
878 u64 gich_base_address;
879 u32 vgic_interrupt;
880 u64 gicr_base_address;
881 u64 arm_mpidr;
882 u8 efficiency_class;
Erik Schmausse646e0a2019-02-15 13:36:14 -0800883 u8 reserved2[1];
884 u16 spe_interrupt; /* ACPI 6.3 */
Erik Schmausse62f8222018-02-15 13:09:26 -0800885};
886
887/* Masks for Flags field above */
888
889/* ACPI_MADT_ENABLED (1) Processor is usable if set */
890#define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1) /* 01: Performance Interrupt Mode */
891#define ACPI_MADT_VGIC_IRQ_MODE (1<<2) /* 02: VGIC Maintenance Interrupt mode */
892
893/* 12: Generic Distributor (ACPI 5.0 + ACPI 6.0 changes) */
894
895struct acpi_madt_generic_distributor {
896 struct acpi_subtable_header header;
897 u16 reserved; /* reserved - must be zero */
898 u32 gic_id;
899 u64 base_address;
900 u32 global_irq_base;
901 u8 version;
902 u8 reserved2[3]; /* reserved - must be zero */
903};
904
905/* Values for Version field above */
906
907enum acpi_madt_gic_version {
908 ACPI_MADT_GIC_VERSION_NONE = 0,
909 ACPI_MADT_GIC_VERSION_V1 = 1,
910 ACPI_MADT_GIC_VERSION_V2 = 2,
911 ACPI_MADT_GIC_VERSION_V3 = 3,
912 ACPI_MADT_GIC_VERSION_V4 = 4,
913 ACPI_MADT_GIC_VERSION_RESERVED = 5 /* 5 and greater are reserved */
914};
915
916/* 13: Generic MSI Frame (ACPI 5.1) */
917
918struct acpi_madt_generic_msi_frame {
919 struct acpi_subtable_header header;
920 u16 reserved; /* reserved - must be zero */
921 u32 msi_frame_id;
922 u64 base_address;
923 u32 flags;
924 u16 spi_count;
925 u16 spi_base;
926};
927
928/* Masks for Flags field above */
929
930#define ACPI_MADT_OVERRIDE_SPI_VALUES (1)
931
932/* 14: Generic Redistributor (ACPI 5.1) */
933
934struct acpi_madt_generic_redistributor {
935 struct acpi_subtable_header header;
936 u16 reserved; /* reserved - must be zero */
937 u64 base_address;
938 u32 length;
939};
940
941/* 15: Generic Translator (ACPI 6.0) */
942
943struct acpi_madt_generic_translator {
944 struct acpi_subtable_header header;
945 u16 reserved; /* reserved - must be zero */
946 u32 translation_id;
947 u64 base_address;
948 u32 reserved2;
949};
950
Erik Kaneda9557cb82021-04-06 14:30:11 -0700951/* 16: Multiprocessor wakeup (ACPI 6.4) */
952
953struct acpi_madt_multiproc_wakeup {
954 struct acpi_subtable_header header;
955 u16 mailbox_version;
956 u32 reserved; /* reserved - must be zero */
957 u64 base_address;
958};
959
Kuppuswamy Sathyanarayanan42d96e12021-06-04 14:25:55 -0700960#define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032
961#define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048
962
963struct acpi_madt_multiproc_wakeup_mailbox {
964 u16 command;
965 u16 reserved; /* reserved - must be zero */
966 u32 apic_id;
967 u64 wakeup_vector;
968 u8 reserved_os[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE]; /* reserved for OS use */
969 u8 reserved_firmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE]; /* reserved for firmware use */
970};
971
972#define ACPI_MP_WAKE_COMMAND_WAKEUP 1
973
Erik Schmausse62f8222018-02-15 13:09:26 -0800974/*
975 * Common flags fields for MADT subtables
976 */
977
978/* MADT Local APIC flags */
979
980#define ACPI_MADT_ENABLED (1) /* 00: Processor is usable if set */
981
982/* MADT MPS INTI flags (inti_flags) */
983
984#define ACPI_MADT_POLARITY_MASK (3) /* 00-01: Polarity of APIC I/O input signals */
985#define ACPI_MADT_TRIGGER_MASK (3<<2) /* 02-03: Trigger mode of APIC input signals */
986
987/* Values for MPS INTI flags */
988
989#define ACPI_MADT_POLARITY_CONFORMS 0
990#define ACPI_MADT_POLARITY_ACTIVE_HIGH 1
991#define ACPI_MADT_POLARITY_RESERVED 2
992#define ACPI_MADT_POLARITY_ACTIVE_LOW 3
993
994#define ACPI_MADT_TRIGGER_CONFORMS (0)
995#define ACPI_MADT_TRIGGER_EDGE (1<<2)
996#define ACPI_MADT_TRIGGER_RESERVED (2<<2)
997#define ACPI_MADT_TRIGGER_LEVEL (3<<2)
998
999/*******************************************************************************
1000 *
Bob Moore1a49b722014-04-30 10:04:28 +08001001 * MCFG - PCI Memory Mapped Configuration table and subtable
Bob Moore6e2d5eb2009-07-27 10:53:00 +08001002 * Version 1
1003 *
1004 * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
Bob Mooreb24aad42009-07-24 13:30:17 +08001005 *
1006 ******************************************************************************/
1007
1008struct acpi_table_mcfg {
1009 struct acpi_table_header header; /* Common ACPI table header */
1010 u8 reserved[8];
1011};
1012
1013/* Subtable */
1014
1015struct acpi_mcfg_allocation {
1016 u64 address; /* Base address, processor-relative */
1017 u16 pci_segment; /* PCI segment group number */
1018 u8 start_bus_number; /* Starting PCI Bus number */
1019 u8 end_bus_number; /* Final PCI Bus number */
1020 u32 reserved;
1021};
1022
1023/*******************************************************************************
1024 *
Bob Moore0e264f02010-03-03 16:30:35 +08001025 * MCHI - Management Controller Host Interface Table
1026 * Version 1
1027 *
1028 * Conforms to "Management Component Transport Protocol (MCTP) Host
1029 * Interface Specification", Revision 1.0.0a, October 13, 2009
1030 *
1031 ******************************************************************************/
1032
1033struct acpi_table_mchi {
1034 struct acpi_table_header header; /* Common ACPI table header */
1035 u8 interface_type;
1036 u8 protocol;
1037 u64 protocol_data;
1038 u8 interrupt_type;
1039 u8 gpe;
1040 u8 pci_device_flag;
1041 u32 global_interrupt;
1042 struct acpi_generic_address control_register;
1043 u8 pci_segment;
1044 u8 pci_bus;
1045 u8 pci_device;
1046 u8 pci_function;
1047};
1048
1049/*******************************************************************************
1050 *
Erik Schmausse62f8222018-02-15 13:09:26 -08001051 * MPST - Memory Power State Table (ACPI 5.0)
1052 * Version 1
1053 *
1054 ******************************************************************************/
1055
1056#define ACPI_MPST_CHANNEL_INFO \
1057 u8 channel_id; \
1058 u8 reserved1[3]; \
1059 u16 power_node_count; \
1060 u16 reserved2;
1061
1062/* Main table */
1063
1064struct acpi_table_mpst {
1065 struct acpi_table_header header; /* Common ACPI table header */
1066 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */
1067};
1068
1069/* Memory Platform Communication Channel Info */
1070
1071struct acpi_mpst_channel {
1072 ACPI_MPST_CHANNEL_INFO /* Platform Communication Channel */
1073};
1074
1075/* Memory Power Node Structure */
1076
1077struct acpi_mpst_power_node {
1078 u8 flags;
1079 u8 reserved1;
1080 u16 node_id;
1081 u32 length;
1082 u64 range_address;
1083 u64 range_length;
1084 u32 num_power_states;
1085 u32 num_physical_components;
1086};
1087
1088/* Values for Flags field above */
1089
1090#define ACPI_MPST_ENABLED 1
1091#define ACPI_MPST_POWER_MANAGED 2
1092#define ACPI_MPST_HOT_PLUG_CAPABLE 4
1093
1094/* Memory Power State Structure (follows POWER_NODE above) */
1095
1096struct acpi_mpst_power_state {
1097 u8 power_state;
1098 u8 info_index;
1099};
1100
1101/* Physical Component ID Structure (follows POWER_STATE above) */
1102
1103struct acpi_mpst_component {
1104 u16 component_id;
1105};
1106
1107/* Memory Power State Characteristics Structure (follows all POWER_NODEs) */
1108
1109struct acpi_mpst_data_hdr {
1110 u16 characteristics_count;
1111 u16 reserved;
1112};
1113
1114struct acpi_mpst_power_data {
1115 u8 structure_id;
1116 u8 flags;
1117 u16 reserved1;
1118 u32 average_power;
1119 u32 power_saving;
1120 u64 exit_latency;
1121 u64 reserved2;
1122};
1123
1124/* Values for Flags field above */
1125
1126#define ACPI_MPST_PRESERVE 1
1127#define ACPI_MPST_AUTOENTRY 2
1128#define ACPI_MPST_AUTOEXIT 4
1129
1130/* Shared Memory Region (not part of an ACPI table) */
1131
1132struct acpi_mpst_shared {
1133 u32 signature;
1134 u16 pcc_command;
1135 u16 pcc_status;
1136 u32 command_register;
1137 u32 status_register;
1138 u32 power_state_id;
1139 u32 power_node_id;
1140 u64 energy_consumed;
1141 u64 average_power;
1142};
1143
1144/*******************************************************************************
1145 *
1146 * MSCT - Maximum System Characteristics Table (ACPI 4.0)
1147 * Version 1
1148 *
1149 ******************************************************************************/
1150
1151struct acpi_table_msct {
1152 struct acpi_table_header header; /* Common ACPI table header */
1153 u32 proximity_offset; /* Location of proximity info struct(s) */
1154 u32 max_proximity_domains; /* Max number of proximity domains */
1155 u32 max_clock_domains; /* Max number of clock domains */
1156 u64 max_address; /* Max physical address in system */
1157};
1158
1159/* subtable - Maximum Proximity Domain Information. Version 1 */
1160
1161struct acpi_msct_proximity {
1162 u8 revision;
1163 u8 length;
1164 u32 range_start; /* Start of domain range */
1165 u32 range_end; /* End of domain range */
1166 u32 processor_capacity;
1167 u64 memory_capacity; /* In bytes */
1168};
1169
1170/*******************************************************************************
1171 *
Bob Moore5132f2f2015-04-13 11:51:08 +08001172 * MSDM - Microsoft Data Management table
1173 *
1174 * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
1175 * November 29, 2011. Copyright 2011 Microsoft
1176 *
1177 ******************************************************************************/
1178
1179/* Basic MSDM table is only the common ACPI header */
1180
1181struct acpi_table_msdm {
1182 struct acpi_table_header header; /* Common ACPI table header */
1183};
1184
1185/*******************************************************************************
1186 *
Erik Schmausse62f8222018-02-15 13:09:26 -08001187 * NFIT - NVDIMM Interface Table (ACPI 6.0+)
1188 * Version 1
1189 *
1190 ******************************************************************************/
1191
1192struct acpi_table_nfit {
1193 struct acpi_table_header header; /* Common ACPI table header */
1194 u32 reserved; /* Reserved, must be zero */
1195};
1196
1197/* Subtable header for NFIT */
1198
1199struct acpi_nfit_header {
1200 u16 type;
1201 u16 length;
1202};
1203
1204/* Values for subtable type in struct acpi_nfit_header */
1205
1206enum acpi_nfit_type {
1207 ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,
1208 ACPI_NFIT_TYPE_MEMORY_MAP = 1,
1209 ACPI_NFIT_TYPE_INTERLEAVE = 2,
1210 ACPI_NFIT_TYPE_SMBIOS = 3,
1211 ACPI_NFIT_TYPE_CONTROL_REGION = 4,
1212 ACPI_NFIT_TYPE_DATA_REGION = 5,
1213 ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
1214 ACPI_NFIT_TYPE_CAPABILITIES = 7,
1215 ACPI_NFIT_TYPE_RESERVED = 8 /* 8 and greater are reserved */
1216};
1217
1218/*
1219 * NFIT Subtables
1220 */
1221
1222/* 0: System Physical Address Range Structure */
1223
1224struct acpi_nfit_system_address {
1225 struct acpi_nfit_header header;
1226 u16 range_index;
1227 u16 flags;
1228 u32 reserved; /* Reserved, must be zero */
1229 u32 proximity_domain;
1230 u8 range_guid[16];
1231 u64 address;
1232 u64 length;
1233 u64 memory_mapping;
Bob Moorecf16b052021-04-06 14:30:15 -07001234 u64 location_cookie; /* ACPI 6.4 */
Erik Schmausse62f8222018-02-15 13:09:26 -08001235};
1236
1237/* Flags */
1238
1239#define ACPI_NFIT_ADD_ONLINE_ONLY (1) /* 00: Add/Online Operation Only */
1240#define ACPI_NFIT_PROXIMITY_VALID (1<<1) /* 01: Proximity Domain Valid */
Bob Moorecf16b052021-04-06 14:30:15 -07001241#define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2) /* 02: SPA location cookie valid (ACPI 6.4) */
Erik Schmausse62f8222018-02-15 13:09:26 -08001242
1243/* Range Type GUIDs appear in the include/acuuid.h file */
1244
1245/* 1: Memory Device to System Address Range Map Structure */
1246
1247struct acpi_nfit_memory_map {
1248 struct acpi_nfit_header header;
1249 u32 device_handle;
1250 u16 physical_id;
1251 u16 region_id;
1252 u16 range_index;
1253 u16 region_index;
1254 u64 region_size;
1255 u64 region_offset;
1256 u64 address;
1257 u16 interleave_index;
1258 u16 interleave_ways;
1259 u16 flags;
1260 u16 reserved; /* Reserved, must be zero */
1261};
1262
1263/* Flags */
1264
1265#define ACPI_NFIT_MEM_SAVE_FAILED (1) /* 00: Last SAVE to Memory Device failed */
1266#define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1) /* 01: Last RESTORE from Memory Device failed */
1267#define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2) /* 02: Platform flush failed */
1268#define ACPI_NFIT_MEM_NOT_ARMED (1<<3) /* 03: Memory Device is not armed */
1269#define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4) /* 04: Memory Device observed SMART/health events */
1270#define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5) /* 05: SMART/health events enabled */
1271#define ACPI_NFIT_MEM_MAP_FAILED (1<<6) /* 06: Mapping to SPA failed */
1272
1273/* 2: Interleave Structure */
1274
1275struct acpi_nfit_interleave {
1276 struct acpi_nfit_header header;
1277 u16 interleave_index;
1278 u16 reserved; /* Reserved, must be zero */
1279 u32 line_count;
1280 u32 line_size;
1281 u32 line_offset[1]; /* Variable length */
1282};
1283
1284/* 3: SMBIOS Management Information Structure */
1285
1286struct acpi_nfit_smbios {
1287 struct acpi_nfit_header header;
1288 u32 reserved; /* Reserved, must be zero */
1289 u8 data[1]; /* Variable length */
1290};
1291
1292/* 4: NVDIMM Control Region Structure */
1293
1294struct acpi_nfit_control_region {
1295 struct acpi_nfit_header header;
1296 u16 region_index;
1297 u16 vendor_id;
1298 u16 device_id;
1299 u16 revision_id;
1300 u16 subsystem_vendor_id;
1301 u16 subsystem_device_id;
1302 u16 subsystem_revision_id;
1303 u8 valid_fields;
1304 u8 manufacturing_location;
1305 u16 manufacturing_date;
1306 u8 reserved[2]; /* Reserved, must be zero */
1307 u32 serial_number;
1308 u16 code;
1309 u16 windows;
1310 u64 window_size;
1311 u64 command_offset;
1312 u64 command_size;
1313 u64 status_offset;
1314 u64 status_size;
1315 u16 flags;
1316 u8 reserved1[6]; /* Reserved, must be zero */
1317};
1318
1319/* Flags */
1320
1321#define ACPI_NFIT_CONTROL_BUFFERED (1) /* Block Data Windows implementation is buffered */
1322
1323/* valid_fields bits */
1324
1325#define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1) /* Manufacturing fields are valid */
1326
1327/* 5: NVDIMM Block Data Window Region Structure */
1328
1329struct acpi_nfit_data_region {
1330 struct acpi_nfit_header header;
1331 u16 region_index;
1332 u16 windows;
1333 u64 offset;
1334 u64 size;
1335 u64 capacity;
1336 u64 start_address;
1337};
1338
1339/* 6: Flush Hint Address Structure */
1340
1341struct acpi_nfit_flush_address {
1342 struct acpi_nfit_header header;
1343 u32 device_handle;
1344 u16 hint_count;
1345 u8 reserved[6]; /* Reserved, must be zero */
1346 u64 hint_address[1]; /* Variable length */
1347};
1348
1349/* 7: Platform Capabilities Structure */
1350
1351struct acpi_nfit_capabilities {
1352 struct acpi_nfit_header header;
1353 u8 highest_capability;
1354 u8 reserved[3]; /* Reserved, must be zero */
1355 u32 capabilities;
1356 u32 reserved2;
1357};
1358
1359/* Capabilities Flags */
1360
1361#define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1) /* 00: Cache Flush to NVDIMM capable */
1362#define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1) /* 01: Memory Flush to NVDIMM capable */
1363#define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2) /* 02: Memory Mirroring capable */
1364
1365/*
1366 * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
1367 */
1368struct nfit_device_handle {
1369 u32 handle;
1370};
1371
1372/* Device handle construction and extraction macros */
1373
1374#define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F
1375#define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0
1376#define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00
1377#define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000
1378#define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000
1379
1380#define ACPI_NFIT_DIMM_NUMBER_OFFSET 0
1381#define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4
1382#define ACPI_NFIT_MEMORY_ID_OFFSET 8
1383#define ACPI_NFIT_SOCKET_ID_OFFSET 12
1384#define ACPI_NFIT_NODE_ID_OFFSET 16
1385
1386/* Macro to construct a NFIT/NVDIMM device handle */
1387
1388#define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
1389 ((dimm) | \
1390 ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \
1391 ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \
1392 ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \
1393 ((node) << ACPI_NFIT_NODE_ID_OFFSET))
1394
1395/* Macros to extract individual fields from a NFIT/NVDIMM device handle */
1396
1397#define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
1398 ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
1399
1400#define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
1401 (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
1402
1403#define ACPI_NFIT_GET_MEMORY_ID(handle) \
1404 (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET)
1405
1406#define ACPI_NFIT_GET_SOCKET_ID(handle) \
1407 (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET)
1408
1409#define ACPI_NFIT_GET_NODE_ID(handle) \
1410 (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET)
1411
1412/*******************************************************************************
1413 *
1414 * PCCT - Platform Communications Channel Table (ACPI 5.0)
1415 * Version 2 (ACPI 6.2)
1416 *
1417 ******************************************************************************/
1418
1419struct acpi_table_pcct {
1420 struct acpi_table_header header; /* Common ACPI table header */
1421 u32 flags;
1422 u64 reserved;
1423};
1424
1425/* Values for Flags field above */
1426
1427#define ACPI_PCCT_DOORBELL 1
1428
1429/* Values for subtable type in struct acpi_subtable_header */
1430
1431enum acpi_pcct_type {
1432 ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
1433 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
1434 ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2, /* ACPI 6.1 */
1435 ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3, /* ACPI 6.2 */
1436 ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4, /* ACPI 6.2 */
Erik Kaneda71f79a32021-04-06 14:30:12 -07001437 ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5, /* ACPI 6.4 */
1438 ACPI_PCCT_TYPE_RESERVED = 6 /* 6 and greater are reserved */
Erik Schmausse62f8222018-02-15 13:09:26 -08001439};
1440
1441/*
1442 * PCCT Subtables, correspond to Type in struct acpi_subtable_header
1443 */
1444
1445/* 0: Generic Communications Subspace */
1446
1447struct acpi_pcct_subspace {
1448 struct acpi_subtable_header header;
1449 u8 reserved[6];
1450 u64 base_address;
1451 u64 length;
1452 struct acpi_generic_address doorbell_register;
1453 u64 preserve_mask;
1454 u64 write_mask;
1455 u32 latency;
1456 u32 max_access_rate;
1457 u16 min_turnaround_time;
1458};
1459
1460/* 1: HW-reduced Communications Subspace (ACPI 5.1) */
1461
1462struct acpi_pcct_hw_reduced {
1463 struct acpi_subtable_header header;
1464 u32 platform_interrupt;
1465 u8 flags;
1466 u8 reserved;
1467 u64 base_address;
1468 u64 length;
1469 struct acpi_generic_address doorbell_register;
1470 u64 preserve_mask;
1471 u64 write_mask;
1472 u32 latency;
1473 u32 max_access_rate;
1474 u16 min_turnaround_time;
1475};
1476
1477/* 2: HW-reduced Communications Subspace Type 2 (ACPI 6.1) */
1478
1479struct acpi_pcct_hw_reduced_type2 {
1480 struct acpi_subtable_header header;
1481 u32 platform_interrupt;
1482 u8 flags;
1483 u8 reserved;
1484 u64 base_address;
1485 u64 length;
1486 struct acpi_generic_address doorbell_register;
1487 u64 preserve_mask;
1488 u64 write_mask;
1489 u32 latency;
1490 u32 max_access_rate;
1491 u16 min_turnaround_time;
1492 struct acpi_generic_address platform_ack_register;
1493 u64 ack_preserve_mask;
1494 u64 ack_write_mask;
1495};
1496
1497/* 3: Extended PCC Master Subspace Type 3 (ACPI 6.2) */
1498
1499struct acpi_pcct_ext_pcc_master {
1500 struct acpi_subtable_header header;
1501 u32 platform_interrupt;
1502 u8 flags;
1503 u8 reserved1;
1504 u64 base_address;
1505 u32 length;
1506 struct acpi_generic_address doorbell_register;
1507 u64 preserve_mask;
1508 u64 write_mask;
1509 u32 latency;
1510 u32 max_access_rate;
1511 u32 min_turnaround_time;
1512 struct acpi_generic_address platform_ack_register;
1513 u64 ack_preserve_mask;
1514 u64 ack_set_mask;
1515 u64 reserved2;
1516 struct acpi_generic_address cmd_complete_register;
1517 u64 cmd_complete_mask;
1518 struct acpi_generic_address cmd_update_register;
1519 u64 cmd_update_preserve_mask;
1520 u64 cmd_update_set_mask;
1521 struct acpi_generic_address error_status_register;
1522 u64 error_status_mask;
1523};
1524
1525/* 4: Extended PCC Slave Subspace Type 4 (ACPI 6.2) */
1526
1527struct acpi_pcct_ext_pcc_slave {
1528 struct acpi_subtable_header header;
1529 u32 platform_interrupt;
1530 u8 flags;
1531 u8 reserved1;
1532 u64 base_address;
1533 u32 length;
1534 struct acpi_generic_address doorbell_register;
1535 u64 preserve_mask;
1536 u64 write_mask;
1537 u32 latency;
1538 u32 max_access_rate;
1539 u32 min_turnaround_time;
1540 struct acpi_generic_address platform_ack_register;
1541 u64 ack_preserve_mask;
1542 u64 ack_set_mask;
1543 u64 reserved2;
1544 struct acpi_generic_address cmd_complete_register;
1545 u64 cmd_complete_mask;
1546 struct acpi_generic_address cmd_update_register;
1547 u64 cmd_update_preserve_mask;
1548 u64 cmd_update_set_mask;
1549 struct acpi_generic_address error_status_register;
1550 u64 error_status_mask;
1551};
1552
Erik Kaneda71f79a32021-04-06 14:30:12 -07001553/* 5: HW Registers based Communications Subspace */
1554
1555struct acpi_pcct_hw_reg {
1556 struct acpi_subtable_header header;
1557 u16 version;
1558 u64 base_address;
1559 u64 length;
1560 struct acpi_generic_address doorbell_register;
1561 u64 doorbell_preserve;
1562 u64 doorbell_write;
1563 struct acpi_generic_address cmd_complete_register;
1564 u64 cmd_complete_mask;
1565 struct acpi_generic_address error_status_register;
1566 u64 error_status_mask;
1567 u32 nominal_latency;
1568 u32 min_turnaround_time;
1569};
1570
Erik Schmausse62f8222018-02-15 13:09:26 -08001571/* Values for doorbell flags above */
1572
1573#define ACPI_PCCT_INTERRUPT_POLARITY (1)
1574#define ACPI_PCCT_INTERRUPT_MODE (1<<1)
1575
1576/*
1577 * PCC memory structures (not part of the ACPI table)
1578 */
1579
1580/* Shared Memory Region */
1581
1582struct acpi_pcct_shared_memory {
1583 u32 signature;
1584 u16 command;
1585 u16 status;
1586};
1587
1588/* Extended PCC Subspace Shared Memory Region (ACPI 6.2) */
1589
1590struct acpi_pcct_ext_pcc_shared_memory {
1591 u32 signature;
1592 u32 flags;
1593 u32 length;
1594 u32 command;
1595};
1596
1597/*******************************************************************************
1598 *
1599 * PDTT - Platform Debug Trigger Table (ACPI 6.2)
1600 * Version 0
1601 *
1602 ******************************************************************************/
1603
1604struct acpi_table_pdtt {
1605 struct acpi_table_header header; /* Common ACPI table header */
1606 u8 trigger_count;
1607 u8 reserved[3];
1608 u32 array_offset;
1609};
1610
1611/*
1612 * PDTT Communication Channel Identifier Structure.
1613 * The number of these structures is defined by trigger_count above,
1614 * starting at array_offset.
1615 */
1616struct acpi_pdtt_channel {
1617 u8 subchannel_id;
1618 u8 flags;
1619};
1620
1621/* Flags for above */
1622
1623#define ACPI_PDTT_RUNTIME_TRIGGER (1)
1624#define ACPI_PDTT_WAIT_COMPLETION (1<<1)
Erik Schmaussf00175d2019-02-15 13:36:11 -08001625#define ACPI_PDTT_TRIGGER_ORDER (1<<2)
Erik Schmausse62f8222018-02-15 13:09:26 -08001626
1627/*******************************************************************************
1628 *
Erik Kaneda9f400332021-04-06 14:30:23 -07001629 * PHAT - Platform Health Assessment Table (ACPI 6.4)
1630 * Version 1
1631 *
1632 ******************************************************************************/
1633
1634struct acpi_table_phat {
1635 struct acpi_table_header header; /* Common ACPI table header */
1636};
1637
1638/* Common header for PHAT subtables that follow main table */
1639
1640struct acpi_phat_header {
1641 u16 type;
1642 u16 length;
1643 u8 revision;
1644};
1645
1646/* Values for Type field above */
1647
1648#define ACPI_PHAT_TYPE_FW_VERSION_DATA 0
1649#define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1
1650#define ACPI_PHAT_TYPE_RESERVED 2 /* 0x02-0xFFFF are reserved */
1651
1652/*
1653 * PHAT subtables, correspond to Type in struct acpi_phat_header
1654 */
1655
1656/* 0: Firmware Version Data Record */
1657
1658struct acpi_phat_version_data {
1659 struct acpi_phat_header header;
1660 u8 reserved[3];
1661 u32 element_count;
1662};
1663
1664struct acpi_phat_version_element {
1665 u8 guid[16];
1666 u64 version_value;
1667 u32 producer_id;
1668};
1669
1670/* 1: Firmware Health Data Record */
1671
1672struct acpi_phat_health_data {
1673 struct acpi_phat_header header;
1674 u8 reserved[2];
1675 u8 health;
1676 u8 device_guid[16];
1677 u32 device_specific_offset; /* Zero if no Device-specific data */
1678};
1679
1680/* Values for Health field above */
1681
1682#define ACPI_PHAT_ERRORS_FOUND 0
1683#define ACPI_PHAT_NO_ERRORS 1
1684#define ACPI_PHAT_UNKNOWN_ERRORS 2
1685#define ACPI_PHAT_ADVISORY 3
1686
1687/*******************************************************************************
1688 *
Erik Schmausse62f8222018-02-15 13:09:26 -08001689 * PMTT - Platform Memory Topology Table (ACPI 5.0)
1690 * Version 1
1691 *
1692 ******************************************************************************/
1693
1694struct acpi_table_pmtt {
1695 struct acpi_table_header header; /* Common ACPI table header */
Bob Moorecca97d42021-04-06 14:30:21 -07001696 u32 memory_device_count;
1697 /*
1698 * Immediately followed by:
1699 * MEMORY_DEVICE memory_device_struct[memory_device_count];
1700 */
Erik Schmausse62f8222018-02-15 13:09:26 -08001701};
1702
1703/* Common header for PMTT subtables that follow main table */
1704
1705struct acpi_pmtt_header {
1706 u8 type;
1707 u8 reserved1;
1708 u16 length;
1709 u16 flags;
1710 u16 reserved2;
Bob Moorecca97d42021-04-06 14:30:21 -07001711 u32 memory_device_count; /* Zero means no memory device structs follow */
1712 /*
1713 * Immediately followed by:
1714 * u8 type_specific_data[]
1715 * MEMORY_DEVICE memory_device_struct[memory_device_count];
1716 */
Erik Schmausse62f8222018-02-15 13:09:26 -08001717};
1718
1719/* Values for Type field above */
1720
1721#define ACPI_PMTT_TYPE_SOCKET 0
1722#define ACPI_PMTT_TYPE_CONTROLLER 1
1723#define ACPI_PMTT_TYPE_DIMM 2
Bob Moorecca97d42021-04-06 14:30:21 -07001724#define ACPI_PMTT_TYPE_RESERVED 3 /* 0x03-0xFE are reserved */
1725#define ACPI_PMTT_TYPE_VENDOR 0xFF
Erik Schmausse62f8222018-02-15 13:09:26 -08001726
1727/* Values for Flags field above */
1728
1729#define ACPI_PMTT_TOP_LEVEL 0x0001
1730#define ACPI_PMTT_PHYSICAL 0x0002
1731#define ACPI_PMTT_MEMORY_TYPE 0x000C
1732
1733/*
1734 * PMTT subtables, correspond to Type in struct acpi_pmtt_header
1735 */
1736
1737/* 0: Socket Structure */
1738
1739struct acpi_pmtt_socket {
1740 struct acpi_pmtt_header header;
1741 u16 socket_id;
1742 u16 reserved;
1743};
Bob Moorecca97d42021-04-06 14:30:21 -07001744 /*
1745 * Immediately followed by:
1746 * MEMORY_DEVICE memory_device_struct[memory_device_count];
1747 */
Erik Schmausse62f8222018-02-15 13:09:26 -08001748
1749/* 1: Memory Controller subtable */
1750
1751struct acpi_pmtt_controller {
1752 struct acpi_pmtt_header header;
Bob Moorecca97d42021-04-06 14:30:21 -07001753 u16 controller_id;
Erik Schmausse62f8222018-02-15 13:09:26 -08001754 u16 reserved;
Erik Schmausse62f8222018-02-15 13:09:26 -08001755};
Bob Moorecca97d42021-04-06 14:30:21 -07001756 /*
1757 * Immediately followed by:
1758 * MEMORY_DEVICE memory_device_struct[memory_device_count];
1759 */
Erik Schmausse62f8222018-02-15 13:09:26 -08001760
1761/* 2: Physical Component Identifier (DIMM) */
1762
1763struct acpi_pmtt_physical_component {
1764 struct acpi_pmtt_header header;
Erik Schmausse62f8222018-02-15 13:09:26 -08001765 u32 bios_handle;
1766};
1767
Bob Moorecca97d42021-04-06 14:30:21 -07001768/* 0xFF: Vendor Specific Data */
1769
1770struct acpi_pmtt_vendor_specific {
1771 struct acpi_pmtt_header header;
1772 u8 type_uuid[16];
1773 u8 specific[];
1774 /*
1775 * Immediately followed by:
1776 * u8 vendor_specific_data[];
1777 * MEMORY_DEVICE memory_device_struct[memory_device_count];
1778 */
1779};
1780
Erik Schmausse62f8222018-02-15 13:09:26 -08001781/*******************************************************************************
1782 *
1783 * PPTT - Processor Properties Topology Table (ACPI 6.2)
1784 * Version 1
1785 *
1786 ******************************************************************************/
1787
1788struct acpi_table_pptt {
1789 struct acpi_table_header header; /* Common ACPI table header */
1790};
1791
1792/* Values for Type field above */
1793
1794enum acpi_pptt_type {
1795 ACPI_PPTT_TYPE_PROCESSOR = 0,
1796 ACPI_PPTT_TYPE_CACHE = 1,
1797 ACPI_PPTT_TYPE_ID = 2,
1798 ACPI_PPTT_TYPE_RESERVED = 3
1799};
1800
1801/* 0: Processor Hierarchy Node Structure */
1802
1803struct acpi_pptt_processor {
1804 struct acpi_subtable_header header;
1805 u16 reserved;
1806 u32 flags;
1807 u32 parent;
1808 u32 acpi_processor_id;
1809 u32 number_of_priv_resources;
1810};
1811
1812/* Flags */
1813
Erik Schmaussb5eab512019-02-15 13:36:16 -08001814#define ACPI_PPTT_PHYSICAL_PACKAGE (1)
1815#define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1)
1816#define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2) /* ACPI 6.3 */
1817#define ACPI_PPTT_ACPI_LEAF_NODE (1<<3) /* ACPI 6.3 */
1818#define ACPI_PPTT_ACPI_IDENTICAL (1<<4) /* ACPI 6.3 */
Erik Schmausse62f8222018-02-15 13:09:26 -08001819
1820/* 1: Cache Type Structure */
1821
1822struct acpi_pptt_cache {
1823 struct acpi_subtable_header header;
1824 u16 reserved;
1825 u32 flags;
1826 u32 next_level_of_cache;
1827 u32 size;
1828 u32 number_of_sets;
1829 u8 associativity;
1830 u8 attributes;
1831 u16 line_size;
1832};
1833
Erik Kaneda5e2e86c2021-04-06 14:30:13 -07001834/* 1: Cache Type Structure for PPTT version 3 */
1835
1836struct acpi_pptt_cache_v1 {
1837 u32 cache_id;
1838};
1839
Erik Schmausse62f8222018-02-15 13:09:26 -08001840/* Flags */
1841
1842#define ACPI_PPTT_SIZE_PROPERTY_VALID (1) /* Physical property valid */
1843#define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1) /* Number of sets valid */
1844#define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2) /* Associativity valid */
1845#define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3) /* Allocation type valid */
1846#define ACPI_PPTT_CACHE_TYPE_VALID (1<<4) /* Cache type valid */
1847#define ACPI_PPTT_WRITE_POLICY_VALID (1<<5) /* Write policy valid */
1848#define ACPI_PPTT_LINE_SIZE_VALID (1<<6) /* Line size valid */
Erik Kaneda5e2e86c2021-04-06 14:30:13 -07001849#define ACPI_PPTT_CACHE_ID_VALID (1<<7) /* Cache ID valid */
Erik Schmausse62f8222018-02-15 13:09:26 -08001850
1851/* Masks for Attributes */
1852
1853#define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03) /* Allocation type */
1854#define ACPI_PPTT_MASK_CACHE_TYPE (0x0C) /* Cache type */
1855#define ACPI_PPTT_MASK_WRITE_POLICY (0x10) /* Write policy */
1856
1857/* Attributes describing cache */
1858#define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0) /* Cache line is allocated on read */
1859#define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01) /* Cache line is allocated on write */
1860#define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02) /* Cache line is allocated on read and write */
1861#define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03) /* Alternate representation of above */
1862
1863#define ACPI_PPTT_CACHE_TYPE_DATA (0x0) /* Data cache */
1864#define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2) /* Instruction cache */
1865#define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2) /* Unified I & D cache */
1866#define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2) /* Alternate representation of above */
1867
1868#define ACPI_PPTT_CACHE_POLICY_WB (0x0) /* Cache is write back */
1869#define ACPI_PPTT_CACHE_POLICY_WT (1<<4) /* Cache is write through */
1870
1871/* 2: ID Structure */
1872
1873struct acpi_pptt_id {
1874 struct acpi_subtable_header header;
1875 u16 reserved;
1876 u32 vendor_id;
1877 u64 level1_id;
1878 u64 level2_id;
1879 u16 major_rev;
1880 u16 minor_rev;
1881 u16 spin_rev;
1882};
1883
1884/*******************************************************************************
1885 *
Erik Kanedad71df852021-06-04 14:26:06 -07001886 * PRMT - Platform Runtime Mechanism Table
1887 * Version 1
1888 *
1889 ******************************************************************************/
1890
1891struct acpi_table_prmt {
1892 struct acpi_table_header header; /* Common ACPI table header */
1893};
1894
1895struct acpi_table_prmt_header {
1896 u8 platform_guid[16];
1897 u32 module_info_offset;
1898 u32 module_info_count;
1899};
1900
Erik Kaneda9f8c7ba2021-06-09 20:41:51 -07001901struct acpi_prmt_module_header {
1902 u16 revision;
1903 u16 length;
1904};
1905
Erik Kanedad71df852021-06-04 14:26:06 -07001906struct acpi_prmt_module_info {
1907 u16 revision;
1908 u16 length;
1909 u8 module_guid[16];
1910 u16 major_rev;
1911 u16 minor_rev;
1912 u16 handler_info_count;
1913 u32 handler_info_offset;
1914 u64 mmio_list_pointer;
1915};
1916
1917struct acpi_prmt_handler_info {
1918 u16 revision;
1919 u16 length;
1920 u8 handler_guid[16];
1921 u64 handler_address;
1922 u64 static_data_buffer_address;
1923 u64 acpi_param_buffer_address;
1924};
1925
1926/*******************************************************************************
1927 *
Erik Schmausse62f8222018-02-15 13:09:26 -08001928 * RASF - RAS Feature Table (ACPI 5.0)
1929 * Version 1
1930 *
1931 ******************************************************************************/
1932
1933struct acpi_table_rasf {
1934 struct acpi_table_header header; /* Common ACPI table header */
1935 u8 channel_id[12];
1936};
1937
1938/* RASF Platform Communication Channel Shared Memory Region */
1939
1940struct acpi_rasf_shared_memory {
1941 u32 signature;
1942 u16 command;
1943 u16 status;
1944 u16 version;
1945 u8 capabilities[16];
1946 u8 set_capabilities[16];
1947 u16 num_parameter_blocks;
1948 u32 set_capabilities_status;
1949};
1950
1951/* RASF Parameter Block Structure Header */
1952
1953struct acpi_rasf_parameter_block {
1954 u16 type;
1955 u16 version;
1956 u16 length;
1957};
1958
1959/* RASF Parameter Block Structure for PATROL_SCRUB */
1960
1961struct acpi_rasf_patrol_scrub_parameter {
1962 struct acpi_rasf_parameter_block header;
1963 u16 patrol_scrub_command;
1964 u64 requested_address_range[2];
1965 u64 actual_address_range[2];
1966 u16 flags;
1967 u8 requested_speed;
1968};
1969
1970/* Masks for Flags and Speed fields above */
1971
1972#define ACPI_RASF_SCRUBBER_RUNNING 1
1973#define ACPI_RASF_SPEED (7<<1)
1974#define ACPI_RASF_SPEED_SLOW (0<<1)
1975#define ACPI_RASF_SPEED_MEDIUM (4<<1)
1976#define ACPI_RASF_SPEED_FAST (7<<1)
1977
1978/* Channel Commands */
1979
1980enum acpi_rasf_commands {
1981 ACPI_RASF_EXECUTE_RASF_COMMAND = 1
1982};
1983
1984/* Platform RAS Capabilities */
1985
1986enum acpi_rasf_capabiliities {
1987 ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,
1988 ACPI_SW_PATROL_SCRUB_EXPOSED = 1
1989};
1990
1991/* Patrol Scrub Commands */
1992
1993enum acpi_rasf_patrol_scrub_commands {
1994 ACPI_RASF_GET_PATROL_PARAMETERS = 1,
1995 ACPI_RASF_START_PATROL_SCRUBBER = 2,
1996 ACPI_RASF_STOP_PATROL_SCRUBBER = 3
1997};
1998
1999/* Channel Command flags */
2000
2001#define ACPI_RASF_GENERATE_SCI (1<<15)
2002
2003/* Status values */
2004
2005enum acpi_rasf_status {
2006 ACPI_RASF_SUCCESS = 0,
2007 ACPI_RASF_NOT_VALID = 1,
2008 ACPI_RASF_NOT_SUPPORTED = 2,
2009 ACPI_RASF_BUSY = 3,
2010 ACPI_RASF_FAILED = 4,
2011 ACPI_RASF_ABORTED = 5,
2012 ACPI_RASF_INVALID_DATA = 6
2013};
2014
2015/* Status flags */
2016
2017#define ACPI_RASF_COMMAND_COMPLETE (1)
2018#define ACPI_RASF_SCI_DOORBELL (1<<1)
2019#define ACPI_RASF_ERROR (1<<2)
2020#define ACPI_RASF_STATUS (0x1F<<3)
2021
2022/*******************************************************************************
2023 *
Bob Moore536e35c2021-06-04 14:26:00 -07002024 * RGRT - Regulatory Graphics Resource Table
2025 * Version 1
2026 *
2027 * Conforms to "ACPI RGRT" available at:
2028 * https://microsoft.github.io/mu/dyn/mu_plus/ms_core_pkg/acpi_RGRT/feature_acpi_rgrt/
2029 *
2030 ******************************************************************************/
2031
2032struct acpi_table_rgrt {
2033 struct acpi_table_header header; /* Common ACPI table header */
2034 u16 version;
2035 u8 image_type;
2036 u8 reserved;
2037 u8 image[0];
2038};
2039
2040/* image_type values */
2041
2042enum acpi_rgrt_image_type {
2043 ACPI_RGRT_TYPE_RESERVED0 = 0,
2044 ACPI_RGRT_IMAGE_TYPE_PNG = 1,
2045 ACPI_RGRT_TYPE_RESERVED = 2 /* 2 and greater are reserved */
2046};
2047
2048/*******************************************************************************
2049 *
Erik Schmausse62f8222018-02-15 13:09:26 -08002050 * SBST - Smart Battery Specification Table
2051 * Version 1
2052 *
2053 ******************************************************************************/
2054
2055struct acpi_table_sbst {
2056 struct acpi_table_header header; /* Common ACPI table header */
2057 u32 warning_level;
2058 u32 low_level;
2059 u32 critical_level;
2060};
2061
2062/*******************************************************************************
2063 *
James Morse3bd38462017-08-03 14:26:25 +08002064 * SDEI - Software Delegated Exception Interface Descriptor Table
2065 *
2066 * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
2067 * May 8th, 2017. Copyright 2017 ARM Ltd.
2068 *
2069 ******************************************************************************/
2070
2071struct acpi_table_sdei {
2072 struct acpi_table_header header; /* Common ACPI table header */
2073};
2074
2075/*******************************************************************************
2076 *
Erik Schmausse62f8222018-02-15 13:09:26 -08002077 * SDEV - Secure Devices Table (ACPI 6.2)
2078 * Version 1
Bob Moore5cf4d732011-03-18 09:49:41 +08002079 *
2080 ******************************************************************************/
2081
Erik Schmausse62f8222018-02-15 13:09:26 -08002082struct acpi_table_sdev {
Bob Moore5cf4d732011-03-18 09:49:41 +08002083 struct acpi_table_header header; /* Common ACPI table header */
2084};
2085
Erik Schmausse62f8222018-02-15 13:09:26 -08002086struct acpi_sdev_header {
2087 u8 type;
2088 u8 flags;
2089 u16 length;
Bob Mooreb24aad42009-07-24 13:30:17 +08002090};
2091
Erik Schmausse62f8222018-02-15 13:09:26 -08002092/* Values for subtable type above */
Bob Moore6e2d5eb2009-07-27 10:53:00 +08002093
Erik Schmausse62f8222018-02-15 13:09:26 -08002094enum acpi_sdev_type {
2095 ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,
2096 ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
2097 ACPI_SDEV_TYPE_RESERVED = 2 /* 2 and greater are reserved */
Bob Moore6e2d5eb2009-07-27 10:53:00 +08002098};
2099
Erik Schmausse62f8222018-02-15 13:09:26 -08002100/* Values for flags above */
Bob Moore6e2d5eb2009-07-27 10:53:00 +08002101
Erik Schmausse62f8222018-02-15 13:09:26 -08002102#define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1)
Erik Kaneda14012d22021-04-06 14:30:18 -07002103#define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)
Bob Moore15a61aa2015-07-23 12:54:04 +08002104
2105/*
Erik Schmausse62f8222018-02-15 13:09:26 -08002106 * SDEV subtables
Bob Moore15a61aa2015-07-23 12:54:04 +08002107 */
Bob Moore15a61aa2015-07-23 12:54:04 +08002108
Erik Schmausse62f8222018-02-15 13:09:26 -08002109/* 0: Namespace Device Based Secure Device Structure */
2110
2111struct acpi_sdev_namespace {
2112 struct acpi_sdev_header header;
2113 u16 device_id_offset;
2114 u16 device_id_length;
2115 u16 vendor_data_offset;
2116 u16 vendor_data_length;
Bob Mooreb24aad42009-07-24 13:30:17 +08002117};
2118
Erik Kaneda14012d22021-04-06 14:30:18 -07002119struct acpi_sdev_secure_component {
2120 u16 secure_component_offset;
2121 u16 secure_component_length;
2122};
2123
2124/*
2125 * SDEV sub-subtables ("Components") for above
2126 */
2127struct acpi_sdev_component {
2128 struct acpi_sdev_header header;
2129};
2130
2131/* Values for sub-subtable type above */
2132
2133enum acpi_sac_type {
2134 ACPI_SDEV_TYPE_ID_COMPONENT = 0,
2135 ACPI_SDEV_TYPE_MEM_COMPONENT = 1
2136};
2137
2138struct acpi_sdev_id_component {
2139 struct acpi_sdev_header header;
2140 u16 hardware_id_offset;
2141 u16 hardware_id_length;
2142 u16 subsystem_id_offset;
2143 u16 subsystem_id_length;
2144 u16 hardware_revision;
2145 u8 hardware_rev_present;
2146 u8 class_code_present;
2147 u8 pci_base_class;
2148 u8 pci_sub_class;
2149 u8 pci_programming_xface;
2150};
2151
2152struct acpi_sdev_mem_component {
2153 struct acpi_sdev_header header;
2154 u32 reserved;
2155 u64 memory_base_address;
2156 u64 memory_length;
2157};
2158
Erik Schmausse62f8222018-02-15 13:09:26 -08002159/* 1: PCIe Endpoint Device Based Device Structure */
2160
2161struct acpi_sdev_pcie {
2162 struct acpi_sdev_header header;
2163 u16 segment;
2164 u16 start_bus;
2165 u16 path_offset;
2166 u16 path_length;
2167 u16 vendor_data_offset;
2168 u16 vendor_data_length;
2169};
2170
2171/* 1a: PCIe Endpoint path entry */
2172
2173struct acpi_sdev_pcie_path {
Bob Moore90056942015-07-01 14:45:25 +08002174 u8 device;
2175 u8 function;
2176};
2177
Kuppuswamy Sathyanarayanan8288f692021-06-04 14:25:56 -07002178/*******************************************************************************
2179 *
2180 * SVKL - Storage Volume Key Location Table (ACPI 6.4)
Bob Moore6496f032021-06-04 14:25:59 -07002181 * From: "Guest-Host-Communication Interface (GHCI) for Intel
2182 * Trust Domain Extensions (Intel TDX)".
Kuppuswamy Sathyanarayanan8288f692021-06-04 14:25:56 -07002183 * Version 1
2184 *
2185 ******************************************************************************/
2186
2187struct acpi_table_svkl {
2188 struct acpi_table_header header; /* Common ACPI table header */
2189 u32 count;
2190};
2191
Bob Moore6496f032021-06-04 14:25:59 -07002192struct acpi_svkl_key {
Kuppuswamy Sathyanarayanan8288f692021-06-04 14:25:56 -07002193 u16 type;
2194 u16 format;
2195 u32 size;
2196 u64 address;
2197};
2198
2199enum acpi_svkl_type {
2200 ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
2201 ACPI_SVKL_TYPE_RESERVED = 1 /* 1 and greater are reserved */
2202};
2203
2204enum acpi_svkl_format {
2205 ACPI_SVKL_FORMAT_RAW_BINARY = 0,
2206 ACPI_SVKL_FORMAT_RESERVED = 1 /* 1 and greater are reserved */
2207};
2208
Robert Moore6e596082014-03-05 14:12:01 +08002209/* Reset to default packing */
2210
2211#pragma pack()
Bob Mooreb24aad42009-07-24 13:30:17 +08002212
2213#endif /* __ACTBL2_H__ */