xref: /linux/drivers/media/platform/qcom/venus/hfi_cmds.h (revision 3a39d672e7f48b8d6b91a09afa4b55352773b4b5)
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