u-boot fdt_getprop函数
const void *fdt_getprop(const void *fdt, int nodeoffset,
const char *name, int *lenp)
{
return fdt_getprop_namelen(fdt, nodeoffset, name, strlen(name), lenp);
}
const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
const char *name, int namelen, int *lenp)
{
int poffset;
const struct fdt_property *prop;
prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp, &poffset); if (!prop) return NULL;
/* Handle realignment */ if (fdt_chk_version() && fdt_version(fdt) < 0x10 && (poffset + sizeof(*prop)) % 8 && fdt32_to_cpu(prop->len) >= 8) return prop->data + 4; return prop->data; } static const struct fdt_property *fdt_get_property_namelen_(const void *fdt, int offset, const char *name, int namelen, int *lenp, int *poffset) { for (offset = fdt_first_property_offset(fdt, offset); (offset >= 0); (offset = fdt_next_property_offset(fdt, offset))) { const struct fdt_property *prop;
prop = fdt_get_property_by_offset_(fdt, offset, lenp); if (fdt_chk_extra() && !prop) { offset = -FDT_ERR_INTERNAL; break; } if (fdt_string_eq_(fdt, fdt32_to_cpu(prop->nameoff), name, namelen)) { if (poffset) *poffset = offset; return prop; } }
if (lenp) *lenp = offset; return NULL; }
prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp, &poffset); if (!prop) return NULL;
/* Handle realignment */ if (fdt_chk_version() && fdt_version(fdt) < 0x10 && (poffset + sizeof(*prop)) % 8 && fdt32_to_cpu(prop->len) >= 8) return prop->data + 4; return prop->data; } static const struct fdt_property *fdt_get_property_namelen_(const void *fdt, int offset, const char *name, int namelen, int *lenp, int *poffset) { for (offset = fdt_first_property_offset(fdt, offset); (offset >= 0); (offset = fdt_next_property_offset(fdt, offset))) { const struct fdt_property *prop;
prop = fdt_get_property_by_offset_(fdt, offset, lenp); if (fdt_chk_extra() && !prop) { offset = -FDT_ERR_INTERNAL; break; } if (fdt_string_eq_(fdt, fdt32_to_cpu(prop->nameoff), name, namelen)) { if (poffset) *poffset = offset; return prop; } }
if (lenp) *lenp = offset; return NULL; }