Home | History | Annotate | Download | only in dist

Lines Matching refs:fdt

10 #include <fdt.h>
15 static int fdt_nodename_eq_(const void *fdt, int offset,
19 const char *p = fdt_get_name(fdt, offset, &olen);
36 const char *fdt_get_string(const void *fdt, int stroffset, int *lenp)
38 int32_t totalsize = fdt_ro_probe_(fdt);
39 uint32_t absoffset = stroffset + fdt_off_dt_strings(fdt);
53 if (fdt_magic(fdt) == FDT_MAGIC) {
56 if (fdt_version(fdt) >= 17) {
57 if (stroffset >= fdt_size_dt_strings(fdt))
59 if ((fdt_size_dt_strings(fdt) - stroffset) < len)
60 len = fdt_size_dt_strings(fdt) - stroffset;
62 } else if (fdt_magic(fdt) == FDT_SW_MAGIC) {
64 || (stroffset < -fdt_size_dt_strings(fdt)))
73 s = (const char *)fdt + absoffset;
91 const char *fdt_string(const void *fdt, int stroffset)
93 return fdt_get_string(fdt, stroffset, NULL);
96 static int fdt_string_eq_(const void *fdt, int stroffset,
100 const char *p = fdt_get_string(fdt, stroffset, &slen);
105 int fdt_find_max_phandle(const void *fdt, uint32_t *phandle)
113 offset = fdt_next_node(fdt, offset, NULL);
121 value = fdt_get_phandle(fdt, offset);
133 int fdt_generate_phandle(const void *fdt, uint32_t *phandle)
138 err = fdt_find_max_phandle(fdt, &max);
151 static const struct fdt_reserve_entry *fdt_mem_rsv(const void *fdt, int n)
154 int absoffset = fdt_off_mem_rsvmap(fdt) + offset;
156 if (absoffset < fdt_off_mem_rsvmap(fdt))
158 if (absoffset > fdt_totalsize(fdt) - sizeof(struct fdt_reserve_entry))
160 return fdt_mem_rsv_(fdt, n);
163 int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)
167 FDT_RO_PROBE(fdt);
168 re = fdt_mem_rsv(fdt, n);
177 int fdt_num_mem_rsv(const void *fdt)
182 for (i = 0; (re = fdt_mem_rsv(fdt, i)) != NULL; i++) {
189 static int nextprop_(const void *fdt, int offset)
195 tag = fdt_next_tag(fdt, offset, &nextoffset);
213 int fdt_subnode_offset_namelen(const void *fdt, int offset,
218 FDT_RO_PROBE(fdt);
222 offset = fdt_next_node(fdt, offset, &depth))
224 && fdt_nodename_eq_(fdt, offset, name, namelen))
232 int fdt_subnode_offset(const void *fdt, int parentoffset,
235 return fdt_subnode_offset_namelen(fdt, parentoffset, name, strlen(name));
238 int fdt_path_offset_namelen(const void *fdt, const char *path, int namelen)
244 FDT_RO_PROBE(fdt);
253 p = fdt_get_alias_namelen(fdt, p, q - p);
256 offset = fdt_path_offset(fdt, p);
273 offset = fdt_subnode_offset_namelen(fdt, offset, p, q-p);
283 int fdt_path_offset(const void *fdt, const char *path)
285 return fdt_path_offset_namelen(fdt, path, strlen(path));
288 const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)
290 const struct fdt_node_header *nh = fdt_offset_ptr_(fdt, nodeoffset);
294 if (((err = fdt_ro_probe_(fdt)) < 0)
295 || ((err = fdt_check_node_offset_(fdt, nodeoffset)) < 0))
300 if (fdt_version(fdt) < 0x10) {
302 * For old FDT versions, match the naming conventions of V16:
326 int fdt_first_property_offset(const void *fdt, int nodeoffset)
330 if ((offset = fdt_check_node_offset_(fdt, nodeoffset)) < 0)
333 return nextprop_(fdt, offset);
336 int fdt_next_property_offset(const void *fdt, int offset)
338 if ((offset = fdt_check_prop_offset_(fdt, offset)) < 0)
341 return nextprop_(fdt, offset);
344 static const struct fdt_property *fdt_get_property_by_offset_(const void *fdt,
351 if ((err = fdt_check_prop_offset_(fdt, offset)) < 0) {
357 prop = fdt_offset_ptr_(fdt, offset);
365 const struct fdt_property *fdt_get_property_by_offset(const void *fdt,
372 if (fdt_version(fdt) < 0x10) {
378 return fdt_get_property_by_offset_(fdt, offset, lenp);
381 static const struct fdt_property *fdt_get_property_namelen_(const void *fdt,
388 for (offset = fdt_first_property_offset(fdt, offset);
390 (offset = fdt_next_property_offset(fdt, offset))) {
393 if (!(prop = fdt_get_property_by_offset_(fdt, offset, lenp))) {
397 if (fdt_string_eq_(fdt, fdt32_ld(&prop->nameoff),
411 const struct fdt_property *fdt_get_property_namelen(const void *fdt,
418 if (fdt_version(fdt) < 0x10) {
424 return fdt_get_property_namelen_(fdt, offset, name, namelen, lenp,
429 const struct fdt_property *fdt_get_property(const void *fdt,
433 return fdt_get_property_namelen(fdt, nodeoffset, name,
437 const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
443 prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp,
449 if (fdt_version(fdt) < 0x10 && (poffset + sizeof(*prop)) % 8 &&
455 const void *fdt_getprop_by_offset(const void *fdt, int offset,
460 prop = fdt_get_property_by_offset_(fdt, offset, lenp);
466 name = fdt_get_string(fdt, fdt32_ld(&prop->nameoff),
477 if (fdt_version(fdt) < 0x10 && (offset + sizeof(*prop)) % 8 &&
483 const void *fdt_getprop(const void *fdt, int nodeoffset,
486 return fdt_getprop_namelen(fdt, nodeoffset, name, strlen(name), lenp);
489 uint32_t fdt_get_phandle(const void *fdt, int nodeoffset)
496 php = fdt_getprop(fdt, nodeoffset, "phandle", &len);
498 php = fdt_getprop(fdt, nodeoffset, "linux,phandle", &len);
506 const char *fdt_get_alias_namelen(const void *fdt,
511 aliasoffset = fdt_path_offset(fdt, "/aliases");
515 return fdt_getprop_namelen(fdt, aliasoffset, name, namelen, NULL);
518 const char *fdt_get_alias(const void *fdt, const char *name)
520 return fdt_get_alias_namelen(fdt, name, strlen(name));
523 int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)
529 FDT_RO_PROBE(fdt);
536 offset = fdt_next_node(fdt, offset, &depth)) {
545 name = fdt_get_name(fdt, offset, &namelen);
575 int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
581 FDT_RO_PROBE(fdt);
588 offset = fdt_next_node(fdt, offset, &depth)) {
611 int fdt_node_depth(const void *fdt, int nodeoffset)
616 err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &nodedepth);
622 int fdt_parent_offset(const void *fdt, int nodeoffset)
624 int nodedepth = fdt_node_depth(fdt, nodeoffset);
628 return fdt_supernode_atdepth_offset(fdt, nodeoffset,
632 int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,
640 FDT_RO_PROBE(fdt);
647 for (offset = fdt_next_node(fdt, startoffset, NULL);
649 offset = fdt_next_node(fdt, offset, NULL)) {
650 val = fdt_getprop(fdt, offset, propname, &len);
659 int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle)
666 FDT_RO_PROBE(fdt);
674 for (offset = fdt_next_node(fdt, -1, NULL);
676 offset = fdt_next_node(fdt, offset, NULL)) {
677 if (fdt_get_phandle(fdt, offset) == phandle)
701 int fdt_stringlist_count(const void *fdt, int nodeoffset, const char *property)
706 list = fdt_getprop(fdt, nodeoffset, property, &length);
726 int fdt_stringlist_search(const void *fdt, int nodeoffset, const char *property,
732 list = fdt_getprop(fdt, nodeoffset, property, &length);
756 const char *fdt_stringlist_get(const void *fdt, int nodeoffset,
763 list = fdt_getprop(fdt, nodeoffset, property, &length);
801 int fdt_node_check_compatible(const void *fdt, int nodeoffset,
807 prop = fdt_getprop(fdt, nodeoffset, "compatible", &len);
814 int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
819 FDT_RO_PROBE(fdt);
826 for (offset = fdt_next_node(fdt, startoffset, NULL);
828 offset = fdt_next_node(fdt, offset, NULL)) {
829 err = fdt_node_check_compatible(fdt, offset, compatible);
839 int fdt_check_full(const void *fdt, size_t bufsize)
851 err = fdt_check_header(fdt);
854 if (bufsize < fdt_totalsize(fdt))
857 num_memrsv = fdt_num_mem_rsv(fdt);
863 tag = fdt_next_tag(fdt, offset, &nextoffset);
890 prop = fdt_getprop_by_offset(fdt, offset, &propname,