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#ifndef DRIVERS_GPU_DRM_AMD_DC_DEV_DC_INC_RESOURCE_H_
26#define DRIVERS_GPU_DRM_AMD_DC_DEV_DC_INC_RESOURCE_H_
27
28#include "core_types.h"
29#include "core_status.h"
30#include "dal_asic_id.h"
31#include "dm_pp_smu.h"
32
33enum dce_version resource_parse_asic_id(
34 struct hw_asic_id asic_id);
35
36struct resource_caps {
37 int num_timing_generator;
38 int num_opp;
39 int num_video_plane;
40 int num_audio;
41 int num_stream_encoder;
42 int num_pll;
43 int num_dwb;
44 int num_ddc;
45};
46
47struct resource_straps {
48 uint32_t hdmi_disable;
49 uint32_t dc_pinstraps_audio;
50 uint32_t audio_stream_number;
51};
52
53struct resource_create_funcs {
54 void (*read_dce_straps)(
55 struct dc_context *ctx, struct resource_straps *straps);
56
57 struct audio *(*create_audio)(
58 struct dc_context *ctx, unsigned int inst);
59
60 struct stream_encoder *(*create_stream_encoder)(
61 enum engine_id eng_id, struct dc_context *ctx);
62
63 struct dce_hwseq *(*create_hwseq)(
64 struct dc_context *ctx);
65};
66
67bool resource_construct(
68 unsigned int num_virtual_links,
69 struct dc *dc,
70 struct resource_pool *pool,
71 const struct resource_create_funcs *create_funcs);
72
73struct resource_pool *dc_create_resource_pool(
74 struct dc *dc,
75 int num_virtual_links,
76 enum dce_version dc_version,
77 struct hw_asic_id asic_id);
78
79void dc_destroy_resource_pool(struct dc *dc);
80
81enum dc_status resource_map_pool_resources(
82 const struct dc *dc,
83 struct dc_state *context,
84 struct dc_stream_state *stream);
85
86bool resource_build_scaling_params(struct pipe_ctx *pipe_ctx);
87
88enum dc_status resource_build_scaling_params_for_context(
89 const struct dc *dc,
90 struct dc_state *context);
91
92void resource_build_info_frame(struct pipe_ctx *pipe_ctx);
93
94void resource_unreference_clock_source(
95 struct resource_context *res_ctx,
96 const struct resource_pool *pool,
97 struct clock_source *clock_source);
98
99void resource_reference_clock_source(
100 struct resource_context *res_ctx,
101 const struct resource_pool *pool,
102 struct clock_source *clock_source);
103
104int resource_get_clock_source_reference(
105 struct resource_context *res_ctx,
106 const struct resource_pool *pool,
107 struct clock_source *clock_source);
108
109bool resource_are_streams_timing_synchronizable(
110 struct dc_stream_state *stream1,
111 struct dc_stream_state *stream2);
112
113struct clock_source *resource_find_used_clk_src_for_sharing(
114 struct resource_context *res_ctx,
115 struct pipe_ctx *pipe_ctx);
116
117struct clock_source *dc_resource_find_first_free_pll(
118 struct resource_context *res_ctx,
119 const struct resource_pool *pool);
120
121struct pipe_ctx *resource_get_head_pipe_for_stream(
122 struct resource_context *res_ctx,
123 struct dc_stream_state *stream);
124
125bool resource_attach_surfaces_to_context(
126 struct dc_plane_state *const *plane_state,
127 int surface_count,
128 struct dc_stream_state *dc_stream,
129 struct dc_state *context,
130 const struct resource_pool *pool);
131
132struct pipe_ctx *find_idle_secondary_pipe(
133 struct resource_context *res_ctx,
134 const struct resource_pool *pool);
135
136bool resource_is_stream_unchanged(
137 struct dc_state *old_context, struct dc_stream_state *stream);
138
139bool resource_validate_attach_surfaces(
140 const struct dc_validation_set set[],
141 int set_count,
142 const struct dc_state *old_context,
143 struct dc_state *context,
144 const struct resource_pool *pool);
145
146void resource_validate_ctx_update_pointer_after_copy(
147 const struct dc_state *src_ctx,
148 struct dc_state *dst_ctx);
149
150enum dc_status resource_map_clock_resources(
151 const struct dc *dc,
152 struct dc_state *context,
153 struct dc_stream_state *stream);
154
155enum dc_status resource_map_phy_clock_resources(
156 const struct dc *dc,
157 struct dc_state *context,
158 struct dc_stream_state *stream);
159
160bool pipe_need_reprogram(
161 struct pipe_ctx *pipe_ctx_old,
162 struct pipe_ctx *pipe_ctx);
163
164void resource_build_bit_depth_reduction_params(struct dc_stream_state *stream,
165 struct bit_depth_reduction_params *fmt_bit_depth);
166
167void update_audio_usage(
168 struct resource_context *res_ctx,
169 const struct resource_pool *pool,
170 struct audio *audio,
171 bool acquired);
172
173unsigned int resource_pixel_format_to_bpp(enum surface_pixel_format format);
174
175#endif
176