drivers/gpu/drm/amd/display/dc/inc/link_service.h

Source file repositories/reference/linux-study-clean/drivers/gpu/drm/amd/display/dc/inc/link_service.h

File Facts

System
Linux kernel
Corpus path
drivers/gpu/drm/amd/display/dc/inc/link_service.h
Extension
.h
Size
15833 bytes
Lines
367
Domain
Driver Families
Bucket
drivers/gpu
Inferred role
Driver Families: implementation source
Status
source implementation candidate

Why This File Exists

Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.

Dependency Surface

Detected Declarations

Annotated Snippet

struct link_init_data {
	const struct dc *dc;
	struct dc_context *ctx; /* TODO: remove 'dal' when DC is complete. */
	uint32_t connector_index; /* this will be mapped to the HPD pins */
	uint32_t link_index; /* this is mapped to DAL display_index
				TODO: remove it when DC is complete. */
	bool is_dpia_link;
};

struct ddc_service_init_data {
	struct graphics_object_id id;
	struct dc_context *ctx;
	struct dc_link *link;
	bool is_dpia_link;
};

struct link_service {
	/************************** Factory ***********************************/
	struct dc_link *(*create_link)(
			const struct link_init_data *init_params);
	void (*destroy_link)(struct dc_link **link);


	/************************** Detection *********************************/
	bool (*detect_link)(struct dc_link *link, enum dc_detect_reason reason);
	bool (*detect_connection_type)(struct dc_link *link,
			enum dc_connection_type *type);
	struct dc_sink *(*add_remote_sink)(
			struct dc_link *link,
			const uint8_t *edid,
			unsigned int len,
			struct dc_sink_init_data *init_data);
	void (*remove_remote_sink)(struct dc_link *link, struct dc_sink *sink);
	bool (*get_hpd_state)(struct dc_link *link);
	void (*enable_hpd)(const struct dc_link *link);
	void (*disable_hpd)(const struct dc_link *link);
	void (*enable_hpd_filter)(struct dc_link *link, bool enable);
	bool (*reset_cur_dp_mst_topology)(struct dc_link *link);
	const struct dc_link_status *(*get_status)(const struct dc_link *link);
	bool (*is_hdcp1x_supported)(struct dc_link *link,
			enum signal_type signal);
	bool (*is_hdcp2x_supported)(struct dc_link *link,
			enum signal_type signal);
	void (*clear_dprx_states)(struct dc_link *link);


	/*************************** Resource *********************************/
	void (*get_cur_res_map)(const struct dc *dc, uint32_t *map);
	void (*restore_res_map)(const struct dc *dc, uint32_t *map);
	void (*get_cur_link_res)(const struct dc_link *link,
			struct link_resource *link_res);


	/*************************** Validation *******************************/
	enum dc_status (*validate_mode_timing)(
			const struct dc_stream_state *stream,
			struct dc_link *link,
			const struct dc_crtc_timing *timing);
	uint32_t (*dp_link_bandwidth_kbps)(
		const struct dc_link *link,
		const struct dc_link_settings *link_settings);
	enum dc_status (*validate_dp_tunnel_bandwidth)(
		const struct dc *dc,
		const struct dc_state *new_ctx);
	uint32_t (*frl_link_bandwidth_kbps)(enum hdmi_frl_link_rate link_rate);
	bool (*frl_margin_check_uncompressed_video)(
		struct frl_cap_chk_params_fixed31_32 *params,
		struct frl_cap_chk_intermediates_fixed31_32 *inter);

	uint32_t (*dp_required_hblank_size_bytes)(
		const struct dc_link *link,
		struct dp_audio_bandwidth_params *audio_params);


	/*************************** DPMS *************************************/
	void (*set_dpms_on)(struct dc_state *state, struct pipe_ctx *pipe_ctx);
	void (*set_dpms_off)(struct pipe_ctx *pipe_ctx);
	void (*resume)(struct dc_link *link);
	void (*blank_all_dp_displays)(struct dc *dc);
	void (*blank_all_edp_displays)(struct dc *dc);
	void (*blank_dp_stream)(struct dc_link *link, bool hw_init);
	enum dc_status (*increase_mst_payload)(
			struct pipe_ctx *pipe_ctx, uint32_t req_pbn);
	enum dc_status (*reduce_mst_payload)(
			struct pipe_ctx *pipe_ctx, uint32_t req_pbn);
	void (*set_dsc_on_stream)(struct pipe_ctx *pipe_ctx, bool enable);
	bool (*set_dsc_enable)(struct pipe_ctx *pipe_ctx, bool enable);
	bool (*update_dsc_config)(struct pipe_ctx *pipe_ctx);
	void (*wait_for_unlocked)(struct dc_link *link);

Annotation

Implementation Notes