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
12struct drm_i915_private;
13struct drm_connector_state;
14struct drm_modeset_acquire_ctx;
15
16struct intel_atomic_state;
17struct intel_connector;
18struct intel_crtc;
19struct intel_crtc_state;
20struct intel_dp;
21struct intel_encoder;
22struct intel_link_bw_limits;
23
24#if defined(CONFIG_DRM_I915_DP_TUNNEL) && defined(I915)
25
26int intel_dp_tunnel_detect(struct intel_dp *intel_dp, struct drm_modeset_acquire_ctx *ctx);
27void intel_dp_tunnel_disconnect(struct intel_dp *intel_dp);
28void intel_dp_tunnel_destroy(struct intel_dp *intel_dp);
29void intel_dp_tunnel_resume(struct intel_dp *intel_dp,
30			    const struct intel_crtc_state *crtc_state,
31			    bool dpcd_updated);
32void intel_dp_tunnel_suspend(struct intel_dp *intel_dp);
33
34bool intel_dp_tunnel_bw_alloc_is_enabled(struct intel_dp *intel_dp);
35
36void
37intel_dp_tunnel_atomic_cleanup_inherited_state(struct intel_atomic_state *state);
38
39int intel_dp_tunnel_atomic_compute_stream_bw(struct intel_atomic_state *state,
40					     struct intel_dp *intel_dp,
41					     const struct intel_connector *connector,
42					     struct intel_crtc_state *crtc_state);
43void intel_dp_tunnel_atomic_clear_stream_bw(struct intel_atomic_state *state,
44					    struct intel_crtc_state *crtc_state);
45
46int intel_dp_tunnel_atomic_add_state_for_crtc(struct intel_atomic_state *state,
47					      struct intel_crtc *crtc);
48int intel_dp_tunnel_atomic_check_link(struct intel_atomic_state *state,
49				      struct intel_link_bw_limits *limits);
50int intel_dp_tunnel_atomic_check_state(struct intel_atomic_state *state,
51				       struct intel_dp *intel_dp,
52				       struct intel_connector *connector);
53
54void intel_dp_tunnel_atomic_alloc_bw(struct intel_atomic_state *state);
55
56int intel_dp_tunnel_mgr_init(struct drm_i915_private *i915);
57void intel_dp_tunnel_mgr_cleanup(struct drm_i915_private *i915);
58
59#else
60
61static inline int
62intel_dp_tunnel_detect(struct intel_dp *intel_dp, struct drm_modeset_acquire_ctx *ctx)
63{
64	return -EOPNOTSUPP;
65}
66
67static inline void intel_dp_tunnel_disconnect(struct intel_dp *intel_dp) {}
68static inline void intel_dp_tunnel_destroy(struct intel_dp *intel_dp) {}
69static inline void intel_dp_tunnel_resume(struct intel_dp *intel_dp,
70					  const struct intel_crtc_state *crtc_state,
71					  bool dpcd_updated) {}
72static inline void intel_dp_tunnel_suspend(struct intel_dp *intel_dp) {}
73
74static inline bool intel_dp_tunnel_bw_alloc_is_enabled(struct intel_dp *intel_dp)
75{
76	return false;
77}
78
79static inline void
80intel_dp_tunnel_atomic_cleanup_inherited_state(struct intel_atomic_state *state) {}
81
82static inline int
83intel_dp_tunnel_atomic_compute_stream_bw(struct intel_atomic_state *state,
84					 struct intel_dp *intel_dp,
85					 const struct intel_connector *connector,
86					 struct intel_crtc_state *crtc_state)
87{
88	return 0;
89}
90
91static inline void
92intel_dp_tunnel_atomic_clear_stream_bw(struct intel_atomic_state *state,
93				       struct intel_crtc_state *crtc_state) {}
94
95static inline int
96intel_dp_tunnel_atomic_add_state_for_crtc(struct intel_atomic_state *state,
97					  struct intel_crtc *crtc)
98{
99	return 0;
100}
101
102static inline int
103intel_dp_tunnel_atomic_check_link(struct intel_atomic_state *state,
104				  struct intel_link_bw_limits *limits)
105{
106	return 0;
107}
108
109static inline int
110intel_dp_tunnel_atomic_check_state(struct intel_atomic_state *state,
111				   struct intel_dp *intel_dp,
112				   struct intel_connector *connector)
113{
114	return 0;
115}
116
117static inline int
118intel_dp_tunnel_atomic_alloc_bw(struct intel_atomic_state *state)
119{
120	return 0;
121}
122
123static inline int
124intel_dp_tunnel_mgr_init(struct drm_i915_private *i915)
125{
126	return 0;
127}
128
129static inline void intel_dp_tunnel_mgr_cleanup(struct drm_i915_private *i915) {}
130
131#endif /* CONFIG_DRM_I915_DP_TUNNEL */
132
133#endif /* __INTEL_DP_TUNNEL_H__ */
134