xref: /openbmc/linux/drivers/mtd/ubi/debug.h (revision d19bafd9)
1801c135cSArtem B. Bityutskiy /*
2801c135cSArtem B. Bityutskiy  * Copyright (c) International Business Machines Corp., 2006
3801c135cSArtem B. Bityutskiy  *
4801c135cSArtem B. Bityutskiy  * This program is free software; you can redistribute it and/or modify
5801c135cSArtem B. Bityutskiy  * it under the terms of the GNU General Public License as published by
6801c135cSArtem B. Bityutskiy  * the Free Software Foundation; either version 2 of the License, or
7801c135cSArtem B. Bityutskiy  * (at your option) any later version.
8801c135cSArtem B. Bityutskiy  *
9801c135cSArtem B. Bityutskiy  * This program is distributed in the hope that it will be useful,
10801c135cSArtem B. Bityutskiy  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11801c135cSArtem B. Bityutskiy  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
12801c135cSArtem B. Bityutskiy  * the GNU General Public License for more details.
13801c135cSArtem B. Bityutskiy  *
14801c135cSArtem B. Bityutskiy  * You should have received a copy of the GNU General Public License
15801c135cSArtem B. Bityutskiy  * along with this program; if not, write to the Free Software
16801c135cSArtem B. Bityutskiy  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17801c135cSArtem B. Bityutskiy  *
18801c135cSArtem B. Bityutskiy  * Author: Artem Bityutskiy (Битюцкий Артём)
19801c135cSArtem B. Bityutskiy  */
20801c135cSArtem B. Bityutskiy 
21801c135cSArtem B. Bityutskiy #ifndef __UBI_DEBUG_H__
22801c135cSArtem B. Bityutskiy #define __UBI_DEBUG_H__
23801c135cSArtem B. Bityutskiy 
24801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG
25801c135cSArtem B. Bityutskiy #include <linux/random.h>
26801c135cSArtem B. Bityutskiy 
27801c135cSArtem B. Bityutskiy #define ubi_assert(expr)  BUG_ON(!(expr))
28801c135cSArtem B. Bityutskiy #define dbg_err(fmt, ...) ubi_err(fmt, ##__VA_ARGS__)
29801c135cSArtem B. Bityutskiy #else
30801c135cSArtem B. Bityutskiy #define ubi_assert(expr)  ({})
31801c135cSArtem B. Bityutskiy #define dbg_err(fmt, ...) ({})
32801c135cSArtem B. Bityutskiy #endif
33801c135cSArtem B. Bityutskiy 
34801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG_DISABLE_BGT
35801c135cSArtem B. Bityutskiy #define DBG_DISABLE_BGT 1
36801c135cSArtem B. Bityutskiy #else
37801c135cSArtem B. Bityutskiy #define DBG_DISABLE_BGT 0
38801c135cSArtem B. Bityutskiy #endif
39801c135cSArtem B. Bityutskiy 
40801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG_MSG
41801c135cSArtem B. Bityutskiy /* Generic debugging message */
42801c135cSArtem B. Bityutskiy #define dbg_msg(fmt, ...)                                    \
43d19bafd9SArtem Bityutskiy 	printk(KERN_DEBUG "UBI DBG (pid %d): %s: " fmt "\n", \
44d19bafd9SArtem Bityutskiy 	       current->pid, __FUNCTION__, ##__VA_ARGS__)
45801c135cSArtem B. Bityutskiy 
46801c135cSArtem B. Bityutskiy #define ubi_dbg_dump_stack() dump_stack()
47801c135cSArtem B. Bityutskiy 
48801c135cSArtem B. Bityutskiy struct ubi_ec_hdr;
49801c135cSArtem B. Bityutskiy struct ubi_vid_hdr;
50801c135cSArtem B. Bityutskiy struct ubi_volume;
51801c135cSArtem B. Bityutskiy struct ubi_vtbl_record;
52801c135cSArtem B. Bityutskiy struct ubi_scan_volume;
53801c135cSArtem B. Bityutskiy struct ubi_scan_leb;
54801c135cSArtem B. Bityutskiy struct ubi_mkvol_req;
55801c135cSArtem B. Bityutskiy 
56801c135cSArtem B. Bityutskiy void ubi_dbg_dump_ec_hdr(const struct ubi_ec_hdr *ec_hdr);
57801c135cSArtem B. Bityutskiy void ubi_dbg_dump_vid_hdr(const struct ubi_vid_hdr *vid_hdr);
58801c135cSArtem B. Bityutskiy void ubi_dbg_dump_vol_info(const struct ubi_volume *vol);
59801c135cSArtem B. Bityutskiy void ubi_dbg_dump_vtbl_record(const struct ubi_vtbl_record *r, int idx);
60801c135cSArtem B. Bityutskiy void ubi_dbg_dump_sv(const struct ubi_scan_volume *sv);
61801c135cSArtem B. Bityutskiy void ubi_dbg_dump_seb(const struct ubi_scan_leb *seb, int type);
62801c135cSArtem B. Bityutskiy void ubi_dbg_dump_mkvol_req(const struct ubi_mkvol_req *req);
63801c135cSArtem B. Bityutskiy 
64801c135cSArtem B. Bityutskiy #else
65801c135cSArtem B. Bityutskiy 
66801c135cSArtem B. Bityutskiy #define dbg_msg(fmt, ...)    ({})
67801c135cSArtem B. Bityutskiy #define ubi_dbg_dump_stack() ({})
68801c135cSArtem B. Bityutskiy #define ubi_dbg_dump_ec_hdr(ec_hdr)      ({})
69801c135cSArtem B. Bityutskiy #define ubi_dbg_dump_vid_hdr(vid_hdr)    ({})
70801c135cSArtem B. Bityutskiy #define ubi_dbg_dump_vol_info(vol)       ({})
71801c135cSArtem B. Bityutskiy #define ubi_dbg_dump_vtbl_record(r, idx) ({})
72801c135cSArtem B. Bityutskiy #define ubi_dbg_dump_sv(sv)              ({})
73801c135cSArtem B. Bityutskiy #define ubi_dbg_dump_seb(seb, type)      ({})
74801c135cSArtem B. Bityutskiy #define ubi_dbg_dump_mkvol_req(req)      ({})
75801c135cSArtem B. Bityutskiy 
76801c135cSArtem B. Bityutskiy #endif /* CONFIG_MTD_UBI_DEBUG_MSG */
77801c135cSArtem B. Bityutskiy 
78801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG_MSG_EBA
79801c135cSArtem B. Bityutskiy /* Messages from the eraseblock association unit */
80d19bafd9SArtem Bityutskiy #define dbg_eba(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
81801c135cSArtem B. Bityutskiy #else
82801c135cSArtem B. Bityutskiy #define dbg_eba(fmt, ...) ({})
83801c135cSArtem B. Bityutskiy #endif
84801c135cSArtem B. Bityutskiy 
85801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG_MSG_WL
86801c135cSArtem B. Bityutskiy /* Messages from the wear-leveling unit */
87d19bafd9SArtem Bityutskiy #define dbg_wl(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
88801c135cSArtem B. Bityutskiy #else
89801c135cSArtem B. Bityutskiy #define dbg_wl(fmt, ...) ({})
90801c135cSArtem B. Bityutskiy #endif
91801c135cSArtem B. Bityutskiy 
92801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG_MSG_IO
93801c135cSArtem B. Bityutskiy /* Messages from the input/output unit */
94d19bafd9SArtem Bityutskiy #define dbg_io(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
95801c135cSArtem B. Bityutskiy #else
96801c135cSArtem B. Bityutskiy #define dbg_io(fmt, ...) ({})
97801c135cSArtem B. Bityutskiy #endif
98801c135cSArtem B. Bityutskiy 
99801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG_MSG_BLD
100801c135cSArtem B. Bityutskiy /* Initialization and build messages */
101d19bafd9SArtem Bityutskiy #define dbg_bld(fmt, ...) dbg_msg(fmt, ##__VA_ARGS__)
102801c135cSArtem B. Bityutskiy #else
103801c135cSArtem B. Bityutskiy #define dbg_bld(fmt, ...) ({})
104801c135cSArtem B. Bityutskiy #endif
105801c135cSArtem B. Bityutskiy 
106801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_BITFLIPS
107801c135cSArtem B. Bityutskiy /**
108801c135cSArtem B. Bityutskiy  * ubi_dbg_is_bitflip - if it is time to emulate a bit-flip.
109801c135cSArtem B. Bityutskiy  *
110801c135cSArtem B. Bityutskiy  * Returns non-zero if a bit-flip should be emulated, otherwise returns zero.
111801c135cSArtem B. Bityutskiy  */
112801c135cSArtem B. Bityutskiy static inline int ubi_dbg_is_bitflip(void)
113801c135cSArtem B. Bityutskiy {
114801c135cSArtem B. Bityutskiy 	return !(random32() % 200);
115801c135cSArtem B. Bityutskiy }
116801c135cSArtem B. Bityutskiy #else
117801c135cSArtem B. Bityutskiy #define ubi_dbg_is_bitflip() 0
118801c135cSArtem B. Bityutskiy #endif
119801c135cSArtem B. Bityutskiy 
120801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_WRITE_FAILURES
121801c135cSArtem B. Bityutskiy /**
122801c135cSArtem B. Bityutskiy  * ubi_dbg_is_write_failure - if it is time to emulate a write failure.
123801c135cSArtem B. Bityutskiy  *
124801c135cSArtem B. Bityutskiy  * Returns non-zero if a write failure should be emulated, otherwise returns
125801c135cSArtem B. Bityutskiy  * zero.
126801c135cSArtem B. Bityutskiy  */
127801c135cSArtem B. Bityutskiy static inline int ubi_dbg_is_write_failure(void)
128801c135cSArtem B. Bityutskiy {
129801c135cSArtem B. Bityutskiy 	return !(random32() % 500);
130801c135cSArtem B. Bityutskiy }
131801c135cSArtem B. Bityutskiy #else
132801c135cSArtem B. Bityutskiy #define ubi_dbg_is_write_failure() 0
133801c135cSArtem B. Bityutskiy #endif
134801c135cSArtem B. Bityutskiy 
135801c135cSArtem B. Bityutskiy #ifdef CONFIG_MTD_UBI_DEBUG_EMULATE_ERASE_FAILURES
136801c135cSArtem B. Bityutskiy /**
137801c135cSArtem B. Bityutskiy  * ubi_dbg_is_erase_failure - if its time to emulate an erase failure.
138801c135cSArtem B. Bityutskiy  *
139801c135cSArtem B. Bityutskiy  * Returns non-zero if an erase failure should be emulated, otherwise returns
140801c135cSArtem B. Bityutskiy  * zero.
141801c135cSArtem B. Bityutskiy  */
142801c135cSArtem B. Bityutskiy static inline int ubi_dbg_is_erase_failure(void)
143801c135cSArtem B. Bityutskiy {
144801c135cSArtem B. Bityutskiy 		return !(random32() % 400);
145801c135cSArtem B. Bityutskiy }
146801c135cSArtem B. Bityutskiy #else
147801c135cSArtem B. Bityutskiy #define ubi_dbg_is_erase_failure() 0
148801c135cSArtem B. Bityutskiy #endif
149801c135cSArtem B. Bityutskiy 
150801c135cSArtem B. Bityutskiy #endif /* !__UBI_DEBUG_H__ */
151