| /* |
| * Copyright (C) 2018 MediaTek Inc. |
| * |
| * This program is free software: you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License version 2 as |
| * published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| */ |
| |
| #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_ */ |