/********************************************************************/
+/**
+ * fdt_find_and_setprop: Find a node and set it's property
+ *
+ * @fdt: ptr to device tree
+ * @node: path of node
+ * @prop: property name
+ * @val: ptr to new value
+ * @len: length of new property value
+ * @create: flag to create the property if it doesn't exist
+ *
+ * Convenience function to directly set a property given the path to the node.
+ */
+int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
+ const void *val, int len, int create)
+{
+ int nodeoff = fdt_find_node_by_path(fdt, node);
+
+ if (nodeoff < 0)
+ return nodeoff;
+
+ if ((!create) && (fdt_get_property(fdt, nodeoff, prop, 0) == NULL))
+ return 0; /* create flag not set; so exit quietly */
+
+ return fdt_setprop(fdt, nodeoff, prop, val, len);
+}
+
int fdt_chosen(void *fdt, ulong initrd_start, ulong initrd_end, int force)
{
int nodeoffset;
int fdt_subnode_offset(const void *fdt, int parentoffset, const char *name);
int fdt_find_node_by_path(const void *fdt, const char *path);
-int fdt_find_node_by_type(const void *fdt, int nodeoffset, const char *type);
-
-int fdt_node_is_compatible(const void *fdt, int nodeoffset,
- const char *compat);
-int fdt_find_compatible_node(const void *fdt, int nodeoffset,
- const char *type, const char *compat);
struct fdt_property *fdt_get_property(const void *fdt, int nodeoffset,
const char *name, int *lenp);
return (char *)fdt + fdt_off_dt_strings(fdt) + stroffset;
}
-/*
- * Check if the specified node is compatible by comparing the tokens
- * in its "compatible" property with the specified string:
- *
- * nodeoffset - starting place of the node
- * compat - the string to match to one of the tokens in the
- * "compatible" list.
- */
-int fdt_node_is_compatible(const void *fdt, int nodeoffset,
- const char *compat)
-{
- const char* cp;
- int cplen, len;
-
- cp = fdt_getprop(fdt, nodeoffset, "compatible", &cplen);
- if (cp == NULL)
- return 0;
- while (cplen > 0) {
- if (strncmp(cp, compat, strlen(compat)) == 0)
- return 1;
- len = strlen(cp) + 1;
- cp += len;
- cplen -= len;
- }
-
- return 0;
-}
-
-/*
- * Find a node by its device type property. On success, the offset of that
- * node is returned or an error code otherwise:
- *
- * nodeoffset - the node to start searching from or 0, the node you pass
- * will not be searched, only the next one will; typically,
- * you pass 0 to start the search and then what the previous
- * call returned.
- * type - the device type string to match against.
- */
-int fdt_find_node_by_type(const void *fdt, int nodeoffset, const char *type)
-{
- int offset, nextoffset;
- struct fdt_property *prop;
- uint32_t tag;
- int len, ret;
-
- CHECK_HEADER(fdt);
-
- tag = fdt_next_tag(fdt, nodeoffset, &nextoffset, NULL);
- if (tag != FDT_BEGIN_NODE)
- return -FDT_ERR_BADOFFSET;
- if (nodeoffset)
- nodeoffset = 0; /* start searching with next node */
-
- while (1) {
- offset = nextoffset;
- tag = fdt_next_tag(fdt, offset, &nextoffset, NULL);
-
- switch (tag) {
- case FDT_BEGIN_NODE:
- nodeoffset = offset;
- break;
-
- case FDT_PROP:
- if (nodeoffset == 0)
- break;
- ret = prop_name_eq(fdt, offset, "device_type",
- &prop, &len);
- if (ret < 0)
- return ret;
- else if (ret > 0 &&
- strncmp(prop->data, type, len - 1) == 0)
- return nodeoffset;
- break;
-
- case FDT_END_NODE:
- case FDT_NOP:
- break;
-
- case FDT_END:
- return -FDT_ERR_NOTFOUND;
-
- default:
- return -FDT_ERR_BADSTRUCTURE;
- }
- }
-}
-
-/*
- * Find a node based on its device type and one of the tokens in its its
- * "compatible" property. On success, the offset of that node is returned
- * or an error code otherwise:
- *
- * nodeoffset - the node to start searching from or 0, the node you pass
- * will not be searched, only the next one will; typically,
- * you pass 0 to start the search and then what the previous
- * call returned.
- * type - the device type string to match against.
- * compat - the string to match to one of the tokens in the
- * "compatible" list.
- */
-int fdt_find_compatible_node(const void *fdt, int nodeoffset,
- const char *type, const char *compat)
-{
- int offset;
-
- offset = fdt_find_node_by_type(fdt, nodeoffset, type);
- if (offset < 0 || fdt_node_is_compatible(fdt, offset, compat))
- return offset;
-
- return -FDT_ERR_NOTFOUND;
-}
-
/*
* Return the node offset of the node specified by:
* parentoffset - starting place (0 to start at the root)
return 0;
}
-/**
- * fdt_find_and_setprop: Find a node and set it's property
- *
- * @fdt: ptr to device tree
- * @node: path of node
- * @prop: property name
- * @val: ptr to new value
- * @len: length of new property value
- * @create: flag to create the property if it doesn't exist
- *
- * Convenience function to directly set a property given the path to the node.
- */
-int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
- const void *val, int len, int create)
-{
- int nodeoff = fdt_find_node_by_path(fdt, node);
-
- if (nodeoff < 0)
- return nodeoff;
-
- if ((!create) && (fdt_get_property(fdt, nodeoff, prop, 0) == NULL))
- return 0; /* create flag not set; so exit quietly */
-
- return fdt_setprop(fdt, nodeoff, prop, val, len);
-}
-
int fdt_delprop(void *fdt, int nodeoffset, const char *name)
{
struct fdt_property *prop;