Lines Matching defs:fdt
8 #include <fdt.h>
13 static int fdt_nodename_eq_(const void *fdt, int offset,
17 const char *p = fdt_get_name(fdt, offset, &olen);
34 const char *fdt_get_string(const void *fdt, int stroffset, int *lenp)
43 s = (const char *)fdt + fdt_off_dt_strings(fdt) + stroffset;
49 totalsize = fdt_ro_probe_(fdt);
55 absoffset = stroffset + fdt_off_dt_strings(fdt);
60 if (fdt_magic(fdt) == FDT_MAGIC) {
63 if (can_assume(LATEST) || fdt_version(fdt) >= 17) {
64 if ((unsigned)stroffset >= fdt_size_dt_strings(fdt))
66 if ((fdt_size_dt_strings(fdt) - stroffset) < len)
67 len = fdt_size_dt_strings(fdt) - stroffset;
69 } else if (fdt_magic(fdt) == FDT_SW_MAGIC) {
73 (sw_stroffset > fdt_size_dt_strings(fdt)))
82 s = (const char *)fdt + absoffset;
100 const char *fdt_string(const void *fdt, int stroffset)
102 return fdt_get_string(fdt, stroffset, NULL);
105 static int fdt_string_eq_(const void *fdt, int stroffset,
109 const char *p = fdt_get_string(fdt, stroffset, &slen);
114 int fdt_find_max_phandle(const void *fdt, uint32_t *phandle)
122 offset = fdt_next_node(fdt, offset, NULL);
130 value = fdt_get_phandle(fdt, offset);
142 int fdt_generate_phandle(const void *fdt, uint32_t *phandle)
147 err = fdt_find_max_phandle(fdt, &max);
160 static const struct fdt_reserve_entry *fdt_mem_rsv(const void *fdt, int n)
163 unsigned int absoffset = fdt_off_mem_rsvmap(fdt) + offset;
166 if (absoffset < fdt_off_mem_rsvmap(fdt))
168 if (absoffset > fdt_totalsize(fdt) -
172 return fdt_mem_rsv_(fdt, n);
175 int fdt_get_mem_rsv(const void *fdt, int n, uint64_t *address, uint64_t *size)
179 FDT_RO_PROBE(fdt);
180 re = fdt_mem_rsv(fdt, n);
189 int fdt_num_mem_rsv(const void *fdt)
194 for (i = 0; (re = fdt_mem_rsv(fdt, i)) != NULL; i++) {
201 static int nextprop_(const void *fdt, int offset)
207 tag = fdt_next_tag(fdt, offset, &nextoffset);
225 int fdt_subnode_offset_namelen(const void *fdt, int offset,
230 FDT_RO_PROBE(fdt);
234 offset = fdt_next_node(fdt, offset, &depth))
236 && fdt_nodename_eq_(fdt, offset, name, namelen))
244 int fdt_subnode_offset(const void *fdt, int parentoffset,
247 return fdt_subnode_offset_namelen(fdt, parentoffset, name, strlen(name));
250 int fdt_path_offset_namelen(const void *fdt, const char *path, int namelen)
256 FDT_RO_PROBE(fdt);
265 p = fdt_get_alias_namelen(fdt, p, q - p);
268 offset = fdt_path_offset(fdt, p);
285 offset = fdt_subnode_offset_namelen(fdt, offset, p, q-p);
295 int fdt_path_offset(const void *fdt, const char *path)
297 return fdt_path_offset_namelen(fdt, path, strlen(path));
300 const char *fdt_get_name(const void *fdt, int nodeoffset, int *len)
302 const struct fdt_node_header *nh = fdt_offset_ptr_(fdt, nodeoffset);
306 if (((err = fdt_ro_probe_(fdt)) < 0)
307 || ((err = fdt_check_node_offset_(fdt, nodeoffset)) < 0))
312 if (!can_assume(LATEST) && fdt_version(fdt) < 0x10) {
338 int fdt_first_property_offset(const void *fdt, int nodeoffset)
342 if ((offset = fdt_check_node_offset_(fdt, nodeoffset)) < 0)
345 return nextprop_(fdt, offset);
348 int fdt_next_property_offset(const void *fdt, int offset)
350 if ((offset = fdt_check_prop_offset_(fdt, offset)) < 0)
353 return nextprop_(fdt, offset);
356 static const struct fdt_property *fdt_get_property_by_offset_(const void *fdt,
364 (err = fdt_check_prop_offset_(fdt, offset)) < 0) {
370 prop = fdt_offset_ptr_(fdt, offset);
378 const struct fdt_property *fdt_get_property_by_offset(const void *fdt,
385 if (!can_assume(LATEST) && fdt_version(fdt) < 0x10) {
391 return fdt_get_property_by_offset_(fdt, offset, lenp);
394 static const struct fdt_property *fdt_get_property_namelen_(const void *fdt,
401 for (offset = fdt_first_property_offset(fdt, offset);
403 (offset = fdt_next_property_offset(fdt, offset))) {
406 prop = fdt_get_property_by_offset_(fdt, offset, lenp);
411 if (fdt_string_eq_(fdt, fdt32_ld_(&prop->nameoff),
425 const struct fdt_property *fdt_get_property_namelen(const void *fdt,
432 if (!can_assume(LATEST) && fdt_version(fdt) < 0x10) {
438 return fdt_get_property_namelen_(fdt, offset, name, namelen, lenp,
443 const struct fdt_property *fdt_get_property(const void *fdt,
447 return fdt_get_property_namelen(fdt, nodeoffset, name,
451 const void *fdt_getprop_namelen(const void *fdt, int nodeoffset,
457 prop = fdt_get_property_namelen_(fdt, nodeoffset, name, namelen, lenp,
463 if (!can_assume(LATEST) && fdt_version(fdt) < 0x10 &&
469 const void *fdt_getprop_by_offset(const void *fdt, int offset,
474 prop = fdt_get_property_by_offset_(fdt, offset, lenp);
482 name = fdt_get_string(fdt, fdt32_ld_(&prop->nameoff),
491 *namep = fdt_string(fdt, fdt32_ld_(&prop->nameoff));
496 if (!can_assume(LATEST) && fdt_version(fdt) < 0x10 &&
502 const void *fdt_getprop(const void *fdt, int nodeoffset,
505 return fdt_getprop_namelen(fdt, nodeoffset, name, strlen(name), lenp);
508 uint32_t fdt_get_phandle(const void *fdt, int nodeoffset)
515 php = fdt_getprop(fdt, nodeoffset, "phandle", &len);
517 php = fdt_getprop(fdt, nodeoffset, "linux,phandle", &len);
525 const char *fdt_get_alias_namelen(const void *fdt,
530 aliasoffset = fdt_path_offset(fdt, "/aliases");
534 return fdt_getprop_namelen(fdt, aliasoffset, name, namelen, NULL);
537 const char *fdt_get_alias(const void *fdt, const char *name)
539 return fdt_get_alias_namelen(fdt, name, strlen(name));
542 int fdt_get_path(const void *fdt, int nodeoffset, char *buf, int buflen)
548 FDT_RO_PROBE(fdt);
555 offset = fdt_next_node(fdt, offset, &depth)) {
564 name = fdt_get_name(fdt, offset, &namelen);
594 int fdt_supernode_atdepth_offset(const void *fdt, int nodeoffset,
600 FDT_RO_PROBE(fdt);
607 offset = fdt_next_node(fdt, offset, &depth)) {
632 int fdt_node_depth(const void *fdt, int nodeoffset)
637 err = fdt_supernode_atdepth_offset(fdt, nodeoffset, 0, &nodedepth);
644 int fdt_parent_offset(const void *fdt, int nodeoffset)
646 int nodedepth = fdt_node_depth(fdt, nodeoffset);
650 return fdt_supernode_atdepth_offset(fdt, nodeoffset,
654 int fdt_node_offset_by_prop_value(const void *fdt, int startoffset,
662 FDT_RO_PROBE(fdt);
669 for (offset = fdt_next_node(fdt, startoffset, NULL);
671 offset = fdt_next_node(fdt, offset, NULL)) {
672 val = fdt_getprop(fdt, offset, propname, &len);
681 int fdt_node_offset_by_phandle(const void *fdt, uint32_t phandle)
688 FDT_RO_PROBE(fdt);
696 for (offset = fdt_next_node(fdt, -1, NULL);
698 offset = fdt_next_node(fdt, offset, NULL)) {
699 if (fdt_get_phandle(fdt, offset) == phandle)
723 int fdt_stringlist_count(const void *fdt, int nodeoffset, const char *property)
728 list = fdt_getprop(fdt, nodeoffset, property, &length);
748 int fdt_stringlist_search(const void *fdt, int nodeoffset, const char *property,
754 list = fdt_getprop(fdt, nodeoffset, property, &length);
778 const char *fdt_stringlist_get(const void *fdt, int nodeoffset,
785 list = fdt_getprop(fdt, nodeoffset, property, &length);
823 int fdt_node_check_compatible(const void *fdt, int nodeoffset,
829 prop = fdt_getprop(fdt, nodeoffset, "compatible", &len);
836 int fdt_node_offset_by_compatible(const void *fdt, int startoffset,
841 FDT_RO_PROBE(fdt);
848 for (offset = fdt_next_node(fdt, startoffset, NULL);
850 offset = fdt_next_node(fdt, offset, NULL)) {
851 err = fdt_node_check_compatible(fdt, offset, compatible);