blob: f6ad2baf6fd0ab6ebfb713d453775225e28b840f [file] [log] [blame]
/*
* Copyright (c) 2012-2013 Qualcomm Atheros, Inc.
* All Rights Reserved.
* Qualcomm Atheros Confidential and Proprietary.
*/
/*
* Airgo Networks, Inc proprietary. All rights reserved.
* logApi.cc - Handles log messages for all the modules.
* Author: Kevin Nguyen
* Date: 02/27/02
* History:-
* 02/11/02 Created.
* 03/12/02 Rearrange logDebug parameter list and add more params.
* --------------------------------------------------------------------
*
*/
#include <sirCommon.h>
#include <sirDebug.h>
#include <utilsApi.h>
#include <wlan_qct_wda.h>
#include <stdarg.h>
#include "utilsGlobal.h"
#include "macInitApi.h"
#include "palApi.h"
#include "vos_trace.h"
#ifdef ANI_OS_TYPE_ANDROID
#include <linux/kernel.h>
#endif
// ---------------------------------------------------------------------
/**
* logInit()
*
* FUNCTION:
* This function is called to prepare the logging utility.
*
* LOGIC:
*
* ASSUMPTIONS:
* None.
*
* NOTE:
*
* @param tpAniSirGlobal Sirius software parameter strucutre pointer
* @return None
*/
tSirRetStatus
logInit(tpAniSirGlobal pMac)
{
tANI_U32 i;
// Add code to initialize debug level from CFG module
// For now, enable all logging
for (i = 0; i < LOG_ENTRY_NUM; i++)
{
#ifdef SIR_DEBUG
pMac->utils.gLogEvtLevel[i] = pMac->utils.gLogDbgLevel[i] = LOG1;
#else
pMac->utils.gLogEvtLevel[i] = pMac->utils.gLogDbgLevel[i] = LOGW;
#endif
}
return eSIR_SUCCESS;
} /*** logInit() ***/
void
logDeinit(tpAniSirGlobal pMac)
{
return;
}
/**
* logDbg()
*
*FUNCTION:
* This function is called to log a debug message.
*
*PARAMS:
*
*LOGIC:
*
*ASSUMPTIONS:
* None.
*
*NOTE:
*
* @param tpAniSirGlobal Sirius software parameter strucutre pointer
* @param ModId 8-bit modID
* @param debugLevel debugging level for this message
* @param pStr string parameter pointer
* @return None
*/
void logDbg(tpAniSirGlobal pMac, tANI_U8 modId, tANI_U32 debugLevel, const char *pStr,...)
{
#ifdef WLAN_DEBUG
if ( debugLevel > pMac->utils.gLogDbgLevel[LOG_INDEX_FOR_MODULE( modId )] )
return;
else
{
va_list marker;
va_start( marker, pStr ); /* Initialize variable arguments. */
logDebug(pMac, modId, debugLevel, pStr, marker);
va_end( marker ); /* Reset variable arguments. */
}
#endif
}
VOS_TRACE_LEVEL getVosDebugLevel(tANI_U32 debugLevel)
{
switch(debugLevel)
{
case LOGP:
return VOS_TRACE_LEVEL_FATAL;
case LOGE:
return VOS_TRACE_LEVEL_ERROR;
case LOGW:
return VOS_TRACE_LEVEL_WARN;
case LOG1:
return VOS_TRACE_LEVEL_INFO;
case LOG2:
return VOS_TRACE_LEVEL_INFO_HIGH;
case LOG3:
return VOS_TRACE_LEVEL_INFO_MED;
case LOG4:
return VOS_TRACE_LEVEL_INFO_LOW;
default:
return VOS_TRACE_LEVEL_INFO_LOW;
}
}
static inline VOS_MODULE_ID getVosModuleId(tANI_U8 modId)
{
switch(modId)
{
case SIR_HAL_MODULE_ID:
case SIR_PHY_MODULE_ID:
return VOS_MODULE_ID_WDA;
case SIR_PMM_MODULE_ID:
return VOS_MODULE_ID_PMC;
case SIR_LIM_MODULE_ID:
case SIR_SCH_MODULE_ID:
case SIR_CFG_MODULE_ID:
case SIR_MNT_MODULE_ID:
case SIR_DPH_MODULE_ID:
case SIR_DBG_MODULE_ID:
return VOS_MODULE_ID_PE;
case SIR_SYS_MODULE_ID:
return VOS_MODULE_ID_SYS;
case SIR_SMS_MODULE_ID:
return VOS_MODULE_ID_SME;
default:
return VOS_MODULE_ID_SYS;
}
}
#define LOG_SIZE 256
void logDebug(tpAniSirGlobal pMac, tANI_U8 modId, tANI_U32 debugLevel, const char *pStr, va_list marker)
{
VOS_TRACE_LEVEL vosDebugLevel;
VOS_MODULE_ID vosModuleId;
char logBuffer[LOG_SIZE];
vosDebugLevel = getVosDebugLevel(debugLevel);
vosModuleId = getVosModuleId(modId);
vsnprintf(logBuffer, LOG_SIZE - 1, pStr, marker);
VOS_TRACE(vosModuleId, vosDebugLevel, "%s", logBuffer);
// The caller must check loglevel
VOS_ASSERT( ( debugLevel <= pMac->utils.gLogDbgLevel[LOG_INDEX_FOR_MODULE( modId )] ) && ( LOGP != debugLevel ) );
} /*** end logDebug() ***/