|
29 | 29 | #define ACPI_SIG_BDAT "BDAT" /* BIOS Data ACPI Table */
|
30 | 30 | #define ACPI_SIG_CCEL "CCEL" /* CC Event Log Table */
|
31 | 31 | #define ACPI_SIG_CDAT "CDAT" /* Coherent Device Attribute Table */
|
| 32 | +#define ACPI_SIG_ERDT "ERDT" /* Enhanced Resource Director Technology */ |
32 | 33 | #define ACPI_SIG_IORT "IORT" /* IO Remapping Table */
|
33 | 34 | #define ACPI_SIG_IVRS "IVRS" /* I/O Virtualization Reporting Structure */
|
34 | 35 | #define ACPI_SIG_LPIT "LPIT" /* Low Power Idle Table */
|
@@ -450,6 +451,195 @@ struct acpi_table_ccel {
|
450 | 451 | u64 log_area_start_address;
|
451 | 452 | };
|
452 | 453 |
|
| 454 | +/******************************************************************************* |
| 455 | + * |
| 456 | + * ERDT - Enhanced Resource Director Technology (ERDT) table |
| 457 | + * |
| 458 | + * Conforms to "Intel Resource Director Technology Architecture Specification" |
| 459 | + * Version 1.1, January 2025 |
| 460 | + * |
| 461 | + ******************************************************************************/ |
| 462 | + |
| 463 | +struct acpi_table_erdt { |
| 464 | + struct acpi_table_header header; /* Common ACPI table header */ |
| 465 | + u32 max_clos; /* Maximum classes of service */ |
| 466 | + u8 reserved[24]; |
| 467 | + u8 erdt_substructures[]; |
| 468 | +}; |
| 469 | + |
| 470 | +/* Values for subtable type in struct acpi_subtbl_hdr_16 */ |
| 471 | + |
| 472 | +enum acpi_erdt_type { |
| 473 | + ACPI_ERDT_TYPE_RMDD = 0, |
| 474 | + ACPI_ERDT_TYPE_CACD = 1, |
| 475 | + ACPI_ERDT_TYPE_DACD = 2, |
| 476 | + ACPI_ERDT_TYPE_CMRC = 3, |
| 477 | + ACPI_ERDT_TYPE_MMRC = 4, |
| 478 | + ACPI_ERDT_TYPE_MARC = 5, |
| 479 | + ACPI_ERDT_TYPE_CARC = 6, |
| 480 | + ACPI_ERDT_TYPE_CMRD = 7, |
| 481 | + ACPI_ERDT_TYPE_IBRD = 8, |
| 482 | + ACPI_ERDT_TYPE_IBAD = 9, |
| 483 | + ACPI_ERDT_TYPE_CARD = 10, |
| 484 | + ACPI_ERDT_TYPE_RESERVED = 11 /* 11 and above are reserved */ |
| 485 | +}; |
| 486 | + |
| 487 | +/* |
| 488 | + * ERDT Subtables, correspond to Type in struct acpi_subtbl_hdr_16 |
| 489 | + */ |
| 490 | + |
| 491 | +/* 0: RMDD - Resource Management Domain Description */ |
| 492 | + |
| 493 | +struct acpi_erdt_rmdd { |
| 494 | + struct acpi_subtbl_hdr_16 header; |
| 495 | + u16 flags; |
| 496 | + u16 IO_l3_slices; /* Number of slices in IO cache */ |
| 497 | + u8 IO_l3_sets; /* Number of sets in IO cache */ |
| 498 | + u8 IO_l3_ways; /* Number of ways in IO cache */ |
| 499 | + u64 reserved; |
| 500 | + u16 domain_id; /* Unique domain ID */ |
| 501 | + u32 max_rmid; /* Maximun RMID supported */ |
| 502 | + u64 creg_base; /* Control Register Base Address */ |
| 503 | + u16 creg_size; /* Control Register Size (4K pages) */ |
| 504 | + u8 rmdd_structs[]; |
| 505 | +}; |
| 506 | + |
| 507 | +/* 1: CACD - CPU Agent Collection Description */ |
| 508 | + |
| 509 | +struct acpi_erdt_cacd { |
| 510 | + struct acpi_subtbl_hdr_16 header; |
| 511 | + u16 reserved; |
| 512 | + u16 domain_id; /* Unique domain ID */ |
| 513 | + u32 X2APICIDS[]; |
| 514 | +}; |
| 515 | + |
| 516 | +/* 2: DACD - Device Agent Collection Description */ |
| 517 | + |
| 518 | +struct acpi_erdt_dacd { |
| 519 | + struct acpi_subtbl_hdr_16 header; |
| 520 | + u16 reserved; |
| 521 | + u16 domain_id; /* Unique domain ID */ |
| 522 | + u8 dev_paths[]; |
| 523 | +}; |
| 524 | + |
| 525 | +struct acpi_erdt_dacd_dev_paths { |
| 526 | + struct acpi_subtable_header header; |
| 527 | + u16 segment; |
| 528 | + u8 reserved; |
| 529 | + u8 start_bus; |
| 530 | + u8 path[]; |
| 531 | +}; |
| 532 | + |
| 533 | +/* 3: CMRC - Cache Monitoring Registers for CPU Agents */ |
| 534 | + |
| 535 | +struct acpi_erdt_cmrc { |
| 536 | + struct acpi_subtbl_hdr_16 header; |
| 537 | + u32 reserved1; |
| 538 | + u32 flags; |
| 539 | + u8 index_fn; |
| 540 | + u8 reserved2[11]; |
| 541 | + u64 cmt_reg_base; |
| 542 | + u32 cmt_reg_size; |
| 543 | + u16 clump_size; |
| 544 | + u16 clump_stride; |
| 545 | + u64 up_scale; |
| 546 | +}; |
| 547 | + |
| 548 | +/* 4: MMRC - Memory-bandwidth Monitoring Registers for CPU Agents */ |
| 549 | + |
| 550 | +struct acpi_erdt_mmrc { |
| 551 | + struct acpi_subtbl_hdr_16 header; |
| 552 | + u32 reserved1; |
| 553 | + u32 flags; |
| 554 | + u8 index_fn; |
| 555 | + u8 reserved2[11]; |
| 556 | + u64 reg_base; |
| 557 | + u32 reg_size; |
| 558 | + u8 counter_width; |
| 559 | + u64 up_scale; |
| 560 | + u8 reserved3[7]; |
| 561 | + u32 corr_factor_list_len; |
| 562 | + u32 corr_factor_list[]; |
| 563 | +}; |
| 564 | + |
| 565 | +/* 5: MARC - Memory-bandwidth Allocation Registers for CPU Agents */ |
| 566 | + |
| 567 | +struct acpi_erdt_marc { |
| 568 | + struct acpi_subtbl_hdr_16 header; |
| 569 | + u16 reserved1; |
| 570 | + u16 flags; |
| 571 | + u8 index_fn; |
| 572 | + u8 reserved2[7]; |
| 573 | + u64 reg_base_opt; |
| 574 | + u64 reg_base_min; |
| 575 | + u64 reg_base_max; |
| 576 | + u32 mba_reg_size; |
| 577 | + u32 mba_ctrl_range; |
| 578 | +}; |
| 579 | + |
| 580 | +/* 6: CARC - Cache Allocation Registers for CPU Agents */ |
| 581 | + |
| 582 | +struct acpi_erdt_carc { |
| 583 | + struct acpi_subtbl_hdr_16 header; |
| 584 | +}; |
| 585 | + |
| 586 | +/* 7: CMRD - Cache Monitoring Registers for Device Agents */ |
| 587 | + |
| 588 | +struct acpi_erdt_cmrd { |
| 589 | + struct acpi_subtbl_hdr_16 header; |
| 590 | + u32 reserved1; |
| 591 | + u32 flags; |
| 592 | + u8 index_fn; |
| 593 | + u8 reserved2[11]; |
| 594 | + u64 reg_base; |
| 595 | + u32 reg_size; |
| 596 | + u16 cmt_reg_off; |
| 597 | + u16 cmt_clump_size; |
| 598 | + u64 up_scale; |
| 599 | +}; |
| 600 | + |
| 601 | +/* 8: IBRD - Cache Monitoring Registers for Device Agents */ |
| 602 | + |
| 603 | +struct acpi_erdt_ibrd { |
| 604 | + struct acpi_subtbl_hdr_16 header; |
| 605 | + u32 reserved1; |
| 606 | + u32 flags; |
| 607 | + u8 index_fn; |
| 608 | + u8 reserved2[11]; |
| 609 | + u64 reg_base; |
| 610 | + u32 reg_size; |
| 611 | + u16 total_bw_offset; |
| 612 | + u16 Iomiss_bw_offset; |
| 613 | + u16 total_bw_clump; |
| 614 | + u16 Iomiss_bw_clump; |
| 615 | + u8 reserved3[7]; |
| 616 | + u8 counter_width; |
| 617 | + u64 up_scale; |
| 618 | + u32 corr_factor_list_len; |
| 619 | + u32 corr_factor_list[]; |
| 620 | +}; |
| 621 | + |
| 622 | +/* 9: IBAD - IO bandwidth Allocation Registers for device agents */ |
| 623 | + |
| 624 | +struct acpi_erdt_ibad { |
| 625 | + struct acpi_subtbl_hdr_16 header; |
| 626 | +}; |
| 627 | + |
| 628 | +/* 10: CARD - IO bandwidth Allocation Registers for Device Agents */ |
| 629 | + |
| 630 | +struct acpi_erdt_card { |
| 631 | + struct acpi_subtbl_hdr_16 header; |
| 632 | + u32 reserved1; |
| 633 | + u32 flags; |
| 634 | + u32 contention_mask; |
| 635 | + u8 index_fn; |
| 636 | + u8 reserved2[7]; |
| 637 | + u64 reg_base; |
| 638 | + u32 reg_size; |
| 639 | + u16 cat_reg_offset; |
| 640 | + u16 cat_reg_block_size; |
| 641 | +}; |
| 642 | + |
453 | 643 | /*******************************************************************************
|
454 | 644 | *
|
455 | 645 | * IORT - IO Remapping Table
|
|
0 commit comments