mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-08 19:11:53 +00:00
libfdt: Add function to explicitly expand aliases
Kumar has already added alias expansion to fdt_path_offset(). However, in some circumstances it may be convenient for the user of libfdt to explicitly get the string expansion of an alias. This patch adds a function to do this, fdt_get_alias(), and uses it to implement fdt_path_offset(). Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
This commit is contained in:
parent
3e38577208
commit
9a6cf73a88
2 changed files with 45 additions and 7 deletions
|
@ -458,6 +458,32 @@ static inline void *fdt_getprop_w(void *fdt, int nodeoffset,
|
||||||
*/
|
*/
|
||||||
uint32_t fdt_get_phandle(const void *fdt, int nodeoffset);
|
uint32_t fdt_get_phandle(const void *fdt, int nodeoffset);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fdt_get_namelen - get alias based on substring
|
||||||
|
* @fdt: pointer to the device tree blob
|
||||||
|
* @name: name of the alias th look up
|
||||||
|
* @namelen: number of characters of name to consider
|
||||||
|
*
|
||||||
|
* Identical to fdt_get_alias(), but only examine the first namelen
|
||||||
|
* characters of name for matching the alias name.
|
||||||
|
*/
|
||||||
|
const char *fdt_get_alias_namelen(const void *fdt,
|
||||||
|
const char *name, int namelen);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* fdt_get_alias - retreive the path referenced by a given alias
|
||||||
|
* @fdt: pointer to the device tree blob
|
||||||
|
* @name: name of the alias th look up
|
||||||
|
*
|
||||||
|
* fdt_get_alias() retrieves the value of a given alias. That is, the
|
||||||
|
* value of the property named 'name' in the node /aliases.
|
||||||
|
*
|
||||||
|
* returns:
|
||||||
|
* a pointer to the expansion of the alias named 'name', of it exists
|
||||||
|
* NULL, if the given alias or the /aliases node does not exist
|
||||||
|
*/
|
||||||
|
const char *fdt_get_alias(const void *fdt, const char *name);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* fdt_get_path - determine the full path of a node
|
* fdt_get_path - determine the full path of a node
|
||||||
* @fdt: pointer to the device tree blob
|
* @fdt: pointer to the device tree blob
|
||||||
|
|
|
@ -145,17 +145,12 @@ int fdt_path_offset(const void *fdt, const char *path)
|
||||||
|
|
||||||
/* see if we have an alias */
|
/* see if we have an alias */
|
||||||
if (*path != '/') {
|
if (*path != '/') {
|
||||||
const char *q;
|
const char *q = strchr(path, '/');
|
||||||
int aliasoffset = fdt_path_offset(fdt, "/aliases");
|
|
||||||
|
|
||||||
if (aliasoffset < 0)
|
|
||||||
return -FDT_ERR_BADPATH;
|
|
||||||
|
|
||||||
q = strchr(path, '/');
|
|
||||||
if (!q)
|
if (!q)
|
||||||
q = end;
|
q = end;
|
||||||
|
|
||||||
p = fdt_getprop_namelen(fdt, aliasoffset, path, q - p, NULL);
|
p = fdt_get_alias_namelen(fdt, p, q - p);
|
||||||
if (!p)
|
if (!p)
|
||||||
return -FDT_ERR_BADPATH;
|
return -FDT_ERR_BADPATH;
|
||||||
offset = fdt_path_offset(fdt, p);
|
offset = fdt_path_offset(fdt, p);
|
||||||
|
@ -306,6 +301,23 @@ uint32_t fdt_get_phandle(const void *fdt, int nodeoffset)
|
||||||
return fdt32_to_cpu(*php);
|
return fdt32_to_cpu(*php);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const char *fdt_get_alias_namelen(const void *fdt,
|
||||||
|
const char *name, int namelen)
|
||||||
|
{
|
||||||
|
int aliasoffset;
|
||||||
|
|
||||||
|
aliasoffset = fdt_path_offset(fdt, "/aliases");
|
||||||
|
if (aliasoffset < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return fdt_getprop_namelen(fdt, aliasoffset, name, namelen, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
const char *fdt_get_alias(const void *fdt, const char *name)
|
||||||
|
{
|
||||||
|
return fdt_get_alias_namelen(fdt, name, strlen(name));
|
||||||
|
}
|
||||||
|
|
||||||
int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)
|
int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)
|
||||||
{
|
{
|
||||||
int pdepth = 0, p = 0;
|
int pdepth = 0, p = 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue