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 void intel_dp_tunnel_uhbr_lanes_wa_apply(struct intel_dp *intel_dp); 58 bool intel_dp_tunnel_uhbr_lanes_wa_setup(struct intel_dp *intel_dp); 59 void intel_dp_tunnel_uhbr_lanes_wa_reset(struct intel_dp *intel_dp); 60 61 int intel_dp_tunnel_mgr_init(struct intel_display *display); 62 void intel_dp_tunnel_mgr_cleanup(struct intel_display *display); 63 64 #else 65 66 static inline int 67 intel_dp_tunnel_detect(struct intel_dp *intel_dp, struct drm_modeset_acquire_ctx *ctx) 68 { 69 return -EOPNOTSUPP; 70 } 71 72 static inline void intel_dp_tunnel_disconnect(struct intel_dp *intel_dp) {} 73 static inline void intel_dp_tunnel_destroy(struct intel_dp *intel_dp) {} 74 static inline void intel_dp_tunnel_resume(struct intel_dp *intel_dp, 75 const struct intel_crtc_state *crtc_state, 76 bool dpcd_updated) {} 77 static inline void intel_dp_tunnel_suspend(struct intel_dp *intel_dp) {} 78 79 static inline bool intel_dp_tunnel_bw_alloc_is_enabled(struct intel_dp *intel_dp) 80 { 81 return false; 82 } 83 84 static inline bool intel_dp_tunnel_pr_optimization_supported(struct intel_dp *intel_dp) 85 { 86 return false; 87 } 88 89 static inline void 90 intel_dp_tunnel_atomic_cleanup_inherited_state(struct intel_atomic_state *state) {} 91 92 static inline int 93 intel_dp_tunnel_atomic_compute_stream_bw(struct intel_atomic_state *state, 94 struct intel_dp *intel_dp, 95 const struct intel_connector *connector, 96 struct intel_crtc_state *crtc_state) 97 { 98 return 0; 99 } 100 101 static inline int 102 intel_dp_tunnel_atomic_clear_stream_bw(struct intel_atomic_state *state, 103 struct intel_crtc_state *crtc_state) 104 { 105 return 0; 106 } 107 108 static inline int 109 intel_dp_tunnel_atomic_add_state_for_crtc(struct intel_atomic_state *state, 110 struct intel_crtc *crtc) 111 { 112 return 0; 113 } 114 115 static inline int 116 intel_dp_tunnel_atomic_check_link(struct intel_atomic_state *state, 117 struct intel_link_bw_limits *limits) 118 { 119 return 0; 120 } 121 122 static inline int 123 intel_dp_tunnel_atomic_check_state(struct intel_atomic_state *state, 124 struct intel_dp *intel_dp, 125 struct intel_connector *connector) 126 { 127 return 0; 128 } 129 130 static inline int 131 intel_dp_tunnel_atomic_alloc_bw(struct intel_atomic_state *state) 132 { 133 return 0; 134 } 135 136 static inline void intel_dp_tunnel_uhbr_lanes_wa_apply(struct intel_dp *intel_dp) 137 { 138 } 139 140 static inline bool intel_dp_tunnel_uhbr_lanes_wa_setup(struct intel_dp *intel_dp) 141 { 142 return false; 143 } 144 145 static inline void intel_dp_tunnel_uhbr_lanes_wa_reset(struct intel_dp *intel_dp) 146 { 147 } 148 149 static inline int 150 intel_dp_tunnel_mgr_init(struct intel_display *display) 151 { 152 return 0; 153 } 154 155 static inline void intel_dp_tunnel_mgr_cleanup(struct intel_display *display) {} 156 157 #endif /* CONFIG_DRM_I915_DP_TUNNEL || CONFIG_DRM_XE_DP_TUNNEL */ 158 159 #endif /* __INTEL_DP_TUNNEL_H__ */ 160