1 /**********************************************************************
3 * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms and conditions of the GNU General Public License,
7 * version 2, as published by the Free Software Foundation.
9 * This program is distributed in the hope it will be useful but, except
10 * as otherwise stated in writing, without any warranty; without even the
11 * implied warranty of merchantability or fitness for a particular purpose.
12 * See the GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18 * The full GNU General Public License is included in this distribution in
19 * the file called "COPYING".
21 * Contact Information:
22 * Imagination Technologies Ltd. <gpl-support@imgtec.com>
23 * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK
25 ******************************************************************************/
30 #if defined (__cplusplus)
34 #include "img_types.h"
39 PVRSRV_HANDLE_TYPE_NONE = 0,
40 PVRSRV_HANDLE_TYPE_PERPROC_DATA,
41 PVRSRV_HANDLE_TYPE_DEV_NODE,
42 PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT,
43 PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP,
44 PVRSRV_HANDLE_TYPE_MEM_INFO,
45 PVRSRV_HANDLE_TYPE_SYNC_INFO,
46 PVRSRV_HANDLE_TYPE_DISP_INFO,
47 PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN,
48 PVRSRV_HANDLE_TYPE_BUF_INFO,
49 PVRSRV_HANDLE_TYPE_DISP_BUFFER,
50 PVRSRV_HANDLE_TYPE_BUF_BUFFER,
51 PVRSRV_HANDLE_TYPE_SGX_HW_RENDER_CONTEXT,
52 PVRSRV_HANDLE_TYPE_SGX_HW_TRANSFER_CONTEXT,
53 PVRSRV_HANDLE_TYPE_SGX_HW_2D_CONTEXT,
54 PVRSRV_HANDLE_TYPE_SHARED_PB_DESC,
55 PVRSRV_HANDLE_TYPE_MEM_INFO_REF,
56 PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO,
57 PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT,
58 PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT,
63 PVRSRV_HANDLE_ALLOC_FLAG_NONE = 0,
65 PVRSRV_HANDLE_ALLOC_FLAG_SHARED = 1,
67 PVRSRV_HANDLE_ALLOC_FLAG_MULTI = 2,
69 PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE = 4
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,
81 IMG_HANDLE * phHandle, IMG_VOID * pvData,
82 PVRSRV_HANDLE_TYPE eType,
83 PVRSRV_HANDLE_ALLOC_FLAG eFlag);
85 PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE * psBase,
86 IMG_HANDLE * phHandle,
88 PVRSRV_HANDLE_TYPE eType,
89 PVRSRV_HANDLE_ALLOC_FLAG eFlag,
92 PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE * psBase,
93 IMG_HANDLE * phHandle, IMG_VOID * pvData,
94 PVRSRV_HANDLE_TYPE eType);
96 PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE * psBase,
98 PVRSRV_HANDLE_TYPE * peType,
101 PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE * psBase,
102 IMG_PVOID * ppvData, IMG_HANDLE hHandle,
103 PVRSRV_HANDLE_TYPE eType);
105 PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE * psBase,
108 PVRSRV_HANDLE_TYPE eType,
109 IMG_HANDLE hAncestor);
111 PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE * psBase,
112 IMG_PVOID * phParent,
114 PVRSRV_HANDLE_TYPE eType);
116 PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE * psBase,
119 PVRSRV_HANDLE_TYPE eType);
121 PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE * psBase,
123 PVRSRV_HANDLE_TYPE eType);
125 PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE * psBase,
126 IMG_UINT32 ui32BatchSize);
128 PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE * psBase);
130 void PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE * psBase);
132 PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE ** ppsBase,
135 PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE * psBase);
137 PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID);
139 PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID);
143 #define KERNEL_HANDLE_BASE IMG_NULL
145 #ifdef INLINE_IS_PRAGMA
146 #pragma inline(PVRSRVAllocHandle)
149 PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE * psBase,
150 IMG_HANDLE * phHandle,
152 PVRSRV_HANDLE_TYPE eType,
153 PVRSRV_HANDLE_ALLOC_FLAG eFlag) {
154 PVR_UNREFERENCED_PARAMETER(eType);
155 PVR_UNREFERENCED_PARAMETER(eFlag);
156 PVR_UNREFERENCED_PARAMETER(psBase);
161 #ifdef INLINE_IS_PRAGMA
162 #pragma inline(PVRSRVAllocSubHandle)
165 PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE * psBase,
166 IMG_HANDLE * phHandle,
168 PVRSRV_HANDLE_TYPE eType,
169 PVRSRV_HANDLE_ALLOC_FLAG eFlag,
170 IMG_HANDLE hParent) {
171 PVR_UNREFERENCED_PARAMETER(eType);
172 PVR_UNREFERENCED_PARAMETER(eFlag);
173 PVR_UNREFERENCED_PARAMETER(hParent);
174 PVR_UNREFERENCED_PARAMETER(psBase);
180 #ifdef INLINE_IS_PRAGMA
181 #pragma inline(PVRSRVFindHandle)
184 PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE * psBase,
185 IMG_HANDLE * phHandle,
187 PVRSRV_HANDLE_TYPE eType) {
188 PVR_UNREFERENCED_PARAMETER(eType);
189 PVR_UNREFERENCED_PARAMETER(psBase);
195 #ifdef INLINE_IS_PRAGMA
196 #pragma inline(PVRSRVLookupHandleAnyType)
199 PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE * psBase,
201 PVRSRV_HANDLE_TYPE * peType,
202 IMG_HANDLE hHandle) {
203 PVR_UNREFERENCED_PARAMETER(psBase);
205 *peType = PVRSRV_HANDLE_TYPE_NONE;
211 #ifdef INLINE_IS_PRAGMA
212 #pragma inline(PVRSRVLookupHandle)
215 PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE * psBase,
218 PVRSRV_HANDLE_TYPE eType) {
219 PVR_UNREFERENCED_PARAMETER(psBase);
220 PVR_UNREFERENCED_PARAMETER(eType);
226 #ifdef INLINE_IS_PRAGMA
227 #pragma inline(PVRSRVLookupSubHandle)
230 PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE * psBase,
233 PVRSRV_HANDLE_TYPE eType,
234 IMG_HANDLE hAncestor) {
235 PVR_UNREFERENCED_PARAMETER(psBase);
236 PVR_UNREFERENCED_PARAMETER(eType);
237 PVR_UNREFERENCED_PARAMETER(hAncestor);
243 #ifdef INLINE_IS_PRAGMA
244 #pragma inline(PVRSRVGetParentHandle)
247 PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE * psBase,
248 IMG_PVOID * phParent,
250 PVRSRV_HANDLE_TYPE eType) {
251 PVR_UNREFERENCED_PARAMETER(psBase);
252 PVR_UNREFERENCED_PARAMETER(eType);
253 PVR_UNREFERENCED_PARAMETER(hHandle);
255 *phParent = IMG_NULL;
260 #ifdef INLINE_IS_PRAGMA
261 #pragma inline(PVRSRVLookupAndReleaseHandle)
264 PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *
268 PVRSRV_HANDLE_TYPE eType)
270 PVR_UNREFERENCED_PARAMETER(eType);
271 PVR_UNREFERENCED_PARAMETER(psBase);
277 #ifdef INLINE_IS_PRAGMA
278 #pragma inline(PVRSRVReleaseHandle)
281 PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE * psBase,
283 PVRSRV_HANDLE_TYPE eType) {
284 PVR_UNREFERENCED_PARAMETER(hHandle);
285 PVR_UNREFERENCED_PARAMETER(eType);
286 PVR_UNREFERENCED_PARAMETER(psBase);
291 #ifdef INLINE_IS_PRAGMA
292 #pragma inline(PVRSRVNewHandleBatch)
295 PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE * psBase,
296 IMG_UINT32 ui32BatchSize) {
297 PVR_UNREFERENCED_PARAMETER(psBase);
298 PVR_UNREFERENCED_PARAMETER(ui32BatchSize);
303 #ifdef INLINE_IS_PRAGMA
304 #pragma inline(PVRSRVCommitHandleBatch)
307 PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE * psBase) {
308 PVR_UNREFERENCED_PARAMETER(psBase);
313 #ifdef INLINE_IS_PRAGMA
314 #pragma inline(PVRSRVReleaseHandleBatch)
316 static INLINE void PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE * psBase) {
317 PVR_UNREFERENCED_PARAMETER(psBase);
320 #ifdef INLINE_IS_PRAGMA
321 #pragma inline(PVRSRVAllocHandleBase)
324 PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE ** ppsBase,
325 IMG_UINT32 ui32PID) {
326 PVR_UNREFERENCED_PARAMETER(ui32PID);
333 #ifdef INLINE_IS_PRAGMA
334 #pragma inline(PVRSRVFreeHandleBase)
337 PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE * psBase) {
338 PVR_UNREFERENCED_PARAMETER(psBase);
343 #ifdef INLINE_IS_PRAGMA
344 #pragma inline(PVRSRVHandleInit)
346 static INLINE PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID) {
350 #ifdef INLINE_IS_PRAGMA
351 #pragma inline(PVRSRVHandleDeInit)
353 static INLINE PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID) {
359 #define PVRSRVAllocHandleNR(psBase, phHandle, pvData, eType, eFlag) \
360 (void)PVRSRVAllocHandle(psBase, phHandle, pvData, eType, eFlag)
362 #define PVRSRVAllocSubHandleNR(psBase, phHandle, pvData, eType, eFlag, hParent) \
363 (void)PVRSRVAllocSubHandle(psBase, phHandle, pvData, eType, eFlag, hParent)
365 #if defined (__cplusplus)