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