/********************************************************************************
 * 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            0x0
///                                    ###
///                                    * 00: JTAG disabled
///                                    * 01/10: need password to enable JTAG
///                                    * 11:enable JTAG
///                                    * 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 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...
///     @ 0x0002C                      (W-)
///     #         # Stuffing bytes...
///               %% 32
///     @ 0x00030 ChipID               (P)
///     # 0x00030 ChipID               
///               $OneReg              ChipID            REG       [2]
///                                    ###
///                                    * Chip ID written out by SCPU. Open for ACPU to read.
///                                    ###
///     @ 0x00038                      (W-)
///     #         # Stuffing bytes...
///               %% 64
///     @ 0x00040 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...
///     @ 0x00044                      (W-)
///     #         # Stuffing bytes...
///               %% 96
///     @ 0x00050 FeatureCtrlReg       (P)
///               ###
///               * Only SCPU has the R/W access
///               ###
///               %unsigned 32 V2G_Fuse                  0x0
///                                    ###
///                                    * V2G FeatureCtrl register, only SCPU can R/W
///                                    ###
///     # 0x00054 FeatureCtrlReg1      
///               %unsigned 32 Hantro_Fuse_Dec           0x0
///                                    ###
///                                    * Hantro FuseDec FeatureCtrl register, only SCPU can R/W
///                                    ###
///     # 0x00058 FeatureCtrlReg2      
///               %unsigned 32 Hantro_Fuse_PP            0x0
///                                    ###
///                                    * Hantro Fuse PP FeatureCtrl register, only SCPU can R/W
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      92B, bits:     425b, 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_IceEn                           0x0028

    #define     BA_TSSSWrapper_IceEn_ZspIceEn                  0x0028
    #define     B16TSSSWrapper_IceEn_ZspIceEn                  0x0028
    #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                 0x0028
    #define     B16TSSSWrapper_IceEn_Cpu0IceEn                 0x0028
    #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                 0x0028
    #define     B16TSSSWrapper_IceEn_Cpu1IceEn                 0x0028
    #define   LSb32TSSSWrapper_IceEn_Cpu1IceEn                    2
    #define   LSb16TSSSWrapper_IceEn_Cpu1IceEn                    2
    #define       bTSSSWrapper_IceEn_Cpu1IceEn                 1
    #define   MSK32TSSSWrapper_IceEn_Cpu1IceEn                    0x00000004
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_ChipID                          0x0030
    ///////////////////////////////////////////////////////////
    #define     RA_TSSSWrapper_ACPU_Access                     0x0040

    #define     BA_TSSSWrapper_ACPU_Access_TSOTP               0x0040
    #define     B16TSSSWrapper_ACPU_Access_TSOTP               0x0040
    #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           0x0040
    #define     B16TSSSWrapper_ACPU_Access_TspKeyTbl           0x0040
    #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                  0x0050

    #define     BA_TSSSWrapper_FeatureCtrlReg_V2G_Fuse         0x0050
    #define     B16TSSSWrapper_FeatureCtrlReg_V2G_Fuse         0x0050
    #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                 0x0054

    #define     BA_TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec  0x0054
    #define     B16TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_Dec  0x0054
    #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                 0x0058

    #define     BA_TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP   0x0058
    #define     B16TSSSWrapper_FeatureCtrlReg_Hantro_Fuse_PP   0x0058
    #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
    ///////////////////////////////////////////////////////////

    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;
          };
    ///////////////////////////////////////////////////////////
    #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 RSVDx28_b3                                  : 29;\
          }
    union { UNSG32 u32TSSSWrapper_IceEn;
            struct w32TSSSWrapper_IceEn;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx2C                                     [4];
    ///////////////////////////////////////////////////////////
              SIE_OneReg                                       ie_ChipID[2];
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx38                                     [8];
    ///////////////////////////////////////////////////////////
    #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 RSVDx40_b2                                  : 30;\
          }
    union { UNSG32 u32TSSSWrapper_ACPU_Access;
            struct w32TSSSWrapper_ACPU_Access;
          };
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx44                                     [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;
          };
    ///////////////////////////////////////////////////////////
    } 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_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  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_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;

    ///////////////////////////////////////////////////////////
     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          
///                                    ###
///                                    * DFT user password registers
///                                    * Accessibility:
///                                    * Always open for ACPU to have R/W access
///                                    ###
///     @ 0x35018                      (W-)
///     #         # Stuffing bytes...
///               %% 327488
///     @ 0x3F000 Wrapper              (P)
///     # 0x3F000 Wrapper              
///               $TSSSWrapper         Wrapper           REG          
///                                    ###
///                                    * wrapper registers
///                                    * Accessibility:
///                                    * Only SPU has the R/W access
///                                    ###
///     @ 0x3F05C                      (W-)
///     #         # Stuffing bytes...
///               %% 32032
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:  262144B, bits:     690b, 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_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                                  [40936];
    ///////////////////////////////////////////////////////////
              SIE_TSSSWrapper                                  ie_Wrapper;
    ///////////////////////////////////////////////////////////
             UNSG8 RSVDx3F05C                                  [4004];
    ///////////////////////////////////////////////////////////
    } 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
////////////////////////////////////////////////////////////

