aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/pvr/device.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/pvr/device.h')
-rw-r--r--drivers/gpu/pvr/device.h316
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)
31extern "C" {
32#endif
33
34#include "ra.h"
35#include "resman.h"
36
37typedef struct _BM_CONTEXT_ BM_CONTEXT;
38
39typedef struct _MMU_HEAP_ MMU_HEAP;
40typedef 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
47typedef 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
56typedef 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
92typedef 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
123typedef 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
143typedef 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
163typedef struct _SYS_DATA_TAG_ *PSYS_DATA;
164
165typedef 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
275PVRSRV_ERROR IMG_CALLCONV PVRSRVRegisterDevice(PSYS_DATA psSysData,
276 PVRSRV_ERROR (*pfnRegisterDevice)(PVRSRV_DEVICE_NODE*),
277 IMG_UINT32 ui32SOCInterruptBit,
278 IMG_UINT32 *pui32DeviceIndex );
279
280PVRSRV_ERROR IMG_CALLCONV PVRSRVInitialiseDevice(IMG_UINT32 ui32DevIndex);
281PVRSRV_ERROR IMG_CALLCONV PVRSRVFinaliseSystem(IMG_BOOL bInitSuccesful);
282
283PVRSRV_ERROR IMG_CALLCONV PVRSRVDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode);
284
285PVRSRV_ERROR IMG_CALLCONV PVRSRVDeinitialiseDevice(IMG_UINT32 ui32DevIndex);
286
287#if !defined(USE_CODE)
288
289IMG_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)
299PVRSRV_ERROR IMG_CALLCONV PollForInterruptKM(IMG_UINT32 ui32Value,
300 IMG_UINT32 ui32Mask,
301 IMG_UINT32 ui32Waitus,
302 IMG_UINT32 ui32Tries);
303#endif
304
305PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData);
306IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData);
307IMG_BOOL IMG_CALLCONV PVRSRVDeviceLISR(PVRSRV_DEVICE_NODE *psDeviceNode);
308IMG_BOOL IMG_CALLCONV PVRSRVSystemLISR(IMG_VOID *pvSysData);
309IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData);
310
311#if defined(__cplusplus)
312}
313#endif
314
315#endif
316