1 /**********************************************************************
2 Copyright (c) Imagination Technologies Ltd.
4 Permission is hereby granted, free of charge, to any person obtaining a copy
5 of this software and associated documentation files (the "Software"), to deal
6 in the Software without restriction, including without limitation the rights
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 copies of the Software, and to permit persons to whom the Software is
9 furnished to do so, subject to the following conditions:
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 ******************************************************************************/
26 #if defined (__cplusplus)
30 #include "img_types.h"
36 PVRSRV_HANDLE_TYPE_NONE = 0,
37 PVRSRV_HANDLE_TYPE_PERPROC_DATA,
38 PVRSRV_HANDLE_TYPE_DEV_NODE,
39 PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT,
40 PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP,
41 PVRSRV_HANDLE_TYPE_MEM_INFO,
42 PVRSRV_HANDLE_TYPE_SYNC_INFO,
43 PVRSRV_HANDLE_TYPE_DISP_INFO,
44 PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN,
45 PVRSRV_HANDLE_TYPE_BUF_INFO,
46 PVRSRV_HANDLE_TYPE_DISP_BUFFER,
47 PVRSRV_HANDLE_TYPE_BUF_BUFFER,
48 PVRSRV_HANDLE_TYPE_SGX_HW_RENDER_CONTEXT,
49 PVRSRV_HANDLE_TYPE_SGX_HW_TRANSFER_CONTEXT,
50 PVRSRV_HANDLE_TYPE_SGX_HW_2D_CONTEXT,
51 PVRSRV_HANDLE_TYPE_SHARED_PB_DESC,
52 PVRSRV_HANDLE_TYPE_MEM_INFO_REF,
53 PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO,
54 PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT,
55 PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT,
56 PVRSRV_HANDLE_TYPE_MMAP_INFO,
57 PVRSRV_HANDLE_TYPE_SOC_TIMER
63 PVRSRV_HANDLE_ALLOC_FLAG_NONE = 0,
65 PVRSRV_HANDLE_ALLOC_FLAG_SHARED = 0x01,
67 PVRSRV_HANDLE_ALLOC_FLAG_MULTI = 0x02,
69 PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE = 0x04
70 } PVRSRV_HANDLE_ALLOC_FLAG;
72 struct _PVRSRV_HANDLE_BASE_;
73 typedef struct _PVRSRV_HANDLE_BASE_ PVRSRV_HANDLE_BASE;
75 #ifdef PVR_SECURE_HANDLES
76 extern PVRSRV_HANDLE_BASE *gpsKernelHandleBase;
78 #define KERNEL_HANDLE_BASE (gpsKernelHandleBase)
80 PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag);
82 PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent);
84 PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType);
86 PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle);
88 PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType);
90 PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor);
92 PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType);
94 PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType);
96 PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType);
98 PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32BatchSize);
100 PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE *psBase);
102 IMG_VOID PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE *psBase);
104 PVRSRV_ERROR PVRSRVSetMaxHandle(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32MaxHandle);
106 IMG_UINT32 PVRSRVGetMaxHandle(PVRSRV_HANDLE_BASE *psBase);
108 PVRSRV_ERROR PVRSRVEnableHandlePurging(PVRSRV_HANDLE_BASE *psBase);
110 PVRSRV_ERROR PVRSRVPurgeHandles(PVRSRV_HANDLE_BASE *psBase);
112 PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE **ppsBase);
114 PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE *psBase);
116 PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID);
118 PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID);
122 #define KERNEL_HANDLE_BASE IMG_NULL
124 #ifdef INLINE_IS_PRAGMA
125 #pragma inline(PVRSRVAllocHandle)
128 PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag)
130 PVR_UNREFERENCED_PARAMETER(eType);
131 PVR_UNREFERENCED_PARAMETER(eFlag);
132 PVR_UNREFERENCED_PARAMETER(psBase);
138 #ifdef INLINE_IS_PRAGMA
139 #pragma inline(PVRSRVAllocSubHandle)
142 PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag, IMG_HANDLE hParent)
144 PVR_UNREFERENCED_PARAMETER(eType);
145 PVR_UNREFERENCED_PARAMETER(eFlag);
146 PVR_UNREFERENCED_PARAMETER(hParent);
147 PVR_UNREFERENCED_PARAMETER(psBase);
153 #ifdef INLINE_IS_PRAGMA
154 #pragma inline(PVRSRVFindHandle)
157 PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType)
159 PVR_UNREFERENCED_PARAMETER(eType);
160 PVR_UNREFERENCED_PARAMETER(psBase);
166 #ifdef INLINE_IS_PRAGMA
167 #pragma inline(PVRSRVLookupHandleAnyType)
170 PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle)
172 PVR_UNREFERENCED_PARAMETER(psBase);
174 *peType = PVRSRV_HANDLE_TYPE_NONE;
180 #ifdef INLINE_IS_PRAGMA
181 #pragma inline(PVRSRVLookupHandle)
184 PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType)
186 PVR_UNREFERENCED_PARAMETER(psBase);
187 PVR_UNREFERENCED_PARAMETER(eType);
193 #ifdef INLINE_IS_PRAGMA
194 #pragma inline(PVRSRVLookupSubHandle)
197 PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor)
199 PVR_UNREFERENCED_PARAMETER(psBase);
200 PVR_UNREFERENCED_PARAMETER(eType);
201 PVR_UNREFERENCED_PARAMETER(hAncestor);
207 #ifdef INLINE_IS_PRAGMA
208 #pragma inline(PVRSRVGetParentHandle)
211 PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType)
213 PVR_UNREFERENCED_PARAMETER(psBase);
214 PVR_UNREFERENCED_PARAMETER(eType);
215 PVR_UNREFERENCED_PARAMETER(hHandle);
217 *phParent = IMG_NULL;
222 #ifdef INLINE_IS_PRAGMA
223 #pragma inline(PVRSRVLookupAndReleaseHandle)
226 PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType)
228 PVR_UNREFERENCED_PARAMETER(eType);
229 PVR_UNREFERENCED_PARAMETER(psBase);
235 #ifdef INLINE_IS_PRAGMA
236 #pragma inline(PVRSRVReleaseHandle)
239 PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType)
241 PVR_UNREFERENCED_PARAMETER(hHandle);
242 PVR_UNREFERENCED_PARAMETER(eType);
243 PVR_UNREFERENCED_PARAMETER(psBase);
248 #ifdef INLINE_IS_PRAGMA
249 #pragma inline(PVRSRVNewHandleBatch)
252 PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32BatchSize)
254 PVR_UNREFERENCED_PARAMETER(psBase);
255 PVR_UNREFERENCED_PARAMETER(ui32BatchSize);
260 #ifdef INLINE_IS_PRAGMA
261 #pragma inline(PVRSRVCommitHandleBatch)
264 PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE *psBase)
266 PVR_UNREFERENCED_PARAMETER(psBase);
271 #ifdef INLINE_IS_PRAGMA
272 #pragma inline(PVRSRVReleaseHandleBatch)
275 IMG_VOID PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE *psBase)
277 PVR_UNREFERENCED_PARAMETER(psBase);
280 #ifdef INLINE_IS_PRAGMA
281 #pragma inline(PVRSRVSetMaxHandle)
284 PVRSRV_ERROR PVRSRVSetMaxHandle(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32MaxHandle)
286 PVR_UNREFERENCED_PARAMETER(psBase);
287 PVR_UNREFERENCED_PARAMETER(ui32MaxHandle);
289 return PVRSRV_ERROR_NOT_SUPPORTED;
292 #ifdef INLINE_IS_PRAGMA
293 #pragma inline(PVRSRVGetMaxHandle)
296 IMG_UINT32 PVRSRVGetMaxHandle(PVRSRV_HANDLE_BASE *psBase)
298 PVR_UNREFERENCED_PARAMETER(psBase);
303 #ifdef INLINE_IS_PRAGMA
304 #pragma inline(PVRSRVEnableHandlePurging)
307 PVRSRV_ERROR PVRSRVEnableHandlePurging(PVRSRV_HANDLE_BASE *psBase)
309 PVR_UNREFERENCED_PARAMETER(psBase);
314 #ifdef INLINE_IS_PRAGMA
315 #pragma inline(PVRSRVPurgeHandles)
318 PVRSRV_ERROR PVRSRVPurgeHandles(PVRSRV_HANDLE_BASE *psBase)
320 PVR_UNREFERENCED_PARAMETER(psBase);
325 #ifdef INLINE_IS_PRAGMA
326 #pragma inline(PVRSRVAllocHandleBase)
329 PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE **ppsBase)
336 #ifdef INLINE_IS_PRAGMA
337 #pragma inline(PVRSRVFreeHandleBase)
340 PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE *psBase)
342 PVR_UNREFERENCED_PARAMETER(psBase);
347 #ifdef INLINE_IS_PRAGMA
348 #pragma inline(PVRSRVHandleInit)
351 PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID)
356 #ifdef INLINE_IS_PRAGMA
357 #pragma inline(PVRSRVHandleDeInit)
360 PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID)
367 #define PVRSRVAllocHandleNR(psBase, phHandle, pvData, eType, eFlag) \
368 (IMG_VOID)PVRSRVAllocHandle(psBase, phHandle, pvData, eType, eFlag)
370 #define PVRSRVAllocSubHandleNR(psBase, phHandle, pvData, eType, eFlag, hParent) \
371 (IMG_VOID)PVRSRVAllocSubHandle(psBase, phHandle, pvData, eType, eFlag, hParent)
373 #if defined (__cplusplus)