Lines Matching +full:bool +full:- +full:property
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
8 * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
133 bool is_all_printable = true; in resolve_type()
136 bool lastWasNull = false; in resolve_type()
194 bool hasNull = (byte_data.back() == '\0'); in write_as_string()
258 property::parse_string(text_input_buffer &input) in parse_string()
264 bool isEscaped = false; in parse_string()
281 property::parse_cells(text_input_buffer &input, int cell_size) in parse_cells()
296 input.parse_error("reference only permitted in 32-bit arrays"); in parse_cells()
347 // permit anything that looks like a sign-extended in parse_cells()
350 (val | ((1ull << (cell_size - 1)) - 1)) != in parse_cells()
354 std::to_string(cell_size) + "-bit cell"; in parse_cells()
387 property::parse_bytes(text_input_buffer &input) in parse_bytes()
414 property::parse_reference(text_input_buffer &input) in parse_reference()
431 property::property(input_buffer &structs, input_buffer &strings) in property() function in dtc::fdt::property
439 fprintf(stderr, "Failed to read property\n"); in property()
446 fprintf(stderr, "Property name offset %" PRIu32 in property()
465 fprintf(stderr, "Failed to read property value\n"); in property()
473 void property::parse_define(text_input_buffer &input, define_map *defines) in parse_define()
485 ((found = defines->find(name)) == defines->end())) in parse_define()
487 input.parse_error("Undefined property name\n"); in parse_define()
491 values.push_back((*found).second->values[0]); in parse_define()
494 property::property(text_input_buffer &input, in property() function in dtc::fdt::property
497 bool semicolonTerminated, in property()
514 input.parse_error("Invalid property value."); in property()
585 input.parse_error("Expected ; at end of property"); in property()
591 property::parse_dtb(input_buffer &structs, input_buffer &strings) in parse_dtb()
593 property_ptr p(new property(structs, strings)); in parse_dtb()
594 if (!p->valid) in parse_dtb()
602 property::parse(text_input_buffer &input, string &&key, string_set &&label, in parse()
603 bool semicolonTerminated, define_map *defines) in parse()
605 property_ptr p(new property(input, in parse()
610 if (!p->valid) in parse()
618 property::write(dtb::output_writer &writer, dtb::string_table &strings) in write()
624 i->push_to_buffer(value_buffer); in write()
632 bool
663 property::write_dts(FILE *file, int indent) in write_dts()
698 for (auto i=vals->begin(), e=vals->end() ; i!=e ; ++i) in write_dts()
700 i->write_dts(file); in write_dts()
712 property::offset_of_value(property_value &val) in offset_of_value()
723 return -1; in offset_of_value()
727 node::parse_name(text_input_buffer &input, bool &is_property, const char *error) in parse_name()
763 behavior = c->visit(fn, this); in visit()
824 // Property, parse it. in node()
827 property_ptr prop = property::parse_dtb(structs, strings); in node()
892 // the property name character set, not the node in node()
893 bool is_property = false; in node()
894 // flag set if our node is marked as /omit-if-no-ref/ to be in node()
896 bool marked_omit_if_no_ref = false; in node()
899 auto parse_delete = [&](const char *expected, bool at) in node()
921 if (input.consume("/delete-node/")) in node()
932 if (input.consume("/delete-property/")) in node()
936 parse_delete("Expected property name", false); in node()
943 if (input.consume("/omit-if-no-ref/")) in node()
950 "Expected property or node name"); in node()
957 child_name = parse_name(input, is_property, "Expected property or node name"); in node()
968 // If we're parsing a property, then we must actually do that. in node()
971 property_ptr p = property::parse(input, std::move(child_name), in node()
988 child->omit_if_no_ref = marked_omit_if_no_ref; in node()
998 props.push_back(property_ptr(new property(std::move(child_name), std::move(child_labels)))); in node()
1002 input.parse_error("Error parsing property. Expected property value"); in node()
1011 bool
1014 return p1->get_key() < p2->get_key(); in cmp_properties()
1017 bool
1020 if (c1->name == c2->name) in cmp_children()
1022 return c1->unit_address < c2->unit_address; in cmp_children()
1024 return c1->name < c2->name; in cmp_children()
1034 c->sort(); in sort()
1071 if (!n->valid) in parse()
1082 if (!n->valid) in parse_dtb()
1094 if (i->get_key() == key) in get_property()
1105 for (auto &l : other->labels) in merge_node()
1111 string full_name = p->name; in merge_node()
1112 if (p->unit_address != string()) in merge_node()
1115 full_name += p->unit_address; in merge_node()
1117 if (other->deleted_children.count(full_name) > 0) in merge_node()
1119 other->deleted_children.erase(full_name); in merge_node()
1126 if (other->deleted_props.count(p->get_key()) > 0) in merge_node()
1128 other->deleted_props.erase(p->get_key()); in merge_node()
1138 for (auto &p : other->properties()) in merge_node()
1140 bool found = false; in merge_node()
1143 if (mp->get_key() == p->get_key()) in merge_node()
1155 for (auto &c : other->children) in merge_node()
1157 bool found = false; in merge_node()
1160 if (i->name == c->name && i->unit_address == c->unit_address) in merge_node()
1162 i->merge_node(c); in merge_node()
1190 p->write(writer, strings); in write()
1194 c->write(writer, strings); in write()
1224 p->write_dts(file, indent+1); in write_dts()
1228 c->write_dts(file, indent+1); in write_dts()
1240 path.push_back(std::make_pair(n->name, n->unit_address)); in collect_names_recursive()
1241 for (const string &name : n->labels) in collect_names_recursive()
1268 for (auto &c : n->child_nodes()) in collect_names_recursive()
1274 for (auto &p : n->properties()) in collect_names_recursive()
1287 if ((p->get_key() == "phandle") || in collect_names_recursive()
1288 (p->get_key() == "linux,phandle")) in collect_names_recursive()
1290 if (p->begin()->byte_data.size() != 4) in collect_names_recursive()
1292 …fprintf(stderr, "Invalid phandle value for node %s. Should be a 4-byte value.\n", n->name.c_str()… in collect_names_recursive()
1297 uint32_t phandle = p->begin()->get_as_uint32(); in collect_names_recursive()
1321 property_ptr p = n->get_property("phandle"); in assign_phandle()
1324 p = n->get_property("linux,phandle"); in assign_phandle()
1339 // any 32-bit system and we've done in assign_phandle()
1347 p.reset(new property("linux,phandle")); in assign_phandle()
1348 p->add_value(v); in assign_phandle()
1349 n->add_property(p); in assign_phandle()
1353 p.reset(new property("phandle")); in assign_phandle()
1354 p->add_value(v); in assign_phandle()
1355 n->add_property(p); in assign_phandle()
1365 if (!n->labels.empty()) in assign_phandles()
1370 for (auto &c : n->child_nodes()) in assign_phandles()
1381 node_path path = node_paths[pv->string_data]; in resolve_cross_references()
1389 pv->byte_data.push_back('/'); in resolve_cross_references()
1390 push_string(pv->byte_data, p->first); in resolve_cross_references()
1391 if (!(p->second.empty())) in resolve_cross_references()
1393 pv->byte_data.push_back('@'); in resolve_cross_references()
1394 push_string(pv->byte_data, p->second); in resolve_cross_references()
1397 pv->byte_data.push_back(0); in resolve_cross_references()
1406 root->visit([&](node &n, node *) { in resolve_cross_references()
1414 sorted_phandles.push_back(i->second); in resolve_cross_references()
1447 for (auto &c : target->child_nodes()) in resolve_cross_references()
1449 if (c->name == node_name) in resolve_cross_references()
1451 if (c->unit_address == node_address) in resolve_cross_references()
1458 possible = path + c->name; in resolve_cross_references()
1459 if (c->unit_address != string()) in resolve_cross_references()
1462 possible += c->unit_address; in resolve_cross_references()
1504 p->begin()->push_to_buffer(i.get().val.byte_data); in resolve_cross_references()
1509 bool
1542 if (!nx->used) in garbage_collect_marked_nodes()
1544 nx->used = 1; in garbage_collect_marked_nodes()
1557 root->visit([&](node &n, node *) { in garbage_collect_marked_nodes()
1577 bool children_deleted = false; in garbage_collect_marked_nodes()
1580 root->visit([&](node &n, node *) { in garbage_collect_marked_nodes()
1581 bool gc_children = false; in garbage_collect_marked_nodes()
1585 if (cn->omit_if_no_ref && !cn->used) in garbage_collect_marked_nodes()
1596 return (nx->omit_if_no_ref && !nx->used); in garbage_collect_marked_nodes()
1611 bool &read_header) in parse_file()
1615 while (input.consume("/dts-v1/;")) in parse_file()
1627 input.parse_error("Expected /dts-v1/; version string"); in parse_file()
1652 if (input.consume("/delete-node/")) in parse_file()
1654 // Top-level /delete-node/ directives refer to references that must in parse_file()
1667 if (expect('&', "Expected reference after top-level /delete-node/.")) in parse_file()
1672 input.parse_error("Expected label name for top-level /delete-node/."); in parse_file()
1692 bool name_is_path_reference = false; in parse_file()
1694 // While it may make sense in a non-plugin context, we don't support such in parse_file()
1710 n->name_is_path_reference = name_is_path_reference; in parse_file()
1759 root->write(struct_writer, st); in write()
1828 fputs("/dts-v1/;\n\n", file); in write_dts()
1834 fwrite(msg, sizeof(msg) - 1, 1, file); in write_dts()
1843 root->write_dts(file, 0); in write_dts()
1922 path += p->first; in to_string()
1923 if (!(p->second.empty())) in to_string()
1926 path += p->second; in to_string()
1935 // In a plugin, we can massage these non-/ root nodes into into a fragment in create_fragment_wrapper()
1948 v.string_data = node->name; in create_fragment_wrapper()
1949 if (!node->name_is_path_reference) in create_fragment_wrapper()
1956 propname = "target-path"; in create_fragment_wrapper()
1959 auto prop = std::make_shared<property>(std::string(propname)); in create_fragment_wrapper()
1960 prop->add_value(v); in create_fragment_wrapper()
1965 wrapper->merge_node(node); in create_fragment_wrapper()
1966 fragment->add_child(std::move(wrapper)); in create_fragment_wrapper()
1967 newroot->add_child(std::move(fragment)); in create_fragment_wrapper()
1975 string name = node->name; in generate_root()
1992 for (auto &c : node->child_nodes()) in reassign_fragment_numbers()
1994 if (c->name == std::string("fragment")) in reassign_fragment_numbers()
1996 int current_address = std::stoi(c->unit_address, nullptr, 16); in reassign_fragment_numbers()
2003 c->unit_address = new_address.str(); in reassign_fragment_numbers()
2028 bool read_header = false; in parse_dts()
2058 string name = node->name; in parse_dts()
2063 // Re-assign any fragment numbers based on a delta of in parse_dts()
2067 root->merge_node(node); in parse_dts()
2082 root->merge_node(fragment); in parse_dts()
2091 existing->second->merge_node(node); in parse_dts()
2104 …fprintf(stderr, "Top-level /delete-node/ directive refers to label %s, which is not found.\n", ref… in parse_dts()
2108 parent->delete_children_if([&](node_ptr &child) { return child == node; }); in parse_dts()
2120 // order semi-predictable and stable. in parse_dts()
2145 auto prop = std::make_shared<property>(std::move(name)); in parse_dts()
2146 prop->add_value(v); in parse_dts()
2149 root->add_child(node::create_special_node("__symbols__", symbols)); in parse_dts()
2153 // already-loaded nodes and external references will need to be in parse_dts()
2159 // {target} = {path}:{property name}:{offset} in parse_dts()
2164 value += i.prop->get_key(); in parse_dts()
2166 value += std::to_string(i.prop->offset_of_value(i.val)); in parse_dts()
2170 auto prop = std::make_shared<property>(std::move(target)); in parse_dts()
2171 prop->add_value(v); in parse_dts()
2175 // then we must update them to 0xdeadbeef and leave a property in in parse_dts()
2190 root->add_child(node::create_special_node("__fixups__", symbols)); in parse_dts()
2196 // location of the reference within a property. in parse_dts()
2214 bool found = false; in parse_dts()
2215 for (auto &c : n->child_nodes()) in parse_dts()
2217 if (c->name == p.first) in parse_dts()
2219 if (c->unit_address == p.second) in parse_dts()
2235 n->add_child(node::create_special_node(path, symbols)); in parse_dts()
2236 n = *(--(n->child_end())); in parse_dts()
2241 push_big_endian(pv.byte_data, static_cast<uint32_t>(i.prop->offset_of_value(i.val))); in parse_dts()
2243 auto key = i.prop->get_key(); in parse_dts()
2244 property_ptr prop = n->get_property(key); in parse_dts()
2245 // If we don't have an existing property then create one and in parse_dts()
2246 // use this property value in parse_dts()
2249 prop = std::make_shared<property>(std::move(key)); in parse_dts()
2250 n->add_property(prop); in parse_dts()
2251 prop->add_value(pv); in parse_dts()
2255 // If we do have an existing property value, try to append in parse_dts()
2257 property_value &old_val = *(--prop->end()); in parse_dts()
2260 prop->add_value(pv); in parse_dts()
2266 if (local_fixups->child_begin() != local_fixups->child_end()) in parse_dts()
2268 root->add_child(std::move(local_fixups)); in parse_dts()
2273 bool device_tree::parse_define(const char *def) in parse_define()
2286 string name(def, val-def); in parse_define()
2295 property_ptr p = property::parse(in, std::move(name_copy), string_set(), false); in parse_define()
2298 return (bool)p; in parse_define()