2008-02-08 00:03:49 +01:00
/*
* drivers / s390 / net / ctcm_dbug . h
*
* Copyright IBM Corp . 2001 , 2007
* Authors : Peter Tiedemann ( ptiedem @ de . ibm . com )
*
*/
# ifndef _CTCM_DBUG_H_
# define _CTCM_DBUG_H_
/*
* Debug Facility stuff
*/
# include <asm/debug.h>
# ifdef DEBUG
# define do_debug 1
# else
# define do_debug 0
# endif
# ifdef DEBUGCCW
# define do_debug_ccw 1
2008-07-18 15:24:57 +02:00
# define DEBUGDATA 1
2008-02-08 00:03:49 +01:00
# else
# define do_debug_ccw 0
# endif
2008-07-18 15:24:57 +02:00
# ifdef DEBUGDATA
# define do_debug_data 1
# else
# define do_debug_data 0
# endif
2008-02-08 00:03:49 +01:00
/* define dbf debug levels similar to kernel msg levels */
# define CTC_DBF_ALWAYS 0 /* always print this */
# define CTC_DBF_EMERG 0 /* system is unusable */
# define CTC_DBF_ALERT 1 /* action must be taken immediately */
# define CTC_DBF_CRIT 2 /* critical conditions */
# define CTC_DBF_ERROR 3 /* error conditions */
# define CTC_DBF_WARN 4 /* warning conditions */
# define CTC_DBF_NOTICE 5 /* normal but significant condition */
# define CTC_DBF_INFO 5 /* informational */
# define CTC_DBF_DEBUG 6 /* debug-level messages */
enum ctcm_dbf_names {
CTCM_DBF_SETUP ,
CTCM_DBF_ERROR ,
CTCM_DBF_TRACE ,
CTCM_DBF_MPC_SETUP ,
CTCM_DBF_MPC_ERROR ,
CTCM_DBF_MPC_TRACE ,
CTCM_DBF_INFOS /* must be last element */
} ;
struct ctcm_dbf_info {
char name [ DEBUG_MAX_NAME_LEN ] ;
int pages ;
int areas ;
int len ;
int level ;
debug_info_t * id ;
} ;
extern struct ctcm_dbf_info ctcm_dbf [ CTCM_DBF_INFOS ] ;
int ctcm_register_dbf_views ( void ) ;
void ctcm_unregister_dbf_views ( void ) ;
2008-07-18 15:24:57 +02:00
void ctcm_dbf_longtext ( enum ctcm_dbf_names dbf_nix , int level , char * text , . . . ) ;
2008-02-08 00:03:49 +01:00
static inline const char * strtail ( const char * s , int n )
{
int l = strlen ( s ) ;
return ( l > n ) ? s + ( l - n ) : s ;
}
# define CTCM_FUNTAIL strtail((char *)__func__, 16)
# define CTCM_DBF_TEXT(name, level, text) \
do { \
debug_text_event ( ctcm_dbf [ CTCM_DBF_ # # name ] . id , level , text ) ; \
} while ( 0 )
# define CTCM_DBF_HEX(name, level, addr, len) \
do { \
debug_event ( ctcm_dbf [ CTCM_DBF_ # # name ] . id , \
level , ( void * ) ( addr ) , len ) ; \
} while ( 0 )
# define CTCM_DBF_TEXT_(name, level, text...) \
2008-07-18 15:24:57 +02:00
ctcm_dbf_longtext ( CTCM_DBF_ # # name , level , text )
2008-02-08 00:03:49 +01:00
/*
* cat : one of { setup , mpc_setup , trace , mpc_trace , error , mpc_error } .
* dev : netdevice with valid name field .
* text : any text string .
*/
# define CTCM_DBF_DEV_NAME(cat, dev, text) \
do { \
2008-07-18 15:24:57 +02:00
CTCM_DBF_TEXT_ ( cat , CTC_DBF_INFO , " %s(%s) :- %s " , \
2008-02-08 00:03:49 +01:00
CTCM_FUNTAIL , dev - > name , text ) ; \
} while ( 0 )
# define MPC_DBF_DEV_NAME(cat, dev, text) \
do { \
2008-07-18 15:24:57 +02:00
CTCM_DBF_TEXT_ ( MPC_ # # cat , CTC_DBF_INFO , " %s(%s) := %s " , \
2008-02-08 00:03:49 +01:00
CTCM_FUNTAIL , dev - > name , text ) ; \
} while ( 0 )
# define CTCMY_DBF_DEV_NAME(cat, dev, text) \
do { \
if ( IS_MPCDEV ( dev ) ) \
MPC_DBF_DEV_NAME ( cat , dev , text ) ; \
else \
CTCM_DBF_DEV_NAME ( cat , dev , text ) ; \
} while ( 0 )
/*
* cat : one of { setup , mpc_setup , trace , mpc_trace , error , mpc_error } .
* dev : netdevice .
* text : any text string .
*/
# define CTCM_DBF_DEV(cat, dev, text) \
do { \
2008-07-18 15:24:57 +02:00
CTCM_DBF_TEXT_ ( cat , CTC_DBF_INFO , " %s(%p) :-: %s " , \
2008-02-08 00:03:49 +01:00
CTCM_FUNTAIL , dev , text ) ; \
} while ( 0 )
# define MPC_DBF_DEV(cat, dev, text) \
do { \
2008-07-18 15:24:57 +02:00
CTCM_DBF_TEXT_ ( MPC_ # # cat , CTC_DBF_INFO , " %s(%p) :=: %s " , \
2008-02-08 00:03:49 +01:00
CTCM_FUNTAIL , dev , text ) ; \
} while ( 0 )
# define CTCMY_DBF_DEV(cat, dev, text) \
do { \
if ( IS_MPCDEV ( dev ) ) \
MPC_DBF_DEV ( cat , dev , text ) ; \
else \
CTCM_DBF_DEV ( cat , dev , text ) ; \
} while ( 0 )
# endif