brintos

brintos / linux-shallow public Read only

0
0
Text · 5.9 KiB · c0c9013 Raw
298 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright (C) 2019 Pengutronix, Michael Tretter <kernel@pengutronix.de>4 *5 * Allegro VCU firmware mailbox mail definitions6 */7 8#ifndef ALLEGRO_MAIL_H9#define ALLEGRO_MAIL_H10 11#include <linux/kernel.h>12 13enum mcu_msg_type {14	MCU_MSG_TYPE_INIT = 0x0000,15	MCU_MSG_TYPE_CREATE_CHANNEL = 0x0005,16	MCU_MSG_TYPE_DESTROY_CHANNEL = 0x0006,17	MCU_MSG_TYPE_ENCODE_FRAME = 0x0007,18	MCU_MSG_TYPE_PUT_STREAM_BUFFER = 0x0012,19	MCU_MSG_TYPE_PUSH_BUFFER_INTERMEDIATE = 0x000e,20	MCU_MSG_TYPE_PUSH_BUFFER_REFERENCE = 0x000f,21};22 23enum mcu_msg_version {24	MCU_MSG_VERSION_2018_2,25	MCU_MSG_VERSION_2019_2,26};27 28const char *msg_type_name(enum mcu_msg_type type);29 30struct mcu_msg_header {31	enum mcu_msg_type type;32	enum mcu_msg_version version;33};34 35struct mcu_msg_init_request {36	struct mcu_msg_header header;37	u32 reserved0;		/* maybe a unused channel id */38	u32 suballoc_dma;39	u32 suballoc_size;40	s32 encoder_buffer_size;41	s32 encoder_buffer_color_depth;42	s32 num_cores;43	s32 clk_rate;44};45 46struct mcu_msg_init_response {47	struct mcu_msg_header header;48	u32 reserved0;49};50 51struct create_channel_param {52	enum mcu_msg_version version;53	u32 layer_id;54	u16 width;55	u16 height;56	u32 videomode;57	u32 format;58	u32 colorspace;59	u32 src_mode;60	u32 src_bit_depth;61	u8 profile;62	u16 constraint_set_flags;63	u32 codec;64	u16 level;65	u16 tier;66	u32 log2_max_poc;67	u32 log2_max_frame_num;68	u32 temporal_mvp_enable;69	u32 enable_reordering;70	u32 dbf_ovr_en;71	u32 override_lf;72	u32 num_ref_idx_l0;73	u32 num_ref_idx_l1;74	u32 custom_lda;75	u32 rdo_cost_mode;76	u32 lf;77	u32 lf_x_tile;78	u32 lf_x_slice;79	s8 beta_offset;80	s8 tc_offset;81	u16 reserved10;82	u32 unknown11;83	u32 unknown12;84	u16 num_slices;85	u32 encoder_buffer_offset;86	u32 encoder_buffer_enabled;87	u16 clip_hrz_range;88	u16 clip_vrt_range;89	u16 me_range[4];90	u8 max_cu_size;91	u8 min_cu_size;92	u8 max_tu_size;93	u8 min_tu_size;94	u8 max_transfo_depth_inter;95	u8 max_transfo_depth_intra;96	u16 reserved20;97	u32 entropy_mode;98	u32 wp_mode;99 100	/* rate control param */101	u32 rate_control_mode;102	u32 initial_rem_delay;103	u32 cpb_size;104	u16 framerate;105	u16 clk_ratio;106	u32 target_bitrate;107	u32 max_bitrate;108	u16 initial_qp;109	u16 min_qp;110	u16 max_qp;111	s16 ip_delta;112	s16 pb_delta;113	u16 golden_ref;114	u16 golden_delta;115	u16 golden_ref_frequency;116	u32 rate_control_option;117	u32 num_pixel;118	u16 max_psnr;119	u16 max_pixel_value;120	u32 maxpicturesize[3];121 122	/* gop param */123	u32 gop_ctrl_mode;124	u32 freq_idr;125	u32 freq_lt;126	u32 gdr_mode;127	u16 gop_length;128	u8 num_b;129	u8 freq_golden_ref;130	u32 enable_lt;131	u32 tmpdqp;132 133	u32 subframe_latency;134	u32 lda_control_mode;135	u32 unknown41;136 137	u32 lda_factors[6];138 139	u32 max_num_merge_cand;140};141 142struct mcu_msg_create_channel {143	struct mcu_msg_header header;144	u32 user_id;145	u32 *blob;146	size_t blob_size;147	u32 blob_mcu_addr;148	u32 ep1_addr;149};150 151struct mcu_msg_create_channel_response {152	struct mcu_msg_header header;153	u32 channel_id;154	u32 user_id;155	u32 options;156	u32 num_core;157	u32 num_ref_idx_l0;158	u32 num_ref_idx_l1;159	u32 int_buffers_count;160	u32 int_buffers_size;161	u32 rec_buffers_count;162	u32 rec_buffers_size;163	u32 reserved;164	u32 error_code;165};166 167struct mcu_msg_destroy_channel {168	struct mcu_msg_header header;169	u32 channel_id;170};171 172struct mcu_msg_destroy_channel_response {173	struct mcu_msg_header header;174	u32 channel_id;175};176 177struct mcu_msg_push_buffers_internal_buffer {178	u32 dma_addr;179	u32 mcu_addr;180	u32 size;181};182 183struct mcu_msg_push_buffers_internal {184	struct mcu_msg_header header;185	u32 channel_id;186	size_t num_buffers;187	struct mcu_msg_push_buffers_internal_buffer buffer[] __counted_by(num_buffers);188};189 190struct mcu_msg_put_stream_buffer {191	struct mcu_msg_header header;192	u32 channel_id;193	u32 dma_addr;194	u32 mcu_addr;195	u32 size;196	u32 offset;197	u64 dst_handle;198};199 200struct mcu_msg_encode_frame {201	struct mcu_msg_header header;202	u32 channel_id;203	u32 reserved;204 205	u32 encoding_options;206#define AL_OPT_USE_QP_TABLE		BIT(0)207#define AL_OPT_FORCE_LOAD		BIT(1)208#define AL_OPT_USE_L2			BIT(2)209#define AL_OPT_DISABLE_INTRA		BIT(3)210#define AL_OPT_DEPENDENT_SLICES		BIT(4)211 212	s16 pps_qp;213	u16 padding;214	u64 user_param;215	u64 src_handle;216 217	u32 request_options;218#define AL_OPT_SCENE_CHANGE		BIT(0)219#define AL_OPT_RESTART_GOP		BIT(1)220#define AL_OPT_USE_LONG_TERM		BIT(2)221#define AL_OPT_UPDATE_PARAMS		BIT(3)222 223	/* u32 scene_change_delay (optional) */224	/* rate control param (optional) */225	/* gop param (optional) */226	/* dynamic resolution params (optional) */227	u32 src_y;228	u32 src_uv;229	u32 is_10_bit;230	u32 stride;231	u32 format;232	u32 ep2;233	u64 ep2_v;234};235 236struct mcu_msg_encode_frame_response {237	struct mcu_msg_header header;238	u32 channel_id;239	u64 dst_handle;		/* see mcu_msg_put_stream_buffer */240	u64 user_param;		/* see mcu_msg_encode_frame */241	u64 src_handle;		/* see mcu_msg_encode_frame */242	u16 skip;243	u16 is_ref;244	u32 initial_removal_delay;245	u32 dpb_output_delay;246	u32 size;247	u32 frame_tag_size;248	s32 stuffing;249	s32 filler;250	u16 num_column;251	u16 num_row;252	u16 qp;253	u8 num_ref_idx_l0;254	u8 num_ref_idx_l1;255	u32 partition_table_offset;256	s32 partition_table_size;257	u32 sum_complex;258	s32 tile_width[4];259	s32 tile_height[22];260	u32 error_code;261 262	u32 slice_type;263#define AL_ENC_SLICE_TYPE_B             0264#define AL_ENC_SLICE_TYPE_P             1265#define AL_ENC_SLICE_TYPE_I             2266 267	u32 pic_struct;268	u8 is_idr;269	u8 is_first_slice;270	u8 is_last_slice;271	u8 reserved;272	u16 pps_qp;273	u16 reserved1;274	u32 reserved2;275	u32 reserved3;276	u32 reserved4;277	u32 reserved5;278	u32 reserved6;279};280 281union mcu_msg_response {282	struct mcu_msg_header header;283	struct mcu_msg_init_response init;284	struct mcu_msg_create_channel_response create_channel;285	struct mcu_msg_destroy_channel_response destroy_channel;286	struct mcu_msg_encode_frame_response encode_frame;287};288 289ssize_t allegro_encode_config_blob(u32 *dst, struct create_channel_param *param);290ssize_t allegro_decode_config_blob(struct create_channel_param *param,291				   struct mcu_msg_create_channel_response *msg,292				   u32 *src);293 294int allegro_decode_mail(void *msg, u32 *src);295ssize_t allegro_encode_mail(u32 *dst, void *msg);296 297#endif298