blob: 47e43aeae68b6ebdd1d21916b749e7e5686c4497 [file] [log] [blame]
/*
* Copyright (c) 2013-2017, Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included
* in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
* OTHER DEALINGS IN THE SOFTWARE.
*/
//!
//! \file mos_util_debug_specific.h
//! \brief
//!
//!
#ifndef __MOS_UTIL_DEBUG_SPECIFIC_H__
#define __MOS_UTIL_DEBUG_SPECIFIC_H__
#include "mos_defs.h"
#ifdef __cplusplus
extern "C" {
#endif
#if MOS_MESSAGES_ENABLED
//!
//! \brief Define messaging levels here in the order of importance
//!
typedef enum
{
MOS_MESSAGE_LVL_DISABLED = 0,
MOS_MESSAGE_LVL_CRITICAL = 1,
MOS_MESSAGE_LVL_NORMAL = 2,
MOS_MESSAGE_LVL_VERBOSE = 3,
MOS_MESSAGE_LVL_FUNCTION_ENTRY = 4,
MOS_MESSAGE_LVL_FUNCTION_EXIT = 5,
MOS_MESSAGE_LVL_FUNCTION_ENTRY_VERBOSE = 6,
MOS_MESSAGE_LVL_MEMNINJA = 7,
MOS_MESSAGE_LVL_COUNT
} MOS_MESSAGE_LEVEL;
//!
//! \brief Define Component IDs
//! When adding a component, need to update
//! MOS_COMPONENT_ID,
//! MOS_ComponentName,
//! pcComponentUserFeatureKeys,
//! subComponentCount
//! and MOS_MESSAGE_COMPONENT_TAG.
//!
typedef enum
{
MOS_COMPONENT_OS,
MOS_COMPONENT_HW,
MOS_COMPONENT_CODEC,
MOS_COMPONENT_VP,
MOS_COMPONENT_CP,
MOS_COMPONENT_DDI,
MOS_COMPONENT_CM,
MOS_COMPONENT_CPLIB,
MOS_COMPONENT_SCALABILITY,
MOS_COMPONENT_MMC,
MOS_COMPONENT_MCPY,
MOS_COMPONENT_COUNT
} MOS_COMPONENT_ID;
//!
//! \brief Prints debug messages in debug mode when enabled
//! \details Prints debug messages if the level of the comp and sub-comp is
//! set to less than the message level. Nop in release version.
//! \param MOS_MESSAGE_LEVEL level
//! [in] Level of the message
//! \param const PCCHAR logtag
//! [in] For Linux only, used for tagging the message.
//! \param MOS_COMPONENT_ID compID
//! [in] Indicates which component
//! \param uint8_t subCompID
//! [in] Indicates which sub-component
//! \param const char *functionName
//! [in] pointer to the function name
//! \param int32_t lineNum
//! [in] Indicates which line the message locate, -1 for no line output
//! \param const char *message
//! [in] pointer to the message format string
//! \param var_args
//! [in] variable list of arguments for the message
//! \return void
//!
void MOS_Message(
MOS_MESSAGE_LEVEL level,
const PCCHAR logtag,
MOS_COMPONENT_ID compID,
uint8_t subCompID,
const PCCHAR functionName,
int32_t lineNum,
const PCCHAR message,
...);
#ifndef LOG_TAG
#define LOG_TAG "MOS"
#endif
//!
//! When printing from a C++ class, we'd like the class and function to be printed.
//! With our current Linux compiler, __FUNCTION__ does not include the class name.
//! So we use __PRETTY_FUNCTION__ and MOS_Message will remove extra data.
//! This is not needed for prints from C files so they will usually use __FUNCTION__.
//!
#if USE_PRETTY_FUNCTION
#define MOS_FUNCTION __PRETTY_FUNCTION__
#else
#define MOS_FUNCTION __FUNCTION__
#endif // USE_PRETTY_FUNCTION
//!
//! \def MOS_DEBUGMESSAGE(_compID, _subCompID, _message, ...)
//! Output DEBUG message \a _message with \_a _compID and \_a _subCompID info
//!
#define MOS_DEBUGMESSAGE(_level, _compID, _subCompID, _message, ...) \
MOS_Message(_level, LOG_TAG, _compID, _subCompID, MOS_FUNCTION, __LINE__, _message, ##__VA_ARGS__)
//!
//! \def MOS_DEBUGMESSAGE(_compID, _subCompID, _message, ...)
//! Output DEBUG message \a _message with \_a _compID and \_a _subCompID info
//!
#define MOS_DEBUGMESSAGE_NOLINE(_level, _compID, _subCompID, _message, ...) \
MOS_Message(_level, LOG_TAG, _compID, _subCompID, MOS_FUNCTION, -1, _message, ##__VA_ARGS__)
#endif //MOS_MESSAGES_ENABLED
#ifdef __cplusplus
}
#endif
//!
//! \brief HLT file name template
//!
#define MOS_LOG_PATH_TEMPLATE "%s/igd_%u.%s"
#define MOS_COMPONENT_NAME_DDI_STRING "[LIBVA]:"
//!
//! \def MOS_CHK_NULL_WITH_HR(_compID, _subCompID, _ptr)
//! Check if \a _ptr == nullptr, if so assert and return an HRESULT error
//!
#define MOS_CHK_NULL_WITH_HR(_compID, _subCompID, _ptr) \
{ \
if ((_ptr) == nullptr) \
{ \
MOS_ASSERTMESSAGE(_compID, _subCompID, "Invalid (nullptr) Pointer."); \
hr = MOS_STATUS_NULL_POINTER; \
goto finish; \
} \
}
#define MOS_DIRECTORY_DELIMITER '/'
#ifndef ANDROID
#define MOS_DEBUG_DEFAULT_OUTPUT_LOCATION "/tmp/codechal_dump/"
#else
#define MOS_DEBUG_DEFAULT_OUTPUT_LOCATION "/data/codechal_dump/"
#endif
#endif //__MOS_UTIL_DEBUG_SPECIFIC_H__