From nobody Tue Feb 10 12:09:35 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1630319279001988.2035670026822; Mon, 30 Aug 2021 03:27:59 -0700 (PDT) Received: from localhost ([::1]:52108 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1mKeWD-00006i-Iw for importer@patchew.org; Mon, 30 Aug 2021 06:27:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58908) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKeTj-0005hq-4O for qemu-devel@nongnu.org; Mon, 30 Aug 2021 06:25:24 -0400 Received: from mail.ilande.co.uk ([2001:41c9:1:41f::167]:53298 helo=mail.default.ilande.bv.iomart.io) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1mKeTb-00075j-CO for qemu-devel@nongnu.org; Mon, 30 Aug 2021 06:25:21 -0400 Received: from host86-179-186-93.range86-179.btcentralplus.com ([86.179.186.93] helo=kentang.home) by mail.default.ilande.bv.iomart.io with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mKeT8-0003D2-2v; Mon, 30 Aug 2021 11:24:51 +0100 From: Mark Cave-Ayland To: qemu-devel@nongnu.org, laurent@vivier.eu Date: Mon, 30 Aug 2021 11:24:38 +0100 Message-Id: <20210830102447.10806-4-mark.cave-ayland@ilande.co.uk> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20210830102447.10806-1-mark.cave-ayland@ilande.co.uk> References: <20210830102447.10806-1-mark.cave-ayland@ilande.co.uk> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-SA-Exim-Connect-IP: 86.179.186.93 X-SA-Exim-Mail-From: mark.cave-ayland@ilande.co.uk Subject: [PATCH 03/12] mac_via: move PRAM contents and block backend to MOS6522Q800VIA1State X-SA-Exim-Version: 4.2.1 (built Wed, 08 May 2019 21:11:16 +0000) X-SA-Exim-Scanned: Yes (on mail.default.ilande.bv.iomart.io) Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2001:41c9:1:41f::167; envelope-from=mark.cave-ayland@ilande.co.uk; helo=mail.default.ilande.bv.iomart.io X-Spam_score_int: 0 X-Spam_score: 0.0 X-Spam_bar: / X-Spam_report: (0.0 / 5.0 requ) SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZM-MESSAGEID: 1630320182150100001 Content-Type: text/plain; charset="utf-8" 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 Reviewed-by: Laurent Vivier --- 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, i= nt level) } =20 =20 -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] =3D m->data_out; - pram_update(m); + pram_update(v1s); m->cmd =3D 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 <=3D m->cmd && m->cmd <=3D REG_PRAM_SECT_LAST); sector =3D m->cmd - REG_PRAM_SECT; v1s->PRAM[sector * 32 + m->alt] =3D m->data_out; - pram_update(m); + pram_update(v1s); trace_via1_rtc_cmd_pram_sect_write(sector, m->alt, sector * 32 + m->al= t, m->data_out); m->alt =3D REG_EMPTY; @@ -965,6 +964,7 @@ static void mac_via_reset(DeviceState *dev) static void mac_via_realize(DeviceState *dev, Error **errp) { MacVIAState *m =3D MAC_VIA(dev); + MOS6522Q800VIA1State *v1s =3D &m->mos6522_via1; MOS6522State *ms; ADBBusState *adb_bus =3D &m->adb_bus; struct tm tm; @@ -1009,23 +1009,22 @@ static void mac_via_realize(DeviceState *dev, Error= **errp) m->adb_data_ready =3D qdev_get_gpio_in_named(dev, "via1-irq", VIA1_IRQ_ADB_READY_BIT); =20 - if (m->blk) { - int64_t len =3D blk_getlength(m->blk); + if (v1s->blk) { + int64_t len =3D blk_getlength(v1s->blk); if (len < 0) { error_setg_errno(errp, -len, "could not get length of backing image"); return; } - ret =3D blk_set_perm(m->blk, + ret =3D blk_set_perm(v1s->blk, BLK_PERM_CONSISTENT_READ | BLK_PERM_WRITE, BLK_PERM_ALL, errp); if (ret < 0) { return; } =20 - len =3D blk_pread(m->blk, 0, m->mos6522_via1.PRAM, - sizeof(m->mos6522_via1.PRAM)); - if (len !=3D sizeof(m->mos6522_via1.PRAM)) { + len =3D blk_pread(v1s->blk, 0, v1s->PRAM, sizeof(v1s->PRAM)); + if (len !=3D 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"); } =20 -static void postload_update_cb(void *opaque, bool running, RunState state) +static void via1_postload_update_cb(void *opaque, bool running, RunState s= tate) { - MacVIAState *m =3D MAC_VIA(opaque); + MOS6522Q800VIA1State *v1s =3D MOS6522_Q800_VIA1(opaque); =20 - qemu_del_vm_change_state_handler(m->vmstate); - m->vmstate =3D NULL; + qemu_del_vm_change_state_handler(v1s->vmstate); + v1s->vmstate =3D NULL; =20 - pram_update(m); + pram_update(v1s); } =20 -static int mac_via_post_load(void *opaque, int version_id) +static int via1_post_load(void *opaque, int version_id) { - MacVIAState *m =3D MAC_VIA(opaque); + MOS6522Q800VIA1State *v1s =3D MOS6522_Q800_VIA1(opaque); =20 - if (m->blk) { - m->vmstate =3D qemu_add_vm_change_state_handler(postload_update_cb, - m); + if (v1s->blk) { + v1s->vmstate =3D qemu_add_vm_change_state_handler( + via1_postload_update_cb, v1s); } =20 return 0; @@ -1080,7 +1079,6 @@ static const VMStateDescription vmstate_mac_via =3D { .name =3D "mac-via", .version_id =3D 2, .minimum_version_id =3D 2, - .post_load =3D mac_via_post_load, .fields =3D (VMStateField[]) { /* VIAs */ VMSTATE_BUFFER(mos6522_via1.PRAM, MacVIAState), @@ -1108,11 +1106,6 @@ static const VMStateDescription vmstate_mac_via =3D { } }; =20 -static Property mac_via_properties[] =3D { - DEFINE_PROP_DRIVE("drive", MacVIAState, blk), - DEFINE_PROP_END_OF_LIST(), -}; - static void mac_via_class_init(ObjectClass *oc, void *data) { DeviceClass *dc =3D DEVICE_CLASS(oc); @@ -1120,7 +1113,6 @@ static void mac_via_class_init(ObjectClass *oc, void = *data) dc->realize =3D mac_via_realize; dc->reset =3D mac_via_reset; dc->vmsd =3D &vmstate_mac_via; - device_class_set_props(dc, mac_via_properties); } =20 static TypeInfo mac_via_info =3D { @@ -1155,20 +1147,29 @@ static const VMStateDescription vmstate_q800_via1 = =3D { .name =3D "q800-via1", .version_id =3D 0, .minimum_version_id =3D 0, + .post_load =3D via1_post_load, .fields =3D (VMStateField[]) { VMSTATE_STRUCT(parent_obj, MOS6522Q800VIA1State, 0, vmstate_mos652= 2, MOS6522State), VMSTATE_UINT8(last_b, MOS6522Q800VIA1State), + /* RTC */ + VMSTATE_BUFFER(PRAM, MOS6522Q800VIA1State), VMSTATE_END_OF_LIST() } }; =20 +static Property mos6522_q800_via1_properties[] =3D { + DEFINE_PROP_DRIVE("drive", MOS6522Q800VIA1State, blk), + DEFINE_PROP_END_OF_LIST(), +}; + static void mos6522_q800_via1_class_init(ObjectClass *oc, void *data) { DeviceClass *dc =3D DEVICE_CLASS(oc); =20 dc->reset =3D mos6522_q800_via1_reset; dc->vmsd =3D &vmstate_q800_via1; + device_class_set_props(dc, mos6522_q800_via1_properties); } =20 static const TypeInfo mos6522_q800_via1_type_info =3D { 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 { =20 qemu_irq irqs[VIA1_IRQ_NB]; uint8_t last_b; + + /* RTC */ uint8_t PRAM[256]; + BlockBackend *blk; + VMChangeStateEntry *vmstate; =20 /* external timers */ QEMUTimer *one_second_timer; @@ -80,8 +84,6 @@ OBJECT_DECLARE_SIMPLE_TYPE(MacVIAState, MAC_VIA) struct MacVIAState { SysBusDevice busdev; =20 - VMChangeStateEntry *vmstate; - /* MMIO */ MemoryRegion mmio; MemoryRegion via1mem; @@ -101,7 +103,6 @@ struct MacVIAState { uint8_t cmd; int wprotect; int alt; - BlockBackend *blk; =20 /* ADB */ ADBBusState adb_bus; --=20 2.20.1