diff options
author | Lawrence Hileman <larry.hileman@xconn-tech.com> | 2022-01-07 16:33:40 -0800 |
---|---|---|
committer | Lawrence Hileman <larry.hileman@xconn-tech.com> | 2022-01-07 16:33:40 -0800 |
commit | 19b11f91660b1a38a8e9655b0b1a4ad51ec4db1e (patch) | |
tree | 8f3e120a2c85f2c2585b55bf280152fc7df8824f | |
parent | cf7d6ccc009aa04a475bca81dc7af0342bb7c1eb (diff) | |
download | acpica-19b11f91660b1a38a8e9655b0b1a4ad51ec4db1e.tar.gz |
Add the subtable CFMWS to the CEDT table
-rw-r--r-- | source/common/dmtbdump1.c | 42 | ||||
-rw-r--r-- | source/common/dmtbinfo1.c | 22 | ||||
-rw-r--r-- | source/compiler/dttable1.c | 8 | ||||
-rw-r--r-- | source/include/acdisasm.h | 2 | ||||
-rw-r--r-- | source/include/actbinfo.h | 2 | ||||
-rw-r--r-- | source/include/actbl1.h | 5 |
6 files changed, 63 insertions, 18 deletions
diff --git a/source/common/dmtbdump1.c b/source/common/dmtbdump1.c index fd5e2fd99..8d6768747 100644 --- a/source/common/dmtbdump1.c +++ b/source/common/dmtbdump1.c @@ -567,7 +567,6 @@ AcpiDmDumpCedt ( ACPI_CEDT_HEADER *Subtable; UINT32 Length = Table->Length; UINT32 Offset = sizeof (ACPI_TABLE_CEDT); - ACPI_DMTABLE_INFO *InfoTable; /* There is no main table (other than the standard ACPI header) */ @@ -588,35 +587,50 @@ AcpiDmDumpCedt ( switch (Subtable->Type) { case ACPI_CEDT_TYPE_CHBS: + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoCedt0); + if (ACPI_FAILURE (Status)) { + return; + } + break; + + case ACPI_CEDT_TYPE_CFMWS: { + ACPI_CEDT_CFMWS *ptr = (ACPI_CEDT_CFMWS *) Subtable; + unsigned int i, max = 0x01 << (ptr->InterleaveWays); + + // print out table with first "Interleave target" + Status = AcpiDmDumpTable (Length, Offset, Subtable, + Subtable->Length, AcpiDmTableInfoCedt1); + if (ACPI_FAILURE (Status)) { + return; + } - InfoTable = AcpiDmTableInfoCedt0; + // Now, print out any interleave targets beyond the first. + for (i = 1; i < max; i++) { + unsigned int loc_offset = Offset + (i * 4) + ACPI_OFFSET(ACPI_CEDT_CFMWS, InterleaveTargets); + unsigned int *trg = &(ptr->InterleaveTargets[i]); + Status = AcpiDmDumpTable (Length, loc_offset, trg, + Subtable->Length, AcpiDmTableInfoCedt1_te); + if (ACPI_FAILURE (Status)) { + return; + } + } break; + } default: - AcpiOsPrintf ("\n**** Unknown CEDT subtable type 0x%X\n\n", Subtable->Type); /* Attempt to continue */ - if (!Subtable->Length) { AcpiOsPrintf ("Invalid zero length subtable\n"); return; } - goto NextSubtable; - } - - Status = AcpiDmDumpTable (Length, Offset, Subtable, - Subtable->Length, InfoTable); - if (ACPI_FAILURE (Status)) - { - return; } -NextSubtable: /* Point to next subtable */ - Offset += Subtable->Length; Subtable = ACPI_ADD_PTR (ACPI_CEDT_HEADER, Subtable, Subtable->Length); diff --git a/source/common/dmtbinfo1.c b/source/common/dmtbinfo1.c index b30cafa9f..b54bac562 100644 --- a/source/common/dmtbinfo1.c +++ b/source/common/dmtbinfo1.c @@ -521,6 +521,28 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoCedt0[] = ACPI_DMT_TERMINATOR }; +/* 1: CXL Fixed Memory Window Structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1[] = +{ + {ACPI_DMT_UINT32, ACPI_CEDT1_OFFSET (Reserved1), "Reserved", 0}, + {ACPI_DMT_UINT64, ACPI_CEDT1_OFFSET (BaseHpa), "Window base address", 0}, + {ACPI_DMT_UINT64, ACPI_CEDT1_OFFSET (WindowSize), "Window size", 0}, + {ACPI_DMT_UINT8, ACPI_CEDT1_OFFSET (InterleaveWays), "Interleave Members (2^n)", 0}, + {ACPI_DMT_UINT8, ACPI_CEDT1_OFFSET (InterleaveArithmetic), "Interleave Arithmetic", 0}, + {ACPI_DMT_UINT16, ACPI_CEDT1_OFFSET (Reserved2), "Reserved", 0}, + {ACPI_DMT_UINT32, ACPI_CEDT1_OFFSET (Granularity), "Granularity", 0}, + {ACPI_DMT_UINT16, ACPI_CEDT1_OFFSET (Restrictions), "Restrictions", 0}, + {ACPI_DMT_UINT16, ACPI_CEDT1_OFFSET (QtgId), "QtgId", 0}, + {ACPI_DMT_UINT32, ACPI_CEDT1_OFFSET (InterleaveTargets), "First Target", 0}, + ACPI_DMT_TERMINATOR +}; + +ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1_te[] = +{ + {ACPI_DMT_UINT32, ACPI_CEDT1_TE_OFFSET (InterleaveTarget), "Next Target", 0}, + ACPI_DMT_TERMINATOR +}; /******************************************************************************* * diff --git a/source/compiler/dttable1.c b/source/compiler/dttable1.c index 2e6a85691..39cbde8b5 100644 --- a/source/compiler/dttable1.c +++ b/source/compiler/dttable1.c @@ -607,18 +607,18 @@ DtCompileCedt ( switch (CedtHeader->Type) { case ACPI_CEDT_TYPE_CHBS: - + Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt0, &Subtable); + break; + case ACPI_CEDT_TYPE_CFMWS: + Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt1, &Subtable); break; default: - DtFatal (ASL_MSG_UNKNOWN_SUBTABLE, SubtableStart, "CEDT"); return (AE_ERROR); } /* CEDT Subtable */ - - Status = DtCompileTable (PFieldList, AcpiDmTableInfoCedt0, &Subtable); if (ACPI_FAILURE (Status)) { return (Status); diff --git a/source/include/acdisasm.h b/source/include/acdisasm.h index 17d70d4e7..685779de1 100644 --- a/source/include/acdisasm.h +++ b/source/include/acdisasm.h @@ -402,6 +402,8 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoBert[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoBgrt[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedtHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedt0[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoCedt1_te[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCpep[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCpep0[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoCsrt0[]; diff --git a/source/include/actbinfo.h b/source/include/actbinfo.h index 7402d97b1..710eca7ee 100644 --- a/source/include/actbinfo.h +++ b/source/include/actbinfo.h @@ -234,6 +234,8 @@ #define ACPI_ASF4_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_ASF_ADDRESS,f) #define ACPI_CEDT_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_HEADER, f) #define ACPI_CEDT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_CHBS, f) +#define ACPI_CEDT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS, f) +#define ACPI_CEDT1_TE_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CEDT_CFMWS_TARGET_ELEMENT, f) #define ACPI_CPEP0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CPEP_POLLING,f) #define ACPI_CSRT0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_GROUP,f) #define ACPI_CSRT1_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_CSRT_SHARED_INFO,f) diff --git a/source/include/actbl1.h b/source/include/actbl1.h index 09e68293a..ea486d905 100644 --- a/source/include/actbl1.h +++ b/source/include/actbl1.h @@ -574,6 +574,11 @@ typedef struct acpi_cedt_cfmws } ACPI_CEDT_CFMWS; +typedef struct acpi_cedt_cfmws_target_element +{ + UINT32 InterleaveTarget; +} ACPI_CEDT_CFMWS_TARGET_ELEMENT; + /* Values for Interleave Arithmetic field above */ #define ACPI_CEDT_CFMWS_ARITHMETIC_MODULO (0) |