summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJianmin Lv <lvjianmin@loongson.cn>2023-03-28 09:10:59 +0800
committerJianmin Lv <lvjianmin@loongson.cn>2023-03-28 09:53:12 +0800
commita1cb7b6af77ec30668634cdcaa0eb73b8f1dc3e2 (patch)
treee026c6249b22ee3ed1880696a5f17078a662b9e5
parent41b40f8412f9587cccac88f4520cb6ede512e5ae (diff)
downloadacpica-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.c37
-rw-r--r--source/common/dmtbinfo2.c85
-rw-r--r--source/compiler/dttable2.c37
-rw-r--r--source/compiler/dttemplate.h23
-rw-r--r--source/include/acdisasm.h7
-rw-r--r--source/include/actbinfo.h9
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)