All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs
@ 2021-08-30 10:24 Mark Cave-Ayland
  2021-08-30 10:24 ` [PATCH 01/12] mac_via: introduce new VMStateDescription for q800 VIA1 and VIA2 Mark Cave-Ayland
                   ` (11 more replies)
  0 siblings, 12 replies; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

This is the VIA part of the next set of patches to enable QEMU's q800 machine to
boot MacOS.

Currently there are 2 separate VIA devices which are contained within a pseudo
MAC_VIA device and the main aim of this patchset is to remove it so that the
separate VIA1 and VIA2 devices are accessed directly. The motivation for this is
two-fold: firstly there is confusing mix of MacVIAState, MOS6522Q800VIA1State
and MOS6522Q800VIA2State being passed around in mac_via.c with excessive
conversions between them, and secondly there is a mixture of GPIOs and aliasing
that only exist because of the pseudo MAC_VIA device.

Since upcoming Nubus changes will require more wiring between VIA1/VIA2 and Nubus,
managing these as separate devices helps reduce the complexity accordingly.

This is obviously another migration break for the q800 machine but for now we
don't care since there are more breaking changes in the pipeline.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>


Mark Cave-Ayland (12):
  mac_via: introduce new VMStateDescription for q800 VIA1 and VIA2
  mac_via: move last_b variable into q800 VIA1 VMStateDescription
  mac_via: move PRAM contents and block backend to MOS6522Q800VIA1State
  mac_via: move PRAM/RTC variables to MOS6522Q800VIA1State
  mac_via: move ADB variables to MOS6522Q800VIA1State
  mac_via: move q800 VIA1 timer variables to q800 VIA1
    VMStateDescription
  mac_via: move VIA1 reset logic from mac_via_reset() to
    mos6522_q800_via1_reset()
  mac_via: move VIA1 realize logic from mac_via_realize() to
    mos6522_q800_via1_realize()
  mac_via: remove mac_via device
  mac_via: remove explicit viaN prefix from VIA IRQ gpios
  mac_via: rename VIA2_IRQ_SLOT_BIT to VIA2_IRQ_NUBUS_BIT
  mac_via: add qdev gpios for nubus slot interrupts to VIA2

 hw/m68k/q800.c            |  38 +--
 hw/misc/mac_via.c         | 547 ++++++++++++++++++--------------------
 include/hw/misc/mac_via.h | 101 ++++---
 3 files changed, 328 insertions(+), 358 deletions(-)

-- 
2.20.1



^ permalink raw reply	[flat|nested] 29+ messages in thread

* [PATCH 01/12] mac_via: introduce new VMStateDescription for q800 VIA1 and VIA2
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-09-08  6:44   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 02/12] mac_via: move last_b variable into q800 VIA1 VMStateDescription Mark Cave-Ayland
                   ` (10 subsequent siblings)
  11 siblings, 1 reply; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

Move the parent mos6522 objects from vmstate_mac_via into the new VMStateDescription
structures to begin the process of splitting MacVIAState into separate VIA1 and
VIA2 devices.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/mac_via.c | 28 ++++++++++++++++++++++++----
 1 file changed, 24 insertions(+), 4 deletions(-)

diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index ff0156db76..46e65058e0 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -1083,16 +1083,12 @@ static const VMStateDescription vmstate_mac_via = {
     .post_load = mac_via_post_load,
     .fields = (VMStateField[]) {
         /* VIAs */
-        VMSTATE_STRUCT(mos6522_via1.parent_obj, MacVIAState, 0, vmstate_mos6522,
-                       MOS6522State),
         VMSTATE_UINT8(mos6522_via1.last_b, MacVIAState),
         VMSTATE_BUFFER(mos6522_via1.PRAM, MacVIAState),
         VMSTATE_TIMER_PTR(mos6522_via1.one_second_timer, MacVIAState),
         VMSTATE_INT64(mos6522_via1.next_second, MacVIAState),
         VMSTATE_TIMER_PTR(mos6522_via1.sixty_hz_timer, MacVIAState),
         VMSTATE_INT64(mos6522_via1.next_sixty_hz, MacVIAState),
-        VMSTATE_STRUCT(mos6522_via2.parent_obj, MacVIAState, 0, vmstate_mos6522,
-                       MOS6522State),
         /* RTC */
         VMSTATE_UINT32(tick_offset, MacVIAState),
         VMSTATE_UINT8(data_out, MacVIAState),
@@ -1156,11 +1152,23 @@ static void mos6522_q800_via1_init(Object *obj)
                             VIA1_IRQ_NB);
 }
 
+static const VMStateDescription vmstate_q800_via1 = {
+    .name = "q800-via1",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_STRUCT(parent_obj, MOS6522Q800VIA1State, 0, vmstate_mos6522,
+                       MOS6522State),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static void mos6522_q800_via1_class_init(ObjectClass *oc, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(oc);
 
     dc->reset = mos6522_q800_via1_reset;
+    dc->vmsd = &vmstate_q800_via1;
 }
 
 static const TypeInfo mos6522_q800_via1_type_info = {
@@ -1200,12 +1208,24 @@ static void mos6522_q800_via2_init(Object *obj)
                             VIA2_IRQ_NB);
 }
 
+static const VMStateDescription vmstate_q800_via2 = {
+    .name = "q800-via2",
+    .version_id = 0,
+    .minimum_version_id = 0,
+    .fields = (VMStateField[]) {
+        VMSTATE_STRUCT(parent_obj, MOS6522Q800VIA2State, 0, vmstate_mos6522,
+                       MOS6522State),
+        VMSTATE_END_OF_LIST()
+    }
+};
+
 static void mos6522_q800_via2_class_init(ObjectClass *oc, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(oc);
     MOS6522DeviceClass *mdc = MOS6522_CLASS(oc);
 
     dc->reset = mos6522_q800_via2_reset;
+    dc->vmsd = &vmstate_q800_via2;
     mdc->portB_write = mos6522_q800_via2_portB_write;
 }
 
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 02/12] mac_via: move last_b variable into q800 VIA1 VMStateDescription
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
  2021-08-30 10:24 ` [PATCH 01/12] mac_via: introduce new VMStateDescription for q800 VIA1 and VIA2 Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-09-08  6:44   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 03/12] mac_via: move PRAM contents and block backend to MOS6522Q800VIA1State Mark Cave-Ayland
                   ` (9 subsequent siblings)
  11 siblings, 1 reply; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

This variable is already present in MOS6522Q800VIA1State and can be moved
immediately into the q800 VIA1 VMStateDescription.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/mac_via.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index 46e65058e0..6fb0b9391d 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -1083,7 +1083,6 @@ static const VMStateDescription vmstate_mac_via = {
     .post_load = mac_via_post_load,
     .fields = (VMStateField[]) {
         /* VIAs */
-        VMSTATE_UINT8(mos6522_via1.last_b, MacVIAState),
         VMSTATE_BUFFER(mos6522_via1.PRAM, MacVIAState),
         VMSTATE_TIMER_PTR(mos6522_via1.one_second_timer, MacVIAState),
         VMSTATE_INT64(mos6522_via1.next_second, MacVIAState),
@@ -1159,6 +1158,7 @@ static const VMStateDescription vmstate_q800_via1 = {
     .fields = (VMStateField[]) {
         VMSTATE_STRUCT(parent_obj, MOS6522Q800VIA1State, 0, vmstate_mos6522,
                        MOS6522State),
+        VMSTATE_UINT8(last_b, MOS6522Q800VIA1State),
         VMSTATE_END_OF_LIST()
     }
 };
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 03/12] mac_via: move PRAM contents and block backend to MOS6522Q800VIA1State
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
  2021-08-30 10:24 ` [PATCH 01/12] mac_via: introduce new VMStateDescription for q800 VIA1 and VIA2 Mark Cave-Ayland
  2021-08-30 10:24 ` [PATCH 02/12] mac_via: move last_b variable into q800 VIA1 VMStateDescription Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-09-08  6:46   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 04/12] mac_via: move PRAM/RTC variables " Mark Cave-Ayland
                   ` (8 subsequent siblings)
  11 siblings, 1 reply; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

The PRAM contents are accessed using clock and data pins on q800 VIA1 port B
and so can be moved to MOS6522Q800VIA1State.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/mac_via.c         | 59 ++++++++++++++++++++-------------------
 include/hw/misc/mac_via.h |  7 +++--
 2 files changed, 34 insertions(+), 32 deletions(-)

diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index 6fb0b9391d..abbe99af11 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -374,11 +374,10 @@ static void via2_irq_request(void *opaque, int irq, int level)
 }
 
 
-static void pram_update(MacVIAState *m)
+static void pram_update(MOS6522Q800VIA1State *v1s)
 {
-    if (m->blk) {
-        if (blk_pwrite(m->blk, 0, m->mos6522_via1.PRAM,
-                       sizeof(m->mos6522_via1.PRAM), 0) < 0) {
+    if (v1s->blk) {
+        if (blk_pwrite(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM), 0) < 0) {
             qemu_log("pram_update: cannot write to file\n");
         }
     }
@@ -556,7 +555,7 @@ static void via1_rtc_update(MacVIAState *m)
             /* PRAM address 0x00 -> 0x13 */
             trace_via1_rtc_cmd_pram_write(m->cmd - REG_PRAM_ADDR, m->data_out);
             v1s->PRAM[m->cmd - REG_PRAM_ADDR] = m->data_out;
-            pram_update(m);
+            pram_update(v1s);
             m->cmd = REG_EMPTY;
             break;
         case REG_PRAM_SECT...REG_PRAM_SECT_LAST:
@@ -587,7 +586,7 @@ static void via1_rtc_update(MacVIAState *m)
     g_assert(REG_PRAM_SECT <= m->cmd && m->cmd <= REG_PRAM_SECT_LAST);
     sector = m->cmd - REG_PRAM_SECT;
     v1s->PRAM[sector * 32 + m->alt] = m->data_out;
-    pram_update(m);
+    pram_update(v1s);
     trace_via1_rtc_cmd_pram_sect_write(sector, m->alt, sector * 32 + m->alt,
                                        m->data_out);
     m->alt = REG_EMPTY;
@@ -965,6 +964,7 @@ static void mac_via_reset(DeviceState *dev)
 static void mac_via_realize(DeviceState *dev, Error **errp)
 {
     MacVIAState *m = MAC_VIA(dev);
+    MOS6522Q800VIA1State *v1s = &m->mos6522_via1;
     MOS6522State *ms;
     ADBBusState *adb_bus = &m->adb_bus;
     struct tm tm;
@@ -1009,23 +1009,22 @@ static void mac_via_realize(DeviceState *dev, Error **errp)
     m->adb_data_ready = qdev_get_gpio_in_named(dev, "via1-irq",
                                                VIA1_IRQ_ADB_READY_BIT);
 
-    if (m->blk) {
-        int64_t len = blk_getlength(m->blk);
+    if (v1s->blk) {
+        int64_t len = blk_getlength(v1s->blk);
         if (len < 0) {
             error_setg_errno(errp, -len,
                              "could not get length of backing image");
             return;
         }
-        ret = blk_set_perm(m->blk,
+        ret = blk_set_perm(v1s->blk,
                            BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE,
                            BLK_PERM_ALL, errp);
         if (ret < 0) {
             return;
         }
 
-        len = blk_pread(m->blk, 0, m->mos6522_via1.PRAM,
-                        sizeof(m->mos6522_via1.PRAM));
-        if (len != sizeof(m->mos6522_via1.PRAM)) {
+        len = blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM));
+        if (len != sizeof(v1s->PRAM)) {
             error_setg(errp, "can't read PRAM contents");
             return;
         }
@@ -1054,23 +1053,23 @@ static void mac_via_init(Object *obj)
                         TYPE_ADB_BUS, DEVICE(obj), "adb.0");
 }
 
-static void postload_update_cb(void *opaque, bool running, RunState state)
+static void via1_postload_update_cb(void *opaque, bool running, RunState state)
 {
-    MacVIAState *m = MAC_VIA(opaque);
+    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(opaque);
 
-    qemu_del_vm_change_state_handler(m->vmstate);
-    m->vmstate = NULL;
+    qemu_del_vm_change_state_handler(v1s->vmstate);
+    v1s->vmstate = NULL;
 
-    pram_update(m);
+    pram_update(v1s);
 }
 
-static int mac_via_post_load(void *opaque, int version_id)
+static int via1_post_load(void *opaque, int version_id)
 {
-    MacVIAState *m = MAC_VIA(opaque);
+    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(opaque);
 
-    if (m->blk) {
-        m->vmstate = qemu_add_vm_change_state_handler(postload_update_cb,
-                                                      m);
+    if (v1s->blk) {
+        v1s->vmstate = qemu_add_vm_change_state_handler(
+                           via1_postload_update_cb, v1s);
     }
 
     return 0;
@@ -1080,7 +1079,6 @@ static const VMStateDescription vmstate_mac_via = {
     .name = "mac-via",
     .version_id = 2,
     .minimum_version_id = 2,
-    .post_load = mac_via_post_load,
     .fields = (VMStateField[]) {
         /* VIAs */
         VMSTATE_BUFFER(mos6522_via1.PRAM, MacVIAState),
@@ -1108,11 +1106,6 @@ static const VMStateDescription vmstate_mac_via = {
     }
 };
 
-static Property mac_via_properties[] = {
-    DEFINE_PROP_DRIVE("drive", MacVIAState, blk),
-    DEFINE_PROP_END_OF_LIST(),
-};
-
 static void mac_via_class_init(ObjectClass *oc, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(oc);
@@ -1120,7 +1113,6 @@ static void mac_via_class_init(ObjectClass *oc, void *data)
     dc->realize = mac_via_realize;
     dc->reset = mac_via_reset;
     dc->vmsd = &vmstate_mac_via;
-    device_class_set_props(dc, mac_via_properties);
 }
 
 static TypeInfo mac_via_info = {
@@ -1155,20 +1147,29 @@ static const VMStateDescription vmstate_q800_via1 = {
     .name = "q800-via1",
     .version_id = 0,
     .minimum_version_id = 0,
+    .post_load = via1_post_load,
     .fields = (VMStateField[]) {
         VMSTATE_STRUCT(parent_obj, MOS6522Q800VIA1State, 0, vmstate_mos6522,
                        MOS6522State),
         VMSTATE_UINT8(last_b, MOS6522Q800VIA1State),
+        /* RTC */
+        VMSTATE_BUFFER(PRAM, MOS6522Q800VIA1State),
         VMSTATE_END_OF_LIST()
     }
 };
 
+static Property mos6522_q800_via1_properties[] = {
+    DEFINE_PROP_DRIVE("drive", MOS6522Q800VIA1State, blk),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
 static void mos6522_q800_via1_class_init(ObjectClass *oc, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(oc);
 
     dc->reset = mos6522_q800_via1_reset;
     dc->vmsd = &vmstate_q800_via1;
+    device_class_set_props(dc, mos6522_q800_via1_properties);
 }
 
 static const TypeInfo mos6522_q800_via1_type_info = {
diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h
index 3058b30685..bd1c65d1b9 100644
--- a/include/hw/misc/mac_via.h
+++ b/include/hw/misc/mac_via.h
@@ -40,7 +40,11 @@ struct MOS6522Q800VIA1State {
 
     qemu_irq irqs[VIA1_IRQ_NB];
     uint8_t last_b;
+
+    /* RTC */
     uint8_t PRAM[256];
+    BlockBackend *blk;
+    VMChangeStateEntry *vmstate;
 
     /* external timers */
     QEMUTimer *one_second_timer;
@@ -80,8 +84,6 @@ OBJECT_DECLARE_SIMPLE_TYPE(MacVIAState, MAC_VIA)
 struct MacVIAState {
     SysBusDevice busdev;
 
-    VMChangeStateEntry *vmstate;
-
     /* MMIO */
     MemoryRegion mmio;
     MemoryRegion via1mem;
@@ -101,7 +103,6 @@ struct MacVIAState {
     uint8_t cmd;
     int wprotect;
     int alt;
-    BlockBackend *blk;
 
     /* ADB */
     ADBBusState adb_bus;
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 04/12] mac_via: move PRAM/RTC variables to MOS6522Q800VIA1State
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
                   ` (2 preceding siblings ...)
  2021-08-30 10:24 ` [PATCH 03/12] mac_via: move PRAM contents and block backend to MOS6522Q800VIA1State Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-08-30 22:07   ` Philippe Mathieu-Daudé
  2021-09-08  6:47   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 05/12] mac_via: move ADB " Mark Cave-Ayland
                   ` (7 subsequent siblings)
  11 siblings, 2 replies; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

The PRAM/RTC is accessed using clock and data pins on q800 VIA1 port B and so
can be moved to MOS6522Q800VIA1State.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/mac_via.c         | 135 +++++++++++++++++++-------------------
 include/hw/misc/mac_via.h |  21 +++---
 2 files changed, 77 insertions(+), 79 deletions(-)

diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index abbe99af11..3978e6b441 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -433,9 +433,8 @@ static int via1_rtc_compact_cmd(uint8_t value)
     return REG_INVALID;
 }
 
-static void via1_rtc_update(MacVIAState *m)
+static void via1_rtc_update(MOS6522Q800VIA1State *v1s)
 {
-    MOS6522Q800VIA1State *v1s = &m->mos6522_via1;
     MOS6522State *s = MOS6522(v1s);
     int cmd, sector, addr;
     uint32_t time;
@@ -447,40 +446,40 @@ static void via1_rtc_update(MacVIAState *m)
     if (s->dirb & VIA1B_vRTCData) {
         /* send bits to the RTC */
         if (!(v1s->last_b & VIA1B_vRTCClk) && (s->b & VIA1B_vRTCClk)) {
-            m->data_out <<= 1;
-            m->data_out |= s->b & VIA1B_vRTCData;
-            m->data_out_cnt++;
+            v1s->data_out <<= 1;
+            v1s->data_out |= s->b & VIA1B_vRTCData;
+            v1s->data_out_cnt++;
         }
-        trace_via1_rtc_update_data_out(m->data_out_cnt, m->data_out);
+        trace_via1_rtc_update_data_out(v1s->data_out_cnt, v1s->data_out);
     } else {
-        trace_via1_rtc_update_data_in(m->data_in_cnt, m->data_in);
+        trace_via1_rtc_update_data_in(v1s->data_in_cnt, v1s->data_in);
         /* receive bits from the RTC */
         if ((v1s->last_b & VIA1B_vRTCClk) &&
             !(s->b & VIA1B_vRTCClk) &&
-            m->data_in_cnt) {
+            v1s->data_in_cnt) {
             s->b = (s->b & ~VIA1B_vRTCData) |
-                   ((m->data_in >> 7) & VIA1B_vRTCData);
-            m->data_in <<= 1;
-            m->data_in_cnt--;
+                   ((v1s->data_in >> 7) & VIA1B_vRTCData);
+            v1s->data_in <<= 1;
+            v1s->data_in_cnt--;
         }
         return;
     }
 
-    if (m->data_out_cnt != 8) {
+    if (v1s->data_out_cnt != 8) {
         return;
     }
 
-    m->data_out_cnt = 0;
+    v1s->data_out_cnt = 0;
 
-    trace_via1_rtc_internal_status(m->cmd, m->alt, m->data_out);
+    trace_via1_rtc_internal_status(v1s->cmd, v1s->alt, v1s->data_out);
     /* first byte: it's a command */
-    if (m->cmd == REG_EMPTY) {
+    if (v1s->cmd == REG_EMPTY) {
 
-        cmd = via1_rtc_compact_cmd(m->data_out);
+        cmd = via1_rtc_compact_cmd(v1s->data_out);
         trace_via1_rtc_internal_cmd(cmd);
 
         if (cmd == REG_INVALID) {
-            trace_via1_rtc_cmd_invalid(m->data_out);
+            trace_via1_rtc_cmd_invalid(v1s->data_out);
             return;
         }
 
@@ -492,20 +491,20 @@ static void via1_rtc_update(MacVIAState *m)
                  * register 3 is highest-order byte
                  */
 
-                time = m->tick_offset + (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)
+                time = v1s->tick_offset + (qemu_clock_get_ns(QEMU_CLOCK_VIRTUAL)
                        / NANOSECONDS_PER_SECOND);
                 trace_via1_rtc_internal_time(time);
-                m->data_in = (time >> ((cmd & 0x03) << 3)) & 0xff;
-                m->data_in_cnt = 8;
+                v1s->data_in = (time >> ((cmd & 0x03) << 3)) & 0xff;
+                v1s->data_in_cnt = 8;
                 trace_via1_rtc_cmd_seconds_read((cmd & 0x7f) - REG_0,
-                                                m->data_in);
+                                                v1s->data_in);
                 break;
             case REG_PRAM_ADDR...REG_PRAM_ADDR_LAST:
                 /* PRAM address 0x00 -> 0x13 */
-                m->data_in = v1s->PRAM[(cmd & 0x7f) - REG_PRAM_ADDR];
-                m->data_in_cnt = 8;
+                v1s->data_in = v1s->PRAM[(cmd & 0x7f) - REG_PRAM_ADDR];
+                v1s->data_in_cnt = 8;
                 trace_via1_rtc_cmd_pram_read((cmd & 0x7f) - REG_PRAM_ADDR,
-                                             m->data_in);
+                                             v1s->data_in);
                 break;
             case REG_PRAM_SECT...REG_PRAM_SECT_LAST:
                 /*
@@ -513,7 +512,7 @@ static void via1_rtc_update(MacVIAState *m)
                  * the only two-byte read command
                  */
                 trace_via1_rtc_internal_set_cmd(cmd);
-                m->cmd = cmd;
+                v1s->cmd = cmd;
                 break;
             default:
                 g_assert_not_reached();
@@ -523,9 +522,9 @@ static void via1_rtc_update(MacVIAState *m)
         }
 
         /* this is a write command, needs a parameter */
-        if (cmd == REG_WPROTECT || !m->wprotect) {
+        if (cmd == REG_WPROTECT || !v1s->wprotect) {
             trace_via1_rtc_internal_set_cmd(cmd);
-            m->cmd = cmd;
+            v1s->cmd = cmd;
         } else {
             trace_via1_rtc_internal_ignore_cmd(cmd);
         }
@@ -533,46 +532,47 @@ static void via1_rtc_update(MacVIAState *m)
     }
 
     /* second byte: it's a parameter */
-    if (m->alt == REG_EMPTY) {
-        switch (m->cmd & 0x7f) {
+    if (v1s->alt == REG_EMPTY) {
+        switch (v1s->cmd & 0x7f) {
         case REG_0...REG_3: /* seconds register */
             /* FIXME */
-            trace_via1_rtc_cmd_seconds_write(m->cmd - REG_0, m->data_out);
-            m->cmd = REG_EMPTY;
+            trace_via1_rtc_cmd_seconds_write(v1s->cmd - REG_0, v1s->data_out);
+            v1s->cmd = REG_EMPTY;
             break;
         case REG_TEST:
             /* device control: nothing to do */
-            trace_via1_rtc_cmd_test_write(m->data_out);
-            m->cmd = REG_EMPTY;
+            trace_via1_rtc_cmd_test_write(v1s->data_out);
+            v1s->cmd = REG_EMPTY;
             break;
         case REG_WPROTECT:
             /* Write Protect register */
-            trace_via1_rtc_cmd_wprotect_write(m->data_out);
-            m->wprotect = !!(m->data_out & 0x80);
-            m->cmd = REG_EMPTY;
+            trace_via1_rtc_cmd_wprotect_write(v1s->data_out);
+            v1s->wprotect = !!(v1s->data_out & 0x80);
+            v1s->cmd = REG_EMPTY;
             break;
         case REG_PRAM_ADDR...REG_PRAM_ADDR_LAST:
             /* PRAM address 0x00 -> 0x13 */
-            trace_via1_rtc_cmd_pram_write(m->cmd - REG_PRAM_ADDR, m->data_out);
-            v1s->PRAM[m->cmd - REG_PRAM_ADDR] = m->data_out;
+            trace_via1_rtc_cmd_pram_write(v1s->cmd - REG_PRAM_ADDR,
+                                          v1s->data_out);
+            v1s->PRAM[v1s->cmd - REG_PRAM_ADDR] = v1s->data_out;
             pram_update(v1s);
-            m->cmd = REG_EMPTY;
+            v1s->cmd = REG_EMPTY;
             break;
         case REG_PRAM_SECT...REG_PRAM_SECT_LAST:
-            addr = (m->data_out >> 2) & 0x1f;
-            sector = (m->cmd & 0x7f) - REG_PRAM_SECT;
-            if (m->cmd & 0x80) {
+            addr = (v1s->data_out >> 2) & 0x1f;
+            sector = (v1s->cmd & 0x7f) - REG_PRAM_SECT;
+            if (v1s->cmd & 0x80) {
                 /* it's a read */
-                m->data_in = v1s->PRAM[sector * 32 + addr];
-                m->data_in_cnt = 8;
+                v1s->data_in = v1s->PRAM[sector * 32 + addr];
+                v1s->data_in_cnt = 8;
                 trace_via1_rtc_cmd_pram_sect_read(sector, addr,
                                                   sector * 32 + addr,
-                                                  m->data_in);
-                m->cmd = REG_EMPTY;
+                                                  v1s->data_in);
+                v1s->cmd = REG_EMPTY;
             } else {
                 /* it's a write, we need one more parameter */
                 trace_via1_rtc_internal_set_alt(addr, sector, addr);
-                m->alt = addr;
+                v1s->alt = addr;
             }
             break;
         default:
@@ -583,14 +583,14 @@ static void via1_rtc_update(MacVIAState *m)
     }
 
     /* third byte: it's the data of a REG_PRAM_SECT write */
-    g_assert(REG_PRAM_SECT <= m->cmd && m->cmd <= REG_PRAM_SECT_LAST);
-    sector = m->cmd - REG_PRAM_SECT;
-    v1s->PRAM[sector * 32 + m->alt] = m->data_out;
+    g_assert(REG_PRAM_SECT <= v1s->cmd && v1s->cmd <= REG_PRAM_SECT_LAST);
+    sector = v1s->cmd - REG_PRAM_SECT;
+    v1s->PRAM[sector * 32 + v1s->alt] = v1s->data_out;
     pram_update(v1s);
-    trace_via1_rtc_cmd_pram_sect_write(sector, m->alt, sector * 32 + m->alt,
-                                       m->data_out);
-    m->alt = REG_EMPTY;
-    m->cmd = REG_EMPTY;
+    trace_via1_rtc_cmd_pram_sect_write(sector, v1s->alt, sector * 32 + v1s->alt,
+                                       v1s->data_out);
+    v1s->alt = REG_EMPTY;
+    v1s->cmd = REG_EMPTY;
 }
 
 static void adb_via_poll(void *opaque)
@@ -903,7 +903,7 @@ static void mos6522_q800_via1_write(void *opaque, hwaddr addr, uint64_t val,
 
     switch (addr) {
     case VIA_REG_B:
-        via1_rtc_update(m);
+        via1_rtc_update(v1s);
         via1_adb_update(m);
 
         v1s->last_b = ms->b;
@@ -953,12 +953,13 @@ static const MemoryRegionOps mos6522_q800_via2_ops = {
 static void mac_via_reset(DeviceState *dev)
 {
     MacVIAState *m = MAC_VIA(dev);
+    MOS6522Q800VIA1State *v1s = &m->mos6522_via1;
     ADBBusState *adb_bus = &m->adb_bus;
 
     adb_set_autopoll_enabled(adb_bus, true);
 
-    m->cmd = REG_EMPTY;
-    m->alt = REG_EMPTY;
+    v1s->cmd = REG_EMPTY;
+    v1s->alt = REG_EMPTY;
 }
 
 static void mac_via_realize(DeviceState *dev, Error **errp)
@@ -1003,7 +1004,7 @@ static void mac_via_realize(DeviceState *dev, Error **errp)
     via1_sixty_hz_update(&m->mos6522_via1);
 
     qemu_get_timedate(&tm, 0);
-    m->tick_offset = (uint32_t)mktimegm(&tm) + RTC_OFFSET;
+    v1s->tick_offset = (uint32_t)mktimegm(&tm) + RTC_OFFSET;
 
     adb_register_autopoll_callback(adb_bus, adb_via_poll, m);
     m->adb_data_ready = qdev_get_gpio_in_named(dev, "via1-irq",
@@ -1081,20 +1082,10 @@ static const VMStateDescription vmstate_mac_via = {
     .minimum_version_id = 2,
     .fields = (VMStateField[]) {
         /* VIAs */
-        VMSTATE_BUFFER(mos6522_via1.PRAM, MacVIAState),
         VMSTATE_TIMER_PTR(mos6522_via1.one_second_timer, MacVIAState),
         VMSTATE_INT64(mos6522_via1.next_second, MacVIAState),
         VMSTATE_TIMER_PTR(mos6522_via1.sixty_hz_timer, MacVIAState),
         VMSTATE_INT64(mos6522_via1.next_sixty_hz, MacVIAState),
-        /* RTC */
-        VMSTATE_UINT32(tick_offset, MacVIAState),
-        VMSTATE_UINT8(data_out, MacVIAState),
-        VMSTATE_INT32(data_out_cnt, MacVIAState),
-        VMSTATE_UINT8(data_in, MacVIAState),
-        VMSTATE_UINT8(data_in_cnt, MacVIAState),
-        VMSTATE_UINT8(cmd, MacVIAState),
-        VMSTATE_INT32(wprotect, MacVIAState),
-        VMSTATE_INT32(alt, MacVIAState),
         /* ADB */
         VMSTATE_INT32(adb_data_in_size, MacVIAState),
         VMSTATE_INT32(adb_data_in_index, MacVIAState),
@@ -1154,6 +1145,14 @@ static const VMStateDescription vmstate_q800_via1 = {
         VMSTATE_UINT8(last_b, MOS6522Q800VIA1State),
         /* RTC */
         VMSTATE_BUFFER(PRAM, MOS6522Q800VIA1State),
+        VMSTATE_UINT32(tick_offset, MOS6522Q800VIA1State),
+        VMSTATE_UINT8(data_out, MOS6522Q800VIA1State),
+        VMSTATE_INT32(data_out_cnt, MOS6522Q800VIA1State),
+        VMSTATE_UINT8(data_in, MOS6522Q800VIA1State),
+        VMSTATE_UINT8(data_in_cnt, MOS6522Q800VIA1State),
+        VMSTATE_UINT8(cmd, MOS6522Q800VIA1State),
+        VMSTATE_INT32(wprotect, MOS6522Q800VIA1State),
+        VMSTATE_INT32(alt, MOS6522Q800VIA1State),
         VMSTATE_END_OF_LIST()
     }
 };
diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h
index bd1c65d1b9..b2c499ed6b 100644
--- a/include/hw/misc/mac_via.h
+++ b/include/hw/misc/mac_via.h
@@ -46,6 +46,16 @@ struct MOS6522Q800VIA1State {
     BlockBackend *blk;
     VMChangeStateEntry *vmstate;
 
+    uint32_t tick_offset;
+
+    uint8_t data_out;
+    int data_out_cnt;
+    uint8_t data_in;
+    uint8_t data_in_cnt;
+    uint8_t cmd;
+    int wprotect;
+    int alt;
+
     /* external timers */
     QEMUTimer *one_second_timer;
     int64_t next_second;
@@ -93,17 +103,6 @@ struct MacVIAState {
     MOS6522Q800VIA1State mos6522_via1;
     MOS6522Q800VIA2State mos6522_via2;
 
-    /* RTC */
-    uint32_t tick_offset;
-
-    uint8_t data_out;
-    int data_out_cnt;
-    uint8_t data_in;
-    uint8_t data_in_cnt;
-    uint8_t cmd;
-    int wprotect;
-    int alt;
-
     /* ADB */
     ADBBusState adb_bus;
     qemu_irq adb_data_ready;
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 05/12] mac_via: move ADB variables to MOS6522Q800VIA1State
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
                   ` (3 preceding siblings ...)
  2021-08-30 10:24 ` [PATCH 04/12] mac_via: move PRAM/RTC variables " Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-08-30 22:12   ` Philippe Mathieu-Daudé
  2021-09-08  6:50   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 06/12] mac_via: move q800 VIA1 timer variables to q800 VIA1 VMStateDescription Mark Cave-Ayland
                   ` (6 subsequent siblings)
  11 siblings, 2 replies; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

The ADB is accessed using clock and data pins on q800 VIA1 port B and so can be
moved to MOS6522Q800VIA1State.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/m68k/q800.c            |   6 +-
 hw/misc/mac_via.c         | 169 +++++++++++++++++++-------------------
 include/hw/misc/mac_via.h |  20 ++---
 3 files changed, 96 insertions(+), 99 deletions(-)

diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c
index ac0a13060b..e14f68f19b 100644
--- a/hw/m68k/q800.c
+++ b/hw/m68k/q800.c
@@ -225,7 +225,7 @@ static void q800_init(MachineState *machine)
     hwaddr parameters_base;
     CPUState *cs;
     DeviceState *dev;
-    DeviceState *via_dev;
+    DeviceState *via_dev, *via1_dev;
     DeviceState *escc_orgate;
     SysBusESPState *sysbus_esp;
     ESPState *esp;
@@ -285,8 +285,8 @@ static void q800_init(MachineState *machine)
     qdev_connect_gpio_out_named(DEVICE(sysbus), "irq", 1,
                                 qdev_get_gpio_in(glue, 1));
 
-
-    adb_bus = qdev_get_child_bus(via_dev, "adb.0");
+    via1_dev = DEVICE(MOS6522_Q800_VIA1(&MAC_VIA(via_dev)->mos6522_via1));
+    adb_bus = qdev_get_child_bus(DEVICE(via1_dev), "adb.0");
     dev = qdev_new(TYPE_ADB_KEYBOARD);
     qdev_realize_and_unref(dev, adb_bus, &error_fatal);
     dev = qdev_new(TYPE_ADB_MOUSE);
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index 3978e6b441..b4a65480fd 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -595,10 +595,9 @@ static void via1_rtc_update(MOS6522Q800VIA1State *v1s)
 
 static void adb_via_poll(void *opaque)
 {
-    MacVIAState *m = opaque;
-    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(&m->mos6522_via1);
+    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(opaque);
     MOS6522State *s = MOS6522(v1s);
-    ADBBusState *adb_bus = &m->adb_bus;
+    ADBBusState *adb_bus = &v1s->adb_bus;
     uint8_t obuf[9];
     uint8_t *data = &s->sr;
     int olen;
@@ -610,50 +609,50 @@ static void adb_via_poll(void *opaque)
      */
     adb_autopoll_block(adb_bus);
 
-    if (m->adb_data_in_size > 0 && m->adb_data_in_index == 0) {
+    if (v1s->adb_data_in_size > 0 && v1s->adb_data_in_index == 0) {
         /*
          * For older Linux kernels that switch to IDLE mode after sending the
          * ADB command, detect if there is an existing response and return that
          * as a a "fake" autopoll reply or bus timeout accordingly
          */
-        *data = m->adb_data_out[0];
-        olen = m->adb_data_in_size;
+        *data = v1s->adb_data_out[0];
+        olen = v1s->adb_data_in_size;
 
         s->b &= ~VIA1B_vADBInt;
-        qemu_irq_raise(m->adb_data_ready);
+        qemu_irq_raise(v1s->adb_data_ready);
     } else {
         /*
          * Otherwise poll as normal
          */
-        m->adb_data_in_index = 0;
-        m->adb_data_out_index = 0;
+        v1s->adb_data_in_index = 0;
+        v1s->adb_data_out_index = 0;
         olen = adb_poll(adb_bus, obuf, adb_bus->autopoll_mask);
 
         if (olen > 0) {
             /* Autopoll response */
             *data = obuf[0];
             olen--;
-            memcpy(m->adb_data_in, &obuf[1], olen);
-            m->adb_data_in_size = olen;
+            memcpy(v1s->adb_data_in, &obuf[1], olen);
+            v1s->adb_data_in_size = olen;
 
             s->b &= ~VIA1B_vADBInt;
-            qemu_irq_raise(m->adb_data_ready);
+            qemu_irq_raise(v1s->adb_data_ready);
         } else {
-            *data = m->adb_autopoll_cmd;
+            *data = v1s->adb_autopoll_cmd;
             obuf[0] = 0xff;
             obuf[1] = 0xff;
             olen = 2;
 
-            memcpy(m->adb_data_in, obuf, olen);
-            m->adb_data_in_size = olen;
+            memcpy(v1s->adb_data_in, obuf, olen);
+            v1s->adb_data_in_size = olen;
 
             s->b &= ~VIA1B_vADBInt;
-            qemu_irq_raise(m->adb_data_ready);
+            qemu_irq_raise(v1s->adb_data_ready);
         }
     }
 
     trace_via1_adb_poll(*data, (s->b & VIA1B_vADBInt) ? "+" : "-",
-                        adb_bus->status, m->adb_data_in_index, olen);
+                        adb_bus->status, v1s->adb_data_in_index, olen);
 }
 
 static int adb_via_send_len(uint8_t data)
@@ -686,11 +685,10 @@ static int adb_via_send_len(uint8_t data)
     }
 }
 
-static void adb_via_send(MacVIAState *s, int state, uint8_t data)
+static void adb_via_send(MOS6522Q800VIA1State *v1s, int state, uint8_t data)
 {
-    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(&s->mos6522_via1);
     MOS6522State *ms = MOS6522(v1s);
-    ADBBusState *adb_bus = &s->adb_bus;
+    ADBBusState *adb_bus = &v1s->adb_bus;
     uint16_t autopoll_mask;
 
     switch (state) {
@@ -706,22 +704,22 @@ static void adb_via_send(MacVIAState *s, int state, uint8_t data)
             ms->b &= ~VIA1B_vADBInt;
         } else {
             ms->b |= VIA1B_vADBInt;
-            s->adb_data_out_index = 0;
-            s->adb_data_out[s->adb_data_out_index++] = data;
+            v1s->adb_data_out_index = 0;
+            v1s->adb_data_out[v1s->adb_data_out_index++] = data;
         }
 
         trace_via1_adb_send(" NEW", data, (ms->b & VIA1B_vADBInt) ? "+" : "-");
-        qemu_irq_raise(s->adb_data_ready);
+        qemu_irq_raise(v1s->adb_data_ready);
         break;
 
     case ADB_STATE_EVEN:
     case ADB_STATE_ODD:
         ms->b |= VIA1B_vADBInt;
-        s->adb_data_out[s->adb_data_out_index++] = data;
+        v1s->adb_data_out[v1s->adb_data_out_index++] = data;
 
         trace_via1_adb_send(state == ADB_STATE_EVEN ? "EVEN" : " ODD",
                             data, (ms->b & VIA1B_vADBInt) ? "+" : "-");
-        qemu_irq_raise(s->adb_data_ready);
+        qemu_irq_raise(v1s->adb_data_ready);
         break;
 
     case ADB_STATE_IDLE:
@@ -729,40 +727,39 @@ static void adb_via_send(MacVIAState *s, int state, uint8_t data)
     }
 
     /* If the command is complete, execute it */
-    if (s->adb_data_out_index == adb_via_send_len(s->adb_data_out[0])) {
-        s->adb_data_in_size = adb_request(adb_bus, s->adb_data_in,
-                                          s->adb_data_out,
-                                          s->adb_data_out_index);
-        s->adb_data_in_index = 0;
+    if (v1s->adb_data_out_index == adb_via_send_len(v1s->adb_data_out[0])) {
+        v1s->adb_data_in_size = adb_request(adb_bus, v1s->adb_data_in,
+                                            v1s->adb_data_out,
+                                            v1s->adb_data_out_index);
+        v1s->adb_data_in_index = 0;
 
         if (adb_bus->status & ADB_STATUS_BUSTIMEOUT) {
             /*
              * Bus timeout (but allow first EVEN and ODD byte to indicate
              * timeout via vADBInt and SRQ status)
              */
-            s->adb_data_in[0] = 0xff;
-            s->adb_data_in[1] = 0xff;
-            s->adb_data_in_size = 2;
+            v1s->adb_data_in[0] = 0xff;
+            v1s->adb_data_in[1] = 0xff;
+            v1s->adb_data_in_size = 2;
         }
 
         /*
          * If last command is TALK, store it for use by autopoll and adjust
          * the autopoll mask accordingly
          */
-        if ((s->adb_data_out[0] & 0xc) == 0xc) {
-            s->adb_autopoll_cmd = s->adb_data_out[0];
+        if ((v1s->adb_data_out[0] & 0xc) == 0xc) {
+            v1s->adb_autopoll_cmd = v1s->adb_data_out[0];
 
-            autopoll_mask = 1 << (s->adb_autopoll_cmd >> 4);
+            autopoll_mask = 1 << (v1s->adb_autopoll_cmd >> 4);
             adb_set_autopoll_mask(adb_bus, autopoll_mask);
         }
     }
 }
 
-static void adb_via_receive(MacVIAState *s, int state, uint8_t *data)
+static void adb_via_receive(MOS6522Q800VIA1State *v1s, int state, uint8_t *data)
 {
-    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(&s->mos6522_via1);
     MOS6522State *ms = MOS6522(v1s);
-    ADBBusState *adb_bus = &s->adb_bus;
+    ADBBusState *adb_bus = &v1s->adb_bus;
     uint16_t pending;
 
     switch (state) {
@@ -776,16 +773,16 @@ static void adb_via_receive(MacVIAState *s, int state, uint8_t *data)
 
         trace_via1_adb_receive("IDLE", *data,
                         (ms->b & VIA1B_vADBInt) ? "+" : "-", adb_bus->status,
-                        s->adb_data_in_index, s->adb_data_in_size);
+                        v1s->adb_data_in_index, v1s->adb_data_in_size);
 
         break;
 
     case ADB_STATE_EVEN:
     case ADB_STATE_ODD:
-        switch (s->adb_data_in_index) {
+        switch (v1s->adb_data_in_index) {
         case 0:
             /* First EVEN byte: vADBInt indicates bus timeout */
-            *data = s->adb_data_in[s->adb_data_in_index];
+            *data = v1s->adb_data_in[v1s->adb_data_in_index];
             if (adb_bus->status & ADB_STATUS_BUSTIMEOUT) {
                 ms->b &= ~VIA1B_vADBInt;
             } else {
@@ -794,16 +791,16 @@ static void adb_via_receive(MacVIAState *s, int state, uint8_t *data)
 
             trace_via1_adb_receive(state == ADB_STATE_EVEN ? "EVEN" : " ODD",
                                    *data, (ms->b & VIA1B_vADBInt) ? "+" : "-",
-                                   adb_bus->status, s->adb_data_in_index,
-                                   s->adb_data_in_size);
+                                   adb_bus->status, v1s->adb_data_in_index,
+                                   v1s->adb_data_in_size);
 
-            s->adb_data_in_index++;
+            v1s->adb_data_in_index++;
             break;
 
         case 1:
             /* First ODD byte: vADBInt indicates SRQ */
-            *data = s->adb_data_in[s->adb_data_in_index];
-            pending = adb_bus->pending & ~(1 << (s->adb_autopoll_cmd >> 4));
+            *data = v1s->adb_data_in[v1s->adb_data_in_index];
+            pending = adb_bus->pending & ~(1 << (v1s->adb_autopoll_cmd >> 4));
             if (pending) {
                 ms->b &= ~VIA1B_vADBInt;
             } else {
@@ -812,10 +809,10 @@ static void adb_via_receive(MacVIAState *s, int state, uint8_t *data)
 
             trace_via1_adb_receive(state == ADB_STATE_EVEN ? "EVEN" : " ODD",
                                    *data, (ms->b & VIA1B_vADBInt) ? "+" : "-",
-                                   adb_bus->status, s->adb_data_in_index,
-                                   s->adb_data_in_size);
+                                   adb_bus->status, v1s->adb_data_in_index,
+                                   v1s->adb_data_in_size);
 
-            s->adb_data_in_index++;
+            v1s->adb_data_in_index++;
             break;
 
         default:
@@ -825,11 +822,11 @@ static void adb_via_receive(MacVIAState *s, int state, uint8_t *data)
              * end of the poll reply, so provide these extra bytes below to
              * keep it happy
              */
-            if (s->adb_data_in_index < s->adb_data_in_size) {
+            if (v1s->adb_data_in_index < v1s->adb_data_in_size) {
                 /* Next data byte */
-                *data = s->adb_data_in[s->adb_data_in_index];
+                *data = v1s->adb_data_in[v1s->adb_data_in_index];
                 ms->b |= VIA1B_vADBInt;
-            } else if (s->adb_data_in_index == s->adb_data_in_size) {
+            } else if (v1s->adb_data_in_index == v1s->adb_data_in_size) {
                 if (adb_bus->status & ADB_STATUS_BUSTIMEOUT) {
                     /* Bus timeout (no more data) */
                     *data = 0xff;
@@ -848,23 +845,22 @@ static void adb_via_receive(MacVIAState *s, int state, uint8_t *data)
 
             trace_via1_adb_receive(state == ADB_STATE_EVEN ? "EVEN" : " ODD",
                                    *data, (ms->b & VIA1B_vADBInt) ? "+" : "-",
-                                   adb_bus->status, s->adb_data_in_index,
-                                   s->adb_data_in_size);
+                                   adb_bus->status, v1s->adb_data_in_index,
+                                   v1s->adb_data_in_size);
 
-            if (s->adb_data_in_index <= s->adb_data_in_size) {
-                s->adb_data_in_index++;
+            if (v1s->adb_data_in_index <= v1s->adb_data_in_size) {
+                v1s->adb_data_in_index++;
             }
             break;
         }
 
-        qemu_irq_raise(s->adb_data_ready);
+        qemu_irq_raise(v1s->adb_data_ready);
         break;
     }
 }
 
-static void via1_adb_update(MacVIAState *m)
+static void via1_adb_update(MOS6522Q800VIA1State *v1s)
 {
-    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(&m->mos6522_via1);
     MOS6522State *s = MOS6522(v1s);
     int oldstate, state;
 
@@ -874,10 +870,10 @@ static void via1_adb_update(MacVIAState *m)
     if (state != oldstate) {
         if (s->acr & VIA1ACR_vShiftOut) {
             /* output mode */
-            adb_via_send(m, state, s->sr);
+            adb_via_send(v1s, state, s->sr);
         } else {
             /* input mode */
-            adb_via_receive(m, state, &s->sr);
+            adb_via_receive(v1s, state, &s->sr);
         }
     }
 }
@@ -895,7 +891,6 @@ static void mos6522_q800_via1_write(void *opaque, hwaddr addr, uint64_t val,
                                     unsigned size)
 {
     MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(opaque);
-    MacVIAState *m = container_of(v1s, MacVIAState, mos6522_via1);
     MOS6522State *ms = MOS6522(v1s);
 
     addr = (addr >> 9) & 0xf;
@@ -904,7 +899,7 @@ static void mos6522_q800_via1_write(void *opaque, hwaddr addr, uint64_t val,
     switch (addr) {
     case VIA_REG_B:
         via1_rtc_update(v1s);
-        via1_adb_update(m);
+        via1_adb_update(v1s);
 
         v1s->last_b = ms->b;
         break;
@@ -954,7 +949,7 @@ static void mac_via_reset(DeviceState *dev)
 {
     MacVIAState *m = MAC_VIA(dev);
     MOS6522Q800VIA1State *v1s = &m->mos6522_via1;
-    ADBBusState *adb_bus = &m->adb_bus;
+    ADBBusState *adb_bus = &v1s->adb_bus;
 
     adb_set_autopoll_enabled(adb_bus, true);
 
@@ -967,17 +962,10 @@ static void mac_via_realize(DeviceState *dev, Error **errp)
     MacVIAState *m = MAC_VIA(dev);
     MOS6522Q800VIA1State *v1s = &m->mos6522_via1;
     MOS6522State *ms;
-    ADBBusState *adb_bus = &m->adb_bus;
+    ADBBusState *adb_bus = &v1s->adb_bus;
     struct tm tm;
     int ret;
 
-    /* Init VIAs 1 and 2 */
-    object_initialize_child(OBJECT(dev), "via1", &m->mos6522_via1,
-                            TYPE_MOS6522_Q800_VIA1);
-
-    object_initialize_child(OBJECT(dev), "via2", &m->mos6522_via2,
-                            TYPE_MOS6522_Q800_VIA2);
-
     /* Pass through mos6522 output IRQs */
     ms = MOS6522(&m->mos6522_via1);
     object_property_add_alias(OBJECT(dev), "irq[0]", OBJECT(ms),
@@ -1006,9 +994,9 @@ static void mac_via_realize(DeviceState *dev, Error **errp)
     qemu_get_timedate(&tm, 0);
     v1s->tick_offset = (uint32_t)mktimegm(&tm) + RTC_OFFSET;
 
-    adb_register_autopoll_callback(adb_bus, adb_via_poll, m);
-    m->adb_data_ready = qdev_get_gpio_in_named(dev, "via1-irq",
-                                               VIA1_IRQ_ADB_READY_BIT);
+    adb_register_autopoll_callback(adb_bus, adb_via_poll, v1s);
+    v1s->adb_data_ready = qdev_get_gpio_in_named(dev, "via1-irq",
+                                                 VIA1_IRQ_ADB_READY_BIT);
 
     if (v1s->blk) {
         int64_t len = blk_getlength(v1s->blk);
@@ -1049,9 +1037,12 @@ static void mac_via_init(Object *obj)
                           &m->mos6522_via2, "via2", VIA_SIZE);
     memory_region_add_subregion(&m->mmio, VIA_SIZE, &m->via2mem);
 
-    /* ADB */
-    qbus_create_inplace((BusState *)&m->adb_bus, sizeof(m->adb_bus),
-                        TYPE_ADB_BUS, DEVICE(obj), "adb.0");
+    /* Init VIAs 1 and 2 */
+    object_initialize_child(obj, "via1", &m->mos6522_via1,
+                            TYPE_MOS6522_Q800_VIA1);
+
+    object_initialize_child(obj, "via2", &m->mos6522_via2,
+                            TYPE_MOS6522_Q800_VIA2);
 }
 
 static void via1_postload_update_cb(void *opaque, bool running, RunState state)
@@ -1086,13 +1077,6 @@ static const VMStateDescription vmstate_mac_via = {
         VMSTATE_INT64(mos6522_via1.next_second, MacVIAState),
         VMSTATE_TIMER_PTR(mos6522_via1.sixty_hz_timer, MacVIAState),
         VMSTATE_INT64(mos6522_via1.next_sixty_hz, MacVIAState),
-        /* ADB */
-        VMSTATE_INT32(adb_data_in_size, MacVIAState),
-        VMSTATE_INT32(adb_data_in_index, MacVIAState),
-        VMSTATE_INT32(adb_data_out_index, MacVIAState),
-        VMSTATE_BUFFER(adb_data_in, MacVIAState),
-        VMSTATE_BUFFER(adb_data_out, MacVIAState),
-        VMSTATE_UINT8(adb_autopoll_cmd, MacVIAState),
         VMSTATE_END_OF_LIST()
     }
 };
@@ -1130,6 +1114,12 @@ static void mos6522_q800_via1_reset(DeviceState *dev)
 
 static void mos6522_q800_via1_init(Object *obj)
 {
+    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(obj);
+
+    /* ADB */
+    qbus_create_inplace((BusState *)&v1s->adb_bus, sizeof(v1s->adb_bus),
+                        TYPE_ADB_BUS, DEVICE(v1s), "adb.0");
+
     qdev_init_gpio_in_named(DEVICE(obj), via1_irq_request, "via1-irq",
                             VIA1_IRQ_NB);
 }
@@ -1153,6 +1143,13 @@ static const VMStateDescription vmstate_q800_via1 = {
         VMSTATE_UINT8(cmd, MOS6522Q800VIA1State),
         VMSTATE_INT32(wprotect, MOS6522Q800VIA1State),
         VMSTATE_INT32(alt, MOS6522Q800VIA1State),
+        /* ADB */
+        VMSTATE_INT32(adb_data_in_size, MOS6522Q800VIA1State),
+        VMSTATE_INT32(adb_data_in_index, MOS6522Q800VIA1State),
+        VMSTATE_INT32(adb_data_out_index, MOS6522Q800VIA1State),
+        VMSTATE_BUFFER(adb_data_in, MOS6522Q800VIA1State),
+        VMSTATE_BUFFER(adb_data_out, MOS6522Q800VIA1State),
+        VMSTATE_UINT8(adb_autopoll_cmd, MOS6522Q800VIA1State),
         VMSTATE_END_OF_LIST()
     }
 };
diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h
index b2c499ed6b..182dcb7422 100644
--- a/include/hw/misc/mac_via.h
+++ b/include/hw/misc/mac_via.h
@@ -56,6 +56,16 @@ struct MOS6522Q800VIA1State {
     int wprotect;
     int alt;
 
+    /* ADB */
+    ADBBusState adb_bus;
+    qemu_irq adb_data_ready;
+    int adb_data_in_size;
+    int adb_data_in_index;
+    int adb_data_out_index;
+    uint8_t adb_data_in[128];
+    uint8_t adb_data_out[16];
+    uint8_t adb_autopoll_cmd;
+
     /* external timers */
     QEMUTimer *one_second_timer;
     int64_t next_second;
@@ -102,16 +112,6 @@ struct MacVIAState {
     /* VIAs */
     MOS6522Q800VIA1State mos6522_via1;
     MOS6522Q800VIA2State mos6522_via2;
-
-    /* ADB */
-    ADBBusState adb_bus;
-    qemu_irq adb_data_ready;
-    int adb_data_in_size;
-    int adb_data_in_index;
-    int adb_data_out_index;
-    uint8_t adb_data_in[128];
-    uint8_t adb_data_out[16];
-    uint8_t adb_autopoll_cmd;
 };
 
 #endif
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 06/12] mac_via: move q800 VIA1 timer variables to q800 VIA1 VMStateDescription
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
                   ` (4 preceding siblings ...)
  2021-08-30 10:24 ` [PATCH 05/12] mac_via: move ADB " Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-09-08  6:50   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 07/12] mac_via: move VIA1 reset logic from mac_via_reset() to mos6522_q800_via1_reset() Mark Cave-Ayland
                   ` (5 subsequent siblings)
  11 siblings, 1 reply; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

These variables are already present in MOS6522Q800VIA1State and so it is just
the VMStateDescription move that is needed.

With this change the mac_via VMStateDescription is now empty and can be removed
completely.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/mac_via.c | 20 +++++---------------
 1 file changed, 5 insertions(+), 15 deletions(-)

diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index b4a65480fd..47e221dd88 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -1067,27 +1067,12 @@ static int via1_post_load(void *opaque, int version_id)
     return 0;
 }
 
-static const VMStateDescription vmstate_mac_via = {
-    .name = "mac-via",
-    .version_id = 2,
-    .minimum_version_id = 2,
-    .fields = (VMStateField[]) {
-        /* VIAs */
-        VMSTATE_TIMER_PTR(mos6522_via1.one_second_timer, MacVIAState),
-        VMSTATE_INT64(mos6522_via1.next_second, MacVIAState),
-        VMSTATE_TIMER_PTR(mos6522_via1.sixty_hz_timer, MacVIAState),
-        VMSTATE_INT64(mos6522_via1.next_sixty_hz, MacVIAState),
-        VMSTATE_END_OF_LIST()
-    }
-};
-
 static void mac_via_class_init(ObjectClass *oc, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(oc);
 
     dc->realize = mac_via_realize;
     dc->reset = mac_via_reset;
-    dc->vmsd = &vmstate_mac_via;
 }
 
 static TypeInfo mac_via_info = {
@@ -1150,6 +1135,11 @@ static const VMStateDescription vmstate_q800_via1 = {
         VMSTATE_BUFFER(adb_data_in, MOS6522Q800VIA1State),
         VMSTATE_BUFFER(adb_data_out, MOS6522Q800VIA1State),
         VMSTATE_UINT8(adb_autopoll_cmd, MOS6522Q800VIA1State),
+        /* Timers */
+        VMSTATE_TIMER_PTR(one_second_timer, MOS6522Q800VIA1State),
+        VMSTATE_INT64(next_second, MOS6522Q800VIA1State),
+        VMSTATE_TIMER_PTR(sixty_hz_timer, MOS6522Q800VIA1State),
+        VMSTATE_INT64(next_sixty_hz, MOS6522Q800VIA1State),
         VMSTATE_END_OF_LIST()
     }
 };
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 07/12] mac_via: move VIA1 reset logic from mac_via_reset() to mos6522_q800_via1_reset()
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
                   ` (5 preceding siblings ...)
  2021-08-30 10:24 ` [PATCH 06/12] mac_via: move q800 VIA1 timer variables to q800 VIA1 VMStateDescription Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-08-30 22:04   ` Philippe Mathieu-Daudé
  2021-09-08  6:51   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 08/12] mac_via: move VIA1 realize logic from mac_via_realize() to mos6522_q800_via1_realize() Mark Cave-Ayland
                   ` (4 subsequent siblings)
  11 siblings, 2 replies; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

After this change mac_via_reset() is now empty and can be removed.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/mac_via.c | 22 ++++++++--------------
 1 file changed, 8 insertions(+), 14 deletions(-)

diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index 47e221dd88..a2df17d9be 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -945,18 +945,6 @@ static const MemoryRegionOps mos6522_q800_via2_ops = {
     },
 };
 
-static void mac_via_reset(DeviceState *dev)
-{
-    MacVIAState *m = MAC_VIA(dev);
-    MOS6522Q800VIA1State *v1s = &m->mos6522_via1;
-    ADBBusState *adb_bus = &v1s->adb_bus;
-
-    adb_set_autopoll_enabled(adb_bus, true);
-
-    v1s->cmd = REG_EMPTY;
-    v1s->alt = REG_EMPTY;
-}
-
 static void mac_via_realize(DeviceState *dev, Error **errp)
 {
     MacVIAState *m = MAC_VIA(dev);
@@ -1072,7 +1060,6 @@ static void mac_via_class_init(ObjectClass *oc, void *data)
     DeviceClass *dc = DEVICE_CLASS(oc);
 
     dc->realize = mac_via_realize;
-    dc->reset = mac_via_reset;
 }
 
 static TypeInfo mac_via_info = {
@@ -1086,8 +1073,10 @@ static TypeInfo mac_via_info = {
 /* VIA 1 */
 static void mos6522_q800_via1_reset(DeviceState *dev)
 {
-    MOS6522State *ms = MOS6522(dev);
+    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(dev);
+    MOS6522State *ms = MOS6522(v1s);
     MOS6522DeviceClass *mdc = MOS6522_GET_CLASS(ms);
+    ADBBusState *adb_bus = &v1s->adb_bus;
 
     mdc->parent_reset(dev);
 
@@ -1095,6 +1084,11 @@ static void mos6522_q800_via1_reset(DeviceState *dev)
     ms->timers[1].frequency = VIA_TIMER_FREQ;
 
     ms->b = VIA1B_vADB_StateMask | VIA1B_vADBInt | VIA1B_vRTCEnb;
+
+    /* ADB/RTC */
+    adb_set_autopoll_enabled(adb_bus, true);
+    v1s->cmd = REG_EMPTY;
+    v1s->alt = REG_EMPTY;
 }
 
 static void mos6522_q800_via1_init(Object *obj)
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 08/12] mac_via: move VIA1 realize logic from mac_via_realize() to mos6522_q800_via1_realize()
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
                   ` (6 preceding siblings ...)
  2021-08-30 10:24 ` [PATCH 07/12] mac_via: move VIA1 reset logic from mac_via_reset() to mos6522_q800_via1_reset() Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-09-08  6:52   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 09/12] mac_via: remove mac_via device Mark Cave-Ayland
                   ` (3 subsequent siblings)
  11 siblings, 1 reply; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/mac_via.c | 86 ++++++++++++++++++++++++-----------------------
 1 file changed, 44 insertions(+), 42 deletions(-)

diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index a2df17d9be..bb8d682ce9 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -948,11 +948,7 @@ static const MemoryRegionOps mos6522_q800_via2_ops = {
 static void mac_via_realize(DeviceState *dev, Error **errp)
 {
     MacVIAState *m = MAC_VIA(dev);
-    MOS6522Q800VIA1State *v1s = &m->mos6522_via1;
     MOS6522State *ms;
-    ADBBusState *adb_bus = &v1s->adb_bus;
-    struct tm tm;
-    int ret;
 
     /* Pass through mos6522 output IRQs */
     ms = MOS6522(&m->mos6522_via1);
@@ -968,44 +964,6 @@ static void mac_via_realize(DeviceState *dev, Error **errp)
     /* Pass through mos6522 input IRQs */
     qdev_pass_gpios(DEVICE(&m->mos6522_via1), dev, "via1-irq");
     qdev_pass_gpios(DEVICE(&m->mos6522_via2), dev, "via2-irq");
-
-    /* VIA 1 */
-    m->mos6522_via1.one_second_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL,
-                                                     via1_one_second,
-                                                     &m->mos6522_via1);
-    via1_one_second_update(&m->mos6522_via1);
-    m->mos6522_via1.sixty_hz_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL,
-                                                  via1_sixty_hz,
-                                                  &m->mos6522_via1);
-    via1_sixty_hz_update(&m->mos6522_via1);
-
-    qemu_get_timedate(&tm, 0);
-    v1s->tick_offset = (uint32_t)mktimegm(&tm) + RTC_OFFSET;
-
-    adb_register_autopoll_callback(adb_bus, adb_via_poll, v1s);
-    v1s->adb_data_ready = qdev_get_gpio_in_named(dev, "via1-irq",
-                                                 VIA1_IRQ_ADB_READY_BIT);
-
-    if (v1s->blk) {
-        int64_t len = blk_getlength(v1s->blk);
-        if (len < 0) {
-            error_setg_errno(errp, -len,
-                             "could not get length of backing image");
-            return;
-        }
-        ret = blk_set_perm(v1s->blk,
-                           BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE,
-                           BLK_PERM_ALL, errp);
-        if (ret < 0) {
-            return;
-        }
-
-        len = blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM));
-        if (len != sizeof(v1s->PRAM)) {
-            error_setg(errp, "can't read PRAM contents");
-            return;
-        }
-    }
 }
 
 static void mac_via_init(Object *obj)
@@ -1091,6 +1049,49 @@ static void mos6522_q800_via1_reset(DeviceState *dev)
     v1s->alt = REG_EMPTY;
 }
 
+static void mos6522_q800_via1_realize(DeviceState *dev, Error **errp)
+{
+    MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(dev);
+    ADBBusState *adb_bus = &v1s->adb_bus;
+    struct tm tm;
+    int ret;
+
+    v1s->one_second_timer = timer_new_ms(QEMU_CLOCK_VIRTUAL, via1_one_second,
+                                         v1s);
+    via1_one_second_update(v1s);
+    v1s->sixty_hz_timer = timer_new_ns(QEMU_CLOCK_VIRTUAL, via1_sixty_hz,
+                                       v1s);
+    via1_sixty_hz_update(v1s);
+
+    qemu_get_timedate(&tm, 0);
+    v1s->tick_offset = (uint32_t)mktimegm(&tm) + RTC_OFFSET;
+
+    adb_register_autopoll_callback(adb_bus, adb_via_poll, v1s);
+    v1s->adb_data_ready = qdev_get_gpio_in_named(dev, "via1-irq",
+                                                 VIA1_IRQ_ADB_READY_BIT);
+
+    if (v1s->blk) {
+        int64_t len = blk_getlength(v1s->blk);
+        if (len < 0) {
+            error_setg_errno(errp, -len,
+                             "could not get length of backing image");
+            return;
+        }
+        ret = blk_set_perm(v1s->blk,
+                           BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE,
+                           BLK_PERM_ALL, errp);
+        if (ret < 0) {
+            return;
+        }
+
+        len = blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM));
+        if (len != sizeof(v1s->PRAM)) {
+            error_setg(errp, "can't read PRAM contents");
+            return;
+        }
+    }
+}
+
 static void mos6522_q800_via1_init(Object *obj)
 {
     MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(obj);
@@ -1147,6 +1148,7 @@ static void mos6522_q800_via1_class_init(ObjectClass *oc, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(oc);
 
+    dc->realize = mos6522_q800_via1_realize;
     dc->reset = mos6522_q800_via1_reset;
     dc->vmsd = &vmstate_q800_via1;
     device_class_set_props(dc, mos6522_q800_via1_properties);
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 09/12] mac_via: remove mac_via device
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
                   ` (7 preceding siblings ...)
  2021-08-30 10:24 ` [PATCH 08/12] mac_via: move VIA1 realize logic from mac_via_realize() to mos6522_q800_via1_realize() Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-09-08  6:52   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 10/12] mac_via: remove explicit viaN prefix from VIA IRQ gpios Mark Cave-Ayland
                   ` (2 subsequent siblings)
  11 siblings, 1 reply; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

Remove the mac_via device and wire up both q800 VIA1 and VIA2 directly for the
m68k q800 machine.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/m68k/q800.c            | 34 +++++++++--------
 hw/misc/mac_via.c         | 78 +++++++--------------------------------
 include/hw/misc/mac_via.h | 21 +++--------
 3 files changed, 36 insertions(+), 97 deletions(-)

diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c
index e14f68f19b..ec28e69802 100644
--- a/hw/m68k/q800.c
+++ b/hw/m68k/q800.c
@@ -225,7 +225,7 @@ static void q800_init(MachineState *machine)
     hwaddr parameters_base;
     CPUState *cs;
     DeviceState *dev;
-    DeviceState *via_dev, *via1_dev;
+    DeviceState *via1_dev, *via2_dev;
     DeviceState *escc_orgate;
     SysBusESPState *sysbus_esp;
     ESPState *esp;
@@ -270,28 +270,30 @@ static void q800_init(MachineState *machine)
     object_property_set_link(OBJECT(glue), "cpu", OBJECT(cpu), &error_abort);
     sysbus_realize_and_unref(SYS_BUS_DEVICE(glue), &error_fatal);
 
-    /* VIA */
-
-    via_dev = qdev_new(TYPE_MAC_VIA);
+    /* VIA 1 */
+    via1_dev = qdev_new(TYPE_MOS6522_Q800_VIA1);
     dinfo = drive_get(IF_MTD, 0, 0);
     if (dinfo) {
-        qdev_prop_set_drive(via_dev, "drive", blk_by_legacy_dinfo(dinfo));
+        qdev_prop_set_drive(via1_dev, "drive", blk_by_legacy_dinfo(dinfo));
     }
-    sysbus = SYS_BUS_DEVICE(via_dev);
+    sysbus = SYS_BUS_DEVICE(via1_dev);
     sysbus_realize_and_unref(sysbus, &error_fatal);
-    sysbus_mmio_map(sysbus, 0, VIA_BASE);
-    qdev_connect_gpio_out_named(DEVICE(sysbus), "irq", 0,
-                                qdev_get_gpio_in(glue, 0));
-    qdev_connect_gpio_out_named(DEVICE(sysbus), "irq", 1,
-                                qdev_get_gpio_in(glue, 1));
-
-    via1_dev = DEVICE(MOS6522_Q800_VIA1(&MAC_VIA(via_dev)->mos6522_via1));
-    adb_bus = qdev_get_child_bus(DEVICE(via1_dev), "adb.0");
+    sysbus_mmio_map(sysbus, 1, VIA_BASE);
+    sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(glue, 0));
+
+    adb_bus = qdev_get_child_bus(via1_dev, "adb.0");
     dev = qdev_new(TYPE_ADB_KEYBOARD);
     qdev_realize_and_unref(dev, adb_bus, &error_fatal);
     dev = qdev_new(TYPE_ADB_MOUSE);
     qdev_realize_and_unref(dev, adb_bus, &error_fatal);
 
+    /* VIA 2 */
+    via2_dev = qdev_new(TYPE_MOS6522_Q800_VIA2);
+    sysbus = SYS_BUS_DEVICE(via2_dev);
+    sysbus_realize_and_unref(sysbus, &error_fatal);
+    sysbus_mmio_map(sysbus, 1, VIA_BASE + VIA_SIZE);
+    sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(glue, 1));
+
     /* MACSONIC */
 
     if (nb_nics > 1) {
@@ -375,11 +377,11 @@ static void q800_init(MachineState *machine)
 
     sysbus = SYS_BUS_DEVICE(dev);
     sysbus_realize_and_unref(sysbus, &error_fatal);
-    sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in_named(via_dev,
+    sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in_named(via2_dev,
                                                          "via2-irq",
                                                          VIA2_IRQ_SCSI_BIT));
     sysbus_connect_irq(sysbus, 1,
-                       qdev_get_gpio_in_named(via_dev, "via2-irq",
+                       qdev_get_gpio_in_named(via2_dev, "via2-irq",
                                               VIA2_IRQ_SCSI_DATA_BIT));
     sysbus_mmio_map(sysbus, 0, ESP_BASE);
     sysbus_mmio_map(sysbus, 1, ESP_PDMA);
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index bb8d682ce9..7b9f067e71 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -34,11 +34,9 @@
 #include "qemu/log.h"
 
 /*
- * VIAs: There are two in every machine,
+ * VIAs: There are two in every machine
  */
 
-#define VIA_SIZE (0x2000)
-
 /*
  * Not all of these are true post MacII I think.
  * CSA: probably the ones CHRP marks as 'unused' change purposes
@@ -945,52 +943,6 @@ static const MemoryRegionOps mos6522_q800_via2_ops = {
     },
 };
 
-static void mac_via_realize(DeviceState *dev, Error **errp)
-{
-    MacVIAState *m = MAC_VIA(dev);
-    MOS6522State *ms;
-
-    /* Pass through mos6522 output IRQs */
-    ms = MOS6522(&m->mos6522_via1);
-    object_property_add_alias(OBJECT(dev), "irq[0]", OBJECT(ms),
-                              SYSBUS_DEVICE_GPIO_IRQ "[0]");
-    ms = MOS6522(&m->mos6522_via2);
-    object_property_add_alias(OBJECT(dev), "irq[1]", OBJECT(ms),
-                              SYSBUS_DEVICE_GPIO_IRQ "[0]");
-
-    sysbus_realize(SYS_BUS_DEVICE(&m->mos6522_via1), &error_abort);
-    sysbus_realize(SYS_BUS_DEVICE(&m->mos6522_via2), &error_abort);
-
-    /* Pass through mos6522 input IRQs */
-    qdev_pass_gpios(DEVICE(&m->mos6522_via1), dev, "via1-irq");
-    qdev_pass_gpios(DEVICE(&m->mos6522_via2), dev, "via2-irq");
-}
-
-static void mac_via_init(Object *obj)
-{
-    SysBusDevice *sbd = SYS_BUS_DEVICE(obj);
-    MacVIAState *m = MAC_VIA(obj);
-
-    /* MMIO */
-    memory_region_init(&m->mmio, obj, "mac-via", 2 * VIA_SIZE);
-    sysbus_init_mmio(sbd, &m->mmio);
-
-    memory_region_init_io(&m->via1mem, obj, &mos6522_q800_via1_ops,
-                          &m->mos6522_via1, "via1", VIA_SIZE);
-    memory_region_add_subregion(&m->mmio, 0x0, &m->via1mem);
-
-    memory_region_init_io(&m->via2mem, obj, &mos6522_q800_via2_ops,
-                          &m->mos6522_via2, "via2", VIA_SIZE);
-    memory_region_add_subregion(&m->mmio, VIA_SIZE, &m->via2mem);
-
-    /* Init VIAs 1 and 2 */
-    object_initialize_child(obj, "via1", &m->mos6522_via1,
-                            TYPE_MOS6522_Q800_VIA1);
-
-    object_initialize_child(obj, "via2", &m->mos6522_via2,
-                            TYPE_MOS6522_Q800_VIA2);
-}
-
 static void via1_postload_update_cb(void *opaque, bool running, RunState state)
 {
     MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(opaque);
@@ -1013,21 +965,6 @@ static int via1_post_load(void *opaque, int version_id)
     return 0;
 }
 
-static void mac_via_class_init(ObjectClass *oc, void *data)
-{
-    DeviceClass *dc = DEVICE_CLASS(oc);
-
-    dc->realize = mac_via_realize;
-}
-
-static TypeInfo mac_via_info = {
-    .name = TYPE_MAC_VIA,
-    .parent = TYPE_SYS_BUS_DEVICE,
-    .instance_size = sizeof(MacVIAState),
-    .instance_init = mac_via_init,
-    .class_init = mac_via_class_init,
-};
-
 /* VIA 1 */
 static void mos6522_q800_via1_reset(DeviceState *dev)
 {
@@ -1095,6 +1032,11 @@ static void mos6522_q800_via1_realize(DeviceState *dev, Error **errp)
 static void mos6522_q800_via1_init(Object *obj)
 {
     MOS6522Q800VIA1State *v1s = MOS6522_Q800_VIA1(obj);
+    SysBusDevice *sbd = SYS_BUS_DEVICE(v1s);
+
+    memory_region_init_io(&v1s->via_mem, obj, &mos6522_q800_via1_ops, v1s,
+                          "via1", VIA_SIZE);
+    sysbus_init_mmio(sbd, &v1s->via_mem);
 
     /* ADB */
     qbus_create_inplace((BusState *)&v1s->adb_bus, sizeof(v1s->adb_bus),
@@ -1187,6 +1129,13 @@ static void mos6522_q800_via2_reset(DeviceState *dev)
 
 static void mos6522_q800_via2_init(Object *obj)
 {
+    MOS6522Q800VIA2State *v2s = MOS6522_Q800_VIA2(obj);
+    SysBusDevice *sbd = SYS_BUS_DEVICE(v2s);
+
+    memory_region_init_io(&v2s->via_mem, obj, &mos6522_q800_via2_ops, v2s,
+                          "via2", VIA_SIZE);
+    sysbus_init_mmio(sbd, &v2s->via_mem);
+
     qdev_init_gpio_in_named(DEVICE(obj), via2_irq_request, "via2-irq",
                             VIA2_IRQ_NB);
 }
@@ -1224,7 +1173,6 @@ static void mac_via_register_types(void)
 {
     type_register_static(&mos6522_q800_via1_type_info);
     type_register_static(&mos6522_q800_via2_type_info);
-    type_register_static(&mac_via_info);
 }
 
 type_init(mac_via_register_types);
diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h
index 182dcb7422..9a8bca056e 100644
--- a/include/hw/misc/mac_via.h
+++ b/include/hw/misc/mac_via.h
@@ -15,6 +15,8 @@
 #include "qom/object.h"
 
 
+#define VIA_SIZE   0x2000
+
 /* VIA 1 */
 #define VIA1_IRQ_ONE_SECOND_BIT 0
 #define VIA1_IRQ_60HZ_BIT       1
@@ -38,6 +40,8 @@ struct MOS6522Q800VIA1State {
     /*< private >*/
     MOS6522State parent_obj;
 
+    MemoryRegion via_mem;
+
     qemu_irq irqs[VIA1_IRQ_NB];
     uint8_t last_b;
 
@@ -95,23 +99,8 @@ OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA2State, MOS6522_Q800_VIA2)
 struct MOS6522Q800VIA2State {
     /*< private >*/
     MOS6522State parent_obj;
-};
-
-
-#define TYPE_MAC_VIA "mac_via"
-OBJECT_DECLARE_SIMPLE_TYPE(MacVIAState, MAC_VIA)
-
-struct MacVIAState {
-    SysBusDevice busdev;
-
-    /* MMIO */
-    MemoryRegion mmio;
-    MemoryRegion via1mem;
-    MemoryRegion via2mem;
 
-    /* VIAs */
-    MOS6522Q800VIA1State mos6522_via1;
-    MOS6522Q800VIA2State mos6522_via2;
+    MemoryRegion via_mem;
 };
 
 #endif
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 10/12] mac_via: remove explicit viaN prefix from VIA IRQ gpios
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
                   ` (8 preceding siblings ...)
  2021-08-30 10:24 ` [PATCH 09/12] mac_via: remove mac_via device Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-08-30 22:03   ` Philippe Mathieu-Daudé
  2021-09-08  6:53   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 11/12] mac_via: rename VIA2_IRQ_SLOT_BIT to VIA2_IRQ_NUBUS_BIT Mark Cave-Ayland
  2021-08-30 10:24 ` [PATCH 12/12] mac_via: add qdev gpios for nubus slot interrupts to VIA2 Mark Cave-Ayland
  11 siblings, 2 replies; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

Now that q800 VIA1 and VIA2 are completely separate devices there is no need to
add a specific device prefix to ensure that the IRQ lines remain separate.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/m68k/q800.c    | 10 ++++------
 hw/misc/mac_via.c |  9 +++------
 2 files changed, 7 insertions(+), 12 deletions(-)

diff --git a/hw/m68k/q800.c b/hw/m68k/q800.c
index ec28e69802..5ba87f789c 100644
--- a/hw/m68k/q800.c
+++ b/hw/m68k/q800.c
@@ -377,12 +377,10 @@ static void q800_init(MachineState *machine)
 
     sysbus = SYS_BUS_DEVICE(dev);
     sysbus_realize_and_unref(sysbus, &error_fatal);
-    sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in_named(via2_dev,
-                                                         "via2-irq",
-                                                         VIA2_IRQ_SCSI_BIT));
-    sysbus_connect_irq(sysbus, 1,
-                       qdev_get_gpio_in_named(via2_dev, "via2-irq",
-                                              VIA2_IRQ_SCSI_DATA_BIT));
+    sysbus_connect_irq(sysbus, 0, qdev_get_gpio_in(via2_dev,
+                                                   VIA2_IRQ_SCSI_BIT));
+    sysbus_connect_irq(sysbus, 1, qdev_get_gpio_in(via2_dev,
+                                                   VIA2_IRQ_SCSI_DATA_BIT));
     sysbus_mmio_map(sysbus, 0, ESP_BASE);
     sysbus_mmio_map(sysbus, 1, ESP_PDMA);
 
diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index 7b9f067e71..f093f7388e 100644
--- a/hw/misc/mac_via.c
+++ b/hw/misc/mac_via.c
@@ -1004,8 +1004,7 @@ static void mos6522_q800_via1_realize(DeviceState *dev, Error **errp)
     v1s->tick_offset = (uint32_t)mktimegm(&tm) + RTC_OFFSET;
 
     adb_register_autopoll_callback(adb_bus, adb_via_poll, v1s);
-    v1s->adb_data_ready = qdev_get_gpio_in_named(dev, "via1-irq",
-                                                 VIA1_IRQ_ADB_READY_BIT);
+    v1s->adb_data_ready = qdev_get_gpio_in(dev, VIA1_IRQ_ADB_READY_BIT);
 
     if (v1s->blk) {
         int64_t len = blk_getlength(v1s->blk);
@@ -1042,8 +1041,7 @@ static void mos6522_q800_via1_init(Object *obj)
     qbus_create_inplace((BusState *)&v1s->adb_bus, sizeof(v1s->adb_bus),
                         TYPE_ADB_BUS, DEVICE(v1s), "adb.0");
 
-    qdev_init_gpio_in_named(DEVICE(obj), via1_irq_request, "via1-irq",
-                            VIA1_IRQ_NB);
+    qdev_init_gpio_in(DEVICE(obj), via1_irq_request, VIA1_IRQ_NB);
 }
 
 static const VMStateDescription vmstate_q800_via1 = {
@@ -1136,8 +1134,7 @@ static void mos6522_q800_via2_init(Object *obj)
                           "via2", VIA_SIZE);
     sysbus_init_mmio(sbd, &v2s->via_mem);
 
-    qdev_init_gpio_in_named(DEVICE(obj), via2_irq_request, "via2-irq",
-                            VIA2_IRQ_NB);
+    qdev_init_gpio_in(DEVICE(obj), via2_irq_request, VIA2_IRQ_NB);
 }
 
 static const VMStateDescription vmstate_q800_via2 = {
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 11/12] mac_via: rename VIA2_IRQ_SLOT_BIT to VIA2_IRQ_NUBUS_BIT
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
                   ` (9 preceding siblings ...)
  2021-08-30 10:24 ` [PATCH 10/12] mac_via: remove explicit viaN prefix from VIA IRQ gpios Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-09-08  6:54   ` Laurent Vivier
  2021-08-30 10:24 ` [PATCH 12/12] mac_via: add qdev gpios for nubus slot interrupts to VIA2 Mark Cave-Ayland
  11 siblings, 1 reply; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

Also improve the alignment of the shifted constants.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 include/hw/misc/mac_via.h | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h
index 9a8bca056e..5168e3ce66 100644
--- a/include/hw/misc/mac_via.h
+++ b/include/hw/misc/mac_via.h
@@ -26,11 +26,11 @@
 
 #define VIA1_IRQ_NB             8
 
-#define VIA1_IRQ_ONE_SECOND (1 << VIA1_IRQ_ONE_SECOND_BIT)
-#define VIA1_IRQ_60HZ       (1 << VIA1_IRQ_60HZ_BIT)
-#define VIA1_IRQ_ADB_READY  (1 << VIA1_IRQ_ADB_READY_BIT)
-#define VIA1_IRQ_ADB_DATA   (1 << VIA1_IRQ_ADB_DATA_BIT)
-#define VIA1_IRQ_ADB_CLOCK  (1 << VIA1_IRQ_ADB_CLOCK_BIT)
+#define VIA1_IRQ_ONE_SECOND     (1 << VIA1_IRQ_ONE_SECOND_BIT)
+#define VIA1_IRQ_60HZ           (1 << VIA1_IRQ_60HZ_BIT)
+#define VIA1_IRQ_ADB_READY      (1 << VIA1_IRQ_ADB_READY_BIT)
+#define VIA1_IRQ_ADB_DATA       (1 << VIA1_IRQ_ADB_DATA_BIT)
+#define VIA1_IRQ_ADB_CLOCK      (1 << VIA1_IRQ_ADB_CLOCK_BIT)
 
 
 #define TYPE_MOS6522_Q800_VIA1 "mos6522-q800-via1"
@@ -80,18 +80,18 @@ struct MOS6522Q800VIA1State {
 
 /* VIA 2 */
 #define VIA2_IRQ_SCSI_DATA_BIT  0
-#define VIA2_IRQ_SLOT_BIT       1
+#define VIA2_IRQ_NUBUS_BIT      1
 #define VIA2_IRQ_UNUSED_BIT     2
 #define VIA2_IRQ_SCSI_BIT       3
 #define VIA2_IRQ_ASC_BIT        4
 
 #define VIA2_IRQ_NB             8
 
-#define VIA2_IRQ_SCSI_DATA  (1 << VIA2_IRQ_SCSI_DATA_BIT)
-#define VIA2_IRQ_SLOT       (1 << VIA2_IRQ_SLOT_BIT)
-#define VIA2_IRQ_UNUSED     (1 << VIA2_IRQ_SCSI_BIT)
-#define VIA2_IRQ_SCSI       (1 << VIA2_IRQ_UNUSED_BIT)
-#define VIA2_IRQ_ASC        (1 << VIA2_IRQ_ASC_BIT)
+#define VIA2_IRQ_SCSI_DATA      (1 << VIA2_IRQ_SCSI_DATA_BIT)
+#define VIA2_IRQ_NUBUS          (1 << VIA2_IRQ_NUBUS_BIT)
+#define VIA2_IRQ_UNUSED         (1 << VIA2_IRQ_SCSI_BIT)
+#define VIA2_IRQ_SCSI           (1 << VIA2_IRQ_UNUSED_BIT)
+#define VIA2_IRQ_ASC            (1 << VIA2_IRQ_ASC_BIT)
 
 #define TYPE_MOS6522_Q800_VIA2 "mos6522-q800-via2"
 OBJECT_DECLARE_SIMPLE_TYPE(MOS6522Q800VIA2State, MOS6522_Q800_VIA2)
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* [PATCH 12/12] mac_via: add qdev gpios for nubus slot interrupts to VIA2
  2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
                   ` (10 preceding siblings ...)
  2021-08-30 10:24 ` [PATCH 11/12] mac_via: rename VIA2_IRQ_SLOT_BIT to VIA2_IRQ_NUBUS_BIT Mark Cave-Ayland
@ 2021-08-30 10:24 ` Mark Cave-Ayland
  2021-09-08  6:54   ` Laurent Vivier
  11 siblings, 1 reply; 29+ messages in thread
From: Mark Cave-Ayland @ 2021-08-30 10:24 UTC (permalink / raw)
  To: qemu-devel, laurent

These will soon be required to enable nubus devices to support interrupts.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
---
 hw/misc/mac_via.c         | 23 +++++++++++++++++++++++
 include/hw/misc/mac_via.h | 10 ++++++++++
 2 files changed, 33 insertions(+)

diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
index f093f7388e..d1abcd97b5 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 = {
diff --git a/include/hw/misc/mac_via.h b/include/hw/misc/mac_via.h
index 5168e3ce66..4506abe5d0 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)
 
-- 
2.20.1



^ permalink raw reply related	[flat|nested] 29+ messages in thread

* Re: [PATCH 10/12] mac_via: remove explicit viaN prefix from VIA IRQ gpios
  2021-08-30 10:24 ` [PATCH 10/12] mac_via: remove explicit viaN prefix from VIA IRQ gpios Mark Cave-Ayland
@ 2021-08-30 22:03   ` Philippe Mathieu-Daudé
  2021-09-08  6:53   ` Laurent Vivier
  1 sibling, 0 replies; 29+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-08-30 22:03 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel, laurent

On 8/30/21 12:24 PM, Mark Cave-Ayland wrote:
> Now that q800 VIA1 and VIA2 are completely separate devices there is no need to
> add a specific device prefix to ensure that the IRQ lines remain separate.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/m68k/q800.c    | 10 ++++------
>  hw/misc/mac_via.c |  9 +++------
>  2 files changed, 7 insertions(+), 12 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 07/12] mac_via: move VIA1 reset logic from mac_via_reset() to mos6522_q800_via1_reset()
  2021-08-30 10:24 ` [PATCH 07/12] mac_via: move VIA1 reset logic from mac_via_reset() to mos6522_q800_via1_reset() Mark Cave-Ayland
@ 2021-08-30 22:04   ` Philippe Mathieu-Daudé
  2021-09-08  6:51   ` Laurent Vivier
  1 sibling, 0 replies; 29+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-08-30 22:04 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel, laurent

On 8/30/21 12:24 PM, Mark Cave-Ayland wrote:
> After this change mac_via_reset() is now empty and can be removed.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c | 22 ++++++++--------------
>  1 file changed, 8 insertions(+), 14 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 04/12] mac_via: move PRAM/RTC variables to MOS6522Q800VIA1State
  2021-08-30 10:24 ` [PATCH 04/12] mac_via: move PRAM/RTC variables " Mark Cave-Ayland
@ 2021-08-30 22:07   ` Philippe Mathieu-Daudé
  2021-09-08  6:47   ` Laurent Vivier
  1 sibling, 0 replies; 29+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-08-30 22:07 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel, laurent

On 8/30/21 12:24 PM, Mark Cave-Ayland wrote:
> The PRAM/RTC is accessed using clock and data pins on q800 VIA1 port B and so
> can be moved to MOS6522Q800VIA1State.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c         | 135 +++++++++++++++++++-------------------
>  include/hw/misc/mac_via.h |  21 +++---
>  2 files changed, 77 insertions(+), 79 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 05/12] mac_via: move ADB variables to MOS6522Q800VIA1State
  2021-08-30 10:24 ` [PATCH 05/12] mac_via: move ADB " Mark Cave-Ayland
@ 2021-08-30 22:12   ` Philippe Mathieu-Daudé
  2021-09-08  6:50   ` Laurent Vivier
  1 sibling, 0 replies; 29+ messages in thread
From: Philippe Mathieu-Daudé @ 2021-08-30 22:12 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel, laurent

On 8/30/21 12:24 PM, Mark Cave-Ayland wrote:
> The ADB is accessed using clock and data pins on q800 VIA1 port B and so can be
> moved to MOS6522Q800VIA1State.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/m68k/q800.c            |   6 +-
>  hw/misc/mac_via.c         | 169 +++++++++++++++++++-------------------
>  include/hw/misc/mac_via.h |  20 ++---
>  3 files changed, 96 insertions(+), 99 deletions(-)

> @@ -967,17 +962,10 @@ static void mac_via_realize(DeviceState *dev, Error **errp)
>      MacVIAState *m = MAC_VIA(dev);
>      MOS6522Q800VIA1State *v1s = &m->mos6522_via1;
>      MOS6522State *ms;
> -    ADBBusState *adb_bus = &m->adb_bus;
> +    ADBBusState *adb_bus = &v1s->adb_bus;
>      struct tm tm;
>      int ret;
>  
> -    /* Init VIAs 1 and 2 */
> -    object_initialize_child(OBJECT(dev), "via1", &m->mos6522_via1,
> -                            TYPE_MOS6522_Q800_VIA1);
> -
> -    object_initialize_child(OBJECT(dev), "via2", &m->mos6522_via2,
> -                            TYPE_MOS6522_Q800_VIA2);
> -

Preferably moving object_initialize_child() from realize()
to init() in a previous patch (so this patch is only about ADB):

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>


>      /* Pass through mos6522 output IRQs */
>      ms = MOS6522(&m->mos6522_via1);
>      object_property_add_alias(OBJECT(dev), "irq[0]", OBJECT(ms),
> @@ -1006,9 +994,9 @@ static void mac_via_realize(DeviceState *dev, Error **errp)
>      qemu_get_timedate(&tm, 0);
>      v1s->tick_offset = (uint32_t)mktimegm(&tm) + RTC_OFFSET;
>  
> -    adb_register_autopoll_callback(adb_bus, adb_via_poll, m);
> -    m->adb_data_ready = qdev_get_gpio_in_named(dev, "via1-irq",
> -                                               VIA1_IRQ_ADB_READY_BIT);
> +    adb_register_autopoll_callback(adb_bus, adb_via_poll, v1s);
> +    v1s->adb_data_ready = qdev_get_gpio_in_named(dev, "via1-irq",
> +                                                 VIA1_IRQ_ADB_READY_BIT);
>  
>      if (v1s->blk) {
>          int64_t len = blk_getlength(v1s->blk);
> @@ -1049,9 +1037,12 @@ static void mac_via_init(Object *obj)
>                            &m->mos6522_via2, "via2", VIA_SIZE);
>      memory_region_add_subregion(&m->mmio, VIA_SIZE, &m->via2mem);
>  
> -    /* ADB */
> -    qbus_create_inplace((BusState *)&m->adb_bus, sizeof(m->adb_bus),
> -                        TYPE_ADB_BUS, DEVICE(obj), "adb.0");
> +    /* Init VIAs 1 and 2 */
> +    object_initialize_child(obj, "via1", &m->mos6522_via1,
> +                            TYPE_MOS6522_Q800_VIA1);
> +
> +    object_initialize_child(obj, "via2", &m->mos6522_via2,
> +                            TYPE_MOS6522_Q800_VIA2);
>  }


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 01/12] mac_via: introduce new VMStateDescription for q800 VIA1 and VIA2
  2021-08-30 10:24 ` [PATCH 01/12] mac_via: introduce new VMStateDescription for q800 VIA1 and VIA2 Mark Cave-Ayland
@ 2021-09-08  6:44   ` Laurent Vivier
  0 siblings, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:44 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> Move the parent mos6522 objects from vmstate_mac_via into the new VMStateDescription
> structures to begin the process of splitting MacVIAState into separate VIA1 and
> VIA2 devices.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c | 28 ++++++++++++++++++++++++----
>  1 file changed, 24 insertions(+), 4 deletions(-)

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 02/12] mac_via: move last_b variable into q800 VIA1 VMStateDescription
  2021-08-30 10:24 ` [PATCH 02/12] mac_via: move last_b variable into q800 VIA1 VMStateDescription Mark Cave-Ayland
@ 2021-09-08  6:44   ` Laurent Vivier
  0 siblings, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:44 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> This variable is already present in MOS6522Q800VIA1State and can be moved
> immediately into the q800 VIA1 VMStateDescription.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 03/12] mac_via: move PRAM contents and block backend to MOS6522Q800VIA1State
  2021-08-30 10:24 ` [PATCH 03/12] mac_via: move PRAM contents and block backend to MOS6522Q800VIA1State Mark Cave-Ayland
@ 2021-09-08  6:46   ` Laurent Vivier
  0 siblings, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:46 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> The PRAM contents are accessed using clock and data pins on q800 VIA1 port B
> and so can be moved to MOS6522Q800VIA1State.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c         | 59 ++++++++++++++++++++-------------------
>  include/hw/misc/mac_via.h |  7 +++--
>  2 files changed, 34 insertions(+), 32 deletions(-)
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 04/12] mac_via: move PRAM/RTC variables to MOS6522Q800VIA1State
  2021-08-30 10:24 ` [PATCH 04/12] mac_via: move PRAM/RTC variables " Mark Cave-Ayland
  2021-08-30 22:07   ` Philippe Mathieu-Daudé
@ 2021-09-08  6:47   ` Laurent Vivier
  1 sibling, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:47 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> The PRAM/RTC is accessed using clock and data pins on q800 VIA1 port B and so
> can be moved to MOS6522Q800VIA1State.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c         | 135 +++++++++++++++++++-------------------
>  include/hw/misc/mac_via.h |  21 +++---
>  2 files changed, 77 insertions(+), 79 deletions(-)
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 05/12] mac_via: move ADB variables to MOS6522Q800VIA1State
  2021-08-30 10:24 ` [PATCH 05/12] mac_via: move ADB " Mark Cave-Ayland
  2021-08-30 22:12   ` Philippe Mathieu-Daudé
@ 2021-09-08  6:50   ` Laurent Vivier
  1 sibling, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:50 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> The ADB is accessed using clock and data pins on q800 VIA1 port B and so can be
> moved to MOS6522Q800VIA1State.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/m68k/q800.c            |   6 +-
>  hw/misc/mac_via.c         | 169 +++++++++++++++++++-------------------
>  include/hw/misc/mac_via.h |  20 ++---
>  3 files changed, 96 insertions(+), 99 deletions(-)
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>


^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 06/12] mac_via: move q800 VIA1 timer variables to q800 VIA1 VMStateDescription
  2021-08-30 10:24 ` [PATCH 06/12] mac_via: move q800 VIA1 timer variables to q800 VIA1 VMStateDescription Mark Cave-Ayland
@ 2021-09-08  6:50   ` Laurent Vivier
  0 siblings, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:50 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> These variables are already present in MOS6522Q800VIA1State and so it is just
> the VMStateDescription move that is needed.
> 
> With this change the mac_via VMStateDescription is now empty and can be removed
> completely.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c | 20 +++++---------------
>  1 file changed, 5 insertions(+), 15 deletions(-)

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 07/12] mac_via: move VIA1 reset logic from mac_via_reset() to mos6522_q800_via1_reset()
  2021-08-30 10:24 ` [PATCH 07/12] mac_via: move VIA1 reset logic from mac_via_reset() to mos6522_q800_via1_reset() Mark Cave-Ayland
  2021-08-30 22:04   ` Philippe Mathieu-Daudé
@ 2021-09-08  6:51   ` Laurent Vivier
  1 sibling, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:51 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> After this change mac_via_reset() is now empty and can be removed.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c | 22 ++++++++--------------
>  1 file changed, 8 insertions(+), 14 deletions(-)

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 08/12] mac_via: move VIA1 realize logic from mac_via_realize() to mos6522_q800_via1_realize()
  2021-08-30 10:24 ` [PATCH 08/12] mac_via: move VIA1 realize logic from mac_via_realize() to mos6522_q800_via1_realize() Mark Cave-Ayland
@ 2021-09-08  6:52   ` Laurent Vivier
  0 siblings, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:52 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c | 86 ++++++++++++++++++++++++-----------------------
>  1 file changed, 44 insertions(+), 42 deletions(-)
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 09/12] mac_via: remove mac_via device
  2021-08-30 10:24 ` [PATCH 09/12] mac_via: remove mac_via device Mark Cave-Ayland
@ 2021-09-08  6:52   ` Laurent Vivier
  0 siblings, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:52 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> Remove the mac_via device and wire up both q800 VIA1 and VIA2 directly for the
> m68k q800 machine.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/m68k/q800.c            | 34 +++++++++--------
>  hw/misc/mac_via.c         | 78 +++++++--------------------------------
>  include/hw/misc/mac_via.h | 21 +++--------
>  3 files changed, 36 insertions(+), 97 deletions(-)

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 10/12] mac_via: remove explicit viaN prefix from VIA IRQ gpios
  2021-08-30 10:24 ` [PATCH 10/12] mac_via: remove explicit viaN prefix from VIA IRQ gpios Mark Cave-Ayland
  2021-08-30 22:03   ` Philippe Mathieu-Daudé
@ 2021-09-08  6:53   ` Laurent Vivier
  1 sibling, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:53 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> Now that q800 VIA1 and VIA2 are completely separate devices there is no need to
> add a specific device prefix to ensure that the IRQ lines remain separate.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/m68k/q800.c    | 10 ++++------
>  hw/misc/mac_via.c |  9 +++------
>  2 files changed, 7 insertions(+), 12 deletions(-)
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 11/12] mac_via: rename VIA2_IRQ_SLOT_BIT to VIA2_IRQ_NUBUS_BIT
  2021-08-30 10:24 ` [PATCH 11/12] mac_via: rename VIA2_IRQ_SLOT_BIT to VIA2_IRQ_NUBUS_BIT Mark Cave-Ayland
@ 2021-09-08  6:54   ` Laurent Vivier
  0 siblings, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:54 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> Also improve the alignment of the shifted constants.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  include/hw/misc/mac_via.h | 22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)
> 

Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

* Re: [PATCH 12/12] mac_via: add qdev gpios for nubus slot interrupts to VIA2
  2021-08-30 10:24 ` [PATCH 12/12] mac_via: add qdev gpios for nubus slot interrupts to VIA2 Mark Cave-Ayland
@ 2021-09-08  6:54   ` Laurent Vivier
  0 siblings, 0 replies; 29+ messages in thread
From: Laurent Vivier @ 2021-09-08  6:54 UTC (permalink / raw)
  To: Mark Cave-Ayland, qemu-devel

Le 30/08/2021 à 12:24, Mark Cave-Ayland a écrit :
> These will soon be required to enable nubus devices to support interrupts.
> 
> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
> ---
>  hw/misc/mac_via.c         | 23 +++++++++++++++++++++++
>  include/hw/misc/mac_via.h | 10 ++++++++++
>  2 files changed, 33 insertions(+)
> 
Reviewed-by: Laurent Vivier <laurent@vivier.eu>



^ permalink raw reply	[flat|nested] 29+ messages in thread

end of thread, other threads:[~2021-09-08  7:02 UTC | newest]

Thread overview: 29+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-30 10:24 [PATCH 00/12] mac_via: remove MAC_VIA device and prepare for Nubus IRQs Mark Cave-Ayland
2021-08-30 10:24 ` [PATCH 01/12] mac_via: introduce new VMStateDescription for q800 VIA1 and VIA2 Mark Cave-Ayland
2021-09-08  6:44   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 02/12] mac_via: move last_b variable into q800 VIA1 VMStateDescription Mark Cave-Ayland
2021-09-08  6:44   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 03/12] mac_via: move PRAM contents and block backend to MOS6522Q800VIA1State Mark Cave-Ayland
2021-09-08  6:46   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 04/12] mac_via: move PRAM/RTC variables " Mark Cave-Ayland
2021-08-30 22:07   ` Philippe Mathieu-Daudé
2021-09-08  6:47   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 05/12] mac_via: move ADB " Mark Cave-Ayland
2021-08-30 22:12   ` Philippe Mathieu-Daudé
2021-09-08  6:50   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 06/12] mac_via: move q800 VIA1 timer variables to q800 VIA1 VMStateDescription Mark Cave-Ayland
2021-09-08  6:50   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 07/12] mac_via: move VIA1 reset logic from mac_via_reset() to mos6522_q800_via1_reset() Mark Cave-Ayland
2021-08-30 22:04   ` Philippe Mathieu-Daudé
2021-09-08  6:51   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 08/12] mac_via: move VIA1 realize logic from mac_via_realize() to mos6522_q800_via1_realize() Mark Cave-Ayland
2021-09-08  6:52   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 09/12] mac_via: remove mac_via device Mark Cave-Ayland
2021-09-08  6:52   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 10/12] mac_via: remove explicit viaN prefix from VIA IRQ gpios Mark Cave-Ayland
2021-08-30 22:03   ` Philippe Mathieu-Daudé
2021-09-08  6:53   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 11/12] mac_via: rename VIA2_IRQ_SLOT_BIT to VIA2_IRQ_NUBUS_BIT Mark Cave-Ayland
2021-09-08  6:54   ` Laurent Vivier
2021-08-30 10:24 ` [PATCH 12/12] mac_via: add qdev gpios for nubus slot interrupts to VIA2 Mark Cave-Ayland
2021-09-08  6:54   ` Laurent Vivier

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.