blob: 32fcefc6e396ebe169ecc9766684f69b493c234f [file] [log] [blame]
rjw6c1fd8f2022-11-30 14:33:01 +08001/*****************************************************************************
2* Copyright Statement:
3* --------------------
4* This software is protected by Copyright and the information contained
5* herein is confidential. The software may not be copied and the information
6* contained herein may not be used or disclosed except with the written
7* permission of MediaTek Inc. (C) 2005
8*
9* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
10* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
11* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
12* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
13* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
15* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
16* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
17* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
18* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
19* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
20* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
21*
22* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
23* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
24* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
25* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
26* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
27*
28* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
29* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
30* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
31* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
32* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
33*
34*****************************************************************************/
35
36/*****************************************************************************
37 *
38 * Filename:
39 * ---------
40 * kal_debug.h
41 *
42 * Project:
43 * --------
44 * Maui_Software
45 *
46 * Description:
47 * ------------
48 * This file would be used as a kal header file for the compilation
49 * of any module using debug version of kal.
50 *
51 * Author:
52 * -------
53 * -------
54 *
55 *============================================================================
56 * HISTORY
57 * Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
58 *------------------------------------------------------------------------------
59 * removed!
60 * removed!
61 * removed!
62 *
63 * removed!
64 * removed!
65 * removed!
66 * removed!
67 *
68 * removed!
69 * removed!
70 * removed!
71 * removed!
72 *
73 * removed!
74 * removed!
75 * removed!
76 * removed!
77 * removed!
78 *
79 * removed!
80 * removed!
81 * removed!
82 * removed!
83 *
84 * removed!
85 * removed!
86 * removed!
87 * removed!
88 *
89 * removed!
90 * removed!
91 * removed!
92 * removed!
93 * removed!
94 * removed!
95 * removed!
96 * removed!
97 *
98 * removed!
99 * removed!
100 * removed!
101 *
102 * removed!
103 * removed!
104 * removed!
105 *
106 * removed!
107 * removed!
108 * removed!
109 *
110 * removed!
111 * removed!
112 * removed!
113 *
114 * removed!
115 * removed!
116 * removed!
117 *
118 * removed!
119 * removed!
120 * removed!
121 *
122 * removed!
123 * removed!
124 * removed!
125 *
126 * removed!
127 * removed!
128 * removed!
129 *
130 * removed!
131 * removed!
132 * removed!
133 *
134 * removed!
135 * removed!
136 * removed!
137 *
138 * removed!
139 * removed!
140 * removed!
141 * removed!
142 *
143 * removed!
144 * removed!
145 * removed!
146 *
147 * removed!
148 * removed!
149 * removed!
150 *
151 * removed!
152 * removed!
153 * removed!
154 *
155 * removed!
156 * removed!
157 * removed!
158 *
159 * removed!
160 * removed!
161 * removed!
162 *
163 * removed!
164 * removed!
165 * removed!
166 *
167 * removed!
168 * removed!
169 * removed!
170 * removed!
171 * removed!
172 * removed!
173 * removed!
174 * removed!
175 * removed!
176 * removed!
177 * removed!
178 * removed!
179 * removed!
180 * removed!
181 * removed!
182 * removed!
183 * removed!
184 * removed!
185 * removed!
186 * removed!
187 * removed!
188 * removed!
189 * removed!
190 * removed!
191 * removed!
192 * removed!
193 * removed!
194 * removed!
195 * removed!
196 * removed!
197 * removed!
198 * removed!
199 * removed!
200 * removed!
201 * removed!
202 * removed!
203 * removed!
204 * removed!
205 * removed!
206 * removed!
207 *------------------------------------------------------------------------------
208 * Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
209 *============================================================================
210 ****************************************************************************/
211
212/*********************************************************************
213* (C) _____ (year of first publication) Sasken communication
214* Technologies Limited, All rights reserved.
215* This file provides a template for .c files. This space
216* should be used to describe the file contents
217* Component-specific prefix : xxxx
218*********************************************************************/
219
220#ifndef _KAL_DEBUG_H
221#define _KAL_DEBUG_H
222
223#include "kal_internal_def.h"
224/*************************************************************************
225 * Constant definition and check
226 *************************************************************************/
227
228#if defined(DEBUG_KAL) && defined(RELEASE_KAL)
229#error "Only one of DEBUG_KAL and RELEASE_KAL can be defined"
230#endif
231
232#if !defined(DEBUG_KAL) && !defined(RELEASE_KAL)
233#error "At least one of DEBUG_KAL or RELEASE_KAL should be defined"
234#endif
235
236#if !defined(__KAL_ASSERT_LEVEL4__) && !defined(__KAL_ASSERT_LEVEL3__) && !defined(__KAL_ASSERT_LEVEL2__) && !defined(__KAL_ASSERT_LEVEL1__) && !defined(__KAL_ASSERT_LEVEL0__)
237#error "At least one of KAL_ASSERT_LEVEL4 or KAL_ASSERT_LEVEL3 or KAL_ASSERT_LEVEL2 or KAL_ASSERT_LEVEL1 or KAL_ASSERT_LEVEL0 should be defined"
238#endif
239
240/*************************************************************************
241 * Include the common header file
242 *************************************************************************/
243#include "kal_public_defs.h"
244
245#ifdef __cplusplus
246extern "C" {
247#endif
248
249typedef enum { KAL_MUTEX_GIVEN, KAL_MUTEX_TAKEN } kal_mutex_state;
250
251#if defined(DEBUG_KAL) && defined(DEBUG_DEADLOCKS)
252typedef struct kal_lock_wait_info_struct {
253 kal_uint32 *waiting_lock_p;
254 kal_uint32 waiting_start_time;
255 void * context;
256} kal_lock_wait_info_type;
257
258void kal_set_lock_waiting_info(void *context, kal_uint32 *lock);
259void kal_clear_lock_waiting_info(void *context);
260kal_lock_wait_info_type *kal_get_lock_waiting_info(void *context);
261#endif
262
263
264#if defined (__MTK_TARGET__)
265
266typedef enum {
267 KAL_WP_W = 1,
268 KAL_WP_R,
269 KAL_WP_RW
270} kal_wp_type;
271
272#if defined __MD97__ && !defined MT6297_IA
273
274#define KAL_WP_MASK_CACHE_LINE (0x4) /* Mask bits 4:0 */
275
276#define KAL_WATCHPOINT_7_SET(addr, type, mask) \
277 do {\
278 __asm__ __volatile__ (\
279 ".set push;"\
280 ".set noreorder;"\
281 "mtc0 %0, $18, 7;"\
282 "sll $t1, %2, 22;"\
283 "li $t0, 1279;"\
284 "ins $t1, $t0, 11, 11;"\
285 "ins $t1, %1, 0, 2;"\
286 "mtc0 $t1, $19, 7;"\
287 "ehb;"\
288 ".set pop;"\
289 : \
290 : "r"(addr), "r"(type), "r"(mask)\
291 : "$t0", "$t1"\
292 );\
293 } while(0)
294
295#define KAL_STACK_PROTECT(stack_ptr) KAL_WATCHPOINT_7_SET(stack_ptr, KAL_WP_W, KAL_WP_MASK_CACHE_LINE);
296#else /* defined __MD97__ && !defined MT6297_IA */
297
298#define KAL_WP_MASK_CACHE_LINE (0x3) /* Mask address bits 4:3, WatchLo already
299 uses bits 2:0 for I/R/W config -> bits 4:0 are masked */
300
301#ifndef __mips16
302#define KAL_WATCHPOINT_3_SET(addr, type, mask) \
303 do {\
304 __asm__ __volatile__ (\
305 ".set push;"\
306 ".set noreorder;"\
307 "move $t0, %0;"\
308 "ins $t0, %1, 0, 2;"\
309 "sll $t1, %2, 3;"\
310 "mtc0 $t0, $18, 3;"\
311 "mtc0 $t1, $19, 3;"\
312 "ehb;"\
313 ".set pop;"\
314 : \
315 : "r"(addr), "r"(type), "r"(mask)\
316 : "$t0", "$t1"\
317 );\
318 } while(0)
319#else
320#define KAL_WATCHPOINT_3_SET(addr, type, mask) \
321 do {\
322 __asm__ __volatile__ (\
323 ".set push;"\
324 ".set noreorder;"\
325 "move $2, %0;"\
326 "ins $2, %1, 0, 2;"\
327 "sll $3, %2, 3;"\
328 "mtc0 $2, $18, 3;"\
329 "mtc0 $3, $19, 3;"\
330 "ehb;"\
331 ".set pop;"\
332 : \
333 : "d"(addr), "d"(type), "d"(mask)\
334 : "$2", "$3"\
335 );\
336 } while(0)
337#endif
338
339#define KAL_STACK_PROTECT(stack_ptr) KAL_WATCHPOINT_3_SET(stack_ptr, KAL_WP_W, KAL_WP_MASK_CACHE_LINE);
340#endif /* defined __MD97__ && !defined MT6297_IA */
341#endif /* defined (__MTK_TARGET__) */
342
343#if defined(DEBUG_KAL)
344/*************************************************************************
345 * Macros Without Parameters
346 *************************************************************************/
347
348#ifdef DEBUG_BUF1
349
350#define KAL_HEAD_PRINT_SIZE 4
351#define KAL_FOOT_PRINT_SIZE 2
352#define KAL_FOOT_BUFF_ID_SIZE 2
353#define KAL_FOOT2_PRINT_SIZE 4
354
355#define KAL_BUFF_HEADER_SIZE KAL_HEAD_PRINT_SIZE
356
357#define KAL_BUFF_FOOTER_SIZE (KAL_FOOT_PRINT_SIZE + KAL_FOOT_BUFF_ID_SIZE)
358
359#endif
360
361#ifdef DEBUG_BUF2
362
363#define KAL_HEAD_PRINT_SIZE 4
364#define KAL_FOOT_PRINT_SIZE 2
365#define KAL_FOOT_BUFF_ID_SIZE 2
366#define KAL_FOOT2_PRINT_SIZE 4
367#define KAL_TASKID_PTR_SIZE 4
368
369#define KAL_BUFF_HEADER_SIZE (KAL_HEAD_PRINT_SIZE + KAL_TASKID_PTR_SIZE)
370
371#define KAL_BUFF_FOOTER_SIZE (KAL_FOOT_PRINT_SIZE + KAL_FOOT_BUFF_ID_SIZE)
372
373#define KAL_GET_TASKID_PTR_IN_BUFF_HEADER(buf_ptr) \
374 ((kal_char *)buf_ptr - KAL_TASKID_PTR_SIZE)
375#endif
376
377#if defined(DEBUG_BUF1) || defined(DEBUG_BUF2)
378#define KAL_GET_HEADER_PTR_IN_BUFF_HEADER(buf_ptr) \
379 ((kal_char *)buf_ptr - KAL_BUFF_HEADER_SIZE)
380
381#if defined(__MTK_TARGET__)
382#define SENSITIVE_BUFF_FLAG (0x1 << 1) /* bit 1 of header is the sensitive flag */
383#endif
384#endif
385
386/*************************************************************************
387 * Define exported function prototype
388 *************************************************************************/
389extern void kal_set_free_pattern(void *user_ptr, kal_uint32 buff_size);
390extern void *kal_is_freepattern(void *user_ptr, kal_uint32 buff_size);
391
392#if defined(DEBUG_BUF1) || defined(DEBUG_BUF2)
393extern void kal_init_buff_header_footer(void *buff_pt, kal_poolid ext_pool_id,
394 kal_uint16 buff_id);
395extern void kal_update_buff_header_footer(kal_poolid pool_id, void *buff_ptr,
396 kal_taskid ext_task_id,
397 kal_uint32 buff_size,
398 kal_uint16 buff_number);
399extern void kal_is_valid_buffer(void *buff_ptr, kal_uint16 buff_number);
400#endif /* DEBUG_BUF1 ||DEBUG_BUF2 */
401
402#if defined(DEBUG_BUF3)
403extern void kal_check_free_pattern(void *user_ptr, kal_uint32 buff_size);
404extern void kal_set_alloc_pattern(void *user_ptr, kal_uint32 user_size,
405 kal_uint32 buff_size);
406extern void kal_check_frag_pattern(void *user_ptr, kal_uint32 user_size,
407 kal_uint32 buff_size);
408#endif /* DEBUG_BUF3 */
409#endif /* DEBUG_KAL */
410
411/*************************************************************************
412 * Define Console or Log Print Functions
413 *************************************************************************/
414extern void stack_print(char *string);
415
416#ifdef KAL_ON_OSCAR
417#define system_print osc_platform_print_msg
418#else
419#if !defined(__FUE__)
420#define system_print(s) stack_print(s)
421#else
422#define system_print(s) fue_dbg_print(s)
423#endif
424#endif
425
426#ifdef __cplusplus
427}
428#endif
429
430#endif /* _KAL_DEBUG_H */