1 /* SPDX-License-Identifier: MIT */ 2 /* 3 * Copyright © 2020 Intel Corporation 4 */ 5 6 #ifndef __INTEL_GLOBAL_STATE_H__ 7 #define __INTEL_GLOBAL_STATE_H__ 8 9 #include <linux/kref.h> 10 #include <linux/list.h> 11 12 struct intel_atomic_state; 13 struct intel_display; 14 struct intel_global_commit; 15 struct intel_global_obj; 16 struct intel_global_state; 17 18 struct intel_global_state_funcs { 19 struct intel_global_state *(*atomic_duplicate_state)(struct intel_global_obj *obj); 20 void (*atomic_destroy_state)(struct intel_global_obj *obj, 21 struct intel_global_state *state); 22 }; 23 24 struct intel_global_obj { 25 struct list_head head; 26 struct intel_global_state *state; 27 const struct intel_global_state_funcs *funcs; 28 }; 29 30 struct intel_global_state { 31 struct intel_global_obj *obj; 32 struct intel_atomic_state *state; 33 struct intel_global_commit *commit; 34 struct kref ref; 35 bool changed, serialized; 36 }; 37 38 void intel_atomic_global_obj_init(struct intel_display *display, 39 struct intel_global_obj *obj, 40 struct intel_global_state *state, 41 const struct intel_global_state_funcs *funcs); 42 void intel_atomic_global_obj_cleanup(struct intel_display *display); 43 44 struct intel_global_state * 45 intel_atomic_get_global_obj_state(struct intel_atomic_state *state, 46 struct intel_global_obj *obj); 47 struct intel_global_state * 48 intel_atomic_get_old_global_obj_state(struct intel_atomic_state *state, 49 struct intel_global_obj *obj); 50 struct intel_global_state * 51 intel_atomic_get_new_global_obj_state(struct intel_atomic_state *state, 52 struct intel_global_obj *obj); 53 54 void intel_atomic_swap_global_state(struct intel_atomic_state *state); 55 void intel_atomic_clear_global_state(struct intel_atomic_state *state); 56 int intel_atomic_lock_global_state(struct intel_global_state *obj_state); 57 int intel_atomic_serialize_global_state(struct intel_global_state *obj_state); 58 59 int intel_atomic_global_state_setup_commit(struct intel_atomic_state *state); 60 void intel_atomic_global_state_commit_done(struct intel_atomic_state *state); 61 int intel_atomic_global_state_wait_for_dependencies(struct intel_atomic_state *state); 62 63 bool intel_atomic_global_state_is_serialized(struct intel_atomic_state *state); 64 65 #endif 66