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