brintos

brintos / linux-shallow public Read only

0
0
Text · 2.5 KiB · 5751d01 Raw
121 lines · c
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	012#define WHICH_CAP_MAX	113#define WHICH_CAP_STEP	214 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#endif121