297 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 __VENUS_HFI_CMDS_H__7#define __VENUS_HFI_CMDS_H__8 9#include "hfi.h"10 11/* commands */12#define HFI_CMD_SYS_INIT 0x1000113#define HFI_CMD_SYS_PC_PREP 0x1000214#define HFI_CMD_SYS_SET_RESOURCE 0x1000315#define HFI_CMD_SYS_RELEASE_RESOURCE 0x1000416#define HFI_CMD_SYS_SET_PROPERTY 0x1000517#define HFI_CMD_SYS_GET_PROPERTY 0x1000618#define HFI_CMD_SYS_SESSION_INIT 0x1000719#define HFI_CMD_SYS_SESSION_END 0x1000820#define HFI_CMD_SYS_SET_BUFFERS 0x1000921#define HFI_CMD_SYS_TEST_SSR 0x1010122 23#define HFI_CMD_SESSION_SET_PROPERTY 0x1100124#define HFI_CMD_SESSION_SET_BUFFERS 0x1100225#define HFI_CMD_SESSION_GET_SEQUENCE_HEADER 0x1100326 27#define HFI_CMD_SYS_SESSION_ABORT 0x21000128#define HFI_CMD_SYS_PING 0x21000229 30#define HFI_CMD_SESSION_LOAD_RESOURCES 0x21100131#define HFI_CMD_SESSION_START 0x21100232#define HFI_CMD_SESSION_STOP 0x21100333#define HFI_CMD_SESSION_EMPTY_BUFFER 0x21100434#define HFI_CMD_SESSION_FILL_BUFFER 0x21100535#define HFI_CMD_SESSION_SUSPEND 0x21100636#define HFI_CMD_SESSION_RESUME 0x21100737#define HFI_CMD_SESSION_FLUSH 0x21100838#define HFI_CMD_SESSION_GET_PROPERTY 0x21100939#define HFI_CMD_SESSION_PARSE_SEQUENCE_HEADER 0x21100a40#define HFI_CMD_SESSION_RELEASE_BUFFERS 0x21100b41#define HFI_CMD_SESSION_RELEASE_RESOURCES 0x21100c42#define HFI_CMD_SESSION_CONTINUE 0x21100d43#define HFI_CMD_SESSION_SYNC 0x21100e44 45/* command packets */46struct hfi_sys_init_pkt {47 struct hfi_pkt_hdr hdr;48 u32 arch_type;49};50 51struct hfi_sys_pc_prep_pkt {52 struct hfi_pkt_hdr hdr;53};54 55struct hfi_sys_set_resource_pkt {56 struct hfi_pkt_hdr hdr;57 u32 resource_handle;58 u32 resource_type;59 u32 resource_data[];60};61 62struct hfi_sys_release_resource_pkt {63 struct hfi_pkt_hdr hdr;64 u32 resource_type;65 u32 resource_handle;66};67 68struct hfi_sys_set_property_pkt {69 struct hfi_pkt_hdr hdr;70 u32 num_properties;71 u32 data[];72};73 74struct hfi_sys_get_property_pkt {75 struct hfi_pkt_hdr hdr;76 u32 num_properties;77 u32 data;78};79 80struct hfi_sys_set_buffers_pkt {81 struct hfi_pkt_hdr hdr;82 u32 buffer_type;83 u32 buffer_size;84 u32 num_buffers;85 u32 buffer_addr[];86};87 88struct hfi_sys_ping_pkt {89 struct hfi_pkt_hdr hdr;90 u32 client_data;91};92 93struct hfi_session_init_pkt {94 struct hfi_session_hdr_pkt shdr;95 u32 session_domain;96 u32 session_codec;97};98 99struct hfi_session_end_pkt {100 struct hfi_session_hdr_pkt shdr;101};102 103struct hfi_session_abort_pkt {104 struct hfi_session_hdr_pkt shdr;105};106 107struct hfi_session_set_property_pkt {108 struct hfi_session_hdr_pkt shdr;109 u32 num_properties;110 u32 data[];111};112 113struct hfi_session_set_buffers_pkt {114 struct hfi_session_hdr_pkt shdr;115 u32 buffer_type;116 u32 buffer_size;117 u32 extradata_size;118 u32 min_buffer_size;119 u32 num_buffers;120 u32 buffer_info[];121};122 123struct hfi_session_get_sequence_header_pkt {124 struct hfi_session_hdr_pkt shdr;125 u32 buffer_len;126 u32 packet_buffer;127};128 129struct hfi_session_load_resources_pkt {130 struct hfi_session_hdr_pkt shdr;131};132 133struct hfi_session_start_pkt {134 struct hfi_session_hdr_pkt shdr;135};136 137struct hfi_session_stop_pkt {138 struct hfi_session_hdr_pkt shdr;139};140 141struct hfi_session_empty_buffer_compressed_pkt {142 struct hfi_session_hdr_pkt shdr;143 u32 time_stamp_hi;144 u32 time_stamp_lo;145 u32 flags;146 u32 mark_target;147 u32 mark_data;148 u32 offset;149 u32 alloc_len;150 u32 filled_len;151 u32 input_tag;152 u32 packet_buffer;153 u32 extradata_buffer;154 u32 data;155};156 157struct hfi_session_empty_buffer_uncompressed_plane0_pkt {158 struct hfi_session_hdr_pkt shdr;159 u32 view_id;160 u32 time_stamp_hi;161 u32 time_stamp_lo;162 u32 flags;163 u32 mark_target;164 u32 mark_data;165 u32 alloc_len;166 u32 filled_len;167 u32 offset;168 u32 input_tag;169 u32 packet_buffer;170 u32 extradata_buffer;171 u32 data;172};173 174struct hfi_session_empty_buffer_uncompressed_plane1_pkt {175 u32 flags;176 u32 alloc_len;177 u32 filled_len;178 u32 offset;179 u32 packet_buffer2;180 u32 data;181};182 183struct hfi_session_empty_buffer_uncompressed_plane2_pkt {184 u32 flags;185 u32 alloc_len;186 u32 filled_len;187 u32 offset;188 u32 packet_buffer3;189 u32 data;190};191 192struct hfi_session_fill_buffer_pkt {193 struct hfi_session_hdr_pkt shdr;194 u32 stream_id;195 u32 offset;196 u32 alloc_len;197 u32 filled_len;198 u32 output_tag;199 u32 packet_buffer;200 u32 extradata_buffer;201 u32 data;202};203 204struct hfi_session_flush_pkt {205 struct hfi_session_hdr_pkt shdr;206 u32 flush_type;207};208 209struct hfi_session_suspend_pkt {210 struct hfi_session_hdr_pkt shdr;211};212 213struct hfi_session_resume_pkt {214 struct hfi_session_hdr_pkt shdr;215};216 217struct hfi_session_get_property_pkt {218 struct hfi_session_hdr_pkt shdr;219 u32 num_properties;220 u32 data;221};222 223struct hfi_session_release_buffer_pkt {224 struct hfi_session_hdr_pkt shdr;225 u32 buffer_type;226 u32 buffer_size;227 u32 extradata_size;228 u32 response_req;229 u32 num_buffers;230 u32 buffer_info[] __counted_by(num_buffers);231};232 233struct hfi_session_release_resources_pkt {234 struct hfi_session_hdr_pkt shdr;235};236 237struct hfi_session_parse_sequence_header_pkt {238 struct hfi_session_hdr_pkt shdr;239 u32 header_len;240 u32 packet_buffer;241};242 243struct hfi_sfr {244 u32 buf_size;245 u8 data[] __counted_by(buf_size);246};247 248struct hfi_sys_test_ssr_pkt {249 struct hfi_pkt_hdr hdr;250 u32 trigger_type;251};252 253void pkt_set_version(enum hfi_version version);254 255void pkt_sys_init(struct hfi_sys_init_pkt *pkt, u32 arch_type);256void pkt_sys_pc_prep(struct hfi_sys_pc_prep_pkt *pkt);257void pkt_sys_idle_indicator(struct hfi_sys_set_property_pkt *pkt, u32 enable);258void pkt_sys_power_control(struct hfi_sys_set_property_pkt *pkt, u32 enable);259void pkt_sys_ubwc_config(struct hfi_sys_set_property_pkt *pkt, const struct hfi_ubwc_config *hfi);260int pkt_sys_set_resource(struct hfi_sys_set_resource_pkt *pkt, u32 id, u32 size,261 u32 addr, void *cookie);262int pkt_sys_unset_resource(struct hfi_sys_release_resource_pkt *pkt, u32 id,263 u32 size, void *cookie);264void pkt_sys_debug_config(struct hfi_sys_set_property_pkt *pkt, u32 mode,265 u32 config);266void pkt_sys_coverage_config(struct hfi_sys_set_property_pkt *pkt, u32 mode);267void pkt_sys_ping(struct hfi_sys_ping_pkt *pkt, u32 cookie);268void pkt_sys_image_version(struct hfi_sys_get_property_pkt *pkt);269int pkt_sys_ssr_cmd(struct hfi_sys_test_ssr_pkt *pkt, u32 trigger_type);270int pkt_session_init(struct hfi_session_init_pkt *pkt, void *cookie,271 u32 session_type, u32 codec);272void pkt_session_cmd(struct hfi_session_pkt *pkt, u32 pkt_type, void *cookie);273int pkt_session_set_buffers(struct hfi_session_set_buffers_pkt *pkt,274 void *cookie, struct hfi_buffer_desc *bd);275int pkt_session_unset_buffers(struct hfi_session_release_buffer_pkt *pkt,276 void *cookie, struct hfi_buffer_desc *bd);277int pkt_session_etb_decoder(struct hfi_session_empty_buffer_compressed_pkt *pkt,278 void *cookie, struct hfi_frame_data *input_frame);279int pkt_session_etb_encoder(280 struct hfi_session_empty_buffer_uncompressed_plane0_pkt *pkt,281 void *cookie, struct hfi_frame_data *input_frame);282int pkt_session_ftb(struct hfi_session_fill_buffer_pkt *pkt,283 void *cookie, struct hfi_frame_data *output_frame);284int pkt_session_parse_seq_header(285 struct hfi_session_parse_sequence_header_pkt *pkt,286 void *cookie, u32 seq_hdr, u32 seq_hdr_len);287int pkt_session_get_seq_hdr(struct hfi_session_get_sequence_header_pkt *pkt,288 void *cookie, u32 seq_hdr, u32 seq_hdr_len);289int pkt_session_flush(struct hfi_session_flush_pkt *pkt, void *cookie,290 u32 flush_mode);291int pkt_session_get_property(struct hfi_session_get_property_pkt *pkt,292 void *cookie, u32 ptype);293int pkt_session_set_property(struct hfi_session_set_property_pkt *pkt,294 void *cookie, u32 ptype, void *pdata);295 296#endif297