65 lines
1.7 KiB
C
65 lines
1.7 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (c) 2020 MediaTek Inc.
|
|
*/
|
|
|
|
#ifndef __MTK_APU_MDW_RV_H__
|
|
#define __MTK_APU_MDW_RV_H__
|
|
|
|
#include "mdw.h"
|
|
#include "mdw_rv_msg.h"
|
|
|
|
struct mdw_rv_dev;
|
|
|
|
struct mdw_rv_cmd {
|
|
struct mdw_cmd *c;
|
|
struct mdw_mem *cb;
|
|
struct list_head u_item; // to usr list
|
|
struct mdw_ipi_msg_sync s_msg; // for ipi
|
|
uint64_t start_ts_ns; // create time at ap
|
|
};
|
|
|
|
struct mdw_rv_cmd_func {
|
|
struct mdw_rv_cmd *(*create)(struct mdw_fpriv *mpriv,
|
|
struct mdw_cmd *c);
|
|
int (*delete)(struct mdw_cmd *c);
|
|
void (*done)(struct mdw_rv_cmd *rc, int ret);
|
|
};
|
|
|
|
struct mdw_rv_dev {
|
|
struct rpmsg_device *rpdev;
|
|
struct rpmsg_endpoint *ept;
|
|
struct mdw_device *mdev;
|
|
|
|
struct mdw_ipi_param param;
|
|
|
|
struct list_head s_list; // for sync msg
|
|
struct mutex msg_mtx;
|
|
struct mutex mtx;
|
|
|
|
struct work_struct init_wk; // init wq to avoid ipi conflict
|
|
|
|
const struct mdw_rv_cmd_func *cmd_funcs;
|
|
|
|
/* rv information */
|
|
uint32_t rv_version;
|
|
unsigned long dev_mask[BITS_TO_LONGS(MDW_DEV_MAX)];
|
|
uint8_t dev_num[MDW_DEV_MAX];
|
|
unsigned long mem_mask[BITS_TO_LONGS(MDW_MEM_TYPE_MAX)];
|
|
struct mdw_mem minfos[MDW_MEM_TYPE_MAX];
|
|
uint8_t meta_data[MDW_DEV_MAX][MDW_DEV_META_SIZE];
|
|
struct mdw_stat *stat;
|
|
uint64_t stat_iova;
|
|
};
|
|
|
|
int mdw_rv_dev_init(struct mdw_device *mdev);
|
|
void mdw_rv_dev_deinit(struct mdw_device *mdev);
|
|
int mdw_rv_dev_run_cmd(struct mdw_fpriv *mpriv, struct mdw_cmd *c);
|
|
int mdw_rv_dev_set_param(struct mdw_rv_dev *mrdev, uint32_t idx, uint32_t val);
|
|
int mdw_rv_dev_get_param(struct mdw_rv_dev *mrdev, uint32_t idx, uint32_t *val);
|
|
|
|
/* rv cmd functions */
|
|
extern const struct mdw_rv_cmd_func mdw_rv_cmd_func_v2;
|
|
extern const struct mdw_rv_cmd_func mdw_rv_cmd_func_v3;
|
|
|
|
#endif
|