Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / s390 / net / ctcm_dbug.h
1 /*
2  *      Copyright IBM Corp. 2001, 2007
3  *      Authors:        Peter Tiedemann (ptiedem@de.ibm.com)
4  *
5  */
6
7 #ifndef _CTCM_DBUG_H_
8 #define _CTCM_DBUG_H_
9
10 /*
11  * Debug Facility stuff
12  */
13
14 #include <asm/debug.h>
15
16 #ifdef DEBUG
17  #define do_debug 1
18 #else
19  #define do_debug 0
20 #endif
21 #ifdef DEBUGCCW
22  #define do_debug_ccw 1
23  #define DEBUGDATA 1
24 #else
25  #define do_debug_ccw 0
26 #endif
27 #ifdef DEBUGDATA
28  #define do_debug_data 1
29 #else
30  #define do_debug_data 0
31 #endif
32
33 /* define dbf debug levels similar to kernel msg levels */
34 #define CTC_DBF_ALWAYS  0       /* always print this                    */
35 #define CTC_DBF_EMERG   0       /* system is unusable                   */
36 #define CTC_DBF_ALERT   1       /* action must be taken immediately     */
37 #define CTC_DBF_CRIT    2       /* critical conditions                  */
38 #define CTC_DBF_ERROR   3       /* error conditions                     */
39 #define CTC_DBF_WARN    4       /* warning conditions                   */
40 #define CTC_DBF_NOTICE  5       /* normal but significant condition     */
41 #define CTC_DBF_INFO    5       /* informational                        */
42 #define CTC_DBF_DEBUG   6       /* debug-level messages                 */
43
44 enum ctcm_dbf_names {
45         CTCM_DBF_SETUP,
46         CTCM_DBF_ERROR,
47         CTCM_DBF_TRACE,
48         CTCM_DBF_MPC_SETUP,
49         CTCM_DBF_MPC_ERROR,
50         CTCM_DBF_MPC_TRACE,
51         CTCM_DBF_INFOS  /* must be last element */
52 };
53
54 struct ctcm_dbf_info {
55         char name[DEBUG_MAX_NAME_LEN];
56         int pages;
57         int areas;
58         int len;
59         int level;
60         debug_info_t *id;
61 };
62
63 extern struct ctcm_dbf_info ctcm_dbf[CTCM_DBF_INFOS];
64
65 int ctcm_register_dbf_views(void);
66 void ctcm_unregister_dbf_views(void);
67 void ctcm_dbf_longtext(enum ctcm_dbf_names dbf_nix, int level, char *text, ...);
68
69 static inline const char *strtail(const char *s, int n)
70 {
71         int l = strlen(s);
72         return (l > n) ? s + (l - n) : s;
73 }
74
75 #define CTCM_FUNTAIL strtail((char *)__func__, 16)
76
77 #define CTCM_DBF_TEXT(name, level, text) \
78         do { \
79                 debug_text_event(ctcm_dbf[CTCM_DBF_##name].id, level, text); \
80         } while (0)
81
82 #define CTCM_DBF_HEX(name, level, addr, len) \
83         do { \
84                 debug_event(ctcm_dbf[CTCM_DBF_##name].id, \
85                                         level, (void *)(addr), len); \
86         } while (0)
87
88 #define CTCM_DBF_TEXT_(name, level, text...) \
89         ctcm_dbf_longtext(CTCM_DBF_##name, level, text)
90
91 /*
92  * cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
93  * dev : netdevice with valid name field.
94  * text: any text string.
95  */
96 #define CTCM_DBF_DEV_NAME(cat, dev, text) \
97         do { \
98                 CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%s) :- %s", \
99                         CTCM_FUNTAIL, dev->name, text); \
100         } while (0)
101
102 #define MPC_DBF_DEV_NAME(cat, dev, text) \
103         do { \
104                 CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%s) := %s", \
105                         CTCM_FUNTAIL, dev->name, text); \
106         } while (0)
107
108 #define CTCMY_DBF_DEV_NAME(cat, dev, text) \
109         do { \
110                 if (IS_MPCDEV(dev)) \
111                         MPC_DBF_DEV_NAME(cat, dev, text); \
112                 else \
113                         CTCM_DBF_DEV_NAME(cat, dev, text); \
114         } while (0)
115
116 /*
117  * cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
118  * dev : netdevice.
119  * text: any text string.
120  */
121 #define CTCM_DBF_DEV(cat, dev, text) \
122         do { \
123                 CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%p) :-: %s", \
124                         CTCM_FUNTAIL, dev, text); \
125         } while (0)
126
127 #define MPC_DBF_DEV(cat, dev, text) \
128         do { \
129                 CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%p) :=: %s", \
130                         CTCM_FUNTAIL, dev, text); \
131         } while (0)
132
133 #define CTCMY_DBF_DEV(cat, dev, text) \
134         do { \
135                 if (IS_MPCDEV(dev)) \
136                         MPC_DBF_DEV(cat, dev, text); \
137                 else \
138                         CTCM_DBF_DEV(cat, dev, text); \
139         } while (0)
140
141 #endif