2009-10-17 09:09:34 +00:00
/*
* iwmc3200top - Intel Wireless MultiCom 3200 Top Driver
* drivers / misc / iwmc3200top / log . h
*
* Copyright ( C ) 2009 Intel Corporation . All rights reserved .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License version
* 2 as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful ,
* but 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 Street , Fifth Floor , Boston , MA
* 02110 - 1301 , USA .
*
*
* Author Name : Maxim Grabarnik < maxim . grabarnink @ intel . com >
* -
*
*/
# ifndef __LOG_H__
# define __LOG_H__
/* log severity:
* The log levels here match FW log levels
* so values need to stay as is */
# define LOG_SEV_CRITICAL 0
# define LOG_SEV_ERROR 1
# define LOG_SEV_WARNING 2
# define LOG_SEV_INFO 3
# define LOG_SEV_INFOEX 4
2009-12-16 04:26:25 +00:00
/* Log levels not defined for FW */
# define LOG_SEV_TRACE 5
# define LOG_SEV_DUMP 6
# define LOG_SEV_FW_FILTER_ALL \
( BIT ( LOG_SEV_CRITICAL ) | \
BIT ( LOG_SEV_ERROR ) | \
BIT ( LOG_SEV_WARNING ) | \
BIT ( LOG_SEV_INFO ) | \
2009-10-17 09:09:34 +00:00
BIT ( LOG_SEV_INFOEX ) )
2009-12-16 04:26:25 +00:00
# define LOG_SEV_FILTER_ALL \
( BIT ( LOG_SEV_CRITICAL ) | \
BIT ( LOG_SEV_ERROR ) | \
BIT ( LOG_SEV_WARNING ) | \
BIT ( LOG_SEV_INFO ) | \
BIT ( LOG_SEV_INFOEX ) | \
BIT ( LOG_SEV_TRACE ) | \
BIT ( LOG_SEV_DUMP ) )
2009-10-17 09:09:34 +00:00
/* log source */
# define LOG_SRC_INIT 0
# define LOG_SRC_DEBUGFS 1
# define LOG_SRC_FW_DOWNLOAD 2
# define LOG_SRC_FW_MSG 3
# define LOG_SRC_TST 4
# define LOG_SRC_IRQ 5
# define LOG_SRC_MAX 6
# define LOG_SRC_ALL 0xFF
/**
* Default intitialization runtime log level
*/
# ifndef LOG_SEV_FILTER_RUNTIME
# define LOG_SEV_FILTER_RUNTIME \
( BIT ( LOG_SEV_CRITICAL ) | \
BIT ( LOG_SEV_ERROR ) | \
BIT ( LOG_SEV_WARNING ) )
# endif
# ifndef FW_LOG_SEV_FILTER_RUNTIME
# define FW_LOG_SEV_FILTER_RUNTIME LOG_SEV_FILTER_ALL
# endif
# ifdef CONFIG_IWMC3200TOP_DEBUG
/**
* Log macros
*/
# define priv2dev(priv) (&(priv->func)->dev)
# define LOG_CRITICAL(priv, src, fmt, args...) \
do { \
if ( iwmct_logdefs [ LOG_SRC_ # # src ] & BIT ( LOG_SEV_CRITICAL ) ) \
dev_crit ( priv2dev ( priv ) , " %s %d: " fmt , \
__func__ , __LINE__ , # # args ) ; \
} while ( 0 )
# define LOG_ERROR(priv, src, fmt, args...) \
do { \
if ( iwmct_logdefs [ LOG_SRC_ # # src ] & BIT ( LOG_SEV_ERROR ) ) \
dev_err ( priv2dev ( priv ) , " %s %d: " fmt , \
__func__ , __LINE__ , # # args ) ; \
} while ( 0 )
# define LOG_WARNING(priv, src, fmt, args...) \
do { \
if ( iwmct_logdefs [ LOG_SRC_ # # src ] & BIT ( LOG_SEV_WARNING ) ) \
dev_warn ( priv2dev ( priv ) , " %s %d: " fmt , \
__func__ , __LINE__ , # # args ) ; \
} while ( 0 )
# define LOG_INFO(priv, src, fmt, args...) \
do { \
if ( iwmct_logdefs [ LOG_SRC_ # # src ] & BIT ( LOG_SEV_INFO ) ) \
dev_info ( priv2dev ( priv ) , " %s %d: " fmt , \
__func__ , __LINE__ , # # args ) ; \
} while ( 0 )
2009-12-16 04:26:25 +00:00
# define LOG_TRACE(priv, src, fmt, args...) \
2009-10-17 09:09:34 +00:00
do { \
2009-12-16 04:26:25 +00:00
if ( iwmct_logdefs [ LOG_SRC_ # # src ] & BIT ( LOG_SEV_TRACE ) ) \
2009-10-17 09:09:34 +00:00
dev_dbg ( priv2dev ( priv ) , " %s %d: " fmt , \
__func__ , __LINE__ , # # args ) ; \
} while ( 0 )
# define LOG_HEXDUMP(src, ptr, len) \
do { \
2009-12-16 04:26:25 +00:00
if ( iwmct_logdefs [ LOG_SRC_ # # src ] & BIT ( LOG_SEV_DUMP ) ) \
2009-10-17 09:09:34 +00:00
print_hex_dump ( KERN_DEBUG , " " , DUMP_PREFIX_NONE , \
16 , 1 , ptr , len , false ) ; \
} while ( 0 )
void iwmct_log_top_message ( struct iwmct_priv * priv , u8 * buf , int len ) ;
extern u8 iwmct_logdefs [ ] ;
int iwmct_log_set_filter ( u8 src , u8 logmask ) ;
int iwmct_log_set_fw_filter ( u8 src , u8 logmask ) ;
ssize_t show_iwmct_log_level ( struct device * d ,
struct device_attribute * attr , char * buf ) ;
ssize_t store_iwmct_log_level ( struct device * d ,
struct device_attribute * attr ,
const char * buf , size_t count ) ;
ssize_t show_iwmct_log_level_fw ( struct device * d ,
struct device_attribute * attr , char * buf ) ;
ssize_t store_iwmct_log_level_fw ( struct device * d ,
struct device_attribute * attr ,
const char * buf , size_t count ) ;
# else
# define LOG_CRITICAL(priv, src, fmt, args...)
# define LOG_ERROR(priv, src, fmt, args...)
# define LOG_WARNING(priv, src, fmt, args...)
# define LOG_INFO(priv, src, fmt, args...)
2009-12-16 04:26:25 +00:00
# define LOG_TRACE(priv, src, fmt, args...)
2009-10-17 09:09:34 +00:00
# define LOG_HEXDUMP(src, ptr, len)
static inline void iwmct_log_top_message ( struct iwmct_priv * priv ,
u8 * buf , int len ) { }
static inline int iwmct_log_set_filter ( u8 src , u8 logmask ) { return 0 ; }
static inline int iwmct_log_set_fw_filter ( u8 src , u8 logmask ) { return 0 ; }
# endif /* CONFIG_IWMC3200TOP_DEBUG */
int log_get_filter_str ( char * buf , int size ) ;
int log_get_fw_filter_str ( char * buf , int size ) ;
# endif /* __LOG_H__ */