xref: /linux/drivers/gpu/drm/i915/display/intel_parent.h (revision 939faf71cf7ca9ab3d1bd2912ac0e203d4d7156a)
1 /* SPDX-License-Identifier: MIT */
2 /* Copyright © 2025 Intel Corporation */
3 
4 #ifndef __INTEL_PARENT_H__
5 #define __INTEL_PARENT_H__
6 
7 #include <linux/types.h>
8 
9 struct dma_fence;
10 struct drm_scanout_buffer;
11 struct intel_display;
12 struct intel_hdcp_gsc_context;
13 struct intel_panic;
14 struct intel_stolen_node;
15 
16 /* hdcp */
17 ssize_t intel_parent_hdcp_gsc_msg_send(struct intel_display *display,
18 				       struct intel_hdcp_gsc_context *gsc_context,
19 				       void *msg_in, size_t msg_in_len,
20 				       void *msg_out, size_t msg_out_len);
21 bool intel_parent_hdcp_gsc_check_status(struct intel_display *display);
22 struct intel_hdcp_gsc_context *intel_parent_hdcp_gsc_context_alloc(struct intel_display *display);
23 void intel_parent_hdcp_gsc_context_free(struct intel_display *display,
24 					struct intel_hdcp_gsc_context *gsc_context);
25 
26 /* irq */
27 bool intel_parent_irq_enabled(struct intel_display *display);
28 void intel_parent_irq_synchronize(struct intel_display *display);
29 
30 /* panic */
31 struct intel_panic *intel_parent_panic_alloc(struct intel_display *display);
32 int intel_parent_panic_setup(struct intel_display *display, struct intel_panic *panic, struct drm_scanout_buffer *sb);
33 void intel_parent_panic_finish(struct intel_display *display, struct intel_panic *panic);
34 
35 /* pc8 */
36 void intel_parent_pc8_block(struct intel_display *display);
37 void intel_parent_pc8_unblock(struct intel_display *display);
38 
39 /* rps */
40 bool intel_parent_rps_available(struct intel_display *display);
41 void intel_parent_rps_boost_if_not_started(struct intel_display *display, struct dma_fence *fence);
42 void intel_parent_rps_mark_interactive(struct intel_display *display, bool interactive);
43 void intel_parent_rps_ilk_irq_handler(struct intel_display *display);
44 
45 /* stolen */
46 int intel_parent_stolen_insert_node_in_range(struct intel_display *display,
47 					     struct intel_stolen_node *node, u64 size,
48 					     unsigned int align, u64 start, u64 end);
49 int intel_parent_stolen_insert_node(struct intel_display *display, struct intel_stolen_node *node, u64 size,
50 				    unsigned int align);
51 void intel_parent_stolen_remove_node(struct intel_display *display,
52 				     struct intel_stolen_node *node);
53 bool intel_parent_stolen_initialized(struct intel_display *display);
54 bool intel_parent_stolen_node_allocated(struct intel_display *display,
55 					const struct intel_stolen_node *node);
56 u32 intel_parent_stolen_node_offset(struct intel_display *display, struct intel_stolen_node *node);
57 u64 intel_parent_stolen_area_address(struct intel_display *display);
58 u64 intel_parent_stolen_area_size(struct intel_display *display);
59 u64 intel_parent_stolen_node_address(struct intel_display *display, struct intel_stolen_node *node);
60 u64 intel_parent_stolen_node_size(struct intel_display *display, const struct intel_stolen_node *node);
61 struct intel_stolen_node *intel_parent_stolen_node_alloc(struct intel_display *display);
62 void intel_parent_stolen_node_free(struct intel_display *display, const struct intel_stolen_node *node);
63 
64 /* generic */
65 bool intel_parent_has_auxccs(struct intel_display *display);
66 bool intel_parent_has_fenced_regions(struct intel_display *display);
67 bool intel_parent_vgpu_active(struct intel_display *display);
68 void intel_parent_fence_priority_display(struct intel_display *display, struct dma_fence *fence);
69 
70 #endif /* __INTEL_PARENT_H__ */
71