1 /**********************************************************************
2 Copyright (c) Imagination Technologies Ltd.
4 Permission is hereby granted, free of charge, to any person obtaining a copy
5 of this software and associated documentation files (the "Software"), to deal
6 in the Software without restriction, including without limitation the rights
7 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8 copies of the Software, and to permit persons to whom the Software is
9 furnished to do so, subject to the following conditions:
11 The above copyright notice and this permission notice shall be included in
12 all copies or substantial portions of the Software.
14 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21 ******************************************************************************/
23 #ifndef __SERVICES_H__
24 #define __SERVICES_H__
26 #if defined (__cplusplus)
31 #include "servicesext.h"
32 #include "pdumpdefs.h"
35 #define PVRSRV_4K_PAGE_SIZE 4096UL
37 #define PVRSRV_MAX_CMD_SIZE 1024
39 #define PVRSRV_MAX_DEVICES 16
41 #define EVENTOBJNAME_MAXLENGTH (50)
43 #define PVRSRV_MEM_READ (1UL<<0)
44 #define PVRSRV_MEM_WRITE (1UL<<1)
45 #define PVRSRV_MEM_CACHE_CONSISTENT (1UL<<2)
46 #define PVRSRV_MEM_NO_SYNCOBJ (1UL<<3)
47 #define PVRSRV_MEM_INTERLEAVED (1UL<<4)
48 #define PVRSRV_MEM_DUMMY (1UL<<5)
49 #define PVRSRV_MEM_EDM_PROTECT (1UL<<6)
50 #define PVRSRV_MEM_ZERO (1UL<<7)
51 #define PVRSRV_MEM_USER_SUPPLIED_DEVVADDR (1UL<<8)
52 #define PVRSRV_MEM_RAM_BACKED_ALLOCATION (1UL<<9)
53 #define PVRSRV_MEM_NO_RESMAN (1UL<<10)
54 #define PVRSRV_MEM_EXPORTED (1UL<<11)
57 #define PVRSRV_HAP_CACHED (1UL<<12)
58 #define PVRSRV_HAP_UNCACHED (1UL<<13)
59 #define PVRSRV_HAP_WRITECOMBINE (1UL<<14)
60 #define PVRSRV_HAP_CACHETYPE_MASK (PVRSRV_HAP_CACHED|PVRSRV_HAP_UNCACHED|PVRSRV_HAP_WRITECOMBINE)
61 #define PVRSRV_HAP_KERNEL_ONLY (1UL<<15)
62 #define PVRSRV_HAP_SINGLE_PROCESS (1UL<<16)
63 #define PVRSRV_HAP_MULTI_PROCESS (1UL<<17)
64 #define PVRSRV_HAP_FROM_EXISTING_PROCESS (1UL<<18)
65 #define PVRSRV_HAP_NO_CPU_VIRTUAL (1UL<<19)
66 #define PVRSRV_HAP_MAPTYPE_MASK (PVRSRV_HAP_KERNEL_ONLY \
67 |PVRSRV_HAP_SINGLE_PROCESS \
68 |PVRSRV_HAP_MULTI_PROCESS \
69 |PVRSRV_HAP_FROM_EXISTING_PROCESS \
70 |PVRSRV_HAP_NO_CPU_VIRTUAL)
72 #define PVRSRV_MEM_CACHED PVRSRV_HAP_CACHED
73 #define PVRSRV_MEM_UNCACHED PVRSRV_HAP_UNCACHED
74 #define PVRSRV_MEM_WRITECOMBINE PVRSRV_HAP_WRITECOMBINE
76 #define PVRSRV_MEM_BACKINGSTORE_FIELD_SHIFT (24)
78 #define PVRSRV_MAP_NOUSERVIRTUAL (1UL<<27)
80 #define PVRSRV_NO_CONTEXT_LOSS 0
81 #define PVRSRV_SEVERE_LOSS_OF_CONTEXT 1
82 #define PVRSRV_PRE_STATE_CHANGE_MASK 0x80
85 #define PVRSRV_DEFAULT_DEV_COOKIE (1)
88 #define PVRSRV_MISC_INFO_TIMER_PRESENT (1UL<<0)
89 #define PVRSRV_MISC_INFO_CLOCKGATE_PRESENT (1UL<<1)
90 #define PVRSRV_MISC_INFO_MEMSTATS_PRESENT (1UL<<2)
91 #define PVRSRV_MISC_INFO_GLOBALEVENTOBJECT_PRESENT (1UL<<3)
92 #define PVRSRV_MISC_INFO_DDKVERSION_PRESENT (1UL<<4)
93 #define PVRSRV_MISC_INFO_CPUCACHEFLUSH_PRESENT (1UL<<5)
95 #define PVRSRV_MISC_INFO_RESET_PRESENT (1UL<<31)
97 #define PVRSRV_PDUMP_MAX_FILENAME_SIZE 20
98 #define PVRSRV_PDUMP_MAX_COMMENT_SIZE 200
101 #define PVRSRV_CHANGEDEVMEM_ATTRIBS_CACHECOHERENT 0x00000001
103 #define PVRSRV_MAPEXTMEMORY_FLAGS_ALTERNATEVA 0x00000001
104 #define PVRSRV_MAPEXTMEMORY_FLAGS_PHYSCONTIG 0x00000002
106 #define PVRSRV_MODIFYSYNCOPS_FLAGS_WO_INC 0x00000001
107 #define PVRSRV_MODIFYSYNCOPS_FLAGS_RO_INC 0x00000002
109 typedef enum _PVRSRV_DEVICE_TYPE_
111 PVRSRV_DEVICE_TYPE_UNKNOWN = 0 ,
112 PVRSRV_DEVICE_TYPE_MBX1 = 1 ,
113 PVRSRV_DEVICE_TYPE_MBX1_LITE = 2 ,
115 PVRSRV_DEVICE_TYPE_M24VA = 3,
116 PVRSRV_DEVICE_TYPE_MVDA2 = 4,
117 PVRSRV_DEVICE_TYPE_MVED1 = 5,
118 PVRSRV_DEVICE_TYPE_MSVDX = 6,
120 PVRSRV_DEVICE_TYPE_SGX = 7,
122 PVRSRV_DEVICE_TYPE_VGX = 8,
125 PVRSRV_DEVICE_TYPE_EXT = 9,
127 PVRSRV_DEVICE_TYPE_LAST = 9,
129 PVRSRV_DEVICE_TYPE_FORCE_I32 = 0x7fffffff
131 } PVRSRV_DEVICE_TYPE;
133 #define HEAP_ID( _dev_ , _dev_heap_idx_ ) ( ((_dev_)<<24) | ((_dev_heap_idx_)&((1<<24)-1)) )
134 #define HEAP_IDX( _heap_id_ ) ( (_heap_id_)&((1<<24) - 1 ) )
135 #define HEAP_DEV( _heap_id_ ) ( (_heap_id_)>>24 )
137 #define PVRSRV_UNDEFINED_HEAP_ID (~0LU)
141 IMG_EGL = 0x00000001,
142 IMG_OPENGLES1 = 0x00000002,
143 IMG_OPENGLES2 = 0x00000003,
144 IMG_D3DM = 0x00000004,
145 IMG_SRV_UM = 0x00000005,
146 IMG_OPENVG = 0x00000006,
147 IMG_SRVCLIENT = 0x00000007,
148 IMG_VISTAKMD = 0x00000008,
149 IMG_VISTA3DNODE = 0x00000009,
150 IMG_VISTAMVIDEONODE = 0x0000000A,
151 IMG_VISTAVPBNODE = 0x0000000B,
152 IMG_OPENGL = 0x0000000C,
153 IMG_D3D = 0x0000000D,
154 #if defined(SUPPORT_GRAPHICS_HAL)
155 IMG_GRAPHICS_HAL = 0x0000000E
161 #define APPHINT_MAX_STRING_SIZE 256
173 typedef struct _PVRSRV_DEV_DATA_ *PPVRSRV_DEV_DATA;
175 typedef struct _PVRSRV_DEVICE_IDENTIFIER_
177 PVRSRV_DEVICE_TYPE eDeviceType;
178 PVRSRV_DEVICE_CLASS eDeviceClass;
179 IMG_UINT32 ui32DeviceIndex;
181 } PVRSRV_DEVICE_IDENTIFIER;
184 typedef struct _PVRSRV_CLIENT_DEV_DATA_
186 IMG_UINT32 ui32NumDevices;
187 PVRSRV_DEVICE_IDENTIFIER asDevID[PVRSRV_MAX_DEVICES];
188 PVRSRV_ERROR (*apfnDevConnect[PVRSRV_MAX_DEVICES])(PPVRSRV_DEV_DATA);
189 PVRSRV_ERROR (*apfnDumpTrace[PVRSRV_MAX_DEVICES])(PPVRSRV_DEV_DATA);
191 } PVRSRV_CLIENT_DEV_DATA;
194 typedef struct _PVRSRV_CONNECTION_
196 IMG_HANDLE hServices;
197 IMG_UINT32 ui32ProcessID;
198 PVRSRV_CLIENT_DEV_DATA sClientDevData;
202 typedef struct _PVRSRV_DEV_DATA_
204 PVRSRV_CONNECTION sConnection;
205 IMG_HANDLE hDevCookie;
209 typedef struct _PVRSRV_MEMUPDATE_
211 IMG_UINT32 ui32UpdateAddr;
212 IMG_UINT32 ui32UpdateVal;
215 typedef struct _PVRSRV_HWREG_
217 IMG_UINT32 ui32RegAddr;
218 IMG_UINT32 ui32RegVal;
221 typedef struct _PVRSRV_MEMBLK_
223 IMG_DEV_VIRTADDR sDevVirtAddr;
224 IMG_HANDLE hOSMemHandle;
225 IMG_HANDLE hOSWrapMem;
228 IMG_SYS_PHYADDR *psIntSysPAddr;
232 typedef struct _PVRSRV_KERNEL_MEM_INFO_ *PPVRSRV_KERNEL_MEM_INFO;
234 typedef struct _PVRSRV_CLIENT_MEM_INFO_
240 IMG_PVOID pvLinAddrKM;
243 IMG_DEV_VIRTADDR sDevVAddr;
250 IMG_CPU_PHYADDR sCpuPAddr;
253 IMG_UINT32 ui32Flags;
258 IMG_UINT32 ui32ClientFlags;
261 IMG_SIZE_T ui32AllocSize;
265 struct _PVRSRV_CLIENT_SYNC_INFO_ *psClientSyncInfo;
268 IMG_HANDLE hMappingInfo;
271 IMG_HANDLE hKernelMemInfo;
276 #if defined(SUPPORT_MEMINFO_IDS)
277 #if !defined(USE_CODE)
279 IMG_UINT64 ui64Stamp;
286 IMG_HANDLE hOSMapInfo;
288 struct _PVRSRV_CLIENT_MEM_INFO_ *psNext;
290 } PVRSRV_CLIENT_MEM_INFO, *PPVRSRV_CLIENT_MEM_INFO;
293 #define PVRSRV_MAX_CLIENT_HEAPS (32)
294 typedef struct _PVRSRV_HEAP_INFO_
296 IMG_UINT32 ui32HeapID;
297 IMG_HANDLE hDevMemHeap;
298 IMG_DEV_VIRTADDR sDevVAddrBase;
299 IMG_UINT32 ui32HeapByteSize;
300 IMG_UINT32 ui32Attribs;
306 typedef struct _PVRSRV_EVENTOBJECT_
309 IMG_CHAR szName[EVENTOBJNAME_MAXLENGTH];
311 IMG_HANDLE hOSEventKM;
313 } PVRSRV_EVENTOBJECT;
315 typedef struct _PVRSRV_MISC_INFO_
317 IMG_UINT32 ui32StateRequest;
318 IMG_UINT32 ui32StatePresent;
321 IMG_VOID *pvSOCTimerRegisterKM;
322 IMG_VOID *pvSOCTimerRegisterUM;
323 IMG_HANDLE hSOCTimerRegisterOSMemHandle;
324 IMG_HANDLE hSOCTimerRegisterMappingInfo;
327 IMG_VOID *pvSOCClockGateRegs;
328 IMG_UINT32 ui32SOCClockGateRegsSize;
331 IMG_CHAR *pszMemoryStr;
332 IMG_UINT32 ui32MemoryStrLen;
335 PVRSRV_EVENTOBJECT sGlobalEventObject;
336 IMG_HANDLE hOSGlobalEvent;
339 IMG_UINT32 aui32DDKVersion[4];
343 IMG_BOOL bCPUCacheFlushAll;
345 IMG_BOOL bDeferCPUCacheFlush;
347 IMG_PVOID pvRangeAddrStart;
349 IMG_PVOID pvRangeAddrEnd;
354 typedef enum _PVRSRV_CLIENT_EVENT_
356 PVRSRV_CLIENT_EVENT_HWTIMEOUT = 0,
357 } PVRSRV_CLIENT_EVENT;
360 PVRSRV_ERROR IMG_CALLCONV PVRSRVClientEvent(IMG_CONST PVRSRV_CLIENT_EVENT eEvent,
361 PVRSRV_DEV_DATA *psDevData,
365 PVRSRV_ERROR IMG_CALLCONV PVRSRVConnect(PVRSRV_CONNECTION *psConnection);
368 PVRSRV_ERROR IMG_CALLCONV PVRSRVDisconnect(PVRSRV_CONNECTION *psConnection);
371 PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDevices(IMG_CONST PVRSRV_CONNECTION *psConnection,
372 IMG_UINT32 *puiNumDevices,
373 PVRSRV_DEVICE_IDENTIFIER *puiDevIDs);
375 PVRSRV_ERROR IMG_CALLCONV PVRSRVAcquireDeviceData(IMG_CONST PVRSRV_CONNECTION *psConnection,
376 IMG_UINT32 uiDevIndex,
377 PVRSRV_DEV_DATA *psDevData,
378 PVRSRV_DEVICE_TYPE eDeviceType);
380 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetMiscInfo (IMG_CONST PVRSRV_CONNECTION *psConnection, PVRSRV_MISC_INFO *psMiscInfo);
383 PVRSRV_ERROR IMG_CALLCONV PVRSRVReleaseMiscInfo (IMG_CONST PVRSRV_CONNECTION *psConnection, PVRSRV_MISC_INFO *psMiscInfo);
387 IMG_UINT32 ReadHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset);
390 IMG_VOID WriteHWReg(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Offset, IMG_UINT32 ui32Value);
392 IMG_IMPORT IMG_VOID WriteHWRegs(IMG_PVOID pvLinRegBaseAddr, IMG_UINT32 ui32Count, PVRSRV_HWREG *psHWRegs);
396 PVRSRV_ERROR PVRSRVPollForValue ( const PVRSRV_CONNECTION *psConnection,
398 volatile IMG_UINT32 *pui32LinMemAddr,
399 IMG_UINT32 ui32Value,
401 IMG_UINT32 ui32Waitus,
402 IMG_UINT32 ui32Tries);
405 PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA *psDevData,
406 IMG_HANDLE *phDevMemContext,
407 IMG_UINT32 *pui32SharedHeapCount,
408 PVRSRV_HEAP_INFO *psHeapInfo);
411 PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDeviceMemContext(IMG_CONST PVRSRV_DEV_DATA *psDevData,
412 IMG_HANDLE hDevMemContext);
415 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDeviceMemHeapInfo(IMG_CONST PVRSRV_DEV_DATA *psDevData,
416 IMG_HANDLE hDevMemContext,
417 IMG_UINT32 *pui32SharedHeapCount,
418 PVRSRV_HEAP_INFO *psHeapInfo);
420 #if defined(PVRSRV_LOG_MEMORY_ALLOCS)
421 #define PVRSRVAllocDeviceMem_log(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo, logStr) \
422 (PVR_TRACE(("PVRSRVAllocDeviceMem(" #psDevData "," #hDevMemHeap "," #ui32Attribs "," #ui32Size "," #ui32Alignment "," #ppsMemInfo ")" \
423 ": " logStr " (size = 0x%lx)", ui32Size)), \
424 PVRSRVAllocDeviceMem(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo))
426 #define PVRSRVAllocDeviceMem_log(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo, logStr) \
427 PVRSRVAllocDeviceMem(psDevData, hDevMemHeap, ui32Attribs, ui32Size, ui32Alignment, ppsMemInfo)
432 PVRSRV_ERROR IMG_CALLCONV PVRSRVAllocDeviceMem(IMG_CONST PVRSRV_DEV_DATA *psDevData,
433 IMG_HANDLE hDevMemHeap,
434 IMG_UINT32 ui32Attribs,
436 IMG_SIZE_T ui32Alignment,
437 PVRSRV_CLIENT_MEM_INFO **ppsMemInfo);
440 PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceMem(IMG_CONST PVRSRV_DEV_DATA *psDevData,
441 PVRSRV_CLIENT_MEM_INFO *psMemInfo);
444 PVRSRV_ERROR IMG_CALLCONV PVRSRVExportDeviceMem(IMG_CONST PVRSRV_DEV_DATA *psDevData,
445 PVRSRV_CLIENT_MEM_INFO *psMemInfo,
446 IMG_HANDLE *phMemInfo);
449 PVRSRV_ERROR IMG_CALLCONV PVRSRVReserveDeviceVirtualMem(IMG_CONST PVRSRV_DEV_DATA *psDevData,
450 IMG_HANDLE hDevMemHeap,
451 IMG_DEV_VIRTADDR *psDevVAddr,
453 IMG_SIZE_T ui32Alignment,
454 PVRSRV_CLIENT_MEM_INFO **ppsMemInfo);
456 PVRSRV_ERROR IMG_CALLCONV PVRSRVFreeDeviceVirtualMem(IMG_CONST PVRSRV_DEV_DATA *psDevData,
457 PVRSRV_CLIENT_MEM_INFO *psMemInfo);
460 PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
461 IMG_HANDLE hKernelMemInfo,
462 IMG_HANDLE hDstDevMemHeap,
463 PVRSRV_CLIENT_MEM_INFO **ppsDstMemInfo);
466 PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
467 PVRSRV_CLIENT_MEM_INFO *psMemInfo);
470 PVRSRV_ERROR IMG_CALLCONV PVRSRVMapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
471 PVRSRV_CLIENT_MEM_INFO *psMemInfo,
472 IMG_SYS_PHYADDR *psSysPAddr,
473 IMG_UINT32 ui32Flags);
475 PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
476 PVRSRV_CLIENT_MEM_INFO *psMemInfo,
477 IMG_UINT32 ui32Flags);
480 PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemory2(IMG_CONST PVRSRV_DEV_DATA *psDevData,
481 IMG_HANDLE hDevMemContext,
482 IMG_SIZE_T ui32ByteSize,
483 IMG_SIZE_T ui32PageOffset,
484 IMG_BOOL bPhysContig,
485 IMG_SYS_PHYADDR *psSysPAddr,
487 IMG_UINT32 ui32Flags,
488 PVRSRV_CLIENT_MEM_INFO **ppsMemInfo);
490 PVRSRV_ERROR IMG_CALLCONV PVRSRVWrapExtMemory(IMG_CONST PVRSRV_DEV_DATA *psDevData,
491 IMG_HANDLE hDevMemContext,
492 IMG_SIZE_T ui32ByteSize,
493 IMG_SIZE_T ui32PageOffset,
494 IMG_BOOL bPhysContig,
495 IMG_SYS_PHYADDR *psSysPAddr,
497 PVRSRV_CLIENT_MEM_INFO **ppsMemInfo);
499 PVRSRV_ERROR IMG_CALLCONV PVRSRVUnwrapExtMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
500 PVRSRV_CLIENT_MEM_INFO *psMemInfo);
502 PVRSRV_ERROR PVRSRVChangeDeviceMemoryAttributes(IMG_CONST PVRSRV_DEV_DATA *psDevData,
503 PVRSRV_CLIENT_MEM_INFO *psClientMemInfo,
504 IMG_UINT32 ui32Attribs);
507 PVRSRV_ERROR IMG_CALLCONV PVRSRVMapDeviceClassMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
508 IMG_HANDLE hDevMemContext,
509 IMG_HANDLE hDeviceClassBuffer,
510 PVRSRV_CLIENT_MEM_INFO **ppsMemInfo);
512 PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapDeviceClassMemory (IMG_CONST PVRSRV_DEV_DATA *psDevData,
513 PVRSRV_CLIENT_MEM_INFO *psMemInfo);
516 PVRSRV_ERROR IMG_CALLCONV PVRSRVMapPhysToUserSpace(IMG_CONST PVRSRV_DEV_DATA *psDevData,
517 IMG_SYS_PHYADDR sSysPhysAddr,
518 IMG_UINT32 uiSizeInBytes,
519 IMG_PVOID *ppvUserAddr,
520 IMG_UINT32 *puiActualSize,
521 IMG_PVOID *ppvProcess);
524 PVRSRV_ERROR IMG_CALLCONV PVRSRVUnmapPhysToUserSpace(IMG_CONST PVRSRV_DEV_DATA *psDevData,
525 IMG_PVOID pvUserAddr,
526 IMG_PVOID pvProcess);
528 typedef enum _PVRSRV_SYNCVAL_MODE_
530 PVRSRV_SYNCVAL_READ = IMG_TRUE,
531 PVRSRV_SYNCVAL_WRITE = IMG_FALSE,
533 } PVRSRV_SYNCVAL_MODE, *PPVRSRV_SYNCVAL_MODE;
535 typedef IMG_UINT32 PVRSRV_SYNCVAL;
537 IMG_IMPORT PVRSRV_ERROR PVRSRVWaitForOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
538 PVRSRV_SYNCVAL_MODE eMode, PVRSRV_SYNCVAL OpRequired);
540 IMG_IMPORT PVRSRV_ERROR PVRSRVWaitForAllOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
541 PVRSRV_SYNCVAL_MODE eMode);
543 IMG_IMPORT IMG_BOOL PVRSRVTestOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
544 PVRSRV_SYNCVAL_MODE eMode, PVRSRV_SYNCVAL OpRequired);
546 IMG_IMPORT IMG_BOOL PVRSRVTestAllOpsComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
547 PVRSRV_SYNCVAL_MODE eMode);
549 IMG_IMPORT IMG_BOOL PVRSRVTestOpsNotComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
550 PVRSRV_SYNCVAL_MODE eMode, PVRSRV_SYNCVAL OpRequired);
552 IMG_IMPORT IMG_BOOL PVRSRVTestAllOpsNotComplete(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
553 PVRSRV_SYNCVAL_MODE eMode);
555 IMG_IMPORT PVRSRV_SYNCVAL PVRSRVGetPendingOpSyncVal(PPVRSRV_CLIENT_MEM_INFO psMemInfo,
556 PVRSRV_SYNCVAL_MODE eMode);
560 PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumerateDeviceClass(IMG_CONST PVRSRV_CONNECTION *psConnection,
561 PVRSRV_DEVICE_CLASS DeviceClass,
562 IMG_UINT32 *pui32DevCount,
563 IMG_UINT32 *pui32DevID);
566 IMG_HANDLE IMG_CALLCONV PVRSRVOpenDCDevice(IMG_CONST PVRSRV_DEV_DATA *psDevData,
567 IMG_UINT32 ui32DeviceID);
570 PVRSRV_ERROR IMG_CALLCONV PVRSRVCloseDCDevice(IMG_CONST PVRSRV_CONNECTION *psConnection, IMG_HANDLE hDevice);
573 PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumDCFormats (IMG_HANDLE hDevice,
574 IMG_UINT32 *pui32Count,
575 DISPLAY_FORMAT *psFormat);
578 PVRSRV_ERROR IMG_CALLCONV PVRSRVEnumDCDims (IMG_HANDLE hDevice,
579 IMG_UINT32 *pui32Count,
580 DISPLAY_FORMAT *psFormat,
581 DISPLAY_DIMS *psDims);
584 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCSystemBuffer(IMG_HANDLE hDevice,
585 IMG_HANDLE *phBuffer);
588 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCInfo(IMG_HANDLE hDevice,
589 DISPLAY_INFO* psDisplayInfo);
592 PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateDCSwapChain (IMG_HANDLE hDevice,
593 IMG_UINT32 ui32Flags,
594 DISPLAY_SURF_ATTRIBUTES *psDstSurfAttrib,
595 DISPLAY_SURF_ATTRIBUTES *psSrcSurfAttrib,
596 IMG_UINT32 ui32BufferCount,
597 IMG_UINT32 ui32OEMFlags,
598 IMG_UINT32 *pui32SwapChainID,
599 IMG_HANDLE *phSwapChain);
602 PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyDCSwapChain (IMG_HANDLE hDevice,
603 IMG_HANDLE hSwapChain);
606 PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCDstRect (IMG_HANDLE hDevice,
607 IMG_HANDLE hSwapChain,
608 IMG_RECT *psDstRect);
611 PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCSrcRect (IMG_HANDLE hDevice,
612 IMG_HANDLE hSwapChain,
613 IMG_RECT *psSrcRect);
616 PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCDstColourKey (IMG_HANDLE hDevice,
617 IMG_HANDLE hSwapChain,
618 IMG_UINT32 ui32CKColour);
621 PVRSRV_ERROR IMG_CALLCONV PVRSRVSetDCSrcColourKey (IMG_HANDLE hDevice,
622 IMG_HANDLE hSwapChain,
623 IMG_UINT32 ui32CKColour);
626 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetDCBuffers(IMG_HANDLE hDevice,
627 IMG_HANDLE hSwapChain,
628 IMG_HANDLE *phBuffer);
631 PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCBuffer (IMG_HANDLE hDevice,
633 IMG_UINT32 ui32ClipRectCount,
634 IMG_RECT *psClipRect,
635 IMG_UINT32 ui32SwapInterval,
636 IMG_HANDLE hPrivateTag);
639 PVRSRV_ERROR IMG_CALLCONV PVRSRVSwapToDCSystem (IMG_HANDLE hDevice,
640 IMG_HANDLE hSwapChain);
644 IMG_HANDLE IMG_CALLCONV PVRSRVOpenBCDevice(IMG_CONST PVRSRV_DEV_DATA *psDevData,
645 IMG_UINT32 ui32DeviceID);
648 PVRSRV_ERROR IMG_CALLCONV PVRSRVCloseBCDevice(IMG_CONST PVRSRV_CONNECTION *psConnection,
652 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetBCBufferInfo(IMG_HANDLE hDevice,
653 BUFFER_INFO *psBuffer);
656 PVRSRV_ERROR IMG_CALLCONV PVRSRVGetBCBuffer(IMG_HANDLE hDevice,
657 IMG_UINT32 ui32BufferIndex,
658 IMG_HANDLE *phBuffer);
662 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpInit(IMG_CONST PVRSRV_CONNECTION *psConnection);
665 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpStartInitPhase(IMG_CONST PVRSRV_CONNECTION *psConnection);
668 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpStopInitPhase(IMG_CONST PVRSRV_CONNECTION *psConnection);
671 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPol(IMG_CONST PVRSRV_CONNECTION *psConnection,
672 PVRSRV_CLIENT_MEM_INFO *psMemInfo,
673 IMG_UINT32 ui32Offset,
674 IMG_UINT32 ui32Value,
676 IMG_UINT32 ui32Flags);
679 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSyncPol(IMG_CONST PVRSRV_CONNECTION *psConnection,
680 PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo,
682 IMG_UINT32 ui32Value,
683 IMG_UINT32 ui32Mask);
686 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMem(IMG_CONST PVRSRV_CONNECTION *psConnection,
687 IMG_PVOID pvAltLinAddr,
688 PVRSRV_CLIENT_MEM_INFO *psMemInfo,
689 IMG_UINT32 ui32Offset,
690 IMG_UINT32 ui32Bytes,
691 IMG_UINT32 ui32Flags);
694 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSync(IMG_CONST PVRSRV_CONNECTION *psConnection,
695 IMG_PVOID pvAltLinAddr,
696 PVRSRV_CLIENT_SYNC_INFO *psClientSyncInfo,
697 IMG_UINT32 ui32Offset,
698 IMG_UINT32 ui32Bytes);
701 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpReg(IMG_CONST PVRSRV_CONNECTION *psConnection,
702 IMG_UINT32 ui32RegAddr,
703 IMG_UINT32 ui32RegValue,
704 IMG_UINT32 ui32Flags);
707 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegPolWithFlags(IMG_CONST PVRSRV_CONNECTION *psConnection,
708 IMG_UINT32 ui32RegAddr,
709 IMG_UINT32 ui32RegValue,
711 IMG_UINT32 ui32Flags);
713 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegPol(IMG_CONST PVRSRV_CONNECTION *psConnection,
714 IMG_UINT32 ui32RegAddr,
715 IMG_UINT32 ui32RegValue,
716 IMG_UINT32 ui32Mask);
719 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpPDReg(IMG_CONST PVRSRV_CONNECTION *psConnection,
720 IMG_UINT32 ui32RegAddr,
721 IMG_UINT32 ui32RegValue);
723 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpPDDevPAddr(IMG_CONST PVRSRV_CONNECTION *psConnection,
724 PVRSRV_CLIENT_MEM_INFO *psMemInfo,
725 IMG_UINT32 ui32Offset,
726 IMG_DEV_PHYADDR sPDDevPAddr);
729 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpMemPages(IMG_CONST PVRSRV_CONNECTION *psConnection,
730 IMG_HANDLE hKernelMemInfo,
731 IMG_DEV_PHYADDR *pPages,
732 IMG_UINT32 ui32NumPages,
733 IMG_DEV_VIRTADDR sDevAddr,
734 IMG_UINT32 ui32Start,
735 IMG_UINT32 ui32Length,
736 IMG_BOOL bContinuous);
739 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpSetFrame(IMG_CONST PVRSRV_CONNECTION *psConnection,
740 IMG_UINT32 ui32Frame);
743 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpComment(IMG_CONST PVRSRV_CONNECTION *psConnection,
744 IMG_CONST IMG_CHAR *pszComment,
745 IMG_BOOL bContinuous);
748 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCommentf(IMG_CONST PVRSRV_CONNECTION *psConnection,
749 IMG_BOOL bContinuous,
750 IMG_CONST IMG_CHAR *pszFormat, ...);
753 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCommentWithFlagsf(IMG_CONST PVRSRV_CONNECTION *psConnection,
754 IMG_UINT32 ui32Flags,
755 IMG_CONST IMG_CHAR *pszFormat, ...);
758 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpDriverInfo(IMG_CONST PVRSRV_CONNECTION *psConnection,
760 IMG_BOOL bContinuous);
763 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpIsCapturing(IMG_CONST PVRSRV_CONNECTION *psConnection,
764 IMG_BOOL *pbIsCapturing);
767 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpBitmap(IMG_CONST PVRSRV_CONNECTION *psConnection,
768 IMG_CHAR *pszFileName,
769 IMG_UINT32 ui32FileOffset,
770 IMG_UINT32 ui32Width,
771 IMG_UINT32 ui32Height,
772 IMG_UINT32 ui32StrideInBytes,
773 IMG_DEV_VIRTADDR sDevBaseAddr,
775 PDUMP_PIXEL_FORMAT ePixelFormat,
776 PDUMP_MEM_FORMAT eMemFormat,
777 IMG_UINT32 ui32PDumpFlags);
780 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpRegRead(IMG_CONST PVRSRV_CONNECTION *psConnection,
781 IMG_CONST IMG_CHAR *pszFileName,
782 IMG_UINT32 ui32FileOffset,
783 IMG_UINT32 ui32Address,
785 IMG_UINT32 ui32PDumpFlags);
789 IMG_BOOL IMG_CALLCONV PVRSRVPDumpIsCapturingTest(IMG_CONST PVRSRV_CONNECTION *psConnection);
792 PVRSRV_ERROR IMG_CALLCONV PVRSRVPDumpCycleCountRegRead(IMG_CONST PVRSRV_CONNECTION *psConnection,
793 IMG_UINT32 ui32RegOffset,
794 IMG_BOOL bLastFrame);
796 IMG_IMPORT IMG_HANDLE PVRSRVLoadLibrary(const IMG_CHAR *pszLibraryName);
797 IMG_IMPORT PVRSRV_ERROR PVRSRVUnloadLibrary(IMG_HANDLE hExtDrv);
798 IMG_IMPORT PVRSRV_ERROR PVRSRVGetLibFuncAddr(IMG_HANDLE hExtDrv, const IMG_CHAR *pszFunctionName, IMG_VOID **ppvFuncAddr);
800 IMG_IMPORT IMG_UINT32 PVRSRVClockus (void);
801 IMG_IMPORT IMG_VOID PVRSRVWaitus (IMG_UINT32 ui32Timeus);
802 IMG_IMPORT IMG_VOID PVRSRVReleaseThreadQuanta (void);
803 IMG_IMPORT IMG_UINT32 IMG_CALLCONV PVRSRVGetCurrentProcessID(void);
804 IMG_IMPORT IMG_CHAR * IMG_CALLCONV PVRSRVSetLocale(const IMG_CHAR *pszLocale);
810 IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVCreateAppHintState(IMG_MODULE_ID eModuleID,
811 const IMG_CHAR *pszAppName,
812 IMG_VOID **ppvState);
813 IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVFreeAppHintState(IMG_MODULE_ID eModuleID,
814 IMG_VOID *pvHintState);
816 IMG_IMPORT IMG_BOOL IMG_CALLCONV PVRSRVGetAppHint(IMG_VOID *pvHintState,
817 const IMG_CHAR *pszHintName,
818 IMG_DATA_TYPE eDataType,
819 const IMG_VOID *pvDefault,
822 IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVAllocUserModeMem (IMG_SIZE_T ui32Size);
823 IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVCallocUserModeMem (IMG_SIZE_T ui32Size);
824 IMG_IMPORT IMG_PVOID IMG_CALLCONV PVRSRVReallocUserModeMem (IMG_PVOID pvBase, IMG_SIZE_T uNewSize);
825 IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVFreeUserModeMem (IMG_PVOID pvMem);
826 IMG_IMPORT IMG_VOID PVRSRVMemCopy(IMG_VOID *pvDst, const IMG_VOID *pvSrc, IMG_SIZE_T ui32Size);
827 IMG_IMPORT IMG_VOID PVRSRVMemSet(IMG_VOID *pvDest, IMG_UINT8 ui8Value, IMG_SIZE_T ui32Size);
829 struct _PVRSRV_MUTEX_OPAQUE_STRUCT_;
830 typedef struct _PVRSRV_MUTEX_OPAQUE_STRUCT_ *PVRSRV_MUTEX_HANDLE;
832 IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVCreateMutex(PVRSRV_MUTEX_HANDLE *phMutex);
833 IMG_IMPORT PVRSRV_ERROR IMG_CALLCONV PVRSRVDestroyMutex(PVRSRV_MUTEX_HANDLE hMutex);
834 IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVLockMutex(PVRSRV_MUTEX_HANDLE hMutex);
835 IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVUnlockMutex(PVRSRV_MUTEX_HANDLE hMutex);
837 #if (defined(DEBUG) && defined(__linux__))
838 IMG_PVOID PVRSRVAllocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber);
839 IMG_PVOID PVRSRVCallocUserModeMemTracking(IMG_SIZE_T ui32Size, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber);
840 IMG_VOID PVRSRVFreeUserModeMemTracking(IMG_VOID *pvMem);
841 IMG_PVOID PVRSRVReallocUserModeMemTracking(IMG_VOID *pvMem, IMG_SIZE_T ui32NewSize, IMG_CHAR *pszFileName, IMG_UINT32 ui32LineNumber);
844 IMG_IMPORT PVRSRV_ERROR PVRSRVEventObjectWait(const PVRSRV_CONNECTION *psConnection,
845 IMG_HANDLE hOSEvent);
848 PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyPendingSyncOps(PVRSRV_CONNECTION *psConnection,
849 IMG_HANDLE hKernelSyncInfo,
850 IMG_UINT32 ui32ModifyFlags,
851 IMG_UINT32 *pui32ReadOpsPending,
852 IMG_UINT32 *pui32WriteOpsPending);
855 PVRSRV_ERROR IMG_CALLCONV PVRSRVModifyCompleteSyncOps(PVRSRV_CONNECTION *psConnection,
856 IMG_HANDLE hKernelSyncInfo,
857 IMG_UINT32 ui32ModifyFlags);
860 #define TIME_NOT_PASSED_UINT32(a,b,c) ((a - b) < c)
862 #if defined (__cplusplus)