162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright 2020-2021 NXP
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef _AMPHION_VPU_DEFS_H
762306a36Sopenharmony_ci#define _AMPHION_VPU_DEFS_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_cienum MSG_TYPE {
1062306a36Sopenharmony_ci	INIT_DONE = 1,
1162306a36Sopenharmony_ci	PRC_BUF_OFFSET,
1262306a36Sopenharmony_ci	BOOT_ADDRESS,
1362306a36Sopenharmony_ci	COMMAND,
1462306a36Sopenharmony_ci	EVENT,
1562306a36Sopenharmony_ci};
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cienum {
1862306a36Sopenharmony_ci	VPU_IRQ_CODE_BOOT_DONE = 0x55,
1962306a36Sopenharmony_ci	VPU_IRQ_CODE_SNAPSHOT_DONE = 0xa5,
2062306a36Sopenharmony_ci	VPU_IRQ_CODE_SYNC = 0xaa,
2162306a36Sopenharmony_ci};
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cienum {
2462306a36Sopenharmony_ci	VPU_CMD_ID_NOOP = 0x0,
2562306a36Sopenharmony_ci	VPU_CMD_ID_CONFIGURE_CODEC,
2662306a36Sopenharmony_ci	VPU_CMD_ID_START,
2762306a36Sopenharmony_ci	VPU_CMD_ID_STOP,
2862306a36Sopenharmony_ci	VPU_CMD_ID_ABORT,
2962306a36Sopenharmony_ci	VPU_CMD_ID_RST_BUF,
3062306a36Sopenharmony_ci	VPU_CMD_ID_SNAPSHOT,
3162306a36Sopenharmony_ci	VPU_CMD_ID_FIRM_RESET,
3262306a36Sopenharmony_ci	VPU_CMD_ID_UPDATE_PARAMETER,
3362306a36Sopenharmony_ci	VPU_CMD_ID_FRAME_ENCODE,
3462306a36Sopenharmony_ci	VPU_CMD_ID_SKIP,
3562306a36Sopenharmony_ci	VPU_CMD_ID_PARSE_NEXT_SEQ,
3662306a36Sopenharmony_ci	VPU_CMD_ID_PARSE_NEXT_I,
3762306a36Sopenharmony_ci	VPU_CMD_ID_PARSE_NEXT_IP,
3862306a36Sopenharmony_ci	VPU_CMD_ID_PARSE_NEXT_ANY,
3962306a36Sopenharmony_ci	VPU_CMD_ID_DEC_PIC,
4062306a36Sopenharmony_ci	VPU_CMD_ID_FS_ALLOC,
4162306a36Sopenharmony_ci	VPU_CMD_ID_FS_RELEASE,
4262306a36Sopenharmony_ci	VPU_CMD_ID_TIMESTAMP,
4362306a36Sopenharmony_ci	VPU_CMD_ID_DEBUG
4462306a36Sopenharmony_ci};
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_cienum {
4762306a36Sopenharmony_ci	VPU_MSG_ID_NOOP = 0x100,
4862306a36Sopenharmony_ci	VPU_MSG_ID_RESET_DONE,
4962306a36Sopenharmony_ci	VPU_MSG_ID_START_DONE,
5062306a36Sopenharmony_ci	VPU_MSG_ID_STOP_DONE,
5162306a36Sopenharmony_ci	VPU_MSG_ID_ABORT_DONE,
5262306a36Sopenharmony_ci	VPU_MSG_ID_BUF_RST,
5362306a36Sopenharmony_ci	VPU_MSG_ID_MEM_REQUEST,
5462306a36Sopenharmony_ci	VPU_MSG_ID_PARAM_UPD_DONE,
5562306a36Sopenharmony_ci	VPU_MSG_ID_FRAME_INPUT_DONE,
5662306a36Sopenharmony_ci	VPU_MSG_ID_ENC_DONE,
5762306a36Sopenharmony_ci	VPU_MSG_ID_DEC_DONE,
5862306a36Sopenharmony_ci	VPU_MSG_ID_FRAME_REQ,
5962306a36Sopenharmony_ci	VPU_MSG_ID_FRAME_RELEASE,
6062306a36Sopenharmony_ci	VPU_MSG_ID_SEQ_HDR_FOUND,
6162306a36Sopenharmony_ci	VPU_MSG_ID_RES_CHANGE,
6262306a36Sopenharmony_ci	VPU_MSG_ID_PIC_HDR_FOUND,
6362306a36Sopenharmony_ci	VPU_MSG_ID_PIC_DECODED,
6462306a36Sopenharmony_ci	VPU_MSG_ID_PIC_EOS,
6562306a36Sopenharmony_ci	VPU_MSG_ID_FIFO_LOW,
6662306a36Sopenharmony_ci	VPU_MSG_ID_FIFO_HIGH,
6762306a36Sopenharmony_ci	VPU_MSG_ID_FIFO_EMPTY,
6862306a36Sopenharmony_ci	VPU_MSG_ID_FIFO_FULL,
6962306a36Sopenharmony_ci	VPU_MSG_ID_BS_ERROR,
7062306a36Sopenharmony_ci	VPU_MSG_ID_UNSUPPORTED,
7162306a36Sopenharmony_ci	VPU_MSG_ID_TIMESTAMP_INFO,
7262306a36Sopenharmony_ci	VPU_MSG_ID_FIRMWARE_XCPT,
7362306a36Sopenharmony_ci	VPU_MSG_ID_PIC_SKIPPED,
7462306a36Sopenharmony_ci	VPU_MSG_ID_DBG_MSG,
7562306a36Sopenharmony_ci};
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_cienum VPU_ENC_MEMORY_RESOURSE {
7862306a36Sopenharmony_ci	MEM_RES_ENC,
7962306a36Sopenharmony_ci	MEM_RES_REF,
8062306a36Sopenharmony_ci	MEM_RES_ACT
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_cienum VPU_DEC_MEMORY_RESOURCE {
8462306a36Sopenharmony_ci	MEM_RES_FRAME,
8562306a36Sopenharmony_ci	MEM_RES_MBI,
8662306a36Sopenharmony_ci	MEM_RES_DCP
8762306a36Sopenharmony_ci};
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_cienum VPU_SCODE_TYPE {
9062306a36Sopenharmony_ci	SCODE_PADDING_EOS = 1,
9162306a36Sopenharmony_ci	SCODE_PADDING_BUFFLUSH = 2,
9262306a36Sopenharmony_ci	SCODE_PADDING_ABORT = 3,
9362306a36Sopenharmony_ci	SCODE_SEQUENCE = 0x31,
9462306a36Sopenharmony_ci	SCODE_PICTURE = 0x32,
9562306a36Sopenharmony_ci	SCODE_SLICE = 0x33
9662306a36Sopenharmony_ci};
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_cistruct vpu_pkt_mem_req_data {
9962306a36Sopenharmony_ci	u32 enc_frame_size;
10062306a36Sopenharmony_ci	u32 enc_frame_num;
10162306a36Sopenharmony_ci	u32 ref_frame_size;
10262306a36Sopenharmony_ci	u32 ref_frame_num;
10362306a36Sopenharmony_ci	u32 act_buf_size;
10462306a36Sopenharmony_ci	u32 act_buf_num;
10562306a36Sopenharmony_ci};
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_cistruct vpu_enc_pic_info {
10862306a36Sopenharmony_ci	u32 frame_id;
10962306a36Sopenharmony_ci	u32 pic_type;
11062306a36Sopenharmony_ci	u32 skipped_frame;
11162306a36Sopenharmony_ci	u32 error_flag;
11262306a36Sopenharmony_ci	u32 psnr;
11362306a36Sopenharmony_ci	u32 frame_size;
11462306a36Sopenharmony_ci	u32 wptr;
11562306a36Sopenharmony_ci	u32 crc;
11662306a36Sopenharmony_ci	s64 timestamp;
11762306a36Sopenharmony_ci};
11862306a36Sopenharmony_ci
11962306a36Sopenharmony_cistruct vpu_dec_codec_info {
12062306a36Sopenharmony_ci	u32 pixfmt;
12162306a36Sopenharmony_ci	u32 num_ref_frms;
12262306a36Sopenharmony_ci	u32 num_dpb_frms;
12362306a36Sopenharmony_ci	u32 num_dfe_area;
12462306a36Sopenharmony_ci	u32 color_primaries;
12562306a36Sopenharmony_ci	u32 transfer_chars;
12662306a36Sopenharmony_ci	u32 matrix_coeffs;
12762306a36Sopenharmony_ci	u32 full_range;
12862306a36Sopenharmony_ci	u32 vui_present;
12962306a36Sopenharmony_ci	u32 progressive;
13062306a36Sopenharmony_ci	u32 width;
13162306a36Sopenharmony_ci	u32 height;
13262306a36Sopenharmony_ci	u32 decoded_width;
13362306a36Sopenharmony_ci	u32 decoded_height;
13462306a36Sopenharmony_ci	struct v4l2_fract frame_rate;
13562306a36Sopenharmony_ci	u32 dsp_asp_ratio;
13662306a36Sopenharmony_ci	u32 level_idc;
13762306a36Sopenharmony_ci	u32 bit_depth_luma;
13862306a36Sopenharmony_ci	u32 bit_depth_chroma;
13962306a36Sopenharmony_ci	u32 chroma_fmt;
14062306a36Sopenharmony_ci	u32 mvc_num_views;
14162306a36Sopenharmony_ci	u32 offset_x;
14262306a36Sopenharmony_ci	u32 offset_y;
14362306a36Sopenharmony_ci	u32 tag;
14462306a36Sopenharmony_ci	u32 sizeimage[VIDEO_MAX_PLANES];
14562306a36Sopenharmony_ci	u32 bytesperline[VIDEO_MAX_PLANES];
14662306a36Sopenharmony_ci	u32 mbi_size;
14762306a36Sopenharmony_ci	u32 dcp_size;
14862306a36Sopenharmony_ci	u32 stride;
14962306a36Sopenharmony_ci};
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_cistruct vpu_dec_pic_info {
15262306a36Sopenharmony_ci	u32 id;
15362306a36Sopenharmony_ci	u32 luma;
15462306a36Sopenharmony_ci	u32 start;
15562306a36Sopenharmony_ci	u32 end;
15662306a36Sopenharmony_ci	u32 pic_size;
15762306a36Sopenharmony_ci	u32 stride;
15862306a36Sopenharmony_ci	u32 skipped;
15962306a36Sopenharmony_ci	s64 timestamp;
16062306a36Sopenharmony_ci	u32 consumed_count;
16162306a36Sopenharmony_ci};
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_cistruct vpu_fs_info {
16462306a36Sopenharmony_ci	u32 id;
16562306a36Sopenharmony_ci	u32 type;
16662306a36Sopenharmony_ci	u32 tag;
16762306a36Sopenharmony_ci	u32 luma_addr;
16862306a36Sopenharmony_ci	u32 luma_size;
16962306a36Sopenharmony_ci	u32 chroma_addr;
17062306a36Sopenharmony_ci	u32 chromau_size;
17162306a36Sopenharmony_ci	u32 chromav_addr;
17262306a36Sopenharmony_ci	u32 chromav_size;
17362306a36Sopenharmony_ci	u32 bytesperline;
17462306a36Sopenharmony_ci	u32 not_displayed;
17562306a36Sopenharmony_ci};
17662306a36Sopenharmony_ci
17762306a36Sopenharmony_cistruct vpu_ts_info {
17862306a36Sopenharmony_ci	s64 timestamp;
17962306a36Sopenharmony_ci	u32 size;
18062306a36Sopenharmony_ci};
18162306a36Sopenharmony_ci
18262306a36Sopenharmony_ci#define BITRATE_STEP		(1024)
18362306a36Sopenharmony_ci#define BITRATE_MIN		(16 * BITRATE_STEP)
18462306a36Sopenharmony_ci#define BITRATE_MAX		(240 * 1024 * BITRATE_STEP)
18562306a36Sopenharmony_ci#define BITRATE_DEFAULT		(2 * 1024 * BITRATE_STEP)
18662306a36Sopenharmony_ci#define BITRATE_DEFAULT_PEAK	(BITRATE_DEFAULT * 2)
18762306a36Sopenharmony_ci
18862306a36Sopenharmony_ci#endif
189