make driver standalone again
[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 #include "img_types.h"
31 #include "hash.h"
32 #include "resman.h"
33
34 enum PVRSRV_HANDLE_TYPE {
35         PVRSRV_HANDLE_TYPE_NONE = 0,
36         PVRSRV_HANDLE_TYPE_PERPROC_DATA,
37         PVRSRV_HANDLE_TYPE_DEV_NODE,
38         PVRSRV_HANDLE_TYPE_DEV_MEM_CONTEXT,
39         PVRSRV_HANDLE_TYPE_DEV_MEM_HEAP,
40         PVRSRV_HANDLE_TYPE_MEM_INFO,
41         PVRSRV_HANDLE_TYPE_SYNC_INFO,
42         PVRSRV_HANDLE_TYPE_DISP_INFO,
43         PVRSRV_HANDLE_TYPE_DISP_SWAP_CHAIN,
44         PVRSRV_HANDLE_TYPE_BUF_INFO,
45         PVRSRV_HANDLE_TYPE_DISP_BUFFER,
46         PVRSRV_HANDLE_TYPE_BUF_BUFFER,
47         PVRSRV_HANDLE_TYPE_SGX_HW_RENDER_CONTEXT,
48         PVRSRV_HANDLE_TYPE_SGX_HW_TRANSFER_CONTEXT,
49         PVRSRV_HANDLE_TYPE_SGX_HW_2D_CONTEXT,
50         PVRSRV_HANDLE_TYPE_SHARED_PB_DESC,
51         PVRSRV_HANDLE_TYPE_MEM_INFO_REF,
52         PVRSRV_HANDLE_TYPE_SHARED_SYS_MEM_INFO,
53         PVRSRV_HANDLE_TYPE_SHARED_EVENT_OBJECT,
54         PVRSRV_HANDLE_TYPE_EVENT_OBJECT_CONNECT,
55         PVRSRV_HANDLE_TYPE_MMAP_INFO,
56         PVRSRV_HANDLE_TYPE_SOC_TIMER
57 };
58
59 enum PVRSRV_HANDLE_ALLOC_FLAG {
60         PVRSRV_HANDLE_ALLOC_FLAG_NONE = 0,
61
62         PVRSRV_HANDLE_ALLOC_FLAG_SHARED = 0x01,
63
64         PVRSRV_HANDLE_ALLOC_FLAG_MULTI = 0x02,
65
66         PVRSRV_HANDLE_ALLOC_FLAG_PRIVATE = 0x04
67 };
68
69 struct PVRSRV_HANDLE_BASE;
70 struct PVRSRV_HANDLE_BASE;
71
72 extern struct PVRSRV_HANDLE_BASE *gpsKernelHandleBase;
73
74 #define KERNEL_HANDLE_BASE (gpsKernelHandleBase)
75
76 enum PVRSRV_ERROR PVRSRVAllocHandle(struct PVRSRV_HANDLE_BASE *psBase,
77                                void **phHandle, void *pvData,
78                                enum PVRSRV_HANDLE_TYPE eType,
79                                enum PVRSRV_HANDLE_ALLOC_FLAG eFlag);
80
81 enum PVRSRV_ERROR PVRSRVAllocSubHandle(struct PVRSRV_HANDLE_BASE *psBase,
82                                   void **phHandle,
83                                   void *pvData,
84                                   enum PVRSRV_HANDLE_TYPE eType,
85                                   enum PVRSRV_HANDLE_ALLOC_FLAG eFlag,
86                                   void *hParent);
87
88 enum PVRSRV_ERROR PVRSRVFindHandle(struct PVRSRV_HANDLE_BASE *psBase,
89                               void **phHandle, void *pvData,
90                               enum PVRSRV_HANDLE_TYPE eType);
91
92 enum PVRSRV_ERROR PVRSRVLookupHandleAnyType(struct PVRSRV_HANDLE_BASE *psBase,
93                                        void **ppvData,
94                                        enum PVRSRV_HANDLE_TYPE *peType,
95                                        void *hHandle);
96
97 enum PVRSRV_ERROR PVRSRVLookupHandle(struct PVRSRV_HANDLE_BASE *psBase,
98                                 void **ppvData, void *hHandle,
99                                 enum PVRSRV_HANDLE_TYPE eType);
100
101 enum PVRSRV_ERROR PVRSRVLookupSubHandle(struct PVRSRV_HANDLE_BASE *psBase,
102                                 void **ppvData, void *hHandle,
103                                 enum PVRSRV_HANDLE_TYPE eType, void *hAncestor);
104
105 enum PVRSRV_ERROR PVRSRVGetParentHandle(struct PVRSRV_HANDLE_BASE *psBase,
106                                 void **phParent, void *hHandle,
107                                 enum PVRSRV_HANDLE_TYPE eType);
108
109 enum PVRSRV_ERROR PVRSRVLookupAndReleaseHandle(
110                                 struct PVRSRV_HANDLE_BASE *psBase,
111                                 void **ppvData, void *hHandle,
112                                 enum PVRSRV_HANDLE_TYPE eType);
113
114 enum PVRSRV_ERROR PVRSRVReleaseHandle(struct PVRSRV_HANDLE_BASE *psBase,
115                                  void *hHandle,
116                                  enum PVRSRV_HANDLE_TYPE eType);
117
118 enum PVRSRV_ERROR PVRSRVNewHandleBatch(struct PVRSRV_HANDLE_BASE *psBase,
119                                   u32 ui32BatchSize);
120
121 enum PVRSRV_ERROR PVRSRVCommitHandleBatch(struct PVRSRV_HANDLE_BASE *psBase);
122
123 void PVRSRVReleaseHandleBatch(struct PVRSRV_HANDLE_BASE *psBase);
124
125 enum PVRSRV_ERROR PVRSRVSetMaxHandle(struct PVRSRV_HANDLE_BASE *psBase,
126                                      u32 ui32MaxHandle);
127
128 u32 PVRSRVGetMaxHandle(struct PVRSRV_HANDLE_BASE *psBase);
129
130 enum PVRSRV_ERROR PVRSRVEnableHandlePurging(struct PVRSRV_HANDLE_BASE *psBase);
131
132 enum PVRSRV_ERROR PVRSRVPurgeHandles(struct PVRSRV_HANDLE_BASE *psBase);
133
134 enum PVRSRV_ERROR PVRSRVAllocHandleBase(struct PVRSRV_HANDLE_BASE **ppsBase);
135
136 enum PVRSRV_ERROR PVRSRVFreeHandleBase(struct PVRSRV_HANDLE_BASE *psBase);
137
138 enum PVRSRV_ERROR PVRSRVHandleInit(void);
139
140 enum PVRSRV_ERROR PVRSRVHandleDeInit(void);
141
142
143 #define PVRSRVAllocHandleNR(psBase, phHandle, pvData, eType, eFlag) \
144     (void)PVRSRVAllocHandle(psBase, phHandle, pvData, eType, eFlag)
145
146 #define PVRSRVAllocSubHandleNR(psBase, phHandle, pvData, eType, eFlag, hParent)\
147         (void)PVRSRVAllocSubHandle(psBase, phHandle, pvData, eType, \
148                                    eFlag, hParent)
149
150 #endif