Linux Audio

Check our new training course

Loading...
Note: File does not exist in v3.1.
  1/*
  2 * Copyright 2017 Advanced Micro Devices, Inc.
  3 *
  4 * Permission is hereby granted, free of charge, to any person obtaining a
  5 * copy of this software and associated documentation files (the "Software"),
  6 * to deal in the Software without restriction, including without limitation
  7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8 * and/or sell copies of the Software, and to permit persons to whom the
  9 * Software is furnished to do so, subject to the following conditions:
 10 *
 11 * The above copyright notice and this permission notice shall be included in
 12 * all copies or substantial portions of the Software.
 13 *
 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 17 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 18 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 20 * OTHER DEALINGS IN THE SOFTWARE.
 21 *
 22 */
 23/*
 24 * stream_encoder.h
 25 *
 26 */
 27
 28#ifndef STREAM_ENCODER_H_
 29#define STREAM_ENCODER_H_
 30
 31#include "audio_types.h"
 32#include "hw_shared.h"
 33
 34struct dc_bios;
 35struct dc_context;
 36struct dc_crtc_timing;
 37
 38enum dp_pixel_encoding_type {
 39	DP_PIXEL_ENCODING_TYPE_RGB444		= 0x00000000,
 40	DP_PIXEL_ENCODING_TYPE_YCBCR422		= 0x00000001,
 41	DP_PIXEL_ENCODING_TYPE_YCBCR444		= 0x00000002,
 42	DP_PIXEL_ENCODING_TYPE_RGB_WIDE_GAMUT	= 0x00000003,
 43	DP_PIXEL_ENCODING_TYPE_Y_ONLY		= 0x00000004,
 44	DP_PIXEL_ENCODING_TYPE_YCBCR420		= 0x00000005
 45};
 46
 47enum dp_component_depth {
 48	DP_COMPONENT_PIXEL_DEPTH_6BPC		= 0x00000000,
 49	DP_COMPONENT_PIXEL_DEPTH_8BPC		= 0x00000001,
 50	DP_COMPONENT_PIXEL_DEPTH_10BPC		= 0x00000002,
 51	DP_COMPONENT_PIXEL_DEPTH_12BPC		= 0x00000003,
 52	DP_COMPONENT_PIXEL_DEPTH_16BPC		= 0x00000004
 53};
 54
 55struct audio_clock_info {
 56	/* pixel clock frequency*/
 57	uint32_t pixel_clock_in_10khz;
 58	/* N - 32KHz audio */
 59	uint32_t n_32khz;
 60	/* CTS - 32KHz audio*/
 61	uint32_t cts_32khz;
 62	uint32_t n_44khz;
 63	uint32_t cts_44khz;
 64	uint32_t n_48khz;
 65	uint32_t cts_48khz;
 66};
 67
 68enum dynamic_metadata_mode {
 69	dmdata_dp,
 70	dmdata_hdmi,
 71	dmdata_dolby_vision
 72};
 73
 74struct encoder_info_frame {
 75	/* auxiliary video information */
 76	struct dc_info_packet avi;
 77	struct dc_info_packet gamut;
 78	struct dc_info_packet vendor;
 79	struct dc_info_packet hfvsif;
 80	/* source product description */
 81	struct dc_info_packet spd;
 82	/* video stream configuration */
 83	struct dc_info_packet vsc;
 84	/* HDR Static MetaData */
 85	struct dc_info_packet hdrsmd;
 86};
 87
 88struct encoder_unblank_param {
 89	struct dc_link_settings link_settings;
 90	struct dc_crtc_timing timing;
 91	int opp_cnt;
 92};
 93
 94struct encoder_set_dp_phy_pattern_param {
 95	enum dp_test_pattern dp_phy_pattern;
 96	const uint8_t *custom_pattern;
 97	uint32_t custom_pattern_size;
 98	enum dp_panel_mode dp_panel_mode;
 99};
100
101struct stream_encoder {
102	const struct stream_encoder_funcs *funcs;
103	struct dc_context *ctx;
104	struct dc_bios *bp;
105	enum engine_id id;
106	uint32_t stream_enc_inst;
107	struct vpg *vpg;
108	struct afmt *afmt;
109};
110
111struct enc_state {
112	uint32_t dsc_mode;  // DISABLED  0; 1 or 2 indicate enabled state.
113	uint32_t dsc_slice_width;
114	uint32_t sec_gsp_pps_line_num;
115	uint32_t vbid6_line_reference;
116	uint32_t vbid6_line_num;
117	uint32_t sec_gsp_pps_enable;
118	uint32_t sec_stream_enable;
119};
120
121struct stream_encoder_funcs {
122	void (*dp_set_stream_attribute)(
123		struct stream_encoder *enc,
124		struct dc_crtc_timing *crtc_timing,
125		enum dc_color_space output_color_space,
126		bool use_vsc_sdp_for_colorimetry,
127		uint32_t enable_sdp_splitting);
128
129	void (*hdmi_set_stream_attribute)(
130		struct stream_encoder *enc,
131		struct dc_crtc_timing *crtc_timing,
132		int actual_pix_clk_khz,
133		bool enable_audio);
134
135	void (*dvi_set_stream_attribute)(
136		struct stream_encoder *enc,
137		struct dc_crtc_timing *crtc_timing,
138		bool is_dual_link);
139
140	void (*lvds_set_stream_attribute)(
141		struct stream_encoder *enc,
142		struct dc_crtc_timing *crtc_timing);
143
144	void (*set_throttled_vcp_size)(
145		struct stream_encoder *enc,
146		struct fixed31_32 avg_time_slots_per_mtp);
147
148	void (*update_hdmi_info_packets)(
149		struct stream_encoder *enc,
150		const struct encoder_info_frame *info_frame);
151
152	void (*stop_hdmi_info_packets)(
153		struct stream_encoder *enc);
154
155	void (*update_dp_info_packets)(
156		struct stream_encoder *enc,
157		const struct encoder_info_frame *info_frame);
158
159	void (*send_immediate_sdp_message)(
160				struct stream_encoder *enc,
161				const uint8_t *custom_sdp_message,
162				unsigned int sdp_message_size);
163
164	void (*stop_dp_info_packets)(
165		struct stream_encoder *enc);
166
167	void (*dp_blank)(
168		struct stream_encoder *enc);
169
170	void (*dp_unblank)(
171		struct stream_encoder *enc,
172		const struct encoder_unblank_param *param);
173
174	void (*audio_mute_control)(
175		struct stream_encoder *enc, bool mute);
176
177	void (*dp_audio_setup)(
178		struct stream_encoder *enc,
179		unsigned int az_inst,
180		struct audio_info *info);
181
182	void (*dp_audio_enable) (
183			struct stream_encoder *enc);
184
185	void (*dp_audio_disable) (
186			struct stream_encoder *enc);
187
188	void (*hdmi_audio_setup)(
189		struct stream_encoder *enc,
190		unsigned int az_inst,
191		struct audio_info *info,
192		struct audio_crtc_info *audio_crtc_info);
193
194	void (*hdmi_audio_disable) (
195			struct stream_encoder *enc);
196
197	void (*setup_stereo_sync) (
198			struct stream_encoder *enc,
199			int tg_inst,
200			bool enable);
201
202	void (*set_avmute)(
203		struct stream_encoder *enc, bool enable);
204
205	void (*dig_connect_to_otg)(
206		struct stream_encoder *enc,
207		int tg_inst);
208
209	void (*hdmi_reset_stream_attribute)(
210		struct stream_encoder *enc);
211
212	unsigned int (*dig_source_otg)(
213		struct stream_encoder *enc);
214
215	bool (*dp_get_pixel_format)(
216		struct stream_encoder *enc,
217		enum dc_pixel_encoding *encoding,
218		enum dc_color_depth *depth);
219
220	void (*enc_read_state)(struct stream_encoder *enc, struct enc_state *s);
221
222	void (*dp_set_dsc_config)(
223			struct stream_encoder *enc,
224			enum optc_dsc_mode dsc_mode,
225			uint32_t dsc_bytes_per_pixel,
226			uint32_t dsc_slice_width);
227
228	void (*dp_set_dsc_pps_info_packet)(struct stream_encoder *enc,
229				bool enable,
230				uint8_t *dsc_packed_pps);
231
232	void (*set_dynamic_metadata)(struct stream_encoder *enc,
233			bool enable,
234			uint32_t hubp_requestor_id,
235			enum dynamic_metadata_mode dmdata_mode);
236
237	void (*dp_set_odm_combine)(
238		struct stream_encoder *enc,
239		bool odm_combine);
240
241	uint32_t (*get_fifo_cal_average_level)(
242		struct stream_encoder *enc);
243};
244
245#endif /* STREAM_ENCODER_H_ */