From: "Andreas Färber" <afaerber@suse.de>
To: qemu-devel@nongnu.org
Cc: "Andreas Färber" <afaerber@suse.de>
Subject: [Qemu-devel] [PULL 22/58] arm_gic: Extract headers hw/intc/arm_gic{, _common}.h
Date: Tue, 8 Oct 2013 19:44:20 +0200 [thread overview]
Message-ID: <1381254296-3203-23-git-send-email-afaerber@suse.de> (raw)
In-Reply-To: <1381254296-3203-1-git-send-email-afaerber@suse.de>
Rename NCPU to GIC_NCPU and move GICState away from gic_internal.h.
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Andreas Färber <afaerber@suse.de>
---
hw/intc/arm_gic_common.c | 18 ++++----
hw/intc/gic_internal.h | 80 +---------------------------------
include/hw/intc/arm_gic.h | 42 ++++++++++++++++++
include/hw/intc/arm_gic_common.h | 92 ++++++++++++++++++++++++++++++++++++++++
4 files changed, 145 insertions(+), 87 deletions(-)
create mode 100644 include/hw/intc/arm_gic.h
create mode 100644 include/hw/intc/arm_gic_common.h
diff --git a/hw/intc/arm_gic_common.c b/hw/intc/arm_gic_common.c
index 709b5c2..c765850 100644
--- a/hw/intc/arm_gic_common.c
+++ b/hw/intc/arm_gic_common.c
@@ -64,17 +64,17 @@ static const VMStateDescription vmstate_gic = {
.post_load = gic_post_load,
.fields = (VMStateField[]) {
VMSTATE_BOOL(enabled, GICState),
- VMSTATE_BOOL_ARRAY(cpu_enabled, GICState, NCPU),
+ VMSTATE_BOOL_ARRAY(cpu_enabled, GICState, GIC_NCPU),
VMSTATE_STRUCT_ARRAY(irq_state, GICState, GIC_MAXIRQ, 1,
vmstate_gic_irq_state, gic_irq_state),
VMSTATE_UINT8_ARRAY(irq_target, GICState, GIC_MAXIRQ),
- VMSTATE_UINT8_2DARRAY(priority1, GICState, GIC_INTERNAL, NCPU),
+ VMSTATE_UINT8_2DARRAY(priority1, GICState, GIC_INTERNAL, GIC_NCPU),
VMSTATE_UINT8_ARRAY(priority2, GICState, GIC_MAXIRQ - GIC_INTERNAL),
- VMSTATE_UINT16_2DARRAY(last_active, GICState, GIC_MAXIRQ, NCPU),
- VMSTATE_UINT16_ARRAY(priority_mask, GICState, NCPU),
- VMSTATE_UINT16_ARRAY(running_irq, GICState, NCPU),
- VMSTATE_UINT16_ARRAY(running_priority, GICState, NCPU),
- VMSTATE_UINT16_ARRAY(current_pending, GICState, NCPU),
+ VMSTATE_UINT16_2DARRAY(last_active, GICState, GIC_MAXIRQ, GIC_NCPU),
+ VMSTATE_UINT16_ARRAY(priority_mask, GICState, GIC_NCPU),
+ VMSTATE_UINT16_ARRAY(running_irq, GICState, GIC_NCPU),
+ VMSTATE_UINT16_ARRAY(running_priority, GICState, GIC_NCPU),
+ VMSTATE_UINT16_ARRAY(current_pending, GICState, GIC_NCPU),
VMSTATE_END_OF_LIST()
}
};
@@ -84,9 +84,9 @@ static void arm_gic_common_realize(DeviceState *dev, Error **errp)
GICState *s = ARM_GIC_COMMON(dev);
int num_irq = s->num_irq;
- if (s->num_cpu > NCPU) {
+ if (s->num_cpu > GIC_NCPU) {
error_setg(errp, "requested %u CPUs exceeds GIC maximum %d",
- s->num_cpu, NCPU);
+ s->num_cpu, GIC_NCPU);
return;
}
s->num_irq += GIC_BASE_IRQ;
diff --git a/hw/intc/gic_internal.h b/hw/intc/gic_internal.h
index 1426437..3989fd1 100644
--- a/hw/intc/gic_internal.h
+++ b/hw/intc/gic_internal.h
@@ -21,16 +21,9 @@
#ifndef QEMU_ARM_GIC_INTERNAL_H
#define QEMU_ARM_GIC_INTERNAL_H
-#include "hw/sysbus.h"
+#include "hw/intc/arm_gic.h"
-/* Maximum number of possible interrupts, determined by the GIC architecture */
-#define GIC_MAXIRQ 1020
-/* First 32 are private to each CPU (SGIs and PPIs). */
-#define GIC_INTERNAL 32
-/* Maximum number of possible CPU interfaces, determined by GIC architecture */
-#define NCPU 8
-
-#define ALL_CPU_MASK ((unsigned)(((1 << NCPU) - 1)))
+#define ALL_CPU_MASK ((unsigned)(((1 << GIC_NCPU) - 1)))
/* The NVIC has 16 internal vectors. However these are not exposed
through the normal GIC interface. */
@@ -59,48 +52,6 @@
s->priority2[(irq) - GIC_INTERNAL])
#define GIC_TARGET(irq) s->irq_target[irq]
-typedef struct gic_irq_state {
- /* The enable bits are only banked for per-cpu interrupts. */
- uint8_t enabled;
- uint8_t pending;
- uint8_t active;
- uint8_t level;
- bool model; /* 0 = N:N, 1 = 1:N */
- bool trigger; /* nonzero = edge triggered. */
-} gic_irq_state;
-
-typedef struct GICState {
- /*< private >*/
- SysBusDevice parent_obj;
- /*< public >*/
-
- qemu_irq parent_irq[NCPU];
- bool enabled;
- bool cpu_enabled[NCPU];
-
- gic_irq_state irq_state[GIC_MAXIRQ];
- uint8_t irq_target[GIC_MAXIRQ];
- uint8_t priority1[GIC_INTERNAL][NCPU];
- uint8_t priority2[GIC_MAXIRQ - GIC_INTERNAL];
- uint16_t last_active[GIC_MAXIRQ][NCPU];
-
- uint16_t priority_mask[NCPU];
- uint16_t running_irq[NCPU];
- uint16_t running_priority[NCPU];
- uint16_t current_pending[NCPU];
-
- uint32_t num_cpu;
-
- MemoryRegion iomem; /* Distributor */
- /* This is just so we can have an opaque pointer which identifies
- * both this GIC and which CPU interface we should be accessing.
- */
- struct GICState *backref[NCPU];
- MemoryRegion cpuiomem[NCPU+1]; /* CPU interfaces */
- uint32_t num_irq;
- uint32_t revision;
-} GICState;
-
/* The special cases for the revision property: */
#define REV_11MPCORE 0
#define REV_NVIC 0xffffffff
@@ -111,31 +62,4 @@ void gic_complete_irq(GICState *s, int cpu, int irq);
void gic_update(GICState *s);
void gic_init_irqs_and_distributor(GICState *s, int num_irq);
-#define TYPE_ARM_GIC_COMMON "arm_gic_common"
-#define ARM_GIC_COMMON(obj) \
- OBJECT_CHECK(GICState, (obj), TYPE_ARM_GIC_COMMON)
-#define ARM_GIC_COMMON_CLASS(klass) \
- OBJECT_CLASS_CHECK(ARMGICCommonClass, (klass), TYPE_ARM_GIC_COMMON)
-#define ARM_GIC_COMMON_GET_CLASS(obj) \
- OBJECT_GET_CLASS(ARMGICCommonClass, (obj), TYPE_ARM_GIC_COMMON)
-
-typedef struct ARMGICCommonClass {
- SysBusDeviceClass parent_class;
- void (*pre_save)(GICState *s);
- void (*post_load)(GICState *s);
-} ARMGICCommonClass;
-
-#define TYPE_ARM_GIC "arm_gic"
-#define ARM_GIC(obj) \
- OBJECT_CHECK(GICState, (obj), TYPE_ARM_GIC)
-#define ARM_GIC_CLASS(klass) \
- OBJECT_CLASS_CHECK(ARMGICClass, (klass), TYPE_ARM_GIC)
-#define ARM_GIC_GET_CLASS(obj) \
- OBJECT_GET_CLASS(ARMGICClass, (obj), TYPE_ARM_GIC)
-
-typedef struct ARMGICClass {
- ARMGICCommonClass parent_class;
- DeviceRealize parent_realize;
-} ARMGICClass;
-
#endif /* !QEMU_ARM_GIC_INTERNAL_H */
diff --git a/include/hw/intc/arm_gic.h b/include/hw/intc/arm_gic.h
new file mode 100644
index 0000000..0971e37
--- /dev/null
+++ b/include/hw/intc/arm_gic.h
@@ -0,0 +1,42 @@
+/*
+ * ARM GIC support
+ *
+ * Copyright (c) 2012 Linaro Limited
+ * Written by Peter Maydell
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef HW_ARM_GIC_H
+#define HW_ARM_GIC_H
+
+#include "arm_gic_common.h"
+
+#define TYPE_ARM_GIC "arm_gic"
+#define ARM_GIC(obj) \
+ OBJECT_CHECK(GICState, (obj), TYPE_ARM_GIC)
+#define ARM_GIC_CLASS(klass) \
+ OBJECT_CLASS_CHECK(ARMGICClass, (klass), TYPE_ARM_GIC)
+#define ARM_GIC_GET_CLASS(obj) \
+ OBJECT_GET_CLASS(ARMGICClass, (obj), TYPE_ARM_GIC)
+
+typedef struct ARMGICClass {
+ /*< private >*/
+ ARMGICCommonClass parent_class;
+ /*< public >*/
+
+ DeviceRealize parent_realize;
+} ARMGICClass;
+
+#endif
diff --git a/include/hw/intc/arm_gic_common.h b/include/hw/intc/arm_gic_common.h
new file mode 100644
index 0000000..4f381bd
--- /dev/null
+++ b/include/hw/intc/arm_gic_common.h
@@ -0,0 +1,92 @@
+/*
+ * ARM GIC support
+ *
+ * Copyright (c) 2012 Linaro Limited
+ * Written by Peter Maydell
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef HW_ARM_GIC_COMMON_H
+#define HW_ARM_GIC_COMMON_H
+
+#include "hw/sysbus.h"
+
+/* Maximum number of possible interrupts, determined by the GIC architecture */
+#define GIC_MAXIRQ 1020
+/* First 32 are private to each CPU (SGIs and PPIs). */
+#define GIC_INTERNAL 32
+/* Maximum number of possible CPU interfaces, determined by GIC architecture */
+#define GIC_NCPU 8
+
+typedef struct gic_irq_state {
+ /* The enable bits are only banked for per-cpu interrupts. */
+ uint8_t enabled;
+ uint8_t pending;
+ uint8_t active;
+ uint8_t level;
+ bool model; /* 0 = N:N, 1 = 1:N */
+ bool trigger; /* nonzero = edge triggered. */
+} gic_irq_state;
+
+typedef struct GICState {
+ /*< private >*/
+ SysBusDevice parent_obj;
+ /*< public >*/
+
+ qemu_irq parent_irq[GIC_NCPU];
+ bool enabled;
+ bool cpu_enabled[GIC_NCPU];
+
+ gic_irq_state irq_state[GIC_MAXIRQ];
+ uint8_t irq_target[GIC_MAXIRQ];
+ uint8_t priority1[GIC_INTERNAL][GIC_NCPU];
+ uint8_t priority2[GIC_MAXIRQ - GIC_INTERNAL];
+ uint16_t last_active[GIC_MAXIRQ][GIC_NCPU];
+
+ uint16_t priority_mask[GIC_NCPU];
+ uint16_t running_irq[GIC_NCPU];
+ uint16_t running_priority[GIC_NCPU];
+ uint16_t current_pending[GIC_NCPU];
+
+ uint32_t num_cpu;
+
+ MemoryRegion iomem; /* Distributor */
+ /* This is just so we can have an opaque pointer which identifies
+ * both this GIC and which CPU interface we should be accessing.
+ */
+ struct GICState *backref[GIC_NCPU];
+ MemoryRegion cpuiomem[GIC_NCPU + 1]; /* CPU interfaces */
+ uint32_t num_irq;
+ uint32_t revision;
+} GICState;
+
+#define TYPE_ARM_GIC_COMMON "arm_gic_common"
+#define ARM_GIC_COMMON(obj) \
+ OBJECT_CHECK(GICState, (obj), TYPE_ARM_GIC_COMMON)
+#define ARM_GIC_COMMON_CLASS(klass) \
+ OBJECT_CLASS_CHECK(ARMGICCommonClass, (klass), TYPE_ARM_GIC_COMMON)
+#define ARM_GIC_COMMON_GET_CLASS(obj) \
+ OBJECT_GET_CLASS(ARMGICCommonClass, (obj), TYPE_ARM_GIC_COMMON)
+
+typedef struct ARMGICCommonClass {
+ /*< private >*/
+ SysBusDeviceClass parent_class;
+ /*< public >*/
+
+ void (*pre_save)(GICState *s);
+ void (*post_load)(GICState *s);
+} ARMGICCommonClass;
+
+#endif
--
1.8.1.4
next prev parent reply other threads:[~2013-10-08 18:04 UTC|newest]
Thread overview: 63+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-08 17:43 [Qemu-devel] [PULL 00/58] QOM devices patch queue 2013-10-08 Andreas Färber
2013-10-08 17:43 ` [Qemu-devel] [PULL 01/58] hw/arm/boot: Make user not specifying a kernel not an error Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 02/58] hw/arm: Tidy up conditional calls to arm_load_kernel() Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 03/58] mips_mipssim: Silence BIOS loading warning for qtest Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 04/58] puv3: Turn puv3_load_kernel() into a no-op for qtest without -kernel Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 05/58] mainstone: Don't enforce use of -pflash for qtest Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 06/58] gumstix: " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 07/58] z2: " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 08/58] palm: Don't enforce loading ROM or kernel " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 09/58] omap_sx1: Don't enforce use of kernel or flash " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 10/58] exynos4_boards: Silence lack of -smp 2 warning " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 11/58] armv7m: Don't enforce use of kernel " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 12/58] axis_dev88: " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 13/58] mcf5208: " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 14/58] an5206: " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 15/58] milkymist: Suppress -kernel/-bios/-drive error " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 16/58] shix: Drop debug output Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 17/58] shix: Don't require firmware presence for qtest Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 18/58] leon3: Don't enforce use of -bios with qtest Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 19/58] qtest: Prepare QOM machine tests Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 20/58] milkymist-uart: Use Device::realize instead of SysBusDevice::init Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 21/58] a9mpcore: Split off instance_init Andreas Färber
2013-10-08 17:44 ` Andreas Färber [this message]
2013-10-08 17:44 ` [Qemu-devel] [PULL 23/58] a9mpcore: Embed GICState Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 24/58] a9scu: QOM cleanups Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 25/58] a9mpcore: Embed A9SCUState Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 26/58] arm_mptimer: Convert to QOM realize Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 27/58] a9mpcore: Embed ARMMPTimerState Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 28/58] a9mpcore: Convert to QOM realize Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 29/58] a9mpcore: Prepare for QOM embedding Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 30/58] a15mpcore: Split off instance_init Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 31/58] a15mpcore: Embed GICState Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 32/58] a15mpcore: Convert to QOM realize Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 33/58] a15mpcore: Prepare for QOM embedding Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 34/58] a9scu: Build only once Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 35/58] arm11mpcore: Fix typo in MemoryRegion name Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 36/58] arm11mpcore: Drop unused fields Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 37/58] arm11mpcore: Create container MemoryRegion in instance_init Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 38/58] arm11mpcore: Split off SCU device Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 39/58] arm11mpcore: Convert ARM11MPCorePriveState to QOM realize Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 40/58] realview_gic: Convert " Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 41/58] realview_gic: Prepare for QOM embedding Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 42/58] arm11mpcore: Convert mpcore_rirq_state to QOM realize Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 43/58] arm11mpcore: Prepare for QOM embedding Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 44/58] arm11mpcore: Split off RealView MPCore Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 45/58] qdev-monitor: Clean up qdev_device_add() variable naming Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 46/58] qdev-monitor: Fix crash when device_add is called with abstract driver Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 47/58] qdev-monitor: Unref device when device_add fails Andreas Färber
2013-11-18 12:29 ` Amos Kong
2013-11-18 14:35 ` Andreas Färber
2013-11-19 8:31 ` Amos Kong
2013-11-19 10:25 ` Paolo Bonzini
2013-10-08 17:44 ` [Qemu-devel] [PULL 48/58] qdev: Drop misleading qdev_free() function Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 49/58] qdev-monitor: Avoid qdev as variable name Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 50/58] qdev-monitor: Inline qdev_init() for device_add Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 51/58] qom: Include error.h directly in object.h Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 52/58] qom: Clean up struct Error references Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 53/58] qom: Add pointer to int property helpers Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 54/58] pxa: Fix typo "dettach" Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 55/58] pcmcia: QOM'ify PCMCIACardState and MicroDriveState Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 56/58] microdrive: Coding Style cleanups Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 57/58] ide: Drop ide_init2_with_non_qdev_drives() Andreas Färber
2013-10-08 17:44 ` [Qemu-devel] [PULL 58/58] pcmcia/pxa2xx: QOM'ify PXA2xxPCMCIAState Andreas Färber
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1381254296-3203-23-git-send-email-afaerber@suse.de \
--to=afaerber@suse.de \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).