svn commit: r330019 - head/sys/dev/ofw
Kyle Evans
kevans at FreeBSD.org
Mon Feb 26 14:00:24 UTC 2018
Author: kevans
Date: Mon Feb 26 14:00:23 2018
New Revision: 330019
URL: https://svnweb.freebsd.org/changeset/base/330019
Log:
ofw_fdt: Simplify parts with new libfdt methods
libfdt now provides methods to iterate through subnodes and properties in a
convenient fashion.
Replace our ofw_fdt_{peer,child} searches with calls to their corresponding
libfdt methods. Rework ofw_fdt_nextprop to use the
fdt_for_each_property_offset macro, making it even more obvious what it's
doing.
No functional change intended.
Reviewed by: nwhitehorn
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D14225
Modified:
head/sys/dev/ofw/ofw_fdt.c
Modified: head/sys/dev/ofw/ofw_fdt.c
==============================================================================
--- head/sys/dev/ofw/ofw_fdt.c Mon Feb 26 13:12:51 2018 (r330018)
+++ head/sys/dev/ofw/ofw_fdt.c Mon Feb 26 14:00:23 2018 (r330019)
@@ -174,7 +174,7 @@ fdt_phandle_offset(phandle_t p)
static phandle_t
ofw_fdt_peer(ofw_t ofw, phandle_t node)
{
- int depth, offset;
+ int offset;
if (node == 0) {
/* Find root node */
@@ -186,39 +186,21 @@ ofw_fdt_peer(ofw_t ofw, phandle_t node)
offset = fdt_phandle_offset(node);
if (offset < 0)
return (0);
-
- for (depth = 1, offset = fdt_next_node(fdtp, offset, &depth);
- offset >= 0;
- offset = fdt_next_node(fdtp, offset, &depth)) {
- if (depth < 0)
- return (0);
- if (depth == 1)
- return (fdt_offset_phandle(offset));
- }
-
- return (0);
+ offset = fdt_next_subnode(fdtp, offset);
+ return (fdt_offset_phandle(offset));
}
/* Return the first child of this node or 0. */
static phandle_t
ofw_fdt_child(ofw_t ofw, phandle_t node)
{
- int depth, offset;
+ int offset;
offset = fdt_phandle_offset(node);
if (offset < 0)
return (0);
-
- for (depth = 0, offset = fdt_next_node(fdtp, offset, &depth);
- (offset >= 0) && (depth > 0);
- offset = fdt_next_node(fdtp, offset, &depth)) {
- if (depth < 0)
- return (0);
- if (depth == 1)
- return (fdt_offset_phandle(offset));
- }
-
- return (0);
+ offset = fdt_first_subnode(fdtp, offset);
+ return (fdt_offset_phandle(offset));
}
/* Return the parent of this node or 0. */
@@ -341,26 +323,24 @@ ofw_fdt_nextprop(ofw_t ofw, phandle_t package, const c
if (offset < 0)
return (-1);
- /* Find the first prop in the node */
- offset = fdt_first_property_offset(fdtp, offset);
- if (offset < 0)
- return (0); /* No properties */
-
- if (previous != NULL) {
- while (offset >= 0) {
+ if (previous == NULL)
+ /* Find the first prop in the node */
+ offset = fdt_first_property_offset(fdtp, offset);
+ else {
+ fdt_for_each_property_offset(offset, fdtp, offset) {
prop = fdt_getprop_by_offset(fdtp, offset, &name, NULL);
if (prop == NULL)
return (-1); /* Internal error */
-
+ /* Skip until we find 'previous', then bail out */
+ if (strcmp(name, previous) != 0)
+ continue;
offset = fdt_next_property_offset(fdtp, offset);
- if (offset < 0)
- return (0); /* No more properties */
-
- /* Check if the last one was the one we wanted */
- if (strcmp(name, previous) == 0)
- break;
+ break;
}
}
+
+ if (offset < 0)
+ return (0); /* No properties */
prop = fdt_getprop_by_offset(fdtp, offset, &name, &offset);
if (prop == NULL)
More information about the svn-src-all
mailing list