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
35struct timing_sync_info {
36 int group_id;
37 int group_size;
38 bool master;
39};
40
41struct dc_stream_status {
42 int primary_otg_inst;
43 int stream_enc_inst;
44 int plane_count;
45 int audio_inst;
46 struct timing_sync_info timing_sync_info;
47 struct dc_plane_state *plane_states[MAX_SURFACE_NUM];
48};
49
50
51struct freesync_context {
52 bool dummy;
53};
54
55enum hubp_dmdata_mode {
56 DMDATA_SW_MODE,
57 DMDATA_HW_MODE
58};
59
60struct dc_dmdata_attributes {
61
62
63
64 enum hubp_dmdata_mode dmdata_mode;
65
66 bool dmdata_repeat;
67
68 uint32_t dmdata_size;
69
70 bool dmdata_updated;
71
72 PHYSICAL_ADDRESS_LOC address;
73
74 bool dmdata_qos_mode;
75
76 uint32_t dmdata_qos_level;
77
78
79
80 uint32_t dmdata_dl_delta;
81
82 uint32_t *dmdata_sw_data;
83};
84
85struct dc_writeback_info {
86 bool wb_enabled;
87 int dwb_pipe_inst;
88 struct dc_dwb_params dwb_params;
89 struct mcif_buf_params mcif_buf_params;
90};
91
92struct dc_writeback_update {
93 unsigned int num_wb_info;
94 struct dc_writeback_info writeback_info[MAX_DWB_PIPES];
95};
96
97enum vertical_interrupt_ref_point {
98 START_V_UPDATE = 0,
99 START_V_SYNC,
100 INVALID_POINT
101
102
103
104
105};
106
107struct periodic_interrupt_config {
108 enum vertical_interrupt_ref_point ref_point;
109 int lines_offset;
110};
111
112union stream_update_flags {
113 struct {
114 uint32_t scaling:1;
115 uint32_t out_tf:1;
116 uint32_t out_csc:1;
117 uint32_t abm_level:1;
118 uint32_t dpms_off:1;
119 uint32_t gamut_remap:1;
120 uint32_t wb_update:1;
121 } bits;
122
123 uint32_t raw;
124};
125
126struct dc_stream_state {
127
128
129 struct dc_sink *sink;
130
131 struct dc_link *link;
132 struct dc_panel_patch sink_patches;
133 union display_content_support content_support;
134 struct dc_crtc_timing timing;
135 struct dc_crtc_timing_adjust adjust;
136 struct dc_info_packet vrr_infopacket;
137 struct dc_info_packet vsc_infopacket;
138 struct dc_info_packet vsp_infopacket;
139
140 struct rect src;
141 struct rect dst;
142
143
144 struct freesync_context freesync_ctx;
145
146 struct audio_info audio_info;
147
148 struct dc_info_packet hdr_static_metadata;
149 PHYSICAL_ADDRESS_LOC dmdata_address;
150 bool use_dynamic_meta;
151
152 struct dc_transfer_func *out_transfer_func;
153 struct colorspace_transform gamut_remap_matrix;
154 struct dc_csc_transform csc_color_matrix;
155
156 enum dc_color_space output_color_space;
157 enum dc_dither_option dither_option;
158
159 enum view_3d_format view_format;
160
161 bool use_vsc_sdp_for_colorimetry;
162 bool ignore_msa_timing_param;
163 bool converter_disable_audio;
164 uint8_t qs_bit;
165 uint8_t qy_bit;
166
167
168
169
170 unsigned char psr_version;
171
172
173
174 unsigned int abm_level;
175
176 struct periodic_interrupt_config periodic_interrupt0;
177 struct periodic_interrupt_config periodic_interrupt1;
178
179
180 struct dc_context *ctx;
181
182
183 struct bit_depth_reduction_params bit_depth_params;
184 struct clamping_and_pixel_encoding_params clamping;
185
186 int phy_pix_clk;
187 enum signal_type signal;
188 bool dpms_off;
189
190 void *dm_stream_context;
191
192 struct dc_cursor_attributes cursor_attributes;
193 struct dc_cursor_position cursor_position;
194 uint32_t sdr_white_level;
195
196
197 struct kref refcount;
198
199 struct crtc_trigger_info triggered_crtc_reset;
200
201
202 unsigned int num_wb_info;
203 struct dc_writeback_info writeback_info[MAX_DWB_PIPES];
204
205 bool mode_changed : 1;
206
207
208
209
210
211
212 struct {
213
214
215 uint8_t otg_offset;
216 } out;
217
218 bool apply_edp_fast_boot_optimization;
219 bool apply_seamless_boot_optimization;
220
221 uint32_t stream_id;
222 bool is_dsc_enabled;
223 union stream_update_flags update_flags;
224};
225
226#define ABM_LEVEL_IMMEDIATE_DISABLE 0xFFFFFFFF
227
228struct dc_stream_update {
229 struct dc_stream_state *stream;
230
231 struct rect src;
232 struct rect dst;
233 struct dc_transfer_func *out_transfer_func;
234 struct dc_info_packet *hdr_static_metadata;
235 unsigned int *abm_level;
236
237 struct periodic_interrupt_config *periodic_interrupt0;
238 struct periodic_interrupt_config *periodic_interrupt1;
239
240 struct dc_info_packet *vrr_infopacket;
241 struct dc_info_packet *vsc_infopacket;
242 struct dc_info_packet *vsp_infopacket;
243
244 bool *dpms_off;
245 bool integer_scaling_update;
246
247 struct colorspace_transform *gamut_remap;
248 enum dc_color_space *output_color_space;
249 enum dc_dither_option *dither_option;
250
251 struct dc_csc_transform *output_csc_transform;
252
253 struct dc_writeback_update *wb_update;
254 struct dc_dsc_config *dsc_config;
255};
256
257bool dc_is_stream_unchanged(
258 struct dc_stream_state *old_stream, struct dc_stream_state *stream);
259bool dc_is_stream_scaling_unchanged(
260 struct dc_stream_state *old_stream, struct dc_stream_state *stream);
261
262
263
264
265
266
267
268
269
270
271
272
273void dc_commit_updates_for_stream(struct dc *dc,
274 struct dc_surface_update *srf_updates,
275 int surface_count,
276 struct dc_stream_state *stream,
277 struct dc_stream_update *stream_update,
278 struct dc_state *state);
279
280
281
282void dc_stream_log(const struct dc *dc, const struct dc_stream_state *stream);
283
284uint8_t dc_get_current_stream_count(struct dc *dc);
285struct dc_stream_state *dc_get_stream_at_index(struct dc *dc, uint8_t i);
286
287
288
289
290uint32_t dc_stream_get_vblank_counter(const struct dc_stream_state *stream);
291
292
293
294
295bool dc_stream_send_dp_sdp(const struct dc_stream_state *stream,
296 const uint8_t *custom_sdp_message,
297 unsigned int sdp_message_size);
298
299
300
301
302
303bool dc_stream_get_scanoutpos(const struct dc_stream_state *stream,
304 uint32_t *v_blank_start,
305 uint32_t *v_blank_end,
306 uint32_t *h_position,
307 uint32_t *v_position);
308
309enum dc_status dc_add_stream_to_ctx(
310 struct dc *dc,
311 struct dc_state *new_ctx,
312 struct dc_stream_state *stream);
313
314enum dc_status dc_remove_stream_from_ctx(
315 struct dc *dc,
316 struct dc_state *new_ctx,
317 struct dc_stream_state *stream);
318
319
320bool dc_add_plane_to_context(
321 const struct dc *dc,
322 struct dc_stream_state *stream,
323 struct dc_plane_state *plane_state,
324 struct dc_state *context);
325
326bool dc_remove_plane_from_context(
327 const struct dc *dc,
328 struct dc_stream_state *stream,
329 struct dc_plane_state *plane_state,
330 struct dc_state *context);
331
332bool dc_rem_all_planes_for_stream(
333 const struct dc *dc,
334 struct dc_stream_state *stream,
335 struct dc_state *context);
336
337bool dc_add_all_planes_for_stream(
338 const struct dc *dc,
339 struct dc_stream_state *stream,
340 struct dc_plane_state * const *plane_states,
341 int plane_count,
342 struct dc_state *context);
343
344bool dc_stream_add_writeback(struct dc *dc,
345 struct dc_stream_state *stream,
346 struct dc_writeback_info *wb_info);
347
348bool dc_stream_remove_writeback(struct dc *dc,
349 struct dc_stream_state *stream,
350 uint32_t dwb_pipe_inst);
351
352bool dc_stream_warmup_writeback(struct dc *dc,
353 int num_dwb,
354 struct dc_writeback_info *wb_info);
355
356bool dc_stream_dmdata_status_done(struct dc *dc, struct dc_stream_state *stream);
357
358bool dc_stream_set_dynamic_metadata(struct dc *dc,
359 struct dc_stream_state *stream,
360 struct dc_dmdata_attributes *dmdata_attr);
361
362enum dc_status dc_validate_stream(struct dc *dc, struct dc_stream_state *stream);
363
364
365
366
367
368
369
370
371
372
373
374
375
376bool dc_enable_stereo(
377 struct dc *dc,
378 struct dc_state *context,
379 struct dc_stream_state *streams[],
380 uint8_t stream_count);
381
382
383enum surface_update_type dc_check_update_surfaces_for_stream(
384 struct dc *dc,
385 struct dc_surface_update *updates,
386 int surface_count,
387 struct dc_stream_update *stream_update,
388 const struct dc_stream_status *stream_status);
389
390
391
392
393struct dc_stream_state *dc_create_stream_for_sink(struct dc_sink *dc_sink);
394
395struct dc_stream_state *dc_copy_stream(const struct dc_stream_state *stream);
396
397void update_stream_signal(struct dc_stream_state *stream, struct dc_sink *sink);
398
399void dc_stream_retain(struct dc_stream_state *dc_stream);
400void dc_stream_release(struct dc_stream_state *dc_stream);
401
402struct dc_stream_status *dc_stream_get_status_from_state(
403 struct dc_state *state,
404 struct dc_stream_state *stream);
405struct dc_stream_status *dc_stream_get_status(
406 struct dc_stream_state *dc_stream);
407
408
409
410
411
412bool dc_stream_set_cursor_attributes(
413 struct dc_stream_state *stream,
414 const struct dc_cursor_attributes *attributes);
415
416bool dc_stream_set_cursor_position(
417 struct dc_stream_state *stream,
418 const struct dc_cursor_position *position);
419
420
421bool dc_stream_adjust_vmin_vmax(struct dc *dc,
422 struct dc_stream_state *stream,
423 struct dc_crtc_timing_adjust *adjust);
424
425bool dc_stream_get_crtc_position(struct dc *dc,
426 struct dc_stream_state **stream,
427 int num_streams,
428 unsigned int *v_pos,
429 unsigned int *nom_v_pos);
430
431bool dc_stream_configure_crc(struct dc *dc,
432 struct dc_stream_state *stream,
433 bool enable,
434 bool continuous);
435
436bool dc_stream_get_crc(struct dc *dc,
437 struct dc_stream_state *stream,
438 uint32_t *r_cr,
439 uint32_t *g_y,
440 uint32_t *b_cb);
441
442void dc_stream_set_static_screen_params(struct dc *dc,
443 struct dc_stream_state **stream,
444 int num_streams,
445 const struct dc_static_screen_params *params);
446
447void dc_stream_set_dyn_expansion(struct dc *dc, struct dc_stream_state *stream,
448 enum dc_dynamic_expansion option);
449
450void dc_stream_set_dither_option(struct dc_stream_state *stream,
451 enum dc_dither_option option);
452
453bool dc_stream_set_gamut_remap(struct dc *dc,
454 const struct dc_stream_state *stream);
455
456bool dc_stream_program_csc_matrix(struct dc *dc,
457 struct dc_stream_state *stream);
458
459bool dc_stream_get_crtc_position(struct dc *dc,
460 struct dc_stream_state **stream,
461 int num_streams,
462 unsigned int *v_pos,
463 unsigned int *nom_v_pos);
464
465#endif
466