11739a20eSAndy Ritger /*
21739a20eSAndy Ritger  * SPDX-FileCopyrightText: Copyright (c) 2013-2020 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_RM_H__
251739a20eSAndy Ritger #define __NVKMS_RM_H__
261739a20eSAndy Ritger 
271739a20eSAndy Ritger #ifdef __cplusplus
281739a20eSAndy Ritger extern "C" {
291739a20eSAndy Ritger #endif
301739a20eSAndy Ritger 
31*91676d66SBernhard Stoeckner #include <nvlimits.h>
321739a20eSAndy Ritger #include "nvkms-types.h"
331739a20eSAndy Ritger #include <class/cl0092.h> /* NV0092_REGISTER_RG_LINE_CALLBACK_FN */
341739a20eSAndy Ritger #include <class/cl9010.h> /* OSVBLANKCALLBACKPROC */
351739a20eSAndy Ritger 
36*91676d66SBernhard Stoeckner #define NVKMS_RM_HANDLE_SPACE_DEVICE(_i)    ((_i) + 1)
37*91676d66SBernhard Stoeckner #define NVKMS_RM_HANDLE_SPACE_FRAMELOCK(_i) (NV_MAX_DEVICES + (_i) + 1)
38*91676d66SBernhard Stoeckner 
391739a20eSAndy Ritger NvBool nvWriteDPCDReg(NVConnectorEvoPtr pConnectorEvo,
401739a20eSAndy Ritger                       NvU32 dpcdAddr,
411739a20eSAndy Ritger                       NvU8 dpcdData);
421739a20eSAndy Ritger 
431739a20eSAndy Ritger NvBool nvRmRegisterCallback(const NVDevEvoRec *pDevEvo,
441739a20eSAndy Ritger                             NVOS10_EVENT_KERNEL_CALLBACK_EX *cb,
451739a20eSAndy Ritger                             struct nvkms_ref_ptr *ref_ptr,
461739a20eSAndy Ritger                             NvU32 parentHandle,
471739a20eSAndy Ritger                             NvU32 eventHandle,
481739a20eSAndy Ritger                             Callback5ArgVoidReturn func,
491739a20eSAndy Ritger                             NvU32 event);
501739a20eSAndy Ritger 
511739a20eSAndy Ritger enum NvKmsAllocDeviceStatus nvRmAllocDisplays(NVDevEvoPtr pDevEvo);
521739a20eSAndy Ritger void nvRmDestroyDisplays(NVDevEvoPtr pDevEvo);
531739a20eSAndy Ritger enum NvKmsBeginEndModeset {
541739a20eSAndy Ritger     BEGIN_MODESET,
551739a20eSAndy Ritger     END_MODESET
561739a20eSAndy Ritger };
571739a20eSAndy Ritger void nvRmBeginEndModeset(NVDispEvoPtr pDispEvo, enum NvKmsBeginEndModeset, NvU32 mask);
581739a20eSAndy Ritger NvU32 nvRmAllocDisplayId(const NVDispEvoRec *pDispEvo, const NVDpyIdList dpyList);
591739a20eSAndy Ritger void nvRmFreeDisplayId(const NVDispEvoRec *pDispEvo, NvU32 dpyId);
601739a20eSAndy Ritger void nvRmGetConnectorORInfo(NVConnectorEvoPtr pConnectorEvo, NvBool assertOnly);
611739a20eSAndy Ritger NVDpyIdList nvRmGetConnectedDpys(const NVDispEvoRec *pDispEvo,
621739a20eSAndy Ritger                                  NVDpyIdList dpyIdList);
631739a20eSAndy Ritger NvBool nvRmResumeDP(NVDevEvoPtr pDevEvo);
641739a20eSAndy Ritger void nvRmPauseDP(NVDevEvoPtr pDevEvo);
651739a20eSAndy Ritger NvBool nvRmSetDpmsEvo(NVDpyEvoPtr pDpyEvo, NvS64 value);
661739a20eSAndy Ritger NvBool nvRmAllocSysmem(NVDevEvoPtr pDevEvo, NvU32 memoryHandle,
671739a20eSAndy Ritger                        NvU32 *ctxDmaFlags, void **ppBase, NvU64 size,
681739a20eSAndy Ritger                        NvKmsMemoryIsoType isoType);
691739a20eSAndy Ritger NvBool nvRMAllocateBaseChannels(NVDevEvoPtr pDevEvo);
701739a20eSAndy Ritger NvBool nvRMAllocateOverlayChannels(NVDevEvoPtr pDevEvo);
711739a20eSAndy Ritger NvBool nvRMAllocateWindowChannels(NVDevEvoPtr pDevEvo);
721739a20eSAndy Ritger NvBool nvRMSetupEvoCoreChannel(NVDevEvoPtr pDevEvo);
731739a20eSAndy Ritger void nvRMFreeBaseChannels(NVDevEvoPtr pDevEvo);
741739a20eSAndy Ritger void nvRMFreeOverlayChannels(NVDevEvoPtr pDevEvo);
751739a20eSAndy Ritger void nvRMFreeWindowChannels(NVDevEvoPtr pDevEvo);
761739a20eSAndy Ritger void nvRMFreeEvoCoreChannel(NVDevEvoPtr pDevEvo);
771739a20eSAndy Ritger NvBool nvRMSyncEvoChannel(
781739a20eSAndy Ritger     NVDevEvoPtr pDevEvo,
791739a20eSAndy Ritger     NVEvoChannelPtr pChannel,
801739a20eSAndy Ritger     NvU32 errorToken);
811739a20eSAndy Ritger NvBool nvRMIdleBaseChannel(NVDevEvoPtr pDevEvo, NvU32 head, NvU32 sd,
821739a20eSAndy Ritger                            NvBool *stoppedBase);
831739a20eSAndy Ritger NvBool nvRmEvoClassListCheck(const NVDevEvoRec *pDevEvo, NvU32 classID);
841739a20eSAndy Ritger NvBool nvRmEvoAllocAndBindSyncpt(
851739a20eSAndy Ritger     NVDevEvoRec *pDevEvo,
861739a20eSAndy Ritger     NVEvoChannel *pChannel,
871739a20eSAndy Ritger     NvU32 id,
88b5bf85a8SAndy Ritger     NVSurfaceDescriptor *pSurfaceDesc,
89b5bf85a8SAndy Ritger     NVEvoSyncpt *pEvoSyncpt);
901739a20eSAndy Ritger void nvRmEvoFreePreSyncpt(NVDevEvoRec *pDevEvo,
911739a20eSAndy Ritger                           NVEvoChannel *pChannel);
92b5bf85a8SAndy Ritger void nvRmFreeSyncptHandle(NVDevEvoRec *pDevEvo,
93b5bf85a8SAndy Ritger                           NVEvoSyncpt *pSyncpt);
941739a20eSAndy Ritger void nvRmEvoFreeSyncpt(NVDevEvoRec *pDevEvo,
951739a20eSAndy Ritger                        NVEvoSyncpt *pEvoSyncpt);
961739a20eSAndy Ritger void nvRmEvoFreeDispContextDMA(NVDevEvoPtr pDevEvo,
971739a20eSAndy Ritger                                NvU32 *hDispCtxDma);
981739a20eSAndy Ritger void nvRmEvoUnMapVideoMemory(NVDevEvoPtr pDevEvo,
991739a20eSAndy Ritger                              NvU32 memoryHandle,
1001739a20eSAndy Ritger                              void *subDeviceAddress[NVKMS_MAX_SUBDEVICES]);
1011739a20eSAndy Ritger NvBool nvRmEvoMapVideoMemory(NVDevEvoPtr pDevEvo,
1021739a20eSAndy Ritger                              NvU32 memoryHandle, NvU64 size,
1031739a20eSAndy Ritger                              void *subDeviceAddress[NVKMS_MAX_SUBDEVICES],
1041739a20eSAndy Ritger                              NvU32 subDeviceMask);
1051739a20eSAndy Ritger NvBool nvRmAllocDeviceEvo(NVDevEvoPtr pDevEvo,
1061739a20eSAndy Ritger                           const struct NvKmsAllocDeviceRequest *pRequest);
1071739a20eSAndy Ritger void nvRmFreeDeviceEvo(NVDevEvoPtr pDevEvo);
108758b4ee8SAndy Ritger NvBool nvRmRegisterDIFREventHandler(NVDevEvoPtr pDevEvo);
109758b4ee8SAndy Ritger void nvRmUnregisterDIFREventHandler(NVDevEvoPtr pDevEvo);
1101739a20eSAndy Ritger NvBool nvRmIsPossibleToActivateDpyIdList(NVDispEvoPtr pDispEvo,
1111739a20eSAndy Ritger                                          const NVDpyIdList dpyIdList);
1121739a20eSAndy Ritger NvBool nvRmVTSwitch(NVDevEvoPtr pDevEvo, NvU32 cmd);
1131739a20eSAndy Ritger NvBool nvRmGetVTFBInfo(NVDevEvoPtr pDevEvo);
1141739a20eSAndy Ritger void nvRmImportFbConsoleMemory(NVDevEvoPtr pDevEvo);
1151739a20eSAndy Ritger NvBool nvRmAllocEvoDma(NVDevEvoPtr pDevEvo,
1161739a20eSAndy Ritger                        NVEvoDmaPtr pDma,
1171739a20eSAndy Ritger                        NvU64 limit,
1181739a20eSAndy Ritger                        NvU32 ctxDmaFlags,
1191739a20eSAndy Ritger                        NvU32 subDeviceMask);
1201739a20eSAndy Ritger void nvRmFreeEvoDma(NVDevEvoPtr pDevEvo, NVEvoDmaPtr pDma);
1211739a20eSAndy Ritger NvBool nvRmQueryDpAuxLog(NVDispEvoRec *pDispEvo, NvS64 *pValue);
1221739a20eSAndy Ritger NvU64 nvRmGetGpuTime(NVDevEvoPtr pDevEvo);
1231739a20eSAndy Ritger NvBool nvRmSetGc6Allowed(NVDevEvoPtr pDevEvo, NvBool allowed);
1244397463eSAndy Ritger NVRgLine1CallbackPtr
1254397463eSAndy Ritger nvRmAddRgLine1Callback(NVDispEvoRec *pDispEvo,
1261739a20eSAndy Ritger                        NvU32 head,
1274397463eSAndy Ritger                        NVRgLine1CallbackProc pCallbackProc,
1284397463eSAndy Ritger                        void *pUserData);
1291739a20eSAndy Ritger void nvRmRemoveRgLine1Callback(const NVDispEvoRec *pDispEvo,
1304397463eSAndy Ritger                                NVRgLine1CallbackPtr pCallback);
1314397463eSAndy Ritger 
1321739a20eSAndy Ritger NvU32 nvRmAddVBlankCallback(
1331739a20eSAndy Ritger     const NVDispEvoRec *pDispEvo,
1341739a20eSAndy Ritger     NvU32 head,
1354397463eSAndy Ritger     OSVBLANKCALLBACKPROC pCallback,
1364397463eSAndy Ritger     void *pParam2);
1371739a20eSAndy Ritger void nvRmRemoveVBlankCallback(const NVDispEvoRec *pDispEvo,
1381739a20eSAndy Ritger                               NvU32 callbackObjectHandle);
1391739a20eSAndy Ritger void nvRmMuxInit(NVDevEvoPtr pDevEvo);
1401739a20eSAndy Ritger NvBool nvRmMuxPre(const NVDpyEvoRec *pDpyEvo, NvMuxState state);
1411739a20eSAndy Ritger NvBool nvRmMuxSwitch(const NVDpyEvoRec *pDpyEvo, NvMuxState state);
1421739a20eSAndy Ritger NvBool nvRmMuxPost(const NVDpyEvoRec *pDpyEvo, NvMuxState state);
1431739a20eSAndy Ritger NvMuxState nvRmMuxState(const NVDpyEvoRec *pDpyEvo);
1441739a20eSAndy Ritger 
1451739a20eSAndy Ritger void nvRmRegisterBacklight(NVDispEvoRec *pDispEvo);
1461739a20eSAndy Ritger void nvRmUnregisterBacklight(NVDispEvoRec *pDispEvo);
1471739a20eSAndy Ritger 
1484397463eSAndy Ritger void nvRmAllocCoreRGSyncpts(NVDevEvoPtr pDevEvo);
1494397463eSAndy Ritger void nvRmFreeCoreRGSyncpts(NVDevEvoPtr pDevEvo);
1504397463eSAndy Ritger 
151b5bf85a8SAndy Ritger NvU32 nvRmAllocAndBindSurfaceDescriptor(
152b5bf85a8SAndy Ritger     NVDevEvoPtr pDevEvo,
153b5bf85a8SAndy Ritger     NvU32 hMemory,
154b5bf85a8SAndy Ritger     const enum NvKmsSurfaceMemoryLayout layout,
155b5bf85a8SAndy Ritger     NvU64 limit,
156b5bf85a8SAndy Ritger     NVSurfaceDescriptor *pSurfaceDesc);
157b5bf85a8SAndy Ritger 
1581739a20eSAndy Ritger #ifdef __cplusplus
1591739a20eSAndy Ritger };
1601739a20eSAndy Ritger #endif
1611739a20eSAndy Ritger 
1621739a20eSAndy Ritger #endif /* __NVKMS_RM_H__ */
163