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;
}
 
posted @ 2022-02-23 19:42  liujunhuasd  阅读(625)  评论(0编辑  收藏  举报