diff mbox series

[11/11] hw/isa: Factor isa_bus_get_irq() out of isa_get_irq()

Message ID 20230210163744.32182-12-philmd@linaro.org
State Superseded
Headers show
Series hw/isa: More housekeeping | expand

Commit Message

Philippe Mathieu-Daudé Feb. 10, 2023, 4:37 p.m. UTC
isa_get_irq() was added in commit 3a38d437ca
("Add isa_reserve_irq()" Fri Aug 14 11:36:15 2009) as:

    a temporary interface to be used to allocate ISA IRQs for
    devices which have not yet been converted to qdev, and for
    special cases which are not suited for qdev conversions,
    such as the 'ferr'.

We still use it 14 years later, using the global 'isabus'
singleton. In order to get rid of such *temporary* interface,
extract isa_bus_get_irq() which can take any ISABus* object.

Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
---
 hw/isa/isa-bus.c     | 14 ++++++++++----
 include/hw/isa/isa.h |  8 ++++++++
 2 files changed, 18 insertions(+), 4 deletions(-)

Comments

Richard Henderson Feb. 11, 2023, 5:46 p.m. UTC | #1
On 2/10/23 06:37, Philippe Mathieu-Daudé wrote:
> isa_get_irq() was added in commit 3a38d437ca
> ("Add isa_reserve_irq()" Fri Aug 14 11:36:15 2009) as:
> 
>      a temporary interface to be used to allocate ISA IRQs for
>      devices which have not yet been converted to qdev, and for
>      special cases which are not suited for qdev conversions,
>      such as the 'ferr'.
> 
> We still use it 14 years later, using the global 'isabus'
> singleton. In order to get rid of such*temporary*  interface,
> extract isa_bus_get_irq() which can take any ISABus* object.
> 
> Signed-off-by: Philippe Mathieu-Daudé<philmd@linaro.org>
> ---
>   hw/isa/isa-bus.c     | 14 ++++++++++----
>   include/hw/isa/isa.h |  8 ++++++++
>   2 files changed, 18 insertions(+), 4 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>

r~
diff mbox series

Patch

diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c
index d12973103f..4cf26510bf 100644
--- a/hw/isa/isa-bus.c
+++ b/hw/isa/isa-bus.c
@@ -72,6 +72,13 @@  void isa_bus_register_input_irqs(ISABus *bus, qemu_irq *irqs_in)
     bus->irqs_in = irqs_in;
 }
 
+qemu_irq isa_bus_get_irq(ISABus *bus, unsigned irqnum)
+{
+    assert(irqnum < ISA_NUM_IRQS);
+    assert(bus->irqs_in);
+    return bus->irqs_in[irqnum];
+}
+
 /*
  * isa_get_irq() returns the corresponding input qemu_irq entry for the i8259.
  *
@@ -81,14 +88,13 @@  void isa_bus_register_input_irqs(ISABus *bus, qemu_irq *irqs_in)
 qemu_irq isa_get_irq(ISADevice *dev, unsigned isairq)
 {
     assert(!dev || ISA_BUS(qdev_get_parent_bus(DEVICE(dev))) == isabus);
-    assert(isairq < ISA_NUM_IRQS);
-    return isabus->irqs_in[isairq];
+    return isa_bus_get_irq(isabus, isairq);
 }
 
 void isa_connect_gpio_out(ISADevice *isadev, int gpioirq, unsigned isairq)
 {
-    qemu_irq irq = isa_get_irq(isadev, isairq);
-    qdev_connect_gpio_out(DEVICE(isadev), gpioirq, irq);
+    qemu_irq input_irq = isa_get_irq(isadev, isairq);
+    qdev_connect_gpio_out(DEVICE(isadev), gpioirq, input_irq);
 }
 
 void isa_bus_dma(ISABus *bus, IsaDma *dma8, IsaDma *dma16)
diff --git a/include/hw/isa/isa.h b/include/hw/isa/isa.h
index 0aa36d4115..ba62a2e6c8 100644
--- a/include/hw/isa/isa.h
+++ b/include/hw/isa/isa.h
@@ -76,6 +76,14 @@  ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space,
 void isa_bus_register_input_irqs(ISABus *bus, qemu_irq *irqs_in);
 void isa_bus_dma(ISABus *bus, IsaDma *dma8, IsaDma *dma16);
 IsaDma *isa_get_dma(ISABus *bus, int nchan);
+/**
+ * isa_bus_get_irq: Return input IRQ on ISA bus.
+ * @bus: the #ISABus to plug ISA devices on.
+ * @irqnum: the ISA IRQ number.
+ *
+ * Return IRQ @irqnum from the PIC associated on ISA @bus.
+ */
+qemu_irq isa_bus_get_irq(ISABus *bus, unsigned irqnum);
 ISADevice *isa_new(const char *name);
 ISADevice *isa_try_new(const char *name);
 bool isa_realize_and_unref(ISADevice *dev, ISABus *bus, Error **errp);