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