From nobody Tue Feb 10 03:55:46 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.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; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org ARC-Seal: i=1; a=rsa-sha256; t=1568044940; cv=none; d=zoho.com; s=zohoarc; b=ZlQfg399YFeQ2+Vbe8wCyShs/Wg/3UQ9zEqZw1xgpu4cEuxGl5irmIvUb77K6zRVBWYAlJ1eqgjAHbEg5PfTzAoYyC2taWOqwLPi5ktj5nDArAPhpNTN11gAZriwEs6QVgbYnSFnQFxzSqfJRtJQe1WZG/yrf8a505hCz7D9EFI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1568044940; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=qW5ifSqbKipwpFdWS3OxluIyWRREucVhY95wJ0M7vDU=; b=NxgeqbgslBarFjK/hczoNzmxJHqIzDJU+tw/eS1S8tETItsi05XZqhXY6ydtXtKhcEi8j5heC+S5qDW9f3loQLtomLA+7SplGuZbigeqzb7yE9fh+2NAvu93PnuD0htijs+mK6qysSxo8kBhB5jdFHpqKCkhHelDy9M9wkRMgc0= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.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 (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 1568044940845883.0689542052759; Mon, 9 Sep 2019 09:02:20 -0700 (PDT) Received: from localhost ([::1]:58402 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i7M7G-0001sP-U8 for importer@patchew.org; Mon, 09 Sep 2019 12:02:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:59585) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i7M4C-0008Oy-3D for qemu-devel@nongnu.org; Mon, 09 Sep 2019 11:59:01 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i7M4A-0001dL-4J for qemu-devel@nongnu.org; Mon, 09 Sep 2019 11:58:59 -0400 Received: from mout.kundenserver.de ([212.227.126.135]:53351) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1i7M48-0001bF-59; Mon, 09 Sep 2019 11:58:58 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue010 [212.227.15.167]) with ESMTPSA (Nemesis) id 1Mq2za-1iSt262DMw-00nBc7; Mon, 09 Sep 2019 17:58:36 +0200 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Mon, 9 Sep 2019 17:58:11 +0200 Message-Id: <20190909155813.27760-8-laurent@vivier.eu> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190909155813.27760-1-laurent@vivier.eu> References: <20190909155813.27760-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K1:dXX0A0pG8ITV2Z8PgvJaD6rrHOLQTZFzX0lXW661YBR/M2UsIrp d/VT6AB1cWQs2rTHaMxZfnDmNhFKBr/a7clAijmW/ka88Ka42qOTnYZHqhHkvn0+FZknNuN xkRhh9360kuRbMGHTee6TVFsr5zP6lkIVHNHUpt59FUDzSiGn81CPTfeftqCj+iUeZJ5ho5 ozDTOJP3Hx72fF6TsE3sg== X-UI-Out-Filterresults: notjunk:1;V03:K0:hbJ2So1mPC4=:46RetFbv06BZKzUkF6G3Rq UfbKbd8PpEq3Ep2q2+iVh0fQrQdAbZZewIeDe/cEtsQ4Jvxl93rnJlNWtmvWQxZxmBWzLacQM rjPcND93Kn2sIt12iw7MpkY0jA56KU7gVaTYyNvJ1nlyJCyQ+9+kSOsEDBIXKBF6afp/am+Rk bQC2uJetvlce/NziAVI4z+DqVkxGC6uKTMu1AJBprb70aJQuBfl7EvXFYtBUXgMI6rvd/LIjY gmXAevZ48AW0oD7m7+cu9BTKAegvITaHk93I9abKNeYqVFZWfIDj5TyalCHfhMDQPIJe0qBIh pQ1lMQWzOJwgmka2OU2BSjRRqbZ8RDLguByjRgmNBMYGK6X7/ZENoUc7XTqB7SnWpl4hV5vIP tqIPgA4W3zmbnp4RTy2dkM711Nb+FfDt3s+e7oZfMPOI/aQ8c3sWvDBNdyL8stuIKEuCIsLAb JCl8lQNdfLrjZUVSf3yCIPWPnkfubYnttfMJMctPeIcVXeveuV4OYljOrkb9k6j13b6lGZ5cR D+dLnDWOMXrkQUzEj6Jr6TBomIZEBN26QTL5giWwd5i6M7Cc/d1XZz1ZzoW9J9OpKWGcE69ZY PeP8uiLqoViNG4E9CF6ZS+JLNdNyyXMRjzqPvj+HXvw4JQCj70NsIBIC/jrpf1KiklFexMvW5 tWRNORBsRDHPuYA0PmMXLKji/yYA6dH1w68DTRWjMQR5HOZHjVSE8X4Eb/xOowQkHuI7GgsBG UTEnRTkjYei7Itn9EgIDr22VT2QXLWyACSd8rK0vurRPA7SspHRwt6Bc0xICYvbSTLWyeqbTc yMlC6/Py1KvIBX9EH5oSYiJHEcQHEhHl2P12SuFKEM+il/RTTE= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 212.227.126.135 Subject: [Qemu-devel] [PATCH v9 7/9] hw/m68k: add Nubus support for macfb video card 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: , Cc: Fam Zheng , Kevin Wolf , qemu-block@nongnu.org, Thomas Huth , Jason Wang , Mark Cave-Ayland , "Dr . David Alan Gilbert" , Max Reitz , =?UTF-8?q?Herv=C3=A9=20Poussineau?= , Gerd Hoffmann , =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , Paolo Bonzini , Aurelien Jarno , Laurent Vivier Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" From: Mark Cave-Ayland Co-developed-by: Mark Cave-Ayland Signed-off-by: Mark Cave-Ayland Signed-off-by: Laurent Vivier Reviewed-by: Herv=C3=A9 Poussineau --- hw/display/Kconfig | 1 + hw/display/macfb.c | 56 ++++++++++++++++++++++++++++++++++++++ include/hw/display/macfb.h | 21 ++++++++++++++ 3 files changed, 78 insertions(+) diff --git a/hw/display/Kconfig b/hw/display/Kconfig index 867b47673c..02163048cd 100644 --- a/hw/display/Kconfig +++ b/hw/display/Kconfig @@ -135,3 +135,4 @@ config ATI_VGA =20 config MACFB bool + depends on NUBUS diff --git a/hw/display/macfb.c b/hw/display/macfb.c index d7c5ef296e..f4fa8e3206 100644 --- a/hw/display/macfb.c +++ b/hw/display/macfb.c @@ -15,6 +15,7 @@ #include "hw/sysbus.h" #include "ui/console.h" #include "ui/pixel_ops.h" +#include "hw/nubus/nubus.h" #include "hw/display/macfb.h" #include "qapi/error.h" #include "hw/qdev-properties.h" @@ -382,12 +383,38 @@ static void macfb_sysbus_realize(DeviceState *dev, Er= ror **errp) sysbus_init_mmio(SYS_BUS_DEVICE(s), &ms->mem_vram); } =20 +const uint8_t macfb_rom[] =3D { + 255, 0, 0, 0, +}; + +static void macfb_nubus_realize(DeviceState *dev, Error **errp) +{ + NubusDevice *nd =3D NUBUS_DEVICE(dev); + MacfbNubusState *s =3D NUBUS_MACFB(dev); + MacfbNubusDeviceClass *ndc =3D MACFB_NUBUS_GET_CLASS(dev); + MacfbState *ms =3D &s->macfb; + + ndc->parent_realize(dev, errp); + + macfb_common_realize(dev, ms, errp); + memory_region_add_subregion(&nd->slot_mem, DAFB_BASE, &ms->mem_ctrl); + memory_region_add_subregion(&nd->slot_mem, VIDEO_BASE, &ms->mem_vram); + + nubus_register_rom(nd, macfb_rom, sizeof(macfb_rom), 1, 9, 0xf); +} + static void macfb_sysbus_reset(DeviceState *d) { MacfbSysBusState *s =3D MACFB(d); macfb_reset(&s->macfb); } =20 +static void macfb_nubus_reset(DeviceState *d) +{ + MacfbNubusState *s =3D NUBUS_MACFB(d); + macfb_reset(&s->macfb); +} + static Property macfb_sysbus_properties[] =3D { DEFINE_PROP_UINT32("width", MacfbSysBusState, macfb.width, 640), DEFINE_PROP_UINT32("height", MacfbSysBusState, macfb.height, 480), @@ -395,6 +422,13 @@ static Property macfb_sysbus_properties[] =3D { DEFINE_PROP_END_OF_LIST(), }; =20 +static Property macfb_nubus_properties[] =3D { + DEFINE_PROP_UINT32("width", MacfbNubusState, macfb.width, 640), + DEFINE_PROP_UINT32("height", MacfbNubusState, macfb.height, 480), + DEFINE_PROP_UINT8("depth", MacfbNubusState, macfb.depth, 8), + DEFINE_PROP_END_OF_LIST(), +}; + static void macfb_sysbus_class_init(ObjectClass *klass, void *data) { DeviceClass *dc =3D DEVICE_CLASS(klass); @@ -406,6 +440,19 @@ static void macfb_sysbus_class_init(ObjectClass *klass= , void *data) dc->props =3D macfb_sysbus_properties; } =20 +static void macfb_nubus_class_init(ObjectClass *klass, void *data) +{ + DeviceClass *dc =3D DEVICE_CLASS(klass); + MacfbNubusDeviceClass *ndc =3D MACFB_NUBUS_DEVICE_CLASS(klass); + + device_class_set_parent_realize(dc, macfb_nubus_realize, + &ndc->parent_realize); + dc->desc =3D "Nubus Macintosh framebuffer"; + dc->reset =3D macfb_nubus_reset; + dc->vmsd =3D &vmstate_macfb; + dc->props =3D macfb_nubus_properties; +} + static TypeInfo macfb_sysbus_info =3D { .name =3D TYPE_MACFB, .parent =3D TYPE_SYS_BUS_DEVICE, @@ -413,9 +460,18 @@ static TypeInfo macfb_sysbus_info =3D { .class_init =3D macfb_sysbus_class_init, }; =20 +static TypeInfo macfb_nubus_info =3D { + .name =3D TYPE_NUBUS_MACFB, + .parent =3D TYPE_NUBUS_DEVICE, + .instance_size =3D sizeof(MacfbNubusState), + .class_init =3D macfb_nubus_class_init, + .class_size =3D sizeof(MacfbNubusDeviceClass), +}; + static void macfb_register_types(void) { type_register_static(&macfb_sysbus_info); + type_register_static(&macfb_nubus_info); } =20 type_init(macfb_register_types) diff --git a/include/hw/display/macfb.h b/include/hw/display/macfb.h index 3fe2592735..26367ae2c4 100644 --- a/include/hw/display/macfb.h +++ b/include/hw/display/macfb.h @@ -40,4 +40,25 @@ typedef struct { MacfbState macfb; } MacfbSysBusState; =20 +#define MACFB_NUBUS_DEVICE_CLASS(class) \ + OBJECT_CLASS_CHECK(MacfbNubusDeviceClass, (class), TYPE_NUBUS_MACFB) +#define MACFB_NUBUS_GET_CLASS(obj) \ + OBJECT_GET_CLASS(MacfbNubusDeviceClass, (obj), TYPE_NUBUS_MACFB) + +typedef struct MacfbNubusDeviceClass { + DeviceClass parent_class; + + DeviceRealize parent_realize; +} MacfbNubusDeviceClass; + +#define TYPE_NUBUS_MACFB "nubus-macfb" +#define NUBUS_MACFB(obj) \ + OBJECT_CHECK(MacfbNubusState, (obj), TYPE_NUBUS_MACFB) + +typedef struct { + NubusDevice busdev; + + MacfbState macfb; +} MacfbNubusState; + #endif --=20 2.21.0