From patchwork Tue Feb 6 20:30:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Kagan X-Patchwork-Id: 10204187 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B93E7601A1 for ; Tue, 6 Feb 2018 21:34:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A8C3528AF9 for ; Tue, 6 Feb 2018 21:34:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9A6D728C7A; Tue, 6 Feb 2018 21:34:20 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=2.0 tests=BAD_ENC_HEADER,BAYES_00, DKIM_SIGNED, RCVD_IN_DNSWL_HI, T_DKIM_INVALID autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id DC97828AF9 for ; Tue, 6 Feb 2018 21:34:19 +0000 (UTC) Received: from localhost ([::1]:37444 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ejAsc-0003Sq-Oc for patchwork-qemu-devel@patchwork.kernel.org; Tue, 06 Feb 2018 16:34:18 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:45198) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ej9uW-0001eS-1j for qemu-devel@nongnu.org; Tue, 06 Feb 2018 15:32:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ej9uS-0003Vb-Mw for qemu-devel@nongnu.org; Tue, 06 Feb 2018 15:32:12 -0500 Received: from mail-db5eur01on0138.outbound.protection.outlook.com ([104.47.2.138]:6562 helo=EUR01-DB5-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1ej9uS-0003T5-DT for qemu-devel@nongnu.org; Tue, 06 Feb 2018 15:32:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=virtuozzo.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=CbtOpK8aBvq9zMNKMIECWEhiKCQL8vnhJzxbIv2vchM=; b=dSsOjP3zF0wxLCljXjcZfZ861lOsbCspUJqBwRvSBQ5sqLRCfoL6dR+zKiQTix0knlDSz+UMD9prbLn3Jv/hm/ykR7M8CFHdskrgp/Cun/ZhxWCehK/SDECHq6SfdWZ4lgWn35xX332gLrzS6eDOiHo55RF5ucgz2oUTejlFh7s= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=rkagan@virtuozzo.com; Received: from rkaganb.sw.ru (195.214.232.6) by VI1PR0801MB1983.eurprd08.prod.outlook.com (2603:10a6:800:8a::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.464.11; Tue, 6 Feb 2018 20:32:03 +0000 From: Roman Kagan To: qemu-devel@nongnu.org Date: Tue, 6 Feb 2018 23:30:47 +0300 Message-Id: <20180206203048.11096-34-rkagan@virtuozzo.com> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180206203048.11096-1-rkagan@virtuozzo.com> References: <20180206203048.11096-1-rkagan@virtuozzo.com> MIME-Version: 1.0 X-Originating-IP: [195.214.232.6] X-ClientProxiedBy: HE1PR0301CA0008.eurprd03.prod.outlook.com (2603:10a6:3:76::18) To VI1PR0801MB1983.eurprd08.prod.outlook.com (2603:10a6:800:8a::16) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 5c19f384-2ed8-446f-aedd-08d56da0afcb X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(7168020)(4627221)(201703031133081)(201702281549075)(5600026)(4604075)(2017052603307)(7153060)(7193020); SRVR:VI1PR0801MB1983; X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1983; 3:gxdg4+bbhrGFDR57tR9xiAY+i8qf369uoISNj7CVViw9qeYSVMSxNtl5yn4m1ekCkPLYqaue8cGS0LtC9Tgs2BVeaUjTQRsuSPVDaZmjkS/ppQPRMeYmVhZKEqh8kOE2sX4Fwq8pkQytsKfz0qu4mqHHTm0IHhrEHXpGT3/kwlE58lOugrk3bOrsS4Sv642ztAgu+8s+mjLDISyKKX82nUrG7IhojhFPRGZ4/zbDMxqjRciE695Tt5zshYPpcEM3; 25:QmwPKgoQt4s2vEH5hIM31Uews47Fdp13qXsZ+Vtl5d1zCjn2C79wDvNJITg397kkPfytboPigYzTiHgaz+oSnvqVS9zaEIfhEXcQEIyZ4SuyCXlq1wkMMnqi+3Ioi7tEsMwD07F4SZ1gedwU+nZzvLdsvLF9vqjJItDBbLregdEPPrvyFcQLN0xWVltzH5uCO7FcNPsqSryoNzTQUfbzJXZ6L+AGveJOagfBJB0lif4vW2CGxIZx1agvmiL8p12SeUBD/CXOEGVktJ9bVysN9Oe4kxPIXiI7S3+MlFGguw1NflcnDYglWXNc4dRyFpiD1MxJ61IrnB0U3EpP/GU2yA==; 31:1CqO6eZ6D344/ChXVRzX10AfrdVN6DztYQvQ8XeBSQV2lN9sUelQvg68Jievsgae8c25/6Ef/N/k9ZUsH3uH4cjXiX6D8VuHjPbSJATaUbcl+LXXpUxftH3UGIsleC5uOlH5KfVZ2XP5+0+jlTe1kY3veUtgE3XR6QP6oJKUA3xfzltjSeEtKheI/vXvVEbKXKiiC7Vs+mWWGWiv38L1jdJkpHlEzVw+KKbXAQmD8fY= X-MS-TrafficTypeDiagnostic: VI1PR0801MB1983: X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1983; 20:FdwoUxz6LdSNjdojB+zun7EAApsKjEq1jqjKC9cpfEJtFi7PJDB6rbkB60dvhVa6EXELMbvkF7IJ0Awgxr4oubEAqdzEhHT6Evl+JHiaJNglTLb5EDwJsVNnhdOM+qOpeViFZfhYbHtVp+Ce+oClQEYiwUUoVoJCAffkAgr9/CvAkOxTr05EYu6zU8ZueCXvDxTXVN5JnW5cZbz3Fdb/JUq9fXczb90bDqrjQ8ov5MyI1QcE5q41UUOwd4mc11NZs3IJjl1IQ2rDJdj9qOIkaMVIzADyoFnuUD3B6yy36pTA1EFh5nf7FVbGJ5HCYmNarAKOVJhkbcjgN0WzA70KoR5dedL/4qH3cUsW+iDeOLKn0qsQx3vf/k7A4B6keT+ABFb7I9SwRuUK7wbUx6ICxiOxDfPDa3iVH0emOKdZ9Tc=; 4:lu97hZgx4zhqyATWjhsALIJjTQ9OukGPcX4SK0iIxM1wqhnJdxzC6D68fkKdY6hP5YlBZMU24Bqa7nHvEWGhxQ4CuP3x/ggLnWXlStPVIE5APOYkY6OHyIeLuw3MkFzmSC1nwihpsRf8wjV1U4q4F0mQZT9BgzINiP2PwcyvC8VgHtd7pKwmWHwpU5NVviD5sSBxQaFigGNHMorhPdMjMF36xZG8qBNBneOz7RbEtDE40IxXeAj50TgfWr5DGdTYgYjN61yK+3oj/UjD2apmsw== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040501)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(3231101)(2400082)(944501161)(10201501046)(6041288)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123564045)(20161123562045)(20161123560045)(6072148)(201708071742011); SRVR:VI1PR0801MB1983; BCL:0; PCL:0; RULEID:; SRVR:VI1PR0801MB1983; X-Forefront-PRVS: 0575F81B58 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10019020)(1496009)(396003)(366004)(376002)(39380400002)(39850400004)(346002)(189003)(199004)(16586007)(53936002)(305945005)(54906003)(7736002)(3846002)(316002)(105586002)(2361001)(106356001)(2351001)(6116002)(1076002)(50226002)(8936002)(81156014)(5660300001)(8676002)(81166006)(7416002)(2950100002)(6666003)(6916009)(76176011)(86362001)(68736007)(66066001)(16526019)(47776003)(50466002)(4326008)(97736004)(26005)(6512007)(51416003)(2906002)(52116002)(386003)(6506007)(59450400001)(48376002)(55236004)(36756003)(53416004)(69596002)(6486002)(478600001)(186003)(25786009)(21314002)(217873001); DIR:OUT; SFP:1102; SCL:1; SRVR:VI1PR0801MB1983; H:rkaganb.sw.ru; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: virtuozzo.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; VI1PR0801MB1983; 23:tRGh8iPymaHlReyz6KI8t4elGdQzb+0SdS+EMst?= =?us-ascii?Q?HAl8OalQ1pvkSztkdncADglr638iQiBDv4yFKQT0czybRsKDEWObiWPz/Kb7?= =?us-ascii?Q?WWZ9r6HFqSbtfyjbgiPHtXQp8v+hQe15h1bYpIU/9g3ZPlGsU0SNsKfp3w4e?= =?us-ascii?Q?VS2EuP/EBPMha8qMB0LmbQ8058I/cBuV6LgqrGU8t/Kqg7CUt5AEXSAeAkBX?= =?us-ascii?Q?bl/kk6mLIHV3/8Hk9TA4MJP25xQnRqrL/MUfCypKjuQ74eyhyOWwAGNqa0PG?= =?us-ascii?Q?AFg5zR8Bi1MvBl1+1e+RSFLJieFXECZQ6bVIZiZ0CTorsipGRi64U6bFZZM+?= =?us-ascii?Q?o1c24xS7Ki+ne5hEaZpXERX39YBnaGCEeo7dvAL/eTfCzSMdYAehWj/gUPaU?= =?us-ascii?Q?N/6fB3IVcQ4KtB0tD6hhvAKOf6APGN76eBONFdGgQY4KTlm2CDUdJlLTttPo?= =?us-ascii?Q?21IFaiUPEi9VN6LfsG3mWH0kBw4GjNX9oncap+AI1neQ0RLrQRQO0GkrIF6I?= =?us-ascii?Q?sJZKRfJ7Ki5Wnyo6C6ECufmpO311tSAF7bpCPJP9aNT4y7K+ofq6QxQBCSo7?= =?us-ascii?Q?3M91TR9zQaV2mnOp8OikmeDsQyS2AA8FkQI0RA39TUjGEfmAXEKOERcj3Fm2?= =?us-ascii?Q?e2q3DsquBrejoi9H+Q2ufMIldDH1lDpIC3rxhW9ormnn+QGQe88zeOTJ8WFK?= =?us-ascii?Q?R0lzTyfjR2GXHgY0gxi+8Lt8JZc4gj3CRSDarFrtehIFyP6dLwJbNAlUCWU7?= =?us-ascii?Q?T/+O7tBgTuKwDUxDs+fUKpmIMw+yB+MD4PVnoa09/cbZiWctmOCWQXHUoyi3?= =?us-ascii?Q?KB8w8RzVScCpjnvis7j+DudeqMlJ00zVzNpmb9zM/WC0cumSuTm9eJWJWIPo?= =?us-ascii?Q?/DuenNMQbBFoPd7C0RrWlMw7FoBz04jTfg8Gb9NwZoufHuAE+Tq7E+xsY6/5?= =?us-ascii?Q?9ozsZDOPdza852VZSLkq15haJllywV7wnc3IvlA/NAYq1W3Tre1mR/T/4gWK?= =?us-ascii?Q?GTWwz4vcW5N5PBESWH6Fi0RGxGC4KqaE5elXx/Mu1Aa0nt5EQTM25l3erer3?= =?us-ascii?Q?/LpVCu+m3/eqHOvlyX+r1YCf78MJWcNMUAE9zFRj/kgrNY8ZvU7Oh25zc7rp?= =?us-ascii?Q?iAh/rnelVwYYJxi7NTvTQFCxSiGq2ud/1/zjfjv1ThfE/vaTBe7D45sJvc0U?= =?us-ascii?Q?5swMXl+vPOS/3vV5YBrh0rkyoQ9KF3roPiTYYnDXjyZ9SHY0HhinzaujBA6C?= =?us-ascii?Q?WJyfRSDEQ++4ymkZhuk93Pvqj93fE0Ga3pMUyQ8zCqWmMQqtWt7Fe7CaEBaz?= =?us-ascii?Q?680d5mRQG9WT19+uC1P9DNafx+zjJdAYiZGCSUdoNHCan6A5Ox99V4qKK3o0?= =?us-ascii?Q?C6jMMVA=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1983; 6:C0HX4AZDVI3H7Sz3zx50WuZAcoGLOHi5+vKBsz0rDBSbIJEafFDMGxIpXrcl/P3qhw9+jdaZoFArQMjrElPkdwZ5gY/BOIFRixPqujlJHHudYmoPCOkuCt1ESyXxaH0O3Dn5jiN0Fee/V/PxK6SQ5dIXtNnBXr7oqXKNmZh5W+BeIGnNMcequbNZU7JaZY76aFcb74k/E6VSc0zRQH+Z7nVdGuM+sw1Jn2EBSNeNmwukEPKnkc3RgeajZGO0NYYoTAfiZDU8WwChM57TDWxp+mpCxcxwA8ds1x4gFgW5uutOlYLHsHCHtqZwGF3eX2Mtd215YSA7Js81EcDxdcsrf9C/xcnJ6FsU8TlaBo2mD+w=; 5:DycI9ijEvtH92IA8vhtuxmG9ywc/mly6x8K3PQ9ybxufp71WUu7mGsUJIs6WfRAHUkGvpDYgD9vnw78IN5WIS/FTlD+8mOHslEFKtp9sKS/29mp1+jqV7UcL6DFyRuX/kaCrw1ZNPKeitWbNUygDHN7Uo+5f05GQxELnT0oxH6Y=; 24:5dwMe51yw/jpP4gBceLDCdlsMrAQ00hgVNr6zmjioSxhGMYHUBRMJu6X7MvwKbanUI+MSH660/kPLv+tSaLHBITiB0flQ4h9Iv8+ER6+WgM=; 7:clnsaii/T2gr0wPJrubBBAYEdM6S3ttAIi+GbkoxNpUUEc18WnxaHL47P0cHGPISsCxeZv9+zyKy9Do4ZpDBEYCi+HdSJCv0mM21BAObINO3jaUFLhZaJPX1RPD7vmhk3FOVrdX/YMcaHgZN0tLyxEDX2kP29A41QjKhUtxLDHeENFRtS4O6sZGHWHStNP2+5/ncFeyBm4BAl1xdov96bjs3ZiNGkUvXLEJQRiyajC+fW8LUuCXHwmQfsO/og1Rg SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; VI1PR0801MB1983; 20:hYSamrwm93IjLmrTyZO5ZIwdfcnBnyL7YMs7QV8qjxqrSjbs5bUSnCEcIvjc45Y68bI42b3DgMYrabO5JEy1Lmn+MRvtKlb7O9gM/WTUZ07Ee6nLLuDDshjyMtMas9IIuwGuihOn/dQtczdD9sH/OHGmw98GrTgkdVpfE8rR1Gw= X-OriginatorOrg: virtuozzo.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2018 20:32:03.9193 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 5c19f384-2ed8-446f-aedd-08d56da0afcb X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 0bc7f26d-0264-416e-a6fc-8352af79c58f X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI1PR0801MB1983 X-detected-operating-system: by eggs.gnu.org: Windows 7 or 8 [fuzzy] X-Received-From: 104.47.2.138 Subject: [Qemu-devel] [RFC PATCH 33/34] vmbus: add support for rom files X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Ben Warren , Konrad Rzeszutek Wilk , Krish Sadhukhan , "Marcos E. Matsunaga" , Jan Dakinevich , Vadim Rozenfeld , "Denis V. Lunev" , si-wei liu , Paolo Bonzini , Vitaly Kuznetsov , Cathy Avery Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP In order to leverage third-party drivers for VMBus devices in firmware (in particular, there's a case with iPXE driver for hv-net in SeaBIOS and OVMF), introduce an infrastructure to supply such drivers as option ROMs. To make it easy for the firmware to locate such ROMs, they are stored in fw_cfg with names "vmbus/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.rom" for default class ROMs (where xxx... is the class GUID) and "vmbus/dev/yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy.rom" for per-device (i.e. specified via .romfile property) ROMs (where yyy... is the device instance GUID). The format and the calling convention for the ROMs is out of scope for this patch: QEMU doesn't try to interpret them. Signed-off-by: Roman Kagan --- include/hw/vmbus/vmbus.h | 3 +++ hw/vmbus/vmbus.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/include/hw/vmbus/vmbus.h b/include/hw/vmbus/vmbus.h index cdb5180796..847edc08d7 100644 --- a/include/hw/vmbus/vmbus.h +++ b/include/hw/vmbus/vmbus.h @@ -49,6 +49,8 @@ typedef struct VMBusDeviceClass { int (*open_channel) (VMBusDevice *vdev); void (*close_channel) (VMBusDevice *vdev); VMBusChannelNotifyCb chan_notify_cb; + + const char *romfile; } VMBusDeviceClass; typedef struct VMBusDevice { @@ -57,6 +59,7 @@ typedef struct VMBusDevice { uint16_t num_channels; VMBusChannel *channels; AddressSpace *dma_as; + char *romfile; } VMBusDevice; extern const VMStateDescription vmstate_vmbus_dev; diff --git a/hw/vmbus/vmbus.c b/hw/vmbus/vmbus.c index 42d12dfdf6..c2aec004e7 100644 --- a/hw/vmbus/vmbus.c +++ b/hw/vmbus/vmbus.c @@ -12,6 +12,7 @@ #include "qapi/error.h" #include "hw/vmbus/vmbus.h" #include "hw/sysbus.h" +#include "hw/loader.h" #include "trace.h" #define TYPE_VMBUS "vmbus" @@ -2061,6 +2062,36 @@ unmap: cpu_physical_memory_unmap(int_map, len, 1, is_dirty); } +static void vmbus_install_rom(VMBusDevice *vdev) +{ + VMBusDeviceClass *vdc = VMBUS_DEVICE_GET_CLASS(vdev); + VMBus *vmbus = VMBUS(qdev_get_parent_bus(DEVICE(vdev))); + BusChild *child; + char uuid[UUID_FMT_LEN + 1]; + char romname[10 + UUID_FMT_LEN + 4 + 1]; + + if (vdev->romfile) { + /* device-specific rom */ + qemu_uuid_unparse(&vdc->instanceid, uuid); + snprintf(romname, sizeof(romname), "vmbus/dev/%s.rom", uuid); + rom_add_file(vdev->romfile, romname, 0, -1, true, NULL, NULL); + } else if (vdc->romfile) { + /* class-wide rom */ + QTAILQ_FOREACH(child, &BUS(vmbus)->children, sibling) { + VMBusDevice *chlddev = VMBUS_DEVICE(child->child); + + /* another device of the same class has already installed it */ + if (chlddev != vdev && !chlddev->romfile && + VMBUS_DEVICE_GET_CLASS(chlddev) == vdc) { + return; + } + } + qemu_uuid_unparse(&vdc->classid, uuid); + snprintf(romname, sizeof(romname), "vmbus/%s.rom", uuid); + rom_add_file(vdc->romfile, romname, 0, -1, true, NULL, NULL); + } +} + static void vmbus_dev_realize(DeviceState *dev, Error **errp) { VMBusDevice *vdev = VMBUS_DEVICE(dev); @@ -2098,6 +2129,8 @@ static void vmbus_dev_realize(DeviceState *dev, Error **errp) goto error_out; } + vmbus_install_rom(vdev); + if (vdc->vmdev_realize) { vdc->vmdev_realize(vdev, &err); if (err) { @@ -2145,6 +2178,11 @@ static void vmbus_dev_unrealize(DeviceState *dev, Error **errp) free_channels(vmbus, vdev); } +static Property vmbus_dev_props[] = { + DEFINE_PROP_STRING("romfile", VMBusDevice, romfile), + DEFINE_PROP_END_OF_LIST() +}; + static void vmbus_dev_class_init(ObjectClass *klass, void *data) { DeviceClass *kdev = DEVICE_CLASS(klass); @@ -2152,6 +2190,7 @@ static void vmbus_dev_class_init(ObjectClass *klass, void *data) kdev->realize = vmbus_dev_realize; kdev->unrealize = vmbus_dev_unrealize; kdev->reset = vmbus_dev_reset; + kdev->props = vmbus_dev_props; } static int vmbus_dev_post_load(void *opaque, int version_id)