72 lines
2.0 KiB
C
72 lines
2.0 KiB
C
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||
|
/*
|
||
|
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
|
||
|
*/
|
||
|
|
||
|
#ifndef __HFI_PLATFORM_H__
|
||
|
#define __HFI_PLATFORM_H__
|
||
|
|
||
|
#include <linux/types.h>
|
||
|
#include <linux/videodev2.h>
|
||
|
|
||
|
#include "hfi.h"
|
||
|
#include "hfi_plat_bufs.h"
|
||
|
#include "hfi_helper.h"
|
||
|
|
||
|
#define MAX_PLANES 4
|
||
|
#define MAX_FMT_ENTRIES 32
|
||
|
#define MAX_CAP_ENTRIES 32
|
||
|
#define MAX_ALLOC_MODE_ENTRIES 16
|
||
|
#define MAX_CODEC_NUM 32
|
||
|
#define MAX_SESSIONS 16
|
||
|
|
||
|
struct raw_formats {
|
||
|
u32 buftype;
|
||
|
u32 fmt;
|
||
|
};
|
||
|
|
||
|
struct hfi_plat_caps {
|
||
|
u32 codec;
|
||
|
u32 domain;
|
||
|
bool cap_bufs_mode_dynamic;
|
||
|
unsigned int num_caps;
|
||
|
struct hfi_capability caps[MAX_CAP_ENTRIES];
|
||
|
unsigned int num_pl;
|
||
|
struct hfi_profile_level pl[HFI_MAX_PROFILE_COUNT];
|
||
|
unsigned int num_fmts;
|
||
|
struct raw_formats fmts[MAX_FMT_ENTRIES];
|
||
|
bool valid; /* used only for Venus v1xx */
|
||
|
};
|
||
|
|
||
|
struct hfi_platform_codec_freq_data {
|
||
|
u32 pixfmt;
|
||
|
u32 session_type;
|
||
|
unsigned long vpp_freq;
|
||
|
unsigned long vsp_freq;
|
||
|
unsigned long low_power_freq;
|
||
|
};
|
||
|
|
||
|
struct hfi_platform {
|
||
|
unsigned long (*codec_vpp_freq)(u32 session_type, u32 codec);
|
||
|
unsigned long (*codec_vsp_freq)(u32 session_type, u32 codec);
|
||
|
unsigned long (*codec_lp_freq)(u32 session_type, u32 codec);
|
||
|
void (*codecs)(u32 *enc_codecs, u32 *dec_codecs, u32 *count);
|
||
|
const struct hfi_plat_caps *(*capabilities)(unsigned int *entries);
|
||
|
int (*bufreq)(struct hfi_plat_buffers_params *params, u32 session_type,
|
||
|
u32 buftype, struct hfi_buffer_requirements *bufreq);
|
||
|
};
|
||
|
|
||
|
extern const struct hfi_platform hfi_plat_v4;
|
||
|
extern const struct hfi_platform hfi_plat_v6;
|
||
|
|
||
|
const struct hfi_platform *hfi_platform_get(enum hfi_version version);
|
||
|
unsigned long hfi_platform_get_codec_vpp_freq(enum hfi_version version, u32 codec,
|
||
|
u32 session_type);
|
||
|
unsigned long hfi_platform_get_codec_vsp_freq(enum hfi_version version, u32 codec,
|
||
|
u32 session_type);
|
||
|
unsigned long hfi_platform_get_codec_lp_freq(enum hfi_version version, u32 codec,
|
||
|
u32 session_type);
|
||
|
int hfi_platform_get_codecs(struct venus_core *core, u32 *enc_codecs, u32 *dec_codecs,
|
||
|
u32 *count);
|
||
|
#endif
|