1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26#ifndef DC_STREAM_H_
27#define DC_STREAM_H_
28
29#include "dc_types.h"
30#include "grph_object_defs.h"
31
32
33
34
35
36struct dc_stream_status {
37 int primary_otg_inst;
38 int stream_enc_inst;
39 int plane_count;
40 struct dc_plane_state *plane_states[MAX_SURFACE_NUM];
41
42
43
44
45 struct dc_link *link;
46};
47
48
49struct freesync_context {
50 bool dummy;
51};
52
53struct dc_stream_state {
54 struct dc_sink *sink;
55 struct dc_crtc_timing timing;
56 struct dc_crtc_timing_adjust adjust;
57 struct dc_info_packet vrr_infopacket;
58 struct dc_info_packet vsc_infopacket;
59 struct dc_info_packet vsp_infopacket;
60
61 struct rect src;
62 struct rect dst;
63
64
65 struct freesync_context freesync_ctx;
66
67 struct audio_info audio_info;
68
69 struct dc_info_packet hdr_static_metadata;
70 PHYSICAL_ADDRESS_LOC dmdata_address;
71 bool use_dynamic_meta;
72
73 struct dc_transfer_func *out_transfer_func;
74 struct colorspace_transform gamut_remap_matrix;
75 struct dc_csc_transform csc_color_matrix;
76
77 enum dc_color_space output_color_space;
78 enum dc_dither_option dither_option;
79
80 enum view_3d_format view_format;
81
82 bool ignore_msa_timing_param;
83
84 unsigned long long periodic_fn_vsync_delta;
85
86
87
88
89 unsigned char psr_version;
90
91
92
93 unsigned int abm_level;
94
95
96 struct dc_context *ctx;
97
98
99 struct bit_depth_reduction_params bit_depth_params;
100 struct clamping_and_pixel_encoding_params clamping;
101
102 int phy_pix_clk;
103 enum signal_type signal;
104 bool dpms_off;
105 bool apply_edp_fast_boot_optimization;
106
107 struct dc_cursor_attributes cursor_attributes;
108 struct dc_cursor_position cursor_position;
109 uint32_t sdr_white_level;
110
111
112 struct kref refcount;
113
114 struct crtc_trigger_info triggered_crtc_reset;
115
116
117 bool mode_changed : 1;
118
119};
120
121struct dc_stream_update {
122 struct rect src;
123 struct rect dst;
124 struct dc_transfer_func *out_transfer_func;
125 struct dc_info_packet *hdr_static_metadata;
126 unsigned int *abm_level;
127
128 unsigned long long *periodic_fn_vsync_delta;
129 struct dc_crtc_timing_adjust *adjust;
130 struct dc_info_packet *vrr_infopacket;
131 struct dc_info_packet *vsc_infopacket;
132 struct dc_info_packet *vsp_infopacket;
133
134 bool *dpms_off;
135
136 struct colorspace_transform *gamut_remap;
137 enum dc_color_space *output_color_space;
138 enum dc_dither_option *dither_option;
139
140 struct dc_csc_transform *output_csc_transform;
141
142};
143
144bool dc_is_stream_unchanged(
145 struct dc_stream_state *old_stream, struct dc_stream_state *stream);
146bool dc_is_stream_scaling_unchanged(
147 struct dc_stream_state *old_stream, struct dc_stream_state *stream);
148
149
150
151
152
153
154
155
156
157
158
159
160void dc_commit_updates_for_stream(struct dc *dc,
161 struct dc_surface_update *srf_updates,
162 int surface_count,
163 struct dc_stream_state *stream,
164 struct dc_stream_update *stream_update,
165 struct dc_plane_state **plane_states,
166 struct dc_state *state);
167
168
169
170void dc_stream_log(const struct dc *dc, const struct dc_stream_state *stream);
171
172uint8_t dc_get_current_stream_count(struct dc *dc);
173struct dc_stream_state *dc_get_stream_at_index(struct dc *dc, uint8_t i);
174
175
176
177
178uint32_t dc_stream_get_vblank_counter(const struct dc_stream_state *stream);
179
180
181
182
183
184bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream,
185 uint32_t *v_blank_start,
186 uint32_t *v_blank_end,
187 uint32_t *h_position,
188 uint32_t *v_position);
189
190enum dc_status dc_add_stream_to_ctx(
191 struct dc *dc,
192 struct dc_state *new_ctx,
193 struct dc_stream_state *stream);
194
195enum dc_status dc_remove_stream_from_ctx(
196 struct dc *dc,
197 struct dc_state *new_ctx,
198 struct dc_stream_state *stream);
199
200
201bool dc_add_plane_to_context(
202 const struct dc *dc,
203 struct dc_stream_state *stream,
204 struct dc_plane_state *plane_state,
205 struct dc_state *context);
206
207bool dc_remove_plane_from_context(
208 const struct dc *dc,
209 struct dc_stream_state *stream,
210 struct dc_plane_state *plane_state,
211 struct dc_state *context);
212
213bool dc_rem_all_planes_for_stream(
214 const struct dc *dc,
215 struct dc_stream_state *stream,
216 struct dc_state *context);
217
218bool dc_add_all_planes_for_stream(
219 const struct dc *dc,
220 struct dc_stream_state *stream,
221 struct dc_plane_state * const *plane_states,
222 int plane_count,
223 struct dc_state *context);
224
225enum dc_status dc_validate_stream(struct dc *dc, struct dc_stream_state *stream);
226
227
228
229
230
231
232
233
234
235
236
237
238
239bool dc_enable_stereo(
240 struct dc *dc,
241 struct dc_state *context,
242 struct dc_stream_state *streams[],
243 uint8_t stream_count);
244
245
246enum surface_update_type dc_check_update_surfaces_for_stream(
247 struct dc *dc,
248 struct dc_surface_update *updates,
249 int surface_count,
250 struct dc_stream_update *stream_update,
251 const struct dc_stream_status *stream_status);
252
253
254
255
256struct dc_stream_state *dc_create_stream_for_sink(struct dc_sink *dc_sink);
257
258void update_stream_signal(struct dc_stream_state *stream);
259
260void dc_stream_retain(struct dc_stream_state *dc_stream);
261void dc_stream_release(struct dc_stream_state *dc_stream);
262
263struct dc_stream_status *dc_stream_get_status(
264 struct dc_stream_state *dc_stream);
265
266
267
268
269
270bool dc_stream_set_cursor_attributes(
271 struct dc_stream_state *stream,
272 const struct dc_cursor_attributes *attributes);
273
274bool dc_stream_set_cursor_position(
275 struct dc_stream_state *stream,
276 const struct dc_cursor_position *position);
277
278
279bool dc_stream_adjust_vmin_vmax(struct dc *dc,
280 struct dc_stream_state *stream,
281 struct dc_crtc_timing_adjust *adjust);
282
283bool dc_stream_get_crtc_position(struct dc *dc,
284 struct dc_stream_state **stream,
285 int num_streams,
286 unsigned int *v_pos,
287 unsigned int *nom_v_pos);
288
289bool dc_stream_configure_crc(struct dc *dc,
290 struct dc_stream_state *stream,
291 bool enable,
292 bool continuous);
293
294bool dc_stream_get_crc(struct dc *dc,
295 struct dc_stream_state *stream,
296 uint32_t *r_cr,
297 uint32_t *g_y,
298 uint32_t *b_cb);
299
300void dc_stream_set_static_screen_events(struct dc *dc,
301 struct dc_stream_state **stream,
302 int num_streams,
303 const struct dc_static_screen_events *events);
304
305void dc_stream_set_dither_option(struct dc_stream_state *stream,
306 enum dc_dither_option option);
307
308bool dc_stream_set_gamut_remap(struct dc *dc,
309 const struct dc_stream_state *stream);
310
311bool dc_stream_program_csc_matrix(struct dc *dc,
312 struct dc_stream_state *stream);
313
314bool dc_stream_get_crtc_position(struct dc *dc,
315 struct dc_stream_state **stream,
316 int num_streams,
317 unsigned int *v_pos,
318 unsigned int *nom_v_pos);
319
320#endif
321