1 /* 2 * SPDX-FileCopyrightText: Copyright (c) 2014 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_FLIP_H__ 25 #define __NVKMS_FLIP_H__ 26 27 28 #include "nvkms-types.h" 29 30 NvBool nvCheckFlipPermissions( 31 const struct NvKmsPerOpenDev *pOpenDev, 32 const NVDevEvoRec *pDevEvo, 33 const NvU32 sd, 34 const NvU32 apiHead, 35 const struct NvKmsFlipCommonParams *pParams); 36 37 NvBool nvFlipEvo(NVDevEvoPtr pDevEvo, 38 const struct NvKmsPerOpenDev *pOpenDev, 39 const struct NvKmsFlipRequestOneHead *pFlipHead, 40 NvU32 numFlipHeads, 41 NvBool commit, 42 NvBool allowVrr, 43 struct NvKmsFlipReply *reply, 44 NvBool skipUpdate, 45 NvBool allowFlipLock); 46 47 void nvApiHeadGetLayerSurfaceArray(const NVDispEvoRec *pDispEvo, 48 const NvU32 apiHead, 49 const NvU32 layer, 50 NVSurfaceEvoPtr pSurfaceEvos[NVKMS_MAX_EYES]); 51 52 void nvApiHeadGetCursorInfo(const NVDispEvoRec *pDispEvo, 53 const NvU32 apiHead, 54 NVSurfaceEvoPtr *ppSurfaceEvo, 55 NvS16 *x, NvS16 *y); 56 57 void nvApiHeadSetViewportPointIn(const NVDispEvoRec *pDispEvo, 58 const NvU32 apiHead, 59 const NvU16 x, 60 const NvU16 y); 61 62 NvU32 nvApiHeadGetActiveViewportOffset(NVDispEvoRec *pDispEvo, 63 NvU32 apiHead); 64 65 void nvApiHeadIdleMainLayerChannels(NVDevEvoRec *pDevEvo, 66 const NvU32 apiHeadMaskPerSd[NVKMS_MAX_SUBDEVICES]); 67 68 void nvApiHeadUpdateFlipLock(NVDevEvoRec *pDevEvo, 69 const NvU32 apiHeadMaskPerSd[NVKMS_MAX_SUBDEVICES], 70 const NvBool enable); 71 72 void nvCancelSDRTransitionTimer(NVDispApiHeadStateEvoRec *pApiHeadState); 73 74 NvBool nvIdleMainLayerChannelCheckIdleOneApiHead(NVDispEvoPtr pDispEvo, 75 NvU32 apiHead); 76 77 #define NV_SURFACE_USAGE_MASK_CURSOR 0:0 78 #define NV_SURFACE_USAGE_MASK_CURSOR_DISABLE 0 79 #define NV_SURFACE_USAGE_MASK_CURSOR_ENABLE 1 80 #define NV_SURFACE_USAGE_MASK_LAYER(_n) (3+(3*(_n))):(1+(3*(_n))) 81 82 #define NV_SURFACE_USAGE_MASK_LAYER_SEMAPHORE 1:1 83 #define NV_SURFACE_USAGE_MASK_LAYER_SEMAPHORE_DISABLE 0 84 #define NV_SURFACE_USAGE_MASK_LAYER_SEMAPHORE_ENABLE 1 85 #define NV_SURFACE_USAGE_MASK_LAYER_NOTIFIER 2:2 86 #define NV_SURFACE_USAGE_MASK_LAYER_NOTIFIER_DISABLE 0 87 #define NV_SURFACE_USAGE_MASK_LAYER_NOTIFIER_ENABLE 1 88 #define NV_SURFACE_USAGE_MASK_LAYER_SCANOUT 0:0 89 #define NV_SURFACE_USAGE_MASK_LAYER_SCANOUT_DISABLE 0 90 #define NV_SURFACE_USAGE_MASK_LAYER_SCANOUT_ENABLE 1 91 92 NvU32 nvCollectSurfaceUsageMaskOneApiHead(const NVDispEvoRec *pDispEvo, 93 const NvU32 apiHead, 94 NVSurfaceEvoPtr pSurfaceEvo); 95 96 void nvIdleLayerChannels(NVDevEvoRec *pDevEvo, 97 NvU32 layerMaskPerSdApiHead[NVKMS_MAX_SUBDEVICES][NVKMS_MAX_HEADS_PER_DISP]); 98 99 void nvEvoClearSurfaceUsage(NVDevEvoRec *pDevEvo, 100 NVSurfaceEvoPtr pSurfaceEvo); 101 102 NvBool nvIdleBaseChannelOneApiHead(NVDispEvoRec *pDispEvo, NvU32 apiHead, 103 NvBool *pStoppedBase); 104 105 #endif /* __NVKMS_FLIP_H__ */ 106