From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MQLhR-0003CV-LM for qemu-devel@nongnu.org; Mon, 13 Jul 2009 09:36:09 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MQLhK-0003Ac-9q for qemu-devel@nongnu.org; Mon, 13 Jul 2009 09:36:08 -0400 Received: from [199.232.76.173] (port=56424 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MQLhI-0003AQ-Mu for qemu-devel@nongnu.org; Mon, 13 Jul 2009 09:36:01 -0400 Received: from mx2.redhat.com ([66.187.237.31]:53116) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MQLhI-0001co-2D for qemu-devel@nongnu.org; Mon, 13 Jul 2009 09:36:00 -0400 From: Gerd Hoffmann Date: Mon, 13 Jul 2009 15:33:50 +0200 Message-Id: <1247492031-16104-2-git-send-email-kraxel@redhat.com> In-Reply-To: <1247492031-16104-1-git-send-email-kraxel@redhat.com> References: <1247492031-16104-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 1/2] qdev/prop: add property type. List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: paul@codesourcery.com, Gerd Hoffmann Signed-off-by: Gerd Hoffmann --- hw/qdev-addr.c | 5 +++-- hw/qdev-addr.h | 2 +- hw/qdev-properties.c | 36 ++++++++++++++++++++---------------- hw/qdev.h | 18 ++++++++++++++---- 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/hw/qdev-addr.c b/hw/qdev-addr.c index f1bf2fa..305c2d3 100644 --- a/hw/qdev-addr.c +++ b/hw/qdev-addr.c @@ -20,12 +20,13 @@ static int print_taddr(DeviceState *dev, Property *prop, char *dest, size_t len) PropertyInfo qdev_prop_taddr = { .name = "taddr", + .type = PROP_TYPE_TADDR, .size = sizeof(target_phys_addr_t), .parse = parse_taddr, .print = print_taddr, }; -int qdev_prop_set_taddr(DeviceState *dev, const char *name, target_phys_addr_t value) +void qdev_prop_set_taddr(DeviceState *dev, const char *name, target_phys_addr_t value) { - return qdev_prop_set(dev, name, &value, sizeof(value)); + qdev_prop_set(dev, name, &value, PROP_TYPE_TADDR); } diff --git a/hw/qdev-addr.h b/hw/qdev-addr.h index 389c1d6..f02bd7a 100644 --- a/hw/qdev-addr.h +++ b/hw/qdev-addr.h @@ -1,2 +1,2 @@ extern PropertyInfo qdev_prop_taddr; -int qdev_prop_set_taddr(DeviceState *dev, const char *name, target_phys_addr_t value); +void qdev_prop_set_taddr(DeviceState *dev, const char *name, target_phys_addr_t value); diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c index 3c31e31..ea937ae 100644 --- a/hw/qdev-properties.c +++ b/hw/qdev-properties.c @@ -29,6 +29,7 @@ static int print_uint16(DeviceState *dev, Property *prop, char *dest, size_t len PropertyInfo qdev_prop_uint16 = { .name = "uint16", + .type = PROP_TYPE_UINT16, .size = sizeof(uint16_t), .parse = parse_uint16, .print = print_uint16, @@ -56,6 +57,7 @@ static int print_uint32(DeviceState *dev, Property *prop, char *dest, size_t len PropertyInfo qdev_prop_uint32 = { .name = "uint32", + .type = PROP_TYPE_UINT32, .size = sizeof(uint32_t), .parse = parse_uint32, .print = print_uint32, @@ -80,6 +82,7 @@ static int print_hex32(DeviceState *dev, Property *prop, char *dest, size_t len) PropertyInfo qdev_prop_hex32 = { .name = "hex32", + .type = PROP_TYPE_UINT32, .size = sizeof(uint32_t), .parse = parse_hex32, .print = print_hex32, @@ -95,6 +98,7 @@ static int print_ptr(DeviceState *dev, Property *prop, char *dest, size_t len) PropertyInfo qdev_prop_ptr = { .name = "ptr", + .type = PROP_TYPE_PTR, .size = sizeof(void*), .print = print_ptr, }; @@ -135,6 +139,7 @@ static int print_mac(DeviceState *dev, Property *prop, char *dest, size_t len) PropertyInfo qdev_prop_mac = { .name = "mac", + .type = PROP_TYPE_MACADDR, .size = 6, .parse = parse_mac, .print = print_mac, @@ -189,40 +194,39 @@ int qdev_prop_parse(DeviceState *dev, const char *name, const char *value) return prop->info->parse(dev, prop, value); } -int qdev_prop_set(DeviceState *dev, const char *name, void *src, size_t size) +void qdev_prop_set(DeviceState *dev, const char *name, void *src, enum PropertyType type) { Property *prop; void *dst; prop = qdev_prop_find(dev, name); if (!prop) { - fprintf(stderr, "property \"%s.%s\" not found\n", - dev->info->name, name); - return -1; + fprintf(stderr, "%s: property \"%s.%s\" not found\n", + __FUNCTION__, dev->info->name, name); + abort(); } - if (prop->info->size != size) { - fprintf(stderr, "property \"%s.%s\" size mismatch (%zd / %zd)\n", - dev->info->name, name, prop->info->size, size); - return -1; + if (prop->info->type != type) { + fprintf(stderr, "%s: property \"%s.%s\" type mismatch\n", + __FUNCTION__, dev->info->name, name); + abort(); } dst = qdev_get_prop_ptr(dev, prop); - memcpy(dst, src, size); - return 0; + memcpy(dst, src, prop->info->size); } -int qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value) +void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value) { - return qdev_prop_set(dev, name, &value, sizeof(value)); + qdev_prop_set(dev, name, &value, PROP_TYPE_UINT16); } -int qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value) +void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value) { - return qdev_prop_set(dev, name, &value, sizeof(value)); + qdev_prop_set(dev, name, &value, PROP_TYPE_UINT32); } -int qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value) +void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value) { - return qdev_prop_set(dev, name, &value, sizeof(value)); + qdev_prop_set(dev, name, &value, PROP_TYPE_PTR); } void qdev_prop_set_defaults(DeviceState *dev, Property *props) diff --git a/hw/qdev.h b/hw/qdev.h index 6b35961..584617e 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -54,9 +54,19 @@ struct Property { void *defval; }; +enum PropertyType { + PROP_TYPE_UNSPEC = 0, + PROP_TYPE_UINT16, + PROP_TYPE_UINT32, + PROP_TYPE_TADDR, + PROP_TYPE_MACADDR, + PROP_TYPE_PTR, +}; + struct PropertyInfo { const char *name; size_t size; + enum PropertyType type; int (*parse)(DeviceState *dev, Property *prop, const char *str); int (*print)(DeviceState *dev, Property *prop, char *dest, size_t len); }; @@ -137,11 +147,11 @@ extern PropertyInfo qdev_prop_mac; /* Set properties between creation and init. */ void *qdev_get_prop_ptr(DeviceState *dev, Property *prop); int qdev_prop_parse(DeviceState *dev, const char *name, const char *value); -int qdev_prop_set(DeviceState *dev, const char *name, void *src, size_t size); -int qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value); -int qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value); +void qdev_prop_set(DeviceState *dev, const char *name, void *src, enum PropertyType type); +void qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value); +void qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value); /* FIXME: Remove opaque pointer properties. */ -int qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); +void qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); void qdev_prop_set_defaults(DeviceState *dev, Property *props); #endif -- 1.6.2.5