On 3/3/23 03:26, Haitao Shan wrote:
The aehd-i8259 device type represents the AEHD in kernel PICs.
The irqchips should be always in kernel when AEHD is used.
Signed-off-by: Haitao Shan <hs...@google.com>
---
hw/i386/aehd/i8259.c | 165 +++++++++++++++++++++++++++++++++++++++
hw/i386/aehd/meson.build | 1 +
hw/i386/pc.c | 2 +
include/hw/intc/i8259.h | 1 +
4 files changed, 169 insertions(+)
create mode 100644 hw/i386/aehd/i8259.c
+static void aehd_pic_reset(DeviceState *dev)
+{
+ PICCommonState *s = PIC_COMMON(dev);
+
+ s->elcr = 0;
+ pic_reset_common(s);
+
+ aehd_pic_put(s);
+}
+
+static void aehd_pic_set_irq(void *opaque, int irq, int level)
+{
+ pic_stat_update_irq(irq, level);
+ aehd_set_irq(aehd_state, irq, level);
+}
+
+static void aehd_pic_realize(DeviceState *dev, Error **errp)
+{
+ PICCommonState *s = PIC_COMMON(dev);
+ AEHDPICClass *kpc = AEHD_PIC_GET_CLASS(dev);
+
+ memory_region_init_io(&s->base_io, OBJECT(dev), NULL, NULL, "aehd-pic", 2);
+ memory_region_init_io(&s->elcr_io, OBJECT(dev), NULL, NULL, "aehd-elcr",
1);
+
+
+ kpc->parent_realize(dev, errp);
+}
Again, this should be drastically simplified by adding a some fields &
handlers to the abstract TYPE_INKERNEL_IOAPIC class:
struct InKernelAPICCommonClass {
APICCommonClass parent_class;
void (*pic_put)(PICCommonState *s)
...
};
Eventually this could even belong to APICCommonClass, but I haven't
checked in detail.