/********************************************************************************
 * Marvell GPL License Option
 *
 * If you received this File from Marvell, you may opt to use, redistribute and/or
 * modify this File in accordance with the terms and conditions of the General
 * Public License Version 2, June 1991 (the "GPL License"), a copy of which is
 * available along with the File in the license.txt file or by writing to the Free
 * Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
 * on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
 *
 * THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
 * DISCLAIMED.  The GPL License provides additional details about this warranty
 * disclaimer.
 ******************************************************************************/

//////
/// don't edit! auto-generated by docc: tsSS.h
////////////////////////////////////////////////////////////
#ifndef tsSS_h
#define tsSS_h (){}


#include "ctypes.h"

#pragma pack(1)
#ifdef __cplusplus
  extern "C" {
#endif

#ifndef _DOCC_H_BITOPS_
#define _DOCC_H_BITOPS_ (){}

    #define _bSETMASK_(b)                                      ((b)<32 ? (1<<((b)&31)) : 0)
    #define _NSETMASK_(msb,lsb)                                (_bSETMASK_((msb)+1)-_bSETMASK_(lsb))
    #define _bCLRMASK_(b)                                      (~_bSETMASK_(b))
    #define _NCLRMASK_(msb,lsb)                                (~_NSETMASK_(msb,lsb))
    #define _BFGET_(r,msb,lsb)                                 (_NSETMASK_((msb)-(lsb),0)&((r)>>(lsb)))
    #define _BFSET_(r,msb,lsb,v)                               do{ (r)&=_NCLRMASK_(msb,lsb); (r)|=_NSETMASK_(msb,lsb)&((v)<<(lsb)); }while(0)

#endif



//////
/// 
/// $INTERFACE OneReg                                   (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 OneReg               (RW)
///               %unsigned 8  Byte0                     0x0
///               %unsigned 8  Byte1                     0x0
///               %unsigned 8  Byte2                     0x0
///               %unsigned 8  Byte3                     0x0
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_OneReg
#define h_OneReg (){}

    #define     RA_OneReg_OneReg                               0x0000

    #define     BA_OneReg_OneReg_Byte0                         0x0000
    #define     B16OneReg_OneReg_Byte0                         0x0000
    #define   LSb32OneReg_OneReg_Byte0                            0
    #define   LSb16OneReg_OneReg_Byte0                            0
    #define       bOneReg_OneReg_Byte0                         8
    #define   MSK32OneReg_OneReg_Byte0                            0x000000FF

    #define     BA_OneReg_OneReg_Byte1                         0x0001
    #define     B16OneReg_OneReg_Byte1                         0x0000
    #define   LSb32OneReg_OneReg_Byte1                            8
    #define   LSb16OneReg_OneReg_Byte1                            8
    #define       bOneReg_OneReg_Byte1                         8
    #define   MSK32OneReg_OneReg_Byte1                            0x0000FF00

    #define     BA_OneReg_OneReg_Byte2                         0x0002
    #define     B16OneReg_OneReg_Byte2                         0x0002
    #define   LSb32OneReg_OneReg_Byte2                            16
    #define   LSb16OneReg_OneReg_Byte2                            0
    #define       bOneReg_OneReg_Byte2                         8
    #define   MSK32OneReg_OneReg_Byte2                            0x00FF0000

    #define     BA_OneReg_OneReg_Byte3                         0x0003
    #define     B16OneReg_OneReg_Byte3                         0x0002
    #define   LSb32OneReg_OneReg_Byte3                            24
    #define   LSb16OneReg_OneReg_Byte3                            8
    #define       bOneReg_OneReg_Byte3                         8
    #define   MSK32OneReg_OneReg_Byte3                            0xFF000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_OneReg {
    ///////////////////////////////////////////////////////////
    #define   GET32OneReg_OneReg_Byte0(r32)                    _BFGET_(r32, 7, 0)
    #define   SET32OneReg_OneReg_Byte0(r32,v)                  _BFSET_(r32, 7, 0,v)
    #define   GET16OneReg_OneReg_Byte0(r16)                    _BFGET_(r16, 7, 0)
    #define   SET16OneReg_OneReg_Byte0(r16,v)                  _BFSET_(r16, 7, 0,v)

    #define   GET32OneReg_OneReg_Byte1(r32)                    _BFGET_(r32,15, 8)
    #define   SET32OneReg_OneReg_Byte1(r32,v)                  _BFSET_(r32,15, 8,v)
    #define   GET16OneReg_OneReg_Byte1(r16)                    _BFGET_(r16,15, 8)
    #define   SET16OneReg_OneReg_Byte1(r16,v)                  _BFSET_(r16,15, 8,v)

    #define   GET32OneReg_OneReg_Byte2(r32)                    _BFGET_(r32,23,16)
    #define   SET32OneReg_OneReg_Byte2(r32,v)                  _BFSET_(r32,23,16,v)
    #define   GET16OneReg_OneReg_Byte2(r16)                    _BFGET_(r16, 7, 0)
    #define   SET16OneReg_OneReg_Byte2(r16,v)                  _BFSET_(r16, 7, 0,v)

    #define   GET32OneReg_OneReg_Byte3(r32)                    _BFGET_(r32,31,24)
    #define   SET32OneReg_OneReg_Byte3(r32,v)                  _BFSET_(r32,31,24,v)
    #define   GET16OneReg_OneReg_Byte3(r16)                    _BFGET_(r16,15, 8)
    #define   SET16OneReg_OneReg_Byte3(r16,v)                  _BFSET_(r16,15, 8,v)

    #define     w32OneReg_OneReg                               {\
            UNSG32 uOneReg_Byte0                               :  8;\
            UNSG32 uOneReg_Byte1                               :  8;\
            UNSG32 uOneReg_Byte2                               :  8;\
            UNSG32 uOneReg_Byte3                               :  8;\
          }
    union { UNSG32 u32OneReg_OneReg;
            struct w32OneReg_OneReg;
          };
    ///////////////////////////////////////////////////////////
    } SIE_OneReg;

    typedef union  T32OneReg_OneReg
          { UNSG32 u32;
            struct w32OneReg_OneReg;
                 } T32OneReg_OneReg;
    ///////////////////////////////////////////////////////////

    typedef union  TOneReg_OneReg
          { UNSG32 u32[1];
            struct {
            struct w32OneReg_OneReg;
                   };
                 } TOneReg_OneReg;

    ///////////////////////////////////////////////////////////
     SIGN32 OneReg_drvrd(SIE_OneReg *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 OneReg_drvwr(SIE_OneReg *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void OneReg_reset(SIE_OneReg *p);
     SIGN32 OneReg_cmp  (SIE_OneReg *p, SIE_OneReg *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define OneReg_check(p,pie,pfx,hLOG) OneReg_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define OneReg_print(p,    pfx,hLOG) OneReg_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: OneReg
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE TSOTP                                    (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (RW)
///               %unsigned 4  test                      0x5
///               %unsigned 1  rstb                      0x1
///               %unsigned 1  csb                       0x1
///               %unsigned 1  pgmb                      0x1
///               %unsigned 1  sclk                      0x0
///               %unsigned 1  load                      0x1
///               %unsigned 1  pdwn                      0x0
///               %unsigned 13 addr                      0x0
///                                    ###
///                                    * select the OTP cells to be programmed; only 0~2699 are valid numbers
///                                    ###
///               %unsigned 8  crcchk                    0x0
///               %%        1          # Stuffing bits...
///     @ 0x00004                      (RW)
///               %unsigned 1  progseqcode               0x0
///               %unsigned 1  progseqcodeclk            0x0
///               %%        30         # Stuffing bits...
///     @ 0x00008                      (R-)
///               %unsigned 32 data0                     0x1
///               %unsigned 32 data1                     0x1
///               %unsigned 2  data2                     0x1
///               %unsigned 1  security                  0x1
///               %unsigned 1  rddone                    0x0
///               %unsigned 1  dout                      0x1
///               %unsigned 1  match                     0x1
///                                    ###
///                                    * please refer to OTP Macro Document regarding to definition and programming timing about these bits.
///                                    ###
///               %%        26         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      20B, bits:     103b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TSOTP
#define h_TSOTP (){}

    #define     BA_TSOTP_test                                  0x0000
    #define     B16TSOTP_test                                  0x0000
    #define   LSb32TSOTP_test                                     0
    #define   LSb16TSOTP_test                                     0
    #define       bTSOTP_test                                  4
    #define   MSK32TSOTP_test                                     0x0000000F

    #define     BA_TSOTP_rstb                                  0x0000
    #define     B16TSOTP_rstb                                  0x0000
    #define   LSb32TSOTP_rstb                                     4
    #define   LSb16TSOTP_rstb                                     4
    #define       bTSOTP_rstb                                  1
    #define   MSK32TSOTP_rstb                                     0x00000010

    #define     BA_TSOTP_csb                                   0x0000
    #define     B16TSOTP_csb                                   0x0000
    #define   LSb32TSOTP_csb                                      5
    #define   LSb16TSOTP_csb                                      5
    #define       bTSOTP_csb                                   1
    #define   MSK32TSOTP_csb                                      0x00000020

    #define     BA_TSOTP_pgmb                                  0x0000
    #define     B16TSOTP_pgmb                                  0x0000
    #define   LSb32TSOTP_pgmb                                     6
    #define   LSb16TSOTP_pgmb                                     6
    #define       bTSOTP_pgmb                                  1
    #define   MSK32TSOTP_pgmb                                     0x00000040

    #define     BA_TSOTP_sclk                                  0x0000
    #define     B16TSOTP_sclk                                  0x0000
    #define   LSb32TSOTP_sclk                                     7
    #define   LSb16TSOTP_sclk                                     7
    #define       bTSOTP_sclk                                  1
    #define   MSK32TSOTP_sclk                                     0x00000080

    #define     BA_TSOTP_load                                  0x0001
    #define     B16TSOTP_load                                  0x0000
    #define   LSb32TSOTP_load                                     8
    #define   LSb16TSOTP_load                                     8
    #define       bTSOTP_load                                  1
    #define   MSK32TSOTP_load                                     0x00000100

    #define     BA_TSOTP_pdwn                                  0x0001
    #define     B16TSOTP_pdwn                                  0x0000
    #define   LSb32TSOTP_pdwn                                     9
    #define   LSb16TSOTP_pdwn                                     9
    #define       bTSOTP_pdwn                                  1
    #define   MSK32TSOTP_pdwn                                     0x00000200

    #define     BA_TSOTP_addr                                  0x0001
    #define     B16TSOTP_addr                                  0x0000
    #define   LSb32TSOTP_addr                                     10
    #define   LSb16TSOTP_addr                                     10
    #define       bTSOTP_addr                                  13
    #define   MSK32TSOTP_addr                                     0x007FFC00

    #define     BA_TSOTP_crcchk                                0x0002
    #define     B16TSOTP_crcchk                                0x0002
    #define   LSb32TSOTP_crcchk                                   23
    #define   LSb16TSOTP_crcchk                                   7
    #define       bTSOTP_crcchk                                8
    #define   MSK32TSOTP_crcchk                                   0x7F800000
    ///////////////////////////////////////////////////////////

    #define     BA_TSOTP_progseqcode                           0x0004
    #define     B16TSOTP_progseqcode                           0x0004
    #define   LSb32TSOTP_progseqcode                              0
    #define   LSb16TSOTP_progseqcode                              0
    #define       bTSOTP_progseqcode                           1
    #define   MSK32TSOTP_progseqcode                              0x00000001

    #define     BA_TSOTP_progseqcodeclk                        0x0004
    #define     B16TSOTP_progseqcodeclk                        0x0004
    #define   LSb32TSOTP_progseqcodeclk                           1
    #define   LSb16TSOTP_progseqcodeclk                           1
    #define       bTSOTP_progseqcodeclk                        1
    #define   MSK32TSOTP_progseqcodeclk                           0x00000002
    ///////////////////////////////////////////////////////////

    #define     BA_TSOTP_data0                                 0x0008
    #define     B16TSOTP_data0                                 0x0008
    #define   LSb32TSOTP_data0                                    0
    #define   LSb16TSOTP_data0                                    0
    #define       bTSOTP_data0                                 32
    #define   MSK32TSOTP_data0                                    0xFFFFFFFF

    #define     BA_TSOTP_data1                                 0x000C
    #define     B16TSOTP_data1                                 0x000C
    #define   LSb32TSOTP_data1                                    0
    #define   LSb16TSOTP_data1                                    0
    #define       bTSOTP_data1                                 32
    #define   MSK32TSOTP_data1                                    0xFFFFFFFF

    #define     BA_TSOTP_data2                                 0x0010
    #define     B16TSOTP_data2                                 0x0010
    #define   LSb32TSOTP_data2                                    0
    #define   LSb16TSOTP_data2                                    0
    #define       bTSOTP_data2                                 2
    #define   MSK32TSOTP_data2                                    0x00000003

    #define     BA_TSOTP_security                              0x0010
    #define     B16TSOTP_security                              0x0010
    #define   LSb32TSOTP_security                                 2
    #define   LSb16TSOTP_security                                 2
    #define       bTSOTP_security                              1
    #define   MSK32TSOTP_security                                 0x00000004

    #define     BA_TSOTP_rddone                                0x0010
    #define     B16TSOTP_rddone                                0x0010
    #define   LSb32TSOTP_rddone                                   3
    #define   LSb16TSOTP_rddone                                   3
    #define       bTSOTP_rddone                                1
    #define   MSK32TSOTP_rddone                                   0x00000008

    #define     BA_TSOTP_dout                                  0x0010
    #define     B16TSOTP_dout                                  0x0010
    #define   LSb32TSOTP_dout                                     4
    #define   LSb16TSOTP_dout                                     4
    #define       bTSOTP_dout                                  1
    #define   MSK32TSOTP_dout                                     0x00000010

    #define     BA_TSOTP_match                                 0x0010
    #define     B16TSOTP_match                                 0x0010
    #define   LSb32TSOTP_match                                    5
    #define   LSb16TSOTP_match                                    5
    #define       bTSOTP_match                                 1
    #define   MSK32TSOTP_match                                    0x00000020
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TSOTP {
    ///////////////////////////////////////////////////////////
    #define   GET32TSOTP_test(r32)                             _BFGET_(r32, 3, 0)
    #define   SET32TSOTP_test(r32,v)                           _BFSET_(r32, 3, 0,v)
    #define   GET16TSOTP_test(r16)                             _BFGET_(r16, 3, 0)
    #define   SET16TSOTP_test(r16,v)                           _BFSET_(r16, 3, 0,v)

    #define   GET32TSOTP_rstb(r32)                             _BFGET_(r32, 4, 4)
    #define   SET32TSOTP_rstb(r32,v)                           _BFSET_(r32, 4, 4,v)
    #define   GET16TSOTP_rstb(r16)                             _BFGET_(r16, 4, 4)
    #define   SET16TSOTP_rstb(r16,v)                           _BFSET_(r16, 4, 4,v)

    #define   GET32TSOTP_csb(r32)                              _BFGET_(r32, 5, 5)
    #define   SET32TSOTP_csb(r32,v)                            _BFSET_(r32, 5, 5,v)
    #define   GET16TSOTP_csb(r16)                              _BFGET_(r16, 5, 5)
    #define   SET16TSOTP_csb(r16,v)                            _BFSET_(r16, 5, 5,v)

    #define   GET32TSOTP_pgmb(r32)                             _BFGET_(r32, 6, 6)
    #define   SET32TSOTP_pgmb(r32,v)                           _BFSET_(r32, 6, 6,v)
    #define   GET16TSOTP_pgmb(r16)                             _BFGET_(r16, 6, 6)
    #define   SET16TSOTP_pgmb(r16,v)                           _BFSET_(r16, 6, 6,v)

    #define   GET32TSOTP_sclk(r32)                             _BFGET_(r32, 7, 7)
    #define   SET32TSOTP_sclk(r32,v)                           _BFSET_(r32, 7, 7,v)
    #define   GET16TSOTP_sclk(r16)                             _BFGET_(r16, 7, 7)
    #define   SET16TSOTP_sclk(r16,v)                           _BFSET_(r16, 7, 7,v)

    #define   GET32TSOTP_load(r32)                             _BFGET_(r32, 8, 8)
    #define   SET32TSOTP_load(r32,v)                           _BFSET_(r32, 8, 8,v)
    #define   GET16TSOTP_load(r16)                             _BFGET_(r16, 8, 8)
    #define   SET16TSOTP_load(r16,v)                           _BFSET_(r16, 8, 8,v)

    #define   GET32TSOTP_pdwn(r32)                             _BFGET_(r32, 9, 9)
    #define   SET32TSOTP_pdwn(r32,v)                           _BFSET_(r32, 9, 9,v)
    #define   GET16TSOTP_pdwn(r16)                             _BFGET_(r16, 9, 9)
    #define   SET16TSOTP_pdwn(r16,v)                           _BFSET_(r16, 9, 9,v)

    #define   GET32TSOTP_addr(r32)                             _BFGET_(r32,22,10)
    #define   SET32TSOTP_addr(r32,v)                           _BFSET_(r32,22,10,v)

    #define   GET32TSOTP_crcchk(r32)                           _BFGET_(r32,30,23)
    #define   SET32TSOTP_crcchk(r32,v)                         _BFSET_(r32,30,23,v)
    #define   GET16TSOTP_crcchk(r16)                           _BFGET_(r16,14, 7)
    #define   SET16TSOTP_crcchk(r16,v)                         _BFSET_(r16,14, 7,v)

            UNSG32 u_test                                      :  4;
            UNSG32 u_rstb                                      :  1;
            UNSG32 u_csb                                       :  1;
            UNSG32 u_pgmb                                      :  1;
            UNSG32 u_sclk                                      :  1;
            UNSG32 u_load                                      :  1;
            UNSG32 u_pdwn                                      :  1;
            UNSG32 u_addr                                      : 13;
            UNSG32 u_crcchk                                    :  8;
            UNSG32 RSVDx0_b31                                  :  1;
    ///////////////////////////////////////////////////////////
    #define   GET32TSOTP_progseqcode(r32)                      _BFGET_(r32, 0, 0)
    #define   SET32TSOTP_progseqcode(r32,v)                    _BFSET_(r32, 0, 0,v)
    #define   GET16TSOTP_progseqcode(r16)                      _BFGET_(r16, 0, 0)
    #define   SET16TSOTP_progseqcode(r16,v)                    _BFSET_(r16, 0, 0,v)

    #define   GET32TSOTP_progseqcodeclk(r32)                   _BFGET_(r32, 1, 1)
    #define   SET32TSOTP_progseqcodeclk(r32,v)                 _BFSET_(r32, 1, 1,v)
    #define   GET16TSOTP_progseqcodeclk(r16)                   _BFGET_(r16, 1, 1)
    #define   SET16TSOTP_progseqcodeclk(r16,v)                 _BFSET_(r16, 1, 1,v)

            UNSG32 u_progseqcode                               :  1;
            UNSG32 u_progseqcodeclk                            :  1;
            UNSG32 RSVDx4_b2                                   : 30;
    ///////////////////////////////////////////////////////////
    #define   GET32TSOTP_data0(r32)                            _BFGET_(r32,31, 0)
    #define   SET32TSOTP_data0(r32,v)                          _BFSET_(r32,31, 0,v)

            UNSG32 u_data0                                     : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32TSOTP_data1(r32)                            _BFGET_(r32,31, 0)
    #define   SET32TSOTP_data1(r32,v)                          _BFSET_(r32,31, 0,v)

            UNSG32 u_data1                                     : 32;
    ///////////////////////////////////////////////////////////

    #define   GET32TSOTP_data2(r32)                            _BFGET_(r32, 1, 0)
    #define   SET32TSOTP_data2(r32,v)                          _BFSET_(r32, 1, 0,v)
    #define   GET16TSOTP_data2(r16)                            _BFGET_(r16, 1, 0)
    #define   SET16TSOTP_data2(r16,v)                          _BFSET_(r16, 1, 0,v)

    #define   GET32TSOTP_security(r32)                         _BFGET_(r32, 2, 2)
    #define   SET32TSOTP_security(r32,v)                       _BFSET_(r32, 2, 2,v)
    #define   GET16TSOTP_security(r16)                         _BFGET_(r16, 2, 2)
    #define   SET16TSOTP_security(r16,v)                       _BFSET_(r16, 2, 2,v)

    #define   GET32TSOTP_rddone(r32)                           _BFGET_(r32, 3, 3)
    #define   SET32TSOTP_rddone(r32,v)                         _BFSET_(r32, 3, 3,v)
    #define   GET16TSOTP_rddone(r16)                           _BFGET_(r16, 3, 3)
    #define   SET16TSOTP_rddone(r16,v)                         _BFSET_(r16, 3, 3,v)

    #define   GET32TSOTP_dout(r32)                             _BFGET_(r32, 4, 4)
    #define   SET32TSOTP_dout(r32,v)                           _BFSET_(r32, 4, 4,v)
    #define   GET16TSOTP_dout(r16)                             _BFGET_(r16, 4, 4)
    #define   SET16TSOTP_dout(r16,v)                           _BFSET_(r16, 4, 4,v)

    #define   GET32TSOTP_match(r32)                            _BFGET_(r32, 5, 5)
    #define   SET32TSOTP_match(r32,v)                          _BFSET_(r32, 5, 5,v)
    #define   GET16TSOTP_match(r16)                            _BFGET_(r16, 5, 5)
    #define   SET16TSOTP_match(r16,v)                          _BFSET_(r16, 5, 5,v)

            UNSG32 u_data2                                     :  2;
            UNSG32 u_security                                  :  1;
            UNSG32 u_rddone                                    :  1;
            UNSG32 u_dout                                      :  1;
            UNSG32 u_match                                     :  1;
            UNSG32 RSVDx10_b6                                  : 26;
    ///////////////////////////////////////////////////////////
    } SIE_TSOTP;

    ///////////////////////////////////////////////////////////
     SIGN32 TSOTP_drvrd(SIE_TSOTP *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TSOTP_drvwr(SIE_TSOTP *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TSOTP_reset(SIE_TSOTP *p);
     SIGN32 TSOTP_cmp  (SIE_TSOTP *p, SIE_TSOTP *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TSOTP_check(p,pie,pfx,hLOG) TSOTP_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TSOTP_print(p,    pfx,hLOG) TSOTP_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TSOTP
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE User_password                            (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 Password             (P)
///     # 0x00000 Password             
///               $OneReg              Password          REG       [4]
///                                    ###
///                                    * User provided password for validation
///                                    ###
///     @ 0x00010 Select               (P)
///               %unsigned 1  Select                    0x0
///                                    ###
///                                    * 0: select password_0 for password matching
///                                    * 1: select password_1 for password matching
///                                    ###
///               %%        31         # Stuffing bits...
///     @ 0x00014 Valid                (P)
///               %unsigned 1  Valid                     0x0
///                                    ###
///                                    * Indicate if User_password is valid
///                                    * To do the password matching, user must set this register to 1, otherwise the matching will fail
///                                    ###
///               %%        31         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      24B, bits:     130b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_User_password
#define h_User_password (){}

    #define     RA_User_password_Password                      0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_User_password_Select                        0x0010

    #define     BA_User_password_Select_Select                 0x0010
    #define     B16User_password_Select_Select                 0x0010
    #define   LSb32User_password_Select_Select                    0
    #define   LSb16User_password_Select_Select                    0
    #define       bUser_password_Select_Select                 1
    #define   MSK32User_password_Select_Select                    0x00000001
    ///////////////////////////////////////////////////////////
    #define     RA_User_password_Valid                         0x0014

    #define     BA_User_password_Valid_Valid                   0x0014
    #define     B16User_password_Valid_Valid                   0x0014
    #define   LSb32User_password_Valid_Valid                      0
    #define   LSb16User_password_Valid_Valid                      0
    #define       bUser_password_Valid_Valid                   1
    #define   MSK32User_password_Valid_Valid                      0x00000001
    ///////////////////////////////////////////////////////////

    typedef struct SIE_User_password {
    ///////////////////////////////////////////////////////////
              SIE_OneReg                                       ie_Password[4];
    ///////////////////////////////////////////////////////////
    #define   GET32User_password_Select_Select(r32)            _BFGET_(r32, 0, 0)
    #define   SET32User_password_Select_Select(r32,v)          _BFSET_(r32, 0, 0,v)
    #define   GET16User_password_Select_Select(r16)            _BFGET_(r16, 0, 0)
    #define   SET16User_password_Select_Select(r16,v)          _BFSET_(r16, 0, 0,v)

    #define     w32User_password_Select                        {\
            UNSG32 uSelect_Select                              :  1;\
            UNSG32 RSVDx10_b1                                  : 31;\
          }
    union { UNSG32 u32User_password_Select;
            struct w32User_password_Select;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32User_password_Valid_Valid(r32)              _BFGET_(r32, 0, 0)
    #define   SET32User_password_Valid_Valid(r32,v)            _BFSET_(r32, 0, 0,v)
    #define   GET16User_password_Valid_Valid(r16)              _BFGET_(r16, 0, 0)
    #define   SET16User_password_Valid_Valid(r16,v)            _BFSET_(r16, 0, 0,v)

    #define     w32User_password_Valid                         {\
            UNSG32 uValid_Valid                                :  1;\
            UNSG32 RSVDx14_b1                                  : 31;\
          }
    union { UNSG32 u32User_password_Valid;
            struct w32User_password_Valid;
          };
    ///////////////////////////////////////////////////////////
    } SIE_User_password;

    typedef union  T32User_password_Select
          { UNSG32 u32;
            struct w32User_password_Select;
                 } T32User_password_Select;
    typedef union  T32User_password_Valid
          { UNSG32 u32;
            struct w32User_password_Valid;
                 } T32User_password_Valid;
    ///////////////////////////////////////////////////////////

    typedef union  TUser_password_Select
          { UNSG32 u32[1];
            struct {
            struct w32User_password_Select;
                   };
                 } TUser_password_Select;
    typedef union  TUser_password_Valid
          { UNSG32 u32[1];
            struct {
            struct w32User_password_Valid;
                   };
                 } TUser_password_Valid;

    ///////////////////////////////////////////////////////////
     SIGN32 User_password_drvrd(SIE_User_password *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 User_password_drvwr(SIE_User_password *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void User_password_reset(SIE_User_password *p);
     SIGN32 User_password_cmp  (SIE_User_password *p, SIE_User_password *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define User_password_check(p,pie,pfx,hLOG) User_password_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define User_password_print(p,    pfx,hLOG) User_password_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: User_password
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE TSSSWrapper                              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 JTAG_password_0      (P)
///     # 0x00000 Password_0           
///               $OneReg              Password_0        REG       [4]
///                                    ###
///                                    * Golden password 0. Only SCPU can read/write it
///                                    ###
///     @ 0x00010 JTAG_password_1      (P)
///     # 0x00010 Password_1           
///               $OneReg              Password_1        REG       [4]
///                                    ###
///                                    * Golden password 1. Only SCPU can read/write it
///                                    ###
///     @ 0x00020 JTAG_Protected       (P)
///               %unsigned 2  JTAG_Protected            0x3
///                                    ###
///                                    * 00: JTAG enable
///                                    * 01/10: need password to enable JTAG
///                                    * 11: JTAG disabled
///                                    * Only SCPU can read/write it
///                                    ###
///               %%        30         # Stuffing bits...
///     @ 0x00024 JTAG_password_valid  (P)
///               %unsigned 2  JTAG_password_valid       0x0
///                                    ###
///                                    * bit0: password_0 valid
///                                    * bit1: password_1 valid
///                                    * Only SCPU can read/write it
///                                    ###
///               %%        30         # Stuffing bits...
///     @ 0x00028                      (W-)
///     #         # Stuffing bytes...
///               %% 64
///     @ 0x00030 BSCAN_password_0     (P)
///     # 0x00030 BSCAN_Password_0     
///               $OneReg              BSCAN_Password_0  REG       [4]
///                                    ###
///                                    * Golden password 0. Only SCPU can read/write it
///                                    ###
///     @ 0x00040 BSCAN_password_1     (P)
///     # 0x00040 BSCAN_Password_1     
///               $OneReg              BSCAN_Password_1  REG       [4]
///                                    ###
///                                    * Golden password 1. Only SCPU can read/write it
///                                    ###
///     @ 0x00050 BSCAN_Protected      (P)
///               %unsigned 2  BSCAN_Protected           0x3
///                                    ###
///                                    * 00: Bscan enabled
///                                    * 01/10: need password to enable Bcan
///                                    * 11: Bscan disabled
///                                    * Only SCPU can read/write it
///                                    ###
///               %%        30         # Stuffing bits...
///     @ 0x00054 BSCAN_password_valid (P)
///               %unsigned 2  BSCAN_password_valid      0x0
///                                    ###
///                                    * bit0: password_0 valid
///                                    * bit1: password_1 valid
///                                    * Only SCPU can read/write it
///                                    ###
///               %%        30         # Stuffing bits...
///     @ 0x00058 IceEn                (P)
///               %unsigned 1  ZspIceEn                  0x0
///                                    ###
///                                    * ZSP JTAG enable
///                                    * Open for ACPU to read
///                                    ###
///               %unsigned 1  Cpu0IceEn                 0x1
///                                    ###
///                                    * CPU0 JTAG enable
///                                    * Open for ACPU to read
///                                    ###
///               %unsigned 1  Cpu1IceEn                 0x0
///                                    ###
///                                    * CPU1 JTAG enable
///                                    * Open for ACPU to read
///                                    ###
///               %%        29         # Stuffing bits...
///     @ 0x0005C                      (W-)
///     #         # Stuffing bytes...
///               %% 32
///     @ 0x00060 ChipID               (P)
///     # 0x00060 ChipID               
///               $OneReg              ChipID            REG       [2]
///                                    ###
///                                    * Chip ID written out by SCPU. Open for ACPU to read.
///                                    ###
///     @ 0x00068                      (W-)
///     #         # Stuffing bytes...
///               %% 192
///     @ 0x00080 ACPU_Access          (P)
///               %unsigned 1  TSOTP                     0x1
///                                    ###
///                                    * 1: Grant the R/W access to TSOTP from ACPU
///                                    ###
///               %unsigned 1  TspKeyTbl                 0x1
///                                    ###
///                                    * 1: Grant the R/W access to TspKeyTble from ACPU
///                                    ###
///               %%        30         # Stuffing bits...
///     @ 0x00084                      (W-)
///     #         # Stuffing bytes...
///               %% 96
///     @ 0x00090 FeatureCtrlReg       (P)
///               ###
///               * Only SCPU has the R/W access
///               ###
///               %unsigned 32 V2G_Fuse                  0x0
///                                    ###
///                                    * V2G FeatureCtrl register, only SCPU can R/W
///                                    ###
///     # 0x00094 FeatureCtrlReg1      
///               %unsigned 32 Hantro_Fuse_Dec           0x0
///                                    ###
///                                    * Hantro FuseDec FeatureCtrl register, only SCPU can R/W
///                                    ###
///     # 0x00098 FeatureCtrlReg2      
///               %unsigned 32 Hantro_Fuse_PP            0x0
///                                    ###
///                                    * Hantro Fuse PP FeatureCtrl register, only SCPU can R/W
///                                    ###
///     @ 0x0009C                      (W-)
///     #         # Stuffing bytes...
///               %% 1440
///     @ 0x00150 Efuse_Read_Disable   (RW-)
///               ###
///               * When 1 BCM won’t be able to access the corresponding efuse entry. One bit per entry. Once a bit is set to 1, it can’t be set back to 0 by any hardware/software means other than reset. Only BCM can access this register
///               ###
///               %unsigned 32 OTP_0_31_0                0x0
///     # 0x00154 Efuse_Read_Disable1  
///               %unsigned 32 OTP_0_63_32               0x0
///     # 0x00158 Efuse_Read_Disable2  
///               %unsigned 32 OTP_1_31_0                0x0
///     # 0x0015C Efuse_Read_Disable3  
///               %unsigned 32 OTP_1_63_32               0x0
///     @ 0x00160 RKEKReg              (P)
///     # 0x00160 RKEKReg              
///               $OneReg              RKEKReg           REG       [8]
///                                    ###
///                                    * This register is directly connected to the AES engine of BCM. This register can be accessed by BCM before it is locked.
///                                    ###
///     @ 0x00180                      (W-)
///     #         # Stuffing bytes...
///               %% 1024
///     @ 0x00200 RKEKRegReadDisable   (P)
///               %unsigned 1  RKEKRegReadDisable        0x0
///                                    ###
///                                    * If RKEKRegReadDisable is set to one, BCM cannot read RKEKReg. Default value of RKEKRegReadDisable is zero. Once it is set to one, it can’t be set back to zero by any hardware/software means other than reset. Only BCM can access this register
///                                    ###
///               %%        31         # Stuffing bits...
///     @ 0x00204 RKEKRegWriteDisable  (P)
///               %unsigned 1  RKEKRegWriteDisable       0x0
///                                    ###
///                                    * If RKEKRegWriteDisable is set to one, BCM cannot Write RKEKReg. Default value of RKEKRegWriteDisable is zero. Once it is set to one, it can’t be set back to zero by any hardware/software means other than reset. Only BCM can access this register
///                                    ###
///               %%        31         # Stuffing bits...
///     @ 0x00208 Berlin_DDR_Base      (P)
///               %unsigned 32 Berlin_DDR_Base           0x0
///                                    ###
///                                    * This register defines the base address of Berlin’s DDR for BCM M3 to access. M3 can address a 1G space from this base. Only BCM can access this register.
///                                    * For M3 memory map, the following 1GB space is mapped to Berlin DDR:
///                                    * 32'h6000_0000~ 32'h9FFF_FFFF
///                                    ###
///     @ 0x0020C Berlin_SOC_Base      (P)
///               %unsigned 32 Berlin_SOC_Base           0xF0000000
///                                    ###
///                                    * This register defines the base address of Berlin’s SOC for BCM M3 to access. Only BCM can access this register.
///                                    * For M3 memory map, the following 512MB space is mapped to Berlin SOC:
///                                    * 32'hD000_0000~ 32'hDFFF_FFFF
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:     528B, bits:    1135b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TSSSWrapper
#define h_TSSSWrapper (){}

    #define     RA_TSSSWrapper_JTAG_password_0                 0x0000
    #define     RA_TSSSWrapper_Password_0                      0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_JTAG_password_1                 0x0010
    #define     RA_TSSSWrapper_Password_1                      0x0010
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_JTAG_Protected                  0x0020

    #define     BA_TSSSWrapper_JTAG_Protected_JTAG_Protected   0x0020
    #define     B16TSSSWrapper_JTAG_Protected_JTAG_Protected   0x0020
    #define   LSb32TSSSWrapper_JTAG_Protected_JTAG_Protected      0
    #define   LSb16TSSSWrapper_JTAG_Protected_JTAG_Protected      0
    #define       bTSSSWrapper_JTAG_Protected_JTAG_Protected   2
    #define   MSK32TSSSWrapper_JTAG_Protected_JTAG_Protected      0x00000003
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_JTAG_password_valid             0x0024

    #define     BA_TSSSWrapper_JTAG_password_valid_JTAG_password_valid 0x0024
    #define     B16TSSSWrapper_JTAG_password_valid_JTAG_password_valid 0x0024
    #define   LSb32TSSSWrapper_JTAG_password_valid_JTAG_password_valid    0
    #define   LSb16TSSSWrapper_JTAG_password_valid_JTAG_password_valid    0
    #define       bTSSSWrapper_JTAG_password_valid_JTAG_password_valid 2
    #define   MSK32TSSSWrapper_JTAG_password_valid_JTAG_password_valid    0x00000003
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_BSCAN_password_0                0x0030
    #define     RA_TSSSWrapper_BSCAN_Password_0                0x0030
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_BSCAN_password_1                0x0040
    #define     RA_TSSSWrapper_BSCAN_Password_1                0x0040
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_BSCAN_Protected                 0x0050

    #define     BA_TSSSWrapper_BSCAN_Protected_BSCAN_Protected 0x0050
    #define     B16TSSSWrapper_BSCAN_Protected_BSCAN_Protected 0x0050
    #define   LSb32TSSSWrapper_BSCAN_Protected_BSCAN_Protected    0
    #define   LSb16TSSSWrapper_BSCAN_Protected_BSCAN_Protected    0
    #define       bTSSSWrapper_BSCAN_Protected_BSCAN_Protected 2
    #define   MSK32TSSSWrapper_BSCAN_Protected_BSCAN_Protected    0x00000003
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_BSCAN_password_valid            0x0054

    #define     BA_TSSSWrapper_BSCAN_password_valid_BSCAN_password_valid 0x0054
    #define     B16TSSSWrapper_BSCAN_password_valid_BSCAN_password_valid 0x0054
    #define   LSb32TSSSWrapper_BSCAN_password_valid_BSCAN_password_valid    0
    #define   LSb16TSSSWrapper_BSCAN_password_valid_BSCAN_password_valid    0
    #define       bTSSSWrapper_BSCAN_password_valid_BSCAN_password_valid 2
    #define   MSK32TSSSWrapper_BSCAN_password_valid_BSCAN_password_valid    0x00000003
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_IceEn                           0x0058

    #define     BA_TSSSWrapper_IceEn_ZspIceEn                  0x0058
    #define     B16TSSSWrapper_IceEn_ZspIceEn                  0x0058
    #define   LSb32TSSSWrapper_IceEn_ZspIceEn                     0
    #define   LSb16TSSSWrapper_IceEn_ZspIceEn                     0
    #define       bTSSSWrapper_IceEn_ZspIceEn                  1
    #define   MSK32TSSSWrapper_IceEn_ZspIceEn                     0x00000001

    #define     BA_TSSSWrapper_IceEn_Cpu0IceEn                 0x0058
    #define     B16TSSSWrapper_IceEn_Cpu0IceEn                 0x0058
    #define   LSb32TSSSWrapper_IceEn_Cpu0IceEn                    1
    #define   LSb16TSSSWrapper_IceEn_Cpu0IceEn                    1
    #define       bTSSSWrapper_IceEn_Cpu0IceEn                 1
    #define   MSK32TSSSWrapper_IceEn_Cpu0IceEn                    0x00000002

    #define     BA_TSSSWrapper_IceEn_Cpu1IceEn                 0x0058
    #define     B16TSSSWrapper_IceEn_Cpu1IceEn                 0x0058
    #define   LSb32TSSSWrapper_IceEn_Cpu1IceEn                    2
    #define   LSb16TSSSWrapper_IceEn_Cpu1IceEn                    2
    #define       bTSSSWrapper_IceEn_Cpu1IceEn                 1
    #define   MSK32TSSSWrapper_IceEn_Cpu1IceEn                    0x00000004
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_ChipID                          0x0060
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_ACPU_Access                     0x0080

    #define     BA_TSSSWrapper_ACPU_Access_TSOTP               0x0080
    #define     B16TSSSWrapper_ACPU_Access_TSOTP               0x0080
    #define   LSb32TSSSWrapper_ACPU_Access_TSOTP                  0
    #define   LSb16TSSSWrapper_ACPU_Access_TSOTP                  0
    #define       bTSSSWrapper_ACPU_Access_TSOTP               1
    #define   MSK32TSSSWrapper_ACPU_Access_TSOTP                  0x00000001

    #define     BA_TSSSWrapper_ACPU_Access_TspKeyTbl           0x0080
    #define     B16TSSSWrapper_ACPU_Access_TspKeyTbl           0x0080
    #define   LSb32TSSSWrapper_ACPU_Access_TspKeyTbl              1
    #define   LSb16TSSSWrapper_ACPU_Access_TspKeyTbl              1
    #define       bTSSSWrapper_ACPU_Access_TspKeyTbl           1
    #define   MSK32TSSSWrapper_ACPU_Access_TspKeyTbl              0x00000002
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_FeatureCtrlReg                  0x0090

    #define     BA_TSSSWrapper_FeatureCtrlReg_V2G_Fuse         0x0090
    #define     B16TSSSWrapper_FeatureCtrlReg_V2G_Fuse         0x0090
    #define   LSb32TSSSWrapper_FeatureCtrlReg_V2G_Fuse            0
    #define   LSb16TSSSWrapper_FeatureCtrlReg_V2G_Fuse            0
    #define       bTSSSWrapper_FeatureCtrlReg_V2G_Fuse         32
    #define   MSK32TSSSWrapper_FeatureCtrlReg_V2G_Fuse            0xFFFFFFFF

    #define     RA_TSSSWrapper_FeatureCtrlReg1                 0x0094

    #define     BA_TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec  0x0094
    #define     B16TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec  0x0094
    #define   LSb32TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec     0
    #define   LSb16TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec     0
    #define       bTSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec  32
    #define   MSK32TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec     0xFFFFFFFF

    #define     RA_TSSSWrapper_FeatureCtrlReg2                 0x0098

    #define     BA_TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP   0x0098
    #define     B16TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP   0x0098
    #define   LSb32TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP      0
    #define   LSb16TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP      0
    #define       bTSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP   32
    #define   MSK32TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP      0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_Efuse_Read_Disable              0x0150

    #define     BA_TSSSWrapper_Efuse_Read_Disable_OTP_0_31_0   0x0150
    #define     B16TSSSWrapper_Efuse_Read_Disable_OTP_0_31_0   0x0150
    #define   LSb32TSSSWrapper_Efuse_Read_Disable_OTP_0_31_0      0
    #define   LSb16TSSSWrapper_Efuse_Read_Disable_OTP_0_31_0      0
    #define       bTSSSWrapper_Efuse_Read_Disable_OTP_0_31_0   32
    #define   MSK32TSSSWrapper_Efuse_Read_Disable_OTP_0_31_0      0xFFFFFFFF

    #define     RA_TSSSWrapper_Efuse_Read_Disable1             0x0154

    #define     BA_TSSSWrapper_Efuse_Read_Disable_OTP_0_63_32  0x0154
    #define     B16TSSSWrapper_Efuse_Read_Disable_OTP_0_63_32  0x0154
    #define   LSb32TSSSWrapper_Efuse_Read_Disable_OTP_0_63_32     0
    #define   LSb16TSSSWrapper_Efuse_Read_Disable_OTP_0_63_32     0
    #define       bTSSSWrapper_Efuse_Read_Disable_OTP_0_63_32  32
    #define   MSK32TSSSWrapper_Efuse_Read_Disable_OTP_0_63_32     0xFFFFFFFF

    #define     RA_TSSSWrapper_Efuse_Read_Disable2             0x0158

    #define     BA_TSSSWrapper_Efuse_Read_Disable_OTP_1_31_0   0x0158
    #define     B16TSSSWrapper_Efuse_Read_Disable_OTP_1_31_0   0x0158
    #define   LSb32TSSSWrapper_Efuse_Read_Disable_OTP_1_31_0      0
    #define   LSb16TSSSWrapper_Efuse_Read_Disable_OTP_1_31_0      0
    #define       bTSSSWrapper_Efuse_Read_Disable_OTP_1_31_0   32
    #define   MSK32TSSSWrapper_Efuse_Read_Disable_OTP_1_31_0      0xFFFFFFFF

    #define     RA_TSSSWrapper_Efuse_Read_Disable3             0x015C

    #define     BA_TSSSWrapper_Efuse_Read_Disable_OTP_1_63_32  0x015C
    #define     B16TSSSWrapper_Efuse_Read_Disable_OTP_1_63_32  0x015C
    #define   LSb32TSSSWrapper_Efuse_Read_Disable_OTP_1_63_32     0
    #define   LSb16TSSSWrapper_Efuse_Read_Disable_OTP_1_63_32     0
    #define       bTSSSWrapper_Efuse_Read_Disable_OTP_1_63_32  32
    #define   MSK32TSSSWrapper_Efuse_Read_Disable_OTP_1_63_32     0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_RKEKReg                         0x0160
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_RKEKRegReadDisable              0x0200

    #define     BA_TSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable 0x0200
    #define     B16TSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable 0x0200
    #define   LSb32TSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable    0
    #define   LSb16TSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable    0
    #define       bTSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable 1
    #define   MSK32TSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable    0x00000001
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_RKEKRegWriteDisable             0x0204

    #define     BA_TSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable 0x0204
    #define     B16TSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable 0x0204
    #define   LSb32TSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable    0
    #define   LSb16TSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable    0
    #define       bTSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable 1
    #define   MSK32TSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable    0x00000001
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_Berlin_DDR_Base                 0x0208

    #define     BA_TSSSWrapper_Berlin_DDR_Base_Berlin_DDR_Base 0x0208
    #define     B16TSSSWrapper_Berlin_DDR_Base_Berlin_DDR_Base 0x0208
    #define   LSb32TSSSWrapper_Berlin_DDR_Base_Berlin_DDR_Base    0
    #define   LSb16TSSSWrapper_Berlin_DDR_Base_Berlin_DDR_Base    0
    #define       bTSSSWrapper_Berlin_DDR_Base_Berlin_DDR_Base 32
    #define   MSK32TSSSWrapper_Berlin_DDR_Base_Berlin_DDR_Base    0xFFFFFFFF
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_Berlin_SOC_Base                 0x020C

    #define     BA_TSSSWrapper_Berlin_SOC_Base_Berlin_SOC_Base 0x020C
    #define     B16TSSSWrapper_Berlin_SOC_Base_Berlin_SOC_Base 0x020C
    #define   LSb32TSSSWrapper_Berlin_SOC_Base_Berlin_SOC_Base    0
    #define   LSb16TSSSWrapper_Berlin_SOC_Base_Berlin_SOC_Base    0
    #define       bTSSSWrapper_Berlin_SOC_Base_Berlin_SOC_Base 32
    #define   MSK32TSSSWrapper_Berlin_SOC_Base_Berlin_SOC_Base    0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TSSSWrapper {
    ///////////////////////////////////////////////////////////
              SIE_OneReg                                       ie_Password_0[4];
    ///////////////////////////////////////////////////////////
              SIE_OneReg                                       ie_Password_1[4];
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_JTAG_Protected_JTAG_Protected(r32) _BFGET_(r32, 1, 0)
    #define   SET32TSSSWrapper_JTAG_Protected_JTAG_Protected(r32,v) _BFSET_(r32, 1, 0,v)
    #define   GET16TSSSWrapper_JTAG_Protected_JTAG_Protected(r16) _BFGET_(r16, 1, 0)
    #define   SET16TSSSWrapper_JTAG_Protected_JTAG_Protected(r16,v) _BFSET_(r16, 1, 0,v)

    #define     w32TSSSWrapper_JTAG_Protected                  {\
            UNSG32 uJTAG_Protected_JTAG_Protected              :  2;\
            UNSG32 RSVDx20_b2                                  : 30;\
          }
    union { UNSG32 u32TSSSWrapper_JTAG_Protected;
            struct w32TSSSWrapper_JTAG_Protected;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_JTAG_password_valid_JTAG_password_valid(r32) _BFGET_(r32, 1, 0)
    #define   SET32TSSSWrapper_JTAG_password_valid_JTAG_password_valid(r32,v) _BFSET_(r32, 1, 0,v)
    #define   GET16TSSSWrapper_JTAG_password_valid_JTAG_password_valid(r16) _BFGET_(r16, 1, 0)
    #define   SET16TSSSWrapper_JTAG_password_valid_JTAG_password_valid(r16,v) _BFSET_(r16, 1, 0,v)

    #define     w32TSSSWrapper_JTAG_password_valid             {\
            UNSG32 uJTAG_password_valid_JTAG_password_valid    :  2;\
            UNSG32 RSVDx24_b2                                  : 30;\
          }
    union { UNSG32 u32TSSSWrapper_JTAG_password_valid;
            struct w32TSSSWrapper_JTAG_password_valid;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx28                                     [8];
    ///////////////////////////////////////////////////////////
              SIE_OneReg                                       ie_BSCAN_Password_0[4];
    ///////////////////////////////////////////////////////////
              SIE_OneReg                                       ie_BSCAN_Password_1[4];
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_BSCAN_Protected_BSCAN_Protected(r32) _BFGET_(r32, 1, 0)
    #define   SET32TSSSWrapper_BSCAN_Protected_BSCAN_Protected(r32,v) _BFSET_(r32, 1, 0,v)
    #define   GET16TSSSWrapper_BSCAN_Protected_BSCAN_Protected(r16) _BFGET_(r16, 1, 0)
    #define   SET16TSSSWrapper_BSCAN_Protected_BSCAN_Protected(r16,v) _BFSET_(r16, 1, 0,v)

    #define     w32TSSSWrapper_BSCAN_Protected                 {\
            UNSG32 uBSCAN_Protected_BSCAN_Protected            :  2;\
            UNSG32 RSVDx50_b2                                  : 30;\
          }
    union { UNSG32 u32TSSSWrapper_BSCAN_Protected;
            struct w32TSSSWrapper_BSCAN_Protected;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_BSCAN_password_valid_BSCAN_password_valid(r32) _BFGET_(r32, 1, 0)
    #define   SET32TSSSWrapper_BSCAN_password_valid_BSCAN_password_valid(r32,v) _BFSET_(r32, 1, 0,v)
    #define   GET16TSSSWrapper_BSCAN_password_valid_BSCAN_password_valid(r16) _BFGET_(r16, 1, 0)
    #define   SET16TSSSWrapper_BSCAN_password_valid_BSCAN_password_valid(r16,v) _BFSET_(r16, 1, 0,v)

    #define     w32TSSSWrapper_BSCAN_password_valid            {\
            UNSG32 uBSCAN_password_valid_BSCAN_password_valid  :  2;\
            UNSG32 RSVDx54_b2                                  : 30;\
          }
    union { UNSG32 u32TSSSWrapper_BSCAN_password_valid;
            struct w32TSSSWrapper_BSCAN_password_valid;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_IceEn_ZspIceEn(r32)             _BFGET_(r32, 0, 0)
    #define   SET32TSSSWrapper_IceEn_ZspIceEn(r32,v)           _BFSET_(r32, 0, 0,v)
    #define   GET16TSSSWrapper_IceEn_ZspIceEn(r16)             _BFGET_(r16, 0, 0)
    #define   SET16TSSSWrapper_IceEn_ZspIceEn(r16,v)           _BFSET_(r16, 0, 0,v)

    #define   GET32TSSSWrapper_IceEn_Cpu0IceEn(r32)            _BFGET_(r32, 1, 1)
    #define   SET32TSSSWrapper_IceEn_Cpu0IceEn(r32,v)          _BFSET_(r32, 1, 1,v)
    #define   GET16TSSSWrapper_IceEn_Cpu0IceEn(r16)            _BFGET_(r16, 1, 1)
    #define   SET16TSSSWrapper_IceEn_Cpu0IceEn(r16,v)          _BFSET_(r16, 1, 1,v)

    #define   GET32TSSSWrapper_IceEn_Cpu1IceEn(r32)            _BFGET_(r32, 2, 2)
    #define   SET32TSSSWrapper_IceEn_Cpu1IceEn(r32,v)          _BFSET_(r32, 2, 2,v)
    #define   GET16TSSSWrapper_IceEn_Cpu1IceEn(r16)            _BFGET_(r16, 2, 2)
    #define   SET16TSSSWrapper_IceEn_Cpu1IceEn(r16,v)          _BFSET_(r16, 2, 2,v)

    #define     w32TSSSWrapper_IceEn                           {\
            UNSG32 uIceEn_ZspIceEn                             :  1;\
            UNSG32 uIceEn_Cpu0IceEn                            :  1;\
            UNSG32 uIceEn_Cpu1IceEn                            :  1;\
            UNSG32 RSVDx58_b3                                  : 29;\
          }
    union { UNSG32 u32TSSSWrapper_IceEn;
            struct w32TSSSWrapper_IceEn;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx5C                                     [4];
    ///////////////////////////////////////////////////////////
              SIE_OneReg                                       ie_ChipID[2];
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx68                                     [24];
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_ACPU_Access_TSOTP(r32)          _BFGET_(r32, 0, 0)
    #define   SET32TSSSWrapper_ACPU_Access_TSOTP(r32,v)        _BFSET_(r32, 0, 0,v)
    #define   GET16TSSSWrapper_ACPU_Access_TSOTP(r16)          _BFGET_(r16, 0, 0)
    #define   SET16TSSSWrapper_ACPU_Access_TSOTP(r16,v)        _BFSET_(r16, 0, 0,v)

    #define   GET32TSSSWrapper_ACPU_Access_TspKeyTbl(r32)      _BFGET_(r32, 1, 1)
    #define   SET32TSSSWrapper_ACPU_Access_TspKeyTbl(r32,v)    _BFSET_(r32, 1, 1,v)
    #define   GET16TSSSWrapper_ACPU_Access_TspKeyTbl(r16)      _BFGET_(r16, 1, 1)
    #define   SET16TSSSWrapper_ACPU_Access_TspKeyTbl(r16,v)    _BFSET_(r16, 1, 1,v)

    #define     w32TSSSWrapper_ACPU_Access                     {\
            UNSG32 uACPU_Access_TSOTP                          :  1;\
            UNSG32 uACPU_Access_TspKeyTbl                      :  1;\
            UNSG32 RSVDx80_b2                                  : 30;\
          }
    union { UNSG32 u32TSSSWrapper_ACPU_Access;
            struct w32TSSSWrapper_ACPU_Access;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx84                                     [12];
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_FeatureCtrlReg_V2G_Fuse(r32)    _BFGET_(r32,31, 0)
    #define   SET32TSSSWrapper_FeatureCtrlReg_V2G_Fuse(r32,v)  _BFSET_(r32,31, 0,v)

    #define     w32TSSSWrapper_FeatureCtrlReg                  {\
            UNSG32 uFeatureCtrlReg_V2G_Fuse                    : 32;\
          }
    union { UNSG32 u32TSSSWrapper_FeatureCtrlReg;
            struct w32TSSSWrapper_FeatureCtrlReg;
          };
    #define   GET32TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec(r32) _BFGET_(r32,31, 0)
    #define   SET32TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec(r32,v) _BFSET_(r32,31, 0,v)

    #define     w32TSSSWrapper_FeatureCtrlReg1                 {\
            UNSG32 uFeatureCtrlReg_Hantro_Fuse_Dec             : 32;\
          }
    union { UNSG32 u32TSSSWrapper_FeatureCtrlReg1;
            struct w32TSSSWrapper_FeatureCtrlReg1;
          };
    #define   GET32TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP(r32) _BFGET_(r32,31, 0)
    #define   SET32TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP(r32,v) _BFSET_(r32,31, 0,v)

    #define     w32TSSSWrapper_FeatureCtrlReg2                 {\
            UNSG32 uFeatureCtrlReg_Hantro_Fuse_PP              : 32;\
          }
    union { UNSG32 u32TSSSWrapper_FeatureCtrlReg2;
            struct w32TSSSWrapper_FeatureCtrlReg2;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx9C                                     [180];
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_Efuse_Read_Disable_OTP_0_31_0(r32) _BFGET_(r32,31, 0)
    #define   SET32TSSSWrapper_Efuse_Read_Disable_OTP_0_31_0(r32,v) _BFSET_(r32,31, 0,v)

    #define     w32TSSSWrapper_Efuse_Read_Disable              {\
            UNSG32 uEfuse_Read_Disable_OTP_0_31_0              : 32;\
          }
    union { UNSG32 u32TSSSWrapper_Efuse_Read_Disable;
            struct w32TSSSWrapper_Efuse_Read_Disable;
          };
    #define   GET32TSSSWrapper_Efuse_Read_Disable_OTP_0_63_32(r32) _BFGET_(r32,31, 0)
    #define   SET32TSSSWrapper_Efuse_Read_Disable_OTP_0_63_32(r32,v) _BFSET_(r32,31, 0,v)

    #define     w32TSSSWrapper_Efuse_Read_Disable1             {\
            UNSG32 uEfuse_Read_Disable_OTP_0_63_32             : 32;\
          }
    union { UNSG32 u32TSSSWrapper_Efuse_Read_Disable1;
            struct w32TSSSWrapper_Efuse_Read_Disable1;
          };
    #define   GET32TSSSWrapper_Efuse_Read_Disable_OTP_1_31_0(r32) _BFGET_(r32,31, 0)
    #define   SET32TSSSWrapper_Efuse_Read_Disable_OTP_1_31_0(r32,v) _BFSET_(r32,31, 0,v)

    #define     w32TSSSWrapper_Efuse_Read_Disable2             {\
            UNSG32 uEfuse_Read_Disable_OTP_1_31_0              : 32;\
          }
    union { UNSG32 u32TSSSWrapper_Efuse_Read_Disable2;
            struct w32TSSSWrapper_Efuse_Read_Disable2;
          };
    #define   GET32TSSSWrapper_Efuse_Read_Disable_OTP_1_63_32(r32) _BFGET_(r32,31, 0)
    #define   SET32TSSSWrapper_Efuse_Read_Disable_OTP_1_63_32(r32,v) _BFSET_(r32,31, 0,v)

    #define     w32TSSSWrapper_Efuse_Read_Disable3             {\
            UNSG32 uEfuse_Read_Disable_OTP_1_63_32             : 32;\
          }
    union { UNSG32 u32TSSSWrapper_Efuse_Read_Disable3;
            struct w32TSSSWrapper_Efuse_Read_Disable3;
          };
    ///////////////////////////////////////////////////////////
              SIE_OneReg                                       ie_RKEKReg[8];
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx180                                    [128];
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable(r32) _BFGET_(r32, 0, 0)
    #define   SET32TSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable(r32,v) _BFSET_(r32, 0, 0,v)
    #define   GET16TSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable(r16) _BFGET_(r16, 0, 0)
    #define   SET16TSSSWrapper_RKEKRegReadDisable_RKEKRegReadDisable(r16,v) _BFSET_(r16, 0, 0,v)

    #define     w32TSSSWrapper_RKEKRegReadDisable              {\
            UNSG32 uRKEKRegReadDisable_RKEKRegReadDisable      :  1;\
            UNSG32 RSVDx200_b1                                 : 31;\
          }
    union { UNSG32 u32TSSSWrapper_RKEKRegReadDisable;
            struct w32TSSSWrapper_RKEKRegReadDisable;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable(r32) _BFGET_(r32, 0, 0)
    #define   SET32TSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable(r32,v) _BFSET_(r32, 0, 0,v)
    #define   GET16TSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable(r16) _BFGET_(r16, 0, 0)
    #define   SET16TSSSWrapper_RKEKRegWriteDisable_RKEKRegWriteDisable(r16,v) _BFSET_(r16, 0, 0,v)

    #define     w32TSSSWrapper_RKEKRegWriteDisable             {\
            UNSG32 uRKEKRegWriteDisable_RKEKRegWriteDisable    :  1;\
            UNSG32 RSVDx204_b1                                 : 31;\
          }
    union { UNSG32 u32TSSSWrapper_RKEKRegWriteDisable;
            struct w32TSSSWrapper_RKEKRegWriteDisable;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_Berlin_DDR_Base_Berlin_DDR_Base(r32) _BFGET_(r32,31, 0)
    #define   SET32TSSSWrapper_Berlin_DDR_Base_Berlin_DDR_Base(r32,v) _BFSET_(r32,31, 0,v)

    #define     w32TSSSWrapper_Berlin_DDR_Base                 {\
            UNSG32 uBerlin_DDR_Base_Berlin_DDR_Base            : 32;\
          }
    union { UNSG32 u32TSSSWrapper_Berlin_DDR_Base;
            struct w32TSSSWrapper_Berlin_DDR_Base;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32TSSSWrapper_Berlin_SOC_Base_Berlin_SOC_Base(r32) _BFGET_(r32,31, 0)
    #define   SET32TSSSWrapper_Berlin_SOC_Base_Berlin_SOC_Base(r32,v) _BFSET_(r32,31, 0,v)

    #define     w32TSSSWrapper_Berlin_SOC_Base                 {\
            UNSG32 uBerlin_SOC_Base_Berlin_SOC_Base            : 32;\
          }
    union { UNSG32 u32TSSSWrapper_Berlin_SOC_Base;
            struct w32TSSSWrapper_Berlin_SOC_Base;
          };
    ///////////////////////////////////////////////////////////
    } SIE_TSSSWrapper;

    typedef union  T32TSSSWrapper_JTAG_Protected
          { UNSG32 u32;
            struct w32TSSSWrapper_JTAG_Protected;
                 } T32TSSSWrapper_JTAG_Protected;
    typedef union  T32TSSSWrapper_JTAG_password_valid
          { UNSG32 u32;
            struct w32TSSSWrapper_JTAG_password_valid;
                 } T32TSSSWrapper_JTAG_password_valid;
    typedef union  T32TSSSWrapper_BSCAN_Protected
          { UNSG32 u32;
            struct w32TSSSWrapper_BSCAN_Protected;
                 } T32TSSSWrapper_BSCAN_Protected;
    typedef union  T32TSSSWrapper_BSCAN_password_valid
          { UNSG32 u32;
            struct w32TSSSWrapper_BSCAN_password_valid;
                 } T32TSSSWrapper_BSCAN_password_valid;
    typedef union  T32TSSSWrapper_IceEn
          { UNSG32 u32;
            struct w32TSSSWrapper_IceEn;
                 } T32TSSSWrapper_IceEn;
    typedef union  T32TSSSWrapper_ACPU_Access
          { UNSG32 u32;
            struct w32TSSSWrapper_ACPU_Access;
                 } T32TSSSWrapper_ACPU_Access;
    typedef union  T32TSSSWrapper_FeatureCtrlReg
          { UNSG32 u32;
            struct w32TSSSWrapper_FeatureCtrlReg;
                 } T32TSSSWrapper_FeatureCtrlReg;
    typedef union  T32TSSSWrapper_FeatureCtrlReg1
          { UNSG32 u32;
            struct w32TSSSWrapper_FeatureCtrlReg1;
                 } T32TSSSWrapper_FeatureCtrlReg1;
    typedef union  T32TSSSWrapper_FeatureCtrlReg2
          { UNSG32 u32;
            struct w32TSSSWrapper_FeatureCtrlReg2;
                 } T32TSSSWrapper_FeatureCtrlReg2;
    typedef union  T32TSSSWrapper_Efuse_Read_Disable
          { UNSG32 u32;
            struct w32TSSSWrapper_Efuse_Read_Disable;
                 } T32TSSSWrapper_Efuse_Read_Disable;
    typedef union  T32TSSSWrapper_Efuse_Read_Disable1
          { UNSG32 u32;
            struct w32TSSSWrapper_Efuse_Read_Disable1;
                 } T32TSSSWrapper_Efuse_Read_Disable1;
    typedef union  T32TSSSWrapper_Efuse_Read_Disable2
          { UNSG32 u32;
            struct w32TSSSWrapper_Efuse_Read_Disable2;
                 } T32TSSSWrapper_Efuse_Read_Disable2;
    typedef union  T32TSSSWrapper_Efuse_Read_Disable3
          { UNSG32 u32;
            struct w32TSSSWrapper_Efuse_Read_Disable3;
                 } T32TSSSWrapper_Efuse_Read_Disable3;
    typedef union  T32TSSSWrapper_RKEKRegReadDisable
          { UNSG32 u32;
            struct w32TSSSWrapper_RKEKRegReadDisable;
                 } T32TSSSWrapper_RKEKRegReadDisable;
    typedef union  T32TSSSWrapper_RKEKRegWriteDisable
          { UNSG32 u32;
            struct w32TSSSWrapper_RKEKRegWriteDisable;
                 } T32TSSSWrapper_RKEKRegWriteDisable;
    typedef union  T32TSSSWrapper_Berlin_DDR_Base
          { UNSG32 u32;
            struct w32TSSSWrapper_Berlin_DDR_Base;
                 } T32TSSSWrapper_Berlin_DDR_Base;
    typedef union  T32TSSSWrapper_Berlin_SOC_Base
          { UNSG32 u32;
            struct w32TSSSWrapper_Berlin_SOC_Base;
                 } T32TSSSWrapper_Berlin_SOC_Base;
    ///////////////////////////////////////////////////////////

    typedef union  TTSSSWrapper_JTAG_Protected
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_JTAG_Protected;
                   };
                 } TTSSSWrapper_JTAG_Protected;
    typedef union  TTSSSWrapper_JTAG_password_valid
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_JTAG_password_valid;
                   };
                 } TTSSSWrapper_JTAG_password_valid;
    typedef union  TTSSSWrapper_BSCAN_Protected
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_BSCAN_Protected;
                   };
                 } TTSSSWrapper_BSCAN_Protected;
    typedef union  TTSSSWrapper_BSCAN_password_valid
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_BSCAN_password_valid;
                   };
                 } TTSSSWrapper_BSCAN_password_valid;
    typedef union  TTSSSWrapper_IceEn
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_IceEn;
                   };
                 } TTSSSWrapper_IceEn;
    typedef union  TTSSSWrapper_ACPU_Access
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_ACPU_Access;
                   };
                 } TTSSSWrapper_ACPU_Access;
    typedef union  TTSSSWrapper_FeatureCtrlReg
          { UNSG32 u32[3];
            struct {
            struct w32TSSSWrapper_FeatureCtrlReg;
            struct w32TSSSWrapper_FeatureCtrlReg1;
            struct w32TSSSWrapper_FeatureCtrlReg2;
                   };
                 } TTSSSWrapper_FeatureCtrlReg;
    typedef union  TTSSSWrapper_Efuse_Read_Disable
          { UNSG32 u32[4];
            struct {
            struct w32TSSSWrapper_Efuse_Read_Disable;
            struct w32TSSSWrapper_Efuse_Read_Disable1;
            struct w32TSSSWrapper_Efuse_Read_Disable2;
            struct w32TSSSWrapper_Efuse_Read_Disable3;
                   };
                 } TTSSSWrapper_Efuse_Read_Disable;
    typedef union  TTSSSWrapper_RKEKRegReadDisable
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_RKEKRegReadDisable;
                   };
                 } TTSSSWrapper_RKEKRegReadDisable;
    typedef union  TTSSSWrapper_RKEKRegWriteDisable
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_RKEKRegWriteDisable;
                   };
                 } TTSSSWrapper_RKEKRegWriteDisable;
    typedef union  TTSSSWrapper_Berlin_DDR_Base
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_Berlin_DDR_Base;
                   };
                 } TTSSSWrapper_Berlin_DDR_Base;
    typedef union  TTSSSWrapper_Berlin_SOC_Base
          { UNSG32 u32[1];
            struct {
            struct w32TSSSWrapper_Berlin_SOC_Base;
                   };
                 } TTSSSWrapper_Berlin_SOC_Base;

    ///////////////////////////////////////////////////////////
     SIGN32 TSSSWrapper_drvrd(SIE_TSSSWrapper *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TSSSWrapper_drvwr(SIE_TSSSWrapper *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TSSSWrapper_reset(SIE_TSSSWrapper *p);
     SIGN32 TSSSWrapper_cmp  (SIE_TSSSWrapper *p, SIE_TSSSWrapper *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TSSSWrapper_check(p,pie,pfx,hLOG) TSSSWrapper_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TSSSWrapper_print(p,    pfx,hLOG) TSSSWrapper_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TSSSWrapper
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE TSSS                    biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (W-)
///     #         # Stuffing bytes...
///               %% 1605632
///     @ 0x31000 TSOTP                (P)
///     # 0x31000 TSOTP                
///               $TSOTP               TSOTP             REG          
///                                    ###
///                                    * Accessibility:
///                                    * By default both ACPU and SCPU have R/W access this region. SCPU can set register ‘ACPU_Access_TSOTP’ to 0 to disable the access from ACPU
///                                    ###
///     @ 0x31014                      (W-)
///     #         # Stuffing bytes...
///               %% 65376
///     @ 0x33000 TspKeyTbl            (P)
///     # 0x33000 TspKeyTbl            
///               $OneReg              TspKeyTbl         MEM    [1024]
///     @ 0x34000                      (W-)
///     #         # Stuffing bytes...
///               %% 32768
///     @ 0x35000 User_password        (P)
///     # 0x35000 User_password        
///               $User_password       User_password     REG          
///                                    ###
///                                    * JTAG user password registers
///                                    * Accessibility:
///                                    * Always open for ACPU to have R/W access
///                                    ###
///     @ 0x35018                      (W-)
///     #         # Stuffing bytes...
///               %% 1856
///     @ 0x35100 Bscan_User_password  (P)
///     # 0x35100 Bscan_User_password  
///               $User_password       Bscan_User_password REG          
///                                    ###
///                                    * Bscan user password registers
///                                    * Accessibility:
///                                    * Always open for ACPU to have R/W access
///                                    ###
///     @ 0x35118                      (W-)
///     #         # Stuffing bytes...
///               %% 325440
///     @ 0x3F000 Wrapper              (P)
///     # 0x3F000 Wrapper              
///               $TSSSWrapper         Wrapper           REG          
///                                    ###
///                                    * wrapper registers
///                                    * Accessibility:
///                                    * Only SPU has the R/W access
///                                    ###
///     @ 0x3F210                      (W-)
///     #         # Stuffing bytes...
///               %% 28544
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:  262144B, bits:    1530b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TSSS
#define h_TSSS (){}

    #define     RA_TSSS_TSOTP                                  0x31000
    ///////////////////////////////////////////////////////////
    #define     RA_TSSS_TspKeyTbl                              0x33000
    ///////////////////////////////////////////////////////////
    #define     RA_TSSS_User_password                          0x35000
    ///////////////////////////////////////////////////////////
    #define     RA_TSSS_Bscan_User_password                    0x35100
    ///////////////////////////////////////////////////////////
    #define     RA_TSSS_Wrapper                                0x3F000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TSSS {
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx0                                      [200704];
    ///////////////////////////////////////////////////////////
              SIE_TSOTP                                        ie_TSOTP;
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx31014                                  [8172];
    ///////////////////////////////////////////////////////////
              SIE_OneReg                                       ie_TspKeyTbl[1024];
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx34000                                  [4096];
    ///////////////////////////////////////////////////////////
              SIE_User_password                                ie_User_password;
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx35018                                  [232];
    ///////////////////////////////////////////////////////////
              SIE_User_password                                ie_Bscan_User_password;
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx35118                                  [40680];
    ///////////////////////////////////////////////////////////
              SIE_TSSSWrapper                                  ie_Wrapper;
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx3F210                                  [3568];
    ///////////////////////////////////////////////////////////
    } SIE_TSSS;

    ///////////////////////////////////////////////////////////
     SIGN32 TSSS_drvrd(SIE_TSSS *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TSSS_drvwr(SIE_TSSS *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TSSS_reset(SIE_TSSS *p);
     SIGN32 TSSS_cmp  (SIE_TSSS *p, SIE_TSSS *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TSSS_check(p,pie,pfx,hLOG) TSSS_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TSSS_print(p,    pfx,hLOG) TSSS_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TSSS
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: tsSS.h
////////////////////////////////////////////////////////////

