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()
168 static int of_overlay_apply(struct of_overlay *ov) in of_overlay_apply() argument
173 for (i = 0; i < ov->count; i++) { in of_overlay_apply()
174 struct of_overlay_info *ovinfo = &ov->ovinfo_tab[i]; in of_overlay_apply()
176 err = of_overlay_apply_one(ov, ovinfo->target, ovinfo->overlay); in of_overlay_apply()
230 static int of_fill_overlay_info(struct of_overlay *ov, in of_fill_overlay_info() argument
263 static int of_build_overlay_info(struct of_overlay *ov, in of_build_overlay_info() argument
282 err = of_fill_overlay_info(ov, node, &ovinfo[cnt]); in of_build_overlay_info()
293 ov->count = cnt; in of_build_overlay_info()
294 ov->ovinfo_tab = ovinfo; in of_build_overlay_info()
308 static int of_free_overlay_info(struct of_overlay *ov) in of_free_overlay_info() argument
314 for (i = ov->count - 1; i >= 0; i--) { in of_free_overlay_info()
315 ovinfo = &ov->ovinfo_tab[i]; in of_free_overlay_info()
320 kfree(ov->ovinfo_tab); in of_free_overlay_info()
340 struct of_overlay *ov; in of_overlay_create() local
344 ov = kzalloc(sizeof(*ov), GFP_KERNEL); in of_overlay_create()
345 if (ov == NULL) in of_overlay_create()
347 ov->id = -1; in of_overlay_create()
349 INIT_LIST_HEAD(&ov->node); in of_overlay_create()
351 of_changeset_init(&ov->cset); in of_overlay_create()
355 id = idr_alloc(&ov_idr, ov, 0, 0, GFP_KERNEL); in of_overlay_create()
362 ov->id = id; in of_overlay_create()
365 err = of_build_overlay_info(ov, tree); in of_overlay_create()
373 err = of_overlay_apply(ov); in of_overlay_create()
381 err = of_changeset_apply(&ov->cset); in of_overlay_create()
389 list_add_tail(&ov->node, &ov_list); in of_overlay_create()
397 of_free_overlay_info(ov); in of_overlay_create()
399 idr_remove(&ov_idr, ov->id); in of_overlay_create()
401 of_changeset_destroy(&ov->cset); in of_overlay_create()
402 kfree(ov); in of_overlay_create()
428 static int overlay_is_topmost(struct of_overlay *ov, struct device_node *dn) in overlay_is_topmost() argument
435 if (ovt == ov) in overlay_is_topmost()
442 __func__, ov->id, ovt->id, in overlay_is_topmost()
463 static int overlay_removal_is_ok(struct of_overlay *ov) in overlay_removal_is_ok() argument
467 list_for_each_entry(ce, &ov->cset.entries, node) { in overlay_removal_is_ok()
468 if (!overlay_is_topmost(ov, ce->np)) { in overlay_removal_is_ok()
470 __func__, ov->id); in overlay_removal_is_ok()
488 struct of_overlay *ov; in of_overlay_destroy() local
493 ov = idr_find(&ov_idr, id); in of_overlay_destroy()
494 if (ov == NULL) { in of_overlay_destroy()
502 if (!overlay_removal_is_ok(ov)) { in of_overlay_destroy()
510 list_del(&ov->node); in of_overlay_destroy()
511 of_changeset_revert(&ov->cset); in of_overlay_destroy()
512 of_free_overlay_info(ov); in of_overlay_destroy()
514 of_changeset_destroy(&ov->cset); in of_overlay_destroy()
515 kfree(ov); in of_overlay_destroy()
535 struct of_overlay *ov, *ovn; in of_overlay_destroy_all() local
540 list_for_each_entry_safe_reverse(ov, ovn, &ov_list, node) { in of_overlay_destroy_all()
541 list_del(&ov->node); in of_overlay_destroy_all()
542 of_changeset_revert(&ov->cset); in of_overlay_destroy_all()
543 of_free_overlay_info(ov); in of_overlay_destroy_all()
544 idr_remove(&ov_idr, ov->id); in of_overlay_destroy_all()
545 kfree(ov); in of_overlay_destroy_all()