diff options
| -rw-r--r-- | common/fdt_support.c | 26 | ||||
| -rw-r--r-- | include/libfdt.h | 6 | ||||
| -rw-r--r-- | libfdt/fdt_ro.c | 112 | ||||
| -rw-r--r-- | libfdt/fdt_rw.c | 26 | 
4 files changed, 26 insertions, 144 deletions
| diff --git a/common/fdt_support.c b/common/fdt_support.c index 175d59eb9..6a5b27aec 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -44,6 +44,32 @@ struct fdt_header *fdt;  /********************************************************************/ +/** + * 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; diff --git a/include/libfdt.h b/include/libfdt.h index 38c65a989..ba348a9af 100644 --- a/include/libfdt.h +++ b/include/libfdt.h @@ -78,12 +78,6 @@ int fdt_subnode_offset_namelen(const void *fdt, int parentoffset,  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); diff --git a/libfdt/fdt_ro.c b/libfdt/fdt_ro.c index bc1a5f424..5816c7a29 100644 --- a/libfdt/fdt_ro.c +++ b/libfdt/fdt_ro.c @@ -83,118 +83,6 @@ char *fdt_string(const void *fdt, int 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)   *   name         - name being searched for diff --git a/libfdt/fdt_rw.c b/libfdt/fdt_rw.c index 852b6e6a9..aaafc5364 100644 --- a/libfdt/fdt_rw.c +++ b/libfdt/fdt_rw.c @@ -185,32 +185,6 @@ int fdt_setprop(void *fdt, int nodeoffset, const char *name,  	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; |