From patchwork Fri Nov 3 19:38:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Laurent Vivier X-Patchwork-Id: 834060 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=nongnu.org (client-ip=2001:4830:134:3::11; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Received: from lists.gnu.org (lists.gnu.org [IPv6:2001:4830:134:3::11]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 3yTC1Z472Jz9s7p for ; Sat, 4 Nov 2017 06:38:40 +1100 (AEDT) Received: from localhost ([::1]:38195 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eAhnY-0004Sm-RH for incoming@patchwork.ozlabs.org; Fri, 03 Nov 2017 15:38:36 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:39693) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eAhnE-0004Rj-Rx for qemu-devel@nongnu.org; Fri, 03 Nov 2017 15:38:18 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eAhnB-0001Hf-NH for qemu-devel@nongnu.org; Fri, 03 Nov 2017 15:38:16 -0400 Received: from mout.kundenserver.de ([212.227.17.10]:58661) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eAhnB-0001Ge-Cs for qemu-devel@nongnu.org; Fri, 03 Nov 2017 15:38:13 -0400 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue103 [212.227.15.183]) with ESMTPSA (Nemesis) id 0MKt72-1eAhn30xjk-0003Vl; Fri, 03 Nov 2017 20:38:05 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Fri, 3 Nov 2017 20:38:02 +0100 Message-Id: <20171103193802.11876-1-laurent@vivier.eu> X-Mailer: git-send-email 2.13.6 X-Provags-ID: V03:K0:+0VnkLLhEYP3QOympLyTxVFbCvABpopPFbV4H+PnTrpHvMbJehE jVziH+S9h6yvfs04CS0EIG9CC3tjaw//JiNUs8r5Hek3kRcSpK7KEF6ZjwP3NiRiQHSF1cd PFJr8nFXT1hz2SqN0pir8zdxOf/QmMvZDYFxjRSRR9C9rZ26TT+nOUv/3C78Rey+dPLBbOr JuSJVYDeX2OQHdm1o2AzA== X-UI-Out-Filterresults: notjunk:1; V01:K0:iaCPpbqryBA=:EnoidO7SDub8aiazE3b1PR YVaqiP8AKK8Oqyef1xAdZq1mqa900pdhDopIvn1gN1WdWQT9H/B5G/q+sBns79kENT8wAAZAC 0kcrHfZmH7HFSeSo1dnTSjzUloEi8CqMekC3gxLDUWxTZHhHw7D0G45+NFong+L6xnQO9l5fv a75StvyHQFQ/Q1r5+6iVCDFaSV1n6eQXVTez5xrOPqJeVVpvVvBv0tFPIVuqLSkxoNorsuNik dBdzgEHqFu4GJZmtZYlQ1QPKU+3Jyh6gOQKj8ns2WSo7GPnk54ZON0g+QFxD+764PHdTcb2C1 Jqty5jZjMlVugXWPzc1SfJQfj0dvgK7z29l1K/azB+BL2m2tH7OlYG5z398ulpW7vPwfVzsb9 K9OEvWWRf8uJ74H5JDa29h5HCz84BysoPRmu86REjF0ebG3oouluYHXQPuRB+hVUvvfeSC7l3 lD1Re2WgebxsR9ntWPRWIEPCKgtNYzVnWLdRmhDtMoKgFc5yNsk8fSs2rEQupp4Z+dMDQb6gE Ved2zhRSMW6ABmS84fHOnQUKG8CARa9GhL6D/2++YNt+FxiZwHNSDSoIMp7SDkU/15QpPuQYB peB1YdPig2lVz+iJ26rwu/iYJ5KRQAgUFS+mCWsyRNhJDo4243h7Drbw9BX8xv/OxK2Hg+X2N fcz7wgOWdO9r3vJCG7iVO4couLSuLsVxoEotL26iprHmQwXUyCeRYYhpKribsfeThav/vtNkl JXcY0o3eQRF8duNZf8KQB0QzyvY/Uc+Utm9SIQ== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.17.10 Subject: [Qemu-devel] [PATCH] linux-user: remove nmi.c and fw-path-provider.c 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: Alexey Kardashevskiy , Paolo Bonzini , Riku Voipio , Laurent Vivier Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Sender: "Qemu-devel" linux-user binaries don't need firmware and NMI, so don't add them in this case, move QDEV firmware functions to qdev-fw.c Signed-off-by: Laurent Vivier Acked-by: Paolo Bonzini --- hw/core/Makefile.objs | 5 +-- hw/core/qdev-fw.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++++++ hw/core/qdev.c | 77 ----------------------------------------- 3 files changed, 99 insertions(+), 79 deletions(-) create mode 100644 hw/core/qdev-fw.c diff --git a/hw/core/Makefile.objs b/hw/core/Makefile.objs index f8d7a4aaed..1240728c87 100644 --- a/hw/core/Makefile.objs +++ b/hw/core/Makefile.objs @@ -1,11 +1,12 @@ # core qdev-related obj files, also used by *-user: common-obj-y += qdev.o qdev-properties.o common-obj-y += bus.o reset.o -common-obj-y += fw-path-provider.o +common-obj-$(CONFIG_SOFTMMU) += qdev-fw.o +common-obj-$(CONFIG_SOFTMMU) += fw-path-provider.o # irq.o needed for qdev GPIO handling: common-obj-y += irq.o common-obj-y += hotplug.o -common-obj-y += nmi.o +common-obj-$(CONFIG_SOFTMMU) += nmi.o common-obj-$(CONFIG_EMPTY_SLOT) += empty_slot.o common-obj-$(CONFIG_XILINX_AXI) += stream.o diff --git a/hw/core/qdev-fw.c b/hw/core/qdev-fw.c new file mode 100644 index 0000000000..aa35e9d0ac --- /dev/null +++ b/hw/core/qdev-fw.c @@ -0,0 +1,96 @@ +/* + * qdev fw helpers + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, + * or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, see . + */ + +#include "qemu/osdep.h" +#include "hw/qdev.h" +#include "hw/fw-path-provider.h" + +const char *qdev_fw_name(DeviceState *dev) +{ + DeviceClass *dc = DEVICE_GET_CLASS(dev); + + if (dc->fw_name) { + return dc->fw_name; + } + + return object_get_typename(OBJECT(dev)); +} + +static char *bus_get_fw_dev_path(BusState *bus, DeviceState *dev) +{ + BusClass *bc = BUS_GET_CLASS(bus); + + if (bc->get_fw_dev_path) { + return bc->get_fw_dev_path(dev); + } + + return NULL; +} + +static char *qdev_get_fw_dev_path_from_handler(BusState *bus, DeviceState *dev) +{ + Object *obj = OBJECT(dev); + char *d = NULL; + + while (!d && obj->parent) { + obj = obj->parent; + d = fw_path_provider_try_get_dev_path(obj, bus, dev); + } + return d; +} + +char *qdev_get_own_fw_dev_path_from_handler(BusState *bus, DeviceState *dev) +{ + Object *obj = OBJECT(dev); + + return fw_path_provider_try_get_dev_path(obj, bus, dev); +} + +static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size) +{ + int l = 0; + + if (dev && dev->parent_bus) { + char *d; + l = qdev_get_fw_dev_path_helper(dev->parent_bus->parent, p, size); + d = qdev_get_fw_dev_path_from_handler(dev->parent_bus, dev); + if (!d) { + d = bus_get_fw_dev_path(dev->parent_bus, dev); + } + if (d) { + l += snprintf(p + l, size - l, "%s", d); + g_free(d); + } else { + return l; + } + } + l += snprintf(p + l , size - l, "/"); + + return l; +} + +char *qdev_get_fw_dev_path(DeviceState *dev) +{ + char path[128]; + int l; + + l = qdev_get_fw_dev_path_helper(dev, path, 128); + + path[l - 1] = '\0'; + + return g_strdup(path); +} diff --git a/hw/core/qdev.c b/hw/core/qdev.c index 11112951a5..49df62ba8c 100644 --- a/hw/core/qdev.c +++ b/hw/core/qdev.c @@ -27,7 +27,6 @@ #include "qemu/osdep.h" #include "hw/qdev.h" -#include "hw/fw-path-provider.h" #include "sysemu/sysemu.h" #include "qapi/qmp/qerror.h" #include "qapi/visitor.h" @@ -48,17 +47,6 @@ const VMStateDescription *qdev_get_vmsd(DeviceState *dev) return dc->vmsd; } -const char *qdev_fw_name(DeviceState *dev) -{ - DeviceClass *dc = DEVICE_GET_CLASS(dev); - - if (dc->fw_name) { - return dc->fw_name; - } - - return object_get_typename(OBJECT(dev)); -} - static void bus_remove_child(BusState *bus, DeviceState *child) { BusChild *kid; @@ -619,71 +607,6 @@ DeviceState *qdev_find_recursive(BusState *bus, const char *id) return NULL; } -static char *bus_get_fw_dev_path(BusState *bus, DeviceState *dev) -{ - BusClass *bc = BUS_GET_CLASS(bus); - - if (bc->get_fw_dev_path) { - return bc->get_fw_dev_path(dev); - } - - return NULL; -} - -static char *qdev_get_fw_dev_path_from_handler(BusState *bus, DeviceState *dev) -{ - Object *obj = OBJECT(dev); - char *d = NULL; - - while (!d && obj->parent) { - obj = obj->parent; - d = fw_path_provider_try_get_dev_path(obj, bus, dev); - } - return d; -} - -char *qdev_get_own_fw_dev_path_from_handler(BusState *bus, DeviceState *dev) -{ - Object *obj = OBJECT(dev); - - return fw_path_provider_try_get_dev_path(obj, bus, dev); -} - -static int qdev_get_fw_dev_path_helper(DeviceState *dev, char *p, int size) -{ - int l = 0; - - if (dev && dev->parent_bus) { - char *d; - l = qdev_get_fw_dev_path_helper(dev->parent_bus->parent, p, size); - d = qdev_get_fw_dev_path_from_handler(dev->parent_bus, dev); - if (!d) { - d = bus_get_fw_dev_path(dev->parent_bus, dev); - } - if (d) { - l += snprintf(p + l, size - l, "%s", d); - g_free(d); - } else { - return l; - } - } - l += snprintf(p + l , size - l, "/"); - - return l; -} - -char* qdev_get_fw_dev_path(DeviceState *dev) -{ - char path[128]; - int l; - - l = qdev_get_fw_dev_path_helper(dev, path, 128); - - path[l-1] = '\0'; - - return g_strdup(path); -} - char *qdev_get_dev_path(DeviceState *dev) { BusClass *bc;