Lines Matching +full:dt +full:- +full:property
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
33 if (streq(new->label, label)) { in add_label()
34 new->deleted = 0; in add_label()
40 new->label = label; in add_label()
41 new->next = *labels; in add_label()
50 label->deleted = 1; in delete_labels()
53 struct property *build_property(char *name, struct data val) in build_property()
55 struct property *new = xmalloc(sizeof(*new)); in build_property()
59 new->name = name; in build_property()
60 new->val = val; in build_property()
65 struct property *build_property_delete(char *name) in build_property_delete()
67 struct property *new = xmalloc(sizeof(*new)); in build_property_delete()
71 new->name = name; in build_property_delete()
72 new->deleted = 1; in build_property_delete()
77 struct property *chain_property(struct property *first, struct property *list) in chain_property()
79 assert(first->next == NULL); in chain_property()
81 first->next = list; in chain_property()
85 struct property *reverse_properties(struct property *first) in reverse_properties()
87 struct property *p = first; in reverse_properties()
88 struct property *head = NULL; in reverse_properties()
89 struct property *next; in reverse_properties()
92 next = p->next; in reverse_properties()
93 p->next = head; in reverse_properties()
100 struct node *build_node(struct property *proplist, struct node *children) in build_node()
107 new->proplist = reverse_properties(proplist); in build_node()
108 new->children = children; in build_node()
111 child->parent = new; in build_node()
123 new->deleted = 1; in build_node_delete()
130 assert(node->name == NULL); in name_node()
132 node->name = name; in name_node()
139 struct property *new_prop, *old_prop; in merge_nodes()
143 old_node->deleted = 0; in merge_nodes()
146 for_each_label_withdel(new_node->labels, l) in merge_nodes()
147 add_label(&old_node->labels, l->label); in merge_nodes()
151 while (new_node->proplist) { in merge_nodes()
152 /* Pop the property off the list */ in merge_nodes()
153 new_prop = new_node->proplist; in merge_nodes()
154 new_node->proplist = new_prop->next; in merge_nodes()
155 new_prop->next = NULL; in merge_nodes()
157 if (new_prop->deleted) { in merge_nodes()
158 delete_property_by_name(old_node, new_prop->name); in merge_nodes()
165 if (streq(old_prop->name, new_prop->name)) { in merge_nodes()
166 /* Add new labels to old property */ in merge_nodes()
167 for_each_label_withdel(new_prop->labels, l) in merge_nodes()
168 add_label(&old_prop->labels, l->label); in merge_nodes()
170 old_prop->val = new_prop->val; in merge_nodes()
171 old_prop->deleted = 0; in merge_nodes()
178 /* if no collision occurred, add property to the old node. */ in merge_nodes()
185 while (new_node->children) { in merge_nodes()
187 new_child = new_node->children; in merge_nodes()
188 new_node->children = new_child->next_sibling; in merge_nodes()
189 new_child->parent = NULL; in merge_nodes()
190 new_child->next_sibling = NULL; in merge_nodes()
192 if (new_child->deleted) { in merge_nodes()
193 delete_node_by_name(old_node, new_child->name); in merge_nodes()
200 if (streq(old_child->name, new_child->name)) { in merge_nodes()
219 struct node * add_orphan_node(struct node *dt, struct node *new_node, char *ref) in add_orphan_node() argument
223 struct property *p; in add_orphan_node()
238 add_child(dt, node); in add_orphan_node()
239 return dt; in add_orphan_node()
244 assert(first->next_sibling == NULL); in chain_node()
246 first->next_sibling = list; in chain_node()
250 void add_property(struct node *node, struct property *prop) in add_property()
252 struct property **p; in add_property()
254 prop->next = NULL; in add_property()
256 p = &node->proplist; in add_property()
258 p = &((*p)->next); in add_property()
265 struct property *prop = node->proplist; in delete_property_by_name()
268 if (streq(prop->name, name)) { in delete_property_by_name()
272 prop = prop->next; in delete_property_by_name()
276 void delete_property(struct property *prop) in delete_property()
278 prop->deleted = 1; in delete_property()
279 delete_labels(&prop->labels); in delete_property()
286 child->next_sibling = NULL; in add_child()
287 child->parent = parent; in add_child()
289 p = &parent->children; in add_child()
291 p = &((*p)->next_sibling); in add_child()
298 struct node *node = parent->children; in delete_node_by_name()
301 if (streq(node->name, name)) { in delete_node_by_name()
305 node = node->next_sibling; in delete_node_by_name()
311 struct property *prop; in delete_node()
314 node->deleted = 1; in delete_node()
319 delete_labels(&node->labels); in delete_node()
326 struct property *p; in append_to_property()
330 d = data_append_data(p->val, data, len); in append_to_property()
331 p->val = d; in append_to_property()
345 new->address = address; in build_reserve_entry()
346 new->size = size; in build_reserve_entry()
354 assert(first->next == NULL); in chain_reserve_entry()
356 first->next = list; in chain_reserve_entry()
365 new->next = NULL; in add_reserve_entry()
370 for (last = list; last->next; last = last->next) in add_reserve_entry()
373 last->next = new; in add_reserve_entry()
385 dti->dtsflags = dtsflags; in build_dt_info()
386 dti->reservelist = reservelist; in build_dt_info()
387 dti->dt = tree; in build_dt_info()
388 dti->boot_cpuid_phys = boot_cpuid_phys; in build_dt_info()
399 if (node->name[node->basenamelen] == '\0') in get_unitname()
402 return node->name + node->basenamelen + 1; in get_unitname()
405 struct property *get_property(struct node *node, const char *propname) in get_property()
407 struct property *prop; in get_property()
410 if (streq(prop->name, propname)) in get_property()
416 cell_t propval_cell(struct property *prop) in propval_cell()
418 assert(prop->val.len == sizeof(cell_t)); in propval_cell()
419 return fdt32_to_cpu(*((fdt32_t *)prop->val.val)); in propval_cell()
422 cell_t propval_cell_n(struct property *prop, int n) in propval_cell_n()
424 assert(prop->val.len / sizeof(cell_t) >= n); in propval_cell_n()
425 return fdt32_to_cpu(*((fdt32_t *)prop->val.val + n)); in propval_cell_n()
428 struct property *get_property_by_label(struct node *tree, const char *label, in get_property_by_label()
431 struct property *prop; in get_property_by_label()
439 for_each_label(prop->labels, l) in get_property_by_label()
440 if (streq(l->label, label)) in get_property_by_label()
455 struct node **node, struct property **prop) in get_marker_label()
458 struct property *p; in get_marker_label()
465 m = p->val.markers; in get_marker_label()
467 if (streq(m->ref, label)) in get_marker_label()
487 if (streq(child->name, nodename)) in get_subnode()
499 if (tree->deleted) in get_node_by_path()
510 if (p && (strlen(child->name) == p-path) && in get_node_by_path()
511 strprefixeq(path, p - path, child->name)) in get_node_by_path()
513 else if (!p && streq(path, child->name)) in get_node_by_path()
527 for_each_label(tree->labels, l) in get_node_by_label()
528 if (streq(l->label, label)) in get_node_by_label()
544 if ((phandle == 0) || (phandle == -1)) { in get_node_by_phandle()
549 if (tree->phandle == phandle) { in get_node_by_phandle()
550 if (tree->deleted) in get_node_by_phandle()
578 if ((node->phandle != 0) && (node->phandle != -1)) in get_node_phandle()
579 return node->phandle; in get_node_phandle()
584 node->phandle = phandle; in get_node_phandle()
598 /* If the node *does* have a phandle property, we must in get_node_phandle()
599 * be dealing with a self-referencing phandle, which will be in get_node_phandle()
602 return node->phandle; in get_node_phandle()
608 struct property *reg; in guess_boot_cpuid()
615 bootcpu = cpus->children; in guess_boot_cpuid()
620 if (!reg || (reg->val.len != sizeof(uint32_t))) in guess_boot_cpuid()
635 if (a->address < b->address) in cmp_reserve_info()
636 return -1; in cmp_reserve_info()
637 else if (a->address > b->address) in cmp_reserve_info()
639 else if (a->size < b->size) in cmp_reserve_info()
640 return -1; in cmp_reserve_info()
641 else if (a->size > b->size) in cmp_reserve_info()
652 for (ri = dti->reservelist; in sort_reserve_entries()
654 ri = ri->next) in sort_reserve_entries()
662 for (ri = dti->reservelist; in sort_reserve_entries()
664 ri = ri->next) in sort_reserve_entries()
669 dti->reservelist = tbl[0]; in sort_reserve_entries()
670 for (i = 0; i < (n-1); i++) in sort_reserve_entries()
671 tbl[i]->next = tbl[i+1]; in sort_reserve_entries()
672 tbl[n-1]->next = NULL; in sort_reserve_entries()
679 const struct property *a, *b; in cmp_prop()
681 a = *((const struct property * const *)ax); in cmp_prop()
682 b = *((const struct property * const *)bx); in cmp_prop()
684 return strcmp(a->name, b->name); in cmp_prop()
690 struct property *prop, **tbl; in sort_properties()
705 node->proplist = tbl[0]; in sort_properties()
706 for (i = 0; i < (n-1); i++) in sort_properties()
707 tbl[i]->next = tbl[i+1]; in sort_properties()
708 tbl[n-1]->next = NULL; in sort_properties()
720 return strcmp(a->name, b->name); in cmp_subnode()
741 node->children = tbl[0]; in sort_subnodes()
742 for (i = 0; i < (n-1); i++) in sort_subnodes()
743 tbl[i]->next_sibling = tbl[i+1]; in sort_subnodes()
744 tbl[n-1]->next_sibling = NULL; in sort_subnodes()
762 sort_node(dti->dt); in sort_tree()
777 static struct node *build_root_node(struct node *dt, char *name) in build_root_node() argument
781 an = get_subnode(dt, name); in build_root_node()
783 an = build_and_name_child_node(dt, name); in build_root_node()
795 if (node->labels) in any_label_tree()
809 struct node *dt = dti->dt; in generate_label_tree_internal() local
811 struct property *p; in generate_label_tree_internal()
815 if (node->labels) { in generate_label_tree_internal()
818 for_each_label(node->labels, l) { in generate_label_tree_internal()
821 p = get_property(an, l->label); in generate_label_tree_internal()
824 " exists in /%s", l->label, in generate_label_tree_internal()
825 an->name); in generate_label_tree_internal()
830 p = build_property(l->label, in generate_label_tree_internal()
831 data_copy_mem(node->fullpath, in generate_label_tree_internal()
832 strlen(node->fullpath) + 1)); in generate_label_tree_internal()
838 (void)get_node_phandle(dt, node); in generate_label_tree_internal()
848 struct property *prop; in any_fixup_tree()
852 m = prop->val.markers; in any_fixup_tree()
854 if (!get_node_by_ref(dti->dt, m->ref)) in any_fixup_tree()
868 struct node *node, struct property *prop, in add_fixup_entry()
873 /* m->ref can only be a REF_PHANDLE, but check anyway */ in add_fixup_entry()
874 assert(m->type == REF_PHANDLE); in add_fixup_entry()
877 if (strchr(node->fullpath, ':') || strchr(prop->name, ':')) in add_fixup_entry()
881 node->fullpath, prop->name, m->offset); in add_fixup_entry()
882 append_to_property(fn, m->ref, entry, strlen(entry) + 1); in add_fixup_entry()
891 struct node *dt = dti->dt; in generate_fixups_tree_internal() local
893 struct property *prop; in generate_fixups_tree_internal()
898 m = prop->val.markers; in generate_fixups_tree_internal()
900 refnode = get_node_by_ref(dt, m->ref); in generate_fixups_tree_internal()
913 struct property *prop; in any_local_fixup_tree()
917 m = prop->val.markers; in any_local_fixup_tree()
919 if (get_node_by_ref(dti->dt, m->ref)) in any_local_fixup_tree()
934 struct property *prop, struct marker *m, in add_local_fixup_entry()
944 for (wn = node; wn; wn = wn->parent) in add_local_fixup_entry()
951 for (wn = node, i = depth - 1; wn; wn = wn->parent, i--) in add_local_fixup_entry()
952 compp[i] = wn->name; in add_local_fixup_entry()
964 value_32 = cpu_to_fdt32(m->offset); in add_local_fixup_entry()
965 append_to_property(wn, prop->name, &value_32, sizeof(value_32)); in add_local_fixup_entry()
972 struct node *dt = dti->dt; in generate_local_fixups_tree_internal() local
974 struct property *prop; in generate_local_fixups_tree_internal()
979 m = prop->val.markers; in generate_local_fixups_tree_internal()
981 refnode = get_node_by_ref(dt, m->ref); in generate_local_fixups_tree_internal()
993 if (!any_label_tree(dti, dti->dt)) in generate_label_tree()
995 generate_label_tree_internal(dti, build_root_node(dti->dt, name), in generate_label_tree()
996 dti->dt, allocph); in generate_label_tree()
1001 if (!any_fixup_tree(dti, dti->dt)) in generate_fixups_tree()
1003 generate_fixups_tree_internal(dti, build_root_node(dti->dt, name), in generate_fixups_tree()
1004 dti->dt); in generate_fixups_tree()
1009 if (!any_local_fixup_tree(dti, dti->dt)) in generate_local_fixups_tree()
1011 generate_local_fixups_tree_internal(dti, build_root_node(dti->dt, name), in generate_local_fixups_tree()
1012 dti->dt); in generate_local_fixups_tree()