/*! ****************************************************************************** @Function PVRSRVDebugPrintf @Description To output a debug message to the user @Input uDebugLevel - The current debug level @Input pszFile - The source file generating the message @Input uLine - The line of the source file @Input pszFormat - The message format string @Input ... - Zero or more arguments for use by the format string @Return None ******************************************************************************/ IMG_VOID PVRSRVDebugPrintf ( IMG_UINT32 ui32DebugLevel, const IMG_CHAR* pszFullFileName, IMG_UINT32 ui32Line, const IMG_CHAR* pszFormat, ... ) { IMG_BOOL bTrace; const IMG_CHAR *pszFileName = pszFullFileName; IMG_CHAR *pszLeafName; bTrace = (IMG_BOOL)(ui32DebugLevel & DBGPRIV_CALLTRACE) ? IMG_TRUE : IMG_FALSE; if (gPVRDebugLevel & ui32DebugLevel) { va_list vaArgs; unsigned long ulLockFlags = 0; IMG_CHAR *pszBuf; IMG_UINT32 ui32BufSiz; SelectBuffer(&pszBuf, &ui32BufSiz); va_start(vaArgs, pszFormat); GetBufferLock(&ulLockFlags); /* Add in the level of warning */ if (bTrace == IMG_FALSE) { switch(ui32DebugLevel) { case DBGPRIV_FATAL: { strncpy (pszBuf, "PVR_K:(Fatal): ", (ui32BufSiz -1)); break; } case DBGPRIV_ERROR: { strncpy (pszBuf, "PVR_K:(Error): ", (ui32BufSiz -1)); break; } case DBGPRIV_WARNING: { strncpy (pszBuf, "PVR_K:(Warning): ", (ui32BufSiz -1)); break; } case DBGPRIV_MESSAGE: { strncpy (pszBuf, "PVR_K:(Message): ", (ui32BufSiz -1)); break; } case DBGPRIV_VERBOSE: { strncpy (pszBuf, "PVR_K:(Verbose): ", (ui32BufSiz -1)); break; } default: { strncpy (pszBuf, "PVR_K:(Unknown message level)", (ui32BufSiz -1)); break; } } } else { strncpy (pszBuf, "PVR_K: ", (ui32BufSiz -1)); } pszBuf[ui32BufSiz - 1] = 0; if (VBAppend(pszBuf, ui32BufSiz, pszFormat, vaArgs)) { printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); } else { /* Traces don't need a location */ if (bTrace == IMG_FALSE) { #ifdef DEBUG_LOG_PATH_TRUNCATE /* Buffer for rewriting filepath in log messages */ static IMG_CHAR szFileNameRewrite[PVR_MAX_FILEPATH_LEN]; IMG_CHAR* pszTruncIter; IMG_CHAR* pszTruncBackInter; /* Truncate path (DEBUG_LOG_PATH_TRUNCATE shoud be set to EURASIA env var)*/ if (strlen(pszFullFileName) > strlen(DEBUG_LOG_PATH_TRUNCATE)+1) pszFileName = pszFullFileName + strlen(DEBUG_LOG_PATH_TRUNCATE)+1; /* Try to find '/../' entries and remove it together with previous entry. Repeat unit all removed */ strncpy(szFileNameRewrite, pszFileName,PVR_MAX_FILEPATH_LEN); if(strlen(szFileNameRewrite) == PVR_MAX_FILEPATH_LEN-1) { IMG_CHAR szTruncateMassage[] = "FILENAME TRUNCATED"; strcpy(szFileNameRewrite + (PVR_MAX_FILEPATH_LEN - 1 - strlen(szTruncateMassage)), szTruncateMassage); } pszTruncIter = szFileNameRewrite; while(*pszTruncIter++ != 0) { IMG_CHAR* pszNextStartPoint; /* Find '/../' pattern */ if( !( ( *pszTruncIter == '/' && (pszTruncIter-4 >= szFileNameRewrite) ) && ( *(pszTruncIter-1) == '.') && ( *(pszTruncIter-2) == '.') && ( *(pszTruncIter-3) == '/') ) ) continue; /* Find previous '/' */ pszTruncBackInter = pszTruncIter - 3; while(*(--pszTruncBackInter) != '/') { if(pszTruncBackInter <= szFileNameRewrite) break; } pszNextStartPoint = pszTruncBackInter; /* Remove found region */ while(*pszTruncIter != 0) { *pszTruncBackInter++ = *pszTruncIter++; } *pszTruncBackInter = 0; /* Start again */ pszTruncIter = pszNextStartPoint; } pszFileName = szFileNameRewrite; /* Remove first '/' if exist (it's always relative path */ if(*pszFileName == '/') pszFileName++; #endif #if !defined(__sh__) pszLeafName = (IMG_CHAR *)strrchr (pszFileName, '\\'); if (pszLeafName) { pszFileName = pszLeafName; } #endif /* __sh__ */ if (BAppend(pszBuf, ui32BufSiz, " [%u, %s]", ui32Line, pszFileName)) { printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); } else { printk(KERN_INFO "%s\n", pszBuf); } } else { printk(KERN_INFO "%s\n", pszBuf); } } ReleaseBufferLock(ulLockFlags); va_end (vaArgs); } }
/*************************************************************************/ /*! @Function PVRSRVDebugPrintf @Description To output a debug message to the user @Input uDebugLevel The current debug level @Input pszFile The source file generating the message @Input uLine The line of the source file @Input pszFormat The message format string @Input ... Zero or more arguments for use by the format string */ /**************************************************************************/ void PVRSRVDebugPrintf(IMG_UINT32 ui32DebugLevel, const IMG_CHAR *pszFullFileName, IMG_UINT32 ui32Line, const IMG_CHAR *pszFormat, ...) { IMG_BOOL bNoLoc; const IMG_CHAR *pszFileName = pszFullFileName; IMG_CHAR *pszLeafName; bNoLoc = (IMG_BOOL)((ui32DebugLevel & DBGPRIV_CALLTRACE) | (ui32DebugLevel & DBGPRIV_BUFFERED)) ? IMG_TRUE : IMG_FALSE; if (gPVRDebugLevel & ui32DebugLevel) { va_list vaArgs; unsigned long ulLockFlags = 0; IMG_CHAR *pszBuf; IMG_UINT32 ui32BufSiz; SelectBuffer(&pszBuf, &ui32BufSiz); va_start(vaArgs, pszFormat); GetBufferLock(&ulLockFlags); switch (ui32DebugLevel) { case DBGPRIV_FATAL: { strncpy(pszBuf, "PVR_K:(Fatal): ", (ui32BufSiz - 2)); break; } case DBGPRIV_ERROR: { strncpy(pszBuf, "PVR_K:(Error): ", (ui32BufSiz - 2)); break; } case DBGPRIV_WARNING: { strncpy(pszBuf, "PVR_K:(Warn): ", (ui32BufSiz - 2)); break; } case DBGPRIV_MESSAGE: { strncpy(pszBuf, "PVR_K:(Mesg): ", (ui32BufSiz - 2)); break; } case DBGPRIV_VERBOSE: { strncpy(pszBuf, "PVR_K:(Verb): ", (ui32BufSiz - 2)); break; } case DBGPRIV_DEBUG: { strncpy(pszBuf, "PVR_K:(Debug): ", (ui32BufSiz - 2)); break; } case DBGPRIV_CALLTRACE: case DBGPRIV_ALLOC: case DBGPRIV_BUFFERED: default: { strncpy(pszBuf, "PVR_K: ", (ui32BufSiz - 2)); break; } } pszBuf[ui32BufSiz - 1] = '\0'; (void) BAppend(pszBuf, ui32BufSiz, "%u: ", current->pid); if (VBAppend(pszBuf, ui32BufSiz, pszFormat, vaArgs)) { printk(KERN_ERR "PVR_K:(Message Truncated): %s\n", pszBuf); } else { #if !defined(__sh__) pszLeafName = (IMG_CHAR *)strrchr (pszFileName, '/'); if (pszLeafName) { pszFileName = pszLeafName+1; } #endif /* __sh__ */ if (BAppend(pszBuf, ui32BufSiz, " [%u, %s]", ui32Line, pszFileName)) { printk(KERN_ERR "PVR_K:(Message Truncated): %s\n", pszBuf); } else { if (ui32DebugLevel & DBGPRIV_BUFFERED) { AddToBufferCCB(pszFileName, ui32Line, pszBuf); } else { printk(KERN_ERR "%s\n", pszBuf); } } } ReleaseBufferLock(ulLockFlags); va_end (vaArgs); } }
IMG_VOID PVRSRVDebugPrintf ( IMG_UINT32 ui32DebugLevel, const IMG_CHAR* pszFullFileName, IMG_UINT32 ui32Line, const IMG_CHAR* pszFormat, ... ) { IMG_BOOL bTrace; const IMG_CHAR *pszFileName = pszFullFileName; IMG_CHAR *pszLeafName; bTrace = (IMG_BOOL)(ui32DebugLevel & DBGPRIV_CALLTRACE) ? IMG_TRUE : IMG_FALSE; if (gPVRDebugLevel & ui32DebugLevel) { va_list vaArgs; unsigned long ulLockFlags = 0; IMG_CHAR *pszBuf; IMG_UINT32 ui32BufSiz; SelectBuffer(&pszBuf, &ui32BufSiz); va_start(vaArgs, pszFormat); GetBufferLock(&ulLockFlags); if (bTrace == IMG_FALSE) { switch(ui32DebugLevel) { case DBGPRIV_FATAL: { strncpy (pszBuf, "PVR_K:(Fatal): ", (ui32BufSiz -1)); break; } case DBGPRIV_ERROR: { strncpy (pszBuf, "PVR_K:(Error): ", (ui32BufSiz -1)); break; } case DBGPRIV_WARNING: { strncpy (pszBuf, "PVR_K:(Warning): ", (ui32BufSiz -1)); break; } case DBGPRIV_MESSAGE: { strncpy (pszBuf, "PVR_K:(Message): ", (ui32BufSiz -1)); break; } case DBGPRIV_VERBOSE: { strncpy (pszBuf, "PVR_K:(Verbose): ", (ui32BufSiz -1)); break; } default: { strncpy (pszBuf, "PVR_K:(Unknown message level)", (ui32BufSiz -1)); break; } } } else { strncpy (pszBuf, "PVR_K: ", (ui32BufSiz -1)); } if (VBAppend(pszBuf, ui32BufSiz, pszFormat, vaArgs)) { printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); } else { if (bTrace == IMG_FALSE) { #ifdef DEBUG_LOG_PATH_TRUNCATE static IMG_CHAR szFileNameRewrite[PVR_MAX_FILEPATH_LEN]; IMG_CHAR* pszTruncIter; IMG_CHAR* pszTruncBackInter; if (strlen(pszFullFileName) > strlen(DEBUG_LOG_PATH_TRUNCATE)+1) pszFileName = pszFullFileName + strlen(DEBUG_LOG_PATH_TRUNCATE)+1; strncpy(szFileNameRewrite, pszFileName,PVR_MAX_FILEPATH_LEN); if(strlen(szFileNameRewrite) == PVR_MAX_FILEPATH_LEN-1) { IMG_CHAR szTruncateMassage[] = "FILENAME TRUNCATED"; strcpy(szFileNameRewrite + (PVR_MAX_FILEPATH_LEN - 1 - strlen(szTruncateMassage)), szTruncateMassage); } pszTruncIter = szFileNameRewrite; while(*pszTruncIter++ != 0) { IMG_CHAR* pszNextStartPoint; if( !( ( *pszTruncIter == '/' && (pszTruncIter-4 >= szFileNameRewrite) ) && ( *(pszTruncIter-1) == '.') && ( *(pszTruncIter-2) == '.') && ( *(pszTruncIter-3) == '/') ) ) continue; pszTruncBackInter = pszTruncIter - 3; while(*(--pszTruncBackInter) != '/') { if(pszTruncBackInter <= szFileNameRewrite) break; } pszNextStartPoint = pszTruncBackInter; while(*pszTruncIter != 0) { *pszTruncBackInter++ = *pszTruncIter++; } *pszTruncBackInter = 0; pszTruncIter = pszNextStartPoint; } pszFileName = szFileNameRewrite; if(*pszFileName == '/') pszFileName++; #endif #if !defined(__sh__) pszLeafName = (IMG_CHAR *)strrchr (pszFileName, '\\'); if (pszLeafName) { pszFileName = pszLeafName; } #endif if (BAppend(pszBuf, ui32BufSiz, " [%u, %s]", ui32Line, pszFileName)) { printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); } else { printk(KERN_INFO "%s\n", pszBuf); } } else { printk(KERN_INFO "%s\n", pszBuf); } } ReleaseBufferLock(ulLockFlags); va_end (vaArgs); } }
void PVRSRVDebugPrintf(u32 ui32DebugLevel, const char *pszFileName, u32 ui32Line, const char *pszFormat, ...) { IMG_BOOL bTrace, bDebug; char *pszLeafName; pszLeafName = (char *)strrchr(pszFileName, '\\'); if (pszLeafName) pszFileName = pszLeafName; bTrace = gPVRDebugLevel & ui32DebugLevel & DBGPRIV_CALLTRACE; bDebug = ((gPVRDebugLevel & DBGPRIV_ALLLEVELS) >= ui32DebugLevel); if (bTrace || bDebug) { va_list vaArgs; unsigned long ulLockFlags = 0; /* suppress gc warning */ char *pszBuf; u32 ui32BufSiz; SelectBuffer(&pszBuf, &ui32BufSiz); va_start(vaArgs, pszFormat); GetBufferLock(&ulLockFlags); if (bDebug) { switch (ui32DebugLevel) { case DBGPRIV_FATAL: strncpy(pszBuf, "PVR_K:(Fatal): ", (ui32BufSiz - 1)); break; case DBGPRIV_ERROR: strncpy(pszBuf, "PVR_K:(Error): ", (ui32BufSiz - 1)); break; case DBGPRIV_WARNING: strncpy(pszBuf, "PVR_K:(Warning): ", (ui32BufSiz - 1)); break; case DBGPRIV_MESSAGE: strncpy(pszBuf, "PVR_K:(Message): ", (ui32BufSiz - 1)); break; case DBGPRIV_VERBOSE: strncpy(pszBuf, "PVR_K:(Verbose): ", (ui32BufSiz - 1)); break; default: strncpy(pszBuf, "PVR_K:(Unknown message level)", (ui32BufSiz - 1)); break; } } else { strncpy(pszBuf, "PVR_K: ", (ui32BufSiz - 1)); } if (VBAppend(pszBuf, ui32BufSiz, pszFormat, vaArgs)) { printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); } else { if (!bTrace) { if (BAppend (pszBuf, ui32BufSiz, " [%lu, %s]", ui32Line, pszFileName)) printk(KERN_INFO "PVR_K:(Message Truncated): %s\n", pszBuf); else printk(KERN_INFO "%s\n", pszBuf); } } ReleaseBufferLock(ulLockFlags); va_end(vaArgs); } }