From patchwork Tue Dec 8 12:11:33 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gerd Hoffmann X-Patchwork-Id: 40612 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from lists.gnu.org (lists.gnu.org [199.232.76.165]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by ozlabs.org (Postfix) with ESMTPS id 37BBDB7B3E for ; Tue, 8 Dec 2009 23:27:00 +1100 (EST) Received: from localhost ([127.0.0.1]:45391 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NHz9c-0002TZ-I9 for incoming@patchwork.ozlabs.org; Tue, 08 Dec 2009 07:26:56 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NHyvJ-0005f8-DF for qemu-devel@nongnu.org; Tue, 08 Dec 2009 07:12:09 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NHyvD-0005cl-8R for qemu-devel@nongnu.org; Tue, 08 Dec 2009 07:12:07 -0500 Received: from [199.232.76.173] (port=44193 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NHyvD-0005cd-4F for qemu-devel@nongnu.org; Tue, 08 Dec 2009 07:12:03 -0500 Received: from mx1.redhat.com ([209.132.183.28]:5345) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NHyvC-000822-Ls for qemu-devel@nongnu.org; Tue, 08 Dec 2009 07:12:02 -0500 Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id nB8CC1dZ004549 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 8 Dec 2009 07:12:02 -0500 Received: from zweiblum.home.kraxel.org (vpn2-9-91.ams2.redhat.com [10.36.9.91]) by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id nB8CBxkL009863; Tue, 8 Dec 2009 07:11:59 -0500 Received: by zweiblum.home.kraxel.org (Postfix, from userid 500) id E5BAB7010C; Tue, 8 Dec 2009 13:11:57 +0100 (CET) From: Gerd Hoffmann To: qemu-devel@nongnu.org Date: Tue, 8 Dec 2009 13:11:33 +0100 Message-Id: <1260274314-2906-2-git-send-email-kraxel@redhat.com> In-Reply-To: <1260274314-2906-1-git-send-email-kraxel@redhat.com> References: <1260274314-2906-1-git-send-email-kraxel@redhat.com> X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21 X-detected-operating-system: by monty-python.gnu.org: Genre and OS details not recognized. Cc: Gerd Hoffmann , agraf@suse.de, lcapitulino@redhat.com Subject: [Qemu-devel] [FOR 0.12 PATCH v4 01/22] qdev: make compat stuff more generic X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org Errors-To: qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org This patch renames the compat properties into global properties and makes them more generic. The compatibility stuff is only one of multiple possible users now. Signed-off-by: Gerd Hoffmann --- hw/boards.h | 2 +- hw/pc.c | 2 +- hw/qdev-properties.c | 22 ++++++++++++++-------- hw/qdev.c | 2 +- hw/qdev.h | 10 ++++++---- vl.c | 2 +- 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/hw/boards.h b/hw/boards.h index d889341..7a0f20f 100644 --- a/hw/boards.h +++ b/hw/boards.h @@ -20,7 +20,7 @@ typedef struct QEMUMachine { int use_scsi; int max_cpus; int is_default; - CompatProperty *compat_props; + GlobalProperty *compat_props; struct QEMUMachine *next; } QEMUMachine; diff --git a/hw/pc.c b/hw/pc.c index 8c1b7ea..147a9a7 100644 --- a/hw/pc.c +++ b/hw/pc.c @@ -1298,7 +1298,7 @@ static QEMUMachine pc_machine_v0_10 = { .desc = "Standard PC, qemu 0.10", .init = pc_init_pci, .max_cpus = 255, - .compat_props = (CompatProperty[]) { + .compat_props = (GlobalProperty[]) { { .driver = "virtio-blk-pci", .property = "class", diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c index bda6699..fe106bd 100644 --- a/hw/qdev-properties.c +++ b/hw/qdev-properties.c @@ -593,21 +593,27 @@ void qdev_prop_set_defaults(DeviceState *dev, Property *props) } } -static CompatProperty *compat_props; +static QTAILQ_HEAD(, GlobalProperty) global_props = QTAILQ_HEAD_INITIALIZER(global_props); -void qdev_prop_register_compat(CompatProperty *props) +void qdev_prop_register_global(GlobalProperty *prop) { - compat_props = props; + QTAILQ_INSERT_TAIL(&global_props, prop, next); } -void qdev_prop_set_compat(DeviceState *dev) +void qdev_prop_register_global_list(GlobalProperty *props) { - CompatProperty *prop; + int i; - if (!compat_props) { - return; + for (i = 0; props[i].driver != NULL; i++) { + qdev_prop_register_global(props+i); } - for (prop = compat_props; prop->driver != NULL; prop++) { +} + +void qdev_prop_set_globals(DeviceState *dev) +{ + GlobalProperty *prop; + + QTAILQ_FOREACH(prop, &global_props, next) { if (strcmp(dev->info->name, prop->driver) != 0) { continue; } diff --git a/hw/qdev.c b/hw/qdev.c index 13c9fe2..b6bd4ae 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -103,7 +103,7 @@ DeviceState *qdev_create(BusState *bus, const char *name) dev->parent_bus = bus; qdev_prop_set_defaults(dev, dev->info->props); qdev_prop_set_defaults(dev, dev->parent_bus->info->props); - qdev_prop_set_compat(dev); + qdev_prop_set_globals(dev); QLIST_INSERT_HEAD(&bus->children, dev, sibling); if (qdev_hotplug) { assert(bus->allow_hotplug); diff --git a/hw/qdev.h b/hw/qdev.h index 8d53754..bbcdba1 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -92,11 +92,12 @@ struct PropertyInfo { int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len); }; -struct CompatProperty { +typedef struct GlobalProperty { const char *driver; const char *property; const char *value; -}; + QTAILQ_ENTRY(GlobalProperty) next; +} GlobalProperty; /*** Board API. This should go away once we have a machine config file. ***/ @@ -256,8 +257,9 @@ void qdev_prop_set_macaddr(DeviceState *dev, const char *name, uint8_t *value); void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); void qdev_prop_set_defaults(DeviceState *dev, Property *props); -void qdev_prop_register_compat(CompatProperty *props); -void qdev_prop_set_compat(DeviceState *dev); +void qdev_prop_register_global(GlobalProperty *prop); +void qdev_prop_register_global_list(GlobalProperty *props); +void qdev_prop_set_globals(DeviceState *dev); /* This is a nasty hack to allow passing a NULL bus to qdev_create. */ extern struct BusInfo system_bus_info; diff --git a/vl.c b/vl.c index 09a0ec5..a242a11 100644 --- a/vl.c +++ b/vl.c @@ -5779,7 +5779,7 @@ int main(int argc, char **argv, char **envp) } if (machine->compat_props) { - qdev_prop_register_compat(machine->compat_props); + qdev_prop_register_global_list(machine->compat_props); } machine->init(ram_size, boot_devices, kernel_filename, kernel_cmdline, initrd_filename, cpu_model);