diff options
Diffstat (limited to 'drivers/gpu/pvr/device.h')
-rw-r--r-- | drivers/gpu/pvr/device.h | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/drivers/gpu/pvr/device.h b/drivers/gpu/pvr/device.h new file mode 100644 index 00000000000..2488aa9de36 --- /dev/null +++ b/drivers/gpu/pvr/device.h | |||
@@ -0,0 +1,316 @@ | |||
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 __DEVICE_H__ | ||
28 | #define __DEVICE_H__ | ||
29 | |||
30 | #if defined(__cplusplus) | ||
31 | extern "C" { | ||
32 | #endif | ||
33 | |||
34 | #include "ra.h" | ||
35 | #include "resman.h" | ||
36 | |||
37 | typedef struct _BM_CONTEXT_ BM_CONTEXT; | ||
38 | |||
39 | typedef struct _MMU_HEAP_ MMU_HEAP; | ||
40 | typedef struct _MMU_CONTEXT_ MMU_CONTEXT; | ||
41 | |||
42 | #define PVRSRV_BACKINGSTORE_SYSMEM_CONTIG (1<<(PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT+0)) | ||
43 | #define PVRSRV_BACKINGSTORE_SYSMEM_NONCONTIG (1<<(PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT+1)) | ||
44 | #define PVRSRV_BACKINGSTORE_LOCALMEM_CONTIG (1<<(PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT+2)) | ||
45 | #define PVRSRV_BACKINGSTORE_LOCALMEM_NONCONTIG (1<<(PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT+3)) | ||
46 | |||
47 | typedef IMG_UINT32 DEVICE_MEMORY_HEAP_TYPE; | ||
48 | #define DEVICE_MEMORY_HEAP_PERCONTEXT 0 | ||
49 | #define DEVICE_MEMORY_HEAP_KERNEL 1 | ||
50 | #define DEVICE_MEMORY_HEAP_SHARED 2 | ||
51 | #define DEVICE_MEMORY_HEAP_SHARED_EXPORTED 3 | ||
52 | |||
53 | #define PVRSRV_DEVICE_NODE_FLAGS_PORT80DISPLAY 1 | ||
54 | #define PVRSRV_DEVICE_NODE_FLAGS_MMU_OPT_INV 2 | ||
55 | |||
56 | typedef struct _DEVICE_MEMORY_HEAP_INFO_ | ||
57 | { | ||
58 | |||
59 | IMG_UINT32 ui32HeapID; | ||
60 | |||
61 | |||
62 | IMG_CHAR *pszName; | ||
63 | |||
64 | |||
65 | IMG_CHAR *pszBSName; | ||
66 | |||
67 | |||
68 | IMG_DEV_VIRTADDR sDevVAddrBase; | ||
69 | |||
70 | |||
71 | IMG_UINT32 ui32HeapSize; | ||
72 | |||
73 | |||
74 | IMG_UINT32 ui32Attribs; | ||
75 | |||
76 | |||
77 | DEVICE_MEMORY_HEAP_TYPE DevMemHeapType; | ||
78 | |||
79 | |||
80 | IMG_HANDLE hDevMemHeap; | ||
81 | |||
82 | |||
83 | RA_ARENA *psLocalDevMemArena; | ||
84 | |||
85 | |||
86 | IMG_UINT32 ui32DataPageSize; | ||
87 | |||
88 | IMG_UINT32 ui32XTileStride; | ||
89 | |||
90 | } DEVICE_MEMORY_HEAP_INFO; | ||
91 | |||
92 | typedef struct _DEVICE_MEMORY_INFO_ | ||
93 | { | ||
94 | |||
95 | IMG_UINT32 ui32AddressSpaceSizeLog2; | ||
96 | |||
97 | |||
98 | |||
99 | |||
100 | IMG_UINT32 ui32Flags; | ||
101 | |||
102 | |||
103 | IMG_UINT32 ui32HeapCount; | ||
104 | |||
105 | |||
106 | IMG_UINT32 ui32SyncHeapID; | ||
107 | |||
108 | |||
109 | IMG_UINT32 ui32MappingHeapID; | ||
110 | |||
111 | |||
112 | DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeap; | ||
113 | |||
114 | |||
115 | BM_CONTEXT *pBMKernelContext; | ||
116 | |||
117 | |||
118 | BM_CONTEXT *pBMContext; | ||
119 | |||
120 | } DEVICE_MEMORY_INFO; | ||
121 | |||
122 | |||
123 | typedef struct DEV_ARENA_DESCRIPTOR_TAG | ||
124 | { | ||
125 | IMG_UINT32 ui32HeapID; | ||
126 | |||
127 | IMG_CHAR *pszName; | ||
128 | |||
129 | IMG_DEV_VIRTADDR BaseDevVAddr; | ||
130 | |||
131 | IMG_UINT32 ui32Size; | ||
132 | |||
133 | DEVICE_MEMORY_HEAP_TYPE DevMemHeapType; | ||
134 | |||
135 | |||
136 | IMG_UINT32 ui32DataPageSize; | ||
137 | |||
138 | DEVICE_MEMORY_HEAP_INFO *psDeviceMemoryHeapInfo; | ||
139 | |||
140 | } DEV_ARENA_DESCRIPTOR; | ||
141 | |||
142 | |||
143 | typedef struct _PDUMP_MMU_ATTRIB_ | ||
144 | { | ||
145 | PVRSRV_DEVICE_IDENTIFIER sDevId; | ||
146 | |||
147 | IMG_CHAR *pszPDRegRegion; | ||
148 | |||
149 | |||
150 | IMG_UINT32 ui32DataPageMask; | ||
151 | |||
152 | |||
153 | IMG_UINT32 ui32PTEValid; | ||
154 | IMG_UINT32 ui32PTSize; | ||
155 | IMG_UINT32 ui32PTEAlignShift; | ||
156 | |||
157 | |||
158 | IMG_UINT32 ui32PDEMask; | ||
159 | IMG_UINT32 ui32PDEAlignShift; | ||
160 | |||
161 | } PDUMP_MMU_ATTRIB; | ||
162 | |||
163 | typedef struct _SYS_DATA_TAG_ *PSYS_DATA; | ||
164 | |||
165 | typedef struct _PVRSRV_DEVICE_NODE_ | ||
166 | { | ||
167 | PVRSRV_DEVICE_IDENTIFIER sDevId; | ||
168 | IMG_UINT32 ui32RefCount; | ||
169 | |||
170 | |||
171 | |||
172 | |||
173 | PVRSRV_ERROR (*pfnInitDevice) (IMG_VOID*); | ||
174 | |||
175 | PVRSRV_ERROR (*pfnDeInitDevice) (IMG_VOID*); | ||
176 | |||
177 | |||
178 | PVRSRV_ERROR (*pfnInitDeviceCompatCheck) (struct _PVRSRV_DEVICE_NODE_*); | ||
179 | |||
180 | |||
181 | PVRSRV_ERROR (*pfnMMUInitialise)(struct _PVRSRV_DEVICE_NODE_*, MMU_CONTEXT**, IMG_DEV_PHYADDR*); | ||
182 | IMG_VOID (*pfnMMUFinalise)(MMU_CONTEXT*); | ||
183 | IMG_VOID (*pfnMMUInsertHeap)(MMU_CONTEXT*, MMU_HEAP*); | ||
184 | MMU_HEAP* (*pfnMMUCreate)(MMU_CONTEXT*,DEV_ARENA_DESCRIPTOR*,RA_ARENA**,PDUMP_MMU_ATTRIB **ppsMMUAttrib); | ||
185 | IMG_VOID (*pfnMMUDelete)(MMU_HEAP*); | ||
186 | IMG_BOOL (*pfnMMUAlloc)(MMU_HEAP*pMMU, | ||
187 | IMG_SIZE_T uSize, | ||
188 | IMG_SIZE_T *pActualSize, | ||
189 | IMG_UINT32 uFlags, | ||
190 | IMG_UINT32 uDevVAddrAlignment, | ||
191 | IMG_DEV_VIRTADDR *pDevVAddr); | ||
192 | IMG_VOID (*pfnMMUFree)(MMU_HEAP*,IMG_DEV_VIRTADDR,IMG_UINT32); | ||
193 | IMG_VOID (*pfnMMUEnable)(MMU_HEAP*); | ||
194 | IMG_VOID (*pfnMMUDisable)(MMU_HEAP*); | ||
195 | IMG_VOID (*pfnMMUMapPages)(MMU_HEAP *pMMU, | ||
196 | IMG_DEV_VIRTADDR devVAddr, | ||
197 | IMG_SYS_PHYADDR SysPAddr, | ||
198 | IMG_SIZE_T uSize, | ||
199 | IMG_UINT32 ui32MemFlags, | ||
200 | IMG_HANDLE hUniqueTag); | ||
201 | IMG_VOID (*pfnMMUMapShadow)(MMU_HEAP *pMMU, | ||
202 | IMG_DEV_VIRTADDR MapBaseDevVAddr, | ||
203 | IMG_SIZE_T uSize, | ||
204 | IMG_CPU_VIRTADDR CpuVAddr, | ||
205 | IMG_HANDLE hOSMemHandle, | ||
206 | IMG_DEV_VIRTADDR *pDevVAddr, | ||
207 | IMG_UINT32 ui32MemFlags, | ||
208 | IMG_HANDLE hUniqueTag); | ||
209 | IMG_VOID (*pfnMMUUnmapPages)(MMU_HEAP *pMMU, | ||
210 | IMG_DEV_VIRTADDR dev_vaddr, | ||
211 | IMG_UINT32 ui32PageCount, | ||
212 | IMG_HANDLE hUniqueTag); | ||
213 | |||
214 | IMG_VOID (*pfnMMUMapScatter)(MMU_HEAP *pMMU, | ||
215 | IMG_DEV_VIRTADDR DevVAddr, | ||
216 | IMG_SYS_PHYADDR *psSysAddr, | ||
217 | IMG_SIZE_T uSize, | ||
218 | IMG_UINT32 ui32MemFlags, | ||
219 | IMG_HANDLE hUniqueTag); | ||
220 | |||
221 | IMG_DEV_PHYADDR (*pfnMMUGetPhysPageAddr)(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR sDevVPageAddr); | ||
222 | IMG_DEV_PHYADDR (*pfnMMUGetPDDevPAddr)(MMU_CONTEXT *pMMUContext); | ||
223 | |||
224 | |||
225 | PVRSRV_ERROR (*pfnAllocMemTilingRange)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode, | ||
226 | PVRSRV_KERNEL_MEM_INFO *psMemInfo, | ||
227 | IMG_UINT32 ui32TilingStride, | ||
228 | IMG_UINT32 *pui32RangeIndex); | ||
229 | PVRSRV_ERROR (*pfnFreeMemTilingRange)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode, | ||
230 | IMG_UINT32 ui32RangeIndex); | ||
231 | |||
232 | |||
233 | IMG_BOOL (*pfnDeviceISR)(IMG_VOID*); | ||
234 | |||
235 | IMG_VOID *pvISRData; | ||
236 | |||
237 | IMG_UINT32 ui32SOCInterruptBit; | ||
238 | |||
239 | IMG_VOID (*pfnDeviceMISR)(IMG_VOID*); | ||
240 | |||
241 | |||
242 | IMG_VOID (*pfnDeviceCommandComplete)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); | ||
243 | |||
244 | IMG_BOOL bReProcessDeviceCommandComplete; | ||
245 | |||
246 | |||
247 | DEVICE_MEMORY_INFO sDevMemoryInfo; | ||
248 | |||
249 | |||
250 | IMG_VOID *pvDevice; | ||
251 | IMG_UINT32 ui32pvDeviceSize; | ||
252 | |||
253 | |||
254 | PRESMAN_CONTEXT hResManContext; | ||
255 | |||
256 | |||
257 | PSYS_DATA psSysData; | ||
258 | |||
259 | |||
260 | RA_ARENA *psLocalDevMemArena; | ||
261 | |||
262 | IMG_UINT32 ui32Flags; | ||
263 | |||
264 | struct _PVRSRV_DEVICE_NODE_ *psNext; | ||
265 | struct _PVRSRV_DEVICE_NODE_ **ppsThis; | ||
266 | |||
267 | #if defined(PDUMP) | ||
268 | |||
269 | PVRSRV_ERROR (*pfnPDumpInitDevice)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode); | ||
270 | |||
271 | IMG_UINT32 (*pfnMMUGetContextID)(IMG_HANDLE hDevMemContext); | ||
272 | #endif | ||
273 | } PVRSRV_DEVICE_NODE; | ||
274 | |||
275 | PVRSRV_ERROR IMG_CALLCONV PVRSRVRegisterDevice(PSYS_DATA psSysData, | ||
276 | PVRSRV_ERROR (*pfnRegisterDevice)(PVRSRV_DEVICE_NODE*), | ||
277 | IMG_UINT32 ui32SOCInterruptBit, | ||
278 | IMG_UINT32 *pui32DeviceIndex ); | ||
279 | |||
280 | PVRSRV_ERROR IMG_CALLCONV PVRSRVInitialiseDevice(IMG_UINT32 ui32DevIndex); | ||
281 | PVRSRV_ERROR IMG_CALLCONV PVRSRVFinaliseSystem(IMG_BOOL bInitSuccesful); | ||
282 | |||
283 | PVRSRV_ERROR IMG_CALLCONV PVRSRVDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode); | ||
284 | |||
285 | PVRSRV_ERROR IMG_CALLCONV PVRSRVDeinitialiseDevice(IMG_UINT32 ui32DevIndex); | ||
286 | |||
287 | #if !defined(USE_CODE) | ||
288 | |||
289 | IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PollForValueKM(volatile IMG_UINT32* pui32LinMemAddr, | ||
290 | IMG_UINT32 ui32Value, | ||
291 | IMG_UINT32 ui32Mask, | ||
292 | IMG_UINT32 ui32Waitus, | ||
293 | IMG_UINT32 ui32Tries); | ||
294 | |||
295 | #endif | ||
296 | |||
297 | |||
298 | #if defined (USING_ISR_INTERRUPTS) | ||
299 | PVRSRV_ERROR IMG_CALLCONV PollForInterruptKM(IMG_UINT32 ui32Value, | ||
300 | IMG_UINT32 ui32Mask, | ||
301 | IMG_UINT32 ui32Waitus, | ||
302 | IMG_UINT32 ui32Tries); | ||
303 | #endif | ||
304 | |||
305 | PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData); | ||
306 | IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData); | ||
307 | IMG_BOOL IMG_CALLCONV PVRSRVDeviceLISR(PVRSRV_DEVICE_NODE *psDeviceNode); | ||
308 | IMG_BOOL IMG_CALLCONV PVRSRVSystemLISR(IMG_VOID *pvSysData); | ||
309 | IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData); | ||
310 | |||
311 | #if defined(__cplusplus) | ||
312 | } | ||
313 | #endif | ||
314 | |||
315 | #endif | ||
316 | |||