1b8e80941Smrg/************************************************************************** 2b8e80941Smrg * 3b8e80941Smrg * Copyright 2011 Advanced Micro Devices, Inc. 4b8e80941Smrg * All Rights Reserved. 5b8e80941Smrg * 6b8e80941Smrg * Permission is hereby granted, free of charge, to any person obtaining a 7b8e80941Smrg * copy of this software and associated documentation files (the 8b8e80941Smrg * "Software"), to deal in the Software without restriction, including 9b8e80941Smrg * without limitation the rights to use, copy, modify, merge, publish, 10b8e80941Smrg * distribute, sub license, and/or sell copies of the Software, and to 11b8e80941Smrg * permit persons to whom the Software is furnished to do so, subject to 12b8e80941Smrg * the following conditions: 13b8e80941Smrg * 14b8e80941Smrg * The above copyright notice and this permission notice (including the 15b8e80941Smrg * next paragraph) shall be included in all copies or substantial portions 16b8e80941Smrg * of the Software. 17b8e80941Smrg * 18b8e80941Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19b8e80941Smrg * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20b8e80941Smrg * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21b8e80941Smrg * IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR 22b8e80941Smrg * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23b8e80941Smrg * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24b8e80941Smrg * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25b8e80941Smrg * 26b8e80941Smrg **************************************************************************/ 27b8e80941Smrg 28b8e80941Smrg/* 29b8e80941Smrg * Authors: 30b8e80941Smrg * Christian König <christian.koenig@amd.com> 31b8e80941Smrg * 32b8e80941Smrg */ 33b8e80941Smrg 34b8e80941Smrg#ifndef RADEON_UVD_H 35b8e80941Smrg#define RADEON_UVD_H 36b8e80941Smrg 37b8e80941Smrg#include "radeon/radeon_winsys.h" 38b8e80941Smrg#include "vl/vl_video_buffer.h" 39b8e80941Smrg 40b8e80941Smrg/* UVD uses PM4 packet type 0 and 2 */ 41b8e80941Smrg#define RUVD_PKT_TYPE_S(x) (((unsigned)(x) & 0x3) << 30) 42b8e80941Smrg#define RUVD_PKT_TYPE_G(x) (((x) >> 30) & 0x3) 43b8e80941Smrg#define RUVD_PKT_TYPE_C 0x3FFFFFFF 44b8e80941Smrg#define RUVD_PKT_COUNT_S(x) (((unsigned)(x) & 0x3FFF) << 16) 45b8e80941Smrg#define RUVD_PKT_COUNT_G(x) (((x) >> 16) & 0x3FFF) 46b8e80941Smrg#define RUVD_PKT_COUNT_C 0xC000FFFF 47b8e80941Smrg#define RUVD_PKT0_BASE_INDEX_S(x) (((unsigned)(x) & 0xFFFF) << 0) 48b8e80941Smrg#define RUVD_PKT0_BASE_INDEX_G(x) (((x) >> 0) & 0xFFFF) 49b8e80941Smrg#define RUVD_PKT0_BASE_INDEX_C 0xFFFF0000 50b8e80941Smrg#define RUVD_PKT0(index, count) (RUVD_PKT_TYPE_S(0) | RUVD_PKT0_BASE_INDEX_S(index) | RUVD_PKT_COUNT_S(count)) 51b8e80941Smrg#define RUVD_PKT2() (RUVD_PKT_TYPE_S(2)) 52b8e80941Smrg 53b8e80941Smrg/* registers involved with UVD */ 54b8e80941Smrg#define RUVD_GPCOM_VCPU_CMD 0xEF0C 55b8e80941Smrg#define RUVD_GPCOM_VCPU_DATA0 0xEF10 56b8e80941Smrg#define RUVD_GPCOM_VCPU_DATA1 0xEF14 57b8e80941Smrg#define RUVD_ENGINE_CNTL 0xEF18 58b8e80941Smrg 59b8e80941Smrg#define RUVD_GPCOM_VCPU_CMD_SOC15 0x2070c 60b8e80941Smrg#define RUVD_GPCOM_VCPU_DATA0_SOC15 0x20710 61b8e80941Smrg#define RUVD_GPCOM_VCPU_DATA1_SOC15 0x20714 62b8e80941Smrg#define RUVD_ENGINE_CNTL_SOC15 0x20718 63b8e80941Smrg 64b8e80941Smrg/* UVD commands to VCPU */ 65b8e80941Smrg#define RUVD_CMD_MSG_BUFFER 0x00000000 66b8e80941Smrg#define RUVD_CMD_DPB_BUFFER 0x00000001 67b8e80941Smrg#define RUVD_CMD_DECODING_TARGET_BUFFER 0x00000002 68b8e80941Smrg#define RUVD_CMD_FEEDBACK_BUFFER 0x00000003 69b8e80941Smrg#define RUVD_CMD_SESSION_CONTEXT_BUFFER 0x00000005 70b8e80941Smrg#define RUVD_CMD_BITSTREAM_BUFFER 0x00000100 71b8e80941Smrg#define RUVD_CMD_ITSCALING_TABLE_BUFFER 0x00000204 72b8e80941Smrg#define RUVD_CMD_CONTEXT_BUFFER 0x00000206 73b8e80941Smrg 74b8e80941Smrg/* UVD message types */ 75b8e80941Smrg#define RUVD_MSG_CREATE 0 76b8e80941Smrg#define RUVD_MSG_DECODE 1 77b8e80941Smrg#define RUVD_MSG_DESTROY 2 78b8e80941Smrg 79b8e80941Smrg/* UVD stream types */ 80b8e80941Smrg#define RUVD_CODEC_H264 0x00000000 81b8e80941Smrg#define RUVD_CODEC_VC1 0x00000001 82b8e80941Smrg#define RUVD_CODEC_MPEG2 0x00000003 83b8e80941Smrg#define RUVD_CODEC_MPEG4 0x00000004 84b8e80941Smrg#define RUVD_CODEC_H264_PERF 0x00000007 85b8e80941Smrg#define RUVD_CODEC_MJPEG 0x00000008 86b8e80941Smrg#define RUVD_CODEC_H265 0x00000010 87b8e80941Smrg 88b8e80941Smrg/* UVD decode target buffer tiling mode */ 89b8e80941Smrg#define RUVD_TILE_LINEAR 0x00000000 90b8e80941Smrg#define RUVD_TILE_8X4 0x00000001 91b8e80941Smrg#define RUVD_TILE_8X8 0x00000002 92b8e80941Smrg#define RUVD_TILE_32AS8 0x00000003 93b8e80941Smrg 94b8e80941Smrg/* UVD decode target buffer array mode */ 95b8e80941Smrg#define RUVD_ARRAY_MODE_LINEAR 0x00000000 96b8e80941Smrg#define RUVD_ARRAY_MODE_MACRO_LINEAR_MICRO_TILED 0x00000001 97b8e80941Smrg#define RUVD_ARRAY_MODE_1D_THIN 0x00000002 98b8e80941Smrg#define RUVD_ARRAY_MODE_2D_THIN 0x00000004 99b8e80941Smrg#define RUVD_ARRAY_MODE_MACRO_TILED_MICRO_LINEAR 0x00000004 100b8e80941Smrg#define RUVD_ARRAY_MODE_MACRO_TILED_MICRO_TILED 0x00000005 101b8e80941Smrg 102b8e80941Smrg/* UVD tile config */ 103b8e80941Smrg#define RUVD_BANK_WIDTH(x) ((x) << 0) 104b8e80941Smrg#define RUVD_BANK_HEIGHT(x) ((x) << 3) 105b8e80941Smrg#define RUVD_MACRO_TILE_ASPECT_RATIO(x) ((x) << 6) 106b8e80941Smrg#define RUVD_NUM_BANKS(x) ((x) << 9) 107b8e80941Smrg 108b8e80941Smrg/* H.264 profile definitions */ 109b8e80941Smrg#define RUVD_H264_PROFILE_BASELINE 0x00000000 110b8e80941Smrg#define RUVD_H264_PROFILE_MAIN 0x00000001 111b8e80941Smrg#define RUVD_H264_PROFILE_HIGH 0x00000002 112b8e80941Smrg#define RUVD_H264_PROFILE_STEREO_HIGH 0x00000003 113b8e80941Smrg#define RUVD_H264_PROFILE_MVC 0x00000004 114b8e80941Smrg 115b8e80941Smrg/* VC-1 profile definitions */ 116b8e80941Smrg#define RUVD_VC1_PROFILE_SIMPLE 0x00000000 117b8e80941Smrg#define RUVD_VC1_PROFILE_MAIN 0x00000001 118b8e80941Smrg#define RUVD_VC1_PROFILE_ADVANCED 0x00000002 119b8e80941Smrg 120b8e80941Smrgstruct ruvd_mvc_element { 121b8e80941Smrg uint16_t viewOrderIndex; 122b8e80941Smrg uint16_t viewId; 123b8e80941Smrg uint16_t numOfAnchorRefsInL0; 124b8e80941Smrg uint16_t viewIdOfAnchorRefsInL0[15]; 125b8e80941Smrg uint16_t numOfAnchorRefsInL1; 126b8e80941Smrg uint16_t viewIdOfAnchorRefsInL1[15]; 127b8e80941Smrg uint16_t numOfNonAnchorRefsInL0; 128b8e80941Smrg uint16_t viewIdOfNonAnchorRefsInL0[15]; 129b8e80941Smrg uint16_t numOfNonAnchorRefsInL1; 130b8e80941Smrg uint16_t viewIdOfNonAnchorRefsInL1[15]; 131b8e80941Smrg}; 132b8e80941Smrg 133b8e80941Smrgstruct ruvd_h264 { 134b8e80941Smrg uint32_t profile; 135b8e80941Smrg uint32_t level; 136b8e80941Smrg 137b8e80941Smrg uint32_t sps_info_flags; 138b8e80941Smrg uint32_t pps_info_flags; 139b8e80941Smrg uint8_t chroma_format; 140b8e80941Smrg uint8_t bit_depth_luma_minus8; 141b8e80941Smrg uint8_t bit_depth_chroma_minus8; 142b8e80941Smrg uint8_t log2_max_frame_num_minus4; 143b8e80941Smrg 144b8e80941Smrg uint8_t pic_order_cnt_type; 145b8e80941Smrg uint8_t log2_max_pic_order_cnt_lsb_minus4; 146b8e80941Smrg uint8_t num_ref_frames; 147b8e80941Smrg uint8_t reserved_8bit; 148b8e80941Smrg 149b8e80941Smrg int8_t pic_init_qp_minus26; 150b8e80941Smrg int8_t pic_init_qs_minus26; 151b8e80941Smrg int8_t chroma_qp_index_offset; 152b8e80941Smrg int8_t second_chroma_qp_index_offset; 153b8e80941Smrg 154b8e80941Smrg uint8_t num_slice_groups_minus1; 155b8e80941Smrg uint8_t slice_group_map_type; 156b8e80941Smrg uint8_t num_ref_idx_l0_active_minus1; 157b8e80941Smrg uint8_t num_ref_idx_l1_active_minus1; 158b8e80941Smrg 159b8e80941Smrg uint16_t slice_group_change_rate_minus1; 160b8e80941Smrg uint16_t reserved_16bit_1; 161b8e80941Smrg 162b8e80941Smrg uint8_t scaling_list_4x4[6][16]; 163b8e80941Smrg uint8_t scaling_list_8x8[2][64]; 164b8e80941Smrg 165b8e80941Smrg uint32_t frame_num; 166b8e80941Smrg uint32_t frame_num_list[16]; 167b8e80941Smrg int32_t curr_field_order_cnt_list[2]; 168b8e80941Smrg int32_t field_order_cnt_list[16][2]; 169b8e80941Smrg 170b8e80941Smrg uint32_t decoded_pic_idx; 171b8e80941Smrg 172b8e80941Smrg uint32_t curr_pic_ref_frame_num; 173b8e80941Smrg 174b8e80941Smrg uint8_t ref_frame_list[16]; 175b8e80941Smrg 176b8e80941Smrg uint32_t reserved[122]; 177b8e80941Smrg 178b8e80941Smrg struct { 179b8e80941Smrg uint32_t numViews; 180b8e80941Smrg uint32_t viewId0; 181b8e80941Smrg struct ruvd_mvc_element mvcElements[1]; 182b8e80941Smrg } mvc; 183b8e80941Smrg}; 184b8e80941Smrg 185b8e80941Smrgstruct ruvd_h265 { 186b8e80941Smrg uint32_t sps_info_flags; 187b8e80941Smrg uint32_t pps_info_flags; 188b8e80941Smrg 189b8e80941Smrg uint8_t chroma_format; 190b8e80941Smrg uint8_t bit_depth_luma_minus8; 191b8e80941Smrg uint8_t bit_depth_chroma_minus8; 192b8e80941Smrg uint8_t log2_max_pic_order_cnt_lsb_minus4; 193b8e80941Smrg 194b8e80941Smrg uint8_t sps_max_dec_pic_buffering_minus1; 195b8e80941Smrg uint8_t log2_min_luma_coding_block_size_minus3; 196b8e80941Smrg uint8_t log2_diff_max_min_luma_coding_block_size; 197b8e80941Smrg uint8_t log2_min_transform_block_size_minus2; 198b8e80941Smrg 199b8e80941Smrg uint8_t log2_diff_max_min_transform_block_size; 200b8e80941Smrg uint8_t max_transform_hierarchy_depth_inter; 201b8e80941Smrg uint8_t max_transform_hierarchy_depth_intra; 202b8e80941Smrg uint8_t pcm_sample_bit_depth_luma_minus1; 203b8e80941Smrg 204b8e80941Smrg uint8_t pcm_sample_bit_depth_chroma_minus1; 205b8e80941Smrg uint8_t log2_min_pcm_luma_coding_block_size_minus3; 206b8e80941Smrg uint8_t log2_diff_max_min_pcm_luma_coding_block_size; 207b8e80941Smrg uint8_t num_extra_slice_header_bits; 208b8e80941Smrg 209b8e80941Smrg uint8_t num_short_term_ref_pic_sets; 210b8e80941Smrg uint8_t num_long_term_ref_pic_sps; 211b8e80941Smrg uint8_t num_ref_idx_l0_default_active_minus1; 212b8e80941Smrg uint8_t num_ref_idx_l1_default_active_minus1; 213b8e80941Smrg 214b8e80941Smrg int8_t pps_cb_qp_offset; 215b8e80941Smrg int8_t pps_cr_qp_offset; 216b8e80941Smrg int8_t pps_beta_offset_div2; 217b8e80941Smrg int8_t pps_tc_offset_div2; 218b8e80941Smrg 219b8e80941Smrg uint8_t diff_cu_qp_delta_depth; 220b8e80941Smrg uint8_t num_tile_columns_minus1; 221b8e80941Smrg uint8_t num_tile_rows_minus1; 222b8e80941Smrg uint8_t log2_parallel_merge_level_minus2; 223b8e80941Smrg 224b8e80941Smrg uint16_t column_width_minus1[19]; 225b8e80941Smrg uint16_t row_height_minus1[21]; 226b8e80941Smrg 227b8e80941Smrg int8_t init_qp_minus26; 228b8e80941Smrg uint8_t num_delta_pocs_ref_rps_idx; 229b8e80941Smrg uint8_t curr_idx; 230b8e80941Smrg uint8_t reserved1; 231b8e80941Smrg int32_t curr_poc; 232b8e80941Smrg uint8_t ref_pic_list[16]; 233b8e80941Smrg int32_t poc_list[16]; 234b8e80941Smrg uint8_t ref_pic_set_st_curr_before[8]; 235b8e80941Smrg uint8_t ref_pic_set_st_curr_after[8]; 236b8e80941Smrg uint8_t ref_pic_set_lt_curr[8]; 237b8e80941Smrg 238b8e80941Smrg uint8_t ucScalingListDCCoefSizeID2[6]; 239b8e80941Smrg uint8_t ucScalingListDCCoefSizeID3[2]; 240b8e80941Smrg 241b8e80941Smrg uint8_t highestTid; 242b8e80941Smrg uint8_t isNonRef; 243b8e80941Smrg 244b8e80941Smrg uint8_t p010_mode; 245b8e80941Smrg uint8_t msb_mode; 246b8e80941Smrg uint8_t luma_10to8; 247b8e80941Smrg uint8_t chroma_10to8; 248b8e80941Smrg uint8_t sclr_luma10to8; 249b8e80941Smrg uint8_t sclr_chroma10to8; 250b8e80941Smrg 251b8e80941Smrg uint8_t direct_reflist[2][15]; 252b8e80941Smrg}; 253b8e80941Smrg 254b8e80941Smrgstruct ruvd_vc1 { 255b8e80941Smrg uint32_t profile; 256b8e80941Smrg uint32_t level; 257b8e80941Smrg uint32_t sps_info_flags; 258b8e80941Smrg uint32_t pps_info_flags; 259b8e80941Smrg uint32_t pic_structure; 260b8e80941Smrg uint32_t chroma_format; 261b8e80941Smrg}; 262b8e80941Smrg 263b8e80941Smrgstruct ruvd_mpeg2 { 264b8e80941Smrg uint32_t decoded_pic_idx; 265b8e80941Smrg uint32_t ref_pic_idx[2]; 266b8e80941Smrg 267b8e80941Smrg uint8_t load_intra_quantiser_matrix; 268b8e80941Smrg uint8_t load_nonintra_quantiser_matrix; 269b8e80941Smrg uint8_t reserved_quantiser_alignement[2]; 270b8e80941Smrg uint8_t intra_quantiser_matrix[64]; 271b8e80941Smrg uint8_t nonintra_quantiser_matrix[64]; 272b8e80941Smrg 273b8e80941Smrg uint8_t profile_and_level_indication; 274b8e80941Smrg uint8_t chroma_format; 275b8e80941Smrg 276b8e80941Smrg uint8_t picture_coding_type; 277b8e80941Smrg 278b8e80941Smrg uint8_t reserved_1; 279b8e80941Smrg 280b8e80941Smrg uint8_t f_code[2][2]; 281b8e80941Smrg uint8_t intra_dc_precision; 282b8e80941Smrg uint8_t pic_structure; 283b8e80941Smrg uint8_t top_field_first; 284b8e80941Smrg uint8_t frame_pred_frame_dct; 285b8e80941Smrg uint8_t concealment_motion_vectors; 286b8e80941Smrg uint8_t q_scale_type; 287b8e80941Smrg uint8_t intra_vlc_format; 288b8e80941Smrg uint8_t alternate_scan; 289b8e80941Smrg}; 290b8e80941Smrg 291b8e80941Smrgstruct ruvd_mpeg4 292b8e80941Smrg{ 293b8e80941Smrg uint32_t decoded_pic_idx; 294b8e80941Smrg uint32_t ref_pic_idx[2]; 295b8e80941Smrg 296b8e80941Smrg uint32_t variant_type; 297b8e80941Smrg uint8_t profile_and_level_indication; 298b8e80941Smrg 299b8e80941Smrg uint8_t video_object_layer_verid; 300b8e80941Smrg uint8_t video_object_layer_shape; 301b8e80941Smrg 302b8e80941Smrg uint8_t reserved_1; 303b8e80941Smrg 304b8e80941Smrg uint16_t video_object_layer_width; 305b8e80941Smrg uint16_t video_object_layer_height; 306b8e80941Smrg 307b8e80941Smrg uint16_t vop_time_increment_resolution; 308b8e80941Smrg 309b8e80941Smrg uint16_t reserved_2; 310b8e80941Smrg 311b8e80941Smrg uint32_t flags; 312b8e80941Smrg 313b8e80941Smrg uint8_t quant_type; 314b8e80941Smrg 315b8e80941Smrg uint8_t reserved_3[3]; 316b8e80941Smrg 317b8e80941Smrg uint8_t intra_quant_mat[64]; 318b8e80941Smrg uint8_t nonintra_quant_mat[64]; 319b8e80941Smrg 320b8e80941Smrg struct { 321b8e80941Smrg uint8_t sprite_enable; 322b8e80941Smrg 323b8e80941Smrg uint8_t reserved_4[3]; 324b8e80941Smrg 325b8e80941Smrg uint16_t sprite_width; 326b8e80941Smrg uint16_t sprite_height; 327b8e80941Smrg int16_t sprite_left_coordinate; 328b8e80941Smrg int16_t sprite_top_coordinate; 329b8e80941Smrg 330b8e80941Smrg uint8_t no_of_sprite_warping_points; 331b8e80941Smrg uint8_t sprite_warping_accuracy; 332b8e80941Smrg uint8_t sprite_brightness_change; 333b8e80941Smrg uint8_t low_latency_sprite_enable; 334b8e80941Smrg } sprite_config; 335b8e80941Smrg 336b8e80941Smrg struct { 337b8e80941Smrg uint32_t flags; 338b8e80941Smrg uint8_t vol_mode; 339b8e80941Smrg uint8_t reserved_5[3]; 340b8e80941Smrg } divx_311_config; 341b8e80941Smrg}; 342b8e80941Smrg 343b8e80941Smrg/* message between driver and hardware */ 344b8e80941Smrgstruct ruvd_msg { 345b8e80941Smrg 346b8e80941Smrg uint32_t size; 347b8e80941Smrg uint32_t msg_type; 348b8e80941Smrg uint32_t stream_handle; 349b8e80941Smrg uint32_t status_report_feedback_number; 350b8e80941Smrg 351b8e80941Smrg union { 352b8e80941Smrg struct { 353b8e80941Smrg uint32_t stream_type; 354b8e80941Smrg uint32_t session_flags; 355b8e80941Smrg uint32_t asic_id; 356b8e80941Smrg uint32_t width_in_samples; 357b8e80941Smrg uint32_t height_in_samples; 358b8e80941Smrg uint32_t dpb_buffer; 359b8e80941Smrg uint32_t dpb_size; 360b8e80941Smrg uint32_t dpb_model; 361b8e80941Smrg uint32_t version_info; 362b8e80941Smrg } create; 363b8e80941Smrg 364b8e80941Smrg struct { 365b8e80941Smrg uint32_t stream_type; 366b8e80941Smrg uint32_t decode_flags; 367b8e80941Smrg uint32_t width_in_samples; 368b8e80941Smrg uint32_t height_in_samples; 369b8e80941Smrg 370b8e80941Smrg uint32_t dpb_buffer; 371b8e80941Smrg uint32_t dpb_size; 372b8e80941Smrg uint32_t dpb_model; 373b8e80941Smrg uint32_t dpb_reserved; 374b8e80941Smrg 375b8e80941Smrg uint32_t db_offset_alignment; 376b8e80941Smrg uint32_t db_pitch; 377b8e80941Smrg uint32_t db_tiling_mode; 378b8e80941Smrg uint32_t db_array_mode; 379b8e80941Smrg uint32_t db_field_mode; 380b8e80941Smrg uint32_t db_surf_tile_config; 381b8e80941Smrg uint32_t db_aligned_height; 382b8e80941Smrg uint32_t db_reserved; 383b8e80941Smrg 384b8e80941Smrg uint32_t use_addr_macro; 385b8e80941Smrg 386b8e80941Smrg uint32_t bsd_buffer; 387b8e80941Smrg uint32_t bsd_size; 388b8e80941Smrg 389b8e80941Smrg uint32_t pic_param_buffer; 390b8e80941Smrg uint32_t pic_param_size; 391b8e80941Smrg uint32_t mb_cntl_buffer; 392b8e80941Smrg uint32_t mb_cntl_size; 393b8e80941Smrg 394b8e80941Smrg uint32_t dt_buffer; 395b8e80941Smrg uint32_t dt_pitch; 396b8e80941Smrg uint32_t dt_tiling_mode; 397b8e80941Smrg uint32_t dt_array_mode; 398b8e80941Smrg uint32_t dt_field_mode; 399b8e80941Smrg uint32_t dt_luma_top_offset; 400b8e80941Smrg uint32_t dt_luma_bottom_offset; 401b8e80941Smrg uint32_t dt_chroma_top_offset; 402b8e80941Smrg uint32_t dt_chroma_bottom_offset; 403b8e80941Smrg uint32_t dt_surf_tile_config; 404b8e80941Smrg uint32_t dt_uv_surf_tile_config; 405b8e80941Smrg // re-use dt_wa_chroma_top_offset as dt_ext_info for UV pitch in stoney 406b8e80941Smrg uint32_t dt_wa_chroma_top_offset; 407b8e80941Smrg uint32_t dt_wa_chroma_bottom_offset; 408b8e80941Smrg 409b8e80941Smrg uint32_t reserved[16]; 410b8e80941Smrg 411b8e80941Smrg union { 412b8e80941Smrg struct ruvd_h264 h264; 413b8e80941Smrg struct ruvd_h265 h265; 414b8e80941Smrg struct ruvd_vc1 vc1; 415b8e80941Smrg struct ruvd_mpeg2 mpeg2; 416b8e80941Smrg struct ruvd_mpeg4 mpeg4; 417b8e80941Smrg 418b8e80941Smrg uint32_t info[768]; 419b8e80941Smrg } codec; 420b8e80941Smrg 421b8e80941Smrg uint8_t extension_support; 422b8e80941Smrg uint8_t reserved_8bit_1; 423b8e80941Smrg uint8_t reserved_8bit_2; 424b8e80941Smrg uint8_t reserved_8bit_3; 425b8e80941Smrg uint32_t extension_reserved[64]; 426b8e80941Smrg } decode; 427b8e80941Smrg } body; 428b8e80941Smrg}; 429b8e80941Smrg 430b8e80941Smrg/* driver dependent callback */ 431b8e80941Smrgtypedef struct pb_buffer* (*ruvd_set_dtb) 432b8e80941Smrg(struct ruvd_msg* msg, struct vl_video_buffer *vb); 433b8e80941Smrg 434b8e80941Smrg/* create an UVD decode */ 435b8e80941Smrgstruct pipe_video_codec *ruvd_create_decoder(struct pipe_context *context, 436b8e80941Smrg const struct pipe_video_codec *templat, 437b8e80941Smrg ruvd_set_dtb set_dtb); 438b8e80941Smrg 439b8e80941Smrg/* fill decoding target field from the luma and chroma surfaces */ 440b8e80941Smrgvoid ruvd_set_dt_surfaces(struct ruvd_msg *msg, struct radeon_surf *luma, 441b8e80941Smrg struct radeon_surf *chroma); 442b8e80941Smrg#endif 443