From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:47748) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y1BYV-0007KJ-5D for qemu-devel@nongnu.org; Wed, 17 Dec 2014 05:10:13 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Y1BYO-0006YN-OG for qemu-devel@nongnu.org; Wed, 17 Dec 2014 05:10:07 -0500 Received: from mail-wi0-f174.google.com ([209.85.212.174]:52861) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Y1BYO-0006YI-Hj for qemu-devel@nongnu.org; Wed, 17 Dec 2014 05:10:00 -0500 Received: by mail-wi0-f174.google.com with SMTP id h11so15133005wiw.1 for ; Wed, 17 Dec 2014 02:10:00 -0800 (PST) From: Baptiste Reynal Date: Wed, 17 Dec 2014 11:09:39 +0100 Message-Id: <1418810981-9193-2-git-send-email-b.reynal@virtualopensystems.com> In-Reply-To: <1418810981-9193-1-git-send-email-b.reynal@virtualopensystems.com> References: <1418810981-9193-1-git-send-email-b.reynal@virtualopensystems.com> Subject: [Qemu-devel] [RFC PATCH 1/3] hw/vfio/sysbus-fdt: generic add_generic_fdt_node List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: kvmarm@lists.cs.columbia.edu, qemu-devel@nongnu.org, eric.auger@linaro.org Cc: a.motakis@virtualopensystems.com, tech@virtualopensystems.com, Baptiste Reynal , Peter Maydell Modify add_calxeda_midway_xgmac_fdt_node to make it more generic. Add multiple compatible strings support. Signed-off-by: Baptiste Reynal --- hw/arm/sysbus-fdt.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/hw/arm/sysbus-fdt.c b/hw/arm/sysbus-fdt.c index 15bb50c..125ba37 100644 --- a/hw/arm/sysbus-fdt.c +++ b/hw/arm/sysbus-fdt.c @@ -58,12 +58,12 @@ typedef struct NodeCreationPair { /* Device Specific Code */ /** - * add_calxeda_midway_xgmac_fdt_node + * add_device_fdt_node * * Generates a very simple node with following properties: * compatible string, regs, interrupts */ -static int add_calxeda_midway_xgmac_fdt_node(SysBusDevice *sbdev, void *opaque) +static int add_generic_fdt_node(SysBusDevice *sbdev, void *opaque) { PlatformBusFdtData *data = opaque; PlatformBusDevice *pbus = data->pbus; @@ -80,6 +80,18 @@ static int add_calxeda_midway_xgmac_fdt_node(SysBusDevice *sbdev, void *opaque) VFIODevice *vbasedev = &vdev->vbasedev; Object *obj = OBJECT(sbdev); + /* + * Process compatible string to deal with multiple strings + * (; is replaced by \0) + */ + char *compat = g_strdup(vdev->compat); + compat_str_len = strlen(compat) + 1; + + char *semicolon = compat; + while ((semicolon = strchr(semicolon, ';')) != NULL) { + *semicolon = '\0'; + } + mmio_base = object_property_get_int(obj, "mmio[0]", NULL); nodename = g_strdup_printf("%s/%s@%" PRIx64, parent_node, @@ -88,9 +100,8 @@ static int add_calxeda_midway_xgmac_fdt_node(SysBusDevice *sbdev, void *opaque) qemu_fdt_add_subnode(fdt, nodename); - compat_str_len = strlen(vdev->compat) + 1; qemu_fdt_setprop(fdt, nodename, "compatible", - vdev->compat, compat_str_len); + compat, compat_str_len); reg_attr = g_new(uint64_t, vbasedev->num_regions*4); @@ -140,7 +151,7 @@ fail: /* list of supported dynamic sysbus devices */ static const NodeCreationPair add_fdt_node_functions[] = { -{TYPE_VFIO_CALXEDA_XGMAC, add_calxeda_midway_xgmac_fdt_node}, +{TYPE_VFIO_CALXEDA_XGMAC, add_generic_fdt_node}, {"", NULL}, /*last element*/ }; -- 2.1.3