| /* SPDX-License-Identifier: GPL-2.0 */ | 
 | /* | 
 |  * Copyright (c) 2019 MediaTek Inc. | 
 |  */ | 
 |  | 
 | #ifndef _TRACE_H_ | 
 | #define _TRACE_H_ | 
 |  | 
 |  | 
 | extern void (*mp_cp_ptr)(unsigned long long timestamp, | 
 | 	       struct task_struct *task, | 
 | 	       unsigned long program_counter, | 
 | 	       unsigned long dcookie, | 
 | 	       unsigned long offset, | 
 | 	       unsigned char cnt, unsigned int *value); | 
 |  | 
 | #define MP_FMT1	"%x\n" | 
 | #define MP_FMT2	"%x,%x\n" | 
 | #define MP_FMT3	"%x,%x,%x\n" | 
 | #define MP_FMT4	"%x,%x,%x,%x\n" | 
 | #define MP_FMT5	"%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT6	"%x,%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT7	"%x,%x,%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT8	"%x,%x,%x,%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT9	"%x,%x,%x,%x,%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT10 "%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT11 "%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT12 "%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT13 "%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT14 "%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n" | 
 | #define MP_FMT15 "%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x,%x\n" | 
 |  | 
 | #define MET_GENERAL_PRINT(FUNC, count, value) \ | 
 | do { \ | 
 | 	switch (count) { \ | 
 | 	case 1: { \ | 
 | 		FUNC(MP_FMT1, value[0]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 2: { \ | 
 | 		FUNC(MP_FMT2, value[0], value[1]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 3: { \ | 
 | 		FUNC(MP_FMT3, value[0], value[1], value[2]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 4: { \ | 
 | 		FUNC(MP_FMT4, value[0], value[1], value[2], value[3]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 5: { \ | 
 | 		FUNC(MP_FMT5, value[0], value[1], value[2], value[3], value[4]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 6: { \ | 
 | 		FUNC(MP_FMT6, value[0], value[1], value[2], value[3], value[4], value[5]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 7: { \ | 
 | 		FUNC(MP_FMT7, value[0], value[1], value[2], value[3], value[4], value[5], value[6]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 8: { \ | 
 | 		FUNC(MP_FMT8, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 9: { \ | 
 | 		FUNC(MP_FMT9, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], \ | 
 | 				value[8]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 10: { \ | 
 | 		FUNC(MP_FMT10, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], \ | 
 | 				value[8], value[9]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 11: { \ | 
 | 		FUNC(MP_FMT11, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], \ | 
 | 				value[8], value[9], value[10]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 12: { \ | 
 | 		FUNC(MP_FMT12, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], \ | 
 | 				value[8], value[9], value[10], value[11]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 13: { \ | 
 | 		FUNC(MP_FMT13, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], \ | 
 | 				value[8], value[9], value[10], value[11], value[12]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 14: { \ | 
 | 		FUNC(MP_FMT14, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], \ | 
 | 				value[8], value[9], value[10], value[11], value[12], value[13]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	case 15: { \ | 
 | 		FUNC(MP_FMT15, value[0], value[1], value[2], value[3], value[4], value[5], value[6], value[7], \ | 
 | 				value[8], value[9], value[10], value[11], value[12], value[13], value[14]); \ | 
 | 		} \ | 
 | 		break; \ | 
 | 	} \ | 
 | } while (0) | 
 | #endif /* _TRACE_H_ */ |