libfdt: Add fdt_set_name() function
This patch adds an fdt_set_name() function to libfdt, mirroring fdt_get_name(). This is a r/w function which alters the name of a given device tree node. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
fdeb932b1c
commit
9eaeb07a71
|
@ -845,6 +845,32 @@ int fdt_add_mem_rsv(void *fdt, uint64_t address, uint64_t size);
|
||||||
*/
|
*/
|
||||||
int fdt_del_mem_rsv(void *fdt, int n);
|
int fdt_del_mem_rsv(void *fdt, int n);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fdt_set_name - change the name of a given node
|
||||||
|
* @fdt: pointer to the device tree blob
|
||||||
|
* @nodeoffset: structure block offset of a node
|
||||||
|
* @name: name to give the node
|
||||||
|
*
|
||||||
|
* fdt_set_name() replaces the name (including unit address, if any)
|
||||||
|
* of the given node with the given string. NOTE: this function can't
|
||||||
|
* efficiently check if the new name is unique amongst the given
|
||||||
|
* node's siblings; results are undefined if this function is invoked
|
||||||
|
* with a name equal to one of the given node's siblings.
|
||||||
|
*
|
||||||
|
* This function may insert or delete data from the blob, and will
|
||||||
|
* therefore change the offsets of some existing nodes.
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* 0, on success
|
||||||
|
* -FDT_ERR_NOSPACE, there is insufficient free space in the blob
|
||||||
|
* to contain the new name
|
||||||
|
* -FDT_ERR_BADOFFSET, nodeoffset did not point to FDT_BEGIN_NODE tag
|
||||||
|
* -FDT_ERR_BADMAGIC,
|
||||||
|
* -FDT_ERR_BADVERSION,
|
||||||
|
* -FDT_ERR_BADSTATE, standard meanings
|
||||||
|
*/
|
||||||
|
int fdt_set_name(void *fdt, int nodeoffset, const char *name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fdt_setprop - create or change a property
|
* fdt_setprop - create or change a property
|
||||||
* @fdt: pointer to the device tree blob
|
* @fdt: pointer to the device tree blob
|
||||||
|
|
|
@ -252,6 +252,30 @@ static int _add_property(void *fdt, int nodeoffset, const char *name, int len,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int fdt_set_name(void *fdt, int nodeoffset, const char *name)
|
||||||
|
{
|
||||||
|
char *namep;
|
||||||
|
int oldlen, newlen;
|
||||||
|
int err;
|
||||||
|
|
||||||
|
if ((err = rw_check_header(fdt)))
|
||||||
|
return err;
|
||||||
|
|
||||||
|
namep = (char *)fdt_get_name(fdt, nodeoffset, &oldlen);
|
||||||
|
if (!namep)
|
||||||
|
return oldlen;
|
||||||
|
|
||||||
|
newlen = strlen(name);
|
||||||
|
|
||||||
|
err = _blob_splice_struct(fdt, namep, ALIGN(oldlen+1, FDT_TAGSIZE),
|
||||||
|
ALIGN(newlen+1, FDT_TAGSIZE));
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
memcpy(namep, name, newlen+1);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int fdt_setprop(void *fdt, int nodeoffset, const char *name,
|
int fdt_setprop(void *fdt, int nodeoffset, const char *name,
|
||||||
const void *val, int len)
|
const void *val, int len)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue