11739a20eSAndy Ritger /*
21739a20eSAndy Ritger  * SPDX-FileCopyrightText: Copyright (c) 2013-2015 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
31739a20eSAndy Ritger  * SPDX-License-Identifier: MIT
41739a20eSAndy Ritger  *
51739a20eSAndy Ritger  * Permission is hereby granted, free of charge, to any person obtaining a
61739a20eSAndy Ritger  * copy of this software and associated documentation files (the "Software"),
71739a20eSAndy Ritger  * to deal in the Software without restriction, including without limitation
81739a20eSAndy Ritger  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
91739a20eSAndy Ritger  * and/or sell copies of the Software, and to permit persons to whom the
101739a20eSAndy Ritger  * Software is furnished to do so, subject to the following conditions:
111739a20eSAndy Ritger  *
121739a20eSAndy Ritger  * The above copyright notice and this permission notice shall be included in
131739a20eSAndy Ritger  * all copies or substantial portions of the Software.
141739a20eSAndy Ritger  *
151739a20eSAndy Ritger  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
161739a20eSAndy Ritger  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
171739a20eSAndy Ritger  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
181739a20eSAndy Ritger  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
191739a20eSAndy Ritger  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
201739a20eSAndy Ritger  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
211739a20eSAndy Ritger  * DEALINGS IN THE SOFTWARE.
221739a20eSAndy Ritger  */
231739a20eSAndy Ritger 
241739a20eSAndy Ritger #ifndef __NVKMS_H__
251739a20eSAndy Ritger #define __NVKMS_H__
261739a20eSAndy Ritger 
271739a20eSAndy Ritger #include "nvkms-types.h"
281739a20eSAndy Ritger #include "nvkms-api.h"
291739a20eSAndy Ritger 
301739a20eSAndy Ritger #ifdef __cplusplus
311739a20eSAndy Ritger extern "C" {
321739a20eSAndy Ritger #endif
331739a20eSAndy Ritger 
341739a20eSAndy Ritger extern NVEvoInfoStringRec dummyInfoString;
351739a20eSAndy Ritger 
361739a20eSAndy Ritger NVDevEvoPtr nvFindDevEvoByDeviceId(NvU32 deviceId);
371739a20eSAndy Ritger NvU8 nvGetGpuLogIndex(void);
381739a20eSAndy Ritger void nvEvoDetachConnector(NVConnectorEvoRec *pConnectorEvo, const NvU32 head,
391739a20eSAndy Ritger                           NVEvoModesetUpdateState *pModesetUpdateState);
401739a20eSAndy Ritger void nvEvoAttachConnector(NVConnectorEvoRec *pConnectorEvo,
411739a20eSAndy Ritger                           const NvU32 head,
42eb5c7665SAndy Ritger                           const NvU32 isPrimaryHead,
431739a20eSAndy Ritger                           NVDPLibModesetStatePtr pDpLibModesetState,
441739a20eSAndy Ritger                           NVEvoModesetUpdateState *pModesetUpdateState);
451739a20eSAndy Ritger void nvEvoUpdateAndKickOff(const NVDispEvoRec *pDispEvo, NvBool sync,
461739a20eSAndy Ritger                            NVEvoUpdateState *updateState, NvBool releaseElv);
471739a20eSAndy Ritger void nvDoIMPUpdateEvo(NVDispEvoPtr pDispEvo,
481739a20eSAndy Ritger                       NVEvoUpdateState *updateState);
49b5bf85a8SAndy Ritger void nvEvoFlipUpdate(NVDispEvoPtr pDispEvo,
50b5bf85a8SAndy Ritger                      NVEvoUpdateState *updateState);
511739a20eSAndy Ritger void nvEvoArmLightweightSupervisor(NVDispEvoPtr pDispEvo,
521739a20eSAndy Ritger                                    const NvU32 head,
531739a20eSAndy Ritger                                    NvBool isVrr,
541739a20eSAndy Ritger                                    NvBool enable);
551739a20eSAndy Ritger 
561739a20eSAndy Ritger void nvSetViewPortsEvo(NVDispEvoPtr pDispEvo,
571739a20eSAndy Ritger                        const NvU32 head, NVEvoUpdateState *updateState);
581739a20eSAndy Ritger void nvSetViewPortPointInEvo(NVDispEvoPtr pDispEvo,
591739a20eSAndy Ritger                              const NvU32 head,
601739a20eSAndy Ritger                              const NvU16 x,
611739a20eSAndy Ritger                              NvU16 y,
621739a20eSAndy Ritger                              NVEvoUpdateState *updateState);
631739a20eSAndy Ritger void
641739a20eSAndy Ritger nvConstructNvModeTimingsFromHwModeTimings(const NVHwModeTimingsEvo *pTimings,
651739a20eSAndy Ritger                                           NvModeTimingsPtr pModeTimings);
661739a20eSAndy Ritger void nvEvoSetTimings(NVDispEvoPtr pDispEvo, const NvU32 head,
671739a20eSAndy Ritger                      NVEvoUpdateState *updateState);
681739a20eSAndy Ritger void nvInitScalingUsageBounds(const NVDevEvoRec *pDevEvo,
691739a20eSAndy Ritger                               struct NvKmsScalingUsageBounds *pScaling);
701739a20eSAndy Ritger NvBool nvComputeScalingUsageBounds(const NVEvoScalerCaps *pScalerCaps,
711739a20eSAndy Ritger                                    const NvU32 inWidth, const NvU32 inHeight,
721739a20eSAndy Ritger                                    const NvU32 outWidth, const NvU32 outHeight,
731739a20eSAndy Ritger                                    NVEvoScalerTaps hTaps, NVEvoScalerTaps vTaps,
741739a20eSAndy Ritger                                    struct NvKmsScalingUsageBounds *out);
751739a20eSAndy Ritger NvBool nvAssignScalerTaps(const NVDevEvoRec *pDevEvo,
761739a20eSAndy Ritger                           const NVEvoScalerCaps *pScalerCaps,
771739a20eSAndy Ritger                           const NvU32 inWidth, const NvU32 inHeight,
781739a20eSAndy Ritger                           const NvU32 outWidth, const NvU32 outHeight,
791739a20eSAndy Ritger                           NvBool doubleScan,
801739a20eSAndy Ritger                           NVEvoScalerTaps *hTapsOut, NVEvoScalerTaps *vTapsOut);
811739a20eSAndy Ritger NvBool nvValidateHwModeTimingsViewPort(const NVDevEvoRec *pDevEvo,
821739a20eSAndy Ritger                                        const NVEvoScalerCaps *pScalerCaps,
831739a20eSAndy Ritger                                        NVHwModeTimingsEvoPtr pTimings,
841739a20eSAndy Ritger                                        NVEvoInfoStringPtr pInfoString);
851739a20eSAndy Ritger void nvAssignDefaultUsageBounds(const NVDispEvoRec *pDispEvo,
861739a20eSAndy Ritger                                 NVHwModeViewPortEvo *pViewPort);
87758b4ee8SAndy Ritger void nvUnionUsageBounds(const struct NvKmsUsageBounds *a,
88758b4ee8SAndy Ritger                         const struct NvKmsUsageBounds *b,
89758b4ee8SAndy Ritger                         struct NvKmsUsageBounds *ret);
90eb5c7665SAndy Ritger void nvIntersectUsageBounds(const struct NvKmsUsageBounds *a,
91eb5c7665SAndy Ritger                             const struct NvKmsUsageBounds *b,
92eb5c7665SAndy Ritger                             struct NvKmsUsageBounds *ret);
931739a20eSAndy Ritger NvBool UsageBoundsEqual(const struct NvKmsUsageBounds *a,
941739a20eSAndy Ritger                         const struct NvKmsUsageBounds *b);
951739a20eSAndy Ritger NvU64 nvEvoGetFormatsWithEqualOrLowerUsageBound(
961739a20eSAndy Ritger     const enum NvKmsSurfaceMemoryFormat format,
971739a20eSAndy Ritger     const NvU64 supportedFormatsCapMask);
981739a20eSAndy Ritger void nvCancelLowerDispBandwidthTimer(NVDevEvoPtr pDevEvo);
991739a20eSAndy Ritger void nvScheduleLowerDispBandwidthTimer(NVDevEvoPtr pDevEvo);
1001739a20eSAndy Ritger void nvAssertAllDpysAreInactive(NVDevEvoPtr pDevEvo);
101b5bf85a8SAndy Ritger void nvEvoLockStatePreModeset(NVDevEvoPtr pDevEvo);
1021739a20eSAndy Ritger void nvEvoLockStatePostModeset(NVDevEvoPtr pDevEvo, const NvBool doRasterLock);
103b5bf85a8SAndy Ritger NvBool nvSetFlipLockGroup(NVDevEvoRec *pDevEvo[NV_MAX_SUBDEVICES],
104b5bf85a8SAndy Ritger                           const struct NvKmsSetFlipLockGroupRequest *pRequest);
105b5bf85a8SAndy Ritger void nvEvoRemoveOverlappingFlipLockRequestGroupsForModeset(
106b5bf85a8SAndy Ritger     NVDevEvoPtr pDevEvo,
107b5bf85a8SAndy Ritger     const struct NvKmsSetModeRequest *pRequest);
1081739a20eSAndy Ritger NvBool nvSetUsageBoundsEvo(
1091739a20eSAndy Ritger     NVDevEvoPtr pDevEvo,
1101739a20eSAndy Ritger     NvU32 sd,
1111739a20eSAndy Ritger     NvU32 head,
1121739a20eSAndy Ritger     const struct NvKmsUsageBounds *pUsage,
1131739a20eSAndy Ritger     NVEvoUpdateState *updateState);
1141739a20eSAndy Ritger void nvEnableMidFrameAndDWCFWatermark(NVDevEvoPtr pDevEvo,
1151739a20eSAndy Ritger                                       NvU32 sd,
1161739a20eSAndy Ritger                                       NvU32 head,
1171739a20eSAndy Ritger                                       NvBool enable,
1181739a20eSAndy Ritger                                       NVEvoUpdateState *pUpdateState);
1191739a20eSAndy Ritger 
1201739a20eSAndy Ritger void nvEvoHeadSetControlOR(NVDispEvoPtr pDispEvo,
1211739a20eSAndy Ritger                            const NvU32 head, NVEvoUpdateState *pUpdateState);
1221739a20eSAndy Ritger 
123758b4ee8SAndy Ritger void nvChooseDitheringEvo(
124758b4ee8SAndy Ritger     const NVConnectorEvoRec *pConnectorEvo,
1254397463eSAndy Ritger     enum NvKmsDpyAttributeColorBpcValue bpc,
126758b4ee8SAndy Ritger     const NVDpyAttributeRequestedDitheringConfig *pReqDithering,
127758b4ee8SAndy Ritger     NVDpyAttributeCurrentDitheringConfig *pCurrDithering);
128758b4ee8SAndy Ritger 
1291739a20eSAndy Ritger void nvSetDitheringEvo(
130758b4ee8SAndy Ritger     NVDispEvoPtr pDispEvo,
131758b4ee8SAndy Ritger     const NvU32 head,
132758b4ee8SAndy Ritger     const NVDpyAttributeCurrentDitheringConfig *pCurrDithering,
1331739a20eSAndy Ritger     NVEvoUpdateState *pUpdateState);
1341739a20eSAndy Ritger 
1351739a20eSAndy Ritger NvBool nvEnableFrameLockEvo(NVDispEvoPtr pDispEvo);
1361739a20eSAndy Ritger NvBool nvDisableFrameLockEvo(NVDispEvoPtr pDispEvo);
1371739a20eSAndy Ritger NvBool nvQueryRasterLockEvo(const NVDpyEvoRec *pDpyEvo, NvS64 *val);
138b5bf85a8SAndy Ritger void   nvInvalidateRasterLockGroupsEvo(void);
1391739a20eSAndy Ritger NvBool nvSetFlipLockEvo(NVDpyEvoPtr pDpyEvo, NvS64 value);
1401739a20eSAndy Ritger NvBool nvGetFlipLockEvo(const NVDpyEvoRec *pDpyEvo, NvS64 *pValue);
1411739a20eSAndy Ritger NvBool nvAllowFlipLockEvo(NVDispEvoPtr pDispEvo, NvS64 value);
1421739a20eSAndy Ritger NvBool nvSetStereoEvo(const NVDispEvoRec *pDispEvo,
1431739a20eSAndy Ritger                       const NvU32 head, NvBool enable);
1441739a20eSAndy Ritger NvBool nvGetStereoEvo(const NVDispEvoRec *pDispEvo, const NvU32 head);
145758b4ee8SAndy Ritger struct NvKmsCompositionParams nvDefaultCursorCompositionParams(const NVDevEvoRec *pDevEvo);
1461739a20eSAndy Ritger NvBool nvAllocCoreChannelEvo(NVDevEvoPtr pDevEvo);
1471739a20eSAndy Ritger void nvFreeCoreChannelEvo(NVDevEvoPtr pDevEvo);
1481739a20eSAndy Ritger 
1491739a20eSAndy Ritger void nvEvoUpdateSliVideoBridge(NVDevEvoPtr pDevEvo);
1501739a20eSAndy Ritger 
1511739a20eSAndy Ritger void nvSetDVCEvo(NVDispEvoPtr pDispEvo,
1521739a20eSAndy Ritger                  const NvU32 head,
1531739a20eSAndy Ritger                  NvS32 dvc,
1541739a20eSAndy Ritger                  NVEvoUpdateState *updateState);
1551739a20eSAndy Ritger void nvSetImageSharpeningEvo(NVDispEvoRec *pDispEvo, const NvU32 head,
1561739a20eSAndy Ritger                              const NvU32 value, NVEvoUpdateState *updateState);
1571739a20eSAndy Ritger 
1581739a20eSAndy Ritger NvBool nvLayerSetPositionEvo(
1591739a20eSAndy Ritger     NVDevEvoPtr pDevEvo,
1601739a20eSAndy Ritger     const struct NvKmsSetLayerPositionRequest *pRequest);
1611739a20eSAndy Ritger 
1621739a20eSAndy Ritger NvBool nvConstructHwModeTimingsEvo(const NVDpyEvoRec *pDpyEvo,
1631739a20eSAndy Ritger                                    const struct NvKmsMode *pKmsMode,
1641739a20eSAndy Ritger                                    const struct NvKmsSize *pViewPortSizeIn,
1651739a20eSAndy Ritger                                    const struct NvKmsRect *pViewPortOut,
1661739a20eSAndy Ritger                                    NVHwModeTimingsEvoPtr pTimings,
1671739a20eSAndy Ritger                                    const struct NvKmsModeValidationParams
1681739a20eSAndy Ritger                                    *pParams,
1691739a20eSAndy Ritger                                    NVEvoInfoStringPtr pInfoString);
1701739a20eSAndy Ritger 
1711739a20eSAndy Ritger NvBool nvConstructHwModeTimingsImpCheckEvo(
1721739a20eSAndy Ritger     const NVConnectorEvoRec                *pConnectorEvo,
173eb5c7665SAndy Ritger     const NVHwModeTimingsEvo               *pTimings,
174eb5c7665SAndy Ritger     const NvBool                            enableDsc,
175eb5c7665SAndy Ritger     const NvBool                            b2Heads1Or,
1764397463eSAndy Ritger     const enum NvKmsDpyAttributeCurrentColorSpaceValue colorSpace,
1774397463eSAndy Ritger     const enum NvKmsDpyAttributeColorBpcValue colorBpc,
1781739a20eSAndy Ritger     const struct NvKmsModeValidationParams *pParams,
179eb5c7665SAndy Ritger     NVHwModeTimingsEvo                      timings[NVKMS_MAX_HEADS_PER_DISP],
180eb5c7665SAndy Ritger     NvU32                                  *pNumHeads,
181eb5c7665SAndy Ritger     NVEvoInfoStringPtr                      pInfoString);
1821739a20eSAndy Ritger 
1834397463eSAndy Ritger NvBool nvDowngradeColorSpaceAndBpc(
1844397463eSAndy Ritger     const NVColorFormatInfoRec *pSupportedColorFormats,
1854397463eSAndy Ritger     enum NvKmsDpyAttributeCurrentColorSpaceValue *pColorSpace,
1864397463eSAndy Ritger     enum NvKmsDpyAttributeColorBpcValue *pColorBpc,
1874397463eSAndy Ritger     enum NvKmsDpyAttributeColorRangeValue *pColorRange);
1881739a20eSAndy Ritger 
1891739a20eSAndy Ritger NvBool nvDPValidateModeEvo(NVDpyEvoPtr pDpyEvo,
1901739a20eSAndy Ritger                            NVHwModeTimingsEvoPtr pTimings,
191*91676d66SBernhard Stoeckner                            enum NvKmsDpyAttributeCurrentColorSpaceValue *pColorSpace,
192*91676d66SBernhard Stoeckner                            enum NvKmsDpyAttributeColorBpcValue *pColorBpc,
193eb5c7665SAndy Ritger                            const NvBool b2Heads1Or,
194eb5c7665SAndy Ritger                            NVDscInfoEvoRec *pDscInfo,
1951739a20eSAndy Ritger                            const struct NvKmsModeValidationParams *pParams);
1961739a20eSAndy Ritger 
1971739a20eSAndy Ritger NvBool nvEvoUpdateHwModeTimingsViewPort(
1981739a20eSAndy Ritger     const NVDpyEvoRec *pDpyEvo,
1991739a20eSAndy Ritger     const struct NvKmsModeValidationParams *pModeValidationParams,
2001739a20eSAndy Ritger     const struct NvKmsSize *pViewPortSizeIn,
2011739a20eSAndy Ritger     const struct NvKmsRect *pViewPortOut,
2021739a20eSAndy Ritger     NVHwModeTimingsEvo *pTimings);
2031739a20eSAndy Ritger 
2041739a20eSAndy Ritger typedef struct _NVValidateImpOneDispHeadParamsRec
2051739a20eSAndy Ritger {
2061739a20eSAndy Ritger     const NVConnectorEvoRec *pConnectorEvo;
2071739a20eSAndy Ritger     const struct NvKmsUsageBounds *pUsage;
2081739a20eSAndy Ritger     NvU32                 activeRmId;
2094397463eSAndy Ritger     enum nvKmsPixelDepth  pixelDepth;
2101739a20eSAndy Ritger     NVHwModeTimingsEvoPtr pTimings;
211eb5c7665SAndy Ritger     NvBool enableDsc;
212eb5c7665SAndy Ritger     NvBool b2Heads1Or;
2131739a20eSAndy Ritger } NVValidateImpOneDispHeadParamsRec;
2141739a20eSAndy Ritger 
2151739a20eSAndy Ritger NvBool nvValidateImpOneDisp(
2161739a20eSAndy Ritger     NVDispEvoPtr                            pDispEvo,
2171739a20eSAndy Ritger     const NVValidateImpOneDispHeadParamsRec timingsParams[NVKMS_MAX_HEADS_PER_DISP],
2181739a20eSAndy Ritger     NvBool                                  requireBootClocks,
2191739a20eSAndy Ritger     NVEvoReallocateBandwidthMode            reallocBandwidth,
2201739a20eSAndy Ritger     NvU32                                   *pMinIsoBandwidthKBPS,
2211739a20eSAndy Ritger     NvU32                                   *pMinDramFloorKBPS);
2221739a20eSAndy Ritger 
2231739a20eSAndy Ritger NvBool nvAllocateDisplayBandwidth(
2241739a20eSAndy Ritger     NVDispEvoPtr pDispEvo,
2251739a20eSAndy Ritger     NvU32 newIsoBandwidthKBPS,
2261739a20eSAndy Ritger     NvU32 newDramFloorKBPS);
2271739a20eSAndy Ritger 
2281739a20eSAndy Ritger NvBool nvValidateImpOneDispDowngrade(
2291739a20eSAndy Ritger     NVDispEvoPtr                            pDispEvo,
2301739a20eSAndy Ritger     const NVValidateImpOneDispHeadParamsRec timingsParams[NVKMS_MAX_HEADS_PER_DISP],
2311739a20eSAndy Ritger     NvBool                                  requireBootClocks,
2321739a20eSAndy Ritger     NVEvoReallocateBandwidthMode            reallocBandwidth,
2331739a20eSAndy Ritger     NvU32                                   downgradePossibleHeadsBitMask);
2341739a20eSAndy Ritger 
2351739a20eSAndy Ritger NvBool nvFrameLockServerPossibleEvo(const NVDpyEvoRec *pDpyEvo);
2361739a20eSAndy Ritger NvBool nvFrameLockClientPossibleEvo(const NVDpyEvoRec *pDpyEvo);
2371739a20eSAndy Ritger 
238b5bf85a8SAndy Ritger NvBool nvEvoLUTNotifiersNeedCommit(NVDispEvoPtr pDispEvo);
239b5bf85a8SAndy Ritger int nvEvoCommitLUTNotifiers(NVDispEvoPtr pDispEvo);
240b5bf85a8SAndy Ritger void nvEvoClearStagedLUTNotifiers(NVDispEvoPtr pDispEvo);
241b5bf85a8SAndy Ritger void nvEvoStageLUTNotifier(NVDispEvoPtr pDispEvo, NvU32 apiHead);
242b5bf85a8SAndy Ritger NvBool nvEvoIsLUTNotifierComplete(NVDispEvoPtr pDispEvo, NvU32 apiHead);
243b5bf85a8SAndy Ritger void nvEvoWaitForLUTNotifier(const NVDispEvoPtr pDispEvo, NvU32 apiHead);
244b5bf85a8SAndy Ritger 
2454397463eSAndy Ritger void nvEvoSetLut(NVDispEvoPtr pDispEvo, NvU32 apiHead, NvBool kickoff,
2461739a20eSAndy Ritger                  const struct NvKmsSetLutCommonParams *pParams);
2471739a20eSAndy Ritger NvBool nvValidateSetLutCommonParams(
2481739a20eSAndy Ritger     const NVDevEvoRec *pDevEvo,
2491739a20eSAndy Ritger     const struct NvKmsSetLutCommonParams *pParams);
2501739a20eSAndy Ritger 
25126458140SAndy Ritger NvBool nvChooseColorRangeEvo(
252b5bf85a8SAndy Ritger     enum NvKmsOutputColorimetry colorimetry,
25326458140SAndy Ritger     const enum NvKmsDpyAttributeColorRangeValue requestedColorRange,
25426458140SAndy Ritger     const enum NvKmsDpyAttributeCurrentColorSpaceValue colorSpace,
25526458140SAndy Ritger     const enum NvKmsDpyAttributeColorBpcValue colorBpc,
25626458140SAndy Ritger     enum NvKmsDpyAttributeColorRangeValue *pColorRange);
25726458140SAndy Ritger 
2584397463eSAndy Ritger NvBool nvChooseCurrentColorSpaceAndRangeEvo(
2594397463eSAndy Ritger     const NVDpyEvoRec *pDpyEvo,
260b5bf85a8SAndy Ritger     const NVHwModeTimingsEvo *pHwTimings,
261b5bf85a8SAndy Ritger     NvU8 hdmiFrlBpc,
262b5bf85a8SAndy Ritger     enum NvKmsOutputColorimetry colorimetry,
2631739a20eSAndy Ritger     const enum NvKmsDpyAttributeRequestedColorSpaceValue requestedColorSpace,
2641739a20eSAndy Ritger     const enum NvKmsDpyAttributeColorRangeValue requestedColorRange,
2651739a20eSAndy Ritger     enum NvKmsDpyAttributeCurrentColorSpaceValue *pCurrentColorSpace,
2664397463eSAndy Ritger     enum NvKmsDpyAttributeColorBpcValue *pCurrentColorBpc,
2671739a20eSAndy Ritger     enum NvKmsDpyAttributeColorRangeValue *pCurrentColorRange);
2681739a20eSAndy Ritger 
2691739a20eSAndy Ritger void nvUpdateCurrentHardwareColorSpaceAndRangeEvo(
2701739a20eSAndy Ritger     NVDispEvoPtr pDispEvo,
2711739a20eSAndy Ritger     const NvU32 head,
272b5bf85a8SAndy Ritger     const enum NvKmsOutputColorimetry colorimetry,
27390eb1077SAndy Ritger     const enum NvKmsDpyAttributeCurrentColorSpaceValue colorSpace,
27490eb1077SAndy Ritger     const enum NvKmsDpyAttributeColorRangeValue colorRange,
2751739a20eSAndy Ritger     NVEvoUpdateState *pUpdateState);
2761739a20eSAndy Ritger 
277eb5c7665SAndy Ritger NvBool nvAssignSOREvo(const NVDispEvoRec *pDispEvo, const NvU32 displayId,
278eb5c7665SAndy Ritger                       const NvBool b2Heads1Or, const NvU32 sorExcludeMask);
2791739a20eSAndy Ritger 
2801739a20eSAndy Ritger void nvSetSwapBarrierNotifyEvo(NVDispEvoPtr pDispEvo,
2811739a20eSAndy Ritger                                NvBool enable, NvBool isPre);
2821739a20eSAndy Ritger 
2831739a20eSAndy Ritger void nvUnbloatHwModeTimingsEvo(NVHwModeTimingsEvoPtr pTimings, NvU32 factor);
2841739a20eSAndy Ritger 
2851739a20eSAndy Ritger NvBool nvReadCRC32Evo(NVDispEvoPtr pDispEvo, NvU32 head,
2861739a20eSAndy Ritger                       CRC32NotifierCrcOut *crcOut /* out */);
2871739a20eSAndy Ritger 
2881739a20eSAndy Ritger NvBool nvFreeDevEvo(NVDevEvoPtr pDevEvo);
2891739a20eSAndy Ritger NVDevEvoPtr nvAllocDevEvo(const struct NvKmsAllocDeviceRequest *pRequest,
2901739a20eSAndy Ritger                           enum NvKmsAllocDeviceStatus *pStatus);
2911739a20eSAndy Ritger NvU32 nvGetActiveSorMask(const NVDispEvoRec *pDispEvo);
2921739a20eSAndy Ritger NvBool nvUpdateFlipLockEvoOneHead(NVDispEvoPtr pDispEvo, const NvU32 head,
2931739a20eSAndy Ritger                                   NvU32 *val, NvBool set,
2941739a20eSAndy Ritger                                   NVEvoUpdateState *updateState);
2951739a20eSAndy Ritger 
2964397463eSAndy Ritger void nvEvoSetLUTContextDma(NVDispEvoPtr pDispEvo,
2974397463eSAndy Ritger                            const NvU32 head, NVEvoUpdateState *pUpdateState);
2981739a20eSAndy Ritger 
2991739a20eSAndy Ritger NvBool nvEvoPollForNoMethodPending(NVDevEvoPtr pDevEvo,
3001739a20eSAndy Ritger                                    const NvU32 sd,
3011739a20eSAndy Ritger                                    NVEvoChannelPtr pChannel,
3021739a20eSAndy Ritger                                    NvU64 *pStartTime,
3031739a20eSAndy Ritger                                    const NvU32 timeout);
3041739a20eSAndy Ritger 
nvAssertSameSemaphoreSurface(const NVFlipChannelEvoHwState * pHwState)3051739a20eSAndy Ritger static inline void nvAssertSameSemaphoreSurface(
3061739a20eSAndy Ritger     const NVFlipChannelEvoHwState *pHwState)
3071739a20eSAndy Ritger {
3081739a20eSAndy Ritger 
3091739a20eSAndy Ritger     /*!
3101739a20eSAndy Ritger      * pHwState->syncObject contains separate fields to track the semaphore
3111739a20eSAndy Ritger      * surface used for acquire, and the semaphore surface used for release.
3121739a20eSAndy Ritger      * Prior to NvDisplay 4.0, display HW only supports using a single semaphore
3131739a20eSAndy Ritger      * surface for both acquire and release. As such, assert that the semaphore
3141739a20eSAndy Ritger      * surfaces in pHwState->syncObject are the same, and that we're also not
3151739a20eSAndy Ritger      * using syncpoints. This is enforced during flip validation.
3161739a20eSAndy Ritger      */
3171739a20eSAndy Ritger 
3181739a20eSAndy Ritger     nvAssert(pHwState->syncObject.u.semaphores.acquireSurface.pSurfaceEvo ==
3191739a20eSAndy Ritger              pHwState->syncObject.u.semaphores.releaseSurface.pSurfaceEvo);
3201739a20eSAndy Ritger 
3211739a20eSAndy Ritger     nvAssert(!pHwState->syncObject.usingSyncpt);
3221739a20eSAndy Ritger }
3231739a20eSAndy Ritger 
3241739a20eSAndy Ritger void nvDPSerializerHandleDPIRQ(NVDispEvoPtr pDispEvo,
3251739a20eSAndy Ritger                                NVConnectorEvoPtr pConnectorEvo);
3261739a20eSAndy Ritger 
3271739a20eSAndy Ritger void nvDPSerializerPreSetMode(NVDispEvoPtr pDispEvo,
3281739a20eSAndy Ritger                               NVConnectorEvoPtr pConnectorEvo);
3291739a20eSAndy Ritger 
3301739a20eSAndy Ritger void nvDPSerializerPostSetMode(NVDispEvoPtr pDispEvo,
3311739a20eSAndy Ritger                                NVConnectorEvoPtr pConnectorEvo);
3321739a20eSAndy Ritger 
3331739a20eSAndy Ritger NvBool nvFramelockSetControlUnsyncEvo(NVDispEvoPtr pDispEvo, const NvU32 headMask,
3341739a20eSAndy Ritger                                       NvBool server);
3351739a20eSAndy Ritger 
336758b4ee8SAndy Ritger NvU32 nvGetHDRSrcMaxLum(const NVFlipChannelEvoHwState *pHwState);
337758b4ee8SAndy Ritger 
338758b4ee8SAndy Ritger NvBool nvNeedsTmoLut(NVDevEvoPtr pDevEvo,
339758b4ee8SAndy Ritger                      NVEvoChannelPtr pChannel,
340758b4ee8SAndy Ritger                      const NVFlipChannelEvoHwState *pHwState,
341758b4ee8SAndy Ritger                      NvU32 srcMaxLum,
342758b4ee8SAndy Ritger                      NvU32 targetMaxCLL);
343758b4ee8SAndy Ritger 
344758b4ee8SAndy Ritger NvBool nvIsCscMatrixIdentity(const struct NvKmsCscMatrix *matrix);
345758b4ee8SAndy Ritger 
3464397463eSAndy Ritger enum nvKmsPixelDepth nvEvoColorSpaceBpcToPixelDepth(
3474397463eSAndy Ritger     const enum NvKmsDpyAttributeCurrentColorSpaceValue colorSpace,
3484397463eSAndy Ritger     const enum NvKmsDpyAttributeColorBpcValue colorBpc);
3494397463eSAndy Ritger 
3505f40a5aeSAndy Ritger void nvSuspendDevEvo(NVDevEvoRec *pDevEvo);
3515f40a5aeSAndy Ritger NvBool nvResumeDevEvo(NVDevEvoRec *pDevEvo);
3525f40a5aeSAndy Ritger 
3534397463eSAndy Ritger NvBool nvGetDefaultColorSpace(
3544397463eSAndy Ritger     const NVColorFormatInfoRec *pColorFormatsInfo,
3554397463eSAndy Ritger     enum NvKmsDpyAttributeCurrentColorSpaceValue *pColorSpace,
3564397463eSAndy Ritger     enum NvKmsDpyAttributeColorBpcValue *pColorBpc);
3574397463eSAndy Ritger 
nvEvoSetFlipOccurredEvent(const NVDispEvoRec * pDispEvo,const NvU32 head,const NvU32 layer,struct nvkms_ref_ptr * ref_ptr,NVEvoModesetUpdateState * pModesetUpdate)358eb5c7665SAndy Ritger static inline void nvEvoSetFlipOccurredEvent(const NVDispEvoRec *pDispEvo,
359eb5c7665SAndy Ritger                                              const NvU32 head,
360eb5c7665SAndy Ritger                                              const NvU32 layer,
361eb5c7665SAndy Ritger                                              struct nvkms_ref_ptr *ref_ptr,
362eb5c7665SAndy Ritger                                              NVEvoModesetUpdateState
363eb5c7665SAndy Ritger                                                 *pModesetUpdate)
364eb5c7665SAndy Ritger {
365eb5c7665SAndy Ritger     nvAssert((head < pDispEvo->pDevEvo->numHeads) &&
366eb5c7665SAndy Ritger                 (layer < pDispEvo->pDevEvo->head[head].numLayers));
367eb5c7665SAndy Ritger     pModesetUpdate->flipOccurredEvent[head].layer[layer].ref_ptr = ref_ptr;
368eb5c7665SAndy Ritger     pModesetUpdate->flipOccurredEvent[head].layer[layer].changed = TRUE;
369eb5c7665SAndy Ritger }
370eb5c7665SAndy Ritger 
371eb5c7665SAndy Ritger void nvEvoPreModesetRegisterFlipOccurredEvent(NVDispEvoRec *pDispEvo,
372eb5c7665SAndy Ritger                                               const NvU32 head,
373eb5c7665SAndy Ritger                                               const NVEvoModesetUpdateState
374eb5c7665SAndy Ritger                                                     *pModesetUpdate);
375eb5c7665SAndy Ritger 
376eb5c7665SAndy Ritger void nvEvoPostModesetUnregisterFlipOccurredEvent(NVDispEvoRec *pDispEvo,
377eb5c7665SAndy Ritger                                                  const NvU32 head,
378eb5c7665SAndy Ritger                                                  const NVEvoModesetUpdateState
379eb5c7665SAndy Ritger                                                      *pModesetUpdate);
380eb5c7665SAndy Ritger 
381eb5c7665SAndy Ritger void nvEvoLockStateSetMergeMode(NVDispEvoPtr pDispEvo);
382eb5c7665SAndy Ritger 
383eb5c7665SAndy Ritger void nvEvoEnableMergeModePreModeset(NVDispEvoRec *pDispEvo,
384eb5c7665SAndy Ritger                                     const NvU32 headsMask,
385eb5c7665SAndy Ritger                                     NVEvoUpdateState *pUpdateState);
386eb5c7665SAndy Ritger void nvEvoEnableMergeModePostModeset(NVDispEvoRec *pDispEvo,
387eb5c7665SAndy Ritger                                      const NvU32 headsMask,
388eb5c7665SAndy Ritger                                      NVEvoUpdateState *pUpdateState);
389eb5c7665SAndy Ritger void nvEvoDisableMergeMode(NVDispEvoRec *pDispEvo,
390eb5c7665SAndy Ritger                            const NvU32 headsMask,
391eb5c7665SAndy Ritger                            NVEvoUpdateState *pUpdateState);
392eb5c7665SAndy Ritger 
393eb5c7665SAndy Ritger void nvEvoDisableHwYUV420Packer(const NVDispEvoRec *pDispEvo,
394eb5c7665SAndy Ritger                                 const NvU32 head,
395eb5c7665SAndy Ritger                                 NVEvoUpdateState *pUpdateState);
396eb5c7665SAndy Ritger 
397eb5c7665SAndy Ritger NvBool nvEvoGetSingleTileHwModeTimings(const NVHwModeTimingsEvo *pSrc,
398eb5c7665SAndy Ritger                                        const NvU32 numTiles,
399eb5c7665SAndy Ritger                                        NVHwModeTimingsEvo *pDst);
400eb5c7665SAndy Ritger 
401eb5c7665SAndy Ritger NvBool nvEvoUse2Heads1OR(const NVDpyEvoRec *pDpyEvo,
402eb5c7665SAndy Ritger                          const NVHwModeTimingsEvo *pTimings,
403eb5c7665SAndy Ritger                          const struct NvKmsModeValidationParams *pParams);
404eb5c7665SAndy Ritger 
405b5bf85a8SAndy Ritger NvU32 nvGetRefreshRate10kHz(const NVHwModeTimingsEvo *pTimings);
406b5bf85a8SAndy Ritger 
407*91676d66SBernhard Stoeckner NvBool nvIsLockGroupFlipLocked(const NVLockGroup *pLockGroup);
408*91676d66SBernhard Stoeckner 
409*91676d66SBernhard Stoeckner NvBool nvEvoIsConsoleActive(const NVDevEvoRec *pDevEvo);
410*91676d66SBernhard Stoeckner 
4111739a20eSAndy Ritger #ifdef __cplusplus
4121739a20eSAndy Ritger };
4131739a20eSAndy Ritger #endif
4141739a20eSAndy Ritger 
4151739a20eSAndy Ritger #endif /* __NVKMS_H__ */
416