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