1 /* 2 * SPDX-FileCopyrightText: Copyright (c) 2013-2015 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 3 * SPDX-License-Identifier: MIT 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included in 13 * all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24 #ifndef __NVKMS_HDMI_H__ 25 #define __NVKMS_HDMI_H__ 26 27 #ifdef __cplusplus 28 extern "C" { 29 #endif 30 31 #include "nvkms-types.h" 32 33 void nvUpdateHdmiInfoFrames(const NVDispEvoRec *pDispEvo, 34 const NvU32 head, 35 const NVAttributesSetEvoRec *pAttributesSet, 36 const NVDispHeadInfoFrameStateEvoRec *pInfoFrameState, 37 NVDpyEvoRec *pDpyEvo); 38 39 void nvDpyUpdateHdmiPreModesetEvo(NVDpyEvoPtr pDpyEvo); 40 void nvDpyUpdateHdmiVRRCaps(NVDpyEvoPtr pDpyEvo); 41 void nvUpdateHdmiCaps(NVDpyEvoPtr pDpyEvo); 42 43 void nvLogEdidCea861InfoEvo(NVDpyEvoPtr pDpyEvo, 44 NVEvoInfoStringPtr pInfoString); 45 NvBool nvDpyIsHdmiEvo(const NVDpyEvoRec *pDpyEvo); 46 47 NvBool nvHdmi204k60HzRGB444Allowed(const NVDpyEvoRec *pDpyEvo, 48 const struct NvKmsModeValidationParams *pParams, 49 const NVT_TIMING *pTiming); 50 51 void nvHdmiDpEnableDisableAudio(const NVDispEvoRec *pDispEvo, 52 const NvU32 head, const NvBool enable); 53 54 void nvRemoveUnusedHdmiDpAudioDevice(const NVDispEvoRec *pDispEvo); 55 56 void nvHdmiSetVRR(NVDispEvoPtr pDispEvo, NvU32 head, NvBool enable); 57 58 NvBool nvInitHdmiLibrary(NVDevEvoRec *pDevEvo); 59 void nvTeardownHdmiLibrary(NVDevEvoRec *pDevEvo); 60 61 NvBool nvHdmiFrlAssessLink(NVDpyEvoPtr pDpyEvo); 62 NvBool nvHdmiDpySupportsFrl(const NVDpyEvoRec *pDpyEvo); 63 NvBool nvHdmiFrlQueryConfig(const NVDpyEvoRec *pDpyEvo, 64 const NvModeTimings *pModeTimings, 65 const NVHwModeTimingsEvo *pHwTimings, 66 const NvBool b2Heads1Or, 67 const struct NvKmsModeValidationParams *pValidationParams, 68 HDMI_FRL_CONFIG *pConfig, 69 NVDscInfoEvoRec *pDscInfo); 70 void nvHdmiFrlClearConfig(NVDispEvoRec *pDispEvo, NvU32 activeRmId); 71 void nvHdmiFrlSetConfig(NVDispEvoRec *pDispEvo, NvU32 head); 72 73 void nvHdmiDpConstructHeadAudioState(const NvU32 displayId, 74 const NVDpyEvoRec *pDpyEvo, 75 NVDispHeadAudioStateEvoRec *pAudioState); 76 77 NvBool nvHdmiTimingsNeedFrl(const NVDpyEvoRec *pDpyEvo, 78 const NVHwModeTimingsEvo *pHwTimings); 79 80 static inline NvBool nvHdmiDpySupportsDsc(const NVDpyEvoRec *pDpyEvo) 81 { 82 return nvDpyIsHdmiEvo(pDpyEvo) && 83 pDpyEvo->parsedEdid.valid && 84 pDpyEvo->parsedEdid.info.hdmiForumInfo.dsc_1p2; 85 } 86 87 #ifdef __cplusplus 88 }; 89 #endif 90 91 #endif /* __NVKMS_HDMI_H__ */ 92