aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/pvr/buffer_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/pvr/buffer_manager.h')
-rw-r--r--drivers/gpu/pvr/buffer_manager.h210
1 files changed, 210 insertions, 0 deletions
diff --git a/drivers/gpu/pvr/buffer_manager.h b/drivers/gpu/pvr/buffer_manager.h
new file mode 100644
index 00000000000..1467cd3939f
--- /dev/null
+++ b/drivers/gpu/pvr/buffer_manager.h
@@ -0,0 +1,210 @@
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 _BUFFER_MANAGER_H_
28#define _BUFFER_MANAGER_H_
29
30#include "img_types.h"
31#include "ra.h"
32#include "perproc.h"
33
34#if defined(__cplusplus)
35extern "C"{
36#endif
37
38typedef struct _BM_HEAP_ BM_HEAP;
39
40struct _BM_MAPPING_
41{
42 enum
43 {
44 hm_wrapped = 1,
45 hm_wrapped_scatter,
46 hm_wrapped_virtaddr,
47 hm_wrapped_scatter_virtaddr,
48 hm_env,
49 hm_contiguous
50 } eCpuMemoryOrigin;
51
52 BM_HEAP *pBMHeap;
53 RA_ARENA *pArena;
54
55 IMG_CPU_VIRTADDR CpuVAddr;
56 IMG_CPU_PHYADDR CpuPAddr;
57 IMG_DEV_VIRTADDR DevVAddr;
58 IMG_SYS_PHYADDR *psSysAddr;
59 IMG_SIZE_T uSize;
60 IMG_HANDLE hOSMemHandle;
61 IMG_UINT32 ui32Flags;
62};
63
64typedef struct _BM_BUF_
65{
66 IMG_CPU_VIRTADDR *CpuVAddr;
67 IMG_VOID *hOSMemHandle;
68 IMG_CPU_PHYADDR CpuPAddr;
69 IMG_DEV_VIRTADDR DevVAddr;
70
71 BM_MAPPING *pMapping;
72 IMG_UINT32 ui32RefCount;
73 IMG_UINT32 ui32ExportCount;
74} BM_BUF;
75
76struct _BM_HEAP_
77{
78 IMG_UINT32 ui32Attribs;
79 BM_CONTEXT *pBMContext;
80 RA_ARENA *pImportArena;
81 RA_ARENA *pLocalDevMemArena;
82 RA_ARENA *pVMArena;
83 DEV_ARENA_DESCRIPTOR sDevArena;
84 MMU_HEAP *pMMUHeap;
85 PDUMP_MMU_ATTRIB *psMMUAttrib;
86
87 struct _BM_HEAP_ *psNext;
88 struct _BM_HEAP_ **ppsThis;
89};
90
91struct _BM_CONTEXT_
92{
93 MMU_CONTEXT *psMMUContext;
94
95
96 BM_HEAP *psBMHeap;
97
98
99 BM_HEAP *psBMSharedHeap;
100
101 PVRSRV_DEVICE_NODE *psDeviceNode;
102
103
104 HASH_TABLE *pBufferHash;
105
106
107 IMG_HANDLE hResItem;
108
109 IMG_UINT32 ui32RefCount;
110
111
112
113 struct _BM_CONTEXT_ *psNext;
114 struct _BM_CONTEXT_ **ppsThis;
115};
116
117
118
119typedef IMG_VOID *BM_HANDLE;
120
121#define BP_POOL_MASK 0x7
122
123#define BP_CONTIGUOUS (1 << 3)
124#define BP_PARAMBUFFER (1 << 4)
125
126#define BM_MAX_DEVMEM_ARENAS 2
127
128IMG_HANDLE
129BM_CreateContext(PVRSRV_DEVICE_NODE *psDeviceNode,
130 IMG_DEV_PHYADDR *psPDDevPAddr,
131 PVRSRV_PER_PROCESS_DATA *psPerProc,
132 IMG_BOOL *pbCreated);
133
134
135PVRSRV_ERROR
136BM_DestroyContext (IMG_HANDLE hBMContext,
137 IMG_BOOL *pbCreated);
138
139
140IMG_HANDLE
141BM_CreateHeap (IMG_HANDLE hBMContext,
142 DEVICE_MEMORY_HEAP_INFO *psDevMemHeapInfo);
143
144IMG_VOID
145BM_DestroyHeap (IMG_HANDLE hDevMemHeap);
146
147
148IMG_BOOL
149BM_Reinitialise (PVRSRV_DEVICE_NODE *psDeviceNode);
150
151IMG_BOOL
152BM_Alloc (IMG_HANDLE hDevMemHeap,
153 IMG_DEV_VIRTADDR *psDevVAddr,
154 IMG_SIZE_T uSize,
155 IMG_UINT32 *pui32Flags,
156 IMG_UINT32 uDevVAddrAlignment,
157 BM_HANDLE *phBuf);
158
159IMG_BOOL
160BM_Wrap ( IMG_HANDLE hDevMemHeap,
161 IMG_SIZE_T ui32Size,
162 IMG_SIZE_T ui32Offset,
163 IMG_BOOL bPhysContig,
164 IMG_SYS_PHYADDR *psSysAddr,
165 IMG_VOID *pvCPUVAddr,
166 IMG_UINT32 *pui32Flags,
167 BM_HANDLE *phBuf);
168
169IMG_VOID
170BM_Free (BM_HANDLE hBuf,
171 IMG_UINT32 ui32Flags);
172
173
174IMG_CPU_VIRTADDR
175BM_HandleToCpuVaddr (BM_HANDLE hBuf);
176
177IMG_DEV_VIRTADDR
178BM_HandleToDevVaddr (BM_HANDLE hBuf);
179
180IMG_SYS_PHYADDR
181BM_HandleToSysPaddr (BM_HANDLE hBuf);
182
183IMG_HANDLE
184BM_HandleToOSMemHandle (BM_HANDLE hBuf);
185
186IMG_VOID BM_GetPhysPageAddr(PVRSRV_KERNEL_MEM_INFO *psMemInfo,
187 IMG_DEV_VIRTADDR sDevVPageAddr,
188 IMG_DEV_PHYADDR *psDevPAddr);
189
190MMU_CONTEXT* BM_GetMMUContext(IMG_HANDLE hDevMemHeap);
191
192MMU_CONTEXT* BM_GetMMUContextFromMemContext(IMG_HANDLE hDevMemContext);
193
194IMG_HANDLE BM_GetMMUHeap(IMG_HANDLE hDevMemHeap);
195
196PVRSRV_DEVICE_NODE* BM_GetDeviceNode(IMG_HANDLE hDevMemContext);
197
198
199IMG_HANDLE BM_GetMappingHandle(PVRSRV_KERNEL_MEM_INFO *psMemInfo);
200
201IMG_VOID BM_Export(BM_HANDLE hBuf);
202
203IMG_VOID BM_FreeExport(BM_HANDLE hBuf, IMG_UINT32 ui32Flags);
204
205#if defined(__cplusplus)
206}
207#endif
208
209#endif
210