linux/drivers/media/platform/qcom/venus/hfi.h

/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.
 * Copyright (C) 2017 Linaro Ltd.
 */
#ifndef __HFI_H__
#define __HFI_H__

#include <linux/interrupt.h>

#include "hfi_helper.h"

#define VIDC_SESSION_TYPE_VPE
#define VIDC_SESSION_TYPE_ENC
#define VIDC_SESSION_TYPE_DEC

#define VIDC_RESOURCE_NONE
#define VIDC_RESOURCE_OCMEM
#define VIDC_RESOURCE_VMEM

struct hfi_buffer_desc {};

struct hfi_frame_data {};

hfi_get_property;

/* HFI events */
#define EVT_SYS_EVENT_CHANGE
#define EVT_SYS_WATCHDOG_TIMEOUT
#define EVT_SYS_ERROR
#define EVT_SESSION_ERROR

/* HFI event callback structure */
struct hfi_event_data {};

/* define core states */
#define CORE_UNINIT
#define CORE_INIT

/* define instance states */
#define INST_UNINIT
#define INST_INIT
#define INST_LOAD_RESOURCES
#define INST_START
#define INST_STOP
#define INST_RELEASE_RESOURCES

struct venus_core;
struct venus_inst;

struct hfi_core_ops {};

struct hfi_inst_ops {};

struct hfi_ops {};

int hfi_create(struct venus_core *core, const struct hfi_core_ops *ops);
void hfi_destroy(struct venus_core *core);
void hfi_reinit(struct venus_core *core);

int hfi_core_init(struct venus_core *core);
int hfi_core_deinit(struct venus_core *core, bool blocking);
int hfi_core_suspend(struct venus_core *core);
int hfi_core_resume(struct venus_core *core, bool force);
int hfi_core_trigger_ssr(struct venus_core *core, u32 type);
int hfi_core_ping(struct venus_core *core);
int hfi_session_create(struct venus_inst *inst, const struct hfi_inst_ops *ops);
void hfi_session_destroy(struct venus_inst *inst);
int hfi_session_init(struct venus_inst *inst, u32 pixfmt);
int hfi_session_deinit(struct venus_inst *inst);
int hfi_session_start(struct venus_inst *inst);
int hfi_session_stop(struct venus_inst *inst);
int hfi_session_continue(struct venus_inst *inst);
int hfi_session_abort(struct venus_inst *inst);
int hfi_session_load_res(struct venus_inst *inst);
int hfi_session_unload_res(struct venus_inst *inst);
int hfi_session_flush(struct venus_inst *inst, u32 type, bool block);
int hfi_session_set_buffers(struct venus_inst *inst,
			    struct hfi_buffer_desc *bd);
int hfi_session_unset_buffers(struct venus_inst *inst,
			      struct hfi_buffer_desc *bd);
int hfi_session_get_property(struct venus_inst *inst, u32 ptype,
			     union hfi_get_property *hprop);
int hfi_session_set_property(struct venus_inst *inst, u32 ptype, void *pdata);
int hfi_session_process_buf(struct venus_inst *inst, struct hfi_frame_data *f);
irqreturn_t hfi_isr_thread(int irq, void *dev_id);
irqreturn_t hfi_isr(int irq, void *dev);

#endif