blob: e66fdabd7c7ef672bb1c729f094695689ac2fc2e [file] [log] [blame]
/**********************************************************************
*
* 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. <gpl-support@imgtec.com>
* 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)
******************************************************************************/