/*
 * Copyright 2015 Rockchip Electronics Co. LTD
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef __HAL_H264D_VDPU2_REG_TBL_H__
#define __HAL_H264D_VDPU2_REG_TBL_H__

#include "rk_type.h"

/* Number registers for the decoder */
#define DEC_VDPU_REGISTERS          159

typedef struct {
    RK_U32 sw00_49[50];
    struct {
        RK_U32 dec_tiled_msb : 1;
        RK_U32 adtion_latency : 6;
        RK_U32 dec_fixed_quant : 1;
        RK_U32 dblk_flt_dis : 1;
        RK_U32 skip_sel : 1;
        RK_U32 dec_ascmd0_dis : 1;
        RK_U32 adv_pref_dis : 1;
        RK_U32 dec_tiled_lsb : 1;
        RK_U32 refbuf_thrd : 12;
        RK_U32 refbuf_pid : 5;
        RK_U32 reverse0 : 2;
    } sw50;
    struct {
        RK_U32 stream_len : 24;
        RK_U32 stream_len_ext : 1;
        RK_U32 qp_init_val : 6;
        RK_U32 reverse0 : 1;
    } sw51;
    struct {
        RK_U32 ydim_mbst : 8;
        RK_U32 xdim_mbst : 9;
        RK_U32 adv_pref_thrd : 14;
        RK_U32 reverse0 : 1;
    } sw52;
    struct {
        RK_U32 dec_fmt_sel : 4;
        RK_U32 reverse0 : 28;
    } sw53;
    struct {
        RK_U32 dec_in_endian : 1;
        RK_U32 dec_out_endian : 1;
        RK_U32 dec_in_wordsp : 1;
        RK_U32 dec_out_wordsp : 1;
        RK_U32 dec_strm_wordsp : 1;
        RK_U32 dec_strendian_e : 1;
        RK_U32 reverse0 : 26;
    } sw54;
    struct {
        RK_U32 dec_irq : 1;
        RK_U32 dec_irq_dis : 1;
        RK_U32 reverse0 : 2;
        RK_U32 dec_rdy_sts : 1;
        RK_U32 pp_bus_sts : 1;
        RK_U32 buf_emt_sts : 1;
        RK_U32 reverse1 : 1;
        RK_U32 aso_det_sts : 1;
        RK_U32 slice_det_sts : 1;
        RK_U32 bslice_det_sts : 1;
        RK_U32 reverse2 : 1;
        RK_U32 error_det_sts : 1;
        RK_U32 timeout_det_sts : 1;
        RK_U32 reverse3 : 18;
    } sw55;
    struct {
        RK_U32 dec_axi_id_rd : 8;
        RK_U32 dec_axi_id_wr : 8;
        RK_U32 dec_max_burlen : 5;
        RK_U32 bus_pos_sel : 1;
        RK_U32 dec_data_discd_en : 1;
        RK_U32 axi_sel : 1;
        RK_U32 reverse0 : 8;
    } sw56;
    struct {
        RK_U32 dec_st_work : 1;
        RK_U32 refpic_buf2_en : 1;
        RK_U32 dec_wr_extmen_dis : 1;
        RK_U32 reverse0 : 1;
        RK_U32 dec_clkgate_en : 1;
        RK_U32 timeout_sts_en : 1;
        RK_U32 rd_cnt_tab_en : 1;
        RK_U32 sequ_mbaff_en : 1;
        RK_U32 first_reftop_en : 1;
        RK_U32 reftop_en : 1;
        RK_U32 dmmv_wr_en : 1;
        RK_U32 sorspa_en : 1;
        RK_U32 fwd_refpic_mode_sel : 1;
        RK_U32 pic_decfield_sel : 1;
        RK_U32 pic_type_sel0 : 1;
        RK_U32 pic_type_sel1 : 1;
        RK_U32 curpic_stru_sel : 1;
        RK_U32 curpic_code_sel : 1;
        RK_U32 prog_jpeg_en : 1;
        RK_U32 divx3_en : 1;
        RK_U32 rlc_mode_en : 1;
        RK_U32 addit_ch_fmt_wen : 1;
        RK_U32 st_code_exit : 1;
        RK_U32 reverse1 : 2;
        RK_U32 inter_dblspeed : 1;
        RK_U32 intra_dblspeed : 1;
        RK_U32 intra_dbl3t : 1;
        RK_U32 pref_sigchan : 1;
        RK_U32 cache_en : 1;
        RK_U32 reverse2 : 1;
        RK_U32 dec_timeout_mode : 1;
    } sw57;
    struct {
        RK_U32 soft_rst : 1;
        RK_U32 reverse0 : 31;
    } sw58;
    struct {
        RK_U32 reverse0 : 2;
        RK_U32 pflt_set0_tap2 : 10;
        RK_U32 pflt_set0_tap1 : 10;
        RK_U32 pflt_set0_tap0 : 10;
    } sw59;
    struct {
        RK_U32 addit_ch_st_adr : 32;
    } sw60;
    struct {
        RK_U32 qtable_st_adr : 32;
    } sw61;
    struct {
        RK_U32 dmmv_st_adr : 32;
    } sw62;
    struct {
        RK_U32 dec_out_st_adr : 32;
    } sw63;
    struct {
        RK_U32 rlc_vlc_st_adr : 32;
    } sw64;
    struct {
        RK_U32 refbuf_y_offset : 9;
        RK_U32 reserve0 : 3;
        RK_U32 refbuf_fildpar_mode_e : 1;
        RK_U32 refbuf_idcal_e : 1;
        RK_U32 refbuf_picid : 5;
        RK_U32 refbuf_thr_level : 12;
        RK_U32 refbuf_e : 1;
    } sw65;
    RK_U32 sw66;
    RK_U32 sw67;
    struct {
        RK_U32 refbuf_sum_bot : 16;
        RK_U32 refbuf_sum_top : 16;
    } sw68;
    struct {
        RK_U32 luma_sum_intra : 16;
        RK_U32 refbuf_sum_hit : 16;
    } sw69;
    struct {
        RK_U32 ycomp_mv_sum : 22;
        RK_U32 reserve0 : 10;
    } sw70;
    RK_U32 sw71;
    RK_U32 sw72;
    RK_U32 sw73;
    struct {
        RK_U32 init_reflist_pf4 : 5;
        RK_U32 init_reflist_pf5 : 5;
        RK_U32 init_reflist_pf6 : 5;
        RK_U32 init_reflist_pf7 : 5;
        RK_U32 init_reflist_pf8 : 5;
        RK_U32 init_reflist_pf9 : 5;
        RK_U32 reverse0 : 2;
    } sw74;
    struct {
        RK_U32 init_reflist_pf10 : 5;
        RK_U32 init_reflist_pf11 : 5;
        RK_U32 init_reflist_pf12 : 5;
        RK_U32 init_reflist_pf13 : 5;
        RK_U32 init_reflist_pf14 : 5;
        RK_U32 init_reflist_pf15 : 5;
        RK_U32 reverse0 : 2;
    } sw75;
    struct {
        RK_U32 num_ref_idx0 : 16;
        RK_U32 num_ref_idx1 : 16;
    } sw76;
    struct {
        RK_U32 num_ref_idx2 : 16;
        RK_U32 num_ref_idx3 : 16;
    } sw77;
    struct {
        RK_U32 num_ref_idx4 : 16;
        RK_U32 num_ref_idx5 : 16;
    } sw78;
    struct {
        RK_U32 num_ref_idx6 : 16;
        RK_U32 num_ref_idx7 : 16;
    } sw79;
    struct {
        RK_U32 num_ref_idx8 : 16;
        RK_U32 num_ref_idx9 : 16;
    } sw80;
    struct {
        RK_U32 num_ref_idx10 : 16;
        RK_U32 num_ref_idx11 : 16;
    } sw81;
    struct {
        RK_U32 num_ref_idx12 : 16;
        RK_U32 num_ref_idx13 : 16;
    } sw82;
    struct {
        RK_U32 num_ref_idx14 : 16;
        RK_U32 num_ref_idx15 : 16;
    } sw83;
    union {
        RK_U32 ref0_st_addr;
        struct {
            RK_U32 ref0_closer_sel : 1;
            RK_U32 ref0_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw84;
    union {
        RK_U32 ref1_st_addr;
        struct {
            RK_U32 ref1_closer_sel : 1;
            RK_U32 ref1_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw85;
    union {
        RK_U32 ref2_st_addr;
        struct {
            RK_U32 ref2_closer_sel : 1;
            RK_U32 ref2_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw86;
    union {
        RK_U32 ref3_st_addr;
        struct {
            RK_U32 ref3_closer_sel : 1;
            RK_U32 ref3_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw87;
    union {
        RK_U32 ref4_st_addr;
        struct {
            RK_U32 ref4_closer_sel : 1;
            RK_U32 ref4_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw88;
    union {
        RK_U32 ref5_st_addr;
        struct {
            RK_U32 ref5_closer_sel : 1;
            RK_U32 ref5_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw89;
    union {
        RK_U32 ref6_st_addr;
        struct {
            RK_U32 ref6_closer_sel : 1;
            RK_U32 ref6_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw90;
    union {
        RK_U32 ref7_st_addr;
        struct {
            RK_U32 ref7_closer_sel : 1;
            RK_U32 ref7_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw91;
    union {
        RK_U32 ref8_st_addr;
        struct {
            RK_U32 ref8_closer_sel : 1;
            RK_U32 ref8_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw92;
    union {
        RK_U32 ref9_st_addr;
        struct {
            RK_U32 ref9_closer_sel : 1;
            RK_U32 ref9_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw93;
    union {
        RK_U32 ref10_st_addr;
        struct {
            RK_U32 ref10_closer_sel : 1;
            RK_U32 ref10_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw94;
    union {
        RK_U32 ref11_st_addr;
        struct {
            RK_U32 ref11_closer_sel : 1;
            RK_U32 ref11_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw95;
    union {
        RK_U32 ref12_st_addr;
        struct {
            RK_U32 ref12_closer_sel : 1;
            RK_U32 ref12_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw96;
    union {
        RK_U32 ref13_st_addr;
        struct {
            RK_U32 ref13_closer_sel : 1;
            RK_U32 ref13_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw97;
    union {
        RK_U32 ref14_st_addr;
        struct {
            RK_U32 ref14_closer_sel : 1;
            RK_U32 ref14_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw98;
    union {
        RK_U32 ref15_st_addr;
        struct {
            RK_U32 ref15_closer_sel : 1;
            RK_U32 ref15_field_en : 1;
            RK_U32 reverse0 : 30;
        };
    } sw99;
    struct {
        RK_U32 init_reflist_df0 : 5;
        RK_U32 init_reflist_df1 : 5;
        RK_U32 init_reflist_df2 : 5;
        RK_U32 init_reflist_df3 : 5;
        RK_U32 init_reflist_df4 : 5;
        RK_U32 init_reflist_df5 : 5;
        RK_U32 reverse0 : 2;
    } sw100;
    struct {
        RK_U32 init_reflist_df6 : 5;
        RK_U32 init_reflist_df7 : 5;
        RK_U32 init_reflist_df8 : 5;
        RK_U32 init_reflist_df9 : 5;
        RK_U32 init_reflist_df10 : 5;
        RK_U32 init_reflist_df11 : 5;
        RK_U32 reverse0 : 2;
    } sw101;
    struct {
        RK_U32 init_reflist_df12 : 5;
        RK_U32 init_reflist_df13 : 5;
        RK_U32 init_reflist_df14 : 5;
        RK_U32 init_reflist_df15 : 5;
        RK_U32 reverse0 : 12;
    } sw102;
    struct {
        RK_U32 init_reflist_db0 : 5;
        RK_U32 init_reflist_db1 : 5;
        RK_U32 init_reflist_db2 : 5;
        RK_U32 init_reflist_db3 : 5;
        RK_U32 init_reflist_db4 : 5;
        RK_U32 init_reflist_db5 : 5;
        RK_U32 reverse0 : 2;
    } sw103;
    struct {
        RK_U32 init_reflist_db6 : 5;
        RK_U32 init_reflist_db7 : 5;
        RK_U32 init_reflist_db8 : 5;
        RK_U32 init_reflist_db9 : 5;
        RK_U32 init_reflist_db10 : 5;
        RK_U32 init_reflist_db11 : 5;
        RK_U32 reverse0 : 2;
    } sw104;
    struct {
        RK_U32 init_reflist_db12 : 5;
        RK_U32 init_reflist_db13 : 5;
        RK_U32 init_reflist_db14 : 5;
        RK_U32 init_reflist_db15 : 5;
        RK_U32 reverse0 : 12;
    } sw105;
    struct {
        RK_U32 init_reflist_pf0 : 5;
        RK_U32 init_reflist_pf1 : 5;
        RK_U32 init_reflist_pf2 : 5;
        RK_U32 init_reflist_pf3 : 5;
        RK_U32 reverse0 : 12;
    } sw106;
    struct {
        RK_U32 refpic_term_flag : 32;
    } sw107;
    struct {
        RK_U32 refpic_valid_flag : 32;
    } sw108;
    struct {
        RK_U32 strm_start_bit : 6;
        RK_U32 reverse0 : 26;
    } sw109;
    struct {
        RK_U32 pic_mb_w : 9;
        RK_U32 pic_mb_h : 8;
        RK_U32 flt_offset_cb_qp : 5;
        RK_U32 flt_offset_cr_qp : 5;
        RK_U32 reverse0 : 5;
    } sw110;
    struct {
        RK_U32 max_refnum : 5;
        RK_U32 reverse0 : 11;
        RK_U32 wp_bslice_sel : 2;
        RK_U32 reverse1 : 14;
    } sw111;
    struct {
        RK_U32 curfrm_num : 16;
        RK_U32 cur_frm_len : 5;
        RK_U32 reverse0 : 9;
        RK_U32 rpcp_flag : 1;
        RK_U32 dblk_ctrl_flag : 1;
    } sw112;
    struct {
        RK_U32 idr_pic_id : 16;
        RK_U32 refpic_mk_len : 11;
        RK_U32 reverse0 : 5;
    } sw113;
    struct {
        RK_U32 poc_field_len : 8;
        RK_U32 reverse0 : 6;
        RK_U32 max_refidx0 : 5;
        RK_U32 max_refidx1 : 5;
        RK_U32 pps_id : 8;
    } sw114;
    struct {
        RK_U32 fieldpic_flag_exist : 1;
        RK_U32 scl_matrix_en : 1;
        RK_U32 tranf_8x8_flag_en : 1;
        RK_U32 const_intra_en : 1;
        RK_U32 weight_pred_en : 1;
        RK_U32 cabac_en : 1;
        RK_U32 monochr_en : 1;
        RK_U32 dlmv_method_en : 1;
        RK_U32 idr_pic_flag : 1;
        RK_U32 reverse0 : 23;
    } sw115;
    RK_U32 sw116_158[43];
} H264dVdpuRegs_t;

#endif /*__HAL_H264D_VDPU_REG_TBL_H__*/
