~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/gpu/pvr/device.h

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/**********************************************************************
 
2
 *
 
3
 * Copyright (C) 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
#if defined(SUPPORT_PDUMP_MULTI_PROCESS)
 
221
        IMG_BOOL                                (*pfnMMUIsHeapShared)(MMU_HEAP *);
 
222
#endif
 
223
        IMG_DEV_PHYADDR                 (*pfnMMUGetPhysPageAddr)(MMU_HEAP *pMMUHeap, IMG_DEV_VIRTADDR sDevVPageAddr);
 
224
        IMG_DEV_PHYADDR                 (*pfnMMUGetPDDevPAddr)(MMU_CONTEXT *pMMUContext);
 
225
        IMG_VOID                                (*pfnMMUGetCacheFlushRange)(MMU_CONTEXT *pMMUContext, IMG_UINT32 *pui32RangeMask);
 
226
        IMG_VOID                                (*pfnMMUGetPDPhysAddr)(MMU_CONTEXT *pMMUContext, IMG_DEV_PHYADDR *psDevPAddr);
 
227
 
 
228
        
 
229
        PVRSRV_ERROR                    (*pfnAllocMemTilingRange)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode,
 
230
                                                                                                                PVRSRV_KERNEL_MEM_INFO *psMemInfo,
 
231
                                                                                                                IMG_UINT32 ui32TilingStride,
 
232
                                                                                                                IMG_UINT32 *pui32RangeIndex);
 
233
        PVRSRV_ERROR                    (*pfnFreeMemTilingRange)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode,
 
234
                                                                                                                IMG_UINT32 ui32RangeIndex);
 
235
 
 
236
        
 
237
        IMG_BOOL                                (*pfnDeviceISR)(IMG_VOID*);
 
238
        
 
239
        IMG_VOID                                *pvISRData;
 
240
        
 
241
        IMG_UINT32                              ui32SOCInterruptBit;
 
242
        
 
243
        IMG_VOID                                (*pfnDeviceMISR)(IMG_VOID*);
 
244
 
 
245
        
 
246
        IMG_VOID                                (*pfnDeviceCommandComplete)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode);
 
247
        
 
248
        IMG_BOOL                                bReProcessDeviceCommandComplete;
 
249
 
 
250
        IMG_VOID                                (*pfnCacheInvalidate)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode);
 
251
 
 
252
        
 
253
        DEVICE_MEMORY_INFO              sDevMemoryInfo;
 
254
 
 
255
        
 
256
        IMG_VOID                                *pvDevice;
 
257
        IMG_UINT32                              ui32pvDeviceSize; 
 
258
                
 
259
        
 
260
        PRESMAN_CONTEXT                 hResManContext;
 
261
        
 
262
        
 
263
        PSYS_DATA                               psSysData;
 
264
        
 
265
        
 
266
        RA_ARENA                                *psLocalDevMemArena;
 
267
        
 
268
        IMG_UINT32                              ui32Flags;
 
269
        
 
270
        struct _PVRSRV_DEVICE_NODE_     *psNext;
 
271
        struct _PVRSRV_DEVICE_NODE_     **ppsThis;
 
272
        
 
273
#if defined(PDUMP)
 
274
        
 
275
        PVRSRV_ERROR                    (*pfnPDumpInitDevice)(struct _PVRSRV_DEVICE_NODE_ *psDeviceNode);
 
276
        
 
277
        IMG_UINT32                              (*pfnMMUGetContextID)(IMG_HANDLE hDevMemContext);
 
278
#endif
 
279
} PVRSRV_DEVICE_NODE;
 
280
 
 
281
PVRSRV_ERROR IMG_CALLCONV PVRSRVRegisterDevice(PSYS_DATA psSysData,
 
282
                                                                                          PVRSRV_ERROR (*pfnRegisterDevice)(PVRSRV_DEVICE_NODE*),
 
283
                                                                                          IMG_UINT32 ui32SOCInterruptBit,
 
284
                                                                                          IMG_UINT32 *pui32DeviceIndex );
 
285
 
 
286
PVRSRV_ERROR IMG_CALLCONV PVRSRVInitialiseDevice(IMG_UINT32 ui32DevIndex);
 
287
PVRSRV_ERROR IMG_CALLCONV PVRSRVFinaliseSystem(IMG_BOOL bInitSuccesful);
 
288
 
 
289
PVRSRV_ERROR IMG_CALLCONV PVRSRVDevInitCompatCheck(PVRSRV_DEVICE_NODE *psDeviceNode);
 
290
 
 
291
PVRSRV_ERROR IMG_CALLCONV PVRSRVDeinitialiseDevice(IMG_UINT32 ui32DevIndex);
 
292
 
 
293
#if !defined(USE_CODE)
 
294
 
 
295
IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PollForValueKM(volatile IMG_UINT32*        pui32LinMemAddr,
 
296
                                                                                                        IMG_UINT32                              ui32Value,
 
297
                                                                                                        IMG_UINT32                              ui32Mask,
 
298
                                                                                                        IMG_UINT32                              ui32Timeoutus,
 
299
                                                                                                        IMG_UINT32                              ui32PollPeriodus,
 
300
                                                                                                        IMG_BOOL                                bAllowPreemption);
 
301
 
 
302
#endif 
 
303
 
 
304
 
 
305
#if defined (USING_ISR_INTERRUPTS)
 
306
PVRSRV_ERROR IMG_CALLCONV PollForInterruptKM(IMG_UINT32 ui32Value,
 
307
                                                                IMG_UINT32 ui32Mask,
 
308
                                                                IMG_UINT32 ui32Waitus,
 
309
                                                                IMG_UINT32 ui32Tries);
 
310
#endif 
 
311
 
 
312
PVRSRV_ERROR IMG_CALLCONV PVRSRVInit(PSYS_DATA psSysData);
 
313
IMG_VOID IMG_CALLCONV PVRSRVDeInit(PSYS_DATA psSysData);
 
314
IMG_BOOL IMG_CALLCONV PVRSRVDeviceLISR(PVRSRV_DEVICE_NODE *psDeviceNode);
 
315
IMG_BOOL IMG_CALLCONV PVRSRVSystemLISR(IMG_VOID *pvSysData);
 
316
IMG_VOID IMG_CALLCONV PVRSRVMISR(IMG_VOID *pvSysData);
 
317
 
 
318
#if defined(__cplusplus)
 
319
}
 
320
#endif
 
321
        
 
322
#endif 
 
323