[RFC PATCH 1/2] acpi: update madt revisions to ACPI 6.5.next

Haibo Xu haibo1.xu at intel.com
Mon Aug 28 09:37:03 UTC 2023


Add risc-v madt subtable types which were accepted
in ACPI 6.5.next[1].

[1] https://github.com/riscv-non-isa/riscv-acpi/wiki/ACPI-ASWG-ECR-Process
---
 src/acpi/madt/madt.c        | 14 +++++++++-
 src/lib/include/fwts_acpi.h | 55 +++++++++++++++++++++++++++++++++++++
 2 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/src/acpi/madt/madt.c b/src/acpi/madt/madt.c
index 05f93ed8..2b857a08 100644
--- a/src/acpi/madt/madt.c
+++ b/src/acpi/madt/madt.c
@@ -122,7 +122,7 @@
 
 #define SUBTABLE_UNDEFINED	0x00
 #define SUBTABLE_VARIABLE	0xff
-#define NUM_SUBTABLE_TYPES	24
+#define NUM_SUBTABLE_TYPES	28
 #define MAX_IO_APIC_ID		256 /* IO APIC ID field is 1 byte */
 
 #define SBBR_ACPI_MAJOR_VERSION 6
@@ -250,6 +250,18 @@ static struct acpi_madt_subtable_lengths spec_info[] = {
 			     SUBTABLE_VARIABLE, SUBTABLE_VARIABLE,
 			     SUBTABLE_VARIABLE }
 	},
+	{ /* for ACPI 6.5.next */
+		.major_version = 6,
+		.minor_version = 5,
+		.madt_version = 6,
+		.num_types = 28,
+		.lengths = { 8, 12, 10, 8, 6, 12, 16, SUBTABLE_VARIABLE,
+			     16, 16, 12, 82, 24, 24, 16, 20, 16,
+			     SUBTABLE_VARIABLE, SUBTABLE_VARIABLE,
+			     SUBTABLE_VARIABLE, SUBTABLE_VARIABLE,
+			     SUBTABLE_VARIABLE, SUBTABLE_VARIABLE,
+			     SUBTABLE_VARIABLE, 36, 16, 36, 36 }
+	},
 	{ /* terminator */
 		.major_version = 0,
 		.minor_version = 0,
diff --git a/src/lib/include/fwts_acpi.h b/src/lib/include/fwts_acpi.h
index eb958b0e..510addb4 100644
--- a/src/lib/include/fwts_acpi.h
+++ b/src/lib/include/fwts_acpi.h
@@ -531,6 +531,10 @@ typedef enum {
 	FWTS_MADT_MSI_PIC,
 	FWTS_MADT_BIO_PIC,
 	FWTS_MADT_LPC_PIC,
+	FWTS_MADT_RINTC,
+	FWTS_MADT_IMSIC,
+	FWTS_MADT_APLIC,
+	FWTS_MADT_PLIC,
 	FWTS_MADT_RESERVED, /* does not have defined structure */
 	FWTS_MADT_OEM /* does not have defined structure */
 } fwts_acpi_madt_type;
@@ -691,6 +695,57 @@ typedef struct {
 	uint64_t	mail_box_address;
 } __attribute__ ((packed)) fwts_acpi_madt_mp_wakeup;
 
+/* Type 24, FWTS_MADT_RINTC */
+typedef struct {
+	uint8_t version;
+	uint8_t reserved;
+	uint32_t flags;
+	uint64_t hart_id;
+	uint32_t uid;
+	uint32_t ext_intc_id;
+	uint64_t imsic_addr;
+	uint32_t imsic_size;
+} __attribute__ ((packed)) fwts_acpi_madt_rintc;
+
+/* Type 25, FWTS_MADT_IMSIC */
+typedef struct {
+	uint8_t version;
+	uint8_t reserved;
+	uint32_t flags;
+	uint16_t num_ids;
+	uint16_t num_guest_ids;
+	uint8_t guest_index_bits;
+	uint8_t hart_index_bits;
+	uint8_t group_index_bits;
+	uint8_t group_index_shift;
+} __attribute__ ((packed)) fwts_acpi_madt_imsic;
+
+/* Type 26, FWTS_MADT_APLIC */
+typedef struct {
+	uint8_t version;
+	uint8_t id;
+	uint32_t flags;
+	uint8_t hw_id[8];
+	uint16_t num_idcs;
+	uint16_t num_sources;
+	uint32_t gsi_base;
+	uint64_t addr;
+	uint32_t size;
+} __attribute__ ((packed)) fwts_acpi_madt_aplic;
+
+/* Type 27, FWTS_MADT_PLIC */
+typedef struct {
+	uint8_t version;
+	uint8_t id;
+	uint8_t hw_id[8];
+	uint16_t num_irqs;
+	uint16_t max_prio;
+	uint32_t flags;
+	uint32_t size;
+	uint64_t base_addr;
+	uint32_t gsi_base;
+} __attribute__ ((packed)) fwts_acpi_madt_plic;
+
 /*
  * ACPI TCPA (Trusted Computing Platform Alliance Capabilities Table)
  *   http://www.kuro5hin.org/story/2002/10/27/16622/530,
-- 
2.34.1




More information about the fwts-devel mailing list