197fb5e8dSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 209c2845eSStanimir Varbanov /* 309c2845eSStanimir Varbanov * Copyright (c) 2012-2016, The Linux Foundation. All rights reserved. 409c2845eSStanimir Varbanov * Copyright (C) 2017 Linaro Ltd. 509c2845eSStanimir Varbanov */ 609c2845eSStanimir Varbanov #ifndef __VENUS_HFI_CMDS_H__ 709c2845eSStanimir Varbanov #define __VENUS_HFI_CMDS_H__ 809c2845eSStanimir Varbanov 909c2845eSStanimir Varbanov #include "hfi.h" 1009c2845eSStanimir Varbanov 1109c2845eSStanimir Varbanov /* commands */ 1209c2845eSStanimir Varbanov #define HFI_CMD_SYS_INIT 0x10001 1309c2845eSStanimir Varbanov #define HFI_CMD_SYS_PC_PREP 0x10002 1409c2845eSStanimir Varbanov #define HFI_CMD_SYS_SET_RESOURCE 0x10003 1509c2845eSStanimir Varbanov #define HFI_CMD_SYS_RELEASE_RESOURCE 0x10004 1609c2845eSStanimir Varbanov #define HFI_CMD_SYS_SET_PROPERTY 0x10005 1709c2845eSStanimir Varbanov #define HFI_CMD_SYS_GET_PROPERTY 0x10006 1809c2845eSStanimir Varbanov #define HFI_CMD_SYS_SESSION_INIT 0x10007 1909c2845eSStanimir Varbanov #define HFI_CMD_SYS_SESSION_END 0x10008 2009c2845eSStanimir Varbanov #define HFI_CMD_SYS_SET_BUFFERS 0x10009 2109c2845eSStanimir Varbanov #define HFI_CMD_SYS_TEST_SSR 0x10101 2209c2845eSStanimir Varbanov 2309c2845eSStanimir Varbanov #define HFI_CMD_SESSION_SET_PROPERTY 0x11001 2409c2845eSStanimir Varbanov #define HFI_CMD_SESSION_SET_BUFFERS 0x11002 2509c2845eSStanimir Varbanov #define HFI_CMD_SESSION_GET_SEQUENCE_HEADER 0x11003 2609c2845eSStanimir Varbanov 2709c2845eSStanimir Varbanov #define HFI_CMD_SYS_SESSION_ABORT 0x210001 2809c2845eSStanimir Varbanov #define HFI_CMD_SYS_PING 0x210002 2909c2845eSStanimir Varbanov 3009c2845eSStanimir Varbanov #define HFI_CMD_SESSION_LOAD_RESOURCES 0x211001 3109c2845eSStanimir Varbanov #define HFI_CMD_SESSION_START 0x211002 3209c2845eSStanimir Varbanov #define HFI_CMD_SESSION_STOP 0x211003 3309c2845eSStanimir Varbanov #define HFI_CMD_SESSION_EMPTY_BUFFER 0x211004 3409c2845eSStanimir Varbanov #define HFI_CMD_SESSION_FILL_BUFFER 0x211005 3509c2845eSStanimir Varbanov #define HFI_CMD_SESSION_SUSPEND 0x211006 3609c2845eSStanimir Varbanov #define HFI_CMD_SESSION_RESUME 0x211007 3709c2845eSStanimir Varbanov #define HFI_CMD_SESSION_FLUSH 0x211008 3809c2845eSStanimir Varbanov #define HFI_CMD_SESSION_GET_PROPERTY 0x211009 3909c2845eSStanimir Varbanov #define HFI_CMD_SESSION_PARSE_SEQUENCE_HEADER 0x21100a 4009c2845eSStanimir Varbanov #define HFI_CMD_SESSION_RELEASE_BUFFERS 0x21100b 4109c2845eSStanimir Varbanov #define HFI_CMD_SESSION_RELEASE_RESOURCES 0x21100c 4209c2845eSStanimir Varbanov #define HFI_CMD_SESSION_CONTINUE 0x21100d 4309c2845eSStanimir Varbanov #define HFI_CMD_SESSION_SYNC 0x21100e 4409c2845eSStanimir Varbanov 4509c2845eSStanimir Varbanov /* command packets */ 4609c2845eSStanimir Varbanov struct hfi_sys_init_pkt { 4709c2845eSStanimir Varbanov struct hfi_pkt_hdr hdr; 4809c2845eSStanimir Varbanov u32 arch_type; 4909c2845eSStanimir Varbanov }; 5009c2845eSStanimir Varbanov 5109c2845eSStanimir Varbanov struct hfi_sys_pc_prep_pkt { 5209c2845eSStanimir Varbanov struct hfi_pkt_hdr hdr; 5309c2845eSStanimir Varbanov }; 5409c2845eSStanimir Varbanov 5509c2845eSStanimir Varbanov struct hfi_sys_set_resource_pkt { 5609c2845eSStanimir Varbanov struct hfi_pkt_hdr hdr; 5709c2845eSStanimir Varbanov u32 resource_handle; 5809c2845eSStanimir Varbanov u32 resource_type; 59a0eadbe9SGustavo A. R. Silva u32 resource_data[]; 6009c2845eSStanimir Varbanov }; 6109c2845eSStanimir Varbanov 6209c2845eSStanimir Varbanov struct hfi_sys_release_resource_pkt { 6309c2845eSStanimir Varbanov struct hfi_pkt_hdr hdr; 6409c2845eSStanimir Varbanov u32 resource_type; 6509c2845eSStanimir Varbanov u32 resource_handle; 6609c2845eSStanimir Varbanov }; 6709c2845eSStanimir Varbanov 6809c2845eSStanimir Varbanov struct hfi_sys_set_property_pkt { 6909c2845eSStanimir Varbanov struct hfi_pkt_hdr hdr; 7009c2845eSStanimir Varbanov u32 num_properties; 7151bb3989SGustavo A. R. Silva u32 data[]; 7209c2845eSStanimir Varbanov }; 7309c2845eSStanimir Varbanov 7409c2845eSStanimir Varbanov struct hfi_sys_get_property_pkt { 7509c2845eSStanimir Varbanov struct hfi_pkt_hdr hdr; 7609c2845eSStanimir Varbanov u32 num_properties; 77d604a7bfSRicardo Ribalda u32 data; 7809c2845eSStanimir Varbanov }; 7909c2845eSStanimir Varbanov 8009c2845eSStanimir Varbanov struct hfi_sys_set_buffers_pkt { 8109c2845eSStanimir Varbanov struct hfi_pkt_hdr hdr; 8209c2845eSStanimir Varbanov u32 buffer_type; 8309c2845eSStanimir Varbanov u32 buffer_size; 8409c2845eSStanimir Varbanov u32 num_buffers; 85*909dc5acSRicardo Ribalda u32 buffer_addr[]; 8609c2845eSStanimir Varbanov }; 8709c2845eSStanimir Varbanov 8809c2845eSStanimir Varbanov struct hfi_sys_ping_pkt { 8909c2845eSStanimir Varbanov struct hfi_pkt_hdr hdr; 9009c2845eSStanimir Varbanov u32 client_data; 9109c2845eSStanimir Varbanov }; 9209c2845eSStanimir Varbanov 9309c2845eSStanimir Varbanov struct hfi_session_init_pkt { 9409c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 9509c2845eSStanimir Varbanov u32 session_domain; 9609c2845eSStanimir Varbanov u32 session_codec; 9709c2845eSStanimir Varbanov }; 9809c2845eSStanimir Varbanov 9909c2845eSStanimir Varbanov struct hfi_session_end_pkt { 10009c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 10109c2845eSStanimir Varbanov }; 10209c2845eSStanimir Varbanov 10309c2845eSStanimir Varbanov struct hfi_session_abort_pkt { 10409c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 10509c2845eSStanimir Varbanov }; 10609c2845eSStanimir Varbanov 10709c2845eSStanimir Varbanov struct hfi_session_set_property_pkt { 10809c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 10909c2845eSStanimir Varbanov u32 num_properties; 110380f3bbdSGustavo A. R. Silva u32 data[]; 11109c2845eSStanimir Varbanov }; 11209c2845eSStanimir Varbanov 11309c2845eSStanimir Varbanov struct hfi_session_set_buffers_pkt { 11409c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 11509c2845eSStanimir Varbanov u32 buffer_type; 11609c2845eSStanimir Varbanov u32 buffer_size; 11709c2845eSStanimir Varbanov u32 extradata_size; 11809c2845eSStanimir Varbanov u32 min_buffer_size; 11909c2845eSStanimir Varbanov u32 num_buffers; 12040c02059SGustavo A. R. Silva u32 buffer_info[]; 12109c2845eSStanimir Varbanov }; 12209c2845eSStanimir Varbanov 12309c2845eSStanimir Varbanov struct hfi_session_get_sequence_header_pkt { 12409c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 12509c2845eSStanimir Varbanov u32 buffer_len; 12609c2845eSStanimir Varbanov u32 packet_buffer; 12709c2845eSStanimir Varbanov }; 12809c2845eSStanimir Varbanov 12909c2845eSStanimir Varbanov struct hfi_session_load_resources_pkt { 13009c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 13109c2845eSStanimir Varbanov }; 13209c2845eSStanimir Varbanov 13309c2845eSStanimir Varbanov struct hfi_session_start_pkt { 13409c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 13509c2845eSStanimir Varbanov }; 13609c2845eSStanimir Varbanov 13709c2845eSStanimir Varbanov struct hfi_session_stop_pkt { 13809c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 13909c2845eSStanimir Varbanov }; 14009c2845eSStanimir Varbanov 14109c2845eSStanimir Varbanov struct hfi_session_empty_buffer_compressed_pkt { 14209c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 14309c2845eSStanimir Varbanov u32 time_stamp_hi; 14409c2845eSStanimir Varbanov u32 time_stamp_lo; 14509c2845eSStanimir Varbanov u32 flags; 14609c2845eSStanimir Varbanov u32 mark_target; 14709c2845eSStanimir Varbanov u32 mark_data; 14809c2845eSStanimir Varbanov u32 offset; 14909c2845eSStanimir Varbanov u32 alloc_len; 15009c2845eSStanimir Varbanov u32 filled_len; 15109c2845eSStanimir Varbanov u32 input_tag; 15209c2845eSStanimir Varbanov u32 packet_buffer; 15309c2845eSStanimir Varbanov u32 extradata_buffer; 154fd694882SRicardo Ribalda u32 data; 15509c2845eSStanimir Varbanov }; 15609c2845eSStanimir Varbanov 15709c2845eSStanimir Varbanov struct hfi_session_empty_buffer_uncompressed_plane0_pkt { 15809c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 15909c2845eSStanimir Varbanov u32 view_id; 16009c2845eSStanimir Varbanov u32 time_stamp_hi; 16109c2845eSStanimir Varbanov u32 time_stamp_lo; 16209c2845eSStanimir Varbanov u32 flags; 16309c2845eSStanimir Varbanov u32 mark_target; 16409c2845eSStanimir Varbanov u32 mark_data; 16509c2845eSStanimir Varbanov u32 alloc_len; 16609c2845eSStanimir Varbanov u32 filled_len; 16709c2845eSStanimir Varbanov u32 offset; 16809c2845eSStanimir Varbanov u32 input_tag; 16909c2845eSStanimir Varbanov u32 packet_buffer; 17009c2845eSStanimir Varbanov u32 extradata_buffer; 1713a5fde16SRicardo Ribalda u32 data; 17209c2845eSStanimir Varbanov }; 17309c2845eSStanimir Varbanov 17409c2845eSStanimir Varbanov struct hfi_session_empty_buffer_uncompressed_plane1_pkt { 17509c2845eSStanimir Varbanov u32 flags; 17609c2845eSStanimir Varbanov u32 alloc_len; 17709c2845eSStanimir Varbanov u32 filled_len; 17809c2845eSStanimir Varbanov u32 offset; 17909c2845eSStanimir Varbanov u32 packet_buffer2; 180*909dc5acSRicardo Ribalda u32 data; 18109c2845eSStanimir Varbanov }; 18209c2845eSStanimir Varbanov 18309c2845eSStanimir Varbanov struct hfi_session_empty_buffer_uncompressed_plane2_pkt { 18409c2845eSStanimir Varbanov u32 flags; 18509c2845eSStanimir Varbanov u32 alloc_len; 18609c2845eSStanimir Varbanov u32 filled_len; 18709c2845eSStanimir Varbanov u32 offset; 18809c2845eSStanimir Varbanov u32 packet_buffer3; 189*909dc5acSRicardo Ribalda u32 data; 19009c2845eSStanimir Varbanov }; 19109c2845eSStanimir Varbanov 19209c2845eSStanimir Varbanov struct hfi_session_fill_buffer_pkt { 19309c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 19409c2845eSStanimir Varbanov u32 stream_id; 19509c2845eSStanimir Varbanov u32 offset; 19609c2845eSStanimir Varbanov u32 alloc_len; 19709c2845eSStanimir Varbanov u32 filled_len; 19809c2845eSStanimir Varbanov u32 output_tag; 19909c2845eSStanimir Varbanov u32 packet_buffer; 20009c2845eSStanimir Varbanov u32 extradata_buffer; 20187210c80SRicardo Ribalda u32 data; 20209c2845eSStanimir Varbanov }; 20309c2845eSStanimir Varbanov 20409c2845eSStanimir Varbanov struct hfi_session_flush_pkt { 20509c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 20609c2845eSStanimir Varbanov u32 flush_type; 20709c2845eSStanimir Varbanov }; 20809c2845eSStanimir Varbanov 20909c2845eSStanimir Varbanov struct hfi_session_suspend_pkt { 21009c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 21109c2845eSStanimir Varbanov }; 21209c2845eSStanimir Varbanov 21309c2845eSStanimir Varbanov struct hfi_session_resume_pkt { 21409c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 21509c2845eSStanimir Varbanov }; 21609c2845eSStanimir Varbanov 21709c2845eSStanimir Varbanov struct hfi_session_get_property_pkt { 21809c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 21909c2845eSStanimir Varbanov u32 num_properties; 220886115c4SRicardo Ribalda u32 data; 22109c2845eSStanimir Varbanov }; 22209c2845eSStanimir Varbanov 22309c2845eSStanimir Varbanov struct hfi_session_release_buffer_pkt { 22409c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 22509c2845eSStanimir Varbanov u32 buffer_type; 22609c2845eSStanimir Varbanov u32 buffer_size; 22709c2845eSStanimir Varbanov u32 extradata_size; 22809c2845eSStanimir Varbanov u32 response_req; 22909c2845eSStanimir Varbanov u32 num_buffers; 23032ef4b71SKees Cook u32 buffer_info[] __counted_by(num_buffers); 23109c2845eSStanimir Varbanov }; 23209c2845eSStanimir Varbanov 23309c2845eSStanimir Varbanov struct hfi_session_release_resources_pkt { 23409c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 23509c2845eSStanimir Varbanov }; 23609c2845eSStanimir Varbanov 23709c2845eSStanimir Varbanov struct hfi_session_parse_sequence_header_pkt { 23809c2845eSStanimir Varbanov struct hfi_session_hdr_pkt shdr; 23909c2845eSStanimir Varbanov u32 header_len; 24009c2845eSStanimir Varbanov u32 packet_buffer; 24109c2845eSStanimir Varbanov }; 24209c2845eSStanimir Varbanov 24309c2845eSStanimir Varbanov struct hfi_sfr { 24409c2845eSStanimir Varbanov u32 buf_size; 2454c99885dSGustavo A. R. Silva u8 data[] __counted_by(buf_size); 24609c2845eSStanimir Varbanov }; 24709c2845eSStanimir Varbanov 24809c2845eSStanimir Varbanov struct hfi_sys_test_ssr_pkt { 24909c2845eSStanimir Varbanov struct hfi_pkt_hdr hdr; 25009c2845eSStanimir Varbanov u32 trigger_type; 25109c2845eSStanimir Varbanov }; 25209c2845eSStanimir Varbanov 25309c2845eSStanimir Varbanov void pkt_set_version(enum hfi_version version); 25409c2845eSStanimir Varbanov 25509c2845eSStanimir Varbanov void pkt_sys_init(struct hfi_sys_init_pkt *pkt, u32 arch_type); 25609c2845eSStanimir Varbanov void pkt_sys_pc_prep(struct hfi_sys_pc_prep_pkt *pkt); 25709c2845eSStanimir Varbanov void pkt_sys_idle_indicator(struct hfi_sys_set_property_pkt *pkt, u32 enable); 25809c2845eSStanimir Varbanov void pkt_sys_power_control(struct hfi_sys_set_property_pkt *pkt, u32 enable); 259b228cf38SVikash Garodia void pkt_sys_ubwc_config(struct hfi_sys_set_property_pkt *pkt, const struct hfi_ubwc_config *hfi); 26009c2845eSStanimir Varbanov int pkt_sys_set_resource(struct hfi_sys_set_resource_pkt *pkt, u32 id, u32 size, 26109c2845eSStanimir Varbanov u32 addr, void *cookie); 26209c2845eSStanimir Varbanov int pkt_sys_unset_resource(struct hfi_sys_release_resource_pkt *pkt, u32 id, 26309c2845eSStanimir Varbanov u32 size, void *cookie); 26409c2845eSStanimir Varbanov void pkt_sys_debug_config(struct hfi_sys_set_property_pkt *pkt, u32 mode, 26509c2845eSStanimir Varbanov u32 config); 26609c2845eSStanimir Varbanov void pkt_sys_coverage_config(struct hfi_sys_set_property_pkt *pkt, u32 mode); 26709c2845eSStanimir Varbanov void pkt_sys_ping(struct hfi_sys_ping_pkt *pkt, u32 cookie); 26809c2845eSStanimir Varbanov void pkt_sys_image_version(struct hfi_sys_get_property_pkt *pkt); 26909c2845eSStanimir Varbanov int pkt_sys_ssr_cmd(struct hfi_sys_test_ssr_pkt *pkt, u32 trigger_type); 27009c2845eSStanimir Varbanov int pkt_session_init(struct hfi_session_init_pkt *pkt, void *cookie, 27109c2845eSStanimir Varbanov u32 session_type, u32 codec); 27209c2845eSStanimir Varbanov void pkt_session_cmd(struct hfi_session_pkt *pkt, u32 pkt_type, void *cookie); 27309c2845eSStanimir Varbanov int pkt_session_set_buffers(struct hfi_session_set_buffers_pkt *pkt, 27409c2845eSStanimir Varbanov void *cookie, struct hfi_buffer_desc *bd); 27509c2845eSStanimir Varbanov int pkt_session_unset_buffers(struct hfi_session_release_buffer_pkt *pkt, 27609c2845eSStanimir Varbanov void *cookie, struct hfi_buffer_desc *bd); 27709c2845eSStanimir Varbanov int pkt_session_etb_decoder(struct hfi_session_empty_buffer_compressed_pkt *pkt, 27809c2845eSStanimir Varbanov void *cookie, struct hfi_frame_data *input_frame); 27909c2845eSStanimir Varbanov int pkt_session_etb_encoder( 28009c2845eSStanimir Varbanov struct hfi_session_empty_buffer_uncompressed_plane0_pkt *pkt, 28109c2845eSStanimir Varbanov void *cookie, struct hfi_frame_data *input_frame); 28209c2845eSStanimir Varbanov int pkt_session_ftb(struct hfi_session_fill_buffer_pkt *pkt, 28309c2845eSStanimir Varbanov void *cookie, struct hfi_frame_data *output_frame); 28409c2845eSStanimir Varbanov int pkt_session_parse_seq_header( 28509c2845eSStanimir Varbanov struct hfi_session_parse_sequence_header_pkt *pkt, 28609c2845eSStanimir Varbanov void *cookie, u32 seq_hdr, u32 seq_hdr_len); 28709c2845eSStanimir Varbanov int pkt_session_get_seq_hdr(struct hfi_session_get_sequence_header_pkt *pkt, 28809c2845eSStanimir Varbanov void *cookie, u32 seq_hdr, u32 seq_hdr_len); 28909c2845eSStanimir Varbanov int pkt_session_flush(struct hfi_session_flush_pkt *pkt, void *cookie, 29009c2845eSStanimir Varbanov u32 flush_mode); 29109c2845eSStanimir Varbanov int pkt_session_get_property(struct hfi_session_get_property_pkt *pkt, 29209c2845eSStanimir Varbanov void *cookie, u32 ptype); 29309c2845eSStanimir Varbanov int pkt_session_set_property(struct hfi_session_set_property_pkt *pkt, 29409c2845eSStanimir Varbanov void *cookie, u32 ptype, void *pdata); 29509c2845eSStanimir Varbanov 29609c2845eSStanimir Varbanov #endif 297