1 /* 2 * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 * Description: diag print log 15 */ 16 17 #ifndef SOC_DIAG_LOG_H 18 #define SOC_DIAG_LOG_H 19 20 #include "soc_diag_wdk.h" 21 #include "diag_oam_log.h" 22 #include "log_def.h" 23 #include "log_module_id.h" 24 25 #ifdef __cplusplus 26 #if __cplusplus 27 extern "C" { 28 #endif 29 #endif 30 31 #define DIAG_LOG_LEVEL_ALERT 0 32 #define DIAG_LOG_LEVEL_FATAL 1 33 #define DIAG_LOG_LEVEL_ERROR 2 34 #define DIAG_LOG_LEVEL_WARN 3 35 #define DIAG_LOG_LEVEL_NOTICE 4 36 #define DIAG_LOG_LEVEL_INFO 5 37 #define DIAG_LOG_LEVEL_DBG 6 38 #define DIAG_LOG_LEVEL_TRACE 7 39 40 #ifndef CORE_ID 41 #define CORE_ID 0 42 #endif 43 44 #ifndef THIS_MOD_ID 45 #define THIS_MOD_ID 0 46 #endif 47 48 #if defined(HAVE_PCLINT_CHECK) 49 #define check_default_id(id) (id) 50 #else 51 #define check_default_id(id) (((id) == 0) ? __LINE__ : (id)) 52 #endif 53 54 #define var_args_max_12(a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, ...) a12 55 #define var_args_cnt(unused, args...) var_args_max_12(unused, ##args, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) 56 57 /** msg_id: 58 * |-------------------------------------------------------------------------------------------------------| 59 * |-H--------------------------------------------- 32 bit ----------------------------------------------L-| 60 * | 1 bit(31) | 4 bits(30 ~ 27) | 10 bits(26 ~ 17) | 14 bits(16 ~ 3) | 3 bits(2 ~ 0)| 61 * | log_flg | mod_id | file_id | line No. | level | 62 * |-------------------------------------------------------------------------------------------------------| 63 */ 64 #define diag_log_msg_mk_id_e(id) (((uint32_t)(1UL << 31)) + (((uint32_t)(THIS_MOD_ID << 27)) & 0x78000000) \ 65 + (((uint32_t)(THIS_FILE_ID << 17)) & 0x7fe0000) + ((((uint32_t)(check_default_id(id))) << 3) & 0x1fff8) \ 66 + (DIAG_LOG_LEVEL_ERROR & 0x7)) 67 68 #define diag_log_msg_mk_id_w(id) (((uint32_t)(1UL << 31)) + (((uint32_t)(THIS_MOD_ID << 27)) & 0x78000000) \ 69 + (((uint32_t)(THIS_FILE_ID << 17)) & 0x7fe0000) + ((((uint32_t)(check_default_id(id))) << 3) & 0x1fff8) \ 70 + (DIAG_LOG_LEVEL_WARN & 0x7)) 71 72 #define diag_log_msg_mk_id_i(id) (((uint32_t)(1UL << 31)) + (((uint32_t)(THIS_MOD_ID << 27)) & 0x78000000) \ 73 + (((uint32_t)(THIS_FILE_ID << 17)) & 0x7fe0000) + ((((uint32_t)(check_default_id(id))) << 3) & 0x1fff8) \ 74 + (DIAG_LOG_LEVEL_INFO & 0x7)) 75 76 #define diag_log_msg_mk_id_d(id) (((uint32_t)(1UL << 31)) + (((uint32_t)(THIS_MOD_ID << 27)) & 0x78000000) \ 77 + (((uint32_t)(THIS_FILE_ID << 17)) & 0x7fe0000) + ((((uint32_t)(check_default_id(id))) << 3) & 0x1fff8) \ 78 + (DIAG_LOG_LEVEL_DBG & 0x7)) 79 80 #define check_default_mod_id(id) (((id) == 0) ? THIS_MOD_ID : (id)) 81 #define diag_log_msg_mk_mod_id(src_mod) ((uint32_t)(((uint32_t)(check_default_mod_id(src_mod))) | \ 82 ((uint32_t)(CORE_ID)) << 24)) 83 84 #if (defined(DIAG_PRINT_TO_SHELL)) 85 #define diag_io_print(fmt, arg...) printf("[%s:%d] "fmt"\r\n", __func__, __LINE__, ##arg) 86 #else 87 #define diag_io_print(fmt, arg...) 88 #endif 89 90 #ifndef DIAG_PRINT_TO_SHELL 91 #define uapi_diag_error_log0(id, fmt) \ 92 oam_log_print0_press(diag_log_msg_mk_id_e(id)) 93 #define uapi_diag_error_log1(id, fmt, p1) \ 94 oam_log_print1_press(diag_log_msg_mk_id_e(id), p1) 95 #define uapi_diag_error_log2(id, fmt, p1, p2) \ 96 oam_log_print2_press(diag_log_msg_mk_id_e(id), p1, p2) 97 #define uapi_diag_error_log3(id, fmt, p1, p2, p3) \ 98 do { \ 99 zdiag_log_msg3_t log_msg = {p1, p2, p3}; \ 100 oam_log_print3_press(diag_log_msg_mk_id_e(id), &log_msg); \ 101 } while (0) 102 #define uapi_diag_error_log4(id, fmt, p1, p2, p3, p4) \ 103 do { \ 104 zdiag_log_msg4_t log_msg = {p1, p2, p3, p4}; \ 105 oam_log_print4_press(diag_log_msg_mk_id_e(id), &log_msg); \ 106 } while (0) 107 #define uapi_diag_error_logx(id, fmt, args...) \ 108 do { \ 109 oam_log_print_alterable_press(diag_log_msg_mk_id_e(id), \ 110 var_args_cnt(unused, ##args), ##args); \ 111 } while (0) 112 #define uapi_diag_error_log_buff(id, log_info, data_size, fmt, type) \ 113 oam_log_print_buff_press(diag_log_msg_mk_id_e(id), log_info, data_size) 114 115 #define uapi_diag_warning_log0(id, fmt) \ 116 oam_log_print0_press(diag_log_msg_mk_id_w(id)) 117 #define uapi_diag_warning_log1(id, fmt, p1) \ 118 oam_log_print1_press(diag_log_msg_mk_id_w(id), p1) 119 #define uapi_diag_warning_log2(id, fmt, p1, p2) \ 120 oam_log_print2_press(diag_log_msg_mk_id_w(id), p1, p2) 121 #define uapi_diag_warning_log3(id, fmt, p1, p2, p3) \ 122 do { \ 123 zdiag_log_msg3_t log_msg = {p1, p2, p3}; \ 124 oam_log_print3_press(diag_log_msg_mk_id_w(id), &log_msg); \ 125 } while (0) 126 #define uapi_diag_warning_log4(id, fmt, p1, p2, p3, p4) \ 127 do { \ 128 zdiag_log_msg4_t log_msg = {p1, p2, p3, p4}; \ 129 oam_log_print4_press(diag_log_msg_mk_id_w(id), &log_msg); \ 130 } while (0) 131 #define uapi_diag_warning_logx(id, fmt, args...) \ 132 do { \ 133 oam_log_print_alterable_press(diag_log_msg_mk_id_w(id), \ 134 var_args_cnt(unused, ##args), ##args); \ 135 } while (0) 136 #define uapi_diag_warning_log_buff(id, log_info, data_size, fmt, type) \ 137 oam_log_print_buff_press(diag_log_msg_mk_id_w(id), log_info, data_size) 138 139 #define uapi_diag_info_log0(id, fmt) \ 140 oam_log_print0_press(diag_log_msg_mk_id_i(id)) 141 #define uapi_diag_info_log1(id, fmt, p1) \ 142 oam_log_print1_press(diag_log_msg_mk_id_i(id), (uint32_t)(p1)) 143 #define uapi_diag_info_log2(id, fmt, p1, p2) \ 144 oam_log_print2_press(diag_log_msg_mk_id_i(id), (uint32_t)(p1), (uint32_t)(p2)) 145 #define uapi_diag_info_log3(id, fmt, p1, p2, p3) \ 146 do { \ 147 zdiag_log_msg3_t log_msg = {(uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3)}; \ 148 oam_log_print3_press(diag_log_msg_mk_id_i(id), &log_msg); \ 149 } while (0) 150 #define uapi_diag_info_log4(id, fmt, p1, p2, p3, p4) \ 151 do { \ 152 zdiag_log_msg4_t log_msg = {(uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4)}; \ 153 oam_log_print4_press(diag_log_msg_mk_id_i(id), &log_msg); \ 154 } while (0) 155 #define uapi_diag_info_logx(id, fmt, args...) \ 156 do { \ 157 oam_log_print_alterable_press(diag_log_msg_mk_id_i(id), \ 158 var_args_cnt(unused, ##args), ##args); \ 159 } while (0) 160 #define uapi_diag_info_log_buff(id, log_info, data_size, fmt, type) \ 161 oam_log_print_buff_press(diag_log_msg_mk_id_i(id), log_info, data_size) 162 163 #define uapi_diag_debug_log0(id, fmt) \ 164 oam_log_print0_press(diag_log_msg_mk_id_d(id)) 165 #define uapi_diag_debug_log1(id, fmt, p1) \ 166 oam_log_print1_press(diag_log_msg_mk_id_d(id), p1) 167 #define uapi_diag_debug_log2(id, fmt, p1, p2) \ 168 oam_log_print2_press(diag_log_msg_mk_id_d(id), p1, p2) 169 #define uapi_diag_debug_log3(id, fmt, p1, p2, p3) \ 170 do { \ 171 zdiag_log_msg3_t log_msg = {p1, p2, p3}; \ 172 oam_log_print3_press(diag_log_msg_mk_id_i(id), &log_msg); \ 173 } while (0) 174 #define uapi_diag_debug_log4(id, fmt, p1, p2, p3, p4) \ 175 do { \ 176 zdiag_log_msg4_t log_msg = {p1, p2, p3, p4}; \ 177 oam_log_print4_press(diag_log_msg_mk_id_d(id), &log_msg); \ 178 } while (0) 179 #define uapi_diag_debug_logx(id, fmt, args...) \ 180 do { \ 181 oam_log_print_alterable_press(diag_log_msg_mk_id_d(id), \ 182 var_args_cnt(unused, ##args), ##args); \ 183 } while (0) 184 #define uapi_diag_debug_log_buff(id, log_info, data_size, fmt, type) \ 185 oam_log_print_buff_press(diag_log_msg_mk_id_d(id), log_info, data_size) 186 187 #else /* DIAG_PRINT */ 188 189 #define uapi_diag_error_log0(id, fmt) diag_io_print("[ERROR]"fmt"\r\n") 190 #define uapi_diag_error_log1(id, fmt, p1) diag_io_print("[ERROR]"fmt" %d\r\n", p1) 191 #define uapi_diag_error_log2(id, fmt, p1, p2) diag_io_print("[ERROR]"fmt" %d %d\r\n", p1, p2) 192 #define uapi_diag_error_log3(id, fmt, p1, p2, p3) diag_io_print("[ERROR]"fmt" %d %d %d\r\n", p1, p2, p3) 193 #define uapi_diag_error_log4(id, fmt, p1, p2, p3, p4) diag_io_print("[ERROR]"fmt" %d %d %d %d\r\n", p1, p2, p3, p4) 194 #define uapi_diag_error_logx(id, fmt, args...) diag_io_print(fmt, ##args) 195 #define uapi_diag_error_log_buff(id, log_info, data_size, fmt, type) 196 197 #define uapi_diag_warning_log0(id, fmt) diag_io_print("[WARNING]"fmt"\r\n") 198 #define uapi_diag_warning_log1(id, fmt, p1) diag_io_print("[WARNING]"fmt" %d\r\n", p1) 199 #define uapi_diag_warning_log2(id, fmt, p1, p2) diag_io_print("[WARNING]"fmt" %d %d\r\n", p1, p2) 200 #define uapi_diag_warning_log3(id, fmt, p1, p2, p3) diag_io_print("[WARNING]"fmt" %d %d %d\r\n", p1, p2, p3) 201 #define uapi_diag_warning_log4(id, fmt, p1, p2, p3, p4) diag_io_print("[WARNING]"fmt" %d %d %d %d\r\n", p1, p2, p3, p4) 202 #define uapi_diag_warning_logx(id, fmt, args...) diag_io_print(fmt, ##args) 203 #define uapi_diag_warning_log_buff(id, log_info, data_size, fmt, type) 204 205 #define uapi_diag_info_log0(id, fmt) diag_io_print("[INFO]"fmt"\r\n") 206 #define uapi_diag_info_log1(id, fmt, p1) diag_io_print("[INFO]"fmt" %d\r\n", p1) 207 #define uapi_diag_info_log2(id, fmt, p1, p2) diag_io_print("[INFO]"fmt" %d %d\r\n", p1, p2) 208 #define uapi_diag_info_log3(id, fmt, p1, p2, p3) diag_io_print("[INFO]"fmt" %d %d %d\r\n", p1, p2, p3) 209 #define uapi_diag_info_log4(id, fmt, p1, p2, p3, p4) diag_io_print("[INFO]"fmt" %d %d %d %d\r\n", p1, p2, p3, p4) 210 #define uapi_diag_info_logx(id, fmt, args...) diag_io_print(fmt, ##args) 211 #define uapi_diag_info_log_buff(id, log_info, data_size, fmt, type) 212 213 #define uapi_diag_debug_log0(id, fmt) diag_io_print("[INFO]"fmt"\r\n") 214 #define uapi_diag_debug_log1(id, fmt, p1) diag_io_print("[INFO]"fmt" %d\r\n", p1) 215 #define uapi_diag_debug_log2(id, fmt, p1, p2) diag_io_print("[INFO]"fmt" %d %d\r\n", p1, p2) 216 #define uapi_diag_debug_log3(id, fmt, p1, p2, p3) diag_io_print("[INFO]"fmt" %d %d %d\r\n", p1, p2, p3) 217 #define uapi_diag_debug_log4(id, fmt, p1, p2, p3, p4) diag_io_print("[INFO]"fmt" %d %d %d %d\r\n", p1, p2, p3, p4) 218 #define uapi_diag_debug_logx(id, fmt, args...) diag_io_print(fmt, ##args) 219 #define uapi_diag_debug_log_buff(id, log_info, data_size, fmt, type) 220 221 #endif /* end DIAG_PRINT */ 222 223 #ifdef __cplusplus 224 #if __cplusplus 225 } 226 #endif 227 #endif 228 229 #endif /* SOC_DIAG_LOG_H */ 230