14370f72eSWenjing Liu /* 24370f72eSWenjing Liu * Copyright 2022 Advanced Micro Devices, Inc. 34370f72eSWenjing Liu * 44370f72eSWenjing Liu * Permission is hereby granted, free of charge, to any person obtaining a 54370f72eSWenjing Liu * copy of this software and associated documentation files (the "Software"), 64370f72eSWenjing Liu * to deal in the Software without restriction, including without limitation 74370f72eSWenjing Liu * the rights to use, copy, modify, merge, publish, distribute, sublicense, 84370f72eSWenjing Liu * and/or sell copies of the Software, and to permit persons to whom the 94370f72eSWenjing Liu * Software is furnished to do so, subject to the following conditions: 104370f72eSWenjing Liu * 114370f72eSWenjing Liu * The above copyright notice and this permission notice shall be included in 124370f72eSWenjing Liu * all copies or substantial portions of the Software. 134370f72eSWenjing Liu * 144370f72eSWenjing Liu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 154370f72eSWenjing Liu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 164370f72eSWenjing Liu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 174370f72eSWenjing Liu * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR 184370f72eSWenjing Liu * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 194370f72eSWenjing Liu * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 204370f72eSWenjing Liu * OTHER DEALINGS IN THE SOFTWARE. 214370f72eSWenjing Liu * 224370f72eSWenjing Liu * Authors: AMD 234370f72eSWenjing Liu * 244370f72eSWenjing Liu */ 254370f72eSWenjing Liu 264370f72eSWenjing Liu #ifndef __DC_LINK_H__ 274370f72eSWenjing Liu #define __DC_LINK_H__ 284370f72eSWenjing Liu 294370f72eSWenjing Liu /* FILE POLICY AND INTENDED USAGE: 304370f72eSWenjing Liu * 3198ce7d32SWenjing Liu * This header defines link component function interfaces aka link_service. 3298ce7d32SWenjing Liu * link_service provides the only entry point to link functions with function 3398ce7d32SWenjing Liu * pointer style. This header is strictly private in dc and should never be 3498ce7d32SWenjing Liu * included by DM because it exposes too much dc detail including all dc 3598ce7d32SWenjing Liu * private types defined in core_types.h. Otherwise it will break DM - DC 3698ce7d32SWenjing Liu * encapsulation and turn DM into a maintenance nightmare. 3798ce7d32SWenjing Liu * 3898ce7d32SWenjing Liu * The following shows a link component relation map. 3998ce7d32SWenjing Liu * 4098ce7d32SWenjing Liu * DM to DC: 4198ce7d32SWenjing Liu * DM includes dc.h 4298ce7d32SWenjing Liu * dc_link_exports.c or other dc files implement dc.h 4398ce7d32SWenjing Liu * 4498ce7d32SWenjing Liu * DC to Link: 4598ce7d32SWenjing Liu * dc_link_exports.c or other dc files include link.h 4698ce7d32SWenjing Liu * link_factory.c implements link.h 4798ce7d32SWenjing Liu * 4898ce7d32SWenjing Liu * Link sub-component to Link sub-component: 4998ce7d32SWenjing Liu * link_factory.c includes --> link_xxx.h 5098ce7d32SWenjing Liu * link_xxx.c implements link_xxx.h 5198ce7d32SWenjing Liu 5298ce7d32SWenjing Liu * As you can see if you ever need to add a new dc link function and call it on 5398ce7d32SWenjing Liu * DM/dc side, it is very difficult because you will need layers of translation. 5498ce7d32SWenjing Liu * The most appropriate approach to implement new requirements on DM/dc side is 5598ce7d32SWenjing Liu * to extend or generalize the functionality of existing link function 5698ce7d32SWenjing Liu * interfaces so minimal modification is needed outside link component to 5798ce7d32SWenjing Liu * achieve your new requirements. This approach reduces or even eliminates the 5898ce7d32SWenjing Liu * effort needed outside link component to support a new link feature. This also 5998ce7d32SWenjing Liu * reduces code discrepancy among DMs to support the same link feature. If we 6098ce7d32SWenjing Liu * test full code path on one version of DM, and there is no feature specific 6198ce7d32SWenjing Liu * modification required on other DMs, then we can have higher confidence that 6298ce7d32SWenjing Liu * the feature will run on other DMs and produce the same result. The following 6398ce7d32SWenjing Liu * are some good examples to start with: 6498ce7d32SWenjing Liu * 6598ce7d32SWenjing Liu * - detect_link --> to add new link detection or capability retrieval routines 6698ce7d32SWenjing Liu * 6798ce7d32SWenjing Liu * - validate_mode_timing --> to add new timing validation conditions 6898ce7d32SWenjing Liu * 6998ce7d32SWenjing Liu * - set_dpms_on/set_dpms_off --> to include new link enablement sequences 7098ce7d32SWenjing Liu * 7198ce7d32SWenjing Liu * If you must add new link functions, you will need to: 7298ce7d32SWenjing Liu * 1. declare the function pointer here under the suitable commented category. 7398ce7d32SWenjing Liu * 2. Implement your function in the suitable link_xxx.c file. 7498ce7d32SWenjing Liu * 3. Assign the function to link_service in link_factory.c 7598ce7d32SWenjing Liu * 4. NEVER include link_xxx.h headers outside link component. 7698ce7d32SWenjing Liu * 5. NEVER include link.h on DM side. 774370f72eSWenjing Liu */ 784370f72eSWenjing Liu #include "core_types.h" 794370f72eSWenjing Liu 8098ce7d32SWenjing Liu struct link_service *link_create_link_service(void); 8198ce7d32SWenjing Liu void link_destroy_link_service(struct link_service **link_srv); 8298ce7d32SWenjing Liu 8354618888SWenjing Liu struct link_init_data { 8454618888SWenjing Liu const struct dc *dc; 8554618888SWenjing Liu struct dc_context *ctx; /* TODO: remove 'dal' when DC is complete. */ 8654618888SWenjing Liu uint32_t connector_index; /* this will be mapped to the HPD pins */ 8754618888SWenjing Liu uint32_t link_index; /* this is mapped to DAL display_index 8854618888SWenjing Liu TODO: remove it when DC is complete. */ 8954618888SWenjing Liu bool is_dpia_link; 9054618888SWenjing Liu }; 9154618888SWenjing Liu 9298ce7d32SWenjing Liu struct ddc_service_init_data { 9398ce7d32SWenjing Liu struct graphics_object_id id; 9498ce7d32SWenjing Liu struct dc_context *ctx; 9598ce7d32SWenjing Liu struct dc_link *link; 9698ce7d32SWenjing Liu bool is_dpia_link; 9798ce7d32SWenjing Liu }; 9898ce7d32SWenjing Liu 9936516001SWenjing Liu struct link_service { 10098ce7d32SWenjing Liu /************************** Factory ***********************************/ 10198ce7d32SWenjing Liu struct dc_link *(*create_link)( 10298ce7d32SWenjing Liu const struct link_init_data *init_params); 10398ce7d32SWenjing Liu void (*destroy_link)(struct dc_link **link); 10498ce7d32SWenjing Liu 10598ce7d32SWenjing Liu 10698ce7d32SWenjing Liu /************************** Detection *********************************/ 10798ce7d32SWenjing Liu bool (*detect_link)(struct dc_link *link, enum dc_detect_reason reason); 10898ce7d32SWenjing Liu bool (*detect_connection_type)(struct dc_link *link, 10998ce7d32SWenjing Liu enum dc_connection_type *type); 11076f5dc40SWenjing Liu struct dc_sink *(*add_remote_sink)( 11176f5dc40SWenjing Liu struct dc_link *link, 11276f5dc40SWenjing Liu const uint8_t *edid, 11376f5dc40SWenjing Liu int len, 11476f5dc40SWenjing Liu struct dc_sink_init_data *init_data); 11576f5dc40SWenjing Liu void (*remove_remote_sink)(struct dc_link *link, struct dc_sink *sink); 116202a3816SWenjing Liu bool (*get_hpd_state)(struct dc_link *link); 11798ce7d32SWenjing Liu struct gpio *(*get_hpd_gpio)(struct dc_bios *dcb, 11898ce7d32SWenjing Liu struct graphics_object_id link_id, 11998ce7d32SWenjing Liu struct gpio_service *gpio_service); 120202a3816SWenjing Liu void (*enable_hpd)(const struct dc_link *link); 121202a3816SWenjing Liu void (*disable_hpd)(const struct dc_link *link); 122202a3816SWenjing Liu void (*enable_hpd_filter)(struct dc_link *link, bool enable); 12398ce7d32SWenjing Liu bool (*reset_cur_dp_mst_topology)(struct dc_link *link); 12498ce7d32SWenjing Liu const struct dc_link_status *(*get_status)(const struct dc_link *link); 12598ce7d32SWenjing Liu bool (*is_hdcp1x_supported)(struct dc_link *link, 12698ce7d32SWenjing Liu enum signal_type signal); 12798ce7d32SWenjing Liu bool (*is_hdcp2x_supported)(struct dc_link *link, 12898ce7d32SWenjing Liu enum signal_type signal); 12998ce7d32SWenjing Liu void (*clear_dprx_states)(struct dc_link *link); 130202a3816SWenjing Liu 13198ce7d32SWenjing Liu 13298ce7d32SWenjing Liu /*************************** Resource *********************************/ 13398ce7d32SWenjing Liu void (*get_cur_res_map)(const struct dc *dc, uint32_t *map); 13498ce7d32SWenjing Liu void (*restore_res_map)(const struct dc *dc, uint32_t *map); 13598ce7d32SWenjing Liu void (*get_cur_link_res)(const struct dc_link *link, 13698ce7d32SWenjing Liu struct link_resource *link_res); 13798ce7d32SWenjing Liu 13898ce7d32SWenjing Liu 13998ce7d32SWenjing Liu /*************************** Validation *******************************/ 14098ce7d32SWenjing Liu enum dc_status (*validate_mode_timing)( 14198ce7d32SWenjing Liu const struct dc_stream_state *stream, 14298ce7d32SWenjing Liu struct dc_link *link, 14398ce7d32SWenjing Liu const struct dc_crtc_timing *timing); 14498ce7d32SWenjing Liu uint32_t (*dp_link_bandwidth_kbps)( 14598ce7d32SWenjing Liu const struct dc_link *link, 14698ce7d32SWenjing Liu const struct dc_link_settings *link_settings); 147a8b53760SMustapha Ghaddar bool (*validate_dpia_bandwidth)( 148a8b53760SMustapha Ghaddar const struct dc_stream_state *stream, 149a8b53760SMustapha Ghaddar const unsigned int num_streams); 15098ce7d32SWenjing Liu 15198ce7d32SWenjing Liu 15298ce7d32SWenjing Liu /*************************** DPMS *************************************/ 15398ce7d32SWenjing Liu void (*set_dpms_on)(struct dc_state *state, struct pipe_ctx *pipe_ctx); 15498ce7d32SWenjing Liu void (*set_dpms_off)(struct pipe_ctx *pipe_ctx); 15598ce7d32SWenjing Liu void (*resume)(struct dc_link *link); 15698ce7d32SWenjing Liu void (*blank_all_dp_displays)(struct dc *dc); 15798ce7d32SWenjing Liu void (*blank_all_edp_displays)(struct dc *dc); 15898ce7d32SWenjing Liu void (*blank_dp_stream)(struct dc_link *link, bool hw_init); 15998ce7d32SWenjing Liu enum dc_status (*increase_mst_payload)( 16098ce7d32SWenjing Liu struct pipe_ctx *pipe_ctx, uint32_t req_pbn); 16198ce7d32SWenjing Liu enum dc_status (*reduce_mst_payload)( 16298ce7d32SWenjing Liu struct pipe_ctx *pipe_ctx, uint32_t req_pbn); 16398ce7d32SWenjing Liu void (*set_dsc_on_stream)(struct pipe_ctx *pipe_ctx, bool enable); 16498ce7d32SWenjing Liu bool (*set_dsc_enable)(struct pipe_ctx *pipe_ctx, bool enable); 16598ce7d32SWenjing Liu bool (*update_dsc_config)(struct pipe_ctx *pipe_ctx); 16698ce7d32SWenjing Liu 16798ce7d32SWenjing Liu 16898ce7d32SWenjing Liu /*************************** DDC **************************************/ 16998ce7d32SWenjing Liu struct ddc_service *(*create_ddc_service)( 17098ce7d32SWenjing Liu struct ddc_service_init_data *ddc_init_data); 17198ce7d32SWenjing Liu void (*destroy_ddc_service)(struct ddc_service **ddc); 17298ce7d32SWenjing Liu bool (*query_ddc_data)( 17398ce7d32SWenjing Liu struct ddc_service *ddc, 17498ce7d32SWenjing Liu uint32_t address, 17598ce7d32SWenjing Liu uint8_t *write_buf, 17698ce7d32SWenjing Liu uint32_t write_size, 17798ce7d32SWenjing Liu uint8_t *read_buf, 17898ce7d32SWenjing Liu uint32_t read_size); 179202a3816SWenjing Liu int (*aux_transfer_raw)(struct ddc_service *ddc, 180202a3816SWenjing Liu struct aux_payload *payload, 181202a3816SWenjing Liu enum aux_return_code_type *operation_result); 182ad5594adSMichael Strauss bool (*configure_fixed_vs_pe_retimer)( 183ad5594adSMichael Strauss struct ddc_service *ddc, 184ad5594adSMichael Strauss const uint8_t *data, 185ad5594adSMichael Strauss uint32_t len); 18698ce7d32SWenjing Liu bool (*aux_transfer_with_retries_no_mutex)(struct ddc_service *ddc, 18798ce7d32SWenjing Liu struct aux_payload *payload); 18898ce7d32SWenjing Liu bool (*is_in_aux_transaction_mode)(struct ddc_service *ddc); 18998ce7d32SWenjing Liu uint32_t (*get_aux_defer_delay)(struct ddc_service *ddc); 190202a3816SWenjing Liu 19198ce7d32SWenjing Liu 19298ce7d32SWenjing Liu /*************************** DP Capability ****************************/ 193202a3816SWenjing Liu bool (*dp_is_sink_present)(struct dc_link *link); 194202a3816SWenjing Liu bool (*dp_is_fec_supported)(const struct dc_link *link); 19598ce7d32SWenjing Liu bool (*dp_is_128b_132b_signal)(struct pipe_ctx *pipe_ctx); 196202a3816SWenjing Liu bool (*dp_get_max_link_enc_cap)(const struct dc_link *link, 197202a3816SWenjing Liu struct dc_link_settings *max_link_enc_cap); 198202a3816SWenjing Liu const struct dc_link_settings *(*dp_get_verified_link_cap)( 199202a3816SWenjing Liu const struct dc_link *link); 20098ce7d32SWenjing Liu enum dp_link_encoding (*dp_get_encoding_format)( 20198ce7d32SWenjing Liu const struct dc_link_settings *link_settings); 202202a3816SWenjing Liu bool (*dp_should_enable_fec)(const struct dc_link *link); 20398ce7d32SWenjing Liu bool (*dp_decide_link_settings)( 20498ce7d32SWenjing Liu struct dc_stream_state *stream, 20598ce7d32SWenjing Liu struct dc_link_settings *link_setting); 20698ce7d32SWenjing Liu enum dp_link_encoding (*mst_decide_link_encoding_format)( 20798ce7d32SWenjing Liu const struct dc_link *link); 208202a3816SWenjing Liu bool (*edp_decide_link_settings)(struct dc_link *link, 209202a3816SWenjing Liu struct dc_link_settings *link_setting, uint32_t req_bw); 210202a3816SWenjing Liu uint32_t (*bw_kbps_from_raw_frl_link_rate_data)(uint8_t bw); 211202a3816SWenjing Liu bool (*dp_overwrite_extended_receiver_cap)(struct dc_link *link); 212202a3816SWenjing Liu enum lttpr_mode (*dp_decide_lttpr_mode)(struct dc_link *link, 213202a3816SWenjing Liu struct dc_link_settings *link_setting); 214202a3816SWenjing Liu 21598ce7d32SWenjing Liu 21698ce7d32SWenjing Liu /*************************** DP DPIA/PHY ******************************/ 21798ce7d32SWenjing Liu int (*dpia_handle_usb4_bandwidth_allocation_for_link)( 21898ce7d32SWenjing Liu struct dc_link *link, int peak_bw); 21998ce7d32SWenjing Liu void (*dpia_handle_bw_alloc_response)( 22098ce7d32SWenjing Liu struct dc_link *link, uint8_t bw, uint8_t result); 22198ce7d32SWenjing Liu void (*dp_set_drive_settings)( 22298ce7d32SWenjing Liu struct dc_link *link, 22398ce7d32SWenjing Liu const struct link_resource *link_res, 22498ce7d32SWenjing Liu struct link_training_settings *lt_settings); 225202a3816SWenjing Liu void (*dpcd_write_rx_power_ctrl)(struct dc_link *link, bool on); 226202a3816SWenjing Liu 22798ce7d32SWenjing Liu 22898ce7d32SWenjing Liu /*************************** DP IRQ Handler ***************************/ 229202a3816SWenjing Liu bool (*dp_parse_link_loss_status)( 230202a3816SWenjing Liu struct dc_link *link, 231202a3816SWenjing Liu union hpd_irq_data *hpd_irq_dpcd_data); 232202a3816SWenjing Liu bool (*dp_should_allow_hpd_rx_irq)(const struct dc_link *link); 233202a3816SWenjing Liu void (*dp_handle_link_loss)(struct dc_link *link); 234202a3816SWenjing Liu enum dc_status (*dp_read_hpd_rx_irq_data)( 235202a3816SWenjing Liu struct dc_link *link, 236202a3816SWenjing Liu union hpd_irq_data *irq_data); 237202a3816SWenjing Liu bool (*dp_handle_hpd_rx_irq)(struct dc_link *link, 23898ce7d32SWenjing Liu union hpd_irq_data *out_hpd_irq_dpcd_data, 23998ce7d32SWenjing Liu bool *out_link_loss, 240202a3816SWenjing Liu bool defer_handling, bool *has_left_work); 241202a3816SWenjing Liu 24298ce7d32SWenjing Liu 24398ce7d32SWenjing Liu /*************************** eDP Panel Control ************************/ 24498ce7d32SWenjing Liu void (*edp_panel_backlight_power_on)( 24598ce7d32SWenjing Liu struct dc_link *link, bool wait_for_hpd); 246202a3816SWenjing Liu int (*edp_get_backlight_level)(const struct dc_link *link); 247202a3816SWenjing Liu bool (*edp_get_backlight_level_nits)(struct dc_link *link, 248202a3816SWenjing Liu uint32_t *backlight_millinits_avg, 249202a3816SWenjing Liu uint32_t *backlight_millinits_peak); 250202a3816SWenjing Liu bool (*edp_set_backlight_level)(const struct dc_link *link, 251202a3816SWenjing Liu uint32_t backlight_pwm_u16_16, 252202a3816SWenjing Liu uint32_t frame_ramp); 253202a3816SWenjing Liu bool (*edp_set_backlight_level_nits)(struct dc_link *link, 254202a3816SWenjing Liu bool isHDR, 255202a3816SWenjing Liu uint32_t backlight_millinits, 256202a3816SWenjing Liu uint32_t transition_time_in_ms); 257202a3816SWenjing Liu int (*edp_get_target_backlight_pwm)(const struct dc_link *link); 25898ce7d32SWenjing Liu bool (*edp_get_psr_state)( 25998ce7d32SWenjing Liu const struct dc_link *link, enum dc_psr_state *state); 26098ce7d32SWenjing Liu bool (*edp_set_psr_allow_active)( 26198ce7d32SWenjing Liu struct dc_link *link, 26298ce7d32SWenjing Liu const bool *allow_active, 26398ce7d32SWenjing Liu bool wait, 26498ce7d32SWenjing Liu bool force_static, 26598ce7d32SWenjing Liu const unsigned int *power_opts); 266202a3816SWenjing Liu bool (*edp_setup_psr)(struct dc_link *link, 267202a3816SWenjing Liu const struct dc_stream_state *stream, 268202a3816SWenjing Liu struct psr_config *psr_config, 269202a3816SWenjing Liu struct psr_context *psr_context); 27098ce7d32SWenjing Liu bool (*edp_set_sink_vtotal_in_psr_active)( 27198ce7d32SWenjing Liu const struct dc_link *link, 27298ce7d32SWenjing Liu uint16_t psr_vtotal_idle, 27398ce7d32SWenjing Liu uint16_t psr_vtotal_su); 27498ce7d32SWenjing Liu void (*edp_get_psr_residency)( 27598ce7d32SWenjing Liu const struct dc_link *link, uint32_t *residency); 276c7ddc0a8SBhawanpreet Lakha 277c7ddc0a8SBhawanpreet Lakha bool (*edp_get_replay_state)( 278c7ddc0a8SBhawanpreet Lakha const struct dc_link *link, uint64_t *state); 279c7ddc0a8SBhawanpreet Lakha bool (*edp_set_replay_allow_active)(struct dc_link *dc_link, 280c7ddc0a8SBhawanpreet Lakha const bool *enable, bool wait, bool force_static, 281c7ddc0a8SBhawanpreet Lakha const unsigned int *power_opts); 282c7ddc0a8SBhawanpreet Lakha bool (*edp_setup_replay)(struct dc_link *link, 283c7ddc0a8SBhawanpreet Lakha const struct dc_stream_state *stream); 284c7ddc0a8SBhawanpreet Lakha bool (*edp_set_coasting_vtotal)( 285c7ddc0a8SBhawanpreet Lakha struct dc_link *link, uint16_t coasting_vtotal); 286c7ddc0a8SBhawanpreet Lakha bool (*edp_replay_residency)(const struct dc_link *link, 287c7ddc0a8SBhawanpreet Lakha unsigned int *residency, const bool is_start, 288c7ddc0a8SBhawanpreet Lakha const bool is_alpm); 289c7ddc0a8SBhawanpreet Lakha 290202a3816SWenjing Liu bool (*edp_wait_for_t12)(struct dc_link *link); 29198ce7d32SWenjing Liu bool (*edp_is_ilr_optimization_required)(struct dc_link *link, 29298ce7d32SWenjing Liu struct dc_crtc_timing *crtc_timing); 29398ce7d32SWenjing Liu bool (*edp_backlight_enable_aux)(struct dc_link *link, bool enable); 29498ce7d32SWenjing Liu void (*edp_add_delay_for_T9)(struct dc_link *link); 29598ce7d32SWenjing Liu bool (*edp_receiver_ready_T9)(struct dc_link *link); 29698ce7d32SWenjing Liu bool (*edp_receiver_ready_T7)(struct dc_link *link); 29798ce7d32SWenjing Liu bool (*edp_power_alpm_dpcd_enable)(struct dc_link *link, bool enable); 298*a8728dbbSIan Chen void (*edp_set_panel_power)(struct dc_link *link, bool powerOn); 299202a3816SWenjing Liu 30098ce7d32SWenjing Liu 30198ce7d32SWenjing Liu /*************************** DP CTS ************************************/ 30236516001SWenjing Liu void (*dp_handle_automated_test)(struct dc_link *link); 30336516001SWenjing Liu bool (*dp_set_test_pattern)( 30436516001SWenjing Liu struct dc_link *link, 30536516001SWenjing Liu enum dp_test_pattern test_pattern, 30636516001SWenjing Liu enum dp_test_pattern_color_space test_pattern_color_space, 30736516001SWenjing Liu const struct link_training_settings *p_link_settings, 30836516001SWenjing Liu const unsigned char *p_custom_pattern, 30936516001SWenjing Liu unsigned int cust_pattern_size); 31036516001SWenjing Liu void (*dp_set_preferred_link_settings)(struct dc *dc, 31136516001SWenjing Liu struct dc_link_settings *link_setting, 31236516001SWenjing Liu struct dc_link *link); 31336516001SWenjing Liu void (*dp_set_preferred_training_settings)(struct dc *dc, 31436516001SWenjing Liu struct dc_link_settings *link_setting, 31536516001SWenjing Liu struct dc_link_training_overrides *lt_overrides, 31636516001SWenjing Liu struct dc_link *link, 31736516001SWenjing Liu bool skip_immediate_retrain); 318202a3816SWenjing Liu 31998ce7d32SWenjing Liu 32098ce7d32SWenjing Liu /*************************** DP Trace *********************************/ 32136516001SWenjing Liu bool (*dp_trace_is_initialized)(struct dc_link *link); 32236516001SWenjing Liu void (*dp_trace_set_is_logged_flag)(struct dc_link *link, 32336516001SWenjing Liu bool in_detection, 32436516001SWenjing Liu bool is_logged); 32536516001SWenjing Liu bool (*dp_trace_is_logged)(struct dc_link *link, bool in_detection); 32636516001SWenjing Liu unsigned long long (*dp_trace_get_lt_end_timestamp)( 32736516001SWenjing Liu struct dc_link *link, bool in_detection); 32836516001SWenjing Liu const struct dp_trace_lt_counts *(*dp_trace_get_lt_counts)( 32936516001SWenjing Liu struct dc_link *link, bool in_detection); 33036516001SWenjing Liu unsigned int (*dp_trace_get_link_loss_count)(struct dc_link *link); 33198ce7d32SWenjing Liu void (*dp_trace_set_edp_power_timestamp)(struct dc_link *link, 332bc33f5e5SWenjing Liu bool power_up); 33398ce7d32SWenjing Liu uint64_t (*dp_trace_get_edp_poweron_timestamp)(struct dc_link *link); 33498ce7d32SWenjing Liu uint64_t (*dp_trace_get_edp_poweroff_timestamp)(struct dc_link *link); 33598ce7d32SWenjing Liu void (*dp_trace_source_sequence)( 33698ce7d32SWenjing Liu struct dc_link *link, uint8_t dp_test_mode); 33798ce7d32SWenjing Liu }; 3384370f72eSWenjing Liu #endif /* __DC_LINK_HPD_H__ */ 339