• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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:  log OAM logger producer interface
15  * Author:
16  * Create:
17  */
18 
19 #ifndef LOG_OAM_LOGGER_H
20 #define LOG_OAM_LOGGER_H
21 
22 #include "log_types.h"
23 #include "log_trigger.h"
24 #include "log_module_id.h"
25 #include "log_printf.h"
26 
27 #define OM_FRAME_DELIMITER              (0x7E)
28 #define OM_FRAME_DELIMITER_LEN          (1)
29 #define OM_FRAME_HEADER_LEN             (8)
30 #define OM_LOG_SEND_MSG_LENGTH          (29)
31 #define OM_LOG_HEAD_PRESS_MASK          (0xFF)
32 #define OM_MSG_TYPE_LOG_OFFSET          (8)
33 #define OM_LOG_RPT_IND_MODULE_ID_OFFSET (16)
34 #define OM_LOG_SN_OFFSET                (16)
35 
36 #define OM_FRAME_DUMP_DELIMITER         (0x1)
37 
38 #define OML_LOG_FILEID_HIGH_BIT_OFFSET (2)
39 #define OML_LOG_FILEID_LOW_BIT_MASK    (0x3)
40 #define OML_LOG_LINENO_HIGH_BIT_OFFSET (8)
41 #define OML_LOG_LINENO_LOW_BIT_MASK    (0xFF)
42 #define OML_LOG_MODULE_MASK            (0x3F)
43 #define OML_LOG_LEVEL_MASK             (0x3)
44 #define OML_LOG_PARA_MAX_NUM           (4)
45 #define OML_LOG_ALTER_PARA_MAX_NUM     (12)
46 #define OML_LOG_HEADER_ARRAY_LENTH     (3)
47 #define OML_LOG_LEVEL_OFFSET           (6)
48 #define OML_LOG_TAIL_LENTH             (1)
49 #define OML_LOG_ZERO_ARG_SEND          (0)
50 #define OML_LOG_ONE_ARG_SEND           (1)
51 #define OML_LOG_TWO_ARG_SEND           (2)
52 #define OML_LOG_THREE_ARG_SEND         (3)
53 #define OML_LOG_FOUR_ARG_SEND          (4)
54 #define OML_LOG_INT_2_DOUBLE           (2)
55 #define OML_LOG_INT_BIT                (32)
56 
57 #define OML_DATA_MSG_TYPE     (0x0E)
58 #define OML_MSG_HEADER_LENGTH (4)
59 #define OML_MSG_TAIL_LENGTH   (1)
60 
61 #define FEATURE_PF_PM               (0x00000001)
62 #define FEATURE_PF_PMU_ERR_CHECK    (0x00000002)
63 #define FEATURE_PF_STATUS           (0x00000004)
64 #define FEATURE_PF_LOG_TEST_LOW_POW (0x00000008)
65 #define FEATURE_PF_BFGNUART_USE_DMA (0x00000010)
66 #define FEATURE_PF_RESTRACE         (0x00000020)
67 #define FEATURE_PF_HEARTBEAT        (0x00000040)
68 
69 #if (USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG == NO)
70 #ifndef CONFIG_LOG_USE_DIAG_FRAME
71 #define getlog_level(ulPressPara) (((ulPressPara) >> OML_LOG_LEVEL_OFFSET) & OML_LOG_LEVEL_MASK)
72 #define get_module_id(ulPressPara) ((ulPressPara) & OML_LOG_MODULE_MASK)
73 
74 #define log_head_press(log_mid) ((OM_FRAME_DELIMITER & OM_LOG_HEAD_PRESS_MASK) |  \
75                                  ((OM_MSG_TYPE_LOG & OM_LOG_HEAD_PRESS_MASK) << OM_MSG_TYPE_LOG_OFFSET) |  \
76                                  ((OM_LOG_RPT_IND & OM_LOG_HEAD_PRESS_MASK) << OM_LOG_RPT_IND_MODULE_ID_OFFSET) |  \
77                                  (((log_mid) & OM_LOG_HEAD_PRESS_MASK) << OM_LOG_RPT_IND_MODULE_ID_OFFSET))
78 /**
79  * @brief  Fill this 32 bit value as little ending format
80  * Last by will be send as the first byte by log system.
81  * |-------------------------------------------------------------------------------------------------------|
82  * |-H--------------------------------------------- 32 bit ----------------------------------------------L-|
83  * |      8 bit       |                 8 bit                 |       8 bit        |         8 bit         |
84  * | lineno low 8 bit | lineno high 6 bit + file_id low 2 bit | file_id high 8 bit | lev 2 bit + mid 6 bit |
85  * |-------------------------------------------------------------------------------------------------------|
86  */
87 #define para_press(mid, lev, fileid, lineno) (((uint32_t)(((uint32_t)(lineno) & 0xFF) << 0x18)) |  \
88                                               ((uint32_t)((((uint32_t)(fileid) & 0x3) << 0x10) |   \
89                                               ((uint32_t)(lineno) & 0x3F00) << 0xA))  |          \
90                                               ((uint32_t)(((uint32_t)(fileid) & 0x3FC) << 0x6)) |  \
91                                               ((uint32_t)(((mid) & 0x3F) | (((lev) & 0x3) << 0x6))))
92 
93 #define oal_log_lenth(arg_num)              (sizeof(om_log_header_t) + sizeof(uint32_t) * (arg_num) + sizeof(uint8_t))
94 #define log_lenth_and_sn_press(arg_num, SN) (oal_log_lenth(arg_num) | ((uint32_t)(SN) << OM_LOG_SN_OFFSET))
95 #else
96 #include "soc_diag_log.h"
97 #include "diag_common.h"
98 
99 #define getlog_level(ulPressPara) ((ulPressPara) & OAM_LOG_LEVEL_MASK)
100 #define get_module_id(ulPressPara) (((ulPressPara) >> OAM_LOG_MOD_ID_OFFSET) & OAM_LOG_MOD_ID_MASK)
101 
102 #define log_head_press(log_mid) diag_log_msg_mk_mod_id(0)
103 #define para_press(mid, lev, fileid, lineno) diag_log_msg_mk_id(mid, fileid, lineno, lev)
104 #define oal_log_lenth(arg_num) (DIAG_FRAME_HEADER_SIZE + DIAG_IND_HEADER_SIZE + DIAG_LOG_HEADER_SIZE + \
105                                 sizeof(uint32_t) * (arg_num) + sizeof(uint8_t))
106 
107 #define sdt_to_diag_log_level(sdt_level) ((sdt_level) == LOG_LEVEL_NONE ? DIAG_LOG_LEVEL_ALERT : \
108                                          ((sdt_level) == LOG_LEVEL_ERROR ? DIAG_LOG_LEVEL_ERROR : \
109                                          ((sdt_level) == LOG_LEVEL_WARNING ? DIAG_LOG_LEVEL_WARN : \
110                                          ((sdt_level) == LOG_LEVEL_INFO ? DIAG_LOG_LEVEL_INFO : \
111                                          ((sdt_level) == LOG_LEVEL_DBG ? DIAG_LOG_LEVEL_DBG : \
112                                          (LOG_LEVEL_NONE))))))
113 #endif
114 
115 #define oml_wifi_log_print0(mid, lvl, fmt) \
116     log_event_wifi_print0(para_press(LOG_WIFIMODULE, lvl, THIS_FILE_ID, __LINE__))
117 #define oml_wifi_log_print1(mid, lvl, fmt, p1) \
118     log_event_wifi_print1(para_press(LOG_WIFIMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1))
119 #define oml_wifi_log_print2(mid, lvl, fmt, p1, p2) \
120     log_event_wifi_print2(para_press(LOG_WIFIMODULE, lvl, THIS_FILE_ID, __LINE__), \
121                           (uint32_t)(p1), (uint32_t)(p2))
122 #define oml_wifi_log_print3(mid, lvl, fmt, p1, p2, p3) \
123     log_event_wifi_print3(para_press(LOG_WIFIMODULE, lvl, THIS_FILE_ID, __LINE__), \
124                           (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3))
125 #define oml_wifi_log_print4(mid, lvl, fmt, p1, p2, p3, p4) \
126     log_event_wifi_print4(para_press(LOG_WIFIMODULE, lvl, THIS_FILE_ID, __LINE__), \
127                           (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4))
128 #define oml_wifi_log_alter(mid, lognum, lvl, fmt, num, arg...) \
129     log_event_print_alterable_para_press(log_head_press(OM_WIFI), \
130                                          para_press(LOG_WIFIMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
131 
132 #ifdef BT_USER_RELEASE
133 #define oml_bt_log_print0(mid, lvl, fmt) \
134     do { compress_printf_nolog(0); \
135     } while (0)
136 #define oml_bt_log_print1(mid, lvl, fmt, p1) \
137     do { compress_printf_nolog(0, (uint32_t)(p1)); \
138     } while (0)
139 #define oml_bt_log_print2(mid, lvl, fmt, p1, p2) \
140     do { compress_printf_nolog(0, (uint32_t)(p1), (uint32_t)(p2)); \
141     } while (0)
142 #define oml_bt_log_print3(mid, lvl, fmt, p1, p2, p3) \
143     do { compress_printf_nolog(0, (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3)); \
144     } while (0)
145 #define oml_bt_log_print4(mid, lvl, fmt, p1, p2, p3, p4) \
146     do { compress_printf_nolog(0, (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4)); \
147     } while (0)
148 #define oml_bt_log_alter(mid, lognum, lvl, fmt, num, arg...) \
149     do { compress_printf_nolog(0, ##arg); \
150     } while (0)
151 
152 #define oml_bth_log_print0(mid, lvl, fmt) \
153     do { compress_printf_nolog(0); \
154     } while (0)
155 #define oml_bth_log_print1(mid, lvl, fmt, p1) \
156     do { compress_printf_nolog(0, (uint32_t)(p1)); \
157     } while (0)
158 #define oml_bth_log_print2(mid, lvl, fmt, p1, p2) \
159     do { compress_printf_nolog(0, (uint32_t)(p1), (uint32_t)(p2)); \
160     } while (0)
161 #define oml_bth_log_print3(mid, lvl, fmt, p1, p2, p3) \
162     do { compress_printf_nolog(0, (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3)); \
163     } while (0)
164 #define oml_bth_log_print4(mid, lvl, fmt, p1, p2, p3, p4) \
165     do { compress_printf_nolog(0, (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4)); \
166     } while (0)
167 #define oml_bth_log_print5(mid, lvl, fmt, num, arg...) \
168     do { compress_printf_nolog(0, ##arg); \
169     } while (0)
170 #define oml_bth_log_print6(mid, lvl, fmt, num, arg...) \
171     do { compress_printf_nolog(0, ##arg); \
172     } while (0)
173 #define oml_bth_log_alter(mid, lognum, lvl, fmt, num, arg...) \
174     do { compress_printf_nolog(0, ##arg); \
175     } while (0)
176 #else
177 #define oml_bt_log_print0(mid, lvl, fmt) \
178     log_event_print0(log_head_press(OM_BT), para_press(LOG_BTMODULE, lvl, THIS_FILE_ID, __LINE__))
179 #define oml_bt_log_print1(mid, lvl, fmt, p1) \
180     log_event_print1(log_head_press(OM_BT), para_press(LOG_BTMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1))
181 #define oml_bt_log_print2(mid, lvl, fmt, p1, p2) \
182     log_event_print2(log_head_press(OM_BT), para_press(LOG_BTMODULE, lvl, THIS_FILE_ID, __LINE__), \
183                      (uint32_t)(p1), (uint32_t)(p2))
184 #define oml_bt_log_print3(mid, lvl, fmt, p1, p2, p3) \
185     log_event_print3(log_head_press(OM_BT), para_press(LOG_BTMODULE, lvl, THIS_FILE_ID, __LINE__), \
186                      (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3))
187 #define oml_bt_log_print4(mid, lvl, fmt, p1, p2, p3, p4) \
188     log_event_print4(log_head_press(OM_BT), para_press(LOG_BTMODULE, lvl, THIS_FILE_ID, __LINE__), \
189                     (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4))
190 #define oml_bt_log_alter(mid, lognum, lvl, fmt, num, arg...) \
191     log_event_print_alterable_para_press(log_head_press(OM_BT), \
192                                          para_press(LOG_BTMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
193 
194 #define oml_bth_log_print0(mid, lvl, fmt) \
195     log_event_print0(log_head_press(OM_BTH), para_press(LOG_BTHMODULE, lvl, THIS_FILE_ID, __LINE__))
196 #define oml_bth_log_print1(mid, lvl, fmt, p1) \
197     log_event_print1(log_head_press(OM_BTH), para_press(LOG_BTHMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1))
198 #define oml_bth_log_print2(mid, lvl, fmt, p1, p2) \
199     log_event_print2(log_head_press(OM_BTH), para_press(LOG_BTHMODULE, lvl, THIS_FILE_ID, __LINE__), \
200                      (uint32_t)(p1), (uint32_t)(p2))
201 #define oml_bth_log_print3(mid, lvl, fmt, p1, p2, p3) \
202     log_event_print3(log_head_press(OM_BTH), para_press(LOG_BTHMODULE, lvl, THIS_FILE_ID, __LINE__), \
203                      (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3))
204 #define oml_bth_log_print4(mid, lvl, fmt, p1, p2, p3, p4) \
205     log_event_print4(log_head_press(OM_BTH), para_press(LOG_BTHMODULE, lvl, THIS_FILE_ID, __LINE__), \
206                     (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4))
207 #define oml_bth_log_print5(mid, lvl, fmt, num, arg...) \
208     log_event_print_alterable_para_press(log_head_press(OM_BTH), \
209                                          para_press(LOG_BTHMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
210 #define oml_bth_log_print6(mid, lvl, fmt, num, arg...) \
211     log_event_print_alterable_para_press(log_head_press(OM_BTH), \
212                                          para_press(LOG_BTHMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
213 #define oml_bth_log_alter(mid, lognum, lvl, fmt, num, arg...) \
214     log_event_print_alterable_para_press(log_head_press(OM_BTH), \
215                                          para_press(LOG_BTHMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
216 #endif
217 
218 #ifdef CONFIG_DFX_SUPPORT_USERS_PRINT
219 typedef int (*log_other_print_t)(uint32_t log_module_type, uint32_t level, const char *fmt, uint32_t paranum, ...);
220 void log_other_print_register(log_other_print_t users_print_func);
221 void log_other_print0(uint32_t log_header, uint32_t log_level, const char *fmt);
222 void log_other_print1(uint32_t log_header, uint32_t log_level, const char *fmt, uint32_t p0);
223 void log_other_print2(uint32_t log_header, uint32_t log_level, const char *fmt, uint32_t p0, uint32_t p1);
224 void log_other_print3(uint32_t log_header, uint32_t log_level, const char *fmt, uint32_t p0, uint32_t p1, uint32_t p2);
225 void log_other_print4(uint32_t log_header, uint32_t log_level, const char *fmt,
226                       uint32_t p0, uint32_t p1, uint32_t p2, uint32_t p3);
227 
228 #define oml_pf_log_print0(mid, lognum, lvl, fmt) do {    \
229     log_event_print0(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__));    \
230     log_other_print0(mid, lvl, fmt);    \
231 } while (0)
232 #define oml_pf_log_print1(mid, lognum, lvl, fmt, p1) do {    \
233     log_event_print1(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1));    \
234     log_other_print1(mid, lvl, fmt, (uint32_t)(p1));    \
235 } while (0)
236 #define oml_pf_log_print2(mid, lognum, lvl, fmt, p1, p2) do {    \
237     log_event_print2(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__),    \
238                      (uint32_t)(p1), (uint32_t)(p2));    \
239     log_other_print2(mid, lvl, fmt, (uint32_t)(p1), (uint32_t)(p2));    \
240 } while (0)
241 #define oml_pf_log_print3(mid, lognum, lvl, fmt, p1, p2, p3) do {    \
242     log_event_print3(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__),    \
243                      (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3));    \
244     log_other_print3(mid, lvl, fmt, (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3));    \
245 } while (0)
246 #define oml_pf_log_print4(mid, lognum, lvl, fmt, p1, p2, p3, p4) do {    \
247     log_event_print4(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__),    \
248                      (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4));    \
249     log_other_print4(mid, lvl, fmt, (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4));    \
250 } while (0)
251 
252 #define oml_app_log_print0(mid, lvl, fmt) do {    \
253     log_event_print0(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__));    \
254     log_other_print0(mid, lvl, fmt);    \
255 } while (0)
256 #define oml_app_log_print1(mid, lvl, fmt, p1) do {    \
257     log_event_print1(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1));    \
258     log_other_print1(mid, lvl, fmt, (uint32_t)(p1));    \
259 } while (0)
260 #define oml_app_log_print2(mid, lvl, fmt, p1, p2) do {    \
261     log_event_print2(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__),    \
262                      (uint32_t)(p1), (uint32_t)(p2));    \
263     log_other_print2(mid, lvl, fmt, (uint32_t)(p1), (uint32_t)(p2));   \
264 } while (0)
265 #define oml_app_log_print3(mid, lvl, fmt, p1, p2, p3) do {    \
266     log_event_print3(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__),    \
267                      (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3));    \
268     log_other_print3(mid, lvl, fmt, (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3));    \
269 } while (0)
270 #define oml_app_log_print4(mid, lvl, fmt, p1, p2, p3, p4) do {    \
271     log_event_print4(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__),    \
272                      (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4));    \
273     log_other_print4(mid, lvl, fmt, (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4));    \
274 } while (0)
275 #else
276 #define oml_pf_log_print0(mid, lognum, lvl, fmt) \
277     log_event_print0(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__))
278 #define oml_pf_log_print1(mid, lognum, lvl, fmt, p1) \
279     log_event_print1(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1))
280 #define oml_pf_log_print2(mid, lognum, lvl, fmt, p1, p2) \
281     log_event_print2(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
282                      (uint32_t)(p2))
283 #define oml_pf_log_print3(mid, lognum, lvl, fmt, p1, p2, p3) \
284     log_event_print3(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
285                      (uint32_t)(p2), (uint32_t)(p3))
286 #define oml_pf_log_print4(mid, lognum, lvl, fmt, p1, p2, p3, p4) \
287     log_event_print4(log_head_press(OM_PF), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
288                      (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4))
289 
290 #define oml_app_log_print0(mid, lvl, fmt) \
291     log_event_print0(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__))
292 #define oml_app_log_print1(mid, lvl, fmt, p1) \
293     log_event_print1(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1))
294 #define oml_app_log_print2(mid, lvl, fmt, p1, p2) \
295     log_event_print2(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
296                      (uint32_t)(p2))
297 #define oml_app_log_print3(mid, lvl, fmt, p1, p2, p3) \
298     log_event_print3(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
299                      (uint32_t)(p2), (uint32_t)(p3))
300 #define oml_app_log_print4(mid, lvl, fmt, p1, p2, p3, p4) \
301     log_event_print4(log_head_press(OM_IR), para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
302                      (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4))
303 #endif
304 #define oml_pf_log_print_alter(mid, lognum, lvl, fmt, num, arg...) \
305     log_event_print_alterable_para_press(log_head_press(OM_PF), \
306                                          para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
307 #define pf_log_alter(mid, lognum, lvl, fmt, num, arg...) \
308     oml_pf_log_print_alter(LOG_PFMODULE, lognum, lvl, fmt, num, ##arg)
309 #define oml_app_log_print_alter(mid, lvl, fmt, num, arg...) \
310     log_event_print_alterable_para_press(log_head_press(OM_IR), \
311                                          para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
312 #define app_log_alter(mid, lvl, fmt, num, arg...) oml_app_log_print_alter(LOG_PFMODULE, lvl, fmt, num, ##arg)
313 
314 #define oml_nfc_log_print0(lvl, fmt) \
315     log_event_print0(log_head_press(OM_NFC), para_press(LOG_NFCMODULE, lvl, THIS_FILE_ID, __LINE__))
316 #define oml_nfc_log_print1(lvl, fmt, p1) \
317     log_event_print1(log_head_press(OM_NFC), para_press(LOG_NFCMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1))
318 #define oml_nfc_log_print2(lvl, fmt, p1, p2) \
319     log_event_print2(log_head_press(OM_NFC), para_press(LOG_NFCMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
320                      (uint32_t)(p2))
321 #define oml_nfc_log_print3(lvl, fmt, p1, p2, p3) \
322     log_event_print3(log_head_press(OM_NFC), para_press(LOG_NFCMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
323                      (uint32_t)(p2), (uint32_t)(p3))
324 #define oml_nfc_log_print4(lvl, fmt, p1, p2, p3, p4) \
325     log_event_print4(log_head_press(OM_NFC), para_press(LOG_NFCMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
326                      (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4))
327 #define oml_nfc_log_print_alter(lvl, fmt, num, arg...) \
328     log_event_print_alterable_para_press(log_head_press(OM_NFC), \
329                                          para_press(LOG_NFCMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
330 #define nfc_log_alter(lvl, fmt, num, arg...) oml_app_log_print_alter(LOG_NFCMODULE, lvl, fmt, num, ##arg)
331 
332 
333 #define oml_glp_log_print0(lvl, fmt) \
334     log_event_print0(log_head_press(OM_SLP), para_press(LOG_SLPMODULE, lvl, THIS_FILE_ID, __LINE__))
335 #define oml_glp_log_print1(lvl, fmt, p1) \
336     log_event_print1(log_head_press(OM_SLP), para_press(LOG_SLPMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1))
337 #define oml_glp_log_print2(lvl, fmt, p1, p2) \
338     log_event_print2(log_head_press(OM_SLP), para_press(LOG_SLPMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
339                      (uint32_t)(p2))
340 #define oml_glp_log_print3(lvl, fmt, p1, p2, p3) \
341     log_event_print3(log_head_press(OM_SLP), para_press(LOG_SLPMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
342                      (uint32_t)(p2), (uint32_t)(p3))
343 #define oml_glp_log_print4(lvl, fmt, p1, p2, p3, p4) \
344     log_event_print4(log_head_press(OM_SLP), para_press(LOG_SLPMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1), \
345                      (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4))
346 #define oml_glp_log_print_alter(lvl, fmt, num, arg...) \
347     log_event_print_alterable_para_press(log_head_press(OM_SLP), \
348                                          para_press(LOG_SLPMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
349 #define glp_log_alter(lvl, fmt, num, arg...) oml_app_log_print_alter(LOG_SLPMODULE, lvl, fmt, num, ##arg)
350 
351 
352 #if CORE == CORE_LOGGING
353 #define pf_write_fifo_log_alter(mid, lognum, lvl, fmt, num, arg...) \
354     log_event_print_alterable_para_press_by_write_uart_fifo(log_head_press(OM_PF), \
355                                                             para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), \
356                                                             num, ##arg)
357 #else
358 #define pf_write_fifo_log_alter(mid, lognum, lvl, fmt, num, arg...) \
359     log_event_print_alterable_para_press(log_head_press(OM_PF), \
360                                          para_press(LOG_PFMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
361 #endif
362 #ifdef SDT_LOG_BY_UART
363 void oml_log_print_alterable_para_press(uint32_t press_log_head, uint32_t press_para, uint16_t para_num, ...);
364 #define oml_bt_log_print_alter(mid, lvl, fmt, num, arg...) \
365     oml_log_print_alterable_para_press(LOG_HEAD_PRESS(OM_BT), PARA_PRESS(mid, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
366 
367 #define oml_gnss_log_print0(mid, lvl, fmt) \
368     oml_log_print0_press(LOG_HEAD_PRESS(OM_GNSS), PARA_PRESS(mid, lvl, THIS_FILE_ID, __LINE__))
369 #define oml_gnss_log_print1(mid, lvl, fmt, p1) \
370     oml_log_print1_press(LOG_HEAD_PRESS(OM_GNSS), PARA_PRESS(mid, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1))
371 #define oml_gnss_log_print2(mid, lvl, fmt, p1, p2) \
372     oml_log_print2_press(LOG_HEAD_PRESS(OM_GNSS), PARA_PRESS(mid, lvl, THIS_FILE_ID, __LINE__), \
373                          (uint32_t)(p1), (uint32_t)(p2))
374 #define oml_gnss_log_print3(mid, lvl, fmt, p1, p2, p3) \
375     oml_log_print3_press(LOG_HEAD_PRESS(OM_GNSS), PARA_PRESS(mid, lvl, THIS_FILE_ID, __LINE__), \
376                          (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3))
377 #define oml_gnss_log_print4(mid, lvl, fmt, p1, p2, p3, p4) \
378     oml_log_print4_press(LOG_HEAD_PRESS(OM_GNSS), PARA_PRESS(mid, lvl, THIS_FILE_ID, __LINE__), \
379                          (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4))
380 #define oml_gnss_log_print_alter(mid, lvl, fmt, num, arg...) \
381     oml_log_print_alterable_para_press(LOG_HEAD_PRESS(OM_GNSS), PARA_PRESS(mid, lvl, THIS_FILE_ID, __LINE__), \
382                                        num, ##arg)
383 
384 #define oml_gnss_log_no_num_print_alter(mid, lvl, fmt, arg...)         \
385     oml_log_print_alterable_para_press_no_num(LOG_HEAD_PRESS(OM_GNSS), \
386     PARA_PRESS(mid, lvl, THIS_FILE_ID, __LINE__), (int8_t *)fmt, ##arg)
387 
388 #define oml_gnss_double_log_print_alter(mid, lvl, fmt, float_num, int_num, arg...) \
389     oml_log_print_double_alterable_para(LOG_HEAD_PRESS(OM_GNSS),                   \
390     PARA_PRESS(mid, lvl, THIS_FILE_ID, __LINE__), float_num, int_num, ##arg)
391 #else
392 #define oml_bt_log_print_alter(mid, lvl, fmt, num, arg...) \
393     log_event_print_alterable_para_press(log_head_press(OM_BT), \
394                                          para_press(LOG_BTMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
395 #define oml_gnss_log_print0(mid, lvl, fmt) \
396     log_event_print0(log_head_press(OM_GNSS), para_press(LOG_GNSSMODULE, lvl, THIS_FILE_ID, __LINE__))
397 #define oml_gnss_log_print1(mid, lvl, fmt, p1) \
398     log_event_print1(log_head_press(OM_GNSS), para_press(LOG_GNSSMODULE, lvl, THIS_FILE_ID, __LINE__), (uint32_t)(p1))
399 #define oml_gnss_log_print2(mid, lvl, fmt, p1, p2) \
400     log_event_print2(log_head_press(OM_GNSS), para_press(LOG_GNSSMODULE, lvl, THIS_FILE_ID, __LINE__), \
401                      (uint32_t)(p1), (uint32_t)(p2))
402 #define oml_gnss_log_print3(mid, lvl, fmt, p1, p2, p3) \
403     log_event_print3(log_head_press(OM_GNSS), para_press(LOG_GNSSMODULE, lvl, THIS_FILE_ID, __LINE__), \
404                      (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3))
405 #define oml_gnss_log_print4(mid, lvl, fmt, p1, p2, p3, p4) \
406     log_event_print4(log_head_press(OM_GNSS), para_press(LOG_GNSSMODULE, lvl, THIS_FILE_ID, __LINE__), \
407                      (uint32_t)(p1), (uint32_t)(p2), (uint32_t)(p3), (uint32_t)(p4))
408 #define oml_gnss_log_print_alter(mid, lvl, fmt, num, arg...) \
409     log_event_print_alterable_para_press(log_head_press(OM_GNSS), \
410                                          para_press(LOG_GNSSMODULE, lvl, THIS_FILE_ID, __LINE__), num, ##arg)
411 #endif
412 #else /* USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG == YES */
413 #include "log_printf.h"
414 #include "log_num.h"
415 #define LOG_NUM_MASK 0xFFF
416 #define connection(text1, text2) (text1##text2)
417 #define contect(text1, text2)    (connection(text1, text2))
418 #define var_name(text)           (contect(text, __LINE__))
419 
420 #if (CORE == BT)
421 #include "ipc.h"
422 #define NO_USE   0
423 #define oml_bt_log_print0(mid, lvl, fmt)   BASE_PRINT(NO_USE, lvl, fmt, NO_ARG)
424 #define oml_bt_log_print1(mid, lvl, fmt, p1)   BASE_PRINT(NO_USE, lvl, fmt, ONE_ARG, p1)
425 #define oml_bt_log_print2(mid, lvl, fmt, p1, p2)   BASE_PRINT(NO_USE, lvl, fmt, TWO_ARG, p1, p2)
426 #define oml_bt_log_print3(mid, lvl, fmt, p1, p2, p3)   BASE_PRINT(NO_USE, lvl, fmt, THREE_ARG, p1, p2, p3)
427 #define oml_bt_log_print4(mid, lvl, fmt, p1, p2, p3, p4)   BASE_PRINT(NO_USE, lvl, fmt, FOUR_ARG, p1, p2, p3, p4)
428 #define oml_bt_log_print_alter(mid, lvl, fmt, num, arg...)   BASE_PRINT(NO_USE, lvl, fmt, num, ##arg)
429 
430 #elif (CORE == GNSS)
431 
432 #define connection(text1, text2) (text1##text2)
433 #define contect(text1, text2)    (connection(text1, text2))
434 #define var_name(text)           (contect(text, __LINE__))
435 
436 #define NO_USE   0
437 #define oml_gnss_log_print0(mid, lvl, fmt)   BASE_PRINT(NO_USE, lvl, fmt, NO_ARG)
438 #define oml_gnss_log_print1(mid, lvl, fmt, p1)   BASE_PRINT(NO_USE, lvl, fmt, ONE_ARG, p1)
439 #define oml_gnss_log_print2(mid, lvl, fmt, p1, p2)   BASE_PRINT(NO_USE, lvl, fmt, TWO_ARG, p1, p2)
440 #define oml_gnss_log_print3(mid, lvl, fmt, p1, p2, p3)   BASE_PRINT(NO_USE, lvl, fmt, THREE_ARG, p1, p2, p3)
441 #define oml_gnss_log_print4(mid, lvl, fmt, p1, p2, p3, p4)   BASE_PRINT(NO_USE, lvl, fmt, FOUR_ARG, p1, p2, p3, p4)
442 #define oml_gnss_log_print_alter(mid, lvl, fmt, num, arg...)   BASE_PRINT(NO_USE, lvl, fmt, num, ##arg)
443 
444 #elif (CORE == APPS)
445 #define oml_app_log_print0(mid, lvl, fmt)                                                    \
446     do {                                                                                     \
447         __attribute__((used, section(".logstr"))) static char var_name(LOGSTR)[] = fmt;      \
448         (LOS_Printf(MODULE_EXTERNAL, LOG_LEVEL_DEBUG, (uint32_t)var_name(LOGSTR), 0));         \
449     } while (0)
450 #define oml_app_log_print1(mid, lvl, fmt, p1)                                                \
451     do {                                                                                     \
452         __attribute__((used, section(".logstr"))) static char var_name(LOGSTR)[] = fmt;      \
453         (LOS_Printf(MODULE_EXTERNAL, LOG_LEVEL_DEBUG, (uint32_t)var_name(LOGSTR), 1, p1));     \
454     } while (0)
455 #define oml_app_log_print2(mid, lvl, fmt, p1, p2)                                            \
456     do {                                                                                     \
457         __attribute__((used, section(".logstr"))) static char var_name(LOGSTR)[] = fmt;      \
458         (LOS_Printf(MODULE_EXTERNAL, LOG_LEVEL_DEBUG, (uint32_t)var_name(LOGSTR), 2, p1, p2)); \
459     } while (0)
460 #define oml_app_log_print3(mid, lvl, fmt, p1, p2, p3)                                                \
461     do {                                                                                             \
462         __attribute__((used, section(".logstr"))) static char var_name(LOGSTR)[] = fmt;              \
463         (LOS_Printf(MODULE_EXTERNAL, LOG_LEVEL_DEBUG, (uint32_t)var_name(LOGSTR), 3, p1, p2, p3));     \
464     } while (0)
465 #define oml_app_log_print4(mid, lvl, fmt, p1, p2, p3, p4)                                            \
466     do {                                                                                             \
467         __attribute__((used, section(".logstr"))) static char var_name(LOGSTR)[] = fmt;              \
468         (LOS_Printf(MODULE_EXTERNAL, LOG_LEVEL_DEBUG, (uint32_t)var_name(LOGSTR), 4, p1, p2, p3, p4)); \
469     } while (0)
470 #define oml_app_log_print_alter(mid, lvl, fmt, num, arg...)                                   \
471     do {                                                                                      \
472         __attribute__((used, section(".logstr"))) static char var_name(LOGSTR)[] = fmt;       \
473         (LOS_Printf(MODULE_EXTERNAL, LOG_LEVEL_DEBUG, (uint32_t)var_name(LOGSTR), num, ##arg)); \
474     } while (0)
475 
476 #endif /* CORE == BT */
477 #define oml_pf_log_print0(mid, lognum, lvl, fmt) BASE_PRINT(CONNECT(mid, ((lognum) & LOG_NUM_MASK)), lvl, fmt, NO_ARG)
478 #define oml_pf_log_print1(mid, lognum, lvl, fmt, p1) BASE_PRINT(CONNECT(mid, ((lognum) & LOG_NUM_MASK)), lvl, fmt, \
479                                                                 ONE_ARG, p1)
480 #define oml_pf_log_print2(mid, lognum, lvl, fmt, p1, p2) BASE_PRINT(CONNECT(mid, ((lognum) & LOG_NUM_MASK)), lvl, fmt, \
481                                                                     TWO_ARG, p1, p2)
482 #define oml_pf_log_print3(mid, lognum, lvl, fmt, p1, p2, p3) \
483     BASE_PRINT(CONNECT(mid, ((lognum) & LOG_NUM_MASK)), lvl, fmt, THREE_ARG, p1, p2, p3)
484 #define oml_pf_log_print4(mid, lognum, lvl, fmt, p1, p2, p3, p4) \
485     BASE_PRINT(CONNECT(mid, ((lognum) & LOG_NUM_MASK)), lvl, fmt, FOUR_ARG, p1, p2, p3, p4)
486 #define oml_pf_log_print_alter(mid, lognum, lvl, fmt, num, arg...) \
487     BASE_PRINT(CONNECT(mid, ((lognum) & LOG_NUM_MASK)), lvl, fmt, num, ##arg)
488 #define pf_log_alter(mid, lognum, lvl, fmt, num, arg...) oml_pf_log_print_alter(mid, lognum, lvl, fmt, num, ##arg)
489 #define pf_write_fifo_log_alter(mid, lognum, lvl, fmt, num, arg...) \
490         oml_pf_log_print_alter(mid, lognum, lvl, fmt, num, ##arg)
491 #endif /* USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG */
492 
493 #ifndef FEATURE_ON
494 #define FEATURE_ON 1
495 #endif
496 #ifndef FEATURE_OFF
497 #define FEATURE_OFF 0
498 #endif
499 
500 enum OM_MSG_TYPE_ENUM {
501     OM_MSG_TYPE_LOG = 1,
502     OM_MSG_TYPE_OTA = 2,
503     OM_MSG_TYPE_TRACE = 3,
504     OM_MSG_TYPE_EVENT = 4,
505     OM_MSG_TYPE_ALARM = 5,
506     OM_MSG_TYPE_CATCH = 6,
507     OM_MSG_TYPE_COLLECT = 7,
508     OM_MSG_TYPE_DUMP = 8,
509     OM_MSG_MEM_COMMAND = 9,
510     OM_MSG_SSI_REG_COMMAND = 10,
511     OM_MSG_ICONFIG_COMMAND = 11,
512     OM_MSG_TYPE_BTC_OAM = 12,
513     OM_MSG_TYPE_WARNING = 13,
514     OM_MSG_TYPE_STATISTIC = 15,
515     OM_MSG_TYPE_LAST = 16,
516     OM_MSG_NFC_COMMAND = 17,
517     OM_MSG_TYPE_EDITION = 18,
518     OM_MSG_TYPE_COVERAGE = 19,
519 
520     OM_MSG_GNSS_HOST_CMD_TYPE = 20, /* Add for GNSS, should modified later */
521     OM_MSG_REG_COMMAND = 21,
522     OM_MSG_CS_STAT_CMD = 22,
523     OM_MSG_GNSS_SDT_CMD = 23,
524     OM_MSG_TRSSI_FSM = 25,
525     OM_MSG_TRSSI_VAL_CFG = 26,
526     OM_MSG_TYPE_CALIRESULT = 27,
527     OM_MSG_SSIBLOCK_COMMAND = 28,   /* Used by testfpga */
528     OM_MSG_DBGUART_SWITCH_TO_BT = 29,
529     OM_MSG_DBGUART_SWITCH_TO_WIFI = 30,
530 
531     OM_MSG_TYPE_STATUS = 31,
532     OM_PCM_REPORT_BT = 32,
533     OM_MSG_TYPE_DSCR = 33,
534     OM_BT_SAMPLE_DATA = 41,
535 
536     OM_MSG_REG32_COMMAND = 65,
537     OM_MSG_TYPE_BTH = 70,
538     OM_MSG_TYPE_APP = 71,
539     OM_MSG_TYPE_HIFI = 72,
540 
541     OM_MSG_TYPE_LOG_CUSTOM = 73,    /* Used for the log with customized structure. */
542 
543     OM_MSG_TYPE_BTC_WVT = 100, /* 0x64 */
544     OM_MSG_TYPE_BUTT,
545 };
546 
547 enum OM_LOG_ERROR_TYPE {
548     OM_LOG_RET_OK,
549     OM_LOG_RET_PARA_INVALID,
550     OM_LOG_RET_POINTER_NULL,
551 };
552 
553 enum OM_LOG_MSG_ENUM {
554     OM_LOG_CONFIG_REQ = 1,
555     OM_LOG_CONFIG_ACK = 2,
556     OM_LOG_RPT_IND = 3,
557     OM_LOG_SAVE_STACK = 8,
558     OM_LOG_CONFIG_BUTT,
559 };
560 
561 enum LOG_OAM_ENTRY_INDEX {
562     LOG_OAM_INDEX_0,
563     LOG_OAM_INDEX_1,
564     LOG_OAM_INDEX_2,
565     LOG_OAM_INDEX_3,
566     LOG_OAM_INDEX_4,
567     LOG_OAM_INDEX_5,
568     LOG_OAM_INDEX_6,
569     LOG_OAM_INDEX_7,
570 };
571 
572 typedef struct {
573     uint8_t module_id;
574     uint8_t print_level;
575 } om_log_module_lev_t;
576 
577 typedef struct {
578     uint8_t frame_start;
579     uint8_t func_type;
580     uint8_t prime_id;
581     uint8_t arr_reserver[1];
582     uint16_t frame_len;
583     uint16_t sn;
584 } __attribute__((packed)) om_msg_header_stru_t;
585 
586 typedef struct {
587     uint16_t count;
588     uint8_t end_flag;
589     uint8_t arr_reserve;
590 } om_msg_dump_header_stru_t;
591 
592 /* Log message struct */
593 typedef struct {
594     om_msg_header_stru_t header;
595     uint8_t mod_print_lev_info; /* log_level_e */
596     uint8_t file_idx_high;      /* file idx high */
597     uint8_t bit2_file_idx_low : 2; /* file idx low */
598     uint8_t bit6_line_no_high : 6; /* line No. high */
599     uint8_t line_no_low;        /* line No. low */
600 } om_log_header_t;
601 
602 #if (USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG == NO)
603 void log_event_print0(uint32_t log_header, uint32_t presspara);
604 
605 void log_event_print1(uint32_t log_header, uint32_t presspara, uint32_t para1);
606 
607 void log_event_print2(uint32_t log_header, uint32_t presspara, uint32_t para1, uint32_t para2);
608 
609 void log_event_print3(uint32_t log_header, uint32_t presspara, uint32_t para1, uint32_t para2, uint32_t para3);
610 
611 void log_event_print4(uint32_t log_header, uint32_t presspara, uint32_t para1, uint32_t para2,
612                       uint32_t para3, uint32_t para4);
613 
614 void log_event_print_alterable_para_press(uint32_t log_header, uint32_t presspara, uint32_t paranum, ...);
615 
616 void log_event_wifi_print0(uint32_t presspara);
617 void log_event_wifi_print1(uint32_t presspara, uint32_t para1);
618 void log_event_wifi_print2(uint32_t presspara, uint32_t para1, uint32_t para2);
619 void log_event_wifi_print3(uint32_t presspara, uint32_t para1, uint32_t para2, uint32_t para3);
620 void log_event_wifi_print4(uint32_t presspara, uint32_t para1, uint32_t para2, uint32_t para3, uint32_t para4);
621 
622 #if CORE == CORE_LOGGING
623 void log_event_print_alterable_para_press_by_write_uart_fifo(
624     uint32_t log_header, uint32_t presspara, uint32_t paranum, ...);
625 #endif
626 
627 #endif /* USE_COMPRESS_LOG_INSTEAD_OF_SDT_LOG */
628 
629 #endif
630