1 /*
2  * SPDX-License-Identifier: BSD-3-Clause
3  * SPDX-FileCopyrightText: Copyright TF-RMM Contributors.
4  */
5 
6 #ifndef RSI_LOGGER_H
7 #define RSI_LOGGER_H
8 
9 #include <debug.h>
10 
11 /*
12  * RSI_LOG_LEVEL debug level is set to one of:
13  * LOG_LEVEL_NONE    = 0
14  * LOG_LEVEL_ERROR   = 10
15  * LOG_LEVEL_NOTICE  = 20
16  * LOG_LEVEL_WARNING = 30
17  * LOG_LEVEL_INFO    = 40
18  * LOG_LEVEL_VERBOSE = 50
19  */
20 #if (RSI_LOG_LEVEL > LOG_LEVEL_NONE) && (RSI_LOG_LEVEL <= LOG_LEVEL)
21 
22 void rsi_log_on_exit(unsigned int function_id, unsigned long args[],
23 		     unsigned long regs[], bool ret_to_rec);
24 
25 /*
26  * Store SMC RSI parameters. Takes an array of regs[] of size
27  * of at least 11 elements and sets up the args for RSI log.
28  */
29 # define RSI_LOG_SET(regs)	\
30 	unsigned long rsi_log_args[] = {			\
31 		(regs)[1], (regs)[2], (regs)[3], (regs)[4], (regs)[5],	\
32 		(regs)[6], (regs)[7], (regs)[8], (regs)[9], (regs)[10]	\
33 	}
34 
35 /*
36  * Macro prints RSI call function name and its parameters, result values are
37  * printed when 'rec_to_ret' is set to true.
38  */
39 # define RSI_LOG_EXIT(id, res, rec_to_ret)	rsi_log_on_exit(id, rsi_log_args, res, rec_to_ret)
40 
41 #else
42 # define RSI_LOG_SET(regs)
43 # define RSI_LOG_EXIT(id, res, rec_to_ret)
44 
45 #endif /* (> LOG_LEVEL_NONE) && (<= LOG_LEVEL) */
46 #endif /* RSI_LOGGER_H */
47