1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright 2020-2021 NXP 4 */ 5 6 #ifndef _AMPHION_VPU_HELPERS_H 7 #define _AMPHION_VPU_HELPERS_H 8 9 struct vpu_pair { 10 u32 src; 11 u32 dst; 12 }; 13 14 #define MAKE_TIMESTAMP(s, ns) (((s32)(s) * NSEC_PER_SEC) + (ns)) 15 #define VPU_INVALID_TIMESTAMP MAKE_TIMESTAMP(-1, 0) 16 17 int vpu_helper_find_in_array_u8(const u8 *array, u32 size, u32 x); 18 bool vpu_helper_check_type(struct vpu_inst *inst, u32 type); 19 const struct vpu_format *vpu_helper_find_format(struct vpu_inst *inst, u32 type, u32 pixelfmt); 20 const struct vpu_format *vpu_helper_enum_format(struct vpu_inst *inst, u32 type, int index); 21 u32 vpu_helper_valid_frame_width(struct vpu_inst *inst, u32 width); 22 u32 vpu_helper_valid_frame_height(struct vpu_inst *inst, u32 height); 23 u32 vpu_helper_get_plane_size(u32 fmt, u32 width, u32 height, int plane_no, 24 u32 stride, u32 interlaced, u32 *pbl); 25 u32 vpu_helper_copy_from_stream_buffer(struct vpu_buffer *stream_buffer, 26 u32 *rptr, u32 size, void *dst); 27 u32 vpu_helper_copy_to_stream_buffer(struct vpu_buffer *stream_buffer, 28 u32 *wptr, u32 size, void *src); 29 u32 vpu_helper_memset_stream_buffer(struct vpu_buffer *stream_buffer, 30 u32 *wptr, u8 val, u32 size); 31 u32 vpu_helper_get_free_space(struct vpu_inst *inst); 32 u32 vpu_helper_get_used_space(struct vpu_inst *inst); 33 int vpu_helper_g_volatile_ctrl(struct v4l2_ctrl *ctrl); 34 void vpu_helper_get_kmp_next(const u8 *pattern, int *next, int size); 35 int vpu_helper_kmp_search(u8 *s, int s_len, const u8 *p, int p_len, int *next); 36 int vpu_helper_kmp_search_in_stream_buffer(struct vpu_buffer *stream_buffer, 37 u32 offset, int bytesused, 38 const u8 *p, int p_len, int *next); 39 int vpu_helper_find_startcode(struct vpu_buffer *stream_buffer, 40 u32 pixelformat, u32 offset, u32 bytesused); 41 42 static inline u32 vpu_helper_step_walk(struct vpu_buffer *stream_buffer, u32 pos, u32 step) 43 { 44 pos += step; 45 if (pos > stream_buffer->phys + stream_buffer->length) 46 pos -= stream_buffer->length; 47 48 return pos; 49 } 50 51 static inline u8 vpu_helper_read_byte(struct vpu_buffer *stream_buffer, u32 pos) 52 { 53 u8 *pdata = (u8 *)stream_buffer->virt; 54 55 return pdata[pos % stream_buffer->length]; 56 } 57 58 int vpu_color_check_primaries(u32 primaries); 59 int vpu_color_check_transfers(u32 transfers); 60 int vpu_color_check_matrix(u32 matrix); 61 int vpu_color_check_full_range(u32 full_range); 62 u32 vpu_color_cvrt_primaries_v2i(u32 primaries); 63 u32 vpu_color_cvrt_primaries_i2v(u32 primaries); 64 u32 vpu_color_cvrt_transfers_v2i(u32 transfers); 65 u32 vpu_color_cvrt_transfers_i2v(u32 transfers); 66 u32 vpu_color_cvrt_matrix_v2i(u32 matrix); 67 u32 vpu_color_cvrt_matrix_i2v(u32 matrix); 68 u32 vpu_color_cvrt_full_range_v2i(u32 full_range); 69 u32 vpu_color_cvrt_full_range_i2v(u32 full_range); 70 int vpu_color_get_default(u32 primaries, u32 *ptransfers, u32 *pmatrix, u32 *pfull_range); 71 72 int vpu_find_dst_by_src(struct vpu_pair *pairs, u32 cnt, u32 src); 73 int vpu_find_src_by_dst(struct vpu_pair *pairs, u32 cnt, u32 dst); 74 #endif 75