xref: /linux/drivers/gpu/drm/i915/display/intel_dp_tunnel.h (revision bba2c3615bd6cfee7456d1130f2e6b01b3f4e9ba)
1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2023 Intel Corporation
4  */
5 
6 #ifndef __INTEL_DP_TUNNEL_H__
7 #define __INTEL_DP_TUNNEL_H__
8 
9 #include <linux/errno.h>
10 #include <linux/types.h>
11 
12 struct drm_connector_state;
13 struct drm_modeset_acquire_ctx;
14 struct intel_atomic_state;
15 struct intel_connector;
16 struct intel_crtc;
17 struct intel_crtc_state;
18 struct intel_display;
19 struct intel_dp;
20 struct intel_encoder;
21 struct intel_link_bw_limits;
22 
23 #if (IS_ENABLED(CONFIG_DRM_I915_DP_TUNNEL) && defined(I915)) || \
24 	(IS_ENABLED(CONFIG_DRM_XE_DP_TUNNEL) && !defined(I915))
25 
26 int intel_dp_tunnel_detect(struct intel_dp *intel_dp, struct drm_modeset_acquire_ctx *ctx);
27 void intel_dp_tunnel_disconnect(struct intel_dp *intel_dp);
28 void intel_dp_tunnel_destroy(struct intel_dp *intel_dp);
29 void intel_dp_tunnel_resume(struct intel_dp *intel_dp,
30 			    const struct intel_crtc_state *crtc_state,
31 			    bool dpcd_updated);
32 void intel_dp_tunnel_suspend(struct intel_dp *intel_dp);
33 
34 bool intel_dp_tunnel_bw_alloc_is_enabled(struct intel_dp *intel_dp);
35 bool intel_dp_tunnel_pr_optimization_supported(struct intel_dp *intel_dp);
36 
37 void
38 intel_dp_tunnel_atomic_cleanup_inherited_state(struct intel_atomic_state *state);
39 
40 int intel_dp_tunnel_atomic_compute_stream_bw(struct intel_atomic_state *state,
41 					     struct intel_dp *intel_dp,
42 					     const struct intel_connector *connector,
43 					     struct intel_crtc_state *crtc_state);
44 int intel_dp_tunnel_atomic_clear_stream_bw(struct intel_atomic_state *state,
45 					   struct intel_crtc_state *crtc_state);
46 
47 int intel_dp_tunnel_atomic_add_state_for_crtc(struct intel_atomic_state *state,
48 					      struct intel_crtc *crtc);
49 int intel_dp_tunnel_atomic_check_link(struct intel_atomic_state *state,
50 				      struct intel_link_bw_limits *limits);
51 int intel_dp_tunnel_atomic_check_state(struct intel_atomic_state *state,
52 				       struct intel_dp *intel_dp,
53 				       struct intel_connector *connector);
54 
55 void intel_dp_tunnel_atomic_alloc_bw(struct intel_atomic_state *state);
56 
57 int intel_dp_tunnel_mgr_init(struct intel_display *display);
58 void intel_dp_tunnel_mgr_cleanup(struct intel_display *display);
59 
60 #else
61 
62 static inline int
63 intel_dp_tunnel_detect(struct intel_dp *intel_dp, struct drm_modeset_acquire_ctx *ctx)
64 {
65 	return -EOPNOTSUPP;
66 }
67 
68 static inline void intel_dp_tunnel_disconnect(struct intel_dp *intel_dp) {}
69 static inline void intel_dp_tunnel_destroy(struct intel_dp *intel_dp) {}
70 static inline void intel_dp_tunnel_resume(struct intel_dp *intel_dp,
71 					  const struct intel_crtc_state *crtc_state,
72 					  bool dpcd_updated) {}
73 static inline void intel_dp_tunnel_suspend(struct intel_dp *intel_dp) {}
74 
75 static inline bool intel_dp_tunnel_bw_alloc_is_enabled(struct intel_dp *intel_dp)
76 {
77 	return false;
78 }
79 
80 static inline bool intel_dp_tunnel_pr_optimization_supported(struct intel_dp *intel_dp)
81 {
82 	return false;
83 }
84 
85 static inline void
86 intel_dp_tunnel_atomic_cleanup_inherited_state(struct intel_atomic_state *state) {}
87 
88 static inline int
89 intel_dp_tunnel_atomic_compute_stream_bw(struct intel_atomic_state *state,
90 					 struct intel_dp *intel_dp,
91 					 const struct intel_connector *connector,
92 					 struct intel_crtc_state *crtc_state)
93 {
94 	return 0;
95 }
96 
97 static inline int
98 intel_dp_tunnel_atomic_clear_stream_bw(struct intel_atomic_state *state,
99 				       struct intel_crtc_state *crtc_state)
100 {
101 	return 0;
102 }
103 
104 static inline int
105 intel_dp_tunnel_atomic_add_state_for_crtc(struct intel_atomic_state *state,
106 					  struct intel_crtc *crtc)
107 {
108 	return 0;
109 }
110 
111 static inline int
112 intel_dp_tunnel_atomic_check_link(struct intel_atomic_state *state,
113 				  struct intel_link_bw_limits *limits)
114 {
115 	return 0;
116 }
117 
118 static inline int
119 intel_dp_tunnel_atomic_check_state(struct intel_atomic_state *state,
120 				   struct intel_dp *intel_dp,
121 				   struct intel_connector *connector)
122 {
123 	return 0;
124 }
125 
126 static inline int
127 intel_dp_tunnel_atomic_alloc_bw(struct intel_atomic_state *state)
128 {
129 	return 0;
130 }
131 
132 static inline int
133 intel_dp_tunnel_mgr_init(struct intel_display *display)
134 {
135 	return 0;
136 }
137 
138 static inline void intel_dp_tunnel_mgr_cleanup(struct intel_display *display) {}
139 
140 #endif /* CONFIG_DRM_I915_DP_TUNNEL || CONFIG_DRM_XE_DP_TUNNEL */
141 
142 #endif /* __INTEL_DP_TUNNEL_H__ */
143