/* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2019 MediaTek Inc. */ #ifndef MTK_AOV_DATA_H #define MTK_AOV_DATA_H #include #include "mtk_cam-aov.h" /* * For user space <-> kernel communication */ #define AOV_DEV_START _IOW('H', 0, struct aov_user) #define AOV_DEV_SENSOR_ON _IOW('H', 1, struct sensor_notify) #define AOV_DEV_SENSOR_OFF _IOW('H', 2, struct sensor_notify) #define AOV_DEV_DQEVENT _IOR('H', 3, struct aov_dqevent) #define AOV_DEV_STOP _IO('H', 4) #if IS_ENABLED(CONFIG_COMPAT) #define COMPAT_AOV_DEV_START _IOW('H', 0, struct aov_user) #define COMPAT_AOV_DEV_DQEVENT _IOR('H', 1, struct aov_dqevent) #define COMPAT_AOV_DEV_SENSOR_ON _IOW('H', 2, struct sensor_notify) #define COMPAT_AOV_DEV_SENSOR_OFF _IOW('H', 3, struct sensor_notify) #define COMPAT_AOV_DEV_STOP _IO('H', 4) #endif /* * For APMCU <-> SCP communication */ #define AOV_SCP_CMD_READY (0) #define AOV_SCP_CMD_START (1) #define AOV_SCP_CMD_PWR_ON (2) #define AOV_SCP_CMD_PWR_OFF (3) #define AOV_SCP_CMD_FRAME (4) #define AOV_SCP_CMD_NOTIFY (5) #define AOV_SCP_CMD_STOP (6) #define AOV_SCP_CMD_MAX (7) #define AOV_SCP_CMD_ACK (0x80000000) #define AOV_DEBUG_MODE_DUMP (1) // General debug #define AOV_DEBUG_MODE_NDD (2) // NDD debug mode #define AOV_DISP_MODE_OFF (0) #define AOV_DiSP_MODE_ON (1) #define AOV_MAX_BASE_EVENT (2) #define AOV_MAX_NDD_EVENT (1) #define AOV_MAX_USER_SIZE (offsetof(struct aov_user, aaa_size)) #define AOV_MAX_SENIF_SIZE (2 * 1024) #define AOV_MAX_AAA_SIZE (32 * 1024) #define AOV_MAX_TUNING_SIZE (2 * 1024) #define AOV_MAX_AIE_SIZE (162 * 1024) #define AOV_MAX_YUVO1_OUTPUT (737280 + 32) // 640 x 480, nv12 12-bit #define AOV_MAX_YUVO2_OUTPUT (184320 + 32) // 320 x 240, nv12 12-bit #define AOV_MAX_AIE_OUTPUT (32 * 1024) #define AOV_MAX_APU_OUTPUT (256 * 1024) #define AOV_MAX_IMGO_OUTPUT (921600 + 32) // 640 x 480, bayer12 #define AOV_MAX_AAO_OUTPUT (158 * 1024) #define AOV_MAX_AAHO_OUTPUT (1 * 1024) #define AOV_MAX_META_OUTPUT (6 * 1024) #define AOV_MAX_AWB_OUTPUT (1 * 1024) #define AOV_MAX_SENSOR_COUNT (64) extern void mtk_aie_aov_memcpy(char *buffer); struct sensor_notify { uint32_t count; int32_t sensor[AOV_MAX_SENSOR_COUNT]; }; struct aov_dqevent { uint32_t session; uint32_t frame_id; uint32_t frame_width; uint32_t frame_height; uint32_t frame_mode; uint32_t detect_mode; // for object detection uint32_t aie_size; void *aie_output; uint32_t apu_size; void *apu_output; // for general debug uint32_t yuvo1_width; uint32_t yuvo1_height; uint32_t yuvo1_format; uint32_t yuvo1_stride; void *yuvo1_output; uint32_t yuvo2_width; uint32_t yuvo2_height; uint32_t yuvo2_format; uint32_t yuvo2_stride; void *yuvo2_output; // for NDD debug mode uint32_t imgo_width; uint32_t imgo_height; uint32_t imgo_format; uint32_t imgo_order; uint32_t imgo_stride; void *imgo_output; uint32_t aao_size; void *aao_output; uint32_t aaho_size; void *aaho_output; uint32_t meta_size; void *meta_output; uint32_t awb_size; void *awb_output; }; struct base_event { uint32_t event_id; uint32_t session; uint32_t frame_id; uint32_t frame_width; uint32_t frame_height; uint32_t frame_mode; uint32_t detect_mode; // for object detection uint32_t aie_size; uint8_t aie_output[AOV_MAX_AIE_OUTPUT]; uint32_t apu_size; uint8_t apu_output[AOV_MAX_APU_OUTPUT]; // for general debug uint32_t yuvo1_width; uint32_t yuvo1_height; uint32_t yuvo1_format; uint32_t yuvo1_stride; uint8_t yuvo1_output[AOV_MAX_YUVO1_OUTPUT]; uint32_t yuvo2_width; uint32_t yuvo2_height; uint32_t yuvo2_format; uint32_t yuvo2_stride; uint8_t yuvo2_output[AOV_MAX_YUVO2_OUTPUT]; } __aligned(4); struct ndd_event { struct base_event base; // for NDD debug mode uint32_t imgo_width; uint32_t imgo_height; uint32_t imgo_format; uint32_t imgo_order; uint32_t imgo_stride; uint8_t imgo_output[AOV_MAX_IMGO_OUTPUT]; uint32_t aao_size; uint8_t aao_output[AOV_MAX_AAO_OUTPUT]; uint32_t aaho_size; uint8_t aaho_output[AOV_MAX_AAHO_OUTPUT]; uint32_t meta_size; uint8_t meta_output[AOV_MAX_META_OUTPUT]; uint32_t awb_size; uint8_t awb_output[AOV_MAX_AWB_OUTPUT]; } __aligned(4); enum aov_log_id { AOV_LOG_ID_BASE, AOV_LOG_ID_RED, AOV_LOG_ID_AOV, AOV_LOG_ID_TLSF, AOV_LOG_ID_2A, AOV_LOG_ID_TUNING, AOV_LOG_ID_SENSOR, AOV_LOG_ID_SENIF, AOV_LOG_ID_UISP, AOV_LOG_ID_AIE, AOV_LOG_ID_APU, AOV_LOG_ID_MAX }; struct aov_user { uint32_t session; uint32_t sensor_id; uint32_t sensor_scene; int32_t sensor_orient; uint32_t sensor_face; uint32_t sensor_type; uint32_t sensor_bit; uint32_t sensor_ae; uint32_t format_order; uint32_t main_width; uint32_t main_height; uint32_t main_format; uint32_t sub_width; uint32_t sub_height; uint32_t sub_format; uint32_t frame_rate; uint32_t frame_mode; uint32_t debug_mode; uint32_t debug_level[AOV_LOG_ID_MAX]; uint32_t trace_perf; uint32_t reserved[5]; uint32_t aaa_size; void *aaa_info; uint32_t tuning_size; void *tuning_info; }; struct senif_start { uint8_t data[AOV_MAX_SENIF_SIZE]; } __aligned(8); struct aaa_start { uint8_t data[AOV_MAX_AAA_SIZE]; } __aligned(8); struct tuning { uint8_t data[AOV_MAX_TUNING_SIZE]; } __aligned(8); struct aie_start { uint8_t data[AOV_MAX_AIE_SIZE]; } __aligned(8); struct aov_start { // user parameter uint32_t session; uint32_t sensor_id; uint32_t sensor_scene; int32_t sensor_orient; uint32_t sensor_face; uint32_t sensor_type; uint32_t sensor_bit; uint32_t sensor_ae; uint32_t format_order; uint32_t main_width; uint32_t main_height; uint32_t main_format; uint32_t sub_width; uint32_t sub_height; uint32_t sub_format; uint32_t frame_rate; uint32_t frame_mode; uint32_t debug_mode; uint32_t debug_level[AOV_LOG_ID_MAX]; uint32_t trace_perf; uint32_t reserved[5]; // display on/off uint32_t disp_mode; // aie available uint32_t aie_avail; // seninf/sensor struct senif_start senif_info; // aaa info struct aaa_start aaa_info; // tuning data struct tuning tuning_info; ///aie info struct aie_start aie_info; // aov event union { struct base_event base_event[AOV_MAX_BASE_EVENT]; struct ndd_event ndd_event[AOV_MAX_NDD_EVENT]; }; }; #define AOV_NOTIFY_AIE_AVAIL (1) #define AOV_NOTIFY_EVT_AVAIL (2) struct aov_notify { uint32_t notify; uint32_t status; }; struct packet { uint16_t session; uint16_t sequence; uint32_t command; uint32_t buffer; uint32_t length; } __packed; #endif // MTK_AOV_DATA_H