From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1MQLLO-0005ZN-F7 for qemu-devel@nongnu.org; Mon, 13 Jul 2009 09:13:22 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1MQLLJ-0005V1-7s for qemu-devel@nongnu.org; Mon, 13 Jul 2009 09:13:21 -0400 Received: from [199.232.76.173] (port=48471 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1MQLLI-0005Uj-Ti for qemu-devel@nongnu.org; Mon, 13 Jul 2009 09:13:16 -0400 Received: from mx2.redhat.com ([66.187.237.31]:53898) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1MQLLI-0004hv-Fp for qemu-devel@nongnu.org; Mon, 13 Jul 2009 09:13:16 -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 n6DDDFln006245 for ; Mon, 13 Jul 2009 09:13:15 -0400 From: Gerd Hoffmann Date: Mon, 13 Jul 2009 15:13:05 +0200 Message-Id: <1247490790-15783-3-git-send-email-kraxel@redhat.com> In-Reply-To: <1247490790-15783-1-git-send-email-kraxel@redhat.com> References: <1247490790-15783-1-git-send-email-kraxel@redhat.com> Subject: [Qemu-devel] [PATCH 2/7] qdev/prop: add 16bit integer type. 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/qdev-properties.c | 32 ++++++++++++++++++++++++++++++++ hw/qdev.h | 2 ++ 2 files changed, 34 insertions(+), 0 deletions(-) diff --git a/hw/qdev-properties.c b/hw/qdev-properties.c index cf1ad22..abd4b57 100644 --- a/hw/qdev-properties.c +++ b/hw/qdev-properties.c @@ -7,6 +7,33 @@ static void *prop_ptr(DeviceState *dev, Property *prop) return ptr; } +/* --- 16bit integer --- */ + +static int parse_uint16(DeviceState *dev, Property *prop, const char *str) +{ + uint16_t *ptr = prop_ptr(dev, prop); + const char *fmt; + + /* accept both hex and decimal */ + fmt = strncasecmp(str, "0x",2) == 0 ? "%" PRIx16 : "%" PRIu16; + if (sscanf(str, fmt, ptr) != 1) + return -1; + return 0; +} + +static int print_uint16(DeviceState *dev, Property *prop, char *dest, size_t len) +{ + uint16_t *ptr = prop_ptr(dev, prop); + return snprintf(dest, len, "%" PRIu16, *ptr); +} + +PropertyInfo qdev_prop_uint16 = { + .name = "uint16", + .size = sizeof(uint16_t), + .parse = parse_uint16, + .print = print_uint16, +}; + /* --- 32bit integer --- */ static int parse_uint32(DeviceState *dev, Property *prop, const char *str) @@ -183,6 +210,11 @@ int qdev_prop_set(DeviceState *dev, const char *name, void *src, size_t size) return 0; } +int qdev_prop_set_uint16(DeviceState *dev, const char *name, uint16_t value) +{ + return qdev_prop_set(dev, name, &value, sizeof(value)); +} + int qdev_prop_set_uint32(DeviceState *dev, const char *name, uint32_t value) { return qdev_prop_set(dev, name, &value, sizeof(value)); diff --git a/hw/qdev.h b/hw/qdev.h index c61ef4a..d7f51fb 100644 --- a/hw/qdev.h +++ b/hw/qdev.h @@ -128,6 +128,7 @@ void do_info_qtree(Monitor *mon); /*** qdev-properties.c ***/ +extern PropertyInfo qdev_prop_uint16; extern PropertyInfo qdev_prop_uint32; extern PropertyInfo qdev_prop_hex32; extern PropertyInfo qdev_prop_ptr; @@ -136,6 +137,7 @@ extern PropertyInfo qdev_prop_mac; /* Set properties between creation and init. */ 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); /* FIXME: Remove opaque pointer properties. */ int qdev_prop_set_ptr(DeviceState *dev, const char *name, void *value); -- 1.6.2.5