1 /* 2 * SPDX-FileCopyrightText: Copyright (c) 2014-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_SURFACE_H__ 25 #define __NVKMS_SURFACE_H__ 26 27 #include "nvkms-types.h" 28 29 void nvEvoRegisterSurface(NVDevEvoPtr pDevEvo, 30 struct NvKmsPerOpenDev *pOpenDev, 31 struct NvKmsRegisterSurfaceParams *pParams, 32 enum NvHsMapPermissions hsMapPermissions); 33 34 void nvEvoUnregisterSurface(NVDevEvoPtr pDevEvo, 35 struct NvKmsPerOpenDev *pOpenDev, 36 NvKmsSurfaceHandle surfaceHandle, 37 NvBool skipUpdate); 38 void nvEvoReleaseSurface(NVDevEvoPtr pDevEvo, 39 struct NvKmsPerOpenDev *pOpenDev, 40 NvKmsSurfaceHandle surfaceHandle); 41 42 void nvEvoFreeClientSurfaces(NVDevEvoPtr pDevEvo, 43 struct NvKmsPerOpenDev *pOpenDev, 44 NVEvoApiHandlesRec *pOpenDevSurfaceHandles); 45 46 void nvEvoIncrementSurfaceStructRefCnt(NVSurfaceEvoPtr pSurfaceEvo); 47 void nvEvoDecrementSurfaceStructRefCnt(NVSurfaceEvoPtr pSurfaceEvo); 48 49 void nvEvoIncrementSurfaceRefCnts(NVSurfaceEvoPtr pSurfaceEvo); 50 void nvEvoDecrementSurfaceRefCnts(NVSurfaceEvoPtr pSurfaceEvo); 51 52 NvBool nvEvoSurfaceRefCntsTooLarge(const NVSurfaceEvoRec *pSurfaceEvo); 53 54 NVSurfaceEvoPtr nvEvoGetSurfaceFromHandle( 55 const NVDevEvoRec *pDevEvo, 56 const NVEvoApiHandlesRec *pOpenDevSurfaceHandles, 57 const NvKmsSurfaceHandle surfaceHandle, 58 const NvBool isUsedByCursorChannel, 59 const NvBool isUsedByLayerChannel); 60 61 NVSurfaceEvoPtr nvEvoGetSurfaceFromHandleNoCtxDmaOk( 62 const NVDevEvoRec *pDevEvo, 63 const NVEvoApiHandlesRec *pOpenDevSurfaceHandles, 64 NvKmsSurfaceHandle surfaceHandle); 65 66 NVDeferredRequestFifoRec *nvEvoRegisterDeferredRequestFifo( 67 NVDevEvoPtr pDevEvo, 68 NVSurfaceEvoPtr pSurfaceEvo); 69 70 void nvEvoUnregisterDeferredRequestFifo( 71 NVDevEvoPtr pDevEvo, 72 NVDeferredRequestFifoRec *pDeferredRequestFifo); 73 74 static inline NvBool nvEvoIsSurfaceOwner(const NVSurfaceEvoRec *pSurfaceEvo, 75 const struct NvKmsPerOpenDev *pOpenDev, 76 NvKmsSurfaceHandle surfaceHandle) 77 { 78 return ((pSurfaceEvo->owner.pOpenDev == pOpenDev) && 79 (pSurfaceEvo->owner.surfaceHandle == surfaceHandle)); 80 } 81 82 #define ASSERT_EYES_MATCH(_arr, _field) \ 83 nvAssert((_arr)[NVKMS_RIGHT] == NULL || \ 84 (_arr)[NVKMS_LEFT]->_field == (_arr)[NVKMS_RIGHT]->_field); 85 86 ct_assert((NVKMS_RIGHT - NVKMS_LEFT) == 1); 87 88 #define FOR_ALL_EYES(_eye) \ 89 for ((_eye) = NVKMS_LEFT; (_eye) <= NVKMS_RIGHT; (_eye)++) 90 91 #define FOR_ALL_VALID_PLANES(_planeIndex, _pSurface) \ 92 for ((_planeIndex) = 0; \ 93 (_planeIndex) < \ 94 (nvKmsGetSurfaceMemoryFormatInfo((_pSurface)->format))->numPlanes; \ 95 (_planeIndex)++) 96 97 #endif /* __NVKMS_SURFACE_H__ */ 98