/********************************************************************************
 * 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: Galois_FuncSpec.h
////////////////////////////////////////////////////////////
#ifndef Galois_FuncSpec_h
#define Galois_FuncSpec_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 TCTX                                     (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000 PROP                 (P)
///               %unsigned 2  scan                      
///                                    : Prog                      0x0
///                                    : Top                       0x1
///                                    : Bottom                    0x2
///                                    : WeavedFrm                 0x3
///                                                 ###
///                                                 * Derived MB/half-MB progressive/interlace scan mode
///                                                 ###
///               %unsigned 2  type                      
///                                    : Intra                     0x0
///                                    : Forward                   0x1
///                                    : Backward                  0x2
///                                    : Biprediction              0x3
///                                                 ###
///                                                 * Derived 8x8 block motion type
///                                                 ###
///               %unsigned 1  cbp                       
///                                    ###
///                                    * 0/1 for zero/non-zero block (N/A in non-H.264 adaptive frames)
///                                    ###
///               %unsigned 6  rBID                      
///                                    ###
///                                    * Reference buffer ID, last 1b indicates access mode:
///                                    * 0: frame/progressive or top field
///                                    * 1: bottom field
///                                    ###
///                                    : intraLuma8x8              0x3
///                                    : intraLuma4x4              0x2
///                                    : intraLuma16x16            0x1
///                                                 ###
///                                                 * For intra MB only, to specify luma prediction type
///                                                 ###
///               %unsigned 5  refL                      
///                                    ###
///                                    * Syntax 'RefListIdx' directly decoded from bit stream (field information embedded)
///                                    ###
///                                    : ipVertical                0x0
///                                    : ipHorizontal              0x1
///                                    : ipDC                      0x2
///                                    : ipDiagonalDownLeft        0x3
///                                    : ipDiagonalDownRight       0x4
///                                    : ipVerticalRight           0x5
///                                    : ipHorizontalDown          0x6
///                                    : ipVerticalLeft            0x7
///                                    : ipHorizontalUp            0x8
///                                                 ###
///                                                 * For intra MB only, to specify MxM prediction mode for luma blocks
///                                                 ###
///               %unsigned 2  dctSel                    
///                                    : 8x8                       0x0
///                                    : 8x4                       0x1
///                                    : 4x8                       0x2
///                                    : 4x4                       0x3
///                                                 ###
///                                                 * Derived IDCT partition
///                                                 ###
///               %unsigned 1  dctField                  
///                                    ###
///                                    * Non-H.264: 0/1 to use frame/field IDCT
///                                    ###
///               %unsigned 6  QP                        
///                                    ###
///                                    * Derived MB QP
///                                    * QPY for forward TCTX in HCTX, or
///                                    * QPU for backward TCTX in HCTX
///                                    ###
///               %unsigned 7  sliceID                   
///                                    ###
///                                    * Derived MB slice ID, or
///                                    * QPV for backward TCTX in HCTX
///                                    ###
///     @ 0x00004 MV                   (P)
///               %signed   16 x                         
///                                    ###
///                                    * Horizontal motion vector
///                                    ###
///               %signed   16 y                         
///                                    ###
///                                    * Vertical motion vector
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_TCTX
#define h_TCTX (){}

    #define     RA_TCTX_PROP                                   0x0000

    #define     BA_TCTX_PROP_scan                              0x0000
    #define     B16TCTX_PROP_scan                              0x0000
    #define   LSb32TCTX_PROP_scan                                 0
    #define   LSb16TCTX_PROP_scan                                 0
    #define       bTCTX_PROP_scan                              2
    #define   MSK32TCTX_PROP_scan                                 0x00000003
    #define        TCTX_PROP_scan_Prog                                      0x0
    #define        TCTX_PROP_scan_Top                                       0x1
    #define        TCTX_PROP_scan_Bottom                                    0x2
    #define        TCTX_PROP_scan_WeavedFrm                                 0x3

    #define     BA_TCTX_PROP_type                              0x0000
    #define     B16TCTX_PROP_type                              0x0000
    #define   LSb32TCTX_PROP_type                                 2
    #define   LSb16TCTX_PROP_type                                 2
    #define       bTCTX_PROP_type                              2
    #define   MSK32TCTX_PROP_type                                 0x0000000C
    #define        TCTX_PROP_type_Intra                                     0x0
    #define        TCTX_PROP_type_Forward                                   0x1
    #define        TCTX_PROP_type_Backward                                  0x2
    #define        TCTX_PROP_type_Biprediction                              0x3

    #define     BA_TCTX_PROP_cbp                               0x0000
    #define     B16TCTX_PROP_cbp                               0x0000
    #define   LSb32TCTX_PROP_cbp                                  4
    #define   LSb16TCTX_PROP_cbp                                  4
    #define       bTCTX_PROP_cbp                               1
    #define   MSK32TCTX_PROP_cbp                                  0x00000010

    #define     BA_TCTX_PROP_rBID                              0x0000
    #define     B16TCTX_PROP_rBID                              0x0000
    #define   LSb32TCTX_PROP_rBID                                 5
    #define   LSb16TCTX_PROP_rBID                                 5
    #define       bTCTX_PROP_rBID                              6
    #define   MSK32TCTX_PROP_rBID                                 0x000007E0
    #define        TCTX_PROP_rBID_intraLuma8x8                              0x3
    #define        TCTX_PROP_rBID_intraLuma4x4                              0x2
    #define        TCTX_PROP_rBID_intraLuma16x16                            0x1

    #define     BA_TCTX_PROP_refL                              0x0001
    #define     B16TCTX_PROP_refL                              0x0000
    #define   LSb32TCTX_PROP_refL                                 11
    #define   LSb16TCTX_PROP_refL                                 11
    #define       bTCTX_PROP_refL                              5
    #define   MSK32TCTX_PROP_refL                                 0x0000F800
    #define        TCTX_PROP_refL_ipVertical                                0x0
    #define        TCTX_PROP_refL_ipHorizontal                              0x1
    #define        TCTX_PROP_refL_ipDC                                      0x2
    #define        TCTX_PROP_refL_ipDiagonalDownLeft                        0x3
    #define        TCTX_PROP_refL_ipDiagonalDownRight                       0x4
    #define        TCTX_PROP_refL_ipVerticalRight                           0x5
    #define        TCTX_PROP_refL_ipHorizontalDown                          0x6
    #define        TCTX_PROP_refL_ipVerticalLeft                            0x7
    #define        TCTX_PROP_refL_ipHorizontalUp                            0x8

    #define     BA_TCTX_PROP_dctSel                            0x0002
    #define     B16TCTX_PROP_dctSel                            0x0002
    #define   LSb32TCTX_PROP_dctSel                               16
    #define   LSb16TCTX_PROP_dctSel                               0
    #define       bTCTX_PROP_dctSel                            2
    #define   MSK32TCTX_PROP_dctSel                               0x00030000
    #define        TCTX_PROP_dctSel_8x8                                     0x0
    #define        TCTX_PROP_dctSel_8x4                                     0x1
    #define        TCTX_PROP_dctSel_4x8                                     0x2
    #define        TCTX_PROP_dctSel_4x4                                     0x3

    #define     BA_TCTX_PROP_dctField                          0x0002
    #define     B16TCTX_PROP_dctField                          0x0002
    #define   LSb32TCTX_PROP_dctField                             18
    #define   LSb16TCTX_PROP_dctField                             2
    #define       bTCTX_PROP_dctField                          1
    #define   MSK32TCTX_PROP_dctField                             0x00040000

    #define     BA_TCTX_PROP_QP                                0x0002
    #define     B16TCTX_PROP_QP                                0x0002
    #define   LSb32TCTX_PROP_QP                                   19
    #define   LSb16TCTX_PROP_QP                                   3
    #define       bTCTX_PROP_QP                                6
    #define   MSK32TCTX_PROP_QP                                   0x01F80000

    #define     BA_TCTX_PROP_sliceID                           0x0003
    #define     B16TCTX_PROP_sliceID                           0x0002
    #define   LSb32TCTX_PROP_sliceID                              25
    #define   LSb16TCTX_PROP_sliceID                              9
    #define       bTCTX_PROP_sliceID                           7
    #define   MSK32TCTX_PROP_sliceID                              0xFE000000
    ///////////////////////////////////////////////////////////
    #define     RA_TCTX_MV                                     0x0004

    #define     BA_TCTX_MV_x                                   0x0004
    #define     B16TCTX_MV_x                                   0x0004
    #define   LSb32TCTX_MV_x                                      0
    #define   LSb16TCTX_MV_x                                      0
    #define       bTCTX_MV_x                                   16
    #define   MSK32TCTX_MV_x                                      0x0000FFFF

    #define     BA_TCTX_MV_y                                   0x0006
    #define     B16TCTX_MV_y                                   0x0006
    #define   LSb32TCTX_MV_y                                      16
    #define   LSb16TCTX_MV_y                                      0
    #define       bTCTX_MV_y                                   16
    #define   MSK32TCTX_MV_y                                      0xFFFF0000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_TCTX {
    ///////////////////////////////////////////////////////////
    #define   GET32TCTX_PROP_scan(r32)                         _BFGET_(r32, 1, 0)
    #define   SET32TCTX_PROP_scan(r32,v)                       _BFSET_(r32, 1, 0,v)
    #define   GET16TCTX_PROP_scan(r16)                         _BFGET_(r16, 1, 0)
    #define   SET16TCTX_PROP_scan(r16,v)                       _BFSET_(r16, 1, 0,v)

    #define   GET32TCTX_PROP_type(r32)                         _BFGET_(r32, 3, 2)
    #define   SET32TCTX_PROP_type(r32,v)                       _BFSET_(r32, 3, 2,v)
    #define   GET16TCTX_PROP_type(r16)                         _BFGET_(r16, 3, 2)
    #define   SET16TCTX_PROP_type(r16,v)                       _BFSET_(r16, 3, 2,v)

    #define   GET32TCTX_PROP_cbp(r32)                          _BFGET_(r32, 4, 4)
    #define   SET32TCTX_PROP_cbp(r32,v)                        _BFSET_(r32, 4, 4,v)
    #define   GET16TCTX_PROP_cbp(r16)                          _BFGET_(r16, 4, 4)
    #define   SET16TCTX_PROP_cbp(r16,v)                        _BFSET_(r16, 4, 4,v)

    #define   GET32TCTX_PROP_rBID(r32)                         _BFGET_(r32,10, 5)
    #define   SET32TCTX_PROP_rBID(r32,v)                       _BFSET_(r32,10, 5,v)
    #define   GET16TCTX_PROP_rBID(r16)                         _BFGET_(r16,10, 5)
    #define   SET16TCTX_PROP_rBID(r16,v)                       _BFSET_(r16,10, 5,v)

    #define   GET32TCTX_PROP_refL(r32)                         _BFGET_(r32,15,11)
    #define   SET32TCTX_PROP_refL(r32,v)                       _BFSET_(r32,15,11,v)
    #define   GET16TCTX_PROP_refL(r16)                         _BFGET_(r16,15,11)
    #define   SET16TCTX_PROP_refL(r16,v)                       _BFSET_(r16,15,11,v)

    #define   GET32TCTX_PROP_dctSel(r32)                       _BFGET_(r32,17,16)
    #define   SET32TCTX_PROP_dctSel(r32,v)                     _BFSET_(r32,17,16,v)
    #define   GET16TCTX_PROP_dctSel(r16)                       _BFGET_(r16, 1, 0)
    #define   SET16TCTX_PROP_dctSel(r16,v)                     _BFSET_(r16, 1, 0,v)

    #define   GET32TCTX_PROP_dctField(r32)                     _BFGET_(r32,18,18)
    #define   SET32TCTX_PROP_dctField(r32,v)                   _BFSET_(r32,18,18,v)
    #define   GET16TCTX_PROP_dctField(r16)                     _BFGET_(r16, 2, 2)
    #define   SET16TCTX_PROP_dctField(r16,v)                   _BFSET_(r16, 2, 2,v)

    #define   GET32TCTX_PROP_QP(r32)                           _BFGET_(r32,24,19)
    #define   SET32TCTX_PROP_QP(r32,v)                         _BFSET_(r32,24,19,v)
    #define   GET16TCTX_PROP_QP(r16)                           _BFGET_(r16, 8, 3)
    #define   SET16TCTX_PROP_QP(r16,v)                         _BFSET_(r16, 8, 3,v)

    #define   GET32TCTX_PROP_sliceID(r32)                      _BFGET_(r32,31,25)
    #define   SET32TCTX_PROP_sliceID(r32,v)                    _BFSET_(r32,31,25,v)
    #define   GET16TCTX_PROP_sliceID(r16)                      _BFGET_(r16,15, 9)
    #define   SET16TCTX_PROP_sliceID(r16,v)                    _BFSET_(r16,15, 9,v)

    #define     w32TCTX_PROP                                   {\
            UNSG32 uPROP_scan                                  :  2;\
            UNSG32 uPROP_type                                  :  2;\
            UNSG32 uPROP_cbp                                   :  1;\
            UNSG32 uPROP_rBID                                  :  6;\
            UNSG32 uPROP_refL                                  :  5;\
            UNSG32 uPROP_dctSel                                :  2;\
            UNSG32 uPROP_dctField                              :  1;\
            UNSG32 uPROP_QP                                    :  6;\
            UNSG32 uPROP_sliceID                               :  7;\
          }
    union { UNSG32 u32TCTX_PROP;
            struct w32TCTX_PROP;
          };
    ///////////////////////////////////////////////////////////
    #define   GET32TCTX_MV_x(r32)                              _BFGET_(r32,15, 0)
    #define   SET32TCTX_MV_x(r32,v)                            _BFSET_(r32,15, 0,v)
    #define   GET16TCTX_MV_x(r16)                              _BFGET_(r16,15, 0)
    #define   SET16TCTX_MV_x(r16,v)                            _BFSET_(r16,15, 0,v)

    #define   GET32TCTX_MV_y(r32)                              _BFGET_(r32,31,16)
    #define   SET32TCTX_MV_y(r32,v)                            _BFSET_(r32,31,16,v)
    #define   GET16TCTX_MV_y(r16)                              _BFGET_(r16,15, 0)
    #define   SET16TCTX_MV_y(r16,v)                            _BFSET_(r16,15, 0,v)

    #define     w32TCTX_MV                                     {\
            UNSG32 sMV_x                                       : 16;\
            UNSG32 sMV_y                                       : 16;\
          }
    union { UNSG32 u32TCTX_MV;
            struct w32TCTX_MV;
          };
    ///////////////////////////////////////////////////////////
    } SIE_TCTX;

    typedef union  T32TCTX_PROP
          { UNSG32 u32;
            struct w32TCTX_PROP;
                 } T32TCTX_PROP;
    typedef union  T32TCTX_MV
          { UNSG32 u32;
            struct w32TCTX_MV;
                 } T32TCTX_MV;
    ///////////////////////////////////////////////////////////

    typedef union  TTCTX_PROP
          { UNSG32 u32[1];
            struct {
            struct w32TCTX_PROP;
                   };
                 } TTCTX_PROP;
    typedef union  TTCTX_MV
          { UNSG32 u32[1];
            struct {
            struct w32TCTX_MV;
                   };
                 } TTCTX_MV;

    ///////////////////////////////////////////////////////////
     SIGN32 TCTX_drvrd(SIE_TCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 TCTX_drvwr(SIE_TCTX *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void TCTX_reset(SIE_TCTX *p);
     SIGN32 TCTX_cmp  (SIE_TCTX *p, SIE_TCTX *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define TCTX_check(p,pie,pfx,hLOG) TCTX_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define TCTX_print(p,    pfx,hLOG) TCTX_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: TCTX
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE HCTXPB                                   (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///     # 0x00000 fore                 
///               $TCTX                fore              REG          
///                                    ###
///                                    * Forward prediction
///                                    ###
///     @ 0x00008                      (P)
///     # 0x00008 back                 
///               $TCTX                back              REG          
///                                    ###
///                                    * Backward prediction
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:      16B, bits:     128b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_HCTXPB
#define h_HCTXPB (){}

    #define     RA_HCTXPB_fore                                 0x0000
    ///////////////////////////////////////////////////////////
    #define     RA_HCTXPB_back                                 0x0008
    ///////////////////////////////////////////////////////////

    typedef struct SIE_HCTXPB {
    ///////////////////////////////////////////////////////////
              SIE_TCTX                                         ie_fore;
    ///////////////////////////////////////////////////////////
              SIE_TCTX                                         ie_back;
    ///////////////////////////////////////////////////////////
    } SIE_HCTXPB;

    ///////////////////////////////////////////////////////////
     SIGN32 HCTXPB_drvrd(SIE_HCTXPB *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 HCTXPB_drvwr(SIE_HCTXPB *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void HCTXPB_reset(SIE_HCTXPB *p);
     SIGN32 HCTXPB_cmp  (SIE_HCTXPB *p, SIE_HCTXPB *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define HCTXPB_check(p,pie,pfx,hLOG) HCTXPB_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define HCTXPB_print(p,    pfx,hLOG) HCTXPB_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: HCTXPB
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE CacheMSG                                 (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 11 xLoc                      
///                                    ###
///                                    * Exact reference region horizontal location (in pixel)
///                                    ###
///               %unsigned 5  xPix                      
///                                    ###
///                                    * Exact reference region horizontal size (in pixel)
///                                    ###
///               %unsigned 11 yLoc                      
///                                    ###
///                                    * Exact reference region vertical location (in pixel)
///                                    ###
///               %unsigned 5  yPix                      
///                                    ###
///                                    * Exact reference region vertical size (in pixel)
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 5  xLocExp                   
///                                    ###
///                                    * Expansion horizontal offset (in pixel)
///                                    ###
///               %unsigned 3  xPixExp                   
///                                    ###
///                                    * Expansion horizontal size (in 4-pixel unit)
///                                    ###
///               %unsigned 5  yLocExp                   
///                                    ###
///                                    * Expansion vertical offset (in pixel)
///                                    ###
///               %unsigned 3  yPixExp                   
///                                    ###
///                                    * Expansion vertical size (in 4-pixel unit)
///                                    ###
///               %unsigned 6  rBID                      
///                                    ###
///                                    * Reference buffer ID, last 1b indicates access mode:
///                                    * 0: frame/progressive or top field
///                                    * 1: bottom field
///                                    ###
///               %unsigned 1  uv                        
///                                    ###
///                                    * 0/1 for Y or UV reference region
///                                    ###
///               %unsigned 1  fldMB                     
///                                    ###
///                                    * 0/1 for frame or field MB(-pair)
///                                    ###
///               %unsigned 2  hint                      
///                                    : bypass                    0x0
///                                                 ###
///                                                 * Force to bypass cache
///                                                 ###
///                                    : FrmX                      0x1
///                                                 ###
///                                                 * Use FID & xLoc to decide cache way
///                                                 ###
///                                    : FrmY                      0x2
///                                                 ###
///                                                 * Use FID & yLoc to decide cache way
///                                                 ###
///                                    : XY                        0x3
///                                                 ###
///                                                 * Use xLoc & yLoc to decide cache way
///                                                 ###
///               %unsigned 5  descID                    
///                                    ###
///                                    * Output transfer descriptor ID
///                                    * A descriptor shall have a (non-zero) semaphore ID to check not full before transfer, destination address and stride (in 4x4)
///                                    ###
///               %unsigned 1  ID                        
///                                    ###
///                                    * = 1'b0 for message type of reference fetch
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CacheMSG
#define h_CacheMSG (){}

    #define     BA_CacheMSG_xLoc                               0x0000
    #define     B16CacheMSG_xLoc                               0x0000
    #define   LSb32CacheMSG_xLoc                                  0
    #define   LSb16CacheMSG_xLoc                                  0
    #define       bCacheMSG_xLoc                               11
    #define   MSK32CacheMSG_xLoc                                  0x000007FF

    #define     BA_CacheMSG_xPix                               0x0001
    #define     B16CacheMSG_xPix                               0x0000
    #define   LSb32CacheMSG_xPix                                  11
    #define   LSb16CacheMSG_xPix                                  11
    #define       bCacheMSG_xPix                               5
    #define   MSK32CacheMSG_xPix                                  0x0000F800

    #define     BA_CacheMSG_yLoc                               0x0002
    #define     B16CacheMSG_yLoc                               0x0002
    #define   LSb32CacheMSG_yLoc                                  16
    #define   LSb16CacheMSG_yLoc                                  0
    #define       bCacheMSG_yLoc                               11
    #define   MSK32CacheMSG_yLoc                                  0x07FF0000

    #define     BA_CacheMSG_yPix                               0x0003
    #define     B16CacheMSG_yPix                               0x0002
    #define   LSb32CacheMSG_yPix                                  27
    #define   LSb16CacheMSG_yPix                                  11
    #define       bCacheMSG_yPix                               5
    #define   MSK32CacheMSG_yPix                                  0xF8000000
    ///////////////////////////////////////////////////////////

    #define     BA_CacheMSG_xLocExp                            0x0004
    #define     B16CacheMSG_xLocExp                            0x0004
    #define   LSb32CacheMSG_xLocExp                               0
    #define   LSb16CacheMSG_xLocExp                               0
    #define       bCacheMSG_xLocExp                            5
    #define   MSK32CacheMSG_xLocExp                               0x0000001F

    #define     BA_CacheMSG_xPixExp                            0x0004
    #define     B16CacheMSG_xPixExp                            0x0004
    #define   LSb32CacheMSG_xPixExp                               5
    #define   LSb16CacheMSG_xPixExp                               5
    #define       bCacheMSG_xPixExp                            3
    #define   MSK32CacheMSG_xPixExp                               0x000000E0

    #define     BA_CacheMSG_yLocExp                            0x0005
    #define     B16CacheMSG_yLocExp                            0x0004
    #define   LSb32CacheMSG_yLocExp                               8
    #define   LSb16CacheMSG_yLocExp                               8
    #define       bCacheMSG_yLocExp                            5
    #define   MSK32CacheMSG_yLocExp                               0x00001F00

    #define     BA_CacheMSG_yPixExp                            0x0005
    #define     B16CacheMSG_yPixExp                            0x0004
    #define   LSb32CacheMSG_yPixExp                               13
    #define   LSb16CacheMSG_yPixExp                               13
    #define       bCacheMSG_yPixExp                            3
    #define   MSK32CacheMSG_yPixExp                               0x0000E000

    #define     BA_CacheMSG_rBID                               0x0006
    #define     B16CacheMSG_rBID                               0x0006
    #define   LSb32CacheMSG_rBID                                  16
    #define   LSb16CacheMSG_rBID                                  0
    #define       bCacheMSG_rBID                               6
    #define   MSK32CacheMSG_rBID                                  0x003F0000

    #define     BA_CacheMSG_uv                                 0x0006
    #define     B16CacheMSG_uv                                 0x0006
    #define   LSb32CacheMSG_uv                                    22
    #define   LSb16CacheMSG_uv                                    6
    #define       bCacheMSG_uv                                 1
    #define   MSK32CacheMSG_uv                                    0x00400000

    #define     BA_CacheMSG_fldMB                              0x0006
    #define     B16CacheMSG_fldMB                              0x0006
    #define   LSb32CacheMSG_fldMB                                 23
    #define   LSb16CacheMSG_fldMB                                 7
    #define       bCacheMSG_fldMB                              1
    #define   MSK32CacheMSG_fldMB                                 0x00800000

    #define     BA_CacheMSG_hint                               0x0007
    #define     B16CacheMSG_hint                               0x0006
    #define   LSb32CacheMSG_hint                                  24
    #define   LSb16CacheMSG_hint                                  8
    #define       bCacheMSG_hint                               2
    #define   MSK32CacheMSG_hint                                  0x03000000
    #define        CacheMSG_hint_bypass                                     0x0
    #define        CacheMSG_hint_FrmX                                       0x1
    #define        CacheMSG_hint_FrmY                                       0x2
    #define        CacheMSG_hint_XY                                         0x3

    #define     BA_CacheMSG_descID                             0x0007
    #define     B16CacheMSG_descID                             0x0006
    #define   LSb32CacheMSG_descID                                26
    #define   LSb16CacheMSG_descID                                10
    #define       bCacheMSG_descID                             5
    #define   MSK32CacheMSG_descID                                0x7C000000

    #define     BA_CacheMSG_ID                                 0x0007
    #define     B16CacheMSG_ID                                 0x0006
    #define   LSb32CacheMSG_ID                                    31
    #define   LSb16CacheMSG_ID                                    15
    #define       bCacheMSG_ID                                 1
    #define   MSK32CacheMSG_ID                                    0x80000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CacheMSG {
    ///////////////////////////////////////////////////////////
    #define   GET32CacheMSG_xLoc(r32)                          _BFGET_(r32,10, 0)
    #define   SET32CacheMSG_xLoc(r32,v)                        _BFSET_(r32,10, 0,v)
    #define   GET16CacheMSG_xLoc(r16)                          _BFGET_(r16,10, 0)
    #define   SET16CacheMSG_xLoc(r16,v)                        _BFSET_(r16,10, 0,v)

    #define   GET32CacheMSG_xPix(r32)                          _BFGET_(r32,15,11)
    #define   SET32CacheMSG_xPix(r32,v)                        _BFSET_(r32,15,11,v)
    #define   GET16CacheMSG_xPix(r16)                          _BFGET_(r16,15,11)
    #define   SET16CacheMSG_xPix(r16,v)                        _BFSET_(r16,15,11,v)

    #define   GET32CacheMSG_yLoc(r32)                          _BFGET_(r32,26,16)
    #define   SET32CacheMSG_yLoc(r32,v)                        _BFSET_(r32,26,16,v)
    #define   GET16CacheMSG_yLoc(r16)                          _BFGET_(r16,10, 0)
    #define   SET16CacheMSG_yLoc(r16,v)                        _BFSET_(r16,10, 0,v)

    #define   GET32CacheMSG_yPix(r32)                          _BFGET_(r32,31,27)
    #define   SET32CacheMSG_yPix(r32,v)                        _BFSET_(r32,31,27,v)
    #define   GET16CacheMSG_yPix(r16)                          _BFGET_(r16,15,11)
    #define   SET16CacheMSG_yPix(r16,v)                        _BFSET_(r16,15,11,v)

            UNSG32 u_xLoc                                      : 11;
            UNSG32 u_xPix                                      :  5;
            UNSG32 u_yLoc                                      : 11;
            UNSG32 u_yPix                                      :  5;
    ///////////////////////////////////////////////////////////
    #define   GET32CacheMSG_xLocExp(r32)                       _BFGET_(r32, 4, 0)
    #define   SET32CacheMSG_xLocExp(r32,v)                     _BFSET_(r32, 4, 0,v)
    #define   GET16CacheMSG_xLocExp(r16)                       _BFGET_(r16, 4, 0)
    #define   SET16CacheMSG_xLocExp(r16,v)                     _BFSET_(r16, 4, 0,v)

    #define   GET32CacheMSG_xPixExp(r32)                       _BFGET_(r32, 7, 5)
    #define   SET32CacheMSG_xPixExp(r32,v)                     _BFSET_(r32, 7, 5,v)
    #define   GET16CacheMSG_xPixExp(r16)                       _BFGET_(r16, 7, 5)
    #define   SET16CacheMSG_xPixExp(r16,v)                     _BFSET_(r16, 7, 5,v)

    #define   GET32CacheMSG_yLocExp(r32)                       _BFGET_(r32,12, 8)
    #define   SET32CacheMSG_yLocExp(r32,v)                     _BFSET_(r32,12, 8,v)
    #define   GET16CacheMSG_yLocExp(r16)                       _BFGET_(r16,12, 8)
    #define   SET16CacheMSG_yLocExp(r16,v)                     _BFSET_(r16,12, 8,v)

    #define   GET32CacheMSG_yPixExp(r32)                       _BFGET_(r32,15,13)
    #define   SET32CacheMSG_yPixExp(r32,v)                     _BFSET_(r32,15,13,v)
    #define   GET16CacheMSG_yPixExp(r16)                       _BFGET_(r16,15,13)
    #define   SET16CacheMSG_yPixExp(r16,v)                     _BFSET_(r16,15,13,v)

    #define   GET32CacheMSG_rBID(r32)                          _BFGET_(r32,21,16)
    #define   SET32CacheMSG_rBID(r32,v)                        _BFSET_(r32,21,16,v)
    #define   GET16CacheMSG_rBID(r16)                          _BFGET_(r16, 5, 0)
    #define   SET16CacheMSG_rBID(r16,v)                        _BFSET_(r16, 5, 0,v)

    #define   GET32CacheMSG_uv(r32)                            _BFGET_(r32,22,22)
    #define   SET32CacheMSG_uv(r32,v)                          _BFSET_(r32,22,22,v)
    #define   GET16CacheMSG_uv(r16)                            _BFGET_(r16, 6, 6)
    #define   SET16CacheMSG_uv(r16,v)                          _BFSET_(r16, 6, 6,v)

    #define   GET32CacheMSG_fldMB(r32)                         _BFGET_(r32,23,23)
    #define   SET32CacheMSG_fldMB(r32,v)                       _BFSET_(r32,23,23,v)
    #define   GET16CacheMSG_fldMB(r16)                         _BFGET_(r16, 7, 7)
    #define   SET16CacheMSG_fldMB(r16,v)                       _BFSET_(r16, 7, 7,v)

    #define   GET32CacheMSG_hint(r32)                          _BFGET_(r32,25,24)
    #define   SET32CacheMSG_hint(r32,v)                        _BFSET_(r32,25,24,v)
    #define   GET16CacheMSG_hint(r16)                          _BFGET_(r16, 9, 8)
    #define   SET16CacheMSG_hint(r16,v)                        _BFSET_(r16, 9, 8,v)

    #define   GET32CacheMSG_descID(r32)                        _BFGET_(r32,30,26)
    #define   SET32CacheMSG_descID(r32,v)                      _BFSET_(r32,30,26,v)
    #define   GET16CacheMSG_descID(r16)                        _BFGET_(r16,14,10)
    #define   SET16CacheMSG_descID(r16,v)                      _BFSET_(r16,14,10,v)

    #define   GET32CacheMSG_ID(r32)                            _BFGET_(r32,31,31)
    #define   SET32CacheMSG_ID(r32,v)                          _BFSET_(r32,31,31,v)
    #define   GET16CacheMSG_ID(r16)                            _BFGET_(r16,15,15)
    #define   SET16CacheMSG_ID(r16,v)                          _BFSET_(r16,15,15,v)

            UNSG32 u_xLocExp                                   :  5;
            UNSG32 u_xPixExp                                   :  3;
            UNSG32 u_yLocExp                                   :  5;
            UNSG32 u_yPixExp                                   :  3;
            UNSG32 u_rBID                                      :  6;
            UNSG32 u_uv                                        :  1;
            UNSG32 u_fldMB                                     :  1;
            UNSG32 u_hint                                      :  2;
            UNSG32 u_descID                                    :  5;
            UNSG32 u_ID                                        :  1;
    ///////////////////////////////////////////////////////////
    } SIE_CacheMSG;

    ///////////////////////////////////////////////////////////
     SIGN32 CacheMSG_drvrd(SIE_CacheMSG *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CacheMSG_drvwr(SIE_CacheMSG *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CacheMSG_reset(SIE_CacheMSG *p);
     SIGN32 CacheMSG_cmp  (SIE_CacheMSG *p, SIE_CacheMSG *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CacheMSG_check(p,pie,pfx,hLOG) CacheMSG_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CacheMSG_print(p,    pfx,hLOG) CacheMSG_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CacheMSG
////////////////////////////////////////////////////////////

//////
/// 
/// $INTERFACE CacheCFG                                 (4,4)
///     # # ----------------------------------------------------------
///     @ 0x00000                      (P)
///               %unsigned 32 val                       
///                                    ###
///                                    * 32b configuration data
///                                    ###
///     @ 0x00004                      (P)
///               %unsigned 26 ptr                       
///                                    ###
///                                    * Configuration 32b word-address:
///                                    * equivalent as AHB programming byte address b[27:2]
///                                    ###
///               %unsigned 5  op                        
///                                    : CFG                       0x0
///                                                 ###
///                                                 * 0 for on-the-fly configuration message
///                                                 ###
///               %unsigned 1  ID                        
///                                    ###
///                                    * = 1'b1 for special message types
///                                    ###
///     # # ----------------------------------------------------------
/// $ENDOFINTERFACE  # size:       8B, bits:      64b, padding:     0B
////////////////////////////////////////////////////////////
#ifndef h_CacheCFG
#define h_CacheCFG (){}

    #define     BA_CacheCFG_val                                0x0000
    #define     B16CacheCFG_val                                0x0000
    #define   LSb32CacheCFG_val                                   0
    #define   LSb16CacheCFG_val                                   0
    #define       bCacheCFG_val                                32
    #define   MSK32CacheCFG_val                                   0xFFFFFFFF
    ///////////////////////////////////////////////////////////

    #define     BA_CacheCFG_ptr                                0x0004
    #define     B16CacheCFG_ptr                                0x0004
    #define   LSb32CacheCFG_ptr                                   0
    #define   LSb16CacheCFG_ptr                                   0
    #define       bCacheCFG_ptr                                26
    #define   MSK32CacheCFG_ptr                                   0x03FFFFFF

    #define     BA_CacheCFG_op                                 0x0007
    #define     B16CacheCFG_op                                 0x0006
    #define   LSb32CacheCFG_op                                    26
    #define   LSb16CacheCFG_op                                    10
    #define       bCacheCFG_op                                 5
    #define   MSK32CacheCFG_op                                    0x7C000000
    #define        CacheCFG_op_CFG                                          0x0

    #define     BA_CacheCFG_ID                                 0x0007
    #define     B16CacheCFG_ID                                 0x0006
    #define   LSb32CacheCFG_ID                                    31
    #define   LSb16CacheCFG_ID                                    15
    #define       bCacheCFG_ID                                 1
    #define   MSK32CacheCFG_ID                                    0x80000000
    ///////////////////////////////////////////////////////////

    typedef struct SIE_CacheCFG {
    ///////////////////////////////////////////////////////////
    #define   GET32CacheCFG_val(r32)                           _BFGET_(r32,31, 0)
    #define   SET32CacheCFG_val(r32,v)                         _BFSET_(r32,31, 0,v)

            UNSG32 u_val                                       : 32;
    ///////////////////////////////////////////////////////////
    #define   GET32CacheCFG_ptr(r32)                           _BFGET_(r32,25, 0)
    #define   SET32CacheCFG_ptr(r32,v)                         _BFSET_(r32,25, 0,v)

    #define   GET32CacheCFG_op(r32)                            _BFGET_(r32,30,26)
    #define   SET32CacheCFG_op(r32,v)                          _BFSET_(r32,30,26,v)
    #define   GET16CacheCFG_op(r16)                            _BFGET_(r16,14,10)
    #define   SET16CacheCFG_op(r16,v)                          _BFSET_(r16,14,10,v)

    #define   GET32CacheCFG_ID(r32)                            _BFGET_(r32,31,31)
    #define   SET32CacheCFG_ID(r32,v)                          _BFSET_(r32,31,31,v)
    #define   GET16CacheCFG_ID(r16)                            _BFGET_(r16,15,15)
    #define   SET16CacheCFG_ID(r16,v)                          _BFSET_(r16,15,15,v)

            UNSG32 u_ptr                                       : 26;
            UNSG32 u_op                                        :  5;
            UNSG32 u_ID                                        :  1;
    ///////////////////////////////////////////////////////////
    } SIE_CacheCFG;

    ///////////////////////////////////////////////////////////
     SIGN32 CacheCFG_drvrd(SIE_CacheCFG *p, UNSG32 base, SIGN32 mem, SIGN32 tst);
     SIGN32 CacheCFG_drvwr(SIE_CacheCFG *p, UNSG32 base, SIGN32 mem, SIGN32 tst, UNSG32 *pcmd);
       void CacheCFG_reset(SIE_CacheCFG *p);
     SIGN32 CacheCFG_cmp  (SIE_CacheCFG *p, SIE_CacheCFG *pie, char *pfx, void *hLOG, SIGN32 mem, SIGN32 tst);
    #define CacheCFG_check(p,pie,pfx,hLOG) CacheCFG_cmp(p,pie,pfx,(void*)(hLOG),0,0)
    #define CacheCFG_print(p,    pfx,hLOG) CacheCFG_cmp(p,0,  pfx,(void*)(hLOG),0,0)

#endif
//////
/// ENDOFINTERFACE: CacheCFG
////////////////////////////////////////////////////////////



#ifdef __cplusplus
  }
#endif
#pragma  pack()

#endif
//////
/// ENDOFFILE: Galois_FuncSpec.h
////////////////////////////////////////////////////////////

