[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 14/24] sysbus: Use TYPE_DEVICE GPIO functionality
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PULL 14/24] sysbus: Use TYPE_DEVICE GPIO functionality |
Date: |
Thu, 23 Oct 2014 15:34:02 +0200 |
From: Peter Crosthwaite <address@hidden>
Re-implement the Sysbus GPIOs to use the existing TYPE_DEVICE
GPIO named framework. A constant string name is chosen to avoid
conflicts with existing unnamed GPIOs.
This unifies GPIOs are IRQs for sysbus devices and allows removal
of all Sysbus state for GPIOs.
Any existing and future-added functionality for GPIOs is now
also available for sysbus IRQs.
Reviewed-by: Alexander Graf <address@hidden>
Signed-off-by: Peter Crosthwaite <address@hidden>
Signed-off-by: Paolo Bonzini <address@hidden>
---
hw/core/sysbus.c | 20 +++-----------------
include/hw/sysbus.h | 7 +++----
2 files changed, 6 insertions(+), 21 deletions(-)
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index 414e2a1..e55c3c1 100644
--- a/hw/core/sysbus.c
+++ b/hw/core/sysbus.c
@@ -41,11 +41,7 @@ static const TypeInfo system_bus_info = {
void sysbus_connect_irq(SysBusDevice *dev, int n, qemu_irq irq)
{
- assert(n >= 0 && n < dev->num_irq);
- dev->irqs[n] = NULL;
- if (dev->irqp[n]) {
- *dev->irqp[n] = irq;
- }
+ qdev_connect_gpio_out_named(DEVICE(dev), SYSBUS_DEVICE_GPIO_IRQ, n, irq);
}
static void sysbus_mmio_map_common(SysBusDevice *dev, int n, hwaddr addr,
@@ -89,22 +85,13 @@ void sysbus_mmio_map_overlap(SysBusDevice *dev, int n,
hwaddr addr,
/* Request an IRQ source. The actual IRQ object may be populated later. */
void sysbus_init_irq(SysBusDevice *dev, qemu_irq *p)
{
- int n;
-
- assert(dev->num_irq < QDEV_MAX_IRQ);
- n = dev->num_irq++;
- dev->irqp[n] = p;
+ qdev_init_gpio_out_named(DEVICE(dev), p, SYSBUS_DEVICE_GPIO_IRQ, 1);
}
/* Pass IRQs from a target device. */
void sysbus_pass_irq(SysBusDevice *dev, SysBusDevice *target)
{
- int i;
- assert(dev->num_irq == 0);
- dev->num_irq = target->num_irq;
- for (i = 0; i < dev->num_irq; i++) {
- dev->irqp[i] = target->irqp[i];
- }
+ qdev_pass_gpios(DEVICE(target), DEVICE(dev), SYSBUS_DEVICE_GPIO_IRQ);
}
void sysbus_init_mmio(SysBusDevice *dev, MemoryRegion *memory)
@@ -210,7 +197,6 @@ static void sysbus_dev_print(Monitor *mon, DeviceState
*dev, int indent)
hwaddr size;
int i;
- monitor_printf(mon, "%*sirq %d\n", indent, "", s->num_irq);
for (i = 0; i < s->num_mmio; i++) {
size = memory_region_size(s->mmio[i].memory);
monitor_printf(mon, "%*smmio " TARGET_FMT_plx "/" TARGET_FMT_plx "\n",
diff --git a/include/hw/sysbus.h b/include/hw/sysbus.h
index 0bb91a8..9fb1782 100644
--- a/include/hw/sysbus.h
+++ b/include/hw/sysbus.h
@@ -8,7 +8,6 @@
#define QDEV_MAX_MMIO 32
#define QDEV_MAX_PIO 32
-#define QDEV_MAX_IRQ 512
#define TYPE_SYSTEM_BUS "System"
#define SYSTEM_BUS(obj) OBJECT_CHECK(IDEBus, (obj), TYPE_IDE_BUS)
@@ -33,6 +32,9 @@ typedef struct SysBusDevice SysBusDevice;
* SysBusDeviceClass is not overriding #DeviceClass.realize, so derived
* classes overriding it are not required to invoke its implementation.
*/
+
+#define SYSBUS_DEVICE_GPIO_IRQ "sysbus-irq"
+
typedef struct SysBusDeviceClass {
/*< private >*/
DeviceClass parent_class;
@@ -46,9 +48,6 @@ struct SysBusDevice {
DeviceState parent_obj;
/*< public >*/
- int num_irq;
- qemu_irq irqs[QDEV_MAX_IRQ];
- qemu_irq *irqp[QDEV_MAX_IRQ];
int num_mmio;
struct {
hwaddr addr;
--
1.8.3.1
- [Qemu-devel] [PULL 05/24] qom: Allow clearing of a Link property, (continued)
- [Qemu-devel] [PULL 05/24] qom: Allow clearing of a Link property, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 07/24] qdev: gpio: Re-implement qdev_connect_gpio QOM style, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 03/24] virtio-scsi: dataplane: fail setup gracefully, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 08/24] qdev: gpio: Add API for intercepting a GPIO, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 09/24] qtest/irq: Rework IRQ interception, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 10/24] irq: Remove qemu_irq_intercept_out, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 04/24] virtio-scsi: dataplane: stop trying on notifier error, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 11/24] qdev: gpio: delete NamedGPIOList::out, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 12/24] qdev: gpio: Remove qdev_init_gpio_out x1 restriction, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 13/24] qdev: gpio: Define qdev_pass_gpios(), Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 14/24] sysbus: Use TYPE_DEVICE GPIO functionality,
Paolo Bonzini <=
- [Qemu-devel] [PULL 16/24] MAINTAINERS: grab more files from Anthony's pile, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 17/24] MAINTAINERS: add Samuel Thibault as usb-serial.c and baum.c maintainer, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 18/24] MAINTAINERS: add myself for X86, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 19/24] MAINTAINERS: Add more TCG files, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 20/24] MAINTAINERS: add some tests directories, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 15/24] target-i386: warns users when CPU threads>1 for non-Intel CPUs, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 22/24] qtest: fix qtest log fd should be initialized before qtest chardev, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 21/24] MAINTAINERS: avoid M entries that point to mailing lists, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 24/24] get_maintainer.pl: restrict cases where it falls back to --git, Paolo Bonzini, 2014/10/23
- [Qemu-devel] [PULL 23/24] get_maintainer.pl: move git loop under "if ($email) {", Paolo Bonzini, 2014/10/23