| 1 |
|
| 2 | |
| 3 | *
|
| 4 | * Name: actbl2.h - ACPI Table Definitions
|
| 5 | *
|
| 6 | * Copyright (C) 2000 - 2026, Intel Corp.
|
| 7 | *
|
| 8 | ****************************************************************************
|
| 9 |
|
| 10 | #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 | *
|
| 20 | *****************************************************************************
|
| 21 |
|
| 22 | |
| 23 | * 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.
|
| 26 |
|
| 27 | #define ACPI_SIG_AGDI "AGDI"
|
| 28 | #define ACPI_SIG_APMT "APMT"
|
| 29 | #define ACPI_SIG_BDAT "BDAT"
|
| 30 | #define ACPI_SIG_CCEL "CCEL"
|
| 31 | #define ACPI_SIG_CDAT "CDAT"
|
| 32 | #define ACPI_SIG_ERDT "ERDT"
|
| 33 | #define ACPI_SIG_IORT "IORT"
|
| 34 | #define ACPI_SIG_IOVT "IOVT"
|
| 35 | #define ACPI_SIG_IVRS "IVRS"
|
| 36 | #define ACPI_SIG_KEYP "KEYP"
|
| 37 | #define ACPI_SIG_LPIT "LPIT"
|
| 38 | #define ACPI_SIG_MADT "APIC"
|
| 39 | #define ACPI_SIG_MCFG "MCFG"
|
| 40 | #define ACPI_SIG_MCHI "MCHI"
|
| 41 | #define ACPI_SIG_MPAM "MPAM"
|
| 42 | #define ACPI_SIG_MPST "MPST"
|
| 43 | #define ACPI_SIG_MRRM "MRRM"
|
| 44 | #define ACPI_SIG_MSDM "MSDM"
|
| 45 | #define ACPI_SIG_NFIT "NFIT"
|
| 46 | #define ACPI_SIG_NHLT "NHLT"
|
| 47 | #define ACPI_SIG_PCCT "PCCT"
|
| 48 | #define ACPI_SIG_PDTT "PDTT"
|
| 49 | #define ACPI_SIG_PHAT "PHAT"
|
| 50 | #define ACPI_SIG_PMTT "PMTT"
|
| 51 | #define ACPI_SIG_PPTT "PPTT"
|
| 52 | #define ACPI_SIG_PRMT "PRMT"
|
| 53 | #define ACPI_SIG_RASF "RASF"
|
| 54 | #define ACPI_SIG_RAS2 "RAS2"
|
| 55 | #define ACPI_SIG_RGRT "RGRT"
|
| 56 | #define ACPI_SIG_RHCT "RHCT"
|
| 57 | #define ACPI_SIG_RIMT "RIMT"
|
| 58 | #define ACPI_SIG_SBST "SBST"
|
| 59 | #define ACPI_SIG_SDEI "SDEI"
|
| 60 | #define ACPI_SIG_SDEV "SDEV"
|
| 61 | #define ACPI_SIG_SVKL "SVKL"
|
| 62 | #define ACPI_SIG_SWFT "SWFT"
|
| 63 | #define ACPI_SIG_TDEL "TDEL"
|
| 64 |
|
| 65 | |
| 66 | * All tables must be byte-packed to match the ACPI specification, since
|
| 67 | * the tables are provided by the system BIOS.
|
| 68 |
|
| 69 | #pragma pack(1)
|
| 70 |
|
| 71 | |
| 72 | * Note: C bitfields are not used for this reason:
|
| 73 | *
|
| 74 | * "Bitfields are great and easy to read, but unfortunately the C language
|
| 75 | * does not specify the layout of bitfields in memory, which means they are
|
| 76 | * essentially useless for dealing with packed data in on-disk formats or
|
| 77 | * binary wire protocols." (Or ACPI tables and buffers.) "If you ask me,
|
| 78 | * this decision was a design error in C. Ritchie could have picked an order
|
| 79 | * and stuck with it." Norman Ramsey.
|
| 80 | * See http://stackoverflow.com/a/1053662/41661
|
| 81 |
|
| 82 |
|
| 83 | |
| 84 | *
|
| 85 | * AEST - Arm Error Source Table
|
| 86 | *
|
| 87 | * Conforms to: ACPI for the Armv8 RAS Extensions 1.1(Sep 2020) and
|
| 88 | * 2.0(May 2023) Platform Design Document.
|
| 89 | *
|
| 90 | *****************************************************************************
|
| 91 |
|
| 92 | struct acpi_table_aest {
|
| 93 | struct acpi_table_header header;
|
| 94 | };
|
| 95 |
|
| 96 |
|
| 97 |
|
| 98 | struct acpi_aest_hdr {
|
| 99 | u8 type;
|
| 100 | u16 length;
|
| 101 | u8 reserved;
|
| 102 | u32 node_specific_offset;
|
| 103 | u32 node_interface_offset;
|
| 104 | u32 node_interrupt_offset;
|
| 105 | u32 node_interrupt_count;
|
| 106 | u64 timestamp_rate;
|
| 107 | u64 reserved1;
|
| 108 | u64 error_injection_rate;
|
| 109 | };
|
| 110 |
|
| 111 |
|
| 112 |
|
| 113 | #define ACPI_AEST_PROCESSOR_ERROR_NODE 0
|
| 114 | #define ACPI_AEST_MEMORY_ERROR_NODE 1
|
| 115 | #define ACPI_AEST_SMMU_ERROR_NODE 2
|
| 116 | #define ACPI_AEST_VENDOR_ERROR_NODE 3
|
| 117 | #define ACPI_AEST_GIC_ERROR_NODE 4
|
| 118 | #define ACPI_AEST_PCIE_ERROR_NODE 5
|
| 119 | #define ACPI_AEST_PROXY_ERROR_NODE 6
|
| 120 | #define ACPI_AEST_NODE_TYPE_RESERVED 7
|
| 121 |
|
| 122 | |
| 123 | * AEST subtables (Error nodes)
|
| 124 |
|
| 125 |
|
| 126 |
|
| 127 |
|
| 128 | typedef struct acpi_aest_processor {
|
| 129 | u32 processor_id;
|
| 130 | u8 resource_type;
|
| 131 | u8 reserved;
|
| 132 | u8 flags;
|
| 133 | u8 revision;
|
| 134 | u64 processor_affinity;
|
| 135 |
|
| 136 | } acpi_aest_processor;
|
| 137 |
|
| 138 |
|
| 139 |
|
| 140 | #define ACPI_AEST_CACHE_RESOURCE 0
|
| 141 | #define ACPI_AEST_TLB_RESOURCE 1
|
| 142 | #define ACPI_AEST_GENERIC_RESOURCE 2
|
| 143 | #define ACPI_AEST_RESOURCE_RESERVED 3
|
| 144 |
|
| 145 |
|
| 146 |
|
| 147 | typedef struct acpi_aest_processor_cache {
|
| 148 | u32 cache_reference;
|
| 149 | u32 reserved;
|
| 150 |
|
| 151 | } acpi_aest_processor_cache;
|
| 152 |
|
| 153 |
|
| 154 |
|
| 155 | #define ACPI_AEST_CACHE_DATA 0
|
| 156 | #define ACPI_AEST_CACHE_INSTRUCTION 1
|
| 157 | #define ACPI_AEST_CACHE_UNIFIED 2
|
| 158 | #define ACPI_AEST_CACHE_RESERVED 3
|
| 159 |
|
| 160 |
|
| 161 |
|
| 162 | typedef struct acpi_aest_processor_tlb {
|
| 163 | u32 tlb_level;
|
| 164 | u32 reserved;
|
| 165 |
|
| 166 | } acpi_aest_processor_tlb;
|
| 167 |
|
| 168 |
|
| 169 |
|
| 170 | typedef struct acpi_aest_processor_generic {
|
| 171 | u32 resource;
|
| 172 |
|
| 173 | } acpi_aest_processor_generic;
|
| 174 |
|
| 175 |
|
| 176 |
|
| 177 | typedef struct acpi_aest_memory {
|
| 178 | u32 srat_proximity_domain;
|
| 179 |
|
| 180 | } acpi_aest_memory;
|
| 181 |
|
| 182 |
|
| 183 |
|
| 184 | typedef struct acpi_aest_smmu {
|
| 185 | u32 iort_node_reference;
|
| 186 | u32 subcomponent_reference;
|
| 187 |
|
| 188 | } acpi_aest_smmu;
|
| 189 |
|
| 190 |
|
| 191 |
|
| 192 | typedef struct acpi_aest_vendor {
|
| 193 | u32 acpi_hid;
|
| 194 | u32 acpi_uid;
|
| 195 | u8 vendor_specific_data[16];
|
| 196 |
|
| 197 | } acpi_aest_vendor;
|
| 198 |
|
| 199 | struct acpi_aest_vendor_v2 {
|
| 200 | char acpi_hid[8];
|
| 201 | u32 acpi_uid;
|
| 202 | u8 vendor_specific_data[16];
|
| 203 | };
|
| 204 |
|
| 205 |
|
| 206 |
|
| 207 | typedef struct acpi_aest_gic {
|
| 208 | u32 interface_type;
|
| 209 | u32 instance_id;
|
| 210 |
|
| 211 | } acpi_aest_gic;
|
| 212 |
|
| 213 |
|
| 214 |
|
| 215 | #define ACPI_AEST_GIC_CPU 0
|
| 216 | #define ACPI_AEST_GIC_DISTRIBUTOR 1
|
| 217 | #define ACPI_AEST_GIC_REDISTRIBUTOR 2
|
| 218 | #define ACPI_AEST_GIC_ITS 3
|
| 219 | #define ACPI_AEST_GIC_RESERVED 4
|
| 220 |
|
| 221 |
|
| 222 |
|
| 223 | struct acpi_aest_pcie {
|
| 224 | u32 iort_node_reference;
|
| 225 | };
|
| 226 |
|
| 227 |
|
| 228 |
|
| 229 | struct acpi_aest_proxy {
|
| 230 | u64 node_address;
|
| 231 | };
|
| 232 |
|
| 233 |
|
| 234 |
|
| 235 | typedef struct acpi_aest_node_interface {
|
| 236 | u8 type;
|
| 237 | u8 reserved[3];
|
| 238 | u32 flags;
|
| 239 | u64 address;
|
| 240 | u32 error_record_index;
|
| 241 | u32 error_record_count;
|
| 242 | u64 error_record_implemented;
|
| 243 | u64 error_status_reporting;
|
| 244 | u64 addressing_mode;
|
| 245 |
|
| 246 | } acpi_aest_node_interface;
|
| 247 |
|
| 248 |
|
| 249 |
|
| 250 | struct acpi_aest_node_interface_header {
|
| 251 | u8 type;
|
| 252 | u8 group_format;
|
| 253 | u8 reserved[2];
|
| 254 | u32 flags;
|
| 255 | u64 address;
|
| 256 | u32 error_record_index;
|
| 257 | u32 error_record_count;
|
| 258 | };
|
| 259 |
|
| 260 | #define ACPI_AEST_NODE_GROUP_FORMAT_4K 0
|
| 261 | #define ACPI_AEST_NODE_GROUP_FORMAT_16K 1
|
| 262 | #define ACPI_AEST_NODE_GROUP_FORMAT_64K 2
|
| 263 |
|
| 264 | struct acpi_aest_node_interface_common {
|
| 265 | u32 error_node_device;
|
| 266 | u32 processor_affinity;
|
| 267 | u64 error_group_register_base;
|
| 268 | u64 fault_inject_register_base;
|
| 269 | u64 interrupt_config_register_base;
|
| 270 | };
|
| 271 |
|
| 272 | struct acpi_aest_node_interface_4k {
|
| 273 | u64 error_record_implemented;
|
| 274 | u64 error_status_reporting;
|
| 275 | u64 addressing_mode;
|
| 276 | struct acpi_aest_node_interface_common common;
|
| 277 | };
|
| 278 |
|
| 279 | struct acpi_aest_node_interface_16k {
|
| 280 | u64 error_record_implemented[4];
|
| 281 | u64 error_status_reporting[4];
|
| 282 | u64 addressing_mode[4];
|
| 283 | struct acpi_aest_node_interface_common common;
|
| 284 | };
|
| 285 |
|
| 286 | struct acpi_aest_node_interface_64k {
|
| 287 | u64 error_record_implemented[14];
|
| 288 | u64 error_status_reporting[14];
|
| 289 | u64 addressing_mode[14];
|
| 290 | struct acpi_aest_node_interface_common common;
|
| 291 | };
|
| 292 |
|
| 293 |
|
| 294 |
|
| 295 | #define ACPI_AEST_NODE_SYSTEM_REGISTER 0
|
| 296 | #define ACPI_AEST_NODE_MEMORY_MAPPED 1
|
| 297 | #define ACPI_AEST_NODE_SINGLE_RECORD_MEMORY_MAPPED 2
|
| 298 | #define ACPI_AEST_XFACE_RESERVED 3
|
| 299 |
|
| 300 |
|
| 301 |
|
| 302 | typedef struct acpi_aest_node_interrupt {
|
| 303 | u8 type;
|
| 304 | u8 reserved[2];
|
| 305 | u8 flags;
|
| 306 | u32 gsiv;
|
| 307 | u8 iort_id;
|
| 308 | u8 reserved1[3];
|
| 309 |
|
| 310 | } acpi_aest_node_interrupt;
|
| 311 |
|
| 312 |
|
| 313 |
|
| 314 | struct acpi_aest_node_interrupt_v2 {
|
| 315 | u8 type;
|
| 316 | u8 reserved[2];
|
| 317 | u8 flags;
|
| 318 | u32 gsiv;
|
| 319 | u8 reserved1[4];
|
| 320 | };
|
| 321 |
|
| 322 |
|
| 323 |
|
| 324 | #define ACPI_AEST_NODE_FAULT_HANDLING 0
|
| 325 | #define ACPI_AEST_NODE_ERROR_RECOVERY 1
|
| 326 | #define ACPI_AEST_XRUPT_RESERVED 2
|
| 327 |
|
| 328 | |
| 329 | * AGDI - Arm Generic Diagnostic Dump and Reset Device Interface
|
| 330 | *
|
| 331 | * Conforms to "ACPI for Arm Components 1.1, Platform Design Document"
|
| 332 | * ARM DEN0093 v1.1
|
| 333 | *
|
| 334 | *****************************************************************************
|
| 335 | struct acpi_table_agdi {
|
| 336 | struct acpi_table_header header;
|
| 337 | u8 flags;
|
| 338 | u8 reserved[3];
|
| 339 | u32 sdei_event;
|
| 340 | u32 gsiv;
|
| 341 | };
|
| 342 |
|
| 343 |
|
| 344 |
|
| 345 | #define ACPI_AGDI_SIGNALING_MODE (1)
|
| 346 |
|
| 347 | |
| 348 | *
|
| 349 | * APMT - ARM Performance Monitoring Unit Table
|
| 350 | *
|
| 351 | * Conforms to:
|
| 352 | * ARM Performance Monitoring Unit Architecture 1.0 Platform Design Document
|
| 353 | * ARM DEN0117 v1.0 November 25, 2021
|
| 354 | *
|
| 355 | *****************************************************************************
|
| 356 |
|
| 357 | struct acpi_table_apmt {
|
| 358 | struct acpi_table_header header;
|
| 359 | };
|
| 360 |
|
| 361 | #define ACPI_APMT_NODE_ID_LENGTH 4
|
| 362 |
|
| 363 | |
| 364 | * APMT subtables
|
| 365 |
|
| 366 | struct acpi_apmt_node {
|
| 367 | u16 length;
|
| 368 | u8 flags;
|
| 369 | u8 type;
|
| 370 | u32 id;
|
| 371 | u64 inst_primary;
|
| 372 | u32 inst_secondary;
|
| 373 | u64 base_address0;
|
| 374 | u64 base_address1;
|
| 375 | u32 ovflw_irq;
|
| 376 | u32 reserved;
|
| 377 | u32 ovflw_irq_flags;
|
| 378 | u32 proc_affinity;
|
| 379 | u32 impl_id;
|
| 380 | };
|
| 381 |
|
| 382 |
|
| 383 |
|
| 384 | #define ACPI_APMT_FLAGS_DUAL_PAGE (1<<0)
|
| 385 | #define ACPI_APMT_FLAGS_AFFINITY (1<<1)
|
| 386 | #define ACPI_APMT_FLAGS_ATOMIC (1<<2)
|
| 387 |
|
| 388 |
|
| 389 |
|
| 390 | #define ACPI_APMT_FLAGS_DUAL_PAGE_NSUPP (0<<0)
|
| 391 | #define ACPI_APMT_FLAGS_DUAL_PAGE_SUPP (1<<0)
|
| 392 |
|
| 393 |
|
| 394 | #define ACPI_APMT_FLAGS_AFFINITY_PROC (0<<1)
|
| 395 | #define ACPI_APMT_FLAGS_AFFINITY_PROC_CONTAINER (1<<1)
|
| 396 |
|
| 397 |
|
| 398 | #define ACPI_APMT_FLAGS_ATOMIC_NSUPP (0<<2)
|
| 399 | #define ACPI_APMT_FLAGS_ATOMIC_SUPP (1<<2)
|
| 400 |
|
| 401 |
|
| 402 |
|
| 403 | enum acpi_apmt_node_type {
|
| 404 | ACPI_APMT_NODE_TYPE_MC = 0x00,
|
| 405 | ACPI_APMT_NODE_TYPE_SMMU = 0x01,
|
| 406 | ACPI_APMT_NODE_TYPE_PCIE_ROOT = 0x02,
|
| 407 | ACPI_APMT_NODE_TYPE_ACPI = 0x03,
|
| 408 | ACPI_APMT_NODE_TYPE_CACHE = 0x04,
|
| 409 | ACPI_APMT_NODE_TYPE_COUNT
|
| 410 | };
|
| 411 |
|
| 412 |
|
| 413 |
|
| 414 | #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE (1<<0)
|
| 415 | #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE (1<<1)
|
| 416 |
|
| 417 |
|
| 418 |
|
| 419 | #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_LEVEL (0<<0)
|
| 420 | #define ACPI_APMT_OVFLW_IRQ_FLAGS_MODE_EDGE (1<<0)
|
| 421 |
|
| 422 |
|
| 423 |
|
| 424 | #define ACPI_APMT_OVFLW_IRQ_FLAGS_TYPE_WIRED (0<<1)
|
| 425 |
|
| 426 | |
| 427 | *
|
| 428 | * BDAT - BIOS Data ACPI Table
|
| 429 | *
|
| 430 | * Conforms to "BIOS Data ACPI Table", Interface Specification v4.0 Draft 5
|
| 431 | * Nov 2020
|
| 432 | *
|
| 433 | *****************************************************************************
|
| 434 |
|
| 435 | struct acpi_table_bdat {
|
| 436 | struct acpi_table_header header;
|
| 437 | struct acpi_generic_address gas;
|
| 438 | };
|
| 439 |
|
| 440 | |
| 441 | *
|
| 442 | * CCEL - CC-Event Log
|
| 443 | * From: "Guest-Host-Communication Interface (GHCI) for Intel
|
| 444 | * Trust Domain Extensions (Intel TDX)". Feb 2022
|
| 445 | *
|
| 446 | *****************************************************************************
|
| 447 |
|
| 448 | struct acpi_table_ccel {
|
| 449 | struct acpi_table_header header;
|
| 450 | u8 CCtype;
|
| 451 | u8 Ccsub_type;
|
| 452 | u16 reserved;
|
| 453 | u64 log_area_minimum_length;
|
| 454 | u64 log_area_start_address;
|
| 455 | };
|
| 456 |
|
| 457 | |
| 458 | *
|
| 459 | * ERDT - Enhanced Resource Director Technology (ERDT) table
|
| 460 | *
|
| 461 | * Conforms to "Intel Resource Director Technology Architecture Specification"
|
| 462 | * Version 1.1, January 2025
|
| 463 | *
|
| 464 | *****************************************************************************
|
| 465 |
|
| 466 | struct acpi_table_erdt {
|
| 467 | struct acpi_table_header header;
|
| 468 | u32 max_clos;
|
| 469 | u8 reserved[24];
|
| 470 | u8 erdt_substructures[];
|
| 471 | };
|
| 472 |
|
| 473 |
|
| 474 |
|
| 475 | enum acpi_erdt_type {
|
| 476 | ACPI_ERDT_TYPE_RMDD = 0,
|
| 477 | ACPI_ERDT_TYPE_CACD = 1,
|
| 478 | ACPI_ERDT_TYPE_DACD = 2,
|
| 479 | ACPI_ERDT_TYPE_CMRC = 3,
|
| 480 | ACPI_ERDT_TYPE_MMRC = 4,
|
| 481 | ACPI_ERDT_TYPE_MARC = 5,
|
| 482 | ACPI_ERDT_TYPE_CARC = 6,
|
| 483 | ACPI_ERDT_TYPE_CMRD = 7,
|
| 484 | ACPI_ERDT_TYPE_IBRD = 8,
|
| 485 | ACPI_ERDT_TYPE_IBAD = 9,
|
| 486 | ACPI_ERDT_TYPE_CARD = 10,
|
| 487 | ACPI_ERDT_TYPE_RESERVED = 11
|
| 488 | };
|
| 489 |
|
| 490 | |
| 491 | * ERDT Subtables, correspond to Type in struct acpi_subtbl_hdr_16
|
| 492 |
|
| 493 |
|
| 494 |
|
| 495 |
|
| 496 | struct acpi_erdt_rmdd {
|
| 497 | struct acpi_subtbl_hdr_16 header;
|
| 498 | u16 flags;
|
| 499 | u16 IO_l3_slices;
|
| 500 | u8 IO_l3_sets;
|
| 501 | u8 IO_l3_ways;
|
| 502 | u64 reserved;
|
| 503 | u16 domain_id;
|
| 504 | u32 max_rmid;
|
| 505 | u64 creg_base;
|
| 506 | u16 creg_size;
|
| 507 | u8 rmdd_structs[];
|
| 508 | };
|
| 509 |
|
| 510 |
|
| 511 |
|
| 512 | struct acpi_erdt_cacd {
|
| 513 | struct acpi_subtbl_hdr_16 header;
|
| 514 | u16 reserved;
|
| 515 | u16 domain_id;
|
| 516 | u32 X2APICIDS[];
|
| 517 | };
|
| 518 |
|
| 519 |
|
| 520 |
|
| 521 | struct acpi_erdt_dacd {
|
| 522 | struct acpi_subtbl_hdr_16 header;
|
| 523 | u16 reserved;
|
| 524 | u16 domain_id;
|
| 525 | u8 dev_paths[];
|
| 526 | };
|
| 527 |
|
| 528 | struct acpi_erdt_dacd_dev_paths {
|
| 529 | struct acpi_subtable_header header;
|
| 530 | u16 segment;
|
| 531 | u8 reserved;
|
| 532 | u8 start_bus;
|
| 533 | u8 path[];
|
| 534 | };
|
| 535 |
|
| 536 |
|
| 537 |
|
| 538 | struct acpi_erdt_cmrc {
|
| 539 | struct acpi_subtbl_hdr_16 header;
|
| 540 | u32 reserved1;
|
| 541 | u32 flags;
|
| 542 | u8 index_fn;
|
| 543 | u8 reserved2[11];
|
| 544 | u64 cmt_reg_base;
|
| 545 | u32 cmt_reg_size;
|
| 546 | u16 clump_size;
|
| 547 | u16 clump_stride;
|
| 548 | u64 up_scale;
|
| 549 | };
|
| 550 |
|
| 551 |
|
| 552 |
|
| 553 | struct acpi_erdt_mmrc {
|
| 554 | struct acpi_subtbl_hdr_16 header;
|
| 555 | u32 reserved1;
|
| 556 | u32 flags;
|
| 557 | u8 index_fn;
|
| 558 | u8 reserved2[11];
|
| 559 | u64 reg_base;
|
| 560 | u32 reg_size;
|
| 561 | u8 counter_width;
|
| 562 | u64 up_scale;
|
| 563 | u8 reserved3[7];
|
| 564 | u32 corr_factor_list_len;
|
| 565 | u32 corr_factor_list[];
|
| 566 | };
|
| 567 |
|
| 568 |
|
| 569 |
|
| 570 | struct acpi_erdt_marc {
|
| 571 | struct acpi_subtbl_hdr_16 header;
|
| 572 | u16 reserved1;
|
| 573 | u16 flags;
|
| 574 | u8 index_fn;
|
| 575 | u8 reserved2[7];
|
| 576 | u64 reg_base_opt;
|
| 577 | u64 reg_base_min;
|
| 578 | u64 reg_base_max;
|
| 579 | u32 mba_reg_size;
|
| 580 | u32 mba_ctrl_range;
|
| 581 | };
|
| 582 |
|
| 583 |
|
| 584 |
|
| 585 | struct acpi_erdt_carc {
|
| 586 | struct acpi_subtbl_hdr_16 header;
|
| 587 | };
|
| 588 |
|
| 589 |
|
| 590 |
|
| 591 | struct acpi_erdt_cmrd {
|
| 592 | struct acpi_subtbl_hdr_16 header;
|
| 593 | u32 reserved1;
|
| 594 | u32 flags;
|
| 595 | u8 index_fn;
|
| 596 | u8 reserved2[11];
|
| 597 | u64 reg_base;
|
| 598 | u32 reg_size;
|
| 599 | u16 cmt_reg_off;
|
| 600 | u16 cmt_clump_size;
|
| 601 | u64 up_scale;
|
| 602 | };
|
| 603 |
|
| 604 |
|
| 605 |
|
| 606 | struct acpi_erdt_ibrd {
|
| 607 | struct acpi_subtbl_hdr_16 header;
|
| 608 | u32 reserved1;
|
| 609 | u32 flags;
|
| 610 | u8 index_fn;
|
| 611 | u8 reserved2[11];
|
| 612 | u64 reg_base;
|
| 613 | u32 reg_size;
|
| 614 | u16 total_bw_offset;
|
| 615 | u16 Iomiss_bw_offset;
|
| 616 | u16 total_bw_clump;
|
| 617 | u16 Iomiss_bw_clump;
|
| 618 | u8 reserved3[7];
|
| 619 | u8 counter_width;
|
| 620 | u64 up_scale;
|
| 621 | u32 corr_factor_list_len;
|
| 622 | u32 corr_factor_list[];
|
| 623 | };
|
| 624 |
|
| 625 |
|
| 626 |
|
| 627 | struct acpi_erdt_ibad {
|
| 628 | struct acpi_subtbl_hdr_16 header;
|
| 629 | };
|
| 630 |
|
| 631 |
|
| 632 |
|
| 633 | struct acpi_erdt_card {
|
| 634 | struct acpi_subtbl_hdr_16 header;
|
| 635 | u32 reserved1;
|
| 636 | u32 flags;
|
| 637 | u32 contention_mask;
|
| 638 | u8 index_fn;
|
| 639 | u8 reserved2[7];
|
| 640 | u64 reg_base;
|
| 641 | u32 reg_size;
|
| 642 | u16 cat_reg_offset;
|
| 643 | u16 cat_reg_block_size;
|
| 644 | };
|
| 645 |
|
| 646 | |
| 647 | *
|
| 648 | * IORT - IO Remapping Table
|
| 649 | *
|
| 650 | * Conforms to "IO Remapping Table System Software on ARM Platforms",
|
| 651 | * Document number: ARM DEN 0049E.f, Apr 2024
|
| 652 | *
|
| 653 | *****************************************************************************
|
| 654 |
|
| 655 | struct acpi_table_iort {
|
| 656 | struct acpi_table_header header;
|
| 657 | u32 node_count;
|
| 658 | u32 node_offset;
|
| 659 | u32 reserved;
|
| 660 | };
|
| 661 |
|
| 662 | |
| 663 | * IORT subtables
|
| 664 |
|
| 665 | struct acpi_iort_node {
|
| 666 | u8 type;
|
| 667 | u16 length;
|
| 668 | u8 revision;
|
| 669 | u32 identifier;
|
| 670 | u32 mapping_count;
|
| 671 | u32 mapping_offset;
|
| 672 | char node_data[];
|
| 673 | };
|
| 674 |
|
| 675 |
|
| 676 |
|
| 677 | enum acpi_iort_node_type {
|
| 678 | ACPI_IORT_NODE_ITS_GROUP = 0x00,
|
| 679 | ACPI_IORT_NODE_NAMED_COMPONENT = 0x01,
|
| 680 | ACPI_IORT_NODE_PCI_ROOT_COMPLEX = 0x02,
|
| 681 | ACPI_IORT_NODE_SMMU = 0x03,
|
| 682 | ACPI_IORT_NODE_SMMU_V3 = 0x04,
|
| 683 | ACPI_IORT_NODE_PMCG = 0x05,
|
| 684 | ACPI_IORT_NODE_RMR = 0x06,
|
| 685 | ACPI_IORT_NODE_IWB = 0x07,
|
| 686 | };
|
| 687 |
|
| 688 | struct acpi_iort_id_mapping {
|
| 689 | u32 input_base;
|
| 690 | u32 id_count;
|
| 691 | u32 output_base;
|
| 692 | u32 output_reference;
|
| 693 | u32 flags;
|
| 694 | };
|
| 695 |
|
| 696 |
|
| 697 |
|
| 698 | #define ACPI_IORT_ID_SINGLE_MAPPING (1)
|
| 699 |
|
| 700 | struct acpi_iort_memory_access {
|
| 701 | u32 cache_coherency;
|
| 702 | u8 hints;
|
| 703 | u16 reserved;
|
| 704 | u8 memory_flags;
|
| 705 | };
|
| 706 |
|
| 707 |
|
| 708 |
|
| 709 | #define ACPI_IORT_NODE_COHERENT 0x00000001
|
| 710 | #define ACPI_IORT_NODE_NOT_COHERENT 0x00000000
|
| 711 |
|
| 712 |
|
| 713 |
|
| 714 | #define ACPI_IORT_HT_TRANSIENT (1)
|
| 715 | #define ACPI_IORT_HT_WRITE (1<<1)
|
| 716 | #define ACPI_IORT_HT_READ (1<<2)
|
| 717 | #define ACPI_IORT_HT_OVERRIDE (1<<3)
|
| 718 |
|
| 719 |
|
| 720 |
|
| 721 | #define ACPI_IORT_MF_COHERENCY (1)
|
| 722 | #define ACPI_IORT_MF_ATTRIBUTES (1<<1)
|
| 723 | #define ACPI_IORT_MF_CANWBS (1<<2)
|
| 724 |
|
| 725 | |
| 726 | * IORT node specific subtables
|
| 727 |
|
| 728 | struct acpi_iort_its_group {
|
| 729 | u32 its_count;
|
| 730 | u32 identifiers[];
|
| 731 | };
|
| 732 |
|
| 733 | struct acpi_iort_named_component {
|
| 734 | u32 node_flags;
|
| 735 | u64 memory_properties;
|
| 736 | u8 memory_address_limit;
|
| 737 | char device_name[];
|
| 738 | };
|
| 739 |
|
| 740 |
|
| 741 |
|
| 742 | #define ACPI_IORT_NC_STALL_SUPPORTED (1)
|
| 743 | #define ACPI_IORT_NC_PASID_BITS (31<<1)
|
| 744 |
|
| 745 | struct acpi_iort_root_complex {
|
| 746 | u64 memory_properties;
|
| 747 | u32 ats_attribute;
|
| 748 | u32 pci_segment_number;
|
| 749 | u8 memory_address_limit;
|
| 750 | u16 pasid_capabilities;
|
| 751 | u8 reserved[];
|
| 752 | };
|
| 753 |
|
| 754 |
|
| 755 |
|
| 756 | #define ACPI_IORT_ATS_SUPPORTED (1)
|
| 757 | #define ACPI_IORT_PRI_SUPPORTED (1<<1)
|
| 758 | #define ACPI_IORT_PASID_FWD_SUPPORTED (1<<2)
|
| 759 |
|
| 760 |
|
| 761 | #define ACPI_IORT_PASID_MAX_WIDTH (0x1F)
|
| 762 |
|
| 763 | struct acpi_iort_smmu {
|
| 764 | u64 base_address;
|
| 765 | u64 span;
|
| 766 | u32 model;
|
| 767 | u32 flags;
|
| 768 | u32 global_interrupt_offset;
|
| 769 | u32 context_interrupt_count;
|
| 770 | u32 context_interrupt_offset;
|
| 771 | u32 pmu_interrupt_count;
|
| 772 | u32 pmu_interrupt_offset;
|
| 773 | u64 interrupts[];
|
| 774 | };
|
| 775 |
|
| 776 |
|
| 777 |
|
| 778 | #define ACPI_IORT_SMMU_V1 0x00000000
|
| 779 | #define ACPI_IORT_SMMU_V2 0x00000001
|
| 780 | #define ACPI_IORT_SMMU_CORELINK_MMU400 0x00000002
|
| 781 | #define ACPI_IORT_SMMU_CORELINK_MMU500 0x00000003
|
| 782 | #define ACPI_IORT_SMMU_CORELINK_MMU401 0x00000004
|
| 783 | #define ACPI_IORT_SMMU_CAVIUM_THUNDERX 0x00000005
|
| 784 |
|
| 785 |
|
| 786 |
|
| 787 | #define ACPI_IORT_SMMU_DVM_SUPPORTED (1)
|
| 788 | #define ACPI_IORT_SMMU_COHERENT_WALK (1<<1)
|
| 789 |
|
| 790 |
|
| 791 |
|
| 792 | struct acpi_iort_smmu_gsi {
|
| 793 | u32 nsg_irpt;
|
| 794 | u32 nsg_irpt_flags;
|
| 795 | u32 nsg_cfg_irpt;
|
| 796 | u32 nsg_cfg_irpt_flags;
|
| 797 | };
|
| 798 |
|
| 799 | struct acpi_iort_smmu_v3 {
|
| 800 | u64 base_address;
|
| 801 | u32 flags;
|
| 802 | u32 reserved;
|
| 803 | u64 vatos_address;
|
| 804 | u32 model;
|
| 805 | u32 event_gsiv;
|
| 806 | u32 pri_gsiv;
|
| 807 | u32 gerr_gsiv;
|
| 808 | u32 sync_gsiv;
|
| 809 | u32 pxm;
|
| 810 | u32 id_mapping_index;
|
| 811 | };
|
| 812 |
|
| 813 |
|
| 814 |
|
| 815 | #define ACPI_IORT_SMMU_V3_GENERIC 0x00000000
|
| 816 | #define ACPI_IORT_SMMU_V3_HISILICON_HI161X 0x00000001
|
| 817 | #define ACPI_IORT_SMMU_V3_CAVIUM_CN99XX 0x00000002
|
| 818 |
|
| 819 |
|
| 820 |
|
| 821 | #define ACPI_IORT_SMMU_V3_COHACC_OVERRIDE (1)
|
| 822 | #define ACPI_IORT_SMMU_V3_HTTU_OVERRIDE (3<<1)
|
| 823 | #define ACPI_IORT_SMMU_V3_PXM_VALID (1<<3)
|
| 824 | #define ACPI_IORT_SMMU_V3_DEVICEID_VALID (1<<4)
|
| 825 |
|
| 826 | struct acpi_iort_pmcg {
|
| 827 | u64 page0_base_address;
|
| 828 | u32 overflow_gsiv;
|
| 829 | u32 node_reference;
|
| 830 | u64 page1_base_address;
|
| 831 | };
|
| 832 |
|
| 833 | struct acpi_iort_rmr {
|
| 834 | u32 flags;
|
| 835 | u32 rmr_count;
|
| 836 | u32 rmr_offset;
|
| 837 | };
|
| 838 |
|
| 839 |
|
| 840 | #define ACPI_IORT_RMR_REMAP_PERMITTED (1)
|
| 841 | #define ACPI_IORT_RMR_ACCESS_PRIVILEGE (1<<1)
|
| 842 |
|
| 843 | |
| 844 | * Macro to access the Access Attributes in flags field above:
|
| 845 | * Access Attributes is encoded in bits 9:2
|
| 846 |
|
| 847 | #define ACPI_IORT_RMR_ACCESS_ATTRIBUTES(flags) (((flags) >> 2) & 0xFF)
|
| 848 |
|
| 849 |
|
| 850 |
|
| 851 | #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRNE 0x00
|
| 852 | #define ACPI_IORT_RMR_ATTR_DEVICE_NGNRE 0x01
|
| 853 | #define ACPI_IORT_RMR_ATTR_DEVICE_NGRE 0x02
|
| 854 | #define ACPI_IORT_RMR_ATTR_DEVICE_GRE 0x03
|
| 855 | #define ACPI_IORT_RMR_ATTR_NORMAL_NC 0x04
|
| 856 | #define ACPI_IORT_RMR_ATTR_NORMAL_IWB_OWB 0x05
|
| 857 |
|
| 858 | struct acpi_iort_rmr_desc {
|
| 859 | u64 base_address;
|
| 860 | u64 length;
|
| 861 | u32 reserved;
|
| 862 | };
|
| 863 |
|
| 864 | struct acpi_iort_iwb {
|
| 865 | u64 base_address;
|
| 866 | u16 iwb_index;
|
| 867 | char device_name[];
|
| 868 | };
|
| 869 |
|
| 870 | |
| 871 | *
|
| 872 | * IOVT - I/O Virtualization Table
|
| 873 | *
|
| 874 | * Conforms to "LoongArch I/O Virtualization Table",
|
| 875 | * Version 0.1, October 2024
|
| 876 | *
|
| 877 | *****************************************************************************
|
| 878 |
|
| 879 | struct acpi_table_iovt {
|
| 880 | struct acpi_table_header header;
|
| 881 | u16 iommu_count;
|
| 882 | u16 iommu_offset;
|
| 883 | u8 reserved[8];
|
| 884 | };
|
| 885 |
|
| 886 |
|
| 887 |
|
| 888 | struct acpi_iovt_header {
|
| 889 | u16 type;
|
| 890 | u16 length;
|
| 891 | };
|
| 892 |
|
| 893 |
|
| 894 |
|
| 895 | enum acpi_iovt_iommu_type {
|
| 896 | ACPI_IOVT_IOMMU_V1 = 0x00,
|
| 897 | ACPI_IOVT_IOMMU_RESERVED = 0x01
|
| 898 | };
|
| 899 |
|
| 900 |
|
| 901 |
|
| 902 | struct acpi_iovt_iommu {
|
| 903 | struct acpi_iovt_header header;
|
| 904 | u32 flags;
|
| 905 | u16 segment;
|
| 906 | u16 phy_width;
|
| 907 | u16 virt_width;
|
| 908 | u16 max_page_level;
|
| 909 | u64 page_size;
|
| 910 | u32 device_id;
|
| 911 | u64 base_address;
|
| 912 | u32 address_space_size;
|
| 913 | u8 interrupt_type;
|
| 914 | u8 reserved[3];
|
| 915 | u32 gsi_number;
|
| 916 | u32 proximity_domain;
|
| 917 | u32 max_device_num;
|
| 918 | u32 device_entry_num;
|
| 919 | u32 device_entry_offset;
|
| 920 | };
|
| 921 |
|
| 922 | struct acpi_iovt_device_entry {
|
| 923 | u8 type;
|
| 924 | u8 length;
|
| 925 | u8 flags;
|
| 926 | u8 reserved[3];
|
| 927 | u16 device_id;
|
| 928 | };
|
| 929 |
|
| 930 | enum acpi_iovt_device_entry_type {
|
| 931 | ACPI_IOVT_DEVICE_ENTRY_SINGLE = 0x00,
|
| 932 | ACPI_IOVT_DEVICE_ENTRY_START = 0x01,
|
| 933 | ACPI_IOVT_DEVICE_ENTRY_END = 0x02,
|
| 934 | ACPI_IOVT_DEVICE_ENTRY_RESERVED = 0x03
|
| 935 | };
|
| 936 |
|
| 937 | |
| 938 | *
|
| 939 | * IVRS - I/O Virtualization Reporting Structure
|
| 940 | * Version 1
|
| 941 | *
|
| 942 | * Conforms to "AMD I/O Virtualization Technology (IOMMU) Specification",
|
| 943 | * Revision 1.26, February 2009.
|
| 944 | *
|
| 945 | *****************************************************************************
|
| 946 |
|
| 947 | struct acpi_table_ivrs {
|
| 948 | struct acpi_table_header header;
|
| 949 | u32 info;
|
| 950 | u64 reserved;
|
| 951 | };
|
| 952 |
|
| 953 |
|
| 954 |
|
| 955 | #define ACPI_IVRS_PHYSICAL_SIZE 0x00007F00
|
| 956 | #define ACPI_IVRS_VIRTUAL_SIZE 0x003F8000
|
| 957 | #define ACPI_IVRS_ATS_RESERVED 0x00400000
|
| 958 |
|
| 959 |
|
| 960 |
|
| 961 | struct acpi_ivrs_header {
|
| 962 | u8 type;
|
| 963 | u8 flags;
|
| 964 | u16 length;
|
| 965 | u16 device_id;
|
| 966 | };
|
| 967 |
|
| 968 |
|
| 969 |
|
| 970 | enum acpi_ivrs_type {
|
| 971 | ACPI_IVRS_TYPE_HARDWARE1 = 0x10,
|
| 972 | ACPI_IVRS_TYPE_HARDWARE2 = 0x11,
|
| 973 | ACPI_IVRS_TYPE_HARDWARE3 = 0x40,
|
| 974 | ACPI_IVRS_TYPE_MEMORY1 = 0x20,
|
| 975 | ACPI_IVRS_TYPE_MEMORY2 = 0x21,
|
| 976 | ACPI_IVRS_TYPE_MEMORY3 = 0x22
|
| 977 | };
|
| 978 |
|
| 979 |
|
| 980 |
|
| 981 | #define ACPI_IVHD_TT_ENABLE (1)
|
| 982 | #define ACPI_IVHD_PASS_PW (1<<1)
|
| 983 | #define ACPI_IVHD_RES_PASS_PW (1<<2)
|
| 984 | #define ACPI_IVHD_ISOC (1<<3)
|
| 985 | #define ACPI_IVHD_IOTLB (1<<4)
|
| 986 |
|
| 987 |
|
| 988 |
|
| 989 | #define ACPI_IVMD_UNITY (1)
|
| 990 | #define ACPI_IVMD_READ (1<<1)
|
| 991 | #define ACPI_IVMD_WRITE (1<<2)
|
| 992 | #define ACPI_IVMD_EXCLUSION_RANGE (1<<3)
|
| 993 |
|
| 994 | |
| 995 | * IVRS subtables, correspond to Type in struct acpi_ivrs_header
|
| 996 |
|
| 997 |
|
| 998 |
|
| 999 |
|
| 1000 | struct acpi_ivrs_hardware_10 {
|
| 1001 | struct acpi_ivrs_header header;
|
| 1002 | u16 capability_offset;
|
| 1003 | u64 base_address;
|
| 1004 | u16 pci_segment_group;
|
| 1005 | u16 info;
|
| 1006 | u32 feature_reporting;
|
| 1007 | };
|
| 1008 |
|
| 1009 |
|
| 1010 |
|
| 1011 | struct acpi_ivrs_hardware_11 {
|
| 1012 | struct acpi_ivrs_header header;
|
| 1013 | u16 capability_offset;
|
| 1014 | u64 base_address;
|
| 1015 | u16 pci_segment_group;
|
| 1016 | u16 info;
|
| 1017 | u32 attributes;
|
| 1018 | u64 efr_register_image;
|
| 1019 | u64 reserved;
|
| 1020 | };
|
| 1021 |
|
| 1022 |
|
| 1023 |
|
| 1024 | #define ACPI_IVHD_MSI_NUMBER_MASK 0x001F
|
| 1025 | #define ACPI_IVHD_UNIT_ID_MASK 0x1F00
|
| 1026 |
|
| 1027 | |
| 1028 | * Device Entries for IVHD subtable, appear after struct acpi_ivrs_hardware structure.
|
| 1029 | * Upper two bits of the Type field are the (encoded) length of the structure.
|
| 1030 | * Currently, only 4 and 8 byte entries are defined. 16 and 32 byte entries
|
| 1031 | * are reserved for future use but not defined.
|
| 1032 |
|
| 1033 | struct acpi_ivrs_de_header {
|
| 1034 | u8 type;
|
| 1035 | u16 id;
|
| 1036 | u8 data_setting;
|
| 1037 | };
|
| 1038 |
|
| 1039 |
|
| 1040 |
|
| 1041 | #define ACPI_IVHD_ENTRY_LENGTH 0xC0
|
| 1042 |
|
| 1043 |
|
| 1044 |
|
| 1045 | enum acpi_ivrs_device_entry_type {
|
| 1046 |
|
| 1047 |
|
| 1048 | ACPI_IVRS_TYPE_PAD4 = 0,
|
| 1049 | ACPI_IVRS_TYPE_ALL = 1,
|
| 1050 | ACPI_IVRS_TYPE_SELECT = 2,
|
| 1051 | ACPI_IVRS_TYPE_START = 3,
|
| 1052 | ACPI_IVRS_TYPE_END = 4,
|
| 1053 |
|
| 1054 |
|
| 1055 |
|
| 1056 | ACPI_IVRS_TYPE_PAD8 = 64,
|
| 1057 | ACPI_IVRS_TYPE_NOT_USED = 65,
|
| 1058 | ACPI_IVRS_TYPE_ALIAS_SELECT = 66,
|
| 1059 | ACPI_IVRS_TYPE_ALIAS_START = 67,
|
| 1060 | ACPI_IVRS_TYPE_EXT_SELECT = 70,
|
| 1061 | ACPI_IVRS_TYPE_EXT_START = 71,
|
| 1062 | ACPI_IVRS_TYPE_SPECIAL = 72,
|
| 1063 |
|
| 1064 |
|
| 1065 |
|
| 1066 | ACPI_IVRS_TYPE_HID = 240
|
| 1067 | };
|
| 1068 |
|
| 1069 |
|
| 1070 |
|
| 1071 | #define ACPI_IVHD_INIT_PASS (1)
|
| 1072 | #define ACPI_IVHD_EINT_PASS (1<<1)
|
| 1073 | #define ACPI_IVHD_NMI_PASS (1<<2)
|
| 1074 | #define ACPI_IVHD_SYSTEM_MGMT (3<<4)
|
| 1075 | #define ACPI_IVHD_LINT0_PASS (1<<6)
|
| 1076 | #define ACPI_IVHD_LINT1_PASS (1<<7)
|
| 1077 |
|
| 1078 |
|
| 1079 |
|
| 1080 | struct acpi_ivrs_device4 {
|
| 1081 | struct acpi_ivrs_de_header header;
|
| 1082 | };
|
| 1083 |
|
| 1084 |
|
| 1085 |
|
| 1086 | struct acpi_ivrs_device8a {
|
| 1087 | struct acpi_ivrs_de_header header;
|
| 1088 | u8 reserved1;
|
| 1089 | u16 used_id;
|
| 1090 | u8 reserved2;
|
| 1091 | };
|
| 1092 |
|
| 1093 |
|
| 1094 |
|
| 1095 | struct acpi_ivrs_device8b {
|
| 1096 | struct acpi_ivrs_de_header header;
|
| 1097 | u32 extended_data;
|
| 1098 | };
|
| 1099 |
|
| 1100 |
|
| 1101 |
|
| 1102 | #define ACPI_IVHD_ATS_DISABLED (1<<31)
|
| 1103 |
|
| 1104 |
|
| 1105 |
|
| 1106 | struct acpi_ivrs_device8c {
|
| 1107 | struct acpi_ivrs_de_header header;
|
| 1108 | u8 handle;
|
| 1109 | u16 used_id;
|
| 1110 | u8 variety;
|
| 1111 | };
|
| 1112 |
|
| 1113 |
|
| 1114 |
|
| 1115 | #define ACPI_IVHD_IOAPIC 1
|
| 1116 | #define ACPI_IVHD_HPET 2
|
| 1117 |
|
| 1118 |
|
| 1119 |
|
| 1120 | struct acpi_ivrs_device_hid {
|
| 1121 | struct acpi_ivrs_de_header header;
|
| 1122 | u64 acpi_hid;
|
| 1123 | u64 acpi_cid;
|
| 1124 | u8 uid_type;
|
| 1125 | u8 uid_length;
|
| 1126 | };
|
| 1127 |
|
| 1128 |
|
| 1129 |
|
| 1130 | #define ACPI_IVRS_UID_NOT_PRESENT 0
|
| 1131 | #define ACPI_IVRS_UID_IS_INTEGER 1
|
| 1132 | #define ACPI_IVRS_UID_IS_STRING 2
|
| 1133 |
|
| 1134 |
|
| 1135 |
|
| 1136 | struct acpi_ivrs_memory {
|
| 1137 | struct acpi_ivrs_header header;
|
| 1138 | u16 aux_data;
|
| 1139 | u64 reserved;
|
| 1140 | u64 start_address;
|
| 1141 | u64 memory_length;
|
| 1142 | };
|
| 1143 |
|
| 1144 | |
| 1145 | *
|
| 1146 | * KEYP - Key Programming Interface for Root Complex Integrity and Data
|
| 1147 | * Encryption (IDE)
|
| 1148 | * Version 1
|
| 1149 | *
|
| 1150 | * Conforms to "Key Programming Interface for Root Complex Integrity and Data
|
| 1151 | * Encryption (IDE)" document. See under ACPI-Related Documents.
|
| 1152 | *
|
| 1153 | *****************************************************************************
|
| 1154 | struct acpi_table_keyp {
|
| 1155 | struct acpi_table_header header;
|
| 1156 | u32 reserved;
|
| 1157 | };
|
| 1158 |
|
| 1159 |
|
| 1160 |
|
| 1161 | struct acpi_keyp_common_header {
|
| 1162 | u8 type;
|
| 1163 | u8 reserved;
|
| 1164 | u16 length;
|
| 1165 | };
|
| 1166 |
|
| 1167 |
|
| 1168 |
|
| 1169 | enum acpi_keyp_type {
|
| 1170 | ACPI_KEYP_TYPE_CONFIG_UNIT = 0,
|
| 1171 | };
|
| 1172 |
|
| 1173 |
|
| 1174 |
|
| 1175 | struct acpi_keyp_rp_info {
|
| 1176 | u16 segment;
|
| 1177 | u8 bus;
|
| 1178 | u8 devfn;
|
| 1179 | };
|
| 1180 |
|
| 1181 |
|
| 1182 |
|
| 1183 | struct acpi_keyp_config_unit {
|
| 1184 | struct acpi_keyp_common_header header;
|
| 1185 | u8 protocol_type;
|
| 1186 | u8 version;
|
| 1187 | u8 root_port_count;
|
| 1188 | u8 flags;
|
| 1189 | u64 register_base_address;
|
| 1190 | struct acpi_keyp_rp_info rp_info[];
|
| 1191 | };
|
| 1192 |
|
| 1193 | enum acpi_keyp_protocol_type {
|
| 1194 | ACPI_KEYP_PROTO_TYPE_INVALID = 0,
|
| 1195 | ACPI_KEYP_PROTO_TYPE_PCIE,
|
| 1196 | ACPI_KEYP_PROTO_TYPE_CXL,
|
| 1197 | ACPI_KEYP_PROTO_TYPE_RESERVED
|
| 1198 | };
|
| 1199 |
|
| 1200 | #define ACPI_KEYP_F_TVM_USABLE (1)
|
| 1201 |
|
| 1202 | |
| 1203 | *
|
| 1204 | * LPIT - Low Power Idle Table
|
| 1205 | *
|
| 1206 | * Conforms to "ACPI Low Power Idle Table (LPIT)" July 2014.
|
| 1207 | *
|
| 1208 | *****************************************************************************
|
| 1209 |
|
| 1210 | struct acpi_table_lpit {
|
| 1211 | struct acpi_table_header header;
|
| 1212 | };
|
| 1213 |
|
| 1214 |
|
| 1215 |
|
| 1216 | struct acpi_lpit_header {
|
| 1217 | u32 type;
|
| 1218 | u32 length;
|
| 1219 | u16 unique_id;
|
| 1220 | u16 reserved;
|
| 1221 | u32 flags;
|
| 1222 | };
|
| 1223 |
|
| 1224 |
|
| 1225 |
|
| 1226 | enum acpi_lpit_type {
|
| 1227 | ACPI_LPIT_TYPE_NATIVE_CSTATE = 0x00,
|
| 1228 | ACPI_LPIT_TYPE_RESERVED = 0x01
|
| 1229 | };
|
| 1230 |
|
| 1231 |
|
| 1232 |
|
| 1233 | #define ACPI_LPIT_STATE_DISABLED (1)
|
| 1234 | #define ACPI_LPIT_NO_COUNTER (1<<1)
|
| 1235 |
|
| 1236 | |
| 1237 | * LPIT subtables, correspond to Type in struct acpi_lpit_header
|
| 1238 |
|
| 1239 |
|
| 1240 |
|
| 1241 |
|
| 1242 | struct acpi_lpit_native {
|
| 1243 | struct acpi_lpit_header header;
|
| 1244 | struct acpi_generic_address entry_trigger;
|
| 1245 | u32 residency;
|
| 1246 | u32 latency;
|
| 1247 | struct acpi_generic_address residency_counter;
|
| 1248 | u64 counter_frequency;
|
| 1249 | };
|
| 1250 |
|
| 1251 | |
| 1252 | *
|
| 1253 | * MADT - Multiple APIC Description Table
|
| 1254 | * Version 3
|
| 1255 | *
|
| 1256 | *****************************************************************************
|
| 1257 |
|
| 1258 | struct acpi_table_madt {
|
| 1259 | struct acpi_table_header header;
|
| 1260 | u32 address;
|
| 1261 | u32 flags;
|
| 1262 | };
|
| 1263 |
|
| 1264 |
|
| 1265 |
|
| 1266 | #define ACPI_MADT_PCAT_COMPAT (1)
|
| 1267 |
|
| 1268 |
|
| 1269 |
|
| 1270 | #define ACPI_MADT_DUAL_PIC 1
|
| 1271 | #define ACPI_MADT_MULTIPLE_APIC 0
|
| 1272 |
|
| 1273 |
|
| 1274 |
|
| 1275 | enum acpi_madt_type {
|
| 1276 | ACPI_MADT_TYPE_LOCAL_APIC = 0,
|
| 1277 | ACPI_MADT_TYPE_IO_APIC = 1,
|
| 1278 | ACPI_MADT_TYPE_INTERRUPT_OVERRIDE = 2,
|
| 1279 | ACPI_MADT_TYPE_NMI_SOURCE = 3,
|
| 1280 | ACPI_MADT_TYPE_LOCAL_APIC_NMI = 4,
|
| 1281 | ACPI_MADT_TYPE_LOCAL_APIC_OVERRIDE = 5,
|
| 1282 | ACPI_MADT_TYPE_IO_SAPIC = 6,
|
| 1283 | ACPI_MADT_TYPE_LOCAL_SAPIC = 7,
|
| 1284 | ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
|
| 1285 | ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
|
| 1286 | ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
|
| 1287 | ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
|
| 1288 | ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
|
| 1289 | ACPI_MADT_TYPE_GENERIC_MSI_FRAME = 13,
|
| 1290 | ACPI_MADT_TYPE_GENERIC_REDISTRIBUTOR = 14,
|
| 1291 | ACPI_MADT_TYPE_GENERIC_TRANSLATOR = 15,
|
| 1292 | ACPI_MADT_TYPE_MULTIPROC_WAKEUP = 16,
|
| 1293 | ACPI_MADT_TYPE_CORE_PIC = 17,
|
| 1294 | ACPI_MADT_TYPE_LIO_PIC = 18,
|
| 1295 | ACPI_MADT_TYPE_HT_PIC = 19,
|
| 1296 | ACPI_MADT_TYPE_EIO_PIC = 20,
|
| 1297 | ACPI_MADT_TYPE_MSI_PIC = 21,
|
| 1298 | ACPI_MADT_TYPE_BIO_PIC = 22,
|
| 1299 | ACPI_MADT_TYPE_LPC_PIC = 23,
|
| 1300 | ACPI_MADT_TYPE_RINTC = 24,
|
| 1301 | ACPI_MADT_TYPE_IMSIC = 25,
|
| 1302 | ACPI_MADT_TYPE_APLIC = 26,
|
| 1303 | ACPI_MADT_TYPE_PLIC = 27,
|
| 1304 | ACPI_MADT_TYPE_GICV5_IRS = 28,
|
| 1305 | ACPI_MADT_TYPE_GICV5_ITS = 29,
|
| 1306 | ACPI_MADT_TYPE_GICV5_ITS_TRANSLATE = 30,
|
| 1307 | ACPI_MADT_TYPE_RESERVED = 31,
|
| 1308 | ACPI_MADT_TYPE_OEM_RESERVED = 0x80
|
| 1309 | };
|
| 1310 |
|
| 1311 | |
| 1312 | * MADT Subtables, correspond to Type in struct acpi_subtable_header
|
| 1313 |
|
| 1314 |
|
| 1315 |
|
| 1316 |
|
| 1317 | struct acpi_madt_local_apic {
|
| 1318 | struct acpi_subtable_header header;
|
| 1319 | u8 processor_id;
|
| 1320 | u8 id;
|
| 1321 | u32 lapic_flags;
|
| 1322 | };
|
| 1323 |
|
| 1324 |
|
| 1325 |
|
| 1326 | struct acpi_madt_io_apic {
|
| 1327 | struct acpi_subtable_header header;
|
| 1328 | u8 id;
|
| 1329 | u8 reserved;
|
| 1330 | u32 address;
|
| 1331 | u32 global_irq_base;
|
| 1332 | };
|
| 1333 |
|
| 1334 |
|
| 1335 |
|
| 1336 | struct acpi_madt_interrupt_override {
|
| 1337 | struct acpi_subtable_header header;
|
| 1338 | u8 bus;
|
| 1339 | u8 source_irq;
|
| 1340 | u32 global_irq;
|
| 1341 | u16 inti_flags;
|
| 1342 | };
|
| 1343 |
|
| 1344 |
|
| 1345 |
|
| 1346 | struct acpi_madt_nmi_source {
|
| 1347 | struct acpi_subtable_header header;
|
| 1348 | u16 inti_flags;
|
| 1349 | u32 global_irq;
|
| 1350 | };
|
| 1351 |
|
| 1352 |
|
| 1353 |
|
| 1354 | struct acpi_madt_local_apic_nmi {
|
| 1355 | struct acpi_subtable_header header;
|
| 1356 | u8 processor_id;
|
| 1357 | u16 inti_flags;
|
| 1358 | u8 lint;
|
| 1359 | };
|
| 1360 |
|
| 1361 |
|
| 1362 |
|
| 1363 | struct acpi_madt_local_apic_override {
|
| 1364 | struct acpi_subtable_header header;
|
| 1365 | u16 reserved;
|
| 1366 | u64 address;
|
| 1367 | };
|
| 1368 |
|
| 1369 |
|
| 1370 |
|
| 1371 | struct acpi_madt_io_sapic {
|
| 1372 | struct acpi_subtable_header header;
|
| 1373 | u8 id;
|
| 1374 | u8 reserved;
|
| 1375 | u32 global_irq_base;
|
| 1376 | u64 address;
|
| 1377 | };
|
| 1378 |
|
| 1379 |
|
| 1380 |
|
| 1381 | struct acpi_madt_local_sapic {
|
| 1382 | struct acpi_subtable_header header;
|
| 1383 | u8 processor_id;
|
| 1384 | u8 id;
|
| 1385 | u8 eid;
|
| 1386 | u8 reserved[3];
|
| 1387 | u32 lapic_flags;
|
| 1388 | u32 uid;
|
| 1389 | char uid_string[];
|
| 1390 | };
|
| 1391 |
|
| 1392 |
|
| 1393 |
|
| 1394 | struct acpi_madt_interrupt_source {
|
| 1395 | struct acpi_subtable_header header;
|
| 1396 | u16 inti_flags;
|
| 1397 | u8 type;
|
| 1398 | u8 id;
|
| 1399 | u8 eid;
|
| 1400 | u8 io_sapic_vector;
|
| 1401 | u32 global_irq;
|
| 1402 | u32 flags;
|
| 1403 | };
|
| 1404 |
|
| 1405 |
|
| 1406 |
|
| 1407 | #define ACPI_MADT_CPEI_OVERRIDE (1)
|
| 1408 |
|
| 1409 |
|
| 1410 |
|
| 1411 | struct acpi_madt_local_x2apic {
|
| 1412 | struct acpi_subtable_header header;
|
| 1413 | u16 reserved;
|
| 1414 | u32 local_apic_id;
|
| 1415 | u32 lapic_flags;
|
| 1416 | u32 uid;
|
| 1417 | };
|
| 1418 |
|
| 1419 |
|
| 1420 |
|
| 1421 | struct acpi_madt_local_x2apic_nmi {
|
| 1422 | struct acpi_subtable_header header;
|
| 1423 | u16 inti_flags;
|
| 1424 | u32 uid;
|
| 1425 | u8 lint;
|
| 1426 | u8 reserved[3];
|
| 1427 | };
|
| 1428 |
|
| 1429 |
|
| 1430 |
|
| 1431 | struct acpi_madt_generic_interrupt {
|
| 1432 | struct acpi_subtable_header header;
|
| 1433 | u16 reserved;
|
| 1434 | u32 cpu_interface_number;
|
| 1435 | u32 uid;
|
| 1436 | u32 flags;
|
| 1437 | u32 parking_version;
|
| 1438 | u32 performance_interrupt;
|
| 1439 | u64 parked_address;
|
| 1440 | u64 base_address;
|
| 1441 | u64 gicv_base_address;
|
| 1442 | u64 gich_base_address;
|
| 1443 | u32 vgic_interrupt;
|
| 1444 | u64 gicr_base_address;
|
| 1445 | u64 arm_mpidr;
|
| 1446 | u8 efficiency_class;
|
| 1447 | u8 reserved2[1];
|
| 1448 | u16 spe_interrupt;
|
| 1449 | u16 trbe_interrupt;
|
| 1450 | u16 iaffid;
|
| 1451 | u32 irs_id;
|
| 1452 | };
|
| 1453 |
|
| 1454 |
|
| 1455 |
|
| 1456 |
|
| 1457 | #define ACPI_MADT_PERFORMANCE_IRQ_MODE (1<<1)
|
| 1458 | #define ACPI_MADT_VGIC_IRQ_MODE (1<<2)
|
| 1459 | #define ACPI_MADT_GICC_ONLINE_CAPABLE (1<<3)
|
| 1460 | #define ACPI_MADT_GICC_NON_COHERENT (1<<4)
|
| 1461 |
|
| 1462 |
|
| 1463 |
|
| 1464 | struct acpi_madt_generic_distributor {
|
| 1465 | struct acpi_subtable_header header;
|
| 1466 | u16 reserved;
|
| 1467 | u32 gic_id;
|
| 1468 | u64 base_address;
|
| 1469 | u32 global_irq_base;
|
| 1470 | u8 version;
|
| 1471 | u8 reserved2[3];
|
| 1472 | };
|
| 1473 |
|
| 1474 |
|
| 1475 |
|
| 1476 | enum acpi_madt_gic_version {
|
| 1477 | ACPI_MADT_GIC_VERSION_NONE = 0,
|
| 1478 | ACPI_MADT_GIC_VERSION_V1 = 1,
|
| 1479 | ACPI_MADT_GIC_VERSION_V2 = 2,
|
| 1480 | ACPI_MADT_GIC_VERSION_V3 = 3,
|
| 1481 | ACPI_MADT_GIC_VERSION_V4 = 4,
|
| 1482 | ACPI_MADT_GIC_VERSION_V5 = 5,
|
| 1483 | ACPI_MADT_GIC_VERSION_RESERVED = 6
|
| 1484 | };
|
| 1485 |
|
| 1486 |
|
| 1487 |
|
| 1488 | struct acpi_madt_generic_msi_frame {
|
| 1489 | struct acpi_subtable_header header;
|
| 1490 | u16 reserved;
|
| 1491 | u32 msi_frame_id;
|
| 1492 | u64 base_address;
|
| 1493 | u32 flags;
|
| 1494 | u16 spi_count;
|
| 1495 | u16 spi_base;
|
| 1496 | };
|
| 1497 |
|
| 1498 |
|
| 1499 |
|
| 1500 | #define ACPI_MADT_OVERRIDE_SPI_VALUES (1)
|
| 1501 |
|
| 1502 |
|
| 1503 |
|
| 1504 | struct acpi_madt_generic_redistributor {
|
| 1505 | struct acpi_subtable_header header;
|
| 1506 | u8 flags;
|
| 1507 | u8 reserved;
|
| 1508 | u64 base_address;
|
| 1509 | u32 length;
|
| 1510 | };
|
| 1511 |
|
| 1512 | #define ACPI_MADT_GICR_NON_COHERENT (1)
|
| 1513 |
|
| 1514 |
|
| 1515 |
|
| 1516 | struct acpi_madt_generic_translator {
|
| 1517 | struct acpi_subtable_header header;
|
| 1518 | u8 flags;
|
| 1519 | u8 reserved;
|
| 1520 | u32 translation_id;
|
| 1521 | u64 base_address;
|
| 1522 | u32 reserved2;
|
| 1523 | };
|
| 1524 |
|
| 1525 | #define ACPI_MADT_ITS_NON_COHERENT (1)
|
| 1526 |
|
| 1527 |
|
| 1528 |
|
| 1529 | struct acpi_madt_multiproc_wakeup {
|
| 1530 | struct acpi_subtable_header header;
|
| 1531 | u16 version;
|
| 1532 | u32 reserved;
|
| 1533 | u64 mailbox_address;
|
| 1534 | u64 reset_vector;
|
| 1535 | };
|
| 1536 |
|
| 1537 |
|
| 1538 |
|
| 1539 | enum acpi_madt_multiproc_wakeup_version {
|
| 1540 | ACPI_MADT_MP_WAKEUP_VERSION_NONE = 0,
|
| 1541 | ACPI_MADT_MP_WAKEUP_VERSION_V1 = 1,
|
| 1542 | ACPI_MADT_MP_WAKEUP_VERSION_RESERVED = 2,
|
| 1543 | };
|
| 1544 |
|
| 1545 | #define ACPI_MADT_MP_WAKEUP_SIZE_V0 16
|
| 1546 | #define ACPI_MADT_MP_WAKEUP_SIZE_V1 24
|
| 1547 |
|
| 1548 | #define ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE 2032
|
| 1549 | #define ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE 2048
|
| 1550 |
|
| 1551 | struct acpi_madt_multiproc_wakeup_mailbox {
|
| 1552 | u16 command;
|
| 1553 | u16 reserved;
|
| 1554 | u32 apic_id;
|
| 1555 | u64 wakeup_vector;
|
| 1556 | u8 reserved_os[ACPI_MULTIPROC_WAKEUP_MB_OS_SIZE];
|
| 1557 | u8 reserved_firmware[ACPI_MULTIPROC_WAKEUP_MB_FIRMWARE_SIZE];
|
| 1558 | };
|
| 1559 |
|
| 1560 | #define ACPI_MP_WAKE_COMMAND_WAKEUP 1
|
| 1561 | #define ACPI_MP_WAKE_COMMAND_TEST 2
|
| 1562 |
|
| 1563 |
|
| 1564 |
|
| 1565 | struct acpi_madt_core_pic {
|
| 1566 | struct acpi_subtable_header header;
|
| 1567 | u8 version;
|
| 1568 | u32 processor_id;
|
| 1569 | u32 core_id;
|
| 1570 | u32 flags;
|
| 1571 | };
|
| 1572 |
|
| 1573 |
|
| 1574 |
|
| 1575 | enum acpi_madt_core_pic_version {
|
| 1576 | ACPI_MADT_CORE_PIC_VERSION_NONE = 0,
|
| 1577 | ACPI_MADT_CORE_PIC_VERSION_V1 = 1,
|
| 1578 | ACPI_MADT_CORE_PIC_VERSION_RESERVED = 2
|
| 1579 | };
|
| 1580 |
|
| 1581 |
|
| 1582 |
|
| 1583 | struct acpi_madt_lio_pic {
|
| 1584 | struct acpi_subtable_header header;
|
| 1585 | u8 version;
|
| 1586 | u64 address;
|
| 1587 | u16 size;
|
| 1588 | u8 cascade[2];
|
| 1589 | u32 cascade_map[2];
|
| 1590 | };
|
| 1591 |
|
| 1592 |
|
| 1593 |
|
| 1594 | enum acpi_madt_lio_pic_version {
|
| 1595 | ACPI_MADT_LIO_PIC_VERSION_NONE = 0,
|
| 1596 | ACPI_MADT_LIO_PIC_VERSION_V1 = 1,
|
| 1597 | ACPI_MADT_LIO_PIC_VERSION_RESERVED = 2
|
| 1598 | };
|
| 1599 |
|
| 1600 |
|
| 1601 |
|
| 1602 | struct acpi_madt_ht_pic {
|
| 1603 | struct acpi_subtable_header header;
|
| 1604 | u8 version;
|
| 1605 | u64 address;
|
| 1606 | u16 size;
|
| 1607 | u8 cascade[8];
|
| 1608 | };
|
| 1609 |
|
| 1610 |
|
| 1611 |
|
| 1612 | enum acpi_madt_ht_pic_version {
|
| 1613 | ACPI_MADT_HT_PIC_VERSION_NONE = 0,
|
| 1614 | ACPI_MADT_HT_PIC_VERSION_V1 = 1,
|
| 1615 | ACPI_MADT_HT_PIC_VERSION_RESERVED = 2
|
| 1616 | };
|
| 1617 |
|
| 1618 |
|
| 1619 |
|
| 1620 | struct acpi_madt_eio_pic {
|
| 1621 | struct acpi_subtable_header header;
|
| 1622 | u8 version;
|
| 1623 | u8 cascade;
|
| 1624 | u8 node;
|
| 1625 | u64 node_map;
|
| 1626 | };
|
| 1627 |
|
| 1628 |
|
| 1629 |
|
| 1630 | enum acpi_madt_eio_pic_version {
|
| 1631 | ACPI_MADT_EIO_PIC_VERSION_NONE = 0,
|
| 1632 | ACPI_MADT_EIO_PIC_VERSION_V1 = 1,
|
| 1633 | ACPI_MADT_EIO_PIC_VERSION_RESERVED = 2
|
| 1634 | };
|
| 1635 |
|
| 1636 |
|
| 1637 |
|
| 1638 | struct acpi_madt_msi_pic {
|
| 1639 | struct acpi_subtable_header header;
|
| 1640 | u8 version;
|
| 1641 | u64 msg_address;
|
| 1642 | u32 start;
|
| 1643 | u32 count;
|
| 1644 | };
|
| 1645 |
|
| 1646 |
|
| 1647 |
|
| 1648 | enum acpi_madt_msi_pic_version {
|
| 1649 | ACPI_MADT_MSI_PIC_VERSION_NONE = 0,
|
| 1650 | ACPI_MADT_MSI_PIC_VERSION_V1 = 1,
|
| 1651 | ACPI_MADT_MSI_PIC_VERSION_RESERVED = 2
|
| 1652 | };
|
| 1653 |
|
| 1654 |
|
| 1655 |
|
| 1656 | struct acpi_madt_bio_pic {
|
| 1657 | struct acpi_subtable_header header;
|
| 1658 | u8 version;
|
| 1659 | u64 address;
|
| 1660 | u16 size;
|
| 1661 | u16 id;
|
| 1662 | u16 gsi_base;
|
| 1663 | };
|
| 1664 |
|
| 1665 |
|
| 1666 |
|
| 1667 | enum acpi_madt_bio_pic_version {
|
| 1668 | ACPI_MADT_BIO_PIC_VERSION_NONE = 0,
|
| 1669 | ACPI_MADT_BIO_PIC_VERSION_V1 = 1,
|
| 1670 | ACPI_MADT_BIO_PIC_VERSION_RESERVED = 2
|
| 1671 | };
|
| 1672 |
|
| 1673 |
|
| 1674 |
|
| 1675 | struct acpi_madt_lpc_pic {
|
| 1676 | struct acpi_subtable_header header;
|
| 1677 | u8 version;
|
| 1678 | u64 address;
|
| 1679 | u16 size;
|
| 1680 | u8 cascade;
|
| 1681 | };
|
| 1682 |
|
| 1683 |
|
| 1684 |
|
| 1685 | enum acpi_madt_lpc_pic_version {
|
| 1686 | ACPI_MADT_LPC_PIC_VERSION_NONE = 0,
|
| 1687 | ACPI_MADT_LPC_PIC_VERSION_V1 = 1,
|
| 1688 | ACPI_MADT_LPC_PIC_VERSION_RESERVED = 2
|
| 1689 | };
|
| 1690 |
|
| 1691 |
|
| 1692 | struct acpi_madt_rintc {
|
| 1693 | struct acpi_subtable_header header;
|
| 1694 | u8 version;
|
| 1695 | u8 reserved;
|
| 1696 | u32 flags;
|
| 1697 | u64 hart_id;
|
| 1698 | u32 uid;
|
| 1699 | u32 ext_intc_id;
|
| 1700 | u64 imsic_addr;
|
| 1701 | u32 imsic_size;
|
| 1702 | };
|
| 1703 |
|
| 1704 |
|
| 1705 |
|
| 1706 | enum acpi_madt_rintc_version {
|
| 1707 | ACPI_MADT_RINTC_VERSION_NONE = 0,
|
| 1708 | ACPI_MADT_RINTC_VERSION_V1 = 1,
|
| 1709 | ACPI_MADT_RINTC_VERSION_RESERVED = 2
|
| 1710 | };
|
| 1711 |
|
| 1712 |
|
| 1713 | struct acpi_madt_imsic {
|
| 1714 | struct acpi_subtable_header header;
|
| 1715 | u8 version;
|
| 1716 | u8 reserved;
|
| 1717 | u32 flags;
|
| 1718 | u16 num_ids;
|
| 1719 | u16 num_guest_ids;
|
| 1720 | u8 guest_index_bits;
|
| 1721 | u8 hart_index_bits;
|
| 1722 | u8 group_index_bits;
|
| 1723 | u8 group_index_shift;
|
| 1724 | };
|
| 1725 |
|
| 1726 |
|
| 1727 | struct acpi_madt_aplic {
|
| 1728 | struct acpi_subtable_header header;
|
| 1729 | u8 version;
|
| 1730 | u8 id;
|
| 1731 | u32 flags;
|
| 1732 | u8 hw_id[8];
|
| 1733 | u16 num_idcs;
|
| 1734 | u16 num_sources;
|
| 1735 | u32 gsi_base;
|
| 1736 | u64 base_addr;
|
| 1737 | u32 size;
|
| 1738 | };
|
| 1739 |
|
| 1740 |
|
| 1741 | struct acpi_madt_plic {
|
| 1742 | struct acpi_subtable_header header;
|
| 1743 | u8 version;
|
| 1744 | u8 id;
|
| 1745 | u8 hw_id[8];
|
| 1746 | u16 num_irqs;
|
| 1747 | u16 max_prio;
|
| 1748 | u32 flags;
|
| 1749 | u32 size;
|
| 1750 | u64 base_addr;
|
| 1751 | u32 gsi_base;
|
| 1752 | };
|
| 1753 |
|
| 1754 |
|
| 1755 | struct acpi_madt_gicv5_irs {
|
| 1756 | struct acpi_subtable_header header;
|
| 1757 | u8 version;
|
| 1758 | u8 reserved;
|
| 1759 | u32 irs_id;
|
| 1760 | u32 flags;
|
| 1761 | u32 reserved2;
|
| 1762 | u64 config_base_address;
|
| 1763 | u64 setlpi_base_address;
|
| 1764 | };
|
| 1765 |
|
| 1766 | #define ACPI_MADT_IRS_NON_COHERENT (1)
|
| 1767 |
|
| 1768 |
|
| 1769 | struct acpi_madt_gicv5_translator {
|
| 1770 | struct acpi_subtable_header header;
|
| 1771 | u8 flags;
|
| 1772 | u8 reserved;
|
| 1773 | u32 translator_id;
|
| 1774 | u64 base_address;
|
| 1775 | };
|
| 1776 |
|
| 1777 | #define ACPI_MADT_GICV5_ITS_NON_COHERENT (1)
|
| 1778 |
|
| 1779 |
|
| 1780 | struct acpi_madt_gicv5_translate_frame {
|
| 1781 | struct acpi_subtable_header header;
|
| 1782 | u16 reserved;
|
| 1783 | u32 linked_translator_id;
|
| 1784 | u32 translate_frame_id;
|
| 1785 | u32 reserved2;
|
| 1786 | u64 base_address;
|
| 1787 | };
|
| 1788 |
|
| 1789 |
|
| 1790 |
|
| 1791 | struct acpi_madt_oem_data {
|
| 1792 | ACPI_FLEX_ARRAY(u8, oem_data);
|
| 1793 | };
|
| 1794 |
|
| 1795 | |
| 1796 | * Common flags fields for MADT subtables
|
| 1797 |
|
| 1798 |
|
| 1799 |
|
| 1800 |
|
| 1801 | #define ACPI_MADT_ENABLED (1)
|
| 1802 | #define ACPI_MADT_ONLINE_CAPABLE (2)
|
| 1803 |
|
| 1804 |
|
| 1805 |
|
| 1806 | #define ACPI_MADT_POLARITY_MASK (3)
|
| 1807 | #define ACPI_MADT_TRIGGER_MASK (3<<2)
|
| 1808 |
|
| 1809 |
|
| 1810 |
|
| 1811 | #define ACPI_MADT_POLARITY_CONFORMS 0
|
| 1812 | #define ACPI_MADT_POLARITY_ACTIVE_HIGH 1
|
| 1813 | #define ACPI_MADT_POLARITY_RESERVED 2
|
| 1814 | #define ACPI_MADT_POLARITY_ACTIVE_LOW 3
|
| 1815 |
|
| 1816 | #define ACPI_MADT_TRIGGER_CONFORMS (0)
|
| 1817 | #define ACPI_MADT_TRIGGER_EDGE (1<<2)
|
| 1818 | #define ACPI_MADT_TRIGGER_RESERVED (2<<2)
|
| 1819 | #define ACPI_MADT_TRIGGER_LEVEL (3<<2)
|
| 1820 |
|
| 1821 | |
| 1822 | *
|
| 1823 | * MCFG - PCI Memory Mapped Configuration table and subtable
|
| 1824 | * Version 1
|
| 1825 | *
|
| 1826 | * Conforms to "PCI Firmware Specification", Revision 3.0, June 20, 2005
|
| 1827 | *
|
| 1828 | *****************************************************************************
|
| 1829 |
|
| 1830 | struct acpi_table_mcfg {
|
| 1831 | struct acpi_table_header header;
|
| 1832 | u8 reserved[8];
|
| 1833 | };
|
| 1834 |
|
| 1835 |
|
| 1836 |
|
| 1837 | struct acpi_mcfg_allocation {
|
| 1838 | u64 address;
|
| 1839 | u16 pci_segment;
|
| 1840 | u8 start_bus_number;
|
| 1841 | u8 end_bus_number;
|
| 1842 | u32 reserved;
|
| 1843 | };
|
| 1844 |
|
| 1845 | |
| 1846 | *
|
| 1847 | * MCHI - Management Controller Host Interface Table
|
| 1848 | * Version 1
|
| 1849 | *
|
| 1850 | * Conforms to "Management Component Transport Protocol (MCTP) Host
|
| 1851 | * Interface Specification", Revision 1.0.0a, October 13, 2009
|
| 1852 | *
|
| 1853 | *****************************************************************************
|
| 1854 |
|
| 1855 | struct acpi_table_mchi {
|
| 1856 | struct acpi_table_header header;
|
| 1857 | u8 interface_type;
|
| 1858 | u8 protocol;
|
| 1859 | u64 protocol_data;
|
| 1860 | u8 interrupt_type;
|
| 1861 | u8 gpe;
|
| 1862 | u8 pci_device_flag;
|
| 1863 | u32 global_interrupt;
|
| 1864 | struct acpi_generic_address control_register;
|
| 1865 | u8 pci_segment;
|
| 1866 | u8 pci_bus;
|
| 1867 | u8 pci_device;
|
| 1868 | u8 pci_function;
|
| 1869 | };
|
| 1870 |
|
| 1871 | |
| 1872 | *
|
| 1873 | * MPAM - Memory System Resource Partitioning and Monitoring
|
| 1874 | *
|
| 1875 | * Conforms to "ACPI for Memory System Resource Partitioning and Monitoring 2.0"
|
| 1876 | * Document number: ARM DEN 0065, December, 2022.
|
| 1877 | *
|
| 1878 | *****************************************************************************
|
| 1879 |
|
| 1880 |
|
| 1881 | enum acpi_mpam_locator_type {
|
| 1882 | ACPI_MPAM_LOCATION_TYPE_PROCESSOR_CACHE = 0,
|
| 1883 | ACPI_MPAM_LOCATION_TYPE_MEMORY = 1,
|
| 1884 | ACPI_MPAM_LOCATION_TYPE_SMMU = 2,
|
| 1885 | ACPI_MPAM_LOCATION_TYPE_MEMORY_CACHE = 3,
|
| 1886 | ACPI_MPAM_LOCATION_TYPE_ACPI_DEVICE = 4,
|
| 1887 | ACPI_MPAM_LOCATION_TYPE_INTERCONNECT = 5,
|
| 1888 | ACPI_MPAM_LOCATION_TYPE_UNKNOWN = 0xFF
|
| 1889 | };
|
| 1890 |
|
| 1891 |
|
| 1892 | struct acpi_mpam_func_deps {
|
| 1893 | u32 producer;
|
| 1894 | u32 reserved;
|
| 1895 | };
|
| 1896 |
|
| 1897 |
|
| 1898 | struct acpi_mpam_resource_cache_locator {
|
| 1899 | u64 cache_reference;
|
| 1900 | u32 reserved;
|
| 1901 | };
|
| 1902 |
|
| 1903 |
|
| 1904 | struct acpi_mpam_resource_memory_locator {
|
| 1905 | u64 proximity_domain;
|
| 1906 | u32 reserved;
|
| 1907 | };
|
| 1908 |
|
| 1909 |
|
| 1910 | struct acpi_mpam_resource_smmu_locator {
|
| 1911 | u64 smmu_interface;
|
| 1912 | u32 reserved;
|
| 1913 | };
|
| 1914 |
|
| 1915 |
|
| 1916 | struct acpi_mpam_resource_memcache_locator {
|
| 1917 | u8 reserved[7];
|
| 1918 | u8 level;
|
| 1919 | u32 reference;
|
| 1920 | };
|
| 1921 |
|
| 1922 |
|
| 1923 | struct acpi_mpam_resource_acpi_locator {
|
| 1924 | u64 acpi_hw_id;
|
| 1925 | u32 acpi_unique_id;
|
| 1926 | };
|
| 1927 |
|
| 1928 |
|
| 1929 | struct acpi_mpam_resource_interconnect_locator {
|
| 1930 | u64 inter_connect_desc_tbl_off;
|
| 1931 | u32 reserved;
|
| 1932 | };
|
| 1933 |
|
| 1934 |
|
| 1935 | struct acpi_mpam_resource_generic_locator {
|
| 1936 | u64 descriptor1;
|
| 1937 | u32 descriptor2;
|
| 1938 | };
|
| 1939 |
|
| 1940 | union acpi_mpam_resource_locator {
|
| 1941 | struct acpi_mpam_resource_cache_locator cache_locator;
|
| 1942 | struct acpi_mpam_resource_memory_locator memory_locator;
|
| 1943 | struct acpi_mpam_resource_smmu_locator smmu_locator;
|
| 1944 | struct acpi_mpam_resource_memcache_locator mem_cache_locator;
|
| 1945 | struct acpi_mpam_resource_acpi_locator acpi_locator;
|
| 1946 | struct acpi_mpam_resource_interconnect_locator interconnect_ifc_locator;
|
| 1947 | struct acpi_mpam_resource_generic_locator generic_locator;
|
| 1948 | };
|
| 1949 |
|
| 1950 |
|
| 1951 | struct acpi_mpam_resource_node {
|
| 1952 | u32 identifier;
|
| 1953 | u8 ris_index;
|
| 1954 | u16 reserved1;
|
| 1955 | u8 locator_type;
|
| 1956 | union acpi_mpam_resource_locator locator;
|
| 1957 | u32 num_functional_deps;
|
| 1958 | };
|
| 1959 |
|
| 1960 |
|
| 1961 | struct acpi_mpam_msc_node {
|
| 1962 | u16 length;
|
| 1963 | u8 interface_type;
|
| 1964 | u8 reserved;
|
| 1965 | u32 identifier;
|
| 1966 | u64 base_address;
|
| 1967 | u32 mmio_size;
|
| 1968 | u32 overflow_interrupt;
|
| 1969 | u32 overflow_interrupt_flags;
|
| 1970 | u32 reserved1;
|
| 1971 | u32 overflow_interrupt_affinity;
|
| 1972 | u32 error_interrupt;
|
| 1973 | u32 error_interrupt_flags;
|
| 1974 | u32 reserved2;
|
| 1975 | u32 error_interrupt_affinity;
|
| 1976 | u32 max_nrdy_usec;
|
| 1977 | u64 hardware_id_linked_device;
|
| 1978 | u32 instance_id_linked_device;
|
| 1979 | u32 num_resource_nodes;
|
| 1980 | };
|
| 1981 |
|
| 1982 | struct acpi_table_mpam {
|
| 1983 | struct acpi_table_header header;
|
| 1984 | };
|
| 1985 |
|
| 1986 | |
| 1987 | *
|
| 1988 | * MPST - Memory Power State Table (ACPI 5.0)
|
| 1989 | * Version 1
|
| 1990 | *
|
| 1991 | *****************************************************************************
|
| 1992 |
|
| 1993 | #define ACPI_MPST_CHANNEL_INFO \
|
| 1994 | u8 channel_id; \
|
| 1995 | u8 reserved1[3]; \
|
| 1996 | u16 power_node_count; \
|
| 1997 | u16 reserved2;
|
| 1998 |
|
| 1999 |
|
| 2000 |
|
| 2001 | struct acpi_table_mpst {
|
| 2002 | struct acpi_table_header header;
|
| 2003 | ACPI_MPST_CHANNEL_INFO
|
| 2004 | };
|
| 2005 |
|
| 2006 |
|
| 2007 |
|
| 2008 | struct acpi_mpst_channel {
|
| 2009 | ACPI_MPST_CHANNEL_INFO
|
| 2010 | };
|
| 2011 |
|
| 2012 |
|
| 2013 |
|
| 2014 | struct acpi_mpst_power_node {
|
| 2015 | u8 flags;
|
| 2016 | u8 reserved1;
|
| 2017 | u16 node_id;
|
| 2018 | u32 length;
|
| 2019 | u64 range_address;
|
| 2020 | u64 range_length;
|
| 2021 | u32 num_power_states;
|
| 2022 | u32 num_physical_components;
|
| 2023 | };
|
| 2024 |
|
| 2025 |
|
| 2026 |
|
| 2027 | #define ACPI_MPST_ENABLED 1
|
| 2028 | #define ACPI_MPST_POWER_MANAGED 2
|
| 2029 | #define ACPI_MPST_HOT_PLUG_CAPABLE 4
|
| 2030 |
|
| 2031 |
|
| 2032 |
|
| 2033 | struct acpi_mpst_power_state {
|
| 2034 | u8 power_state;
|
| 2035 | u8 info_index;
|
| 2036 | };
|
| 2037 |
|
| 2038 |
|
| 2039 |
|
| 2040 | struct acpi_mpst_component {
|
| 2041 | u16 component_id;
|
| 2042 | };
|
| 2043 |
|
| 2044 |
|
| 2045 |
|
| 2046 | struct acpi_mpst_data_hdr {
|
| 2047 | u16 characteristics_count;
|
| 2048 | u16 reserved;
|
| 2049 | };
|
| 2050 |
|
| 2051 | struct acpi_mpst_power_data {
|
| 2052 | u8 structure_id;
|
| 2053 | u8 flags;
|
| 2054 | u16 reserved1;
|
| 2055 | u32 average_power;
|
| 2056 | u32 power_saving;
|
| 2057 | u64 exit_latency;
|
| 2058 | u64 reserved2;
|
| 2059 | };
|
| 2060 |
|
| 2061 |
|
| 2062 |
|
| 2063 | #define ACPI_MPST_PRESERVE 1
|
| 2064 | #define ACPI_MPST_AUTOENTRY 2
|
| 2065 | #define ACPI_MPST_AUTOEXIT 4
|
| 2066 |
|
| 2067 |
|
| 2068 |
|
| 2069 | struct acpi_mpst_shared {
|
| 2070 | u32 signature;
|
| 2071 | u16 pcc_command;
|
| 2072 | u16 pcc_status;
|
| 2073 | u32 command_register;
|
| 2074 | u32 status_register;
|
| 2075 | u32 power_state_id;
|
| 2076 | u32 power_node_id;
|
| 2077 | u64 energy_consumed;
|
| 2078 | u64 average_power;
|
| 2079 | };
|
| 2080 |
|
| 2081 | |
| 2082 | *
|
| 2083 | * MSCT - Maximum System Characteristics Table (ACPI 4.0)
|
| 2084 | * Version 1
|
| 2085 | *
|
| 2086 | *****************************************************************************
|
| 2087 |
|
| 2088 | struct acpi_table_msct {
|
| 2089 | struct acpi_table_header header;
|
| 2090 | u32 proximity_offset;
|
| 2091 | u32 max_proximity_domains;
|
| 2092 | u32 max_clock_domains;
|
| 2093 | u64 max_address;
|
| 2094 | };
|
| 2095 |
|
| 2096 |
|
| 2097 |
|
| 2098 | struct acpi_msct_proximity {
|
| 2099 | u8 revision;
|
| 2100 | u8 length;
|
| 2101 | u32 range_start;
|
| 2102 | u32 range_end;
|
| 2103 | u32 processor_capacity;
|
| 2104 | u64 memory_capacity;
|
| 2105 | };
|
| 2106 |
|
| 2107 | |
| 2108 | *
|
| 2109 | * MRRM - Memory Range and Region Mapping (MRRM) table
|
| 2110 | * Conforms to "Intel Resource Director Technology Architecture Specification"
|
| 2111 | * Version 1.1, January 2025
|
| 2112 | *
|
| 2113 | *****************************************************************************
|
| 2114 |
|
| 2115 | struct acpi_table_mrrm {
|
| 2116 | struct acpi_table_header header;
|
| 2117 | u8 max_mem_region;
|
| 2118 | u8 flags;
|
| 2119 | u8 reserved[26];
|
| 2120 | u8 memory_range_entry[];
|
| 2121 | };
|
| 2122 |
|
| 2123 |
|
| 2124 | #define ACPI_MRRM_FLAGS_REGION_ASSIGNMENT_OS (1<<0)
|
| 2125 |
|
| 2126 | |
| 2127 | *
|
| 2128 | * Memory Range entry - Memory Range entry in MRRM table
|
| 2129 | *
|
| 2130 | *****************************************************************************
|
| 2131 |
|
| 2132 | struct acpi_mrrm_mem_range_entry {
|
| 2133 | struct acpi_subtbl_hdr_16 header;
|
| 2134 | u32 reserved0;
|
| 2135 | u64 addr_base;
|
| 2136 | u64 addr_len;
|
| 2137 | u16 region_id_flags;
|
| 2138 | u8 local_region_id;
|
| 2139 | u8 remote_region_id;
|
| 2140 | u32 reserved1;
|
| 2141 |
|
| 2142 | };
|
| 2143 |
|
| 2144 |
|
| 2145 | #define ACPI_MRRM_VALID_REGION_ID_FLAGS_LOCAL (1<<0)
|
| 2146 | #define ACPI_MRRM_VALID_REGION_ID_FLAGS_REMOTE (1<<1)
|
| 2147 |
|
| 2148 | |
| 2149 | *
|
| 2150 | * MSDM - Microsoft Data Management table
|
| 2151 | *
|
| 2152 | * Conforms to "Microsoft Software Licensing Tables (SLIC and MSDM)",
|
| 2153 | * November 29, 2011. Copyright 2011 Microsoft
|
| 2154 | *
|
| 2155 | *****************************************************************************
|
| 2156 |
|
| 2157 |
|
| 2158 |
|
| 2159 | struct acpi_table_msdm {
|
| 2160 | struct acpi_table_header header;
|
| 2161 | };
|
| 2162 |
|
| 2163 | |
| 2164 | *
|
| 2165 | * NFIT - NVDIMM Interface Table (ACPI 6.0+)
|
| 2166 | * Version 1
|
| 2167 | *
|
| 2168 | *****************************************************************************
|
| 2169 |
|
| 2170 | struct acpi_table_nfit {
|
| 2171 | struct acpi_table_header header;
|
| 2172 | u32 reserved;
|
| 2173 | };
|
| 2174 |
|
| 2175 |
|
| 2176 |
|
| 2177 | struct acpi_nfit_header {
|
| 2178 | u16 type;
|
| 2179 | u16 length;
|
| 2180 | };
|
| 2181 |
|
| 2182 |
|
| 2183 |
|
| 2184 | enum acpi_nfit_type {
|
| 2185 | ACPI_NFIT_TYPE_SYSTEM_ADDRESS = 0,
|
| 2186 | ACPI_NFIT_TYPE_MEMORY_MAP = 1,
|
| 2187 | ACPI_NFIT_TYPE_INTERLEAVE = 2,
|
| 2188 | ACPI_NFIT_TYPE_SMBIOS = 3,
|
| 2189 | ACPI_NFIT_TYPE_CONTROL_REGION = 4,
|
| 2190 | ACPI_NFIT_TYPE_DATA_REGION = 5,
|
| 2191 | ACPI_NFIT_TYPE_FLUSH_ADDRESS = 6,
|
| 2192 | ACPI_NFIT_TYPE_CAPABILITIES = 7,
|
| 2193 | ACPI_NFIT_TYPE_RESERVED = 8
|
| 2194 | };
|
| 2195 |
|
| 2196 | |
| 2197 | * NFIT Subtables
|
| 2198 |
|
| 2199 |
|
| 2200 |
|
| 2201 |
|
| 2202 | struct acpi_nfit_system_address {
|
| 2203 | struct acpi_nfit_header header;
|
| 2204 | u16 range_index;
|
| 2205 | u16 flags;
|
| 2206 | u32 reserved;
|
| 2207 | u32 proximity_domain;
|
| 2208 | u8 range_guid[16];
|
| 2209 | u64 address;
|
| 2210 | u64 length;
|
| 2211 | u64 memory_mapping;
|
| 2212 | u64 location_cookie;
|
| 2213 | };
|
| 2214 |
|
| 2215 |
|
| 2216 |
|
| 2217 | #define ACPI_NFIT_ADD_ONLINE_ONLY (1)
|
| 2218 | #define ACPI_NFIT_PROXIMITY_VALID (1<<1)
|
| 2219 | #define ACPI_NFIT_LOCATION_COOKIE_VALID (1<<2)
|
| 2220 |
|
| 2221 |
|
| 2222 |
|
| 2223 |
|
| 2224 |
|
| 2225 | struct acpi_nfit_memory_map {
|
| 2226 | struct acpi_nfit_header header;
|
| 2227 | u32 device_handle;
|
| 2228 | u16 physical_id;
|
| 2229 | u16 region_id;
|
| 2230 | u16 range_index;
|
| 2231 | u16 region_index;
|
| 2232 | u64 region_size;
|
| 2233 | u64 region_offset;
|
| 2234 | u64 address;
|
| 2235 | u16 interleave_index;
|
| 2236 | u16 interleave_ways;
|
| 2237 | u16 flags;
|
| 2238 | u16 reserved;
|
| 2239 | };
|
| 2240 |
|
| 2241 |
|
| 2242 |
|
| 2243 | #define ACPI_NFIT_MEM_SAVE_FAILED (1)
|
| 2244 | #define ACPI_NFIT_MEM_RESTORE_FAILED (1<<1)
|
| 2245 | #define ACPI_NFIT_MEM_FLUSH_FAILED (1<<2)
|
| 2246 | #define ACPI_NFIT_MEM_NOT_ARMED (1<<3)
|
| 2247 | #define ACPI_NFIT_MEM_HEALTH_OBSERVED (1<<4)
|
| 2248 | #define ACPI_NFIT_MEM_HEALTH_ENABLED (1<<5)
|
| 2249 | #define ACPI_NFIT_MEM_MAP_FAILED (1<<6)
|
| 2250 |
|
| 2251 |
|
| 2252 |
|
| 2253 | struct acpi_nfit_interleave {
|
| 2254 | struct acpi_nfit_header header;
|
| 2255 | u16 interleave_index;
|
| 2256 | u16 reserved;
|
| 2257 | u32 line_count;
|
| 2258 | u32 line_size;
|
| 2259 | u32 line_offset[];
|
| 2260 | };
|
| 2261 |
|
| 2262 |
|
| 2263 |
|
| 2264 | struct acpi_nfit_smbios {
|
| 2265 | struct acpi_nfit_header header;
|
| 2266 | u32 reserved;
|
| 2267 | u8 data[];
|
| 2268 | };
|
| 2269 |
|
| 2270 |
|
| 2271 |
|
| 2272 | struct acpi_nfit_control_region {
|
| 2273 | struct acpi_nfit_header header;
|
| 2274 | u16 region_index;
|
| 2275 | u16 vendor_id;
|
| 2276 | u16 device_id;
|
| 2277 | u16 revision_id;
|
| 2278 | u16 subsystem_vendor_id;
|
| 2279 | u16 subsystem_device_id;
|
| 2280 | u16 subsystem_revision_id;
|
| 2281 | u8 valid_fields;
|
| 2282 | u8 manufacturing_location;
|
| 2283 | u16 manufacturing_date;
|
| 2284 | u8 reserved[2];
|
| 2285 | u32 serial_number;
|
| 2286 | u16 code;
|
| 2287 | u16 windows;
|
| 2288 | u64 window_size;
|
| 2289 | u64 command_offset;
|
| 2290 | u64 command_size;
|
| 2291 | u64 status_offset;
|
| 2292 | u64 status_size;
|
| 2293 | u16 flags;
|
| 2294 | u8 reserved1[6];
|
| 2295 | };
|
| 2296 |
|
| 2297 |
|
| 2298 |
|
| 2299 | #define ACPI_NFIT_CONTROL_BUFFERED (1)
|
| 2300 |
|
| 2301 |
|
| 2302 |
|
| 2303 | #define ACPI_NFIT_CONTROL_MFG_INFO_VALID (1)
|
| 2304 |
|
| 2305 |
|
| 2306 |
|
| 2307 | struct acpi_nfit_data_region {
|
| 2308 | struct acpi_nfit_header header;
|
| 2309 | u16 region_index;
|
| 2310 | u16 windows;
|
| 2311 | u64 offset;
|
| 2312 | u64 size;
|
| 2313 | u64 capacity;
|
| 2314 | u64 start_address;
|
| 2315 | };
|
| 2316 |
|
| 2317 |
|
| 2318 |
|
| 2319 | struct acpi_nfit_flush_address {
|
| 2320 | struct acpi_nfit_header header;
|
| 2321 | u32 device_handle;
|
| 2322 | u16 hint_count;
|
| 2323 | u8 reserved[6];
|
| 2324 | u64 hint_address[];
|
| 2325 | };
|
| 2326 |
|
| 2327 |
|
| 2328 |
|
| 2329 | struct acpi_nfit_capabilities {
|
| 2330 | struct acpi_nfit_header header;
|
| 2331 | u8 highest_capability;
|
| 2332 | u8 reserved[3];
|
| 2333 | u32 capabilities;
|
| 2334 | u32 reserved2;
|
| 2335 | };
|
| 2336 |
|
| 2337 |
|
| 2338 |
|
| 2339 | #define ACPI_NFIT_CAPABILITY_CACHE_FLUSH (1)
|
| 2340 | #define ACPI_NFIT_CAPABILITY_MEM_FLUSH (1<<1)
|
| 2341 | #define ACPI_NFIT_CAPABILITY_MEM_MIRRORING (1<<2)
|
| 2342 |
|
| 2343 | |
| 2344 | * NFIT/DVDIMM device handle support - used as the _ADR for each NVDIMM
|
| 2345 |
|
| 2346 | struct nfit_device_handle {
|
| 2347 | u32 handle;
|
| 2348 | };
|
| 2349 |
|
| 2350 |
|
| 2351 |
|
| 2352 | #define ACPI_NFIT_DIMM_NUMBER_MASK 0x0000000F
|
| 2353 | #define ACPI_NFIT_CHANNEL_NUMBER_MASK 0x000000F0
|
| 2354 | #define ACPI_NFIT_MEMORY_ID_MASK 0x00000F00
|
| 2355 | #define ACPI_NFIT_SOCKET_ID_MASK 0x0000F000
|
| 2356 | #define ACPI_NFIT_NODE_ID_MASK 0x0FFF0000
|
| 2357 |
|
| 2358 | #define ACPI_NFIT_DIMM_NUMBER_OFFSET 0
|
| 2359 | #define ACPI_NFIT_CHANNEL_NUMBER_OFFSET 4
|
| 2360 | #define ACPI_NFIT_MEMORY_ID_OFFSET 8
|
| 2361 | #define ACPI_NFIT_SOCKET_ID_OFFSET 12
|
| 2362 | #define ACPI_NFIT_NODE_ID_OFFSET 16
|
| 2363 |
|
| 2364 |
|
| 2365 |
|
| 2366 | #define ACPI_NFIT_BUILD_DEVICE_HANDLE(dimm, channel, memory, socket, node) \
|
| 2367 | ((dimm) | \
|
| 2368 | ((channel) << ACPI_NFIT_CHANNEL_NUMBER_OFFSET) | \
|
| 2369 | ((memory) << ACPI_NFIT_MEMORY_ID_OFFSET) | \
|
| 2370 | ((socket) << ACPI_NFIT_SOCKET_ID_OFFSET) | \
|
| 2371 | ((node) << ACPI_NFIT_NODE_ID_OFFSET))
|
| 2372 |
|
| 2373 |
|
| 2374 |
|
| 2375 | #define ACPI_NFIT_GET_DIMM_NUMBER(handle) \
|
| 2376 | ((handle) & ACPI_NFIT_DIMM_NUMBER_MASK)
|
| 2377 |
|
| 2378 | #define ACPI_NFIT_GET_CHANNEL_NUMBER(handle) \
|
| 2379 | (((handle) & ACPI_NFIT_CHANNEL_NUMBER_MASK) >> ACPI_NFIT_CHANNEL_NUMBER_OFFSET)
|
| 2380 |
|
| 2381 | #define ACPI_NFIT_GET_MEMORY_ID(handle) \
|
| 2382 | (((handle) & ACPI_NFIT_MEMORY_ID_MASK) >> ACPI_NFIT_MEMORY_ID_OFFSET)
|
| 2383 |
|
| 2384 | #define ACPI_NFIT_GET_SOCKET_ID(handle) \
|
| 2385 | (((handle) & ACPI_NFIT_SOCKET_ID_MASK) >> ACPI_NFIT_SOCKET_ID_OFFSET)
|
| 2386 |
|
| 2387 | #define ACPI_NFIT_GET_NODE_ID(handle) \
|
| 2388 | (((handle) & ACPI_NFIT_NODE_ID_MASK) >> ACPI_NFIT_NODE_ID_OFFSET)
|
| 2389 |
|
| 2390 | |
| 2391 | *
|
| 2392 | * NHLT - Non HDAudio Link Table
|
| 2393 | * Version 1
|
| 2394 | *
|
| 2395 | *****************************************************************************
|
| 2396 |
|
| 2397 | struct acpi_table_nhlt {
|
| 2398 | struct acpi_table_header header;
|
| 2399 | u8 endpoints_count;
|
| 2400 | |
| 2401 | * struct acpi_nhlt_endpoint endpoints[];
|
| 2402 | * struct acpi_nhlt_config oed_config;
|
| 2403 |
|
| 2404 | };
|
| 2405 |
|
| 2406 | struct acpi_nhlt_endpoint {
|
| 2407 | u32 length;
|
| 2408 | u8 link_type;
|
| 2409 | u8 instance_id;
|
| 2410 | u16 vendor_id;
|
| 2411 | u16 device_id;
|
| 2412 | u16 revision_id;
|
| 2413 | u32 subsystem_id;
|
| 2414 | u8 device_type;
|
| 2415 | u8 direction;
|
| 2416 | u8 virtual_bus_id;
|
| 2417 | |
| 2418 | * struct acpi_nhlt_config device_config;
|
| 2419 | * struct acpi_nhlt_formats_config formats_config;
|
| 2420 | * struct acpi_nhlt_devices_info devices_info;
|
| 2421 |
|
| 2422 | };
|
| 2423 |
|
| 2424 | |
| 2425 | * Values for link_type field above
|
| 2426 | *
|
| 2427 | * Only types PDM and SSP are used
|
| 2428 |
|
| 2429 | #define ACPI_NHLT_LINKTYPE_HDA 0
|
| 2430 | #define ACPI_NHLT_LINKTYPE_DSP 1
|
| 2431 | #define ACPI_NHLT_LINKTYPE_PDM 2
|
| 2432 | #define ACPI_NHLT_LINKTYPE_SSP 3
|
| 2433 | #define ACPI_NHLT_LINKTYPE_SLIMBUS 4
|
| 2434 | #define ACPI_NHLT_LINKTYPE_SDW 5
|
| 2435 | #define ACPI_NHLT_LINKTYPE_UAOL 6
|
| 2436 |
|
| 2437 |
|
| 2438 |
|
| 2439 | #define ACPI_NHLT_DEVICEID_DMIC 0xAE20
|
| 2440 | #define ACPI_NHLT_DEVICEID_BT 0xAE30
|
| 2441 | #define ACPI_NHLT_DEVICEID_I2S 0xAE34
|
| 2442 |
|
| 2443 |
|
| 2444 |
|
| 2445 | |
| 2446 | * Device types unique to endpoint of link_type=PDM
|
| 2447 | *
|
| 2448 | * Type PDM used for all SKL+ platforms
|
| 2449 |
|
| 2450 | #define ACPI_NHLT_DEVICETYPE_PDM 0
|
| 2451 | #define ACPI_NHLT_DEVICETYPE_PDM_SKL 1
|
| 2452 |
|
| 2453 | #define ACPI_NHLT_DEVICETYPE_BT 0
|
| 2454 | #define ACPI_NHLT_DEVICETYPE_FM 1
|
| 2455 | #define ACPI_NHLT_DEVICETYPE_MODEM 2
|
| 2456 | #define ACPI_NHLT_DEVICETYPE_CODEC 4
|
| 2457 |
|
| 2458 |
|
| 2459 |
|
| 2460 | #define ACPI_NHLT_DIR_RENDER 0
|
| 2461 | #define ACPI_NHLT_DIR_CAPTURE 1
|
| 2462 |
|
| 2463 | struct acpi_nhlt_config {
|
| 2464 | u32 capabilities_size;
|
| 2465 | u8 capabilities[];
|
| 2466 | };
|
| 2467 |
|
| 2468 | struct acpi_nhlt_gendevice_config {
|
| 2469 | u8 virtual_slot;
|
| 2470 | u8 config_type;
|
| 2471 | };
|
| 2472 |
|
| 2473 |
|
| 2474 |
|
| 2475 | #define ACPI_NHLT_CONFIGTYPE_GENERIC 0
|
| 2476 | #define ACPI_NHLT_CONFIGTYPE_MICARRAY 1
|
| 2477 |
|
| 2478 | struct acpi_nhlt_micdevice_config {
|
| 2479 | u8 virtual_slot;
|
| 2480 | u8 config_type;
|
| 2481 | u8 array_type;
|
| 2482 | };
|
| 2483 |
|
| 2484 |
|
| 2485 |
|
| 2486 | #define ACPI_NHLT_ARRAYTYPE_LINEAR2_SMALL 0xA
|
| 2487 | #define ACPI_NHLT_ARRAYTYPE_LINEAR2_BIG 0xB
|
| 2488 | #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO1 0xC
|
| 2489 | #define ACPI_NHLT_ARRAYTYPE_PLANAR4_LSHAPED 0xD
|
| 2490 | #define ACPI_NHLT_ARRAYTYPE_LINEAR4_GEO2 0xE
|
| 2491 | #define ACPI_NHLT_ARRAYTYPE_VENDOR 0xF
|
| 2492 |
|
| 2493 | struct acpi_nhlt_vendor_mic_config {
|
| 2494 | u8 type;
|
| 2495 | u8 panel;
|
| 2496 | u16 speaker_position_distance;
|
| 2497 | u16 horizontal_offset;
|
| 2498 | u16 vertical_offset;
|
| 2499 | u8 frequency_low_band;
|
| 2500 | u8 frequency_high_band;
|
| 2501 | u16 direction_angle;
|
| 2502 | u16 elevation_angle;
|
| 2503 | u16 work_vertical_angle_begin;
|
| 2504 | u16 work_vertical_angle_end;
|
| 2505 | u16 work_horizontal_angle_begin;
|
| 2506 | u16 work_horizontal_angle_end;
|
| 2507 | };
|
| 2508 |
|
| 2509 |
|
| 2510 |
|
| 2511 | #define ACPI_NHLT_MICTYPE_OMNIDIRECTIONAL 0
|
| 2512 | #define ACPI_NHLT_MICTYPE_SUBCARDIOID 1
|
| 2513 | #define ACPI_NHLT_MICTYPE_CARDIOID 2
|
| 2514 | #define ACPI_NHLT_MICTYPE_SUPERCARDIOID 3
|
| 2515 | #define ACPI_NHLT_MICTYPE_HYPERCARDIOID 4
|
| 2516 | #define ACPI_NHLT_MICTYPE_8SHAPED 5
|
| 2517 | #define ACPI_NHLT_MICTYPE_RESERVED 6
|
| 2518 | #define ACPI_NHLT_MICTYPE_VENDORDEFINED 7
|
| 2519 |
|
| 2520 |
|
| 2521 |
|
| 2522 | #define ACPI_NHLT_MICLOCATION_TOP 0
|
| 2523 | #define ACPI_NHLT_MICLOCATION_BOTTOM 1
|
| 2524 | #define ACPI_NHLT_MICLOCATION_LEFT 2
|
| 2525 | #define ACPI_NHLT_MICLOCATION_RIGHT 3
|
| 2526 | #define ACPI_NHLT_MICLOCATION_FRONT 4
|
| 2527 | #define ACPI_NHLT_MICLOCATION_REAR 5
|
| 2528 |
|
| 2529 | struct acpi_nhlt_vendor_micdevice_config {
|
| 2530 | u8 virtual_slot;
|
| 2531 | u8 config_type;
|
| 2532 | u8 array_type;
|
| 2533 | u8 mics_count;
|
| 2534 | struct acpi_nhlt_vendor_mic_config mics[];
|
| 2535 | };
|
| 2536 |
|
| 2537 | union acpi_nhlt_device_config {
|
| 2538 | u8 virtual_slot;
|
| 2539 | struct acpi_nhlt_gendevice_config gen;
|
| 2540 | struct acpi_nhlt_micdevice_config mic;
|
| 2541 | struct acpi_nhlt_vendor_micdevice_config vendor_mic;
|
| 2542 | };
|
| 2543 |
|
| 2544 |
|
| 2545 | struct acpi_nhlt_wave_formatext {
|
| 2546 | u16 format_tag;
|
| 2547 | u16 channel_count;
|
| 2548 | u32 samples_per_sec;
|
| 2549 | u32 avg_bytes_per_sec;
|
| 2550 | u16 block_align;
|
| 2551 | u16 bits_per_sample;
|
| 2552 | u16 extra_format_size;
|
| 2553 | u16 valid_bits_per_sample;
|
| 2554 | u32 channel_mask;
|
| 2555 | u8 subformat[16];
|
| 2556 | };
|
| 2557 |
|
| 2558 | struct acpi_nhlt_format_config {
|
| 2559 | struct acpi_nhlt_wave_formatext format;
|
| 2560 | struct acpi_nhlt_config config;
|
| 2561 | };
|
| 2562 |
|
| 2563 | struct acpi_nhlt_formats_config {
|
| 2564 | u8 formats_count;
|
| 2565 | struct acpi_nhlt_format_config formats[];
|
| 2566 | };
|
| 2567 |
|
| 2568 | struct acpi_nhlt_device_info {
|
| 2569 | u8 id[16];
|
| 2570 | u8 instance_id;
|
| 2571 | u8 port_id;
|
| 2572 | };
|
| 2573 |
|
| 2574 | struct acpi_nhlt_devices_info {
|
| 2575 | u8 devices_count;
|
| 2576 | struct acpi_nhlt_device_info devices[];
|
| 2577 | };
|
| 2578 |
|
| 2579 | |
| 2580 | *
|
| 2581 | * PCCT - Platform Communications Channel Table (ACPI 5.0)
|
| 2582 | * Version 2 (ACPI 6.2)
|
| 2583 | *
|
| 2584 | *****************************************************************************
|
| 2585 |
|
| 2586 | struct acpi_table_pcct {
|
| 2587 | struct acpi_table_header header;
|
| 2588 | u32 flags;
|
| 2589 | u64 reserved;
|
| 2590 | };
|
| 2591 |
|
| 2592 |
|
| 2593 |
|
| 2594 | #define ACPI_PCCT_DOORBELL 1
|
| 2595 |
|
| 2596 |
|
| 2597 |
|
| 2598 | enum acpi_pcct_type {
|
| 2599 | ACPI_PCCT_TYPE_GENERIC_SUBSPACE = 0,
|
| 2600 | ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE = 1,
|
| 2601 | ACPI_PCCT_TYPE_HW_REDUCED_SUBSPACE_TYPE2 = 2,
|
| 2602 | ACPI_PCCT_TYPE_EXT_PCC_MASTER_SUBSPACE = 3,
|
| 2603 | ACPI_PCCT_TYPE_EXT_PCC_SLAVE_SUBSPACE = 4,
|
| 2604 | ACPI_PCCT_TYPE_HW_REG_COMM_SUBSPACE = 5,
|
| 2605 | ACPI_PCCT_TYPE_RESERVED = 6
|
| 2606 | };
|
| 2607 |
|
| 2608 | |
| 2609 | * PCCT Subtables, correspond to Type in struct acpi_subtable_header
|
| 2610 |
|
| 2611 |
|
| 2612 |
|
| 2613 |
|
| 2614 | struct acpi_pcct_subspace {
|
| 2615 | struct acpi_subtable_header header;
|
| 2616 | u8 reserved[6];
|
| 2617 | u64 base_address;
|
| 2618 | u64 length;
|
| 2619 | struct acpi_generic_address doorbell_register;
|
| 2620 | u64 preserve_mask;
|
| 2621 | u64 write_mask;
|
| 2622 | u32 latency;
|
| 2623 | u32 max_access_rate;
|
| 2624 | u16 min_turnaround_time;
|
| 2625 | };
|
| 2626 |
|
| 2627 |
|
| 2628 |
|
| 2629 | struct acpi_pcct_hw_reduced {
|
| 2630 | struct acpi_subtable_header header;
|
| 2631 | u32 platform_interrupt;
|
| 2632 | u8 flags;
|
| 2633 | u8 reserved;
|
| 2634 | u64 base_address;
|
| 2635 | u64 length;
|
| 2636 | struct acpi_generic_address doorbell_register;
|
| 2637 | u64 preserve_mask;
|
| 2638 | u64 write_mask;
|
| 2639 | u32 latency;
|
| 2640 | u32 max_access_rate;
|
| 2641 | u16 min_turnaround_time;
|
| 2642 | };
|
| 2643 |
|
| 2644 |
|
| 2645 |
|
| 2646 | struct acpi_pcct_hw_reduced_type2 {
|
| 2647 | struct acpi_subtable_header header;
|
| 2648 | u32 platform_interrupt;
|
| 2649 | u8 flags;
|
| 2650 | u8 reserved;
|
| 2651 | u64 base_address;
|
| 2652 | u64 length;
|
| 2653 | struct acpi_generic_address doorbell_register;
|
| 2654 | u64 preserve_mask;
|
| 2655 | u64 write_mask;
|
| 2656 | u32 latency;
|
| 2657 | u32 max_access_rate;
|
| 2658 | u16 min_turnaround_time;
|
| 2659 | struct acpi_generic_address platform_ack_register;
|
| 2660 | u64 ack_preserve_mask;
|
| 2661 | u64 ack_write_mask;
|
| 2662 | };
|
| 2663 |
|
| 2664 |
|
| 2665 |
|
| 2666 | struct acpi_pcct_ext_pcc_master {
|
| 2667 | struct acpi_subtable_header header;
|
| 2668 | u32 platform_interrupt;
|
| 2669 | u8 flags;
|
| 2670 | u8 reserved1;
|
| 2671 | u64 base_address;
|
| 2672 | u32 length;
|
| 2673 | struct acpi_generic_address doorbell_register;
|
| 2674 | u64 preserve_mask;
|
| 2675 | u64 write_mask;
|
| 2676 | u32 latency;
|
| 2677 | u32 max_access_rate;
|
| 2678 | u32 min_turnaround_time;
|
| 2679 | struct acpi_generic_address platform_ack_register;
|
| 2680 | u64 ack_preserve_mask;
|
| 2681 | u64 ack_set_mask;
|
| 2682 | u64 reserved2;
|
| 2683 | struct acpi_generic_address cmd_complete_register;
|
| 2684 | u64 cmd_complete_mask;
|
| 2685 | struct acpi_generic_address cmd_update_register;
|
| 2686 | u64 cmd_update_preserve_mask;
|
| 2687 | u64 cmd_update_set_mask;
|
| 2688 | struct acpi_generic_address error_status_register;
|
| 2689 | u64 error_status_mask;
|
| 2690 | };
|
| 2691 |
|
| 2692 |
|
| 2693 |
|
| 2694 | struct acpi_pcct_ext_pcc_slave {
|
| 2695 | struct acpi_subtable_header header;
|
| 2696 | u32 platform_interrupt;
|
| 2697 | u8 flags;
|
| 2698 | u8 reserved1;
|
| 2699 | u64 base_address;
|
| 2700 | u32 length;
|
| 2701 | struct acpi_generic_address doorbell_register;
|
| 2702 | u64 preserve_mask;
|
| 2703 | u64 write_mask;
|
| 2704 | u32 latency;
|
| 2705 | u32 max_access_rate;
|
| 2706 | u32 min_turnaround_time;
|
| 2707 | struct acpi_generic_address platform_ack_register;
|
| 2708 | u64 ack_preserve_mask;
|
| 2709 | u64 ack_set_mask;
|
| 2710 | u64 reserved2;
|
| 2711 | struct acpi_generic_address cmd_complete_register;
|
| 2712 | u64 cmd_complete_mask;
|
| 2713 | struct acpi_generic_address cmd_update_register;
|
| 2714 | u64 cmd_update_preserve_mask;
|
| 2715 | u64 cmd_update_set_mask;
|
| 2716 | struct acpi_generic_address error_status_register;
|
| 2717 | u64 error_status_mask;
|
| 2718 | };
|
| 2719 |
|
| 2720 |
|
| 2721 |
|
| 2722 | struct acpi_pcct_hw_reg {
|
| 2723 | struct acpi_subtable_header header;
|
| 2724 | u16 version;
|
| 2725 | u64 base_address;
|
| 2726 | u64 length;
|
| 2727 | struct acpi_generic_address doorbell_register;
|
| 2728 | u64 doorbell_preserve;
|
| 2729 | u64 doorbell_write;
|
| 2730 | struct acpi_generic_address cmd_complete_register;
|
| 2731 | u64 cmd_complete_mask;
|
| 2732 | struct acpi_generic_address error_status_register;
|
| 2733 | u64 error_status_mask;
|
| 2734 | u32 nominal_latency;
|
| 2735 | u32 min_turnaround_time;
|
| 2736 | };
|
| 2737 |
|
| 2738 |
|
| 2739 |
|
| 2740 | #define ACPI_PCCT_INTERRUPT_POLARITY (1)
|
| 2741 | #define ACPI_PCCT_INTERRUPT_MODE (1<<1)
|
| 2742 |
|
| 2743 | |
| 2744 | * PCC memory structures (not part of the ACPI table)
|
| 2745 |
|
| 2746 |
|
| 2747 |
|
| 2748 |
|
| 2749 | struct acpi_pcct_shared_memory {
|
| 2750 | u32 signature;
|
| 2751 | u16 command;
|
| 2752 | u16 status;
|
| 2753 | };
|
| 2754 |
|
| 2755 |
|
| 2756 |
|
| 2757 | struct acpi_pcct_ext_pcc_shared_memory {
|
| 2758 | u32 signature;
|
| 2759 | u32 flags;
|
| 2760 | u32 length;
|
| 2761 | u32 command;
|
| 2762 | };
|
| 2763 |
|
| 2764 | |
| 2765 | *
|
| 2766 | * PDTT - Platform Debug Trigger Table (ACPI 6.2)
|
| 2767 | * Version 0
|
| 2768 | *
|
| 2769 | *****************************************************************************
|
| 2770 |
|
| 2771 | struct acpi_table_pdtt {
|
| 2772 | struct acpi_table_header header;
|
| 2773 | u8 trigger_count;
|
| 2774 | u8 reserved[3];
|
| 2775 | u32 array_offset;
|
| 2776 | };
|
| 2777 |
|
| 2778 | |
| 2779 | * PDTT Communication Channel Identifier Structure.
|
| 2780 | * The number of these structures is defined by trigger_count above,
|
| 2781 | * starting at array_offset.
|
| 2782 |
|
| 2783 | struct acpi_pdtt_channel {
|
| 2784 | u8 subchannel_id;
|
| 2785 | u8 flags;
|
| 2786 | };
|
| 2787 |
|
| 2788 |
|
| 2789 |
|
| 2790 | #define ACPI_PDTT_RUNTIME_TRIGGER (1)
|
| 2791 | #define ACPI_PDTT_WAIT_COMPLETION (1<<1)
|
| 2792 | #define ACPI_PDTT_TRIGGER_ORDER (1<<2)
|
| 2793 |
|
| 2794 | |
| 2795 | *
|
| 2796 | * PHAT - Platform Health Assessment Table (ACPI 6.4)
|
| 2797 | * Version 1
|
| 2798 | *
|
| 2799 | *****************************************************************************
|
| 2800 |
|
| 2801 | struct acpi_table_phat {
|
| 2802 | struct acpi_table_header header;
|
| 2803 | };
|
| 2804 |
|
| 2805 |
|
| 2806 |
|
| 2807 | struct acpi_phat_header {
|
| 2808 | u16 type;
|
| 2809 | u16 length;
|
| 2810 | u8 revision;
|
| 2811 | };
|
| 2812 |
|
| 2813 |
|
| 2814 |
|
| 2815 | #define ACPI_PHAT_TYPE_FW_VERSION_DATA 0
|
| 2816 | #define ACPI_PHAT_TYPE_FW_HEALTH_DATA 1
|
| 2817 | #define ACPI_PHAT_TYPE_RESERVED 2
|
| 2818 |
|
| 2819 | |
| 2820 | * PHAT subtables, correspond to Type in struct acpi_phat_header
|
| 2821 |
|
| 2822 |
|
| 2823 |
|
| 2824 |
|
| 2825 | struct acpi_phat_version_data {
|
| 2826 | struct acpi_phat_header header;
|
| 2827 | u8 reserved[3];
|
| 2828 | u32 element_count;
|
| 2829 | };
|
| 2830 |
|
| 2831 | struct acpi_phat_version_element {
|
| 2832 | u8 guid[16];
|
| 2833 | u64 version_value;
|
| 2834 | u32 producer_id;
|
| 2835 | };
|
| 2836 |
|
| 2837 |
|
| 2838 |
|
| 2839 | struct acpi_phat_health_data {
|
| 2840 | struct acpi_phat_header header;
|
| 2841 | u8 reserved[2];
|
| 2842 | u8 health;
|
| 2843 | u8 device_guid[16];
|
| 2844 | u32 device_specific_offset;
|
| 2845 | };
|
| 2846 |
|
| 2847 |
|
| 2848 |
|
| 2849 | #define ACPI_PHAT_ERRORS_FOUND 0
|
| 2850 | #define ACPI_PHAT_NO_ERRORS 1
|
| 2851 | #define ACPI_PHAT_UNKNOWN_ERRORS 2
|
| 2852 | #define ACPI_PHAT_ADVISORY 3
|
| 2853 |
|
| 2854 | |
| 2855 | *
|
| 2856 | * PMTT - Platform Memory Topology Table (ACPI 5.0)
|
| 2857 | * Version 1
|
| 2858 | *
|
| 2859 | *****************************************************************************
|
| 2860 |
|
| 2861 | struct acpi_table_pmtt {
|
| 2862 | struct acpi_table_header header;
|
| 2863 | u32 memory_device_count;
|
| 2864 | |
| 2865 | * Immediately followed by:
|
| 2866 | * MEMORY_DEVICE memory_device_struct[memory_device_count];
|
| 2867 |
|
| 2868 | };
|
| 2869 |
|
| 2870 |
|
| 2871 |
|
| 2872 | struct acpi_pmtt_header {
|
| 2873 | u8 type;
|
| 2874 | u8 reserved1;
|
| 2875 | u16 length;
|
| 2876 | u16 flags;
|
| 2877 | u16 reserved2;
|
| 2878 | u32 memory_device_count;
|
| 2879 | |
| 2880 | * Immediately followed by:
|
| 2881 | * u8 type_specific_data[]
|
| 2882 | * MEMORY_DEVICE memory_device_struct[memory_device_count];
|
| 2883 |
|
| 2884 | };
|
| 2885 |
|
| 2886 |
|
| 2887 |
|
| 2888 | #define ACPI_PMTT_TYPE_SOCKET 0
|
| 2889 | #define ACPI_PMTT_TYPE_CONTROLLER 1
|
| 2890 | #define ACPI_PMTT_TYPE_DIMM 2
|
| 2891 | #define ACPI_PMTT_TYPE_RESERVED 3
|
| 2892 | #define ACPI_PMTT_TYPE_VENDOR 0xFF
|
| 2893 |
|
| 2894 |
|
| 2895 |
|
| 2896 | #define ACPI_PMTT_TOP_LEVEL 0x0001
|
| 2897 | #define ACPI_PMTT_PHYSICAL 0x0002
|
| 2898 | #define ACPI_PMTT_MEMORY_TYPE 0x000C
|
| 2899 |
|
| 2900 | |
| 2901 | * PMTT subtables, correspond to Type in struct acpi_pmtt_header
|
| 2902 |
|
| 2903 |
|
| 2904 |
|
| 2905 |
|
| 2906 | struct acpi_pmtt_socket {
|
| 2907 | struct acpi_pmtt_header header;
|
| 2908 | u16 socket_id;
|
| 2909 | u16 reserved;
|
| 2910 | };
|
| 2911 | |
| 2912 | * Immediately followed by:
|
| 2913 | * MEMORY_DEVICE memory_device_struct[memory_device_count];
|
| 2914 |
|
| 2915 |
|
| 2916 |
|
| 2917 |
|
| 2918 | struct acpi_pmtt_controller {
|
| 2919 | struct acpi_pmtt_header header;
|
| 2920 | u16 controller_id;
|
| 2921 | u16 reserved;
|
| 2922 | };
|
| 2923 | |
| 2924 | * Immediately followed by:
|
| 2925 | * MEMORY_DEVICE memory_device_struct[memory_device_count];
|
| 2926 |
|
| 2927 |
|
| 2928 |
|
| 2929 |
|
| 2930 | struct acpi_pmtt_physical_component {
|
| 2931 | struct acpi_pmtt_header header;
|
| 2932 | u32 bios_handle;
|
| 2933 | };
|
| 2934 |
|
| 2935 |
|
| 2936 |
|
| 2937 | struct acpi_pmtt_vendor_specific {
|
| 2938 | struct acpi_pmtt_header header;
|
| 2939 | u8 type_uuid[16];
|
| 2940 | u8 specific[];
|
| 2941 | |
| 2942 | * Immediately followed by:
|
| 2943 | * u8 vendor_specific_data[];
|
| 2944 | * MEMORY_DEVICE memory_device_struct[memory_device_count];
|
| 2945 |
|
| 2946 | };
|
| 2947 |
|
| 2948 | |
| 2949 | *
|
| 2950 | * PPTT - Processor Properties Topology Table (ACPI 6.2)
|
| 2951 | * Version 1
|
| 2952 | *
|
| 2953 | *****************************************************************************
|
| 2954 |
|
| 2955 | struct acpi_table_pptt {
|
| 2956 | struct acpi_table_header header;
|
| 2957 | };
|
| 2958 |
|
| 2959 |
|
| 2960 |
|
| 2961 | enum acpi_pptt_type {
|
| 2962 | ACPI_PPTT_TYPE_PROCESSOR = 0,
|
| 2963 | ACPI_PPTT_TYPE_CACHE = 1,
|
| 2964 | ACPI_PPTT_TYPE_ID = 2,
|
| 2965 | ACPI_PPTT_TYPE_RESERVED = 3
|
| 2966 | };
|
| 2967 |
|
| 2968 |
|
| 2969 |
|
| 2970 | struct acpi_pptt_processor {
|
| 2971 | struct acpi_subtable_header header;
|
| 2972 | u16 reserved;
|
| 2973 | u32 flags;
|
| 2974 | u32 parent;
|
| 2975 | u32 acpi_processor_id;
|
| 2976 | u32 number_of_priv_resources;
|
| 2977 | };
|
| 2978 |
|
| 2979 |
|
| 2980 |
|
| 2981 | #define ACPI_PPTT_PHYSICAL_PACKAGE (1)
|
| 2982 | #define ACPI_PPTT_ACPI_PROCESSOR_ID_VALID (1<<1)
|
| 2983 | #define ACPI_PPTT_ACPI_PROCESSOR_IS_THREAD (1<<2)
|
| 2984 | #define ACPI_PPTT_ACPI_LEAF_NODE (1<<3)
|
| 2985 | #define ACPI_PPTT_ACPI_IDENTICAL (1<<4)
|
| 2986 |
|
| 2987 |
|
| 2988 |
|
| 2989 | struct acpi_pptt_cache {
|
| 2990 | struct acpi_subtable_header header;
|
| 2991 | u16 reserved;
|
| 2992 | u32 flags;
|
| 2993 | u32 next_level_of_cache;
|
| 2994 | u32 size;
|
| 2995 | u32 number_of_sets;
|
| 2996 | u8 associativity;
|
| 2997 | u8 attributes;
|
| 2998 | u16 line_size;
|
| 2999 | };
|
| 3000 |
|
| 3001 |
|
| 3002 |
|
| 3003 | struct acpi_pptt_cache_v1 {
|
| 3004 | struct acpi_subtable_header header;
|
| 3005 | u16 reserved;
|
| 3006 | u32 flags;
|
| 3007 | u32 next_level_of_cache;
|
| 3008 | u32 size;
|
| 3009 | u32 number_of_sets;
|
| 3010 | u8 associativity;
|
| 3011 | u8 attributes;
|
| 3012 | u16 line_size;
|
| 3013 | u32 cache_id;
|
| 3014 | };
|
| 3015 |
|
| 3016 |
|
| 3017 |
|
| 3018 | #define ACPI_PPTT_SIZE_PROPERTY_VALID (1)
|
| 3019 | #define ACPI_PPTT_NUMBER_OF_SETS_VALID (1<<1)
|
| 3020 | #define ACPI_PPTT_ASSOCIATIVITY_VALID (1<<2)
|
| 3021 | #define ACPI_PPTT_ALLOCATION_TYPE_VALID (1<<3)
|
| 3022 | #define ACPI_PPTT_CACHE_TYPE_VALID (1<<4)
|
| 3023 | #define ACPI_PPTT_WRITE_POLICY_VALID (1<<5)
|
| 3024 | #define ACPI_PPTT_LINE_SIZE_VALID (1<<6)
|
| 3025 | #define ACPI_PPTT_CACHE_ID_VALID (1<<7)
|
| 3026 |
|
| 3027 |
|
| 3028 |
|
| 3029 | #define ACPI_PPTT_MASK_ALLOCATION_TYPE (0x03)
|
| 3030 | #define ACPI_PPTT_MASK_CACHE_TYPE (0x0C)
|
| 3031 | #define ACPI_PPTT_MASK_WRITE_POLICY (0x10)
|
| 3032 |
|
| 3033 |
|
| 3034 | #define ACPI_PPTT_CACHE_READ_ALLOCATE (0x0)
|
| 3035 | #define ACPI_PPTT_CACHE_WRITE_ALLOCATE (0x01)
|
| 3036 | #define ACPI_PPTT_CACHE_RW_ALLOCATE (0x02)
|
| 3037 | #define ACPI_PPTT_CACHE_RW_ALLOCATE_ALT (0x03)
|
| 3038 |
|
| 3039 | #define ACPI_PPTT_CACHE_TYPE_DATA (0x0)
|
| 3040 | #define ACPI_PPTT_CACHE_TYPE_INSTR (1<<2)
|
| 3041 | #define ACPI_PPTT_CACHE_TYPE_UNIFIED (2<<2)
|
| 3042 | #define ACPI_PPTT_CACHE_TYPE_UNIFIED_ALT (3<<2)
|
| 3043 |
|
| 3044 | #define ACPI_PPTT_CACHE_POLICY_WB (0x0)
|
| 3045 | #define ACPI_PPTT_CACHE_POLICY_WT (1<<4)
|
| 3046 |
|
| 3047 |
|
| 3048 |
|
| 3049 | struct acpi_pptt_id {
|
| 3050 | struct acpi_subtable_header header;
|
| 3051 | u16 reserved;
|
| 3052 | u32 vendor_id;
|
| 3053 | u64 level1_id;
|
| 3054 | u64 level2_id;
|
| 3055 | u16 major_rev;
|
| 3056 | u16 minor_rev;
|
| 3057 | u16 spin_rev;
|
| 3058 | };
|
| 3059 |
|
| 3060 | |
| 3061 | *
|
| 3062 | * PRMT - Platform Runtime Mechanism Table
|
| 3063 | * Version 1
|
| 3064 | *
|
| 3065 | *****************************************************************************
|
| 3066 |
|
| 3067 | struct acpi_table_prmt {
|
| 3068 | struct acpi_table_header header;
|
| 3069 | };
|
| 3070 |
|
| 3071 | struct acpi_table_prmt_header {
|
| 3072 | u8 platform_guid[16];
|
| 3073 | u32 module_info_offset;
|
| 3074 | u32 module_info_count;
|
| 3075 | };
|
| 3076 |
|
| 3077 | struct acpi_prmt_module_header {
|
| 3078 | u16 revision;
|
| 3079 | u16 length;
|
| 3080 | };
|
| 3081 |
|
| 3082 | struct acpi_prmt_module_info {
|
| 3083 | u16 revision;
|
| 3084 | u16 length;
|
| 3085 | u8 module_guid[16];
|
| 3086 | u16 major_rev;
|
| 3087 | u16 minor_rev;
|
| 3088 | u16 handler_info_count;
|
| 3089 | u32 handler_info_offset;
|
| 3090 | u64 mmio_list_pointer;
|
| 3091 | };
|
| 3092 |
|
| 3093 | struct acpi_prmt_handler_info {
|
| 3094 | u16 revision;
|
| 3095 | u16 length;
|
| 3096 | u8 handler_guid[16];
|
| 3097 | u64 handler_address;
|
| 3098 | u64 static_data_buffer_address;
|
| 3099 | u64 acpi_param_buffer_address;
|
| 3100 | };
|
| 3101 |
|
| 3102 | |
| 3103 | *
|
| 3104 | * RASF - RAS Feature Table (ACPI 5.0)
|
| 3105 | * Version 1
|
| 3106 | *
|
| 3107 | *****************************************************************************
|
| 3108 |
|
| 3109 | struct acpi_table_rasf {
|
| 3110 | struct acpi_table_header header;
|
| 3111 | u8 channel_id[12];
|
| 3112 | };
|
| 3113 |
|
| 3114 |
|
| 3115 |
|
| 3116 | struct acpi_rasf_shared_memory {
|
| 3117 | u32 signature;
|
| 3118 | u16 command;
|
| 3119 | u16 status;
|
| 3120 | u16 version;
|
| 3121 | u8 capabilities[16];
|
| 3122 | u8 set_capabilities[16];
|
| 3123 | u16 num_parameter_blocks;
|
| 3124 | u32 set_capabilities_status;
|
| 3125 | };
|
| 3126 |
|
| 3127 |
|
| 3128 |
|
| 3129 | struct acpi_rasf_parameter_block {
|
| 3130 | u16 type;
|
| 3131 | u16 version;
|
| 3132 | u16 length;
|
| 3133 | };
|
| 3134 |
|
| 3135 |
|
| 3136 |
|
| 3137 | struct acpi_rasf_patrol_scrub_parameter {
|
| 3138 | struct acpi_rasf_parameter_block header;
|
| 3139 | u16 patrol_scrub_command;
|
| 3140 | u64 requested_address_range[2];
|
| 3141 | u64 actual_address_range[2];
|
| 3142 | u16 flags;
|
| 3143 | u8 requested_speed;
|
| 3144 | };
|
| 3145 |
|
| 3146 |
|
| 3147 |
|
| 3148 | #define ACPI_RASF_SCRUBBER_RUNNING 1
|
| 3149 | #define ACPI_RASF_SPEED (7<<1)
|
| 3150 | #define ACPI_RASF_SPEED_SLOW (0<<1)
|
| 3151 | #define ACPI_RASF_SPEED_MEDIUM (4<<1)
|
| 3152 | #define ACPI_RASF_SPEED_FAST (7<<1)
|
| 3153 |
|
| 3154 |
|
| 3155 |
|
| 3156 | enum acpi_rasf_commands {
|
| 3157 | ACPI_RASF_EXECUTE_RASF_COMMAND = 1
|
| 3158 | };
|
| 3159 |
|
| 3160 |
|
| 3161 |
|
| 3162 | enum acpi_rasf_capabiliities {
|
| 3163 | ACPI_HW_PATROL_SCRUB_SUPPORTED = 0,
|
| 3164 | ACPI_SW_PATROL_SCRUB_EXPOSED = 1
|
| 3165 | };
|
| 3166 |
|
| 3167 |
|
| 3168 |
|
| 3169 | enum acpi_rasf_patrol_scrub_commands {
|
| 3170 | ACPI_RASF_GET_PATROL_PARAMETERS = 1,
|
| 3171 | ACPI_RASF_START_PATROL_SCRUBBER = 2,
|
| 3172 | ACPI_RASF_STOP_PATROL_SCRUBBER = 3
|
| 3173 | };
|
| 3174 |
|
| 3175 |
|
| 3176 |
|
| 3177 | #define ACPI_RASF_GENERATE_SCI (1<<15)
|
| 3178 |
|
| 3179 |
|
| 3180 |
|
| 3181 | enum acpi_rasf_status {
|
| 3182 | ACPI_RASF_SUCCESS = 0,
|
| 3183 | ACPI_RASF_NOT_VALID = 1,
|
| 3184 | ACPI_RASF_NOT_SUPPORTED = 2,
|
| 3185 | ACPI_RASF_BUSY = 3,
|
| 3186 | ACPI_RASF_FAILED = 4,
|
| 3187 | ACPI_RASF_ABORTED = 5,
|
| 3188 | ACPI_RASF_INVALID_DATA = 6
|
| 3189 | };
|
| 3190 |
|
| 3191 |
|
| 3192 |
|
| 3193 | #define ACPI_RASF_COMMAND_COMPLETE (1)
|
| 3194 | #define ACPI_RASF_SCI_DOORBELL (1<<1)
|
| 3195 | #define ACPI_RASF_ERROR (1<<2)
|
| 3196 | #define ACPI_RASF_STATUS (0x1F<<3)
|
| 3197 |
|
| 3198 | |
| 3199 | *
|
| 3200 | * RAS2 - RAS2 Feature Table (ACPI 6.5)
|
| 3201 | * Version 1
|
| 3202 | *
|
| 3203 | *
|
| 3204 | *****************************************************************************
|
| 3205 |
|
| 3206 | struct acpi_table_ras2 {
|
| 3207 | struct acpi_table_header header;
|
| 3208 | u16 reserved;
|
| 3209 | u16 num_pcc_descs;
|
| 3210 | };
|
| 3211 |
|
| 3212 |
|
| 3213 |
|
| 3214 | struct acpi_ras2_pcc_desc {
|
| 3215 | u8 channel_id;
|
| 3216 | u16 reserved;
|
| 3217 | u8 feature_type;
|
| 3218 | u32 instance;
|
| 3219 | };
|
| 3220 |
|
| 3221 |
|
| 3222 |
|
| 3223 | struct acpi_ras2_shmem {
|
| 3224 | u32 signature;
|
| 3225 | u16 command;
|
| 3226 | u16 status;
|
| 3227 | u16 version;
|
| 3228 | u8 features[16];
|
| 3229 | u8 set_caps[16];
|
| 3230 | u16 num_param_blks;
|
| 3231 | u32 set_caps_status;
|
| 3232 | };
|
| 3233 |
|
| 3234 |
|
| 3235 |
|
| 3236 | struct acpi_ras2_parameter_block {
|
| 3237 | u16 type;
|
| 3238 | u16 version;
|
| 3239 | u16 length;
|
| 3240 | };
|
| 3241 |
|
| 3242 |
|
| 3243 |
|
| 3244 | struct acpi_ras2_patrol_scrub_param {
|
| 3245 | struct acpi_ras2_parameter_block header;
|
| 3246 | u16 command;
|
| 3247 | u64 req_addr_range[2];
|
| 3248 | u64 actl_addr_range[2];
|
| 3249 | u32 flags;
|
| 3250 | u32 scrub_params_out;
|
| 3251 | u32 scrub_params_in;
|
| 3252 | u32 ext_scrub_params;
|
| 3253 | u8 scrub_rate_desc[256];
|
| 3254 | };
|
| 3255 |
|
| 3256 |
|
| 3257 |
|
| 3258 | #define ACPI_RAS2_SCRUBBER_RUNNING 1
|
| 3259 |
|
| 3260 |
|
| 3261 |
|
| 3262 | struct acpi_ras2_la2pa_translation_parameter {
|
| 3263 | struct acpi_ras2_parameter_block header;
|
| 3264 | u16 addr_translation_command;
|
| 3265 | u64 sub_inst_id;
|
| 3266 | u64 logical_address;
|
| 3267 | u64 physical_address;
|
| 3268 | u32 status;
|
| 3269 | };
|
| 3270 |
|
| 3271 |
|
| 3272 |
|
| 3273 | enum acpi_ras2_commands {
|
| 3274 | ACPI_RAS2_EXECUTE_RAS2_COMMAND = 1
|
| 3275 | };
|
| 3276 |
|
| 3277 |
|
| 3278 |
|
| 3279 | enum acpi_ras2_features {
|
| 3280 | ACPI_RAS2_PATROL_SCRUB_SUPPORTED = 0,
|
| 3281 | ACPI_RAS2_LA2PA_TRANSLATION = 1
|
| 3282 | };
|
| 3283 |
|
| 3284 |
|
| 3285 |
|
| 3286 | enum acpi_ras2_patrol_scrub_commands {
|
| 3287 | ACPI_RAS2_GET_PATROL_PARAMETERS = 1,
|
| 3288 | ACPI_RAS2_START_PATROL_SCRUBBER = 2,
|
| 3289 | ACPI_RAS2_STOP_PATROL_SCRUBBER = 3
|
| 3290 | };
|
| 3291 |
|
| 3292 |
|
| 3293 |
|
| 3294 | enum acpi_ras2_la2_pa_translation_commands {
|
| 3295 | ACPI_RAS2_GET_LA2PA_TRANSLATION = 1,
|
| 3296 | };
|
| 3297 |
|
| 3298 |
|
| 3299 |
|
| 3300 | enum acpi_ras2_la2_pa_translation_status {
|
| 3301 | ACPI_RAS2_LA2PA_TRANSLATION_SUCCESS = 0,
|
| 3302 | ACPI_RAS2_LA2PA_TRANSLATION_FAIL = 1,
|
| 3303 | };
|
| 3304 |
|
| 3305 |
|
| 3306 |
|
| 3307 | #define ACPI_RAS2_GENERATE_SCI (1<<15)
|
| 3308 |
|
| 3309 |
|
| 3310 |
|
| 3311 | enum acpi_ras2_status {
|
| 3312 | ACPI_RAS2_SUCCESS = 0,
|
| 3313 | ACPI_RAS2_NOT_VALID = 1,
|
| 3314 | ACPI_RAS2_NOT_SUPPORTED = 2,
|
| 3315 | ACPI_RAS2_BUSY = 3,
|
| 3316 | ACPI_RAS2_FAILED = 4,
|
| 3317 | ACPI_RAS2_ABORTED = 5,
|
| 3318 | ACPI_RAS2_INVALID_DATA = 6
|
| 3319 | };
|
| 3320 |
|
| 3321 |
|
| 3322 |
|
| 3323 | #define ACPI_RAS2_COMMAND_COMPLETE (1)
|
| 3324 | #define ACPI_RAS2_SCI_DOORBELL (1<<1)
|
| 3325 | #define ACPI_RAS2_ERROR (1<<2)
|
| 3326 | #define ACPI_RAS2_STATUS (0x1F<<3)
|
| 3327 |
|
| 3328 | |
| 3329 | *
|
| 3330 | * RGRT - Regulatory Graphics Resource Table
|
| 3331 | * Version 1
|
| 3332 | *
|
| 3333 | * Conforms to "ACPI RGRT" available at:
|
| 3334 | * https://microsoft.github.io/mu/dyn/mu_plus/ms_core_pkg/acpi_RGRT/feature_acpi_rgrt/
|
| 3335 | *
|
| 3336 | *****************************************************************************
|
| 3337 |
|
| 3338 | struct acpi_table_rgrt {
|
| 3339 | struct acpi_table_header header;
|
| 3340 | u16 version;
|
| 3341 | u8 image_type;
|
| 3342 | u8 reserved;
|
| 3343 | u8 image[];
|
| 3344 | };
|
| 3345 |
|
| 3346 |
|
| 3347 |
|
| 3348 | enum acpi_rgrt_image_type {
|
| 3349 | ACPI_RGRT_TYPE_RESERVED0 = 0,
|
| 3350 | ACPI_RGRT_IMAGE_TYPE_PNG = 1,
|
| 3351 | ACPI_RGRT_TYPE_RESERVED = 2
|
| 3352 | };
|
| 3353 |
|
| 3354 | |
| 3355 | *
|
| 3356 | * RHCT - RISC-V Hart Capabilities Table
|
| 3357 | * Version 1
|
| 3358 | *
|
| 3359 | *****************************************************************************
|
| 3360 |
|
| 3361 | struct acpi_table_rhct {
|
| 3362 | struct acpi_table_header header;
|
| 3363 | u32 flags;
|
| 3364 | u64 time_base_freq;
|
| 3365 | u32 node_count;
|
| 3366 | u32 node_offset;
|
| 3367 | };
|
| 3368 |
|
| 3369 |
|
| 3370 |
|
| 3371 | #define ACPI_RHCT_TIMER_CANNOT_WAKEUP_CPU (1)
|
| 3372 | |
| 3373 | * RHCT subtables
|
| 3374 |
|
| 3375 | struct acpi_rhct_node_header {
|
| 3376 | u16 type;
|
| 3377 | u16 length;
|
| 3378 | u16 revision;
|
| 3379 | };
|
| 3380 |
|
| 3381 |
|
| 3382 |
|
| 3383 | enum acpi_rhct_node_type {
|
| 3384 | ACPI_RHCT_NODE_TYPE_ISA_STRING = 0x0000,
|
| 3385 | ACPI_RHCT_NODE_TYPE_CMO = 0x0001,
|
| 3386 | ACPI_RHCT_NODE_TYPE_MMU = 0x0002,
|
| 3387 | ACPI_RHCT_NODE_TYPE_RESERVED = 0x0003,
|
| 3388 | ACPI_RHCT_NODE_TYPE_HART_INFO = 0xFFFF,
|
| 3389 | };
|
| 3390 |
|
| 3391 | |
| 3392 | * RHCT node specific subtables
|
| 3393 |
|
| 3394 |
|
| 3395 |
|
| 3396 | struct acpi_rhct_isa_string {
|
| 3397 | u16 isa_length;
|
| 3398 | char isa[];
|
| 3399 | };
|
| 3400 |
|
| 3401 | struct acpi_rhct_cmo_node {
|
| 3402 | u8 reserved;
|
| 3403 | u8 cbom_size;
|
| 3404 | u8 cbop_size;
|
| 3405 | u8 cboz_size;
|
| 3406 | };
|
| 3407 |
|
| 3408 | struct acpi_rhct_mmu_node {
|
| 3409 | u8 reserved;
|
| 3410 | u8 mmu_type;
|
| 3411 | };
|
| 3412 |
|
| 3413 | enum acpi_rhct_mmu_type {
|
| 3414 | ACPI_RHCT_MMU_TYPE_SV39 = 0,
|
| 3415 | ACPI_RHCT_MMU_TYPE_SV48 = 1,
|
| 3416 | ACPI_RHCT_MMU_TYPE_SV57 = 2
|
| 3417 | };
|
| 3418 |
|
| 3419 |
|
| 3420 | struct acpi_rhct_hart_info {
|
| 3421 | u16 num_offsets;
|
| 3422 | u32 uid;
|
| 3423 | };
|
| 3424 |
|
| 3425 | |
| 3426 | *
|
| 3427 | * RIMT - RISC-V IO Remapping Table
|
| 3428 | *
|
| 3429 | * https://github.com/riscv-non-isa/riscv-acpi-rimt
|
| 3430 | *
|
| 3431 | *****************************************************************************
|
| 3432 |
|
| 3433 | struct acpi_table_rimt {
|
| 3434 | struct acpi_table_header header;
|
| 3435 | u32 num_nodes;
|
| 3436 | u32 node_offset;
|
| 3437 | u32 reserved;
|
| 3438 | };
|
| 3439 |
|
| 3440 | struct acpi_rimt_node {
|
| 3441 | u8 type;
|
| 3442 | u8 revision;
|
| 3443 | u16 length;
|
| 3444 | u16 reserved;
|
| 3445 | u16 id;
|
| 3446 | char node_data[];
|
| 3447 | };
|
| 3448 |
|
| 3449 | enum acpi_rimt_node_type {
|
| 3450 | ACPI_RIMT_NODE_TYPE_IOMMU = 0x0,
|
| 3451 | ACPI_RIMT_NODE_TYPE_PCIE_ROOT_COMPLEX = 0x1,
|
| 3452 | ACPI_RIMT_NODE_TYPE_PLAT_DEVICE = 0x2,
|
| 3453 | };
|
| 3454 |
|
| 3455 | struct acpi_rimt_iommu {
|
| 3456 | u8 hardware_id[8];
|
| 3457 | u64 base_address;
|
| 3458 | u32 flags;
|
| 3459 | u32 proximity_domain;
|
| 3460 | u16 pcie_segment_number;
|
| 3461 | u16 pcie_bdf;
|
| 3462 | u16 num_interrupt_wires;
|
| 3463 | u16 interrupt_wire_offset;
|
| 3464 | u64 interrupt_wire[];
|
| 3465 | };
|
| 3466 |
|
| 3467 |
|
| 3468 | #define ACPI_RIMT_IOMMU_FLAGS_PCIE (1)
|
| 3469 | #define ACPI_RIMT_IOMMU_FLAGS_PXM_VALID (1 << 1)
|
| 3470 |
|
| 3471 |
|
| 3472 | struct acpi_rimt_iommu_wire_gsi {
|
| 3473 | u32 irq_num;
|
| 3474 | u32 flags;
|
| 3475 | };
|
| 3476 |
|
| 3477 |
|
| 3478 | #define ACPI_RIMT_GSI_LEVEL_TRIGGERRED (1)
|
| 3479 | #define ACPI_RIMT_GSI_ACTIVE_HIGH (1 << 1)
|
| 3480 |
|
| 3481 | struct acpi_rimt_id_mapping {
|
| 3482 | u32 source_id_base;
|
| 3483 | u32 num_ids;
|
| 3484 | u32 dest_id_base;
|
| 3485 | u32 dest_offset;
|
| 3486 | u32 flags;
|
| 3487 | };
|
| 3488 |
|
| 3489 | struct acpi_rimt_pcie_rc {
|
| 3490 | u32 flags;
|
| 3491 | u16 reserved;
|
| 3492 | u16 pcie_segment_number;
|
| 3493 | u16 id_mapping_offset;
|
| 3494 | u16 num_id_mappings;
|
| 3495 | };
|
| 3496 |
|
| 3497 |
|
| 3498 | #define ACPI_RIMT_PCIE_ATS_SUPPORTED (1)
|
| 3499 | #define ACPI_RIMT_PCIE_PRI_SUPPORTED (1 << 1)
|
| 3500 |
|
| 3501 | struct acpi_rimt_platform_device {
|
| 3502 | u16 id_mapping_offset;
|
| 3503 | u16 num_id_mappings;
|
| 3504 | char device_name[];
|
| 3505 | };
|
| 3506 |
|
| 3507 | |
| 3508 | *
|
| 3509 | * SBST - Smart Battery Specification Table
|
| 3510 | * Version 1
|
| 3511 | *
|
| 3512 | *****************************************************************************
|
| 3513 |
|
| 3514 | struct acpi_table_sbst {
|
| 3515 | struct acpi_table_header header;
|
| 3516 | u32 warning_level;
|
| 3517 | u32 low_level;
|
| 3518 | u32 critical_level;
|
| 3519 | };
|
| 3520 |
|
| 3521 | |
| 3522 | *
|
| 3523 | * SDEI - Software Delegated Exception Interface Descriptor Table
|
| 3524 | *
|
| 3525 | * Conforms to "Software Delegated Exception Interface (SDEI)" ARM DEN0054A,
|
| 3526 | * May 8th, 2017. Copyright 2017 ARM Ltd.
|
| 3527 | *
|
| 3528 | *****************************************************************************
|
| 3529 |
|
| 3530 | struct acpi_table_sdei {
|
| 3531 | struct acpi_table_header header;
|
| 3532 | };
|
| 3533 |
|
| 3534 | |
| 3535 | *
|
| 3536 | * SDEV - Secure Devices Table (ACPI 6.2)
|
| 3537 | * Version 1
|
| 3538 | *
|
| 3539 | *****************************************************************************
|
| 3540 |
|
| 3541 | struct acpi_table_sdev {
|
| 3542 | struct acpi_table_header header;
|
| 3543 | };
|
| 3544 |
|
| 3545 | struct acpi_sdev_header {
|
| 3546 | u8 type;
|
| 3547 | u8 flags;
|
| 3548 | u16 length;
|
| 3549 | };
|
| 3550 |
|
| 3551 |
|
| 3552 |
|
| 3553 | enum acpi_sdev_type {
|
| 3554 | ACPI_SDEV_TYPE_NAMESPACE_DEVICE = 0,
|
| 3555 | ACPI_SDEV_TYPE_PCIE_ENDPOINT_DEVICE = 1,
|
| 3556 | ACPI_SDEV_TYPE_RESERVED = 2
|
| 3557 | };
|
| 3558 |
|
| 3559 |
|
| 3560 |
|
| 3561 | #define ACPI_SDEV_HANDOFF_TO_UNSECURE_OS (1)
|
| 3562 | #define ACPI_SDEV_SECURE_COMPONENTS_PRESENT (1<<1)
|
| 3563 |
|
| 3564 | |
| 3565 | * SDEV subtables
|
| 3566 |
|
| 3567 |
|
| 3568 |
|
| 3569 |
|
| 3570 | struct acpi_sdev_namespace {
|
| 3571 | struct acpi_sdev_header header;
|
| 3572 | u16 device_id_offset;
|
| 3573 | u16 device_id_length;
|
| 3574 | u16 vendor_data_offset;
|
| 3575 | u16 vendor_data_length;
|
| 3576 | };
|
| 3577 |
|
| 3578 | struct acpi_sdev_secure_component {
|
| 3579 | u16 secure_component_offset;
|
| 3580 | u16 secure_component_length;
|
| 3581 | };
|
| 3582 |
|
| 3583 | |
| 3584 | * SDEV sub-subtables ("Components") for above
|
| 3585 |
|
| 3586 | struct acpi_sdev_component {
|
| 3587 | struct acpi_sdev_header header;
|
| 3588 | };
|
| 3589 |
|
| 3590 |
|
| 3591 |
|
| 3592 | enum acpi_sac_type {
|
| 3593 | ACPI_SDEV_TYPE_ID_COMPONENT = 0,
|
| 3594 | ACPI_SDEV_TYPE_MEM_COMPONENT = 1
|
| 3595 | };
|
| 3596 |
|
| 3597 | struct acpi_sdev_id_component {
|
| 3598 | struct acpi_sdev_header header;
|
| 3599 | u16 hardware_id_offset;
|
| 3600 | u16 hardware_id_length;
|
| 3601 | u16 subsystem_id_offset;
|
| 3602 | u16 subsystem_id_length;
|
| 3603 | u16 hardware_revision;
|
| 3604 | u8 hardware_rev_present;
|
| 3605 | u8 class_code_present;
|
| 3606 | u8 pci_base_class;
|
| 3607 | u8 pci_sub_class;
|
| 3608 | u8 pci_programming_xface;
|
| 3609 | };
|
| 3610 |
|
| 3611 | struct acpi_sdev_mem_component {
|
| 3612 | struct acpi_sdev_header header;
|
| 3613 | u32 reserved;
|
| 3614 | u64 memory_base_address;
|
| 3615 | u64 memory_length;
|
| 3616 | };
|
| 3617 |
|
| 3618 |
|
| 3619 |
|
| 3620 | struct acpi_sdev_pcie {
|
| 3621 | struct acpi_sdev_header header;
|
| 3622 | u16 segment;
|
| 3623 | u16 start_bus;
|
| 3624 | u16 path_offset;
|
| 3625 | u16 path_length;
|
| 3626 | u16 vendor_data_offset;
|
| 3627 | u16 vendor_data_length;
|
| 3628 | };
|
| 3629 |
|
| 3630 |
|
| 3631 |
|
| 3632 | struct acpi_sdev_pcie_path {
|
| 3633 | u8 device;
|
| 3634 | u8 function;
|
| 3635 | };
|
| 3636 |
|
| 3637 | |
| 3638 | *
|
| 3639 | * SVKL - Storage Volume Key Location Table (ACPI 6.4)
|
| 3640 | * From: "Guest-Host-Communication Interface (GHCI) for Intel
|
| 3641 | * Trust Domain Extensions (Intel TDX)".
|
| 3642 | * Version 1
|
| 3643 | *
|
| 3644 | *****************************************************************************
|
| 3645 |
|
| 3646 | struct acpi_table_svkl {
|
| 3647 | struct acpi_table_header header;
|
| 3648 | u32 count;
|
| 3649 | };
|
| 3650 |
|
| 3651 | struct acpi_svkl_key {
|
| 3652 | u16 type;
|
| 3653 | u16 format;
|
| 3654 | u32 size;
|
| 3655 | u64 address;
|
| 3656 | };
|
| 3657 |
|
| 3658 | enum acpi_svkl_type {
|
| 3659 | ACPI_SVKL_TYPE_MAIN_STORAGE = 0,
|
| 3660 | ACPI_SVKL_TYPE_RESERVED = 1
|
| 3661 | };
|
| 3662 |
|
| 3663 | enum acpi_svkl_format {
|
| 3664 | ACPI_SVKL_FORMAT_RAW_BINARY = 0,
|
| 3665 | ACPI_SVKL_FORMAT_RESERVED = 1
|
| 3666 | };
|
| 3667 |
|
| 3668 | |
| 3669 | * SWFT - SoundWire File Table
|
| 3670 | *
|
| 3671 | * Conforms to "Discovery and Configuration (DisCo) Specification for SoundWire"
|
| 3672 | * Version 2.1, 2 October 2023
|
| 3673 | *
|
| 3674 | *****************************************************************************
|
| 3675 | struct acpi_sw_file {
|
| 3676 | u16 vendor_id;
|
| 3677 | u32 file_id;
|
| 3678 | u16 file_version;
|
| 3679 | u32 file_length;
|
| 3680 | u8 data[];
|
| 3681 | };
|
| 3682 |
|
| 3683 | struct acpi_table_swft {
|
| 3684 | struct acpi_table_header header;
|
| 3685 | struct acpi_sw_file files[];
|
| 3686 | };
|
| 3687 |
|
| 3688 | |
| 3689 | *
|
| 3690 | * TDEL - TD-Event Log
|
| 3691 | * From: "Guest-Host-Communication Interface (GHCI) for Intel
|
| 3692 | * Trust Domain Extensions (Intel TDX)".
|
| 3693 | * September 2020
|
| 3694 | *
|
| 3695 | *****************************************************************************
|
| 3696 |
|
| 3697 | struct acpi_table_tdel {
|
| 3698 | struct acpi_table_header header;
|
| 3699 | u32 reserved;
|
| 3700 | u64 log_area_minimum_length;
|
| 3701 | u64 log_area_start_address;
|
| 3702 | };
|
| 3703 |
|
| 3704 |
|
| 3705 |
|
| 3706 | #pragma pack()
|
| 3707 |
|
| 3708 | #endif
|