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 ******************************************************************************/
25 #include <linux/string.h>
28 #include "img_types.h"
29 #include "pvr_debug.h"
38 #define LAST_FRAME_BUF_SIZE 1024
40 typedef struct _DBG_LASTFRAME_BUFFER_
43 IMG_UINT8 ui8Buffer[LAST_FRAME_BUF_SIZE];
44 IMG_UINT32 ui32BufLen;
45 struct _DBG_LASTFRAME_BUFFER_ *psNext;
46 } *PDBG_LASTFRAME_BUFFER;
49 static PDBG_STREAM g_psStreamList = 0;
50 static PDBG_LASTFRAME_BUFFER g_psLFBufferList;
52 static IMG_UINT32 g_ui32LOff = 0;
53 static IMG_UINT32 g_ui32Line = 0;
54 static IMG_UINT32 g_ui32MonoLines = 25;
56 static IMG_BOOL g_bHotkeyMiddump = IMG_FALSE;
57 static IMG_UINT32 g_ui32HotkeyMiddumpStart = 0xffffffff;
58 static IMG_UINT32 g_ui32HotkeyMiddumpEnd = 0xffffffff;
60 IMG_VOID * g_pvAPIMutex=IMG_NULL;
62 extern IMG_UINT32 g_ui32HotKeyFrame;
63 extern IMG_BOOL g_bHotKeyPressed;
64 extern IMG_BOOL g_bHotKeyRegistered;
66 IMG_BOOL gbDumpThisFrame = IMG_FALSE;
69 IMG_UINT32 SpaceInStream(PDBG_STREAM psStream);
70 IMG_BOOL ExpandStreamBuffer(PDBG_STREAM psStream, IMG_UINT32 ui32NewSize);
71 PDBG_LASTFRAME_BUFFER FindLFBuf(PDBG_STREAM psStream);
73 DBGKM_SERVICE_TABLE g_sDBGKMServices =
75 sizeof (DBGKM_SERVICE_TABLE),
76 ExtDBGDrivCreateStream,
77 ExtDBGDrivDestroyStream,
79 ExtDBGDrivWriteString,
83 ExtDBGDrivSetCaptureMode,
84 ExtDBGDrivSetOutputMode,
85 ExtDBGDrivSetDebugLevel,
88 ExtDBGDrivOverrideMode,
89 ExtDBGDrivDefaultMode,
91 ExtDBGDrivWriteStringCM,
95 ExtDBGDrivStartInitPhase,
96 ExtDBGDrivStopInitPhase,
97 ExtDBGDrivIsCaptureFrame,
100 ExtDBGDrivGetStreamOffset,
101 ExtDBGDrivSetStreamOffset,
102 ExtDBGDrivIsLastCaptureFrame,
103 ExtDBGDrivWaitForEvent
110 IMG_VOID * IMG_CALLCONV ExtDBGDrivCreateStream(IMG_CHAR * pszName, IMG_UINT32 ui32CapMode, IMG_UINT32 ui32OutMode, IMG_UINT32 ui32Flags, IMG_UINT32 ui32Size)
115 HostAquireMutex(g_pvAPIMutex);
117 pvRet=DBGDrivCreateStream(pszName, ui32CapMode, ui32OutMode, ui32Flags, ui32Size);
120 HostReleaseMutex(g_pvAPIMutex);
125 void IMG_CALLCONV ExtDBGDrivDestroyStream(PDBG_STREAM psStream)
128 HostAquireMutex(g_pvAPIMutex);
130 DBGDrivDestroyStream(psStream);
133 HostReleaseMutex(g_pvAPIMutex);
138 IMG_VOID * IMG_CALLCONV ExtDBGDrivFindStream(IMG_CHAR * pszName, IMG_BOOL bResetStream)
143 HostAquireMutex(g_pvAPIMutex);
145 pvRet=DBGDrivFindStream(pszName, bResetStream);
148 HostReleaseMutex(g_pvAPIMutex);
153 IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level)
158 HostAquireMutex(g_pvAPIMutex);
160 ui32Ret=DBGDrivWriteString(psStream, pszString, ui32Level);
163 HostReleaseMutex(g_pvAPIMutex);
168 IMG_UINT32 IMG_CALLCONV ExtDBGDrivReadString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Limit)
173 HostAquireMutex(g_pvAPIMutex);
175 ui32Ret=DBGDrivReadString(psStream, pszString, ui32Limit);
178 HostReleaseMutex(g_pvAPIMutex);
183 IMG_UINT32 IMG_CALLCONV ExtDBGDrivWrite(PDBG_STREAM psStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level)
188 HostAquireMutex(g_pvAPIMutex);
190 ui32Ret=DBGDrivWrite(psStream, pui8InBuf, ui32InBuffSize, ui32Level);
193 HostReleaseMutex(g_pvAPIMutex);
198 IMG_UINT32 IMG_CALLCONV ExtDBGDrivRead(PDBG_STREAM psStream, IMG_BOOL bReadInitBuffer, IMG_UINT32 ui32OutBuffSize,IMG_UINT8 * pui8OutBuf)
203 HostAquireMutex(g_pvAPIMutex);
205 ui32Ret=DBGDrivRead(psStream, bReadInitBuffer, ui32OutBuffSize, pui8OutBuf);
208 HostReleaseMutex(g_pvAPIMutex);
213 void IMG_CALLCONV ExtDBGDrivSetCaptureMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode,IMG_UINT32 ui32Start,IMG_UINT32 ui32End,IMG_UINT32 ui32SampleRate)
216 HostAquireMutex(g_pvAPIMutex);
218 DBGDrivSetCaptureMode(psStream, ui32Mode, ui32Start, ui32End, ui32SampleRate);
221 HostReleaseMutex(g_pvAPIMutex);
226 void IMG_CALLCONV ExtDBGDrivSetOutputMode(PDBG_STREAM psStream,IMG_UINT32 ui32OutMode)
229 HostAquireMutex(g_pvAPIMutex);
231 DBGDrivSetOutputMode(psStream, ui32OutMode);
234 HostReleaseMutex(g_pvAPIMutex);
239 void IMG_CALLCONV ExtDBGDrivSetDebugLevel(PDBG_STREAM psStream,IMG_UINT32 ui32DebugLevel)
242 HostAquireMutex(g_pvAPIMutex);
244 DBGDrivSetDebugLevel(psStream, ui32DebugLevel);
247 HostReleaseMutex(g_pvAPIMutex);
252 void IMG_CALLCONV ExtDBGDrivSetFrame(PDBG_STREAM psStream,IMG_UINT32 ui32Frame)
255 HostAquireMutex(g_pvAPIMutex);
257 DBGDrivSetFrame(psStream, ui32Frame);
260 HostReleaseMutex(g_pvAPIMutex);
265 IMG_UINT32 IMG_CALLCONV ExtDBGDrivGetFrame(PDBG_STREAM psStream)
270 HostAquireMutex(g_pvAPIMutex);
272 ui32Ret=DBGDrivGetFrame(psStream);
275 HostReleaseMutex(g_pvAPIMutex);
280 IMG_BOOL IMG_CALLCONV ExtDBGDrivIsLastCaptureFrame(PDBG_STREAM psStream)
285 HostAquireMutex(g_pvAPIMutex);
287 bRet = DBGDrivIsLastCaptureFrame(psStream);
290 HostReleaseMutex(g_pvAPIMutex);
295 IMG_BOOL IMG_CALLCONV ExtDBGDrivIsCaptureFrame(PDBG_STREAM psStream, IMG_BOOL bCheckPreviousFrame)
300 HostAquireMutex(g_pvAPIMutex);
302 bRet = DBGDrivIsCaptureFrame(psStream, bCheckPreviousFrame);
305 HostReleaseMutex(g_pvAPIMutex);
310 void IMG_CALLCONV ExtDBGDrivOverrideMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode)
313 HostAquireMutex(g_pvAPIMutex);
315 DBGDrivOverrideMode(psStream, ui32Mode);
318 HostReleaseMutex(g_pvAPIMutex);
323 void IMG_CALLCONV ExtDBGDrivDefaultMode(PDBG_STREAM psStream)
326 HostAquireMutex(g_pvAPIMutex);
328 DBGDrivDefaultMode(psStream);
331 HostReleaseMutex(g_pvAPIMutex);
336 IMG_UINT32 IMG_CALLCONV ExtDBGDrivWrite2(PDBG_STREAM psStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level)
341 HostAquireMutex(g_pvAPIMutex);
343 ui32Ret=DBGDrivWrite2(psStream, pui8InBuf, ui32InBuffSize, ui32Level);
346 HostReleaseMutex(g_pvAPIMutex);
351 IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteStringCM(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level)
356 HostAquireMutex(g_pvAPIMutex);
358 ui32Ret=DBGDrivWriteStringCM(psStream, pszString, ui32Level);
361 HostReleaseMutex(g_pvAPIMutex);
366 IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteCM(PDBG_STREAM psStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level)
371 HostAquireMutex(g_pvAPIMutex);
373 ui32Ret=DBGDrivWriteCM(psStream, pui8InBuf, ui32InBuffSize, ui32Level);
376 HostReleaseMutex(g_pvAPIMutex);
381 void IMG_CALLCONV ExtDBGDrivSetMarker(PDBG_STREAM psStream, IMG_UINT32 ui32Marker)
384 HostAquireMutex(g_pvAPIMutex);
386 DBGDrivSetMarker(psStream, ui32Marker);
389 HostReleaseMutex(g_pvAPIMutex);
394 IMG_UINT32 IMG_CALLCONV ExtDBGDrivGetMarker(PDBG_STREAM psStream)
396 IMG_UINT32 ui32Marker;
399 HostAquireMutex(g_pvAPIMutex);
401 ui32Marker = DBGDrivGetMarker(psStream);
404 HostReleaseMutex(g_pvAPIMutex);
409 IMG_UINT32 IMG_CALLCONV ExtDBGDrivWriteLF(PDBG_STREAM psStream, IMG_UINT8 * pui8InBuf, IMG_UINT32 ui32InBuffSize, IMG_UINT32 ui32Level, IMG_UINT32 ui32Flags)
414 HostAquireMutex(g_pvAPIMutex);
416 ui32Ret = DBGDrivWriteLF(psStream, pui8InBuf, ui32InBuffSize, ui32Level, ui32Flags);
419 HostReleaseMutex(g_pvAPIMutex);
424 IMG_UINT32 IMG_CALLCONV ExtDBGDrivReadLF(PDBG_STREAM psStream, IMG_UINT32 ui32OutBuffSize, IMG_UINT8 * pui8OutBuf)
429 HostAquireMutex(g_pvAPIMutex);
431 ui32Ret = DBGDrivReadLF(psStream, ui32OutBuffSize, pui8OutBuf);
434 HostReleaseMutex(g_pvAPIMutex);
440 IMG_VOID IMG_CALLCONV ExtDBGDrivStartInitPhase(PDBG_STREAM psStream)
443 HostAquireMutex(g_pvAPIMutex);
445 DBGDrivStartInitPhase(psStream);
448 HostReleaseMutex(g_pvAPIMutex);
453 IMG_VOID IMG_CALLCONV ExtDBGDrivStopInitPhase(PDBG_STREAM psStream)
456 HostAquireMutex(g_pvAPIMutex);
458 DBGDrivStopInitPhase(psStream);
461 HostReleaseMutex(g_pvAPIMutex);
466 IMG_UINT32 IMG_CALLCONV ExtDBGDrivGetStreamOffset(PDBG_STREAM psStream)
471 HostAquireMutex(g_pvAPIMutex);
473 ui32Ret = DBGDrivGetStreamOffset(psStream);
476 HostReleaseMutex(g_pvAPIMutex);
481 IMG_VOID IMG_CALLCONV ExtDBGDrivSetStreamOffset(PDBG_STREAM psStream, IMG_UINT32 ui32StreamOffset)
484 HostAquireMutex(g_pvAPIMutex);
486 DBGDrivSetStreamOffset(psStream, ui32StreamOffset);
489 HostReleaseMutex(g_pvAPIMutex);
492 IMG_VOID IMG_CALLCONV ExtDBGDrivWaitForEvent(DBG_EVENT eEvent)
494 #if defined(SUPPORT_DBGDRV_EVENT_OBJECTS)
495 DBGDrivWaitForEvent(eEvent);
497 PVR_UNREFERENCED_PARAMETER(eEvent);
501 IMG_UINT32 AtoI(IMG_CHAR *szIn)
504 IMG_UINT32 ui32Value = 0;
505 IMG_UINT32 ui32Digit=1;
506 IMG_UINT32 ui32Base=10;
511 while (szIn[iLen] > 0)
524 while (szIn[iPos] == '0')
528 if (szIn[iPos] == '\0')
532 if (szIn[iPos] == 'x' || szIn[iPos] == 'X')
539 for (iPos = iLen - 1; iPos >= 0; iPos --)
543 if ( (bc >= 'a') && (bc <= 'f') && ui32Base == 16)
548 if ( (bc >= 'A') && (bc <= 'F') && ui32Base == 16)
553 if ((bc >= '0') && (bc <= '9'))
560 ui32Value += (IMG_UINT32)bc * ui32Digit;
562 ui32Digit = ui32Digit * ui32Base;
568 IMG_BOOL StreamValid(PDBG_STREAM psStream)
572 psThis = g_psStreamList;
576 if (psStream && (psThis == psStream))
582 psThis = psThis->psNext;
590 void Write(PDBG_STREAM psStream,IMG_UINT8 * pui8Data,IMG_UINT32 ui32InBuffSize)
594 if ((psStream->ui32WPtr + ui32InBuffSize) > psStream->ui32Size)
596 IMG_UINT32 ui32B1 = psStream->ui32Size - psStream->ui32WPtr;
597 IMG_UINT32 ui32B2 = ui32InBuffSize - ui32B1;
600 HostMemCopy((IMG_VOID *)(psStream->ui32Base + psStream->ui32WPtr),
601 (IMG_VOID *) pui8Data,
605 HostMemCopy((IMG_VOID *)psStream->ui32Base,
606 (IMG_VOID *)((IMG_UINT32) pui8Data + ui32B1),
610 psStream->ui32WPtr = ui32B2;
614 HostMemCopy((IMG_VOID *)(psStream->ui32Base + psStream->ui32WPtr),
615 (IMG_VOID *) pui8Data,
618 psStream->ui32WPtr += ui32InBuffSize;
620 if (psStream->ui32WPtr == psStream->ui32Size)
622 psStream->ui32WPtr = 0;
625 psStream->ui32DataWritten += ui32InBuffSize;
629 void MonoOut(IMG_CHAR * pszString,IMG_BOOL bNewLine)
634 pScreen = (IMG_CHAR *) DBGDRIV_MONOBASE;
636 pScreen += g_ui32Line * 160;
643 pScreen[g_ui32LOff + (i*2)] = pszString[i];
644 pScreen[g_ui32LOff + (i*2)+1] = 127;
647 while ((pszString[i] != 0) && (i < 4096));
659 if (g_ui32Line == g_ui32MonoLines)
661 g_ui32Line = g_ui32MonoLines - 1;
663 HostMemCopy((IMG_VOID *)DBGDRIV_MONOBASE,(IMG_VOID *)(DBGDRIV_MONOBASE + 160),160 * (g_ui32MonoLines - 1));
665 HostMemSet((IMG_VOID *)(DBGDRIV_MONOBASE + (160 * (g_ui32MonoLines - 1))),0,160);
671 void AppendName(IMG_CHAR * pszOut,IMG_CHAR * pszBase,IMG_CHAR * pszName)
678 while (pszBase[i] != 0)
680 pszOut[i] = pszBase[i];
687 while (pszName[i] != 0)
689 pszOut[ui32Off+i] = pszName[i];
693 pszOut[ui32Off+i] = pszName[i];
697 IMG_VOID * IMG_CALLCONV DBGDrivCreateStream(IMG_CHAR * pszName,
698 IMG_UINT32 ui32CapMode,
699 IMG_UINT32 ui32OutMode,
700 IMG_UINT32 ui32Flags,
703 PDBG_STREAM psStream;
704 PDBG_STREAM psInitStream;
705 PDBG_LASTFRAME_BUFFER psLFBuffer;
712 psStream = (PDBG_STREAM) DBGDrivFindStream(pszName, IMG_FALSE);
716 return ((IMG_VOID *) psStream);
721 psStream = HostNonPageablePageAlloc(1);
722 psInitStream = HostNonPageablePageAlloc(1);
723 psLFBuffer = HostNonPageablePageAlloc(1);
730 PVR_DPF((PVR_DBG_ERROR,"DBGDriv: Couldn't alloc control structs\n\r"));
731 return((IMG_VOID *) 0);
735 if ((ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0)
737 pvBase = HostNonPageablePageAlloc(ui32Size);
741 pvBase = HostPageablePageAlloc(ui32Size);
746 PVR_DPF((PVR_DBG_ERROR,"DBGDriv: Couldn't alloc Stream buffer\n\r"));
747 HostNonPageablePageFree(psStream);
748 return((IMG_VOID *) 0);
753 psStream->psNext = 0;
754 psStream->ui32Flags = ui32Flags;
755 psStream->ui32Base = (IMG_UINT32)pvBase;
756 psStream->ui32Size = ui32Size * 4096UL;
757 psStream->ui32RPtr = 0;
758 psStream->ui32WPtr = 0;
759 psStream->ui32DataWritten = 0;
760 psStream->ui32CapMode = ui32CapMode;
761 psStream->ui32OutMode = ui32OutMode;
762 psStream->ui32DebugLevel = DEBUG_LEVEL_0;
763 psStream->ui32DefaultMode = ui32CapMode;
764 psStream->ui32Start = 0;
765 psStream->ui32End = 0;
766 psStream->ui32Current = 0;
767 psStream->ui32SampleRate = 1;
768 psStream->ui32Access = 0;
769 psStream->ui32Timeout = 0;
770 psStream->ui32Marker = 0;
771 psStream->bInitPhaseComplete = IMG_FALSE;
774 if ((ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0)
776 pvBase = HostNonPageablePageAlloc(ui32Size);
780 pvBase = HostPageablePageAlloc(ui32Size);
785 PVR_DPF((PVR_DBG_ERROR,"DBGDriv: Couldn't alloc InitStream buffer\n\r"));
787 if ((psStream->ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0)
789 HostNonPageablePageFree((IMG_VOID *)psStream->ui32Base);
793 HostPageablePageFree((IMG_VOID *)psStream->ui32Base);
795 HostNonPageablePageFree(psStream);
796 return((IMG_VOID *) 0);
799 psInitStream->psNext = 0;
800 psInitStream->ui32Flags = ui32Flags;
801 psInitStream->ui32Base = (IMG_UINT32)pvBase;
802 psInitStream->ui32Size = ui32Size * 4096UL;
803 psInitStream->ui32RPtr = 0;
804 psInitStream->ui32WPtr = 0;
805 psInitStream->ui32DataWritten = 0;
806 psInitStream->ui32CapMode = ui32CapMode;
807 psInitStream->ui32OutMode = ui32OutMode;
808 psInitStream->ui32DebugLevel = DEBUG_LEVEL_0;
809 psInitStream->ui32DefaultMode = ui32CapMode;
810 psInitStream->ui32Start = 0;
811 psInitStream->ui32End = 0;
812 psInitStream->ui32Current = 0;
813 psInitStream->ui32SampleRate = 1;
814 psInitStream->ui32Access = 0;
815 psInitStream->ui32Timeout = 0;
816 psInitStream->ui32Marker = 0;
817 psInitStream->bInitPhaseComplete = IMG_FALSE;
819 psStream->psInitStream = psInitStream;
822 psLFBuffer->psStream = psStream;
823 psLFBuffer->ui32BufLen = 0UL;
825 g_bHotkeyMiddump = IMG_FALSE;
826 g_ui32HotkeyMiddumpStart = 0xffffffffUL;
827 g_ui32HotkeyMiddumpEnd = 0xffffffffUL;
835 psStream->szName[ui32Off] = pszName[ui32Off];
839 while ((pszName[ui32Off] != 0) && (ui32Off < (4096UL - sizeof(DBG_STREAM))));
841 psStream->szName[ui32Off] = pszName[ui32Off];
845 psStream->psNext = g_psStreamList;
846 g_psStreamList = psStream;
848 psLFBuffer->psNext = g_psLFBufferList;
849 g_psLFBufferList = psLFBuffer;
852 return((IMG_VOID *) psStream);
855 void IMG_CALLCONV DBGDrivDestroyStream(PDBG_STREAM psStream)
857 PDBG_STREAM psStreamThis;
858 PDBG_STREAM psStreamPrev;
859 PDBG_LASTFRAME_BUFFER psLFBuffer;
860 PDBG_LASTFRAME_BUFFER psLFThis;
861 PDBG_LASTFRAME_BUFFER psLFPrev;
863 PVR_DPF((PVR_DBG_MESSAGE, "DBGDriv: Destroying stream %s\r\n", psStream->szName ));
867 if (!StreamValid(psStream))
872 psLFBuffer = FindLFBuf(psStream);
876 psStreamThis = g_psStreamList;
881 if (psStreamThis == psStream)
885 psStreamPrev->psNext = psStreamThis->psNext;
889 g_psStreamList = psStreamThis->psNext;
896 psStreamPrev = psStreamThis;
897 psStreamThis = psStreamThis->psNext;
901 psLFThis = g_psLFBufferList;
906 if (psLFThis == psLFBuffer)
910 psLFPrev->psNext = psLFThis->psNext;
914 g_psLFBufferList = psLFThis->psNext;
922 psLFThis = psLFThis->psNext;
927 if (psStream->ui32CapMode & DEBUG_CAPMODE_HOTKEY)
934 if ((psStream->ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0)
936 HostNonPageablePageFree((IMG_VOID *)psStream->ui32Base);
937 HostNonPageablePageFree((IMG_VOID *)psStream->psInitStream->ui32Base);
941 HostPageablePageFree((IMG_VOID *)psStream->ui32Base);
942 HostPageablePageFree((IMG_VOID *)psStream->psInitStream->ui32Base);
945 HostNonPageablePageFree(psStream->psInitStream);
946 HostNonPageablePageFree(psStream);
947 HostNonPageablePageFree(psLFBuffer);
949 if (g_psStreamList == 0)
951 PVR_DPF((PVR_DBG_MESSAGE,"DBGDriv: Stream list now empty" ));
957 IMG_VOID * IMG_CALLCONV DBGDrivFindStream(IMG_CHAR * pszName, IMG_BOOL bResetStream)
959 PDBG_STREAM psStream;
968 for (psThis = g_psStreamList; psThis != IMG_NULL; psThis = psThis->psNext)
973 if (strlen(psThis->szName) == strlen(pszName))
975 while ((psThis->szName[ui32Off] != 0) && (pszName[ui32Off] != 0) && (ui32Off < 128) && bAreSame)
977 if (psThis->szName[ui32Off] != pszName[ui32Off])
979 bAreSame = IMG_FALSE;
987 bAreSame = IMG_FALSE;
997 if(bResetStream && psStream)
999 static IMG_CHAR szComment[] = "-- Init phase terminated\r\n";
1000 psStream->psInitStream->ui32RPtr = 0;
1001 psStream->ui32RPtr = 0;
1002 psStream->ui32WPtr = 0;
1003 psStream->ui32DataWritten = psStream->psInitStream->ui32DataWritten;
1004 if (psStream->bInitPhaseComplete == IMG_FALSE)
1006 if (psStream->ui32Flags & DEBUG_FLAGS_TEXTSTREAM)
1008 DBGDrivWrite2(psStream, (IMG_UINT8 *)szComment, sizeof(szComment) - 1, 0x01);
1010 psStream->bInitPhaseComplete = IMG_TRUE;
1014 return((IMG_VOID *) psStream);
1017 IMG_UINT32 IMG_CALLCONV DBGDrivWriteStringCM(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level)
1021 if (!StreamValid(psStream))
1023 return(0xFFFFFFFFUL);
1028 if (psStream->ui32CapMode & DEBUG_CAPMODE_FRAMED)
1030 if ((psStream->ui32Flags & DEBUG_FLAGS_ENABLESAMPLE) == 0)
1037 if (psStream->ui32CapMode == DEBUG_CAPMODE_HOTKEY)
1039 if ((psStream->ui32Current != g_ui32HotKeyFrame) || (g_bHotKeyPressed == IMG_FALSE))
1046 return(DBGDrivWriteString(psStream,pszString,ui32Level));
1050 IMG_UINT32 IMG_CALLCONV DBGDrivWriteString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Level)
1053 IMG_UINT32 ui32Space;
1054 IMG_UINT32 ui32WPtr;
1055 IMG_UINT8 * pui8Buffer;
1059 if (!StreamValid(psStream))
1061 return(0xFFFFFFFFUL);
1066 if ((psStream->ui32DebugLevel & ui32Level) == 0)
1068 return(0xFFFFFFFFUL);
1074 if ((psStream->ui32OutMode & DEBUG_OUTMODE_ASYNC) == 0)
1076 if (psStream->ui32OutMode & DEBUG_OUTMODE_STANDARDDBG)
1078 PVR_DPF((PVR_DBG_MESSAGE,"%s: %s\r\n",psStream->szName, pszString));
1083 if (psStream->ui32OutMode & DEBUG_OUTMODE_MONO)
1085 MonoOut(psStream->szName,IMG_FALSE);
1086 MonoOut(": ",IMG_FALSE);
1087 MonoOut(pszString,IMG_TRUE);
1095 ((psStream->ui32OutMode & DEBUG_OUTMODE_STREAMENABLE) != 0) ||
1096 ((psStream->ui32OutMode & DEBUG_OUTMODE_ASYNC) != 0)
1100 return(0xFFFFFFFFUL);
1105 ui32Space=SpaceInStream(psStream);
1113 ui32WPtr = psStream->ui32WPtr;
1114 pui8Buffer = (IMG_UINT8 *) psStream->ui32Base;
1116 while((pszString[ui32Len] != 0) && (ui32Len < ui32Space))
1118 pui8Buffer[ui32WPtr] = (IMG_UINT8)pszString[ui32Len];
1121 if (ui32WPtr == psStream->ui32Size)
1127 if (ui32Len < ui32Space)
1130 pui8Buffer[ui32WPtr] = (IMG_UINT8)pszString[ui32Len];
1133 if (ui32WPtr == psStream->ui32Size)
1139 psStream->ui32WPtr = ui32WPtr;
1140 psStream->ui32DataWritten+= ui32Len;
1146 #if defined(SUPPORT_DBGDRV_EVENT_OBJECTS)
1149 HostSignalEvent(DBG_EVENT_STREAM_DATA);
1156 IMG_UINT32 IMG_CALLCONV DBGDrivReadString(PDBG_STREAM psStream,IMG_CHAR * pszString,IMG_UINT32 ui32Limit)
1158 IMG_UINT32 ui32OutLen;
1160 IMG_UINT32 ui32Offset;
1161 IMG_UINT8 *pui8Buff;
1165 if (!StreamValid(psStream))
1172 pui8Buff = (IMG_UINT8 *) psStream->ui32Base;
1173 ui32Offset = psStream->ui32RPtr;
1175 if (psStream->ui32RPtr == psStream->ui32WPtr)
1183 while((pui8Buff[ui32Offset] != 0) && (ui32Offset != psStream->ui32WPtr))
1190 if (ui32Offset == psStream->ui32Size)
1196 ui32OutLen = ui32Len + 1;
1200 if (ui32Len > ui32Limit)
1207 ui32Offset = psStream->ui32RPtr;
1210 while ((pui8Buff[ui32Offset] != 0) && (ui32Len < ui32Limit))
1212 pszString[ui32Len] = (IMG_CHAR)pui8Buff[ui32Offset];
1218 if (ui32Offset == psStream->ui32Size)
1224 pszString[ui32Len] = (IMG_CHAR)pui8Buff[ui32Offset];
1226 psStream->ui32RPtr = ui32Offset + 1;
1228 if (psStream->ui32RPtr == psStream->ui32Size)
1230 psStream->ui32RPtr = 0;
1236 IMG_UINT32 IMG_CALLCONV DBGDrivWrite(PDBG_STREAM psMainStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level)
1238 IMG_UINT32 ui32Space;
1239 DBG_STREAM *psStream;
1243 if (!StreamValid(psMainStream))
1245 return(0xFFFFFFFFUL);
1250 if ((psMainStream->ui32DebugLevel & ui32Level) == 0)
1252 return(0xFFFFFFFFUL);
1257 if (psMainStream->ui32CapMode & DEBUG_CAPMODE_FRAMED)
1259 if ((psMainStream->ui32Flags & DEBUG_FLAGS_ENABLESAMPLE) == 0)
1261 return(0xFFFFFFFFUL);
1264 else if (psMainStream->ui32CapMode == DEBUG_CAPMODE_HOTKEY)
1266 if ((psMainStream->ui32Current != g_ui32HotKeyFrame) || (g_bHotKeyPressed == IMG_FALSE))
1267 return(0xFFFFFFFFUL);
1270 if(psMainStream->bInitPhaseComplete)
1272 psStream = psMainStream;
1276 psStream = psMainStream->psInitStream;
1281 ui32Space=SpaceInStream(psStream);
1285 if ((psStream->ui32OutMode & DEBUG_OUTMODE_STREAMENABLE) == 0)
1297 if (ui32Space <= (ui32InBuffSize + 4))
1299 ui32InBuffSize = ui32Space - 8;
1304 Write(psStream,(IMG_UINT8 *) &ui32InBuffSize,4);
1305 Write(psStream,pui8InBuf,ui32InBuffSize);
1307 #if defined(SUPPORT_DBGDRV_EVENT_OBJECTS)
1310 HostSignalEvent(DBG_EVENT_STREAM_DATA);
1313 return(ui32InBuffSize);
1316 IMG_UINT32 IMG_CALLCONV DBGDrivWriteCM(PDBG_STREAM psStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level)
1320 if (!StreamValid(psStream))
1322 return(0xFFFFFFFFUL);
1327 if (psStream->ui32CapMode & DEBUG_CAPMODE_FRAMED)
1329 if ((psStream->ui32Flags & DEBUG_FLAGS_ENABLESAMPLE) == 0)
1331 return(0xFFFFFFFFUL);
1336 if (psStream->ui32CapMode == DEBUG_CAPMODE_HOTKEY)
1338 if ((psStream->ui32Current != g_ui32HotKeyFrame) || (g_bHotKeyPressed == IMG_FALSE))
1340 return(0xFFFFFFFFUL);
1345 return(DBGDrivWrite2(psStream,pui8InBuf,ui32InBuffSize,ui32Level));
1348 IMG_UINT32 IMG_CALLCONV DBGDrivWrite2(PDBG_STREAM psMainStream,IMG_UINT8 * pui8InBuf,IMG_UINT32 ui32InBuffSize,IMG_UINT32 ui32Level)
1350 IMG_UINT32 ui32Space;
1351 DBG_STREAM *psStream;
1355 if (!StreamValid(psMainStream))
1357 return(0xFFFFFFFFUL);
1362 if ((psMainStream->ui32DebugLevel & ui32Level) == 0)
1364 return(0xFFFFFFFFUL);
1367 if(psMainStream->bInitPhaseComplete)
1369 psStream = psMainStream;
1373 psStream = psMainStream->psInitStream;
1378 ui32Space=SpaceInStream(psStream);
1382 if ((psStream->ui32OutMode & DEBUG_OUTMODE_STREAMENABLE) == 0)
1389 if (psStream->ui32Flags & DEBUG_FLAGS_NO_BUF_EXPANDSION)
1401 if ((ui32Space < 32) || (ui32Space <= (ui32InBuffSize + 4)))
1403 IMG_UINT32 ui32NewBufSize;
1407 ui32NewBufSize = 2 * psStream->ui32Size;
1409 if (ui32InBuffSize > psStream->ui32Size)
1411 ui32NewBufSize += ui32InBuffSize;
1416 if (!ExpandStreamBuffer(psStream,ui32NewBufSize))
1426 ui32Space = SpaceInStream(psStream);
1432 if (ui32Space <= (ui32InBuffSize + 4))
1434 ui32InBuffSize = ui32Space - 4;
1439 Write(psStream,pui8InBuf,ui32InBuffSize);
1441 #if defined(SUPPORT_DBGDRV_EVENT_OBJECTS)
1444 HostSignalEvent(DBG_EVENT_STREAM_DATA);
1447 return(ui32InBuffSize);
1450 IMG_UINT32 IMG_CALLCONV DBGDrivRead(PDBG_STREAM psMainStream, IMG_BOOL bReadInitBuffer, IMG_UINT32 ui32OutBuffSize,IMG_UINT8 * pui8OutBuf)
1452 IMG_UINT32 ui32Data;
1453 DBG_STREAM *psStream;
1457 if (!StreamValid(psMainStream))
1464 psStream = psMainStream->psInitStream;
1468 psStream = psMainStream;
1471 if (psStream->ui32RPtr == psStream->ui32WPtr)
1478 if (psStream->ui32RPtr <= psStream->ui32WPtr)
1480 ui32Data = psStream->ui32WPtr - psStream->ui32RPtr;
1484 ui32Data = psStream->ui32WPtr + (psStream->ui32Size - psStream->ui32RPtr);
1489 if (ui32Data > ui32OutBuffSize)
1491 ui32Data = ui32OutBuffSize;
1496 if ((psStream->ui32RPtr + ui32Data) > psStream->ui32Size)
1498 IMG_UINT32 ui32B1 = psStream->ui32Size - psStream->ui32RPtr;
1499 IMG_UINT32 ui32B2 = ui32Data - ui32B1;
1502 HostMemCopy((IMG_VOID *) pui8OutBuf,
1503 (IMG_VOID *)(psStream->ui32Base + psStream->ui32RPtr),
1507 HostMemCopy((IMG_VOID *)((IMG_UINT32) pui8OutBuf + ui32B1),
1508 (IMG_VOID *)psStream->ui32Base,
1512 psStream->ui32RPtr = ui32B2;
1516 HostMemCopy((IMG_VOID *) pui8OutBuf,
1517 (IMG_VOID *)(psStream->ui32Base + psStream->ui32RPtr),
1521 psStream->ui32RPtr += ui32Data;
1524 if (psStream->ui32RPtr == psStream->ui32Size)
1526 psStream->ui32RPtr = 0;
1533 void IMG_CALLCONV DBGDrivSetCaptureMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode,IMG_UINT32 ui32Start,IMG_UINT32 ui32End,IMG_UINT32 ui32SampleRate)
1537 if (!StreamValid(psStream))
1542 psStream->ui32CapMode = ui32Mode;
1543 psStream->ui32DefaultMode = ui32Mode;
1544 psStream->ui32Start = ui32Start;
1545 psStream->ui32End = ui32End;
1546 psStream->ui32SampleRate = ui32SampleRate;
1550 if (psStream->ui32CapMode & DEBUG_CAPMODE_HOTKEY)
1552 ActivateHotKeys(psStream);
1556 void IMG_CALLCONV DBGDrivSetOutputMode(PDBG_STREAM psStream,IMG_UINT32 ui32OutMode)
1560 if (!StreamValid(psStream))
1565 psStream->ui32OutMode = ui32OutMode;
1568 void IMG_CALLCONV DBGDrivSetDebugLevel(PDBG_STREAM psStream,IMG_UINT32 ui32DebugLevel)
1572 if (!StreamValid(psStream))
1577 psStream->ui32DebugLevel = ui32DebugLevel;
1580 void IMG_CALLCONV DBGDrivSetFrame(PDBG_STREAM psStream,IMG_UINT32 ui32Frame)
1584 if (!StreamValid(psStream))
1589 psStream->ui32Current = ui32Frame;
1591 if ((ui32Frame >= psStream->ui32Start) &&
1592 (ui32Frame <= psStream->ui32End) &&
1593 (((ui32Frame - psStream->ui32Start) % psStream->ui32SampleRate) == 0))
1595 psStream->ui32Flags |= DEBUG_FLAGS_ENABLESAMPLE;
1599 psStream->ui32Flags &= ~DEBUG_FLAGS_ENABLESAMPLE;
1602 if (g_bHotkeyMiddump)
1604 if ((ui32Frame >= g_ui32HotkeyMiddumpStart) &&
1605 (ui32Frame <= g_ui32HotkeyMiddumpEnd) &&
1606 (((ui32Frame - g_ui32HotkeyMiddumpStart) % psStream->ui32SampleRate) == 0))
1608 psStream->ui32Flags |= DEBUG_FLAGS_ENABLESAMPLE;
1612 psStream->ui32Flags &= ~DEBUG_FLAGS_ENABLESAMPLE;
1613 if (psStream->ui32Current > g_ui32HotkeyMiddumpEnd)
1615 g_bHotkeyMiddump = IMG_FALSE;
1621 if (g_bHotKeyRegistered)
1623 g_bHotKeyRegistered = IMG_FALSE;
1625 PVR_DPF((PVR_DBG_MESSAGE,"Hotkey pressed (%08x)!\n",psStream));
1627 if (!g_bHotKeyPressed)
1631 g_ui32HotKeyFrame = psStream->ui32Current + 2;
1635 g_bHotKeyPressed = IMG_TRUE;
1640 if (((psStream->ui32CapMode & DEBUG_CAPMODE_FRAMED) != 0) &&
1641 ((psStream->ui32CapMode & DEBUG_CAPMODE_HOTKEY) != 0))
1643 if (!g_bHotkeyMiddump)
1646 g_ui32HotkeyMiddumpStart = g_ui32HotKeyFrame + 1;
1647 g_ui32HotkeyMiddumpEnd = 0xffffffff;
1648 g_bHotkeyMiddump = IMG_TRUE;
1649 PVR_DPF((PVR_DBG_MESSAGE,"Sampling every %d frame(s)\n", psStream->ui32SampleRate));
1654 g_ui32HotkeyMiddumpEnd = g_ui32HotKeyFrame;
1655 PVR_DPF((PVR_DBG_MESSAGE,"Turning off sampling\n"));
1663 if (psStream->ui32Current > g_ui32HotKeyFrame)
1665 g_bHotKeyPressed = IMG_FALSE;
1669 IMG_UINT32 IMG_CALLCONV DBGDrivGetFrame(PDBG_STREAM psStream)
1673 if (!StreamValid(psStream))
1678 return(psStream->ui32Current);
1681 IMG_BOOL IMG_CALLCONV DBGDrivIsLastCaptureFrame(PDBG_STREAM psStream)
1683 IMG_UINT32 ui32NextFrame;
1687 if (!StreamValid(psStream))
1692 if (psStream->ui32CapMode & DEBUG_CAPMODE_FRAMED)
1694 ui32NextFrame = psStream->ui32Current + psStream->ui32SampleRate;
1695 if (ui32NextFrame > psStream->ui32End)
1703 IMG_BOOL IMG_CALLCONV DBGDrivIsCaptureFrame(PDBG_STREAM psStream, IMG_BOOL bCheckPreviousFrame)
1705 IMG_UINT32 ui32FrameShift = bCheckPreviousFrame ? 1UL : 0UL;
1709 if (!StreamValid(psStream))
1714 if (psStream->ui32CapMode & DEBUG_CAPMODE_FRAMED)
1717 if (g_bHotkeyMiddump)
1719 if ((psStream->ui32Current >= (g_ui32HotkeyMiddumpStart - ui32FrameShift)) &&
1720 (psStream->ui32Current <= (g_ui32HotkeyMiddumpEnd - ui32FrameShift)) &&
1721 ((((psStream->ui32Current + ui32FrameShift) - g_ui32HotkeyMiddumpStart) % psStream->ui32SampleRate) == 0))
1728 if ((psStream->ui32Current >= (psStream->ui32Start - ui32FrameShift)) &&
1729 (psStream->ui32Current <= (psStream->ui32End - ui32FrameShift)) &&
1730 ((((psStream->ui32Current + ui32FrameShift) - psStream->ui32Start) % psStream->ui32SampleRate) == 0))
1736 else if (psStream->ui32CapMode == DEBUG_CAPMODE_HOTKEY)
1738 if ((psStream->ui32Current == (g_ui32HotKeyFrame-ui32FrameShift)) && (g_bHotKeyPressed))
1746 void IMG_CALLCONV DBGDrivOverrideMode(PDBG_STREAM psStream,IMG_UINT32 ui32Mode)
1750 if (!StreamValid(psStream))
1755 psStream->ui32CapMode = ui32Mode;
1758 void IMG_CALLCONV DBGDrivDefaultMode(PDBG_STREAM psStream)
1762 if (!StreamValid(psStream))
1767 psStream->ui32CapMode = psStream->ui32DefaultMode;
1770 void IMG_CALLCONV DBGDrivSetMarker(PDBG_STREAM psStream, IMG_UINT32 ui32Marker)
1774 if (!StreamValid(psStream))
1779 psStream->ui32Marker = ui32Marker;
1782 IMG_UINT32 IMG_CALLCONV DBGDrivGetMarker(PDBG_STREAM psStream)
1786 if (!StreamValid(psStream))
1791 return psStream->ui32Marker;
1795 IMG_UINT32 IMG_CALLCONV DBGDrivGetStreamOffset(PDBG_STREAM psMainStream)
1797 PDBG_STREAM psStream;
1801 if (!StreamValid(psMainStream))
1806 if(psMainStream->bInitPhaseComplete)
1808 psStream = psMainStream;
1812 psStream = psMainStream->psInitStream;
1815 return psStream->ui32DataWritten;
1818 IMG_VOID IMG_CALLCONV DBGDrivSetStreamOffset(PDBG_STREAM psMainStream, IMG_UINT32 ui32StreamOffset)
1820 PDBG_STREAM psStream;
1824 if (!StreamValid(psMainStream))
1829 if(psMainStream->bInitPhaseComplete)
1831 psStream = psMainStream;
1835 psStream = psMainStream->psInitStream;
1838 psStream->ui32DataWritten = ui32StreamOffset;
1841 IMG_UINT32 IMG_CALLCONV DBGDrivGetServiceTable(void)
1843 return((IMG_UINT32) &g_sDBGKMServices);
1846 IMG_UINT32 IMG_CALLCONV DBGDrivWriteLF(PDBG_STREAM psStream, IMG_UINT8 * pui8InBuf, IMG_UINT32 ui32InBuffSize, IMG_UINT32 ui32Level, IMG_UINT32 ui32Flags)
1848 PDBG_LASTFRAME_BUFFER psLFBuffer;
1852 if (!StreamValid(psStream))
1854 return(0xFFFFFFFFUL);
1859 if ((psStream->ui32DebugLevel & ui32Level) == 0)
1861 return(0xFFFFFFFFUL);
1866 if ((psStream->ui32CapMode & DEBUG_CAPMODE_FRAMED) != 0)
1868 if ((psStream->ui32Flags & DEBUG_FLAGS_ENABLESAMPLE) == 0)
1870 return(0xFFFFFFFFUL);
1873 else if (psStream->ui32CapMode == DEBUG_CAPMODE_HOTKEY)
1875 if ((psStream->ui32Current != g_ui32HotKeyFrame) || (g_bHotKeyPressed == IMG_FALSE))
1876 return(0xFFFFFFFFUL);
1879 psLFBuffer = FindLFBuf(psStream);
1881 if (ui32Flags & WRITELF_FLAGS_RESETBUF)
1885 ui32InBuffSize = (ui32InBuffSize > LAST_FRAME_BUF_SIZE) ? LAST_FRAME_BUF_SIZE : ui32InBuffSize;
1886 HostMemCopy((IMG_VOID *)psLFBuffer->ui8Buffer, (IMG_VOID *)pui8InBuf, ui32InBuffSize);
1887 psLFBuffer->ui32BufLen = ui32InBuffSize;
1893 ui32InBuffSize = ((psLFBuffer->ui32BufLen + ui32InBuffSize) > LAST_FRAME_BUF_SIZE) ? (LAST_FRAME_BUF_SIZE - psLFBuffer->ui32BufLen) : ui32InBuffSize;
1894 HostMemCopy((IMG_VOID *)(&psLFBuffer->ui8Buffer[psLFBuffer->ui32BufLen]), (IMG_VOID *)pui8InBuf, ui32InBuffSize);
1895 psLFBuffer->ui32BufLen += ui32InBuffSize;
1898 return(ui32InBuffSize);
1901 IMG_UINT32 IMG_CALLCONV DBGDrivReadLF(PDBG_STREAM psStream, IMG_UINT32 ui32OutBuffSize, IMG_UINT8 * pui8OutBuf)
1903 PDBG_LASTFRAME_BUFFER psLFBuffer;
1904 IMG_UINT32 ui32Data;
1908 if (!StreamValid(psStream))
1913 psLFBuffer = FindLFBuf(psStream);
1917 ui32Data = (ui32OutBuffSize < psLFBuffer->ui32BufLen) ? ui32OutBuffSize : psLFBuffer->ui32BufLen;
1921 HostMemCopy((IMG_VOID *)pui8OutBuf, (IMG_VOID *)psLFBuffer->ui8Buffer, ui32Data);
1926 IMG_VOID IMG_CALLCONV DBGDrivStartInitPhase(PDBG_STREAM psStream)
1928 psStream->bInitPhaseComplete = IMG_FALSE;
1931 IMG_VOID IMG_CALLCONV DBGDrivStopInitPhase(PDBG_STREAM psStream)
1933 psStream->bInitPhaseComplete = IMG_TRUE;
1936 #if defined(SUPPORT_DBGDRV_EVENT_OBJECTS)
1937 IMG_VOID IMG_CALLCONV DBGDrivWaitForEvent(DBG_EVENT eEvent)
1939 HostWaitForEvent(eEvent);
1943 IMG_BOOL ExpandStreamBuffer(PDBG_STREAM psStream, IMG_UINT32 ui32NewSize)
1945 IMG_VOID * pvNewBuf;
1946 IMG_UINT32 ui32NewSizeInPages;
1947 IMG_UINT32 ui32NewWOffset;
1948 IMG_UINT32 ui32SpaceInOldBuf;
1952 if (psStream->ui32Size >= ui32NewSize)
1959 ui32SpaceInOldBuf = SpaceInStream(psStream);
1963 ui32NewSizeInPages = ((ui32NewSize + 0xfffUL) & ~0xfffUL) / 4096UL;
1965 if ((psStream->ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0)
1967 pvNewBuf = HostNonPageablePageAlloc(ui32NewSizeInPages);
1971 pvNewBuf = HostPageablePageAlloc(ui32NewSizeInPages);
1974 if (pvNewBuf == IMG_NULL)
1982 if (psStream->ui32RPtr <= psStream->ui32WPtr)
1986 HostMemCopy((IMG_VOID *)pvNewBuf, (IMG_VOID *)(psStream->ui32Base + psStream->ui32RPtr), psStream->ui32WPtr - psStream->ui32RPtr);
1990 IMG_UINT32 ui32FirstCopySize;
1994 ui32FirstCopySize = psStream->ui32Size - psStream->ui32RPtr;
1996 HostMemCopy((IMG_VOID *)pvNewBuf, (IMG_VOID *)(psStream->ui32Base + psStream->ui32RPtr), ui32FirstCopySize);
2000 HostMemCopy((IMG_VOID *)((IMG_UINT32)pvNewBuf + ui32FirstCopySize), (IMG_VOID *)psStream->ui32Base, psStream->ui32WPtr);
2005 ui32NewWOffset = psStream->ui32Size - ui32SpaceInOldBuf;
2009 if ((psStream->ui32Flags & DEBUG_FLAGS_USE_NONPAGED_MEM) != 0)
2011 HostNonPageablePageFree((IMG_VOID *)psStream->ui32Base);
2015 HostPageablePageFree((IMG_VOID *)psStream->ui32Base);
2020 psStream->ui32Base = (IMG_UINT32)pvNewBuf;
2021 psStream->ui32RPtr = 0;
2022 psStream->ui32WPtr = ui32NewWOffset;
2023 psStream->ui32Size = ui32NewSizeInPages * 4096;
2028 IMG_UINT32 SpaceInStream(PDBG_STREAM psStream)
2030 IMG_UINT32 ui32Space;
2032 if (psStream->ui32RPtr > psStream->ui32WPtr)
2034 ui32Space = psStream->ui32RPtr - psStream->ui32WPtr;
2038 ui32Space = psStream->ui32RPtr + (psStream->ui32Size - psStream->ui32WPtr);
2045 void DestroyAllStreams(void)
2047 while (g_psStreamList != IMG_NULL)
2049 DBGDrivDestroyStream(g_psStreamList);
2054 PDBG_LASTFRAME_BUFFER FindLFBuf(PDBG_STREAM psStream)
2056 PDBG_LASTFRAME_BUFFER psLFBuffer;
2058 psLFBuffer = g_psLFBufferList;
2062 if (psLFBuffer->psStream == psStream)
2067 psLFBuffer = psLFBuffer->psNext;