/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2019 MediaTek Inc. * Author: Joey Pan */ #ifndef __MMPROFILE_H__ #define __MMPROFILE_H__ #include "mmprofile_static_event.h" #define MMPROFILE_EVENT_NAME_MAX_LEN 31 #define MMP_Event mmp_event #define mmp_event unsigned int enum mmp_log_type { MMPROFILE_FLAG_START = 1, MMPROFILE_FLAG_END = 2, MMPROFILE_FLAG_PULSE = 4, MMPROFILE_FLAG_EVENT_SEPARATOR = 8, MMPROFILE_FLAG_SYSTRACE = 0x80000000, MMPROFILE_FLAG_MAX = 0xFFFFFFFF }; enum mmp_metadata_type { MMPROFILE_META_STRING_MBS = 1, MMPROFILE_META_STRING_WCS, MMPROFILE_META_STRUCTURE, MMPROFILE_META_BITMAP, MMPROFILE_META_RAW, MMPROFILE_META_USER = 0x10000000, MMPROFILE_META_USER_M4U_REG, MMPROFILE_META_MAX = 0xFFFFFFFF }; enum mmp_pixel_format { MMPROFILE_BITMAP_RGB565 = 1, MMPROFILE_BITMAP_RGB888, MMPROFILE_BITMAP_RGBA8888, MMPROFILE_BITMAP_BGR888, MMPROFILE_BITMAP_BGRA8888, MMPROFILE_BITMAP_UYVY, MMPROFILE_BITMAP_VYUY, MMPROFILE_BITMAP_YUYV, MMPROFILE_BITMAP_YVYU, MMPROFILE_BITMAP_MAX = 0xFFFFFFFF }; struct mmp_metadata_t { unsigned int data1; /* data1 (user defined) */ unsigned int data2; /* data2 (user defined) */ enum mmp_metadata_type data_type; /* meta data type */ unsigned int size; /* meta data size */ void *p_data; /* meta data pointer */ }; #ifdef CONFIG_COMPAT struct compat_mmp_metadata_t { unsigned int data1; /* data1 (user defined) */ unsigned int data2; /* data2 (user defined) */ enum mmp_metadata_type data_type; /* meta data type */ unsigned int size; /* meta data size */ unsigned int p_data; /* meta data pointer */ }; #endif struct mmp_metadata_structure_t { unsigned int data1; /* data1 (user defined) */ unsigned int data2; /* data2 (user defined) */ unsigned int struct_size; /* structure size (bytes) */ void *p_data; /* structure pointer */ char struct_name[32]; /* structure name */ }; struct mmp_metadata_bitmap_t { unsigned int data1; /* data1 (user defined) */ unsigned int data2; /* data2 (user defined) */ unsigned int width; /* image width */ unsigned int height; /* image height */ enum mmp_pixel_format format; /* image pixel format */ /* start offset of image data (base on p_data) */ unsigned int start_pos; unsigned int bpp; /* bits per pixel */ int pitch; /* image pitch (bytes per line) */ unsigned int data_size; /* image data size (bytes) */ unsigned int down_sample_x; /* horizontal down sample rate (>=1) */ unsigned int down_sample_y; /* vertical down sample rate (>=1) */ void *p_data; /* image buffer address */ }; #ifdef CONFIG_MMPROFILE mmp_event mmprofile_register_event(mmp_event parent, const char *name); mmp_event mmprofile_find_event(mmp_event parent, const char *name); void mmprofile_enable_event(mmp_event event, long enable); void mmprofile_enable_ftrace_event(mmp_event event, long enable, long ftrace); void mmprofile_enable_event_recursive(mmp_event event, long enable); void mmprofile_enable_ftrace_event_recursive(mmp_event event, long enable, long ftrace); long mmprofile_query_enable(mmp_event event); void mmprofile_log(mmp_event event, enum mmp_log_type type); void mmprofile_log_ex(mmp_event event, enum mmp_log_type type, unsigned long data1, unsigned long data2); long mmprofile_log_meta(mmp_event event, enum mmp_log_type type, struct mmp_metadata_t *p_meta_data); long mmprofile_log_meta_string(mmp_event event, enum mmp_log_type type, const char *str); long mmprofile_log_meta_string_ex(mmp_event event, enum mmp_log_type type, unsigned long data1, unsigned long data2, const char *str); long mmprofile_log_meta_structure(mmp_event event, enum mmp_log_type type, struct mmp_metadata_structure_t *p_meta_data); long mmprofile_log_meta_bitmap(mmp_event event, enum mmp_log_type type, struct mmp_metadata_bitmap_t *p_meta_data); long mmprofile_log_meta_yuv_bitmap(mmp_event event, enum mmp_log_type type, struct mmp_metadata_bitmap_t *p_meta_data); void mmprofile_start(int start); void mmprofile_enable(int enable); unsigned int mmprofile_get_dump_size(void); void mmprofile_get_dump_buffer(unsigned int start, unsigned long *p_addr, unsigned int *p_size); #else /* * if in kernel config CONFIG_MMPROFILE is not set, * and the kernel makefile had define * obj-$(CONFIG_MMPROFILE) += mmp/ * , the mmp/ driver is compiled but not built-in. * Put dummy API implementation here. */ static inline mmp_event mmprofile_register_event(mmp_event parent, const char *name) { return 0; } static inline mmp_event mmprofile_find_event(mmp_event parent, const char *name) { return 0; } static inline void mmprofile_enable_event(mmp_event event, long enable) { } static inline void mmprofile_enable_event_recursive(mmp_event event, long enable) { } static inline void mmprofile_enable_ftrace_event(mmp_event event, long enable, long ftrace) { } static inline void mmprofile_enable_ftrace_event_recursive(mmp_event event, long enable, long ftrace) { } static inline long mmprofile_query_enable(mmp_event event) { return 0; } static inline void mmprofile_log_ex(mmp_event event, enum mmp_log_type type, unsigned long data1, unsigned long data2) { } static inline void mmprofile_log(mmp_event event, enum mmp_log_type type) { } static inline long mmprofile_log_meta(mmp_event event, enum mmp_log_type type, struct mmp_metadata_t *p_meta_data) { return 0; } static inline long mmprofile_log_meta_structure(mmp_event event, enum mmp_log_type type, struct mmp_metadata_structure_t *p_meta_data) { return 0; } static inline long mmprofile_log_meta_string_ex(mmp_event event, enum mmp_log_type type, unsigned long data1, unsigned long data2, const char *str) { return 0; } static inline long mmprofile_log_meta_string(mmp_event event, enum mmp_log_type type, const char *str) { return 0; } static inline long mmprofile_log_meta_bitmap(mmp_event event, enum mmp_log_type type, struct mmp_metadata_bitmap_t *p_meta_data) { return 0; } static inline long mmprofile_log_meta_yuv_bitmap(mmp_event event, enum mmp_log_type type, struct mmp_metadata_bitmap_t *p_meta_data) { return 0; } static inline void mmprofile_start(int start) { } static inline void mmprofile_enable(int enable) { } #endif #endif