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