diff mbox

[Xen-devel,v2,09/41] arm/acpi : Add Generic Interrupt and Distributor struct

Message ID 1431893048-5214-10-git-send-email-parth.dixit@linaro.org
State New
Headers show

Commit Message

Parth Dixit May 17, 2015, 8:03 p.m. UTC
Add Generic Interrupt and Distributor (ACPI 5.0) structure.
Add new features for MADT introduced by ACPI 5.1.
Comment on the GIC ID field of the GIC structure which is replaced
by CPU Interface Number.
Add new fields: Redistributor Base Address, GICV, GICH, and MPIDR.
Add new structures for GIC MSI frame and GICR.
Add flag definition for GICC flags.

Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
Signed-off-by: Naresh Bhat <naresh.bhat@linaro.org>
Signed-off-by: Parth Dixit <parth.dixit@linaro.org>
---
 xen/include/acpi/actbl1.h | 62 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 60 insertions(+), 2 deletions(-)

Comments

Parth Dixit July 5, 2015, 1:06 p.m. UTC | #1
+shannon

On 18 May 2015 at 01:33, Parth Dixit <parth.dixit@linaro.org> wrote:
> Add Generic Interrupt and Distributor (ACPI 5.0) structure.
> Add new features for MADT introduced by ACPI 5.1.
> Comment on the GIC ID field of the GIC structure which is replaced
> by CPU Interface Number.
> Add new fields: Redistributor Base Address, GICV, GICH, and MPIDR.
> Add new structures for GIC MSI frame and GICR.
> Add flag definition for GICC flags.
>
> Signed-off-by: Tomasz Nowicki <tomasz.nowicki@linaro.org>
> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> Signed-off-by: Naresh Bhat <naresh.bhat@linaro.org>
> Signed-off-by: Parth Dixit <parth.dixit@linaro.org>
> ---
>  xen/include/acpi/actbl1.h | 62 +++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 60 insertions(+), 2 deletions(-)
>
> diff --git a/xen/include/acpi/actbl1.h b/xen/include/acpi/actbl1.h
> index 9311e3a..2d72d8a 100644
> --- a/xen/include/acpi/actbl1.h
> +++ b/xen/include/acpi/actbl1.h
> @@ -639,7 +639,11 @@ enum acpi_madt_type {
>         ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
>         ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
>         ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
> -       ACPI_MADT_TYPE_RESERVED = 11    /* 11 and greater are reserved */
> +       ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
> +       ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
> +       ACPI_MADT_TYPE_GIC_MSI_FRAME = 13,
> +       ACPI_MADT_TYPE_GIC_REDISTRIBUTOR = 14,
> +       ACPI_MADT_TYPE_RESERVED = 15    /* 15 and greater are reserved */
>  };
>
>  /*
> @@ -760,14 +764,68 @@ struct acpi_madt_local_x2apic_nmi {
>         u8 reserved[3];
>  };
>
> +/* 11: Generic Interrupt (ACPI 5.1) */
> +
> +struct acpi_madt_generic_interrupt {
> +    struct acpi_subtable_header header;
> +    u16 reserved;           /* reserved - must be zero */
> +    u32 gic_id;     /* it was renamed to cpu interface number in ACPI 5.1 */
> +    u32 uid;
> +    u32 flags;
> +    u32 parking_version;
> +    u32 performance_interrupt;
> +    u64 parked_address;
> +    u64 base_address;
> +    u64 gicv_base_address;
> +    u64 gich_base_address;
> +    u32 vgic_maintenance_interrupt;
> +    u64 redist_base_address;
> +    u64 mpidr;
> +
> +};
> +
> +/* 12: Generic Distributor (ACPI 5.0) */
> +
> +struct acpi_madt_generic_distributor {
> +    struct acpi_subtable_header header;
> +    u16 reserved;           /* reserved - must be zero */
> +    u32 gic_id;
> +    u64 base_address;
> +    u32 global_irq_base;
> +    u32 reserved2;          /* reserved - must be zero */
> +};
> +
> +/* 13: GIC MSI Frame (ACPI 5.1) */
> +
> +struct acpi_madt_gic_msi_frame {
> +    struct acpi_subtable_header header;
> +    u16 reserved;           /* reserved - must be zero */
> +    u32 gic_msi_frame_id;
> +    u64 base_address;
> +};
> +
> +/* 14: GIC Redistributor (ACPI 5.1) */
> +
> +struct acpi_madt_gic_redistributor {
> +    struct acpi_subtable_header header;
> +    u16 reserved;           /* reserved - must be zero */
> +    u64 base_address;
> +    u32 region_size;
> +};
> +
>  /*
>   * Common flags fields for MADT subtables
>   */
>
> -/* MADT Local APIC flags (lapic_flags) */
> +/* MADT Local APIC flags (lapic_flags) and GICC flags */
>
>  #define ACPI_MADT_ENABLED           (1)        /* 00: Processor is usable if set */
>
> +/* MADT GICC flags only */
> +
> +#define ACPI_MADT_PERF_INT_MODE     (1<<1)     /* 01: Performance Interrupt Mode */
> +#define ACPI_MADT_VGIC              (1<<2)     /* 02: VGIC Maintenance interrupt mode */
> +
>  /* MADT MPS INTI flags (inti_flags) */
>
>  #define ACPI_MADT_POLARITY_MASK     (3)        /* 00-01: Polarity of APIC I/O input signals */
> --
> 1.9.1
>
diff mbox

Patch

diff --git a/xen/include/acpi/actbl1.h b/xen/include/acpi/actbl1.h
index 9311e3a..2d72d8a 100644
--- a/xen/include/acpi/actbl1.h
+++ b/xen/include/acpi/actbl1.h
@@ -639,7 +639,11 @@  enum acpi_madt_type {
 	ACPI_MADT_TYPE_INTERRUPT_SOURCE = 8,
 	ACPI_MADT_TYPE_LOCAL_X2APIC = 9,
 	ACPI_MADT_TYPE_LOCAL_X2APIC_NMI = 10,
-	ACPI_MADT_TYPE_RESERVED = 11	/* 11 and greater are reserved */
+	ACPI_MADT_TYPE_GENERIC_INTERRUPT = 11,
+	ACPI_MADT_TYPE_GENERIC_DISTRIBUTOR = 12,
+	ACPI_MADT_TYPE_GIC_MSI_FRAME = 13,
+	ACPI_MADT_TYPE_GIC_REDISTRIBUTOR = 14,
+	ACPI_MADT_TYPE_RESERVED = 15    /* 15 and greater are reserved */
 };
 
 /*
@@ -760,14 +764,68 @@  struct acpi_madt_local_x2apic_nmi {
 	u8 reserved[3];
 };
 
+/* 11: Generic Interrupt (ACPI 5.1) */
+
+struct acpi_madt_generic_interrupt {
+    struct acpi_subtable_header header;
+    u16 reserved;           /* reserved - must be zero */
+    u32 gic_id;     /* it was renamed to cpu interface number in ACPI 5.1 */
+    u32 uid;
+    u32 flags;
+    u32 parking_version;
+    u32 performance_interrupt;
+    u64 parked_address;
+    u64 base_address;
+    u64 gicv_base_address;
+    u64 gich_base_address;
+    u32 vgic_maintenance_interrupt;
+    u64 redist_base_address;
+    u64 mpidr;
+
+};
+
+/* 12: Generic Distributor (ACPI 5.0) */
+
+struct acpi_madt_generic_distributor {
+    struct acpi_subtable_header header;
+    u16 reserved;           /* reserved - must be zero */
+    u32 gic_id;
+    u64 base_address;
+    u32 global_irq_base;
+    u32 reserved2;          /* reserved - must be zero */
+};
+
+/* 13: GIC MSI Frame (ACPI 5.1) */
+
+struct acpi_madt_gic_msi_frame {
+    struct acpi_subtable_header header;
+    u16 reserved;           /* reserved - must be zero */
+    u32 gic_msi_frame_id;
+    u64 base_address;
+};
+
+/* 14: GIC Redistributor (ACPI 5.1) */
+
+struct acpi_madt_gic_redistributor {
+    struct acpi_subtable_header header;
+    u16 reserved;           /* reserved - must be zero */
+    u64 base_address;
+    u32 region_size;
+};
+
 /*
  * Common flags fields for MADT subtables
  */
 
-/* MADT Local APIC flags (lapic_flags) */
+/* MADT Local APIC flags (lapic_flags) and GICC flags */
 
 #define ACPI_MADT_ENABLED           (1)	/* 00: Processor is usable if set */
 
+/* MADT GICC flags only */
+
+#define ACPI_MADT_PERF_INT_MODE     (1<<1)     /* 01: Performance Interrupt Mode */
+#define ACPI_MADT_VGIC              (1<<2)     /* 02: VGIC Maintenance interrupt mode */
+
 /* MADT MPS INTI flags (inti_flags) */
 
 #define ACPI_MADT_POLARITY_MASK     (3)	/* 00-01: Polarity of APIC I/O input signals */