Line data Source code
1 : /* 2 : * Copyright 2012-15 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 : #include "bios_parser_common.h" 27 : #include "include/grph_object_ctrl_defs.h" 28 : 29 : static enum object_type object_type_from_bios_object_id(uint32_t bios_object_id) 30 : { 31 0 : uint32_t bios_object_type = (bios_object_id & OBJECT_TYPE_MASK) 32 0 : >> OBJECT_TYPE_SHIFT; 33 : enum object_type object_type; 34 : 35 : switch (bios_object_type) { 36 : case GRAPH_OBJECT_TYPE_GPU: 37 : object_type = OBJECT_TYPE_GPU; 38 : break; 39 : case GRAPH_OBJECT_TYPE_ENCODER: 40 : object_type = OBJECT_TYPE_ENCODER; 41 : break; 42 : case GRAPH_OBJECT_TYPE_CONNECTOR: 43 : object_type = OBJECT_TYPE_CONNECTOR; 44 : break; 45 : case GRAPH_OBJECT_TYPE_ROUTER: 46 : object_type = OBJECT_TYPE_ROUTER; 47 : break; 48 : case GRAPH_OBJECT_TYPE_GENERIC: 49 : object_type = OBJECT_TYPE_GENERIC; 50 : break; 51 : default: 52 : object_type = OBJECT_TYPE_UNKNOWN; 53 : break; 54 : } 55 : 56 : return object_type; 57 : } 58 : 59 : static enum object_enum_id enum_id_from_bios_object_id(uint32_t bios_object_id) 60 : { 61 0 : uint32_t bios_enum_id = 62 0 : (bios_object_id & ENUM_ID_MASK) >> ENUM_ID_SHIFT; 63 : enum object_enum_id id; 64 : 65 : switch (bios_enum_id) { 66 : case GRAPH_OBJECT_ENUM_ID1: 67 : id = ENUM_ID_1; 68 : break; 69 : case GRAPH_OBJECT_ENUM_ID2: 70 : id = ENUM_ID_2; 71 : break; 72 : case GRAPH_OBJECT_ENUM_ID3: 73 : id = ENUM_ID_3; 74 : break; 75 : case GRAPH_OBJECT_ENUM_ID4: 76 : id = ENUM_ID_4; 77 : break; 78 : case GRAPH_OBJECT_ENUM_ID5: 79 : id = ENUM_ID_5; 80 : break; 81 : case GRAPH_OBJECT_ENUM_ID6: 82 : id = ENUM_ID_6; 83 : break; 84 : case GRAPH_OBJECT_ENUM_ID7: 85 : id = ENUM_ID_7; 86 : break; 87 : default: 88 : id = ENUM_ID_UNKNOWN; 89 : break; 90 : } 91 : 92 : return id; 93 : } 94 : 95 : static uint32_t gpu_id_from_bios_object_id(uint32_t bios_object_id) 96 : { 97 0 : return (bios_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; 98 : } 99 : 100 0 : static enum encoder_id encoder_id_from_bios_object_id(uint32_t bios_object_id) 101 : { 102 0 : uint32_t bios_encoder_id = gpu_id_from_bios_object_id(bios_object_id); 103 : enum encoder_id id; 104 : 105 0 : switch (bios_encoder_id) { 106 : case ENCODER_OBJECT_ID_INTERNAL_LVDS: 107 : id = ENCODER_ID_INTERNAL_LVDS; 108 : break; 109 : case ENCODER_OBJECT_ID_INTERNAL_TMDS1: 110 0 : id = ENCODER_ID_INTERNAL_TMDS1; 111 0 : break; 112 : case ENCODER_OBJECT_ID_INTERNAL_TMDS2: 113 0 : id = ENCODER_ID_INTERNAL_TMDS2; 114 0 : break; 115 : case ENCODER_OBJECT_ID_INTERNAL_DAC1: 116 0 : id = ENCODER_ID_INTERNAL_DAC1; 117 0 : break; 118 : case ENCODER_OBJECT_ID_INTERNAL_DAC2: 119 0 : id = ENCODER_ID_INTERNAL_DAC2; 120 0 : break; 121 : case ENCODER_OBJECT_ID_INTERNAL_LVTM1: 122 0 : id = ENCODER_ID_INTERNAL_LVTM1; 123 0 : break; 124 : case ENCODER_OBJECT_ID_HDMI_INTERNAL: 125 0 : id = ENCODER_ID_INTERNAL_HDMI; 126 0 : break; 127 : case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: 128 0 : id = ENCODER_ID_INTERNAL_KLDSCP_TMDS1; 129 0 : break; 130 : case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1: 131 0 : id = ENCODER_ID_INTERNAL_KLDSCP_DAC1; 132 0 : break; 133 : case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2: 134 0 : id = ENCODER_ID_INTERNAL_KLDSCP_DAC2; 135 0 : break; 136 : case ENCODER_OBJECT_ID_MVPU_FPGA: 137 0 : id = ENCODER_ID_EXTERNAL_MVPU_FPGA; 138 0 : break; 139 : case ENCODER_OBJECT_ID_INTERNAL_DDI: 140 0 : id = ENCODER_ID_INTERNAL_DDI; 141 0 : break; 142 : case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: 143 0 : id = ENCODER_ID_INTERNAL_UNIPHY; 144 0 : break; 145 : case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: 146 0 : id = ENCODER_ID_INTERNAL_KLDSCP_LVTMA; 147 0 : break; 148 : case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: 149 0 : id = ENCODER_ID_INTERNAL_UNIPHY1; 150 0 : break; 151 : case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: 152 0 : id = ENCODER_ID_INTERNAL_UNIPHY2; 153 0 : break; 154 : case ENCODER_OBJECT_ID_ALMOND: /* ENCODER_OBJECT_ID_NUTMEG */ 155 0 : id = ENCODER_ID_EXTERNAL_NUTMEG; 156 0 : break; 157 : case ENCODER_OBJECT_ID_TRAVIS: 158 0 : id = ENCODER_ID_EXTERNAL_TRAVIS; 159 0 : break; 160 : case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3: 161 0 : id = ENCODER_ID_INTERNAL_UNIPHY3; 162 0 : break; 163 : default: 164 0 : id = ENCODER_ID_UNKNOWN; 165 0 : ASSERT(0); 166 : break; 167 : } 168 : 169 0 : return id; 170 : } 171 : 172 : static enum connector_id connector_id_from_bios_object_id( 173 : uint32_t bios_object_id) 174 : { 175 0 : uint32_t bios_connector_id = gpu_id_from_bios_object_id(bios_object_id); 176 : 177 : enum connector_id id; 178 : 179 : switch (bios_connector_id) { 180 : case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I: 181 : id = CONNECTOR_ID_SINGLE_LINK_DVII; 182 : break; 183 : case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I: 184 : id = CONNECTOR_ID_DUAL_LINK_DVII; 185 : break; 186 : case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D: 187 : id = CONNECTOR_ID_SINGLE_LINK_DVID; 188 : break; 189 : case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D: 190 : id = CONNECTOR_ID_DUAL_LINK_DVID; 191 : break; 192 : case CONNECTOR_OBJECT_ID_VGA: 193 : id = CONNECTOR_ID_VGA; 194 : break; 195 : case CONNECTOR_OBJECT_ID_HDMI_TYPE_A: 196 : id = CONNECTOR_ID_HDMI_TYPE_A; 197 : break; 198 : case CONNECTOR_OBJECT_ID_LVDS: 199 : id = CONNECTOR_ID_LVDS; 200 : break; 201 : case CONNECTOR_OBJECT_ID_PCIE_CONNECTOR: 202 : id = CONNECTOR_ID_PCIE; 203 : break; 204 : case CONNECTOR_OBJECT_ID_HARDCODE_DVI: 205 : id = CONNECTOR_ID_HARDCODE_DVI; 206 : break; 207 : case CONNECTOR_OBJECT_ID_DISPLAYPORT: 208 : id = CONNECTOR_ID_DISPLAY_PORT; 209 : break; 210 : case CONNECTOR_OBJECT_ID_eDP: 211 : id = CONNECTOR_ID_EDP; 212 : break; 213 : case CONNECTOR_OBJECT_ID_MXM: 214 : id = CONNECTOR_ID_MXM; 215 : break; 216 : case CONNECTOR_OBJECT_ID_USBC: 217 : id = CONNECTOR_ID_USBC; 218 : break; 219 : default: 220 : id = CONNECTOR_ID_UNKNOWN; 221 : break; 222 : } 223 : 224 : return id; 225 : } 226 : 227 : static enum generic_id generic_id_from_bios_object_id(uint32_t bios_object_id) 228 : { 229 0 : uint32_t bios_generic_id = gpu_id_from_bios_object_id(bios_object_id); 230 : 231 : enum generic_id id; 232 : 233 : switch (bios_generic_id) { 234 : case GENERIC_OBJECT_ID_MXM_OPM: 235 : id = GENERIC_ID_MXM_OPM; 236 : break; 237 : case GENERIC_OBJECT_ID_GLSYNC: 238 : id = GENERIC_ID_GLSYNC; 239 : break; 240 : case GENERIC_OBJECT_ID_STEREO_PIN: 241 : id = GENERIC_ID_STEREO; 242 : break; 243 : default: 244 : id = GENERIC_ID_UNKNOWN; 245 : break; 246 : } 247 : 248 : return id; 249 : } 250 : 251 0 : static uint32_t id_from_bios_object_id(enum object_type type, 252 : uint32_t bios_object_id) 253 : { 254 0 : switch (type) { 255 : case OBJECT_TYPE_GPU: 256 0 : return gpu_id_from_bios_object_id(bios_object_id); 257 : case OBJECT_TYPE_ENCODER: 258 0 : return (uint32_t)encoder_id_from_bios_object_id(bios_object_id); 259 : case OBJECT_TYPE_CONNECTOR: 260 : return (uint32_t)connector_id_from_bios_object_id( 261 : bios_object_id); 262 : case OBJECT_TYPE_GENERIC: 263 : return generic_id_from_bios_object_id(bios_object_id); 264 : default: 265 : return 0; 266 : } 267 : } 268 : 269 0 : struct graphics_object_id object_id_from_bios_object_id(uint32_t bios_object_id) 270 : { 271 : enum object_type type; 272 : enum object_enum_id enum_id; 273 0 : struct graphics_object_id go_id = { 0 }; 274 : 275 0 : type = object_type_from_bios_object_id(bios_object_id); 276 : 277 0 : if (OBJECT_TYPE_UNKNOWN == type) 278 0 : return go_id; 279 : 280 0 : enum_id = enum_id_from_bios_object_id(bios_object_id); 281 : 282 0 : if (ENUM_ID_UNKNOWN == enum_id) 283 0 : return go_id; 284 : 285 0 : go_id = dal_graphics_object_id_init( 286 : id_from_bios_object_id(type, bios_object_id), enum_id, type); 287 : 288 0 : return go_id; 289 : } 290 : 291 :