1 /**********************************************************************
3 * Copyright(c) 2008 Imagination Technologies Ltd. All rights reserved.
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.
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.
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.
18 * The full GNU General Public License is included in this distribution in
19 * the file called "COPYING".
21 * Contact Information:
22 * Imagination Technologies Ltd. <gpl-support@imgtec.com>
23 * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK
25 ******************************************************************************/
31 #define PDUMP_FLAGS_NEVER 0x08000000
32 #define PDUMP_FLAGS_TOOUT2MEM 0x10000000
33 #define PDUMP_FLAGS_LASTFRAME 0x20000000
34 #define PDUMP_FLAGS_RESETLFBUFFER 0x40000000
35 #define PDUMP_FLAGS_CONTINUOUS 0x80000000
37 #define PDUMP_PD_UNIQUETAG ((void *)0)
38 #define PDUMP_PT_UNIQUETAG ((void *)0)
41 #define MAKEUNIQUETAG(hMemInfo) (0)
46 #define MAKEUNIQUETAG(hMemInfo) \
47 (((struct BM_BUF *)(((struct PVRSRV_KERNEL_MEM_INFO *) \
48 hMemInfo)->sMemBlk.hBuffer))->pMapping)
50 #define PDUMP_REG_FUNC_NAME PDumpReg
52 enum PVRSRV_ERROR PDumpMemPolKM(struct PVRSRV_KERNEL_MEM_INFO
53 *psMemInfo, u32 ui32Offset,
54 u32 ui32Value, u32 ui32Mask,
55 enum PDUMP_POLL_OPERATOR eOperator,
60 enum PVRSRV_ERROR PDumpMemUM(struct PVRSRV_PER_PROCESS_DATA
61 *psProcData, void *pvAltLinAddr,
63 struct PVRSRV_KERNEL_MEM_INFO
64 *psMemInfo, u32 ui32Offset,
65 u32 ui32Bytes, u32 ui32Flags,
68 enum PVRSRV_ERROR PDumpMemKM(void *pvAltLinAddr,
69 struct PVRSRV_KERNEL_MEM_INFO *psMemInfo, u32 ui32Offset,
70 u32 ui32Bytes, u32 ui32Flags, void *hUniqueTag);
72 enum PVRSRV_ERROR PDumpMemPagesKM(enum PVRSRV_DEVICE_TYPE eDeviceType,
73 struct IMG_DEV_PHYADDR *pPages, u32 ui32NumPages,
74 struct IMG_DEV_VIRTADDR sDevAddr, u32 ui32Start,
75 u32 ui32Length, u32 ui32Flags, void *hUniqueTag);
77 enum PVRSRV_ERROR PDumpMem2KM(enum PVRSRV_DEVICE_TYPE eDeviceType,
81 IMG_BOOL bInitialisePages,
82 void *hUniqueTag1, void *hUniqueTag2);
83 void PDumpInitCommon(void);
84 void PDumpDeInitCommon(void);
86 void PDumpDeInit(void);
87 enum PVRSRV_ERROR PDumpStartInitPhaseKM(void);
88 enum PVRSRV_ERROR PDumpStopInitPhaseKM(void);
89 enum PVRSRV_ERROR PDumpSetFrameKM(u32 ui32Frame);
90 enum PVRSRV_ERROR PDumpCommentKM(char *pszComment, u32 ui32Flags);
91 enum PVRSRV_ERROR PDumpDriverInfoKM(char *pszString, u32 ui32Flags);
92 enum PVRSRV_ERROR PDumpRegWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue,
95 enum PVRSRV_ERROR PDumpBitmapKM(char *pszFileName, u32 ui32FileOffset,
96 u32 ui32Width, u32 ui32Height, u32 ui32StrideInBytes,
97 struct IMG_DEV_VIRTADDR sDevBaseAddr, u32 ui32Size,
98 enum PDUMP_PIXEL_FORMAT ePixelFormat,
99 enum PDUMP_MEM_FORMAT eMemFormat, u32 ui32PDumpFlags);
100 void PDumpHWPerfCBKM(char *pszFileName, u32 ui32FileOffset,
101 struct IMG_DEV_VIRTADDR sDevBaseAddr,
102 u32 ui32Size, u32 ui32PDumpFlags);
103 enum PVRSRV_ERROR PDumpReadRegKM(char *pszFileName, u32 ui32FileOffset,
104 u32 ui32Address, u32 ui32Size, u32 ui32PDumpFlags);
105 void PDUMP_REG_FUNC_NAME(u32 dwReg, u32 dwData);
107 void PDumpMsvdxRegRead(const char *const pRegRegion, const u32 dwRegOffset);
109 void PDumpMsvdxRegWrite(const char *const pRegRegion, const u32 dwRegOffset,
112 enum PVRSRV_ERROR PDumpMsvdxRegPol(const char *const pRegRegion,
113 const u32 ui32Offset, const u32 ui32CheckFuncIdExt,
114 const u32 ui32RequValue, const u32 ui32Enable,
115 const u32 ui32PollCount, const u32 ui32TimeOut);
117 enum PVRSRV_ERROR PDumpMsvdxWriteRef(const char *const pRegRegion,
118 const u32 ui32VLROffset, const u32 ui32Physical);
120 void PDumpComment(char *pszFormat, ...);
122 void PDumpCommentWithFlags(u32 ui32Flags, char *pszFormat, ...);
123 enum PVRSRV_ERROR PDumpRegPolKM(u32 ui32RegAddr, u32 ui32RegValue,
125 enum PVRSRV_ERROR PDumpRegPolWithFlagsKM(u32 ui32RegAddr, u32 ui32RegValue,
126 u32 ui32Mask, u32 ui32Flags);
128 IMG_BOOL PDumpIsLastCaptureFrameKM(void);
129 IMG_BOOL PDumpIsCaptureFrameKM(void);
131 void PDumpMallocPages(enum PVRSRV_DEVICE_TYPE eDeviceType,
132 u32 ui32DevVAddr, void *pvLinAddr, void *hOSMemHandle,
133 u32 ui32NumBytes, u32 ui32PageSize, void *hUniqueTag);
134 void PDumpMallocPagesPhys(enum PVRSRV_DEVICE_TYPE eDeviceType,
135 u32 ui32DevVAddr, u32 *pui32PhysPages, u32 ui32NumPages,
137 void PDumpMallocPageTable(enum PVRSRV_DEVICE_TYPE eDeviceType,
138 void *pvLinAddr, u32 ui32NumBytes, void *hUniqueTag);
139 enum PVRSRV_ERROR PDumpSetMMUContext(enum PVRSRV_DEVICE_TYPE eDeviceType,
140 char *pszMemSpace, u32 *pui32MMUContextID,
141 u32 ui32MMUType, void *hUniqueTag1,
143 enum PVRSRV_ERROR PDumpClearMMUContext(enum PVRSRV_DEVICE_TYPE eDeviceType,
145 u32 ui32MMUContextID, u32 ui32MMUType);
146 void PDumpFreePages(struct BM_HEAP *psBMHeap,
147 struct IMG_DEV_VIRTADDR sDevVAddr, u32 ui32NumBytes,
148 u32 ui32PageSize, void *hUniqueTag, IMG_BOOL bInterleaved);
149 void PDumpFreePageTable(enum PVRSRV_DEVICE_TYPE eDeviceType,
150 void *pvLinAddr, u32 ui32NumBytes, void *hUniqueTag);
151 void PDumpPDReg(u32 ui32Reg, u32 ui32dwData, void *hUniqueTag);
152 void PDumpPDRegWithFlags(u32 ui32Reg, u32 ui32Data, u32 ui32Flags,
155 enum PVRSRV_ERROR PDumpPDDevPAddrKM(struct PVRSRV_KERNEL_MEM_INFO *psMemInfo,
156 u32 ui32Offset, struct IMG_DEV_PHYADDR sPDDevPAddr,
157 void *hUniqueTag1, void *hUniqueTag2);
159 IMG_BOOL PDumpTestNextFrame(u32 ui32CurrentFrame);
161 void PDumpTASignatureRegisters(u32 ui32DumpFrameNum,
162 u32 ui32TAKickCount, IMG_BOOL bLastFrame,
163 u32 *pui32Registers, u32 ui32NumRegisters);
165 void PDump3DSignatureRegisters(u32 ui32DumpFrameNum, IMG_BOOL bLastFrame,
166 u32 *pui32Registers, u32 ui32NumRegisters);
168 void PDumpRegRead(const u32 dwRegOffset, u32 ui32Flags);
170 void PDumpCycleCountRegRead(const u32 dwRegOffset, IMG_BOOL bLastFrame);
172 void PDumpCounterRegisters(u32 ui32DumpFrameNum, IMG_BOOL bLastFrame,
173 u32 *pui32Registers, u32 ui32NumRegisters);
175 void PDumpCBP(struct PVRSRV_KERNEL_MEM_INFO *psROffMemInfo,
179 u32 ui32BufferSize, u32 ui32Flags, void *hUniqueTag);
181 void PDumpIDLWithFlags(u32 ui32Clocks, u32 ui32Flags);
182 void PDumpIDL(u32 ui32Clocks);
184 void PDumpSuspendKM(void);
185 void PDumpResumeKM(void);
187 #define PDUMPMEMPOL PDumpMemPolKM
188 #define PDUMPMEM PDumpMemKM
189 #define PDUMPMEM2 PDumpMem2KM
190 #define PDUMPMEMUM PDumpMemUM
191 #define PDUMPINIT PDumpInitCommon
192 #define PDUMPDEINIT PDumpDeInitCommon
193 #define PDUMPISLASTFRAME PDumpIsLastCaptureFrameKM
194 #define PDUMPTESTFRAME PDumpIsCaptureFrameKM
195 #define PDUMPTESTNEXTFRAME PDumpTestNextFrame
196 #define PDUMPREGWITHFLAGS PDumpRegWithFlagsKM
197 #define PDUMPREG PDUMP_REG_FUNC_NAME
198 #define PDUMPCOMMENT PDumpComment
199 #define PDUMPCOMMENTWITHFLAGS PDumpCommentWithFlags
200 #define PDUMPREGPOL PDumpRegPolKM
201 #define PDUMPREGPOLWITHFLAGS PDumpRegPolWithFlagsKM
202 #define PDUMPMALLOCPAGES PDumpMallocPages
203 #define PDUMPMALLOCPAGETABLE PDumpMallocPageTable
204 #define PDUMPSETMMUCONTEXT PDumpSetMMUContext
205 #define PDUMPCLEARMMUCONTEXT PDumpClearMMUContext
206 #define PDUMPFREEPAGES PDumpFreePages
207 #define PDUMPFREEPAGETABLE PDumpFreePageTable
208 #define PDUMPPDREG PDumpPDReg
209 #define PDUMPPDREGWITHFLAGS PDumpPDRegWithFlags
210 #define PDUMPCBP PDumpCBP
211 #define PDUMPMALLOCPAGESPHYS PDumpMallocPagesPhys
212 #define PDUMPENDINITPHASE PDumpStopInitPhaseKM
213 #define PDUMPMSVDXREGWRITE PDumpMsvdxRegWrite
214 #define PDUMPMSVDXREGREAD PDumpMsvdxRegRead
215 #define PDUMPMSVDXPOL PDumpMsvdxRegPol
216 #define PDUMPMSVDXWRITEREF PDumpMsvdxWriteRef
217 #define PDUMPBITMAPKM PDumpBitmapKM
218 #define PDUMPDRIVERINFO PDumpDriverInfoKM
219 #define PDUMPIDLWITHFLAGS PDumpIDLWithFlags
220 #define PDUMPIDL PDumpIDL
221 #define PDUMPSUSPEND PDumpSuspendKM
222 #define PDUMPRESUME PDumpResumeKM
225 #define PDUMPMEMPOL(args...)
226 #define PDUMPMEM(args...)
227 #define PDUMPMEM2(args...)
228 #define PDUMPMEMUM(args...)
229 #define PDUMPINIT(args...)
230 #define PDUMPDEINIT(args...)
231 #define PDUMPISLASTFRAME(args...)
232 #define PDUMPTESTFRAME(args...)
233 #define PDUMPTESTNEXTFRAME(args...)
234 #define PDUMPREGWITHFLAGS(args...)
235 #define PDUMPREG(args...)
236 #define PDUMPCOMMENT(args...)
237 #define PDUMPREGPOL(args...)
238 #define PDUMPREGPOLWITHFLAGS(args...)
239 #define PDUMPMALLOCPAGES(args...)
240 #define PDUMPMALLOCPAGETABLE(args...)
241 #define PDUMPSETMMUCONTEXT(args...)
242 #define PDUMPCLEARMMUCONTEXT(args...)
243 #define PDUMPFREEPAGES(args...)
244 #define PDUMPFREEPAGETABLE(args...)
245 #define PDUMPPDREG(args...)
246 #define PDUMPPDREGWITHFLAGS(args...)
247 #define PDUMPSYNC(args...)
248 #define PDUMPCOPYTOMEM(args...)
249 #define PDUMPWRITE(args...)
250 #define PDUMPCBP(args...)
251 #define PDUMPCOMMENTWITHFLAGS(args...)
252 #define PDUMPMALLOCPAGESPHYS(args...)
253 #define PDUMPENDINITPHASE(args...)
254 #define PDUMPMSVDXREG(args...)
255 #define PDUMPMSVDXREGWRITE(args...)
256 #define PDUMPMSVDXREGREAD(args...)
257 #define PDUMPMSVDXPOLEQ(args...)
258 #define PDUMPMSVDXPOL(args...)
259 #define PDUMPBITMAPKM(args...)
260 #define PDUMPDRIVERINFO(args...)
261 #define PDUMPIDLWITHFLAGS(args...)
262 #define PDUMPIDL(args...)
263 #define PDUMPSUSPEND(args...)
264 #define PDUMPRESUME(args...)
265 #define PDUMPMSVDXWRITEREF(args...)