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 ******************************************************************************/
27 #define COMMON_PDUMP_OS_SUPPORT
30 #if defined(COMMON_PDUMP_OS_SUPPORT)
31 #if defined(SUPPORT_SGX) || defined(SUPPORT_MSVDX)
32 #define SGX_SUPPORT_COMMON_PDUMP
33 #if defined(SGX_SUPPORT_COMMON_PDUMP)
34 #include <pdump_osfunc.h>
40 #if defined(__cplusplus)
44 #define PDUMP_FLAGS_NEVER 0x08000000UL
45 #define PDUMP_FLAGS_TOOUT2MEM 0x10000000UL
46 #define PDUMP_FLAGS_LASTFRAME 0x20000000UL
47 #define PDUMP_FLAGS_RESETLFBUFFER 0x40000000UL
48 #define PDUMP_FLAGS_CONTINUOUS 0x80000000UL
50 #define PDUMP_PD_UNIQUETAG (IMG_HANDLE)0
51 #define PDUMP_PT_UNIQUETAG (IMG_HANDLE)0
53 #define PDUMP_STREAM_PARAM2 0
54 #define PDUMP_STREAM_SCRIPT2 1
55 #define PDUMP_STREAM_DRIVERINFO 2
56 #define PDUMP_NUM_STREAMS 3
60 #define MAKEUNIQUETAG(hMemInfo) (0)
65 #define MAKEUNIQUETAG(hMemInfo) (((BM_BUF *)(((PVRSRV_KERNEL_MEM_INFO *)hMemInfo)->sMemBlk.hBuffer))->pMapping)
67 IMG_IMPORT PVRSRV_ERROR PDumpMemPolKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo,
68 IMG_UINT32 ui32Offset,
71 PDUMP_POLL_OPERATOR eOperator,
73 IMG_HANDLE hUniqueTag);
75 IMG_IMPORT PVRSRV_ERROR PDumpMemUM(PVRSRV_PER_PROCESS_DATA *psProcData,
76 IMG_PVOID pvAltLinAddr,
78 PVRSRV_KERNEL_MEM_INFO *psMemInfo,
79 IMG_UINT32 ui32Offset,
82 IMG_HANDLE hUniqueTag);
84 IMG_IMPORT PVRSRV_ERROR PDumpMemKM(IMG_PVOID pvAltLinAddr,
85 PVRSRV_KERNEL_MEM_INFO *psMemInfo,
86 IMG_UINT32 ui32Offset,
89 IMG_HANDLE hUniqueTag);
90 PVRSRV_ERROR PDumpMemPagesKM(PVRSRV_DEVICE_TYPE eDeviceType,
91 IMG_DEV_PHYADDR *pPages,
92 IMG_UINT32 ui32NumPages,
93 IMG_DEV_VIRTADDR sDevAddr,
95 IMG_UINT32 ui32Length,
97 IMG_HANDLE hUniqueTag);
99 PVRSRV_ERROR PDumpMem2KM(PVRSRV_DEVICE_TYPE eDeviceType,
100 IMG_CPU_VIRTADDR pvLinAddr,
101 IMG_UINT32 ui32Bytes,
102 IMG_UINT32 ui32Flags,
103 IMG_BOOL bInitialisePages,
104 IMG_HANDLE hUniqueTag1,
105 IMG_HANDLE hUniqueTag2);
106 IMG_VOID PDumpInitCommon(IMG_VOID);
107 IMG_VOID PDumpDeInitCommon(IMG_VOID);
108 IMG_VOID PDumpInit(IMG_VOID);
109 IMG_VOID PDumpDeInit(IMG_VOID);
110 PVRSRV_ERROR PDumpStartInitPhaseKM(IMG_VOID);
111 PVRSRV_ERROR PDumpStopInitPhaseKM(IMG_VOID);
112 IMG_IMPORT PVRSRV_ERROR PDumpSetFrameKM(IMG_UINT32 ui32Frame);
113 IMG_IMPORT PVRSRV_ERROR PDumpCommentKM(IMG_CHAR *pszComment, IMG_UINT32 ui32Flags);
114 IMG_IMPORT PVRSRV_ERROR PDumpDriverInfoKM(IMG_CHAR *pszString, IMG_UINT32 ui32Flags);
116 PVRSRV_ERROR PDumpRegWithFlagsKM(IMG_UINT32 ui32RegAddr,
117 IMG_UINT32 ui32RegValue,
118 IMG_UINT32 ui32Flags);
119 PVRSRV_ERROR PDumpRegPolWithFlagsKM(IMG_UINT32 ui32RegAddr,
120 IMG_UINT32 ui32RegValue,
122 IMG_UINT32 ui32Flags);
123 PVRSRV_ERROR PDumpRegPolKM(IMG_UINT32 ui32RegAddr,
124 IMG_UINT32 ui32RegValue,
125 IMG_UINT32 ui32Mask);
127 IMG_IMPORT PVRSRV_ERROR PDumpBitmapKM(IMG_CHAR *pszFileName,
128 IMG_UINT32 ui32FileOffset,
129 IMG_UINT32 ui32Width,
130 IMG_UINT32 ui32Height,
131 IMG_UINT32 ui32StrideInBytes,
132 IMG_DEV_VIRTADDR sDevBaseAddr,
134 PDUMP_PIXEL_FORMAT ePixelFormat,
135 PDUMP_MEM_FORMAT eMemFormat,
136 IMG_UINT32 ui32PDumpFlags);
137 IMG_IMPORT PVRSRV_ERROR PDumpReadRegKM(IMG_CHAR *pszFileName,
138 IMG_UINT32 ui32FileOffset,
139 IMG_UINT32 ui32Address,
141 IMG_UINT32 ui32PDumpFlags);
143 IMG_BOOL PDumpIsSuspended(IMG_VOID);
145 #if defined(SGX_SUPPORT_COMMON_PDUMP) || !defined(SUPPORT_VGX)
147 PVRSRV_ERROR PDumpRegKM(IMG_UINT32 dwReg,
149 PVRSRV_ERROR PDumpComment(IMG_CHAR* pszFormat, ...);
150 PVRSRV_ERROR PDumpCommentWithFlags(IMG_UINT32 ui32Flags,
154 PVRSRV_ERROR PDumpPDReg(IMG_UINT32 ui32Reg,
155 IMG_UINT32 ui32dwData,
156 IMG_HANDLE hUniqueTag);
157 PVRSRV_ERROR PDumpPDRegWithFlags(IMG_UINT32 ui32Reg,
159 IMG_UINT32 ui32Flags,
160 IMG_HANDLE hUniqueTag);
162 IMG_VOID PDumpRegKM(IMG_UINT32 dwReg,
164 IMG_VOID PDumpComment(IMG_CHAR* pszFormat, ...);
165 IMG_VOID PDumpCommentWithFlags(IMG_UINT32 ui32Flags,
170 IMG_VOID PDumpPDReg(IMG_UINT32 ui32Reg,
171 IMG_UINT32 ui32dwData,
172 IMG_HANDLE hUniqueTag);
173 IMG_VOID PDumpPDRegWithFlags(IMG_UINT32 ui32Reg,
175 IMG_UINT32 ui32Flags,
176 IMG_HANDLE hUniqueTag);
179 IMG_VOID PDumpMsvdxRegRead(const IMG_CHAR* const pRegRegion,
180 const IMG_UINT32 dwRegOffset);
182 IMG_VOID PDumpMsvdxRegWrite(const IMG_CHAR* const pRegRegion,
183 const IMG_UINT32 dwRegOffset,
184 const IMG_UINT32 dwData);
186 PVRSRV_ERROR PDumpMsvdxRegPol(const IMG_CHAR* const pRegRegion,
187 const IMG_UINT32 ui32Offset,
188 const IMG_UINT32 ui32CheckFuncIdExt,
189 const IMG_UINT32 ui32RequValue,
190 const IMG_UINT32 ui32Enable,
191 const IMG_UINT32 ui32PollCount,
192 const IMG_UINT32 ui32TimeOut);
194 PVRSRV_ERROR PDumpMsvdxWriteRef(const IMG_CHAR* const pRegRegion,
195 const IMG_UINT32 ui32VLROffset,
196 const IMG_UINT32 ui32Physical );
198 IMG_BOOL PDumpIsLastCaptureFrameKM(IMG_VOID);
199 IMG_IMPORT IMG_BOOL PDumpIsCaptureFrameKM(IMG_VOID);
201 IMG_VOID PDumpMallocPagesPhys(PVRSRV_DEVICE_TYPE eDeviceType,
202 IMG_UINT32 ui32DevVAddr,
203 IMG_PUINT32 pui32PhysPages,
204 IMG_UINT32 ui32NumPages,
205 IMG_HANDLE hUniqueTag);
206 PVRSRV_ERROR PDumpSetMMUContext(PVRSRV_DEVICE_TYPE eDeviceType,
207 IMG_CHAR *pszMemSpace,
208 IMG_UINT32 *pui32MMUContextID,
209 IMG_UINT32 ui32MMUType,
210 IMG_HANDLE hUniqueTag1,
211 IMG_VOID *pvPDCPUAddr);
212 PVRSRV_ERROR PDumpClearMMUContext(PVRSRV_DEVICE_TYPE eDeviceType,
213 IMG_CHAR *pszMemSpace,
214 IMG_UINT32 ui32MMUContextID,
215 IMG_UINT32 ui32MMUType);
217 PVRSRV_ERROR PDumpPDDevPAddrKM(PVRSRV_KERNEL_MEM_INFO *psMemInfo,
218 IMG_UINT32 ui32Offset,
219 IMG_DEV_PHYADDR sPDDevPAddr,
220 IMG_HANDLE hUniqueTag1,
221 IMG_HANDLE hUniqueTag2);
223 IMG_BOOL PDumpTestNextFrame(IMG_UINT32 ui32CurrentFrame);
226 #if defined (COMMON_PDUMP_OS_SUPPORT) && !defined(SUPPORT_VGX)
228 PVRSRV_ERROR PDumpTASignatureRegisters(IMG_UINT32 ui32DumpFrameNum,
229 IMG_UINT32 ui32TAKickCount,
231 IMG_UINT32 *pui32Registers,
232 IMG_UINT32 ui32NumRegisters);
234 PVRSRV_ERROR PDump3DSignatureRegisters(IMG_UINT32 ui32DumpFrameNum,
236 IMG_UINT32 *pui32Registers,
237 IMG_UINT32 ui32NumRegisters);
239 PVRSRV_ERROR PDumpCounterRegisters(IMG_UINT32 ui32DumpFrameNum,
241 IMG_UINT32 *pui32Registers,
242 IMG_UINT32 ui32NumRegisters);
244 PVRSRV_ERROR PDumpRegRead(const IMG_UINT32 dwRegOffset, IMG_UINT32 ui32Flags);
246 PVRSRV_ERROR PDumpCycleCountRegRead(const IMG_UINT32 dwRegOffset, IMG_BOOL bLastFrame);
248 PVRSRV_ERROR PDumpIDLWithFlags(IMG_UINT32 ui32Clocks, IMG_UINT32 ui32Flags);
249 PVRSRV_ERROR PDumpIDL(IMG_UINT32 ui32Clocks);
251 PVRSRV_ERROR PDumpMallocPages(PVRSRV_DEVICE_TYPE eDeviceType,
252 IMG_UINT32 ui32DevVAddr,
253 IMG_CPU_VIRTADDR pvLinAddr,
254 IMG_HANDLE hOSMemHandle,
255 IMG_UINT32 ui32NumBytes,
256 IMG_UINT32 ui32PageSize,
257 IMG_HANDLE hUniqueTag);
258 PVRSRV_ERROR PDumpMallocPageTable(PVRSRV_DEVICE_TYPE eDeviceType,
259 IMG_CPU_VIRTADDR pvLinAddr,
260 IMG_UINT32 ui32NumBytes,
261 IMG_HANDLE hUniqueTag);
262 PVRSRV_ERROR PDumpFreePages(struct _BM_HEAP_ *psBMHeap,
263 IMG_DEV_VIRTADDR sDevVAddr,
264 IMG_UINT32 ui32NumBytes,
265 IMG_UINT32 ui32PageSize,
266 IMG_HANDLE hUniqueTag,
267 IMG_BOOL bInterleaved);
268 PVRSRV_ERROR PDumpFreePageTable(PVRSRV_DEVICE_TYPE eDeviceType,
269 IMG_CPU_VIRTADDR pvLinAddr,
270 IMG_UINT32 ui32NumBytes,
271 IMG_HANDLE hUniqueTag);
273 IMG_IMPORT PVRSRV_ERROR PDumpHWPerfCBKM(IMG_CHAR *pszFileName,
274 IMG_UINT32 ui32FileOffset,
275 IMG_DEV_VIRTADDR sDevBaseAddr,
277 IMG_UINT32 ui32PDumpFlags);
279 PVRSRV_ERROR PDumpCBP(PPVRSRV_KERNEL_MEM_INFO psROffMemInfo,
280 IMG_UINT32 ui32ROffOffset,
281 IMG_UINT32 ui32WPosVal,
282 IMG_UINT32 ui32PacketSize,
283 IMG_UINT32 ui32BufferSize,
284 IMG_UINT32 ui32Flags,
285 IMG_HANDLE hUniqueTag);
288 IMG_VOID PDumpTASignatureRegisters(IMG_UINT32 ui32DumpFrameNum,
289 IMG_UINT32 ui32TAKickCount,
291 IMG_UINT32 *pui32Registers,
292 IMG_UINT32 ui32NumRegisters);
293 IMG_VOID PDump3DSignatureRegisters(IMG_UINT32 ui32DumpFrameNum,
295 IMG_UINT32 *pui32Registers,
296 IMG_UINT32 ui32NumRegisters);
297 IMG_VOID PDumpCounterRegisters(IMG_UINT32 ui32DumpFrameNum,
299 IMG_UINT32 *pui32Registers,
300 IMG_UINT32 ui32NumRegisters);
302 IMG_VOID PDumpRegRead(const IMG_UINT32 dwRegOffset, IMG_UINT32 ui32Flags);
303 IMG_VOID PDumpCycleCountRegRead(const IMG_UINT32 dwRegOffset, IMG_BOOL bLastFrame);
305 IMG_VOID PDumpIDLWithFlags(IMG_UINT32 ui32Clocks, IMG_UINT32 ui32Flags);
306 IMG_VOID PDumpIDL(IMG_UINT32 ui32Clocks);
309 IMG_VOID PDumpMallocPages(PVRSRV_DEVICE_TYPE eDeviceType,
310 IMG_UINT32 ui32DevVAddr,
311 IMG_CPU_VIRTADDR pvLinAddr,
312 IMG_HANDLE hOSMemHandle,
313 IMG_UINT32 ui32NumBytes,
314 IMG_UINT32 ui32PageSize,
315 IMG_HANDLE hUniqueTag);
316 IMG_VOID PDumpMallocPageTable(PVRSRV_DEVICE_TYPE eDeviceType,
317 IMG_CPU_VIRTADDR pvLinAddr,
318 IMG_UINT32 ui32NumBytes,
319 IMG_HANDLE hUniqueTag);
320 IMG_VOID PDumpFreePages(struct _BM_HEAP_ *psBMHeap,
321 IMG_DEV_VIRTADDR sDevVAddr,
322 IMG_UINT32 ui32NumBytes,
323 IMG_UINT32 ui32PageSize,
324 IMG_HANDLE hUniqueTag,
325 IMG_BOOL bInterleaved);
326 IMG_VOID PDumpFreePageTable(PVRSRV_DEVICE_TYPE eDeviceType,
327 IMG_CPU_VIRTADDR pvLinAddr,
328 IMG_UINT32 ui32NumBytes,
329 IMG_HANDLE hUniqueTag);
331 IMG_IMPORT IMG_VOID PDumpHWPerfCBKM(IMG_CHAR *pszFileName,
332 IMG_UINT32 ui32FileOffset,
333 IMG_DEV_VIRTADDR sDevBaseAddr,
335 IMG_UINT32 ui32PDumpFlags);
337 IMG_VOID PDumpCBP(PPVRSRV_KERNEL_MEM_INFO psROffMemInfo,
338 IMG_UINT32 ui32ROffOffset,
339 IMG_UINT32 ui32WPosVal,
340 IMG_UINT32 ui32PacketSize,
341 IMG_UINT32 ui32BufferSize,
342 IMG_UINT32 ui32Flags,
343 IMG_HANDLE hUniqueTag);
347 IMG_VOID PDumpVGXMemToFile(IMG_CHAR *pszFileName,
348 IMG_UINT32 ui32FileOffset,
349 PVRSRV_KERNEL_MEM_INFO *psMemInfo,
352 IMG_UINT32 ui32PDumpFlags,
353 IMG_HANDLE hUniqueTag);
355 IMG_VOID PDumpSuspendKM(IMG_VOID);
356 IMG_VOID PDumpResumeKM(IMG_VOID);
358 #define PDUMPMEMPOL PDumpMemPolKM
359 #define PDUMPMEM PDumpMemKM
360 #define PDUMPMEM2 PDumpMem2KM
361 #define PDUMPMEMUM PDumpMemUM
362 #define PDUMPINIT PDumpInitCommon
363 #define PDUMPDEINIT PDumpDeInitCommon
364 #define PDUMPISLASTFRAME PDumpIsLastCaptureFrameKM
365 #define PDUMPTESTFRAME PDumpIsCaptureFrameKM
366 #define PDUMPTESTNEXTFRAME PDumpTestNextFrame
367 #define PDUMPREGWITHFLAGS PDumpRegWithFlagsKM
368 #define PDUMPREG PDumpRegKM
369 #define PDUMPCOMMENT PDumpComment
370 #define PDUMPCOMMENTWITHFLAGS PDumpCommentWithFlags
371 #define PDUMPREGPOL PDumpRegPolKM
372 #define PDUMPREGPOLWITHFLAGS PDumpRegPolWithFlagsKM
373 #define PDUMPMALLOCPAGES PDumpMallocPages
374 #define PDUMPMALLOCPAGETABLE PDumpMallocPageTable
375 #define PDUMPSETMMUCONTEXT PDumpSetMMUContext
376 #define PDUMPCLEARMMUCONTEXT PDumpClearMMUContext
377 #define PDUMPFREEPAGES PDumpFreePages
378 #define PDUMPFREEPAGETABLE PDumpFreePageTable
379 #define PDUMPPDREG PDumpPDReg
380 #define PDUMPPDREGWITHFLAGS PDumpPDRegWithFlags
381 #define PDUMPCBP PDumpCBP
382 #define PDUMPMALLOCPAGESPHYS PDumpMallocPagesPhys
383 #define PDUMPENDINITPHASE PDumpStopInitPhaseKM
384 #define PDUMPMSVDXREGWRITE PDumpMsvdxRegWrite
385 #define PDUMPMSVDXREGREAD PDumpMsvdxRegRead
386 #define PDUMPMSVDXPOL PDumpMsvdxRegPol
387 #define PDUMPMSVDXWRITEREF PDumpMsvdxWriteRef
388 #define PDUMPBITMAPKM PDumpBitmapKM
389 #define PDUMPDRIVERINFO PDumpDriverInfoKM
390 #define PDUMPIDLWITHFLAGS PDumpIDLWithFlags
391 #define PDUMPIDL PDumpIDL
392 #define PDUMPSUSPEND PDumpSuspendKM
393 #define PDUMPRESUME PDumpResumeKM
396 #if ((defined(LINUX) || defined(GCC_IA32)) || defined(GCC_ARM))
397 #define PDUMPMEMPOL(args...)
398 #define PDUMPMEM(args...)
399 #define PDUMPMEM2(args...)
400 #define PDUMPMEMUM(args...)
401 #define PDUMPINIT(args...)
402 #define PDUMPDEINIT(args...)
403 #define PDUMPISLASTFRAME(args...)
404 #define PDUMPTESTFRAME(args...)
405 #define PDUMPTESTNEXTFRAME(args...)
406 #define PDUMPREGWITHFLAGS(args...)
407 #define PDUMPREG(args...)
408 #define PDUMPCOMMENT(args...)
409 #define PDUMPREGPOL(args...)
410 #define PDUMPREGPOLWITHFLAGS(args...)
411 #define PDUMPMALLOCPAGES(args...)
412 #define PDUMPMALLOCPAGETABLE(args...)
413 #define PDUMPSETMMUCONTEXT(args...)
414 #define PDUMPCLEARMMUCONTEXT(args...)
415 #define PDUMPFREEPAGES(args...)
416 #define PDUMPFREEPAGETABLE(args...)
417 #define PDUMPPDREG(args...)
418 #define PDUMPPDREGWITHFLAGS(args...)
419 #define PDUMPSYNC(args...)
420 #define PDUMPCOPYTOMEM(args...)
421 #define PDUMPWRITE(args...)
422 #define PDUMPCBP(args...)
423 #define PDUMPCOMMENTWITHFLAGS(args...)
424 #define PDUMPMALLOCPAGESPHYS(args...)
425 #define PDUMPENDINITPHASE(args...)
426 #define PDUMPMSVDXREG(args...)
427 #define PDUMPMSVDXREGWRITE(args...)
428 #define PDUMPMSVDXREGREAD(args...)
429 #define PDUMPMSVDXPOLEQ(args...)
430 #define PDUMPMSVDXPOL(args...)
431 #define PDUMPBITMAPKM(args...)
432 #define PDUMPDRIVERINFO(args...)
433 #define PDUMPIDLWITHFLAGS(args...)
434 #define PDUMPIDL(args...)
435 #define PDUMPSUSPEND(args...)
436 #define PDUMPRESUME(args...)
437 #define PDUMPMSVDXWRITEREF(args...)
439 #error Compiler not specified
443 #if defined (__cplusplus)