1 /* 2 * Copyright 2016 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 * Authors: AMD 23 * 24 */ 25 26 #ifndef DC_BIOS_TYPES_H 27 #define DC_BIOS_TYPES_H 28 29 /****************************************************************************** 30 * Interface file for VBIOS implementations. 31 * 32 * The default implementation is inside DC. 33 * Display Manager (which instantiates DC) has the option to supply it's own 34 * (external to DC) implementation of VBIOS, which will be called by DC, using 35 * this interface. 36 * (The intended use is Diagnostics, but other uses may appear.) 37 *****************************************************************************/ 38 39 #include "include/bios_parser_types.h" 40 41 struct dc_vbios_funcs { 42 uint8_t (*get_connectors_number)(struct dc_bios *bios); 43 44 struct graphics_object_id (*get_encoder_id)( 45 struct dc_bios *bios, 46 uint32_t i); 47 struct graphics_object_id (*get_connector_id)( 48 struct dc_bios *bios, 49 uint8_t connector_index); 50 uint32_t (*get_dst_number)( 51 struct dc_bios *bios, 52 struct graphics_object_id id); 53 54 enum bp_result (*get_src_obj)( 55 struct dc_bios *bios, 56 struct graphics_object_id object_id, uint32_t index, 57 struct graphics_object_id *src_object_id); 58 enum bp_result (*get_dst_obj)( 59 struct dc_bios *bios, 60 struct graphics_object_id object_id, uint32_t index, 61 struct graphics_object_id *dest_object_id); 62 63 enum bp_result (*get_i2c_info)( 64 struct dc_bios *dcb, 65 struct graphics_object_id id, 66 struct graphics_object_i2c_info *info); 67 68 enum bp_result (*get_voltage_ddc_info)( 69 struct dc_bios *bios, 70 uint32_t index, 71 struct graphics_object_i2c_info *info); 72 enum bp_result (*get_thermal_ddc_info)( 73 struct dc_bios *bios, 74 uint32_t i2c_channel_id, 75 struct graphics_object_i2c_info *info); 76 enum bp_result (*get_hpd_info)( 77 struct dc_bios *bios, 78 struct graphics_object_id id, 79 struct graphics_object_hpd_info *info); 80 enum bp_result (*get_device_tag)( 81 struct dc_bios *bios, 82 struct graphics_object_id connector_object_id, 83 uint32_t device_tag_index, 84 struct connector_device_tag_info *info); 85 enum bp_result (*get_firmware_info)( 86 struct dc_bios *bios, 87 struct dc_firmware_info *info); 88 enum bp_result (*get_spread_spectrum_info)( 89 struct dc_bios *bios, 90 enum as_signal_type signal, 91 uint32_t index, 92 struct spread_spectrum_info *ss_info); 93 uint32_t (*get_ss_entry_number)( 94 struct dc_bios *bios, 95 enum as_signal_type signal); 96 enum bp_result (*get_embedded_panel_info)( 97 struct dc_bios *bios, 98 struct embedded_panel_info *info); 99 enum bp_result (*get_gpio_pin_info)( 100 struct dc_bios *bios, 101 uint32_t gpio_id, 102 struct gpio_pin_info *info); 103 enum bp_result (*get_encoder_cap_info)( 104 struct dc_bios *bios, 105 struct graphics_object_id object_id, 106 struct bp_encoder_cap_info *info); 107 108 bool (*is_lid_status_changed)( 109 struct dc_bios *bios); 110 bool (*is_display_config_changed)( 111 struct dc_bios *bios); 112 bool (*is_accelerated_mode)( 113 struct dc_bios *bios); 114 uint32_t (*get_vga_enabled_displays)( 115 struct dc_bios *bios); 116 void (*get_bios_event_info)( 117 struct dc_bios *bios, 118 struct bios_event_info *info); 119 void (*update_requested_backlight_level)( 120 struct dc_bios *bios, 121 uint32_t backlight_8bit); 122 uint32_t (*get_requested_backlight_level)( 123 struct dc_bios *bios); 124 void (*take_backlight_control)( 125 struct dc_bios *bios, 126 bool cntl); 127 128 bool (*is_active_display)( 129 struct dc_bios *bios, 130 enum signal_type signal, 131 const struct connector_device_tag_info *device_tag); 132 enum controller_id (*get_embedded_display_controller_id)( 133 struct dc_bios *bios); 134 uint32_t (*get_embedded_display_refresh_rate)( 135 struct dc_bios *bios); 136 137 void (*set_scratch_critical_state)( 138 struct dc_bios *bios, 139 bool state); 140 bool (*is_device_id_supported)( 141 struct dc_bios *bios, 142 struct device_id id); 143 144 /* COMMANDS */ 145 146 enum bp_result (*encoder_control)( 147 struct dc_bios *bios, 148 struct bp_encoder_control *cntl); 149 enum bp_result (*transmitter_control)( 150 struct dc_bios *bios, 151 struct bp_transmitter_control *cntl); 152 enum bp_result (*crt_control)( 153 struct dc_bios *bios, 154 enum engine_id engine_id, 155 bool enable, 156 uint32_t pixel_clock); 157 enum bp_result (*enable_crtc)( 158 struct dc_bios *bios, 159 enum controller_id id, 160 bool enable); 161 enum bp_result (*adjust_pixel_clock)( 162 struct dc_bios *bios, 163 struct bp_adjust_pixel_clock_parameters *bp_params); 164 enum bp_result (*set_pixel_clock)( 165 struct dc_bios *bios, 166 struct bp_pixel_clock_parameters *bp_params); 167 enum bp_result (*set_dce_clock)( 168 struct dc_bios *bios, 169 struct bp_set_dce_clock_parameters *bp_params); 170 unsigned int (*get_smu_clock_info)( 171 struct dc_bios *bios); 172 enum bp_result (*enable_spread_spectrum_on_ppll)( 173 struct dc_bios *bios, 174 struct bp_spread_spectrum_parameters *bp_params, 175 bool enable); 176 enum bp_result (*program_crtc_timing)( 177 struct dc_bios *bios, 178 struct bp_hw_crtc_timing_parameters *bp_params); 179 180 enum bp_result (*crtc_source_select)( 181 struct dc_bios *bios, 182 struct bp_crtc_source_select *bp_params); 183 enum bp_result (*program_display_engine_pll)( 184 struct dc_bios *bios, 185 struct bp_pixel_clock_parameters *bp_params); 186 187 enum signal_type (*dac_load_detect)( 188 struct dc_bios *bios, 189 struct graphics_object_id encoder, 190 struct graphics_object_id connector, 191 enum signal_type display_signal); 192 193 enum bp_result (*enable_disp_power_gating)( 194 struct dc_bios *bios, 195 enum controller_id controller_id, 196 enum bp_pipe_control_action action); 197 198 void (*post_init)(struct dc_bios *bios); 199 200 void (*bios_parser_destroy)(struct dc_bios **dcb); 201 202 enum bp_result (*get_board_layout_info)( 203 struct dc_bios *dcb, 204 struct board_layout_info *board_layout_info); 205 }; 206 207 struct bios_registers { 208 uint32_t BIOS_SCRATCH_3; 209 uint32_t BIOS_SCRATCH_6; 210 }; 211 212 struct dc_bios { 213 const struct dc_vbios_funcs *funcs; 214 215 uint8_t *bios; 216 uint32_t bios_size; 217 218 uint8_t *bios_local_image; 219 220 struct dc_context *ctx; 221 const struct bios_registers *regs; 222 struct integrated_info *integrated_info; 223 }; 224 225 #endif /* DC_BIOS_TYPES_H */ 226