307 lines
6.6 KiB
C
307 lines
6.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (c) 2019 MediaTek Inc.
|
|
*/
|
|
|
|
#ifndef MTK_AOV_DATA_H
|
|
#define MTK_AOV_DATA_H
|
|
|
|
#include <linux/ioctl.h>
|
|
|
|
#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
|