[android-sdk/device-ti-proprietary-open.git] / omap5 / sgx_src / eurasia_km / services4 / include / pvr_bridge_km.h
1 /*************************************************************************/ /*!
2 @Title PVR Bridge Functionality
3 @Copyright Copyright (c) Imagination Technologies Ltd. All Rights Reserved
4 @Description Header for the PVR Bridge code
5 @License Dual MIT/GPLv2
7 The contents of this file are subject to the MIT license as set out below.
9 Permission is hereby granted, free of charge, to any person obtaining a copy
10 of this software and associated documentation files (the "Software"), to deal
11 in the Software without restriction, including without limitation the rights
12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
13 copies of the Software, and to permit persons to whom the Software is
14 furnished to do so, subject to the following conditions:
16 The above copyright notice and this permission notice shall be included in
17 all copies or substantial portions of the Software.
19 Alternatively, the contents of this file may be used under the terms of
20 the GNU General Public License Version 2 ("GPL") in which case the provisions
21 of GPL are applicable instead of those above.
23 If you wish to allow use of your version of this file only under the terms of
24 GPL, and not to allow others to use your version of this file under the terms
25 of the MIT license, indicate your decision by deleting the provisions above
26 and replace them with the notice and other provisions required by GPL as set
27 out in the file called "GPL-COPYING" included in this distribution. If you do
28 not delete the provisions above, a recipient may use your version of this file
29 under the terms of either the MIT license or GPL.
31 This License is also included in this distribution in the file called
32 "MIT-COPYING".
34 EXCEPT AS OTHERWISE STATED IN A NEGOTIATED AGREEMENT: (A) THE SOFTWARE IS
35 PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
36 BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
37 PURPOSE AND NONINFRINGEMENT; AND (B) IN NO EVENT SHALL THE AUTHORS OR
38 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
39 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
40 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
41 */ /**************************************************************************/
43 #ifndef __PVR_BRIDGE_KM_H_
44 #define __PVR_BRIDGE_KM_H_
46 #if defined (__cplusplus)
47 extern "C" {
48 #endif
50 #include "pvr_bridge.h"
51 #include "perproc.h"
53 /******************************************************************************
54 * Function prototypes
55 *****************************************************************************/
56 #if defined(__linux__)
57 PVRSRV_ERROR LinuxBridgeInit(IMG_VOID);
58 IMG_VOID LinuxBridgeDeInit(IMG_VOID);
59 #endif
61 IMG_IMPORT
62 PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDevicesKM(IMG_UINT32 *pui32NumDevices,
63 PVRSRV_DEVICE_IDENTIFIER *psDevIdList);
65 IMG_IMPORT
66 PVRSRV_ERROR IMG_CALLCONV PVRSRVAcquireDeviceDataKM(IMG_UINT32 uiDevIndex,
67 PVRSRV_DEVICE_TYPE eDeviceType,
68 IMG_HANDLE *phDevCookie);
70 IMG_IMPORT
71 PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateCommandQueueKM(IMG_SIZE_T ui32QueueSize,
72 PVRSRV_QUEUE_INFO **ppsQueueInfo);
74 IMG_IMPORT
75 PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyCommandQueueKM(PVRSRV_QUEUE_INFO *psQueueInfo);
77 IMG_IMPORT
78 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapsKM(IMG_HANDLE hDevCookie,
79 #if defined (SUPPORT_SID_INTERFACE)
80 PVRSRV_HEAP_INFO_KM *psHeapInfo);
81 #else
82 PVRSRV_HEAP_INFO *psHeapInfo);
83 #endif
85 IMG_IMPORT
86 PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContextKM(IMG_HANDLE hDevCookie,
87 PVRSRV_PER_PROCESS_DATA *psPerProc,
88 IMG_HANDLE *phDevMemContext,
89 IMG_UINT32 *pui32ClientHeapCount,
90 #if defined (SUPPORT_SID_INTERFACE)
91 PVRSRV_HEAP_INFO_KM *psHeapInfo,
92 #else
93 PVRSRV_HEAP_INFO *psHeapInfo,
94 #endif
95 IMG_BOOL *pbCreated,
96 IMG_BOOL *pbShared);
99 IMG_IMPORT
100 PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDeviceMemContextKM(IMG_HANDLE hDevCookie,
101 IMG_HANDLE hDevMemContext,
102 IMG_BOOL *pbDestroyed);
105 IMG_IMPORT
106 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfoKM(IMG_HANDLE hDevCookie,
107 IMG_HANDLE hDevMemContext,
108 IMG_UINT32 *pui32ClientHeapCount,
109 #if defined (SUPPORT_SID_INTERFACE)
110 PVRSRV_HEAP_INFO_KM *psHeapInfo,
111 #else
112 PVRSRV_HEAP_INFO *psHeapInfo,
113 #endif
114 IMG_BOOL *pbShared
115 );
118 IMG_IMPORT
119 PVRSRV_ERROR IMG_CALLCONV _PVRSRVAllocDeviceMemKM(IMG_HANDLE hDevCookie,
120 PVRSRV_PER_PROCESS_DATA *psPerProc,
121 IMG_HANDLE hDevMemHeap,
122 IMG_UINT32 ui32Flags,
123 IMG_SIZE_T ui32Size,
124 IMG_SIZE_T ui32Alignment,
125 IMG_PVOID pvPrivData,
126 IMG_UINT32 ui32PrivDataLength,
127 IMG_UINT32 ui32ChunkSize,
128 IMG_UINT32 ui32NumVirtChunks,
129 IMG_UINT32 ui32NumPhysChunks,
130 IMG_BOOL *pabMapChunk,
131 PVRSRV_KERNEL_MEM_INFO **ppsMemInfo);
134 #if defined(PVRSRV_LOG_MEMORY_ALLOCS)
135 #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, privdata, privdatalength, \
136 chunksize, numvirtchunks, numphyschunks, mapchunk, memInfo, logStr) \
137 (PVR_TRACE(("PVRSRVAllocDeviceMemKM(" #devCookie ", " #perProc ", " #devMemHeap ", " #flags ", " #size \
138 ", " #alignment "," #memInfo "): " logStr " (size = 0x%x)", size)),\
139 _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, privdata, privdatalength, \
140 chunksize, numvirtchunks, numphyschunks, mapchunk, memInfo))
141 #else
142 #define PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, privdata, privdatalength, \
143 chunksize, numvirtchunks, numphyschunks, mapchunk, memInfo, logStr) \
144 _PVRSRVAllocDeviceMemKM(devCookie, perProc, devMemHeap, flags, size, alignment, privdata, privdatalength, \
145 chunksize, numvirtchunks, numphyschunks, mapchunk, memInfo)
146 #endif
149 IMG_IMPORT
150 PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMemKM(IMG_HANDLE hDevCookie,
151 PVRSRV_KERNEL_MEM_INFO *psMemInfo);
153 IMG_EXPORT
154 IMG_INT32 IMG_CALLCONV PVRSRVRemapToDevKM(IMG_HANDLE hDevCookie,
155 PVRSRV_KERNEL_MEM_INFO *psMemInfo, IMG_DEV_VIRTADDR *psDevVAddr);
157 IMG_EXPORT
158 IMG_INT32 IMG_CALLCONV PVRSRVUnmapFromDevKM(IMG_HANDLE hDevCookie,
159 PVRSRV_KERNEL_MEM_INFO *psMemInfo);
162 #if defined(SUPPORT_ION)
163 IMG_IMPORT
164 PVRSRV_ERROR PVRSRVMapIonHandleKM(PVRSRV_PER_PROCESS_DATA *psPerProc,
165 IMG_HANDLE hDevCookie,
166 IMG_HANDLE hDevMemContext,
167 IMG_HANDLE hIon,
168 IMG_UINT32 ui32Flags,
169 IMG_UINT32 ui32Size,
170 PVRSRV_KERNEL_MEM_INFO **ppsKernelMemInfo);
172 IMG_IMPORT
173 PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapIonHandleKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo);
174 #endif /* SUPPORT_ION */
176 IMG_IMPORT
177 PVRSRV_ERROR IMG_CALLCONV PVRSRVDissociateDeviceMemKM(IMG_HANDLE hDevCookie,
178 PVRSRV_KERNEL_MEM_INFO *psMemInfo);
180 IMG_IMPORT
181 PVRSRV_ERROR IMG_CALLCONV PVRSRVReserveDeviceVirtualMemKM(IMG_HANDLE hDevMemHeap,
182 IMG_DEV_VIRTADDR *psDevVAddr,
183 IMG_SIZE_T ui32Size,
184 IMG_SIZE_T ui32Alignment,
185 PVRSRV_KERNEL_MEM_INFO **ppsMemInfo);
187 IMG_IMPORT
188 PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceVirtualMemKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo);
190 IMG_IMPORT
191 PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc,
192 PVRSRV_KERNEL_MEM_INFO *psSrcMemInfo,
193 IMG_HANDLE hDstDevMemHeap,
194 PVRSRV_KERNEL_MEM_INFO **ppsDstMemInfo);
196 IMG_IMPORT
197 PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceMemoryKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo);
199 IMG_IMPORT
200 PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemoryKM(IMG_HANDLE hDevCookie,
201 PVRSRV_PER_PROCESS_DATA *psPerProc,
202 IMG_HANDLE hDevMemContext,
203 IMG_SIZE_T ui32ByteSize,
204 IMG_SIZE_T ui32PageOffset,
205 IMG_BOOL bPhysContig,
206 IMG_SYS_PHYADDR *psSysAddr,
207 IMG_VOID *pvLinAddr,
208 IMG_UINT32 ui32Flags,
209 PVRSRV_KERNEL_MEM_INFO **ppsMemInfo);
211 IMG_IMPORT
212 PVRSRV_ERROR IMG_CALLCONV PVRSRVUnwrapExtMemoryKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo);
214 IMG_IMPORT
215 PVRSRV_ERROR PVRSRVEnumerateDCKM(PVRSRV_DEVICE_CLASS DeviceClass,
216 IMG_UINT32 *pui32DevCount,
217 IMG_UINT32 *pui32DevID );
219 IMG_IMPORT
220 PVRSRV_ERROR PVRSRVOpenDCDeviceKM(PVRSRV_PER_PROCESS_DATA *psPerProc,
221 IMG_UINT32 ui32DeviceID,
222 IMG_HANDLE hDevCookie,
223 IMG_HANDLE *phDeviceKM);
225 IMG_IMPORT
226 PVRSRV_ERROR PVRSRVCloseDCDeviceKM(IMG_HANDLE hDeviceKM);
228 IMG_IMPORT
229 PVRSRV_ERROR PVRSRVEnumDCFormatsKM(IMG_HANDLE hDeviceKM,
230 IMG_UINT32 *pui32Count,
231 DISPLAY_FORMAT *psFormat);
233 IMG_IMPORT
234 PVRSRV_ERROR PVRSRVEnumDCDimsKM(IMG_HANDLE hDeviceKM,
235 DISPLAY_FORMAT *psFormat,
236 IMG_UINT32 *pui32Count,
237 DISPLAY_DIMS *psDim);
239 IMG_IMPORT
240 PVRSRV_ERROR PVRSRVGetDCSystemBufferKM(IMG_HANDLE hDeviceKM,
241 IMG_HANDLE *phBuffer);
243 IMG_IMPORT
244 PVRSRV_ERROR PVRSRVGetDCInfoKM(IMG_HANDLE hDeviceKM,
245 DISPLAY_INFO *psDisplayInfo);
246 IMG_IMPORT
247 PVRSRV_ERROR PVRSRVCreateDCSwapChainKM(PVRSRV_PER_PROCESS_DATA *psPerProc,
248 IMG_HANDLE hDeviceKM,
249 IMG_UINT32 ui32Flags,
250 DISPLAY_SURF_ATTRIBUTES *psDstSurfAttrib,
251 DISPLAY_SURF_ATTRIBUTES *psSrcSurfAttrib,
252 IMG_UINT32 ui32BufferCount,
253 IMG_UINT32 ui32OEMFlags,
254 IMG_HANDLE *phSwapChain,
255 IMG_UINT32 *pui32SwapChainID);
256 IMG_IMPORT
257 PVRSRV_ERROR PVRSRVDestroyDCSwapChainKM(IMG_HANDLE hSwapChain);
258 IMG_IMPORT
259 PVRSRV_ERROR PVRSRVSetDCDstRectKM(IMG_HANDLE hDeviceKM,
260 IMG_HANDLE hSwapChain,
261 IMG_RECT *psRect);
262 IMG_IMPORT
263 PVRSRV_ERROR PVRSRVSetDCSrcRectKM(IMG_HANDLE hDeviceKM,
264 IMG_HANDLE hSwapChain,
265 IMG_RECT *psRect);
266 IMG_IMPORT
267 PVRSRV_ERROR PVRSRVSetDCDstColourKeyKM(IMG_HANDLE hDeviceKM,
268 IMG_HANDLE hSwapChain,
269 IMG_UINT32 ui32CKColour);
270 IMG_IMPORT
271 PVRSRV_ERROR PVRSRVSetDCSrcColourKeyKM(IMG_HANDLE hDeviceKM,
272 IMG_HANDLE hSwapChain,
273 IMG_UINT32 ui32CKColour);
274 IMG_IMPORT
275 PVRSRV_ERROR PVRSRVGetDCBuffersKM(IMG_HANDLE hDeviceKM,
276 IMG_HANDLE hSwapChain,
277 IMG_UINT32 *pui32BufferCount,
278 IMG_HANDLE *phBuffer,
279 IMG_SYS_PHYADDR *psPhyAddr);
280 IMG_IMPORT
281 PVRSRV_ERROR PVRSRVSwapToDCBufferKM(IMG_HANDLE hDeviceKM,
282 IMG_HANDLE hBuffer,
283 IMG_UINT32 ui32SwapInterval,
284 IMG_HANDLE hPrivateTag,
285 IMG_UINT32 ui32ClipRectCount,
286 IMG_RECT *psClipRect);
287 IMG_IMPORT
288 PVRSRV_ERROR PVRSRVSwapToDCBuffer2KM(IMG_HANDLE hDeviceKM,
289 IMG_HANDLE hBuffer,
290 IMG_UINT32 ui32SwapInterval,
291 PVRSRV_KERNEL_MEM_INFO **ppsMemInfos,
292 PVRSRV_KERNEL_SYNC_INFO **ppsSyncInfos,
293 IMG_UINT32 ui32NumMemSyncInfos,
294 IMG_PVOID pvPrivData,
295 IMG_UINT32 ui32PrivDataLength);
296 IMG_IMPORT
297 PVRSRV_ERROR PVRSRVSwapToDCSystemKM(IMG_HANDLE hDeviceKM,
298 IMG_HANDLE hSwapChain);
300 IMG_IMPORT
301 PVRSRV_ERROR PVRSRVOpenBCDeviceKM(PVRSRV_PER_PROCESS_DATA *psPerProc,
302 IMG_UINT32 ui32DeviceID,
303 IMG_HANDLE hDevCookie,
304 IMG_HANDLE *phDeviceKM);
305 IMG_IMPORT
306 PVRSRV_ERROR PVRSRVCloseBCDeviceKM(IMG_HANDLE hDeviceKM);
308 IMG_IMPORT
309 PVRSRV_ERROR PVRSRVGetBCInfoKM(IMG_HANDLE hDeviceKM,
310 BUFFER_INFO *psBufferInfo);
311 IMG_IMPORT
312 PVRSRV_ERROR PVRSRVGetBCBufferKM(IMG_HANDLE hDeviceKM,
313 IMG_UINT32 ui32BufferIndex,
314 IMG_HANDLE *phBuffer);
317 IMG_IMPORT
318 PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc,
319 IMG_HANDLE hDevMemContext,
320 IMG_HANDLE hDeviceClassBuffer,
321 PVRSRV_KERNEL_MEM_INFO **ppsMemInfo,
322 IMG_HANDLE *phOSMapInfo);
324 IMG_EXPORT
325 PVRSRV_ERROR IMG_CALLCONV PVRSRVChangeDeviceMemoryAttributesKM(IMG_HANDLE hKernelMemInfo,
326 IMG_UINT32 ui32Attribs);
328 IMG_IMPORT
329 PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemoryKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo);
331 IMG_IMPORT
332 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetFreeDeviceMemKM(IMG_UINT32 ui32Flags,
333 IMG_SIZE_T *pui32Total,
334 IMG_SIZE_T *pui32Free,
335 IMG_SIZE_T *pui32LargestBlock);
336 IMG_IMPORT
337 PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocSyncInfoKM(IMG_HANDLE hDevCookie,
338 IMG_HANDLE hDevMemContext,
339 PVRSRV_KERNEL_SYNC_INFO **ppsKernelSyncInfo);
340 IMG_IMPORT
341 IMG_VOID IMG_CALLCONV PVRSRVAcquireSyncInfoKM(PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo);
342 IMG_IMPORT
343 IMG_VOID IMG_CALLCONV PVRSRVReleaseSyncInfoKM(PVRSRV_KERNEL_SYNC_INFO *psKernelSyncInfo);
345 IMG_IMPORT
346 #if defined (SUPPORT_SID_INTERFACE)
347 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO_KM *psMiscInfo);
348 #else
349 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfoKM(PVRSRV_MISC_INFO *psMiscInfo);
350 #endif
352 /*!
353 * *****************************************************************************
354 * @brief Allocates memory on behalf of a userspace process that is addressable
355 * by ther kernel. The memory is suitable for mapping into
356 * user space and it is possible to entirely dissociate the memory
357 * from the userspace process via PVRSRVDissociateSharedSysMemoryKM.
358 *
359 * @param psPerProc
360 * @param ui32Flags
361 * @param ui32Size
362 * @param ppsKernelMemInfo
363 *
364 * @return PVRSRV_ERROR
365 ********************************************************************************/
366 IMG_IMPORT PVRSRV_ERROR
367 PVRSRVAllocSharedSysMemoryKM(PVRSRV_PER_PROCESS_DATA *psPerProc,
368 IMG_UINT32 ui32Flags,
369 IMG_SIZE_T ui32Size,
370 PVRSRV_KERNEL_MEM_INFO **ppsKernelMemInfo);
372 /*!
373 * *****************************************************************************
374 * @brief Frees memory allocated via PVRSRVAllocSharedSysMemoryKM (Note you must
375 * be sure any additional kernel references you created have been
376 * removed before freeing the memory)
377 *
378 * @param psKernelMemInfo
379 *
380 * @return PVRSRV_ERROR
381 ********************************************************************************/
382 IMG_IMPORT PVRSRV_ERROR
383 PVRSRVFreeSharedSysMemoryKM(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo);
385 /*!
386 ******************************************************************************
388 @brief Dissociates memory from the process that allocates it. Intended for
389 transfering the ownership of system memory from a particular process
390 to the kernel. Unlike PVRSRVDissociateDeviceMemKM, ownership is not
391 transfered to the kernel context, so the Resource Manager will not
392 automatically clean up such memory.
394 @param psKernelMemInfo:
396 @return PVRSRV_ERROR:
397 ******************************************************************************/
398 IMG_IMPORT PVRSRV_ERROR
399 PVRSRVDissociateMemFromResmanKM(PVRSRV_KERNEL_MEM_INFO *psKernelMemInfo);
401 #if defined (__cplusplus)
402 }
403 #endif
405 #endif /* __PVR_BRIDGE_KM_H_ */
407 /******************************************************************************
408 End of file (pvr_bridge_km.h)
409 ******************************************************************************/