Lines Matching refs:c
24 #define TRACE(c, ...) \ argument
26 fprintf(stderr, "=== %s: ", (c)->name); \
31 #define TRACE(c, fmt, ...) do { } while (0) argument
43 typedef void (*tree_check_fn)(struct check *c, struct node *dt);
44 typedef void (*node_check_fn)(struct check *c, struct node *dt, struct node *node);
45 typedef void (*prop_check_fn)(struct check *c, struct node *dt,
102 static inline void check_msg(struct check *c, const char *fmt, ...) __attribute__((format (printf, …
104 static inline void check_msg(struct check *c, const char *fmt, ...) in check_msg() argument
109 if ((c->warn && (quiet < 1)) in check_msg()
110 || (c->error && (quiet < 2))) { in check_msg()
112 (c->error) ? "ERROR" : "Warning", c->name); in check_msg()
118 #define FAIL(c, ...) \ argument
120 TRACE((c), "\t\tFAILED at %s:%d", __FILE__, __LINE__); \
121 (c)->status = FAILED; \
122 check_msg((c), __VA_ARGS__); \
125 static void check_nodes_props(struct check *c, struct node *dt, struct node *node) in check_nodes_props() argument
130 TRACE(c, "%s", node->fullpath); in check_nodes_props()
131 if (c->node_fn) in check_nodes_props()
132 c->node_fn(c, dt, node); in check_nodes_props()
134 if (c->prop_fn) in check_nodes_props()
136 TRACE(c, "%s\t'%s'", node->fullpath, prop->name); in check_nodes_props()
137 c->prop_fn(c, dt, node, prop); in check_nodes_props()
141 check_nodes_props(c, dt, child); in check_nodes_props()
144 static int run_check(struct check *c, struct node *dt) in run_check() argument
149 assert(!c->inprogress); in run_check()
151 if (c->status != UNCHECKED) in run_check()
154 c->inprogress = 1; in run_check()
156 for (i = 0; i < c->num_prereqs; i++) { in run_check()
157 struct check *prq = c->prereq[i]; in run_check()
160 c->status = PREREQ; in run_check()
161 check_msg(c, "Failed prerequisite '%s'", in run_check()
162 c->prereq[i]->name); in run_check()
166 if (c->status != UNCHECKED) in run_check()
169 if (c->node_fn || c->prop_fn) in run_check()
170 check_nodes_props(c, dt, dt); in run_check()
172 if (c->tree_fn) in run_check()
173 c->tree_fn(c, dt); in run_check()
174 if (c->status == UNCHECKED) in run_check()
175 c->status = PASSED; in run_check()
177 TRACE(c, "\tCompleted, status %d", c->status); in run_check()
180 c->inprogress = 0; in run_check()
181 if ((c->status != PASSED) && (c->error)) in run_check()
191 static inline void check_always_fail(struct check *c, struct node *dt) in check_always_fail() argument
193 FAIL(c, "always_fail check"); in check_always_fail()
197 static void check_is_string(struct check *c, struct node *root, in check_is_string() argument
201 char *propname = c->data; in check_is_string()
208 FAIL(c, "\"%s\" property in %s is not a string", in check_is_string()
216 static void check_is_cell(struct check *c, struct node *root, in check_is_cell() argument
220 char *propname = c->data; in check_is_cell()
227 FAIL(c, "\"%s\" property in %s is not a single cell", in check_is_cell()
239 static void check_duplicate_node_names(struct check *c, struct node *dt, in check_duplicate_node_names() argument
249 FAIL(c, "Duplicate node name %s", in check_duplicate_node_names()
254 static void check_duplicate_property_names(struct check *c, struct node *dt, in check_duplicate_property_names() argument
264 FAIL(c, "Duplicate property name %s in %s", in check_duplicate_property_names()
276 static void check_node_name_chars(struct check *c, struct node *dt, in check_node_name_chars() argument
279 int n = strspn(node->name, c->data); in check_node_name_chars()
282 FAIL(c, "Bad character '%c' in node %s", in check_node_name_chars()
287 static void check_node_name_format(struct check *c, struct node *dt, in check_node_name_format() argument
291 FAIL(c, "Node %s has multiple '@' characters in name", in check_node_name_format()
296 static void check_property_name_chars(struct check *c, struct node *dt, in check_property_name_chars() argument
299 int n = strspn(prop->name, c->data); in check_property_name_chars()
302 FAIL(c, "Bad character '%c' in property name \"%s\", node %s", in check_property_name_chars()
314 static void check_duplicate_label(struct check *c, struct node *dt, in check_duplicate_label() argument
334 FAIL(c, "Duplicate label '%s' on " DESCLABEL_FMT in check_duplicate_label()
340 static void check_duplicate_label_node(struct check *c, struct node *dt, in check_duplicate_label_node() argument
346 check_duplicate_label(c, dt, l->label, node, NULL, NULL); in check_duplicate_label_node()
348 static void check_duplicate_label_prop(struct check *c, struct node *dt, in check_duplicate_label_prop() argument
355 check_duplicate_label(c, dt, l->label, node, prop, NULL); in check_duplicate_label_prop()
358 check_duplicate_label(c, dt, m->ref, node, prop, m); in check_duplicate_label_prop()
363 static void check_explicit_phandles(struct check *c, struct node *root, in check_explicit_phandles() argument
375 FAIL(c, "%s has bad length (%d) %s property", in check_explicit_phandles()
387 FAIL(c, "%s in %s is a reference to another node", in check_explicit_phandles()
402 FAIL(c, "%s has bad value (0x%x) in %s property", in check_explicit_phandles()
408 FAIL(c, "%s has %s property which replaces existing phandle information", in check_explicit_phandles()
413 FAIL(c, "%s has duplicated phandle 0x%x (seen before at %s)", in check_explicit_phandles()
422 static void check_name_properties(struct check *c, struct node *root, in check_name_properties() argument
438 FAIL(c, "\"name\" property in %s is incorrect (\"%s\" instead" in check_name_properties()
456 static void fixup_phandle_references(struct check *c, struct node *dt, in fixup_phandle_references() argument
468 FAIL(c, "Reference to non-existent node or label \"%s\"\n", in fixup_phandle_references()
480 static void fixup_path_references(struct check *c, struct node *dt, in fixup_path_references() argument
492 FAIL(c, "Reference to non-existent node or label \"%s\"\n", in fixup_path_references()
516 static void fixup_addr_size_cells(struct check *c, struct node *dt, in fixup_addr_size_cells() argument
540 static void check_reg_format(struct check *c, struct node *dt, in check_reg_format() argument
551 FAIL(c, "Root node has a \"reg\" property"); in check_reg_format()
556 FAIL(c, "\"reg\" property in %s is empty", node->fullpath); in check_reg_format()
563 FAIL(c, "\"reg\" property in %s has invalid length (%d bytes) " in check_reg_format()
569 static void check_ranges_format(struct check *c, struct node *dt, in check_ranges_format() argument
580 FAIL(c, "Root node has a \"ranges\" property"); in check_ranges_format()
592 FAIL(c, "%s has empty \"ranges\" property but its " in check_ranges_format()
597 FAIL(c, "%s has empty \"ranges\" property but its " in check_ranges_format()
602 FAIL(c, "\"ranges\" property in %s has invalid length (%d bytes) " in check_ranges_format()
613 static void check_avoid_default_addr_size(struct check *c, struct node *dt, in check_avoid_default_addr_size() argument
628 FAIL(c, "Relying on default #address-cells value for %s", in check_avoid_default_addr_size()
632 FAIL(c, "Relying on default #size-cells value for %s", in check_avoid_default_addr_size()
637 static void check_obsolete_chosen_interrupt_controller(struct check *c, in check_obsolete_chosen_interrupt_controller() argument
649 FAIL(c, "/chosen has obsolete \"interrupt-controller\" " in check_obsolete_chosen_interrupt_controller()
675 static void enable_warning_error(struct check *c, bool warn, bool error) in enable_warning_error() argument
680 if ((warn && !c->warn) || (error && !c->error)) in enable_warning_error()
681 for (i = 0; i < c->num_prereqs; i++) in enable_warning_error()
682 enable_warning_error(c->prereq[i], warn, error); in enable_warning_error()
684 c->warn = c->warn || warn; in enable_warning_error()
685 c->error = c->error || error; in enable_warning_error()
688 static void disable_warning_error(struct check *c, bool warn, bool error) in disable_warning_error() argument
694 if ((warn && c->warn) || (error && c->error)) { in disable_warning_error()
700 if (cc->prereq[j] == c) in disable_warning_error()
705 c->warn = c->warn && !warn; in disable_warning_error()
706 c->error = c->error && !error; in disable_warning_error()
722 struct check *c = check_table[i]; in parse_checks_option() local
724 if (streq(c->name, name)) { in parse_checks_option()
726 enable_warning_error(c, warn, error); in parse_checks_option()
728 disable_warning_error(c, warn, error); in parse_checks_option()
743 struct check *c = check_table[i]; in process_checks() local
745 if (c->warn || c->error) in process_checks()
746 error = error || run_check(c, dt); in process_checks()