brintos

brintos / linux-shallow public Read only

0
0
Text · 5.4 KiB · f25d412 Raw
179 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Copyright (c) 2012-2016, The Linux Foundation. All rights reserved.4 * Copyright (C) 2017 Linaro Ltd.5 */6#ifndef __HFI_H__7#define __HFI_H__8 9#include <linux/interrupt.h>10 11#include "hfi_helper.h"12 13#define VIDC_SESSION_TYPE_VPE			014#define VIDC_SESSION_TYPE_ENC			115#define VIDC_SESSION_TYPE_DEC			216 17#define VIDC_RESOURCE_NONE			018#define VIDC_RESOURCE_OCMEM			119#define VIDC_RESOURCE_VMEM			220 21struct hfi_buffer_desc {22	u32 buffer_type;23	u32 buffer_size;24	u32 num_buffers;25	u32 device_addr;26	u32 extradata_addr;27	u32 extradata_size;28	u32 response_required;29};30 31struct hfi_frame_data {32	u32 buffer_type;33	u32 device_addr;34	u32 extradata_addr;35	u64 timestamp;36	u32 flags;37	u32 offset;38	u32 alloc_len;39	u32 filled_len;40	u32 mark_target;41	u32 mark_data;42	u32 clnt_data;43	u32 extradata_size;44};45 46union hfi_get_property {47	struct hfi_profile_level profile_level;48	struct hfi_buffer_requirements bufreq[HFI_BUFFER_TYPE_MAX];49};50 51/* HFI events */52#define EVT_SYS_EVENT_CHANGE			153#define EVT_SYS_WATCHDOG_TIMEOUT		254#define EVT_SYS_ERROR				355#define EVT_SESSION_ERROR			456 57/* HFI event callback structure */58struct hfi_event_data {59	u32 error;60	u32 height;61	u32 width;62	u32 event_type;63	u32 packet_buffer;64	u32 extradata_buffer;65	u32 tag;66	u32 profile;67	u32 level;68	/* the following properties start appear from v4 onwards */69	u32 bit_depth;70	u32 pic_struct;71	u32 colour_space;72	u32 entropy_mode;73	u32 buf_count;74	struct {75		u32 left, top;76		u32 width, height;77	} input_crop;78};79 80/* define core states */81#define CORE_UNINIT				082#define CORE_INIT				183 84/* define instance states */85#define INST_UNINIT				286#define INST_INIT				387#define INST_LOAD_RESOURCES			488#define INST_START				589#define INST_STOP				690#define INST_RELEASE_RESOURCES			791 92struct venus_core;93struct venus_inst;94 95struct hfi_core_ops {96	void (*event_notify)(struct venus_core *core, u32 event);97};98 99struct hfi_inst_ops {100	void (*buf_done)(struct venus_inst *inst, unsigned int buf_type,101			 u32 tag, u32 bytesused, u32 data_offset, u32 flags,102			 u32 hfi_flags, u64 timestamp_us);103	void (*event_notify)(struct venus_inst *inst, u32 event,104			     struct hfi_event_data *data);105	void (*flush_done)(struct venus_inst *inst);106};107 108struct hfi_ops {109	int (*core_init)(struct venus_core *core);110	int (*core_deinit)(struct venus_core *core);111	int (*core_ping)(struct venus_core *core, u32 cookie);112	int (*core_trigger_ssr)(struct venus_core *core, u32 trigger_type);113 114	int (*session_init)(struct venus_inst *inst, u32 session_type,115			    u32 codec);116	int (*session_end)(struct venus_inst *inst);117	int (*session_abort)(struct venus_inst *inst);118	int (*session_flush)(struct venus_inst *inst, u32 flush_mode);119	int (*session_start)(struct venus_inst *inst);120	int (*session_stop)(struct venus_inst *inst);121	int (*session_continue)(struct venus_inst *inst);122	int (*session_etb)(struct venus_inst *inst, struct hfi_frame_data *fd);123	int (*session_ftb)(struct venus_inst *inst, struct hfi_frame_data *fd);124	int (*session_set_buffers)(struct venus_inst *inst,125				   struct hfi_buffer_desc *bd);126	int (*session_unset_buffers)(struct venus_inst *inst,127				     struct hfi_buffer_desc *bd);128	int (*session_load_res)(struct venus_inst *inst);129	int (*session_release_res)(struct venus_inst *inst);130	int (*session_parse_seq_hdr)(struct venus_inst *inst, u32 seq_hdr,131				     u32 seq_hdr_len);132	int (*session_get_seq_hdr)(struct venus_inst *inst, u32 seq_hdr,133				   u32 seq_hdr_len);134	int (*session_set_property)(struct venus_inst *inst, u32 ptype,135				    void *pdata);136	int (*session_get_property)(struct venus_inst *inst, u32 ptype);137 138	int (*resume)(struct venus_core *core);139	int (*suspend)(struct venus_core *core);140 141	/* interrupt operations */142	irqreturn_t (*isr)(struct venus_core *core);143	irqreturn_t (*isr_thread)(struct venus_core *core);144};145 146int hfi_create(struct venus_core *core, const struct hfi_core_ops *ops);147void hfi_destroy(struct venus_core *core);148void hfi_reinit(struct venus_core *core);149 150int hfi_core_init(struct venus_core *core);151int hfi_core_deinit(struct venus_core *core, bool blocking);152int hfi_core_suspend(struct venus_core *core);153int hfi_core_resume(struct venus_core *core, bool force);154int hfi_core_trigger_ssr(struct venus_core *core, u32 type);155int hfi_core_ping(struct venus_core *core);156int hfi_session_create(struct venus_inst *inst, const struct hfi_inst_ops *ops);157void hfi_session_destroy(struct venus_inst *inst);158int hfi_session_init(struct venus_inst *inst, u32 pixfmt);159int hfi_session_deinit(struct venus_inst *inst);160int hfi_session_start(struct venus_inst *inst);161int hfi_session_stop(struct venus_inst *inst);162int hfi_session_continue(struct venus_inst *inst);163int hfi_session_abort(struct venus_inst *inst);164int hfi_session_load_res(struct venus_inst *inst);165int hfi_session_unload_res(struct venus_inst *inst);166int hfi_session_flush(struct venus_inst *inst, u32 type, bool block);167int hfi_session_set_buffers(struct venus_inst *inst,168			    struct hfi_buffer_desc *bd);169int hfi_session_unset_buffers(struct venus_inst *inst,170			      struct hfi_buffer_desc *bd);171int hfi_session_get_property(struct venus_inst *inst, u32 ptype,172			     union hfi_get_property *hprop);173int hfi_session_set_property(struct venus_inst *inst, u32 ptype, void *pdata);174int hfi_session_process_buf(struct venus_inst *inst, struct hfi_frame_data *f);175irqreturn_t hfi_isr_thread(int irq, void *dev_id);176irqreturn_t hfi_isr(int irq, void *dev);177 178#endif179