/********************************************************************** * * Copyright (C) Imagination Technologies Ltd. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful but, except * as otherwise stated in writing, without any warranty; without even the * implied warranty of merchantability or fitness for a particular purpose. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA. * * The full GNU General Public License is included in this distribution in * the file called "COPYING". * * Contact Information: * Imagination Technologies Ltd. * Home Park Estate, Kings Langley, Herts, WD4 8LZ, UK * ******************************************************************************/ #ifndef __PVR_DEBUG_H__ #define __PVR_DEBUG_H__ #include "img_types.h" #if defined (__cplusplus) extern "C" { #endif #define PVR_MAX_DEBUG_MESSAGE_LEN (512) /* These are privately used by pvr_debug, use the PVR_DBG_ defines instead */ #define DBGPRIV_FATAL 0x01UL #define DBGPRIV_ERROR 0x02UL #define DBGPRIV_WARNING 0x04UL #define DBGPRIV_MESSAGE 0x08UL #define DBGPRIV_VERBOSE 0x10UL #define DBGPRIV_CALLTRACE 0x20UL #define DBGPRIV_ALLOC 0x40UL #define DBGPRIV_DBGDRV_MESSAGE 0x80UL #if !defined(PVRSRV_NEED_PVR_ASSERT) && defined(DEBUG) #define PVRSRV_NEED_PVR_ASSERT #endif #if defined(PVRSRV_NEED_PVR_ASSERT) && !defined(PVRSRV_NEED_PVR_DPF) #define PVRSRV_NEED_PVR_DPF #endif #if !defined(PVRSRV_NEED_PVR_TRACE) && (defined(DEBUG) || defined(TIMING)) #define PVRSRV_NEED_PVR_TRACE #endif /* PVR_ASSERT() and PVR_DBG_BREAK handling */ #if defined(PVRSRV_NEED_PVR_ASSERT) #define PVR_ASSERT(EXPR) if (!(EXPR)) PVRSRVDebugAssertFail(__FILE__, __LINE__); IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugAssertFail(const IMG_CHAR *pszFile, IMG_UINT32 ui32Line); #define PVR_DBG_BREAK PVRSRVDebugAssertFail(__FILE__, __LINE__) #else /* defined(PVRSRV_NEED_PVR_ASSERT) */ #define PVR_ASSERT(EXPR) #define PVR_DBG_BREAK #endif /* defined(PVRSRV_NEED_PVR_ASSERT) */ /* PVR_DPF() handling */ #if defined(PVRSRV_NEED_PVR_DPF) #if defined(PVRSRV_NEW_PVR_DPF) /* New logging mechanism */ #define PVR_DBG_FATAL DBGPRIV_FATAL #define PVR_DBG_ERROR DBGPRIV_ERROR #define PVR_DBG_WARNING DBGPRIV_WARNING #define PVR_DBG_MESSAGE DBGPRIV_MESSAGE #define PVR_DBG_VERBOSE DBGPRIV_VERBOSE #define PVR_DBG_CALLTRACE DBGPRIV_CALLTRACE #define PVR_DBG_ALLOC DBGPRIV_ALLOC #define PVR_DBGDRIV_MESSAGE DBGPRIV_DBGDRV_MESSAGE /* These levels are always on with PVRSRV_NEED_PVR_DPF */ #define __PVR_DPF_0x01UL(x...) PVRSRVDebugPrintf(DBGPRIV_FATAL, x) #define __PVR_DPF_0x02UL(x...) PVRSRVDebugPrintf(DBGPRIV_ERROR, x) /* Some are compiled out completely in release builds */ #if defined(DEBUG) #define __PVR_DPF_0x04UL(x...) PVRSRVDebugPrintf(DBGPRIV_WARNING, x) #define __PVR_DPF_0x08UL(x...) PVRSRVDebugPrintf(DBGPRIV_MESSAGE, x) #define __PVR_DPF_0x10UL(x...) PVRSRVDebugPrintf(DBGPRIV_VERBOSE, x) #define __PVR_DPF_0x20UL(x...) PVRSRVDebugPrintf(DBGPRIV_CALLTRACE, x) #define __PVR_DPF_0x40UL(x...) PVRSRVDebugPrintf(DBGPRIV_ALLOC, x) #define __PVR_DPF_0x80UL(x...) PVRSRVDebugPrintf(DBGPRIV_DBGDRV_MESSAGE, x) #else #define __PVR_DPF_0x04UL(x...) #define __PVR_DPF_0x08UL(x...) #define __PVR_DPF_0x10UL(x...) #define __PVR_DPF_0x20UL(x...) #define __PVR_DPF_0x40UL(x...) #define __PVR_DPF_0x80UL(x...) #endif /* Translate the different log levels to separate macros * so they can each be compiled out. */ #if defined(DEBUG) #define __PVR_DPF(lvl, x...) __PVR_DPF_ ## lvl (__FILE__, __LINE__, x) #else #define __PVR_DPF(lvl, x...) __PVR_DPF_ ## lvl ("", 0, x) #endif /* Get rid of the double bracketing */ #define PVR_DPF(x) __PVR_DPF x #else /* defined(PVRSRV_NEW_PVR_DPF) */ /* Old logging mechanism */ #define PVR_DBG_FATAL DBGPRIV_FATAL,__FILE__, __LINE__ #define PVR_DBG_ERROR DBGPRIV_ERROR,__FILE__, __LINE__ #define PVR_DBG_WARNING DBGPRIV_WARNING,__FILE__, __LINE__ #define PVR_DBG_MESSAGE DBGPRIV_MESSAGE,__FILE__, __LINE__ #define PVR_DBG_VERBOSE DBGPRIV_VERBOSE,__FILE__, __LINE__ #define PVR_DBG_CALLTRACE DBGPRIV_CALLTRACE,__FILE__, __LINE__ #define PVR_DBG_ALLOC DBGPRIV_ALLOC,__FILE__, __LINE__ #define PVR_DBGDRIV_MESSAGE DBGPRIV_DBGDRV_MESSAGE, "", 0 #define PVR_DPF(X) PVRSRVDebugPrintf X #endif /* defined(PVRSRV_NEW_PVR_DPF) */ IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVDebugPrintf(IMG_UINT32 ui32DebugLevel, const IMG_CHAR *pszFileName, IMG_UINT32 ui32Line, const IMG_CHAR *pszFormat, ...) IMG_FORMAT_PRINTF(4, 5); #else /* defined(PVRSRV_NEED_PVR_DPF) */ #define PVR_DPF(X) #endif /* defined(PVRSRV_NEED_PVR_DPF) */ /* PVR_TRACE() handling */ #if defined(PVRSRV_NEED_PVR_TRACE) #define PVR_TRACE(X) PVRSRVTrace X IMG_IMPORT IMG_VOID IMG_CALLCONV PVRSRVTrace(const IMG_CHAR* pszFormat, ... ) IMG_FORMAT_PRINTF(1, 2); #else /* defined(PVRSRV_NEED_PVR_TRACE) */ #define PVR_TRACE(X) #endif /* defined(PVRSRV_NEED_PVR_TRACE) */ #if defined (__cplusplus) } #endif #endif /* __PVR_DEBUG_H__ */ /****************************************************************************** End of file (pvr_debug.h) ******************************************************************************/