| /* | |
| * Copyright 2012-15 Advanced Micro Devices, Inc. | |
| * | |
| * Permission is hereby granted, free of charge, to any person obtaining a | |
| * copy of this software and associated documentation files (the "Software"), | |
| * to deal in the Software without restriction, including without limitation | |
| * the rights to use, copy, modify, merge, publish, distribute, sublicense, | |
| * and/or sell copies of the Software, and to permit persons to whom the | |
| * Software is furnished to do so, subject to the following conditions: | |
| * | |
| * The above copyright notice and this permission notice shall be included in | |
| * all copies or substantial portions of the Software. | |
| * | |
| * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | |
| * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | |
| * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | |
| * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | |
| * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | |
| * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | |
| * OTHER DEALINGS IN THE SOFTWARE. | |
| * | |
| * Authors: AMD | |
| * | |
| */ | |
| #include "bios_parser_common.h" | |
| #include "include/grph_object_ctrl_defs.h" | |
| static enum object_type object_type_from_bios_object_id(uint32_t bios_object_id) | |
| { | |
| uint32_t bios_object_type = (bios_object_id & OBJECT_TYPE_MASK) | |
| >> OBJECT_TYPE_SHIFT; | |
| enum object_type object_type; | |
| switch (bios_object_type) { | |
| case GRAPH_OBJECT_TYPE_GPU: | |
| object_type = OBJECT_TYPE_GPU; | |
| break; | |
| case GRAPH_OBJECT_TYPE_ENCODER: | |
| object_type = OBJECT_TYPE_ENCODER; | |
| break; | |
| case GRAPH_OBJECT_TYPE_CONNECTOR: | |
| object_type = OBJECT_TYPE_CONNECTOR; | |
| break; | |
| case GRAPH_OBJECT_TYPE_ROUTER: | |
| object_type = OBJECT_TYPE_ROUTER; | |
| break; | |
| case GRAPH_OBJECT_TYPE_GENERIC: | |
| object_type = OBJECT_TYPE_GENERIC; | |
| break; | |
| default: | |
| object_type = OBJECT_TYPE_UNKNOWN; | |
| break; | |
| } | |
| return object_type; | |
| } | |
| static enum object_enum_id enum_id_from_bios_object_id(uint32_t bios_object_id) | |
| { | |
| uint32_t bios_enum_id = | |
| (bios_object_id & ENUM_ID_MASK) >> ENUM_ID_SHIFT; | |
| enum object_enum_id id; | |
| switch (bios_enum_id) { | |
| case GRAPH_OBJECT_ENUM_ID1: | |
| id = ENUM_ID_1; | |
| break; | |
| case GRAPH_OBJECT_ENUM_ID2: | |
| id = ENUM_ID_2; | |
| break; | |
| case GRAPH_OBJECT_ENUM_ID3: | |
| id = ENUM_ID_3; | |
| break; | |
| case GRAPH_OBJECT_ENUM_ID4: | |
| id = ENUM_ID_4; | |
| break; | |
| case GRAPH_OBJECT_ENUM_ID5: | |
| id = ENUM_ID_5; | |
| break; | |
| case GRAPH_OBJECT_ENUM_ID6: | |
| id = ENUM_ID_6; | |
| break; | |
| case GRAPH_OBJECT_ENUM_ID7: | |
| id = ENUM_ID_7; | |
| break; | |
| default: | |
| id = ENUM_ID_UNKNOWN; | |
| break; | |
| } | |
| return id; | |
| } | |
| static uint32_t gpu_id_from_bios_object_id(uint32_t bios_object_id) | |
| { | |
| return (bios_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT; | |
| } | |
| static enum encoder_id encoder_id_from_bios_object_id(uint32_t bios_object_id) | |
| { | |
| uint32_t bios_encoder_id = gpu_id_from_bios_object_id(bios_object_id); | |
| enum encoder_id id; | |
| switch (bios_encoder_id) { | |
| case ENCODER_OBJECT_ID_INTERNAL_LVDS: | |
| id = ENCODER_ID_INTERNAL_LVDS; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_TMDS1: | |
| id = ENCODER_ID_INTERNAL_TMDS1; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_TMDS2: | |
| id = ENCODER_ID_INTERNAL_TMDS2; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_DAC1: | |
| id = ENCODER_ID_INTERNAL_DAC1; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_DAC2: | |
| id = ENCODER_ID_INTERNAL_DAC2; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_LVTM1: | |
| id = ENCODER_ID_INTERNAL_LVTM1; | |
| break; | |
| case ENCODER_OBJECT_ID_HDMI_INTERNAL: | |
| id = ENCODER_ID_INTERNAL_HDMI; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1: | |
| id = ENCODER_ID_INTERNAL_KLDSCP_TMDS1; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1: | |
| id = ENCODER_ID_INTERNAL_KLDSCP_DAC1; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2: | |
| id = ENCODER_ID_INTERNAL_KLDSCP_DAC2; | |
| break; | |
| case ENCODER_OBJECT_ID_MVPU_FPGA: | |
| id = ENCODER_ID_EXTERNAL_MVPU_FPGA; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_DDI: | |
| id = ENCODER_ID_INTERNAL_DDI; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_UNIPHY: | |
| id = ENCODER_ID_INTERNAL_UNIPHY; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA: | |
| id = ENCODER_ID_INTERNAL_KLDSCP_LVTMA; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1: | |
| id = ENCODER_ID_INTERNAL_UNIPHY1; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2: | |
| id = ENCODER_ID_INTERNAL_UNIPHY2; | |
| break; | |
| case ENCODER_OBJECT_ID_ALMOND: /* ENCODER_OBJECT_ID_NUTMEG */ | |
| id = ENCODER_ID_EXTERNAL_NUTMEG; | |
| break; | |
| case ENCODER_OBJECT_ID_TRAVIS: | |
| id = ENCODER_ID_EXTERNAL_TRAVIS; | |
| break; | |
| case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3: | |
| id = ENCODER_ID_INTERNAL_UNIPHY3; | |
| break; | |
| default: | |
| id = ENCODER_ID_UNKNOWN; | |
| ASSERT(0); | |
| break; | |
| } | |
| return id; | |
| } | |
| static enum connector_id connector_id_from_bios_object_id( | |
| uint32_t bios_object_id) | |
| { | |
| uint32_t bios_connector_id = gpu_id_from_bios_object_id(bios_object_id); | |
| enum connector_id id; | |
| switch (bios_connector_id) { | |
| case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I: | |
| id = CONNECTOR_ID_SINGLE_LINK_DVII; | |
| break; | |
| case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I: | |
| id = CONNECTOR_ID_DUAL_LINK_DVII; | |
| break; | |
| case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D: | |
| id = CONNECTOR_ID_SINGLE_LINK_DVID; | |
| break; | |
| case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D: | |
| id = CONNECTOR_ID_DUAL_LINK_DVID; | |
| break; | |
| case CONNECTOR_OBJECT_ID_VGA: | |
| id = CONNECTOR_ID_VGA; | |
| break; | |
| case CONNECTOR_OBJECT_ID_HDMI_TYPE_A: | |
| id = CONNECTOR_ID_HDMI_TYPE_A; | |
| break; | |
| case CONNECTOR_OBJECT_ID_LVDS: | |
| id = CONNECTOR_ID_LVDS; | |
| break; | |
| case CONNECTOR_OBJECT_ID_PCIE_CONNECTOR: | |
| id = CONNECTOR_ID_PCIE; | |
| break; | |
| case CONNECTOR_OBJECT_ID_HARDCODE_DVI: | |
| id = CONNECTOR_ID_HARDCODE_DVI; | |
| break; | |
| case CONNECTOR_OBJECT_ID_DISPLAYPORT: | |
| id = CONNECTOR_ID_DISPLAY_PORT; | |
| break; | |
| case CONNECTOR_OBJECT_ID_eDP: | |
| id = CONNECTOR_ID_EDP; | |
| break; | |
| case CONNECTOR_OBJECT_ID_MXM: | |
| id = CONNECTOR_ID_MXM; | |
| break; | |
| default: | |
| id = CONNECTOR_ID_UNKNOWN; | |
| break; | |
| } | |
| return id; | |
| } | |
| static enum generic_id generic_id_from_bios_object_id(uint32_t bios_object_id) | |
| { | |
| uint32_t bios_generic_id = gpu_id_from_bios_object_id(bios_object_id); | |
| enum generic_id id; | |
| switch (bios_generic_id) { | |
| case GENERIC_OBJECT_ID_MXM_OPM: | |
| id = GENERIC_ID_MXM_OPM; | |
| break; | |
| case GENERIC_OBJECT_ID_GLSYNC: | |
| id = GENERIC_ID_GLSYNC; | |
| break; | |
| case GENERIC_OBJECT_ID_STEREO_PIN: | |
| id = GENERIC_ID_STEREO; | |
| break; | |
| default: | |
| id = GENERIC_ID_UNKNOWN; | |
| break; | |
| } | |
| return id; | |
| } | |
| static uint32_t id_from_bios_object_id(enum object_type type, | |
| uint32_t bios_object_id) | |
| { | |
| switch (type) { | |
| case OBJECT_TYPE_GPU: | |
| return gpu_id_from_bios_object_id(bios_object_id); | |
| case OBJECT_TYPE_ENCODER: | |
| return (uint32_t)encoder_id_from_bios_object_id(bios_object_id); | |
| case OBJECT_TYPE_CONNECTOR: | |
| return (uint32_t)connector_id_from_bios_object_id( | |
| bios_object_id); | |
| case OBJECT_TYPE_GENERIC: | |
| return generic_id_from_bios_object_id(bios_object_id); | |
| default: | |
| return 0; | |
| } | |
| } | |
| struct graphics_object_id object_id_from_bios_object_id(uint32_t bios_object_id) | |
| { | |
| enum object_type type; | |
| enum object_enum_id enum_id; | |
| struct graphics_object_id go_id = { 0 }; | |
| type = object_type_from_bios_object_id(bios_object_id); | |
| if (OBJECT_TYPE_UNKNOWN == type) | |
| return go_id; | |
| enum_id = enum_id_from_bios_object_id(bios_object_id); | |
| if (ENUM_ID_UNKNOWN == enum_id) | |
| return go_id; | |
| go_id = dal_graphics_object_id_init( | |
| id_from_bios_object_id(type, bios_object_id), enum_id, type); | |
| return go_id; | |
| } | |