[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 12/12] mac_via: add qdev gpios for nubus slot interrupts to VIA2
From: |
Laurent Vivier |
Subject: |
[PULL 12/12] mac_via: add qdev gpios for nubus slot interrupts to VIA2 |
Date: |
Wed, 8 Sep 2021 17:35:29 +0200 |
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
These will soon be required to enable nubus devices to support interrupts.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Message-Id: <20210830102447.10806-13-mark.cave-ayland@ilande.co.uk>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
include/hw/misc/mac_via.h | 10 ++++++++++
hw/misc/mac_via.c | 23 +++++++++++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h
index 5168e3ce665c..4506abe5d0e3 100644
--- a/include/hw/misc/mac_via.h
+++ b/include/hw/misc/mac_via.h
@@ -93,6 +93,16 @@ struct MOS6522Q800VIA1State {
#define VIA2_IRQ_SCSI (1 << VIA2_IRQ_UNUSED_BIT)
#define VIA2_IRQ_ASC (1 << VIA2_IRQ_ASC_BIT)
+#define VIA2_NUBUS_IRQ_NB 7
+
+#define VIA2_NUBUS_IRQ_9 0
+#define VIA2_NUBUS_IRQ_A 1
+#define VIA2_NUBUS_IRQ_B 2
+#define VIA2_NUBUS_IRQ_C 3
+#define VIA2_NUBUS_IRQ_D 4
+#define VIA2_NUBUS_IRQ_E 5
+#define VIA2_NUBUS_IRQ_INTVIDEO 6
+
#define TYPE_MOS6522_Q800_VIA2 "mos6522-q800-via2"
OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA2State, MOS6522_Q800_VIA2)
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index f093f7388e5c..d1abcd97b51d 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -1123,6 +1123,26 @@ static void mos6522_q800_via2_reset(DeviceState *dev)
ms->dirb = 0;
ms->b = 0;
+ ms->dira = 0;
+ ms->a = 0x7f;
+}
+
+static void via2_nubus_irq_request(void *opaque, int irq, int level)
+{
+ MOS6522Q800VIA2State *v2s = opaque;
+ MOS6522State *s = MOS6522(v2s);
+ MOS6522DeviceClass *mdc = MOS6522_GET_CLASS(s);
+
+ if (level) {
+ /* Port A nubus IRQ inputs are active LOW */
+ s->a &= ~(1 << irq);
+ s->ifr |= 1 << VIA2_IRQ_NUBUS_BIT;
+ } else {
+ s->a |= (1 << irq);
+ s->ifr &= ~(1 << VIA2_IRQ_NUBUS_BIT);
+ }
+
+ mdc->update_irq(s);
}
static void mos6522_q800_via2_init(Object *obj)
@@ -1135,6 +1155,9 @@ static void mos6522_q800_via2_init(Object *obj)
sysbus_init_mmio(sbd, &v2s->via_mem);
qdev_init_gpio_in(DEVICE(obj), via2_irq_request, VIA2_IRQ_NB);
+
+ qdev_init_gpio_in_named(DEVICE(obj), via2_nubus_irq_request, "nubus-irq",
+ VIA2_NUBUS_IRQ_NB);
}
static const VMStateDescription vmstate_q800_via2 = {
--
2.31.1
- [PULL 00/12] Q800 patches, Laurent Vivier, 2021/09/08
- [PULL 01/12] mac_via: introduce new VMStateDescription for q800 VIA1 and VIA2, Laurent Vivier, 2021/09/08
- [PULL 02/12] mac_via: move last_b variable into q800 VIA1 VMStateDescription, Laurent Vivier, 2021/09/08
- [PULL 03/12] mac_via: move PRAM contents and block backend to MOS6522Q800VIA1State, Laurent Vivier, 2021/09/08
- [PULL 06/12] mac_via: move q800 VIA1 timer variables to q800 VIA1 VMStateDescription, Laurent Vivier, 2021/09/08
- [PULL 08/12] mac_via: move VIA1 realize logic from mac_via_realize() to mos6522_q800_via1_realize(), Laurent Vivier, 2021/09/08
- [PULL 11/12] mac_via: rename VIA2_IRQ_SLOT_BIT to VIA2_IRQ_NUBUS_BIT, Laurent Vivier, 2021/09/08
- [PULL 12/12] mac_via: add qdev gpios for nubus slot interrupts to VIA2,
Laurent Vivier <=
- [PULL 09/12] mac_via: remove mac_via device, Laurent Vivier, 2021/09/08
- [PULL 04/12] mac_via: move PRAM/RTC variables to MOS6522Q800VIA1State, Laurent Vivier, 2021/09/08
- [PULL 05/12] mac_via: move ADB variables to MOS6522Q800VIA1State, Laurent Vivier, 2021/09/08
- [PULL 10/12] mac_via: remove explicit viaN prefix from VIA IRQ gpios, Laurent Vivier, 2021/09/08
- [PULL 07/12] mac_via: move VIA1 reset logic from mac_via_reset() to mos6522_q800_via1_reset(), Laurent Vivier, 2021/09/08
- Re: [PULL 00/12] Q800 patches, Peter Maydell, 2021/09/10