xref: /linux/drivers/gpu/drm/i915/display/intel_global_state.h (revision 43f06e8165c4f6e16ab32ede845171ac66d4eaaa)
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