Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  *  Copyright IBM Corp. 2001, 2007
0004  *  Authors:    Peter Tiedemann (ptiedem@de.ibm.com)
0005  *
0006  */
0007 
0008 #ifndef _CTCM_DBUG_H_
0009 #define _CTCM_DBUG_H_
0010 
0011 /*
0012  * Debug Facility stuff
0013  */
0014 
0015 #include <asm/debug.h>
0016 
0017 #ifdef DEBUG
0018  #define do_debug 1
0019 #else
0020  #define do_debug 0
0021 #endif
0022 #ifdef DEBUGCCW
0023  #define do_debug_ccw 1
0024  #define DEBUGDATA 1
0025 #else
0026  #define do_debug_ccw 0
0027 #endif
0028 #ifdef DEBUGDATA
0029  #define do_debug_data 1
0030 #else
0031  #define do_debug_data 0
0032 #endif
0033 
0034 /* define dbf debug levels similar to kernel msg levels */
0035 #define CTC_DBF_ALWAYS  0   /* always print this            */
0036 #define CTC_DBF_EMERG   0   /* system is unusable           */
0037 #define CTC_DBF_ALERT   1   /* action must be taken immediately */
0038 #define CTC_DBF_CRIT    2   /* critical conditions          */
0039 #define CTC_DBF_ERROR   3   /* error conditions         */
0040 #define CTC_DBF_WARN    4   /* warning conditions           */
0041 #define CTC_DBF_NOTICE  5   /* normal but significant condition */
0042 #define CTC_DBF_INFO    5   /* informational            */
0043 #define CTC_DBF_DEBUG   6   /* debug-level messages         */
0044 
0045 enum ctcm_dbf_names {
0046     CTCM_DBF_SETUP,
0047     CTCM_DBF_ERROR,
0048     CTCM_DBF_TRACE,
0049     CTCM_DBF_MPC_SETUP,
0050     CTCM_DBF_MPC_ERROR,
0051     CTCM_DBF_MPC_TRACE,
0052     CTCM_DBF_INFOS  /* must be last element */
0053 };
0054 
0055 struct ctcm_dbf_info {
0056     char name[DEBUG_MAX_NAME_LEN];
0057     int pages;
0058     int areas;
0059     int len;
0060     int level;
0061     debug_info_t *id;
0062 };
0063 
0064 extern struct ctcm_dbf_info ctcm_dbf[CTCM_DBF_INFOS];
0065 
0066 int ctcm_register_dbf_views(void);
0067 void ctcm_unregister_dbf_views(void);
0068 __printf(3, 4)
0069 void ctcm_dbf_longtext(enum ctcm_dbf_names dbf_nix, int level, char *text, ...);
0070 
0071 static inline const char *strtail(const char *s, int n)
0072 {
0073     int l = strlen(s);
0074     return (l > n) ? s + (l - n) : s;
0075 }
0076 
0077 #define CTCM_FUNTAIL strtail((char *)__func__, 16)
0078 
0079 #define CTCM_DBF_TEXT(name, level, text) \
0080     do { \
0081         debug_text_event(ctcm_dbf[CTCM_DBF_##name].id, level, text); \
0082     } while (0)
0083 
0084 #define CTCM_DBF_HEX(name, level, addr, len) \
0085     do { \
0086         debug_event(ctcm_dbf[CTCM_DBF_##name].id, \
0087                     level, (void *)(addr), len); \
0088     } while (0)
0089 
0090 #define CTCM_DBF_TEXT_(name, level, text...) \
0091     ctcm_dbf_longtext(CTCM_DBF_##name, level, text)
0092 
0093 /*
0094  * cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
0095  * dev : netdevice with valid name field.
0096  * text: any text string.
0097  */
0098 #define CTCM_DBF_DEV_NAME(cat, dev, text) \
0099     do { \
0100         CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%s) :- %s", \
0101             CTCM_FUNTAIL, dev->name, text); \
0102     } while (0)
0103 
0104 #define MPC_DBF_DEV_NAME(cat, dev, text) \
0105     do { \
0106         CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%s) := %s", \
0107             CTCM_FUNTAIL, dev->name, text); \
0108     } while (0)
0109 
0110 #define CTCMY_DBF_DEV_NAME(cat, dev, text) \
0111     do { \
0112         if (IS_MPCDEV(dev)) \
0113             MPC_DBF_DEV_NAME(cat, dev, text); \
0114         else \
0115             CTCM_DBF_DEV_NAME(cat, dev, text); \
0116     } while (0)
0117 
0118 /*
0119  * cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
0120  * dev : netdevice.
0121  * text: any text string.
0122  */
0123 #define CTCM_DBF_DEV(cat, dev, text) \
0124     do { \
0125         CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%p) :-: %s", \
0126             CTCM_FUNTAIL, dev, text); \
0127     } while (0)
0128 
0129 #define MPC_DBF_DEV(cat, dev, text) \
0130     do { \
0131         CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%p) :=: %s", \
0132             CTCM_FUNTAIL, dev, text); \
0133     } while (0)
0134 
0135 #define CTCMY_DBF_DEV(cat, dev, text) \
0136     do { \
0137         if (IS_MPCDEV(dev)) \
0138             MPC_DBF_DEV(cat, dev, text); \
0139         else \
0140             CTCM_DBF_DEV(cat, dev, text); \
0141     } while (0)
0142 
0143 #endif