/********************************************************************************
 * 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: FigoReg.h
////////////////////////////////////////////////////////////
#ifndef FigoReg_h
#define FigoReg_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 FigoTraceBuf            biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 entry                (RW-)
///               %unsigned 32 val                       
///                                    ###
///                                    * Register window for the trace buffer
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       4B, bits:      32b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_FigoTraceBuf
#define h_FigoTraceBuf (){}

    #define     RA_FigoTraceBuf_entry                          0x0000

    #define     BA_FigoTraceBuf_entry_val                      0x0000
    #define     B16FigoTraceBuf_entry_val                      0x0000
    #define   LSb32FigoTraceBuf_entry_val                         0
    #define   LSb16FigoTraceBuf_entry_val                         0
    #define       bFigoTraceBuf_entry_val                      32
    #define   MSK32FigoTraceBuf_entry_val                         0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    typedef struct SIE_FigoTraceBuf {
    ///////////////////////////////////////////////////////////
    #define   GET32FigoTraceBuf_entry_val(r32)                 _BFGET_(r32,31, 0)
    #define   SET32FigoTraceBuf_entry_val(r32,v)               _BFSET_(r32,31, 0,v)

    #define     w32FigoTraceBuf_entry                          {\
            UNSG32 uentry_val                                  : 32;\
          }
    union { UNSG32 u32FigoTraceBuf_entry;
            struct w32FigoTraceBuf_entry;
          };
    ///////////////////////////////////////////////////////////
    } SIE_FigoTraceBuf;

    typedef union  T32FigoTraceBuf_entry
          { UNSG32 u32;
            struct w32FigoTraceBuf_entry;
                 } T32FigoTraceBuf_entry;
    ///////////////////////////////////////////////////////////

    typedef union  TFigoTraceBuf_entry
          { UNSG32 u32[1];
            struct {
            struct w32FigoTraceBuf_entry;
                   };
                 } TFigoTraceBuf_entry;

    ///////////////////////////////////////////////////////////
     SIGN32 FigoTraceBuf_drvrd(SIE_FigoTraceBuf *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 FigoTraceBuf_drvwr(SIE_FigoTraceBuf *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void FigoTraceBuf_reset(SIE_FigoTraceBuf *p);
     SIGN32 FigoTraceBuf_cmp  (SIE_FigoTraceBuf *p, SIE_FigoTraceBuf *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define FigoTraceBuf_check(p,pie,pfx,hLOG) FigoTraceBuf_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define FigoTraceBuf_print(p,    pfx,hLOG) FigoTraceBuf_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: FigoTraceBuf
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE FigoReg                 biu              (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 figoCtrl             (P)
///               %unsigned 16 pcStartLoc                0x0
///               %unsigned 1  tBufMode                  0x0
///                                    : freeRun                   0x0
///                                                 ###
///                                                 * Trace buffer operating as ring buffer
///                                                 ###
///                                    : fifoMode                  0x1
///                                                 ###
///                                                 * Trace buffer operating as FIFO; FIGO stalls when full
///                                                 ###
///               %%        15         # Stuffing bits...
///     @ 0x00004 figoID               (P)
///               ###
///               * Processor ID, unique for each FIGO
///               ###
///               %unsigned 16 ID                        0x0
///               %%        16         # Stuffing bits...
///     @ 0x00008 figoMaxAdr           (P)
///               ###
///               * Max address for ITCM and DTCM, used to detect addr out-of-bound
///               ###
///               %unsigned 16 itcm                      0xFFFF
///               %unsigned 16 dtcm                      0xFFFF
///     @ 0x0000C figoFlags            (WOC-)
///               ###
///               * Exception flags; Figo halt when it happens; write one to clear
///               ###
///               %unsigned 1  itcmAdrOOB                0x0
///               %unsigned 1  dtcmAdrOOB                0x0
///               %unsigned 1  divideBy0                 0x0
///               %unsigned 1  traceBufFull              0x0
///               %unsigned 1  illegalIns                0x0
///               %unsigned 1  ALU64Overflow             0x0
///               %%        26         # Stuffing bits...
///     @ 0x00010 figoLastPC           (R-)
///               ###
///               * Last PC value before exception occurred
///               ###
///               %unsigned 16 val                       0x0
///               %%        16         # Stuffing bits...
///     @ 0x00014 figoTraceBuf         (RW-)
///     # 0x00014 tbuf                 
///               $FigoTraceBuf        tbuf              MEM          
///                                    ###
///                                    * Register window for the trace buffer
///                                    ###
///     @ 0x00018 figoIntr             (RW-)
///               ###
///               * Special register for FIGO to raise interrupt to CPU via vPro semaphore
///               ###
///               %unsigned 1  up                        0x0
///               %%        31         # Stuffing bits...
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      28B, bits:     120b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_FigoReg
#define h_FigoReg (){}

    #define     RA_FigoReg_figoCtrl                            0x0000

    #define     BA_FigoReg_figoCtrl_pcStartLoc                 0x0000
    #define     B16FigoReg_figoCtrl_pcStartLoc                 0x0000
    #define   LSb32FigoReg_figoCtrl_pcStartLoc                    0
    #define   LSb16FigoReg_figoCtrl_pcStartLoc                    0
    #define       bFigoReg_figoCtrl_pcStartLoc                 16
    #define   MSK32FigoReg_figoCtrl_pcStartLoc                    0x0000FFFF

    #define     BA_FigoReg_figoCtrl_tBufMode                   0x0002
    #define     B16FigoReg_figoCtrl_tBufMode                   0x0002
    #define   LSb32FigoReg_figoCtrl_tBufMode                      16
    #define   LSb16FigoReg_figoCtrl_tBufMode                      0
    #define       bFigoReg_figoCtrl_tBufMode                   1
    #define   MSK32FigoReg_figoCtrl_tBufMode                      0x00010000
    #define        FigoReg_figoCtrl_tBufMode_freeRun                        0x0
    #define        FigoReg_figoCtrl_tBufMode_fifoMode                       0x1
    ///////////////////////////////////////////////////////////
    #define     RA_FigoReg_figoID                              0x0004

    #define     BA_FigoReg_figoID_ID                           0x0004
    #define     B16FigoReg_figoID_ID                           0x0004
    #define   LSb32FigoReg_figoID_ID                              0
    #define   LSb16FigoReg_figoID_ID                              0
    #define       bFigoReg_figoID_ID                           16
    #define   MSK32FigoReg_figoID_ID                              0x0000FFFF
    ///////////////////////////////////////////////////////////
    #define     RA_FigoReg_figoMaxAdr                          0x0008

    #define     BA_FigoReg_figoMaxAdr_itcm                     0x0008
    #define     B16FigoReg_figoMaxAdr_itcm                     0x0008
    #define   LSb32FigoReg_figoMaxAdr_itcm                        0
    #define   LSb16FigoReg_figoMaxAdr_itcm                        0
    #define       bFigoReg_figoMaxAdr_itcm                     16
    #define   MSK32FigoReg_figoMaxAdr_itcm                        0x0000FFFF

    #define     BA_FigoReg_figoMaxAdr_dtcm                     0x000A
    #define     B16FigoReg_figoMaxAdr_dtcm                     0x000A
    #define   LSb32FigoReg_figoMaxAdr_dtcm                        16
    #define   LSb16FigoReg_figoMaxAdr_dtcm                        0
    #define       bFigoReg_figoMaxAdr_dtcm                     16
    #define   MSK32FigoReg_figoMaxAdr_dtcm                        0xFFFF0000
    ///////////////////////////////////////////////////////////
    #define     RA_FigoReg_figoFlags                           0x000C

    #define     BA_FigoReg_figoFlags_itcmAdrOOB                0x000C
    #define     B16FigoReg_figoFlags_itcmAdrOOB                0x000C
    #define   LSb32FigoReg_figoFlags_itcmAdrOOB                   0
    #define   LSb16FigoReg_figoFlags_itcmAdrOOB                   0
    #define       bFigoReg_figoFlags_itcmAdrOOB                1
    #define   MSK32FigoReg_figoFlags_itcmAdrOOB                   0x00000001

    #define     BA_FigoReg_figoFlags_dtcmAdrOOB                0x000C
    #define     B16FigoReg_figoFlags_dtcmAdrOOB                0x000C
    #define   LSb32FigoReg_figoFlags_dtcmAdrOOB                   1
    #define   LSb16FigoReg_figoFlags_dtcmAdrOOB                   1
    #define       bFigoReg_figoFlags_dtcmAdrOOB                1
    #define   MSK32FigoReg_figoFlags_dtcmAdrOOB                   0x00000002

    #define     BA_FigoReg_figoFlags_divideBy0                 0x000C
    #define     B16FigoReg_figoFlags_divideBy0                 0x000C
    #define   LSb32FigoReg_figoFlags_divideBy0                    2
    #define   LSb16FigoReg_figoFlags_divideBy0                    2
    #define       bFigoReg_figoFlags_divideBy0                 1
    #define   MSK32FigoReg_figoFlags_divideBy0                    0x00000004

    #define     BA_FigoReg_figoFlags_traceBufFull              0x000C
    #define     B16FigoReg_figoFlags_traceBufFull              0x000C
    #define   LSb32FigoReg_figoFlags_traceBufFull                 3
    #define   LSb16FigoReg_figoFlags_traceBufFull                 3
    #define       bFigoReg_figoFlags_traceBufFull              1
    #define   MSK32FigoReg_figoFlags_traceBufFull                 0x00000008

    #define     BA_FigoReg_figoFlags_illegalIns                0x000C
    #define     B16FigoReg_figoFlags_illegalIns                0x000C
    #define   LSb32FigoReg_figoFlags_illegalIns                   4
    #define   LSb16FigoReg_figoFlags_illegalIns                   4
    #define       bFigoReg_figoFlags_illegalIns                1
    #define   MSK32FigoReg_figoFlags_illegalIns                   0x00000010

    #define     BA_FigoReg_figoFlags_ALU64Overflow             0x000C
    #define     B16FigoReg_figoFlags_ALU64Overflow             0x000C
    #define   LSb32FigoReg_figoFlags_ALU64Overflow                5
    #define   LSb16FigoReg_figoFlags_ALU64Overflow                5
    #define       bFigoReg_figoFlags_ALU64Overflow             1
    #define   MSK32FigoReg_figoFlags_ALU64Overflow                0x00000020
    ///////////////////////////////////////////////////////////
    #define     RA_FigoReg_figoLastPC                          0x0010

    #define     BA_FigoReg_figoLastPC_val                      0x0010
    #define     B16FigoReg_figoLastPC_val                      0x0010
    #define   LSb32FigoReg_figoLastPC_val                         0
    #define   LSb16FigoReg_figoLastPC_val                         0
    #define       bFigoReg_figoLastPC_val                      16
    #define   MSK32FigoReg_figoLastPC_val                         0x0000FFFF
    ///////////////////////////////////////////////////////////
    #define     RA_FigoReg_figoTraceBuf                        0x0014
    #define     RA_FigoReg_tbuf                                0x0014
    ///////////////////////////////////////////////////////////
    #define     RA_FigoReg_figoIntr                            0x0018

    #define     BA_FigoReg_figoIntr_up                         0x0018
    #define     B16FigoReg_figoIntr_up                         0x0018
    #define   LSb32FigoReg_figoIntr_up                            0
    #define   LSb16FigoReg_figoIntr_up                            0
    #define       bFigoReg_figoIntr_up                         1
    #define   MSK32FigoReg_figoIntr_up                            0x00000001
    ///////////////////////////////////////////////////////////

    typedef struct SIE_FigoReg {
    ///////////////////////////////////////////////////////////
    #define   GET32FigoReg_figoCtrl_pcStartLoc(r32)            _BFGET_(r32,15, 0)
    #define   SET32FigoReg_figoCtrl_pcStartLoc(r32,v)          _BFSET_(r32,15, 0,v)
    #define   GET16FigoReg_figoCtrl_pcStartLoc(r16)            _BFGET_(r16,15, 0)
    #define   SET16FigoReg_figoCtrl_pcStartLoc(r16,v)          _BFSET_(r16,15, 0,v)

    #define   GET32FigoReg_figoCtrl_tBufMode(r32)              _BFGET_(r32,16,16)
    #define   SET32FigoReg_figoCtrl_tBufMode(r32,v)            _BFSET_(r32,16,16,v)
    #define   GET16FigoReg_figoCtrl_tBufMode(r16)              _BFGET_(r16, 0, 0)
    #define   SET16FigoReg_figoCtrl_tBufMode(r16,v)            _BFSET_(r16, 0, 0,v)

    #define     w32FigoReg_figoCtrl                            {\
            UNSG32 ufigoCtrl_pcStartLoc                        : 16;\
            UNSG32 ufigoCtrl_tBufMode                          :  1;\
            UNSG32 RSVDx0_b17                                  : 15;\
          }
    union { UNSG32 u32FigoReg_figoCtrl;
            struct w32FigoReg_figoCtrl;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FigoReg_figoID_ID(r32)                      _BFGET_(r32,15, 0)
    #define   SET32FigoReg_figoID_ID(r32,v)                    _BFSET_(r32,15, 0,v)
    #define   GET16FigoReg_figoID_ID(r16)                      _BFGET_(r16,15, 0)
    #define   SET16FigoReg_figoID_ID(r16,v)                    _BFSET_(r16,15, 0,v)

    #define     w32FigoReg_figoID                              {\
            UNSG32 ufigoID_ID                                  : 16;\
            UNSG32 RSVDx4_b16                                  : 16;\
          }
    union { UNSG32 u32FigoReg_figoID;
            struct w32FigoReg_figoID;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FigoReg_figoMaxAdr_itcm(r32)                _BFGET_(r32,15, 0)
    #define   SET32FigoReg_figoMaxAdr_itcm(r32,v)              _BFSET_(r32,15, 0,v)
    #define   GET16FigoReg_figoMaxAdr_itcm(r16)                _BFGET_(r16,15, 0)
    #define   SET16FigoReg_figoMaxAdr_itcm(r16,v)              _BFSET_(r16,15, 0,v)

    #define   GET32FigoReg_figoMaxAdr_dtcm(r32)                _BFGET_(r32,31,16)
    #define   SET32FigoReg_figoMaxAdr_dtcm(r32,v)              _BFSET_(r32,31,16,v)
    #define   GET16FigoReg_figoMaxAdr_dtcm(r16)                _BFGET_(r16,15, 0)
    #define   SET16FigoReg_figoMaxAdr_dtcm(r16,v)              _BFSET_(r16,15, 0,v)

    #define     w32FigoReg_figoMaxAdr                          {\
            UNSG32 ufigoMaxAdr_itcm                            : 16;\
            UNSG32 ufigoMaxAdr_dtcm                            : 16;\
          }
    union { UNSG32 u32FigoReg_figoMaxAdr;
            struct w32FigoReg_figoMaxAdr;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FigoReg_figoFlags_itcmAdrOOB(r32)           _BFGET_(r32, 0, 0)
    #define   SET32FigoReg_figoFlags_itcmAdrOOB(r32,v)         _BFSET_(r32, 0, 0,v)
    #define   GET16FigoReg_figoFlags_itcmAdrOOB(r16)           _BFGET_(r16, 0, 0)
    #define   SET16FigoReg_figoFlags_itcmAdrOOB(r16,v)         _BFSET_(r16, 0, 0,v)

    #define   GET32FigoReg_figoFlags_dtcmAdrOOB(r32)           _BFGET_(r32, 1, 1)
    #define   SET32FigoReg_figoFlags_dtcmAdrOOB(r32,v)         _BFSET_(r32, 1, 1,v)
    #define   GET16FigoReg_figoFlags_dtcmAdrOOB(r16)           _BFGET_(r16, 1, 1)
    #define   SET16FigoReg_figoFlags_dtcmAdrOOB(r16,v)         _BFSET_(r16, 1, 1,v)

    #define   GET32FigoReg_figoFlags_divideBy0(r32)            _BFGET_(r32, 2, 2)
    #define   SET32FigoReg_figoFlags_divideBy0(r32,v)          _BFSET_(r32, 2, 2,v)
    #define   GET16FigoReg_figoFlags_divideBy0(r16)            _BFGET_(r16, 2, 2)
    #define   SET16FigoReg_figoFlags_divideBy0(r16,v)          _BFSET_(r16, 2, 2,v)

    #define   GET32FigoReg_figoFlags_traceBufFull(r32)         _BFGET_(r32, 3, 3)
    #define   SET32FigoReg_figoFlags_traceBufFull(r32,v)       _BFSET_(r32, 3, 3,v)
    #define   GET16FigoReg_figoFlags_traceBufFull(r16)         _BFGET_(r16, 3, 3)
    #define   SET16FigoReg_figoFlags_traceBufFull(r16,v)       _BFSET_(r16, 3, 3,v)

    #define   GET32FigoReg_figoFlags_illegalIns(r32)           _BFGET_(r32, 4, 4)
    #define   SET32FigoReg_figoFlags_illegalIns(r32,v)         _BFSET_(r32, 4, 4,v)
    #define   GET16FigoReg_figoFlags_illegalIns(r16)           _BFGET_(r16, 4, 4)
    #define   SET16FigoReg_figoFlags_illegalIns(r16,v)         _BFSET_(r16, 4, 4,v)

    #define   GET32FigoReg_figoFlags_ALU64Overflow(r32)        _BFGET_(r32, 5, 5)
    #define   SET32FigoReg_figoFlags_ALU64Overflow(r32,v)      _BFSET_(r32, 5, 5,v)
    #define   GET16FigoReg_figoFlags_ALU64Overflow(r16)        _BFGET_(r16, 5, 5)
    #define   SET16FigoReg_figoFlags_ALU64Overflow(r16,v)      _BFSET_(r16, 5, 5,v)

    #define     w32FigoReg_figoFlags                           {\
            UNSG32 ufigoFlags_itcmAdrOOB                       :  1;\
            UNSG32 ufigoFlags_dtcmAdrOOB                       :  1;\
            UNSG32 ufigoFlags_divideBy0                        :  1;\
            UNSG32 ufigoFlags_traceBufFull                     :  1;\
            UNSG32 ufigoFlags_illegalIns                       :  1;\
            UNSG32 ufigoFlags_ALU64Overflow                    :  1;\
            UNSG32 RSVDxC_b6                                   : 26;\
          }
    union { UNSG32 u32FigoReg_figoFlags;
            struct w32FigoReg_figoFlags;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32FigoReg_figoLastPC_val(r32)                 _BFGET_(r32,15, 0)
    #define   SET32FigoReg_figoLastPC_val(r32,v)               _BFSET_(r32,15, 0,v)
    #define   GET16FigoReg_figoLastPC_val(r16)                 _BFGET_(r16,15, 0)
    #define   SET16FigoReg_figoLastPC_val(r16,v)               _BFSET_(r16,15, 0,v)

    #define     w32FigoReg_figoLastPC                          {\
            UNSG32 ufigoLastPC_val                             : 16;\
            UNSG32 RSVDx10_b16                                 : 16;\
          }
    union { UNSG32 u32FigoReg_figoLastPC;
            struct w32FigoReg_figoLastPC;
          };
    ///////////////////////////////////////////////////////////
              SIE_FigoTraceBuf                                 ie_tbuf;
    ///////////////////////////////////////////////////////////
    #define   GET32FigoReg_figoIntr_up(r32)                    _BFGET_(r32, 0, 0)
    #define   SET32FigoReg_figoIntr_up(r32,v)                  _BFSET_(r32, 0, 0,v)
    #define   GET16FigoReg_figoIntr_up(r16)                    _BFGET_(r16, 0, 0)
    #define   SET16FigoReg_figoIntr_up(r16,v)                  _BFSET_(r16, 0, 0,v)

    #define     w32FigoReg_figoIntr                            {\
            UNSG32 ufigoIntr_up                                :  1;\
            UNSG32 RSVDx18_b1                                  : 31;\
          }
    union { UNSG32 u32FigoReg_figoIntr;
            struct w32FigoReg_figoIntr;
          };
    ///////////////////////////////////////////////////////////
    } SIE_FigoReg;

    typedef union  T32FigoReg_figoCtrl
          { UNSG32 u32;
            struct w32FigoReg_figoCtrl;
                 } T32FigoReg_figoCtrl;
    typedef union  T32FigoReg_figoID
          { UNSG32 u32;
            struct w32FigoReg_figoID;
                 } T32FigoReg_figoID;
    typedef union  T32FigoReg_figoMaxAdr
          { UNSG32 u32;
            struct w32FigoReg_figoMaxAdr;
                 } T32FigoReg_figoMaxAdr;
    typedef union  T32FigoReg_figoFlags
          { UNSG32 u32;
            struct w32FigoReg_figoFlags;
                 } T32FigoReg_figoFlags;
    typedef union  T32FigoReg_figoLastPC
          { UNSG32 u32;
            struct w32FigoReg_figoLastPC;
                 } T32FigoReg_figoLastPC;
    typedef union  T32FigoReg_figoIntr
          { UNSG32 u32;
            struct w32FigoReg_figoIntr;
                 } T32FigoReg_figoIntr;
    ///////////////////////////////////////////////////////////

    typedef union  TFigoReg_figoCtrl
          { UNSG32 u32[1];
            struct {
            struct w32FigoReg_figoCtrl;
                   };
                 } TFigoReg_figoCtrl;
    typedef union  TFigoReg_figoID
          { UNSG32 u32[1];
            struct {
            struct w32FigoReg_figoID;
                   };
                 } TFigoReg_figoID;
    typedef union  TFigoReg_figoMaxAdr
          { UNSG32 u32[1];
            struct {
            struct w32FigoReg_figoMaxAdr;
                   };
                 } TFigoReg_figoMaxAdr;
    typedef union  TFigoReg_figoFlags
          { UNSG32 u32[1];
            struct {
            struct w32FigoReg_figoFlags;
                   };
                 } TFigoReg_figoFlags;
    typedef union  TFigoReg_figoLastPC
          { UNSG32 u32[1];
            struct {
            struct w32FigoReg_figoLastPC;
                   };
                 } TFigoReg_figoLastPC;
    typedef union  TFigoReg_figoIntr
          { UNSG32 u32[1];
            struct {
            struct w32FigoReg_figoIntr;
                   };
                 } TFigoReg_figoIntr;

    ///////////////////////////////////////////////////////////
     SIGN32 FigoReg_drvrd(SIE_FigoReg *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 FigoReg_drvwr(SIE_FigoReg *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void FigoReg_reset(SIE_FigoReg *p);
     SIGN32 FigoReg_cmp  (SIE_FigoReg *p, SIE_FigoReg *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define FigoReg_check(p,pie,pfx,hLOG) FigoReg_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define FigoReg_print(p,    pfx,hLOG) FigoReg_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: FigoReg
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: FigoReg.h
////////////////////////////////////////////////////////////

