Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/cam/cam_debug.h
39475 views
1
/*-
2
* Macros for tracing/loging information in the CAM layer
3
*
4
* SPDX-License-Identifier: BSD-2-Clause
5
*
6
* Copyright (c) 1997 Justin T. Gibbs.
7
* All rights reserved.
8
*
9
* Redistribution and use in source and binary forms, with or without
10
* modification, are permitted provided that the following conditions
11
* are met:
12
* 1. Redistributions of source code must retain the above copyright
13
* notice, this list of conditions, and the following disclaimer,
14
* without modification, immediately at the beginning of the file.
15
* 2. The name of the author may not be used to endorse or promote products
16
* derived from this software without specific prior written permission.
17
*
18
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
22
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28
* SUCH DAMAGE.
29
*/
30
#ifndef _CAM_CAM_DEBUG_H
31
#define _CAM_CAM_DEBUG_H 1
32
33
/*
34
* Debugging flags.
35
*/
36
typedef enum {
37
CAM_DEBUG_NONE = 0x00, /* no debugging */
38
CAM_DEBUG_INFO = 0x01, /* scsi commands, errors, data */
39
CAM_DEBUG_TRACE = 0x02, /* routine flow tracking */
40
CAM_DEBUG_SUBTRACE = 0x04, /* internal to routine flows */
41
CAM_DEBUG_CDB = 0x08, /* print out SCSI CDBs only */
42
CAM_DEBUG_XPT = 0x10, /* print out xpt scheduling */
43
CAM_DEBUG_PERIPH = 0x20, /* print out peripheral calls */
44
CAM_DEBUG_PROBE = 0x40 /* print out probe actions */
45
} cam_debug_flags;
46
47
#if defined(_KERNEL)
48
49
#ifndef CAM_DEBUG_FLAGS
50
#define CAM_DEBUG_FLAGS CAM_DEBUG_NONE
51
#endif
52
53
#ifndef CAM_DEBUG_COMPILE
54
#ifdef CAMDEBUG
55
#define CAM_DEBUG_COMPILE (-1)
56
#else
57
#define CAM_DEBUG_COMPILE (CAM_DEBUG_INFO | CAM_DEBUG_CDB | \
58
CAM_DEBUG_PERIPH | CAM_DEBUG_PROBE | \
59
CAM_DEBUG_FLAGS)
60
#endif
61
#endif
62
63
#ifndef CAM_DEBUG_BUS
64
#define CAM_DEBUG_BUS CAM_BUS_WILDCARD
65
#endif
66
#ifndef CAM_DEBUG_TARGET
67
#define CAM_DEBUG_TARGET CAM_TARGET_WILDCARD
68
#endif
69
#ifndef CAM_DEBUG_LUN
70
#define CAM_DEBUG_LUN CAM_LUN_WILDCARD
71
#endif
72
73
#ifndef CAM_DEBUG_DELAY
74
#define CAM_DEBUG_DELAY 0
75
#endif
76
77
/* Path we want to debug */
78
extern struct cam_path *cam_dpath;
79
/* Current debug levels set */
80
extern uint32_t cam_dflags;
81
/* Printf delay value (to prevent scrolling) */
82
extern uint32_t cam_debug_delay;
83
84
/* Helper routines -- helps conserve stack */
85
struct cam_ed;
86
void xpt_cam_path_debug(struct cam_path *path, const char *fmt, ...);
87
void xpt_cam_dev_debug(struct cam_ed *dev, const char *fmt, ...);
88
void xpt_cam_debug(const char *fmt, ...);
89
90
/* Stupid macro to remove a layer of parens */
91
#define _CAM_X(...) __VA_ARGS__
92
93
/* Debugging macros. */
94
#define CAM_DEBUGGED(path, flag) \
95
(((flag) & (CAM_DEBUG_COMPILE) & cam_dflags) \
96
&& (cam_dpath != NULL) \
97
&& (xpt_path_comp(cam_dpath, (path)) >= 0) \
98
&& (xpt_path_comp(cam_dpath, (path)) < 2))
99
100
#define CAM_DEBUG(path, flag, printfargs) \
101
if (CAM_DEBUGGED(path, flag)) { \
102
xpt_cam_path_debug(path, _CAM_X printfargs); \
103
}
104
105
#define CAM_DEBUG_DEV(dev, flag, printfargs) \
106
if (((flag) & (CAM_DEBUG_COMPILE) & cam_dflags) \
107
&& (cam_dpath != NULL) \
108
&& (xpt_path_comp_dev(cam_dpath, (dev)) >= 0) \
109
&& (xpt_path_comp_dev(cam_dpath, (dev)) < 2)) { \
110
xpt_cam_dev_debug(dev, _CAM_X printfargs); \
111
}
112
113
#define CAM_DEBUG_PRINT(flag, printfargs) \
114
if (((flag) & (CAM_DEBUG_COMPILE) & cam_dflags)) { \
115
xpt_cam_debug(_CAM_X printfargs); \
116
}
117
118
#else /* !_KERNEL */
119
120
#define CAM_DEBUGGED(A, B) 0
121
#define CAM_DEBUG(A, B, C)
122
#define CAM_DEBUG_DEV(A, B, C)
123
#define CAM_DEBUG_PRINT(A, B)
124
125
#endif /* _KERNEL */
126
127
#endif /* _CAM_CAM_DEBUG_H */
128
129