Lines Matching refs:ov
56 static int of_overlay_apply_one(struct of_overlay *ov,
59 static int of_overlay_apply_single_property(struct of_overlay *ov, in of_overlay_apply_single_property() argument
79 return of_changeset_add_property(&ov->cset, target, propn); in of_overlay_apply_single_property()
82 return of_changeset_update_property(&ov->cset, target, propn); in of_overlay_apply_single_property()
85 static int of_overlay_apply_single_device_node(struct of_overlay *ov, in of_overlay_apply_single_device_node() argument
100 ret = of_overlay_apply_one(ov, tchild, child); in of_overlay_apply_single_device_node()
111 ret = of_changeset_attach_node(&ov->cset, tchild); in of_overlay_apply_single_device_node()
115 ret = of_overlay_apply_one(ov, tchild, child); in of_overlay_apply_single_device_node()
130 static int of_overlay_apply_one(struct of_overlay *ov, in of_overlay_apply_one() argument
138 ret = of_overlay_apply_single_property(ov, target, prop); in of_overlay_apply_one()
147 ret = of_overlay_apply_single_device_node(ov, target, child); in of_overlay_apply_one()
169 static int of_overlay_apply(struct of_overlay *ov) in of_overlay_apply() argument
174 for (i = 0; i < ov->count; i++) { in of_overlay_apply()
175 struct of_overlay_info *ovinfo = &ov->ovinfo_tab[i]; in of_overlay_apply()
177 err = of_overlay_apply_one(ov, ovinfo->target, ovinfo->overlay); in of_overlay_apply()
231 static int of_fill_overlay_info(struct of_overlay *ov, in of_fill_overlay_info() argument
264 static int of_build_overlay_info(struct of_overlay *ov, in of_build_overlay_info() argument
283 err = of_fill_overlay_info(ov, node, &ovinfo[cnt]); in of_build_overlay_info()
294 ov->count = cnt; in of_build_overlay_info()
295 ov->ovinfo_tab = ovinfo; in of_build_overlay_info()
309 static int of_free_overlay_info(struct of_overlay *ov) in of_free_overlay_info() argument
315 for (i = ov->count - 1; i >= 0; i--) { in of_free_overlay_info()
316 ovinfo = &ov->ovinfo_tab[i]; in of_free_overlay_info()
321 kfree(ov->ovinfo_tab); in of_free_overlay_info()
341 struct of_overlay *ov; in of_overlay_create() local
345 ov = kzalloc(sizeof(*ov), GFP_KERNEL); in of_overlay_create()
346 if (ov == NULL) in of_overlay_create()
348 ov->id = -1; in of_overlay_create()
350 INIT_LIST_HEAD(&ov->node); in of_overlay_create()
352 of_changeset_init(&ov->cset); in of_overlay_create()
356 id = idr_alloc(&ov_idr, ov, 0, 0, GFP_KERNEL); in of_overlay_create()
363 ov->id = id; in of_overlay_create()
366 err = of_build_overlay_info(ov, tree); in of_overlay_create()
374 err = of_overlay_apply(ov); in of_overlay_create()
382 err = of_changeset_apply(&ov->cset); in of_overlay_create()
390 list_add_tail(&ov->node, &ov_list); in of_overlay_create()
398 of_free_overlay_info(ov); in of_overlay_create()
400 idr_remove(&ov_idr, ov->id); in of_overlay_create()
402 of_changeset_destroy(&ov->cset); in of_overlay_create()
403 kfree(ov); in of_overlay_create()
431 static int overlay_is_topmost(struct of_overlay *ov, struct device_node *dn) in overlay_is_topmost() argument
438 if (ovt == ov) in overlay_is_topmost()
445 __func__, ov->id, ovt->id, in overlay_is_topmost()
466 static int overlay_removal_is_ok(struct of_overlay *ov) in overlay_removal_is_ok() argument
470 list_for_each_entry(ce, &ov->cset.entries, node) { in overlay_removal_is_ok()
471 if (!overlay_is_topmost(ov, ce->np)) { in overlay_removal_is_ok()
473 __func__, ov->id); in overlay_removal_is_ok()
491 struct of_overlay *ov; in of_overlay_destroy() local
496 ov = idr_find(&ov_idr, id); in of_overlay_destroy()
497 if (ov == NULL) { in of_overlay_destroy()
505 if (!overlay_removal_is_ok(ov)) { in of_overlay_destroy()
513 list_del(&ov->node); in of_overlay_destroy()
514 of_changeset_revert(&ov->cset); in of_overlay_destroy()
515 of_free_overlay_info(ov); in of_overlay_destroy()
517 of_changeset_destroy(&ov->cset); in of_overlay_destroy()
518 kfree(ov); in of_overlay_destroy()
538 struct of_overlay *ov, *ovn; in of_overlay_destroy_all() local
543 list_for_each_entry_safe_reverse(ov, ovn, &ov_list, node) { in of_overlay_destroy_all()
544 list_del(&ov->node); in of_overlay_destroy_all()
545 of_changeset_revert(&ov->cset); in of_overlay_destroy_all()
546 of_free_overlay_info(ov); in of_overlay_destroy_all()
547 idr_remove(&ov_idr, ov->id); in of_overlay_destroy_all()
548 kfree(ov); in of_overlay_destroy_all()