diff options
author | Jianmin Lv <lvjianmin@loongson.cn> | 2023-03-28 09:10:59 +0800 |
---|---|---|
committer | Jianmin Lv <lvjianmin@loongson.cn> | 2023-03-28 09:53:12 +0800 |
commit | a1cb7b6af77ec30668634cdcaa0eb73b8f1dc3e2 (patch) | |
tree | e026c6249b22ee3ed1880696a5f17078a662b9e5 | |
parent | 41b40f8412f9587cccac88f4520cb6ede512e5ae (diff) | |
download | acpica-a1cb7b6af77ec30668634cdcaa0eb73b8f1dc3e2.tar.gz |
iASL/MADT: Add dump and compile support for LoongArch APICs
The previous patch(MADT: Add LoongArch-specific APICs support), has
added LoongArch-specific APICs support, but lack of dumping and compiling
for LoongArch APICs in MADT when using iasl tool, so add code to
support it.
Signed-off-by: Jianmin Lv <lvjianmin@loongson.cn>
-rw-r--r-- | source/common/dmtbdump2.c | 37 | ||||
-rw-r--r-- | source/common/dmtbinfo2.c | 85 | ||||
-rw-r--r-- | source/compiler/dttable2.c | 37 | ||||
-rw-r--r-- | source/compiler/dttemplate.h | 23 | ||||
-rw-r--r-- | source/include/acdisasm.h | 7 | ||||
-rw-r--r-- | source/include/actbinfo.h | 9 |
6 files changed, 187 insertions, 11 deletions
diff --git a/source/common/dmtbdump2.c b/source/common/dmtbdump2.c index 958ecce8f..7a0db3ef9 100644 --- a/source/common/dmtbdump2.c +++ b/source/common/dmtbdump2.c @@ -990,6 +990,41 @@ AcpiDmDumpMadt ( InfoTable = AcpiDmTableInfoMadt16; break; + case ACPI_MADT_TYPE_CORE_PIC: + + InfoTable = AcpiDmTableInfoMadt17; + break; + + case ACPI_MADT_TYPE_LIO_PIC: + + InfoTable = AcpiDmTableInfoMadt18; + break; + + case ACPI_MADT_TYPE_HT_PIC: + + InfoTable = AcpiDmTableInfoMadt19; + break; + + case ACPI_MADT_TYPE_EIO_PIC: + + InfoTable = AcpiDmTableInfoMadt20; + break; + + case ACPI_MADT_TYPE_MSI_PIC: + + InfoTable = AcpiDmTableInfoMadt21; + break; + + case ACPI_MADT_TYPE_BIO_PIC: + + InfoTable = AcpiDmTableInfoMadt22; + break; + + case ACPI_MADT_TYPE_LPC_PIC: + + InfoTable = AcpiDmTableInfoMadt23; + break; + default: if ((Subtable->Type >= ACPI_MADT_TYPE_RESERVED) && @@ -1021,7 +1056,7 @@ AcpiDmDumpMadt ( /* Dump the OEM data */ Status = AcpiDmDumpTable (Length, Offset, ACPI_CAST_PTR (UINT8, Table) + Offset, - Subtable->Length - sizeof (ACPI_SUBTABLE_HEADER), AcpiDmTableInfoMadt17); + Subtable->Length - sizeof (ACPI_SUBTABLE_HEADER), AcpiDmTableInfoMadt128); if (ACPI_FAILURE (Status)) { return; diff --git a/source/common/dmtbinfo2.c b/source/common/dmtbinfo2.c index 214206add..1b672bbd9 100644 --- a/source/common/dmtbinfo2.c +++ b/source/common/dmtbinfo2.c @@ -678,8 +678,6 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoLpit0[] = {ACPI_DMT_UINT64, ACPI_LPIT0_OFFSET (CounterFrequency), "Counter Frequency", 0}, ACPI_DMT_TERMINATOR }; - - /******************************************************************************* * * MADT - Multiple APIC Description Table and subtables @@ -926,12 +924,91 @@ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt16[] = ACPI_DMT_TERMINATOR }; -/* 17: OEM data structure */ +/* 17: core interrupt controller */ ACPI_DMTABLE_INFO AcpiDmTableInfoMadt17[] = { + {ACPI_DMT_UINT8, ACPI_MADT17_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT32, ACPI_MADT17_OFFSET (ProcessorId), "ProcessorId", 0}, + {ACPI_DMT_UINT32, ACPI_MADT17_OFFSET (CoreId), "CoreId", 0}, + {ACPI_DMT_UINT32, ACPI_MADT17_OFFSET (Flags), "Flags", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 18: Legacy I/O interrupt controller */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt18[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT18_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT64, ACPI_MADT18_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT16, ACPI_MADT18_OFFSET (Size), "Size", 0}, + {ACPI_DMT_UINT16, ACPI_MADT18_OFFSET (Cascade), "Cascade", 0}, + {ACPI_DMT_UINT64, ACPI_MADT18_OFFSET (CascadeMap), "CascadeMap", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 19: HT interrupt controller */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt19[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT19_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT64, ACPI_MADT19_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT16, ACPI_MADT19_OFFSET (Size), "Size", 0}, + {ACPI_DMT_UINT64, ACPI_MADT19_OFFSET (Cascade), "Cascade", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 20: Extend I/O interrupt controller */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt20[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT20_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT8, ACPI_MADT20_OFFSET (Cascade), "Cascade", 0}, + {ACPI_DMT_UINT8, ACPI_MADT20_OFFSET (Node), "Node", 0}, + {ACPI_DMT_UINT64, ACPI_MADT20_OFFSET (NodeMap), "NodeMap", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 21: MSI controller */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt21[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT21_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT64, ACPI_MADT21_OFFSET (MsgAddress), "MsgAddress", 0}, + {ACPI_DMT_UINT32, ACPI_MADT21_OFFSET (Start), "Start", 0}, + {ACPI_DMT_UINT32, ACPI_MADT21_OFFSET (Count), "Count", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 22: BIO interrupt controller */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt22[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT22_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT64, ACPI_MADT22_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT16, ACPI_MADT22_OFFSET (Size), "Size", 0}, + {ACPI_DMT_UINT16, ACPI_MADT22_OFFSET (Id), "Id", 0}, + {ACPI_DMT_UINT16, ACPI_MADT22_OFFSET (GsiBase), "GsiBase", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 23: LPC interrupt controller */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt23[] = +{ + {ACPI_DMT_UINT8, ACPI_MADT23_OFFSET (Version), "Version", 0}, + {ACPI_DMT_UINT64, ACPI_MADT23_OFFSET (Address), "Address", 0}, + {ACPI_DMT_UINT16, ACPI_MADT23_OFFSET (Size), "Size", 0}, + {ACPI_DMT_UINT8, ACPI_MADT23_OFFSET (Cascade), "Cascade", 0}, + ACPI_DMT_TERMINATOR +}; + +/* 24: OEM data structure */ + +ACPI_DMTABLE_INFO AcpiDmTableInfoMadt128[] = +{ {ACPI_DMT_RAW_BUFFER, 0, "OEM Data", 0}, - ACPI_DMT_TERMINATOR + ACPI_DMT_TERMINATOR }; /******************************************************************************* diff --git a/source/compiler/dttable2.c b/source/compiler/dttable2.c index 007b67476..a6882600f 100644 --- a/source/compiler/dttable2.c +++ b/source/compiler/dttable2.c @@ -371,11 +371,46 @@ DtCompileMadt ( InfoTable = AcpiDmTableInfoMadt16; break; + case ACPI_MADT_TYPE_CORE_PIC: + + InfoTable = AcpiDmTableInfoMadt17; + break; + + case ACPI_MADT_TYPE_LIO_PIC: + + InfoTable = AcpiDmTableInfoMadt18; + break; + + case ACPI_MADT_TYPE_HT_PIC: + + InfoTable = AcpiDmTableInfoMadt19; + break; + + case ACPI_MADT_TYPE_EIO_PIC: + + InfoTable = AcpiDmTableInfoMadt20; + break; + + case ACPI_MADT_TYPE_MSI_PIC: + + InfoTable = AcpiDmTableInfoMadt21; + break; + + case ACPI_MADT_TYPE_BIO_PIC: + + InfoTable = AcpiDmTableInfoMadt22; + break; + + case ACPI_MADT_TYPE_LPC_PIC: + + InfoTable = AcpiDmTableInfoMadt23; + break; + default: if (MadtHeader->Type >= ACPI_MADT_TYPE_OEM_RESERVED) { - InfoTable = AcpiDmTableInfoMadt17; + InfoTable = AcpiDmTableInfoMadt128; } else { diff --git a/source/compiler/dttemplate.h b/source/compiler/dttemplate.h index 755da4022..bbe81c01d 100644 --- a/source/compiler/dttemplate.h +++ b/source/compiler/dttemplate.h @@ -1128,11 +1128,11 @@ const unsigned char TemplateLpit[] = const unsigned char TemplateMadt[] = { - 0x41,0x50,0x49,0x43,0x6A,0x01,0x00,0x00, /* 00000000 "APICj..." */ - 0x05,0x9D,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ + 0x41,0x50,0x49,0x43,0xE4,0x01,0x00,0x00, /* 00000000 "APIC...." */ + 0x05,0xD4,0x49,0x4E,0x54,0x45,0x4C,0x20, /* 00000008 "..INTEL " */ 0x54,0x65,0x6D,0x70,0x6C,0x61,0x74,0x65, /* 00000010 "Template" */ 0x01,0x00,0x00,0x00,0x49,0x4E,0x54,0x4C, /* 00000018 "....INTL" */ - 0x13,0x11,0x20,0x20,0x00,0x00,0x00,0x00, /* 00000020 ".. ...." */ + 0x31,0x03,0x22,0x20,0x00,0x00,0x00,0x00, /* 00000020 "1." ...." */ 0x01,0x00,0x00,0x00,0x00,0x08,0x00,0x00, /* 00000028 "........" */ 0x01,0x00,0x00,0x00,0x01,0x0C,0x01,0x00, /* 00000030 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000038 "........" */ @@ -1173,7 +1173,22 @@ const unsigned char TemplateMadt[] = 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000150 "........" */ 0x00,0x00,0x10,0x10,0x00,0x00,0x00,0x00, /* 00000158 "........" */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 00000160 "........" */ - 0x00,0x00 /* 00000168 ".." */ + 0x00,0x00,0x11,0x0F,0x01,0x01,0x00,0x00, /* 00000168 "........" */ + 0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /* 00000170 "........" */ + 0x00,0x12,0x17,0x01,0x00,0x14,0xE0,0x1F, /* 00000178 "........" */ + 0x00,0x00,0x00,0x00,0x80,0x00,0x02,0x03, /* 00000180 "........" */ + 0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF, /* 00000188 "........" */ + 0x13,0x15,0x01,0x80,0x00,0x00,0xFB,0xFD, /* 00000190 "........" */ + 0x0E,0x00,0x00,0x40,0x00,0x00,0x00,0x00, /* 00000198 "...@...." */ + 0xFF,0x00,0x00,0x00,0x00,0x14,0x0D,0x01, /* 000001A0 "........" */ + 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 000001A8 "........" */ + 0x00,0x00,0x15,0x13,0x01,0x00,0x00,0xF0, /* 000001B0 "........" */ + 0x2F,0x00,0x00,0x00,0x00,0x40,0x00,0x00, /* 000001B8 "/....@.." */ + 0x00,0xC0,0x00,0x00,0x00,0x16,0x11,0x01, /* 000001C0 "........" */ + 0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x00, /* 000001C8 "........" */ + 0x00,0x10,0x00,0x00,0x40,0x00,0x17,0x0E, /* 000001D0 "....@..." */ + 0x01,0x00,0x20,0x00,0x10,0x00,0x00,0x00, /* 000001D8 ".. ....." */ + 0x00,0x00,0x10,0x13 /* 000001E0 "...." */ }; const unsigned char TemplateMcfg[] = diff --git a/source/include/acdisasm.h b/source/include/acdisasm.h index afc9034b8..898317f66 100644 --- a/source/include/acdisasm.h +++ b/source/include/acdisasm.h @@ -554,6 +554,13 @@ extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt14[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt15[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt16[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt17[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt18[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt19[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt20[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt21[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt22[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt23[]; +extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadt128[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMadtHdr[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg[]; extern ACPI_DMTABLE_INFO AcpiDmTableInfoMcfg0[]; diff --git a/source/include/actbinfo.h b/source/include/actbinfo.h index 5417aff4a..d24b92ed4 100644 --- a/source/include/actbinfo.h +++ b/source/include/actbinfo.h @@ -334,7 +334,14 @@ #define ACPI_MADT14_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_REDISTRIBUTOR,f) #define ACPI_MADT15_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_GENERIC_TRANSLATOR,f) #define ACPI_MADT16_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_MULTIPROC_WAKEUP,f) -#define ACPI_MADT17_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_OEM_DATA,f) +#define ACPI_MADT17_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_CORE_PIC,f) +#define ACPI_MADT18_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LIO_PIC,f) +#define ACPI_MADT19_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_HT_PIC,f) +#define ACPI_MADT20_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_EIO_PIC,f) +#define ACPI_MADT21_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_MSI_PIC,f) +#define ACPI_MADT22_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_BIO_PIC,f) +#define ACPI_MADT23_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_LPC_PIC,f) +#define ACPI_MADT128_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MADT_OEM_DATA,f) #define ACPI_MADTH_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_SUBTABLE_HEADER,f) #define ACPI_MCFG0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MCFG_ALLOCATION,f) #define ACPI_MPAM0_OFFSET(f) (UINT16) ACPI_OFFSET (ACPI_MPAM_MSC_NODE,f) |