/********************************************************************************
 * 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: tsi.h
////////////////////////////////////////////////////////////
#ifndef tsi_h
#define tsi_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 TSI                     biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 status               (WOC-)
///               %unsigned 1  extErr                    0x0
///                                    ###
///                                    * 1: Error signal (of TS interface) was asserted.
///                                    * 0: No error.
///                                    ###
///               %unsigned 1  alErr                     0x0
///                                    ###
///                                    * 1: Alignment error is detected internally, i.e., TSSYNC signal is asserted on a non-byte boundary.
///                                    * 0: No alignment error.
///                                    ###
///               %%        30         # Stuffing bits...
///     @ 0x00004 enable               (P)
///               %unsigned 1  extErr                    0x0
///                                    ###
///                                    * 1: Interrupt is asserted when status.extErr is high.
///                                    * 0: No interrupt is asserted because of status.extErr
///                                    ###
///               %unsigned 1  alErr                     0x0
///                                    ###
///                                    * 1: Interrupt is asserted when status.alErr is high.
///                                    * 0: No interrupt is asserted because of status.alErr
///                                    ###
///               %%        30         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:       4b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TSI
#define h_TSI (){}

    #define     RA_TSI_status                                  0x0000

    #define     BA_TSI_status_extErr                           0x0000
    #define     B16TSI_status_extErr                           0x0000
    #define   LSb32TSI_status_extErr                              0
    #define   LSb16TSI_status_extErr                              0
    #define       bTSI_status_extErr                           1
    #define   MSK32TSI_status_extErr                              0x00000001

    #define     BA_TSI_status_alErr                            0x0000
    #define     B16TSI_status_alErr                            0x0000
    #define   LSb32TSI_status_alErr                               1
    #define   LSb16TSI_status_alErr                               1
    #define       bTSI_status_alErr                            1
    #define   MSK32TSI_status_alErr                               0x00000002
    ///////////////////////////////////////////////////////////
    #define     RA_TSI_enable                                  0x0004

    #define     BA_TSI_enable_extErr                           0x0004
    #define     B16TSI_enable_extErr                           0x0004
    #define   LSb32TSI_enable_extErr                              0
    #define   LSb16TSI_enable_extErr                              0
    #define       bTSI_enable_extErr                           1
    #define   MSK32TSI_enable_extErr                              0x00000001

    #define     BA_TSI_enable_alErr                            0x0004
    #define     B16TSI_enable_alErr                            0x0004
    #define   LSb32TSI_enable_alErr                               1
    #define   LSb16TSI_enable_alErr                               1
    #define       bTSI_enable_alErr                            1
    #define   MSK32TSI_enable_alErr                               0x00000002
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TSI {
    ///////////////////////////////////////////////////////////
    #define   GET32TSI_status_extErr(r32)                      _BFGET_(r32, 0, 0)
    #define   SET32TSI_status_extErr(r32,v)                    _BFSET_(r32, 0, 0,v)
    #define   GET16TSI_status_extErr(r16)                      _BFGET_(r16, 0, 0)
    #define   SET16TSI_status_extErr(r16,v)                    _BFSET_(r16, 0, 0,v)

    #define   GET32TSI_status_alErr(r32)                       _BFGET_(r32, 1, 1)
    #define   SET32TSI_status_alErr(r32,v)                     _BFSET_(r32, 1, 1,v)
    #define   GET16TSI_status_alErr(r16)                       _BFGET_(r16, 1, 1)
    #define   SET16TSI_status_alErr(r16,v)                     _BFSET_(r16, 1, 1,v)

    #define     w32TSI_status                                  {\
            UNSG32 ustatus_extErr                              :  1;\
            UNSG32 ustatus_alErr                               :  1;\
            UNSG32 RSVDx0_b2                                   : 30;\
          }
    union { UNSG32 u32TSI_status;
            struct w32TSI_status;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32TSI_enable_extErr(r32)                      _BFGET_(r32, 0, 0)
    #define   SET32TSI_enable_extErr(r32,v)                    _BFSET_(r32, 0, 0,v)
    #define   GET16TSI_enable_extErr(r16)                      _BFGET_(r16, 0, 0)
    #define   SET16TSI_enable_extErr(r16,v)                    _BFSET_(r16, 0, 0,v)

    #define   GET32TSI_enable_alErr(r32)                       _BFGET_(r32, 1, 1)
    #define   SET32TSI_enable_alErr(r32,v)                     _BFSET_(r32, 1, 1,v)
    #define   GET16TSI_enable_alErr(r16)                       _BFGET_(r16, 1, 1)
    #define   SET16TSI_enable_alErr(r16,v)                     _BFSET_(r16, 1, 1,v)

    #define     w32TSI_enable                                  {\
            UNSG32 uenable_extErr                              :  1;\
            UNSG32 uenable_alErr                               :  1;\
            UNSG32 RSVDx4_b2                                   : 30;\
          }
    union { UNSG32 u32TSI_enable;
            struct w32TSI_enable;
          };
    ///////////////////////////////////////////////////////////
    } SIE_TSI;

    typedef union  T32TSI_status
          { UNSG32 u32;
            struct w32TSI_status;
                 } T32TSI_status;
    typedef union  T32TSI_enable
          { UNSG32 u32;
            struct w32TSI_enable;
                 } T32TSI_enable;
    ///////////////////////////////////////////////////////////

    typedef union  TTSI_status
          { UNSG32 u32[1];
            struct {
            struct w32TSI_status;
                   };
                 } TTSI_status;
    typedef union  TTSI_enable
          { UNSG32 u32[1];
            struct {
            struct w32TSI_enable;
                   };
                 } TTSI_enable;

    ///////////////////////////////////////////////////////////
     SIGN32 TSI_drvrd(SIE_TSI *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TSI_drvwr(SIE_TSI *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TSI_reset(SIE_TSI *p);
     SIGN32 TSI_cmp  (SIE_TSI *p, SIE_TSI *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TSI_check(p,pie,pfx,hLOG) TSI_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TSI_print(p,    pfx,hLOG) TSI_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TSI
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: tsi.h
////////////////////////////////////////////////////////////

