From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MQI1r-0006hK-W1 for qemu-devel@nongnu.org; Mon, 13 Jul 2009 05:41:00 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MQI1m-0006eX-AS for qemu-devel@nongnu.org; Mon, 13 Jul 2009 05:40:58 -0400 Received: from [199.232.76.173] (port=36376 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MQI1l-0006e9-8v for qemu-devel@nongnu.org; Mon, 13 Jul 2009 05:40:53 -0400 Received: from mx2.redhat.com ([66.187.237.31]:36089) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MQI1k-0004XU-P0 for qemu-devel@nongnu.org; Mon, 13 Jul 2009 05:40:53 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n6D9eqUh006387 for ; Mon, 13 Jul 2009 05:40:52 -0400 From: Gerd Hoffmann Date: Mon, 13 Jul 2009 11:40:44 +0200 Message-Id: <1247478048-17257-4-git-send-email-kraxel@redhat.com> In-Reply-To: <1247478048-17257-1-git-send-email-kraxel@redhat.com> References: <1247478048-17257-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 3/7] qdev/compat: compat property infrastructure. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Gerd Hoffmann Signed-off-by: Gerd Hoffmann --- hw/boards.h | 1 + hw/qdev-properties.c | 19 +++++++++++++++++++ hw/qdev.c | 1 + hw/qdev.h | 11 +++++++++++ vl.c | 2 ++ 5 files changed, 34 insertions(+), 0 deletions(-) diff --git a/hw/boards.h b/hw/boards.h index f6733b7..5a07d07 100644 --- a/hw/boards.h +++ b/hw/boards.h @@ -17,6 +17,7 @@ typedef struct QEMUMachine { int use_scsi; int max_cpus; int is_default; + struct CompatProperty *compat_props; struct QEMUMachine *next; } QEMUMachine; diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c index 3c31e31..7f58d69 100644 --- a/hw/qdev-properties.c +++ b/hw/qdev-properties.c @@ -240,3 +240,22 @@ void qdev_prop_set_defaults(DeviceState *dev, Property *props) } } +static CompatProperty *compat_props; + +void qdev_register_compat_props(CompatProperty *props) +{ + compat_props = props; +} + +void qdev_prop_set_compat(DeviceState *dev) +{ + CompatProperty *prop; + + if (!compat_props) + return; + for (prop = compat_props; prop->driver != NULL; prop++) { + if (strcmp(dev->info->name, prop->driver) != 0) + continue; + qdev_prop_parse(dev, prop->property, prop->value); + } +} diff --git a/hw/qdev.c b/hw/qdev.c index a075e86..669a642 100644 --- a/hw/qdev.c +++ b/hw/qdev.c @@ -98,6 +98,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); LIST_INSERT_HEAD(&bus->children, dev, sibling); return dev; } diff --git a/hw/qdev.h b/hw/qdev.h index 6b35961..7f70934 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -8,6 +8,8 @@ typedef struct Property Property; typedef struct PropertyInfo PropertyInfo; +typedef struct CompatProperty CompatProperty; + typedef struct DeviceInfo DeviceInfo; typedef struct BusState BusState; @@ -61,6 +63,12 @@ struct PropertyInfo { int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len); }; +struct CompatProperty { + const char *driver; + const char *property; + const char *value; +}; + /*** Board API. This should go away once we have a machine config file. ***/ DeviceState *qdev_create(BusState *bus, const char *name); @@ -144,4 +152,7 @@ int qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value); int qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); void qdev_prop_set_defaults(DeviceState *dev, Property *props); +void qdev_register_compat_props(CompatProperty *props); +void qdev_prop_set_compat(DeviceState *dev); + #endif diff --git a/vl.c b/vl.c index cdc7b8a..5402787 100644 --- a/vl.c +++ b/vl.c @@ -5911,6 +5911,8 @@ int main(int argc, char **argv, char **envp) module_call_init(MODULE_INIT_DEVICE); + if (machine->compat_props) + qdev_register_compat_props(machine->compat_props); machine->init(ram_size, boot_devices, kernel_filename, kernel_cmdline, initrd_filename, cpu_model); -- 1.6.2.5