From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from zen.linaro.local ([81.128.185.34]) by smtp.gmail.com with ESMTPSA id 143sm2415112wmv.18.2015.11.26.04.06.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Nov 2015 04:06:14 -0800 (PST) Received: from zen.linaro.local (localhost [127.0.0.1]) by zen.linaro.local (Postfix) with ESMTPS id E1D013E0146; Thu, 26 Nov 2015 12:06:13 +0000 (GMT) References: <1447946528-1533-1-git-send-email-eric.auger@linaro.org> <1447946528-1533-4-git-send-email-eric.auger@linaro.org> User-agent: mu4e 0.9.15; emacs 24.5.50.4 From: Alex =?utf-8?Q?Benn=C3=A9e?= To: Eric Auger Cc: eric.auger@st.com, qemu-devel@nongnu.org, qemu-arm@nongnu.org, alex.williamson@redhat.com, peter.maydell@linaro.org, thomas.lendacky@amd.com, b.reynal@virtualopensystems.com, patches@linaro.org, suravee.suthikulpanit@amd.com, pbonzini@redhat.com, christoffer.dall@linaro.org Subject: Re: [Qemu-devel] [RESEND RFC 3/6] device_tree: introduce qemu_fdt_node_path In-reply-to: <1447946528-1533-4-git-send-email-eric.auger@linaro.org> Date: Thu, 26 Nov 2015 12:06:13 +0000 Message-ID: <8737vtyngq.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-TUID: WGKIbmM0t1Wx Eric Auger writes: > This new helper routine returns the node path of a device > referred to by its name and compat string. > > Signed-off-by: Eric Auger > --- > device_tree.c | 40 ++++++++++++++++++++++++++++++++++++++++ > include/sysemu/device_tree.h | 3 +++ > 2 files changed, 43 insertions(+) > > diff --git a/device_tree.c b/device_tree.c > index 58a5329..f184e3c 100644 > --- a/device_tree.c > +++ b/device_tree.c > @@ -171,6 +171,46 @@ static int findnode_nofail(void *fdt, const char *node_path) > return offset; > } > > +/** > + * qemu_fdt_node_path > + * > + * return the node path of a device, referred to by its node name > + * and its compat string > + * fdt: pointer to the dt blob > + * name: name of the device > + * compat: compatibility string of the device > + * > + * returns the node path > + */ > +int qemu_fdt_node_path(void *fdt, const char *name, char *compat, > + char **node_path) > +{ > + int offset = 0, len; > + const char *iter_name; > + char path[256]; > + int ret; > + > + *node_path = NULL; > + while (1) { > + offset = fdt_node_offset_by_compatible(fdt, offset, compat); > + if (offset == -FDT_ERR_NOTFOUND) { Is this not the only error code fdt_node_offset_by_compatible() won't return? > + break; > + } > + iter_name = fdt_get_name(fdt, offset, &len); > + if (!strncmp(iter_name, name, len)) { is it possible for fdt_get_name to fail here and give you NULL and -len? > + goto found; > + } > + } > + return offset; > + > +found: > + ret = fdt_get_path(fdt, offset, path, 256); > + if (!ret) { > + *node_path = g_strdup(path); > + } > + return ret; > +} > + > int qemu_fdt_setprop(void *fdt, const char *node_path, > const char *property, const void *val, int size) > { > diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h > index 307e53d..f9e6e6e 100644 > --- a/include/sysemu/device_tree.h > +++ b/include/sysemu/device_tree.h > @@ -18,6 +18,9 @@ void *create_device_tree(int *sizep); > void *load_device_tree(const char *filename_path, int *sizep); > void *load_device_tree_from_sysfs(void); > > +int qemu_fdt_node_path(void *fdt, const char *name, char *compat, > + char **node_path); > + > int qemu_fdt_setprop(void *fdt, const char *node_path, > const char *property, const void *val, int size); > int qemu_fdt_setprop_cell(void *fdt, const char *node_path, -- Alex Bennée From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36559) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a1vJc-0003K6-Po for qemu-devel@nongnu.org; Thu, 26 Nov 2015 07:06:21 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a1vJY-0001Da-N5 for qemu-devel@nongnu.org; Thu, 26 Nov 2015 07:06:20 -0500 Received: from mail-wm0-x234.google.com ([2a00:1450:400c:c09::234]:35654) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a1vJY-0001DE-9l for qemu-devel@nongnu.org; Thu, 26 Nov 2015 07:06:16 -0500 Received: by wmuu63 with SMTP id u63so18876217wmu.0 for ; Thu, 26 Nov 2015 04:06:15 -0800 (PST) References: <1447946528-1533-1-git-send-email-eric.auger@linaro.org> <1447946528-1533-4-git-send-email-eric.auger@linaro.org> From: Alex =?utf-8?Q?Benn=C3=A9e?= In-reply-to: <1447946528-1533-4-git-send-email-eric.auger@linaro.org> Date: Thu, 26 Nov 2015 12:06:13 +0000 Message-ID: <8737vtyngq.fsf@linaro.org> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Subject: Re: [Qemu-devel] [RESEND RFC 3/6] device_tree: introduce qemu_fdt_node_path List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Eric Auger Cc: peter.maydell@linaro.org, eric.auger@st.com, thomas.lendacky@amd.com, patches@linaro.org, qemu-devel@nongnu.org, alex.williamson@redhat.com, qemu-arm@nongnu.org, suravee.suthikulpanit@amd.com, pbonzini@redhat.com, b.reynal@virtualopensystems.com, christoffer.dall@linaro.org Eric Auger writes: > This new helper routine returns the node path of a device > referred to by its name and compat string. > > Signed-off-by: Eric Auger > --- > device_tree.c | 40 ++++++++++++++++++++++++++++++++++++++++ > include/sysemu/device_tree.h | 3 +++ > 2 files changed, 43 insertions(+) > > diff --git a/device_tree.c b/device_tree.c > index 58a5329..f184e3c 100644 > --- a/device_tree.c > +++ b/device_tree.c > @@ -171,6 +171,46 @@ static int findnode_nofail(void *fdt, const char *node_path) > return offset; > } > > +/** > + * qemu_fdt_node_path > + * > + * return the node path of a device, referred to by its node name > + * and its compat string > + * fdt: pointer to the dt blob > + * name: name of the device > + * compat: compatibility string of the device > + * > + * returns the node path > + */ > +int qemu_fdt_node_path(void *fdt, const char *name, char *compat, > + char **node_path) > +{ > + int offset = 0, len; > + const char *iter_name; > + char path[256]; > + int ret; > + > + *node_path = NULL; > + while (1) { > + offset = fdt_node_offset_by_compatible(fdt, offset, compat); > + if (offset == -FDT_ERR_NOTFOUND) { Is this not the only error code fdt_node_offset_by_compatible() won't return? > + break; > + } > + iter_name = fdt_get_name(fdt, offset, &len); > + if (!strncmp(iter_name, name, len)) { is it possible for fdt_get_name to fail here and give you NULL and -len? > + goto found; > + } > + } > + return offset; > + > +found: > + ret = fdt_get_path(fdt, offset, path, 256); > + if (!ret) { > + *node_path = g_strdup(path); > + } > + return ret; > +} > + > int qemu_fdt_setprop(void *fdt, const char *node_path, > const char *property, const void *val, int size) > { > diff --git a/include/sysemu/device_tree.h b/include/sysemu/device_tree.h > index 307e53d..f9e6e6e 100644 > --- a/include/sysemu/device_tree.h > +++ b/include/sysemu/device_tree.h > @@ -18,6 +18,9 @@ void *create_device_tree(int *sizep); > void *load_device_tree(const char *filename_path, int *sizep); > void *load_device_tree_from_sysfs(void); > > +int qemu_fdt_node_path(void *fdt, const char *name, char *compat, > + char **node_path); > + > int qemu_fdt_setprop(void *fdt, const char *node_path, > const char *property, const void *val, int size); > int qemu_fdt_setprop_cell(void *fdt, const char *node_path, -- Alex Bennée