xref: /rockchip-linux_mpp/mpp/hal/rkdec/inc/vdpu34x_avs2d.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  * Copyright 2022 Rockchip Electronics Co. LTD
3*437bfbebSnyanmisaka  *
4*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
5*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
6*437bfbebSnyanmisaka  * You may obtain a copy of the License at
7*437bfbebSnyanmisaka  *
8*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
9*437bfbebSnyanmisaka  *
10*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
11*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
12*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
14*437bfbebSnyanmisaka  * limitations under the License.
15*437bfbebSnyanmisaka  */
16*437bfbebSnyanmisaka 
17*437bfbebSnyanmisaka #ifndef __VDPU34X_AVS2D_H__
18*437bfbebSnyanmisaka #define __VDPU34X_AVS2D_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "vdpu34x_com.h"
21*437bfbebSnyanmisaka 
22*437bfbebSnyanmisaka typedef struct Vdpu34xRegAvs2dParam_t {
23*437bfbebSnyanmisaka     struct SWREG64_H26X_SET {
24*437bfbebSnyanmisaka         RK_U32      h26x_frame_orslice      : 1;
25*437bfbebSnyanmisaka         RK_U32      h26x_rps_mode           : 1;
26*437bfbebSnyanmisaka         RK_U32      h26x_stream_mode        : 1;
27*437bfbebSnyanmisaka         RK_U32      h26x_stream_lastpacket  : 1;
28*437bfbebSnyanmisaka         RK_U32      h264_firstslice_flag    : 1;
29*437bfbebSnyanmisaka         RK_U32      reserve                 : 27;
30*437bfbebSnyanmisaka     } reg64;
31*437bfbebSnyanmisaka 
32*437bfbebSnyanmisaka     RK_U32 reg65_cur_top_poc;
33*437bfbebSnyanmisaka     RK_U32 reg66_cur_bot_poc;
34*437bfbebSnyanmisaka 
35*437bfbebSnyanmisaka     RK_U32 reg67_098_ref_poc[32];
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka     struct SWREG99_AVS2_REF0_3_INFO {
38*437bfbebSnyanmisaka         RK_U32 ref0_field                   : 1;
39*437bfbebSnyanmisaka         RK_U32                              : 1;
40*437bfbebSnyanmisaka         RK_U32 ref0_botfield_used           : 1;
41*437bfbebSnyanmisaka         RK_U32 ref0_valid_flag              : 1;
42*437bfbebSnyanmisaka         RK_U32                              : 4;
43*437bfbebSnyanmisaka         RK_U32 ref1_field                   : 1;
44*437bfbebSnyanmisaka         RK_U32                              : 1;
45*437bfbebSnyanmisaka         RK_U32 ref1_botfield_used           : 1;
46*437bfbebSnyanmisaka         RK_U32 ref1_valid_flag              : 1;
47*437bfbebSnyanmisaka         RK_U32                              : 4;
48*437bfbebSnyanmisaka         RK_U32 ref2_field                   : 1;
49*437bfbebSnyanmisaka         RK_U32                              : 1;
50*437bfbebSnyanmisaka         RK_U32 ref2_botfield_used           : 1;
51*437bfbebSnyanmisaka         RK_U32 ref2_valid_flag              : 1;
52*437bfbebSnyanmisaka         RK_U32                              : 4;
53*437bfbebSnyanmisaka         RK_U32 ref3_field                   : 1;
54*437bfbebSnyanmisaka         RK_U32                              : 1;
55*437bfbebSnyanmisaka         RK_U32 ref3_botfield_used           : 1;
56*437bfbebSnyanmisaka         RK_U32 ref3_valid_flag              : 1;
57*437bfbebSnyanmisaka         RK_U32                              : 4;
58*437bfbebSnyanmisaka     } reg99;
59*437bfbebSnyanmisaka 
60*437bfbebSnyanmisaka     struct SWREG100_AVS2_REF4_7_INFO {
61*437bfbebSnyanmisaka         RK_U32 ref4_field                   : 1;
62*437bfbebSnyanmisaka         RK_U32                              : 1;
63*437bfbebSnyanmisaka         RK_U32 ref4_botfield_used           : 1;
64*437bfbebSnyanmisaka         RK_U32 ref4_valid_flag              : 1;
65*437bfbebSnyanmisaka         RK_U32                              : 4;
66*437bfbebSnyanmisaka         RK_U32 ref5_field                   : 1;
67*437bfbebSnyanmisaka         RK_U32                              : 1;
68*437bfbebSnyanmisaka         RK_U32 ref5_botfield_used           : 1;
69*437bfbebSnyanmisaka         RK_U32 ref5_valid_flag              : 1;
70*437bfbebSnyanmisaka         RK_U32                              : 4;
71*437bfbebSnyanmisaka         RK_U32 ref6_field                   : 1;
72*437bfbebSnyanmisaka         RK_U32                              : 1;
73*437bfbebSnyanmisaka         RK_U32 ref6_botfield_used           : 1;
74*437bfbebSnyanmisaka         RK_U32 ref6_valid_flag              : 1;
75*437bfbebSnyanmisaka         RK_U32                              : 4;
76*437bfbebSnyanmisaka         RK_U32 ref7_field                   : 1;
77*437bfbebSnyanmisaka         RK_U32                              : 1;
78*437bfbebSnyanmisaka         RK_U32 ref7_botfield_used           : 1;
79*437bfbebSnyanmisaka         RK_U32 ref7_valid_flag              : 1;
80*437bfbebSnyanmisaka         RK_U32                              : 4;
81*437bfbebSnyanmisaka     } reg100;
82*437bfbebSnyanmisaka 
83*437bfbebSnyanmisaka     RK_U32 reg101_102[2];
84*437bfbebSnyanmisaka 
85*437bfbebSnyanmisaka     struct SW103_CTRL_EXTRA {
86*437bfbebSnyanmisaka         // 0 : use default 255, 1 : use fixed 256
87*437bfbebSnyanmisaka         RK_U32 slice_hor_pos_ctrl           : 1;
88*437bfbebSnyanmisaka         RK_U32                              : 31;
89*437bfbebSnyanmisaka     } reg103;
90*437bfbebSnyanmisaka 
91*437bfbebSnyanmisaka     RK_U32 reg104;
92*437bfbebSnyanmisaka     struct SW105_HEAD_LEN {
93*437bfbebSnyanmisaka         RK_U32 head_len                     : 4;
94*437bfbebSnyanmisaka         RK_U32 count_update_en              : 1;
95*437bfbebSnyanmisaka         RK_U32                              : 27;
96*437bfbebSnyanmisaka     } reg105;
97*437bfbebSnyanmisaka 
98*437bfbebSnyanmisaka     RK_U32 reg106_111[6];
99*437bfbebSnyanmisaka     struct SW112_ERROR_REF_INFO {
100*437bfbebSnyanmisaka         // 0 : Frame, 1 : field
101*437bfbebSnyanmisaka         RK_U32 ref_error_field              : 1;
102*437bfbebSnyanmisaka         /**
103*437bfbebSnyanmisaka          * @brief Refer error is top field flag.
104*437bfbebSnyanmisaka          * 0 : Bottom field flag,
105*437bfbebSnyanmisaka          * 1 : Top field flag.
106*437bfbebSnyanmisaka          */
107*437bfbebSnyanmisaka         RK_U32 ref_error_topfield           : 1;
108*437bfbebSnyanmisaka         // For inter, 0 : top field is no used, 1 : top field is used.
109*437bfbebSnyanmisaka         RK_U32 ref_error_topfield_used      : 1;
110*437bfbebSnyanmisaka         // For inter, 0 : bottom field is no used, 1 : bottom field is used.
111*437bfbebSnyanmisaka         RK_U32 ref_error_botfield_used      : 1;
112*437bfbebSnyanmisaka         RK_U32                              : 28;
113*437bfbebSnyanmisaka     } reg112;
114*437bfbebSnyanmisaka 
115*437bfbebSnyanmisaka } Vdpu34xRegAvs2dParam;
116*437bfbebSnyanmisaka 
117*437bfbebSnyanmisaka typedef struct Vdpu34xRegAvs2dAddr_t {
118*437bfbebSnyanmisaka     /* SWREG160 */
119*437bfbebSnyanmisaka     RK_U32  reg160_no_use;
120*437bfbebSnyanmisaka 
121*437bfbebSnyanmisaka     /* SWREG161 */
122*437bfbebSnyanmisaka     RK_U32  head_base;
123*437bfbebSnyanmisaka 
124*437bfbebSnyanmisaka     /* SWREG162 */
125*437bfbebSnyanmisaka     RK_U32  reg162_no_use;
126*437bfbebSnyanmisaka 
127*437bfbebSnyanmisaka     /* SWREG163 */
128*437bfbebSnyanmisaka     RK_U32  rps_base;
129*437bfbebSnyanmisaka 
130*437bfbebSnyanmisaka     /* SWREG164~179 */
131*437bfbebSnyanmisaka     RK_U32  ref_base[16];
132*437bfbebSnyanmisaka 
133*437bfbebSnyanmisaka     /* SWREG180 */
134*437bfbebSnyanmisaka     RK_U32  scanlist_addr;
135*437bfbebSnyanmisaka 
136*437bfbebSnyanmisaka     /* SWREG181~196 */
137*437bfbebSnyanmisaka     RK_U32  colmv_base[16];
138*437bfbebSnyanmisaka 
139*437bfbebSnyanmisaka     /* SWREG197 */
140*437bfbebSnyanmisaka     RK_U32  cabactbl_base;
141*437bfbebSnyanmisaka } Vdpu34xRegAvs2dAddr;
142*437bfbebSnyanmisaka 
143*437bfbebSnyanmisaka typedef struct Vdpu34xAvs2dRegSet_t {
144*437bfbebSnyanmisaka     Vdpu34xRegCommon common;
145*437bfbebSnyanmisaka     Vdpu34xRegAvs2dParam avs2d_param;
146*437bfbebSnyanmisaka     Vdpu34xRegCommonAddr common_addr;
147*437bfbebSnyanmisaka     Vdpu34xRegAvs2dAddr avs2d_addr;
148*437bfbebSnyanmisaka     Vdpu34xRegIrqStatus irq_status;
149*437bfbebSnyanmisaka     Vdpu34xRegStatistic statistic;
150*437bfbebSnyanmisaka } Vdpu34xAvs2dRegSet;
151*437bfbebSnyanmisaka 
152*437bfbebSnyanmisaka #endif /*__VDPU34X_AVS2D_H__*/
153