0001
0002
0003
0004
0005
0006
0007
0008 #ifndef _CTCM_DBUG_H_
0009 #define _CTCM_DBUG_H_
0010
0011
0012
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
0035 #define CTC_DBF_ALWAYS 0
0036 #define CTC_DBF_EMERG 0
0037 #define CTC_DBF_ALERT 1
0038 #define CTC_DBF_CRIT 2
0039 #define CTC_DBF_ERROR 3
0040 #define CTC_DBF_WARN 4
0041 #define CTC_DBF_NOTICE 5
0042 #define CTC_DBF_INFO 5
0043 #define CTC_DBF_DEBUG 6
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
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
0095
0096
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
0120
0121
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