xref: /aosp_15_r20/external/mesa3d/src/amd/common/ac_vcn_dec.h (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 /**************************************************************************
2  *
3  * Copyright 2017 Advanced Micro Devices, Inc.
4  *
5  * SPDX-License-Identifier: MIT
6  *
7  **************************************************************************/
8 
9 #ifndef _AC_VCN_DEC_H
10 #define _AC_VCN_DEC_H
11 
12 /* VCN programming information shared between gallium/vulkan */
13 #define RDECODE_PKT_TYPE_S(x)        (((unsigned)(x)&0x3) << 30)
14 #define RDECODE_PKT_TYPE_G(x)        (((x) >> 30) & 0x3)
15 #define RDECODE_PKT_TYPE_C           0x3FFFFFFF
16 #define RDECODE_PKT_COUNT_S(x)       (((unsigned)(x)&0x3FFF) << 16)
17 #define RDECODE_PKT_COUNT_G(x)       (((x) >> 16) & 0x3FFF)
18 #define RDECODE_PKT_COUNT_C          0xC000FFFF
19 #define RDECODE_PKT0_BASE_INDEX_S(x) (((unsigned)(x)&0xFFFF) << 0)
20 #define RDECODE_PKT0_BASE_INDEX_G(x) (((x) >> 0) & 0xFFFF)
21 #define RDECODE_PKT0_BASE_INDEX_C    0xFFFF0000
22 #define RDECODE_PKT0(index, count)                                                                 \
23    (RDECODE_PKT_TYPE_S(0) | RDECODE_PKT0_BASE_INDEX_S(index) | RDECODE_PKT_COUNT_S(count))
24 
25 #define RDECODE_PKT2() (RDECODE_PKT_TYPE_S(2))
26 
27 #define RDECODE_PKT_REG_J(x)  ((unsigned)(x)&0x3FFFF)
28 #define RDECODE_PKT_RES_J(x)  (((unsigned)(x)&0x3F) << 18)
29 #define RDECODE_PKT_COND_J(x) (((unsigned)(x)&0xF) << 24)
30 #define RDECODE_PKT_TYPE_J(x) (((unsigned)(x)&0xF) << 28)
31 #define RDECODE_PKTJ(reg, cond, type)                                                              \
32    (RDECODE_PKT_REG_J(reg) | RDECODE_PKT_RES_J(0) | RDECODE_PKT_COND_J(cond) |                     \
33     RDECODE_PKT_TYPE_J(type))
34 
35 #define RDECODE_IB_PARAM_DECODE_BUFFER                               (0x00000001)
36 #define RDECODE_IB_PARAM_QUERY_BUFFER                                (0x00000002)
37 #define RDECODE_IB_PARAM_PREDICATION_BUFFER                          (0x00000003)
38 #define RDECODE_IB_PARAM_UMD_64BIT_FENCE                             (0x00000005)
39 #define RDECODE_IB_PARAM_UMD_RECORD_TIMESTAMP                        (0x00000006)
40 #define RDECODE_IB_PARAM_UMD_REPORT_EVENT_STATUS                     (0x00000007)
41 #define RDECODE_IB_PARAM_UMD_COPY_MEMORY                             (0x00000008)
42 #define RDECODE_IB_PARAM_UMD_WRITE_MEMORY                            (0x00000009)
43 #define RDECODE_IB_PARAM_FEEDBACK_BUFFER                             (0x0000000A)
44 
45 #define RDECODE_CMDBUF_FLAGS_MSG_BUFFER                              (0x00000001)
46 #define RDECODE_CMDBUF_FLAGS_DPB_BUFFER                              (0x00000002)
47 #define RDECODE_CMDBUF_FLAGS_BITSTREAM_BUFFER                        (0x00000004)
48 #define RDECODE_CMDBUF_FLAGS_DECODING_TARGET_BUFFER                  (0x00000008)
49 #define RDECODE_CMDBUF_FLAGS_FEEDBACK_BUFFER                         (0x00000010)
50 #define RDECODE_CMDBUF_FLAGS_PICTURE_PARAM_BUFFER                    (0x00000020)
51 #define RDECODE_CMDBUF_FLAGS_MB_CONTROL_BUFFER                       (0x00000040)
52 #define RDECODE_CMDBUF_FLAGS_IDCT_COEF_BUFFER                        (0x00000080)
53 #define RDECODE_CMDBUF_FLAGS_PREEMPT_BUFFER                          (0x00000100)
54 #define RDECODE_CMDBUF_FLAGS_IT_SCALING_BUFFER                       (0x00000200)
55 #define RDECODE_CMDBUF_FLAGS_SCALER_TARGET_BUFFER                    (0x00000400)
56 #define RDECODE_CMDBUF_FLAGS_CONTEXT_BUFFER                          (0x00000800)
57 #define RDECODE_CMDBUF_FLAGS_PROB_TBL_BUFFER                         (0x00001000)
58 #define RDECODE_CMDBUF_FLAGS_QUERY_BUFFER                            (0x00002000)
59 #define RDECODE_CMDBUF_FLAGS_PREDICATION_BUFFER                      (0x00004000)
60 #define RDECODE_CMDBUF_FLAGS_SCLR_COEF_BUFFER                        (0x00008000)
61 #define RDECODE_CMDBUF_FLAGS_RECORD_TIMESTAMP                        (0x00010000)
62 #define RDECODE_CMDBUF_FLAGS_REPORT_EVENT_STATUS                     (0x00020000)
63 #define RDECODE_CMDBUF_FLAGS_RESERVED_SIZE_INFO_BUFFER               (0x00040000)
64 #define RDECODE_CMDBUF_FLAGS_LUMA_HIST_BUFFER                        (0x00080000)
65 #define RDECODE_CMDBUF_FLAGS_SESSION_CONTEXT_BUFFER                  (0x00100000)
66 
67 #define RDECODE_CMD_MSG_BUFFER                              0x00000000
68 #define RDECODE_CMD_DPB_BUFFER                              0x00000001
69 #define RDECODE_CMD_DECODING_TARGET_BUFFER                  0x00000002
70 #define RDECODE_CMD_FEEDBACK_BUFFER                         0x00000003
71 #define RDECODE_CMD_PROB_TBL_BUFFER                         0x00000004
72 #define RDECODE_CMD_SESSION_CONTEXT_BUFFER                  0x00000005
73 #define RDECODE_CMD_BITSTREAM_BUFFER                        0x00000100
74 #define RDECODE_CMD_IT_SCALING_TABLE_BUFFER                 0x00000204
75 #define RDECODE_CMD_CONTEXT_BUFFER                          0x00000206
76 
77 #define RDECODE_MSG_CREATE                                  0x00000000
78 #define RDECODE_MSG_DECODE                                  0x00000001
79 #define RDECODE_MSG_DESTROY                                 0x00000002
80 
81 #define RDECODE_CODEC_H264                                  0x00000000
82 #define RDECODE_CODEC_VC1                                   0x00000001
83 #define RDECODE_CODEC_MPEG2_VLD                             0x00000003
84 #define RDECODE_CODEC_MPEG4                                 0x00000004
85 #define RDECODE_CODEC_H264_PERF                             0x00000007
86 #define RDECODE_CODEC_JPEG                                  0x00000008
87 #define RDECODE_CODEC_H265                                  0x00000010
88 #define RDECODE_CODEC_VP9                                   0x00000011
89 #define RDECODE_CODEC_AV1                                   0x00000013
90 #define RDECODE_MESSAGE_HEVC_DIRECT_REF_LIST                0x00000015
91 
92 #define RDECODE_ARRAY_MODE_LINEAR                           0x00000000
93 #define RDECODE_ARRAY_MODE_MACRO_LINEAR_MICRO_TILED         0x00000001
94 #define RDECODE_ARRAY_MODE_1D_THIN                          0x00000002
95 #define RDECODE_ARRAY_MODE_2D_THIN                          0x00000004
96 #define RDECODE_ARRAY_MODE_MACRO_TILED_MICRO_LINEAR         0x00000004
97 #define RDECODE_ARRAY_MODE_MACRO_TILED_MICRO_TILED          0x00000005
98 
99 #define RDECODE_ARRAY_MODE_ADDRLIB_SEL_GFX10                0x00000000
100 #define RDECODE_ARRAY_MODE_ADDRLIB_SEL_GFX9                 0x00000001
101 #define RDECODE_ARRAY_MODE_ADDRLIB_SEL_GFX8                 0x00000002
102 #define RDECODE_ARRAY_MODE_ADDRLIB_SEL_GFX11                0x00000003
103 
104 #define RDECODE_H264_PROFILE_BASELINE                       0x00000000
105 #define RDECODE_H264_PROFILE_MAIN                           0x00000001
106 #define RDECODE_H264_PROFILE_HIGH                           0x00000002
107 #define RDECODE_H264_PROFILE_STEREO_HIGH                    0x00000003
108 #define RDECODE_H264_PROFILE_MVC                            0x00000004
109 
110 #define RDECODE_VC1_PROFILE_SIMPLE                          0x00000000
111 #define RDECODE_VC1_PROFILE_MAIN                            0x00000001
112 #define RDECODE_VC1_PROFILE_ADVANCED                        0x00000002
113 
114 #define RDECODE_SW_MODE_LINEAR                              0x00000000
115 /* for legacy VCN generations */
116 #define RDECODE_256B_S                                      0x00000001
117 #define RDECODE_256B_D                                      0x00000002
118 #define RDECODE_4KB_S                                       0x00000005
119 #define RDECODE_4KB_D                                       0x00000006
120 #define RDECODE_64KB_S                                      0x00000009
121 #define RDECODE_64KB_D                                      0x0000000A
122 #define RDECODE_4KB_S_X                                     0x00000015
123 #define RDECODE_4KB_D_X                                     0x00000016
124 #define RDECODE_64KB_S_X                                    0x00000019
125 #define RDECODE_64KB_D_X                                    0x0000001A
126 /* for VCN5 */
127 #define RDECODE_VCN5_256B_D                                 0x00000001
128 
129 #define RDECODE_MESSAGE_NOT_SUPPORTED                       0x00000000
130 #define RDECODE_MESSAGE_CREATE                              0x00000001
131 #define RDECODE_MESSAGE_DECODE                              0x00000002
132 #define RDECODE_MESSAGE_DRM                                 0x00000003
133 #define RDECODE_MESSAGE_AVC                                 0x00000006
134 #define RDECODE_MESSAGE_VC1                                 0x00000007
135 #define RDECODE_MESSAGE_MPEG2_VLD                           0x0000000A
136 #define RDECODE_MESSAGE_MPEG4_ASP_VLD                       0x0000000B
137 #define RDECODE_MESSAGE_HEVC                                0x0000000D
138 #define RDECODE_MESSAGE_VP9                                 0x0000000E
139 #define RDECODE_MESSAGE_DYNAMIC_DPB                         0x00000010
140 #define RDECODE_MESSAGE_AV1                                 0x00000011
141 
142 #define RDECODE_FEEDBACK_PROFILING                          0x00000001
143 
144 #define RDECODE_SPS_INFO_H264_EXTENSION_SUPPORT_FLAG_SHIFT  7
145 
146 #define RDECODE_VP9_PROBS_DATA_SIZE                         2304
147 
148 /* *** decode flags *** */
149 #define RDECODE_FLAGS_USE_DYNAMIC_DPB_MASK                  0x00000001
150 #define RDECODE_FLAGS_USE_PAL_MASK                          0x00000008
151 #define RDECODE_FLAGS_DPB_RESIZE_MASK                       0x00000100
152 
153 #define mmUVD_JPEG_CNTL                                     0x0200
154 #define mmUVD_JPEG_CNTL_BASE_IDX                            1
155 #define mmUVD_JPEG_RB_BASE                                  0x0201
156 #define mmUVD_JPEG_RB_BASE_BASE_IDX                         1
157 #define mmUVD_JPEG_RB_WPTR                                  0x0202
158 #define mmUVD_JPEG_RB_WPTR_BASE_IDX                         1
159 #define mmUVD_JPEG_RB_RPTR                                  0x0203
160 #define mmUVD_JPEG_RB_RPTR_BASE_IDX                         1
161 #define mmUVD_JPEG_RB_SIZE                                  0x0204
162 #define mmUVD_JPEG_RB_SIZE_BASE_IDX                         1
163 #define mmUVD_JPEG_TIER_CNTL2                               0x021a
164 #define mmUVD_JPEG_TIER_CNTL2_BASE_IDX                      1
165 #define mmUVD_JPEG_UV_TILING_CTRL                           0x021c
166 #define mmUVD_JPEG_UV_TILING_CTRL_BASE_IDX                  1
167 #define mmUVD_JPEG_TILING_CTRL                              0x021e
168 #define mmUVD_JPEG_TILING_CTRL_BASE_IDX                     1
169 #define mmUVD_JPEG_OUTBUF_RPTR                              0x0220
170 #define mmUVD_JPEG_OUTBUF_RPTR_BASE_IDX                     1
171 #define mmUVD_JPEG_OUTBUF_WPTR                              0x0221
172 #define mmUVD_JPEG_OUTBUF_WPTR_BASE_IDX                     1
173 #define mmUVD_JPEG_PITCH                                    0x0222
174 #define mmUVD_JPEG_PITCH_BASE_IDX                           1
175 #define mmUVD_JPEG_INT_EN                                   0x0229
176 #define mmUVD_JPEG_INT_EN_BASE_IDX                          1
177 #define mmUVD_JPEG_UV_PITCH                                 0x022b
178 #define mmUVD_JPEG_UV_PITCH_BASE_IDX                        1
179 #define mmUVD_JPEG_INDEX                                    0x023e
180 #define mmUVD_JPEG_INDEX_BASE_IDX                           1
181 #define mmUVD_JPEG_DATA                                     0x023f
182 #define mmUVD_JPEG_DATA_BASE_IDX                            1
183 #define mmUVD_LMI_JPEG_WRITE_64BIT_BAR_HIGH                 0x0438
184 #define mmUVD_LMI_JPEG_WRITE_64BIT_BAR_HIGH_BASE_IDX        1
185 #define mmUVD_LMI_JPEG_WRITE_64BIT_BAR_LOW                  0x0439
186 #define mmUVD_LMI_JPEG_WRITE_64BIT_BAR_LOW_BASE_IDX         1
187 #define mmUVD_LMI_JPEG_READ_64BIT_BAR_HIGH                  0x045a
188 #define mmUVD_LMI_JPEG_READ_64BIT_BAR_HIGH_BASE_IDX         1
189 #define mmUVD_LMI_JPEG_READ_64BIT_BAR_LOW                   0x045b
190 #define mmUVD_LMI_JPEG_READ_64BIT_BAR_LOW_BASE_IDX          1
191 #define mmUVD_CTX_INDEX                                     0x0528
192 #define mmUVD_CTX_INDEX_BASE_IDX                            1
193 #define mmUVD_CTX_DATA                                      0x0529
194 #define mmUVD_CTX_DATA_BASE_IDX                             1
195 #define mmUVD_SOFT_RESET                                    0x05a0
196 #define mmUVD_SOFT_RESET_BASE_IDX                           1
197 
198 #define vcnipUVD_JPEG_DEC_SOFT_RST                          0x402f
199 #define vcnipUVD_JRBC_IB_COND_RD_TIMER                      0x408e
200 #define vcnipUVD_JRBC_IB_REF_DATA                           0x408f
201 #define vcnipUVD_LMI_JPEG_READ_64BIT_BAR_HIGH               0x40e1
202 #define vcnipUVD_LMI_JPEG_READ_64BIT_BAR_LOW                0x40e0
203 #define vcnipUVD_JPEG_RB_BASE                               0x4001
204 #define vcnipUVD_JPEG_RB_SIZE                               0x4004
205 #define vcnipUVD_JPEG_RB_WPTR                               0x4002
206 #define vcnipUVD_JPEG_PITCH                                 0x401f
207 #define vcnipUVD_JPEG_UV_PITCH                              0x4020
208 #define vcnipJPEG_DEC_ADDR_MODE                             0x4027
209 #define vcnipJPEG_DEC_Y_GFX10_TILING_SURFACE                0x4024
210 #define vcnipJPEG_DEC_UV_GFX10_TILING_SURFACE               0x4025
211 #define vcnipUVD_LMI_JPEG_WRITE_64BIT_BAR_HIGH              0x40e3
212 #define vcnipUVD_LMI_JPEG_WRITE_64BIT_BAR_LOW               0x40e2
213 #define vcnipUVD_JPEG_INDEX                                 0x402c
214 #define vcnipUVD_JPEG_DATA                                  0x402d
215 #define vcnipUVD_JPEG_TIER_CNTL2                            0x400f
216 #define vcnipUVD_JPEG_OUTBUF_RPTR                           0x401e
217 #define vcnipUVD_JPEG_OUTBUF_CNTL                           0x401c
218 #define vcnipUVD_JPEG_INT_EN                                0x400a
219 #define vcnipUVD_JPEG_CNTL                                  0x4000
220 #define vcnipUVD_JPEG_RB_RPTR                               0x4003
221 #define vcnipUVD_JPEG_OUTBUF_WPTR                           0x401d
222 #define vcnipUVD_JPEG_DEC_SOFT_RST_1                        0x4051
223 #define vcnipUVD_JPEG_PITCH_1                               0x4043
224 #define vcnipUVD_JPEG_UV_PITCH_1                            0x4044
225 #define vcnipJPEG_DEC_ADDR_MODE_1                           0x404B
226 #define vcnipUVD_JPEG_TIER_CNTL2_1                          0x400E
227 #define vcnipUVD_JPEG_OUTBUF_CNTL_1                         0x4040
228 #define vcnipUVD_JPEG_OUTBUF_WPTR_1                         0x4041
229 #define vcnipUVD_JPEG_OUTBUF_RPTR_1                         0x4042
230 #define vcnipUVD_JPEG_LUMA_BASE0_0                          0x41C0
231 #define vcnipUVD_JPEG_CHROMA_BASE0_0                        0x41C1
232 #define vcnipUVD_JPEG_CHROMAV_BASE0_0                       0x41C2
233 #define vcnipJPEG_DEC_Y_GFX10_TILING_SURFACE_1              0x4048
234 #define vcnipJPEG_DEC_UV_GFX10_TILING_SURFACE_1             0x4049
235 #define vcnipUVD_LMI_JPEG_WRITE_64BIT_BAR_HIGH_1            0x40B5
236 #define vcnipUVD_LMI_JPEG_WRITE_64BIT_BAR_LOW_1             0x40B4
237 #define vcnipUVD_LMI_JPEG_READ_64BIT_BAR_HIGH_1             0x40B3
238 #define vcnipUVD_LMI_JPEG_READ_64BIT_BAR_LOW_1              0x40B2
239 #define vcnipUVD_JPEG_ROI_CROP_POS_START                    0x401B
240 #define vcnipUVD_JPEG_ROI_CROP_POS_STRIDE                   0x401C
241 #define vcnipUVD_JPEG_INT_STAT                              0x400B
242 #define vcnipUVD_JPEG_FC_SPS_INFO                           0x4052
243 #define vcnipUVD_JPEG_SPS_INFO                              0x4006
244 #define vcnipUVD_JPEG_FC_R_COEF                             0x4018
245 #define vcnipUVD_JPEG_FC_G_COEF                             0x4019
246 #define vcnipUVD_JPEG_FC_B_COEF                             0x401A
247 #define vcnipUVD_JPEG_FC_VUP_COEF_CNTL0                     0x4010
248 #define vcnipUVD_JPEG_FC_VUP_COEF_CNTL1                     0x4011
249 #define vcnipUVD_JPEG_FC_VUP_COEF_CNTL2                     0x4012
250 #define vcnipUVD_JPEG_FC_VUP_COEF_CNTL3                     0x4013
251 #define vcnipUVD_JPEG_FC_HUP_COEF_CNTL0                     0x4014
252 #define vcnipUVD_JPEG_FC_HUP_COEF_CNTL1                     0x4015
253 #define vcnipUVD_JPEG_FC_HUP_COEF_CNTL2                     0x4016
254 #define vcnipUVD_JPEG_FC_HUP_COEF_CNTL3                     0x4017
255 #define vcnipUVD_JPEG_FC_TMEOUT_CNT                         0x4183
256 #define vcnipUVD_JPEG_SPS1_INFO                             0x4007
257 
258 #define UVD_BASE_INST0_SEG0                                 0x00007800
259 #define UVD_BASE_INST0_SEG1                                 0x00007E00
260 #define UVD_BASE_INST0_SEG2                                 0
261 #define UVD_BASE_INST0_SEG3                                 0
262 #define UVD_BASE_INST0_SEG4                                 0
263 
264 #define SOC15_REG_ADDR(reg) (UVD_BASE_INST0_SEG1 + reg)
265 
266 #define COND0 0
267 #define COND1 1
268 #define COND2 2
269 #define COND3 3
270 #define COND4 4
271 #define COND5 5
272 #define COND6 6
273 #define COND7 7
274 
275 #define TYPE0 0
276 #define TYPE1 1
277 #define TYPE2 2
278 #define TYPE3 3
279 #define TYPE4 4
280 #define TYPE5 5
281 #define TYPE6 6
282 #define TYPE7 7
283 
284 /* VP9 Frame header flags */
285 #define RDECODE_FRAME_HDR_INFO_VP9_USE_UNCOMPRESSED_HEADER_SHIFT      (14)
286 #define RDECODE_FRAME_HDR_INFO_VP9_USE_PREV_IN_FIND_MV_REFS_SHIFT     (13)
287 #define RDECODE_FRAME_HDR_INFO_VP9_MODE_REF_DELTA_UPDATE_SHIFT        (12)
288 #define RDECODE_FRAME_HDR_INFO_VP9_MODE_REF_DELTA_ENABLED_SHIFT       (11)
289 #define RDECODE_FRAME_HDR_INFO_VP9_SEGMENTATION_UPDATE_DATA_SHIFT     (10)
290 #define RDECODE_FRAME_HDR_INFO_VP9_SEGMENTATION_TEMPORAL_UPDATE_SHIFT (9)
291 #define RDECODE_FRAME_HDR_INFO_VP9_SEGMENTATION_UPDATE_MAP_SHIFT      (8)
292 #define RDECODE_FRAME_HDR_INFO_VP9_SEGMENTATION_ENABLED_SHIFT         (7)
293 #define RDECODE_FRAME_HDR_INFO_VP9_FRAME_PARALLEL_DECODING_MODE_SHIFT (6)
294 #define RDECODE_FRAME_HDR_INFO_VP9_REFRESH_FRAME_CONTEXT_SHIFT        (5)
295 #define RDECODE_FRAME_HDR_INFO_VP9_ALLOW_HIGH_PRECISION_MV_SHIFT      (4)
296 #define RDECODE_FRAME_HDR_INFO_VP9_INTRA_ONLY_SHIFT                   (3)
297 #define RDECODE_FRAME_HDR_INFO_VP9_ERROR_RESILIENT_MODE_SHIFT         (2)
298 #define RDECODE_FRAME_HDR_INFO_VP9_FRAME_TYPE_SHIFT                   (1)
299 #define RDECODE_FRAME_HDR_INFO_VP9_SHOW_EXISTING_FRAME_SHIFT          (0)
300 
301 
302 #define RDECODE_FRAME_HDR_INFO_VP9_USE_UNCOMPRESSED_HEADER_MASK      (0x00004000)
303 #define RDECODE_FRAME_HDR_INFO_VP9_USE_PREV_IN_FIND_MV_REFS_MASK     (0x00002000)
304 #define RDECODE_FRAME_HDR_INFO_VP9_MODE_REF_DELTA_UPDATE_MASK        (0x00001000)
305 #define RDECODE_FRAME_HDR_INFO_VP9_MODE_REF_DELTA_ENABLED_MASK       (0x00000800)
306 #define RDECODE_FRAME_HDR_INFO_VP9_SEGMENTATION_UPDATE_DATA_MASK     (0x00000400)
307 #define RDECODE_FRAME_HDR_INFO_VP9_SEGMENTATION_TEMPORAL_UPDATE_MASK (0x00000200)
308 #define RDECODE_FRAME_HDR_INFO_VP9_SEGMENTATION_UPDATE_MAP_MASK      (0x00000100)
309 #define RDECODE_FRAME_HDR_INFO_VP9_SEGMENTATION_ENABLED_MASK         (0x00000080)
310 #define RDECODE_FRAME_HDR_INFO_VP9_FRAME_PARALLEL_DECODING_MODE_MASK (0x00000040)
311 #define RDECODE_FRAME_HDR_INFO_VP9_REFRESH_FRAME_CONTEXT_MASK        (0x00000020)
312 #define RDECODE_FRAME_HDR_INFO_VP9_ALLOW_HIGH_PRECISION_MV_MASK      (0x00000010)
313 #define RDECODE_FRAME_HDR_INFO_VP9_INTRA_ONLY_MASK                   (0x00000008)
314 #define RDECODE_FRAME_HDR_INFO_VP9_ERROR_RESILIENT_MODE_MASK         (0x00000004)
315 #define RDECODE_FRAME_HDR_INFO_VP9_FRAME_TYPE_MASK                   (0x00000002)
316 #define RDECODE_FRAME_HDR_INFO_VP9_SHOW_EXISTING_FRAME_MASK          (0x00000001)
317 
318 /* Drm definitions */
319 #define DRM_CMD_KEY_SHIFT              0
320 #define DRM_CMD_CNT_KEY_SHIFT          1
321 #define DRM_CMD_CNT_DATA_SHIFT         2
322 #define DRM_CMD_OFFSET_SHIFT           3
323 #define DRM_CMD_SESSION_SEL_SHIFT      4
324 #define DRM_CMD_UNWRAP_KEY_SHIFT       8
325 #define DRM_CMD_GEN_MASK_SHIFT         9
326 #define DRM_CMD_ALGORITHM_SHIFT        10
327 #define DRM_CMD_BYTE_MASK_SHIFT        16
328 #define DRM_CMD_DRM_BYPASS_SHIFT       31
329 
330 #define DRM_CMD_KEY_MASK               (0x00000001)
331 #define DRM_CMD_CNT_KEY_MASK           (0x00000002)
332 #define DRM_CMD_CNT_DATA_MASK          (0x00000004)
333 #define DRM_CMD_OFFSET_MASK            (0x00000008)
334 #define DRM_CMD_SESSION_SEL_MASK       (0x000000F0)
335 #define DRM_CMD_UNWRAP_KEY_MASK        (0x00000100)
336 #define DRM_CMD_GEN_MASK_MASK          (0x00000200)
337 #define DRM_CMD_ALGORITHM_MASK         (0x00000C00)
338 #define DRM_CMD_BYTE_MASK_MASK         (0x00FF0000)
339 #define DRM_CMD_DRM_BYPASS_MASK        (0x80000000)
340 
341 /* Drm_cntl definitions */
342 #define DRM_CNTL_ENC_BYTECNT_SHIFT     (6)
343 #define DRM_CNTL_CLR_BYTECNT_SHIFT     (16)
344 #define DRM_CNTL_BYPASS_SHIFT          (24)
345 #define DRM_CNTL_PARTIAL_MODE_SHIFT    (25)
346 #define DRM_CNTL_OFFSET_MODE_SHIFT     (26)
347 #define DRM_CNTL_HEADER_MODE_SHIFT     (27)
348 #define DRM_CNTL_HEADER_BYTECNT_SHIFT  (28)
349 
350 #define DRM_CNTL_ENC_BYTECNT_MASK      (0x00000FC0)
351 #define DRM_CNTL_CLR_BYTECNT_MASK      (0x003F0000)
352 #define DRM_CNTL_BYPASS_MASK           (0x01000000)
353 #define DRM_CNTL_PARTIAL_MODE_MASK     (0x02000000)
354 #define DRM_CNTL_OFFSET_MODE_MASK      (0x04000000)
355 #define DRM_CNTL_HEADER_MODE_MASK      (0x08000000)
356 #define DRM_CNTL_HEADER_BYTECNT_MASK   (0xF0000000)
357 
358 #define SAMU_DRM_DISABLE 0x00000000
359 #define SAMU_DRM_ENABLE  0x00000001
360 
361 /* AV1 Frame header flags */
362 #define RDECODE_FRAME_HDR_INFO_AV1_DISABLE_REF_FRAME_MVS_SHIFT        (31)
363 #define RDECODE_FRAME_HDR_INFO_AV1_SKIP_REFERENCE_UPDATE_SHIFT        (30)
364 #define RDECODE_FRAME_HDR_INFO_AV1_SWITCHABLE_SKIP_MODE_SHIFT         (29)
365 #define RDECODE_FRAME_HDR_INFO_AV1_DELTA_LF_MULTI_SHIFT               (28)
366 #define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_TEMPORAL_UPDATE_SHIFT (27)
367 #define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_UPDATE_MAP_SHIFT      (26)
368 #define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_ENABLED_SHIFT         (25)
369 #define RDECODE_FRAME_HDR_INFO_AV1_REDUCED_TX_SET_USED_SHIFT          (24)
370 #define RDECODE_FRAME_HDR_INFO_AV1_DELTA_LF_PRESENT_FLAG_SHIFT        (23)
371 #define RDECODE_FRAME_HDR_INFO_AV1_DELTA_Q_PRESENT_FLAG_SHIFT         (22)
372 #define RDECODE_FRAME_HDR_INFO_AV1_MODE_REF_DELTA_UPDATE_SHIFT        (21)
373 #define RDECODE_FRAME_HDR_INFO_AV1_MODE_REF_DELTA_ENABLED_SHIFT       (20)
374 #define RDECODE_FRAME_HDR_INFO_AV1_CUR_FRAME_FORCE_INTEGER_MV_SHIFT   (19)
375 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_SCREEN_CONTENT_TOOLS_SHIFT   (18)
376 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_REF_FRAME_MVS_SHIFT          (17)
377 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_JNT_COMP_SHIFT              (16)
378 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_ORDER_HINT_SHIFT            (15)
379 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_DUAL_FILTER_SHIFT           (14)
380 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_WARPED_MOTION_SHIFT          (13)
381 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_MASKED_COMPOUND_SHIFT       (12)
382 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_INTERINTRA_COMPOUND_SHIFT   (11)
383 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_INTRA_EDGE_FILTER_SHIFT     (10)
384 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_FILTER_INTRA_SHIFT          (9)
385 #define RDECODE_FRAME_HDR_INFO_AV1_USING_QMATRIX_SHIFT                (8)
386 #define RDECODE_FRAME_HDR_INFO_AV1_SKIP_MODE_FLAG_SHIFT               (7)
387 #define RDECODE_FRAME_HDR_INFO_AV1_MONOCHROME_SHIFT                   (6)
388 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_HIGH_PRECISION_MV_SHIFT      (5)
389 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_INTRABC_SHIFT                (4)
390 #define RDECODE_FRAME_HDR_INFO_AV1_INTRA_ONLY_SHIFT                   (3)
391 #define RDECODE_FRAME_HDR_INFO_AV1_REFRESH_FRAME_CONTEXT_SHIFT        (2)
392 #define RDECODE_FRAME_HDR_INFO_AV1_DISABLE_CDF_UPDATE_SHIFT           (1)
393 #define RDECODE_FRAME_HDR_INFO_AV1_SHOW_FRAME_SHIFT                   (0)
394 
395 #define RDECODE_FRAME_HDR_INFO_AV1_DISABLE_REF_FRAME_MVS_MASK         (0x80000000)
396 #define RDECODE_FRAME_HDR_INFO_AV1_SKIP_REFERENCE_UPDATE_MASK         (0x40000000)
397 #define RDECODE_FRAME_HDR_INFO_AV1_SWITCHABLE_SKIP_MODE_MASK          (0x20000000)
398 #define RDECODE_FRAME_HDR_INFO_AV1_DELTA_LF_MULTI_MASK                (0x10000000)
399 #define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_TEMPORAL_UPDATE_MASK  (0x08000000)
400 #define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_UPDATE_MAP_MASK       (0x04000000)
401 #define RDECODE_FRAME_HDR_INFO_AV1_SEGMENTATION_ENABLED_MASK          (0x02000000)
402 #define RDECODE_FRAME_HDR_INFO_AV1_REDUCED_TX_SET_USED_MASK           (0x01000000)
403 #define RDECODE_FRAME_HDR_INFO_AV1_DELTA_LF_PRESENT_FLAG_MASK         (0x00800000)
404 #define RDECODE_FRAME_HDR_INFO_AV1_DELTA_Q_PRESENT_FLAG_MASK          (0x00400000)
405 #define RDECODE_FRAME_HDR_INFO_AV1_MODE_REF_DELTA_UPDATE_MASK         (0x00200000)
406 #define RDECODE_FRAME_HDR_INFO_AV1_MODE_REF_DELTA_ENABLED_MASK        (0x00100000)
407 #define RDECODE_FRAME_HDR_INFO_AV1_CUR_FRAME_FORCE_INTEGER_MV_MASK    (0x00080000)
408 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_SCREEN_CONTENT_TOOLS_MASK    (0x00040000)
409 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_REF_FRAME_MVS_MASK           (0x00020000)
410 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_JNT_COMP_MASK               (0x00010000)
411 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_ORDER_HINT_MASK             (0x00008000)
412 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_DUAL_FILTER_MASK            (0x00004000)
413 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_WARPED_MOTION_MASK           (0x00002000)
414 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_MASKED_COMPOUND_MASK        (0x00001000)
415 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_INTERINTRA_COMPOUND_MASK    (0x00000800)
416 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_INTRA_EDGE_FILTER_MASK      (0x00000400)
417 #define RDECODE_FRAME_HDR_INFO_AV1_ENABLE_FILTER_INTRA_MASK           (0x00000200)
418 #define RDECODE_FRAME_HDR_INFO_AV1_USING_QMATRIX_MASK                 (0x00000100)
419 #define RDECODE_FRAME_HDR_INFO_AV1_SKIP_MODE_FLAG_MASK                (0x00000080)
420 #define RDECODE_FRAME_HDR_INFO_AV1_MONOCHROME_MASK                    (0x08000040)
421 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_HIGH_PRECISION_MV_MASK       (0x00000020)
422 #define RDECODE_FRAME_HDR_INFO_AV1_ALLOW_INTRABC_MASK                 (0x00000010)
423 #define RDECODE_FRAME_HDR_INFO_AV1_INTRA_ONLY_MASK                    (0x00000008)
424 #define RDECODE_FRAME_HDR_INFO_AV1_REFRESH_FRAME_CONTEXT_MASK         (0x00000004)
425 #define RDECODE_FRAME_HDR_INFO_AV1_DISABLE_CDF_UPDATE_MASK            (0x00000002)
426 #define RDECODE_FRAME_HDR_INFO_AV1_SHOW_FRAME_MASK                    (0x00000001)
427 
428 #define RDECODE_AV1_VER_0  0
429 #define RDECODE_AV1_VER_1  1
430 
431 typedef struct rvcn_decode_buffer_s {
432    unsigned int valid_buf_flag;
433    unsigned int msg_buffer_address_hi;
434    unsigned int msg_buffer_address_lo;
435    unsigned int dpb_buffer_address_hi;
436    unsigned int dpb_buffer_address_lo;
437    unsigned int target_buffer_address_hi;
438    unsigned int target_buffer_address_lo;
439    unsigned int session_contex_buffer_address_hi;
440    unsigned int session_contex_buffer_address_lo;
441    unsigned int bitstream_buffer_address_hi;
442    unsigned int bitstream_buffer_address_lo;
443    unsigned int context_buffer_address_hi;
444    unsigned int context_buffer_address_lo;
445    unsigned int feedback_buffer_address_hi;
446    unsigned int feedback_buffer_address_lo;
447    unsigned int luma_hist_buffer_address_hi;
448    unsigned int luma_hist_buffer_address_lo;
449    unsigned int prob_tbl_buffer_address_hi;
450    unsigned int prob_tbl_buffer_address_lo;
451    unsigned int sclr_coeff_buffer_address_hi;
452    unsigned int sclr_coeff_buffer_address_lo;
453    unsigned int it_sclr_table_buffer_address_hi;
454    unsigned int it_sclr_table_buffer_address_lo;
455    unsigned int sclr_target_buffer_address_hi;
456    unsigned int sclr_target_buffer_address_lo;
457    unsigned int reserved_size_info_buffer_address_hi;
458    unsigned int reserved_size_info_buffer_address_lo;
459    unsigned int mpeg2_pic_param_buffer_address_hi;
460    unsigned int mpeg2_pic_param_buffer_address_lo;
461    unsigned int mpeg2_mb_control_buffer_address_hi;
462    unsigned int mpeg2_mb_control_buffer_address_lo;
463    unsigned int mpeg2_idct_coeff_buffer_address_hi;
464    unsigned int mpeg2_idct_coeff_buffer_address_lo;
465 } rvcn_decode_buffer_t;
466 
467 typedef struct rvcn_decode_ib_package_s {
468    unsigned int package_size;
469    unsigned int package_type;
470 } rvcn_decode_ib_package_t;
471 
472 typedef struct rvcn_dec_message_index_s {
473    unsigned int message_id;
474    unsigned int offset;
475    unsigned int size;
476    unsigned int filled;
477 } rvcn_dec_message_index_t;
478 
479 typedef struct rvcn_dec_message_header_s {
480    unsigned int header_size;
481    unsigned int total_size;
482    unsigned int num_buffers;
483    unsigned int msg_type;
484    unsigned int stream_handle;
485    unsigned int status_report_feedback_number;
486 
487    rvcn_dec_message_index_t index[1];
488 } rvcn_dec_message_header_t;
489 
490 typedef struct rvcn_dec_message_create_s {
491    unsigned int stream_type;
492    unsigned int session_flags;
493    unsigned int width_in_samples;
494    unsigned int height_in_samples;
495 } rvcn_dec_message_create_t;
496 
497 typedef struct rvcn_dec_message_decode_s {
498    unsigned int stream_type;
499    unsigned int decode_flags;
500    unsigned int width_in_samples;
501    unsigned int height_in_samples;
502 
503    unsigned int bsd_size;
504    unsigned int dpb_size;
505    unsigned int dt_size;
506    unsigned int sct_size;
507    unsigned int sc_coeff_size;
508    unsigned int hw_ctxt_size;
509    unsigned int sw_ctxt_size;
510    unsigned int pic_param_size;
511    unsigned int mb_cntl_size;
512    unsigned int reserved0[4];
513    unsigned int decode_buffer_flags;
514 
515    unsigned int db_pitch;
516    unsigned int db_aligned_height;
517    unsigned int db_tiling_mode;
518    unsigned int db_swizzle_mode;
519    unsigned int db_array_mode;
520    unsigned int db_field_mode;
521    unsigned int db_surf_tile_config;
522 
523    unsigned int dt_pitch;
524    unsigned int dt_uv_pitch;
525    unsigned int dt_tiling_mode;
526    unsigned int dt_swizzle_mode;
527    unsigned int dt_array_mode;
528    unsigned int dt_field_mode;
529    unsigned int dt_out_format;
530    unsigned int dt_surf_tile_config;
531    unsigned int dt_uv_surf_tile_config;
532    unsigned int dt_luma_top_offset;
533    unsigned int dt_luma_bottom_offset;
534    unsigned int dt_chroma_top_offset;
535    unsigned int dt_chroma_bottom_offset;
536    unsigned int dt_chromaV_top_offset;
537    unsigned int dt_chromaV_bottom_offset;
538 
539    unsigned int mif_wrc_en;
540    unsigned int db_pitch_uv;
541 
542    unsigned char reserved1[20];
543 } rvcn_dec_message_decode_t;
544 
545 typedef struct rvcn_dec_message_drm_s {
546    unsigned int	drm_key[4];
547    unsigned int	drm_counter[4];
548    unsigned int	drm_wrapped_key[4];
549    unsigned int	drm_offset;
550    unsigned int	drm_cmd;
551    unsigned int	drm_cntl;
552    unsigned int	drm_reserved;
553 } rvcn_dec_message_drm_t;
554 
555 typedef struct rvcn_dec_message_dynamic_dpb_s {
556    unsigned int dpbConfigFlags;
557    unsigned int dpbLumaPitch;
558    unsigned int dpbLumaAlignedHeight;
559    unsigned int dpbLumaAlignedSize;
560    unsigned int dpbChromaPitch;
561    unsigned int dpbChromaAlignedHeight;
562    unsigned int dpbChromaAlignedSize;
563 
564    unsigned char dpbArraySize;
565    unsigned char dpbCurArraySlice;
566    unsigned char dpbRefArraySlice[16];
567    unsigned char dpbReserved0[2];
568 
569    unsigned int dpbCurrOffset;
570    unsigned int dpbAddrOffset[16];
571 } rvcn_dec_message_dynamic_dpb_t;
572 
573 typedef struct rvcn_dec_message_dynamic_dpb_t2_s {
574     unsigned int dpbConfigFlags;
575     unsigned int dpbLumaPitch;
576     unsigned int dpbLumaAlignedHeight;
577     unsigned int dpbLumaAlignedSize;
578     unsigned int dpbChromaPitch;
579     unsigned int dpbChromaAlignedHeight;
580     unsigned int dpbChromaAlignedSize;
581     unsigned int dpbArraySize;
582 
583     unsigned int dpbCurrLo;
584     unsigned int dpbCurrHi;
585     unsigned int dpbAddrLo[16];
586     unsigned int dpbAddrHi[16];
587 } rvcn_dec_message_dynamic_dpb_t2_t;
588 
589 typedef struct rvcn_dec_message_hevc_direct_ref_list_s {
590    unsigned int num_direct_reflist;
591    unsigned char multi_direct_reflist[128][2][15];
592 } rvcn_dec_message_hevc_direct_ref_list_t;
593 
594 typedef struct {
595    unsigned short viewOrderIndex;
596    unsigned short viewId;
597    unsigned short numOfAnchorRefsInL0;
598    unsigned short viewIdOfAnchorRefsInL0[15];
599    unsigned short numOfAnchorRefsInL1;
600    unsigned short viewIdOfAnchorRefsInL1[15];
601    unsigned short numOfNonAnchorRefsInL0;
602    unsigned short viewIdOfNonAnchorRefsInL0[15];
603    unsigned short numOfNonAnchorRefsInL1;
604    unsigned short viewIdOfNonAnchorRefsInL1[15];
605 } radeon_mvcElement_t;
606 
607 typedef struct rvcn_dec_message_avc_s {
608    unsigned int profile;
609    unsigned int level;
610 
611    unsigned int sps_info_flags;
612    unsigned int pps_info_flags;
613    unsigned char chroma_format;
614    unsigned char bit_depth_luma_minus8;
615    unsigned char bit_depth_chroma_minus8;
616    unsigned char log2_max_frame_num_minus4;
617 
618    unsigned char pic_order_cnt_type;
619    unsigned char log2_max_pic_order_cnt_lsb_minus4;
620    unsigned char num_ref_frames;
621    unsigned char reserved_8bit;
622 
623    signed char pic_init_qp_minus26;
624    signed char pic_init_qs_minus26;
625    signed char chroma_qp_index_offset;
626    signed char second_chroma_qp_index_offset;
627 
628    unsigned char num_slice_groups_minus1;
629    unsigned char slice_group_map_type;
630    unsigned char num_ref_idx_l0_active_minus1;
631    unsigned char num_ref_idx_l1_active_minus1;
632 
633    unsigned short slice_group_change_rate_minus1;
634    unsigned short reserved_16bit_1;
635 
636    unsigned char scaling_list_4x4[6][16];
637    unsigned char scaling_list_8x8[2][64];
638 
639    unsigned int frame_num;
640    unsigned int frame_num_list[16];
641    int curr_field_order_cnt_list[2];
642    int field_order_cnt_list[16][2];
643 
644    unsigned int decoded_pic_idx;
645    unsigned int curr_pic_ref_frame_num;
646    unsigned char ref_frame_list[16];
647 
648    unsigned int reserved[122];
649 
650    struct {
651       unsigned int numViews;
652       unsigned int viewId0;
653       radeon_mvcElement_t mvcElements[1];
654    } mvc;
655 
656    unsigned short non_existing_frame_flags;
657    unsigned int used_for_reference_flags;
658 } rvcn_dec_message_avc_t;
659 
660 typedef struct rvcn_dec_message_vc1_s {
661    unsigned int profile;
662    unsigned int level;
663    unsigned int sps_info_flags;
664    unsigned int pps_info_flags;
665    unsigned int pic_structure;
666    unsigned int chroma_format;
667    unsigned short decoded_pic_idx;
668    unsigned short deblocked_pic_idx;
669    unsigned short forward_ref_idx;
670    unsigned short backward_ref_idx;
671    unsigned int cached_frame_flag;
672 } rvcn_dec_message_vc1_t;
673 
674 typedef struct rvcn_dec_message_mpeg2_vld_s {
675    unsigned int decoded_pic_idx;
676    unsigned int forward_ref_pic_idx;
677    unsigned int backward_ref_pic_idx;
678 
679    unsigned char load_intra_quantiser_matrix;
680    unsigned char load_nonintra_quantiser_matrix;
681    unsigned char reserved_quantiser_alignement[2];
682    unsigned char intra_quantiser_matrix[64];
683    unsigned char nonintra_quantiser_matrix[64];
684 
685    unsigned char profile_and_level_indication;
686    unsigned char chroma_format;
687 
688    unsigned char picture_coding_type;
689 
690    unsigned char reserved_1;
691 
692    unsigned char f_code[2][2];
693    unsigned char intra_dc_precision;
694    unsigned char pic_structure;
695    unsigned char top_field_first;
696    unsigned char frame_pred_frame_dct;
697    unsigned char concealment_motion_vectors;
698    unsigned char q_scale_type;
699    unsigned char intra_vlc_format;
700    unsigned char alternate_scan;
701 } rvcn_dec_message_mpeg2_vld_t;
702 
703 typedef struct rvcn_dec_message_mpeg4_asp_vld_s {
704    unsigned int decoded_pic_idx;
705    unsigned int forward_ref_pic_idx;
706    unsigned int backward_ref_pic_idx;
707 
708    unsigned int variant_type;
709    unsigned char profile_and_level_indication;
710 
711    unsigned char video_object_layer_verid;
712    unsigned char video_object_layer_shape;
713 
714    unsigned char reserved_1;
715 
716    unsigned short video_object_layer_width;
717    unsigned short video_object_layer_height;
718 
719    unsigned short vop_time_increment_resolution;
720 
721    unsigned short reserved_2;
722 
723    struct {
724       unsigned int short_video_header : 1;
725       unsigned int obmc_disable : 1;
726       unsigned int interlaced : 1;
727       unsigned int load_intra_quant_mat : 1;
728       unsigned int load_nonintra_quant_mat : 1;
729       unsigned int quarter_sample : 1;
730       unsigned int complexity_estimation_disable : 1;
731       unsigned int resync_marker_disable : 1;
732       unsigned int data_partitioned : 1;
733       unsigned int reversible_vlc : 1;
734       unsigned int newpred_enable : 1;
735       unsigned int reduced_resolution_vop_enable : 1;
736       unsigned int scalability : 1;
737       unsigned int is_object_layer_identifier : 1;
738       unsigned int fixed_vop_rate : 1;
739       unsigned int newpred_segment_type : 1;
740       unsigned int reserved_bits : 16;
741    };
742 
743    unsigned char quant_type;
744    unsigned char reserved_3[3];
745    unsigned char intra_quant_mat[64];
746    unsigned char nonintra_quant_mat[64];
747 
748    struct {
749       unsigned char sprite_enable;
750 
751       unsigned char reserved_4[3];
752 
753       unsigned short sprite_width;
754       unsigned short sprite_height;
755       short sprite_left_coordinate;
756       short sprite_top_coordinate;
757 
758       unsigned char no_of_sprite_warping_points;
759       unsigned char sprite_warping_accuracy;
760       unsigned char sprite_brightness_change;
761       unsigned char low_latency_sprite_enable;
762    } sprite_config;
763 
764    struct {
765       struct {
766          unsigned int check_skip : 1;
767          unsigned int switch_rounding : 1;
768          unsigned int t311 : 1;
769          unsigned int reserved_bits : 29;
770       };
771 
772       unsigned char vol_mode;
773 
774       unsigned char reserved_5[3];
775    } divx_311_config;
776 
777    struct {
778       unsigned char vop_data_present;
779       unsigned char vop_coding_type;
780       unsigned char vop_quant;
781       unsigned char vop_coded;
782       unsigned char vop_rounding_type;
783       unsigned char intra_dc_vlc_thr;
784       unsigned char top_field_first;
785       unsigned char alternate_vertical_scan_flag;
786       unsigned char vop_fcode_forward;
787       unsigned char vop_fcode_backward;
788       unsigned int TRB[2];
789       unsigned int TRD[2];
790    } vop;
791 
792 } rvcn_dec_message_mpeg4_asp_vld_t;
793 
794 typedef struct rvcn_dec_message_hevc_s {
795    unsigned int sps_info_flags;
796    unsigned int pps_info_flags;
797    unsigned char chroma_format;
798    unsigned char bit_depth_luma_minus8;
799    unsigned char bit_depth_chroma_minus8;
800    unsigned char log2_max_pic_order_cnt_lsb_minus4;
801 
802    unsigned char sps_max_dec_pic_buffering_minus1;
803    unsigned char log2_min_luma_coding_block_size_minus3;
804    unsigned char log2_diff_max_min_luma_coding_block_size;
805    unsigned char log2_min_transform_block_size_minus2;
806 
807    unsigned char log2_diff_max_min_transform_block_size;
808    unsigned char max_transform_hierarchy_depth_inter;
809    unsigned char max_transform_hierarchy_depth_intra;
810    unsigned char pcm_sample_bit_depth_luma_minus1;
811 
812    unsigned char pcm_sample_bit_depth_chroma_minus1;
813    unsigned char log2_min_pcm_luma_coding_block_size_minus3;
814    unsigned char log2_diff_max_min_pcm_luma_coding_block_size;
815    unsigned char num_extra_slice_header_bits;
816 
817    unsigned char num_short_term_ref_pic_sets;
818    unsigned char num_long_term_ref_pic_sps;
819    unsigned char num_ref_idx_l0_default_active_minus1;
820    unsigned char num_ref_idx_l1_default_active_minus1;
821 
822    signed char pps_cb_qp_offset;
823    signed char pps_cr_qp_offset;
824    signed char pps_beta_offset_div2;
825    signed char pps_tc_offset_div2;
826 
827    unsigned char diff_cu_qp_delta_depth;
828    unsigned char num_tile_columns_minus1;
829    unsigned char num_tile_rows_minus1;
830    unsigned char log2_parallel_merge_level_minus2;
831 
832    unsigned short column_width_minus1[19];
833    unsigned short row_height_minus1[21];
834 
835    signed char init_qp_minus26;
836    unsigned char num_delta_pocs_ref_rps_idx;
837    unsigned char curr_idx;
838    unsigned char reserved[1];
839    int curr_poc;
840    unsigned char ref_pic_list[16];
841    int poc_list[16];
842    unsigned char ref_pic_set_st_curr_before[8];
843    unsigned char ref_pic_set_st_curr_after[8];
844    unsigned char ref_pic_set_lt_curr[8];
845 
846    unsigned char ucScalingListDCCoefSizeID2[6];
847    unsigned char ucScalingListDCCoefSizeID3[2];
848 
849    unsigned char highestTid;
850    unsigned char isNonRef;
851 
852    unsigned char p010_mode;
853    unsigned char msb_mode;
854    unsigned char luma_10to8;
855    unsigned char chroma_10to8;
856 
857    unsigned char hevc_reserved[2];
858 
859    unsigned char direct_reflist[2][15];
860    unsigned int st_rps_bits;
861    unsigned char reserved_1[15];
862 } rvcn_dec_message_hevc_t;
863 
864 typedef struct rvcn_dec_message_vp9_s {
865    unsigned int frame_header_flags;
866 
867    unsigned char frame_context_idx;
868    unsigned char reset_frame_context;
869 
870    unsigned char curr_pic_idx;
871    unsigned char interp_filter;
872 
873    unsigned char filter_level;
874    unsigned char sharpness_level;
875    unsigned char lf_adj_level[8][4][2];
876    unsigned char base_qindex;
877    signed char y_dc_delta_q;
878    signed char uv_ac_delta_q;
879    signed char uv_dc_delta_q;
880 
881    unsigned char log2_tile_cols;
882    unsigned char log2_tile_rows;
883    unsigned char tx_mode;
884    unsigned char reference_mode;
885    unsigned char chroma_format;
886 
887    unsigned char ref_frame_map[8];
888 
889    unsigned char frame_refs[3];
890    unsigned char ref_frame_sign_bias[3];
891    unsigned char frame_to_show;
892    unsigned char bit_depth_luma_minus8;
893    unsigned char bit_depth_chroma_minus8;
894 
895    unsigned char p010_mode;
896    unsigned char msb_mode;
897    unsigned char luma_10to8;
898    unsigned char chroma_10to8;
899 
900    unsigned int vp9_frame_size;
901    unsigned int compressed_header_size;
902    unsigned int uncompressed_header_size;
903    unsigned char reserved[2];
904 } rvcn_dec_message_vp9_t;
905 
906 typedef enum {
907    RVCN_DEC_AV1_IDENTITY = 0,
908    RVCN_DEC_AV1_TRANSLATION = 1,
909    RVCN_DEC_AV1_ROTZOOM = 2,
910    RVCN_DEC_AV1_AFFINE = 3,
911    RVCN_DEC_AV1_HORTRAPEZOID = 4,
912    RVCN_DEC_AV1_VERTRAPEZOID = 5,
913    RVCN_DEC_AV1_HOMOGRAPHY = 6,
914    RVCN_DEC_AV1_TRANS_TYPES = 7,
915 } rvcn_dec_transformation_type_e;
916 
917 typedef struct {
918    rvcn_dec_transformation_type_e wmtype;
919    int wmmat[8];
920    short alpha, beta, gamma, delta;
921 } rvcn_dec_warped_motion_params_t;
922 
923 typedef struct {
924    unsigned char apply_grain;
925    unsigned char scaling_points_y[14][2];
926    unsigned char num_y_points;
927    unsigned char scaling_points_cb[10][2];
928    unsigned char num_cb_points;
929    unsigned char scaling_points_cr[10][2];
930    unsigned char num_cr_points;
931    unsigned char scaling_shift;
932    unsigned char ar_coeff_lag;
933    signed char ar_coeffs_y[24];
934    signed char ar_coeffs_cb[25];
935    signed char ar_coeffs_cr[25];
936    unsigned char ar_coeff_shift;
937    unsigned char cb_mult;
938    unsigned char cb_luma_mult;
939    unsigned short cb_offset;
940    unsigned char cr_mult;
941    unsigned char cr_luma_mult;
942    unsigned short cr_offset;
943    unsigned char overlap_flag;
944    unsigned char clip_to_restricted_range;
945    unsigned char bit_depth_minus_8;
946    unsigned char chroma_scaling_from_luma;
947    unsigned char grain_scale_shift;
948    unsigned short random_seed;
949 } rvcn_dec_film_grain_params_t;
950 
951 typedef struct rvcn_dec_av1_tile_info_s {
952    unsigned int offset;
953    unsigned int size;
954 } rvcn_dec_av1_tile_info_t;
955 
956 typedef struct rvcn_dec_message_av1_s {
957    unsigned int frame_header_flags;
958    unsigned int current_frame_id;
959    unsigned int frame_offset;
960 
961    unsigned char profile;
962    unsigned char is_annexb;
963    unsigned char frame_type;
964    unsigned char primary_ref_frame;
965    unsigned char curr_pic_idx;
966 
967    unsigned char sb_size;
968    unsigned char interp_filter;
969    unsigned char filter_level[2];
970    unsigned char filter_level_u;
971    unsigned char filter_level_v;
972    unsigned char sharpness_level;
973    signed char ref_deltas[8];
974    signed char mode_deltas[2];
975    unsigned char base_qindex;
976    signed char y_dc_delta_q;
977    signed char u_dc_delta_q;
978    signed char v_dc_delta_q;
979    signed char u_ac_delta_q;
980    signed char v_ac_delta_q;
981    signed char qm_y;
982    signed char qm_u;
983    signed char qm_v;
984    signed char delta_q_res;
985    signed char delta_lf_res;
986 
987    unsigned char tile_cols;
988    unsigned char tile_rows;
989    unsigned char tx_mode;
990    unsigned char reference_mode;
991    unsigned char chroma_format;
992    unsigned int tile_size_bytes;
993    unsigned int context_update_tile_id;
994    unsigned int tile_col_start_sb[65];
995    unsigned int tile_row_start_sb[65];
996    unsigned int max_width;
997    unsigned int max_height;
998    unsigned int width;
999    unsigned int height;
1000    unsigned int superres_upscaled_width;
1001    unsigned char superres_scale_denominator;
1002    unsigned char order_hint_bits;
1003 
1004    unsigned char ref_frame_map[8];
1005    unsigned int ref_frame_offset[8];
1006    unsigned char frame_refs[7];
1007    unsigned char ref_frame_sign_bias[7];
1008 
1009    unsigned char bit_depth_luma_minus8;
1010    unsigned char bit_depth_chroma_minus8;
1011 
1012    int feature_data[8][8];
1013    unsigned char feature_mask[8];
1014 
1015    unsigned char cdef_damping;
1016    unsigned char cdef_bits;
1017    unsigned short cdef_strengths[16];
1018    unsigned short cdef_uv_strengths[16];
1019    unsigned char frame_restoration_type[3];
1020    unsigned char log2_restoration_unit_size_minus5[3];
1021 
1022    unsigned char p010_mode;
1023    unsigned char msb_mode;
1024    unsigned char luma_10to8;
1025    unsigned char chroma_10to8;
1026    unsigned char preskip_segid;
1027    unsigned char last_active_segid;
1028    unsigned char seg_lossless_flag;
1029    unsigned char coded_lossless;
1030    rvcn_dec_film_grain_params_t film_grain;
1031    unsigned int uncompressed_header_size;
1032    rvcn_dec_warped_motion_params_t global_motion[8];
1033    rvcn_dec_av1_tile_info_t tile_info[256];
1034    unsigned char reserved[3];
1035 } rvcn_dec_message_av1_t;
1036 
1037 typedef struct rvcn_dec_feature_index_s {
1038    unsigned int feature_id;
1039    unsigned int offset;
1040    unsigned int size;
1041    unsigned int filled;
1042 } rvcn_dec_feature_index_t;
1043 
1044 typedef struct rvcn_dec_feedback_header_s {
1045    unsigned int header_size;
1046    unsigned int total_size;
1047    unsigned int num_buffers;
1048    unsigned int status_report_feedback_number;
1049    unsigned int status;
1050    unsigned int value;
1051    unsigned int errorBits;
1052    rvcn_dec_feature_index_t index[1];
1053 } rvcn_dec_feedback_header_t;
1054 
1055 typedef struct rvcn_dec_feedback_profiling_s {
1056    unsigned int size;
1057 
1058    unsigned int decodingTime;
1059    unsigned int decodePlusOverhead;
1060    unsigned int masterTimerHits;
1061    unsigned int uvdLBSIREWaitCount;
1062 
1063    unsigned int avgMPCMemLatency;
1064    unsigned int maxMPCMemLatency;
1065    unsigned int uvdMPCLumaHits;
1066    unsigned int uvdMPCLumaHitPend;
1067    unsigned int uvdMPCLumaSearch;
1068    unsigned int uvdMPCChromaHits;
1069    unsigned int uvdMPCChromaHitPend;
1070    unsigned int uvdMPCChromaSearch;
1071 
1072    unsigned int uvdLMIPerfCountLo;
1073    unsigned int uvdLMIPerfCountHi;
1074    unsigned int uvdLMIAvgLatCntrEnvHit;
1075    unsigned int uvdLMILatCntr;
1076 
1077    unsigned int frameCRC0;
1078    unsigned int frameCRC1;
1079    unsigned int frameCRC2;
1080    unsigned int frameCRC3;
1081 
1082    unsigned int uvdLMIPerfMonCtrl;
1083    unsigned int uvdLMILatCtrl;
1084    unsigned int uvdMPCCntl;
1085    unsigned int reserved0[4];
1086    unsigned int decoderID;
1087    unsigned int codec;
1088 
1089    unsigned int dmaHwCrc32Enable;
1090    unsigned int dmaHwCrc32Value;
1091    unsigned int dmaHwCrc32Value2;
1092 } rvcn_dec_feedback_profiling_t;
1093 
1094 typedef struct rvcn_dec_vp9_nmv_ctx_mask_s {
1095    unsigned short classes_mask[2];
1096    unsigned short bits_mask[2];
1097    unsigned char joints_mask;
1098    unsigned char sign_mask[2];
1099    unsigned char class0_mask[2];
1100    unsigned char class0_fp_mask[2];
1101    unsigned char fp_mask[2];
1102    unsigned char class0_hp_mask[2];
1103    unsigned char hp_mask[2];
1104    unsigned char reserve[11];
1105 } rvcn_dec_vp9_nmv_ctx_mask_t;
1106 
1107 typedef struct rvcn_dec_vp9_nmv_component_s {
1108    unsigned char sign;
1109    unsigned char classes[10];
1110    unsigned char class0[1];
1111    unsigned char bits[10];
1112    unsigned char class0_fp[2][3];
1113    unsigned char fp[3];
1114    unsigned char class0_hp;
1115    unsigned char hp;
1116 } rvcn_dec_vp9_nmv_component_t;
1117 
1118 typedef struct rvcn_dec_vp9_probs_s {
1119    rvcn_dec_vp9_nmv_ctx_mask_t nmvc_mask;
1120    unsigned char coef_probs[4][2][2][6][6][3];
1121    unsigned char y_mode_prob[4][9];
1122    unsigned char uv_mode_prob[10][9];
1123    unsigned char single_ref_prob[5][2];
1124    unsigned char switchable_interp_prob[4][2];
1125    unsigned char partition_prob[16][3];
1126    unsigned char inter_mode_probs[7][3];
1127    unsigned char mbskip_probs[3];
1128    unsigned char intra_inter_prob[4];
1129    unsigned char comp_inter_prob[5];
1130    unsigned char comp_ref_prob[5];
1131    unsigned char tx_probs_32x32[2][3];
1132    unsigned char tx_probs_16x16[2][2];
1133    unsigned char tx_probs_8x8[2][1];
1134    unsigned char mv_joints[3];
1135    rvcn_dec_vp9_nmv_component_t mv_comps[2];
1136 } rvcn_dec_vp9_probs_t;
1137 
1138 typedef struct rvcn_dec_vp9_probs_segment_s {
1139    union {
1140       rvcn_dec_vp9_probs_t probs;
1141       unsigned char probs_data[RDECODE_VP9_PROBS_DATA_SIZE];
1142    };
1143 
1144    union {
1145       struct {
1146          unsigned int feature_data[8];
1147          unsigned char tree_probs[7];
1148          unsigned char pred_probs[3];
1149          unsigned char abs_delta;
1150          unsigned char feature_mask[8];
1151       } seg;
1152       unsigned char segment_data[256];
1153    };
1154 } rvcn_dec_vp9_probs_segment_t;
1155 
1156 typedef struct rvcn_dec_av1_fg_init_buf_s {
1157    short luma_grain_block[64][96];
1158    short cb_grain_block[32][48];
1159    short cr_grain_block[32][48];
1160    short scaling_lut_y[256];
1161    short scaling_lut_cb[256];
1162    short scaling_lut_cr[256];
1163    unsigned short temp_tile_left_seed[256];
1164 } rvcn_dec_av1_fg_init_buf_t;
1165 
1166 typedef struct rvcn_dec_av1_segment_fg_s {
1167    union {
1168       struct {
1169          unsigned char feature_data[128];
1170          unsigned char feature_mask[8];
1171       } seg;
1172       unsigned char segment_data[256];
1173    };
1174    rvcn_dec_av1_fg_init_buf_t fg_buf;
1175 } rvcn_dec_av1_segment_fg_t;
1176 
1177 struct jpeg_params {
1178    unsigned bsd_size;
1179    unsigned dt_pitch;
1180    unsigned dt_uv_pitch;
1181    unsigned dt_luma_top_offset;
1182    unsigned dt_chroma_top_offset;
1183    unsigned dt_chromav_top_offset;
1184    uint16_t crop_x;
1185    uint16_t crop_y;
1186    uint16_t crop_width;
1187    uint16_t crop_height;
1188 };
1189 
1190 #define RDECODE_VCN1_GPCOM_VCPU_CMD   0x2070c
1191 #define RDECODE_VCN1_GPCOM_VCPU_DATA0 0x20710
1192 #define RDECODE_VCN1_GPCOM_VCPU_DATA1 0x20714
1193 #define RDECODE_VCN1_ENGINE_CNTL      0x20718
1194 
1195 #define RDECODE_VCN2_GPCOM_VCPU_CMD   (0x503 << 2)
1196 #define RDECODE_VCN2_GPCOM_VCPU_DATA0 (0x504 << 2)
1197 #define RDECODE_VCN2_GPCOM_VCPU_DATA1 (0x505 << 2)
1198 #define RDECODE_VCN2_ENGINE_CNTL      (0x506 << 2)
1199 
1200 #define RDECODE_VCN2_5_GPCOM_VCPU_CMD   0x3c
1201 #define RDECODE_VCN2_5_GPCOM_VCPU_DATA0 0x40
1202 #define RDECODE_VCN2_5_GPCOM_VCPU_DATA1 0x44
1203 #define RDECODE_VCN2_5_ENGINE_CNTL      0x9b4
1204 
1205 #define RDECODE_SESSION_CONTEXT_SIZE (128 * 1024)
1206 
1207 unsigned ac_vcn_dec_calc_ctx_size_av1(unsigned av1_version);
1208 void ac_vcn_av1_init_probs(unsigned av1_version, uint8_t *prob);
1209 void ac_vcn_av1_init_film_grain_buffer(rvcn_dec_film_grain_params_t *fg_params, rvcn_dec_av1_fg_init_buf_t *fg_buf);
1210 
1211 #endif
1212