hfi_parser.h (2553B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* Copyright (C) 2018 Linaro Ltd. */ 3#ifndef __VENUS_HFI_PARSER_H__ 4#define __VENUS_HFI_PARSER_H__ 5 6#include "core.h" 7 8u32 hfi_parser(struct venus_core *core, struct venus_inst *inst, 9 void *buf, u32 size); 10 11#define WHICH_CAP_MIN 0 12#define WHICH_CAP_MAX 1 13#define WHICH_CAP_STEP 2 14 15static inline u32 get_cap(struct venus_inst *inst, u32 type, u32 which) 16{ 17 struct venus_core *core = inst->core; 18 struct hfi_capability *cap = NULL; 19 struct hfi_plat_caps *caps; 20 unsigned int i; 21 22 caps = venus_caps_by_codec(core, inst->hfi_codec, inst->session_type); 23 if (!caps) 24 return 0; 25 26 for (i = 0; i < caps->num_caps; i++) { 27 if (caps->caps[i].capability_type == type) { 28 cap = &caps->caps[i]; 29 break; 30 } 31 } 32 33 if (!cap) 34 return 0; 35 36 switch (which) { 37 case WHICH_CAP_MIN: 38 return cap->min; 39 case WHICH_CAP_MAX: 40 return cap->max; 41 case WHICH_CAP_STEP: 42 return cap->step_size; 43 default: 44 break; 45 } 46 47 return 0; 48} 49 50static inline u32 cap_min(struct venus_inst *inst, u32 type) 51{ 52 return get_cap(inst, type, WHICH_CAP_MIN); 53} 54 55static inline u32 cap_max(struct venus_inst *inst, u32 type) 56{ 57 return get_cap(inst, type, WHICH_CAP_MAX); 58} 59 60static inline u32 cap_step(struct venus_inst *inst, u32 type) 61{ 62 return get_cap(inst, type, WHICH_CAP_STEP); 63} 64 65static inline u32 frame_width_min(struct venus_inst *inst) 66{ 67 return cap_min(inst, HFI_CAPABILITY_FRAME_WIDTH); 68} 69 70static inline u32 frame_width_max(struct venus_inst *inst) 71{ 72 return cap_max(inst, HFI_CAPABILITY_FRAME_WIDTH); 73} 74 75static inline u32 frame_width_step(struct venus_inst *inst) 76{ 77 return cap_step(inst, HFI_CAPABILITY_FRAME_WIDTH); 78} 79 80static inline u32 frame_height_min(struct venus_inst *inst) 81{ 82 return cap_min(inst, HFI_CAPABILITY_FRAME_HEIGHT); 83} 84 85static inline u32 frame_height_max(struct venus_inst *inst) 86{ 87 return cap_max(inst, HFI_CAPABILITY_FRAME_HEIGHT); 88} 89 90static inline u32 frame_height_step(struct venus_inst *inst) 91{ 92 return cap_step(inst, HFI_CAPABILITY_FRAME_HEIGHT); 93} 94 95static inline u32 frate_min(struct venus_inst *inst) 96{ 97 return cap_min(inst, HFI_CAPABILITY_FRAMERATE); 98} 99 100static inline u32 frate_max(struct venus_inst *inst) 101{ 102 return cap_max(inst, HFI_CAPABILITY_FRAMERATE); 103} 104 105static inline u32 frate_step(struct venus_inst *inst) 106{ 107 return cap_step(inst, HFI_CAPABILITY_FRAMERATE); 108} 109 110static inline u32 core_num_max(struct venus_inst *inst) 111{ 112 return cap_max(inst, HFI_CAPABILITY_MAX_VIDEOCORES); 113} 114 115static inline u32 mbs_per_frame_max(struct venus_inst *inst) 116{ 117 return cap_max(inst, HFI_CAPABILITY_MBS_PER_FRAME); 118} 119 120#endif