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