Back to home page

OSCL-LXR

 
 

    


0001 /*
0002  * Copyright 2012-15 Advanced Micro Devices, Inc.
0003  *
0004  * Permission is hereby granted, free of charge, to any person obtaining a
0005  * copy of this software and associated documentation files (the "Software"),
0006  * to deal in the Software without restriction, including without limitation
0007  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
0008  * and/or sell copies of the Software, and to permit persons to whom the
0009  * Software is furnished to do so, subject to the following conditions:
0010  *
0011  * The above copyright notice and this permission notice shall be included in
0012  * all copies or substantial portions of the Software.
0013  *
0014  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
0015  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
0016  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
0017  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
0018  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
0019  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
0020  * OTHER DEALINGS IN THE SOFTWARE.
0021  *
0022  * Authors: AMD
0023  *
0024  */
0025 
0026 #include "bios_parser_common.h"
0027 #include "include/grph_object_ctrl_defs.h"
0028 
0029 static enum object_type object_type_from_bios_object_id(uint32_t bios_object_id)
0030 {
0031     uint32_t bios_object_type = (bios_object_id & OBJECT_TYPE_MASK)
0032                 >> OBJECT_TYPE_SHIFT;
0033     enum object_type object_type;
0034 
0035     switch (bios_object_type) {
0036     case GRAPH_OBJECT_TYPE_GPU:
0037         object_type = OBJECT_TYPE_GPU;
0038         break;
0039     case GRAPH_OBJECT_TYPE_ENCODER:
0040         object_type = OBJECT_TYPE_ENCODER;
0041         break;
0042     case GRAPH_OBJECT_TYPE_CONNECTOR:
0043         object_type = OBJECT_TYPE_CONNECTOR;
0044         break;
0045     case GRAPH_OBJECT_TYPE_ROUTER:
0046         object_type = OBJECT_TYPE_ROUTER;
0047         break;
0048     case GRAPH_OBJECT_TYPE_GENERIC:
0049         object_type = OBJECT_TYPE_GENERIC;
0050         break;
0051     default:
0052         object_type = OBJECT_TYPE_UNKNOWN;
0053         break;
0054     }
0055 
0056     return object_type;
0057 }
0058 
0059 static enum object_enum_id enum_id_from_bios_object_id(uint32_t bios_object_id)
0060 {
0061     uint32_t bios_enum_id =
0062             (bios_object_id & ENUM_ID_MASK) >> ENUM_ID_SHIFT;
0063     enum object_enum_id id;
0064 
0065     switch (bios_enum_id) {
0066     case GRAPH_OBJECT_ENUM_ID1:
0067         id = ENUM_ID_1;
0068         break;
0069     case GRAPH_OBJECT_ENUM_ID2:
0070         id = ENUM_ID_2;
0071         break;
0072     case GRAPH_OBJECT_ENUM_ID3:
0073         id = ENUM_ID_3;
0074         break;
0075     case GRAPH_OBJECT_ENUM_ID4:
0076         id = ENUM_ID_4;
0077         break;
0078     case GRAPH_OBJECT_ENUM_ID5:
0079         id = ENUM_ID_5;
0080         break;
0081     case GRAPH_OBJECT_ENUM_ID6:
0082         id = ENUM_ID_6;
0083         break;
0084     case GRAPH_OBJECT_ENUM_ID7:
0085         id = ENUM_ID_7;
0086         break;
0087     default:
0088         id = ENUM_ID_UNKNOWN;
0089         break;
0090     }
0091 
0092     return id;
0093 }
0094 
0095 static uint32_t gpu_id_from_bios_object_id(uint32_t bios_object_id)
0096 {
0097     return (bios_object_id & OBJECT_ID_MASK) >> OBJECT_ID_SHIFT;
0098 }
0099 
0100 static enum encoder_id encoder_id_from_bios_object_id(uint32_t bios_object_id)
0101 {
0102     uint32_t bios_encoder_id = gpu_id_from_bios_object_id(bios_object_id);
0103     enum encoder_id id;
0104 
0105     switch (bios_encoder_id) {
0106     case ENCODER_OBJECT_ID_INTERNAL_LVDS:
0107         id = ENCODER_ID_INTERNAL_LVDS;
0108         break;
0109     case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
0110         id = ENCODER_ID_INTERNAL_TMDS1;
0111         break;
0112     case ENCODER_OBJECT_ID_INTERNAL_TMDS2:
0113         id = ENCODER_ID_INTERNAL_TMDS2;
0114         break;
0115     case ENCODER_OBJECT_ID_INTERNAL_DAC1:
0116         id = ENCODER_ID_INTERNAL_DAC1;
0117         break;
0118     case ENCODER_OBJECT_ID_INTERNAL_DAC2:
0119         id = ENCODER_ID_INTERNAL_DAC2;
0120         break;
0121     case ENCODER_OBJECT_ID_INTERNAL_LVTM1:
0122         id = ENCODER_ID_INTERNAL_LVTM1;
0123         break;
0124     case ENCODER_OBJECT_ID_HDMI_INTERNAL:
0125         id = ENCODER_ID_INTERNAL_HDMI;
0126         break;
0127     case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
0128         id = ENCODER_ID_INTERNAL_KLDSCP_TMDS1;
0129         break;
0130     case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
0131         id = ENCODER_ID_INTERNAL_KLDSCP_DAC1;
0132         break;
0133     case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
0134         id = ENCODER_ID_INTERNAL_KLDSCP_DAC2;
0135         break;
0136     case ENCODER_OBJECT_ID_MVPU_FPGA:
0137         id = ENCODER_ID_EXTERNAL_MVPU_FPGA;
0138         break;
0139     case ENCODER_OBJECT_ID_INTERNAL_DDI:
0140         id = ENCODER_ID_INTERNAL_DDI;
0141         break;
0142     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
0143         id = ENCODER_ID_INTERNAL_UNIPHY;
0144         break;
0145     case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
0146         id = ENCODER_ID_INTERNAL_KLDSCP_LVTMA;
0147         break;
0148     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
0149         id = ENCODER_ID_INTERNAL_UNIPHY1;
0150         break;
0151     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
0152         id = ENCODER_ID_INTERNAL_UNIPHY2;
0153         break;
0154     case ENCODER_OBJECT_ID_ALMOND: /* ENCODER_OBJECT_ID_NUTMEG */
0155         id = ENCODER_ID_EXTERNAL_NUTMEG;
0156         break;
0157     case ENCODER_OBJECT_ID_TRAVIS:
0158         id = ENCODER_ID_EXTERNAL_TRAVIS;
0159         break;
0160     case ENCODER_OBJECT_ID_INTERNAL_UNIPHY3:
0161         id = ENCODER_ID_INTERNAL_UNIPHY3;
0162         break;
0163     default:
0164         id = ENCODER_ID_UNKNOWN;
0165         ASSERT(0);
0166         break;
0167     }
0168 
0169     return id;
0170 }
0171 
0172 static enum connector_id connector_id_from_bios_object_id(
0173     uint32_t bios_object_id)
0174 {
0175     uint32_t bios_connector_id = gpu_id_from_bios_object_id(bios_object_id);
0176 
0177     enum connector_id id;
0178 
0179     switch (bios_connector_id) {
0180     case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I:
0181         id = CONNECTOR_ID_SINGLE_LINK_DVII;
0182         break;
0183     case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I:
0184         id = CONNECTOR_ID_DUAL_LINK_DVII;
0185         break;
0186     case CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D:
0187         id = CONNECTOR_ID_SINGLE_LINK_DVID;
0188         break;
0189     case CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D:
0190         id = CONNECTOR_ID_DUAL_LINK_DVID;
0191         break;
0192     case CONNECTOR_OBJECT_ID_VGA:
0193         id = CONNECTOR_ID_VGA;
0194         break;
0195     case CONNECTOR_OBJECT_ID_HDMI_TYPE_A:
0196         id = CONNECTOR_ID_HDMI_TYPE_A;
0197         break;
0198     case CONNECTOR_OBJECT_ID_LVDS:
0199         id = CONNECTOR_ID_LVDS;
0200         break;
0201     case CONNECTOR_OBJECT_ID_PCIE_CONNECTOR:
0202         id = CONNECTOR_ID_PCIE;
0203         break;
0204     case CONNECTOR_OBJECT_ID_HARDCODE_DVI:
0205         id = CONNECTOR_ID_HARDCODE_DVI;
0206         break;
0207     case CONNECTOR_OBJECT_ID_DISPLAYPORT:
0208         id = CONNECTOR_ID_DISPLAY_PORT;
0209         break;
0210     case CONNECTOR_OBJECT_ID_eDP:
0211         id = CONNECTOR_ID_EDP;
0212         break;
0213     case CONNECTOR_OBJECT_ID_MXM:
0214         id = CONNECTOR_ID_MXM;
0215         break;
0216     case CONNECTOR_OBJECT_ID_USBC:
0217         id = CONNECTOR_ID_USBC;
0218         break;
0219     default:
0220         id = CONNECTOR_ID_UNKNOWN;
0221         break;
0222     }
0223 
0224     return id;
0225 }
0226 
0227 static enum generic_id generic_id_from_bios_object_id(uint32_t bios_object_id)
0228 {
0229     uint32_t bios_generic_id = gpu_id_from_bios_object_id(bios_object_id);
0230 
0231     enum generic_id id;
0232 
0233     switch (bios_generic_id) {
0234     case GENERIC_OBJECT_ID_MXM_OPM:
0235         id = GENERIC_ID_MXM_OPM;
0236         break;
0237     case GENERIC_OBJECT_ID_GLSYNC:
0238         id = GENERIC_ID_GLSYNC;
0239         break;
0240     case GENERIC_OBJECT_ID_STEREO_PIN:
0241         id = GENERIC_ID_STEREO;
0242         break;
0243     default:
0244         id = GENERIC_ID_UNKNOWN;
0245         break;
0246     }
0247 
0248     return id;
0249 }
0250 
0251 static uint32_t id_from_bios_object_id(enum object_type type,
0252     uint32_t bios_object_id)
0253 {
0254     switch (type) {
0255     case OBJECT_TYPE_GPU:
0256         return gpu_id_from_bios_object_id(bios_object_id);
0257     case OBJECT_TYPE_ENCODER:
0258         return (uint32_t)encoder_id_from_bios_object_id(bios_object_id);
0259     case OBJECT_TYPE_CONNECTOR:
0260         return (uint32_t)connector_id_from_bios_object_id(
0261                 bios_object_id);
0262     case OBJECT_TYPE_GENERIC:
0263         return generic_id_from_bios_object_id(bios_object_id);
0264     default:
0265         return 0;
0266     }
0267 }
0268 
0269 struct graphics_object_id object_id_from_bios_object_id(uint32_t bios_object_id)
0270 {
0271     enum object_type type;
0272     enum object_enum_id enum_id;
0273     struct graphics_object_id go_id = { 0 };
0274 
0275     type = object_type_from_bios_object_id(bios_object_id);
0276 
0277     if (OBJECT_TYPE_UNKNOWN == type)
0278         return go_id;
0279 
0280     enum_id = enum_id_from_bios_object_id(bios_object_id);
0281 
0282     if (ENUM_ID_UNKNOWN == enum_id)
0283         return go_id;
0284 
0285     go_id = dal_graphics_object_id_init(
0286             id_from_bios_object_id(type, bios_object_id), enum_id, type);
0287 
0288     return go_id;
0289 }
0290 
0291