[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v1 16/16] sysbus: Use TYPE_DEVICE GPIO functionality
From: |
Peter Crosthwaite |
Subject: |
[Qemu-devel] [PATCH v1 16/16] sysbus: Use TYPE_DEVICE GPIO functionality |
Date: |
Sun, 3 Aug 2014 19:00:16 -0700 |
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.
Signed-off-by: Peter Crosthwaite <address@hidden>
---
Changed since v1:
Named each IRQ individually.
hw/core/sysbus.c | 20 +++-----------------
include/hw/sysbus.h | 6 +++---
2 files changed, 6 insertions(+), 20 deletions(-)
diff --git a/hw/core/sysbus.c b/hw/core/sysbus.c
index f4e760d..192a729 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 f5aaa05..a0baefc 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;
@@ -47,8 +49,6 @@ struct SysBusDevice {
/*< public >*/
int num_irq;
- qemu_irq irqs[QDEV_MAX_IRQ];
- qemu_irq *irqp[QDEV_MAX_IRQ];
int num_mmio;
struct {
hwaddr addr;
--
2.0.1.1.gfbfc394
- Re: [Qemu-devel] [PATCH v1 13/16] qdev: gpio: Define qdev_pass_gpios(), (continued)
[Qemu-devel] [PATCH v1 14/16] ssi: xilinx_spi: Initialise CS GPIOs as NULL, Peter Crosthwaite, 2014/08/03
[Qemu-devel] [PATCH v1 15/16] ppc: convert g_new(qemu_irq usages to g_new0, Peter Crosthwaite, 2014/08/03
[Qemu-devel] [PATCH v1 16/16] sysbus: Use TYPE_DEVICE GPIO functionality,
Peter Crosthwaite <=
Re: [Qemu-devel] [PATCH v1 00/16] GPIO/IRQ QOMification: Phase 2 - Getting rid of SYSBUS IRQs, Peter Crosthwaite, 2014/08/12
Re: [Qemu-devel] [PATCH v1 00/16] GPIO/IRQ QOMification: Phase 2 - Getting rid of SYSBUS IRQs, Alexander Graf, 2014/08/12