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