Message ID | 20211013212132.31519-6-mark.cave-ayland@ilande.co.uk |
---|---|
State | New |
Headers | show |
Series | q800: GLUE updates for A/UX mode | expand |
Le 13/10/2021 à 23:21, Mark Cave-Ayland a écrit : > This enables the GLUE logic to change its CPU level IRQ routing depending upon > whether the hardware has been configured for A/UX mode. > > Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> > --- > hw/m68k/q800.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c > index 81c335bf16..0093872d89 100644 > --- a/hw/m68k/q800.c > +++ b/hw/m68k/q800.c > @@ -100,6 +100,7 @@ struct GLUEState { > SysBusDevice parent_obj; > M68kCPU *cpu; > uint8_t ipr; > + uint8_t auxmode; > }; > > #define GLUE_IRQ_IN_VIA1 0 > @@ -145,11 +146,19 @@ static void GLUE_set_irq(void *opaque, int irq, int level) > m68k_set_irq_level(s->cpu, 0, 0); > } > > +static void glue_auxmode_set_irq(void *opaque, int irq, int level) > +{ > + GLUEState *s = GLUE(opaque); > + > + s->auxmode = level; > +} > + > static void glue_reset(DeviceState *dev) > { > GLUEState *s = GLUE(dev); > > s->ipr = 0; > + s->auxmode = 0; > } > > static const VMStateDescription vmstate_glue = { > @@ -158,6 +167,7 @@ static const VMStateDescription vmstate_glue = { > .minimum_version_id = 0, > .fields = (VMStateField[]) { > VMSTATE_UINT8(ipr, GLUEState), > + VMSTATE_UINT8(auxmode, GLUEState), > VMSTATE_END_OF_LIST(), > }, > }; > @@ -178,6 +188,7 @@ static void glue_init(Object *obj) > DeviceState *dev = DEVICE(obj); > > qdev_init_gpio_in(dev, GLUE_set_irq, 8); > + qdev_init_gpio_in_named(dev, glue_auxmode_set_irq, "auxmode", 1); > } > > static void glue_class_init(ObjectClass *klass, void *data) > @@ -308,6 +319,9 @@ static void q800_init(MachineState *machine) > sysbus_realize_and_unref(sysbus, &error_fatal); > sysbus_mmio_map(sysbus, 1, VIA_BASE); > sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(glue, GLUE_IRQ_IN_VIA1)); > + /* A/UX mode */ > + qdev_connect_gpio_out(via1_dev, 0, > + qdev_get_gpio_in_named(glue, "auxmode", 0)); > > adb_bus = qdev_get_child_bus(via1_dev, "adb.0"); > dev = qdev_new(TYPE_ADB_KEYBOARD); > Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Le 13/10/2021 à 23:21, Mark Cave-Ayland a écrit : > This enables the GLUE logic to change its CPU level IRQ routing depending upon > whether the hardware has been configured for A/UX mode. > > Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> > --- > hw/m68k/q800.c | 14 ++++++++++++++ > 1 file changed, 14 insertions(+) > > diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c > index 81c335bf16..0093872d89 100644 > --- a/hw/m68k/q800.c > +++ b/hw/m68k/q800.c > @@ -100,6 +100,7 @@ struct GLUEState { > SysBusDevice parent_obj; > M68kCPU *cpu; > uint8_t ipr; > + uint8_t auxmode; > }; > > #define GLUE_IRQ_IN_VIA1 0 > @@ -145,11 +146,19 @@ static void GLUE_set_irq(void *opaque, int irq, int level) > m68k_set_irq_level(s->cpu, 0, 0); > } > > +static void glue_auxmode_set_irq(void *opaque, int irq, int level) > +{ > + GLUEState *s = GLUE(opaque); > + > + s->auxmode = level; > +} > + > static void glue_reset(DeviceState *dev) > { > GLUEState *s = GLUE(dev); > > s->ipr = 0; > + s->auxmode = 0; > } > > static const VMStateDescription vmstate_glue = { > @@ -158,6 +167,7 @@ static const VMStateDescription vmstate_glue = { > .minimum_version_id = 0, > .fields = (VMStateField[]) { > VMSTATE_UINT8(ipr, GLUEState), > + VMSTATE_UINT8(auxmode, GLUEState), > VMSTATE_END_OF_LIST(), > }, > }; > @@ -178,6 +188,7 @@ static void glue_init(Object *obj) > DeviceState *dev = DEVICE(obj); > > qdev_init_gpio_in(dev, GLUE_set_irq, 8); > + qdev_init_gpio_in_named(dev, glue_auxmode_set_irq, "auxmode", 1); > } > > static void glue_class_init(ObjectClass *klass, void *data) > @@ -308,6 +319,9 @@ static void q800_init(MachineState *machine) > sysbus_realize_and_unref(sysbus, &error_fatal); > sysbus_mmio_map(sysbus, 1, VIA_BASE); > sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(glue, GLUE_IRQ_IN_VIA1)); > + /* A/UX mode */ > + qdev_connect_gpio_out(via1_dev, 0, > + qdev_get_gpio_in_named(glue, "auxmode", 0)); > > adb_bus = qdev_get_child_bus(via1_dev, "adb.0"); > dev = qdev_new(TYPE_ADB_KEYBOARD); > Reviewed-by: Laurent Vivier <laurent@vivier.eu>
diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c index 81c335bf16..0093872d89 100644 --- a/hw/m68k/q800.c +++ b/hw/m68k/q800.c @@ -100,6 +100,7 @@ struct GLUEState { SysBusDevice parent_obj; M68kCPU *cpu; uint8_t ipr; + uint8_t auxmode; }; #define GLUE_IRQ_IN_VIA1 0 @@ -145,11 +146,19 @@ static void GLUE_set_irq(void *opaque, int irq, int level) m68k_set_irq_level(s->cpu, 0, 0); } +static void glue_auxmode_set_irq(void *opaque, int irq, int level) +{ + GLUEState *s = GLUE(opaque); + + s->auxmode = level; +} + static void glue_reset(DeviceState *dev) { GLUEState *s = GLUE(dev); s->ipr = 0; + s->auxmode = 0; } static const VMStateDescription vmstate_glue = { @@ -158,6 +167,7 @@ static const VMStateDescription vmstate_glue = { .minimum_version_id = 0, .fields = (VMStateField[]) { VMSTATE_UINT8(ipr, GLUEState), + VMSTATE_UINT8(auxmode, GLUEState), VMSTATE_END_OF_LIST(), }, }; @@ -178,6 +188,7 @@ static void glue_init(Object *obj) DeviceState *dev = DEVICE(obj); qdev_init_gpio_in(dev, GLUE_set_irq, 8); + qdev_init_gpio_in_named(dev, glue_auxmode_set_irq, "auxmode", 1); } static void glue_class_init(ObjectClass *klass, void *data) @@ -308,6 +319,9 @@ static void q800_init(MachineState *machine) sysbus_realize_and_unref(sysbus, &error_fatal); sysbus_mmio_map(sysbus, 1, VIA_BASE); sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(glue, GLUE_IRQ_IN_VIA1)); + /* A/UX mode */ + qdev_connect_gpio_out(via1_dev, 0, + qdev_get_gpio_in_named(glue, "auxmode", 0)); adb_bus = qdev_get_child_bus(via1_dev, "adb.0"); dev = qdev_new(TYPE_ADB_KEYBOARD);
This enables the GLUE logic to change its CPU level IRQ routing depending upon whether the hardware has been configured for A/UX mode. Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> --- hw/m68k/q800.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+)