From fc00da7aa878cf46b76735bde3952ac1e82bd944 Mon Sep 17 00:00:00 2001 From: Marc Jones Date: Tue, 1 Mar 2022 16:02:43 -0700 Subject: Add DMAR SATC structure to iasl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add the DMAR SATC structure support from the Intel ® Virtualization Technology for Directed I/O \ Architecture Specification, Rev. 3.4, Order Number: D51397-014 Test: $ iasl -d dmar.dat -> dmar.dsl $ iasl dmar.dsl -> dmar.aml $ cmp dmar.dat dmar.dsl Signed-off-by: Marc Jones --- source/common/dmtable.c | 1 + source/common/dmtbdump1.c | 6 ++++++ source/common/dmtbinfo1.c | 9 +++++++++ source/compiler/dttable1.c | 5 +++++ source/compiler/dttemplate.h | 10 ++++++---- source/include/acdisasm.h | 1 + source/include/actbinfo.h | 1 + source/include/actbl1.h | 15 ++++++++++++++- 8 files changed, 43 insertions(+), 5 deletions(-) (limited to 'source') diff --git a/source/common/dmtable.c b/source/common/dmtable.c index 081f50975..3bcc55949 100644 --- a/source/common/dmtable.c +++ b/source/common/dmtable.c @@ -248,6 +248,7 @@ static const char *AcpiDmDmarSubnames[] = "Root Port ATS Capability", "Remapping Hardware Static Affinity", "ACPI Namespace Device Declaration", + "SoC Integrated Address Translation Cache", "Unknown Subtable Type" /* Reserved */ }; diff --git a/source/common/dmtbdump1.c b/source/common/dmtbdump1.c index c5b5a2f07..66333c9ae 100644 --- a/source/common/dmtbdump1.c +++ b/source/common/dmtbdump1.c @@ -1004,6 +1004,12 @@ AcpiDmDumpDmar ( ScopeOffset = sizeof (ACPI_DMAR_ANDD); break; + case ACPI_DMAR_TYPE_SATC: + + InfoTable = AcpiDmTableInfoDmar5; + ScopeOffset = sizeof (ACPI_DMAR_SATC); + break; + default: AcpiOsPrintf ("\n**** Unknown DMAR subtable type 0x%X\n\n", diff --git a/source/common/dmtbinfo1.c b/source/common/dmtbinfo1.c index bb9d4b9da..d6a94bfc1 100644 --- a/source/common/dmtbinfo1.c +++ b/source/common/dmtbinfo1.c @@ -790,6 +790,15 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[] = ACPI_DMT_TERMINATOR }; +/* 5: Hardware Unit Definition */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoDmar5[] = +{ + {ACPI_DMT_UINT8, ACPI_DMAR5_OFFSET (Flags), "Flags", 0}, + {ACPI_DMT_UINT8, ACPI_DMAR5_OFFSET (Reserved), "Reserved", 0}, + {ACPI_DMT_UINT16, ACPI_DMAR5_OFFSET (Segment), "PCI Segment Number", 0}, + ACPI_DMT_TERMINATOR +}; /******************************************************************************* * diff --git a/source/compiler/dttable1.c b/source/compiler/dttable1.c index 66348535e..cb7b7f4b8 100644 --- a/source/compiler/dttable1.c +++ b/source/compiler/dttable1.c @@ -1055,6 +1055,11 @@ DtCompileDmar ( InfoTable = AcpiDmTableInfoDmar4; break; + case ACPI_DMAR_TYPE_SATC: + + InfoTable = AcpiDmTableInfoDmar5; + break; + default: DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "DMAR"); diff --git a/source/compiler/dttemplate.h b/source/compiler/dttemplate.h index 08c76f6cb..882d99c19 100644 --- a/source/compiler/dttemplate.h +++ b/source/compiler/dttemplate.h @@ -471,11 +471,11 @@ const unsigned char TemplateDbgp[] = const unsigned char TemplateDmar[] = { - 0x44,0x4D,0x41,0x52,0x8C,0x00,0x00,0x00, /* 00000000 "DMAR...." */ - 0x01,0x03,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ + 0x44,0x4D,0x41,0x52,0x9C,0x00,0x00,0x00, /* 00000000 "DMAR...." */ + 0x01,0xB8,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x45,0x4D,0x50,0x4C,0x41,0x54,0x45, /* 00000010 "TEMPLATE" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ - 0x17,0x05,0x13,0x20,0x2F,0x01,0x00,0x00, /* 00000020 "... /..." */ + 0x17,0x12,0x21,0x20,0x2F,0x01,0x00,0x00, /* 00000020 "..! /..." */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000028 "........" */ 0x00,0x00,0x18,0x00,0x01,0x00,0x00,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ @@ -488,7 +488,9 @@ const unsigned char TemplateDmar[] = 0x02,0x08,0x00,0x00,0x00,0x00,0x00,0x03, /* 00000070 "........" */ 0x03,0x00,0x14,0x00,0x00,0x00,0x00,0x00, /* 00000078 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000080 "........" */ - 0x00,0x00,0x00,0x00 /* 00000088 "...." */ + 0x00,0x00,0x00,0x00,0x05,0x00,0x10,0x00, /* 00000088 "........" */ + 0x00,0x00,0x00,0x00,0x01,0x08,0x00,0x00, /* 00000090 "........" */ + 0x00,0x00,0x00,0x02 /* 00000098 "...." */ }; const unsigned char TemplateDrtm[] = diff --git a/source/include/acdisasm.h b/source/include/acdisasm.h index 08565d56c..f1715fa16 100644 --- a/source/include/acdisasm.h +++ b/source/include/acdisasm.h @@ -425,6 +425,7 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar1[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar2[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar3[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar4[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoDmar5[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoDrtm0a[]; diff --git a/source/include/actbinfo.h b/source/include/actbinfo.h index 191eb3069..e10ffeecc 100644 --- a/source/include/actbinfo.h +++ b/source/include/actbinfo.h @@ -247,6 +247,7 @@ #define ACPI_DMAR2_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ATSR,f) #define ACPI_DMAR3_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_RHSA,f) #define ACPI_DMAR4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_ANDD,f) +#define ACPI_DMAR5_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DMAR_SATC,f) #define ACPI_DRTM0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_VTABLE_LIST,f) #define ACPI_DRTM1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE_LIST,f) #define ACPI_DRTM1a_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_DRTM_RESOURCE,f) diff --git a/source/include/actbl1.h b/source/include/actbl1.h index be61e1247..3de78b0d8 100644 --- a/source/include/actbl1.h +++ b/source/include/actbl1.h @@ -853,7 +853,8 @@ enum AcpiDmarType ACPI_DMAR_TYPE_ROOT_ATS = 2, ACPI_DMAR_TYPE_HARDWARE_AFFINITY = 3, ACPI_DMAR_TYPE_NAMESPACE = 4, - ACPI_DMAR_TYPE_RESERVED = 5 /* 5 and greater are reserved */ + ACPI_DMAR_TYPE_SATC = 5, + ACPI_DMAR_TYPE_RESERVED = 6 /* 6 and greater are reserved */ }; @@ -968,6 +969,18 @@ typedef struct acpi_dmar_andd } ACPI_DMAR_ANDD; +/* 5: SoC Integrated Address Translation Cache (SATC) */ + +typedef struct acpi_dmar_satc +{ + ACPI_DMAR_HEADER Header; + UINT8 Flags; + UINT8 Reserved; + UINT16 Segment; + +} ACPI_DMAR_SATC + +; /******************************************************************************* * * DRTM - Dynamic Root of Trust for Measurement table -- cgit v1.2.1