packaging: update the changelog
[profile/ivi/intel-emgd-kmod.git] / pvr / services4 / srvkm / include / handle.h
1 /**********************************************************************
2  Copyright (c) Imagination Technologies Ltd.
3
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:
10
11  The above copyright notice and this permission notice shall be included in
12  all copies or substantial portions of the Software.
13
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
20  THE SOFTWARE.
21  ******************************************************************************/
22
23 #ifndef __HANDLE_H__
24 #define __HANDLE_H__
25
26 #if defined (__cplusplus)
27 extern "C" {
28 #endif
29
30 #include "img_types.h"
31 #include "hash.h"
32 #include "resman.h"
33
34 typedef enum
35 {
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
58 } PVRSRV_HANDLE_TYPE;
59
60 typedef enum
61 {
62
63         PVRSRV_HANDLE_ALLOC_FLAG_NONE =                 0,
64
65         PVRSRV_HANDLE_ALLOC_FLAG_SHARED =               0x01,
66
67         PVRSRV_HANDLE_ALLOC_FLAG_MULTI =                0x02,
68
69         PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE =              0x04
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, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag);
81
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);
83
84 PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType);
85
86 PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle);
87
88 PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType);
89
90 PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor);
91
92 PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType);
93
94 PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType);
95
96 PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType);
97
98 PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32BatchSize);
99
100 PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE *psBase);
101
102 IMG_VOID PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE *psBase);
103
104 PVRSRV_ERROR PVRSRVSetMaxHandle(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32MaxHandle);
105
106 IMG_UINT32 PVRSRVGetMaxHandle(PVRSRV_HANDLE_BASE *psBase);
107
108 PVRSRV_ERROR PVRSRVEnableHandlePurging(PVRSRV_HANDLE_BASE *psBase);
109
110 PVRSRV_ERROR PVRSRVPurgeHandles(PVRSRV_HANDLE_BASE *psBase);
111
112 PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE **ppsBase);
113
114 PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE *psBase);
115
116 PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID);
117
118 PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID);
119
120 #else
121
122 #define KERNEL_HANDLE_BASE IMG_NULL
123
124 #ifdef INLINE_IS_PRAGMA
125 #pragma inline(PVRSRVAllocHandle)
126 #endif
127 static INLINE
128 PVRSRV_ERROR PVRSRVAllocHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType, PVRSRV_HANDLE_ALLOC_FLAG eFlag)
129 {
130         PVR_UNREFERENCED_PARAMETER(eType);
131         PVR_UNREFERENCED_PARAMETER(eFlag);
132         PVR_UNREFERENCED_PARAMETER(psBase);
133
134         *phHandle = pvData;
135         return PVRSRV_OK;
136 }
137
138 #ifdef INLINE_IS_PRAGMA
139 #pragma inline(PVRSRVAllocSubHandle)
140 #endif
141 static INLINE
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)
143 {
144         PVR_UNREFERENCED_PARAMETER(eType);
145         PVR_UNREFERENCED_PARAMETER(eFlag);
146         PVR_UNREFERENCED_PARAMETER(hParent);
147         PVR_UNREFERENCED_PARAMETER(psBase);
148
149         *phHandle = pvData;
150         return PVRSRV_OK;
151 }
152
153 #ifdef INLINE_IS_PRAGMA
154 #pragma inline(PVRSRVFindHandle)
155 #endif
156 static INLINE
157 PVRSRV_ERROR PVRSRVFindHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE *phHandle, IMG_VOID *pvData, PVRSRV_HANDLE_TYPE eType)
158 {
159         PVR_UNREFERENCED_PARAMETER(eType);
160         PVR_UNREFERENCED_PARAMETER(psBase);
161
162         *phHandle = pvData;
163         return PVRSRV_OK;
164 }
165
166 #ifdef INLINE_IS_PRAGMA
167 #pragma inline(PVRSRVLookupHandleAnyType)
168 #endif
169 static INLINE
170 PVRSRV_ERROR PVRSRVLookupHandleAnyType(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, PVRSRV_HANDLE_TYPE *peType, IMG_HANDLE hHandle)
171 {
172         PVR_UNREFERENCED_PARAMETER(psBase);
173
174         *peType = PVRSRV_HANDLE_TYPE_NONE;
175
176         *ppvData = hHandle;
177         return PVRSRV_OK;
178 }
179
180 #ifdef INLINE_IS_PRAGMA
181 #pragma inline(PVRSRVLookupHandle)
182 #endif
183 static INLINE
184 PVRSRV_ERROR PVRSRVLookupHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType)
185 {
186         PVR_UNREFERENCED_PARAMETER(psBase);
187         PVR_UNREFERENCED_PARAMETER(eType);
188
189         *ppvData = hHandle;
190         return PVRSRV_OK;
191 }
192
193 #ifdef INLINE_IS_PRAGMA
194 #pragma inline(PVRSRVLookupSubHandle)
195 #endif
196 static INLINE
197 PVRSRV_ERROR PVRSRVLookupSubHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType, IMG_HANDLE hAncestor)
198 {
199         PVR_UNREFERENCED_PARAMETER(psBase);
200         PVR_UNREFERENCED_PARAMETER(eType);
201         PVR_UNREFERENCED_PARAMETER(hAncestor);
202
203         *ppvData = hHandle;
204         return PVRSRV_OK;
205 }
206
207 #ifdef INLINE_IS_PRAGMA
208 #pragma inline(PVRSRVGetParentHandle)
209 #endif
210 static INLINE
211 PVRSRV_ERROR PVRSRVGetParentHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *phParent, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType)
212 {
213         PVR_UNREFERENCED_PARAMETER(psBase);
214         PVR_UNREFERENCED_PARAMETER(eType);
215         PVR_UNREFERENCED_PARAMETER(hHandle);
216
217         *phParent = IMG_NULL;
218
219         return PVRSRV_OK;
220 }
221
222 #ifdef INLINE_IS_PRAGMA
223 #pragma inline(PVRSRVLookupAndReleaseHandle)
224 #endif
225 static INLINE
226 PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_PVOID *ppvData, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType)
227 {
228         PVR_UNREFERENCED_PARAMETER(eType);
229         PVR_UNREFERENCED_PARAMETER(psBase);
230
231         *ppvData = hHandle;
232         return PVRSRV_OK;
233 }
234
235 #ifdef INLINE_IS_PRAGMA
236 #pragma inline(PVRSRVReleaseHandle)
237 #endif
238 static INLINE
239 PVRSRV_ERROR PVRSRVReleaseHandle(PVRSRV_HANDLE_BASE *psBase, IMG_HANDLE hHandle, PVRSRV_HANDLE_TYPE eType)
240 {
241         PVR_UNREFERENCED_PARAMETER(hHandle);
242         PVR_UNREFERENCED_PARAMETER(eType);
243         PVR_UNREFERENCED_PARAMETER(psBase);
244
245         return PVRSRV_OK;
246 }
247
248 #ifdef INLINE_IS_PRAGMA
249 #pragma inline(PVRSRVNewHandleBatch)
250 #endif
251 static INLINE
252 PVRSRV_ERROR PVRSRVNewHandleBatch(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32BatchSize)
253 {
254         PVR_UNREFERENCED_PARAMETER(psBase);
255         PVR_UNREFERENCED_PARAMETER(ui32BatchSize);
256
257         return PVRSRV_OK;
258 }
259
260 #ifdef INLINE_IS_PRAGMA
261 #pragma inline(PVRSRVCommitHandleBatch)
262 #endif
263 static INLINE
264 PVRSRV_ERROR PVRSRVCommitHandleBatch(PVRSRV_HANDLE_BASE *psBase)
265 {
266         PVR_UNREFERENCED_PARAMETER(psBase);
267
268         return PVRSRV_OK;
269 }
270
271 #ifdef INLINE_IS_PRAGMA
272 #pragma inline(PVRSRVReleaseHandleBatch)
273 #endif
274 static INLINE
275 IMG_VOID PVRSRVReleaseHandleBatch(PVRSRV_HANDLE_BASE *psBase)
276 {
277         PVR_UNREFERENCED_PARAMETER(psBase);
278 }
279
280 #ifdef INLINE_IS_PRAGMA
281 #pragma inline(PVRSRVSetMaxHandle)
282 #endif
283 static INLINE
284 PVRSRV_ERROR PVRSRVSetMaxHandle(PVRSRV_HANDLE_BASE *psBase, IMG_UINT32 ui32MaxHandle)
285 {
286         PVR_UNREFERENCED_PARAMETER(psBase);
287         PVR_UNREFERENCED_PARAMETER(ui32MaxHandle);
288
289         return PVRSRV_ERROR_NOT_SUPPORTED;
290 }
291
292 #ifdef INLINE_IS_PRAGMA
293 #pragma inline(PVRSRVGetMaxHandle)
294 #endif
295 static INLINE
296 IMG_UINT32 PVRSRVGetMaxHandle(PVRSRV_HANDLE_BASE *psBase)
297 {
298         PVR_UNREFERENCED_PARAMETER(psBase);
299
300         return 0;
301 }
302
303 #ifdef INLINE_IS_PRAGMA
304 #pragma inline(PVRSRVEnableHandlePurging)
305 #endif
306 static INLINE
307 PVRSRV_ERROR PVRSRVEnableHandlePurging(PVRSRV_HANDLE_BASE *psBase)
308 {
309         PVR_UNREFERENCED_PARAMETER(psBase);
310
311         return PVRSRV_OK;
312 }
313
314 #ifdef INLINE_IS_PRAGMA
315 #pragma inline(PVRSRVPurgeHandles)
316 #endif
317 static INLINE
318 PVRSRV_ERROR PVRSRVPurgeHandles(PVRSRV_HANDLE_BASE *psBase)
319 {
320         PVR_UNREFERENCED_PARAMETER(psBase);
321
322         return PVRSRV_OK;
323 }
324
325 #ifdef INLINE_IS_PRAGMA
326 #pragma inline(PVRSRVAllocHandleBase)
327 #endif
328 static INLINE
329 PVRSRV_ERROR PVRSRVAllocHandleBase(PVRSRV_HANDLE_BASE **ppsBase)
330 {
331         *ppsBase = IMG_NULL;
332
333         return PVRSRV_OK;
334 }
335
336 #ifdef INLINE_IS_PRAGMA
337 #pragma inline(PVRSRVFreeHandleBase)
338 #endif
339 static INLINE
340 PVRSRV_ERROR PVRSRVFreeHandleBase(PVRSRV_HANDLE_BASE *psBase)
341 {
342         PVR_UNREFERENCED_PARAMETER(psBase);
343
344         return PVRSRV_OK;
345 }
346
347 #ifdef INLINE_IS_PRAGMA
348 #pragma inline(PVRSRVHandleInit)
349 #endif
350 static INLINE
351 PVRSRV_ERROR PVRSRVHandleInit(IMG_VOID)
352 {
353         return PVRSRV_OK;
354 }
355
356 #ifdef INLINE_IS_PRAGMA
357 #pragma inline(PVRSRVHandleDeInit)
358 #endif
359 static INLINE
360 PVRSRV_ERROR PVRSRVHandleDeInit(IMG_VOID)
361 {
362         return PVRSRV_OK;
363 }
364
365 #endif
366
367 #define PVRSRVAllocHandleNR(psBase, phHandle, pvData, eType, eFlag) \
368         (IMG_VOID)PVRSRVAllocHandle(psBase, phHandle, pvData, eType, eFlag)
369
370 #define PVRSRVAllocSubHandleNR(psBase, phHandle, pvData, eType, eFlag, hParent) \
371         (IMG_VOID)PVRSRVAllocSubHandle(psBase, phHandle, pvData, eType, eFlag, hParent)
372
373 #if defined (__cplusplus)
374 }
375 #endif
376
377 #endif
378