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_V4L2_H
762306a36Sopenharmony_ci#define _AMPHION_VPU_V4L2_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/videodev2.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_civoid vpu_inst_lock(struct vpu_inst *inst);
1262306a36Sopenharmony_civoid vpu_inst_unlock(struct vpu_inst *inst);
1362306a36Sopenharmony_civoid vpu_set_buffer_state(struct vb2_v4l2_buffer *vbuf, unsigned int state);
1462306a36Sopenharmony_ciunsigned int vpu_get_buffer_state(struct vb2_v4l2_buffer *vbuf);
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ciint vpu_v4l2_open(struct file *file, struct vpu_inst *inst);
1762306a36Sopenharmony_ciint vpu_v4l2_close(struct file *file);
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ciu32 vpu_get_fmt_plane_size(struct vpu_format *fmt, u32 plane_no);
2062306a36Sopenharmony_ciint vpu_try_fmt_common(struct vpu_inst *inst, struct v4l2_format *f, struct vpu_format *fmt);
2162306a36Sopenharmony_ciint vpu_process_output_buffer(struct vpu_inst *inst);
2262306a36Sopenharmony_ciint vpu_process_capture_buffer(struct vpu_inst *inst);
2362306a36Sopenharmony_cistruct vb2_v4l2_buffer *vpu_next_src_buf(struct vpu_inst *inst);
2462306a36Sopenharmony_civoid vpu_skip_frame(struct vpu_inst *inst, int count);
2562306a36Sopenharmony_cistruct vb2_v4l2_buffer *vpu_find_buf_by_sequence(struct vpu_inst *inst, u32 type, u32 sequence);
2662306a36Sopenharmony_cistruct vb2_v4l2_buffer *vpu_find_buf_by_idx(struct vpu_inst *inst, u32 type, u32 idx);
2762306a36Sopenharmony_civoid vpu_v4l2_set_error(struct vpu_inst *inst);
2862306a36Sopenharmony_ciint vpu_notify_eos(struct vpu_inst *inst);
2962306a36Sopenharmony_ciint vpu_notify_source_change(struct vpu_inst *inst);
3062306a36Sopenharmony_ciint vpu_set_last_buffer_dequeued(struct vpu_inst *inst, bool eos);
3162306a36Sopenharmony_civoid vpu_vb2_buffers_return(struct vpu_inst *inst, unsigned int type, enum vb2_buffer_state state);
3262306a36Sopenharmony_ciint vpu_get_num_buffers(struct vpu_inst *inst, u32 type);
3362306a36Sopenharmony_cibool vpu_is_source_empty(struct vpu_inst *inst);
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_cidma_addr_t vpu_get_vb_phy_addr(struct vb2_buffer *vb, u32 plane_no);
3662306a36Sopenharmony_ciunsigned int vpu_get_vb_length(struct vb2_buffer *vb, u32 plane_no);
3762306a36Sopenharmony_cistatic inline struct vpu_format *vpu_get_format(struct vpu_inst *inst, u32 type)
3862306a36Sopenharmony_ci{
3962306a36Sopenharmony_ci	if (V4L2_TYPE_IS_OUTPUT(type))
4062306a36Sopenharmony_ci		return &inst->out_format;
4162306a36Sopenharmony_ci	else
4262306a36Sopenharmony_ci		return &inst->cap_format;
4362306a36Sopenharmony_ci}
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_cistatic inline char *vpu_type_name(u32 type)
4662306a36Sopenharmony_ci{
4762306a36Sopenharmony_ci	return V4L2_TYPE_IS_OUTPUT(type) ? "output" : "capture";
4862306a36Sopenharmony_ci}
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_cistatic inline int vpu_vb_is_codecconfig(struct vb2_v4l2_buffer *vbuf)
5162306a36Sopenharmony_ci{
5262306a36Sopenharmony_ci#ifdef V4L2_BUF_FLAG_CODECCONFIG
5362306a36Sopenharmony_ci	return (vbuf->flags & V4L2_BUF_FLAG_CODECCONFIG) ? 1 : 0;
5462306a36Sopenharmony_ci#else
5562306a36Sopenharmony_ci	return 0;
5662306a36Sopenharmony_ci#endif
5762306a36Sopenharmony_ci}
5862306a36Sopenharmony_ci
5962306a36Sopenharmony_ci#endif
60