#ifndef _ISP4_FW_CMD_RESP_H_
#define _ISP4_FW_CMD_RESP_H_
#define ISP4FW_CMD_TYPE_SHIFT 24
#define ISP4FW_CMD_GROUP_SHIFT 16
#define ISP4FW_CMD_TYPE_STREAM_CTRL (0x2U << ISP4FW_CMD_TYPE_SHIFT)
#define ISP4FW_CMD_GROUP_STREAM_CTRL (0x1U << ISP4FW_CMD_GROUP_SHIFT)
#define ISP4FW_CMD_GROUP_STREAM_BUFFER (0x4U << ISP4FW_CMD_GROUP_SHIFT)
#define ISP4FW_CMD_ID_SET_STREAM_CONFIG (ISP4FW_CMD_TYPE_STREAM_CTRL\
| ISP4FW_CMD_GROUP_STREAM_CTRL | 0x1)
#define ISP4FW_CMD_ID_SET_OUT_CHAN_PROP (ISP4FW_CMD_TYPE_STREAM_CTRL\
| ISP4FW_CMD_GROUP_STREAM_CTRL | 0x3)
#define ISP4FW_CMD_ID_ENABLE_OUT_CHAN (ISP4FW_CMD_TYPE_STREAM_CTRL\
| ISP4FW_CMD_GROUP_STREAM_CTRL | 0x5)
#define ISP4FW_CMD_ID_START_STREAM (ISP4FW_CMD_TYPE_STREAM_CTRL\
| ISP4FW_CMD_GROUP_STREAM_CTRL | 0x7)
#define ISP4FW_CMD_ID_STOP_STREAM (ISP4FW_CMD_TYPE_STREAM_CTRL\
| ISP4FW_CMD_GROUP_STREAM_CTRL | 0x8)
#define ISP4FW_CMD_ID_SEND_BUFFER (ISP4FW_CMD_TYPE_STREAM_CTRL\
| ISP4FW_CMD_GROUP_STREAM_BUFFER | 0x1)
#define ISP4FW_RESP_GROUP_SHIFT 16
#define ISP4FW_RESP_GROUP_GENERAL (0x1 << ISP4FW_RESP_GROUP_SHIFT)
#define ISP4FW_RESP_GROUP_NOTIFICATION (0x3 << ISP4FW_RESP_GROUP_SHIFT)
#define ISP4FW_RESP_ID_CMD_DONE (ISP4FW_RESP_GROUP_GENERAL | 0x1)
#define ISP4FW_RESP_ID_NOTI_FRAME_DONE (ISP4FW_RESP_GROUP_NOTIFICATION | 0x1)
#define ISP4FW_CMD_STATUS_SUCCESS 0
#define ISP4FW_CMD_STATUS_FAIL 1
#define ISP4FW_CMD_STATUS_SKIPPED 2
#define ISP4FW_ADDR_SPACE_TYPE_GPU_VA 4
#define ISP4FW_MEMORY_POOL_SIZE (100 * 1024 * 1024)
#define ISP4FW_MIPI0_ISP_PIPELINE_ID 0x5f91
enum isp4fw_sensor_id {
ISP4FW_SENSOR_ID_ON_MIPI0 = 0,
};
enum isp4fw_stream_id {
ISP4FW_STREAM_ID_INVALID = -1,
ISP4FW_STREAM_ID_1 = 0,
ISP4FW_STREAM_ID_2 = 1,
ISP4FW_STREAM_ID_3 = 2,
ISP4FW_STREAM_ID_MAXIMUM
};
enum isp4fw_image_format {
ISP4FW_IMAGE_FORMAT_NV12 = 1,
ISP4FW_IMAGE_FORMAT_YUV422INTERLEAVED = 7,
};
enum isp4fw_pipe_out_ch {
ISP4FW_ISP_PIPE_OUT_CH_PREVIEW = 0,
};
enum isp4fw_yuv_range {
ISP4FW_ISP_YUV_RANGE_FULL = 0,
ISP4FW_ISP_YUV_RANGE_NARROW = 1,
ISP4FW_ISP_YUV_RANGE_MAX
};
enum isp4fw_buffer_type {
ISP4FW_BUFFER_TYPE_PREVIEW = 8,
ISP4FW_BUFFER_TYPE_META_INFO = 10,
ISP4FW_BUFFER_TYPE_MEM_POOL = 15,
};
enum isp4fw_buffer_status {
ISP4FW_BUFFER_STATUS_INVALID,
ISP4FW_BUFFER_STATUS_SKIPPED,
ISP4FW_BUFFER_STATUS_EXIST,
ISP4FW_BUFFER_STATUS_DONE,
ISP4FW_BUFFER_STATUS_LACK,
ISP4FW_BUFFER_STATUS_DIRTY,
ISP4FW_BUFFER_STATUS_MAX
};
enum isp4fw_buffer_source {
ISP4FW_BUFFER_SOURCE_STREAM,
};
struct isp4fw_error_code {
u32 code1;
u32 code2;
u32 code3;
u32 code4;
u32 code5;
};
struct isp4fw_cmd {
u32 cmd_seq_num;
u32 cmd_id;
u32 cmd_param[12];
u16 cmd_stream_id;
u8 cmd_silent_resp;
u8 reserved;
u32 cmd_check_sum;
};
struct isp4fw_resp_cmd_done {
u32 cmd_seq_num;
u32 cmd_id;
u16 cmd_status;
u16 isp4fw_error_code;
u8 payload[36];
};
struct isp4fw_resp_param_package {
u32 package_addr_lo;
u32 package_addr_hi;
u32 package_size;
u32 package_check_sum;
};
struct isp4fw_resp {
u32 resp_seq_num;
u32 resp_id;
union {
struct isp4fw_resp_cmd_done cmd_done;
struct isp4fw_resp_param_package frame_done;
u32 resp_param[12];
} param;
u8 reserved[4];
u32 resp_check_sum;
};
struct isp4fw_mipi_pipe_path_cfg {
u32 b_enable;
enum isp4fw_sensor_id isp4fw_sensor_id;
};
struct isp4fw_isp_pipe_path_cfg {
u32 isp_pipe_id;
};
struct isp4fw_isp_stream_cfg {
struct isp4fw_mipi_pipe_path_cfg mipi_pipe_path_cfg;
struct isp4fw_isp_pipe_path_cfg isp_pipe_path_cfg;
u32 b_enable_tnr;
u32 rta_frames_per_proc;
};
struct isp4fw_image_prop {
enum isp4fw_image_format image_format;
u32 width;
u32 height;
u32 luma_pitch;
u32 chroma_pitch;
enum isp4fw_yuv_range yuv_range;
};
struct isp4fw_buffer {
u32 buf_tags;
union {
u32 value;
struct {
u32 space : 16;
u32 vmid : 16;
} bit;
} vmid_space;
u32 buf_base_a_lo;
u32 buf_base_a_hi;
u32 buf_size_a;
u32 buf_base_b_lo;
u32 buf_base_b_hi;
u32 buf_size_b;
u32 buf_base_c_lo;
u32 buf_base_c_hi;
u32 buf_size_c;
};
struct isp4fw_buffer_meta_info {
u32 enabled;
enum isp4fw_buffer_status status;
struct isp4fw_error_code err;
enum isp4fw_buffer_source source;
struct isp4fw_image_prop image_prop;
struct isp4fw_buffer buffer;
};
struct isp4fw_meta_info {
u32 poc;
u32 fc_id;
u32 time_stamp_lo;
u32 time_stamp_hi;
struct isp4fw_buffer_meta_info preview;
};
struct isp4fw_cmd_send_buffer {
enum isp4fw_buffer_type buffer_type;
struct isp4fw_buffer buffer;
};
struct isp4fw_cmd_set_out_ch_prop {
enum isp4fw_pipe_out_ch ch;
struct isp4fw_image_prop image_prop;
};
struct isp4fw_cmd_enable_out_ch {
enum isp4fw_pipe_out_ch ch;
u32 is_enable;
};
struct isp4fw_cmd_set_stream_cfg {
struct isp4fw_isp_stream_cfg stream_cfg;
};
#endif