void vos_trace_msg( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, char *strFormat, ... ) { char strBuffer[VOS_TRACE_BUFFER_SIZE]; int n; unsigned long irq_flag; if ( gVosTraceInfo[ module ].moduleTraceLevel & VOS_TRACE_LEVEL_TO_MODULE_BITMASK( level ) ) { static const char * TRACE_LEVEL_STR[] = { " ", "F ", "E ", "W ", "I ", "IH", "IM", "IL", "D" }; va_list val; va_start(val, strFormat); n = snprintf(strBuffer, VOS_TRACE_BUFFER_SIZE, "wlan: [%d:%2s:%3s] ", in_interrupt() ? 0 : current->pid, (char *) TRACE_LEVEL_STR[ level ], (char *) gVosTraceInfo[ module ].moduleNameStr ); if ((n >= 0) && (n < VOS_TRACE_BUFFER_SIZE)) { vsnprintf(strBuffer + n, VOS_TRACE_BUFFER_SIZE - n, strFormat, val ); #ifdef WCONN_TRACE_KMSG_LOG_BUFF spin_lock_irqsave (&gVosSpinLock, irq_flag); kmsgwconnBuffWrite(strBuffer); spin_unlock_irqrestore (&gVosSpinLock, irq_flag); #endif wrnprintf("%s\n", strBuffer); } va_end(val); } }
/*---------------------------------------------------------------------------- \brief vos_trace_msg() - Externally called trace function Checks the level of severity and accordingly prints the trace messages \param module - module identifier. A member of the VOS_MODULE_ID enumeration that identifies the module issuing the trace message. \param level - trace level. A member of the VOS_TRACE_LEVEL enumeration indicating the severity of the condition causing the trace message to be issued. More severe conditions are more likely to be logged. \param strFormat - format string. The message to be logged. This format string contains printf-like replacement parameters, which follow this parameter in the variable argument list. \return nothing \sa --------------------------------------------------------------------------*/ void vos_trace_msg( VOS_MODULE_ID module, VOS_TRACE_LEVEL level, char *strFormat, ... ) { char strBuffer[VOS_TRACE_BUFFER_SIZE]; int n; unsigned long irq_flag; // Print the trace message when the desired level bit is set in the module // tracel level mask. if ( gVosTraceInfo[ module ].moduleTraceLevel & VOS_TRACE_LEVEL_TO_MODULE_BITMASK( level ) ) { // the trace level strings in an array. these are ordered in the same order // as the trace levels are defined in the enum (see VOS_TRACE_LEVEL) so we // can index into this array with the level and get the right string. The // vos trace levels are... // none, Fatal, Error, Warning, Info, InfoHigh, InfoMed, InfoLow, Debug static const char * TRACE_LEVEL_STR[] = { " ", "F ", "E ", "W ", "I ", "IH", "IM", "IL", "D" }; va_list val; va_start(val, strFormat); // print the prefix string into the string buffer... n = snprintf(strBuffer, VOS_TRACE_BUFFER_SIZE, "wlan: [%d:%2s:%3s] ", in_interrupt() ? 0 : current->pid, (char *) TRACE_LEVEL_STR[ level ], (char *) gVosTraceInfo[ module ].moduleNameStr ); // print the formatted log message after the prefix string. if ((n >= 0) && (n < VOS_TRACE_BUFFER_SIZE)) { vsnprintf(strBuffer + n, VOS_TRACE_BUFFER_SIZE - n, strFormat, val ); #ifdef WCONN_TRACE_KMSG_LOG_BUFF spin_lock_irqsave (&gVosSpinLock, irq_flag); kmsgwconnBuffWrite(strBuffer); spin_unlock_irqrestore (&gVosSpinLock, irq_flag); #endif pr_err("%s\n", strBuffer); } va_end(val); } }