1
0
mirror of https://github.com/physwizz/a155-U-u1.git synced 2025-09-26 19:04:54 +00:00
Files
physwizz 99537be4e2 first
2024-03-11 06:53:12 +11:00

83 lines
2.1 KiB
C

/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (c) 2020 MediaTek Inc.
*/
#ifndef __VPU_ALGO_H__
#define __VPU_ALGO_H__
#include <linux/slab.h>
#include "apusys_device.h"
#include "vpu_mem.h"
#include "vpu_ioctl.h"
enum {
VPU_PROP_RESERVED,
VPU_NUM_PROPS
};
struct vpu_device;
struct vpu_algo_list;
extern const size_t g_vpu_prop_type_size[VPU_NUM_PROP_TYPES];
void vpu_init_algo(void);
/* vpu_algo.c */
struct __vpu_algo *vpu_alg_alloc(struct vpu_algo_list *al);
void vpu_alg_free(struct __vpu_algo *alg);
/* vpu_hw.c */
int vpu_init_dev_algo(struct platform_device *pdev, struct vpu_device *vd);
void vpu_exit_dev_algo(struct platform_device *pdev, struct vpu_device *vd);
int vpu_hw_alg_init(struct vpu_algo_list *al, struct __vpu_algo *alg);
struct __vpu_algo {
struct vpu_algo a;
struct vpu_iova prog; /* preloaded and dynamic loaded algo */
struct vpu_iova iram; /* preloaded algo iram */
bool builtin; /* from vpu binary */
struct kref ref; /* reference count */
struct list_head list; /* link to device algo list */
struct vpu_algo_list *al;
};
struct vpu_algo_ops {
/* driver controls */
int (*load)(struct vpu_algo_list *al, const char *name,
struct __vpu_algo *alg, int prio);
void (*unload)(struct vpu_algo_list *al, int prio);
struct __vpu_algo * (*get)(struct vpu_algo_list *al,
const char *name, struct __vpu_algo *alg);
void (*put)(struct __vpu_algo *alg);
void (*release)(struct kref *ref);
/* device controls */
int (*hw_init)(struct vpu_algo_list *al, struct __vpu_algo *alg);
};
extern struct vpu_algo_ops vpu_normal_aops;
extern struct vpu_algo_ops vpu_prelaod_aops;
struct vpu_algo_list {
char name[ALGO_NAMELEN];
spinlock_t lock;
struct list_head a;
unsigned int cnt; /* # of algorithms */
struct vpu_device *vd;
struct vpu_algo_ops *ops;
};
static inline void
vpu_algo_list_init(struct vpu_device *vd, struct vpu_algo_list *al,
struct vpu_algo_ops *ops, const char *name) {
if (!vd || !al)
return;
strncpy(al->name, name, (ALGO_NAMELEN - 1));
spin_lock_init(&al->lock);
INIT_LIST_HEAD(&al->a);
al->cnt = 0;
al->vd = vd;
al->ops = ops;
}
#endif