Lines Matching refs:info
158 static int fdt_add_region(struct fdt_region_state *info, int offset, int size) in fdt_add_region() argument
162 reg = info->region ? &info->region[info->count - 1] : NULL; in fdt_add_region()
163 if (info->can_merge && info->count && in fdt_add_region()
164 info->count <= info->max_regions && in fdt_add_region()
167 } else if (info->count++ < info->max_regions) { in fdt_add_region()
180 static int region_list_contains_offset(struct fdt_region_state *info, in region_list_contains_offset() argument
187 for (reg = info->region, num = 0; num < info->count; reg++, num++) { in region_list_contains_offset()
220 int max_regions, struct fdt_region_state *info) in fdt_add_alias_regions() argument
243 info->region = region; in fdt_add_alias_regions()
244 info->count = count; in fdt_add_alias_regions()
245 info->can_merge = 0; in fdt_add_alias_regions()
246 info->max_regions = max_regions; in fdt_add_alias_regions()
258 if (!region_list_contains_offset(info, fdt, target)) in fdt_add_alias_regions()
265 fdt_add_region(info, base + node, 12); in fdt_add_alias_regions()
268 fdt_add_region(info, base + offset, next - offset); in fdt_add_alias_regions()
273 fdt_add_region(info, base + node_end, sizeof(fdt32_t)); in fdt_add_alias_regions()
275 return info->count < max_regions ? info->count : -FDT_ERR_NOSPACE; in fdt_add_alias_regions()
295 static int fdt_include_supernodes(struct fdt_region_state *info, int depth) in fdt_include_supernodes() argument
297 int base = fdt_off_dt_struct(info->fdt); in fdt_include_supernodes()
308 if (!info->stack[i].included) { in fdt_include_supernodes()
309 start = info->stack[i].offset; in fdt_include_supernodes()
312 fdt_next_tag(info->fdt, start, &stop_at); in fdt_include_supernodes()
313 if (fdt_add_region(info, base + start, stop_at - start)) in fdt_include_supernodes()
317 info->stack[i].included = 1; in fdt_include_supernodes()
318 info->can_merge = 1; in fdt_include_supernodes()
322 if (!info->stack[i].want) in fdt_include_supernodes()
323 info->stack[i].want = WANT_NODES_ONLY; in fdt_include_supernodes()
343 struct fdt_region_state *info) in fdt_first_region() argument
345 struct fdt_region_ptrs *p = &info->ptrs; in fdt_first_region()
348 info->fdt = fdt; in fdt_first_region()
349 info->can_merge = 1; in fdt_first_region()
350 info->max_regions = 1; in fdt_first_region()
351 info->start = -1; in fdt_first_region()
360 path, path_len, flags, info); in fdt_first_region()
440 struct fdt_region_state *info) in fdt_next_region() argument
446 info->region = region; in fdt_next_region()
447 info->count = 0; in fdt_next_region()
448 if (info->ptrs.done < FDT_DONE_MEM_RSVMAP && in fdt_next_region()
451 if (fdt_add_region(info, fdt_off_mem_rsvmap(fdt), in fdt_next_region()
455 info->can_merge = 0; /* Don't allow merging with this */ in fdt_next_region()
456 info->ptrs.done = FDT_DONE_MEM_RSVMAP; in fdt_next_region()
466 while (info->ptrs.done < FDT_DONE_STRUCT) { in fdt_next_region()
483 p = info->ptrs; in fdt_next_region()
539 info->stack[p.depth].want = p.want; in fdt_next_region()
540 info->stack[p.depth].offset = offset; in fdt_next_region()
577 info->stack[p.depth].included = include; in fdt_next_region()
591 p.want = info->stack[p.depth].want; in fdt_next_region()
606 if (include && info->start == -1) { in fdt_next_region()
609 if (fdt_include_supernodes(info, p.depth)) in fdt_next_region()
612 info->start = offset; in fdt_next_region()
619 if (!include && info->start != -1) { in fdt_next_region()
620 if (fdt_add_region(info, base + info->start, in fdt_next_region()
621 stop_at - info->start)) in fdt_next_region()
623 info->start = -1; in fdt_next_region()
624 info->can_merge = 1; in fdt_next_region()
628 info->ptrs = p; in fdt_next_region()
632 if (info->ptrs.done < FDT_DONE_END) { in fdt_next_region()
633 if (info->ptrs.nextoffset != fdt_size_dt_struct(fdt)) in fdt_next_region()
636 if (fdt_add_region(info, base + info->start, in fdt_next_region()
637 info->ptrs.nextoffset - info->start)) in fdt_next_region()
639 info->ptrs.done++; in fdt_next_region()
641 if (info->ptrs.done < FDT_DONE_STRINGS) { in fdt_next_region()
643 info->can_merge = 0; in fdt_next_region()
645 base + info->ptrs.nextoffset) in fdt_next_region()
647 if (fdt_add_region(info, fdt_off_dt_strings(fdt), in fdt_next_region()
651 info->ptrs.done++; in fdt_next_region()
654 return info->count > 0 ? 0 : -FDT_ERR_NOTFOUND; in fdt_next_region()