1.3.13.1607/3_00_00_08+flat+Lindent
[sgx.git] / pvr / handle.h
1 /**********************************************************************
2  *
3  * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved.
4  * 
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.
8  * 
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.
13  * 
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.
17  * 
18  * The full GNU General Public License is included in this distribution in
19  * the file called "COPYING".
20  *
21  * Contact Information:
22  * Imagination Technologies Ltd. <gpl-support@imgtec.com>
23  * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK 
24  *
25  ******************************************************************************/
26
27 #ifndef __HANDLE_H__
28 #define __HANDLE_H__
29
30 #if defined (__cplusplus)
31 extern "C" {
32 #endif
33
34 #include "img_types.h"
35 #include "hash.h"
36 #include "resman.h"
37
38         typedef enum {
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,
59         } PVRSRV_HANDLE_TYPE;
60
61         typedef enum {
62
63                 PVRSRV_HANDLE_ALLOC_FLAG_NONE = 0,
64
65                 PVRSRV_HANDLE_ALLOC_FLAG_SHARED = 1,
66
67                 PVRSRV_HANDLE_ALLOC_FLAG_MULTI = 2,
68
69                 PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE = 4
70         } PVRSRV_HANDLE_ALLOC_FLAG;
71
72         struct _PVRSRV_HANDLE_BASE_;
73         typedef struct _PVRSRV_HANDLE_BASE_ PVRSRV_HANDLE_BASE;
74
75 #ifdef  PVR_SECURE_HANDLES
76         extern PVRSRV_HANDLE_BASE *gpsKernelHandleBase;
77
78 #define KERNEL_HANDLE_BASE (gpsKernelHandleBase)
79
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);
84
85         PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE * psBase,
86                                           IMG_HANDLE * phHandle,
87                                           IMG_VOID * pvData,
88                                           PVRSRV_HANDLE_TYPE eType,
89                                           PVRSRV_HANDLE_ALLOC_FLAG eFlag,
90                                           IMG_HANDLE hParent);
91
92         PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE * psBase,
93                                       IMG_HANDLE * phHandle, IMG_VOID * pvData,
94                                       PVRSRV_HANDLE_TYPE eType);
95
96         PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE * psBase,
97                                                IMG_PVOID * ppvData,
98                                                PVRSRV_HANDLE_TYPE * peType,
99                                                IMG_HANDLE hHandle);
100
101         PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE * psBase,
102                                         IMG_PVOID * ppvData, IMG_HANDLE hHandle,
103                                         PVRSRV_HANDLE_TYPE eType);
104
105         PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE * psBase,
106                                            IMG_PVOID * ppvData,
107                                            IMG_HANDLE hHandle,
108                                            PVRSRV_HANDLE_TYPE eType,
109                                            IMG_HANDLE hAncestor);
110
111         PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE * psBase,
112                                            IMG_PVOID * phParent,
113                                            IMG_HANDLE hHandle,
114                                            PVRSRV_HANDLE_TYPE eType);
115
116         PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE * psBase,
117                                                   IMG_PVOID * ppvData,
118                                                   IMG_HANDLE hHandle,
119                                                   PVRSRV_HANDLE_TYPE eType);
120
121         PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE * psBase,
122                                          IMG_HANDLE hHandle,
123                                          PVRSRV_HANDLE_TYPE eType);
124
125         PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE * psBase,
126                                           IMG_UINT32 ui32BatchSize);
127
128         PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE * psBase);
129
130         void PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE * psBase);
131
132         PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE ** ppsBase,
133                                            IMG_UINT32 ui32PID);
134
135         PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE * psBase);
136
137         PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID);
138
139         PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID);
140
141 #else
142
143 #define KERNEL_HANDLE_BASE IMG_NULL
144
145 #ifdef INLINE_IS_PRAGMA
146 #pragma inline(PVRSRVAllocHandle)
147 #endif
148         static INLINE
149             PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE * psBase,
150                                            IMG_HANDLE * phHandle,
151                                            IMG_VOID * pvData,
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);
157
158                 *phHandle = pvData;
159                 return PVRSRV_OK;
160         }
161 #ifdef INLINE_IS_PRAGMA
162 #pragma inline(PVRSRVAllocSubHandle)
163 #endif
164         static INLINE
165             PVRSRV_ERROR PVRSRVAllocSubHandle(PVRSRV_HANDLE_BASE * psBase,
166                                               IMG_HANDLE * phHandle,
167                                               IMG_VOID * pvData,
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);
175
176                 *phHandle = pvData;
177                 return PVRSRV_OK;
178         }
179
180 #ifdef INLINE_IS_PRAGMA
181 #pragma inline(PVRSRVFindHandle)
182 #endif
183         static INLINE
184             PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE * psBase,
185                                           IMG_HANDLE * phHandle,
186                                           IMG_VOID * pvData,
187                                           PVRSRV_HANDLE_TYPE eType) {
188                 PVR_UNREFERENCED_PARAMETER(eType);
189                 PVR_UNREFERENCED_PARAMETER(psBase);
190
191                 *phHandle = pvData;
192                 return PVRSRV_OK;
193         }
194
195 #ifdef INLINE_IS_PRAGMA
196 #pragma inline(PVRSRVLookupHandleAnyType)
197 #endif
198         static INLINE
199             PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE * psBase,
200                                                    IMG_PVOID * ppvData,
201                                                    PVRSRV_HANDLE_TYPE * peType,
202                                                    IMG_HANDLE hHandle) {
203                 PVR_UNREFERENCED_PARAMETER(psBase);
204
205                 *peType = PVRSRV_HANDLE_TYPE_NONE;
206
207                 *ppvData = hHandle;
208                 return PVRSRV_OK;
209         }
210
211 #ifdef INLINE_IS_PRAGMA
212 #pragma inline(PVRSRVLookupHandle)
213 #endif
214         static INLINE
215             PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE * psBase,
216                                             IMG_PVOID * ppvData,
217                                             IMG_HANDLE hHandle,
218                                             PVRSRV_HANDLE_TYPE eType) {
219                 PVR_UNREFERENCED_PARAMETER(psBase);
220                 PVR_UNREFERENCED_PARAMETER(eType);
221
222                 *ppvData = hHandle;
223                 return PVRSRV_OK;
224         }
225
226 #ifdef INLINE_IS_PRAGMA
227 #pragma inline(PVRSRVLookupSubHandle)
228 #endif
229         static INLINE
230             PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE * psBase,
231                                                IMG_PVOID * ppvData,
232                                                IMG_HANDLE hHandle,
233                                                PVRSRV_HANDLE_TYPE eType,
234                                                IMG_HANDLE hAncestor) {
235                 PVR_UNREFERENCED_PARAMETER(psBase);
236                 PVR_UNREFERENCED_PARAMETER(eType);
237                 PVR_UNREFERENCED_PARAMETER(hAncestor);
238
239                 *ppvData = hHandle;
240                 return PVRSRV_OK;
241         }
242
243 #ifdef INLINE_IS_PRAGMA
244 #pragma inline(PVRSRVGetParentHandle)
245 #endif
246         static INLINE
247             PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE * psBase,
248                                                IMG_PVOID * phParent,
249                                                IMG_HANDLE hHandle,
250                                                PVRSRV_HANDLE_TYPE eType) {
251                 PVR_UNREFERENCED_PARAMETER(psBase);
252                 PVR_UNREFERENCED_PARAMETER(eType);
253                 PVR_UNREFERENCED_PARAMETER(hHandle);
254
255                 *phParent = IMG_NULL;
256
257                 return PVRSRV_OK;
258         }
259
260 #ifdef INLINE_IS_PRAGMA
261 #pragma inline(PVRSRVLookupAndReleaseHandle)
262 #endif
263         static INLINE
264             PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *
265                                                       psBase,
266                                                       IMG_PVOID * ppvData,
267                                                       IMG_HANDLE hHandle,
268                                                       PVRSRV_HANDLE_TYPE eType)
269         {
270                 PVR_UNREFERENCED_PARAMETER(eType);
271                 PVR_UNREFERENCED_PARAMETER(psBase);
272
273                 *ppvData = hHandle;
274                 return PVRSRV_OK;
275         }
276
277 #ifdef INLINE_IS_PRAGMA
278 #pragma inline(PVRSRVReleaseHandle)
279 #endif
280         static INLINE
281             PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE * psBase,
282                                              IMG_HANDLE hHandle,
283                                              PVRSRV_HANDLE_TYPE eType) {
284                 PVR_UNREFERENCED_PARAMETER(hHandle);
285                 PVR_UNREFERENCED_PARAMETER(eType);
286                 PVR_UNREFERENCED_PARAMETER(psBase);
287
288                 return PVRSRV_OK;
289         }
290
291 #ifdef INLINE_IS_PRAGMA
292 #pragma inline(PVRSRVNewHandleBatch)
293 #endif
294         static INLINE
295             PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE * psBase,
296                                               IMG_UINT32 ui32BatchSize) {
297                 PVR_UNREFERENCED_PARAMETER(psBase);
298                 PVR_UNREFERENCED_PARAMETER(ui32BatchSize);
299
300                 return PVRSRV_OK;
301         }
302
303 #ifdef INLINE_IS_PRAGMA
304 #pragma inline(PVRSRVCommitHandleBatch)
305 #endif
306         static INLINE
307             PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE * psBase) {
308                 PVR_UNREFERENCED_PARAMETER(psBase);
309
310                 return PVRSRV_OK;
311         }
312
313 #ifdef INLINE_IS_PRAGMA
314 #pragma inline(PVRSRVReleaseHandleBatch)
315 #endif
316         static INLINE void PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE * psBase) {
317                 PVR_UNREFERENCED_PARAMETER(psBase);
318         }
319
320 #ifdef INLINE_IS_PRAGMA
321 #pragma inline(PVRSRVAllocHandleBase)
322 #endif
323         static INLINE
324             PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE ** ppsBase,
325                                                IMG_UINT32 ui32PID) {
326                 PVR_UNREFERENCED_PARAMETER(ui32PID);
327
328                 *ppsBase = IMG_NULL;
329
330                 return PVRSRV_OK;
331         }
332
333 #ifdef INLINE_IS_PRAGMA
334 #pragma inline(PVRSRVFreeHandleBase)
335 #endif
336         static INLINE
337             PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE * psBase) {
338                 PVR_UNREFERENCED_PARAMETER(psBase);
339
340                 return PVRSRV_OK;
341         }
342
343 #ifdef INLINE_IS_PRAGMA
344 #pragma inline(PVRSRVHandleInit)
345 #endif
346         static INLINE PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID) {
347                 return PVRSRV_OK;
348         }
349
350 #ifdef INLINE_IS_PRAGMA
351 #pragma inline(PVRSRVHandleDeInit)
352 #endif
353         static INLINE PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID) {
354                 return PVRSRV_OK;
355         }
356
357 #endif
358
359 #define PVRSRVAllocHandleNR(psBase, phHandle, pvData, eType, eFlag) \
360         (void)PVRSRVAllocHandle(psBase, phHandle, pvData, eType, eFlag)
361
362 #define PVRSRVAllocSubHandleNR(psBase, phHandle, pvData, eType, eFlag, hParent) \
363         (void)PVRSRVAllocSubHandle(psBase, phHandle, pvData, eType, eFlag, hParent)
364
365 #if defined (__cplusplus)
366 }
367 #endif
368
369 #endif