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 __VDPU382_AVS2D_H__ 18*437bfbebSnyanmisaka #define __VDPU382_AVS2D_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "vdpu382_com.h" 21*437bfbebSnyanmisaka 22*437bfbebSnyanmisaka typedef struct Vdpu382RegAvs2dParam_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 } Vdpu382RegAvs2dParam; 116*437bfbebSnyanmisaka 117*437bfbebSnyanmisaka typedef struct Vdpu382RegAvs2dAddr_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 142*437bfbebSnyanmisaka RK_U32 scale_down_luma_base; 143*437bfbebSnyanmisaka 144*437bfbebSnyanmisaka RK_U32 scale_down_chorme_base; 145*437bfbebSnyanmisaka } Vdpu382RegAvs2dAddr; 146*437bfbebSnyanmisaka 147*437bfbebSnyanmisaka typedef struct Vdpu382Avs2dRegSet_t { 148*437bfbebSnyanmisaka Vdpu382RegCommon common; 149*437bfbebSnyanmisaka Vdpu382RegAvs2dParam avs2d_param; 150*437bfbebSnyanmisaka Vdpu382RegCommonAddr common_addr; 151*437bfbebSnyanmisaka Vdpu382RegAvs2dAddr avs2d_addr; 152*437bfbebSnyanmisaka Vdpu382RegIrqStatus irq_status; 153*437bfbebSnyanmisaka Vdpu382RegStatistic statistic; 154*437bfbebSnyanmisaka } Vdpu382Avs2dRegSet; 155*437bfbebSnyanmisaka 156*437bfbebSnyanmisaka #endif /*__VDPU382_AVS2D_H__*/ 157